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
-
- -
-
- -
+
+ +
+
+ +
## 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 d8d504d20..b54f27912 100644 --- a/docs/components/overview.md +++ b/docs/components/overview.md @@ -14,58 +14,53 @@ import { CategoryButton } from '@site/src/components/CategoryButton'; # - - + -![Application frame](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-249&t=gkh6VNlJun96I6Ac-4) - - + -![Navigation and hierarchy](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-259&t=gkh6VNlJun96I6Ac-4) - - + -![Containers and layouts](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-269&t=gkh6VNlJun96I6Ac-4) - - + -![Forms](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-283&t=gkh6VNlJun96I6Ac-4) - - + -![Input fields and selections](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-298&t=gkh6VNlJun96I6Ac-11) - - + -![Buttons and actions](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-305&t=gkh6VNlJun96I6Ac-11) - - + -![System feedback and status](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-332&t=gkh6VNlJun96I6Ac-11) - - + -![Data display](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-370&t=gkh6VNlJun96I6Ac-11) - - -![Chat](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=7974-3280&t=HrpSIFfB7yjzt741-4) - - + -![Charts](https://www.figma.com/design/wEptRgAezDU1z80Cn3eZ0o/iX-Documentation-illustrations?node-id=5186-387&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 c5c73ae7c..14c7f71df 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/grammar.md b/docs/guidelines/language/basics/grammar.md index 6060c1ddc..8359f8c3c 100644 --- a/docs/guidelines/language/basics/grammar.md +++ b/docs/guidelines/language/basics/grammar.md @@ -15,21 +15,21 @@ description: Explore the most important grammar points in UX writing for industr Verbs can take many forms (upload, uploading, uploaded, has been uploaded, is being uploaded). To save space and increase clarity, use simple verb forms in the present or the past.
-
-
    -
  • While the software updates, work in offline mode.
  • -
  • load / loaded
  • -
  • File uploaded.
  • -
-
- -
-
    -
  • While the software is being updated, continue working in offline mode.
  • -
  • was loading / has been loaded
  • -
  • File has been uploaded.
  • -
-
+
+
    +
  • While the software updates, work in offline mode.
  • +
  • load / loaded
  • +
  • File uploaded.
  • +
+
+ +
+
    +
  • While the software is being updated, continue working in offline mode.
  • +
  • was loading / has been loaded
  • +
  • File has been uploaded.
  • +
+
## Use active voice @@ -37,25 +37,25 @@ Verbs can take many forms (upload, uploading, uploaded, has been uploaded, is be We want our users to immediately understand who is doing what in our applications, e.g. the system or another user. Using active voice (instead of passive voice) puts the user in control, uses fewer words and space, and makes it clear who is responsible for actions.
-
-
    -
  • Open the configuration file.
  • -
  • The system saves your changes automatically.
  • -
  • The system detected a network error.
  • -
  • Enter your credentials to continue.
  • -
  • Select Start to begin calibration.
  • -
-
- -
-
    -
  • The configuration file is opened.
  • -
  • Your changes are saved automatically.
  • -
  • A network error was detected.
  • -
  • Credentials must be entered to continue.
  • -
  • Calibration will be started when Start is selected.
  • -
-
+
+
    +
  • Open the configuration file.
  • +
  • The system saves your changes automatically.
  • +
  • The system detected a network error.
  • +
  • Enter your credentials to continue.
  • +
  • Select Start to begin calibration.
  • +
+
+ +
+
    +
  • The configuration file is opened.
  • +
  • Your changes are saved automatically.
  • +
  • A network error was detected.
  • +
  • Credentials must be entered to continue.
  • +
  • Calibration will be started when Start is selected.
  • +
+
## Use passive voice thoughtfully @@ -65,27 +65,27 @@ While active voice is preferred within UI text, there are specific situations wh Use passive voice when the action is more important for the user, or when you want to make system errors or actions less personal. Typically, passive voice is used for system errors or unknown or unexpected events, and is formed using “to be” + past participle (was created, is processed). It is also strategically used to avoid a blaming tone towards users, such as: “The report could not be saved.” instead of “You failed to save the report.”
-
-
    -
  • The session was ended due to inactivity.
  • -
  • The connection was lost due to network timeout.
  • -
  • The system will be unavailable during the update.
  • -
  • Data could not be saved to the database.
  • -
  • This field is required to continue.
  • -
  • The payment could not be processed.
  • -
-
- -
-
    -
  • You were logged out because you were inactive.
  • -
  • You lost the connection because your network timed out.
  • -
  • We will make the system unavailable during the update.
  • -
  • You failed to save the data to the database.
  • -
  • You forgot to fill in this field.
  • -
  • You entered invalid payment information.
  • -
-
+
+
    +
  • The session was ended due to inactivity.
  • +
  • The connection was lost due to network timeout.
  • +
  • The system will be unavailable during the update.
  • +
  • Data could not be saved to the database.
  • +
  • This field is required to continue.
  • +
  • The payment could not be processed.
  • +
+
+ +
+
    +
  • You were logged out because you were inactive.
  • +
  • You lost the connection because your network timed out.
  • +
  • We will make the system unavailable during the update.
  • +
  • You failed to save the data to the database.
  • +
  • You forgot to fill in this field.
  • +
  • You entered invalid payment information.
  • +
+
## Use imperative (command) mood @@ -93,21 +93,21 @@ Use passive voice when the action is more important for the user, or when you wa Use the imperative mood (command form) for buttons and action-oriented UI elements. This creates clear, direct instructions by using the base verb form without a subject, reducing cognitive load and speeding up user actions. The imperative is typically used for button labels, calls-to-action and instructional text.
-
-
    -
  • Save changes
  • -
  • Delete items
  • -
  • Enter shipping address
  • -
-
- -
-
    -
  • To save changes, select Save
  • -
  • Click here to delete items
  • -
  • You should enter your shipping address
  • -
-
+
+
    +
  • Save changes
  • +
  • Delete items
  • +
  • Enter shipping address
  • +
+
+ +
+
    +
  • To save changes, select Save
  • +
  • Click here to delete items
  • +
  • You should enter your shipping address
  • +
+
## Use past and future tenses clearly @@ -117,64 +117,64 @@ There are times when we need to specify something happened in the past or explai ### Reminders
-
-
    -
  • Your trial will expire in 3 days.
  • -
  • Maintenance will begin at 14:00 tomorrow.
  • -
  • Backup will run tonight at 23:00.
  • -
-
+
+
    +
  • Your trial will expire in 3 days.
  • +
  • Maintenance will begin at 14:00 tomorrow.
  • +
  • Backup will run tonight at 23:00.
  • +
+
### Scheduled actions
-
-
    -
  • Reports will be sent on April 1.
  • -
  • Your license will renew next month.
  • -
  • Data will sync in 5 minutes.
  • -
  • Your report will be ready by 17:00 today.
  • -
-
+
+
    +
  • Reports will be sent on April 1.
  • +
  • Your license will renew next month.
  • +
  • Data will sync in 5 minutes.
  • +
  • Your report will be ready by 17:00 today.
  • +
+
### Warnings
-
-
    -
  • Unsaved changes will be lost.
  • -
  • This action will delete all data.
  • -
  • You will lose access after logout.
  • -
-
+
+
    +
  • Unsaved changes will be lost.
  • +
  • This action will delete all data.
  • +
  • You will lose access after logout.
  • +
+
### Notifications
-
-
    -
  • Your password changed 2 hours ago.
  • -
  • Account created on March 15.
  • -
  • Download completed at 09:30.
  • -
-
+
+
    +
  • Your password changed 2 hours ago.
  • +
  • Account created on March 15.
  • +
  • Download completed at 09:30.
  • +
+
### Toast and confirmation messages
-
-
    -
  • Settings saved
  • -
  • 12 files exported
  • -
  • Changes published
  • -
  • Profile updated
  • -
  • Team member assigned
  • -
-
+
+
    +
  • Settings saved
  • +
  • 12 files exported
  • +
  • Changes published
  • +
  • Profile updated
  • +
  • Team member assigned
  • +
+
## Articles (a / an / the) @@ -184,41 +184,41 @@ Articles help users understand whether you're referring to something specific (t Use articles in instructional texts, messages and explanations.
-
-
    -
  • The system detected an error in the configuration.
  • -
  • Enter the unique project protection password in the admin profile page.
  • -
  • Select a file from your computer to upload.
  • -
  • Choose a network from the list.
  • -
-
- -
-
    -
  • System detected error in configuration.
  • -
  • Enter unique project protection password in admin profile page.
  • -
  • Select the run.csv file from your computer to upload.
  • -
  • Choose the guest network from the list.
  • -
-
+
+
    +
  • The system detected an error in the configuration.
  • +
  • Enter the unique project protection password in the admin profile page.
  • +
  • Select a file from your computer to upload.
  • +
  • Choose a network from the list.
  • +
+
+ +
+
    +
  • System detected error in configuration.
  • +
  • Enter unique project protection password in admin profile page.
  • +
  • Select the run.csv file from your computer to upload.
  • +
  • Choose the guest network from the list.
  • +
+
Omit articles in short UI labels, such as buttons, titles and field names, where the context is clear.
-
-
    -
  • Click Start to begin.
  • -
  • Open Settings menu.
  • -
-
+
+
    +
  • Click Start to begin.
  • +
  • Open Settings menu.
  • +
+
-
-
    -
  • Click the Start button to begin.
  • -
  • Open the Settings menu.
  • -
-
+
+
    +
  • Click the Start button to begin.
  • +
  • Open the Settings menu.
  • +
+
## Singular vs. plural @@ -226,45 +226,45 @@ Omit articles in short UI labels, such as buttons, titles and field names, where Use grammatically correct singular and plural forms to match the quantity being described when technically feasible. When not, use the plural without any additional punctuation.
-
-
    -
  • 1 file selected
  • -
  • 5 users active
  • -
  • Processing 1 request...
  • -
  • Assets: 0
  • -
  • Hazards: 1
  • -
-
- -
-
    -
  • 1 files selected
  • -
  • 5 user active
  • -
  • Processing 1 requests...
  • -
  • Asset(s): 0
  • -
  • Hazard: 5
  • -
-
+
+
    +
  • 1 file selected
  • +
  • 5 users active
  • +
  • Processing 1 request...
  • +
  • Assets: 0
  • +
  • Hazards: 1
  • +
+
+ +
+
    +
  • 1 files selected
  • +
  • 5 user active
  • +
  • Processing 1 requests...
  • +
  • Asset(s): 0
  • +
  • Hazard: 5
  • +
+
Use "No" for empty states instead of “0”.
-
-
    -
  • No items found
  • -
  • No devices connected
  • -
  • No results available
  • -
-
- -
-
    -
  • 0 items found
  • -
  • 0 devices connected
  • -
  • 0 results available
  • -
-
+
+
    +
  • No items found
  • +
  • No devices connected
  • +
  • No results available
  • +
+
+ +
+
    +
  • 0 items found
  • +
  • 0 devices connected
  • +
  • 0 results available
  • +
+
## Conditional statements (if / when) @@ -272,27 +272,27 @@ Use "No" for empty states instead of “0”. Use "if" for uncertain conditions or user choices, and "when" for inevitable or expected events. This distinction helps users understand whether something might happen or will definitely happen when explaining system behavior and consequences.
-
-
    -
  • If you close this window, unsaved changes will be lost.
  • -
  • When the download completes, you'll receive a notification.
  • -
  • When the system restarts, your session will end.
  • -
  • If you need help, contact support.
  • -
  • When calibration finishes, the device will be ready.
  • -
  • If you delete this file, it cannot be recovered.
  • -
-
- -
-
    -
  • When you close this window, unsaved changes will be lost.
  • -
  • If the download completes, you'll receive a notification.
  • -
  • If the system restarts, your session will end.
  • -
  • When you need help, contact support.
  • -
  • If calibration finishes, the device will be ready.
  • -
  • When you delete this file, it cannot be recovered.
  • -
-
+
+
    +
  • If you close this window, unsaved changes will be lost.
  • +
  • When the download completes, you'll receive a notification.
  • +
  • When the system restarts, your session will end.
  • +
  • If you need help, contact support.
  • +
  • When calibration finishes, the device will be ready.
  • +
  • If you delete this file, it cannot be recovered.
  • +
+
+ +
+
    +
  • When you close this window, unsaved changes will be lost.
  • +
  • If the download completes, you'll receive a notification.
  • +
  • If the system restarts, your session will end.
  • +
  • When you need help, contact support.
  • +
  • If calibration finishes, the device will be ready.
  • +
  • When you delete this file, it cannot be recovered.
  • +
+
## Related diff --git a/docs/guidelines/language/basics/voice-and-tone.md b/docs/guidelines/language/basics/voice-and-tone.md index e845658aa..53a438fca 100644 --- a/docs/guidelines/language/basics/voice-and-tone.md +++ b/docs/guidelines/language/basics/voice-and-tone.md @@ -15,146 +15,146 @@ description: For our UI text, we use natural, conversational language to talk to We use American English for our UI text and recommend choosing one language variat per product to maintain consistency with spelling and grammar.
-
-
    -
  • Optimize sensor
  • -
  • Data is invalid
  • -
  • Confirmation dialog
  • -
  • License management
  • -
-
-
-
    -
  • Optimise sensor
  • -
  • Data are invalid
  • -
  • Confirmation dialogue
  • -
  • Licence management
  • -
-
+
+
    +
  • Optimize sensor
  • +
  • Data is invalid
  • +
  • Confirmation dialog
  • +
  • License management
  • +
+
+
+
    +
  • Optimise sensor
  • +
  • Data are invalid
  • +
  • Confirmation dialogue
  • +
  • Licence management
  • +
+
## Use fewer words Use sentences only when necessary and write in short, scannable segments instead of paragraphs.
-
-
    -
  • Select Submit to save changes.
  • -
-
-
-
    -
  • Please select the Submit button to save your changes so you do not lose data.
  • -
-
+
+
    +
  • Select Submit to save changes.
  • +
+
+
+
    +
  • Please select the Submit button to save your changes so you do not lose data.
  • +
+
## Use simple language Use specific and clear wording that can be understood by everyone, not only industry experts.
-
-
    -
  • Failed to upload. Try again.
  • -
-
-
-
    -
  • System error #232/01
  • -
-
+
+
    +
  • Failed to upload. Try again.
  • +
+
+
+
    +
  • System error #232/01
  • +
+
## Use positive framing Use positive language whenever possible and focus on what users can achieve with the product.
-
-
    -
  • Values are displayed when you select events.
  • -
  • Select an event to view values.
  • -
-
-
-
    -
  • Values aren’t displayed when none are selected.
  • -
  • Values do not appear until an event is selected.
  • -
-
+
+
    +
  • Values are displayed when you select events.
  • +
  • Select an event to view values.
  • +
+
+
+
    +
  • Values aren’t displayed when none are selected.
  • +
  • Values do not appear until an event is selected.
  • +
+
## Use gender-neutral terms Avoid gender-specific language and terms in industrial applications.
-
-
    -
  • they / them / their
  • -
  • The operator must verify their credentials before accessing the control panel.
  • -
  • Contact the supervisor if you need their approval.
  • -
-
-
-
    -
  • his / hers / him
  • -
  • The operator must verify his credentials before accessing the control panel.
  • -
  • Contact the supervisor if you need her approval.
  • -
-
+
+
    +
  • they / them / their
  • +
  • The operator must verify their credentials before accessing the control panel.
  • +
  • Contact the supervisor if you need their approval.
  • +
+
+
+
    +
  • his / hers / him
  • +
  • The operator must verify his credentials before accessing the control panel.
  • +
  • Contact the supervisor if you need her approval.
  • +
+
## Use polite language Only use “please” and “sorry” for extremely inconvenient or unforeseen events for your users. Using these terms should be an exception and used rarely within the UI.
-
-
    -
  • Enter password
  • -
  • Your dashboard closed unexpectedly. Log in to continue working.
  • -
-
-
-
    -
  • Please enter password
  • -
  • We are very sorry your dashboard closed unexpectedly. Please log in again.
  • -
-
+
+
    +
  • Enter password
  • +
  • Your dashboard closed unexpectedly. Log in to continue working.
  • +
+
+
+
    +
  • Please enter password
  • +
  • We are very sorry your dashboard closed unexpectedly. Please log in again.
  • +
+
## Use shortened word forms thoughtfully Use positive shortened word forms such as “we’ve” and “you’ll” (contractions) to sound authentic.
-
-
    -
  • you’ll
  • -
  • we’ve
  • -
-
+
+
    +
  • you’ll
  • +
  • we’ve
  • +
+
-
-
    -
  • you will
  • -
  • we have
  • -
-
+
+
    +
  • you will
  • +
  • we have
  • +
+
Avoid using negative shortened word forms such as “can’t” and “won’t” as they can sound too casual and direct.
-
-
    -
  • cannot
  • -
  • will not
  • -
-
-
-
    -
  • can’t
  • -
  • won’t
  • -
-
+
+
    +
  • cannot
  • +
  • will not
  • +
+
+
+
    +
  • can’t
  • +
  • won’t
  • +
+
## Related 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 0589cea59..04fa92c44 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,343 +15,343 @@ 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
-
-
    -
  • Do explain compliance requirements when applicable, e.g. “Required by company security policy”
  • -
  • Do use consistent terminology to reduce user friction and frustration
  • -
  • Do show password policies before users start writing within the UI
  • -
-
-
-
    -
  • Don’t use questions such as “Forgot your password?”
  • -
-
+
+
    +
  • Do explain compliance requirements when applicable, e.g. “Required by company security policy”
  • +
  • Do use consistent terminology to reduce user friction and frustration
  • +
  • Do show password policies before users start writing within the UI
  • +
+
+
+
    +
  • Don’t use questions such as “Forgot your password?”
  • +
+
## Related 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 de1750b05..d4eba8bd9 100644 --- a/docs/guidelines/language/menu-functions-and-ui-labels/onboarding.md +++ b/docs/guidelines/language/menu-functions-and-ui-labels/onboarding.md @@ -23,146 +23,146 @@ 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
-
-
    -
  • Do reveal information step-by-step to avoid cognitive overload
  • -
  • Do personalize the onboarding process to increase engagement and retainment
  • -
-
-
-
    -
  • Don’t overload users with too much information on one screen, instead use pages or split news
  • -
  • Don’t embed critical text in images as it’s hard to translate and read
  • -
  • Don’t rely on dismissible popups for essential setup steps
  • -
-
+
+
    +
  • Do reveal information step-by-step to avoid cognitive overload
  • +
  • Do personalize the onboarding process to increase engagement and retainment
  • +
+
+
+
    +
  • Don’t overload users with too much information on one screen, instead use pages or split news
  • +
  • Don’t embed critical text in images as it’s hard to translate and read
  • +
  • Don’t rely on dismissible popups for essential setup steps
  • +
+
## Related 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 600f3ff3d..bc014f23a 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,127 +23,127 @@ 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
-
-
    -
  • Do allow users to close, postpone or choose to not see the content again
  • -
-
-
-
    -
  • Don’t add so much content that users need to scroll, instead use pages or split news
  • -
  • Don’t embed critical text in images as it’s hard to translate and read
  • -
  • Don’t add time-critical actions only in announcements as they are too easy to close
  • -
-
+
+
    +
  • Do allow users to close, postpone or choose to not see the content again
  • +
+
+
+
    +
  • Don’t add so much content that users need to scroll, instead use pages or split news
  • +
  • Don’t embed critical text in images as it’s hard to translate and read
  • +
  • Don’t add time-critical actions only in announcements as they are too easy to close
  • +
+
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 4b6bbe6b1..e38f9491d 100644 --- a/docs/guidelines/language/messaging/error-pages.md +++ b/docs/guidelines/language/messaging/error-pages.md @@ -28,77 +28,77 @@ 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
-
-
    -
  • Do give users a way out so the error page is not a dead end with only “Try again.” or “Try again later.”
  • -
  • Do adapt your recommended actions depending on your use case and what is technically possible
  • -
-
-
-
    -
  • Don’t say your team is working on a solution to the error unless this is true
  • -
-
+
+
    +
  • Do give users a way out so the error page is not a dead end with only “Try again.” or “Try again later.”
  • +
  • Do adapt your recommended actions depending on your use case and what is technically possible
  • +
+
+
+
    +
  • Don’t say your team is working on a solution to the error unless this is true
  • +
+
## Related 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/operational-emails/general-information-and-administrative-emails/usage.mdx b/docs/guidelines/language/operational-emails/general-information-and-administrative-emails/usage.mdx index f36695de8..561c2d4cb 100644 --- a/docs/guidelines/language/operational-emails/general-information-and-administrative-emails/usage.mdx +++ b/docs/guidelines/language/operational-emails/general-information-and-administrative-emails/usage.mdx @@ -16,14 +16,14 @@ Use these rules alongside the [General rules](../overview-operational-emails/usa Use a subject line that accurately reflects the email's content and purpose.
-
-
    -
  • [App name] | New Terms of Use
  • -
  • [App name] | Changes to your data options
  • -
  • [App name] | Join our user testing
  • -
  • [App name] | Tell us about your app experience
  • -
-
+
+
    +
  • [App name] | New Terms of Use
  • +
  • [App name] | Changes to your data options
  • +
  • [App name] | Join our user testing
  • +
  • [App name] | Tell us about your app experience
  • +
+
## Body text @@ -33,51 +33,51 @@ Use a subject line that accurately reflects the email's content and purpose. Be specific when asking for confirmation or agreement.
-
-
    -
  • You have until January 31, 2026 to confirm the new Terms of Use.
  • -
-
-
-
    -
  • Reading this email means you agree to our new Terms of Use.
  • -
-
+
+
    +
  • You have until January 31, 2026 to confirm the new Terms of Use.
  • +
+
+
+
    +
  • Reading this email means you agree to our new Terms of Use.
  • +
+
Include all relevant details of the agreement, order or change for the customer's records.
-
-
    -
  • Your order for 5 "SINAMICS G120 Drives" (Order #QuantumShift Platform-2025-12345) has been received and processed. Estimated delivery: January 15, 2026.
  • -
-
+
+
    +
  • Your order for 5 "SINAMICS G120 Drives" (Order #QuantumShift Platform-2025-12345) has been received and processed. Estimated delivery: January 15, 2026.
  • +
+
Avoid ambiguous phrasing that could lead to misunderstandings.
-
-
    -
  • Your support contract for "Automation System S7-1500" has been renewed for one year, effective January 1, 2026.
  • -
-
-
-
    -
  • We've extended your S7-1500 support.
  • -
-
+
+
    +
  • Your support contract for "Automation System S7-1500" has been renewed for one year, effective January 1, 2026.
  • +
+
+
+
    +
  • We've extended your S7-1500 support.
  • +
+
Include a method for the customer to review, modify or cancel the agreement or action if applicable.
-
-
    -
  • You can review your subscription details or manage your preferences at any time through your [App name] account dashboard: [link to dashboard].
  • -
-
+
+
    +
  • You can review your subscription details or manage your preferences at any time through your [App name] account dashboard: [link to dashboard].
  • +
+
### Feedback and surveys @@ -85,36 +85,36 @@ Include a method for the customer to review, modify or cancel the agreement or a Use clear and polite invitations that explain the purpose of the survey.
-
-
    -
  • We value your opinion and would appreciate feedback on your recent interaction with our support team.
  • -
-
+
+
    +
  • We value your opinion and would appreciate feedback on your recent interaction with our support team.
  • +
+
Include an estimate of the time required to complete the survey.
-
-
    -
  • This short survey will take approximately 5 minutes to complete.
  • -
-
+
+
    +
  • This short survey will take approximately 5 minutes to complete.
  • +
+
Include direct and secure links or buttons to make participation easier.
-
-
    -
  • Share your thoughts via this secure link: [Link to survey].
  • -
-
-
-
    -
  • Go to our website to find the survey.
  • -
-
+
+
    +
  • Share your thoughts via this secure link: [Link to survey].
  • +
+
+
+
    +
  • Go to our website to find the survey.
  • +
+
### Communication and contact @@ -122,22 +122,22 @@ Include direct and secure links or buttons to make participation easier. Include specific reference numbers or identifiers to help users track issues.
-
-
    -
  • When contacting support, reference ticket ID: [App name]-2026-54321.
  • -
-
+
+
    +
  • When contacting support, reference ticket ID: [App name]-2026-54321.
  • +
+
Avoid hiding (or making it difficult) to find options for managing communication preferences or unsubscribing.
-
-
    -
  • Manage your email preferences here: [link to preference center].
  • -
  • Unsubscribe from emails here.
  • -
-
+
+
    +
  • Manage your email preferences here: [link to preference center].
  • +
  • Unsubscribe from emails here.
  • +
+
## Related diff --git a/docs/guidelines/language/operational-emails/operative-alarms-and-events/usage.mdx b/docs/guidelines/language/operational-emails/operative-alarms-and-events/usage.mdx index 553e891e5..902ef418a 100644 --- a/docs/guidelines/language/operational-emails/operative-alarms-and-events/usage.mdx +++ b/docs/guidelines/language/operational-emails/operative-alarms-and-events/usage.mdx @@ -16,29 +16,29 @@ Use these rules alongside the [General rules](../overview-operational-emails/usa State reason and criticality of the email directly in the subject line.
-
-
    -
  • [App name] | Failure detected in Plant A
  • -
  • [App name] | Critical risk of cyberattack
  • -
  • [App name] | Threshold change for asset TG_1234
  • -
-
+
+
    +
  • [App name] | Failure detected in Plant A
  • +
  • [App name] | Critical risk of cyberattack
  • +
  • [App name] | Threshold change for asset TG_1234
  • +
+
Use language that reflects the urgency of the email and mentions if actions are required.
-
-
    -
  • [App name] | Immediate action required | Security vulnerability fix
  • -
  • [App name] | No action required | New events detected
  • -
-
-
-
    -
  • [App name] | Security issue
  • -
-
+
+
    +
  • [App name] | Immediate action required | Security vulnerability fix
  • +
  • [App name] | No action required | New events detected
  • +
+
+
+
    +
  • [App name] | Security issue
  • +
+
## Body text @@ -46,74 +46,74 @@ Use language that reflects the urgency of the email and mentions if actions are Be as specific as possible and tell users exactly what happened (what, when, how).
-
-
    -
  • Critical alarm immediate attention required: Power supply failure detected in Plant A.
    +
    +
      +
    • Critical alarm immediate attention required: Power supply failure detected in Plant A.
        • Power supply failure detected in Plant A.
        • Event details: Overload detected on Transformer T-102 at 14:35 (UTC+2).
        • Location: Nuremberg facility 32/A.
    • -
    -
    +
+
Explain consequences and solutions about the event whenever possible.
-
-
    -
  • What you should do
  • -
  • Immediate: Reduce the load on T-102 by redistributing power to backup transformers.
  • -
  • Short-term: Inspect the transformer for signs of damage or wear.
  • -
  • Monitor: Check the load distribution system to identify why the overload occurred.
  • -
  • Follow-up: Schedule a maintenance review to prevent future overloads.
  • -
-
+
+
    +
  • What you should do
  • +
  • Immediate: Reduce the load on T-102 by redistributing power to backup transformers.
  • +
  • Short-term: Inspect the transformer for signs of damage or wear.
  • +
  • Monitor: Check the load distribution system to identify why the overload occurred.
  • +
  • Follow-up: Schedule a maintenance review to prevent future overloads.
  • +
+
Avoid vague timing or unclear instructions.
-
-
    -
  • Act immediately.
  • -
-
-
-
    -
  • Act soon.
  • -
-
+
+
    +
  • Act immediately.
  • +
+
+
+
    +
  • Act soon.
  • +
+
Use clear, action-oriented instructions for users, avoiding words like may, should or recommend.
-
-
    -
  • Switch to backup power and confirm system status in the portal.
  • -
-
-
-
    -
  • You should switch to backup power when possible.
  • -
  • You may want to switch to an alternative power supply.
  • -
-
+
+
    +
  • Switch to backup power and confirm system status in the portal.
  • +
+
+
+
    +
  • You should switch to backup power when possible.
  • +
  • You may want to switch to an alternative power supply.
  • +
+
Explain if and how users can resolve issues or act with links, buttons, and suggestions.
-
-
    -
  • No action required. The vulnerabilities have been located and logged. [Open Log files] for more details.
  • -
-
-
-
    -
  • We found 1000 vulnerabilities! This means your plant is in danger!
  • -
-
+
+
    +
  • No action required. The vulnerabilities have been located and logged. [Open Log files] for more details.
  • +
+
+
+
    +
  • We found 1000 vulnerabilities! This means your plant is in danger!
  • +
+
## Related diff --git a/docs/guidelines/language/operational-emails/overview-operational-emails/usage.mdx b/docs/guidelines/language/operational-emails/overview-operational-emails/usage.mdx index be595a7c7..8e1d30244 100644 --- a/docs/guidelines/language/operational-emails/overview-operational-emails/usage.mdx +++ b/docs/guidelines/language/operational-emails/overview-operational-emails/usage.mdx @@ -18,106 +18,106 @@ All placeholders are shown with square brackets, e.g. [placeholder]. We have use Keep emails short, add relevant information and avoid complex and lengthy sentences.
-
-
    -
  • Renew your license before December 31, 2026.
  • -
-
-
-
    -
  • It is recommended by us that you renew your license before December 31 avoiding a possible delay in service.
  • -
-
+
+
    +
  • Renew your license before December 31, 2026.
  • +
+
+
+
    +
  • It is recommended by us that you renew your license before December 31 avoiding a possible delay in service.
  • +
+
Use past tense for completed events.
-
-
    -
  • Payment was processed Tuesday, November 11, 2025.
  • -
-
-
-
    -
  • Payment is processing Tuesday, November 11, 2025.
  • -
-
+
+
    +
  • Payment was processed Tuesday, November 11, 2025.
  • +
+
+
+
    +
  • Payment is processing Tuesday, November 11, 2025.
  • +
+
Use future tense for upcoming actions or scheduled events.
-
-
    -
  • We will deploy firmware Version 5.3 on November 22.
  • -
-
-
-
    -
  • We deploy firmware Version 5.3 on November 22.
  • -
-
+
+
    +
  • We will deploy firmware Version 5.3 on November 22.
  • +
+
+
+
    +
  • We deploy firmware Version 5.3 on November 22.
  • +
+
Use the present perfect passive tense (have been / done) for system-generated confirmations or assignments.
-
-
    -
  • You have been assigned the role of "Energy Analyst".
  • -
-
-
-
    -
  • The system assigned you the role of "Energy Analyst".
  • -
-
+
+
    +
  • You have been assigned the role of "Energy Analyst".
  • +
+
+
+
    +
  • The system assigned you the role of "Energy Analyst".
  • +
+
Use the past active tense when someone manually assigns a task or role.
-
-
    -
  • John Smith assigned the following task to you:
  • -
-
-
-
    -
  • You have been assigned the following task by John Smith.
  • -
-
+
+
    +
  • John Smith assigned the following task to you:
  • +
+
+
+
    +
  • You have been assigned the following task by John Smith.
  • +
+
Use sentence case in your emails (capitalize only the first word of a sentence or heading and any proper nouns).
-
-
    -
  • What's happening
  • -
-
-
-
    -
  • What's Happening
  • -
-
+
+
    +
  • What's happening
  • +
+
+
+
    +
  • What's Happening
  • +
+
Use typographic double quotation marks for opening quotes " (Unicode U+201C) and for closing quotes " (Unicode U+201D) instead of single marks for consistency.
-
-
    -
  • You have been assigned the role of "Energy Analyst".
  • -
-
-
-
    -
  • You have been assigned the role of 'Energy Analyst'.
  • -
-
+
+
    +
  • You have been assigned the role of "Energy Analyst".
  • +
+
+
+
    +
  • You have been assigned the role of 'Energy Analyst'.
  • +
+
## Subject lines @@ -125,63 +125,63 @@ Use typographic double quotation marks for opening quotes " (Unicode U+201C) and Start the subject line with the application name. Use pipe separators to clearly structure the subject line, and separate the product name, action and topic.
-
-
    -
  • [App name] | Version 2.0 available
  • -
-
-
-
    -
  • New Version 2.0 available
  • -
  • [App name]: Version 2.0 available
  • -
-
+
+
    +
  • [App name] | Version 2.0 available
  • +
+
+
+
    +
  • New Version 2.0 available
  • +
  • [App name]: Version 2.0 available
  • +
+
Include purpose and theme, avoiding generic or vague subject lines.
-
-
    -
  • [App name] | Scheduled maintenance November 10, 2026, at 11:00
  • -
-
-
-
    -
  • [App name] | Maintenance soon
  • -
-
+
+
    +
  • [App name] | Scheduled maintenance November 10, 2026, at 11:00
  • +
+
+
+
    +
  • [App name] | Maintenance soon
  • +
+
Use language that reflects the urgency of the email and mention if action is required.
-
-
    -
  • [App name] | Immediate action required | Security vulnerability fix
  • -
  • [App name] | No action required | New events detected
  • -
-
-
-
    -
  • [App name] | Security issues
  • -
-
+
+
    +
  • [App name] | Immediate action required | Security vulnerability fix
  • +
  • [App name] | No action required | New events detected
  • +
+
+
+
    +
  • [App name] | Security issues
  • +
+
Keep the subject line as short as possible. Additional information should be provided in the body text.
-
-
    -
  • [App name] | Immediate action required | Update
  • -
-
-
-
    -
  • [App name] | Immediate action required | Update from old Version 2.4 to new Version 2.5 due to security issues
  • -
-
+
+
    +
  • [App name] | Immediate action required | Update
  • +
+
+
+
    +
  • [App name] | Immediate action required | Update from old Version 2.4 to new Version 2.5 due to security issues
  • +
+
## Body text @@ -189,59 +189,59 @@ Keep the subject line as short as possible. Additional information should be pro Start with a polite salutation using "Dear" followed by a comma (American English). Do not use gendered titles or gendered forms of address. Use the recipient's name if available. If no name is available, use a neutral greeting. For German translations, Siemens AG employees and partners can follow the [German Brand Guide](https://brandville.siemens.com/en/design-elements/language/inklusive-und-gendergerechte-sprache) for inclusive language.
-
-
    -
  • Dear [App name] user,
  • -
  • Dear John Schmidt,
  • -
-
-
-
    -
  • Hi
  • -
-
+
+
    +
  • Dear [App name] user,
  • +
  • Dear John Schmidt,
  • +
+
+
+
    +
  • Hi
  • +
+
Repeat key words from the subject line in the body text.
-
-
    -
  • Subject line: [App name] | Version 2.0 available
    +
    +
      +
    • Subject line: [App name] | Version 2.0 available
      Body text: We've released Version 2.0 of [App name].
    • -
    • Subject line: [App name] | One-time PIN for verification
      +
    • Subject line: [App name] | One-time PIN for verification
      Body text: You requested a one-time PIN to verify your identity.
    • -
    -
    +
+
Use clear headings for users to easily scan body text for important information (omit the question mark).
-
-
    -
  • Heading: What happened
  • -
  • Heading: What's happening
  • -
  • Heading: What you need to do
  • -
-
+
+
    +
  • Heading: What happened
  • +
  • Heading: What's happening
  • +
  • Heading: What you need to do
  • +
+
Include a professional and polite closing with a descriptive signature.
-
-
    -
  • Kind regards,
    +
    +
      +
    • Kind regards,
      Your [App name] team
    • -
    -
    -
    -
      -
    • Best wishes,
      +
    +
    +
    +
      +
    • Best wishes,
      Your friendly [App name] team
    • -
    -
    +
+
### Time-related information @@ -249,27 +249,27 @@ Include a professional and polite closing with a descriptive signature. Include specific times, dates and time zones whenever relevant.
-
-
    -
  • The update will start automatically on November 10 between 02:00–04:00 CET (UTC+1).
  • -
-
-
-
    -
  • The update will be next week.
  • -
-
+
+
    +
  • The update will start automatically on November 10 between 02:00–04:00 CET (UTC+1).
  • +
+
+
+
    +
  • The update will be next week.
  • +
+
Include duration and instructions when applicable.
-
-
    -
  • The registration link is valid for 24 hours.
  • -
  • The PIN is valid for 15 minutes from the time you received this email.
  • -
-
+
+
    +
  • The registration link is valid for 24 hours.
  • +
  • The PIN is valid for 15 minutes from the time you received this email.
  • +
+
### Actions and links @@ -277,69 +277,69 @@ Include duration and instructions when applicable. Include a clear message when users don't have to do anything.
-
-
    -
  • What you need to do
    +
    +
      +
    • What you need to do
      You don't need to do anything. We'll inform you when the data migration is complete.
    • -
    -
    +
+
Provide a clear call-to-action when user actions are needed.
-
-
    -
  • What you need to do
    +
    +
      +
    • What you need to do
      Restart your system after the update to ensure all changes take effect.
    • -
    -
    +
+
Add minimal links, actions, or buttons in each email (we recommend one per email).
-
-
    -
  • [Open App name] event list
  • -
-
+
+
    +
  • [Open App name] event list
  • +
+
If possible, provide call-to-actions in buttons instead of links.
-
-
    -
  • Button: Open dashboard
  • -
-
+
+
    +
  • Button: Open dashboard
  • +
+
Use inline text links for additional information.
-
-
    -
  • For additional information, see [webpage].
  • -
-
+
+
    +
  • For additional information, see [webpage].
  • +
+
Use a full, live link when buttons are not possible in the email (see [External links and resources](../../menu-functions-and-ui-labels/external-links-and-resources.md)).
-
-
    -
  • Open your dashboard
  • -
  • [App name].com/dashboard
  • -
-
-
-
    -
  • {'https://example.com/'}[App name]
  • -
-
+
+
    +
  • Open your dashboard
  • +
  • [App name].com/dashboard
  • +
+
+
+
    +
  • {'https://example.com/'}[App name]
  • +
+
### Responding options @@ -347,22 +347,22 @@ Use a full, live link when buttons are not possible in the email (see [External Include options for users to respond to or get support when possible.
-
-
    -
  • If you have questions or need support, contact us at [email address].
  • -
-
+
+
    +
  • If you have questions or need support, contact us at [email address].
  • +
+
Clearly state when an email is automated and cannot be replied to.
-
-
    -
  • This email is automated: Do not reply.
  • -
  • This is an automated email. Do not reply.
  • -
-
+
+
    +
  • This email is automated: Do not reply.
  • +
  • This is an automated email. Do not reply.
  • +
+
### Disclaimer and footer @@ -375,31 +375,31 @@ Check the correct legal text with your legal team and include a legal disclaimer Highlight important information but avoid excessive and mixed text formatting.
-
-
    -
  • Review the attached maintenance report for details.
  • -
-
-
-
    -
  • Review the attached **Maintenance Report** for details.
  • -
-
+
+
    +
  • Review the attached maintenance report for details.
  • +
+
+
+
    +
  • Review the attached **Maintenance Report** for details.
  • +
+
Do not use emojis.
-
-
    -
  • Welcome to [App name] – your energy management platform
  • -
-
-
-
    -
  • We love you for joining us!!!! Welcome to the team ❤️ ❤️
  • -
-
+
+
    +
  • Welcome to [App name] – your energy management platform
  • +
+
+
+
    +
  • We love you for joining us!!!! Welcome to the team ❤️ ❤️
  • +
+
## Related diff --git a/docs/guidelines/language/operational-emails/reports-and-data-provisioning-emails/usage.mdx b/docs/guidelines/language/operational-emails/reports-and-data-provisioning-emails/usage.mdx index b4081ac98..0a4244f41 100644 --- a/docs/guidelines/language/operational-emails/reports-and-data-provisioning-emails/usage.mdx +++ b/docs/guidelines/language/operational-emails/reports-and-data-provisioning-emails/usage.mdx @@ -16,13 +16,13 @@ Use these rules alongside the [General rules](../overview-operational-emails/usa Use precise and descriptive subject lines that immediately convey the email's purpose.
-
-
    -
  • [App name] | Production efficiency report October 2025 available
  • -
  • [App name] | Test report available
  • -
  • [App name] | CSV import complete
  • -
-
+
+
    +
  • [App name] | Production efficiency report October 2025 available
  • +
  • [App name] | Test report available
  • +
  • [App name] | CSV import complete
  • +
+
## Body text @@ -30,59 +30,59 @@ Use precise and descriptive subject lines that immediately convey the email's pu Use the full name of the report, dataset or data type being imported or migrated.
-
-
    -
  • The monthly "Q3 2025 energy consumption optimization report" is now available.
  • -
  • The import of your "Product inventory CSV" is complete.
  • -
-
-
-
    -
  • Your report is ready.
  • -
-
+
+
    +
  • The monthly "Q3 2025 energy consumption optimization report" is now available.
  • +
  • The import of your "Product inventory CSV" is complete.
  • +
+
+
+
    +
  • Your report is ready.
  • +
+
Include a brief summary or key highlights from the report, especially if it's a regular deliverable.
-
-
    -
  • This month's "Performance overview" highlights a 5% improvement in uptime for production line 2 due to recent sensor recalibration.
  • -
-
+
+
    +
  • This month's "Performance overview" highlights a 5% improvement in uptime for production line 2 due to recent sensor recalibration.
  • +
+
Include the reporting period or relevant dates for the data covered in the report.
-
-
    -
  • The "Asset utilization report" for November 1–15, 2025 has been generated and is ready for your review.
  • -
-
+
+
    +
  • The "Asset utilization report" for November 1–15, 2025 has been generated and is ready for your review.
  • +
+
Include direct links to the report or data, minimizing steps for the user.
-
-
    -
  • Your "Predictive maintenance analytics report" is available.
    Button: [Open report]
  • -
  • The migrated "historical maintenance logs" are now fully accessible within Maintenance history.
    Button: [Open Maintenance history]
  • -
-
+
+
    +
  • Your "Predictive maintenance analytics report" is available.
    Button: [Open report]
  • +
  • The migrated "historical maintenance logs" are now fully accessible within Maintenance history.
    Button: [Open Maintenance history]
  • +
+
Use "you" and "your" for information or actions that are recipient-specific. Use neutral wording for shared or generally available information.
-
-
    -
  • The monthly "Energy consumption report" is now available.
  • -
  • Your requested "Product inventory CSV" has been imported and is available to download.
  • -
-
+
+
    +
  • The monthly "Energy consumption report" is now available.
  • +
  • Your requested "Product inventory CSV" has been imported and is available to download.
  • +
+
## Related diff --git a/docs/guidelines/language/operational-emails/system-and-product-lifecycle-emails/usage.mdx b/docs/guidelines/language/operational-emails/system-and-product-lifecycle-emails/usage.mdx index a06b5ace6..7e5c51c53 100644 --- a/docs/guidelines/language/operational-emails/system-and-product-lifecycle-emails/usage.mdx +++ b/docs/guidelines/language/operational-emails/system-and-product-lifecycle-emails/usage.mdx @@ -16,14 +16,14 @@ Use these rules alongside the [General rules](../overview-operational-emails/usa Include system or product lifecycle events, such as upcoming updates, directly in the subject line.
-
-
    -
  • [App name] | Version 2.0 available
  • -
  • [App name] | End-of-life announcement for "legacy control panel model X-200"
  • -
  • [App name] | Test Version 2.1 available for staging environment
  • -
  • [App name] | Scheduled maintenance September 24, 2026, 01:00–13:00
  • -
-
+
+
    +
  • [App name] | Version 2.0 available
  • +
  • [App name] | End-of-life announcement for "legacy control panel model X-200"
  • +
  • [App name] | Test Version 2.1 available for staging environment
  • +
  • [App name] | Scheduled maintenance September 24, 2026, 01:00–13:00
  • +
+
## Body text @@ -33,32 +33,32 @@ Include system or product lifecycle events, such as upcoming updates, directly i Include the new version number and release date.
-
-
    -
  • Version 2.1.0 will be available November 10.
  • -
-
+
+
    +
  • Version 2.1.0 will be available November 10.
  • +
+
Add a summary of key changes or improvements.
-
-
    -
  • This release includes enhanced firewall rules and improved logging.
  • -
-
+
+
    +
  • This release includes enhanced firewall rules and improved logging.
  • +
+
Include installation or update instructions with clear links, buttons or next steps.
-
-
    -
  • Download the update via the [App name] portal and restart your system.
    +
    +
      +
    • Download the update via the [App name] portal and restart your system.
      Button: Open
    • -
    -
    +
+
### End-of-life announcements @@ -66,22 +66,22 @@ Include installation or update instructions with clear links, buttons or next st Include upgrade paths, migration guides and support options for product transitions.
-
-
    -
  • Our dedicated support team is available to assist you with your migration to the "Smart factory OS". Contact us at [email address] or visit our [Migration portal].
  • -
-
+
+
    +
  • Our dedicated support team is available to assist you with your migration to the "Smart factory OS". Contact us at [email address] or visit our [Migration portal].
  • +
+
Use absolute terms when describing the end of a product status or availability.
-
-
    -
  • Industrial Gateway V7.2 will no longer receive security updates after June 30, 2026.
  • -
  • Be advised that support for "control panel X-200" will officially end on December 31, 2026. Migrate to "control panel Z-200" for continued support and enhanced features.
  • -
-
+
+
    +
  • Industrial Gateway V7.2 will no longer receive security updates after June 30, 2026.
  • +
  • Be advised that support for "control panel X-200" will officially end on December 31, 2026. Migrate to "control panel Z-200" for continued support and enhanced features.
  • +
+
### Release approvals @@ -89,21 +89,21 @@ Use absolute terms when describing the end of a product status or availability. Include a clear request for approval.
-
-
    -
  • Review and approve release V2.1.0 by November 10, 2026.
  • -
-
+
+
    +
  • Review and approve release V2.1.0 by November 10, 2026.
  • +
+
Use links or attachments for release notes.
-
-
    -
  • See attached release documentation for full details.
  • -
-
+
+
    +
  • See attached release documentation for full details.
  • +
+
### Staging and test releases @@ -111,22 +111,22 @@ Use links or attachments for release notes. Include the test environment details.
-
-
    -
  • The staging release is now available at [web address].
  • -
-
+
+
    +
  • The staging release is now available at [web address].
  • +
+
Use instructions for feedback or reporting issues.
-
-
    -
  • Report any anomalies via the quality portal.
  • -
  • Send your feedback to [email address] by September 22, 2026.
  • -
-
+
+
    +
  • Report any anomalies via the quality portal.
  • +
  • Send your feedback to [email address] by September 22, 2026.
  • +
+
### Maintenance announcements @@ -134,22 +134,22 @@ Use instructions for feedback or reporting issues. Include the maintenance window and impact.
-
-
    -
  • Scheduled maintenance will occur on Nov 15, 02:00–04:00. Temporary downtime expected.
  • -
-
+
+
    +
  • Scheduled maintenance will occur on Nov 15, 02:00–04:00. Temporary downtime expected.
  • +
+
Use instructions for preparation or follow-up.
-
-
    -
  • Ensure backups are completed before the maintenance window.
    +
    +
      +
    • Ensure backups are completed before the maintenance window.
      Button: Open Drive manager
    • -
    -
    +
+
## Related diff --git a/docs/guidelines/language/operational-emails/user-and-access-management-emails/examples.mdx b/docs/guidelines/language/operational-emails/user-and-access-management-emails/examples.mdx index 2d671eb0e..0418d7564 100644 --- a/docs/guidelines/language/operational-emails/user-and-access-management-emails/examples.mdx +++ b/docs/guidelines/language/operational-emails/user-and-access-management-emails/examples.mdx @@ -66,7 +66,7 @@ Your [App name] team **Body**
Dear [App name] user,
-A new device has been registered to your account [{'user@example.com'}]
+A new device has been registered to your account \[user@example.com\]
Device name: Laptop123
Device ID: ABCDEFGHI
Operating system: Windows
@@ -84,4 +84,3 @@ Your [App name] team [Company disclaimer]
[Company legal footer] - diff --git a/docs/guidelines/language/operational-emails/user-and-access-management-emails/usage.mdx b/docs/guidelines/language/operational-emails/user-and-access-management-emails/usage.mdx index 9cf2148c4..1e4b7caef 100644 --- a/docs/guidelines/language/operational-emails/user-and-access-management-emails/usage.mdx +++ b/docs/guidelines/language/operational-emails/user-and-access-management-emails/usage.mdx @@ -16,14 +16,14 @@ Use these rules alongside the [General rules](../overview-operational-emails/usa State the clear purpose or topic of the email.
-
-
    -
  • [App name] | Welcome to [App name]
  • -
  • [App name] | Log in from new device
  • -
  • [App name] | Notification of role change
  • -
  • [App name] | One-time PIN for verification
  • -
-
+
+
    +
  • [App name] | Welcome to [App name]
  • +
  • [App name] | Log in from new device
  • +
  • [App name] | Notification of role change
  • +
  • [App name] | One-time PIN for verification
  • +
+
## Body text @@ -31,77 +31,77 @@ State the clear purpose or topic of the email. Start with a clear sentence describing the topic of the email.
-
-
    -
  • Thank you for choosing [App name].
  • -
  • Your account has been successfully created.
  • -
  • You requested a one-time PIN to verify your identity.
  • -
  • A new device has been registered to this account: [{'user@example.com'}]
  • -
-
+
+
    +
  • Thank you for choosing [App name].
  • +
  • Your account has been successfully created.
  • +
  • You requested a one-time PIN to verify your identity.
  • +
  • A new device has been registered to this account: [{'user@example.com'}]
  • +
+
Provide users with additional information or a summary.
-
-
    -
  • What you need to do
    +
    +
      +
    • What you need to do
        • Open [App name]
        • Start configuring your dashboard
        • Explore key features: Real-time energy monitoring, load optimization and predictive analytics   Button: Open
    • -
    -
    +
+
-
-
    -
  • The information below relates to your newly registered device
    +
    +
      +
    • The information below relates to your newly registered device
        • Device name: Laptop123
        • Device ID: ABCDEFGHI
        • Operating system: Windows
        • Date: November 11, 2026, 14:32
    • -
    -
    +
+
Provide users with clear next steps or instructions.
-
-
    -
  • You are just a few steps away from starting your [App name] journey. To get started, register for an [App name] ID using your email address and create a strong, secure password.
  • -
-
+
+
    +
  • You are just a few steps away from starting your [App name] journey. To get started, register for an [App name] ID using your email address and create a strong, secure password.
  • +
+
Never include sensitive information such as passwords directly in the email.
-
-
    -
  • To set your password securely, visit the [App name] account portal.
  • -
-
-
-
    -
  • Here is your default password: 12345 – change it here!
  • -
-
+
+
    +
  • To set your password securely, visit the [App name] account portal.
  • +
+
+
+
    +
  • Here is your default password: 12345 – change it here!
  • +
+
Mention both previous and new states when access or role settings are changed.
-
-
    -
  • There have been changes to your role for [App name]
    +
    +
      +
    • There have been changes to your role for [App name]
      New role: Administrator
      Previous role: Operator
    • -
    -
    +
+
## Related diff --git a/docs/guidelines/language/operational-emails/workflow-and-task-management-emails/usage.mdx b/docs/guidelines/language/operational-emails/workflow-and-task-management-emails/usage.mdx index 8b62b57cd..9f9e0854a 100644 --- a/docs/guidelines/language/operational-emails/workflow-and-task-management-emails/usage.mdx +++ b/docs/guidelines/language/operational-emails/workflow-and-task-management-emails/usage.mdx @@ -16,27 +16,27 @@ Use these rules alongside the [General rules](../overview-operational-emails/usa State the clear purpose or topic of the email with a descriptive title for context.
-
-
    -
  • [App name] | Task #234 created | Spare part maintenance
  • -
  • [App name] | Task #659 assigned to you | Log file management
  • -
  • [App name] | Task #012 completed | Turbine overhaul
  • -
  • [App name] | Maintenance scheduled for Nov 11, 2026, 10:00
  • -
-
+
+
    +
  • [App name] | Task #234 created | Spare part maintenance
  • +
  • [App name] | Task #659 assigned to you | Log file management
  • +
  • [App name] | Task #012 completed | Turbine overhaul
  • +
  • [App name] | Maintenance scheduled for Nov 11, 2026, 10:00
  • +
+
State any time urgency, criticality or workflow impact within the subject line.
-
-
    -
  • [App name] | Immediate action required | Firmware update
  • -
  • [App name] | Task #134 | Review due Nov 11, 2026, 14:30
  • -
  • [App name] | Task #879 | Approval requested
  • -
  • [App name] | Task #987 | Overdue
  • -
-
+
+
    +
  • [App name] | Immediate action required | Firmware update
  • +
  • [App name] | Task #134 | Review due Nov 11, 2026, 14:30
  • +
  • [App name] | Task #879 | Approval requested
  • +
  • [App name] | Task #987 | Overdue
  • +
+
## Body text @@ -44,55 +44,55 @@ State any time urgency, criticality or workflow impact within the subject line. Use clear and unambiguous headings to tell users what needs to be managed.
-
-
    -
  • Task assigned
  • -
  • Approval required
  • -
  • Task overdue
  • -
  • Review required
  • -
-
-
-
    -
  • Task for you
  • -
  • Task
  • -
-
+
+
    +
  • Task assigned
  • +
  • Approval required
  • +
  • Task overdue
  • +
  • Review required
  • +
+
+
+
    +
  • Task for you
  • +
  • Task
  • +
+
Include bullet points to enhance readability and highlight key information.
-
-
    -
  • New task assigned
    +
    +
      +
    • New task assigned
        • Task ID: 462
        • Task description: Spare part replacement for sensor 672_A
        • Assigned by: Operator
        • Assigned: February 10, 2026
        • Due: February 15, 2026
    • -
    -
    +
+
Avoid vague statements about impact or required actions.
-
-
    -
  • This update will require a restart and cause 5 minutes of downtime for [Asset name].
  • -
  • Software update
    +
    +
      +
    • This update will require a restart and cause 5 minutes of downtime for [Asset name].
    • +
    • Software update
        • Software: Update to Version 4.3.6
        • Date: November 10, 2025
        • Time: 01:00–01:05 (UTC+2)
        • Impact: Brief downtime (approx. 5 minutes)
    • -
    -
    -
    -
      -
    • This update might require a restart.
    • -
    -
    +
+
+
+
    +
  • This update might require a restart.
  • +
+
## Task management and progress @@ -100,22 +100,22 @@ Avoid vague statements about impact or required actions. Include specific and quantifiable progress updates whenever possible.
-
-
    -
  • Software patch deployment for SCADA system is 75% complete.
  • -
  • Maintenance for [production line] is currently underway, estimated completion in 2 hours (10:00 UTC+2).
  • -
-
+
+
    +
  • Software patch deployment for SCADA system is 75% complete.
  • +
  • Maintenance for [production line] is currently underway, estimated completion in 2 hours (10:00 UTC+2).
  • +
+
Include expected completion times or clear next steps.
-
-
    -
  • Expected completion by November 10, 2025, 22:00 (UTC+2). You will receive a notification once the system is fully operational.
  • -
-
+
+
    +
  • Expected completion by November 10, 2025, 22:00 (UTC+2). You will receive a notification once the system is fully operational.
  • +
+
## Status updates @@ -123,24 +123,24 @@ Include expected completion times or clear next steps. Use clear indicators (operational, degraded, offline, standby) and state the impact immediately.
-
-
    -
  • Status update | Remote monitoring system | Degraded performance
  • -
  • Status update | Conveyor belt system | Offline
  • -
  • Status update | Backup generator | Standby
  • -
-
+
+
    +
  • Status update | Remote monitoring system | Degraded performance
  • +
  • Status update | Conveyor belt system | Offline
  • +
  • Status update | Backup generator | Standby
  • +
+
Avoid sending repetitive updates or leaving long gaps without communication during critical incidents. Only mention the previous status when it adds useful information.
-
-
    -
  • Ticket #274 status changed from "active" to "closed".
  • -
  • We will provide an update every 2 hours until resolution, or sooner if the status changes significantly. Our next update is scheduled for 14:00 (UTC+2).
  • -
-
+
+
    +
  • Ticket #274 status changed from "active" to "closed".
  • +
  • We will provide an update every 2 hours until resolution, or sooner if the status changes significantly. Our next update is scheduled for 14:00 (UTC+2).
  • +
+
## Related 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('