@kerfjs/ui 5.0.0-beta.7 → 5.0.0-beta.70

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 (723) hide show
  1. package/README.md +501 -139
  2. package/ai/application-ui-diagnostic-ids-v1.json +109 -0
  3. package/ai/application-ui-profile-sync.cjs +548 -0
  4. package/ai/application-ui-profile.d.mts +1 -0
  5. package/ai/application-ui-profile.d.ts +106 -0
  6. package/ai/application-ui-profile.defaults.json +96 -0
  7. package/ai/application-ui-profile.mjs +653 -0
  8. package/ai/application-ui-profile.schema.json +140 -0
  9. package/ai/catalog-authoring.json +36 -0
  10. package/ai/catalog-authoring.schema.json +109 -0
  11. package/ai/compile-time-contracts-v1.json +149 -0
  12. package/ai/compile-time-contracts-v1.schema.json +52 -0
  13. package/ai/component-catalog-extension.schema.json +104 -0
  14. package/ai/component-catalog.json +3910 -464
  15. package/ai/component-catalog.schema.json +92 -1
  16. package/ai/component-class-owners.cjs +83 -0
  17. package/ai/component-composition-extension.d.ts +7 -0
  18. package/ai/component-composition-extension.schema.json +7 -0
  19. package/ai/component-composition-rules.json +524 -0
  20. package/ai/component-composition.d.ts +127 -0
  21. package/ai/component-composition.json +7128 -0
  22. package/ai/component-composition.schema.json +399 -0
  23. package/ai/components/README.md +171 -0
  24. package/ai/components/application-tabs.md +65 -0
  25. package/ai/components/badge.md +72 -0
  26. package/ai/components/chip.md +72 -0
  27. package/ai/components/collapsible-panel.md +102 -0
  28. package/ai/components/content-item.md +93 -0
  29. package/ai/components/disclosure-arrow.md +77 -0
  30. package/ai/components/document-baseline.md +75 -0
  31. package/ai/components/empty-state.md +80 -0
  32. package/ai/components/feedback.md +71 -0
  33. package/ai/components/floating-toolbar.md +82 -0
  34. package/ai/components/foundation.md +65 -0
  35. package/ai/components/grid.md +98 -0
  36. package/ai/components/headers.md +63 -0
  37. package/ai/components/layout.md +75 -0
  38. package/ai/components/list-action-row.md +91 -0
  39. package/ai/components/list-header.md +89 -0
  40. package/ai/components/list-inset-control.md +74 -0
  41. package/ai/components/list-inset-text.md +72 -0
  42. package/ai/components/list-item.md +94 -0
  43. package/ai/components/list.md +105 -0
  44. package/ai/components/loading-spinner.md +73 -0
  45. package/ai/components/lucide-icon.md +78 -0
  46. package/ai/components/nav-stack.md +104 -0
  47. package/ai/components/pane.md +101 -0
  48. package/ai/components/popup-menu.md +171 -0
  49. package/ai/components/recipe-app-shell.md +57 -0
  50. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  51. package/ai/components/recipe-compact-toolbar.md +57 -0
  52. package/ai/components/recipe-composer-form.md +57 -0
  53. package/ai/components/recipe-list-detail-dialog.md +57 -0
  54. package/ai/components/recipe-list-workspace-states.md +57 -0
  55. package/ai/components/recipe-loading-inspector.md +57 -0
  56. package/ai/components/recipe-navigation-sidebar.md +57 -0
  57. package/ai/components/recipe-navigation-stack.md +57 -0
  58. package/ai/components/recipe-workspace-header.md +57 -0
  59. package/ai/components/resize.md +106 -0
  60. package/ai/components/row.md +96 -0
  61. package/ai/components/segmented-control.md +82 -0
  62. package/ai/components/select.md +113 -0
  63. package/ai/components/skeleton.md +84 -0
  64. package/ai/components/spacer.md +86 -0
  65. package/ai/components/split-view.md +102 -0
  66. package/ai/components/state-banner.md +94 -0
  67. package/ai/components/sunken-panel.md +79 -0
  68. package/ai/components/surface-scaffold.md +78 -0
  69. package/ai/components/tab-bar.md +113 -0
  70. package/ai/components/tab-scaffold.md +94 -0
  71. package/ai/components/tabs.md +95 -0
  72. package/ai/components/text.md +85 -0
  73. package/ai/components/token-search-field.md +106 -0
  74. package/ai/components/toolbar-control-group.md +102 -0
  75. package/ai/components/toolbar-text.md +79 -0
  76. package/ai/components/toolbar.md +97 -0
  77. package/ai/components/value-table.md +73 -0
  78. package/ai/components/wa-accordion-item.md +55 -0
  79. package/ai/components/wa-accordion.md +65 -0
  80. package/ai/components/wa-animated-image.md +55 -0
  81. package/ai/components/wa-animation.md +55 -0
  82. package/ai/components/wa-avatar.md +55 -0
  83. package/ai/components/wa-badge.md +55 -0
  84. package/ai/components/wa-breadcrumb-item.md +53 -0
  85. package/ai/components/wa-breadcrumb.md +55 -0
  86. package/ai/components/wa-button-group.md +59 -0
  87. package/ai/components/wa-button.md +55 -0
  88. package/ai/components/wa-callout.md +58 -0
  89. package/ai/components/wa-card.md +59 -0
  90. package/ai/components/wa-carousel-item.md +53 -0
  91. package/ai/components/wa-carousel.md +55 -0
  92. package/ai/components/wa-checkbox-group.md +55 -0
  93. package/ai/components/wa-checkbox.md +55 -0
  94. package/ai/components/wa-color-picker.md +55 -0
  95. package/ai/components/wa-comparison.md +55 -0
  96. package/ai/components/wa-copy-button.md +55 -0
  97. package/ai/components/wa-details.md +61 -0
  98. package/ai/components/wa-dialog.md +59 -0
  99. package/ai/components/wa-divider.md +53 -0
  100. package/ai/components/wa-drawer.md +55 -0
  101. package/ai/components/wa-dropdown-item.md +60 -0
  102. package/ai/components/wa-dropdown.md +60 -0
  103. package/ai/components/wa-format-bytes.md +53 -0
  104. package/ai/components/wa-format-date.md +53 -0
  105. package/ai/components/wa-format-number.md +53 -0
  106. package/ai/components/wa-icon.md +58 -0
  107. package/ai/components/wa-include.md +53 -0
  108. package/ai/components/wa-input.md +59 -0
  109. package/ai/components/wa-intersection-observer.md +53 -0
  110. package/ai/components/wa-known-date.md +53 -0
  111. package/ai/components/wa-markdown.md +53 -0
  112. package/ai/components/wa-mutation-observer.md +53 -0
  113. package/ai/components/wa-number-input.md +55 -0
  114. package/ai/components/wa-option.md +59 -0
  115. package/ai/components/wa-otp-input.md +53 -0
  116. package/ai/components/wa-page.md +53 -0
  117. package/ai/components/wa-pagination.md +55 -0
  118. package/ai/components/wa-popover.md +55 -0
  119. package/ai/components/wa-popup.md +53 -0
  120. package/ai/components/wa-progress-bar.md +53 -0
  121. package/ai/components/wa-progress-ring.md +53 -0
  122. package/ai/components/wa-qr-code.md +53 -0
  123. package/ai/components/wa-radio-group.md +59 -0
  124. package/ai/components/wa-radio.md +55 -0
  125. package/ai/components/wa-random-content.md +53 -0
  126. package/ai/components/wa-rating.md +55 -0
  127. package/ai/components/wa-relative-time.md +53 -0
  128. package/ai/components/wa-resize-observer.md +53 -0
  129. package/ai/components/wa-scroller.md +53 -0
  130. package/ai/components/wa-select.md +63 -0
  131. package/ai/components/wa-skeleton.md +53 -0
  132. package/ai/components/wa-slider.md +55 -0
  133. package/ai/components/wa-spinner.md +58 -0
  134. package/ai/components/wa-split-panel.md +58 -0
  135. package/ai/components/wa-switch.md +53 -0
  136. package/ai/components/wa-tab-group.md +69 -0
  137. package/ai/components/wa-tab-panel.md +60 -0
  138. package/ai/components/wa-tab.md +59 -0
  139. package/ai/components/wa-tag.md +59 -0
  140. package/ai/components/wa-textarea.md +53 -0
  141. package/ai/components/wa-time-input.md +55 -0
  142. package/ai/components/wa-toast-item.md +60 -0
  143. package/ai/components/wa-toast.md +60 -0
  144. package/ai/components/wa-tooltip.md +55 -0
  145. package/ai/components/wa-tree-item.md +55 -0
  146. package/ai/components/wa-tree.md +55 -0
  147. package/ai/components/wa-zoomable-frame.md +55 -0
  148. package/ai/components/workbench.md +118 -0
  149. package/ai/public-api-signatures-v1.md +2748 -210
  150. package/ai/skill.md +286 -66
  151. package/ai/webawesome-jsx-signatures-v1.md +9 -2
  152. package/analyzer/cli.mjs +49 -0
  153. package/analyzer/component-ownership.d.mts +72 -0
  154. package/analyzer/component-ownership.mjs +286 -0
  155. package/analyzer/index.d.mts +52 -0
  156. package/analyzer/index.mjs +2038 -0
  157. package/analyzer/loud-pairs.d.mts +49 -0
  158. package/analyzer/loud-pairs.mjs +357 -0
  159. package/analyzer/report.schema.json +66 -0
  160. package/analyzer/selectors.d.mts +21 -0
  161. package/analyzer/selectors.mjs +212 -0
  162. package/catalog-projection-cli.mjs +96 -0
  163. package/catalog-projection.d.mts +55 -0
  164. package/catalog-projection.mjs +62 -0
  165. package/dist/app-tab.d.ts +39 -4
  166. package/dist/app-tab.js +2 -1
  167. package/dist/badge.d.ts +52 -0
  168. package/dist/badge.js +3 -0
  169. package/dist/badge.js.map +1 -0
  170. package/dist/browser/badge.js +3 -0
  171. package/dist/browser/catalog.js +26 -0
  172. package/dist/browser/chip.js +3 -0
  173. package/dist/browser/collapsible-panel.js +9 -0
  174. package/dist/browser/content-item.js +3 -0
  175. package/dist/browser/floating-toolbar.js +3 -0
  176. package/dist/browser/grid.js +3 -0
  177. package/dist/browser/list-action-row.js +5 -0
  178. package/dist/browser/{menu-header.js → list-header.js} +4 -2
  179. package/dist/browser/list-inset-control.js +3 -0
  180. package/dist/browser/list-inset-text.js +3 -0
  181. package/dist/browser/list-item.js +5 -0
  182. package/dist/browser/list.js +3 -0
  183. package/dist/browser/{panel-header.js → nav-stack.js} +5 -3
  184. package/dist/browser/pane.js +3 -0
  185. package/dist/browser/popup-menu.js +3 -0
  186. package/dist/browser/row.js +3 -0
  187. package/dist/browser/segmented-control.js +0 -1
  188. package/dist/browser/select.js +1 -0
  189. package/dist/browser/spacer.js +3 -0
  190. package/dist/browser/split-view.js +11 -0
  191. package/dist/browser/state-banner.js +1 -0
  192. package/dist/browser/sunken-panel.js +3 -0
  193. package/dist/browser/surface-scaffold.js +3 -0
  194. package/dist/browser/tab-scaffold.js +4 -0
  195. package/dist/browser/text.js +3 -0
  196. package/dist/browser/toolbar-control-group.js +1 -0
  197. package/dist/browser/workbench.js +14 -0
  198. package/dist/catalog-resources.d.ts +48 -0
  199. package/dist/catalog-resources.js +22 -0
  200. package/dist/catalog-resources.js.map +1 -0
  201. package/dist/catalog.d.ts +92 -0
  202. package/dist/catalog.js +503 -0
  203. package/dist/catalog.js.map +1 -0
  204. package/dist/chip.d.ts +35 -0
  205. package/dist/chip.js +3 -0
  206. package/dist/chip.js.map +1 -0
  207. package/dist/chunk-2G2ZJQYK.js +152 -0
  208. package/dist/chunk-2G2ZJQYK.js.map +1 -0
  209. package/dist/chunk-3BYFWTP3.js +108 -0
  210. package/dist/chunk-3BYFWTP3.js.map +1 -0
  211. package/dist/chunk-47CKKLBE.js +34 -0
  212. package/dist/chunk-47CKKLBE.js.map +1 -0
  213. package/dist/chunk-4SQK27MR.js +202 -0
  214. package/dist/chunk-4SQK27MR.js.map +1 -0
  215. package/dist/chunk-5I7QGQVT.js +24 -0
  216. package/dist/chunk-5I7QGQVT.js.map +1 -0
  217. package/dist/chunk-6DFDTWGG.js +288 -0
  218. package/dist/chunk-6DFDTWGG.js.map +1 -0
  219. package/dist/chunk-7OKX3EF6.js +135 -0
  220. package/dist/chunk-7OKX3EF6.js.map +1 -0
  221. package/dist/chunk-AHEG27M7.js +66 -0
  222. package/dist/chunk-AHEG27M7.js.map +1 -0
  223. package/dist/chunk-AYUHMAI6.js +48 -0
  224. package/dist/chunk-AYUHMAI6.js.map +1 -0
  225. package/dist/chunk-B2ZMR7NY.js +85 -0
  226. package/dist/chunk-B2ZMR7NY.js.map +1 -0
  227. package/dist/chunk-BFPBS5Y4.js +250 -0
  228. package/dist/chunk-BFPBS5Y4.js.map +1 -0
  229. package/dist/chunk-DB5ADJKF.js +775 -0
  230. package/dist/chunk-DB5ADJKF.js.map +1 -0
  231. package/dist/chunk-DC6CN2DS.js +123 -0
  232. package/dist/chunk-DC6CN2DS.js.map +1 -0
  233. package/dist/chunk-DG6G5EPF.js +35 -0
  234. package/dist/chunk-DG6G5EPF.js.map +1 -0
  235. package/dist/{chunk-56RJXPHG.js → chunk-G4S2QU6V.js} +7 -4
  236. package/dist/chunk-G4S2QU6V.js.map +1 -0
  237. package/dist/chunk-GLDWRCAM.js +49 -0
  238. package/dist/chunk-GLDWRCAM.js.map +1 -0
  239. package/dist/chunk-I3Q7KKYM.js +33 -0
  240. package/dist/chunk-I3Q7KKYM.js.map +1 -0
  241. package/dist/chunk-IA7TMD4Y.js +288 -0
  242. package/dist/chunk-IA7TMD4Y.js.map +1 -0
  243. package/dist/chunk-J3KGJ6P6.js +135 -0
  244. package/dist/chunk-J3KGJ6P6.js.map +1 -0
  245. package/dist/chunk-K47P7QZC.js +17 -0
  246. package/dist/chunk-K47P7QZC.js.map +1 -0
  247. package/dist/chunk-K67Y2JNF.js +222 -0
  248. package/dist/chunk-K67Y2JNF.js.map +1 -0
  249. package/dist/chunk-KCCEH7RF.js +492 -0
  250. package/dist/chunk-KCCEH7RF.js.map +1 -0
  251. package/dist/chunk-KLJKU6ZL.js +109 -0
  252. package/dist/chunk-KLJKU6ZL.js.map +1 -0
  253. package/dist/chunk-KVBRMEPM.js +44 -0
  254. package/dist/chunk-KVBRMEPM.js.map +1 -0
  255. package/dist/chunk-M6DEEBEF.js +156 -0
  256. package/dist/chunk-M6DEEBEF.js.map +1 -0
  257. package/dist/chunk-MEY33VWB.js +44 -0
  258. package/dist/chunk-MEY33VWB.js.map +1 -0
  259. package/dist/chunk-MP2GDBQZ.js +50 -0
  260. package/dist/chunk-MP2GDBQZ.js.map +1 -0
  261. package/dist/chunk-NC4CFOID.js +188 -0
  262. package/dist/chunk-NC4CFOID.js.map +1 -0
  263. package/dist/chunk-NCSWXG7G.js +80 -0
  264. package/dist/chunk-NCSWXG7G.js.map +1 -0
  265. package/dist/chunk-NN6GYOA2.js +47 -0
  266. package/dist/chunk-NN6GYOA2.js.map +1 -0
  267. package/dist/chunk-OXO2QJWV.js +55 -0
  268. package/dist/chunk-OXO2QJWV.js.map +1 -0
  269. package/dist/chunk-P7D3EMXM.js +52 -0
  270. package/dist/chunk-P7D3EMXM.js.map +1 -0
  271. package/dist/chunk-PSHUSWQH.js +18 -0
  272. package/dist/chunk-PSHUSWQH.js.map +1 -0
  273. package/dist/chunk-Q6YU3BT7.js +138 -0
  274. package/dist/chunk-Q6YU3BT7.js.map +1 -0
  275. package/dist/chunk-QJ5VFCW3.js +131 -0
  276. package/dist/chunk-QJ5VFCW3.js.map +1 -0
  277. package/dist/chunk-RGS4WX2M.js +44 -0
  278. package/dist/chunk-RGS4WX2M.js.map +1 -0
  279. package/dist/chunk-RNQNEENY.js +146 -0
  280. package/dist/chunk-RNQNEENY.js.map +1 -0
  281. package/dist/chunk-RVERAFFY.js +291 -0
  282. package/dist/chunk-RVERAFFY.js.map +1 -0
  283. package/dist/chunk-SMZGAPCU.js +70 -0
  284. package/dist/chunk-SMZGAPCU.js.map +1 -0
  285. package/dist/{chunk-7BR3DO2A.js → chunk-SRSJO5QE.js} +13 -4
  286. package/dist/chunk-SRSJO5QE.js.map +1 -0
  287. package/dist/chunk-T2E5WBCZ.js +482 -0
  288. package/dist/chunk-T2E5WBCZ.js.map +1 -0
  289. package/dist/chunk-TJK44RQC.js +452 -0
  290. package/dist/chunk-TJK44RQC.js.map +1 -0
  291. package/dist/chunk-UIDKY4UB.js +14 -0
  292. package/dist/chunk-UIDKY4UB.js.map +1 -0
  293. package/dist/chunk-V3DX3K65.js +43 -0
  294. package/dist/chunk-V3DX3K65.js.map +1 -0
  295. package/dist/chunk-VZOFZPSO.js +71 -0
  296. package/dist/chunk-VZOFZPSO.js.map +1 -0
  297. package/dist/chunk-W2AC6Q2A.js +83 -0
  298. package/dist/chunk-W2AC6Q2A.js.map +1 -0
  299. package/dist/chunk-WF75U3V4.js +33 -0
  300. package/dist/chunk-WF75U3V4.js.map +1 -0
  301. package/dist/chunk-WTSNV5RG.js +52 -0
  302. package/dist/chunk-WTSNV5RG.js.map +1 -0
  303. package/dist/{chunk-YGN7OMLT.js → chunk-X5QSICJ3.js} +8 -5
  304. package/dist/chunk-X5QSICJ3.js.map +1 -0
  305. package/dist/chunk-YDGNU2OD.js +61 -0
  306. package/dist/chunk-YDGNU2OD.js.map +1 -0
  307. package/dist/collapsible-panel.d.ts +133 -0
  308. package/dist/collapsible-panel.js +131 -0
  309. package/dist/collapsible-panel.js.map +1 -0
  310. package/dist/content-item.d.ts +81 -0
  311. package/dist/content-item.js +4 -0
  312. package/dist/content-item.js.map +1 -0
  313. package/dist/css-values.d.ts +107 -0
  314. package/dist/css-values.js +3 -0
  315. package/dist/css-values.js.map +1 -0
  316. package/dist/device-class.js +33 -5
  317. package/dist/device-class.js.map +1 -1
  318. package/dist/disclosure-arrow.d.ts +6 -1
  319. package/dist/disclosure-arrow.js +2 -1
  320. package/dist/empty-state.d.ts +5 -2
  321. package/dist/empty-state.js +2 -1
  322. package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
  323. package/dist/floating-toolbar.d.ts +51 -0
  324. package/dist/floating-toolbar.js +3 -0
  325. package/dist/floating-toolbar.js.map +1 -0
  326. package/dist/grid.d.ts +50 -0
  327. package/dist/grid.js +5 -0
  328. package/dist/grid.js.map +1 -0
  329. package/dist/help-tags-register.d.ts +13 -0
  330. package/dist/help-tags-register.js +9 -0
  331. package/dist/help-tags-register.js.map +1 -0
  332. package/dist/index.d.ts +34 -14
  333. package/dist/index.js +43 -23
  334. package/dist/{menu-action-row.d.ts → list-action-row.d.ts} +21 -9
  335. package/dist/list-action-row.js +8 -0
  336. package/dist/list-action-row.js.map +1 -0
  337. package/dist/list-header.d.ts +99 -0
  338. package/dist/list-header.js +10 -0
  339. package/dist/list-header.js.map +1 -0
  340. package/dist/list-inset-control.d.ts +22 -0
  341. package/dist/list-inset-control.js +3 -0
  342. package/dist/list-inset-control.js.map +1 -0
  343. package/dist/list-inset-text.d.ts +30 -0
  344. package/dist/list-inset-text.js +4 -0
  345. package/dist/list-inset-text.js.map +1 -0
  346. package/dist/list-item.d.ts +62 -0
  347. package/dist/list-item.js +8 -0
  348. package/dist/list-item.js.map +1 -0
  349. package/dist/list.d.ts +63 -0
  350. package/dist/list.js +6 -0
  351. package/dist/list.js.map +1 -0
  352. package/dist/loading-spinner.d.ts +9 -2
  353. package/dist/loading-spinner.js +2 -1
  354. package/dist/lucide-icon.d.ts +9 -2
  355. package/dist/lucide-icon.js +2 -1
  356. package/dist/nav-stack.d.ts +66 -10
  357. package/dist/nav-stack.js +6 -1
  358. package/dist/pane.d.ts +108 -0
  359. package/dist/pane.js +4 -0
  360. package/dist/pane.js.map +1 -0
  361. package/dist/panel-toolbar-DDKh4uKd.d.ts +72 -0
  362. package/dist/popup-menu-register.d.ts +9 -0
  363. package/dist/popup-menu-register.js +244 -0
  364. package/dist/popup-menu-register.js.map +1 -0
  365. package/dist/popup-menu.d.ts +100 -0
  366. package/dist/popup-menu.js +3 -0
  367. package/dist/popup-menu.js.map +1 -0
  368. package/dist/resizable-region.d.ts +32 -3
  369. package/dist/resizable-region.js +1 -1
  370. package/dist/row.d.ts +48 -0
  371. package/dist/row.js +6 -0
  372. package/dist/row.js.map +1 -0
  373. package/dist/segmented-control.d.ts +12 -9
  374. package/dist/segmented-control.js +1 -2
  375. package/dist/select-register.d.ts +5 -1
  376. package/dist/select-register.js +243 -2
  377. package/dist/select-register.js.map +1 -1
  378. package/dist/select.d.ts +102 -8
  379. package/dist/select.js +3 -1
  380. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  381. package/dist/sides-BPSWde0A.d.ts +4 -0
  382. package/dist/skeleton.d.ts +14 -7
  383. package/dist/skeleton.js +2 -1
  384. package/dist/spacer.d.ts +18 -0
  385. package/dist/spacer.js +4 -0
  386. package/dist/spacer.js.map +1 -0
  387. package/dist/split-view.d.ts +39 -7
  388. package/dist/split-view.js +120 -10
  389. package/dist/split-view.js.map +1 -1
  390. package/dist/state-banner.d.ts +18 -6
  391. package/dist/state-banner.js +3 -1
  392. package/dist/styles/app-tab.css +221 -0
  393. package/dist/styles/badge.css +118 -0
  394. package/dist/styles/catalog/components/catalog-example-stack.css +9 -0
  395. package/dist/styles/catalog/components/catalog-example.css +168 -0
  396. package/dist/styles/catalog/components/catalog-stage.css +55 -0
  397. package/dist/styles/catalog/components/catalog.css +12 -0
  398. package/dist/styles/catalog.css +5 -0
  399. package/dist/styles/chip.css +132 -0
  400. package/dist/styles/collapsible-panel.css +575 -0
  401. package/dist/styles/content-item.css +75 -0
  402. package/dist/styles/document.css +23 -0
  403. package/dist/styles/floating-toolbar.css +119 -0
  404. package/dist/styles/foundation.css +178 -40
  405. package/dist/styles/grid.css +35 -0
  406. package/dist/styles/layout.css +3 -41
  407. package/dist/styles/list-action-row.css +258 -0
  408. package/dist/styles/list-header.css +229 -0
  409. package/dist/styles/list-inset-control.css +30 -0
  410. package/dist/styles/list-inset-text.css +29 -0
  411. package/dist/styles/list-item.css +255 -0
  412. package/dist/styles/list.css +133 -0
  413. package/dist/styles/loading-spinner.css +4 -0
  414. package/dist/styles/lucide-icon.css +5 -0
  415. package/dist/styles/nav-stack.css +172 -47
  416. package/dist/styles/pane.css +263 -0
  417. package/dist/styles/popup-menu.css +285 -0
  418. package/dist/styles/resizable-region.css +438 -4
  419. package/dist/styles/row.css +111 -0
  420. package/dist/styles/segmented-control.css +36 -9
  421. package/dist/styles/select.css +337 -21
  422. package/dist/styles/skeleton.css +64 -3
  423. package/dist/styles/spacer.css +11 -0
  424. package/dist/styles/split-view.css +114 -3
  425. package/dist/styles/state-banner.css +94 -19
  426. package/dist/styles/styles.css +13 -4
  427. package/dist/styles/sunken-panel.css +29 -0
  428. package/dist/styles/surface-scaffold.css +56 -0
  429. package/dist/styles/tab-bar.css +147 -9
  430. package/dist/styles/tab-scaffold.css +126 -3
  431. package/dist/styles/text.css +112 -0
  432. package/dist/styles/token-search-field.css +155 -55
  433. package/dist/styles/toolbar-control-group.css +608 -29
  434. package/dist/styles/toolbar-text.css +101 -8
  435. package/dist/styles/toolbar.css +334 -12
  436. package/dist/styles/value-table.css +34 -4
  437. package/dist/styles/webawesome.css +365 -10
  438. package/dist/styles/workbench.css +980 -7
  439. package/dist/sunken-panel.d.ts +27 -0
  440. package/dist/sunken-panel.js +3 -0
  441. package/dist/sunken-panel.js.map +1 -0
  442. package/dist/surface-scaffold.d.ts +30 -0
  443. package/dist/surface-scaffold.js +3 -0
  444. package/dist/surface-scaffold.js.map +1 -0
  445. package/dist/tab-bar.d.ts +39 -6
  446. package/dist/tab-bar.js +1 -1
  447. package/dist/tab-scaffold.d.ts +57 -7
  448. package/dist/tab-scaffold.js +83 -9
  449. package/dist/tab-scaffold.js.map +1 -1
  450. package/dist/text.d.ts +56 -0
  451. package/dist/text.js +3 -0
  452. package/dist/text.js.map +1 -0
  453. package/dist/token-search-field-CVGwDn2y.d.ts +154 -0
  454. package/dist/token-search-field.d.ts +3 -43
  455. package/dist/token-search-field.js +2 -1
  456. package/dist/token-search-model.d.ts +3 -0
  457. package/dist/token-search-model.js +3 -0
  458. package/dist/token-search-model.js.map +1 -0
  459. package/dist/toolbar-control-group.d.ts +77 -7
  460. package/dist/toolbar-control-group.js +3 -1
  461. package/dist/toolbar-text.d.ts +35 -4
  462. package/dist/toolbar-text.js +2 -1
  463. package/dist/toolbar.d.ts +59 -7
  464. package/dist/toolbar.js +1 -1
  465. package/dist/types-BuHELdXR.d.ts +117 -0
  466. package/dist/value-table.d.ts +11 -3
  467. package/dist/value-table.js +2 -1
  468. package/dist/webawesome.d.ts +8 -1
  469. package/dist/wire-catalog.d.ts +82 -0
  470. package/dist/wire-catalog.js +327 -0
  471. package/dist/wire-catalog.js.map +1 -0
  472. package/dist/wire-content-items.d.ts +11 -0
  473. package/dist/wire-content-items.js +114 -0
  474. package/dist/wire-content-items.js.map +1 -0
  475. package/dist/wire-nav-stack.d.ts +4 -1
  476. package/dist/wire-nav-stack.js +147 -7
  477. package/dist/wire-nav-stack.js.map +1 -1
  478. package/dist/wire-resizable-regions.d.ts +2 -1
  479. package/dist/wire-resizable-regions.js +2 -1
  480. package/dist/wire-scroll-dividers.d.ts +72 -0
  481. package/dist/wire-scroll-dividers.js +3 -0
  482. package/dist/wire-scroll-dividers.js.map +1 -0
  483. package/dist/wire-sidebar.d.ts +63 -0
  484. package/dist/wire-sidebar.js +231 -0
  485. package/dist/wire-sidebar.js.map +1 -0
  486. package/dist/wire-tab-bars.d.ts +19 -2
  487. package/dist/wire-tab-bars.js +1 -1
  488. package/dist/wire-tab-scaffold.js +9 -4
  489. package/dist/wire-tab-scaffold.js.map +1 -1
  490. package/dist/wire-token-search-fields.d.ts +65 -3
  491. package/dist/wire-token-search-fields.js +2 -1
  492. package/dist/wire-workbench.d.ts +116 -0
  493. package/dist/wire-workbench.js +6 -0
  494. package/dist/wire-workbench.js.map +1 -0
  495. package/dist/workbench.d.ts +244 -9
  496. package/dist/workbench.js +17 -15
  497. package/dist/workbench.js.map +1 -1
  498. package/docs/accessibility.md +476 -24
  499. package/docs/app-layouts.md +106 -8
  500. package/docs/apple-hig.md +1 -0
  501. package/docs/catalog.md +483 -0
  502. package/docs/collapsible-panel.md +371 -0
  503. package/docs/component-contract.md +658 -56
  504. package/docs/component-integration.md +75 -0
  505. package/docs/component-selection.md +529 -90
  506. package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
  507. package/docs/design/templates/empty-state/filtered.svg +1 -0
  508. package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
  509. package/docs/design/templates/empty-state/with-action.svg +1 -0
  510. package/docs/design/templates/empty-state-dark.svg +1 -0
  511. package/docs/design/templates/empty-state.svg +1 -0
  512. package/docs/design/templates/list/compact-dark.svg +1 -0
  513. package/docs/design/templates/list/compact.svg +1 -0
  514. package/docs/design/templates/list/stack-dark.svg +1 -0
  515. package/docs/design/templates/list/stack.svg +1 -0
  516. package/docs/design/templates/list-action-row/default-dark.svg +1 -0
  517. package/docs/design/templates/list-action-row/default.svg +1 -0
  518. package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
  519. package/docs/design/templates/list-action-row/selected.svg +1 -0
  520. package/docs/design/templates/list-action-row-dark.svg +1 -0
  521. package/docs/design/templates/list-action-row.svg +1 -0
  522. package/docs/design/templates/list-dark.svg +1 -0
  523. package/docs/design/templates/list-header/action-dark.svg +1 -0
  524. package/docs/design/templates/list-header/action.svg +1 -0
  525. package/docs/design/templates/list-header/count-dark.svg +1 -0
  526. package/docs/design/templates/list-header/count.svg +1 -0
  527. package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
  528. package/docs/design/templates/list-header/inline-action.svg +1 -0
  529. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
  530. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
  531. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
  532. package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
  533. package/docs/design/templates/list-header-dark.svg +1 -0
  534. package/docs/design/templates/list-header.svg +1 -0
  535. package/docs/design/templates/list-item/default-dark.svg +1 -0
  536. package/docs/design/templates/list-item/default.svg +1 -0
  537. package/docs/design/templates/list-item/multiline-dark.svg +1 -0
  538. package/docs/design/templates/list-item/multiline.svg +1 -0
  539. package/docs/design/templates/list-item/selected-dark.svg +1 -0
  540. package/docs/design/templates/list-item/selected.svg +1 -0
  541. package/docs/design/templates/list-item/trailing-dark.svg +1 -0
  542. package/docs/design/templates/list-item/trailing.svg +1 -0
  543. package/docs/design/templates/list-item-dark.svg +1 -0
  544. package/docs/design/templates/list-item.svg +1 -0
  545. package/docs/design/templates/list.svg +1 -0
  546. package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
  547. package/docs/design/templates/segmented-control/equal.svg +1 -0
  548. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
  549. package/docs/design/templates/segmented-control/pill-small.svg +1 -0
  550. package/docs/design/templates/segmented-control-dark.svg +1 -0
  551. package/docs/design/templates/segmented-control.svg +1 -0
  552. package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
  553. package/docs/design/templates/skeleton/avatar.svg +1 -0
  554. package/docs/design/templates/skeleton/block-dark.svg +1 -0
  555. package/docs/design/templates/skeleton/block.svg +1 -0
  556. package/docs/design/templates/skeleton/lines-dark.svg +1 -0
  557. package/docs/design/templates/skeleton/lines.svg +1 -0
  558. package/docs/design/templates/skeleton-dark.svg +1 -0
  559. package/docs/design/templates/skeleton.svg +1 -0
  560. package/docs/design/templates/state-banner/danger-dark.svg +1 -0
  561. package/docs/design/templates/state-banner/danger.svg +1 -0
  562. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  563. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  564. package/docs/design/templates/state-banner/info-dark.svg +1 -0
  565. package/docs/design/templates/state-banner/info.svg +1 -0
  566. package/docs/design/templates/state-banner/success-dark.svg +1 -0
  567. package/docs/design/templates/state-banner/success.svg +1 -0
  568. package/docs/design/templates/state-banner/warning-dark.svg +1 -0
  569. package/docs/design/templates/state-banner/warning.svg +1 -0
  570. package/docs/design/templates/state-banner-dark.svg +1 -0
  571. package/docs/design/templates/state-banner.svg +1 -0
  572. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
  573. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
  574. package/docs/design/templates/tab-bar-dark.svg +1 -0
  575. package/docs/design/templates/tab-bar.svg +1 -0
  576. package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
  577. package/docs/design/templates/token-search-field/empty.svg +1 -0
  578. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
  579. package/docs/design/templates/token-search-field/tokens.svg +1 -0
  580. package/docs/design/templates/token-search-field-dark.svg +1 -0
  581. package/docs/design/templates/token-search-field.svg +1 -0
  582. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
  583. package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
  584. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -0
  585. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -0
  586. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -0
  587. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -0
  588. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -0
  589. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -0
  590. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -0
  591. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -0
  592. package/docs/design/templates/toolbar-control-group-dark.svg +1 -0
  593. package/docs/design/templates/toolbar-control-group.svg +1 -0
  594. package/docs/design/templates/toolbar-dark.svg +1 -0
  595. package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
  596. package/docs/design/templates/toolbar-text/default.svg +1 -0
  597. package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
  598. package/docs/design/templates/toolbar-text/large.svg +1 -0
  599. package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
  600. package/docs/design/templates/toolbar-text/small.svg +1 -0
  601. package/docs/design/templates/toolbar-text-dark.svg +1 -0
  602. package/docs/design/templates/toolbar-text.svg +1 -0
  603. package/docs/design/templates/toolbar.svg +1 -0
  604. package/docs/design/templates/value-table/details-dark.svg +1 -0
  605. package/docs/design/templates/value-table/details.svg +1 -0
  606. package/docs/design/templates/value-table-dark.svg +1 -0
  607. package/docs/design/templates/value-table.svg +1 -0
  608. package/docs/design/templates.md +138 -0
  609. package/docs/design-philosophy.md +48 -20
  610. package/docs/device-class.md +10 -9
  611. package/docs/document-baseline.md +38 -0
  612. package/docs/examples/application-ui-profile.json +60 -0
  613. package/docs/examples/command-palette-adapter.tsx +69 -17
  614. package/docs/examples/component-catalog-extension.json +52 -0
  615. package/docs/examples/component-composition-extension.json +80 -0
  616. package/docs/layout.md +534 -59
  617. package/docs/nav-stack.md +138 -14
  618. package/docs/recipes.md +137 -54
  619. package/docs/split-view.md +74 -6
  620. package/docs/sunken-panel.md +87 -0
  621. package/docs/surface-scaffold.md +28 -0
  622. package/docs/tab-scaffold.md +99 -10
  623. package/docs/type-contracts.md +134 -0
  624. package/docs/ui-analyzer.md +347 -0
  625. package/docs/ui-doctor.md +128 -0
  626. package/docs/ui-evaluator.md +139 -0
  627. package/docs/ux-demo.md +41 -16
  628. package/docs/webawesome-theme.md +218 -16
  629. package/docs/workbench.md +608 -12
  630. package/doctor/cli.mjs +120 -0
  631. package/doctor/config.schema.json +72 -0
  632. package/doctor/eslint-diagnostics.d.mts +24 -0
  633. package/doctor/eslint-diagnostics.mjs +24 -0
  634. package/doctor/index.d.mts +121 -0
  635. package/doctor/index.mjs +1324 -0
  636. package/doctor/report.schema.json +118 -0
  637. package/evaluator/cli.mjs +89 -0
  638. package/evaluator/index.d.mts +90 -0
  639. package/evaluator/index.mjs +1203 -0
  640. package/evaluator/report.schema.json +152 -0
  641. package/llms.txt +445 -48
  642. package/package.json +249 -37
  643. package/scripts/component-catalog-extension-validation.mjs +28 -0
  644. package/traversal-exclusions.mjs +27 -0
  645. package/ux-demo/recipes/app-shell.tsx +205 -17
  646. package/ux-demo/recipes/collapsible-sidebar.tsx +260 -0
  647. package/ux-demo/recipes/compact-toolbar.tsx +135 -14
  648. package/ux-demo/recipes/composer-form.tsx +133 -21
  649. package/ux-demo/recipes/list-detail-dialog.tsx +282 -0
  650. package/ux-demo/recipes/list-workspace-states.tsx +183 -11
  651. package/ux-demo/recipes/loaders.ts +15 -5
  652. package/ux-demo/recipes/loading-inspector.tsx +204 -0
  653. package/ux-demo/recipes/mount-recipe.ts +28 -10
  654. package/ux-demo/recipes/navigation-sidebar.tsx +139 -13
  655. package/ux-demo/recipes/navigation-stack.tsx +79 -24
  656. package/ux-demo/recipes/types.ts +23 -2
  657. package/ux-demo/recipes/workspace-header.tsx +86 -5
  658. package/dist/browser/menu-action-row.js +0 -4
  659. package/dist/browser/menu-item.js +0 -4
  660. package/dist/chunk-2RJBFNB6.js +0 -172
  661. package/dist/chunk-2RJBFNB6.js.map +0 -1
  662. package/dist/chunk-2Z5TWHKQ.js +0 -34
  663. package/dist/chunk-2Z5TWHKQ.js.map +0 -1
  664. package/dist/chunk-3YD6ZNRA.js +0 -34
  665. package/dist/chunk-3YD6ZNRA.js.map +0 -1
  666. package/dist/chunk-55DATV3A.js +0 -10
  667. package/dist/chunk-55DATV3A.js.map +0 -1
  668. package/dist/chunk-56RJXPHG.js.map +0 -1
  669. package/dist/chunk-7BR3DO2A.js.map +0 -1
  670. package/dist/chunk-7LDCTU7D.js +0 -134
  671. package/dist/chunk-7LDCTU7D.js.map +0 -1
  672. package/dist/chunk-AQNKJRFH.js +0 -79
  673. package/dist/chunk-AQNKJRFH.js.map +0 -1
  674. package/dist/chunk-B24C4A6T.js +0 -22
  675. package/dist/chunk-B24C4A6T.js.map +0 -1
  676. package/dist/chunk-DAFFDO33.js +0 -14
  677. package/dist/chunk-DAFFDO33.js.map +0 -1
  678. package/dist/chunk-H6URQGJI.js +0 -42
  679. package/dist/chunk-H6URQGJI.js.map +0 -1
  680. package/dist/chunk-I7INRJO4.js +0 -17
  681. package/dist/chunk-I7INRJO4.js.map +0 -1
  682. package/dist/chunk-KJYXOTG3.js +0 -10
  683. package/dist/chunk-KJYXOTG3.js.map +0 -1
  684. package/dist/chunk-LC3YSAZC.js +0 -39
  685. package/dist/chunk-LC3YSAZC.js.map +0 -1
  686. package/dist/chunk-M5JRI6MN.js +0 -27
  687. package/dist/chunk-M5JRI6MN.js.map +0 -1
  688. package/dist/chunk-MBR3TYNL.js +0 -14
  689. package/dist/chunk-MBR3TYNL.js.map +0 -1
  690. package/dist/chunk-MFKMHK5W.js +0 -10
  691. package/dist/chunk-MFKMHK5W.js.map +0 -1
  692. package/dist/chunk-MQIZAD4A.js +0 -227
  693. package/dist/chunk-MQIZAD4A.js.map +0 -1
  694. package/dist/chunk-N3SUXLLS.js +0 -23
  695. package/dist/chunk-N3SUXLLS.js.map +0 -1
  696. package/dist/chunk-PONXLV5U.js +0 -19
  697. package/dist/chunk-PONXLV5U.js.map +0 -1
  698. package/dist/chunk-TZNCCM5H.js +0 -20
  699. package/dist/chunk-TZNCCM5H.js.map +0 -1
  700. package/dist/chunk-W2FK7ZNY.js +0 -26
  701. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  702. package/dist/chunk-WVPYVDXY.js +0 -15
  703. package/dist/chunk-WVPYVDXY.js.map +0 -1
  704. package/dist/chunk-YGN7OMLT.js.map +0 -1
  705. package/dist/chunk-YKUUZPED.js +0 -24
  706. package/dist/chunk-YKUUZPED.js.map +0 -1
  707. package/dist/menu-action-row.js +0 -5
  708. package/dist/menu-action-row.js.map +0 -1
  709. package/dist/menu-header.d.ts +0 -43
  710. package/dist/menu-header.js +0 -7
  711. package/dist/menu-header.js.map +0 -1
  712. package/dist/menu-item.d.ts +0 -33
  713. package/dist/menu-item.js +0 -5
  714. package/dist/menu-item.js.map +0 -1
  715. package/dist/panel-header.d.ts +0 -28
  716. package/dist/panel-header.js +0 -7
  717. package/dist/panel-header.js.map +0 -1
  718. package/dist/styles/menu-action-row.css +0 -160
  719. package/dist/styles/menu-header.css +0 -160
  720. package/dist/styles/menu-item.css +0 -123
  721. package/dist/styles/panel-header.css +0 -64
  722. package/ux-demo/recipes/master-detail-dialog.tsx +0 -45
  723. package/ux-demo/recipes/recipes.css +0 -355
@@ -9,22 +9,61 @@
9
9
  color: var(--kui-color-neutral-on-quiet);
10
10
  font-weight: 650;
11
11
  line-height: 1;
12
- text-overflow: ellipsis;
13
- white-space: nowrap;
14
12
  align-items: center;
15
13
  }
16
14
 
17
- .kui-toolbar-text[data-size="xlarge"] {
18
- /* Matches the page/panel title: the same responsive clamp so a PanelHeader
19
- title reads at the page-title scale without a bespoke override. Height grows
20
- to the larger text (the fixed 40px would clip its ascenders). */
15
+ /* In a Toolbar zone, a title fills the toolbar's control band (the
16
+ `--_kui-toolbar-band` the Toolbar provides) and centers its first line in
17
+ it; further lines of a wrapped title continue below the band. These rules
18
+ precede the size and wrap rules below, which keep their own minimum
19
+ heights. */
20
+ :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
21
+ > .kui-toolbar-text {
22
+ height: auto;
23
+ min-height: var(--_kui-toolbar-band);
24
+ }
25
+
26
+ :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing)
27
+ > .kui-toolbar-text[data-wrap="true"] {
28
+ padding-block: max(0px, calc((var(--_kui-toolbar-band) - 1.25em) / 2));
29
+ }
30
+
31
+ /* A filling title grows into its row's free space and truncates there. */
32
+ .kui-toolbar-text[data-fill="true"] {
33
+ flex: 1 1 auto;
34
+ }
35
+
36
+ /* The text lives in a block child, not directly in the flex box, so
37
+ `text-overflow: ellipsis` actually applies (it is a no-op on a flex item). */
38
+ .kui-toolbar-text__text {
39
+ min-width: 0;
40
+ max-width: 100%;
41
+ overflow: hidden;
42
+ /* Keep the line box larger than the font's em square. Glyph ink can extend
43
+ below a 1em line box, so clipping for ellipsis must not also shave off
44
+ descenders such as g, j, p, q, and y. */
45
+ line-height: 1.2;
46
+ white-space: nowrap;
47
+ text-overflow: ellipsis;
48
+ }
49
+
50
+ .kui-toolbar-text:is([data-size="xlarge"], [data-size="xlarge-fixed"]) {
51
+ /* Both title sizes keep page/panel title color and geometry. Height grows to
52
+ their text instead of clipping ascenders in the default 40px box. */
21
53
  height: auto;
22
54
  min-height: 2.75rem;
23
55
  color: var(--kui-color-text);
24
- font-size: clamp(var(--kui-font-l), 2.3vw, var(--kui-font-2xl));
25
56
  letter-spacing: -0.025em;
26
57
  }
27
58
 
59
+ .kui-toolbar-text[data-size="xlarge"] {
60
+ font-size: clamp(var(--kui-font-l), 2.3vw, var(--kui-font-2xl));
61
+ }
62
+
63
+ .kui-toolbar-text[data-size="xlarge-fixed"] {
64
+ font-size: var(--kui-font-l);
65
+ }
66
+
28
67
  .kui-toolbar-text[data-size="large"] {
29
68
  font-size: var(--kui-font-m);
30
69
  letter-spacing: -0.015em;
@@ -34,7 +73,61 @@
34
73
  font-size: var(--kui-font-s);
35
74
  }
36
75
 
76
+ /* Every size keeps the inherited UI sans stack: compact identity text is a
77
+ label, not code. (A monospace role here resolved through Web Awesome's
78
+ `ui-monospace, monospace` code stack; Chromium does not
79
+ recognize `ui-monospace`, so small labels fell back to generic monospace.) */
37
80
  .kui-toolbar-text[data-size="small"] {
38
- font-family: var(--kui-font-mono);
39
81
  font-size: var(--kui-font-xs);
40
82
  }
83
+
84
+ .kui-toolbar-text[data-size="xsmall"] {
85
+ font-size: var(--kui-font-2xs);
86
+ }
87
+
88
+ /* Single line, no ellipsis: hard-clip the overflow instead of showing …. */
89
+ .kui-toolbar-text[data-ellipsis="false"] .kui-toolbar-text__text {
90
+ text-overflow: clip;
91
+ }
92
+
93
+ /* Wrap onto multiple lines. The box grows to fit and switches from the centered
94
+ single-line row to a top-aligned block with readable leading; a min-height keeps
95
+ a one-line label at the toolbar row height. */
96
+ .kui-toolbar-text[data-wrap="true"] {
97
+ align-items: flex-start;
98
+ height: auto;
99
+ min-height: 2.5rem;
100
+ }
101
+
102
+ .kui-toolbar-text:is(
103
+ [data-size="xlarge"],
104
+ [data-size="xlarge-fixed"]
105
+ )[data-wrap="true"] {
106
+ min-height: 2.75rem;
107
+ }
108
+
109
+ .kui-toolbar-text[data-wrap="true"] .kui-toolbar-text__text {
110
+ white-space: normal;
111
+ line-height: 1.25;
112
+ }
113
+
114
+ /* Wrap capped to N lines with an ellipsis at the cut. `-webkit-line-clamp` needs
115
+ the box display and emits the … itself; the unprefixed `line-clamp` follows for
116
+ engines that ship it. */
117
+ .kui-toolbar-text[data-wrap="true"][data-max-lines] .kui-toolbar-text__text {
118
+ display: -webkit-box;
119
+ -webkit-box-orient: vertical;
120
+ -webkit-line-clamp: var(--kui-toolbar-text-max-lines);
121
+ line-clamp: var(--kui-toolbar-text-max-lines);
122
+ overflow: hidden;
123
+ }
124
+
125
+ /* Wrap capped to N lines without an ellipsis: clip at a max-height instead of
126
+ line-clamp (which always ellipsizes). */
127
+ .kui-toolbar-text[data-wrap="true"][data-max-lines][data-ellipsis="false"]
128
+ .kui-toolbar-text__text {
129
+ display: block;
130
+ -webkit-line-clamp: none;
131
+ line-clamp: none;
132
+ max-height: calc(var(--kui-toolbar-text-max-lines) * 1.25em);
133
+ }
@@ -1,27 +1,169 @@
1
1
  .kui-toolbar {
2
2
  display: grid;
3
3
  width: 100%;
4
- min-height: calc(
5
- var(--kui-toolbar-group-size, calc(2px + 2.625rem)) +
6
- (2 * var(--kui-toolbar-gap, 0.5rem))
7
- );
8
- padding: var(--kui-toolbar-gap, 0.5rem);
4
+ /* min-height and padding: see the safe-area rules below. */
9
5
  box-sizing: border-box;
10
6
  color: var(--kui-color-text);
11
7
  background: transparent;
12
- grid-template-columns: auto minmax(0, 1fr) auto;
13
- align-items: center;
8
+ /* The center track's minimum is `auto`, not 0, so it resolves to the center
9
+ zone's own min-width (its content width, below): when the zones do not all
10
+ fit, the auto leading track is what shrinks and its title truncates, and
11
+ the center group never overflows its track onto the leading identity. */
12
+ grid-template-columns: auto 1fr auto;
13
+ align-items: start;
14
14
  gap: var(--kui-toolbar-gap, 0.5rem);
15
15
  container: kui-toolbar / inline-size;
16
16
  font-family: var(--kui-font-sans);
17
17
  }
18
18
 
19
+ /* Safe areas: a toolbar compensates only for the inline edges its owner hands
20
+ it through `--kui-edge-inset-inline-*` (a Pane header or footer does), so its
21
+ box and dividers keep reaching the edge while its zones clear the unsafe
22
+ area. Unset means none: a toolbar embedded in content never pads for the
23
+ device. An app bar or bottom bar at a screen edge claims its sides with
24
+ `safeAreaEdges`; each claimed side pads by the routed edge context, or the
25
+ full device inset when nothing routes it (the Pane rule), so the top bar of
26
+ a shell clears the status area. A Pane header or footer clears the context
27
+ for its children, so a claimed side there never double-insets. Its zones
28
+ then see a cleared context. */
29
+ .kui-toolbar {
30
+ --_kui-toolbar-safe-block-start: 0px;
31
+ --_kui-toolbar-safe-block-end: 0px;
32
+ --_kui-toolbar-safe-inline-start: var(--kui-edge-inset-inline-start, 0px);
33
+ --_kui-toolbar-safe-inline-end: var(--kui-edge-inset-inline-end, 0px);
34
+ /* The minimum height grows by any claimed block inset, so a toolbar a flex
35
+ column shrinks still keeps a whole control row clear of the unsafe area. */
36
+ min-height: calc(
37
+ var(--kui-toolbar-group-size, calc(2px + 2.625rem)) +
38
+ (2 * var(--kui-toolbar-inset, var(--kui-toolbar-gap, 0.5rem))) +
39
+ var(--_kui-toolbar-safe-block-start) + var(--_kui-toolbar-safe-block-end)
40
+ );
41
+ padding-block: calc(
42
+ var(--kui-toolbar-inset, var(--kui-toolbar-gap, 0.5rem)) +
43
+ var(--_kui-toolbar-safe-block-start)
44
+ )
45
+ calc(
46
+ var(--kui-toolbar-inset, var(--kui-toolbar-gap, 0.5rem)) +
47
+ var(--_kui-toolbar-safe-block-end)
48
+ );
49
+ padding-inline: calc(
50
+ var(--kui-toolbar-inset, var(--kui-toolbar-gap, 0.5rem)) +
51
+ var(--_kui-toolbar-safe-inline-start)
52
+ )
53
+ calc(
54
+ var(--kui-toolbar-inset, var(--kui-toolbar-gap, 0.5rem)) +
55
+ var(--_kui-toolbar-safe-inline-end)
56
+ );
57
+ }
58
+
59
+ .kui-toolbar[data-safe-area-block-start="true"] {
60
+ --_kui-toolbar-safe-block-start: var(
61
+ --kui-edge-inset-block-start,
62
+ var(--kui-safe-area-block-start, env(safe-area-inset-top, 0px))
63
+ );
64
+ }
65
+
66
+ .kui-toolbar[data-safe-area-block-end="true"] {
67
+ --_kui-toolbar-safe-block-end: var(
68
+ --kui-edge-inset-block-end,
69
+ var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
70
+ );
71
+ }
72
+
73
+ .kui-toolbar[data-safe-area-inline-start="true"] {
74
+ --_kui-toolbar-safe-inline-start: var(
75
+ --kui-edge-inset-inline-start,
76
+ var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
77
+ );
78
+ }
79
+
80
+ .kui-toolbar[data-safe-area-inline-end="true"] {
81
+ --_kui-toolbar-safe-inline-end: var(
82
+ --kui-edge-inset-inline-end,
83
+ var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
84
+ );
85
+ }
86
+
87
+ .kui-toolbar > * {
88
+ --kui-edge-inset-block-start: 0px;
89
+ --kui-edge-inset-block-end: 0px;
90
+ --kui-edge-inset-inline-start: 0px;
91
+ --kui-edge-inset-inline-end: 0px;
92
+ }
93
+
19
94
  .kui-toolbar[data-has-center="false"] {
20
95
  grid-template-columns: minmax(0, 1fr) auto;
21
96
  }
22
97
 
23
- .kui-toolbar[data-divider="true"] {
24
- box-shadow: inset 0 -1px var(--kui-color-border);
98
+ /* Equal side tracks center the middle zone on the toolbar's content box even
99
+ when one side has no controls. Side content still shrinks or wraps within
100
+ its own track, and responsive policies below may move a zone to a new row. */
101
+ .kui-toolbar[data-center-align="balanced"][data-has-center="true"] {
102
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
103
+ }
104
+
105
+ .kui-toolbar[data-responsive="trailing-priority"][data-has-center="false"]:has(
106
+ > .kui-toolbar__trailing [data-expanded="true"]
107
+ ) {
108
+ grid-template-columns:
109
+ minmax(0, 1fr)
110
+ minmax(0, var(--kui-token-search-expanded-width, 30rem));
111
+ }
112
+
113
+ .kui-toolbar {
114
+ --_kui-toolbar-divider-top: transparent;
115
+ --_kui-toolbar-divider-right: transparent;
116
+ --_kui-toolbar-divider-bottom: transparent;
117
+ --_kui-toolbar-divider-left: transparent;
118
+ box-shadow:
119
+ inset 0 1px var(--_kui-toolbar-divider-top),
120
+ inset -1px 0 var(--_kui-toolbar-divider-right),
121
+ inset 0 -1px var(--_kui-toolbar-divider-bottom),
122
+ inset 1px 0 var(--_kui-toolbar-divider-left);
123
+ }
124
+
125
+ .kui-toolbar:is([divider-sides*="t"], [data-scroll-divider*="t"]) {
126
+ --_kui-toolbar-divider-top: var(
127
+ --kui-toolbar-divider-color,
128
+ var(--kui-color-neutral-border-normal)
129
+ );
130
+ }
131
+
132
+ .kui-toolbar:is([divider-sides*="r"], [data-scroll-divider*="r"]) {
133
+ --_kui-toolbar-divider-right: var(
134
+ --kui-toolbar-divider-color,
135
+ var(--kui-color-neutral-border-normal)
136
+ );
137
+ }
138
+
139
+ .kui-toolbar:is([divider-sides*="b"], [data-scroll-divider*="b"]) {
140
+ --_kui-toolbar-divider-bottom: var(
141
+ --kui-toolbar-divider-color,
142
+ var(--kui-color-neutral-border-normal)
143
+ );
144
+ }
145
+
146
+ .kui-toolbar:is([divider-sides*="l"], [data-scroll-divider*="l"]) {
147
+ --_kui-toolbar-divider-left: var(
148
+ --kui-toolbar-divider-color,
149
+ var(--kui-color-neutral-border-normal)
150
+ );
151
+ }
152
+
153
+ /* The control band. Every zone reserves one group-height row at the top of
154
+ the toolbar, and each item is centered in that band by its own size, not by
155
+ its siblings: a group or title shorter than the band takes half the
156
+ difference as a top margin, and anything taller (a wrapped title, a
157
+ multi-line search, a second trailing row) starts at the band's top and grows
158
+ down. A growing item therefore never moves the other items or its own top.
159
+ Centering the zones in the toolbar row instead dropped every control to the
160
+ middle of a two-line title. The band is resolved here, on the toolbar, so a
161
+ compact group's own smaller group size never redefines it.
162
+ `--_kui-toolbar-band` is context the toolbar provides: a ToolbarControlGroup
163
+ and a ToolbarText each center themselves in it from their own stylesheets
164
+ (toolbar-control-group.css, toolbar-text.css). */
165
+ .kui-toolbar {
166
+ --_kui-toolbar-band: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
25
167
  }
26
168
 
27
169
  .kui-toolbar__leading,
@@ -29,7 +171,10 @@
29
171
  .kui-toolbar__trailing {
30
172
  display: flex;
31
173
  min-width: 0;
32
- align-items: center;
174
+ min-height: var(--_kui-toolbar-band);
175
+ padding-inline: var(--kui-toolbar-zone-padding-inline, 0px);
176
+ box-sizing: border-box;
177
+ align-items: flex-start;
33
178
  gap: var(--kui-toolbar-gap, 0.5rem);
34
179
  }
35
180
 
@@ -40,18 +185,137 @@
40
185
  the 3- and 2-column layouts, and still stacks under the leading zone when a
41
186
  consumer collapses the toolbar to a single column. */
42
187
  .kui-toolbar__leading {
188
+ min-width: var(--kui-toolbar-leading-min-width, 0px);
189
+ padding-inline: var(
190
+ --kui-toolbar-leading-padding-inline,
191
+ var(--kui-toolbar-zone-padding-inline, 0px)
192
+ );
43
193
  grid-column: 1;
44
- overflow: hidden;
194
+ /* Keep a shrinking title clipped while letting the 3px focus outline plus
195
+ its 1px offset paint past the zone edge. `hidden` cropped the ring of the
196
+ first control in this zone. */
197
+ overflow: clip;
198
+ overflow-clip-margin: 4px;
45
199
  }
46
200
 
47
201
  .kui-toolbar__center {
202
+ /* The center content never compresses below its own width (a group cannot
203
+ shrink or clip its controls). The track above takes this as its minimum, so
204
+ the leading identity gives way first, the way a platform toolbar truncates
205
+ its title before it overlaps the centered controls. */
206
+ min-width: min-content;
207
+ padding-inline: var(
208
+ --kui-toolbar-center-padding-inline,
209
+ var(--kui-toolbar-zone-padding-inline, 0px)
210
+ );
48
211
  justify-content: center;
49
212
  grid-column: 2;
50
213
  }
51
214
 
215
+ .kui-toolbar[data-center-align="stretch"] > .kui-toolbar__center {
216
+ justify-content: flex-start;
217
+ }
218
+
219
+ .kui-toolbar[data-center-align="stretch"] > .kui-toolbar__center > * {
220
+ width: 100%;
221
+ flex-basis: 100%;
222
+ }
223
+
52
224
  .kui-toolbar__trailing {
53
- justify-content: flex-end;
225
+ padding-inline: var(
226
+ --kui-toolbar-trailing-padding-inline,
227
+ var(--kui-toolbar-zone-padding-inline, 0px)
228
+ );
229
+ justify-content: var(--kui-toolbar-trailing-justify, flex-end);
230
+ justify-self: var(--kui-toolbar-trailing-justify-self, stretch);
54
231
  grid-column: -2 / -1;
232
+ gap: var(--kui-toolbar-trailing-gap, var(--kui-toolbar-gap, 0.5rem));
233
+ /* Trailing actions never clip (KF-4EYES0): the zone wraps its groups, so its
234
+ track can shrink only to the widest single group. When one row cannot hold
235
+ every group, the next group moves to a new trailing-aligned row instead of
236
+ overflowing the toolbar. */
237
+ flex-wrap: wrap;
238
+ }
239
+
240
+ /* An expanded trailing search gets a complete second row while the leading
241
+ identity and optional center controls remain in the first. The query styles
242
+ descendants because a toolbar cannot query its own container width. */
243
+ @container kui-toolbar (max-width: 52rem) {
244
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="narrow"][data-has-center="false"]:has(
245
+ > .kui-toolbar__trailing [data-expanded="true"]
246
+ )
247
+ > .kui-toolbar__leading {
248
+ grid-column: 1 / -1;
249
+ grid-row: 1;
250
+ }
251
+
252
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="narrow"]:has(
253
+ > .kui-toolbar__trailing [data-expanded="true"]
254
+ )
255
+ > .kui-toolbar__trailing {
256
+ width: 100%;
257
+ grid-column: 1 / -1;
258
+ grid-row: 2;
259
+ justify-self: stretch;
260
+ }
261
+
262
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="narrow"]
263
+ > .kui-toolbar__trailing
264
+ > [data-expanded="true"] {
265
+ width: 100%;
266
+ flex: 1 1 100%;
267
+ }
268
+ }
269
+
270
+ @container kui-toolbar (max-width: 44rem) {
271
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="compact"][data-has-center="false"]:has(
272
+ > .kui-toolbar__trailing [data-expanded="true"]
273
+ )
274
+ > .kui-toolbar__leading {
275
+ grid-column: 1 / -1;
276
+ grid-row: 1;
277
+ }
278
+
279
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="compact"]:has(
280
+ > .kui-toolbar__trailing [data-expanded="true"]
281
+ )
282
+ > .kui-toolbar__trailing {
283
+ width: 100%;
284
+ grid-column: 1 / -1;
285
+ grid-row: 2;
286
+ justify-self: stretch;
287
+ }
288
+
289
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="compact"]
290
+ > .kui-toolbar__trailing
291
+ > [data-expanded="true"] {
292
+ width: 100%;
293
+ flex: 1 1 100%;
294
+ }
295
+ }
296
+
297
+ /* Content-driven wrap: one row while every zone fits at its natural width;
298
+ otherwise the trailing zone moves below the identity, still trailing-aligned,
299
+ instead of truncating the leading title or clipping an action. For panel,
300
+ inspector, and dialog headings whose identity must stay whole. */
301
+ .kui-toolbar[data-responsive="wrap"] {
302
+ display: flex;
303
+ flex-wrap: wrap;
304
+ }
305
+
306
+ .kui-toolbar[data-responsive="wrap"] > .kui-toolbar__leading {
307
+ max-width: 100%;
308
+ flex: 1 1 auto;
309
+ }
310
+
311
+ .kui-toolbar[data-responsive="wrap"] > .kui-toolbar__center {
312
+ flex: 1 1 auto;
313
+ }
314
+
315
+ .kui-toolbar[data-responsive="wrap"] > .kui-toolbar__trailing {
316
+ max-width: 100%;
317
+ flex: 0 1 auto;
318
+ margin-inline-start: auto;
55
319
  }
56
320
 
57
321
  .kui-toolbar[data-has-center="false"] .kui-toolbar__center,
@@ -59,3 +323,61 @@
59
323
  .kui-toolbar__trailing:empty {
60
324
  display: none;
61
325
  }
326
+
327
+ /* Stacked topology. A container query only matches an ancestor container, so
328
+ these rules style the zones (whose query container is this toolbar) rather
329
+ than the toolbar's own grid template, which a self query can never reach.
330
+ Each zone spans every column track, one zone per row, so no empty track or
331
+ column gap narrows a stacked zone. Stacked control zones wrap at group
332
+ granularity (KF-4EYES0: a stacked trailing zone clipped its last action at
333
+ phone widths), so every group stays whole, reachable, and full size; the
334
+ leading identity keeps its single-line truncation. */
335
+ @container kui-toolbar (max-width: 52rem) {
336
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="narrow"]
337
+ > :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing) {
338
+ width: 100%;
339
+ grid-column: 1 / -1;
340
+ justify-content: flex-start;
341
+ }
342
+
343
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="narrow"]
344
+ > :is(.kui-toolbar__center, .kui-toolbar__trailing) {
345
+ flex-wrap: wrap;
346
+ }
347
+ }
348
+
349
+ @container kui-toolbar (max-width: 44rem) {
350
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="compact"]
351
+ > :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing) {
352
+ width: 100%;
353
+ grid-column: 1 / -1;
354
+ justify-content: flex-start;
355
+ }
356
+
357
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="compact"]
358
+ > :is(.kui-toolbar__center, .kui-toolbar__trailing) {
359
+ flex-wrap: wrap;
360
+ }
361
+ }
362
+
363
+ /* Center priority. As with the stacked topology, the toolbar cannot query its
364
+ own width, so these rules style the zones: while the center holds an expanded
365
+ control, the leading and trailing zones leave and the center spans every
366
+ column track (including the gaps the vacated tracks still own), taking the
367
+ whole row. */
368
+ @container kui-toolbar (max-width: 42rem) {
369
+ .kui-toolbar[data-responsive="center-priority"]:has(
370
+ > .kui-toolbar__center [data-expanded="true"]
371
+ )
372
+ > .kui-toolbar__center {
373
+ width: 100%;
374
+ grid-column: 1 / -1;
375
+ }
376
+
377
+ .kui-toolbar[data-responsive="center-priority"]:has(
378
+ > .kui-toolbar__center [data-expanded="true"]
379
+ )
380
+ > :is(.kui-toolbar__leading, .kui-toolbar__trailing) {
381
+ display: none;
382
+ }
383
+ }
@@ -1,6 +1,6 @@
1
1
  .kui-value-table {
2
2
  --kui-value-table-background: var(--kui-color-surface-lowered);
3
- --kui-value-table-border: var(--kui-color-border);
3
+ --kui-value-table-border: var(--kui-color-neutral-border-normal);
4
4
  --_kui-value-table-icon-size: var(--kui-value-table-icon-size, 1.5rem);
5
5
  display: grid;
6
6
  margin-block: 0;
@@ -19,12 +19,32 @@
19
19
  position: relative;
20
20
  display: grid;
21
21
  min-height: 2.55rem;
22
- padding-block: 0.5rem;
22
+ padding-block: var(
23
+ --kui-value-table-row-padding-block,
24
+ var(--_kui-value-table-density-padding-block, 0.5rem)
25
+ );
23
26
  padding-inline: var(--_kui-value-table-inline-padding);
24
27
  box-sizing: border-box;
25
- grid-template-columns: minmax(6rem, auto) minmax(0, 1fr);
28
+ /* Two content-sized tracks share the free space equally, and each stops
29
+ growing once its content fits. A short value keeps its whole width and a
30
+ long label takes the rest (ending a word that still does not fit in an
31
+ ellipsis); a short label keeps its width beside a long, wrapping value;
32
+ when both are long they split the row. A `1fr` value track would get
33
+ nothing until the label reached its full width, starving the value to 0px
34
+ beside a long single-word label. */
35
+ grid-template-columns: var(
36
+ --kui-value-table-row-columns,
37
+ minmax(0, auto) minmax(0, auto)
38
+ );
26
39
  align-items: center;
27
- gap: var(--kui-layout-item-gap, 0.5rem);
40
+ gap: var(
41
+ --kui-value-table-row-gap,
42
+ var(--_kui-value-table-density-gap, var(--kui-layout-item-gap, 0.5rem))
43
+ );
44
+ }
45
+ .kui-value-table[data-density="compact"] .kui-value-table__row {
46
+ --_kui-value-table-density-padding-block: 0.25rem;
47
+ --_kui-value-table-density-gap: 0.25rem;
28
48
  }
29
49
  .kui-value-table__row[data-has-icon="true"] {
30
50
  --_kui-value-table-separator-start: calc(
@@ -42,7 +62,12 @@
42
62
  }
43
63
  .kui-value-table__row dt {
44
64
  display: flex;
65
+ /* The label hugs its content (up to its column) rather than stretching, so
66
+ its box does not change with the value's width — a placeholder row keeps
67
+ the live row's label geometry beside its skeleton value. */
68
+ max-width: 100%;
45
69
  min-width: 0;
70
+ justify-self: start;
46
71
  color: var(--kui-color-text-quiet);
47
72
  align-items: center;
48
73
  gap: var(--kui-layout-item-gap, 0.5rem);
@@ -60,6 +85,11 @@
60
85
  }
61
86
  .kui-value-table__label {
62
87
  min-width: 0;
88
+ overflow: hidden;
89
+ /* A multi-word label wraps at spaces; a single word wider than the label
90
+ column (a long component or file name) ends in an ellipsis instead of
91
+ running under the value. */
92
+ text-overflow: ellipsis;
63
93
  }
64
94
  .kui-value-table__row dd {
65
95
  display: flex;