@kubex/zinc 1.1.120 → 1.1.122

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.
Files changed (41) hide show
  1. package/dist/custom-elements.json +1952 -921
  2. package/dist/vscode.html-custom-data.json +80 -58
  3. package/dist/web-types.json +208 -142
  4. package/dist/zn.d.ts +403 -298
  5. package/dist/zn.min.js +1511 -1370
  6. package/docs/pages/components/button.md +9 -0
  7. package/docs/pages/components/data-table-filter.md +60 -4
  8. package/docs/pages/components/data-table-search.md +3 -3
  9. package/docs/pages/components/data-table.md +78 -9
  10. package/docs/pages/components/datepicker.md +10 -0
  11. package/docs/pages/components/menu-item.md +16 -2
  12. package/docs/pages/components/translation-group.md +2 -2
  13. package/package.json +1 -1
  14. package/src/components/button/button.component.ts +11 -4
  15. package/src/components/button/button.scss +12 -1
  16. package/src/components/data-table/data-table.component.ts +341 -139
  17. package/src/components/data-table/data-table.scss +105 -42
  18. package/src/components/data-table/data-table.test.ts +110 -0
  19. package/src/components/data-table-filter/data-table-filter.component.ts +487 -49
  20. package/src/components/data-table-filter/data-table-filter.scss +163 -9
  21. package/src/components/data-table-filter/data-table-filter.test.ts +328 -2
  22. package/src/components/data-table-search/data-table-search.component.ts +1 -1
  23. package/src/components/datepicker/datepicker.component.ts +23 -2
  24. package/src/components/datepicker/datepicker.scss +25 -0
  25. package/src/components/datepicker/datepicker.test.ts +28 -1
  26. package/src/components/input/input.component.ts +1 -0
  27. package/src/components/input/input.scss +1 -1
  28. package/src/components/menu/menu.component.ts +2 -0
  29. package/src/components/menu/menu.scss +23 -2
  30. package/src/components/menu-item/menu-item.component.ts +7 -1
  31. package/src/components/menu-item/menu-item.scss +4 -4
  32. package/src/components/menu-item/menu-item.test.ts +39 -1
  33. package/src/components/panel/panel.component.ts +12 -5
  34. package/src/components/panel/panel.scss +3 -3
  35. package/src/components/query-builder/query-builder.component.ts +1 -1
  36. package/src/components/tooltip/tooltip.component.ts +2 -2
  37. package/src/components/tooltip/tooltip.test.ts +70 -2
  38. package/src/components/translation-group/translation-group.component.ts +5 -7
  39. package/src/components/translation-group/translation-group.test.ts +8 -8
  40. package/src/components/translations/translations.component.ts +3 -4
  41. package/src/components/translations/translations.test.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "name": "@kubex/zinc",
4
- "version": "1.1.120",
4
+ "version": "1.1.122",
5
5
  "description-markup": "markdown",
6
6
  "contributions": {
7
7
  "html": {
@@ -441,6 +441,11 @@
441
441
  "description": "Disables the hover background, for contexts where the tint doesn't fit.",
442
442
  "value": { "type": "boolean", "default": "false" }
443
443
  },
444
+ {
445
+ "name": "pill",
446
+ "description": "Renders the button as a pill: fully rounded, sentence case and regular\nweight. For label-like triggers such as filter chips.",
447
+ "value": { "type": "boolean", "default": "false" }
448
+ },
444
449
  {
445
450
  "name": "panel-bg",
446
451
  "value": { "type": "boolean", "default": "false" }
@@ -597,6 +602,11 @@
597
602
  "description": "Disables the hover background, for contexts where the tint doesn't fit.",
598
603
  "type": "boolean"
599
604
  },
605
+ {
606
+ "name": "pill",
607
+ "description": "Renders the button as a pill: fully rounded, sentence case and regular\nweight. For label-like triggers such as filter chips.",
608
+ "type": "boolean"
609
+ },
600
610
  { "name": "panelBackground", "type": "boolean" },
601
611
  { "name": "dropdownCloser", "type": "boolean" },
602
612
  { "name": "notification", "type": "number" },
@@ -2657,7 +2667,7 @@
2657
2667
  },
2658
2668
  {
2659
2669
  "name": "zn-data-table",
2660
- "description": "Short summary of the component's intended use.\n---\n\n\n### **Slots:**\n - _default_ - The default slot.\n- **search** - Slot for search component.\n- **sort** - Slot for sort component.\n- **filter** - Slot for filter component.\n- **filter-top** - Slot for top-level filter component.\n- **delete-action** - Slot for delete action button.\n- **modify-action** - Slot for modify action button.\n- **create-action** - Slot for create action button.\n- **inputs** - Slot for additional input controls.\n- **empty-state** - Slot for custom empty state.\n- **no-results** - Slot for a custom no-results state, shown when a search on a no-initial-load table returns no rows.\n\n### **CSS Properties:**\n - **--example** - An example CSS custom property. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
2670
+ "description": "Short summary of the component's intended use.\n---\n\n\n### **Slots:**\n - _default_ - The default slot.\n- **search** - Slot for search component, in the header's right-hand group.\n- **sort** - Slot for sort component, in the header's right-hand group.\n- **filter** - Slot for filter component, in the header's right-hand group.\n- **filter-top** - Slot for a top-level filter component, rendered above the table's panel.\n- **delete-action** - Slot for delete action button, shown beside the caption once rows are selected.\n- **modify-action** - Slot for modify action button, shown beside the caption once rows are selected.\n- **create-action** - Slot for create action button, at the end of the header's right-hand group.\n- **inputs** - Slot for additional input controls.\n- **empty-state** - Slot for custom empty state.\n- **no-results** - Slot for a custom no-results state, shown when a search on a no-initial-load table returns no rows.\n\n### **CSS Properties:**\n - **--example** - An example CSS custom property. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
2661
2671
  "doc-url": "",
2662
2672
  "attributes": [
2663
2673
  { "name": "data-uri", "value": { "type": "string" } },
@@ -2708,6 +2718,14 @@
2708
2718
  "value": { "type": "boolean", "default": "false" }
2709
2719
  },
2710
2720
  { "name": "hide-pagination", "value": { "type": "boolean" } },
2721
+ {
2722
+ "name": "hide-column-select",
2723
+ "value": { "type": "boolean", "default": "false" }
2724
+ },
2725
+ {
2726
+ "name": "hide-refresh",
2727
+ "value": { "type": "boolean", "default": "false" }
2728
+ },
2711
2729
  {
2712
2730
  "name": "standalone",
2713
2731
  "value": { "type": "boolean", "default": "false" }
@@ -2743,24 +2761,33 @@
2743
2761
  ],
2744
2762
  "slots": [
2745
2763
  { "name": "", "description": "The default slot." },
2746
- { "name": "search", "description": "Slot for search component." },
2747
- { "name": "sort", "description": "Slot for sort component." },
2748
- { "name": "filter", "description": "Slot for filter component." },
2764
+ {
2765
+ "name": "search",
2766
+ "description": "Slot for search component, in the header's right-hand group."
2767
+ },
2768
+ {
2769
+ "name": "sort",
2770
+ "description": "Slot for sort component, in the header's right-hand group."
2771
+ },
2772
+ {
2773
+ "name": "filter",
2774
+ "description": "Slot for filter component, in the header's right-hand group."
2775
+ },
2749
2776
  {
2750
2777
  "name": "filter-top",
2751
- "description": "Slot for top-level filter component."
2778
+ "description": "Slot for a top-level filter component, rendered above the table's panel."
2752
2779
  },
2753
2780
  {
2754
2781
  "name": "delete-action",
2755
- "description": "Slot for delete action button."
2782
+ "description": "Slot for delete action button, shown beside the caption once rows are selected."
2756
2783
  },
2757
2784
  {
2758
2785
  "name": "modify-action",
2759
- "description": "Slot for modify action button."
2786
+ "description": "Slot for modify action button, shown beside the caption once rows are selected."
2760
2787
  },
2761
2788
  {
2762
2789
  "name": "create-action",
2763
- "description": "Slot for create action button."
2790
+ "description": "Slot for create action button, at the end of the header's right-hand group."
2764
2791
  },
2765
2792
  {
2766
2793
  "name": "inputs",
@@ -2797,6 +2824,8 @@
2797
2824
  { "name": "unsortableHeaders", "type": "string" },
2798
2825
  { "name": "unsortable", "type": "boolean" },
2799
2826
  { "name": "hidePagination", "type": "boolean" },
2827
+ { "name": "hideColumnSelect", "type": "boolean" },
2828
+ { "name": "hideRefresh", "type": "boolean" },
2800
2829
  { "name": "standalone", "type": "boolean" },
2801
2830
  { "name": "caption", "type": "string" },
2802
2831
  { "name": "emptyStateCaption", "type": "string" },
@@ -2810,6 +2839,7 @@
2810
2839
  { "name": "itemsPerPage", "type": "number" },
2811
2840
  { "name": "selectAllButton", "type": "ZnButton" },
2812
2841
  { "name": "requestParams", "type": "Record<string, any>" },
2842
+ { "name": "filterClearListener" },
2813
2843
  { "name": "filterChangeListener" },
2814
2844
  { "name": "searchChangeListener" }
2815
2845
  ],
@@ -2818,41 +2848,57 @@
2818
2848
  },
2819
2849
  {
2820
2850
  "name": "zn-data-table-filter",
2821
- "description": "Short summary of the component's intended use.\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Slots:**\n - _default_ - The default slot.\n- **example** - An example slot.\n\n### **CSS Properties:**\n - **--example** - An example CSS custom property. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
2851
+ "description": "An inline filter bar for data tables. Each active filter is a pill whose dropdown sets its value.\n---\n\n\n### **Events:**\n - **zn-filter-change** - Emitted when the active filters change. Read the encoded query off `value`.\n\n### **Methods:**\n - **clear()** - Removes every active filter.",
2822
2852
  "doc-url": "",
2823
2853
  "attributes": [
2824
2854
  {
2825
2855
  "name": "filters",
2826
- "value": { "type": "string", "default": "\"\"" }
2856
+ "value": { "type": "QueryBuilderData", "default": "[]" }
2827
2857
  },
2828
2858
  {
2829
2859
  "name": "name",
2830
2860
  "value": { "type": "string", "default": "\"data-table-filter\"" }
2831
2861
  },
2832
- { "name": "value", "value": { "type": "string" } }
2833
- ],
2834
- "slots": [
2835
- { "name": "", "description": "The default slot." },
2836
- { "name": "example", "description": "An example slot." }
2862
+ { "name": "value", "value": { "type": "string", "default": "''" } },
2863
+ {
2864
+ "name": "default-filters",
2865
+ "description": "Filter keys to show a pill for before the user adds any.",
2866
+ "value": { "type": "string", "default": "''" }
2867
+ }
2837
2868
  ],
2838
2869
  "events": [
2839
- { "name": "zn-event-name", "description": "Emitted as an example." }
2870
+ {
2871
+ "name": "zn-filter-change",
2872
+ "description": "Emitted when the active filters change. Read the encoded query off `value`."
2873
+ }
2840
2874
  ],
2841
2875
  "js": {
2842
2876
  "properties": [
2843
- { "name": "filters", "type": "string" },
2877
+ { "name": "filters", "type": "QueryBuilderData" },
2844
2878
  { "name": "name", "type": "string" },
2845
2879
  { "name": "value", "type": "string" },
2880
+ {
2881
+ "name": "defaultFilters",
2882
+ "description": "Filter keys to show a pill for before the user adds any.",
2883
+ "type": "string"
2884
+ },
2885
+ {
2886
+ "name": "suggestions",
2887
+ "description": "Typeahead values per filter key. `zn-data-table` fills this from the rows it has loaded.",
2888
+ "type": "Record<string, string[]>"
2889
+ },
2846
2890
  { "name": "validationMessage", "type": "string" },
2847
2891
  { "name": "validity", "type": "ValidityState" },
2848
- { "name": "handleQBClear" },
2849
- { "name": "handleQBReset" },
2850
- { "name": "handleQBUpdate" }
2892
+ {
2893
+ "name": "activeCount",
2894
+ "description": "Number of filters with a value set.",
2895
+ "type": "number"
2896
+ }
2851
2897
  ],
2852
2898
  "events": [
2853
2899
  {
2854
- "name": "zn-event-name",
2855
- "description": "Emitted as an example."
2900
+ "name": "zn-filter-change",
2901
+ "description": "Emitted when the active filters change. Read the encoded query off `value`."
2856
2902
  }
2857
2903
  ]
2858
2904
  }
@@ -2974,7 +3020,7 @@
2974
3020
  },
2975
3021
  {
2976
3022
  "name": "zn-datepicker",
2977
- "description": "A date picker component with calendar popup and input validation.\n---\n\n\n### **Events:**\n - **zn-change** - Emitted when the date value changes.\n- **zn-input** - Emitted when the input value changes.\n- **zn-blur** - Emitted when the input loses focus.\n- **zn-focus** - Emitted when the input gains focus.\n\n### **Methods:**\n - **focus(options: _FocusOptions_)** - Sets focus on the input.\n- **blur()** - Removes focus from the input.\n- **select()** - Selects all the text in the input.\n- **checkValidity(): _boolean_** - Checks the validity but does not show a validation message. Returns `true` when valid and `false` when invalid.\n- **getForm(): _HTMLFormElement | null_** - Gets the associated form, if one exists.\n- **reportValidity()** - Checks for validity and shows the browser's validation message if the control is invalid.\n- **setCustomValidity(message: _string_)** - Sets a custom validation message. Pass an empty string to restore validity.\n\n### **Slots:**\n - **label** - The datepicker's label. Alternatively, you can use the `label` attribute.\n- **label-tooltip** - Tooltip content for the label. Alternatively, you can use the `label-tooltip` attribute.\n- **context-note** - Additional context text displayed above the input. Alternatively, you can use the `context-note` attribute.\n- **help-text** - Help text displayed below the input. Alternatively, you can use the `help-text` attribute.\n- **prefix** - Content to display before the input (in addition to the default calendar icon).\n- **suffix** - Content to display after the input.\n\n### **CSS Properties:**\n - **--zn-input-*** - Inherited input component CSS custom properties. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **form-control** - The form control wrapper.\n- **form-control-label** - The label element.\n- **form-control-input** - The input wrapper.\n- **form-control-help-text** - The help text element.",
3023
+ "description": "A date picker component with calendar popup and input validation.\n---\n\n\n### **Events:**\n - **zn-change** - Emitted when the date value changes.\n- **zn-input** - Emitted when the input value changes.\n- **zn-blur** - Emitted when the input loses focus.\n- **zn-focus** - Emitted when the input gains focus.\n\n### **Methods:**\n - **focus(options: _FocusOptions_)** - Sets focus on the input.\n- **blur()** - Removes focus from the input.\n- **select()** - Selects all the text in the input.\n- **checkValidity(): _boolean_** - Checks the validity but does not show a validation message. Returns `true` when valid and `false` when invalid.\n- **getForm(): _HTMLFormElement | null_** - Gets the associated form, if one exists.\n- **reportValidity()** - Checks for validity and shows the browser's validation message if the control is invalid.\n- **setCustomValidity(message: _string_)** - Sets a custom validation message. Pass an empty string to restore validity.\n\n### **Slots:**\n - **label** - The datepicker's label. Alternatively, you can use the `label` attribute.\n- **label-tooltip** - Tooltip content for the label. Alternatively, you can use the `label-tooltip` attribute.\n- **context-note** - Additional context text displayed above the input. Alternatively, you can use the `context-note` attribute.\n- **help-text** - Help text displayed below the input. Alternatively, you can use the `help-text` attribute.\n- **prefix** - Content to display before the input (in addition to the default calendar icon).\n- **suffix** - Content to display after the input.\n\n### **CSS Properties:**\n - **--zn-input-*** - Inherited input component CSS custom properties. _(default: undefined)_\n- **--zn-datepicker-inline-border-color** - Border colour of the calendar in `inline` mode. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **form-control** - The form control wrapper.\n- **form-control-label** - The label element.\n- **form-control-input** - The input wrapper.\n- **form-control-help-text** - The help text element.",
2978
3024
  "doc-url": "",
2979
3025
  "attributes": [
2980
3026
  {
@@ -3043,6 +3089,11 @@
3043
3089
  "name": "flush",
3044
3090
  "value": { "type": "boolean", "default": "false" }
3045
3091
  },
3092
+ {
3093
+ "name": "inline",
3094
+ "description": "Renders the calendar in place instead of a popup, hiding the text input.",
3095
+ "value": { "type": "boolean", "default": "false" }
3096
+ },
3046
3097
  {
3047
3098
  "name": "required",
3048
3099
  "description": "Makes the input a required field.",
@@ -3211,6 +3262,11 @@
3211
3262
  "type": "string"
3212
3263
  },
3213
3264
  { "name": "flush", "type": "boolean" },
3265
+ {
3266
+ "name": "inline",
3267
+ "description": "Renders the calendar in place instead of a popup, hiding the text input.",
3268
+ "type": "boolean"
3269
+ },
3214
3270
  {
3215
3271
  "name": "required",
3216
3272
  "description": "Makes the input a required field.",
@@ -5160,7 +5216,7 @@
5160
5216
  },
5161
5217
  {
5162
5218
  "name": "zn-input",
5163
- "description": "Short summary of the component's intended use.\n---\n\n\n### **Events:**\n - **zn-blur** - Emitted when the control loses focus.\n- **zn-change** - Emitted when an alteration to the control's value is committed by the user.\n- **zn-clear** - Emitted when the clear button is activated.\n- **zn-focus** - Emitted when the control gains focus.\n- **zn-input** - Emitted when the control receives input.\n- **zn-invalid** - Emitted when the form control has been checked for validity and its constraints aren't satisfied.\n- **zn-slash-select** - Emitted when a slash menu item is chosen. Cancelable — call `preventDefault()` to suppress the insertion and handle the item yourself.\n- **zn-slash-insert** - Emitted after a slash menu item's value has been inserted.\n\n### **Methods:**\n - **resolveSlashItems(search): _Promise<SlashMenuItem[]>_** - The insertions the slash menu offers, gathered from every source, in the order they were declared.\n- **showSlashMenu()** - Opens the slash menu at the caret, inserting the trigger if it isn't already there.\n- **hideSlashMenu()** - Closes the slash menu.\n- **focus(options: _FocusOptions_)** - Sets focus on the input.\n- **blur()** - Removes focus from the input.\n- **select()** - Selects all the text in the input.\n- **setSelectionRange(selectionStart: _number_, selectionEnd: _number_, selectionDirection: _'forward' | 'backward' | 'none'_)** - Sets the start and end positions of the text selection (0-based).\n- **setRangeText(replacement: _string_, start: _number_, end: _number_, selectMode: _'select' | 'start' | 'end' | 'preserve'_)** - Replaces a range of text with a new string.\n- **showPicker()** - Displays the browser picker for an input element (only works if the browser supports it for the input type).\n- **stepUp()** - Increments the value of a numeric input type by the value of the step attribute.\n- **stepDown()** - Decrements the value of a numeric input type by the value of the step attribute.\n- **checkValidity(): _boolean_** - Checks the validity but does not show a validation message. Returns `true` when valid and `false` when invalid.\n- **getForm(): _HTMLFormElement | null_** - Gets the associated form, if one exists.\n- **reportValidity()** - Checks for validity and shows the browser's validation message if the control is invalid.\n- **setCustomValidity(message: _string_)** - Sets a custom validation message. Pass an empty string to restore validity.\n\n### **Slots:**\n - **label** - The input's label. Alternatively, you can use the `label` attribute.\n- **label-tooltip** - Used to add text that is displayed in a tooltip next to the label. Alternatively, you can use the `label-tooltip` attribute.\n- **context-note** - Used to add contextual text that is displayed above the input, on the right. Alternatively, you can use the `context-note` attribute. Range inputs display their live value here unless this is set.\n- **prefix** - Used to prepend a presentational icon or similar element to the input.\n- **suffix** - Used to append a presentational icon or similar element to the input.\n- **clear-icon** - An icon to use in lieu of the default clear icon.\n- **show-password-icon** - An icon to use in lieu of the default show password icon.\n- **hide-password-icon** - An icon to use in lieu of the default hide password icon.\n- **help-text** - Text that describes how to use the input. Alternatively, you can use the `help-text` attribute.\n- **slash-items** - `<zn-slash-item>` elements describing the insertions offered by the slash menu. Items are picked up wherever they sit inside the input, so this slot name is optional.\n- **slash-menu** - A `<zn-slash-menu>` to use instead of the built-in one, so its heading, sizing and styling can be set in markup. Any `<zn-slash-item>` children of it become the menu's items.\n\n### **CSS Properties:**\n - **--zn-range-track-height** - The height of a range input's track. _(default: undefined)_\n- **--zn-range-track-color** - The color of a range input's track. _(default: undefined)_\n- **--zn-range-thumb-size** - The diameter of a range input's thumb. _(default: undefined)_\n- **--zn-range-thumb-color** - The color of a range input's thumb. _(default: undefined)_\n- **--zn-range-thumb-ring-width** - The width of the ring drawn around a range input's thumb. _(default: undefined)_\n\n### **CSS Parts:**\n - **form-control** - The form control that wraps the label, input, and help text.\n- **slash-menu** - The slash menu shown at the caret.\n- **form-control-label** - The label's wrapper.\n- **form-control-input** - The input's wrapper.\n- **form-control-help-text** - The help text's wrapper.\n- **base** - The component's base wrapper.\n- **input** - The internal `<input>` control.\n- **prefix** - The container that wraps the prefix.\n- **clear-button** - The clear button.\n- **password-toggle-button** - The password toggle button.\n- **suffix** - The container that wraps the suffix.",
5219
+ "description": "Short summary of the component's intended use.\n---\n\n\n### **Events:**\n - **zn-blur** - Emitted when the control loses focus.\n- **zn-change** - Emitted when an alteration to the control's value is committed by the user.\n- **zn-clear** - Emitted when the clear button is activated.\n- **zn-focus** - Emitted when the control gains focus.\n- **zn-input** - Emitted when the control receives input.\n- **zn-invalid** - Emitted when the form control has been checked for validity and its constraints aren't satisfied.\n- **zn-slash-select** - Emitted when a slash menu item is chosen. Cancelable — call `preventDefault()` to suppress the insertion and handle the item yourself.\n- **zn-slash-insert** - Emitted after a slash menu item's value has been inserted.\n\n### **Methods:**\n - **resolveSlashItems(search): _Promise<SlashMenuItem[]>_** - The insertions the slash menu offers, gathered from every source, in the order they were declared.\n- **showSlashMenu()** - Opens the slash menu at the caret, inserting the trigger if it isn't already there.\n- **hideSlashMenu()** - Closes the slash menu.\n- **focus(options: _FocusOptions_)** - Sets focus on the input.\n- **blur()** - Removes focus from the input.\n- **select()** - Selects all the text in the input.\n- **setSelectionRange(selectionStart: _number_, selectionEnd: _number_, selectionDirection: _'forward' | 'backward' | 'none'_)** - Sets the start and end positions of the text selection (0-based).\n- **setRangeText(replacement: _string_, start: _number_, end: _number_, selectMode: _'select' | 'start' | 'end' | 'preserve'_)** - Replaces a range of text with a new string.\n- **showPicker()** - Displays the browser picker for an input element (only works if the browser supports it for the input type).\n- **stepUp()** - Increments the value of a numeric input type by the value of the step attribute.\n- **stepDown()** - Decrements the value of a numeric input type by the value of the step attribute.\n- **checkValidity(): _boolean_** - Checks the validity but does not show a validation message. Returns `true` when valid and `false` when invalid.\n- **getForm(): _HTMLFormElement | null_** - Gets the associated form, if one exists.\n- **reportValidity()** - Checks for validity and shows the browser's validation message if the control is invalid.\n- **setCustomValidity(message: _string_)** - Sets a custom validation message. Pass an empty string to restore validity.\n\n### **Slots:**\n - **label** - The input's label. Alternatively, you can use the `label` attribute.\n- **label-tooltip** - Used to add text that is displayed in a tooltip next to the label. Alternatively, you can use the `label-tooltip` attribute.\n- **context-note** - Used to add contextual text that is displayed above the input, on the right. Alternatively, you can use the `context-note` attribute. Range inputs display their live value here unless this is set.\n- **prefix** - Used to prepend a presentational icon or similar element to the input.\n- **suffix** - Used to append a presentational icon or similar element to the input.\n- **clear-icon** - An icon to use in lieu of the default clear icon.\n- **show-password-icon** - An icon to use in lieu of the default show password icon.\n- **hide-password-icon** - An icon to use in lieu of the default hide password icon.\n- **help-text** - Text that describes how to use the input. Alternatively, you can use the `help-text` attribute.\n- **slash-items** - `<zn-slash-item>` elements describing the insertions offered by the slash menu. Items are picked up wherever they sit inside the input, so this slot name is optional.\n- **slash-menu** - A `<zn-slash-menu>` to use instead of the built-in one, so its heading, sizing and styling can be set in markup. Any `<zn-slash-item>` children of it become the menu's items.\n\n### **CSS Properties:**\n - **--zn-input-box-shadow** - Shadow cast by the field; set to `none` inside a panel that draws its own edge. _(default: undefined)_\n- **--zn-range-track-height** - The height of a range input's track. _(default: undefined)_\n- **--zn-range-track-color** - The color of a range input's track. _(default: undefined)_\n- **--zn-range-thumb-size** - The diameter of a range input's thumb. _(default: undefined)_\n- **--zn-range-thumb-color** - The color of a range input's thumb. _(default: undefined)_\n- **--zn-range-thumb-ring-width** - The width of the ring drawn around a range input's thumb. _(default: undefined)_\n\n### **CSS Parts:**\n - **form-control** - The form control that wraps the label, input, and help text.\n- **slash-menu** - The slash menu shown at the caret.\n- **form-control-label** - The label's wrapper.\n- **form-control-input** - The input's wrapper.\n- **form-control-help-text** - The help text's wrapper.\n- **base** - The component's base wrapper.\n- **input** - The internal `<input>` control.\n- **prefix** - The container that wraps the prefix.\n- **clear-button** - The clear button.\n- **password-toggle-button** - The password toggle button.\n- **suffix** - The container that wraps the suffix.",
5164
5220
  "doc-url": "",
5165
5221
  "attributes": [
5166
5222
  {
@@ -6038,7 +6094,7 @@
6038
6094
  },
6039
6095
  {
6040
6096
  "name": "zn-markdown-editor",
6041
- "description": "A markdown editor with live preview, split view, and a fullscreen mode.\n---\n\n\n### **Events:**\n - **zn-view-mode-change** - Emitted when the user switches between editor / split / preview.\n- **zn-change** - Emitted when the markdown content changes.\n- **zn-input** - Emitted on each keystroke in the editor.\n\n### **Methods:**\n - **focus(options: _FocusOptions_)** - Sets focus on the editor.\n- **blur()** - Removes focus from the editor.\n\n### **Slots:**\n - **label** - The editor label. Alternatively, use the `label` attribute.\n- **help-text** - Help text shown below the editor. Alternatively, use the `help-text` attribute.\n- _default_ - The panel's main content.\n- **actions** - Actions displayed in the panel header (buttons, chips, etc).\n- **footer** - Content displayed in the panel footer.\n\n### **CSS Properties:**\n - **--zn-panel-basis** - The flex-basis of the panel. Can be set using the basis-px attribute. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **toolbar** - The toolbar containing the view-mode and fullscreen controls.\n- **editor** - The textarea wrapper.\n- **preview** - The rendered markdown preview.",
6097
+ "description": "A markdown editor with live preview, split view, and a fullscreen mode.\n---\n\n\n### **Events:**\n - **zn-view-mode-change** - Emitted when the user switches between editor / split / preview.\n- **zn-change** - Emitted when the markdown content changes.\n- **zn-input** - Emitted on each keystroke in the editor.\n\n### **Methods:**\n - **focus(options: _FocusOptions_)** - Sets focus on the editor.\n- **blur()** - Removes focus from the editor.\n\n### **Slots:**\n - **label** - The editor label. Alternatively, use the `label` attribute.\n- **help-text** - Help text shown below the editor. Alternatively, use the `help-text` attribute.\n- _default_ - The panel's main content.\n- **actions** - Actions displayed in the panel header (buttons, chips, etc).\n- **footer** - Content displayed in the panel footer.\n\n### **CSS Properties:**\n - **--zn-panel-basis** - The flex-basis of the panel. Can be set using the basis-px attribute. _(default: undefined)_\n- **--zn-panel-header-padding** - Padding around the header row. Defaults to `--zn-base-gap`. _(default: undefined)_\n- **--zn-panel-footer-padding** - Padding around the footer row. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **toolbar** - The toolbar containing the view-mode and fullscreen controls.\n- **editor** - The textarea wrapper.\n- **preview** - The rendered markdown preview.\n- **header** - The header region, when a caption or actions are given.\n- **header-content** - The padded row inside the header, forwarded from zn-header.\n- **footer** - The footer region, when the footer slot is filled.",
6042
6098
  "doc-url": "",
6043
6099
  "attributes": [
6044
6100
  {
@@ -6257,7 +6313,7 @@
6257
6313
  },
6258
6314
  {
6259
6315
  "name": "zn-menu",
6260
- "description": "Short summary of the component's intended use.\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Slots:**\n - _default_ - The default slot.\n- **example** - An example slot.\n\n### **CSS Properties:**\n - **--example** - An example CSS custom property. _(default: undefined)_\n- **--zn-menu-max-height** - Caps the menu's height and makes it scroll internally. Unset (`none`) by default, so the menu grows to fit its items unless a consumer sets this. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
6316
+ "description": "Short summary of the component's intended use.\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Slots:**\n - _default_ - The default slot.\n- **example** - An example slot.\n\n### **CSS Properties:**\n - **--example** - An example CSS custom property. _(default: undefined)_\n- **--zn-menu-max-height** - Caps the menu's height and makes it scroll internally. Unset (`none`) by default, so the menu grows to fit its items unless a consumer sets this. _(default: undefined)_\n- **--zn-menu-min-width** - Overrides the menu's resting width. Defaults to `--zn-size-spanel`, or 245px for `variant=\"shell\"`. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
6261
6317
  "doc-url": "",
6262
6318
  "attributes": [
6263
6319
  {
@@ -6362,6 +6418,11 @@
6362
6418
  "name": "confirm",
6363
6419
  "value": { "type": "boolean", "default": "false" }
6364
6420
  },
6421
+ {
6422
+ "name": "keep-open",
6423
+ "description": "Leaves a containing dropdown open when this item is selected, whatever the dropdown's own setting.",
6424
+ "value": { "type": "boolean", "default": "false" }
6425
+ },
6365
6426
  {
6366
6427
  "name": "flush",
6367
6428
  "description": "Removes all padding from the menu item.",
@@ -6441,6 +6502,11 @@
6441
6502
  { "name": "rel", "type": "string" },
6442
6503
  { "name": "gaid", "type": "string" },
6443
6504
  { "name": "confirm", "type": "boolean" },
6505
+ {
6506
+ "name": "keepOpen",
6507
+ "description": "Leaves a containing dropdown open when this item is selected, whatever the dropdown's own setting.",
6508
+ "type": "boolean"
6509
+ },
6444
6510
  {
6445
6511
  "name": "flush",
6446
6512
  "description": "Removes all padding from the menu item.",
@@ -7177,7 +7243,7 @@
7177
7243
  },
7178
7244
  {
7179
7245
  "name": "zn-panel",
7180
- "description": "Panels are versatile containers that provide structure for organizing content with optional headers and footers.\n---\n\n\n### **Slots:**\n - _default_ - The panel's main content.\n- **actions** - Actions displayed in the panel header (buttons, chips, etc).\n- **footer** - Content displayed in the panel footer.\n\n### **CSS Properties:**\n - **--zn-panel-basis** - The flex-basis of the panel. Can be set using the basis-px attribute. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
7246
+ "description": "Panels are versatile containers that provide structure for organizing content with optional headers and footers.\n---\n\n\n### **Slots:**\n - _default_ - The panel's main content.\n- **actions** - Actions displayed in the panel header (buttons, chips, etc).\n- **footer** - Content displayed in the panel footer.\n\n### **CSS Properties:**\n - **--zn-panel-basis** - The flex-basis of the panel. Can be set using the basis-px attribute. _(default: undefined)_\n- **--zn-panel-header-padding** - Padding around the header row. Defaults to `--zn-base-gap`. _(default: undefined)_\n- **--zn-panel-footer-padding** - Padding around the footer row. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **header** - The header region, when a caption or actions are given.\n- **header-content** - The padded row inside the header, forwarded from zn-header.\n- **footer** - The footer region, when the footer slot is filled.",
7181
7247
  "doc-url": "",
7182
7248
  "attributes": [
7183
7249
  { "name": "basis-px", "value": { "type": "number" } },
@@ -12219,6 +12285,120 @@
12219
12285
  ]
12220
12286
  }
12221
12287
  },
12288
+ {
12289
+ "name": "zn-translation-group",
12290
+ "description": "Puts several zn-translations fields behind one language select, so a whole form's worth of copy is\ntranslated a language at a time.\n---\n\n\n### **Events:**\n - **zn-language-change** - Emitted when the active language changes. Detail: `{ language: string }`.\n\n### **Slots:**\n - _default_ - The `zn-translations` fields the select drives.\n- **actions** - Buttons for the bottom of the panel, on the white body rather than the grey footer. They sit on the right, as zinc's form action rows do; `align=\"start\"` moves one to the left. Write them in the order they should be read — the sides are set by CSS ordering, so markup order is what a keyboard follows.\n- **footer** - Content displayed in the grey panel footer.\n\n### **CSS Properties:**\n - **--zn-panel-basis** - The flex-basis of the panel. Can be set using the basis-px attribute. _(default: undefined)_\n- **--zn-panel-header-padding** - Padding around the header row. Defaults to `--zn-base-gap`. _(default: undefined)_\n- **--zn-panel-footer-padding** - Padding around the footer row. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **form-group** - The form group holding the caption, the language select and the fields.\n- **actions** - The row of buttons at the bottom of the body.\n- **language-field** - The select that chooses the language every child is editing, in the group's chip slot.\n- **language-select** - The select itself.\n- **header** - The header region, when a caption or actions are given.\n- **header-content** - The padded row inside the header, forwarded from zn-header.\n- **footer** - The footer region, when the footer slot is filled.",
12291
+ "doc-url": "",
12292
+ "attributes": [
12293
+ {
12294
+ "name": "label",
12295
+ "description": "The form group's label. An alias for the inherited `caption`, which wins where both are set.",
12296
+ "value": { "type": "string", "default": "''" }
12297
+ },
12298
+ {
12299
+ "name": "help-text",
12300
+ "description": "Sits under the label, above the language select, as help text does in any other form group.",
12301
+ "value": { "type": "string", "default": "''" }
12302
+ },
12303
+ {
12304
+ "name": "inline",
12305
+ "description": "Drops the panel chrome — border, background and padding — so the group reads as a section of the surrounding form\nrather than a panel of its own. For groups nested inside another panel, where the fields would otherwise sit\nindented behind a second border.",
12306
+ "value": { "type": "boolean", "default": "false" }
12307
+ },
12308
+ {
12309
+ "name": "language-label",
12310
+ "description": "The select's accessible name. Not shown — the caption is what names the section on screen — but read out by a\nscreen reader, which has nothing else to go on once the visible label is gone.",
12311
+ "value": { "type": "string", "default": "'Edit Languages'" }
12312
+ },
12313
+ {
12314
+ "name": "languages",
12315
+ "description": "The languages on offer, as language code to display name — `{\"en\": \"English\", \"fr\": \"French\"}`. Writing the code\nas the name (`{\"en\": \"EN\"}`) is also accepted. `en` is the language every other one falls back to. Set on every\nchild, so they do not need their own copy.",
12316
+ "value": {
12317
+ "type": "Record<string, string>",
12318
+ "default": "{ 'en': 'EN' }"
12319
+ }
12320
+ },
12321
+ { "name": "basis-px", "value": { "type": "number" } },
12322
+ { "name": "caption", "value": { "type": "string" } },
12323
+ { "name": "icon", "value": { "type": "string" } },
12324
+ { "name": "tabbed", "value": { "type": "boolean" } },
12325
+ { "name": "header-borderless", "value": { "type": "boolean" } },
12326
+ { "name": "cosmic", "value": { "type": "boolean" } },
12327
+ { "name": "flush", "value": { "type": "boolean" } },
12328
+ { "name": "flush-x", "value": { "type": "boolean" } },
12329
+ { "name": "flush-y", "value": { "type": "boolean" } },
12330
+ { "name": "flush-footer", "value": { "type": "boolean" } },
12331
+ { "name": "transparent", "value": { "type": "boolean" } },
12332
+ { "name": "shadow", "value": { "type": "boolean" } }
12333
+ ],
12334
+ "slots": [
12335
+ {
12336
+ "name": "",
12337
+ "description": "The `zn-translations` fields the select drives."
12338
+ },
12339
+ {
12340
+ "name": "actions",
12341
+ "description": "Buttons for the bottom of the panel, on the white body rather than the grey footer. They sit on the right, as zinc's form action rows do; `align=\"start\"` moves one to the left. Write them in the order they should be read — the sides are set by CSS ordering, so markup order is what a keyboard follows."
12342
+ },
12343
+ {
12344
+ "name": "footer",
12345
+ "description": "Content displayed in the grey panel footer."
12346
+ }
12347
+ ],
12348
+ "events": [
12349
+ {
12350
+ "name": "zn-language-change",
12351
+ "description": "Emitted when the active language changes. Detail: `{ language: string }`."
12352
+ }
12353
+ ],
12354
+ "js": {
12355
+ "properties": [
12356
+ {
12357
+ "name": "label",
12358
+ "description": "The form group's label. An alias for the inherited `caption`, which wins where both are set.",
12359
+ "type": "string"
12360
+ },
12361
+ {
12362
+ "name": "helpText",
12363
+ "description": "Sits under the label, above the language select, as help text does in any other form group.",
12364
+ "type": "string"
12365
+ },
12366
+ {
12367
+ "name": "inline",
12368
+ "description": "Drops the panel chrome — border, background and padding — so the group reads as a section of the surrounding form\nrather than a panel of its own. For groups nested inside another panel, where the fields would otherwise sit\nindented behind a second border.",
12369
+ "type": "boolean"
12370
+ },
12371
+ {
12372
+ "name": "languageLabel",
12373
+ "description": "The select's accessible name. Not shown — the caption is what names the section on screen — but read out by a\nscreen reader, which has nothing else to go on once the visible label is gone.",
12374
+ "type": "string"
12375
+ },
12376
+ {
12377
+ "name": "languages",
12378
+ "description": "The languages on offer, as language code to display name — `{\"en\": \"English\", \"fr\": \"French\"}`. Writing the code\nas the name (`{\"en\": \"EN\"}`) is also accepted. `en` is the language every other one falls back to. Set on every\nchild, so they do not need their own copy.",
12379
+ "type": "Record<string, string>"
12380
+ },
12381
+ { "name": "basis", "type": "number" },
12382
+ { "name": "caption", "type": "string" },
12383
+ { "name": "icon", "type": "string" },
12384
+ { "name": "tabbed", "type": "boolean" },
12385
+ { "name": "headerBorderless", "type": "boolean" },
12386
+ { "name": "cosmic", "type": "boolean" },
12387
+ { "name": "flush", "type": "boolean" },
12388
+ { "name": "flushX", "type": "boolean" },
12389
+ { "name": "flushY", "type": "boolean" },
12390
+ { "name": "flushFooter", "type": "boolean" },
12391
+ { "name": "transparent", "type": "boolean" },
12392
+ { "name": "shadow", "type": "boolean" }
12393
+ ],
12394
+ "events": [
12395
+ {
12396
+ "name": "zn-language-change",
12397
+ "description": "Emitted when the active language changes. Detail: `{ language: string }`."
12398
+ }
12399
+ ]
12400
+ }
12401
+ },
12222
12402
  {
12223
12403
  "name": "zn-translations",
12224
12404
  "description": "Collects one piece of text in several languages, one language at a time.\n---\n\n\n### **Events:**\n - **zn-change** - Emitted when a translation's value changes.\n- **zn-input** - Emitted when a translation receives input.\n\n### **Methods:**\n - **setActiveLanguage(language: _string_)** - Sets the active language externally. Used by zn-translation-group. Browsing to a language does not create a key\nfor it — an untouched language stays absent from `values` so it is not submitted as an empty translation.\n- **getActiveLanguage(): _string_** - Returns the currently active language.\n- **addLanguageKey(languageCode: _string_)** - Adds a language key to this component's values if not already present. Used by zn-translation-group.\n- **getValueLanguages(): _string[]_** - Returns all language codes that have values.\n- **hasTranslation(language: _string_): _boolean_** - Whether the language carries a translation of its own, rather than falling back to English.\n\n### **Slots:**\n - **label** - The field's label. Alternatively, use the `label` attribute.\n- **help-text** - Text describing how to fill the field in, shown below it and shared by every language. Alternatively, use the `help-text` attribute.\n\n### **CSS Parts:**\n - **form-control** - The form control that wraps the label, the language select, the field and the help text.\n- **form-control-label** - The label's wrapper.\n- **form-control-input** - The wrapper around the field being edited.\n- **form-control-help-text** - The help text's wrapper.\n- **language-select** - The select that chooses the language being edited.",
@@ -12468,120 +12648,6 @@
12468
12648
  ]
12469
12649
  }
12470
12650
  },
12471
- {
12472
- "name": "zn-translation-group",
12473
- "description": "Puts several zn-translations fields behind one language select, so a whole form's worth of copy is\ntranslated a language at a time.\n---\n\n\n### **Events:**\n - **zn-language-change** - Emitted when the active language changes. Detail: `{ language: string }`.\n\n### **Slots:**\n - _default_ - The `zn-translations` fields the select drives.\n- **actions** - Buttons for the bottom of the panel, on the white body rather than the grey footer. They sit on the right, as zinc's form action rows do; `align=\"start\"` moves one to the left. Write them in the order they should be read — the sides are set by CSS ordering, so markup order is what a keyboard follows.\n- **footer** - Content displayed in the grey panel footer.\n\n### **CSS Properties:**\n - **--zn-panel-basis** - The flex-basis of the panel. Can be set using the basis-px attribute. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **form-group** - The form group holding the caption, the language select and the fields.\n- **actions** - The row of buttons at the bottom of the body.\n- **language-field** - The select that chooses the language every child is editing, in the group's chip slot.\n- **language-select** - The select itself.",
12474
- "doc-url": "",
12475
- "attributes": [
12476
- {
12477
- "name": "label",
12478
- "description": "The form group's label. An alias for the inherited `caption`, which wins where both are set.",
12479
- "value": { "type": "string", "default": "''" }
12480
- },
12481
- {
12482
- "name": "help-text",
12483
- "description": "Sits under the label, above the language select, as help text does in any other form group.",
12484
- "value": { "type": "string", "default": "''" }
12485
- },
12486
- {
12487
- "name": "inline",
12488
- "description": "Drops the panel chrome — border, background and padding — so the group reads as a section of the surrounding form\nrather than a panel of its own. For groups nested inside another panel, where the fields would otherwise sit\nindented behind a second border.",
12489
- "value": { "type": "boolean", "default": "false" }
12490
- },
12491
- {
12492
- "name": "language-label",
12493
- "description": "The select's accessible name. Not shown — the caption is what names the section on screen — but read out by a\nscreen reader, which has nothing else to go on once the visible label is gone.",
12494
- "value": { "type": "string", "default": "'Edit Languages'" }
12495
- },
12496
- {
12497
- "name": "languages",
12498
- "description": "The languages on offer, as language code to display name — `{\"en\": \"English\", \"fr\": \"French\"}`. Writing the code\nas the name (`{\"en\": \"EN\"}`) is also accepted. `en` is the language every other one falls back to. Set on every\nchild, so they do not need their own copy.",
12499
- "value": {
12500
- "type": "Record<string, string>",
12501
- "default": "{ 'en': 'EN' }"
12502
- }
12503
- },
12504
- { "name": "basis-px", "value": { "type": "number" } },
12505
- { "name": "caption", "value": { "type": "string" } },
12506
- { "name": "icon", "value": { "type": "string" } },
12507
- { "name": "tabbed", "value": { "type": "boolean" } },
12508
- { "name": "header-borderless", "value": { "type": "boolean" } },
12509
- { "name": "cosmic", "value": { "type": "boolean" } },
12510
- { "name": "flush", "value": { "type": "boolean" } },
12511
- { "name": "flush-x", "value": { "type": "boolean" } },
12512
- { "name": "flush-y", "value": { "type": "boolean" } },
12513
- { "name": "flush-footer", "value": { "type": "boolean" } },
12514
- { "name": "transparent", "value": { "type": "boolean" } },
12515
- { "name": "shadow", "value": { "type": "boolean" } }
12516
- ],
12517
- "slots": [
12518
- {
12519
- "name": "",
12520
- "description": "The `zn-translations` fields the select drives."
12521
- },
12522
- {
12523
- "name": "actions",
12524
- "description": "Buttons for the bottom of the panel, on the white body rather than the grey footer. They sit on the right, as zinc's form action rows do; `align=\"start\"` moves one to the left. Write them in the order they should be read — the sides are set by CSS ordering, so markup order is what a keyboard follows."
12525
- },
12526
- {
12527
- "name": "footer",
12528
- "description": "Content displayed in the grey panel footer."
12529
- }
12530
- ],
12531
- "events": [
12532
- {
12533
- "name": "zn-language-change",
12534
- "description": "Emitted when the active language changes. Detail: `{ language: string }`."
12535
- }
12536
- ],
12537
- "js": {
12538
- "properties": [
12539
- {
12540
- "name": "label",
12541
- "description": "The form group's label. An alias for the inherited `caption`, which wins where both are set.",
12542
- "type": "string"
12543
- },
12544
- {
12545
- "name": "helpText",
12546
- "description": "Sits under the label, above the language select, as help text does in any other form group.",
12547
- "type": "string"
12548
- },
12549
- {
12550
- "name": "inline",
12551
- "description": "Drops the panel chrome — border, background and padding — so the group reads as a section of the surrounding form\nrather than a panel of its own. For groups nested inside another panel, where the fields would otherwise sit\nindented behind a second border.",
12552
- "type": "boolean"
12553
- },
12554
- {
12555
- "name": "languageLabel",
12556
- "description": "The select's accessible name. Not shown — the caption is what names the section on screen — but read out by a\nscreen reader, which has nothing else to go on once the visible label is gone.",
12557
- "type": "string"
12558
- },
12559
- {
12560
- "name": "languages",
12561
- "description": "The languages on offer, as language code to display name — `{\"en\": \"English\", \"fr\": \"French\"}`. Writing the code\nas the name (`{\"en\": \"EN\"}`) is also accepted. `en` is the language every other one falls back to. Set on every\nchild, so they do not need their own copy.",
12562
- "type": "Record<string, string>"
12563
- },
12564
- { "name": "basis", "type": "number" },
12565
- { "name": "caption", "type": "string" },
12566
- { "name": "icon", "type": "string" },
12567
- { "name": "tabbed", "type": "boolean" },
12568
- { "name": "headerBorderless", "type": "boolean" },
12569
- { "name": "cosmic", "type": "boolean" },
12570
- { "name": "flush", "type": "boolean" },
12571
- { "name": "flushX", "type": "boolean" },
12572
- { "name": "flushY", "type": "boolean" },
12573
- { "name": "flushFooter", "type": "boolean" },
12574
- { "name": "transparent", "type": "boolean" },
12575
- { "name": "shadow", "type": "boolean" }
12576
- ],
12577
- "events": [
12578
- {
12579
- "name": "zn-language-change",
12580
- "description": "Emitted when the active language changes. Detail: `{ language: string }`."
12581
- }
12582
- ]
12583
- }
12584
- },
12585
12651
  {
12586
12652
  "name": "zn-vertical-stepper",
12587
12653
  "description": "Vertical steppers display a sequence of steps in a vertical layout with descriptions and optional icons.\n---\n\n\n### **Slots:**\n - **icon** - Optional slot for adding an icon or indicator before the step content.\n\n### **CSS Parts:**\n - **vs** - The main container for the vertical stepper.\n- **vs__left** - The left section containing the icon and connecting line.\n- **vs__icon** - The icon container.\n- **vs__line** - The vertical connecting line between steps.\n- **vs__right** - The right section containing caption and description text.\n- **vs__caption** - The caption/title text element.\n- **vs__description** - The description text element.",