@kerfjs/ui 5.0.0-beta.8 → 5.0.0-beta.80

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 (807) hide show
  1. package/README.md +546 -139
  2. package/ai/application-ui-diagnostic-ids-v1.json +113 -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 +4280 -457
  15. package/ai/component-catalog.schema.json +94 -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 +516 -0
  20. package/ai/component-composition.d.ts +129 -0
  21. package/ai/component-composition.json +7397 -0
  22. package/ai/component-composition.schema.json +408 -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 +96 -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 +100 -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 +91 -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 +106 -0
  44. package/ai/components/loading-spinner.md +73 -0
  45. package/ai/components/lucide-icon.md +97 -0
  46. package/ai/components/nav-stack.md +105 -0
  47. package/ai/components/pane.md +104 -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 +115 -0
  63. package/ai/components/skeleton.md +84 -0
  64. package/ai/components/spacer.md +86 -0
  65. package/ai/components/split-view.md +103 -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 +87 -0
  69. package/ai/components/tab-bar.md +113 -0
  70. package/ai/components/tab-navigator.md +95 -0
  71. package/ai/components/tabs.md +95 -0
  72. package/ai/components/text.md +87 -0
  73. package/ai/components/token-search-field.md +107 -0
  74. package/ai/components/toolbar-control-group.md +121 -0
  75. package/ai/components/toolbar-text.md +98 -0
  76. package/ai/components/toolbar.md +101 -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 +119 -0
  149. package/ai/public-api-signatures-v1.md +2821 -250
  150. package/ai/skill.md +354 -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 +429 -0
  155. package/analyzer/index.d.mts +53 -0
  156. package/analyzer/index.mjs +2346 -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 +54 -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} +5 -3
  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/nav-stack.js +11 -0
  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 +2 -1
  189. package/dist/browser/spacer.js +3 -0
  190. package/dist/browser/split-view.js +13 -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-navigator.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 +541 -0
  203. package/dist/catalog.js.map +1 -0
  204. package/dist/chip.d.ts +36 -0
  205. package/dist/chip.js +3 -0
  206. package/dist/chip.js.map +1 -0
  207. package/dist/chunk-2GOCOLQL.js +270 -0
  208. package/dist/chunk-2GOCOLQL.js.map +1 -0
  209. package/dist/chunk-3CXRQAYT.js +288 -0
  210. package/dist/chunk-3CXRQAYT.js.map +1 -0
  211. package/dist/chunk-3RE2JMZU.js +48 -0
  212. package/dist/chunk-3RE2JMZU.js.map +1 -0
  213. package/dist/chunk-3SXWV2IR.js +295 -0
  214. package/dist/chunk-3SXWV2IR.js.map +1 -0
  215. package/dist/chunk-3XPGJUUQ.js +37 -0
  216. package/dist/chunk-3XPGJUUQ.js.map +1 -0
  217. package/dist/chunk-4Y4L5YEI.js +66 -0
  218. package/dist/chunk-4Y4L5YEI.js.map +1 -0
  219. package/dist/chunk-5BZBIRQG.js +452 -0
  220. package/dist/chunk-5BZBIRQG.js.map +1 -0
  221. package/dist/chunk-5D3WDMIK.js +71 -0
  222. package/dist/chunk-5D3WDMIK.js.map +1 -0
  223. package/dist/chunk-62VMNBV2.js +779 -0
  224. package/dist/chunk-62VMNBV2.js.map +1 -0
  225. package/dist/chunk-75I3SNUJ.js +44 -0
  226. package/dist/chunk-75I3SNUJ.js.map +1 -0
  227. package/dist/chunk-7QQ3HE47.js +17 -0
  228. package/dist/chunk-7QQ3HE47.js.map +1 -0
  229. package/dist/chunk-7TE6XDFI.js +91 -0
  230. package/dist/chunk-7TE6XDFI.js.map +1 -0
  231. package/dist/chunk-A7DYEERU.js +59 -0
  232. package/dist/chunk-A7DYEERU.js.map +1 -0
  233. package/dist/chunk-AN5IWMTM.js +24 -0
  234. package/dist/chunk-AN5IWMTM.js.map +1 -0
  235. package/dist/chunk-ARZ4RSQO.js +48 -0
  236. package/dist/chunk-ARZ4RSQO.js.map +1 -0
  237. package/dist/chunk-BJLXE56E.js +135 -0
  238. package/dist/chunk-BJLXE56E.js.map +1 -0
  239. package/dist/chunk-BYHGRKC3.js +44 -0
  240. package/dist/chunk-BYHGRKC3.js.map +1 -0
  241. package/dist/chunk-CEJ5FK6G.js +288 -0
  242. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  243. package/dist/chunk-CVKIADIS.js +172 -0
  244. package/dist/chunk-CVKIADIS.js.map +1 -0
  245. package/dist/chunk-DQDTZE4W.js +70 -0
  246. package/dist/chunk-DQDTZE4W.js.map +1 -0
  247. package/dist/chunk-EFDCALR3.js +66 -0
  248. package/dist/chunk-EFDCALR3.js.map +1 -0
  249. package/dist/chunk-FL6J644M.js +116 -0
  250. package/dist/chunk-FL6J644M.js.map +1 -0
  251. package/dist/chunk-GS2QD3N7.js +14 -0
  252. package/dist/chunk-GS2QD3N7.js.map +1 -0
  253. package/dist/chunk-H45DAZBL.js +491 -0
  254. package/dist/chunk-H45DAZBL.js.map +1 -0
  255. package/dist/chunk-H7ZJEI3H.js +52 -0
  256. package/dist/chunk-H7ZJEI3H.js.map +1 -0
  257. package/dist/chunk-HFLGWMG3.js +138 -0
  258. package/dist/chunk-HFLGWMG3.js.map +1 -0
  259. package/dist/chunk-HFQDSSED.js +188 -0
  260. package/dist/chunk-HFQDSSED.js.map +1 -0
  261. package/dist/{chunk-56RJXPHG.js → chunk-I4SDIMFA.js} +7 -4
  262. package/dist/chunk-I4SDIMFA.js.map +1 -0
  263. package/dist/chunk-IM3GKYOG.js +202 -0
  264. package/dist/chunk-IM3GKYOG.js.map +1 -0
  265. package/dist/chunk-J3AWE5I4.js +50 -0
  266. package/dist/chunk-J3AWE5I4.js.map +1 -0
  267. package/dist/chunk-JOR5LGYE.js +55 -0
  268. package/dist/chunk-JOR5LGYE.js.map +1 -0
  269. package/dist/chunk-JZM3G6RT.js +149 -0
  270. package/dist/chunk-JZM3G6RT.js.map +1 -0
  271. package/dist/{chunk-7BR3DO2A.js → chunk-LAZLBC2Q.js} +14 -5
  272. package/dist/chunk-LAZLBC2Q.js.map +1 -0
  273. package/dist/chunk-LQKY5S4F.js +506 -0
  274. package/dist/chunk-LQKY5S4F.js.map +1 -0
  275. package/dist/chunk-LRAIS3YB.js +158 -0
  276. package/dist/chunk-LRAIS3YB.js.map +1 -0
  277. package/dist/chunk-MXNIVEVL.js +48 -0
  278. package/dist/chunk-MXNIVEVL.js.map +1 -0
  279. package/dist/chunk-NJZMR7HM.js +135 -0
  280. package/dist/chunk-NJZMR7HM.js.map +1 -0
  281. package/dist/chunk-NMWDHZVM.js +35 -0
  282. package/dist/chunk-NMWDHZVM.js.map +1 -0
  283. package/dist/{chunk-YGN7OMLT.js → chunk-NS2TBYM4.js} +8 -5
  284. package/dist/chunk-NS2TBYM4.js.map +1 -0
  285. package/dist/chunk-NVKRZ5DI.js +222 -0
  286. package/dist/chunk-NVKRZ5DI.js.map +1 -0
  287. package/dist/chunk-NVRJ7C3W.js +83 -0
  288. package/dist/chunk-NVRJ7C3W.js.map +1 -0
  289. package/dist/chunk-O27D24CA.js +250 -0
  290. package/dist/chunk-O27D24CA.js.map +1 -0
  291. package/dist/chunk-PQQQXJGV.js +58 -0
  292. package/dist/chunk-PQQQXJGV.js.map +1 -0
  293. package/dist/chunk-RRCD3A6G.js +139 -0
  294. package/dist/chunk-RRCD3A6G.js.map +1 -0
  295. package/dist/chunk-S3ECMF23.js +33 -0
  296. package/dist/chunk-S3ECMF23.js.map +1 -0
  297. package/dist/chunk-S4ZGTDSG.js +18 -0
  298. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  299. package/dist/chunk-VHXHLZ6R.js +69 -0
  300. package/dist/chunk-VHXHLZ6R.js.map +1 -0
  301. package/dist/chunk-VIGVNDXZ.js +165 -0
  302. package/dist/chunk-VIGVNDXZ.js.map +1 -0
  303. package/dist/chunk-VR7MWD2X.js +91 -0
  304. package/dist/chunk-VR7MWD2X.js.map +1 -0
  305. package/dist/chunk-Y6KT7ZTR.js +109 -0
  306. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  307. package/dist/chunk-YLJ6X3AC.js +34 -0
  308. package/dist/chunk-YLJ6X3AC.js.map +1 -0
  309. package/dist/collapsible-panel.d.ts +137 -0
  310. package/dist/collapsible-panel.js +135 -0
  311. package/dist/collapsible-panel.js.map +1 -0
  312. package/dist/content-item.d.ts +99 -0
  313. package/dist/content-item.js +4 -0
  314. package/dist/content-item.js.map +1 -0
  315. package/dist/css-values.d.ts +112 -0
  316. package/dist/css-values.js +3 -0
  317. package/dist/css-values.js.map +1 -0
  318. package/dist/device-class.js +34 -6
  319. package/dist/device-class.js.map +1 -1
  320. package/dist/disclosure-arrow.d.ts +6 -1
  321. package/dist/disclosure-arrow.js +2 -1
  322. package/dist/empty-state.d.ts +5 -2
  323. package/dist/empty-state.js +2 -1
  324. package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
  325. package/dist/floating-toolbar.d.ts +51 -0
  326. package/dist/floating-toolbar.js +3 -0
  327. package/dist/floating-toolbar.js.map +1 -0
  328. package/dist/grid.d.ts +57 -0
  329. package/dist/grid.js +5 -0
  330. package/dist/grid.js.map +1 -0
  331. package/dist/help-tags-register.d.ts +13 -0
  332. package/dist/help-tags-register.js +9 -0
  333. package/dist/help-tags-register.js.map +1 -0
  334. package/dist/index.d.ts +40 -18
  335. package/dist/index.js +44 -23
  336. package/dist/{menu-action-row.d.ts → list-action-row.d.ts} +21 -9
  337. package/dist/list-action-row.js +8 -0
  338. package/dist/list-action-row.js.map +1 -0
  339. package/dist/list-header.d.ts +98 -0
  340. package/dist/list-header.js +10 -0
  341. package/dist/list-header.js.map +1 -0
  342. package/dist/list-inset-control.d.ts +22 -0
  343. package/dist/list-inset-control.js +3 -0
  344. package/dist/list-inset-control.js.map +1 -0
  345. package/dist/list-inset-text.d.ts +30 -0
  346. package/dist/list-inset-text.js +4 -0
  347. package/dist/list-inset-text.js.map +1 -0
  348. package/dist/list-item.d.ts +62 -0
  349. package/dist/list-item.js +8 -0
  350. package/dist/list-item.js.map +1 -0
  351. package/dist/list.d.ts +63 -0
  352. package/dist/list.js +6 -0
  353. package/dist/list.js.map +1 -0
  354. package/dist/loading-spinner.d.ts +12 -2
  355. package/dist/loading-spinner.js +2 -1
  356. package/dist/lucide-icon.d.ts +14 -2
  357. package/dist/lucide-icon.js +2 -1
  358. package/dist/nav-stack-B1Qc2e5q.d.ts +101 -0
  359. package/dist/nav-stack.d.ts +13 -38
  360. package/dist/nav-stack.js +10 -1
  361. package/dist/pane.d.ts +116 -0
  362. package/dist/pane.js +4 -0
  363. package/dist/pane.js.map +1 -0
  364. package/dist/panel-toolbar-CL9tYOkh.d.ts +72 -0
  365. package/dist/popup-menu-register.d.ts +9 -0
  366. package/dist/popup-menu-register.js +244 -0
  367. package/dist/popup-menu-register.js.map +1 -0
  368. package/dist/popup-menu.d.ts +100 -0
  369. package/dist/popup-menu.js +3 -0
  370. package/dist/popup-menu.js.map +1 -0
  371. package/dist/resizable-region.d.ts +32 -3
  372. package/dist/resizable-region.js +1 -1
  373. package/dist/row.d.ts +48 -0
  374. package/dist/row.js +6 -0
  375. package/dist/row.js.map +1 -0
  376. package/dist/segmented-control.d.ts +12 -9
  377. package/dist/segmented-control.js +1 -2
  378. package/dist/select-register.d.ts +5 -1
  379. package/dist/select-register.js +247 -3
  380. package/dist/select-register.js.map +1 -1
  381. package/dist/select.d.ts +103 -8
  382. package/dist/select.js +3 -1
  383. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  384. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  385. package/dist/sides-BPSWde0A.d.ts +4 -0
  386. package/dist/skeleton.d.ts +14 -7
  387. package/dist/skeleton.js +2 -1
  388. package/dist/spacer.d.ts +18 -0
  389. package/dist/spacer.js +4 -0
  390. package/dist/spacer.js.map +1 -0
  391. package/dist/split-view.d.ts +44 -7
  392. package/dist/split-view.js +124 -10
  393. package/dist/split-view.js.map +1 -1
  394. package/dist/state-banner.d.ts +21 -7
  395. package/dist/state-banner.js +3 -1
  396. package/dist/styles/app-tab.css +224 -0
  397. package/dist/styles/badge.css +118 -0
  398. package/dist/styles/catalog/components/catalog-example-stack.css +9 -0
  399. package/dist/styles/catalog/components/catalog-example.css +168 -0
  400. package/dist/styles/catalog/components/catalog-stage.css +55 -0
  401. package/dist/styles/catalog/components/catalog.css +50 -0
  402. package/dist/styles/catalog.css +5 -0
  403. package/dist/styles/chip.css +138 -0
  404. package/dist/styles/collapsible-panel.css +580 -0
  405. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  406. package/dist/styles/components/actions/popup-menu/popup-menu.css +285 -0
  407. package/dist/styles/components/actions/toolbar/toolbar.css +417 -0
  408. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +891 -0
  409. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +171 -0
  410. package/dist/styles/components/collections/list/list.css +133 -0
  411. package/dist/styles/components/collections/list-action-row/list-action-row.css +258 -0
  412. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  413. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  414. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  415. package/dist/styles/components/collections/list-item/list-item.css +255 -0
  416. package/dist/styles/components/data-display/value-table/value-table.css +105 -0
  417. package/dist/styles/components/feedback/badge/badge.css +118 -0
  418. package/dist/styles/components/feedback/chip/chip.css +138 -0
  419. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  420. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  421. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  422. package/dist/styles/components/feedback/state-banner/state-banner.css +248 -0
  423. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  424. package/dist/styles/components/forms/select/select.css +454 -0
  425. package/dist/styles/components/forms/token-search-field/token-search-field.css +392 -0
  426. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +580 -0
  427. package/dist/styles/components/layout/grid/grid.css +85 -0
  428. package/dist/styles/components/layout/pane/pane.css +294 -0
  429. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  430. package/dist/styles/components/layout/row/row.css +111 -0
  431. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  432. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  433. package/dist/styles/components/layout/workbench/workbench.css +1075 -0
  434. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  435. package/dist/styles/components/navigation/app-tab/app-tab.css +376 -0
  436. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  437. package/dist/styles/components/navigation/nav-stack/nav-stack.css +242 -0
  438. package/dist/styles/components/navigation/tab-bar/tab-bar.css +183 -0
  439. package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +237 -0
  440. package/dist/styles/components/surfaces/content-item/content-item.css +120 -0
  441. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +34 -0
  442. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +111 -0
  443. package/dist/styles/components/typography/text/text.css +158 -0
  444. package/dist/styles/content-item.css +120 -0
  445. package/dist/styles/document.css +33 -0
  446. package/dist/styles/floating-toolbar.css +119 -0
  447. package/dist/styles/foundation.css +187 -45
  448. package/dist/styles/grid.css +85 -0
  449. package/dist/styles/layout.css +3 -41
  450. package/dist/styles/list-action-row.css +258 -0
  451. package/dist/styles/list-header.css +229 -0
  452. package/dist/styles/list-inset-control.css +30 -0
  453. package/dist/styles/list-inset-text.css +29 -0
  454. package/dist/styles/list-item.css +255 -0
  455. package/dist/styles/list.css +133 -0
  456. package/dist/styles/loading-spinner.css +4 -0
  457. package/dist/styles/lucide-icon.css +9 -0
  458. package/dist/styles/nav-stack.css +180 -50
  459. package/dist/styles/pane.css +294 -0
  460. package/dist/styles/popup-menu.css +285 -0
  461. package/dist/styles/resizable-region.css +438 -4
  462. package/dist/styles/row.css +111 -0
  463. package/dist/styles/segmented-control.css +36 -9
  464. package/dist/styles/select.css +337 -21
  465. package/dist/styles/skeleton.css +64 -3
  466. package/dist/styles/spacer.css +11 -0
  467. package/dist/styles/split-view.css +114 -3
  468. package/dist/styles/state-banner.css +94 -19
  469. package/dist/styles/styles.css +13 -4
  470. package/dist/styles/sunken-panel.css +34 -0
  471. package/dist/styles/surface-scaffold.css +111 -0
  472. package/dist/styles/tab-bar.css +147 -9
  473. package/dist/styles/tab-navigator.css +237 -0
  474. package/dist/styles/text.css +158 -0
  475. package/dist/styles/token-search-field.css +167 -56
  476. package/dist/styles/toolbar-control-group.css +710 -30
  477. package/dist/styles/toolbar-text.css +139 -8
  478. package/dist/styles/toolbar.css +367 -11
  479. package/dist/styles/value-table.css +34 -4
  480. package/dist/styles/webawesome.css +388 -16
  481. package/dist/styles/workbench.css +988 -7
  482. package/dist/sunken-panel.d.ts +31 -0
  483. package/dist/sunken-panel.js +3 -0
  484. package/dist/sunken-panel.js.map +1 -0
  485. package/dist/surface-scaffold-register.d.ts +4 -0
  486. package/dist/surface-scaffold-register.js +59 -0
  487. package/dist/surface-scaffold-register.js.map +1 -0
  488. package/dist/surface-scaffold.d.ts +38 -0
  489. package/dist/surface-scaffold.js +3 -0
  490. package/dist/surface-scaffold.js.map +1 -0
  491. package/dist/tab-bar.d.ts +39 -6
  492. package/dist/tab-bar.js +1 -1
  493. package/dist/tab-navigator.d.ts +86 -0
  494. package/dist/tab-navigator.js +95 -0
  495. package/dist/tab-navigator.js.map +1 -0
  496. package/dist/text.d.ts +63 -0
  497. package/dist/text.js +3 -0
  498. package/dist/text.js.map +1 -0
  499. package/dist/token-search-field.d.ts +3 -43
  500. package/dist/token-search-field.js +2 -1
  501. package/dist/token-search-model-DTcTXWMS.d.ts +154 -0
  502. package/dist/token-search-model.d.ts +3 -0
  503. package/dist/token-search-model.js +3 -0
  504. package/dist/token-search-model.js.map +1 -0
  505. package/dist/toolbar-control-group.d.ts +89 -7
  506. package/dist/toolbar-control-group.js +3 -1
  507. package/dist/toolbar-text.d.ts +45 -9
  508. package/dist/toolbar-text.js +2 -1
  509. package/dist/toolbar.d.ts +59 -7
  510. package/dist/toolbar.js +1 -1
  511. package/dist/types-C9BubXfz.d.ts +117 -0
  512. package/dist/value-table.d.ts +11 -3
  513. package/dist/value-table.js +2 -1
  514. package/dist/webawesome.d.ts +8 -1
  515. package/dist/wire-catalog.d.ts +82 -0
  516. package/dist/wire-catalog.js +407 -0
  517. package/dist/wire-catalog.js.map +1 -0
  518. package/dist/wire-content-items.d.ts +11 -0
  519. package/dist/wire-content-items.js +114 -0
  520. package/dist/wire-content-items.js.map +1 -0
  521. package/dist/wire-nav-stack.d.ts +4 -1
  522. package/dist/wire-nav-stack.js +191 -15
  523. package/dist/wire-nav-stack.js.map +1 -1
  524. package/dist/wire-resizable-regions.d.ts +2 -1
  525. package/dist/wire-resizable-regions.js +2 -1
  526. package/dist/wire-scroll-dividers.d.ts +72 -0
  527. package/dist/wire-scroll-dividers.js +3 -0
  528. package/dist/wire-scroll-dividers.js.map +1 -0
  529. package/dist/wire-sidebar.d.ts +63 -0
  530. package/dist/wire-sidebar.js +231 -0
  531. package/dist/wire-sidebar.js.map +1 -0
  532. package/dist/wire-tab-bars.d.ts +19 -2
  533. package/dist/wire-tab-bars.js +1 -1
  534. package/dist/wire-tab-navigator.d.ts +11 -0
  535. package/dist/wire-tab-navigator.js +21 -0
  536. package/dist/wire-tab-navigator.js.map +1 -0
  537. package/dist/wire-token-search-fields.d.ts +65 -3
  538. package/dist/wire-token-search-fields.js +2 -1
  539. package/dist/wire-toolbar-visibility.d.ts +13 -0
  540. package/dist/wire-toolbar-visibility.js +3 -0
  541. package/dist/wire-toolbar-visibility.js.map +1 -0
  542. package/dist/wire-workbench.d.ts +116 -0
  543. package/dist/wire-workbench.js +6 -0
  544. package/dist/wire-workbench.js.map +1 -0
  545. package/dist/workbench.d.ts +246 -9
  546. package/dist/workbench.js +17 -15
  547. package/dist/workbench.js.map +1 -1
  548. package/docs/accessibility.md +497 -26
  549. package/docs/app-layouts.md +141 -10
  550. package/docs/apple-hig.md +1 -0
  551. package/docs/catalog.md +493 -0
  552. package/docs/collapsible-panel.md +382 -0
  553. package/docs/component-contract.md +736 -61
  554. package/docs/component-integration.md +75 -0
  555. package/docs/component-selection.md +617 -97
  556. package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
  557. package/docs/design/templates/empty-state/filtered.svg +1 -0
  558. package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
  559. package/docs/design/templates/empty-state/with-action.svg +1 -0
  560. package/docs/design/templates/empty-state-dark.svg +1 -0
  561. package/docs/design/templates/empty-state.svg +1 -0
  562. package/docs/design/templates/list/compact-dark.svg +1 -0
  563. package/docs/design/templates/list/compact.svg +1 -0
  564. package/docs/design/templates/list/stack-dark.svg +1 -0
  565. package/docs/design/templates/list/stack.svg +1 -0
  566. package/docs/design/templates/list-action-row/default-dark.svg +1 -0
  567. package/docs/design/templates/list-action-row/default.svg +1 -0
  568. package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
  569. package/docs/design/templates/list-action-row/selected.svg +1 -0
  570. package/docs/design/templates/list-action-row-dark.svg +1 -0
  571. package/docs/design/templates/list-action-row.svg +1 -0
  572. package/docs/design/templates/list-dark.svg +1 -0
  573. package/docs/design/templates/list-header/action-dark.svg +1 -0
  574. package/docs/design/templates/list-header/action.svg +1 -0
  575. package/docs/design/templates/list-header/count-dark.svg +1 -0
  576. package/docs/design/templates/list-header/count.svg +1 -0
  577. package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
  578. package/docs/design/templates/list-header/inline-action.svg +1 -0
  579. package/docs/design/templates/list-header/size-l-dark.svg +1 -0
  580. package/docs/design/templates/list-header/size-l.svg +1 -0
  581. package/docs/design/templates/list-header/size-m-dark.svg +1 -0
  582. package/docs/design/templates/list-header/size-m.svg +1 -0
  583. package/docs/design/templates/list-header/size-xl-dark.svg +1 -0
  584. package/docs/design/templates/list-header/size-xl.svg +1 -0
  585. package/docs/design/templates/list-header/size-xs-dark.svg +1 -0
  586. package/docs/design/templates/list-header/size-xs.svg +1 -0
  587. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
  588. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
  589. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
  590. package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
  591. package/docs/design/templates/list-header-dark.svg +1 -0
  592. package/docs/design/templates/list-header.svg +1 -0
  593. package/docs/design/templates/list-item/default-dark.svg +1 -0
  594. package/docs/design/templates/list-item/default.svg +1 -0
  595. package/docs/design/templates/list-item/multiline-dark.svg +1 -0
  596. package/docs/design/templates/list-item/multiline.svg +1 -0
  597. package/docs/design/templates/list-item/selected-dark.svg +1 -0
  598. package/docs/design/templates/list-item/selected.svg +1 -0
  599. package/docs/design/templates/list-item/trailing-dark.svg +1 -0
  600. package/docs/design/templates/list-item/trailing.svg +1 -0
  601. package/docs/design/templates/list-item-dark.svg +1 -0
  602. package/docs/design/templates/list-item.svg +1 -0
  603. package/docs/design/templates/list.svg +1 -0
  604. package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
  605. package/docs/design/templates/segmented-control/equal.svg +1 -0
  606. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
  607. package/docs/design/templates/segmented-control/pill-small.svg +1 -0
  608. package/docs/design/templates/segmented-control-dark.svg +1 -0
  609. package/docs/design/templates/segmented-control.svg +1 -0
  610. package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
  611. package/docs/design/templates/skeleton/avatar.svg +1 -0
  612. package/docs/design/templates/skeleton/block-dark.svg +1 -0
  613. package/docs/design/templates/skeleton/block.svg +1 -0
  614. package/docs/design/templates/skeleton/lines-dark.svg +1 -0
  615. package/docs/design/templates/skeleton/lines.svg +1 -0
  616. package/docs/design/templates/skeleton-dark.svg +1 -0
  617. package/docs/design/templates/skeleton.svg +1 -0
  618. package/docs/design/templates/state-banner/danger-dark.svg +1 -0
  619. package/docs/design/templates/state-banner/danger.svg +1 -0
  620. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  621. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  622. package/docs/design/templates/state-banner/info-dark.svg +1 -0
  623. package/docs/design/templates/state-banner/info.svg +1 -0
  624. package/docs/design/templates/state-banner/success-dark.svg +1 -0
  625. package/docs/design/templates/state-banner/success.svg +1 -0
  626. package/docs/design/templates/state-banner/warning-dark.svg +1 -0
  627. package/docs/design/templates/state-banner/warning.svg +1 -0
  628. package/docs/design/templates/state-banner-dark.svg +1 -0
  629. package/docs/design/templates/state-banner.svg +1 -0
  630. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
  631. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
  632. package/docs/design/templates/tab-bar-dark.svg +1 -0
  633. package/docs/design/templates/tab-bar.svg +1 -0
  634. package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
  635. package/docs/design/templates/token-search-field/empty.svg +1 -0
  636. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
  637. package/docs/design/templates/token-search-field/tokens.svg +1 -0
  638. package/docs/design/templates/token-search-field-dark.svg +1 -0
  639. package/docs/design/templates/token-search-field.svg +1 -0
  640. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
  641. package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
  642. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -0
  643. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -0
  644. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -0
  645. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -0
  646. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -0
  647. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -0
  648. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -0
  649. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -0
  650. package/docs/design/templates/toolbar-control-group/icon-tile-brand-dark.svg +1 -0
  651. package/docs/design/templates/toolbar-control-group/icon-tile-brand.svg +1 -0
  652. package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -0
  653. package/docs/design/templates/toolbar-control-group/icon-tile-danger.svg +1 -0
  654. package/docs/design/templates/toolbar-control-group/icon-tile-neutral-dark.svg +1 -0
  655. package/docs/design/templates/toolbar-control-group/icon-tile-neutral.svg +1 -0
  656. package/docs/design/templates/toolbar-control-group/icon-tile-success-dark.svg +1 -0
  657. package/docs/design/templates/toolbar-control-group/icon-tile-success.svg +1 -0
  658. package/docs/design/templates/toolbar-control-group/icon-tile-warning-dark.svg +1 -0
  659. package/docs/design/templates/toolbar-control-group/icon-tile-warning.svg +1 -0
  660. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -0
  661. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -0
  662. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -0
  663. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -0
  664. package/docs/design/templates/toolbar-control-group-dark.svg +1 -0
  665. package/docs/design/templates/toolbar-control-group.svg +1 -0
  666. package/docs/design/templates/toolbar-dark.svg +1 -0
  667. package/docs/design/templates/toolbar-text/dark-tone-dark.svg +1 -0
  668. package/docs/design/templates/toolbar-text/dark-tone.svg +1 -0
  669. package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
  670. package/docs/design/templates/toolbar-text/default.svg +1 -0
  671. package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
  672. package/docs/design/templates/toolbar-text/large.svg +1 -0
  673. package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
  674. package/docs/design/templates/toolbar-text/small.svg +1 -0
  675. package/docs/design/templates/toolbar-text-dark.svg +1 -0
  676. package/docs/design/templates/toolbar-text.svg +1 -0
  677. package/docs/design/templates/toolbar.svg +1 -0
  678. package/docs/design/templates/value-table/details-dark.svg +1 -0
  679. package/docs/design/templates/value-table/details.svg +1 -0
  680. package/docs/design/templates/value-table-dark.svg +1 -0
  681. package/docs/design/templates/value-table.svg +1 -0
  682. package/docs/design/templates.md +140 -0
  683. package/docs/design-philosophy.md +48 -20
  684. package/docs/device-class.md +10 -9
  685. package/docs/document-baseline.md +42 -0
  686. package/docs/examples/application-ui-profile.json +60 -0
  687. package/docs/examples/command-palette-adapter.tsx +69 -17
  688. package/docs/examples/component-catalog-extension.json +52 -0
  689. package/docs/examples/component-composition-extension.json +80 -0
  690. package/docs/layout.md +601 -59
  691. package/docs/nav-stack.md +154 -14
  692. package/docs/recipes.md +142 -55
  693. package/docs/split-view.md +77 -6
  694. package/docs/sunken-panel.md +93 -0
  695. package/docs/surface-scaffold.md +74 -0
  696. package/docs/tab-navigator.md +210 -0
  697. package/docs/type-contracts.md +135 -0
  698. package/docs/ui-analyzer.md +404 -0
  699. package/docs/ui-doctor.md +202 -0
  700. package/docs/ui-evaluator.md +139 -0
  701. package/docs/ux-demo.md +46 -16
  702. package/docs/webawesome-theme.md +188 -16
  703. package/docs/workbench.md +621 -12
  704. package/doctor/cli.mjs +120 -0
  705. package/doctor/component-style-checks.mjs +457 -0
  706. package/doctor/config.schema.json +94 -0
  707. package/doctor/eslint-diagnostics.d.mts +24 -0
  708. package/doctor/eslint-diagnostics.mjs +24 -0
  709. package/doctor/index.d.mts +122 -0
  710. package/doctor/index.mjs +1403 -0
  711. package/doctor/report.schema.json +118 -0
  712. package/evaluator/cli.mjs +89 -0
  713. package/evaluator/index.d.mts +90 -0
  714. package/evaluator/index.mjs +1203 -0
  715. package/evaluator/report.schema.json +152 -0
  716. package/llms.txt +510 -49
  717. package/package.json +266 -44
  718. package/scripts/component-catalog-extension-validation.mjs +28 -0
  719. package/traversal-exclusions.mjs +27 -0
  720. package/ux-demo/recipes/app-shell.tsx +205 -17
  721. package/ux-demo/recipes/collapsible-sidebar.tsx +260 -0
  722. package/ux-demo/recipes/compact-toolbar.tsx +135 -14
  723. package/ux-demo/recipes/composer-form.tsx +133 -21
  724. package/ux-demo/recipes/list-detail-dialog.tsx +286 -0
  725. package/ux-demo/recipes/list-workspace-states.tsx +183 -11
  726. package/ux-demo/recipes/loaders.ts +15 -5
  727. package/ux-demo/recipes/loading-inspector.tsx +204 -0
  728. package/ux-demo/recipes/mount-recipe.ts +28 -10
  729. package/ux-demo/recipes/navigation-sidebar.tsx +139 -13
  730. package/ux-demo/recipes/navigation-stack.tsx +81 -26
  731. package/ux-demo/recipes/types.ts +23 -2
  732. package/ux-demo/recipes/workspace-header.tsx +86 -5
  733. package/dist/browser/menu-action-row.js +0 -4
  734. package/dist/browser/menu-item.js +0 -4
  735. package/dist/browser/panel-header.js +0 -7
  736. package/dist/chunk-2RJBFNB6.js +0 -172
  737. package/dist/chunk-2RJBFNB6.js.map +0 -1
  738. package/dist/chunk-2Z5TWHKQ.js +0 -34
  739. package/dist/chunk-2Z5TWHKQ.js.map +0 -1
  740. package/dist/chunk-3YD6ZNRA.js +0 -34
  741. package/dist/chunk-3YD6ZNRA.js.map +0 -1
  742. package/dist/chunk-55DATV3A.js +0 -10
  743. package/dist/chunk-55DATV3A.js.map +0 -1
  744. package/dist/chunk-56RJXPHG.js.map +0 -1
  745. package/dist/chunk-7BR3DO2A.js.map +0 -1
  746. package/dist/chunk-7LDCTU7D.js +0 -134
  747. package/dist/chunk-7LDCTU7D.js.map +0 -1
  748. package/dist/chunk-AQNKJRFH.js +0 -79
  749. package/dist/chunk-AQNKJRFH.js.map +0 -1
  750. package/dist/chunk-B24C4A6T.js +0 -22
  751. package/dist/chunk-B24C4A6T.js.map +0 -1
  752. package/dist/chunk-BLK3UEEI.js +0 -23
  753. package/dist/chunk-BLK3UEEI.js.map +0 -1
  754. package/dist/chunk-BNQ2YDV4.js +0 -20
  755. package/dist/chunk-BNQ2YDV4.js.map +0 -1
  756. package/dist/chunk-DAFFDO33.js +0 -14
  757. package/dist/chunk-DAFFDO33.js.map +0 -1
  758. package/dist/chunk-H6URQGJI.js +0 -42
  759. package/dist/chunk-H6URQGJI.js.map +0 -1
  760. package/dist/chunk-I7INRJO4.js +0 -17
  761. package/dist/chunk-I7INRJO4.js.map +0 -1
  762. package/dist/chunk-LC3YSAZC.js +0 -39
  763. package/dist/chunk-LC3YSAZC.js.map +0 -1
  764. package/dist/chunk-M5JRI6MN.js +0 -27
  765. package/dist/chunk-M5JRI6MN.js.map +0 -1
  766. package/dist/chunk-MBR3TYNL.js +0 -14
  767. package/dist/chunk-MBR3TYNL.js.map +0 -1
  768. package/dist/chunk-MFKMHK5W.js +0 -10
  769. package/dist/chunk-MFKMHK5W.js.map +0 -1
  770. package/dist/chunk-MQIZAD4A.js +0 -227
  771. package/dist/chunk-MQIZAD4A.js.map +0 -1
  772. package/dist/chunk-PONXLV5U.js +0 -19
  773. package/dist/chunk-PONXLV5U.js.map +0 -1
  774. package/dist/chunk-RUNWEPR4.js +0 -10
  775. package/dist/chunk-RUNWEPR4.js.map +0 -1
  776. package/dist/chunk-W2FK7ZNY.js +0 -26
  777. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  778. package/dist/chunk-WVPYVDXY.js +0 -15
  779. package/dist/chunk-WVPYVDXY.js.map +0 -1
  780. package/dist/chunk-YGN7OMLT.js.map +0 -1
  781. package/dist/chunk-YKUUZPED.js +0 -24
  782. package/dist/chunk-YKUUZPED.js.map +0 -1
  783. package/dist/menu-action-row.js +0 -5
  784. package/dist/menu-action-row.js.map +0 -1
  785. package/dist/menu-header.d.ts +0 -43
  786. package/dist/menu-header.js +0 -7
  787. package/dist/menu-header.js.map +0 -1
  788. package/dist/menu-item.d.ts +0 -33
  789. package/dist/menu-item.js +0 -5
  790. package/dist/menu-item.js.map +0 -1
  791. package/dist/panel-header.d.ts +0 -36
  792. package/dist/panel-header.js +0 -7
  793. package/dist/panel-header.js.map +0 -1
  794. package/dist/styles/menu-action-row.css +0 -160
  795. package/dist/styles/menu-header.css +0 -160
  796. package/dist/styles/menu-item.css +0 -123
  797. package/dist/styles/panel-header.css +0 -64
  798. package/dist/styles/tab-scaffold.css +0 -84
  799. package/dist/tab-scaffold.d.ts +0 -30
  800. package/dist/tab-scaffold.js +0 -16
  801. package/dist/tab-scaffold.js.map +0 -1
  802. package/dist/wire-tab-scaffold.d.ts +0 -11
  803. package/dist/wire-tab-scaffold.js +0 -16
  804. package/dist/wire-tab-scaffold.js.map +0 -1
  805. package/docs/tab-scaffold.md +0 -41
  806. package/ux-demo/recipes/master-detail-dialog.tsx +0 -45
  807. package/ux-demo/recipes/recipes.css +0 -355
@@ -0,0 +1,1075 @@
1
+ .kui-workbench {
2
+ position: relative;
3
+ /* The rail and drawer overlays and the restore controls stack within the
4
+ Workbench, never against the page around it. */
5
+ isolation: isolate;
6
+ display: flex;
7
+ min-width: 0;
8
+ min-height: 0;
9
+ height: 100%;
10
+ overflow: hidden;
11
+ background: var(--kui-color-surface);
12
+ /* Safe areas: every track paints through the unsafe area it reaches (a rail
13
+ or drawer grows by that inset), and each region's content compensates only
14
+ for the edges the region still touches. An expanded inline rail takes its
15
+ edge away from the center; collapsing it hands the edge back. See pane.css
16
+ for the `--kui-edge-inset-*` edge context. */
17
+ --_kui-workbench-safe-block-start: var(
18
+ --kui-edge-inset-block-start,
19
+ var(--kui-safe-area-block-start, env(safe-area-inset-top, 0px))
20
+ );
21
+ --_kui-workbench-safe-block-end: var(
22
+ --kui-edge-inset-block-end,
23
+ var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
24
+ );
25
+ --_kui-workbench-safe-inline-start: var(
26
+ --kui-edge-inset-inline-start,
27
+ var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
28
+ );
29
+ --_kui-workbench-safe-inline-end: var(
30
+ --kui-edge-inset-inline-end,
31
+ var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
32
+ );
33
+ }
34
+
35
+ /* Side rails. Collapsing snaps the flex track to zero (one reflow) while the
36
+ fixed-width content slides out via transform (composited, clipped) — never a
37
+ per-frame width animation. See docs/18 / the KF-7QKJRK catalog sidebar. */
38
+ .kui-workbench__rail {
39
+ --kui-edge-inset-block-start: var(--_kui-workbench-safe-block-start);
40
+ --kui-edge-inset-block-end: var(--_kui-workbench-safe-block-end);
41
+ --_kui-workbench-rail-extent: calc(
42
+ var(--kui-workbench-rail-width, 17.5rem) +
43
+ var(--_kui-workbench-rail-safe-inset)
44
+ );
45
+ /* The size is the whole track, separator border included, in or out of
46
+ flow and whatever box model the app defaults to. */
47
+ box-sizing: border-box;
48
+ flex: 0 0 var(--_kui-workbench-rail-extent);
49
+ min-width: 0;
50
+ overflow: hidden;
51
+ background: var(--kui-color-surface);
52
+ }
53
+
54
+ .kui-workbench__rail--left {
55
+ --_kui-workbench-rail-safe-inset: var(--_kui-workbench-safe-inline-start);
56
+ --kui-edge-inset-inline-start: var(--_kui-workbench-safe-inline-start);
57
+ --kui-edge-inset-inline-end: 0px;
58
+ border-inline-end: 1px solid var(--kui-color-neutral-border-normal);
59
+ }
60
+
61
+ .kui-workbench__rail--right {
62
+ --_kui-workbench-rail-safe-inset: var(--_kui-workbench-safe-inline-end);
63
+ --kui-edge-inset-inline-start: 0px;
64
+ --kui-edge-inset-inline-end: var(--_kui-workbench-safe-inline-end);
65
+ border-inline-start: 1px solid var(--kui-color-neutral-border-normal);
66
+ }
67
+
68
+ .kui-workbench__rail[data-collapsed="true"] {
69
+ flex-basis: 0;
70
+ border-inline: 0;
71
+ }
72
+
73
+ .kui-workbench__rail[data-separator="hidden"],
74
+ .kui-workbench__drawer[data-separator="hidden"] {
75
+ border-color: transparent;
76
+ }
77
+
78
+ /* The center is the overlay drawer's containing block, so a drawer that
79
+ leaves the flow still covers exactly the work-area column it docks under. */
80
+ .kui-workbench__center {
81
+ position: relative;
82
+ --kui-edge-inset-block-start: var(--_kui-workbench-safe-block-start);
83
+ --kui-edge-inset-block-end: var(--_kui-workbench-safe-block-end);
84
+ --kui-edge-inset-inline-start: var(--_kui-workbench-safe-inline-start);
85
+ --kui-edge-inset-inline-end: var(--_kui-workbench-safe-inline-end);
86
+ display: flex;
87
+ flex: 1;
88
+ min-width: 0;
89
+ min-height: 0;
90
+ overflow: hidden;
91
+ flex-direction: column;
92
+ }
93
+
94
+ .kui-workbench[data-left-inline-expanded="true"] > .kui-workbench__center {
95
+ --kui-edge-inset-inline-start: 0px;
96
+ }
97
+
98
+ .kui-workbench[data-right-inline-expanded="true"] > .kui-workbench__center {
99
+ --kui-edge-inset-inline-end: 0px;
100
+ }
101
+
102
+ .kui-workbench__main {
103
+ flex: 1;
104
+ min-height: 0;
105
+ overflow: auto;
106
+ }
107
+
108
+ :is(.kui-workbench__main, .kui-workbench__rail, .kui-workbench__drawer):is(
109
+ :focus-visible,
110
+ [data-outlined="true"]
111
+ ) {
112
+ outline: var(--kui-focus-ring);
113
+ outline-offset: -3px;
114
+ }
115
+
116
+ /* When no Pane chrome is composed, the Workbench region owns its scroll.
117
+ A resizable auto-overflow panel instead scrolls its content box so its
118
+ separator handle remains fixed. Paint only that owner. */
119
+ .kui-workbench__main[data-appearance="sunken"],
120
+ :is(.kui-workbench__rail, .kui-workbench__drawer)[data-appearance="sunken"] {
121
+ background: var(
122
+ --kui-sunken-panel-background,
123
+ var(--kui-color-surface-lowered)
124
+ );
125
+ }
126
+
127
+ :is(
128
+ .kui-workbench__rail,
129
+ .kui-workbench__drawer
130
+ )[data-appearance="sunken"][data-resizable="true"][data-content-overflow="auto"] {
131
+ background: transparent;
132
+ }
133
+
134
+ :is(
135
+ .kui-workbench__rail,
136
+ .kui-workbench__drawer
137
+ )[data-appearance="sunken"][data-resizable="true"][data-content-overflow="auto"]
138
+ > .kui-workbench__panel-content {
139
+ background: var(
140
+ --kui-sunken-panel-background,
141
+ var(--kui-color-surface-lowered)
142
+ );
143
+ }
144
+
145
+ .kui-workbench__main[data-drawer-inline-expanded="true"] {
146
+ --_kui-workbench-content-edge-block-end: 0px;
147
+ }
148
+
149
+ /* The main area and each panel's content are the consumers: they pad for the
150
+ edges their region still touches, the main area inside its scroller so
151
+ content scrolls under an unsafe edge but can always be scrolled clear. A
152
+ region whose only child is a Pane or layout lets that child own the insets. */
153
+ .kui-workbench__center,
154
+ .kui-workbench__rail,
155
+ .kui-workbench__drawer {
156
+ --_kui-workbench-content-edge-block-start: var(--kui-edge-inset-block-start);
157
+ --_kui-workbench-content-edge-block-end: var(--kui-edge-inset-block-end);
158
+ --_kui-workbench-content-edge-inline-start: var(
159
+ --kui-edge-inset-inline-start
160
+ );
161
+ --_kui-workbench-content-edge-inline-end: var(--kui-edge-inset-inline-end);
162
+ }
163
+
164
+ .kui-workbench__main,
165
+ .kui-workbench__panel-content {
166
+ /* Clear the public context at the region, so arbitrary app children inherit
167
+ zero without a selector whose subject is every child in the document. */
168
+ --kui-edge-inset-block-start: 0px;
169
+ --kui-edge-inset-block-end: 0px;
170
+ --kui-edge-inset-inline-start: 0px;
171
+ --kui-edge-inset-inline-end: 0px;
172
+ }
173
+
174
+ .kui-workbench__main:not(
175
+ :has(
176
+ > :is(
177
+ [data-component="pane"],
178
+ [data-component="nav-stack"],
179
+ [data-component="split-view"],
180
+ [data-component="workbench"],
181
+ [data-component="tab-scaffold"]
182
+ ):only-child
183
+ )
184
+ ),
185
+ .kui-workbench__panel-content:not(
186
+ :has(
187
+ > :is(
188
+ [data-component="pane"],
189
+ [data-component="nav-stack"],
190
+ [data-component="split-view"],
191
+ [data-component="workbench"],
192
+ [data-component="tab-scaffold"]
193
+ ):only-child
194
+ )
195
+ ) {
196
+ padding-block: var(--_kui-workbench-content-edge-block-start)
197
+ var(--_kui-workbench-content-edge-block-end);
198
+ padding-inline: var(--_kui-workbench-content-edge-inline-start)
199
+ var(--_kui-workbench-content-edge-inline-end);
200
+ scroll-padding-block: var(--_kui-workbench-content-edge-block-start)
201
+ var(--_kui-workbench-content-edge-block-end);
202
+ }
203
+
204
+ /* A nested Workbench owns its safe-area insets. Other sole layout children
205
+ restore this context from their own stylesheets. */
206
+ :is(.kui-workbench__main, .kui-workbench__panel-content)
207
+ > [data-component="workbench"]:only-child {
208
+ --kui-edge-inset-block-start: var(--_kui-workbench-content-edge-block-start);
209
+ --kui-edge-inset-block-end: var(--_kui-workbench-content-edge-block-end);
210
+ --kui-edge-inset-inline-start: var(
211
+ --_kui-workbench-content-edge-inline-start
212
+ );
213
+ --kui-edge-inset-inline-end: var(--_kui-workbench-content-edge-inline-end);
214
+ }
215
+
216
+ /* A region whose only child is a Pane or layout lets it fill the region, so a
217
+ composed toolbar's footer (or the app's own) sits at the region's bottom
218
+ edge rather than under short content. Each of those components fills the
219
+ region from its own stylesheet (pane.css, nav-stack.css, split-view.css,
220
+ tab-navigator.css); a nested Workbench fills it here. */
221
+ :is(.kui-workbench__main, .kui-workbench__panel-content)
222
+ > [data-component="workbench"]:only-child {
223
+ height: 100%;
224
+ }
225
+
226
+ /* Bottom drawer — the vertical analogue of a rail. */
227
+ .kui-workbench__drawer {
228
+ --kui-edge-inset-block-start: 0px;
229
+ --_kui-workbench-drawer-extent: calc(
230
+ var(--kui-workbench-drawer-height, 13.75rem) +
231
+ var(--_kui-workbench-safe-block-end)
232
+ );
233
+ box-sizing: border-box;
234
+ position: relative;
235
+ flex: 0 0 var(--_kui-workbench-drawer-extent);
236
+ min-height: 0;
237
+ overflow: hidden;
238
+ border-block-start: 1px solid var(--kui-color-neutral-border-normal);
239
+ background: var(--kui-color-surface);
240
+ }
241
+
242
+ .kui-workbench__drawer[data-collapsed="true"] {
243
+ flex-basis: 0;
244
+ border-block-start: 0;
245
+ }
246
+
247
+ .kui-workbench__rail[data-content-overflow="auto"],
248
+ .kui-workbench__drawer[data-content-overflow="auto"] {
249
+ overflow: auto;
250
+ }
251
+
252
+ .kui-workbench__rail[data-content-overflow="visible"],
253
+ .kui-workbench__drawer[data-content-overflow="visible"] {
254
+ z-index: var(--kui-workbench-popup-z, 5);
255
+ overflow: visible;
256
+ }
257
+
258
+ .kui-workbench__rail:has(wa-dropdown[open]),
259
+ .kui-workbench__drawer:has(wa-dropdown[open]) {
260
+ z-index: var(--kui-workbench-popup-z, 5);
261
+ }
262
+
263
+ /* The fixed-size sliding content. The rail/drawer keeps a definite size on its
264
+ content so the transform reads as a slide, not a squeeze. */
265
+ .kui-workbench__rail .kui-workbench__panel-content {
266
+ width: var(--_kui-workbench-rail-extent);
267
+ height: 100%;
268
+ transition: transform 200ms ease;
269
+ }
270
+
271
+ .kui-workbench__drawer .kui-workbench__panel-content {
272
+ position: absolute;
273
+ inset-inline: 0;
274
+ inset-block-end: 0;
275
+ width: 100%;
276
+ height: var(--_kui-workbench-drawer-extent);
277
+ transition: transform 200ms ease;
278
+ }
279
+
280
+ .kui-workbench__rail[data-collapse-motion="none"] .kui-workbench__panel-content,
281
+ .kui-workbench__drawer[data-collapse-motion="none"]
282
+ .kui-workbench__panel-content {
283
+ transition: none;
284
+ }
285
+
286
+ :is(.kui-workbench__rail, .kui-workbench__drawer)[data-resizing="true"]
287
+ > .kui-workbench__panel-content {
288
+ transition: none;
289
+ }
290
+
291
+ .kui-workbench__rail[data-collapse-motion="fade-slide"][data-collapsed="true"]
292
+ .kui-workbench__panel-content,
293
+ .kui-workbench__drawer[data-collapse-motion="fade-slide"][data-collapsed="true"]
294
+ .kui-workbench__panel-content {
295
+ opacity: 0;
296
+ }
297
+
298
+ .kui-workbench__rail--left[data-collapsed="true"]
299
+ .kui-workbench__panel-content {
300
+ transform: translateX(-100%);
301
+ }
302
+
303
+ .kui-workbench__rail--right[data-collapsed="true"]
304
+ .kui-workbench__panel-content {
305
+ transform: translateX(100%);
306
+ }
307
+
308
+ .kui-workbench__drawer[data-collapsed="true"] .kui-workbench__panel-content {
309
+ transform: translateY(100%);
310
+ }
311
+
312
+ /* Opt-in resizable panels. The size lives in the resize wiring's track
313
+ property, which the wiring updates live during a drag, so the rail width or
314
+ drawer height follows it; collapsing leaves it alone, so the panel expands
315
+ back to the size it had. These rules precede the presentation rules below,
316
+ which must keep winning for overlay and hidden panels. */
317
+ .kui-workbench__rail[data-resizable="true"] {
318
+ --kui-workbench-rail-width: var(--kui-resizable-region-size);
319
+ position: relative;
320
+ }
321
+
322
+ .kui-workbench__drawer[data-resizable="true"] {
323
+ --kui-workbench-drawer-height: var(--kui-resizable-region-size);
324
+ }
325
+
326
+ /* The work area keeps a minimum width beside the rails (the Workbench's
327
+ `mainMinSize`) and a minimum height above the drawer (`mainMinHeight`),
328
+ never larger than the Workbench itself. Inline panels, fixed or resizable,
329
+ give way instead: when the container narrows the rails shrink in proportion
330
+ to their sizes, when it gets shorter the drawer shrinks, and their content
331
+ follows the shown size. The wiring stops a resize where the work area would
332
+ drop below the minimum. */
333
+ .kui-workbench[data-main-min-size] > .kui-workbench__center {
334
+ min-width: min(var(--_kui-workbench-main-min-width), 100%);
335
+ }
336
+
337
+ .kui-workbench[data-main-min-height]
338
+ > .kui-workbench__center
339
+ > .kui-workbench__main {
340
+ min-height: min(var(--_kui-workbench-main-min-height), 100%);
341
+ }
342
+
343
+ .kui-workbench__rail[data-presentation="inline"]:not([data-collapsed="true"]),
344
+ .kui-workbench__drawer[data-presentation="inline"]:not(
345
+ [data-collapsed="true"]
346
+ ) {
347
+ flex-shrink: 1;
348
+ }
349
+
350
+ /* Low specificity, so a responsive overlay (below) restores the fixed size. */
351
+ .kui-workbench__rail:where(
352
+ [data-presentation="inline"]:not([data-collapsed="true"])
353
+ )
354
+ > .kui-workbench__panel-content {
355
+ width: 100%;
356
+ }
357
+
358
+ .kui-workbench__drawer:where(
359
+ [data-presentation="inline"]:not([data-collapsed="true"])
360
+ )
361
+ > .kui-workbench__panel-content {
362
+ height: 100%;
363
+ }
364
+
365
+ /* The panel clips its sliding content, so a scrolling panel scrolls its
366
+ content box instead of itself: the separator handle is a child of the panel
367
+ and must not scroll away with the content. */
368
+ .kui-workbench__rail[data-resizable="true"][data-content-overflow="auto"],
369
+ .kui-workbench__drawer[data-resizable="true"][data-content-overflow="auto"] {
370
+ overflow: hidden;
371
+ }
372
+
373
+ .kui-workbench__rail[data-resizable="true"][data-content-overflow="auto"]
374
+ > .kui-workbench__panel-content,
375
+ .kui-workbench__drawer[data-resizable="true"][data-content-overflow="auto"]
376
+ > .kui-workbench__panel-content {
377
+ overflow: auto;
378
+ }
379
+
380
+ /* The separator handle: the 20px hit target and dormant grip a
381
+ ResizableRegion handle has. The panel's own border stays the visible
382
+ separator line. By default the target sits wholly inside the panel, at its
383
+ inner edge, because the panel clips its sliding content. */
384
+ .kui-workbench__handle {
385
+ position: absolute;
386
+ z-index: 3;
387
+ display: grid;
388
+ color: var(--kui-color-neutral-on-quiet);
389
+ place-items: center;
390
+ touch-action: none;
391
+ }
392
+
393
+ .kui-workbench__rail > .kui-workbench__handle {
394
+ inset-block: 0;
395
+ width: 20px;
396
+ cursor: col-resize;
397
+ }
398
+
399
+ .kui-workbench__rail--left > .kui-workbench__handle {
400
+ inset-inline-end: 0;
401
+ }
402
+
403
+ .kui-workbench__rail--right > .kui-workbench__handle {
404
+ inset-inline-start: 0;
405
+ }
406
+
407
+ .kui-workbench__drawer > .kui-workbench__handle {
408
+ inset-inline: 0;
409
+ inset-block-start: 0;
410
+ height: 20px;
411
+ cursor: row-resize;
412
+ }
413
+
414
+ .kui-workbench__rail[data-collapsed="true"] > .kui-workbench__handle,
415
+ .kui-workbench__drawer[data-collapsed="true"] > .kui-workbench__handle,
416
+ .kui-workbench__rail:not([data-presentation="inline"]) > .kui-workbench__handle,
417
+ .kui-workbench__drawer:not([data-presentation="inline"])
418
+ > .kui-workbench__handle {
419
+ display: none;
420
+ }
421
+
422
+ /* An expanded panel lets exactly the handle's outer half through its clip, so
423
+ the hit target straddles the separator like a ResizableRegion handle does
424
+ and the grip is drawn centered on the separator line. Collapsing drops the
425
+ extension again before the content slides out. Engines that can extend a
426
+ clip past the panel's edge do it with `overflow-clip-margin`; the rest
427
+ (WebKit) clip with a `clip-path` that reaches past the panel's edges. That
428
+ also makes the panel a stacking context, so the panel stacks at the
429
+ handle's own level to keep the handle's outer half above the work area
430
+ beside it. The clip and the stacking level sit at low specificity, so a
431
+ responsive overlay presentation (below) replaces both. */
432
+ @supports not (overflow-clip-margin: 10px) {
433
+ .kui-workbench__rail[data-resizable="true"][data-presentation="inline"]:not(
434
+ [data-collapsed="true"],
435
+ [data-content-overflow="visible"]
436
+ ),
437
+ .kui-workbench__drawer[data-resizable="true"][data-presentation="inline"]:not(
438
+ [data-collapsed="true"],
439
+ [data-content-overflow="visible"]
440
+ ) {
441
+ overflow: visible;
442
+ }
443
+
444
+ .kui-workbench__rail:where(
445
+ [data-resizable="true"][data-presentation="inline"]:not(
446
+ [data-collapsed="true"],
447
+ [data-content-overflow="visible"]
448
+ )
449
+ ) {
450
+ z-index: 3;
451
+ clip-path: inset(0 -10px);
452
+ }
453
+
454
+ .kui-workbench__drawer:where(
455
+ [data-resizable="true"][data-presentation="inline"]:not(
456
+ [data-collapsed="true"],
457
+ [data-content-overflow="visible"]
458
+ )
459
+ ) {
460
+ z-index: 3;
461
+ clip-path: inset(-10px 0 0);
462
+ }
463
+
464
+ .kui-workbench__rail--left[data-resizable="true"][data-presentation="inline"]
465
+ > .kui-workbench__handle {
466
+ inset-inline-end: -10px;
467
+ }
468
+
469
+ .kui-workbench__rail--right[data-resizable="true"][data-presentation="inline"]
470
+ > .kui-workbench__handle {
471
+ inset-inline-start: -10px;
472
+ }
473
+
474
+ .kui-workbench__drawer[data-resizable="true"][data-presentation="inline"]
475
+ > .kui-workbench__handle {
476
+ inset-block-start: -10px;
477
+ }
478
+ }
479
+
480
+ @supports (overflow-clip-margin: 10px) {
481
+ .kui-workbench__rail[data-resizable="true"]:not(
482
+ [data-collapsed="true"],
483
+ [data-content-overflow="visible"]
484
+ ),
485
+ .kui-workbench__drawer[data-resizable="true"]:not(
486
+ [data-collapsed="true"],
487
+ [data-content-overflow="visible"]
488
+ ) {
489
+ overflow: clip;
490
+ overflow-clip-margin: 10px;
491
+ }
492
+
493
+ .kui-workbench__rail--left[data-resizable="true"] > .kui-workbench__handle {
494
+ inset-inline-end: -10px;
495
+ }
496
+
497
+ .kui-workbench__rail--right[data-resizable="true"] > .kui-workbench__handle {
498
+ inset-inline-start: -10px;
499
+ }
500
+
501
+ .kui-workbench__drawer[data-resizable="true"] > .kui-workbench__handle {
502
+ inset-block-start: -10px;
503
+ }
504
+ }
505
+
506
+ .kui-workbench__handle:hover,
507
+ .kui-workbench__handle:focus-visible {
508
+ color: var(--kui-color-text-link);
509
+ }
510
+
511
+ /* The ring stays wholly inside the handle's box, as a ResizableRegion
512
+ handle's does. */
513
+ .kui-workbench__handle:focus-visible {
514
+ border-radius: var(--kui-radius-s);
515
+ outline: var(--kui-focus-ring);
516
+ outline-offset: -3px;
517
+ }
518
+
519
+ .kui-workbench__handle-icon {
520
+ position: relative;
521
+ display: grid;
522
+ width: 0.9rem;
523
+ height: 0.9rem;
524
+ opacity: 0;
525
+ pointer-events: none;
526
+ place-items: center;
527
+ }
528
+
529
+ .kui-workbench__handle-icon > svg {
530
+ width: 100%;
531
+ height: 100%;
532
+ }
533
+
534
+ .kui-workbench__handle:hover .kui-workbench__handle-icon,
535
+ .kui-workbench__handle:focus-visible .kui-workbench__handle-icon {
536
+ opacity: 1;
537
+ }
538
+
539
+ /* Overlay stacking order: both rails stack above the bottom drawer, one below
540
+ the overlay z-index, as inline rails span the Workbench's full height beside
541
+ the drawer's column; the right rail stacks above the left (document order).
542
+ Restore controls stack below every overlay (see .kui-workbench__restore). */
543
+ .kui-workbench__rail[data-presentation="overlay"],
544
+ .kui-workbench__drawer[data-presentation="overlay"] {
545
+ position: absolute;
546
+ z-index: var(--kui-workbench-overlay-z, 41);
547
+ box-shadow: var(--kui-shadow-l);
548
+ }
549
+
550
+ /* An out-of-flow rail sizes to its content plus its border, so it takes its
551
+ extent explicitly, as its in-flow flex basis does, border included. Each
552
+ overlay maximum caps only the panel's own axis: a rail spans the
553
+ Workbench's full height and a drawer its full width. */
554
+ .kui-workbench__rail[data-presentation="overlay"] {
555
+ width: var(--_kui-workbench-rail-extent);
556
+ max-width: var(--kui-workbench-overlay-max-width, 85vw);
557
+ inset-block: 0;
558
+ }
559
+
560
+ .kui-workbench__rail--left[data-presentation="overlay"] {
561
+ inset-inline-start: 0;
562
+ }
563
+
564
+ .kui-workbench__rail--right[data-presentation="overlay"] {
565
+ inset-inline-end: 0;
566
+ }
567
+
568
+ /* The drawer's content is absolutely positioned against its bottom edge, so
569
+ an out-of-flow drawer has no content height of its own: it takes its extent
570
+ explicitly, as the in-flow track does through its flex basis. */
571
+ .kui-workbench__drawer[data-presentation="overlay"] {
572
+ z-index: calc(var(--kui-workbench-overlay-z, 41) - 1);
573
+ height: var(--_kui-workbench-drawer-extent);
574
+ max-height: var(--kui-workbench-overlay-max-height, 85vh);
575
+ inset-inline: 0;
576
+ inset-block-end: 0;
577
+ }
578
+
579
+ /* Optional shared backdrop sits over work-area controls and restores, below
580
+ the overlay drawer and rails. It is last in document order so an equal-z
581
+ restore control cannot receive the outside press. */
582
+ .kui-workbench__backdrop {
583
+ position: absolute;
584
+ z-index: calc(var(--kui-workbench-overlay-z, 41) - 2);
585
+ display: none;
586
+ inset: 0;
587
+ background: var(--kui-color-scrim, rgb(0 0 0 / 32%));
588
+ }
589
+
590
+ .kui-workbench[data-overlay-backdrop="true"]:is(
591
+ [data-rail-overlay-expanded="true"],
592
+ [data-drawer-overlay-expanded="true"]
593
+ )
594
+ > .kui-workbench__backdrop {
595
+ display: block;
596
+ }
597
+
598
+ /* A collapsed overlay keeps its box for the slide-out, so it drops its surface
599
+ and shadow; the sliding content carries the surface instead. */
600
+ .kui-workbench__rail[data-presentation="overlay"][data-collapsed="true"],
601
+ .kui-workbench__drawer[data-presentation="overlay"][data-collapsed="true"] {
602
+ background: transparent;
603
+ box-shadow: none;
604
+ pointer-events: none;
605
+ }
606
+
607
+ /* Overlay content fills the rail inside its separator border, so it is
608
+ clamped with the rail and carries the surface through the slide-out. */
609
+ .kui-workbench__rail[data-presentation="overlay"]
610
+ > .kui-workbench__panel-content {
611
+ width: 100%;
612
+ background: var(--kui-color-surface);
613
+ }
614
+
615
+ /* The overlay content fills the drawer box below its separator border, so it
616
+ is clamped with the box and carries the surface through the slide-out. */
617
+ .kui-workbench__drawer[data-presentation="overlay"]
618
+ > .kui-workbench__panel-content {
619
+ height: 100%;
620
+ background: var(--kui-color-surface);
621
+ }
622
+
623
+ .kui-workbench__rail[data-presentation="hidden"],
624
+ .kui-workbench__drawer[data-presentation="hidden"] {
625
+ display: none;
626
+ }
627
+
628
+ /* Responsive overlay panels. A rail or the drawer with `responsiveOverlayAt`
629
+ presents as an overlay — out of flow, over the work area, without a
630
+ separator — below the Workbench's own container breakpoint (`narrow`: 704px
631
+ or less, `compact`: 448px or less, as `ResizableRegion`'s
632
+ `responsiveFillAt`), and inline above it. The Workbench becomes a named
633
+ inline-size container only when a panel opts in. The work area keeps its
634
+ safe-area inset under an overlay panel. */
635
+ .kui-workbench[data-responsive-overlay="true"] {
636
+ container: kui-workbench / inline-size;
637
+ }
638
+
639
+ /* A numeric pixel threshold is measured by wireWorkbench and marked on the
640
+ panel. Keep its overlay geometry and covered work area in step with that
641
+ single mark, including when the app changes the threshold at render time. */
642
+ .kui-workbench__rail[data-responsive-overlay-active="true"] {
643
+ position: absolute;
644
+ z-index: var(--kui-workbench-overlay-z, 41);
645
+ width: var(--_kui-workbench-rail-extent);
646
+ max-width: var(--kui-workbench-overlay-max-width, 85vw);
647
+ inset-block: 0;
648
+ box-shadow: var(--kui-shadow-l);
649
+ clip-path: none;
650
+ }
651
+
652
+ .kui-workbench__rail--left[data-responsive-overlay-active="true"] {
653
+ inset-inline-start: 0;
654
+ }
655
+
656
+ .kui-workbench__rail--right[data-responsive-overlay-active="true"] {
657
+ inset-inline-end: 0;
658
+ }
659
+
660
+ .kui-workbench__rail[data-responsive-overlay-active="true"][data-collapsed="true"],
661
+ .kui-workbench__drawer[data-responsive-overlay-active="true"][data-collapsed="true"] {
662
+ background: transparent;
663
+ box-shadow: none;
664
+ pointer-events: none;
665
+ }
666
+
667
+ .kui-workbench__rail[data-responsive-overlay-active="true"]
668
+ > .kui-workbench__panel-content {
669
+ width: 100%;
670
+ background: var(--kui-color-surface);
671
+ }
672
+
673
+ .kui-workbench__rail[data-responsive-overlay-active="true"]
674
+ > .kui-workbench__handle,
675
+ .kui-workbench__drawer[data-responsive-overlay-active="true"]
676
+ > .kui-workbench__handle {
677
+ display: none;
678
+ }
679
+
680
+ .kui-workbench[data-numeric-overlays~="left"] > .kui-workbench__center {
681
+ --kui-edge-inset-inline-start: var(--_kui-workbench-safe-inline-start);
682
+ }
683
+
684
+ .kui-workbench[data-numeric-overlays~="right"] > .kui-workbench__center {
685
+ --kui-edge-inset-inline-end: var(--_kui-workbench-safe-inline-end);
686
+ }
687
+
688
+ .kui-workbench__drawer[data-responsive-overlay-active="true"] {
689
+ position: absolute;
690
+ anchor-name: none;
691
+ z-index: calc(var(--kui-workbench-overlay-z, 41) - 1);
692
+ height: var(--_kui-workbench-drawer-extent);
693
+ max-height: var(--kui-workbench-overlay-max-height, 85vh);
694
+ inset-inline: 0;
695
+ inset-block-end: 0;
696
+ box-shadow: var(--kui-shadow-l);
697
+ clip-path: none;
698
+ }
699
+
700
+ .kui-workbench__drawer[data-responsive-overlay-active="true"]
701
+ > .kui-workbench__panel-content {
702
+ height: 100%;
703
+ background: var(--kui-color-surface);
704
+ }
705
+
706
+ .kui-workbench[data-numeric-overlays~="drawer"]
707
+ > .kui-workbench__center
708
+ > .kui-workbench__main {
709
+ --_kui-workbench-content-edge-block-end: var(--_kui-workbench-safe-block-end);
710
+ }
711
+
712
+ .kui-workbench[data-overlay-backdrop="true"][data-numeric-overlays~="open"]
713
+ > .kui-workbench__backdrop {
714
+ display: block;
715
+ }
716
+
717
+ @container kui-workbench (max-width: 44rem) {
718
+ .kui-workbench[data-overlay-backdrop="true"]:is(
719
+ [data-left-responsive-expanded="narrow"],
720
+ [data-right-responsive-expanded="narrow"],
721
+ [data-drawer-responsive-expanded="narrow"]
722
+ )
723
+ > .kui-workbench__backdrop {
724
+ display: block;
725
+ }
726
+
727
+ .kui-workbench__rail[data-responsive-overlay-at="narrow"] {
728
+ position: absolute;
729
+ z-index: var(--kui-workbench-overlay-z, 41);
730
+ width: var(--_kui-workbench-rail-extent);
731
+ max-width: var(--kui-workbench-overlay-max-width, 85vw);
732
+ inset-block: 0;
733
+ box-shadow: var(--kui-shadow-l);
734
+ clip-path: none;
735
+ }
736
+
737
+ .kui-workbench__rail--left[data-responsive-overlay-at="narrow"] {
738
+ inset-inline-start: 0;
739
+ }
740
+
741
+ .kui-workbench__rail--right[data-responsive-overlay-at="narrow"] {
742
+ inset-inline-end: 0;
743
+ }
744
+
745
+ .kui-workbench__rail[data-responsive-overlay-at="narrow"][data-collapsed="true"] {
746
+ background: transparent;
747
+ box-shadow: none;
748
+ pointer-events: none;
749
+ }
750
+
751
+ .kui-workbench__rail[data-responsive-overlay-at="narrow"]
752
+ > .kui-workbench__panel-content {
753
+ width: 100%;
754
+ background: var(--kui-color-surface);
755
+ }
756
+
757
+ .kui-workbench__rail[data-responsive-overlay-at="narrow"]
758
+ > .kui-workbench__handle {
759
+ display: none;
760
+ }
761
+
762
+ .kui-workbench[data-left-responsive-inline="narrow"]
763
+ > .kui-workbench__center {
764
+ --kui-edge-inset-inline-start: var(--_kui-workbench-safe-inline-start);
765
+ }
766
+
767
+ .kui-workbench[data-right-responsive-inline="narrow"]
768
+ > .kui-workbench__center {
769
+ --kui-edge-inset-inline-end: var(--_kui-workbench-safe-inline-end);
770
+ }
771
+
772
+ .kui-workbench__drawer[data-responsive-overlay-at="narrow"] {
773
+ position: absolute;
774
+ anchor-name: none;
775
+ z-index: calc(var(--kui-workbench-overlay-z, 41) - 1);
776
+ height: var(--_kui-workbench-drawer-extent);
777
+ max-height: var(--kui-workbench-overlay-max-height, 85vh);
778
+ inset-inline: 0;
779
+ inset-block-end: 0;
780
+ box-shadow: var(--kui-shadow-l);
781
+ clip-path: none;
782
+ }
783
+
784
+ .kui-workbench__drawer[data-responsive-overlay-at="narrow"][data-collapsed="true"] {
785
+ background: transparent;
786
+ box-shadow: none;
787
+ pointer-events: none;
788
+ }
789
+
790
+ .kui-workbench__drawer[data-responsive-overlay-at="narrow"]
791
+ > .kui-workbench__panel-content {
792
+ height: 100%;
793
+ background: var(--kui-color-surface);
794
+ }
795
+
796
+ .kui-workbench__drawer[data-responsive-overlay-at="narrow"]
797
+ > .kui-workbench__handle {
798
+ display: none;
799
+ }
800
+
801
+ .kui-workbench__main[data-drawer-responsive-inline="narrow"] {
802
+ --_kui-workbench-content-edge-block-end: var(
803
+ --_kui-workbench-safe-block-end
804
+ );
805
+ }
806
+ }
807
+
808
+ @container kui-workbench (max-width: 28rem) {
809
+ .kui-workbench[data-overlay-backdrop="true"]:is(
810
+ [data-left-responsive-expanded="compact"],
811
+ [data-right-responsive-expanded="compact"],
812
+ [data-drawer-responsive-expanded="compact"]
813
+ )
814
+ > .kui-workbench__backdrop {
815
+ display: block;
816
+ }
817
+
818
+ .kui-workbench__rail[data-responsive-overlay-at="compact"] {
819
+ position: absolute;
820
+ z-index: var(--kui-workbench-overlay-z, 41);
821
+ width: var(--_kui-workbench-rail-extent);
822
+ max-width: var(--kui-workbench-overlay-max-width, 85vw);
823
+ inset-block: 0;
824
+ box-shadow: var(--kui-shadow-l);
825
+ clip-path: none;
826
+ }
827
+
828
+ .kui-workbench__rail--left[data-responsive-overlay-at="compact"] {
829
+ inset-inline-start: 0;
830
+ }
831
+
832
+ .kui-workbench__rail--right[data-responsive-overlay-at="compact"] {
833
+ inset-inline-end: 0;
834
+ }
835
+
836
+ .kui-workbench__rail[data-responsive-overlay-at="compact"][data-collapsed="true"] {
837
+ background: transparent;
838
+ box-shadow: none;
839
+ pointer-events: none;
840
+ }
841
+
842
+ .kui-workbench__rail[data-responsive-overlay-at="compact"]
843
+ > .kui-workbench__panel-content {
844
+ width: 100%;
845
+ background: var(--kui-color-surface);
846
+ }
847
+
848
+ .kui-workbench__rail[data-responsive-overlay-at="compact"]
849
+ > .kui-workbench__handle {
850
+ display: none;
851
+ }
852
+
853
+ .kui-workbench[data-left-responsive-inline="compact"]
854
+ > .kui-workbench__center {
855
+ --kui-edge-inset-inline-start: var(--_kui-workbench-safe-inline-start);
856
+ }
857
+
858
+ .kui-workbench[data-right-responsive-inline="compact"]
859
+ > .kui-workbench__center {
860
+ --kui-edge-inset-inline-end: var(--_kui-workbench-safe-inline-end);
861
+ }
862
+
863
+ .kui-workbench__drawer[data-responsive-overlay-at="compact"] {
864
+ position: absolute;
865
+ anchor-name: none;
866
+ z-index: calc(var(--kui-workbench-overlay-z, 41) - 1);
867
+ height: var(--_kui-workbench-drawer-extent);
868
+ max-height: var(--kui-workbench-overlay-max-height, 85vh);
869
+ inset-inline: 0;
870
+ inset-block-end: 0;
871
+ box-shadow: var(--kui-shadow-l);
872
+ clip-path: none;
873
+ }
874
+
875
+ .kui-workbench__drawer[data-responsive-overlay-at="compact"][data-collapsed="true"] {
876
+ background: transparent;
877
+ box-shadow: none;
878
+ pointer-events: none;
879
+ }
880
+
881
+ .kui-workbench__drawer[data-responsive-overlay-at="compact"]
882
+ > .kui-workbench__panel-content {
883
+ height: 100%;
884
+ background: var(--kui-color-surface);
885
+ }
886
+
887
+ .kui-workbench__drawer[data-responsive-overlay-at="compact"]
888
+ > .kui-workbench__handle {
889
+ display: none;
890
+ }
891
+
892
+ .kui-workbench__main[data-drawer-responsive-inline="compact"] {
893
+ --_kui-workbench-content-edge-block-end: var(
894
+ --_kui-workbench-safe-block-end
895
+ );
896
+ }
897
+ }
898
+
899
+ /* Release the panel and its sliding/scrolling content while a PopupMenu or
900
+ Web Awesome dropdown is open. This comes after resize clipping and keeps
901
+ the popup in place through wa-show/wa-after-hide without a prop change. */
902
+ .kui-workbench__rail:not([data-collapsed="true"]):has(wa-dropdown[open]),
903
+ .kui-workbench__drawer:not([data-collapsed="true"]):has(wa-dropdown[open]) {
904
+ overflow: visible;
905
+ clip-path: none;
906
+ }
907
+ .kui-workbench__rail:not([data-collapsed="true"]):has(wa-dropdown[open])
908
+ > .kui-workbench__panel-content,
909
+ .kui-workbench__drawer:not([data-collapsed="true"]):has(wa-dropdown[open])
910
+ > .kui-workbench__panel-content {
911
+ overflow: visible;
912
+ }
913
+
914
+ /* A collapsed panel's restore control floats in a corner of the Workbench
915
+ itself, never of the viewport, so an embedded Workbench cannot float it over
916
+ page chrome outside it. It is inset from the corner plus the unsafe area of
917
+ each edge that corner reaches. The drawer's control sits in the work-area
918
+ column it restores (the center is its containing block), inset from the
919
+ edges that column still reaches, so it never lands on an expanded rail.
920
+ It belongs to the layer beneath the overlays, two below the overlay
921
+ z-index: an open overlay covers it as it covers the rest of the work area,
922
+ so no other panel's control floats over the overlay's content. A collapsed
923
+ overlay drops its pointer events, so the control stays usable beneath it. */
924
+ .kui-workbench__restore {
925
+ --_kui-workbench-restore-inset: var(
926
+ --kui-workbench-restore-inset,
927
+ 1rem
928
+ );
929
+ position: absolute;
930
+ /* Hidden while an open rail overlay covers the work area (see below). */
931
+ visibility: var(
932
+ --_kui-workbench-covered,
933
+ var(
934
+ --_kui-collapsible-panel-covered,
935
+ var(--_kui-resizable-region-covered, inherit)
936
+ )
937
+ );
938
+ z-index: var(
939
+ --kui-workbench-restore-z,
940
+ calc(var(--kui-workbench-overlay-z, 41) - 2)
941
+ );
942
+ inset-block-end: calc(
943
+ var(--_kui-workbench-restore-inset) + var(--_kui-workbench-safe-block-end)
944
+ );
945
+ }
946
+
947
+ .kui-workbench__restore[data-position="bottom-start"] {
948
+ inset-inline-start: calc(
949
+ var(--_kui-workbench-restore-inset) +
950
+ var(--_kui-workbench-safe-inline-start)
951
+ );
952
+ }
953
+
954
+ .kui-workbench__restore[data-position="bottom-end"] {
955
+ inset-inline-end: calc(
956
+ var(--_kui-workbench-restore-inset) + var(--_kui-workbench-safe-inline-end)
957
+ );
958
+ }
959
+
960
+ /* An expanded inline bottom drawer owns the bottom of the work-area column,
961
+ which reaches the Workbench's bottom corners once a rail collapses, so a
962
+ collapsed rail's control floats the restore inset above the drawer's top
963
+ edge instead of over it — the standalone CollapsiblePanel rule, scoped to
964
+ this Workbench so a nested Workbench or an enclosing layout never sees its
965
+ drawer. The drawer publishes that edge only while it is expanded and in
966
+ flow: an overlay drawer, static or responsive (see the container queries
967
+ above), covers the control as every open overlay does. Without anchor
968
+ positioning the control keeps the Workbench corner. */
969
+ .kui-workbench {
970
+ anchor-scope: --kui-restore-drawer;
971
+ }
972
+
973
+ .kui-workbench__drawer:where(
974
+ [data-presentation="inline"]:not([data-collapsed="true"])
975
+ ) {
976
+ anchor-name: --kui-restore-drawer;
977
+ }
978
+
979
+ .kui-workbench > .kui-workbench__restore {
980
+ position-visibility: always;
981
+ inset-block-end: calc(
982
+ var(--_kui-workbench-restore-inset) +
983
+ anchor(--kui-restore-drawer top, var(--_kui-workbench-safe-block-end))
984
+ );
985
+ }
986
+
987
+ .kui-workbench__center > .kui-workbench__restore {
988
+ inset-block-end: calc(
989
+ var(--_kui-workbench-restore-inset) + var(--kui-edge-inset-block-end)
990
+ );
991
+ }
992
+
993
+ .kui-workbench__center > .kui-workbench__restore[data-position="bottom-start"] {
994
+ inset-inline-start: calc(
995
+ var(--_kui-workbench-restore-inset) + var(--kui-edge-inset-inline-start)
996
+ );
997
+ }
998
+
999
+ .kui-workbench__center > .kui-workbench__restore[data-position="bottom-end"] {
1000
+ inset-inline-end: calc(
1001
+ var(--_kui-workbench-restore-inset) + var(--kui-edge-inset-inline-end)
1002
+ );
1003
+ }
1004
+
1005
+ /* An open rail overlay — static or a responsive one whose breakpoint applies —
1006
+ covers the work area, so the work area's floating controls (a
1007
+ FloatingToolbar in main, the drawer's restore corner, the other rail's
1008
+ restore corner) are hidden, not merely stacked beneath it: they never paint
1009
+ over the overlay whatever stacking context an app puts them in, and hidden
1010
+ they leave the tab order and the accessibility tree. They come back as the
1011
+ overlay closes. The Workbench's own covered context,
1012
+ `--_kui-workbench-covered`, is set on the rail's siblings only (never on
1013
+ the open rail), so the overlay's own floating controls stay; FloatingToolbar
1014
+ and the layouts' restore corners read it. A direct child
1015
+ resolves the Workbench's own container query, never a nested one's. */
1016
+ .kui-workbench[data-rail-overlay-expanded="true"]
1017
+ > :is(.kui-workbench__center, .kui-workbench__restore) {
1018
+ --_kui-workbench-covered: hidden;
1019
+ }
1020
+
1021
+ .kui-workbench[data-numeric-overlays~="rail-open"]
1022
+ > :is(.kui-workbench__center, .kui-workbench__restore) {
1023
+ --_kui-workbench-covered: hidden;
1024
+ }
1025
+
1026
+ @container kui-workbench (max-width: 44rem) {
1027
+ .kui-workbench:is(
1028
+ [data-left-responsive-expanded="narrow"],
1029
+ [data-right-responsive-expanded="narrow"]
1030
+ )
1031
+ > :is(.kui-workbench__center, .kui-workbench__restore) {
1032
+ --_kui-workbench-covered: hidden;
1033
+ }
1034
+ }
1035
+
1036
+ @container kui-workbench (max-width: 28rem) {
1037
+ .kui-workbench:is(
1038
+ [data-left-responsive-expanded="compact"],
1039
+ [data-right-responsive-expanded="compact"]
1040
+ )
1041
+ > :is(.kui-workbench__center, .kui-workbench__restore) {
1042
+ --_kui-workbench-covered: hidden;
1043
+ }
1044
+ }
1045
+
1046
+ @media (prefers-reduced-motion: reduce) {
1047
+ .kui-workbench__panel-content {
1048
+ transition: none;
1049
+ }
1050
+ }
1051
+
1052
+ /* On a compact (phone-sized) Workbench an overlay rail fills the Workbench
1053
+ less a dismiss margin on the side away from its edge, so a press beside it
1054
+ closes it (the wiring's outside press); `compactOverlay: "full"` fills the
1055
+ Workbench. The rail's resize and configured size stop applying there. */
1056
+ @container kui-workbench (max-width: 28rem) {
1057
+ .kui-workbench__rail:is(
1058
+ [data-responsive-overlay-at="narrow"],
1059
+ [data-responsive-overlay-at="compact"],
1060
+ [data-responsive-overlay-active="true"]
1061
+ ) {
1062
+ width: calc(
1063
+ 100% - var(--kui-workbench-overlay-dismiss-margin, 2.75rem)
1064
+ );
1065
+ max-width: none;
1066
+ }
1067
+
1068
+ .kui-workbench__rail:is(
1069
+ [data-responsive-overlay-at="narrow"],
1070
+ [data-responsive-overlay-at="compact"],
1071
+ [data-responsive-overlay-active="true"]
1072
+ )[data-compact-overlay="full"] {
1073
+ width: 100%;
1074
+ }
1075
+ }