@sveltia/cms 0.47.2 → 0.47.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -190,7 +190,7 @@ We are working hard to create a **significantly better alternative to Netlify CM
190
190
 
191
191
  - Uses the GraphQL API where possible for better performance, as mentioned above. You don’t need to set the `use_graphql` option to enable it for GitHub and GitLab.
192
192
  - The Git branch name is automatically set to the repository’s default branch (`main`, `master` or whatever) if not specified in the configuration file, preventing data loading errors due to a hardcoded fallback to `master`[^95][^27].
193
- - Developers can [disable automatic deployments](#disabling-automatic-deployments) by default or on demand to save costs and resources associated with CI/CD and to publish multiple changes at once[^24].
193
+ - It’s possible to [disable automatic deployments](#disabling-automatic-deployments) by default or on demand to save costs and resources associated with CI/CD and to publish multiple changes at once[^24].
194
194
  - The GitLab backend support comes with background [service status](https://status.gitlab.com/) checking, just like GitHub.
195
195
  - Service status checks are performed frequently and an incident notification is displayed prominently.
196
196
  - Users can quickly open the source file of an entry or asset in your repository using View on GitHub (or GitLab) under the 3-dot menu when Developer Mode is enabled.
@@ -206,9 +206,9 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
206
206
  - Configuration
207
207
  - The [i18n limitations](https://decapcms.org/docs/i18n/#limitations) in Netlify/Decap CMS do not apply to Sveltia CMS:
208
208
  - File collections support multiple files/folders i18n structures[^87]. To enable it, simply use the `{{locale}}` template tag in the `file` path option, e.g. `content/pages/about.{{locale}}.json` or `content/pages/{{locale}}/about.json`. For backward compatibility, the global `structure` option only applies to folder collections as before.
209
- - The `i18n: duplicate` field configuration can be used for the List and Object widgets so that changes made with these widgets are duplicated between locales[^7][^68]. Subfields can use the `i18n` configuration normally.
209
+ - The List and Object widgets support the `i18n: duplicate` field configuration so that changes made with these widgets are duplicated between locales[^7][^68]. The `i18n` configuration can normally be used for the subfields.
210
210
  - [Entry-relative media folders](https://decapcms.org/docs/collection-folder/#media-and-public-folder) can be used in conjunction with the `multiple_folders` i18n structure[^21].
211
- - Developers can use the `{{locale}}` template tag in the [`preview_path`](https://decapcms.org/docs/configuration-options/#preview_path) collection option to provide site preview links for each language[^63].
211
+ - The `{{locale}}` template tag can be used in the [`preview_path`](https://decapcms.org/docs/configuration-options/#preview_path) collection option to provide site preview links for each language[^63].
212
212
  - It’s possible to [use a random UUID for an entry slug](#using-a-random-id-for-an-entry-slug), which is a good option for locales that write in non-Latin characters.
213
213
  - It’s possible to [localize entry slugs](#localizing-entry-slugs) while linking the localized files[^80], thanks to the support for Hugo’s `translationKey`[^81].
214
214
  - When the `clean_accents` option is enabled for [entry slugs](https://decapcms.org/docs/configuration-options/#slug-type), certain characters, such as German umlauts, will be [transliterated](https://en.wikipedia.org/wiki/Transliteration)[^99].
@@ -236,8 +236,8 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
236
236
  - `icon`: [Choose a custom icon for each collection](#using-a-custom-icon-for-a-collection)[^3].
237
237
  - `divider`: [Add dividers to the collection list](#adding-dividers-to-the-collection-list).
238
238
  - `thumbnail`: Specify the field name for a thumbnail displayed on the entry list[^130]. A nested field can be specified using dot notation, e.g. `images.0.src`. If undefined, the `name` of the first image field is used.
239
- - Developers can use nested fields (dot notation) in the `path` option for a folder collection, e.g. `{{fields.state.name}}/{{slug}}`[^62].
240
- - Developers can use Markdown in the `description` collection option[^79]. Bold, italic, strikethrough, code and links are allowed.
239
+ - Nested fields (dot notation) can be used in the `path` option for a folder collection, e.g. `{{fields.state.name}}/{{slug}}`[^62].
240
+ - Markdown is supported in the `description` collection option[^79]. Bold, italic, strikethrough, code and links are allowed.
241
241
  - The collection `folder` can be an empty string (or `.` or `/`) if you want to store entries in the root folder. This supports a typical VitePress setup.
242
242
  - A folder collection `filter` supports multiple possible values by using an array for the `value`[^151].
243
243
  - Multiple [summary string transformations](https://decapcms.org/docs/summary-strings/) can be chained like `{{title | upper | truncate(20)}}`.
@@ -247,7 +247,7 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
247
247
  - If a collection only has the Markdown `body` field, an entry slug will be generated from a header in the `body`, if exists. This supports a typical VitePress setup.
248
248
  - Entry slug template tags support [transformations](https://decapcms.org/docs/summary-strings/) just like summary string template tags[^29].
249
249
  - Single quotes (apostrophes) in a slug will be replaced with `sanitize_replacement` (default: hyphen) rather than being removed[^52].
250
- - Developers can set the maximum number of characters for an entry slug with the new `slug_length` collection option to avoid deployment errors with Netlify or other platforms[^25].
250
+ - The maximum number of characters for an entry slug can be set with the new `slug_length` collection option to avoid deployment errors with Netlify or other platforms[^25].
251
251
  - Setting the collection `path` doesn’t affect the entry slugs stored with the Relation widget[^137].
252
252
  - Entry slugs are [localizable](#localizing-entry-slugs)[^80].
253
253
  - Entry listing
@@ -271,13 +271,13 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
271
271
  - Required fields, not optional fields, are marked for efficient data entry.
272
272
  - Users can revert changes to all fields or a specific field.
273
273
  - If you revert changes and there are no unsaved changes, the Save button is disabled as expected[^118].
274
- - Developers can hide the preview of a specific field with `preview: false`[^126].
274
+ - The preview of a specific field can be hidden with `preview: false`[^126].
275
275
  - Fields with validation errors are automatically expanded if they are part of nested, collapsed objects[^40].
276
276
  - When you click on a field in the preview pane, the corresponding field in the edit pane is highlighted[^41]. It will be automatically expanded if collapsed.
277
277
  - The preview pane displays all fields, including each label, making it easier to see which fields are populated.
278
278
  - Provides better scroll synchronization between the panes when editing or previewing an entry[^92].
279
279
  - The preview pane won’t cause a scrolling issue[^136].
280
- - Developers can use a full regular expression, including flags, for the widget `pattern` option[^82]. For example, if you want to allow 280 characters or less in a multiline text field, you could write `/^.{0,280}$/s` (but you can now use the `maxlength` option instead.)
280
+ - A full regular expression, including flags, can be used for the widget `pattern` option[^82]. For example, if you want to allow 280 characters or less in a multiline text field, you could write `/^.{0,280}$/s` (but you can now use the `maxlength` option instead.)
281
281
  - A long validation error message is displayed in full, without being hidden behind the field label[^59].
282
282
  - Any links to other entries will work as expected, with the Content Editor being updated for the other[^100].
283
283
  - In the Boolean and Select widgets, you don’t have to update a value twice to re-enable the Save button after saving an entry[^139].
@@ -285,7 +285,7 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
285
285
  ### Better data output
286
286
 
287
287
  - Keys in generated JSON/TOML/YAML content are always sorted by the order of configured fields, making Git commits clean and consistent[^86].
288
- - Netlify/Decap CMS often, but not always, omits optional and empty fields from the output. Sveltia CMS aims at complete and consistent data output — it always saves proper values, such as an empty string or an empty array, instead of nothing (`undefined`), regardless of the `required` option[^45][^46][^44].
288
+ - Netlify/Decap CMS often, but not always, omits optional and empty fields from the output. Sveltia CMS aims at complete and consistent data output — it always saves proper values, such as an empty string or an empty array, instead of nothing (`undefined`), regardless of the `required` field option[^45][^46][^44].
289
289
  - In other words, in Sveltia CMS, `required: false` makes data input optional, but doesn’t make data output optional.
290
290
  - Note: If you have any data validation (type definition) that expects `undefined` values, you may need to revise it or the output from Sveitia CMS may break it.
291
291
  - JSON/TOML/YAML data is saved with a new line at the end of the file to prevent unnecessary changes being made to the file[^11].
@@ -322,11 +322,11 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
322
322
  - Users can preview variable types without having to register a preview template[^42].
323
323
  - Markdown
324
324
  - The rich text editor is built with the well-maintained [Lexical](https://lexical.dev/) framework, which solves various issues with a [Slate](https://github.com/ianstormtaylor/slate)-based editor in Netlify/Decap CMS, including fatal application crashes[^71][^72][^73][^111], lost formatting when pasting[^124], backslash injections[^53], dropdown visibility[^70], and text input difficulties with IME[^54].
325
- - Developers can set the default editor mode by changing the order of the `modes` option[^58]. If you want to use the plain text editor by default, add `modes: [raw, rich_text]` to the field configuration.
325
+ - The default editor mode can be set by changing the order of the `modes` option[^58]. If you want to use the plain text editor by default, add `modes: [raw, rich_text]` to the field configuration.
326
326
  - Line breaks are rendered as line breaks in the preview pane according to GitHub Flavored Markdown (GFM).
327
327
  - Object
328
328
  - Sveltia CMS offers two ways to have conditional fields in a collection[^30]:
329
- - Developers can use [variable types](https://decapcms.org/docs/variable-type-widgets/) (the `types` option) with the Object widget just like the List widget.
329
+ - The Object widget supports [variable types](https://decapcms.org/docs/variable-type-widgets/) (the `types` option) just like the List widget.
330
330
  - An optional Object field (`required: false`) can be manually added or removed with a checkbox[^88]. If unadded or removed, the required subfields won’t trigger validation errors[^16], and the field will be saved as `null`.
331
331
  - Relation
332
332
  - Field options are displayed with no additional API requests[^14]. The confusing `options_length` option, which defaults to 20, is therefore ignored[^76].
@@ -411,7 +411,7 @@ Sveltia CMS has been built with a multilingual architecture from the very beginn
411
411
  - The application UI locale is automatically selected based on the preferred language set with the browser[^132]. Users can also change the locale in the application settings. Therefore, the `locale` configuration option is ignored and `CMS.registerLocale()` is not required.
412
412
  - The List widget’s `label` and `label_singular` are not converted to lowercase, which is especially problematic in German, where all nouns are capitalized[^98].
413
413
  - Long menu item labels, especially in non-English locales, don’t overflow the dropdown container[^117].
414
- - We’ll soon be migrating from [svelte-i18n](https://github.com/kaisermann/svelte-i18n) to the [Fluent localization system](https://projectfluent.org/) for natural-sounding translations in every locale.
414
+ - We’ll soon be migrating from [svelte-i18n](https://github.com/kaisermann/svelte-i18n) to [MessageFormat 2](https://github.com/unicode-org/message-format-wg) for natural-sounding translations in every locale.
415
415
 
416
416
  ## Compatibility
417
417
 
@@ -427,7 +427,7 @@ However, 100% feature parity is not planned, and some features are still missing
427
427
  - The deprecated Netlify Large Media service will not be supported. Consider other storage providers.
428
428
  - The deprecated Date widget will not be supported, as it has already been removed from Decap CMS 3.0. Use the DateTime widget instead.
429
429
  - Remark plugins will not be supported, as they are not compatible with our Lexical-based rich text editor.
430
- - [Undocumented methods](https://github.com/sveltia/sveltia-cms/blob/c69446da7bb0bab7405be741c0f92850c5dddfa8/src/main.js#L14-L37) exposed on the `window.CMS` object will not be implemented. This includes custom backends and custom media libraries, if any.
430
+ - [Undocumented methods](https://github.com/sveltia/sveltia-cms/blob/c69446da7bb0bab7405be741c0f92850c5dddfa8/src/main.js#L14-L37) exposed on the `window.CMS` object will not be implemented. This includes custom backends and custom media libraries, if any; we may support these features in the future, but our implementation would likely be incompatible with Netlify/Decap CMS.
431
431
 
432
432
  ### Current limitations
433
433
 
@@ -440,7 +440,7 @@ These limitations are expected to be resolved before or shortly after GA:
440
440
  | Localization | The application UI is only available in English and Japanese at this time. |
441
441
  | Media Libraries | [Cloudinary](https://decapcms.org/docs/cloudinary/) and [Uploadcare](https://decapcms.org/docs/uploadcare/) are not yet supported. |
442
442
  | Workflow | [Editorial Workflow](https://decapcms.org/docs/editorial-workflows/) and [Open Authoring](https://decapcms.org/docs/open-authoring/) are not yet supported and will be implemented after the 1.0 release. |
443
- | Collections | [Nested Collections](https://decapcms.org/docs/collection-nested/) (beta) are not yet supported and will be implemented after the 1.0 release. |
443
+ | Collections | [Nested collections](https://decapcms.org/docs/collection-nested/) (beta) are not yet supported and will be implemented after the 1.0 release. |
444
444
  | Widgets | [Custom widgets](https://decapcms.org/docs/custom-widgets/) are not yet supported. See the table below for other limitations. |
445
445
  | Customizations | [Custom previews](https://decapcms.org/docs/customization/) and [event subscriptions](https://decapcms.org/docs/registering-events/) are not yet supported. |
446
446
 
@@ -456,7 +456,7 @@ These limitations are expected to be resolved before or shortly after GA:
456
456
 
457
457
  - The GitLab backend requires GitLab 16.3 or later.
458
458
  - We plan to provide partial compatibility with now-discontinued Static CMS, such as the [KeyValue widget](https://staticjscms.netlify.app/docs/widget-keyvalue).
459
- - Found a compatibility issue or other missing feature? Let us know by [filing an issue](https://github.com/sveltia/sveltia-cms/issues/new).
459
+ - Found a compatibility issue or other missing feature? [Let us know](https://github.com/sveltia/sveltia-cms/issues/new).
460
460
 
461
461
  ## Getting started
462
462
 
@@ -761,7 +761,7 @@ collections:
761
761
  label: Data Files
762
762
  files:
763
763
  - name: members
764
- label: List of Members
764
+ label: Member List
765
765
  file: _data/members.yml
766
766
  fields:
767
767
  - name: members
@@ -917,7 +917,7 @@ img-src 'self' blob: data: https://*;
917
917
 
918
918
  ## Support & feedback
919
919
 
920
- While we don’t have dedicated developer/user support resources, [quick questions](https://github.com/sveltia/sveltia-cms/discussions/new?category=q-a) and [feedback](https://github.com/sveltia/sveltia-cms/discussions/new?category=general) are welcome on the [Discussions](https://github.com/sveltia/sveltia-cms/discussions) page of this GitHub repository. We also have a [Discord channel](https://discord.gg/5hwCGqup5b) for casual chat.
920
+ While we don’t have dedicated developer/user support resources, [quick questions](https://github.com/sveltia/sveltia-cms/discussions/new?category=q-a) and [feedback](https://github.com/sveltia/sveltia-cms/discussions/new?category=general) are welcome on the [Discussions](https://github.com/sveltia/sveltia-cms/discussions) page of our GitHub repository. We also have a [Discord channel](https://discord.gg/5hwCGqup5b) for casual chat.
921
921
 
922
922
  Looking to build a website with Sveltia CMS? Maintainer [@kyoshino](https://github.com/kyoshino) is available for hire depending on your requirements. Feel free to reach out!
923
923
 
@@ -932,7 +932,7 @@ See [Contributing to Sveltia CMS](https://github.com/sveltia/sveltia-cms/blob/ma
932
932
  - [Svelte 5](https://svelte.dev/blog/svelte-5-is-alive) Runes migration
933
933
  - Enhanced [compatibility with Netlify/Decap CMS](#compatibility)
934
934
  - Partial compatibility with Static CMS, a now-discontinued community fork of Netlify CMS, specifically the [KeyValue widget](https://staticjscms.netlify.app/docs/widget-keyvalue)[^123]
935
- - Localization with the new [Fluent](https://projectfluent.org)-powered sveltia-i18n library
935
+ - Localization with the new [MessageFormat 2](https://github.com/unicode-org/message-format-wg)-based sveltia-i18n library
936
936
  - Accessibility audit
937
937
  - Developer documentation (implementation guide)
938
938
  - Marketing site
@@ -942,12 +942,14 @@ See [Contributing to Sveltia CMS](https://github.com/sveltia/sveltia-cms/blob/ma
942
942
 
943
943
  ### After the 1.0 release
944
944
 
945
+ - Implementing the remaining Netlify/Decap CMS features: Editorial Workflow, Open Authoring and nested collections
945
946
  - Tackling more Netlify/Decap CMS issues, especially the [top-voted features](https://github.com/decaporg/decap-cms/issues?q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc), including MDX support[^122], manual entry sorting[^125], roles[^23], mobile optimization[^18] and config editor[^10] — Some features are already implemented in Sveltia CMS
946
947
  - Advanced digital asset management (DAM) features, including image editing and tagging[^114]
947
948
  - AI integrations for image generation and content writing
948
949
  - End-user documentation
949
950
  - Contributor documentation
950
951
  - Marketplace for custom widgets, etc.
952
+ - Git Gateway alternative
951
953
  - and so much more!
952
954
 
953
955
  ## Related links
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Merriweather+Sans:ital,wght@0,300..800;1,300..800&family=Noto+Sans+Mono:wght@100..900&display=swap";@import"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block";:root,:host{--sui-base-hue: 210;--sui-highlight-foreground-color: hsl(var(--sui-foreground-color-1-hsl));--sui-primary-foreground-color: hsl(var(--sui-foreground-color-2-hsl));--sui-secondary-foreground-color: hsl(var(--sui-foreground-color-3-hsl));--sui-tertiary-foreground-color: hsl(var(--sui-foreground-color-4-hsl));--sui-disabled-foreground-color: hsl(var(--sui-foreground-color-5-hsl));--sui-error-foreground-color: hsl( var(--sui-error-color-hue) var(--sui-alert-foreground-color-saturation) var(--sui-alert-foreground-color-lightness) );--sui-warning-foreground-color: hsl( var(--sui-warning-color-hue) var(--sui-alert-foreground-color-saturation) var(--sui-alert-foreground-color-lightness) );--sui-info-foreground-color: hsl( var(--sui-info-color-hue) var(--sui-alert-foreground-color-saturation) var(--sui-alert-foreground-color-lightness) );--sui-success-foreground-color: hsl( var(--sui-success-color-hue) var(--sui-alert-foreground-color-saturation) var(--sui-alert-foreground-color-lightness) );--sui-hover-background-color: hsl(var(--sui-background-color-5-hsl) / 35%);--sui-selected-background-color: hsl(var(--sui-background-color-5-hsl) / 75%);--sui-active-background-color: hsl(var(--sui-background-color-5-hsl) / 100%);--sui-content-background-color: hsl(var(--sui-background-color-1-hsl));--sui-code-background-color: hsl(var(--sui-background-color-4-hsl));--sui-primary-background-color: hsl(var(--sui-background-color-2-hsl));--sui-primary-background-color-translucent: hsl(var(--sui-background-color-2-hsl) / 80%);--sui-secondary-background-color: hsl(var(--sui-background-color-3-hsl));--sui-secondary-background-color-translucent: hsl(var(--sui-background-color-3-hsl) / 80%);--sui-tertiary-background-color: hsl(var(--sui-background-color-4-hsl));--sui-tertiary-background-color-translucent: hsl(var(--sui-background-color-4-hsl) / 80%);--sui-disabled-background-color: hsl(var(--sui-background-color-4-hsl));--sui-error-background-color: hsl( var(--sui-error-color-hue) var(--sui-alert-background-color-saturation) var(--sui-alert-background-color-lightness) );--sui-warning-background-color: hsl( var(--sui-warning-color-hue) var(--sui-alert-background-color-saturation) var(--sui-alert-background-color-lightness) );--sui-info-background-color: hsl( var(--sui-info-color-hue) var(--sui-alert-background-color-saturation) var(--sui-alert-background-color-lightness) );--sui-success-background-color: hsl( var(--sui-success-color-hue) var(--sui-alert-background-color-saturation) var(--sui-alert-background-color-lightness) );--sui-focus-ring-width: 4px;--sui-primary-border-color: hsl(var(--sui-border-color-2-hsl));--sui-secondary-border-color: hsl(var(--sui-border-color-3-hsl));--sui-error-border-color: hsl( var(--sui-error-color-hue) var(--sui-alert-border-color-saturation) var(--sui-alert-border-color-lightness) );--sui-warning-border-color: hsl( var(--sui-warning-color-hue) var(--sui-alert-border-color-saturation) var(--sui-alert-border-color-lightness) );--sui-info-border-color: hsl( var(--sui-info-color-hue) var(--sui-alert-border-color-saturation) var(--sui-alert-border-color-lightness) );--sui-success-border-color: hsl( var(--sui-success-color-hue) var(--sui-alert-border-color-saturation) var(--sui-alert-border-color-lightness) );--sui-popup-shadow-color: hsl(var(--sui-shadow-color) / 40%);--sui-popup-backdrop-color: hsl(var(--sui-shadow-color) / 40%);--sui-font-family-default: "Merriweather Sans", sans-serif;--sui-font-size-xxx-large: 23px;--sui-font-size-xx-large: 19px;--sui-font-size-x-large: 17px;--sui-font-size-large: 15px;--sui-font-size-default: 13px;--sui-font-size-small: 11px;--sui-font-size-x-small: 9px;--sui-font-weight-normal: 325;--sui-font-weight-bold: 625;--sui-font-family-monospace: "Noto Sans Mono", monospace;--sui-font-size-monospace: .9em;--sui-line-height-default: 1.25;--sui-line-height-compact: 1.5;--sui-line-height-comfortable: 1.75;--sui-word-spacing-normal: .1ex;--sui-paragraph-margin: 1.75em;--sui-control-small-border-width: 1px;--sui-control-small-border-radius: calc(var(--sui-control-small-height) / 8);--sui-control-small-padding: 0 calc((var(--sui-control-small-height) / 5));--sui-control-small-height: 24px;--sui-control-medium-border-width: 1px;--sui-control-medium-border-radius: calc(var(--sui-control-medium-height) / 8);--sui-control-medium-padding: 0 calc((var(--sui-control-medium-height) / 4));--sui-control-medium-height: 32px;--sui-control-large-border-width: 1px;--sui-control-large-border-radius: calc(var(--sui-control-large-height) / 8);--sui-control-large-padding: 0 calc((var(--sui-control-large-height) / 3));--sui-control-large-height: 48px;--sui-control-border-color: hsl(var(--sui-border-color-2-hsl));--sui-control-foreground-color: var(--sui-primary-foreground-color);--sui-control-background-color: hsl(var(--sui-background-color-4-hsl));--sui-control-font-family: var(--sui-font-family-default);--sui-control-font-size: var(--sui-font-size-default);--sui-control-line-height: var(--sui-line-height-compact);--sui-button-small-border-radius: var(--sui-control-small-border-radius);--sui-button-small-padding: var(--sui-control-small-padding);--sui-button-small-height: var(--sui-control-small-height);--sui-button-medium-border-radius: var(--sui-control-medium-border-radius);--sui-button-medium-padding: var(--sui-control-medium-padding);--sui-button-medium-height: var(--sui-control-medium-height);--sui-button-large-border-radius: var(--sui-control-large-border-radius);--sui-button-large-padding: var(--sui-control-large-padding);--sui-button-large-height: var(--sui-control-large-height);--sui-button-border-color: var(--sui-control-border-color);--sui-button-background-color: var(--sui-control-background-color);--sui-checkbox-border-radius: var(--sui-control-medium-border-radius);--sui-checkbox-height: 20px;--sui-checkbox-border-color: hsl(var(--sui-border-color-1-hsl));--sui-checkbox-background-color: var(--sui-control-background-color);--sui-option-border-radius: var(--sui-control-medium-border-radius);--sui-option-padding: calc((var(--sui-control-medium-height) / 6)) calc((var(--sui-control-medium-height) / 5));--sui-option-height: var(--sui-control-medium-height);--sui-listbox-border-radius: var(--sui-control-medium-border-radius);--sui-listbox-border-color: var(--sui-control-border-color);--sui-listbox-foreground-color: var(--sui-control-foreground-color);--sui-listbox-background-color: hsl(var(--sui-background-color-1-hsl));--sui-textbox-border-radius: var(--sui-control-medium-border-radius);--sui-textbox-height: var(--sui-control-medium-height);--sui-textbox-border-color: var(--sui-control-border-color);--sui-textbox-foreground-color: var(--sui-control-foreground-color);--sui-textbox-background-color: hsl(var(--sui-background-color-1-hsl));--sui-textbox-font-family: var(--sui-font-family-default);--sui-textbox-font-size: var(--sui-font-size-default);--sui-textbox-singleline-padding: 0 8px;--sui-textbox-singleline-min-width: 240px;--sui-textbox-singleline-line-height: var(--sui-line-height-compact);--sui-textbox-multiline-padding: 16px;--sui-textbox-multiline-min-width: 480px;--sui-textbox-multiline-line-height: var(--sui-line-height-comfortable);--sui-tab-height: var(--sui-control-medium-height);--sui-tab-small-height: var(--sui-control-small-height);--sui-tab-medium-height: var(--sui-control-medium-height);--sui-tab-large-height: var(--sui-control-large-height);--sui-primary-toolbar-size: 48px;--sui-secondary-toolbar-size: 40px;--sui-primary-row-height: 48px;--sui-secondary-row-height: 40px}@media (pointer: coarse){:root,:host{--sui-control-small-height: 30px;--sui-control-medium-height: 40px;--sui-control-large-height: 60px;--sui-checkbox-height: 24px;--sui-primary-toolbar-size: 56px;--sui-secondary-toolbar-size: 48px;--sui-primary-row-height: 56px;--sui-secondary-row-height: 48px}}@media (prefers-reduced-transparency){:root,:host{--sui-primary-background-color-translucent: hsl(var(--sui-background-color-2-hsl));--sui-secondary-background-color-translucent: hsl(var(--sui-background-color-3-hsl));--sui-tertiary-background-color-translucent: hsl(var(--sui-background-color-4-hsl))}}:root[data-theme=light],:host[data-theme=light]{color-scheme:light;--sui-foreground-color-1-hsl: var(--sui-base-hue) 5% 5%;--sui-foreground-color-2-hsl: var(--sui-base-hue) 5% 25%;--sui-foreground-color-3-hsl: var(--sui-base-hue) 5% 35%;--sui-foreground-color-4-hsl: var(--sui-base-hue) 5% 45%;--sui-foreground-color-5-hsl: var(--sui-base-hue) 5% 65%;--sui-background-color-1-hsl: var(--sui-base-hue) 5% 100%;--sui-background-color-2-hsl: var(--sui-base-hue) 5% 98%;--sui-background-color-3-hsl: var(--sui-base-hue) 5% 96%;--sui-background-color-4-hsl: var(--sui-base-hue) 5% 94%;--sui-background-color-5-hsl: var(--sui-base-hue) 5% 84%;--sui-border-color-1-hsl: var(--sui-base-hue) 5% 65%;--sui-border-color-2-hsl: var(--sui-base-hue) 5% 84%;--sui-border-color-3-hsl: var(--sui-base-hue) 5% 88%;--sui-shadow-color: var(--sui-base-hue) 10% 0%;--sui-primary-accent-color-text: hsl(var(--sui-base-hue) 80% 40%);--sui-primary-accent-color-light: hsl(var(--sui-base-hue) 80% 45%);--sui-primary-accent-color: hsl(var(--sui-base-hue) 80% 40%);--sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 80% 35%);--sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);--sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);--sui-error-color-hue: 0;--sui-warning-color-hue: 40;--sui-info-color-hue: 210;--sui-success-color-hue: 100;--sui-alert-foreground-color-saturation: 85%;--sui-alert-foreground-color-lightness: 25%;--sui-alert-background-color-saturation: 65%;--sui-alert-background-color-lightness: 90%;--sui-alert-border-color-saturation: 48%;--sui-alert-border-color-lightness: 68%}:root[data-theme=dark],:host[data-theme=dark]{color-scheme:dark;--sui-foreground-color-1-hsl: var(--sui-base-hue) 10% 95%;--sui-foreground-color-2-hsl: var(--sui-base-hue) 10% 75%;--sui-foreground-color-3-hsl: var(--sui-base-hue) 10% 65%;--sui-foreground-color-4-hsl: var(--sui-base-hue) 10% 55%;--sui-foreground-color-5-hsl: var(--sui-base-hue) 10% 35%;--sui-background-color-1-hsl: var(--sui-base-hue) 10% 10%;--sui-background-color-2-hsl: var(--sui-base-hue) 10% 12%;--sui-background-color-3-hsl: var(--sui-base-hue) 10% 14%;--sui-background-color-4-hsl: var(--sui-base-hue) 10% 16%;--sui-background-color-5-hsl: var(--sui-base-hue) 10% 26%;--sui-border-color-1-hsl: var(--sui-base-hue) 10% 45%;--sui-border-color-2-hsl: var(--sui-base-hue) 10% 26%;--sui-border-color-3-hsl: var(--sui-base-hue) 10% 22%;--sui-shadow-color: var(--sui-base-hue) 10% 0%;--sui-primary-accent-color-text: hsl(var(--sui-base-hue) 100% 60%);--sui-primary-accent-color-light: hsl(var(--sui-base-hue) 100% 45%);--sui-primary-accent-color: hsl(var(--sui-base-hue) 100% 40%);--sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 100% 35%);--sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);--sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);--sui-error-color-hue: 0;--sui-warning-color-hue: 40;--sui-info-color-hue: 210;--sui-success-color-hue: 100;--sui-alert-foreground-color-saturation: 85%;--sui-alert-foreground-color-lightness: 75%;--sui-alert-background-color-saturation: 40%;--sui-alert-background-color-lightness: 10%;--sui-alert-border-color-saturation: 38%;--sui-alert-border-color-lightness: 18%}@media (prefers-color-scheme: light){:root:not([data-theme]),:host:not([data-theme]){color-scheme:light;--sui-foreground-color-1-hsl: var(--sui-base-hue) 5% 5%;--sui-foreground-color-2-hsl: var(--sui-base-hue) 5% 25%;--sui-foreground-color-3-hsl: var(--sui-base-hue) 5% 35%;--sui-foreground-color-4-hsl: var(--sui-base-hue) 5% 45%;--sui-foreground-color-5-hsl: var(--sui-base-hue) 5% 65%;--sui-background-color-1-hsl: var(--sui-base-hue) 5% 100%;--sui-background-color-2-hsl: var(--sui-base-hue) 5% 98%;--sui-background-color-3-hsl: var(--sui-base-hue) 5% 96%;--sui-background-color-4-hsl: var(--sui-base-hue) 5% 94%;--sui-background-color-5-hsl: var(--sui-base-hue) 5% 84%;--sui-border-color-1-hsl: var(--sui-base-hue) 5% 65%;--sui-border-color-2-hsl: var(--sui-base-hue) 5% 84%;--sui-border-color-3-hsl: var(--sui-base-hue) 5% 88%;--sui-shadow-color: var(--sui-base-hue) 10% 0%;--sui-primary-accent-color-text: hsl(var(--sui-base-hue) 80% 40%);--sui-primary-accent-color-light: hsl(var(--sui-base-hue) 80% 45%);--sui-primary-accent-color: hsl(var(--sui-base-hue) 80% 40%);--sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 80% 35%);--sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);--sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);--sui-error-color-hue: 0;--sui-warning-color-hue: 40;--sui-info-color-hue: 210;--sui-success-color-hue: 100;--sui-alert-foreground-color-saturation: 85%;--sui-alert-foreground-color-lightness: 25%;--sui-alert-background-color-saturation: 65%;--sui-alert-background-color-lightness: 90%;--sui-alert-border-color-saturation: 48%;--sui-alert-border-color-lightness: 68%}}@media (prefers-color-scheme: dark){:root:not([data-theme]),:host:not([data-theme]){color-scheme:dark;--sui-foreground-color-1-hsl: var(--sui-base-hue) 10% 95%;--sui-foreground-color-2-hsl: var(--sui-base-hue) 10% 75%;--sui-foreground-color-3-hsl: var(--sui-base-hue) 10% 65%;--sui-foreground-color-4-hsl: var(--sui-base-hue) 10% 55%;--sui-foreground-color-5-hsl: var(--sui-base-hue) 10% 35%;--sui-background-color-1-hsl: var(--sui-base-hue) 10% 10%;--sui-background-color-2-hsl: var(--sui-base-hue) 10% 12%;--sui-background-color-3-hsl: var(--sui-base-hue) 10% 14%;--sui-background-color-4-hsl: var(--sui-base-hue) 10% 16%;--sui-background-color-5-hsl: var(--sui-base-hue) 10% 26%;--sui-border-color-1-hsl: var(--sui-base-hue) 10% 45%;--sui-border-color-2-hsl: var(--sui-base-hue) 10% 26%;--sui-border-color-3-hsl: var(--sui-base-hue) 10% 22%;--sui-shadow-color: var(--sui-base-hue) 10% 0%;--sui-primary-accent-color-text: hsl(var(--sui-base-hue) 100% 60%);--sui-primary-accent-color-light: hsl(var(--sui-base-hue) 100% 45%);--sui-primary-accent-color: hsl(var(--sui-base-hue) 100% 40%);--sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 100% 35%);--sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);--sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);--sui-error-color-hue: 0;--sui-warning-color-hue: 40;--sui-info-color-hue: 210;--sui-success-color-hue: 100;--sui-alert-foreground-color-saturation: 85%;--sui-alert-foreground-color-lightness: 75%;--sui-alert-background-color-saturation: 40%;--sui-alert-background-color-lightness: 10%;--sui-alert-border-color-saturation: 38%;--sui-alert-border-color-lightness: 18%}}.material-symbols-outlined{font-variation-settings:"FILL" 0,"wght" 300,"GRAD" 0,"opsz" 24}*,:before,:after{overflow-anchor:none;scroll-behavior:smooth;box-sizing:border-box;outline-offset:0px;outline-width:var(--sui-focus-ring-width)!important;outline-style:solid;outline-color:transparent;border-width:0;border-style:solid;vertical-align:top}@media (prefers-reduced-motion){*,:before,:after{scroll-behavior:auto;transition-duration:1ms!important}}::selection{background-color:var(--sui-primary-accent-color-translucent)}*{-webkit-tap-highlight-color:transparent}:focus{z-index:1;outline-width:0}:focus-visible{outline-color:var(--sui-primary-accent-color-translucent);z-index:2}h1,h2,h3,h4,h5,h6{margin:0;font-weight:var(--sui-font-weight-bold, bold);line-height:var(--sui-line-height-default)}h1{font-size:32px}h2{font-size:28px}h3{font-size:24px}h4{font-size:20px}h5{font-size:16px}h6{font-size:12px}strong{font-weight:var(--sui-font-weight-bold, bold)}a{color:var(--sui-primary-accent-color-text);text-decoration:none;text-underline-offset:2px}a:hover,a:focus,a:active{text-decoration:underline}:root[data-underline-links=true] a,:host[data-underline-links=true] a{text-decoration:underline}p,ul,ol,dl{margin:var(--sui-paragraph-margin) 0;line-height:var(--sui-line-height-comfortable)}ul,ol{padding-inline:2em}code,pre{border-radius:4px;background-color:var(--sui-code-background-color);font-family:var(--sui-font-family-monospace);font-size:var(--sui-font-size-monospace);vertical-align:-.05em}pre{padding:8px;line-height:var(--sui-line-height-compact);-webkit-user-select:text;user-select:text}code{padding:2px 4px}table{border-collapse:collapse}th,td{border:1px solid var(--sui-textbox-border-color);padding:8px}blockquote{margin-inline:16px 0;border-inline-start:4px solid var(--sui-textbox-border-color);padding-inline-start:12px}.disabled,.readonly,[aria-disabled=true],[aria-readonly=true],[inert]:not(body){cursor:default;pointer-events:none;-webkit-user-select:none;user-select:none;filter:grayscale(1) opacity(.35)}.disabled :global(*),.readonly :global(*),[aria-disabled=true] :global(*),[aria-readonly=true] :global(*),[inert]:not(body) :global(*){filter:grayscale(0) opacity(1)}.disabled *,.readonly *,[aria-disabled=true] *,[aria-readonly=true] *,[inert] *{cursor:default;pointer-events:none;-webkit-user-select:none;user-select:none}