@kerfjs/ui 5.0.0-beta.23 → 5.0.0-beta.25

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 (288) hide show
  1. package/README.md +45 -23
  2. package/ai/application-ui-diagnostic-ids-v1.json +3 -0
  3. package/ai/application-ui-profile.defaults.json +1 -1
  4. package/ai/compile-time-contracts-v1.json +5 -12
  5. package/ai/component-catalog-v2-overrides.json +12 -49
  6. package/ai/component-catalog-v2.d.ts +1 -0
  7. package/ai/component-catalog-v2.json +458 -123
  8. package/ai/component-catalog-v2.schema.json +2 -1
  9. package/ai/component-catalog.json +658 -195
  10. package/ai/public-api-signatures-v1.md +160 -80
  11. package/ai/skill.md +22 -22
  12. package/ai/webawesome-jsx-signatures-v1.md +2 -1
  13. package/analyzer/cli.mjs +5 -2
  14. package/analyzer/index.d.mts +1 -0
  15. package/analyzer/index.mjs +117 -10
  16. package/dist/app-tab.d.ts +10 -2
  17. package/dist/app-tab.js +1 -1
  18. package/dist/browser/list-action-row.js +1 -0
  19. package/dist/browser/list-item.js +1 -0
  20. package/dist/browser/list.js +3 -0
  21. package/dist/browser/surface-scaffold.js +3 -0
  22. package/dist/catalog.d.ts +8 -4
  23. package/dist/catalog.js +21 -11
  24. package/dist/catalog.js.map +1 -1
  25. package/dist/{chunk-ELSJX4W7.js → chunk-4EF2CMYS.js} +25 -6
  26. package/dist/chunk-4EF2CMYS.js.map +1 -0
  27. package/dist/{chunk-OHU6CI22.js → chunk-B3A3IVO5.js} +2 -2
  28. package/dist/{chunk-OHU6CI22.js.map → chunk-B3A3IVO5.js.map} +1 -1
  29. package/dist/{chunk-K57KRAOV.js → chunk-FRVS5RFM.js} +24 -6
  30. package/dist/chunk-FRVS5RFM.js.map +1 -0
  31. package/dist/{chunk-DSNIYOZ3.js → chunk-GWEAPEZI.js} +16 -3
  32. package/dist/chunk-GWEAPEZI.js.map +1 -0
  33. package/dist/chunk-HP2B2L26.js +102 -0
  34. package/dist/chunk-HP2B2L26.js.map +1 -0
  35. package/dist/{chunk-OZWU5ZPZ.js → chunk-IJBSZ4NX.js} +2 -2
  36. package/dist/{chunk-OZWU5ZPZ.js.map → chunk-IJBSZ4NX.js.map} +1 -1
  37. package/dist/chunk-J5BFYY7Q.js +35 -0
  38. package/dist/chunk-J5BFYY7Q.js.map +1 -0
  39. package/dist/{chunk-GP5DP5DL.js → chunk-JFGXQBIP.js} +85 -24
  40. package/dist/chunk-JFGXQBIP.js.map +1 -0
  41. package/dist/{chunk-QQFJMRIB.js → chunk-KWWR5VMS.js} +2 -2
  42. package/dist/{chunk-QQFJMRIB.js.map → chunk-KWWR5VMS.js.map} +1 -1
  43. package/dist/chunk-OBLTAKSX.js +43 -0
  44. package/dist/chunk-OBLTAKSX.js.map +1 -0
  45. package/dist/{chunk-PIDTEQ3U.js → chunk-OT6RPYAP.js} +17 -3
  46. package/dist/chunk-OT6RPYAP.js.map +1 -0
  47. package/dist/{chunk-W7YD6E4N.js → chunk-R7ZWUN64.js} +2 -2
  48. package/dist/{chunk-W7YD6E4N.js.map → chunk-R7ZWUN64.js.map} +1 -1
  49. package/dist/{chunk-PZQVSDLH.js → chunk-RKVQEH4J.js} +1 -1
  50. package/dist/chunk-RKVQEH4J.js.map +1 -0
  51. package/dist/{chunk-7L6EHUMV.js → chunk-SYDMYBPG.js} +3 -3
  52. package/dist/chunk-SYDMYBPG.js.map +1 -0
  53. package/dist/{chunk-W4CXQYSG.js → chunk-TB6DY7H5.js} +3 -1
  54. package/dist/chunk-TB6DY7H5.js.map +1 -0
  55. package/dist/{chunk-AASLYRGE.js → chunk-UKKSMZYT.js} +18 -7
  56. package/dist/chunk-UKKSMZYT.js.map +1 -0
  57. package/dist/{chunk-BBRXX6PF.js → chunk-VCE4MPVE.js} +26 -4
  58. package/dist/chunk-VCE4MPVE.js.map +1 -0
  59. package/dist/{chunk-VLYV65LK.js → chunk-W5L2JSBY.js} +5 -3
  60. package/dist/chunk-W5L2JSBY.js.map +1 -0
  61. package/dist/{chunk-5VTB2BKP.js → chunk-WNWD54GR.js} +16 -2
  62. package/dist/chunk-WNWD54GR.js.map +1 -0
  63. package/dist/{chunk-M7JBER5U.js → chunk-X2U3QJCJ.js} +8 -2
  64. package/dist/chunk-X2U3QJCJ.js.map +1 -0
  65. package/dist/{chunk-DPDBVKNA.js → chunk-YMKH5XTF.js} +5 -3
  66. package/dist/chunk-YMKH5XTF.js.map +1 -0
  67. package/dist/collapsible-panel.d.ts +9 -1
  68. package/dist/collapsible-panel.js +36 -15
  69. package/dist/collapsible-panel.js.map +1 -1
  70. package/dist/divider-sides-267FA7sY.d.ts +4 -0
  71. package/dist/index.d.ts +5 -3
  72. package/dist/index.js +20 -19
  73. package/dist/list-action-row.d.ts +11 -1
  74. package/dist/list-action-row.js +2 -1
  75. package/dist/list-header.d.ts +15 -2
  76. package/dist/list-header.js +1 -1
  77. package/dist/list-item.d.ts +12 -1
  78. package/dist/list-item.js +2 -1
  79. package/dist/list.d.ts +19 -0
  80. package/dist/list.js +3 -0
  81. package/dist/list.js.map +1 -0
  82. package/dist/nav-stack.js +1 -1
  83. package/dist/resizable-region.d.ts +19 -2
  84. package/dist/resizable-region.js +1 -1
  85. package/dist/segmented-control.js +1 -1
  86. package/dist/select.d.ts +12 -1
  87. package/dist/select.js +1 -1
  88. package/dist/skeleton.d.ts +1 -1
  89. package/dist/skeleton.js +1 -1
  90. package/dist/split-view.js +2 -2
  91. package/dist/state-banner.d.ts +4 -2
  92. package/dist/state-banner.js +1 -1
  93. package/dist/styles/app-tab.css +26 -0
  94. package/dist/styles/catalog.css +8 -2
  95. package/dist/styles/collapsible-panel.css +66 -4
  96. package/dist/styles/list-action-row.css +64 -0
  97. package/dist/styles/list-header.css +32 -0
  98. package/dist/styles/list-item.css +45 -6
  99. package/dist/styles/list.css +43 -0
  100. package/dist/styles/resizable-region.css +132 -0
  101. package/dist/styles/select.css +68 -0
  102. package/dist/styles/state-banner.css +32 -1
  103. package/dist/styles/styles.css +2 -1
  104. package/dist/styles/sunken-panel.css +4 -0
  105. package/dist/styles/surface-scaffold.css +51 -0
  106. package/dist/styles/tab-bar.css +24 -0
  107. package/dist/styles/toolbar-control-group.css +73 -1
  108. package/dist/styles/toolbar-text.css +1 -1
  109. package/dist/styles/toolbar.css +38 -2
  110. package/dist/styles/webawesome.css +12 -0
  111. package/dist/styles/workbench.css +89 -0
  112. package/dist/sunken-panel.d.ts +5 -2
  113. package/dist/sunken-panel.js +1 -1
  114. package/dist/surface-scaffold.d.ts +25 -0
  115. package/dist/surface-scaffold.js +3 -0
  116. package/dist/surface-scaffold.js.map +1 -0
  117. package/dist/tab-bar.d.ts +11 -2
  118. package/dist/tab-bar.js +1 -1
  119. package/dist/toolbar-control-group.d.ts +16 -2
  120. package/dist/toolbar-control-group.js +1 -1
  121. package/dist/toolbar-text.js +1 -1
  122. package/dist/toolbar.d.ts +5 -3
  123. package/dist/toolbar.js +1 -1
  124. package/dist/value-table.js +1 -1
  125. package/dist/webawesome.d.ts +1 -0
  126. package/dist/wire-catalog.d.ts +4 -2
  127. package/dist/wire-catalog.js +95 -36
  128. package/dist/wire-catalog.js.map +1 -1
  129. package/dist/wire-resizable-regions.js +1 -1
  130. package/dist/wire-sidebar.d.ts +6 -1
  131. package/dist/wire-sidebar.js +27 -8
  132. package/dist/wire-sidebar.js.map +1 -1
  133. package/dist/wire-tab-bars.js +1 -1
  134. package/dist/wire-token-search-fields.d.ts +1 -1
  135. package/dist/wire-token-search-fields.js +1 -1
  136. package/dist/workbench.d.ts +8 -0
  137. package/dist/workbench.js +42 -0
  138. package/dist/workbench.js.map +1 -1
  139. package/docs/accessibility.md +67 -15
  140. package/docs/catalog.md +17 -12
  141. package/docs/collapsible-panel.md +7 -0
  142. package/docs/component-contract.md +19 -9
  143. package/docs/component-selection.md +65 -31
  144. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  145. package/docs/design/templates/empty-state/filtered.svg +1 -1
  146. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  147. package/docs/design/templates/empty-state/with-action.svg +1 -1
  148. package/docs/design/templates/empty-state-dark.svg +1 -7
  149. package/docs/design/templates/empty-state.svg +1 -7
  150. package/docs/design/templates/list/compact-dark.svg +1 -0
  151. package/docs/design/templates/list/compact.svg +1 -0
  152. package/docs/design/templates/list/stack-dark.svg +1 -0
  153. package/docs/design/templates/list/stack.svg +1 -0
  154. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  155. package/docs/design/templates/list-action-row/default.svg +1 -1
  156. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  157. package/docs/design/templates/list-action-row/selected.svg +1 -1
  158. package/docs/design/templates/list-action-row-dark.svg +1 -7
  159. package/docs/design/templates/list-action-row.svg +1 -7
  160. package/docs/design/templates/list-dark.svg +1 -0
  161. package/docs/design/templates/list-header/action-dark.svg +1 -1
  162. package/docs/design/templates/list-header/action.svg +1 -1
  163. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  164. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  165. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  166. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  167. package/docs/design/templates/list-header-dark.svg +1 -11
  168. package/docs/design/templates/list-header.svg +1 -11
  169. package/docs/design/templates/list-item/default-dark.svg +1 -1
  170. package/docs/design/templates/list-item/default.svg +1 -1
  171. package/docs/design/templates/list-item/multiline-dark.svg +1 -1
  172. package/docs/design/templates/list-item/multiline.svg +1 -1
  173. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  174. package/docs/design/templates/list-item/selected.svg +1 -1
  175. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  176. package/docs/design/templates/list-item/trailing.svg +1 -1
  177. package/docs/design/templates/list-item-dark.svg +1 -11
  178. package/docs/design/templates/list-item.svg +1 -11
  179. package/docs/design/templates/list.svg +1 -0
  180. package/docs/design/templates/segmented-control-dark.svg +1 -7
  181. package/docs/design/templates/segmented-control.svg +1 -7
  182. package/docs/design/templates/skeleton-dark.svg +1 -9
  183. package/docs/design/templates/skeleton.svg +1 -9
  184. package/docs/design/templates/state-banner/danger-dark.svg +1 -1
  185. package/docs/design/templates/state-banner/danger.svg +1 -1
  186. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  187. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  188. package/docs/design/templates/state-banner/info-dark.svg +1 -1
  189. package/docs/design/templates/state-banner/info.svg +1 -1
  190. package/docs/design/templates/state-banner/success-dark.svg +1 -1
  191. package/docs/design/templates/state-banner/success.svg +1 -1
  192. package/docs/design/templates/state-banner/warning-dark.svg +1 -1
  193. package/docs/design/templates/state-banner/warning.svg +1 -1
  194. package/docs/design/templates/state-banner-dark.svg +1 -11
  195. package/docs/design/templates/state-banner.svg +1 -11
  196. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  197. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  198. package/docs/design/templates/tab-bar-dark.svg +1 -5
  199. package/docs/design/templates/tab-bar.svg +1 -5
  200. package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
  201. package/docs/design/templates/token-search-field/empty.svg +1 -1
  202. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
  203. package/docs/design/templates/token-search-field/tokens.svg +1 -1
  204. package/docs/design/templates/token-search-field-dark.svg +1 -7
  205. package/docs/design/templates/token-search-field.svg +1 -7
  206. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  207. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  208. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  209. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  210. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  211. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  212. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  213. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  214. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  215. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  216. package/docs/design/templates/toolbar-control-group-dark.svg +1 -11
  217. package/docs/design/templates/toolbar-control-group.svg +1 -11
  218. package/docs/design/templates/toolbar-dark.svg +1 -5
  219. package/docs/design/templates/toolbar-text-dark.svg +1 -9
  220. package/docs/design/templates/toolbar-text.svg +1 -9
  221. package/docs/design/templates/toolbar.svg +1 -5
  222. package/docs/design/templates/value-table/details-dark.svg +1 -1
  223. package/docs/design/templates/value-table/details.svg +1 -1
  224. package/docs/design/templates/value-table-dark.svg +1 -5
  225. package/docs/design/templates/value-table.svg +1 -5
  226. package/docs/design/templates.md +29 -20
  227. package/docs/examples/component-catalog-extension-v2.json +3 -6
  228. package/docs/examples/component-catalog-extension.json +1 -1
  229. package/docs/layout.md +7 -9
  230. package/docs/recipes.md +8 -7
  231. package/docs/sunken-panel.md +11 -1
  232. package/docs/surface-scaffold.md +17 -0
  233. package/docs/type-contracts.md +11 -10
  234. package/docs/ui-analyzer.md +19 -1
  235. package/docs/ui-doctor.md +7 -5
  236. package/docs/ux-demo.md +6 -3
  237. package/docs/webawesome-theme.md +4 -1
  238. package/docs/workbench.md +49 -2
  239. package/doctor/eslint-diagnostics.d.mts +16 -0
  240. package/doctor/eslint-diagnostics.mjs +17 -0
  241. package/doctor/index.mjs +21 -3
  242. package/llms.txt +33 -11
  243. package/package.json +14 -8
  244. package/traversal-exclusions.mjs +7 -1
  245. package/ux-demo/recipes/app-shell.tsx +36 -23
  246. package/ux-demo/recipes/collapsible-sidebar.tsx +23 -17
  247. package/ux-demo/recipes/composer-form.tsx +15 -6
  248. package/ux-demo/recipes/list-detail-dialog.tsx +31 -15
  249. package/ux-demo/recipes/list-workspace-states.tsx +16 -7
  250. package/ux-demo/recipes/loading-inspector.tsx +39 -18
  251. package/ux-demo/recipes/navigation-sidebar.tsx +1 -1
  252. package/ux-demo/recipes/recipes.css +7 -2
  253. package/ux-demo/recipes/workspace-header.tsx +17 -7
  254. package/dist/browser/panel-header.js +0 -7
  255. package/dist/chunk-5VTB2BKP.js.map +0 -1
  256. package/dist/chunk-7L6EHUMV.js.map +0 -1
  257. package/dist/chunk-AASLYRGE.js.map +0 -1
  258. package/dist/chunk-BBRXX6PF.js.map +0 -1
  259. package/dist/chunk-DPDBVKNA.js.map +0 -1
  260. package/dist/chunk-DSNIYOZ3.js.map +0 -1
  261. package/dist/chunk-ELSJX4W7.js.map +0 -1
  262. package/dist/chunk-GP5DP5DL.js.map +0 -1
  263. package/dist/chunk-K57KRAOV.js.map +0 -1
  264. package/dist/chunk-M7JBER5U.js.map +0 -1
  265. package/dist/chunk-NENBUYX5.js +0 -79
  266. package/dist/chunk-NENBUYX5.js.map +0 -1
  267. package/dist/chunk-PIDTEQ3U.js.map +0 -1
  268. package/dist/chunk-PZQVSDLH.js.map +0 -1
  269. package/dist/chunk-RYRIFZCT.js +0 -58
  270. package/dist/chunk-RYRIFZCT.js.map +0 -1
  271. package/dist/chunk-VLYV65LK.js.map +0 -1
  272. package/dist/chunk-W4CXQYSG.js.map +0 -1
  273. package/dist/panel-header.d.ts +0 -42
  274. package/dist/panel-header.js +0 -7
  275. package/dist/panel-header.js.map +0 -1
  276. package/dist/styles/panel-header.css +0 -64
  277. package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
  278. package/docs/design/templates/panel-header/icon-actions.svg +0 -1
  279. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
  280. package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
  281. package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
  282. package/docs/design/templates/panel-header/no-icon.svg +0 -1
  283. package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
  284. package/docs/design/templates/panel-header/page-heading.svg +0 -1
  285. package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
  286. package/docs/design/templates/panel-header/title-only.svg +0 -1
  287. package/docs/design/templates/panel-header-dark.svg +0 -13
  288. package/docs/design/templates/panel-header.svg +0 -13
@@ -55,6 +55,58 @@
55
55
  transparent
56
56
  );
57
57
  }
58
+ .kui-toolbar-control-group[data-size="compact"] {
59
+ --kui-toolbar-group-size: 2.125rem;
60
+ }
61
+ .kui-toolbar-control-group[data-density="tight"] {
62
+ --kui-layout-item-padding: 0.3125rem;
63
+ }
64
+ .kui-toolbar-control-group[data-content="text"] > :is(button, wa-button),
65
+ .kui-toolbar-control-group[data-content="mixed"] > :is(button, wa-button) {
66
+ min-width: max-content;
67
+ }
68
+ .kui-toolbar-control-group[data-content="mixed"] > button {
69
+ display: flex;
70
+ gap: var(--kui-space-xs);
71
+ }
72
+ .kui-toolbar-control-group[data-content="mixed"] {
73
+ gap: 0.5rem;
74
+ }
75
+ .kui-toolbar-control-group[data-content="mixed"] > wa-dropdown {
76
+ padding-inline-start: 0.375rem;
77
+ border-inline-start: 1px solid var(--kui-toolbar-control-border);
78
+ }
79
+ .kui-toolbar-control-group[data-content="avatar"] img {
80
+ width: 1.5rem;
81
+ height: 1.5rem;
82
+ border-radius: var(--kui-radius-pill);
83
+ object-fit: cover;
84
+ }
85
+ .kui-toolbar-control-group[data-content="avatar"][data-scrim="true"] {
86
+ --kui-toolbar-control-background: color-mix(
87
+ in srgb,
88
+ var(--kui-color-neutral-fill-loud) 64%,
89
+ transparent
90
+ );
91
+ --kui-toolbar-control-color: var(--kui-color-neutral-on-loud);
92
+ }
93
+ .kui-toolbar-control-group[data-selected-tone="neutral"] {
94
+ --kui-toolbar-control-selected-color: var(--kui-color-neutral-on-normal);
95
+ --kui-toolbar-control-selected-background: var(
96
+ --kui-color-neutral-fill-normal
97
+ );
98
+ }
99
+ .kui-toolbar-control-group[data-selected-chrome="filled"] {
100
+ --kui-toolbar-control-selected-shadow: none;
101
+ --kui-toolbar-control-selected-border: transparent;
102
+ --kui-toolbar-control-selected-background: var(--kui-color-brand-fill-normal);
103
+ --kui-toolbar-control-selected-color: var(--kui-color-brand-on-normal);
104
+ }
105
+ .kui-toolbar-control-group[data-selected-chrome="outline"] {
106
+ --kui-toolbar-control-selected-shadow: none;
107
+ --kui-toolbar-control-selected-background: transparent;
108
+ --kui-toolbar-control-selected-border: var(--kui-color-brand-border-normal);
109
+ }
58
110
 
59
111
  .kui-toolbar-control-group[data-appearance="borderless"] {
60
112
  /* A borderless group has no base fill to lift from, so the default
@@ -72,6 +124,9 @@
72
124
  .kui-toolbar-control-group > :is(button, wa-button, wa-dropdown) {
73
125
  flex: 0 0 auto;
74
126
  }
127
+ .kui-toolbar-control-group > wa-dropdown {
128
+ display: inline-flex;
129
+ }
75
130
 
76
131
  .kui-toolbar-control-group > button {
77
132
  appearance: none;
@@ -111,6 +166,23 @@
111
166
  min-width: 2.5rem;
112
167
  height: 2.5rem;
113
168
  }
169
+ .kui-toolbar-control-group[data-size="compact"] > button,
170
+ .kui-toolbar-control-group[data-size="compact"] > wa-button,
171
+ .kui-toolbar-control-group[data-size="compact"] > wa-dropdown,
172
+ .kui-toolbar-control-group[data-size="compact"] > wa-dropdown > wa-button,
173
+ .kui-toolbar-control-group[data-size="compact"]
174
+ > wa-dropdown
175
+ > wa-button::part(base),
176
+ .kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
177
+ wa-dropdown
178
+ wa-button,
179
+ .kui-toolbar-control-group[data-size="compact"][data-nested-dropdown="true"]
180
+ wa-dropdown
181
+ wa-button::part(base) {
182
+ min-width: 2rem;
183
+ height: 2rem;
184
+ min-height: 2rem;
185
+ }
114
186
 
115
187
  .kui-toolbar-control-group[data-single="true"] > wa-dropdown,
116
188
  .kui-toolbar-control-group[data-single="true"] > wa-dropdown > wa-button,
@@ -161,7 +233,7 @@
161
233
 
162
234
  /* A group holding exactly one control behaves like `single` even without the
163
235
  flag: the whole group background changes on hover instead of highlighting an
164
- inner layer inset from the border (KF-J9P1ZD — a PanelHeader's lone Close/
236
+ inner layer inset from the border (KF-J9P1ZD — a heading toolbar's lone Close/
165
237
  Done action). */
166
238
  .kui-toolbar-control-group:not([data-single="true"]):has(
167
239
  > :is(button, wa-button):only-child
@@ -23,7 +23,7 @@
23
23
  }
24
24
 
25
25
  .kui-toolbar-text[data-size="xlarge"] {
26
- /* Matches the page/panel title: the same responsive clamp so a PanelHeader
26
+ /* Matches page/panel titles: the same responsive clamp so a heading toolbar
27
27
  title reads at the page-title scale without a bespoke override. Height grows
28
28
  to the larger text (the fixed 40px would clip its ascenders). */
29
29
  height: auto;
@@ -20,8 +20,44 @@
20
20
  grid-template-columns: minmax(0, 1fr) auto;
21
21
  }
22
22
 
23
- .kui-toolbar[data-divider="true"] {
24
- box-shadow: inset 0 -1px var(--kui-color-border);
23
+ .kui-toolbar {
24
+ --_kui-toolbar-divider-top: transparent;
25
+ --_kui-toolbar-divider-right: transparent;
26
+ --_kui-toolbar-divider-bottom: transparent;
27
+ --_kui-toolbar-divider-left: transparent;
28
+ box-shadow:
29
+ inset 0 1px var(--_kui-toolbar-divider-top),
30
+ inset -1px 0 var(--_kui-toolbar-divider-right),
31
+ inset 0 -1px var(--_kui-toolbar-divider-bottom),
32
+ inset 1px 0 var(--_kui-toolbar-divider-left);
33
+ }
34
+
35
+ .kui-toolbar[divider-sides*="t"] {
36
+ --_kui-toolbar-divider-top: var(
37
+ --kui-toolbar-divider-color,
38
+ var(--kui-color-border)
39
+ );
40
+ }
41
+
42
+ .kui-toolbar[divider-sides*="r"] {
43
+ --_kui-toolbar-divider-right: var(
44
+ --kui-toolbar-divider-color,
45
+ var(--kui-color-border)
46
+ );
47
+ }
48
+
49
+ .kui-toolbar[divider-sides*="b"] {
50
+ --_kui-toolbar-divider-bottom: var(
51
+ --kui-toolbar-divider-color,
52
+ var(--kui-color-border)
53
+ );
54
+ }
55
+
56
+ .kui-toolbar[divider-sides*="l"] {
57
+ --_kui-toolbar-divider-left: var(
58
+ --kui-toolbar-divider-color,
59
+ var(--kui-color-border)
60
+ );
25
61
  }
26
62
 
27
63
  .kui-toolbar__leading,
@@ -290,6 +290,18 @@
290
290
  padding: var(--kui-wa-surface-inset);
291
291
  }
292
292
 
293
+ /* Dialog content follows the compact surface inset, while its action region
294
+ retains the roomier homogeneous-group step. Keep these independent of
295
+ Web Awesome's shared --spacing property so applications can tune the
296
+ header without accidentally moving body or footer content. */
297
+ wa-dialog::part(body) {
298
+ padding: var(--kui-wa-surface-inset);
299
+ }
300
+
301
+ wa-dialog::part(footer) {
302
+ padding: var(--kui-wa-container-inset);
303
+ }
304
+
293
305
  wa-callout {
294
306
  padding: var(--kui-wa-surface-inset) !important;
295
307
  }
@@ -1,4 +1,5 @@
1
1
  .kui-workbench {
2
+ position: relative;
2
3
  display: flex;
3
4
  min-width: 0;
4
5
  min-height: 0;
@@ -30,6 +31,11 @@
30
31
  border-inline: 0;
31
32
  }
32
33
 
34
+ .kui-workbench__rail[data-separator="hidden"],
35
+ .kui-workbench__drawer[data-separator="hidden"] {
36
+ border-color: transparent;
37
+ }
38
+
33
39
  .kui-workbench__center {
34
40
  display: flex;
35
41
  flex: 1;
@@ -59,6 +65,17 @@
59
65
  border-block-start: 0;
60
66
  }
61
67
 
68
+ .kui-workbench__rail[data-content-overflow="auto"],
69
+ .kui-workbench__drawer[data-content-overflow="auto"] {
70
+ overflow: auto;
71
+ }
72
+
73
+ .kui-workbench__rail[data-content-overflow="visible"],
74
+ .kui-workbench__drawer[data-content-overflow="visible"] {
75
+ z-index: var(--kui-workbench-popup-z, 5);
76
+ overflow: visible;
77
+ }
78
+
62
79
  /* The fixed-size sliding content. The rail/drawer keeps a definite size on its
63
80
  content so the transform reads as a slide, not a squeeze. */
64
81
  .kui-workbench__rail .kui-workbench__panel-content {
@@ -73,6 +90,19 @@
73
90
  transition: transform 200ms ease;
74
91
  }
75
92
 
93
+ .kui-workbench__rail[data-collapse-motion="none"] .kui-workbench__panel-content,
94
+ .kui-workbench__drawer[data-collapse-motion="none"]
95
+ .kui-workbench__panel-content {
96
+ transition: none;
97
+ }
98
+
99
+ .kui-workbench__rail[data-collapse-motion="fade-slide"][data-collapsed="true"]
100
+ .kui-workbench__panel-content,
101
+ .kui-workbench__drawer[data-collapse-motion="fade-slide"][data-collapsed="true"]
102
+ .kui-workbench__panel-content {
103
+ opacity: 0;
104
+ }
105
+
76
106
  .kui-workbench__rail--left[data-collapsed="true"]
77
107
  .kui-workbench__panel-content {
78
108
  transform: translateX(-100%);
@@ -87,6 +117,65 @@
87
117
  transform: translateY(100%);
88
118
  }
89
119
 
120
+ .kui-workbench__rail[data-presentation="overlay"],
121
+ .kui-workbench__drawer[data-presentation="overlay"] {
122
+ position: absolute;
123
+ z-index: var(--kui-workbench-overlay-z, 41);
124
+ max-width: var(--kui-workbench-overlay-max-width, 85vw);
125
+ max-height: var(--kui-workbench-overlay-max-height, 85vh);
126
+ box-shadow: var(--kui-shadow-l, 0 8px 32px rgb(0 0 0 / 24%));
127
+ }
128
+
129
+ .kui-workbench__rail[data-presentation="overlay"] {
130
+ inset-block: 0;
131
+ }
132
+
133
+ .kui-workbench__rail--left[data-presentation="overlay"] {
134
+ inset-inline-start: 0;
135
+ }
136
+
137
+ .kui-workbench__rail--right[data-presentation="overlay"] {
138
+ inset-inline-end: 0;
139
+ }
140
+
141
+ .kui-workbench__drawer[data-presentation="overlay"] {
142
+ inset-inline: 0;
143
+ inset-block-end: 0;
144
+ }
145
+
146
+ .kui-workbench__rail[data-presentation="overlay"][data-collapsed="true"],
147
+ .kui-workbench__drawer[data-presentation="overlay"][data-collapsed="true"] {
148
+ pointer-events: none;
149
+ }
150
+
151
+ .kui-workbench__rail[data-presentation="hidden"],
152
+ .kui-workbench__drawer[data-presentation="hidden"] {
153
+ display: none;
154
+ }
155
+
156
+ .kui-workbench__restore {
157
+ position: fixed;
158
+ z-index: var(--kui-workbench-restore-z, 42);
159
+ inset-block-end: calc(
160
+ var(--kui-workbench-restore-inset, 1rem) +
161
+ var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
162
+ );
163
+ }
164
+
165
+ .kui-workbench__restore[data-position="bottom-start"] {
166
+ inset-inline-start: calc(
167
+ var(--kui-workbench-restore-inset, 1rem) +
168
+ var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
169
+ );
170
+ }
171
+
172
+ .kui-workbench__restore[data-position="bottom-end"] {
173
+ inset-inline-end: calc(
174
+ var(--kui-workbench-restore-inset, 1rem) +
175
+ var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
176
+ );
177
+ }
178
+
90
179
  @media (prefers-reduced-motion: reduce) {
91
180
  .kui-workbench__panel-content {
92
181
  transition: none;
@@ -1,9 +1,12 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
2
 
3
+ type SunkenPanelShape = 'rounded' | 'square';
3
4
  interface SunkenPanelProps {
4
5
  children?: SafeHtml | readonly SafeHtml[];
5
6
  /** Optional accessible landmark name for a distinct application region. */
6
7
  ariaLabel?: string;
8
+ /** Corner shape: a rounded rectangle (default) or square corners. */
9
+ shape?: SunkenPanelShape;
7
10
  className?: string;
8
11
  }
9
12
  /**
@@ -11,6 +14,6 @@ interface SunkenPanelProps {
11
14
  * stack. The panel owns its background and padding; children own their own
12
15
  * borders and internal geometry.
13
16
  */
14
- declare function SunkenPanel({ children, ariaLabel, className, }: SunkenPanelProps): SafeHtml;
17
+ declare function SunkenPanel({ children, ariaLabel, shape, className, }: SunkenPanelProps): SafeHtml;
15
18
 
16
- export { SunkenPanel, type SunkenPanelProps };
19
+ export { SunkenPanel, type SunkenPanelProps, type SunkenPanelShape };
@@ -1,3 +1,3 @@
1
- export { SunkenPanel } from './chunk-W4CXQYSG.js';
1
+ export { SunkenPanel } from './chunk-TB6DY7H5.js';
2
2
 
3
3
  //# sourceMappingURL=sunken-panel.js.map
@@ -0,0 +1,25 @@
1
+ import { SafeHtml } from 'kerfjs';
2
+
3
+ type DialogSurfaceSize = 'small' | 'medium' | 'large';
4
+ type DialogSurfacePresentation = 'modal' | 'side-sheet' | 'fullscreen';
5
+ type SurfaceInset = 'none' | 'compact' | 'comfortable';
6
+ interface DialogSurfaceProps {
7
+ children: SafeHtml | readonly SafeHtml[];
8
+ size?: DialogSurfaceSize;
9
+ presentation?: DialogSurfacePresentation;
10
+ bodyInset?: SurfaceInset;
11
+ footerInset?: SurfaceInset;
12
+ className?: string;
13
+ }
14
+ /** Configure recurring Web Awesome dialog geometry without consumer ::part() CSS. */
15
+ declare function DialogSurface({ children, size, presentation, bodyInset, footerInset, className, }: DialogSurfaceProps): SafeHtml;
16
+ type PopupSurfaceInset = 'standard' | 'compact' | 'list-zero';
17
+ interface PopupSurfaceProps {
18
+ children: SafeHtml | readonly SafeHtml[];
19
+ inset?: PopupSurfaceInset;
20
+ className?: string;
21
+ }
22
+ /** Configure recurring Web Awesome dropdown-menu geometry without consumer ::part() CSS. */
23
+ declare function PopupSurface({ children, inset, className, }: PopupSurfaceProps): SafeHtml;
24
+
25
+ export { DialogSurface, type DialogSurfacePresentation, type DialogSurfaceProps, type DialogSurfaceSize, PopupSurface, type PopupSurfaceInset, type PopupSurfaceProps, type SurfaceInset };
@@ -0,0 +1,3 @@
1
+ export { DialogSurface, PopupSurface } from './chunk-OBLTAKSX.js';
2
+
3
+ //# sourceMappingURL=surface-scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"surface-scaffold.js"}
package/dist/tab-bar.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
2
 
3
3
  type TabActivation = 'automatic' | 'manual';
4
+ type TabBarAllocation = 'intrinsic' | 'fill';
5
+ type TabBarPresentation = 'rail' | 'segmented' | 'inspector';
6
+ type TabBarTrailingPlacement = 'separate' | 'adjacent';
4
7
  interface TabBarProps {
5
8
  id: string;
6
9
  label: string;
@@ -15,8 +18,14 @@ interface TabBarProps {
15
18
  * selects with Enter / Space / click — use it when selecting a tab is a heavy action.
16
19
  */
17
20
  activation?: TabActivation;
21
+ /** How available strip width is allocated across child AppTabs. */
22
+ allocation?: TabBarAllocation;
23
+ /** Named strip chrome for application rails, segmented tabs, or inspectors. */
24
+ presentation?: TabBarPresentation;
25
+ /** Keep a trailing action beside the final tab or at the far edge of the bar. */
26
+ trailingPlacement?: TabBarTrailingPlacement;
18
27
  }
19
28
  /** Render a controlled tab strip. The application owns selection, order, and persistence. */
20
- declare function TabBar({ id, label, children, leading, trailing, className, activation, }: TabBarProps): SafeHtml;
29
+ declare function TabBar({ id, label, children, leading, trailing, className, activation, allocation, presentation, trailingPlacement, }: TabBarProps): SafeHtml;
21
30
 
22
- export { type TabActivation, TabBar, type TabBarProps };
31
+ export { type TabActivation, TabBar, type TabBarAllocation, type TabBarPresentation, type TabBarProps, type TabBarTrailingPlacement };
package/dist/tab-bar.js CHANGED
@@ -1,3 +1,3 @@
1
- export { TabBar } from './chunk-M7JBER5U.js';
1
+ export { TabBar } from './chunk-X2U3QJCJ.js';
2
2
 
3
3
  //# sourceMappingURL=tab-bar.js.map
@@ -4,6 +4,11 @@ type ToolbarControlGroupAppearance = 'contained' | 'borderless';
4
4
  type ToolbarControlGroupTone = 'default' | 'dark';
5
5
  type ToolbarControlGroupButtonAppearance = 'plain' | 'push';
6
6
  type ToolbarControlGroupShape = 'pill' | 'rounded';
7
+ type ToolbarControlGroupSize = 'default' | 'compact';
8
+ type ToolbarControlGroupDensity = 'comfortable' | 'tight';
9
+ type ToolbarControlGroupContent = 'icon' | 'text' | 'mixed' | 'avatar';
10
+ type ToolbarControlGroupSelectedChrome = 'raised' | 'filled' | 'outline';
11
+ type ToolbarControlGroupSelectedTone = 'brand' | 'neutral';
7
12
  interface ToolbarControlGroupProps {
8
13
  children: SafeHtml | SafeHtml[];
9
14
  label?: string;
@@ -15,7 +20,16 @@ interface ToolbarControlGroupProps {
15
20
  buttonAppearance?: ToolbarControlGroupButtonAppearance;
16
21
  /** Corner shape: fully round `pill` (default) or a softer `rounded` rectangle. */
17
22
  shape?: ToolbarControlGroupShape;
23
+ size?: ToolbarControlGroupSize;
24
+ density?: ToolbarControlGroupDensity;
25
+ content?: ToolbarControlGroupContent;
26
+ selectedChrome?: ToolbarControlGroupSelectedChrome;
27
+ selectedTone?: ToolbarControlGroupSelectedTone;
28
+ /** Size a nested Web Awesome dropdown trigger as part of this group. */
29
+ nestedDropdown?: boolean;
30
+ /** Add contrast behind photo-backed avatar content. */
31
+ scrim?: boolean;
18
32
  }
19
- declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance, shape, }: ToolbarControlGroupProps): SafeHtml;
33
+ declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance, shape, size, density, content, selectedChrome, selectedTone, nestedDropdown, scrim, }: ToolbarControlGroupProps): SafeHtml;
20
34
 
21
- export { ToolbarControlGroup, type ToolbarControlGroupAppearance, type ToolbarControlGroupButtonAppearance, type ToolbarControlGroupProps, type ToolbarControlGroupShape, type ToolbarControlGroupTone };
35
+ export { ToolbarControlGroup, type ToolbarControlGroupAppearance, type ToolbarControlGroupButtonAppearance, type ToolbarControlGroupContent, type ToolbarControlGroupDensity, type ToolbarControlGroupProps, type ToolbarControlGroupSelectedChrome, type ToolbarControlGroupSelectedTone, type ToolbarControlGroupShape, type ToolbarControlGroupSize, type ToolbarControlGroupTone };
@@ -1,3 +1,3 @@
1
- export { ToolbarControlGroup } from './chunk-5VTB2BKP.js';
1
+ export { ToolbarControlGroup } from './chunk-WNWD54GR.js';
2
2
 
3
3
  //# sourceMappingURL=toolbar-control-group.js.map
@@ -1,4 +1,4 @@
1
- export { ToolbarText } from './chunk-W7YD6E4N.js';
1
+ export { ToolbarText } from './chunk-R7ZWUN64.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=toolbar-text.js.map
package/dist/toolbar.d.ts CHANGED
@@ -1,13 +1,15 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
+ import { D as DividerSides } from './divider-sides-267FA7sY.js';
2
3
 
3
4
  interface ToolbarProps {
4
5
  leading?: SafeHtml;
5
6
  center?: SafeHtml;
6
7
  trailing?: SafeHtml;
7
8
  label?: string;
8
- divider?: boolean;
9
+ /** Physical divider edges in canonical top/right/bottom/left order. Defaults to bottom. */
10
+ dividerSides?: DividerSides;
9
11
  className?: string;
10
12
  }
11
- declare function Toolbar({ leading, center, trailing, label, divider, className, }: ToolbarProps): SafeHtml;
13
+ declare function Toolbar({ leading, center, trailing, label, dividerSides, className, }: ToolbarProps): SafeHtml;
12
14
 
13
- export { Toolbar, type ToolbarProps };
15
+ export { DividerSides, Toolbar, type ToolbarProps };
package/dist/toolbar.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Toolbar } from './chunk-7L6EHUMV.js';
1
+ export { Toolbar } from './chunk-SYDMYBPG.js';
2
2
 
3
3
  //# sourceMappingURL=toolbar.js.map
@@ -1,4 +1,4 @@
1
- export { ValueTable, ValueTableRow } from './chunk-QQFJMRIB.js';
1
+ export { ValueTable, ValueTableRow } from './chunk-KWWR5VMS.js';
2
2
 
3
3
 
4
4
  //# sourceMappingURL=value-table.js.map
@@ -23,6 +23,7 @@ declare module 'kerfjs/jsx-runtime' {
23
23
  'aria-label'?: string;
24
24
  value?: string;
25
25
  placeholder?: string;
26
+ hint?: string;
26
27
  disabled?: boolean;
27
28
  };
28
29
  'wa-option': KerfCustomElement & {
@@ -39,8 +39,10 @@ interface CatalogRevealOptions {
39
39
  declare function revealCatalogEntry(root: HTMLElement, id: string, { block, inline, behavior, media, }?: CatalogRevealOptions): () => void;
40
40
  /**
41
41
  * Keep a Catalog's opt-in geometry overlay synchronized with its preview.
42
- * Transparent specimens receive a dashed outer bound and positive margins use
43
- * devtools-style orange bands. Returns a disposer.
42
+ * Specimens receive computed border highlights (or a dashed bound when they
43
+ * have no border and are transparent), while positive computed margins use
44
+ * devtools-style orange bands. CSS/stylesheet-only changes are observed too.
45
+ * Returns a disposer.
44
46
  */
45
47
  declare function wireCatalogGeometryOverlay(root: HTMLElement): () => void;
46
48
  /**