@kubex/zinc 1.1.185 → 2.0.1

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 (358) hide show
  1. package/.browserslistrc +2 -0
  2. package/.github/workflows/js_build_and_deploy.yaml +54 -1
  3. package/.github/workflows/test.yaml +27 -0
  4. package/dist/chunks/zn.UWJLIXDT.js +1 -0
  5. package/dist/custom-elements.json +10319 -2666
  6. package/dist/vscode.html-custom-data.json +1012 -57
  7. package/dist/web-types.json +2097 -145
  8. package/dist/zn.d.ts +2294 -416
  9. package/dist/zn.min.css +1 -1
  10. package/dist/zn.min.js +2310 -1637
  11. package/docs/_includes/default.njk +4 -1
  12. package/docs/assets/scripts/docs.js +22 -6
  13. package/docs/assets/styles/docs.css +9 -2
  14. package/docs/data/report-table-day-compare.json +380 -0
  15. package/docs/data/report-table.json +314 -0
  16. package/docs/pages/components/avatar-group.md +57 -0
  17. package/docs/pages/components/badge.md +67 -0
  18. package/docs/pages/components/button.md +41 -1
  19. package/docs/pages/components/chat-message.md +16 -0
  20. package/docs/pages/components/checkbox.md +1 -1
  21. package/docs/pages/components/chip.md +25 -13
  22. package/docs/pages/components/color-picker.md +37 -0
  23. package/docs/pages/components/copy-button.md +2 -2
  24. package/docs/pages/components/data-table-filter.md +33 -50
  25. package/docs/pages/components/data-table-search.md +4 -4
  26. package/docs/pages/components/data-table.md +27 -3
  27. package/docs/pages/components/date-range.md +116 -0
  28. package/docs/pages/components/dialog.md +29 -37
  29. package/docs/pages/components/diff-row.md +28 -0
  30. package/docs/pages/components/diff.md +46 -0
  31. package/docs/pages/components/editor.md +55 -0
  32. package/docs/pages/components/icon.md +46 -1
  33. package/docs/pages/components/input.md +30 -11
  34. package/docs/pages/components/item.md +35 -0
  35. package/docs/pages/components/key-value.md +25 -0
  36. package/docs/pages/components/menu.md +74 -7
  37. package/docs/pages/components/nav-item.md +15 -0
  38. package/docs/pages/components/nav-list.md +132 -0
  39. package/docs/pages/components/navbar.md +100 -1
  40. package/docs/pages/components/page.md +242 -74
  41. package/docs/pages/components/priority-list.md +43 -5
  42. package/docs/pages/components/query-builder.md +23 -0
  43. package/docs/pages/components/radio-group.md +33 -1
  44. package/docs/pages/components/radio.md +1 -1
  45. package/docs/pages/components/report-table.md +202 -0
  46. package/docs/pages/components/stat.md +30 -0
  47. package/docs/pages/components/tile.md +11 -0
  48. package/docs/pages/components/tooltip.md +1 -1
  49. package/docs/pages/components/translation-grid.md +86 -0
  50. package/docs/pages/components/vertical-stepper.md +108 -64
  51. package/package.json +2 -1
  52. package/scss/_global-spacing.scss +2 -2
  53. package/scss/_root.scss +11 -171
  54. package/scss/boot.scss +14 -0
  55. package/scss/mixins/_helper-mixins.scss +24 -2
  56. package/scss/mixins/_motion-mixins.scss +126 -0
  57. package/scss/mixins/_spacing-mixins.scss +4 -3
  58. package/scss/mixins/_tab-indicator-mixins.scss +12 -0
  59. package/scss/mixins/_typography-mixins.scss +1 -1
  60. package/scss/mixins/index.scss +14 -0
  61. package/scss/shared/_base.scss +32 -1
  62. package/scss/shared/_button-mixin.scss +7 -5
  63. package/scss/shared/_table.scss +35 -4
  64. package/scss/shared/nav.scss +4 -0
  65. package/scss/shared/shimmer.scss +1 -1
  66. package/scss/table-controls.scss +206 -0
  67. package/scss/themes/_dark.scss +1 -3
  68. package/scss/themes/_index.scss +1 -1
  69. package/scss/themes/_light.scss +46 -6
  70. package/scss/themes/_modes.scss +11 -11
  71. package/scss/themes/_openbyte.scss +944 -0
  72. package/scss/themes/_typography.scss +4 -2
  73. package/scss/variables/index.scss +0 -9
  74. package/src/components/alert/alert.component.ts +14 -4
  75. package/src/components/alert/alert.scss +55 -69
  76. package/src/components/alert/alert.test.ts +8 -0
  77. package/src/components/animated-button/animated-button.component.ts +3 -2
  78. package/src/components/animated-button/animated-button.scss +6 -23
  79. package/src/components/animated-button/animated-button.test.ts +4 -3
  80. package/src/components/avatar-group/avatar-group.component.ts +84 -0
  81. package/src/components/avatar-group/avatar-group.scss +54 -0
  82. package/src/components/avatar-group/avatar-group.test.ts +59 -0
  83. package/src/components/avatar-group/index.ts +12 -0
  84. package/src/components/badge/badge.component.ts +49 -0
  85. package/src/components/badge/badge.scss +80 -0
  86. package/src/components/badge/badge.test.ts +34 -0
  87. package/src/components/badge/index.ts +12 -0
  88. package/src/components/bulk-actions/bulk-actions.component.ts +14 -2
  89. package/src/components/button/button.component.ts +228 -8
  90. package/src/components/button/button.scss +115 -32
  91. package/src/components/button/button.test.ts +122 -0
  92. package/src/components/button-menu/button-menu.component.ts +32 -11
  93. package/src/components/button-menu/button-menu.scss +5 -1
  94. package/src/components/channel-tile/channel-tile.component.ts +34 -27
  95. package/src/components/channel-tile/channel-tile.scss +76 -43
  96. package/src/components/chart/builders.test.ts +46 -0
  97. package/src/components/chart/builders.ts +27 -3
  98. package/src/components/chart/chart-live.test.ts +4 -6
  99. package/src/components/chart/chart.component.ts +125 -5
  100. package/src/components/chart/chart.scss +121 -0
  101. package/src/components/chart/chart.test.ts +81 -0
  102. package/src/components/chat-message/chat-message.component.ts +21 -1
  103. package/src/components/chat-message/chat-message.scss +13 -2
  104. package/src/components/chat-message/chat-message.test.ts +9 -0
  105. package/src/components/checkbox/checkbox.component.ts +61 -27
  106. package/src/components/checkbox/checkbox.scss +58 -25
  107. package/src/components/checkbox-group/checkbox-group.component.ts +7 -1
  108. package/src/components/chip/chip.component.ts +11 -1
  109. package/src/components/chip/chip.scss +91 -26
  110. package/src/components/chip/chip.test.ts +17 -0
  111. package/src/components/collapsible/collapsible.component.ts +17 -3
  112. package/src/components/collapsible/collapsible.scss +19 -10
  113. package/src/components/color-picker/color-picker.component.ts +277 -0
  114. package/src/components/color-picker/color-picker.scss +141 -0
  115. package/src/components/color-picker/color-picker.test.ts +57 -0
  116. package/src/components/color-picker/index.ts +12 -0
  117. package/src/components/cols/cols.component.ts +10 -0
  118. package/src/components/cols/cols.test.ts +17 -0
  119. package/src/components/confirm/confirm.component.ts +20 -6
  120. package/src/components/confirm/confirm.test.ts +52 -0
  121. package/src/components/content-block/content-block.component.ts +38 -9
  122. package/src/components/content-block/content-block.scss +11 -5
  123. package/src/components/content-block/content-block.test.ts +26 -0
  124. package/src/components/copy-button/copy-button.component.ts +2 -2
  125. package/src/components/copy-button/copy-button.scss +17 -4
  126. package/src/components/data-select/data-select.component.ts +3 -1
  127. package/src/components/data-table/data-table.component.ts +362 -140
  128. package/src/components/data-table/data-table.scss +136 -60
  129. package/src/components/data-table/data-table.test.ts +356 -4
  130. package/src/components/data-table-filter/data-table-filter.component.ts +426 -406
  131. package/src/components/data-table-filter/data-table-filter.scss +176 -148
  132. package/src/components/data-table-filter/data-table-filter.test.ts +271 -273
  133. package/src/components/data-table-search/data-table-search.component.ts +4 -2
  134. package/src/components/data-table-search/data-table-search.scss +8 -1
  135. package/src/components/data-table-search/data-table-search.test.ts +29 -0
  136. package/src/components/date-range/date-range-math.test.ts +78 -0
  137. package/src/components/date-range/date-range-math.ts +105 -0
  138. package/src/components/date-range/date-range.component.ts +375 -0
  139. package/src/components/date-range/date-range.scss +272 -0
  140. package/src/components/date-range/date-range.test.ts +247 -0
  141. package/src/components/date-range/index.ts +12 -0
  142. package/src/components/datepicker/datepicker.component.ts +44 -7
  143. package/src/components/datepicker/datepicker.scss +9 -0
  144. package/src/components/datepicker/datepicker.test.ts +2 -2
  145. package/src/components/dialog/dialog.component.ts +38 -19
  146. package/src/components/dialog/dialog.scss +65 -36
  147. package/src/components/dialog/dialog.test.ts +14 -0
  148. package/src/components/diff/diff.component.ts +55 -0
  149. package/src/components/diff/diff.scss +46 -0
  150. package/src/components/diff/diff.test.ts +15 -0
  151. package/src/components/diff/index.ts +12 -0
  152. package/src/components/diff-row/diff-row.component.ts +75 -0
  153. package/src/components/diff-row/diff-row.scss +70 -0
  154. package/src/components/diff-row/diff-row.test.ts +37 -0
  155. package/src/components/diff-row/index.ts +12 -0
  156. package/src/components/dropdown/dropdown.component.ts +12 -10
  157. package/src/components/dropdown/dropdown.scss +2 -0
  158. package/src/components/editor/editor.component.ts +159 -11
  159. package/src/components/editor/editor.scss +250 -1
  160. package/src/components/editor/editor.test.ts +31 -3
  161. package/src/components/editor/modules/ai/panel/ai-panel.scss +0 -1
  162. package/src/components/editor/modules/attachment/attachment.ts +53 -31
  163. package/src/components/editor/modules/context-menu/context-menu.ts +17 -0
  164. package/src/components/editor/modules/dialog/dialog.component.ts +23 -1
  165. package/src/components/editor/modules/dialog/dialog.test.ts +28 -0
  166. package/src/components/editor/modules/emoji/emoji.ts +4 -5
  167. package/src/components/editor/modules/merge-field/merge-field.ts +83 -0
  168. package/src/components/editor/modules/toolbar/toolbar.component.ts +121 -68
  169. package/src/components/editor/modules/toolbar/toolbar.scss +38 -0
  170. package/src/components/editor/modules/toolbar/toolbar.ts +25 -1
  171. package/src/components/empty-state/empty-state.component.ts +6 -1
  172. package/src/components/empty-state/empty-state.scss +21 -4
  173. package/src/components/expanding-action/expanding-action.component.ts +22 -34
  174. package/src/components/expanding-action/expanding-action.scss +3 -45
  175. package/src/components/expanding-action/expanding-action.test.ts +2 -1
  176. package/src/components/file/file.component.ts +30 -2
  177. package/src/components/file/file.scss +6 -0
  178. package/src/components/flow-builder/flow-builder.component.ts +36 -3
  179. package/src/components/flow-builder/flow-builder.scss +0 -6
  180. package/src/components/flow-builder/modules/flow-canvas/flow-canvas.component.ts +8 -0
  181. package/src/components/flow-builder/modules/flow-canvas/flow-canvas.scss +10 -5
  182. package/src/components/flow-builder/modules/flow-node/flow-node.component.ts +17 -0
  183. package/src/components/flow-builder/modules/flow-node/flow-node.scss +10 -0
  184. package/src/components/form-actions/form-actions.component.ts +48 -2
  185. package/src/components/form-actions/form-actions.scss +1 -1
  186. package/src/components/form-group/form-group.component.ts +10 -3
  187. package/src/components/form-group/form-group.scss +37 -4
  188. package/src/components/form-group/form-group.test.ts +10 -0
  189. package/src/components/header/header.component.ts +11 -4
  190. package/src/components/header/header.scss +47 -5
  191. package/src/components/hover-container/hover-container.component.ts +4 -5
  192. package/src/components/icon/icon.component.ts +95 -9
  193. package/src/components/icon/icon.scss +70 -6
  194. package/src/components/icon/icon.test.ts +55 -0
  195. package/src/components/icon-picker/icon-picker.component.ts +35 -1
  196. package/src/components/inline-edit/inline-edit.component.ts +38 -8
  197. package/src/components/inline-edit/inline-edit.scss +128 -19
  198. package/src/components/input/input.component.ts +173 -297
  199. package/src/components/input/input.scss +65 -43
  200. package/src/components/input/input.test.ts +86 -4
  201. package/src/components/item/item.component.ts +12 -0
  202. package/src/components/item/item.scss +102 -3
  203. package/src/components/item/item.test.ts +23 -0
  204. package/src/components/key/key.component.ts +2 -2
  205. package/src/components/key/key.scss +11 -0
  206. package/src/components/key-value/index.ts +12 -0
  207. package/src/components/key-value/key-value.component.ts +160 -0
  208. package/src/components/key-value/key-value.scss +20 -0
  209. package/src/components/key-value/key-value.test.ts +22 -0
  210. package/src/components/markdown-editor/markdown-editor.component.ts +8 -1
  211. package/src/components/menu/menu.component.ts +21 -2
  212. package/src/components/menu/menu.scss +43 -23
  213. package/src/components/menu/menu.test.ts +33 -0
  214. package/src/components/menu-item/menu-item.component.ts +13 -2
  215. package/src/components/menu-item/menu-item.scss +56 -23
  216. package/src/components/menu-item/menu-item.test.ts +31 -0
  217. package/src/components/menu-item/submenu-controller.ts +25 -15
  218. package/src/components/menu-label/index.ts +12 -0
  219. package/src/components/menu-label/menu-label.component.ts +30 -0
  220. package/src/components/menu-label/menu-label.scss +18 -0
  221. package/src/components/nav-item/index.ts +12 -0
  222. package/src/components/nav-item/nav-item.component.ts +83 -0
  223. package/src/components/nav-item/nav-item.scss +128 -0
  224. package/src/components/nav-list/index.ts +12 -0
  225. package/src/components/nav-list/nav-list.component.ts +313 -0
  226. package/src/components/nav-list/nav-list.scss +87 -0
  227. package/src/components/nav-list/nav-list.test.ts +250 -0
  228. package/src/components/navbar/navbar.component.ts +235 -171
  229. package/src/components/navbar/navbar.scss +333 -169
  230. package/src/components/navbar/navbar.test.ts +63 -143
  231. package/src/components/page/page.component.ts +114 -29
  232. package/src/components/page/page.scss +223 -95
  233. package/src/components/page/page.test.ts +214 -3
  234. package/src/components/page-builder/page-builder.component.ts +51 -5
  235. package/src/components/page-builder/page-builder.scss +6 -1
  236. package/src/components/page-nav/page-nav.component.ts +25 -3
  237. package/src/components/page-nav/page-nav.scss +10 -2
  238. package/src/components/pagination/pagination.scss +1 -1
  239. package/src/components/panel/panel.component.ts +14 -13
  240. package/src/components/panel/panel.scss +14 -10
  241. package/src/components/panel/panel.test.ts +42 -0
  242. package/src/components/popup/popup.component.ts +20 -13
  243. package/src/components/popup/popup.test.ts +21 -1
  244. package/src/components/priority-list/priority-list.component.ts +157 -172
  245. package/src/components/priority-list/priority-list.scss +113 -17
  246. package/src/components/priority-list/priority-list.test.ts +301 -3
  247. package/src/components/progress-bar/progress-bar.component.ts +1 -1
  248. package/src/components/progress-bar/progress-bar.scss +16 -4
  249. package/src/components/progress-tile/progress-tile.scss +1 -1
  250. package/src/components/query-builder/query-builder.component.ts +85 -10
  251. package/src/components/query-builder/query-builder.scss +7 -1
  252. package/src/components/query-builder/query-builder.test.ts +40 -0
  253. package/src/components/radio/radio.component.ts +57 -18
  254. package/src/components/radio/radio.scss +101 -26
  255. package/src/components/radio-group/radio-group.component.ts +45 -7
  256. package/src/components/radio-group/radio-group.scss +17 -0
  257. package/src/components/radio-group/radio-group.test.ts +63 -2
  258. package/src/components/rating/rating.component.ts +23 -0
  259. package/src/components/rating/rating.scss +1 -1
  260. package/src/components/remarkd-editor/remarkd-editor.component.ts +60 -5
  261. package/src/components/remarkd-editor/remarkd-editor.scss +12 -4
  262. package/src/components/report-table/index.ts +12 -0
  263. package/src/components/report-table/report-format.test.ts +86 -0
  264. package/src/components/report-table/report-format.ts +72 -0
  265. package/src/components/report-table/report-math.test.ts +74 -0
  266. package/src/components/report-table/report-math.ts +252 -0
  267. package/src/components/report-table/report-table.component.ts +681 -0
  268. package/src/components/report-table/report-table.scss +328 -0
  269. package/src/components/report-table/report-table.test.ts +702 -0
  270. package/src/components/reveal/reveal.component.ts +15 -1
  271. package/src/components/reveal/reveal.scss +5 -0
  272. package/src/components/schedule-builder/schedule-builder.component.ts +23 -8
  273. package/src/components/scroll-container/scroll-container.component.ts +19 -1
  274. package/src/components/scroll-container/scroll-container.scss +6 -1
  275. package/src/components/select/select.component.ts +52 -36
  276. package/src/components/select/select.scss +42 -25
  277. package/src/components/select/select.test.ts +14 -2
  278. package/src/components/settings-container/settings-container.scss +18 -5
  279. package/src/components/sidebar/sidebar.component.ts +8 -1
  280. package/src/components/sidebar/sidebar.scss +6 -1
  281. package/src/components/skeleton/skeleton.component.ts +3 -3
  282. package/src/components/skeleton/skeleton.scss +6 -6
  283. package/src/components/skeleton/skeleton.test.ts +9 -0
  284. package/src/components/slash-menu/slash-menu.scss +1 -1
  285. package/src/components/slideout/slideout.component.ts +20 -3
  286. package/src/components/slideout/slideout.scss +13 -6
  287. package/src/components/slideout/slideout.test.ts +19 -0
  288. package/src/components/split-button/split-button.component.ts +1 -1
  289. package/src/components/split-pane/split-pane.component.ts +71 -8
  290. package/src/components/split-pane/split-pane.scss +145 -41
  291. package/src/components/split-pane/split-pane.test.ts +23 -3
  292. package/src/components/stat/stat.component.ts +209 -14
  293. package/src/components/stat/stat.scss +305 -5
  294. package/src/components/stat/stat.test.ts +143 -2
  295. package/src/components/status-indicator/status-indicator.scss +22 -21
  296. package/src/components/stepper/stepper.scss +3 -3
  297. package/src/components/tab/tab.component.ts +1 -0
  298. package/src/components/table/table.component.ts +12 -1
  299. package/src/components/table/table.scss +21 -13
  300. package/src/components/table/table.test.ts +17 -0
  301. package/src/components/tabs/tabs.component.ts +150 -37
  302. package/src/components/tabs/tabs.scss +48 -7
  303. package/src/components/tabs/tabs.test.ts +169 -0
  304. package/src/components/textarea/textarea.component.ts +25 -3
  305. package/src/components/textarea/textarea.scss +10 -0
  306. package/src/components/textarea/textarea.test.ts +8 -4
  307. package/src/components/theme-editor/theme-editor.scss +0 -6
  308. package/src/components/tile/tile.component.ts +32 -2
  309. package/src/components/tile/tile.scss +40 -7
  310. package/src/components/tile/tile.test.ts +10 -0
  311. package/src/components/toggle/toggle.component.ts +23 -7
  312. package/src/components/toggle/toggle.scss +36 -29
  313. package/src/components/toggle/toggle.test.ts +17 -0
  314. package/src/components/tooltip/tooltip.component.ts +3 -0
  315. package/src/components/tooltip/tooltip.scss +11 -6
  316. package/src/components/tooltip/tooltip.test.ts +12 -0
  317. package/src/components/translation-field/index.ts +12 -0
  318. package/src/components/translation-field/translation-field.component.ts +55 -0
  319. package/src/components/translation-field/translation-field.scss +101 -0
  320. package/src/components/translation-fields/index.ts +12 -0
  321. package/src/components/translation-fields/translation-fields.component.ts +80 -0
  322. package/src/components/translation-fields/translation-fields.scss +60 -0
  323. package/src/components/translation-grid/index.ts +12 -0
  324. package/src/components/translation-grid/translation-grid.component.ts +157 -0
  325. package/src/components/translation-grid/translation-grid.scss +138 -0
  326. package/src/components/translation-grid/translation-grid.test.ts +28 -0
  327. package/src/components/vertical-stepper/vertical-stepper.component.ts +35 -9
  328. package/src/components/vertical-stepper/vertical-stepper.scss +110 -39
  329. package/src/components/vertical-stepper/vertical-stepper.test.ts +35 -0
  330. package/src/components/well/well.scss +2 -2
  331. package/src/events/events.ts +2 -0
  332. package/src/events/zn-chart-click.ts +13 -0
  333. package/src/events/zn-report-change.ts +7 -0
  334. package/src/form-control.scss +36 -3
  335. package/src/internal/anchored-popover.ts +175 -0
  336. package/src/internal/animate.ts +19 -5
  337. package/src/internal/cosmic-border.ts +15 -0
  338. package/src/internal/form.ts +1 -1
  339. package/src/internal/hover-intent.ts +15 -0
  340. package/src/internal/input-modality.ts +15 -0
  341. package/src/internal/pointer-intent.ts +37 -0
  342. package/src/internal/reorder.ts +632 -0
  343. package/src/internal/scroll.ts +51 -3
  344. package/src/internal/selection-card.ts +1 -1
  345. package/src/internal/tab-indicator.ts +92 -0
  346. package/src/internal/table-sort.ts +25 -0
  347. package/src/internal/table-tabs.ts +108 -0
  348. package/src/internal/test-drag.ts +35 -0
  349. package/src/internal/theme-openbyte.test.ts +126 -0
  350. package/src/internal/theme.ts +4 -4
  351. package/src/internal/zinc-element.ts +2 -2
  352. package/src/selection-card.scss +25 -0
  353. package/src/types/web-test-runner-commands.d.ts +1 -0
  354. package/src/utilities/color.test.ts +43 -0
  355. package/src/utilities/color.ts +189 -0
  356. package/src/zinc.ts +14 -0
  357. package/.github/workflows/eleventy_build.yml +0 -42
  358. package/scss/themes/_aura.scss +0 -114
@@ -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.185",
4
+ "version": "2.0.1",
5
5
  "description-markup": "markdown",
6
6
  "contributions": {
7
7
  "html": {
@@ -15,12 +15,39 @@
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\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
+ },
18
40
  {
19
41
  "name": "zn-alert",
20
42
  "description": "Short summary of the component's intended use.\n\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
43
  "doc-url": "",
22
44
  "attributes": [
23
45
  { "name": "icon", "value": { "type": "string", "default": "''" } },
46
+ {
47
+ "name": "icon-size",
48
+ "description": "The status icon's size in pixels.",
49
+ "value": { "type": "number", "default": "24" }
50
+ },
24
51
  {
25
52
  "name": "caption",
26
53
  "value": { "type": "string", "default": "''" }
@@ -38,8 +65,9 @@
38
65
  },
39
66
  {
40
67
  "name": "level",
68
+ "description": "`ai` marks AI-generated content only.",
41
69
  "value": {
42
- "type": "'primary' | 'error' | 'info' | 'success' | 'warning' | 'note' | 'cosmic'",
70
+ "type": "'primary' | 'error' | 'info' | 'success' | 'warning' | 'note' | 'cosmic' | 'ai'",
43
71
  "default": "'info'"
44
72
  }
45
73
  },
@@ -65,12 +93,18 @@
65
93
  "js": {
66
94
  "properties": [
67
95
  { "name": "icon", "type": "string" },
96
+ {
97
+ "name": "iconSize",
98
+ "description": "The status icon's size in pixels.",
99
+ "type": "number"
100
+ },
68
101
  { "name": "caption", "type": "string" },
69
102
  { "name": "collapse", "type": "boolean" },
70
103
  { "name": "appearance", "type": "'transparent' | 'solid'" },
71
104
  {
72
105
  "name": "level",
73
- "type": "'primary' | 'error' | 'info' | 'success' | 'warning' | 'note' | 'cosmic'"
106
+ "description": "`ai` marks AI-generated content only.",
107
+ "type": "'primary' | 'error' | 'info' | 'success' | 'warning' | 'note' | 'cosmic' | 'ai'"
74
108
  },
75
109
  { "name": "center", "type": "boolean" },
76
110
  { "name": "size", "type": "'small' | 'medium' | 'large'" }
@@ -83,28 +117,6 @@
83
117
  ]
84
118
  }
85
119
  },
86
- {
87
- "name": "zn-action-bar",
88
- "description": "Short summary of the component's intended use.\n\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
120
  {
109
121
  "name": "zn-animated-button",
110
122
  "description": "\n\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",
@@ -250,6 +262,35 @@
250
262
  "events": []
251
263
  }
252
264
  },
265
+ {
266
+ "name": "zn-avatar-group",
267
+ "description": "Overlapping avatars that show each person's name on hover, collapsing any past `max` into a \"+N\" count.\n\n---\n\n\n### **Slots:**\n - _default_ - `zn-icon` avatars. Each one's tooltip shows its `alt`, or its `src` when it has none.\n\n### **CSS Properties:**\n - **--zn-avatar-ring-color** - The ring that separates overlapping avatars; defaults to the panel surface. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **overflow** - The \"+N\" count standing in for the avatars past `max`.",
268
+ "doc-url": "",
269
+ "attributes": [
270
+ {
271
+ "name": "max",
272
+ "description": "The most avatars to show; the rest are counted in a \"+N\" avatar whose tooltip lists them. 0 shows them all.",
273
+ "value": { "type": "number", "default": "0" }
274
+ }
275
+ ],
276
+ "slots": [
277
+ {
278
+ "name": "",
279
+ "description": "`zn-icon` avatars. Each one's tooltip shows its `alt`, or its `src` when it has none."
280
+ }
281
+ ],
282
+ "events": [],
283
+ "js": {
284
+ "properties": [
285
+ {
286
+ "name": "max",
287
+ "description": "The most avatars to show; the rest are counted in a \"+N\" avatar whose tooltip lists them. 0 shows them all.",
288
+ "type": "number"
289
+ }
290
+ ],
291
+ "events": []
292
+ }
293
+ },
253
294
  {
254
295
  "name": "zn-background",
255
296
  "description": "Composes a colour, decorative image, image strength, optional motion and contrast overlay behind slotted content.\n\n---\n\n\n### **Slots:**\n - _default_ - Content displayed above the background layers.\n\n### **CSS Properties:**\n - **--zn-background-color** - Fallback colour when the `color` attribute is not set. _(default: undefined)_\n- **--zn-background-image-position** - Position of the background image. Defaults to `center`. _(default: undefined)_\n- **--zn-background-overlay-angle** - Direction of the overlay gradient. Defaults to `110deg`. _(default: undefined)_\n- **--zn-background-floating-icon-color** - Colour of the floating icons. Defaults to `currentColor`. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's full-size background canvas.\n- **image** - The decorative background image.\n- **overlay** - The contrast overlay between the image and content.\n- **floating-icons** - The non-interactive layer containing the floating icons.\n- **floating-icon** - Each floating `zn-icon`.\n- **content** - The wrapper around the default slot.",
@@ -352,6 +393,58 @@
352
393
  "events": []
353
394
  }
354
395
  },
396
+ {
397
+ "name": "zn-badge",
398
+ "description": "Badges label the status or category of a record, such as \"Active\" or \"Past due\".\n\n---\n\n\n### **Slots:**\n - _default_ - The badge's label.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
399
+ "doc-url": "",
400
+ "attributes": [
401
+ {
402
+ "name": "type",
403
+ "description": "`ai` marks AI-generated content only.",
404
+ "value": {
405
+ "type": "'neutral' | 'success' | 'warning' | 'danger' | 'info' | 'ai'",
406
+ "default": "'neutral'"
407
+ }
408
+ },
409
+ {
410
+ "name": "size",
411
+ "value": { "type": "'medium' | 'large'", "default": "'medium'" }
412
+ },
413
+ {
414
+ "name": "solid",
415
+ "description": "Fills the badge with its type colour.",
416
+ "value": { "type": "boolean", "default": "false" }
417
+ },
418
+ {
419
+ "name": "dot",
420
+ "description": "Leads the label with a dot in the type colour.",
421
+ "value": { "type": "boolean", "default": "false" }
422
+ }
423
+ ],
424
+ "slots": [{ "name": "", "description": "The badge's label." }],
425
+ "events": [],
426
+ "js": {
427
+ "properties": [
428
+ {
429
+ "name": "type",
430
+ "description": "`ai` marks AI-generated content only.",
431
+ "type": "'neutral' | 'success' | 'warning' | 'danger' | 'info' | 'ai'"
432
+ },
433
+ { "name": "size", "type": "'medium' | 'large'" },
434
+ {
435
+ "name": "solid",
436
+ "description": "Fills the badge with its type colour.",
437
+ "type": "boolean"
438
+ },
439
+ {
440
+ "name": "dot",
441
+ "description": "Leads the label with a dot in the type colour.",
442
+ "type": "boolean"
443
+ }
444
+ ],
445
+ "events": []
446
+ }
447
+ },
355
448
  {
356
449
  "name": "zn-bulk-actions",
357
450
  "description": "Short summary of the component's intended use.\n\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.",
@@ -392,16 +485,24 @@
392
485
  },
393
486
  {
394
487
  "name": "zn-button",
395
- "description": "Buttons represent actions that are available to the user.\n\n---\n\n\n### **Events:**\n - **zn-blur** - Emitted when the button loses focus.\n- **zn-focus** - Emitted when the button gains focus.\n- **zn-invalid** - Emitted when the form control has been checked for validity and its constraints aren't satisfied.\n\n### **Slots:**\n - _default_ - The button's label.\n- **prefix** - A presentational prefix icon or similar element.\n- **suffix** - A presentational suffix icon or similar element.\n- **cancel** - Slot for custom cancel button/content when autoClick is active.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **prefix** - The container that wraps the prefix.\n- **label** - The button's label.\n- **suffix** - The container that wraps the suffix.\n- **caret** - The button's caret icon, an `<zn-icon>` element.\n- **spinner** - The spinner that shows when the button is in the loading state.",
488
+ "description": "Buttons represent actions that are available to the user.\n\n---\n\n\n### **Events:**\n - **zn-blur** - Emitted when the button loses focus.\n- **zn-focus** - Emitted when the button gains focus.\n- **zn-invalid** - Emitted when the form control has been checked for validity and its constraints aren't satisfied.\n\n### **Methods:**\n - **showMenu()** - Opens the advanced options in the `menu` slot.\n- **hideMenu()** - Closes the advanced options in the `menu` slot.\n\n### **Slots:**\n - _default_ - The button's label.\n- **prefix** - A presentational prefix icon or similar element.\n- **suffix** - A presentational suffix icon or similar element.\n- **cancel** - Slot for custom cancel button/content when autoClick is active.\n- **menu** - A `<zn-menu>` of advanced options, opened by a long press, a right click, or ArrowDown on the button.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **prefix** - The container that wraps the prefix.\n- **label** - The button's label.\n- **suffix** - The container that wraps the suffix.\n- **caret** - The button's caret icon, an `<zn-icon>` element.\n- **spinner** - The spinner that shows when the button is in the loading state.",
396
489
  "doc-url": "",
397
490
  "attributes": [
398
491
  {
399
492
  "name": "color",
493
+ "description": "`ai` is reserved for actions that invoke or act on AI-generated content.",
400
494
  "value": {
401
- "type": "'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning' |\n 'transparent' | 'star' | (string & Record<never, never>)",
495
+ "type": "'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning' | 'ai' |\n 'transparent' | 'star' | (string & Record<never, never>)",
402
496
  "default": "'default'"
403
497
  }
404
498
  },
499
+ {
500
+ "name": "size",
501
+ "value": {
502
+ "type": "'small' | 'medium' | 'large'",
503
+ "default": "'medium'"
504
+ }
505
+ },
405
506
  { "name": "hover-color", "value": { "type": "string" } },
406
507
  {
407
508
  "name": "text",
@@ -411,6 +512,11 @@
411
512
  "name": "outline",
412
513
  "value": { "type": "boolean", "default": "false" }
413
514
  },
515
+ {
516
+ "name": "solid",
517
+ "description": "Keeps the filled look where a container forces `text`, such as a page header's action menu.",
518
+ "value": { "type": "boolean", "default": "false" }
519
+ },
414
520
  {
415
521
  "name": "disabled",
416
522
  "value": { "type": "boolean", "default": "false" }
@@ -450,6 +556,19 @@
450
556
  "name": "panel-bg",
451
557
  "value": { "type": "boolean", "default": "false" }
452
558
  },
559
+ {
560
+ "name": "long-press-delay",
561
+ "description": "How long, in milliseconds, the button must be held to open the `menu` slot.",
562
+ "value": { "type": "number", "default": "500" }
563
+ },
564
+ {
565
+ "name": "menu-placement",
566
+ "description": "Where the `menu` slot opens relative to the button.",
567
+ "value": {
568
+ "type": "'top' | 'top-start' | 'top-end' | 'right' | 'right-start' |\n 'right-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end'",
569
+ "default": "'bottom-start'"
570
+ }
571
+ },
453
572
  {
454
573
  "name": "dropdown-closer",
455
574
  "value": { "type": "boolean", "default": "false" }
@@ -525,6 +644,16 @@
525
644
  "description": "Toggle state, forwarded to the inner button's `aria-pressed`.",
526
645
  "value": { "type": "'true' | 'false' | 'mixed'" }
527
646
  },
647
+ {
648
+ "name": "aria-expanded",
649
+ "description": "Popup state, forwarded to the inner button's `aria-expanded`.",
650
+ "value": { "type": "'true' | 'false'" }
651
+ },
652
+ {
653
+ "name": "aria-haspopup",
654
+ "description": "Popup type, forwarded to the inner button's `aria-haspopup`.",
655
+ "value": { "type": "string" }
656
+ },
528
657
  {
529
658
  "name": "auto-click",
530
659
  "value": { "type": "boolean", "default": "false" }
@@ -572,6 +701,10 @@
572
701
  {
573
702
  "name": "cancel",
574
703
  "description": "Slot for custom cancel button/content when autoClick is active."
704
+ },
705
+ {
706
+ "name": "menu",
707
+ "description": "A `<zn-menu>` of advanced options, opened by a long press, a right click, or ArrowDown on the button."
575
708
  }
576
709
  ],
577
710
  "events": [
@@ -591,14 +724,22 @@
591
724
  "js": {
592
725
  "properties": [
593
726
  { "name": "button", "type": "HTMLButtonElement" },
727
+ { "name": "menuDropdown", "type": "ZnDropdown" },
594
728
  { "name": "countdownContainer", "type": "HTMLElement[]" },
595
729
  {
596
730
  "name": "color",
597
- "type": "'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning' |\n 'transparent' | 'star' | (string & Record<never, never>)"
731
+ "description": "`ai` is reserved for actions that invoke or act on AI-generated content.",
732
+ "type": "'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning' | 'ai' |\n 'transparent' | 'star' | (string & Record<never, never>)"
598
733
  },
734
+ { "name": "size", "type": "'small' | 'medium' | 'large'" },
599
735
  { "name": "hoverColor", "type": "string" },
600
736
  { "name": "text", "type": "boolean" },
601
737
  { "name": "outline", "type": "boolean" },
738
+ {
739
+ "name": "solid",
740
+ "description": "Keeps the filled look where a container forces `text`, such as a page header's action menu.",
741
+ "type": "boolean"
742
+ },
602
743
  { "name": "disabled", "type": "boolean" },
603
744
  { "name": "grow", "type": "boolean" },
604
745
  { "name": "square", "type": "boolean" },
@@ -623,6 +764,16 @@
623
764
  "type": "boolean"
624
765
  },
625
766
  { "name": "panelBackground", "type": "boolean" },
767
+ {
768
+ "name": "longPressDelay",
769
+ "description": "How long, in milliseconds, the button must be held to open the `menu` slot.",
770
+ "type": "number"
771
+ },
772
+ {
773
+ "name": "menuPlacement",
774
+ "description": "Where the `menu` slot opens relative to the button.",
775
+ "type": "'top' | 'top-start' | 'top-end' | 'right' | 'right-start' |\n 'right-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end'"
776
+ },
626
777
  { "name": "dropdownCloser", "type": "boolean" },
627
778
  { "name": "notification", "type": "number" },
628
779
  { "name": "mutedNotifications", "type": "boolean" },
@@ -668,6 +819,16 @@
668
819
  "description": "Toggle state, forwarded to the inner button's `aria-pressed`.",
669
820
  "type": "'true' | 'false' | 'mixed'"
670
821
  },
822
+ {
823
+ "name": "expanded",
824
+ "description": "Popup state, forwarded to the inner button's `aria-expanded`.",
825
+ "type": "'true' | 'false'"
826
+ },
827
+ {
828
+ "name": "hasPopup",
829
+ "description": "Popup type, forwarded to the inner button's `aria-haspopup`.",
830
+ "type": "string"
831
+ },
671
832
  { "name": "autoClick", "type": "boolean" },
672
833
  { "name": "autoClickDelay", "type": "number" },
673
834
  { "name": "loadingText", "type": "string" },
@@ -768,7 +929,7 @@
768
929
  },
769
930
  {
770
931
  "name": "zn-button-menu",
771
- "description": "Automatically hides buttons in a menu when the screen is too small.\n\n---\n\n\n### **Slots:**\n - _default_ - The default slot.",
932
+ "description": "Automatically hides buttons in a menu when the screen is too small.\n\n---\n\n\n### **Slots:**\n - _default_ - The default slot.\n- **prefix** - Controls shown just before the inline buttons, such as a segmented toggle. Their width is kept free when working out which buttons fit.",
772
933
  "doc-url": "",
773
934
  "attributes": [
774
935
  { "name": "max-width", "value": { "type": "number" } },
@@ -780,12 +941,18 @@
780
941
  },
781
942
  {
782
943
  "name": "icon-size",
783
- "value": { "type": "number", "default": "20" }
944
+ "value": { "type": "number", "default": "16" }
784
945
  },
785
946
  { "name": "no-gap", "value": { "type": "boolean" } },
786
947
  { "name": "no-padding", "value": { "type": "boolean" } }
787
948
  ],
788
- "slots": [{ "name": "", "description": "The default slot." }],
949
+ "slots": [
950
+ { "name": "", "description": "The default slot." },
951
+ {
952
+ "name": "prefix",
953
+ "description": "Controls shown just before the inline buttons, such as a segmented toggle. Their width is kept free when working out which buttons fit."
954
+ }
955
+ ],
789
956
  "events": [],
790
957
  "js": {
791
958
  "properties": [
@@ -1045,7 +1212,7 @@
1045
1212
  },
1046
1213
  {
1047
1214
  "name": "zn-chart",
1048
- "description": "Chart component powered by Apache ECharts.\n\n---\n\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
1215
+ "description": "Chart component powered by Apache ECharts.\n\n---\n\n\n### **Events:**\n - **zn-chart-click** - Emitted when a data point, bar or slice is clicked.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
1049
1216
  "doc-url": "",
1050
1217
  "attributes": [
1051
1218
  {
@@ -1083,6 +1250,7 @@
1083
1250
  },
1084
1251
  {
1085
1252
  "name": "data-url",
1253
+ "description": "JSON series polled with `live`; otherwise fetched once, as a series array or `{categories, data}`.",
1086
1254
  "value": { "type": "string", "default": "''" }
1087
1255
  },
1088
1256
  {
@@ -1130,12 +1298,22 @@
1130
1298
  },
1131
1299
  { "name": "min-value", "value": { "type": "number | undefined" } },
1132
1300
  { "name": "max-value", "value": { "type": "number | undefined" } },
1301
+ {
1302
+ "name": "mark-latest",
1303
+ "description": "On line and area charts, marks each series' latest point and hides the rest.",
1304
+ "value": { "type": "boolean", "default": "false" }
1305
+ },
1133
1306
  {
1134
1307
  "name": "scale",
1135
1308
  "value": { "type": "boolean | number", "default": "false" }
1136
1309
  }
1137
1310
  ],
1138
- "events": [],
1311
+ "events": [
1312
+ {
1313
+ "name": "zn-chart-click",
1314
+ "description": "Emitted when a data point, bar or slice is clicked."
1315
+ }
1316
+ ],
1139
1317
  "js": {
1140
1318
  "properties": [
1141
1319
  { "name": "type", "type": "ChartType" },
@@ -1150,7 +1328,11 @@
1150
1328
  { "name": "datapointSize", "type": "number" },
1151
1329
  { "name": "stacked", "type": "boolean" },
1152
1330
  { "name": "live", "type": "boolean" },
1153
- { "name": "dataUrl", "type": "string" },
1331
+ {
1332
+ "name": "dataUrl",
1333
+ "description": "JSON series polled with `live`; otherwise fetched once, as a series array or `{categories, data}`.",
1334
+ "type": "string"
1335
+ },
1154
1336
  { "name": "streamUrl", "type": "string" },
1155
1337
  { "name": "liveRenewUrl", "type": "string" },
1156
1338
  { "name": "hideZero", "type": "boolean" },
@@ -1166,14 +1348,24 @@
1166
1348
  { "name": "showLabels", "type": "boolean | undefined" },
1167
1349
  { "name": "minValue", "type": "number | undefined" },
1168
1350
  { "name": "maxValue", "type": "number | undefined" },
1351
+ {
1352
+ "name": "markLatest",
1353
+ "description": "On line and area charts, marks each series' latest point and hides the rest.",
1354
+ "type": "boolean"
1355
+ },
1169
1356
  { "name": "scale", "type": "boolean | number" }
1170
1357
  ],
1171
- "events": []
1358
+ "events": [
1359
+ {
1360
+ "name": "zn-chart-click",
1361
+ "description": "Emitted when a data point, bar or slice is clicked."
1362
+ }
1363
+ ]
1172
1364
  }
1173
1365
  },
1174
1366
  {
1175
1367
  "name": "zn-chat-message",
1176
- "description": "A single message in a chat-style conversation: avatar, sender,\ntime, optional badge, and a message bubble with optional actions. Also renders\nsystem events (connections, transfers, etc.) as a centred card.\n\n---\n\n\n### **Slots:**\n - _default_ - The message content. Ignored when the `message` attribute is set.\n- **badge** - Rendered in the header after the sender and time (e.g. an INTERNAL NOTE chip).\n- **attachments** - Attachments displayed beneath the message content. Use `zn-chat-message-attachment`, which auto-assigns itself to this slot.\n- **edit-dialog-trigger** - Action rendered at the end of the bubble (e.g. a remove icon button).\n- **edit-dialog** - Pass-through for an associated dialog element.\n\n### **CSS Properties:**\n - **--message-background** - The bubble's background color. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **avatar** - The avatar column.\n- **body** - The header and bubble column.\n- **header** - The sender/time/badge row.\n- **bubble** - The message bubble.\n- **content** - The message content within the bubble.\n- **attachments** - The attachments row beneath the message content.\n- **system-card** - The card rendered for system action types.",
1368
+ "description": "A single message in a chat-style conversation: avatar, sender,\ntime, optional badge, and a message bubble with optional actions. Also renders\nsystem events (connections, transfers, etc.) as a centred card.\n\n---\n\n\n### **Slots:**\n - _default_ - The message content. Ignored when the `message` attribute is set.\n- **badge** - Rendered in the header after the sender and time (e.g. an INTERNAL NOTE chip).\n- **attachments** - Attachments displayed beneath the message content. Use `zn-chat-message-attachment`, which auto-assigns itself to this slot.\n- **footer** - Content beneath the bubble, such as reactions or a thread summary.\n- **edit-dialog-trigger** - Action rendered at the end of the bubble (e.g. a remove icon button).\n- **edit-dialog** - Pass-through for an associated dialog element.\n\n### **CSS Properties:**\n - **--message-background** - The bubble's background color. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **avatar** - The avatar column.\n- **body** - The header and bubble column.\n- **header** - The sender/time/badge row.\n- **bubble** - The message bubble.\n- **content** - The message content within the bubble.\n- **attachments** - The attachments row beneath the message content.\n- **footer** - The row beneath the bubble.\n- **system-card** - The card rendered for system action types.",
1177
1369
  "doc-url": "",
1178
1370
  "attributes": [
1179
1371
  {
@@ -1230,6 +1422,10 @@
1230
1422
  "name": "attachments",
1231
1423
  "description": "Attachments displayed beneath the message content. Use `zn-chat-message-attachment`, which auto-assigns itself to this slot."
1232
1424
  },
1425
+ {
1426
+ "name": "footer",
1427
+ "description": "Content beneath the bubble, such as reactions or a thread summary."
1428
+ },
1233
1429
  {
1234
1430
  "name": "edit-dialog-trigger",
1235
1431
  "description": "Action rendered at the end of the bubble (e.g. a remove icon button)."
@@ -1414,6 +1610,11 @@
1414
1610
  "description": "Squares off the corners of the container drawn by `contained`, which is rounded by default.",
1415
1611
  "value": { "type": "boolean", "default": "false" }
1416
1612
  },
1613
+ {
1614
+ "name": "centered",
1615
+ "description": "Centres the text of a contained checkbox that has no image or `card-title`.",
1616
+ "value": { "type": "boolean", "default": "false" }
1617
+ },
1417
1618
  {
1418
1619
  "name": "src",
1419
1620
  "description": "URL for the image shown in a contained checkbox.",
@@ -1434,7 +1635,7 @@
1434
1635
  },
1435
1636
  {
1436
1637
  "name": "control-position",
1437
- "description": "Places the checkbox indicator within a contained card. Use `none` to hide the indicator so the card itself\nshows the selected state. Requires `contained`.",
1638
+ "description": "Places the checkbox indicator within a contained card. A contained checkbox without an image or `card-title` hides it\nat `start`, as does `none`. Requires `contained`.",
1438
1639
  "value": {
1439
1640
  "type": "SelectionCardControlPosition",
1440
1641
  "default": "'start'"
@@ -1479,7 +1680,7 @@
1479
1680
  },
1480
1681
  {
1481
1682
  "name": "unchecked-icon",
1482
- "description": "The icon to show when the checkbox is unchecked.",
1683
+ "description": "The icon to show when the checkbox is unchecked. Defaults to a muted `checked-icon`.",
1483
1684
  "value": { "type": "string", "default": "''" }
1484
1685
  },
1485
1686
  {
@@ -1538,6 +1739,7 @@
1538
1739
  "js": {
1539
1740
  "properties": [
1540
1741
  { "name": "input", "type": "HTMLInputElement" },
1742
+ { "name": "control", "type": "HTMLElement" },
1541
1743
  { "name": "title", "type": "string" },
1542
1744
  {
1543
1745
  "name": "name",
@@ -1589,6 +1791,11 @@
1589
1791
  "description": "Squares off the corners of the container drawn by `contained`, which is rounded by default.",
1590
1792
  "type": "boolean"
1591
1793
  },
1794
+ {
1795
+ "name": "centered",
1796
+ "description": "Centres the text of a contained checkbox that has no image or `card-title`.",
1797
+ "type": "boolean"
1798
+ },
1592
1799
  {
1593
1800
  "name": "src",
1594
1801
  "description": "URL for the image shown in a contained checkbox.",
@@ -1606,7 +1813,7 @@
1606
1813
  },
1607
1814
  {
1608
1815
  "name": "controlPosition",
1609
- "description": "Places the checkbox indicator within a contained card. Use `none` to hide the indicator so the card itself\nshows the selected state. Requires `contained`.",
1816
+ "description": "Places the checkbox indicator within a contained card. A contained checkbox without an image or `card-title` hides it\nat `start`, as does `none`. Requires `contained`.",
1610
1817
  "type": "SelectionCardControlPosition"
1611
1818
  },
1612
1819
  {
@@ -1653,7 +1860,7 @@
1653
1860
  },
1654
1861
  {
1655
1862
  "name": "uncheckedIcon",
1656
- "description": "The icon to show when the checkbox is unchecked.",
1863
+ "description": "The icon to show when the checkbox is unchecked. Defaults to a muted `checked-icon`.",
1657
1864
  "type": "string"
1658
1865
  },
1659
1866
  {
@@ -1758,6 +1965,11 @@
1758
1965
  "description": "Squares off the corners of every contained checkbox in the group, which are rounded by default.",
1759
1966
  "value": { "type": "boolean", "default": "false" }
1760
1967
  },
1968
+ {
1969
+ "name": "centered",
1970
+ "description": "Centres the text of every contained checkbox in the group.",
1971
+ "value": { "type": "boolean", "default": "false" }
1972
+ },
1761
1973
  {
1762
1974
  "name": "wrap",
1763
1975
  "description": "Lays horizontal contained checkboxes out as a wrapping row instead of an equal-width grid, so each one sizes from\n`--zn-checkbox-group-column-width` (set it to `auto` to size from content) and wraps onto a new line when needed.",
@@ -1855,6 +2067,11 @@
1855
2067
  "description": "Squares off the corners of every contained checkbox in the group, which are rounded by default.",
1856
2068
  "type": "boolean"
1857
2069
  },
2070
+ {
2071
+ "name": "centered",
2072
+ "description": "Centres the text of every contained checkbox in the group.",
2073
+ "type": "boolean"
2074
+ },
1858
2075
  {
1859
2076
  "name": "wrap",
1860
2077
  "description": "Lays horizontal contained checkboxes out as a wrapping row instead of an equal-width grid, so each one sizes from\n`--zn-checkbox-group-column-width` (set it to `auto` to size from content) and wraps onto a new line when needed.",
@@ -1911,11 +2128,22 @@
1911
2128
  },
1912
2129
  {
1913
2130
  "name": "type",
2131
+ "description": "`ai` marks AI-generated content only.",
1914
2132
  "value": {
1915
- "type": "'info' | 'success' | 'warning' | 'error' | 'primary' |\n 'transparent' | 'custom' | 'neutral'",
2133
+ "type": "'info' | 'success' | 'warning' | 'error' | 'primary' | 'ai' |\n 'transparent' | 'custom' | 'neutral'",
1916
2134
  "default": "'neutral'"
1917
2135
  }
1918
2136
  },
2137
+ {
2138
+ "name": "solid",
2139
+ "description": "Fills the chip with its type colour.",
2140
+ "value": { "type": "boolean", "default": "false" }
2141
+ },
2142
+ {
2143
+ "name": "dot",
2144
+ "description": "Leads the label with a dot in the type colour.",
2145
+ "value": { "type": "boolean", "default": "false" }
2146
+ },
1919
2147
  {
1920
2148
  "name": "flush",
1921
2149
  "value": { "type": "boolean", "default": "false" }
@@ -1943,7 +2171,18 @@
1943
2171
  { "name": "iconSize", "type": "number" },
1944
2172
  {
1945
2173
  "name": "type",
1946
- "type": "'info' | 'success' | 'warning' | 'error' | 'primary' |\n 'transparent' | 'custom' | 'neutral'"
2174
+ "description": "`ai` marks AI-generated content only.",
2175
+ "type": "'info' | 'success' | 'warning' | 'error' | 'primary' | 'ai' |\n 'transparent' | 'custom' | 'neutral'"
2176
+ },
2177
+ {
2178
+ "name": "solid",
2179
+ "description": "Fills the chip with its type colour.",
2180
+ "type": "boolean"
2181
+ },
2182
+ {
2183
+ "name": "dot",
2184
+ "description": "Leads the label with a dot in the type colour.",
2185
+ "type": "boolean"
1947
2186
  },
1948
2187
  { "name": "flush", "type": "boolean" },
1949
2188
  { "name": "flushX", "type": "boolean" },
@@ -2018,11 +2257,61 @@
2018
2257
  { "name": "numberOfItems", "type": "number" },
2019
2258
  { "name": "handleCaptionToggle" },
2020
2259
  { "name": "handleCollapse" },
2260
+ { "name": "handleHeaderKeyDown" },
2021
2261
  { "name": "recalculateNumberOfItems" }
2022
2262
  ],
2023
2263
  "events": []
2024
2264
  }
2025
2265
  },
2266
+ {
2267
+ "name": "zn-color-picker",
2268
+ "description": "A colour panel: a saturation/brightness area, a hue slider and the colour's HEX, RGB, HSL and OKLCH values.\n\n---\n\n\n### **Events:**\n - **zn-input** - Emitted when the colour or the format being worked in changes.\n\n### **Methods:**\n - **focus(options: _FocusOptions_)** - Moves focus to the colour area.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
2269
+ "doc-url": "",
2270
+ "attributes": [
2271
+ {
2272
+ "name": "value",
2273
+ "description": "The colour, in any CSS colour syntax. Reads back as `#RRGGBB`.",
2274
+ "value": { "type": "string", "default": "'#000000'" }
2275
+ },
2276
+ {
2277
+ "name": "format",
2278
+ "description": "The format being worked in. Focusing or editing a row switches to that row's format.",
2279
+ "value": { "type": "ColorFormat", "default": "'hex'" }
2280
+ },
2281
+ {
2282
+ "name": "label",
2283
+ "value": { "type": "string", "default": "'Colour'" }
2284
+ }
2285
+ ],
2286
+ "events": [
2287
+ {
2288
+ "name": "zn-input",
2289
+ "description": "Emitted when the colour or the format being worked in changes."
2290
+ }
2291
+ ],
2292
+ "js": {
2293
+ "properties": [
2294
+ { "name": "area", "type": "HTMLElement" },
2295
+ {
2296
+ "name": "value",
2297
+ "description": "The colour, in any CSS colour syntax. Reads back as `#RRGGBB`.",
2298
+ "type": "string"
2299
+ },
2300
+ {
2301
+ "name": "format",
2302
+ "description": "The format being worked in. Focusing or editing a row switches to that row's format.",
2303
+ "type": "ColorFormat"
2304
+ },
2305
+ { "name": "label", "type": "string" }
2306
+ ],
2307
+ "events": [
2308
+ {
2309
+ "name": "zn-input",
2310
+ "description": "Emitted when the colour or the format being worked in changes."
2311
+ }
2312
+ ]
2313
+ }
2314
+ },
2026
2315
  {
2027
2316
  "name": "zn-color-select",
2028
2317
  "description": "A simple color picker. The dropdown lists color swatches with names; the closed control shows only the selected color's swatch.\n\n---\n\n\n### **Events:**\n - **zn-input** - Emitted when the selected color changes.\n- **zn-clear** - Emitted when the clear button is activated.\n\n### **CSS Parts:**\n - **swatch** - The color swatch shown in the closed control.\n- **combobox** - The container that wraps the swatch and expand button (forwarded from zn-select).\n- **form-control-help-text** - The help text's wrapper (forwarded from zn-select).\n- **form-control-input** - The select's wrapper (forwarded from zn-select).",
@@ -2142,6 +2431,11 @@
2142
2431
  "value": { "type": "string", "default": "''" }
2143
2432
  },
2144
2433
  { "name": "mc", "value": { "type": "number", "default": "0" } },
2434
+ {
2435
+ "name": "basis",
2436
+ "description": "Minimum width in px of a one-unit column before the row wraps; a column of layout `n` asks for n times this. Defaults to 250.",
2437
+ "value": { "type": "number" }
2438
+ },
2145
2439
  {
2146
2440
  "name": "no-gap",
2147
2441
  "value": { "type": "boolean", "default": "false" }
@@ -2174,6 +2468,11 @@
2174
2468
  "type": "string"
2175
2469
  },
2176
2470
  { "name": "maxColumns", "type": "number" },
2471
+ {
2472
+ "name": "basis",
2473
+ "description": "Minimum width in px of a one-unit column before the row wraps; a column of layout `n` asks for n times this. Defaults to 250.",
2474
+ "type": "number"
2475
+ },
2177
2476
  { "name": "noGap", "type": "boolean" },
2178
2477
  { "name": "border", "type": "boolean" },
2179
2478
  { "name": "pad", "type": "boolean" },
@@ -2236,15 +2535,15 @@
2236
2535
  "value": { "type": "string", "default": "''" }
2237
2536
  },
2238
2537
  {
2239
- "name": "confirmText",
2538
+ "name": "confirm-text",
2240
2539
  "value": { "type": "string", "default": "\"Confirm\"" }
2241
2540
  },
2242
2541
  {
2243
- "name": "cancelText",
2542
+ "name": "cancel-text",
2244
2543
  "value": { "type": "string", "default": "\"Cancel\"" }
2245
2544
  },
2246
2545
  {
2247
- "name": "closeText",
2546
+ "name": "close-text",
2248
2547
  "value": { "type": "string", "default": "\"Close\"" }
2249
2548
  },
2250
2549
  {
@@ -2403,7 +2702,7 @@
2403
2702
  "value": { "type": "string", "default": "''" }
2404
2703
  },
2405
2704
  { "name": "src", "value": { "type": "string", "default": "''" } },
2406
- { "name": "size", "value": { "type": "number", "default": "24" } },
2705
+ { "name": "size", "value": { "type": "number", "default": "16" } },
2407
2706
  {
2408
2707
  "name": "from",
2409
2708
  "description": "An id that references an element in the same document from which data will be copied. If both this and `value` are\npresent, this value will take precedence. By default, the target element's `textContent` will be copied. To copy an\nattribute, append the attribute name wrapped in square brackets, e.g. `from=\"el[value]\"`. To copy a property,\nappend a dot and the property name, e.g. `from=\"el.value\"`.",
@@ -2786,18 +3085,52 @@
2786
3085
  "name": "empty-state-icon",
2787
3086
  "value": { "type": "string", "default": "\"data_alert\"" }
2788
3087
  },
2789
- { "name": "filters", "value": { "type": "[]", "default": "[]" } },
2790
3088
  {
2791
- "name": "method",
2792
- "value": { "type": "'GET' | 'POST'", "default": "'POST'" }
3089
+ "name": "total-label",
3090
+ "description": "Unit for the row total shown with the caption: \"publishers\" reads \"16 publishers\".",
3091
+ "value": { "type": "string", "default": "''" }
2793
3092
  },
2794
3093
  {
2795
- "name": "no-initial-load",
2796
- "value": { "type": "boolean", "default": "false" }
3094
+ "name": "total-label-singular",
3095
+ "description": "Unit used when the total is exactly one: \"publisher\" reads \"1 publisher\". Falls back to `total-label`.",
3096
+ "value": { "type": "string", "default": "''" }
2797
3097
  },
2798
3098
  {
2799
- "name": "sharable",
2800
- "description": "When set, the table's non-default state (search, filter, sort, page, per-page and field values)\nis mirrored to the URL query string and restored from it on load, so the view is shareable.",
3099
+ "name": "tabs",
3100
+ "description": "Tabs rendered inside the table. The selected tab's value is sent as `tab-param` with every request.",
3101
+ "value": { "type": "TableTab[]", "default": "[]" }
3102
+ },
3103
+ {
3104
+ "name": "tab-param",
3105
+ "value": { "type": "string", "default": "'tab'" }
3106
+ },
3107
+ {
3108
+ "name": "pill-tabs",
3109
+ "description": "Draws the tabs as a segmented control: a grey track with a pill that slides to the selected tab.",
3110
+ "value": { "type": "boolean", "default": "false" }
3111
+ },
3112
+ {
3113
+ "name": "active-tab",
3114
+ "description": "The selected tab's value; the first tab when empty.",
3115
+ "value": { "type": "string", "default": "''" }
3116
+ },
3117
+ {
3118
+ "name": "filter-fields",
3119
+ "description": "Fields for the funnel's filter builder. When set, the table renders its own zn-data-table-filter in the\nheader, in place of the `filter` slot, and the applied rules show as chips under the tabs. Rules are sent\nas `filter`.",
3120
+ "value": { "type": "FilterField[]", "default": "[]" }
3121
+ },
3122
+ { "name": "filters", "value": { "type": "[]", "default": "[]" } },
3123
+ {
3124
+ "name": "method",
3125
+ "value": { "type": "'GET' | 'POST'", "default": "'POST'" }
3126
+ },
3127
+ {
3128
+ "name": "no-initial-load",
3129
+ "value": { "type": "boolean", "default": "false" }
3130
+ },
3131
+ {
3132
+ "name": "sharable",
3133
+ "description": "When set, the table's non-default state (search, filter, sort, page, per-page and field values)\nis mirrored to the URL query string and restored from it on load, so the view is shareable.",
2801
3134
  "value": { "type": "boolean", "default": "false" }
2802
3135
  },
2803
3136
  {
@@ -2893,6 +3226,37 @@
2893
3226
  { "name": "caption", "type": "string" },
2894
3227
  { "name": "emptyStateCaption", "type": "string" },
2895
3228
  { "name": "emptyStateIcon", "type": "string" },
3229
+ {
3230
+ "name": "totalLabel",
3231
+ "description": "Unit for the row total shown with the caption: \"publishers\" reads \"16 publishers\".",
3232
+ "type": "string"
3233
+ },
3234
+ {
3235
+ "name": "totalLabelSingular",
3236
+ "description": "Unit used when the total is exactly one: \"publisher\" reads \"1 publisher\". Falls back to `total-label`.",
3237
+ "type": "string"
3238
+ },
3239
+ {
3240
+ "name": "tabs",
3241
+ "description": "Tabs rendered inside the table. The selected tab's value is sent as `tab-param` with every request.",
3242
+ "type": "TableTab[]"
3243
+ },
3244
+ { "name": "tabParam", "type": "string" },
3245
+ {
3246
+ "name": "pillTabs",
3247
+ "description": "Draws the tabs as a segmented control: a grey track with a pill that slides to the selected tab.",
3248
+ "type": "boolean"
3249
+ },
3250
+ {
3251
+ "name": "tab",
3252
+ "description": "The selected tab's value; the first tab when empty.",
3253
+ "type": "string"
3254
+ },
3255
+ {
3256
+ "name": "filterFields",
3257
+ "description": "Fields for the funnel's filter builder. When set, the table renders its own zn-data-table-filter in the\nheader, in place of the `filter` slot, and the applied rules show as chips under the tabs. Rules are sent\nas `filter`.",
3258
+ "type": "FilterField[]"
3259
+ },
2896
3260
  { "name": "filters", "type": "[]" },
2897
3261
  { "name": "method", "type": "'GET' | 'POST'" },
2898
3262
  { "name": "noInitialLoad", "type": "boolean" },
@@ -2910,7 +3274,6 @@
2910
3274
  { "name": "groups", "type": "string" },
2911
3275
  { "name": "itemsPerPage", "type": "number" },
2912
3276
  { "name": "requestParams", "type": "Record<string, any>" },
2913
- { "name": "filterClearListener" },
2914
3277
  { "name": "filterChangeListener" },
2915
3278
  { "name": "searchChangeListener" }
2916
3279
  ],
@@ -2919,12 +3282,12 @@
2919
3282
  },
2920
3283
  {
2921
3284
  "name": "zn-data-table-filter",
2922
- "description": "An inline filter bar for data tables. Each active filter is a pill whose dropdown sets its value.\n\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.",
3285
+ "description": "The filter for data tables: a funnel that opens a field / operator / value builder, and chips for the\nrules that apply.\n\n---\n\n\n### **Events:**\n - **zn-filter-change** - Emitted when the applied rules change. Read the encoded query off `value`.\n- **zn-clear** - Emitted when `clear()` removes every rule.\n\n### **Methods:**\n - **show()** - Opens the filter builder.\n- **hide()** - Closes the filter builder.\n- **clear()** - Removes every rule.",
2923
3286
  "doc-url": "",
2924
3287
  "attributes": [
2925
3288
  {
2926
3289
  "name": "filters",
2927
- "value": { "type": "QueryBuilderData", "default": "[]" }
3290
+ "value": { "type": "FilterField[]", "default": "[]" }
2928
3291
  },
2929
3292
  {
2930
3293
  "name": "name",
@@ -2933,43 +3296,56 @@
2933
3296
  { "name": "value", "value": { "type": "string", "default": "''" } },
2934
3297
  {
2935
3298
  "name": "default-filters",
2936
- "description": "Filter keys to show a pill for before the user adds any.",
3299
+ "description": "Fields to offer an empty rule for when the builder opens with nothing applied.",
2937
3300
  "value": { "type": "string", "default": "''" }
2938
3301
  }
2939
3302
  ],
2940
3303
  "events": [
2941
3304
  {
2942
3305
  "name": "zn-filter-change",
2943
- "description": "Emitted when the active filters change. Read the encoded query off `value`."
3306
+ "description": "Emitted when the applied rules change. Read the encoded query off `value`."
3307
+ },
3308
+ {
3309
+ "name": "zn-clear",
3310
+ "description": "Emitted when `clear()` removes every rule."
2944
3311
  }
2945
3312
  ],
2946
3313
  "js": {
2947
3314
  "properties": [
2948
- { "name": "filters", "type": "QueryBuilderData" },
3315
+ { "name": "filters", "type": "FilterField[]" },
2949
3316
  { "name": "name", "type": "string" },
2950
3317
  { "name": "value", "type": "string" },
2951
3318
  {
2952
3319
  "name": "defaultFilters",
2953
- "description": "Filter keys to show a pill for before the user adds any.",
3320
+ "description": "Fields to offer an empty rule for when the builder opens with nothing applied.",
2954
3321
  "type": "string"
2955
3322
  },
2956
3323
  {
2957
3324
  "name": "suggestions",
2958
- "description": "Typeahead values per filter key. `zn-data-table` fills this from the rows it has loaded.",
3325
+ "description": "Typeahead values per field. `zn-data-table` fills this from the rows it has loaded.",
2959
3326
  "type": "Record<string, string[]>"
2960
3327
  },
3328
+ {
3329
+ "name": "source",
3330
+ "description": "Another filter to show the chips of. This element then renders only that filter's chips, and that filter stops\nrendering its own, so a table can keep the funnel in its header and the chips under it.",
3331
+ "type": "ZnDataTableFilter | null"
3332
+ },
2961
3333
  { "name": "validationMessage", "type": "string" },
2962
3334
  { "name": "validity", "type": "ValidityState" },
2963
3335
  {
2964
3336
  "name": "activeCount",
2965
- "description": "Number of filters with a value set.",
3337
+ "description": "Number of rules that apply.",
2966
3338
  "type": "number"
2967
3339
  }
2968
3340
  ],
2969
3341
  "events": [
2970
3342
  {
2971
3343
  "name": "zn-filter-change",
2972
- "description": "Emitted when the active filters change. Read the encoded query off `value`."
3344
+ "description": "Emitted when the applied rules change. Read the encoded query off `value`."
3345
+ },
3346
+ {
3347
+ "name": "zn-clear",
3348
+ "description": "Emitted when `clear()` removes every rule."
2973
3349
  }
2974
3350
  ]
2975
3351
  }
@@ -3089,6 +3465,114 @@
3089
3465
  ]
3090
3466
  }
3091
3467
  },
3468
+ {
3469
+ "name": "zn-date-range",
3470
+ "description": "A button showing a date range that opens a two-month calendar with quick ranges.\n\n---\n\n\n### **Events:**\n - **zn-change** - Emitted when a range is applied, with `{from, to}` as its detail.\n\n### **Methods:**\n - **show()** - Opens the picker.\n- **hide()** - Closes the picker without applying.\n\n### **CSS Parts:**\n - **trigger** - The button that opens the picker.\n- **popover** - The picker popover.",
3471
+ "doc-url": "",
3472
+ "attributes": [
3473
+ {
3474
+ "name": "from",
3475
+ "description": "The first day of the range, `YYYY-MM-DD`. Defaults to today.",
3476
+ "value": { "type": "string", "default": "''" }
3477
+ },
3478
+ {
3479
+ "name": "to",
3480
+ "description": "The last day of the range, `YYYY-MM-DD`. Defaults to today.",
3481
+ "value": { "type": "string", "default": "''" }
3482
+ },
3483
+ {
3484
+ "name": "min",
3485
+ "description": "The earliest day that can be picked.",
3486
+ "value": { "type": "string", "default": "''" }
3487
+ },
3488
+ {
3489
+ "name": "max",
3490
+ "description": "The latest day that can be picked.",
3491
+ "value": { "type": "string", "default": "''" }
3492
+ },
3493
+ {
3494
+ "name": "presets",
3495
+ "description": "Quick ranges as a JSON array of `{label, from, to}`, replacing the default ones.",
3496
+ "value": { "type": "DatePreset[] | undefined" }
3497
+ },
3498
+ {
3499
+ "name": "note",
3500
+ "description": "A short line shown under the calendar, such as how the range is used.",
3501
+ "value": { "type": "string", "default": "''" }
3502
+ },
3503
+ {
3504
+ "name": "name",
3505
+ "description": "Submits `name[from]` and `name[to]` with the form.",
3506
+ "value": { "type": "string", "default": "''" }
3507
+ },
3508
+ {
3509
+ "name": "size",
3510
+ "description": "The trigger button's size.",
3511
+ "value": {
3512
+ "type": "'small' | 'medium' | 'large'",
3513
+ "default": "'small'"
3514
+ }
3515
+ }
3516
+ ],
3517
+ "events": [
3518
+ {
3519
+ "name": "zn-change",
3520
+ "type": "CustomEvent",
3521
+ "description": "Emitted when a range is applied, with `{from, to}` as its detail."
3522
+ }
3523
+ ],
3524
+ "js": {
3525
+ "properties": [
3526
+ {
3527
+ "name": "from",
3528
+ "description": "The first day of the range, `YYYY-MM-DD`. Defaults to today.",
3529
+ "type": "string"
3530
+ },
3531
+ {
3532
+ "name": "to",
3533
+ "description": "The last day of the range, `YYYY-MM-DD`. Defaults to today.",
3534
+ "type": "string"
3535
+ },
3536
+ {
3537
+ "name": "min",
3538
+ "description": "The earliest day that can be picked.",
3539
+ "type": "string"
3540
+ },
3541
+ {
3542
+ "name": "max",
3543
+ "description": "The latest day that can be picked.",
3544
+ "type": "string"
3545
+ },
3546
+ {
3547
+ "name": "presets",
3548
+ "description": "Quick ranges as a JSON array of `{label, from, to}`, replacing the default ones.",
3549
+ "type": "DatePreset[] | undefined"
3550
+ },
3551
+ {
3552
+ "name": "note",
3553
+ "description": "A short line shown under the calendar, such as how the range is used.",
3554
+ "type": "string"
3555
+ },
3556
+ {
3557
+ "name": "name",
3558
+ "description": "Submits `name[from]` and `name[to]` with the form.",
3559
+ "type": "string"
3560
+ },
3561
+ {
3562
+ "name": "size",
3563
+ "description": "The trigger button's size.",
3564
+ "type": "'small' | 'medium' | 'large'"
3565
+ }
3566
+ ],
3567
+ "events": [
3568
+ {
3569
+ "name": "zn-change",
3570
+ "type": "CustomEvent",
3571
+ "description": "Emitted when a range is applied, with `{from, to}` as its detail."
3572
+ }
3573
+ ]
3574
+ }
3575
+ },
3092
3576
  {
3093
3577
  "name": "zn-datepicker",
3094
3578
  "description": "A date picker component with calendar popup and input validation.\n\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.",
@@ -3170,6 +3654,11 @@
3170
3654
  "description": "Makes the input a required field.",
3171
3655
  "value": { "type": "boolean", "default": "false" }
3172
3656
  },
3657
+ {
3658
+ "name": "label-note",
3659
+ "description": "Short text shown next to the label, styled like the help text, e.g. `optional`.",
3660
+ "value": { "type": "string", "default": "''" }
3661
+ },
3173
3662
  {
3174
3663
  "name": "clearable",
3175
3664
  "description": "Adds a clear button to the calendar for removing a selected date. *",
@@ -3343,6 +3832,11 @@
3343
3832
  "description": "Makes the input a required field.",
3344
3833
  "type": "boolean"
3345
3834
  },
3835
+ {
3836
+ "name": "labelNote",
3837
+ "description": "Short text shown next to the label, styled like the help text, e.g. `optional`.",
3838
+ "type": "string"
3839
+ },
3346
3840
  {
3347
3841
  "name": "clearable",
3348
3842
  "description": "Adds a clear button to the calendar for removing a selected date. *",
@@ -3528,7 +4022,7 @@
3528
4022
  },
3529
4023
  {
3530
4024
  "name": "zn-dialog",
3531
- "description": "Short summary of the component's intended use.\n\n---\n\n\n### **Events:**\n - **zn-show** - Emitted when the dialog is opens.\n- **zn-close** - Emitted when the dialog is closed.\n- **zn-request-close** - Emitted when the user attempts to close the dialog by clicking the close button, clicking the overlay, or pressing escape. Calling `event.preventDefault()` will keep the dialog open. Avoid using this unless closing the dialog will result in destructive behavior such as data loss.\n\n### **Methods:**\n - **show()** - Shows the dialog.\n- **hide()** - Hides the dialog.\n\n### **Slots:**\n - _default_ - The default slot.\n- **label** - The dialog's label. Alternatively you can use the `label` attribute.\n- **header-icon** - Optional icon to add to the left of the dialog's label (title). A color will be applied to the icon depending on the dialog variant.\n- **announcement-intro** - Optional Intro text to display below the icon, when using the variant `announcement`.\n- **header-actions** - Optional actions to add to the header. Works best with `<zn-button>` elements.\n- **footer** - The dialog's footer. This is typically used for buttons representing various options.\n- **footer-text** - Optional text to include below the footer buttons, when using the variant `announcement`.\n\n### **CSS Properties:**\n - **--width** - The preferred width of the dialog. Note the dialog will shrink to accommodate smaller screens. _(default: undefined)_\n- **--header-spacing** - The amount of padding to use for the header. _(default: undefined)_\n- **--body-spacing** - The amount of padding to use for the body. _(default: undefined)_\n- **--footer-spacing** - The amount of padding to use for the footer. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **header** - The dialog's header. This element wraps the title and header actions.\n- **header-actions** - Optional actions to add to the header. Works best with `<zn-button>` elements.\n- **title** - The dialog's title.\n- **close-button** - The dialog's close button.\n- **close-button__base** - The close buttons exported `base` part.\n- **body** - The dialog's body.\n- **footer** - The dialog's footer.",
4025
+ "description": "A modal that appears above the page for a decision that blocks the flow.\n\n---\n\n\n### **Events:**\n - **zn-show** - Emitted when the dialog opens.\n- **zn-close** - Emitted when the dialog is closed.\n- **zn-request-close** - Emitted when the user attempts to close the dialog by clicking the close button, clicking the overlay, or pressing escape. Calling `event.preventDefault()` will keep the dialog open. Avoid using this unless closing the dialog will result in destructive behavior such as data loss.\n\n### **Methods:**\n - **show()** - Shows the dialog.\n- **hide()** - Hides the dialog.\n\n### **Slots:**\n - _default_ - The default slot.\n- **label** - The dialog's label. Alternatively you can use the `label` attribute.\n- **header-icon** - Optional icon to add to the left of the dialog's label (title). A color will be applied to the icon depending on the dialog variant.\n- **announcement-intro** - Optional intro text to display below the icon, when using the variant `announcement`.\n- **header-actions** - Optional actions to add to the header. Works best with `<zn-button>` elements.\n- **footer** - The dialog's footer. This is typically used for buttons representing various options.\n- **footer-text** - Optional text to include below the footer buttons, when using the variant `announcement`.\n\n### **CSS Properties:**\n - **--width** - The preferred width of a `size=\"custom\"` dialog. The dialog shrinks to fit smaller screens. _(default: undefined)_\n- **--header-spacing** - The amount of padding to use for the header. _(default: undefined)_\n- **--body-spacing** - The amount of padding to use for the body. _(default: undefined)_\n- **--footer-spacing** - The amount of padding to use for the footer. _(default: undefined)_\n- **--zn-dialog-width-small** - Theme token: the width of `size=\"small\"`. _(default: undefined)_\n- **--zn-dialog-width-medium** - Theme token: the width of `size=\"medium\"`. _(default: undefined)_\n- **--zn-dialog-width-large** - Theme token: the width of `size=\"large\"`. _(default: undefined)_\n- **--zn-dialog-border-radius** - Theme token: the dialog's corner radius. _(default: undefined)_\n- **--zn-dialog-backdrop** - Theme token: the backdrop behind the dialog. _(default: undefined)_\n- **--zn-dialog-body-color** - Theme token: the body text colour. _(default: undefined)_\n- **--zn-dialog-icon-background** - Theme token: the fill behind a default or warning header icon. _(default: undefined)_\n- **--zn-dialog-close-color** - Theme token: the close button's icon colour. _(default: undefined)_\n- **--zn-dialog-close-icon-size** - Theme token: the close button's icon size, read when the dialog opens. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **header** - The dialog's header. This element wraps the title and header actions.\n- **header-actions** - Optional actions to add to the header. Works best with `<zn-button>` elements.\n- **title** - The dialog's title.\n- **close-button** - The dialog's close button.\n- **close-button__base** - The close button's exported `base` part.\n- **body** - The dialog's body.\n- **footer** - The dialog's footer.",
3532
4026
  "doc-url": "",
3533
4027
  "attributes": [
3534
4028
  {
@@ -3584,7 +4078,7 @@
3584
4078
  },
3585
4079
  {
3586
4080
  "name": "announcement-intro",
3587
- "description": "Optional Intro text to display below the icon, when using the variant `announcement`."
4081
+ "description": "Optional intro text to display below the icon, when using the variant `announcement`."
3588
4082
  },
3589
4083
  {
3590
4084
  "name": "header-actions",
@@ -3602,7 +4096,7 @@
3602
4096
  "events": [
3603
4097
  {
3604
4098
  "name": "zn-show",
3605
- "description": "Emitted when the dialog is opens."
4099
+ "description": "Emitted when the dialog opens."
3606
4100
  },
3607
4101
  {
3608
4102
  "name": "zn-close",
@@ -3653,7 +4147,7 @@
3653
4147
  "events": [
3654
4148
  {
3655
4149
  "name": "zn-show",
3656
- "description": "Emitted when the dialog is opens."
4150
+ "description": "Emitted when the dialog opens."
3657
4151
  },
3658
4152
  {
3659
4153
  "name": "zn-close",
@@ -3667,6 +4161,143 @@
3667
4161
  ]
3668
4162
  }
3669
4163
  },
4164
+ {
4165
+ "name": "zn-diff",
4166
+ "description": "A side-by-side comparison of two versions of something, one column each, built from `zn-diff-row`s.\n\n---\n\n\n### **Slots:**\n - _default_ - The `zn-diff-row`s.\n- **before** - Inline content after the left heading, such as a status badge.\n- **after** - Inline content after the right heading, such as a status badge.\n\n### **CSS Properties:**\n - **--zn-diff-head-background** - The heading row's background. _(default: undefined)_\n- **--zn-diff-sticky-top** - How far from the top of its scroll container the heading row sticks. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The table.\n- **head** - The sticky row of column headings.",
4167
+ "doc-url": "",
4168
+ "attributes": [
4169
+ {
4170
+ "name": "before-caption",
4171
+ "description": "The left column's heading, such as the older version.",
4172
+ "value": { "type": "string", "default": "''" }
4173
+ },
4174
+ {
4175
+ "name": "before-description",
4176
+ "description": "A line under the left heading.",
4177
+ "value": { "type": "string", "default": "''" }
4178
+ },
4179
+ {
4180
+ "name": "after-caption",
4181
+ "description": "The right column's heading, such as the newer version.",
4182
+ "value": { "type": "string", "default": "''" }
4183
+ },
4184
+ {
4185
+ "name": "after-description",
4186
+ "description": "A line under the right heading.",
4187
+ "value": { "type": "string", "default": "''" }
4188
+ }
4189
+ ],
4190
+ "slots": [
4191
+ { "name": "", "description": "The `zn-diff-row`s." },
4192
+ {
4193
+ "name": "before",
4194
+ "description": "Inline content after the left heading, such as a status badge."
4195
+ },
4196
+ {
4197
+ "name": "after",
4198
+ "description": "Inline content after the right heading, such as a status badge."
4199
+ }
4200
+ ],
4201
+ "events": [],
4202
+ "js": {
4203
+ "properties": [
4204
+ {
4205
+ "name": "beforeCaption",
4206
+ "description": "The left column's heading, such as the older version.",
4207
+ "type": "string"
4208
+ },
4209
+ {
4210
+ "name": "beforeDescription",
4211
+ "description": "A line under the left heading.",
4212
+ "type": "string"
4213
+ },
4214
+ {
4215
+ "name": "afterCaption",
4216
+ "description": "The right column's heading, such as the newer version.",
4217
+ "type": "string"
4218
+ },
4219
+ {
4220
+ "name": "afterDescription",
4221
+ "description": "A line under the right heading.",
4222
+ "type": "string"
4223
+ }
4224
+ ],
4225
+ "events": []
4226
+ }
4227
+ },
4228
+ {
4229
+ "name": "zn-diff-row",
4230
+ "description": "One aligned row of a `zn-diff`: the same item in both versions, tinted by how it changed.\n\n---\n\n\n### **Slots:**\n - **before** - The item's details in the older version.\n- **after** - The item's details in the newer version.\n\n### **CSS Properties:**\n - **--zn-diff-row-border** - The line below the row. _(default: undefined)_\n\n### **CSS Parts:**\n - **row** - The row.\n- **before** - The left cell.\n- **after** - The right cell.",
4231
+ "doc-url": "",
4232
+ "attributes": [
4233
+ {
4234
+ "name": "caption",
4235
+ "description": "The item's name, shown in both columns.",
4236
+ "value": { "type": "string", "default": "''" }
4237
+ },
4238
+ {
4239
+ "name": "change",
4240
+ "description": "How the item changed: `changed`, `added` or `removed`. Unchanged when empty.",
4241
+ "value": { "type": "string", "default": "''" }
4242
+ },
4243
+ {
4244
+ "name": "heading",
4245
+ "description": "When true, the row is a heading spanning both columns, such as a section name.",
4246
+ "value": { "type": "boolean", "default": "false" }
4247
+ },
4248
+ {
4249
+ "name": "before-placeholder",
4250
+ "description": "Shown in the left column when the item was added.",
4251
+ "value": { "type": "string", "default": "'Not in this version'" }
4252
+ },
4253
+ {
4254
+ "name": "after-placeholder",
4255
+ "description": "Shown in the right column when the item was removed.",
4256
+ "value": { "type": "string", "default": "'Not in this version'" }
4257
+ }
4258
+ ],
4259
+ "slots": [
4260
+ {
4261
+ "name": "before",
4262
+ "description": "The item's details in the older version."
4263
+ },
4264
+ {
4265
+ "name": "after",
4266
+ "description": "The item's details in the newer version."
4267
+ }
4268
+ ],
4269
+ "events": [],
4270
+ "js": {
4271
+ "properties": [
4272
+ {
4273
+ "name": "caption",
4274
+ "description": "The item's name, shown in both columns.",
4275
+ "type": "string"
4276
+ },
4277
+ {
4278
+ "name": "change",
4279
+ "description": "How the item changed: `changed`, `added` or `removed`. Unchanged when empty.",
4280
+ "type": "string"
4281
+ },
4282
+ {
4283
+ "name": "heading",
4284
+ "description": "When true, the row is a heading spanning both columns, such as a section name.",
4285
+ "type": "boolean"
4286
+ },
4287
+ {
4288
+ "name": "beforePlaceholder",
4289
+ "description": "Shown in the left column when the item was added.",
4290
+ "type": "string"
4291
+ },
4292
+ {
4293
+ "name": "afterPlaceholder",
4294
+ "description": "Shown in the right column when the item was removed.",
4295
+ "type": "string"
4296
+ }
4297
+ ],
4298
+ "events": []
4299
+ }
4300
+ },
3670
4301
  {
3671
4302
  "name": "zn-dropdown",
3672
4303
  "description": "Short summary of the component's intended use.\n\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Methods:**\n - **show()** - Opens the dropdown\n- **hide()** - Closes the dropdown\n- **reposition()** - Instructs the dropdown to reposition itself\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.",
@@ -3698,7 +4329,7 @@
3698
4329
  {
3699
4330
  "name": "distance",
3700
4331
  "description": "The distance in pixels from which to offset the panel away from the trigger",
3701
- "value": { "type": "number", "default": "0" }
4332
+ "value": { "type": "number", "default": "4" }
3702
4333
  },
3703
4334
  {
3704
4335
  "name": "skidding",
@@ -3783,7 +4414,9 @@
3783
4414
  },
3784
4415
  { "name": "uri", "type": "string" },
3785
4416
  { "name": "fetchedContent", "type": "string" },
3786
- { "name": "handlePanelSelect", "description": "Events" }
4417
+ { "name": "handlePanelSelect", "description": "Events" },
4418
+ { "name": "handleKeyDown" },
4419
+ { "name": "handleDocumentKeyDown" }
3787
4420
  ],
3788
4421
  "events": [
3789
4422
  {
@@ -3795,12 +4428,49 @@
3795
4428
  },
3796
4429
  {
3797
4430
  "name": "zn-editor",
3798
- "description": "Short summary of the component's intended use.\n\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.",
4431
+ "description": "Short summary of the component's intended use.\n\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- **help-text** - Text under the editor. Alternatively, use the `help-text` attribute.\n\n### **CSS Properties:**\n - **--example** - An example CSS custom property. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
3799
4432
  "doc-url": "",
3800
4433
  "attributes": [
3801
4434
  { "name": "id", "value": { "type": "string" } },
3802
4435
  { "name": "name", "value": { "type": "string" } },
3803
4436
  { "name": "value", "value": { "type": "string" } },
4437
+ {
4438
+ "name": "placeholder",
4439
+ "value": {
4440
+ "type": "string",
4441
+ "default": "'Compose your reply...'"
4442
+ }
4443
+ },
4444
+ {
4445
+ "name": "compact",
4446
+ "description": "Draws the editor as a form field: a bordered, resizable box under a small toolbar of bold, italic, link and lists.",
4447
+ "value": { "type": "boolean", "default": "false" }
4448
+ },
4449
+ {
4450
+ "name": "source",
4451
+ "description": "Adds a Source button that switches to editing the raw HTML, which is submitted as written.",
4452
+ "value": { "type": "boolean", "default": "false" }
4453
+ },
4454
+ {
4455
+ "name": "document-mode",
4456
+ "description": "Edits the HTML in place as a whole document, keeping layout the editor can't hold, such as a designed email.",
4457
+ "value": { "type": "boolean", "default": "false" }
4458
+ },
4459
+ {
4460
+ "name": "readonly",
4461
+ "description": "Shows only the content, without a toolbar or box, such as the source beside a translation.",
4462
+ "value": { "type": "boolean", "default": "false" }
4463
+ },
4464
+ {
4465
+ "name": "prefix",
4466
+ "description": "With `compact`, a short label inside the box ahead of the content, such as a language code.",
4467
+ "value": { "type": "string", "default": "''" }
4468
+ },
4469
+ {
4470
+ "name": "help-text",
4471
+ "description": "Text under the editor that describes how to use it. If you need to display HTML, use the `help-text` slot instead.",
4472
+ "value": { "type": "string", "default": "''" }
4473
+ },
3804
4474
  {
3805
4475
  "name": "interaction-type",
3806
4476
  "value": { "type": "'ticket' | 'chat'", "default": "'chat'" }
@@ -3846,6 +4516,11 @@
3846
4516
  "name": "ai",
3847
4517
  "value": { "type": "boolean", "default": "false" }
3848
4518
  },
4519
+ {
4520
+ "name": "merge-fields",
4521
+ "description": "Shows `{{token}}` replacements as highlighted chips, labelled from the matching `context-items`\nquick action. The value still holds the raw tokens.",
4522
+ "value": { "type": "boolean", "default": "false" }
4523
+ },
3849
4524
  {
3850
4525
  "name": "ai-path",
3851
4526
  "value": { "type": "string", "default": "''" }
@@ -3868,7 +4543,11 @@
3868
4543
  ],
3869
4544
  "slots": [
3870
4545
  { "name": "", "description": "The default slot." },
3871
- { "name": "example", "description": "An example slot." }
4546
+ { "name": "example", "description": "An example slot." },
4547
+ {
4548
+ "name": "help-text",
4549
+ "description": "Text under the editor. Alternatively, use the `help-text` attribute."
4550
+ }
3872
4551
  ],
3873
4552
  "events": [
3874
4553
  { "name": "zn-event-name", "description": "Emitted as an example." }
@@ -3878,6 +4557,37 @@
3878
4557
  { "name": "id", "type": "string" },
3879
4558
  { "name": "name", "type": "string" },
3880
4559
  { "name": "value", "type": "string" },
4560
+ { "name": "placeholder", "type": "string" },
4561
+ {
4562
+ "name": "compact",
4563
+ "description": "Draws the editor as a form field: a bordered, resizable box under a small toolbar of bold, italic, link and lists.",
4564
+ "type": "boolean"
4565
+ },
4566
+ {
4567
+ "name": "sourceEnabled",
4568
+ "description": "Adds a Source button that switches to editing the raw HTML, which is submitted as written.",
4569
+ "type": "boolean"
4570
+ },
4571
+ {
4572
+ "name": "documentMode",
4573
+ "description": "Edits the HTML in place as a whole document, keeping layout the editor can't hold, such as a designed email.",
4574
+ "type": "boolean"
4575
+ },
4576
+ {
4577
+ "name": "readonly",
4578
+ "description": "Shows only the content, without a toolbar or box, such as the source beside a translation.",
4579
+ "type": "boolean"
4580
+ },
4581
+ {
4582
+ "name": "prefix",
4583
+ "description": "With `compact`, a short label inside the box ahead of the content, such as a language code.",
4584
+ "type": "string"
4585
+ },
4586
+ {
4587
+ "name": "helpText",
4588
+ "description": "Text under the editor that describes how to use it. If you need to display HTML, use the `help-text` slot instead.",
4589
+ "type": "string"
4590
+ },
3881
4591
  { "name": "interactionType", "type": "'ticket' | 'chat'" },
3882
4592
  { "name": "uploadAttachmentUrl", "type": "string" },
3883
4593
  { "name": "codeBlocksEnabled", "type": "boolean" },
@@ -3890,6 +4600,11 @@
3890
4600
  { "name": "emojisEnabled", "type": "boolean" },
3891
4601
  { "name": "codeEnabled", "type": "boolean" },
3892
4602
  { "name": "aiEnabled", "type": "boolean" },
4603
+ {
4604
+ "name": "mergeFieldsEnabled",
4605
+ "description": "Shows `{{token}}` replacements as highlighted chips, labelled from the matching `context-items`\nquick action. The value still holds the raw tokens.",
4606
+ "type": "boolean"
4607
+ },
3893
4608
  { "name": "aiPath", "type": "string" },
3894
4609
  {
3895
4610
  "name": "storeKey",
@@ -3941,6 +4656,11 @@
3941
4656
  {
3942
4657
  "name": "padded",
3943
4658
  "value": { "type": "boolean", "default": "false" }
4659
+ },
4660
+ {
4661
+ "name": "tile",
4662
+ "description": "Draws the icon small inside a tinted, rounded tile rather than as a large glyph.",
4663
+ "value": { "type": "boolean", "default": "false" }
3944
4664
  }
3945
4665
  ],
3946
4666
  "slots": [
@@ -3956,7 +4676,12 @@
3956
4676
  { "name": "caption", "type": "string" },
3957
4677
  { "name": "description", "type": "string" },
3958
4678
  { "name": "type", "type": "'error' | 'info' | 'primary' | ''" },
3959
- { "name": "padded", "type": "boolean" }
4679
+ { "name": "padded", "type": "boolean" },
4680
+ {
4681
+ "name": "tile",
4682
+ "description": "Draws the icon small inside a tinted, rounded tile rather than as a large glyph.",
4683
+ "type": "boolean"
4684
+ }
3960
4685
  ],
3961
4686
  "events": [
3962
4687
  {
@@ -4141,6 +4866,11 @@
4141
4866
  "name": "upload-url",
4142
4867
  "description": "When set, a chosen file is immediately POSTed (multipart, field `file`) to this URL.\nThe endpoint must respond with JSON `{\"url\": \"...\"}`; that URL becomes the control's\nvalue (and `src` preview) in place of the file bytes, so the control works inside\nJSON-serialising hosts such as `zn-page-builder`. Emits `zn-error` when the upload fails.",
4143
4868
  "value": { "type": "string", "default": "''" }
4869
+ },
4870
+ {
4871
+ "name": "max-size",
4872
+ "description": "The largest each file can be, in megabytes. A bigger file makes the control invalid. 0 for no limit.",
4873
+ "value": { "type": "number", "default": "0" }
4144
4874
  }
4145
4875
  ],
4146
4876
  "slots": [
@@ -4297,6 +5027,11 @@
4297
5027
  "description": "When set, a chosen file is immediately POSTed (multipart, field `file`) to this URL.\nThe endpoint must respond with JSON `{\"url\": \"...\"}`; that URL becomes the control's\nvalue (and `src` preview) in place of the file bytes, so the control works inside\nJSON-serialising hosts such as `zn-page-builder`. Emits `zn-error` when the upload fails.",
4298
5028
  "type": "string"
4299
5029
  },
5030
+ {
5031
+ "name": "maxSize",
5032
+ "description": "The largest each file can be, in megabytes. A bigger file makes the control invalid. 0 for no limit.",
5033
+ "type": "number"
5034
+ },
4300
5035
  {
4301
5036
  "name": "validity",
4302
5037
  "description": "Gets the validity state object"
@@ -4585,6 +5320,11 @@
4585
5320
  "name": "form",
4586
5321
  "description": "The id of the form to act on. If omitted, the closest containing form is used.",
4587
5322
  "value": { "type": "string" }
5323
+ },
5324
+ {
5325
+ "name": "loading-on-submit",
5326
+ "description": "Shows the submit button loading and ignores further submits until the console reports the request finished,\nso a slow save such as an upload can't be sent twice. Only for forms the console submits.",
5327
+ "value": { "type": "boolean", "default": "false" }
4588
5328
  }
4589
5329
  ],
4590
5330
  "slots": [
@@ -4645,6 +5385,11 @@
4645
5385
  "name": "form",
4646
5386
  "description": "The id of the form to act on. If omitted, the closest containing form is used.",
4647
5387
  "type": "string"
5388
+ },
5389
+ {
5390
+ "name": "loadingOnSubmit",
5391
+ "description": "Shows the submit button loading and ignores further submits until the console reports the request finished,\nso a slow save such as an upload can't be sent twice. Only for forms the console submits.",
5392
+ "type": "boolean"
4648
5393
  }
4649
5394
  ],
4650
5395
  "events": [
@@ -4683,6 +5428,11 @@
4683
5428
  "name": "layout",
4684
5429
  "value": { "type": "string", "default": "\"1,2\"" }
4685
5430
  },
5431
+ {
5432
+ "name": "compact",
5433
+ "description": "Labels the group like one of its fields and keeps it tight to them, for a section inside a form or dialog.",
5434
+ "value": { "type": "boolean", "default": "false" }
5435
+ },
4686
5436
  {
4687
5437
  "name": "pad",
4688
5438
  "value": { "type": "boolean", "default": "false" }
@@ -4715,6 +5465,11 @@
4715
5465
  },
4716
5466
  { "name": "forceCols", "type": "boolean" },
4717
5467
  { "name": "layout", "type": "string" },
5468
+ {
5469
+ "name": "compact",
5470
+ "description": "Labels the group like one of its fields and keeps it tight to them, for a section inside a form or dialog.",
5471
+ "type": "boolean"
5472
+ },
4718
5473
  { "name": "pad", "type": "boolean" }
4719
5474
  ],
4720
5475
  "events": []
@@ -4733,6 +5488,16 @@
4733
5488
  "value": { "type": "boolean", "default": "false" }
4734
5489
  },
4735
5490
  { "name": "caption", "value": { "type": "string" } },
5491
+ {
5492
+ "name": "description",
5493
+ "description": "A line of muted text under the caption.",
5494
+ "value": { "type": "string" }
5495
+ },
5496
+ {
5497
+ "name": "inline-description",
5498
+ "description": "Sets the description beside the caption rather than under it, e.g. a row count.",
5499
+ "value": { "type": "boolean", "default": "false" }
5500
+ },
4736
5501
  { "name": "icon", "value": { "type": "string" } },
4737
5502
  {
4738
5503
  "name": "navigation",
@@ -4760,6 +5525,16 @@
4760
5525
  { "name": "entityIdShow", "type": "boolean" },
4761
5526
  { "name": "transparent", "type": "boolean" },
4762
5527
  { "name": "caption", "type": "string" },
5528
+ {
5529
+ "name": "description",
5530
+ "description": "A line of muted text under the caption.",
5531
+ "type": "string"
5532
+ },
5533
+ {
5534
+ "name": "inlineDescription",
5535
+ "description": "Sets the description beside the caption rather than under it, e.g. a row count.",
5536
+ "type": "boolean"
5537
+ },
4763
5538
  { "name": "icon", "type": "string" },
4764
5539
  { "name": "navigation", "type": "array" },
4765
5540
  { "name": "fullWidth", "type": "boolean" },
@@ -4882,12 +5657,16 @@
4882
5657
  },
4883
5658
  {
4884
5659
  "name": "zn-icon",
4885
- "description": "Short summary of the component's intended use.\n\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.",
5660
+ "description": "\n\n---\n",
4886
5661
  "doc-url": "",
4887
5662
  "attributes": [
4888
5663
  { "name": "src", "value": { "type": "string" } },
4889
5664
  { "name": "alt", "value": { "type": "string" } },
4890
- { "name": "size", "value": { "type": "number", "default": "24" } },
5665
+ {
5666
+ "name": "size",
5667
+ "description": "Size in pixels, or one of the avatar sizes `sm` (22), `md` (28), `lg` (40) and `xl` (56).",
5668
+ "value": { "type": "number", "default": "24" }
5669
+ },
4891
5670
  {
4892
5671
  "name": "round",
4893
5672
  "value": { "type": "boolean", "default": "false" }
@@ -4914,20 +5693,28 @@
4914
5693
  {
4915
5694
  "name": "squared",
4916
5695
  "value": { "type": "boolean", "default": "false" }
5696
+ },
5697
+ {
5698
+ "name": "presence",
5699
+ "description": "A live-status dot on an avatar: `online`, `away`, `busy`, `meeting` or `offline`.",
5700
+ "value": { "type": "AvatarPresence" }
5701
+ },
5702
+ {
5703
+ "name": "solid",
5704
+ "description": "Draws an avatar as a solid circle even where the theme tints avatars.",
5705
+ "value": { "type": "boolean", "default": "false" }
4917
5706
  }
4918
5707
  ],
4919
- "slots": [
4920
- { "name": "", "description": "The default slot." },
4921
- { "name": "example", "description": "An example slot." }
4922
- ],
4923
- "events": [
4924
- { "name": "zn-event-name", "description": "Emitted as an example." }
4925
- ],
5708
+ "events": [],
4926
5709
  "js": {
4927
5710
  "properties": [
4928
5711
  { "name": "src", "type": "string" },
4929
5712
  { "name": "alt", "type": "string" },
4930
- { "name": "size", "type": "number" },
5713
+ {
5714
+ "name": "size",
5715
+ "description": "Size in pixels, or one of the avatar sizes `sm` (22), `md` (28), `lg` (40) and `xl` (56).",
5716
+ "type": "number"
5717
+ },
4931
5718
  { "name": "round", "type": "boolean" },
4932
5719
  { "name": "tile", "type": "boolean" },
4933
5720
  { "name": "depth", "type": "boolean" },
@@ -4937,15 +5724,20 @@
4937
5724
  { "name": "padded", "type": "boolean" },
4938
5725
  { "name": "blink", "type": "boolean" },
4939
5726
  { "name": "squared", "type": "boolean" },
5727
+ {
5728
+ "name": "presence",
5729
+ "description": "A live-status dot on an avatar: `online`, `away`, `busy`, `meeting` or `offline`.",
5730
+ "type": "AvatarPresence"
5731
+ },
5732
+ {
5733
+ "name": "solid",
5734
+ "description": "Draws an avatar as a solid circle even where the theme tints avatars.",
5735
+ "type": "boolean"
5736
+ },
4940
5737
  { "name": "gravatarOptions", "type": "string" },
4941
5738
  { "name": "defaultLibrary", "type": "IconLibrary" }
4942
5739
  ],
4943
- "events": [
4944
- {
4945
- "name": "zn-event-name",
4946
- "description": "Emitted as an example."
4947
- }
4948
- ]
5740
+ "events": []
4949
5741
  }
4950
5742
  },
4951
5743
  {
@@ -5035,7 +5827,7 @@
5035
5827
  },
5036
5828
  {
5037
5829
  "name": "zn-inline-edit",
5038
- "description": "Short summary of the component's intended use.\n\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Slots:**\n - _default_ - Default slot. When `input-type` is `select`, accepts `zn-option` elements to define select options. If provided, takes precedence over the `options` property.\n- **example** - An example slot.\n- **help-text** - Text that describes how to use the input. Alternatively, you can use the `help-text` attribute.\n\n### **CSS Properties:**\n - **--example** - An example CSS custom property. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
5830
+ "description": "Short summary of the component's intended use.\n\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Slots:**\n - _default_ - Default slot. When `input-type` is `select`, accepts `zn-option` elements to define select options. If provided, takes precedence over the `options` property.\n- **example** - An example slot.\n- **help-text** - Text that describes how to use the input. Alternatively, you can use the `help-text` attribute.\n\n### **CSS Properties:**\n - **--zn-inline-edit-hover-background** - The fill behind a field while hovered or focused. _(default: undefined)_\n- **--zn-inline-edit-bleed** - How far the hover fill extends past the left edge of the value. _(default: undefined)_\n- **--zn-inline-edit-underline-color** - The dotted underline marking an editable value at rest. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
5039
5831
  "doc-url": "",
5040
5832
  "attributes": [
5041
5833
  {
@@ -5296,6 +6088,7 @@
5296
6088
  { "name": "defaultValue", "type": "string | string[]" },
5297
6089
  { "name": "validity", "type": "ValidityState" },
5298
6090
  { "name": "validationMessage", "type": "string" },
6091
+ { "name": "updateTextScrolledToEnd" },
5299
6092
  { "name": "mouseEventHandler" },
5300
6093
  { "name": "escKeyHandler" },
5301
6094
  { "name": "submitKeyHandler" },
@@ -5318,7 +6111,7 @@
5318
6111
  },
5319
6112
  {
5320
6113
  "name": "zn-input",
5321
- "description": "Short summary of the component's intended use.\n\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.",
6114
+ "description": "Short summary of the component's intended use.\n\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.\n- **color-swatch** - The swatch that opens the colour panel on colour inputs.\n- **color-picker** - The colour panel.",
5322
6115
  "doc-url": "",
5323
6116
  "attributes": [
5324
6117
  {
@@ -5423,11 +6216,8 @@
5423
6216
  },
5424
6217
  {
5425
6218
  "name": "color-format",
5426
- "description": "The color format to display for color inputs. Only applies when type is 'color'. *",
5427
- "value": {
5428
- "type": "'hex' | 'rgb' | 'hsl' | 'oklch'",
5429
- "default": "'hex'"
5430
- }
6219
+ "description": "The format a colour input writes its value in. Typing a colour in another format, or working in another format's\nrow of the colour panel, switches to that format. Only applies when type is 'color'.",
6220
+ "value": { "type": "ColorFormat", "default": "'hex'" }
5431
6221
  },
5432
6222
  {
5433
6223
  "name": "value-suffix",
@@ -5444,6 +6234,11 @@
5444
6234
  "description": "Makes the input a required field.",
5445
6235
  "value": { "type": "boolean", "default": "false" }
5446
6236
  },
6237
+ {
6238
+ "name": "label-note",
6239
+ "description": "Short text shown next to the label, styled like the help text, e.g. `optional`.",
6240
+ "value": { "type": "string", "default": "''" }
6241
+ },
5447
6242
  {
5448
6243
  "name": "pattern",
5449
6244
  "description": "A regular expression pattern to validate input against.",
@@ -5634,7 +6429,9 @@
5634
6429
  "js": {
5635
6430
  "properties": [
5636
6431
  { "name": "input", "type": "HTMLInputElement" },
5637
- { "name": "colorPicker", "type": "HTMLInputElement" },
6432
+ { "name": "colorSwatch", "type": "HTMLButtonElement" },
6433
+ { "name": "colorPanel", "type": "ZnColorPicker" },
6434
+ { "name": "colorPopup", "type": "ZnPopup" },
5638
6435
  { "name": "slashMenuElement", "type": "ZnSlashMenu | null" },
5639
6436
  { "name": "title", "type": "string" },
5640
6437
  {
@@ -5734,8 +6531,8 @@
5734
6531
  },
5735
6532
  {
5736
6533
  "name": "colorFormat",
5737
- "description": "The color format to display for color inputs. Only applies when type is 'color'. *",
5738
- "type": "'hex' | 'rgb' | 'hsl' | 'oklch'"
6534
+ "description": "The format a colour input writes its value in. Typing a colour in another format, or working in another format's\nrow of the colour panel, switches to that format. Only applies when type is 'color'.",
6535
+ "type": "ColorFormat"
5739
6536
  },
5740
6537
  {
5741
6538
  "name": "valueSuffix",
@@ -5752,6 +6549,11 @@
5752
6549
  "description": "Makes the input a required field.",
5753
6550
  "type": "boolean"
5754
6551
  },
6552
+ {
6553
+ "name": "labelNote",
6554
+ "description": "Short text shown next to the label, styled like the help text, e.g. `optional`.",
6555
+ "type": "string"
6556
+ },
5755
6557
  {
5756
6558
  "name": "pattern",
5757
6559
  "description": "A regular expression pattern to validate input against.",
@@ -5962,6 +6764,21 @@
5962
6764
  { "name": "caption", "value": { "type": "string" } },
5963
6765
  { "name": "description", "value": { "type": "string" } },
5964
6766
  { "name": "stacked", "value": { "type": "boolean" } },
6767
+ {
6768
+ "name": "fact",
6769
+ "description": "A fact in a grid of headline attributes: a small muted caption above the value, without padding.",
6770
+ "value": { "type": "boolean" }
6771
+ },
6772
+ {
6773
+ "name": "key-value",
6774
+ "description": "A row in a key–value list: a small muted caption beside a right-aligned value, on a compact row.",
6775
+ "value": { "type": "boolean" }
6776
+ },
6777
+ {
6778
+ "name": "mono",
6779
+ "description": "Shows the value in the monospace font, for identifiers and codes.",
6780
+ "value": { "type": "boolean" }
6781
+ },
5965
6782
  {
5966
6783
  "name": "size",
5967
6784
  "value": {
@@ -5996,6 +6813,21 @@
5996
6813
  { "name": "caption", "type": "string" },
5997
6814
  { "name": "description", "type": "string" },
5998
6815
  { "name": "stacked", "type": "boolean" },
6816
+ {
6817
+ "name": "fact",
6818
+ "description": "A fact in a grid of headline attributes: a small muted caption above the value, without padding.",
6819
+ "type": "boolean"
6820
+ },
6821
+ {
6822
+ "name": "keyValue",
6823
+ "description": "A row in a key–value list: a small muted caption beside a right-aligned value, on a compact row.",
6824
+ "type": "boolean"
6825
+ },
6826
+ {
6827
+ "name": "mono",
6828
+ "description": "Shows the value in the monospace font, for identifiers and codes.",
6829
+ "type": "boolean"
6830
+ },
5999
6831
  { "name": "size", "type": "'small' | 'medium' | 'large'" },
6000
6832
  { "name": "editOnHover", "type": "boolean" },
6001
6833
  { "name": "helpTooltip", "type": "string" },
@@ -6070,52 +6902,138 @@
6070
6902
  }
6071
6903
  },
6072
6904
  {
6073
- "name": "target",
6905
+ "name": "target",
6906
+ "value": { "type": "string", "default": "''" }
6907
+ },
6908
+ {
6909
+ "name": "item-selector",
6910
+ "value": { "type": "string", "default": "'[data-type]'" }
6911
+ },
6912
+ {
6913
+ "name": "filter-attribute",
6914
+ "value": { "type": "string", "default": "''" }
6915
+ },
6916
+ {
6917
+ "name": "no-scroll",
6918
+ "value": { "type": "boolean", "default": "false" }
6919
+ }
6920
+ ],
6921
+ "slots": [
6922
+ { "name": "", "description": "The content to be filtered." },
6923
+ {
6924
+ "name": "keys",
6925
+ "description": "The key items (zn-key) that define the filters."
6926
+ }
6927
+ ],
6928
+ "events": [
6929
+ {
6930
+ "name": "zn-change",
6931
+ "description": "Emitted when the set of active keys changes."
6932
+ }
6933
+ ],
6934
+ "js": {
6935
+ "properties": [
6936
+ { "name": "keysSlot", "type": "HTMLSlotElement" },
6937
+ { "name": "defaultSlot", "type": "HTMLSlotElement" },
6938
+ {
6939
+ "name": "position",
6940
+ "type": "'top-end' | 'top-start' | 'bottom-end' | 'bottom-start'"
6941
+ },
6942
+ { "name": "target", "type": "string" },
6943
+ { "name": "itemSelector", "type": "string" },
6944
+ { "name": "filterAttribute", "type": "string" },
6945
+ { "name": "noScroll", "type": "boolean" }
6946
+ ],
6947
+ "events": [
6948
+ {
6949
+ "name": "zn-change",
6950
+ "description": "Emitted when the set of active keys changes."
6951
+ }
6952
+ ]
6953
+ }
6954
+ },
6955
+ {
6956
+ "name": "zn-key-value",
6957
+ "description": "Edits a list of name and value pairs, submitted as a JSON object.\n\n---\n\n\n### **Events:**\n - **zn-change** - Emitted when a pair is added, removed or edited.\n\n### **Slots:**\n - **label** - The label. Alternatively, use the `label` attribute.\n- **help-text** - Text under the pairs. Alternatively, use the `help-text` attribute.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **row** - Each name and value pair.",
6958
+ "doc-url": "",
6959
+ "attributes": [
6960
+ { "name": "name", "value": { "type": "string", "default": "''" } },
6961
+ {
6962
+ "name": "value",
6963
+ "description": "The pairs as a JSON object, such as `{\"1\": \"{{recipient.firstName}}\"}`.",
6964
+ "value": { "type": "string", "default": "'{}'" }
6965
+ },
6966
+ { "name": "label", "value": { "type": "string", "default": "''" } },
6967
+ {
6968
+ "name": "help-text",
6074
6969
  "value": { "type": "string", "default": "''" }
6075
6970
  },
6076
6971
  {
6077
- "name": "item-selector",
6078
- "value": { "type": "string", "default": "'[data-type]'" }
6972
+ "name": "key-label",
6973
+ "value": { "type": "string", "default": "'Name'" }
6079
6974
  },
6080
6975
  {
6081
- "name": "filter-attribute",
6976
+ "name": "value-label",
6977
+ "value": { "type": "string", "default": "'Value'" }
6978
+ },
6979
+ {
6980
+ "name": "add-text",
6981
+ "value": { "type": "string", "default": "'Add'" }
6982
+ },
6983
+ {
6984
+ "name": "slash-items",
6985
+ "description": "Passed to each value input, so its slash menu can insert merge fields.",
6082
6986
  "value": { "type": "string", "default": "''" }
6083
6987
  },
6988
+ { "name": "form", "value": { "type": "string", "default": "''" } },
6084
6989
  {
6085
- "name": "no-scroll",
6990
+ "name": "disabled",
6086
6991
  "value": { "type": "boolean", "default": "false" }
6087
6992
  }
6088
6993
  ],
6089
6994
  "slots": [
6090
- { "name": "", "description": "The content to be filtered." },
6091
6995
  {
6092
- "name": "keys",
6093
- "description": "The key items (zn-key) that define the filters."
6996
+ "name": "label",
6997
+ "description": "The label. Alternatively, use the `label` attribute."
6998
+ },
6999
+ {
7000
+ "name": "help-text",
7001
+ "description": "Text under the pairs. Alternatively, use the `help-text` attribute."
6094
7002
  }
6095
7003
  ],
6096
7004
  "events": [
6097
7005
  {
6098
7006
  "name": "zn-change",
6099
- "description": "Emitted when the set of active keys changes."
7007
+ "description": "Emitted when a pair is added, removed or edited."
6100
7008
  }
6101
7009
  ],
6102
7010
  "js": {
6103
7011
  "properties": [
6104
- { "name": "keysSlot", "type": "HTMLSlotElement" },
6105
- { "name": "defaultSlot", "type": "HTMLSlotElement" },
7012
+ { "name": "name", "type": "string" },
6106
7013
  {
6107
- "name": "position",
6108
- "type": "'top-end' | 'top-start' | 'bottom-end' | 'bottom-start'"
7014
+ "name": "value",
7015
+ "description": "The pairs as a JSON object, such as `{\"1\": \"{{recipient.firstName}}\"}`.",
7016
+ "type": "string"
6109
7017
  },
6110
- { "name": "target", "type": "string" },
6111
- { "name": "itemSelector", "type": "string" },
6112
- { "name": "filterAttribute", "type": "string" },
6113
- { "name": "noScroll", "type": "boolean" }
7018
+ { "name": "label", "type": "string" },
7019
+ { "name": "helpText", "type": "string" },
7020
+ { "name": "keyLabel", "type": "string" },
7021
+ { "name": "valueLabel", "type": "string" },
7022
+ { "name": "addText", "type": "string" },
7023
+ {
7024
+ "name": "slashItems",
7025
+ "description": "Passed to each value input, so its slash menu can insert merge fields.",
7026
+ "type": "string"
7027
+ },
7028
+ { "name": "form", "type": "string" },
7029
+ { "name": "disabled", "type": "boolean" },
7030
+ { "name": "validity", "type": "ValidityState" },
7031
+ { "name": "validationMessage", "type": "string" }
6114
7032
  ],
6115
7033
  "events": [
6116
7034
  {
6117
7035
  "name": "zn-change",
6118
- "description": "Emitted when the set of active keys changes."
7036
+ "description": "Emitted when a pair is added, removed or edited."
6119
7037
  }
6120
7038
  ]
6121
7039
  }
@@ -6229,7 +7147,7 @@
6229
7147
  },
6230
7148
  {
6231
7149
  "name": "zn-markdown-editor",
6232
- "description": "A markdown editor with live preview, split view, and a fullscreen mode.\n\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.",
7150
+ "description": "A markdown editor with live preview, split view, and a fullscreen mode.\n\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- **--zn-panel-padding** - Padding around the body. Defaults to `--zn-base-gap`. _(default: undefined)_\n- **--zn-panel-shadow** - Resting shadow. Defaults to none. _(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- **header-left** - The caption and description, forwarded from zn-header.\n- **footer** - The footer region, when the footer slot is filled.",
6233
7151
  "doc-url": "",
6234
7152
  "attributes": [
6235
7153
  {
@@ -6300,6 +7218,16 @@
6300
7218
  },
6301
7219
  { "name": "basis-px", "value": { "type": "number" } },
6302
7220
  { "name": "caption", "value": { "type": "string" } },
7221
+ {
7222
+ "name": "description",
7223
+ "description": "Help text under the caption, in the panel's header.",
7224
+ "value": { "type": "string" }
7225
+ },
7226
+ {
7227
+ "name": "inline-description",
7228
+ "description": "Sets the description beside the caption rather than under it.",
7229
+ "value": { "type": "boolean", "default": "false" }
7230
+ },
6303
7231
  { "name": "icon", "value": { "type": "string" } },
6304
7232
  { "name": "tabbed", "value": { "type": "boolean" } },
6305
7233
  { "name": "header-borderless", "value": { "type": "boolean" } },
@@ -6418,6 +7346,16 @@
6418
7346
  { "name": "validationMessage", "type": "string" },
6419
7347
  { "name": "basis", "type": "number" },
6420
7348
  { "name": "caption", "type": "string" },
7349
+ {
7350
+ "name": "description",
7351
+ "description": "Help text under the caption, in the panel's header.",
7352
+ "type": "string"
7353
+ },
7354
+ {
7355
+ "name": "inlineDescription",
7356
+ "description": "Sets the description beside the caption rather than under it.",
7357
+ "type": "boolean"
7358
+ },
6421
7359
  { "name": "icon", "type": "string" },
6422
7360
  { "name": "tabbed", "type": "boolean" },
6423
7361
  { "name": "headerBorderless", "type": "boolean" },
@@ -6488,7 +7426,7 @@
6488
7426
  },
6489
7427
  {
6490
7428
  "name": "zn-menu-item",
6491
- "description": "Short summary of the component's intended use.\n\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Methods:**\n - **getTextLabel()** - Returns a text label based on the contents of the menu item's default slot.\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.",
7429
+ "description": "Short summary of the component's intended use.\n\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Methods:**\n - **getTextLabel()** - Returns a text label based on the contents of the menu item's default slot.\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.\n- **shortcut** - The key cap showing the item's `shortcut`.",
6492
7430
  "doc-url": "",
6493
7431
  "attributes": [
6494
7432
  {
@@ -6582,6 +7520,11 @@
6582
7520
  "name": "active",
6583
7521
  "description": "Marks the menu item as currently active/selected.",
6584
7522
  "value": { "type": "boolean", "default": "false" }
7523
+ },
7524
+ {
7525
+ "name": "shortcut",
7526
+ "description": "A keyboard shortcut shown as a key cap at the end of the item, such as `E` or `⌘K`.",
7527
+ "value": { "type": "string" }
6585
7528
  }
6586
7529
  ],
6587
7530
  "slots": [
@@ -6666,6 +7609,11 @@
6666
7609
  "name": "active",
6667
7610
  "description": "Marks the menu item as currently active/selected.",
6668
7611
  "type": "boolean"
7612
+ },
7613
+ {
7614
+ "name": "shortcut",
7615
+ "description": "A keyboard shortcut shown as a key cap at the end of the item, such as `E` or `⌘K`.",
7616
+ "type": "string"
6669
7617
  }
6670
7618
  ],
6671
7619
  "events": [
@@ -6676,9 +7624,187 @@
6676
7624
  ]
6677
7625
  }
6678
7626
  },
7627
+ {
7628
+ "name": "zn-menu-label",
7629
+ "description": "A heading for a group of items in a `zn-menu`. It is skipped by the menu's keyboard navigation.\n\n---\n\n\n### **Slots:**\n - _default_ - The label text.\n\n### **CSS Properties:**\n - **--zn-menu-label-padding** - Space around the label. _(default: undefined)_\n- **--zn-menu-label-color** - The label's text colour. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
7630
+ "doc-url": "",
7631
+ "attributes": [],
7632
+ "slots": [{ "name": "", "description": "The label text." }],
7633
+ "events": [],
7634
+ "js": { "properties": [], "events": [] }
7635
+ },
7636
+ {
7637
+ "name": "zn-nav-item",
7638
+ "description": "A selectable row in a `zn-nav-list`, with an optional description and count.\n\n---\n\n\n### **Slots:**\n - _default_ - The item's label.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **label** - The label, truncated with an ellipsis.\n- **description** - The description shown below the label.\n- **count** - The count shown at the end of the row.\n- **handle** - The drag handle, shown when the list is sortable.",
7639
+ "doc-url": "",
7640
+ "attributes": [
7641
+ {
7642
+ "name": "count",
7643
+ "description": "A count shown at the end of the row, such as the number of entries in the group.",
7644
+ "value": { "type": "string" }
7645
+ },
7646
+ {
7647
+ "name": "description",
7648
+ "description": "A line of detail shown below the label.",
7649
+ "value": { "type": "string" }
7650
+ }
7651
+ ],
7652
+ "slots": [{ "name": "", "description": "The item's label." }],
7653
+ "events": [],
7654
+ "js": {
7655
+ "properties": [
7656
+ {
7657
+ "name": "count",
7658
+ "description": "A count shown at the end of the row, such as the number of entries in the group.",
7659
+ "type": "string"
7660
+ },
7661
+ {
7662
+ "name": "description",
7663
+ "description": "A line of detail shown below the label.",
7664
+ "type": "string"
7665
+ },
7666
+ { "name": "selected" }
7667
+ ],
7668
+ "events": []
7669
+ }
7670
+ },
7671
+ {
7672
+ "name": "zn-nav-list",
7673
+ "description": "The list side of a master–detail layout: a card of selectable groups shown beside the selected group's\ncontents. Place it in the `left` slot of `<zn-tabs gap>`, which switches the detail panels.\n\n---\n\n\n### **Events:**\n - **zn-change** - Emitted when a sortable list's items have been moved.\n- **zn-reorder** - Emitted when a sortable list's items have been moved.\n\n### **Methods:**\n - **getPriorityMap()** - The order as `{key, priority}` pairs, counting from 1.\n\n### **Slots:**\n - _default_ - `zn-nav-item` elements.\n- **actions** - Actions in the card's header, beside the caption.\n\n### **CSS Properties:**\n - **--zn-nav-list-width** - The width of the card beside the detail. _(default: undefined)_\n- **--zn-nav-list-max-height** - Caps the card's height; the list scrolls beyond it. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **header** - The header holding the caption and actions.\n- **search** - The wrapper around the search input.\n- **list** - The scrolling list of items.\n- **empty** - The message shown when the search matches nothing.",
7674
+ "doc-url": "",
7675
+ "attributes": [
7676
+ {
7677
+ "name": "searchable",
7678
+ "description": "Shows a search input that filters the items by their label.",
7679
+ "value": { "type": "boolean", "default": "false" }
7680
+ },
7681
+ {
7682
+ "name": "search-placeholder",
7683
+ "value": { "type": "string", "default": "'Search'" }
7684
+ },
7685
+ {
7686
+ "name": "empty-label",
7687
+ "description": "Shown when the search matches no items.",
7688
+ "value": { "type": "string", "default": "'No matches'" }
7689
+ },
7690
+ {
7691
+ "name": "caption",
7692
+ "description": "A heading for the card, shown with the `actions` slot above the items.",
7693
+ "value": { "type": "string", "default": "''" }
7694
+ },
7695
+ {
7696
+ "name": "divide",
7697
+ "description": "Draws the items as full-width rows split by dividers, marking the selected one with a bar on its edge.",
7698
+ "value": { "type": "boolean", "default": "false" }
7699
+ },
7700
+ {
7701
+ "name": "sortable",
7702
+ "description": "Lets the items be dragged, or moved with Alt+Arrow keys, into a new order.",
7703
+ "value": { "type": "boolean", "default": "false" }
7704
+ },
7705
+ {
7706
+ "name": "name",
7707
+ "description": "Submits the order as `[{key, priority}]` JSON, keyed by each item's `value` (or `tab`), counting from 1.",
7708
+ "value": { "type": "string", "default": "''" }
7709
+ },
7710
+ {
7711
+ "name": "form",
7712
+ "description": "Associates the list with a form by id.",
7713
+ "value": { "type": "string", "default": "''" }
7714
+ },
7715
+ {
7716
+ "name": "disabled",
7717
+ "value": { "type": "boolean", "default": "false" }
7718
+ },
7719
+ {
7720
+ "name": "formaction",
7721
+ "description": "When set, the form is submitted after each reorder, to this URL or, when empty, the form's own action.",
7722
+ "value": { "type": "string" }
7723
+ }
7724
+ ],
7725
+ "slots": [
7726
+ { "name": "", "description": "`zn-nav-item` elements." },
7727
+ {
7728
+ "name": "actions",
7729
+ "description": "Actions in the card's header, beside the caption."
7730
+ }
7731
+ ],
7732
+ "events": [
7733
+ {
7734
+ "name": "zn-change",
7735
+ "description": "Emitted when a sortable list's items have been moved."
7736
+ },
7737
+ {
7738
+ "name": "zn-reorder",
7739
+ "description": "Emitted when a sortable list's items have been moved."
7740
+ }
7741
+ ],
7742
+ "js": {
7743
+ "properties": [
7744
+ {
7745
+ "name": "searchable",
7746
+ "description": "Shows a search input that filters the items by their label.",
7747
+ "type": "boolean"
7748
+ },
7749
+ { "name": "searchPlaceholder", "type": "string" },
7750
+ {
7751
+ "name": "emptyLabel",
7752
+ "description": "Shown when the search matches no items.",
7753
+ "type": "string"
7754
+ },
7755
+ {
7756
+ "name": "caption",
7757
+ "description": "A heading for the card, shown with the `actions` slot above the items.",
7758
+ "type": "string"
7759
+ },
7760
+ {
7761
+ "name": "divide",
7762
+ "description": "Draws the items as full-width rows split by dividers, marking the selected one with a bar on its edge.",
7763
+ "type": "boolean"
7764
+ },
7765
+ {
7766
+ "name": "sortable",
7767
+ "description": "Lets the items be dragged, or moved with Alt+Arrow keys, into a new order.",
7768
+ "type": "boolean"
7769
+ },
7770
+ {
7771
+ "name": "name",
7772
+ "description": "Submits the order as `[{key, priority}]` JSON, keyed by each item's `value` (or `tab`), counting from 1.",
7773
+ "type": "string"
7774
+ },
7775
+ {
7776
+ "name": "form",
7777
+ "description": "Associates the list with a form by id.",
7778
+ "type": "string"
7779
+ },
7780
+ { "name": "disabled", "type": "boolean" },
7781
+ {
7782
+ "name": "formAction",
7783
+ "description": "When set, the form is submitted after each reorder, to this URL or, when empty, the form's own action.",
7784
+ "type": "string"
7785
+ },
7786
+ { "name": "validity", "type": "ValidityState" },
7787
+ { "name": "validationMessage", "type": "string" },
7788
+ {
7789
+ "name": "value",
7790
+ "description": "The order as `[{key, priority}]` JSON."
7791
+ }
7792
+ ],
7793
+ "events": [
7794
+ {
7795
+ "name": "zn-change",
7796
+ "description": "Emitted when a sortable list's items have been moved."
7797
+ },
7798
+ {
7799
+ "name": "zn-reorder",
7800
+ "description": "Emitted when a sortable list's items have been moved."
7801
+ }
7802
+ ]
7803
+ }
7804
+ },
6679
7805
  {
6680
7806
  "name": "zn-navbar",
6681
- "description": "Short summary of the component's intended use.\n\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Slots:**\n - _default_ - The default slot.\n- **expand** - Expanding action panels rendered alongside the navbar items.\n- **bottom** - Content rendered below the navbar row (e.g. chips, filters).\n\n### **CSS Properties:**\n - **--example** - An example CSS custom property. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
7807
+ "description": "Short summary of the component's intended use.\n\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Slots:**\n - _default_ - The default slot.\n- **expand** - Expanding action panels rendered alongside the navbar items.\n- **bottom** - Content rendered below the navbar row (e.g. chips, filters).\n\n### **CSS Properties:**\n - **--zn-navbar-tab-indicator-slide** - `1` shows the sliding indicator in place of each tab's own line. _(default: undefined)_\n- **--zn-navbar-tab-indicator-duration** - Duration of the indicator's leading edge (default 300ms). _(default: undefined)_\n- **--zn-navbar-tab-indicator-easing** - Easing of both indicator edges. _(default: undefined)_\n- **--zn-navbar-tab-indicator-trail-duration** - Duration of the trailing edge; longer than the lead stretches the indicator. _(default: undefined)_\n- **--zn-navbar-tab-indicator-trail-easing** - Easing of the trailing edge; defaults to `--zn-navbar-tab-indicator-easing`. _(default: undefined)_\n- **--zn-navbar-tab-indicator-trail-delay** - Delay before the trailing edge follows (default 0ms). _(default: undefined)_\n- **--zn-navbar-tab-indicator-delay** - Delay before the indicator starts to move (default 0ms). _(default: undefined)_\n- **--zn-navbar-tab-indicator-squash** - Vertical scale the indicator squishes to before it travels (default 1, off). _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **indicator** - The active-tab indicator that slides between tabs. Exposes `--zn-navbar-indicator-top` / `--zn-navbar-indicator-height` (the active tab's box) for styles that fill the tab.",
6682
7808
  "doc-url": "",
6683
7809
  "attributes": [
6684
7810
  {
@@ -6698,6 +7824,21 @@
6698
7824
  "name": "gutter",
6699
7825
  "value": { "type": "boolean", "default": "false" }
6700
7826
  },
7827
+ {
7828
+ "name": "pill",
7829
+ "description": "Draws the tabs as a segmented control: a grey track with a pill that slides to the active tab.",
7830
+ "value": { "type": "boolean", "default": "false" }
7831
+ },
7832
+ {
7833
+ "name": "size",
7834
+ "description": "With `pill`, `small` draws a shorter track to sit with small controls, such as above a form field.",
7835
+ "value": { "type": "'small' | 'medium'", "default": "'medium'" }
7836
+ },
7837
+ {
7838
+ "name": "tabs",
7839
+ "description": "The id of a zn-tabs elsewhere on the page that this navbar's tabs switch, such as one below a page header.",
7840
+ "value": { "type": "string" }
7841
+ },
6701
7842
  { "name": "stacked", "value": { "type": "boolean" } },
6702
7843
  {
6703
7844
  "name": "dropdown",
@@ -6749,6 +7890,21 @@
6749
7890
  { "name": "hideOne", "type": "boolean" },
6750
7891
  { "name": "flush", "type": "boolean" },
6751
7892
  { "name": "gutter", "type": "boolean" },
7893
+ {
7894
+ "name": "pill",
7895
+ "description": "Draws the tabs as a segmented control: a grey track with a pill that slides to the active tab.",
7896
+ "type": "boolean"
7897
+ },
7898
+ {
7899
+ "name": "size",
7900
+ "description": "With `pill`, `small` draws a shorter track to sit with small controls, such as above a form field.",
7901
+ "type": "'small' | 'medium'"
7902
+ },
7903
+ {
7904
+ "name": "tabs",
7905
+ "description": "The id of a zn-tabs elsewhere on the page that this navbar's tabs switch, such as one below a page header.",
7906
+ "type": "string"
7907
+ },
6752
7908
  { "name": "stacked", "type": "boolean" },
6753
7909
  { "name": "dropdown", "type": "array" },
6754
7910
  { "name": "noPad", "type": "false" },
@@ -6926,7 +8082,7 @@
6926
8082
  },
6927
8083
  {
6928
8084
  "name": "zn-page",
6929
- "description": "Combines a page header with tab navigation and tab panels.\n\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Methods:**\n \n\n\n### **Slots:**\n - _default_ - Page content. Use zn-tab for named tabs and header-action/header-actions for header actions. Clicking an element in the content with `tab=\"<tab id>\"` opens that tab.\n- **description** - Rich subtitle/description content. Falls back to the `summary` attribute when empty.\n- **bottom** - Content rendered below the navbar row (e.g. chips, filters). Forwarded to the navbar's bottom 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.",
8085
+ "description": "Combines a page header with tab navigation and tab panels.\n\n---\n\n\n### **Events:**\n - **zn-event-name** - Emitted as an example.\n\n### **Methods:**\n \n\n\n### **Slots:**\n - _default_ - Page content. Use zn-tab for named tabs; without any, the content is shown as the page's only view. A zn-tab holding zn-tabs shows them as a second tab set, drawn as pills. Use header-action/header-actions for header actions. Clicking an element in the content with `tab=\"<tab id>\"` opens that tab.\n- **caption-badges** - Badges shown beside the caption, wrapping onto the next line as one group.\n- **description** - Rich subtitle/description content. Falls back to the `summary` attribute when empty.\n- **bottom** - Content rendered below the navbar row (e.g. chips, filters). Forwarded to the navbar's bottom slot.\n- **footer** - Actions pinned below the content, such as a form's `zn-form-actions`. In a modal page it takes the dialog footer's styling.\n- **example** - An example slot.\n\n### **CSS Properties:**\n - **--example** - An example CSS custom property. _(default: undefined)_\n\n### **CSS Parts:**\n - **footer** - The footer wrapping the footer slot.\n- **base** - The component's base wrapper.",
6930
8086
  "doc-url": "",
6931
8087
  "attributes": [
6932
8088
  { "name": "caption", "value": { "type": "string" } },
@@ -6941,6 +8097,11 @@
6941
8097
  "name": "nested",
6942
8098
  "value": { "type": "boolean", "default": "false" }
6943
8099
  },
8100
+ {
8101
+ "name": "navigation-style",
8102
+ "description": "The tab design: `tabs` (the default), `pills` for a second tab set below a main tab bar, shown without the page\nheader, or `sidebar` when the tabs are shown outside the page, which hides the tab bar unless it has bottom content.",
8103
+ "value": { "type": "'tabs' | 'pills' | 'sidebar' | undefined" }
8104
+ },
6944
8105
  {
6945
8106
  "name": "primary",
6946
8107
  "value": { "type": "boolean", "default": "false" }
@@ -6990,6 +8151,16 @@
6990
8151
  "name": "padded",
6991
8152
  "value": { "type": "boolean", "default": "false" }
6992
8153
  },
8154
+ {
8155
+ "name": "select-added",
8156
+ "description": "With `store-key`, opens a tab that has appeared since the page was last shown, such as one for an item just\nadded, in place of the remembered tab.",
8157
+ "value": { "type": "boolean", "default": "false" }
8158
+ },
8159
+ {
8160
+ "name": "gap",
8161
+ "description": "Spaces a left or right slot from the content, for side navigation laid out as its own card.",
8162
+ "value": { "type": "boolean", "default": "false" }
8163
+ },
6993
8164
  {
6994
8165
  "name": "fetch-style",
6995
8166
  "value": { "type": "string", "default": "\"\"" }
@@ -7008,7 +8179,11 @@
7008
8179
  "slots": [
7009
8180
  {
7010
8181
  "name": "",
7011
- "description": "Page content. Use zn-tab for named tabs and header-action/header-actions for header actions. Clicking an element in the content with `tab=\"<tab id>\"` opens that tab."
8182
+ "description": "Page content. Use zn-tab for named tabs; without any, the content is shown as the page's only view. A zn-tab holding zn-tabs shows them as a second tab set, drawn as pills. Use header-action/header-actions for header actions. Clicking an element in the content with `tab=\"<tab id>\"` opens that tab."
8183
+ },
8184
+ {
8185
+ "name": "caption-badges",
8186
+ "description": "Badges shown beside the caption, wrapping onto the next line as one group."
7012
8187
  },
7013
8188
  {
7014
8189
  "name": "description",
@@ -7018,6 +8193,10 @@
7018
8193
  "name": "bottom",
7019
8194
  "description": "Content rendered below the navbar row (e.g. chips, filters). Forwarded to the navbar's bottom slot."
7020
8195
  },
8196
+ {
8197
+ "name": "footer",
8198
+ "description": "Actions pinned below the content, such as a form's `zn-form-actions`. In a modal page it takes the dialog footer's styling."
8199
+ },
7021
8200
  { "name": "example", "description": "An example slot." }
7022
8201
  ],
7023
8202
  "events": [
@@ -7031,6 +8210,11 @@
7031
8210
  { "name": "fullLocation", "type": "string" },
7032
8211
  { "name": "modal", "type": "boolean" },
7033
8212
  { "name": "nested", "type": "boolean" },
8213
+ {
8214
+ "name": "navigationStyle",
8215
+ "description": "The tab design: `tabs` (the default), `pills` for a second tab set below a main tab bar, shown without the page\nheader, or `sidebar` when the tabs are shown outside the page, which hides the tab bar unless it has bottom content.",
8216
+ "type": "'tabs' | 'pills' | 'sidebar' | undefined"
8217
+ },
7034
8218
  { "name": "primary", "type": "boolean" },
7035
8219
  { "name": "previousPath", "type": "string" },
7036
8220
  { "name": "previousTarget", "type": "string" },
@@ -7051,6 +8235,16 @@
7051
8235
  { "name": "storeKey", "type": "string" },
7052
8236
  { "name": "storeTtl", "type": "number" },
7053
8237
  { "name": "padded", "type": "boolean" },
8238
+ {
8239
+ "name": "selectAdded",
8240
+ "description": "With `store-key`, opens a tab that has appeared since the page was last shown, such as one for an item just\nadded, in place of the remembered tab.",
8241
+ "type": "boolean"
8242
+ },
8243
+ {
8244
+ "name": "gap",
8245
+ "description": "Spaces a left or right slot from the content, for side navigation laid out as its own card.",
8246
+ "type": "boolean"
8247
+ },
7054
8248
  { "name": "fetchStyle", "type": "string" },
7055
8249
  { "name": "fullWidth", "type": "boolean" },
7056
8250
  { "name": "paddedRight", "type": "boolean" },
@@ -7274,6 +8468,16 @@
7274
8468
  "name": "padded",
7275
8469
  "value": { "type": "boolean", "default": "false" }
7276
8470
  },
8471
+ {
8472
+ "name": "select-added",
8473
+ "description": "With `store-key`, opens a tab that has appeared since the page was last shown, such as one for an item just\nadded, in place of the remembered tab.",
8474
+ "value": { "type": "boolean", "default": "false" }
8475
+ },
8476
+ {
8477
+ "name": "gap",
8478
+ "description": "Spaces a left or right slot from the content, for side navigation laid out as its own card.",
8479
+ "value": { "type": "boolean", "default": "false" }
8480
+ },
7277
8481
  {
7278
8482
  "name": "fetch-style",
7279
8483
  "value": { "type": "string", "default": "\"\"" }
@@ -7316,6 +8520,16 @@
7316
8520
  { "name": "storeKey", "type": "string" },
7317
8521
  { "name": "storeTtl", "type": "number" },
7318
8522
  { "name": "padded", "type": "boolean" },
8523
+ {
8524
+ "name": "selectAdded",
8525
+ "description": "With `store-key`, opens a tab that has appeared since the page was last shown, such as one for an item just\nadded, in place of the remembered tab.",
8526
+ "type": "boolean"
8527
+ },
8528
+ {
8529
+ "name": "gap",
8530
+ "description": "Spaces a left or right slot from the content, for side navigation laid out as its own card.",
8531
+ "type": "boolean"
8532
+ },
7319
8533
  { "name": "fetchStyle", "type": "string" },
7320
8534
  { "name": "fullWidth", "type": "boolean" },
7321
8535
  { "name": "paddedRight", "type": "boolean" },
@@ -7378,11 +8592,21 @@
7378
8592
  },
7379
8593
  {
7380
8594
  "name": "zn-panel",
7381
- "description": "Panels are versatile containers that provide structure for organizing content with optional headers and footers.\n\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.",
8595
+ "description": "Panels are versatile containers that provide structure for organizing content with optional headers and footers.\n\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- **--zn-panel-padding** - Padding around the body. Defaults to `--zn-base-gap`. _(default: undefined)_\n- **--zn-panel-shadow** - Resting shadow. Defaults to none. _(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- **header-left** - The caption and description, forwarded from zn-header.\n- **footer** - The footer region, when the footer slot is filled.",
7382
8596
  "doc-url": "",
7383
8597
  "attributes": [
7384
8598
  { "name": "basis-px", "value": { "type": "number" } },
7385
8599
  { "name": "caption", "value": { "type": "string" } },
8600
+ {
8601
+ "name": "description",
8602
+ "description": "Help text under the caption, in the panel's header.",
8603
+ "value": { "type": "string" }
8604
+ },
8605
+ {
8606
+ "name": "inline-description",
8607
+ "description": "Sets the description beside the caption rather than under it.",
8608
+ "value": { "type": "boolean", "default": "false" }
8609
+ },
7386
8610
  { "name": "icon", "value": { "type": "string" } },
7387
8611
  { "name": "tabbed", "value": { "type": "boolean" } },
7388
8612
  { "name": "header-borderless", "value": { "type": "boolean" } },
@@ -7410,6 +8634,16 @@
7410
8634
  "properties": [
7411
8635
  { "name": "basis", "type": "number" },
7412
8636
  { "name": "caption", "type": "string" },
8637
+ {
8638
+ "name": "description",
8639
+ "description": "Help text under the caption, in the panel's header.",
8640
+ "type": "string"
8641
+ },
8642
+ {
8643
+ "name": "inlineDescription",
8644
+ "description": "Sets the description beside the caption rather than under it.",
8645
+ "type": "boolean"
8646
+ },
7413
8647
  { "name": "icon", "type": "string" },
7414
8648
  { "name": "tabbed", "type": "boolean" },
7415
8649
  { "name": "headerBorderless", "type": "boolean" },
@@ -7441,7 +8675,7 @@
7441
8675
  },
7442
8676
  {
7443
8677
  "name": "placement",
7444
- "description": "The preferred placement of the popup. Note that the actual placement will vary as configured to keep the\npanel inside of the viewport.",
8678
+ "description": "The preferred placement of the popup. Note that the actual placement will vary as configured to keep the\npanel inside the viewport.",
7445
8679
  "value": {
7446
8680
  "type": "| 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'left'\n | 'left-start'\n | 'left-end'",
7447
8681
  "default": "'top'"
@@ -7578,7 +8812,7 @@
7578
8812
  },
7579
8813
  {
7580
8814
  "name": "placement",
7581
- "description": "The preferred placement of the popup. Note that the actual placement will vary as configured to keep the\npanel inside of the viewport.",
8815
+ "description": "The preferred placement of the popup. Note that the actual placement will vary as configured to keep the\npanel inside the viewport.",
7582
8816
  "type": "| 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'left'\n | 'left-start'\n | 'left-end'"
7583
8817
  },
7584
8818
  {
@@ -7832,7 +9066,7 @@
7832
9066
  },
7833
9067
  {
7834
9068
  "name": "zn-priority-list",
7835
- "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\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.",
9069
+ "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\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). Use `zn-tile` items for titled rows with their own actions. Set `locked` on an item to pin it where it is.\n- **action-{value}** - Controls shown at the end of the item with that `value`.\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.",
7836
9070
  "doc-url": "",
7837
9071
  "attributes": [
7838
9072
  {
@@ -7888,6 +9122,31 @@
7888
9122
  "description": "The starting priority number. Defaults to 1.",
7889
9123
  "value": { "type": "number", "default": "1" }
7890
9124
  },
9125
+ {
9126
+ "name": "flush",
9127
+ "description": "Draws the items as rows divided edge to edge, for a list filling a flush panel; the label is kept for\nscreen readers only.",
9128
+ "value": { "type": "boolean", "default": "false" }
9129
+ },
9130
+ {
9131
+ "name": "selectable",
9132
+ "description": "Lets a click or Enter select an item as well as drag it, for a list that doubles as navigation. The click is\npassed on to the item, so a `tab` or link on it acts as if clicked.",
9133
+ "value": { "type": "boolean", "default": "false" }
9134
+ },
9135
+ {
9136
+ "name": "selected",
9137
+ "description": "The selected item's value. An item marked active by zn-tabs takes precedence, so the list follows its tabs.",
9138
+ "value": { "type": "string", "default": "''" }
9139
+ },
9140
+ {
9141
+ "name": "hide-priority",
9142
+ "description": "Hides each item's priority number, for lists where the order shows the priority.",
9143
+ "value": { "type": "boolean", "default": "false" }
9144
+ },
9145
+ {
9146
+ "name": "move-buttons",
9147
+ "description": "Shows move up and move down buttons on each item.",
9148
+ "value": { "type": "boolean", "default": "false" }
9149
+ },
7891
9150
  {
7892
9151
  "name": "formaction",
7893
9152
  "description": "When set, the associated form will be submitted with the given action URL whenever items are reordered.\nIf set to an empty string, the form will be submitted using its existing action.",
@@ -7902,7 +9161,11 @@
7902
9161
  "slots": [
7903
9162
  {
7904
9163
  "name": "",
7905
- "description": "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)."
9164
+ "description": "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). Use `zn-tile` items for titled rows with their own actions. Set `locked` on an item to pin it where it is."
9165
+ },
9166
+ {
9167
+ "name": "action-{value}",
9168
+ "description": "Controls shown at the end of the item with that `value`."
7906
9169
  },
7907
9170
  {
7908
9171
  "name": "label",
@@ -7981,6 +9244,31 @@
7981
9244
  "description": "The starting priority number. Defaults to 1.",
7982
9245
  "type": "number"
7983
9246
  },
9247
+ {
9248
+ "name": "flush",
9249
+ "description": "Draws the items as rows divided edge to edge, for a list filling a flush panel; the label is kept for\nscreen readers only.",
9250
+ "type": "boolean"
9251
+ },
9252
+ {
9253
+ "name": "selectable",
9254
+ "description": "Lets a click or Enter select an item as well as drag it, for a list that doubles as navigation. The click is\npassed on to the item, so a `tab` or link on it acts as if clicked.",
9255
+ "type": "boolean"
9256
+ },
9257
+ {
9258
+ "name": "selected",
9259
+ "description": "The selected item's value. An item marked active by zn-tabs takes precedence, so the list follows its tabs.",
9260
+ "type": "string"
9261
+ },
9262
+ {
9263
+ "name": "hidePriority",
9264
+ "description": "Hides each item's priority number, for lists where the order shows the priority.",
9265
+ "type": "boolean"
9266
+ },
9267
+ {
9268
+ "name": "moveButtons",
9269
+ "description": "Shows move up and move down buttons on each item.",
9270
+ "type": "boolean"
9271
+ },
7984
9272
  {
7985
9273
  "name": "formAction",
7986
9274
  "description": "When set, the associated form will be submitted with the given action URL whenever items are reordered.\nIf set to an empty string, the form will be submitted using its existing action.",
@@ -8109,6 +9397,16 @@
8109
9397
  {
8110
9398
  "name": "show-values",
8111
9399
  "value": { "type": "string[]", "default": "[]" }
9400
+ },
9401
+ {
9402
+ "name": "rules",
9403
+ "description": "Rules to start with, in the shape the builder submits.",
9404
+ "value": { "type": "QueryBuilderRule[]", "default": "[]" }
9405
+ },
9406
+ {
9407
+ "name": "repeatable",
9408
+ "description": "Allows a filter to be added more than once, e.g. for a date range.",
9409
+ "value": { "type": "boolean", "default": "false" }
8112
9410
  }
8113
9411
  ],
8114
9412
  "slots": [
@@ -8126,6 +9424,16 @@
8126
9424
  { "name": "name", "type": "string" },
8127
9425
  { "name": "value", "type": "PropertyKey" },
8128
9426
  { "name": "showValues", "type": "string[]" },
9427
+ {
9428
+ "name": "rules",
9429
+ "description": "Rules to start with, in the shape the builder submits.",
9430
+ "type": "QueryBuilderRule[]"
9431
+ },
9432
+ {
9433
+ "name": "repeatable",
9434
+ "description": "Allows a filter to be added more than once, e.g. for a date range.",
9435
+ "type": "boolean"
9436
+ },
8129
9437
  { "name": "validationMessage", "type": "string" },
8130
9438
  { "name": "validity", "type": "ValidityState" }
8131
9439
  ],
@@ -8134,7 +9442,7 @@
8134
9442
  },
8135
9443
  {
8136
9444
  "name": "zn-radio",
8137
- "description": "Short summary of the component's intended use.\n\n---\n\n\n### **Events:**\n - **zn-blur** - Emitted when the radio loses focus.\n- **zn-change** - Emitted when the checked state changes.\n- **zn-focus** - Emitted when the radio gains focus.\n- **zn-input** - Emitted when the radio receives input.\n- **zn-invalid** - Emitted when the form control has been checked for validity and its constraints aren't satisfied.\n\n### **Methods:**\n - **click()** - Simulates a click on the radio.\n- **focus(options: _FocusOptions_)** - Sets focus on the radio.\n- **blur()** - Removes focus from the radio.\n- **checkValidity()** - Checks for 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. The value provided will be shown to the user when the form is submitted. To clear\nthe custom validation message, call this method with an empty string.\n\n### **Slots:**\n - _default_ - The radio's label.\n- **image** - Replaces the built-in image used by contained radios.\n- **description** - A description of the radio's label. Serves as help text for a radio item. Alternatively, you can use the `description` attribute.\n- **selected-content** - Use to nest rich content (like an input) inside a selected radio item. Use only with the contained style.\n\n### **CSS Properties:**\n - **--zn-selection-card-image-width** - Width of the built-in card image. _(default: undefined)_\n- **--zn-selection-card-image-height** - Height of the built-in card image. _(default: undefined)_\n- **--zn-selection-card-min-height** - Minimum height of a contained radio with an image. _(default: undefined)_\n- **--zn-selection-card-content-min-width** - Width the card text keeps before it wraps below the image. _(default: undefined)_\n- **--zn-selection-card-title-font-size** - Font size of a selection card title. _(default: undefined)_\n- **--zn-selection-card-padding** - Equal inset around the contents of a selection card. _(default: undefined)_\n- **--zn-selection-card-gap** - Space between the image, title, and indicator gutter. _(default: undefined)_\n- **--zn-selection-card-control-offset** - Distance between a positioned control and the card edge. _(default: undefined)_\n- **--zn-selection-card-border-radius** - Corner radius of a contained container. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **control** - The square container that wraps the radio's checked state.\n- **control--checked** - Matches the control part when the radio is checked.\n- **checked-icon** - The checked icon, an `<zn-icon>` element.\n- **image-container** - The wrapper around the built-in image or image slot.\n- **image** - The built-in image.\n- **card-title** - The title inside a selection card.\n- **label** - The container that wraps the radio's label.\n- **description** - The container that wraps the radio's description.\n- **selected-content** - The container that wraps optional content that appears when a radio is checked.",
9445
+ "description": "Short summary of the component's intended use.\n\n---\n\n\n### **Events:**\n - **zn-blur** - Emitted when the radio loses focus.\n- **zn-change** - Emitted when the checked state changes.\n- **zn-focus** - Emitted when the radio gains focus.\n- **zn-input** - Emitted when the radio receives input.\n- **zn-invalid** - Emitted when the form control has been checked for validity and its constraints aren't satisfied.\n\n### **Methods:**\n - **click()** - Simulates a click on the radio.\n- **focus(options: _FocusOptions_)** - Sets focus on the radio.\n- **blur()** - Removes focus from the radio.\n- **checkValidity()** - Checks for 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. The value provided will be shown to the user when the form is submitted. To clear\nthe custom validation message, call this method with an empty string.\n\n### **Slots:**\n - _default_ - The radio's label.\n- **image** - Replaces the built-in image used by contained radios.\n- **description** - A description of the radio's label. Serves as help text for a radio item. Alternatively, you can use the `description` attribute.\n- **selected-content** - Use to nest rich content (like an input) inside a selected radio item. Use only with the contained style.\n\n### **CSS Properties:**\n - **--zn-selection-card-image-width** - Width of the built-in card image. _(default: undefined)_\n- **--zn-selection-card-image-height** - Height of the built-in card image. _(default: undefined)_\n- **--zn-selection-card-min-height** - Minimum height of a contained radio with an image. _(default: undefined)_\n- **--zn-selection-card-content-min-width** - Width the card text keeps before it wraps below the image. _(default: undefined)_\n- **--zn-selection-card-title-font-size** - Font size of a selection card title. _(default: undefined)_\n- **--zn-selection-card-padding** - Equal inset around the contents of a selection card. _(default: undefined)_\n- **--zn-selection-card-gap** - Space between the image, title, and indicator gutter. _(default: undefined)_\n- **--zn-selection-card-control-offset** - Distance between a positioned control and the card edge. _(default: undefined)_\n- **--zn-selection-card-border-radius** - Corner radius of a contained container. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **control** - The square container that wraps the radio's checked state.\n- **control--checked** - Matches the control part when the radio is checked.\n- **checked-icon** - The checked dot, a `<span>` element.\n- **image-container** - The wrapper around the built-in image or image slot.\n- **image** - The built-in image.\n- **card-title** - The title inside a selection card.\n- **label** - The container that wraps the radio's label.\n- **description** - The container that wraps the radio's description.\n- **selected-content** - The container that wraps optional content that appears when a radio is checked.",
8138
9446
  "doc-url": "",
8139
9447
  "attributes": [
8140
9448
  { "name": "title", "value": { "type": "string", "default": "''" } },
@@ -8181,6 +9489,11 @@
8181
9489
  "description": "Squares off the corners of the container drawn by `contained`, which is rounded by default.",
8182
9490
  "value": { "type": "boolean", "default": "false" }
8183
9491
  },
9492
+ {
9493
+ "name": "centered",
9494
+ "description": "Centres the text of a contained radio that has no image or `card-title`.",
9495
+ "value": { "type": "boolean", "default": "false" }
9496
+ },
8184
9497
  {
8185
9498
  "name": "src",
8186
9499
  "description": "URL for the image shown in a contained radio.",
@@ -8201,7 +9514,7 @@
8201
9514
  },
8202
9515
  {
8203
9516
  "name": "control-position",
8204
- "description": "Places the radio indicator within a contained card. Use `none` to hide the indicator so the card itself\nshows the selected state. Requires `contained`.",
9517
+ "description": "Places the radio indicator within a contained card. A contained radio without an image or `card-title` hides it\nat `start`, as does `none`. Requires `contained`.",
8205
9518
  "value": {
8206
9519
  "type": "SelectionCardControlPosition",
8207
9520
  "default": "'start'"
@@ -8212,6 +9525,16 @@
8212
9525
  "description": "Applies styles relevant to radios in a horizontal layout.",
8213
9526
  "value": { "type": "boolean", "default": "false" }
8214
9527
  },
9528
+ {
9529
+ "name": "scale",
9530
+ "description": "Draws the radio as one segment of a scale. Set by a radio group with `scale`.",
9531
+ "value": { "type": "boolean", "default": "false" }
9532
+ },
9533
+ {
9534
+ "name": "filled",
9535
+ "description": "Fills a scale segment, as one at or before the group's checked radio. Set by a radio group with `scale`.",
9536
+ "value": { "type": "boolean", "default": "false" }
9537
+ },
8215
9538
  {
8216
9539
  "name": "form",
8217
9540
  "description": "By default, form controls are associated with the nearest containing `<form>` element. This attribute allows you\nto place the form control outside a form and associate it with the form that has this `id`. The form must be in\nthe same document or shadow root for this to work.",
@@ -8270,6 +9593,7 @@
8270
9593
  "js": {
8271
9594
  "properties": [
8272
9595
  { "name": "input", "type": "HTMLInputElement" },
9596
+ { "name": "control", "type": "HTMLElement" },
8273
9597
  { "name": "title", "type": "string" },
8274
9598
  {
8275
9599
  "name": "name",
@@ -8311,6 +9635,11 @@
8311
9635
  "description": "Squares off the corners of the container drawn by `contained`, which is rounded by default.",
8312
9636
  "type": "boolean"
8313
9637
  },
9638
+ {
9639
+ "name": "centered",
9640
+ "description": "Centres the text of a contained radio that has no image or `card-title`.",
9641
+ "type": "boolean"
9642
+ },
8314
9643
  {
8315
9644
  "name": "src",
8316
9645
  "description": "URL for the image shown in a contained radio.",
@@ -8328,7 +9657,7 @@
8328
9657
  },
8329
9658
  {
8330
9659
  "name": "controlPosition",
8331
- "description": "Places the radio indicator within a contained card. Use `none` to hide the indicator so the card itself\nshows the selected state. Requires `contained`.",
9660
+ "description": "Places the radio indicator within a contained card. A contained radio without an image or `card-title` hides it\nat `start`, as does `none`. Requires `contained`.",
8332
9661
  "type": "SelectionCardControlPosition"
8333
9662
  },
8334
9663
  {
@@ -8336,6 +9665,16 @@
8336
9665
  "description": "Applies styles relevant to radios in a horizontal layout.",
8337
9666
  "type": "boolean"
8338
9667
  },
9668
+ {
9669
+ "name": "scale",
9670
+ "description": "Draws the radio as one segment of a scale. Set by a radio group with `scale`.",
9671
+ "type": "boolean"
9672
+ },
9673
+ {
9674
+ "name": "filled",
9675
+ "description": "Fills a scale segment, as one at or before the group's checked radio. Set by a radio group with `scale`.",
9676
+ "type": "boolean"
9677
+ },
8339
9678
  {
8340
9679
  "name": "defaultChecked",
8341
9680
  "description": "The default value of the form control. Primarily used for resetting the form control.",
@@ -8444,11 +9783,21 @@
8444
9783
  "description": "Squares off the corners of every contained radio in the group, which are rounded by default.",
8445
9784
  "value": { "type": "boolean", "default": "false" }
8446
9785
  },
9786
+ {
9787
+ "name": "centered",
9788
+ "description": "Centres the text of every contained radio in the group.",
9789
+ "value": { "type": "boolean", "default": "false" }
9790
+ },
8447
9791
  {
8448
9792
  "name": "wrap",
8449
9793
  "description": "Lays horizontal contained radios out as a wrapping row instead of an equal-width grid, so each one sizes from\n`--zn-radio-group-column-width` (set it to `auto` to size from content) and wraps onto a new line when needed.",
8450
9794
  "value": { "type": "boolean", "default": "false" }
8451
9795
  },
9796
+ {
9797
+ "name": "scale",
9798
+ "description": "Lays the radios out as a segmented scale, in document order, filling every segment up to the checked one. Suits\nordered answers such as 1 to 10, and unlike a range input it has no value until one is picked.",
9799
+ "value": { "type": "boolean", "default": "false" }
9800
+ },
8452
9801
  {
8453
9802
  "name": "form",
8454
9803
  "description": "By default, form controls are associated with the nearest containing `<form>` element. This attribute allows you\nto place the form control outside a form and associate it with the form that has this `id`. The form must be in\nthe same document or shadow root for this to work.",
@@ -8517,11 +9866,21 @@
8517
9866
  "description": "Squares off the corners of every contained radio in the group, which are rounded by default.",
8518
9867
  "type": "boolean"
8519
9868
  },
9869
+ {
9870
+ "name": "centered",
9871
+ "description": "Centres the text of every contained radio in the group.",
9872
+ "type": "boolean"
9873
+ },
8520
9874
  {
8521
9875
  "name": "wrap",
8522
9876
  "description": "Lays horizontal contained radios out as a wrapping row instead of an equal-width grid, so each one sizes from\n`--zn-radio-group-column-width` (set it to `auto` to size from content) and wraps onto a new line when needed.",
8523
9877
  "type": "boolean"
8524
9878
  },
9879
+ {
9880
+ "name": "scale",
9881
+ "description": "Lays the radios out as a segmented scale, in document order, filling every segment up to the checked one. Suits\nordered answers such as 1 to 10, and unlike a range input it has no value until one is picked.",
9882
+ "type": "boolean"
9883
+ },
8525
9884
  {
8526
9885
  "name": "form",
8527
9886
  "description": "By default, form controls are associated with the nearest containing `<form>` element. This attribute allows you\nto place the form control outside a form and associate it with the form that has this `id`. The form must be in\nthe same document or shadow root for this to work.",
@@ -8793,6 +10152,179 @@
8793
10152
  ]
8794
10153
  }
8795
10154
  },
10155
+ {
10156
+ "name": "zn-report-table",
10157
+ "description": "A grouped report: one row per value of a dimension, read column by column, with a total row.\n\n---\n\n\n### **Events:**\n - **zn-report-change** - Emitted when the type, group by, date range or filter is changed, before the report is fetched again.\n\n### **Slots:**\n - **inputs** - Inputs whose name and value are sent with every request (csrf tokens and similar).\n- **empty-state** - Replaces the default empty state.",
10158
+ "doc-url": "",
10159
+ "attributes": [
10160
+ { "name": "data-uri", "value": { "type": "string" } },
10161
+ {
10162
+ "name": "method",
10163
+ "value": { "type": "'GET' | 'POST'", "default": "'POST'" }
10164
+ },
10165
+ {
10166
+ "name": "caption",
10167
+ "value": { "type": "string", "default": "''" }
10168
+ },
10169
+ { "name": "type", "value": { "type": "string", "default": "''" } },
10170
+ {
10171
+ "name": "group-by",
10172
+ "value": { "type": "string", "default": "''" }
10173
+ },
10174
+ { "name": "from", "value": { "type": "string", "default": "''" } },
10175
+ { "name": "to", "value": { "type": "string", "default": "''" } },
10176
+ {
10177
+ "name": "filter",
10178
+ "value": { "type": "string", "default": "''" }
10179
+ },
10180
+ {
10181
+ "name": "currency",
10182
+ "value": { "type": "string", "default": "'USD'" }
10183
+ },
10184
+ { "name": "locale", "value": { "type": "string" } },
10185
+ {
10186
+ "name": "types",
10187
+ "description": "Report types, shown as tabs when there are two or more. `type` defaults to the first.",
10188
+ "value": { "type": "ReportOption[]", "default": "[]" }
10189
+ },
10190
+ {
10191
+ "name": "group-bys",
10192
+ "description": "Group by options; those with a `category` are listed under its heading.",
10193
+ "value": { "type": "ReportOption[]", "default": "[]" }
10194
+ },
10195
+ {
10196
+ "name": "filter-fields",
10197
+ "description": "Fields for the funnel's filter builder. The funnel is hidden when there are none.",
10198
+ "value": { "type": "ReportFilterField[]", "default": "[]" }
10199
+ },
10200
+ {
10201
+ "name": "presets",
10202
+ "description": "Quick ranges for the date range, replacing the default ones.",
10203
+ "value": { "type": "DatePreset[] | undefined" }
10204
+ },
10205
+ {
10206
+ "name": "max-date",
10207
+ "description": "The latest day that can be picked. Defaults to today.",
10208
+ "value": { "type": "string", "default": "''" }
10209
+ },
10210
+ {
10211
+ "name": "date-note",
10212
+ "description": "A short line shown under the date range's calendar.",
10213
+ "value": { "type": "string", "default": "''" }
10214
+ },
10215
+ {
10216
+ "name": "search-placeholder",
10217
+ "value": { "type": "string", "default": "''" }
10218
+ },
10219
+ {
10220
+ "name": "sharable",
10221
+ "description": "Mirrors the type, group by, dates, filter and search to the URL query string, and reads them back on load.",
10222
+ "value": { "type": "boolean", "default": "false" }
10223
+ },
10224
+ {
10225
+ "name": "hide-empty-columns",
10226
+ "description": "Leaves out columns that are zero or empty in every row, and groups left without columns.",
10227
+ "value": { "type": "boolean", "default": "false" }
10228
+ },
10229
+ {
10230
+ "name": "selectable",
10231
+ "description": "Gives each row a tick box that highlights it, with one in the heading for every row shown.",
10232
+ "value": { "type": "boolean", "default": "false" }
10233
+ },
10234
+ {
10235
+ "name": "heatmap",
10236
+ "description": "Shades number cells by their size against the largest in their column.",
10237
+ "value": { "type": "boolean", "default": "false" }
10238
+ }
10239
+ ],
10240
+ "slots": [
10241
+ {
10242
+ "name": "inputs",
10243
+ "description": "Inputs whose name and value are sent with every request (csrf tokens and similar)."
10244
+ },
10245
+ {
10246
+ "name": "empty-state",
10247
+ "description": "Replaces the default empty state."
10248
+ }
10249
+ ],
10250
+ "events": [
10251
+ {
10252
+ "name": "zn-report-change",
10253
+ "description": "Emitted when the type, group by, date range or filter is changed, before the report is fetched again."
10254
+ }
10255
+ ],
10256
+ "js": {
10257
+ "properties": [
10258
+ { "name": "dataUri", "type": "string" },
10259
+ { "name": "method", "type": "'GET' | 'POST'" },
10260
+ { "name": "caption", "type": "string" },
10261
+ { "name": "type", "type": "string" },
10262
+ { "name": "groupBy", "type": "string" },
10263
+ { "name": "from", "type": "string" },
10264
+ { "name": "to", "type": "string" },
10265
+ { "name": "filter", "type": "string" },
10266
+ { "name": "currency", "type": "string" },
10267
+ { "name": "locale", "type": "string" },
10268
+ {
10269
+ "name": "types",
10270
+ "description": "Report types, shown as tabs when there are two or more. `type` defaults to the first.",
10271
+ "type": "ReportOption[]"
10272
+ },
10273
+ {
10274
+ "name": "groupBys",
10275
+ "description": "Group by options; those with a `category` are listed under its heading.",
10276
+ "type": "ReportOption[]"
10277
+ },
10278
+ {
10279
+ "name": "filterFields",
10280
+ "description": "Fields for the funnel's filter builder. The funnel is hidden when there are none.",
10281
+ "type": "ReportFilterField[]"
10282
+ },
10283
+ {
10284
+ "name": "presets",
10285
+ "description": "Quick ranges for the date range, replacing the default ones.",
10286
+ "type": "DatePreset[] | undefined"
10287
+ },
10288
+ {
10289
+ "name": "maxDate",
10290
+ "description": "The latest day that can be picked. Defaults to today.",
10291
+ "type": "string"
10292
+ },
10293
+ {
10294
+ "name": "dateNote",
10295
+ "description": "A short line shown under the date range's calendar.",
10296
+ "type": "string"
10297
+ },
10298
+ { "name": "searchPlaceholder", "type": "string" },
10299
+ {
10300
+ "name": "sharable",
10301
+ "description": "Mirrors the type, group by, dates, filter and search to the URL query string, and reads them back on load.",
10302
+ "type": "boolean"
10303
+ },
10304
+ {
10305
+ "name": "hideEmptyColumns",
10306
+ "description": "Leaves out columns that are zero or empty in every row, and groups left without columns.",
10307
+ "type": "boolean"
10308
+ },
10309
+ {
10310
+ "name": "selectable",
10311
+ "description": "Gives each row a tick box that highlights it, with one in the heading for every row shown.",
10312
+ "type": "boolean"
10313
+ },
10314
+ {
10315
+ "name": "heatmap",
10316
+ "description": "Shades number cells by their size against the largest in their column.",
10317
+ "type": "boolean"
10318
+ }
10319
+ ],
10320
+ "events": [
10321
+ {
10322
+ "name": "zn-report-change",
10323
+ "description": "Emitted when the type, group by, date range or filter is changed, before the report is fetched again."
10324
+ }
10325
+ ]
10326
+ }
10327
+ },
8796
10328
  {
8797
10329
  "name": "zn-reveal",
8798
10330
  "description": "Short summary of the component's intended use.\n\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.",
@@ -9296,6 +10828,11 @@
9296
10828
  "description": "The select's required attribute.",
9297
10829
  "value": { "type": "boolean", "default": "false" }
9298
10830
  },
10831
+ {
10832
+ "name": "label-note",
10833
+ "description": "Short text shown next to the label, styled like the help text, e.g. `optional`.",
10834
+ "value": { "type": "string", "default": "''" }
10835
+ },
9299
10836
  {
9300
10837
  "name": "cache-key",
9301
10838
  "value": { "type": "string", "default": "\"\"" }
@@ -9569,6 +11106,11 @@
9569
11106
  "description": "The select's required attribute.",
9570
11107
  "type": "boolean"
9571
11108
  },
11109
+ {
11110
+ "name": "labelNote",
11111
+ "description": "Short text shown next to the label, styled like the help text, e.g. `optional`.",
11112
+ "type": "string"
11113
+ },
9572
11114
  { "name": "cacheKey", "type": "string" },
9573
11115
  { "name": "triggerSubmit", "type": "boolean" },
9574
11116
  {
@@ -9842,8 +11384,8 @@
9842
11384
  },
9843
11385
  {
9844
11386
  "name": "radius",
9845
- "description": "Border radius of the skeleton element. Default: \"4px\"",
9846
- "value": { "type": "string", "default": "'4px'" }
11387
+ "description": "Border radius of the skeleton element. Defaults to the theme's `--zn-skeleton-border-radius` (4px).",
11388
+ "value": { "type": "string", "default": "''" }
9847
11389
  }
9848
11390
  ],
9849
11391
  "events": [],
@@ -9866,7 +11408,7 @@
9866
11408
  },
9867
11409
  {
9868
11410
  "name": "radius",
9869
- "description": "Border radius of the skeleton element. Default: \"4px\"",
11411
+ "description": "Border radius of the skeleton element. Defaults to the theme's `--zn-skeleton-border-radius` (4px).",
9870
11412
  "type": "string"
9871
11413
  }
9872
11414
  ],
@@ -10568,12 +12110,45 @@
10568
12110
  },
10569
12111
  {
10570
12112
  "name": "layout",
10571
- "description": "`value-first` puts the amount under the caption with the description beneath it, and tints the amount rather\nthan the description with `color`.",
12113
+ "description": "`value-first` puts the amount under the caption with the description beneath it, and tints the amount rather\nthan the description with `color`. `tile` is a self-contained card: caption, amount, a footer with the delta and\n`description`, an optional sparkline, and the default slot beneath.",
10572
12114
  "value": {
10573
- "type": "'default' | 'value-first'",
12115
+ "type": "'default' | 'value-first' | 'tile'",
10574
12116
  "default": "'default'"
10575
12117
  }
10576
12118
  },
12119
+ {
12120
+ "name": "spark",
12121
+ "description": "Comma-separated values drawn as a sparkline under a `tile`.",
12122
+ "value": { "type": "string", "default": "''" }
12123
+ },
12124
+ {
12125
+ "name": "spark-color",
12126
+ "description": "The sparkline's colour: a tone (`primary`, `info`, `success`, `warning`, `danger`, `ai`) or any CSS colour.",
12127
+ "value": { "type": "string", "default": "''" }
12128
+ },
12129
+ {
12130
+ "name": "invert-delta",
12131
+ "description": "Treats a rise as bad news, so an increase is coloured as a loss (declines, refunds, failures).",
12132
+ "value": { "type": "boolean", "default": "false" }
12133
+ },
12134
+ {
12135
+ "name": "tone",
12136
+ "description": "A coloured dot before a `tile`'s caption.",
12137
+ "value": {
12138
+ "type": "'' | 'info' | 'success' | 'warning' | 'danger' | 'neutral'",
12139
+ "default": "''"
12140
+ }
12141
+ },
12142
+ {
12143
+ "name": "selectable",
12144
+ "description": "Renders a `tile` as a toggle button, for tiles that filter the content below them.",
12145
+ "value": { "type": "boolean", "default": "false" }
12146
+ },
12147
+ {
12148
+ "name": "selected",
12149
+ "description": "Whether a `selectable` tile is pressed, or a linked tile marks the view the page is showing.",
12150
+ "value": { "type": "boolean", "default": "false" }
12151
+ },
10577
12152
  {
10578
12153
  "name": "delta-format",
10579
12154
  "description": "How `show-delta` compares with `previous`: the relative change, or the difference in points.",
@@ -10593,13 +12168,30 @@
10593
12168
  "value": { "type": "IconColor" }
10594
12169
  },
10595
12170
  {
10596
- "name": "size",
10597
- "description": "`large` gives the amount more weight, for a summary row of a few headline figures.",
10598
- "value": { "type": "'medium' | 'large'", "default": "'medium'" }
12171
+ "name": "size",
12172
+ "description": "`large` gives the amount more weight, for a summary row of a few headline figures.",
12173
+ "value": { "type": "'medium' | 'large'", "default": "'medium'" }
12174
+ },
12175
+ {
12176
+ "name": "padded",
12177
+ "description": "Pads the stat, for stats laid edge to edge in a flush container such as `zn-cols no-gap divide`.",
12178
+ "value": { "type": "boolean", "default": "false" }
12179
+ },
12180
+ {
12181
+ "name": "href",
12182
+ "description": "Makes the whole stat a link, marked with an arrow in its corner.",
12183
+ "value": { "type": "string" }
12184
+ },
12185
+ { "name": "data-target", "value": { "type": "string" } },
12186
+ { "name": "gaid", "value": { "type": "string" } },
12187
+ {
12188
+ "name": "data-url",
12189
+ "description": "JSON fetched once to fill the stat: any of `caption`, `amount`, `description`, `previous`, `spark` and\n`sparkColor`. The stat's own attributes show until it loads.",
12190
+ "value": { "type": "string", "default": "''" }
10599
12191
  },
10600
12192
  {
10601
- "name": "padded",
10602
- "description": "Pads the stat, for stats laid edge to edge in a flush container such as `zn-cols no-gap divide`.",
12193
+ "name": "loading",
12194
+ "description": "Shows a `tile` as a placeholder. Set while `data-url` loads; the sparkline draws in once it clears.",
10603
12195
  "value": { "type": "boolean", "default": "false" }
10604
12196
  }
10605
12197
  ],
@@ -10619,8 +12211,38 @@
10619
12211
  },
10620
12212
  {
10621
12213
  "name": "layout",
10622
- "description": "`value-first` puts the amount under the caption with the description beneath it, and tints the amount rather\nthan the description with `color`.",
10623
- "type": "'default' | 'value-first'"
12214
+ "description": "`value-first` puts the amount under the caption with the description beneath it, and tints the amount rather\nthan the description with `color`. `tile` is a self-contained card: caption, amount, a footer with the delta and\n`description`, an optional sparkline, and the default slot beneath.",
12215
+ "type": "'default' | 'value-first' | 'tile'"
12216
+ },
12217
+ {
12218
+ "name": "spark",
12219
+ "description": "Comma-separated values drawn as a sparkline under a `tile`.",
12220
+ "type": "string"
12221
+ },
12222
+ {
12223
+ "name": "sparkColor",
12224
+ "description": "The sparkline's colour: a tone (`primary`, `info`, `success`, `warning`, `danger`, `ai`) or any CSS colour.",
12225
+ "type": "string"
12226
+ },
12227
+ {
12228
+ "name": "invertDelta",
12229
+ "description": "Treats a rise as bad news, so an increase is coloured as a loss (declines, refunds, failures).",
12230
+ "type": "boolean"
12231
+ },
12232
+ {
12233
+ "name": "tone",
12234
+ "description": "A coloured dot before a `tile`'s caption.",
12235
+ "type": "'' | 'info' | 'success' | 'warning' | 'danger' | 'neutral'"
12236
+ },
12237
+ {
12238
+ "name": "selectable",
12239
+ "description": "Renders a `tile` as a toggle button, for tiles that filter the content below them.",
12240
+ "type": "boolean"
12241
+ },
12242
+ {
12243
+ "name": "selected",
12244
+ "description": "Whether a `selectable` tile is pressed, or a linked tile marks the view the page is showing.",
12245
+ "type": "boolean"
10624
12246
  },
10625
12247
  {
10626
12248
  "name": "deltaFormat",
@@ -10646,6 +12268,23 @@
10646
12268
  "name": "padded",
10647
12269
  "description": "Pads the stat, for stats laid edge to edge in a flush container such as `zn-cols no-gap divide`.",
10648
12270
  "type": "boolean"
12271
+ },
12272
+ {
12273
+ "name": "href",
12274
+ "description": "Makes the whole stat a link, marked with an arrow in its corner.",
12275
+ "type": "string"
12276
+ },
12277
+ { "name": "dataTarget", "type": "string" },
12278
+ { "name": "gaid", "type": "string" },
12279
+ {
12280
+ "name": "dataUrl",
12281
+ "description": "JSON fetched once to fill the stat: any of `caption`, `amount`, `description`, `previous`, `spark` and\n`sparkColor`. The stat's own attributes show until it loads.",
12282
+ "type": "string"
12283
+ },
12284
+ {
12285
+ "name": "loading",
12286
+ "description": "Shows a `tile` as a placeholder. Set while `data-url` loads; the sparkline draws in once it clears.",
12287
+ "type": "boolean"
10649
12288
  }
10650
12289
  ],
10651
12290
  "events": []
@@ -10856,6 +12495,7 @@
10856
12495
  "doc-url": "",
10857
12496
  "attributes": [
10858
12497
  { "name": "caption", "value": { "type": "string" } },
12498
+ { "name": "icon", "value": { "type": "string" } },
10859
12499
  { "name": "priority", "value": { "type": "number" } },
10860
12500
  { "name": "uri", "value": { "type": "string" } },
10861
12501
  {
@@ -10869,6 +12509,7 @@
10869
12509
  "js": {
10870
12510
  "properties": [
10871
12511
  { "name": "caption", "type": "string" },
12512
+ { "name": "icon", "type": "string" },
10872
12513
  { "name": "priority", "type": "number" },
10873
12514
  { "name": "uri", "type": "string" },
10874
12515
  {
@@ -10978,6 +12619,16 @@
10978
12619
  "name": "padded",
10979
12620
  "value": { "type": "boolean", "default": "false" }
10980
12621
  },
12622
+ {
12623
+ "name": "select-added",
12624
+ "description": "With `store-key`, opens a tab that has appeared since the page was last shown, such as one for an item just\nadded, in place of the remembered tab.",
12625
+ "value": { "type": "boolean", "default": "false" }
12626
+ },
12627
+ {
12628
+ "name": "gap",
12629
+ "description": "Spaces a left or right slot from the content, for side navigation laid out as its own card.",
12630
+ "value": { "type": "boolean", "default": "false" }
12631
+ },
10981
12632
  {
10982
12633
  "name": "fetch-style",
10983
12634
  "value": { "type": "string", "default": "\"\"" }
@@ -11018,6 +12669,16 @@
11018
12669
  { "name": "storeKey", "type": "string" },
11019
12670
  { "name": "storeTtl", "type": "number" },
11020
12671
  { "name": "padded", "type": "boolean" },
12672
+ {
12673
+ "name": "selectAdded",
12674
+ "description": "With `store-key`, opens a tab that has appeared since the page was last shown, such as one for an item just\nadded, in place of the remembered tab.",
12675
+ "type": "boolean"
12676
+ },
12677
+ {
12678
+ "name": "gap",
12679
+ "description": "Spaces a left or right slot from the content, for side navigation laid out as its own card.",
12680
+ "type": "boolean"
12681
+ },
11021
12682
  { "name": "fetchStyle", "type": "string" },
11022
12683
  { "name": "fullWidth", "type": "boolean" },
11023
12684
  { "name": "paddedRight", "type": "boolean" },
@@ -11121,6 +12782,11 @@
11121
12782
  "description": "Makes the textarea a required field.",
11122
12783
  "value": { "type": "boolean", "default": "false" }
11123
12784
  },
12785
+ {
12786
+ "name": "label-note",
12787
+ "description": "Short text shown next to the label, styled like the help text, e.g. `optional`.",
12788
+ "value": { "type": "string", "default": "''" }
12789
+ },
11124
12790
  {
11125
12791
  "name": "minlength",
11126
12792
  "description": "The minimum length of input that will be considered valid.",
@@ -11341,6 +13007,11 @@
11341
13007
  "description": "Makes the textarea a required field.",
11342
13008
  "type": "boolean"
11343
13009
  },
13010
+ {
13011
+ "name": "labelNote",
13012
+ "description": "Short text shown next to the label, styled like the help text, e.g. `optional`.",
13013
+ "type": "string"
13014
+ },
11344
13015
  {
11345
13016
  "name": "minlength",
11346
13017
  "description": "The minimum length of input that will be considered valid.",
@@ -12109,11 +13780,24 @@
12109
13780
  },
12110
13781
  {
12111
13782
  "name": "zn-tile",
12112
- "description": "Short summary of the component's intended use.\n\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.",
13783
+ "description": "Short summary of the component's intended use.\n\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-tile-hover-caption-color** - The caption color while a linked tile is hovered. _(default: undefined)_\n- **--zn-tile-hover-caption-decoration** - The caption text decoration while a linked tile is hovered. _(default: undefined)_\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **icon** - The tinted square around the icon.",
12113
13784
  "doc-url": "",
12114
13785
  "attributes": [
12115
13786
  { "name": "caption", "value": { "type": "string" } },
12116
13787
  { "name": "description", "value": { "type": "string" } },
13788
+ {
13789
+ "name": "icon",
13790
+ "description": "Shows the icon in a tinted square before the caption.",
13791
+ "value": { "type": "string" }
13792
+ },
13793
+ {
13794
+ "name": "icon-color",
13795
+ "description": "The tint of the icon square: `success`, `warning`, `danger`, `info`, `ai` or `neutral`.",
13796
+ "value": {
13797
+ "type": "'success' | 'warning' | 'danger' | 'info' | 'ai' | 'neutral'",
13798
+ "default": "'neutral'"
13799
+ }
13800
+ },
12117
13801
  { "name": "href", "value": { "type": "string" } },
12118
13802
  { "name": "data-target", "value": { "type": "string" } },
12119
13803
  { "name": "gaid", "value": { "type": "string" } },
@@ -12149,6 +13833,16 @@
12149
13833
  "properties": [
12150
13834
  { "name": "caption", "type": "string" },
12151
13835
  { "name": "description", "type": "string" },
13836
+ {
13837
+ "name": "icon",
13838
+ "description": "Shows the icon in a tinted square before the caption.",
13839
+ "type": "string"
13840
+ },
13841
+ {
13842
+ "name": "iconColor",
13843
+ "description": "The tint of the icon square: `success`, `warning`, `danger`, `info`, `ai` or `neutral`.",
13844
+ "type": "'success' | 'warning' | 'danger' | 'info' | 'ai' | 'neutral'"
13845
+ },
12152
13846
  { "name": "href", "type": "string" },
12153
13847
  { "name": "dataTarget", "type": "string" },
12154
13848
  { "name": "gaid", "type": "string" },
@@ -12266,7 +13960,7 @@
12266
13960
  },
12267
13961
  {
12268
13962
  "name": "zn-toggle",
12269
- "description": "Toggles allow the user to switch an option on or off.\n\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.",
13963
+ "description": "Toggles allow the user to switch an option on or off.\n\n---\n\n\n### **Events:**\n - **zn-input** - Emitted when the toggle receives input.\n- **zn-change** - Emitted when the toggle is switched on or off.\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.",
12270
13964
  "doc-url": "",
12271
13965
  "attributes": [
12272
13966
  {
@@ -12352,11 +14046,16 @@
12352
14046
  {
12353
14047
  "name": "zn-input",
12354
14048
  "description": "Emitted when the toggle receives input."
14049
+ },
14050
+ {
14051
+ "name": "zn-change",
14052
+ "description": "Emitted when the toggle is switched on or off."
12355
14053
  }
12356
14054
  ],
12357
14055
  "js": {
12358
14056
  "properties": [
12359
14057
  { "name": "input", "type": "HTMLInputElement" },
14058
+ { "name": "knob", "type": "HTMLElement" },
12360
14059
  { "name": "hasFocus", "type": "boolean" },
12361
14060
  { "name": "title", "type": "string" },
12362
14061
  { "name": "name", "type": "string" },
@@ -12391,6 +14090,10 @@
12391
14090
  {
12392
14091
  "name": "zn-input",
12393
14092
  "description": "Emitted when the toggle receives input."
14093
+ },
14094
+ {
14095
+ "name": "zn-change",
14096
+ "description": "Emitted when the toggle is switched on or off."
12394
14097
  }
12395
14098
  ]
12396
14099
  }
@@ -12498,9 +14201,186 @@
12498
14201
  ]
12499
14202
  }
12500
14203
  },
14204
+ {
14205
+ "name": "zn-translation-field",
14206
+ "description": "A field's source text beside the control that translates it.\n\n---\n\n\n### **Slots:**\n - _default_ - The control the translation is written in, such as a `zn-input` with the language code as its prefix.\n- **source** - The source text, shown read-only.\n- **actions** - Actions beside the label.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.\n- **source** - The box holding the source.",
14207
+ "doc-url": "",
14208
+ "attributes": [
14209
+ { "name": "label", "value": { "type": "string", "default": "''" } },
14210
+ {
14211
+ "name": "source-code",
14212
+ "description": "The source's language code, shown beside it.",
14213
+ "value": { "type": "string", "default": "''" }
14214
+ },
14215
+ {
14216
+ "name": "multiline",
14217
+ "description": "For source text that runs over several lines, such as a message body.",
14218
+ "value": { "type": "boolean", "default": "false" }
14219
+ },
14220
+ {
14221
+ "name": "offset",
14222
+ "description": "Lines the source up with a control that has a toolbar above it, such as a compact `zn-editor`.",
14223
+ "value": { "type": "boolean", "default": "false" }
14224
+ }
14225
+ ],
14226
+ "slots": [
14227
+ {
14228
+ "name": "",
14229
+ "description": "The control the translation is written in, such as a `zn-input` with the language code as its prefix."
14230
+ },
14231
+ {
14232
+ "name": "source",
14233
+ "description": "The source text, shown read-only."
14234
+ },
14235
+ { "name": "actions", "description": "Actions beside the label." }
14236
+ ],
14237
+ "events": [],
14238
+ "js": {
14239
+ "properties": [
14240
+ { "name": "label", "type": "string" },
14241
+ {
14242
+ "name": "sourceCode",
14243
+ "description": "The source's language code, shown beside it.",
14244
+ "type": "string"
14245
+ },
14246
+ {
14247
+ "name": "multiline",
14248
+ "description": "For source text that runs over several lines, such as a message body.",
14249
+ "type": "boolean"
14250
+ },
14251
+ {
14252
+ "name": "offset",
14253
+ "description": "Lines the source up with a control that has a toolbar above it, such as a compact `zn-editor`.",
14254
+ "type": "boolean"
14255
+ }
14256
+ ],
14257
+ "events": []
14258
+ }
14259
+ },
14260
+ {
14261
+ "name": "zn-translation-fields",
14262
+ "description": "Lays out `zn-translation-field`s with their source beside or above the translation, chosen by the viewer.\n\n---\n\n\n### **Slots:**\n - _default_ - The `zn-translation-field`s.\n- **actions** - Actions level with the layout switch.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
14263
+ "doc-url": "",
14264
+ "attributes": [
14265
+ {
14266
+ "name": "layout",
14267
+ "value": {
14268
+ "type": "TranslationFieldsLayout",
14269
+ "default": "'split'"
14270
+ }
14271
+ },
14272
+ {
14273
+ "name": "store-key",
14274
+ "description": "Remembers the viewer's layout under this key in `localStorage`; leave empty to forget it.",
14275
+ "value": {
14276
+ "type": "string",
14277
+ "default": "'zn-translation-fields-layout'"
14278
+ }
14279
+ }
14280
+ ],
14281
+ "slots": [
14282
+ { "name": "", "description": "The `zn-translation-field`s." },
14283
+ {
14284
+ "name": "actions",
14285
+ "description": "Actions level with the layout switch."
14286
+ }
14287
+ ],
14288
+ "events": [],
14289
+ "js": {
14290
+ "properties": [
14291
+ { "name": "layout", "type": "TranslationFieldsLayout" },
14292
+ {
14293
+ "name": "storeKey",
14294
+ "description": "Remembers the viewer's layout under this key in `localStorage`; leave empty to forget it.",
14295
+ "type": "string"
14296
+ }
14297
+ ],
14298
+ "events": []
14299
+ }
14300
+ },
14301
+ {
14302
+ "name": "zn-translation-grid",
14303
+ "description": "Shows how far each language's translation has got, with a column per language to choose and enable it,\nand optionally a row per translated field.\n\n---\n\n\n### **Slots:**\n - _default_ - Help text under the legend.\n- **enable-{code}** - The control that enables the language with that code, such as a `zn-checkbox` in a form. The Enable row only shows when at least one is given.\n\n### **CSS Parts:**\n - **base** - The component's base wrapper.",
14304
+ "doc-url": "",
14305
+ "attributes": [
14306
+ {
14307
+ "name": "languages",
14308
+ "description": "The languages, in column order, as a JSON array of `{code, label, status, href}`.",
14309
+ "value": { "type": "TranslationGridLanguage[]", "default": "[]" }
14310
+ },
14311
+ {
14312
+ "name": "fields",
14313
+ "description": "A row per translated field, as a JSON array of `{key, label, cells}`; without it there is one Translation row.",
14314
+ "value": { "type": "TranslationGridField[]", "default": "[]" }
14315
+ },
14316
+ {
14317
+ "name": "selected",
14318
+ "description": "The code of the language being edited.",
14319
+ "value": { "type": "string", "default": "''" }
14320
+ },
14321
+ {
14322
+ "name": "selected-field",
14323
+ "description": "The key of the field being edited, when there are `fields`.",
14324
+ "value": { "type": "string", "default": "''" }
14325
+ },
14326
+ {
14327
+ "name": "link-target",
14328
+ "description": "Where the language links open, as a console `data-target`; `self` replaces the content they sit in.",
14329
+ "value": { "type": "string", "default": "''" }
14330
+ },
14331
+ {
14332
+ "name": "source-label",
14333
+ "description": "Names the source in the legend, such as \"English changed\".",
14334
+ "value": { "type": "string", "default": "'English'" }
14335
+ }
14336
+ ],
14337
+ "slots": [
14338
+ { "name": "", "description": "Help text under the legend." },
14339
+ {
14340
+ "name": "enable-{code}",
14341
+ "description": "The control that enables the language with that code, such as a `zn-checkbox` in a form. The Enable row only shows when at least one is given."
14342
+ }
14343
+ ],
14344
+ "events": [],
14345
+ "js": {
14346
+ "properties": [
14347
+ {
14348
+ "name": "languages",
14349
+ "description": "The languages, in column order, as a JSON array of `{code, label, status, href}`.",
14350
+ "type": "TranslationGridLanguage[]"
14351
+ },
14352
+ {
14353
+ "name": "fields",
14354
+ "description": "A row per translated field, as a JSON array of `{key, label, cells}`; without it there is one Translation row.",
14355
+ "type": "TranslationGridField[]"
14356
+ },
14357
+ {
14358
+ "name": "selected",
14359
+ "description": "The code of the language being edited.",
14360
+ "type": "string"
14361
+ },
14362
+ {
14363
+ "name": "selectedField",
14364
+ "description": "The key of the field being edited, when there are `fields`.",
14365
+ "type": "string"
14366
+ },
14367
+ {
14368
+ "name": "linkTarget",
14369
+ "description": "Where the language links open, as a console `data-target`; `self` replaces the content they sit in.",
14370
+ "type": "string"
14371
+ },
14372
+ {
14373
+ "name": "sourceLabel",
14374
+ "description": "Names the source in the legend, such as \"English changed\".",
14375
+ "type": "string"
14376
+ }
14377
+ ],
14378
+ "events": []
14379
+ }
14380
+ },
12501
14381
  {
12502
14382
  "name": "zn-translation-group",
12503
- "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\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.",
14383
+ "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\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- **--zn-panel-padding** - Padding around the body. Defaults to `--zn-base-gap`. _(default: undefined)_\n- **--zn-panel-shadow** - Resting shadow. Defaults to none. _(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- **header-left** - The caption and description, forwarded from zn-header.\n- **footer** - The footer region, when the footer slot is filled.",
12504
14384
  "doc-url": "",
12505
14385
  "attributes": [
12506
14386
  {
@@ -12533,6 +14413,16 @@
12533
14413
  },
12534
14414
  { "name": "basis-px", "value": { "type": "number" } },
12535
14415
  { "name": "caption", "value": { "type": "string" } },
14416
+ {
14417
+ "name": "description",
14418
+ "description": "Help text under the caption, in the panel's header.",
14419
+ "value": { "type": "string" }
14420
+ },
14421
+ {
14422
+ "name": "inline-description",
14423
+ "description": "Sets the description beside the caption rather than under it.",
14424
+ "value": { "type": "boolean", "default": "false" }
14425
+ },
12536
14426
  { "name": "icon", "value": { "type": "string" } },
12537
14427
  { "name": "tabbed", "value": { "type": "boolean" } },
12538
14428
  { "name": "header-borderless", "value": { "type": "boolean" } },
@@ -12593,6 +14483,16 @@
12593
14483
  },
12594
14484
  { "name": "basis", "type": "number" },
12595
14485
  { "name": "caption", "type": "string" },
14486
+ {
14487
+ "name": "description",
14488
+ "description": "Help text under the caption, in the panel's header.",
14489
+ "type": "string"
14490
+ },
14491
+ {
14492
+ "name": "inlineDescription",
14493
+ "description": "Sets the description beside the caption rather than under it.",
14494
+ "type": "boolean"
14495
+ },
12596
14496
  { "name": "icon", "type": "string" },
12597
14497
  { "name": "tabbed", "type": "boolean" },
12598
14498
  { "name": "headerBorderless", "type": "boolean" },
@@ -12903,7 +14803,7 @@
12903
14803
  },
12904
14804
  {
12905
14805
  "name": "zn-vertical-stepper",
12906
- "description": "Vertical steppers display a sequence of steps in a vertical layout with descriptions and optional icons.\n\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.",
14806
+ "description": "Vertical steppers display a sequence of steps in a vertical layout with descriptions and optional icons.\n\n---\n\n\n### **Slots:**\n - _default_ - Content below the caption and description, such as metadata or chips.\n- **icon** - Optional slot for adding an icon or indicator before the step content.\n- **suffix** - Inline content after the caption and description, such as status chips.\n- **actions** - Controls aligned to the end of the step.\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.\n- **vs__content** - The container for the default slot.\n- **vs__actions** - The container for the actions slot.",
12907
14807
  "doc-url": "",
12908
14808
  "attributes": [
12909
14809
  {
@@ -12930,12 +14830,44 @@
12930
14830
  "name": "caption",
12931
14831
  "description": "The main label/title for this step.",
12932
14832
  "value": { "type": "string" }
14833
+ },
14834
+ {
14835
+ "name": "type",
14836
+ "description": "Marker colour: neutral, primary, success, error, warning, info or ai (AI-generated steps only). Overrides `active`.",
14837
+ "value": { "type": "string" }
14838
+ },
14839
+ {
14840
+ "name": "selected",
14841
+ "description": "When true, rings the marker to show the step is picked.",
14842
+ "value": { "type": "boolean", "default": "false" }
14843
+ },
14844
+ {
14845
+ "name": "dashed",
14846
+ "description": "When true, draws the marker's border dashed, for a step that is not yet final.",
14847
+ "value": { "type": "boolean", "default": "false" }
14848
+ },
14849
+ {
14850
+ "name": "highlight-line",
14851
+ "description": "When true, colours the line below this step's marker, joining it to the next step.",
14852
+ "value": { "type": "boolean", "default": "false" }
12933
14853
  }
12934
14854
  ],
12935
14855
  "slots": [
14856
+ {
14857
+ "name": "",
14858
+ "description": "Content below the caption and description, such as metadata or chips."
14859
+ },
12936
14860
  {
12937
14861
  "name": "icon",
12938
14862
  "description": "Optional slot for adding an icon or indicator before the step content."
14863
+ },
14864
+ {
14865
+ "name": "suffix",
14866
+ "description": "Inline content after the caption and description, such as status chips."
14867
+ },
14868
+ {
14869
+ "name": "actions",
14870
+ "description": "Controls aligned to the end of the step."
12939
14871
  }
12940
14872
  ],
12941
14873
  "events": [],
@@ -12965,6 +14897,26 @@
12965
14897
  "name": "caption",
12966
14898
  "description": "The main label/title for this step.",
12967
14899
  "type": "string"
14900
+ },
14901
+ {
14902
+ "name": "type",
14903
+ "description": "Marker colour: neutral, primary, success, error, warning, info or ai (AI-generated steps only). Overrides `active`.",
14904
+ "type": "string"
14905
+ },
14906
+ {
14907
+ "name": "selected",
14908
+ "description": "When true, rings the marker to show the step is picked.",
14909
+ "type": "boolean"
14910
+ },
14911
+ {
14912
+ "name": "dashed",
14913
+ "description": "When true, draws the marker's border dashed, for a step that is not yet final.",
14914
+ "type": "boolean"
14915
+ },
14916
+ {
14917
+ "name": "highlightLine",
14918
+ "description": "When true, colours the line below this step's marker, joining it to the next step.",
14919
+ "type": "boolean"
12968
14920
  }
12969
14921
  ],
12970
14922
  "events": []