@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 +20 -18
- package/dist/assets/main-D5N5caDv.css +1 -0
- package/dist/sveltia-cms.js +177 -258
- package/dist/sveltia-cms.js.map +1 -1
- package/dist/sveltia-cms.mjs +186 -268
- package/dist/sveltia-cms.mjs.map +1 -1
- package/package.json +13 -13
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
|
-
-
|
|
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
|
|
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
|
-
-
|
|
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
|
-
-
|
|
240
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 [
|
|
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}
|