@kerfjs/ui 5.0.0-beta.54 → 5.0.0-beta.56

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 (274) hide show
  1. package/README.md +14 -11
  2. package/ai/compile-time-contracts-v1.json +2 -2
  3. package/ai/component-catalog-v2.json +206 -39
  4. package/ai/component-catalog.json +306 -58
  5. package/ai/public-api-signatures-v1.md +671 -92
  6. package/ai/skill.md +43 -38
  7. package/ai/webawesome-jsx-signatures-v1.md +8 -2
  8. package/dist/app-tab.js +1 -1
  9. package/dist/badge.d.ts +35 -7
  10. package/dist/badge.js +1 -1
  11. package/dist/browser/content-item.js +3 -0
  12. package/dist/browser/popup-menu.js +3 -0
  13. package/dist/browser/select.js +1 -0
  14. package/dist/catalog-resources.d.ts +12 -1
  15. package/dist/catalog.d.ts +21 -4
  16. package/dist/catalog.js +260 -308
  17. package/dist/catalog.js.map +1 -1
  18. package/dist/{chunk-7IUSV4XG.js → chunk-24PHKUR3.js} +2 -2
  19. package/dist/chunk-24PHKUR3.js.map +1 -0
  20. package/dist/{chunk-WZ2GLEY4.js → chunk-2G2ZJQYK.js} +2 -14
  21. package/dist/chunk-2G2ZJQYK.js.map +1 -0
  22. package/dist/{chunk-D7GWXIAS.js → chunk-5I7QGQVT.js} +1 -1
  23. package/dist/chunk-5I7QGQVT.js.map +1 -0
  24. package/dist/{chunk-HJKRCKDR.js → chunk-63ZWBGE3.js} +6 -3
  25. package/dist/chunk-63ZWBGE3.js.map +1 -0
  26. package/dist/{chunk-44IG7PFV.js → chunk-6CINWX2E.js} +3 -3
  27. package/dist/{chunk-44IG7PFV.js.map → chunk-6CINWX2E.js.map} +1 -1
  28. package/dist/{chunk-C2FAYFDE.js → chunk-AGXQQFKZ.js} +2 -2
  29. package/dist/{chunk-C2FAYFDE.js.map → chunk-AGXQQFKZ.js.map} +1 -1
  30. package/dist/{chunk-ATHXW6RP.js → chunk-AHEG27M7.js} +2 -2
  31. package/dist/{chunk-ATHXW6RP.js.map → chunk-AHEG27M7.js.map} +1 -1
  32. package/dist/{chunk-7GUQYHKA.js → chunk-AK67F6QN.js} +4 -1
  33. package/dist/chunk-AK67F6QN.js.map +1 -0
  34. package/dist/chunk-BFPBS5Y4.js +250 -0
  35. package/dist/chunk-BFPBS5Y4.js.map +1 -0
  36. package/dist/chunk-DG6G5EPF.js +35 -0
  37. package/dist/chunk-DG6G5EPF.js.map +1 -0
  38. package/dist/{chunk-MTM43SJO.js → chunk-G33XC2NB.js} +1 -1
  39. package/dist/chunk-G33XC2NB.js.map +1 -0
  40. package/dist/{chunk-TZ5IHWB2.js → chunk-K6UNVKDK.js} +3 -3
  41. package/dist/{chunk-TZ5IHWB2.js.map → chunk-K6UNVKDK.js.map} +1 -1
  42. package/dist/chunk-KH6VUGHU.js +399 -0
  43. package/dist/chunk-KH6VUGHU.js.map +1 -0
  44. package/dist/{chunk-HMQ2ZDGG.js → chunk-KROD7KZK.js} +3 -2
  45. package/dist/chunk-KROD7KZK.js.map +1 -0
  46. package/dist/{chunk-5NDQABWK.js → chunk-M7QV3IHH.js} +3 -1
  47. package/dist/chunk-M7QV3IHH.js.map +1 -0
  48. package/dist/{chunk-RNZAKSME.js → chunk-MA6Z6EIM.js} +3 -3
  49. package/dist/{chunk-RNZAKSME.js.map → chunk-MA6Z6EIM.js.map} +1 -1
  50. package/dist/chunk-MA73TA6D.js +42 -0
  51. package/dist/chunk-MA73TA6D.js.map +1 -0
  52. package/dist/{chunk-ZMBU522F.js → chunk-MEY33VWB.js} +2 -2
  53. package/dist/{chunk-ZMBU522F.js.map → chunk-MEY33VWB.js.map} +1 -1
  54. package/dist/{chunk-T22EM4ET.js → chunk-MOBRFZH3.js} +81 -31
  55. package/dist/chunk-MOBRFZH3.js.map +1 -0
  56. package/dist/chunk-MP2GDBQZ.js +50 -0
  57. package/dist/chunk-MP2GDBQZ.js.map +1 -0
  58. package/dist/{chunk-3NBL3OUQ.js → chunk-NAPE7WUS.js} +2 -2
  59. package/dist/chunk-NAPE7WUS.js.map +1 -0
  60. package/dist/{chunk-CMUIXJZM.js → chunk-NBYTIVHS.js} +2 -2
  61. package/dist/{chunk-CMUIXJZM.js.map → chunk-NBYTIVHS.js.map} +1 -1
  62. package/dist/chunk-O3EXIBEZ.js +114 -0
  63. package/dist/chunk-O3EXIBEZ.js.map +1 -0
  64. package/dist/{chunk-KPNTVB7A.js → chunk-PK4N5QTO.js} +8 -7
  65. package/dist/chunk-PK4N5QTO.js.map +1 -0
  66. package/dist/chunk-QQOTQTDD.js +415 -0
  67. package/dist/chunk-QQOTQTDD.js.map +1 -0
  68. package/dist/{chunk-BJJKFVWW.js → chunk-T4UZTNZ4.js} +5 -5
  69. package/dist/chunk-T4UZTNZ4.js.map +1 -0
  70. package/dist/chunk-V65EOWNF.js +83 -0
  71. package/dist/chunk-V65EOWNF.js.map +1 -0
  72. package/dist/{chunk-GUIHMIT2.js → chunk-VNPQDCQZ.js} +3 -3
  73. package/dist/{chunk-GUIHMIT2.js.map → chunk-VNPQDCQZ.js.map} +1 -1
  74. package/dist/{chunk-5I22LMCV.js → chunk-VZOFZPSO.js} +2 -2
  75. package/dist/chunk-VZOFZPSO.js.map +1 -0
  76. package/dist/chunk-WLG6SSNT.js +94 -0
  77. package/dist/chunk-WLG6SSNT.js.map +1 -0
  78. package/dist/{chunk-NE5JAOQS.js → chunk-WOUF7YXM.js} +3 -3
  79. package/dist/{chunk-NE5JAOQS.js.map → chunk-WOUF7YXM.js.map} +1 -1
  80. package/dist/collapsible-panel.d.ts +51 -13
  81. package/dist/collapsible-panel.js +38 -10
  82. package/dist/collapsible-panel.js.map +1 -1
  83. package/dist/content-item.d.ts +46 -0
  84. package/dist/content-item.js +4 -0
  85. package/dist/content-item.js.map +1 -0
  86. package/dist/css-values.d.ts +5 -11
  87. package/dist/css-values.js +1 -1
  88. package/dist/disclosure-arrow.d.ts +4 -1
  89. package/dist/disclosure-arrow.js +1 -1
  90. package/dist/floating-toolbar.d.ts +17 -6
  91. package/dist/floating-toolbar.js +1 -1
  92. package/dist/grid.js +1 -1
  93. package/dist/help-tags-register.d.ts +13 -0
  94. package/dist/help-tags-register.js +9 -0
  95. package/dist/help-tags-register.js.map +1 -0
  96. package/dist/index.d.ts +7 -5
  97. package/dist/index.js +31 -29
  98. package/dist/list-action-row.js +1 -1
  99. package/dist/list-header.d.ts +14 -1
  100. package/dist/list-header.js +1 -1
  101. package/dist/list-inset-control.d.ts +1 -1
  102. package/dist/list-inset-control.js +1 -1
  103. package/dist/list-inset-text.d.ts +9 -10
  104. package/dist/list-inset-text.js +2 -1
  105. package/dist/list-item.js +1 -1
  106. package/dist/list.d.ts +10 -3
  107. package/dist/list.js +1 -1
  108. package/dist/nav-stack.d.ts +38 -5
  109. package/dist/nav-stack.js +4 -1
  110. package/dist/pane.d.ts +20 -2
  111. package/dist/pane.js +1 -1
  112. package/dist/panel-toolbar-C8sF-YZC.d.ts +63 -0
  113. package/dist/popup-menu-register.d.ts +9 -0
  114. package/dist/popup-menu-register.js +31 -0
  115. package/dist/popup-menu-register.js.map +1 -0
  116. package/dist/popup-menu.d.ts +71 -0
  117. package/dist/popup-menu.js +3 -0
  118. package/dist/popup-menu.js.map +1 -0
  119. package/dist/row.d.ts +1 -1
  120. package/dist/row.js +1 -1
  121. package/dist/select-register.js +70 -3
  122. package/dist/select-register.js.map +1 -1
  123. package/dist/select.d.ts +46 -8
  124. package/dist/select.js +2 -1
  125. package/dist/{divider-sides-BzB6rphT.d.ts → sides-BPSWde0A.d.ts} +1 -3
  126. package/dist/skeleton.js +1 -1
  127. package/dist/spacer.js +1 -1
  128. package/dist/split-view.d.ts +31 -3
  129. package/dist/split-view.js +33 -5
  130. package/dist/split-view.js.map +1 -1
  131. package/dist/state-banner.js +1 -1
  132. package/dist/styles/badge.css +13 -0
  133. package/dist/styles/catalog/components/catalog-example.css +1 -17
  134. package/dist/styles/catalog/components/catalog-stage.css +9 -14
  135. package/dist/styles/catalog/components/catalog.css +8 -18
  136. package/dist/styles/catalog.css +0 -5
  137. package/dist/styles/collapsible-panel.css +192 -39
  138. package/dist/styles/content-item.css +30 -0
  139. package/dist/styles/floating-toolbar.css +5 -0
  140. package/dist/styles/foundation.css +28 -19
  141. package/dist/styles/layout.css +1 -21
  142. package/dist/styles/list-action-row.css +13 -1
  143. package/dist/styles/list-inset-text.css +1 -2
  144. package/dist/styles/list-item.css +14 -1
  145. package/dist/styles/list.css +1 -1
  146. package/dist/styles/nav-stack.css +29 -64
  147. package/dist/styles/pane.css +33 -1
  148. package/dist/styles/popup-menu.css +90 -0
  149. package/dist/styles/resizable-region.css +53 -10
  150. package/dist/styles/select.css +39 -12
  151. package/dist/styles/split-view.css +21 -25
  152. package/dist/styles/state-banner.css +13 -4
  153. package/dist/styles/styles.css +1 -0
  154. package/dist/styles/tab-bar.css +31 -3
  155. package/dist/styles/tab-scaffold.css +36 -14
  156. package/dist/styles/text.css +1 -1
  157. package/dist/styles/token-search-field.css +4 -4
  158. package/dist/styles/toolbar-control-group.css +44 -12
  159. package/dist/styles/toolbar.css +57 -7
  160. package/dist/styles/value-table.css +19 -2
  161. package/dist/styles/webawesome.css +3 -1
  162. package/dist/styles/workbench.css +165 -31
  163. package/dist/tab-scaffold.d.ts +35 -1
  164. package/dist/tab-scaffold.js +50 -16
  165. package/dist/tab-scaffold.js.map +1 -1
  166. package/dist/text.js +1 -1
  167. package/dist/token-search-field.d.ts +13 -2
  168. package/dist/token-search-field.js +1 -1
  169. package/dist/toolbar-text.js +1 -1
  170. package/dist/toolbar.d.ts +12 -4
  171. package/dist/toolbar.js +1 -1
  172. package/dist/{types-CEsieBZi.d.ts → types-DXAGogOS.d.ts} +48 -0
  173. package/dist/value-table.js +1 -1
  174. package/dist/webawesome.d.ts +7 -1
  175. package/dist/wire-catalog.d.ts +24 -1
  176. package/dist/wire-catalog.js +26 -3
  177. package/dist/wire-catalog.js.map +1 -1
  178. package/dist/wire-sidebar.js +6 -3
  179. package/dist/wire-sidebar.js.map +1 -1
  180. package/dist/wire-token-search-fields.js +1 -1
  181. package/dist/wire-workbench.js +1 -350
  182. package/dist/wire-workbench.js.map +1 -1
  183. package/dist/workbench.d.ts +144 -6
  184. package/dist/workbench.js +11 -208
  185. package/dist/workbench.js.map +1 -1
  186. package/docs/accessibility.md +126 -6
  187. package/docs/app-layouts.md +9 -7
  188. package/docs/catalog.md +41 -9
  189. package/docs/collapsible-panel.md +79 -5
  190. package/docs/component-contract.md +38 -12
  191. package/docs/component-selection.md +64 -55
  192. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  193. package/docs/design/templates/empty-state/with-action.svg +1 -1
  194. package/docs/design/templates/empty-state-dark.svg +1 -1
  195. package/docs/design/templates/empty-state.svg +1 -1
  196. package/docs/design/templates/list/compact-dark.svg +1 -1
  197. package/docs/design/templates/list/compact.svg +1 -1
  198. package/docs/design/templates/list/stack-dark.svg +1 -1
  199. package/docs/design/templates/list/stack.svg +1 -1
  200. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  201. package/docs/design/templates/list-action-row/default.svg +1 -1
  202. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  203. package/docs/design/templates/list-action-row/selected.svg +1 -1
  204. package/docs/design/templates/list-action-row-dark.svg +1 -1
  205. package/docs/design/templates/list-action-row.svg +1 -1
  206. package/docs/design/templates/list-dark.svg +1 -1
  207. package/docs/design/templates/list-item/default-dark.svg +1 -1
  208. package/docs/design/templates/list-item/default.svg +1 -1
  209. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  210. package/docs/design/templates/list-item/selected.svg +1 -1
  211. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  212. package/docs/design/templates/list-item/trailing.svg +1 -1
  213. package/docs/design/templates/list-item-dark.svg +1 -1
  214. package/docs/design/templates/list-item.svg +1 -1
  215. package/docs/design/templates/list.svg +1 -1
  216. package/docs/design/templates/state-banner/danger-dark.svg +1 -1
  217. package/docs/design/templates/state-banner/danger.svg +1 -1
  218. package/docs/design/templates/state-banner/info-dark.svg +1 -1
  219. package/docs/design/templates/state-banner/info.svg +1 -1
  220. package/docs/design/templates/state-banner/success-dark.svg +1 -1
  221. package/docs/design/templates/state-banner/success.svg +1 -1
  222. package/docs/design/templates/state-banner/warning-dark.svg +1 -1
  223. package/docs/design/templates/state-banner/warning.svg +1 -1
  224. package/docs/design/templates/state-banner-dark.svg +1 -1
  225. package/docs/design/templates/state-banner.svg +1 -1
  226. package/docs/design/templates/value-table/details-dark.svg +1 -1
  227. package/docs/design/templates/value-table/details.svg +1 -1
  228. package/docs/design/templates/value-table-dark.svg +1 -1
  229. package/docs/design/templates/value-table.svg +1 -1
  230. package/docs/design-philosophy.md +1 -1
  231. package/docs/examples/command-palette-adapter.tsx +3 -2
  232. package/docs/layout.md +74 -29
  233. package/docs/nav-stack.md +45 -1
  234. package/docs/recipes.md +48 -40
  235. package/docs/split-view.md +46 -2
  236. package/docs/surface-scaffold.md +1 -1
  237. package/docs/tab-scaffold.md +50 -1
  238. package/docs/type-contracts.md +17 -17
  239. package/docs/ux-demo.md +8 -4
  240. package/docs/webawesome-theme.md +1 -2
  241. package/docs/workbench.md +131 -10
  242. package/llms.txt +38 -9
  243. package/package.json +24 -2
  244. package/ux-demo/recipes/app-shell.tsx +141 -223
  245. package/ux-demo/recipes/collapsible-sidebar.tsx +47 -77
  246. package/ux-demo/recipes/list-detail-dialog.tsx +150 -54
  247. package/ux-demo/recipes/mount-recipe.ts +0 -5
  248. package/ux-demo/recipes/navigation-sidebar.tsx +3 -2
  249. package/ux-demo/recipes/navigation-stack.tsx +3 -2
  250. package/ux-demo/recipes/types.ts +0 -1
  251. package/dist/chunk-3NBL3OUQ.js.map +0 -1
  252. package/dist/chunk-5I22LMCV.js.map +0 -1
  253. package/dist/chunk-5NDQABWK.js.map +0 -1
  254. package/dist/chunk-7GUQYHKA.js.map +0 -1
  255. package/dist/chunk-7IUSV4XG.js.map +0 -1
  256. package/dist/chunk-BJJKFVWW.js.map +0 -1
  257. package/dist/chunk-D7GWXIAS.js.map +0 -1
  258. package/dist/chunk-DQA5FMOX.js +0 -85
  259. package/dist/chunk-DQA5FMOX.js.map +0 -1
  260. package/dist/chunk-HJKRCKDR.js.map +0 -1
  261. package/dist/chunk-HMQ2ZDGG.js.map +0 -1
  262. package/dist/chunk-KPNTVB7A.js.map +0 -1
  263. package/dist/chunk-MTM43SJO.js.map +0 -1
  264. package/dist/chunk-T22EM4ET.js.map +0 -1
  265. package/dist/chunk-WZ2GLEY4.js.map +0 -1
  266. package/dist/chunk-XD7DWYXG.js +0 -34
  267. package/dist/chunk-XD7DWYXG.js.map +0 -1
  268. package/dist/chunk-ZK5EGVFP.js +0 -27
  269. package/dist/chunk-ZK5EGVFP.js.map +0 -1
  270. package/dist/styles/catalog/components/catalog-detail.css +0 -35
  271. package/dist/styles/catalog/components/catalog-resource-footer.css +0 -37
  272. package/dist/styles/catalog/components/catalog-secondary-sections.css +0 -38
  273. package/dist/styles/catalog/components/catalog-section-list.css +0 -22
  274. package/dist/styles/catalog/components/catalog-sidebar.css +0 -82
@@ -1,4 +1,5 @@
1
1
  import * as kerfjs from 'kerfjs';
2
+ import { CssLength } from './css-values.js';
2
3
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3
4
 
4
5
  /** Where a {@link FloatingToolbar} floats within its positioned container. */
@@ -13,6 +14,13 @@ interface FloatingToolbarProps {
13
14
  * Default: `'bottom-end'`.
14
15
  */
15
16
  position?: FloatingToolbarPosition;
17
+ /**
18
+ * Distance from the container edges named by `position`. Default:
19
+ * `space('m')` (16px, 8px past a top toolbar's own inset). Omit it inside a
20
+ * `Workbench`, `CollapsiblePanel`, or `ResizableRegion` restore corner: the
21
+ * corner owns the inset there and sets it to zero.
22
+ */
23
+ inset?: CssLength;
16
24
  className?: string;
17
25
  /** Native named-slot assignment when composed inside a web component. */
18
26
  slot?: string;
@@ -22,13 +30,16 @@ interface FloatingToolbarProps {
22
30
  * ancestor — a transparent, forced-dark cluster of controls (e.g. a drawer
23
31
  * restore button) that sits over the content but NOT over dialogs or overlays
24
32
  * (it is not in the top layer). It is inset from the container edges by
25
- * `--kui-floating-toolbar-inset` (default `--kui-space-m`, i.e. 8px more than a
26
- * top toolbar's own inset); override that token, on the toolbar or an
27
- * ancestor, to move it. Inside a `Workbench`, `CollapsiblePanel`, or
33
+ * `inset` (default `--kui-space-m`, i.e. 8px more than a top toolbar's own
34
+ * inset); pass a typed length to move it. Inside a `Workbench`, `CollapsiblePanel`, or
28
35
  * `ResizableRegion` restore corner the corner owns the inset, so the toolbar
29
- * floats from the corner's own position. The app owns the controls and their
30
- * behavior — wire them with `delegate()` as usual.
36
+ * floats from the corner's own position. While one of those layouts has a
37
+ * side overlay open over the toolbar's region (a Workbench rail overlay, a
38
+ * `wireSidebar` compact overlay, an overlay `CollapsiblePanel` or horizontal
39
+ * `ResizableRegion`), the toolbar is hidden — unfocusable and out of the
40
+ * accessibility tree — until the overlay closes. The app owns the controls
41
+ * and their behavior — wire them with `delegate()` as usual.
31
42
  */
32
- declare function FloatingToolbar({ children, label, position, className, slot, }: FloatingToolbarProps): kerfjs.SafeHtml;
43
+ declare function FloatingToolbar({ children, label, position, inset, className, slot, }: FloatingToolbarProps): kerfjs.SafeHtml;
33
44
 
34
45
  export { FloatingToolbar, type FloatingToolbarPosition, type FloatingToolbarProps };
@@ -1,3 +1,3 @@
1
- export { FloatingToolbar } from './chunk-5NDQABWK.js';
1
+ export { FloatingToolbar } from './chunk-M7QV3IHH.js';
2
2
 
3
3
  //# sourceMappingURL=floating-toolbar.js.map
package/dist/grid.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Grid } from './chunk-C2FAYFDE.js';
1
+ export { Grid } from './chunk-AGXQQFKZ.js';
2
2
 
3
3
 
4
4
 
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Marker export for tests and tooling; importing this module registers the
3
+ * Web Awesome tooltip and installs the document-level help tags that name
4
+ * icon-only controls on hover and keyboard focus: an icon-only `<button>` or
5
+ * link inside a `ToolbarControlGroup` (named by `aria-label`, without a
6
+ * native `title`), plus the icon-only `Select` and `PopupMenu` triggers that
7
+ * `select/register` and `popup-menu/register` already cover. Import it once
8
+ * in an application whose toolbars have icon-only buttons but no registered
9
+ * `Select` or `PopupMenu`; importing it alongside them is harmless.
10
+ */
11
+ declare const helpTagsRegistered = true;
12
+
13
+ export { helpTagsRegistered };
@@ -0,0 +1,9 @@
1
+ import { installHelpTags } from './chunk-BFPBS5Y4.js';
2
+ import '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';
3
+
4
+ installHelpTags();
5
+ var helpTagsRegistered = true;
6
+
7
+ export { helpTagsRegistered };
8
+
9
+ //# sourceMappingURL=help-tags-register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/help-tags-register.ts"],"names":[],"mappings":";;;AAIA,eAAA,EAAgB;AAYT,IAAM,kBAAA,GAAqB","file":"help-tags-register.js","sourcesContent":["import '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';\n\nimport { installHelpTags } from './install-help-tag.js';\n\ninstallHelpTags();\n\n/**\n * Marker export for tests and tooling; importing this module registers the\n * Web Awesome tooltip and installs the document-level help tags that name\n * icon-only controls on hover and keyboard focus: an icon-only `<button>` or\n * link inside a `ToolbarControlGroup` (named by `aria-label`, without a\n * native `title`), plus the icon-only `Select` and `PopupMenu` triggers that\n * `select/register` and `popup-menu/register` already cover. Import it once\n * in an application whose toolbars have icon-only buttons but no registered\n * `Select` or `PopupMenu`; importing it alongside them is harmless.\n */\nexport const helpTagsRegistered = true;\n"]}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  export { AppTab, AppTabPresentation, AppTabProps, AppTabSize } from './app-tab.js';
2
- export { Badge, BadgeAppearance, BadgeProps, BadgeShape, BadgeSize, BadgeTone } from './badge.js';
2
+ export { Badge, BadgeAppearance, BadgeDotProps, BadgeProps, BadgeShape, BadgeSize, BadgeTextProps, BadgeTone } from './badge.js';
3
+ export { ContentItem, ContentItemFrame, ContentItemProps, ContentItemShape } from './content-item.js';
3
4
  export { CssColor, CssFlex, CssFlexBasis, CssFlexKeyword, CssForegroundColor, CssLength, CssLengthExpression, CssSize, CssSizeKeyword, CssValue, UiColor, UiColorName, UiForegroundColorName, UiSpaceName, calc, colorVar, em, flex, foregroundColorVar, lengthVar, pct, plus, px, rem, space, uiColor } from './css-values.js';
4
5
  export { DisclosureArrow, DisclosureArrowProps, DisclosureDirection } from './disclosure-arrow.js';
5
6
  export { EmptyState, EmptyStateProps } from './empty-state.js';
6
7
  export { FloatingToolbar, FloatingToolbarPosition, FloatingToolbarProps } from './floating-toolbar.js';
7
8
  export { Grid, GridProps } from './grid.js';
8
- export { List, ListProps } from './list.js';
9
+ export { List, ListConfig, ListProps } from './list.js';
9
10
  export { ListActionRow, ListActionRowProps } from './list-action-row.js';
10
11
  export { ListHeader, ListHeaderProps } from './list-header.js';
11
12
  export { ListInsetControl, ListInsetControlProps } from './list-inset-control.js';
@@ -13,7 +14,8 @@ export { ListInsetText, ListInsetTextProps } from './list-inset-text.js';
13
14
  export { ListItem, ListItemProps } from './list-item.js';
14
15
  export { LoadingSpinner, LoadingSpinnerProps } from './loading-spinner.js';
15
16
  export { LucideIcon, LucideIconProps, LucideNode } from './lucide-icon.js';
16
- export { Pane, PaneContentElement, PaneElement, PaneProps, PaneSeparatorSide } from './pane.js';
17
+ export { Pane, PaneChromePlacement, PaneConfig, PaneContentElement, PaneElement, PaneProps, PaneSeparatorSide } from './pane.js';
18
+ export { PopupMenu, PopupMenuDivider, PopupMenuEntry, PopupMenuHeading, PopupMenuItem, PopupMenuPlacement, PopupMenuProps } from './popup-menu.js';
17
19
  export { ResizableRegion, ResizableRegionAxis, ResizableRegionCollapseMotion, ResizableRegionContentOverflow, ResizableRegionEdge, ResizableRegionPresentation, ResizableRegionProps, ResizableRegionResponsiveFillAt, ResizableRegionRestorePosition, ResizableRegionSeparator, clampRegionSize, resizeRegionFromPointer } from './resizable-region.js';
18
20
  export { Row, RowProps } from './row.js';
19
21
  export { SegmentedControl, SegmentedControlAppearance, SegmentedControlChoice, SegmentedControlLayout, SegmentedControlProps, SegmentedControlShape, SegmentedControlSize } from './segmented-control.js';
@@ -27,15 +29,15 @@ export { DialogSurface, DialogSurfacePresentation, DialogSurfaceProps, DialogSur
27
29
  export { TabActivation, TabBar, TabBarAllocation, TabBarPresentation, TabBarProps, TabBarTrailingPlacement } from './tab-bar.js';
28
30
  export { Text, TextContent, TextFont, TextProps, TextSize, TextTone, TextVariant } from './text.js';
29
31
  export { TokenSearchEditorAttributes, TokenSearchField, TokenSearchFieldProps, TokenSearchFieldValue, TokenSearchToken, placeTokenSearchCaret, readTokenSearchField } from './token-search-field.js';
30
- export { Toolbar, ToolbarProps } from './toolbar.js';
32
+ export { Toolbar, ToolbarConfig, ToolbarProps } from './toolbar.js';
31
33
  export { ToolbarActionLink, ToolbarActionLinkProps, ToolbarControlGroup, ToolbarControlGroupAppearance, ToolbarControlGroupButtonAppearance, ToolbarControlGroupContent, ToolbarControlGroupDensity, ToolbarControlGroupMenuInset, ToolbarControlGroupOverflow, ToolbarControlGroupProps, ToolbarControlGroupSelectedChrome, ToolbarControlGroupSelectedTone, ToolbarControlGroupShape, ToolbarControlGroupSize, ToolbarControlGroupTone, ToolbarControlGroupVisibility } from './toolbar-control-group.js';
32
34
  export { HeadingLevel, ToolbarText, ToolbarTextProps, ToolbarTextSize } from './toolbar-text.js';
33
35
  export { ValueTable, ValueTableProps, ValueTableRow, ValueTableRowProps } from './value-table.js';
34
36
  export { ResizeCommit, WireResizableRegionsOptions, wireResizableRegions } from './wire-resizable-regions.js';
35
37
  export { TabDropPosition, TabReorder, TabReorderSource, WireTabBarsOptions, reorderTabs, wireTabBars } from './wire-tab-bars.js';
36
38
  export { TokenSearchCollapsibleOptions, TokenSearchEdit, TokenSearchFieldsHandle, TokenSearchSubmit, WireTokenSearchFieldsOptions, wireTokenSearchFields } from './wire-token-search-fields.js';
37
- export { D as DividerSides, S as Sides } from './divider-sides-BzB6rphT.js';
38
39
  export { H as HorizontalAlignment, L as ListVerticalAlignment, V as VerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
40
+ export { S as Sides } from './sides-BPSWde0A.js';
39
41
  import 'kerfjs';
40
42
  import 'lucide';
41
43
  import 'kerfjs/jsx-runtime';
package/dist/index.js CHANGED
@@ -1,40 +1,42 @@
1
- export { wireTokenSearchFields } from './chunk-CMUIXJZM.js';
2
- export { ValueTable, ValueTableRow } from './chunk-44IG7PFV.js';
3
1
  export { wireResizableRegions } from './chunk-XQV2B4IL.js';
4
-
5
2
  export { reorderTabs, wireTabBars } from './chunk-46263QLK.js';
3
+ export { wireTokenSearchFields } from './chunk-NBYTIVHS.js';
4
+ export { TokenSearchField, placeTokenSearchCaret, readTokenSearchField } from './chunk-63ZWBGE3.js';
5
+ export { ValueTable, ValueTableRow } from './chunk-6CINWX2E.js';
6
+
7
+ export { Spacer } from './chunk-MEY33VWB.js';
8
+ export { StateBanner } from './chunk-T4UZTNZ4.js';
9
+ export { SunkenPanel } from './chunk-6ZXOQEAN.js';
6
10
  export { DialogSurface, PopupSurface } from './chunk-NN6GYOA2.js';
7
11
  export { TabBar } from './chunk-N3GKMPDW.js';
8
- export { TokenSearchField, placeTokenSearchCaret, readTokenSearchField } from './chunk-HJKRCKDR.js';
9
12
  export { SegmentedControl } from './chunk-X5QSICJ3.js';
10
- export { Select } from './chunk-T22EM4ET.js';
11
- export { Spacer } from './chunk-ZMBU522F.js';
12
- export { StateBanner } from './chunk-BJJKFVWW.js';
13
- export { SunkenPanel } from './chunk-6ZXOQEAN.js';
14
- export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-VHADGP3B.js';
15
- export { Row } from './chunk-5I22LMCV.js';
13
+ export { Select } from './chunk-MOBRFZH3.js';
14
+ export { ListInsetControl } from './chunk-5I7QGQVT.js';
16
15
  export { EmptyState } from './chunk-E36EVCKG.js';
17
- export { FloatingToolbar } from './chunk-5NDQABWK.js';
18
- export { Grid } from './chunk-C2FAYFDE.js';
19
- export { ListActionRow } from './chunk-RNZAKSME.js';
20
- export { ListInsetControl } from './chunk-D7GWXIAS.js';
21
- export { ListInsetText } from './chunk-ZK5EGVFP.js';
22
- export { AppTab } from './chunk-NE5JAOQS.js';
23
- export { ToolbarActionLink, ToolbarControlGroup } from './chunk-ZIYOJFZD.js';
24
- export { Toolbar } from './chunk-MTM43SJO.js';
25
- export { ListItem } from './chunk-GUIHMIT2.js';
26
- export { List } from './chunk-3NBL3OUQ.js';
27
- export { ToolbarText } from './chunk-TZ5IHWB2.js';
28
- export { Pane } from './chunk-7GUQYHKA.js';
16
+ export { Grid } from './chunk-AGXQQFKZ.js';
17
+ export { ListActionRow } from './chunk-MA6Z6EIM.js';
18
+ export { AppTab } from './chunk-WOUF7YXM.js';
19
+ export { PopupMenu } from './chunk-WLG6SSNT.js';
20
+ export { ResizableRegion, clampRegionSize, resizeRegionFromPointer } from './chunk-VHADGP3B.js';
21
+ export { Row } from './chunk-VZOFZPSO.js';
22
+ export { ListInsetText } from './chunk-DG6G5EPF.js';
23
+ export { ListItem } from './chunk-VNPQDCQZ.js';
24
+ export { List } from './chunk-NAPE7WUS.js';
29
25
 
26
+ export { ToolbarText } from './chunk-K6UNVKDK.js';
27
+ export { FloatingToolbar } from './chunk-M7QV3IHH.js';
30
28
  export { LoadingSpinner } from './chunk-ZLWQZUGF.js';
31
- export { ListHeader } from './chunk-KPNTVB7A.js';
32
- export { Text } from './chunk-7IUSV4XG.js';
33
- export { Skeleton } from './chunk-ATHXW6RP.js';
34
-
35
- export { Badge } from './chunk-XD7DWYXG.js';
36
- export { calc, colorVar, em, flex, foregroundColorVar, lengthVar, pct, plus, px, rem, space, uiColor } from './chunk-WZ2GLEY4.js';
37
- export { DisclosureArrow } from './chunk-HMQ2ZDGG.js';
29
+ export { ListHeader } from './chunk-PK4N5QTO.js';
30
+ export { Text } from './chunk-24PHKUR3.js';
31
+ export { DisclosureArrow } from './chunk-KROD7KZK.js';
32
+ export { Skeleton } from './chunk-AHEG27M7.js';
33
+ export { Badge } from './chunk-MP2GDBQZ.js';
34
+ export { ToolbarActionLink, ToolbarControlGroup } from './chunk-ZIYOJFZD.js';
35
+ export { Toolbar } from './chunk-G33XC2NB.js';
36
+ export { Pane } from './chunk-AK67F6QN.js';
38
37
  export { LucideIcon } from './chunk-4R777DUZ.js';
38
+ export { ContentItem } from './chunk-MA73TA6D.js';
39
+
40
+ export { calc, colorVar, em, flex, foregroundColorVar, lengthVar, pct, plus, px, rem, space, uiColor } from './chunk-2G2ZJQYK.js';
39
41
 
40
42
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { ListActionRow } from './chunk-RNZAKSME.js';
1
+ export { ListActionRow } from './chunk-MA6Z6EIM.js';
2
2
 
3
3
 
4
4
 
@@ -1,4 +1,5 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
+ import { HeadingLevel } from './toolbar-text.js';
2
3
 
3
4
  type ListHeaderRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
4
5
  'data-component'?: never;
@@ -39,6 +40,8 @@ interface ListHeaderBaseProps {
39
40
  type ListHeaderModeProps = {
40
41
  /** Render the title as a controlled disclosure trigger. */
41
42
  toggle: true;
43
+ /** A toggle's label is its button text, not a heading. */
44
+ headingLevel?: never;
42
45
  action: string;
43
46
  expanded: boolean;
44
47
  actionIcon?: SafeHtml;
@@ -48,6 +51,11 @@ type ListHeaderModeProps = {
48
51
  } | {
49
52
  /** Render a separately named trailing action. */
50
53
  toggle?: false;
54
+ /**
55
+ * Native heading level (`h1`–`h6`) of the label. Default `2`. Match the
56
+ * document outline; the visual treatment does not change.
57
+ */
58
+ headingLevel?: HeadingLevel;
51
59
  action: string;
52
60
  actionLabel: string;
53
61
  actionIcon: SafeHtml;
@@ -57,6 +65,11 @@ type ListHeaderModeProps = {
57
65
  } | {
58
66
  /** Render a passive section heading. */
59
67
  toggle?: false;
68
+ /**
69
+ * Native heading level (`h1`–`h6`) of the label. Default `2`. Match the
70
+ * document outline; the visual treatment does not change.
71
+ */
72
+ headingLevel?: HeadingLevel;
60
73
  action?: never;
61
74
  actionLabel?: never;
62
75
  actionIcon?: never;
@@ -81,6 +94,6 @@ type ListHeaderIndicatorProps = {
81
94
  status?: SafeHtml;
82
95
  };
83
96
  type ListHeaderProps = ListHeaderBaseProps & ListHeaderIndicatorProps & ListHeaderModeProps;
84
- declare function ListHeader({ label, count, countLabel, badge, status, density, divider, inline, width, indicatorTone, action, actionLabel, actionIcon, actionDisabled, disabledReason, expanded, toggle, placeholder, rootAttributes, triggerAttributes, slot, }: ListHeaderProps): SafeHtml;
97
+ declare function ListHeader({ label, headingLevel, count, countLabel, badge, status, density, divider, inline, width, indicatorTone, action, actionLabel, actionIcon, actionDisabled, disabledReason, expanded, toggle, placeholder, rootAttributes, triggerAttributes, slot, }: ListHeaderProps): SafeHtml;
85
98
 
86
99
  export { ListHeader, type ListHeaderProps };
@@ -1,4 +1,4 @@
1
- export { ListHeader } from './chunk-KPNTVB7A.js';
1
+ export { ListHeader } from './chunk-PK4N5QTO.js';
2
2
 
3
3
 
4
4
 
@@ -1,6 +1,6 @@
1
1
  import * as kerfjs from 'kerfjs';
2
- import { S as Sides } from './divider-sides-BzB6rphT.js';
3
2
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3
+ import { S as Sides } from './sides-BPSWde0A.js';
4
4
 
5
5
  interface ListInsetControlProps {
6
6
  /** Control(s) that own their own border and padding (e.g. an input, a `wa-*`). */
@@ -1,3 +1,3 @@
1
- export { ListInsetControl } from './chunk-D7GWXIAS.js';
1
+ export { ListInsetControl } from './chunk-5I7QGQVT.js';
2
2
 
3
3
  //# sourceMappingURL=list-inset-control.js.map
@@ -1,20 +1,19 @@
1
1
  import * as kerfjs from 'kerfjs';
2
- import { S as Sides } from './divider-sides-BzB6rphT.js';
3
2
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3
+ import { S as Sides } from './sides-BPSWde0A.js';
4
4
 
5
+ type ListInsetTextRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
6
+ 'data-component'?: never;
7
+ 'data-sides'?: never;
8
+ }>;
5
9
  interface ListInsetTextProps {
6
10
  /** Text (or inline content) that carries no margin, border, or padding of its own. */
7
11
  children: KerfUiContent | string;
8
12
  /** Physical inset sides in canonical top/right/bottom/left order. Defaults to all sides. */
9
13
  sides?: Sides;
10
- /**
11
- * @deprecated Pass `sides="rl"` instead. Keep only the horizontal geometry (inline margin, left/right border, and
12
- * left/right padding) and drop the vertical margin, border, and padding. Use it
13
- * when the text edge must still align with bordered items but the line should not
14
- * add its own vertical box space — tight text layout inside a content region.
15
- */
16
- horizontalOnly?: boolean;
17
14
  className?: string;
15
+ /** Safe `data-*` metadata; component-owned structural attributes stay protected. */
16
+ rootAttributes?: ListInsetTextRootAttributes;
18
17
  /** Native named-slot assignment when composed inside a web component. */
19
18
  slot?: string;
20
19
  }
@@ -23,9 +22,9 @@ interface ListInsetTextProps {
23
22
  * transparent border, and 8px padding — so a plain string lines up with
24
23
  * bordered `.kui-content` items (its text edge lands at the same 17px inset).
25
24
  * Use it for text elements that have no margin, border, or padding of their own.
26
- * Pass `horizontalOnly` to keep the horizontal inset but drop the vertical box
25
+ * Pass `sides="rl"` to keep the horizontal inset but drop the vertical box
27
26
  * space for tight text layout.
28
27
  */
29
- declare function ListInsetText({ children, sides, horizontalOnly, className, slot, }: ListInsetTextProps): kerfjs.SafeHtml;
28
+ declare function ListInsetText({ children, sides, className, rootAttributes, slot, }: ListInsetTextProps): kerfjs.SafeHtml;
30
29
 
31
30
  export { ListInsetText, type ListInsetTextProps, Sides };
@@ -1,3 +1,4 @@
1
- export { ListInsetText } from './chunk-ZK5EGVFP.js';
1
+ export { ListInsetText } from './chunk-DG6G5EPF.js';
2
+
2
3
 
3
4
  //# sourceMappingURL=list-inset-text.js.map
package/dist/list-item.js CHANGED
@@ -1,4 +1,4 @@
1
- export { ListItem } from './chunk-GUIHMIT2.js';
1
+ export { ListItem } from './chunk-VNPQDCQZ.js';
2
2
 
3
3
 
4
4
 
package/dist/list.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import * as kerfjs from 'kerfjs';
2
2
  import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
3
- import { D as DividerSides, S as Sides } from './divider-sides-BzB6rphT.js';
4
3
  import { H as HorizontalAlignment, L as ListVerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
5
4
  export { V as VerticalAlignment } from './flex-alignment-4ms8ZbV8.js';
6
5
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
6
+ import { S as Sides } from './sides-BPSWde0A.js';
7
7
 
8
8
  type ListRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
9
9
  'data-component'?: never;
@@ -35,7 +35,7 @@ interface ListProps {
35
35
  /** Own vertical scrolling and overscroll containment. */
36
36
  scrollable?: boolean;
37
37
  /** Physical divider edges in canonical top/right/bottom/left order. */
38
- dividerSides?: DividerSides;
38
+ dividerSides?: Sides;
39
39
  /** Physical sides that receive the standard 17px text inset. */
40
40
  textInsets?: Sides;
41
41
  /** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */
@@ -46,7 +46,14 @@ interface ListProps {
46
46
  /** Native named-slot assignment when composed inside a web component. */
47
47
  slot?: string;
48
48
  }
49
+ /**
50
+ * A list's configuration, apart from its content and styling hooks: the props a
51
+ * composite that renders a `List` for the app (the Workbench's `mainHeader` /
52
+ * `mainFooter` chrome) forwards, so the app configures that list instead of
53
+ * styling it. An omitted or `undefined` field keeps the composite's default.
54
+ */
55
+ type ListConfig = Pick<ListProps, 'gap' | 'hAlign' | 'vAlign' | 'dividerSides' | 'textInsets' | 'controlInsets'>;
49
56
  /** A stretch-aligned vertical stack with optional gap, flex, fill, scroll, and dividers. */
50
57
  declare function List({ children, gap, flex, fill, hAlign, vAlign, scrollable, dividerSides, textInsets, controlInsets, className, rootAttributes, slot, }: ListProps): kerfjs.SafeHtml;
51
58
 
52
- export { CssFlex, CssFlexKeyword, CssLength, DividerSides, HorizontalAlignment, List, type ListProps, ListVerticalAlignment, Sides, UiSpaceName };
59
+ export { CssFlex, CssFlexKeyword, CssLength, HorizontalAlignment, List, type ListConfig, type ListProps, ListVerticalAlignment, Sides, UiSpaceName };
package/dist/list.js CHANGED
@@ -1,4 +1,4 @@
1
- export { List } from './chunk-3NBL3OUQ.js';
1
+ export { List } from './chunk-NAPE7WUS.js';
2
2
 
3
3
 
4
4
 
@@ -1,5 +1,9 @@
1
1
  import * as kerfjs from 'kerfjs';
2
2
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3
+ import { ToolbarConfig } from './toolbar.js';
4
+ import { ToolbarTextSize, HeadingLevel } from './toolbar-text.js';
5
+ import './pane.js';
6
+ import './sides-BPSWde0A.js';
3
7
 
4
8
  /**
5
9
  * One entry in a {@link NavStack}. The app owns the stack as an array (usually a
@@ -11,19 +15,46 @@ interface NavStackView {
11
15
  content: KerfUiContent;
12
16
  /** Title shown in the top toolbar for this view. */
13
17
  title?: string;
18
+ /** Leading groups for this view's top toolbar, after the back control and before the title. */
19
+ leading?: KerfUiContent;
20
+ /** Center content for this view's top toolbar (placed per `toolbarConfig.centerAlign`). */
21
+ center?: KerfUiContent;
14
22
  /** Trailing actions for this view's top toolbar. */
15
23
  toolbar?: KerfUiContent;
16
24
  /** Bottom toolbar for this view. Cross-fades with the top chrome on navigation. */
17
25
  bottomToolbar?: KerfUiContent;
18
26
  }
27
+ /**
28
+ * The top toolbar's configuration. Its `ToolbarConfig` forwards to the real
29
+ * `Toolbar` the stack renders; by default that toolbar draws no divider and
30
+ * claims the top and side safe-area edges the stack still touches.
31
+ */
32
+ interface NavStackToolbarConfig extends ToolbarConfig {
33
+ /** Accessible name of the top toolbar (default: none). */
34
+ label?: string;
35
+ /** Size of the view title's `ToolbarText` (default `large`). */
36
+ titleSize?: ToolbarTextSize;
37
+ /** Expose the view title as a heading at this level (default: a plain span). */
38
+ headingLevel?: HeadingLevel;
39
+ }
19
40
  interface NavStackProps {
20
41
  id: string;
21
42
  /** Accessible name for the stack region. */
22
43
  label: string;
23
44
  /** The stack, root first; the last entry is the active top view. */
24
45
  views: NavStackView[];
25
- /** Accessible label for the back control (default "Back"). */
46
+ /** Accessible label for the icon-only back control (default "Back"). */
26
47
  backLabel?: string;
48
+ /** The back control's icon (default a chevron-left `LucideIcon`). */
49
+ backIcon?: KerfUiContent;
50
+ /**
51
+ * Visible text beside the back icon, such as the previous view's title
52
+ * (default: icon only). When set, the text names the control and
53
+ * `backLabel` is not used.
54
+ */
55
+ backText?: string;
56
+ /** The top toolbar's configuration, forwarded to its `Toolbar`. */
57
+ toolbarConfig?: NavStackToolbarConfig;
27
58
  /** Hide the top toolbar entirely (rare — a fully custom-chrome view). */
28
59
  hideToolbar?: boolean;
29
60
  /** Optional persistent bottom toolbar used when the active view does not provide one. */
@@ -35,9 +66,11 @@ interface NavStackProps {
35
66
  /**
36
67
  * A navigation stack (iOS-style push/pop). Renders every entry stacked, the last
37
68
  * one active; `@kerfjs/ui/wire-nav-stack`'s `wireNavStack` slides the content and
38
- * cross-fades the chrome across a change. A single-pane layout is a `NavStack`
39
- * with one entry. See `docs/23-app-layouts.md` §3.1.
69
+ * cross-fades the chrome across a change. Its top chrome is a real `Toolbar`: the
70
+ * back control and title lead, the active view's `leading` / `center` / `toolbar`
71
+ * content fills the zones, and `toolbarConfig` configures it. A single-pane
72
+ * layout is a `NavStack` with one entry. See `docs/23-app-layouts.md` §3.1.
40
73
  */
41
- declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className, slot, }: NavStackProps): kerfjs.SafeHtml;
74
+ declare function NavStack({ id, label, views, backLabel, backIcon, backText, toolbarConfig, hideToolbar, bottomToolbar, className, slot, }: NavStackProps): kerfjs.SafeHtml;
42
75
 
43
- export { NavStack, type NavStackProps, type NavStackView };
76
+ export { NavStack, type NavStackProps, type NavStackToolbarConfig, type NavStackView };
package/dist/nav-stack.js CHANGED
@@ -1,4 +1,7 @@
1
- export { NavStack } from './chunk-DQA5FMOX.js';
1
+ export { NavStack } from './chunk-O3EXIBEZ.js';
2
+
3
+
4
+
2
5
 
3
6
 
4
7
 
package/dist/pane.d.ts CHANGED
@@ -20,7 +20,10 @@ type PaneRootAttributes = Readonly<Record<`data-${string}`, string | undefined>
20
20
  'data-safe-area-block-end'?: never;
21
21
  'data-safe-area-inline-start'?: never;
22
22
  'data-safe-area-inline-end'?: never;
23
+ 'data-chrome-placement'?: never;
23
24
  }>;
25
+ /** How a Pane's header and footer relate to its scrolling content. */
26
+ type PaneChromePlacement = 'fixed' | 'auto';
24
27
  interface PaneProps {
25
28
  /** Optional fixed chrome above the scrolling content, arranged vertically. */
26
29
  header?: KerfUiContent;
@@ -28,6 +31,14 @@ interface PaneProps {
28
31
  children?: KerfUiContent;
29
32
  /** Optional fixed chrome below the scrolling content. */
30
33
  footer?: KerfUiContent;
34
+ /**
35
+ * Whether the header and footer stay pinned around the scrolling content.
36
+ * `fixed` (default) always pins them. `auto` pins them while the pane is
37
+ * tall enough, and below 480px of height (30rem, so it scales with the text
38
+ * size) lets the whole pane scroll as one column, so tall chrome can never
39
+ * squeeze the content to nothing.
40
+ */
41
+ chromePlacement?: PaneChromePlacement;
31
42
  /** Root semantics. Defaults to `div`. */
32
43
  element?: PaneElement;
33
44
  /** Scrolling content semantics. Defaults to `div`. */
@@ -56,12 +67,19 @@ interface PaneProps {
56
67
  /** Native named-slot assignment when composed inside a web component. */
57
68
  slot?: string;
58
69
  }
70
+ /**
71
+ * A pane's configuration, apart from its content and styling hooks: the props a
72
+ * composite that renders a `Pane` for the app (a Workbench panel or work area,
73
+ * or a CollapsiblePanel) forwards, so the app configures that pane instead of
74
+ * styling it. An omitted or `undefined` field keeps the composite's default.
75
+ */
76
+ type PaneConfig = Pick<PaneProps, 'contentElement' | 'contentLabel' | 'separators' | 'safeAreaEdges'>;
59
77
  /**
60
78
  * An unpadded application column with optional fixed header/footer slots and one
61
79
  * scrolling vertical content owner. Separator lines are independently opt-in on
62
80
  * each logical edge, so the same component works as a sidebar, main area,
63
81
  * inspector, or dialog column.
64
82
  */
65
- declare function Pane({ header, children, footer, element, contentElement, separators, safeAreaEdges, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
83
+ declare function Pane({ header, children, footer, chromePlacement, element, contentElement, separators, safeAreaEdges, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
66
84
 
67
- export { Pane, type PaneContentElement, type PaneElement, type PaneProps, type PaneSeparatorSide };
85
+ export { Pane, type PaneChromePlacement, type PaneConfig, type PaneContentElement, type PaneElement, type PaneProps, type PaneSeparatorSide };
package/dist/pane.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Pane } from './chunk-7GUQYHKA.js';
1
+ export { Pane } from './chunk-AK67F6QN.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=pane.js.map
@@ -0,0 +1,63 @@
1
+ import { LucideIcon } from './lucide-icon.js';
2
+ import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3
+ import { ToolbarConfig } from './toolbar.js';
4
+
5
+ /** Which edge a collapsible panel docks to. */
6
+ type PanelSide = 'left' | 'right' | 'bottom';
7
+ /**
8
+ * The standard collapse/expand icon for a panel `side` and `collapsed` state,
9
+ * so every app's sidebars and drawers use one recognizable convention:
10
+ * `PanelLeft*` for a left rail, `PanelRight*` for a right rail, `PanelBottom*`
11
+ * for a bottom drawer — the `Close` glyph while open, the `Open` glyph while
12
+ * collapsed. Exposed so an app can render its own toggle affordance.
13
+ */
14
+ declare function collapsiblePanelToggleIcon(side: PanelSide, collapsed: boolean): {
15
+ icon: Parameters<typeof LucideIcon>[0]['icon'];
16
+ name: string;
17
+ };
18
+ /**
19
+ * The standard collapse toggle a panel toolbar renders. The app handles the
20
+ * button's `data-action` and flips its own `collapsed` flag.
21
+ */
22
+ interface PanelToggle {
23
+ /** The `data-action` the toggle button carries. */
24
+ action: string;
25
+ /** The panel's short name, for the accessible "Show …" / "Hide …" label. */
26
+ name: string;
27
+ /** Accessible label while the panel is collapsed. Defaults to `Show {name}`. */
28
+ showLabel?: string;
29
+ /** Accessible label while the panel is open. Defaults to `Hide {name}`. */
30
+ hideLabel?: string;
31
+ }
32
+ /**
33
+ * A collapsible panel's top toolbar, composed so its groups follow the
34
+ * panel's open state.
35
+ *
36
+ * - `title` (a `ToolbarText`) and `panelOnly` groups lead the toolbar and are
37
+ * available only while the panel is open.
38
+ * - `constant` groups stay available either way: they trail the panel's
39
+ * toolbar while it is open and move to the work area's toolbar while it is
40
+ * collapsed.
41
+ * - `toggle` is always the last group: in the panel's toolbar while it is
42
+ * open, and right after the `constant` groups in the work area's toolbar
43
+ * while it is collapsed.
44
+ *
45
+ * `constant` content renders in both places while the panel is collapsed (the
46
+ * panel's copy is inert), so give it no `id`s.
47
+ *
48
+ * The toolbar's configuration (`dividerSides`, `centerAlign`, `responsive`,
49
+ * `responsiveAt`, `safeAreaEdges`) forwards to its `Toolbar`; it keeps a
50
+ * bottom divider unless `dividerSides` says otherwise.
51
+ */
52
+ interface PanelToolbar extends ToolbarConfig {
53
+ /** Accessible name of the panel's toolbar. */
54
+ label: string;
55
+ title?: KerfUiContent;
56
+ panelOnly?: KerfUiContent;
57
+ /** Panel-only center content, available only while the panel is open. */
58
+ center?: KerfUiContent;
59
+ constant?: KerfUiContent;
60
+ toggle?: PanelToggle;
61
+ }
62
+
63
+ export { type PanelSide as P, type PanelToolbar as a, type PanelToggle as b, collapsiblePanelToggleIcon as c };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Marker export for tests and tooling; importing this module registers the
3
+ * Web Awesome elements a `PopupMenu` renders (`wa-dropdown`,
4
+ * `wa-dropdown-item`, `wa-button`, and `wa-divider`) and routes a keyboard
5
+ * choice through the item's click so delegated `data-action`s run.
6
+ */
7
+ declare const popupMenuElementsRegistered = true;
8
+
9
+ export { popupMenuElementsRegistered };
@@ -0,0 +1,31 @@
1
+ import { installHelpTags } from './chunk-BFPBS5Y4.js';
2
+ import '@awesome.me/webawesome/dist/components/button/button.js';
3
+ import '@awesome.me/webawesome/dist/components/divider/divider.js';
4
+ import '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';
5
+ import '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';
6
+ import WaDropdown from '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';
7
+
8
+ // src/install-popup-menu-keyboard.ts
9
+ var installed = /* @__PURE__ */ new WeakSet();
10
+ function installPopupMenuKeyboard(prototype) {
11
+ if (installed.has(prototype)) return;
12
+ installed.add(prototype);
13
+ const target = prototype;
14
+ const makeSelection = target.makeSelection;
15
+ target.makeSelection = function(item, event) {
16
+ if (event instanceof KeyboardEvent && this.classList.contains("kui-popup-menu") && !item.disabled) {
17
+ item.click();
18
+ return;
19
+ }
20
+ makeSelection.call(this, item, event);
21
+ };
22
+ }
23
+
24
+ // src/popup-menu-register.ts
25
+ installPopupMenuKeyboard(WaDropdown.prototype);
26
+ installHelpTags();
27
+ var popupMenuElementsRegistered = true;
28
+
29
+ export { popupMenuElementsRegistered };
30
+
31
+ //# sourceMappingURL=popup-menu-register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/install-popup-menu-keyboard.ts","../src/popup-menu-register.ts"],"names":[],"mappings":";;;;;;;;AAOA,IAAM,SAAA,uBAAgB,OAAA,EAAgB;AAW/B,SAAS,yBAAyB,SAAA,EAAyB;AAChE,EAAA,IAAI,SAAA,CAAU,GAAA,CAAI,SAAS,CAAA,EAAG;AAC9B,EAAA,SAAA,CAAU,IAAI,SAAS,CAAA;AACvB,EAAA,MAAM,MAAA,GAAS,SAAA;AACf,EAAA,MAAM,gBAAgB,MAAA,CAAO,aAAA;AAC7B,EAAA,MAAA,CAAO,aAAA,GAAgB,SAAmC,IAAA,EAAM,KAAA,EAAa;AAC3E,IAAA,IACE,KAAA,YAAiB,iBACjB,IAAA,CAAK,SAAA,CAAU,SAAS,gBAAgB,CAAA,IACxC,CAAC,IAAA,CAAK,QAAA,EACN;AACA,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA;AAAA,IACF;AACA,IAAA,aAAA,CAAc,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,KAAK,CAAA;AAAA,EACtC,CAAA;AACF;;;ACxBA,wBAAA,CAAyB,WAAW,SAAS,CAAA;AAC7C,eAAA,EAAgB;AAQT,IAAM,2BAAA,GAA8B","file":"popup-menu-register.js","sourcesContent":["interface PopupMenuDropdown extends HTMLElement {\n makeSelection(\n item: HTMLElement & { disabled?: boolean },\n event?: Event,\n ): void;\n}\n\nconst installed = new WeakSet<object>();\n\n/**\n * Route a keyboard choice in a `PopupMenu` through the item's click. Web Awesome\n * selects a pointer choice from the item's click event but a keyboard choice\n * (Enter or Space) directly, so delegated `data-action` click handlers would\n * never run for keyboard users. Clicking the item makes Web Awesome select it\n * exactly as it does for a pointer — one `wa-select`, then close and focus\n * return — while the click reaches the application's delegation. Raw\n * `wa-dropdown`s outside `PopupMenu` are unaffected.\n */\nexport function installPopupMenuKeyboard(prototype: object): void {\n if (installed.has(prototype)) return;\n installed.add(prototype);\n const target = prototype as PopupMenuDropdown;\n const makeSelection = target.makeSelection;\n target.makeSelection = function (this: PopupMenuDropdown, item, event): void {\n if (\n event instanceof KeyboardEvent &&\n this.classList.contains('kui-popup-menu') &&\n !item.disabled\n ) {\n item.click();\n return;\n }\n makeSelection.call(this, item, event);\n };\n}\n","import '@awesome.me/webawesome/dist/components/button/button.js';\nimport '@awesome.me/webawesome/dist/components/divider/divider.js';\nimport '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';\nimport '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';\n\nimport WaDropdown from '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';\n\nimport { installHelpTags } from './install-help-tag.js';\nimport { installPopupMenuKeyboard } from './install-popup-menu-keyboard.js';\n\ninstallPopupMenuKeyboard(WaDropdown.prototype);\ninstallHelpTags();\n\n/**\n * Marker export for tests and tooling; importing this module registers the\n * Web Awesome elements a `PopupMenu` renders (`wa-dropdown`,\n * `wa-dropdown-item`, `wa-button`, and `wa-divider`) and routes a keyboard\n * choice through the item's click so delegated `data-action`s run.\n */\nexport const popupMenuElementsRegistered = true;\n"]}