@kerfjs/ui 5.0.0-beta.10 → 5.0.0-beta.100

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 (997) hide show
  1. package/README.md +630 -132
  2. package/ai/application-ui-diagnostic-ids-v1.json +114 -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 +34 -0
  10. package/ai/catalog-authoring.schema.json +105 -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 +6401 -931
  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 +551 -0
  20. package/ai/component-composition.d.ts +132 -0
  21. package/ai/component-composition.json +8729 -0
  22. package/ai/component-composition.schema.json +412 -0
  23. package/ai/components/README.md +185 -0
  24. package/ai/components/anchored-surface.md +99 -0
  25. package/ai/components/application-tabs.md +65 -0
  26. package/ai/components/badge.md +76 -0
  27. package/ai/components/chip.md +76 -0
  28. package/ai/components/choice-chips.md +87 -0
  29. package/ai/components/collapsible-panel.md +103 -0
  30. package/ai/components/column-track.md +78 -0
  31. package/ai/components/combobox.md +88 -0
  32. package/ai/components/composer.md +83 -0
  33. package/ai/components/content-item.md +98 -0
  34. package/ai/components/content-swap.md +78 -0
  35. package/ai/components/corner-status.md +88 -0
  36. package/ai/components/disclosure-arrow.md +77 -0
  37. package/ai/components/document-baseline.md +77 -0
  38. package/ai/components/edge-activity-indicator.md +81 -0
  39. package/ai/components/empty-state.md +80 -0
  40. package/ai/components/feedback.md +71 -0
  41. package/ai/components/file-picker.md +88 -0
  42. package/ai/components/floating-toolbar.md +82 -0
  43. package/ai/components/foundation.md +65 -0
  44. package/ai/components/framed-list.md +80 -0
  45. package/ai/components/grid.md +101 -0
  46. package/ai/components/headers.md +63 -0
  47. package/ai/components/icon-button.md +82 -0
  48. package/ai/components/icon-toggle-button.md +80 -0
  49. package/ai/components/layout.md +75 -0
  50. package/ai/components/list-action-row.md +108 -0
  51. package/ai/components/list-header.md +91 -0
  52. package/ai/components/list-inset-control.md +74 -0
  53. package/ai/components/list-inset-text.md +72 -0
  54. package/ai/components/list-item.md +108 -0
  55. package/ai/components/list.md +125 -0
  56. package/ai/components/loading-spinner.md +73 -0
  57. package/ai/components/lucide-icon.md +97 -0
  58. package/ai/components/nav-stack.md +115 -0
  59. package/ai/components/pane.md +115 -0
  60. package/ai/components/popup-menu.md +171 -0
  61. package/ai/components/recipe-app-shell.md +57 -0
  62. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  63. package/ai/components/recipe-compact-toolbar.md +57 -0
  64. package/ai/components/recipe-composer-form.md +57 -0
  65. package/ai/components/recipe-list-detail-dialog.md +57 -0
  66. package/ai/components/recipe-list-workspace-states.md +57 -0
  67. package/ai/components/recipe-loading-inspector.md +57 -0
  68. package/ai/components/recipe-navigation-sidebar.md +57 -0
  69. package/ai/components/recipe-navigation-stack.md +57 -0
  70. package/ai/components/recipe-workspace-header.md +57 -0
  71. package/ai/components/resize.md +106 -0
  72. package/ai/components/row.md +96 -0
  73. package/ai/components/segmented-control.md +82 -0
  74. package/ai/components/select.md +116 -0
  75. package/ai/components/skeleton.md +84 -0
  76. package/ai/components/spacer.md +86 -0
  77. package/ai/components/split-button.md +80 -0
  78. package/ai/components/split-view.md +105 -0
  79. package/ai/components/state-banner.md +96 -0
  80. package/ai/components/summary-row.md +85 -0
  81. package/ai/components/sunken-panel.md +79 -0
  82. package/ai/components/surface-scaffold.md +105 -0
  83. package/ai/components/tab-bar.md +114 -0
  84. package/ai/components/tab-navigator.md +100 -0
  85. package/ai/components/tabs.md +95 -0
  86. package/ai/components/text.md +90 -0
  87. package/ai/components/token-search-field.md +107 -0
  88. package/ai/components/toolbar-control-group.md +125 -0
  89. package/ai/components/toolbar-text.md +100 -0
  90. package/ai/components/toolbar.md +103 -0
  91. package/ai/components/value-table.md +80 -0
  92. package/ai/components/wa-accordion-item.md +55 -0
  93. package/ai/components/wa-accordion.md +65 -0
  94. package/ai/components/wa-animated-image.md +55 -0
  95. package/ai/components/wa-animation.md +55 -0
  96. package/ai/components/wa-avatar.md +55 -0
  97. package/ai/components/wa-badge.md +55 -0
  98. package/ai/components/wa-breadcrumb-item.md +53 -0
  99. package/ai/components/wa-breadcrumb.md +55 -0
  100. package/ai/components/wa-button-group.md +60 -0
  101. package/ai/components/wa-button.md +59 -0
  102. package/ai/components/wa-callout.md +58 -0
  103. package/ai/components/wa-card.md +59 -0
  104. package/ai/components/wa-carousel-item.md +53 -0
  105. package/ai/components/wa-carousel.md +55 -0
  106. package/ai/components/wa-checkbox-group.md +55 -0
  107. package/ai/components/wa-checkbox.md +55 -0
  108. package/ai/components/wa-color-picker.md +55 -0
  109. package/ai/components/wa-comparison.md +55 -0
  110. package/ai/components/wa-copy-button.md +55 -0
  111. package/ai/components/wa-details.md +61 -0
  112. package/ai/components/wa-dialog.md +59 -0
  113. package/ai/components/wa-divider.md +53 -0
  114. package/ai/components/wa-drawer.md +55 -0
  115. package/ai/components/wa-dropdown-item.md +60 -0
  116. package/ai/components/wa-dropdown.md +60 -0
  117. package/ai/components/wa-format-bytes.md +53 -0
  118. package/ai/components/wa-format-date.md +53 -0
  119. package/ai/components/wa-format-number.md +53 -0
  120. package/ai/components/wa-icon.md +58 -0
  121. package/ai/components/wa-include.md +53 -0
  122. package/ai/components/wa-input.md +59 -0
  123. package/ai/components/wa-intersection-observer.md +53 -0
  124. package/ai/components/wa-known-date.md +53 -0
  125. package/ai/components/wa-markdown.md +53 -0
  126. package/ai/components/wa-mutation-observer.md +53 -0
  127. package/ai/components/wa-number-input.md +55 -0
  128. package/ai/components/wa-option.md +59 -0
  129. package/ai/components/wa-otp-input.md +53 -0
  130. package/ai/components/wa-page.md +53 -0
  131. package/ai/components/wa-pagination.md +55 -0
  132. package/ai/components/wa-popover.md +55 -0
  133. package/ai/components/wa-popup.md +53 -0
  134. package/ai/components/wa-progress-bar.md +53 -0
  135. package/ai/components/wa-progress-ring.md +53 -0
  136. package/ai/components/wa-qr-code.md +53 -0
  137. package/ai/components/wa-radio-group.md +59 -0
  138. package/ai/components/wa-radio.md +55 -0
  139. package/ai/components/wa-random-content.md +53 -0
  140. package/ai/components/wa-rating.md +55 -0
  141. package/ai/components/wa-relative-time.md +53 -0
  142. package/ai/components/wa-resize-observer.md +53 -0
  143. package/ai/components/wa-scroller.md +53 -0
  144. package/ai/components/wa-select.md +63 -0
  145. package/ai/components/wa-skeleton.md +53 -0
  146. package/ai/components/wa-slider.md +55 -0
  147. package/ai/components/wa-spinner.md +58 -0
  148. package/ai/components/wa-split-panel.md +58 -0
  149. package/ai/components/wa-switch.md +53 -0
  150. package/ai/components/wa-tab-group.md +69 -0
  151. package/ai/components/wa-tab-panel.md +60 -0
  152. package/ai/components/wa-tab.md +59 -0
  153. package/ai/components/wa-tag.md +59 -0
  154. package/ai/components/wa-textarea.md +53 -0
  155. package/ai/components/wa-time-input.md +55 -0
  156. package/ai/components/wa-toast-item.md +60 -0
  157. package/ai/components/wa-toast.md +60 -0
  158. package/ai/components/wa-tooltip.md +55 -0
  159. package/ai/components/wa-tree-item.md +55 -0
  160. package/ai/components/wa-tree.md +55 -0
  161. package/ai/components/wa-zoomable-frame.md +55 -0
  162. package/ai/components/workbench.md +120 -0
  163. package/ai/public-api-signatures-v1.md +4261 -459
  164. package/ai/skill.md +441 -63
  165. package/ai/webawesome-jsx-signatures-v1.md +9 -2
  166. package/analyzer/cli.mjs +49 -0
  167. package/analyzer/component-ownership.d.mts +72 -0
  168. package/analyzer/component-ownership.mjs +429 -0
  169. package/analyzer/index.d.mts +53 -0
  170. package/analyzer/index.mjs +2375 -0
  171. package/analyzer/loud-pairs.d.mts +49 -0
  172. package/analyzer/loud-pairs.mjs +357 -0
  173. package/analyzer/report.schema.json +66 -0
  174. package/analyzer/selectors.d.mts +21 -0
  175. package/analyzer/selectors.mjs +212 -0
  176. package/catalog-projection-cli.mjs +96 -0
  177. package/catalog-projection.d.mts +55 -0
  178. package/catalog-projection.mjs +62 -0
  179. package/dist/anchored-surface.d.ts +69 -0
  180. package/dist/anchored-surface.js +3 -0
  181. package/dist/anchored-surface.js.map +1 -0
  182. package/dist/app-tab.d.ts +39 -4
  183. package/dist/app-tab.js +2 -1
  184. package/dist/badge.d.ts +83 -0
  185. package/dist/badge.js +4 -0
  186. package/dist/badge.js.map +1 -0
  187. package/dist/browser/anchored-surface.js +3 -0
  188. package/dist/browser/badge.js +3 -0
  189. package/dist/browser/catalog.js +28 -0
  190. package/dist/browser/chip.js +3 -0
  191. package/dist/browser/choice-chips.js +3 -0
  192. package/dist/browser/collapsible-panel.js +9 -0
  193. package/dist/browser/column-track.js +3 -0
  194. package/dist/browser/combobox.js +3 -0
  195. package/dist/browser/composer.js +4 -0
  196. package/dist/browser/content-item.js +3 -0
  197. package/dist/browser/content-swap.js +3 -0
  198. package/dist/browser/corner-status.js +3 -0
  199. package/dist/browser/edge-activity-indicator.js +3 -0
  200. package/dist/browser/file-picker.js +3 -0
  201. package/dist/browser/floating-toolbar.js +3 -0
  202. package/dist/browser/framed-list.js +3 -0
  203. package/dist/browser/grid.js +3 -0
  204. package/dist/browser/icon-button.js +4 -0
  205. package/dist/browser/icon-toggle-button.js +4 -0
  206. package/dist/browser/list-action-row.js +2 -0
  207. package/dist/browser/list-header.js +3 -1
  208. package/dist/browser/list-inset-control.js +3 -0
  209. package/dist/browser/list-inset-text.js +3 -0
  210. package/dist/browser/list-item.js +1 -0
  211. package/dist/browser/list.js +3 -0
  212. package/dist/browser/nav-stack.js +11 -0
  213. package/dist/browser/pane.js +3 -0
  214. package/dist/browser/popup-menu.js +3 -0
  215. package/dist/browser/row.js +3 -0
  216. package/dist/browser/segmented-control.js +0 -1
  217. package/dist/browser/select.js +2 -1
  218. package/dist/browser/spacer.js +3 -0
  219. package/dist/browser/split-button.js +5 -0
  220. package/dist/browser/split-view.js +13 -0
  221. package/dist/browser/state-banner.js +1 -0
  222. package/dist/browser/summary-row.js +3 -0
  223. package/dist/browser/sunken-panel.js +3 -0
  224. package/dist/browser/surface-scaffold.js +3 -0
  225. package/dist/browser/tab-navigator.js +4 -0
  226. package/dist/browser/text.js +3 -0
  227. package/dist/browser/toolbar-control-group.js +1 -0
  228. package/dist/browser/workbench.js +14 -0
  229. package/dist/catalog-resources.d.ts +50 -0
  230. package/dist/catalog-resources.js +22 -0
  231. package/dist/catalog-resources.js.map +1 -0
  232. package/dist/catalog.d.ts +134 -101
  233. package/dist/catalog.js +668 -105
  234. package/dist/catalog.js.map +1 -1
  235. package/dist/chip.d.ts +69 -0
  236. package/dist/chip.js +3 -0
  237. package/dist/chip.js.map +1 -0
  238. package/dist/choice-chips.d.ts +82 -0
  239. package/dist/choice-chips.js +3 -0
  240. package/dist/choice-chips.js.map +1 -0
  241. package/dist/chunk-2GOCOLQL.js +270 -0
  242. package/dist/chunk-2GOCOLQL.js.map +1 -0
  243. package/dist/chunk-2MSPNRWJ.js +82 -0
  244. package/dist/chunk-2MSPNRWJ.js.map +1 -0
  245. package/dist/chunk-34U4ANDJ.js +119 -0
  246. package/dist/chunk-34U4ANDJ.js.map +1 -0
  247. package/dist/chunk-3GLYIIFR.js +230 -0
  248. package/dist/chunk-3GLYIIFR.js.map +1 -0
  249. package/dist/{chunk-56RJXPHG.js → chunk-3VXDSIBJ.js} +7 -4
  250. package/dist/chunk-3VXDSIBJ.js.map +1 -0
  251. package/dist/chunk-3WYREXW4.js +120 -0
  252. package/dist/chunk-3WYREXW4.js.map +1 -0
  253. package/dist/chunk-4UB5Z3ZZ.js +68 -0
  254. package/dist/chunk-4UB5Z3ZZ.js.map +1 -0
  255. package/dist/chunk-6C6DLP3W.js +31 -0
  256. package/dist/chunk-6C6DLP3W.js.map +1 -0
  257. package/dist/chunk-7IUEBNCO.js +108 -0
  258. package/dist/chunk-7IUEBNCO.js.map +1 -0
  259. package/dist/chunk-AN5IWMTM.js +24 -0
  260. package/dist/chunk-AN5IWMTM.js.map +1 -0
  261. package/dist/chunk-AV7CPAPT.js +82 -0
  262. package/dist/chunk-AV7CPAPT.js.map +1 -0
  263. package/dist/chunk-B53PS2LE.js +34 -0
  264. package/dist/chunk-B53PS2LE.js.map +1 -0
  265. package/dist/chunk-CA7LNX3J.js +44 -0
  266. package/dist/chunk-CA7LNX3J.js.map +1 -0
  267. package/dist/chunk-CEJ5FK6G.js +288 -0
  268. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  269. package/dist/chunk-CMETHPKR.js +175 -0
  270. package/dist/chunk-CMETHPKR.js.map +1 -0
  271. package/dist/chunk-CMLPFIC5.js +46 -0
  272. package/dist/chunk-CMLPFIC5.js.map +1 -0
  273. package/dist/chunk-CVD5IZGB.js +66 -0
  274. package/dist/chunk-CVD5IZGB.js.map +1 -0
  275. package/dist/chunk-CXZXHZTR.js +514 -0
  276. package/dist/chunk-CXZXHZTR.js.map +1 -0
  277. package/dist/chunk-D5RGM3XA.js +38 -0
  278. package/dist/chunk-D5RGM3XA.js.map +1 -0
  279. package/dist/chunk-DZJ4GBSP.js +59 -0
  280. package/dist/chunk-DZJ4GBSP.js.map +1 -0
  281. package/dist/chunk-EIET4QLK.js +51 -0
  282. package/dist/chunk-EIET4QLK.js.map +1 -0
  283. package/dist/chunk-ELCMSQNJ.js +49 -0
  284. package/dist/chunk-ELCMSQNJ.js.map +1 -0
  285. package/dist/chunk-EOO6PYGF.js +162 -0
  286. package/dist/chunk-EOO6PYGF.js.map +1 -0
  287. package/dist/chunk-ETCWQLJV.js +85 -0
  288. package/dist/chunk-ETCWQLJV.js.map +1 -0
  289. package/dist/chunk-FDZNYD4C.js +138 -0
  290. package/dist/chunk-FDZNYD4C.js.map +1 -0
  291. package/dist/chunk-FR76ZJQC.js +90 -0
  292. package/dist/chunk-FR76ZJQC.js.map +1 -0
  293. package/dist/chunk-G3J7JDP6.js +29 -0
  294. package/dist/chunk-G3J7JDP6.js.map +1 -0
  295. package/dist/chunk-GS2QD3N7.js +14 -0
  296. package/dist/chunk-GS2QD3N7.js.map +1 -0
  297. package/dist/chunk-HGV7J4T6.js +86 -0
  298. package/dist/chunk-HGV7J4T6.js.map +1 -0
  299. package/dist/chunk-HLDRH23D.js +84 -0
  300. package/dist/chunk-HLDRH23D.js.map +1 -0
  301. package/dist/chunk-HQZYKJ56.js +302 -0
  302. package/dist/chunk-HQZYKJ56.js.map +1 -0
  303. package/dist/chunk-HZPHCSCS.js +95 -0
  304. package/dist/chunk-HZPHCSCS.js.map +1 -0
  305. package/dist/chunk-IKS72C6P.js +53 -0
  306. package/dist/chunk-IKS72C6P.js.map +1 -0
  307. package/dist/chunk-IM3GKYOG.js +202 -0
  308. package/dist/chunk-IM3GKYOG.js.map +1 -0
  309. package/dist/chunk-INI4WDWC.js +125 -0
  310. package/dist/chunk-INI4WDWC.js.map +1 -0
  311. package/dist/chunk-IQSRHXZR.js +164 -0
  312. package/dist/chunk-IQSRHXZR.js.map +1 -0
  313. package/dist/chunk-JOR5LGYE.js +55 -0
  314. package/dist/chunk-JOR5LGYE.js.map +1 -0
  315. package/dist/chunk-K4AT3V3J.js +545 -0
  316. package/dist/chunk-K4AT3V3J.js.map +1 -0
  317. package/dist/chunk-KCS6NJ3O.js +82 -0
  318. package/dist/chunk-KCS6NJ3O.js.map +1 -0
  319. package/dist/chunk-KH4KEMSP.js +71 -0
  320. package/dist/chunk-KH4KEMSP.js.map +1 -0
  321. package/dist/chunk-LL45C7BB.js +122 -0
  322. package/dist/chunk-LL45C7BB.js.map +1 -0
  323. package/dist/chunk-LOSRXZAH.js +100 -0
  324. package/dist/chunk-LOSRXZAH.js.map +1 -0
  325. package/dist/chunk-MF6ZUUJZ.js +300 -0
  326. package/dist/chunk-MF6ZUUJZ.js.map +1 -0
  327. package/dist/chunk-MHMWQ7RB.js +19 -0
  328. package/dist/chunk-MHMWQ7RB.js.map +1 -0
  329. package/dist/chunk-MJ5RU6XT.js +173 -0
  330. package/dist/chunk-MJ5RU6XT.js.map +1 -0
  331. package/dist/chunk-MXNIVEVL.js +48 -0
  332. package/dist/chunk-MXNIVEVL.js.map +1 -0
  333. package/dist/{chunk-YGN7OMLT.js → chunk-NS2TBYM4.js} +8 -5
  334. package/dist/chunk-NS2TBYM4.js.map +1 -0
  335. package/dist/chunk-PIVY32AE.js +140 -0
  336. package/dist/chunk-PIVY32AE.js.map +1 -0
  337. package/dist/chunk-PYBBYSZ3.js +526 -0
  338. package/dist/chunk-PYBBYSZ3.js.map +1 -0
  339. package/dist/chunk-QDSZTQXL.js +28 -0
  340. package/dist/chunk-QDSZTQXL.js.map +1 -0
  341. package/dist/chunk-QH5KOFNS.js +39 -0
  342. package/dist/chunk-QH5KOFNS.js.map +1 -0
  343. package/dist/chunk-QIG4IGUP.js +139 -0
  344. package/dist/chunk-QIG4IGUP.js.map +1 -0
  345. package/dist/chunk-QLA25V2K.js +493 -0
  346. package/dist/chunk-QLA25V2K.js.map +1 -0
  347. package/dist/chunk-QROYYGWU.js +52 -0
  348. package/dist/chunk-QROYYGWU.js.map +1 -0
  349. package/dist/chunk-QYMJHS4K.js +36 -0
  350. package/dist/chunk-QYMJHS4K.js.map +1 -0
  351. package/dist/chunk-RHD7RKGI.js +176 -0
  352. package/dist/chunk-RHD7RKGI.js.map +1 -0
  353. package/dist/chunk-S2XULQEK.js +52 -0
  354. package/dist/chunk-S2XULQEK.js.map +1 -0
  355. package/dist/chunk-S3ECMF23.js +33 -0
  356. package/dist/chunk-S3ECMF23.js.map +1 -0
  357. package/dist/chunk-S4Y3YTAI.js +35 -0
  358. package/dist/chunk-S4Y3YTAI.js.map +1 -0
  359. package/dist/chunk-S4ZGTDSG.js +18 -0
  360. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  361. package/dist/chunk-T4WJ5VGP.js +165 -0
  362. package/dist/chunk-T4WJ5VGP.js.map +1 -0
  363. package/dist/chunk-TDMHA7C3.js +251 -0
  364. package/dist/chunk-TDMHA7C3.js.map +1 -0
  365. package/dist/chunk-TGLUDQP2.js +138 -0
  366. package/dist/chunk-TGLUDQP2.js.map +1 -0
  367. package/dist/chunk-TLMMFQWM.js +222 -0
  368. package/dist/chunk-TLMMFQWM.js.map +1 -0
  369. package/dist/chunk-U6QYTMDB.js +85 -0
  370. package/dist/chunk-U6QYTMDB.js.map +1 -0
  371. package/dist/chunk-UMKV7YVQ.js +20 -0
  372. package/dist/chunk-UMKV7YVQ.js.map +1 -0
  373. package/dist/chunk-VFYO3UGZ.js +45 -0
  374. package/dist/chunk-VFYO3UGZ.js.map +1 -0
  375. package/dist/chunk-W4IK7AWD.js +73 -0
  376. package/dist/chunk-W4IK7AWD.js.map +1 -0
  377. package/dist/chunk-WVS6CUCT.js +48 -0
  378. package/dist/chunk-WVS6CUCT.js.map +1 -0
  379. package/dist/chunk-Y6KT7ZTR.js +109 -0
  380. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  381. package/dist/chunk-YMUIQRWK.js +44 -0
  382. package/dist/chunk-YMUIQRWK.js.map +1 -0
  383. package/dist/chunk-YOA5W5ZH.js +807 -0
  384. package/dist/chunk-YOA5W5ZH.js.map +1 -0
  385. package/dist/chunk-YQ2AC4E2.js +59 -0
  386. package/dist/chunk-YQ2AC4E2.js.map +1 -0
  387. package/dist/chunk-ZKKO4MHC.js +25 -0
  388. package/dist/chunk-ZKKO4MHC.js.map +1 -0
  389. package/dist/chunk-ZNROKDSZ.js +54 -0
  390. package/dist/chunk-ZNROKDSZ.js.map +1 -0
  391. package/dist/collapsible-panel.d.ts +96 -17
  392. package/dist/collapsible-panel.js +132 -14
  393. package/dist/collapsible-panel.js.map +1 -1
  394. package/dist/column-track.d.ts +41 -0
  395. package/dist/column-track.js +4 -0
  396. package/dist/column-track.js.map +1 -0
  397. package/dist/combobox.d.ts +40 -0
  398. package/dist/combobox.js +3 -0
  399. package/dist/combobox.js.map +1 -0
  400. package/dist/composer.d.ts +62 -0
  401. package/dist/composer.js +5 -0
  402. package/dist/composer.js.map +1 -0
  403. package/dist/content-item.d.ts +116 -0
  404. package/dist/content-item.js +4 -0
  405. package/dist/content-item.js.map +1 -0
  406. package/dist/content-swap.d.ts +34 -0
  407. package/dist/content-swap.js +3 -0
  408. package/dist/content-swap.js.map +1 -0
  409. package/dist/corner-status.d.ts +36 -0
  410. package/dist/corner-status.js +3 -0
  411. package/dist/corner-status.js.map +1 -0
  412. package/dist/css-values.d.ts +127 -0
  413. package/dist/css-values.js +3 -0
  414. package/dist/css-values.js.map +1 -0
  415. package/dist/device-class.js +34 -6
  416. package/dist/device-class.js.map +1 -1
  417. package/dist/disclosure-arrow.d.ts +6 -1
  418. package/dist/disclosure-arrow.js +2 -1
  419. package/dist/edge-activity-indicator.d.ts +28 -0
  420. package/dist/edge-activity-indicator.js +3 -0
  421. package/dist/edge-activity-indicator.js.map +1 -0
  422. package/dist/empty-state.d.ts +5 -2
  423. package/dist/empty-state.js +2 -1
  424. package/dist/extension-attributes-mu8MFUl0.d.ts +13 -0
  425. package/dist/file-picker.d.ts +47 -0
  426. package/dist/file-picker.js +3 -0
  427. package/dist/file-picker.js.map +1 -0
  428. package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
  429. package/dist/floating-toolbar.d.ts +51 -0
  430. package/dist/floating-toolbar.js +3 -0
  431. package/dist/floating-toolbar.js.map +1 -0
  432. package/dist/framed-list.d.ts +47 -0
  433. package/dist/framed-list.js +4 -0
  434. package/dist/framed-list.js.map +1 -0
  435. package/dist/grid.d.ts +58 -0
  436. package/dist/grid.js +6 -0
  437. package/dist/grid.js.map +1 -0
  438. package/dist/help-tags-register.d.ts +13 -0
  439. package/dist/help-tags-register.js +9 -0
  440. package/dist/help-tags-register.js.map +1 -0
  441. package/dist/icon-button.d.ts +46 -0
  442. package/dist/icon-button.js +6 -0
  443. package/dist/icon-button.js.map +1 -0
  444. package/dist/icon-toggle-button.d.ts +42 -0
  445. package/dist/icon-toggle-button.js +6 -0
  446. package/dist/icon-toggle-button.js.map +1 -0
  447. package/dist/index.d.ts +63 -17
  448. package/dist/index.js +66 -23
  449. package/dist/list-action-row.d.ts +69 -12
  450. package/dist/list-action-row.js +5 -1
  451. package/dist/list-header.d.ts +65 -10
  452. package/dist/list-header.js +4 -1
  453. package/dist/list-icon-tile-B8dr97OW.d.ts +18 -0
  454. package/dist/list-inset-control.d.ts +22 -0
  455. package/dist/list-inset-control.js +3 -0
  456. package/dist/list-inset-control.js.map +1 -0
  457. package/dist/list-inset-text.d.ts +30 -0
  458. package/dist/list-inset-text.js +4 -0
  459. package/dist/list-inset-text.js.map +1 -0
  460. package/dist/list-item.d.ts +49 -5
  461. package/dist/list-item.js +4 -1
  462. package/dist/list.d.ts +128 -0
  463. package/dist/list.js +7 -0
  464. package/dist/list.js.map +1 -0
  465. package/dist/loading-spinner.d.ts +12 -2
  466. package/dist/loading-spinner.js +2 -1
  467. package/dist/lucide-icon.d.ts +15 -3
  468. package/dist/lucide-icon.js +2 -1
  469. package/dist/nav-stack-VXTumzKa.d.ts +158 -0
  470. package/dist/nav-stack.d.ts +15 -38
  471. package/dist/nav-stack.js +13 -1
  472. package/dist/pane.d.ts +153 -0
  473. package/dist/pane.js +5 -0
  474. package/dist/pane.js.map +1 -0
  475. package/dist/panel-toolbar-vg6Ir5Dy.d.ts +77 -0
  476. package/dist/popup-menu-register.d.ts +10 -0
  477. package/dist/popup-menu-register.js +336 -0
  478. package/dist/popup-menu-register.js.map +1 -0
  479. package/dist/popup-menu.d.ts +125 -0
  480. package/dist/popup-menu.js +3 -0
  481. package/dist/popup-menu.js.map +1 -0
  482. package/dist/resizable-region.d.ts +32 -3
  483. package/dist/resizable-region.js +1 -1
  484. package/dist/row.d.ts +53 -0
  485. package/dist/row.js +7 -0
  486. package/dist/row.js.map +1 -0
  487. package/dist/scroll-clearance-BikHljTc.d.ts +14 -0
  488. package/dist/segmented-control.d.ts +12 -9
  489. package/dist/segmented-control.js +1 -2
  490. package/dist/select-register.js +255 -3
  491. package/dist/select-register.js.map +1 -1
  492. package/dist/select.d.ts +103 -8
  493. package/dist/select.js +4 -1
  494. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  495. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  496. package/dist/sides-BPSWde0A.d.ts +4 -0
  497. package/dist/skeleton.d.ts +14 -7
  498. package/dist/skeleton.js +2 -1
  499. package/dist/spacer.d.ts +18 -0
  500. package/dist/spacer.js +4 -0
  501. package/dist/spacer.js.map +1 -0
  502. package/dist/split-button.d.ts +57 -0
  503. package/dist/split-button.js +7 -0
  504. package/dist/split-button.js.map +1 -0
  505. package/dist/split-view.d.ts +63 -6
  506. package/dist/split-view.js +149 -10
  507. package/dist/split-view.js.map +1 -1
  508. package/dist/state-banner.d.ts +41 -7
  509. package/dist/state-banner.js +4 -1
  510. package/dist/styles/anchored-surface.css +41 -0
  511. package/dist/styles/app-tab.css +232 -0
  512. package/dist/styles/badge.css +145 -0
  513. package/dist/styles/catalog/components/catalog-example-stack.css +14 -0
  514. package/dist/styles/catalog/components/catalog-example.css +204 -0
  515. package/dist/styles/catalog/components/catalog-stage.css +61 -0
  516. package/dist/styles/catalog/components/catalog.css +26 -0
  517. package/dist/styles/catalog.css +5 -498
  518. package/dist/styles/chip.css +208 -0
  519. package/dist/styles/choice-chips.css +154 -0
  520. package/dist/styles/collapsible-panel.css +450 -16
  521. package/dist/styles/column-track.css +57 -0
  522. package/dist/styles/combobox.css +113 -0
  523. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  524. package/dist/styles/components/actions/icon-button/icon-button.css +22 -0
  525. package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +83 -0
  526. package/dist/styles/components/actions/popup-menu/popup-menu.css +370 -0
  527. package/dist/styles/components/actions/split-button/split-button.css +95 -0
  528. package/dist/styles/components/actions/toolbar/toolbar.css +443 -0
  529. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +1069 -0
  530. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +269 -0
  531. package/dist/styles/components/collections/framed-list/framed-list.css +47 -0
  532. package/dist/styles/components/collections/list/list.css +250 -0
  533. package/dist/styles/components/collections/list-action-row/list-action-row.css +466 -0
  534. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  535. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  536. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  537. package/dist/styles/components/collections/list-item/list-item.css +461 -0
  538. package/dist/styles/components/collections/summary-row/summary-row.css +161 -0
  539. package/dist/styles/components/data-display/value-table/value-table.css +183 -0
  540. package/dist/styles/components/feedback/anchored-surface/anchored-surface.css +41 -0
  541. package/dist/styles/components/feedback/badge/badge.css +145 -0
  542. package/dist/styles/components/feedback/chip/chip.css +208 -0
  543. package/dist/styles/components/feedback/corner-status/corner-status.css +60 -0
  544. package/dist/styles/components/feedback/edge-activity-indicator/edge-activity-indicator.css +127 -0
  545. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  546. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  547. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  548. package/dist/styles/components/feedback/state-banner/state-banner.css +297 -0
  549. package/dist/styles/components/forms/choice-chips/choice-chips.css +154 -0
  550. package/dist/styles/components/forms/combobox/combobox.css +113 -0
  551. package/dist/styles/components/forms/composer/composer.css +100 -0
  552. package/dist/styles/components/forms/file-picker/file-picker.css +81 -0
  553. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  554. package/dist/styles/components/forms/select/select.css +455 -0
  555. package/dist/styles/components/forms/token-search-field/token-search-field.css +432 -0
  556. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +580 -0
  557. package/dist/styles/components/layout/column-track/column-track.css +57 -0
  558. package/dist/styles/components/layout/content-swap/content-swap.css +154 -0
  559. package/dist/styles/components/layout/grid/grid.css +88 -0
  560. package/dist/styles/components/layout/pane/pane.css +382 -0
  561. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  562. package/dist/styles/components/layout/row/row.css +114 -0
  563. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  564. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  565. package/dist/styles/components/layout/workbench/workbench.css +1086 -0
  566. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  567. package/dist/styles/components/navigation/app-tab/app-tab.css +384 -0
  568. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  569. package/dist/styles/components/navigation/nav-stack/nav-stack.css +342 -0
  570. package/dist/styles/components/navigation/tab-bar/tab-bar.css +197 -0
  571. package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +325 -0
  572. package/dist/styles/components/surfaces/content-item/content-item.css +138 -0
  573. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +31 -0
  574. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +425 -0
  575. package/dist/styles/components/typography/text/text.css +220 -0
  576. package/dist/styles/composer.css +100 -0
  577. package/dist/styles/content-item.css +138 -0
  578. package/dist/styles/content-swap.css +154 -0
  579. package/dist/styles/corner-status.css +60 -0
  580. package/dist/styles/document.css +98 -0
  581. package/dist/styles/edge-activity-indicator.css +127 -0
  582. package/dist/styles/file-picker.css +81 -0
  583. package/dist/styles/floating-toolbar.css +119 -0
  584. package/dist/styles/foundation.css +261 -45
  585. package/dist/styles/framed-list.css +47 -0
  586. package/dist/styles/grid.css +88 -0
  587. package/dist/styles/icon-button.css +22 -0
  588. package/dist/styles/icon-toggle-button.css +83 -0
  589. package/dist/styles/layout.css +3 -41
  590. package/dist/styles/list-action-row.css +324 -18
  591. package/dist/styles/list-header.css +128 -59
  592. package/dist/styles/list-inset-control.css +30 -0
  593. package/dist/styles/list-inset-text.css +29 -0
  594. package/dist/styles/list-item.css +371 -33
  595. package/dist/styles/list.css +250 -0
  596. package/dist/styles/loading-spinner.css +4 -0
  597. package/dist/styles/lucide-icon.css +9 -0
  598. package/dist/styles/nav-stack.css +280 -49
  599. package/dist/styles/pane.css +382 -0
  600. package/dist/styles/popup-menu.css +370 -0
  601. package/dist/styles/resizable-region.css +438 -4
  602. package/dist/styles/row.css +114 -0
  603. package/dist/styles/segmented-control.css +36 -9
  604. package/dist/styles/select.css +338 -21
  605. package/dist/styles/skeleton.css +64 -3
  606. package/dist/styles/spacer.css +11 -0
  607. package/dist/styles/split-button.css +95 -0
  608. package/dist/styles/split-view.css +114 -3
  609. package/dist/styles/state-banner.css +146 -22
  610. package/dist/styles/styles.css +23 -1
  611. package/dist/styles/summary-row.css +161 -0
  612. package/dist/styles/sunken-panel.css +31 -0
  613. package/dist/styles/surface-scaffold.css +425 -0
  614. package/dist/styles/tab-bar.css +161 -9
  615. package/dist/styles/tab-navigator.css +325 -0
  616. package/dist/styles/text.css +220 -0
  617. package/dist/styles/token-search-field.css +202 -59
  618. package/dist/styles/toolbar-control-group.css +894 -36
  619. package/dist/styles/toolbar-text.css +236 -7
  620. package/dist/styles/toolbar.css +393 -11
  621. package/dist/styles/value-table.css +115 -7
  622. package/dist/styles/webawesome.css +410 -17
  623. package/dist/styles/workbench.css +999 -7
  624. package/dist/summary-row.d.ts +56 -0
  625. package/dist/summary-row.js +4 -0
  626. package/dist/summary-row.js.map +1 -0
  627. package/dist/sunken-panel.d.ts +38 -0
  628. package/dist/sunken-panel.js +4 -0
  629. package/dist/sunken-panel.js.map +1 -0
  630. package/dist/surface-scaffold-register.d.ts +9 -0
  631. package/dist/surface-scaffold-register.js +151 -0
  632. package/dist/surface-scaffold-register.js.map +1 -0
  633. package/dist/surface-scaffold.d.ts +170 -0
  634. package/dist/surface-scaffold.js +4 -0
  635. package/dist/surface-scaffold.js.map +1 -0
  636. package/dist/tab-bar.d.ts +33 -7
  637. package/dist/tab-bar.js +1 -1
  638. package/dist/tab-navigator.d.ts +114 -0
  639. package/dist/tab-navigator.js +102 -0
  640. package/dist/tab-navigator.js.map +1 -0
  641. package/dist/text.d.ts +98 -0
  642. package/dist/text.js +3 -0
  643. package/dist/text.js.map +1 -0
  644. package/dist/token-search-field.d.ts +3 -43
  645. package/dist/token-search-field.js +2 -1
  646. package/dist/token-search-model-aYR0YAei.d.ts +184 -0
  647. package/dist/token-search-model.d.ts +3 -0
  648. package/dist/token-search-model.js +3 -0
  649. package/dist/token-search-model.js.map +1 -0
  650. package/dist/toolbar-control-group.d.ts +96 -7
  651. package/dist/toolbar-control-group.js +3 -1
  652. package/dist/toolbar-text.d.ts +58 -9
  653. package/dist/toolbar-text.js +2 -1
  654. package/dist/toolbar.d.ts +71 -7
  655. package/dist/toolbar.js +1 -1
  656. package/dist/types-CVgIwSdq.d.ts +189 -0
  657. package/dist/value-table.d.ts +30 -4
  658. package/dist/value-table.js +2 -1
  659. package/dist/webawesome.d.ts +8 -1
  660. package/dist/wire-catalog.d.ts +111 -5
  661. package/dist/wire-catalog.js +302 -14
  662. package/dist/wire-catalog.js.map +1 -1
  663. package/dist/wire-comboboxes.d.ts +26 -0
  664. package/dist/wire-comboboxes.js +3 -0
  665. package/dist/wire-comboboxes.js.map +1 -0
  666. package/dist/wire-composers.d.ts +16 -0
  667. package/dist/wire-composers.js +3 -0
  668. package/dist/wire-composers.js.map +1 -0
  669. package/dist/wire-content-items.d.ts +11 -0
  670. package/dist/wire-content-items.js +139 -0
  671. package/dist/wire-content-items.js.map +1 -0
  672. package/dist/wire-corner-status.d.ts +11 -0
  673. package/dist/wire-corner-status.js +3 -0
  674. package/dist/wire-corner-status.js.map +1 -0
  675. package/dist/wire-file-pickers.d.ts +26 -0
  676. package/dist/wire-file-pickers.js +3 -0
  677. package/dist/wire-file-pickers.js.map +1 -0
  678. package/dist/wire-list-focus-scroll.d.ts +16 -0
  679. package/dist/wire-list-focus-scroll.js +3 -0
  680. package/dist/wire-list-focus-scroll.js.map +1 -0
  681. package/dist/wire-list-reorder.d.ts +41 -0
  682. package/dist/wire-list-reorder.js +3 -0
  683. package/dist/wire-list-reorder.js.map +1 -0
  684. package/dist/wire-nav-stack.d.ts +4 -1
  685. package/dist/wire-nav-stack.js +326 -15
  686. package/dist/wire-nav-stack.js.map +1 -1
  687. package/dist/wire-resizable-regions.d.ts +2 -1
  688. package/dist/wire-resizable-regions.js +2 -1
  689. package/dist/wire-scroll-dividers.d.ts +87 -0
  690. package/dist/wire-scroll-dividers.js +3 -0
  691. package/dist/wire-scroll-dividers.js.map +1 -0
  692. package/dist/wire-sidebar.d.ts +24 -4
  693. package/dist/wire-sidebar.js +159 -45
  694. package/dist/wire-sidebar.js.map +1 -1
  695. package/dist/wire-tab-bars.d.ts +6 -2
  696. package/dist/wire-tab-bars.js +1 -1
  697. package/dist/wire-tab-navigator.d.ts +13 -0
  698. package/dist/wire-tab-navigator.js +153 -0
  699. package/dist/wire-tab-navigator.js.map +1 -0
  700. package/dist/wire-token-search-fields.d.ts +28 -10
  701. package/dist/wire-token-search-fields.js +2 -1
  702. package/dist/wire-toolbar-visibility.d.ts +13 -0
  703. package/dist/wire-toolbar-visibility.js +3 -0
  704. package/dist/wire-toolbar-visibility.js.map +1 -0
  705. package/dist/wire-workbench.d.ts +116 -0
  706. package/dist/wire-workbench.js +6 -0
  707. package/dist/wire-workbench.js.map +1 -0
  708. package/dist/workbench.d.ts +253 -10
  709. package/dist/workbench.js +20 -15
  710. package/dist/workbench.js.map +1 -1
  711. package/docs/accessibility.md +640 -33
  712. package/docs/anchored-surface.md +101 -0
  713. package/docs/app-layouts.md +159 -10
  714. package/docs/apple-hig.md +2 -0
  715. package/docs/catalog.md +565 -63
  716. package/docs/collapsible-panel.md +308 -25
  717. package/docs/component-contract.md +816 -53
  718. package/docs/component-integration.md +75 -0
  719. package/docs/component-selection.md +962 -99
  720. package/docs/composer.md +143 -0
  721. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -0
  722. package/docs/design/templates/choice-chips/color-palette.svg +1 -0
  723. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -0
  724. package/docs/design/templates/choice-chips/compact-icons.svg +1 -0
  725. package/docs/design/templates/choice-chips/multiple-dark.svg +1 -0
  726. package/docs/design/templates/choice-chips/multiple.svg +1 -0
  727. package/docs/design/templates/choice-chips-dark.svg +1 -0
  728. package/docs/design/templates/choice-chips.svg +1 -0
  729. package/docs/design/templates/composer/chat-dark.svg +1 -0
  730. package/docs/design/templates/composer/chat.svg +1 -0
  731. package/docs/design/templates/composer/prompt-dark.svg +1 -0
  732. package/docs/design/templates/composer/prompt.svg +1 -0
  733. package/docs/design/templates/composer-dark.svg +1 -0
  734. package/docs/design/templates/composer.svg +1 -0
  735. package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
  736. package/docs/design/templates/empty-state/filtered.svg +1 -0
  737. package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
  738. package/docs/design/templates/empty-state/with-action.svg +1 -0
  739. package/docs/design/templates/empty-state-dark.svg +1 -0
  740. package/docs/design/templates/empty-state.svg +1 -0
  741. package/docs/design/templates/list/compact-dark.svg +1 -0
  742. package/docs/design/templates/list/compact.svg +1 -0
  743. package/docs/design/templates/list/stack-dark.svg +1 -0
  744. package/docs/design/templates/list/stack.svg +1 -0
  745. package/docs/design/templates/list-action-row/default-dark.svg +1 -0
  746. package/docs/design/templates/list-action-row/default.svg +1 -0
  747. package/docs/design/templates/list-action-row/icon-tile-dark.svg +1 -0
  748. package/docs/design/templates/list-action-row/icon-tile.svg +1 -0
  749. package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
  750. package/docs/design/templates/list-action-row/selected.svg +1 -0
  751. package/docs/design/templates/list-action-row/trailing-menu-dark.svg +1 -0
  752. package/docs/design/templates/list-action-row/trailing-menu.svg +1 -0
  753. package/docs/design/templates/list-action-row-dark.svg +1 -0
  754. package/docs/design/templates/list-action-row.svg +1 -0
  755. package/docs/design/templates/list-dark.svg +1 -0
  756. package/docs/design/templates/list-header/action-dark.svg +1 -0
  757. package/docs/design/templates/list-header/action.svg +1 -0
  758. package/docs/design/templates/list-header/count-dark.svg +1 -0
  759. package/docs/design/templates/list-header/count.svg +1 -0
  760. package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
  761. package/docs/design/templates/list-header/inline-action.svg +1 -0
  762. package/docs/design/templates/list-header/size-l-dark.svg +1 -0
  763. package/docs/design/templates/list-header/size-l.svg +1 -0
  764. package/docs/design/templates/list-header/size-m-dark.svg +1 -0
  765. package/docs/design/templates/list-header/size-m.svg +1 -0
  766. package/docs/design/templates/list-header/size-xl-dark.svg +1 -0
  767. package/docs/design/templates/list-header/size-xl.svg +1 -0
  768. package/docs/design/templates/list-header/size-xs-dark.svg +1 -0
  769. package/docs/design/templates/list-header/size-xs.svg +1 -0
  770. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
  771. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
  772. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
  773. package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
  774. package/docs/design/templates/list-header-dark.svg +1 -0
  775. package/docs/design/templates/list-header.svg +1 -0
  776. package/docs/design/templates/list-item/default-dark.svg +1 -0
  777. package/docs/design/templates/list-item/default.svg +1 -0
  778. package/docs/design/templates/list-item/icon-tile-dark.svg +1 -0
  779. package/docs/design/templates/list-item/icon-tile.svg +1 -0
  780. package/docs/design/templates/list-item/multiline-dark.svg +1 -0
  781. package/docs/design/templates/list-item/multiline.svg +1 -0
  782. package/docs/design/templates/list-item/selected-dark.svg +1 -0
  783. package/docs/design/templates/list-item/selected.svg +1 -0
  784. package/docs/design/templates/list-item/trailing-dark.svg +1 -0
  785. package/docs/design/templates/list-item/trailing.svg +1 -0
  786. package/docs/design/templates/list-item-dark.svg +1 -0
  787. package/docs/design/templates/list-item.svg +1 -0
  788. package/docs/design/templates/list.svg +1 -0
  789. package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
  790. package/docs/design/templates/segmented-control/equal.svg +1 -0
  791. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
  792. package/docs/design/templates/segmented-control/pill-small.svg +1 -0
  793. package/docs/design/templates/segmented-control-dark.svg +1 -0
  794. package/docs/design/templates/segmented-control.svg +1 -0
  795. package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
  796. package/docs/design/templates/skeleton/avatar.svg +1 -0
  797. package/docs/design/templates/skeleton/block-dark.svg +1 -0
  798. package/docs/design/templates/skeleton/block.svg +1 -0
  799. package/docs/design/templates/skeleton/lines-dark.svg +1 -0
  800. package/docs/design/templates/skeleton/lines.svg +1 -0
  801. package/docs/design/templates/skeleton-dark.svg +1 -0
  802. package/docs/design/templates/skeleton.svg +1 -0
  803. package/docs/design/templates/state-banner/danger-dark.svg +1 -0
  804. package/docs/design/templates/state-banner/danger.svg +1 -0
  805. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  806. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  807. package/docs/design/templates/state-banner/info-dark.svg +1 -0
  808. package/docs/design/templates/state-banner/info.svg +1 -0
  809. package/docs/design/templates/state-banner/strip-dark.svg +1 -0
  810. package/docs/design/templates/state-banner/strip.svg +1 -0
  811. package/docs/design/templates/state-banner/success-dark.svg +1 -0
  812. package/docs/design/templates/state-banner/success.svg +1 -0
  813. package/docs/design/templates/state-banner/warning-dark.svg +1 -0
  814. package/docs/design/templates/state-banner/warning.svg +1 -0
  815. package/docs/design/templates/state-banner-dark.svg +1 -0
  816. package/docs/design/templates/state-banner.svg +1 -0
  817. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
  818. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
  819. package/docs/design/templates/tab-bar-dark.svg +1 -0
  820. package/docs/design/templates/tab-bar.svg +1 -0
  821. package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
  822. package/docs/design/templates/token-search-field/empty.svg +1 -0
  823. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
  824. package/docs/design/templates/token-search-field/tokens.svg +1 -0
  825. package/docs/design/templates/token-search-field-dark.svg +1 -0
  826. package/docs/design/templates/token-search-field.svg +1 -0
  827. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
  828. package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
  829. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -0
  830. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -0
  831. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -0
  832. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -0
  833. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  834. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  835. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  836. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  837. package/docs/design/templates/toolbar-control-group/icon-tile-brand-dark.svg +1 -0
  838. package/docs/design/templates/toolbar-control-group/icon-tile-brand.svg +1 -0
  839. package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -0
  840. package/docs/design/templates/toolbar-control-group/icon-tile-danger.svg +1 -0
  841. package/docs/design/templates/toolbar-control-group/icon-tile-neutral-dark.svg +1 -0
  842. package/docs/design/templates/toolbar-control-group/icon-tile-neutral.svg +1 -0
  843. package/docs/design/templates/toolbar-control-group/icon-tile-success-dark.svg +1 -0
  844. package/docs/design/templates/toolbar-control-group/icon-tile-success.svg +1 -0
  845. package/docs/design/templates/toolbar-control-group/icon-tile-warning-dark.svg +1 -0
  846. package/docs/design/templates/toolbar-control-group/icon-tile-warning.svg +1 -0
  847. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  848. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  849. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  850. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  851. package/docs/design/templates/toolbar-control-group-dark.svg +1 -11
  852. package/docs/design/templates/toolbar-control-group.svg +1 -11
  853. package/docs/design/templates/toolbar-dark.svg +1 -0
  854. package/docs/design/templates/toolbar-text/dark-tone-dark.svg +1 -0
  855. package/docs/design/templates/toolbar-text/dark-tone.svg +1 -0
  856. package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
  857. package/docs/design/templates/toolbar-text/default.svg +1 -0
  858. package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
  859. package/docs/design/templates/toolbar-text/large.svg +1 -0
  860. package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
  861. package/docs/design/templates/toolbar-text/small.svg +1 -0
  862. package/docs/design/templates/toolbar-text-dark.svg +1 -0
  863. package/docs/design/templates/toolbar-text.svg +1 -0
  864. package/docs/design/templates/toolbar.svg +1 -0
  865. package/docs/design/templates/value-table/details-dark.svg +1 -0
  866. package/docs/design/templates/value-table/details.svg +1 -0
  867. package/docs/design/templates/value-table-dark.svg +1 -0
  868. package/docs/design/templates/value-table.svg +1 -0
  869. package/docs/design/templates.md +75 -18
  870. package/docs/design-philosophy.md +65 -20
  871. package/docs/device-class.md +10 -9
  872. package/docs/document-baseline.md +93 -0
  873. package/docs/examples/application-ui-profile.json +60 -0
  874. package/docs/examples/command-palette-adapter.tsx +69 -17
  875. package/docs/examples/component-catalog-extension.json +52 -0
  876. package/docs/examples/component-composition-extension.json +80 -0
  877. package/docs/layout.md +796 -53
  878. package/docs/nav-stack.md +287 -14
  879. package/docs/recipes.md +129 -73
  880. package/docs/split-view.md +96 -7
  881. package/docs/sunken-panel.md +106 -0
  882. package/docs/surface-scaffold.md +270 -0
  883. package/docs/tab-navigator.md +255 -0
  884. package/docs/type-contracts.md +137 -0
  885. package/docs/ui-analyzer.md +406 -0
  886. package/docs/ui-doctor.md +281 -0
  887. package/docs/ui-evaluator.md +139 -0
  888. package/docs/ux-demo.md +48 -17
  889. package/docs/webawesome-theme.md +215 -16
  890. package/docs/workbench.md +627 -12
  891. package/docs/writing.md +152 -0
  892. package/doctor/cli.mjs +120 -0
  893. package/doctor/component-style-checks.mjs +457 -0
  894. package/doctor/config.schema.json +94 -0
  895. package/doctor/copy-capitalization-checks.mjs +591 -0
  896. package/doctor/eslint-diagnostics.d.mts +24 -0
  897. package/doctor/eslint-diagnostics.mjs +24 -0
  898. package/doctor/index.d.mts +122 -0
  899. package/doctor/index.mjs +1424 -0
  900. package/doctor/report.schema.json +118 -0
  901. package/evaluator/cli.mjs +89 -0
  902. package/evaluator/index.d.mts +90 -0
  903. package/evaluator/index.mjs +1203 -0
  904. package/evaluator/report.schema.json +152 -0
  905. package/llms.txt +770 -50
  906. package/package.json +345 -27
  907. package/scripts/component-catalog-extension-validation.mjs +28 -0
  908. package/traversal-exclusions.mjs +86 -0
  909. package/ux-demo/recipes/app-shell.tsx +204 -16
  910. package/ux-demo/recipes/collapsible-sidebar.tsx +206 -45
  911. package/ux-demo/recipes/compact-toolbar.tsx +135 -14
  912. package/ux-demo/recipes/composer-form.tsx +133 -21
  913. package/ux-demo/recipes/list-detail-dialog.tsx +255 -14
  914. package/ux-demo/recipes/list-workspace-states.tsx +183 -11
  915. package/ux-demo/recipes/loaders.ts +9 -3
  916. package/ux-demo/recipes/loading-inspector.tsx +162 -39
  917. package/ux-demo/recipes/mount-recipe.ts +26 -10
  918. package/ux-demo/recipes/navigation-sidebar.tsx +137 -11
  919. package/ux-demo/recipes/navigation-stack.tsx +79 -24
  920. package/ux-demo/recipes/types.ts +17 -2
  921. package/ux-demo/recipes/workspace-header.tsx +86 -5
  922. package/vite-ux-review.d.mts +83 -0
  923. package/vite-ux-review.mjs +120 -0
  924. package/dist/browser/panel-header.js +0 -7
  925. package/dist/chunk-2Z5TWHKQ.js +0 -34
  926. package/dist/chunk-2Z5TWHKQ.js.map +0 -1
  927. package/dist/chunk-37T3VNIZ.js +0 -19
  928. package/dist/chunk-37T3VNIZ.js.map +0 -1
  929. package/dist/chunk-55DATV3A.js +0 -10
  930. package/dist/chunk-55DATV3A.js.map +0 -1
  931. package/dist/chunk-56RJXPHG.js.map +0 -1
  932. package/dist/chunk-7BR3DO2A.js +0 -31
  933. package/dist/chunk-7BR3DO2A.js.map +0 -1
  934. package/dist/chunk-7JB7VPRI.js +0 -34
  935. package/dist/chunk-7JB7VPRI.js.map +0 -1
  936. package/dist/chunk-7LDCTU7D.js +0 -134
  937. package/dist/chunk-7LDCTU7D.js.map +0 -1
  938. package/dist/chunk-AQNKJRFH.js +0 -79
  939. package/dist/chunk-AQNKJRFH.js.map +0 -1
  940. package/dist/chunk-AVZHJN6C.js +0 -14
  941. package/dist/chunk-AVZHJN6C.js.map +0 -1
  942. package/dist/chunk-B24C4A6T.js +0 -22
  943. package/dist/chunk-B24C4A6T.js.map +0 -1
  944. package/dist/chunk-BLK3UEEI.js +0 -23
  945. package/dist/chunk-BLK3UEEI.js.map +0 -1
  946. package/dist/chunk-CVZYNJJ5.js +0 -265
  947. package/dist/chunk-CVZYNJJ5.js.map +0 -1
  948. package/dist/chunk-DAFFDO33.js +0 -14
  949. package/dist/chunk-DAFFDO33.js.map +0 -1
  950. package/dist/chunk-I7INRJO4.js +0 -17
  951. package/dist/chunk-I7INRJO4.js.map +0 -1
  952. package/dist/chunk-L4OKFDJY.js +0 -24
  953. package/dist/chunk-L4OKFDJY.js.map +0 -1
  954. package/dist/chunk-LC3YSAZC.js +0 -39
  955. package/dist/chunk-LC3YSAZC.js.map +0 -1
  956. package/dist/chunk-M5JRI6MN.js +0 -27
  957. package/dist/chunk-M5JRI6MN.js.map +0 -1
  958. package/dist/chunk-MFKMHK5W.js +0 -10
  959. package/dist/chunk-MFKMHK5W.js.map +0 -1
  960. package/dist/chunk-RUNWEPR4.js +0 -10
  961. package/dist/chunk-RUNWEPR4.js.map +0 -1
  962. package/dist/chunk-W2FK7ZNY.js +0 -26
  963. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  964. package/dist/chunk-W5EQ3HYQ.js +0 -42
  965. package/dist/chunk-W5EQ3HYQ.js.map +0 -1
  966. package/dist/chunk-WVPYVDXY.js +0 -15
  967. package/dist/chunk-WVPYVDXY.js.map +0 -1
  968. package/dist/chunk-XXMOARTH.js +0 -229
  969. package/dist/chunk-XXMOARTH.js.map +0 -1
  970. package/dist/chunk-Y5MRDTLC.js +0 -20
  971. package/dist/chunk-Y5MRDTLC.js.map +0 -1
  972. package/dist/chunk-YGN7OMLT.js.map +0 -1
  973. package/dist/panel-header.d.ts +0 -36
  974. package/dist/panel-header.js +0 -7
  975. package/dist/panel-header.js.map +0 -1
  976. package/dist/styles/panel-header.css +0 -64
  977. package/dist/styles/tab-scaffold.css +0 -84
  978. package/dist/tab-scaffold.d.ts +0 -30
  979. package/dist/tab-scaffold.js +0 -16
  980. package/dist/tab-scaffold.js.map +0 -1
  981. package/dist/wire-tab-scaffold.d.ts +0 -11
  982. package/dist/wire-tab-scaffold.js +0 -16
  983. package/dist/wire-tab-scaffold.js.map +0 -1
  984. package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
  985. package/docs/design/templates/panel-header/icon-actions.svg +0 -1
  986. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
  987. package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
  988. package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
  989. package/docs/design/templates/panel-header/no-icon.svg +0 -1
  990. package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
  991. package/docs/design/templates/panel-header/page-heading.svg +0 -1
  992. package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
  993. package/docs/design/templates/panel-header/title-only.svg +0 -1
  994. package/docs/design/templates/panel-header-dark.svg +0 -13
  995. package/docs/design/templates/panel-header.svg +0 -13
  996. package/docs/tab-scaffold.md +0 -41
  997. package/ux-demo/recipes/recipes.css +0 -448
@@ -1,3 +1,22 @@
1
+ import { Signal } from 'kerfjs';
2
+ import { a as CatalogBackgroundStyle } from './types-CVgIwSdq.js';
3
+ import './toolbar.js';
4
+ import './semantic-content-BbzjvSu9.js';
5
+ import './sides-BPSWde0A.js';
6
+ import './pane.js';
7
+ import './scroll-clearance-BikHljTc.js';
8
+ import './workbench.js';
9
+ import './nav-stack-VXTumzKa.js';
10
+ import './list.js';
11
+ import './extension-attributes-mu8MFUl0.js';
12
+ import './flex-alignment-4ms8ZbV8.js';
13
+ import './css-values.js';
14
+ import './panel-toolbar-vg6Ir5Dy.js';
15
+ import './lucide-icon.js';
16
+ import 'lucide';
17
+ import './toolbar-text.js';
18
+ import './resizable-region.js';
19
+
1
20
  interface WireCatalogOptions {
2
21
  /** Invoked with the entry id when a sidebar item or a related-entry option is chosen. */
3
22
  onSelect: (id: string) => void;
@@ -5,22 +24,109 @@ interface WireCatalogOptions {
5
24
  onToggleSidebar?: () => void;
6
25
  /** Invoked when the theme toggle is activated. */
7
26
  onToggleTheme?: () => void;
27
+ /** Report a contrast-toggle press; the app updates its signal and applies the preference. */
28
+ onToggleContrast?: () => void;
29
+ /** Report a reduced-motion-toggle press; the app updates its signal and applies the preference. */
30
+ onToggleMotion?: () => void;
31
+ /** Report a preview background choice; the app updates `backgroundStyle`. */
32
+ onSelectBackground?: (style: CatalogBackgroundStyle) => void;
33
+ /**
34
+ * Invoked when the settings pane toggle is activated. With
35
+ * `settingsCollapsed`, `wireCatalog` has already flipped the signal.
36
+ */
37
+ onToggleSettings?: () => void;
8
38
  /** Invoked when the secondary (ecosystem) group's disclosure toggle is activated. */
9
39
  onToggleSecondary?: () => void;
10
40
  /** When set, `?<urlParam>=<id>` is written on select via `history.replaceState`. */
11
41
  urlParam?: string;
42
+ /**
43
+ * Reveal the chosen sidebar row after selection. `true` uses desktop-safe
44
+ * defaults; pass options to customize scroll alignment or the media guard.
45
+ */
46
+ revealSelection?: boolean | CatalogRevealOptions;
12
47
  selectAction?: string;
13
48
  toggleSidebarAction?: string;
14
49
  toggleThemeAction?: string;
50
+ toggleContrastAction?: string;
51
+ toggleMotionAction?: string;
52
+ selectBackgroundAction?: string;
15
53
  toggleSecondaryAction?: string;
54
+ toggleSettingsAction?: string;
55
+ /**
56
+ * The sidebar's app-owned collapsed flag. With it, the catalog's Workbench
57
+ * sidebar is wired like any Workbench rail: it becomes a transient overlay
58
+ * on a small screen (collapsed as the breakpoint applies, closed on Escape
59
+ * or a press outside, focus handed back), and choosing an entry from the
60
+ * open overlay closes it.
61
+ */
62
+ collapsed?: Signal<boolean>;
63
+ /**
64
+ * The app-owned sidebar width signal for a Catalog rendered with
65
+ * `sidebar={{ resizable: true, size: sidebarSize.value }}`. Each committed
66
+ * drag or keyboard resize is written to it.
67
+ */
68
+ sidebarSize?: Signal<number>;
69
+ /**
70
+ * With `sidebarSize`, load and save the width under this storage key so the
71
+ * catalog remembers the user's sidebar width.
72
+ */
73
+ sidebarStorageKey?: string;
74
+ /**
75
+ * The settings pane's app-owned collapsed flag, rendered as the Catalog's
76
+ * `settingsCollapsed`. With it, `wireCatalog` owns the pane's toggle (each
77
+ * press flips the signal) and wires the pane like any Workbench rail: a
78
+ * transient overlay on a small screen (collapsed as the breakpoint applies,
79
+ * closed on Escape or a press outside, focus handed back).
80
+ */
81
+ settingsCollapsed?: Signal<boolean>;
82
+ /**
83
+ * The app-owned settings pane width signal for a Catalog rendered with
84
+ * `settingsPanel={{ resizable: true, size: settingsSize.value }}`. Each
85
+ * committed drag or keyboard resize is written to it.
86
+ */
87
+ settingsSize?: Signal<number>;
88
+ /**
89
+ * With `settingsSize`, load and save the width under this storage key so
90
+ * the catalog remembers the user's settings pane width.
91
+ */
92
+ settingsStorageKey?: string;
93
+ /** The Catalog's `id`, when it is not the default `kui-catalog`. */
94
+ id?: string;
95
+ /**
96
+ * Ask the page's server once for its UX Review project directory (served by
97
+ * `uxReviewPlugin` from `@kerfjs/ui/vite-ux-review`) and report it, so the
98
+ * app can render the Catalog with `uxReview`. Never called on static
99
+ * hosting or a server without the plugin.
100
+ */
101
+ onUxReviewProject?: (projectDirectory: string) => void;
102
+ }
103
+ interface CatalogRevealOptions {
104
+ /** Scroll alignment within the sidebar. Default `'nearest'`. */
105
+ block?: ScrollLogicalPosition;
106
+ /** Cross-axis alignment. Default `'nearest'`. */
107
+ inline?: ScrollLogicalPosition;
108
+ /** Scroll behavior. Default `'auto'`. */
109
+ behavior?: ScrollBehavior;
110
+ /**
111
+ * Only reveal when this media query matches. Defaults to the Catalog's
112
+ * desktop layout; pass `false` to reveal at every viewport size.
113
+ */
114
+ media?: string | false;
16
115
  }
116
+ /**
117
+ * Reveal one Catalog sidebar entry after the controlled render settles without
118
+ * moving focus. Returns a cancellation function for rapid selection changes.
119
+ */
120
+ declare function revealCatalogEntry(root: HTMLElement, id: string, { block, inline, behavior, media, }?: CatalogRevealOptions): () => void;
17
121
  /**
18
122
  * Wire a {@link Catalog}'s interactions with one delegated listener set: sidebar
19
- * item selection (and the related-entry popup menu), the sidebar collapse toggle, and
20
- * the theme toggle. The app owns the `active`/`collapsed`/`theme` signals and updates
123
+ * item selection (and the related-entry popup menu), the sidebar collapse toggle,
124
+ * the settings pane toggle, and the theme toggle. The app owns the `active`/`collapsed`/`theme` signals and updates
21
125
  * them in the callbacks; optionally mirror the active id into the URL via `urlParam`.
22
- * Returns a disposer.
126
+ * It also wires the scroll dividers below root (`wireScrollDividers`), so the
127
+ * catalog's panes and every example in it show their chrome dividers only
128
+ * while scrolled. Returns a disposer.
23
129
  */
24
- declare function wireCatalog(root: HTMLElement, { onSelect, onToggleSidebar, onToggleTheme, onToggleSecondary, urlParam, selectAction, toggleSidebarAction, toggleThemeAction, toggleSecondaryAction, }: WireCatalogOptions): () => void;
130
+ declare function wireCatalog(root: HTMLElement, { onSelect, onToggleSidebar, onToggleTheme, onToggleContrast, onToggleMotion, onSelectBackground, onToggleSecondary, onToggleSettings, urlParam, revealSelection, selectAction, toggleSidebarAction, toggleThemeAction, toggleContrastAction, toggleMotionAction, selectBackgroundAction, toggleSecondaryAction, toggleSettingsAction, collapsed, sidebarSize, sidebarStorageKey, settingsCollapsed, settingsSize, settingsStorageKey, id: catalogId, onUxReviewProject, }: WireCatalogOptions): () => void;
25
131
 
26
- export { type WireCatalogOptions, wireCatalog };
132
+ export { type CatalogRevealOptions, type WireCatalogOptions, revealCatalogEntry, wireCatalog };
@@ -1,48 +1,336 @@
1
+ import { wireWorkbench } from './chunk-QLA25V2K.js';
2
+ import { wireScrollDividers } from './chunk-CXZXHZTR.js';
3
+
4
+ import { loadUxReviewProject } from './chunk-6C6DLP3W.js';
5
+
6
+ import { readTokenSearchField } from './chunk-MF6ZUUJZ.js';
7
+
8
+
9
+
1
10
  import { delegate } from 'kerfjs';
2
11
 
3
- // src/wire-catalog.ts
12
+ var catalogDesktopMedia = "(min-width: 44.01rem)";
13
+ function wireCatalogFilter(root) {
14
+ const view = root.ownerDocument.defaultView;
15
+ let filterValue = "";
16
+ let query = "";
17
+ let currentEditor = null;
18
+ const matches = (name) => name.toLocaleLowerCase().includes(query);
19
+ const apply = () => {
20
+ const editor = root.querySelector("[data-catalog-filter]");
21
+ const nav = root.querySelector("[data-catalog-sidebar]");
22
+ if (!editor || !nav) return;
23
+ if (editor !== currentEditor) {
24
+ currentEditor = editor;
25
+ if (readTokenSearchField(editor).query !== filterValue)
26
+ editor.textContent = filterValue;
27
+ }
28
+ const field = editor.closest(
29
+ '[data-component="token-search-field"]'
30
+ );
31
+ field.dataset.catalogFilterActive = String(Boolean(query));
32
+ const placeholderVisible = String(!filterValue);
33
+ if (field.dataset.placeholderVisible !== placeholderVisible)
34
+ field.dataset.placeholderVisible = placeholderVisible;
35
+ const clear = field.querySelector(
36
+ '[data-action="catalog-clear-filter"]'
37
+ );
38
+ clear.style.display = query ? "" : "none";
39
+ nav.dataset.catalogFilterActive = String(Boolean(query));
40
+ let visibleEntries = 0;
41
+ for (const section of nav.querySelectorAll(
42
+ "[data-catalog-section]"
43
+ )) {
44
+ const group = section.closest(
45
+ "[data-catalog-secondary-group]"
46
+ );
47
+ const headingMatches = matches(section.dataset.catalogSection) || group !== null && matches(group.dataset.catalogSecondaryGroup);
48
+ let sectionEntries = 0;
49
+ for (const entry of section.querySelectorAll(
50
+ "[data-catalog-entry-name]"
51
+ )) {
52
+ const visible = !query || headingMatches || matches(entry.dataset.catalogEntryName);
53
+ entry.hidden = !visible;
54
+ if (visible) sectionEntries++;
55
+ }
56
+ section.hidden = Boolean(query) && sectionEntries === 0;
57
+ visibleEntries += sectionEntries;
58
+ }
59
+ for (const group of nav.querySelectorAll(
60
+ "[data-catalog-secondary-group]"
61
+ )) {
62
+ group.hidden = Boolean(query) && !Array.from(
63
+ group.querySelectorAll("[data-catalog-section]")
64
+ ).some((section) => !section.hidden);
65
+ const toggle = group.querySelector("[aria-expanded]");
66
+ const content = group.querySelector(
67
+ "[data-catalog-secondary-collapsed]"
68
+ );
69
+ if (toggle && content) {
70
+ const expanded = query ? !group.hidden : content.dataset.catalogSecondaryCollapsed !== "true";
71
+ toggle.setAttribute("aria-expanded", String(expanded));
72
+ const arrow = toggle.querySelector(
73
+ '[data-component="disclosure-arrow"]'
74
+ );
75
+ if (arrow) {
76
+ arrow.dataset.open = String(expanded);
77
+ arrow.dataset.direction = expanded ? "down" : "right";
78
+ arrow.style.setProperty(
79
+ "--_kui-disclosure-arrow-rotation",
80
+ expanded ? "90deg" : "0deg"
81
+ );
82
+ }
83
+ }
84
+ }
85
+ const empty = nav.querySelector(
86
+ "[data-catalog-filter-empty]"
87
+ );
88
+ empty.dataset.visible = String(Boolean(query) && visibleEntries === 0);
89
+ };
90
+ const onInput = (event) => {
91
+ const target = event.target;
92
+ const editor = target?.closest("[data-catalog-filter]");
93
+ if (!editor || !root.contains(editor)) return;
94
+ filterValue = readTokenSearchField(editor).query;
95
+ query = filterValue.trim().toLocaleLowerCase();
96
+ apply();
97
+ };
98
+ const onClick = (event) => {
99
+ const target = event.target;
100
+ if (!target.closest('[data-action="catalog-clear-filter"]')) return;
101
+ const editor = root.querySelector("[data-catalog-filter]");
102
+ filterValue = "";
103
+ query = "";
104
+ editor.textContent = "";
105
+ apply();
106
+ editor.focus();
107
+ };
108
+ root.addEventListener("input", onInput);
109
+ root.addEventListener("click", onClick);
110
+ const observer = new view.MutationObserver(() => {
111
+ if (filterValue) apply();
112
+ });
113
+ observer.observe(root, {
114
+ attributes: true,
115
+ attributeFilter: ["data-placeholder-visible"],
116
+ childList: true,
117
+ subtree: true
118
+ });
119
+ apply();
120
+ return () => {
121
+ root.removeEventListener("input", onInput);
122
+ root.removeEventListener("click", onClick);
123
+ observer.disconnect();
124
+ };
125
+ }
126
+ function revealCatalogEntry(root, id, {
127
+ block = "nearest",
128
+ inline = "nearest",
129
+ behavior = "auto",
130
+ media = catalogDesktopMedia
131
+ } = {}) {
132
+ const view = root.ownerDocument.defaultView;
133
+ if (!view || media && !view.matchMedia(media).matches) return () => {
134
+ };
135
+ const frame = view.requestAnimationFrame(() => {
136
+ for (const item of root.querySelectorAll("[data-item-id]")) {
137
+ if (item.dataset.itemId !== id) continue;
138
+ item.scrollIntoView({ block, inline, behavior });
139
+ break;
140
+ }
141
+ });
142
+ return () => view.cancelAnimationFrame(frame);
143
+ }
4
144
  function wireCatalog(root, {
5
145
  onSelect,
6
146
  onToggleSidebar,
7
147
  onToggleTheme,
148
+ onToggleContrast,
149
+ onToggleMotion,
150
+ onSelectBackground,
8
151
  onToggleSecondary,
152
+ onToggleSettings,
9
153
  urlParam,
154
+ revealSelection,
10
155
  selectAction = "catalog-select",
11
156
  toggleSidebarAction = "catalog-toggle-sidebar",
12
157
  toggleThemeAction = "catalog-toggle-theme",
13
- toggleSecondaryAction = "catalog-toggle-secondary"
158
+ toggleContrastAction = "catalog-toggle-contrast",
159
+ toggleMotionAction = "catalog-toggle-motion",
160
+ selectBackgroundAction = "catalog-select-background",
161
+ toggleSecondaryAction = "catalog-toggle-secondary",
162
+ toggleSettingsAction = "catalog-toggle-settings",
163
+ collapsed,
164
+ sidebarSize,
165
+ sidebarStorageKey,
166
+ settingsCollapsed,
167
+ settingsSize,
168
+ settingsStorageKey,
169
+ id: catalogId = "kui-catalog",
170
+ onUxReviewProject
14
171
  }) {
172
+ let disposed = false;
173
+ const view = root.ownerDocument.defaultView;
174
+ if (onUxReviewProject && view)
175
+ void loadUxReviewProject(
176
+ view.location.href,
177
+ (input, init) => view.fetch(input, init)
178
+ ).then((directory) => {
179
+ if (directory && !disposed) onUxReviewProject(directory);
180
+ });
181
+ let cancelReveal;
15
182
  const select = (id) => {
16
183
  onSelect(id);
17
- const view = root.ownerDocument.defaultView;
18
- if (urlParam && view) {
19
- const url = new URL(view.location.href);
184
+ const view2 = root.ownerDocument.defaultView;
185
+ if (urlParam && view2) {
186
+ const url = new URL(view2.location.href);
20
187
  url.searchParams.set(urlParam, id);
21
- view.history.replaceState(null, "", url);
188
+ view2.history.replaceState(null, "", url);
189
+ }
190
+ const rail = root.ownerDocument.getElementById(`${catalogId}-left-rail`);
191
+ if (collapsed && !collapsed.peek() && rail && root.ownerDocument.defaultView?.getComputedStyle(rail).position === "absolute")
192
+ collapsed.value = true;
193
+ if (revealSelection) {
194
+ cancelReveal?.();
195
+ cancelReveal = revealCatalogEntry(
196
+ root,
197
+ id,
198
+ revealSelection === true ? void 0 : revealSelection
199
+ );
22
200
  }
23
201
  };
24
202
  const disposers = [
203
+ wireScrollDividers(root),
204
+ wireCatalogFilter(root),
25
205
  // Sidebar items AND the footer's related-entry popup-menu items both carry
26
206
  // `data-action={selectAction}` + `data-item-id`, so one delegated click covers both.
27
- delegate(root, "click", `[data-action="${selectAction}"]`, (_event, element) => {
28
- const id = element.dataset.itemId;
29
- if (id) select(id);
30
- })
207
+ delegate(
208
+ root,
209
+ "click",
210
+ `[data-action="${selectAction}"]`,
211
+ (_event, element) => {
212
+ const id = element.dataset.itemId;
213
+ if (id) select(id);
214
+ }
215
+ )
31
216
  ];
32
217
  if (onToggleSidebar) {
33
- disposers.push(delegate(root, "click", `[data-action="${toggleSidebarAction}"]`, () => onToggleSidebar()));
218
+ disposers.push(
219
+ delegate(
220
+ root,
221
+ "click",
222
+ `[data-action="${toggleSidebarAction}"]`,
223
+ () => onToggleSidebar()
224
+ )
225
+ );
34
226
  }
35
227
  if (onToggleTheme) {
36
- disposers.push(delegate(root, "click", `[data-action="${toggleThemeAction}"]`, () => onToggleTheme()));
228
+ disposers.push(
229
+ delegate(
230
+ root,
231
+ "click",
232
+ `[data-action="${toggleThemeAction}"]`,
233
+ () => onToggleTheme()
234
+ )
235
+ );
236
+ }
237
+ if (onToggleContrast) {
238
+ disposers.push(
239
+ delegate(
240
+ root,
241
+ "click",
242
+ `[data-action="${toggleContrastAction}"]`,
243
+ () => onToggleContrast()
244
+ )
245
+ );
246
+ }
247
+ if (onToggleMotion) {
248
+ disposers.push(
249
+ delegate(
250
+ root,
251
+ "click",
252
+ `[data-action="${toggleMotionAction}"]`,
253
+ () => onToggleMotion()
254
+ )
255
+ );
256
+ }
257
+ if (onSelectBackground) {
258
+ disposers.push(
259
+ delegate(
260
+ root,
261
+ "click",
262
+ `[data-action="${selectBackgroundAction}"]`,
263
+ (_event, element) => {
264
+ const style = element.getAttribute("data-background-choice");
265
+ if (style === "checkerboard" || style === "vertical-stripes" || style === "layout-guide" || style === "surface" || style === "sunken")
266
+ onSelectBackground(style);
267
+ }
268
+ )
269
+ );
37
270
  }
38
271
  if (onToggleSecondary) {
39
- disposers.push(delegate(root, "click", `[data-action="${toggleSecondaryAction}"]`, () => onToggleSecondary()));
272
+ disposers.push(
273
+ delegate(
274
+ root,
275
+ "click",
276
+ `[data-action="${toggleSecondaryAction}"]`,
277
+ () => onToggleSecondary()
278
+ )
279
+ );
280
+ }
281
+ if (settingsCollapsed || onToggleSettings) {
282
+ disposers.push(
283
+ delegate(root, "click", `[data-action="${toggleSettingsAction}"]`, () => {
284
+ if (settingsCollapsed)
285
+ settingsCollapsed.value = !settingsCollapsed.peek();
286
+ onToggleSettings?.();
287
+ })
288
+ );
40
289
  }
290
+ const panels = {};
291
+ if (collapsed || sidebarSize)
292
+ panels.leftRail = {
293
+ collapsed,
294
+ size: sidebarSize,
295
+ storageKey: sidebarStorageKey
296
+ };
297
+ if (settingsCollapsed || settingsSize)
298
+ panels.rightRail = {
299
+ collapsed: settingsCollapsed,
300
+ size: settingsSize,
301
+ storageKey: settingsStorageKey
302
+ };
303
+ if (panels.leftRail || panels.rightRail)
304
+ disposers.push(wireWorkbench(root, { id: catalogId, panels }));
305
+ if (onUxReviewProject)
306
+ disposers.push(
307
+ delegate(
308
+ root,
309
+ "click",
310
+ 'a.kui-toolbar-action-link[href^="uxreview://capture"]',
311
+ (_event, element) => {
312
+ const link = element;
313
+ const url = new URL(link.href);
314
+ const context = (url.searchParams.get("context") ?? "").replace(
315
+ /\nPage: [^\n]*$/,
316
+ ""
317
+ );
318
+ url.searchParams.set(
319
+ "context",
320
+ `${context}
321
+ Page: ${link.ownerDocument.location.href}`
322
+ );
323
+ link.href = url.href;
324
+ }
325
+ )
326
+ );
41
327
  return () => {
328
+ disposed = true;
329
+ cancelReveal?.();
42
330
  for (const dispose of disposers.splice(0)) dispose();
43
331
  };
44
332
  }
45
333
 
46
- export { wireCatalog };
334
+ export { revealCatalogEntry, wireCatalog };
47
335
 
48
336
  //# sourceMappingURL=wire-catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/wire-catalog.ts"],"names":[],"mappings":";;;AA0BO,SAAS,YACd,IAAA,EACA;AAAA,EACE,QAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,GAAe,gBAAA;AAAA,EACf,mBAAA,GAAsB,wBAAA;AAAA,EACtB,iBAAA,GAAoB,sBAAA;AAAA,EACpB,qBAAA,GAAwB;AAC1B,CAAA,EACY;AACZ,EAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAe;AAC7B,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,MAAM,IAAA,GAAO,KAAK,aAAA,CAAc,WAAA;AAChC,IAAA,IAAI,YAAY,IAAA,EAAM;AACpB,MAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,IAAA,CAAK,SAAS,IAAI,CAAA;AACtC,MAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,EAAE,CAAA;AACjC,MAAA,IAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,IAAA,EAAM,EAAA,EAAI,GAAG,CAAA;AAAA,IACzC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,GAA+B;AAAA;AAAA;AAAA,IAGnC,QAAA,CAAS,MAAM,OAAA,EAAS,CAAA,cAAA,EAAiB,YAAY,CAAA,EAAA,CAAA,EAAM,CAAC,QAAQ,OAAA,KAAY;AAC9E,MAAA,MAAM,EAAA,GAAM,QAAwB,OAAA,CAAQ,MAAA;AAC5C,MAAA,IAAI,EAAA,SAAW,EAAE,CAAA;AAAA,IACnB,CAAC;AAAA,GACH;AACA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,SAAA,CAAU,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,OAAA,EAAS,CAAA,cAAA,EAAiB,mBAAmB,CAAA,EAAA,CAAA,EAAM,MAAM,eAAA,EAAiB,CAAC,CAAA;AAAA,EAC3G;AACA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,SAAA,CAAU,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,OAAA,EAAS,CAAA,cAAA,EAAiB,iBAAiB,CAAA,EAAA,CAAA,EAAM,MAAM,aAAA,EAAe,CAAC,CAAA;AAAA,EACvG;AACA,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,SAAA,CAAU,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,OAAA,EAAS,CAAA,cAAA,EAAiB,qBAAqB,CAAA,EAAA,CAAA,EAAM,MAAM,iBAAA,EAAmB,CAAC,CAAA;AAAA,EAC/G;AACA,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,MAAW,OAAA,IAAW,SAAA,CAAU,MAAA,CAAO,CAAC,GAAG,OAAA,EAAQ;AAAA,EACrD,CAAA;AACF","file":"wire-catalog.js","sourcesContent":["import { delegate } from 'kerfjs';\n\nexport interface WireCatalogOptions {\n /** Invoked with the entry id when a sidebar item or a related-entry option is chosen. */\n onSelect: (id: string) => void;\n /** Invoked when the sidebar collapse/expand control is activated. */\n onToggleSidebar?: () => void;\n /** Invoked when the theme toggle is activated. */\n onToggleTheme?: () => void;\n /** Invoked when the secondary (ecosystem) group's disclosure toggle is activated. */\n onToggleSecondary?: () => void;\n /** When set, `?<urlParam>=<id>` is written on select via `history.replaceState`. */\n urlParam?: string;\n selectAction?: string;\n toggleSidebarAction?: string;\n toggleThemeAction?: string;\n toggleSecondaryAction?: string;\n}\n\n/**\n * Wire a {@link Catalog}'s interactions with one delegated listener set: sidebar\n * item selection (and the related-entry popup menu), the sidebar collapse toggle, and\n * the theme toggle. The app owns the `active`/`collapsed`/`theme` signals and updates\n * them in the callbacks; optionally mirror the active id into the URL via `urlParam`.\n * Returns a disposer.\n */\nexport function wireCatalog(\n root: HTMLElement,\n {\n onSelect,\n onToggleSidebar,\n onToggleTheme,\n onToggleSecondary,\n urlParam,\n selectAction = 'catalog-select',\n toggleSidebarAction = 'catalog-toggle-sidebar',\n toggleThemeAction = 'catalog-toggle-theme',\n toggleSecondaryAction = 'catalog-toggle-secondary',\n }: WireCatalogOptions,\n): () => void {\n const select = (id: string) => {\n onSelect(id);\n const view = root.ownerDocument.defaultView;\n if (urlParam && view) {\n const url = new URL(view.location.href);\n url.searchParams.set(urlParam, id);\n view.history.replaceState(null, '', url);\n }\n };\n\n const disposers: Array<() => void> = [\n // Sidebar items AND the footer's related-entry popup-menu items both carry\n // `data-action={selectAction}` + `data-item-id`, so one delegated click covers both.\n delegate(root, 'click', `[data-action=\"${selectAction}\"]`, (_event, element) => {\n const id = (element as HTMLElement).dataset.itemId;\n if (id) select(id);\n }),\n ];\n if (onToggleSidebar) {\n disposers.push(delegate(root, 'click', `[data-action=\"${toggleSidebarAction}\"]`, () => onToggleSidebar()));\n }\n if (onToggleTheme) {\n disposers.push(delegate(root, 'click', `[data-action=\"${toggleThemeAction}\"]`, () => onToggleTheme()));\n }\n if (onToggleSecondary) {\n disposers.push(delegate(root, 'click', `[data-action=\"${toggleSecondaryAction}\"]`, () => onToggleSecondary()));\n }\n return () => {\n for (const dispose of disposers.splice(0)) dispose();\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/catalog/wiring/wire-catalog.ts"],"names":["view"],"mappings":";;;;;;;;;;;AA8GA,IAAM,mBAAA,GAAsB,uBAAA;AAG5B,SAAS,kBAAkB,IAAA,EAA+B;AACxD,EAAA,MAAM,IAAA,GAAO,KAAK,aAAA,CAAc,WAAA;AAChC,EAAA,IAAI,WAAA,GAAc,EAAA;AAClB,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,IAAI,aAAA,GAAoC,IAAA;AACxC,EAAA,MAAM,UAAU,CAAC,IAAA,KAAiB,KAAK,iBAAA,EAAkB,CAAE,SAAS,KAAK,CAAA;AACzE,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAA2B,uBAAuB,CAAA;AACtE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,aAAA,CAA2B,wBAAwB,CAAA;AACpE,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,GAAA,EAAK;AACrB,IAAA,IAAI,WAAW,aAAA,EAAe;AAC5B,MAAA,aAAA,GAAgB,MAAA;AAChB,MAAA,IAAI,oBAAA,CAAqB,MAAM,CAAA,CAAE,KAAA,KAAU,WAAA;AACzC,QAAA,MAAA,CAAO,WAAA,GAAc,WAAA;AAAA,IACzB;AACA,IAAA,MAAM,QAAQ,MAAA,CAAO,OAAA;AAAA,MACnB;AAAA,KACF;AACA,IAAA,KAAA,CAAM,OAAA,CAAQ,mBAAA,GAAsB,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAA;AACzD,IAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,CAAC,WAAW,CAAA;AAC9C,IAAA,IAAI,KAAA,CAAM,QAAQ,kBAAA,KAAuB,kBAAA;AACvC,MAAA,KAAA,CAAM,QAAQ,kBAAA,GAAqB,kBAAA;AACrC,IAAA,MAAM,QAAQ,KAAA,CAAM,aAAA;AAAA,MAClB;AAAA,KACF;AACA,IAAA,KAAA,CAAM,KAAA,CAAM,OAAA,GAAU,KAAA,GAAQ,EAAA,GAAK,MAAA;AACnC,IAAA,GAAA,CAAI,OAAA,CAAQ,mBAAA,GAAsB,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAA;AACvD,IAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,IAAA,KAAA,MAAW,WAAW,GAAA,CAAI,gBAAA;AAAA,MACxB;AAAA,KACF,EAAG;AACD,MAAA,MAAM,QAAQ,OAAA,CAAQ,OAAA;AAAA,QACpB;AAAA,OACF;AACA,MAAA,MAAM,cAAA,GACJ,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,cAAe,CAAA,IACtC,KAAA,KAAU,IAAA,IAAQ,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,qBAAsB,CAAA;AACjE,MAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,MAAA,KAAA,MAAW,SAAS,OAAA,CAAQ,gBAAA;AAAA,QAC1B;AAAA,OACF,EAAG;AACD,QAAA,MAAM,UACJ,CAAC,KAAA,IAAS,kBAAkB,OAAA,CAAQ,KAAA,CAAM,QAAQ,gBAAiB,CAAA;AACrE,QAAA,KAAA,CAAM,SAAS,CAAC,OAAA;AAChB,QAAA,IAAI,OAAA,EAAS,cAAA,EAAA;AAAA,MACf;AACA,MAAA,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,KAAK,CAAA,IAAK,cAAA,KAAmB,CAAA;AACtD,MAAA,cAAA,IAAkB,cAAA;AAAA,IACpB;AACA,IAAA,KAAA,MAAW,SAAS,GAAA,CAAI,gBAAA;AAAA,MACtB;AAAA,KACF,EAAG;AACD,MAAA,KAAA,CAAM,MAAA,GACJ,OAAA,CAAQ,KAAK,CAAA,IACb,CAAC,KAAA,CAAM,IAAA;AAAA,QACL,KAAA,CAAM,iBAA8B,wBAAwB;AAAA,QAC5D,IAAA,CAAK,CAAC,OAAA,KAAY,CAAC,QAAQ,MAAM,CAAA;AACrC,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,aAAA,CAA2B,iBAAiB,CAAA;AACjE,MAAA,MAAM,UAAU,KAAA,CAAM,aAAA;AAAA,QACpB;AAAA,OACF;AACA,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,MAAM,WAAW,KAAA,GACb,CAAC,MAAM,MAAA,GACP,OAAA,CAAQ,QAAQ,yBAAA,KAA8B,MAAA;AAClD,QAAA,MAAA,CAAO,YAAA,CAAa,eAAA,EAAiB,MAAA,CAAO,QAAQ,CAAC,CAAA;AACrD,QAAA,MAAM,QAAQ,MAAA,CAAO,aAAA;AAAA,UACnB;AAAA,SACF;AACA,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,KAAA,CAAM,OAAA,CAAQ,IAAA,GAAO,MAAA,CAAO,QAAQ,CAAA;AACpC,UAAA,KAAA,CAAM,OAAA,CAAQ,SAAA,GAAY,QAAA,GAAW,MAAA,GAAS,OAAA;AAC9C,UAAA,KAAA,CAAM,KAAA,CAAM,WAAA;AAAA,YACV,kCAAA;AAAA,YACA,WAAW,OAAA,GAAU;AAAA,WACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,QAAQ,GAAA,CAAI,aAAA;AAAA,MAChB;AAAA,KACF;AACA,IAAA,KAAA,CAAM,QAAQ,OAAA,GAAU,MAAA,CAAO,QAAQ,KAAK,CAAA,IAAK,mBAAmB,CAAC,CAAA;AAAA,EACvE,CAAA;AACA,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAiB;AAChC,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,MAAM,MAAA,GAAS,MAAA,EAAQ,OAAA,CAAqB,uBAAuB,CAAA;AACnE,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACvC,IAAA,WAAA,GAAc,oBAAA,CAAqB,MAAM,CAAA,CAAE,KAAA;AAC3C,IAAA,KAAA,GAAQ,WAAA,CAAY,IAAA,EAAK,CAAE,iBAAA,EAAkB;AAC7C,IAAA,KAAA,EAAM;AAAA,EACR,CAAA;AACA,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAiB;AAChC,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,CAAQ,sCAAsC,CAAA,EAAG;AAC7D,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAA2B,uBAAuB,CAAA;AACtE,IAAA,WAAA,GAAc,EAAA;AACd,IAAA,KAAA,GAAQ,EAAA;AACR,IAAA,MAAA,CAAO,WAAA,GAAc,EAAA;AACrB,IAAA,KAAA,EAAM;AACN,IAAA,MAAA,CAAO,KAAA,EAAM;AAAA,EACf,CAAA;AACA,EAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACtC,EAAA,IAAA,CAAK,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,IAAI,IAAA,CAAK,gBAAA,CAAiB,MAAM;AAC/C,IAAA,IAAI,aAAa,KAAA,EAAM;AAAA,EACzB,CAAC,CAAA;AACD,EAAA,QAAA,CAAS,QAAQ,IAAA,EAAM;AAAA,IACrB,UAAA,EAAY,IAAA;AAAA,IACZ,eAAA,EAAiB,CAAC,0BAA0B,CAAA;AAAA,IAC5C,SAAA,EAAW,IAAA;AAAA,IACX,OAAA,EAAS;AAAA,GACV,CAAA;AACD,EAAA,KAAA,EAAM;AACN,EAAA,OAAO,MAAM;AACX,IAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,OAAO,CAAA;AACzC,IAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,OAAO,CAAA;AACzC,IAAA,QAAA,CAAS,UAAA,EAAW;AAAA,EACtB,CAAA;AACF;AAMO,SAAS,kBAAA,CACd,MACA,EAAA,EACA;AAAA,EACE,KAAA,GAAQ,SAAA;AAAA,EACR,MAAA,GAAS,SAAA;AAAA,EACT,QAAA,GAAW,MAAA;AAAA,EACX,KAAA,GAAQ;AACV,CAAA,GAA0B,EAAC,EACf;AACZ,EAAA,MAAM,IAAA,GAAO,KAAK,aAAA,CAAc,WAAA;AAChC,EAAA,IAAI,CAAC,IAAA,IAAS,KAAA,IAAS,CAAC,IAAA,CAAK,WAAW,KAAK,CAAA,CAAE,OAAA,EAAU,OAAO,MAAM;AAAA,EAAC,CAAA;AACvE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,qBAAA,CAAsB,MAAM;AAC7C,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,gBAAA,CAA8B,gBAAgB,CAAA,EAAG;AACvE,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,KAAW,EAAA,EAAI;AAChC,MAAA,IAAA,CAAK,cAAA,CAAe,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAA;AAC/C,MAAA;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAM,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AAC9C;AAWO,SAAS,YACd,IAAA,EACA;AAAA,EACE,QAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA,GAAe,gBAAA;AAAA,EACf,mBAAA,GAAsB,wBAAA;AAAA,EACtB,iBAAA,GAAoB,sBAAA;AAAA,EACpB,oBAAA,GAAuB,yBAAA;AAAA,EACvB,kBAAA,GAAqB,uBAAA;AAAA,EACrB,sBAAA,GAAyB,2BAAA;AAAA,EACzB,qBAAA,GAAwB,0BAAA;AAAA,EACxB,oBAAA,GAAuB,yBAAA;AAAA,EACvB,SAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,IAAI,SAAA,GAAY,aAAA;AAAA,EAChB;AACF,CAAA,EACY;AACZ,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,MAAM,IAAA,GAAO,KAAK,aAAA,CAAc,WAAA;AAChC,EAAA,IAAI,iBAAA,IAAqB,IAAA;AACvB,IAAA,KAAK,mBAAA;AAAA,MAAoB,KAAK,QAAA,CAAS,IAAA;AAAA,MAAM,CAAC,KAAA,EAAO,IAAA,KACnD,IAAA,CAAK,KAAA,CAAM,OAAO,IAAI;AAAA,KACxB,CAAE,IAAA,CAAK,CAAC,SAAA,KAAc;AACpB,MAAA,IAAI,SAAA,IAAa,CAAC,QAAA,EAAU,iBAAA,CAAkB,SAAS,CAAA;AAAA,IACzD,CAAC,CAAA;AACH,EAAA,IAAI,YAAA;AACJ,EAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAe;AAC7B,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,MAAMA,KAAAA,GAAO,KAAK,aAAA,CAAc,WAAA;AAChC,IAAA,IAAI,YAAYA,KAAAA,EAAM;AACpB,MAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAIA,KAAAA,CAAK,SAAS,IAAI,CAAA;AACtC,MAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,EAAE,CAAA;AACjC,MAAAA,KAAAA,CAAK,OAAA,CAAQ,YAAA,CAAa,IAAA,EAAM,IAAI,GAAG,CAAA;AAAA,IACzC;AAEA,IAAA,MAAM,OAAO,IAAA,CAAK,aAAA,CAAc,cAAA,CAAe,CAAA,EAAG,SAAS,CAAA,UAAA,CAAY,CAAA;AACvE,IAAA,IACE,SAAA,IACA,CAAC,SAAA,CAAU,IAAA,EAAK,IAChB,IAAA,IACA,IAAA,CAAK,aAAA,CAAc,WAAA,EAAa,gBAAA,CAAiB,IAAI,CAAA,CAAE,QAAA,KACrD,UAAA;AAEF,MAAA,SAAA,CAAU,KAAA,GAAQ,IAAA;AACpB,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,YAAA,IAAe;AACf,MAAA,YAAA,GAAe,kBAAA;AAAA,QACb,IAAA;AAAA,QACA,EAAA;AAAA,QACA,eAAA,KAAoB,OAAO,MAAA,GAAY;AAAA,OACzC;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,GAA+B;AAAA,IACnC,mBAAmB,IAAI,CAAA;AAAA,IACvB,kBAAkB,IAAI,CAAA;AAAA;AAAA;AAAA,IAGtB,QAAA;AAAA,MACE,IAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAiB,YAAY,CAAA,EAAA,CAAA;AAAA,MAC7B,CAAC,QAAQ,OAAA,KAAY;AACnB,QAAA,MAAM,EAAA,GAAM,QAAwB,OAAA,CAAQ,MAAA;AAC5C,QAAA,IAAI,EAAA,SAAW,EAAE,CAAA;AAAA,MACnB;AAAA;AACF,GACF;AACA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,QAAA;AAAA,QAAS,IAAA;AAAA,QAAM,OAAA;AAAA,QAAS,iBAAiB,mBAAmB,CAAA,EAAA,CAAA;AAAA,QAAM,MAChE,eAAA;AAAgB;AAClB,KACF;AAAA,EACF;AACA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,QAAA;AAAA,QAAS,IAAA;AAAA,QAAM,OAAA;AAAA,QAAS,iBAAiB,iBAAiB,CAAA,EAAA,CAAA;AAAA,QAAM,MAC9D,aAAA;AAAc;AAChB,KACF;AAAA,EACF;AACA,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,QAAA;AAAA,QAAS,IAAA;AAAA,QAAM,OAAA;AAAA,QAAS,iBAAiB,oBAAoB,CAAA,EAAA,CAAA;AAAA,QAAM,MACjE,gBAAA;AAAiB;AACnB,KACF;AAAA,EACF;AACA,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,QAAA;AAAA,QAAS,IAAA;AAAA,QAAM,OAAA;AAAA,QAAS,iBAAiB,kBAAkB,CAAA,EAAA,CAAA;AAAA,QAAM,MAC/D,cAAA;AAAe;AACjB,KACF;AAAA,EACF;AACA,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,QAAA;AAAA,QACE,IAAA;AAAA,QACA,OAAA;AAAA,QACA,iBAAiB,sBAAsB,CAAA,EAAA,CAAA;AAAA,QACvC,CAAC,QAAQ,OAAA,KAAY;AACnB,UAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,YAAA,CAAa,wBAAwB,CAAA;AAC3D,UAAA,IACE,KAAA,KAAU,kBACV,KAAA,KAAU,kBAAA,IACV,UAAU,cAAA,IACV,KAAA,KAAU,aACV,KAAA,KAAU,QAAA;AAEV,YAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,QAC5B;AAAA;AACF,KACF;AAAA,EACF;AACA,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,QAAA;AAAA,QAAS,IAAA;AAAA,QAAM,OAAA;AAAA,QAAS,iBAAiB,qBAAqB,CAAA,EAAA,CAAA;AAAA,QAAM,MAClE,iBAAA;AAAkB;AACpB,KACF;AAAA,EACF;AACA,EAAA,IAAI,qBAAqB,gBAAA,EAAkB;AACzC,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,SAAS,IAAA,EAAM,OAAA,EAAS,CAAA,cAAA,EAAiB,oBAAoB,MAAM,MAAM;AACvE,QAAA,IAAI,iBAAA;AACF,UAAA,iBAAA,CAAkB,KAAA,GAAQ,CAAC,iBAAA,CAAkB,IAAA,EAAK;AACpD,QAAA,gBAAA,IAAmB;AAAA,MACrB,CAAC;AAAA,KACH;AAAA,EACF;AAEA,EAAA,MAAM,SAAyC,EAAC;AAChD,EAAA,IAAI,SAAA,IAAa,WAAA;AACf,IAAA,MAAA,CAAO,QAAA,GAAW;AAAA,MAChB,SAAA;AAAA,MACA,IAAA,EAAM,WAAA;AAAA,MACN,UAAA,EAAY;AAAA,KACd;AACF,EAAA,IAAI,iBAAA,IAAqB,YAAA;AACvB,IAAA,MAAA,CAAO,SAAA,GAAY;AAAA,MACjB,SAAA,EAAW,iBAAA;AAAA,MACX,IAAA,EAAM,YAAA;AAAA,MACN,UAAA,EAAY;AAAA,KACd;AACF,EAAA,IAAI,MAAA,CAAO,YAAY,MAAA,CAAO,SAAA;AAC5B,IAAA,SAAA,CAAU,IAAA,CAAK,cAAc,IAAA,EAAM,EAAE,IAAI,SAAA,EAAW,MAAA,EAAQ,CAAC,CAAA;AAC/D,EAAA,IAAI,iBAAA;AAIF,IAAA,SAAA,CAAU,IAAA;AAAA,MACR,QAAA;AAAA,QACE,IAAA;AAAA,QACA,OAAA;AAAA,QACA,uDAAA;AAAA,QACA,CAAC,QAAQ,OAAA,KAAY;AACnB,UAAA,MAAM,IAAA,GAAO,OAAA;AACb,UAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAC7B,UAAA,MAAM,WAAW,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,SAAS,KAAK,EAAA,EAAI,OAAA;AAAA,YACtD,iBAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,GAAA,CAAI,YAAA,CAAa,GAAA;AAAA,YACf,SAAA;AAAA,YACA,GAAG,OAAO;AAAA,MAAA,EAAW,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,IAAI,CAAA;AAAA,WACvD;AACA,UAAA,IAAA,CAAK,OAAO,GAAA,CAAI,IAAA;AAAA,QAClB;AAAA;AACF,KACF;AACF,EAAA,OAAO,MAAM;AACX,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,YAAA,IAAe;AACf,IAAA,KAAA,MAAW,OAAA,IAAW,SAAA,CAAU,MAAA,CAAO,CAAC,GAAG,OAAA,EAAQ;AAAA,EACrD,CAAA;AACF","file":"wire-catalog.js","sourcesContent":["import { delegate, type Signal } from 'kerfjs';\n\nimport { readTokenSearchField } from '../../components/forms/token-search-field/token-search-field.js';\nimport {\n wireWorkbench,\n type WireWorkbenchOptions,\n} from '../../components/layout/workbench/wiring/wire-workbench.js';\nimport { wireScrollDividers } from '../../wiring/wire-scroll-dividers.js';\nimport type { CatalogBackgroundStyle } from '../types.js';\nimport { loadUxReviewProject } from '../ux-review.js';\n\nexport interface WireCatalogOptions {\n /** Invoked with the entry id when a sidebar item or a related-entry option is chosen. */\n onSelect: (id: string) => void;\n /** Invoked when the sidebar collapse/expand control is activated. */\n onToggleSidebar?: () => void;\n /** Invoked when the theme toggle is activated. */\n onToggleTheme?: () => void;\n /** Report a contrast-toggle press; the app updates its signal and applies the preference. */\n onToggleContrast?: () => void;\n /** Report a reduced-motion-toggle press; the app updates its signal and applies the preference. */\n onToggleMotion?: () => void;\n /** Report a preview background choice; the app updates `backgroundStyle`. */\n onSelectBackground?: (style: CatalogBackgroundStyle) => void;\n /**\n * Invoked when the settings pane toggle is activated. With\n * `settingsCollapsed`, `wireCatalog` has already flipped the signal.\n */\n onToggleSettings?: () => void;\n /** Invoked when the secondary (ecosystem) group's disclosure toggle is activated. */\n onToggleSecondary?: () => void;\n /** When set, `?<urlParam>=<id>` is written on select via `history.replaceState`. */\n urlParam?: string;\n /**\n * Reveal the chosen sidebar row after selection. `true` uses desktop-safe\n * defaults; pass options to customize scroll alignment or the media guard.\n */\n revealSelection?: boolean | CatalogRevealOptions;\n selectAction?: string;\n toggleSidebarAction?: string;\n toggleThemeAction?: string;\n toggleContrastAction?: string;\n toggleMotionAction?: string;\n selectBackgroundAction?: string;\n toggleSecondaryAction?: string;\n toggleSettingsAction?: string;\n /**\n * The sidebar's app-owned collapsed flag. With it, the catalog's Workbench\n * sidebar is wired like any Workbench rail: it becomes a transient overlay\n * on a small screen (collapsed as the breakpoint applies, closed on Escape\n * or a press outside, focus handed back), and choosing an entry from the\n * open overlay closes it.\n */\n collapsed?: Signal<boolean>;\n /**\n * The app-owned sidebar width signal for a Catalog rendered with\n * `sidebar={{ resizable: true, size: sidebarSize.value }}`. Each committed\n * drag or keyboard resize is written to it.\n */\n sidebarSize?: Signal<number>;\n /**\n * With `sidebarSize`, load and save the width under this storage key so the\n * catalog remembers the user's sidebar width.\n */\n sidebarStorageKey?: string;\n /**\n * The settings pane's app-owned collapsed flag, rendered as the Catalog's\n * `settingsCollapsed`. With it, `wireCatalog` owns the pane's toggle (each\n * press flips the signal) and wires the pane like any Workbench rail: a\n * transient overlay on a small screen (collapsed as the breakpoint applies,\n * closed on Escape or a press outside, focus handed back).\n */\n settingsCollapsed?: Signal<boolean>;\n /**\n * The app-owned settings pane width signal for a Catalog rendered with\n * `settingsPanel={{ resizable: true, size: settingsSize.value }}`. Each\n * committed drag or keyboard resize is written to it.\n */\n settingsSize?: Signal<number>;\n /**\n * With `settingsSize`, load and save the width under this storage key so\n * the catalog remembers the user's settings pane width.\n */\n settingsStorageKey?: string;\n /** The Catalog's `id`, when it is not the default `kui-catalog`. */\n id?: string;\n /**\n * Ask the page's server once for its UX Review project directory (served by\n * `uxReviewPlugin` from `@kerfjs/ui/vite-ux-review`) and report it, so the\n * app can render the Catalog with `uxReview`. Never called on static\n * hosting or a server without the plugin.\n */\n onUxReviewProject?: (projectDirectory: string) => void;\n}\n\nexport interface CatalogRevealOptions {\n /** Scroll alignment within the sidebar. Default `'nearest'`. */\n block?: ScrollLogicalPosition;\n /** Cross-axis alignment. Default `'nearest'`. */\n inline?: ScrollLogicalPosition;\n /** Scroll behavior. Default `'auto'`. */\n behavior?: ScrollBehavior;\n /**\n * Only reveal when this media query matches. Defaults to the Catalog's\n * desktop layout; pass `false` to reveal at every viewport size.\n */\n media?: string | false;\n}\n\n// The Workbench keeps the sidebar inline above its `narrow` breakpoint (704px).\nconst catalogDesktopMedia = '(min-width: 44.01rem)';\n\n/** Keep the sidebar filter local to the shared Catalog, including across controlled rerenders. */\nfunction wireCatalogFilter(root: HTMLElement): () => void {\n const view = root.ownerDocument.defaultView!;\n let filterValue = '';\n let query = '';\n let currentEditor: HTMLElement | null = null;\n const matches = (name: string) => name.toLocaleLowerCase().includes(query);\n const apply = () => {\n const editor = root.querySelector<HTMLElement>('[data-catalog-filter]');\n const nav = root.querySelector<HTMLElement>('[data-catalog-sidebar]');\n if (!editor || !nav) return;\n if (editor !== currentEditor) {\n currentEditor = editor;\n if (readTokenSearchField(editor).query !== filterValue)\n editor.textContent = filterValue;\n }\n const field = editor.closest<HTMLElement>(\n '[data-component=\"token-search-field\"]',\n )!;\n field.dataset.catalogFilterActive = String(Boolean(query));\n const placeholderVisible = String(!filterValue);\n if (field.dataset.placeholderVisible !== placeholderVisible)\n field.dataset.placeholderVisible = placeholderVisible;\n const clear = field.querySelector<HTMLElement>(\n '[data-action=\"catalog-clear-filter\"]',\n )!;\n clear.style.display = query ? '' : 'none';\n nav.dataset.catalogFilterActive = String(Boolean(query));\n let visibleEntries = 0;\n for (const section of nav.querySelectorAll<HTMLElement>(\n '[data-catalog-section]',\n )) {\n const group = section.closest<HTMLElement>(\n '[data-catalog-secondary-group]',\n );\n const headingMatches =\n matches(section.dataset.catalogSection!) ||\n (group !== null && matches(group.dataset.catalogSecondaryGroup!));\n let sectionEntries = 0;\n for (const entry of section.querySelectorAll<HTMLElement>(\n '[data-catalog-entry-name]',\n )) {\n const visible =\n !query || headingMatches || matches(entry.dataset.catalogEntryName!);\n entry.hidden = !visible;\n if (visible) sectionEntries++;\n }\n section.hidden = Boolean(query) && sectionEntries === 0;\n visibleEntries += sectionEntries;\n }\n for (const group of nav.querySelectorAll<HTMLElement>(\n '[data-catalog-secondary-group]',\n )) {\n group.hidden =\n Boolean(query) &&\n !Array.from(\n group.querySelectorAll<HTMLElement>('[data-catalog-section]'),\n ).some((section) => !section.hidden);\n const toggle = group.querySelector<HTMLElement>('[aria-expanded]');\n const content = group.querySelector<HTMLElement>(\n '[data-catalog-secondary-collapsed]',\n );\n if (toggle && content) {\n const expanded = query\n ? !group.hidden\n : content.dataset.catalogSecondaryCollapsed !== 'true';\n toggle.setAttribute('aria-expanded', String(expanded));\n const arrow = toggle.querySelector<HTMLElement>(\n '[data-component=\"disclosure-arrow\"]',\n );\n if (arrow) {\n arrow.dataset.open = String(expanded);\n arrow.dataset.direction = expanded ? 'down' : 'right';\n arrow.style.setProperty(\n '--_kui-disclosure-arrow-rotation',\n expanded ? '90deg' : '0deg',\n );\n }\n }\n }\n const empty = nav.querySelector<HTMLElement>(\n '[data-catalog-filter-empty]',\n )!;\n empty.dataset.visible = String(Boolean(query) && visibleEntries === 0);\n };\n const onInput = (event: Event) => {\n const target = event.target as HTMLElement | null;\n const editor = target?.closest<HTMLElement>('[data-catalog-filter]');\n if (!editor || !root.contains(editor)) return;\n filterValue = readTokenSearchField(editor).query;\n query = filterValue.trim().toLocaleLowerCase();\n apply();\n };\n const onClick = (event: Event) => {\n const target = event.target as Element;\n if (!target.closest('[data-action=\"catalog-clear-filter\"]')) return;\n const editor = root.querySelector<HTMLElement>('[data-catalog-filter]')!;\n filterValue = '';\n query = '';\n editor.textContent = '';\n apply();\n editor.focus();\n };\n root.addEventListener('input', onInput);\n root.addEventListener('click', onClick);\n const observer = new view.MutationObserver(() => {\n if (filterValue) apply();\n });\n observer.observe(root, {\n attributes: true,\n attributeFilter: ['data-placeholder-visible'],\n childList: true,\n subtree: true,\n });\n apply();\n return () => {\n root.removeEventListener('input', onInput);\n root.removeEventListener('click', onClick);\n observer.disconnect();\n };\n}\n\n/**\n * Reveal one Catalog sidebar entry after the controlled render settles without\n * moving focus. Returns a cancellation function for rapid selection changes.\n */\nexport function revealCatalogEntry(\n root: HTMLElement,\n id: string,\n {\n block = 'nearest',\n inline = 'nearest',\n behavior = 'auto',\n media = catalogDesktopMedia,\n }: CatalogRevealOptions = {},\n): () => void {\n const view = root.ownerDocument.defaultView;\n if (!view || (media && !view.matchMedia(media).matches)) return () => {};\n const frame = view.requestAnimationFrame(() => {\n for (const item of root.querySelectorAll<HTMLElement>('[data-item-id]')) {\n if (item.dataset.itemId !== id) continue;\n item.scrollIntoView({ block, inline, behavior });\n break;\n }\n });\n return () => view.cancelAnimationFrame(frame);\n}\n\n/**\n * Wire a {@link Catalog}'s interactions with one delegated listener set: sidebar\n * item selection (and the related-entry popup menu), the sidebar collapse toggle,\n * the settings pane toggle, and the theme toggle. The app owns the `active`/`collapsed`/`theme` signals and updates\n * them in the callbacks; optionally mirror the active id into the URL via `urlParam`.\n * It also wires the scroll dividers below root (`wireScrollDividers`), so the\n * catalog's panes and every example in it show their chrome dividers only\n * while scrolled. Returns a disposer.\n */\nexport function wireCatalog(\n root: HTMLElement,\n {\n onSelect,\n onToggleSidebar,\n onToggleTheme,\n onToggleContrast,\n onToggleMotion,\n onSelectBackground,\n onToggleSecondary,\n onToggleSettings,\n urlParam,\n revealSelection,\n selectAction = 'catalog-select',\n toggleSidebarAction = 'catalog-toggle-sidebar',\n toggleThemeAction = 'catalog-toggle-theme',\n toggleContrastAction = 'catalog-toggle-contrast',\n toggleMotionAction = 'catalog-toggle-motion',\n selectBackgroundAction = 'catalog-select-background',\n toggleSecondaryAction = 'catalog-toggle-secondary',\n toggleSettingsAction = 'catalog-toggle-settings',\n collapsed,\n sidebarSize,\n sidebarStorageKey,\n settingsCollapsed,\n settingsSize,\n settingsStorageKey,\n id: catalogId = 'kui-catalog',\n onUxReviewProject,\n }: WireCatalogOptions,\n): () => void {\n let disposed = false;\n const view = root.ownerDocument.defaultView;\n if (onUxReviewProject && view)\n void loadUxReviewProject(view.location.href, (input, init) =>\n view.fetch(input, init),\n ).then((directory) => {\n if (directory && !disposed) onUxReviewProject(directory);\n });\n let cancelReveal: (() => void) | undefined;\n const select = (id: string) => {\n onSelect(id);\n const view = root.ownerDocument.defaultView;\n if (urlParam && view) {\n const url = new URL(view.location.href);\n url.searchParams.set(urlParam, id);\n view.history.replaceState(null, '', url);\n }\n // An open overlay sidebar gives way to the entry just chosen from it.\n const rail = root.ownerDocument.getElementById(`${catalogId}-left-rail`);\n if (\n collapsed &&\n !collapsed.peek() &&\n rail &&\n root.ownerDocument.defaultView?.getComputedStyle(rail).position ===\n 'absolute'\n )\n collapsed.value = true;\n if (revealSelection) {\n cancelReveal?.();\n cancelReveal = revealCatalogEntry(\n root,\n id,\n revealSelection === true ? undefined : revealSelection,\n );\n }\n };\n\n const disposers: Array<() => void> = [\n wireScrollDividers(root),\n wireCatalogFilter(root),\n // Sidebar items AND the footer's related-entry popup-menu items both carry\n // `data-action={selectAction}` + `data-item-id`, so one delegated click covers both.\n delegate(\n root,\n 'click',\n `[data-action=\"${selectAction}\"]`,\n (_event, element) => {\n const id = (element as HTMLElement).dataset.itemId;\n if (id) select(id);\n },\n ),\n ];\n if (onToggleSidebar) {\n disposers.push(\n delegate(root, 'click', `[data-action=\"${toggleSidebarAction}\"]`, () =>\n onToggleSidebar(),\n ),\n );\n }\n if (onToggleTheme) {\n disposers.push(\n delegate(root, 'click', `[data-action=\"${toggleThemeAction}\"]`, () =>\n onToggleTheme(),\n ),\n );\n }\n if (onToggleContrast) {\n disposers.push(\n delegate(root, 'click', `[data-action=\"${toggleContrastAction}\"]`, () =>\n onToggleContrast(),\n ),\n );\n }\n if (onToggleMotion) {\n disposers.push(\n delegate(root, 'click', `[data-action=\"${toggleMotionAction}\"]`, () =>\n onToggleMotion(),\n ),\n );\n }\n if (onSelectBackground) {\n disposers.push(\n delegate(\n root,\n 'click',\n `[data-action=\"${selectBackgroundAction}\"]`,\n (_event, element) => {\n const style = element.getAttribute('data-background-choice');\n if (\n style === 'checkerboard' ||\n style === 'vertical-stripes' ||\n style === 'layout-guide' ||\n style === 'surface' ||\n style === 'sunken'\n )\n onSelectBackground(style);\n },\n ),\n );\n }\n if (onToggleSecondary) {\n disposers.push(\n delegate(root, 'click', `[data-action=\"${toggleSecondaryAction}\"]`, () =>\n onToggleSecondary(),\n ),\n );\n }\n if (settingsCollapsed || onToggleSettings) {\n disposers.push(\n delegate(root, 'click', `[data-action=\"${toggleSettingsAction}\"]`, () => {\n if (settingsCollapsed)\n settingsCollapsed.value = !settingsCollapsed.peek();\n onToggleSettings?.();\n }),\n );\n }\n // One wireWorkbench call owns every wired rail, so overlays stay exclusive.\n const panels: WireWorkbenchOptions['panels'] = {};\n if (collapsed || sidebarSize)\n panels.leftRail = {\n collapsed,\n size: sidebarSize,\n storageKey: sidebarStorageKey,\n };\n if (settingsCollapsed || settingsSize)\n panels.rightRail = {\n collapsed: settingsCollapsed,\n size: settingsSize,\n storageKey: settingsStorageKey,\n };\n if (panels.leftRail || panels.rightRail)\n disposers.push(wireWorkbench(root, { id: catalogId, panels }));\n if (onUxReviewProject)\n // The capture context names the page the review came from. The URL can\n // change after the link rendered (`urlParam`), so stamp it as the link is\n // followed; the browser navigates to the href as it stands after the click.\n disposers.push(\n delegate(\n root,\n 'click',\n 'a.kui-toolbar-action-link[href^=\"uxreview://capture\"]',\n (_event, element) => {\n const link = element as HTMLAnchorElement;\n const url = new URL(link.href);\n const context = (url.searchParams.get('context') ?? '').replace(\n /\\nPage: [^\\n]*$/,\n '',\n );\n url.searchParams.set(\n 'context',\n `${context}\\nPage: ${link.ownerDocument.location.href}`,\n );\n link.href = url.href;\n },\n ),\n );\n return () => {\n disposed = true;\n cancelReveal?.();\n for (const dispose of disposers.splice(0)) dispose();\n };\n}\n"]}
@@ -0,0 +1,26 @@
1
+ type Root = HTMLElement | Document;
2
+ /** A committed combobox value. */
3
+ interface ComboboxCommit {
4
+ id: string;
5
+ value: string;
6
+ /** True when the value matched no suggestion (the person created it). */
7
+ created: boolean;
8
+ /** The field's input; clear or keep its text after applying the commit. */
9
+ input: HTMLInputElement;
10
+ }
11
+ interface WireComboboxesOptions {
12
+ onCommit: (commit: ComboboxCommit) => void;
13
+ /** Characters that commit the typed text besides Enter. Default `[',']`. */
14
+ commitKeys?: readonly string[];
15
+ }
16
+ /**
17
+ * Wire every `Combobox` below root: typing filters the suggestions (and offers
18
+ * to create the typed text), ArrowDown/ArrowUp move the active option, Enter or
19
+ * a commit key (comma by default) commits the active option or the typed text,
20
+ * a click commits an option, and Escape or leaving the field closes the list.
21
+ * Typed text that matches no suggestion commits only when the field offers
22
+ * creation; otherwise Enter commits the first matching suggestion. Dispose with the owning application.
23
+ */
24
+ declare function wireComboboxes(root: Root, { onCommit, commitKeys }: WireComboboxesOptions): () => void;
25
+
26
+ export { type ComboboxCommit, type WireComboboxesOptions, wireComboboxes };
@@ -0,0 +1,3 @@
1
+ export { wireComboboxes } from './chunk-FDZNYD4C.js';
2
+
3
+ //# sourceMappingURL=wire-comboboxes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"wire-comboboxes.js"}
@@ -0,0 +1,16 @@
1
+ type Root = HTMLElement | Document;
2
+ /**
3
+ * Enter-to-send for every `Composer` rendered with `submitOnEnter` below
4
+ * root. In its field, Enter (alone or with Cmd or Ctrl) activates the
5
+ * composer's first trailing action, so a keyboard send runs the same
6
+ * delegated handler as a click. Shift+Enter and Alt+Enter insert a newline.
7
+ * Nothing is sent, and no newline is inserted, when the message is empty or
8
+ * whitespace-only, the key is auto-repeating, or the first action is
9
+ * disabled, loading, or `aria-disabled`. An Enter that commits an IME
10
+ * composition (`isComposing`, keyCode 229, or between `compositionstart` and
11
+ * `compositionend`) is left to the input method. Dispose with the owning
12
+ * application.
13
+ */
14
+ declare function wireComposers(root: Root): () => void;
15
+
16
+ export { wireComposers };
@@ -0,0 +1,3 @@
1
+ export { wireComposers } from './chunk-ELCMSQNJ.js';
2
+
3
+ //# sourceMappingURL=wire-composers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"wire-composers.js"}
@@ -0,0 +1,11 @@
1
+ /** True when a card action originated on the card rather than a nested control. */
2
+ declare function isContentItemActivation(event: Event, item: HTMLElement): boolean;
3
+ /**
4
+ * Give interactive ContentItems native-like Enter/Space activation with one
5
+ * delegated listener pair. Space activates on release and is cancelled if
6
+ * focus moves; the item's own `data-action` still goes through the app's
7
+ * ordinary delegated click handler. Returns a disposer.
8
+ */
9
+ declare function wireContentItems(root: HTMLElement): () => void;
10
+
11
+ export { isContentItemActivation, wireContentItems };