From d82a983460c83672c7160b93810ff64c011db794 Mon Sep 17 00:00:00 2001 From: Daniel Leroux Date: Fri, 17 Jul 2026 10:10:07 +0200 Subject: [PATCH 1/2] chore: lint markdown files --- .github/workflows/build.yml | 3 + .github/workflows/pr.yml | 3 + docs/components/date-picker/guide.mdx | 32 +- docs/components/date-time-picker/code.mdx | 9 +- docs/components/date-time-picker/guide.mdx | 32 +- docs/components/forms-validation/code.mdx | 12 +- docs/components/input-date-time/guide.mdx | 26 +- docs/components/input-time/guide.mdx | 26 +- docs/components/loading-modal/guide.md | 24 +- docs/components/message-modal/guide.md | 26 +- docs/components/modal/guide.md | 34 +- docs/components/overview.md | 40 +- docs/components/progress-indicator/guide.md | 28 +- docs/components/time-picker/guide.mdx | 24 +- .../essentials/wording-terms.mdx | 342 ++--- docs/guidelines/language/basics.md | 132 +- .../language/dialogs-and-buttons.md | 48 +- .../language/formatting/addresses.mdx | 212 ++-- docs/guidelines/language/formatting/date.mdx | 272 ++-- .../language/formatting/measurements.mdx | 288 ++--- docs/guidelines/language/formatting/money.mdx | 112 +- .../language/formatting/names-titles.mdx | 180 +-- .../language/formatting/numbers.mdx | 366 +++--- .../language/formatting/software-versions.mdx | 162 +-- .../language/formatting/timezones.mdx | 328 ++--- .../language/frequent-app-functions.md | 98 +- .../language/grammar-and-vocabulary.md | 176 +-- .../external-links-and-resources.md | 250 ++-- .../license-management.md | 486 +++---- .../logging-in-and-out.md | 444 +++---- .../onboarding.md | 170 +-- .../search-and-filter.md | 536 ++++---- .../ui-terminology.md | 180 +-- .../user-management.md | 424 +++---- .../whats-new-announcements.md | 148 +-- .../messaging/empty-state-messages.mdx | 40 +- .../language/messaging/error-messages.mdx | 260 ++-- .../language/messaging/error-pages.md | 80 +- .../language/messaging/infotips.mdx | 106 +- .../language/messaging/messages-overview.md | 188 +-- .../non-critical-information-messages.mdx | 160 +-- .../language/messaging/progress-updates.mdx | 248 ++-- .../language/messaging/warning-messages.mdx | 160 +-- docs/guidelines/language/punctuation.md | 124 +- eslint.config.mjs | 24 + package.json | 3 + pnpm-lock.yaml | 1111 ++++++++++++++--- scripts/eslint-rules/markup-indent.mjs | 433 +++++++ 48 files changed, 4947 insertions(+), 3663 deletions(-) create mode 100644 eslint.config.mjs create mode 100644 scripts/eslint-rules/markup-indent.mjs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 142afd4ae..2748cbfcd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,6 +19,9 @@ jobs: - uses: ./.github/workflows/actions/turbo + - name: Lint Markdown + run: pnpm lint:markdown + - name: Build run: pnpm build env: diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 46f88ffde..655d73adb 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -23,6 +23,9 @@ jobs: - uses: ./.github/workflows/actions/turbo + - name: Lint Markdown + run: pnpm lint:markdown + - name: Build run: pnpm build env: diff --git a/docs/components/date-picker/guide.mdx b/docs/components/date-picker/guide.mdx index 3d7e2157f..2c628e14d 100644 --- a/docs/components/date-picker/guide.mdx +++ b/docs/components/date-picker/guide.mdx @@ -41,22 +41,22 @@ Individual calendar dates within a date picker have five states: Default, hover, ## Dos and Don’ts
-
-
    -
  • Do use date pickers to ensure accurate date selection
  • -
  • Do provide clear labels when the date picker is used in a form context
  • -
  • Do ensure the date picker is accessible via keyboard navigation
  • -
  • Do use range selection for date periods like booking dates or report timeframes
  • -
  • Do set min and max dates to prevent invalid date selections
  • -
-
-
-
    -
  • Don’t use date pickers for dates that are far in the past or future, use [date inputs](../input) instead
  • -
  • Don’t clutter the date picker interface with unnecessary options
  • -
  • Don’t forget to handle empty or invalid date states in your validation logic
  • -
-
+
+
    +
  • Do use date pickers to ensure accurate date selection
  • +
  • Do provide clear labels when the date picker is used in a form context
  • +
  • Do ensure the date picker is accessible via keyboard navigation
  • +
  • Do use range selection for date periods like booking dates or report timeframes
  • +
  • Do set min and max dates to prevent invalid date selections
  • +
+
+
+
    +
  • Don’t use date pickers for dates that are far in the past or future, use [date inputs](../input) instead
  • +
  • Don’t clutter the date picker interface with unnecessary options
  • +
  • Don’t forget to handle empty or invalid date states in your validation logic
  • +
+
## Related diff --git a/docs/components/date-time-picker/code.mdx b/docs/components/date-time-picker/code.mdx index 45c4a1e05..d4e7b8388 100644 --- a/docs/components/date-time-picker/code.mdx +++ b/docs/components/date-time-picker/code.mdx @@ -12,8 +12,9 @@ import DatetimepickerPlayground from '@site/docs/autogenerated/playground/dateti - - +``` + +*/} diff --git a/docs/components/date-time-picker/guide.mdx b/docs/components/date-time-picker/guide.mdx index 333ac49c8..e715820d9 100644 --- a/docs/components/date-time-picker/guide.mdx +++ b/docs/components/date-time-picker/guide.mdx @@ -42,22 +42,22 @@ Individual calendar dates within a date time picker have five states: Default, h ## Dos and Don’ts
-
-
    -
  • Do use date time pickers when both date and time information are required
  • -
  • Do ensure the date time picker is accessible via keyboard navigation
  • -
  • Do use range selection for time periods like booking appointments or scheduling events
  • -
  • Do set appropriate min and max dates to prevent invalid selections
  • -
-
-
-
    -
  • Don’t use date time pickers when only a date or only a time is needed (use [date pickers](../date-picker) or [time pickers](../time-picker) instead)
  • -
  • Don’t forget to validate both date and time inputs in your form logic
  • -
  • Don’t use date time pickers for dates that are far in the past or future without setting appropriate min and max constraints
  • -
  • Don’t clutter the interface with unnecessary time precision when approximate times are sufficient
  • -
-
+
+
    +
  • Do use date time pickers when both date and time information are required
  • +
  • Do ensure the date time picker is accessible via keyboard navigation
  • +
  • Do use range selection for time periods like booking appointments or scheduling events
  • +
  • Do set appropriate min and max dates to prevent invalid selections
  • +
+
+
+
    +
  • Don’t use date time pickers when only a date or only a time is needed (use [date pickers](../date-picker) or [time pickers](../time-picker) instead)
  • +
  • Don’t forget to validate both date and time inputs in your form logic
  • +
  • Don’t use date time pickers for dates that are far in the past or future without setting appropriate min and max constraints
  • +
  • Don’t clutter the interface with unnecessary time precision when approximate times are sufficient
  • +
+
## Related diff --git a/docs/components/forms-validation/code.mdx b/docs/components/forms-validation/code.mdx index 3f728a1cb..27906cdda 100644 --- a/docs/components/forms-validation/code.mdx +++ b/docs/components/forms-validation/code.mdx @@ -60,23 +60,23 @@ To suppress the internal validation of a component, you have to provide the `nov Please note that using the `required` attribute in an Angular application could result in unfavourabe behaviour displaying the field as invalid even if there was no user interaction yet. To avoid that it is suggested not to add the `required` attribute, but implement a custom validator for required fields instead (see `name` and `last-name` in the following code). - - + + ## React Using `react-form-hook` is just an example to demonstrate how validation could be done within React. You can use any other validation library or write your own validation logic. - - + + ## Vue Using `@vuelidate/core` is just an example to demonstrate how validation could be done within Vue. You can use any other validation library or write your own validation logic. - - + + diff --git a/docs/components/input-date-time/guide.mdx b/docs/components/input-date-time/guide.mdx index 80da113a1..cdc5fc644 100644 --- a/docs/components/input-date-time/guide.mdx +++ b/docs/components/input-date-time/guide.mdx @@ -56,19 +56,19 @@ Date time input has five states: Default, hover, disabled, read-only and focused ## Dos and Don’ts
-
-
    -
  • Do use consistent date and time formats throughout the application to avoid confusion
  • -
  • Do provide clear instructions on the expected format, such as "Enter the date time in yyyy/mm/dd HH:mm format"
  • -
  • Do consider localization to adapt date and time formats to local conventions
  • -
  • Do use separate inputs for start and end date times when defining time ranges
  • -
-
-
-
    -
  • Don't use date time inputs when only a date or only a time is needed (use [date input](../input-date) or [time input](../input-time) instead)
  • -
-
+
+
    +
  • Do use consistent date and time formats throughout the application to avoid confusion
  • +
  • Do provide clear instructions on the expected format, such as "Enter the date time in yyyy/mm/dd HH:mm format"
  • +
  • Do consider localization to adapt date and time formats to local conventions
  • +
  • Do use separate inputs for start and end date times when defining time ranges
  • +
+
+
+
    +
  • Don't use date time inputs when only a date or only a time is needed (use [date input](../input-date) or [time input](../input-time) instead)
  • +
+
## Related diff --git a/docs/components/input-time/guide.mdx b/docs/components/input-time/guide.mdx index 7705e7af9..93121dc01 100644 --- a/docs/components/input-time/guide.mdx +++ b/docs/components/input-time/guide.mdx @@ -57,19 +57,19 @@ Time input has five states: Default, hover, disabled, read-only and focused. ## Dos and Don’ts
-
-
    -
  • Do use consistent time formats throughout the application to avoid confusion
  • -
  • Do add helper text to clarify the time format being used
  • -
  • Do ensure the time picker is accessible via keyboard
  • -
  • Do consider localization to adapt time formats to local conventions
  • -
-
-
-
    -
  • Don’t use the same input for start and end times, instead separate them
  • -
-
+
+
    +
  • Do use consistent time formats throughout the application to avoid confusion
  • +
  • Do add helper text to clarify the time format being used
  • +
  • Do ensure the time picker is accessible via keyboard
  • +
  • Do consider localization to adapt time formats to local conventions
  • +
+
+
+
    +
  • Don’t use the same input for start and end times, instead separate them
  • +
+
## Related diff --git a/docs/components/loading-modal/guide.md b/docs/components/loading-modal/guide.md index cf68c3d39..8fbb1003b 100644 --- a/docs/components/loading-modal/guide.md +++ b/docs/components/loading-modal/guide.md @@ -31,18 +31,18 @@ Loading modals have two states: Closed and opened. ## Dos and Don’ts
-
-
    -
  • Do only use if any user interaction needs to be blocked, otherwise use [spinners](../spinner) instead
  • -
  • Do use if user interaction needs to be blocked and the progress is unknown, otherwise use [progress indicators](../progress-indicator) placed in [custom modals](../modal) instead
  • -
-
-
-
    -
  • Don’t block users for long tasks without an alternative
  • -
  • Don’t show vague messages that leave users unsure what is happening
  • -
-
+
+
    +
  • Do only use if any user interaction needs to be blocked, otherwise use [spinners](../spinner) instead
  • +
  • Do use if user interaction needs to be blocked and the progress is unknown, otherwise use [progress indicators](../progress-indicator) placed in [custom modals](../modal) instead
  • +
+
+
+
    +
  • Don’t block users for long tasks without an alternative
  • +
  • Don’t show vague messages that leave users unsure what is happening
  • +
+
## Related diff --git a/docs/components/message-modal/guide.md b/docs/components/message-modal/guide.md index 0af4a8129..ffd6afa5a 100644 --- a/docs/components/message-modal/guide.md +++ b/docs/components/message-modal/guide.md @@ -57,19 +57,19 @@ Message modals have two states: Closed and opened. ## Dos and Don’ts
-
-
    -
  • Do use action labels that describe the result (avoid Yes or No)
  • -
  • Do communicate consequences clearly for destructive actions
  • -
  • Do keep messages short and scannable
  • -
-
-
-
    -
  • Don’t use message modals for non-essential information, use [toasts](../toast) instead
  • -
  • Don’t hide confirm actions behind ambiguous labels
  • -
-
+
+
    +
  • Do use action labels that describe the result (avoid Yes or No)
  • +
  • Do communicate consequences clearly for destructive actions
  • +
  • Do keep messages short and scannable
  • +
+
+
+
    +
  • Don’t use message modals for non-essential information, use [toasts](../toast) instead
  • +
  • Don’t hide confirm actions behind ambiguous labels
  • +
+
## Related diff --git a/docs/components/modal/guide.md b/docs/components/modal/guide.md index 7252d312f..3ec2e1e84 100644 --- a/docs/components/modal/guide.md +++ b/docs/components/modal/guide.md @@ -59,23 +59,23 @@ Modals have two states: Closed and opened. ## Dos and Don’ts
-
-
    -
  • Do provide at least one visible way to close the modal
  • -
  • Do provide a clear primary action that describes the result
  • -
  • Do ensure all controls are accessible by keyboard and screen‑reader
  • -
  • Do preserve scroll position and page state when closing
  • -
  • Do return users to the previous state when cancelling, not an unrelated page
  • -
-
-
-
    -
  • Don’t use modals if a decision should be made (use [message modals](../message-modal) instead)
  • -
  • Don’t nest modals, e.g. to load more data, instead use [spinners](../spinner) within modal contents)
  • -
  • Don’t auto close modals for irreversible actions
  • -
  • Don’t overload the modal with unrelated content
  • -
-
+
+
    +
  • Do provide at least one visible way to close the modal
  • +
  • Do provide a clear primary action that describes the result
  • +
  • Do ensure all controls are accessible by keyboard and screen‑reader
  • +
  • Do preserve scroll position and page state when closing
  • +
  • Do return users to the previous state when cancelling, not an unrelated page
  • +
+
+
+
    +
  • Don’t use modals if a decision should be made (use [message modals](../message-modal) instead)
  • +
  • Don’t nest modals, e.g. to load more data, instead use [spinners](../spinner) within modal contents)
  • +
  • Don’t auto close modals for irreversible actions
  • +
  • Don’t overload the modal with unrelated content
  • +
+
## Related diff --git a/docs/components/overview.md b/docs/components/overview.md index 5ddd13d35..3e9765049 100644 --- a/docs/components/overview.md +++ b/docs/components/overview.md @@ -14,53 +14,53 @@ import { CategoryButton } from '@site/src/components/CategoryButton'; # - - + ![](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-249&t=gkh6VNlJun96I6Ac-4) - - + ![](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-259&t=gkh6VNlJun96I6Ac-4) - - + ![](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-269&t=gkh6VNlJun96I6Ac-4) - - + ![](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-283&t=gkh6VNlJun96I6Ac-4) - - + ![](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-298&t=gkh6VNlJun96I6Ac-11) - - + ![](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-305&t=gkh6VNlJun96I6Ac-11) - - + ![](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-332&t=gkh6VNlJun96I6Ac-11) - - + ![](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-370&t=gkh6VNlJun96I6Ac-11) - - + ![](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-387&t=gkh6VNlJun96I6Ac-11) - - + + ## Application frame diff --git a/docs/components/progress-indicator/guide.md b/docs/components/progress-indicator/guide.md index e75cdd18e..5ee208f4b 100644 --- a/docs/components/progress-indicator/guide.md +++ b/docs/components/progress-indicator/guide.md @@ -54,20 +54,20 @@ For more information about writing effective helper texts or labels, see our [UX ## Dos and Don’ts
-
-
    -
  • Do use progress indicators consistently for similar processes
  • -
  • Do use progress indicators for determinate processes where progress can be measured (otherwise use [spinners](../spinner/index.mdx))
  • -
  • Do use linear progress indicators in horizontal layouts and circular indicators in compact spaces or centered layouts
  • -
  • Do keep your slot content short, especially for the centered alignment (use helper texts and labels for lengthier content)
  • -
-
-
-
    -
  • Don't use progress indicators for operations shorter than one second
  • -
  • Don't only indicate progress completion with the indicator without clear task messages, e.g. success toasts or displaying the loaded content
  • -
-
+
+
    +
  • Do use progress indicators consistently for similar processes
  • +
  • Do use progress indicators for determinate processes where progress can be measured (otherwise use [spinners](../spinner/index.mdx))
  • +
  • Do use linear progress indicators in horizontal layouts and circular indicators in compact spaces or centered layouts
  • +
  • Do keep your slot content short, especially for the centered alignment (use helper texts and labels for lengthier content)
  • +
+
+
+
    +
  • Don't use progress indicators for operations shorter than one second
  • +
  • Don't only indicate progress completion with the indicator without clear task messages, e.g. success toasts or displaying the loaded content
  • +
+
diff --git a/docs/components/time-picker/guide.mdx b/docs/components/time-picker/guide.mdx index 6f0355d20..754dc1329 100644 --- a/docs/components/time-picker/guide.mdx +++ b/docs/components/time-picker/guide.mdx @@ -41,18 +41,18 @@ An individual time item of a time picker has five states: Default, hover, active ## Dos and Don’ts
-
-
    -
  • Do use the time picker to ensure accurate time selection (we recommend to use [time inputs](../input-time) for that reason)
  • -
  • Do provide clear instructions and labels for users
  • -
  • Do ensure the time picker is accessible via keyboard
  • -
-
-
-
    -
  • Don’t clutter the time picker with unnecessary options
  • -
-
+
+
    +
  • Do use the time picker to ensure accurate time selection (we recommend to use [time inputs](../input-time) for that reason)
  • +
  • Do provide clear instructions and labels for users
  • +
  • Do ensure the time picker is accessible via keyboard
  • +
+
+
+
    +
  • Don’t clutter the time picker with unnecessary options
  • +
+
## Related diff --git a/docs/guidelines/conversational-design/essentials/wording-terms.mdx b/docs/guidelines/conversational-design/essentials/wording-terms.mdx index 5a00ccc25..dd30a2139 100644 --- a/docs/guidelines/conversational-design/essentials/wording-terms.mdx +++ b/docs/guidelines/conversational-design/essentials/wording-terms.mdx @@ -34,13 +34,13 @@ Use any of the five messages depending on your product and use case. - **With product and username:** Hello Sara, I'm  [Copilot name]. How can I help you today?
-
-
    -
  • Well, hello! I’m your friendly chatbot.
  • -
  • Welcome to chatbot. State your issue now.
  • -
  • What do you want?
  • -
-
+
+
    +
  • Well, hello! I’m your friendly chatbot.
  • +
  • Welcome to chatbot. State your issue now.
  • +
  • What do you want?
  • +
+
## Placeholder text for chat window  @@ -48,32 +48,32 @@ Use any of the five messages depending on your product and use case. Use these universal, non-specific options to encourage solution and technology-focused input. Avoid generic, open placeholders that encourage off-topic queries.
-
-
    -
  • Enter your query here…
  • -
  • Enter a command, question or topic…
  • -
  • Enter a command, question or topic to begin…
  • -
-
-
-
    -
  • Ask me anything…
  • -
  • Start typing…
  • -
  • What’s on your mind?
  • -
-
+
+
    +
  • Enter your query here…
  • +
  • Enter a command, question or topic…
  • +
  • Enter a command, question or topic to begin…
  • +
+
+
+
    +
  • Ask me anything…
  • +
  • Start typing…
  • +
  • What’s on your mind?
  • +
+
Use alternative placeholder text when your chatbot has a single use case.
-
-
    -
  • Search technical documentation…
  • -
  • Enter error code…
  • -
  • Search parts catalog…
  • -
-
+
+
    +
  • Search technical documentation…
  • +
  • Enter error code…
  • +
  • Search parts catalog…
  • +
+
## Response progress indicator  @@ -81,34 +81,34 @@ Use alternative placeholder text when your chatbot has a single use case. Always use “generate” as the main progress indicator verb with ellipses (...).
-
-
    -
  • Generating…
  • -
-
-
-
    -
  • Generating response
  • -
  • Creating response…
  • -
-
+
+
    +
  • Generating…
  • +
+
+
+
    +
  • Generating response
  • +
  • Creating response…
  • +
+
Use “generate” to match the action verb to stop the chatbot responding or ask the chatbot to continue responding without ellipses.
-
-
    -
  • Stop generating
  • -
  • Continue generating
  • -
-
-
-
    -
  • Stop generating…
  • -
  • Continue generating…
  • -
-
+
+
    +
  • Stop generating
  • +
  • Continue generating
  • +
+
+
+
    +
  • Stop generating…
  • +
  • Continue generating…
  • +
+
## Speech to text (STT) / voice recording  @@ -116,27 +116,27 @@ Use “generate” to match the action verb to stop the chatbot responding or as Use a tooltip on hover to clarify any recording limitations and tell users how to stop recording.
-
-
    -
  • Click to start and stop voice recording.
  • -
  • Click to start and stop voice recording (max 2 minutes).
  • -
-
+
+
    +
  • Click to start and stop voice recording.
  • +
  • Click to start and stop voice recording (max 2 minutes).
  • +
+
Use “Recording…” as feedback to show the feature is working.
-
-
    -
  • Recording…
  • -
-
-
-
    -
  • I’m listening…
  • -
-
+
+
    +
  • Recording…
  • +
+
+
+
    +
  • I’m listening…
  • +
+
## Asking for feedback   @@ -144,18 +144,18 @@ Use “Recording…” as feedback to show the feature is working. Use thumbs up and down icons to request feedback.
-
-
    -
  • Thumbs up icon ()
  • -
  • Thumbs down icon ()
  • -
-
-
-
    -
  • Helpful
  • -
  • Not helpful
  • -
-
+
+
    +
  • Thumbs up icon ()
  • +
  • Thumbs down icon ()
  • +
+
+
+
    +
  • Helpful
  • +
  • Not helpful
  • +
+
## Time indicators for chat history   @@ -163,21 +163,21 @@ Use thumbs up and down icons to request feedback. Use “last” instead of “previous” and “prior” for time-related terminology in chat history.
-
-
    -
  • Today
  • -
  • Yesterday
  • -
  • Last 7 days
  • -
  • Last 30 days
  • -
  • Older
  • -
-
-
-
    -
  • Previous 7 days
  • -
  • Prior week
  • -
-
+
+
    +
  • Today
  • +
  • Yesterday
  • +
  • Last 7 days
  • +
  • Last 30 days
  • +
  • Older
  • +
+
+
+
    +
  • Previous 7 days
  • +
  • Prior week
  • +
+
## Tooltip options for chat history (from simple to complex)  @@ -193,33 +193,33 @@ Use “last” instead of “previous” and “prior” for time-related termin Use the following action wording for consistency within all our chatbots.
-
-
    -
  • New chat
  • -
  • Send
  • -
  • Generate new prompts
  • -
  • Refresh prompts
  • -
  • Show more prompts
  • -
  • Attach files
  • -
  • Upload files
  • -
  • Share
  • -
  • Copy
  • -
  • Expand
  • -
  • Collapse
  • -
  • Maximize chat window
  • -
  • Minimize chat window
  • -
  • Close chat window
  • -
-
-
-
    -
  • Clear chat
  • -
  • Submit
  • -
  • Give me another
  • -
  • Show me others
  • -
  • Import files
  • -
-
+
+
    +
  • New chat
  • +
  • Send
  • +
  • Generate new prompts
  • +
  • Refresh prompts
  • +
  • Show more prompts
  • +
  • Attach files
  • +
  • Upload files
  • +
  • Share
  • +
  • Copy
  • +
  • Expand
  • +
  • Collapse
  • +
  • Maximize chat window
  • +
  • Minimize chat window
  • +
  • Close chat window
  • +
+
+
+
    +
  • Clear chat
  • +
  • Submit
  • +
  • Give me another
  • +
  • Show me others
  • +
  • Import files
  • +
+
## Example action buttons for industrial applications  @@ -240,17 +240,17 @@ Book webinar Use “sources” as the text label to indicate where the generated information is from.
-
-
    -
  • Sources
  • -
-
-
-
    -
  • Resources
  • -
  • Sources and references
  • -
-
+
+
    +
  • Sources
  • +
+
+
+
    +
  • Resources
  • +
  • Sources and references
  • +
+
Avoid mixing terms (resources, sources) and instead label the source format, e.g. website, pdf, etc. @@ -260,12 +260,12 @@ Avoid mixing terms (resources, sources) and instead label the source format, e.g Use clear wording to differentiate between multiple bots when displaying output.
-
-
    -
  • Responses generated by agent X
  • -
  • Responses generated by: agent X (with agent selection dropdown)
  • -
-
+
+
    +
  • Responses generated by agent X
  • +
  • Responses generated by: agent X (with agent selection dropdown)
  • +
+
## Punctuation  @@ -273,19 +273,19 @@ Use clear wording to differentiate between multiple bots when displaying output. Avoid punctuation, such as exclamation marks for buttons, hover text, titles and tags.
-
-
    -
  • Show more
  • -
  • Send
  • -
  • Stop
  • -
-
-
-
    -
  • Show more!
  • -
  • Send?
  • -
-
+
+
    +
  • Show more
  • +
  • Send
  • +
  • Stop
  • +
+
+
+
    +
  • Show more!
  • +
  • Send?
  • +
+
## Problematic wording to avoid  @@ -295,36 +295,36 @@ Most problematic wording involves the bot expressing itself as a human with huma Use “generating” not “thinking” as chatbots don’t perform cognitive processes.
-
-
    -
  • Thinking…
  • -
  • Thinking about the best response…
  • -
-
+
+
    +
  • Thinking…
  • +
  • Thinking about the best response…
  • +
+
Avoid prompting emotional language like “I’m afraid…” in industrial chatbots.
-
-
    -
  • I’m afraid that I can’t help you right now as I’m assessing the data.
  • -
  • I understand what you mean.
  • -
-
+
+
    +
  • I’m afraid that I can’t help you right now as I’m assessing the data.
  • +
  • I understand what you mean.
  • +
+
Avoid technical, robotic phrases like “Please stand by…” as these are outdated, passive and unhelpful.
-
-
    -
  • Please stand by while I process your request.
  • -
  • Please wait while I prepare a response.
  • -
  • Please be patient.
  • -
  • Bear with me.
  • -
-
+
+
    +
  • Please stand by while I process your request.
  • +
  • Please wait while I prepare a response.
  • +
  • Please be patient.
  • +
  • Bear with me.
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/basics.md b/docs/guidelines/language/basics.md index 60224ed03..39cf7b4c8 100644 --- a/docs/guidelines/language/basics.md +++ b/docs/guidelines/language/basics.md @@ -37,24 +37,24 @@ description: "Dive into the fundamental principles of UX writing, where you'll l - Avoid using negative contractions as they can appear too informal
-
-
    -
  • their, them, theirs, salesperson
  • -
  • Welcome to this application
  • -
  • X appears when detail view has selected events
  • -
  • cannot, will not
  • -
  • you’ll, we’ve
  • -
-
-
-
    -
  • his, hers, him, salesman
  • -
  • Hey there!
  • -
  • X doesn’t appear if detail view has no selected events
  • -
  • can’t, won’t
  • -
  • you will, we have
  • -
-
+
+
    +
  • their, them, theirs, salesperson
  • +
  • Welcome to this application
  • +
  • X appears when detail view has selected events
  • +
  • cannot, will not
  • +
  • you’ll, we’ve
  • +
+
+
+
    +
  • his, hers, him, salesman
  • +
  • Hey there!
  • +
  • X doesn’t appear if detail view has no selected events
  • +
  • can’t, won’t
  • +
  • you will, we have
  • +
+
## Length @@ -80,57 +80,57 @@ description: "Dive into the fundamental principles of UX writing, where you'll l - Capitalize named app functions and UI elements: Go to Settings, Allocate users in User management, Press OK
-
-
    -
  • Go to Settings
  • -
  • Press OK
  • -
  • Log in
  • -
  • For more information, see Siemens Industry Online Support.
  • -
-
-
-
    -
  • Go To Settings
  • -
  • Press OK
  • -
  • LOG IN
  • -
  • For more information, see Siemens industry online support.
  • -
-
+
+
    +
  • Go to Settings
  • +
  • Press OK
  • +
  • Log in
  • +
  • For more information, see Siemens Industry Online Support.
  • +
+
+
+
    +
  • Go To Settings
  • +
  • Press OK
  • +
  • LOG IN
  • +
  • For more information, see Siemens industry online support.
  • +
+
## Common UX wording mistakes
-
-
    -
  • time zone
  • -
  • log file
  • -
  • log in (as an action)
  • -
  • login (as a noun)
  • -
  • equipment
  • -
  • feedback
  • -
  • training
  • -
  • current
  • -
  • avoid "shall"
  • -
  • Siemens has
  • -
  • 34 million / 35 billion
  • -
  • 34 million
  • -
-
-
-
    -
  • timezone
  • -
  • logfile
  • -
  • login
  • -
  • log in
  • -
  • equipments
  • -
  • feedbacks
  • -
  • trainings
  • -
  • actual
  • -
  • user shall manage users
  • -
  • Siemens have
  • -
  • 34’ / 35“
  • -
  • 34 millions
  • -
-
+
+
    +
  • time zone
  • +
  • log file
  • +
  • log in (as an action)
  • +
  • login (as a noun)
  • +
  • equipment
  • +
  • feedback
  • +
  • training
  • +
  • current
  • +
  • avoid "shall"
  • +
  • Siemens has
  • +
  • 34 million / 35 billion
  • +
  • 34 million
  • +
+
+
+
    +
  • timezone
  • +
  • logfile
  • +
  • login
  • +
  • log in
  • +
  • equipments
  • +
  • feedbacks
  • +
  • trainings
  • +
  • actual
  • +
  • user shall manage users
  • +
  • Siemens have
  • +
  • 34’ / 35“
  • +
  • 34 millions
  • +
+
diff --git a/docs/guidelines/language/dialogs-and-buttons.md b/docs/guidelines/language/dialogs-and-buttons.md index 929040a9e..cbf5680d7 100644 --- a/docs/guidelines/language/dialogs-and-buttons.md +++ b/docs/guidelines/language/dialogs-and-buttons.md @@ -25,20 +25,20 @@ description: 'Discover guidelines for writing dialogs and button labels to ensur - Only use ‘OK’ as an option if you cannot find an appropriate verb
-
-
    -
  • Title: Add user / Buttons: Cancel, Add
  • -
  • Title: Delete file / Buttons: Cancel, Delete
  • -
  • Title: Edit details / Buttons: Cancel, Save
  • -
-
-
-
    -
  • Title: Add user / Buttons: Cancel, OK
  • -
  • Title: Are you sure / Buttons: Cancel, Delete
  • -
  • Title: Edit details / Buttons: Cancel, Edit
  • -
-
+
+
    +
  • Title: Add user / Buttons: Cancel, Add
  • +
  • Title: Delete file / Buttons: Cancel, Delete
  • +
  • Title: Edit details / Buttons: Cancel, Save
  • +
+
+
+
    +
  • Title: Add user / Buttons: Cancel, OK
  • +
  • Title: Are you sure / Buttons: Cancel, Delete
  • +
  • Title: Edit details / Buttons: Cancel, Edit
  • +
+
## Primary and secondary actions @@ -48,14 +48,14 @@ description: 'Discover guidelines for writing dialogs and button labels to ensur - Primary actions can either be positive (Send, Save) or negative (Delete)
-
-
    -
  • Cancel, Save
  • -
-
-
-
    -
  • Save, Cancel
  • -
-
+
+
    +
  • Cancel, Save
  • +
+
+
+
    +
  • Save, Cancel
  • +
+
diff --git a/docs/guidelines/language/formatting/addresses.mdx b/docs/guidelines/language/formatting/addresses.mdx index 8dcbae16b..a207f74ac 100644 --- a/docs/guidelines/language/formatting/addresses.mdx +++ b/docs/guidelines/language/formatting/addresses.mdx @@ -13,40 +13,40 @@ description: In industrial applications, writing addresses clearly and consisten Use specific text field labels for different parts of the address.
-
-
    -
  • Number | Street | State | ZIP code | Country
  • -
-
-
-
    -
  • Address line 1, Address line 2, Address line 3
  • -
-
+
+
    +
  • Number | Street | State | ZIP code | Country
  • +
+
+
+
    +
  • Address line 1, Address line 2, Address line 3
  • +
+
Ensure special and international characters are accepted for international addresses.
-
-
    -
  • 12-142 Elm St
  • -
  • #8C (unit or suite number)
  • -
  • Straße (street in German)
  • -
  • VI (unit for floor in German)
  • -
  • München (for Munich)
  • -
-
+
+
    +
  • 12-142 Elm St
  • +
  • #8C (unit or suite number)
  • +
  • Straße (street in German)
  • +
  • VI (unit for floor in German)
  • +
  • München (for Munich)
  • +
+
Use commas to separate names, streets, states and countries to prevent errors when there is only one text field.
-
-
    -
  • John Doe, 123 Maple Street, Springfield, California, 62704, United States
  • -
-
+
+
    +
  • John Doe, 123 Maple Street, Springfield, California, 62704, United States
  • +
+
## States, provinces and regions @@ -54,28 +54,28 @@ Use commas to separate names, streets, states and countries to prevent errors wh Use a comma between cities and states and other regions, e.g. cities within Cantons.
-
-
    -
  • Springfield, Illinois
  • -
  • Munich, Bavaria
  • -
  • Thun, Bern
  • -
-
+
+
    +
  • Springfield, Illinois
  • +
  • Munich, Bavaria
  • +
  • Thun, Bern
  • +
+
Use capital letters for abbreviated states without a full stop.
-
-
    -
  • IL
  • -
-
-
-
    -
  • Il.
  • -
-
+
+
    +
  • IL
  • +
+
+
+
    +
  • Il.
  • +
+
## ZIP codes @@ -83,20 +83,20 @@ Use capital letters for abbreviated states without a full stop. Use the correct regional format for ZIP codes, including any necessary spaces or hyphens.
-
-
    -
  • 90210 (US)
  • -
  • SW1A 2AA (UK)
  • -
  • 123-4567 (Japan)
  • -
-
-
-
    -
  • 90 21 0 (US)
  • -
  • SW1A2AA (UK)
  • -
  • 1234567 (Japan)
  • -
-
+
+
    +
  • 90210 (US)
  • +
  • SW1A 2AA (UK)
  • +
  • 123-4567 (Japan)
  • +
+
+
+
    +
  • 90 21 0 (US)
  • +
  • SW1A2AA (UK)
  • +
  • 1234567 (Japan)
  • +
+
## Streets @@ -120,34 +120,34 @@ Use common abbreviations for street types without full stops to avoid visual clu Add floor numbers either before or after the word and note different international floor counting systems.
-
-
    -
  • Floor 3
  • -
  • 3rd floor
  • -
  • Ground floor (UK/Europe)
  • -
  • First floor (US)
  • -
  • Floor G (international)
  • -
-
-
-
    -
  • Floor 3rd
  • -
-
+
+
    +
  • Floor 3
  • +
  • 3rd floor
  • +
  • Ground floor (UK/Europe)
  • +
  • First floor (US)
  • +
  • Floor G (international)
  • +
+
+
+
    +
  • Floor 3rd
  • +
+
Use numbers and letters after buildings, suites, apartments, rooms and floors.
-
-
    -
  • Building A
  • -
  • Building part
  • -
  • Room segment
  • -
  • Bldg A
  • -
  • Suite 3B
  • -
-
+
+
    +
  • Building A
  • +
  • Building part
  • +
  • Room segment
  • +
  • Bldg A
  • +
  • Suite 3B
  • +
+
## Production lines @@ -155,14 +155,14 @@ Use numbers and letters after buildings, suites, apartments, rooms and floors. Use "Line" or add a description, e.g. "Assembly line" and use "Zone" or "Area" for larger facilities.
-
-
    -
  • Assembly line 2
  • -
  • Line B
  • -
  • Zone C
  • -
  • Area 8
  • -
-
+
+
    +
  • Assembly line 2
  • +
  • Line B
  • +
  • Zone C
  • +
  • Area 8
  • +
+
## Coordinates @@ -170,34 +170,34 @@ Use "Line" or add a description, e.g. "Assembly line" and use "Zone" or "Area" f Use clear labels when possible with "Latitude" first, then "Longitude".
-
-
    -
  • Latitude: 48.14389° | Longitude: 11.57633°
  • -
-
+
+
    +
  • Latitude: 48.14389° | Longitude: 11.57633°
  • +
+
Use plus (+), minus (-), a comma and a space when adding both in one text field.
-
-
    -
  • +48.14389°, +11.57633°
  • -
-
+
+
    +
  • +48.14389°, +11.57633°
  • +
+
Use the correct degree symbol (Unicode U+00B0).
-
-
    -
  • °
  • -
-
-
-
    -
  • o
  • -
-
+
+
    +
  • °
  • +
+
+
+
    +
  • o
  • +
+
\ No newline at end of file diff --git a/docs/guidelines/language/formatting/date.mdx b/docs/guidelines/language/formatting/date.mdx index 78b5ad428..e365f687d 100644 --- a/docs/guidelines/language/formatting/date.mdx +++ b/docs/guidelines/language/formatting/date.mdx @@ -15,46 +15,46 @@ description: Accurate dates and times are essential in industrial settings, serv Use the ISO 8601 date and time format standards when backend localization is not possible.
-
-
    -
  • 2025-04-08 (April 8, 2025)
  • -
  • 14:30:00 (24-hour format)
  • -
-
-
-
    -
  • 2025/04/08
  • -
  • 2:30 PM
  • -
-
+
+
    +
  • 2025-04-08 (April 8, 2025)
  • +
  • 14:30:00 (24-hour format)
  • +
+
+
+
    +
  • 2025/04/08
  • +
  • 2:30 PM
  • +
+
Add tooltips or in-line text to support users and clarify which format is being used.
-
-
    -
  • YYYY-MM-DD
  • -
  • 24-hour format
  • -
  • Times are formatted in 24-hour format as HH:MM. For example, 2:30 PM is written as 14:30.
  • -
  • Dates and times include time zones. For example, April 8, 2025, at 2:30 PM in Berlin is written as 2025-04-08T14:30:00+02:00.
  • -
-
+
+
    +
  • YYYY-MM-DD
  • +
  • 24-hour format
  • +
  • Times are formatted in 24-hour format as HH:MM. For example, 2:30 PM is written as 14:30.
  • +
  • Dates and times include time zones. For example, April 8, 2025, at 2:30 PM in Berlin is written as 2025-04-08T14:30:00+02:00.
  • +
+
Avoid adding unnecessary punctuation to abbreviated dates.
-
-
    -
  • Jan
  • -
-
-
-
    -
  • Jan.
  • -
-
+
+
    +
  • Jan
  • +
+
+
+
    +
  • Jan.
  • +
+
## Dates @@ -62,63 +62,63 @@ Avoid adding unnecessary punctuation to abbreviated dates. Write out full dates using commas to separate elements within longer texts and paragraphs.
-
-
    -
  • Monday, January 12, 2025
  • -
-
-
-
    -
  • Monday: January 12th: 2025
  • -
-
+
+
    +
  • Monday, January 12, 2025
  • +
+
+
+
    +
  • Monday: January 12th: 2025
  • +
+
Write out dates with the abbreviated form using dashes (hyphens) instead of slashes for better readability.
-
-
    -
  • Dec-26-2025
  • -
  • Apr-09-2025
  • -
-
-
-
    -
  • Apr/09/2025
  • -
  • Apr 09/2025
  • -
-
+
+
    +
  • Dec-26-2025
  • +
  • Apr-09-2025
  • +
+
+
+
    +
  • Apr/09/2025
  • +
  • Apr 09/2025
  • +
+
Write dates in tables using abbreviated months to avoid confusion and the need for further tooltips or explanation.
-
-
    -
  • Apr-09
  • -
-
-
-
    -
  • 04-09
  • -
-
+
+
    +
  • Apr-09
  • +
+
+
+
    +
  • 04-09
  • +
+
Avoid using "st" (as in 1st) or "th" (as in 5th) for a cleaner user interface.
-
-
    -
  • Monday, January 12, 2025
  • -
-
-
-
    -
  • Monday, January 12th, 2025
  • -
-
+
+
    +
  • Monday, January 12, 2025
  • +
+
+
+
    +
  • Monday, January 12th, 2025
  • +
+
## Days @@ -126,17 +126,17 @@ Avoid using "st" (as in 1st) or "th" (as in 5th) for a cleaner user interface. Start all days with a capital letter. Use three-letter abbreviations without punctuation when there isn’t enough space.
-
-
    -
  • Monday, Tuesday, Wednesday, etc.
  • -
  • Mon
  • -
-
-
-
    -
  • Mon.
  • -
-
+
+
    +
  • Monday, Tuesday, Wednesday, etc.
  • +
  • Mon
  • +
+
+
+
    +
  • Mon.
  • +
+
## Weeks @@ -144,18 +144,18 @@ Start all days with a capital letter. Use three-letter abbreviations without pun Avoid calendar weeks (CW) whenever possible as these are very specific to certain regions.
-
-
    -
  • Week 15 (April 7 – April 13, 2025)
  • -
-
-
-
    -
  • CW 15 (15th week of the year)
  • -
  • CW 15/2025 (15th calendar week year 2025)
  • -
  • Calendar week 05 in year 2025
  • -
-
+
+
    +
  • Week 15 (April 7 – April 13, 2025)
  • +
+
+
+
    +
  • CW 15 (15th week of the year)
  • +
  • CW 15/2025 (15th calendar week year 2025)
  • +
  • Calendar week 05 in year 2025
  • +
+
## Months @@ -163,17 +163,17 @@ Avoid calendar weeks (CW) whenever possible as these are very specific to certai Start all months with a capital letter. Use abbreviations without punctuation when there isn’t enough space.
-
-
    -
  • January, February, March, etc.
  • -
  • Jan
  • -
-
-
-
    -
  • Jan.
  • -
-
+
+
    +
  • January, February, March, etc.
  • +
  • Jan
  • +
+
+
+
    +
  • Jan.
  • +
+
## Years @@ -181,16 +181,16 @@ Start all months with a capital letter. Use abbreviations without punctuation wh Use the four-digit format and never abbreviate in industrial applications.
-
-
    -
  • 2023
  • -
-
-
-
    -
  • ’23
  • -
-
+
+
    +
  • 2023
  • +
+
+
+
    +
  • ’23
  • +
+
## Decades @@ -198,16 +198,16 @@ Use the four-digit format and never abbreviate in industrial applications. Use plural -s when talking about decades.
-
-
    -
  • 1980s
  • -
-
-
-
    -
  • 1980’s
  • -
-
+
+
    +
  • 1980s
  • +
+
+
+
    +
  • 1980’s
  • +
+
## Centuries @@ -215,16 +215,16 @@ Use plural -s when talking about decades. Use "th" and "nd" to reference centuries with ordinal numbers (sequencing) without using superscript.
-
-
    -
  • Welcome to the 21st century of industrial innovation! Our app uses AI to deliver efficiency in your operations.
  • -
-
-
-
    -
  • Welcome to the 21st century of industrial innovation! Our app uses AI to deliver efficiency in your operations.
  • -
-
+
+
    +
  • Welcome to the 21st century of industrial innovation! Our app uses AI to deliver efficiency in your operations.
  • +
+
+
+
    +
  • Welcome to the 21st century of industrial innovation! Our app uses AI to deliver efficiency in your operations.
  • +
+
## Related diff --git a/docs/guidelines/language/formatting/measurements.mdx b/docs/guidelines/language/formatting/measurements.mdx index cad8f108d..fb860612d 100644 --- a/docs/guidelines/language/formatting/measurements.mdx +++ b/docs/guidelines/language/formatting/measurements.mdx @@ -13,56 +13,56 @@ description: In industrial settings, accurate measurements are vital for ensurin Use the same measurement format and style throughout your user interface and consider localization conflicts. Write out measurement abbreviations in full if there is any chance users will not understand.
-
-
    -
  • British Thermal Unit (BTU): 1
  • -
  • Nautical Mile (nmi): 8
  • -
-
-
-
    -
  • BTU: 1
  • -
  • nmi: 8
  • -
-
+
+
    +
  • British Thermal Unit (BTU): 1
  • +
  • Nautical Mile (nmi): 8
  • +
+
+
+
    +
  • BTU: 1
  • +
  • nmi: 8
  • +
+
Avoid line breaks between the value and the unit by using a protected (non-breaking) space. Use the singular when talking about a specific number and in abbreviations. Use lower case as the default for most unit abbreviations.
-
-
    -
  • 200 kg
  • -
  • 20 kg
  • -
  • 4 in
  • -
  • 200 g
  • -
-
-
-
    -
  • 200kg
  • -
  • 20 kgs
  • -
  • 4 in.
  • -
  • 200 G
  • -
-
+
+
    +
  • 200 kg
  • +
  • 20 kg
  • +
  • 4 in
  • +
  • 200 g
  • +
+
+
+
    +
  • 200kg
  • +
  • 20 kgs
  • +
  • 4 in.
  • +
  • 200 G
  • +
+
Use upper case for unit abbreviations named after people and lower case when the abbreviation is written out in full.
-
-
    -
  • 6 volts
  • -
  • 6 V
  • -
-
-
-
    -
  • 6 Volts
  • -
  • 6 v
  • -
-
+
+
    +
  • 6 volts
  • +
  • 6 V
  • +
+
+
+
    +
  • 6 Volts
  • +
  • 6 v
  • +
+
| Person | Unit abbreviation | @@ -78,17 +78,17 @@ Use upper case for unit abbreviations named after people and lower case when the Use a slash to show how compound units are divided for clarity.
-
-
    -
  • km/h
  • -
  • A/m
  • -
-
-
-
    -
  • km-h
  • -
-
+
+
    +
  • km/h
  • +
  • A/m
  • +
+
+
+
    +
  • km-h
  • +
+
## Exceptions @@ -96,37 +96,37 @@ Use a slash to show how compound units are divided for clarity. Use "L" (liter) instead of lower case "l" only if there is any doubt users will confuse it with "1".
-
-
    -
  • 2 L
  • -
  • 11 L
  • -
  • 2 l
  • -
-
-
-
    -
  • 11 l
  • -
-
+
+
    +
  • 2 L
  • +
  • 11 L
  • +
  • 2 l
  • +
+
+
+
    +
  • 11 l
  • +
+
Use upper case "B" to abbreviate byte and lower case "b" to abbreviate bit. Use M for mega, G for giga and T for tera to distinguish from m (milli), g (gram) and t (ton).
-
-
    -
  • 120 MB (megabytes)
  • -
  • 120 Mb (megabits)
  • -
  • 1 t
  • -
  • 1 TB
  • -
  • 1 THz
  • -
-
-
-
    -
  • 1 T
  • -
-
+
+
    +
  • 120 MB (megabytes)
  • +
  • 120 Mb (megabits)
  • +
  • 1 t
  • +
  • 1 TB
  • +
  • 1 THz
  • +
+
+
+
    +
  • 1 T
  • +
+
## Volume @@ -134,48 +134,48 @@ Use upper case "B" to abbreviate byte and lower case "b" to abbreviate bit. Use Use superscript to indicate cubed measurements.
-
-
    -
  • -
  • cm³
  • -
-
-
-
    -
  • m3
  • -
  • cm3
  • -
-
+
+
    +
  • +
  • cm³
  • +
+
+
+
    +
  • m3
  • +
  • cm3
  • +
+
Use the plain text caret symbol (^) when superscript is not possible in your application.
-
-
    -
  • m^3
  • -
-
-
-
    -
  • m3
  • -
-
+
+
    +
  • m^3
  • +
+
+
+
    +
  • m3
  • +
+
Use mcg to abbreviate microgram instead of the Greek letter mu (μ).
-
-
    -
  • 1000 mcg
  • -
-
-
-
    -
  • 1000 μg
  • -
-
+
+
    +
  • 1000 mcg
  • +
+
+
+
    +
  • 1000 μg
  • +
+
## Temperature @@ -183,32 +183,32 @@ Use mcg to abbreviate microgram instead of the Greek letter mu (μ). Use a non-breaking space (Ctrl + Shift + Space) between the number and the degree symbol.
-
-
    -
  • 23 °C
  • -
-
-
-
    -
  • 23°C
  • -
  • 23° C
  • -
-
+
+
    +
  • 23 °C
  • +
+
+
+
    +
  • 23°C
  • +
  • 23° C
  • +
+
Use the degree symbol (°) before the initial letter of the temperature scale without a space.
-
-
    -
  • 23 °C
  • -
-
-
-
    -
  • 23 C°
  • -
-
+
+
    +
  • 23 °C
  • +
+
+
+
    +
  • 23 C°
  • +
+
## Web @@ -216,20 +216,20 @@ Use the degree symbol (°) before the initial letter of the temperature scale wi Use "px" in lower case to abbreviate pixels with a space for readability without periods after px, pt and dpi (dots per inch).
-
-
    -
  • 45 px
  • -
  • 1280 x 780 px
  • -
  • 4 pt
  • -
-
-
-
    -
  • 45PX
  • -
  • 1280x780px
  • -
  • 4pt.
  • -
-
+
+
    +
  • 45 px
  • +
  • 1280 x 780 px
  • +
  • 4 pt
  • +
+
+
+
    +
  • 45PX
  • +
  • 1280x780px
  • +
  • 4pt.
  • +
+
## Related diff --git a/docs/guidelines/language/formatting/money.mdx b/docs/guidelines/language/formatting/money.mdx index 1d2cca356..1238e0e77 100644 --- a/docs/guidelines/language/formatting/money.mdx +++ b/docs/guidelines/language/formatting/money.mdx @@ -14,87 +14,87 @@ description: 'Understanding money and currency is important for designing user i Place the currency symbol before the amount in English and use the same formatting style throughout.
-
-
    -
  • £320
  • -
-
-
-
    -
  • 320£
  • -
  • £320/£320.00/Three hundred and twenty pounds/320 pounds (mixed styles)
  • -
-
+
+
    +
  • £320
  • +
+
+
+
    +
  • 320£
  • +
  • £320/£320.00/Three hundred and twenty pounds/320 pounds (mixed styles)
  • +
+
Use decimal points for cents or smaller units within English user interfaces.
-
-
    -
  • €999.50
  • -
  • $400,456.50
  • -
-
-
-
    -
  • €999,50
  • -
  • $400.456,50
  • -
-
+
+
    +
  • €999.50
  • +
  • $400,456.50
  • +
+
+
+
    +
  • €999,50
  • +
  • $400.456,50
  • +
+
Never add a space between the currency symbol and the amount.
-
-
    -
  • $100
  • -
-
-
-
    -
  • $ 100
  • -
-
+
+
    +
  • $100
  • +
+
+
+
    +
  • $ 100
  • +
+
Use the ISO currency code before the number without a space.
-
-
    -
  • USD400
  • -
-
-
-
    -
  • 300USD
  • -
-
+
+
    +
  • USD400
  • +
+
+
+
    +
  • 300USD
  • +
+
Use numbers and currency symbols within the UI when talking about marketing and pricing.
-
-
    -
  • Thank you. Your payment of $50 has been processed.
  • -
  • Invest in our new soft sensors for $6,000 to boost your production efficiency.
  • -
  • Spare parts cost estimation for 2025 is $125,999.
  • -
  • The subscription costs $10 per month.
  • -
-
+
+
    +
  • Thank you. Your payment of $50 has been processed.
  • +
  • Invest in our new soft sensors for $6,000 to boost your production efficiency.
  • +
  • Spare parts cost estimation for 2025 is $125,999.
  • +
  • The subscription costs $10 per month.
  • +
+
Write out the full word in formal and legal documents.
-
-
    -
  • The total amount shall not exceed four thousand dollars.
  • -
-
+
+
    +
  • The total amount shall not exceed four thousand dollars.
  • +
+
## Using currency symbols (¥) or codes (JPY) diff --git a/docs/guidelines/language/formatting/names-titles.mdx b/docs/guidelines/language/formatting/names-titles.mdx index 2630df369..3faf34b72 100644 --- a/docs/guidelines/language/formatting/names-titles.mdx +++ b/docs/guidelines/language/formatting/names-titles.mdx @@ -15,18 +15,18 @@ description: Accurate and consistent use of names and titles is essential for ma Use "First name" and "Last name" in forms and ensure text fields accept names with only one letter.
-
-
    -
  • First name
  • -
  • Last name
  • -
-
-
-
    -
  • Surname
  • -
  • Full name
  • -
-
+
+
    +
  • First name
  • +
  • Last name
  • +
+
+
+
    +
  • Surname
  • +
  • Full name
  • +
+
@@ -34,11 +34,11 @@ Use "First name" and "Last name" in forms and ensure text fields accept names wi Use first names to welcome users to applications.
-
-
    -
  • Welcome Susanne
  • -
-
+
+
    +
  • Welcome Susanne
  • +
+
## Inclusive titles @@ -46,16 +46,16 @@ Use first names to welcome users to applications. Avoid gendered titles unless absolutely necessary for your application. Use "Title", not "Honorific", to describe words such as Mr. and Mrs. Note that not all cultures have equivalents to some titles used in the United States, such as Ms.
-
-
    -
  • [ Mr. | Ms. | Mx. | None | Other | Prefer not to say]
  • -
-
-
-
    -
  • [ Mr. | Mrs. | Miss | Ms. ]
  • -
-
+
+
    +
  • [ Mr. | Ms. | Mx. | None | Other | Prefer not to say]
  • +
+
+
+
    +
  • [ Mr. | Mrs. | Miss | Ms. ]
  • +
+
## Title punctuation @@ -63,45 +63,45 @@ Avoid gendered titles unless absolutely necessary for your application. Use "Tit Use full stops for all abbreviated titles in American English.
-
-
    -
  • Mr. Smith
  • -
-
-
-
    -
  • Mr Smith
  • -
-
+
+
    +
  • Mr. Smith
  • +
+
+
+
    +
  • Mr Smith
  • +
+
Use titles with full names or surnames but do not use titles when addressing users with only their first name.
-
-
    -
  • Mrs. Turner
  • -
  • Mrs. Jennifer Turner
  • -
  • Jennifer
  • -
-
-
-
    -
  • Mrs. Jennifer
  • -
-
+
+
    +
  • Mrs. Turner
  • +
  • Mrs. Jennifer Turner
  • +
  • Jennifer
  • +
+
+
+
    +
  • Mrs. Jennifer
  • +
+
Use full stops for all abbreviated professional titles in American English.
-
-
    -
  • Dr.
  • -
  • Prof.
  • -
  • Eng.
  • -
-
+
+
    +
  • Dr.
  • +
  • Prof.
  • +
  • Eng.
  • +
+
## Corporate titles @@ -109,50 +109,50 @@ Use full stops for all abbreviated professional titles in American English. Use capital letters for corporate titles especially with the name and use capital letters for corporate title acronyms.
-
-
    -
  • Chief Financial Officer Teresa Lopez
  • -
  • Teresa Lopez (Chief Financial Officer)
  • -
  • Teresa Lopez (CFO)
  • -
-
-
-
    -
  • chief financial officer Teresa Lopez
  • -
-
+
+
    +
  • Chief Financial Officer Teresa Lopez
  • +
  • Teresa Lopez (Chief Financial Officer)
  • +
  • Teresa Lopez (CFO)
  • +
+
+
+
    +
  • chief financial officer Teresa Lopez
  • +
+
Use lower case when titles are used generically (without a name) and separate titles from names with a comma.
-
-
    -
  • The chief financial officer for the company will hold a press conference tomorrow.
  • -
  • The project manager needs to schedule maintenance.
  • -
  • Carol Jones, Chairwoman of the Supervisory Board, spoke at the press conference yesterday.
  • -
-
-
-
    -
  • Call the Manager.
  • -
-
+
+
    +
  • The chief financial officer for the company will hold a press conference tomorrow.
  • +
  • The project manager needs to schedule maintenance.
  • +
  • Carol Jones, Chairwoman of the Supervisory Board, spoke at the press conference yesterday.
  • +
+
+
+
    +
  • Call the Manager.
  • +
+
Always capitalize Managing Board and use lower case for "member".
-
-
    -
  • John Smith is a member of the Managing Board.
  • -
-
-
-
    -
  • John Smith is a member of the managing board.
  • -
-
+
+
    +
  • John Smith is a member of the Managing Board.
  • +
+
+
+
    +
  • John Smith is a member of the managing board.
  • +
+
## Related diff --git a/docs/guidelines/language/formatting/numbers.mdx b/docs/guidelines/language/formatting/numbers.mdx index ae11b0795..badb7473d 100644 --- a/docs/guidelines/language/formatting/numbers.mdx +++ b/docs/guidelines/language/formatting/numbers.mdx @@ -15,76 +15,76 @@ description: In industrial settings, numbers and percentages are key to tracking Write "Number" or "number" when there is enough space within the user interface.
-
-
    -
  • Number
  • -
-
-
-
    -
  • Num.
  • -
-
+
+
    +
  • Number
  • +
+
+
+
    +
  • Num.
  • +
+
Use "No." as an abbreviation for number with a period and without a space.
-
-
    -
  • No.6
  • -
-
-
-
    -
  • Num.6
  • -
-
+
+
    +
  • No.6
  • +
+
+
+
    +
  • Num.6
  • +
+
Avoid using the # symbol with numbers.
-
-
    -
  • Number 6
  • -
-
-
-
    -
  • #6
  • -
-
+
+
    +
  • Number 6
  • +
+
+
+
    +
  • #6
  • +
+
Write numbers as digits, such as "9" instead of "nine", in industrial user interfaces.
-
-
    -
  • We’ve released 3 new features this month.
  • -
-
-
-
    -
  • We’ve released three new features this month.
  • -
-
+
+
    +
  • We’ve released 3 new features this month.
  • +
+
+
+
    +
  • We’ve released three new features this month.
  • +
+
Write numbers with four digits and more with commas to separate thousands, millions, etc. in American English.
-
-
    -
  • 100,000
  • -
-
-
-
    -
  • 100.000
  • -
-
+
+
    +
  • 100,000
  • +
+
+
+
    +
  • 100.000
  • +
+
## Numbers and punctuation @@ -92,53 +92,53 @@ Write numbers with four digits and more with commas to separate thousands, milli Use en dashes (–) instead of hyphens (-) for ranges.
-
-
    -
  • 10–0
  • -
  • The shipment weighs 50–75kg
  • -
-
+
+
    +
  • 10–0
  • +
  • The shipment weighs 50–75kg
  • +
+
Write out the unit only once in ranges.
-
-
    -
  • The temperature fluctuated between 20–25°C
  • -
-
-
-
    -
  • The temperature fluctuated between 20°C–25°C
  • -
-
+
+
    +
  • The temperature fluctuated between 20–25°C
  • +
+
+
+
    +
  • The temperature fluctuated between 20°C–25°C
  • +
+
Use the minus hyphen for negative numbers which is better aligned than a normal hyphen (Unicode U+2212).
-
-
    -
  • -12
  • -
-
-
-
    -
  • —12
  • -
-
+
+
    +
  • -12
  • +
+
+
+
    +
  • —12
  • +
+
Use either "to" or separate text fields for ranges with minus numbers for readability.
-
-
    -
  • -12 to -15°C
  • -
  • Min temp (C): -12° / Max temp (C): -15°
  • -
-
+
+
    +
  • -12 to -15°C
  • +
  • Min temp (C): -12° / Max temp (C): -15°
  • +
+
## Decimals @@ -146,20 +146,20 @@ Use either "to" or separate text fields for ranges with minus numbers for readab Write decimals using a period (.) to separate the whole number from the fractional part in American English.
-
-
    -
  • 0.5
  • -
  • 5,245.15
  • -
  • 2.5 million
  • -
-
-
-
    -
  • 0,5
  • -
  • 5.245,15
  • -
  • 2,5 million
  • -
-
+
+
    +
  • 0.5
  • +
  • 5,245.15
  • +
  • 2.5 million
  • +
+
+
+
    +
  • 0,5
  • +
  • 5.245,15
  • +
  • 2,5 million
  • +
+
## Thousands, millions and billions @@ -168,75 +168,75 @@ Use "K" as an abbreviation for thousand, "M" for million, and "B" for billion wi
-
-
    -
  • 34K
  • -
  • 34M
  • -
  • 34B
  • -
-
-
-
    -
  • 34 k
  • -
  • 34 mil
  • -
  • 34 bill
  • -
-
+
+
    +
  • 34K
  • +
  • 34M
  • +
  • 34B
  • +
+
+
+
    +
  • 34 k
  • +
  • 34 mil
  • +
  • 34 bill
  • +
+
Use the singular "million" when talking about a specific number.
-
-
    -
  • 34 million
  • -
  • Our system processes one million connections.
  • -
-
-
-
    -
  • 34 millions
  • -
  • Our system processes one millions connections.
  • -
-
+
+
    +
  • 34 million
  • +
  • Our system processes one million connections.
  • +
+
+
+
    +
  • 34 millions
  • +
  • Our system processes one millions connections.
  • +
+
Use the plural "millions" when talking about an unspecific number.
-
-
    -
  • Our goal is to deliver software to millions of happy users worldwide.
  • -
-
+
+
    +
  • Our goal is to deliver software to millions of happy users worldwide.
  • +
+
Write out numbers in the millions and billions ("one million" instead of "1,000,000") in longer texts and paragraphs.
-
-
    -
  • We have over one million users worldwide.
  • -
-
-
-
    -
  • We have over 1,000,000 users worldwide.
  • -
-
+
+
    +
  • We have over one million users worldwide.
  • +
+
+
+
    +
  • We have over 1,000,000 users worldwide.
  • +
+
Use numerals for numbers in the millions for dates, addresses, units of measurement, currencies and percentages.
-
-
    -
  • The temperature can reach 1,000,000°C in the pod.
  • -
  • The cargo ship can carry up to 1,000,000kg.
  • -
  • The success rate of our new implementation is 1,000,000%.
  • -
  • The project budget is $1,000,000.
  • -
-
+
+
    +
  • The temperature can reach 1,000,000°C in the pod.
  • +
  • The cargo ship can carry up to 1,000,000kg.
  • +
  • The success rate of our new implementation is 1,000,000%.
  • +
  • The project budget is $1,000,000.
  • +
+
## Percentages @@ -244,31 +244,31 @@ Use numerals for numbers in the millions for dates, addresses, units of measurem Use the % symbol instead of writing out "percentage" within the user interface to save space.
-
-
    -
  • 10%
  • -
-
-
-
    -
  • 10 percent
  • -
-
+
+
    +
  • 10%
  • +
+
+
+
    +
  • 10 percent
  • +
+
Use % after the number and without a space.
-
-
    -
  • 10%
  • -
-
-
-
    -
  • %10
  • -
-
+
+
    +
  • 10%
  • +
+
+
+
    +
  • %10
  • +
+
## Phone numbers @@ -276,29 +276,29 @@ Use % after the number and without a space. Separate phone numbers into groups for clarity when backend localization or separate fields are not possible.
-
-
    -
  • Country code, area code, numbers in groupings of 3 or 4
  • -
  • 0044, 208, 899 7032
  • -
-
+
+
    +
  • Country code, area code, numbers in groupings of 3 or 4
  • +
  • 0044, 208, 899 7032
  • +
+
Use the plus symbol (+) or "00" before the country code and show extension numbers with a hyphen.
-
-
    -
  • +49 123 456 7890
  • -
  • 0049 123 456 7890
  • -
  • 0123 456 7890-12
  • -
-
-
-
    -
  • 0123 456 7890 12
  • -
-
+
+
    +
  • +49 123 456 7890
  • +
  • 0049 123 456 7890
  • +
  • 0123 456 7890-12
  • +
+
+
+
    +
  • 0123 456 7890 12
  • +
+
## Related diff --git a/docs/guidelines/language/formatting/software-versions.mdx b/docs/guidelines/language/formatting/software-versions.mdx index fe969c555..a9921be3f 100644 --- a/docs/guidelines/language/formatting/software-versions.mdx +++ b/docs/guidelines/language/formatting/software-versions.mdx @@ -14,127 +14,127 @@ description: 'Consistency in writing about versions builds trust and helps users Write "version" in full without abbreviating when there is enough space within the user interface.
-
-
    -
  • Version 2.12.6
  • -
-
-
-
    -
  • ver 2.12.6
  • -
-
+
+
    +
  • Version 2.12.6
  • +
+
+
+
    +
  • ver 2.12.6
  • +
+
Use "Version" with a capital V when it starts a sentence.
-
-
    -
  • Version 3.5.1 has three new exciting changes.
  • -
-
+
+
    +
  • Version 3.5.1 has three new exciting changes.
  • +
+
Use "Version" with a capital V when referring to a named release or is used as a label.
-
-
    -
  • Our migration guide for moving from Version 2 to Version 3 is below.
  • -
-
+
+
    +
  • Our migration guide for moving from Version 2 to Version 3 is below.
  • +
+
Use "version" with a lower case "v" when talking about unspecified versions as it is not a proper noun.
-
-
    -
  • Our next version contains three new exciting changes.
  • -
-
-
-
    -
  • Our next Version contains three new exciting changes.
  • -
-
+
+
    +
  • Our next version contains three new exciting changes.
  • +
+
+
+
    +
  • Our next Version contains three new exciting changes.
  • +
+
Use a capital V without spacing between the letter and number to abbreviate versions.
-
-
    -
  • V2.1.0
  • -
-
-
-
    -
  • v2.1.0
  • -
-
+
+
    +
  • V2.1.0
  • +
+
+
+
    +
  • v2.1.0
  • +
+
Start the first major release with 1 (not 01).
-
-
    -
  • V1.0.0
  • -
-
-
-
    -
  • V01.0.0
  • -
-
+
+
    +
  • V1.0.0
  • +
+
+
+
    +
  • V01.0.0
  • +
+
End versions without a full stop at the end.
-
-
    -
  • V1.0.0
  • -
-
-
-
    -
  • V1.0.0.
  • -
-
+
+
    +
  • V1.0.0
  • +
+
+
+
    +
  • V1.0.0.
  • +
+
Use single digits without adding extra zeros to make it easier to read.
-
-
    -
  • V3.2.5
  • -
-
-
-
    -
  • V03.02.05
  • -
-
+
+
    +
  • V3.2.5
  • +
+
+
+
    +
  • V03.02.05
  • +
+
Add identifiers, such as alpha, before or after version numbers for pre-releases.
-
-
    -
  • V1.0.0-beta
  • -
  • Beta V5.2
  • -
-
-
-
    -
  • V1.0.0-Beta
  • -
-
+
+
    +
  • V1.0.0-beta
  • +
  • Beta V5.2
  • +
+
+
+
    +
  • V1.0.0-Beta
  • +
+
## Related diff --git a/docs/guidelines/language/formatting/timezones.mdx b/docs/guidelines/language/formatting/timezones.mdx index 8d4018346..75b7a2725 100644 --- a/docs/guidelines/language/formatting/timezones.mdx +++ b/docs/guidelines/language/formatting/timezones.mdx @@ -16,50 +16,50 @@ description: Time and time-related guidelines help prevent misunderstandings and Use the 24-hour clock system (the ISO 8601 time standards) when backend localization is not possible.
-
-
    -
  • 11:00
  • -
  • 23:00
  • -
-
-
-
    -
  • 11am
  • -
  • 11PM
  • -
-
+
+
    +
  • 11:00
  • +
  • 23:00
  • +
+
+
+
    +
  • 11am
  • +
  • 11PM
  • +
+
Use colons (:) to split times between hours, minutes, and seconds.
-
-
    -
  • hh:mm:ss
  • -
-
-
-
    -
  • hh.mm.ss
  • -
-
+
+
    +
  • hh:mm:ss
  • +
+
+
+
    +
  • hh.mm.ss
  • +
+
Use periods (.) to add milliseconds and nanoseconds, not a colon (:) according to ISO standards.
-
-
    -
  • hh:mm:ss.mms
  • -
  • hh:mm:ss.sss (ISO 8601 standard)
  • -
  • 0:00:00.920
  • -
-
-
-
    -
  • 0:00:00:920
  • -
-
+
+
    +
  • hh:mm:ss.mms
  • +
  • hh:mm:ss.sss (ISO 8601 standard)
  • +
  • 0:00:00.920
  • +
+
+
+
    +
  • 0:00:00:920
  • +
+
## Time ranges @@ -67,27 +67,27 @@ Use periods (.) to add milliseconds and nanoseconds, not a colon (:) according t Use an en (–) dash to represent time ranges and intervals without spacing on either side of the dash.
-
-
    -
  • Routine maintenance: 08:00–11:00
  • -
-
-
-
    -
  • Packaging line active: 10:00-18:00
  • -
-
+
+
    +
  • Routine maintenance: 08:00–11:00
  • +
+
+
+
    +
  • Packaging line active: 10:00-18:00
  • +
+
Use "from" and "to" for time ranges with separate text or input fields.
-
-
    -
  • From: 14:00
  • -
  • To: 15:00
  • -
-
+
+
    +
  • From: 14:00
  • +
  • To: 15:00
  • +
+
## Time duration @@ -95,13 +95,13 @@ Use "from" and "to" for time ranges with separate text or input fields. Use numerals to write about durations with the full or abbreviated time unit (depending on space in the UI).
-
-
    -
  • Each shift lasts 8 hrs.
  • -
  • Routine maintenance takes approximately 1 hour 30 minutes.
  • -
  • Cooling period: 20 minutes
  • -
-
+
+
    +
  • Each shift lasts 8 hrs.
  • +
  • Routine maintenance takes approximately 1 hour 30 minutes.
  • +
  • Cooling period: 20 minutes
  • +
+
## Time zones @@ -109,127 +109,127 @@ Use numerals to write about durations with the full or abbreviated time unit (de Write "time zone" as two words, not one word "timezone".
-
-
    -
  • Select time zone
  • -
-
-
-
    -
  • Select timezone
  • -
-
+
+
    +
  • Select time zone
  • +
+
+
+
    +
  • Select timezone
  • +
+
When writing out the full time zone, add the UTC offset in brackets afterwards.
-
-
    -
  • British Summer Time (UTC+1)
  • -
  • Central European Summer Time (UTC+2)
  • -
  • Eastern European Summer Time (UTC+3)
  • -
-
+
+
    +
  • British Summer Time (UTC+1)
  • +
  • Central European Summer Time (UTC+2)
  • +
  • Eastern European Summer Time (UTC+3)
  • +
+
Use abbreviated time zones with or without the UTC offset within the UI to save space.
-
-
    -
  • EST
  • -
  • EST (UTC +3)
  • -
-
+
+
    +
  • EST
  • +
  • EST (UTC +3)
  • +
+
Give time zones capital letters for each word.
-
-
    -
  • Eastern Standard Time
  • -
-
-
-
    -
  • eastern standard time
  • -
-
+
+
    +
  • Eastern Standard Time
  • +
+
+
+
    +
  • eastern standard time
  • +
+
Give abbreviated time zones capital letters.
-
-
    -
  • EST
  • -
-
-
-
    -
  • est
  • -
-
+
+
    +
  • EST
  • +
+
+
+
    +
  • est
  • +
+
Avoid punctuation when writing time zones.
-
-
    -
  • EST
  • -
-
-
-
    -
  • EST.
  • -
  • E.S.T.
  • -
-
+
+
    +
  • EST
  • +
+
+
+
    +
  • EST.
  • +
  • E.S.T.
  • +
+
Add a space between the time and the time zone.
-
-
    -
  • 15:23 EST
  • -
-
-
-
    -
  • 15:23EST
  • -
-
+
+
    +
  • 15:23 EST
  • +
+
+
+
    +
  • 15:23EST
  • +
+
Write location and UTC offset in this order: city, country (UTC offset).
-
-
    -
  • Berlin, Germany (UTC+1)
  • -
-
-
-
    -
  • (UTC+1) Berlin, Germany
  • -
-
+
+
    +
  • Berlin, Germany (UTC+1)
  • +
+
+
+
    +
  • (UTC+1) Berlin, Germany
  • +
+
Present multiple time zones clearly by using either "Local time" or "Your local time" for emphasis.
-
-
    -
  • Meeting time: 2025-04-08 14:00 (Berlin, UTC+01:00)
    Your local time: 2025-04-08 21:00 (Tokyo, UTC+09:00)
  • -
  • Support hours (New York): 09:00 - 17:00 (UTC-04:00)
    Your local time (Sydney): 23:00 - 07:00 (UTC+10:00)
  • -
  • Deadline (San Francisco): 2025-04-08 17:00 (UTC-07:00)
    Your Local Time (Berlin): 2025-04-09 02:00 (UTC+01:00)
  • -
-
+
+
    +
  • Meeting time: 2025-04-08 14:00 (Berlin, UTC+01:00)
    Your local time: 2025-04-08 21:00 (Tokyo, UTC+09:00)
  • +
  • Support hours (New York): 09:00 - 17:00 (UTC-04:00)
    Your local time (Sydney): 23:00 - 07:00 (UTC+10:00)
  • +
  • Deadline (San Francisco): 2025-04-08 17:00 (UTC-07:00)
    Your Local Time (Berlin): 2025-04-09 02:00 (UTC+01:00)
  • +
+
## Time-related problematic words @@ -237,42 +237,42 @@ Present multiple time zones clearly by using either "Local time" or "Your local Use "current" for active, ongoing states and avoid "actual" when referring to time.
-
-
    -
  • Current temperature: 72°F
  • -
-
-
-
    -
  • Actual temperature: 72°F
  • -
-
+
+
    +
  • Current temperature: 72°F
  • +
+
+
+
    +
  • Actual temperature: 72°F
  • +
+
Use "latest" for the newest updates or versions and "last" for final items in a sequence.
-
-
    -
  • Latest firmware update: V2.1.5
  • -
  • Last firmware update before end of life: V2.1.5
  • -
-
+
+
    +
  • Latest firmware update: V2.1.5
  • +
  • Last firmware update before end of life: V2.1.5
  • +
+
Use "recent" for past events that have just happened.
-
-
    -
  • Recent alerts: 2 warnings
  • -
-
-
-
    -
  • Recent firmware update: V2.1.5
  • -
-
+
+
    +
  • Recent alerts: 2 warnings
  • +
+
+
+
    +
  • Recent firmware update: V2.1.5
  • +
+
## Related diff --git a/docs/guidelines/language/frequent-app-functions.md b/docs/guidelines/language/frequent-app-functions.md index f29dfc646..aa0fb15cf 100644 --- a/docs/guidelines/language/frequent-app-functions.md +++ b/docs/guidelines/language/frequent-app-functions.md @@ -19,13 +19,13 @@ description: 'Get tips for naming common app functions clearly and effectively. - Cockpit
-
-
    -
  • Console
  • -
  • Dash
  • -
  • Control panel
  • -
-
+
+
    +
  • Console
  • +
  • Dash
  • +
  • Control panel
  • +
+
## Analytics @@ -35,12 +35,12 @@ description: 'Get tips for naming common app functions clearly and effectively. - Anomaly detection
-
-
    -
  • Assessment
  • -
  • Examination
  • -
-
+
+
    +
  • Assessment
  • +
  • Examination
  • +
+
## Monitoring and scheduling @@ -54,11 +54,11 @@ description: 'Get tips for naming common app functions clearly and effectively. - Remove from watchlist
-
-
    -
  • Watch list
  • -
-
+
+
    +
  • Watch list
  • +
+
## Detail view @@ -70,12 +70,12 @@ description: 'Get tips for naming common app functions clearly and effectively. - Details
-
-
    -
  • Facts
  • -
  • Specifics
  • -
-
+
+
    +
  • Facts
  • +
  • Specifics
  • +
+
### Asset properties @@ -121,11 +121,11 @@ description: 'Get tips for naming common app functions clearly and effectively. - Drag files here or select files
-
-
    -
  • Drag and drop here or browse
  • -
-
+
+
    +
  • Drag and drop here or browse
  • +
+
## Comments @@ -139,11 +139,11 @@ description: 'Get tips for naming common app functions clearly and effectively. - Write your comments here
-
-
    -
  • Write a comment
  • -
-
+
+
    +
  • Write a comment
  • +
+
## Grid and list actions @@ -169,13 +169,13 @@ description: 'Get tips for naming common app functions clearly and effectively. - Notify me when X occurs
-
-
    -
  • Error
  • -
  • Issue
  • -
  • Problem
  • -
-
+
+
    +
  • Error
  • +
  • Issue
  • +
  • Problem
  • +
+
## Event types @@ -205,14 +205,14 @@ description: 'Get tips for naming common app functions clearly and effectively. - Detected
-
-
    -
  • Unacklowedged
  • -
  • Unack.
  • -
  • Unackn.
  • -
  • Unacknl.
  • -
-
+
+
    +
  • Unacklowedged
  • +
  • Unack.
  • +
  • Unackn.
  • +
  • Unacknl.
  • +
+
## Event actions diff --git a/docs/guidelines/language/grammar-and-vocabulary.md b/docs/guidelines/language/grammar-and-vocabulary.md index 1ac3e8644..a35543526 100644 --- a/docs/guidelines/language/grammar-and-vocabulary.md +++ b/docs/guidelines/language/grammar-and-vocabulary.md @@ -17,41 +17,41 @@ description: "Discover the importance of proper grammar and vocabulary in UX wri - Only use simple verb forms in the past or future when necessary
-
-
    -
  • click, browse, upload
  • -
  • file loads, file loaded
  • -
-
-
-
    -
  • clicking, being clicked, was clicking
  • -
  • file is going to be loaded, file has been loaded
  • -
-
+
+
    +
  • click, browse, upload
  • +
  • file loads, file loaded
  • +
+
+
+
    +
  • clicking, being clicked, was clicking
  • +
  • file is going to be loaded, file has been loaded
  • +
+
## Active voice
-
-
    -
  • Configuration file opens.
  • -
  • Admin provides read-only access.
  • -
  • Measure performance.
  • -
  • Click submit.
  • -
  • Calculate the data.
  • -
-
-
-
    -
  • The configuration file is opened.
  • -
  • Read-only access is provided by Admin.
  • -
  • Performance is measured.
  • -
  • Submit is clicked by user.
  • -
  • The data is calculated by application.
  • -
-
+
+
    +
  • Configuration file opens.
  • +
  • Admin provides read-only access.
  • +
  • Measure performance.
  • +
  • Click submit.
  • +
  • Calculate the data.
  • +
+
+
+
    +
  • The configuration file is opened.
  • +
  • Read-only access is provided by Admin.
  • +
  • Performance is measured.
  • +
  • Submit is clicked by user.
  • +
  • The data is calculated by application.
  • +
+
## UI terminology @@ -63,18 +63,18 @@ description: "Discover the importance of proper grammar and vocabulary in UX wri - Basic terminology: checkbox, drop-down, field, icon, menu, link, radio button, window
-
-
    -
  • click
  • -
  • hover
  • -
-
-
-
    -
  • press
  • -
  • mouse over
  • -
-
+
+
    +
  • click
  • +
  • hover
  • +
+
+
+
    +
  • press
  • +
  • mouse over
  • +
+
## Idioms and phrasal verbs @@ -86,22 +86,22 @@ description: "Discover the importance of proper grammar and vocabulary in UX wri - Avoid cultural references
-
-
    -
  • remove
  • -
  • calculate
  • -
  • continue
  • -
  • mobile device
  • -
-
-
-
    -
  • get rid of
  • -
  • add up
  • -
  • carry on
  • -
  • Apple, Android, iOS, smartphone
  • -
-
+
+
    +
  • remove
  • +
  • calculate
  • +
  • continue
  • +
  • mobile device
  • +
+
+
+
    +
  • get rid of
  • +
  • add up
  • +
  • carry on
  • +
  • Apple, Android, iOS, smartphone
  • +
+
## Jargon, buzz words and terms @@ -125,22 +125,22 @@ description: "Discover the importance of proper grammar and vocabulary in UX wri - Never make up your own acronyms: https://www.acronymfinder.com/
-
-
    -
  • light emitting diodes (LEDs)
  • -
  • APS
  • -
  • EU
  • -
  • I/O component, I/O list, I/O module
  • -
-
-
-
    -
  • Light Emitting Diodes (LEDS)
  • -
  • A.P.S.
  • -
  • E.U.
  • -
  • IO component, i/o list, I-O module
  • -
-
+
+
    +
  • light emitting diodes (LEDs)
  • +
  • APS
  • +
  • EU
  • +
  • I/O component, I/O list, I/O module
  • +
+
+
+
    +
  • Light Emitting Diodes (LEDS)
  • +
  • A.P.S.
  • +
  • E.U.
  • +
  • IO component, i/o list, I-O module
  • +
+
## Time based vocabulary: Last, latest and recent @@ -152,18 +152,18 @@ description: "Discover the importance of proper grammar and vocabulary in UX wri - Recent is more time focused and is similar to latest. It means that it happened a short time ago.
-
-
    -
  • Latest update
  • -
  • Latest summary
  • -
  • Recent events
  • -
-
-
-
    -
  • Last update
  • -
  • Last summary
  • -
  • Last events
  • -
-
+
+
    +
  • Latest update
  • +
  • Latest summary
  • +
  • Recent events
  • +
+
+
+
    +
  • Last update
  • +
  • Last summary
  • +
  • Last events
  • +
+
diff --git a/docs/guidelines/language/menu-functions-and-ui-labels/external-links-and-resources.md b/docs/guidelines/language/menu-functions-and-ui-labels/external-links-and-resources.md index 70c55d041..f5d17ea99 100644 --- a/docs/guidelines/language/menu-functions-and-ui-labels/external-links-and-resources.md +++ b/docs/guidelines/language/menu-functions-and-ui-labels/external-links-and-resources.md @@ -22,79 +22,79 @@ import { iconOpenExternal } from "@siemens/ix-icons/icons"; Use brief, meaningful link text to explain the function of the target web page or resource.
-
-
    -
  • SIMATIC S7-1500 firmware updates
  • -
  • Roles and permissions in the documentation
  • -
  • Demonstration projects
  • -
-
-
-
    -
  • Learn about the latest device firmware updates
  • -
  • {'https://www.company.com/s7-1500-firmware'}
  • -
  • Remote access
  • -
-
+
+
    +
  • SIMATIC S7-1500 firmware updates
  • +
  • Roles and permissions in the documentation
  • +
  • Demonstration projects
  • +
+
+
+
    +
  • Learn about the latest device firmware updates
  • +
  • {'https://www.company.com/s7-1500-firmware'}
  • +
  • Remote access
  • +
+
Pair link text with universal icons, e.g. the open-external or application-screen icons.
-
-
    -
  • Company Digital ID
  • -
  • Manage your software licenses in one place
  • -
-
+
+
    +
  • Company Digital ID
  • +
  • Manage your software licenses in one place
  • +
+
Use descriptive link text instead of long, full URLs and remove the prefix {'https://www'}.
-
-
    -
  • Company homepage
  • -
  • acronymfinder.com
  • -
-
-
-
    -
  • {'https://www.company.com/s9-1600-firmware'}
  • -
  • {'https://support.com/us/en/view/107826255'}
  • -
-
+
+
    +
  • Company homepage
  • +
  • acronymfinder.com
  • +
+
+
+
    +
  • {'https://www.company.com/s9-1600-firmware'}
  • +
  • {'https://support.com/us/en/view/107826255'}
  • +
+
Avoid generic link text, e.g. "click here" without context or information regarding what opens.
-
-
    -
  • Description: The details regarding the collection and use of Analytics Data are described in Software Analytics Notice contained in the Application Function Manual.

    +
    +
      +
    • Description: The details regarding the collection and use of Analytics Data are described in Software Analytics Notice contained in the Application Function Manual.

      Link text: Open Application Function Manual
    • -
    -
    -
    -
      -
    • Click here
    • -
    • Read more
    • -
    -
    +
+
+
+
    +
  • Click here
  • +
  • Read more
  • +
+
Use unique link text for each link destination so assistive technology users can distinguish between links (if all links have the same text, it makes it hard to know where each one leads).
-
-
    -
  • Open Assembly Manual
    Open Demonstration Project App
    Explore Manual
  • -
-
-
-
    -
  • Click here
    Click here
    Click here
  • -
-
+
+
    +
  • Open Assembly Manual
    Open Demonstration Project App
    Explore Manual
  • +
+
+
+
    +
  • Click here
    Click here
    Click here
  • +
+
## General rules for resource texts @@ -102,30 +102,30 @@ Use unique link text for each link destination so assistive technology users can Use brief, meaningful resource texts and explain the function and type of the resource.
-
-
    -
  • Generative AI chat privacy information
  • -
  • Interface module IM 155-5 MF HF Equipment Manual
  • -
  • Industrial Copilots with Agentic AI
  • -
-
-
-
    -
  • example.company.com/downloads/file.pdf
  • -
  • You can read more in the User Documentation
  • -
-
+
+
    +
  • Generative AI chat privacy information
  • +
  • Interface module IM 155-5 MF HF Equipment Manual
  • +
  • Industrial Copilots with Agentic AI
  • +
+
+
+
    +
  • example.company.com/downloads/file.pdf
  • +
  • You can read more in the User Documentation
  • +
+
Pair resource text with icons, e.g. PDF-document or video-file icons.
-
-
    -
  • Data Privacy Organization
  • -
  • Industrial Copilots with Agentic AI
  • -
-
+
+
    +
  • Data Privacy Organization
  • +
  • Industrial Copilots with Agentic AI
  • +
+
## Downloading resources @@ -133,11 +133,11 @@ Pair resource text with icons, e.g. PDF-document or video-file icons. Pair the download of resources with both file type and size whenever possible.
-
-
    -
  • Download User Manual (54 MB)
  • -
-
+
+
    +
  • Download User Manual (54 MB)
  • +
+
## Text alternatives (ALT-text) for icons @@ -145,18 +145,18 @@ Pair the download of resources with both file type and size whenever possible. Describe link behavior and type in ALT-texts instead of repeating icon and visible link text.
-
-
    -
  • Link text: Visit our homepage
    ALT-text: external
  • -
  • Resource text: Function Manual
    ALT-text: external PDF
  • -
  • Resource text:
    Industrial Copilots with Agentic AI
    ALT-text: external video in new tab
  • -
-
-
-
    -
  • Link text: Visit our homepage
    ALT-text: Visit our homepage.
  • -
-
+
+
    +
  • Link text: Visit our homepage
    ALT-text: external
  • +
  • Resource text: Function Manual
    ALT-text: external PDF
  • +
  • Resource text:
    Industrial Copilots with Agentic AI
    ALT-text: external video in new tab
  • +
+
+
+
    +
  • Link text: Visit our homepage
    ALT-text: Visit our homepage.
  • +
+
## Icon legend @@ -173,12 +173,12 @@ Describe link behavior and type in ALT-texts instead of repeating icon and visib Specify the language when the resource language differs from the app language (WCAG 3.1.2).
-
-
    -
  • Application Function Manual (German)
  • -
  • German web page (German)
  • -
-
+
+
    +
  • Application Function Manual (German)
  • +
  • German web page (German)
  • +
+
## Layout @@ -186,29 +186,29 @@ Specify the language when the resource language differs from the app language (W Separate external links from body text with lists to avoid disrupting user reading flow.
-
-
    -
  • Our platform integrates with various tools to enhance productivity.
    +
    +
      +
    • Our platform integrates with various tools to enhance productivity.
      External resources:
      Documentation portal
      GitHub repository
      Support community
    • -
    -
    +
+
Split external links from body text with separate paragraphs for faster scanning and enhanced transparency.
-
-
    -
  • Description: Our new automation system improves efficiency by 40% and reduces downtime through predictive maintenance algorithms.

    Link text: Efficiency report
  • -
-
-
-
    -
  • For more technical details, visit Automation Whitepaper .
  • -
-
+
+
    +
  • Description: Our new automation system improves efficiency by 40% and reduces downtime through predictive maintenance algorithms.

    Link text: Efficiency report
  • +
+
+
+
    +
  • For more technical details, visit Automation Whitepaper .
  • +
+
## Emails and telephone numbers @@ -216,26 +216,26 @@ Split external links from body text with separate paragraphs for faster scanning Avoid adding the "mailto" text and for email addresses as this is no longer visible in the UI.
-
-
    -
  • {'mailto:name@examples.com'}
  • -
-
+
+
    +
  • {'mailto:name@examples.com'}
  • +
+
Ensure email addresses and phone numbers are clickable.
-
-
    -
  • You can reach us at the following telephone number [+1 555-0100](#).
  • -
-
-
-
    -
  • 555 0100
  • -
-
+
+
    +
  • You can reach us at the following telephone number [+1 555-0100](#).
  • +
+
+
+
    +
  • 555 0100
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/menu-functions-and-ui-labels/license-management.md b/docs/guidelines/language/menu-functions-and-ui-labels/license-management.md index 44c61bb4c..6f033df93 100644 --- a/docs/guidelines/language/menu-functions-and-ui-labels/license-management.md +++ b/docs/guidelines/language/menu-functions-and-ui-labels/license-management.md @@ -15,42 +15,42 @@ description: 'Clear license and subscription management writing reduces user con Use clear and consistent language your users are familiar with.
-
-
    -
  • Your subscription expires in 30 days. Renew now to keep access to all features.
  • -
-
-
-
    -
  • Your entitlement terminates in 30 days. Execute renewal procedures to maintain feature provisioning.
  • -
-
+
+
    +
  • Your subscription expires in 30 days. Renew now to keep access to all features.
  • +
+
+
+
    +
  • Your entitlement terminates in 30 days. Execute renewal procedures to maintain feature provisioning.
  • +
+
Use the same terms throughout workflows, applications and portfolios to avoid confusion.
-
-
    -
  • Activate your license / License activated / View activated licenses
  • -
-
-
-
    -
  • Activate your license / License enabled / View dynamic licenses
  • -
-
+
+
    +
  • Activate your license / License activated / View activated licenses
  • +
+
+
+
    +
  • Activate your license / License enabled / View dynamic licenses
  • +
+
Use links when referencing terms of use or compliance documents.
-
-
    -
  • By using this software, you agree to our Terms of Use.
    +
    +
      +
    • By using this software, you agree to our Terms of Use.
      Link text: View full terms
    • -
    -
    +
+
## Grammar and spelling rules @@ -58,90 +58,90 @@ Use links when referencing terms of use or compliance documents. Use American English spelling “license” (with s) for both nouns and verbs in all global interfaces.
-
-
    -
  • Your license expires in 30 days.
  • -
-
-
-
    -
  • Your licence expires in 30 days.
  • -
-
+
+
    +
  • Your license expires in 30 days.
  • +
+
+
+
    +
  • Your licence expires in 30 days.
  • +
+
Use “a license” when referring to single licenses in general, and “the license” when referring to specific licenses.
-
-
    -
  • You need a license to access this feature.
  • -
  • The license you purchased includes 5 users.
  • -
-
+
+
    +
  • You need a license to access this feature.
  • +
  • The license you purchased includes 5 users.
  • +
+
Avoid using apostrophes to describe singular (‘s) or plural (s’) license possession.
-
-
    -
  • The license expires on May 1, 2026.
  • -
  • The status of all licenses can be viewed here.
  • -
-
-
-
    -
  • The license’s expiration date is May 1, 2026.
  • -
  • All licenses’ status can be viewed here.
  • -
-
+
+
    +
  • The license expires on May 1, 2026.
  • +
  • The status of all licenses can be viewed here.
  • +
+
+
+
    +
  • The license’s expiration date is May 1, 2026.
  • +
  • All licenses’ status can be viewed here.
  • +
+
Use active voice for user actions.
-
-
    -
  • Activate your license now.
  • -
-
-
-
    -
  • Your license should be activated by you.
  • -
-
+
+
    +
  • Activate your license now.
  • +
+
+
+
    +
  • Your license should be activated by you.
  • +
+
Use passive voice when the actor is unknown or unimportant.
-
-
    -
  • Your license was activated successfully.
  • -
-
-
-
    -
  • The license activates.
  • -
-
+
+
    +
  • Your license was activated successfully.
  • +
+
+
+
    +
  • The license activates.
  • +
+
Use hyphens to connect descriptive words before nouns.
-
-
    -
  • A multi-user license
  • -
  • The license is multi-user
  • -
-
-
-
    -
  • A multi user license
  • -
-
+
+
    +
  • A multi-user license
  • +
  • The license is multi-user
  • +
+
+
+
    +
  • A multi user license
  • +
+
## License types @@ -219,44 +219,44 @@ Note licenses can be both proper nouns and common nouns (per Product License vs. Use clear and specific dates, limits and consequences.
-
-
    -
  • Your license expires on November 30, 2025.
  • -
-
-
-
    -
  • Your license will expire soon.
  • -
-
+
+
    +
  • Your license expires on November 30, 2025.
  • +
+
+
+
    +
  • Your license will expire soon.
  • +
+
Use prominent and clear expiration warnings.
-
-
    -
  • First notice: Your license expires on November 30, 2025.
  • -
  • Second notice: Your license expires in 7 days.
  • -
  • Final notice: Your license expires tomorrow.
  • -
-
+
+
    +
  • First notice: Your license expires on November 30, 2025.
  • +
  • Second notice: Your license expires in 7 days.
  • +
  • Final notice: Your license expires tomorrow.
  • +
+
Send timely, progressive reminders, especially for expiration and grace periods.
-
-
    -
  • Heading: Your license has expired.
    Description: Your license expired on January 1, 2026. To continue using our application renew your subscription.
    Buttons: Renew now / Contact sales
  • -
  • Grace period notice: 7 days
  • -
-
-
-
    -
  • License expired.
  • -
-
+
+
    +
  • Heading: Your license has expired.
    Description: Your license expired on January 1, 2026. To continue using our application renew your subscription.
    Buttons: Renew now / Contact sales
  • +
  • Grace period notice: 7 days
  • +
+
+
+
    +
  • License expired.
  • +
+
## License quantities and numbers @@ -264,18 +264,18 @@ Send timely, progressive reminders, especially for expiration and grace periods. Use “quantity” to refer to how many and “number” to refer to identifiers and codes.
-
-
    -
  • product number
  • -
  • serial number
  • -
  • Enter your license key
  • -
-
-
-
    -
  • Enter your license key quantity
  • -
-
+
+
    +
  • product number
  • +
  • serial number
  • +
  • Enter your license key
  • +
+
+
+
    +
  • Enter your license key quantity
  • +
+
## License identification and keys @@ -283,76 +283,76 @@ Use “quantity” to refer to how many and “number” to refer to identifiers Use “ID” for identification and tracking and “key” for activation or access.
-
-
    -
  • Enter your license key.
  • -
-
-
-
    -
  • Enter your license ID.
  • -
-
+
+
    +
  • Enter your license key.
  • +
+
+
+
    +
  • Enter your license ID.
  • +
+
Use “subscription ID” when referring to the unique identifier number or code for an entire subscription (often a long number or UUID).
-
-
    -
  • Your subscription ID is 1234567890.
  • -
-
-
-
    -
  • Your subscription key is 1234567890.
  • -
-
+
+
    +
  • Your subscription ID is 1234567890.
  • +
+
+
+
    +
  • Your subscription key is 1234567890.
  • +
+
Use “subscription key” when referring to a code or password required to activate or access a subscription.
-
-
    -
  • Copy this subscription key to activate your subscription.
  • -
-
-
-
    -
  • Copy this subscription ID to activate your subscription.
  • -
-
+
+
    +
  • Copy this subscription key to activate your subscription.
  • +
+
+
+
    +
  • Copy this subscription ID to activate your subscription.
  • +
+
Use “license ID” or “ID” for the unique identifier of a specific license within the subscription.
-
-
    -
  • Each license has its own license ID for tracking and management.
  • -
-
-
-
    -
  • Each license has its own license key for tracking and management.
  • -
-
+
+
    +
  • Each license has its own license ID for tracking and management.
  • +
+
+
+
    +
  • Each license has its own license key for tracking and management.
  • +
+
Use “license key” when talking about the code or string that unlocks or activates a specific license.
-
-
    -
  • Enter your license key to activate the product.
  • -
-
-
-
    -
  • Enter your license ID to activate the product.
  • -
-
+
+
    +
  • Enter your license key to activate the product.
  • +
+
+
+
    +
  • Enter your license ID to activate the product.
  • +
+
## License error messages @@ -360,21 +360,21 @@ Use “license key” when talking about the code or string that unlocks or acti When licenses cannot be found, explain possible causes and provide clear actions to resolve the issue.
-
-
    -
  • Heading: License not found
    Description: Failed to find a valid license for this product. This may happen if you’re registered under a different account, or if your license has not been activated yet.
    Button: Sign in with different account
  • -
-
+
+
    +
  • Heading: License not found
    Description: Failed to find a valid license for this product. This may happen if you’re registered under a different account, or if your license has not been activated yet.
    Button: Sign in with different account
  • +
+
When licenses are not available, explain how users can resolve the issue.
-
-
    -
  • Heading: No licenses available
    Description: All 10 licenses are currently in use. Ask your administrator to assign a license to you or wait until one becomes available.
    Buttons: Request license / View license usage
  • -
-
+
+
    +
  • Heading: No licenses available
    Description: All 10 licenses are currently in use. Ask your administrator to assign a license to you or wait until one becomes available.
    Buttons: Request license / View license usage
  • +
+
## Common wording issues @@ -382,105 +382,105 @@ When licenses are not available, explain how users can resolve the issue. Use “add-on” to refer to additional features or modules attached to an existing product.
-
-
    -
  • Add the Health package add-on for obsolescence notifications.
  • -
-
+
+
    +
  • Add the Health package add-on for obsolescence notifications.
  • +
+
Use “upgrade” for when users are moving to a better version of the same product.
-
-
    -
  • Upgrade to the Professional edition for more features.
  • -
  • Upgrade your license from Version 2.0 to Version 3.0.
  • -
-
-
-
    -
  • Add the next edition as an add-on.
  • -
-
+
+
    +
  • Upgrade to the Professional edition for more features.
  • +
  • Upgrade your license from Version 2.0 to Version 3.0.
  • +
+
+
+
    +
  • Add the next edition as an add-on.
  • +
+
Use “requirement” to refer to what a user needs to run the software.
-
-
    -
  • License requirements: Active subscription and internet connection.
  • -
  • This feature requires an active maintenance agreement.
  • -
-
+
+
    +
  • License requirements: Active subscription and internet connection.
  • +
  • This feature requires an active maintenance agreement.
  • +
+
Use “entitlement” to refer to what the user is authorized to do.
-
-
    -
  • Your entitlement includes 5 user licenses.
  • -
  • This feature is not included in your current entitlement.
  • -
-
-
-
    -
  • Your requirement includes 5 user licenses.
  • -
-
+
+
    +
  • Your entitlement includes 5 user licenses.
  • +
  • This feature is not included in your current entitlement.
  • +
+
+
+
    +
  • Your requirement includes 5 user licenses.
  • +
+
Use the standard term “activate” and “assign” instead of the non-standard “start”.
-
-
    -
  • Activate license now.
  • -
  • Assign licenses to your team in your dashboard.
  • -
-
+
+
    +
  • Activate license now.
  • +
  • Assign licenses to your team in your dashboard.
  • +
+
Use “renew” instead of “update” for continuing subscriptions.
-
-
    -
  • Renew your license in one easy step.
  • -
-
+
+
    +
  • Renew your license in one easy step.
  • +
+
Use “manage” instead of “edit” to administer licenses.
-
-
    -
  • Manage your licenses under License management.
  • -
-
+
+
    +
  • Manage your licenses under License management.
  • +
+
Use “base” product to talk about a foundation product that other features build on.
-
-
    -
  • The base product includes core functionality.
  • -
-
+
+
    +
  • The base product includes core functionality.
  • +
+
Use “basic” product when talking about a simplified or entry-level version of your product.
-
-
    -
  • Select either our Basic, Premium or Advanced licenses.
  • -
-
+
+
    +
  • Select either our Basic, Premium or Advanced licenses.
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/menu-functions-and-ui-labels/logging-in-and-out.md b/docs/guidelines/language/menu-functions-and-ui-labels/logging-in-and-out.md index 3ff6e14c6..faf7796d8 100644 --- a/docs/guidelines/language/menu-functions-and-ui-labels/logging-in-and-out.md +++ b/docs/guidelines/language/menu-functions-and-ui-labels/logging-in-and-out.md @@ -15,326 +15,326 @@ description: 'Consistent login/logout text reduces confusion, builds trust, and Use “log in” and “log out” as the action verbs instead of “sign in” or “sign out” for consistency.
-
-
    -
  • Log out
  • -
  • Log in to get started
  • -
  • Log in with Microsoft ID
  • -
-
-
-
    -
  • Log off
  • -
  • Sign out
  • -
-
+
+
    +
  • Log out
  • +
  • Log in to get started
  • +
  • Log in with Microsoft ID
  • +
+
+
+
    +
  • Log off
  • +
  • Sign out
  • +
+
Use “login” and “logout” as the nouns instead of “signoff” or “logoff” for consistency.
-
-
    -
  • Logout
  • -
  • The login button is located on the top right corner of the screen.
  • -
  • After logout, you’ll be directed to the homepage.
  • -
-
-
-
    -
  • Logoff
  • -
-
+
+
    +
  • Logout
  • +
  • The login button is located on the top right corner of the screen.
  • +
  • After logout, you’ll be directed to the homepage.
  • +
+
+
+
    +
  • Logoff
  • +
+
Use “create account” instead of “register” for consistency and transparency.
-
-
    -
  • Create account
  • -
  • Register
  • -
-
-
-
    -
  • Join
  • -
  • Enroll
  • -
  • Sign up
  • -
-
+
+
    +
  • Create account
  • +
  • Register
  • +
+
+
+
    +
  • Join
  • +
  • Enroll
  • +
  • Sign up
  • +
+
Provide feedback and guidance when there are unexpected errors during login.
-
-
    -
  • Unexpected error during login. Open homepage and try again.
  • -
-
-
-
    -
  • An unexpected error occurred during login.
  • -
-
+
+
    +
  • Unexpected error during login. Open homepage and try again.
  • +
+
+
+
    +
  • An unexpected error occurred during login.
  • +
+
Provide clear actions when users need to log in again or have been logged out unexpectedly.
-
-
    -
  • Session expired due to inactivity. Log in to continue working.
  • -
  • Session expired due to inactivity. Log in again to continue working.
  • -
-
-
-
    -
  • Your session has expired.
  • -
-
+
+
    +
  • Session expired due to inactivity. Log in to continue working.
  • +
  • Session expired due to inactivity. Log in again to continue working.
  • +
+
+
+
    +
  • Your session has expired.
  • +
+
Avoid generic “refresh” or “reload” buttons, instead move users forward with concrete actions.
-
-
    -
  • Failed to log in. Check your credentials and try again.
  • -
-
-
-
    -
  • Login failed. Refresh page.
  • -
-
+
+
    +
  • Failed to log in. Check your credentials and try again.
  • +
+
+
+
    +
  • Login failed. Refresh page.
  • +
+
Avoid using question prompts to make texts leaner and avoid punctuation issues.
-
-
    -
  • Forgot password
  • -
  • Request new password
  • -
  • Create account
  • -
-
-
-
    -
  • Forgot your password?
  • -
  • Don’t have an account? Register now
  • -
  • Already have an account?
  • -
-
+
+
    +
  • Forgot password
  • +
  • Request new password
  • +
  • Create account
  • +
+
+
+
    +
  • Forgot your password?
  • +
  • Don’t have an account? Register now
  • +
  • Already have an account?
  • +
+
Clearly explain password policy to avoid frustration or user friction.
-
-
    -
  • Minimum 12 characters
    +
    +
      +
    • Minimum 12 characters
      Minimum 1 uppercase letter (A-Z)
      Minimum 1 number
      Minimum 1 special character (!@#$%^&*)
    • -
    -
    -
    -
      -
    • Ensure you meet the password criteria.
    • -
    -
    +
+
+
+
    +
  • Ensure you meet the password criteria.
  • +
+
Guide users when they add invalid input to support password creation.
-
-
    -
  • Matches one of your last 3 passwords
  • -
  • Uses invalid characters
  • -
  • Missing a lower case letter
  • -
  • Contains spaces
  • -
  • Contains your username
  • -
-
-
-
    -
  • Wrong password format
  • -
  • Invalid
  • -
  • Error
  • -
  • Try again
  • -
  • Password error code: 5467
  • -
-
+
+
    +
  • Matches one of your last 3 passwords
  • +
  • Uses invalid characters
  • +
  • Missing a lower case letter
  • +
  • Contains spaces
  • +
  • Contains your username
  • +
+
+
+
    +
  • Wrong password format
  • +
  • Invalid
  • +
  • Error
  • +
  • Try again
  • +
  • Password error code: 5467
  • +
+
Show real-time password strength.
-
-
    -
  • Weak
  • -
  • Fair
  • -
  • Strong
  • -
  • Very strong
  • -
-
-
-
    -
  • Not strong enough
  • -
-
+
+
    +
  • Weak
  • +
  • Fair
  • +
  • Strong
  • +
  • Very strong
  • +
+
+
+
    +
  • Not strong enough
  • +
+
Avoid using password or password-related jargon or abbreviations.
-
-
    -
  • One-time password
  • -
-
-
-
    -
  • OTP
  • -
-
+
+
    +
  • One-time password
  • +
+
+
+
    +
  • OTP
  • +
+
Use “change password” instead of “update password” for consistency.
-
-
    -
  • Change password
  • -
-
-
-
    -
  • Update password
  • -
-
+
+
    +
  • Change password
  • +
+
+
+
    +
  • Update password
  • +
+
Use “email” or “email address” as both are acceptable.
-
-
    -
  • Enter a valid email.
  • -
  • Enter a valid email address.
  • -
  • Enter your email below to receive a password reset link.
  • -
  • Incorrect email or password. Check your details and try again.
  • -
-
+
+
    +
  • Enter a valid email.
  • +
  • Enter a valid email address.
  • +
  • Enter your email below to receive a password reset link.
  • +
  • Incorrect email or password. Check your details and try again.
  • +
+
Use * consistently to indicate [required fields](../../../components/forms-field/code.mdx#required-indicator) depending on space limitations.
-
-
    -
  • First name*
  • -
-
+
+
    +
  • First name*
  • +
+
Use “verify” and “verification” when users need to authenticate with their credentials.
-
-
    -
  • Verification code
  • -
  • Verify your account
  • -
-
-
-
    -
  • Validate
  • -
  • Confirm
  • -
  • Authenticate
  • -
-
+
+
    +
  • Verification code
  • +
  • Verify your account
  • +
+
+
+
    +
  • Validate
  • +
  • Confirm
  • +
  • Authenticate
  • +
+
Use “first name” and “last name” instead of “surname”, “given name” or “Christian name”.
-
-
    -
  • First name / Last name
  • -
-
-
-
    -
  • Given name / Surname
  • -
-
+
+
    +
  • First name / Last name
  • +
+
+
+
    +
  • Given name / Surname
  • +
+
Use “ZIP code” (US English) instead of “postcode” (UK) as we use the American English variation.
-
-
    -
  • Enter ZIP code
  • -
-
-
-
    -
  • Enter postcode
  • -
-
+
+
    +
  • Enter ZIP code
  • +
+
+
+
    +
  • Enter postcode
  • +
+
Use generic password error messages to avoid leaking information.
-
-
    -
  • Failed to log in. Incorrect username or password.
  • -
  • Failed to log in. Incorrect user email or password.
  • -
-
-
-
    -
  • 1 number was incorrect on this password. Try again.
  • -
-
+
+
    +
  • Failed to log in. Incorrect username or password.
  • +
  • Failed to log in. Incorrect user email or password.
  • +
+
+
+
    +
  • 1 number was incorrect on this password. Try again.
  • +
+
Use generic password recovery messages to avoid leaking information.
-
-
    -
  • If that email address is in our database, we will send you an email to reset your password.
  • -
  • If your email address is registered, you’ll receive a password reset email.
  • -
-
-
-
    -
  • Account is locked.
  • -
-
+
+
    +
  • If that email address is in our database, we will send you an email to reset your password.
  • +
  • If your email address is registered, you’ll receive a password reset email.
  • +
+
+
+
    +
  • Account is locked.
  • +
+
Use specific authentication terms and use them consistently within workflows to avoid confusion.
-
-
    -
  • Code / Authentication code / Code verified
  • -
-
-
-
    -
  • Code / Token / Passcode / Digits
  • -
-
+
+
    +
  • Code / Authentication code / Code verified
  • +
+
+
+
    +
  • Code / Token / Passcode / Digits
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/menu-functions-and-ui-labels/onboarding.md b/docs/guidelines/language/menu-functions-and-ui-labels/onboarding.md index bb50d153d..01fdffede 100644 --- a/docs/guidelines/language/menu-functions-and-ui-labels/onboarding.md +++ b/docs/guidelines/language/menu-functions-and-ui-labels/onboarding.md @@ -23,128 +23,128 @@ We follow this three-step approach when writing our onboarding messages. Welcome users in the onboarding component only once with a friendly yet professional tone.
-
-
    -
  • Welcome to [application name]
  • -
  • Welcome [user name] to [application name]
  • -
-
-
-
    -
  • Welcome again to [application name]
  • -
-
+
+
    +
  • Welcome to [application name]
  • +
  • Welcome [user name] to [application name]
  • +
+
+
+
    +
  • Welcome again to [application name]
  • +
+
Use a friendly, professional tone that’s engaging and informative but not casual or informal.
-
-
    -
  • Get started
  • -
  • Getting started
  • -
-
-
-
    -
  • Hey there! Let’s dive in and get you rolling! 🚀
  • -
-
+
+
    +
  • Get started
  • +
  • Getting started
  • +
+
+
+
    +
  • Hey there! Let’s dive in and get you rolling! 🚀
  • +
+
Avoid using marketing or selling wording, instead address users as a partner and expert.
-
-
    -
  • Connecting your mobile device is a piece of cake with our Asset Manager.
  • -
-
+
+
    +
  • Connecting your mobile device is a piece of cake with our Asset Manager.
  • +
+
Break onboarding into small, manageable steps with bullet points, pagination or short paragraphs.
-
-
    -
  • Set up your notifications:
    +
    +
      +
    • Set up your notifications:
        • Select the notifications you want
        • Set quiet hours to avoid interruptions
    • -
    -
    -
    -
      -
    • Getting started with smart notifications. You can now choose what types of alerts you want, set quiet hours, and customize how you receive notifications so you’re not overwhelmed.
    • -
    -
    +
+
+
+
    +
  • Getting started with smart notifications. You can now choose what types of alerts you want, set quiet hours, and customize how you receive notifications so you’re not overwhelmed.
  • +
+
Use verbs for call-to-actions, providing concrete actions or onboarding steps.
-
-
    -
  • Get started
  • -
  • Start now
  • -
  • Start tour
  • -
  • Learn more
  • -
  • Register
  • -
  • Create account
  • -
  • Explore the app
  • -
  • Onboard devices
  • -
  • Learn how to onboard assets
  • -
-
+
+
    +
  • Get started
  • +
  • Start now
  • +
  • Start tour
  • +
  • Learn more
  • +
  • Register
  • +
  • Create account
  • +
  • Explore the app
  • +
  • Onboard devices
  • +
  • Learn how to onboard assets
  • +
+
Avoid generic call-to-actions when possible to enhance transparency and build confidence.
-
-
    -
  • OK
  • -
  • Click here
  • -
-
+
+
    +
  • OK
  • +
  • Click here
  • +
+
Use clear (but not catastrophic) wording to highlight important points for users to remember.
-
-
    -
  • Important: Always log out using your profile. Do not simply close the app.
  • -
  • Make sure you “Save all” before leaving workflows to save your data.
  • -
  • We recommend creating a backup of your dashboard to avoid risk of data loss.
  • -
  • Note: You can always find this tour in the “About” tab.
  • -
-
-
-
    -
  • Failure to save your changes will result in permanent loss of your data.
  • -
-
+
+
    +
  • Important: Always log out using your profile. Do not simply close the app.
  • +
  • Make sure you “Save all” before leaving workflows to save your data.
  • +
  • We recommend creating a backup of your dashboard to avoid risk of data loss.
  • +
  • Note: You can always find this tour in the “About” tab.
  • +
+
+
+
    +
  • Failure to save your changes will result in permanent loss of your data.
  • +
+
Provide a clear way for users to dismiss or postpone onboarding without confusion.
-
-
    -
  • Close
  • -
  • Skip
  • -
  • Skip and don’t show again
  • -
  • Remind me at next login
  • -
-
-
-
    -
  • Confirm
  • -
  • Proceed
  • -
  • Continue
  • -
  • Maybe later
  • -
-
+
+
    +
  • Close
  • +
  • Skip
  • +
  • Skip and don’t show again
  • +
  • Remind me at next login
  • +
+
+
+
    +
  • Confirm
  • +
  • Proceed
  • +
  • Continue
  • +
  • Maybe later
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/menu-functions-and-ui-labels/search-and-filter.md b/docs/guidelines/language/menu-functions-and-ui-labels/search-and-filter.md index ee1a5bc72..ee20e11f3 100644 --- a/docs/guidelines/language/menu-functions-and-ui-labels/search-and-filter.md +++ b/docs/guidelines/language/menu-functions-and-ui-labels/search-and-filter.md @@ -15,36 +15,36 @@ description: 'Industrial applications handle large datasets where users need to Use “Search” as the primary action label and avoid vague, long or technical alternatives.
-
-
    -
  • Search
  • -
  • Search equipment
  • -
-
-
-
    -
  • Go
  • -
  • Find
  • -
-
+
+
    +
  • Search
  • +
  • Search equipment
  • +
+
+
+
    +
  • Go
  • +
  • Find
  • +
+
Use clear, specific placeholder text that indicates what users can search for in the current context.
-
-
    -
  • Search by equipment ID, serial number or location…
  • -
  • Search parts by name, part number or category…
  • -
  • Search…
  • -
-
-
-
    -
  • Enter search
  • -
  • Type here
  • -
-
+
+
    +
  • Search by equipment ID, serial number or location…
  • +
  • Search parts by name, part number or category…
  • +
  • Search…
  • +
+
+
+
    +
  • Enter search
  • +
  • Type here
  • +
+
## Advanced search and filter @@ -52,96 +52,96 @@ Use clear, specific placeholder text that indicates what users can search for in Use “Advanced search” to provide access to additional search options.
-
-
    -
  • Advanced search
  • -
-
-
-
    -
  • Additional
  • -
  • Detailed search
  • -
-
+
+
    +
  • Advanced search
  • +
+
+
+
    +
  • Additional
  • +
  • Detailed search
  • +
+
Use “Filter by” followed by the specific attribute to make filtering options immediately clear.
-
-
    -
  • Filter by machine type
  • -
  • Filter by date range
  • -
-
-
-
    -
  • Filters
  • -
-
+
+
    +
  • Filter by machine type
  • +
  • Filter by date range
  • +
+
+
+
    +
  • Filters
  • +
+
Use prominent, one-click filter options for the most common filtering needs when possible.
-
-
    -
  • Quick filters: Active | Needs maintenance | Critical
  • -
  • Show: All | Active only | Inactive only
  • -
-
+
+
    +
  • Quick filters: Active | Needs maintenance | Critical
  • +
  • Show: All | Active only | Inactive only
  • +
+
Use “Apply filters” as the primary action label.
-
-
    -
  • Apply filters
  • -
-
-
-
    -
  • Filter
  • -
  • Set filters
  • -
  • Find
  • -
-
+
+
    +
  • Apply filters
  • +
+
+
+
    +
  • Filter
  • +
  • Set filters
  • +
  • Find
  • +
+
Use “Clear" or “Clear filters” to remove all active filters at once.
-
-
    -
  • Clear
  • -
  • Clear filters
  • -
-
-
-
    -
  • Remove all
  • -
  • Reset
  • -
  • Clear
  • -
-
+
+
    +
  • Clear
  • +
  • Clear filters
  • +
+
+
+
    +
  • Remove all
  • +
  • Reset
  • +
  • Clear
  • +
+
Indicate whether filters will persist across sessions.
-
-
    -
  • Filters remain active until you clear them.
  • -
  • Filters reset when you log out.
  • -
  • Filters will be saved for your next session.
  • -
-
-
-
    -
  • Filters may persist.
  • -
-
+
+
    +
  • Filters remain active until you clear them.
  • +
  • Filters reset when you log out.
  • +
  • Filters will be saved for your next session.
  • +
+
+
+
    +
  • Filters may persist.
  • +
+
## Displaying results @@ -149,72 +149,72 @@ Indicate whether filters will persist across sessions. Use clear wording when there are no results found.
-
-
    -
  • No results.
  • -
  • No results found for “valve”.
  • -
  • No matching equipment found.
  • -
  • No results. Refine search.
  • -
  • No results. Try adjusting your filters and search terms.
  • -
-
-
-
    -
  • Failed
  • -
  • Nothing found.
  • -
  • Empty.
  • -
-
+
+
    +
  • No results.
  • +
  • No results found for “valve”.
  • +
  • No matching equipment found.
  • +
  • No results. Refine search.
  • +
  • No results. Try adjusting your filters and search terms.
  • +
+
+
+
    +
  • Failed
  • +
  • Nothing found.
  • +
  • Empty.
  • +
+
Use specific numbers and clear language to show how many results were found.
-
-
    -
  • Showing 47 of 230 machines
  • -
  • 12 results found for “pressure valve”
  • -
-
-
-
    -
  • 47 items
  • -
-
+
+
    +
  • Showing 47 of 230 machines
  • +
  • 12 results found for “pressure valve”
  • +
+
+
+
    +
  • 47 items
  • +
+
Include both total page count and current position when using pagination.
-
-
    -
  • Page 2 of 15
  • -
  • Showing 1-50 of 730 results
  • -
-
-
-
    -
  • Next
  • -
  • Previous
  • -
-
+
+
    +
  • Page 2 of 15
  • +
  • Showing 1-50 of 730 results
  • +
+
+
+
    +
  • Next
  • +
  • Previous
  • +
+
Use “Display X results per page” or “Results per page” to allow users to adjust display quantity.
-
-
    -
  • Results per page: 50
  • -
  • Display 50 results per page
  • -
-
-
-
    -
  • Display: 50
  • -
  • 50
  • -
-
+
+
    +
  • Results per page: 50
  • +
  • Display 50 results per page
  • +
+
+
+
    +
  • Display: 50
  • +
  • 50
  • +
+
## Refining results @@ -222,51 +222,51 @@ Use “Display X results per page” or “Results per page” to allow users to Use “Narrow search” or “Adjust filters” when users can narrow existing search results.
-
-
    -
  • Narrow search
  • -
  • Adjust filters
  • -
-
-
-
    -
  • Refine results
  • -
  • Modify results
  • -
-
+
+
    +
  • Narrow search
  • +
  • Adjust filters
  • +
+
+
+
    +
  • Refine results
  • +
  • Modify results
  • +
+
Use “Expand search” when users can broaden their search.
-
-
    -
  • Expand search to all locations
  • -
  • Show more results
  • -
-
-
-
    -
  • Broaden results
  • -
-
+
+
    +
  • Expand search to all locations
  • +
  • Show more results
  • +
+
+
+
    +
  • Broaden results
  • +
+
Use “Sort by” followed by the sorting criterion to make ordering options clear.
-
-
    -
  • Sort by: Date (newest to oldest)
  • -
  • Sort by: Equipment name (a-z)
  • -
  • Sort by: Priority (high to low)
  • -
-
-
-
    -
  • Order by
  • -
-
+
+
    +
  • Sort by: Date (newest to oldest)
  • +
  • Sort by: Equipment name (a-z)
  • +
  • Sort by: Priority (high to low)
  • +
+
+
+
    +
  • Order by
  • +
+
## Search suggestions and unsuccessful searches @@ -274,55 +274,55 @@ Use “Sort by” followed by the sorting criterion to make ordering options cle Use actionable language when no results are found to guide users forward.
-
-
    -
  • Nothing found. Refine search.
  • -
  • No alarms found in selected period. Expand period.
  • -
  • No equipment found. Adjust your filters or search terms.
  • -
  • No alarms found in selected time range. Try expanding the date range.
  • -
-
-
-
    -
  • 0 results
  • -
  • Nothing found
  • -
  • Your search returned no results
  • -
-
+
+
    +
  • Nothing found. Refine search.
  • +
  • No alarms found in selected period. Expand period.
  • +
  • No equipment found. Adjust your filters or search terms.
  • +
  • No alarms found in selected time range. Try expanding the date range.
  • +
+
+
+
    +
  • 0 results
  • +
  • Nothing found
  • +
  • Your search returned no results
  • +
+
Use “Did you mean” or “Suggestions” to help users correct spelling errors or find related terms.
-
-
    -
  • Did you mean “turbine”?
  • -
  • No results for “pymp”. Did you mean “pump”?
  • -
  • Suggestions: motor, engine, generator
  • -
-
-
-
    -
  • Try: turbine
  • -
-
+
+
    +
  • Did you mean “turbine”?
  • +
  • No results for “pymp”. Did you mean “pump”?
  • +
  • Suggestions: motor, engine, generator
  • +
+
+
+
    +
  • Try: turbine
  • +
+
Use specific, actionable error messages when search operations fail.
-
-
    -
  • Unable to complete search. Check your connection and try again.
  • -
  • Search timeout. Narrow your search criteria.
  • -
-
-
-
    -
  • Search failed.
  • -
  • Something went wrong.
  • -
-
+
+
    +
  • Unable to complete search. Check your connection and try again.
  • +
  • Search timeout. Narrow your search criteria.
  • +
+
+
+
    +
  • Search failed.
  • +
  • Something went wrong.
  • +
+
## Search history @@ -330,35 +330,35 @@ Use specific, actionable error messages when search operations fail. Use “Recent searches” or “Search history” to display previously entered search terms.
-
-
    -
  • Recent searches
  • -
-
-
-
    -
  • Previous
  • -
  • History
  • -
-
+
+
    +
  • Recent searches
  • +
+
+
+
    +
  • Previous
  • +
  • History
  • +
+
Use “Save search” or “Save search criteria” to allow users to store frequently used searches.
-
-
    -
  • Save search.
  • -
  • Save search criteria as “Active pumps in Building A”
  • -
-
-
-
    -
  • Save
  • -
  • Store
  • -
  • Remember search
  • -
-
+
+
    +
  • Save search.
  • +
  • Save search criteria as “Active pumps in Building A”
  • +
+
+
+
    +
  • Save
  • +
  • Store
  • +
  • Remember search
  • +
+
## Conditional filtering for complex searches @@ -366,48 +366,48 @@ Use “Save search” or “Save search criteria” to allow users to store freq Use clear labels for logical operators (AND, OR, NOT) that explain how conditions combine.
-
-
    -
  • Status: Active AND Location: Munich
  • -
  • Type: Pump OR Type: Compressor
  • -
-
-
-
    -
  • Active & Munich
  • -
-
+
+
    +
  • Status: Active AND Location: Munich
  • +
  • Type: Pump OR Type: Compressor
  • +
+
+
+
    +
  • Active & Munich
  • +
+
Provide templates for common conditional searches.
-
-
    -
  • Template: Active equipment needing maintenance
    +
    +
      +
    • Template: Active equipment needing maintenance
      Status: Active AND Maintenance: Due
    • -
    • Template: High priority work orders for team A
      +
    • Template: High priority work orders for team A
      Priority: High AND Assigned team: Team A
    • -
    • Template: Temperature readings
      +
    • Template: Temperature readings
      Sensor: Temperature AND Value: > 100
    • -
    -
    +
+
Tell users when conditions create impossible or contradictory queries.
-
-
    -
  • Status cannot be both Active AND Inactive. Refine filter.
  • -
  • This combination will return no results. Refine filter.
  • -
-
-
-
    -
  • Invalid search
  • -
-
+
+
    +
  • Status cannot be both Active AND Inactive. Refine filter.
  • +
  • This combination will return no results. Refine filter.
  • +
+
+
+
    +
  • Invalid search
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/menu-functions-and-ui-labels/ui-terminology.md b/docs/guidelines/language/menu-functions-and-ui-labels/ui-terminology.md index b13494eb9..2ae21dba2 100644 --- a/docs/guidelines/language/menu-functions-and-ui-labels/ui-terminology.md +++ b/docs/guidelines/language/menu-functions-and-ui-labels/ui-terminology.md @@ -15,35 +15,35 @@ description: 'Using well-defined terms help users understand actions, navigate s Always consider the difference between user actions within a desktop environment (based on mouse or keyboard usage) and mobile devices based on touch gestures.
-
-
    -
  • click (desktop)
  • -
  • tap (mobile device)
  • -
  • select (when not sure if desktop or mobile)
  • -
-
+
+
    +
  • click (desktop)
  • +
  • tap (mobile device)
  • +
  • select (when not sure if desktop or mobile)
  • +
+
Use clear and precise terms that leave no room for misunderstandings.
-
-
    -
  • delete (if you want to erase data, e.g. a file)
  • -
  • remove (if you want to take data away, e.g. permissions)
  • -
-
+
+
    +
  • delete (if you want to erase data, e.g. a file)
  • +
  • remove (if you want to take data away, e.g. permissions)
  • +
+
Use “select” for multi-platform applications where the input method varies (tap, click, etc.).
-
-
    -
  • Select the checkbox to enable notifications.
  • -
  • Select and hold the Shift key to select multiple items.
  • -
-
+
+
    +
  • Select the checkbox to enable notifications.
  • +
  • Select and hold the Shift key to select multiple items.
  • +
+
## Mouse terminology @@ -59,16 +59,16 @@ This section provides clear definitions for the most frequently used mouse-relat - middle-click (scroll wheel)
-
-
    -
  • click
  • -
-
-
-
    -
  • press
  • -
-
+
+
    +
  • click
  • +
+
+
+
    +
  • press
  • +
+
### Movement-based actions @@ -79,16 +79,16 @@ This section provides clear definitions for the most frequently used mouse-relat - scroll
-
-
    -
  • hover
  • -
-
-
-
    -
  • mouse over
  • -
-
+
+
    +
  • hover
  • +
+
+
+
    +
  • mouse over
  • +
+
## Touchscreen terminology @@ -126,40 +126,40 @@ As touchscreen interfaces rely on direct finger interaction, this section covers Use "press" when referring to the physical action of pressing a key.
-
-
    -
  • Press Enter to confirm
  • -
  • Press Spacebar to play or pause
  • -
-
-
-
    -
  • Hit Enter
  • -
  • Strike Enter
  • -
  • Depress Enter
  • -
-
+
+
    +
  • Press Enter to confirm
  • +
  • Press Spacebar to play or pause
  • +
+
+
+
    +
  • Hit Enter
  • +
  • Strike Enter
  • +
  • Depress Enter
  • +
+
Capitalize special keys and directions.
-
-
    -
  • Enter / Tab / Shift / Ctrl / Alt
  • -
  • Up Arrow / Down Arrow / Left Arrow / Right Arrow
  • -
-
+
+
    +
  • Enter / Tab / Shift / Ctrl / Alt
  • +
  • Up Arrow / Down Arrow / Left Arrow / Right Arrow
  • +
+
Use "type" when asking users to enter text.
-
-
    -
  • Type admin in the username field.
  • -
-
+
+
    +
  • Type admin in the username field.
  • +
+
## UI element terminology @@ -167,38 +167,38 @@ Use "type" when asking users to enter text. Use standardized and consistent terminology to describe UI components and input elements.
-
-
    -
  • checkbox
  • -
-
-
-
    -
  • box
  • -
  • option box
  • -
  • selection box
  • -
  • tick box
  • -
-
+
+
    +
  • checkbox
  • +
+
+
+
    +
  • box
  • +
  • option box
  • +
  • selection box
  • +
  • tick box
  • +
+
Avoid mixing terms within the same products and portfolios.
-
-
    -
  • To enable automatic updates, select the checkbox to activate Auto update.
  • -
  • Click this image
  • -
  • The link opens in a new window.
  • -
-
-
-
    -
  • To enable automatic updates, select the box to activate Auto update.
  • -
  • Click this picture
  • -
  • The link opens in a new browser.
  • -
-
+
+
    +
  • To enable automatic updates, select the checkbox to activate Auto update.
  • +
  • Click this image
  • +
  • The link opens in a new window.
  • +
+
+
+
    +
  • To enable automatic updates, select the box to activate Auto update.
  • +
  • Click this picture
  • +
  • The link opens in a new browser.
  • +
+
## UI interaction terminology diff --git a/docs/guidelines/language/menu-functions-and-ui-labels/user-management.md b/docs/guidelines/language/menu-functions-and-ui-labels/user-management.md index 92568a536..9baa8e385 100644 --- a/docs/guidelines/language/menu-functions-and-ui-labels/user-management.md +++ b/docs/guidelines/language/menu-functions-and-ui-labels/user-management.md @@ -29,182 +29,182 @@ Use “permissions” instead of “right” and “privilege” as these are be Write user roles in short, clear and descriptive terms and give users access to role descriptions.
-
-
    -
  • Line operator
  • -
-
-
-
    -
  • Basic user
  • -
-
+
+
    +
  • Line operator
  • +
+
+
+
    +
  • Basic user
  • +
+
Use role names consistently within workflows and across the whole product.
-
-
    -
  • Device administrator / Device administrator / Device administrator
  • -
-
-
-
    -
  • Device Admin / Asset Admins / Administrator / Device Manager / Officer for devices
  • -
-
+
+
    +
  • Device administrator / Device administrator / Device administrator
  • +
+
+
+
    +
  • Device Admin / Asset Admins / Administrator / Device Manager / Officer for devices
  • +
+
Focus on personas instead of generic and unclear titles when creating roles for your product.
-
-
    -
  • Line operator
  • -
  • Plant operator
  • -
  • Service engineer
  • -
-
-
-
    -
  • Technician
  • -
  • Team lead
  • -
  • Expert user
  • -
-
+
+
    +
  • Line operator
  • +
  • Plant operator
  • +
  • Service engineer
  • +
+
+
+
    +
  • Technician
  • +
  • Team lead
  • +
  • Expert user
  • +
+
Avoid mixing location with function when creating roles for your product.
-
-
    -
  • User
  • -
-
-
-
    -
  • External user
  • -
  • Local user
  • -
  • International user
  • -
-
+
+
    +
  • User
  • +
+
+
+
    +
  • External user
  • +
  • Local user
  • +
  • International user
  • +
+
Avoid creating vague user roles without a clear persona or scope that can be misunderstood.
-
-
    -
  • Production report creator
  • -
  • Quality report reviewer
  • -
  • Batch approver (review and release)
  • -
-
-
-
    -
  • Read-only user
  • -
  • Write-only user
  • -
-
+
+
    +
  • Production report creator
  • +
  • Quality report reviewer
  • +
  • Batch approver (review and release)
  • +
+
+
+
    +
  • Read-only user
  • +
  • Write-only user
  • +
+
Use “read only” as a specific role permission, not a unique role name.
-
-
    -
  • External consultant (read-only)
  • -
-
-
-
    -
  • Read-only user
  • -
-
+
+
    +
  • External consultant (read-only)
  • +
+
+
+
    +
  • Read-only user
  • +
+
Avoid easily misunderstood permissions such as “view”, be specific about what users can do.
-
-
    -
  • record / log / configure / override
  • -
  • adjust / review / modify / correct
  • -
  • monitor / review / inspect
  • -
  • track / display / observe
  • -
-
-
-
    -
  • write
  • -
  • edit
  • -
  • read-only
  • -
  • view
  • -
-
+
+
    +
  • record / log / configure / override
  • +
  • adjust / review / modify / correct
  • +
  • monitor / review / inspect
  • +
  • track / display / observe
  • +
+
+
+
    +
  • write
  • +
  • edit
  • +
  • read-only
  • +
  • view
  • +
+
Use sentence case for all user roles.
-
-
    -
  • Service engineer
  • -
-
-
-
    -
  • Service Engineer
  • -
-
+
+
    +
  • Service engineer
  • +
+
+
+
    +
  • Service Engineer
  • +
+
Avoid jargon or internal terms, instead use language everyone understands.
-
-
    -
  • Plant manager
  • -
-
-
-
    -
  • Top tier
  • -
-
+
+
    +
  • Plant manager
  • +
+
+
+
    +
  • Top tier
  • +
+
Keep role names short, preferably not more than three words.
-
-
    -
  • Safety incident investigator
  • -
  • Shift handover reporter
  • -
-
-
-
    -
  • Gateway and portal maintenance manager for Plant 3 and 5 (read-only permissions)
  • -
-
+
+
    +
  • Safety incident investigator
  • +
  • Shift handover reporter
  • +
+
+
+
    +
  • Gateway and portal maintenance manager for Plant 3 and 5 (read-only permissions)
  • +
+
Avoid using functions or features as roles or permissions, instead focus on persona and tasks.
-
-
    -
  • Shift supervisor – Production floor
  • -
-
-
-
    -
  • Dashboard user
  • -
-
+
+
    +
  • Shift supervisor – Production floor
  • +
+
+
+
    +
  • Dashboard user
  • +
+
## Identity and access @@ -244,122 +244,122 @@ Many user management words often appear together in familiar, expected combinati Avoid using “deny” and “disapprove” with “user” as opposites to “approve”.
-
-
    -
  • Reject access request
  • -
-
-
-
    -
  • Admin denied user
  • -
  • Disapprove user
  • -
-
+
+
    +
  • Reject access request
  • +
+
+
+
    +
  • Admin denied user
  • +
  • Disapprove user
  • +
+
Avoid using “deauthenticate” as the opposite of authenticate.
-
-
    -
  • Log out
  • -
  • End session
  • -
-
-
-
    -
  • Deauthenticate
  • -
  • Click to deauthenticate
  • -
-
+
+
    +
  • Log out
  • +
  • End session
  • +
+
+
+
    +
  • Deauthenticate
  • +
  • Click to deauthenticate
  • +
+
Avoid using “grant” with “permissions” in casual UI contexts as this has become outdated.
-
-
    -
  • Assign permissions to user
  • -
  • Give user access to reports
  • -
-
-
-
    -
  • Grant permissions to user
  • -
-
+
+
    +
  • Assign permissions to user
  • +
  • Give user access to reports
  • +
+
+
+
    +
  • Grant permissions to user
  • +
+
Avoid using “read” for viewing UI elements like profiles, permissions and roles.
-
-
    -
  • View user profile
  • -
  • View role details
  • -
-
-
-
    -
  • Read user profile
  • -
  • Read permissions
  • -
-
+
+
    +
  • View user profile
  • +
  • View role details
  • +
+
+
+
    +
  • Read user profile
  • +
  • Read permissions
  • +
+
Avoid using “write” for editing or modifying UI elements.
-
-
    -
  • Edit permissions
  • -
  • Modify settings
  • -
-
-
-
    -
  • Write permissions
  • -
  • Write role details
  • -
  • Write to database
  • -
-
+
+
    +
  • Edit permissions
  • +
  • Modify settings
  • +
+
+
+
    +
  • Write permissions
  • +
  • Write role details
  • +
  • Write to database
  • +
+
Avoid using “delete” for simple removals; use “delete” only for permanent erasure.
-
-
    -
  • Unassign
  • -
  • Remove user from team
  • -
  • Remove role from user
  • -
  • Delete user account (permanent)
  • -
  • Delete file (permanent)
  • -
-
-
-
    -
  • Delete user from team
  • -
  • Delete role from user
  • -
-
+
+
    +
  • Unassign
  • +
  • Remove user from team
  • +
  • Remove role from user
  • +
  • Delete user account (permanent)
  • +
  • Delete file (permanent)
  • +
+
+
+
    +
  • Delete user from team
  • +
  • Delete role from user
  • +
+
Avoid using “revoke” with people and users as direct objects.
-
-
    -
  • Revoke all permissions
  • -
  • Revoke API key
  • -
-
-
-
    -
  • Revoke user
  • -
  • Revoke the employee
  • -
-
+
+
    +
  • Revoke all permissions
  • +
  • Revoke API key
  • +
+
+
+
    +
  • Revoke user
  • +
  • Revoke the employee
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/menu-functions-and-ui-labels/whats-new-announcements.md b/docs/guidelines/language/menu-functions-and-ui-labels/whats-new-announcements.md index d8ab0ea81..c4d9044b6 100644 --- a/docs/guidelines/language/menu-functions-and-ui-labels/whats-new-announcements.md +++ b/docs/guidelines/language/menu-functions-and-ui-labels/whats-new-announcements.md @@ -23,110 +23,110 @@ We follow this three-step approach when creating our updates. They explain what Use the wording “What’s new…” for the heading without a question mark (?) or period.
-
-
    -
  • What’s new in October
  • -
  • What’s new in Version 3.2
  • -
  • What’s new this month
  • -
-
-
-
    -
  • What’s new this month?
  • -
-
+
+
    +
  • What’s new in October
  • +
  • What’s new in Version 3.2
  • +
  • What’s new this month
  • +
+
+
+
    +
  • What’s new this month?
  • +
+
Use a contraction in the heading, i.e. “What’s” not “What is”.
-
-
    -
  • What’s new in October
  • -
-
-
-
    -
  • What is new in October
  • -
-
+
+
    +
  • What’s new in October
  • +
+
+
+
    +
  • What is new in October
  • +
+
Use paragraphs or bullet points to present or highlight one point at a time instead of italics or bold.
-
-
    -
  • What’s new in the dashboard
    +
    +
      +
    • What’s new in the dashboard
        • Edit with new filter options.
        • Set up zones to itemize your assets.
    • -
    -
    -
    -
      -
    • What’s new in the dashboard. Now includes customizable widgets, allowing you to tailor your view to your specific needs, new ways to edit your dashboards by moving or adjusting filters to help you with your day, and zones for dashboards such as by plant or groups to itemize your assets more easily.
    • -
    -
    +
+
+
+
    +
  • What’s new in the dashboard. Now includes customizable widgets, allowing you to tailor your view to your specific needs, new ways to edit your dashboards by moving or adjusting filters to help you with your day, and zones for dashboards such as by plant or groups to itemize your assets more easily.
  • +
+
Use a personal and engaging tone without being too informal (avoid emojis or slang).
-
-
    -
  • With this new version we bring you new features and improvements to enhance your experience.
  • -
-
-
-
    -
  • Yo fam, we’ve been grinding to drop some lit upgrades to level up your vibe! 🚀✨
  • -
-
+
+
    +
  • With this new version we bring you new features and improvements to enhance your experience.
  • +
+
+
+
    +
  • Yo fam, we’ve been grinding to drop some lit upgrades to level up your vibe! 🚀✨
  • +
+
Provide a clear way for users to dismiss announcements without confusion.
-
-
    -
  • Close
  • -
  • Skip
  • -
  • Skip and don’t show again
  • -
-
-
-
    -
  • Confirm
  • -
  • Proceed
  • -
  • Continue
  • -
-
+
+
    +
  • Close
  • +
  • Skip
  • +
  • Skip and don’t show again
  • +
+
+
+
    +
  • Confirm
  • +
  • Proceed
  • +
  • Continue
  • +
+
Provide a clear way for users to postpone announcements.
-
-
    -
  • Not now
  • -
  • Remind me at next login
  • -
-
-
-
    -
  • Maybe later
  • -
-
+
+
    +
  • Not now
  • +
  • Remind me at next login
  • +
+
+
+
    +
  • Maybe later
  • +
+
Avoid technical, negative or wordy dismiss actions.
-
-
    -
  • Terminate dialog
  • -
  • No, I don’t want to improve my workflow
  • -
  • I confirm I understand this announcement and wish to close this notification
  • -
-
+
+
    +
  • Terminate dialog
  • +
  • No, I don’t want to improve my workflow
  • +
  • I confirm I understand this announcement and wish to close this notification
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/messaging/empty-state-messages.mdx b/docs/guidelines/language/messaging/empty-state-messages.mdx index 251f2b043..0c9df9705 100644 --- a/docs/guidelines/language/messaging/empty-state-messages.mdx +++ b/docs/guidelines/language/messaging/empty-state-messages.mdx @@ -53,33 +53,33 @@ Use clear action verbs to show users how to fill the empty state. Use neutral framing of the empty state and avoid making it seem like a user failure.
-
-
    -
  • No users added
  • -
-
+
+
    +
  • No users added
  • +
+
-
-
    -
  • You haven’t added any of your users
  • -
-
+
+
    +
  • You haven’t added any of your users
  • +
+
Avoid “yet” or other expectation-related terms in headings.
-
-
    -
  • Heading: No users added
  • -
-
+
+
    +
  • Heading: No users added
  • +
+
-
-
    -
  • Heading: No users added yet
  • -
-
+
+
    +
  • Heading: No users added yet
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/messaging/error-messages.mdx b/docs/guidelines/language/messaging/error-messages.mdx index d8650119d..4a428e156 100644 --- a/docs/guidelines/language/messaging/error-messages.mdx +++ b/docs/guidelines/language/messaging/error-messages.mdx @@ -28,205 +28,205 @@ Although not every error message in a product requires all three steps, aim for Use the template when the error stops users moving forward.
-
-
    -
  • Heading: No data received
    +
    +
      +
    • Heading: No data received
      Description: Unable to receive data as sensor is inactive.
      Instructions: Check sensor / Open sensor management
    • -
    -
    +
+
Avoid generic error messages or codes, instead provide specific data, value and solutions.
-
-
    -
  • Failed to export data due to a connection error.
  • -
-
-
-
    -
  • Something happened.
  • -
  • An error occurred.
  • -
  • Error 172.00046ERR
  • -
-
+
+
    +
  • Failed to export data due to a connection error.
  • +
+
+
+
    +
  • Something happened.
  • +
  • An error occurred.
  • +
  • Error 172.00046ERR
  • +
+
Give clear reasons for input validation errors to ease user frustration.
-
-
    -
  • Value out of range. Enter a number between 1 and 100.
  • -
  • Number between 1 and 100 required.
  • -
-
-
-
    -
  • Invalid value.
  • -
-
+
+
    +
  • Value out of range. Enter a number between 1 and 100.
  • +
  • Number between 1 and 100 required.
  • +
+
+
+
    +
  • Invalid value.
  • +
+
Avoid repeating your message in both the title and description.
-
-
    -
  • Bad request: Sorry, we could not process the request. Please check and try again.
  • -
-
-
-
    -
  • Bad request. Sorry, bad request.
  • -
-
+
+
    +
  • Bad request: Sorry, we could not process the request. Please check and try again.
  • +
+
+
+
    +
  • Bad request. Sorry, bad request.
  • +
+
Avoid blaming the user with “you” and “your” and use passive voice as an exception.
-
-
    -
  • Device could not be deleted.
  • -
  • Failed to delete device.
  • -
-
-
-
    -
  • You have failed to delete the device.
  • -
-
+
+
    +
  • Device could not be deleted.
  • +
  • Failed to delete device.
  • +
+
+
+
    +
  • You have failed to delete the device.
  • +
+
Provide specific and clear solutions to avoid making assumptions about user knowledge.
-
-
    -
  • Unsupported file type. Upload supported file types: .pdf and .docx.
  • -
-
- -
-
    -
  • Unsupported file type. Upload the supported and correct file type.
  • -
-
+
+
    +
  • Unsupported file type. Upload supported file types: .pdf and .docx.
  • +
+
+ +
+
    +
  • Unsupported file type. Upload the supported and correct file type.
  • +
+
If the error is our responsibility and fault, use authentic and transparent apologies.
-
-
    -
  • We’ve moved this page. Please check the changelog for the new location.
  • -
-
- -
-
    -
  • Sorry you entered the wrong address.
  • -
-
+
+
    +
  • We’ve moved this page. Please check the changelog for the new location.
  • +
+
+ +
+
    +
  • Sorry you entered the wrong address.
  • +
+
Use “please” only for extra or unexpected user actions that correct system-caused disruptions.
-
-
    -
  • Heading: Page Not Found
    +
    +
      +
    • Heading: Page Not Found
      Description: We could not find what you were looking for.
      Instruction: Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
    • -
    -
    +
+
Show urgency with wording, e.g. “immediately” if there are consequences from ignoring the error.
-
-
    -
  • Update your software version immediately to avoid losing data.
  • -
-
+
+
    +
  • Update your software version immediately to avoid losing data.
  • +
+
Use positive framing and avoid negative and alarming words like “wrong” and “catastrophic”.
-
-
    -
  • Value out of range. Enter a number between 1 and 100.
  • -
-
- -
-
    -
  • Wrong number.
  • -
-
+
+
    +
  • Value out of range. Enter a number between 1 and 100.
  • +
+
+ +
+
    +
  • Wrong number.
  • +
+
Use softening words, e.g. unfortunately and avoid negative contractions (“do not” instead of “don’t”).
-
-
    -
  • Unfortunately, you cannot open this page.
  • -
-
-
-
    -
  • You don't have access.
  • -
  • You can't open this page.
  • -
-
+
+
    +
  • Unfortunately, you cannot open this page.
  • +
+
+
+
    +
  • You don't have access.
  • +
  • You can't open this page.
  • +
+
Be honest and transparent when you cannot explain the error or how to move the user forward.
-
-
    -
  • Something went wrong and we couldn't complete your request. Try again later.
  • -
-
- -
-
    -
  • Operation stopped for unknown reason.
  • -
-
+
+
    +
  • Something went wrong and we couldn't complete your request. Try again later.
  • +
+
+ +
+
    +
  • Operation stopped for unknown reason.
  • +
+
Avoid generic wording telling users to contact their admin or support as this is unhelpful.
-
-
    -
  • Open the chat window and paste the error into the input field for support.
  • -
  • Send error log to administrator.
  • -
-
-
-
    -
  • Contact admin to solve this issue.
  • -
-
+
+
    +
  • Open the chat window and paste the error into the input field for support.
  • +
  • Send error log to administrator.
  • +
+
+
+
    +
  • Contact admin to solve this issue.
  • +
+
Avoid overpromising solutions to errors unless the team is working on the problem.
-
-
    -
  • Our team is working overtime to fix this for you and it will be fixed by morning.
  • -
-
+
+
    +
  • Our team is working overtime to fix this for you and it will be fixed by morning.
  • +
+
diff --git a/docs/guidelines/language/messaging/error-pages.md b/docs/guidelines/language/messaging/error-pages.md index fae955804..e446d2d3d 100644 --- a/docs/guidelines/language/messaging/error-pages.md +++ b/docs/guidelines/language/messaging/error-pages.md @@ -28,61 +28,61 @@ We follow these templates when creating our main error pages. Although some of t Use the official code and definition so users can search for code terms and information themselves.
-
-
    -
  • 401 Unauthorized
  • -
-
-
-
    -
  • 401 Unlawful
  • -
-
+
+
    +
  • 401 Unauthorized
  • +
+
+
+
    +
  • 401 Unlawful
  • +
+
Use language suitable for all target users, including non-native English speakers.
-
-
    -
  • This page is not available right now. Try again later.
  • -
-
-
-
    -
  • An unforeseen server-side condition prevented the fruitful processing of your request. This indicates an issue within our infrastructure, not a client-side input error.
  • -
-
+
+
    +
  • This page is not available right now. Try again later.
  • +
+
+
+
    +
  • An unforeseen server-side condition prevented the fruitful processing of your request. This indicates an issue within our infrastructure, not a client-side input error.
  • +
+
Avoid jokes, memes, emojis or casual wording in error pages for industrial applications.
-
-
    -
  • 401 Unauthorized
  • -
-
-
-
    -
  • Hold on! VIP access only! 🎩✨
  • -
-
+
+
    +
  • 401 Unauthorized
  • +
+
+
+
    +
  • Hold on! VIP access only! 🎩✨
  • +
+
Use sentence casing within the description with minimal punctuation and formatting.
-
-
    -
  • There is an error on this page. Try again later.
  • -
-
-
-
    -
  • There is an ERROR on this **page**! Try again later.
  • -
-
+
+
    +
  • There is an error on this page. Try again later.
  • +
+
+
+
    +
  • There is an ERROR on this **page**! Try again later.
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/messaging/infotips.mdx b/docs/guidelines/language/messaging/infotips.mdx index c5083947c..c9b73df96 100644 --- a/docs/guidelines/language/messaging/infotips.mdx +++ b/docs/guidelines/language/messaging/infotips.mdx @@ -16,98 +16,98 @@ description: 'Infotips are short, context-sensitive messages that appear near us Use sentence case and end with a period (similar to tooltips).
-
-
    -
  • View the current status of the production line.
  • -
-
-
-
    -
  • VIEW CURRENT STATUS OF PRODUCTION LINE
  • -
-
+
+
    +
  • View the current status of the production line.
  • +
+
+
+
    +
  • VIEW CURRENT STATUS OF PRODUCTION LINE
  • +
+
Use infotips to support users with guidance and contextual information.
-
-
    -
  • Maximum allowable hydraulic pressure (bar).
  • -
  • Current motor load in percentage.
  • -
  • Enables automatic system recalibration.
  • -
  • Unique identifier for the production batch.
  • -
-
+
+
    +
  • Maximum allowable hydraulic pressure (bar).
  • +
  • Current motor load in percentage.
  • +
  • Enables automatic system recalibration.
  • +
  • Unique identifier for the production batch.
  • +
+
Use infotips to help users understand complex terminology.
-
-
    -
  • SCADA System
    +
    +
      +
    • SCADA System
      Supervisory Control and Data Acquisition: A system that monitors and controls industrial processes locally or at remote locations.
    • -
    • PLC cycle time
      +
    • PLC cycle time
      This indicates the time (in milliseconds) it takes for the Programmable Logic Controller to execute one full scan of its program logic.
    • -
    -
    +
+
Use infotips to help users understand complex features and workflows.
-
-
    -
  • Set thresholds
    +
    +
      +
    • Set thresholds
      Set project thresholds here. Adjust the value to trigger alerts when the temperature exceeds a specified limit (e.g. 80°C).
    • -
    • PID controller tuning
      +
    • PID controller tuning
      Adjust these parameters (Proportional, Integral, Derivative) to optimize the system's response to errors and achieve stable control.
    • -
    • Schedule maintenance
      +
    • Schedule maintenance
      This workflow guides you through planning and assigning preventive maintenance tasks. First, select the asset, then define the task type, and finally set the recurrence schedule.
    • -
    -
    +
+

Use paragraphs to split complex information and use bullet points or lists for clarity.
-
-
    -
  • Power meter monitoring
    +
    +
      +
    • Power meter monitoring
      Area: Production floor
      Present consumption: 120 kW
      Peak: 150 kW
      Button: Open meter list
    • -
    -
    +
+
Use imperative verbs (commands) for instructions and guidance.
-
-
    -
  • Assign a unique identifier to each physical asset for tracking, maintenance scheduling, and inventory management.
  • -
  • Define and manage sequences of operations and ingredient quantities for automated production processes.
  • -
-
+
+
    +
  • Assign a unique identifier to each physical asset for tracking, maintenance scheduling, and inventory management.
  • +
  • Define and manage sequences of operations and ingredient quantities for automated production processes.
  • +
+
Avoid personal pronouns (you, we, our, etc.).
-
-
    -
  • Select a device from the network to begin configuration.
  • -
-
- -
-
    -
  • Select one of your devices to begin configuring your factory assets.
  • -
-
+
+
    +
  • Select a device from the network to begin configuration.
  • +
+
+ +
+
    +
  • Select one of your devices to begin configuring your factory assets.
  • +
+
diff --git a/docs/guidelines/language/messaging/messages-overview.md b/docs/guidelines/language/messaging/messages-overview.md index 90be8d968..baa9f1b88 100644 --- a/docs/guidelines/language/messaging/messages-overview.md +++ b/docs/guidelines/language/messaging/messages-overview.md @@ -30,148 +30,148 @@ First define your use case and message type from the list below, then use this o Use sentence casing for all message descriptions (except toast messages) and add full stops.
-
-
    -
  • Create zones from your dashboard.
  • -
  • You have no new notifications.
  • -
-
-
-
    -
  • Add regions from your dashboard
  • -
-
+
+
    +
  • Create zones from your dashboard.
  • +
  • You have no new notifications.
  • +
+
+
+
    +
  • Add regions from your dashboard
  • +
+
Avoid overcommunicating by only adding relevant, beneficial information to your messages.
-
-
    -
  • We received your error report and will process it within 24 to 48 hours.
  • -
-
-
-
    -
  • The support team has received your bug report but they only work from 9–5 CEST time at the moment and there is a skeleton crew working over the summer.
  • -
-
+
+
    +
  • We received your error report and will process it within 24 to 48 hours.
  • +
+
+
+
    +
  • The support team has received your bug report but they only work from 9–5 CEST time at the moment and there is a skeleton crew working over the summer.
  • +
+
Provide specifics, e.g. objects, values, reasons and solutions, instead of generic messaging.
-
-
    -
  • Failed to upload file due to connection error.
  • -
-
-
-
    -
  • Something happened.
  • -
  • An error occurred.
  • -
-
+
+
    +
  • Failed to upload file due to connection error.
  • +
+
+
+
    +
  • Something happened.
  • +
  • An error occurred.
  • +
+
Use urgent wording to signal serious and irreversible consequences from ignoring messages.
-
-
    -
  • Immediate software update required to save data securely.
  • -
  • Update software now to save data.
  • -
  • Contact support by 14:00 CET to avoid shutdown.
  • -
  • Urgent: Order spare part replacement by August 31st for valve 532/a.
  • -
-
+
+
    +
  • Immediate software update required to save data securely.
  • +
  • Update software now to save data.
  • +
  • Contact support by 14:00 CET to avoid shutdown.
  • +
  • Urgent: Order spare part replacement by August 31st for valve 532/a.
  • +
+
Use the same key words in your messaging, but do not repeat headings and descriptions.
-
-
    -
  • **Heading:** Bad request
    +
    +
      +
    • **Heading:** Bad request
      **Description:** We could not process your request. Check and try again.
    • -
    -
    -
    -
      -
    • **Heading:** Bad request
      +
    +
    +
    +
      +
    • **Heading:** Bad request
      **Description:** Bad request.
    • -
    -
    +
+
Use the same grammar patterns across all your messaging within your product.
-
-
    -
  • No assets added. / No dashboards created. / No data downloaded.
  • -
-
-
-
    -
  • No assets added. / You haven’t added any assets. / You have no assets yet.
  • -
-
+
+
    +
  • No assets added. / No dashboards created. / No data downloaded.
  • +
+
+
+
    +
  • No assets added. / You haven’t added any assets. / You have no assets yet.
  • +
+
Avoid asking patronizing “Are you sure…?” questions to your expert users.
-
-
    -
  • Deleting this file removes all dependencies.
  • -
-
-
-
    -
  • Are you sure you want to delete this file?
  • -
-
+
+
    +
  • Deleting this file removes all dependencies.
  • +
+
+
+
    +
  • Are you sure you want to delete this file?
  • +
+
Use action labels that match the action of the message without mixing verbs or using synonyms.
-
-
    -
  • Close
  • -
  • Save
  • -
  • Continue
  • -
  • Delete
  • -
-
-
-
    -
  • OK
  • -
  • Confirm
  • -
-
+
+
    +
  • Close
  • +
  • Save
  • +
  • Continue
  • +
  • Delete
  • +
+
+
+
    +
  • OK
  • +
  • Confirm
  • +
+
Allow users to go back to change actions and avoid “OK” which is often understood as “Yes”.
-
-
    -
  • Heading: Unsaved changes
    +
    +
      +
    • Heading: Unsaved changes
      Description: You are about to leave the page. Unsaved changes will be lost.
      Button: Exit without saving
      Button: Go back
    • -
    -
    -
    -
      -
    • Description: Are you sure you want to cancel?
      +
    +
    +
    +
      +
    • Description: Are you sure you want to cancel?
      Button: OK
      Button: Cancel
      Button: Yes
    • -
    -
    +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/messaging/non-critical-information-messages.mdx b/docs/guidelines/language/messaging/non-critical-information-messages.mdx index 42e3f1a83..3d2aace5b 100644 --- a/docs/guidelines/language/messaging/non-critical-information-messages.mdx +++ b/docs/guidelines/language/messaging/non-critical-information-messages.mdx @@ -16,124 +16,124 @@ description: Non-critical information messages come from the system and keep use Keep messages short and concise.
-
-
    -
  • Pump 3 cycle complete 14:32.
  • -
-
-
-
    -
  • The operational sequence of Pump 3, located within Zone 2B, activated at 07:34 by admin 049 has completed its cycle (timestamp 14:32).
  • -
-
+
+
    +
  • Pump 3 cycle complete 14:32.
  • +
+
+
+
    +
  • The operational sequence of Pump 3, located within Zone 2B, activated at 07:34 by admin 049 has completed its cycle (timestamp 14:32).
  • +
+
Use a professional, informative tone for routine updates and only include relevant information.
-
-
    -
  • System backup completed at 21:00.
  • -
-
+
+
    +
  • System backup completed at 21:00.
  • +
+
-
-
    -
  • Don’t worry! We’ll make sure your backup is complete before your morning coffee on Friday!
  • -
-
+
+
    +
  • Don’t worry! We’ll make sure your backup is complete before your morning coffee on Friday!
  • +
+
Use clear timestamps for context, clarity, prioritization and record keeping.
-
-
    -
  • Motor overload detected at 14:01:15
  • -
  • Emergency stop activated at 21:03:27
  • -
-
-
-
    -
  • Notification list:
    +
    +
      +
    • Motor overload detected at 14:01:15
    • +
    • Emergency stop activated at 21:03:27
    • +
    +
    +
    +
      +
    • Notification list:
      Motor 3 overheating
      Valve 7 malfunction
    • -
    • System shutdown initiated 10 minutes ago.
    • -
    • Lubrication check due for press machine 2 in 3 days.
    • -
    -
    +
  • System shutdown initiated 10 minutes ago.
  • +
  • Lubrication check due for press machine 2 in 3 days.
  • +
+
Avoid urgency wording as these types of notifications are typically not as critical as warnings.
-
-
    -
  • System backup complete.
  • -
  • System backup completed at 15:00.
  • -
-
-
-
    -
  • System backup done! Open and check now!
  • -
-
+
+
    +
  • System backup complete.
  • +
  • System backup completed at 15:00.
  • +
+
+
+
    +
  • System backup done! Open and check now!
  • +
+
Avoid adding user actions when possible as these notifications should not impact the user workflow.
-
-
    -
  • Sensors calibrated. No further action required.
  • -
-
-
-
    -
  • Sensors calibrated. Click to check sensors (live link), calibration settings (live link) or manage your sensors (live link).
  • -
-
+
+
    +
  • Sensors calibrated. No further action required.
  • +
+
+
+
    +
  • Sensors calibrated. Click to check sensors (live link), calibration settings (live link) or manage your sensors (live link).
  • +
+
Use sentence casing to align with our UX writing guidelines.
-
-
    -
  • System will be updated within three hours.
  • -
  • Scheduled maintenance for Line 4 starts at 14:00.
  • -
-
+
+
    +
  • System will be updated within three hours.
  • +
  • Scheduled maintenance for Line 4 starts at 14:00.
  • +
+
Use minimal punctuation to keep notifications easy to read and without clutter or cognitive overload.
-
-
    -
  • System update on line 4 starts at 14:00.
  • -
-
-
-
    -
  • Notification: System update! Line: 4 / Starts: 14:00.
  • -
-
+
+
    +
  • System update on line 4 starts at 14:00.
  • +
+
+
+
    +
  • Notification: System update! Line: 4 / Starts: 14:00.
  • +
+
Use industrial icons only when absolutely necessary and avoid emojis.
-
-
    -
  • Line 3 shift schedule changed. See what's new.
  • -
-
-
-
    -
  • 🔄 Line 3 shift schedule updated. 👉 See what’s new.
  • -
-
+
+
    +
  • Line 3 shift schedule changed. See what's new.
  • +
+
+
+
    +
  • 🔄 Line 3 shift schedule updated. 👉 See what’s new.
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/messaging/progress-updates.mdx b/docs/guidelines/language/messaging/progress-updates.mdx index e7e7dc29e..4f92b71e3 100644 --- a/docs/guidelines/language/messaging/progress-updates.mdx +++ b/docs/guidelines/language/messaging/progress-updates.mdx @@ -15,179 +15,179 @@ description: While some companies use humorous text like "Chopping the onions… Use sentence case to align with our UX writing guidelines.
-
-
    -
  • Downloading assets…
  • -
-
-
-
    -
  • Downloading Assets…
  • -
-
+
+
    +
  • Downloading assets…
  • +
+
+
+
    +
  • Downloading Assets…
  • +
+
Use the present simple progressive (continuous, -ing) verb form to indicate ongoing actions.
-
-
    -
  • Loading…
  • -
  • Downloading…
  • -
  • Charging…
  • -
  • Saving…
  • -
  • Searching…
  • -
-
-
-
    -
  • Been loading…
  • -
  • To be loading…
  • -
  • Will be loading…
  • -
-
+
+
    +
  • Loading…
  • +
  • Downloading…
  • +
  • Charging…
  • +
  • Saving…
  • +
  • Searching…
  • +
+
+
+
    +
  • Been loading…
  • +
  • To be loading…
  • +
  • Will be loading…
  • +
+
Use verbs before nouns to focus on the action and make messages easier to scan.
-
-
    -
  • Loading file…
  • -
-
-
-
    -
  • File loading…
  • -
-
+
+
    +
  • Loading file…
  • +
+
+
+
    +
  • File loading…
  • +
+
Use horizontal ellipses (…) after the verb without a space instead of adding three full stops (unicode U+2026, Mac Option+/Windows ALT+0133).
-
-
    -
  • Loading…
  • -
-
-
-
    -
  • Loading …
  • -
  • Processing⋰
  • -
-
+
+
    +
  • Loading…
  • +
+
+
+
    +
  • Loading …
  • +
  • Processing⋰
  • +
+
Use ellipses for text with numbers or the object to show a running process.
-
-
    -
  • Uploading 5 items…
  • -
  • Uploading items…
  • -
  • Processing request…
  • -
  • Saving settings…
  • -
  • Saving changes…
  • -
-
-
-
    -
  • Uploading 1 file
  • -
-
+
+
    +
  • Uploading 5 items…
  • +
  • Uploading items…
  • +
  • Processing request…
  • +
  • Saving settings…
  • +
  • Saving changes…
  • +
+
+
+
    +
  • Uploading 1 file
  • +
+
Avoid ellipses to show time remaining and approximate or unknown times as they're status indicators, not actions.
-
-
    -
  • 5 minutes remaining
  • -
  • About 33 minutes remaining
  • -
-
-
-
    -
  • 5 minutes remaining…
  • -
  • About 33 minutes remaining…
  • -
-
+
+
    +
  • 5 minutes remaining
  • +
  • About 33 minutes remaining
  • +
+
+
+
    +
  • 5 minutes remaining…
  • +
  • About 33 minutes remaining…
  • +
+
Change verb form without ellipses when possible in buttons with loading spinners to avoid visual clutter.
-
-
    -
  • Download → Downloading → Downloaded
  • -
-
-
-
    -
  • Download → Downloading… → Downloaded
  • -
-
+
+
    +
  • Download → Downloading → Downloaded
  • +
+
+
+
    +
  • Download → Downloading… → Downloaded
  • +
+
Use the correct verb form without using ellipses to show background processes. -
-
-
    -
  • Download → Downloading → Downloaded
  • -
-
-
-
    -
  • Download → Downloading… → Downloaded
  • -
-
+
+
+
    +
  • Download → Downloading → Downloaded
  • +
+
+
+
    +
  • Download → Downloading… → Downloaded
  • +
+
Use specific and definitive text to make users aware of what is happening and how long the process takes.
-
-
    -
  • Downloading…
  • -
-
-
-
    -
  • Please wait.
  • -
  • Thank you for waiting.
  • -
  • Just a moment.
  • -
-
+
+
    +
  • Downloading…
  • +
+
+
+
    +
  • Please wait.
  • +
  • Thank you for waiting.
  • +
  • Just a moment.
  • +
+
Use informative text and actions when multiple processes are happening at the same time.
-
-
    -
  • Carrying out tasks…
  • -
-
-
-
    -
  • Thank you for waiting.
  • -
  • Just a moment.
  • -
-
+
+
    +
  • Carrying out tasks…
  • +
+
+
+
    +
  • Thank you for waiting.
  • +
  • Just a moment.
  • +
+
Use transitional text to manage user expectations and reduce frustration for lengthy processes.
-
-
    -
  • Processing your request. This usually takes about 1–2 minutes.
  • -
  • This step takes a bit longer than usual.
  • -
  • We’re preparing your dashboard. Once it’s ready, you’ll be able to customize your view.
  • -
-
+
+
    +
  • Processing your request. This usually takes about 1–2 minutes.
  • +
  • This step takes a bit longer than usual.
  • +
  • We’re preparing your dashboard. Once it’s ready, you’ll be able to customize your view.
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/messaging/warning-messages.mdx b/docs/guidelines/language/messaging/warning-messages.mdx index 5c3b91383..f49aee081 100644 --- a/docs/guidelines/language/messaging/warning-messages.mdx +++ b/docs/guidelines/language/messaging/warning-messages.mdx @@ -25,145 +25,145 @@ We follow this three-step approach when creating our warning messages. This ensu Use warning messages only when an action or awareness is genuinely needed.
-
-
    -
  • Temperature readings from Zone 3 approaching 30°. Check cooling system and ensure all windows and doors are closed.
  • -
-
+
+
    +
  • Temperature readings from Zone 3 approaching 30°. Check cooling system and ensure all windows and doors are closed.
  • +
+
Use clear, understandable titles and avoid generic warning messages.
-
-
    -
  • Temperature approaching 30°
  • -
-
-
-
    -
  • Temperature warning
  • -
-
+
+
    +
  • Temperature approaching 30°
  • +
+
+
+
    +
  • Temperature warning
  • +
+
Provide specific and clear consequences and solutions.
-
-
    -
  • Heading: Leave without saving
    +
    +
      +
    • Heading: Leave without saving
      Description: You’re about to leave this page. Unsaved changes will be lost. Go back to save changes or exit without saving.
      Button: Leave without saving
      Button: Go back
    • -
    -
    -
    -
      -
    • Do you want to leave the page?
      +
    +
    +
    +
      +
    • Do you want to leave the page?
      Button: Continue
      Button: OK
      Button: Cancel
    • -
    -
    +
+
Avoid using words like "may", "might" or "possibly will" when explaining problems.
-
-
    -
  • Your changes will be lost if not saved.
  • -
-
-
-
    -
  • Your changes might be lost if not saved.
  • -
-
+
+
    +
  • Your changes will be lost if not saved.
  • +
+
+
+
    +
  • Your changes might be lost if not saved.
  • +
+
Include links to help pages or troubleshooting steps to avoid the consequences when possible.
-
-
    -
  • Heading: Login attempt from unknown device
    +
    +
      +
    • Heading: Login attempt from unknown device
      Description: Review access settings or security guidelines to prevent unauthorized access.
      Button: Open guidelines
      Button: Open access settings
    • -
    -
    +
+
-
-
    -
  • Heading: Unauthorized access attempt on Control Panel A
    +
    +
      +
    • Heading: Unauthorized access attempt on Control Panel A
      Description: Review access logs and verify user credentials.
      Button: Open access logs
    • -
    -
    +
+
Avoid repeating your message in both the heading and description.
-
-
    -
  • Heading: Pressure in Tank B approaching limit
    +
    +
      +
    • Heading: Pressure in Tank B approaching limit
      Description: Initiate release protocol to avoid exceeding threshold.
    • -
    -
    -
    -
      -
    • Heading: Pressure in Tank B approaching limit
      +
    +
    +
    +
      +
    • Heading: Pressure in Tank B approaching limit
      Description: Pressure in Tank B approaching limit so initiate release protocol.
    • -
    -
    +
+
Avoid asking "Are you sure?" as this is vague, has no context, consequences and causes hesitation.
-
-
    -
  • This action will delete all sensor data from the last 24 hours. Do you want to proceed and delete?
  • -
-
-
-
    -
  • Are you sure you want to delete?
  • -
-
+
+
    +
  • This action will delete all sensor data from the last 24 hours. Do you want to proceed and delete?
  • +
+
+
+
    +
  • Are you sure you want to delete?
  • +
+
Use clear, urgent wording for irreversible actions.
-
-
    -
  • Heading: Reset device
    +
    +
      +
    • Heading: Reset device
      Description: A reset restores the device to its factory settings, deleting all applications and user data. This action cannot be undone.
      Button: Reset
      Button: Cancel
    • -
    -
    -
    -
      -
    • Press reset to proceed.
    • -
    -
    +
+
+
+
    +
  • Press reset to proceed.
  • +
+
Avoid using all uppercase text as it can be difficult to read and may seem like we’re shouting.
-
-
    -
  • WARNING!! FAILURE! IMMEDIATE ACTION REQUIRED!!
  • -
-
+
+
    +
  • WARNING!! FAILURE! IMMEDIATE ACTION REQUIRED!!
  • +
+
## Dos and Don’ts diff --git a/docs/guidelines/language/punctuation.md b/docs/guidelines/language/punctuation.md index d13778b8d..cb5868d03 100644 --- a/docs/guidelines/language/punctuation.md +++ b/docs/guidelines/language/punctuation.md @@ -46,7 +46,7 @@ Always consider whether necessary `'` Single quotation mark for possession: Customer’s role (single), customers’ roles (plural)
- No quotation mark or brackets for plurals: PDFs + No quotation mark or brackets for plurals: PDFs
@@ -86,36 +86,36 @@ Always consider whether necessary - Numbers: Use No. as an abbreviation for number, no spacing between abbreviated No. and number: No.8
-
-
    -
  • 11am
  • -
  • Monday, January 12, 2021
  • -
  • €999.50
  • -
  • €2.5 million
  • -
  • $400,456.50
  • -
  • £320
  • -
  • 30 mm
  • -
  • 10 oz
  • -
  • 10-40%
  • -
  • No.7
  • -
  • Number 7
  • -
-
-
-
    -
  • 11 a.m.
  • -
  • Monday, 12 January 2021
  • -
  • €999,50
  • -
  • €2,5 million
  • -
  • $400.456,50
  • -
  • 320£
  • -
  • 30 mms
  • -
  • 10 oz.
  • -
  • 10–40%
  • -
  • #7
  • -
  • Num 7
  • -
-
+
+
    +
  • 11am
  • +
  • Monday, January 12, 2021
  • +
  • €999.50
  • +
  • €2.5 million
  • +
  • $400,456.50
  • +
  • £320
  • +
  • 30 mm
  • +
  • 10 oz
  • +
  • 10-40%
  • +
  • No.7
  • +
  • Number 7
  • +
+
+
+
    +
  • 11 a.m.
  • +
  • Monday, 12 January 2021
  • +
  • €999,50
  • +
  • €2,5 million
  • +
  • $400.456,50
  • +
  • 320£
  • +
  • 30 mms
  • +
  • 10 oz.
  • +
  • 10–40%
  • +
  • #7
  • +
  • Num 7
  • +
+
## Spacing @@ -131,22 +131,22 @@ Always consider whether necessary - Add a space before unit of measurement
-
-
    -
  • 50%
  • -
  • 11am
  • -
  • Tuesday: no data
  • -
  • Browse…
  • -
-
-
-
    -
  • 50 %
  • -
  • 11 am
  • -
  • Tuesday: no data
  • -
  • Browse …
  • -
-
+
+
    +
  • 50%
  • +
  • 11am
  • +
  • Tuesday: no data
  • +
  • Browse…
  • +
+
+
+
    +
  • 50 %
  • +
  • 11 am
  • +
  • Tuesday: no data
  • +
  • Browse …
  • +
+
## Lists @@ -163,19 +163,19 @@ Always consider whether necessary
-
-
    -
  • Write comments
  • -
  • Respond to comments
  • -
  • Approve work orders
  • -
-
- -
-
    -
  • Write comments
  • -
  • Respond to comments
  • -
  • Approve work orders by adding your fingerprint to your user management section in your smartphone.
  • -
-
+
+
    +
  • Write comments
  • +
  • Respond to comments
  • +
  • Approve work orders
  • +
+
+ +
+
    +
  • Write comments
  • +
  • Respond to comments
  • +
  • Approve work orders by adding your fingerprint to your user management section in your smartphone.
  • +
+
diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..272c4b55e --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,24 @@ +import * as mdx from 'eslint-plugin-mdx'; +import markupIndent from './scripts/eslint-rules/markup-indent.mjs'; + +export default [ + { + ignores: ['docs/autogenerated/**'], + }, + { + ...mdx.flat, + files: ['**/*.{md,mdx}'], + plugins: { + ...mdx.flat.plugins, + local: { + rules: { + 'markup-indent': markupIndent, + }, + }, + }, + rules: { + ...mdx.flat.rules, + 'local/markup-indent': 'error', + }, + }, +]; diff --git a/package.json b/package.json index 9151248a5..691078ed0 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "start.docs": "docusaurus start", "build.docs": "docusaurus build", "prepare.docs": "tsx --tsconfig ./tsconfig.node.json ./scripts/prepare-markdown.ts", + "lint:markdown": "eslint \"docs/**/*.{md,mdx}\"", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", "clear": "docusaurus clear", @@ -53,6 +54,8 @@ "clsx": "^2.1.0", "docusaurus-plugin-llms": "^0.3.0", "docusaurus-plugin-sass": "^0.2.5", + "eslint": "^10.7.0", + "eslint-plugin-mdx": "^3.8.1", "fs-extra": "^11.3.0", "glob": "^11.0.3", "mustache": "^4.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d7ccd1c4..9cf8b5fa4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,13 +13,13 @@ importers: dependencies: '@docusaurus/core': specifier: 3.7.0 - version: 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + version: 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/plugin-client-redirects': specifier: ^3.7.0 - version: 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + version: 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/preset-classic': specifier: 3.7.0 - version: 3.7.0(@algolia/client-search@5.24.0)(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(@types/react@18.3.22)(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3) + version: 3.7.0(@algolia/client-search@5.24.0)(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(@types/react@18.3.22)(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3) '@mdx-js/react': specifier: ^3.0.0 version: 3.1.0(@types/react@18.3.22)(react@18.3.1) @@ -53,16 +53,16 @@ importers: devDependencies: '@cmfcmf/docusaurus-search-local': specifier: ^1.2.0 - version: 1.2.0(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(search-insights@2.17.3) + version: 1.2.0(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(search-insights@2.17.3) '@docusaurus/module-type-aliases': specifier: 3.7.0 - version: 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/tsconfig': specifier: 3.7.0 version: 3.7.0 '@docusaurus/types': specifier: 3.7.0 - version: 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@dotenvx/dotenvx': specifier: ^1.52.0 version: 1.52.0 @@ -101,10 +101,16 @@ importers: version: 2.1.1 docusaurus-plugin-llms: specifier: ^0.3.0 - version: 0.3.0(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)) + version: 0.3.0(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)) docusaurus-plugin-sass: specifier: ^0.2.5 - version: 0.2.6(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(sass@1.87.0)(webpack@5.99.8) + version: 0.2.6(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(sass@1.87.0)(webpack@5.99.8) + eslint: + specifier: ^10.7.0 + version: 10.7.0(jiti@1.21.7) + eslint-plugin-mdx: + specifier: ^3.8.1 + version: 3.8.1(eslint@10.7.0(jiti@1.21.7)) fs-extra: specifier: ^11.3.0 version: 11.3.0 @@ -1492,6 +1498,36 @@ packages: cpu: [x64] os: [win32] + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@floating-ui/core@1.7.0': resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} @@ -1507,6 +1543,26 @@ packages: '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + '@isaacs/balanced-match@4.0.1': resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} engines: {node: 20 || >=22} @@ -1593,6 +1649,30 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@npmcli/config@8.3.4': + resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/git@5.0.8': + resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/map-workspaces@3.0.6': + resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/name-from-folder@2.0.0': + resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/package-json@5.2.1': + resolution: {integrity: sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/promise-spawn@7.0.2': + resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==} + engines: {node: ^16.14.0 || >=18.0.0} + '@octokit/app@15.1.6': resolution: {integrity: sha512-WELCamoCJo9SN0lf3SWZccf68CF0sBNPQuLYmZ/n87p5qvBJDe9aBtr5dHkh7T9nxWZ608pizwsUbypSzZAiUw==} engines: {node: '>= 18'} @@ -1844,6 +1924,10 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@pkgr/core@0.3.6': + resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} + engines: {node: ^14.18.0 || >=16.0.0} + '@pnpm/config.env-replace@1.1.0': resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} @@ -2064,6 +2148,9 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/concat-stream@2.0.3': + resolution: {integrity: sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==} + '@types/connect-history-api-fallback@1.5.4': resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} @@ -2079,12 +2166,18 @@ packages: '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} @@ -2118,6 +2211,9 @@ packages: '@types/http-proxy@1.17.16': resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + '@types/is-empty@1.2.3': + resolution: {integrity: sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==} + '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -2202,6 +2298,9 @@ packages: '@types/sockjs@0.3.36': resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + '@types/supports-color@8.1.3': + resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} + '@types/tar@6.1.13': resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} @@ -2274,6 +2373,10 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + abbrev@2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -2292,6 +2395,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} @@ -2325,6 +2433,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -2446,6 +2557,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -2489,6 +2604,10 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@5.0.7: + resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -2608,6 +2727,10 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + clean-css@5.3.3: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} @@ -2711,6 +2834,10 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -2944,6 +3071,9 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -3137,6 +3267,9 @@ packages: resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} engines: {node: '>=0.12'} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -3193,15 +3326,61 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + eslint-mdx@3.8.1: + resolution: {integrity: sha512-hnsqWwMOHqUANwxWEGt8XbwABPEr5sTOolAzqyUDFdlERpqjFE/icylb+mJl60VICL+kLbbvXWbnFLWZdTqJ2g==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: '>=8.0.0' + remark-lint-file-extension: '*' + peerDependenciesMeta: + remark-lint-file-extension: + optional: true + + eslint-plugin-mdx@3.8.1: + resolution: {integrity: sha512-4OLgotfBxUDc1f6ihXSagT/1+JCCUABA/2r6Kzl6gqFftg4dCV0wBfdwFo6X6UO/FzTHr3g6mVt+6prRXffc/Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: '>=8.0.0' + eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.7.0: + resolution: {integrity: sha512-GVTD7s1vdIl6UYvAfriOPeY1Df8LIZjfofLvHwde+erDHGGuHyuM6xoxRxmHiebhYuD2p1vN4wWh0XzPARSGDQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -3292,6 +3471,9 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} @@ -3326,6 +3508,10 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + file-loader@6.2.0: resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} engines: {node: '>= 10.13.0'} @@ -3360,10 +3546,17 @@ packages: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -3605,6 +3798,10 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + hpack.js@2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} @@ -3722,6 +3919,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@6.0.2: + resolution: {integrity: sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==} + engines: {node: '>= 4'} + image-size@1.2.1: resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} engines: {node: '>=16.x'} @@ -3741,6 +3942,9 @@ packages: resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} engines: {node: '>=8'} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -3770,6 +3974,10 @@ packages: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} engines: {node: '>=10'} + ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -3817,6 +4025,9 @@ packages: engines: {node: '>=8'} hasBin: true + is-empty@1.2.0: + resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} + is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -3969,12 +4180,19 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -4005,6 +4223,10 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -4012,6 +4234,13 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + load-plugin@6.0.3: + resolution: {integrity: sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w==} + loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -4355,6 +4584,10 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -4411,6 +4644,9 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -4448,6 +4684,15 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -4460,6 +4705,22 @@ packages: resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} engines: {node: '>=14.16'} + npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@11.0.3: + resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} + engines: {node: ^16.14.0 || >=18.0.0} + + npm-pick-manifest@9.1.0: + resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==} + engines: {node: ^16.14.0 || >=18.0.0} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -4530,6 +4791,10 @@ packages: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -4591,6 +4856,10 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} + parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} @@ -5108,6 +5377,10 @@ packages: preact@10.26.6: resolution: {integrity: sha512-5SRRBinwpwkaD+OqlBDeITlRgvd8I8QlxHJw9AxSdMNV6O+LodN9nUyYGpSF7sadHjs6RzeFShMexC6DbtWr9g==} + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} @@ -5124,9 +5397,25 @@ packages: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} + proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -5264,6 +5553,10 @@ packages: read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -5402,6 +5695,10 @@ packages: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -5635,6 +5932,18 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} @@ -5668,6 +5977,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@6.1.0: + resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} + engines: {node: '>=16'} + string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} @@ -5734,6 +6047,10 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -5746,6 +6063,10 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + synckit@0.11.13: + resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} + engines: {node: ^14.18.0 || >=16.0.0} + tailwindcss@3.4.17: resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} @@ -5840,6 +6161,10 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -5852,6 +6177,10 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -5859,6 +6188,9 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -5887,6 +6219,9 @@ packages: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} + unified-engine@11.2.2: + resolution: {integrity: sha512-15g/gWE7qQl9tQ3nAEbMd5h9HV1EACtFs6N9xaRBZICoCwnNGbal1kOs++ICf4aiTdItZxU2s/kYWhW7htlqJg==} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -5894,6 +6229,9 @@ packages: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} + unist-util-inspect@8.1.0: + resolution: {integrity: sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==} + unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} @@ -5967,6 +6305,13 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + value-equal@1.0.1: resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} @@ -5980,9 +6325,21 @@ packages: vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-reporter@8.1.1: + resolution: {integrity: sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==} + + vfile-sort@4.0.0: + resolution: {integrity: sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==} + + vfile-statistics@3.0.0: + resolution: {integrity: sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==} + vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + watchpack@2.4.2: resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} @@ -6078,6 +6435,10 @@ packages: wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -7142,12 +7503,12 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@cmfcmf/docusaurus-search-local@1.2.0(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(search-insights@2.17.3)': + '@cmfcmf/docusaurus-search-local@1.2.0(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(search-insights@2.17.3)': dependencies: '@algolia/autocomplete-js': 1.19.1(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.3) '@algolia/autocomplete-theme-classic': 1.19.1 '@algolia/client-search': 4.24.0 - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) algoliasearch: 4.24.0 cheerio: 1.0.0-rc.12 clsx: 1.2.1 @@ -7430,7 +7791,7 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/babel@3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/babel@3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/core': 7.27.1 '@babel/generator': 7.27.1 @@ -7443,7 +7804,7 @@ snapshots: '@babel/runtime-corejs3': 7.27.1 '@babel/traverse': 7.27.1 '@docusaurus/logger': 3.7.0 - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) babel-plugin-dynamic-import-node: 2.3.3 fs-extra: 11.3.0 tslib: 2.8.1 @@ -7457,14 +7818,14 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/bundler@3.7.0(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: '@babel/core': 7.27.1 - '@docusaurus/babel': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/babel': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/cssnano-preset': 3.7.0 '@docusaurus/logger': 3.7.0 - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) babel-loader: 9.2.1(@babel/core@7.27.1)(webpack@5.99.8) clean-css: 5.3.3 copy-webpack-plugin: 11.0.0(webpack@5.99.8) @@ -7478,7 +7839,7 @@ snapshots: postcss: 8.5.3 postcss-loader: 7.3.4(postcss@8.5.3)(typescript@5.8.3)(webpack@5.99.8) postcss-preset-env: 10.1.6(postcss@8.5.3) - react-dev-utils: 12.0.1(typescript@5.8.3)(webpack@5.99.8) + react-dev-utils: 12.0.1(eslint@10.7.0(jiti@1.21.7))(typescript@5.8.3)(webpack@5.99.8) terser-webpack-plugin: 5.3.14(webpack@5.99.8) tslib: 2.8.1 url-loader: 4.1.1(file-loader@6.2.0(webpack@5.99.8))(webpack@5.99.8) @@ -7502,15 +7863,15 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/babel': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/bundler': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/babel': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/bundler': 3.7.0(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.7.0 - '@docusaurus/mdx-loader': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/react': 3.1.0(@types/react@18.3.22)(react@18.3.1) boxen: 6.2.1 chalk: 4.1.2 @@ -7532,7 +7893,7 @@ snapshots: p-map: 4.0.0 prompts: 2.4.2 react: 18.3.1 - react-dev-utils: 12.0.1(typescript@5.8.3)(webpack@5.99.8) + react-dev-utils: 12.0.1(eslint@10.7.0(jiti@1.21.7))(typescript@5.8.3)(webpack@5.99.8) react-dom: 18.3.1(react@18.3.1) react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' @@ -7581,12 +7942,12 @@ snapshots: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/mdx-loader@3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/mdx-loader@3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@docusaurus/logger': 3.7.0 - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mdx-js/mdx': 3.1.0(acorn@8.14.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mdx-js/mdx': 3.1.0(acorn@8.17.0) '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 estree-util-value-to-estree: 3.4.0 @@ -7617,9 +7978,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/module-type-aliases@3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 '@types/react': 18.3.22 '@types/react-router-config': 5.0.11 @@ -7636,13 +7997,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-client-redirects@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-client-redirects@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.7.0 - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) eta: 2.2.0 fs-extra: 11.3.0 lodash: 4.17.21 @@ -7670,17 +8031,17 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-blog@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-content-blog@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.7.0 - '@docusaurus/mdx-loader': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.3.0 @@ -7714,17 +8075,17 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.7.0 - '@docusaurus/mdx-loader': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.3.0 @@ -7756,13 +8117,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-pages@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-content-pages@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/mdx-loader': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/mdx-loader': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -7789,11 +8150,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-debug@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-debug@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -7820,11 +8181,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-analytics@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-google-analytics@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -7849,11 +8210,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-gtag@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-google-gtag@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/gtag.js': 0.0.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -7879,11 +8240,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-google-tag-manager@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -7908,14 +8269,14 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-sitemap@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-sitemap@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.7.0 - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -7942,12 +8303,12 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-svgr@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-svgr@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/webpack': 8.1.0(typescript@5.8.3) react: 18.3.1 @@ -7975,22 +8336,22 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.7.0(@algolia/client-search@5.24.0)(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(@types/react@18.3.22)(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3)': - dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-debug': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-google-analytics': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-google-gtag': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-google-tag-manager': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-sitemap': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-svgr': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-classic': 3.7.0(@types/react@18.3.22)(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-search-algolia': 3.7.0(@algolia/client-search@5.24.0)(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(@types/react@18.3.22)(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3) - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/preset-classic@3.7.0(@algolia/client-search@5.24.0)(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(@types/react@18.3.22)(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3)': + dependencies: + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-debug': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-google-analytics': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-google-gtag': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-google-tag-manager': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-sitemap': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-svgr': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-classic': 3.7.0(@types/react@18.3.22)(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-search-algolia': 3.7.0(@algolia/client-search@5.24.0)(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(@types/react@18.3.22)(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -8022,21 +8383,21 @@ snapshots: '@types/react': 18.3.22 react: 18.3.1 - '@docusaurus/theme-classic@3.7.0(@types/react@18.3.22)(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/theme-classic@3.7.0(@types/react@18.3.22)(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.7.0 - '@docusaurus/mdx-loader': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-blog': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-content-pages': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/theme-translations': 3.7.0 - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/react': 3.1.0(@types/react@18.3.22)(react@18.3.1) clsx: 2.1.1 copy-text-to-clipboard: 3.2.0 @@ -8073,13 +8434,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-common@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/theme-common@3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/mdx-loader': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 '@types/react': 18.3.22 '@types/react-router-config': 5.0.11 @@ -8098,16 +8459,16 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.7.0(@algolia/client-search@5.24.0)(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(@types/react@18.3.22)(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3)': + '@docusaurus/theme-search-algolia@3.7.0(@algolia/client-search@5.24.0)(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(@types/react@18.3.22)(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3)': dependencies: '@docsearch/react': 3.9.0(@algolia/client-search@5.24.0)(@types/react@18.3.22)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.7.0 - '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-common': 3.7.0(@docusaurus/plugin-content-docs@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/theme-translations': 3.7.0 - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) algoliasearch: 5.24.0 algoliasearch-helper: 3.25.0(algoliasearch@5.24.0) clsx: 2.1.1 @@ -8149,9 +8510,9 @@ snapshots: '@docusaurus/tsconfig@3.7.0': {} - '@docusaurus/types@3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/types@3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@mdx-js/mdx': 3.1.0(acorn@8.14.1) + '@mdx-js/mdx': 3.1.0(acorn@8.17.0) '@types/history': 4.7.11 '@types/react': 18.3.22 commander: 5.1.0 @@ -8170,9 +8531,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils-common@3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tslib: 2.8.1 transitivePeerDependencies: - '@swc/core' @@ -8184,11 +8545,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils-validation@3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@docusaurus/logger': 3.7.0 - '@docusaurus/utils': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 joi: 17.13.3 js-yaml: 4.1.0 @@ -8204,11 +8565,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils@3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@docusaurus/logger': 3.7.0 - '@docusaurus/types': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.7.0(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.7.0(acorn@8.17.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) escape-string-regexp: 4.0.0 file-loader: 6.2.0(webpack@5.99.8) fs-extra: 11.3.0 @@ -8329,6 +8690,36 @@ snapshots: '@esbuild/win32-x64@0.25.4': optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0(jiti@1.21.7))': + dependencies: + eslint: 10.7.0(jiti@1.21.7) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.5': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.0 + minimatch: 10.2.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.6.0': + dependencies: + '@eslint/core': 1.2.1 + + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.2': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 + '@floating-ui/core@1.7.0': dependencies: '@floating-ui/utils': 0.2.9 @@ -8346,6 +8737,22 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + '@isaacs/balanced-match@4.0.1': {} '@isaacs/brace-expansion@5.0.0': @@ -8406,7 +8813,7 @@ snapshots: dependencies: '@types/react': 18.3.22 - '@mdx-js/mdx@3.1.0(acorn@8.14.1)': + '@mdx-js/mdx@3.1.0(acorn@8.17.0)': dependencies: '@types/estree': 1.0.7 '@types/estree-jsx': 1.0.5 @@ -8420,7 +8827,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.0(acorn@8.14.1) + recma-jsx: 1.0.0(acorn@8.17.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 remark-mdx: 3.1.0 @@ -8462,6 +8869,58 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 + '@npmcli/config@8.3.4': + dependencies: + '@npmcli/map-workspaces': 3.0.6 + '@npmcli/package-json': 5.2.1 + ci-info: 4.4.0 + ini: 4.1.3 + nopt: 7.2.1 + proc-log: 4.2.0 + semver: 7.7.1 + walk-up-path: 3.0.1 + transitivePeerDependencies: + - bluebird + + '@npmcli/git@5.0.8': + dependencies: + '@npmcli/promise-spawn': 7.0.2 + ini: 4.1.3 + lru-cache: 10.4.3 + npm-pick-manifest: 9.1.0 + proc-log: 4.2.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.7.1 + which: 4.0.0 + transitivePeerDependencies: + - bluebird + + '@npmcli/map-workspaces@3.0.6': + dependencies: + '@npmcli/name-from-folder': 2.0.0 + glob: 10.4.5 + minimatch: 9.0.5 + read-package-json-fast: 3.0.2 + + '@npmcli/name-from-folder@2.0.0': {} + + '@npmcli/package-json@5.2.1': + dependencies: + '@npmcli/git': 5.0.8 + glob: 10.4.5 + hosted-git-info: 7.0.2 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 6.0.2 + proc-log: 4.2.0 + semver: 7.7.1 + transitivePeerDependencies: + - bluebird + + '@npmcli/promise-spawn@7.0.2': + dependencies: + which: 4.0.0 + '@octokit/app@15.1.6': dependencies: '@octokit/auth-app': 7.2.1 @@ -8735,6 +9194,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@pkgr/core@0.3.6': {} + '@pnpm/config.env-replace@1.1.0': {} '@pnpm/network.ca-file@1.0.2': @@ -8970,6 +9431,10 @@ snapshots: dependencies: '@types/node': 22.15.21 + '@types/concat-stream@2.0.3': + dependencies: + '@types/node': 22.15.21 + '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.6 @@ -8993,12 +9458,16 @@ snapshots: '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 + '@types/esrecurse@4.3.1': {} + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.7 '@types/estree@1.0.7': {} + '@types/estree@1.0.9': {} + '@types/express-serve-static-core@4.19.6': dependencies: '@types/node': 22.15.21 @@ -9043,6 +9512,8 @@ snapshots: dependencies: '@types/node': 22.15.21 + '@types/is-empty@1.2.3': {} + '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -9138,6 +9609,8 @@ snapshots: dependencies: '@types/node': 22.15.21 + '@types/supports-color@8.1.3': {} + '@types/tar@6.1.13': dependencies: '@types/node': 22.15.21 @@ -9239,6 +9712,8 @@ snapshots: '@xtuc/long@4.2.2': {} + abbrev@2.0.0: {} + accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -9248,12 +9723,18 @@ snapshots: dependencies: acorn: 8.14.1 + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + acorn-walk@8.3.4: dependencies: acorn: 8.14.1 acorn@8.14.1: {} + acorn@8.17.0: {} + address@1.2.2: {} adm-zip@0.5.16: {} @@ -9283,6 +9764,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -9433,6 +9921,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + batch@0.6.1: {} before-after-hook@3.0.2: {} @@ -9500,6 +9990,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.7: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -9628,6 +10122,8 @@ snapshots: ci-info@3.9.0: {} + ci-info@4.4.0: {} + clean-css@5.3.3: dependencies: source-map: 0.6.1 @@ -9714,6 +10210,13 @@ snapshots: concat-map@0.0.1: {} + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -9954,6 +10457,8 @@ snapshots: deep-extend@0.6.0: {} + deep-is@0.1.4: {} + deepmerge@4.3.1: {} default-gateway@6.0.3: @@ -10032,16 +10537,16 @@ snapshots: dependencies: '@leichtgewicht/ip-codec': 2.0.5 - docusaurus-plugin-llms@0.3.0(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)): + docusaurus-plugin-llms@0.3.0(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)): dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) gray-matter: 4.0.3 minimatch: 9.0.5 yaml: 2.8.2 - docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(sass@1.87.0)(webpack@5.99.8): + docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(sass@1.87.0)(webpack@5.99.8): dependencies: - '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.14.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.7.0(@mdx-js/react@3.1.0(@types/react@18.3.22)(react@18.3.1))(acorn@8.17.0)(eslint@10.7.0(jiti@1.21.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) sass: 1.87.0 sass-loader: 16.0.5(sass@1.87.0)(webpack@5.99.8) transitivePeerDependencies: @@ -10147,6 +10652,8 @@ snapshots: entities@6.0.0: {} + err-code@2.0.3: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -10222,13 +10729,108 @@ snapshots: escape-string-regexp@5.0.0: {} + eslint-mdx@3.8.1(eslint@10.7.0(jiti@1.21.7)): + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint: 10.7.0(jiti@1.21.7) + espree: 11.2.0 + estree-util-visit: 2.0.0 + remark-mdx: 3.1.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + synckit: 0.11.13 + unified: 11.0.5 + unified-engine: 11.2.2 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - bluebird + - supports-color + + eslint-plugin-mdx@3.8.1(eslint@10.7.0(jiti@1.21.7)): + dependencies: + eslint: 10.7.0(jiti@1.21.7) + eslint-mdx: 3.8.1(eslint@10.7.0(jiti@1.21.7)) + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + remark-mdx: 3.1.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + synckit: 0.11.13 + unified: 11.0.5 + vfile: 6.0.3 + transitivePeerDependencies: + - bluebird + - remark-lint-file-extension + - supports-color + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.9 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@10.7.0(jiti@1.21.7): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.7 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + + espree@11.2.0: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -10359,6 +10961,8 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-levenshtein@2.0.6: {} + fast-uri@3.0.6: {} fastq@1.19.1: @@ -10390,6 +10994,10 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + file-loader@6.2.0(webpack@5.99.8): dependencies: loader-utils: 2.0.4 @@ -10433,8 +11041,15 @@ snapshots: locate-path: 7.2.0 path-exists: 5.0.0 + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + flat@5.0.2: {} + flatted@3.4.2: {} + follow-redirects@1.15.9: {} foreground-child@3.3.1: @@ -10442,7 +11057,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@6.5.3(typescript@5.8.3)(webpack@5.99.8): + fork-ts-checker-webpack-plugin@6.5.3(eslint@10.7.0(jiti@1.21.7))(typescript@5.8.3)(webpack@5.99.8): dependencies: '@babel/code-frame': 7.27.1 '@types/json-schema': 7.0.15 @@ -10459,6 +11074,8 @@ snapshots: tapable: 1.1.3 typescript: 5.8.3 webpack: 5.99.8 + optionalDependencies: + eslint: 10.7.0(jiti@1.21.7) form-data-encoder@2.1.4: {} @@ -10768,6 +11385,10 @@ snapshots: dependencies: react-is: 16.13.1 + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + hpack.js@2.1.6: dependencies: inherits: 2.0.4 @@ -10911,6 +11532,8 @@ snapshots: ignore@5.3.2: {} + ignore@6.0.2: {} + image-size@1.2.1: dependencies: queue: 6.0.2 @@ -10926,6 +11549,8 @@ snapshots: import-lazy@4.0.0: {} + import-meta-resolve@4.2.0: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -10945,6 +11570,8 @@ snapshots: ini@2.0.0: {} + ini@4.1.3: {} + inline-style-parser@0.2.4: {} interpret@1.4.0: {} @@ -10982,6 +11609,8 @@ snapshots: is-docker@2.2.1: {} + is-empty@1.2.0: {} + is-extendable@0.1.1: {} is-extglob@2.1.1: {} @@ -11104,10 +11733,14 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@3.0.2: {} + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} + json5@2.2.3: {} jsonfile@6.1.0: @@ -11135,10 +11768,24 @@ snapshots: leven@3.1.0: {} + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} + lines-and-columns@2.0.4: {} + + load-plugin@6.0.3: + dependencies: + '@npmcli/config': 8.3.4 + import-meta-resolve: 4.2.0 + transitivePeerDependencies: + - bluebird + loader-runner@4.3.0: {} loader-utils@2.0.4: @@ -11746,6 +12393,10 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.7 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -11789,6 +12440,8 @@ snapshots: nanoid@3.3.11: {} + natural-compare@1.4.0: {} + negotiator@0.6.3: {} negotiator@0.6.4: {} @@ -11822,12 +12475,42 @@ snapshots: node-releases@2.0.19: {} + nopt@7.2.1: + dependencies: + abbrev: 2.0.0 + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.1 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} normalize-range@0.1.2: {} normalize-url@8.0.1: {} + npm-install-checks@6.3.0: + dependencies: + semver: 7.7.1 + + npm-normalize-package-bin@3.0.1: {} + + npm-package-arg@11.0.3: + dependencies: + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.7.1 + validate-npm-package-name: 5.0.1 + + npm-pick-manifest@9.1.0: + dependencies: + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 11.0.3 + semver: 7.7.1 + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -11901,6 +12584,15 @@ snapshots: opener@1.5.2: {} + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + p-cancelable@3.0.0: {} p-limit@2.3.0: @@ -11973,6 +12665,14 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-json@7.1.1: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.2 + json-parse-even-better-errors: 3.0.2 + lines-and-columns: 2.0.4 + type-fest: 3.13.1 + parse-numeric-range@1.3.0: {} parse5-htmlparser2-tree-adapter@7.1.0: @@ -12504,6 +13204,8 @@ snapshots: preact@10.26.6: {} + prelude-ls@1.2.1: {} + pretty-error@4.0.0: dependencies: lodash: 4.17.21 @@ -12519,8 +13221,17 @@ snapshots: prismjs@1.30.0: {} + proc-log@4.2.0: {} + process-nextick-args@2.0.1: {} + promise-inflight@1.0.1: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -12585,7 +13296,7 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-dev-utils@12.0.1(typescript@5.8.3)(webpack@5.99.8): + react-dev-utils@12.0.1(eslint@10.7.0(jiti@1.21.7))(typescript@5.8.3)(webpack@5.99.8): dependencies: '@babel/code-frame': 7.27.1 address: 1.2.2 @@ -12596,7 +13307,7 @@ snapshots: 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.8.3)(webpack@5.99.8) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@10.7.0(jiti@1.21.7))(typescript@5.8.3)(webpack@5.99.8) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -12703,6 +13414,11 @@ snapshots: dependencies: pify: 2.3.0 + read-package-json-fast@3.0.2: + dependencies: + json-parse-even-better-errors: 3.0.2 + npm-normalize-package-bin: 3.0.1 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -12737,9 +13453,9 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.0(acorn@8.14.1): + recma-jsx@1.0.0(acorn@8.17.0): dependencies: - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn-jsx: 5.3.2(acorn@8.17.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 @@ -12911,6 +13627,8 @@ snapshots: dependencies: lowercase-keys: 3.0.0 + retry@0.12.0: {} + retry@0.13.1: {} reusify@1.1.0: {} @@ -13170,6 +13888,20 @@ snapshots: space-separated-tokens@2.0.2: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.23 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.23 + + spdx-license-ids@3.0.23: {} + spdy-transport@3.0.0: dependencies: debug: 4.4.0 @@ -13213,6 +13945,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string-width@6.1.0: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 10.4.0 + strip-ansi: 7.1.0 + string-width@7.2.0: dependencies: emoji-regex: 10.4.0 @@ -13286,6 +14024,8 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@9.4.0: {} + supports-preserve-symlinks-flag@1.0.0: {} svg-parser@2.0.4: {} @@ -13300,6 +14040,10 @@ snapshots: csso: 5.0.5 picocolors: 1.1.1 + synckit@0.11.13: + dependencies: + '@pkgr/core': 0.3.6 + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 @@ -13402,12 +14146,18 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + type-fest@0.21.3: {} type-fest@1.4.0: {} type-fest@2.19.0: {} + type-fest@3.13.1: {} + type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -13417,6 +14167,8 @@ snapshots: dependencies: is-typedarray: 1.0.0 + typedarray@0.0.6: {} + typescript@5.8.3: {} undici-types@6.21.0: {} @@ -13434,6 +14186,33 @@ snapshots: unicode-property-aliases-ecmascript@2.1.0: {} + unified-engine@11.2.2: + dependencies: + '@types/concat-stream': 2.0.3 + '@types/debug': 4.1.12 + '@types/is-empty': 1.2.3 + '@types/node': 22.15.21 + '@types/unist': 3.0.3 + concat-stream: 2.0.0 + debug: 4.4.0 + extend: 3.0.2 + glob: 10.4.5 + ignore: 6.0.2 + is-empty: 1.2.0 + is-plain-obj: 4.1.0 + load-plugin: 6.0.3 + parse-json: 7.1.1 + trough: 2.2.0 + unist-util-inspect: 8.1.0 + vfile: 6.0.3 + vfile-message: 4.0.2 + vfile-reporter: 8.1.1 + vfile-statistics: 3.0.0 + yaml: 2.8.2 + transitivePeerDependencies: + - bluebird + - supports-color + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -13448,6 +14227,10 @@ snapshots: dependencies: crypto-random-string: 4.0.0 + unist-util-inspect@8.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is@6.0.0: dependencies: '@types/unist': 3.0.3 @@ -13529,6 +14312,13 @@ snapshots: uuid@8.3.2: {} + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@5.0.1: {} + value-equal@1.0.1: {} vary@1.1.2: {} @@ -13543,11 +14333,34 @@ snapshots: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 + vfile-reporter@8.1.1: + dependencies: + '@types/supports-color': 8.1.3 + string-width: 6.1.0 + supports-color: 9.4.0 + unist-util-stringify-position: 4.0.0 + vfile: 6.0.3 + vfile-message: 4.0.2 + vfile-sort: 4.0.0 + vfile-statistics: 3.0.0 + + vfile-sort@4.0.0: + dependencies: + vfile: 6.0.3 + vfile-message: 4.0.2 + + vfile-statistics@3.0.0: + dependencies: + vfile: 6.0.3 + vfile-message: 4.0.2 + vfile@6.0.3: dependencies: '@types/unist': 3.0.3 vfile-message: 4.0.2 + walk-up-path@3.0.1: {} + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 @@ -13711,6 +14524,8 @@ snapshots: wildcard@2.0.1: {} + word-wrap@1.2.5: {} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 diff --git a/scripts/eslint-rules/markup-indent.mjs b/scripts/eslint-rules/markup-indent.mjs new file mode 100644 index 000000000..d4ec346f5 --- /dev/null +++ b/scripts/eslint-rules/markup-indent.mjs @@ -0,0 +1,433 @@ +const INDENT_SIZE = 2; +const TAG_NAME_PATTERN = /^[A-Za-z][\w.:-]*/; +const MARKDOWN_CONTAINER_PATTERN = + /^(?:[ \t]*>[ \t]*)*(?:[ \t]*(?:[-+*]|\d+[.)])[ \t]+)?[ \t]*$/; +const MARKDOWN_MARKER_PATTERN = /(?:>|(?:^|[ \t])(?:[-+*]|\d+[.)])(?=[ \t]))/; +const RAW_TEXT_ELEMENTS = new Set(['script', 'style']); +const VOID_ELEMENTS = new Set([ + 'area', + 'base', + 'br', + 'col', + 'embed', + 'hr', + 'img', + 'input', + 'link', + 'meta', + 'param', + 'source', + 'track', + 'wbr', +]); + +function createIndentFix(sourceCode, line, actual, expected) { + return (fixer) => { + const start = sourceCode.getIndexFromLoc({ line, column: 0 }); + return fixer.replaceTextRange( + [start, start + actual], + ' '.repeat(expected) + ); + }; +} + +function findTagEnd(content, start, state) { + for (let index = start; index < content.length; index += 1) { + const character = content[index]; + + if (state.quote) { + if (character === '\\') { + index += 1; + } else if (character === state.quote) { + state.quote = undefined; + } + continue; + } + + if (character === '"' || character === "'" || character === '`') { + state.quote = character; + } else if (character === '{') { + state.braceDepth += 1; + } else if (character === '}') { + state.braceDepth = Math.max(0, state.braceDepth - 1); + } else if (character === '>' && state.braceDepth === 0) { + return index; + } + } + + return -1; +} + +function findNextTagStart(content, start) { + let index = content.indexOf('<', start); + + while (index !== -1) { + const nameStart = content[index + 1] === '/' ? index + 2 : index + 1; + const name = content.slice(nameStart).match(TAG_NAME_PATTERN)?.[0]; + const boundary = name && content[nameStart + name.length]; + + if (name && (!boundary || /[\s/>]/.test(boundary))) { + return index; + } + + index = content.indexOf('<', index + 1); + } + + return -1; +} + +function getLinePosition(content, tagColumn) { + const prefix = content.slice(0, tagColumn); + const block = MARKDOWN_CONTAINER_PATTERN.test(prefix); + + return { + block, + fixable: block && !MARKDOWN_MARKER_PATTERN.test(prefix), + hasMarkdownMarker: MARKDOWN_MARKER_PATTERN.test(prefix), + }; +} + +function isSelfClosing(content, tagEnd) { + return content.slice(0, tagEnd).trimEnd().endsWith('/'); +} + +export default { + meta: { + type: 'layout', + docs: { + description: 'Enforce indentation for block HTML and JSX markup', + }, + fixable: 'whitespace', + schema: [], + messages: { + indentation: + 'Expected indentation of {{expected}} spaces but found {{actual}}.', + markupAfterComment: 'Move markup after a comment to a new line.', + unclosedTag: 'Tag <{{tag}}> is not closed before its parent.', + unexpectedClosingTag: + 'Closing tag has no matching opening tag.', + }, + }, + create(context) { + const sourceCode = context.sourceCode; + + function reportIndentation(line, actual, expected, fixable) { + if (actual === expected) { + return; + } + + context.report({ + loc: { + start: { line, column: actual }, + end: { line, column: actual + 1 }, + }, + messageId: 'indentation', + data: { actual, expected }, + fix: fixable + ? createIndentFix(sourceCode, line, actual, expected) + : undefined, + }); + } + + function reportUnclosedTag(element) { + context.report({ + loc: { + start: { line: element.line, column: element.column }, + end: { + line: element.line, + column: element.column + element.tag.length + 1, + }, + }, + messageId: 'unclosedTag', + data: { tag: element.tag }, + }); + } + + return { + 'Program:exit'() { + const elements = []; + let fence; + let inHtmlComment = false; + let inJsxComment = false; + let pendingElement; + + function pushElement(element, content, tagEnd) { + if (!element.void && !isSelfClosing(content, tagEnd)) { + elements.push(element); + } + } + + function closeElement(tag, line, column, position) { + const matchingIndex = elements.findLastIndex( + (element) => element.tag === tag + ); + + if (matchingIndex === -1) { + if (VOID_ELEMENTS.has(tag)) { + return; + } + + context.report({ + loc: { + start: { line, column }, + end: { line, column: column + tag.length + 3 }, + }, + messageId: 'unexpectedClosingTag', + data: { tag }, + }); + return; + } + + if (matchingIndex !== elements.length - 1) { + elements + .slice(matchingIndex + 1) + .forEach((element) => reportUnclosedTag(element)); + elements.length = matchingIndex; + return; + } + + const element = elements.pop(); + + if (position.block) { + reportIndentation( + line, + column, + element.indentation, + position.fixable + ); + } + } + + function getPreviousNonEmptyLine(line) { + for (let index = line - 2; index >= 0; index -= 1) { + const previousLine = sourceCode.lines[index]; + + if (previousLine.trim() !== '') { + return previousLine; + } + } + + return undefined; + } + + function processContent(content, line, start = 0, allowBlock = true) { + let cursor = start; + let canBeBlock = allowBlock; + let markupAfterComment = false; + + while (cursor < content.length) { + const rawElement = elements.at(-1); + + if (rawElement && RAW_TEXT_ELEMENTS.has(rawElement.tag)) { + const closingPattern = new RegExp( + ``, + 'i' + ); + const closingMatch = closingPattern.exec(content.slice(cursor)); + + if (!closingMatch) { + return; + } + + const column = cursor + closingMatch.index; + const linePosition = getLinePosition(content, column); + closeElement(rawElement.tag, line, column, { + ...linePosition, + block: canBeBlock && linePosition.block, + }); + cursor = column + closingMatch[0].length; + canBeBlock = false; + continue; + } + + if (inHtmlComment || inJsxComment) { + const closingMarker = inHtmlComment ? '-->' : '*/}'; + const closingIndex = content.indexOf(closingMarker, cursor); + + if (closingIndex === -1) { + return; + } + + inHtmlComment = false; + inJsxComment = false; + cursor = closingIndex + closingMarker.length; + markupAfterComment = true; + continue; + } + + const htmlCommentIndex = content.indexOf('