diff --git a/docs/about/faq.mdx b/docs/about/faq.mdx index df9c9728..2a03e9a9 100644 --- a/docs/about/faq.mdx +++ b/docs/about/faq.mdx @@ -45,7 +45,7 @@ Try forgetting the Bluetooth connection from the Android Bluetooth Settings menu ### What version of iOS/iPadOS/macOS does the Meshtastic App Require? -The Meshtastic App on Apple Clients require the following minimum OS versions: iOS 16, iPadOS 16, and macOS 13. +The Meshtastic App on Apple Clients require the following minimum OS versions: iOS 16.2, iPadOS 16.2, and macOS 13. ### How do I get the Apple Meshtastic App? diff --git a/docs/about/overview/radio-settings.mdx b/docs/about/overview/radio-settings.mdx index 62478b5d..04663267 100644 --- a/docs/about/overview/radio-settings.mdx +++ b/docs/about/overview/radio-settings.mdx @@ -54,7 +54,7 @@ There are 104 channels defined with the standard radio preset `LongFast`. After Various data-rate options are available when configuring a channel and are inversely proportional to the theoretical range of the devices. -- **Spreading Factor** - How much we "spread" our data over time. +- **Spreading Factor (SF)** - How much we "spread" our data over time. - Each step up in Spreading Factor doubles the airtime to transmit. - Each step up in Spreading Factor adds about 2.5db extra link budget. - **Bandwidth** - How big of a slice of the spectrum we use. @@ -113,4 +113,4 @@ These channel settings may not have been tested. Use at your own discretion. Sha ## Cryptography -The pre-shared key (PSK) used by the devices can be an AES128 or AES256 sequence. Alternatively, encryption can be turned off, which may be useful if you are operating under a Ham Radio license. \ No newline at end of file +The pre-shared key (PSK) used by the devices can be an AES128 or AES256 sequence. Alternatively, encryption can be turned off, which may be useful if you are operating under a Ham Radio license. diff --git a/docs/configuration/gpio-peripherals.mdx b/docs/configuration/gpio-peripherals.mdx index e66e0446..ea8c5730 100644 --- a/docs/configuration/gpio-peripherals.mdx +++ b/docs/configuration/gpio-peripherals.mdx @@ -3,7 +3,7 @@ id: gpio-peripherals title: Configuring GPIO Peripherals sidebar_label: Setup GPIO Peripherals slug: /hardware/peripheral/ -sidebar_position: 6 +sidebar_position: 4 --- ## Remote Hardware diff --git a/docs/configuration/module-config/ambient-lighting.mdx b/docs/configuration/module-config/ambient-lighting.mdx new file mode 100644 index 00000000..02b5db59 --- /dev/null +++ b/docs/configuration/module-config/ambient-lighting.mdx @@ -0,0 +1,106 @@ +--- +id: ambient-lighting +title: Ambient Lighting Module Usage +slug: /settings/moduleconfig/ambient-lighting +sidebar_label: Ambient Lighting +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +The Ambient Lighting Module has settings for control of onboard LEDs and allows users to adjust the brightness levels and respective color levels. Initially created for the RAK14001 RGB LED module using the NCP5623 with I2C. Config options are: LED State, Current, Red Level, Green Level, and Blue Level. + +In order to use this module, make sure your devices have firmware version 2.2.5 or higher. + +## Ambient Lighting Config Values + +### LED State + +Sets the LED to on or Off + +### Current + +Sets the current for the LED output. Default is 10. + +### Red + +Sets the red LED level. Values are 0-255. + +### Green + +Sets the green LED level. Values are 0-255. + +### Blue + +Sets the blue LED level. Values are 0-255. + +## Ambient Lighting Module Client Availability + + + + + +:::info +All Ambient Lighting Module config options are available for Android in app version 2.2.3 and higher. + +1. Open the Meshtastic App +2. Navigate to: **Vertical Ellipsis (3 dots top right) > Radio Configuration > Ambient Lighting** +::: + + + + +:::info +All Ambient Lighting Module config options are available on iOS, iPadOS and macOS app versions 2.2.3 and higher at Settings > Modules > Ambient Lighting +::: + + + + +:::info + +All Ambient Lighting Module config options are available in the python CLI version 2.2.3 and higher. + +::: + +Example commands are below: + +```shell title="Set the LED to on or off" +meshtastic --set ambient_lighting.led_state 1 +meshtastic --set ambient_lighting.led_state 0 +``` + +```shell title="Set the led current to 5" +meshtastic --set ambient_lighting.current 5 +``` + +```shell title="Set the red LED brightness to 103" +meshtastic --set ambient_lighting.red 103 +``` + +```shell title="Set the green brightness to 234" +meshtastic --set ambient_lighting.green 234 +``` + +```shell title="Set the blue LED brightness to 148" +meshtastic --set ambient_lighting.blue 148 +``` + +```shell title="Get the Ambient Lighting Module Configuration" +meshtastic --get ambient_lighting +``` + + + +Not yet implemented. + + + \ No newline at end of file diff --git a/docs/configuration/module-config/detection-sensor.mdx b/docs/configuration/module-config/detection-sensor.mdx index 3d28817c..13b66840 100644 --- a/docs/configuration/module-config/detection-sensor.mdx +++ b/docs/configuration/module-config/detection-sensor.mdx @@ -71,7 +71,9 @@ All Detection Sensor Module config options are available for Android in app vers +:::info All Detection Sensor Module config options are available on iOS, iPadOS and macOS app versions 2.2.2 and higher at Settings > Modules > Detection Sensor +::: diff --git a/docs/configuration/module-config/index.mdx b/docs/configuration/module-config/index.mdx index b4335d9f..1f44bde9 100644 --- a/docs/configuration/module-config/index.mdx +++ b/docs/configuration/module-config/index.mdx @@ -10,6 +10,7 @@ Modules are included in the firmware and allow users to extend the functionality | Name | Description | | :------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| [Ambient Lighting](/docs/settings/moduleconfig/ambient-lighting) | Adjust the brightness of NCP5623 I2C RGB LEDs | | [Audio](/docs/settings/moduleconfig/audio) | Enable Support for Codec2 Voice Comms on certain devices. | | [Canned Message](/docs/settings/moduleconfig/canned-message) | Set a number of predefined messages to send out directly from the device with the use of an input device like a rotary encoder. | | [Detection Sensor](/docs/settings/moduleconfig/detection-sensor) | Configure a GPIO pin to be monitored for specified high/low status and send text alerts. | diff --git a/docs/configuration/module-config/mqtt.mdx b/docs/configuration/module-config/mqtt.mdx index 03e4dd9d..ee8126c2 100644 --- a/docs/configuration/module-config/mqtt.mdx +++ b/docs/configuration/module-config/mqtt.mdx @@ -130,8 +130,6 @@ All MQTT module config options are available for the Web UI. - - ## Connect to the Default Public Server + +### GPIO + +:::caution Note +There is no usable GPIO pin on any RAK base board except the 'big' baseboard RAK19001 without adding a RAK13002 IO module or a third party IO sensor breakout. +::: + +The RAK4631 uses symbolic labels for its I/O Pins on the module and baseboard silk screens. The following table shows the mapping of the RAK4631 GPIO pins to the corresponding Arduino pins and the MCU Port numbers. + +| RAK Pin | nRF52840 Pin | Arduino GPIO | Remark | +| ------- | ------------ | ------------ | ----------------------------------------------------------------------------------------------------- | +| IO1 | P0.17 | 17 | used to toggle power to peripheral modules using 3v3_S power rail, not available for user application | +| IO2 | P1.02 | 34 | used to power all peripheral modules, not available for user application | +| IO3 | P0.21 | 21 | +| IO4 | P0.04 | 4 | +| IO5 | P0.09 | 9 | The 'User Button' is mapped here. | +| IO6 | P0.10 | 10 | +| IO7 | P0.28 | 28 | +| SW1 | P0.01 | 1 | +| A0 | P0.04/AIN2 | A2 | +| A1 | P0.31/AIN7 | A7 | +| SPI_CS | P0.26 | 26 | + +When configuring GPIO pins in your device settings, the Arduino GPIO numbers should be used. + +```shell title="Example" +meshtastic --set external_notification.output 10 +``` + +This will use IO6 on a RAK4631 + diff --git a/docs/software/mqtt/home-assistant.mdx b/docs/software/mqtt/home-assistant.mdx new file mode 100644 index 00000000..8693bafe --- /dev/null +++ b/docs/software/mqtt/home-assistant.mdx @@ -0,0 +1,256 @@ +--- +id: home-assistant +title: Home Assistant +sidebar_label: Home Assistant +sidebar_position: 4 +--- + +### Home Assistant Integrations for Meshtastic + +Integrating Meshtastic into Home Assistant brings a new level of control and monitoring to your mesh network. On this page, we'll guide you through the process of creating Meshtastic MQTT sensor entities within Home Assistant. Whether you want to keep an eye on battery levels, environmental conditions, or even receive notifications from your mesh network, these integrations provide you with the tools to make it happen. + +:::info + +It is highly recommended to download MQTT Explorer for analyzing the JSON threads that come across the broker. This can be downloaded here: http://mqtt-explorer.com/ + +::: + +## Create Meshtastic MQTT Sensor Entities + +- Ensure your mesh unit is connected to your MQTT broker and using JSON as an output. + +- Open configuration.yaml and include the following line: + +```yaml +mqtt: !include mqtt.yaml +``` + +- Create a new text file called `mqtt.yaml` in the root directory of home assistant (the same folder as configuration.yaml). + +- Copy the following code to the mqtt.yaml file. + +### Default Node Telemetry Example + +```yaml +sensor: + +# Node #1 + + - name: "Node 1 Battery Voltage" + unique_id: "node_1__battery_voltage" + state_topic: "msh/2/json/LongFast/!67ea9400" + state_class: measurement + value_template: >- + {% if value_json.from == 4038675309 and + value_json.payload.voltage is defined and + value_json.payload.temperature is not defined %} + {{ (value_json.payload.voltage | float) | round(2) }} + {% else %} + {{ states('sensor.node_1_battery_voltage') }} + {% endif %} + unit_of_measurement: "Volts" + # Telemetry packets come in two flavors: The default node telemetry, and the I2C sensor data. + # Both packets contain "voltage" so we check for temperature to ignore the sensor packet here. + + - name: "Node 1 Battery Percent" + unique_id: "node_1_battery_percent" + state_topic: "msh/2/json/LongFast/!67ea9400" + state_class: measurement + value_template: >- + {% if value_json.from == 4038675309 and value_json.payload.battery_level is defined %} + {{ (value_json.payload.battery_level | float) | round(2) }} + {% else %} + {{ states('sensor.node_1_battery_percent') }} + {% endif %} + unit_of_measurement: "%" + + - name: "Node 1 ChUtil" + unique_id: "node_1_chutil" + state_topic: "msh/2/json/LongFast/!67ea9400" + state_class: measurement + value_template: >- + {% if value_json.from == 4038675309 and value_json.payload.channel_utilization is defined %} + {{ (value_json.payload.channel_utilization | float) | round(2) }} + {% else %} + {{ states('sensor.node_1_chutil') }} + {% endif %} + unit_of_measurement: "%" + + - name: "Node 1 AirUtilTX" + unique_id: "node_1_airutiltx" + state_topic: "msh/2/json/LongFast/!67ea9400" + state_class: measurement + value_template: >- + {% if value_json.from == 4038675309 and value_json.payload.air_util_tx is defined %} + {{ (value_json.payload.air_util_tx | float) | round(2) }} + {% else %} + {{ states('sensor.node_1_airutiltx') }} + {% endif %} + unit_of_measurement: "%" + +``` +### Telemetry Module Entities + +- If you have environmental sensors installed, create entities for these by including some or all of the following blocks: + +```yaml + + - name: "Node 1 Temperature" + unique_id: "node_1_temperature" + state_topic: "msh/2/json/LongFast/!67ea9400" + state_class: measurement + value_template: >- + {% if value_json.from == 4038675309 and value_json.payload.temperature is defined %} + {{ (((value_json.payload.temperature | float) * 1.8) +32) | round(2) }} + {% else %} + {{ states('sensor.node_1_temperature') }} + {% endif %} + unit_of_measurement: "F" +# For Celsius use: {{ (value_json.payload.temperature | float) | round(1) }} +# For Fahrenheit use: {{ (((value_json.payload.temperature | float) * 1.8) +32) | round(2) }} + + - name: "Node 1 Humidity" + unique_id: "node_1_humidity" + state_topic: "msh/2/json/LongFast/!67ea9400" + state_class: measurement + value_template: >- + {% if value_json.from == 4038675309 and value_json.payload.relative_humidity is defined %} + {{ (value_json.payload.relative_humidity | float) | round(2) }} + {% else %} + {{ states('sensor.node_1_humidity') }} + {% endif %} + unit_of_measurement: "%" + + - name: "Node 1 Pressure" + unique_id: "node_1_pressure" + state_topic: "msh/2/json/LongFast/!67ea9400" + state_class: measurement + value_template: >- + {% if value_json.from == 4038675309 and value_json.payload.barometric_pressure is defined %} + {{ (value_json.payload.barometric_pressure | float) | round(2) }} + {% else %} + {{ states('sensor.node_1_pressure') }} + {% endif %} + unit_of_measurement: "hPa" + + - name: "Node 1 Gas Resistance" + unique_id: "node_1_gas_resistance" + state_topic: "msh/2/json/LongFast/!67ea9400" + state_class: measurement + value_template: >- + {% if value_json.from == 4038675309 and value_json.payload.gas_resistance is defined %} + {{ (value_json.payload.gas_resistance | float) | round(2) }} + {% else %} + {{ states('sensor.node_1_gas_resistance') }} + {% endif %} + unit_of_measurement: "MOhms" +``` + +### Message Entities + +- For added functionality you can create an entity for messages received from a node: + +```yaml + - name: "Node 1 Messages" + unique_id: "node_1_messages" + state_topic: "msh/2/json/LongFast/!67ea9400" + value_template: >- + {% if value_json.from == 4038675309 and value_json.payload.text is defined %} + {{ value_json.payload.text }} + {% else %} + {{ states('sensor.node_1_messages') }} + {% endif %} +``` + +### Additional Entities + +Home Assistant entities can be created for any data type that is published to MQTT. For example: altitude, latitude_i, longitude_i, time, current, and neighbors. Use the templates above as a guide to create additional entities if desired. + +### Configure With Your Topic & Node ID's + +- In every entity, replace `msh/2/json/LongFast/!67ea9400` with the topic your node publishes to. In this example, `!67ea9400` refers to the node that has mqtt enabled on the mesh and is publishing to the broker. + +- In every entity replace `4038675309` with the node number of the radio you wish to monitor. In this example `4038675309` is the node on the mesh with environment sensors and telemetry that I wish to observe. Node numbers can be found by monitoring the output in MQTT Explorer, listening with the MQTT addon or by using the Python CLI with `meshtastic --info`. + +### Additional Nodes + +Copy and paste these entities then change `name`, `unique_id`, `from`, and `states` to create entities from any additional nodes' parameters: + +```yaml + - name: "Node 2 Messages" + unique_id: "node_2_messages" + state_topic: "msh/2/json/LongFast/!67ea9400" + value_template: >- + {% if value_json.from == 695318008 and value_json.payload.text is defined %} + {{ value_json.payload.text }} + {% else %} + {{ states('sensor.node_2_messages') }} + {% endif %} +``` + +### Check Configuration & Reload YAML + +- In Home Assistant, run `CHECK CONFIGURATION` in the developer tools section and then reload all yaml configuration. + +:::danger warning + +Always Check Configuration before reloading YAML or restarting Home Assistant to identify errors. + +::: + +![HA Developer Tools](/img/software/mqtt/ha_developer_tools.png) + +## Create Dashboard Cards + +### Entities Card for Telemetry + +Create a new Entities Card and select the entities you have created. + +[](/img/software/mqtt/ha_entities_card.png) + +### Logbook Card for Messaging + +The logbook card is useful to keep a record of incoming messages from the mesh. Below is an example of how the logbook card would be set up. + +[](/img/software/mqtt/ha_logbook_card.png) + + +## Trigger HA Automations + +It is possible to have Home Assistant trigger automations based on messages or events on your mesh. + +### Notifications + +This example waits for a message containing @Tropho and then sends a pop-up notification to his flip phone with the message. Optionally you can have ALL messages from the mesh sent as HA notifications to your phone. + +[](/img/software/mqtt/ha_at_tropho.png) + +Add the following code to your automations.yaml file. Be sure to modify the `topic`, `regex_search`, and `service` for your configuration. +```yaml +- alias: Meshtastic - New notification + description: any message with an @Tropho will send to mobile device + trigger: + - platform: mqtt + topic: msh/2/json/LongFast/!67ea9400 + condition: + - condition: template + value_template: "{{ trigger.payload_json.payload.text | regex_search('@Tropho') }}" + # or send ALL messages from the mesh to HA notifications + # value_template: "{{ trigger.payload_json.payload.text is defined}}" + enabled: true + action: + - service: notify.mobile_app_trophos_galaxy_z_flip5 + data: + # show the message as coming from "Meshtastic": + message: "Meshtastic: {{ trigger.payload_json.payload.text }}" + # or show the device id instead: + # message: "{{ trigger.payload_json.from }}: {{ trigger.payload_json.payload.text }}" + - delay: + hours: 0 + minutes: 0 + seconds: 30 + milliseconds: 0 + mode: single +``` + +This same type of automation is very useful to trigger other actions in Home Assistant. For example, you could turn on a fan when the temperature reaches a certain value, or a play a sound on a speaker when a new message is received. \ No newline at end of file diff --git a/docs/software/mqtt/index.mdx b/docs/software/mqtt/index.mdx index edaf7c66..f2640ac6 100644 --- a/docs/software/mqtt/index.mdx +++ b/docs/software/mqtt/index.mdx @@ -140,3 +140,5 @@ An existing public [MQTT broker](https://mosquitto.org) will be the default for - [Sending/receiving messages on mosquitto server using python](/docs/software/mqtt/python.mdx) - [Using MQTT with Node-RED](/docs/software/mqtt/nodered.mdx) + +- [Using MQTT with Home Assistant](/docs/software/mqtt/home-assistant.mdx) diff --git a/package.json b/package.json index 481c8d67..c03cecf6 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ }, "devDependencies": { "@docusaurus/module-type-aliases": "3.0.0-alpha.0", + "@tailwindcss/typography": "^0.5.10", "@tsconfig/docusaurus": "^2.0.0", "@types/node": "^20.6.0", "@types/react": "^18.2.21", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f7c57f22..e0102654 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,6 +64,9 @@ devDependencies: '@docusaurus/module-type-aliases': specifier: 3.0.0-alpha.0 version: 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) + '@tailwindcss/typography': + specifier: ^0.5.10 + version: 0.5.10(tailwindcss@3.3.3) '@tsconfig/docusaurus': specifier: ^2.0.0 version: 2.0.0 @@ -226,7 +229,6 @@ packages: /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - dev: false /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} @@ -2509,12 +2511,10 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: false /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: false /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -2522,7 +2522,6 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: false /@pnpm/config.env-replace@1.1.0: resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} @@ -2786,6 +2785,18 @@ packages: defer-to-connect: 2.0.1 dev: false + /@tailwindcss/typography@0.5.10(tailwindcss@3.3.3): + resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + postcss-selector-parser: 6.0.10 + tailwindcss: 3.3.3 + dev: true + /@trysound/sax@0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -3321,7 +3332,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -3329,11 +3339,9 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: false /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: false /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -3462,7 +3470,6 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: false /base16@1.0.0: resolution: {integrity: sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==} @@ -3483,7 +3490,6 @@ packages: /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: false /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} @@ -3551,14 +3557,12 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: false /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: false /browserslist@4.21.10: resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} @@ -3623,7 +3627,6 @@ packages: /camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - dev: false /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} @@ -3726,7 +3729,6 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: false /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} @@ -3836,7 +3838,6 @@ packages: /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: false /commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} @@ -3880,7 +3881,6 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: false /config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -4161,7 +4161,6 @@ packages: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - dev: false /cssnano-preset-advanced@5.3.10(postcss@8.4.29): resolution: {integrity: sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==} @@ -4675,7 +4674,6 @@ packages: /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: false /diff@5.1.0: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} @@ -4691,7 +4689,6 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: false /dns-equal@1.0.0: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} @@ -5059,7 +5056,6 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: false /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -5074,7 +5070,6 @@ packages: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 - dev: false /faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} @@ -5137,7 +5132,6 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: false /finalhandler@1.2.0: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} @@ -5291,19 +5285,16 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: false /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: false optional: true /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: false /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -5337,14 +5328,12 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: false /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: false /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -5358,7 +5347,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: false /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -5502,7 +5490,6 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: false /hast-util-from-parse5@7.1.2: resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} @@ -5842,7 +5829,6 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: false /inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} @@ -5850,7 +5836,6 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} @@ -5910,7 +5895,6 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - dev: false /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} @@ -5928,7 +5912,6 @@ packages: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} dependencies: has: 1.0.3 - dev: false /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -5948,7 +5931,6 @@ packages: /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: false /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -5960,7 +5942,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: false /is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} @@ -5982,7 +5963,6 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: false /is-obj@1.0.1: resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} @@ -6111,7 +6091,6 @@ packages: /jiti@1.20.0: resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} hasBin: true - dev: false /joi@17.10.1: resolution: {integrity: sha512-vIiDxQKmRidUVp8KngT8MZSOcmRVm2zV7jbMjNYWuHcJWI0bUck3nRTGQjhpPlQenIQIBC5Vp9AhcnHbWQqafw==} @@ -6233,11 +6212,9 @@ packages: /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - dev: false /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: false /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} @@ -6283,6 +6260,10 @@ packages: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: false + /lodash.castarray@4.4.0: + resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} + dev: true + /lodash.curry@4.1.1: resolution: {integrity: sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==} dev: false @@ -6307,10 +6288,18 @@ packages: resolution: {integrity: sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==} dev: false + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: false + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + /lodash.pullall@4.2.0: resolution: {integrity: sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==} dev: false @@ -6596,7 +6585,6 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: false /mermaid@9.4.3: resolution: {integrity: sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw==} @@ -6976,7 +6964,6 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: false /mime-db@1.33.0: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} @@ -7039,7 +7026,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: false /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -7081,13 +7067,11 @@ packages: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - dev: false /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: false /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} @@ -7137,7 +7121,6 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: false /normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} @@ -7178,7 +7161,6 @@ packages: /object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: false /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} @@ -7219,7 +7201,6 @@ packages: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: false /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -7407,7 +7388,6 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: false /path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} @@ -7420,7 +7400,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: false /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -7455,17 +7434,14 @@ packages: /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: false /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: false /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - dev: false /pkg-dir@7.0.0: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} @@ -7571,7 +7547,6 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.4 - dev: false /postcss-js@4.0.1(postcss@8.4.29): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} @@ -7581,7 +7556,6 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.29 - dev: false /postcss-load-config@4.0.1(postcss@8.4.29): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} @@ -7598,7 +7572,6 @@ packages: lilconfig: 2.1.0 postcss: 8.4.29 yaml: 2.3.2 - dev: false /postcss-loader@7.3.3(postcss@8.4.29)(typescript@5.2.2)(webpack@5.88.2): resolution: {integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==} @@ -7744,7 +7717,6 @@ packages: dependencies: postcss: 8.4.29 postcss-selector-parser: 6.0.13 - dev: false /postcss-normalize-charset@5.1.0(postcss@8.4.29): resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} @@ -7879,13 +7851,20 @@ packages: postcss-value-parser: 4.2.0 dev: false + /postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + /postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: false /postcss-sort-media-queries@4.4.1(postcss@8.4.29): resolution: {integrity: sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==} @@ -7920,7 +7899,6 @@ packages: /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: false /postcss-zindex@5.1.0(postcss@8.4.29): resolution: {integrity: sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==} @@ -7938,7 +7916,6 @@ packages: nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: false /pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} @@ -8034,7 +8011,6 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: false /queue@6.0.2: resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} @@ -8274,7 +8250,6 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 - dev: false /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -8302,7 +8277,6 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: false /reading-time@1.5.0: resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} @@ -8497,7 +8471,6 @@ packages: is-core-module: 2.13.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: false /responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} @@ -8514,7 +8487,6 @@ packages: /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: false /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -8560,7 +8532,6 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: false /rw@1.3.3: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} @@ -8844,7 +8815,6 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: false /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -9032,7 +9002,6 @@ packages: mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 - dev: false /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -9057,7 +9026,6 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: false /svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} @@ -9116,7 +9084,6 @@ packages: sucrase: 3.34.0 transitivePeerDependencies: - ts-node - dev: false /tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} @@ -9169,13 +9136,11 @@ packages: engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 - dev: false /thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 - dev: false /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} @@ -9199,7 +9164,6 @@ packages: engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: false /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} @@ -9230,7 +9194,6 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: false /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -9492,7 +9455,6 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false /utila@0.4.0: resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} @@ -9811,7 +9773,6 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: false /write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} @@ -9876,7 +9837,6 @@ packages: /yaml@2.3.2: resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} engines: {node: '>= 14'} - dev: false /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} diff --git a/src/components/BaseCSS.tsx b/src/components/BaseCSS.tsx new file mode 100644 index 00000000..ca0d70e5 --- /dev/null +++ b/src/components/BaseCSS.tsx @@ -0,0 +1,8 @@ +// class .markdown needs to be called or it is removed from the build +import React from "react"; + +const BaseCSS = () => { + return
Shid Fard
; +}; + +export default BaseCSS; diff --git a/static/img/modules/mqtt/android_channel_sm.png b/static/img/modules/mqtt/android_channel_sm.png index a55b11c1..9f0d14e6 100644 Binary files a/static/img/modules/mqtt/android_channel_sm.png and b/static/img/modules/mqtt/android_channel_sm.png differ diff --git a/static/img/modules/mqtt/android_mqtt_proxy_sm.png b/static/img/modules/mqtt/android_mqtt_proxy_sm.png index f79edeba..d0091ff4 100644 Binary files a/static/img/modules/mqtt/android_mqtt_proxy_sm.png and b/static/img/modules/mqtt/android_mqtt_proxy_sm.png differ diff --git a/static/img/modules/mqtt/android_mqtt_sm.png b/static/img/modules/mqtt/android_mqtt_sm.png index 794e4adc..ee74140f 100644 Binary files a/static/img/modules/mqtt/android_mqtt_sm.png and b/static/img/modules/mqtt/android_mqtt_sm.png differ diff --git a/static/img/modules/mqtt/android_network_sm.png b/static/img/modules/mqtt/android_network_sm.png index dbd1e8ae..2327109e 100644 Binary files a/static/img/modules/mqtt/android_network_sm.png and b/static/img/modules/mqtt/android_network_sm.png differ diff --git a/static/img/modules/mqtt/apple_channel_sm.png b/static/img/modules/mqtt/apple_channel_sm.png index 266f44e5..645ef407 100644 Binary files a/static/img/modules/mqtt/apple_channel_sm.png and b/static/img/modules/mqtt/apple_channel_sm.png differ diff --git a/static/img/modules/mqtt/apple_mqtt_1_proxy_sm.png b/static/img/modules/mqtt/apple_mqtt_1_proxy_sm.png index 2fb5d3d9..626713ed 100644 Binary files a/static/img/modules/mqtt/apple_mqtt_1_proxy_sm.png and b/static/img/modules/mqtt/apple_mqtt_1_proxy_sm.png differ diff --git a/static/img/modules/mqtt/apple_mqtt_1_sm.png b/static/img/modules/mqtt/apple_mqtt_1_sm.png index 8440f2d4..c4952382 100644 Binary files a/static/img/modules/mqtt/apple_mqtt_1_sm.png and b/static/img/modules/mqtt/apple_mqtt_1_sm.png differ diff --git a/static/img/modules/mqtt/apple_mqtt_2_sm.png b/static/img/modules/mqtt/apple_mqtt_2_sm.png index 5232106e..fc088ab5 100644 Binary files a/static/img/modules/mqtt/apple_mqtt_2_sm.png and b/static/img/modules/mqtt/apple_mqtt_2_sm.png differ diff --git a/static/img/modules/mqtt/apple_network_sm.png b/static/img/modules/mqtt/apple_network_sm.png index 76fb42dd..52bccea5 100644 Binary files a/static/img/modules/mqtt/apple_network_sm.png and b/static/img/modules/mqtt/apple_network_sm.png differ diff --git a/static/img/modules/mqtt/web_channel_sm.png b/static/img/modules/mqtt/web_channel_sm.png index e8c7b33a..e8654fd9 100644 Binary files a/static/img/modules/mqtt/web_channel_sm.png and b/static/img/modules/mqtt/web_channel_sm.png differ diff --git a/static/img/modules/mqtt/web_mqtt_proxy_sm.png b/static/img/modules/mqtt/web_mqtt_proxy_sm.png index 8d103e54..8eb36e30 100644 Binary files a/static/img/modules/mqtt/web_mqtt_proxy_sm.png and b/static/img/modules/mqtt/web_mqtt_proxy_sm.png differ diff --git a/static/img/modules/mqtt/web_mqtt_sm.png b/static/img/modules/mqtt/web_mqtt_sm.png index aee52cc7..f2c9a22d 100644 Binary files a/static/img/modules/mqtt/web_mqtt_sm.png and b/static/img/modules/mqtt/web_mqtt_sm.png differ diff --git a/static/img/modules/mqtt/web_network_sm.png b/static/img/modules/mqtt/web_network_sm.png index ebba45f5..867ffb60 100644 Binary files a/static/img/modules/mqtt/web_network_sm.png and b/static/img/modules/mqtt/web_network_sm.png differ diff --git a/static/img/software/mqtt/ha_at_tropho.png b/static/img/software/mqtt/ha_at_tropho.png new file mode 100644 index 00000000..9855060b Binary files /dev/null and b/static/img/software/mqtt/ha_at_tropho.png differ diff --git a/static/img/software/mqtt/ha_developer_tools.png b/static/img/software/mqtt/ha_developer_tools.png new file mode 100644 index 00000000..45287fd2 Binary files /dev/null and b/static/img/software/mqtt/ha_developer_tools.png differ diff --git a/static/img/software/mqtt/ha_entities_card.png b/static/img/software/mqtt/ha_entities_card.png new file mode 100644 index 00000000..0be11c75 Binary files /dev/null and b/static/img/software/mqtt/ha_entities_card.png differ diff --git a/static/img/software/mqtt/ha_logbook_card.png b/static/img/software/mqtt/ha_logbook_card.png new file mode 100644 index 00000000..e99edee7 Binary files /dev/null and b/static/img/software/mqtt/ha_logbook_card.png differ diff --git a/tailwind.config.ts b/tailwind.config.ts index 3ade39e2..3e27a0eb 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,4 +1,5 @@ import type { Config } from "tailwindcss"; +import typography from '@tailwindcss/typography' export default { content: ["./src/**/*.{js,jsx,ts,tsx}"], @@ -18,5 +19,5 @@ export default { }, }, }, - plugins: [], + plugins: [typography()], } satisfies Config;