@kerfjs/ui 5.0.0-beta.104 → 5.0.0-beta.106

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 (758) hide show
  1. package/README.md +155 -116
  2. package/ai/application-ui-profile.defaults.json +125 -4
  3. package/ai/compile-time-contracts-v1.json +11 -11
  4. package/ai/component-catalog.json +2606 -628
  5. package/ai/component-composition-rules.json +10 -10
  6. package/ai/component-composition.json +1688 -300
  7. package/ai/components/README.md +66 -48
  8. package/ai/components/application-tabs.md +4 -4
  9. package/ai/components/badge.md +1 -0
  10. package/ai/components/button.md +91 -0
  11. package/ai/components/checkbox.md +89 -0
  12. package/ai/components/choice-chips.md +9 -3
  13. package/ai/components/color-field.md +92 -0
  14. package/ai/components/color-picker.md +90 -0
  15. package/ai/components/color-swatches.md +82 -0
  16. package/ai/components/combobox.md +6 -4
  17. package/ai/components/content-item.md +5 -2
  18. package/ai/components/disclosure.md +83 -0
  19. package/ai/components/file-picker.md +1 -0
  20. package/ai/components/foundation.md +1 -1
  21. package/ai/components/list-action-row.md +3 -3
  22. package/ai/components/list-detail-dialog.md +90 -0
  23. package/ai/components/list.md +2 -0
  24. package/ai/components/lucide-icon.md +2 -0
  25. package/ai/components/{composer.md → message-composer.md} +17 -16
  26. package/ai/components/pane.md +3 -1
  27. package/ai/components/popup-menu.md +12 -9
  28. package/ai/components/progress-bar.md +82 -0
  29. package/ai/components/progress-ring.md +80 -0
  30. package/ai/components/radio-group.md +88 -0
  31. package/ai/components/recipe-list-detail-dialog.md +5 -5
  32. package/ai/components/{token-search-field.md → search-field.md} +23 -23
  33. package/ai/components/select.md +15 -13
  34. package/ai/components/slider.md +84 -0
  35. package/ai/components/surface-scaffold.md +16 -13
  36. package/ai/components/switch.md +81 -0
  37. package/ai/components/tab-bar.md +6 -6
  38. package/ai/components/tab-navigator.md +2 -2
  39. package/ai/components/tabs.md +7 -7
  40. package/ai/components/tag-field.md +86 -0
  41. package/ai/components/text-field.md +98 -0
  42. package/ai/components/text.md +1 -0
  43. package/ai/components/toast.md +85 -0
  44. package/ai/components/toolbar-control-group.md +3 -3
  45. package/ai/components/tooltip.md +81 -0
  46. package/ai/components/wa-accordion-item.md +11 -5
  47. package/ai/components/wa-accordion.md +11 -5
  48. package/ai/components/wa-animated-image.md +2 -1
  49. package/ai/components/wa-animation.md +1 -0
  50. package/ai/components/wa-avatar.md +1 -0
  51. package/ai/components/wa-badge.md +10 -3
  52. package/ai/components/wa-breadcrumb-item.md +1 -0
  53. package/ai/components/wa-breadcrumb.md +1 -0
  54. package/ai/components/wa-button-group.md +6 -4
  55. package/ai/components/wa-button.md +7 -5
  56. package/ai/components/wa-callout.md +7 -5
  57. package/ai/components/wa-card.md +12 -4
  58. package/ai/components/wa-carousel-item.md +1 -0
  59. package/ai/components/wa-carousel.md +1 -0
  60. package/ai/components/wa-checkbox-group.md +11 -4
  61. package/ai/components/wa-checkbox.md +10 -4
  62. package/ai/components/wa-color-picker.md +13 -5
  63. package/ai/components/wa-comparison.md +2 -1
  64. package/ai/components/wa-copy-button.md +1 -0
  65. package/ai/components/wa-details.md +11 -5
  66. package/ai/components/wa-dialog.md +10 -4
  67. package/ai/components/wa-divider.md +1 -0
  68. package/ai/components/wa-drawer.md +12 -5
  69. package/ai/components/wa-dropdown-item.md +8 -6
  70. package/ai/components/wa-dropdown.md +8 -6
  71. package/ai/components/wa-format-bytes.md +1 -0
  72. package/ai/components/wa-format-date.md +1 -0
  73. package/ai/components/wa-format-number.md +1 -0
  74. package/ai/components/wa-icon.md +2 -1
  75. package/ai/components/wa-include.md +6 -4
  76. package/ai/components/wa-input.md +9 -6
  77. package/ai/components/wa-intersection-observer.md +1 -0
  78. package/ai/components/wa-known-date.md +1 -0
  79. package/ai/components/wa-markdown.md +1 -0
  80. package/ai/components/wa-mutation-observer.md +1 -0
  81. package/ai/components/wa-number-input.md +1 -0
  82. package/ai/components/wa-option.md +7 -5
  83. package/ai/components/wa-otp-input.md +1 -0
  84. package/ai/components/wa-page.md +13 -4
  85. package/ai/components/wa-pagination.md +1 -0
  86. package/ai/components/wa-popover.md +11 -5
  87. package/ai/components/wa-popup.md +11 -4
  88. package/ai/components/wa-progress-bar.md +11 -4
  89. package/ai/components/wa-progress-ring.md +11 -4
  90. package/ai/components/wa-qr-code.md +1 -0
  91. package/ai/components/wa-radio-group.md +12 -4
  92. package/ai/components/wa-radio.md +10 -4
  93. package/ai/components/wa-random-content.md +1 -0
  94. package/ai/components/wa-rating.md +1 -0
  95. package/ai/components/wa-relative-time.md +1 -0
  96. package/ai/components/wa-resize-observer.md +1 -0
  97. package/ai/components/wa-scroller.md +12 -4
  98. package/ai/components/wa-select.md +7 -5
  99. package/ai/components/wa-skeleton.md +10 -3
  100. package/ai/components/wa-slider.md +11 -5
  101. package/ai/components/wa-spinner.md +7 -5
  102. package/ai/components/wa-split-panel.md +7 -5
  103. package/ai/components/wa-step.md +56 -0
  104. package/ai/components/wa-stepper.md +56 -0
  105. package/ai/components/wa-switch.md +10 -3
  106. package/ai/components/wa-tab-group.md +8 -6
  107. package/ai/components/wa-tab-panel.md +7 -5
  108. package/ai/components/wa-tab.md +8 -6
  109. package/ai/components/wa-tag-input.md +62 -0
  110. package/ai/components/wa-tag.md +9 -6
  111. package/ai/components/wa-textarea.md +10 -3
  112. package/ai/components/wa-time-input.md +1 -0
  113. package/ai/components/wa-toast-item.md +9 -7
  114. package/ai/components/wa-toast.md +9 -7
  115. package/ai/components/wa-tooltip.md +11 -5
  116. package/ai/components/wa-tree-item.md +2 -1
  117. package/ai/components/wa-tree.md +2 -1
  118. package/ai/components/wa-zoomable-frame.md +2 -1
  119. package/ai/components/workbench-dialog.md +90 -0
  120. package/ai/public-api-signatures-v1.md +1579 -247
  121. package/ai/skill.md +83 -50
  122. package/ai/webawesome-jsx-signatures-v1.md +4 -1
  123. package/dist/badge.d.ts +9 -1
  124. package/dist/badge.js +1 -1
  125. package/dist/browser/button.js +5 -0
  126. package/dist/browser/catalog.js +3 -2
  127. package/dist/browser/{icon-button.js → checkbox.js} +2 -2
  128. package/dist/browser/color-field.js +4 -0
  129. package/dist/browser/color-picker.js +5 -0
  130. package/dist/browser/color-swatches.js +3 -0
  131. package/dist/browser/disclosure.js +5 -0
  132. package/dist/browser/list-action-row.js +1 -0
  133. package/dist/browser/list-detail-dialog.js +14 -0
  134. package/dist/browser/message-composer.js +5 -0
  135. package/dist/browser/popup-menu.js +1 -0
  136. package/dist/browser/progress-bar.js +3 -0
  137. package/dist/browser/progress-ring.js +3 -0
  138. package/dist/browser/radio-group.js +3 -0
  139. package/dist/browser/search-field.js +4 -0
  140. package/dist/browser/slider.js +3 -0
  141. package/dist/browser/surface-scaffold.js +1 -0
  142. package/dist/browser/switch.js +3 -0
  143. package/dist/browser/tab-bar-item.js +4 -0
  144. package/dist/browser/tag-field.js +5 -0
  145. package/dist/browser/text-field.js +4 -0
  146. package/dist/browser/workbench-dialog.js +15 -0
  147. package/dist/button.d.ts +108 -0
  148. package/dist/button.js +7 -0
  149. package/dist/button.js.map +1 -0
  150. package/dist/catalog-resources.d.ts +1 -1
  151. package/dist/catalog.d.ts +3 -3
  152. package/dist/catalog.js +57 -27
  153. package/dist/catalog.js.map +1 -1
  154. package/dist/checkbox.d.ts +45 -0
  155. package/dist/checkbox.js +6 -0
  156. package/dist/checkbox.js.map +1 -0
  157. package/dist/choice-chips.d.ts +49 -15
  158. package/dist/choice-chips.js +1 -1
  159. package/dist/chunk-23PPPNH6.js +93 -0
  160. package/dist/chunk-23PPPNH6.js.map +1 -0
  161. package/dist/{chunk-FNZQOUZ5.js → chunk-2FW7D4IG.js} +2 -2
  162. package/dist/{chunk-FNZQOUZ5.js.map → chunk-2FW7D4IG.js.map} +1 -1
  163. package/dist/{chunk-ZYU5WRC3.js → chunk-3GLYIIFR.js} +2 -2
  164. package/dist/{chunk-ZYU5WRC3.js.map → chunk-3GLYIIFR.js.map} +1 -1
  165. package/dist/{chunk-5NQF35VO.js → chunk-4RECPEHI.js} +2 -2
  166. package/dist/{chunk-5NQF35VO.js.map → chunk-4RECPEHI.js.map} +1 -1
  167. package/dist/{chunk-7IUEBNCO.js → chunk-5USKCWGL.js} +8 -3
  168. package/dist/chunk-5USKCWGL.js.map +1 -0
  169. package/dist/chunk-6VVIW7VB.js +69 -0
  170. package/dist/chunk-6VVIW7VB.js.map +1 -0
  171. package/dist/{chunk-LL45C7BB.js → chunk-7K6U6FCN.js} +1 -1
  172. package/dist/chunk-7K6U6FCN.js.map +1 -0
  173. package/dist/{chunk-HQZYKJ56.js → chunk-7W3GKMN4.js} +110 -74
  174. package/dist/chunk-7W3GKMN4.js.map +1 -0
  175. package/dist/chunk-ACUKTVS3.js +371 -0
  176. package/dist/chunk-ACUKTVS3.js.map +1 -0
  177. package/dist/{chunk-YQ2AC4E2.js → chunk-AMIHGFLP.js} +2 -2
  178. package/dist/{chunk-YQ2AC4E2.js.map → chunk-AMIHGFLP.js.map} +1 -1
  179. package/dist/chunk-ATGAJVZ6.js +268 -0
  180. package/dist/chunk-ATGAJVZ6.js.map +1 -0
  181. package/dist/chunk-AYPGXR2E.js +20 -0
  182. package/dist/chunk-AYPGXR2E.js.map +1 -0
  183. package/dist/{chunk-ETCWQLJV.js → chunk-BKUMG2KB.js} +38 -28
  184. package/dist/chunk-BKUMG2KB.js.map +1 -0
  185. package/dist/chunk-C26Q6P4Q.js +76 -0
  186. package/dist/chunk-C26Q6P4Q.js.map +1 -0
  187. package/dist/chunk-C3RLKKFQ.js +452 -0
  188. package/dist/chunk-C3RLKKFQ.js.map +1 -0
  189. package/dist/{chunk-T5BJBMW7.js → chunk-CIAUILRR.js} +5 -5
  190. package/dist/chunk-CIAUILRR.js.map +1 -0
  191. package/dist/chunk-CNM6ZWP2.js +38 -0
  192. package/dist/chunk-CNM6ZWP2.js.map +1 -0
  193. package/dist/{chunk-LPHU44S3.js → chunk-CTQUDCY5.js} +3 -1
  194. package/dist/chunk-CTQUDCY5.js.map +1 -0
  195. package/dist/{chunk-MXNIVEVL.js → chunk-D4MXSAMI.js} +5 -3
  196. package/dist/chunk-D4MXSAMI.js.map +1 -0
  197. package/dist/{chunk-YBWQR2OK.js → chunk-DDSCVEO5.js} +10 -9
  198. package/dist/chunk-DDSCVEO5.js.map +1 -0
  199. package/dist/{chunk-SIW64V65.js → chunk-DF2YKGIX.js} +3 -3
  200. package/dist/{chunk-SIW64V65.js.map → chunk-DF2YKGIX.js.map} +1 -1
  201. package/dist/{chunk-3SKAEPPZ.js → chunk-ECFCAKWE.js} +4 -4
  202. package/dist/{chunk-3SKAEPPZ.js.map → chunk-ECFCAKWE.js.map} +1 -1
  203. package/dist/chunk-EKBMUXFV.js +298 -0
  204. package/dist/chunk-EKBMUXFV.js.map +1 -0
  205. package/dist/{chunk-IXLUZHGT.js → chunk-FG6U7KQQ.js} +5 -5
  206. package/dist/{chunk-IXLUZHGT.js.map → chunk-FG6U7KQQ.js.map} +1 -1
  207. package/dist/chunk-FKKJHGN5.js +147 -0
  208. package/dist/chunk-FKKJHGN5.js.map +1 -0
  209. package/dist/{chunk-FDZNYD4C.js → chunk-GCAK23PU.js} +34 -3
  210. package/dist/chunk-GCAK23PU.js.map +1 -0
  211. package/dist/chunk-GXSX6Q6O.js +42 -0
  212. package/dist/chunk-GXSX6Q6O.js.map +1 -0
  213. package/dist/{chunk-LOSRXZAH.js → chunk-HJXVVFBT.js} +14 -6
  214. package/dist/chunk-HJXVVFBT.js.map +1 -0
  215. package/dist/{chunk-M5KZ26VV.js → chunk-HQZG3OFL.js} +11 -1
  216. package/dist/chunk-HQZG3OFL.js.map +1 -0
  217. package/dist/{chunk-ELCMSQNJ.js → chunk-HTERKONR.js} +8 -8
  218. package/dist/chunk-HTERKONR.js.map +1 -0
  219. package/dist/chunk-HYORKKYP.js +8 -0
  220. package/dist/chunk-HYORKKYP.js.map +1 -0
  221. package/dist/chunk-IO27YTL3.js +73 -0
  222. package/dist/chunk-IO27YTL3.js.map +1 -0
  223. package/dist/chunk-ITUQC4FW.js +163 -0
  224. package/dist/chunk-ITUQC4FW.js.map +1 -0
  225. package/dist/chunk-K57NINLH.js +137 -0
  226. package/dist/chunk-K57NINLH.js.map +1 -0
  227. package/dist/chunk-KC6WUSNS.js +34 -0
  228. package/dist/chunk-KC6WUSNS.js.map +1 -0
  229. package/dist/{chunk-W4IK7AWD.js → chunk-KDQZ3E5C.js} +3 -1
  230. package/dist/chunk-KDQZ3E5C.js.map +1 -0
  231. package/dist/{chunk-2MSPNRWJ.js → chunk-KK3S5OTW.js} +27 -11
  232. package/dist/chunk-KK3S5OTW.js.map +1 -0
  233. package/dist/chunk-LTBVP6VN.js +59 -0
  234. package/dist/chunk-LTBVP6VN.js.map +1 -0
  235. package/dist/chunk-OHPYT2BH.js +82 -0
  236. package/dist/chunk-OHPYT2BH.js.map +1 -0
  237. package/dist/{chunk-HZPHCSCS.js → chunk-OY2MXIBB.js} +8 -2
  238. package/dist/chunk-OY2MXIBB.js.map +1 -0
  239. package/dist/chunk-PE2KPZDW.js +85 -0
  240. package/dist/chunk-PE2KPZDW.js.map +1 -0
  241. package/dist/{chunk-QTSMHH5J.js → chunk-QPTJ5DOO.js} +5 -3
  242. package/dist/chunk-QPTJ5DOO.js.map +1 -0
  243. package/dist/{chunk-JOR5LGYE.js → chunk-RFLW4FPL.js} +1 -1
  244. package/dist/chunk-RFLW4FPL.js.map +1 -0
  245. package/dist/{chunk-U6QYTMDB.js → chunk-RMWNO6BA.js} +6 -2
  246. package/dist/chunk-RMWNO6BA.js.map +1 -0
  247. package/dist/{chunk-TDMHA7C3.js → chunk-SQ2Q3OQI.js} +112 -63
  248. package/dist/chunk-SQ2Q3OQI.js.map +1 -0
  249. package/dist/{chunk-K4AT3V3J.js → chunk-T74YB76U.js} +13 -11
  250. package/dist/chunk-T74YB76U.js.map +1 -0
  251. package/dist/{chunk-BYFTHA4I.js → chunk-TAHR457X.js} +53 -6
  252. package/dist/chunk-TAHR457X.js.map +1 -0
  253. package/dist/{chunk-3VXDSIBJ.js → chunk-TKNVL53O.js} +2 -2
  254. package/dist/{chunk-3VXDSIBJ.js.map → chunk-TKNVL53O.js.map} +1 -1
  255. package/dist/chunk-TNJLNLVE.js +115 -0
  256. package/dist/chunk-TNJLNLVE.js.map +1 -0
  257. package/dist/chunk-TUID42UE.js +15 -0
  258. package/dist/chunk-TUID42UE.js.map +1 -0
  259. package/dist/{chunk-CR5U5FV6.js → chunk-UMNHJSIO.js} +93 -80
  260. package/dist/chunk-UMNHJSIO.js.map +1 -0
  261. package/dist/chunk-UTCAOOXU.js +116 -0
  262. package/dist/chunk-UTCAOOXU.js.map +1 -0
  263. package/dist/{chunk-ZJC5ND3M.js → chunk-VEME3D7K.js} +35 -35
  264. package/dist/chunk-VEME3D7K.js.map +1 -0
  265. package/dist/{chunk-HLDRH23D.js → chunk-WJKHLOP5.js} +2 -2
  266. package/dist/{chunk-HLDRH23D.js.map → chunk-WJKHLOP5.js.map} +1 -1
  267. package/dist/chunk-WU57BYYM.js +115 -0
  268. package/dist/chunk-WU57BYYM.js.map +1 -0
  269. package/dist/{chunk-TGLUDQP2.js → chunk-ZCDRLN3B.js} +11 -11
  270. package/dist/chunk-ZCDRLN3B.js.map +1 -0
  271. package/dist/chunk-ZX2QQJXD.js +249 -0
  272. package/dist/chunk-ZX2QQJXD.js.map +1 -0
  273. package/dist/{chunk-6E2H2E5A.js → chunk-ZXZAECHZ.js} +6 -6
  274. package/dist/{chunk-6E2H2E5A.js.map → chunk-ZXZAECHZ.js.map} +1 -1
  275. package/dist/collapsible-panel.js +3 -3
  276. package/dist/color-field.d.ts +51 -0
  277. package/dist/color-field.js +92 -0
  278. package/dist/color-field.js.map +1 -0
  279. package/dist/color-picker.d.ts +88 -0
  280. package/dist/color-picker.js +8 -0
  281. package/dist/color-picker.js.map +1 -0
  282. package/dist/color-swatches.d.ts +56 -0
  283. package/dist/color-swatches.js +4 -0
  284. package/dist/color-swatches.js.map +1 -0
  285. package/dist/combobox.js +1 -1
  286. package/dist/content-item.d.ts +13 -1
  287. package/dist/content-item.js +1 -1
  288. package/dist/disclosure-arrow.js +1 -1
  289. package/dist/disclosure.d.ts +57 -0
  290. package/dist/disclosure.js +51 -0
  291. package/dist/disclosure.js.map +1 -0
  292. package/dist/file-picker.d.ts +7 -0
  293. package/dist/file-picker.js +1 -1
  294. package/dist/help-tags-register.d.ts +8 -8
  295. package/dist/help-tags-register.js +3 -2
  296. package/dist/help-tags-register.js.map +1 -1
  297. package/dist/index.d.ts +16 -9
  298. package/dist/index.js +58 -46
  299. package/dist/list-action-row.js +4 -1
  300. package/dist/list-detail-dialog.d.ts +117 -0
  301. package/dist/list-detail-dialog.js +165 -0
  302. package/dist/list-detail-dialog.js.map +1 -0
  303. package/dist/list-header.js +1 -1
  304. package/dist/list-item.js +1 -1
  305. package/dist/list.d.ts +17 -2
  306. package/dist/list.js +1 -1
  307. package/dist/lucide-icon.d.ts +9 -1
  308. package/dist/lucide-icon.js +1 -1
  309. package/dist/{composer.d.ts → message-composer.d.ts} +20 -12
  310. package/dist/message-composer.js +6 -0
  311. package/dist/message-composer.js.map +1 -0
  312. package/dist/nav-stack.js +1 -1
  313. package/dist/pane.d.ts +36 -3
  314. package/dist/pane.js +1 -1
  315. package/dist/popup-menu-register.d.ts +6 -5
  316. package/dist/popup-menu-register.js +3 -326
  317. package/dist/popup-menu-register.js.map +1 -1
  318. package/dist/popup-menu.d.ts +41 -23
  319. package/dist/popup-menu.js +5 -1
  320. package/dist/progress-bar.d.ts +52 -0
  321. package/dist/progress-bar.js +68 -0
  322. package/dist/progress-bar.js.map +1 -0
  323. package/dist/progress-ring.d.ts +44 -0
  324. package/dist/progress-ring.js +73 -0
  325. package/dist/progress-ring.js.map +1 -0
  326. package/dist/radio-group.d.ts +62 -0
  327. package/dist/radio-group.js +4 -0
  328. package/dist/radio-group.js.map +1 -0
  329. package/dist/row.js +1 -1
  330. package/dist/{token-search-model-JA1i8z4D.d.ts → search-field-CrGTN5sa.d.ts} +45 -45
  331. package/dist/search-field-model.d.ts +3 -0
  332. package/dist/search-field-model.js +3 -0
  333. package/dist/search-field-model.js.map +1 -0
  334. package/dist/search-field.d.ts +3 -0
  335. package/dist/search-field.js +5 -0
  336. package/dist/search-field.js.map +1 -0
  337. package/dist/select-register.d.ts +6 -3
  338. package/dist/select-register.js +383 -241
  339. package/dist/select-register.js.map +1 -1
  340. package/dist/select.d.ts +30 -6
  341. package/dist/select.js +3 -1
  342. package/dist/selection.d.ts +54 -0
  343. package/dist/selection.js +3 -0
  344. package/dist/selection.js.map +1 -0
  345. package/dist/slider.d.ts +74 -0
  346. package/dist/slider.js +103 -0
  347. package/dist/slider.js.map +1 -0
  348. package/dist/split-button.js +1 -1
  349. package/dist/split-view.d.ts +5 -2
  350. package/dist/split-view.js +18 -159
  351. package/dist/split-view.js.map +1 -1
  352. package/dist/state-banner.js +1 -1
  353. package/dist/styles/badge.css +18 -6
  354. package/dist/styles/button.css +230 -0
  355. package/dist/styles/catalog/components/catalog-example.css +13 -4
  356. package/dist/styles/checkbox.css +121 -0
  357. package/dist/styles/choice-chips.css +58 -7
  358. package/dist/styles/color-field.css +125 -0
  359. package/dist/styles/color-picker.css +331 -0
  360. package/dist/styles/color-swatches.css +122 -0
  361. package/dist/styles/combobox.css +7 -5
  362. package/dist/styles/components/actions/button/button.css +230 -0
  363. package/dist/styles/components/actions/popup-menu/popup-menu.css +326 -198
  364. package/dist/styles/components/actions/toolbar/toolbar.css +10 -3
  365. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +67 -104
  366. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +5 -18
  367. package/dist/styles/components/collections/list/list.css +37 -0
  368. package/dist/styles/components/feedback/badge/badge.css +18 -6
  369. package/dist/styles/components/feedback/progress-bar/progress-bar.css +168 -0
  370. package/dist/styles/components/feedback/progress-ring/progress-ring.css +91 -0
  371. package/dist/styles/components/feedback/state-banner/state-banner.css +18 -3
  372. package/dist/styles/components/forms/checkbox/checkbox.css +121 -0
  373. package/dist/styles/components/forms/choice-chips/choice-chips.css +58 -7
  374. package/dist/styles/components/forms/color-field/color-field.css +125 -0
  375. package/dist/styles/components/forms/color-picker/color-picker.css +331 -0
  376. package/dist/styles/components/forms/color-swatches/color-swatches.css +122 -0
  377. package/dist/styles/components/forms/combobox/combobox.css +7 -5
  378. package/dist/styles/components/forms/{composer/composer.css → message-composer/message-composer.css} +17 -33
  379. package/dist/styles/components/forms/radio-group/radio-group.css +156 -0
  380. package/dist/styles/{token-search-field.css → components/forms/search-field/search-field.css} +111 -102
  381. package/dist/styles/components/forms/select/select.css +370 -249
  382. package/dist/styles/components/forms/slider/slider.css +241 -0
  383. package/dist/styles/components/forms/switch/switch.css +132 -0
  384. package/dist/styles/components/forms/tag-field/tag-field.css +8 -0
  385. package/dist/styles/components/forms/text-field/text-field.css +193 -0
  386. package/dist/styles/components/layout/pane/pane.css +254 -0
  387. package/dist/styles/components/layout/resizable-region/resizable-region.css +3 -2
  388. package/dist/styles/components/layout/row/row.css +11 -0
  389. package/dist/styles/components/layout/split-view/split-view.css +25 -0
  390. package/dist/styles/components/layout/workbench/workbench.css +12 -4
  391. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +20 -0
  392. package/dist/styles/components/navigation/tab-bar/tab-bar.css +7 -7
  393. package/dist/styles/components/navigation/{app-tab/app-tab.css → tab-bar-item/tab-bar-item.css} +95 -90
  394. package/dist/styles/components/surfaces/disclosure/disclosure.css +98 -0
  395. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +263 -116
  396. package/dist/styles/components/typography/text/text.css +14 -12
  397. package/dist/styles/disclosure-arrow.css +20 -0
  398. package/dist/styles/disclosure.css +98 -0
  399. package/dist/styles/foundation.css +6 -4
  400. package/dist/styles/list-detail-dialog.css +11 -0
  401. package/dist/styles/list.css +37 -0
  402. package/dist/styles/{composer.css → message-composer.css} +17 -33
  403. package/dist/styles/overlay-toast.css +149 -0
  404. package/dist/styles/overlay-tooltip.css +55 -0
  405. package/dist/styles/pane.css +254 -0
  406. package/dist/styles/popup-menu.css +326 -198
  407. package/dist/styles/progress-bar.css +168 -0
  408. package/dist/styles/progress-ring.css +91 -0
  409. package/dist/styles/radio-group.css +156 -0
  410. package/dist/styles/resizable-region.css +3 -2
  411. package/dist/styles/row.css +11 -0
  412. package/dist/styles/{components/forms/token-search-field/token-search-field.css → search-field.css} +111 -102
  413. package/dist/styles/select.css +370 -249
  414. package/dist/styles/slider.css +241 -0
  415. package/dist/styles/split-view.css +25 -0
  416. package/dist/styles/state-banner.css +18 -3
  417. package/dist/styles/styles.css +16 -5
  418. package/dist/styles/surface-scaffold.css +263 -116
  419. package/dist/styles/switch.css +132 -0
  420. package/dist/styles/{app-tab.css → tab-bar-item.css} +95 -90
  421. package/dist/styles/tab-bar.css +7 -7
  422. package/dist/styles/tag-field.css +8 -0
  423. package/dist/styles/text-field.css +193 -0
  424. package/dist/styles/text.css +14 -12
  425. package/dist/styles/toolbar-control-group.css +67 -104
  426. package/dist/styles/toolbar-text.css +5 -18
  427. package/dist/styles/toolbar.css +10 -3
  428. package/dist/styles/webawesome.css +9 -0
  429. package/dist/styles/workbench-dialog.css +10 -0
  430. package/dist/styles/workbench.css +12 -4
  431. package/dist/surface-scaffold-register.d.ts +7 -5
  432. package/dist/surface-scaffold-register.js +2 -246
  433. package/dist/surface-scaffold-register.js.map +1 -1
  434. package/dist/surface-scaffold.d.ts +70 -7
  435. package/dist/surface-scaffold.js +5 -1
  436. package/dist/switch.d.ts +38 -0
  437. package/dist/switch.js +4 -0
  438. package/dist/switch.js.map +1 -0
  439. package/dist/{app-tab.d.ts → tab-bar-item.d.ts} +11 -11
  440. package/dist/tab-bar-item.js +6 -0
  441. package/dist/tab-bar-item.js.map +1 -0
  442. package/dist/tab-bar.d.ts +3 -3
  443. package/dist/tab-bar.js +1 -1
  444. package/dist/tab-navigator.js +1 -1
  445. package/dist/tag-field.d.ts +52 -0
  446. package/dist/tag-field.js +6 -0
  447. package/dist/tag-field.js.map +1 -0
  448. package/dist/text-field.d.ts +83 -0
  449. package/dist/text-field.js +6 -0
  450. package/dist/text-field.js.map +1 -0
  451. package/dist/text.d.ts +6 -1
  452. package/dist/text.js +1 -1
  453. package/dist/{types-CVgIwSdq.d.ts → types-DmHWkSd6.d.ts} +19 -1
  454. package/dist/webawesome.d.ts +3 -0
  455. package/dist/wire-catalog.d.ts +8 -2
  456. package/dist/wire-catalog.js +16 -4
  457. package/dist/wire-catalog.js.map +1 -1
  458. package/dist/wire-checkboxes.d.ts +10 -0
  459. package/dist/wire-checkboxes.js +3 -0
  460. package/dist/{wire-composers.js.map → wire-checkboxes.js.map} +1 -1
  461. package/dist/wire-choice-chips.d.ts +17 -0
  462. package/dist/wire-choice-chips.js +4 -0
  463. package/dist/{wire-token-search-fields.js.map → wire-choice-chips.js.map} +1 -1
  464. package/dist/wire-color-fields.d.ts +33 -0
  465. package/dist/wire-color-fields.js +82 -0
  466. package/dist/wire-color-fields.js.map +1 -0
  467. package/dist/wire-color-pickers.d.ts +34 -0
  468. package/dist/wire-color-pickers.js +9 -0
  469. package/dist/wire-color-pickers.js.map +1 -0
  470. package/dist/wire-comboboxes.js +2 -1
  471. package/dist/wire-content-items.d.ts +5 -1
  472. package/dist/wire-content-items.js +84 -15
  473. package/dist/wire-content-items.js.map +1 -1
  474. package/dist/wire-file-pickers.d.ts +3 -2
  475. package/dist/wire-file-pickers.js +1 -1
  476. package/dist/{wire-composers.d.ts → wire-message-composers.d.ts} +5 -4
  477. package/dist/wire-message-composers.js +3 -0
  478. package/dist/wire-message-composers.js.map +1 -0
  479. package/dist/wire-overlay-sheets.js +1 -1
  480. package/dist/wire-pane-chrome.d.ts +21 -0
  481. package/dist/wire-pane-chrome.js +67 -0
  482. package/dist/wire-pane-chrome.js.map +1 -0
  483. package/dist/{wire-token-search-fields.d.ts → wire-search-fields.d.ts} +25 -25
  484. package/dist/wire-search-fields.js +6 -0
  485. package/dist/wire-search-fields.js.map +1 -0
  486. package/dist/wire-sliders.d.ts +12 -0
  487. package/dist/wire-sliders.js +31 -0
  488. package/dist/wire-sliders.js.map +1 -0
  489. package/dist/wire-tab-bars.js +1 -1
  490. package/dist/wire-tag-fields.d.ts +41 -0
  491. package/dist/wire-tag-fields.js +258 -0
  492. package/dist/wire-tag-fields.js.map +1 -0
  493. package/dist/wire-text-fields.d.ts +12 -0
  494. package/dist/wire-text-fields.js +3 -0
  495. package/dist/wire-text-fields.js.map +1 -0
  496. package/dist/workbench-dialog.d.ts +97 -0
  497. package/dist/workbench-dialog.js +124 -0
  498. package/dist/workbench-dialog.js.map +1 -0
  499. package/dist/workbench.d.ts +5 -0
  500. package/dist/workbench.js +1 -1
  501. package/docs/accessibility.md +181 -97
  502. package/docs/anchored-surface.md +8 -7
  503. package/docs/app-layouts.md +28 -0
  504. package/docs/catalog.md +14 -5
  505. package/docs/color-field.md +65 -0
  506. package/docs/color-picker.md +71 -0
  507. package/docs/color-swatches.md +46 -0
  508. package/docs/component-contract.md +31 -32
  509. package/docs/component-selection.md +228 -164
  510. package/docs/design/templates/button/emphasis-dark.svg +1 -0
  511. package/docs/design/templates/button/emphasis.svg +1 -0
  512. package/docs/design/templates/button/icons-dark.svg +1 -0
  513. package/docs/design/templates/button/icons.svg +1 -0
  514. package/docs/design/templates/button/pill-dark.svg +1 -0
  515. package/docs/design/templates/button/pill.svg +1 -0
  516. package/docs/design/templates/button/states-dark.svg +1 -0
  517. package/docs/design/templates/button/states.svg +1 -0
  518. package/docs/design/templates/button/toggles-dark.svg +1 -0
  519. package/docs/design/templates/button/toggles.svg +1 -0
  520. package/docs/design/templates/button/tones-dark.svg +1 -0
  521. package/docs/design/templates/button/tones.svg +1 -0
  522. package/docs/design/templates/button-dark.svg +1 -0
  523. package/docs/design/templates/button.svg +1 -0
  524. package/docs/design/templates/checkbox/compact-dark.svg +1 -0
  525. package/docs/design/templates/checkbox/compact.svg +1 -0
  526. package/docs/design/templates/checkbox/error-dark.svg +1 -0
  527. package/docs/design/templates/checkbox/error.svg +1 -0
  528. package/docs/design/templates/checkbox/mixed-dark.svg +1 -0
  529. package/docs/design/templates/checkbox/mixed.svg +1 -0
  530. package/docs/design/templates/checkbox/states-dark.svg +1 -0
  531. package/docs/design/templates/checkbox/states.svg +1 -0
  532. package/docs/design/templates/checkbox-dark.svg +1 -0
  533. package/docs/design/templates/checkbox.svg +1 -0
  534. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -1
  535. package/docs/design/templates/choice-chips/color-palette.svg +1 -1
  536. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -1
  537. package/docs/design/templates/choice-chips/compact-icons.svg +1 -1
  538. package/docs/design/templates/choice-chips/multiple-dark.svg +1 -1
  539. package/docs/design/templates/choice-chips/multiple.svg +1 -1
  540. package/docs/design/templates/choice-chips-dark.svg +1 -1
  541. package/docs/design/templates/choice-chips.svg +1 -1
  542. package/docs/design/templates/color-field/compact-dark.svg +1 -0
  543. package/docs/design/templates/color-field/compact.svg +1 -0
  544. package/docs/design/templates/color-field/error-dark.svg +1 -0
  545. package/docs/design/templates/color-field/error.svg +1 -0
  546. package/docs/design/templates/color-field/hint-dark.svg +1 -0
  547. package/docs/design/templates/color-field/hint.svg +1 -0
  548. package/docs/design/templates/color-field-dark.svg +1 -0
  549. package/docs/design/templates/color-field.svg +1 -0
  550. package/docs/design/templates/color-picker/gray-dark.svg +1 -0
  551. package/docs/design/templates/color-picker/gray.svg +1 -0
  552. package/docs/design/templates/color-picker/rgb-dark.svg +1 -0
  553. package/docs/design/templates/color-picker/rgb.svg +1 -0
  554. package/docs/design/templates/color-picker-dark.svg +1 -0
  555. package/docs/design/templates/color-picker.svg +1 -0
  556. package/docs/design/templates/color-swatches/palette-dark.svg +1 -0
  557. package/docs/design/templates/color-swatches/palette.svg +1 -0
  558. package/docs/design/templates/color-swatches-dark.svg +1 -0
  559. package/docs/design/templates/color-swatches.svg +1 -0
  560. package/docs/design/templates/disclosure/framed-sunken-dark.svg +1 -0
  561. package/docs/design/templates/disclosure/framed-sunken.svg +1 -0
  562. package/docs/design/templates/disclosure/plain-dark.svg +1 -0
  563. package/docs/design/templates/disclosure/plain.svg +1 -0
  564. package/docs/design/templates/disclosure-dark.svg +1 -0
  565. package/docs/design/templates/disclosure.svg +1 -0
  566. package/docs/design/templates/list-header/size-l-dark.svg +1 -1
  567. package/docs/design/templates/list-header/size-l.svg +1 -1
  568. package/docs/design/templates/list-header/size-m-dark.svg +1 -1
  569. package/docs/design/templates/list-header/size-m.svg +1 -1
  570. package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
  571. package/docs/design/templates/list-header/size-xl.svg +1 -1
  572. package/docs/design/templates/list-header-dark.svg +1 -1
  573. package/docs/design/templates/list-header.svg +1 -1
  574. package/docs/design/templates/message-composer/chat-dark.svg +1 -0
  575. package/docs/design/templates/message-composer/chat.svg +1 -0
  576. package/docs/design/templates/{composer → message-composer}/prompt-dark.svg +1 -1
  577. package/docs/design/templates/{composer → message-composer}/prompt.svg +1 -1
  578. package/docs/design/templates/message-composer-dark.svg +1 -0
  579. package/docs/design/templates/message-composer.svg +1 -0
  580. package/docs/design/templates/progress-bar/determinate-dark.svg +1 -0
  581. package/docs/design/templates/progress-bar/determinate.svg +1 -0
  582. package/docs/design/templates/progress-bar/tones-dark.svg +1 -0
  583. package/docs/design/templates/progress-bar/tones.svg +1 -0
  584. package/docs/design/templates/progress-bar-dark.svg +1 -0
  585. package/docs/design/templates/progress-bar.svg +1 -0
  586. package/docs/design/templates/progress-ring/sizes-dark.svg +1 -0
  587. package/docs/design/templates/progress-ring/sizes.svg +1 -0
  588. package/docs/design/templates/progress-ring/tones-dark.svg +1 -0
  589. package/docs/design/templates/progress-ring/tones.svg +1 -0
  590. package/docs/design/templates/progress-ring-dark.svg +1 -0
  591. package/docs/design/templates/progress-ring.svg +1 -0
  592. package/docs/design/templates/radio-group/horizontal-dark.svg +1 -0
  593. package/docs/design/templates/radio-group/horizontal.svg +1 -0
  594. package/docs/design/templates/radio-group/vertical-dark.svg +1 -0
  595. package/docs/design/templates/radio-group/vertical.svg +1 -0
  596. package/docs/design/templates/radio-group-dark.svg +1 -0
  597. package/docs/design/templates/radio-group.svg +1 -0
  598. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  599. package/docs/design/templates/segmented-control/equal.svg +1 -1
  600. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
  601. package/docs/design/templates/segmented-control/pill-small.svg +1 -1
  602. package/docs/design/templates/segmented-control-dark.svg +1 -1
  603. package/docs/design/templates/segmented-control.svg +1 -1
  604. package/docs/design/templates/select/compact-dark.svg +1 -0
  605. package/docs/design/templates/select/compact.svg +1 -0
  606. package/docs/design/templates/select/form-dark.svg +1 -0
  607. package/docs/design/templates/select/form.svg +1 -0
  608. package/docs/design/templates/select/icons-dark.svg +1 -0
  609. package/docs/design/templates/select/icons.svg +1 -0
  610. package/docs/design/templates/select-dark.svg +1 -0
  611. package/docs/design/templates/select.svg +1 -0
  612. package/docs/design/templates/slider/compact-dark.svg +1 -0
  613. package/docs/design/templates/slider/compact.svg +1 -0
  614. package/docs/design/templates/slider/readout-dark.svg +1 -0
  615. package/docs/design/templates/slider/readout.svg +1 -0
  616. package/docs/design/templates/slider/ticks-dark.svg +1 -0
  617. package/docs/design/templates/slider/ticks.svg +1 -0
  618. package/docs/design/templates/slider-dark.svg +1 -0
  619. package/docs/design/templates/slider.svg +1 -0
  620. package/docs/design/templates/switch/compact-dark.svg +1 -0
  621. package/docs/design/templates/switch/compact.svg +1 -0
  622. package/docs/design/templates/switch/states-dark.svg +1 -0
  623. package/docs/design/templates/switch/states.svg +1 -0
  624. package/docs/design/templates/switch-dark.svg +1 -0
  625. package/docs/design/templates/switch.svg +1 -0
  626. package/docs/design/templates/tag-field/error-dark.svg +1 -0
  627. package/docs/design/templates/tag-field/error.svg +1 -0
  628. package/docs/design/templates/tag-field/tags-dark.svg +1 -0
  629. package/docs/design/templates/tag-field/tags.svg +1 -0
  630. package/docs/design/templates/tag-field-dark.svg +1 -0
  631. package/docs/design/templates/tag-field.svg +1 -0
  632. package/docs/design/templates/text-field/compact-dark.svg +1 -0
  633. package/docs/design/templates/text-field/compact.svg +1 -0
  634. package/docs/design/templates/text-field/error-dark.svg +1 -0
  635. package/docs/design/templates/text-field/error.svg +1 -0
  636. package/docs/design/templates/text-field/labeled-dark.svg +1 -0
  637. package/docs/design/templates/text-field/labeled.svg +1 -0
  638. package/docs/design/templates/text-field/multiline-dark.svg +1 -0
  639. package/docs/design/templates/text-field/multiline.svg +1 -0
  640. package/docs/design/templates/text-field/search-dark.svg +1 -0
  641. package/docs/design/templates/text-field/search.svg +1 -0
  642. package/docs/design/templates/text-field-dark.svg +1 -0
  643. package/docs/design/templates/text-field.svg +1 -0
  644. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  645. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  646. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -1
  647. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -1
  648. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -1
  649. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -1
  650. package/docs/design/templates/toolbar-dark.svg +1 -1
  651. package/docs/design/templates/toolbar.svg +1 -1
  652. package/docs/design/templates/value-table/details-dark.svg +1 -1
  653. package/docs/design/templates/value-table/details.svg +1 -1
  654. package/docs/design/templates/value-table-dark.svg +1 -1
  655. package/docs/design/templates/value-table.svg +1 -1
  656. package/docs/design/templates.md +19 -6
  657. package/docs/design-philosophy.md +6 -6
  658. package/docs/disclosure.md +63 -0
  659. package/docs/examples/component-catalog-extension.json +2 -2
  660. package/docs/layout.md +16 -7
  661. package/docs/list-detail-dialog.md +96 -0
  662. package/docs/manual-test-plan.md +1 -1
  663. package/docs/{composer.md → message-composer.md} +41 -28
  664. package/docs/overlay-toast.md +62 -0
  665. package/docs/overlay-tooltip.md +53 -0
  666. package/docs/progress.md +62 -0
  667. package/docs/recipes.md +15 -21
  668. package/docs/slider.md +64 -0
  669. package/docs/surface-scaffold.md +155 -88
  670. package/docs/tag-field.md +66 -0
  671. package/docs/type-contracts.md +8 -8
  672. package/docs/ui-analyzer.md +1 -1
  673. package/docs/ui-doctor.md +11 -6
  674. package/docs/ux-demo.md +6 -6
  675. package/docs/webawesome-migration.md +80 -0
  676. package/docs/webawesome-theme.md +57 -35
  677. package/docs/workbench-dialog.md +85 -0
  678. package/docs/workbench.md +10 -6
  679. package/docs/writing.md +10 -8
  680. package/doctor/copy-capitalization-checks.mjs +18 -9
  681. package/llms.txt +127 -57
  682. package/package.json +156 -39
  683. package/ux-demo/recipes/composer-form.tsx +18 -19
  684. package/ux-demo/recipes/list-detail-dialog.tsx +55 -162
  685. package/ux-demo/recipes/mount-recipe.ts +7 -6
  686. package/ux-demo/recipes/types.ts +1 -0
  687. package/ai/components/icon-button.md +0 -82
  688. package/ai/components/icon-toggle-button.md +0 -80
  689. package/dist/app-tab.js +0 -6
  690. package/dist/app-tab.js.map +0 -1
  691. package/dist/browser/app-tab.js +0 -4
  692. package/dist/browser/composer.js +0 -4
  693. package/dist/browser/icon-toggle-button.js +0 -4
  694. package/dist/browser/token-search-field.js +0 -4
  695. package/dist/chunk-2MSPNRWJ.js.map +0 -1
  696. package/dist/chunk-7IUEBNCO.js.map +0 -1
  697. package/dist/chunk-AV7CPAPT.js +0 -82
  698. package/dist/chunk-AV7CPAPT.js.map +0 -1
  699. package/dist/chunk-BYFTHA4I.js.map +0 -1
  700. package/dist/chunk-CA7LNX3J.js +0 -44
  701. package/dist/chunk-CA7LNX3J.js.map +0 -1
  702. package/dist/chunk-CR5U5FV6.js.map +0 -1
  703. package/dist/chunk-ELCMSQNJ.js.map +0 -1
  704. package/dist/chunk-ETCWQLJV.js.map +0 -1
  705. package/dist/chunk-FDZNYD4C.js.map +0 -1
  706. package/dist/chunk-FR76ZJQC.js +0 -90
  707. package/dist/chunk-FR76ZJQC.js.map +0 -1
  708. package/dist/chunk-HQZYKJ56.js.map +0 -1
  709. package/dist/chunk-HZPHCSCS.js.map +0 -1
  710. package/dist/chunk-JOR5LGYE.js.map +0 -1
  711. package/dist/chunk-K4AT3V3J.js.map +0 -1
  712. package/dist/chunk-LL45C7BB.js.map +0 -1
  713. package/dist/chunk-LOSRXZAH.js.map +0 -1
  714. package/dist/chunk-LPHU44S3.js.map +0 -1
  715. package/dist/chunk-M5KZ26VV.js.map +0 -1
  716. package/dist/chunk-MXNIVEVL.js.map +0 -1
  717. package/dist/chunk-NS762OVM.js +0 -222
  718. package/dist/chunk-NS762OVM.js.map +0 -1
  719. package/dist/chunk-QTSMHH5J.js.map +0 -1
  720. package/dist/chunk-T5BJBMW7.js.map +0 -1
  721. package/dist/chunk-TDMHA7C3.js.map +0 -1
  722. package/dist/chunk-TGLUDQP2.js.map +0 -1
  723. package/dist/chunk-U6QYTMDB.js.map +0 -1
  724. package/dist/chunk-VFYO3UGZ.js +0 -45
  725. package/dist/chunk-VFYO3UGZ.js.map +0 -1
  726. package/dist/chunk-W4IK7AWD.js.map +0 -1
  727. package/dist/chunk-YBWQR2OK.js.map +0 -1
  728. package/dist/chunk-ZJC5ND3M.js.map +0 -1
  729. package/dist/composer.js +0 -5
  730. package/dist/composer.js.map +0 -1
  731. package/dist/icon-button.d.ts +0 -46
  732. package/dist/icon-button.js +0 -6
  733. package/dist/icon-button.js.map +0 -1
  734. package/dist/icon-toggle-button.d.ts +0 -42
  735. package/dist/icon-toggle-button.js +0 -6
  736. package/dist/icon-toggle-button.js.map +0 -1
  737. package/dist/styles/components/actions/icon-button/icon-button.css +0 -22
  738. package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +0 -83
  739. package/dist/styles/icon-button.css +0 -22
  740. package/dist/styles/icon-toggle-button.css +0 -83
  741. package/dist/token-search-field.d.ts +0 -3
  742. package/dist/token-search-field.js +0 -5
  743. package/dist/token-search-field.js.map +0 -1
  744. package/dist/token-search-model.d.ts +0 -3
  745. package/dist/token-search-model.js +0 -3
  746. package/dist/token-search-model.js.map +0 -1
  747. package/dist/wire-composers.js +0 -3
  748. package/dist/wire-token-search-fields.js +0 -6
  749. package/docs/design/templates/composer/chat-dark.svg +0 -1
  750. package/docs/design/templates/composer/chat.svg +0 -1
  751. package/docs/design/templates/composer-dark.svg +0 -1
  752. package/docs/design/templates/composer.svg +0 -1
  753. /package/docs/design/templates/{token-search-field → search-field}/empty-dark.svg +0 -0
  754. /package/docs/design/templates/{token-search-field → search-field}/empty.svg +0 -0
  755. /package/docs/design/templates/{token-search-field → search-field}/tokens-dark.svg +0 -0
  756. /package/docs/design/templates/{token-search-field → search-field}/tokens.svg +0 -0
  757. /package/docs/design/templates/{token-search-field-dark.svg → search-field-dark.svg} +0 -0
  758. /package/docs/design/templates/{token-search-field.svg → search-field.svg} +0 -0
package/README.md CHANGED
@@ -142,7 +142,7 @@ because neither has one unambiguous returned root; `CollapsiblePanelToggle`
142
142
  supports it as a normal single-root control.
143
143
 
144
144
  `ListItem.rootAttributes`, `ListHeader.rootAttributes`,
145
- `ListActionRow.rootAttributes`, `AppTab.rootAttributes`,
145
+ `ListActionRow.rootAttributes`, `TabBarItem.rootAttributes`,
146
146
  `Catalog.stageRootAttributes`, `CatalogExample.rootAttributes`, and `CatalogExampleStack.rootAttributes` carry typed
147
147
  application `data-*` metadata without
148
148
  teaching the package domain fields. `ListHeader.triggerAttributes` and
@@ -207,81 +207,103 @@ interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
207
207
 
208
208
  ## Component subpaths
209
209
 
210
- | Component | Browser import (includes reachable CSS) | Manual CSS export |
211
- | ------------------------------------------------------------------- | --------------------------------------- | ---------------------------------------- |
212
- | `LucideIcon` | `@kerfjs/ui/lucide-icon` | `@kerfjs/ui/lucide-icon.css` |
213
- | `Badge` | `@kerfjs/ui/badge` | `@kerfjs/ui/badge.css` |
214
- | `Chip` | `@kerfjs/ui/chip` | `@kerfjs/ui/chip.css` |
215
- | `DisclosureArrow` | `@kerfjs/ui/disclosure-arrow` | `@kerfjs/ui/disclosure-arrow.css` |
216
- | `Toolbar` | `@kerfjs/ui/toolbar` | `@kerfjs/ui/toolbar.css` |
217
- | `ToolbarControlGroup`, `ToolbarActionLink` | `@kerfjs/ui/toolbar-control-group` | `@kerfjs/ui/toolbar-control-group.css` |
218
- | `DialogSurface`, `PopupSurface` | `@kerfjs/ui/surface-scaffold` | `@kerfjs/ui/surface-scaffold.css` |
219
- | `FloatingToolbar` | `@kerfjs/ui/floating-toolbar` | `@kerfjs/ui/floating-toolbar.css` |
220
- | `PopupMenu` (register with `@kerfjs/ui/popup-menu/register`) | `@kerfjs/ui/popup-menu` | `@kerfjs/ui/popup-menu.css` |
221
- | `openAnchoredSurface`, `openAnchoredSurfaceAt` | `@kerfjs/ui/anchored-surface` | `@kerfjs/ui/anchored-surface.css` |
222
- | `ToolbarText` | `@kerfjs/ui/toolbar-text` | `@kerfjs/ui/toolbar-text.css` |
223
- | `Text`, `FieldLabel` | `@kerfjs/ui/text` | `@kerfjs/ui/text.css` |
224
- | `List` | `@kerfjs/ui/list` | `@kerfjs/ui/list.css` |
225
- | `Row` | `@kerfjs/ui/row` | `@kerfjs/ui/row.css` |
226
- | `Grid` | `@kerfjs/ui/grid` | `@kerfjs/ui/grid.css` |
227
- | `Spacer` | `@kerfjs/ui/spacer` | `@kerfjs/ui/spacer.css` |
228
- | Typed CSS dimension builders | `@kerfjs/ui/css-values` | — |
229
- | `ListActionRow` | `@kerfjs/ui/list-action-row` | `@kerfjs/ui/list-action-row.css` |
230
- | `ListItem` | `@kerfjs/ui/list-item` | `@kerfjs/ui/list-item.css` |
231
- | `wireListReorder`, `reorderListItems` | `@kerfjs/ui/wire-list-reorder` | — |
232
- | `wireListFocusScroll` | `@kerfjs/ui/wire-list-focus-scroll` | — |
233
- | `ListHeader` | `@kerfjs/ui/list-header` | `@kerfjs/ui/list-header.css` |
234
- | `ListInsetControl` | `@kerfjs/ui/list-inset-control` | `@kerfjs/ui/list-inset-control.css` |
235
- | `ListInsetText` | `@kerfjs/ui/list-inset-text` | `@kerfjs/ui/list-inset-text.css` |
236
- | `ContentItem` | `@kerfjs/ui/content-item` | `@kerfjs/ui/content-item.css` |
237
- | `Pane` | `@kerfjs/ui/pane` | `@kerfjs/ui/pane.css` |
238
- | `NavStack` | `@kerfjs/ui/nav-stack` | `@kerfjs/ui/nav-stack.css` |
239
- | `wireNavStack` | `@kerfjs/ui/wire-nav-stack` | — |
240
- | `SplitView` | `@kerfjs/ui/split-view` | `@kerfjs/ui/split-view.css` |
241
- | `TabNavigator` | `@kerfjs/ui/tab-navigator` | `@kerfjs/ui/tab-navigator.css` |
242
- | `wireTabNavigator` | `@kerfjs/ui/wire-tab-navigator` | — |
243
- | `Workbench` | `@kerfjs/ui/workbench` | `@kerfjs/ui/workbench.css` |
244
- | `wireWorkbench` | `@kerfjs/ui/wire-workbench` | — |
245
- | `CollapsiblePanel`, `CollapsiblePanelToggle` | `@kerfjs/ui/collapsible-panel` | `@kerfjs/ui/collapsible-panel.css` |
246
- | `wireSidebar` | `@kerfjs/ui/wire-sidebar` | — |
247
- | Content and navigation composition | — | `@kerfjs/ui/layout.css` |
248
- | `ResizableRegion` | `@kerfjs/ui/resizable-region` | `@kerfjs/ui/resizable-region.css` |
249
- | `wireResizableRegions` | `@kerfjs/ui/wire-resizable-regions` | — |
250
- | `AppTab` | `@kerfjs/ui/app-tab` | `@kerfjs/ui/app-tab.css` |
251
- | `TabBar` | `@kerfjs/ui/tab-bar` | `@kerfjs/ui/tab-bar.css` |
252
- | `wireTabBars`, `reorderTabs` | `@kerfjs/ui/wire-tab-bars` | — |
253
- | `wireScrollDividers` | `@kerfjs/ui/wire-scroll-dividers` | — |
254
- | `wireToolbarVisibility` | `@kerfjs/ui/wire-toolbar-visibility` | — |
255
- | `wireOverlaySheets` | `@kerfjs/ui/wire-overlay-sheets` | `@kerfjs/ui/overlay-sheet.css` |
256
- | `LoadingSpinner` | `@kerfjs/ui/loading-spinner` | `@kerfjs/ui/loading-spinner.css` |
257
- | `Skeleton` | `@kerfjs/ui/skeleton` | `@kerfjs/ui/skeleton.css` |
258
- | `SunkenPanel` | `@kerfjs/ui/sunken-panel` | `@kerfjs/ui/sunken-panel.css` |
259
- | `BackdropImage` | `@kerfjs/ui/backdrop-image` | `@kerfjs/ui/backdrop-image.css` |
260
- | `Select` | `@kerfjs/ui/select` | `@kerfjs/ui/select.css` |
261
- | `SegmentedControl` | `@kerfjs/ui/segmented-control` | `@kerfjs/ui/segmented-control.css` |
262
- | `ChoiceChips` | `@kerfjs/ui/choice-chips` | `@kerfjs/ui/choice-chips.css` |
263
- | `Composer` | `@kerfjs/ui/composer` | `@kerfjs/ui/composer.css` |
264
- | `wireComposers` | `@kerfjs/ui/wire-composers` | — |
265
- | `TokenSearchField`, `readTokenSearchField`, `placeTokenSearchCaret` | `@kerfjs/ui/token-search-field` | `@kerfjs/ui/token-search-field.css` |
266
- | `wireTokenSearchFields` | `@kerfjs/ui/wire-token-search-fields` | — |
267
- | `createTokenSearchModel` | `@kerfjs/ui/token-search-model` | — |
268
- | `StateBanner` | `@kerfjs/ui/state-banner` | `@kerfjs/ui/state-banner.css` |
269
- | `IconButton` | `@kerfjs/ui/icon-button` | `@kerfjs/ui/icon-button.css` |
270
- | `IconToggleButton` | `@kerfjs/ui/icon-toggle-button` | `@kerfjs/ui/icon-toggle-button.css` |
271
- | `SplitButton` | `@kerfjs/ui/split-button` | `@kerfjs/ui/split-button.css` |
272
- | `FramedList`, `FramedListRow` | `@kerfjs/ui/framed-list` | `@kerfjs/ui/framed-list.css` |
273
- | `SummaryRow` | `@kerfjs/ui/summary-row` | `@kerfjs/ui/summary-row.css` |
274
- | `ColumnTrack` | `@kerfjs/ui/column-track` | `@kerfjs/ui/column-track.css` |
275
- | `ContentSwap` | `@kerfjs/ui/content-swap` | `@kerfjs/ui/content-swap.css` |
276
- | `FilePickerTrigger`, `FileDropZone` | `@kerfjs/ui/file-picker` | `@kerfjs/ui/file-picker.css` |
277
- | `wireFilePickers`, `fileMatchesAccept` | `@kerfjs/ui/wire-file-pickers` | — |
278
- | `Combobox` | `@kerfjs/ui/combobox` | `@kerfjs/ui/combobox.css` |
279
- | `wireComboboxes` | `@kerfjs/ui/wire-comboboxes` | — |
280
- | `CornerStatus` | `@kerfjs/ui/corner-status` | `@kerfjs/ui/corner-status.css` |
281
- | `EdgeActivityIndicator` | `@kerfjs/ui/edge-activity-indicator` | `@kerfjs/ui/edge-activity-indicator.css` |
282
- | `wireCornerStatus` | `@kerfjs/ui/wire-corner-status` | — |
283
- | `EmptyState` | `@kerfjs/ui/empty-state` | `@kerfjs/ui/empty-state.css` |
284
- | `ValueTable`, `ValueTableRow` | `@kerfjs/ui/value-table` | `@kerfjs/ui/value-table.css` |
210
+ | Component | Browser import (includes reachable CSS) | Manual CSS export |
211
+ | ------------------------------------------------------------ | --------------------------------------- | ---------------------------------------- |
212
+ | `LucideIcon` | `@kerfjs/ui/lucide-icon` | `@kerfjs/ui/lucide-icon.css` |
213
+ | `Badge` | `@kerfjs/ui/badge` | `@kerfjs/ui/badge.css` |
214
+ | `Chip` | `@kerfjs/ui/chip` | `@kerfjs/ui/chip.css` |
215
+ | `DisclosureArrow` | `@kerfjs/ui/disclosure-arrow` | `@kerfjs/ui/disclosure-arrow.css` |
216
+ | `Toolbar` | `@kerfjs/ui/toolbar` | `@kerfjs/ui/toolbar.css` |
217
+ | `ToolbarControlGroup`, `ToolbarActionLink` | `@kerfjs/ui/toolbar-control-group` | `@kerfjs/ui/toolbar-control-group.css` |
218
+ | `DialogSurface`, `PopupSurface` | `@kerfjs/ui/surface-scaffold` | `@kerfjs/ui/surface-scaffold.css` |
219
+ | `ListDetailDialog` | `@kerfjs/ui/list-detail-dialog` | `@kerfjs/ui/list-detail-dialog.css` |
220
+ | `WorkbenchDialog` | `@kerfjs/ui/workbench-dialog` | `@kerfjs/ui/workbench-dialog.css` |
221
+ | `Disclosure` | `@kerfjs/ui/disclosure` | `@kerfjs/ui/disclosure.css` |
222
+ | `ProgressBar` | `@kerfjs/ui/progress-bar` | `@kerfjs/ui/progress-bar.css` |
223
+ | `ProgressRing` | `@kerfjs/ui/progress-ring` | `@kerfjs/ui/progress-ring.css` |
224
+ | `Slider` | `@kerfjs/ui/slider` | `@kerfjs/ui/slider.css` |
225
+ | `wireSliders`, `syncSlider` | `@kerfjs/ui/wire-sliders` | — |
226
+ | `TagField` | `@kerfjs/ui/tag-field` | `@kerfjs/ui/tag-field.css` |
227
+ | `wireTagFields` | `@kerfjs/ui/wire-tag-fields` | — |
228
+ | `ColorSwatches` | `@kerfjs/ui/color-swatches` | `@kerfjs/ui/color-swatches.css` |
229
+ | `ColorPicker` | `@kerfjs/ui/color-picker` | `@kerfjs/ui/color-picker.css` |
230
+ | `wireColorPickers` | `@kerfjs/ui/wire-color-pickers` | — |
231
+ | `ColorField` | `@kerfjs/ui/color-field` | `@kerfjs/ui/color-field.css` |
232
+ | `wireColorFields` | `@kerfjs/ui/wire-color-fields` | — |
233
+ | `FloatingToolbar` | `@kerfjs/ui/floating-toolbar` | `@kerfjs/ui/floating-toolbar.css` |
234
+ | `PopupMenu` (register with `@kerfjs/ui/popup-menu/register`) | `@kerfjs/ui/popup-menu` | `@kerfjs/ui/popup-menu.css` |
235
+ | `openAnchoredSurface`, `openAnchoredSurfaceAt` | `@kerfjs/ui/anchored-surface` | `@kerfjs/ui/anchored-surface.css` |
236
+ | `ToolbarText` | `@kerfjs/ui/toolbar-text` | `@kerfjs/ui/toolbar-text.css` |
237
+ | `Text`, `FieldLabel` | `@kerfjs/ui/text` | `@kerfjs/ui/text.css` |
238
+ | `List` | `@kerfjs/ui/list` | `@kerfjs/ui/list.css` |
239
+ | `Row` | `@kerfjs/ui/row` | `@kerfjs/ui/row.css` |
240
+ | `Grid` | `@kerfjs/ui/grid` | `@kerfjs/ui/grid.css` |
241
+ | `Spacer` | `@kerfjs/ui/spacer` | `@kerfjs/ui/spacer.css` |
242
+ | Typed CSS dimension builders | `@kerfjs/ui/css-values` | — |
243
+ | `ListActionRow` | `@kerfjs/ui/list-action-row` | `@kerfjs/ui/list-action-row.css` |
244
+ | `ListItem` | `@kerfjs/ui/list-item` | `@kerfjs/ui/list-item.css` |
245
+ | `wireListReorder`, `reorderListItems` | `@kerfjs/ui/wire-list-reorder` | — |
246
+ | `wireListFocusScroll` | `@kerfjs/ui/wire-list-focus-scroll` | — |
247
+ | `ListHeader` | `@kerfjs/ui/list-header` | `@kerfjs/ui/list-header.css` |
248
+ | `ListInsetControl` | `@kerfjs/ui/list-inset-control` | `@kerfjs/ui/list-inset-control.css` |
249
+ | `ListInsetText` | `@kerfjs/ui/list-inset-text` | `@kerfjs/ui/list-inset-text.css` |
250
+ | `ContentItem` | `@kerfjs/ui/content-item` | `@kerfjs/ui/content-item.css` |
251
+ | `Pane` | `@kerfjs/ui/pane` | `@kerfjs/ui/pane.css` |
252
+ | `NavStack` | `@kerfjs/ui/nav-stack` | `@kerfjs/ui/nav-stack.css` |
253
+ | `wireNavStack` | `@kerfjs/ui/wire-nav-stack` | — |
254
+ | `wirePaneChrome` | `@kerfjs/ui/wire-pane-chrome` | — |
255
+ | `SplitView` | `@kerfjs/ui/split-view` | `@kerfjs/ui/split-view.css` |
256
+ | `TabNavigator` | `@kerfjs/ui/tab-navigator` | `@kerfjs/ui/tab-navigator.css` |
257
+ | `wireTabNavigator` | `@kerfjs/ui/wire-tab-navigator` | — |
258
+ | `Workbench` | `@kerfjs/ui/workbench` | `@kerfjs/ui/workbench.css` |
259
+ | `wireWorkbench` | `@kerfjs/ui/wire-workbench` | — |
260
+ | `CollapsiblePanel`, `CollapsiblePanelToggle` | `@kerfjs/ui/collapsible-panel` | `@kerfjs/ui/collapsible-panel.css` |
261
+ | `wireSidebar` | `@kerfjs/ui/wire-sidebar` | — |
262
+ | Content and navigation composition | — | `@kerfjs/ui/layout.css` |
263
+ | `ResizableRegion` | `@kerfjs/ui/resizable-region` | `@kerfjs/ui/resizable-region.css` |
264
+ | `wireResizableRegions` | `@kerfjs/ui/wire-resizable-regions` | — |
265
+ | `TabBarItem` | `@kerfjs/ui/tab-bar-item` | `@kerfjs/ui/tab-bar-item.css` |
266
+ | `TabBar` | `@kerfjs/ui/tab-bar` | `@kerfjs/ui/tab-bar.css` |
267
+ | `wireTabBars`, `reorderTabs` | `@kerfjs/ui/wire-tab-bars` | — |
268
+ | `wireScrollDividers` | `@kerfjs/ui/wire-scroll-dividers` | — |
269
+ | `wireToolbarVisibility` | `@kerfjs/ui/wire-toolbar-visibility` | — |
270
+ | `wireOverlaySheets` | `@kerfjs/ui/wire-overlay-sheets` | `@kerfjs/ui/overlay-sheet.css` |
271
+ | Toasts for `kerfjs/overlay` `toast()` | — | `@kerfjs/ui/overlay-toast.css` |
272
+ | Tooltips for `kerfjs/overlay` `tooltip()` | — | `@kerfjs/ui/overlay-tooltip.css` |
273
+ | `LoadingSpinner` | `@kerfjs/ui/loading-spinner` | `@kerfjs/ui/loading-spinner.css` |
274
+ | `Skeleton` | `@kerfjs/ui/skeleton` | `@kerfjs/ui/skeleton.css` |
275
+ | `SunkenPanel` | `@kerfjs/ui/sunken-panel` | `@kerfjs/ui/sunken-panel.css` |
276
+ | `BackdropImage` | `@kerfjs/ui/backdrop-image` | `@kerfjs/ui/backdrop-image.css` |
277
+ | `Select` | `@kerfjs/ui/select` | `@kerfjs/ui/select.css` |
278
+ | `SegmentedControl` | `@kerfjs/ui/segmented-control` | `@kerfjs/ui/segmented-control.css` |
279
+ | `ChoiceChips` | `@kerfjs/ui/choice-chips` | `@kerfjs/ui/choice-chips.css` |
280
+ | `TextField` | `@kerfjs/ui/text-field` | `@kerfjs/ui/text-field.css` |
281
+ | `wireTextFields` | `@kerfjs/ui/wire-text-fields` | — |
282
+ | `Checkbox` | `@kerfjs/ui/checkbox` | `@kerfjs/ui/checkbox.css` |
283
+ | `wireCheckboxes` | `@kerfjs/ui/wire-checkboxes` | — |
284
+ | `RadioGroup` | `@kerfjs/ui/radio-group` | `@kerfjs/ui/radio-group.css` |
285
+ | `Switch` | `@kerfjs/ui/switch` | `@kerfjs/ui/switch.css` |
286
+ | `MessageComposer` | `@kerfjs/ui/message-composer` | `@kerfjs/ui/message-composer.css` |
287
+ | `wireMessageComposers` | `@kerfjs/ui/wire-message-composers` | — |
288
+ | `SearchField`, `readSearchField`, `placeSearchFieldCaret` | `@kerfjs/ui/search-field` | `@kerfjs/ui/search-field.css` |
289
+ | `wireSearchFields` | `@kerfjs/ui/wire-search-fields` | — |
290
+ | `createSearchFieldModel` | `@kerfjs/ui/search-field-model` | — |
291
+ | `StateBanner` | `@kerfjs/ui/state-banner` | `@kerfjs/ui/state-banner.css` |
292
+ | `Button` | `@kerfjs/ui/button` | `@kerfjs/ui/button.css` |
293
+ | `SplitButton` | `@kerfjs/ui/split-button` | `@kerfjs/ui/split-button.css` |
294
+ | `FramedList`, `FramedListRow` | `@kerfjs/ui/framed-list` | `@kerfjs/ui/framed-list.css` |
295
+ | `SummaryRow` | `@kerfjs/ui/summary-row` | `@kerfjs/ui/summary-row.css` |
296
+ | `ColumnTrack` | `@kerfjs/ui/column-track` | `@kerfjs/ui/column-track.css` |
297
+ | `ContentSwap` | `@kerfjs/ui/content-swap` | `@kerfjs/ui/content-swap.css` |
298
+ | `FilePickerTrigger`, `FileDropZone` | `@kerfjs/ui/file-picker` | `@kerfjs/ui/file-picker.css` |
299
+ | `wireFilePickers`, `fileMatchesAccept` | `@kerfjs/ui/wire-file-pickers` | — |
300
+ | `Combobox` | `@kerfjs/ui/combobox` | `@kerfjs/ui/combobox.css` |
301
+ | `wireComboboxes` | `@kerfjs/ui/wire-comboboxes` | — |
302
+ | `CornerStatus` | `@kerfjs/ui/corner-status` | `@kerfjs/ui/corner-status.css` |
303
+ | `EdgeActivityIndicator` | `@kerfjs/ui/edge-activity-indicator` | `@kerfjs/ui/edge-activity-indicator.css` |
304
+ | `wireCornerStatus` | `@kerfjs/ui/wire-corner-status` | — |
305
+ | `EmptyState` | `@kerfjs/ui/empty-state` | `@kerfjs/ui/empty-state.css` |
306
+ | `ValueTable`, `ValueTableRow` | `@kerfjs/ui/value-table` | `@kerfjs/ui/value-table.css` |
285
307
 
286
308
  Application layouts are separate component subpaths. Browser-condition imports
287
309
  include their reachable CSS; use the matching manual CSS export when your
@@ -325,7 +347,7 @@ app-owned "More" `PopupMenu` (in a `single` group with `nestedDropdown`).
325
347
  `DisclosureArrow` defaults to an 18px root-scaled decorative visual. Pass a
326
348
  typed `size` (for example `size={remify(24)}` from `@kerfjs/ui/css-values`)
327
349
  when a consumer needs another size; the owning control still supplies interaction, naming, and
328
- expanded state. Kerf `Select` retains its independent Web Awesome expand-glyph
350
+ expanded state. Kerf `Select` keeps its own expand-glyph
329
351
  scale of `.5` through `--kui-disclosure-icon-scale`. Author replacement
330
352
  `DisclosureArrow` icon content facing right before its configured direction
331
353
  transform is applied. Direction changes take the shortest rotation path; a
@@ -615,8 +637,11 @@ the complete [layout contract](./docs/layout.md).
615
637
 
616
638
  ## Web Awesome theme
617
639
 
618
- Apps using Web Awesome's free components can opt into the same visual universe
619
- with one CSS import:
640
+ Kerf components never need Web Awesome: every Kerf component draws native
641
+ controls and reads only `--kui-*` tokens, which resolve to the same values with
642
+ or without the Web Awesome theme. `@awesome.me/webawesome` is an optional peer
643
+ for applications that also render Web Awesome's `wa-*` elements. Those apps opt
644
+ into the same visual universe with one CSS import:
620
645
 
621
646
  ```ts
622
647
  import type {} from "@kerfjs/ui/webawesome";
@@ -636,7 +661,7 @@ radii, tooltips, and shadows through Web Awesome's public `--wa-*` contract.
636
661
  On `wa-dialog`, the optional `hide-actions` class hides the exported
637
662
  `header-actions` shadow part for compositions that provide another dismissal
638
663
  affordance.
639
- Those tokens flow into all free component families. Every free Web Awesome 3.12
664
+ Those tokens flow into all free component families. Every free Web Awesome 3.14
640
665
  component has an individual UX-catalog route under the collapsible ecosystem
641
666
  section, but the theme entry does not import or register component JavaScript,
642
667
  so each component module remains independently tree-shakeable in consuming apps.
@@ -681,7 +706,7 @@ and `danger` palettes. Override an individual banner with
681
706
  `--kui-state-banner-action-hover-background`. To retheme one tone everywhere,
682
707
  override `--kui-state-banner-{tone}-{background|border|foreground}`. Other
683
708
  stateful components follow the same public-variable pattern, including
684
- `--kui-toolbar-control-*`, `--kui-segmented-*`, `--kui-app-tab-*`, and
709
+ `--kui-toolbar-control-*`, `--kui-segmented-*`, `--kui-tab-bar-item-*`, and
685
710
  `--kui-tab-bar-*`.
686
711
 
687
712
  `SegmentedControl` is a controlled exclusive-choice component. Use
@@ -741,26 +766,26 @@ change handler. A multiple group takes no `required`. On dark inverse chrome,
741
766
  place the chips in a dark appearance scope (`.wa-dark`) instead of restyling
742
767
  them.
743
768
 
744
- `Composer` is the chat or prompt composer: a raised frame (the standard
769
+ `MessageComposer` is the chat or prompt composer: a raised frame (the standard
745
770
  border, large radius, and `shadow-l`) whose border turns brand while focus is
746
771
  within. Its borderless message field grows with its content between `minRows`
747
772
  (default 1) and `maxRows` (default 8) lines, then scrolls, above an action row
748
773
  with an optional quiet `hint` and the trailing `actions`:
749
774
 
750
775
  ```tsx
751
- <Composer
776
+ <MessageComposer
752
777
  id="assistant-message"
753
778
  name="message"
754
779
  label="Message"
755
780
  placeholder="Ask about this build"
756
781
  hint="Answers use the latest nightly build."
757
- actions={<wa-button variant="brand" data-action="send-message">Send</wa-button>}
782
+ trailing={<Button tone="brand" action="send-message">Send</Button>}
758
783
  />
759
784
  ```
760
785
 
761
786
  The app reads and clears the textarea from its send action. For
762
- Enter-to-send, set `submitOnEnter` and call `wireComposers(root)` from
763
- `@kerfjs/ui/wire-composers` once: Enter or Cmd/Ctrl+Enter clicks the first
787
+ Enter-to-send, set `submitOnEnter` and call `wireMessageComposers(root)` from
788
+ `@kerfjs/ui/wire-message-composers` once: Enter or Cmd/Ctrl+Enter clicks the first
764
789
  trailing action, Shift+Enter inserts a newline, and an IME composition commit
765
790
  or an empty message never sends. Put it in a `DialogSurface` with
766
791
  `footerPresentation="floating"` (`slot="footer"`) to float it over a
@@ -770,14 +795,14 @@ Add `headerPresentation="floating"` with a `fill` body and
770
795
  `scrollClearance="both"` to let the transcript scroll beneath a translucent
771
796
  title bar as well.
772
797
 
773
- `TokenSearchField` is a token-controlled contenteditable searchbox that keeps
798
+ `SearchField` is a token-controlled contenteditable searchbox that keeps
774
799
  free text and ordered filter chips in one field. Its editable text stays
775
800
  DOM-owned between token changes so typing does not replace the caret. Tokens
776
801
  expose stable edit/remove actions and remain atomic during editing; the app owns
777
802
  parsing, suggestions, query execution, and state in manual mode. For automatic
778
- handling, create a model with `createTokenSearchModel({ rules, evaluate })`,
803
+ handling, create a model with `createSearchFieldModel({ rules, evaluate })`,
779
804
  pass it as the field's `model`, and register it under the field id in
780
- `wireTokenSearchFields(root, { models })`. Rules parse `name:value` expressions;
805
+ `wireSearchFields(root, { models })`. Rules parse `name:value` expressions;
781
806
  their optional `suggest` function supplies selectable completions. The model
782
807
  commits valid expressions on whitespace or Enter, owns chips and clear/edit/
783
808
  remove actions, and exposes `state`, `suggestions`, and the latest `result` as
@@ -786,10 +811,10 @@ token is committed or removed, the text becomes empty or non-empty, or the
786
811
  editor revision changes, so typing plain text never re-runs the host render.
787
812
  Keep it that way in the host: read `model.state.peek()` in render, and bind
788
813
  `model.result` (or a `computed`) as a fine-grained signal hole rather than
789
- reading `model.state.value`. Omit the model to retain full manual control. Use `readTokenSearchField()`
814
+ reading `model.state.value`. Omit the model to retain full manual control. Use `readSearchField()`
790
815
  after browser input to recover text plus token offsets, and
791
- `placeTokenSearchCaret()` when restoring focus after a controlled update.
792
- Call `wireTokenSearchFields()` once at a stable root to make Enter submit through
816
+ `placeSearchFieldCaret()` when restoring focus after a controlled update.
817
+ Call `wireSearchFields()` once at a stable root to make Enter submit through
793
818
  `onSubmit` without inserting a contenteditable line break and to preserve focus
794
819
  plus the text-relative caret when keyboard deletion of a chip causes controlled
795
820
  rendering to replace the editor. A select-all deletion is normalized to a truly
@@ -811,12 +836,12 @@ and respect reduced-motion preferences. The field works standalone or inside a
811
836
  `ToolbarControlGroup`; the application owns the transient focused/open signal,
812
837
  focus transfer, and focusout policy. The catalog's Toolbar route demonstrates
813
838
  that composition at wide and narrow sizes.
814
- Override its surface through `--kui-token-search-{background|border}` and its
815
- chips through `--kui-token-search-token-{background|foreground}`. Override
816
- `--kui-token-search-line-size` only when the complete first-line geometry must
839
+ Override its surface through `--kui-search-field-{background|border}` and its
840
+ chips through `--kui-search-field-token-{background|foreground}`. Override
841
+ `--kui-search-field-line-size` only when the complete first-line geometry must
817
842
  change together.
818
843
 
819
- `TabBar` is controlled: pass ordered `AppTab` children, then wire its keyboard
844
+ `TabBar` is controlled: pass ordered `TabBarItem` children, then wire its keyboard
820
845
  and same-bar drag behavior with `wireTabBars(root, { onReorder })`. During a
821
846
  drag, the scroll strip automatically moves toward either edge with speed based
822
847
  on pointer proximity, exposing earlier or later drop targets. Apply the reported
@@ -827,53 +852,53 @@ at the opposite edge, set `trailingPlacement="adjacent"`, pass the local action
827
852
  through `trailing`, and pass the workspace action through `end`. TabBar owns the
828
853
  flex geometry: the tab strip shrinks and scrolls while both action regions stay
829
854
  visible. Do not recreate that split with descendant CSS overrides.
830
- Use `AppTab.rootAttributes` for domain `data-*` metadata and `closeIcon` for a
855
+ Use `TabBarItem.rootAttributes` for domain `data-*` metadata and `closeIcon` for a
831
856
  decorative replacement glyph. The runtime rejects roles and case variants of
832
857
  the component- or wiring-owned action, tab identity, selection, drag, drop, and
833
858
  component markers. Keep the icon free of interactive descendants; the named
834
859
  close button retains all close interaction.
835
860
 
836
- `Select` uses Web Awesome but does not register anything by itself. Install the optional peer, import the shared theme if desired, and explicitly import the registration entry in the application:
861
+ `Select` and `PopupMenu` draw their own native controls and need no Web Awesome. Each renders inert markup until its registration entry is imported once in the application:
837
862
 
838
863
  ```ts
839
- import "@kerfjs/ui/webawesome.css";
840
864
  import "@kerfjs/ui/select/register";
865
+ import "@kerfjs/ui/popup-menu/register";
841
866
  ```
842
867
 
843
- That boundary keeps Web Awesome and its custom-element side effects out of bundles that use unrelated components. Automated consumer-bundle tests enforce it. `PopupMenu` follows the same rule: import `@kerfjs/ui/popup-menu/register` once to register the dropdown, item, button, and divider elements it renders. Either registration also installs help tags: an icon-only Select, PopupMenu, or `aria-label`-named `<button>` in a `ToolbarControlGroup` shows its name in an `aria-hidden` tooltip on hover and keyboard focus. A toolbar with icon-only buttons but neither control imports `@kerfjs/ui/help-tags/register`, which registers only the tooltip.
868
+ `select/register` defines the form-associated `kui-select` root and wires every `Select` in the document; `popup-menu/register` wires every `PopupMenu` (opening, keyboard navigation, submenus, the `kui-menu-select` event, and focus return). That boundary keeps custom-element and document-listener side effects out of bundles that use unrelated components. Automated consumer-bundle tests enforce it, and also prove that no public entry except `@kerfjs/ui/webawesome.css` pulls in Web Awesome. Either registration also installs help tags: an icon-only Select, PopupMenu, or `aria-label`-named `<button>` in a `ToolbarControlGroup` shows its name in an `aria-hidden` tooltip on hover and keyboard focus. A toolbar with icon-only buttons but neither control imports `@kerfjs/ui/help-tags/register`, which registers only the tooltip.
844
869
 
845
870
  `PopupMenu` items may include `submenu` children, `checked` choices, a leading `icon`, trailing `details`, `disabledReason`, and a `danger` tone. The app owns choice state and dispatches each item's `action`. For a right-click menu, set `context: true`, a `label`, and `anchor={pointSignal.value}`; the app's `contextmenu` handler stores `{ x: event.clientX, y: event.clientY }` in that signal and calls `openPopupMenu(menu)`. The menu renders its own zero-footprint anchor host and keeps the point across re-renders, so it needs no wrapper or CSS (`openPopupMenuAt(menu, x, y)` still opens a menu rendered without `anchor`); `closePopupMenu(menu)` closes it programmatically. See [component selection](docs/component-selection.md#popup-menu-migration) for examples.
846
871
  Use `label` for a visible label or `ariaLabel` for a visually hidden name. A
847
872
  nonempty visible label takes precedence when both are supplied. Kerf names the
848
- actual shadow combobox without adding visible label spacing; this also works
849
- with `renderSelected`, and needs no application shadow-DOM patch. Use `hint`
873
+ native trigger without adding visible label spacing; this also works with
874
+ `renderSelected`. Use `hint`
850
875
  for persistent supporting text below the control and `placeholderText` for the
851
876
  empty value inside the closed control. Loading placeholders preserve the hint.
852
877
 
853
- `Select` also owns the Kerf/Web Awesome reconciliation boundary: option icons
854
- keep stable slotted elements across rerenders, and `renderSelected` content is
855
- replaced when the controlled value changes. Consumers do not need to add
878
+ `Select` also owns its reconciliation boundary: option icons keep stable
879
+ elements across rerenders, and `renderSelected` content is replaced when the
880
+ controlled value changes. Consumers do not need to add
856
881
  `data-key` or `data-morph-skip` workarounds around choice icons. Icon-bearing
857
882
  options retain the standard icon-to-label gap. When a compact Select is wrapped
858
883
  in a `ToolbarControlGroup`, use `focusRingOwner="group"`; the group paints the
859
884
  focus ring with its configured pill or rounded geometry.
860
885
 
861
- For application choices and panes, prefer Kerf's purpose-built primitives:
862
- `Select` over direct Web Awesome selection/dropdown composition,
863
- `SegmentedControl` over Button Group, `TabBar` or `SegmentedControl` over Web
864
- Awesome Tabs, `LucideIcon` over Web Awesome Icon, and `ResizableRegion` over
865
- Split Panel. `ResizableRegion` includes Hot Sheet 2's 1px separator and
886
+ For application choices and panes, use Kerf's purpose-built primitives;
887
+ Web Awesome is an optional integration, and the
888
+ [migration guide](./docs/webawesome-migration.md) maps each Web Awesome
889
+ element a Kerf component replaces (`Select`, `PopupMenu`, `SegmentedControl`,
890
+ `TabBar`, `LucideIcon`, `ResizableRegion`, and the native form controls). `ResizableRegion` includes Hot Sheet 2's 1px separator and
866
891
  hover/focus grip. Its optional `handleIcon` replaces only the decorative glyph;
867
892
  the component and `wireResizableRegions()` retain separator semantics and
868
893
  pointer/keyboard behavior. Typed policies cover separator visibility,
869
894
  instant-track/composited-content collapse, popup-safe overflow,
870
895
  inline/overlay/hidden responsive presentation, `responsiveFillAt` single-track
871
896
  replacement, and safe-area restore controls;
872
- the same policies are available on `Workbench` and `CollapsiblePanel`. Consider
873
- Web Awesome Popup when its anchored-positioning
874
- engine removes custom placement code; treat Tree, Animated Image, Comparison,
875
- Zoomable Frame, and the displaced alternatives above as exceptional rather
876
- than default patterns. The detailed rationale lives in the theme contract.
897
+ the same policies are available on `Workbench` and `CollapsiblePanel`. In an
898
+ integration application, consider Web Awesome Popup when its anchored-positioning
899
+ engine removes custom placement code, and treat Tree, Animated Image,
900
+ Comparison, and Zoomable Frame as exceptional rather than default patterns.
901
+ The detailed rationale lives in the theme contract.
877
902
 
878
903
  ## Design and tool guidance
879
904
 
@@ -885,10 +910,11 @@ than default patterns. The detailed rationale lives in the theme contract.
885
910
  - [Component and integration contract](./docs/component-contract.md)
886
911
  - [Spacing and application layout](./docs/layout.md)
887
912
  - [Web Awesome theme contract](./docs/webawesome-theme.md)
913
+ - [Moving an application off Web Awesome](./docs/webawesome-migration.md)
888
914
  - [UX catalog contract](./docs/ux-demo.md)
889
915
  - [AI guide](./ai/skill.md)
890
916
 
891
- Run `npm run dev` from this directory for the category-grouped master/detail catalog. Every public visual component has a focused route; all 70 free Web Awesome 3.12 components have focused routes under the collapsible ecosystem section. Every detail visibly links its first-party demo source and existing guidance while showing the repository-relative paths; first-party components also link their implementation source, and Web Awesome entries label local guidance as Kerf integration guidance. One grouped `Related components` selector contains derived `Uses` / `Used by` navigation across both sets. Run `npm run check` for static/unit/bundle gates and `npm run test:e2e` for the real-browser suite.
917
+ Run `npm run dev` from this directory for the category-grouped master/detail catalog. Every public visual component has a focused route; all 73 free Web Awesome 3.14 components have focused routes under the collapsible Web Awesome Integration section. Every detail visibly links its first-party demo source and existing guidance while showing the repository-relative paths; first-party components also link their implementation source, and Web Awesome entries label local guidance as Kerf integration guidance. One grouped `Related components` selector contains derived `Uses` / `Used by` navigation across both sets. Run `npm run check` for static/unit/bundle gates and `npm run test:e2e` for the real-browser suite.
892
918
 
893
919
  Run `npm run format` after editing source or structured content. The narrower
894
920
  `npm run format:css` command remains available for style-only work. The normal
@@ -912,3 +938,16 @@ negative, unresolved, or contradictory values leave the item visible under this
912
938
  width policy. Keep primary actions visible and offer a complementary overflow
913
939
  group. See `docs/component-contract.md` "Toolbar width visibility" for lifecycle
914
940
  details.
941
+
942
+ ## License and third-party notices
943
+
944
+ `@kerfjs/ui` is MIT licensed (see `LICENSE`).
945
+
946
+ Web Awesome (`@awesome.me/webawesome`, copyright Fonticons, Inc., MIT) is an
947
+ optional peer dependency. This package does not copy or bundle Web Awesome
948
+ code: `@kerfjs/ui/webawesome.css` imports Web Awesome's stylesheet from the
949
+ application's own installation, and `@kerfjs/ui/webawesome` contains only type
950
+ declarations. An application that bundles Web Awesome components
951
+ redistributes them, so it should retain Web Awesome's MIT notice; Font Awesome
952
+ Free, whose icons Web Awesome embeds, asks that the attribution comments in
953
+ those icons stay intact.
@@ -17,7 +17,9 @@
17
17
  ],
18
18
  "preferences": {
19
19
  "application-shell": {
20
- "preferred": "@kerfjs/ui:recipe-app-shell"
20
+ "preferred": "@kerfjs/ui:recipe-app-shell",
21
+ "avoid": ["@kerfjs/ui:wa-page"],
22
+ "rationale": "Compose the application shell from Workbench, SplitView, NavStack, or TabNavigator instead of a Web Awesome page."
21
23
  },
22
24
  "application-tabs": {
23
25
  "preferred": "@kerfjs/ui:tab-bar",
@@ -31,7 +33,7 @@
31
33
  "command-menu": {
32
34
  "preferred": "@kerfjs/ui:popup-menu",
33
35
  "avoid": ["@kerfjs/ui:wa-dropdown", "@kerfjs/ui:wa-dropdown-item"],
34
- "rationale": "Render PopupMenu, which wraps wa-dropdown with the shared popup contract; use Select when choosing a value."
36
+ "rationale": "Render PopupMenu, Kerf's native command menu; use Select when choosing a value."
35
37
  },
36
38
  "embedded-media": {
37
39
  "preferred": "@kerfjs/ui:content-item",
@@ -69,12 +71,131 @@
69
71
  "rationale": "Render ResizableRegion for application panes instead of a Web Awesome split panel."
70
72
  },
71
73
  "structured-search": {
72
- "preferred": "@kerfjs/ui:token-search-field"
74
+ "preferred": "@kerfjs/ui:search-field"
73
75
  },
74
76
  "value-selection": {
75
77
  "preferred": "@kerfjs/ui:select",
76
78
  "avoid": ["@kerfjs/ui:wa-select", "@kerfjs/ui:wa-option"],
77
- "rationale": "Render Select, which wraps wa-select and wa-option with Kerf's popup and spacing contract."
79
+ "rationale": "Render Select, which replaces wa-select and wa-option with Kerf's own popup, form, and spacing contract."
80
+ },
81
+ "action-button": {
82
+ "preferred": "@kerfjs/ui:button",
83
+ "avoid": ["@kerfjs/ui:wa-button"],
84
+ "rationale": "Render Button, a native button with Kerf tones and sizes, icon-only with ariaLabel, or a toggle with pressed."
85
+ },
86
+ "text-entry": {
87
+ "preferred": "@kerfjs/ui:text-field",
88
+ "avoid": ["@kerfjs/ui:wa-input", "@kerfjs/ui:wa-textarea"],
89
+ "rationale": "Render TextField, a native input or textarea with Kerf label, hint, error, clear, and count anatomy."
90
+ },
91
+ "boolean-option": {
92
+ "preferred": "@kerfjs/ui:checkbox",
93
+ "avoid": ["@kerfjs/ui:wa-checkbox", "@kerfjs/ui:wa-checkbox-group"],
94
+ "rationale": "Render Checkbox, a native checkbox drawn as a Kerf box."
95
+ },
96
+ "exclusive-option": {
97
+ "preferred": "@kerfjs/ui:radio-group",
98
+ "avoid": ["@kerfjs/ui:wa-radio-group", "@kerfjs/ui:wa-radio"],
99
+ "rationale": "Render RadioGroup, a native radio group with a choices array."
100
+ },
101
+ "immediate-setting": {
102
+ "preferred": "@kerfjs/ui:switch",
103
+ "avoid": ["@kerfjs/ui:wa-switch"],
104
+ "rationale": "Render Switch, a native switch-role checkbox for a setting that applies immediately."
105
+ },
106
+ "modal-dialog": {
107
+ "preferred": "@kerfjs/ui:surface-scaffold",
108
+ "avoid": ["@kerfjs/ui:wa-dialog", "@kerfjs/ui:wa-drawer"],
109
+ "rationale": "Render DialogSurface, a native dialog opened with openDialog and closed with closeDialog; use its side-sheet or bottom-sheet presentation instead of a Web Awesome drawer."
110
+ },
111
+ "status-badge": {
112
+ "preferred": "@kerfjs/ui:badge",
113
+ "avoid": ["@kerfjs/ui:wa-badge"],
114
+ "rationale": "Render Badge for compact status, count, or category metadata."
115
+ },
116
+ "removable-tag": {
117
+ "preferred": "@kerfjs/ui:chip",
118
+ "avoid": ["@kerfjs/ui:wa-tag"],
119
+ "rationale": "Render Chip for a tag, removable or not."
120
+ },
121
+ "activity-indicator": {
122
+ "preferred": "@kerfjs/ui:loading-spinner",
123
+ "avoid": ["@kerfjs/ui:wa-spinner"],
124
+ "rationale": "Render LoadingSpinner for indeterminate activity."
125
+ },
126
+ "loading-placeholder": {
127
+ "preferred": "@kerfjs/ui:skeleton",
128
+ "avoid": ["@kerfjs/ui:wa-skeleton"],
129
+ "rationale": "Render Skeleton for a loading placeholder."
130
+ },
131
+ "anchored-surface": {
132
+ "preferred": "@kerfjs/ui:anchored-surface",
133
+ "avoid": ["@kerfjs/ui:wa-popover", "@kerfjs/ui:wa-popup"],
134
+ "rationale": "Render AnchoredSurface for anchored interactive help or popup content; position other elements with kerfjs/overlay's positionAnchored."
135
+ },
136
+ "content-container": {
137
+ "preferred": "@kerfjs/ui:content-item",
138
+ "avoid": ["@kerfjs/ui:wa-card"],
139
+ "rationale": "Contain related content in a ContentItem (appearance=\"surface\" for a raised card) or a SunkenPanel instead of a Web Awesome card."
140
+ },
141
+ "inline-status": {
142
+ "preferred": "@kerfjs/ui:state-banner",
143
+ "avoid": ["@kerfjs/ui:wa-callout"],
144
+ "rationale": "Render StateBanner for persistent inline status instead of a Web Awesome callout."
145
+ },
146
+ "fetched-content": {
147
+ "preferred": "@kerfjs/ui:content-item",
148
+ "avoid": ["@kerfjs/ui:wa-include"],
149
+ "rationale": "Fetch remote content with resource() from kerfjs/async and render it as Kerf content inside a ContentItem; never inject fetched markup."
150
+ },
151
+ "scroll-region": {
152
+ "preferred": "@kerfjs/ui:pane",
153
+ "avoid": ["@kerfjs/ui:wa-scroller"],
154
+ "rationale": "Let a Pane own vertical scrolling with scroll edges, or use ColumnTrack for a horizontal track, instead of a Web Awesome scroller."
155
+ },
156
+ "transient-notification": {
157
+ "preferred": "@kerfjs/ui:toast",
158
+ "avoid": ["@kerfjs/ui:wa-toast", "@kerfjs/ui:wa-toast-item"],
159
+ "rationale": "Call toast() from kerfjs/overlay with @kerfjs/ui/overlay-toast.css imported instead of a Web Awesome toast stack."
160
+ },
161
+ "hover-explanation": {
162
+ "preferred": "@kerfjs/ui:tooltip",
163
+ "avoid": ["@kerfjs/ui:wa-tooltip"],
164
+ "rationale": "Call tooltip() from kerfjs/overlay with @kerfjs/ui/overlay-tooltip.css imported instead of a Web Awesome tooltip; icon-only Kerf controls already get help tags."
165
+ },
166
+ "show-hide-content": {
167
+ "preferred": "@kerfjs/ui:disclosure",
168
+ "avoid": [
169
+ "@kerfjs/ui:wa-details",
170
+ "@kerfjs/ui:wa-accordion",
171
+ "@kerfjs/ui:wa-accordion-item"
172
+ ],
173
+ "rationale": "Use the Kerf Disclosure (a native details element) for show-and-hide content, and Disclosures sharing a name for an accordion."
174
+ },
175
+ "progress-indicator": {
176
+ "preferred": "@kerfjs/ui:progress-bar",
177
+ "avoid": ["@kerfjs/ui:wa-progress-bar"],
178
+ "rationale": "Use the Kerf ProgressBar, a native progress element with a label row, tones, and an indeterminate sweep."
179
+ },
180
+ "compact-progress": {
181
+ "preferred": "@kerfjs/ui:progress-ring",
182
+ "avoid": ["@kerfjs/ui:wa-progress-ring"],
183
+ "rationale": "Use the Kerf ProgressRing where a bar does not fit, inline in text, a row, or a toolbar."
184
+ },
185
+ "range-value": {
186
+ "preferred": "@kerfjs/ui:slider",
187
+ "avoid": ["@kerfjs/ui:wa-slider"],
188
+ "rationale": "Use the Kerf Slider, a native range input drawn as a track, fill, and thumb, with wireSliders for its live readout."
189
+ },
190
+ "tag-list": {
191
+ "preferred": "@kerfjs/ui:tag-field",
192
+ "avoid": ["@kerfjs/ui:wa-tag-input"],
193
+ "rationale": "Use the Kerf TagField, SearchField's token editor as a form field with a hidden input per tag, wired by wireTagFields."
194
+ },
195
+ "color-input": {
196
+ "preferred": "@kerfjs/ui:color-field",
197
+ "avoid": ["@kerfjs/ui:wa-color-picker"],
198
+ "rationale": "Use the Kerf ColorField, which opens a ColorPicker from a swatch and hex trigger, or an inline ColorPicker or ColorSwatches."
78
199
  }
79
200
  },
80
201
  "theme": {