@kubex/zinc 1.1.92 → 1.1.95

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 (53) hide show
  1. package/dist/custom-elements.json +2880 -453
  2. package/dist/vscode.html-custom-data.json +209 -22
  3. package/dist/web-types.json +452 -39
  4. package/dist/zn.d.ts +633 -61
  5. package/dist/zn.min.css +1 -1
  6. package/dist/zn.min.js +865 -560
  7. package/docs/pages/components/page-builder.md +143 -19
  8. package/docs/pages/components/schedule-builder.md +345 -0
  9. package/docs/pages/components/slash-menu.md +132 -6
  10. package/docs/pages/components/textarea.md +16 -0
  11. package/package.json +1 -1
  12. package/scss/_root.scss +7 -1
  13. package/src/components/alert/alert.scss +9 -13
  14. package/src/components/button/button.scss +5 -2
  15. package/src/components/chip/chip.scss +1 -1
  16. package/src/components/icon-picker/icon-picker.component.ts +1 -1
  17. package/src/components/inline-edit/inline-edit.component.ts +6 -1
  18. package/src/components/input/input.component.ts +12 -2
  19. package/src/components/linked-select/linked-select.component.ts +22 -5
  20. package/src/components/page/page.scss +20 -9
  21. package/src/components/page-builder/modules/page-section-card/page-section-card.component.ts +16 -9
  22. package/src/components/page-builder/modules/page-section-card/page-section-card.scss +13 -0
  23. package/src/components/page-builder/modules/page-section-card/page-section-card.test.ts +9 -0
  24. package/src/components/page-builder/page-builder.component.ts +535 -232
  25. package/src/components/page-builder/page-builder.scss +230 -19
  26. package/src/components/page-builder/page-builder.test.ts +790 -110
  27. package/src/components/page-builder/page-tree.test.ts +483 -0
  28. package/src/components/page-builder/page-tree.ts +329 -0
  29. package/src/components/page-builder/page.types.ts +98 -10
  30. package/src/components/page-nav/page-nav.scss +9 -1
  31. package/src/components/panel/panel.component.ts +5 -1
  32. package/src/components/priority-list/priority-list.component.ts +1 -0
  33. package/src/components/priority-list/priority-list.scss +2 -1
  34. package/src/components/remarkd-editor/remarkd-editor.component.ts +198 -9
  35. package/src/components/remarkd-editor/remarkd-editor.scss +81 -0
  36. package/src/components/remarkd-editor/remarkd-editor.test.ts +179 -0
  37. package/src/components/schedule-builder/index.ts +12 -0
  38. package/src/components/schedule-builder/schedule-builder.component.ts +1543 -0
  39. package/src/components/schedule-builder/schedule-builder.scss +448 -0
  40. package/src/components/schedule-builder/schedule-builder.test.ts +344 -0
  41. package/src/components/settings-container/settings-container.scss +2 -1
  42. package/src/components/slash-item/slash-item.component.ts +1 -1
  43. package/src/components/slash-menu/slash-menu-items.ts +48 -0
  44. package/src/components/slash-menu/slash-menu.component.ts +134 -27
  45. package/src/components/slash-menu/slash-menu.scss +90 -12
  46. package/src/components/slash-menu/slash-menu.test.ts +107 -0
  47. package/src/components/textarea/textarea.component.ts +12 -2
  48. package/src/components/textarea/textarea.test.ts +2 -2
  49. package/src/components/toggle/toggle.component.ts +2 -1
  50. package/src/components/translations/translations.component.ts +5 -1
  51. package/src/zinc.ts +1 -0
  52. package/docs/superpowers/plans/2026-08-03-theme-editor.md +0 -1536
  53. package/docs/superpowers/specs/2026-08-03-theme-editor-design.md +0 -327
@@ -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.92",
4
+ "version": "1.1.95",
5
5
  "description-markup": "markdown",
6
6
  "contributions": {
7
7
  "html": {
@@ -15,28 +15,6 @@
15
15
  "events": [],
16
16
  "js": { "properties": [], "events": [] }
17
17
  },
18
- {
19
- "name": "zn-action-bar",
20
- "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.",
21
- "doc-url": "",
22
- "attributes": [],
23
- "slots": [
24
- { "name": "", "description": "The default slot." },
25
- { "name": "example", "description": "An example slot." }
26
- ],
27
- "events": [
28
- { "name": "zn-event-name", "description": "Emitted as an example." }
29
- ],
30
- "js": {
31
- "properties": [],
32
- "events": [
33
- {
34
- "name": "zn-event-name",
35
- "description": "Emitted as an example."
36
- }
37
- ]
38
- }
39
- },
40
18
  {
41
19
  "name": "zn-alert",
42
20
  "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.",
@@ -105,6 +83,28 @@
105
83
  ]
106
84
  }
107
85
  },
86
+ {
87
+ "name": "zn-action-bar",
88
+ "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.",
89
+ "doc-url": "",
90
+ "attributes": [],
91
+ "slots": [
92
+ { "name": "", "description": "The default slot." },
93
+ { "name": "example", "description": "An example slot." }
94
+ ],
95
+ "events": [
96
+ { "name": "zn-event-name", "description": "Emitted as an example." }
97
+ ],
98
+ "js": {
99
+ "properties": [],
100
+ "events": [
101
+ {
102
+ "name": "zn-event-name",
103
+ "description": "Emitted as an example."
104
+ }
105
+ ]
106
+ }
107
+ },
108
108
  {
109
109
  "name": "zn-animated-button",
110
110
  "description": "\n---\n\n\n### **Methods:**\n - **purchase(): _void_** - Programmatically trigger the purchase flow\n- **setSuccess(): _void_** - Set the button to success state manually\n- **setFailure(message): _void_** - Set the button to failure state manually with optional error message\n- **reset(): _void_** - Reset the button to idle state",
@@ -4598,7 +4598,7 @@
4598
4598
  },
4599
4599
  {
4600
4600
  "name": "slash-heading",
4601
- "description": "The heading shown above the slash menu's items.",
4601
+ "description": "The name the slash menu's list is announced by.",
4602
4602
  "value": { "type": "string", "default": "'Insert'" }
4603
4603
  },
4604
4604
  {
@@ -4606,6 +4606,11 @@
4606
4606
  "description": "Hides the insertion keys normally shown against the slash menu's items.",
4607
4607
  "value": { "type": "boolean", "default": "false" }
4608
4608
  },
4609
+ {
4610
+ "name": "slash-recent-key",
4611
+ "description": "Lists the slash menu items most recently chosen here above the rest, remembered under this key.",
4612
+ "value": { "type": "string", "default": "''" }
4613
+ },
4609
4614
  {
4610
4615
  "name": "options",
4611
4616
  "value": { "type": "{ [key: string]: string }", "default": "{}" }
@@ -4718,7 +4723,7 @@
4718
4723
  },
4719
4724
  {
4720
4725
  "name": "slashHeading",
4721
- "description": "The heading shown above the slash menu's items.",
4726
+ "description": "The name the slash menu's list is announced by.",
4722
4727
  "type": "string"
4723
4728
  },
4724
4729
  {
@@ -4726,6 +4731,11 @@
4726
4731
  "description": "Hides the insertion keys normally shown against the slash menu's items.",
4727
4732
  "type": "boolean"
4728
4733
  },
4734
+ {
4735
+ "name": "slashRecentKey",
4736
+ "description": "Lists the slash menu items most recently chosen here above the rest, remembered under this key.",
4737
+ "type": "string"
4738
+ },
4729
4739
  {
4730
4740
  "name": "slashItemsProvider",
4731
4741
  "description": "Resolves additional slash menu items each time the menu opens. JavaScript only.",
@@ -5009,7 +5019,7 @@
5009
5019
  },
5010
5020
  {
5011
5021
  "name": "slash-heading",
5012
- "description": "The heading shown above the slash menu's items.",
5022
+ "description": "The name the slash menu's list is announced by.",
5013
5023
  "value": { "type": "string", "default": "'Insert'" }
5014
5024
  },
5015
5025
  {
@@ -5017,6 +5027,11 @@
5017
5027
  "description": "Hides the insertion keys normally shown against the slash menu's items.",
5018
5028
  "value": { "type": "boolean", "default": "false" }
5019
5029
  },
5030
+ {
5031
+ "name": "slash-recent-key",
5032
+ "description": "Lists the items most recently chosen here above the rest, remembered in `localStorage` under this\nkey. Share a key between the fields that should share a history; leave unset to offer no such list.",
5033
+ "value": { "type": "string", "default": "''" }
5034
+ },
5020
5035
  {
5021
5036
  "name": "trigger-submit",
5022
5037
  "description": "When enabled, pressing enter will always submit the surrounding form, even when the form uses\nenter-navigation to move between fields.",
@@ -5306,7 +5321,7 @@
5306
5321
  },
5307
5322
  {
5308
5323
  "name": "slashHeading",
5309
- "description": "The heading shown above the slash menu's items.",
5324
+ "description": "The name the slash menu's list is announced by.",
5310
5325
  "type": "string"
5311
5326
  },
5312
5327
  {
@@ -5314,6 +5329,11 @@
5314
5329
  "description": "Hides the insertion keys normally shown against the slash menu's items.",
5315
5330
  "type": "boolean"
5316
5331
  },
5332
+ {
5333
+ "name": "slashRecentKey",
5334
+ "description": "Lists the items most recently chosen here above the rest, remembered in `localStorage` under this\nkey. Share a key between the fields that should share a history; leave unset to offer no such list.",
5335
+ "type": "string"
5336
+ },
5317
5337
  {
5318
5338
  "name": "slashItemsProvider",
5319
5339
  "description": "Resolves additional items each time the menu opens, for lists that come from elsewhere (e.g. an\nAPI). Receives the current query and may return a promise. JavaScript only.",
@@ -5613,6 +5633,11 @@
5613
5633
  {
5614
5634
  "name": "label",
5615
5635
  "value": { "type": "string", "default": "\"\"" }
5636
+ },
5637
+ {
5638
+ "name": "select-first",
5639
+ "description": "Automatically select the first option of the linked group when no value is set.",
5640
+ "value": { "type": "boolean", "default": "false" }
5616
5641
  }
5617
5642
  ],
5618
5643
  "slots": [
@@ -5631,6 +5656,11 @@
5631
5656
  { "name": "linkedSelect", "type": "string" },
5632
5657
  { "name": "cacheKey", "type": "string" },
5633
5658
  { "name": "label", "type": "string" },
5659
+ {
5660
+ "name": "selectFirst",
5661
+ "description": "Automatically select the first option of the linked group when no value is set.",
5662
+ "type": "boolean"
5663
+ },
5634
5664
  { "name": "input", "type": "ZnSelect" },
5635
5665
  { "name": "displayLabel" },
5636
5666
  { "name": "validity" },
@@ -6477,7 +6507,7 @@
6477
6507
  },
6478
6508
  {
6479
6509
  "name": "zn-page-builder",
6480
- "description": "A config-driven page composer: a palette of predefined section types, a linear\ncanvas of section cards, and an inspector for editing each section's content.\n---\n\n\n### **Events:**\n - **zn-page-change** - Emitted whenever the page state changes. `event.detail.state` is the new PageState.\n- **zn-page-selection-change** - Emitted when the selected section changes. `event.detail.sectionId`.\n\n### **Methods:**\n - **checkValidity(): _boolean_** - Checks for validity but does not show a validation message.\n- **getForm(): _HTMLFormElement | null_** - Gets the associated form, if one exists.\n- **reportValidity(): _boolean_** - Checks for validity and shows the browser's validation message if the control is invalid.\n- **setCustomValidity(_message)** - Sets a custom validation message. Pass an empty string to restore validity.\n- **addSection(type: _string_, index: _number_): _PageSection | null_** - Adds a section of a registered type at `index` (default: end). Returns null for unknown types.\n- **addSectionToSlot(type: _string_, containerId: _string_, slotIndex: _number_): _PageSection | null_** - Adds a new section of a registered type into a container's slot. Returns null if not allowed.\n\n### **Slots:**\n - **config** - `<template type=\"…\">` declarations; never displayed. Each template's attributes (type, label, icon, icon-library, color, category, description, slots, accepts) declare a palette entry and its content declares the inspector form for that type. `slots` makes the section a container with that many child slots; `accepts` is a comma-separated list of the type keys its slots allow.\n- **header-left** - Actions shown on the left of the header bar.\n- **header-right** - Actions shown on the right of the header bar.\n\n### **CSS Parts:**\n - **base** - The grid wrapper.\n- **header** - The full-width header action bar (only rendered when header slots are filled).\n- **palette** - The left palette panel.\n- **canvas** - The centre section-card canvas.\n- **inspector** - The right panel while a section is selected.",
6510
+ "description": "A config-driven page composer: a palette of predefined section types, a linear\ncanvas of section cards, and an inspector for editing each section's content.\n---\n\n\n### **Events:**\n - **zn-page-change** - Emitted whenever the page state changes. `event.detail.state` is the new PageState.\n- **zn-page-selection-change** - Emitted when the selected section changes. `event.detail.sectionId`.\n\n### **Methods:**\n - **checkValidity(): _boolean_** - Checks for validity but does not show a validation message.\n- **getForm(): _HTMLFormElement | null_** - Gets the associated form, if one exists.\n- **reportValidity(): _boolean_** - Checks for validity and shows the browser's validation message if the control is invalid.\n- **setCustomValidity(_message)** - Sets a custom validation message. Pass an empty string to restore validity.\n- **addSection(type: _string_, index: _number_): _PageSection | null_** - Adds a section of a registered type at `index` (default: end). Returns null for unknown types.\n- **addSectionToCell(type: _string_, containerId: _string_, cellIndex: _number_, insertIndex): _PageSection | null_** - Adds a new section of a registered type into a container cell.\n\n### **Slots:**\n - **config** - `<template type=\"…\">` declarations; never displayed. Each template's attributes (type, label, icon, icon-library, color, category, description, container, columns, widths, grow, slots, accepts) declare a palette entry and its content declares the inspector form for that type. `container` makes the type a container whose editor-configurable layout starts from `columns` (seeds equal widths) or `widths` (explicit weights, wins over `columns`); `grow` seeds a growable instance. `accepts` is a comma-separated list of the type keys its cells allow — omitted on a `container` type, any type is allowed subject to the nesting cap. `slots` is\n- **header-left** - Actions shown on the left of the header bar.\n- **header-right** - Actions shown on the right of the header bar.\n\n### **CSS Parts:**\n - **base** - The grid wrapper.\n- **header** - The full-width header action bar (only rendered when header slots are filled).\n- **palette** - The left palette panel.\n- **canvas** - The centre section-card canvas.\n- **inspector** - The right panel while a section is selected.\n- **inspector-header** - The inspector's fixed header (icon, section name, type, close).\n- **inspector-body** - The inspector's scrolling form area.",
6481
6511
  "doc-url": "",
6482
6512
  "attributes": [
6483
6513
  {
@@ -6503,6 +6533,11 @@
6503
6533
  "name": "subheading",
6504
6534
  "value": { "type": "string", "default": "''" }
6505
6535
  },
6536
+ {
6537
+ "name": "required-first",
6538
+ "description": "Section type key that must lead the page. The builder hoists an existing section of\nthat type to the top, or inserts an empty one, and pins it there: it can't be\nremoved, reordered or dragged into a slot, and nothing can be dropped above it.\nIts content stays fully editable in the inspector.",
6539
+ "value": { "type": "string", "default": "''" }
6540
+ },
6506
6541
  {
6507
6542
  "name": "palette-collapsed",
6508
6543
  "description": "Collapses the left palette. Auto-set when the builder becomes narrow.",
@@ -6522,7 +6557,7 @@
6522
6557
  "slots": [
6523
6558
  {
6524
6559
  "name": "config",
6525
- "description": "`<template type=\"…\">` declarations; never displayed. Each template's attributes (type, label, icon, icon-library, color, category, description, slots, accepts) declare a palette entry and its content declares the inspector form for that type. `slots` makes the section a container with that many child slots; `accepts` is a comma-separated list of the type keys its slots allow."
6560
+ "description": "`<template type=\"…\">` declarations; never displayed. Each template's attributes (type, label, icon, icon-library, color, category, description, container, columns, widths, grow, slots, accepts) declare a palette entry and its content declares the inspector form for that type. `container` makes the type a container whose editor-configurable layout starts from `columns` (seeds equal widths) or `widths` (explicit weights, wins over `columns`); `grow` seeds a growable instance. `accepts` is a comma-separated list of the type keys its cells allow — omitted on a `container` type, any type is allowed subject to the nesting cap. `slots` is"
6526
6561
  },
6527
6562
  {
6528
6563
  "name": "header-left",
@@ -6562,6 +6597,11 @@
6562
6597
  },
6563
6598
  { "name": "heading", "type": "string" },
6564
6599
  { "name": "subheading", "type": "string" },
6600
+ {
6601
+ "name": "requiredFirst",
6602
+ "description": "Section type key that must lead the page. The builder hoists an existing section of\nthat type to the top, or inserts an empty one, and pins it there: it can't be\nremoved, reordered or dragged into a slot, and nothing can be dropped above it.\nIts content stays fully editable in the inspector.",
6603
+ "type": "string"
6604
+ },
6565
6605
  {
6566
6606
  "name": "sectionTypes",
6567
6607
  "description": "Section types to make available, registered into the internal registry.",
@@ -7228,7 +7268,7 @@
7228
7268
  },
7229
7269
  {
7230
7270
  "name": "zn-priority-list",
7231
- "description": "A reorderable list where each item receives a numerical priority based on its position. Supports drag-and-drop\nand keyboard reordering. Priority values are submitted as form data via hidden inputs.\n---\n\n\n### **Events:**\n - **zn-change** - Emitted when the order of items changes.\n- **zn-reorder** - Emitted when items are reordered. Call `getPriorityMap()` on the component to get the updated `{ key: string, priority: number }[]` array.\n\n### **Methods:**\n - **getPriorityMap(): _PriorityItem[]_** - Returns the priority map: an array of { key, priority } objects.\n- **checkValidity(): _boolean_** - Checks for validity but does not show a validation message.\n- **getForm(): _HTMLFormElement | null_** - Gets the associated form, if one exists.\n- **reportValidity(): _boolean_** - Checks for validity and shows the browser's validation message if the control is invalid.\n- **setCustomValidity(_message)** - Sets a custom validation message. Pass an empty string to restore validity.\n\n### **Slots:**\n - _default_ - The default slot where list items are placed. Each slotted element must have a `value` attribute that uniquely identifies the item. The component automatically assigns slot names to project each item into the correct position. The item's position in the list determines its priority (top = `priority-start`, incrementing).\n- **label** - The component's label. Required for proper accessibility. Alternatively, use the `label` attribute.\n- **label-tooltip** - Used to add text displayed in a tooltip next to the label.\n- **help-text** - Text that describes how to use the component. Alternatively, use the `help-text` attribute.\n\n### **CSS Properties:**\n - **--zn-priority-list-item-gap** - The gap between list items. Defaults to `var(--zn-spacing-2x-small)`. _(default: undefined)_\n- **--zn-priority-list-item-padding** - The padding inside each item. Defaults to `var(--zn-spacing-small) var(--zn-spacing-medium)`. _(default: undefined)_\n- **--zn-priority-list-handle-color** - The color of the drag handle. Defaults to `var(--zn-color-neutral-500)`. _(default: undefined)_\n- **--zn-priority-list-priority-color** - The color of the priority number. Defaults to `var(--zn-color-neutral-600)`. _(default: undefined)_\n\n### **CSS Parts:**\n - **form-control** - The form control wrapper.\n- **form-control-label** - The label wrapper.\n- **form-control-input** - The input area wrapper.\n- **form-control-help-text** - The help text wrapper.\n- **list** - The list container.\n- **item** - An individual list item row.\n- **drag-handle** - The drag handle icon.\n- **priority** - The priority number badge.\n- **content** - The content area of an item.",
7271
+ "description": "A reorderable list where each item receives a numerical priority based on its position. Supports drag-and-drop\nand keyboard reordering. Priority values are submitted as form data via hidden inputs.\n---\n\n\n### **Events:**\n - **zn-change** - Emitted when the order of items changes.\n- **zn-reorder** - Emitted when items are reordered. Call `getPriorityMap()` on the component to get the updated `{ key: string, priority: number }[]` array.\n\n### **Methods:**\n - **getPriorityMap(): _PriorityItem[]_** - Returns the priority map: an array of { key, priority } objects.\n- **checkValidity(): _boolean_** - Checks for validity but does not show a validation message.\n- **getForm(): _HTMLFormElement | null_** - Gets the associated form, if one exists.\n- **reportValidity(): _boolean_** - Checks for validity and shows the browser's validation message if the control is invalid.\n- **setCustomValidity(_message)** - Sets a custom validation message. Pass an empty string to restore validity.\n\n### **Slots:**\n - _default_ - The default slot where list items are placed. Each slotted element must have a `value` attribute that uniquely identifies the item. The component automatically assigns slot names to project each item into the correct position. The item's position in the list determines its priority (top = `priority-start`, incrementing).\n- **label** - The component's label. Required for proper accessibility. Alternatively, use the `label` attribute.\n- **label-tooltip** - Used to add text displayed in a tooltip next to the label.\n- **help-text** - Text that describes how to use the component. Alternatively, use the `help-text` attribute.\n\n### **CSS Properties:**\n - **--zn-priority-list-item-gap** - The gap between list items. Defaults to `var(--zn-spacing-2x-small)`. _(default: undefined)_\n- **--zn-priority-list-item-padding** - The padding inside each item. Defaults to `var(--zn-spacing-small) var(--zn-spacing-medium)`. _(default: undefined)_\n- **--zn-priority-list-actions-gap** - The gap between an item's slotted actions. Defaults to `var(--zn-spacing-x-small)`. _(default: undefined)_\n- **--zn-priority-list-handle-color** - The color of the drag handle. Defaults to `var(--zn-color-neutral-500)`. _(default: undefined)_\n- **--zn-priority-list-priority-color** - The color of the priority number. Defaults to `var(--zn-color-neutral-600)`. _(default: undefined)_\n\n### **CSS Parts:**\n - **form-control** - The form control wrapper.\n- **form-control-label** - The label wrapper.\n- **form-control-input** - The input area wrapper.\n- **form-control-help-text** - The help text wrapper.\n- **list** - The list container.\n- **item** - An individual list item row.\n- **drag-handle** - The drag handle icon.\n- **priority** - The priority number badge.\n- **content** - The content area of an item.",
7232
7272
  "doc-url": "",
7233
7273
  "attributes": [
7234
7274
  {
@@ -7948,9 +7988,14 @@
7948
7988
  },
7949
7989
  {
7950
7990
  "name": "zn-remarkd-editor",
7951
- "description": "A Notion-style block editor for remarkd content. Blocks render inline; click one to edit its source.\n---\n\n\n### **Events:**\n - **zn-input** - Emitted on each keystroke while editing a block.\n- **zn-change** - Emitted when a block edit is committed and the value changes.\n\n### **Methods:**\n - **focus()** - Starts editing the first block, or a new block if the document is empty.\n- **blur()** - Commits any in-progress block or raw edit.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **toolbar** - The always-visible block-insert toolbar.\n- **raw-toggle** - The button that switches between the block view and the raw source view.\n- **block** - A rendered block wrapper.\n- **rendered** - The rendered remarkd output of a block.\n- **input** - The textarea shown while editing a block.\n- **raw** - The full-document textarea shown in raw source mode.\n- **slash-menu** - The `zn-slash-menu` opened by typing \"/\" in an empty block.\n- **image-controls** - The caption / alignment / size panel shown when an image block is clicked.",
7991
+ "description": "A Notion-style block editor for remarkd content. Blocks render inline; click one to edit its source.\n---\n\n\n### **Events:**\n - **zn-input** - Emitted on each keystroke while editing a block.\n- **zn-change** - Emitted when a block edit is committed and the value changes.\n\n### **Methods:**\n - **focus()** - Starts editing the first block, or a new block if the document is empty.\n- **blur()** - Commits any in-progress block or raw edit.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **toolbar** - The always-visible block-insert toolbar.\n- **raw-toggle** - The button that switches between the block view and the raw source view.\n- **block** - A rendered block wrapper.\n- **rendered** - The rendered remarkd output of a block.\n- **input** - The textarea shown while editing a block.\n- **raw** - The full-document textarea shown in raw source mode.\n- **slash-menu** - The `zn-slash-menu` opened by typing \"/\" in an empty block.\n- **image-controls** - The caption / alignment / size panel shown when an image block is clicked.\n- **include** - The chip rendered in place of an `include::` directive.\n- **include-picker** - The inline Include picker opened from the toolbar or \"/include\".",
7952
7992
  "doc-url": "",
7953
7993
  "attributes": [
7994
+ {
7995
+ "name": "slash-recent-key",
7996
+ "description": "Lists the blocks most recently inserted here above the rest of the slash menu, remembered in\n`localStorage` under this key. Leave unset to offer no recently used section.",
7997
+ "value": { "type": "string", "default": "''" }
7998
+ },
7954
7999
  {
7955
8000
  "name": "name",
7956
8001
  "description": "The name of the control, submitted as part of form data.",
@@ -7971,6 +8016,11 @@
7971
8016
  "description": "Endpoint for image uploads — required for image support. Posting the file\nmetadata here must return `{uploadPath, uploadUrl}`; the file is then PUT\nto `uploadUrl` and the returned `uploadPath` is embedded as the image URL.",
7972
8017
  "value": { "type": "string", "default": "''" }
7973
8018
  },
8019
+ {
8020
+ "name": "include-url",
8021
+ "description": "Endpoint listing the Includes this document may embed, as\n`{\"items\":[{id,title,description,scope,keywords,languages,url}]}`. Labels the\nchips rendered for `include::` directives and feeds the include picker.",
8022
+ "value": { "type": "string", "default": "''" }
8023
+ },
7974
8024
  {
7975
8025
  "name": "allow-raw",
7976
8026
  "description": "Adds a toolbar toggle that swaps the block view for the full remarkd source.",
@@ -8004,6 +8054,11 @@
8004
8054
  ],
8005
8055
  "js": {
8006
8056
  "properties": [
8057
+ {
8058
+ "name": "slashRecentKey",
8059
+ "description": "Lists the blocks most recently inserted here above the rest of the slash menu, remembered in\n`localStorage` under this key. Leave unset to offer no recently used section.",
8060
+ "type": "string"
8061
+ },
8007
8062
  {
8008
8063
  "name": "name",
8009
8064
  "description": "The name of the control, submitted as part of form data.",
@@ -8029,6 +8084,11 @@
8029
8084
  "description": "Endpoint for image uploads — required for image support. Posting the file\nmetadata here must return `{uploadPath, uploadUrl}`; the file is then PUT\nto `uploadUrl` and the returned `uploadPath` is embedded as the image URL.",
8030
8085
  "type": "string"
8031
8086
  },
8087
+ {
8088
+ "name": "includeUrl",
8089
+ "description": "Endpoint listing the Includes this document may embed, as\n`{\"items\":[{id,title,description,scope,keywords,languages,url}]}`. Labels the\nchips rendered for `include::` directives and feeds the include picker.",
8090
+ "type": "string"
8091
+ },
8032
8092
  {
8033
8093
  "name": "allowRaw",
8034
8094
  "description": "Adds a toolbar toggle that swaps the block view for the full remarkd source.",
@@ -8118,6 +8178,299 @@
8118
8178
  ]
8119
8179
  }
8120
8180
  },
8181
+ {
8182
+ "name": "zn-schedule-builder",
8183
+ "description": "Builds a weekly opening-hours schedule as a drag-to-paint calendar or a compact list of\ntime ranges, and posts the result as JSON.\n---\n\n\n### **Events:**\n - **zn-change** - Emitted when the schedule changes.\n\n### **Methods:**\n - **checkValidity(): _boolean_** - Checks validity but does not show a validation message.\n- **getForm(): _HTMLFormElement | null_** - Gets the associated form, if one exists.\n- **reportValidity(): _boolean_** - 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- **setDay(day: _ScheduleDay_, ranges: _ScheduleRange[]_)** - Replaces the hours for a single day, in the save timezone.\n- **getDay(day: _ScheduleDay_): _ScheduleRange[]_** - Reads the hours for a single day, in the save timezone.\n- **setDisplayDay(day: _ScheduleDay_, ranges: _ScheduleRange[]_)** - Replaces the hours for a single day, given in the display timezone.\n\n### **Slots:**\n - **label** - The schedule's label. Alternatively, use the `label` attribute.\n- **help-text** - Text that describes how to use the schedule. Alternatively, use the `help-text` attribute.\n\n### **CSS Properties:**\n - **--slot-height** - The height of a single time slot in the calendar. Defaults to `18px`. _(default: undefined)_\n- **--gutter-width** - The width of the calendar's time gutter. Defaults to `64px`. _(default: undefined)_\n- **--open-color** - The fill used for open hours. _(default: undefined)_\n- **--reduced-color** - The fill used for hours an exception removes. _(default: undefined)_\n\n### **CSS Parts:**\n - **form-control** - The form control that wraps the builder, label and help text.\n- **base** - The component's base wrapper.\n- **toolbar** - The row above the builder holding the hint, legend and view toggle.\n- **calendar** - The calendar view wrapper.\n- **list** - The form (list) view wrapper.\n- **summary** - The summary panel beside the calendar.",
8184
+ "doc-url": "",
8185
+ "attributes": [
8186
+ {
8187
+ "name": "name",
8188
+ "description": "The name of the form control, submitted as a name/value pair with form data.",
8189
+ "value": { "type": "string" }
8190
+ },
8191
+ {
8192
+ "name": "value",
8193
+ "description": "The schedule as a JSON string. This is what gets posted with the form.",
8194
+ "value": { "type": "string", "default": "''" }
8195
+ },
8196
+ {
8197
+ "name": "label",
8198
+ "description": "The schedule's label. If you need to display HTML, use the `label` slot instead.",
8199
+ "value": { "type": "string", "default": "''" }
8200
+ },
8201
+ {
8202
+ "name": "help-text",
8203
+ "description": "The schedule's help text. If you need to display HTML, use the `help-text` slot instead.",
8204
+ "value": { "type": "string", "default": "''" }
8205
+ },
8206
+ {
8207
+ "name": "view",
8208
+ "description": "Which view is showing.",
8209
+ "value": { "type": "ScheduleView", "default": "'calendar'" }
8210
+ },
8211
+ {
8212
+ "name": "open-label",
8213
+ "description": "The word used for hours the schedule covers, in the legend and in labels.",
8214
+ "value": { "type": "string", "default": "'Available'" }
8215
+ },
8216
+ {
8217
+ "name": "closed-label",
8218
+ "description": "The word used for hours the schedule doesn't cover, in the legend and against empty days.",
8219
+ "value": { "type": "string", "default": "'Closed'" }
8220
+ },
8221
+ {
8222
+ "name": "no-toggle",
8223
+ "description": "Hides the calendar/form view toggle.",
8224
+ "value": { "type": "boolean", "default": "false" }
8225
+ },
8226
+ {
8227
+ "name": "hide-summary",
8228
+ "description": "Hides the summary panel beside the calendar.",
8229
+ "value": { "type": "boolean", "default": "false" }
8230
+ },
8231
+ {
8232
+ "name": "start-hour",
8233
+ "description": "The first hour shown in the calendar.",
8234
+ "value": { "type": "number", "default": "6" }
8235
+ },
8236
+ {
8237
+ "name": "end-hour",
8238
+ "description": "The last hour shown in the calendar.",
8239
+ "value": { "type": "number", "default": "22" }
8240
+ },
8241
+ {
8242
+ "name": "interval",
8243
+ "description": "The granularity of the calendar grid and the time inputs, in minutes.",
8244
+ "value": { "type": "number", "default": "30" }
8245
+ },
8246
+ {
8247
+ "name": "week-start",
8248
+ "description": "The weekday the week starts on.",
8249
+ "value": { "type": "ScheduleDay", "default": "'mon'" }
8250
+ },
8251
+ {
8252
+ "name": "time-format",
8253
+ "description": "Displays times as 12 or 24 hour. The serialised value is always 24 hour `HH:MM`.",
8254
+ "value": { "type": "'12' | '24'", "default": "'24'" }
8255
+ },
8256
+ {
8257
+ "name": "display-timezone",
8258
+ "description": "The IANA timezone the hours are shown in. Accepts `auto` for the viewer's own timezone. Defaults\nto `save-timezone`, so nothing is converted until you ask for it. Changing this only re-labels\nthe same underlying hours; the value never moves.",
8259
+ "value": { "type": "string", "default": "''" }
8260
+ },
8261
+ {
8262
+ "name": "save-timezone",
8263
+ "description": "The IANA timezone the value is stored in. Defaults to `UTC` as soon as the schedule is\ntimezone-aware (a display timezone is set, or the picker is shown), and to no timezone at all\notherwise — in which case the times are stored exactly as they are shown.",
8264
+ "value": { "type": "string", "default": "''" }
8265
+ },
8266
+ {
8267
+ "name": "show-timezone",
8268
+ "description": "Shows the timezone picker, letting the user read the schedule in any timezone.",
8269
+ "value": { "type": "boolean", "default": "false" }
8270
+ },
8271
+ {
8272
+ "name": "timezones",
8273
+ "description": "The timezones offered by the picker, as IANA names or one of the named sets — `en` (the four US\nzones, the UK and Australia, under those names), `offsets` (one zone per UTC offset, the\ndefault), `common` (every offset plus the world's major centres) or `all` (the complete IANA\nlist). Names and sets can be mixed, e.g. `en Asia/Tokyo`.",
8274
+ "value": { "type": "string[]", "default": "[]" }
8275
+ },
8276
+ {
8277
+ "name": "reference-date",
8278
+ "description": "The date (`YYYY-MM-DD`) used to resolve timezone offsets. A weekly pattern has no date of its\nown, so one has to be picked to know whether daylight saving applies; today is used by default.",
8279
+ "value": { "type": "string", "default": "''" }
8280
+ },
8281
+ {
8282
+ "name": "disabled",
8283
+ "description": "Disables the schedule.",
8284
+ "value": { "type": "boolean", "default": "false" }
8285
+ },
8286
+ {
8287
+ "name": "readonly",
8288
+ "description": "Renders the schedule without any editing affordances.",
8289
+ "value": { "type": "boolean", "default": "false" }
8290
+ },
8291
+ {
8292
+ "name": "required",
8293
+ "description": "Makes the schedule a required field, invalid until at least one period is open.",
8294
+ "value": { "type": "boolean", "default": "false" }
8295
+ },
8296
+ {
8297
+ "name": "form",
8298
+ "description": "The id of the form to associate with, when the control sits outside of it.",
8299
+ "value": { "type": "string" }
8300
+ }
8301
+ ],
8302
+ "slots": [
8303
+ {
8304
+ "name": "label",
8305
+ "description": "The schedule's label. Alternatively, use the `label` attribute."
8306
+ },
8307
+ {
8308
+ "name": "help-text",
8309
+ "description": "Text that describes how to use the schedule. Alternatively, use the `help-text` attribute."
8310
+ }
8311
+ ],
8312
+ "events": [
8313
+ {
8314
+ "name": "zn-change",
8315
+ "description": "Emitted when the schedule changes."
8316
+ }
8317
+ ],
8318
+ "js": {
8319
+ "properties": [
8320
+ {
8321
+ "name": "name",
8322
+ "description": "The name of the form control, submitted as a name/value pair with form data.",
8323
+ "type": "string"
8324
+ },
8325
+ {
8326
+ "name": "value",
8327
+ "description": "The schedule as a JSON string. This is what gets posted with the form.",
8328
+ "type": "string"
8329
+ },
8330
+ {
8331
+ "name": "defaultValue",
8332
+ "description": "The default value, used when resetting the containing form.",
8333
+ "type": "string"
8334
+ },
8335
+ {
8336
+ "name": "label",
8337
+ "description": "The schedule's label. If you need to display HTML, use the `label` slot instead.",
8338
+ "type": "string"
8339
+ },
8340
+ {
8341
+ "name": "helpText",
8342
+ "description": "The schedule's help text. If you need to display HTML, use the `help-text` slot instead.",
8343
+ "type": "string"
8344
+ },
8345
+ {
8346
+ "name": "view",
8347
+ "description": "Which view is showing.",
8348
+ "type": "ScheduleView"
8349
+ },
8350
+ {
8351
+ "name": "openLabel",
8352
+ "description": "The word used for hours the schedule covers, in the legend and in labels.",
8353
+ "type": "string"
8354
+ },
8355
+ {
8356
+ "name": "closedLabel",
8357
+ "description": "The word used for hours the schedule doesn't cover, in the legend and against empty days.",
8358
+ "type": "string"
8359
+ },
8360
+ {
8361
+ "name": "noToggle",
8362
+ "description": "Hides the calendar/form view toggle.",
8363
+ "type": "boolean"
8364
+ },
8365
+ {
8366
+ "name": "hideSummary",
8367
+ "description": "Hides the summary panel beside the calendar.",
8368
+ "type": "boolean"
8369
+ },
8370
+ {
8371
+ "name": "startHour",
8372
+ "description": "The first hour shown in the calendar.",
8373
+ "type": "number"
8374
+ },
8375
+ {
8376
+ "name": "endHour",
8377
+ "description": "The last hour shown in the calendar.",
8378
+ "type": "number"
8379
+ },
8380
+ {
8381
+ "name": "interval",
8382
+ "description": "The granularity of the calendar grid and the time inputs, in minutes.",
8383
+ "type": "number"
8384
+ },
8385
+ {
8386
+ "name": "weekStart",
8387
+ "description": "The weekday the week starts on.",
8388
+ "type": "ScheduleDay"
8389
+ },
8390
+ {
8391
+ "name": "timeFormat",
8392
+ "description": "Displays times as 12 or 24 hour. The serialised value is always 24 hour `HH:MM`.",
8393
+ "type": "'12' | '24'"
8394
+ },
8395
+ {
8396
+ "name": "displayTimezone",
8397
+ "description": "The IANA timezone the hours are shown in. Accepts `auto` for the viewer's own timezone. Defaults\nto `save-timezone`, so nothing is converted until you ask for it. Changing this only re-labels\nthe same underlying hours; the value never moves.",
8398
+ "type": "string"
8399
+ },
8400
+ {
8401
+ "name": "saveTimezone",
8402
+ "description": "The IANA timezone the value is stored in. Defaults to `UTC` as soon as the schedule is\ntimezone-aware (a display timezone is set, or the picker is shown), and to no timezone at all\notherwise — in which case the times are stored exactly as they are shown.",
8403
+ "type": "string"
8404
+ },
8405
+ {
8406
+ "name": "showTimezone",
8407
+ "description": "Shows the timezone picker, letting the user read the schedule in any timezone.",
8408
+ "type": "boolean"
8409
+ },
8410
+ {
8411
+ "name": "timezones",
8412
+ "description": "The timezones offered by the picker, as IANA names or one of the named sets — `en` (the four US\nzones, the UK and Australia, under those names), `offsets` (one zone per UTC offset, the\ndefault), `common` (every offset plus the world's major centres) or `all` (the complete IANA\nlist). Names and sets can be mixed, e.g. `en Asia/Tokyo`.",
8413
+ "type": "string[]"
8414
+ },
8415
+ {
8416
+ "name": "referenceDate",
8417
+ "description": "The date (`YYYY-MM-DD`) used to resolve timezone offsets. A weekly pattern has no date of its\nown, so one has to be picked to know whether daylight saving applies; today is used by default.",
8418
+ "type": "string"
8419
+ },
8420
+ {
8421
+ "name": "disabled",
8422
+ "description": "Disables the schedule.",
8423
+ "type": "boolean"
8424
+ },
8425
+ {
8426
+ "name": "readonly",
8427
+ "description": "Renders the schedule without any editing affordances.",
8428
+ "type": "boolean"
8429
+ },
8430
+ {
8431
+ "name": "required",
8432
+ "description": "Makes the schedule a required field, invalid until at least one period is open.",
8433
+ "type": "boolean"
8434
+ },
8435
+ {
8436
+ "name": "form",
8437
+ "description": "The id of the form to associate with, when the control sits outside of it.",
8438
+ "type": "string"
8439
+ },
8440
+ {
8441
+ "name": "schedule",
8442
+ "description": "The schedule as a plain object, with `days` in the save timezone. Assigning to it replaces the\nwhole schedule.",
8443
+ "type": "ScheduleValue"
8444
+ },
8445
+ {
8446
+ "name": "exceptions",
8447
+ "description": "The exceptions annotating the schedule. Also readable from, and written into, the value.",
8448
+ "type": "ScheduleException[]"
8449
+ },
8450
+ {
8451
+ "name": "validity",
8452
+ "description": "Gets the validity state object.",
8453
+ "type": "ValidityState"
8454
+ },
8455
+ {
8456
+ "name": "validationMessage",
8457
+ "description": "Gets the validation message.",
8458
+ "type": "string"
8459
+ },
8460
+ {
8461
+ "name": "displayedDays",
8462
+ "description": "The hours as currently shown, in the display timezone.",
8463
+ "type": "ScheduleDayMap"
8464
+ }
8465
+ ],
8466
+ "events": [
8467
+ {
8468
+ "name": "zn-change",
8469
+ "description": "Emitted when the schedule changes."
8470
+ }
8471
+ ]
8472
+ }
8473
+ },
8121
8474
  {
8122
8475
  "name": "zn-scroll-container",
8123
8476
  "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.",
@@ -8946,7 +9299,7 @@
8946
9299
  },
8947
9300
  {
8948
9301
  "name": "zn-slash-menu",
8949
- "description": "A keyboard-driven list of insertions, anchored to the caret of the field that opened it.\n---\n\n\n### **Events:**\n - **SLASH_ITEM_SELECT**\n- **zn-slash-item-select** - Emitted when an item is chosen. Does not cross shadow boundaries; the component driving the menu (e.g. `zn-textarea`) re-emits it as `zn-slash-select`.\n\n### **Methods:**\n - **setActiveIndex(index: _number_)** - Sets the active item by index, wrapping at both ends and skipping disabled items.\n- **moveActive(delta: _number_)** - Moves the active item by `delta` places.\n- **selectActive()** - Chooses the active item, as pressing Enter would.\n- **reposition()** - Recalculates the panel's position against its anchor.\n\n### **CSS Properties:**\n - **--slash-menu-width** - The width of the panel. _(default: undefined)_\n- **--slash-menu-max-height** - The maximum height of the panel before it scrolls. _(default: undefined)_\n\n### **CSS Parts:**\n - **panel** - The floating panel that holds the list.\n- **heading** - The panel's heading.\n- **item** - An item in the list.\n- **group-heading** - A group heading between items.\n- **footer** - The truncation footer, shown when not every match fits.",
9302
+ "description": "A keyboard-driven list of insertions, anchored to the caret of the field that opened it.\n---\n\n\n### **Events:**\n - **SLASH_ITEM_SELECT**\n- **zn-slash-item-select** - Emitted when an item is chosen. Does not cross shadow boundaries; the component driving the menu (e.g. `zn-textarea`) re-emits it as `zn-slash-select`.\n\n### **Methods:**\n - **clearRecent()** - Forgets the items remembered under `recent-key`.\n- **setActiveIndex(index: _number_)** - Sets the active item by index, wrapping at both ends and skipping disabled items.\n- **moveActive(delta: _number_)** - Moves the active item by `delta` places.\n- **selectActive()** - Chooses the active item, as pressing Enter would.\n- **reposition()** - Recalculates the panel's position against its anchor.\n\n### **CSS Properties:**\n - **--slash-menu-width** - The width of the panel. _(default: undefined)_\n- **--slash-menu-border-radius** - The corner radius of the panel. _(default: undefined)_\n- **--slash-menu-item-border-radius** - The corner radius of the items and their icon chips. _(default: undefined)_\n- **--slash-menu-max-height** - The maximum height of the panel before it scrolls. _(default: undefined)_\n\n### **CSS Parts:**\n - **panel** - The floating panel that holds the list.\n- **list** - The scrolling list of items.\n- **item** - An item in the list.\n- **icon** - The chip holding an item's icon.\n- **group-heading** - A group heading between items.\n- **divider** - The rule closing the recently used section, when the items below it have no heading of their own.\n- **footer** - The truncation footer, shown when not every match fits.\n- **hints** - The pinned footer of keyboard hints.\n- **hint** - A single keyboard hint within the footer.\n- **hint-key** - The key shown against a hint.",
8950
9303
  "doc-url": "",
8951
9304
  "attributes": [
8952
9305
  {
@@ -8966,7 +9319,7 @@
8966
9319
  },
8967
9320
  {
8968
9321
  "name": "heading",
8969
- "description": "The heading shown when there is no query.",
9322
+ "description": "The name the list is announced by when there is no query.",
8970
9323
  "value": { "type": "string", "default": "'Insert'" }
8971
9324
  },
8972
9325
  {
@@ -8984,6 +9337,26 @@
8984
9337
  "description": "Hides the insertion key (the item's value) normally shown against each item.",
8985
9338
  "value": { "type": "boolean", "default": "false" }
8986
9339
  },
9340
+ {
9341
+ "name": "hide-hints",
9342
+ "description": "Hides the pinned footer of keyboard hints.",
9343
+ "value": { "type": "boolean", "default": "false" }
9344
+ },
9345
+ {
9346
+ "name": "recent-key",
9347
+ "description": "Remembers the items chosen here and lists the most recent of them first, under their own heading.\nThe key scopes the list to where the menu is used, so each place keeps its own history in\n`localStorage`. Leave unset to offer no recently used section.",
9348
+ "value": { "type": "string", "default": "''" }
9349
+ },
9350
+ {
9351
+ "name": "max-recent",
9352
+ "description": "The most recently used items to list.",
9353
+ "value": { "type": "number", "default": "3" }
9354
+ },
9355
+ {
9356
+ "name": "recent-heading",
9357
+ "description": "The heading shown above the recently used items.",
9358
+ "value": { "type": "string", "default": "'Recently used'" }
9359
+ },
8987
9360
  {
8988
9361
  "name": "placement",
8989
9362
  "description": "The preferred placement of the panel.",
@@ -9021,7 +9394,7 @@
9021
9394
  },
9022
9395
  {
9023
9396
  "name": "heading",
9024
- "description": "The heading shown when there is no query.",
9397
+ "description": "The name the list is announced by when there is no query.",
9025
9398
  "type": "string"
9026
9399
  },
9027
9400
  {
@@ -9039,6 +9412,26 @@
9039
9412
  "description": "Hides the insertion key (the item's value) normally shown against each item.",
9040
9413
  "type": "boolean"
9041
9414
  },
9415
+ {
9416
+ "name": "hideHints",
9417
+ "description": "Hides the pinned footer of keyboard hints.",
9418
+ "type": "boolean"
9419
+ },
9420
+ {
9421
+ "name": "recentKey",
9422
+ "description": "Remembers the items chosen here and lists the most recent of them first, under their own heading.\nThe key scopes the list to where the menu is used, so each place keeps its own history in\n`localStorage`. Leave unset to offer no recently used section.",
9423
+ "type": "string"
9424
+ },
9425
+ {
9426
+ "name": "maxRecent",
9427
+ "description": "The most recently used items to list.",
9428
+ "type": "number"
9429
+ },
9430
+ {
9431
+ "name": "recentHeading",
9432
+ "description": "The heading shown above the recently used items.",
9433
+ "type": "string"
9434
+ },
9042
9435
  {
9043
9436
  "name": "anchor",
9044
9437
  "description": "The element or caret rect the panel is positioned against.",
@@ -10046,7 +10439,7 @@
10046
10439
  },
10047
10440
  {
10048
10441
  "name": "slash-heading",
10049
- "description": "The heading shown above the slash menu's items.",
10442
+ "description": "The name the slash menu's list is announced by.",
10050
10443
  "value": { "type": "string", "default": "'Insert'" }
10051
10444
  },
10052
10445
  {
@@ -10054,6 +10447,11 @@
10054
10447
  "description": "Hides the insertion keys normally shown against the slash menu's items.",
10055
10448
  "value": { "type": "boolean", "default": "false" }
10056
10449
  },
10450
+ {
10451
+ "name": "slash-recent-key",
10452
+ "description": "Lists the items most recently chosen here above the rest, remembered in `localStorage` under this\nkey. Share a key between the fields that should share a history; leave unset to offer no such list.",
10453
+ "value": { "type": "string", "default": "''" }
10454
+ },
10057
10455
  {
10058
10456
  "name": "transparent",
10059
10457
  "value": { "type": "boolean", "default": "false" }
@@ -10255,7 +10653,7 @@
10255
10653
  },
10256
10654
  {
10257
10655
  "name": "slashHeading",
10258
- "description": "The heading shown above the slash menu's items.",
10656
+ "description": "The name the slash menu's list is announced by.",
10259
10657
  "type": "string"
10260
10658
  },
10261
10659
  {
@@ -10263,6 +10661,11 @@
10263
10661
  "description": "Hides the insertion keys normally shown against the slash menu's items.",
10264
10662
  "type": "boolean"
10265
10663
  },
10664
+ {
10665
+ "name": "slashRecentKey",
10666
+ "description": "Lists the items most recently chosen here above the rest, remembered in `localStorage` under this\nkey. Share a key between the fields that should share a history; leave unset to offer no such list.",
10667
+ "type": "string"
10668
+ },
10266
10669
  {
10267
10670
  "name": "slashItemsProvider",
10268
10671
  "description": "Resolves additional items each time the menu opens, for lists that come from elsewhere (e.g. an\nAPI). Receives the current query and may return a promise. JavaScript only.",
@@ -10711,7 +11114,7 @@
10711
11114
  },
10712
11115
  {
10713
11116
  "name": "zn-toggle",
10714
- "description": "Toggles allow the user to switch an option on or off.\n---\n\n\n### **Events:**\n - **zn-input** - Emitted when the toggle receives input.\n\n### **Slots:**\n - _default_ - The toggle's label.\n- **description** - A description of the toggle's label. Alternatively, you can use the `description` attribute.\n- **help-text** - Text that describes how to use the toggle. Alternatively, you can use the `help-text` attribute.\n\n### **CSS Properties:**\n - **--zn-toggle-margin** - The margin around the toggle switch. Defaults to `8px 0`. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper containing the toggle switch.\n- **control** - The toggle switch control (the circular button that slides).\n- **description** - The container that wraps the toggle's description.",
11117
+ "description": "Toggles allow the user to switch an option on or off.\n---\n\n\n### **Events:**\n - **zn-input** - Emitted when the toggle receives input.\n\n### **Slots:**\n - _default_ - The toggle's label.\n- **description** - A description of the toggle's label. Alternatively, you can use the `description` attribute.\n- **help-text** - Text that describes how to use the toggle. Alternatively, you can use the `help-text` attribute.\n\n### **CSS Properties:**\n - **--zn-toggle-margin** - The margin around the toggle switch. Defaults to `8px 0`. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper containing the toggle switch.\n- **control** - The toggle switch control (the circular button that slides).\n- **label** - The toggle's label.\n- **description** - The container that wraps the toggle's description.",
10715
11118
  "doc-url": "",
10716
11119
  "attributes": [
10717
11120
  {
@@ -11083,7 +11486,7 @@
11083
11486
  },
11084
11487
  {
11085
11488
  "name": "slash-heading",
11086
- "description": "The heading shown above the slash menu's items.",
11489
+ "description": "The name the slash menu's list is announced by.",
11087
11490
  "value": { "type": "string", "default": "'Insert'" }
11088
11491
  },
11089
11492
  {
@@ -11091,6 +11494,11 @@
11091
11494
  "description": "Hides the insertion keys normally shown against the slash menu's items.",
11092
11495
  "value": { "type": "boolean", "default": "false" }
11093
11496
  },
11497
+ {
11498
+ "name": "slash-recent-key",
11499
+ "description": "Lists the slash menu items most recently chosen here above the rest, remembered under this key.",
11500
+ "value": { "type": "string", "default": "''" }
11501
+ },
11094
11502
  {
11095
11503
  "name": "grouped",
11096
11504
  "description": "When true, hides the individual language navbar and defers language control to a parent zn-translation-group.",
@@ -11144,7 +11552,7 @@
11144
11552
  },
11145
11553
  {
11146
11554
  "name": "slashHeading",
11147
- "description": "The heading shown above the slash menu's items.",
11555
+ "description": "The name the slash menu's list is announced by.",
11148
11556
  "type": "string"
11149
11557
  },
11150
11558
  {
@@ -11152,6 +11560,11 @@
11152
11560
  "description": "Hides the insertion keys normally shown against the slash menu's items.",
11153
11561
  "type": "boolean"
11154
11562
  },
11563
+ {
11564
+ "name": "slashRecentKey",
11565
+ "description": "Lists the slash menu items most recently chosen here above the rest, remembered under this key.",
11566
+ "type": "string"
11567
+ },
11155
11568
  {
11156
11569
  "name": "slashItemsProvider",
11157
11570
  "description": "Resolves additional slash menu items each time the menu opens. JavaScript only.",