diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 34c6e9e8..f1973bc3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,8 +21,5 @@ jobs: - name: Install Dependencies run: pnpm install - - name: Trunk Check - uses: trunk-io/trunk-action@v1 - - name: Build Site run: pnpm build diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml deleted file mode 100644 index cf8f1bcc..00000000 --- a/.github/workflows/nightly.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Nightly -on: - schedule: - - cron: 0 8 * * 1-5 - workflow_dispatch: {} - -jobs: - trunk_check: - name: Trunk Check Upload - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup pnpm - uses: pnpm/action-setup@v2.2.1 - with: - version: latest - - - name: Install Dependencies - run: pnpm install - - - name: Trunk Check - uses: trunk-io/trunk-action@v1 - with: - trunk-token: ${{ secrets.TRUNK_TOKEN }} diff --git a/.trunk/.gitignore b/.trunk/.gitignore deleted file mode 100644 index cf2f2547..00000000 --- a/.trunk/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*out -*logs -*actions -*notifications -plugins -user_trunk.yaml -user.yaml diff --git a/.trunk/configs/.markdownlint.yaml b/.trunk/configs/.markdownlint.yaml deleted file mode 100644 index fb940393..00000000 --- a/.trunk/configs/.markdownlint.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Autoformatter friendly markdownlint config (all formatting rules disabled) -default: true -blank_lines: false -bullet: false -html: false -indentation: false -line_length: false -spaces: false -url: false -whitespace: false diff --git a/.trunk/configs/.shellcheckrc b/.trunk/configs/.shellcheckrc deleted file mode 100644 index 8c7b1ada..00000000 --- a/.trunk/configs/.shellcheckrc +++ /dev/null @@ -1,7 +0,0 @@ -enable=all -source-path=SCRIPTDIR -disable=SC2154 - -# If you're having issues with shellcheck following source, disable the errors via: -# disable=SC1090 -# disable=SC1091 diff --git a/.trunk/configs/rome.json b/.trunk/configs/rome.json deleted file mode 100644 index 639e43cb..00000000 --- a/.trunk/configs/rome.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$schema": "../../node_modules/rome/configuration_schema.json", - "formatter": { - "enabled": true, - "indentStyle": "space", - "indentSize": 2 - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true - } - }, - "organizeImports": { - "enabled": true - } -} diff --git a/.trunk/configs/svgo.config.js b/.trunk/configs/svgo.config.js deleted file mode 100644 index 17e2ff67..00000000 --- a/.trunk/configs/svgo.config.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - plugins: [ - { - name: "preset-default", - params: { - overrides: { - removeViewBox: false, // https://github.com/svg/svgo/issues/1128 - sortAttrs: true, - removeOffCanvasPaths: true, - }, - }, - }, - ], -}; diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml deleted file mode 100644 index b9eb3ecb..00000000 --- a/.trunk/trunk.yaml +++ /dev/null @@ -1,25 +0,0 @@ -version: 0.1 -cli: - version: 1.3.1 -plugins: - sources: - - id: trunk - ref: v0.0.8 - uri: https://github.com/trunk-io/plugins -lint: - disabled: - - eslint - - prettier - enabled: - - rome@12.0.0 - - markdownlint@0.33.0 - - actionlint@1.6.22 - - gitleaks@8.15.2 - - git-diff-check - - shellcheck@0.9.0 - - shfmt@3.5.0 - - svgo@3.0.2 -runtimes: - enabled: - - go@1.18.3 - - node@18.12.1 diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 29d43383..699ed733 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,3 @@ { - "recommendations": ["trunk.io"] + "recommendations": ["biomejs.biome"] } diff --git a/.vscode/settings.json b/.vscode/settings.json index b3568f7e..a71cfe36 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,4 @@ { - "editor.formatOnSave": true, - "editor.defaultFormatter": "trunk.io", - "files.associations": { - "*.mdx": "markdown" - } -} + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true +} \ No newline at end of file diff --git a/biome.json b/biome.json new file mode 100644 index 00000000..c155f232 --- /dev/null +++ b/biome.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.3.3/schema.json", + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2 + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "all": true + + } + } +} diff --git a/docs/about/contributing.mdx b/docs/about/contributing.mdx index 94f77693..cd4cd29d 100644 --- a/docs/about/contributing.mdx +++ b/docs/about/contributing.mdx @@ -33,7 +33,7 @@ The [firmware repo](https://github.com/meshtastic/firmware) is where all of the ### Firmware Modules -[Modules](/docs/settings/moduleconfig) extend device and mesh functionality beyond core functions. These are also implemented mainly in the firmware repo above. Typically, you would add functions in the protobufs repo and the device repo to implement module functionality. You probably also want to have some client or device, use or interact with the module. This is where Device Interface support comes into play. +[Modules](/docs/configuration/module) extend device and mesh functionality beyond core functions. These are also implemented mainly in the firmware repo above. Typically, you would add functions in the protobufs repo and the device repo to implement module functionality. You probably also want to have some client or device, use or interact with the module. This is where Device Interface support comes into play. ### CLI Apps (Device Interface) diff --git a/docs/about/faq.mdx b/docs/about/faq.mdx index df9c9728..ae760b95 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? @@ -117,7 +117,7 @@ Once the node wakes up from sleep, your phone will relay any delayed messages th ### How can I tell the device not to sleep? -See [Device Power Configuration](/docs/settings/config/power) options. +See [Device Power Configuration](/docs/configuration/radio/power) options. ### I am in Europe and my device seems to stop transmitting after a while, what is going on? @@ -141,7 +141,7 @@ If you use your HAM radio license with Meshtastic, consider both the privileges #### Privileges - Increased Transmit Power - - Up to 1500W transmit power! [FCC Part 97.313](https://www.ecfr.gov/current/title-47/chapter-I/subchapter-D/part-97/subpart-D/section-97.313) + - Up to 10W transmit power in the United States! [47 CFR 97.313(j)](https://www.ecfr.gov/current/title-47/chapter-I/subchapter-D/part-97#p-97.313(j)) - Higher Gain Antennas #### Restrictions @@ -187,7 +187,7 @@ Modules are features that expand the basic device functionality and/or integrate ### What modules do we have available? -A list of available modules is available [here](/docs/settings/moduleconfig). +A list of available modules is available [here](/docs/configuration/module). ### I'd like to write a module. How do I get started? diff --git a/docs/about/overview/encryption.mdx b/docs/about/overview/encryption.mdx index d86bdb42..5c830607 100644 --- a/docs/about/overview/encryption.mdx +++ b/docs/about/overview/encryption.mdx @@ -6,33 +6,37 @@ slug: /overview/encryption sidebar_position: 3 --- -Cryptography is tricky, so we've tried to 'simply' apply standard crypto solutions to our implementation. However, the project developers are not cryptography experts. Therefore we ask two things: -- If you are a cryptography expert, please review these notes and our questions below. Can you help us by reviewing our notes below and offering advice? We will happily give as much or as little credit as you wish ;-). -- Consider our existing solution 'alpha' and probably fairly secure against a not particularly aggressive adversary (but we can't yet make a more confident statement). +Cryptography is tricky, so we've tried to 'simply' apply standard crypto solutions to our implementation. However, the project developers are not cryptography experts. -Always keep in mind [xkcd's note on encryption](https://xkcd.com/538). - -## Summary of strengths/weaknesses of our current implementation - -Based on comments from reviewers (see below), here's some tips for usage of these radios. So you can know the level of protection offered: +Based on comments from reviewers (see below), here are some tips for usage of these radios, so that you may know the level of protection offered: - It is pretty likely that the AES256 security is implemented 'correctly' and an observer will not be able to decode your messages. - Warning: If an attacker is able to get one of the radios in their possession, they could either a) extract the channel key from that device or b) use that radio to listen to new communications. - Warning: If an attacker is able to get the "Channel QR code/URL" that you share with others - that attacker could then be able to read any messages sent on the channel (either tomorrow or in the past - if they kept a raw copy of those broadcast packets) -Possible future areas of work (if there is enough interest - post in our [forum](https://meshtastic.discourse.group) if you want this): +The current implementation provides optional confidentiality to members of a configured network: -1. Optionally requiring users to provide a PIN to regain access to the mesh. This could be based on: intentionally locking the device, time since last use, or any member could force all members to re-authenticate, -2. Until a device re-authenticates, any other access via BLE or USB would be blocked (this would protect against attackers who are not prepared to write custom software to extract and reverse engineer meshtastic flash memory) -3. Turning on read-back protection in the device fuse-bits (this would extend protection in #2 to block all but **extremely** advanced attacks involving chip disassembly) -4. Time limiting keys used for message transmission and automatically cycling them on a schedule. This would protect past messages from being decoded even if an attacker learns the current key. +- Encryption is implemented in devices/nodes with network-wide encryption keys. +- Encryption is optional and is turned off when devices are in 'Ham mode'. +- There is no encryption supported in the clients (iOS, Android) to facilitate distribution as mass market software. +- Pairing from client-to-device is by: + - direct USB cable + - BT pairing +- Devices are 'promiscuous' and will pair with any near-by client. Network confidentiality requires physical protection of all nodes. -### Notes for reviewers +Always keep in mind [xkcd's note on encryption](https://xkcd.com/538). + + +- If you are a cryptography expert, please review these notes and our questions below. Can you help us by reviewing our notes below and offering advice? We will happily give as much or as little credit as you wish ;-). +- Consider our existing solution 'alpha' and probably fairly secure against a not particularly aggressive adversary (but we can't yet make a more confident statement). + + +## Notes for reviewers If you are reviewing our implementation, this is a brief statement of our method. -- We do all crypto at the SubPacket (payload) level only, so that all meshtastic nodes will route for others - even those channels which are encrypted with a different key. +- We do all crypto at the SubPacket (payload) level only, so that all Meshtastic nodes will route for others - even those channels which are encrypted with a different key. - Mostly based on reading [Wikipedia]() and using the modes the ESP32 provides support for in hardware. - We use AES256-CTR as a stream cypher (with zero padding on the last BLOCK) because it is well supported with hardware acceleration. - Our AES key is 128 or 256 bits, shared as part of the 'Channel' specification. @@ -53,61 +57,4 @@ I'm assuming that meshtastic is being used to hike in places where someone capab - I think the bigger encryption question is "what does the encryption need to do"? As it stands, an attacker who has yet to capture any of the devices cannot reasonably capture text or location data. An attacker who captures any device in the channel/mesh can read everything going to that device, everything stored on that device, and any other communication within the channel that they captured in encrypted form. If that capability basically matches your expectations, it is suitable for whatever adventures this was intended for, then, based on information publicly available or widely disclosed, the encryption is good. If those properties are distressing (like, device history is deliberately limited and you don't want a device captured today to endanger the information sent over the channel yesterday) we could talk about ways to achieve that (most likely synchronizing time and replacing the key with its own SHA256 every X hours, and ensuring the old key is not retained unnecessarily). - Two other things to keep in mind are that AES-CTR does not itself provide authenticity (e.g. an attacker can flip bits in replaying data and scramble the resulting plaintext), and that the current scheme gives some hints about transmission in the size. So, if you worry about an adversary deliberately messing-up messages or knowing the length of a text message, it looks like those might be possible. -I'm guessing that the network behaves somewhat like a store-and-forward network - or, at least, that the goal is to avoid establishing a two-way connection to transmit data. I'm afraid I haven't worked with mesh networks much, but remember studying them briefly in school about ten years ago. - -## Phased Proposal for the Meshtastic Security Framework - -### Phase 1 - Fixed network encryption with AES-CTR - -The current implementation provides optional confidentiality to members of a configured network: - -- Encryption is implemented in devices/nodes with network-wide encryption keys. -- Encryption is optional and is turned off when devices are in 'Ham mode'. -- There is no encryption supported in the clients (iOS, Android) to facilitate distribution as mass market software. -- Pairing from client-to-device is by: - - direct USB cable - - BT pairing -- Devices are 'promiscuous' and will pair with any near-by client. Network confidentiality requires physical protection of all nodes. - -### Phase 2 - Strong device and client identity - -**Phase 2 security goals:** - -- Know who sent a message (strong binding of messages to a particular node and/or terminal device) - - This would be an optional feature for a message -- Optionally enforce identity based restrictions on some actions performed at nodes and/or clients -- Optional support of strong pairing of a client to a device/node and restrict ability to manage and receive messages based on the pairing. - - The BT paring and the cryptographic paring are separate (to simplify phase 1 deployment and testing) -- Above features should be architected to be ‘cryptographically strong’ and algorithm agile. - -**Phase 2 Proposed mechanisms:** - -- Proposed initial algorithms - - Ed25519 for signatures based on NaCl libraries and iOS support for Ed25519 -- Clients and nodes to generate local identity Ed25519 keys -- Devices maintain knowledge of owner public key -- Devices maintain knowledge of some peers public keys and associated information (name, etc.) -- Experimental protobuf message type with - - cipher suite indicator (csi) - - wrapped data using a cipher suite identifier to indicate use of Ed25519 wrapping identified algorithms. - Wrapped data to contain any of the existing message types. - - initial ‘cipher suite’ **only** signs a message - - new signed/authenticated messages to: - - device->client: provide ownership status of device (owner is identified by a public key) - - client->device: set owner key (must be existing device owner or owner null) - - any->all. Broadcast public key and associated info (crude initial key distribution) - -### Phase 3 and 3+: - -- Device/node e2e message confidentiality (1-to-1) - - NO client side encryption - - All encryption turned off for a network in 'Ham mode' -- Protect messages sent over LoRa from eavesdroppers outside of a well identified group - - multicast group key distribution / discovery (1-to-n) -- Privacy - - BT MAC layer address privatization - - Node address privatization (Use use if based on device public key and schedule based aliasing) - - Private peer discovery -- Private service announcement and discovery -- Device/node security (hardening key storage, tamper resistance, side channel protection, etc.) -- Public key pairing process for client-to-device also sets up BT (no BT pin) +I'm guessing that the network behaves somewhat like a store-and-forward network - or, at least, that the goal is to avoid establishing a two-way connection to transmit data. I'm afraid I haven't worked with mesh networks much, but remember studying them briefly in school about ten years ago. \ No newline at end of file diff --git a/docs/about/overview/mesh-alg.mdx b/docs/about/overview/mesh-alg.mdx index a621c29a..2b9f9c2d 100644 --- a/docs/about/overview/mesh-alg.mdx +++ b/docs/about/overview/mesh-alg.mdx @@ -36,7 +36,8 @@ This layer is conventional non-reliable LoRa packet transmission. A packet gener | 0x08 | 4 bytes | Integer | Packet Header: The sending node's unique packet ID for this packet. | | 0x0C | 1 byte | Bits | Packet Header: Flags. See the [header flags](#packet-header-flags) for usage. | | 0x0D | 1 byte | Bits | Packet Header: Channel hash. Used as hint for decryption for the receiver. | -| 0x0E | Max. 237 bytes (excl. protobuf overhead) | Bytes | Actual packet data. Unused bytes are not transmitted. | +| 0x0E | 2 bytes | Bytes | Packet Header: Padding for memory alignment. | +| 0x10 | Max. 237 bytes (excl. protobuf overhead) | Bytes | Actual packet data. Unused bytes are not transmitted. | #### Packet Header Flags diff --git a/docs/about/overview/radio-settings.mdx b/docs/about/overview/radio-settings.mdx index 62478b5d..ab983b6b 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. @@ -73,11 +73,11 @@ We have six predefined channels. These are the most common settings and have bee | Channel setting | Alt Channel Name | Data-Rate | SF / Symbols | Coding Rate | Bandwidth | Link Budget | | :--------------------: | :--------------: | :-----------------: | :----------: | :---------: | :-------: | :---------: | -| Short Range / Fast | Short Fast | 6.8 kbps | 7 / 128 | 4/8 | 250 | 137dB | -| Short Range / Slow | Short Slow | 3.9 kbps | 8 / 256 | 4/8 | 250 | 140dB | -| Medium Range / Fast | Medium Fast | 2.2 kbps | 9 / 512 | 4/8 | 250 | 143dB | -| Medium Range / Slow | Medium Slow | 1.2 kbps | 10 / 1024 | 4/8 | 250 | 146dB | -| Long Range / Fast | Long Fast | 0.67 kbps (default) | 11 / 2048 | 4/8 | 250 | 148.5dB | +| Short Range / Fast | Short Fast | 10.94 kbps | 7 / 128 | 4/5 | 250 | 137dB | +| Short Range / Slow | Short Slow | 6.25 kbps | 8 / 256 | 4/5 | 250 | 140dB | +| Medium Range / Fast | Medium Fast | 3.52 kbps | 9 / 512 | 4/5 | 250 | 143dB | +| Medium Range / Slow | Medium Slow | 2.95 kbps | 10 / 1024 | 4/5 | 250 | 146dB | +| Long Range / Fast | Long Fast | 1.07 kbps (default) | 11 / 2048 | 4/5 | 250 | 148.5dB | | Long Range / Moderate | Long Moderate | 0.335 kbps | 11 / 2048 | 4/8 | 125 | 151dB | | Long Range / Slow | Long Slow | 0.18 kbps | 12 / 4096 | 4/8 | 125 | 154dB | | Very Long Range / Slow | Very Long Slow | 0.09 kbps | 12 / 4096 | 4/8 | 62.5 | 157dB | @@ -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/about/overview/range-test.mdx b/docs/about/overview/range-test.mdx index 87a2a075..cff2224a 100644 --- a/docs/about/overview/range-test.mdx +++ b/docs/about/overview/range-test.mdx @@ -6,13 +6,25 @@ sidebar_label: Range Tests sidebar_position: 4 --- -## Current Record +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + + + + + +## Current Ground Record: 254km - **Range:** 254km (158 miles) - **Record Holders:** _kboxlabs_ - **Source:** [Meshtastic Discourse](https://meshtastic.discourse.group/t/practical-range-test-results/692/137) -### Modem Settings +

Modem Settings

Default Long_Fast - **Frequency:** 915MHz @@ -20,13 +32,13 @@ Default Long_Fast - **Spread Factor:** 11 - **Coding Rate:** 4/8 -### Node A +

Node A

- **Device:** [RAK4631 Core](https://meshtastic.org/docs/hardware/devices/rak/core-module) with [RAK 5005-O Base Board](https://meshtastic.org/docs/hardware/devices/rak/base-board) - **Firmware Version:** 2.1.17 - **Antenna:** 902-928MHz 5.8 dBi Slinkdsco Outdoor -### Node B +

Node B

- **Device:** [RAK4631 Core](https://meshtastic.org/docs/hardware/devices/rak/core-module) with [RAK 19003 Mini Base Board](https://meshtastic.org/docs/hardware/devices/rak/base-board) - **Firmware Version:** 2.1.18 @@ -39,68 +51,26 @@ Default Long_Fast Geographic Locations -## Previous Record - -- **Range:** 206km (128 miles) -- **Record Holders:** _StarWatcher, CVR, rook, kboxlabs_ -- **Source:** [Meshtastic Discourse](https://meshtastic.discourse.group/t/practical-range-test-results/692/130) - - - -### Modem Settings - -Default Long_Fast -- **Frequency:** 915MHz -- **Bandwidth:** 250 -- **Spread Factor:** 11 -- **Coding Rate:** 4/8 - - - -### Node A - -- **Device:** [LILYGO TTGO T-Beam](/docs/hardware/devices/tbeam) -- **Firmware Version:** 2.1.10 -- **Antenna:** Stock Antenna - - - -### Node B - -- **Device:** [LILYGO TTGO T-Beam](/docs/hardware/devices/tbeam) -- **Firmware Version:** 2.1.10 (modified to place GPS in flight mode) -- **Antenna:** Stock Antenna - -Nodes and Balloon - -App Screenshots - - - - -## Previous Record +## Previous Record 166km - **Range:** 166km (103 miles) - **Record Holder:** _PuzzledPancake_ - **Source:** [Meshtastic Discourse](https://meshtastic.discourse.group/t/practical-range-test-results/692/44) - -### Modem Settings +

Modem Settings

- **Frequency:** 868MHz - **Bandwidth:** 125 - **Spread Factor:** 12 - **Coding Rate:** 4/8 - -### Node A +

Node A

- **Device:** [LILYGO TTGO T-Beam w/ SX1262](/docs/hardware/devices/tbeam) - **Firmware Version:** 1.2 - **Antenna:** [868MHz 5dBi Antenna](https://ivent.co.nz/product/category/1000/868mhz%205dbi%20antenna%20193mm%20black%20sma%20%28m%29/38646) - -### Node B +

Node B

- **Device:** [LILYGO TTGO T-Beam w/ SX1262](/docs/hardware/devices/tbeam) - **Firmware Version:** 1.2 @@ -112,6 +82,42 @@ Default Long_Fast ![Node B](https://canada1.discourse-cdn.com/free1/uploads/meshtastic/optimized/2X/1/1c8bd5fc41f7bab925404b657a9c481882de9313_2_1332x1000.jpeg) -### Resources Used - +

Resources Used

- http://www.heywhatsthat.com + +
+ + + +## Current Air Record: 206km + +- **Range:** 206km (128 miles) +- **Record Holders:** _StarWatcher, CVR, rook, kboxlabs_ +- **Source:** [Meshtastic Discourse](https://meshtastic.discourse.group/t/practical-range-test-results/692/130) + +

Modem Settings

+ +Default Long_Fast +- **Frequency:** 915MHz +- **Bandwidth:** 250 +- **Spread Factor:** 11 +- **Coding Rate:** 4/8 + +

Node A

+ +- **Device:** [LILYGO TTGO T-Beam](/docs/hardware/devices/tbeam) +- **Firmware Version:** 2.1.10 +- **Antenna:** Stock Antenna + +

Node B

+ +- **Device:** [LILYGO TTGO T-Beam](/docs/hardware/devices/tbeam) +- **Firmware Version:** 2.1.10 (modified to place GPS in flight mode) +- **Antenna:** Stock Antenna + +Nodes and Balloon + +App Screenshots + +
+
\ No newline at end of file diff --git a/docs/configuration/_category_.yml b/docs/configuration/_category_.yml index 49411e73..e9edc265 100644 --- a/docs/configuration/_category_.yml +++ b/docs/configuration/_category_.yml @@ -4,4 +4,4 @@ position: 4 link: type: generated-index title: Configuration - slug: /settings + slug: /configuration diff --git a/docs/configuration/device-config/index.mdx b/docs/configuration/device-config/index.mdx deleted file mode 100644 index 54578d4d..00000000 --- a/docs/configuration/device-config/index.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: config -title: Device Configuration -sidebar_label: Device Config -slug: /settings/config -sidebar_position: 1 ---- - -There are several config sections in the Meshtastic firmware, these are broken out so they can be sent as small admin messages over the mesh. - -| Name | Description | -| :------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| [Bluetooth](/docs/settings/config/bluetooth) | Bluetooth config options are: Enabled, Pairing Mode and Fixed PIN. | -| [Channels](/docs/settings/config/channels) | Channels config options are: Index, Role and Settings. | -| [Device](/docs/settings/config/device) | Device config options are: Device Role, Serial Output, Debug Log and Factory Reset. | -| [Display](/docs/settings/config/display) | Display config options are: Screen On Duration, Auto Carousel Interval, Always Point North, and GPS Format. | -| [LoRa](/docs/settings/config/lora) | The LoRa config options are: Region, Modem Preset, Max Hops, Transmit Power, Bandwidth, Spread Factor, Coding Rate, Frequency Offset, Transmit Disabled and Ignore Incoming Array. | -| [Network](/docs/settings/config/network) | Network config options are: WiFi Enabled, WiFi SSID, WiFi PSK, WiFi Mode and NTP Server. | -| [Position](/docs/settings/config/position) | Position config options are: GPS Enabled, GPS Update Interval, GPS Attempt Time, Fixed Position, Smart Broadcast, Broadcast Interval and Position Packet Flags. | -| [Power](/docs/settings/config/power) | Power config options are: Charge Current, Power Saving, Shutdown after losing power, ADC Multiplier Override Wait Bluetooth Interval, Light Sleep Interval and Minimum Wake Interval. | -| [User](/docs/settings/config/user) | The user config options are: Long Name, Short Name, and Is Licensed | diff --git a/docs/configuration/module-config/index.mdx b/docs/configuration/module-config/index.mdx deleted file mode 100644 index e2967e5e..00000000 --- a/docs/configuration/module-config/index.mdx +++ /dev/null @@ -1,21 +0,0 @@ ---- -id: module-config -title: Module Configuration -sidebar_label: Module Config -slug: /settings/moduleconfig -sidebar_position: 3 ---- - -Modules are included in the firmware and allow users to extend the functionality of their mesh or device. - -| Name | Description | -| :------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | -| [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. | -| [External Notification](/docs/settings/moduleconfig/external-notification) | Incoming messages are able to alert you using circuits you attach to the device (LEDs, Buzzers, etc). | -| [MQTT](/docs/settings/moduleconfig/mqtt) | Forward packets along to an MQTT server. This allows users on the local mesh to communicate with users on another mesh over the internet. | -| [Range Test](/docs/settings/moduleconfig/range-test) | Send messages with GPS location at an interval to test the distance your devices can communicate. Requires (at least) one device set up as a sender and one as a receiver. The receiver(s) will log all incoming messages to a CSV. | -| [Serial Module](/docs/settings/moduleconfig/serial) | Send messages across the mesh by sending strings over a serial port. | -| [Store & Forward](/docs/settings/moduleconfig/store-and-forward-module) | Stores messages on a device for delivery after disconnected clients rejoin the mesh. | -| [Telemetry](/docs/settings/moduleconfig/telemetry) | Attach sensors to the device and transmit readings on a regular interval to the mesh. | -| [Traceroute](/docs/settings/moduleconfig/traceroute) | Track which nodes are used to hop a message to a certain destination. | diff --git a/docs/configuration/module-config/mqtt.mdx b/docs/configuration/module-config/mqtt.mdx deleted file mode 100644 index b4f70b72..00000000 --- a/docs/configuration/module-config/mqtt.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -id: mqtt -title: MQTT Module Configuration -slug: /settings/moduleconfig/mqtt -sidebar_label: MQTT ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -If your device is connected to Internet via wifi or ethernet, you can enable it to forward packets along to an MQTT server. This allows users on the local mesh to communicate with users on the internet. One or more channels must also be enabled as uplink and/or downlink for packets to be transmitted from and/or to your mesh (See [channels](/docs/settings/config/channels#downlink-enabled)). Without these settings enabled, the node will still connect to the MQTT server but only send status messages. - -The MQTT module config options are: Enabled, Server Address, Username, Password, Encryption Enabled, JSON Enabled, TLS Enabled, and Root Topic. MQTT Module config uses an admin message sending a `ConfigModule.MQTT` protobuf. - -## Settings - -## MQTT Module Config Values - -### Enabled - -Enables the MQTT module. - -### Server Address - -The server to use for MQTT. If not set, the default public server will be used. - -### Username - -MQTT Server username to use (most useful for a custom MQTT server). If using a custom server, this will be honored even if empty. If using the default public server, this will only be honored if set, otherwise the device will use the default username. - -### Password - -MQTT password to use (most useful for a custom MQTT server). If using a custom server, this will be honored even if empty. If using the default server, this will only be honored if set, otherwise the device will use the default password. - -### Encryption Enabled - -Whether to send encrypted or unencrypted packets to MQTT. This parameter is only honored if you also set server (the default official mqtt.meshtastic.org server can handle encrypted packets). Unencrypted packets may be useful for external systems that want to consume meshtastic packets. - -### JSON Enabled - -Enable the sending / consumption of JSON packets on MQTT. These packets are not encrypted, but offer an easy way to integrate with systems that can read JSON. - -### TLS Enabled - -If true, we attempt to establish a secure connection using TLS. - -### Root Topic - -The root topic to use for MQTT messages. This is useful if you want to use a single MQTT server for multiple meshtastic networks and separate them via ACLs. - -## MQTT Module Config Client Availability - - - - -:::info - -MQTT Config options are available for Android. - -1. Open the Meshtastic App -2. Navigate to: **Vertical Ellipsis (3 dots top right) > Radio Configuration > MQTT** - -::: - - - - -:::info - -MQTT Config options are available on iOS, iPadOS and macOS at Settings > Modules > MQTT. - -::: - - - - -:::info - -All MQTT module config options are available in the python CLI. Example commands are below: - -::: - -| Setting | Acceptable Values | Default | -| :---------------------: | :---------------: | :-----------------: | -| mqtt.enabled | `true`, `false` | `false` | -| mqtt.address | `string` |`mqtt.meshtastic.org`| -| mqtt.username | `string` | `meshdev` | -| mqtt.password | `string` | `large4cats` | -| mqtt.encryption_enabled | `true`, `false` | `false` | -| mqtt.json_enabled | `true`, `false` | `false` | -| mqtt.tls_enabled | `true`, `false` | `false` | -| mqtt.root | `string` | | - -:::tip - -Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one. - -```shell title="Example:" -meshtastic --set mqtt.enabled true --set mqtt.json_enabled true -``` - -::: - -```shell title="Enable/Disable MQTT Module" -meshtastic --set mqtt.enabled true -meshtastic --set mqtt.enabled false -``` - -```shell title="Enable/Disable MQTT JSON" -meshtastic --set mqtt.json_enabled true -meshtastic --set mqtt.json_enabled false -``` - - - - -:::info -All MQTT module config options are available for the Web UI. -::: - - - diff --git a/docs/configuration/module/ambient-lighting.mdx b/docs/configuration/module/ambient-lighting.mdx new file mode 100644 index 00000000..4bb48d43 --- /dev/null +++ b/docs/configuration/module/ambient-lighting.mdx @@ -0,0 +1,108 @@ +--- +id: ambient-lighting +title: Ambient Lighting Module Usage +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 +``` + + + +:::info + +All Ambient Lighting module config options are available in the Web UI. + +::: + + \ No newline at end of file diff --git a/docs/configuration/module-config/audio.mdx b/docs/configuration/module/audio.mdx similarity index 99% rename from docs/configuration/module-config/audio.mdx rename to docs/configuration/module/audio.mdx index 59f6cb03..13763017 100644 --- a/docs/configuration/module-config/audio.mdx +++ b/docs/configuration/module/audio.mdx @@ -1,7 +1,6 @@ --- id: audio title: Audio Module Configuration -slug: /settings/moduleconfig/audio sidebar_label: Audio --- diff --git a/docs/configuration/module-config/canned-message.mdx b/docs/configuration/module/canned-message.mdx similarity index 99% rename from docs/configuration/module-config/canned-message.mdx rename to docs/configuration/module/canned-message.mdx index 5eb94b93..75fcb1b1 100644 --- a/docs/configuration/module-config/canned-message.mdx +++ b/docs/configuration/module/canned-message.mdx @@ -1,7 +1,6 @@ --- id: canned-message title: Canned Message Module Configuration -slug: /settings/moduleconfig/canned-message sidebar_label: Canned Message --- diff --git a/docs/configuration/module/detection-sensor.mdx b/docs/configuration/module/detection-sensor.mdx new file mode 100644 index 00000000..a6594423 --- /dev/null +++ b/docs/configuration/module/detection-sensor.mdx @@ -0,0 +1,138 @@ +--- +id: detection-sensor +title: Detection Sensor Module Usage +sidebar_label: Detection Sensor +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +The Detection Sensor module allows you to configure a GPIO pin to be monitored for a specified high/low status and send text alerts over the Detection Sensor portnum when an event is detected. This is particularly useful for motion detection sensors, reed switches, and other open / closed state systems in which notifications over the mesh are desired. Config options are: Enabled, Minimum Broadcast Interval, State Broadcast Interval, Send Bell, Name, Monitor Pin, Detection Triggered High, and Use Pull-up. + +In order to use this module, make sure your devices have firmware version 2.2.2 or higher. + +## Detection Sensor Module Config Values + +### Enabled + +Whether the Module is enabled. + +### Minimum Broadcast Interval + +The interval in seconds of how often we can send a message to the mesh when a state change is detected. + +### State Broadcast Interval + +The interval in seconds of how often we should send a message to the mesh with the current state regardless of changes, When set to 0, only state changes will be broadcasted, Works as a sort of status heartbeat for peace of mind. + +### Send Bell + +Send ASCII bell with alert message. Useful for triggering ext. notification on bell +name. + +### Friendly Name + +Used to format the message sent to mesh. Example: A name "Motion" would result in a message "Motion detected". Maximum length of 20 characters. + +### Monitor Pin + +The GPIO pin to monitor for state changes. + +### Detection Triggered High + +Whether or not the GPIO pin state detection is triggered on HIGH (1), otherwise LOW (0). + +### Use Pull-up + +Whether or not use INPUT_PULLUP mode for GPIO pin. Only applicable if the board uses pull-up resistors on the pin. + +## Detection Sensor Module Client Availability + + + + + +:::info +All Detection Sensor Module config options are available for Android in app version 2.2.2 and higher. + +1. Open the Meshtastic App +2. Navigate to: **Vertical Ellipsis (3 dots top right) > Radio Configuration > Detection Sensor** +::: + + + + +:::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 +::: + + + + +:::info + +All Detection Sensor Module config options are available in the python CLI version 2.2.2 and higher. + +::: + +Example commands are below: + +```shell title="Enable/Disable the Detection Sensor Module" +meshtastic --set detection_sensor.enabled true +meshtastic --set detection_sensor.enabled false +``` + +```shell title="Set the Minimum Broadcast Interval to 90 seconds" +meshtastic --set detection_sensor.minimum_broadcast_secs 90 +``` + +```shell title="Set the State Broadcast Interval to 5 minutes" +meshtastic --set detection_sensor.state_broadcast_secs 300 +``` + +```shell title="Enable/Disable Send Bell" +meshtastic --set detection_sensor.send_bell true +meshtastic --set detection_sensor.send_bell false +``` + +```shell title="Set the friendly name to 'motion'" +meshtastic --set detection_sensor.name "motion" +``` + +```shell title="Set the Monitor Pin to 7" +meshtastic --set detection_sensor.monitor_pin 7 +``` + +```shell title="Enable Notifications when the Monitor Pin goes HIGH" +meshtastic --set detection_sensor.detection_triggered_high true +``` + +```shell title="Enable Notifications when the Monitor Pin goes LOW" +meshtastic --set detection_sensor.detection_triggered_high false +``` + +```shell title="Enable the use INPUT_PULLUP mode" +meshtastic --set detection_sensor.use_pullup true +``` + +```shell title="Get the Detection Sensor Module Configuration" +meshtastic --get detection_sensor +``` + + + +:::info + +All Detection Sensor module config options are available in the Web UI. + +::: + + diff --git a/docs/configuration/module-config/external-notification.mdx b/docs/configuration/module/external-notification.mdx similarity index 99% rename from docs/configuration/module-config/external-notification.mdx rename to docs/configuration/module/external-notification.mdx index 79ccf02f..648c1a66 100644 --- a/docs/configuration/module-config/external-notification.mdx +++ b/docs/configuration/module/external-notification.mdx @@ -1,7 +1,6 @@ --- id: external-notification title: External Notification Module Configuration -slug: /settings/moduleconfig/external-notification sidebar_label: External Notification --- diff --git a/docs/configuration/module/index.mdx b/docs/configuration/module/index.mdx new file mode 100644 index 00000000..94ccbab8 --- /dev/null +++ b/docs/configuration/module/index.mdx @@ -0,0 +1,25 @@ +--- +id: module-config +title: Module Configuration +sidebar_label: Module Config +sidebar_position: 2 +slug: /configuration/module +--- + +Modules are included in the firmware and allow users to extend the functionality of their mesh or device. + +| Name | Description | +| :------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| [Ambient Lighting](/docs/configuration/module/ambient-lighting) | Adjust the brightness of NCP5623 I2C RGB LEDs | +| [Audio](/docs/configuration/module/audio) | Enable Support for Codec2 Voice Comms on certain devices. | +| [Canned Message](/docs/configuration/module/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/configuration/module/detection-sensor) | Configure a GPIO pin to be monitored for specified high/low status and send text alerts. | +| [External Notification](/docs/configuration/module/external-notification) | Incoming messages are able to alert you using circuits you attach to the device (LEDs, Buzzers, etc). | +| [MQTT](/docs/configuration/module/mqtt) | Forward packets along to an MQTT server. This allows users on the local mesh to communicate with users on another mesh over the internet. | +| [Neighbor Info](/docs/configuration/module/neighbor-info) | Send info on 0-hop neighbors to the mesh. | +| [Range Test](/docs/configuration/module/range-test) | Send messages with GPS location at an interval to test the distance your devices can communicate. Requires (at least) one device set up as a sender and one as a receiver. The receiver(s) will log all incoming messages to a CSV. | +| [Remote Hardware](/docs/configuration/module/remote-hardware) | Set and read a GPIO status remotely over the mesh. | +| [Serial Module](/docs/configuration/module/serial) | Send messages across the mesh by sending strings over a serial port. | +| [Store & Forward](/docs/configuration/module/store-and-forward-module) | Stores messages on a device for delivery after disconnected clients rejoin the mesh. | +| [Telemetry](/docs/configuration/module/telemetry) | Attach sensors to the device and transmit readings on a regular interval to the mesh. | +| [Traceroute](/docs/configuration/module/traceroute) | Track which nodes are used to hop a message to a certain destination. | diff --git a/docs/configuration/module/mqtt.mdx b/docs/configuration/module/mqtt.mdx new file mode 100644 index 00000000..34f82d64 --- /dev/null +++ b/docs/configuration/module/mqtt.mdx @@ -0,0 +1,260 @@ +--- +id: mqtt +title: MQTT Module Configuration +sidebar_label: MQTT +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +If your device is connected to Internet via wifi or ethernet, you can enable it to forward packets along to an MQTT server. This allows users on the local mesh to communicate with users on the internet. One or more channels must also be enabled as uplink and/or downlink for packets to be transmitted from and/or to your mesh (See [channels](/docs/configuration/radio/channels#downlink-enabled)). Without these settings enabled, the node will still connect to the MQTT server but only send status messages. + +The MQTT module config options are: Enabled, Server Address, Username, Password, Encryption Enabled, JSON Enabled, TLS Enabled, and Root Topic. MQTT Module config uses an admin message sending a `ConfigModule.MQTT` protobuf. + +## Settings + + +## MQTT Module Config Values + +### Enabled + +Enables the MQTT module. + +### Server Address + +The server to use for MQTT. If not set, the default public server will be used. + +### Username + +MQTT Server username to use (most useful for a custom MQTT server). If using a custom server, this will be honored even if empty. If using the default public server, this will only be honored if set, otherwise the device will use the default username. + +### Password + +MQTT password to use (most useful for a custom MQTT server). If using a custom server, this will be honored even if empty. If using the default server, this will only be honored if set, otherwise the device will use the default password. + +### Encryption Enabled + +Whether to send encrypted or unencrypted packets to MQTT. This parameter is only honored if you also set server (the default official mqtt.meshtastic.org server can handle encrypted packets). Unencrypted packets may be useful for external systems that want to consume meshtastic packets. + +### JSON Enabled + +Enable the sending / consumption of JSON packets on MQTT. These packets are not encrypted, but offer an easy way to integrate with systems that can read JSON. + +### TLS Enabled + +If true, we attempt to establish a secure connection using TLS. + +### Root Topic + +The root topic to use for MQTT messages. This is useful if you want to use a single MQTT server for multiple meshtastic networks and separate them via ACLs. + + +## MQTT Module Config Client Availability + + + +:::info + +MQTT Config options are available for Android. + +1. Open the Meshtastic App +2. Navigate to: **Vertical Ellipsis (3 dots top right) > Radio Configuration > MQTT** + +::: + + + + +:::info + +MQTT Config options are available on iOS, iPadOS and macOS at Settings > Modules > MQTT. + +::: + + + + +:::info + +All MQTT module config options are available in the python CLI. Example commands are below: + +::: + +| Setting | Acceptable Values | Default | +| :---------------------: | :---------------: | :-----------------: | +| mqtt.enabled | `true`, `false` | `false` | +| mqtt.address | `string` |`mqtt.meshtastic.org`| +| mqtt.username | `string` | `meshdev` | +| mqtt.password | `string` | `large4cats` | +| mqtt.encryption_enabled | `true`, `false` | `false` | +| mqtt.json_enabled | `true`, `false` | `false` | +| mqtt.tls_enabled | `true`, `false` | `false` | +| mqtt.root | `string` | | + +:::tip + +Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one. + +```shell title="Example:" +meshtastic --set mqtt.enabled true --set mqtt.json_enabled true +``` + +::: + +```shell title="Enable/Disable MQTT Module" +meshtastic --set mqtt.enabled true +meshtastic --set mqtt.enabled false +``` + +```shell title="Enable/Disable MQTT JSON" +meshtastic --set mqtt.json_enabled true +meshtastic --set mqtt.json_enabled false +``` + + + + +:::info +All MQTT module config options are available for the Web UI. +::: + + + + +## Connect to the Default Public Server + + + + + +

1. Enable the MQTT Module

+ +Navigate to: Vertical Ellipsis (3 dots top right) > Radio configuration > MQTT: Turn on the slider for **MQTT enabled** and tap **Send**. + +[![MQTT Settings](/img/modules/mqtt/android_mqtt_sm.png)](/img/modules/mqtt/android_mqtt.png) + +*Optional:* To use your phone's internet connection to send and receive packets over the web, also enable the slider for **MQTT Client Proxy** and skip the Configure Network Settings step below. + +[![Client Proxy](/img/modules/mqtt/android_mqtt_proxy_sm.png)](/img/modules/mqtt/android_mqtt_proxy.png) + +

2. Enable Channel Uplink & Downlink

+ +Navigate to: Vertical Ellipsis (3 dots top right) > Radio configuration > Channels > LongFast: Turn on the sliders for **Uplink enabled** and **Downlink enabled**, then tap **Save** and tap **Send**. + +[![Channel Settings](/img/modules/mqtt/android_channel_sm.png)](/img/modules/mqtt/android_channel.png) + +

3. Configure Network Settings

+ +Navigate to: Vertical Ellipsis (3 dots top right) > Radio configuration > Network: Turn on the slider for **WiFi enabled**, Enter the **SSID** and **PSK** for your network, then tap **Send**. + +[![Network Settings](/img/modules/mqtt/android_network_sm.png)](/img/modules/mqtt/android_network.png) + +
+ + +

1. Enable the MQTT Module

+ +Navigate to Settings > MQTT: Turn on the slider for MQTT enabled and tap **Save** + +[![MQTT Settings 1](/img/modules/mqtt/apple_mqtt_1_sm.png)](/img/modules/mqtt/apple_mqtt_1.png) +[![MQTT Settings 2](/img/modules/mqtt/apple_mqtt_2_sm.png)](/img/modules/mqtt/apple_mqtt_2.png) + +*Optional:* To use your phone's internet connection to send and receive packets over the web, also enable the slider for **MQTT Client Proxy** and skip the Configure Network Settings step below. + +[![Client Proxy](/img/modules/mqtt/apple_mqtt_1_proxy_sm.png)](/img/modules/mqtt/apple_mqtt_1_proxy.png) + +

2. Enable Channel Uplink & Downlink

+ +Navigate to Settings > Channels > Primary Channel: Turn on the sliders for **Uplink enabled** and **Downlink enabled** - Tap **Save** + +[![Channel Settings](/img/modules/mqtt/apple_channel_sm.png)](/img/modules/mqtt/apple_channel.png) + +

3. Configure Network Settings

+ +Navigate to Settings > Network: Turn on the slider for **WiFi enabled** - Enter your **SSID** and **PSK** for your network - Tap **Save** + +[![Network Settings](/img/modules/mqtt/apple_network_sm.png)](/img/modules/mqtt/apple_network.png) + +
+ + +

1. Enable the MQTT Module

+ +```shell +meshtastic --set mqtt.enabled true +``` + +

2. Enable Channel Uplink & Downlink

+ +```shell +meshtastic --ch-set uplink_enabled true --ch-index 0 +meshtastic --ch-set downlink_enabled true --ch-index 0 +``` + +or chained together: +```shell +meshtastic --ch-set uplink_enabled true --ch-index 0 --ch-set downlink_enabled true --ch-index 0 +``` + +

3. Configure Network Settings

+ +```shell +meshtastic --set network.wifi_enabled true +meshtastic --set network.wifi_ssid "your network" +meshtastic --set network.wifi_psk yourpassword +``` + +or chained together: +```shell +meshtastic --set network.wifi_enabled true --set network.wifi_ssid "your network" --set network.wifi_psk yourpassword +``` + +
+ + +

1. Enable the MQTT Module

+ +Navigate to Config > Module Config > MQTT - Turn on the slider for MQTT enabled - Click the **Save** icon. + +[![MQTT Settings](/img/modules/mqtt/web_mqtt_sm.png)](/img/modules/mqtt/web_mqtt.png) + +*Optional:* To use your client's internet connection to send and receive packets over the web, also enable the slider for **Proxy to Client Enabled** and skip the Configure Network Settings step below. + +[![Client Proxy](/img/modules/mqtt/web_mqtt_proxy_sm.png)](/img/modules/mqtt/web_mqtt_proxy.png) + +:::caution + +Though this option may be visible in your UI, Client Proxy is not yet functional with the Web Client. + +::: + + +

2. Enable Channel Uplink & Downlink

+ +Navigate to Channels > Primary: Turn on the sliders for **Uplink Enabled** and **Downlink Enabled** - Click the **Save** icon. + +[![Channel Settings](/img/modules/mqtt/web_channel_sm.png)](/img/modules/mqtt/web_channel.png) + +

3. Configure Network Settings

+ +Navigate to Radio Config > Device > Network: Turn on the slider for **Enabled** - Enter your **SSID** and **PSK** for your network - Click the **Save** icon. + +[![Network Settings](/img/modules/mqtt/web_network_sm.png)](/img/modules/mqtt/web_network.png) + +
+
\ No newline at end of file diff --git a/docs/configuration/module/neighbor-info.mdx b/docs/configuration/module/neighbor-info.mdx new file mode 100644 index 00000000..79b0f2ce --- /dev/null +++ b/docs/configuration/module/neighbor-info.mdx @@ -0,0 +1,86 @@ +--- +id: neighbor-info +title: Neighbor Info Module Usage +sidebar_label: Neighbor Info +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +The Neighbor Info Module is for sending information on each node's 0-hop neighbors to the mesh. Config options are: Enabled and Update Interval. + +In order to use it, make sure your devices use firmware version 2.2.0 or higher. + +## Neighbor Info Module Config Values + +### Enabled + +Enables the Neighbor Info Module. + +### Update Interval + +How often the neighbor info is sent to the mesh. + + +## Neighbor Info Module Client Availability + + + + + +:::info +All Neighbor Info Module config options are available for Android in app version 2.2.0 and higher. + +1. Open the Meshtastic App +2. Navigate to: **Vertical Ellipsis (3 dots top right) > Radio Configuration > Neighbor Info** +::: + + + + +Not yet implemented. + + + + +:::info + +All Neighbor Info Module config options are available in the python CLI version 2.2.0 and higher. + +::: + +Example commands are below: + +```shell title="Enable/Disable the Neighbor Info Module" +meshtastic --set neighbor_info.enabled true +meshtastic --set neighbor_info.enabled false +``` + +```shell title="Set the update interval to 10 minutes" +meshtastic --set neighbor_info.update_interval 600 +``` + +```shell title="Get the Neighbor Info Module Configuration" +meshtastic --get neighbor_info +``` + + + + + +:::info + +All Neighbor Info module config options are available in the Web UI. + +::: + + + diff --git a/docs/configuration/module-config/range-test.mdx b/docs/configuration/module/range-test.mdx similarity index 99% rename from docs/configuration/module-config/range-test.mdx rename to docs/configuration/module/range-test.mdx index 0177b933..bfe8d0a0 100644 --- a/docs/configuration/module-config/range-test.mdx +++ b/docs/configuration/module/range-test.mdx @@ -1,7 +1,6 @@ --- id: range-test title: Range Test Module Configuration -slug: /settings/moduleconfig/range-test sidebar_label: Range Test --- diff --git a/docs/configuration/gpio-peripherals.mdx b/docs/configuration/module/remote-hardware.mdx similarity index 76% rename from docs/configuration/gpio-peripherals.mdx rename to docs/configuration/module/remote-hardware.mdx index e66e0446..3df2c3cb 100644 --- a/docs/configuration/gpio-peripherals.mdx +++ b/docs/configuration/module/remote-hardware.mdx @@ -1,12 +1,84 @@ --- -id: gpio-peripherals -title: Configuring GPIO Peripherals -sidebar_label: Setup GPIO Peripherals -slug: /hardware/peripheral/ -sidebar_position: 6 +id: remote-hardware +title: Remote Hardware Module Usage +sidebar_label: Remote Hardware --- -## Remote Hardware +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +The Remote Hardware Module allows control of a GPIO pin on a remote node. Config options are: Enabled, Allow Undefined Pin Access, Available Pins + +:::info + +While configuring this module may be available in clients, setting and reading GPIO's is currently only possible using the [Meshtastic Python CLI](/docs/software/python/cli) + +::: + +## Remote Hardware Config Values + +### Enabled + +Whether the module is enabled + +### Allow Undefined Pin Access + +Whether the module allows consumers to read/write to pins not that are not defined in available_pins + +### Available Pins + +Exposes the available pins to the mesh for reading and writing + + +## Remote Hardware Module Client Availability + + + + + +:::info +All Remote Hardware Module config options are available for Android in app. + +1. Open the Meshtastic App +2. Navigate to: **Vertical Ellipsis (3 dots top right) > Radio Configuration > Remote Hardware** +::: + + + + +:::info +All Remote Hardware Module config options are available on iOS, iPadOS and macOS app.and higher at Settings > Modules > Remote Hardware +::: + + + + +:::info + +All Remote Hardware Module config options are available in the python CLI. + +::: + + + + +Not implemented. + + + + + + + +## Remote Hardware Module Usage :::warning GPIO access is fundamentally dangerous because invalid options can physically damage or destroy your hardware. Ensure that you fully understand the schematic for your particular device before trying this as we do not offer a warranty. Use at your own risk. diff --git a/docs/configuration/module-config/serial.mdx b/docs/configuration/module/serial.mdx similarity index 87% rename from docs/configuration/module-config/serial.mdx rename to docs/configuration/module/serial.mdx index fb01189c..02274783 100644 --- a/docs/configuration/module-config/serial.mdx +++ b/docs/configuration/module/serial.mdx @@ -1,7 +1,6 @@ --- id: serial title: Serial Module Configuration -slug: /settings/moduleconfig/serial sidebar_label: Serial --- @@ -10,7 +9,7 @@ import TabItem from "@theme/TabItem"; The serial module config options are: Enabled, Echo, Mode, Receive GPIO, Transmit GPIO, Baud Rate, Timeout, and Override Console Serial Port. Serial Module config uses an admin message sending a `ConfigModule.Serial` protobuf. -This is a simple interface to send messages over the mesh network by sending strings over a serial port. Anything you send the node will be turned into a message sent out over the mesh, and anything received from the mesh will be sent to the serial port. Note that this module does not (yet) allow arbitrary protobuf commands to be sent over the serial connection. +This is an interface to talk to and control your Meshtastic device over a serial port. The module can be set to different [modes](#mode), each fulfilling a different use-case. ![image](https://user-images.githubusercontent.com/9000580/205529843-962c3187-8411-452c-b729-42c58b1571f5.png) @@ -32,12 +31,12 @@ Defaults to 'Simple'. Available Values: -- `DEFAULT` -- `SIMPLE` operate as an dumb UART tunnel. What goes in will come out, Requires a channel named 'serial'. -- `PROTO` Exposes the Protobuf Client API on this serial port. You can use this to connect from another device. [API Reference](/docs/development/device/client-api) -- `TEXTMSG` Will send the string received over the serial port as a Text Message for Display on the other devices. -- `NMEA` Will output a NMEA 0183 Data stream containing the internal GPS or fixed position and other node locations as Waypoints (WPL). -- `CALTOPO` Will output NMEA 0183 Waypoints (WPL) every 10 seconds for all valid node locations, to be consumed by [CalTopo / SARTopo](/docs/software/integrations/caltopo.mdx). +- `DEFAULT` equals `SIMPLE`. +- `SIMPLE` operates as a dumb UART tunnel. What goes in will come out, requires a channel named 'serial'. +- `PROTO` exposes the Protobuf Client API on this serial port. You can use this to connect from another device, see the [Arduino client library](https://github.com/meshtastic/Meshtastic-arduino) and the [API Reference](/docs/development/device/client-api). +- `TEXTMSG` will allow you to send a string over the serial port to the device, which will be broadcasted as a text message to the default channel. Any text message received from the mesh will be sent to the serial port as follows: `: `. +- `NMEA` will output a NMEA 0183 Data stream containing the internal GPS or fixed position and other node locations as Waypoints (WPL). +- `CALTOPO` will output NMEA 0183 Waypoints (WPL) every 10 seconds for all valid node locations, to be consumed by [CalTopo / SARTopo](/docs/software/integrations/caltopo.mdx). ### Receive GPIO Pin @@ -112,7 +111,7 @@ All serial module config options are available in the python CLI. Example comman | serial.mode | `DEFAULT` `SIMPLE` `PROTO` `TEXTMSG`, `NMEA`, `CALTOPO` | `DEFAULT` | | serial.rxd | GPIO Pin Number 1-39 | Default of `0` is Unset | | serial.txd | GPIO Pin Number 1-33 | Default of `0` is Unset | -| serial.baud | `BAUD_DEFAULT` `BAUD_110` `BAUD_300` `BAUD_600` `BAUD_1200` `BAUD_2400` `BAUD_4800` `BAUD_9600` `BAUD_19200` `BAUD_38400` `BAUD_57600` `BAUD_115200` `BAUD_230400` `BAUD_460800` `BAUD_576000` `BAUD_921600` | `BAUD_DEFAULT` | +| serial.baud | `BAUD_DEFAULT` `BAUD_110` `BAUD_300` `BAUD_600` `BAUD_1200` `BAUD_2400` `BAUD_4800` `BAUD_9600` `BAUD_19200` `BAUD_38400` `BAUD_57600` `BAUD_115200` `BAUD_230400` `BAUD_460800` `BAUD_576000` `BAUD_921600` | `BAUD_DEFAULT` (38400) | | serial.timeout | `integer` (milli seconds) | Default of `0` corresponds to 250 ms | | serial.override_console_serial_port | `true`, `false` | `false` | @@ -186,12 +185,12 @@ Default is to use RX GPIO 16 and TX GPIO 17. - RXD 13 - TXD 14 3. Set `serial.timeout` to the amount of time to wait before we consider your packet as "done". -4. (Optional) set serial.mode to TEXTMSG if you want to send messages to/from the general text message channel +4. (Optional) set serial.mode to `TEXTMSG` if you want to send messages to/from the general text message channel. For more specific control, use the `PROTO` mode, e.g. in combination with the [Arduino client library](https://github.com/meshtastic/Meshtastic-arduino/blob/master/examples/SendReceiveClient/SendReceiveClient.ino). 5. Connect to your device over the serial interface at `38400 8N1`. With [tio](https://github.com/tio/tio) – `tio -e -b 38400 -f none /dev/myserialport` -6. Send a packet up to 237 bytes in length. This will get relayed over the mesh network. +6. Send a packet up to 237 bytes in length. This will get broadcasted over the default channel. 7. (Optional) Set `serial.echo` to `1` and any message you send out will be echoed back to your device. ### Interfacing PIR Sensor With External Microcontroller @@ -200,7 +199,7 @@ The following are examples of using either a Raspberry Pi Pico or Arduino Mini P #### Meshtastic Software Configuration -- Serial module enabled, mode: TXTMSG +- Serial module enabled, mode: TEXTMSG - GPIO Pins (For T-Beam) RX 13, TX 14 - 38400 Baud diff --git a/docs/configuration/module-config/store-and-forward-module.mdx b/docs/configuration/module/store-and-forward-module.mdx similarity index 82% rename from docs/configuration/module-config/store-and-forward-module.mdx rename to docs/configuration/module/store-and-forward-module.mdx index b7ee2852..0e29ce45 100644 --- a/docs/configuration/module-config/store-and-forward-module.mdx +++ b/docs/configuration/module/store-and-forward-module.mdx @@ -1,7 +1,6 @@ --- id: store-and-forward-module title: Store & Forward Module Settings -slug: /settings/moduleconfig/store-and-forward-module sidebar_label: Store & Forward --- @@ -9,15 +8,13 @@ import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; :::info -Currently only available for ESP32 based devices with external PSRAM. Requires the device to be set as a ROUTER or ROUTER_CLIENT. - -**Don't enable Store & Forward Module on multiple nodes.** +Currently only available for ESP32 based devices with external PSRAM like the tbeam. Requires the device to be set as a ROUTER or ROUTER_CLIENT. ::: ## Overview :::caution -This is a work in progress and is partially available. Stability is not guaranteed. +This is a work in progress and the required client support is not yet available. ::: The Store & Forward Module is an implementation of a Store and Forward system to enable resilient messaging in the event that a client device is disconnected from the main network. @@ -53,10 +50,6 @@ Either use a custom channel configuration with at an at least 1kbit data rate or ### Router setup -:::warning -Don't enable the Store and Forward module on multiple nodes for now! -::: - - Configure your device as a router. - Name your router node something that makes it easily identifiable, aka "Router". - Configure the Store and Forward module @@ -75,15 +68,7 @@ Don't enable the Store and Forward module on multiple nodes for now! ### Client Usage -Currently, no special configuration is required. To request your history sent to you, send the command into the message field "SF". That's it. This will eventually change to make it easier. At the moment, that message will be sent to everyone on the mesh but we'll (eventually) make it easier to use where there'll be a button (or maybe it'll be transparent) and the command isn't sent as a text message to the mesh. - -Available Commands: - -| Command | Definition | -| :-----: | :----------------------------------------------------: | -| SF | Send the last hour worth of messages I may have missed | - -The Store and Forward module will only service one client at a time. If a second client requests messages while the S&F is busy, the S&F will send a private message to the second client that they will need to wait. +Currently there are no clients that support store and forward. ## Settings diff --git a/docs/configuration/module-config/telemetry.mdx b/docs/configuration/module/telemetry.mdx similarity index 99% rename from docs/configuration/module-config/telemetry.mdx rename to docs/configuration/module/telemetry.mdx index d28647ce..d73d1b8e 100644 --- a/docs/configuration/module-config/telemetry.mdx +++ b/docs/configuration/module/telemetry.mdx @@ -1,7 +1,6 @@ --- id: telemetry title: Telemetry Module Configuration -slug: /settings/moduleconfig/telemetry sidebar_label: Telemetry --- @@ -71,7 +70,7 @@ This option is used to configure the interval (in seconds) that should be used t Default is `900` seconds (15 minutes). -## Device Config Client Availability +## Telemetry Config Client Availability Bluetooth** +2. Navigate to: **Radio Config > Bluetooth** ::: diff --git a/docs/configuration/device-config/channels.mdx b/docs/configuration/radio/channels.mdx similarity index 94% rename from docs/configuration/device-config/channels.mdx rename to docs/configuration/radio/channels.mdx index 1f0589b8..ac07611d 100644 --- a/docs/configuration/device-config/channels.mdx +++ b/docs/configuration/radio/channels.mdx @@ -1,7 +1,6 @@ --- id: channels title: Channel Configuration -slug: /settings/config/channels sidebar_label: Channels --- @@ -11,9 +10,9 @@ import TabItem from "@theme/TabItem"; The Channels config options are: Index, Roles, and Settings. Channel config uses an admin message sending a `Channel` protobuf which also consists of a `ChannelSettings` protobuf. :::info -**Channel Settings** (as described on this page) should not be confused with [Modem Preset Settings](/docs/settings/config/lora#modem-preset) +**Channel Settings** (as described on this page) should not be confused with [Modem Preset Settings](/docs/configuration/radio/lora#modem-preset) -[Modem Preset Settings](/docs/settings/config/lora#modem-preset) contain the modem configuration (frequency settings, spreading factor, bandwidth, etc.) used for the LoRa radio. These settings are identical for all channels and can **not** be unique per channel. +[Modem Preset Settings](/docs/configuration/radio/lora#modem-preset) contain the modem configuration (frequency settings, spreading factor, bandwidth, etc.) used for the LoRa radio. These settings are identical for all channels and can **not** be unique per channel. **Channel Settings** contain information for segregating message groups, configuring optional encryption, and enabling or disabling messaging over internet gateways. These settings **are** unique and configurable per channel. ::: @@ -154,7 +153,6 @@ meshtastic --ch-set name "My Channel" --ch-set psk random --ch-set uplink_enable ::: - ### Name ```shell title="Set channel name for the PRIMARY channel" @@ -205,7 +203,7 @@ meshtastic --ch-set psk none --ch-index 0 ### Uplink / Downlink -For configuring gateways, please see [MQTT](/docs/settings/moduleconfig/mqtt) +For configuring gateways, please see [MQTT](/docs/configuration/module/mqtt) ```shell title="Enable/Disable Uplink on PRIMARY channel" meshtastic --ch-set uplink_enabled true --ch-index 0 diff --git a/docs/configuration/device-config/device.mdx b/docs/configuration/radio/device.mdx similarity index 95% rename from docs/configuration/device-config/device.mdx rename to docs/configuration/radio/device.mdx index bec43c9b..6c3f152b 100644 --- a/docs/configuration/device-config/device.mdx +++ b/docs/configuration/radio/device.mdx @@ -1,7 +1,6 @@ --- id: device title: Device Configuration -slug: /settings/config/device sidebar_label: Device --- @@ -25,8 +24,8 @@ Acceptable values: | `ROUTER` | Router - Mesh packets will prefer to be routed over this node. The assumption is that Router-type devices will be placed in locations with a height/range/antenna advantage, and therefore have better overall coverage. This node will not be used by client apps. The BLE/Wi-Fi radios and the OLED screen will be put to sleep. Please note: Due to the preferred routing, this role may cause higher power usage due to more frequent transmission. | | `ROUTER_CLIENT` | Router Client - Hybrid of the Client and Router roles. Similar to Router, except the Router Client can be used as both a Router and an app connected Client. BLE/Wi-Fi and OLED screen will not be put to sleep. | | `REPEATER` | Repeater - Mesh packets will prefer to be routed over this node. This role eliminates unnecessary overhead such as NodeInfo, DeviceTelemetry, and any other mesh packet, resulting in the device not appearing as part of the network. As such, direct messaging this node is not available, as it will not appear in your nodes list which results in a cleaner mesh network. Channel and modem settings of the mesh packets being repeated must be identical to the repeater's configuration. Please see Rebroadcast Mode for additional settings specific to this role. | -| `TRACKER` | Tracker - For use with devices intended as a GPS tracker. Position packets sent from this device will be higher priority. Smart Position Broadcast will default to the currently configured settings. | -| `SENSOR` | Sensor - For use with devices intended to primarily collect sensor readings. Telemetry packets sent from this device will be higher priority, broadcasting every five minutes. | +| `TRACKER` | Tracker - For use with devices intended as a GPS tracker. Position packets sent from this device will be higher priority. Smart Position Broadcast will default to the currently configured settings. When used in conjunction with power.is_power_saving = true, nodes will wake up, send position, and then sleep for position.position_broadcast_secs seconds. | +| `SENSOR` | Sensor - For use with devices intended to primarily collect sensor readings. Telemetry packets sent from this device will be higher priority, broadcasting every five minutes. When used in conjunction with power.is_power_saving = true, nodes will wake up, send environment telemetry, and then sleep for telemetry.environment_update_interval seconds. | ### Rebroadcast Mode diff --git a/docs/configuration/device-config/display.mdx b/docs/configuration/radio/display.mdx similarity index 98% rename from docs/configuration/device-config/display.mdx rename to docs/configuration/radio/display.mdx index 68a06058..11a3eda6 100644 --- a/docs/configuration/device-config/display.mdx +++ b/docs/configuration/radio/display.mdx @@ -1,7 +1,6 @@ --- id: display title: Display Configuration -slug: /settings/config/display sidebar_label: Display --- @@ -10,7 +9,7 @@ import TabItem from "@theme/TabItem"; The display config options are: Screen On Duration, Auto Carousel Interval, Always Point North, GPS Format, Preferred Display Units, OLED Definition, Display Mode, Heading Bold, and Wake on Tap or Motion. Display config uses an admin message sending a `Config.Display` protobuf. -## Device Config Values +## Display Config Values ### Screen On Duration @@ -72,7 +71,7 @@ The heading can be hard to read when 'INVERTED' or 'TWOCOLOR' display mode is us This option enables the ability to wake the device screen when motion, such as a tap on the device, is detected via an attached accelerometer. -## Device Config Client Availability +## Display Config Client Availability 512 it will assume the packet is corrupted and return to looking for START1. While looking for START1 any other characters are printed as "debug output". For small example implementation of this reader see the python implementation. +The receiver will validate length and if >512 it will assume the packet is corrupted and return to looking for START1. While looking for START1 any other characters are printed as "debug output". For a small example implementation of this reader see the python implementation. ## Bluetooth (MeshBluetoothService) @@ -35,8 +35,8 @@ For a reference implementation of a client that uses this service see [RadioInte Typical flow when a phone connects to the device should be the following (if you want to watch this flow from the python app just run `meshtastic --debug --info` - the flow over BLE is identical): -- There are only three relevant endpoints (and they have built in BLE documentation - so use a BLE tool of your choice to watch them): FromRadio, FromNum (sends notifies when new data is available in FromRadio) and ToRadio -- SetMTU size to 512 +- There are only three relevant endpoints (and they have built in BLE documentation - so use a BLE tool of your choice to watch them): FromRadio, FromNum (sends notifies when new data is available in FromRadio) and ToRadio. +- SetMTU size to 512. - Write a ToRadio.startConfig protobuf to the "ToRadio" endpoint - this tells the radio you are a new connection and you need the entire NodeDB sent down. - Read repeatedly from the "FromRadio" endpoint. Each time you read you will get back a FromRadio protobuf (see Meshtastic-protobuf). Keep reading from this endpoint until you get back and empty buffer. - See below for the expected sequence for your initial download. @@ -45,13 +45,13 @@ Typical flow when a phone connects to the device should be the following (if you Expected sequence for initial download: -- After your send startConfig, you will receive a series of FromRadio packets. The sequence of these packets will be as follows (but you are best not counting on this, instead just update your model for whatever packet you receive - based on looking at the type) -- Read a RadioConfig from "radio" - used to get the channel and radio settings -- Read a User from "user" - to get the username for this node -- Read a MyNodeInfo from "mynode" to get information about this local device -- Read a series of NodeInfo packets to build the phone's copy of the current NodeDB for the mesh -- Read a endConfig packet that indicates that the entire state you need has been sent -- Read a series of MeshPackets until it returns empty to get any messages that arrived for this node while the phone was away +- After your send startConfig, you will receive a series of FromRadio packets. The sequence of these packets will be as follows (but you are best not counting on this, instead just update your model for whatever packet you receive - based on looking at the type). +- Read a RadioConfig from "radio" - used to get the channel and radio settings. +- Read a User from "user" - to get the username for this node. +- Read a MyNodeInfo from "mynode" to get information about this local device. +- Read a series of NodeInfo packets to build the phone's copy of the current NodeDB for the mesh. +- Read an endConfig packet that indicates the entire state you need has been sent. +- Read a series of MeshPackets until it returns empty to get any messages that arrived for this node while the phone was away. For definitions (and documentation) on FromRadio, ToRadio, MyNodeInfo, NodeInfo and User protocol buffers see [mesh.proto](https://github.com/meshtastic/protobufs/blob/master/meshtastic/mesh.proto) @@ -86,12 +86,12 @@ Note: that if the phone ever sees this number decrease, it means the ESP32 has r Re: Queue management, not all messages are kept in the fromradio queue (filtered based on SubPacket): -- only the most recent Position and User messages for a particular node are kept -- all Data SubPackets are kept -- No WantNodeNum / DenyNodeNum messages are kept -- A variable keepAllPackets, if set to true will suppress this behavior and instead keep everything for forwarding to the phone (for debugging) +- Only the most recent Position and User messages for a particular node are kept. +- All Data SubPackets are kept. +- No WantNodeNum / DenyNodeNum messages are kept. +- A variable keepAllPackets, if set to true will suppress this behavior and instead keep everything for forwarding to the phone (for debugging). -### A note on MTU sizes +### A Note on MTU Sizes This device will work with any MTU size, but it is highly recommended that you call your phone's "setMTU function to increase MTU to 512 bytes" as soon as you connect to a service. This will dramatically improve performance when reading/writing packets. @@ -99,7 +99,7 @@ This device will work with any MTU size, but it is highly recommended that you c On connect, you should send a want_config_id protobuf to the device. This will cause the device to send its node DB and radio config via the fromradio endpoint. After sending the full DB, the radio will send a want_config_id to indicate it is done sending the configuration. -### Other Bluetooth services +### Other Bluetooth Services This document focuses on the core device protocol, but it is worth noting that the following other Bluetooth services are also provided by the device. @@ -125,8 +125,8 @@ Characteristics #### DeviceInformationService -Implements the standard BLE contract for this service (has software version, hardware model, serial number, etc...) +Implements the standard BLE contract for this service (has software version, hardware model, serial number, etc...). #### BatteryLevelService -Implements the standard BLE contract service, provides battery level in a way that most client devices should automatically understand (i.e. it should show in the Bluetooth devices screen automatically) +Implements the standard BLE contract service, provides battery level in a way that most client devices should automatically understand (i.e. it should show in the Bluetooth devices screen automatically). diff --git a/docs/development/device/http-api.mdx b/docs/development/device/http-api.mdx index 454d8054..d9b83895 100644 --- a/docs/development/device/http-api.mdx +++ b/docs/development/device/http-api.mdx @@ -42,7 +42,7 @@ A `PUT` request to this endpoint will be expected to contain a series of ToRadio The protobufs will be sent in binary as the body for the request. -For the initial implementation, only one ToRadio message per request is supported, but future optimizations to improve throughput might add support for multiple ToRadios in a single request. +Only one ToRadio message per request is supported. #### OPTIONS @@ -76,9 +76,7 @@ The protobufs will be sent in binary as the body for the request. ## Authentication -The initial release will not have **any** user authentication. We assume access to the HTTP server is enough to establish trust. - -Since authentication is also eventually needed for our other transports (TCP and eventually open BLE), we will be adding authentication **in-band**. When added in the second release there will be a new payload supported inside ToRadio for `SignIn `. The server will respond with a FromRadio `SignInResponse okay|fail`. Also, in the case of the REST API, that SignIn status will then be associated with the current session key. Most (all?) ToRadio packets will be ignored if the client is not signed in. Most (all?) FromRadio packets will be sent to clients that are not signed in. +There isn't **any** user authentication. We assume access to the HTTP server is enough to establish trust. ## Client @@ -90,7 +88,7 @@ A reference client written in JavaScript will provide a JavaScript API for using ### Protoman -See: [https://github.com/spluxx/Protoman] +See: https://github.com/spluxx/Protoman Protoman is able to interface with the Meshtastic REST API out of the box. This is useful for manual testing of the endpoints. @@ -100,4 +98,4 @@ HTTP and HTTPS are both supported on the ESP32 using self signed certificates on ## Related documents -- Interesting slide pack on the concept: [https://www.slideshare.net/mokeefe/javaone-2009-ts5276-restful-protocol-buffers] +- Interesting slide pack on the concept: https://www.slideshare.net/mokeefe/javaone-2009-ts5276-restful-protocol-buffers \ No newline at end of file diff --git a/docs/development/device/module-api.mdx b/docs/development/device/module-api.mdx index 01832c4c..e47ffac1 100644 --- a/docs/development/device/module-api.mdx +++ b/docs/development/device/module-api.mdx @@ -57,7 +57,7 @@ A number of [key services](http://github.com/meshtastic/firmware/tree/master/src - [NodeInfoModule](http://github.com/meshtastic/firmware/tree/master/src/modules/NodeInfoModule.h) - Receives/sends User information to other nodes so that usernames are available in the databases. -- [RemoteHardwareModule](http://github.com/meshtastic/firmware/tree/master/src/modules/RemoteHardwareModule.h) - A module that provides easy remote access to device hardware (for things like turning GPIOs on or off). Intended to be a more extensive example and provide a useful feature of its own. See [remote-hardware](/docs/hardware/peripheral/#remote-hardware) for details. +- [RemoteHardwareModule](http://github.com/meshtastic/firmware/tree/master/src/modules/RemoteHardwareModule.h) - A module that provides easy remote access to device hardware (for things like turning GPIOs on or off). Intended to be a more extensive example and provide a useful feature of its own. See [remote-hardware](/docs/configuration/module/remote-hardware) for details. - [ReplyModule](http://github.com/meshtastic/firmware/tree/master/src/modules/ReplyModule.h) - A simple module that just replies to any packet it receives (provides a 'ping' service). diff --git a/docs/development/firmware/building.mdx b/docs/development/firmware/building.mdx index 63db19fc..90e3ba3e 100644 --- a/docs/development/firmware/building.mdx +++ b/docs/development/firmware/building.mdx @@ -60,6 +60,6 @@ The build system is modular. Adding a new board variant for an already supported 2. [Send a proposal](https://github.com/meshtastic/firmware/issues/new?assignees=&labels=enhancement%2Ctriage&template=New+Board.yml&title=%5BBoard%5D%3A+) to add a new board. 3. If approved, go to (https://github.com/meshtastic/protobufs) and send a Pull Request for the `mesh.proto` file, adding your board to the `HardwareModel` Enum. 4. Change your define in `platformio.ini` from `PRIVATE_HW` to `YOUR_BOARD`. Adjust any macro guards in the code you need to support your board. -5. Add your board identifier to `configuration.h` on the firmware repo and send in that Pull Request too. +5. Add your board identifier to `architecture.h` on the firmware repo in the folder of the platform you are using, and send in that Pull Request too. 6. Wait for the Pulls to be merged back into Master. 7. Profit :-) diff --git a/docs/development/firmware/port-numbers.mdx b/docs/development/firmware/port-numbers.mdx index 6afcb940..c0bfea43 100644 --- a/docs/development/firmware/port-numbers.mdx +++ b/docs/development/firmware/port-numbers.mdx @@ -6,7 +6,7 @@ sidebar_label: Port Numbers Any new app that runs on the device or via sister apps on phones/PCs should pick and use a unique "portnum" for their applications use. -The current list of port numbers can be found listed in the [protobufs](https://buf.build/meshtastic/protobufs/docs/main:meshtastic#meshtastic.CriticalErrorCode) +The current list of port numbers can be found listed in the [protobufs](https://buf.build/meshtastic/protobufs/docs/main:meshtastic#meshtastic.PortNum) ## Assignment diff --git a/docs/development/web/index.mdx b/docs/development/web/index.mdx index 9f4c5be6..2e3466db 100644 --- a/docs/development/web/index.mdx +++ b/docs/development/web/index.mdx @@ -11,7 +11,7 @@ The Meshtastic web interface can be hosted or served from a node. The official hosted version can be found at [https://client.meshtastic.org](https://client.meshtastic.org). -The version served from a node can be accessed by first [connecting your node to your network](/docs/settings/config/network) and then navigating to http://meshtastic.local (or your_node_ip.local). +The version served from a node can be accessed by first [connecting your node to your network](/docs/configuration/radio/network) and then navigating to http://meshtastic.local (or your_node_ip.local). ## Development & Building diff --git a/docs/getting-started/flashing-firmware/esp32/cli-script.mdx b/docs/getting-started/flashing-firmware/esp32/cli-script.mdx index 51bbade3..5c29926e 100644 --- a/docs/getting-started/flashing-firmware/esp32/cli-script.mdx +++ b/docs/getting-started/flashing-firmware/esp32/cli-script.mdx @@ -18,7 +18,7 @@ Before you flash your device start by verifying connectivity with the device bei :::note The [T-Beam 0.7](/docs/hardware/devices/tbeam#t-beam---v07) board is an earlier version of the T-Beam board, and due to changes in the design in subsequent iterations this board uses a specific firmware file different from the other T-Beam boards. -`firmware-tbeam0.7-1.x.x.bin` is the correct firmware. `firmware-tbeam-1.x.x.bin` is incompatible. For all other [T-Beam](/docs/hardware/devices/tbeam) boards `firmware-tbeam-1.x.x.bin` is the correct selection. +`firmware-tbeam0.7-X.X.X.xxxxxxx.bin` is the correct firmware. `firmware-tbeam-X.X.X.xxxxxxx.bin` is incompatible. For all other [T-Beam](/docs/hardware/devices/tbeam) boards `firmware-tbeam-X.X.X.xxxxxxx.bin` is the correct selection. ::: ## Command Line Interface Instructions @@ -186,7 +186,7 @@ cd ~/Downloads/firmware/ Install or Update the device that you have by using the following commands according to your operating system: :::caution -Be very careful to install the correct load for your board. In particular the popular 'T-BEAM' radio from TTGO is not called 'TTGO-Lora' (that is a different board). So don't install the 'TTGO-Lora' build on a TBEAM, it won't work correctly. +Be very careful to install the correct firmware file for your board. In particular, the popular 'T-BEAM' radio from TTGO is not called 'TTGO-Lora' (that is a different board). So don't install the 'TTGO-Lora' build on a TBEAM, it won't work correctly. If you flash the incorrect device firmware, it may appear to successfully complete, yet the device will usually become unresponsive, displaying a blank screen (if equipped). Attempt to flash the correct version. Please note, while these devices are quite resilient and damage is not always likely, there is a possibility of onboard radio and peripheral damage due to incorrect GPIO pin direction. ::: -### Select Firmware - -Browse to the previously downloaded firmware and select the correct firmware based on the board type and frequency. - -:::caution -Be very careful to install the correct load for your board. In particular the popular 'T-BEAM' radio from TTGO is not called 'TTGO-Lora' (that is a different board). So don't install the 'TTGO-Lora' build on a TBEAM, it won't work correctly. If you flash the incorrect firmware: It may appear to flash correctly, but if your device has a screen it might stay blank. On-board radio peripherals might be damaged because of GPIO pin direction, but you should just try to flash with the correct version. -::: - -### Flash Firmware - -Select `Flash ESP`. It may take a minute or two. Once complete, "Done! Flashing is complete!" will be shown. ## Connect and Configure Device diff --git a/docs/getting-started/flashing-firmware/esp32/index.mdx b/docs/getting-started/flashing-firmware/esp32/index.mdx index f1353a13..cca952a3 100644 --- a/docs/getting-started/flashing-firmware/esp32/index.mdx +++ b/docs/getting-started/flashing-firmware/esp32/index.mdx @@ -14,3 +14,9 @@ The recommended method for firmware flashing is the [Web-Based Installer.](https 1. The [Web-Based Installer](/docs/getting-started/flashing-firmware/esp32/web-flasher.mdx) requires either Chrome or Edge browsers but is an excellent choice for quickly flashing devices. **This method is highly recommended for firmware flashing, especially for new users of the project, as it is easy to use.** 2. The [CLI Script](/docs/getting-started/flashing-firmware/esp32/cli-script) is considered the "manual process" for flashing firmware. 3. Flashing your device using an [external serial adapter](/docs/getting-started/flashing-firmware/esp32/external-serial-adapter) should only be attempted as a last resort if no other method has been successful. + +:::info note + +The [web client](http://localhost:3000/docs/software/web-client) at meshtastic.local is only updated with a full wipe and reinstall of the device. If you choose a reinstall, you will get the latest (bundled) web interface. To preserve your settings, you may [export your configuration](../../../software/python/cli/#--export-config) prior to a reinstall and load them back after. + +::: \ No newline at end of file diff --git a/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx b/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx index 6c9a56e3..d91560c8 100644 --- a/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx +++ b/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r.mdx @@ -9,6 +9,26 @@ The only difference between the _RAK4631-R_ (RUI3) and the _RAK4631_ (Arduino) i Meshtastic requires the Arduino bootloader on RAK WisBlock nRF52-based boards. The process of converting the bootloader only needs to be performed once. +Here are two ways to flash the bootloader: + +## USB Device Firmware Upgrade (DFU) + +1. Install [Python](https://www.python.org/downloads/) +2. Install [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil) + ```shell + pip3 install adafruit-nrfutil + ``` +3. Download the required bootloader: [WisCore_RAK4631_Board_Bootloader.zip](https://github.com/RAKWireless/WisBlock/releases/download/0.4.2/WisCore_RAK4631_Board_Bootloader.zip) +4. Connect your RAK device by USB. +5. Flash the bootloader + ```shell + adafruit-nrfutil --verbose dfu serial --package ./WisCore_RAK4631_Board_Bootloader.zip -p /dev/ttyACM0 -b 115200 --singlebank --touch 1200 + ``` + Note: The serial port name (`/dev/ttyACM0`) may differ depending on your operating system. Make sure to identify the correct port name for your setup. +6. Continue with the normal [flashing instructions](/docs/getting-started/flashing-firmware/nrf52/drag-n-drop) + +## Debugger + This conversion requires the use of either a [DAPLink](https://daplink.io/) or [J-Link](https://www.segger.com/products/debug-probes/j-link/). The most reasonably priced and available is the [RAKDAP1](https://store.rakwireless.com/products/daplink-tool). 1. Install [Python](https://www.python.org/downloads/) diff --git a/docs/getting-started/flashing-firmware/nrf52/drag-n-drop.mdx b/docs/getting-started/flashing-firmware/nrf52/drag-n-drop.mdx index 9d0b47b5..ce6f4af5 100644 --- a/docs/getting-started/flashing-firmware/nrf52/drag-n-drop.mdx +++ b/docs/getting-started/flashing-firmware/nrf52/drag-n-drop.mdx @@ -17,7 +17,7 @@ Download and unzip the latest firmware from [Meshtastic Downloads](https://mesht 2. Double click the reset button on your device (this will put it into bootloader mode) 3. Notice a new drive will be mounted on your computer (Windows, Mac, or Linux) 4. Open this drive and you should see three files: `CURRENT.UF2`, `INDEX.HTM`, and `INFO_UF2.TXT` -5. Drop the appropriate firmware file (`firmware-DEVICE_NAME-vx.x.x-xxxxxxx.uf2`) from the release onto this drive. +5. Drop the appropriate firmware file (`firmware-DEVICE_NAME-x.x.x-xxxxxxx.uf2`) from the release onto this drive. Once the file has finished copying onto the drive, the device will reboot and install the Meshtastic firmware. diff --git a/docs/getting-started/index.mdx b/docs/getting-started/index.mdx index 5def31c1..79c4720d 100644 --- a/docs/getting-started/index.mdx +++ b/docs/getting-started/index.mdx @@ -24,8 +24,8 @@ Before you begin, it's important to determine which kind of hardware you're usin The ESP32 chip is older and consumes more power than the nRF52 chip, but is equipped with both WiFi and Bluetooth. Supported ESP32 devices include: -- LILYGO® TTGO T-Beam -- LILYGO® TTGO Lora +- LILYGO® TTGO T-Beam (>V1.1 recommended) +- LILYGO® TTGO Lora (>V2.1 recommended) - Nano G1 - Station G1 - Heltec V3 and Wireless Stick Lite V3 diff --git a/docs/getting-started/initial-config.mdx b/docs/getting-started/initial-config.mdx index 140c7c0c..554f15ef 100644 --- a/docs/getting-started/initial-config.mdx +++ b/docs/getting-started/initial-config.mdx @@ -34,7 +34,7 @@ values={[ - [Android App](/docs/category/android-app) - [Web Client](https://client.meshtastic.org) -- [iOS App](/docs/category/apple-apps) +- [iOS/iPadOS/macOS App](/docs/category/apple-apps) @@ -113,7 +113,7 @@ Now that you have set the LoRa region on your device, you can continue with conf
Device Configuration diff --git a/docs/hardware/antennas/_category_.yml b/docs/hardware/antennas/_category_.yml deleted file mode 100644 index adf027ff..00000000 --- a/docs/hardware/antennas/_category_.yml +++ /dev/null @@ -1,7 +0,0 @@ -label: Antennas -collapsible: true -position: 2 -link: - type: generated-index - title: Antennas - slug: antenna diff --git a/docs/hardware/antennas/index.mdx b/docs/hardware/antennas/index.mdx new file mode 100644 index 00000000..45d7711a --- /dev/null +++ b/docs/hardware/antennas/index.mdx @@ -0,0 +1,44 @@ +--- +id: antennas +title: LoRa Antennas +sidebar_label: Antennas +sidebar_position: 2 +--- + +## Pages +[Antenna Testing](./testing.mdx)

+Guidance for testing and using your antennas. + +[Antenna Reports](./antenna-report.mdx)

+Community submitted SWR testing. + +[Antenna Selection](./lora-antennas.mdx)

+Considerations for choosing an antenna. + +[Additional Resources](./resources.mdx)

+Antenna designs, tools, and coverage simulators. + + +## Community Favorites +These antennas have garnered positive feedback and frequent recommendations within our community. However, we encourage you to conduct your own research to ensure the best choice for your needs. We are not responsible for individual experiences or results. + +### Compact / Handheld +| Frequency | Model | Purchase Links | +| :--: | :--: | :--: | +| 915 or 868 | GIZONT 17cm | [AliExpress](https://www.aliexpress.us/item/3256804421300249.html) | +| 915 or 868 | GIZONT 20cm | [AliExpress](https://www.aliexpress.us/item/3256804397374144.html) | +| 915 | LINX ANT-916-CW-HW-SMA | [Mouser](https://www.mouser.com/ProductDetail/TE-Connectivity-Linx-Technologies/ANT-916-CW-HW-SMA?qs=PKuFCuYbGOfeZQiEfd4fWA%3D%3D) [DigiKey](https://www.digikey.com/en/products/detail/te-connectivity-linx/ANT-916-CW-HW-SMA/2694126) | +| 915 | ZIISOR TX915-JKS-20 | [AliExpress](https://www.aliexpress.us/item/3256801688016561.html) | +| 915 | CDEBYTE TX915-JKD-20 (5-pack)| [AliExpress](https://www.aliexpress.us/item/3256803106771365.html) | + +### Base Station / Repeater +| Frequency | Model | Purchase Links | +| :--: | :--: | :--: | +| 915 | Alfa AOA-915-5ACM | [Rokland](https://store.rokland.com/products/alfa-aoa-915-5acm-5-dbi-omni-outdoor-915mhz-802-11ah-mini-antenna-for-lora-halow-application) | +| 915 | Rokland 32" 5.8 dBi | [Rokland](https://store.rokland.com/collections/802-11ah-wi-fi-halow/products/5-8-dbi-n-male-omni-outdoor-915-mhz-antenna-large-profile-32-height-for-helium-rak-miner-2-nebra-indoor-bobcat) | + +### Automotive +| Frequency | Model | Purchase Links | +| :--: | :--: | :--: | +| 915 | Laird MA9-5N | [DigiKey](https://www.digikey.com/en/products/detail/te-connectivity-laird/MA9-5N/3486940) | +| 915 | Taoglas TI.16.5F11 | [DigiKey](https://www.digikey.com/en/products/detail/taoglas-limited/TI-16-5F11/3724558) | diff --git a/docs/hardware/antennas/testing.mdx b/docs/hardware/antennas/testing.mdx index f69e16fa..da8d3d68 100644 --- a/docs/hardware/antennas/testing.mdx +++ b/docs/hardware/antennas/testing.mdx @@ -42,7 +42,7 @@ As mentioned, while stating the obvious, the simplest way of performing a test i - Change aerials, repeat, and evaluate results. :::note -The [range test module](/docs/settings/moduleconfig/range-test) has been designed for exactly this purpose. It allows one node to transmit a frequent message, and another node to record which messages were received. This data is saved and can be imported to applications such as Google Earth. +The [range test module](/docs/configuration/module/range-test) has been designed for exactly this purpose. It allows one node to transmit a frequent message, and another node to record which messages were received. This data is saved and can be imported to applications such as Google Earth. ::: On the topic of testing - performing your own testing and providing feedback is the lifeblood of Meshtastic and open source projects. diff --git a/docs/hardware/devices/Nano Series/buttons.mdx b/docs/hardware/devices/Nano Series/buttons.mdx new file mode 100644 index 00000000..386a234c --- /dev/null +++ b/docs/hardware/devices/Nano Series/buttons.mdx @@ -0,0 +1,75 @@ +--- +id: buttons +title: Hardware Buttons +sidebar_label: Buttons +sidebar_position: 1 +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +## Device + + + + + +### Nano G2 Ultra Buttons + +- **User/Program Button:** + - **Single press:** Changes the information page displayed on the device's screen. + - **Double press:** Sends an adhoc ping of the device's position to the network. + - **Long press:** Will signal the device to shutdown after 5 seconds (*soft off*). +- **Message Read Button:** + - **Single press:** Clears the New Message LED. + +### Nano G2 Ultra Switches + +- **Power:** + - **Toggle Up:** Turns on the device. + - **Toggle Down:** Turns off the device. +- **Location Pin:** + - **Toggle Up:** Sets GPS to operating mode. + - **Toggle Down:** Sets GPS to low power mode. +- **Bell:** + - **Toggle Up:** Selects Buzzer for Enhanced Message Notification Circuit. + - **Toggle Down:** Selects LED for Enhanced Message Notification Circuit. + + + + + +### Nano G1 Explorer Buttons + +- **User/Program Button:** + - **Single press:** Changes the information page displayed on the device's screen. + - **Double press:** Sends an adhoc ping of the device's position to the network. +- **Message Read Button:** + - **Single press:** Clears the New Message LED. + +### Nano G1 Explorer Switches + +- **Power:** + - **Toggle Up:** Turns on the device. + - **Toggle Down:** Turns off the device. +- **Location Pin:** + - **Toggle Up:** Sets GPS to operating mode. + - **Toggle Down:** Sets GPS to low power mode. +- **Bell:** + - **Toggle Up:** Selects Buzzer for Enhanced Message Notification Circuit. + - **Toggle Down:** Selects LED for Enhanced Message Notification Circuit. + + + + + + + + diff --git a/docs/hardware/devices/Nano Series/index.mdx b/docs/hardware/devices/Nano Series/index.mdx new file mode 100644 index 00000000..01452b70 --- /dev/null +++ b/docs/hardware/devices/Nano Series/index.mdx @@ -0,0 +1,147 @@ +--- +id: nano-series +title: Nano Series +sidebar_label: Nano Series +sidebar_position: 7 +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +The Nano Series, designed by Neil Hao from B&Q Consulting and powered by Meshtastic, are devices engineered to be a portable and durable solution for outdoor adventures such as hiking, piloting, skiing and more. They are designed to strike a balance between RF performance, size, ruggedness, and power efficiency — providing users with a reliable solution in various outdoor environments. + +For a full and complete comparison of the different devices in the Nano series, be sure to visit B&Q Consulting's [nano series wiki page](https://wiki.uniteng.com/en/meshtastic#nano-edition). + + + + + +The Nano G2 Ultra and Nano G1 Explorer have exactly the same Lora front-end circuit design and internal wideband Lora antenna. The primary design goal of the Nano G2 Ultra is to reduce power consumption and improve battery life by using the low power MCU NRF52840. The typical battery life is optimized to be about 3.5 days. As with the Nano G1 Explorer, the Nano G2 Ultra's design also takes into account the potential impact of the human body on its antenna performance, ensuring optimal RF performance even when carried in a pocket. + +### Nano G2 Ultra Specifications + +- **MCU:** + - NRF52840 + - Bluetooth 5.4 +- **LoRa Transceiver:** + - Semtech SX1262 +- **Frequency Options:** + - _US (902.0Mhz to 928.0Mhz), EU_868 (869.4Mhz to 869.65Mhz), JP (920.8Mhz to 927.8Mhz), ANZ (915.0Mhz to 928.0Mhz), RU (868.7Mhz to 869.2Mhz), KR (920.0Mhz to 923.0Mhz), TW (920.0Mhz to 925.0Mhz), IN (865.0Mhz to 867.0Mhz), NZ_865 (864.0Mhz to 868.0Mhz), TH (920.0Mhz to 925.0Mhz), UA_868 (868.0Mhz to 868.6Mhz)._ +- **Navigation Module:** + - ATGM336H-5N-71 (Supports GPS, BDS and GLONASS) +- **Antenna:** + - New internal wide-band antenna with optimized wide-band LoRa RF frontend circuit. +- **Connectors:** + - USB-C + +### Nano G2 Ultra Features + +- Meshtastic pre-installed. +- New internal GPS antenna that significantly reduces GPS lock time compared to the Nano G1. Additionally, the GPS module can be set to a low-power mode with the GPS physical switch. +- Integrated enhanced message notification circuit for LED or Buzzer, configurable via physical switches. +- Physical power switch to easily turn the device on/off. +- Replaceable 1.3" OLED screen with a FPC connector. +- Internal Li-Polymer Battery Charger. _(An optional 3.7V 603450 JST 1.25mm Rechargeable Li-Polymer Battery can also be installed.)_ +- Buck-boost converter to provide stable 3.3V to the system even in the event the Li-Polymer battery voltage drops to as low as 2.5V. Supply voltage stability is very important to ensure that the performance of RF circuits meets design expectations. +- NXP PCF8563 Real Time Clock (RTC) +- Optional I2C Extension Board (1x GROVE I2C Socket and 1x SparkFun QWIIC I2C Socket for Sensors and Keyboard) + +### Nano G2 Ultra Resources + +- Firmware file: `firmware-nano-g2-ultra-X.X.X.xxxxxxx.uf2` +- Official Purchase Links: + - [Official Store](https://shop.uniteng.com/product/meshtastic-mesh-device-nano-g2-ultra/) + - [Official Tindie Store](https://www.tindie.com/products/neilhao/meshtastic-mesh-device-nano-g2-ultra/) + +Further information on the Nano G2 Ultra can be found on [Unit Engineering's Wiki](https://wiki.uniteng.com/en/meshtastic/nano-g2-ultra). + +![Nano G2 Ultra](/img/hardware/nano_g2_ultra.jpeg) + + + + +The Nano G1 Explorer, powered by Meshtastic, is a significant upgrade from the Nano G1. It incorporates the latest RF technologies from B&Q Consulting, featuring a new internal wide-band LoRa antenna that can support frequencies ranging from 815 MHz to 940 MHz. With this new antenna, combined with an optimized wide-band LoRa RF frontend circuit, the Nano G1 Explorer is capable of working with the majority of LoRa frequency bands worldwide without the need for antenna changes. The device's design also takes into account the potential impact of the human body on its antenna performance, ensuring optimal RF performance even when carried in a pocket. + +### Nano G1 Explorer Specifications + +- **MCU:** + - ESP32 WROOM (WiFi & Bluetooth) + - Bluetooth 4.2 +- **LoRa Transceiver:** + - Semtech SX1262 +- **Frequency Options:** + - _US (902.0Mhz to 928.0Mhz), EU_868 (869.4Mhz to 869.65Mhz), JP (920.8Mhz to 927.8Mhz), ANZ (915.0Mhz to 928.0Mhz), RU (868.7Mhz to 869.2Mhz), KR (920.0Mhz to 923.0Mhz), TW (920.0Mhz to 925.0Mhz), IN (865.0Mhz to 867.0Mhz), NZ_865 (864.0Mhz to 868.0Mhz), TH (920.0Mhz to 925.0Mhz), UA_868 (868.0Mhz to 868.6Mhz)._ +- **Navigation Module:** + - ATGM336H-5N-71 (Supports GPS, BDS and GLONASS) +- **Antenna:** + - New internal wide-band antenna with optimized wide-band LoRa RF frontend circuit. +- **Connectors:** + - USB-C + +### Nano G1 Explorer Features + +- Meshtastic pre-installed. +- New internal GPS antenna that significantly reduces GPS lock time compared to the Nano G1. Additionally, the GPS module can be set to a low-power mode with the GPS physical switch. +- Integrated enhanced message notification circuit for LED or Buzzer, configurable via physical switches. +- Physical power switch to easily turn the device on/off. +- Replaceable 1.3" OLED screen with a FPC connector. +- Internal Li-Polymer Battery Charger. _(An optional 3.7V 603450 JST 1.25mm Rechargeable Li-Polymer Battery can also be installed.)_ +- Buck-boost converter to provide stable 3.3V to the system even in the event the Li-Polymer battery voltage drops to as low as 2.5V. Supply voltage stability is very important to ensure that the performance of RF circuits meets design expectations. + +### Nano G1 Explorer Resources + +- Firmware file: `firmware-nano-g1-explorer-X.X.X.xxxxxxx.bin` +- Official Purchase Links: + - [Official Store](https://shop.uniteng.com/product/meshtastic-mesh-device-nano-edition/) + - [Official Tindie Store](https://www.tindie.com/products/neilhao/meshtastic-mesh-device-nano-g1-explorer/) + +Further information on the Nano G1 can be found on [Unit Engineering's Wiki](https://wiki.uniteng.com/en/meshtastic/nano-g1-explorer). + +![Nano G1 Explorer](/img/hardware/nano_g1_explorer.jpeg) + + + + +The Nano G1 is the first dedicated hardware device to be designed from scratch purely for Meshtastic by Neil Hao. It has been designed to be small and compact with the inclusion of a high quality internal PCB antenna. + +### Nano G1 Specifications + +- **MCU** + - ESP32 WROOM (WiFi & Bluetooth) + - Bluetooth 4.2 +- **LoRa Transceiver** + - Semtech SX1276 + - Additional ultra-low noise amplifier to improve LoRa receiver sensitivity +- **Frequency options** + - US-915 MHz +- **Navigation Module** + - ATGM336H-5N-71 (Supports GPS, BDS and GLONASS) +- **Antenna** + - Built in 915Mhz Lora PCB Antenna (VSWR \<=1.5 @ 915 MHz) +- **Connectors** + - USB-C + +### Nano G1 Features + +- Meshtastic pre-installed +- User button +- 1.3 inch OLED screen +- Buzzer + +### Nano G1 Resources + +- Firmware file: `firmware-nano-g1-X.X.X.xxxxxxx.bin` + +Further information on the Nano G1 can be found on [Unit Engineering's Wiki](https://uniteng.com/wiki/doku.php?id=meshtastic:nano). + +![Nano G1](/img/hardware/nano-g1-front.jpg) + + + diff --git a/docs/hardware/devices/heltec/index.mdx b/docs/hardware/devices/heltec/index.mdx index fba1b584..2c105f8f 100644 --- a/docs/hardware/devices/heltec/index.mdx +++ b/docs/hardware/devices/heltec/index.mdx @@ -2,7 +2,7 @@ id: heltec title: HELTEC® LoRa 32 sidebar_label: HELTEC® LoRa 32 -sidebar_position: 7 +sidebar_position: 5 --- import Tabs from "@theme/Tabs"; @@ -69,7 +69,6 @@ This device may have issues charging a connected battery if utilizing a USB-C to - Dedicated 2.4 GHz metal spring antenna for WiFi/Bluetooth - U.FL/IPEX antenna connector for LoRa - ## Features - Built in 0.96 inch OLED display @@ -82,7 +81,6 @@ This device may have issues charging a connected battery if utilizing a USB-C to Image Source: [Heltec](https://resource.heltec.cn/download/WiFi_LoRa32_V3/HTIT-WB32LA(F)_V3.png) - ## Resources - Firmware file: `firmware-heltec-v3-X.X.X.xxxxxxx.bin` @@ -111,7 +109,6 @@ This device may have issues charging a connected battery if utilizing a USB-C to - Dedicated 2.4 GHz stamped metal antenna for WiFi/Bluetooth - U.FL/IPEX antenna connector for LoRa - ## Features - No display. @@ -123,14 +120,12 @@ This device may have issues charging a connected battery if utilizing a USB-C to - SCL: GPIO47 - SDA: GPIO48 - ### Pin Map ![HTIT-WSL_V3_PIN_MAP](/img/hardware/HTIT-WSL_V3_PIN_MAP.png) Image Source: [Heltec](https://resource.heltec.cn/download/Wireless_Stick_Lite_V3/HTIT-WSL_V3.png) - ## Resources - Firmware file: `firmware-heltec-wsl-v3-X.X.X.xxxxxxx.bin` @@ -158,20 +153,17 @@ This device may have issues charging a connected battery if utilizing a USB-C to - Dedicated 2.4 GHz metal spring antenna for WiFi/Bluetooth - U.FL/IPEX antenna connector for LoRa and GNSS - ## Features - Onboard 0.96-inch LCD display - User and Reset Buttons - ## Pin Map ![HT-Tracker_V1 Pin Map](/img/hardware/HT-Tracker_V1_Pin_Map.png) Image Source: [Heltec](https://heltec.org/project/wireless-tracker/) - ## Resources - Firmware file: `firmware-heltec-wireless-tracker-X.X.X.xxxxxxx.bin` @@ -199,14 +191,12 @@ This device may have issues charging a connected battery if utilizing a USB-C to - U.FL/IPEX antenna connector for LoRa - Integrated 2.4 GHz PCB antenna - ## Features - Onboard 2.13-inch black and white E-Ink display screen - User and Reset switches - No GPS - ## Resources - Firmware file: `firmware-heltec-wireless-paper-X.X.X.xxxxxxx.bin` diff --git a/docs/hardware/devices/lora/index.mdx b/docs/hardware/devices/lora/index.mdx index 85fdd8b9..4c0c89c1 100644 --- a/docs/hardware/devices/lora/index.mdx +++ b/docs/hardware/devices/lora/index.mdx @@ -2,7 +2,7 @@ id: lora title: LILYGO® TTGO Lora Devices sidebar_label: LILYGO® Lora -sidebar_position: 3 +sidebar_position: 4 --- import Tabs from "@theme/Tabs"; @@ -217,6 +217,30 @@ Early versions of some of these boards contained the wrong component in the LiPo - microSD connector - No GPS +## Flashing the T3S3 + +:::warning + +Do not proceed unless an antenna is connected to avoid possible damage to the device's radio. + +::: + +The following process will manually place the device into the Espressif Firmware Download mode: + +1. Switch off the device. +2. Connect the USB-C data cable to the device. A blue LED will illuminate while display stays black. +3. Press and hold the BOOT button to the right of the display. +4. Switch the device on. +5. After 2-3 seconds, release the BOOT button. + +With the device now in the Espressif Firmware Download mode, you can proceed with flashing using one of the supported flashing methods. It's generally recommended to use the [Web Flasher](https://flasher.meshtastic.org/). You can select "Tlora T3s3 V1" from the device drop-down. + +:::note + +If after successfully flashing the device and the screen remains black, you may need to use the [CLI Script](https://meshtastic.org/docs/getting-started/flashing-firmware/esp32/cli-script) to flash Meshtastic. + +::: + ## Resources - Firmware file: `firmware-tlora-t3s3-v1.xxxxxxx.bin` diff --git a/docs/hardware/devices/nano-g1-explorer/buttons.mdx b/docs/hardware/devices/nano-g1-explorer/buttons.mdx deleted file mode 100644 index 3b467694..00000000 --- a/docs/hardware/devices/nano-g1-explorer/buttons.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -id: buttons -title: Hardware Buttons -sidebar_label: Buttons -sidebar_position: 1 ---- - -import { power } from "@heroicons/react/24/solid"; -import { information_circle } from "@heroicons/react/24/solid"; -import { envelope_open } from "@heroicons/react/24/solid"; -import { map_pin } from "@heroicons/react/24/solid"; -import { bell } from "@heroicons/react/24/solid"; - -## Functionality - -### Buttons - -- **User/Program Button:** - - **Single press:** Changes the information page displayed on the device's screen. - - **Double press:** Sends an adhoc ping of the device's position to the network. -- **Message Read Button:** - - **Single press:** Clears the New Message LED. - -### Switches - -- **Power:** - - **Toggle Up:** Turns on the device. - - **Toggle Down:** Turns off the device. -- **Location Pin:** Toggles GPS module into operating and lower power modes. - - **Toggle Up:** Sets GPS to operating mode. - - **Toggle Down:** Sets GPS to low power mode. -- **Bell:** - - **Toggle Up:** Selects Buzzer for Enhanced Message Notification Circuit. - - **Toggle Down:** Selects LED for Enhanced Message Notification Circuit. diff --git a/docs/hardware/devices/nano-g1-explorer/index.mdx b/docs/hardware/devices/nano-g1-explorer/index.mdx deleted file mode 100644 index 39320f6a..00000000 --- a/docs/hardware/devices/nano-g1-explorer/index.mdx +++ /dev/null @@ -1,45 +0,0 @@ ---- -id: nano-g1-explorer -title: Nano G1 Explorer -sidebar_label: Nano G1 Explorer -sidebar_position: 6 ---- - -The Nano G1 Explorer, powered by Meshtastic, is a significant upgrade from the Nano G1. It incorporates the latest RF technologies from B&Q Consulting, featuring a new internal wide-band LoRa antenna that can support frequencies ranging from 815 MHz to 940 MHz. With this new antenna, combined with an optimized wide-band LoRa RF frontend circuit, the Nano G1 Explorer is capable of working with the majority of LoRa frequency bands worldwide without the need for antenna changes. The device's design also takes into account the potential impact of the human body on its antenna performance, ensuring optimal RF performance even when carried in a pocket. - -### Specifications - -- **MCU:** - - ESP32 WROOM (WiFi & Bluetooth) - - Bluetooth 4.2 -- **LoRa Transceiver:** - - Semtech SX1262 -- **Frequency Options:** - - _US (902.0Mhz to 928.0Mhz), EU_868 (869.4Mhz to 869.65Mhz), JP (920.8Mhz to 927.8Mhz), ANZ (915.0Mhz to 928.0Mhz), RU (868.7Mhz to 869.2Mhz), KR (920.0Mhz to 923.0Mhz), TW (920.0Mhz to 925.0Mhz), IN (865.0Mhz to 867.0Mhz), NZ_865 (864.0Mhz to 868.0Mhz), TH (920.0Mhz to 925.0Mhz), UA_868 (868.0Mhz to 868.6Mhz)._ -- **Navigation Module:** - - ATGM336H-5N-71 (Supports GPS, BDS and GLONASS) -- **Antenna:** - - New internal wide-band antenna with optimized wide-band LoRa RF frontend circuit. -- **Connectors:** - - USB-C - -### Features - -- Meshtastic pre-installed. -- New internal GPS antenna that significantly reduces GPS lock time compared to the Nano G1. Additionally, the GPS module can be set to a low-power mode with the GPS physical switch. -- Integrated enhanced message notification circuit for LED or Buzzer, configurable via physical switches. -- Physical power switch to easily turn the device on/off. -- Replaceable 1.3" OLED screen with a FPC connector. -- Internal Li-Polymer Battery Charger. _(An optional 3.7V 603450 JST 1.25mm Rechargeable Li-Polymer Battery can also be installed.)_ -- Buck-boost converter to provide stable 3.3V to the system even in the event the Li-Polymer battery voltage drops to as low as 2.5V. Supply voltage stability is very important to ensure that the performance of RF circuits meets design expectations. - -### Resources - -- Firmware file: `firmware-nano-g1-explorer-X.X.X.xxxxxxx.bin` -- Official Purchase Links: - - [Official Store](https://shop.uniteng.com/product/meshtastic-mesh-device-nano-edition/) - - [Official Tindie Store](https://www.tindie.com/products/neilhao/meshtastic-mesh-device-nano-g1-explorer/) - -Further information on the Nano G1 can be found on [Unit Engineering's Wiki](https://wiki.uniteng.com/en/meshtastic/nano-g1-explorer). - -![Nano G1 Explorer](/img/hardware/nano_g1_explorer.jpeg) diff --git a/docs/hardware/devices/nano-g1/buttons.mdx b/docs/hardware/devices/nano-g1/buttons.mdx deleted file mode 100644 index 010425b0..00000000 --- a/docs/hardware/devices/nano-g1/buttons.mdx +++ /dev/null @@ -1,12 +0,0 @@ ---- -id: buttons -title: Hardware Buttons -sidebar_label: Buttons -sidebar_position: 1 ---- - -## Functionality - -- **User/Program Button:** - - **Single press:** Changes the information page displayed on the device's screen. - - **Double press:** Sends an adhoc ping of the device's position to the network. diff --git a/docs/hardware/devices/nano-g1/index.mdx b/docs/hardware/devices/nano-g1/index.mdx deleted file mode 100644 index 9e990c2d..00000000 --- a/docs/hardware/devices/nano-g1/index.mdx +++ /dev/null @@ -1,40 +0,0 @@ ---- -id: nano-g1 -title: Nano G1 device -sidebar_label: Nano G1 -sidebar_position: 5 ---- - -The Nano G1 is the first dedicated hardware device to be designed from scratch purely for Meshtastic by Neil Hao. It has been designed to be small and compact with the inclusion of a high quality internal PCB antenna. - -### Specifications - -- **MCU** - - ESP32 WROOM (WiFi & Bluetooth) - - Bluetooth 4.2 -- **LoRa Transceiver** - - Semtech SX1276 - - Additional ultra-low noise amplifier to improve LoRa receiver sensitivity -- **Frequency options** - - US-915 MHz -- **Navigation Module** - - ATGM336H-5N-71 (Supports GPS, BDS and GLONASS) -- **Antenna** - - Built in 915Mhz Lora PCB Antenna (VSWR \<=1.5 @ 915 MHz) -- **Connectors** - - USB-C - -### Features - -- Meshtastic pre-installed -- User button -- 1.3 inch OLED screen -- Buzzer - -### Resources - -- Firmware file: `firmware-nano-g1-X.X.X.xxxxxxx.bin` - -Further information on the Nano G1 can be found on [Unit Engineering's Wiki](https://uniteng.com/wiki/doku.php?id=meshtastic:nano). - -![Nano G1](/img/hardware/nano-g1-front.jpg) diff --git a/docs/hardware/devices/rak/core-modules.mdx b/docs/hardware/devices/rak/core-modules.mdx index 5c720622..00f24dfd 100644 --- a/docs/hardware/devices/rak/core-modules.mdx +++ b/docs/hardware/devices/rak/core-modules.mdx @@ -60,6 +60,37 @@ Please be aware of the difference between the RAK4631 (Arduino bootloader) and t style={{ zoom: "50%" }} /> + +### 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/hardware/devices/rak/screens.mdx b/docs/hardware/devices/rak/screens.mdx index 9d5ad5a0..c655cdcc 100644 --- a/docs/hardware/devices/rak/screens.mdx +++ b/docs/hardware/devices/rak/screens.mdx @@ -43,6 +43,7 @@ The [RAK1400 EPD module](https://store.rakwireless.com/products/wisblock-epd-mod - Resolution 212 x 104 pixels - Occupies the IO Port of a Wisblock Base +- US Distributor - Purchase link: [Rokland](https://store.rokland.com/products/rak-wireless-wisblock-epd-module-rak14000-pid-110024) - Firmware for 5005 with RAK14000 e-paper: [`firmware-rak4631_eink-X.X.X.xxxxxxx.uf2`](/downloads) 2C peripherals + +I2C peripherals like OLED Displays (e.g. SSD1306 or SH1106) and keyboards (e.g. CardKB) can be connected to GPIO pins 4 (SDA) and 5 (SCL), which will be recognized on boot. Note that for keyboard input, the [Canned Message Module](/docs/configuration/module/canned-message) has to be enabled and the [input source](/docs/configuration/module/canned-message#input-source) should be specified. + +## External device using Serial Module + +For connecting an external device via the [Serial Module](/docs/configuration/module/serial), it's recommended to use GPIO pins 8 (`serial.txd`) and 9 (`serial.rxd`). \ No newline at end of file diff --git a/docs/hardware/devices/station-g1/index.mdx b/docs/hardware/devices/station-g1/index.mdx index ea118d0b..20547466 100644 --- a/docs/hardware/devices/station-g1/index.mdx +++ b/docs/hardware/devices/station-g1/index.mdx @@ -2,7 +2,7 @@ id: station-g1 title: Station G1 device sidebar_label: Station G1 -sidebar_position: 4 +sidebar_position: 6 --- The Station G1 is the second dedicated hardware device to be designed from scratch purely for Meshtastic Licensed (HAM) Operation by Neil Hao. It has been designed to be small and compact with the inclusion of 35dBm high power PA. diff --git a/docs/hardware/devices/tbeam/index.mdx b/docs/hardware/devices/tbeam/index.mdx index 34ca8a73..8404369a 100644 --- a/docs/hardware/devices/tbeam/index.mdx +++ b/docs/hardware/devices/tbeam/index.mdx @@ -77,19 +77,17 @@ This is an earlier version of the T-Beam board. Due to changes in the design thi - Micro USB - Antenna: SMA antenna connector - ## Features - Meshtastic preinstalled - Power, Program and Reset switches - **Comes with 0.96 inch OLED display** (soldering required to assemble) - ## Resources - Firmware file: `firmware-tbeam-X.X.X.xxxxxxx.bin` - Purchase link: [AliExpress](https://www.aliexpress.com/item/4001178678568.html) -- US Distributor - Purchase link: [Rokland](https://store.rokland.com/products/lilygo-ttgo-t-beam-v1-1-lora-esp32-development-board-wifi-bluetooth-module-gps-neo-6m-sx1276-915mhz-q219?ref=8Bb2mUO5i-jKwt) +- US Distributor - Purchase link: Rokland [No OLED](https://store.rokland.com/products/lilygo-ttgo-t-beam-v1-1-lora-esp32-development-board-wifi-bluetooth-module-gps-neo-6m-sx1276-915mhz-q219?ref=8Bb2mUO5i-jKwt), [OLED](https://store.rokland.com/products/lilygo-ttgo-meshtastic-t-beam-v1-1-esp32-lora-915-mhz-wireless-module-wifi-gps-neo-6m-with-oled-display-soldered-for-arduino-q349) ![TTGO T-Beam v1.1](/img/hardware/t-beam-v1.1.png) ![TTGO T-Beam v1.1 pinmap](/img/hardware/t-beam_v1.1_pinmap.webp) @@ -113,14 +111,12 @@ This is an earlier version of the T-Beam board. Due to changes in the design thi - Micro USB - Antenna: U.FL antenna connector - ## Features - Meshtastic preinstalled - Power, Program and Reset switches - Screen sold separately - ## Resources - Firmware file: `firmware-tbeam-X.X.X.xxxxxxx.bin` @@ -147,14 +143,12 @@ This is an earlier version of the T-Beam board. Due to changes in the design thi - Micro USB - Antenna: U.FL antenna connector - ## Features - Meshtastic preinstalled - Power, Program and Reset switches - Screen sold separately - ## Resources - Firmware file: `firmware-tbeam-X.X.X.xxxxxxx.bin` @@ -181,14 +175,12 @@ This is an earlier version of the T-Beam board. Due to changes in the design thi - USB-C - Antenna: U.FL antenna connector - ## Features - SoftRF preinstalled (flashing to Meshtastic required) - Boot and Reset switches - Can be used standalone without 'Supreme' daughterboard in a headless configuration - ## Resources - Firmware file: `firmware-tbeam-s3-core-X.X.X.xxxxxxx.bin` @@ -214,7 +206,6 @@ This is an earlier version of the T-Beam board. Due to changes in the design thi - USB-C - Antenna: U.FL antenna connector - ## Features - Includes T-Beam S3-Core Module @@ -227,11 +218,12 @@ This is an earlier version of the T-Beam board. Due to changes in the design thi - PCF8563 RTC - Micro-SD reader (not implemented in Meshtastic) - ## Resources - Firmware file: `firmware-tbeam-s3-core-X.X.X.xxxxxxx.bin` - Purchase Link: [AliExpress](https://www.aliexpress.com/item/1005005418286231.html) + - US Distributor - Purchase link: Rokland [NEO-M10S](https://store.rokland.com/products/lilygo-t-beam-supreme-esp32-s3-lora-development-board-sx1262-915mhz-gps-l76k-or-u-blox?variant=41051191378003), [Quectel L76K](https://store.rokland.com/products/lilygo-t-beam-supreme-esp32-s3-lora-development-board-sx1262-915mhz-gps-l76k-or-u-blox?variant=41051191345235) + ![T-Beam Supreme](/img/hardware/T-BEAM-S3-Supreme.jpg) diff --git a/docs/hardware/devices/techo/index.mdx b/docs/hardware/devices/techo/index.mdx index f42eb0c6..4c0394d9 100644 --- a/docs/hardware/devices/techo/index.mdx +++ b/docs/hardware/devices/techo/index.mdx @@ -2,7 +2,7 @@ id: techo title: LILYGO® TTGO T-Echo devices sidebar_label: LILYGO® T-Echo -sidebar_position: 2 +sidebar_position: 3 --- The T-Echo is the latest device to be release by LILYGO® supporting a low power consumption micro-controller. diff --git a/docs/hardware/solar-powered/_category_.yml b/docs/hardware/solar-powered/_category_.yml new file mode 100644 index 00000000..061d1d93 --- /dev/null +++ b/docs/hardware/solar-powered/_category_.yml @@ -0,0 +1,7 @@ +label: Solar Powered +collapsible: true +position: 3 +link: + type: generated-index + title: Solar Powered + slug: solar-powered diff --git a/docs/hardware/solar-powered/measure-device-power-consumption.mdx b/docs/hardware/solar-powered/measure-device-power-consumption.mdx new file mode 100644 index 00000000..845c1403 --- /dev/null +++ b/docs/hardware/solar-powered/measure-device-power-consumption.mdx @@ -0,0 +1,55 @@ +--- +id: measure-power-consumption +title: How To Measure Meshtastic Device Power Consumption +sidebar_label: Measure Power Consumption +sidebar_position: 1 +--- + +Before you can calculate what size solar panel and battery bank are required you need to determine how much power your device consumes. This is an essential and first step in building a solar powered anything. + +## Setup and Requirements +To measure the average power consumption of a radio device, like a Meshtastic node, requires some hardware and some understanding. + +### Power Meter +You need a way to measure power. This could be a bench power supply with voltage and amperage readings. It could be a dedicated device like a USB power meter or something else. Most important is that you need to read either volts and amps OR watts over time (over time means it needs to keep track of power used over time, not just instantaneous readings). Also consider if your meter has the resolution to measure as low as you need it to. For example, some nodes consume 0.005A at 5v. Can your power meter measure and display results that small? The important part here is that your meter needs to keep track of amp hours or watt hours. A normal multimeter won't track this. + +### What Are We Measuring? +A watt is the unit used to measure power. Use this unit to express how much power your device consumes. If you measure volts and amps you get watts. It's an easy equation. Just multiply volts times amps to get watts: 5v x 50mA = 250mW (also described as 5v x 0.05A = 0.25W). 250mW is a measure of consumed power at a specific instance. Technically, it describes the power consumed over one hour. We can't use this number because radio devices like Meshtastic spend a lot of time receiving and only some time transmitting (transmitting consumes a lot more power than receiving). If we measure power when the device is receiving and we say that's how much it consumes in an hour we are not accounting for the less frequent but more power hungry transmissions. We need to get an average over time. To measure power over time we use watt hours. For example, if your device consumes 250mW for one hour and you want to know how much power it consumes in 24 hours, we express it like this: 24h * 250mW = 6000mWh. This result is expressed in milliwatt hours (it can also be expressed as: 6Wh). + +### Duty Cycle +Radios consume relatively little power when receiving. In contrast, they consume a lot more power when transmitting. Duty cycle is the percentage of time the radio transmits. Over a period of time how much of that time is spent transmitting? 5%? 10%? 25%? It's hard to know. It depends on your use-case. Instead of trying to run calculations of receive power vs transmit power based on datasheet numbers, you can run a simulated test and measure power consumption over a period of time. Run your power consumption test for at least 1 hour but the longer you run the test the more accurate it will be (if your test conditions are representative of real life). Consider 2-6 hours as a good test duration. + +## Test Conditions +Running a test is pretty simple in practice but requires some understanding of how Meshtastic operates in the background. + +### Background Network Activity +Meshtastic nodes transmit data at regular intervals. These data packets are not messages you might send to other people. They're like beacons; used to tell the mesh your node is operational and on the network. Your node will know if other nodes are online and where they are (for GPS-enabled nodes). These data packets are sent in the background and are required for the network to function (though some of these can be disabled or configured to transmit less often). Other nodes on the network will respond to some of these beacons with an acknowledgement of receipt. This means there is a baseline of network activity that will consume some power through receiving and transmitting regardless of the messages you manually send. + +### Simulated Testing +To set up a proper test you need to know or guess how much message traffic your network will have (manual messages sent from a node). Is it 5, 10, 20, or 50 messages in an hour? Only you can know this because everyone's situation is different. + +If your message rate is small (like 2-5 messages per hour) it may not impact power consumption very much. The node is already regularly transmitting through background activity so this small number of additional message transmissions will have a low impact on overall power consumption. Your message rate is entirely use-case dependent and no one can tell you what your duty-cycle is. But you can guess and add margin to your calculations to ensure uptime. + +#### Set A Low GPS Location Broadcast Interval +One way to simulate a message in Meshtastic is to increase the number of times the node sends a GPS location update. Your device does not need a GPS module to use this option. At the time of this writing, the default interval is 2 minutes for a normal node with GPS or 15 minutes for a node with a fixed position. You can decrease this interval and it will broadcast a message more frequently, thus simulating a manual message on the network. You can change this interval on the iPhone app, Android app, web app and CLI. We can use this feature to force more frequent transmissions and thus simulate message traffic. This is helpful because it's automated and doesn't require you to remember to manually send messages during the test. + +#### Fixed Position Broadcast Interval +Most solar base stations don't have a GPS module because it doesn't change location and GPS consumes a lot of power. In Meshtastic you can manually set the GPS coordinates for any node. This is common for solar nodes. When a node has a fixed position it will send out that position update every 15 minutes (by default). That's a baseline of 4 GPS location updates per hour. If you want to simulate 16 messsage transmissions per hour you can set this interval to 3 minutes. That will send an update every 3 minutes which is 20 updates in total. Subtract the baseline 4 updates (that will be present after your test, when deployed) and you get 16 "messages" per hour. For 56 simluated messages per hour you would set this interval to 1 minute. + +### Example Test Condition With Node Settings +Tests will require at least 2 nodes. The node you measure power from and one other. Though, it may be more realistic to include 3 or 4 nodes on the network. The goal is to be as close to your final deployment network size when measuring power consumption. These test conditions would simulate a "chatty" network: +- 3 nodes on the network. +- 1 "other" node set to broadcast location every 60 seconds (disable smart location). +- Test node is paired with phone over Bluetooth. +- Test node has a fixed GPS position. +- Test node is set to broadcast location every 60 seconds (disable smart location). + +Configure all your devices as indicated. It may be helpful to start the test on the hour or on a 15 minute interval (like 2:15). Write the start time on a sticky note and put it next to the test node. When you stop the test try to do it on the hour or at the 15 minute interval. This makes calculating the results easier. Make sure to reset any previous power measurements on your power meter before starting. Run the test and record the stop time and the total power consumed during the test. + +## Results +Your results will hopefully be listed in watt hours. Just divide the recorded watt hours by the number of hours for your test to achieve your average power rating in watt hours or miliwatt hours. Save this result and continue to calculating solar panel size. + +If your meter measures amp hours you need to convert it. + +### Convert Amp Hours To Watt Hours +Take your total amp hour result and multiply it by the volts used for the test. For example, your test ran for 3 hours at 5.1v and your meter reads 142mAh. That's 5.1v * 142mAh = 724.2mWh. Now divide the total by the test duration: 724.2mWh / 3h = 241.4mW. This example shows an average power consumption of 241.1mW. Save your test result for the next step, calculating solar panel size. diff --git a/docs/legal/trademark.mdx b/docs/legal/trademark.mdx index 8efc8f68..0aacab64 100644 --- a/docs/legal/trademark.mdx +++ b/docs/legal/trademark.mdx @@ -16,23 +16,24 @@ Below are the guidelines for use of the Meshtastic Trademarks where, as long as - the use is not disparaging to Meshtastic or software distributed by Meshtastic. - the use does not imply sponsorship or endorsement by Meshtastic. -- proper trademark symbols are used in connection with the Meshtastic Trademarks and the trademark attribution statement must appear as explained in Proper Trademark Use -- the Logo Usage Guidelines are strictly observed +- proper trademark symbols are used in connection with the Meshtastic Trademarks and the trademark attribution statement must appear as explained in Proper Trademark Use. +- the Logo Usage Guidelines are strictly observed. ### Noncommercial and community web sites In the past, community members have inquired whether it is permissible to show support for Meshtastic by: -placing the Meshtastic Trademarks on a personal web site or blog to support open source software -making a page on a social networking web service to support open source software -linking to the Meshtastic website to provide information or show support for open source software +- placing the Meshtastic Trademarks on a personal web site or blog to support open source software. +- making a page on a social networking web service to support open source software. +- linking to the Meshtastic website to provide information or show support for open source software. + The guidelines relating to such usage are set forth in this section. It is permissible to use the Meshtastic Trademarks on websites to show your support for the open source software, provided that: - where possible, the design logo hyperlinks to the Meshtastic website, [http://meshtastic.org/](http://meshtastic.org/), or if that is not possible, the site includes a prominent link to the Meshtastic website at [http://meshtastic.org/](http://meshtastic.org/). -- proper trademark symbols are used in connection with the Meshtastic Trademarks and the trademark attribution statement must appear as explained in Proper Trademark Use -- the Logo Usage Guidelines are strictly observed +- proper trademark symbols are used in connection with the Meshtastic Trademarks and the trademark attribution statement must appear as explained in Proper Trademark Use. +- the Logo Usage Guidelines are strictly observed. - the site indicates clearly that it is not affiliated with or endorsed by Meshtastic; in addition, where possible: the site must include the text "This site is not affiliated with or endorsed by the Meshtastic project" prominently on any page that includes the Meshtastic Trademarks, and - if the Meshtastic Trademarks appear in a page header or any area that is designed to be presented on more than one page, the notice must also be designed to be presented on all of those pages as well. (i.e., if the Meshtastic Trademarks appear in a site-wide header, the informational text must appear in that header or an identically site-wide footer.) @@ -43,21 +44,21 @@ It is permissible to use the Meshtastic Trademarks on websites to show your supp In the past, community members have inquired whether it is permissible to show support for Meshtastic by: -- displaying a link to the Meshtastic website using the Meshtastic Trademarks from a business web site -- displaying the Meshtastic Trademarks as part of a business that utilizes Meshtastic software +- displaying a link to the Meshtastic website using the Meshtastic Trademarks from a business web site. +- displaying the Meshtastic Trademarks as part of a business that utilizes Meshtastic software. The guidelines relating to such usage are set forth in this section. It is permissible to use the Meshtastic Trademarks on business web sites, provided that: -- the web site has non-Meshtastic primary branding -- the design logo hyperlinks to the Meshtastic website, [http://meshtastic.org/](http://meshtastic.org/) -- the use does not imply sponsorship or endorsement by Meshtastic -- the use of the Meshtastic Trademarks does not imply an association with nor any form of endorsement by Meshtastic -- proper trademark symbols are used in connection with the Meshtastic Trademarks and the trademark attribution statement must appear as explained in Proper Trademark Use -- the Logo Usage Guidelines are strictly observed -- the site does not use visual styling that could be confusing to viewers or visitors as to whether the site is hosted by or on behalf of Meshtastic -- A copy of the use of the Meshtastic Trademarks is provided to the Trademark Supervisor within seven (7) days of its initial use, for example by sending a URL or other copy of such use +- the web site has non-Meshtastic primary branding. +- the design logo hyperlinks to the Meshtastic website, [http://meshtastic.org/](http://meshtastic.org/). +- the use does not imply sponsorship or endorsement by Meshtastic. +- the use of the Meshtastic Trademarks does not imply an association with nor any form of endorsement by Meshtastic. +- proper trademark symbols are used in connection with the Meshtastic Trademarks and the trademark attribution statement must appear as explained in Proper Trademark Use. +- the Logo Usage Guidelines are strictly observed. +- the site does not use visual styling that could be confusing to viewers or visitors as to whether the site is hosted by or on behalf of Meshtastic. +- a copy of the use of the Meshtastic Trademarks is provided to the Trademark Supervisor within seven (7) days of its initial use, for example by sending a URL or other copy of such use. ### Promotional events @@ -65,11 +66,11 @@ In the past, community members have inquired whether it is permissible to use th It is permissible to use the Meshtastic Trademarks in such promotional events, provided that: -- the use does not imply sponsorship or endorsement by Meshtastic -- the use of the Meshtastic Trademarks does not imply an association with or endorsement of the event of the goods distributed at such event -- proper trademark symbols are used in connection with the Meshtastic Trademarks and the trademark attribution statement must appear as explained in Proper Trademark Use -- the Logo Usage Guidelines are strictly observed -- A copy of the use of the Meshtastic Trademarks is provided to the Trademark Supervisor within seven (7) days of its initial use, for example by sending a URL or other copy of such use +- the use does not imply sponsorship or endorsement by Meshtastic. +- the use of the Meshtastic Trademarks does not imply an association with or endorsement of the event of the goods distributed at such event. +- proper trademark symbols are used in connection with the Meshtastic Trademarks and the trademark attribution statement must appear as explained in Proper Trademark Use. +- the Logo Usage Guidelines are strictly observed. +- A copy of the use of the Meshtastic Trademarks is provided to the Trademark Supervisor within seven (7) days of its initial use, for example by sending a URL or other copy of such use. If you would like to make some non-software goods to give away or sell at the event and don't already have a license to do so, see Non-software goods. @@ -77,11 +78,11 @@ If you would like to make some non-software goods to give away or sell at the ev It is permissible to use the Meshtastic Trademarks in the title and content of a publication, provided that: -- The use is clearly in reference to Meshtastic. -- The use does not imply sponsorship or endorsement of the publication by Meshtastic. -- Proper trademark symbols are used in connection with the Meshtastic Trademarks and the trademark attribution statement must appear as explained in Proper Trademark Use. -- The Logo Usage Guidelines are strictly observed. -- A copy of the use of the Meshtastic Trademarks is provided to the Trademark Supervisor within seven (7) days of its initial use, for example by sending a URL or other copy of such use. +- the use is clearly in reference to Meshtastic. +- the use does not imply sponsorship or endorsement of the publication by Meshtastic. +- proper trademark symbols are used in connection with the Meshtastic Trademarks and the trademark attribution statement must appear as explained in Proper Trademark Use. +- the Logo Usage Guidelines are strictly observed. +- a copy of the use of the Meshtastic Trademarks is provided to the Trademark Supervisor within seven (7) days of its initial use, for example by sending a URL or other copy of such use. ## Usage that Require Prior Written Approval @@ -106,8 +107,8 @@ Community members may request from the Trademark Supervisor designated by the Ad The following uses of the Meshtastic Trademarks are not approved under any foreseeable circumstances. -- Violations of the Logo Usage Guidelines or Trademark Usage Guidelines -- Any use outside these guidelines not by explicit written permission +- Violations of the Logo Usage Guidelines or Trademark Usage Guidelines. +- Any use outside these guidelines not by explicit written permission. - Except as set forth herein, Meshtastic retains and reserves all rights to the Meshtastic Trademarks and their use, including the right to modify these guidelines. These guidelines (except for trademark licenses executed for non software goods) may be amended from time to time at the discretion of Meshtastic and such changes will be effective ten (10) days after the changes are posted. Meshtastic may provide you with notice of such changes, but need not do so. You are responsible for checking this site for any changes. @@ -137,19 +138,19 @@ Unacceptable: Never using the ® mark for Meshtastic Logo, nor a trademark state - Never combine your company name with the Meshtastic name or use the Meshtastic name in a way that it could be perceived that Meshtastic and your company have an organizational link such as a joint venture. - Never use the Meshtastic Trademarks in a disparaging manner or that violates any federal, state, or international law. -Unacceptable: Cartoon character micturating on the Meshtastic Logo, applying Meshtastic Logo outside permitted uses +Unacceptable: Cartoon character micturating on the Meshtastic Logo, applying Meshtastic Logo outside permitted uses. - Never use terminology that states or implies that Meshtastic assumes any responsibility for the performance of your products and services. - The Meshtastic Logo must be hyperlinked to [http://meshtastic.org/](http://meshtastic.org/), in contexts where such a hyperlink is technically feasible. -Acceptable: Hyperlinking the Meshtastic Logo where feasible +Acceptable: Hyperlinking the Meshtastic Logo where feasible. -Unacceptable: Not hyperlinking the Meshtastic Logo where feasible +Unacceptable: Not hyperlinking the Meshtastic Logo where feasible. -Except as prohibited by law, the person or entity who is using the Meshtastic Trademark under the terms of these Guidelines ("User") acknowledges that Meshtastic is the sole and exclusive owner of the Meshtastic Trademarks and agrees that it will do nothing inconsistent with such ownership either during the term of such use or afterwards. Specifically, User will take no action that will interfere with or diminish Meshtastic's right in the Meshtastic Trademarks. The User acknowledges that the Meshtastic Trademarks are valid under the applicable law and that User's utilization of the Meshtastic Trademarks will not create any right, title or interest in the Meshtastic Trademarks. The User agrees not to apply or assist any third party to register the Meshtastic Trademarks or a confusingly similar designation anywhere in the world. If any application for registration is or has been filed by or on behalf of User in any country and relates to any mark which, in the reasonable opinion of Meshtastic, is confusingly similar, deceptive or misleading with respect to, or dilutes or any way damages the Meshtastic Trademark, User shall, at Meshtastic's request, abandon all use of such mark, and any registration or application for registration thereof and shall reimburse Meshtastic for all costs and expenses of any oppMeshtastiction or related legal proceeding, including attorneys' fees, instigation by Meshtastic or its authorized representative. Upon the written statement that the User is not using the Meshtastic Trademarks in accordance with the Guidelines, within ten (10) days, User shall modify its use to comply with the Guidelines or cease using the Meshtastic Trademarks. +Except as prohibited by law, the person or entity who is using the Meshtastic Trademark under the terms of these Guidelines ("User") acknowledges that Meshtastic is the sole and exclusive owner of the Meshtastic Trademarks and agrees that it will do nothing inconsistent with such ownership either during the term of such use or afterwards. Specifically, User will take no action that will interfere with or diminish Meshtastic's right in the Meshtastic Trademarks. The User acknowledges that the Meshtastic Trademarks are valid under the applicable law and that User's utilization of the Meshtastic Trademarks will not create any right, title or interest in the Meshtastic Trademarks. The User agrees not to apply or assist any third party to register the Meshtastic Trademarks or a confusingly similar designation anywhere in the world. If any application for registration is or has been filed by or on behalf of User in any country and relates to any mark which, in the reasonable opinion of Meshtastic, is confusingly similar, deceptive or misleading with respect to, or dilutes or any way damages the Meshtastic Trademark, User shall, at Meshtastic's request, abandon all use of such mark, and any registration or application for registration thereof and shall reimburse Meshtastic for all costs and expenses of any opposition or related legal proceeding, including attorneys' fees, instigation by Meshtastic or its authorized representative. Upon the written statement that the User is not using the Meshtastic Trademarks in accordance with the Guidelines, within ten (10) days, User shall modify its use to comply with the Guidelines or cease using the Meshtastic Trademarks. ### Logo Usage Guidelines The Meshtastic logo is a trademark of Meshtastic LLC. In order to protect and grow the Meshtastic brand, we have a distinguishable logo. When displaying the Meshtastic logo, please follow our standard Trademark Guidelines. Other sizes and resolutions of the logo, some suitable for print, can be found [here](https://github.com/meshtastic/design). -To join the discussion about Meshtastic Trademark policies, and participate in shaping future policy visit the [Meshtastic Discourse](http://meshtastic.discourse.group) or [Meshtastic Discord](https://discord.com/invite/UQJ5QuM7vq). +To join the discussion about Meshtastic Trademark policies, and participate in shaping future policy visit the [Meshtastic Discourse](http://meshtastic.discourse.group) or [Meshtastic Discord](https://discord.com/invite/ktMAKGBnBs). diff --git a/docs/software/android/usage.mdx b/docs/software/android/usage.mdx index 6b7768df..b934540e 100644 --- a/docs/software/android/usage.mdx +++ b/docs/software/android/usage.mdx @@ -82,23 +82,11 @@ The app will generate a new QR code on the screen. This encodes the channel det 2. If the channel is shared from a file or link using the `Share` button, you can click on the file or link and you need to choose "Open with Meshtastic". -
- Troubleshooting shared links: Can't "open with Meshtastic". -
-
- If you don't see "Meshtastic" as an option to open the file or link with: -
- 1. Go to Android Settings > Apps > Default apps > Meshtastic > Opening - links -
- 2. Make sure you have in "links/web address": www.meshtastic.org -
- 3. If you see the option "Open the supported links", make sure it is - enabled. -
-
-
-
+:::info If a QR or URL opens a webpage instead of the APP or "Open with Meshtastic" is not an option: +1. Go to Android Settings > Apps > Default apps > Meshtastic > Opening links +2. Make sure you have in "links/web address": www.meshtastic.org +3. If you see the option "Open the supported links", make sure it is enabled. +::: [![Accept new channel](/img/android/android-accept-channel-c.png)](/img/android/android-accept-channel.png) @@ -138,7 +126,7 @@ By default there is no long-term store-and-forward of messages, so messages not The network list shows all the users (devices) that have connected to the same Channel. For each entry, it shows the last time they were active, their location and distance (when available), and their last known power status. In the example above, Monkey is the local user, Rabbit was last heard from 10 minutes ago and is 50m away, and Panda was last heard 11 minutes ago and 5m away. -- Tap on a node from the list to start Direct Messaging, request a position update, or request a [traceroute](/docs/settings/moduleconfig/traceroute). +- Tap on a node from the list to start Direct Messaging, request a position update, request a [traceroute](/docs/configuration/module/traceroute) or add it to your [Ignore Incoming Array](/docs/configuration/radio/lora#ignore-incoming-array). - If you have an [Admin Channel](/docs/configuration/remote-admin) enabled on your devices, tapping on the node will also display an option to remotely configure the node. ### View the map @@ -152,6 +140,8 @@ The Map tab will show a local map with an icon for each active mesh node that ha - Clicking the layers icon in the top-right will allow you to select the map type. +### Offline maps + [![Download offline maps](/img/android/android-map-download-c.png)](/img/android/android-map-download.png) - Some map types allow downloading for offline use. If offline maps are available for your selected map type, a download icon will appear in the bottom-right corner of the map. Tap this icon and choose the option to Download Region, then select the area you wish to download. @@ -173,13 +163,13 @@ The debug panel allows you to see all packets sent between the application and t [![Meshtastic configuration options](/img/android/android-radio-configuration-c.png)](/img/android/android-radio-configuration.png) Radio Configuration opens a list of all radio and module configuration settings. -- See [Device Config](/docs/settings/config) for radio settings. -- See [Module Config](/docs/settings/moduleconfig) for module settings. +- See [Radio Config](/docs/configuration/radio) for radio settings. +- See [Module Config](/docs/configuration/module) for module settings. - At the end of this list are buttons for Reboot, Shutdown, Factory reset, and NodeDB reset. ### Export rangetest.csv -Allows you to save all your network's position data with GPS coordinates into a .csv (comma separated value) file on your phone. This file can be imported into the spreadsheet application of your choice for easy viewing. This feature is similar but independent from the device [range test module](/docs/settings/moduleconfig/range-test), and results may differ. +Allows you to save all your network's position data with GPS coordinates into a .csv (comma separated value) file on your phone. This file can be imported into the spreadsheet application of your choice for easy viewing. This feature is similar but independent from the device [range test module](/docs/configuration/module/range-test), and results may differ. ### Theme diff --git a/docs/software/apple/installation.mdx b/docs/software/apple/installation.mdx index cffae21a..1429fd44 100644 --- a/docs/software/apple/installation.mdx +++ b/docs/software/apple/installation.mdx @@ -1,6 +1,7 @@ --- id: installation title: Apple Application Installation +description: Download on the App Store sidebar_label: Installation --- diff --git a/docs/software/community/index.mdx b/docs/software/community/index.mdx index c89cbb67..489305e5 100644 --- a/docs/software/community/index.mdx +++ b/docs/software/community/index.mdx @@ -11,5 +11,6 @@ Current community projects: - [ATAK (Android Team Awareness Kit) Forwarder](/docs/software/community/community-atak) - An ATAK plugin for forwarding CoT messages via a hardware layer which supports Meshtastic devices. - [Meshtasticator (Simulator)](/docs/software/community/community-meshtasticator) - Meshtasticator is a discrete-event and interactive simulator that mimics the radio section of the device software. +- [Meshtastic Web API](/docs/software/community/meshtastic-web-api) - Meshtastic Web API provides a RESTful interface to interact with a Meshtastic node via a serial connection. Support for these projects should be sought from their respective authors. diff --git a/docs/software/integrations/app.png b/docs/software/integrations/app.png deleted file mode 100644 index e41369c3..00000000 Binary files a/docs/software/integrations/app.png and /dev/null differ diff --git a/docs/software/integrations/atak-plugin.mdx b/docs/software/integrations/atak-plugin.mdx new file mode 100644 index 00000000..25d110bd --- /dev/null +++ b/docs/software/integrations/atak-plugin.mdx @@ -0,0 +1,28 @@ +--- +id: integrations-atak-plugin +title: ATAK Plugin +sidebar_label: ATAK Plugin +sidebar_position: 2 +--- + +## Official Meshtastic ATAK Plugin + +Meshtastic can integrate with ATAK on Android using the [Official ATAK Plugin.](https://github.com/meshtastic/ATAK-Plugin) + +### Introduction + +The ATAK plugin does not permit any Meshtastic configuration. The plugin does three things: + +1. Bind to the IMeshService provided by the Meshtastic Android App in order to send. +2. Intercept all outgoing ATAK CoT via the ATAK "PreSendProcessor" Interface and send them to the IMeshService. +3. Listen for broadcasts from the Meshtastic Android App regarding ATAK_FORWARDER portnum packets. + +The current iteration works very well for ATAK CoT that fit within the 200ish byte range (after we shrink via libcotshirnk) because they fit into a single DataPacket. + +### Instructions + +1. Use the Meshtastic Android App on all party's devices, and ensure they can talk to their local LoRa radio. Confirm they are able to achieve basic text messaging using the App. + +2. With the Meshtastic Android App running in the background (to ensure the IMeshService is alive), launch ATAK (with the Meshtastic ATAK-Plugin installed or install it once ATAK is running) and you should observe a green Meshtastic icon in the bottom right. If the icon is red, then the plugin was not able to bind to the IMeshService provided by the Meshtastic Android App. If this is the case, check to ensure the Meshtastic Android App is functioning. The plugin will reconnect after a failed bind without restarting ATAK. + +3. ATAK PLI and simple map markers will fit within the "small send" DataPackets. Sending larger CoT such as freestyle map drawings or GeoChats will fragment and take longer to send. Don't try to send a bunch without waiting for the previous one to complete. \ No newline at end of file diff --git a/docs/software/integrations/caltopo.mdx b/docs/software/integrations/caltopo.mdx index 90ef51e1..651a6c28 100644 --- a/docs/software/integrations/caltopo.mdx +++ b/docs/software/integrations/caltopo.mdx @@ -15,7 +15,7 @@ Meshtastic can integrate with [CalTopo](https://caltopo.com/) Desktop edition qu ### Configuring the Meshtastic device -To configure our Meshtastic device for this integration, we have a couple of different options, both of which utilize the [Serial module](/docs/settings/moduleconfig/serial): +To configure our Meshtastic device for this integration, we have a couple of different options, both of which utilize the [Serial module](/docs/configuration/module/serial): #### Enabling serial over the device's USB port ```shell title="Serial over USB" diff --git a/docs/software/integrations/index.mdx b/docs/software/integrations/index.mdx index c49a761e..58bd9a65 100644 --- a/docs/software/integrations/index.mdx +++ b/docs/software/integrations/index.mdx @@ -11,4 +11,6 @@ Current Meshtastic integrations: - [CalTopo / SARTopo](/docs/software/integrations/integrations-caltopo) - Track Meshtastic nodes in CalTopo and SARTopo. +- [ATAK Plugin](/docs/software/integrations/integrations-atak-plugin) - Official Meshtastic ATAK Plugin for sending CoT to IMeshService in the Meshtastic Android app. + Support for the integrated products should be sought from their respective authors or vendors. diff --git a/docs/software/mqtt/adafruit-io.mdx b/docs/software/mqtt/adafruit-io.mdx new file mode 100644 index 00000000..641158a2 --- /dev/null +++ b/docs/software/mqtt/adafruit-io.mdx @@ -0,0 +1,174 @@ +--- +id: adafruit-io +title: Adafruit IO +sidebar_label: Adafruit IO +sidebar_position: 5 +--- + +### Adafruit IO for Meshtastic + +Adafruit IO can be used to graph telemetry and messages from a Meshtastic network via json/mqtt. The following example script will listen for node packets and publish voltage, rssi, snr and messages to individual feeds on adafruit IO. If a feed doesn't exist it will be created. Be aware, however, that the free Adafruit account is limited to 10 feeds. Once your feeds are being populated with data you can create dashboards to display graphs and gauges with the data. + +:::info + +To utilize this script you need to have an Adafruit IO account, a working mqtt broker setup and a mesh node that is publishing to the mqtt broker. + +::: + +You will need to modify the script with your Adafruit IO and mqtt credentials and mqtt publisher node id + +```python +# Persistent mqtt client, watch for voltage, teleme, message packets and publish them to io +# feeds will be created. free tier maxes out at 10 + +# Import Adafruit IO REST client. +from Adafruit_IO import Client, Feed, Data, RequestError +from datetime import datetime +import paho.mqtt.client as mqtt +import os +import sys +import json +import time +import random + +import pytz +# set your timezone here +timezone = pytz.timezone("US/Hawaii") + +# set your Adafruit IO creds here +AIO_USER = "tavdog" +AIO_KEY = "XXXXXXXXXXXXX" + +# set your MQTT broker information +MQTT_SERVER = "XXXXXXXXXX" +MQTT_PORT = 1883 # default +MQTT_TOPIC_PREFIX = "mesh" # specified when you setup your node to publish mqtt +MQTT_USERNAME = "xxxxxxxxx" +MQTT_PASSWORD = "xxxxxxxxx" + +# your node ID that is publishingn to the MQTT broker +MQTT_NODE_ID = "!387e0248" +# your channel (node must be set to json output) +MQTT_CHANNEL = "LongFast" + +print("\n\n") +client_id = str(random.randint(0, 100)) +mqttClient = mqtt.Client("python_mesh_client_%s" % client_id) # this needs to be kind of unique. mqtt broker will not allow duplicate connections. +mqttClient.username_pw_set(MQTT_USERNAME, MQTT_PASSWORD) +mqttClient.connect(MQTT_SERVER, MQTT_PORT) +mqttClient.loop_start() +print("Subscribing to %s/2/json/%s/%s" % (MQTT_TOPIC_PREFIX, MQTT_CHANNEL,MQTT_NODE_ID)) +mqttClient.subscribe("%s/2/json/%s/%s" % (MQTT_TOPIC_PREFIX, MQTT_CHANNEL,MQTT_NODE_ID)) +time.sleep(1) + +# you can add more channels here +#mqttClient.subscribe("%s/2/json/MauiMesh/%s" % (MQTT_TOPIC_PREFIX, MQTT_NODE_ID)) + + +aio = Client(AIO_USER, AIO_KEY) + +node_db = dict() +# bootstrap your node_db here if you want. otherwise it will populate eventually but die on restart. +# node_db = { 634792740: 'Tavis Blue', +# 947782216: 'G1 Wailuku', +# 1839130823: 'Giggle Hill', +# 2330585902: 'Ayla Kekona', +# 634717328: 'Nani Hoku', +# 3667835576: 'Rachael'} + +def get_feed(full_name,kind): + name = full_name.split('-')[0] + try: + feed = aio.feeds(f"mesh.{name.lower()}-{kind}") + except: + print("creating feed:" + kind) + # Create Feed + new_feed = Feed(name=f"{name}_{kind}") + feed = aio.create_feed(feed=new_feed,group_key="mesh") + + return feed + +def publish_rssi(data,metadata): + name = node_db[data['from']] + feed = get_feed(name,"rssi") # use a function here because we will create the feed if it doens't exist already. + print(feed.key + " \t\t: " + str(data['rssi'])) + aio.send_data(feed.key, data['rssi'],metadata) + +def publish_snr(data,metadata): + name = node_db[data['from']] + feed = get_feed(name,"snr") # use a function here because we will create the feed if it doens't exist already. + print(feed.key + " \t\t: " + str(data['snr'])) + aio.send_data(feed.key, data['snr'],metadata) + +def publish_voltage(data,metadata): + name = node_db[data['from']] + feed = get_feed(name,"voltage") # use a function here because we will create the feed if it doens't exist already. print(feed.key + " \t: " + str(data['payload'].get('voltage',"none"))) + print(feed.key + " \t: " + str(data['payload']['voltage'])) + aio.send_data(feed.key, data['payload'].get('voltage',0),metadata) + +def publish_packet(data): + + feed = aio.feeds("mesh.messages") + if (data['from'] in node_db): + data['fname'] = node_db[data['from']] + # trim down the data. we really only want to see the message content + trimmed = { + 'from' : data.get('fname',None) or data.get('from'), + 'message' : data['payload']['text'], + 'stamp' : datetime.fromtimestamp(data['timestamp'],timezone).strftime('%Y-%m-%d %H:%M:%S'), + } + aio.send_data(feed.key, json.dumps(trimmed, indent=4)) + + +def on_message(client, userdata, message): + print("\n") + print("message received " ,str(message.payload.decode("utf-8"))) + print("\n") + data = json.loads(str(message.payload.decode("utf-8"))) + + # check the topic of the message + if data['type'] == "text": + # publish all message packets to the packet log + publish_packet(data) + + # update node_db if needed + if data['type'] == 'nodeinfo': + # add to the node_db if we haven't seen it before + if data['from'] not in node_db: + node_db[data['from']] = data['payload']['shortname'] + '-' + data['payload']['longname'] + print(str(node_db)) + return # don't publish data from nodedb packets. + + # "payload":{"altitude":113,"latitude_i":208759687,"longitude_i":-1565037665 + metadata = None + if data['type'] == 'position': + metadata = { + 'lat': data['payload']['latitude_i'] / 10000000, #40.726190, + 'lon': data['payload']['longitude_i'] / 10000000, #-74.005334, + 'ele': data['payload'].get('altitude',None), + 'created_at': datetime.now(timezone), + } + # add to the node_db if we know who they are already + + + if data['from'] in node_db: + try: + if 'rssi' in data and data['rssi'] != 0: + # do the doings + publish_rssi( data, metadata ) + if 'snr' in data and data['snr'] != 0: + publish_snr( data, metadata ) + if 'payload' in data and data['payload'].get('voltage',0) != 0: + publish_voltage( data, metadata ) + except Exception as e: + print("Error sending to IO:", str(e)) + + +mqttClient.on_message = on_message + +# loop forever +while(True): + pass + +``` + diff --git a/docs/software/mqtt/home-assistant.mdx b/docs/software/mqtt/home-assistant.mdx new file mode 100644 index 00000000..d0458484 --- /dev/null +++ b/docs/software/mqtt/home-assistant.mdx @@ -0,0 +1,313 @@ +--- +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. + +![HA Entities Card](/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. + +![HA Logbook Card](/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. + +![HA At Tropho Message](/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 (except for range tests) + # value_template: "{{ trigger.payload_json.payload.text is defined and "seq " not in trigger.payload_json.payload.text}}" + 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. + + +## Create a Send Message Entity + +It is possible to create an input text box to send messages to your mesh from within Home Assistant. + +### Input Text Helper Entity + +First, create an input text helper entity. The preferred way to configure an input text is via the HA interface at Settings > Devices & Services > Helpers. Click the add button and then choose the Text option. Make a text input helper with a max length of 190 to be on the safe side. See example below: + +![HA Input Text Helper](/img/software/mqtt/ha_input_text_helper.png) + +### Create a Send Message Automation + +This automation will check the send box for changes. After typing a message, either hit enter or click off the box and the automation will send a text string in JSON to the mqtt broker. Make sure to update the channel name and device ID in the example below. + +```yaml +- alias: Meshtastic - Send Automation + description: "" + trigger: + - platform: state + entity_id: + - input_text.meshtastic_send_box + condition: [] + action: + - delay: + hours: 0 + minutes: 0 + seconds: 1 + milliseconds: 0 + - service: mqtt.publish + data: + qos: 0 + retain: false + topic: msh/2/json/LongFast/!67ea9400 + payload: >- + {"channel":"0","sender":"broker","type":"sendtext","payload":"{{ + states('input_text.meshtastic_send_box') }}"} + - delay: + hours: 0 + minutes: 0 + seconds: 1 + milliseconds: 0 + - service: input_text.set_value + data: + value: " " + target: + entity_id: input_text.meshtastic_send_box + - delay: + hours: 0 + minutes: 0 + seconds: 2 + milliseconds: 0 + mode: single + ``` + + Add this card to your dashboard by going to Edit Dashboard -> + ADD CARD. Then search BY ENTITY for Meshtastic Send Box and check the box next to the entry. Click CONTINUE, then ADD TO DASHBOARD. \ No newline at end of file diff --git a/docs/software/mqtt/index.mdx b/docs/software/mqtt/index.mdx index a47854f0..a1ef38e4 100644 --- a/docs/software/mqtt/index.mdx +++ b/docs/software/mqtt/index.mdx @@ -7,11 +7,17 @@ sidebar_position: 6 ## Bridging networks +![Common MQTT Layout](/img/software/mqtt/mqtt.png) + Meshtastic networks in different locations beyond the reach of LoRa can be easily bridged together using MQTT. The simplest option is to connect your mesh to the official Meshtastic MQTT broker. This makes your devices appear on the world map, and provides a copy of your mesh traffic, translated into JSON. All you have to do to join the public MQTT server is to Enable MQTT and set Uplink and Downlink on the channels that you want to share over MQTT. The default device configuration using the public MQTT Server is encrypted. -You can also share channel settings with a remote network. If you use the default meshtastic MQTT server, packets are always encrypted. If you use a custom MQTT broker (ie set `mqtt.address`), the `mqtt.encryption_enabled` setting applies, which by default is false. You can also specify your own private MQTT broker and specify authentication for that broker to bridge several mesh networks together, via the internet (or just a local IP network). +You can also share channel settings with a remote network. If you use the default Meshtastic MQTT server, packets are always encrypted. If you use a custom MQTT broker (ie set `mqtt.address`), the `mqtt.encryption_enabled` setting applies, which by default is false. You can also specify your own private MQTT broker and specify authentication for that broker to bridge several mesh networks together, via the internet (or just a local IP network). -You can find the settings available for MQTT [here](/docs/settings/moduleconfig/mqtt). +You can find the settings available for MQTT [here](/docs/configuration/module/mqtt). + +:::important +When MQTT is turned on, you are potentially broadcasting your entire mesh's traffic onto the public internet. This includes messages and position information. +::: ## Software Integrations @@ -19,18 +25,14 @@ Using or emitting packets directly in/from smart home control software such as H When MQTT is enabled, the Meshtastic device simply uplinks and/or downlinks every raw protobuf MeshPacket that it sees to the MQTT broker, encapsulated in a [ServiceEnvelope protobuf](https://buf.build/meshtastic/protobufs/docs/main:meshtastic#meshtastic.ServiceEnvelope). In addition, some packet types are serialized or deserialized from/to JSON messages for easier use in consumers. All packets are sent to the broker, whether they originate from another device on the mesh, or the gateway node itself. -Packets may be encrypted. If you use the default meshtastic MQTT server, packets are always encrypted. If you use a custom MQTT broker (ie set `mqtt.address`), the `mqtt.encryption_enabled` setting applies, which by default is false. - -IMPORTANT: When MQTT is turned on, you are potentially broadcasting your entire mesh traffic onto the public internet. This includes messages and position information. - ### MQTT [Topics](https://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices) -If no specific [root topic](/docs/settings/moduleconfig/mqtt#root-topic) is configured, the default root topic will be `msh/`. -Each device that is connected to MQTT will publish its MQTT state ("`online`"/"`offline`") to: +If no specific [root topic](/docs/configuration/module/mqtt#root-topic) is configured, the default root topic will be `msh/`. +Each device that is connected to MQTT will publish its MQTT state (`online`/`offline`) to: -`msh/2/stat/USERID`, where `USERID` is the user ID of the gateway device (the one connected to MQTT). +`msh/2/stat/USERID`, where `USERID` is the node ID of the gateway device (the one connected to MQTT). -For each channel where uplink and/or downlink is enabled two other topics might be used. +For each channel where uplink and/or downlink is enabled, two other topics might be used: #### Protobufs topic A gateway node will uplink and/or downlink raw ([protobuf](https://developers.google.com/protocol-buffers)) MeshPackets to the topic: @@ -47,10 +49,10 @@ The payload is a raw protobuf, whose definitions for Meshtastic can be found [he ShortFast !937bed1c ``` -If [encryption_enabled](/docs/settings/moduleconfig/mqtt#encryption-enabled) is set to true, the payload of the MeshPacket will remain encrypted with the key for the specified channel. +If [encryption_enabled](/docs/configuration/module/mqtt#encryption-enabled) is set to true, the payload of the MeshPacket will remain encrypted with the key for the specified channel. #### JSON topic -If [JSON is enabled](/docs/settings/moduleconfig/mqtt/#json-enabled), packets from the following [port numbers](/docs/development/firmware/portnum) are serialized to JSON: `TEXT_MESSAGE_APP`, `ENVIRONMENTAL_MEASUREMENT_APP`, `NODEINFO_APP` and `POSITION_APP`. These are then forwarded to the topic: +If [JSON is enabled](/docs/configuration/module/mqtt/#json-enabled), packets from the following [port numbers](/docs/development/firmware/portnum) are serialized to JSON: `TEXT_MESSAGE_APP`, `TELEMETRY_APP`, `NODEINFO_APP`, `POSITION_APP`, `WAYPOINT_APP`, and `NEIGHBORINFO_APP`. These are then forwarded to the topic: `msh/2/json/CHANNELNAME/USERID`. @@ -78,7 +80,7 @@ The meaning of these fields is as follows: - "`id`" is the unique ID for this message. - "`channel`" is the channel index this message was received on. -- "`from`" is the unique node number of the node on the mesh that sent this message, represented as a signed decimal number. +- "`from`" is the unique node number of the node on the mesh that sent this message. - "`id`" inside the payload of a `NODEINFO_APP` message is the user ID of the node that sent it, which is currently just the hexadecimal representation of the node number. - "`hardware`" is the [hardware model](https://github.com/meshtastic/protobufs/blob/master/meshtastic/mesh.proto#L215) of the node sending the `NODEINFO_APP` message. - "`longname`" is the long name of the device that sent the `NODEINFO_APP` message. @@ -88,7 +90,7 @@ The meaning of these fields is as follows: - "`to`" is the node number of the destination of the message. In this case, "-1" means it was a broadcast message (this is the decimal integer representation of `0xFFFFFFFF`). - "`type`" is the type of the message, in this case it was a `NODEINFO_APP` message. -The "from" field can thus be used as a stable identifier for a specific node. Note that (like the "`id`" and "`to`" fields) in JSON this is a signed value, whereas in protobufs it is unsigned. +The `from` field can thus be used as a stable identifier for a specific node. Note that in firmware prior to 2.2.0, this is a signed value in JSON, while in firmware 2.2.0 and higher, the JSON values are unsigned. If the message received contains valid JSON in the payload, the JSON is deserialized and added as a JSON object rather than a string containing the serialized JSON. @@ -108,7 +110,7 @@ If the message received contains valid JSON in the payload, the JSON is deserial ### Basic Configuration -Check out [MQTT Settings](/docs/settings/moduleconfig/mqtt) for full information. For quick start instructions, read on. +Check out [MQTT Settings](/docs/configuration/module/mqtt) for full information. For quick start instructions, read on. - Connect your gateway node to wifi, by setting the `network.wifi_ssid`, `network.wifi_psk` and `network.wifi_enabled` preferences. - Alternatively use the RAK4631 with Ethernet Module RAK13800, by setting `network.eth_mode` and `network.eth_enabled`. @@ -135,1037 +137,12 @@ An existing public [MQTT broker](https://mosquitto.org) will be the default for ## Examples -### Using mosquitto on a mac +- [Using mosquitto on a mac](/docs/software/mqtt/mosquitto.mdx) -1. install mqtt server +- [Sending/receiving messages on mosquitto server using python](/docs/software/mqtt/python.mdx) - ```sh - brew install mosquitto - ``` +- [Using MQTT with Node-RED](/docs/software/mqtt/nodered.mdx) -2. start the mqtt server +- [Using MQTT with Home Assistant](/docs/software/mqtt/home-assistant.mdx) - ```sh - brew services restart mosquitto - ``` - -3. Do a quick test of server, start a subscriber on a topic: - - Note: this will wait until you press control-c (publish a message, see below) - - ```sh - mosquitto_sub -t test/hello - ``` - -4. In another window, publish a message to that topic: - - ```sh - mosquitto_pub -h localhost -q 0 -t test/hello -m 'yo!' - ``` - -5. For Meshtastic to be able to access that server, two settings need to be changed in the - `/usr/local/etc/mosquitto/mosquitto.conf` file: - - ```shell - listener 1883 0.0.0.0 - allow_anonymous true - ``` - -6. Restart the service: - - ```shell - brew services restart mosquitto - ``` - -7. If you are using the mac firewall, you will need to go into: System Preferences > Security & Privacy > Firewall > Firewall Options and add it. - -### Sending/receiving messages on mosquitto server using python - -Here is an example publish message in python: - -```python -#!/usr/bin/env python3 -import paho.mqtt.client as mqtt -from random import randrange, uniform -import time - -client = mqtt.Client("some_client_id") -client.connect('localhost') - -while True: - randNumber = uniform(20.0, 21.0) - client.publish("env/test/TEMPERATURE", randNumber) - print("Just published " + str(randNumber) + " to topic TEMPERATURE") - time.sleep(1) -``` - -Here is example subscribe in python: - -```python -#!/usr/bin/env python3 - -import paho.mqtt.client as paho - -def on_message(mosq, obj, msg): - print("%-20s %d %s" % (msg.topic, msg.qos, msg.payload)) - mosq.publish('pong', 'ack', 0) - -def on_publish(mosq, obj, mid): - pass - -if __name__ == '__main__': - client = paho.Client() - client.on_message = on_message - client.on_publish = on_publish - - client.connect("localhost", 1883, 60) - - client.subscribe("env/test/TEMPERATURE", 0) - - while client.loop() == 0: - pass -``` - -### Using MQTT with Node-RED - -Below is a valid JSON envelope for information sent by MQTT to a device for broadcast onto the mesh. - -```json -{ - "sender":"whatever you want to be the SENDER", - "type":"sendtext", - "payload": text or a json object go here -} -``` - -Node-RED is a free cross-platform programming tool for wiring together hardware, APIs, and online services developed originally by IBM for IOT. It is widely used for home automation by many non-professional programmers and runs well on Pi's. Node-red has many plug-in modules written by the community. I will use this platform as a practical example on how to interface with the MQTT features of Meshtastic. Everything can be done from GUI's without using command line. - -Step one: use http://client.meshtastic.org/ one of the Apple apps or the CLI to connect to your device and adjust these settings. -Enable and enter network SSID/PSK. Settings--> Device Config--> Network; Save. -Set MQTT server address. Settings--> Module Config--> MQTT config; Verify Encryption Enabled is OFF. Turn JSON Output Enabled ON. Save. -Go to Channel Editor and set Uplink and Downlink enabled to True. Save. There is currently a bug for setting Uplink and Downlink Saving for the default channel. If you encounter this use the CLI commands: - -```shell -meshtastic --ch-index 0 --ch-set uplink_enabled true -meshtastic --ch-index 0 --ch-set downlink_enabled true -``` - -Step two: if you don't want to depend on JSON decoding on the device, you can decode the protobuf messages off-device. To do that you will need to get the .proto files from https://github.com/meshtastic/protobufs. They function as a schema and are required for decoding in Node-RED. Save the files where the node-RED application can access them and note the file path of the "mqtt.proto" file. - -Step three: install Node-RED plug-ins to your node-RED application for an embedded MQTT server and a protobuf decoder. -https://flows.nodered.org/node/node-red-contrib-aedes -https://flows.nodered.org/node/node-red-contrib-protobuf - -Drag, drop, and wire the nodes like this. For this example, I ran node-RED on a Windows machine. Note that file paths might be specified differently on different platforms. MQTT server wild cards are usually the same. A "+" is a single level wildcard for a specific topic level. A "#" is a multiple level wildcard that can be used at the end of a topic filter. The debug messages shown are what happens when the inject button sends a JSON message with a topic designed to be picked up by the specified Meshtastic device and then having it rebroadcast the message. - -[](/documents/mqtt/NodeRedTwo.jpg) -[](/documents/mqtt/NodeRedThree.jpg) -[](/documents/mqtt/NR_nodes.jpg) - -The aedes broker must be set up on the same flow as the other nodes. By activating the Publish debug node, you can see all the published messages. -[](/documents/mqtt/Broker1.jpg) -Receiving a json mqtt message is very simple. -[](/documents/mqtt/Consume.jpg) -Injecting a json message to be sent by a device is also very simple. You do need the correct envelope. -[](/documents/mqtt/Inject.jpg) -Forwarding a text message from one device, through a broker, to another broker/device/channel would look like this. -[](/documents/mqtt/Forward.jpg) -If you want to decode text and position messages without json, it gets complicated: -[](/documents/mqtt/DecodeNewest.jpg) -If you are interested in my flow for this it is here: - -```json -[ - { - "id": "10fe1b2e9cb3feb2", - "type": "decode", - "z": "23dbb1ee.bc2e8e", - "name": "decode Protobuf", - "protofile": "a0d4288141f6a629", - "protoType": "ServiceEnvelope", - "x": 295.5, - "y": 285, - "wires": [["d3e396cf4f0a9608", "d08865b41a69d85d", "6f592d47b6a2eac4"]] - }, - { - "id": "40c9ee66fe7a34cb", - "type": "function", - "z": "23dbb1ee.bc2e8e", - "name": "function get the message as string from TEXT_MESSAGE_APP", - "func": "msg.payload = msg.payload.packet.decoded.payload;\n\nlet bufferObj = Buffer.from(msg.payload, \"base64\");\nlet decodedString = bufferObj.toString(\"utf8\");\nmsg.payload = decodedString;\n\nreturn msg;", - "outputs": 1, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 410.5, - "y": 450, - "wires": [["553374591214eaca"]] - }, - { - "id": "553374591214eaca", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "text message out", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 762.5, - "y": 449, - "wires": [] - }, - { - "id": "c6afbb9f1665b162", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "channelId", - "active": false, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 785.5, - "y": 257, - "wires": [] - }, - { - "id": "607ef387d5701985", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "gatewayId", - "active": false, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 792.5, - "y": 293, - "wires": [] - }, - { - "id": "d3e396cf4f0a9608", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "entire payload", - "active": false, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 296.5, - "y": 247, - "wires": [] - }, - { - "id": "2339b328bb9bb1d8", - "type": "comment", - "z": "23dbb1ee.bc2e8e", - "name": "Decode all cleartext text and position messages sent by Meshtastic devices into JSON without relying on JSON conversion on the device.", - "info": "", - "x": 515.5, - "y": 214, - "wires": [] - }, - { - "id": "408d796d997bb832", - "type": "function", - "z": "23dbb1ee.bc2e8e", - "name": "function get the nested payload as base64", - "func": "msg.payload = msg.payload.packet.decoded.payload;\n\nlet bufferObj = Buffer.from(msg.payload, \"base64\");\n//let decodedString = bufferObj.toString(\"hex\");\nmsg.payload = bufferObj;\nmsg.topic=\"\";\n//if you don't zero out the protubufTopic it will try to\n//decode it as part of the mqtt service envelope instead\n//of two-stage decoding\nmsg.protobufType=null;\n\nreturn msg;", - "outputs": 1, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 349, - "y": 552, - "wires": [["9435a3c605efedb4", "1ed6f96c8214d7b3"]] - }, - { - "id": "61995c9f8e8266b3", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "portnum", - "active": false, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 784.5, - "y": 330, - "wires": [] - }, - { - "id": "9435a3c605efedb4", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "nested payload", - "active": false, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "true", - "targetType": "full", - "statusVal": "", - "statusType": "auto", - "x": 281.5, - "y": 603, - "wires": [] - }, - { - "id": "b832775d386f7ac9", - "type": "mqtt in", - "z": "23dbb1ee.bc2e8e", - "name": "", - "topic": "msh/+/c/#", - "qos": "2", - "datatype": "buffer", - "broker": "37cadac381653b1e", - "nl": false, - "rap": true, - "rh": 0, - "inputs": 0, - "x": 117.5, - "y": 286, - "wires": [["10fe1b2e9cb3feb2"]] - }, - { - "id": "d08865b41a69d85d", - "type": "switch", - "z": "23dbb1ee.bc2e8e", - "name": "switch manual decoding nested message based on portum", - "property": "payload.packet.decoded.portnum", - "propertyType": "msg", - "rules": [ - { "t": "eq", "v": "TEXT_MESSAGE_APP", "vt": "str" }, - { "t": "eq", "v": "POSITION_APP", "vt": "str" } - ], - "checkall": "true", - "repair": false, - "outputs": 2, - "x": 281.5, - "y": 505, - "wires": [["40c9ee66fe7a34cb"], ["408d796d997bb832"]] - }, - { - "id": "8abb1bb458af2c4f", - "type": "change", - "z": "23dbb1ee.bc2e8e", - "name": "", - "rules": [ - { - "t": "set", - "p": "gatewayId", - "pt": "flow", - "to": "payload", - "tot": "msg" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 1021.5, - "y": 288, - "wires": [[]] - }, - { - "id": "1ced0be28eeef0d3", - "type": "change", - "z": "23dbb1ee.bc2e8e", - "name": "", - "rules": [ - { - "t": "set", - "p": "latitude", - "pt": "flow", - "to": "payload", - "tot": "msg" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 1026.5, - "y": 407, - "wires": [[]] - }, - { - "id": "313fd3cfe6d91850", - "type": "change", - "z": "23dbb1ee.bc2e8e", - "name": "", - "rules": [ - { - "t": "set", - "p": "longitude", - "pt": "flow", - "to": "payload", - "tot": "msg" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 1036.5, - "y": 450, - "wires": [["d02e53cdfb565da6"]] - }, - { - "id": "33dd43e3c05f826c", - "type": "geofence", - "z": "23dbb1ee.bc2e8e", - "name": "geofence", - "mode": "circle", - "inside": "true", - "rad": 69174.91569647488, - "points": [], - "centre": { - "latitude": 40.16287050252407, - "longitude": -86.60385131835938 - }, - "floor": "", - "ceiling": "", - "worldmap": true, - "outputs": 2, - "x": 1202.5, - "y": 595, - "wires": [[], ["4d01eb8f1b31f039"]] - }, - { - "id": "d02e53cdfb565da6", - "type": "function", - "z": "23dbb1ee.bc2e8e", - "name": "trigger function to send a mapping point", - "func": "let lat = parseFloat(flow.get(\"latitude\"));\nlet lon = parseFloat(flow.get(\"longitude\"));\nlat=lat * 0.0000001;\nlon=lon * 0.0000001;\nlet name = flow.get(\"from\")\n\nmsg={\"payload\":{\"name\":name,\n \"lat\":lat,\n \"lon\":lon,\n \"action\":\"send\",\n \"icon\": \"car\",\n \"label\":name\n }}\n\nreturn msg;", - "outputs": 1, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 1181.5, - "y": 520, - "wires": [["33dd43e3c05f826c", "4d01eb8f1b31f039"]] - }, - { - "id": "4d01eb8f1b31f039", - "type": "worldmap", - "z": "23dbb1ee.bc2e8e", - "name": "", - "lat": "40", - "lon": "-86", - "zoom": "7", - "layer": "OSMG", - "cluster": "", - "maxage": "", - "usermenu": "show", - "layers": "show", - "panit": "false", - "panlock": "false", - "zoomlock": "false", - "hiderightclick": "false", - "coords": "none", - "showgrid": "false", - "showruler": "false", - "allowFileDrop": "false", - "path": "/worldmap", - "overlist": "DR,CO,RA,DN,HM", - "maplist": "OSMG,OSMC,EsriC,EsriS,EsriT,EsriDG,UKOS", - "mapname": "", - "mapurl": "", - "mapopt": "", - "mapwms": false, - "x": 1206.5, - "y": 675, - "wires": [] - }, - { - "id": "1ed6f96c8214d7b3", - "type": "decode", - "z": "23dbb1ee.bc2e8e", - "name": "decode Position Protobuf", - "protofile": "dbab6472b07929a0", - "protoType": "Position", - "x": 667.5, - "y": 548, - "wires": [["db1933ba36503bd9", "dad9f487318f21d9"]] - }, - { - "id": "db1933ba36503bd9", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "Position decoded", - "active": false, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "true", - "targetType": "full", - "statusVal": "", - "statusType": "auto", - "x": 673.5, - "y": 607, - "wires": [] - }, - { - "id": "dad9f487318f21d9", - "type": "function", - "z": "23dbb1ee.bc2e8e", - "name": "Split", - "func": "var lat = { payload: msg.payload.latitudeI };\nvar lon = { payload: msg.payload.longitudeI };\nvar alt = { payload: msg.payload.altitude };\nvar tm = { payload: msg.payload.time };\n\nreturn [lat,lon,alt,tm];", - "outputs": 4, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 875.5, - "y": 549, - "wires": [ - ["1ced0be28eeef0d3", "8bb97f802662976c"], - ["313fd3cfe6d91850", "c8e135f3e542bb1b"], - ["602fb2020680280c"], - ["ed424ae3d45dd2ac"] - ] - }, - { - "id": "8bb97f802662976c", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "lat", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 1017.5, - "y": 583, - "wires": [] - }, - { - "id": "c8e135f3e542bb1b", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "lon", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 1018.5, - "y": 618, - "wires": [] - }, - { - "id": "602fb2020680280c", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "alt", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 1017.5, - "y": 654, - "wires": [] - }, - { - "id": "ed424ae3d45dd2ac", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "time", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 1018.5, - "y": 688, - "wires": [] - }, - { - "id": "6f592d47b6a2eac4", - "type": "function", - "z": "23dbb1ee.bc2e8e", - "name": "Split Decoded 1", - "func": "var channelId = { payload: msg.payload.channelId};\nvar gatewayId = { payload: msg.payload.gatewayId};\nvar portnum = { payload: msg.payload.packet.decoded.portnum};\nvar fr= {payload: \"!\" + msg.payload.packet.from.toString(16)};\nvar to = {payload:\"!\"+ msg.payload.packet.to.toString(16)};\n\nreturn [channelId, gatewayId, portnum, fr, to ];", - "outputs": 5, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 577.5, - "y": 294, - "wires": [ - ["c6afbb9f1665b162"], - ["607ef387d5701985", "8abb1bb458af2c4f"], - ["61995c9f8e8266b3"], - ["fd881fac22422773", "a389f9875da672ec"], - ["cf066ad415df30ae"] - ] - }, - { - "id": "fd881fac22422773", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "from", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 772.5, - "y": 365, - "wires": [] - }, - { - "id": "cf066ad415df30ae", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "to", - "active": false, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 771.5, - "y": 399, - "wires": [] - }, - { - "id": "a389f9875da672ec", - "type": "change", - "z": "23dbb1ee.bc2e8e", - "name": "set flow.from", - "rules": [ - { "t": "set", "p": "from", "pt": "flow", "to": "payload", "tot": "msg" } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 1012.5, - "y": 364, - "wires": [[]] - }, - { - "id": "a0d4288141f6a629", - "type": "protobuf-file", - "protopath": "E:\\Meshtastic-protobufs-master\\mqtt.proto", - "watchFile": true, - "keepCase": false - }, - { - "id": "37cadac381653b1e", - "type": "mqtt-broker", - "name": "", - "broker": "192.168.2.45", - "port": "1883", - "clientid": "", - "autoConnect": true, - "usetls": false, - "protocolVersion": "4", - "keepalive": "60", - "cleansession": true, - "birthTopic": "", - "birthQos": "0", - "birthPayload": "", - "birthMsg": {}, - "closeTopic": "", - "closeQos": "0", - "closePayload": "", - "closeMsg": {}, - "willTopic": "", - "willQos": "0", - "willPayload": "", - "willMsg": {}, - "userProps": "", - "sessionExpiry": "" - }, - { - "id": "dbab6472b07929a0", - "type": "protobuf-file", - "protopath": "E:\\Meshtastic-protobufs-master\\mesh.proto", - "watchFile": true, - "keepCase": false - } -] -``` - -(documents/mqtt/Flow.txt) - -Node-red can rapidly (minutes vs days) put together some pretty impressive output when paired with meshtastic. Here is the output of that flow geofencing and mapping via mqtt data. -[](/documents/mqtt/Mapping.jpg) - -Advanced use, such as encoding Position and sending it to a device via MQTT without using JSON can get a little complicated. An example of how it can be done is below. -[](/documents/mqtt/EncodingPosition.jpg) -The flow is: - -```json -[ - { - "id": "32ca608d9e7c5236", - "type": "inject", - "z": "23dbb1ee.bc2e8e", - "name": "", - "props": [{ "p": "payload" }, { "p": "topic", "vt": "str" }], - "repeat": "", - "crontab": "", - "once": false, - "onceDelay": 0.1, - "topic": "", - "payload": "", - "payloadType": "date", - "x": 96.5, - "y": 1952, - "wires": [["2b536512e8c7aef2"]] - }, - { - "id": "20bbd2d1408b8dc5", - "type": "change", - "z": "23dbb1ee.bc2e8e", - "name": "", - "rules": [ - { - "t": "set", - "p": "channelId_outbound", - "pt": "flow", - "to": "LongFast", - "tot": "str" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 772, - "y": 2027, - "wires": [[]] - }, - { - "id": "c6cb373157be01d6", - "type": "change", - "z": "23dbb1ee.bc2e8e", - "name": "", - "rules": [ - { - "t": "set", - "p": "gatewayId_outbound", - "pt": "flow", - "to": "\"!55c7312c\"", - "tot": "str" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 772, - "y": 2066, - "wires": [[]] - }, - { - "id": "24199ec7eaf89c1a", - "type": "change", - "z": "23dbb1ee.bc2e8e", - "name": "", - "rules": [ - { - "t": "set", - "p": "portnum_outbound", - "pt": "flow", - "to": "3", - "tot": "num" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 774, - "y": 2106, - "wires": [[]] - }, - { - "id": "de38ad5ef343623a", - "type": "change", - "z": "23dbb1ee.bc2e8e", - "name": "", - "rules": [ - { - "t": "set", - "p": "from_outbound", - "pt": "flow", - "to": "1439117612", - "tot": "num" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 781, - "y": 2146, - "wires": [[]] - }, - { - "id": "d435e8abe0852f93", - "type": "change", - "z": "23dbb1ee.bc2e8e", - "name": "", - "rules": [ - { - "t": "set", - "p": "to_outbound", - "pt": "flow", - "to": "4294967295", - "tot": "num" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 790, - "y": 2188, - "wires": [[]] - }, - { - "id": "1f8d172708898860", - "type": "function", - "z": "23dbb1ee.bc2e8e", - "name": "Assemble Position protobuf", - "func": "msg.protobufType=null;\nmsg.payload =\n{\n \"packet\": {\n \"from\": flow.get(\"from_outbound\"),\n \"to\": flow.get(\"to_outbound\"), \n \"decoded\":{\n //how ENUMS are handled here\n //portnum is decoded as string but encoded as number\n //in the encode/decode node-red nodes based on protobuf.js\n \"portnum\": flow.get(\"portnum_outbound\"),\n \"payload\": msg.payload \n } \n },\n\n \"channelId\": flow.get(\"channelId_outbound\"),\n \"gatewayId\": flow.get(\"gatewayId_outbound\"),\n};\nreturn msg;\n//info on how to get json data into protobuf \"bytes\" field\n//https://github.com/protobufjs/protobuf.js/wiki/Changes-in-ProtoBuf.js-3.8", - "outputs": 1, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 1086, - "y": 2019, - "wires": [["b8ccf1cfe8bf40a3"]] - }, - { - "id": "b8ccf1cfe8bf40a3", - "type": "encode", - "z": "23dbb1ee.bc2e8e", - "name": "", - "protofile": "a0d4288141f6a629", - "protoType": "ServiceEnvelope", - "x": 1287, - "y": 2020, - "wires": [["dbc78f035c9c2b56", "a002c148f3a06bac"]] - }, - { - "id": "03a7e69ca6d471fe", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "show hex string", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "true", - "targetType": "full", - "statusVal": "", - "statusType": "auto", - "x": 1319, - "y": 2180, - "wires": [] - }, - { - "id": "dbc78f035c9c2b56", - "type": "function", - "z": "23dbb1ee.bc2e8e", - "name": "dump payload as hex string", - "func": "var hex=Buffer.from(msg.payload,\"hex\");\nmsg.payload=hex.toString(\"hex\");\nreturn msg;", - "outputs": 1, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 1096, - "y": 2178, - "wires": [["03a7e69ca6d471fe"]] - }, - { - "id": "2b536512e8c7aef2", - "type": "function", - "z": "23dbb1ee.bc2e8e", - "name": "Inject lat lon alt", - "func": "msg.payload={\n \"latitudeI\": 399600000,\n \"longitudeI\": -862600000,\n \"altitude\": 100\n}\nreturn msg;", - "outputs": 1, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 277.5, - "y": 1953, - "wires": [["9443a9a980e54c75"]] - }, - { - "id": "9443a9a980e54c75", - "type": "encode", - "z": "23dbb1ee.bc2e8e", - "name": "encode Position as protobuf", - "protofile": "dbab6472b07929a0", - "protoType": "Position", - "x": 506, - "y": 1953, - "wires": [["5c36d3a7f4dca14e"]] - }, - { - "id": "5c36d3a7f4dca14e", - "type": "change", - "z": "23dbb1ee.bc2e8e", - "name": "", - "rules": [ - { - "t": "set", - "p": "nested_outbound", - "pt": "flow", - "to": "payload", - "tot": "msg" - } - ], - "action": "", - "property": "", - "from": "", - "to": "", - "reg": false, - "x": 776, - "y": 1952, - "wires": [ - [ - "20bbd2d1408b8dc5", - "c6cb373157be01d6", - "24199ec7eaf89c1a", - "de38ad5ef343623a", - "d435e8abe0852f93", - "04d0c4a5f3485c6f" - ] - ] - }, - { - "id": "04d0c4a5f3485c6f", - "type": "function", - "z": "23dbb1ee.bc2e8e", - "name": "dump payload as base64 string", - "func": "var hex=Buffer.from(msg.payload,\"base64\");\nmsg.payload=hex.toString(\"base64\");\nreturn msg;", - "outputs": 1, - "noerr": 0, - "initialize": "", - "finalize": "", - "libs": [], - "x": 1082, - "y": 1952, - "wires": [["1f8d172708898860"]] - }, - { - "id": "a002c148f3a06bac", - "type": "decode", - "z": "23dbb1ee.bc2e8e", - "name": "test decode Protobuf", - "protofile": "a0d4288141f6a629", - "protoType": "ServiceEnvelope", - "x": 1249, - "y": 1860, - "wires": [["4b6fc79398d05782"]] - }, - { - "id": "4b6fc79398d05782", - "type": "debug", - "z": "23dbb1ee.bc2e8e", - "name": "test entire payload", - "active": true, - "tosidebar": true, - "console": false, - "tostatus": false, - "complete": "payload", - "targetType": "msg", - "statusVal": "", - "statusType": "auto", - "x": 1458, - "y": 1859, - "wires": [] - }, - { - "id": "a0d4288141f6a629", - "type": "protobuf-file", - "protopath": "E:\\Meshtastic-protobufs-master\\mqtt.proto", - "watchFile": true, - "keepCase": false - }, - { - "id": "dbab6472b07929a0", - "type": "protobuf-file", - "protopath": "E:\\Meshtastic-protobufs-master\\mesh.proto", - "watchFile": true, - "keepCase": false - } -] -``` - -Sending a position to a device for broadcast to the mesh is much easier with JSON. This introduces a new MQTT Service Envelope type: "sendposition". A valid MQTT envelope and message to broadcast lat, lon, altitude looks like this. - -```json -{ - "sender": "someSender", - "type": "sendposition", - "payload": { - "latitude_i": 399600000, - "longitude_i": -862600000, - "altitude": 100, - "time": 1670201543 - } -} -``` - -An example of doing this in node-red: -[](/documents/mqtt/PosJSON.jpg) +- [Using MQTT with Adafruit IO](/docs/software/mqtt/adafruit-io.mdx) \ No newline at end of file diff --git a/docs/software/mqtt/mosquitto.mdx b/docs/software/mqtt/mosquitto.mdx new file mode 100644 index 00000000..337933b8 --- /dev/null +++ b/docs/software/mqtt/mosquitto.mdx @@ -0,0 +1,50 @@ +--- +id: mosquitto +title: Mosquitto +sidebar_label: Mosquitto +sidebar_position: 1 +--- + +### Using mosquitto on a mac + +1. install mqtt server + + ```sh + brew install mosquitto + ``` + +2. start the mqtt server + + ```sh + brew services restart mosquitto + ``` + +3. Do a quick test of server, start a subscriber on a topic: + + Note: this will wait until you press control-c (publish a message, see below) + + ```sh + mosquitto_sub -t test/hello + ``` + +4. In another window, publish a message to that topic: + + ```sh + mosquitto_pub -h localhost -q 0 -t test/hello -m 'yo!' + ``` + +5. For Meshtastic to be able to access that server, two settings need to be changed in the + `/usr/local/etc/mosquitto/mosquitto.conf` file: + + ```shell + listener 1883 0.0.0.0 + allow_anonymous true + ``` + +6. Restart the service: + + ```shell + brew services restart mosquitto + ``` + +7. If you are using the mac firewall, you will need to go into: System Preferences > Security & Privacy > Firewall > Firewall Options and add it. \ No newline at end of file diff --git a/docs/software/mqtt/nodered.mdx b/docs/software/mqtt/nodered.mdx new file mode 100644 index 00000000..51261a46 --- /dev/null +++ b/docs/software/mqtt/nodered.mdx @@ -0,0 +1,945 @@ +--- +id: nodered +title: Node-RED +sidebar_label: Node-RED +sidebar_position: 3 +--- + +### Using MQTT with Node-RED + +Below is a valid JSON envelope for information sent by MQTT to a device for broadcast onto the mesh. + +```json +{ + "sender":"whatever you want to be the SENDER", + "type":"sendtext", + "payload": text or a json object go here +} +``` + +Node-RED is a free cross-platform programming tool for wiring together hardware, APIs, and online services developed originally by IBM for IOT. It is widely used for home automation by many non-professional programmers and runs well on Pi's. Node-RED has many plug-in modules written by the community. I will use this platform as a practical example on how to interface with the MQTT features of Meshtastic. Everything can be done from GUI's without using command line. + +Step one: use http://client.meshtastic.org/ , the python CLI, or an Apple or Android app to connect to your device and adjust these settings. +Enable and enter network SSID/PSK. Settings--> Radio Config--> Network; Save. +Set MQTT server address. Settings--> Module Config--> MQTT config; Verify Encryption Enabled is OFF. Turn JSON Output Enabled ON. Save. +Go to Channel Editor and set Uplink and Downlink enabled to True. Save. + +Step two: if you don't want to depend on JSON decoding on the device, you can decode the protobuf messages off-device. To do that you will need to get the .proto files from https://github.com/meshtastic/protobufs. They function as a schema and are required for decoding in Node-RED. Save the files where the node-RED application can access them and note the file path of the "mqtt.proto" file. + +Step three: install Node-RED plug-ins to your node-RED application for an embedded MQTT server and a protobuf decoder. +https://flows.nodered.org/node/node-red-contrib-aedes +https://flows.nodered.org/node/node-red-contrib-protobuf + +Drag, drop, and wire the nodes like this. For this example, I ran node-RED on a Windows machine. Note that file paths might be specified differently on different platforms. MQTT server wild cards are usually the same. A "+" is a single level wildcard for a specific topic level. A "#" is a multiple level wildcard that can be used at the end of a topic filter. The debug messages shown are what happens when the inject button sends a JSON message with a topic designed to be picked up by the specified Meshtastic device and then having it rebroadcast the message. + +[](/documents/mqtt/NodeRedTwo.jpg) +[](/documents/mqtt/NodeRedThree.jpg) +[](/documents/mqtt/NR_nodes.jpg) + +The aedes broker must be set up on the same flow as the other nodes. By activating the Publish debug node, you can see all the published messages. +[](/documents/mqtt/Broker1.jpg) +Receiving a json mqtt message is very simple. +[](/documents/mqtt/Consume.jpg) +Injecting a json message to be sent by a device is also very simple. You do need the correct envelope. +[](/documents/mqtt/Inject.jpg) +Forwarding a text message from one device, through a broker, to another broker/device/channel would look like this. +[](/documents/mqtt/Forward.jpg) +If you want to decode text and position messages without json, it gets complicated: +[](/documents/mqtt/DecodeNewest.jpg) +If you are interested in my flow for this it is here: + +```json +[ + { + "id": "10fe1b2e9cb3feb2", + "type": "decode", + "z": "23dbb1ee.bc2e8e", + "name": "decode Protobuf", + "protofile": "a0d4288141f6a629", + "protoType": "ServiceEnvelope", + "x": 295.5, + "y": 285, + "wires": [["d3e396cf4f0a9608", "d08865b41a69d85d", "6f592d47b6a2eac4"]] + }, + { + "id": "40c9ee66fe7a34cb", + "type": "function", + "z": "23dbb1ee.bc2e8e", + "name": "function get the message as string from TEXT_MESSAGE_APP", + "func": "msg.payload = msg.payload.packet.decoded.payload;\n\nlet bufferObj = Buffer.from(msg.payload, \"base64\");\nlet decodedString = bufferObj.toString(\"utf8\");\nmsg.payload = decodedString;\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 410.5, + "y": 450, + "wires": [["553374591214eaca"]] + }, + { + "id": "553374591214eaca", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "text message out", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 762.5, + "y": 449, + "wires": [] + }, + { + "id": "c6afbb9f1665b162", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "channelId", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 785.5, + "y": 257, + "wires": [] + }, + { + "id": "607ef387d5701985", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "gatewayId", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 792.5, + "y": 293, + "wires": [] + }, + { + "id": "d3e396cf4f0a9608", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "entire payload", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 296.5, + "y": 247, + "wires": [] + }, + { + "id": "2339b328bb9bb1d8", + "type": "comment", + "z": "23dbb1ee.bc2e8e", + "name": "Decode all cleartext text and position messages sent by Meshtastic devices into JSON without relying on JSON conversion on the device.", + "info": "", + "x": 515.5, + "y": 214, + "wires": [] + }, + { + "id": "408d796d997bb832", + "type": "function", + "z": "23dbb1ee.bc2e8e", + "name": "function get the nested payload as base64", + "func": "msg.payload = msg.payload.packet.decoded.payload;\n\nlet bufferObj = Buffer.from(msg.payload, \"base64\");\n//let decodedString = bufferObj.toString(\"hex\");\nmsg.payload = bufferObj;\nmsg.topic=\"\";\n//if you don't zero out the protubufTopic it will try to\n//decode it as part of the mqtt service envelope instead\n//of two-stage decoding\nmsg.protobufType=null;\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 349, + "y": 552, + "wires": [["9435a3c605efedb4", "1ed6f96c8214d7b3"]] + }, + { + "id": "61995c9f8e8266b3", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "portnum", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 784.5, + "y": 330, + "wires": [] + }, + { + "id": "9435a3c605efedb4", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "nested payload", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 281.5, + "y": 603, + "wires": [] + }, + { + "id": "b832775d386f7ac9", + "type": "mqtt in", + "z": "23dbb1ee.bc2e8e", + "name": "", + "topic": "msh/+/c/#", + "qos": "2", + "datatype": "buffer", + "broker": "37cadac381653b1e", + "nl": false, + "rap": true, + "rh": 0, + "inputs": 0, + "x": 117.5, + "y": 286, + "wires": [["10fe1b2e9cb3feb2"]] + }, + { + "id": "d08865b41a69d85d", + "type": "switch", + "z": "23dbb1ee.bc2e8e", + "name": "switch manual decoding nested message based on portum", + "property": "payload.packet.decoded.portnum", + "propertyType": "msg", + "rules": [ + { "t": "eq", "v": "TEXT_MESSAGE_APP", "vt": "str" }, + { "t": "eq", "v": "POSITION_APP", "vt": "str" } + ], + "checkall": "true", + "repair": false, + "outputs": 2, + "x": 281.5, + "y": 505, + "wires": [["40c9ee66fe7a34cb"], ["408d796d997bb832"]] + }, + { + "id": "8abb1bb458af2c4f", + "type": "change", + "z": "23dbb1ee.bc2e8e", + "name": "", + "rules": [ + { + "t": "set", + "p": "gatewayId", + "pt": "flow", + "to": "payload", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1021.5, + "y": 288, + "wires": [[]] + }, + { + "id": "1ced0be28eeef0d3", + "type": "change", + "z": "23dbb1ee.bc2e8e", + "name": "", + "rules": [ + { + "t": "set", + "p": "latitude", + "pt": "flow", + "to": "payload", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1026.5, + "y": 407, + "wires": [[]] + }, + { + "id": "313fd3cfe6d91850", + "type": "change", + "z": "23dbb1ee.bc2e8e", + "name": "", + "rules": [ + { + "t": "set", + "p": "longitude", + "pt": "flow", + "to": "payload", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1036.5, + "y": 450, + "wires": [["d02e53cdfb565da6"]] + }, + { + "id": "33dd43e3c05f826c", + "type": "geofence", + "z": "23dbb1ee.bc2e8e", + "name": "geofence", + "mode": "circle", + "inside": "true", + "rad": 69174.91569647488, + "points": [], + "centre": { + "latitude": 40.16287050252407, + "longitude": -86.60385131835938 + }, + "floor": "", + "ceiling": "", + "worldmap": true, + "outputs": 2, + "x": 1202.5, + "y": 595, + "wires": [[], ["4d01eb8f1b31f039"]] + }, + { + "id": "d02e53cdfb565da6", + "type": "function", + "z": "23dbb1ee.bc2e8e", + "name": "trigger function to send a mapping point", + "func": "let lat = parseFloat(flow.get(\"latitude\"));\nlet lon = parseFloat(flow.get(\"longitude\"));\nlat=lat * 0.0000001;\nlon=lon * 0.0000001;\nlet name = flow.get(\"from\")\n\nmsg={\"payload\":{\"name\":name,\n \"lat\":lat,\n \"lon\":lon,\n \"action\":\"send\",\n \"icon\": \"car\",\n \"label\":name\n }}\n\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1181.5, + "y": 520, + "wires": [["33dd43e3c05f826c", "4d01eb8f1b31f039"]] + }, + { + "id": "4d01eb8f1b31f039", + "type": "worldmap", + "z": "23dbb1ee.bc2e8e", + "name": "", + "lat": "40", + "lon": "-86", + "zoom": "7", + "layer": "OSMG", + "cluster": "", + "maxage": "", + "usermenu": "show", + "layers": "show", + "panit": "false", + "panlock": "false", + "zoomlock": "false", + "hiderightclick": "false", + "coords": "none", + "showgrid": "false", + "showruler": "false", + "allowFileDrop": "false", + "path": "/worldmap", + "overlist": "DR,CO,RA,DN,HM", + "maplist": "OSMG,OSMC,EsriC,EsriS,EsriT,EsriDG,UKOS", + "mapname": "", + "mapurl": "", + "mapopt": "", + "mapwms": false, + "x": 1206.5, + "y": 675, + "wires": [] + }, + { + "id": "1ed6f96c8214d7b3", + "type": "decode", + "z": "23dbb1ee.bc2e8e", + "name": "decode Position Protobuf", + "protofile": "dbab6472b07929a0", + "protoType": "Position", + "x": 667.5, + "y": 548, + "wires": [["db1933ba36503bd9", "dad9f487318f21d9"]] + }, + { + "id": "db1933ba36503bd9", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "Position decoded", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 673.5, + "y": 607, + "wires": [] + }, + { + "id": "dad9f487318f21d9", + "type": "function", + "z": "23dbb1ee.bc2e8e", + "name": "Split", + "func": "var lat = { payload: msg.payload.latitudeI };\nvar lon = { payload: msg.payload.longitudeI };\nvar alt = { payload: msg.payload.altitude };\nvar tm = { payload: msg.payload.time };\n\nreturn [lat,lon,alt,tm];", + "outputs": 4, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 875.5, + "y": 549, + "wires": [ + ["1ced0be28eeef0d3", "8bb97f802662976c"], + ["313fd3cfe6d91850", "c8e135f3e542bb1b"], + ["602fb2020680280c"], + ["ed424ae3d45dd2ac"] + ] + }, + { + "id": "8bb97f802662976c", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "lat", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 1017.5, + "y": 583, + "wires": [] + }, + { + "id": "c8e135f3e542bb1b", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "lon", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 1018.5, + "y": 618, + "wires": [] + }, + { + "id": "602fb2020680280c", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "alt", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 1017.5, + "y": 654, + "wires": [] + }, + { + "id": "ed424ae3d45dd2ac", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "time", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 1018.5, + "y": 688, + "wires": [] + }, + { + "id": "6f592d47b6a2eac4", + "type": "function", + "z": "23dbb1ee.bc2e8e", + "name": "Split Decoded 1", + "func": "var channelId = { payload: msg.payload.channelId};\nvar gatewayId = { payload: msg.payload.gatewayId};\nvar portnum = { payload: msg.payload.packet.decoded.portnum};\nvar fr= {payload: \"!\" + msg.payload.packet.from.toString(16)};\nvar to = {payload:\"!\"+ msg.payload.packet.to.toString(16)};\n\nreturn [channelId, gatewayId, portnum, fr, to ];", + "outputs": 5, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 577.5, + "y": 294, + "wires": [ + ["c6afbb9f1665b162"], + ["607ef387d5701985", "8abb1bb458af2c4f"], + ["61995c9f8e8266b3"], + ["fd881fac22422773", "a389f9875da672ec"], + ["cf066ad415df30ae"] + ] + }, + { + "id": "fd881fac22422773", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "from", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 772.5, + "y": 365, + "wires": [] + }, + { + "id": "cf066ad415df30ae", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "to", + "active": false, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 771.5, + "y": 399, + "wires": [] + }, + { + "id": "a389f9875da672ec", + "type": "change", + "z": "23dbb1ee.bc2e8e", + "name": "set flow.from", + "rules": [ + { "t": "set", "p": "from", "pt": "flow", "to": "payload", "tot": "msg" } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 1012.5, + "y": 364, + "wires": [[]] + }, + { + "id": "a0d4288141f6a629", + "type": "protobuf-file", + "protopath": "E:\\Meshtastic-protobufs-master\\mqtt.proto", + "watchFile": true, + "keepCase": false + }, + { + "id": "37cadac381653b1e", + "type": "mqtt-broker", + "name": "", + "broker": "192.168.2.45", + "port": "1883", + "clientid": "", + "autoConnect": true, + "usetls": false, + "protocolVersion": "4", + "keepalive": "60", + "cleansession": true, + "birthTopic": "", + "birthQos": "0", + "birthPayload": "", + "birthMsg": {}, + "closeTopic": "", + "closeQos": "0", + "closePayload": "", + "closeMsg": {}, + "willTopic": "", + "willQos": "0", + "willPayload": "", + "willMsg": {}, + "userProps": "", + "sessionExpiry": "" + }, + { + "id": "dbab6472b07929a0", + "type": "protobuf-file", + "protopath": "E:\\Meshtastic-protobufs-master\\mesh.proto", + "watchFile": true, + "keepCase": false + } +] +``` + +(documents/mqtt/Flow.txt) + +Node-red can rapidly (minutes vs days) put together some pretty impressive output when paired with meshtastic. Here is the output of that flow geofencing and mapping via mqtt data. +[](/documents/mqtt/Mapping.jpg) + +Advanced use, such as encoding Position and sending it to a device via MQTT without using JSON can get a little complicated. An example of how it can be done is below. +[](/documents/mqtt/EncodingPosition.jpg) +The flow is: + +```json +[ + { + "id": "32ca608d9e7c5236", + "type": "inject", + "z": "23dbb1ee.bc2e8e", + "name": "", + "props": [{ "p": "payload" }, { "p": "topic", "vt": "str" }], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 96.5, + "y": 1952, + "wires": [["2b536512e8c7aef2"]] + }, + { + "id": "20bbd2d1408b8dc5", + "type": "change", + "z": "23dbb1ee.bc2e8e", + "name": "", + "rules": [ + { + "t": "set", + "p": "channelId_outbound", + "pt": "flow", + "to": "LongFast", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 772, + "y": 2027, + "wires": [[]] + }, + { + "id": "c6cb373157be01d6", + "type": "change", + "z": "23dbb1ee.bc2e8e", + "name": "", + "rules": [ + { + "t": "set", + "p": "gatewayId_outbound", + "pt": "flow", + "to": "\"!55c7312c\"", + "tot": "str" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 772, + "y": 2066, + "wires": [[]] + }, + { + "id": "24199ec7eaf89c1a", + "type": "change", + "z": "23dbb1ee.bc2e8e", + "name": "", + "rules": [ + { + "t": "set", + "p": "portnum_outbound", + "pt": "flow", + "to": "3", + "tot": "num" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 774, + "y": 2106, + "wires": [[]] + }, + { + "id": "de38ad5ef343623a", + "type": "change", + "z": "23dbb1ee.bc2e8e", + "name": "", + "rules": [ + { + "t": "set", + "p": "from_outbound", + "pt": "flow", + "to": "1439117612", + "tot": "num" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 781, + "y": 2146, + "wires": [[]] + }, + { + "id": "d435e8abe0852f93", + "type": "change", + "z": "23dbb1ee.bc2e8e", + "name": "", + "rules": [ + { + "t": "set", + "p": "to_outbound", + "pt": "flow", + "to": "4294967295", + "tot": "num" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 790, + "y": 2188, + "wires": [[]] + }, + { + "id": "1f8d172708898860", + "type": "function", + "z": "23dbb1ee.bc2e8e", + "name": "Assemble Position protobuf", + "func": "msg.protobufType=null;\nmsg.payload =\n{\n \"packet\": {\n \"from\": flow.get(\"from_outbound\"),\n \"to\": flow.get(\"to_outbound\"), \n \"decoded\":{\n //how ENUMS are handled here\n //portnum is decoded as string but encoded as number\n //in the encode/decode node-red nodes based on protobuf.js\n \"portnum\": flow.get(\"portnum_outbound\"),\n \"payload\": msg.payload \n } \n },\n\n \"channelId\": flow.get(\"channelId_outbound\"),\n \"gatewayId\": flow.get(\"gatewayId_outbound\"),\n};\nreturn msg;\n//info on how to get json data into protobuf \"bytes\" field\n//https://github.com/protobufjs/protobuf.js/wiki/Changes-in-ProtoBuf.js-3.8", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1086, + "y": 2019, + "wires": [["b8ccf1cfe8bf40a3"]] + }, + { + "id": "b8ccf1cfe8bf40a3", + "type": "encode", + "z": "23dbb1ee.bc2e8e", + "name": "", + "protofile": "a0d4288141f6a629", + "protoType": "ServiceEnvelope", + "x": 1287, + "y": 2020, + "wires": [["dbc78f035c9c2b56", "a002c148f3a06bac"]] + }, + { + "id": "03a7e69ca6d471fe", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "show hex string", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 1319, + "y": 2180, + "wires": [] + }, + { + "id": "dbc78f035c9c2b56", + "type": "function", + "z": "23dbb1ee.bc2e8e", + "name": "dump payload as hex string", + "func": "var hex=Buffer.from(msg.payload,\"hex\");\nmsg.payload=hex.toString(\"hex\");\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1096, + "y": 2178, + "wires": [["03a7e69ca6d471fe"]] + }, + { + "id": "2b536512e8c7aef2", + "type": "function", + "z": "23dbb1ee.bc2e8e", + "name": "Inject lat lon alt", + "func": "msg.payload={\n \"latitudeI\": 399600000,\n \"longitudeI\": -862600000,\n \"altitude\": 100\n}\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 277.5, + "y": 1953, + "wires": [["9443a9a980e54c75"]] + }, + { + "id": "9443a9a980e54c75", + "type": "encode", + "z": "23dbb1ee.bc2e8e", + "name": "encode Position as protobuf", + "protofile": "dbab6472b07929a0", + "protoType": "Position", + "x": 506, + "y": 1953, + "wires": [["5c36d3a7f4dca14e"]] + }, + { + "id": "5c36d3a7f4dca14e", + "type": "change", + "z": "23dbb1ee.bc2e8e", + "name": "", + "rules": [ + { + "t": "set", + "p": "nested_outbound", + "pt": "flow", + "to": "payload", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 776, + "y": 1952, + "wires": [ + [ + "20bbd2d1408b8dc5", + "c6cb373157be01d6", + "24199ec7eaf89c1a", + "de38ad5ef343623a", + "d435e8abe0852f93", + "04d0c4a5f3485c6f" + ] + ] + }, + { + "id": "04d0c4a5f3485c6f", + "type": "function", + "z": "23dbb1ee.bc2e8e", + "name": "dump payload as base64 string", + "func": "var hex=Buffer.from(msg.payload,\"base64\");\nmsg.payload=hex.toString(\"base64\");\nreturn msg;", + "outputs": 1, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1082, + "y": 1952, + "wires": [["1f8d172708898860"]] + }, + { + "id": "a002c148f3a06bac", + "type": "decode", + "z": "23dbb1ee.bc2e8e", + "name": "test decode Protobuf", + "protofile": "a0d4288141f6a629", + "protoType": "ServiceEnvelope", + "x": 1249, + "y": 1860, + "wires": [["4b6fc79398d05782"]] + }, + { + "id": "4b6fc79398d05782", + "type": "debug", + "z": "23dbb1ee.bc2e8e", + "name": "test entire payload", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "payload", + "targetType": "msg", + "statusVal": "", + "statusType": "auto", + "x": 1458, + "y": 1859, + "wires": [] + }, + { + "id": "a0d4288141f6a629", + "type": "protobuf-file", + "protopath": "E:\\Meshtastic-protobufs-master\\mqtt.proto", + "watchFile": true, + "keepCase": false + }, + { + "id": "dbab6472b07929a0", + "type": "protobuf-file", + "protopath": "E:\\Meshtastic-protobufs-master\\mesh.proto", + "watchFile": true, + "keepCase": false + } +] +``` + +Sending a position to a device for broadcast to the mesh is much easier with JSON. This introduces a new MQTT Service Envelope type: "sendposition". A valid MQTT envelope and message to broadcast lat, lon, altitude looks like this. + +```json +{ + "sender": "someSender", + "type": "sendposition", + "payload": { + "latitude_i": 399600000, + "longitude_i": -862600000, + "altitude": 100, + "time": 1670201543 + } +} +``` + +An example of doing this in node-red: +[](/documents/mqtt/PosJSON.jpg) diff --git a/docs/software/mqtt/python.mdx b/docs/software/mqtt/python.mdx new file mode 100644 index 00000000..6f14c1a7 --- /dev/null +++ b/docs/software/mqtt/python.mdx @@ -0,0 +1,53 @@ +--- +id: mqtt-python +title: Python +sidebar_label: Python +sidebar_position: 2 +--- + +### Sending/receiving messages on mosquitto server using python + +Here is an example publish message in python: + +```python +#!/usr/bin/env python3 +import paho.mqtt.client as mqtt +from random import randrange, uniform +import time + +client = mqtt.Client("some_client_id") +client.connect('localhost') + +while True: + randNumber = uniform(20.0, 21.0) + client.publish("env/test/TEMPERATURE", randNumber) + print("Just published " + str(randNumber) + " to topic TEMPERATURE") + time.sleep(1) +``` + +Here is example subscribe in python: + +```python +#!/usr/bin/env python3 + +import paho.mqtt.client as paho + +def on_message(mosq, obj, msg): + print("%-20s %d %s" % (msg.topic, msg.qos, msg.payload)) + mosq.publish('pong', 'ack', 0) + +def on_publish(mosq, obj, mid): + pass + +if __name__ == '__main__': + client = paho.Client() + client.on_message = on_message + client.on_publish = on_publish + + client.connect("localhost", 1883, 60) + + client.subscribe("env/test/TEMPERATURE", 0) + + while client.loop() == 0: + pass +``` diff --git a/docs/software/python-cli/index.mdx b/docs/software/python-cli/index.mdx index 6235fec6..5577fdee 100644 --- a/docs/software/python-cli/index.mdx +++ b/docs/software/python-cli/index.mdx @@ -124,7 +124,7 @@ meshtastic --qr Gets a preferences field. -Configuration values are described in: [Configuration](https://meshtastic.org/docs/settings). +Configuration values are described in: [Configuration](https://meshtastic.org/docs/configuration). ```shell title="Usage" meshtastic --get lora @@ -135,7 +135,7 @@ meshtastic --get lora.region Sets a preferences field. -Configuration values are described in: [Configuration](https://meshtastic.org/docs/settings). +Configuration values are described in: [Configuration](https://meshtastic.org/docs/configuration). ```shell title="Usage" meshtastic --set lora.region Unset @@ -306,7 +306,16 @@ meshtastic --sendping Traceroute from connected node to a destination. You need pass the destination ID as an argument. Only nodes that have the encryption key can be traced. ```shell title="Usage" -meshtastic --traceroute 'ba4bf9d0' +meshtastic --traceroute '!ba4bf9d0' +``` + +### --request-telemetry + +Request telemetry from a node. You need to pass the destination ID as an argument with '--dest'. For repeaters, the nodeNum is required. + +```shell title="Usage" +meshtastic --request-telemetry --dest '!ba4bf9d0' +meshtastic --request-telemetry --dest 1828779180 ``` ### --ack diff --git a/docs/software/python-cli/usage.mdx b/docs/software/python-cli/usage.mdx index 13bd32b0..65a765af 100644 --- a/docs/software/python-cli/usage.mdx +++ b/docs/software/python-cli/usage.mdx @@ -95,9 +95,9 @@ Toggling `set-ham` changes your device settings in the following ways. | Setting | `set-ham` Default | Normal Default | | :----------: | :---------------: | :------------------------------------------------------------------------: | -| `IsLicensed` | `true` | See [User Config - IsLicensed](/docs/settings/config/user#is-licensed-ham) | -| `LongName` | _Your CallSign_ | See [User Config - LongName](/docs/settings/config/user#long-name) | -| `ShortName` | _Abrv CallSign_ | See [User Config - ShortName](/docs/settings/config/user#short-name) | +| `IsLicensed` | `true` | See [User Config - IsLicensed](/docs/configuration/radio/user#is-licensed-ham) | +| `LongName` | _Your CallSign_ | See [User Config - LongName](/docs/configuration/radio/user#long-name) | +| `ShortName` | _Abrv CallSign_ | See [User Config - ShortName](/docs/configuration/radio/user#short-name) | | `PSK` | `""` | See [Channel Settings - PSK](#changing-the-preshared-key) | ## Changing the preshared key diff --git a/docs/software/web-client.mdx b/docs/software/web-client.mdx index 8f50fa3e..cbc0942f 100644 --- a/docs/software/web-client.mdx +++ b/docs/software/web-client.mdx @@ -31,7 +31,7 @@ This can be found on the screen of the device, via your router's DHCP lease page ::: -You can accessing your device over HTTP after you set up your [Network Connection](/docs/settings/config/network) +You can accessing your device over HTTP after you set up your [Network Connection](/docs/configuration/radio/network) ### Bluetooth @@ -51,6 +51,6 @@ The web interface is included in firmware releases. When a new firmware version ## Self Hosting -The source code for the WebUI can be found on out [GitHub](https://github.com/meshtastic/web) +The source code for the WebUI can be found on our [GitHub](https://github.com/meshtastic/web) Instructions for building and running the project can be found in the repo's readme. diff --git a/docusaurus.config.js b/docusaurus.config.js index c4e83210..23d8e598 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -15,11 +15,6 @@ const config = { organizationName: "meshtastic", projectName: "meshtastic", themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ { - announcementBar: { - id: "2_0", - content: - '🎉 Meshtastic 2.0 Has Now Launched! Check it Out Here 🎉', - }, docs: { sidebar: { autoCollapseCategories: true, @@ -86,7 +81,6 @@ const config = { }, algolia: { appId: "IG2GQB8L3V", - // trunk-ignore(gitleaks/generic-api-key) apiKey: "2e4348812173ec7ea6f7879c7032bb21", indexName: "meshtastic", contextualSearch: false, diff --git a/package.json b/package.json index 88a5ea21..9f694c49 100644 --- a/package.json +++ b/package.json @@ -15,39 +15,35 @@ "crowdin:sync": "docusaurus write-translations && crowdin upload && crowdin download" }, "dependencies": { - "@crowdin/cli": "^3.2.2", - "@algolia/client-search": "^4.19.1", - "@docusaurus/core": "3.0.0-alpha.0", - "@docusaurus/plugin-content-docs": "3.0.0-alpha.0", - "@docusaurus/preset-classic": "3.0.0-alpha.0", - "@docusaurus/theme-common": "3.0.0-alpha.0", - "@docusaurus/theme-mermaid": "3.0.0-alpha.0", - "@headlessui/react": "^1.7.16", + @crowdin/cli": "^3.2.2", + "@algolia/client-search": "^4.20.0", + "@docusaurus/core": "3.0.0", + "@docusaurus/plugin-content-docs": "3.0.0", + "@docusaurus/preset-classic": "3.0.0", + "@docusaurus/theme-common": "3.0.0", + "@docusaurus/theme-mermaid": "3.0.0", "@heroicons/react": "^2.0.18", - "@mdx-js/react": "^2.3.0", - "@meshtastic/meshtasticjs": "2.2.0-0", - "autoprefixer": "^10.4.14", + "@mdx-js/react": "^3.0.0", + "@meshtastic/meshtasticjs": "2.2.13-1", + "autoprefixer": "^10.4.16", "base64-js": "^1.5.1", + "clsx": "^2.0.0", "dotenv": "^16.3.1", - "framer-motion": "^6.5.1", - "postcss": "^8.4.27", + "postcss": "^8.4.31", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-icons": "^4.10.1", - "react-responsive-carousel": "^3.2.23", - "swr": "^2.2.0", - "tailwindcss": "^3.3.3", - "url-search-params-polyfill": "^8.2.4", - "use-breakpoint": "^3.1.1" + "react-icons": "^4.12.0", + "swr": "^2.2.4", + "tailwindcss": "^3.3.5" }, "devDependencies": { - "@docusaurus/module-type-aliases": "3.0.0-alpha.0", - "@tailwindcss/typography": "^0.5.9", - "@tsconfig/docusaurus": "^2.0.0", - "@types/node": "^20.4.8", - "@types/react": "^18.2.18", - "@types/react-dom": "^18.2.7", - "rome": "^12.1.3", - "typescript": "^5.1.6" + "@docusaurus/module-type-aliases": "3.0.0", + "@tailwindcss/typography": "^0.5.10", + "@tsconfig/docusaurus": "^2.0.2", + "@types/node": "^20.9.0", + "@types/react": "^18.2.37", + "@types/react-dom": "^18.2.15", + "biome": "^0.3.3", + "typescript": "^5.2.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 279fc072..e1ea0ddc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,53 +6,50 @@ settings: dependencies: '@algolia/client-search': - specifier: ^4.19.1 - version: 4.19.1 + specifier: ^4.20.0 + version: 4.20.0 '@crowdin/cli': specifier: ^3.2.2 version: 3.2.2 '@docusaurus/core': - specifier: 3.0.0-alpha.0 - version: 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) + specifier: 3.0.0 + version: 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) '@docusaurus/plugin-content-docs': - specifier: 3.0.0-alpha.0 - version: 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) + specifier: 3.0.0 + version: 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) '@docusaurus/preset-classic': - specifier: 3.0.0-alpha.0 - version: 3.0.0-alpha.0(@algolia/client-search@4.19.1)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) + specifier: 3.0.0 + version: 3.0.0(@algolia/client-search@4.20.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.10.0)(typescript@5.2.2) '@docusaurus/theme-common': - specifier: 3.0.0-alpha.0 - version: 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) + specifier: 3.0.0 + version: 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) '@docusaurus/theme-mermaid': - specifier: 3.0.0-alpha.0 - version: 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@headlessui/react': - specifier: ^1.7.16 - version: 1.7.16(react-dom@18.2.0)(react@18.2.0) + specifier: 3.0.0 + version: 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) '@heroicons/react': specifier: ^2.0.18 version: 2.0.18(react@18.2.0) '@mdx-js/react': - specifier: ^2.3.0 - version: 2.3.0(react@18.2.0) + specifier: ^3.0.0 + version: 3.0.0(@types/react@18.2.37)(react@18.2.0) '@meshtastic/meshtasticjs': - specifier: 2.2.0-0 - version: 2.2.0-0 + specifier: 2.2.13-1 + version: 2.2.13-1 autoprefixer: - specifier: ^10.4.14 - version: 10.4.14(postcss@8.4.27) + specifier: ^10.4.16 + version: 10.4.16(postcss@8.4.31) base64-js: specifier: ^1.5.1 version: 1.5.1 + clsx: + specifier: ^2.0.0 + version: 2.0.0 dotenv: specifier: ^16.3.1 version: 16.3.1 - framer-motion: - specifier: ^6.5.1 - version: 6.5.1(react-dom@18.2.0)(react@18.2.0) postcss: - specifier: ^8.4.27 - version: 8.4.27 + specifier: ^8.4.31 + version: 8.4.31 react: specifier: ^18.2.0 version: 18.2.0 @@ -60,200 +57,179 @@ dependencies: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-icons: - specifier: ^4.10.1 - version: 4.10.1(react@18.2.0) - react-responsive-carousel: - specifier: ^3.2.23 - version: 3.2.23 + specifier: ^4.12.0 + version: 4.12.0(react@18.2.0) swr: - specifier: ^2.2.0 - version: 2.2.0(react@18.2.0) + specifier: ^2.2.4 + version: 2.2.4(react@18.2.0) tailwindcss: - specifier: ^3.3.3 - version: 3.3.3 - url-search-params-polyfill: - specifier: ^8.2.4 - version: 8.2.4 - use-breakpoint: - specifier: ^3.1.1 - version: 3.1.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^3.3.5 + version: 3.3.5 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) + specifier: 3.0.0 + version: 3.0.0(react-dom@18.2.0)(react@18.2.0) '@tailwindcss/typography': - specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.3.3) + specifier: ^0.5.10 + version: 0.5.10(tailwindcss@3.3.5) '@tsconfig/docusaurus': - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.0.2 + version: 2.0.2 '@types/node': - specifier: ^20.4.8 - version: 20.4.8 + specifier: ^20.9.0 + version: 20.9.0 '@types/react': - specifier: ^18.2.18 - version: 18.2.18 + specifier: ^18.2.37 + version: 18.2.37 '@types/react-dom': - specifier: ^18.2.7 - version: 18.2.7 - rome: - specifier: ^12.1.3 - version: 12.1.3 + specifier: ^18.2.15 + version: 18.2.15 + biome: + specifier: ^0.3.3 + version: 0.3.3 typescript: - specifier: ^5.1.6 - version: 5.1.6 + specifier: ^5.2.2 + version: 5.2.2 packages: - /@algolia/autocomplete-core@1.8.2: - resolution: {integrity: sha512-mTeshsyFhAqw/ebqNsQpMtbnjr+qVOSKXArEj4K0d7sqc8It1XD0gkASwecm9mF/jlOQ4Z9RNg1HbdA8JPdRwQ==} + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.10.0): + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} dependencies: - '@algolia/autocomplete-shared': 1.8.2 + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.10.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights dev: false - /@algolia/autocomplete-preset-algolia@1.8.2(@algolia/client-search@4.19.1)(algoliasearch@4.17.0): - resolution: {integrity: sha512-J0oTx4me6ZM9kIKPuL3lyU3aB8DEvpVvR6xWmHVROx5rOYJGQcZsdG4ozxwcOyiiu3qxMkIbzntnV1S1VWD8yA==} + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.10.0): + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + search-insights: 2.10.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: false + + /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0): + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' dependencies: - '@algolia/autocomplete-shared': 1.8.2 - '@algolia/client-search': 4.19.1 - algoliasearch: 4.17.0 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@algolia/client-search': 4.20.0 + algoliasearch: 4.20.0 dev: false - /@algolia/autocomplete-shared@1.8.2: - resolution: {integrity: sha512-b6Z/X4MczChMcfhk6kfRmBzPgjoPzuS9KGR4AFsiLulLNRAAqhP+xZTKtMnZGhLuc61I20d5WqlId02AZvcO6g==} - dev: false - - /@algolia/cache-browser-local-storage@4.17.0: - resolution: {integrity: sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==} + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0): + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' dependencies: - '@algolia/cache-common': 4.17.0 + '@algolia/client-search': 4.20.0 + algoliasearch: 4.20.0 dev: false - /@algolia/cache-common@4.17.0: - resolution: {integrity: sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==} - dev: false - - /@algolia/cache-common@4.19.1: - resolution: {integrity: sha512-XGghi3l0qA38HiqdoUY+wvGyBsGvKZ6U3vTiMBT4hArhP3fOGLXpIINgMiiGjTe4FVlTa5a/7Zf2bwlIHfRqqg==} - dev: false - - /@algolia/cache-in-memory@4.17.0: - resolution: {integrity: sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==} + /@algolia/cache-browser-local-storage@4.20.0: + resolution: {integrity: sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==} dependencies: - '@algolia/cache-common': 4.17.0 + '@algolia/cache-common': 4.20.0 dev: false - /@algolia/client-account@4.17.0: - resolution: {integrity: sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==} - dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/client-search': 4.17.0 - '@algolia/transporter': 4.17.0 + /@algolia/cache-common@4.20.0: + resolution: {integrity: sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==} dev: false - /@algolia/client-analytics@4.17.0: - resolution: {integrity: sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==} + /@algolia/cache-in-memory@4.20.0: + resolution: {integrity: sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/client-search': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/cache-common': 4.20.0 dev: false - /@algolia/client-common@4.17.0: - resolution: {integrity: sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==} + /@algolia/client-account@4.20.0: + resolution: {integrity: sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==} dependencies: - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/client-common': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/transporter': 4.20.0 dev: false - /@algolia/client-common@4.19.1: - resolution: {integrity: sha512-3kAIVqTcPrjfS389KQvKzliC559x+BDRxtWamVJt8IVp7LGnjq+aVAXg4Xogkur1MUrScTZ59/AaUd5EdpyXgA==} + /@algolia/client-analytics@4.20.0: + resolution: {integrity: sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==} dependencies: - '@algolia/requester-common': 4.19.1 - '@algolia/transporter': 4.19.1 + '@algolia/client-common': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 dev: false - /@algolia/client-personalization@4.17.0: - resolution: {integrity: sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==} + /@algolia/client-common@4.20.0: + resolution: {integrity: sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 dev: false - /@algolia/client-search@4.17.0: - resolution: {integrity: sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==} + /@algolia/client-personalization@4.20.0: + resolution: {integrity: sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==} dependencies: - '@algolia/client-common': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/client-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 dev: false - /@algolia/client-search@4.19.1: - resolution: {integrity: sha512-mBecfMFS4N+yK/p0ZbK53vrZbL6OtWMk8YmnOv1i0LXx4pelY8TFhqKoTit3NPVPwoSNN0vdSN9dTu1xr1XOVw==} + /@algolia/client-search@4.20.0: + resolution: {integrity: sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==} dependencies: - '@algolia/client-common': 4.19.1 - '@algolia/requester-common': 4.19.1 - '@algolia/transporter': 4.19.1 + '@algolia/client-common': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/transporter': 4.20.0 dev: false /@algolia/events@4.0.1: resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} dev: false - /@algolia/logger-common@4.17.0: - resolution: {integrity: sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==} + /@algolia/logger-common@4.20.0: + resolution: {integrity: sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==} dev: false - /@algolia/logger-common@4.19.1: - resolution: {integrity: sha512-i6pLPZW/+/YXKis8gpmSiNk1lOmYCmRI6+x6d2Qk1OdfvX051nRVdalRbEcVTpSQX6FQAoyeaui0cUfLYW5Elw==} - dev: false - - /@algolia/logger-console@4.17.0: - resolution: {integrity: sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==} + /@algolia/logger-console@4.20.0: + resolution: {integrity: sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==} dependencies: - '@algolia/logger-common': 4.17.0 + '@algolia/logger-common': 4.20.0 dev: false - /@algolia/requester-browser-xhr@4.17.0: - resolution: {integrity: sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==} + /@algolia/requester-browser-xhr@4.20.0: + resolution: {integrity: sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==} dependencies: - '@algolia/requester-common': 4.17.0 + '@algolia/requester-common': 4.20.0 dev: false - /@algolia/requester-common@4.17.0: - resolution: {integrity: sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==} + /@algolia/requester-common@4.20.0: + resolution: {integrity: sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==} dev: false - /@algolia/requester-common@4.19.1: - resolution: {integrity: sha512-BisRkcWVxrDzF1YPhAckmi2CFYK+jdMT60q10d7z3PX+w6fPPukxHRnZwooiTUrzFe50UBmLItGizWHP5bDzVQ==} - dev: false - - /@algolia/requester-node-http@4.17.0: - resolution: {integrity: sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==} + /@algolia/requester-node-http@4.20.0: + resolution: {integrity: sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==} dependencies: - '@algolia/requester-common': 4.17.0 + '@algolia/requester-common': 4.20.0 dev: false - /@algolia/transporter@4.17.0: - resolution: {integrity: sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==} + /@algolia/transporter@4.20.0: + resolution: {integrity: sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==} dependencies: - '@algolia/cache-common': 4.17.0 - '@algolia/logger-common': 4.17.0 - '@algolia/requester-common': 4.17.0 - dev: false - - /@algolia/transporter@4.19.1: - resolution: {integrity: sha512-nkpvPWbpuzxo1flEYqNIbGz7xhfhGOKGAZS7tzC+TELgEmi7z99qRyTfNSUlW7LZmB3ACdnqAo+9A9KFBENviQ==} - dependencies: - '@algolia/cache-common': 4.19.1 - '@algolia/logger-common': 4.19.1 - '@algolia/requester-common': 4.19.1 + '@algolia/cache-common': 4.20.0 + '@algolia/logger-common': 4.20.0 + '@algolia/requester-common': 4.20.0 dev: false /@alloc/quick-lru@5.2.0: @@ -265,1318 +241,1374 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.20 dev: false - /@babel/code-frame@7.21.4: - resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.18.6 + '@babel/highlight': 7.22.20 + chalk: 2.4.2 dev: false - /@babel/compat-data@7.21.7: - resolution: {integrity: sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==} + /@babel/compat-data@7.23.3: + resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==} engines: {node: '>=6.9.0'} dev: false - /@babel/core@7.21.8: - resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} + /@babel/core@7.23.3: + resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.5 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-module-transforms': 7.21.5 - '@babel/helpers': 7.21.5 - '@babel/parser': 7.21.8 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helpers': 7.23.2 + '@babel/parser': 7.23.3 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.22.17 convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 - semver: 6.3.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/generator@7.21.5: - resolution: {integrity: sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==} + /@babel/generator@7.23.3: + resolution: {integrity: sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.22.17 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 dev: false - /@babel/helper-annotate-as-pure@7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + jsesc: 2.5.2 dev: false - /@babel/helper-builder-binary-assignment-operator-visitor@7.21.5: - resolution: {integrity: sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==} + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.23.3 dev: false - /@babel/helper-compilation-targets@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==} + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.21.7 - '@babel/core': 7.21.8 - '@babel/helper-validator-option': 7.21.0 - browserslist: 4.21.5 + '@babel/types': 7.23.3 + dev: false + + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.3 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.22.1 lru-cache: 5.1.1 - semver: 6.3.0 + semver: 6.3.1 dev: false - /@babel/helper-create-class-features-plugin@7.21.8(@babel/core@7.21.8): - resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==} + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.3): + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-member-expression-to-functions': 7.21.5 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.21.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/helper-split-export-declaration': 7.18.6 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 dev: false - /@babel/helper-create-regexp-features-plugin@7.21.8(@babel/core@7.21.8): - resolution: {integrity: sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==} + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.3): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 - semver: 6.3.0 + semver: 6.3.1 dev: false - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.8): - resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.3): + resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: - '@babel/core': ^7.4.0-0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 lodash.debounce: 4.0.8 - resolve: 1.22.4 - semver: 6.3.0 + resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: false - /@babel/helper-environment-visitor@7.21.5: - resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==} + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} dev: false - /@babel/helper-function-name@7.21.0: - resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.5 + '@babel/template': 7.22.15 + '@babel/types': 7.22.17 dev: false - /@babel/helper-hoist-variables@7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 dev: false - /@babel/helper-member-expression-to-functions@7.21.5: - resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==} + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.23.0 dev: false - /@babel/helper-module-imports@7.21.4: - resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.23.3 dev: false - /@babel/helper-module-transforms@7.21.5: - resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==} + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-simple-access': 7.21.5 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - transitivePeerDependencies: - - supports-color + '@babel/types': 7.23.3 dev: false - /@babel/helper-optimise-call-expression@7.18.6: - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.5 - dev: false - - /@babel/helper-plugin-utils@7.21.5: - resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.3 + dev: false + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.3): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: false + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.3): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: false + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.3 + dev: false + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.3 + dev: false + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: false + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-identifier@7.22.15: + resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.3 + dev: false + + /@babel/helpers@7.23.2: + resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.22.17 transitivePeerDependencies: - supports-color dev: false - /@babel/helper-replace-supers@7.21.5: - resolution: {integrity: sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==} + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-member-expression-to-functions': 7.21.5 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-simple-access@7.21.5: - resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.5 - dev: false - - /@babel/helper-skip-transparent-expression-wrappers@7.20.0: - resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.5 - dev: false - - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.21.5 - dev: false - - /@babel/helper-string-parser@7.21.5: - resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-validator-identifier@7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-validator-option@7.21.0: - resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-wrap-function@7.20.5: - resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.21.0 - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helpers@7.21.5: - resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.20.7 - '@babel/traverse': 7.21.5 - '@babel/types': 7.21.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/highlight@7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 dev: false - /@babel/parser@7.21.8: - resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} + /@babel/parser@7.23.3: + resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.23.3 dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + dev: false + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.22.17): + resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.3(@babel/core@7.23.3) dev: false - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.3): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.3 dev: false - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) - dev: false - - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) - dev: false - - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) - dev: false - - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) - dev: false - - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) - dev: false - - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) - dev: false - - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.21.7 - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.8) - dev: false - - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) - dev: false - - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) - dev: false - - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.8): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.3): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.8): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.3): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.8): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.3): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.8): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.3): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.8): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.3): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.8): - resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.21.8): + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.3): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.8): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.3): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.21.8): - resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.8): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.3): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.8): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.3): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.8): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.3): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.8): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.3): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.8): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.3): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.8): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.3): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.8): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.3): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.8): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.3): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.21.8): - resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-arrow-functions@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.8) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.8): - resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-replace-supers': 7.21.5 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-computed-properties@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/template': 7.20.7 - dev: false - - /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.8): - resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-for-of@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-function-name': 7.21.0 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.8): - resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-commonjs@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-simple-access': 7.21.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.8): - resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-validator-identifier': 7.19.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-transforms': 7.21.5 - '@babel/helper-plugin-utils': 7.21.5 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.8): - resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.3): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + /@babel/plugin-transform-async-generator-functions@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-replace-supers': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.3) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-block-scoping@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-static-block@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-classes@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: false + + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + dev: false + + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dynamic-import@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-export-namespace-from@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-for-of@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-json-strings@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-logical-assignment-operators@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-nullish-coalescing-operator@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-numeric-separator@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-object-rest-spread@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.3 + '@babel/core': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-optional-catch-binding@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-optional-chaining@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-private-property-in-object@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.3): + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.3) + dev: false + + /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.23.3): + resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3) + '@babel/types': 7.23.3 + dev: false + + /@babel/plugin-transform-react-pure-annotations@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + dev: false + + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-runtime@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-XcQ3X58CKBdBnnZpPaQjgVMePsXtSZzHoku70q9tUAQp02ggPQNM04BF3RvlW1GSM/McbSOQAzEK4MXbS7/JFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.3) + babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.3) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.3) + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.8): - resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==} + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false - /@babel/plugin-transform-react-constant-elements@7.21.3(@babel/core@7.21.8): - resolution: {integrity: sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ==} + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-react-jsx-development@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.21.8) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-react-jsx@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==} + /@babel/plugin-transform-typescript@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-ogV0yWnq38CFwH20l2Afz0dfKuZBx9o/Y2Rmh5vuSS0YD1hswgEgTfyTzuSrT2q9btmHRSqYoSfwFUVaC1M1Jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) - '@babel/types': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.3) dev: false - /@babel/plugin-transform-react-pure-annotations@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-regenerator@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==} + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - regenerator-transform: 0.15.1 + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-runtime@7.21.4(@babel/core@7.21.8): - resolution: {integrity: sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==} + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.3 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.3) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/preset-env@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-module-imports': 7.21.4 - '@babel/helper-plugin-utils': 7.21.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.8) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.8) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.8) - semver: 6.3.0 + '@babel/compat-data': 7.23.3 + '@babel/core': 7.23.3 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.3) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.3) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.3) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.3) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.3) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.3) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.3) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-async-generator-functions': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-block-scoping': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-class-static-block': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-classes': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-dynamic-import': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-export-namespace-from': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-for-of': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-json-strings': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-logical-assignment-operators': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-numeric-separator': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-object-rest-spread': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-optional-catch-binding': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-optional-chaining': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-private-property-in-object': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.3) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.3) + babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.3) + babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.3) + babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.3) + core-js-compat: 3.33.2 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} - engines: {node: '>=6.9.0'} + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.3): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.8): - resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - dev: false - - /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.8): - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-typescript@7.21.3(@babel/core@7.21.8): - resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.21.8) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-unicode-escapes@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-create-regexp-features-plugin': 7.21.8(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - dev: false - - /@babel/preset-env@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.21.7 - '@babel/core': 7.21.8 - '@babel/helper-compilation-targets': 7.21.5(@babel/core@7.21.8) - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.8) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.8) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.8) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.8) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.21.8) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.8) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.8) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.8) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.8) - '@babel/plugin-transform-arrow-functions': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.8) - '@babel/plugin-transform-computed-properties': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-for-of': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.8) - '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.8) - '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.8) - '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-regenerator': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.8) - '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.8) - '@babel/plugin-transform-unicode-escapes': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.8) - '@babel/preset-modules': 0.1.5(@babel/core@7.21.8) - '@babel/types': 7.21.5 - babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.8) - babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.8) - babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.8) - core-js-compat: 3.30.2 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/preset-modules@0.1.5(@babel/core@7.21.8): - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.8) - '@babel/types': 7.21.5 + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.3 esutils: 2.0.3 dev: false - /@babel/preset-react@7.18.6(@babel/core@7.21.8): - resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} + /@babel/preset-react@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-react-jsx': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-react-jsx-development': 7.18.6(@babel/core@7.21.8) - '@babel/plugin-transform-react-pure-annotations': 7.18.6(@babel/core@7.21.8) + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.3) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.3) + '@babel/plugin-transform-react-pure-annotations': 7.23.3(@babel/core@7.23.3) dev: false - /@babel/preset-typescript@7.21.5(@babel/core@7.21.8): - resolution: {integrity: sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==} + /@babel/preset-typescript@7.23.3(@babel/core@7.23.3): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-plugin-utils': 7.21.5 - '@babel/helper-validator-option': 7.21.0 - '@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.21.8) - '@babel/plugin-transform-modules-commonjs': 7.21.5(@babel/core@7.21.8) - '@babel/plugin-transform-typescript': 7.21.3(@babel/core@7.21.8) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.3 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.3) + '@babel/plugin-transform-typescript': 7.23.3(@babel/core@7.23.3) dev: false /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: false - /@babel/runtime-corejs3@7.21.5: - resolution: {integrity: sha512-FRqFlFKNazWYykft5zvzuEl1YyTDGsIRrjV9rvxvYkUC7W/ueBng1X68Xd6uRMzAaJ0xMKn08/wem5YS1lpX8w==} + /@babel/runtime-corejs3@7.23.2: + resolution: {integrity: sha512-54cIh74Z1rp4oIjsHjqN+WM4fMyCBYe+LpZ9jWm51CZ1fbH3SkAzQD/3XLoNkjbJ7YEmjobLXyvQrFypRHOrXw==} engines: {node: '>=6.9.0'} dependencies: - core-js-pure: 3.30.2 - regenerator-runtime: 0.13.11 + core-js-pure: 3.33.2 + regenerator-runtime: 0.14.0 dev: false - /@babel/runtime@7.21.5: - resolution: {integrity: sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==} + /@babel/runtime@7.23.2: + resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.11 + regenerator-runtime: 0.14.0 - /@babel/template@7.20.7: - resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.21.4 - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 dev: false - /@babel/traverse@7.21.5: - resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} + /@babel/traverse@7.23.2: + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.21.4 - '@babel/generator': 7.21.5 - '@babel/helper-environment-visitor': 7.21.5 - '@babel/helper-function-name': 7.21.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.21.8 - '@babel/types': 7.21.5 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: false - /@babel/types@7.21.5: - resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} + /@babel/types@7.23.3: + resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.21.5 - '@babel/helper-validator-identifier': 7.19.1 + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.15 to-fast-properties: 2.0.0 dev: false - /@braintree/sanitize-url@6.0.2: - resolution: {integrity: sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==} - dev: false - - /@buf/meshtastic_protobufs.bufbuild_es@1.3.0-20230807174505-db3cb0c7cf53.1(@bufbuild/protobuf@1.3.0): - resolution: {registry: https://buf.build/gen/npm/v1, tarball: https://buf.build/gen/npm/v1/@buf/meshtastic_protobufs.bufbuild_es/-/meshtastic_protobufs.bufbuild_es-1.3.0-20230807174505-db3cb0c7cf53.1.tgz} - peerDependencies: - '@bufbuild/protobuf': ^1.3.0 + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} dependencies: - '@bufbuild/protobuf': 1.3.0 + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 dev: false - /@bufbuild/protobuf@1.3.0: - resolution: {integrity: sha512-G372ods0pLt46yxVRsnP/e2btVPuuzArcMPFpIDeIwiGPuuglEs9y75iG0HMvZgncsj5TvbYRWqbVyOe3PLCWQ==} + /@braintree/sanitize-url@6.0.4: + resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} + dev: false + + /@buf/meshtastic_protobufs.bufbuild_es@1.4.2-20231115125959-252a144b0286.1(@bufbuild/protobuf@1.4.2): + resolution: {registry: https://buf.build/gen/npm/v1, tarball: https://buf.build/gen/npm/v1/@buf/meshtastic_protobufs.bufbuild_es/-/meshtastic_protobufs.bufbuild_es-1.4.2-20231115125959-252a144b0286.1.tgz} + peerDependencies: + '@bufbuild/protobuf': ^1.4.2 + dependencies: + '@bufbuild/protobuf': 1.4.2 + dev: false + + /@bufbuild/protobuf@1.4.2: + resolution: {integrity: sha512-JyEH8Z+OD5Sc2opSg86qMHn1EM1Sa+zj/Tc0ovxdwk56ByVNONJSabuCUbLQp+eKN3rWNfrho0X+3SEqEPXIow==} dev: false /@colors/colors@1.5.0: @@ -1598,16 +1630,17 @@ packages: engines: {node: '>=10.0.0'} dev: false - /@docsearch/css@3.3.4: - resolution: {integrity: sha512-vDwCDoVXDgopw/hvr0zEADew2wWaGP8Qq0Bxhgii1Ewz2t4fQeyJwIRN/mWADeLFYPVkpz8TpEbxya/i6Tm0WA==} + /@docsearch/css@3.5.2: + resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==} dev: false - /@docsearch/react@3.3.4(@algolia/client-search@4.19.1)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-aeOf1WC5zMzBEi2SI6WWznOmIo9rnpN4p7a3zHXxowVciqlI4HsZGtOR9nFOufLeolv7HibwLlaM0oyUqJxasw==} + /@docsearch/react@3.5.2(@algolia/client-search@4.20.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.10.0): + resolution: {integrity: sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' peerDependenciesMeta: '@types/react': optional: true @@ -1615,99 +1648,101 @@ packages: optional: true react-dom: optional: true + search-insights: + optional: true dependencies: - '@algolia/autocomplete-core': 1.8.2 - '@algolia/autocomplete-preset-algolia': 1.8.2(@algolia/client-search@4.19.1)(algoliasearch@4.17.0) - '@docsearch/css': 3.3.4 - '@types/react': 18.2.18 - algoliasearch: 4.17.0 + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.10.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@docsearch/css': 3.5.2 + '@types/react': 18.2.37 + algoliasearch: 4.20.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + search-insights: 2.10.0 transitivePeerDependencies: - '@algolia/client-search' dev: false - /@docusaurus/core@3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-e1P/PpQqy0DFnYmE6Mv7Dv0RhhA0nF5G+jwkMEEOrztRKaDOqHzWZYy7IC0s+63YizCzgYYuyD02QMhgr77Yhg==} - engines: {node: '>=16.14'} + /@docusaurus/core@3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-bHWtY55tJTkd6pZhHrWz1MpWuwN4edZe0/UWgFF7PW/oJeDZvLSXKqwny3L91X1/LGGoypBGkeZn8EOuKeL4yQ==} + engines: {node: '>=18.0'} hasBin: true peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/generator': 7.21.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.8) - '@babel/plugin-transform-runtime': 7.21.4(@babel/core@7.21.8) - '@babel/preset-env': 7.21.5(@babel/core@7.21.8) - '@babel/preset-react': 7.18.6(@babel/core@7.21.8) - '@babel/preset-typescript': 7.21.5(@babel/core@7.21.8) - '@babel/runtime': 7.21.5 - '@babel/runtime-corejs3': 7.21.5 - '@babel/traverse': 7.21.5 + '@babel/core': 7.22.17 + '@babel/generator': 7.22.15 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.17) + '@babel/plugin-transform-runtime': 7.22.15(@babel/core@7.22.17) + '@babel/preset-env': 7.22.15(@babel/core@7.22.17) + '@babel/preset-react': 7.22.15(@babel/core@7.22.17) + '@babel/preset-typescript': 7.22.15(@babel/core@7.22.17) + '@babel/runtime': 7.22.15 + '@babel/runtime-corejs3': 7.22.15 + '@babel/traverse': 7.23.2 '@docusaurus/cssnano-preset': 3.0.0-alpha.0 '@docusaurus/logger': 3.0.0-alpha.0 '@docusaurus/mdx-loader': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0) '@docusaurus/react-loadable': 5.5.2(react@18.2.0) - '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-common': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) + '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-common': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) '@slorber/static-site-generator-webpack-plugin': 4.0.7 '@svgr/webpack': 6.5.1 - autoprefixer: 10.4.14(postcss@8.4.27) - babel-loader: 9.1.3(@babel/core@7.21.8)(webpack@5.82.1) + autoprefixer: 10.4.16(postcss@8.4.31) + babel-loader: 9.1.3(@babel/core@7.23.3)(webpack@5.89.0) babel-plugin-dynamic-import-node: 2.3.3 boxen: 6.2.1 chalk: 4.1.2 chokidar: 3.5.3 clean-css: 5.3.2 cli-table3: 0.6.3 - combine-promises: 1.1.0 + combine-promises: 1.2.0 commander: 5.1.0 - copy-webpack-plugin: 11.0.0(webpack@5.82.1) - core-js: 3.30.2 - css-loader: 6.7.3(webpack@5.82.1) - css-minimizer-webpack-plugin: 4.2.2(clean-css@5.3.2)(webpack@5.82.1) - cssnano: 5.1.15(postcss@8.4.27) + copy-webpack-plugin: 11.0.0(webpack@5.89.0) + core-js: 3.33.2 + css-loader: 6.8.1(webpack@5.89.0) + css-minimizer-webpack-plugin: 4.2.2(clean-css@5.3.2)(webpack@5.89.0) + cssnano: 5.1.15(postcss@8.4.31) del: 6.1.1 detect-port: 1.5.1 escape-html: 1.0.3 eta: 2.2.0 - file-loader: 6.2.0(webpack@5.82.1) + file-loader: 6.2.0(webpack@5.89.0) fs-extra: 11.1.1 html-minifier-terser: 7.2.0 html-tags: 3.3.1 - html-webpack-plugin: 5.5.1(webpack@5.82.1) - import-fresh: 3.3.0 + html-webpack-plugin: 5.5.3(webpack@5.89.0) leven: 3.1.0 lodash: 4.17.21 - mini-css-extract-plugin: 2.7.5(webpack@5.82.1) - postcss: 8.4.27 - postcss-loader: 7.3.0(postcss@8.4.27)(webpack@5.82.1) + mini-css-extract-plugin: 2.7.6(webpack@5.89.0) + postcss: 8.4.31 + postcss-loader: 7.3.3(postcss@8.4.31)(typescript@5.2.2)(webpack@5.89.0) prompts: 2.4.2 react: 18.2.0 - react-dev-utils: 12.0.1(typescript@5.1.6)(webpack@5.82.1) + react-dev-utils: 12.0.1(typescript@5.2.2)(webpack@5.89.0) react-dom: 18.2.0(react@18.2.0) react-helmet-async: 1.3.0(react-dom@18.2.0)(react@18.2.0) react-loadable: /@docusaurus/react-loadable@5.5.2(react@18.2.0) - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@5.5.2)(webpack@5.82.1) + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@5.5.2)(webpack@5.89.0) react-router: 5.3.4(react@18.2.0) react-router-config: 5.1.1(react-router@5.3.4)(react@18.2.0) react-router-dom: 5.3.4(react@18.2.0) - rtl-detect: 1.0.4 - semver: 7.5.1 + rtl-detect: 1.1.2 + semver: 7.5.4 serve-handler: 6.1.5 shelljs: 0.8.5 - terser-webpack-plugin: 5.3.8(webpack@5.82.1) - tslib: 2.6.1 + terser-webpack-plugin: 5.3.9(webpack@5.89.0) + tslib: 2.6.2 update-notifier: 6.0.2 - url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.82.1) - wait-on: 7.0.1 - webpack: 5.82.1 - webpack-bundle-analyzer: 4.8.0 - webpack-dev-server: 4.15.0(webpack@5.82.1) - webpack-merge: 5.8.0 - webpackbar: 5.0.2(webpack@5.82.1) + url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.89.0) + wait-on: 7.2.0 + webpack: 5.89.0 + webpack-bundle-analyzer: 4.9.1 + webpack-dev-server: 4.15.1(webpack@5.89.0) + webpack-merge: 5.10.0 + webpackbar: 5.0.2(webpack@5.89.0) transitivePeerDependencies: - '@docusaurus/types' - '@parcel/css' @@ -1727,58 +1762,58 @@ packages: - webpack-cli dev: false - /@docusaurus/cssnano-preset@3.0.0-alpha.0: - resolution: {integrity: sha512-W+rCRAAv/AIePyWk62tYUxZBRJojBWwIW0/olhhjoEyI4cyLrfUXE1be8gilu0SoDw6S1WukDCoEf+31+9+ZJg==} - engines: {node: '>=16.14'} + /@docusaurus/cssnano-preset@3.0.0: + resolution: {integrity: sha512-FHiRfwmVvIVdIGsHcijUOaX7hMn0mugVYB7m4GkpYI6Mi56zwQV4lH5p7DxcW5CUYNWMVxz2loWSCiWEm5ikwA==} + engines: {node: '>=18.0'} dependencies: - cssnano-preset-advanced: 5.3.10(postcss@8.4.27) - postcss: 8.4.27 - postcss-sort-media-queries: 4.4.1(postcss@8.4.27) - tslib: 2.6.1 + cssnano-preset-advanced: 5.3.10(postcss@8.4.31) + postcss: 8.4.31 + postcss-sort-media-queries: 4.4.1(postcss@8.4.31) + tslib: 2.6.2 dev: false - /@docusaurus/logger@3.0.0-alpha.0: - resolution: {integrity: sha512-atQzfn8A5A95qOIgTU8+YQts0eWwv7jru9NLp+Jauu0ykWVjKP0IXFHrtHkpLi96gUjIgdRb0AYaLZFGME74ZQ==} - engines: {node: '>=16.14'} + /@docusaurus/logger@3.0.0: + resolution: {integrity: sha512-6eX0eOfioMQCk+qgCnHvbLLuyIAA+r2lSID6d6JusiLtDKmYMfNp3F4yyE8bnb0Abmzt2w68XwptEFYyALSAXw==} + engines: {node: '>=18.0'} dependencies: chalk: 4.1.2 - tslib: 2.6.1 + tslib: 2.6.2 dev: false - /@docusaurus/mdx-loader@3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-R4NUhQldtTdoxLq5C1QgTmX+qAmH0S3RBQHnGhlNjnK1ZUUzrbZvl4luTQ5OziQ2eQDuDmwpPPZqYKbeuKLNcw==} - engines: {node: '>=16.14'} + /@docusaurus/mdx-loader@3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-JkGge6WYDrwjNgMxwkb6kNQHnpISt5L1tMaBWFDBKeDToFr5Kj29IL35MIQm0RfrnoOfr/29RjSH4aRtvlAR0A==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/parser': 7.21.8 - '@babel/traverse': 7.21.5 + '@babel/parser': 7.22.16 + '@babel/traverse': 7.23.2 '@docusaurus/logger': 3.0.0-alpha.0 '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) '@mdx-js/mdx': 2.3.0 escape-html: 1.0.3 - estree-util-value-to-estree: 2.1.0 - file-loader: 6.2.0(webpack@5.82.1) + estree-util-value-to-estree: 3.0.1 + file-loader: 6.2.0(webpack@5.89.0) fs-extra: 11.1.1 - hastscript: 7.2.0 image-size: 1.0.2 - mdast-util-mdx: 2.0.1 - mdast-util-to-string: 3.2.0 + mdast-util-mdx: 3.0.0 + mdast-util-to-string: 4.0.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - rehype-raw: 6.1.1 - remark-comment: 1.0.0 - remark-directive: 2.0.1 - remark-emoji: 2.2.0 - remark-gfm: 3.0.1 + rehype-raw: 7.0.0 + remark-directive: 3.0.0 + remark-emoji: 4.0.1 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.0 stringify-object: 3.3.0 - tslib: 2.6.1 - unified: 10.1.2 - unist-util-visit: 2.0.3 - url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.82.1) - webpack: 5.82.1 + tslib: 2.6.2 + unified: 11.0.4 + unist-util-visit: 5.0.0 + url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.89.0) + vfile: 6.0.1 + webpack: 5.89.0 transitivePeerDependencies: - '@docusaurus/types' - '@swc/core' @@ -1788,17 +1823,17 @@ packages: - webpack-cli dev: false - /@docusaurus/module-type-aliases@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-9Uko9ndSSsRFFpw23zCw0TuzQOrHuYwfuA1gxDoATSGmWdSu8+EVGBV7TP3EHKb8s9EImlZ6I+3CROuoM1fvDQ==} + /@docusaurus/module-type-aliases@3.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-CfC6CgN4u/ce+2+L1JdsHNyBd8yYjl4De2B2CBj2a9F7WuJ5RjV1ciuU7KDg8uyju+NRVllRgvJvxVUjCdkPiw==} peerDependencies: react: '*' react-dom: '*' dependencies: '@docusaurus/react-loadable': 5.5.2(react@18.2.0) - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) '@types/history': 4.7.11 - '@types/react': 18.2.18 - '@types/react-router-config': 5.0.7 + '@types/react': 18.2.37 + '@types/react-router-config': 5.0.10 '@types/react-router-dom': 5.3.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -1810,20 +1845,20 @@ packages: - uglify-js - webpack-cli - /@docusaurus/plugin-content-blog@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-ZKYq0Q888AeIPrTUhw6igq/e2Ee5WLENaOSy2uzVtPLieXu0BAw4gQqV2qyhZr0vwvMYhJ4Ke7KTMFSAgBXdyg==} - engines: {node: '>=16.14'} + /@docusaurus/plugin-content-blog@3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-iA8Wc3tIzVnROJxrbIsU/iSfixHW16YeW9RWsBw7hgEk4dyGsip9AsvEDXobnRq3lVv4mfdgoS545iGWf1Ip9w==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/logger': 3.0.0-alpha.0 - '@docusaurus/mdx-loader': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-common': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/logger': 3.0.0 + '@docusaurus/mdx-loader': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-common': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.1.1 @@ -1831,10 +1866,11 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) reading-time: 1.5.0 - tslib: 2.6.1 - unist-util-visit: 2.0.3 + srcset: 4.0.0 + tslib: 2.6.2 + unist-util-visit: 5.0.0 utility-types: 3.10.0 - webpack: 5.82.1 + webpack: 5.89.0 transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -1853,31 +1889,30 @@ packages: - webpack-cli dev: false - /@docusaurus/plugin-content-docs@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-dlxgXsbvjl4jARJi32dn5BAU7LgQRJX18pC/jsrq3IeHQNS9sXSBFmHItK66JtqwXTdhpipkui3iIari2NNpFQ==} - engines: {node: '>=16.14'} + /@docusaurus/plugin-content-docs@3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-MFZsOSwmeJ6rvoZMLieXxPuJsA9M9vn7/mUZmfUzSUTeHAeq+fEqvLltFOxcj4DVVDTYlQhgWYd+PISIWgamKw==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/logger': 3.0.0-alpha.0 - '@docusaurus/mdx-loader': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/module-type-aliases': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@types/react-router-config': 5.0.7 - combine-promises: 1.1.0 + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/logger': 3.0.0 + '@docusaurus/mdx-loader': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/module-type-aliases': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) + '@types/react-router-config': 5.0.10 + combine-promises: 1.2.0 fs-extra: 11.1.1 - import-fresh: 3.3.0 js-yaml: 4.1.0 lodash: 4.17.21 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.1 + tslib: 2.6.2 utility-types: 3.10.0 - webpack: 5.82.1 + webpack: 5.89.0 transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -1896,23 +1931,23 @@ packages: - webpack-cli dev: false - /@docusaurus/plugin-content-pages@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-yoTfh+xBZaOM3tBJFBpwYsDqnK4zAJjJtAJ80MnnnXIZ9gw640T9F+OjIqwFwp3rphpdONGg1QmeEnmAzy64QA==} - engines: {node: '>=16.14'} + /@docusaurus/plugin-content-pages@3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-EXYHXK2Ea1B5BUmM0DgSwaOYt8EMSzWtYUToNo62Q/EoWxYOQFdWglYnw3n7ZEGyw5Kog4LHaRwlazAdmDomvQ==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/mdx-loader': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/mdx-loader': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) fs-extra: 11.1.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.1 - webpack: 5.82.1 + tslib: 2.6.2 + webpack: 5.89.0 transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -1931,21 +1966,21 @@ packages: - webpack-cli dev: false - /@docusaurus/plugin-debug@3.0.0-alpha.0(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-2dNVjl//5G5djj1+YZ3aqaAmxNGGQydzUr3tZnaGfej7Z2NrhYrGo1LFKI+EgB5TpX/Pu9zIhGi/D0kS8j7BlA==} - engines: {node: '>=16.14'} + /@docusaurus/plugin-debug@3.0.0(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-gSV07HfQgnUboVEb3lucuVyv5pEoy33E7QXzzn++3kSc/NLEimkjXh3sSnTGOishkxCqlFV9BHfY/VMm5Lko5g==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) + '@microlink/react-json-view': 1.23.0(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0) fs-extra: 11.1.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-json-view: 1.21.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) - tslib: 2.6.1 + tslib: 2.6.2 transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -1966,19 +2001,19 @@ packages: - webpack-cli dev: false - /@docusaurus/plugin-google-analytics@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-ybaJQBHGzMNWOEPMEQ9jhln0pxBrLgWIbj7YlzjKjfHCKZ1FYEKlvQBrps8MPfH+d3LhwS7f9dd7Z1sJs3GUlA==} - engines: {node: '>=16.14'} + /@docusaurus/plugin-google-analytics@3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-0zcLK8w+ohmSm1fjUQCqeRsjmQc0gflvXnaVA/QVVCtm2yCiBtkrSGQXqt4MdpD7Xq8mwo3qVd5nhIcvrcebqw==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.1 + tslib: 2.6.2 transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -1997,20 +2032,20 @@ packages: - webpack-cli dev: false - /@docusaurus/plugin-google-gtag@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-IJkZuBf4bIjKWUWe6qg82tSTjTI06rqIWPbw2wCW6H/m+rgI0jbinpR3pmrFl1agVi3dWtn731CVXV4lSvv7cg==} - engines: {node: '>=16.14'} + /@docusaurus/plugin-google-gtag@3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-asEKavw8fczUqvXu/s9kG2m1epLnHJ19W6CCCRZEmpnkZUZKiM8rlkDiEmxApwIc2JDDbIMk+Y2TMkJI8mInbQ==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) '@types/gtag.js': 0.0.12 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.1 + tslib: 2.6.2 transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -2029,19 +2064,19 @@ packages: - webpack-cli dev: false - /@docusaurus/plugin-google-tag-manager@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-y/9jcokUjreRHghWrhMe6hy2G768JaEdmqie6X5OmXM2Lr+L3H4W4tJiRacqkW+/K5BsrVudOzxAqtXTwfBGvA==} - engines: {node: '>=16.14'} + /@docusaurus/plugin-google-tag-manager@3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-lytgu2eyn+7p4WklJkpMGRhwC29ezj4IjPPmVJ8vGzcSl6JkR1sADTHLG5xWOMuci420xZl9dGEiLTQ8FjCRyA==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.1 + tslib: 2.6.2 transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -2060,24 +2095,24 @@ packages: - webpack-cli dev: false - /@docusaurus/plugin-sitemap@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-UftoalMEWAeKPf80tdt0Olfg82V0SyeDEVpf9epRanT9fkr1DaF5lTWhJIgjFdou5XboW7feUeGPOZ78DWQr0w==} - engines: {node: '>=16.14'} + /@docusaurus/plugin-sitemap@3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-cfcONdWku56Oi7Hdus2uvUw/RKRRlIGMViiHLjvQ21CEsEqnQ297MRoIgjU28kL7/CXD/+OiANSq3T1ezAiMhA==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/logger': 3.0.0-alpha.0 - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-common': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/logger': 3.0.0 + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-common': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) fs-extra: 11.1.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) sitemap: 7.1.1 - tslib: 2.6.1 + tslib: 2.6.2 transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -2096,26 +2131,26 @@ packages: - webpack-cli dev: false - /@docusaurus/preset-classic@3.0.0-alpha.0(@algolia/client-search@4.19.1)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-NH2Ufv0jSGiPwBD/+JhS3pbedsyUpAU33IzRouVFniQDwBr/n//yJNXTQBW7ZTUeCSebxr4cEABArAVg+RTmQA==} - engines: {node: '>=16.14'} + /@docusaurus/preset-classic@3.0.0(@algolia/client-search@4.20.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.10.0)(typescript@5.2.2): + resolution: {integrity: sha512-90aOKZGZdi0+GVQV+wt8xx4M4GiDrBRke8NO8nWwytMEXNrxrBxsQYFRD1YlISLJSCiHikKf3Z/MovMnQpnZyg==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-content-blog': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-content-docs': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-content-pages': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-debug': 3.0.0-alpha.0(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-google-analytics': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-google-gtag': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-google-tag-manager': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-sitemap': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/theme-classic': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/theme-common': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/theme-search-algolia': 3.0.0-alpha.0(@algolia/client-search@4.19.1)(@docusaurus/types@3.0.0-alpha.0)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-content-blog': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-content-docs': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-content-pages': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-debug': 3.0.0(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-google-analytics': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-google-gtag': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-google-tag-manager': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-sitemap': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/theme-classic': 3.0.0(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/theme-common': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/theme-search-algolia': 3.0.0(@algolia/client-search@4.20.0)(@docusaurus/types@3.0.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.10.0)(typescript@5.2.2) + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -2131,6 +2166,7 @@ packages: - esbuild - eslint - lightningcss + - search-insights - supports-color - typescript - uglify-js @@ -2144,168 +2180,45 @@ packages: peerDependencies: react: '*' dependencies: - '@types/react': 18.2.18 + '@types/react': 18.2.37 prop-types: 15.8.1 react: 18.2.0 - /@docusaurus/theme-classic@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-EKH1UAi/5I4gy3cpcfAnGBDfX3N5lfdg9NlXIMI5m1337n4QlbfF5f5NPnXwq7F5oWXniyeNAPQnhba/ELTNHA==} - engines: {node: '>=16.14'} + /@docusaurus/theme-classic@3.0.0(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-wWOHSrKMn7L4jTtXBsb5iEJ3xvTddBye5PjYBnWiCkTAlhle2yMdc4/qRXW35Ot+OV/VXu6YFG8XVUJEl99z0A==} + engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/mdx-loader': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/module-type-aliases': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/plugin-content-blog': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-content-docs': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-content-pages': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/theme-common': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/theme-translations': 3.0.0-alpha.0 - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-common': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@mdx-js/react': 2.3.0(react@18.2.0) + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/mdx-loader': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/module-type-aliases': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/plugin-content-blog': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-content-docs': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-content-pages': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/theme-common': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/theme-translations': 3.0.0 + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-common': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) + '@mdx-js/react': 3.0.0(@types/react@18.2.37)(react@18.2.0) clsx: 1.2.1 - copy-text-to-clipboard: 3.1.0 + copy-text-to-clipboard: 3.2.0 infima: 0.2.0-alpha.43 lodash: 4.17.21 nprogress: 0.2.0 - postcss: 8.4.27 - prism-react-renderer: 1.3.5(react@18.2.0) + postcss: 8.4.31 + prism-react-renderer: 2.2.0(react@18.2.0) prismjs: 1.29.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-router-dom: 5.3.4(react@18.2.0) - rtlcss: 4.1.0 - tslib: 2.6.1 + rtlcss: 4.1.1 + tslib: 2.6.2 utility-types: 3.10.0 transitivePeerDependencies: - - '@parcel/css' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/theme-common@3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-dEMSB0G+ZigAb9KqQ+yztz2BiXbAX3/vFlE5xpNbH8nSahSfIwF9QG5f+5DON99+0VnpF3fMmLLq6lQR5/LVMQ==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - dependencies: - '@docusaurus/mdx-loader': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/module-type-aliases': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/plugin-content-blog': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-content-docs': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/plugin-content-pages': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-common': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@types/history': 4.7.11 - '@types/react': 18.2.18 - '@types/react-router-config': 5.0.7 - clsx: 1.2.1 - parse-numeric-range: 1.3.0 - prism-react-renderer: 1.3.5(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.1 - use-sync-external-store: 1.2.0(react@18.2.0) - utility-types: 3.10.0 - transitivePeerDependencies: - - '@docusaurus/types' - - '@parcel/css' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/theme-mermaid@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-Y6rq0639aqgDRSifZCpzxrq26wnF2SzFvXr7x5AlvbznoZFXIi/O7mlPZb+LRFxw3xt2/ws3eZiDlOPmDhWbZA==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - dependencies: - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/module-type-aliases': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/theme-common': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - mermaid: 9.4.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.1 - transitivePeerDependencies: - - '@parcel/css' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/theme-search-algolia@3.0.0-alpha.0(@algolia/client-search@4.19.1)(@docusaurus/types@3.0.0-alpha.0)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6): - resolution: {integrity: sha512-tOtcer8YUA1c1JUsE5UuXYMn4/PvwMXo1/2NFhws3S2+K6mh+1axongRJ8frKf0xMWWTnswtFsLBhwhG8aTwMA==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - dependencies: - '@docsearch/react': 3.3.4(@algolia/client-search@4.19.1)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) - '@docusaurus/core': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/logger': 3.0.0-alpha.0 - '@docusaurus/plugin-content-docs': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/theme-common': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.6) - '@docusaurus/theme-translations': 3.0.0-alpha.0 - '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - '@docusaurus/utils-validation': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - algoliasearch: 4.17.0 - algoliasearch-helper: 3.13.0(algoliasearch@4.17.0) - clsx: 1.2.1 - eta: 2.2.0 - fs-extra: 11.1.1 - lodash: 4.17.21 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.1 - utility-types: 3.10.0 - transitivePeerDependencies: - - '@algolia/client-search' - - '@docusaurus/types' - '@parcel/css' - '@swc/core' - '@swc/css' @@ -2324,58 +2237,182 @@ packages: - webpack-cli dev: false - /@docusaurus/theme-translations@3.0.0-alpha.0: - resolution: {integrity: sha512-32s4dxdz3F8p/6WsYdiNlnV0W3glHyG1qDM3SngZLp7sihgmvAIFzLhrbTLYqZhR8DXqy6QdiD7utRN1oQrWUg==} - engines: {node: '>=16.14'} + /@docusaurus/theme-common@3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-PahRpCLRK5owCMEqcNtUeTMOkTUCzrJlKA+HLu7f+8osYOni617YurXvHASCsSTxurjXaLz/RqZMnASnqATxIA==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - fs-extra: 11.1.1 - tslib: 2.6.1 + '@docusaurus/mdx-loader': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/module-type-aliases': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/plugin-content-blog': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-content-docs': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/plugin-content-pages': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-common': 3.0.0(@docusaurus/types@3.0.0) + '@types/history': 4.7.11 + '@types/react': 18.2.37 + '@types/react-router-config': 5.0.10 + clsx: 1.2.1 + parse-numeric-range: 1.3.0 + prism-react-renderer: 2.2.0(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.6.2 + utility-types: 3.10.0 + transitivePeerDependencies: + - '@docusaurus/types' + - '@parcel/css' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli dev: false - /@docusaurus/types@3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-DdLoy6U6KzHxYYEgBN9AG5Xv2yrDXil4EhL+QUui5cGk/BrBDoADmLJ9c/6dQcqThVEqgmAl5tf19tG9P6atgw==} + /@docusaurus/theme-mermaid@3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2): + resolution: {integrity: sha512-e5uoGmow5kk5AeiyYFHYGsM5LFg4ClCIIQQcBrD9zs1E8yxTDNX524MylO6klqqCn3TmxJ34RogEg78QnthRng==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/module-type-aliases': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/theme-common': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) + mermaid: 10.6.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.6.2 + transitivePeerDependencies: + - '@parcel/css' + - '@swc/core' + - '@swc/css' + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false + + /@docusaurus/theme-search-algolia@3.0.0(@algolia/client-search@4.20.0)(@docusaurus/types@3.0.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.10.0)(typescript@5.2.2): + resolution: {integrity: sha512-PyMUNIS9yu0dx7XffB13ti4TG47pJq3G2KE/INvOFb6M0kWh+wwCnucPg4WAOysHOPh+SD9fjlXILoLQstgEIA==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@docsearch/react': 3.5.2(@algolia/client-search@4.20.0)(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.10.0) + '@docusaurus/core': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/logger': 3.0.0 + '@docusaurus/plugin-content-docs': 3.0.0(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/theme-common': 3.0.0(@docusaurus/types@3.0.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.2.2) + '@docusaurus/theme-translations': 3.0.0 + '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) + '@docusaurus/utils-validation': 3.0.0(@docusaurus/types@3.0.0) + algoliasearch: 4.20.0 + algoliasearch-helper: 3.15.0(algoliasearch@4.20.0) + clsx: 1.2.1 + eta: 2.2.0 + fs-extra: 11.1.1 + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.6.2 + utility-types: 3.10.0 + transitivePeerDependencies: + - '@algolia/client-search' + - '@docusaurus/types' + - '@parcel/css' + - '@swc/core' + - '@swc/css' + - '@types/react' + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - search-insights + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false + + /@docusaurus/theme-translations@3.0.0: + resolution: {integrity: sha512-p/H3+5LdnDtbMU+csYukA6601U1ld2v9knqxGEEV96qV27HsHfP63J9Ta2RBZUrNhQAgrwFzIc9GdDO8P1Baag==} + engines: {node: '>=18.0'} + dependencies: + fs-extra: 11.1.1 + tslib: 2.6.2 + dev: false + + /@docusaurus/types@3.0.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Qb+l/hmCOVemReuzvvcFdk84bUmUFyD0Zi81y651ie3VwMrXqC7C0E7yZLKMOsLj/vkqsxHbtkAuYMI89YzNzg==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.18 + '@types/react': 18.2.37 commander: 5.1.0 - joi: 17.9.2 + joi: 17.11.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-helmet-async: 1.3.0(react-dom@18.2.0)(react@18.2.0) utility-types: 3.10.0 - webpack: 5.82.1 - webpack-merge: 5.8.0 + webpack: 5.89.0 + webpack-merge: 5.10.0 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpack-cli - /@docusaurus/utils-common@3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0): - resolution: {integrity: sha512-Q50+OHy1HNR0L1PZSe+eOwqSDXeZdUHkHcfQcIEmoSH7pGB4Wr2TRPUyHgzCkkVhWbqzsgprWH/u6+JmNCV84Q==} - engines: {node: '>=16.14'} + /@docusaurus/utils-common@3.0.0(@docusaurus/types@3.0.0): + resolution: {integrity: sha512-7iJWAtt4AHf4PFEPlEPXko9LZD/dbYnhLe0q8e3GRK1EXZyRASah2lznpMwB3lLmVjq/FR6ZAKF+E0wlmL5j0g==} + engines: {node: '>=18.0'} peerDependencies: '@docusaurus/types': '*' peerDependenciesMeta: '@docusaurus/types': optional: true dependencies: - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) - tslib: 2.6.1 + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) + tslib: 2.6.2 dev: false - /@docusaurus/utils-validation@3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0): - resolution: {integrity: sha512-xqe2ekhMg3HQa/PwqZncP/KlI7wofYSrgjIwWZywLAb1ZhOwZngRBOUMCAVTgeJekq7+waVVb5wXqNSqt/hahw==} - engines: {node: '>=16.14'} + /@docusaurus/utils-validation@3.0.0(@docusaurus/types@3.0.0): + resolution: {integrity: sha512-MlIGUspB/HBW5CYgHvRhmkZbeMiUWKbyVoCQYvbGN8S19SSzVgzyy97KRpcjCOYYeEdkhmRCUwFBJBlLg3IoNQ==} + engines: {node: '>=18.0'} dependencies: - '@docusaurus/logger': 3.0.0-alpha.0 - '@docusaurus/utils': 3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0) - joi: 17.9.2 + '@docusaurus/logger': 3.0.0 + '@docusaurus/utils': 3.0.0(@docusaurus/types@3.0.0) + joi: 17.11.0 js-yaml: 4.1.0 - tslib: 2.6.1 + tslib: 2.6.2 transitivePeerDependencies: - '@docusaurus/types' - '@swc/core' @@ -2385,32 +2422,33 @@ packages: - webpack-cli dev: false - /@docusaurus/utils@3.0.0-alpha.0(@docusaurus/types@3.0.0-alpha.0): - resolution: {integrity: sha512-+dtf9zxLUkgQFf4qOgz1r812EMrVMDPdxlHkZ6Hr/QqDI0XlpFCTBmmngFDGpkvInji40gP7QORxqOrP03r4Bw==} - engines: {node: '>=16.14'} + /@docusaurus/utils@3.0.0(@docusaurus/types@3.0.0): + resolution: {integrity: sha512-JwGjh5mtjG9XIAESyPxObL6CZ6LO/yU4OSTpq7Q0x+jN25zi/AMbvLjpSyZzWy+qm5uQiFiIhqFaOxvy+82Ekg==} + engines: {node: '>=18.0'} peerDependencies: '@docusaurus/types': '*' peerDependenciesMeta: '@docusaurus/types': optional: true dependencies: - '@docusaurus/logger': 3.0.0-alpha.0 - '@docusaurus/types': 3.0.0-alpha.0(react-dom@18.2.0)(react@18.2.0) + '@docusaurus/logger': 3.0.0 + '@docusaurus/types': 3.0.0(react-dom@18.2.0)(react@18.2.0) '@svgr/webpack': 6.5.1 escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.82.1) + file-loader: 6.2.0(webpack@5.89.0) fs-extra: 11.1.1 github-slugger: 1.5.0 globby: 11.1.0 gray-matter: 4.0.3 + jiti: 1.21.0 js-yaml: 4.1.0 lodash: 4.17.21 micromatch: 4.0.5 resolve-pathname: 3.0.0 shelljs: 0.8.5 - tslib: 2.6.1 - url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.82.1) - webpack: 5.82.1 + tslib: 2.6.2 + url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.89.0) + webpack: 5.89.0 transitivePeerDependencies: - '@swc/core' - esbuild @@ -2419,20 +2457,6 @@ packages: - webpack-cli dev: false - /@emotion/is-prop-valid@0.8.8: - resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} - requiresBuild: true - dependencies: - '@emotion/memoize': 0.7.4 - dev: false - optional: true - - /@emotion/memoize@0.7.4: - resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} - requiresBuild: true - dev: false - optional: true - /@hapi/hoek@9.3.0: resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -2441,18 +2465,6 @@ packages: dependencies: '@hapi/hoek': 9.3.0 - /@headlessui/react@1.7.16(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-2MphIAZdSUacZBT6EXk8AJkj+EuvaaJbtCyHTJrPsz8inhzCl7qeNPI1uk1AUvCgWylVtdN8cVVmnhUDPxPy3g==} - engines: {node: '>=10'} - peerDependencies: - react: ^16 || ^17 || ^18 - react-dom: ^16 || ^17 || ^18 - dependencies: - client-only: 0.0.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@heroicons/react@2.0.18(react@18.2.0): resolution: {integrity: sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw==} peerDependencies: @@ -2461,22 +2473,22 @@ packages: react: 18.2.0 dev: false - /@jest/schemas@29.4.3: - resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@sinclair/typebox': 0.25.24 + '@sinclair/typebox': 0.27.8 dev: false - /@jest/types@29.5.0: - resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.4.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 20.4.8 - '@types/yargs': 17.0.24 + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.9.0 + '@types/yargs': 17.0.31 chalk: 4.1.2 dev: false @@ -2486,130 +2498,105 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.20 - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - /@jridgewell/source-map@0.3.3: - resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + '@jridgewell/trace-mapping': 0.3.20 /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 /@leichtgewicht/ip-codec@2.0.4: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} dev: false - /@mdx-js/mdx@2.3.0: - resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} + /@mdx-js/mdx@3.0.0: + resolution: {integrity: sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==} dependencies: - '@types/estree-jsx': 1.0.0 - '@types/mdx': 2.0.5 - estree-util-build-jsx: 2.2.2 - estree-util-is-identifier-name: 2.1.0 - estree-util-to-js: 1.2.0 + '@types/estree': 1.0.5 + '@types/estree-jsx': 1.0.3 + '@types/hast': 3.0.3 + '@types/mdx': 2.0.10 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-build-jsx: 3.0.1 + estree-util-is-identifier-name: 3.0.0 + estree-util-to-js: 2.0.0 estree-walker: 3.0.3 - hast-util-to-estree: 2.3.3 - markdown-extensions: 1.1.1 + hast-util-to-estree: 3.1.0 + hast-util-to-jsx-runtime: 2.2.0 + markdown-extensions: 2.0.0 periscopic: 3.1.0 - remark-mdx: 2.3.0 - remark-parse: 10.0.2 - remark-rehype: 10.1.0 - unified: 10.1.2 - unist-util-position-from-estree: 1.1.2 - unist-util-stringify-position: 3.0.3 - unist-util-visit: 4.1.2 - vfile: 5.3.7 + remark-mdx: 3.0.0 + remark-parse: 11.0.0 + remark-rehype: 11.0.0 + source-map: 0.7.4 + unified: 11.0.4 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 transitivePeerDependencies: - supports-color dev: false - /@mdx-js/react@2.3.0(react@18.2.0): - resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} + /@mdx-js/react@3.0.0(@types/react@18.2.37)(react@18.2.0): + resolution: {integrity: sha512-nDctevR9KyYFyV+m+/+S4cpzCWHqj+iHDHq3QrsWezcC+B17uZdIWgCguESUkwFhM3n/56KxWVE3V6EokrmONQ==} peerDependencies: + '@types/react': '>=16' react: '>=16' dependencies: - '@types/mdx': 2.0.5 - '@types/react': 18.2.18 + '@types/mdx': 2.0.10 + '@types/react': 18.2.37 react: 18.2.0 dev: false - /@meshtastic/meshtasticjs@2.2.0-0: - resolution: {integrity: sha512-8CIoTVza6I5w39FNI2vz9DXUHYDvMByrPogj7Mxfe6ia9VtRWcz6rw/3SFs8AhokdOBZhI4eIyqaN5sFhpexGA==} + /@meshtastic/meshtasticjs@2.2.13-1: + resolution: {integrity: sha512-KMXUFwOyChhdcn994tma/HD4u75P3VjK2JBdc03CznbbAXABYS2OSY0o60AttzUzcdjzwwt6U1HT3pjBC9nKEQ==} dependencies: - '@buf/meshtastic_protobufs.bufbuild_es': 1.3.0-20230807174505-db3cb0c7cf53.1(@bufbuild/protobuf@1.3.0) - '@bufbuild/protobuf': 1.3.0 + '@buf/meshtastic_protobufs.bufbuild_es': 1.4.2-20231115125959-252a144b0286.1(@bufbuild/protobuf@1.4.2) + '@bufbuild/protobuf': 1.4.2 + biome: 0.3.3 crc: 4.3.2 sub-events: 1.9.0 - tslib: 2.6.1 - tslog: 4.9.0 + tslib: 2.6.2 + tslog: 4.9.2 transitivePeerDependencies: - buffer dev: false - /@motionone/animation@10.15.1: - resolution: {integrity: sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ==} + /@microlink/react-json-view@1.23.0(@types/react@18.2.37)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HYJ1nsfO4/qn8afnAMhuk7+5a1vcjEaS8Gm5Vpr1SqdHDY0yLBJGpA+9DvKyxyVKaUkXzKXt3Mif9RcmFSdtYg==} + peerDependencies: + react: '>= 15' + react-dom: '>= 15' dependencies: - '@motionone/easing': 10.15.1 - '@motionone/types': 10.15.1 - '@motionone/utils': 10.15.1 - tslib: 2.5.0 - dev: false - - /@motionone/dom@10.12.0: - resolution: {integrity: sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==} - dependencies: - '@motionone/animation': 10.15.1 - '@motionone/generators': 10.15.1 - '@motionone/types': 10.15.1 - '@motionone/utils': 10.15.1 - hey-listen: 1.0.8 - tslib: 2.5.0 - dev: false - - /@motionone/easing@10.15.1: - resolution: {integrity: sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==} - dependencies: - '@motionone/utils': 10.15.1 - tslib: 2.5.0 - dev: false - - /@motionone/generators@10.15.1: - resolution: {integrity: sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ==} - dependencies: - '@motionone/types': 10.15.1 - '@motionone/utils': 10.15.1 - tslib: 2.5.0 - dev: false - - /@motionone/types@10.15.1: - resolution: {integrity: sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA==} - dev: false - - /@motionone/utils@10.15.1: - resolution: {integrity: sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw==} - dependencies: - '@motionone/types': 10.15.1 - hey-listen: 1.0.8 - tslib: 2.5.0 + flux: 4.0.4(react@18.2.0) + react: 18.2.0 + react-base16-styling: 0.6.0 + react-dom: 18.2.0(react@18.2.0) + react-lifecycles-compat: 3.0.4 + react-textarea-autosize: 8.3.4(@types/react@18.2.37)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - encoding dev: false /@nodelib/fs.scandir@2.1.5: @@ -2651,58 +2638,10 @@ packages: config-chain: 1.1.13 dev: false - /@polka/url@1.0.0-next.21: - resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + /@polka/url@1.0.0-next.23: + resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==} dev: false - /@rometools/cli-darwin-arm64@12.1.3: - resolution: {integrity: sha512-AmFTUDYjBuEGQp/Wwps+2cqUr+qhR7gyXAUnkL5psCuNCz3807TrUq/ecOoct5MIavGJTH6R4aaSL6+f+VlBEg==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rometools/cli-darwin-x64@12.1.3: - resolution: {integrity: sha512-k8MbWna8q4LRlb005N2X+JS1UQ+s3ZLBBvwk4fP8TBxlAJXUz17jLLu/Fi+7DTTEmMhM84TWj4FDKW+rNar28g==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@rometools/cli-linux-arm64@12.1.3: - resolution: {integrity: sha512-X/uLhJ2/FNA3nu5TiyeNPqiD3OZoFfNfRvw6a3ut0jEREPvEn72NI7WPijH/gxSz55znfQ7UQ6iM4DZumUknJg==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rometools/cli-linux-x64@12.1.3: - resolution: {integrity: sha512-csP17q1eWiUXx9z6Jr/JJPibkplyKIwiWPYNzvPCGE8pHlKhwZj3YHRuu7Dm/4EOqx0XFIuqqWZUYm9bkIC8xg==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@rometools/cli-win32-arm64@12.1.3: - resolution: {integrity: sha512-RymHWeod57EBOJY4P636CgUwYA6BQdkQjh56XKk4pLEHO6X1bFyMet2XL7KlHw5qOTalzuzf5jJqUs+vf3jdXQ==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@rometools/cli-win32-x64@12.1.3: - resolution: {integrity: sha512-yHSKYidqJMV9nADqg78GYA+cZ0hS1twANAjiFibQdXj9aGzD+s/IzIFEIi/U/OBLvWYg/SCw0QVozi2vTlKFDQ==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@sideway/address@4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: @@ -2714,8 +2653,13 @@ packages: /@sideway/pinpoint@2.0.0: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - /@sinclair/typebox@0.25.24: - resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: false + + /@sindresorhus/is@3.1.2: + resolution: {integrity: sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==} + engines: {node: '>=10'} dev: false /@sindresorhus/is@5.6.0: @@ -2723,6 +2667,14 @@ packages: engines: {node: '>=14.16'} dev: false + /@slorber/remark-comment@1.0.0: + resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + dev: false + /@slorber/static-site-generator-webpack-plugin@4.0.7: resolution: {integrity: sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==} engines: {node: '>=14'} @@ -2732,101 +2684,101 @@ packages: webpack-sources: 3.2.3 dev: false - /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.21.8): + /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.23.3): resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.23.3 dev: false - /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.21.8): + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.23.3): resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.23.3 dev: false - /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.21.8): + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.23.3): resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.23.3 dev: false - /@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.21.8): + /@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.23.3): resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.23.3 dev: false - /@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.21.8): + /@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.23.3): resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.23.3 dev: false - /@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.21.8): + /@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.23.3): resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.23.3 dev: false - /@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.21.8): + /@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.23.3): resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.23.3 dev: false - /@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.21.8): + /@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.23.3): resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.23.3 dev: false - /@svgr/babel-preset@6.5.1(@babel/core@7.21.8): + /@svgr/babel-preset@6.5.1(@babel/core@7.23.3): resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} engines: {node: '>=10'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.21.8 - '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.21.8) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.21.8) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.21.8) - '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.21.8) - '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.21.8) - '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.21.8) - '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.21.8) - '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.21.8) + '@babel/core': 7.23.3 + '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.23.3) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.23.3) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.23.3) + '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.23.3) + '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.23.3) + '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.23.3) + '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.23.3) + '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.23.3) dev: false /@svgr/core@6.5.1: resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.21.8 - '@svgr/babel-preset': 6.5.1(@babel/core@7.21.8) + '@babel/core': 7.23.3 + '@svgr/babel-preset': 6.5.1(@babel/core@7.23.3) '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) camelcase: 6.3.0 cosmiconfig: 7.1.0 @@ -2838,7 +2790,7 @@ packages: resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} engines: {node: '>=10'} dependencies: - '@babel/types': 7.21.5 + '@babel/types': 7.23.3 entities: 4.5.0 dev: false @@ -2848,8 +2800,8 @@ packages: peerDependencies: '@svgr/core': ^6.0.0 dependencies: - '@babel/core': 7.21.8 - '@svgr/babel-preset': 6.5.1(@babel/core@7.21.8) + '@babel/core': 7.23.3 + '@svgr/babel-preset': 6.5.1(@babel/core@7.23.3) '@svgr/core': 6.5.1 '@svgr/hast-util-to-babel-ast': 6.5.1 svg-parser: 2.0.4 @@ -2873,11 +2825,11 @@ packages: resolution: {integrity: sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.21.8 - '@babel/plugin-transform-react-constant-elements': 7.21.3(@babel/core@7.21.8) - '@babel/preset-env': 7.21.5(@babel/core@7.21.8) - '@babel/preset-react': 7.18.6(@babel/core@7.21.8) - '@babel/preset-typescript': 7.21.5(@babel/core@7.21.8) + '@babel/core': 7.23.3 + '@babel/plugin-transform-react-constant-elements': 7.23.3(@babel/core@7.23.3) + '@babel/preset-env': 7.23.3(@babel/core@7.23.3) + '@babel/preset-react': 7.23.3(@babel/core@7.23.3) + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.3) '@svgr/core': 6.5.1 '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) '@svgr/plugin-svgo': 6.5.1(@svgr/core@6.5.1) @@ -2892,8 +2844,8 @@ packages: defer-to-connect: 2.0.1 dev: false - /@tailwindcss/typography@0.5.9(tailwindcss@3.3.3): - resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==} + /@tailwindcss/typography@0.5.10(tailwindcss@3.3.5): + resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: @@ -2901,7 +2853,7 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.3.3 + tailwindcss: 3.3.5 dev: true /@trysound/sax@0.2.0: @@ -2909,95 +2861,109 @@ packages: engines: {node: '>=10.13.0'} dev: false - /@tsconfig/docusaurus@2.0.0: - resolution: {integrity: sha512-X5wptT7pXA/46/IRFTW76oR5GNjoy9qjNM/1JGhFV4QAsmLh3YUpJJA+Vpx7Ds6eEBxSxz1QrgoNEBy6rLVs8w==} + /@tsconfig/docusaurus@2.0.2: + resolution: {integrity: sha512-12HWfYmgUl4M2o76/TFufGtI68wl2k/b8qPrIrG7ci9YJLrpAtadpy897Bz5v29Mlkr7a1Hq4KHdQTKtU+2rhQ==} dev: true /@types/acorn@4.0.6: resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 dev: false - /@types/body-parser@1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: - '@types/connect': 3.4.35 - '@types/node': 20.4.8 + '@types/connect': 3.4.38 + '@types/node': 20.9.0 dev: false - /@types/bonjour@3.5.10: - resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} + /@types/bonjour@3.5.13: + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 20.4.8 + '@types/node': 20.9.0 dev: false - /@types/connect-history-api-fallback@1.5.0: - resolution: {integrity: sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==} + /@types/connect-history-api-fallback@1.5.3: + resolution: {integrity: sha512-6mfQ6iNvhSKCZJoY6sIG3m0pKkdUcweVNOLuBBKvoWGzl2yRxOJcYOTRyLKt3nxXvBLJWa6QkW//tgbIwJehmA==} dependencies: - '@types/express-serve-static-core': 4.17.35 - '@types/node': 20.4.8 + '@types/express-serve-static-core': 4.17.41 + '@types/node': 20.9.0 dev: false - /@types/connect@3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.4.8 + '@types/node': 20.9.0 dev: false - /@types/debug@4.1.8: - resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} - dependencies: - '@types/ms': 0.7.31 + /@types/d3-scale-chromatic@3.0.2: + resolution: {integrity: sha512-kpKNZMDT3OAX6b5ct5nS/mv6LULagnUy4DmS6yyNjclje1qVe7vbjPwY3q1TGz6+Wr2IUkgFatCzqYUl54fHag==} dev: false - /@types/eslint-scope@3.7.4: - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + /@types/d3-scale@4.0.8: + resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==} dependencies: - '@types/eslint': 8.37.0 - '@types/estree': 1.0.1 - - /@types/eslint@8.37.0: - resolution: {integrity: sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==} - dependencies: - '@types/estree': 1.0.1 - '@types/json-schema': 7.0.11 - - /@types/estree-jsx@1.0.0: - resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} - dependencies: - '@types/estree': 1.0.1 + '@types/d3-time': 3.0.3 dev: false - /@types/estree@1.0.1: - resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - - /@types/express-serve-static-core@4.17.35: - resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} - dependencies: - '@types/node': 20.4.8 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - '@types/send': 0.17.1 + /@types/d3-time@3.0.3: + resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} dev: false - /@types/express@4.17.17: - resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.35 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.1 + '@types/ms': 0.7.34 + dev: false + + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + dependencies: + '@types/eslint': 8.44.7 + '@types/estree': 1.0.5 + + /@types/eslint@8.44.7: + resolution: {integrity: sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + + /@types/estree-jsx@1.0.3: + resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} + dependencies: + '@types/estree': 1.0.5 + dev: false + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + /@types/express-serve-static-core@4.17.41: + resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} + dependencies: + '@types/node': 20.9.0 + '@types/qs': 6.9.10 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: false + + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.17.41 + '@types/qs': 6.9.10 + '@types/serve-static': 1.15.5 dev: false /@types/gtag.js@0.0.12: resolution: {integrity: sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==} dev: false - /@types/hast@2.3.4: - resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} + /@types/hast@3.0.3: + resolution: {integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 3.0.2 dev: false /@types/history@4.7.11: @@ -3007,173 +2973,200 @@ packages: resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} dev: false - /@types/http-cache-semantics@4.0.1: - resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} dev: false - /@types/http-proxy@1.17.11: - resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==} + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: false + + /@types/http-proxy@1.17.14: + resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - '@types/node': 20.4.8 + '@types/node': 20.9.0 dev: false - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: false - /@types/istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} dependencies: - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.6 dev: false - /@types/istanbul-reports@3.0.1: - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} dependencies: - '@types/istanbul-lib-report': 3.0.0 + '@types/istanbul-lib-report': 3.0.3 dev: false - /@types/json-schema@7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - /@types/mdast@3.0.11: - resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==} + /@types/mdast@3.0.15: + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.10 dev: false - /@types/mdx@2.0.5: - resolution: {integrity: sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==} + /@types/mdast@4.0.3: + resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + dependencies: + '@types/unist': 3.0.2 dev: false - /@types/mime@1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} + /@types/mdx@2.0.10: + resolution: {integrity: sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==} dev: false - /@types/mime@3.0.1: - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} dev: false - /@types/ms@0.7.31: - resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + /@types/mime@3.0.4: + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + dev: false + + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: false + + /@types/node-forge@1.3.9: + resolution: {integrity: sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ==} + dependencies: + '@types/node': 20.9.0 dev: false /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: false - /@types/node@20.4.8: - resolution: {integrity: sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==} - - /@types/parse-json@4.0.0: - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: false - - /@types/parse5@6.0.3: - resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} - dev: false - - /@types/prop-types@15.7.5: - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - - /@types/qs@6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: false - - /@types/range-parser@1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: false - - /@types/react-dom@18.2.7: - resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} + /@types/node@20.9.0: + resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==} dependencies: - '@types/react': 18.2.18 + undici-types: 5.26.5 + + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: false + + /@types/prismjs@1.26.3: + resolution: {integrity: sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw==} + dev: false + + /@types/prop-types@15.7.10: + resolution: {integrity: sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==} + + /@types/qs@6.9.10: + resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} + dev: false + + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: false + + /@types/react-dom@18.2.15: + resolution: {integrity: sha512-HWMdW+7r7MR5+PZqJF6YFNSCtjz1T0dsvo/f1BV6HkV+6erD/nA7wd9NM00KVG83zf2nJ7uATPO9ttdIPvi3gg==} + dependencies: + '@types/react': 18.2.37 dev: true - /@types/react-router-config@5.0.7: - resolution: {integrity: sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==} + /@types/react-router-config@5.0.10: + resolution: {integrity: sha512-Wn6c/tXdEgi9adCMtDwx8Q2vGty6TsPTc/wCQQ9kAlye8UqFxj0vGFWWuhywNfkwqth+SOgJxQTLTZukrqDQmQ==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.18 + '@types/react': 18.2.37 '@types/react-router': 5.1.20 /@types/react-router-dom@5.3.3: resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.18 + '@types/react': 18.2.37 '@types/react-router': 5.1.20 /@types/react-router@5.1.20: resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.2.18 + '@types/react': 18.2.37 - /@types/react@18.2.18: - resolution: {integrity: sha512-da4NTSeBv/P34xoZPhtcLkmZuJ+oYaCxHmyHzwaDQo9RQPBeXV+06gEk2FpqEcsX9XrnNLvRpVh6bdavDSjtiQ==} + /@types/react@18.2.37: + resolution: {integrity: sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw==} dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 + '@types/prop-types': 15.7.10 + '@types/scheduler': 0.16.6 csstype: 3.1.2 /@types/retry@0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} dev: false - /@types/sax@1.2.4: - resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==} + /@types/sax@1.2.7: + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} dependencies: - '@types/node': 20.4.8 + '@types/node': 20.9.0 dev: false - /@types/scheduler@0.16.3: - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + /@types/scheduler@0.16.6: + resolution: {integrity: sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==} - /@types/send@0.17.1: - resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: - '@types/mime': 1.3.2 - '@types/node': 20.4.8 + '@types/mime': 1.3.5 + '@types/node': 20.9.0 dev: false - /@types/serve-index@1.9.1: - resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} + /@types/serve-index@1.9.4: + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} dependencies: - '@types/express': 4.17.17 + '@types/express': 4.17.21 dev: false - /@types/serve-static@1.15.1: - resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} + /@types/serve-static@1.15.5: + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} dependencies: - '@types/mime': 3.0.1 - '@types/node': 20.4.8 + '@types/http-errors': 2.0.4 + '@types/mime': 3.0.4 + '@types/node': 20.9.0 dev: false - /@types/sockjs@0.3.33: - resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} + /@types/sockjs@0.3.36: + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 20.4.8 + '@types/node': 20.9.0 dev: false - /@types/unist@2.0.6: - resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} dev: false - /@types/ws@8.5.4: - resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} + /@types/unist@3.0.2: + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + dev: false + + /@types/ws@8.5.9: + resolution: {integrity: sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==} dependencies: - '@types/node': 20.4.8 + '@types/node': 20.9.0 dev: false - /@types/yargs-parser@21.0.0: - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: false - /@types/yargs@17.0.24: - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + /@types/yargs@17.0.31: + resolution: {integrity: sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==} dependencies: - '@types/yargs-parser': 21.0.0 + '@types/yargs-parser': 21.0.3 + dev: false + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: false /@webassemblyjs/ast@1.11.6: @@ -3281,28 +3274,28 @@ packages: negotiator: 0.6.3 dev: false - /acorn-import-assertions@1.9.0(acorn@8.8.2): + /acorn-import-assertions@1.9.0(acorn@8.11.2): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.8.2 + acorn: 8.11.2 - /acorn-jsx@5.3.2(acorn@8.8.2): + /acorn-jsx@5.3.2(acorn@8.11.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.2 + acorn: 8.11.2 dev: false - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + /acorn-walk@8.3.0: + resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} engines: {node: '>=0.4.0'} dev: false - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} hasBin: true @@ -3363,32 +3356,32 @@ packages: uri-js: 4.4.1 dev: false - /algoliasearch-helper@3.13.0(algoliasearch@4.17.0): - resolution: {integrity: sha512-kV3c1jMQCvkARtGsSDvAwuht4PAMSsQILqPiH4WFiARoa3jXJ/r1TQoBWAjWyWF48rsNYCv7kzxgB4LTxrvvuw==} + /algoliasearch-helper@3.15.0(algoliasearch@4.20.0): + resolution: {integrity: sha512-DGUnK3TGtDQsaUE4ayF/LjSN0DGsuYThB8WBgnnDY0Wq04K6lNVruO3LfqJOgSfDiezp+Iyt8Tj4YKHi+/ivSA==} peerDependencies: algoliasearch: '>= 3.1 < 6' dependencies: '@algolia/events': 4.0.1 - algoliasearch: 4.17.0 + algoliasearch: 4.20.0 dev: false - /algoliasearch@4.17.0: - resolution: {integrity: sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==} + /algoliasearch@4.20.0: + resolution: {integrity: sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==} dependencies: - '@algolia/cache-browser-local-storage': 4.17.0 - '@algolia/cache-common': 4.17.0 - '@algolia/cache-in-memory': 4.17.0 - '@algolia/client-account': 4.17.0 - '@algolia/client-analytics': 4.17.0 - '@algolia/client-common': 4.17.0 - '@algolia/client-personalization': 4.17.0 - '@algolia/client-search': 4.17.0 - '@algolia/logger-common': 4.17.0 - '@algolia/logger-console': 4.17.0 - '@algolia/requester-browser-xhr': 4.17.0 - '@algolia/requester-common': 4.17.0 - '@algolia/requester-node-http': 4.17.0 - '@algolia/transporter': 4.17.0 + '@algolia/cache-browser-local-storage': 4.20.0 + '@algolia/cache-common': 4.20.0 + '@algolia/cache-in-memory': 4.20.0 + '@algolia/client-account': 4.20.0 + '@algolia/client-analytics': 4.20.0 + '@algolia/client-common': 4.20.0 + '@algolia/client-personalization': 4.20.0 + '@algolia/client-search': 4.20.0 + '@algolia/logger-common': 4.20.0 + '@algolia/logger-console': 4.20.0 + '@algolia/requester-browser-xhr': 4.20.0 + '@algolia/requester-common': 4.20.0 + '@algolia/requester-node-http': 4.20.0 + '@algolia/transporter': 4.20.0 dev: false /ansi-align@3.0.1: @@ -3397,12 +3390,20 @@ packages: string-width: 4.2.3 dev: false + /ansi-escapes@1.4.0: + resolution: {integrity: sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==} + engines: {node: '>=0.10.0'} + /ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} hasBin: true dev: false + /ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3413,6 +3414,10 @@ packages: engines: {node: '>=12'} dev: false + /ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -3472,6 +3477,15 @@ packages: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: false + /asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + dependencies: + safer-buffer: 2.1.2 + + /assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + /astring@1.8.6: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true @@ -3479,49 +3493,55 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: false - /autoprefixer@10.4.14(postcss@8.4.27): - resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + /autoprefixer@10.4.16(postcss@8.4.31): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001472 - fraction.js: 4.2.0 + browserslist: 4.22.1 + caniuse-lite: 1.0.30001562 + fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /axios@0.27.2: - resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + /aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + /aws4@1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + + /axios@1.6.2: + resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} dependencies: - follow-redirects: 1.15.2 + follow-redirects: 1.15.3 form-data: 4.0.0 + proxy-from-env: 1.1.0 transitivePeerDependencies: - debug dev: false - /babel-loader@9.1.3(@babel/core@7.21.8)(webpack@5.82.1): + /babel-loader@9.1.3(@babel/core@7.23.3)(webpack@5.89.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} peerDependencies: '@babel/core': ^7.12.0 webpack: '>=5' dependencies: - '@babel/core': 7.21.8 + '@babel/core': 7.23.3 find-cache-dir: 4.0.0 - schema-utils: 4.0.1 - webpack: 5.82.1 + schema-utils: 4.2.0 + webpack: 5.89.0 dev: false /babel-plugin-dynamic-import-node@2.3.3: @@ -3530,38 +3550,38 @@ packages: object.assign: 4.1.4 dev: false - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.8): - resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.3): + resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.21.7 - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) - semver: 6.3.0 + '@babel/compat-data': 7.23.3 + '@babel/core': 7.23.3 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.8): - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.3): + resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) - core-js-compat: 3.30.2 + '@babel/core': 7.23.3 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) + core-js-compat: 3.33.2 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.8): - resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.3): + resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.21.8 - '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.8) + '@babel/core': 7.23.3 + '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.3) transitivePeerDependencies: - supports-color dev: false @@ -3585,6 +3605,11 @@ packages: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: false + /bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + dependencies: + tweetnacl: 0.14.5 + /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: false @@ -3593,6 +3618,23 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + /biome@0.3.3: + resolution: {integrity: sha512-4LXjrQYbn9iTXu9Y4SKT7ABzTV0WnLDHCVSd2fPUOKsy1gQ+E4xPFmlY1zcWexoi0j7fGHItlL6OWA2CZ/yYAQ==} + hasBin: true + dependencies: + bluebird: 3.7.2 + chalk: 1.1.3 + commander: 2.20.3 + editor: 1.0.0 + fs-promise: 0.5.0 + inquirer-promise: 0.0.3 + request-promise: 3.0.0 + untildify: 3.0.3 + user-home: 2.0.0 + + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -3666,15 +3708,15 @@ packages: dependencies: fill-range: 7.0.1 - /browserslist@4.21.5: - resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001472 - electron-to-chromium: 1.4.341 - node-releases: 2.0.10 - update-browserslist-db: 1.0.10(browserslist@4.21.5) + caniuse-lite: 1.0.30001562 + electron-to-chromium: 1.4.585 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -3694,24 +3736,25 @@ packages: engines: {node: '>=14.16'} dev: false - /cacheable-request@10.2.13: - resolution: {integrity: sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA==} + /cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} engines: {node: '>=14.16'} dependencies: - '@types/http-cache-semantics': 4.0.1 + '@types/http-cache-semantics': 4.0.4 get-stream: 6.0.1 http-cache-semantics: 4.1.1 - keyv: 4.5.3 + keyv: 4.5.4 mimic-response: 4.0.0 normalize-url: 8.0.0 responselike: 3.0.0 dev: false - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 dev: false /callsites@3.1.0: @@ -3723,7 +3766,7 @@ packages: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /camelcase-css@2.0.1: @@ -3743,23 +3786,32 @@ packages: /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001487 + browserslist: 4.22.1 + caniuse-lite: 1.0.30001562 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: false - /caniuse-lite@1.0.30001472: - resolution: {integrity: sha512-xWC/0+hHHQgj3/vrKYY0AAzeIUgr7L9wlELIcAvZdDUHlhL/kNxMdnQLOSOQfP8R51ZzPhmHdyMkI0MMpmxCfg==} + /caniuse-lite@1.0.30001562: + resolution: {integrity: sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==} - /caniuse-lite@1.0.30001487: - resolution: {integrity: sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA==} - dev: false + /caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false + /chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -3782,6 +3834,11 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: false + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: false + /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} dev: false @@ -3834,21 +3891,17 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} - /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} dev: false - /classnames@2.3.2: - resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} - dev: false - /clean-css@5.3.2: resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} engines: {node: '>= 10.0'} @@ -3866,6 +3919,12 @@ packages: engines: {node: '>=10'} dev: false + /cli-cursor@1.0.2: + resolution: {integrity: sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==} + engines: {node: '>=0.10.0'} + dependencies: + restore-cursor: 1.0.1 + /cli-table3@0.6.3: resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} engines: {node: 10.* || >= 12.*} @@ -3875,6 +3934,9 @@ packages: '@colors/colors': 1.5.0 dev: false + /cli-width@1.1.1: + resolution: {integrity: sha512-eMU2akIeEIkCxGXUNmDnJq1KzOIiPnJ+rKqRe6hcxE3vIOPvpMrBYOn/Bl7zNlYJj/zQxXquAnozHUCf9Whnsg==} + /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false @@ -3892,6 +3954,19 @@ packages: engines: {node: '>=6'} dev: false + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + + /code-point-at@1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + + /collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + dev: false + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -3921,8 +3996,8 @@ packages: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: false - /combine-promises@1.1.0: - resolution: {integrity: sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==} + /combine-promises@1.2.0: + resolution: {integrity: sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==} engines: {node: '>=10'} dev: false @@ -3931,7 +4006,6 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 - dev: false /comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -4036,8 +4110,8 @@ packages: engines: {node: '>= 0.6'} dev: false - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: false /cookie-signature@1.0.6: @@ -4049,42 +4123,50 @@ packages: engines: {node: '>= 0.6'} dev: false - /copy-text-to-clipboard@3.1.0: - resolution: {integrity: sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==} + /copy-text-to-clipboard@3.2.0: + resolution: {integrity: sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==} engines: {node: '>=12'} dev: false - /copy-webpack-plugin@11.0.0(webpack@5.82.1): + /copy-webpack-plugin@11.0.0(webpack@5.89.0): resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} engines: {node: '>= 14.15.0'} peerDependencies: webpack: ^5.1.0 dependencies: - fast-glob: 3.3.1 + fast-glob: 3.3.2 glob-parent: 6.0.2 - globby: 13.1.4 + globby: 13.2.2 normalize-path: 3.0.0 - schema-utils: 4.0.1 + schema-utils: 4.2.0 serialize-javascript: 6.0.1 - webpack: 5.82.1 + webpack: 5.89.0 dev: false - /core-js-compat@3.30.2: - resolution: {integrity: sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==} + /core-js-compat@3.33.2: + resolution: {integrity: sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==} dependencies: - browserslist: 4.21.5 + browserslist: 4.22.1 dev: false - /core-js-pure@3.30.2: - resolution: {integrity: sha512-p/npFUJXXBkCCTIlEGBdghofn00jWG6ZOtdoIXSJmAu2QBvN0IqpZXWweOytcwE6cfx8ZvVUy1vw8zxhe4Y2vg==} + /core-js-pure@3.33.2: + resolution: {integrity: sha512-a8zeCdyVk7uF2elKIGz67AjcXOxjRbwOLz8SbklEso1V+2DoW4OkAMZN9S9GBgvZIaqQi/OemFX4OiSoQEmg1Q==} requiresBuild: true dev: false - /core-js@3.30.2: - resolution: {integrity: sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==} + /core-js@2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + requiresBuild: true + + /core-js@3.33.2: + resolution: {integrity: sha512-XeBzWI6QL3nJQiHmdzbAOiMYqjrb7hwU7A39Qhvd/POSa/t9E1AeZyEZx3fNvp/vtM8zXwhoL0FsiS0hD0pruQ==} requiresBuild: true dev: false + /core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: false @@ -4105,7 +4187,7 @@ packages: resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} engines: {node: '>=8'} dependencies: - '@types/parse-json': 4.0.0 + '@types/parse-json': 4.0.2 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 @@ -4116,21 +4198,27 @@ packages: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} dependencies: - '@types/parse-json': 4.0.0 + '@types/parse-json': 4.0.2 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 dev: false - /cosmiconfig@8.1.3: - resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} + /cosmiconfig@8.3.6(typescript@5.2.2): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 + typescript: 5.2.2 dev: false /crc@4.3.2: @@ -4143,10 +4231,10 @@ packages: optional: true dev: false - /cross-fetch@3.1.6: - resolution: {integrity: sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==} + /cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: - node-fetch: 2.6.11 + node-fetch: 2.7.0 transitivePeerDependencies: - encoding dev: false @@ -4167,33 +4255,33 @@ packages: type-fest: 1.4.0 dev: false - /css-declaration-sorter@6.4.0(postcss@8.4.27): - resolution: {integrity: sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==} + /css-declaration-sorter@6.4.1(postcss@8.4.31): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} engines: {node: ^10 || ^12 || >=14} peerDependencies: postcss: ^8.0.9 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 dev: false - /css-loader@6.7.3(webpack@5.82.1): - resolution: {integrity: sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==} + /css-loader@6.8.1(webpack@5.89.0): + resolution: {integrity: sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.27) - postcss: 8.4.27 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.27) - postcss-modules-local-by-default: 4.0.0(postcss@8.4.27) - postcss-modules-scope: 3.0.0(postcss@8.4.27) - postcss-modules-values: 4.0.0(postcss@8.4.27) + icss-utils: 5.1.0(postcss@8.4.31) + postcss: 8.4.31 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.31) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.31) + postcss-modules-scope: 3.0.0(postcss@8.4.31) + postcss-modules-values: 4.0.0(postcss@8.4.31) postcss-value-parser: 4.2.0 - semver: 7.5.1 - webpack: 5.82.1 + semver: 7.5.4 + webpack: 5.89.0 dev: false - /css-minimizer-webpack-plugin@4.2.2(clean-css@5.3.2)(webpack@5.82.1): + /css-minimizer-webpack-plugin@4.2.2(clean-css@5.3.2)(webpack@5.89.0): resolution: {integrity: sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -4219,13 +4307,13 @@ packages: optional: true dependencies: clean-css: 5.3.2 - cssnano: 5.1.15(postcss@8.4.27) - jest-worker: 29.5.0 - postcss: 8.4.27 - schema-utils: 4.0.1 + cssnano: 5.1.15(postcss@8.4.31) + jest-worker: 29.7.0 + postcss: 8.4.31 + schema-utils: 4.2.0 serialize-javascript: 6.0.1 source-map: 0.6.1 - webpack: 5.82.1 + webpack: 5.89.0 dev: false /css-select@4.3.0: @@ -4266,77 +4354,77 @@ packages: engines: {node: '>=4'} hasBin: true - /cssnano-preset-advanced@5.3.10(postcss@8.4.27): + /cssnano-preset-advanced@5.3.10(postcss@8.4.31): resolution: {integrity: sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - autoprefixer: 10.4.14(postcss@8.4.27) - cssnano-preset-default: 5.2.14(postcss@8.4.27) - postcss: 8.4.27 - postcss-discard-unused: 5.1.0(postcss@8.4.27) - postcss-merge-idents: 5.1.1(postcss@8.4.27) - postcss-reduce-idents: 5.2.0(postcss@8.4.27) - postcss-zindex: 5.1.0(postcss@8.4.27) + autoprefixer: 10.4.16(postcss@8.4.31) + cssnano-preset-default: 5.2.14(postcss@8.4.31) + postcss: 8.4.31 + postcss-discard-unused: 5.1.0(postcss@8.4.31) + postcss-merge-idents: 5.1.1(postcss@8.4.31) + postcss-reduce-idents: 5.2.0(postcss@8.4.31) + postcss-zindex: 5.1.0(postcss@8.4.31) dev: false - /cssnano-preset-default@5.2.14(postcss@8.4.27): + /cssnano-preset-default@5.2.14(postcss@8.4.31): resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - css-declaration-sorter: 6.4.0(postcss@8.4.27) - cssnano-utils: 3.1.0(postcss@8.4.27) - postcss: 8.4.27 - postcss-calc: 8.2.4(postcss@8.4.27) - postcss-colormin: 5.3.1(postcss@8.4.27) - postcss-convert-values: 5.1.3(postcss@8.4.27) - postcss-discard-comments: 5.1.2(postcss@8.4.27) - postcss-discard-duplicates: 5.1.0(postcss@8.4.27) - postcss-discard-empty: 5.1.1(postcss@8.4.27) - postcss-discard-overridden: 5.1.0(postcss@8.4.27) - postcss-merge-longhand: 5.1.7(postcss@8.4.27) - postcss-merge-rules: 5.1.4(postcss@8.4.27) - postcss-minify-font-values: 5.1.0(postcss@8.4.27) - postcss-minify-gradients: 5.1.1(postcss@8.4.27) - postcss-minify-params: 5.1.4(postcss@8.4.27) - postcss-minify-selectors: 5.2.1(postcss@8.4.27) - postcss-normalize-charset: 5.1.0(postcss@8.4.27) - postcss-normalize-display-values: 5.1.0(postcss@8.4.27) - postcss-normalize-positions: 5.1.1(postcss@8.4.27) - postcss-normalize-repeat-style: 5.1.1(postcss@8.4.27) - postcss-normalize-string: 5.1.0(postcss@8.4.27) - postcss-normalize-timing-functions: 5.1.0(postcss@8.4.27) - postcss-normalize-unicode: 5.1.1(postcss@8.4.27) - postcss-normalize-url: 5.1.0(postcss@8.4.27) - postcss-normalize-whitespace: 5.1.1(postcss@8.4.27) - postcss-ordered-values: 5.1.3(postcss@8.4.27) - postcss-reduce-initial: 5.1.2(postcss@8.4.27) - postcss-reduce-transforms: 5.1.0(postcss@8.4.27) - postcss-svgo: 5.1.0(postcss@8.4.27) - postcss-unique-selectors: 5.1.1(postcss@8.4.27) + css-declaration-sorter: 6.4.1(postcss@8.4.31) + cssnano-utils: 3.1.0(postcss@8.4.31) + postcss: 8.4.31 + postcss-calc: 8.2.4(postcss@8.4.31) + postcss-colormin: 5.3.1(postcss@8.4.31) + postcss-convert-values: 5.1.3(postcss@8.4.31) + postcss-discard-comments: 5.1.2(postcss@8.4.31) + postcss-discard-duplicates: 5.1.0(postcss@8.4.31) + postcss-discard-empty: 5.1.1(postcss@8.4.31) + postcss-discard-overridden: 5.1.0(postcss@8.4.31) + postcss-merge-longhand: 5.1.7(postcss@8.4.31) + postcss-merge-rules: 5.1.4(postcss@8.4.31) + postcss-minify-font-values: 5.1.0(postcss@8.4.31) + postcss-minify-gradients: 5.1.1(postcss@8.4.31) + postcss-minify-params: 5.1.4(postcss@8.4.31) + postcss-minify-selectors: 5.2.1(postcss@8.4.31) + postcss-normalize-charset: 5.1.0(postcss@8.4.31) + postcss-normalize-display-values: 5.1.0(postcss@8.4.31) + postcss-normalize-positions: 5.1.1(postcss@8.4.31) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.31) + postcss-normalize-string: 5.1.0(postcss@8.4.31) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.31) + postcss-normalize-unicode: 5.1.1(postcss@8.4.31) + postcss-normalize-url: 5.1.0(postcss@8.4.31) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.31) + postcss-ordered-values: 5.1.3(postcss@8.4.31) + postcss-reduce-initial: 5.1.2(postcss@8.4.31) + postcss-reduce-transforms: 5.1.0(postcss@8.4.31) + postcss-svgo: 5.1.0(postcss@8.4.31) + postcss-unique-selectors: 5.1.1(postcss@8.4.31) dev: false - /cssnano-utils@3.1.0(postcss@8.4.27): + /cssnano-utils@3.1.0(postcss@8.4.31): resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 dev: false - /cssnano@5.1.15(postcss@8.4.27): + /cssnano@5.1.15(postcss@8.4.31): resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-preset-default: 5.2.14(postcss@8.4.27) + cssnano-preset-default: 5.2.14(postcss@8.4.31) lilconfig: 2.1.0 - postcss: 8.4.27 + postcss: 8.4.31 yaml: 1.10.2 dev: false @@ -4350,34 +4438,40 @@ packages: /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - /cytoscape-cose-bilkent@4.1.0(cytoscape@3.24.0): + /cytoscape-cose-bilkent@4.1.0(cytoscape@3.27.0): resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: cytoscape: ^3.2.0 dependencies: cose-base: 1.0.3 - cytoscape: 3.24.0 + cytoscape: 3.27.0 dev: false - /cytoscape-fcose@2.2.0(cytoscape@3.24.0): + /cytoscape-fcose@2.2.0(cytoscape@3.27.0): resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} peerDependencies: cytoscape: ^3.2.0 dependencies: cose-base: 2.2.0 - cytoscape: 3.24.0 + cytoscape: 3.27.0 dev: false - /cytoscape@3.24.0: - resolution: {integrity: sha512-W9fJMrAfr/zKFzDCpRR/wn6uoEQ7gfbJmxPK5DadXj69XyAhZYi1QXLOE+UXJfXVXxqGM1o1eeiIrtxrtB43zA==} + /cytoscape@3.27.0: + resolution: {integrity: sha512-pPZJilfX9BxESwujODz5pydeGi+FBrXq1rcaB1mfhFXXFJ9GjE6CNndAk+8jPzoXGD+16LtSS4xlYEIUiW4Abg==} engines: {node: '>=0.10'} dependencies: heap: 0.2.7 lodash: 4.17.21 dev: false - /d3-array@3.2.3: - resolution: {integrity: sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==} + /d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + dependencies: + internmap: 1.0.1 + dev: false + + /d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} engines: {node: '>=12'} dependencies: internmap: 2.0.3 @@ -4415,7 +4509,7 @@ packages: resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} engines: {node: '>=12'} dependencies: - d3-array: 3.2.3 + d3-array: 3.2.4 dev: false /d3-delaunay@6.0.4: @@ -4478,7 +4572,7 @@ packages: resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==} engines: {node: '>=12'} dependencies: - d3-array: 3.2.3 + d3-array: 3.2.4 dev: false /d3-hierarchy@3.1.2: @@ -4493,6 +4587,10 @@ packages: d3-color: 3.1.0 dev: false + /d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + dev: false + /d3-path@3.1.0: resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} engines: {node: '>=12'} @@ -4513,6 +4611,13 @@ packages: engines: {node: '>=12'} dev: false + /d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + dev: false + /d3-scale-chromatic@3.0.0: resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} engines: {node: '>=12'} @@ -4525,7 +4630,7 @@ packages: resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} engines: {node: '>=12'} dependencies: - d3-array: 3.2.3 + d3-array: 3.2.4 d3-format: 3.1.0 d3-interpolate: 3.0.1 d3-time: 3.1.0 @@ -4537,6 +4642,12 @@ packages: engines: {node: '>=12'} dev: false + /d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + dependencies: + d3-path: 1.0.9 + dev: false + /d3-shape@3.2.0: resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} engines: {node: '>=12'} @@ -4555,7 +4666,7 @@ packages: resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} engines: {node: '>=12'} dependencies: - d3-array: 3.2.3 + d3-array: 3.2.4 dev: false /d3-timer@3.0.1: @@ -4588,11 +4699,11 @@ packages: d3-transition: 3.0.1(d3-selection@3.0.0) dev: false - /d3@7.8.4: - resolution: {integrity: sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==} + /d3@7.8.5: + resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==} engines: {node: '>=12'} dependencies: - d3-array: 3.2.3 + d3-array: 3.2.4 d3-axis: 3.0.0 d3-brush: 3.0.0 d3-chord: 3.0.1 @@ -4624,15 +4735,21 @@ packages: d3-zoom: 3.0.0 dev: false - /dagre-d3-es@7.0.9: - resolution: {integrity: sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w==} + /dagre-d3-es@7.0.10: + resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} dependencies: - d3: 7.8.4 + d3: 7.8.5 lodash-es: 4.17.21 dev: false - /dayjs@1.11.7: - resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} + /dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + + /dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} dev: false /debug@2.6.9: @@ -4693,16 +4810,26 @@ packages: engines: {node: '>=10'} dev: false + /define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: false + /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} dev: false - /define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - has-property-descriptors: 1.0.0 + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 dev: false @@ -4723,13 +4850,12 @@ packages: /delaunator@5.0.0: resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} dependencies: - robust-predicates: 3.0.1 + robust-predicates: 3.0.2 dev: false /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: false /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} @@ -4776,6 +4902,12 @@ packages: - supports-color dev: false + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: false + /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -4798,8 +4930,8 @@ packages: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} dev: false - /dns-packet@5.6.0: - resolution: {integrity: sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==} + /dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} dependencies: '@leichtgewicht/ip-codec': 2.0.4 @@ -4845,8 +4977,8 @@ packages: domelementtype: 2.3.0 dev: false - /dompurify@2.4.3: - resolution: {integrity: sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==} + /dompurify@3.0.6: + resolution: {integrity: sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==} dev: false /domutils@2.8.0: @@ -4869,7 +5001,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /dot-prop@6.0.1: @@ -4888,16 +5020,33 @@ packages: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: false + /earlgrey-runtime@0.1.2: + resolution: {integrity: sha512-T4qoScXi5TwALDv8nlGTvOuCT8jXcKcxtO8qVdqv46IA2GHJfQzwoBPbkOmORnyhu3A98cVVuhWLsM2CzPljJg==} + dependencies: + core-js: 2.6.12 + kaiser: 0.0.4 + lodash: 4.17.21 + regenerator-runtime: 0.9.6 + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: false + /ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + + /editor@1.0.0: + resolution: {integrity: sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==} + /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false - /electron-to-chromium@1.4.341: - resolution: {integrity: sha512-R4A8VfUBQY9WmAhuqY5tjHRf5fH2AAf6vqitBOE0y6u2PgHgqHSrhZmu78dIX3fVZtjqlwJNX1i2zwC3VpHtQQ==} + /electron-to-chromium@1.4.585: + resolution: {integrity: sha512-B4yBlX0azdA3rVMxpYwLQfDpdwOgcnLCkpvSOd68iFmeedo+WYjaBJS3/W58LVD8CB2nf+o7C4K9xz1l09RkWg==} /elkjs@0.8.2: resolution: {integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==} @@ -4911,13 +5060,17 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: false + /emojilib@2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + dev: false + /emojis-list@3.0.0: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} dev: false - /emoticon@3.2.0: - resolution: {integrity: sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==} + /emoticon@4.0.1: + resolution: {integrity: sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==} dev: false /encodeurl@1.0.2: @@ -4925,8 +5078,8 @@ packages: engines: {node: '>= 0.8'} dev: false - /enhanced-resolve@5.14.0: - resolution: {integrity: sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw==} + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -4947,8 +5100,8 @@ packages: is-arrayish: 0.2.1 dev: false - /es-module-lexer@1.2.1: - resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} + /es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -4966,7 +5119,6 @@ packages: /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - dev: false /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} @@ -5005,51 +5157,52 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - /estree-util-attach-comments@2.1.1: - resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} + /estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 dev: false - /estree-util-build-jsx@2.2.2: - resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} + /estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} dependencies: - '@types/estree-jsx': 1.0.0 - estree-util-is-identifier-name: 2.1.0 + '@types/estree-jsx': 1.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 estree-walker: 3.0.3 dev: false - /estree-util-is-identifier-name@2.1.0: - resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + /estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} dev: false - /estree-util-to-js@1.2.0: - resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} + /estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} dependencies: - '@types/estree-jsx': 1.0.0 + '@types/estree-jsx': 1.0.3 astring: 1.8.6 source-map: 0.7.4 dev: false - /estree-util-value-to-estree@2.1.0: - resolution: {integrity: sha512-fcAWmZilY1+tEt7GSeLZoHDvp2NNgLkJznBRYkEpaholas41d+Y0zd/Acch7+qzZdxLtxLi+m04KjHFJSoMa6A==} - engines: {node: '>=14.0.0'} + /estree-util-value-to-estree@3.0.1: + resolution: {integrity: sha512-b2tdzTurEIbwRh+mKrEcaWfu1wgb8J1hVsgREg7FFiecWwK/PhO8X0kyc+0bIcKNtD4sqxIdNoRy6/p/TvECEA==} + engines: {node: '>=16.0.0'} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 is-plain-obj: 4.1.0 dev: false - /estree-util-visit@1.2.1: - resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + /estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} dependencies: - '@types/estree-jsx': 1.0.0 - '@types/unist': 2.0.6 + '@types/estree-jsx': 1.0.3 + '@types/unist': 3.0.2 dev: false /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 dev: false /esutils@2.0.3: @@ -5071,7 +5224,7 @@ packages: resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} engines: {node: '>= 0.8'} dependencies: - '@types/node': 20.4.8 + '@types/node': 20.9.0 require-like: 0.1.2 dev: false @@ -5098,6 +5251,10 @@ packages: strip-final-newline: 2.0.0 dev: false + /exit-hook@1.1.1: + resolution: {integrity: sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==} + engines: {node: '>=0.10.0'} + /express@4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} @@ -5146,13 +5303,16 @@ packages: /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: false + + /extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5175,6 +5335,12 @@ packages: dependencies: reusify: 1.0.4 + /fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + dependencies: + format: 0.2.2 + dev: false + /faye-websocket@0.11.4: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} @@ -5185,7 +5351,7 @@ packages: /fbemitter@3.0.0: resolution: {integrity: sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==} dependencies: - fbjs: 3.0.4 + fbjs: 3.0.5 transitivePeerDependencies: - encoding dev: false @@ -5194,16 +5360,16 @@ packages: resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} dev: false - /fbjs@3.0.4: - resolution: {integrity: sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==} + /fbjs@3.0.5: + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} dependencies: - cross-fetch: 3.1.6 + cross-fetch: 3.1.8 fbjs-css-vars: 1.0.2 loose-envify: 1.4.0 object-assign: 4.1.1 promise: 7.3.1 setimmediate: 1.0.5 - ua-parser-js: 0.7.35 + ua-parser-js: 1.0.37 transitivePeerDependencies: - encoding dev: false @@ -5215,15 +5381,22 @@ packages: xml-js: 1.6.11 dev: false - /file-loader@6.2.0(webpack@5.82.1): + /figures@1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + + /file-loader@6.2.0(webpack@5.89.0): resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} engines: {node: '>= 10.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: loader-utils: 2.0.4 - schema-utils: 3.1.2 - webpack: 5.82.1 + schema-utils: 3.3.0 + webpack: 5.89.0 dev: false /filesize@8.0.7: @@ -5283,20 +5456,24 @@ packages: path-exists: 5.0.0 dev: false + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + /flux@4.0.4(react@18.2.0): resolution: {integrity: sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==} peerDependencies: react: ^15.0.2 || ^16.0.0 || ^17.0.0 dependencies: fbemitter: 3.0.0 - fbjs: 3.0.4 + fbjs: 3.0.5 react: 18.2.0 transitivePeerDependencies: - encoding dev: false - /follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + /follow-redirects@1.15.3: + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -5305,7 +5482,10 @@ packages: optional: true dev: false - /fork-ts-checker-webpack-plugin@6.5.3(typescript@5.1.6)(webpack@5.82.1): + /forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + /fork-ts-checker-webpack-plugin@6.5.3(typescript@5.2.2)(webpack@5.89.0): resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -5319,21 +5499,21 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.21.4 - '@types/json-schema': 7.0.11 + '@babel/code-frame': 7.22.13 + '@types/json-schema': 7.0.15 chalk: 4.1.2 chokidar: 3.5.3 cosmiconfig: 6.0.0 deepmerge: 4.3.1 fs-extra: 9.1.0 glob: 7.2.3 - memfs: 3.5.1 + memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.5.1 + semver: 7.5.4 tapable: 1.1.3 - typescript: 5.1.6 - webpack: 5.82.1 + typescript: 5.2.2 + webpack: 5.89.0 dev: false /form-data-encoder@2.1.4: @@ -5341,6 +5521,14 @@ packages: engines: {node: '>= 14.17'} dev: false + /form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -5350,37 +5538,18 @@ packages: mime-types: 2.1.35 dev: false + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: false + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} dev: false - /fraction.js@4.2.0: - resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - dev: false - - /framer-motion@6.5.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==} - peerDependencies: - react: '>=16.8 || ^17.0.0 || ^18.0.0' - react-dom: '>=16.8 || ^17.0.0 || ^18.0.0' - dependencies: - '@motionone/dom': 10.12.0 - framesync: 6.0.1 - hey-listen: 1.0.8 - popmotion: 11.0.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - style-value-types: 5.0.0 - tslib: 2.5.0 - optionalDependencies: - '@emotion/is-prop-valid': 0.8.8 - dev: false - - /framesync@6.0.1: - resolution: {integrity: sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==} - dependencies: - tslib: 2.5.0 + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: false /fresh@0.5.2: @@ -5388,13 +5557,22 @@ packages: engines: {node: '>= 0.6'} dev: false + /fs-extra@0.26.7: + resolution: {integrity: sha512-waKu+1KumRhYv8D8gMRCKJGAMI9pRnPuEb1mvgYD0f7wBscg+h6bW4FDTmEZhB9VKxvoTtxW+Y7bnIlB7zja6Q==} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 2.4.0 + klaw: 1.3.1 + path-is-absolute: 1.0.1 + rimraf: 2.7.1 + /fs-extra@11.1.1: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: false /fs-extra@9.1.0: @@ -5404,38 +5582,47 @@ packages: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: false - /fs-monkey@1.0.3: - resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} + /fs-monkey@1.0.5: + resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} dev: false + /fs-promise@0.5.0: + resolution: {integrity: sha512-Y+4F4ujhEcayCJt6JmzcOun9MYGQwz+bVUiuBmTkJImhBHKpBvmVPZR9wtfiF7k3ffwAOAuurygQe+cPLSFQhw==} + deprecated: Use mz or fs-extra^3.0 with Promise Support + dependencies: + any-promise: 1.3.0 + fs-extra: 0.26.7 + mz: 2.7.0 + thenify-all: 1.6.0 + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /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 optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} dev: false - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + /get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} dependencies: - function-bind: 1.1.1 - has: 1.0.3 + function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 + hasown: 2.0.0 dev: false /get-own-enumerable-property-symbols@3.0.2: @@ -5447,6 +5634,11 @@ packages: engines: {node: '>=10'} dev: false + /getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + dependencies: + assert-plus: 1.0.0 + /github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} dev: false @@ -5485,7 +5677,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: false /global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} @@ -5521,23 +5712,29 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 + fast-glob: 3.3.2 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: false - /globby@13.1.4: - resolution: {integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==} + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.1 + fast-glob: 3.3.2 ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 dev: false + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.2 + dev: false + /got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} @@ -5545,11 +5742,11 @@ packages: '@sindresorhus/is': 5.6.0 '@szmarczak/http-timer': 5.0.1 cacheable-lookup: 7.0.0 - cacheable-request: 10.2.13 + cacheable-request: 10.2.14 decompress-response: 6.0.0 form-data-encoder: 2.1.4 get-stream: 6.0.1 - http2-wrapper: 2.2.0 + http2-wrapper: 2.2.1 lowercase-keys: 3.0.0 p-cancelable: 3.0.0 responselike: 3.0.0 @@ -5583,6 +5780,24 @@ packages: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} dev: false + /har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + + /har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + + /has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -5592,10 +5807,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + /has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.2 dev: false /has-proto@1.0.1: @@ -5613,90 +5828,111 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} dependencies: - function-bind: 1.1.1 + function-bind: 1.1.2 - /hast-util-from-parse5@7.1.2: - resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} + /hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} dependencies: - '@types/hast': 2.3.4 - '@types/unist': 2.0.6 - hastscript: 7.2.0 - property-information: 6.2.0 - vfile: 5.3.7 - vfile-location: 4.1.0 + '@types/hast': 3.0.3 + '@types/unist': 3.0.2 + devlop: 1.1.0 + hastscript: 8.0.0 + property-information: 6.4.0 + vfile: 6.0.1 + vfile-location: 5.0.2 web-namespaces: 2.0.1 dev: false - /hast-util-parse-selector@3.1.1: - resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} + /hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} dependencies: - '@types/hast': 2.3.4 + '@types/hast': 3.0.3 dev: false - /hast-util-raw@7.2.3: - resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} + /hast-util-raw@9.0.1: + resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==} dependencies: - '@types/hast': 2.3.4 - '@types/parse5': 6.0.3 - hast-util-from-parse5: 7.1.2 - hast-util-to-parse5: 7.1.0 - html-void-elements: 2.0.1 - parse5: 6.0.1 - unist-util-position: 4.0.4 - unist-util-visit: 4.1.2 - vfile: 5.3.7 + '@types/hast': 3.0.3 + '@types/unist': 3.0.2 + '@ungap/structured-clone': 1.2.0 + hast-util-from-parse5: 8.0.1 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.0.2 + parse5: 7.1.2 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 web-namespaces: 2.0.1 zwitch: 2.0.4 dev: false - /hast-util-to-estree@2.3.3: - resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} + /hast-util-to-estree@3.1.0: + resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} dependencies: - '@types/estree': 1.0.1 - '@types/estree-jsx': 1.0.0 - '@types/hast': 2.3.4 - '@types/unist': 2.0.6 + '@types/estree': 1.0.5 + '@types/estree-jsx': 1.0.3 + '@types/hast': 3.0.3 comma-separated-tokens: 2.0.3 - estree-util-attach-comments: 2.1.1 - estree-util-is-identifier-name: 2.1.0 - hast-util-whitespace: 2.0.1 - mdast-util-mdx-expression: 1.3.2 - mdast-util-mdxjs-esm: 1.3.1 - property-information: 6.2.0 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.0.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 6.4.0 space-separated-tokens: 2.0.2 - style-to-object: 0.4.2 - unist-util-position: 4.0.4 + style-to-object: 0.4.4 + unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: - supports-color dev: false - /hast-util-to-parse5@7.1.0: - resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} + /hast-util-to-jsx-runtime@2.2.0: + resolution: {integrity: sha512-wSlp23N45CMjDg/BPW8zvhEi3R+8eRE1qFbjEyAUzMCzu2l1Wzwakq+Tlia9nkCtEl5mDxa7nKHsvYJ6Gfn21A==} dependencies: - '@types/hast': 2.3.4 + '@types/hast': 3.0.3 + '@types/unist': 3.0.2 comma-separated-tokens: 2.0.3 - property-information: 6.2.0 + hast-util-whitespace: 3.0.0 + property-information: 6.4.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.4 + unist-util-position: 5.0.0 + vfile-message: 4.0.2 + dev: false + + /hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + dependencies: + '@types/hast': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.4.0 space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 dev: false - /hast-util-whitespace@2.0.1: - resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.3 dev: false - /hastscript@7.2.0: - resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} + /hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} dependencies: - '@types/hast': 2.3.4 + '@types/hast': 3.0.3 comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 3.1.1 - property-information: 6.2.0 + hast-util-parse-selector: 4.0.0 + property-information: 6.4.0 space-separated-tokens: 2.0.2 dev: false @@ -5709,14 +5945,10 @@ packages: resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} dev: false - /hey-listen@1.0.8: - resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} - dev: false - /history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.23.2 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.3.1 @@ -5739,8 +5971,8 @@ packages: wbuf: 1.7.3 dev: false - /html-entities@2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + /html-entities@2.4.0: + resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} dev: false /html-minifier-terser@6.1.0: @@ -5754,7 +5986,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.17.4 + terser: 5.24.0 dev: false /html-minifier-terser@7.2.0: @@ -5768,7 +6000,7 @@ packages: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.17.4 + terser: 5.24.0 dev: false /html-tags@3.3.1: @@ -5776,12 +6008,12 @@ packages: engines: {node: '>=8'} dev: false - /html-void-elements@2.0.1: - resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} dev: false - /html-webpack-plugin@5.5.1(webpack@5.82.1): - resolution: {integrity: sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==} + /html-webpack-plugin@5.5.3(webpack@5.89.0): + resolution: {integrity: sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==} engines: {node: '>=10.13.0'} peerDependencies: webpack: ^5.20.0 @@ -5791,7 +6023,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.82.1 + webpack: 5.89.0 dev: false /htmlparser2@6.1.0: @@ -5845,7 +6077,7 @@ packages: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} dev: false - /http-proxy-middleware@2.0.6(@types/express@4.17.17): + /http-proxy-middleware@2.0.6(@types/express@4.17.21): resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5854,8 +6086,8 @@ packages: '@types/express': optional: true dependencies: - '@types/express': 4.17.17 - '@types/http-proxy': 1.17.11 + '@types/express': 4.17.21 + '@types/http-proxy': 1.17.14 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 @@ -5869,14 +6101,22 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2 + follow-redirects: 1.15.3 requires-port: 1.0.0 transitivePeerDependencies: - debug dev: false - /http2-wrapper@2.2.0: - resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==} + /http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.18.0 + + /http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} dependencies: quick-lru: 5.1.1 @@ -5902,13 +6142,13 @@ packages: safer-buffer: 2.1.2 dev: false - /icss-utils@5.1.0(postcss@8.4.27): + /icss-utils@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 dev: false /ignore@5.2.4: @@ -5982,6 +6222,33 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: false + /inquirer-promise@0.0.3: + resolution: {integrity: sha512-82CQX586JAV9GAgU9yXZsMDs+NorjA0nLhkfFx9+PReyOnuoHRbHrC1Z90sS95bFJI1Tm1gzMObuE0HabzkJpg==} + dependencies: + earlgrey-runtime: 0.1.2 + inquirer: 0.11.4 + + /inquirer@0.11.4: + resolution: {integrity: sha512-QR+2TW90jnKk9LUUtbcA3yQXKt2rDEKMh6+BAZQIeumtzHexnwVLdPakSslGijXYLJCzFv7GMXbFCn0pA00EUw==} + dependencies: + ansi-escapes: 1.4.0 + ansi-regex: 2.1.1 + chalk: 1.1.3 + cli-cursor: 1.0.2 + cli-width: 1.1.1 + figures: 1.7.0 + lodash: 3.10.1 + readline2: 1.0.1 + run-async: 0.1.0 + rx-lite: 3.1.2 + string-width: 1.0.2 + strip-ansi: 3.0.1 + through: 2.3.8 + + /internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + dev: false + /internmap@2.0.3: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} @@ -6002,8 +6269,8 @@ packages: engines: {node: '>= 0.10'} dev: false - /ipaddr.js@2.0.1: - resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} + /ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} engines: {node: '>= 10'} dev: false @@ -6028,22 +6295,17 @@ packages: dependencies: binary-extensions: 2.2.0 - /is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - dev: false - /is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true dependencies: - ci-info: 3.8.0 + ci-info: 3.9.0 dev: false - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - has: 1.0.3 + hasown: 2.0.0 /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -6064,6 +6326,12 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + /is-fullwidth-code-point@1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: 1.0.1 + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -6132,10 +6400,15 @@ packages: dependencies: isobject: 3.0.1 - /is-reference@3.0.1: - resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: false + + /is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 dev: false /is-regexp@1.0.0: @@ -6155,7 +6428,6 @@ packages: /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: false /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} @@ -6185,14 +6457,17 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} - /jest-util@29.5.0: - resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} + /isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.5.0 - '@types/node': 20.4.8 + '@jest/types': 29.6.3 + '@types/node': 20.9.0 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 dev: false @@ -6201,26 +6476,26 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.4.8 + '@types/node': 20.9.0 merge-stream: 2.0.0 supports-color: 8.1.1 - /jest-worker@29.5.0: - resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.4.8 - jest-util: 29.5.0 + '@types/node': 20.9.0 + jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false - /jiti@1.19.1: - resolution: {integrity: sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==} + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true - /joi@17.9.2: - resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==} + /joi@17.11.0: + resolution: {integrity: sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==} dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 @@ -6246,6 +6521,9 @@ packages: argparse: 2.0.1 dev: false + /jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -6271,34 +6549,64 @@ packages: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: false + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: false + /jsonfile@2.4.0: + resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} + optionalDependencies: + graceful-fs: 4.2.11 + /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 dev: false - /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + /jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + + /kaiser@0.0.4: + resolution: {integrity: sha512-m8ju+rmBqvclZmyrOXgGGhOYSjKJK6RN1NhqEltemY87UqZOxEkizg9TOy1vQSyJ01Wx6SAPuuN0iO2Mgislvw==} + dependencies: + earlgrey-runtime: 0.1.2 + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 dev: false - /khroma@2.0.0: - resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==} + /khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} dev: false /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + /klaw@1.3.1: + resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} + optionalDependencies: + graceful-fs: 4.2.11 + /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -6309,11 +6617,6 @@ packages: engines: {node: '>=6'} dev: false - /klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} - dev: false - /latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} @@ -6321,8 +6624,8 @@ packages: package-json: 8.1.1 dev: false - /launch-editor@2.6.0: - resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==} + /launch-editor@2.6.1: + resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} dependencies: picocolors: 1.0.0 shell-quote: 1.8.1 @@ -6404,10 +6707,22 @@ packages: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: false + /lodash.escape@4.0.1: + resolution: {integrity: sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==} + dev: false + + /lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + dev: false + /lodash.flow@3.5.0: resolution: {integrity: sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==} dev: false + /lodash.invokemap@4.6.0: + resolution: {integrity: sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==} + dev: false + /lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true @@ -6420,13 +6735,23 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.pullall@4.2.0: + resolution: {integrity: sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==} + dev: false + /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: false + /lodash.uniqby@4.7.0: + resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} + dev: false + + /lodash@3.10.1: + resolution: {integrity: sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==} + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false /longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -6441,7 +6766,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 dev: false /lowercase-keys@3.0.0: @@ -6462,51 +6787,44 @@ packages: yallist: 4.0.0 dev: false - /markdown-extensions@1.1.1: - resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} - engines: {node: '>=0.10.0'} + /markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} dev: false /markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} dev: false - /mdast-util-definitions@5.1.2: - resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + /mdast-util-directive@3.0.0: + resolution: {integrity: sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==} dependencies: - '@types/mdast': 3.0.11 - '@types/unist': 2.0.6 - unist-util-visit: 4.1.2 - dev: false - - /mdast-util-directive@2.2.4: - resolution: {integrity: sha512-sK3ojFP+jpj1n7Zo5ZKvoxP1MvLyzVG63+gm40Z/qI00avzdPCYxt7RBMgofwAva9gBjbDBWVRB/i+UD+fUCzQ==} - dependencies: - '@types/mdast': 3.0.11 - '@types/unist': 2.0.6 - mdast-util-from-markdown: 1.3.1 - mdast-util-to-markdown: 1.5.0 + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 parse-entities: 4.0.1 stringify-entities: 4.0.3 - unist-util-visit-parents: 5.1.3 + unist-util-visit-parents: 6.0.1 transitivePeerDependencies: - supports-color dev: false - /mdast-util-find-and-replace@2.2.2: - resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + /mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} dependencies: - '@types/mdast': 3.0.11 + '@types/mdast': 4.0.3 escape-string-regexp: 5.0.0 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 dev: false /mdast-util-from-markdown@1.3.1: resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} dependencies: - '@types/mdast': 3.0.11 - '@types/unist': 2.0.6 + '@types/mdast': 3.0.15 + '@types/unist': 2.0.10 decode-named-character-reference: 1.0.2 mdast-util-to-string: 3.2.0 micromark: 3.2.0 @@ -6521,154 +6839,208 @@ packages: - supports-color dev: false - /mdast-util-gfm-autolink-literal@1.0.3: - resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + /mdast-util-from-markdown@2.0.0: + resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} dependencies: - '@types/mdast': 3.0.11 + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-autolink-literal@2.0.0: + resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} + dependencies: + '@types/mdast': 4.0.3 ccount: 2.0.1 - mdast-util-find-and-replace: 2.2.2 - micromark-util-character: 1.2.0 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.1 + micromark-util-character: 2.0.1 dev: false - /mdast-util-gfm-footnote@1.0.2: - resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + /mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} dependencies: - '@types/mdast': 3.0.11 - mdast-util-to-markdown: 1.5.0 - micromark-util-normalize-identifier: 1.1.0 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + transitivePeerDependencies: + - supports-color dev: false - /mdast-util-gfm-strikethrough@1.0.3: - resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} dependencies: - '@types/mdast': 3.0.11 - mdast-util-to-markdown: 1.5.0 + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color dev: false - /mdast-util-gfm-table@1.0.7: - resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} dependencies: - '@types/mdast': 3.0.11 + '@types/mdast': 4.0.3 + devlop: 1.1.0 markdown-table: 3.0.3 - mdast-util-from-markdown: 1.3.1 - mdast-util-to-markdown: 1.5.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color dev: false - /mdast-util-gfm-task-list-item@1.0.2: - resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} dependencies: - '@types/mdast': 3.0.11 - mdast-util-to-markdown: 1.5.0 - dev: false - - /mdast-util-gfm@2.0.2: - resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} - dependencies: - mdast-util-from-markdown: 1.3.1 - mdast-util-gfm-autolink-literal: 1.0.3 - mdast-util-gfm-footnote: 1.0.2 - mdast-util-gfm-strikethrough: 1.0.3 - mdast-util-gfm-table: 1.0.7 - mdast-util-gfm-task-list-item: 1.0.2 - mdast-util-to-markdown: 1.5.0 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color dev: false - /mdast-util-mdx-expression@1.3.2: - resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + /mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} dependencies: - '@types/estree-jsx': 1.0.0 - '@types/hast': 2.3.4 - '@types/mdast': 3.0.11 - mdast-util-from-markdown: 1.3.1 - mdast-util-to-markdown: 1.5.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-gfm-autolink-literal: 2.0.0 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color dev: false - /mdast-util-mdx-jsx@2.1.4: - resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + /mdast-util-mdx-expression@2.0.0: + resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} dependencies: - '@types/estree-jsx': 1.0.0 - '@types/hast': 2.3.4 - '@types/mdast': 3.0.11 - '@types/unist': 2.0.6 + '@types/estree-jsx': 1.0.3 + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-jsx@3.0.0: + resolution: {integrity: sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==} + dependencies: + '@types/estree-jsx': 1.0.3 + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 ccount: 2.0.1 - mdast-util-from-markdown: 1.3.1 - mdast-util-to-markdown: 1.5.0 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 parse-entities: 4.0.1 stringify-entities: 4.0.3 - unist-util-remove-position: 4.0.2 - unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.4 + unist-util-remove-position: 5.0.0 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 transitivePeerDependencies: - supports-color dev: false - /mdast-util-mdx@2.0.1: - resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + /mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} dependencies: - mdast-util-from-markdown: 1.3.1 - mdast-util-mdx-expression: 1.3.2 - mdast-util-mdx-jsx: 2.1.4 - mdast-util-mdxjs-esm: 1.3.1 - mdast-util-to-markdown: 1.5.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-mdx-expression: 2.0.0 + mdast-util-mdx-jsx: 3.0.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color dev: false - /mdast-util-mdxjs-esm@1.3.1: - resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + /mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} dependencies: - '@types/estree-jsx': 1.0.0 - '@types/hast': 2.3.4 - '@types/mdast': 3.0.11 - mdast-util-from-markdown: 1.3.1 - mdast-util-to-markdown: 1.5.0 + '@types/estree-jsx': 1.0.3 + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color dev: false - /mdast-util-phrasing@3.0.1: - resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + /mdast-util-phrasing@4.0.0: + resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==} dependencies: - '@types/mdast': 3.0.11 - unist-util-is: 5.2.1 + '@types/mdast': 4.0.3 + unist-util-is: 6.0.0 dev: false - /mdast-util-to-hast@12.3.0: - resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + /mdast-util-to-hast@13.0.2: + resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==} dependencies: - '@types/hast': 2.3.4 - '@types/mdast': 3.0.11 - mdast-util-definitions: 5.1.2 - micromark-util-sanitize-uri: 1.2.0 + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 trim-lines: 3.0.1 - unist-util-generated: 2.0.1 - unist-util-position: 4.0.4 - unist-util-visit: 4.1.2 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 dev: false - /mdast-util-to-markdown@1.5.0: - resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + /mdast-util-to-markdown@2.1.0: + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} dependencies: - '@types/mdast': 3.0.11 - '@types/unist': 2.0.6 + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 longest-streak: 3.1.0 - mdast-util-phrasing: 3.0.1 - mdast-util-to-string: 3.2.0 - micromark-util-decode-string: 1.1.0 - unist-util-visit: 4.1.2 + mdast-util-phrasing: 4.0.0 + mdast-util-to-string: 4.0.0 + micromark-util-decode-string: 2.0.0 + unist-util-visit: 5.0.0 zwitch: 2.0.4 dev: false /mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} dependencies: - '@types/mdast': 3.0.11 + '@types/mdast': 3.0.15 + dev: false + + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + dependencies: + '@types/mdast': 4.0.3 dev: false /mdn-data@2.0.14: @@ -6680,11 +7052,11 @@ packages: engines: {node: '>= 0.6'} dev: false - /memfs@3.5.1: - resolution: {integrity: sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA==} + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} dependencies: - fs-monkey: 1.0.3 + fs-monkey: 1.0.5 dev: false /merge-descriptors@1.0.1: @@ -6698,25 +7070,31 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - /mermaid@9.4.3: - resolution: {integrity: sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw==} + /mermaid@10.6.1: + resolution: {integrity: sha512-Hky0/RpOw/1il9X8AvzOEChfJtVvmXm+y7JML5C//ePYMy0/9jCEmW1E1g86x9oDfW9+iVEdTV/i+M6KWRNs4A==} dependencies: - '@braintree/sanitize-url': 6.0.2 - cytoscape: 3.24.0 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.24.0) - cytoscape-fcose: 2.2.0(cytoscape@3.24.0) - d3: 7.8.4 - dagre-d3-es: 7.0.9 - dayjs: 1.11.7 - dompurify: 2.4.3 + '@braintree/sanitize-url': 6.0.4 + '@types/d3-scale': 4.0.8 + '@types/d3-scale-chromatic': 3.0.2 + cytoscape: 3.27.0 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.27.0) + cytoscape-fcose: 2.2.0(cytoscape@3.27.0) + d3: 7.8.5 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.10 + dayjs: 1.11.10 + dompurify: 3.0.6 elkjs: 0.8.2 - khroma: 2.0.0 + khroma: 2.1.0 lodash-es: 4.17.21 + mdast-util-from-markdown: 1.3.1 non-layered-tidy-tree-layout: 2.0.2 - stylis: 4.2.0 + stylis: 4.3.0 ts-dedent: 2.2.0 - uuid: 9.0.0 + uuid: 9.0.1 web-worker: 1.2.0 + transitivePeerDependencies: + - supports-color dev: false /methods@1.1.2: @@ -6745,149 +7123,179 @@ packages: uvu: 0.5.6 dev: false - /micromark-extension-directive@2.2.1: - resolution: {integrity: sha512-ZFKZkNaEqAP86IghX1X7sE8NNnx6kFNq9mSBRvEHjArutTCJZ3LYg6VH151lXVb1JHpmIcW/7rX25oMoIHuSug==} + /micromark-core-commonmark@2.0.0: + resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} dependencies: - micromark-factory-space: 1.1.0 - micromark-factory-whitespace: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-directive@3.0.0: + resolution: {integrity: sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 parse-entities: 4.0.1 - uvu: 0.5.6 dev: false - /micromark-extension-gfm-autolink-literal@1.0.5: - resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + /micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} dependencies: - micromark-util-character: 1.2.0 - micromark-util-sanitize-uri: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 + fault: 2.0.1 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-gfm-footnote@1.1.2: - resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + /micromark-extension-gfm-autolink-literal@2.0.0: + resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==} dependencies: - micromark-core-commonmark: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-sanitize-uri: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 + micromark-util-character: 2.0.1 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-gfm-strikethrough@1.0.7: - resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + /micromark-extension-gfm-footnote@2.0.0: + resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==} dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-classify-character: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-gfm-table@1.0.7: - resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + /micromark-extension-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==} dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-gfm-tagfilter@1.0.2: - resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + /micromark-extension-gfm-table@2.0.0: + resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==} dependencies: - micromark-util-types: 1.1.0 + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-gfm-task-list-item@1.0.5: - resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-gfm@2.0.3: - resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + /micromark-extension-gfm-task-list-item@2.0.1: + resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==} dependencies: - micromark-extension-gfm-autolink-literal: 1.0.5 - micromark-extension-gfm-footnote: 1.1.2 - micromark-extension-gfm-strikethrough: 1.0.7 - micromark-extension-gfm-table: 1.0.7 - micromark-extension-gfm-tagfilter: 1.0.2 - micromark-extension-gfm-task-list-item: 1.0.5 - micromark-util-combine-extensions: 1.1.0 - micromark-util-types: 1.1.0 + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-mdx-expression@1.0.8: - resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} dependencies: - '@types/estree': 1.0.1 - micromark-factory-mdx-expression: 1.0.9 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-events-to-acorn: 1.2.3 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 + micromark-extension-gfm-autolink-literal: 2.0.0 + micromark-extension-gfm-footnote: 2.0.0 + micromark-extension-gfm-strikethrough: 2.0.0 + micromark-extension-gfm-table: 2.0.0 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.0.1 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-mdx-jsx@1.0.5: - resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + /micromark-extension-mdx-expression@3.0.0: + resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} + dependencies: + '@types/estree': 1.0.5 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-mdx-jsx@3.0.0: + resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==} dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.1 - estree-util-is-identifier-name: 2.1.0 - micromark-factory-mdx-expression: 1.0.9 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - vfile-message: 3.1.4 + '@types/estree': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 dev: false - /micromark-extension-mdx-md@1.0.1: - resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + /micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} dependencies: - micromark-util-types: 1.1.0 + micromark-util-types: 2.0.0 dev: false - /micromark-extension-mdxjs-esm@1.0.5: - resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + /micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} dependencies: - '@types/estree': 1.0.1 - micromark-core-commonmark: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-events-to-acorn: 1.2.3 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - unist-util-position-from-estree: 1.1.2 - uvu: 0.5.6 - vfile-message: 3.1.4 + '@types/estree': 1.0.5 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 dev: false - /micromark-extension-mdxjs@1.0.1: - resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + /micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) - micromark-extension-mdx-expression: 1.0.8 - micromark-extension-mdx-jsx: 1.0.5 - micromark-extension-mdx-md: 1.0.1 - micromark-extension-mdxjs-esm: 1.0.5 - micromark-util-combine-extensions: 1.1.0 - micromark-util-types: 1.1.0 + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + micromark-extension-mdx-expression: 3.0.0 + micromark-extension-mdx-jsx: 3.0.0 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 dev: false /micromark-factory-destination@1.1.0: @@ -6898,6 +7306,14 @@ packages: micromark-util-types: 1.1.0 dev: false + /micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + /micromark-factory-label@1.1.0: resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} dependencies: @@ -6907,17 +7323,26 @@ packages: uvu: 0.5.6 dev: false - /micromark-factory-mdx-expression@1.0.9: - resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + /micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} dependencies: - '@types/estree': 1.0.1 - micromark-util-character: 1.2.0 - micromark-util-events-to-acorn: 1.2.3 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - unist-util-position-from-estree: 1.1.2 - uvu: 0.5.6 - vfile-message: 3.1.4 + devlop: 1.1.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-mdx-expression@2.0.1: + resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} + dependencies: + '@types/estree': 1.0.5 + devlop: 1.1.0 + micromark-util-character: 2.0.1 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.2 dev: false /micromark-factory-space@1.1.0: @@ -6927,6 +7352,13 @@ packages: micromark-util-types: 1.1.0 dev: false + /micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-types: 2.0.0 + dev: false + /micromark-factory-title@1.1.0: resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} dependencies: @@ -6936,6 +7368,15 @@ packages: micromark-util-types: 1.1.0 dev: false + /micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + /micromark-factory-whitespace@1.1.0: resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} dependencies: @@ -6945,6 +7386,15 @@ packages: micromark-util-types: 1.1.0 dev: false + /micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + /micromark-util-character@1.2.0: resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} dependencies: @@ -6952,12 +7402,25 @@ packages: micromark-util-types: 1.1.0 dev: false + /micromark-util-character@2.0.1: + resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==} + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + /micromark-util-chunked@1.1.0: resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: micromark-util-symbol: 1.1.0 dev: false + /micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + /micromark-util-classify-character@1.1.0: resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} dependencies: @@ -6966,6 +7429,14 @@ packages: micromark-util-types: 1.1.0 dev: false + /micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + /micromark-util-combine-extensions@1.1.0: resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} dependencies: @@ -6973,12 +7444,25 @@ packages: micromark-util-types: 1.1.0 dev: false + /micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + dependencies: + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + /micromark-util-decode-numeric-character-reference@1.1.0: resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} dependencies: micromark-util-symbol: 1.1.0 dev: false + /micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + /micromark-util-decode-string@1.1.0: resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} dependencies: @@ -6988,39 +7472,68 @@ packages: micromark-util-symbol: 1.1.0 dev: false + /micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 + dev: false + /micromark-util-encode@1.1.0: resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} dev: false - /micromark-util-events-to-acorn@1.2.3: - resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: false + + /micromark-util-events-to-acorn@2.0.2: + resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.1 - '@types/unist': 2.0.6 - estree-util-visit: 1.2.1 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - vfile-message: 3.1.4 + '@types/estree': 1.0.5 + '@types/unist': 3.0.2 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 dev: false /micromark-util-html-tag-name@1.2.0: resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} dev: false + /micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + dev: false + /micromark-util-normalize-identifier@1.1.0: resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} dependencies: micromark-util-symbol: 1.1.0 dev: false + /micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + /micromark-util-resolve-all@1.1.0: resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} dependencies: micromark-util-types: 1.1.0 dev: false + /micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + dependencies: + micromark-util-types: 2.0.0 + dev: false + /micromark-util-sanitize-uri@1.2.0: resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} dependencies: @@ -7029,6 +7542,14 @@ packages: micromark-util-symbol: 1.1.0 dev: false + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + dev: false + /micromark-util-subtokenize@1.1.0: resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: @@ -7038,18 +7559,35 @@ packages: uvu: 0.5.6 dev: false + /micromark-util-subtokenize@2.0.0: + resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + /micromark-util-symbol@1.1.0: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} dev: false + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: false + /micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} dev: false + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: false + /micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: - '@types/debug': 4.1.8 + '@types/debug': 4.1.12 debug: 4.3.4 decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 @@ -7070,6 +7608,30 @@ packages: - supports-color dev: false + /micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.0.1 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -7120,14 +7682,14 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false - /mini-css-extract-plugin@2.7.5(webpack@5.82.1): - resolution: {integrity: sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==} + /mini-css-extract-plugin@2.7.6(webpack@5.89.0): + resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: - schema-utils: 4.0.1 - webpack: 5.82.1 + schema-utils: 4.2.0 + webpack: 5.89.0 dev: false /minimalistic-assert@1.0.1: @@ -7169,10 +7731,13 @@ packages: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true dependencies: - dns-packet: 5.6.0 + dns-packet: 5.6.1 thunky: 1.1.0 dev: false + /mute-stream@0.0.5: + resolution: {integrity: sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==} + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -7180,8 +7745,8 @@ packages: object-assign: 4.1.1 thenify-all: 1.6.0 - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -7197,17 +7762,20 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.5.0 + tslib: 2.6.2 dev: false - /node-emoji@1.11.0: - resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + /node-emoji@2.1.0: + resolution: {integrity: sha512-tcsBm9C6FmPN5Wo7OjFi9lgMyJjvkAeirmjR/ax8Ttfqy4N8PoFic26uqFTIgayHPNI5FH4ltUvfh9kHzwcK9A==} dependencies: - lodash: 4.17.21 + '@sindresorhus/is': 3.1.2 + char-regex: 1.0.2 + emojilib: 2.4.0 + skin-tone: 2.0.0 dev: false - /node-fetch@2.6.11: - resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -7223,8 +7791,8 @@ packages: engines: {node: '>= 6.13.0'} dev: false - /node-releases@2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} /non-layered-tidy-tree-layout@2.0.2: resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} @@ -7266,6 +7834,13 @@ packages: boolbase: 1.0.0 dev: false + /number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + + /oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -7274,8 +7849,8 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: false /object-keys@1.1.1: @@ -7287,8 +7862,8 @@ packages: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 + call-bind: 1.0.5 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 dev: false @@ -7314,6 +7889,10 @@ packages: dependencies: wrappy: 1.0.2 + /onetime@1.1.0: + resolution: {integrity: sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==} + engines: {node: '>=0.10.0'} + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -7335,6 +7914,10 @@ packages: hasBin: true dev: false + /os-homedir@1.0.2: + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} + /p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -7409,14 +7992,14 @@ packages: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.5.1 + semver: 7.5.4 dev: false /param-case@3.0.4: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /parent-module@1.0.1: @@ -7429,7 +8012,7 @@ packages: /parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.10 character-entities: 2.0.2 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 @@ -7443,7 +8026,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.13 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -7460,10 +8043,6 @@ packages: parse5: 7.1.2 dev: false - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: false - /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: @@ -7479,7 +8058,7 @@ packages: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.6.2 dev: false /path-exists@3.0.0: @@ -7532,12 +8111,15 @@ packages: engines: {node: '>=8'} dev: false + /performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 estree-walker: 3.0.3 - is-reference: 3.0.1 + is-reference: 3.0.2 dev: false /picocolors@1.0.0: @@ -7569,116 +8151,107 @@ packages: find-up: 3.0.0 dev: false - /popmotion@11.0.3: - resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==} - dependencies: - framesync: 6.0.1 - hey-listen: 1.0.8 - style-value-types: 5.0.0 - tslib: 2.5.0 - dev: false - - /postcss-calc@8.2.4(postcss@8.4.27): + /postcss-calc@8.2.4(postcss@8.4.31): resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} peerDependencies: postcss: ^8.2.2 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 dev: false - /postcss-colormin@5.3.1(postcss@8.4.27): + /postcss-colormin@5.3.1(postcss@8.4.31): resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.22.1 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-convert-values@5.1.3(postcss@8.4.27): + /postcss-convert-values@5.1.3(postcss@8.4.31): resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 - postcss: 8.4.27 + browserslist: 4.22.1 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-discard-comments@5.1.2(postcss@8.4.27): + /postcss-discard-comments@5.1.2(postcss@8.4.31): resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 dev: false - /postcss-discard-duplicates@5.1.0(postcss@8.4.27): + /postcss-discard-duplicates@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 dev: false - /postcss-discard-empty@5.1.1(postcss@8.4.27): + /postcss-discard-empty@5.1.1(postcss@8.4.31): resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 dev: false - /postcss-discard-overridden@5.1.0(postcss@8.4.27): + /postcss-discard-overridden@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 dev: false - /postcss-discard-unused@5.1.0(postcss@8.4.27): + /postcss-discard-unused@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-selector-parser: 6.0.13 dev: false - /postcss-import@15.1.0(postcss@8.4.27): + /postcss-import@15.1.0(postcss@8.4.31): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.4 + resolve: 1.22.8 - /postcss-js@4.0.1(postcss@8.4.27): + /postcss-js@4.0.1(postcss@8.4.31): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.27 + postcss: 8.4.31 - /postcss-load-config@4.0.1(postcss@8.4.27): + /postcss-load-config@4.0.1(postcss@8.4.31): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -7691,283 +8264,284 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.27 - yaml: 2.3.1 + postcss: 8.4.31 + yaml: 2.3.4 - /postcss-loader@7.3.0(postcss@8.4.27)(webpack@5.82.1): - resolution: {integrity: sha512-qLAFjvR2BFNz1H930P7mj1iuWJFjGey/nVhimfOAAQ1ZyPpcClAxP8+A55Sl8mBvM+K2a9Pjgdj10KpANWrNfw==} + /postcss-loader@7.3.3(postcss@8.4.31)(typescript@5.2.2)(webpack@5.89.0): + resolution: {integrity: sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==} engines: {node: '>= 14.15.0'} peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 dependencies: - cosmiconfig: 8.1.3 - jiti: 1.19.1 - klona: 2.0.6 - postcss: 8.4.27 - semver: 7.5.1 - webpack: 5.82.1 + cosmiconfig: 8.3.6(typescript@5.2.2) + jiti: 1.21.0 + postcss: 8.4.31 + semver: 7.5.4 + webpack: 5.89.0 + transitivePeerDependencies: + - typescript dev: false - /postcss-merge-idents@5.1.1(postcss@8.4.27): + /postcss-merge-idents@5.1.1(postcss@8.4.31): resolution: {integrity: sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 3.1.0(postcss@8.4.27) - postcss: 8.4.27 + cssnano-utils: 3.1.0(postcss@8.4.31) + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-merge-longhand@5.1.7(postcss@8.4.27): + /postcss-merge-longhand@5.1.7(postcss@8.4.31): resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.4.27) + stylehacks: 5.1.1(postcss@8.4.31) dev: false - /postcss-merge-rules@5.1.4(postcss@8.4.27): + /postcss-merge-rules@5.1.4(postcss@8.4.31): resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.22.1 caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.4.27) - postcss: 8.4.27 + cssnano-utils: 3.1.0(postcss@8.4.31) + postcss: 8.4.31 postcss-selector-parser: 6.0.13 dev: false - /postcss-minify-font-values@5.1.0(postcss@8.4.27): + /postcss-minify-font-values@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-minify-gradients@5.1.1(postcss@8.4.27): + /postcss-minify-gradients@5.1.1(postcss@8.4.31): resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.4.27) - postcss: 8.4.27 + cssnano-utils: 3.1.0(postcss@8.4.31) + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-minify-params@5.1.4(postcss@8.4.27): + /postcss-minify-params@5.1.4(postcss@8.4.31): resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 - cssnano-utils: 3.1.0(postcss@8.4.27) - postcss: 8.4.27 + browserslist: 4.22.1 + cssnano-utils: 3.1.0(postcss@8.4.31) + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-minify-selectors@5.2.1(postcss@8.4.27): + /postcss-minify-selectors@5.2.1(postcss@8.4.31): resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-selector-parser: 6.0.13 dev: false - /postcss-modules-extract-imports@3.0.0(postcss@8.4.27): + /postcss-modules-extract-imports@3.0.0(postcss@8.4.31): resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 dev: false - /postcss-modules-local-by-default@4.0.0(postcss@8.4.27): - resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} + /postcss-modules-local-by-default@4.0.3(postcss@8.4.31): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.27) - postcss: 8.4.27 + icss-utils: 5.1.0(postcss@8.4.31) + postcss: 8.4.31 postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 dev: false - /postcss-modules-scope@3.0.0(postcss@8.4.27): + /postcss-modules-scope@3.0.0(postcss@8.4.31): resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-selector-parser: 6.0.13 dev: false - /postcss-modules-values@4.0.0(postcss@8.4.27): + /postcss-modules-values@4.0.0(postcss@8.4.31): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.27) - postcss: 8.4.27 + icss-utils: 5.1.0(postcss@8.4.31) + postcss: 8.4.31 dev: false - /postcss-nested@6.0.1(postcss@8.4.27): + /postcss-nested@6.0.1(postcss@8.4.31): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-selector-parser: 6.0.13 - /postcss-normalize-charset@5.1.0(postcss@8.4.27): + /postcss-normalize-charset@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 dev: false - /postcss-normalize-display-values@5.1.0(postcss@8.4.27): + /postcss-normalize-display-values@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-positions@5.1.1(postcss@8.4.27): + /postcss-normalize-positions@5.1.1(postcss@8.4.31): resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-repeat-style@5.1.1(postcss@8.4.27): + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.31): resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-string@5.1.0(postcss@8.4.27): + /postcss-normalize-string@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-timing-functions@5.1.0(postcss@8.4.27): + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-unicode@5.1.1(postcss@8.4.27): + /postcss-normalize-unicode@5.1.1(postcss@8.4.31): resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 - postcss: 8.4.27 + browserslist: 4.22.1 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-url@5.1.0(postcss@8.4.27): + /postcss-normalize-url@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: normalize-url: 6.1.0 - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-normalize-whitespace@5.1.1(postcss@8.4.27): + /postcss-normalize-whitespace@5.1.1(postcss@8.4.31): resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-ordered-values@5.1.3(postcss@8.4.27): + /postcss-ordered-values@5.1.3(postcss@8.4.31): resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - cssnano-utils: 3.1.0(postcss@8.4.27) - postcss: 8.4.27 + cssnano-utils: 3.1.0(postcss@8.4.31) + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-reduce-idents@5.2.0(postcss@8.4.27): + /postcss-reduce-idents@5.2.0(postcss@8.4.31): resolution: {integrity: sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false - /postcss-reduce-initial@5.1.2(postcss@8.4.27): + /postcss-reduce-initial@5.1.2(postcss@8.4.31): resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 + browserslist: 4.22.1 caniuse-api: 3.0.0 - postcss: 8.4.27 + postcss: 8.4.31 dev: false - /postcss-reduce-transforms@5.1.0(postcss@8.4.27): + /postcss-reduce-transforms@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 dev: false @@ -7986,54 +8560,54 @@ packages: cssesc: 3.0.0 util-deprecate: 1.0.2 - /postcss-sort-media-queries@4.4.1(postcss@8.4.27): + /postcss-sort-media-queries@4.4.1(postcss@8.4.31): resolution: {integrity: sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==} engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.4.16 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 sort-css-media-queries: 2.1.0 dev: false - /postcss-svgo@5.1.0(postcss@8.4.27): + /postcss-svgo@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-value-parser: 4.2.0 svgo: 2.8.0 dev: false - /postcss-unique-selectors@5.1.1(postcss@8.4.27): + /postcss-unique-selectors@5.1.1(postcss@8.4.31): resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 postcss-selector-parser: 6.0.13 dev: false /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - /postcss-zindex@5.1.0(postcss@8.4.27): + /postcss-zindex@5.1.0(postcss@8.4.31): resolution: {integrity: sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - postcss: 8.4.27 + postcss: 8.4.31 dev: false - /postcss@8.4.27: - resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.6 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 @@ -8049,11 +8623,13 @@ packages: engines: {node: '>=4'} dev: false - /prism-react-renderer@1.3.5(react@18.2.0): - resolution: {integrity: sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==} + /prism-react-renderer@2.2.0(react@18.2.0): + resolution: {integrity: sha512-j4AN0VkEr72598+47xDvpzeYyeh/wPPRNTt9nJFZqIZUxwGKwYqYgt7RVigZ3ZICJWJWN84KEuMKPNyypyhNIw==} peerDependencies: - react: '>=0.14.9' + react: '>=16.0.0' dependencies: + '@types/prismjs': 1.26.3 + clsx: 1.2.1 react: 18.2.0 dev: false @@ -8087,8 +8663,8 @@ packages: object-assign: 4.1.1 react-is: 16.13.1 - /property-information@6.2.0: - resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} + /property-information@6.4.0: + resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==} dev: false /proto-list@1.2.4: @@ -8103,12 +8679,19 @@ packages: ipaddr.js: 1.9.1 dev: false + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: false - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} /pupa@3.1.0: @@ -8129,6 +8712,10 @@ packages: side-channel: 1.0.4 dev: false + /qs@6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -8187,7 +8774,7 @@ packages: pure-color: 1.3.0 dev: false - /react-dev-utils@12.0.1(typescript@5.1.6)(webpack@5.82.1): + /react-dev-utils@12.0.1(typescript@5.2.2)(webpack@5.89.0): resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -8197,16 +8784,16 @@ packages: typescript: optional: true dependencies: - '@babel/code-frame': 7.21.4 + '@babel/code-frame': 7.22.13 address: 1.2.2 - browserslist: 4.21.5 + browserslist: 4.22.1 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(typescript@5.1.6)(webpack@5.82.1) + fork-ts-checker-webpack-plugin: 6.5.3(typescript@5.2.2)(webpack@5.89.0) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -8221,8 +8808,8 @@ packages: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - typescript: 5.1.6 - webpack: 5.82.1 + typescript: 5.2.2 + webpack: 5.89.0 transitivePeerDependencies: - eslint - supports-color @@ -8238,19 +8825,12 @@ packages: react: 18.2.0 scheduler: 0.23.0 - /react-easy-swipe@0.0.21: - resolution: {integrity: sha512-OeR2jAxdoqUMHIn/nS9fgreI5hSpgGoL5ezdal4+oO7YSSgJR8ga+PkYGJrSrJ9MKlPcQjMQXnketrD7WNmNsg==} - engines: {node: '>= 6'} - dependencies: - prop-types: 15.8.1 - dev: false - /react-error-overlay@6.0.11: resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} dev: false - /react-fast-compare@3.2.1: - resolution: {integrity: sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==} + /react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} /react-helmet-async@1.3.0(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} @@ -8258,16 +8838,16 @@ packages: react: ^16.6.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.23.2 invariant: 2.2.4 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-fast-compare: 3.2.1 + react-fast-compare: 3.2.2 shallowequal: 1.1.0 - /react-icons@4.10.1(react@18.2.0): - resolution: {integrity: sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==} + /react-icons@4.12.0(react@18.2.0): + resolution: {integrity: sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==} peerDependencies: react: '*' dependencies: @@ -8277,45 +8857,20 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - /react-json-view@1.21.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==} - peerDependencies: - react: ^17.0.0 || ^16.3.0 || ^15.5.4 - react-dom: ^17.0.0 || ^16.3.0 || ^15.5.4 - dependencies: - flux: 4.0.4(react@18.2.0) - react: 18.2.0 - react-base16-styling: 0.6.0 - react-dom: 18.2.0(react@18.2.0) - react-lifecycles-compat: 3.0.4 - react-textarea-autosize: 8.4.1(@types/react@18.2.18)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - - encoding - dev: false - /react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} dev: false - /react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@5.5.2)(webpack@5.82.1): + /react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@5.5.2)(webpack@5.89.0): resolution: {integrity: sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==} engines: {node: '>=10.13.0'} peerDependencies: react-loadable: '*' webpack: '>=4.41.1 || 5.x' dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.23.2 react-loadable: /@docusaurus/react-loadable@5.5.2(react@18.2.0) - webpack: 5.82.1 - dev: false - - /react-responsive-carousel@3.2.23: - resolution: {integrity: sha512-pqJLsBaKHWJhw/ItODgbVoziR2z4lpcJg+YwmRlSk4rKH32VE633mAtZZ9kDXjy4wFO+pgUZmDKPsPe1fPmHCg==} - dependencies: - classnames: 2.3.2 - prop-types: 15.8.1 - react-easy-swipe: 0.0.21 + webpack: 5.89.0 dev: false /react-router-config@5.1.1(react-router@5.3.4)(react@18.2.0): @@ -8324,7 +8879,7 @@ packages: react: '>=15' react-router: '>=5' dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.23.2 react: 18.2.0 react-router: 5.3.4(react@18.2.0) dev: false @@ -8334,7 +8889,7 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.23.2 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -8349,7 +8904,7 @@ packages: peerDependencies: react: '>=15' dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.23.2 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -8361,16 +8916,16 @@ packages: tiny-warning: 1.0.3 dev: false - /react-textarea-autosize@8.4.1(@types/react@18.2.18)(react@18.2.0): - resolution: {integrity: sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==} + /react-textarea-autosize@8.3.4(@types/react@18.2.37)(react@18.2.0): + resolution: {integrity: sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.23.2 react: 18.2.0 use-composed-ref: 1.3.0(react@18.2.0) - use-latest: 1.2.1(@types/react@18.2.18)(react@18.2.0) + use-latest: 1.2.1(@types/react@18.2.37)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -8417,11 +8972,18 @@ packages: resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} dev: false + /readline2@1.0.1: + resolution: {integrity: sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==} + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + mute-stream: 0.0.5 + /rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} dependencies: - resolve: 1.22.4 + resolve: 1.22.8 dev: false /recursive-readdir@2.2.3: @@ -8431,8 +8993,8 @@ packages: minimatch: 3.1.2 dev: false - /regenerate-unicode-properties@10.1.0: - resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} engines: {node: '>=4'} dependencies: regenerate: 1.4.2 @@ -8442,13 +9004,16 @@ packages: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: false - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - /regenerator-transform@0.15.1: - resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + /regenerator-runtime@0.9.6: + resolution: {integrity: sha512-D0Y/JJ4VhusyMOd/o25a3jdUqN/bC85EFsaoL9Oqmy/O4efCh+xhp7yj2EEOsj974qvMkcW8AwUzJ1jB/MbxCw==} + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.21.5 + '@babel/runtime': 7.23.2 dev: false /regexpu-core@5.3.2: @@ -8457,7 +9022,7 @@ packages: dependencies: '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.0 + regenerate-unicode-properties: 10.1.1 regjsparser: 0.9.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 @@ -8484,12 +9049,12 @@ packages: jsesc: 0.5.0 dev: false - /rehype-raw@6.1.1: - resolution: {integrity: sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==} + /rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} dependencies: - '@types/hast': 2.3.4 - hast-util-raw: 7.2.3 - unified: 10.1.2 + '@types/hast': 3.0.3 + hast-util-raw: 9.0.1 + vfile: 6.0.1 dev: false /relateurl@0.2.7: @@ -8497,70 +9062,88 @@ packages: engines: {node: '>= 0.10'} dev: false - /remark-comment@1.0.0: - resolution: {integrity: sha512-k8YPo5MGvl8l4gGxOH6Zk4Fa2AhDACN5eqKnKZcHDORZQS15hlnezlBHj2lqyDiqzApNmYOMTibkEJbMSKU25w==} + /remark-directive@3.0.0: + resolution: {integrity: sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==} dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - dev: false - - /remark-directive@2.0.1: - resolution: {integrity: sha512-oosbsUAkU/qmUE78anLaJePnPis4ihsE7Agp0T/oqTzvTea8pOiaYEtfInU/+xMOVTS9PN5AhGOiaIVe4GD8gw==} - dependencies: - '@types/mdast': 3.0.11 - mdast-util-directive: 2.2.4 - micromark-extension-directive: 2.2.1 - unified: 10.1.2 + '@types/mdast': 4.0.3 + mdast-util-directive: 3.0.0 + micromark-extension-directive: 3.0.0 + unified: 11.0.4 transitivePeerDependencies: - supports-color dev: false - /remark-emoji@2.2.0: - resolution: {integrity: sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==} + /remark-emoji@4.0.1: + resolution: {integrity: sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - emoticon: 3.2.0 - node-emoji: 1.11.0 - unist-util-visit: 2.0.3 + '@types/mdast': 4.0.3 + emoticon: 4.0.1 + mdast-util-find-and-replace: 3.0.1 + node-emoji: 2.1.0 + unified: 11.0.4 dev: false - /remark-gfm@3.0.1: - resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + /remark-frontmatter@5.0.0: + resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} dependencies: - '@types/mdast': 3.0.11 - mdast-util-gfm: 2.0.2 - micromark-extension-gfm: 2.0.3 - unified: 10.1.2 + '@types/mdast': 4.0.3 + mdast-util-frontmatter: 2.0.1 + micromark-extension-frontmatter: 2.0.0 + unified: 11.0.4 transitivePeerDependencies: - supports-color dev: false - /remark-mdx@2.3.0: - resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + /remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} dependencies: - mdast-util-mdx: 2.0.1 - micromark-extension-mdxjs: 1.0.1 + '@types/mdast': 4.0.3 + mdast-util-gfm: 3.0.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.4 transitivePeerDependencies: - supports-color dev: false - /remark-parse@10.0.2: - resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + /remark-mdx@3.0.0: + resolution: {integrity: sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==} dependencies: - '@types/mdast': 3.0.11 - mdast-util-from-markdown: 1.3.1 - unified: 10.1.2 + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color dev: false - /remark-rehype@10.1.0: - resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} dependencies: - '@types/hast': 2.3.4 - '@types/mdast': 3.0.11 - mdast-util-to-hast: 12.3.0 - unified: 10.1.2 + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + micromark-util-types: 2.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-rehype@11.0.0: + resolution: {integrity: sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==} + dependencies: + '@types/hast': 3.0.3 + '@types/mdast': 4.0.3 + mdast-util-to-hast: 13.0.2 + unified: 11.0.4 + vfile: 6.0.1 + dev: false + + /remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-to-markdown: 2.1.0 + unified: 11.0.4 dev: false /renderkid@3.0.0: @@ -8573,6 +9156,41 @@ packages: strip-ansi: 6.0.1 dev: false + /request-promise@3.0.0: + resolution: {integrity: sha512-wVGUX+BoKxYsavTA72i6qHcyLbjzM4LR4y/AmDCqlbuMAursZdDWO7PmgbGAUvD2SeEJ5iB99VSq/U51i/DNbw==} + engines: {node: '>=0.10.0'} + deprecated: request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 + dependencies: + bluebird: 3.7.2 + lodash: 4.17.21 + request: 2.88.2 + + /request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -8599,11 +9217,11 @@ packages: resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} dev: false - /resolve@1.22.4: - resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -8614,6 +9232,13 @@ packages: lowercase-keys: 3.0.0 dev: false + /restore-cursor@1.0.1: + resolution: {integrity: sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==} + engines: {node: '>=0.10.0'} + dependencies: + exit-hook: 1.1.1 + onetime: 1.1.0 + /retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -8623,6 +9248,12 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.3 + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -8630,39 +9261,30 @@ packages: glob: 7.2.3 dev: false - /robust-predicates@3.0.1: - resolution: {integrity: sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==} + /robust-predicates@3.0.2: + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} dev: false - /rome@12.1.3: - resolution: {integrity: sha512-e+ff72hxDpe/t5/Us7YRBVw3PBET7SeczTQNn6tvrWdrCaAw3qOukQQ+tDCkyFtS4yGsnhjrJbm43ctNbz27Yg==} - engines: {node: '>=14.*'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@rometools/cli-darwin-arm64': 12.1.3 - '@rometools/cli-darwin-x64': 12.1.3 - '@rometools/cli-linux-arm64': 12.1.3 - '@rometools/cli-linux-x64': 12.1.3 - '@rometools/cli-win32-arm64': 12.1.3 - '@rometools/cli-win32-x64': 12.1.3 - dev: true - - /rtl-detect@1.0.4: - resolution: {integrity: sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==} + /rtl-detect@1.1.2: + resolution: {integrity: sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==} dev: false - /rtlcss@4.1.0: - resolution: {integrity: sha512-W+N4hh0nVqVrrn3mRkHakxpB+c9cQ4CRT67O39kgA+1DjyhrdsqyCqIuHXyvWaXn4/835n+oX3fYJCi4+G/06A==} + /rtlcss@4.1.1: + resolution: {integrity: sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ==} engines: {node: '>=12.0.0'} hasBin: true dependencies: escalade: 3.1.1 picocolors: 1.0.0 - postcss: 8.4.27 + postcss: 8.4.31 strip-json-comments: 3.1.1 dev: false + /run-async@0.1.0: + resolution: {integrity: sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==} + dependencies: + once: 1.4.0 + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -8672,10 +9294,13 @@ packages: resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} dev: false + /rx-lite@3.1.2: + resolution: {integrity: sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ==} + /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 dev: false /sade@1.8.1: @@ -8694,10 +9319,9 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - /sax@1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + /sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} dev: false /scheduler@0.23.0: @@ -8709,29 +9333,33 @@ packages: resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} engines: {node: '>= 8.9.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: false - /schema-utils@3.1.2: - resolution: {integrity: sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==} + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - /schema-utils@4.0.1: - resolution: {integrity: sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==} + /schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} dependencies: - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.15 ajv: 8.12.0 ajv-formats: 2.1.1(ajv@8.12.0) ajv-keywords: 5.1.0(ajv@8.12.0) dev: false + /search-insights@2.10.0: + resolution: {integrity: sha512-pQGrOE56QuTRmq4NzliRZe9rv914hBMBjOviuDliDHoIhmBGoyZRlFsPd4RprGGNC4PKdD2Jz54YN4Cmkb44mA==} + dev: false + /section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -8744,10 +9372,11 @@ packages: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} dev: false - /selfsigned@2.1.1: - resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} + /selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} dependencies: + '@types/node-forge': 1.3.9 node-forge: 1.3.1 dev: false @@ -8755,16 +9384,16 @@ packages: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} dependencies: - semver: 7.5.1 + semver: 7.5.4 dev: false - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true dev: false - /semver@7.5.1: - resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true dependencies: @@ -8837,6 +9466,16 @@ packages: - supports-color dev: false + /set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: false + /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: false @@ -8897,22 +9536,22 @@ packages: /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 dev: false /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: false - /sirv@1.0.19: - resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} + /sirv@2.0.3: + resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} engines: {node: '>= 10'} dependencies: - '@polka/url': 1.0.0-next.21 + '@polka/url': 1.0.0-next.23 mrmime: 1.0.1 - totalist: 1.1.0 + totalist: 3.0.1 dev: false /sisteransi@1.0.5: @@ -8925,9 +9564,16 @@ packages: hasBin: true dependencies: '@types/node': 17.0.45 - '@types/sax': 1.2.4 + '@types/sax': 1.2.7 arg: 5.0.2 - sax: 1.2.4 + sax: 1.3.0 + dev: false + + /skin-tone@2.0.0: + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} + engines: {node: '>=8'} + dependencies: + unicode-emoji-modifier-base: 1.0.0 dev: false /slash@3.0.0: @@ -9006,6 +9652,26 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false + /srcset@4.0.0: + resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} + engines: {node: '>=12'} + dev: false + + /sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + /stable@0.1.8: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' @@ -9021,10 +9687,18 @@ packages: engines: {node: '>= 0.8'} dev: false - /std-env@3.3.3: - resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} + /std-env@3.5.0: + resolution: {integrity: sha512-JGUEaALvL0Mf6JCfYnJOTcobY+Nc7sG/TemDRBqCA0wEr4DER7zDchaaixTlmOxAjG1uRJmX82EQcxwTQTkqVA==} dev: false + /string-width@1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -9040,7 +9714,7 @@ packages: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 dev: false /string_decoder@1.1.1: @@ -9071,6 +9745,12 @@ packages: is-regexp: 1.0.0 dev: false + /strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -9078,8 +9758,8 @@ packages: ansi-regex: 5.0.1 dev: false - /strip-ansi@7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 @@ -9105,32 +9785,25 @@ packages: engines: {node: '>=8'} dev: false - /style-to-object@0.4.2: - resolution: {integrity: sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==} + /style-to-object@0.4.4: + resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: inline-style-parser: 0.1.1 dev: false - /style-value-types@5.0.0: - resolution: {integrity: sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==} - dependencies: - hey-listen: 1.0.8 - tslib: 2.5.0 - dev: false - - /stylehacks@5.1.1(postcss@8.4.27): + /stylehacks@5.1.1(postcss@8.4.31): resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} engines: {node: ^10 || ^12 || >=14.0} peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.5 - postcss: 8.4.27 + browserslist: 4.22.1 + postcss: 8.4.31 postcss-selector-parser: 6.0.13 dev: false - /stylis@4.2.0: - resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + /stylis@4.3.0: + resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==} dev: false /sub-events@1.9.0: @@ -9151,6 +9824,10 @@ packages: pirates: 4.0.6 ts-interface-checker: 0.1.13 + /supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -9193,17 +9870,18 @@ packages: stable: 0.1.8 dev: false - /swr@2.2.0(react@18.2.0): - resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==} + /swr@2.2.4(react@18.2.0): + resolution: {integrity: sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 dependencies: + client-only: 0.0.1 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false - /tailwindcss@3.3.3: - resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} + /tailwindcss@3.3.5: + resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -9212,22 +9890,22 @@ packages: chokidar: 3.5.3 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.1 + fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.19.1 + jiti: 1.21.0 lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.27 - postcss-import: 15.1.0(postcss@8.4.27) - postcss-js: 4.0.1(postcss@8.4.27) - postcss-load-config: 4.0.1(postcss@8.4.27) - postcss-nested: 6.0.1(postcss@8.4.27) + postcss: 8.4.31 + postcss-import: 15.1.0(postcss@8.4.31) + postcss-js: 4.0.1(postcss@8.4.31) + postcss-load-config: 4.0.1(postcss@8.4.31) + postcss-nested: 6.0.1(postcss@8.4.31) postcss-selector-parser: 6.0.13 - resolve: 1.22.4 + resolve: 1.22.8 sucrase: 3.34.0 transitivePeerDependencies: - ts-node @@ -9241,8 +9919,8 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - /terser-webpack-plugin@5.3.8(webpack@5.82.1): - resolution: {integrity: sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==} + /terser-webpack-plugin@5.3.9(webpack@5.89.0): + resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -9257,20 +9935,20 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.20 jest-worker: 27.5.1 - schema-utils: 3.1.2 + schema-utils: 3.3.0 serialize-javascript: 6.0.1 - terser: 5.17.4 - webpack: 5.82.1 + terser: 5.24.0 + webpack: 5.89.0 - /terser@5.17.4: - resolution: {integrity: sha512-jcEKZw6UPrgugz/0Tuk/PVyLAPfMBJf5clnGueo45wTweoV8yh7Q7PEkhkJ5uuUbC7zAxEcG3tqNr1bstkQ8nw==} + /terser@5.24.0: + resolution: {integrity: sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.3 - acorn: 8.8.2 + '@jridgewell/source-map': 0.3.5 + acorn: 8.11.2 commander: 2.20.3 source-map-support: 0.5.21 @@ -9289,6 +9967,9 @@ packages: dependencies: any-promise: 1.3.0 + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + /thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: false @@ -9317,11 +9998,18 @@ packages: engines: {node: '>=0.6'} dev: false - /totalist@1.1.0: - resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} dev: false + /tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false @@ -9342,19 +10030,23 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: false - /tslib@2.6.1: - resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} - dev: false - - /tslog@4.9.0: - resolution: {integrity: sha512-YEb55YxukbKO0bSAAsd9eSnw6RA0e3jt3cniZ00wj9offySAbp20lBrjOh1OTn11L51r58V4kFy8h7dMPnbpmg==} + /tslog@4.9.2: + resolution: {integrity: sha512-wBM+LRJoNl34Bdu8mYEFxpvmOUedpNUwMNQB/NcuPIZKwdDde6xLHUev3bBjXQU7gdurX++X/YE7gLH8eXYsiQ==} engines: {node: '>=16'} dev: false + /tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + + /tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + /type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -9379,20 +10071,28 @@ packages: is-typedarray: 1.0.0 dev: false - /typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + /typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'} hasBin: true - /ua-parser-js@0.7.35: - resolution: {integrity: sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==} + /ua-parser-js@1.0.37: + resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} dev: false + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} dev: false + /unicode-emoji-modifier-base@1.0.0: + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} + engines: {node: '>=4'} + dev: false + /unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} @@ -9411,16 +10111,16 @@ packages: engines: {node: '>=4'} dev: false - /unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + /unified@11.0.4: + resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 3.0.2 bail: 2.0.2 + devlop: 1.1.0 extend: 3.0.2 - is-buffer: 2.0.5 is-plain-obj: 4.1.0 trough: 2.1.0 - vfile: 5.3.7 + vfile: 6.0.1 dev: false /unique-string@3.0.0: @@ -9430,77 +10130,60 @@ packages: crypto-random-string: 4.0.0 dev: false - /unist-util-generated@2.0.1: - resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} - dev: false - - /unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - dev: false - - /unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 3.0.2 dev: false - /unist-util-position-from-estree@1.1.2: - resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + /unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 3.0.2 dev: false - /unist-util-position@4.0.4: - resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 3.0.2 dev: false - /unist-util-remove-position@4.0.2: - resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + /unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} dependencies: - '@types/unist': 2.0.6 - unist-util-visit: 4.1.2 + '@types/unist': 3.0.2 + unist-util-visit: 5.0.0 dev: false /unist-util-stringify-position@3.0.3: resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: - '@types/unist': 2.0.6 + '@types/unist': 2.0.10 dev: false - /unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} dependencies: - '@types/unist': 2.0.6 - unist-util-is: 4.1.0 + '@types/unist': 3.0.2 dev: false - /unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} dependencies: - '@types/unist': 2.0.6 - unist-util-is: 5.2.1 + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 dev: false - /unist-util-visit@2.0.3: - resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} dependencies: - '@types/unist': 2.0.6 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 dev: false - /unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} - dependencies: - '@types/unist': 2.0.6 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - dev: false - - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} dev: false @@ -9509,13 +10192,17 @@ packages: engines: {node: '>= 0.8'} dev: false - /update-browserslist-db@1.0.10(browserslist@4.21.5): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + /untildify@3.0.3: + resolution: {integrity: sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==} + engines: {node: '>=4'} + + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.5 + browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 @@ -9534,7 +10221,7 @@ packages: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.5.1 + semver: 7.5.4 semver-diff: 4.0.0 xdg-basedir: 5.1.0 dev: false @@ -9542,9 +10229,9 @@ packages: /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 - /url-loader@4.1.1(file-loader@6.2.0)(webpack@5.82.1): + /url-loader@4.1.1(file-loader@6.2.0)(webpack@5.89.0): resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -9554,26 +10241,11 @@ packages: file-loader: optional: true dependencies: - file-loader: 6.2.0(webpack@5.82.1) + file-loader: 6.2.0(webpack@5.89.0) loader-utils: 2.0.4 mime-types: 2.1.35 - schema-utils: 3.1.2 - webpack: 5.82.1 - dev: false - - /url-search-params-polyfill@8.2.4: - resolution: {integrity: sha512-6jWpuCn5DD+bUuqQK7yIzhE2lxkrDhxCVAj+STTl0DuBGIr3F1ptaIo14KHlngU1w5XmvhwsmH4wzSyyrZK7Tg==} - dev: false - - /use-breakpoint@3.1.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zJ2a9sqdiOnsYwjZryOuq+SIDRP2vWsl7iWDUJ7Xid9t29zF1oLZjkEE+uRooPB/98YT+784rCFIvmKhV6VqLg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + schema-utils: 3.3.0 + webpack: 5.89.0 dev: false /use-composed-ref@1.3.0(react@18.2.0): @@ -9584,7 +10256,7 @@ packages: react: 18.2.0 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.18)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -9593,11 +10265,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.18 + '@types/react': 18.2.37 react: 18.2.0 dev: false - /use-latest@1.2.1(@types/react@18.2.18)(react@18.2.0): + /use-latest@1.2.1(@types/react@18.2.37)(react@18.2.0): resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' @@ -9606,9 +10278,9 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.18 + '@types/react': 18.2.37 react: 18.2.0 - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.18)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.37)(react@18.2.0) dev: false /use-sync-external-store@1.2.0(react@18.2.0): @@ -9619,6 +10291,12 @@ packages: react: 18.2.0 dev: false + /user-home@2.0.0: + resolution: {integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==} + engines: {node: '>=0.10.0'} + dependencies: + os-homedir: 1.0.2 + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -9635,13 +10313,18 @@ packages: engines: {node: '>= 0.4.0'} dev: false + /uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: false - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true dev: false @@ -9665,36 +10348,43 @@ packages: engines: {node: '>= 0.8'} dev: false - /vfile-location@4.1.0: - resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} + /verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} dependencies: - '@types/unist': 2.0.6 - vfile: 5.3.7 + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + + /vfile-location@5.0.2: + resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} + dependencies: + '@types/unist': 3.0.2 + vfile: 6.0.1 dev: false - /vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} dependencies: - '@types/unist': 2.0.6 - unist-util-stringify-position: 3.0.3 + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 dev: false - /vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + /vfile@6.0.1: + resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} dependencies: - '@types/unist': 2.0.6 - is-buffer: 2.0.5 - unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.4 + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 dev: false - /wait-on@7.0.1: - resolution: {integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==} + /wait-on@7.2.0: + resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==} engines: {node: '>=12.0.0'} hasBin: true dependencies: - axios: 0.27.2 - joi: 17.9.2 + axios: 1.6.2 + joi: 17.11.0 lodash: 4.17.21 minimist: 1.2.8 rxjs: 7.8.1 @@ -9727,42 +10417,49 @@ packages: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false - /webpack-bundle-analyzer@4.8.0: - resolution: {integrity: sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==} + /webpack-bundle-analyzer@4.9.1: + resolution: {integrity: sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==} engines: {node: '>= 10.13.0'} hasBin: true dependencies: '@discoveryjs/json-ext': 0.5.7 - acorn: 8.8.2 - acorn-walk: 8.2.0 - chalk: 4.1.2 + acorn: 8.11.2 + acorn-walk: 8.3.0 commander: 7.2.0 + escape-string-regexp: 4.0.0 gzip-size: 6.0.0 - lodash: 4.17.21 + is-plain-object: 5.0.0 + lodash.debounce: 4.0.8 + lodash.escape: 4.0.1 + lodash.flatten: 4.4.0 + lodash.invokemap: 4.6.0 + lodash.pullall: 4.2.0 + lodash.uniqby: 4.7.0 opener: 1.5.2 - sirv: 1.0.19 + picocolors: 1.0.0 + sirv: 2.0.3 ws: 7.5.9 transitivePeerDependencies: - bufferutil - utf-8-validate dev: false - /webpack-dev-middleware@5.3.3(webpack@5.82.1): + /webpack-dev-middleware@5.3.3(webpack@5.89.0): resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: colorette: 2.0.20 - memfs: 3.5.1 + memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.0.1 - webpack: 5.82.1 + schema-utils: 4.2.0 + webpack: 5.89.0 dev: false - /webpack-dev-server@4.15.0(webpack@5.82.1): - resolution: {integrity: sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==} + /webpack-dev-server@4.15.1(webpack@5.89.0): + resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} engines: {node: '>= 12.13.0'} hasBin: true peerDependencies: @@ -9774,13 +10471,13 @@ packages: webpack-cli: optional: true dependencies: - '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.5.0 - '@types/express': 4.17.17 - '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.1 - '@types/sockjs': 0.3.33 - '@types/ws': 8.5.4 + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.3 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.5 + '@types/sockjs': 0.3.36 + '@types/ws': 8.5.9 ansi-html-community: 0.0.8 bonjour-service: 1.1.1 chokidar: 3.5.3 @@ -9790,21 +10487,21 @@ packages: default-gateway: 6.0.3 express: 4.18.2 graceful-fs: 4.2.11 - html-entities: 2.3.3 - http-proxy-middleware: 2.0.6(@types/express@4.17.17) - ipaddr.js: 2.0.1 - launch-editor: 2.6.0 + html-entities: 2.4.0 + http-proxy-middleware: 2.0.6(@types/express@4.17.21) + ipaddr.js: 2.1.0 + launch-editor: 2.6.1 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 - schema-utils: 4.0.1 - selfsigned: 2.1.1 + schema-utils: 4.2.0 + selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.82.1 - webpack-dev-middleware: 5.3.3(webpack@5.82.1) - ws: 8.13.0 + webpack: 5.89.0 + webpack-dev-middleware: 5.3.3(webpack@5.89.0) + ws: 8.14.2 transitivePeerDependencies: - bufferutil - debug @@ -9812,19 +10509,20 @@ packages: - utf-8-validate dev: false - /webpack-merge@5.8.0: - resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} + /webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} engines: {node: '>=10.0.0'} dependencies: clone-deep: 4.0.1 + flat: 5.0.2 wildcard: 2.0.1 /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - /webpack@5.82.1: - resolution: {integrity: sha512-C6uiGQJ+Gt4RyHXXYt+v9f+SN1v83x68URwgxNQ98cvH8kxiuywWGP4XeNZ1paOzZ63aY3cTciCEQJNFUljlLw==} + /webpack@5.89.0: + resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -9833,17 +10531,17 @@ packages: webpack-cli: optional: true dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.1 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/wasm-edit': 1.11.6 '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.8.2 - acorn-import-assertions: 1.9.0(acorn@8.8.2) - browserslist: 4.21.5 + acorn: 8.11.2 + acorn-import-assertions: 1.9.0(acorn@8.11.2) + browserslist: 4.22.1 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.14.0 - es-module-lexer: 1.2.1 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.4.1 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -9852,9 +10550,9 @@ packages: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.1.2 + schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.8(webpack@5.82.1) + terser-webpack-plugin: 5.3.9(webpack@5.89.0) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -9862,7 +10560,7 @@ packages: - esbuild - uglify-js - /webpackbar@5.0.2(webpack@5.82.1): + /webpackbar@5.0.2(webpack@5.89.0): resolution: {integrity: sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==} engines: {node: '>=12'} peerDependencies: @@ -9871,8 +10569,8 @@ packages: chalk: 4.1.2 consola: 2.15.3 pretty-time: 1.1.0 - std-env: 3.3.3 - webpack: 5.82.1 + std-env: 3.5.0 + webpack: 5.89.0 dev: false /websocket-driver@0.7.4: @@ -9927,7 +10625,7 @@ packages: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 - strip-ansi: 7.0.1 + strip-ansi: 7.1.0 dev: false /wrappy@1.0.2: @@ -9955,8 +10653,8 @@ packages: optional: true dev: false - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -9977,7 +10675,7 @@ packages: resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} hasBin: true dependencies: - sax: 1.2.4 + sax: 1.3.0 dev: false /yallist@3.1.1: @@ -9993,8 +10691,8 @@ packages: engines: {node: '>= 6'} dev: false - /yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} engines: {node: '>= 14'} /yocto-queue@0.1.0: 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/src/components/BatteryCalculator.tsx b/src/components/BatteryCalculator.tsx deleted file mode 100644 index d83399c4..00000000 --- a/src/components/BatteryCalculator.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from "react"; - -export const BatteryCalculator = (): JSX.Element => { - return ( -
-
-

Battery Calculator

-
-
-
- - - - -
-
-
- -
-
- ); -}; diff --git a/src/components/Button.tsx b/src/components/Button.tsx deleted file mode 100644 index 798f9fe2..00000000 --- a/src/components/Button.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; - -import { HTMLMotionProps, motion } from "framer-motion"; - -export const Button = ({ children, ...props }: HTMLMotionProps<"div">) => { - return ( - -
{children}
-
- ); -}; diff --git a/src/components/ColorMode.tsx b/src/components/ColorMode.tsx index c7d651ad..ae020458 100644 --- a/src/components/ColorMode.tsx +++ b/src/components/ColorMode.tsx @@ -1,13 +1,13 @@ import React from "react"; export interface ColorModeProps { - children: React.ReactNode; + children: React.ReactNode; } export const Dark = ({ children }: ColorModeProps): JSX.Element => { - return
{children}
; + return
{children}
; }; export const Light = ({ children }: ColorModeProps): JSX.Element => { - return
{children}
; + return
{children}
; }; diff --git a/src/components/HardwareComponents.tsx b/src/components/HardwareComponents.tsx deleted file mode 100644 index e920a53e..00000000 --- a/src/components/HardwareComponents.tsx +++ /dev/null @@ -1,274 +0,0 @@ -// import React from 'react'; -// import data from '/docs/hardware/supported/devices.json' - -// function checkVersionOverrides(selectedDevice, version, value) { - -// var versionOverride = selectedDevice.versionOverrides[version] -// var device = selectedDevice -// var objectSegment = value.split('.') - -// while (objectSegment.length > 1) { -// console.log(objectSegment) -// let test = objectSegment.shift() -// console.log('test', test, 'og objectSegment', objectSegment) -// versionOverride = versionOverride[test] -// device = device[test] -// } -// if (versionOverride) { -// return versionOverride -// } else return device - -// // if (selectedDevice.versionOverrides[version][value]) { -// // return selectedDevice.versionOverrides[version][value] -// // } else { -// // console.log("no", selectedDevice, value, selectedDevice[value]) -// // return selectedDevice[value] -// // } -// } - -// export const MeshtasticFeatures = ({device, version}): JSX.Element => { - -// const selectedDevice = data[device] - -// return ( -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -//
-// Meshtastic Feature -// -// Device Support -//
-// Support Status -// -// {checkVersionOverrides(selectedDevice, version, 'supportStatus')} -//
-// Bluetooth -// -// {checkVersionOverrides(selectedDevice, version, "features.bluetoothCapable")} -//
-// Module - Canned Message -// -//
-// Module - External Notification -// -// VALUE -//
-// Module - Range Test -// -// VALUE -//
-// Module - Rotary Encoder -// -// VALUE -//
-// Module - Store and Forward -// -// VALUE -//
-// Module - Telemetry (aka Environmental Measurement) -// -// VALUE -//
-// Router - Always Powered -// -// VALUE -//
-// Router - Solar Powered -// -// VALUE -//
-// WiFi -// -// VALUE -//
-// ); -// }; - -// export const HardwareSpecifications = ({device, version}): JSX.Element => { - -// const selectedDevice = data[device] - -// return ( -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -//
-// Specification -// -// Value -//
-// Bluetooth -// -// VALUE -//
-// Bluetooth Antenna -// -// VALUE -//
-// Chipset -// -// VALUE -//
-// Driver -// -// VALUE -//
-// GPS -// -// VALUE -//
-// Flash -// -// VALUE -//
-// Frequency - 433MHz -// -// VALUE -//
-// Frequency - 868MHz -// -// VALUE -//
-// Frequency - 915MHz -// -// VALUE -//
-// Frequency - 923MHz -// -// VALUE -//
-// LoRa Transceiver -// -// VALUE -//
-// PSRAM -// -// VALUE -//
-// RAM -// -// VALUE -//
-// WiFi -// -// VALUE -//
-// WiFi Antenna -// -// VALUE -//
-// ); -// }; diff --git a/src/components/Modal.tsx b/src/components/Modal.tsx deleted file mode 100644 index 11e7ee2c..00000000 --- a/src/components/Modal.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from "react"; - -import { AnimatePresence, motion } from "framer-motion"; - -import { Dialog } from "@headlessui/react"; - -export interface ModalProps { - open: boolean; - onClose: () => void; - children: React.ReactNode; -} - -export const Modal = ({ open, onClose, children }: ModalProps): JSX.Element => { - return ( - - -
- - - - - -
-
-
-
- {children} -
-
-
-
-
-
- ); -}; diff --git a/src/components/PageLayout.tsx b/src/components/PageLayout.tsx index f1f3ecb5..2554bd29 100644 --- a/src/components/PageLayout.tsx +++ b/src/components/PageLayout.tsx @@ -3,23 +3,23 @@ import React from "react"; import Layout from "@theme/Layout"; export interface PageLayoutProps { - title: string; - description: string; - children: React.ReactNode; + title: string; + description: string; + children: React.ReactNode; } export const PageLayout = ({ - title, - description, - children, + title, + description, + children, }: PageLayoutProps): JSX.Element => { - return ( - - {children} - - ); + return ( + + {children} + + ); }; export interface ColorModeProps { - children: React.ReactNode; + children: React.ReactNode; } diff --git a/src/components/hardware/Badge.tsx b/src/components/hardware/Badge.tsx deleted file mode 100644 index a12a7c3e..00000000 --- a/src/components/hardware/Badge.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from "react"; - -export interface BadgeProps { - name: string; - color: string; - icon: React.ReactNode; -} - -export const Badge = ({ name, color, icon }: BadgeProps): JSX.Element => { - return ( -
-
{icon}
- {name} -
- ); -}; diff --git a/src/components/hardware/CardTab.tsx b/src/components/hardware/CardTab.tsx deleted file mode 100644 index 6b20e2e2..00000000 --- a/src/components/hardware/CardTab.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from "react"; - -import { Tab } from "@headlessui/react"; - -export interface CardTabProps { - title: string; -} - -export const CardTab = ({ title }: CardTabProps): JSX.Element => { - return ( - - `w-1/3 truncate rounded-md px-3 py-2 text-sm font-medium hover:bg-tertiary ${ - selected ? "bg-secondary shadow-md" : "" - }` - } - > - {title} - - ); -}; diff --git a/src/components/hardware/HardwareCard.tsx b/src/components/hardware/HardwareCard.tsx deleted file mode 100644 index c5261b24..00000000 --- a/src/components/hardware/HardwareCard.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from "react"; - -import { IDevice, Stability } from "../../data/device"; - -export interface HardwareCardProps { - device: IDevice; - setDevice: () => void; -} - -export const HardwareCard = ({ - device, - setDevice, -}: HardwareCardProps): JSX.Element => { - return ( -
  • { - setDevice(); - }} - onKeyDown={() => { - setDevice(); - }} - > -
    -
    - -
    - -
    -
    -
    -

    - {device.name} -

    -

    -

    -
    {Stability[device.misc.Stability]}
    -

    -
    -
    -
  • - ); -}; diff --git a/src/components/hardware/HardwareModal.tsx b/src/components/hardware/HardwareModal.tsx deleted file mode 100644 index d00c169e..00000000 --- a/src/components/hardware/HardwareModal.tsx +++ /dev/null @@ -1,173 +0,0 @@ -import React, { useState } from "react"; - -import { AnimatePresence, motion } from "framer-motion"; -import { FiBluetooth, FiChevronRight, FiWifi, FiX } from "react-icons/fi"; -import { useBreakpoint } from "use-breakpoint"; - -import { Tab } from "@headlessui/react"; -import type { IDevice } from "../../data/device"; - -import { Button } from "../../components/Button"; -import { BREAKPOINTS } from "../../utils/breakpoints"; -import { Modal } from "../Modal"; -import { Badge } from "./Badge"; -import { CardTab } from "./CardTab"; -import { InfoTab } from "./Tabs/InfoTab"; -import { PinoutTab } from "./Tabs/PinoutTab"; -import { PowerTab } from "./Tabs/PowerTab"; -import { VariantSelectButton } from "./VariantSelectButton"; - -export interface HardwareModal { - device: IDevice; - open: boolean; - close: () => void; -} - -export const HardwareModal = ({ - device, - open, - close, -}: HardwareModal): JSX.Element => { - const [hideDetails, setHideDetails] = useState(false); - const { breakpoint } = useBreakpoint(BREAKPOINTS, "md"); - - return ( - -
    - -
    -
    - - - -
    - -
    - - {!hideDetails && ( - <> - - - - -
    - {device.features.BLE && ( - } - /> - )} - {device.features.WiFi && ( - } - /> - )} -
    -
    - - )} -
    -
    -
    - -
    -
    -
    - -
    -
    - - - - - - - - - - - - -
    -
    - - ); -}; diff --git a/src/components/hardware/Tabs/InfoTab.tsx b/src/components/hardware/Tabs/InfoTab.tsx deleted file mode 100644 index 7878667e..00000000 --- a/src/components/hardware/Tabs/InfoTab.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from "react"; - -import { Tab } from "@headlessui/react"; - -import type { IDevice } from "../../../data/device"; - -export interface InfoTabProps { - device: IDevice; -} - -export const InfoTab = ({ device }: InfoTabProps): JSX.Element => { - return ( - -
    -
    -
    -
    - BLE/WiFi Version -
    -
    - - {device.specifications.BLEVersion} - - / - - {device.specifications.WiFiVersion} - -
    -
    -
    -
    - BLE/WiFi Antenna -
    -
    - - {device.specifications.BLEAntenna} - - / - - {device.specifications.WiFiAntenna} - -
    -
    -
    -
    -
    - ); -}; diff --git a/src/components/hardware/Tabs/PinoutTab.tsx b/src/components/hardware/Tabs/PinoutTab.tsx deleted file mode 100644 index 32d4b35b..00000000 --- a/src/components/hardware/Tabs/PinoutTab.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from "react"; - -import { Tab } from "@headlessui/react"; - -import type { IDevice } from "../../../data/device"; - -export interface PinoutTabProps { - device: IDevice; -} - -export const PinoutTab = ({ device }: PinoutTabProps): JSX.Element => { - return ( - -
    - {[ - device.pinout.slice(0, device.misc.pinoutSplit), - device.pinout.slice(device.misc.pinoutSplit, device.pinout.length), - ].map((group, index) => ( -
    - {group.map((pin, pinIndex) => ( -
    -
    - {pin.label} -
    - ))} -
    - ))} -
    - - ); -}; diff --git a/src/components/hardware/Tabs/PowerTab.tsx b/src/components/hardware/Tabs/PowerTab.tsx deleted file mode 100644 index aa33fe94..00000000 --- a/src/components/hardware/Tabs/PowerTab.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from "react"; - -import { Tab } from "@headlessui/react"; - -import type { IDevice } from "../../../data/device"; - -export interface PowerTabProps { - device: IDevice; -} - -export const PowerTab = (): JSX.Element => { - return Content 1; -}; diff --git a/src/components/hardware/VariantSelectButton.tsx b/src/components/hardware/VariantSelectButton.tsx deleted file mode 100644 index ebb4eed8..00000000 --- a/src/components/hardware/VariantSelectButton.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import React, { Fragment, useState } from "react"; - -import { motion } from "framer-motion"; -import { FiCheck } from "react-icons/fi"; -import { HiSelector } from "react-icons/hi"; - -import { Listbox, Transition } from "@headlessui/react"; -import type { Variant } from "../../data/device"; - -export interface VariantSelectButtonProps { - options: Variant[]; -} - -export const VariantSelectButton = ({ - options, -}: VariantSelectButtonProps): JSX.Element => { - const [selected, setSelected] = useState(options[options.length - 1]); - - return ( - - {({ open }) => ( - <> -
    - - - {selected.name} - - - - - - - - {options.map((variant, index) => ( - - `relative cursor-default select-none py-2 pl-3 pr-9 ${ - active ? "bg-secondary" : "" - }` - } - value={variant} - > - {({ selected, active }) => ( - <> - - {variant.name} - - - {selected ? ( - - - ) : null} - - )} - - ))} - - -
    - - )} -
    - ); -}; diff --git a/src/components/homepage/SocialCard.tsx b/src/components/homepage/SocialCard.tsx index 310b68d2..df145aa3 100644 --- a/src/components/homepage/SocialCard.tsx +++ b/src/components/homepage/SocialCard.tsx @@ -3,29 +3,29 @@ import React from "react"; import { FiExternalLink } from "react-icons/fi"; export interface SocialCardProps { - children: React.ReactNode; - color: string; - link: string; + children: React.ReactNode; + color: string; + link: string; } export const SocialCard = ({ - children, - color, - link, + children, + color, + link, }: SocialCardProps): JSX.Element => { - return ( -
    - {children} - - - -
    - ); + return ( +
    + {children} + + + +
    + ); }; diff --git a/src/components/tools/FrequencyCalculator.tsx b/src/components/tools/FrequencyCalculator.tsx index 82923759..db618ed4 100644 --- a/src/components/tools/FrequencyCalculator.tsx +++ b/src/components/tools/FrequencyCalculator.tsx @@ -1,345 +1,345 @@ -import React, { useEffect } from "react"; import { Protobuf, Types } from "@meshtastic/meshtasticjs"; +import React, { useEffect } from "react"; interface Region { - freq_start: number; - freq_end: number; - duty_cycle: number; - spacing: number; - power_limit: number; + freq_start: number; + freq_end: number; + duty_cycle: number; + spacing: number; + power_limit: number; } interface Modem { - bw: number; - cr: number; - sf: number; + bw: number; + cr: number; + sf: number; } const RegionData = new Map([ - [ - Protobuf.Config_LoRaConfig_RegionCode.US, - { - freq_start: 902.0, - freq_end: 928.0, - duty_cycle: 100, - spacing: 0, - power_limit: 30, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.EU_433, - { - freq_start: 433.0, - freq_end: 434.0, - duty_cycle: 10, - spacing: 0, - power_limit: 12, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.EU_868, - { - freq_start: 869.4, - freq_end: 869.65, - duty_cycle: 10, - spacing: 0, - power_limit: 27, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.CN, - { - freq_start: 470.0, - freq_end: 510.0, - duty_cycle: 100, - spacing: 0, - power_limit: 19, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.JP, - { - freq_start: 920.8, - freq_end: 927.8, - duty_cycle: 100, - spacing: 0, - power_limit: 16, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.ANZ, - { - freq_start: 915.0, - freq_end: 928.0, - duty_cycle: 100, - spacing: 0, - power_limit: 30, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.RU, - { - freq_start: 868.7, - freq_end: 869.2, - duty_cycle: 100, - spacing: 0, - power_limit: 20, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.KR, - { - freq_start: 920.0, - freq_end: 923.0, - duty_cycle: 100, - spacing: 0, - power_limit: 0, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.TW, - { - freq_start: 920.0, - freq_end: 925.0, - duty_cycle: 100, - spacing: 0, - power_limit: 0, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.IN, - { - freq_start: 865.0, - freq_end: 867.0, - duty_cycle: 100, - spacing: 0, - power_limit: 30, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.NZ_865, - { - freq_start: 864.0, - freq_end: 868.0, - duty_cycle: 100, - spacing: 0, - power_limit: 36, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.TH, - { - freq_start: 920.0, - freq_end: 925.0, - duty_cycle: 100, - spacing: 0, - power_limit: 16, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.UA_433, - { - freq_start: 433.0, - freq_end: 434.7, - duty_cycle: 10, - spacing: 0, - power_limit: 10, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.UA_868, - { - freq_start: 868.0, - freq_end: 868.6, - duty_cycle: 1, - spacing: 0, - power_limit: 14, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.LORA_24, - { - freq_start: 2400.0, - freq_end: 2483.5, - duty_cycle: 100, - spacing: 0, - power_limit: 10, - }, - ], - [ - Protobuf.Config_LoRaConfig_RegionCode.UNSET, - { - freq_start: 902.0, - freq_end: 928.0, - duty_cycle: 100, - spacing: 0, - power_limit: 30, - }, - ], + [ + Protobuf.Config_LoRaConfig_RegionCode.US, + { + freq_start: 902.0, + freq_end: 928.0, + duty_cycle: 100, + spacing: 0, + power_limit: 30, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.EU_433, + { + freq_start: 433.0, + freq_end: 434.0, + duty_cycle: 10, + spacing: 0, + power_limit: 12, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.EU_868, + { + freq_start: 869.4, + freq_end: 869.65, + duty_cycle: 10, + spacing: 0, + power_limit: 27, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.CN, + { + freq_start: 470.0, + freq_end: 510.0, + duty_cycle: 100, + spacing: 0, + power_limit: 19, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.JP, + { + freq_start: 920.8, + freq_end: 927.8, + duty_cycle: 100, + spacing: 0, + power_limit: 16, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.ANZ, + { + freq_start: 915.0, + freq_end: 928.0, + duty_cycle: 100, + spacing: 0, + power_limit: 30, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.RU, + { + freq_start: 868.7, + freq_end: 869.2, + duty_cycle: 100, + spacing: 0, + power_limit: 20, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.KR, + { + freq_start: 920.0, + freq_end: 923.0, + duty_cycle: 100, + spacing: 0, + power_limit: 0, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.TW, + { + freq_start: 920.0, + freq_end: 925.0, + duty_cycle: 100, + spacing: 0, + power_limit: 0, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.IN, + { + freq_start: 865.0, + freq_end: 867.0, + duty_cycle: 100, + spacing: 0, + power_limit: 30, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.NZ_865, + { + freq_start: 864.0, + freq_end: 868.0, + duty_cycle: 100, + spacing: 0, + power_limit: 36, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.TH, + { + freq_start: 920.0, + freq_end: 925.0, + duty_cycle: 100, + spacing: 0, + power_limit: 16, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.UA_433, + { + freq_start: 433.0, + freq_end: 434.7, + duty_cycle: 10, + spacing: 0, + power_limit: 10, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.UA_868, + { + freq_start: 868.0, + freq_end: 868.6, + duty_cycle: 1, + spacing: 0, + power_limit: 14, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.LORA_24, + { + freq_start: 2400.0, + freq_end: 2483.5, + duty_cycle: 100, + spacing: 0, + power_limit: 10, + }, + ], + [ + Protobuf.Config_LoRaConfig_RegionCode.UNSET, + { + freq_start: 902.0, + freq_end: 928.0, + duty_cycle: 100, + spacing: 0, + power_limit: 30, + }, + ], ]); const modemPresets = new Map([ - [ - Protobuf.Config_LoRaConfig_ModemPreset.SHORT_FAST, - { - bw: 250, - cr: 8, - sf: 7, - }, - ], - [ - Protobuf.Config_LoRaConfig_ModemPreset.SHORT_SLOW, - { - bw: 250, - cr: 8, - sf: 8, - }, - ], - [ - Protobuf.Config_LoRaConfig_ModemPreset.MEDIUM_FAST, - { - bw: 250, - cr: 8, - sf: 9, - }, - ], - [ - Protobuf.Config_LoRaConfig_ModemPreset.MEDIUM_SLOW, - { - bw: 250, - cr: 8, - sf: 10, - }, - ], - [ - Protobuf.Config_LoRaConfig_ModemPreset.LONG_FAST, - { - bw: 250, - cr: 8, - sf: 11, - }, - ], - [ - Protobuf.Config_LoRaConfig_ModemPreset.LONG_MODERATE, - { - bw: 125, - cr: 8, - sf: 11, - }, - ], - [ - Protobuf.Config_LoRaConfig_ModemPreset.LONG_SLOW, - { - bw: 125, - cr: 8, - sf: 12, - }, - ], - [ - Protobuf.Config_LoRaConfig_ModemPreset.VERY_LONG_SLOW, - { - bw: 62.5, - cr: 8, - sf: 12, - }, - ], + [ + Protobuf.Config_LoRaConfig_ModemPreset.SHORT_FAST, + { + bw: 250, + cr: 8, + sf: 7, + }, + ], + [ + Protobuf.Config_LoRaConfig_ModemPreset.SHORT_SLOW, + { + bw: 250, + cr: 8, + sf: 8, + }, + ], + [ + Protobuf.Config_LoRaConfig_ModemPreset.MEDIUM_FAST, + { + bw: 250, + cr: 8, + sf: 9, + }, + ], + [ + Protobuf.Config_LoRaConfig_ModemPreset.MEDIUM_SLOW, + { + bw: 250, + cr: 8, + sf: 10, + }, + ], + [ + Protobuf.Config_LoRaConfig_ModemPreset.LONG_FAST, + { + bw: 250, + cr: 8, + sf: 11, + }, + ], + [ + Protobuf.Config_LoRaConfig_ModemPreset.LONG_MODERATE, + { + bw: 125, + cr: 8, + sf: 11, + }, + ], + [ + Protobuf.Config_LoRaConfig_ModemPreset.LONG_SLOW, + { + bw: 125, + cr: 8, + sf: 12, + }, + ], + [ + Protobuf.Config_LoRaConfig_ModemPreset.VERY_LONG_SLOW, + { + bw: 62.5, + cr: 8, + sf: 12, + }, + ], ]); export const FrequencyCalculator = (): JSX.Element => { - const [modemPreset, setModemPreset] = - React.useState( - Protobuf.Config_LoRaConfig_ModemPreset.LONG_FAST, - ); - const [region, setRegion] = - React.useState( - Protobuf.Config_LoRaConfig_RegionCode.US, - ); - const [channel, setChannel] = React.useState( - Types.ChannelNumber.PRIMARY, - ); - const [numChannels, setNumChannels] = React.useState(0); - const [channelFrequency, setChannelFrequency] = React.useState(0); + const [modemPreset, setModemPreset] = + React.useState( + Protobuf.Config_LoRaConfig_ModemPreset.LONG_FAST, + ); + const [region, setRegion] = + React.useState( + Protobuf.Config_LoRaConfig_RegionCode.US, + ); + const [channel, setChannel] = React.useState( + Types.ChannelNumber.PRIMARY, + ); + const [numChannels, setNumChannels] = React.useState(0); + const [channelFrequency, setChannelFrequency] = React.useState(0); - useEffect(() => { - const selectedRegion = RegionData.get(region); - const selectedModemPreset = modemPresets.get(modemPreset); - const calculatedNumChannels = Math.floor( - (selectedRegion.freq_end - selectedRegion.freq_start) / - (selectedRegion.spacing + selectedModemPreset.bw / 1000), - ); + useEffect(() => { + const selectedRegion = RegionData.get(region); + const selectedModemPreset = modemPresets.get(modemPreset); + const calculatedNumChannels = Math.floor( + (selectedRegion.freq_end - selectedRegion.freq_start) / + (selectedRegion.spacing + selectedModemPreset.bw / 1000), + ); - setNumChannels(calculatedNumChannels); + setNumChannels(calculatedNumChannels); - let updatedChannel = channel; - if (updatedChannel >= calculatedNumChannels) { - updatedChannel = 0; - } + let updatedChannel = channel; + if (updatedChannel >= calculatedNumChannels) { + updatedChannel = 0; + } - setChannel(updatedChannel); + setChannel(updatedChannel); - setChannelFrequency( - selectedRegion.freq_start + - selectedModemPreset.bw / 2000 + - updatedChannel * (selectedModemPreset.bw / 1000), - ); - }, [modemPreset, region, channel]); + setChannelFrequency( + selectedRegion.freq_start + + selectedModemPreset.bw / 2000 + + updatedChannel * (selectedModemPreset.bw / 1000), + ); + }, [modemPreset, region, channel]); - return ( -
    -
    - - -
    -
    - - -
    -
    - - -
    + return ( +
    +
    + + +
    +
    + + +
    +
    + + +
    -
    - - -
    -
    - - -
    -
    - ); +
    + + +
    +
    + + +
    +
    + ); }; diff --git a/src/css/custom.css b/src/css/custom.css index e8d39885..645ca51b 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -212,3 +212,9 @@ h5 { h6 { font-size: var(--ifm-h6-font-size); } + +th, +td { + padding-left: 10px !important; + padding-right: 10px !important; +} \ No newline at end of file diff --git a/src/data/device.ts b/src/data/device.ts deleted file mode 100644 index 590abcd2..00000000 --- a/src/data/device.ts +++ /dev/null @@ -1,94 +0,0 @@ -export type DeepPartial = T extends object - ? { - [P in keyof T]?: DeepPartial; - } - : T; - -export enum UseCase { - Solar = 0, - Router = 1, - Portable = 2, -} - -enum PinUsage { - LoRa = 0, - GNSS = 1, -} - -export interface Pin { - offset: { - x: number; - y: number; - }; - name: string; - label: string; - usage?: PinUsage; -} - -export type DeviceName = "tbeam" | "techo"; - -export type BLEVersion = "4.2" | "5.0"; - -export type AntennaType = "Integrated"; - -export type Chipset = "ESP32" | "NRF52"; - -export type Frequency = 433 | 868 | 915 | 923; - -export type SerialAdapter = "CP210X" | "CH9102"; - -export type GNSSModule = "NEO-6M" | "NEO-8M"; - -export type LORAModule = "SX1276" | "SX1262"; - -export type Variant = DeepPartial> & { name: string }; - -export enum Stability { - Stable = 0, - Semi = 1, - Unstable = 2, - Broken = 3, -} - -export type Module = - | "cannedMessage" - | "externalNotification" - | "rangeTest" - | "rotaryEncoder" - | "storeAndForward" - | "telemetry"; - -export interface IDevice { - name: string; - misc: { - SuggestedUse: UseCase[]; - Stability: Stability; - Gradient: string; - pinoutSplit: number; - }; - images: { - Front: string; - Back: string; - }; - features: { - BLE: boolean; - WiFi: boolean; - Modules: Module[]; - }; - specifications: { - BLEVersion?: BLEVersion; - BLEAntenna?: AntennaType; - WiFiVersion?: string; - WiFiAntenna?: AntennaType; - Chipset: Chipset; - Driver: SerialAdapter; - GNSS?: GNSSModule; - FlashSize: number; - Frequencies: Frequency[]; - LoRa: LORAModule; - PSRAM: number; - RAM?: number; - }; - pinout: Pin[]; - variants: Variant[]; -} diff --git a/src/data/devices/heltec.ts b/src/data/devices/heltec.ts deleted file mode 100644 index 6a241cee..00000000 --- a/src/data/devices/heltec.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { IDevice, Stability, UseCase } from "../device"; - -export const heltec: IDevice = { - name: "Heltec", - misc: { - Stability: Stability.Unstable, - SuggestedUse: [UseCase.Portable], - Gradient: "bg-gradient-to-r from-pink-300 via-purple-300 to-indigo-400", - }, - images: { - Front: "/img/hardware/heltec-v2.png", - Back: "", - }, - features: { - BLE: true, - WiFi: true, - Modules: [ - "cannedMessage", - "externalNotification", - "rangeTest", - "rotaryEncoder", - "storeAndForward", - "telemetry", - ], - }, - specifications: { - BLEVersion: "4.2", - BLEAntenna: "Integrated", - WiFiVersion: "2.4GHz 802.11 b/g/n WPA/WPA2/WPA2-Enterprise/SPS", - WiFiAntenna: "Integrated", - Chipset: "ESP32", - Driver: "CH9102", - GNSS: "NEO-6M", - FlashSize: 4, - Frequencies: [433, 868, 915, 923], - LoRa: "SX1262", - PSRAM: 8, - RAM: undefined, - }, - variants: [ - { - name: "TBeam 0.7", - misc: { - Stability: Stability.Unstable, - }, - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.0", - specifications: { - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.1", - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - }, - }, - ], -}; diff --git a/src/data/devices/hydra.ts b/src/data/devices/hydra.ts deleted file mode 100644 index 438eae90..00000000 --- a/src/data/devices/hydra.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { IDevice, Stability, UseCase } from "../device"; - -export const hydra: IDevice = { - name: "Hydra", - misc: { - Stability: Stability.Stable, - SuggestedUse: [UseCase.Portable], - Gradient: "bg-gradient-to-r from-indigo-200 via-red-200 to-yellow-100", - }, - images: { - Front: "/img/hardware/Hydra-PCB.2.1.svg", - Back: "", - }, - features: { - BLE: true, - WiFi: true, - Modules: [ - "cannedMessage", - "externalNotification", - "rangeTest", - "rotaryEncoder", - "storeAndForward", - "telemetry", - ], - }, - specifications: { - BLEVersion: "4.2", - BLEAntenna: "Integrated", - WiFiVersion: "2.4GHz 802.11 b/g/n WPA/WPA2/WPA2-Enterprise/SPS", - WiFiAntenna: "Integrated", - Chipset: "ESP32", - Driver: "CH9102", - GNSS: "NEO-6M", - FlashSize: 4, - Frequencies: [433, 868, 915, 923], - LoRa: "SX1262", - PSRAM: 8, - RAM: undefined, - }, - variants: [ - { - name: "TBeam 0.7", - misc: { - Stability: Stability.Unstable, - }, - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.0", - specifications: { - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.1", - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - }, - }, - ], -}; diff --git a/src/data/devices/nano_g1.ts b/src/data/devices/nano_g1.ts deleted file mode 100644 index 02edcfd9..00000000 --- a/src/data/devices/nano_g1.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { IDevice, Stability, UseCase } from "../device"; - -export const nano_g1: IDevice = { - name: "Nano G1", - misc: { - Stability: Stability.Unstable, - SuggestedUse: [UseCase.Portable], - Gradient: "bg-gradient-to-r from-green-200 to-green-500", - }, - images: { - Front: "/img/hardware/nano_g1_front.svg", - Back: "/img/hardware/nano_g1_back.svg", - }, - features: { - BLE: true, - WiFi: true, - Modules: [ - "cannedMessage", - "externalNotification", - "rangeTest", - "rotaryEncoder", - "storeAndForward", - "telemetry", - ], - }, - specifications: { - BLEVersion: "4.2", - BLEAntenna: "Integrated", - WiFiVersion: "2.4GHz 802.11 b/g/n WPA/WPA2/WPA2-Enterprise/SPS", - WiFiAntenna: "Integrated", - Chipset: "ESP32", - Driver: "CH9102", - GNSS: "NEO-6M", - FlashSize: 4, - Frequencies: [433, 868, 915, 923], - LoRa: "SX1262", - PSRAM: 8, - RAM: undefined, - }, - variants: [ - { - name: "TBeam 0.7", - misc: { - Stability: Stability.Unstable, - }, - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.0", - specifications: { - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.1", - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - }, - }, - ], -}; diff --git a/src/data/devices/rak19001.ts b/src/data/devices/rak19001.ts deleted file mode 100644 index 48100e5a..00000000 --- a/src/data/devices/rak19001.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { IDevice, Stability, UseCase } from "../device"; - -export const rak19001: IDevice = { - name: "WisBlock 19001", - misc: { - Stability: Stability.Stable, - SuggestedUse: [UseCase.Portable], - Gradient: "bg-gradient-to-r from-indigo-300 to-purple-400", - }, - images: { - Front: "/img/hardware/rak/RAK19001.png", - Back: "", - }, - features: { - BLE: true, - WiFi: true, - Modules: [ - "cannedMessage", - "externalNotification", - "rangeTest", - "rotaryEncoder", - "storeAndForward", - "telemetry", - ], - }, - specifications: { - BLEVersion: "4.2", - BLEAntenna: "Integrated", - WiFiVersion: "2.4GHz 802.11 b/g/n WPA/WPA2/WPA2-Enterprise/SPS", - WiFiAntenna: "Integrated", - Chipset: "ESP32", - Driver: "CH9102", - GNSS: "NEO-6M", - FlashSize: 4, - Frequencies: [433, 868, 915, 923], - LoRa: "SX1262", - PSRAM: 8, - RAM: undefined, - }, - variants: [ - { - name: "TBeam 0.7", - misc: { - Stability: Stability.Unstable, - }, - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.0", - specifications: { - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.1", - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - }, - }, - ], -}; diff --git a/src/data/devices/rak19003.ts b/src/data/devices/rak19003.ts deleted file mode 100644 index fc88835e..00000000 --- a/src/data/devices/rak19003.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { IDevice, Stability, UseCase } from "../device"; - -export const rak19003: IDevice = { - name: "WisBlock 19003", - misc: { - Stability: Stability.Stable, - SuggestedUse: [UseCase.Portable], - Gradient: "bg-gradient-to-b from-orange-500 to-yellow-300", - }, - images: { - Front: "/img/hardware/rak/RAK19003.png", - Back: "", - }, - features: { - BLE: true, - WiFi: true, - Modules: [ - "cannedMessage", - "externalNotification", - "rangeTest", - "rotaryEncoder", - "storeAndForward", - "telemetry", - ], - }, - specifications: { - BLEVersion: "4.2", - BLEAntenna: "Integrated", - WiFiVersion: "2.4GHz 802.11 b/g/n WPA/WPA2/WPA2-Enterprise/SPS", - WiFiAntenna: "Integrated", - Chipset: "ESP32", - Driver: "CH9102", - GNSS: "NEO-6M", - FlashSize: 4, - Frequencies: [433, 868, 915, 923], - LoRa: "SX1262", - PSRAM: 8, - RAM: undefined, - }, - variants: [ - { - name: "TBeam 0.7", - misc: { - Stability: Stability.Unstable, - }, - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.0", - specifications: { - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.1", - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - }, - }, - ], -}; diff --git a/src/data/devices/tbeam.ts b/src/data/devices/tbeam.ts deleted file mode 100644 index f74d19ed..00000000 --- a/src/data/devices/tbeam.ts +++ /dev/null @@ -1,277 +0,0 @@ -import { IDevice, Stability, UseCase } from "../device"; - -export const tbeam: IDevice = { - name: "T-Beam", - misc: { - Stability: Stability.Stable, - SuggestedUse: [UseCase.Portable], - Gradient: "bg-gradient-to-r from-pink-500 via-red-500 to-yellow-500", - pinoutSplit: 13, - }, - images: { - Front: "/img/hardware/tbeam-v1.1.svg", - Back: "", - }, - features: { - BLE: true, - WiFi: true, - Modules: [ - "cannedMessage", - "externalNotification", - "rangeTest", - "rotaryEncoder", - "storeAndForward", - "telemetry", - ], - }, - specifications: { - BLEVersion: "4.2", - BLEAntenna: "Integrated", - WiFiVersion: "2.4GHz 802.11 b/g/n WPA/WPA2/WPA2-Enterprise/SPS", - WiFiAntenna: "Integrated", - Chipset: "ESP32", - Driver: "CH9102", - GNSS: "NEO-6M", - FlashSize: 4, - Frequencies: [433, 868, 915, 923], - LoRa: "SX1262", - PSRAM: 8, - RAM: undefined, - }, - variants: [ - { - name: "TBeam 0.7", - misc: { - Stability: Stability.Unstable, - }, - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.0", - specifications: { - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.1", - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - }, - }, - ], - pinout: [ - { - label: "VP", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "VN", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "RST", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "15", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "35", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "32", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "33", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "25", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "14", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "13", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "2", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "GND", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "5V", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "TX", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "RX", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "23", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "4", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "0", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "GND", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "3V3", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "GND", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "22", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "21", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "3.3V", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "LoRa2", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - { - label: "LoRa1", - name: "IO1", - offset: { - x: 5, - y: 5, - }, - }, - ], -}; diff --git a/src/data/devices/techo.ts b/src/data/devices/techo.ts deleted file mode 100644 index 0666b345..00000000 --- a/src/data/devices/techo.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { IDevice, Stability, UseCase } from "../device"; - -export const techo: IDevice = { - name: "T-Echo", - misc: { - Stability: Stability.Semi, - SuggestedUse: [UseCase.Portable], - Gradient: "bg-gradient-to-r from-gray-700 via-gray-900 to-black", - }, - images: { - Front: "/img/hardware/t-echo-lilygo.jpg", - Back: "", - }, - features: { - BLE: true, - WiFi: true, - Modules: [ - "cannedMessage", - "externalNotification", - "rangeTest", - "rotaryEncoder", - "storeAndForward", - "telemetry", - ], - }, - specifications: { - BLEVersion: "4.2", - BLEAntenna: "Integrated", - WiFiVersion: "2.4GHz 802.11 b/g/n WPA/WPA2/WPA2-Enterprise/SPS", - WiFiAntenna: "Integrated", - Chipset: "ESP32", - Driver: "CH9102", - GNSS: "NEO-6M", - FlashSize: 4, - Frequencies: [433, 868, 915, 923], - LoRa: "SX1262", - PSRAM: 8, - RAM: undefined, - }, - variants: [ - { - name: "TBeam 0.7", - misc: { - Stability: Stability.Unstable, - }, - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.0", - specifications: { - Frequencies: [868, 915], - }, - }, - { - name: "TBeam 1.1", - specifications: { - Driver: "CP210X", - GNSS: "NEO-6M", - }, - }, - ], -}; diff --git a/src/data/region.ts b/src/data/region.ts deleted file mode 100644 index f8ac51a7..00000000 --- a/src/data/region.ts +++ /dev/null @@ -1,11 +0,0 @@ -export interface IRegion { - name: string; - freqStart: number; - freqEnd: number; - dutyCycle: number; - spacing: number; - powerLimit: number; - audioPermitted: boolean; - frequencySwitching: boolean; - wideLora: boolean; -} diff --git a/src/data/regions/anz.ts b/src/data/regions/anz.ts deleted file mode 100644 index 530388e4..00000000 --- a/src/data/regions/anz.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const ANZ: IRegion = { - name: "ANZ", - freqStart: 915.0, - freqEnd: 928.0, - dutyCycle: 100, - spacing: 0, - powerLimit: 30, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/cn.ts b/src/data/regions/cn.ts deleted file mode 100644 index b2a26450..00000000 --- a/src/data/regions/cn.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const CN: IRegion = { - name: "CN", - freqStart: 470.0, - freqEnd: 510.0, - dutyCycle: 100, - spacing: 0, - powerLimit: 19, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/eu_433.ts b/src/data/regions/eu_433.ts deleted file mode 100644 index 69aca39c..00000000 --- a/src/data/regions/eu_433.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const EU_433: IRegion = { - name: "EU_433", - freqStart: 433.0, - freqEnd: 434.0, - dutyCycle: 10, - spacing: 0, - powerLimit: 12, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/eu_868.ts b/src/data/regions/eu_868.ts deleted file mode 100644 index 42b3e916..00000000 --- a/src/data/regions/eu_868.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const EU_868: IRegion = { - name: "EU_868", - freqStart: 869.4, - freqEnd: 869.65, - dutyCycle: 10, - spacing: 0, - powerLimit: 27, - audioPermitted: false, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/in.ts b/src/data/regions/in.ts deleted file mode 100644 index 822f8f04..00000000 --- a/src/data/regions/in.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const IN: IRegion = { - name: "IN", - freqStart: 865.0, - freqEnd: 867.0, - dutyCycle: 100, - spacing: 0, - powerLimit: 30, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/jp.ts b/src/data/regions/jp.ts deleted file mode 100644 index 9fe848f4..00000000 --- a/src/data/regions/jp.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const JP: IRegion = { - name: "JP", - freqStart: 920.8, - freqEnd: 927.8, - dutyCycle: 100, - spacing: 0, - powerLimit: 16, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/kr.ts b/src/data/regions/kr.ts deleted file mode 100644 index 3a294977..00000000 --- a/src/data/regions/kr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const KR: IRegion = { - name: "KR", - freqStart: 920.0, - freqEnd: 925.0, - dutyCycle: 100, - spacing: 0, - powerLimit: 0, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/lora_24.ts b/src/data/regions/lora_24.ts deleted file mode 100644 index 84a06179..00000000 --- a/src/data/regions/lora_24.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const LORA_24: IRegion = { - name: "LORA_24", - freqStart: 2400.0, - freqEnd: 2483.5, - dutyCycle: 100, - spacing: 0, - powerLimit: 10, - audioPermitted: true, - frequencySwitching: false, - wideLora: true, -}; diff --git a/src/data/regions/nz_865.ts b/src/data/regions/nz_865.ts deleted file mode 100644 index e3ae353d..00000000 --- a/src/data/regions/nz_865.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const NZ_865: IRegion = { - name: "NZ_865", - freqStart: 864.0, - freqEnd: 868.0, - dutyCycle: 100, - spacing: 0, - powerLimit: 36, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/ru.ts b/src/data/regions/ru.ts deleted file mode 100644 index 954df39d..00000000 --- a/src/data/regions/ru.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const RU: IRegion = { - name: "RU", - freqStart: 868.7, - freqEnd: 869.2, - dutyCycle: 100, - spacing: 0, - powerLimit: 20, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/th.ts b/src/data/regions/th.ts deleted file mode 100644 index d6cb0511..00000000 --- a/src/data/regions/th.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const TH: IRegion = { - name: "TH", - freqStart: 920.0, - freqEnd: 925.0, - dutyCycle: 100, - spacing: 0, - powerLimit: 16, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/tw.ts b/src/data/regions/tw.ts deleted file mode 100644 index e2c6497b..00000000 --- a/src/data/regions/tw.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const TW: IRegion = { - name: "TW", - freqStart: 920.0, - freqEnd: 925.0, - dutyCycle: 100, - spacing: 0, - powerLimit: 0, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/ua_433.ts b/src/data/regions/ua_433.ts deleted file mode 100644 index fdff6ede..00000000 --- a/src/data/regions/ua_433.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const UA_433: IRegion = { - name: "UA_433", - freqStart: 433.0, - freqEnd: 434.7, - dutyCycle: 10, - spacing: 0, - powerLimit: 10, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/ua_868.ts b/src/data/regions/ua_868.ts deleted file mode 100644 index 88b47287..00000000 --- a/src/data/regions/ua_868.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const UA_868: IRegion = { - name: "UA_868", - freqStart: 868.0, - freqEnd: 868.6, - dutyCycle: 1, - spacing: 0, - powerLimit: 14, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/unset.ts b/src/data/regions/unset.ts deleted file mode 100644 index 119ea6e0..00000000 --- a/src/data/regions/unset.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const UNSET: IRegion = { - name: "UNSET", - freqStart: 902.0, - freqEnd: 928.0, - dutyCycle: 100, - spacing: 0, - powerLimit: 30, - audioPermitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/data/regions/us.ts b/src/data/regions/us.ts deleted file mode 100644 index 56d538f2..00000000 --- a/src/data/regions/us.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IRegion } from "../region"; - -export const US: IRegion = { - name: "US", - freqStart: 902.0, - freqEnd: 928.0, - dutyCycle: 100, - spacing: 0, - powerLimit: 30, - audioPrmitted: true, - frequencySwitching: false, - wideLora: false, -}; diff --git a/src/hooks/useFilteredNetworks.tsx b/src/hooks/useFilteredNetworks.tsx deleted file mode 100644 index 1ddf7864..00000000 --- a/src/hooks/useFilteredNetworks.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from "react"; - -import { Showcase } from "../utils/apiTypes"; -import { useSelectedTags } from "./useSelectedTags"; - -const filterNetworks = ( - showcaseNetworks: Showcase[], - selectedTags: string[], -) => { - if (selectedTags.length === 0) { - return showcaseNetworks; - } - return showcaseNetworks.filter((showcaseNetwork) => { - if (showcaseNetwork.tags.length === 0) { - return false; - } - return selectedTags.every((queryTag) => - showcaseNetwork.tags.find((searchTag) => searchTag.label === queryTag), - ); - }); -}; - -export const useFilteredNetworks = (networks: Showcase[]) => { - const selectedTags = useSelectedTags(); - return React.useMemo( - () => filterNetworks(networks, selectedTags), - [selectedTags], - ); -}; diff --git a/src/hooks/useSelectedTags.tsx b/src/hooks/useSelectedTags.tsx deleted file mode 100644 index 8b387ae1..00000000 --- a/src/hooks/useSelectedTags.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; - -import { useLocation } from "@docusaurus/router"; - -import { readSearchTags } from "../pages/showcase/_components/TagSelect"; - -export const useSelectedTags = () => { - const location = useLocation(); - const [selectedTags, setSelectedTags] = React.useState([]); - React.useEffect(() => { - const tags = readSearchTags(location.search); - setSelectedTags(tags); - }, [location]); - - return selectedTags; -}; diff --git a/src/pages/2.0/index.tsx b/src/pages/2.0/index.tsx deleted file mode 100644 index 438273f9..00000000 --- a/src/pages/2.0/index.tsx +++ /dev/null @@ -1,458 +0,0 @@ -import React from "react"; - -import { FiTwitter } from "react-icons/fi"; - -import { ChevronRightIcon } from "@heroicons/react/20/solid"; -import Layout from "@theme/Layout"; -import { Dark, Light } from "../../components/ColorMode"; - -const TwoPointZero = (): JSX.Element => { - const stats = [ - { label: "Active Nodes", value: "A Lot!" }, - { label: "Community Members", value: "4000+" }, - { label: "Firmware Commits", value: "4900+" }, - { label: "Community Donations", value: "$5700+" }, - ]; - const logos = [ - { - name: "Vercel", - url: "/2.0/vercel-logotype-dark.svg", - }, - { - name: "Cloudflare", - url: "/2.0/CF_logo_horizontal_blktype.svg", - }, - { - name: "RAK Wireless", - url: "/2.0/RAK-blue-main.svg", - }, - { - name: "Open Collective", - url: "/2.0/opencollectivelogo.svg", - }, - { - name: "LILYGO", - url: "/2.0/LILYGO.png", - }, - { - name: "Discord", - url: "/2.0/discord.svg", - }, - ]; - return ( - -
    -
    - {/* Hero section */} -
    -
    -
    -
    - - Meshtastic Logo - - - Meshtastic Logo - -
    -
    - -
    -

    - Meshtastic 2.0 🎉🎉🎉 -

    -

    - After 9 months in the making, we present to you the next - milestone for the Meshtastic project. -

    -
    -
    -

    - As a part of the launch event, we are running a number of - giveaways, so jump in and win some prizes. -

    - -
    -
    -
    -
    - -
    -
    -
    -
    - - - - - - - - -
    -
    - Web UI - Android - IOS -
    -
    -
    -
    - - {/* Testimonial/stats section */} -
    -
    -
    - - - {/* Logo cloud section */} -
    -
    -
    -
    -

    - All made possible by the amazing companies that support us. -

    -

    - Running a project of this scale is no easy feat, without the - generosity of many of our vendors and providers, none of - this would be possible. -

    -
    -
    - {logos.map((logo) => ( -
    - {logo.name} -
    - ))} -
    -
    -
    -
    - - {/* CTA section */} -
    - -
    -
    -
    - ); -}; - -export default TwoPointZero; diff --git a/src/pages/credits/_components/Avatar.tsx b/src/pages/credits/_components/Avatar.tsx deleted file mode 100644 index 6ec6b32e..00000000 --- a/src/pages/credits/_components/Avatar.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from "react"; - -export interface avatarProps { - imgUrl: string; - name?: string; - userName?: string; - description?: string; -} - -export interface avatarLayoutProps { - list: list[]; -} - -export const Avatar = ({ - imgUrl, - name, - description, -}: avatarProps): JSX.Element => { - return ( -
    -
    -
    - -
    -
    {name}
    - {description} -
    -
    -
    -
    - ); -}; - -export const AvatarLayout = ({ list }: avatarLayoutProps): JSX.Element => { - return ( -
    -
    - {list.map(() => { - return ; - })} -
    -
    - ); -}; diff --git a/src/pages/credits/index.tsx b/src/pages/credits/index.tsx index 6dd0fc25..c9e1fecd 100644 --- a/src/pages/credits/index.tsx +++ b/src/pages/credits/index.tsx @@ -1,165 +1,112 @@ -import React from "react"; -import Layout from "@theme/Layout"; import Link from "@docusaurus/Link"; - -import { AvatarLayout } from "./_components/Avatar"; +import Layout from "@theme/Layout"; +import React from "react"; const Credits = (): JSX.Element => { - const partnerLogos = [ - { - name: "Vercel", - url: "/2.0/vercel-logotype-dark.svg", - }, - { - name: "Cloudflare", - url: "/2.0/CF_logo_horizontal_blktype.svg", - }, - { - name: "RAK Wireless", - url: "/2.0/RAK-blue-main.svg", - }, - { - name: "Open Collective", - url: "/2.0/opencollectivelogo.svg", - }, - { - name: "LILYGO", - url: "/2.0/LILYGO.png", - }, - { - name: "Discord", - url: "/2.0/discord.svg", - }, - ]; - return ( - -
    -
    -

    Credits

    -

    - Meshtastic is community driven. Thousands of hours have been donated - by volunteers who want to develop this amazing project. Whether - you've submitted a pull request or triaged a bug in our - Discord/Forum. You've made Meshtastic possible. Thank you for your - contributions. -

    -

    - We would also like to recognize those who have donated financially - to the project. As Meshtastic has grown, we've aquired some ongoing - costs to keep the project running. Thank you for your generous - donations. -

    -
    -
    -

    Fiscal Sponsors

    -

    - We have partnered with both the{" "} - - Open Collective - {" "} - and the{" "} - - Open Source Collective - {" "} - to help us with a fiscal management framework and banking needs. - They help support over three thousand open source projects including - the PHP Foundation, F-Droid, Sonarr, LinuxServer and DarkReader. We - are in good hands and good company. -

    -

    - As with everything we do here, Open Collective provides a fully - transparent framework for our budget and expenses. You can see what - we’re bringing in, who is spending money and where that money is - going{" "} - - here - - . -

    -

    - In addition to our partnership with Open Collective and Open Source - Collective, we have also been approved into the{" "} - - GitHub Sponsors - {" "} - program where we can set fundraising goals with GitHub. -

    -

    - All donations made through GitHub will be deposited to our account - with the Open Source Collective and managed by the Open Collective. - This means we have a single place to monitor and maintain - transparency of our finances. -

    -

    If you are able, please contribute to this amazing project.

    -
    - - Sponsor Meshtastic - -
    -

    - Open Collective Donations - {/*Open Collective Donations*/} - -

    -

    - GitHub Sponsor Donations - {/*GitHub Sponsor Donations*/} - -

    -
    -
    -

    Partnerships

    -
    - {partnerLogos.map((logo) => ( -
    - {logo.name} -
    - ))} -
    -
    -
    -

    Contributors

    -

    - Literally thousands of hours have gone into creating, maintaining, - and improving Meshtastic. Without our contributors none of this - would be possible. Thank you for donating the time for each and - every commit, issue, and pull request. -

    - {/*GitHub Organization Contributors*/} - -
    - {/*Admin Bios*/} -
    - -
    -
    -
    - ); + return ( + +
    +
    +

    Credits

    +

    + Meshtastic is community driven. Thousands of hours have been donated + by volunteers who want to develop this amazing project. Whether + you've submitted a pull request or triaged a bug in our + Discord/Forum. You've made Meshtastic possible. Thank you for your + contributions. +

    +

    + We would also like to recognize those who have donated financially + to the project. As Meshtastic has grown, we've aquired some ongoing + costs to keep the project running. Thank you for your generous + donations. +

    +
    +
    +

    Fiscal Sponsors

    +

    + We have partnered with both the{" "} + + Open Collective + {" "} + and the{" "} + + Open Source Collective + {" "} + to help us with a fiscal management framework and banking needs. + They help support over three thousand open source projects including + the PHP Foundation, F-Droid, Sonarr, LinuxServer and DarkReader. We + are in good hands and good company. +

    +

    + As with everything we do here, Open Collective provides a fully + transparent framework for our budget and expenses. You can see what + we’re bringing in, who is spending money and where that money is + going{" "} + + here + + . +

    +

    + In addition to our partnership with Open Collective and Open Source + Collective, we have also been approved into the{" "} + + GitHub Sponsors + {" "} + program where we can set fundraising goals with GitHub. +

    +

    + All donations made through GitHub will be deposited to our account + with the Open Source Collective and managed by the Open Collective. + This means we have a single place to monitor and maintain + transparency of our finances. +

    +

    If you are able, please contribute to this amazing project.

    +
    + + Sponsor Meshtastic + +
    +
    +
    +

    Contributors

    +

    + Literally thousands of hours have gone into creating, maintaining, + and improving Meshtastic. Without our contributors none of this + would be possible. Thank you for donating the time for each and + every commit, issue, and pull request. +

    +
    +
    +
    + ); }; export default Credits; diff --git a/src/pages/downloads/_components/DownloadCard.tsx b/src/pages/downloads/_components/DownloadCard.tsx deleted file mode 100644 index 05e9095a..00000000 --- a/src/pages/downloads/_components/DownloadCard.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import React from "react"; - -export interface downloadCardProps { - client: string; - imgUrl: string; - url: string; - imgUrl2: string; - url2: string; - notes: string; - buttonText: string; -} - -export const DownloadCard = ({ - client, - imgUrl, - url, - imgUrl2, - url2, - notes, - buttonText, -}: downloadCardProps): JSX.Element => { - return ( -
    -
    -

    {client}

    -
    -
    - {buttonText ? ( - - {buttonText} - - ) : ( - - )} -
    -
    {notes ? notes : null}
    -
    - ); -}; - -export const PlaceholderCard = (): JSX.Element => { - return ( -
    -
    -
    -
    -
    -
    -   -
    -
    -
    -
    -
    -
    - ); -}; diff --git a/src/pages/downloads/_components/FirmwareCard.tsx b/src/pages/downloads/_components/FirmwareCard.tsx index 654e7e70..fb76cdfa 100644 --- a/src/pages/downloads/_components/FirmwareCard.tsx +++ b/src/pages/downloads/_components/FirmwareCard.tsx @@ -3,149 +3,77 @@ import React from "react"; import { DeviceFirmwareResource } from "../../../utils/apiTypes"; export interface releaseCardProps { - variant: string; - description: string; - release?: DeviceFirmwareResource[]; + variant: string; + description: string; + release?: DeviceFirmwareResource[]; } export const FirmwareCard = ({ - variant, - description, - release, + variant, + description, + release, }: releaseCardProps): JSX.Element => { - return ( -
    -
    -

    {variant}

    - {release?.length && ( - {release[0].title} - )} -
    -
    -

    {description}

    -
    -
    -
    -
    - Older Versions - {release.slice(1, 6).map((release) => { - return ( - - ); - })} -
    -
    - {release?.length ? ( - <> - - Download {variant} - - - ) : ( - - )} -
    -
    - ); + return ( +
    +
    +

    {variant}

    + {release?.length && ( + {release[0].title} + )} +
    +
    +

    {description}

    +
    +
    +
    +
    + Older Versions + {release.slice(1, 6).map((release) => { + return ( + + ); + })} +
    +
    + {release?.length ? ( + <> + + Download {variant} + + + ) : ( + + )} +
    +
    + ); }; export const PlaceholderFirmwareCard = (): JSX.Element => { - return ( -
    -
    -
    -
    -
    -
    -   -
    -
    -
    -
    -
    -
    - ); + return ( +
    +
    +
    +
    +
    +
    +   +
    +
    +
    +
    +
    +
    + ); }; diff --git a/src/pages/downloads/_components/HeaderText.tsx b/src/pages/downloads/_components/HeaderText.tsx deleted file mode 100644 index 13cdfbb6..00000000 --- a/src/pages/downloads/_components/HeaderText.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from "react"; - -export const HeaderText = ({ type, text, link }): JSX.Element => { - const Header = type; - - return ( -
    - {text} - {link && ( - - )} -
    - ); -}; diff --git a/src/pages/downloads/index.tsx b/src/pages/downloads/index.tsx index a45e439b..ee015390 100644 --- a/src/pages/downloads/index.tsx +++ b/src/pages/downloads/index.tsx @@ -4,219 +4,219 @@ import { FaAndroid, FaApple } from "react-icons/fa"; import useSWR from "swr"; import { - ArrowTopRightOnSquareIcon, - BoltIcon, - ComputerDesktopIcon, - CpuChipIcon, - GlobeAltIcon, + ArrowTopRightOnSquareIcon, + BoltIcon, + ComputerDesktopIcon, + CpuChipIcon, + GlobeAltIcon, } from "@heroicons/react/24/solid"; import Layout from "@theme/Layout"; import { FirmwareReleases } from "../../utils/apiTypes"; import { fetcher } from "../../utils/swr"; import { - FirmwareCard, - PlaceholderFirmwareCard, + FirmwareCard, + PlaceholderFirmwareCard, } from "./_components/FirmwareCard"; const Firmware = (): JSX.Element => { - const { data, error } = useSWR( - "https://api.meshtastic.org/github/firmware/list", - fetcher, - ); + const { data, error } = useSWR( + "https://api.meshtastic.org/github/firmware/list", + fetcher, + ); - return ( - -
    -

    Flasher

    -
    - {/* */} -

    Apps

    -
    -
    - -
    -
    -
    -
    -

    Apple

    -
    -
    -
    - -
    -
    -
    - Available on MacOS & iOS. Requires MacOS Ventura or iOS 16+. -
    - -
    -
    -
    -

    Android

    -
    -
    -
    - -
    -
    -
    Sideloading also available.
    - -
    -
    -
    -

    Web

    -
    -
    -
    - -
    -
    -
    - Requires Chromium based browsers. -
    - -
    -
    -
    - {/* */} -

    Firmware

    -
    -
    - -
    -
    - {data && !error ? ( - <> - - -
    -
    -

    Bleeding

    -
    -
    -

    - Latest successful CI build. For those who want to break - things. -

    -
    - -
    - - ) : ( - <> - - - - - )} -
    -
    -
    - - ); + return ( + +
    +

    Flasher

    +
    +
    + +
    +
    +
    +
    +

    ESP32 Web Flasher

    +
    +
    +

    + Web based installer for easy flashing with Chrome and Edge + Browser. Works with T-Beam, T-Lora, Nano-G1 and similar + boards. +

    +
    + +
    +
    +
    +

    nRF52 Drag & Drop

    +
    +
    +

    + Devices such as T-Echo and RAK4631 are flashed via filesystem. +

    +
    + +
    +
    +
    + {/* */} +

    Apps

    +
    +
    + +
    +
    +
    +
    +

    Apple

    +
    +
    +
    + +
    +
    +
    + Available on MacOS & iOS. Requires MacOS Ventura or iOS 16+. +
    + +
    +
    +
    +

    Android

    +
    +
    +
    + +
    +
    +
    Sideloading also available.
    + +
    +
    +
    +

    Web

    +
    +
    +
    + +
    +
    +
    + Requires Chromium based browsers. +
    + +
    +
    +
    + {/* */} +

    Firmware

    +
    +
    + +
    +
    + {data && !error ? ( + <> + + +
    +
    +

    Bleeding

    +
    +
    +

    + Latest successful CI build. For those who want to break + things. +

    +
    + +
    + + ) : ( + <> + + + + + )} +
    +
    +
    +
    + ); }; export default Firmware; diff --git a/src/pages/hardware/index.tsx b/src/pages/hardware/index.tsx deleted file mode 100644 index 89eb0670..00000000 --- a/src/pages/hardware/index.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React, { useState } from "react"; - -import { FiPlus } from "react-icons/fi"; - -import { HardwareModal } from "../../components/hardware/HardwareModal"; -import { IDevice } from "../../data/device"; - -import { HardwareCard } from "../../components/hardware/HardwareCard"; -import { PageLayout } from "../../components/PageLayout"; -import { heltec } from "../../data/devices/heltec"; -import { hydra } from "../../data/devices/hydra"; -import { nano_g1 } from "../../data/devices/nano_g1"; -import { rak19001 } from "../../data/devices/rak19001"; -import { rak19003 } from "../../data/devices/rak19003"; -import { tbeam } from "../../data/devices/tbeam"; -import { techo } from "../../data/devices/techo"; - -const Hardware = (): JSX.Element => { - const hardware = [tbeam, hydra, rak19003, rak19001, nano_g1, heltec, techo]; - const [modalData, setModalData] = useState(); - - return ( - -
    -
    -

    - Issues -

    -
    - -
    -
    -
    -
    -
      - {hardware.map((device) => ( - { - setModalData(device); - }} - /> - ))} -
    • - - - -

      - New Board -

      -

      - Want to support a board? -

      -
    • -
    -
    - {modalData && ( - { - setModalData(undefined); - }} - device={modalData} - /> - )} -
    - ); -}; - -export default Hardware; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 44e26c01..5f7159d1 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,9 +1,5 @@ -import "react-responsive-carousel/lib/styles/carousel.min.css"; // requires a loader - import React from "react"; -import { Carousel } from "react-responsive-carousel"; - import Head from "@docusaurus/Head"; import Link from "@docusaurus/Link"; import useBaseUrl from "@docusaurus/useBaseUrl"; @@ -12,311 +8,199 @@ import Layout from "@theme/Layout"; import { SocialCard, SocialCardProps } from "../components/homepage/SocialCard"; -const features = [ - { - title: "Radio Mesh Text Messaging", - imageUrl: "img/homepage/messages.svg", - description: ( - <> - Off-grid messaging using inexpensive hardware to create your personal - mesh. Radios forward messages to the next to flood the network. - Communicate kilometers/miles between nodes. Internet-connected relay - nodes enable the conversation to move online too. - - ), - }, - { - title: "Encryption", - imageUrl: "img/homepage/encryption.svg", - description: ( - <> - Messages are AES256 encrypted. Only radios supplied with your channel - settings (which includes the key) should be able to read your messages. - Using multichannel settings you can send encrypted messages on one - channel and still participate in a default Meshtastic mesh. - - ), - }, - { - title: "Conserve Battery", - imageUrl: "img/homepage/battery.svg", - description: ( - <> - Go for days on end and on a single battery or extend it infinitely with - a solar cell. Power management ensures the device will last the duration - of your use. - - ), - }, - { - title: "Extensible", - imageUrl: "img/homepage/extendable.svg", - description: ( - <> - Create a highly scalable mesh with hardware on a multitude of platforms - to fit your unique requirements: Create an environment monitoring mesh - and produce real-time heatmaps, or maybe decentralized, encrypted - messaging network, your imagination is the limit. - - ), - }, - { - title: "Platform Agnostic", - imageUrl: "img/homepage/platforms.svg", - description: ( - <> - Meshtastic clients are built or being built for all major desktop and - mobile platforms. Linux, Windows, Mac, Android, and iOS are all - supported or well on their way to being supported. - - ), - }, - { - title: "Open Source", - imageUrl: "img/homepage/opensource.svg", - description: ( - <> - All Meshtastic software is open source. If you want an improvement, - submit a pull request or file an issue on Github. Happy coding! - - ), - }, -]; - const SocialCards: SocialCardProps[] = [ - { - color: "bg-[#5865F2]", - link: "https://discord.com/invite/ktMAKGBnBs", - children: ( - discord - ), - }, - { - color: "bg-[#4A99E9]", - link: "https://twitter.com/TheMeshtastic", - children: ( - twitter - ), - }, - { - color: "bg-[#3875EA]", - link: "https://facebook.com/themeshtastic", - children: ( - facebook - ), - }, - { - color: "bg-[#ffffff]", - link: "https://www.instagram.com/themeshtastic/", - children: ( - instagram - ), - }, - { - color: "bg-[#FF0000]", - link: "https://www.youtube.com/meshtastic", - children: ( - youtube - ), - }, - { - color: "bg-[#ffffff]", - link: "https://meshtastic.discourse.group", - children: ( - discourse - ), - }, - { - color: "bg-[#FF4500]", - link: "https://reddit.com/r/meshtastic", - children: ( - reddit - ), - }, + { + color: "bg-[#5865F2]", + link: "https://discord.com/invite/ktMAKGBnBs", + children: ( + discord + ), + }, + { + color: "bg-[#4A99E9]", + link: "https://twitter.com/TheMeshtastic", + children: ( + twitter + ), + }, + { + color: "bg-[#3875EA]", + link: "https://facebook.com/themeshtastic", + children: ( + facebook + ), + }, + { + color: "bg-[#ffffff]", + link: "https://www.instagram.com/themeshtastic/", + children: ( + instagram + ), + }, + { + color: "bg-[#FF0000]", + link: "https://www.youtube.com/meshtastic", + children: ( + youtube + ), + }, + { + color: "bg-[#ffffff]", + link: "https://meshtastic.discourse.group", + children: ( + discourse + ), + }, + { + color: "bg-[#FF4500]", + link: "https://reddit.com/r/meshtastic", + children: ( + reddit + ), + }, ]; function Home() { - const context = useDocusaurusContext(); - const { siteConfig } = context; - return ( - - - - - - - - -
    -
    -

    - Meshtastic Logo -

    -

    {siteConfig.tagline}

    -
    - - Learn More - - - Get Started - -
    -
    -
    -
    - - {features.map((feature) => ( -
    -
    - {feature.title} -
    -
    -

    {feature.title}

    -

    {feature.description}

    -
    -
    - ))} -
    + const context = useDocusaurusContext(); + const { siteConfig } = context; + return ( + + + + + + + + +
    +
    +

    + Meshtastic Logo +

    +

    {siteConfig.tagline}

    +
    + + Learn More + + + Get Started + +
    +
    +
    +
    +
    +

    Connect with us.

    +
    + {SocialCards.map((card) => ( + + {card.children} + + ))} +
    +
    -
    -

    Connect with us.

    -
    - {SocialCards.map((card) => ( - - {card.children} - - ))} -
    -
    - -
    -

    - Getting started with Meshtastic is as easy as 1, 2, 3! -

    -
      -
      -
      -

      1. Purchase Supported Hardware

      -
      -
      -

      - Hardware you will want to consider: -

        -
      • Radio
      • -
      • Battery
      • -
      • Case
      • -
      • - Antenna (most devices include an antenna, but the quality - can be a bit of a mixed bag from some suppliers on stock - antennas) -
      • -
      -

      -
      -
      -
      -
      -

      2. Flash & Configure Node

      -
      -
      -

      - The Meshtastic Web-Based Flasher & Clients can assist you in - flashing the firmware and configuring settings. -

      -
      -
      -
      -
      -

      3. Connect to Node

      -
      -
      -

      - Applications are available for the following systems: -

        -
      • Android
      • -
      • iOS
      • -
      • Mac
      • -
      • Web Browser
      • -
      -

      -
      -
      -
    -
    -
    -
    -
    - ); +
    +

    + Getting started with Meshtastic is as easy as 1, 2, 3! +

    +
      +
      +
      +

      1. Purchase Supported Hardware

      +
      +
      +

      + Hardware you will want to consider: +

        +
      • Radio
      • +
      • Battery
      • +
      • Case
      • +
      • + Antenna (most devices include an antenna, but the quality + can be a bit of a mixed bag from some suppliers on stock + antennas) +
      • +
      +

      +
      +
      +
      +
      +

      2. Flash & Configure Node

      +
      +
      +

      + The Meshtastic Web-Based Flasher & Clients can assist you in + flashing the firmware and configuring settings. +

      +
      +
      +
      +
      +

      3. Connect to Node

      +
      +
      +

      + Applications are available for the following systems: +

        +
      • Android
      • +
      • iOS
      • +
      • Mac
      • +
      • Web Browser
      • +
      +

      +
      +
      +
    +
    +
    +
    +
    + ); } export default Home; diff --git a/src/pages/showcase/_components/Card.tsx b/src/pages/showcase/_components/Card.tsx deleted file mode 100644 index ef70247c..00000000 --- a/src/pages/showcase/_components/Card.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import React from "react"; - -import { Showcase } from "../../../utils/apiTypes"; -import { mapUrl } from "../../../utils/map"; -import { CardTags } from "./CardTags"; - -export interface CardProps { - network: Showcase; -} - -export const Card = React.memo(({ network }: CardProps) => ( -
    -
    -
    - {network.title} -
    -
    -
    -

    {network.title}

    - {network.summary} -
    - -
    -)); - -export const PlaceholderCard = (): JSX.Element => ( -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -); diff --git a/src/pages/showcase/_components/CardTags.tsx b/src/pages/showcase/_components/CardTags.tsx deleted file mode 100644 index 4837a356..00000000 --- a/src/pages/showcase/_components/CardTags.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from "react"; - -import { ShowcaseTag } from "../../../utils/apiTypes"; - -export interface CardTagsProps { - tags: ShowcaseTag[]; -} - -export const CardTags = ({ tags }: CardTagsProps) => { - return ( -
    - {tags.map(({ color, label }) => { - return ( - - {label} - - ); - })} -
    - ); -}; diff --git a/src/pages/showcase/_components/Filters.tsx b/src/pages/showcase/_components/Filters.tsx deleted file mode 100644 index 51fcb8c7..00000000 --- a/src/pages/showcase/_components/Filters.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import React from "react"; - -import { FiHeart } from "react-icons/fi"; -import useSWR from "swr"; - -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import { fetcher } from "../../../utils/swr"; - -import { ShowcaseTag } from "../../../utils/apiTypes"; -// import { TagList, Tags } from '../../../utils/showcase'; -import { PlaceholderTagSelect, TagSelect } from "./TagSelect"; - -export const Filters = (): JSX.Element => { - const { siteConfig } = useDocusaurusContext(); - - const { data, error } = useSWR( - `${siteConfig.customFields.API_URL}/showcase/tags`, - fetcher, - ); - - return ( -
    - {data && !error ? ( -
      - {data.map((tag) => { - const { label, color } = tag; - const id = `showcase_checkbox_id_${tag};`; - - return ( -
      - - - - ) : ( - - ) - } - /> -
      - ); - })} -
    - ) : ( - - )} -
    - ); -}; diff --git a/src/pages/showcase/_components/Network.tsx b/src/pages/showcase/_components/Network.tsx deleted file mode 100644 index e81ad943..00000000 --- a/src/pages/showcase/_components/Network.tsx +++ /dev/null @@ -1,318 +0,0 @@ -import React from "react"; - -import useSWR from "swr"; - -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import { Showcase } from "../../../utils/apiTypes"; -import { fetcher } from "../../../utils/swr"; - -interface NetworkProps { - id: string; -} - -export const Network = ({ id }: NetworkProps): JSX.Element => { - const { siteConfig } = useDocusaurusContext(); - - const { data, error } = useSWR( - `${siteConfig.customFields.API_URL}/showcase/${id}`, - fetcher, - ); - - const githubData = useSWR( - `https://api.github.com/users/${data?.author?.githubUsername}`, - fetcher, - ).data; - - return ( -
    - {data && !error ? ( -
    -

    {data.title}

    -

    {data.summary}

    - {githubData && ( -
    - {githubData.name} -
    -
    {githubData.name}
    -
    {githubData.bio}
    -
    -
    - )} -
    {data.body}
    - -
    -
    -

    Bill of Materials

    -
    -
    - {data.materials?.map((material) => ( -
    -
    - -
    -
    -
    {material.name}
    - - {material.details} - -
    - - View - -
    - ))} -
    -
    -
    - ) : ( -
    - {error &&
    {JSON.stringify(error)}
    } - {!data && } -
    - )} -
    - ); -}; - -export const PlaceholderNetwork = (): JSX.Element => { - return ( -
    768 ? "row" : "column", - gap: "2rem", - }} - > -
    768 ? "60%" : "100%", - }} - > -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    768 ? "40%" : "100%", - }} - > -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - ); -}; diff --git a/src/pages/showcase/_components/NetworkSection.tsx b/src/pages/showcase/_components/NetworkSection.tsx deleted file mode 100644 index 38a4fb3b..00000000 --- a/src/pages/showcase/_components/NetworkSection.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from "react"; - -import { Showcase } from "../../../utils/apiTypes"; -import { Card, PlaceholderCard } from "./Card"; - -interface NetworkSectionProps { - title: string; - icon?: JSX.Element; - iconColor?: string; - networks?: Showcase[]; -} - -export const NetworkSection = ({ - title, - icon, - iconColor, - networks, -}: NetworkSectionProps): JSX.Element => { - return ( -
    -
    -

    {title}

    - {icon && ( - - {icon} - - )} -
    -
      - {networks ? ( - <> - {networks.map((network) => ( - - ))} - {networks.length === 0 &&

      No result

      } - - ) : ( -
      - -
      - )} -
    -
    - ); -}; diff --git a/src/pages/showcase/_components/Networks.tsx b/src/pages/showcase/_components/Networks.tsx deleted file mode 100644 index 2d709fc7..00000000 --- a/src/pages/showcase/_components/Networks.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React from "react"; - -import { FiHeart, FiSearch } from "react-icons/fi"; -import useSWR from "swr"; - -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import { useSelectedTags } from "../../../hooks/useSelectedTags"; - -import { useFilteredNetworks } from "../../../hooks/useFilteredNetworks"; -import { Showcase } from "../../../utils/apiTypes"; -import { fetcher } from "../../../utils/swr"; -import { NetworkSection } from "./NetworkSection"; - -export const Networks = (): JSX.Element => { - const { siteConfig } = useDocusaurusContext(); - - const { data, error } = useSWR( - `${siteConfig.customFields.API_URL}/showcase`, - fetcher, - ); - - const selectedTags = useSelectedTags(); - const filteredNetworks = useFilteredNetworks(data ?? []); - - return ( -
    - {!error ? ( - selectedTags.length === 0 ? ( - <> - } - iconColor="rgb(190 24 93)" - networks={data?.filter((network) => - network.tags.find((tag) => tag.label === "Favorite"), - )} - /> - - - ) : ( - } - networks={filteredNetworks} - /> - ) - ) : ( -
    {JSON.stringify(error)}
    - )} -
    - ); -}; diff --git a/src/pages/showcase/_components/TagSelect.tsx b/src/pages/showcase/_components/TagSelect.tsx deleted file mode 100644 index c8c41899..00000000 --- a/src/pages/showcase/_components/TagSelect.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import "url-search-params-polyfill"; - -import React from "react"; - -import { useHistory, useLocation } from "@docusaurus/router"; -import { ShowcaseTag } from "../../../utils/apiTypes"; - -import { toggleListItem } from "../../../utils/showcase"; - -interface Props extends React.ComponentProps<"input"> { - icon: React.ReactElement>; - label: React.ReactNode; - tag: ShowcaseTag; -} - -export function readSearchTags(search: string): string[] { - return new URLSearchParams(search).getAll("tags"); -} - -function replaceSearchTags(search: string, newTags: string[]) { - const searchParams = new URLSearchParams(search); - searchParams.delete("tags"); - newTags.forEach((tag) => searchParams.append("tags", tag)); - return searchParams.toString(); -} - -export const TagSelect = React.forwardRef( - ({ icon, label, tag }) => { - const location = useLocation(); - const history = useHistory(); - const [selected, setSelected] = React.useState(false); - React.useEffect(() => { - const tags = readSearchTags(location.search); - setSelected(tags.includes(tag.label)); - }, [tag, location]); - const toggleTag = React.useCallback(() => { - const tags = readSearchTags(location.search); - const newTags = toggleListItem(tags, tag.label); - const newSearch = replaceSearchTags(location.search, newTags); - history.push({ ...location, search: newSearch }); - }, [tag, location, history]); - return ( - - ); - }, -); - -export const PlaceholderTagSelect = (): JSX.Element => ( -
    -
    -
    -
    -
    -); diff --git a/src/pages/showcase/index.tsx b/src/pages/showcase/index.tsx deleted file mode 100644 index 31780c9b..00000000 --- a/src/pages/showcase/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import "url-search-params-polyfill"; - -import React from "react"; - -import { useLocation } from "@docusaurus/router"; -import Layout from "@theme/Layout"; - -import { Filters } from "./_components/Filters"; -import { Network } from "./_components/Network"; -import { Networks } from "./_components/Networks"; - -const Showcase = (): JSX.Element => { - const location = useLocation(); - const id = new URLSearchParams(location.search).get("id"); - - return ( - -
    - {id ? ( - - ) : ( - <> - - - - )} -
    -
    - ); -}; - -export default Showcase; diff --git a/src/pages/tools/OEM.tsx b/src/pages/tools/OEM.tsx index e4e6c46b..1d304482 100644 --- a/src/pages/tools/OEM.tsx +++ b/src/pages/tools/OEM.tsx @@ -6,146 +6,148 @@ import { Protobuf } from "@meshtastic/meshtasticjs"; import Layout from "@theme/Layout"; const OEM = (): JSX.Element => { - const [oemAesKey, setOemAesKey] = useState(new Uint8Array()); - const [oemFont, setOemFont] = useState( - Protobuf.ScreenFonts.FONT_MEDIUM, - ); - const [oemIconBits, setOemIconBits] = useState(new Uint8Array()); - const [oemIconHeight, setOemIconHeight] = useState(0); - const [oemIconWidth, setOemIconWidth] = useState(0); - const [oemText, setOemText] = useState(""); - const [oemBytes, setOemBytes] = useState(new Uint8Array()); + const [oemAesKey, setOemAesKey] = useState(new Uint8Array()); + const [oemFont, setOemFont] = useState( + Protobuf.ScreenFonts.FONT_MEDIUM, + ); + const [oemIconBits, setOemIconBits] = useState(new Uint8Array()); + const [oemIconHeight, setOemIconHeight] = useState(0); + const [oemIconWidth, setOemIconWidth] = useState(0); + const [oemText, setOemText] = useState(""); + const [oemBytes, setOemBytes] = useState(new Uint8Array()); - useEffect(() => { - setOemBytes( - Protobuf.OEMStore.toBinary({ - oemAesKey, - oemFont, - oemIconBits, - oemIconHeight, - oemIconWidth, - oemText, - }), - ); - }, [oemAesKey, oemFont, oemIconBits, oemIconHeight, oemIconWidth, oemText]); + useEffect(() => { + setOemBytes( + new Protobuf.OEMStore({ + oemAesKey, + oemFont, + oemIconBits, + oemIconHeight, + oemIconWidth, + oemText, + }).toBinary(), + ); + }, [oemAesKey, oemFont, oemIconBits, oemIconHeight, oemIconWidth, oemText]); - const enumOptions = Protobuf.ScreenFonts - ? Object.entries(Protobuf.ScreenFonts).filter( - (value) => typeof value[1] === "number", - ) - : []; + const enumOptions = Protobuf.ScreenFonts + ? Object.entries(Protobuf.ScreenFonts).filter( + (value) => typeof value[1] === "number", + ) + : []; - const readFile = (file: File) => { - return new Promise((resolve: (value: string) => void, reject) => { - const reader = new FileReader(); + const readFile = (file: File) => { + return new Promise((resolve: (value: string) => void, reject) => { + const reader = new FileReader(); - reader.onload = (res) => { - resolve(res.target.result as string); - }; - reader.onerror = (err) => reject(err); + reader.onload = (res) => { + resolve(res.target.result as string); + }; + reader.onerror = (err) => reject(err); - reader.readAsText(file); - }); - }; + reader.readAsText(file); + }); + }; - return ( - -
    - AES Key -
    - - -
    - { - setOemAesKey(toByteArray(e.target.value)); - }} - /> - Font - - Logo XBM - { - readFile(e.target.files[0]).then((data) => { - setOemIconBits( - new Uint8Array( - data.split(",").map((s) => parseInt(s.trim(), 16)), - ), - ); - }); - }} - /> - Logo Height - { - setOemIconHeight(parseInt(e.target.value)); - }} - /> - Logo Width - { - setOemIconWidth(parseInt(e.target.value)); - }} - /> - Boot Text - { - setOemText(e.target.value); - }} - /> - { - const blob = new Blob([oemBytes], { - type: "application/octet-stream", - }); - window.open(URL.createObjectURL(blob)); - }} - > - Download - - {oemBytes.toString()} -
    -
    - ); + return ( + +
    + AES Key +
    + + +
    + { + setOemAesKey(toByteArray(e.target.value)); + }} + /> + Font + + Logo XBM + { + readFile(e.target.files[0]).then((data) => { + setOemIconBits( + new Uint8Array( + data.split(",").map((s) => parseInt(s.trim(), 16)), + ), + ); + }); + }} + /> + Logo Height + { + setOemIconHeight(parseInt(e.target.value)); + }} + /> + Logo Width + { + setOemIconWidth(parseInt(e.target.value)); + }} + /> + Boot Text + { + setOemText(e.target.value); + }} + /> + { + const blob = new Blob([oemBytes], { + type: "application/octet-stream", + }); + window.open(URL.createObjectURL(blob)); + }} + > + Download + + {oemBytes.toString()} +
    +
    + ); }; export default OEM; diff --git a/src/theme/NotFound.d.ts b/src/theme/NotFound.d.ts deleted file mode 100644 index ef9b4d9d..00000000 --- a/src/theme/NotFound.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -export default function NotFound(): JSX.Element; diff --git a/src/theme/NotFound.js b/src/theme/NotFound.js deleted file mode 100644 index 830f16c4..00000000 --- a/src/theme/NotFound.js +++ /dev/null @@ -1,33 +0,0 @@ -import React from "react"; -import Translate, { translate } from "@docusaurus/Translate"; -import { PageMetadata } from "@docusaurus/theme-common"; -import Layout from "@theme/Layout"; -export default function NotFound() { - return ( - <> - - -
    -
    -
    -

    - - 404 - Page Not Found - -

    - Chirpy -
    -
    -
    -
    - - ); -} diff --git a/src/theme/NotFound/Content/index.js b/src/theme/NotFound/Content/index.js new file mode 100644 index 00000000..e7a612f7 --- /dev/null +++ b/src/theme/NotFound/Content/index.js @@ -0,0 +1,37 @@ +import React from 'react'; +import clsx from 'clsx'; +import Translate from '@docusaurus/Translate'; +import Heading from '@theme/Heading'; +export default function NotFoundContent({className}) { + return ( +
    +
    +
    + + + Page Not Found + + +

    + + We could not find what you were looking for. + +

    +

    + + Please contact the owner of the site that linked you to the + original URL and let them know their link is broken. + +

    + Chirpy +
    +
    +
    + ); +} diff --git a/src/theme/NotFound/index.js b/src/theme/NotFound/index.js new file mode 100644 index 00000000..3b551f9e --- /dev/null +++ b/src/theme/NotFound/index.js @@ -0,0 +1,19 @@ +import React from 'react'; +import {translate} from '@docusaurus/Translate'; +import {PageMetadata} from '@docusaurus/theme-common'; +import Layout from '@theme/Layout'; +import NotFoundContent from '@theme/NotFound/Content'; +export default function Index() { + const title = translate({ + id: 'theme.NotFound.title', + message: 'Page Not Found', + }); + return ( + <> + + + + + + ); +} diff --git a/src/utils/breakpoints.ts b/src/utils/breakpoints.ts deleted file mode 100644 index f20c95d2..00000000 --- a/src/utils/breakpoints.ts +++ /dev/null @@ -1 +0,0 @@ -export const BREAKPOINTS = { sm: 640, md: 768, lg: 1024, xl: 1280 }; diff --git a/src/utils/map.ts b/src/utils/map.ts deleted file mode 100644 index 9b271f3d..00000000 --- a/src/utils/map.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Node } from "./apiTypes"; - -export const mapUrl = (nodes: Node[]): string => { - const width = 900; - const height = 400; - const access_token = - "pk.eyJ1Ijoic2FjaGF3IiwiYSI6ImNrNW9meXozZjBsdW0zbHBjM2FnNnV6cmsifQ.3E4n8eFGD9ZOFo-XDVeZnQ"; - const nodeCoords = nodes.map( - ({ latitude, longitude }) => `pin-l+67ea94(${longitude},${latitude})`, - ); - - return `https://api.mapbox.com/styles/v1/mapbox/satellite-v9/static/${nodeCoords}/auto/${width}x${height}@2x?access_token=${access_token}`; -}; diff --git a/src/utils/showcase.ts b/src/utils/showcase.ts deleted file mode 100644 index 29d64b52..00000000 --- a/src/utils/showcase.ts +++ /dev/null @@ -1,22 +0,0 @@ -export const sortBy = (array: T[], getter: (item: T) => unknown): T[] => { - const sortedArray = [...array]; - sortedArray.sort((a, b) => - getter(a) > getter(b) ? 1 : getter(b) > getter(a) ? -1 : 0, - ); - return sortedArray; -}; - -export const difference = (...arrays: T[][]): T[] => { - return arrays.reduce((a, b) => a.filter((c) => !b.includes(c))); -}; - -export const toggleListItem = (list: T[], item: T): T[] => { - const itemIndex = list.indexOf(item); - if (itemIndex === -1) { - return list.concat(item); - } else { - const newList = [...list]; - newList.splice(itemIndex, 1); - return newList; - } -}; diff --git a/static/.well-known/assetlinks.json b/static/.well-known/assetlinks.json new file mode 100644 index 00000000..a4a27634 --- /dev/null +++ b/static/.well-known/assetlinks.json @@ -0,0 +1,14 @@ +[ + { + "relation": [ + "delegate_permission/common.handle_all_urls" + ], + "target": { + "namespace": "android_app", + "package_name": "com.geeksville.mesh", + "sha256_cert_fingerprints": [ + "42:17:52:DC:57:40:38:B5:6B:86:61:1C:2F:47:DB:2B:0F:A2:EA:59:E1:18:9C:AA:90:8D:37:D6:CD:40:0E:BB" + ] + } + } +] \ No newline at end of file diff --git a/static/2.0/CF_logo_horizontal_blktype.svg b/static/2.0/CF_logo_horizontal_blktype.svg deleted file mode 100644 index 43619792..00000000 --- a/static/2.0/CF_logo_horizontal_blktype.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/2.0/LILYGO.png b/static/2.0/LILYGO.png deleted file mode 100644 index 75a625cb..00000000 Binary files a/static/2.0/LILYGO.png and /dev/null differ diff --git a/static/2.0/RAK-blue-main.svg b/static/2.0/RAK-blue-main.svg deleted file mode 100644 index e2a1bdd1..00000000 --- a/static/2.0/RAK-blue-main.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/2.0/android.jpg b/static/2.0/android.jpg deleted file mode 100644 index 79587380..00000000 Binary files a/static/2.0/android.jpg and /dev/null differ diff --git a/static/2.0/background.png b/static/2.0/background.png deleted file mode 100644 index 6f1fecac..00000000 Binary files a/static/2.0/background.png and /dev/null differ diff --git a/static/2.0/discord.svg b/static/2.0/discord.svg deleted file mode 100644 index 74fd52b0..00000000 --- a/static/2.0/discord.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/2.0/ios.png b/static/2.0/ios.png deleted file mode 100644 index af3fc932..00000000 Binary files a/static/2.0/ios.png and /dev/null differ diff --git a/static/2.0/opencollectivelogo.svg b/static/2.0/opencollectivelogo.svg deleted file mode 100644 index 3ab0f9ce..00000000 --- a/static/2.0/opencollectivelogo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/2.0/typelogo.svg b/static/2.0/typelogo.svg deleted file mode 100644 index 748526e9..00000000 --- a/static/2.0/typelogo.svg +++ /dev/null @@ -1 +0,0 @@ -ESHTSTC \ No newline at end of file diff --git a/static/2.0/vercel-logotype-dark.svg b/static/2.0/vercel-logotype-dark.svg deleted file mode 100644 index ba8cfc48..00000000 --- a/static/2.0/vercel-logotype-dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/2.0/webUI.png b/static/2.0/webUI.png deleted file mode 100644 index 93e7f0c1..00000000 Binary files a/static/2.0/webUI.png and /dev/null differ diff --git a/static/img/configuration/max-hops.png b/static/img/configuration/max-hops.png new file mode 100644 index 00000000..4545c73a Binary files /dev/null and b/static/img/configuration/max-hops.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-ANZ.png b/static/img/configuration/qr-private-primary-example/private-primary-ANZ.png new file mode 100644 index 00000000..a1270602 Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-ANZ.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-CN.png b/static/img/configuration/qr-private-primary-example/private-primary-CN.png new file mode 100644 index 00000000..e74f597f Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-CN.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-EU_433.png b/static/img/configuration/qr-private-primary-example/private-primary-EU_433.png new file mode 100644 index 00000000..513c54c1 Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-EU_433.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-EU_868.png b/static/img/configuration/qr-private-primary-example/private-primary-EU_868.png new file mode 100644 index 00000000..e2f9243c Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-EU_868.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-IN.png b/static/img/configuration/qr-private-primary-example/private-primary-IN.png new file mode 100644 index 00000000..dbd6e017 Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-IN.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-JP.png b/static/img/configuration/qr-private-primary-example/private-primary-JP.png new file mode 100644 index 00000000..da783c20 Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-JP.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-KR.png b/static/img/configuration/qr-private-primary-example/private-primary-KR.png new file mode 100644 index 00000000..5ac9296c Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-KR.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-LORA_24.png b/static/img/configuration/qr-private-primary-example/private-primary-LORA_24.png new file mode 100644 index 00000000..c705555d Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-LORA_24.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-NZ_865.png b/static/img/configuration/qr-private-primary-example/private-primary-NZ_865.png new file mode 100644 index 00000000..f702c268 Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-NZ_865.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-RU.png b/static/img/configuration/qr-private-primary-example/private-primary-RU.png new file mode 100644 index 00000000..f24727b7 Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-RU.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-TH.png b/static/img/configuration/qr-private-primary-example/private-primary-TH.png new file mode 100644 index 00000000..5fa4897d Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-TH.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-TW.png b/static/img/configuration/qr-private-primary-example/private-primary-TW.png new file mode 100644 index 00000000..df5d8587 Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-TW.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-UA_433.png b/static/img/configuration/qr-private-primary-example/private-primary-UA_433.png new file mode 100644 index 00000000..227e5958 Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-UA_433.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-UA_868.png b/static/img/configuration/qr-private-primary-example/private-primary-UA_868.png new file mode 100644 index 00000000..5b6fad50 Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-UA_868.png differ diff --git a/static/img/configuration/qr-private-primary-example/private-primary-US.png b/static/img/configuration/qr-private-primary-example/private-primary-US.png new file mode 100644 index 00000000..36385e5f Binary files /dev/null and b/static/img/configuration/qr-private-primary-example/private-primary-US.png differ diff --git a/static/img/hardware/nano_g2_ultra.jpeg b/static/img/hardware/nano_g2_ultra.jpeg new file mode 100644 index 00000000..d60a964b Binary files /dev/null and b/static/img/hardware/nano_g2_ultra.jpeg differ diff --git a/static/img/modules/mqtt/android_channel.png b/static/img/modules/mqtt/android_channel.png new file mode 100644 index 00000000..fbf7fec5 Binary files /dev/null and b/static/img/modules/mqtt/android_channel.png differ diff --git a/static/img/modules/mqtt/android_channel_sm.png b/static/img/modules/mqtt/android_channel_sm.png new file mode 100644 index 00000000..9f0d14e6 Binary files /dev/null and b/static/img/modules/mqtt/android_channel_sm.png differ diff --git a/static/img/modules/mqtt/android_mqtt.png b/static/img/modules/mqtt/android_mqtt.png new file mode 100644 index 00000000..d10f615c Binary files /dev/null and b/static/img/modules/mqtt/android_mqtt.png differ diff --git a/static/img/modules/mqtt/android_mqtt_proxy.png b/static/img/modules/mqtt/android_mqtt_proxy.png new file mode 100644 index 00000000..ba1738ae Binary files /dev/null and b/static/img/modules/mqtt/android_mqtt_proxy.png differ diff --git a/static/img/modules/mqtt/android_mqtt_proxy_sm.png b/static/img/modules/mqtt/android_mqtt_proxy_sm.png new file mode 100644 index 00000000..d0091ff4 Binary files /dev/null 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 new file mode 100644 index 00000000..ee74140f Binary files /dev/null and b/static/img/modules/mqtt/android_mqtt_sm.png differ diff --git a/static/img/modules/mqtt/android_network.png b/static/img/modules/mqtt/android_network.png new file mode 100644 index 00000000..1f43c1cf Binary files /dev/null and b/static/img/modules/mqtt/android_network.png differ diff --git a/static/img/modules/mqtt/android_network_sm.png b/static/img/modules/mqtt/android_network_sm.png new file mode 100644 index 00000000..2327109e Binary files /dev/null and b/static/img/modules/mqtt/android_network_sm.png differ diff --git a/static/img/modules/mqtt/apple_channel.png b/static/img/modules/mqtt/apple_channel.png new file mode 100644 index 00000000..c1dc6296 Binary files /dev/null and b/static/img/modules/mqtt/apple_channel.png differ diff --git a/static/img/modules/mqtt/apple_channel_sm.png b/static/img/modules/mqtt/apple_channel_sm.png new file mode 100644 index 00000000..645ef407 Binary files /dev/null and b/static/img/modules/mqtt/apple_channel_sm.png differ diff --git a/static/img/modules/mqtt/apple_mqtt_1.png b/static/img/modules/mqtt/apple_mqtt_1.png new file mode 100644 index 00000000..2bc3e29d Binary files /dev/null and b/static/img/modules/mqtt/apple_mqtt_1.png differ diff --git a/static/img/modules/mqtt/apple_mqtt_1_proxy.png b/static/img/modules/mqtt/apple_mqtt_1_proxy.png new file mode 100644 index 00000000..2daa7059 Binary files /dev/null and b/static/img/modules/mqtt/apple_mqtt_1_proxy.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 new file mode 100644 index 00000000..626713ed Binary files /dev/null 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 new file mode 100644 index 00000000..c4952382 Binary files /dev/null and b/static/img/modules/mqtt/apple_mqtt_1_sm.png differ diff --git a/static/img/modules/mqtt/apple_mqtt_2.png b/static/img/modules/mqtt/apple_mqtt_2.png new file mode 100644 index 00000000..b18eab29 Binary files /dev/null and b/static/img/modules/mqtt/apple_mqtt_2.png differ diff --git a/static/img/modules/mqtt/apple_mqtt_2_sm.png b/static/img/modules/mqtt/apple_mqtt_2_sm.png new file mode 100644 index 00000000..fc088ab5 Binary files /dev/null and b/static/img/modules/mqtt/apple_mqtt_2_sm.png differ diff --git a/static/img/modules/mqtt/apple_network.png b/static/img/modules/mqtt/apple_network.png new file mode 100644 index 00000000..f04001f2 Binary files /dev/null and b/static/img/modules/mqtt/apple_network.png differ diff --git a/static/img/modules/mqtt/apple_network_sm.png b/static/img/modules/mqtt/apple_network_sm.png new file mode 100644 index 00000000..52bccea5 Binary files /dev/null and b/static/img/modules/mqtt/apple_network_sm.png differ diff --git a/static/img/modules/mqtt/web_channel.png b/static/img/modules/mqtt/web_channel.png new file mode 100644 index 00000000..8d59b324 Binary files /dev/null and b/static/img/modules/mqtt/web_channel.png differ diff --git a/static/img/modules/mqtt/web_channel_sm.png b/static/img/modules/mqtt/web_channel_sm.png new file mode 100644 index 00000000..e8654fd9 Binary files /dev/null and b/static/img/modules/mqtt/web_channel_sm.png differ diff --git a/static/img/modules/mqtt/web_mqtt.png b/static/img/modules/mqtt/web_mqtt.png new file mode 100644 index 00000000..21219f66 Binary files /dev/null and b/static/img/modules/mqtt/web_mqtt.png differ diff --git a/static/img/modules/mqtt/web_mqtt_proxy.png b/static/img/modules/mqtt/web_mqtt_proxy.png new file mode 100644 index 00000000..73d003cc Binary files /dev/null and b/static/img/modules/mqtt/web_mqtt_proxy.png differ diff --git a/static/img/modules/mqtt/web_mqtt_proxy_sm.png b/static/img/modules/mqtt/web_mqtt_proxy_sm.png new file mode 100644 index 00000000..8eb36e30 Binary files /dev/null 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 new file mode 100644 index 00000000..f2c9a22d Binary files /dev/null and b/static/img/modules/mqtt/web_mqtt_sm.png differ diff --git a/static/img/modules/mqtt/web_network.png b/static/img/modules/mqtt/web_network.png new file mode 100644 index 00000000..255e267e Binary files /dev/null and b/static/img/modules/mqtt/web_network.png differ diff --git a/static/img/modules/mqtt/web_network_sm.png b/static/img/modules/mqtt/web_network_sm.png new file mode 100644 index 00000000..867ffb60 Binary files /dev/null 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_input_text_helper.png b/static/img/software/mqtt/ha_input_text_helper.png new file mode 100644 index 00000000..02e1d424 Binary files /dev/null and b/static/img/software/mqtt/ha_input_text_helper.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/static/img/software/mqtt/mqtt.png b/static/img/software/mqtt/mqtt.png new file mode 100644 index 00000000..98d7d5b5 Binary files /dev/null and b/static/img/software/mqtt/mqtt.png differ diff --git a/vercel.json b/vercel.json new file mode 100644 index 00000000..3aa453ae --- /dev/null +++ b/vercel.json @@ -0,0 +1,56 @@ +{ + "redirects": [ + { + "source": "/docs/settings", + "destination": "/docs/configuration" + }, + { + "source": "/docs/settings/", + "destination": "/docs/configuration/" + }, + { + "source": "/docs/settings/config", + "destination": "/docs/configuration/radio" + }, + { + "source": "/docs/settings/config/", + "destination": "/docs/configuration/radio/" + }, + { + "source": "/docs/settings/config/:path*", + "destination": "/docs/configuration/radio/:path*" + }, + { + "source": "/docs/settings/moduleconfig", + "destination": "/docs/configuration/module" + }, + { + "source": "/docs/settings/moduleconfig/", + "destination": "/docs/configuration/module/" + }, + { + "source": "/docs/settings/moduleconfig/:path*", + "destination": "/docs/configuration/module/:path*" + }, + { + "source": "/docs/hardware/peripheral/", + "destination": "/docs/configuration/module/remote-hardware#remote-hardware-module-usage" + }, + { + "source": "/docs/configuration/rak-gpio-mapping", + "destination": "/docs/hardware/devices/rak/core-module#gpio" + }, + { + "source": "/software/android-too-old", + "destination": "/docs/software/android/installation" + }, + { + "source": "/docs/software/android/android-installation", + "destination": "/docs/software/android/installation" + } + ] +} + + + +