@kerfjs/ui 5.0.0-beta.6 → 5.0.0-beta.61

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 (714) hide show
  1. package/README.md +494 -138
  2. package/ai/application-ui-diagnostic-ids-v1.json +109 -0
  3. package/ai/application-ui-profile-sync.cjs +529 -0
  4. package/ai/application-ui-profile.d.mts +1 -0
  5. package/ai/application-ui-profile.d.ts +102 -0
  6. package/ai/application-ui-profile.defaults.json +96 -0
  7. package/ai/application-ui-profile.mjs +626 -0
  8. package/ai/application-ui-profile.schema.json +130 -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 +79 -0
  14. package/ai/component-catalog.json +4041 -591
  15. package/ai/component-catalog.schema.json +78 -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 +125 -0
  21. package/ai/component-composition.json +7074 -0
  22. package/ai/component-composition.schema.json +375 -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 +90 -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 +96 -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 +103 -0
  44. package/ai/components/loading-spinner.md +72 -0
  45. package/ai/components/lucide-icon.md +66 -0
  46. package/ai/components/nav-stack.md +103 -0
  47. package/ai/components/pane.md +100 -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 +112 -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 +112 -0
  70. package/ai/components/tab-scaffold.md +94 -0
  71. package/ai/components/tabs.md +95 -0
  72. package/ai/components/text.md +83 -0
  73. package/ai/components/token-search-field.md +103 -0
  74. package/ai/components/toolbar-control-group.md +102 -0
  75. package/ai/components/toolbar-text.md +78 -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 +114 -0
  149. package/ai/public-api-signatures-v1.md +2597 -190
  150. package/ai/skill.md +259 -65
  151. package/ai/webawesome-jsx-signatures-v1.md +9 -2
  152. package/analyzer/cli.mjs +49 -0
  153. package/analyzer/component-ownership.d.mts +56 -0
  154. package/analyzer/component-ownership.mjs +184 -0
  155. package/analyzer/index.d.mts +49 -0
  156. package/analyzer/index.mjs +1458 -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/dist/app-tab.d.ts +41 -4
  163. package/dist/app-tab.js +3 -1
  164. package/dist/badge.d.ts +52 -0
  165. package/dist/badge.js +3 -0
  166. package/dist/badge.js.map +1 -0
  167. package/dist/browser/app-tab.js +1 -0
  168. package/dist/browser/badge.js +3 -0
  169. package/dist/browser/catalog.js +25 -0
  170. package/dist/browser/chip.js +3 -0
  171. package/dist/browser/collapsible-panel.js +7 -0
  172. package/dist/browser/content-item.js +3 -0
  173. package/dist/browser/floating-toolbar.js +3 -0
  174. package/dist/browser/grid.js +3 -0
  175. package/dist/browser/list-action-row.js +5 -0
  176. package/dist/browser/list-header.js +8 -0
  177. package/dist/browser/list-inset-control.js +3 -0
  178. package/dist/browser/list-inset-text.js +3 -0
  179. package/dist/browser/list-item.js +5 -0
  180. package/dist/browser/list.js +3 -0
  181. package/dist/browser/{panel-header.js → nav-stack.js} +4 -2
  182. package/dist/browser/pane.js +3 -0
  183. package/dist/browser/popup-menu.js +3 -0
  184. package/dist/browser/row.js +3 -0
  185. package/dist/browser/select.js +2 -0
  186. package/dist/browser/skeleton.js +3 -0
  187. package/dist/browser/spacer.js +3 -0
  188. package/dist/browser/split-view.js +10 -0
  189. package/dist/browser/state-banner.js +2 -0
  190. package/dist/browser/sunken-panel.js +3 -0
  191. package/dist/browser/surface-scaffold.js +3 -0
  192. package/dist/browser/tab-scaffold.js +4 -0
  193. package/dist/browser/text.js +3 -0
  194. package/dist/browser/toolbar-text.js +1 -0
  195. package/dist/browser/value-table.js +1 -0
  196. package/dist/browser/workbench.js +10 -0
  197. package/dist/catalog-resources.d.ts +46 -0
  198. package/dist/catalog-resources.js +22 -0
  199. package/dist/catalog-resources.js.map +1 -0
  200. package/dist/catalog.d.ts +90 -0
  201. package/dist/catalog.js +501 -0
  202. package/dist/catalog.js.map +1 -0
  203. package/dist/chip.d.ts +29 -0
  204. package/dist/chip.js +3 -0
  205. package/dist/chip.js.map +1 -0
  206. package/dist/chunk-2G2ZJQYK.js +152 -0
  207. package/dist/chunk-2G2ZJQYK.js.map +1 -0
  208. package/dist/chunk-3SXMEK3B.js +43 -0
  209. package/dist/chunk-3SXMEK3B.js.map +1 -0
  210. package/dist/{chunk-W2FK7ZNY.js → chunk-4R777DUZ.js} +10 -2
  211. package/dist/chunk-4R777DUZ.js.map +1 -0
  212. package/dist/chunk-4SQK27MR.js +202 -0
  213. package/dist/chunk-4SQK27MR.js.map +1 -0
  214. package/dist/chunk-5I7QGQVT.js +24 -0
  215. package/dist/chunk-5I7QGQVT.js.map +1 -0
  216. package/dist/chunk-5PESG2VP.js +115 -0
  217. package/dist/chunk-5PESG2VP.js.map +1 -0
  218. package/dist/chunk-5Q3N6EV7.js +156 -0
  219. package/dist/chunk-5Q3N6EV7.js.map +1 -0
  220. package/dist/chunk-6ZXOQEAN.js +27 -0
  221. package/dist/chunk-6ZXOQEAN.js.map +1 -0
  222. package/dist/chunk-7JUBXOIV.js +103 -0
  223. package/dist/chunk-7JUBXOIV.js.map +1 -0
  224. package/dist/chunk-A3CKOW2R.js +622 -0
  225. package/dist/chunk-A3CKOW2R.js.map +1 -0
  226. package/dist/chunk-AHEG27M7.js +66 -0
  227. package/dist/chunk-AHEG27M7.js.map +1 -0
  228. package/dist/chunk-AUKT3KMG.js +37 -0
  229. package/dist/chunk-AUKT3KMG.js.map +1 -0
  230. package/dist/chunk-AYUHMAI6.js +48 -0
  231. package/dist/chunk-AYUHMAI6.js.map +1 -0
  232. package/dist/chunk-BFPBS5Y4.js +250 -0
  233. package/dist/chunk-BFPBS5Y4.js.map +1 -0
  234. package/dist/{chunk-MQIZAD4A.js → chunk-C4OYOKWX.js} +138 -22
  235. package/dist/chunk-C4OYOKWX.js.map +1 -0
  236. package/dist/chunk-DG6G5EPF.js +35 -0
  237. package/dist/chunk-DG6G5EPF.js.map +1 -0
  238. package/dist/chunk-E36EVCKG.js +34 -0
  239. package/dist/chunk-E36EVCKG.js.map +1 -0
  240. package/dist/chunk-EAC4CDY7.js +57 -0
  241. package/dist/chunk-EAC4CDY7.js.map +1 -0
  242. package/dist/chunk-EZVNC4J6.js +104 -0
  243. package/dist/chunk-EZVNC4J6.js.map +1 -0
  244. package/dist/chunk-F4QMLOXJ.js +135 -0
  245. package/dist/chunk-F4QMLOXJ.js.map +1 -0
  246. package/dist/chunk-GLDWRCAM.js +49 -0
  247. package/dist/chunk-GLDWRCAM.js.map +1 -0
  248. package/dist/chunk-I3Q7KKYM.js +33 -0
  249. package/dist/chunk-I3Q7KKYM.js.map +1 -0
  250. package/dist/chunk-IA7TMD4Y.js +288 -0
  251. package/dist/chunk-IA7TMD4Y.js.map +1 -0
  252. package/dist/chunk-JCV4GXWB.js +249 -0
  253. package/dist/chunk-JCV4GXWB.js.map +1 -0
  254. package/dist/chunk-K47P7QZC.js +17 -0
  255. package/dist/chunk-K47P7QZC.js.map +1 -0
  256. package/dist/chunk-KLJKU6ZL.js +109 -0
  257. package/dist/chunk-KLJKU6ZL.js.map +1 -0
  258. package/dist/{chunk-56RJXPHG.js → chunk-KROD7KZK.js} +7 -4
  259. package/dist/chunk-KROD7KZK.js.map +1 -0
  260. package/dist/chunk-MA73TA6D.js +42 -0
  261. package/dist/chunk-MA73TA6D.js.map +1 -0
  262. package/dist/chunk-MERWRTBG.js +45 -0
  263. package/dist/chunk-MERWRTBG.js.map +1 -0
  264. package/dist/chunk-MEY33VWB.js +44 -0
  265. package/dist/chunk-MEY33VWB.js.map +1 -0
  266. package/dist/chunk-MP2GDBQZ.js +50 -0
  267. package/dist/chunk-MP2GDBQZ.js.map +1 -0
  268. package/dist/chunk-N3GKMPDW.js +51 -0
  269. package/dist/chunk-N3GKMPDW.js.map +1 -0
  270. package/dist/chunk-NAPE7WUS.js +75 -0
  271. package/dist/chunk-NAPE7WUS.js.map +1 -0
  272. package/dist/chunk-NN6GYOA2.js +47 -0
  273. package/dist/chunk-NN6GYOA2.js.map +1 -0
  274. package/dist/chunk-NNMLEDMD.js +399 -0
  275. package/dist/chunk-NNMLEDMD.js.map +1 -0
  276. package/dist/chunk-NYL63PSD.js +95 -0
  277. package/dist/chunk-NYL63PSD.js.map +1 -0
  278. package/dist/chunk-P7D3EMXM.js +52 -0
  279. package/dist/chunk-P7D3EMXM.js.map +1 -0
  280. package/dist/chunk-PSHUSWQH.js +18 -0
  281. package/dist/chunk-PSHUSWQH.js.map +1 -0
  282. package/dist/chunk-Q6YU3BT7.js +138 -0
  283. package/dist/chunk-Q6YU3BT7.js.map +1 -0
  284. package/dist/chunk-RRB26JRJ.js +247 -0
  285. package/dist/chunk-RRB26JRJ.js.map +1 -0
  286. package/dist/{chunk-7BR3DO2A.js → chunk-SRSJO5QE.js} +13 -4
  287. package/dist/chunk-SRSJO5QE.js.map +1 -0
  288. package/dist/chunk-SWVW56CV.js +188 -0
  289. package/dist/chunk-SWVW56CV.js.map +1 -0
  290. package/dist/chunk-TEYARRAK.js +216 -0
  291. package/dist/chunk-TEYARRAK.js.map +1 -0
  292. package/dist/chunk-UCKKT6KO.js +71 -0
  293. package/dist/chunk-UCKKT6KO.js.map +1 -0
  294. package/dist/chunk-UIDKY4UB.js +14 -0
  295. package/dist/chunk-UIDKY4UB.js.map +1 -0
  296. package/dist/chunk-VCBTX62E.js +135 -0
  297. package/dist/chunk-VCBTX62E.js.map +1 -0
  298. package/dist/chunk-VZOFZPSO.js +71 -0
  299. package/dist/chunk-VZOFZPSO.js.map +1 -0
  300. package/dist/{chunk-TRNBHPNW.js → chunk-X5QSICJ3.js} +13 -7
  301. package/dist/chunk-X5QSICJ3.js.map +1 -0
  302. package/dist/chunk-Y74NWGQW.js +418 -0
  303. package/dist/chunk-Y74NWGQW.js.map +1 -0
  304. package/dist/chunk-ZLWQZUGF.js +27 -0
  305. package/dist/chunk-ZLWQZUGF.js.map +1 -0
  306. package/dist/collapsible-panel.d.ts +122 -0
  307. package/dist/collapsible-panel.js +115 -0
  308. package/dist/collapsible-panel.js.map +1 -0
  309. package/dist/content-item.d.ts +46 -0
  310. package/dist/content-item.js +4 -0
  311. package/dist/content-item.js.map +1 -0
  312. package/dist/css-values.d.ts +107 -0
  313. package/dist/css-values.js +3 -0
  314. package/dist/css-values.js.map +1 -0
  315. package/dist/device-class.js +33 -5
  316. package/dist/device-class.js.map +1 -1
  317. package/dist/disclosure-arrow.d.ts +6 -1
  318. package/dist/disclosure-arrow.js +1 -1
  319. package/dist/empty-state.d.ts +5 -2
  320. package/dist/empty-state.js +1 -1
  321. package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
  322. package/dist/floating-toolbar.d.ts +51 -0
  323. package/dist/floating-toolbar.js +3 -0
  324. package/dist/floating-toolbar.js.map +1 -0
  325. package/dist/grid.d.ts +42 -0
  326. package/dist/grid.js +5 -0
  327. package/dist/grid.js.map +1 -0
  328. package/dist/help-tags-register.d.ts +13 -0
  329. package/dist/help-tags-register.js +9 -0
  330. package/dist/help-tags-register.js.map +1 -0
  331. package/dist/index.d.ts +35 -14
  332. package/dist/index.js +43 -22
  333. package/dist/list-action-row.d.ts +64 -0
  334. package/dist/list-action-row.js +8 -0
  335. package/dist/list-action-row.js.map +1 -0
  336. package/dist/list-header.d.ts +99 -0
  337. package/dist/list-header.js +10 -0
  338. package/dist/list-header.js.map +1 -0
  339. package/dist/list-inset-control.d.ts +22 -0
  340. package/dist/list-inset-control.js +3 -0
  341. package/dist/list-inset-control.js.map +1 -0
  342. package/dist/list-inset-text.d.ts +30 -0
  343. package/dist/list-inset-text.js +4 -0
  344. package/dist/list-inset-text.js.map +1 -0
  345. package/dist/list-item.d.ts +62 -0
  346. package/dist/list-item.js +8 -0
  347. package/dist/list-item.js.map +1 -0
  348. package/dist/list.d.ts +59 -0
  349. package/dist/list.js +6 -0
  350. package/dist/list.js.map +1 -0
  351. package/dist/loading-spinner.d.ts +3 -1
  352. package/dist/loading-spinner.js +1 -1
  353. package/dist/lucide-icon.d.ts +3 -1
  354. package/dist/lucide-icon.js +1 -1
  355. package/dist/nav-stack.d.ts +60 -10
  356. package/dist/nav-stack.js +6 -1
  357. package/dist/pane.d.ts +102 -0
  358. package/dist/pane.js +4 -0
  359. package/dist/pane.js.map +1 -0
  360. package/dist/panel-toolbar-DqwtBxQL.d.ts +63 -0
  361. package/dist/popup-menu-register.d.ts +9 -0
  362. package/dist/popup-menu-register.js +31 -0
  363. package/dist/popup-menu-register.js.map +1 -0
  364. package/dist/popup-menu.d.ts +99 -0
  365. package/dist/popup-menu.js +3 -0
  366. package/dist/popup-menu.js.map +1 -0
  367. package/dist/resizable-region.d.ts +32 -3
  368. package/dist/resizable-region.js +1 -1
  369. package/dist/row.d.ts +48 -0
  370. package/dist/row.js +6 -0
  371. package/dist/row.js.map +1 -0
  372. package/dist/segmented-control.d.ts +13 -8
  373. package/dist/segmented-control.js +1 -1
  374. package/dist/select-register.d.ts +5 -1
  375. package/dist/select-register.js +243 -2
  376. package/dist/select-register.js.map +1 -1
  377. package/dist/select.d.ts +101 -8
  378. package/dist/select.js +4 -1
  379. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  380. package/dist/sides-BPSWde0A.d.ts +4 -0
  381. package/dist/skeleton.d.ts +31 -0
  382. package/dist/skeleton.js +4 -0
  383. package/dist/skeleton.js.map +1 -0
  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 +19 -5
  391. package/dist/state-banner.js +4 -1
  392. package/dist/styles/app-tab.css +104 -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 +164 -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 +118 -0
  400. package/dist/styles/collapsible-panel.css +575 -0
  401. package/dist/styles/content-item.css +30 -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 +28 -0
  406. package/dist/styles/layout.css +3 -41
  407. package/dist/styles/list-action-row.css +257 -0
  408. package/dist/styles/list-header.css +228 -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 +245 -0
  412. package/dist/styles/list.css +133 -0
  413. package/dist/styles/nav-stack.css +158 -50
  414. package/dist/styles/pane.css +229 -0
  415. package/dist/styles/popup-menu.css +271 -0
  416. package/dist/styles/resizable-region.css +429 -4
  417. package/dist/styles/row.css +111 -0
  418. package/dist/styles/segmented-control.css +33 -9
  419. package/dist/styles/select.css +262 -9
  420. package/dist/styles/skeleton.css +92 -0
  421. package/dist/styles/spacer.css +11 -0
  422. package/dist/styles/split-view.css +108 -3
  423. package/dist/styles/state-banner.css +94 -19
  424. package/dist/styles/styles.css +14 -4
  425. package/dist/styles/sunken-panel.css +22 -0
  426. package/dist/styles/surface-scaffold.css +56 -0
  427. package/dist/styles/tab-bar.css +132 -9
  428. package/dist/styles/tab-scaffold.css +113 -3
  429. package/dist/styles/text.css +65 -0
  430. package/dist/styles/token-search-field.css +49 -43
  431. package/dist/styles/toolbar-control-group.css +465 -28
  432. package/dist/styles/toolbar-text.css +88 -4
  433. package/dist/styles/toolbar.css +322 -11
  434. package/dist/styles/value-table.css +34 -4
  435. package/dist/styles/webawesome.css +348 -10
  436. package/dist/styles/workbench.css +828 -7
  437. package/dist/sunken-panel.d.ts +22 -0
  438. package/dist/sunken-panel.js +3 -0
  439. package/dist/sunken-panel.js.map +1 -0
  440. package/dist/surface-scaffold.d.ts +30 -0
  441. package/dist/surface-scaffold.js +3 -0
  442. package/dist/surface-scaffold.js.map +1 -0
  443. package/dist/tab-bar.d.ts +31 -6
  444. package/dist/tab-bar.js +1 -1
  445. package/dist/tab-scaffold.d.ts +54 -7
  446. package/dist/tab-scaffold.js +82 -9
  447. package/dist/tab-scaffold.js.map +1 -1
  448. package/dist/text.d.ts +38 -0
  449. package/dist/text.js +3 -0
  450. package/dist/text.js.map +1 -0
  451. package/dist/token-search-field-DvgFLhLL.d.ts +130 -0
  452. package/dist/token-search-field.d.ts +3 -43
  453. package/dist/token-search-field.js +1 -1
  454. package/dist/token-search-model.d.ts +3 -0
  455. package/dist/token-search-model.js +3 -0
  456. package/dist/token-search-model.js.map +1 -0
  457. package/dist/toolbar-control-group.d.ts +65 -7
  458. package/dist/toolbar-control-group.js +1 -1
  459. package/dist/toolbar-text.d.ts +37 -4
  460. package/dist/toolbar-text.js +3 -1
  461. package/dist/toolbar.d.ts +56 -7
  462. package/dist/toolbar.js +1 -1
  463. package/dist/types-BuHELdXR.d.ts +117 -0
  464. package/dist/value-table.d.ts +13 -3
  465. package/dist/value-table.js +3 -1
  466. package/dist/webawesome.d.ts +8 -1
  467. package/dist/wire-catalog.d.ts +82 -0
  468. package/dist/wire-catalog.js +327 -0
  469. package/dist/wire-catalog.js.map +1 -0
  470. package/dist/wire-nav-stack.d.ts +4 -1
  471. package/dist/wire-nav-stack.js +147 -7
  472. package/dist/wire-nav-stack.js.map +1 -1
  473. package/dist/wire-resizable-regions.d.ts +2 -1
  474. package/dist/wire-resizable-regions.js +2 -1
  475. package/dist/wire-scroll-dividers.d.ts +69 -0
  476. package/dist/wire-scroll-dividers.js +3 -0
  477. package/dist/wire-scroll-dividers.js.map +1 -0
  478. package/dist/wire-sidebar.d.ts +63 -0
  479. package/dist/wire-sidebar.js +231 -0
  480. package/dist/wire-sidebar.js.map +1 -0
  481. package/dist/wire-tab-bars.d.ts +19 -2
  482. package/dist/wire-tab-bars.js +1 -1
  483. package/dist/wire-tab-scaffold.js +9 -4
  484. package/dist/wire-tab-scaffold.js.map +1 -1
  485. package/dist/wire-token-search-fields.d.ts +65 -3
  486. package/dist/wire-token-search-fields.js +1 -1
  487. package/dist/wire-workbench.d.ts +109 -0
  488. package/dist/wire-workbench.js +6 -0
  489. package/dist/wire-workbench.js.map +1 -0
  490. package/dist/workbench.d.ts +218 -7
  491. package/dist/workbench.js +13 -15
  492. package/dist/workbench.js.map +1 -1
  493. package/docs/accessibility.md +413 -23
  494. package/docs/app-layouts.md +106 -8
  495. package/docs/catalog.md +440 -0
  496. package/docs/collapsible-panel.md +363 -0
  497. package/docs/component-contract.md +560 -52
  498. package/docs/component-integration.md +75 -0
  499. package/docs/component-selection.md +421 -89
  500. package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
  501. package/docs/design/templates/empty-state/filtered.svg +1 -0
  502. package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
  503. package/docs/design/templates/empty-state/with-action.svg +1 -0
  504. package/docs/design/templates/empty-state-dark.svg +1 -0
  505. package/docs/design/templates/empty-state.svg +1 -0
  506. package/docs/design/templates/list/compact-dark.svg +1 -0
  507. package/docs/design/templates/list/compact.svg +1 -0
  508. package/docs/design/templates/list/stack-dark.svg +1 -0
  509. package/docs/design/templates/list/stack.svg +1 -0
  510. package/docs/design/templates/list-action-row/default-dark.svg +1 -0
  511. package/docs/design/templates/list-action-row/default.svg +1 -0
  512. package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
  513. package/docs/design/templates/list-action-row/selected.svg +1 -0
  514. package/docs/design/templates/list-action-row-dark.svg +1 -0
  515. package/docs/design/templates/list-action-row.svg +1 -0
  516. package/docs/design/templates/list-dark.svg +1 -0
  517. package/docs/design/templates/list-header/action-dark.svg +1 -0
  518. package/docs/design/templates/list-header/action.svg +1 -0
  519. package/docs/design/templates/list-header/count-dark.svg +1 -0
  520. package/docs/design/templates/list-header/count.svg +1 -0
  521. package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
  522. package/docs/design/templates/list-header/inline-action.svg +1 -0
  523. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
  524. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
  525. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
  526. package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
  527. package/docs/design/templates/list-header-dark.svg +1 -0
  528. package/docs/design/templates/list-header.svg +1 -0
  529. package/docs/design/templates/list-item/default-dark.svg +1 -0
  530. package/docs/design/templates/list-item/default.svg +1 -0
  531. package/docs/design/templates/list-item/multiline-dark.svg +1 -0
  532. package/docs/design/templates/list-item/multiline.svg +1 -0
  533. package/docs/design/templates/list-item/selected-dark.svg +1 -0
  534. package/docs/design/templates/list-item/selected.svg +1 -0
  535. package/docs/design/templates/list-item/trailing-dark.svg +1 -0
  536. package/docs/design/templates/list-item/trailing.svg +1 -0
  537. package/docs/design/templates/list-item-dark.svg +1 -0
  538. package/docs/design/templates/list-item.svg +1 -0
  539. package/docs/design/templates/list.svg +1 -0
  540. package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
  541. package/docs/design/templates/segmented-control/equal.svg +1 -0
  542. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
  543. package/docs/design/templates/segmented-control/pill-small.svg +1 -0
  544. package/docs/design/templates/segmented-control-dark.svg +1 -0
  545. package/docs/design/templates/segmented-control.svg +1 -0
  546. package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
  547. package/docs/design/templates/skeleton/avatar.svg +1 -0
  548. package/docs/design/templates/skeleton/block-dark.svg +1 -0
  549. package/docs/design/templates/skeleton/block.svg +1 -0
  550. package/docs/design/templates/skeleton/lines-dark.svg +1 -0
  551. package/docs/design/templates/skeleton/lines.svg +1 -0
  552. package/docs/design/templates/skeleton-dark.svg +1 -0
  553. package/docs/design/templates/skeleton.svg +1 -0
  554. package/docs/design/templates/state-banner/danger-dark.svg +1 -0
  555. package/docs/design/templates/state-banner/danger.svg +1 -0
  556. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  557. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  558. package/docs/design/templates/state-banner/info-dark.svg +1 -0
  559. package/docs/design/templates/state-banner/info.svg +1 -0
  560. package/docs/design/templates/state-banner/success-dark.svg +1 -0
  561. package/docs/design/templates/state-banner/success.svg +1 -0
  562. package/docs/design/templates/state-banner/warning-dark.svg +1 -0
  563. package/docs/design/templates/state-banner/warning.svg +1 -0
  564. package/docs/design/templates/state-banner-dark.svg +1 -0
  565. package/docs/design/templates/state-banner.svg +1 -0
  566. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
  567. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
  568. package/docs/design/templates/tab-bar-dark.svg +1 -0
  569. package/docs/design/templates/tab-bar.svg +1 -0
  570. package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
  571. package/docs/design/templates/token-search-field/empty.svg +1 -0
  572. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
  573. package/docs/design/templates/token-search-field/tokens.svg +1 -0
  574. package/docs/design/templates/token-search-field-dark.svg +1 -0
  575. package/docs/design/templates/token-search-field.svg +1 -0
  576. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
  577. package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
  578. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -0
  579. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -0
  580. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -0
  581. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -0
  582. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -0
  583. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -0
  584. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -0
  585. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -0
  586. package/docs/design/templates/toolbar-control-group-dark.svg +1 -0
  587. package/docs/design/templates/toolbar-control-group.svg +1 -0
  588. package/docs/design/templates/toolbar-dark.svg +1 -0
  589. package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
  590. package/docs/design/templates/toolbar-text/default.svg +1 -0
  591. package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
  592. package/docs/design/templates/toolbar-text/large.svg +1 -0
  593. package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
  594. package/docs/design/templates/toolbar-text/small.svg +1 -0
  595. package/docs/design/templates/toolbar-text-dark.svg +1 -0
  596. package/docs/design/templates/toolbar-text.svg +1 -0
  597. package/docs/design/templates/toolbar.svg +1 -0
  598. package/docs/design/templates/value-table/details-dark.svg +1 -0
  599. package/docs/design/templates/value-table/details.svg +1 -0
  600. package/docs/design/templates/value-table-dark.svg +1 -0
  601. package/docs/design/templates/value-table.svg +1 -0
  602. package/docs/design/templates.md +138 -0
  603. package/docs/design-philosophy.md +48 -20
  604. package/docs/device-class.md +10 -9
  605. package/docs/document-baseline.md +38 -0
  606. package/docs/examples/application-ui-profile.json +60 -0
  607. package/docs/examples/command-palette-adapter.tsx +69 -17
  608. package/docs/examples/component-catalog-extension.json +45 -0
  609. package/docs/examples/component-composition-extension.json +80 -0
  610. package/docs/layout.md +409 -59
  611. package/docs/nav-stack.md +126 -14
  612. package/docs/recipes.md +137 -54
  613. package/docs/split-view.md +69 -6
  614. package/docs/sunken-panel.md +58 -0
  615. package/docs/surface-scaffold.md +25 -0
  616. package/docs/tab-scaffold.md +94 -10
  617. package/docs/type-contracts.md +134 -0
  618. package/docs/ui-analyzer.md +306 -0
  619. package/docs/ui-doctor.md +107 -0
  620. package/docs/ui-evaluator.md +139 -0
  621. package/docs/ux-demo.md +40 -16
  622. package/docs/webawesome-theme.md +175 -16
  623. package/docs/workbench.md +534 -12
  624. package/doctor/cli.mjs +115 -0
  625. package/doctor/config.schema.json +68 -0
  626. package/doctor/eslint-diagnostics.d.mts +24 -0
  627. package/doctor/eslint-diagnostics.mjs +24 -0
  628. package/doctor/index.d.mts +116 -0
  629. package/doctor/index.mjs +1277 -0
  630. package/doctor/report.schema.json +118 -0
  631. package/evaluator/cli.mjs +89 -0
  632. package/evaluator/index.d.mts +90 -0
  633. package/evaluator/index.mjs +1203 -0
  634. package/evaluator/report.schema.json +152 -0
  635. package/llms.txt +423 -42
  636. package/package.json +241 -37
  637. package/traversal-exclusions.mjs +27 -0
  638. package/ux-demo/recipes/app-shell.tsx +205 -17
  639. package/ux-demo/recipes/collapsible-sidebar.tsx +260 -0
  640. package/ux-demo/recipes/compact-toolbar.tsx +135 -14
  641. package/ux-demo/recipes/composer-form.tsx +133 -21
  642. package/ux-demo/recipes/list-detail-dialog.tsx +282 -0
  643. package/ux-demo/recipes/list-workspace-states.tsx +183 -11
  644. package/ux-demo/recipes/loaders.ts +15 -5
  645. package/ux-demo/recipes/loading-inspector.tsx +204 -0
  646. package/ux-demo/recipes/mount-recipe.ts +28 -10
  647. package/ux-demo/recipes/navigation-sidebar.tsx +139 -13
  648. package/ux-demo/recipes/navigation-stack.tsx +79 -24
  649. package/ux-demo/recipes/types.ts +23 -2
  650. package/ux-demo/recipes/workspace-header.tsx +86 -5
  651. package/dist/browser/menu-action-row.js +0 -3
  652. package/dist/browser/menu-header.js +0 -5
  653. package/dist/browser/menu-item.js +0 -3
  654. package/dist/chunk-24Z2XE6C.js +0 -10
  655. package/dist/chunk-24Z2XE6C.js.map +0 -1
  656. package/dist/chunk-2RJBFNB6.js +0 -172
  657. package/dist/chunk-2RJBFNB6.js.map +0 -1
  658. package/dist/chunk-55DATV3A.js +0 -10
  659. package/dist/chunk-55DATV3A.js.map +0 -1
  660. package/dist/chunk-56RJXPHG.js.map +0 -1
  661. package/dist/chunk-7BR3DO2A.js.map +0 -1
  662. package/dist/chunk-7LDCTU7D.js +0 -134
  663. package/dist/chunk-7LDCTU7D.js.map +0 -1
  664. package/dist/chunk-AQNKJRFH.js +0 -79
  665. package/dist/chunk-AQNKJRFH.js.map +0 -1
  666. package/dist/chunk-CTQKI2XL.js +0 -28
  667. package/dist/chunk-CTQKI2XL.js.map +0 -1
  668. package/dist/chunk-DAFFDO33.js +0 -14
  669. package/dist/chunk-DAFFDO33.js.map +0 -1
  670. package/dist/chunk-EGHL5S4P.js +0 -33
  671. package/dist/chunk-EGHL5S4P.js.map +0 -1
  672. package/dist/chunk-KZKSBUKC.js +0 -19
  673. package/dist/chunk-KZKSBUKC.js.map +0 -1
  674. package/dist/chunk-M5JRI6MN.js +0 -27
  675. package/dist/chunk-M5JRI6MN.js.map +0 -1
  676. package/dist/chunk-MBR3TYNL.js +0 -14
  677. package/dist/chunk-MBR3TYNL.js.map +0 -1
  678. package/dist/chunk-MFKMHK5W.js +0 -10
  679. package/dist/chunk-MFKMHK5W.js.map +0 -1
  680. package/dist/chunk-MQIZAD4A.js.map +0 -1
  681. package/dist/chunk-NPPD2A6O.js +0 -40
  682. package/dist/chunk-NPPD2A6O.js.map +0 -1
  683. package/dist/chunk-R6JHHBKQ.js +0 -19
  684. package/dist/chunk-R6JHHBKQ.js.map +0 -1
  685. package/dist/chunk-RBTVBGRD.js +0 -23
  686. package/dist/chunk-RBTVBGRD.js.map +0 -1
  687. package/dist/chunk-S3TPM2LP.js +0 -23
  688. package/dist/chunk-S3TPM2LP.js.map +0 -1
  689. package/dist/chunk-TRNBHPNW.js.map +0 -1
  690. package/dist/chunk-VHW5YNIB.js +0 -17
  691. package/dist/chunk-VHW5YNIB.js.map +0 -1
  692. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  693. package/dist/chunk-WVPYVDXY.js +0 -15
  694. package/dist/chunk-WVPYVDXY.js.map +0 -1
  695. package/dist/chunk-XZXRLY5Q.js +0 -33
  696. package/dist/chunk-XZXRLY5Q.js.map +0 -1
  697. package/dist/menu-action-row.d.ts +0 -50
  698. package/dist/menu-action-row.js +0 -4
  699. package/dist/menu-action-row.js.map +0 -1
  700. package/dist/menu-header.d.ts +0 -41
  701. package/dist/menu-header.js +0 -6
  702. package/dist/menu-header.js.map +0 -1
  703. package/dist/menu-item.d.ts +0 -31
  704. package/dist/menu-item.js +0 -4
  705. package/dist/menu-item.js.map +0 -1
  706. package/dist/panel-header.d.ts +0 -26
  707. package/dist/panel-header.js +0 -6
  708. package/dist/panel-header.js.map +0 -1
  709. package/dist/styles/menu-action-row.css +0 -160
  710. package/dist/styles/menu-header.css +0 -160
  711. package/dist/styles/menu-item.css +0 -123
  712. package/dist/styles/panel-header.css +0 -59
  713. package/ux-demo/recipes/master-detail-dialog.tsx +0 -45
  714. package/ux-demo/recipes/recipes.css +0 -355
@@ -9,13 +9,46 @@
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
 
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
+
17
50
  .kui-toolbar-text[data-size="xlarge"] {
18
- /* Matches the page/panel title: the same responsive clamp so a PanelHeader
51
+ /* Matches page/panel titles: the same responsive clamp so a heading toolbar
19
52
  title reads at the page-title scale without a bespoke override. Height grows
20
53
  to the larger text (the fixed 40px would clip its ascenders). */
21
54
  height: auto;
@@ -34,7 +67,58 @@
34
67
  font-size: var(--kui-font-s);
35
68
  }
36
69
 
70
+ /* Every size keeps the inherited UI sans stack: compact identity text is a
71
+ label, not code. (A monospace role here resolved through Web Awesome's
72
+ `ui-monospace, monospace` code stack; Chromium does not
73
+ recognize `ui-monospace`, so small labels fell back to generic monospace.) */
37
74
  .kui-toolbar-text[data-size="small"] {
38
- font-family: var(--kui-font-mono);
39
75
  font-size: var(--kui-font-xs);
40
76
  }
77
+
78
+ .kui-toolbar-text[data-size="xsmall"] {
79
+ font-size: var(--kui-font-2xs);
80
+ }
81
+
82
+ /* Single line, no ellipsis: hard-clip the overflow instead of showing …. */
83
+ .kui-toolbar-text[data-ellipsis="false"] .kui-toolbar-text__text {
84
+ text-overflow: clip;
85
+ }
86
+
87
+ /* Wrap onto multiple lines. The box grows to fit and switches from the centered
88
+ single-line row to a top-aligned block with readable leading; a min-height keeps
89
+ a one-line label at the toolbar row height. */
90
+ .kui-toolbar-text[data-wrap="true"] {
91
+ align-items: flex-start;
92
+ height: auto;
93
+ min-height: 2.5rem;
94
+ }
95
+
96
+ .kui-toolbar-text[data-size="xlarge"][data-wrap="true"] {
97
+ min-height: 2.75rem;
98
+ }
99
+
100
+ .kui-toolbar-text[data-wrap="true"] .kui-toolbar-text__text {
101
+ white-space: normal;
102
+ line-height: 1.25;
103
+ }
104
+
105
+ /* Wrap capped to N lines with an ellipsis at the cut. `-webkit-line-clamp` needs
106
+ the box display and emits the … itself; the unprefixed `line-clamp` follows for
107
+ engines that ship it. */
108
+ .kui-toolbar-text[data-wrap="true"][data-max-lines] .kui-toolbar-text__text {
109
+ display: -webkit-box;
110
+ -webkit-box-orient: vertical;
111
+ -webkit-line-clamp: var(--kui-toolbar-text-max-lines);
112
+ line-clamp: var(--kui-toolbar-text-max-lines);
113
+ overflow: hidden;
114
+ }
115
+
116
+ /* Wrap capped to N lines without an ellipsis: clip at a max-height instead of
117
+ line-clamp (which always ellipsizes). */
118
+ .kui-toolbar-text[data-wrap="true"][data-max-lines][data-ellipsis="false"]
119
+ .kui-toolbar-text__text {
120
+ display: block;
121
+ -webkit-line-clamp: none;
122
+ line-clamp: none;
123
+ max-height: calc(var(--kui-toolbar-text-max-lines) * 1.25em);
124
+ }
@@ -1,27 +1,162 @@
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
+ .kui-toolbar[data-responsive="trailing-priority"][data-has-center="false"]:has(
99
+ > .kui-toolbar__trailing [data-expanded="true"]
100
+ ) {
101
+ grid-template-columns:
102
+ minmax(0, 1fr)
103
+ minmax(0, var(--kui-token-search-expanded-width, 30rem));
104
+ }
105
+
106
+ .kui-toolbar {
107
+ --_kui-toolbar-divider-top: transparent;
108
+ --_kui-toolbar-divider-right: transparent;
109
+ --_kui-toolbar-divider-bottom: transparent;
110
+ --_kui-toolbar-divider-left: transparent;
111
+ box-shadow:
112
+ inset 0 1px var(--_kui-toolbar-divider-top),
113
+ inset -1px 0 var(--_kui-toolbar-divider-right),
114
+ inset 0 -1px var(--_kui-toolbar-divider-bottom),
115
+ inset 1px 0 var(--_kui-toolbar-divider-left);
116
+ }
117
+
118
+ .kui-toolbar:is([divider-sides*="t"], [data-scroll-divider*="t"]) {
119
+ --_kui-toolbar-divider-top: var(
120
+ --kui-toolbar-divider-color,
121
+ var(--kui-color-neutral-border-normal)
122
+ );
123
+ }
124
+
125
+ .kui-toolbar:is([divider-sides*="r"], [data-scroll-divider*="r"]) {
126
+ --_kui-toolbar-divider-right: var(
127
+ --kui-toolbar-divider-color,
128
+ var(--kui-color-neutral-border-normal)
129
+ );
130
+ }
131
+
132
+ .kui-toolbar:is([divider-sides*="b"], [data-scroll-divider*="b"]) {
133
+ --_kui-toolbar-divider-bottom: var(
134
+ --kui-toolbar-divider-color,
135
+ var(--kui-color-neutral-border-normal)
136
+ );
137
+ }
138
+
139
+ .kui-toolbar:is([divider-sides*="l"], [data-scroll-divider*="l"]) {
140
+ --_kui-toolbar-divider-left: var(
141
+ --kui-toolbar-divider-color,
142
+ var(--kui-color-neutral-border-normal)
143
+ );
144
+ }
145
+
146
+ /* The control band. Every zone reserves one group-height row at the top of
147
+ the toolbar, and each item is centered in that band by its own size, not by
148
+ its siblings: a group or title shorter than the band takes half the
149
+ difference as a top margin, and anything taller (a wrapped title, a
150
+ multi-line search, a second trailing row) starts at the band's top and grows
151
+ down. A growing item therefore never moves the other items or its own top.
152
+ Centering the zones in the toolbar row instead dropped every control to the
153
+ middle of a two-line title. The band is resolved here, on the toolbar, so a
154
+ compact group's own smaller group size never redefines it.
155
+ `--_kui-toolbar-band` is context the toolbar provides: a ToolbarControlGroup
156
+ and a ToolbarText each center themselves in it from their own stylesheets
157
+ (toolbar-control-group.css, toolbar-text.css). */
158
+ .kui-toolbar {
159
+ --_kui-toolbar-band: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
25
160
  }
26
161
 
27
162
  .kui-toolbar__leading,
@@ -29,7 +164,10 @@
29
164
  .kui-toolbar__trailing {
30
165
  display: flex;
31
166
  min-width: 0;
32
- align-items: center;
167
+ min-height: var(--_kui-toolbar-band);
168
+ padding-inline: var(--kui-toolbar-zone-padding-inline, 0px);
169
+ box-sizing: border-box;
170
+ align-items: flex-start;
33
171
  gap: var(--kui-toolbar-gap, 0.5rem);
34
172
  }
35
173
 
@@ -40,18 +178,133 @@
40
178
  the 3- and 2-column layouts, and still stacks under the leading zone when a
41
179
  consumer collapses the toolbar to a single column. */
42
180
  .kui-toolbar__leading {
181
+ min-width: var(--kui-toolbar-leading-min-width, 0px);
182
+ padding-inline: var(
183
+ --kui-toolbar-leading-padding-inline,
184
+ var(--kui-toolbar-zone-padding-inline, 0px)
185
+ );
43
186
  grid-column: 1;
44
187
  overflow: hidden;
45
188
  }
46
189
 
47
190
  .kui-toolbar__center {
191
+ /* The center content never compresses below its own width (a group cannot
192
+ shrink or clip its controls). The track above takes this as its minimum, so
193
+ the leading identity gives way first, the way a platform toolbar truncates
194
+ its title before it overlaps the centered controls. */
195
+ min-width: min-content;
196
+ padding-inline: var(
197
+ --kui-toolbar-center-padding-inline,
198
+ var(--kui-toolbar-zone-padding-inline, 0px)
199
+ );
48
200
  justify-content: center;
49
201
  grid-column: 2;
50
202
  }
51
203
 
204
+ .kui-toolbar[data-center-align="stretch"] > .kui-toolbar__center {
205
+ justify-content: flex-start;
206
+ }
207
+
208
+ .kui-toolbar[data-center-align="stretch"] > .kui-toolbar__center > * {
209
+ width: 100%;
210
+ flex-basis: 100%;
211
+ }
212
+
52
213
  .kui-toolbar__trailing {
53
- justify-content: flex-end;
214
+ padding-inline: var(
215
+ --kui-toolbar-trailing-padding-inline,
216
+ var(--kui-toolbar-zone-padding-inline, 0px)
217
+ );
218
+ justify-content: var(--kui-toolbar-trailing-justify, flex-end);
219
+ justify-self: var(--kui-toolbar-trailing-justify-self, stretch);
54
220
  grid-column: -2 / -1;
221
+ gap: var(--kui-toolbar-trailing-gap, var(--kui-toolbar-gap, 0.5rem));
222
+ /* Trailing actions never clip (KF-4EYES0): the zone wraps its groups, so its
223
+ track can shrink only to the widest single group. When one row cannot hold
224
+ every group, the next group moves to a new trailing-aligned row instead of
225
+ overflowing the toolbar. */
226
+ flex-wrap: wrap;
227
+ }
228
+
229
+ /* An expanded trailing search gets a complete second row while the leading
230
+ identity and optional center controls remain in the first. The query styles
231
+ descendants because a toolbar cannot query its own container width. */
232
+ @container kui-toolbar (max-width: 52rem) {
233
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="narrow"][data-has-center="false"]:has(
234
+ > .kui-toolbar__trailing [data-expanded="true"]
235
+ )
236
+ > .kui-toolbar__leading {
237
+ grid-column: 1 / -1;
238
+ grid-row: 1;
239
+ }
240
+
241
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="narrow"]:has(
242
+ > .kui-toolbar__trailing [data-expanded="true"]
243
+ )
244
+ > .kui-toolbar__trailing {
245
+ width: 100%;
246
+ grid-column: 1 / -1;
247
+ grid-row: 2;
248
+ justify-self: stretch;
249
+ }
250
+
251
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="narrow"]
252
+ > .kui-toolbar__trailing
253
+ > [data-expanded="true"] {
254
+ width: 100%;
255
+ flex: 1 1 100%;
256
+ }
257
+ }
258
+
259
+ @container kui-toolbar (max-width: 44rem) {
260
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="compact"][data-has-center="false"]:has(
261
+ > .kui-toolbar__trailing [data-expanded="true"]
262
+ )
263
+ > .kui-toolbar__leading {
264
+ grid-column: 1 / -1;
265
+ grid-row: 1;
266
+ }
267
+
268
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="compact"]:has(
269
+ > .kui-toolbar__trailing [data-expanded="true"]
270
+ )
271
+ > .kui-toolbar__trailing {
272
+ width: 100%;
273
+ grid-column: 1 / -1;
274
+ grid-row: 2;
275
+ justify-self: stretch;
276
+ }
277
+
278
+ .kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="compact"]
279
+ > .kui-toolbar__trailing
280
+ > [data-expanded="true"] {
281
+ width: 100%;
282
+ flex: 1 1 100%;
283
+ }
284
+ }
285
+
286
+ /* Content-driven wrap: one row while every zone fits at its natural width;
287
+ otherwise the trailing zone moves below the identity, still trailing-aligned,
288
+ instead of truncating the leading title or clipping an action. For panel,
289
+ inspector, and dialog headings whose identity must stay whole. */
290
+ .kui-toolbar[data-responsive="wrap"] {
291
+ display: flex;
292
+ flex-wrap: wrap;
293
+ }
294
+
295
+ .kui-toolbar[data-responsive="wrap"] > .kui-toolbar__leading {
296
+ max-width: 100%;
297
+ flex: 1 1 auto;
298
+ }
299
+
300
+ .kui-toolbar[data-responsive="wrap"] > .kui-toolbar__center {
301
+ flex: 1 1 auto;
302
+ }
303
+
304
+ .kui-toolbar[data-responsive="wrap"] > .kui-toolbar__trailing {
305
+ max-width: 100%;
306
+ flex: 0 1 auto;
307
+ margin-inline-start: auto;
55
308
  }
56
309
 
57
310
  .kui-toolbar[data-has-center="false"] .kui-toolbar__center,
@@ -59,3 +312,61 @@
59
312
  .kui-toolbar__trailing:empty {
60
313
  display: none;
61
314
  }
315
+
316
+ /* Stacked topology. A container query only matches an ancestor container, so
317
+ these rules style the zones (whose query container is this toolbar) rather
318
+ than the toolbar's own grid template, which a self query can never reach.
319
+ Each zone spans every column track, one zone per row, so no empty track or
320
+ column gap narrows a stacked zone. Stacked control zones wrap at group
321
+ granularity (KF-4EYES0: a stacked trailing zone clipped its last action at
322
+ phone widths), so every group stays whole, reachable, and full size; the
323
+ leading identity keeps its single-line truncation. */
324
+ @container kui-toolbar (max-width: 52rem) {
325
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="narrow"]
326
+ > :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing) {
327
+ width: 100%;
328
+ grid-column: 1 / -1;
329
+ justify-content: flex-start;
330
+ }
331
+
332
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="narrow"]
333
+ > :is(.kui-toolbar__center, .kui-toolbar__trailing) {
334
+ flex-wrap: wrap;
335
+ }
336
+ }
337
+
338
+ @container kui-toolbar (max-width: 44rem) {
339
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="compact"]
340
+ > :is(.kui-toolbar__leading, .kui-toolbar__center, .kui-toolbar__trailing) {
341
+ width: 100%;
342
+ grid-column: 1 / -1;
343
+ justify-content: flex-start;
344
+ }
345
+
346
+ .kui-toolbar[data-responsive="stack"][data-responsive-at="compact"]
347
+ > :is(.kui-toolbar__center, .kui-toolbar__trailing) {
348
+ flex-wrap: wrap;
349
+ }
350
+ }
351
+
352
+ /* Center priority. As with the stacked topology, the toolbar cannot query its
353
+ own width, so these rules style the zones: while the center holds an expanded
354
+ control, the leading and trailing zones leave and the center spans every
355
+ column track (including the gaps the vacated tracks still own), taking the
356
+ whole row. */
357
+ @container kui-toolbar (max-width: 42rem) {
358
+ .kui-toolbar[data-responsive="center-priority"]:has(
359
+ > .kui-toolbar__center [data-expanded="true"]
360
+ )
361
+ > .kui-toolbar__center {
362
+ width: 100%;
363
+ grid-column: 1 / -1;
364
+ }
365
+
366
+ .kui-toolbar[data-responsive="center-priority"]:has(
367
+ > .kui-toolbar__center [data-expanded="true"]
368
+ )
369
+ > :is(.kui-toolbar__leading, .kui-toolbar__trailing) {
370
+ display: none;
371
+ }
372
+ }
@@ -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;