diff --git a/.gitignore b/.gitignore
index b2d6de30..9ab3e084 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,9 @@
# Production
/build
+# Intents repo
+/intents
+
# Generated files
.docusaurus
.cache-loader
diff --git a/docs/config_entries_config_flow_handler.md b/docs/config_entries_config_flow_handler.md
index d33e7c90..c7bc8393 100644
--- a/docs/config_entries_config_flow_handler.md
+++ b/docs/config_entries_config_flow_handler.md
@@ -1,6 +1,5 @@
---
-title: Integration Config Entry
-sidebar_label: Config Entry
+title: Config Flow
---
Integrations can be set up via the user interface by adding support for a config flow to create a config entry. Components that want to support config entries will need to define a Config Flow Handler. This handler will manage the creation of entries from user input, discovery or other sources (like Home Assistant OS).
diff --git a/docs/config_entries_options_flow_handler.md b/docs/config_entries_options_flow_handler.md
index db951b02..8b8d5ed5 100644
--- a/docs/config_entries_options_flow_handler.md
+++ b/docs/config_entries_options_flow_handler.md
@@ -1,6 +1,5 @@
---
-title: Integration Configuration Options
-sidebar_label: Configuration Options
+title: Options Flow
---
An integration that is configured via a config entry can expose options to the user to allow tweaking behavior of the integration, like which devices or locations should be integrated.
diff --git a/docs/creating_integration_brand.md b/docs/creating_integration_brand.md
index 112ca6b9..3422b599 100644
--- a/docs/creating_integration_brand.md
+++ b/docs/creating_integration_brand.md
@@ -1,6 +1,5 @@
---
-title: "Grouping integrations by brand"
-sidebar_label: "Grouping integrations by brand"
+title: "Brands"
---
A commercial brand may have several integrations which provide support for different offerings under that brand. Also, a brand may offer devices which comply with an IoT standard, for example Zigbee or Z-Wave.
@@ -53,4 +52,4 @@ A list of integration domains implementing offerings of the brand.
## IoT standards
-A list of IoT standards which are supported by devices of the brand. Possible values are `homekit`, `zigbee` and `zwave`. Note that a certain device may not support any of the listed IoT standards.
\ No newline at end of file
+A list of IoT standards which are supported by devices of the brand. Possible values are `homekit`, `zigbee` and `zwave`. Note that a certain device may not support any of the listed IoT standards.
diff --git a/docs/intent_builtin.md b/docs/intent_builtin.md
index 22060dcb..20c25df9 100644
--- a/docs/intent_builtin.md
+++ b/docs/intent_builtin.md
@@ -2,25 +2,40 @@
title: "Built-in intents"
---
-Home Assistant comes with a couple of built-in intents. These intents aim to offer similar functionality as exposed via the services. All built-in intents are prefixed with "Hass" to avoid collision with user defined intents.
+import intents from '!!yaml-loader!../intents/intents.yaml';
-## Core
+The following intents are supported by Home Assistant:
-### HassTurnOff
+<>
+{
+ Object.entries(intents)
+ .filter(([intent, info]) => !intent.startsWith("HassClimate"))
+ .map(
+ ([intent, info]) =>
+ <>
+
{intent}
+ {info.description}
+ Slots
+ {info.slots && (
+
+ {Object.entries(info.slots).map(([slot, slotInfo]) => (
+ -
+ {slot} - {slotInfo.description}
+
+ ))}
+
+ )}
+
+ Provided by the {info.domain}
integration.
+
+ >
+ )
+}
+>
-Turn an entity off.
+## Deprecated intents
-| Slot name | Type | Required | Description
-| --------- | ---- | -------- | -----------
-| name | string | Yes | Name of the entity to turn off.
-
-### HassTurnOn
-
-Turn an entity on.
-
-| Slot name | Type | Required | Description
-| --------- | ---- | -------- | -----------
-| name | string | Yes | Name of the entity to turn on.
+These are old intents that are not supported by template matching sentences and are planned to be removed or replaced.
### HassToggle
@@ -30,26 +45,6 @@ Toggle the state of an entity.
| --------- | ---- | -------- | -----------
| name | string | Yes | Name of the entity to toggle.
-## Cover
-
-### HassOpenCover
-
-Open a cover.
-
-| Slot name | Type | Required | Description
-| --------- | ---- | -------- | -----------
-| name | string | Yes | Name of the cover entity to open.
-
-### HassCloseCover
-
-Close a cover.
-
-| Slot name | Type | Required | Description
-| --------- | ---- | -------- | -----------
-| name | string | Yes | Name of the cover entity to close.
-
-## Humidifier
-
### HassHumidifierSetpoint
Set target humidity.
@@ -68,20 +63,6 @@ Set humidifier mode if supported by the humidifier.
| name | string | Yes | Name of the entity to control.
| mode | string | Yes | The mode to switch to.
-## Light
-
-### HassLightSet
-
-Set the state of a light.
-
-| Slot name | Type | Required | Description
-| --------- | ---- | -------- | -----------
-| name | string | Yes | Name of the entity to toggle.
-| color | string, name of valid color | No | Color to change the light to.
-| brightness | integer, 0-100 | No | Brightness to change the light to.
-
-## Shopping List
-
### HassShoppingListAddItem
Add an item to the shopping list.
@@ -95,3 +76,7 @@ Add an item to the shopping list.
List the last 5 items on the shopping list.
_This intent has no slots._
+
+
+
+[This page is automatically generated based on the Intents repository.](https://github.com/home-assistant/intents/blob/main/intents.yaml)
diff --git a/docs/voice/intent-recognition/contributing.md b/docs/voice/intent-recognition/contributing.md
new file mode 100644
index 00000000..78a8dd2c
--- /dev/null
+++ b/docs/voice/intent-recognition/contributing.md
@@ -0,0 +1,31 @@
+---
+title: "Contributing template sentences"
+sidebar_label: "Contributing sentences"
+---
+
+Template sentences need to be contributed to our [Intents repository on GitHub](https://github.com/home-assistant/intents). The sentences will be reviewed by [the language leaders](../language-leaders.md) and merged if they are correct. You can either contribute new sentences or improve existing ones. See [the format page](template-sentence-syntax) on how the repostory is structured.
+
+We prefer a lot of small contributions over a few large ones. Contributions that contain a lot of changes are hard to review. That's why we want each contribution limited to a single language and single domain.
+
+The filenames of sentences and tests are named like `_.yaml`. So if you are contributing to the cover domain, you would update the following files:
+
+- `sentences//cover_HassCoverOpen.yaml`
+- `sentences//cover_HassCoverClose.yaml`
+- `tests//cover_HassCoverOpen.yaml`
+- `tests//cover_HassCoverClose.yaml`
+
+## How to contribute
+
+All contributions are done via Pull Requests on GitHub. Our recommended way is to use GitHub CodeSpaces. [Follow this tutorial to get started.](https://github.com/home-assistant/intents/blob/main/docs/codespace/README.md)
+
+Our repository has a lot of checks that you can use to make sure that your contributed sentences are valid. You can run them locally from VS Code using `terminal -> run task`.
+
+The checks will also run automatically when you create a Pull Request. Contributions cannot be accepted if the checks fail.
+
+## Adding a new language
+
+New languages should be based on the output of `python3 -m script.intentfest add_language `, which generates an empty language directory with all the files needed for a new language.
+
+Limit the first contribution to translations of the error sentences in `_common.yaml` and adding sentences and tests for the `homeassistant` domain.
+
+If you are unable to run the add_language script locally, ask in Discord to have a maintainer run it for you.
diff --git a/docs/voice/intent-recognition/index.md b/docs/voice/intent-recognition/index.md
new file mode 100644
index 00000000..2a234c2b
--- /dev/null
+++ b/docs/voice/intent-recognition/index.md
@@ -0,0 +1,17 @@
+---
+title: "Recognizing intents from user input"
+sidebar_label: "Introduction"
+---
+
+A voice assistant evolves around intent recognition. Intent recognition tries to extract the user's intent from their input. This intent, a data format, will then be executed by Home Assistant.
+
+Home Assistant's intent recognition is powered by [hassil](https://github.com/home-assistant/hassil). Hassil recognizes intents by matching the user input against sentence templates.
+
+A sentence template is a sentence that contains slots, placeholders for data, and supports various syntax to allow a single template match a wide range of similar sentences.
+
+> `(turn | switch) on [the] {area} lights`
+
+This example sentence template matches both `turn on kitchen lights` and `switch on the kitchen lights`. In both cases it will extract extra data `area` set to `kitchen`.
+
+In Home Assistant we are collecting our sentence templates [on GitHub](https://github.com/home-assistant/intents). The repository aims to contain for each language and each [supported intent in Home Assistant](../../intent_builtin), the possible sentences a user might say.
+
diff --git a/docs/voice/intent-recognition/supported-languages.md b/docs/voice/intent-recognition/supported-languages.md
new file mode 100644
index 00000000..3c62f189
--- /dev/null
+++ b/docs/voice/intent-recognition/supported-languages.md
@@ -0,0 +1,50 @@
+---
+title: "Supported Languages"
+---
+
+import languages from '!!yaml-loader!../../../intents/languages.yaml';
+import intents from '!!yaml-loader!../../../intents/intents.yaml';
+
+If you don't see your language below, [help us translate!](./contributing)
+
+<>
+
+
+
+ Code |
+ Language |
+ Leader |
+ Links |
+
+
+
+ {
+ Object.entries(languages).map(
+ ([language, info]) =>
+
+
+ {language}
+ |
+
+ {info.nativeName}
+ |
+
+ {info.leaders?.length &&
+ info.leaders.map((leader, idx) =>
+ <>
+ {!!idx && ', '}
+ {leader}
+ >
+ )}
+ |
+
+ Sentences
+ |
+
+ )
+ }
+
+
+>
+
+[This page is automatically generated based on the Intents repository.](https://github.com/home-assistant/intents/blob/main/languages.yaml)
diff --git a/docs/voice/intent-recognition/template-sentence-syntax.md b/docs/voice/intent-recognition/template-sentence-syntax.md
new file mode 100644
index 00000000..8f52501c
--- /dev/null
+++ b/docs/voice/intent-recognition/template-sentence-syntax.md
@@ -0,0 +1,112 @@
+---
+title: "Template Sentence Syntax"
+---
+
+Template sentences are defined in YAML files using the format of [Hassil, our template matcher](https://github.com/home-assistant/hassil). Our template sentences are stored [on GitHub](https://github.com/home-assistant/intents/tree/main/sentences) and are organized by having for each language a directory of files:
+
+ - `_common.yaml` - Lists, expansion rules and skip words to be used across all template sentences.
+ - `_.yaml` - Template sentences for a [single intent](../../intent_builtin) and domain.
+
+Besides the data in `_common.yaml`, template sentences can also use the lists `name` and `area`. These lists are made available by Home Assistant during intent recognition.
+
+``` yaml
+# Example light_HassTurnOn.yaml
+language: "en"
+intents:
+ HassTurnOn: # Intent name
+ data:
+ - sentences:
+ - " on [all] [the] (light | lights) in [the] {area}"
+ - " on [all] [the] {area} (light | lights)"
+ - " [all] [the] (light | lights) in [the] {area} on"
+ # Optional; used to set fixed slot values when the intent is matched
+ slots:
+ domain: "light"
+```
+
+The above example will match the sentence `turn on all the lights in the living room` to the intent `HassTurnOn` and extract the area `living room`. The domain value is set to `light`. In Home Assistant, when the intent is executed, it will turn on all entities of type `light` in the area `living room`.
+
+## Sentence Templates Syntax
+
+* Alternative word, phrases, or parts of a word
+ * `(red | green | blue)`
+ * `turn(ed | ing)`
+* Optional word, phrases, or parts of a word
+ * `[the]`
+ * `[this | that]`
+ * `light[s]`
+* Slot Lists
+ * `{list_name}`
+ * `{list_name:slot_name}` (if intent slot is named different)
+ * Every value of the list is a different option
+ * In YAML, `list_name` should be under `lists`
+ * Use `values` for text lists, `range` for numeric lists
+* Expansion Rules
+ * ``
+ * The body of the rule is substituted for ``
+ * In YAML, `rule_name` should be under `expansion_rules`. If the `rule_name` wraps a slot name, it should match the slot name. Otherwise it should be in the native language.
+
+## The common file
+
+The common file `_common.yaml` contains lists, expansion rules, and skip words that are used across template sentences for all intents and domains.
+
+### Lists
+
+Lists are possible values for a slot. Slots are data that we want to extract from a sentence. For example, we can make a list `color` to match possible colors.
+
+```yaml
+lists:
+ color:
+ values:
+ - "white"
+ - "red"
+ - "orange"
+```
+
+Intent handlers in Home Assistant expect color to be defined in English. To allow other languages to define colors, lists support the in-out format. This allows you to define a list of values in the native language, but the intent handler will receive the values in English.
+
+```yaml
+lists:
+ color:
+ values:
+ - in: "rood"
+ out: "red"
+ - in: "oranje"
+ out: "orange"
+```
+
+A list can also be a range of numbers. This is useful for defining a range of brightness values or temperature that you want to match.
+
+```yaml
+lists:
+ brightness:
+ range:
+ type: "percentage"
+ from: 0
+ to: 100
+```
+
+### Expansion Rules
+
+A lot of template sentences can be written in a similar way. To avoid having to repeat the same matching structure multiple times, we can define expansion rules. For example, a user might add "the" in front of the area name, or they might not. We can define an expansion rule to match both cases.
+
+Expansion rules can contain slots, lists, and other expansion rules.
+
+```yaml
+expansion_rules:
+ name: "[the] {name}"
+ area: "[the] {area}"
+ what_is: "(what's | whats | what is)"
+ brightness: "{brightness} [percent]"
+ turn: "(turn | switch)"
+```
+
+### Skip Words
+
+Skip words are words that the intent recognizer will skip during recognition. This is useful for words that are not part of the intent, but are commonly used in sentences. For example, a user might use the word "please" in a sentence, but it is not part of the intent.
+
+```yaml
+skip_words:
+ - "please"
+ - "can you"
+```
diff --git a/docs/voice/intent-recognition/test-syntax.md b/docs/voice/intent-recognition/test-syntax.md
new file mode 100644
index 00000000..6e9b0d65
--- /dev/null
+++ b/docs/voice/intent-recognition/test-syntax.md
@@ -0,0 +1,50 @@
+---
+title: "Intent Matching Test Syntax"
+sidebar_label: "Test Syntax"
+---
+
+To ensure that the template sentences work as expected, we have an extensive test suite. This test suite is based on YAML files that contain a list of input sentences and the expected matched intent and slots.
+
+The tests are stored [on GitHub](https://github.com/home-assistant/intents/tree/main/tests) and are organized by having for each language a directory of files:
+
+ - `_fixtures.yaml` - Fake entities and areas that can be referenced during testing
+ - `_.yaml` - Sentences for a [single intent](../../intent_builtin) and domain. These files should only test sentences that are defined in the [match sentences file](./template-sentence-syntax) with the same name.
+
+``` yaml
+# Example homeassistant_HassTurnOn.yaml
+language: "en"
+tests:
+ # You can have multiple blocks of tests, each with different expected match data
+ - sentences:
+ # Multiple sentences can be tested at once
+ - "turn on the ceiling fan"
+ - "turn the ceiling fan on"
+ # Expected match data
+ intent:
+ name: "HassTurnOn"
+ slots:
+ name: "fan.ceiling"
+```
+
+## Fixtures
+
+When Home Assistant is matching sentences, it will provide a list of areas and entities that can be referenced in the sentence. For tests we define these in `_fixtures.yaml`.
+
+```yaml
+# Example _fixtures.yaml for English
+language: "en"
+areas:
+ - name: "Kitchen"
+ id: "kitchen"
+ - name: "Living Room"
+ id: "living_room"
+entities:
+ - name: "Kitchen Switch"
+ id: "switch.kitchen"
+ area: "kitchen"
+ - name: "Curtain Left"
+ id: "cover.curtain_left"
+ area: "living_room"
+```
+
+Make sure that fixtures do not have generic names like "garage door" or "curtains". Instead, use a unique name like "garage door left" or "curtains left". This is necessary to allow defining matching sentences based on the generic names, like "open the garage door".
diff --git a/docs/voice/intents/index.md b/docs/voice/intents/index.md
new file mode 100644
index 00000000..264ad85b
--- /dev/null
+++ b/docs/voice/intents/index.md
@@ -0,0 +1,10 @@
+---
+title: "Intents"
+---
+
+See the Home Assistant Core documentation for intents for:
+
+ - [Built-in intents](../../intent_builtin) that are supported by Home Assistant.
+ - Use [the Conversation API](../../intent_conversation_api) to send text commands to Home Assistant and receive responses.
+ - [Register intent handlers](../../intent_handling) to add new intents to Home Assistant.
+ - [Fire intents](../../intent_firing) if you have your own sentence matching logic and want Home Assistant to handle the intents.
diff --git a/docs/voice/language-leaders.md b/docs/voice/language-leaders.md
new file mode 100644
index 00000000..e204be31
--- /dev/null
+++ b/docs/voice/language-leaders.md
@@ -0,0 +1,23 @@
+---
+title: "Language Leaders"
+---
+
+Home Assistant is a global project. We want to make sure that everyone can use Home Assistant in their native language. For that reason, we have language leaders for each language to lead the maintenance.
+
+Language leaders are responsible for reviewing the contributions in their language and making sure that they are grammatically correct.
+
+Language leaders will be automatically notified of any new contribution to the language that they maintain. It's their responsibility to review the contribution and accept it.
+
+Anyone can apply to become a language leader if they meet the following requirements:
+
+- Be a native speaker of the language they want to lead
+- Make 2+ pull requests to the intents repository
+- Be involved with reviewing pull requests for the language
+
+If you want to apply to be a language leader, join us in `#devs_voice` on Discord or [open a discussion topic](https://github.com/home-assistant/intents/discussions).
+
+## Losing language leader status
+
+A language leader is a gatekeeper for a language. If they are inactive, language contributions for that language are not processed.
+
+If the inactivity of the language leader becomes a bottle neck, the language leader will be removed. If they want to regain their status, they can apply again.
diff --git a/docs/voice/overview.md b/docs/voice/overview.md
new file mode 100644
index 00000000..98d85049
--- /dev/null
+++ b/docs/voice/overview.md
@@ -0,0 +1,45 @@
+---
+title: "Voice in Home Assistant"
+sidebar_label: Overview
+---
+
+:::info
+
+Voice in Home Assistant is a work in progress. Not all parts described on this page have been implemented.
+
+:::
+
+Building a voice assistant is a complex task. It requires a lot of different technologies to work together. This page will give you an overview of the different parts inside Home Assistant and how they will work together.
+
+
+```mermaid
+graph TD;
+ U((User))
+ STT[Speech-to-Text]
+ VA[Voice Assistant]
+ C[Conversation]
+ I[Intent]
+ TTS[Text-to-Speech]
+ U -->|1. Speech + Metadata| VA;
+ VA -->|2. Speech| STT
+ STT -->|3. Sentence| VA
+ VA -->|4. Sentence +\n Metadata| C
+ C -->|5. Intent| I
+ I -->|6. Intent Response| C;
+ C -->|7. Intent Response| VA;
+ VA -->|8. Intent Response| TTS
+ TTS -->|9. Response Audio| VA
+ VA -->|10. Response Audio| U
+```
+
+ - The **Voice Assistant** integration is responsible for turning the user's speech into text, get it processed, and turn the response into speech.
+ - The **conversation** integration is responsible for processing user's text. It does this by matching it to an intent.
+ - The **Intent** integration is responsible for executing the intent and returning a response.
+- The **Text-to-Speech** integration is responsible for turning text into speech.
+- The **Speech-to-Text** integration is responsible for turning speech into text.
+
+## Capturing the user's speech
+
+The thing that the above diagram does not describe is how the user's speech is captured. There will be many ways to do this.
+
+The ultimate goal is to make **Voice Satellites**. These are devices that can be placed anywhere in the house. Once it detects the hot word, it will capture the user's speech, send it to Home Assistant, and play the response back to the user.
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 459d6ede..45289f8d 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -31,25 +31,10 @@ module.exports = {
{ to: "docs/supervisor", label: "Supervisor" },
{ to: "docs/add-ons", label: "Add-ons" },
{ to: "docs/operating-system", label: "Operating System" },
+ { to: "docs/voice/overview", label: "Voice" },
+ { to: "docs/translations", label: "Translations" },
],
},
- {
- label: "Documenting",
- position: "left",
- items: [
- { label: "Getting Started", to: "docs/documenting" },
- { label: "Standards", to: "docs/documenting/standards" },
- {
- label: "YAML Style Guide",
- to: "docs/documenting/yaml-style-guide",
- },
- {
- label: "Create a new page",
- to: "docs/documenting/create-page",
- },
- ],
- },
- { label: "Translations", to: "docs/translations", position: "left" },
{ to: "docs/misc", label: "Misc", position: "left" },
{ to: "blog", label: "Blog", position: "left" },
],
@@ -134,6 +119,9 @@ module.exports = {
copyright: `Copyright © ${new Date().getFullYear()} Home Assistant. Built with Docusaurus.`,
},
image: "img/default-social.png",
+ mermaid: {
+ theme: { light: "neutral", dark: "forest" },
+ },
},
presets: [
[
@@ -171,4 +159,8 @@ module.exports = {
},
],
],
+ markdown: {
+ mermaid: true,
+ },
+ themes: ["@docusaurus/theme-mermaid"],
};
diff --git a/netlify.toml b/netlify.toml
index 9d36ada3..852d5eb1 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -12,7 +12,7 @@
publish = "build"
# Default build command.
- command = "yarn build"
+ command = "script/bootstrap && yarn build"
[[redirects]]
from = "/docs/en/next/*"
diff --git a/package.json b/package.json
index 4a5cd598..de829b9f 100644
--- a/package.json
+++ b/package.json
@@ -14,11 +14,13 @@
"dependencies": {
"@docusaurus/core": "^2.2.0",
"@docusaurus/preset-classic": "^2.2.0",
+ "@docusaurus/theme-mermaid": "^2.2.0",
"@easyops-cn/docusaurus-search-local": "^0.33.6",
"by-node-env": "^2.0.1",
"clsx": "^1.2.1",
+ "react-dom": "^17.0.2",
"react": "^18.2.0",
- "react-dom": "^17.0.2"
+ "yaml-loader": "^0.8.0"
},
"resolutions": {},
"browserslist": {
@@ -33,4 +35,4 @@
"last 1 safari version"
]
}
-}
\ No newline at end of file
+}
diff --git a/script/bootstrap b/script/bootstrap
index 476be218..d67550cd 100755
--- a/script/bootstrap
+++ b/script/bootstrap
@@ -3,3 +3,14 @@ set -e
cd "$(dirname "$0")/.."
yarn
+
+# test if intents directory exists
+
+if [ ! -d "intents" ]; then
+ git clone --depth 1 https://github.com/home-assistant/intents.git
+fi
+
+cd intents
+git pull
+cd ..
+
diff --git a/sidebars.js b/sidebars.js
index cbaf116d..e62e080e 100644
--- a/sidebars.js
+++ b/sidebars.js
@@ -18,12 +18,6 @@ module.exports = {
"add-ons/security",
],
Overview: ["architecture_index"],
- Documenting: [
- "documenting",
- "documenting/standards",
- "documenting/yaml-style-guide",
- "documenting/create-page",
- ],
Frontend: [
"frontend",
"frontend/architecture",
@@ -105,7 +99,6 @@ module.exports = {
items: [
"creating_component_index",
"creating_integration_file_structure",
- "creating_integration_brand",
"creating_integration_manifest",
"config_entries_config_flow_handler",
"config_entries_options_flow_handler",
@@ -209,6 +202,7 @@ module.exports = {
"api/native-app-integration/webview",
],
},
+ "creating_integration_brand",
"core/platform/application_credentials",
"core/platform/backup",
"core/platform/repairs",
@@ -225,9 +219,40 @@ module.exports = {
items: ["development_validation", "development_typing", "instance_url"],
},
],
+ Voice: [
+ "voice/overview",
+ "voice/intents/index",
+
+ {
+ type: "category",
+ label: "Intent Recognition",
+ items: [
+ "voice/intent-recognition/index",
+ "voice/intent-recognition/template-sentence-syntax",
+ "voice/intent-recognition/test-syntax",
+ "voice/intent-recognition/supported-languages",
+ "voice/intent-recognition/contributing",
+ ],
+ },
+
+ "voice/language-leaders",
+ ],
Misc: [
"misc",
+
+ // Documenting as a category
+ {
+ type: "category",
+ label: "Documenting",
+ items: [
+ "documenting",
+ "documenting/standards",
+ "documenting/yaml-style-guide",
+ "documenting/create-page",
+ ],
+ },
+
{
type: "category",
label: "Building a Python library",
diff --git a/yarn.lock b/yarn.lock
index 7c7c8aa7..dae8ccfe 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1175,6 +1175,11 @@
"@babel/helper-validator-identifier" "^7.19.1"
to-fast-properties "^2.0.0"
+"@braintree/sanitize-url@^6.0.0":
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz#6110f918d273fe2af8ea1c4398a88774bb9fc12f"
+ integrity sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==
+
"@colors/colors@1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
@@ -1509,6 +1514,20 @@
tslib "^2.4.0"
utility-types "^3.10.0"
+"@docusaurus/theme-mermaid@^2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@docusaurus/theme-mermaid/-/theme-mermaid-2.2.0.tgz#0dc9bb7013c0280726a0c7a26419b1f5e79755f3"
+ integrity sha512-rEhVvWyZ9j9eABTvJ8nhfB5NbyiThva3U9J7iu4RxKYymjImEh9MiqbEdOrZusq6AQevbkoHB7n+9VsfmS55kg==
+ dependencies:
+ "@docusaurus/core" "2.2.0"
+ "@docusaurus/module-type-aliases" "2.2.0"
+ "@docusaurus/theme-common" "2.2.0"
+ "@docusaurus/types" "2.2.0"
+ "@docusaurus/utils-validation" "2.2.0"
+ "@mdx-js/react" "^1.6.22"
+ mermaid "^9.1.1"
+ tslib "^2.4.0"
+
"@docusaurus/theme-search-algolia@2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz#77fd9f7a600917e6024fe3ac7fb6cfdf2ce84737"
@@ -3078,6 +3097,11 @@ commander-remaining-args@^1.2.0:
resolved "https://registry.yarnpkg.com/commander-remaining-args/-/commander-remaining-args-1.2.0.tgz#6fab4cce4a59db1698121f59105364adcb0b4c68"
integrity sha512-yH0yRUtHhJ/389HWgQlEMAwqKXMZr/JJH4xqDIzXCisNy2mS6YSAe3WncgjxZvhLJqZPxJn8MivRK+B0lSNXPw==
+commander@7, commander@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+ integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -3088,11 +3112,6 @@ commander@^5.1.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
-commander@^7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
- integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-
commander@^8.3.0:
version "8.3.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
@@ -3408,6 +3427,258 @@ csstype@^3.0.2:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
+"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.1.tgz#39331ea706f5709417d31bbb6ec152e0328b39b3"
+ integrity sha512-gUY/qeHq/yNqqoCKNq4vtpFLdoCdvyNpWoC/KNjhGbhDuQpAM9sIQQKkXSNpXa9h5KySs/gzm7R88WkUutgwWQ==
+ dependencies:
+ internmap "1 - 2"
+
+d3-axis@3:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322"
+ integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==
+
+d3-brush@3:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-3.0.0.tgz#6f767c4ed8dcb79de7ede3e1c0f89e63ef64d31c"
+ integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==
+ dependencies:
+ d3-dispatch "1 - 3"
+ d3-drag "2 - 3"
+ d3-interpolate "1 - 3"
+ d3-selection "3"
+ d3-transition "3"
+
+d3-chord@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-3.0.1.tgz#d156d61f485fce8327e6abf339cb41d8cbba6966"
+ integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==
+ dependencies:
+ d3-path "1 - 3"
+
+"d3-color@1 - 3", d3-color@3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2"
+ integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==
+
+d3-contour@4:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-4.0.1.tgz#886226a680679d2f67b45f57048a002b2ceb173c"
+ integrity sha512-CMSllVHhBsqw3xrOCMXn5PCRZbLIMmsVj922YdqTiVMxi5jLHwg5y3mnZAC1Cm4xKgmx3sLjaSkuBKfZwx8LEQ==
+ dependencies:
+ d3-array "^3.2.0"
+
+d3-delaunay@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.2.tgz#7fd3717ad0eade2fc9939f4260acfb503f984e92"
+ integrity sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==
+ dependencies:
+ delaunator "5"
+
+"d3-dispatch@1 - 3", d3-dispatch@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e"
+ integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==
+
+"d3-drag@2 - 3", d3-drag@3:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba"
+ integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==
+ dependencies:
+ d3-dispatch "1 - 3"
+ d3-selection "3"
+
+"d3-dsv@1 - 3", d3-dsv@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73"
+ integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==
+ dependencies:
+ commander "7"
+ iconv-lite "0.6"
+ rw "1"
+
+"d3-ease@1 - 3", d3-ease@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4"
+ integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==
+
+d3-fetch@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22"
+ integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==
+ dependencies:
+ d3-dsv "1 - 3"
+
+d3-force@3:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4"
+ integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==
+ dependencies:
+ d3-dispatch "1 - 3"
+ d3-quadtree "1 - 3"
+ d3-timer "1 - 3"
+
+"d3-format@1 - 3", d3-format@3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641"
+ integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==
+
+d3-geo@3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.0.tgz#74fd54e1f4cebd5185ac2039217a98d39b0a4c0e"
+ integrity sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==
+ dependencies:
+ d3-array "2.5.0 - 3"
+
+d3-hierarchy@3:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6"
+ integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==
+
+"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d"
+ integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==
+ dependencies:
+ d3-color "1 - 3"
+
+"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526"
+ integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==
+
+d3-polygon@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398"
+ integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==
+
+"d3-quadtree@1 - 3", d3-quadtree@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f"
+ integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==
+
+d3-random@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4"
+ integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==
+
+d3-scale-chromatic@3:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#15b4ceb8ca2bb0dcb6d1a641ee03d59c3b62376a"
+ integrity sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==
+ dependencies:
+ d3-color "1 - 3"
+ d3-interpolate "1 - 3"
+
+d3-scale@4:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396"
+ integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==
+ dependencies:
+ d3-array "2.10.0 - 3"
+ d3-format "1 - 3"
+ d3-interpolate "1.2.0 - 3"
+ d3-time "2.1.1 - 3"
+ d3-time-format "2 - 4"
+
+"d3-selection@2 - 3", d3-selection@3:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31"
+ integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==
+
+d3-shape@3:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5"
+ integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==
+ dependencies:
+ d3-path "^3.1.0"
+
+"d3-time-format@2 - 4", d3-time-format@4:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a"
+ integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==
+ dependencies:
+ d3-time "1 - 3"
+
+"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7"
+ integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==
+ dependencies:
+ d3-array "2 - 3"
+
+"d3-timer@1 - 3", d3-timer@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0"
+ integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==
+
+"d3-transition@2 - 3", d3-transition@3:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f"
+ integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==
+ dependencies:
+ d3-color "1 - 3"
+ d3-dispatch "1 - 3"
+ d3-ease "1 - 3"
+ d3-interpolate "1 - 3"
+ d3-timer "1 - 3"
+
+d3-zoom@3:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3"
+ integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==
+ dependencies:
+ d3-dispatch "1 - 3"
+ d3-drag "2 - 3"
+ d3-interpolate "1 - 3"
+ d3-selection "2 - 3"
+ d3-transition "2 - 3"
+
+d3@^7.0.0, d3@^7.7.0:
+ version "7.8.0"
+ resolved "https://registry.yarnpkg.com/d3/-/d3-7.8.0.tgz#c9441f0ea9266b1003a97c2ffd53e79e9e14b1fc"
+ integrity sha512-a5rNemRadWkEfqnY5NsD4RdCP9vn8EIJ4I5Rl14U0uKH1SXqcNmk/h9aGaAF1O98lz6L9M0IeUcuPa9GUYbI5A==
+ dependencies:
+ d3-array "3"
+ d3-axis "3"
+ d3-brush "3"
+ d3-chord "3"
+ d3-color "3"
+ d3-contour "4"
+ d3-delaunay "6"
+ d3-dispatch "3"
+ d3-drag "3"
+ d3-dsv "3"
+ d3-ease "3"
+ d3-fetch "3"
+ d3-force "3"
+ d3-format "3"
+ d3-geo "3"
+ d3-hierarchy "3"
+ d3-interpolate "3"
+ d3-path "3"
+ d3-polygon "3"
+ d3-quadtree "3"
+ d3-random "3"
+ d3-scale "4"
+ d3-scale-chromatic "3"
+ d3-selection "3"
+ d3-shape "3"
+ d3-time "3"
+ d3-time-format "4"
+ d3-timer "3"
+ d3-transition "3"
+ d3-zoom "3"
+
+dagre-d3-es@7.0.6:
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.6.tgz#8cab465ff95aca8a1ca2292d07e1fb31b5db83f2"
+ integrity sha512-CaaE/nZh205ix+Up4xsnlGmpog5GGm81Upi2+/SBHxwNwrccBb3K51LzjZ1U6hgvOlAEUsVWf1xSTzCyKpJ6+Q==
+ dependencies:
+ d3 "^7.7.0"
+ lodash-es "^4.17.21"
+
debug@2.6.9, debug@^2.6.0:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -3478,6 +3749,13 @@ del@^6.1.1:
rimraf "^3.0.2"
slash "^3.0.0"
+delaunator@5:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b"
+ integrity sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==
+ dependencies:
+ robust-predicates "^3.0.0"
+
depd@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
@@ -3584,6 +3862,11 @@ domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3:
dependencies:
domelementtype "^2.3.0"
+dompurify@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.1.tgz#f9cb1a275fde9af6f2d0a2644ef648dd6847b631"
+ integrity sha512-ewwFzHzrrneRjxzmK6oVz/rZn9VWspGFRDb4/rRtIsM1n36t9AKma/ye8syCpcw+XJ25kOK/hOG7t1j2I2yBqA==
+
domutils@^2.5.2, domutils@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135"
@@ -4538,6 +4821,13 @@ iconv-lite@0.4.24:
dependencies:
safer-buffer ">= 2.1.2 < 3"
+iconv-lite@0.6:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
icss-utils@^5.0.0, icss-utils@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
@@ -4626,6 +4916,11 @@ inline-style-parser@0.1.1:
resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
+"internmap@1 - 2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
+ integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==
+
interpret@^1.0.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
@@ -4846,6 +5141,11 @@ isobject@^3.0.1:
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+javascript-stringify@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79"
+ integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==
+
jest-util@^29.2.1:
version "29.2.1"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.2.1.tgz#f26872ba0dc8cbefaba32c34f98935f6cf5fc747"
@@ -4959,6 +5259,11 @@ keyv@^3.0.0:
dependencies:
json-buffer "3.0.0"
+khroma@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/khroma/-/khroma-2.0.0.tgz#7577de98aed9f36c7a474c4d453d94c0d6c6588b"
+ integrity sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==
+
kind-of@^6.0.0, kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
@@ -5054,6 +5359,11 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
+lodash-es@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
+ integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+
lodash.curry@^4.0.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170"
@@ -5212,6 +5522,22 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+mermaid@^9.1.1:
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-9.3.0.tgz#8bd7c4a44b53e4e85c53a0a474442e9c273494ae"
+ integrity sha512-mGl0BM19TD/HbU/LmlaZbjBi//tojelg8P/mxD6pPZTAYaI+VawcyBdqRsoUHSc7j71PrMdJ3HBadoQNdvP5cg==
+ dependencies:
+ "@braintree/sanitize-url" "^6.0.0"
+ d3 "^7.0.0"
+ dagre-d3-es "7.0.6"
+ dompurify "2.4.1"
+ khroma "^2.0.0"
+ lodash-es "^4.17.21"
+ moment-mini "^2.24.0"
+ non-layered-tidy-tree-layout "^2.0.2"
+ stylis "^4.1.2"
+ uuid "^9.0.0"
+
methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
@@ -5295,6 +5621,11 @@ minimist@^1.2.0, minimist@^1.2.5:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
+moment-mini@^2.24.0:
+ version "2.29.4"
+ resolved "https://registry.yarnpkg.com/moment-mini/-/moment-mini-2.29.4.tgz#cbbcdc58ce1b267506f28ea6668dbe060a32758f"
+ integrity sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==
+
mrmime@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27"
@@ -5370,6 +5701,11 @@ node-releases@^2.0.6:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
+non-layered-tidy-tree-layout@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz#57d35d13c356643fc296a55fb11ac15e74da7804"
+ integrity sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==
+
normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@@ -6596,6 +6932,11 @@ rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
+robust-predicates@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a"
+ integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==
+
rtl-detect@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6"
@@ -6618,6 +6959,11 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
+rw@1:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
+ integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==
+
rxjs@^7.5.4:
version "7.5.7"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39"
@@ -6635,7 +6981,7 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-"safer-buffer@>= 2.1.2 < 3":
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -7114,6 +7460,11 @@ stylehacks@^5.1.0:
browserslist "^4.16.6"
postcss-selector-parser "^6.0.4"
+stylis@^4.1.2:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7"
+ integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==
+
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -7524,6 +7875,11 @@ uuid@^8.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+uuid@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
+ integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
+
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
@@ -7848,11 +8204,25 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+yaml-loader@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/yaml-loader/-/yaml-loader-0.8.0.tgz#c839325e3fdee082b3768b2a21fe34fde5d96f61"
+ integrity sha512-LjeKnTzVBKWiQBeE2L9ssl6WprqaUIxCSNs5tle8PaDydgu3wVFXTbMfsvF2MSErpy9TDVa092n4q6adYwJaWg==
+ dependencies:
+ javascript-stringify "^2.0.1"
+ loader-utils "^2.0.0"
+ yaml "^2.0.0"
+
yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2:
version "1.10.2"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+yaml@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4"
+ integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==
+
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"