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

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 +1577 -245
  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
@@ -0,0 +1,84 @@
1
+ # Slider
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:slider` · Kerf UI · component · Controls
6
+
7
+ A value on a continuous or stepped range: a native range input drawn as a track, a brand fill, and a thumb, with a label row, an optional live readout and unit, labeled tick stops, a hint, compact size, and disabled state.
8
+
9
+ ## When to use
10
+
11
+ Let a person pick a value from a range where the relative position matters more than an exact number (volume, zoom, opacity, a threshold).
12
+
13
+ - A setting is a value in a known range and dragging to it is natural (volume, zoom, opacity): render Slider with min, max, step, and a label; add showValue and unit for a readout.
14
+ - Discrete stops deserve names under the track: pass ticks.
15
+
16
+ **Not when:**
17
+
18
+ - Do not use it when the exact number matters or the range is huge; use a TextField with type number.
19
+ - Do not use it for an on/off choice (use Switch) or for a few named options (use SegmentedControl).
20
+ - Do not use wa-slider.
21
+
22
+ **Alternatives:**
23
+
24
+ - [SegmentedControl](./segmented-control.md) (nearest) — Use a SegmentedControl for a handful of named options.
25
+ - [TextField](./text-field.md) (nearest) — Use a numeric TextField when the exact value matters.
26
+
27
+ ## Imports
28
+
29
+ - JavaScript: `@kerfjs/ui/slider` — exports `Slider`, `SliderProps`, `SliderSize`, `SliderTick`, `SliderRootAttributes`.
30
+ - CSS: the browser build of `@kerfjs/ui/slider` pulls its CSS automatically; import `@kerfjs/ui/slider.css` manually only without the `browser` export condition.
31
+ - Wiring: `wireSliders` from `@kerfjs/ui/wire-sliders` (optional).
32
+ - Declared side effects: browser-condition-css.
33
+
34
+ ## Props
35
+
36
+ Exact prop names and types: [`@kerfjs/ui/slider`](../public-api-signatures-v1.md#kerfjsuislider) in `public-api-signatures-v1.md`. Do not infer props from examples.
37
+
38
+ **Variants (configure, do not restyle):**
39
+
40
+ - labeled with a live readout and unit
41
+ - stepped with labeled ticks
42
+ - compact size
43
+ - disabled
44
+ - ariaLabel without a visible label
45
+ - orientation="vertical" with a length, minimum at the bottom, for a volume control in a popup
46
+
47
+ ## Composition
48
+
49
+ - Parents: any.
50
+ - Contexts: `application-ui`.
51
+ - Children: unrestricted.
52
+
53
+ ## State and wiring
54
+
55
+ **The app owns:** the value (read it on input or change through action) and re-rendering with it; min, max, step, and ticks; the label, hint, and unit.
56
+
57
+ **Wiring:** `wireSliders` is optional.
58
+
59
+ ## Geometry
60
+
61
+ Margin: none · border: self · padding: self (layout role: controls). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
62
+
63
+ - It fills the available width with the shared block-content inset (a transparent 1px border and 8px padding), so its label sits on the text column.
64
+
65
+ ## Accessibility
66
+
67
+ - It is a native range input: arrow keys, Page Up and Down, Home, and End step it, and the platform announces its value (with a unit, as aria-valuetext).
68
+ - The label names it, the hint describes it, and the readout is hidden from assistive technology because the input already reports its value; forced colors draw a Highlight fill on a GrayText track.
69
+
70
+ ## Styling boundary
71
+
72
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
73
+
74
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-slider`, `kui-slider__header`, `kui-slider__label`, `kui-slider__value`, `kui-slider__input`, `kui-slider__ticks`, `kui-slider__tick`, `kui-slider__hint`.
75
+
76
+ Never put `kui-slider`, `kui-slider__header`, `kui-slider__label`, `kui-slider__value`, `kui-slider__input`, `kui-slider__ticks`, `kui-slider__tick`, `kui-slider__hint` on an element you write; render `Slider` instead (`KUI-L103`).
77
+
78
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
79
+
80
+ ## Related
81
+
82
+ - Components: [SegmentedControl](./segmented-control.md), [TextField](./text-field.md).
83
+ - Docs: [`docs/slider.md`](../../docs/slider.md), [`docs/component-selection.md#problem-to-component-matrix`](../../docs/component-selection.md#problem-to-component-matrix).
84
+ - UX catalog route: `?component=slider`.
@@ -4,13 +4,13 @@
4
4
 
5
5
  `@kerfjs/ui:surface-scaffold` · Kerf UI · component · Structure
6
6
 
7
- Typed Web Awesome dialog preferred widths and viewport bounds, presentation, and popup inset composition.
7
+ A native modal dialog (DialogSurface) with Kerf's header, body, and footer chrome, typed preferred widths, viewport bounds, and presentations, plus a non-modal popover dialog and popup inset composition.
8
8
 
9
9
  ## When to use
10
10
 
11
11
  Configure recurring dialog and popup geometry without consumer ::part() overrides.
12
12
 
13
- - A Web Awesome dialog or dropdown needs a standard size, presentation, body/footer inset, or list-compatible menu inset.
13
+ - A modal task needs a dialog: render a DialogSurface with a label (or labelledBy plus a heading), its body as children, and its buttons as footer, then open it with openDialog() and close it with closeDialog(), the close button, or any element with data-dialog-close. A raw Web Awesome dropdown that needs a list-compatible menu inset uses PopupSurface.
14
14
  - A dialog body should compose rows, sections, or aligned bare prose through List and ListInsetText.
15
15
  - A modal needs a typed preferred width, viewport gutter, or dynamic viewport-bounded height cap while retaining native body scrolling and footer actions.
16
16
  - A dialog that must leave the page interactive and close on Escape or an outside press uses PopoverDialogSurface; one that fills its body with a SplitView or Pane uses height and bodyLayout="fill".
@@ -20,17 +20,17 @@ Configure recurring dialog and popup geometry without consumer ::part() override
20
20
 
21
21
  **Not when:**
22
22
 
23
- - Do not use it as a generic layout wrapper or to replace application-owned modal state and focus lifecycle.
23
+ - Do not use it as a generic layout wrapper, and do not toggle the dialog's open attribute (that opens it non-modally); open and close it with openDialog() and closeDialog().
24
24
  - Do not stack a dialog body inset around children that already own List or content-item geometry; use bodyInset none.
25
- - Do not put quiet secondary text of your own in a floating dialog header; it can fall below AA over the content passing beneath. A ToolbarText slotted as the dialog's label (or into header-actions) is fine: its title takes the normal text color and its description lifts halfway toward it, keeping AA.
25
+ - Do not put quiet secondary text of your own in a floating dialog header; it can fall below AA over the content passing beneath. A ToolbarText as the dialog's heading (or in headerActions) is fine: its title takes the normal text color and its description lifts halfway toward it, keeping AA.
26
26
 
27
27
  ## Imports
28
28
 
29
- - JavaScript: `@kerfjs/ui/surface-scaffold` — exports `DialogSurface`, `PopoverDialogSurface`, `PopupSurface`, `wireOverlaySheets`.
29
+ - JavaScript: `@kerfjs/ui/surface-scaffold` — exports `DialogSurface`, `openDialog`, `closeDialog`, `PopoverDialogSurface`, `PopupSurface`, `wireOverlaySheets`.
30
30
  - CSS: the browser build of `@kerfjs/ui/surface-scaffold` pulls its CSS automatically; import `@kerfjs/ui/surface-scaffold.css` manually only without the `browser` export condition.
31
31
  - Registration: import `@kerfjs/ui/surface-scaffold/register` once (a side effect).
32
32
  - Wiring: `wireOverlaySheets` from `@kerfjs/ui/wire-overlay-sheets` (optional).
33
- - Declared side effects: browser-condition-css, custom-element-registration.
33
+ - Declared side effects: browser-condition-css, document-listeners.
34
34
 
35
35
  ## Props
36
36
 
@@ -55,6 +55,8 @@ Exact prop names and types: [`@kerfjs/ui/surface-scaffold`](../public-api-signat
55
55
  - standard, compact, or zero-inset popup menu
56
56
  - core kerfjs/overlay confirm/prompt/form/choice as a bottom sheet styled by @kerfjs/ui/overlay-sheet.css
57
57
  - resizable core kerfjs/overlay bottom sheet: the kui-overlay-sheet-resizable class plus wireOverlaySheets adds the resizable DialogSurface sheet grabber
58
+ - header with label text or heading content, headerActions, a close button, and an optional footer; withoutHeader for content that owns its heading and close control
59
+ - light dismiss (a backdrop press closes; otherwise the panel pulses)
58
60
 
59
61
  **CSS-value props** (typed builders from `@kerfjs/ui/css-values`; raw CSS strings are rejected):
60
62
 
@@ -69,11 +71,11 @@ Exact prop names and types: [`@kerfjs/ui/surface-scaffold`](../public-api-signat
69
71
  - Parents: any.
70
72
  - Contexts: `application-ui`.
71
73
  - Children: unrestricted.
72
- - Built from: [Dialog](./wa-dialog.md), [Dropdown](./wa-dropdown.md), [Dropdown Item](./wa-dropdown-item.md).
74
+ - Built from: [LucideIcon](./lucide-icon.md), [Dropdown](./wa-dropdown.md), [Dropdown Item](./wa-dropdown-item.md).
73
75
 
74
76
  ## State and wiring
75
77
 
76
- **The app owns:** open state; focus lifecycle; dismissal policy; content; outer placement; whether core kerfjs/overlay dialogs presented as bottom sheets take this package's geometry and slide (import @kerfjs/ui/overlay-sheet.css; exitClass 'kui-overlay-sheet-exit' for the slide out; the kui-overlay-sheet-resizable class plus wireOverlaySheets for a resize grabber).
78
+ **The app owns:** open state (openDialog and closeDialog); whether a close request may proceed (cancel kui-request-close to keep the dialog open; the panel pulses); dismissal policy (lightDismiss); content, heading, header actions, and footer; outer placement; whether core kerfjs/overlay dialogs presented as bottom sheets take this package's geometry and slide (import @kerfjs/ui/overlay-sheet.css; exitClass 'kui-overlay-sheet-exit' for the slide out; the kui-overlay-sheet-resizable class plus wireOverlaySheets for a resize grabber).
77
79
 
78
80
  **Wiring:** `wireOverlaySheets` is optional.
79
81
 
@@ -83,19 +85,20 @@ Margin: parent · border: child · padding: self (layout role: structure). `self
83
85
 
84
86
  ## Accessibility
85
87
 
86
- - Supply the wrapped wa-dialog label and retain Web Awesome's native modal and focus behavior.
88
+ - DialogSurface is a native \<dialog> opened modally (showModal): it is in the top layer, the rest of the page is inert, focus stays inside, and it returns to the opener on close. Focus starts on an autofocus element, otherwise on the panel.
89
+ - Name it with label (also its title text) or labelledBy (the id of a heading, such as a ToolbarText). The close button is named Close (closeLabel) and Escape asks to close; the cancelable kui-request-close event reports source close-button, escape, or backdrop.
87
90
  - Name a PopoverDialogSurface with label or labelledBy, and describe it with describedBy (rendered as aria-describedby), usually a title ToolbarText descriptionId.
88
91
  - A floating header's title uses the normal text color, which keeps WCAG AA over the 80% raised chrome material on any content; the material turns opaque under prefers-reduced-transparency, prefers-contrast: more, forced colors, or without backdrop-filter.
89
- - A resizable bottom sheet's grabber is a focusable horizontal separator ("Resize sheet") with aria-valuemin, aria-valuenow, and aria-valuemax in visible px; the arrow keys, Page Up/Down, Home, and End resize it, and its slide motion falls back to Web Awesome's under prefers-reduced-motion.
92
+ - A resizable bottom sheet's grabber is a focusable horizontal separator ("Resize sheet") with aria-valuemin, aria-valuenow, and aria-valuemax in visible px; the arrow keys, Page Up/Down, Home, and End resize it, and its slide motion is skipped under prefers-reduced-motion.
90
93
  - Use popup surfaces only for real dropdown menus with named triggers.
91
94
 
92
95
  ## Styling boundary
93
96
 
94
97
  The component owns its own styles. Configure it through its props and variants; do not override its internals.
95
98
 
96
- Public class hooks (select for layout placement only, never to change the component's look): `kui-dialog-surface`, `kui-popover-dialog-surface`, `kui-popup-surface`.
99
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-dialog-surface`, `kui-dialog-surface__body`, `kui-dialog-surface__close`, `kui-dialog-surface__footer`, `kui-dialog-surface__header`, `kui-dialog-surface__header-actions`, `kui-dialog-surface__title`, `kui-popover-dialog-surface`, `kui-popup-surface`.
97
100
 
98
- Never put `kui-dialog-surface` on an element you write; render `DialogSurface` instead (`KUI-L103`).
101
+ Never put `kui-dialog-surface`, `kui-dialog-surface__body`, `kui-dialog-surface__close`, `kui-dialog-surface__footer`, `kui-dialog-surface__header`, `kui-dialog-surface__header-actions`, `kui-dialog-surface__title` on an element you write; render `DialogSurface` instead (`KUI-L103`).
99
102
 
100
103
  Never put `kui-popover-dialog-surface` on an element you write; render `PopoverDialogSurface` instead (`KUI-L103`).
101
104
 
@@ -107,6 +110,6 @@ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-
107
110
 
108
111
  ## Related
109
112
 
110
- - Components: [Dialog](./wa-dialog.md), [Dropdown](./wa-dropdown.md), [Dropdown Item](./wa-dropdown-item.md).
113
+ - Components: [LucideIcon](./lucide-icon.md), [Dropdown](./wa-dropdown.md), [Dropdown Item](./wa-dropdown-item.md).
111
114
  - Docs: [`docs/surface-scaffold.md`](../../docs/surface-scaffold.md), [`docs/component-selection.md#problem-to-component-matrix`](../../docs/component-selection.md#problem-to-component-matrix).
112
115
  - UX catalog route: `?component=surface-scaffold`.
@@ -0,0 +1,81 @@
1
+ # Switch
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:switch` · Kerf UI · component · Controls
6
+
7
+ An on/off setting that applies immediately: a native checkbox with role="switch" drawn as a track and thumb beside its label, with a hint on the label's column.
8
+
9
+ ## When to use
10
+
11
+ Turn a setting on or off the moment it changes, such as live updates or a preference, without Web Awesome.
12
+
13
+ - A setting takes effect immediately when toggled, in a settings list or a pane footer.
14
+
15
+ **Not when:**
16
+
17
+ - Do not use for an option a form submits later; use Checkbox.
18
+ - Do not use for an icon-only toolbar toggle; use an icon-only Button with pressed, or a ToolbarControlGroup toggle.
19
+
20
+ **Alternatives:**
21
+
22
+ - [Switch](./wa-switch.md) (prefer-over)
23
+ - [Checkbox](./checkbox.md) (nearest) — Use Checkbox for an option a form submits.
24
+ - [Button](./button.md) (nearest) — Use an icon-only Button with pressed for an icon-only toggle.
25
+
26
+ ## Imports
27
+
28
+ - JavaScript: `@kerfjs/ui/switch` — exports `Switch`.
29
+ - CSS: the browser build of `@kerfjs/ui/switch` pulls its CSS automatically; import `@kerfjs/ui/switch.css` manually only without the `browser` export condition.
30
+ - Declared side effects: browser-condition-css.
31
+
32
+ ## Props
33
+
34
+ Exact prop names and types: [`@kerfjs/ui/switch`](../public-api-signatures-v1.md#kerfjsuiswitch) in `public-api-signatures-v1.md`. Do not infer props from examples.
35
+
36
+ **Variants (configure, do not restyle):**
37
+
38
+ - on or off
39
+ - hint
40
+ - disabled
41
+ - default or compact size
42
+
43
+ ## Composition
44
+
45
+ - Parents: any.
46
+ - Contexts: `application-ui`.
47
+ - Children: unrestricted.
48
+
49
+ ## State and wiring
50
+
51
+ **The app owns:** checked state; applying the setting.
52
+
53
+ No wiring helper.
54
+
55
+ ## Geometry
56
+
57
+ Margin: none · border: self · padding: none (layout role: controls). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
58
+
59
+ - A 35×20 track (31.5×18 compact) 8px (7px) before its label; the hint aligns with the label text.
60
+
61
+ ## Accessibility
62
+
63
+ - A native \<input type="checkbox" role="switch"> inside its \<label>, invisibly over the drawn track, so the label names it and assistive technology announces on or off; Space toggles it and focus shows the focus ring on the track. The hint is its aria-description. The thumb's slide is skipped when reduced motion is preferred.
64
+
65
+ ## Styling boundary
66
+
67
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
68
+
69
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-switch`, `kui-switch__row`, `kui-switch__control`, `kui-switch__input`, `kui-switch__track`, `kui-switch__thumb`, `kui-switch__label`, `kui-switch__hint`.
70
+
71
+ Never put `kui-switch`, `kui-switch__row`, `kui-switch__control`, `kui-switch__input`, `kui-switch__track`, `kui-switch__thumb`, `kui-switch__label`, `kui-switch__hint` on an element you write; render `Switch` instead (`KUI-L103`).
72
+
73
+ Public tokens it reads: `--kui-color-brand-fill-loud`, `--kui-color-neutral-border-normal`, `--kui-color-surface`, `--kui-color-text`, `--kui-color-text-quiet`, `--kui-focus-ring`, `--kui-font-m`, `--kui-font-s`, `--kui-font-xs`. Set a token only where its public contract allows; prefer a prop.
74
+
75
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
76
+
77
+ ## Related
78
+
79
+ - Components: [Switch](./wa-switch.md), [Checkbox](./checkbox.md), [Button](./button.md).
80
+ - Docs: [`docs/component-selection.md`](../../docs/component-selection.md), [`docs/component-selection.md#problem-to-component-matrix`](../../docs/component-selection.md#problem-to-component-matrix).
81
+ - UX catalog route: `?component=switch`.
@@ -52,12 +52,12 @@ Exact prop names and types: [`@kerfjs/ui/tab-bar`](../public-api-signatures-v1.m
52
52
 
53
53
  - Parents: any.
54
54
  - Contexts: `tabpanel-navigation`.
55
- - Children: only `app-tab` (required: `app-tab`).
56
- - Built from: [AppTab](./tabs.md), [ToolbarControlGroup](./toolbar-control-group.md), [Button](./wa-button.md).
55
+ - Children: only `tab-bar-item` (required: `tab-bar-item`).
56
+ - Built from: [TabBarItem](./tabs.md), [ToolbarControlGroup](./toolbar-control-group.md), [Button](./wa-button.md).
57
57
 
58
58
  Zones (a zone is bound to JSX only through its listed prop; never assume the zone id is a prop):
59
59
 
60
- - `tabs` — JSX prop `children`; accepts [AppTab](./tabs.md); at least 1.
60
+ - `tabs` — JSX prop `children`; accepts [TabBarItem](./tabs.md); at least 1.
61
61
  - `leading` — JSX prop `leading`; accepts [ToolbarControlGroup](./toolbar-control-group.md); 0–1.
62
62
  - `trailing` — JSX prop `trailing`; accepts [ToolbarControlGroup](./toolbar-control-group.md), [Button](./wa-button.md); 0–1.
63
63
  - `end` — JSX prop `end`; accepts [ToolbarControlGroup](./toolbar-control-group.md), [Button](./wa-button.md); 0–1.
@@ -73,8 +73,8 @@ Zones (a zone is bound to JSX only through its listed prop; never assume the zon
73
73
 
74
74
  **Wiring-owned state attributes** — never render, remove, or branch on these as app state:
75
75
 
76
- - `data-tab-dragging` on `AppTab (data-component="app-tab")` (`wireTabBars`): "true" on the tab being dragged.
77
- - `data-tab-drop-position` on `AppTab (data-component="app-tab")` (`wireTabBars`): "before" or "after" on the tab under the pointer: where the dragged tab would land.
76
+ - `data-tab-dragging` on `TabBarItem (data-component="tab-bar-item")` (`wireTabBars`): "true" on the tab being dragged.
77
+ - `data-tab-drop-position` on `TabBarItem (data-component="tab-bar-item")` (`wireTabBars`): "before" or "after" on the tab under the pointer: where the dragged tab would land.
78
78
  - `data-tab-autoscroll` on `kui-tab-bar__tabs` (`wireTabBars`): "start" or "end" while a drag near that edge auto-scrolls the strip.
79
79
  - `data-scroll-overflow` on `kui-tab-bar__tabs` (`wireScrollDividers`): The physical edges, in canonical t/r/b/l order, beyond which content is scrolled out of view; absent when nothing is hidden (content that fits never reports its far edges). Re-applied if a re-render drops it.
80
80
  - `data-scroll-divider` on `chrome named in wireScrollDividers targets (a TabBar strip has none)` (`wireScrollDividers`): The sides, in t/r/b/l order, on which that chrome currently draws its scroll divider. Re-applied if a re-render drops it.
@@ -109,6 +109,6 @@ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-
109
109
 
110
110
  ## Related
111
111
 
112
- - Components: [AppTab](./tabs.md), [ToolbarControlGroup](./toolbar-control-group.md), [Button](./wa-button.md), [SegmentedControl](./segmented-control.md), [Select](./select.md), [Tab Group](./wa-tab-group.md).
112
+ - Components: [TabBarItem](./tabs.md), [ToolbarControlGroup](./toolbar-control-group.md), [Button](./wa-button.md), [SegmentedControl](./segmented-control.md), [Select](./select.md), [Tab Group](./wa-tab-group.md).
113
113
  - Docs: [`docs/component-selection.md`](../../docs/component-selection.md), [`docs/accessibility.md#tabs`](../../docs/accessibility.md#tabs).
114
114
  - UX catalog route: `?component=tab-bar`.
@@ -20,7 +20,7 @@ Switch among two to five co-equal top-level destinations on compact devices whil
20
20
 
21
21
  **Alternatives:**
22
22
 
23
- - [AppTab](./tabs.md) (semantic-alternative) — Use TabBar and AppTab for document-style tabpanels, overflow, closing, or reordering.
23
+ - [TabBarItem](./tabs.md) (semantic-alternative) — Use TabBar and TabBarItem for document-style tabpanels, overflow, closing, or reordering.
24
24
  - [Workbench](./workbench.md) (roomy-alternative) — Promote top-level destinations to a rail or sidebar on desktop-class layouts.
25
25
 
26
26
  ## Imports
@@ -100,6 +100,6 @@ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-
100
100
 
101
101
  ## Related
102
102
 
103
- - Components: [Badge](./badge.md), [AppTab](./tabs.md), [Workbench](./workbench.md).
103
+ - Components: [Badge](./badge.md), [TabBarItem](./tabs.md), [Workbench](./workbench.md).
104
104
  - Docs: [`docs/tab-navigator.md`](../../docs/tab-navigator.md), [`docs/app-layouts.md#decision-matrix`](../../docs/app-layouts.md#decision-matrix).
105
105
  - UX catalog route: `?component=tab-navigator`.
@@ -1,4 +1,4 @@
1
- # AppTab
1
+ # TabBarItem
2
2
 
3
3
  <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
4
 
@@ -22,13 +22,13 @@ Render a controlled application tab with compact or icon-only presentation, a vi
22
22
 
23
23
  ## Imports
24
24
 
25
- - JavaScript: `@kerfjs/ui/app-tab` — exports `AppTab`.
26
- - CSS: the browser build of `@kerfjs/ui/app-tab` pulls its CSS automatically; import `@kerfjs/ui/app-tab.css` manually only without the `browser` export condition.
25
+ - JavaScript: `@kerfjs/ui/tab-bar-item` — exports `TabBarItem`.
26
+ - CSS: the browser build of `@kerfjs/ui/tab-bar-item` pulls its CSS automatically; import `@kerfjs/ui/tab-bar-item.css` manually only without the `browser` export condition.
27
27
  - Declared side effects: browser-condition-css.
28
28
 
29
29
  ## Props
30
30
 
31
- Exact prop names and types: [`@kerfjs/ui/app-tab`](../public-api-signatures-v1.md#kerfjsuiapp-tab) in `public-api-signatures-v1.md`. Do not infer props from examples.
31
+ Exact prop names and types: [`@kerfjs/ui/tab-bar-item`](../public-api-signatures-v1.md#kerfjsuitab-bar-item) in `public-api-signatures-v1.md`. Do not infer props from examples.
32
32
 
33
33
  **Variants (configure, do not restyle):**
34
34
 
@@ -80,11 +80,11 @@ Margin: none · border: self · padding: self (layout role: navigation). `self`
80
80
 
81
81
  The component owns its own styles. Configure it through its props and variants; do not override its internals.
82
82
 
83
- Public class hooks (select for layout placement only, never to change the component's look): `kui-app-tab`, `kui-app-tab__close`, `kui-app-tab__close-icon`, `kui-app-tab__name`, `kui-app-tab__select`, `kui-app-tab__trailing`.
83
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-tab-bar-item`, `kui-tab-bar-item__close`, `kui-tab-bar-item__close-icon`, `kui-tab-bar-item__name`, `kui-tab-bar-item__select`, `kui-tab-bar-item__trailing`.
84
84
 
85
- Never put `kui-app-tab`, `kui-app-tab__close`, `kui-app-tab__close-icon`, `kui-app-tab__name`, `kui-app-tab__select`, `kui-app-tab__trailing` on an element you write; render `AppTab` instead (`KUI-L103`).
85
+ Never put `kui-tab-bar-item`, `kui-tab-bar-item__close`, `kui-tab-bar-item__close-icon`, `kui-tab-bar-item__name`, `kui-tab-bar-item__select`, `kui-tab-bar-item__trailing` on an element you write; render `TabBarItem` instead (`KUI-L103`).
86
86
 
87
- Public tokens it reads: `--kui-app-tab-attention-color`, `--kui-app-tab-color`, `--kui-app-tab-drop-indicator`, `--kui-app-tab-drop-target-background`, `--kui-app-tab-drop-target-color`, `--kui-app-tab-drop-target-ring`, `--kui-app-tab-hover-background`, `--kui-app-tab-pinned-background`, `--kui-app-tab-pinned-hover-background`, `--kui-app-tab-selected-background`, `--kui-app-tab-selected-border`, `--kui-app-tab-selected-color`, `--kui-color-brand-border-normal`, `--kui-color-brand-on-quiet`, `--kui-color-neutral-border-normal`, `--kui-color-neutral-on-quiet`, `--kui-color-surface`, `--kui-color-text`, `--kui-focus-ring`, `--kui-font-xs`, `--kui-radius-pill`, `--kui-shadow-s`, `--kui-space-2xs`, `--kui-space-xs`. Set a token only where its public contract allows; prefer a prop.
87
+ Public tokens it reads: `--kui-tab-bar-item-attention-color`, `--kui-tab-bar-item-color`, `--kui-tab-bar-item-drop-indicator`, `--kui-tab-bar-item-drop-target-background`, `--kui-tab-bar-item-drop-target-color`, `--kui-tab-bar-item-drop-target-ring`, `--kui-tab-bar-item-hover-background`, `--kui-tab-bar-item-pinned-background`, `--kui-tab-bar-item-pinned-hover-background`, `--kui-tab-bar-item-selected-background`, `--kui-tab-bar-item-selected-border`, `--kui-tab-bar-item-selected-color`, `--kui-color-brand-border-normal`, `--kui-color-brand-on-quiet`, `--kui-color-neutral-border-normal`, `--kui-color-neutral-on-quiet`, `--kui-color-surface`, `--kui-color-text`, `--kui-focus-ring`, `--kui-font-xs`, `--kui-radius-pill`, `--kui-shadow-s`, `--kui-space-2xs`, `--kui-space-xs`. Set a token only where its public contract allows; prefer a prop.
88
88
 
89
89
  Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
90
90
 
@@ -0,0 +1,86 @@
1
+ # TagField
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:tag-field` · Kerf UI · component · Controls
6
+
7
+ A form field that collects short values as removable tags: SearchField's token editor in its form-field presentation, with a label, hint or error, a leading tag glyph, chips that edit or remove, a clear button, an optional max, and a hidden input per tag submitted under its name.
8
+
9
+ ## When to use
10
+
11
+ Collect a list of short values (labels, recipients, keywords) as removable tags, each submitted as its own form value.
12
+
13
+ - A form collects several short values of one kind (labels, recipients, keywords): render TagField with tags and name, wire wireTagFields with onChange, and re-render with the list it reports.
14
+ - Values must be checked (an email shape, a known label) or capped: pass normalize and max, and show onReject's reason as the field's error.
15
+
16
+ **Not when:**
17
+
18
+ - Do not use it for search filters; SearchField combines free text with ordered, editable filter tokens.
19
+ - Do not use it to pick from a short fixed set; use ChoiceChips or a multiple Select.
20
+ - Do not use wa-tag-input.
21
+
22
+ **Alternatives:**
23
+
24
+ - [SearchField](./search-field.md) (nearest) — Use SearchField when the tokens are search filters rather than submitted form values.
25
+ - [ChoiceChips](./choice-chips.md) (nearest) — Use ChoiceChips to pick several from a short known set.
26
+
27
+ ## Imports
28
+
29
+ - JavaScript: `@kerfjs/ui/tag-field` — exports `TagField`, `TagFieldProps`.
30
+ - CSS: the browser build of `@kerfjs/ui/tag-field` pulls its CSS automatically; import `@kerfjs/ui/tag-field.css` manually only without the `browser` export condition.
31
+ - Wiring: `wireTagFields` from `@kerfjs/ui/wire-tag-fields` (required).
32
+ - Declared side effects: browser-condition-css.
33
+
34
+ ## Props
35
+
36
+ Exact prop names and types: [`@kerfjs/ui/tag-field`](../public-api-signatures-v1.md#kerfjsuitag-field) in `public-api-signatures-v1.md`. Do not infer props from examples.
37
+
38
+ **Variants (configure, do not restyle):**
39
+
40
+ - labels with a hint
41
+ - validated with max and an error
42
+ - required
43
+ - disabled
44
+ - custom delimiters and duplicate policy (wireTagFields options)
45
+
46
+ ## Composition
47
+
48
+ - Parents: any.
49
+ - Contexts: `application-ui`.
50
+ - Children: unrestricted.
51
+ - Built from: [SearchField](./search-field.md), [LucideIcon](./lucide-icon.md).
52
+
53
+ ## State and wiring
54
+
55
+ **The app owns:** the tag list (update it from onChange and re-render); validation and normalization (normalize) and showing refusals (onReject, error); the field name and form association.
56
+
57
+ **Wiring:** `wireTagFields` is required.
58
+
59
+ - Use wireTagFields as documented.
60
+
61
+ ## Geometry
62
+
63
+ Margin: child · border: child · padding: child (layout role: controls). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
64
+
65
+ - The SearchField form-field presentation draws the label, frame, chips, and hint; TagField adds no geometry of its own.
66
+
67
+ ## Accessibility
68
+
69
+ - The editor is named by the visible label and described by the hint or error; each chip has an edit button (its label) and a remove button named for the tag.
70
+ - Enter or a delimiter adds the typed text, Backspace at the start removes the last tag, ArrowLeft and ArrowRight move between chips and the editor, and Backspace or Delete on a focused chip removes it.
71
+
72
+ ## Styling boundary
73
+
74
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
75
+
76
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-tag-field`.
77
+
78
+ Never put `kui-tag-field` on an element you write; render `TagField` instead (`KUI-L103`).
79
+
80
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
81
+
82
+ ## Related
83
+
84
+ - Components: [SearchField](./search-field.md), [LucideIcon](./lucide-icon.md), [ChoiceChips](./choice-chips.md).
85
+ - Docs: [`docs/tag-field.md`](../../docs/tag-field.md), [`docs/component-selection.md#problem-to-component-matrix`](../../docs/component-selection.md#problem-to-component-matrix).
86
+ - UX catalog route: `?component=tag-field`.
@@ -0,0 +1,98 @@
1
+ # TextField
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:text-field` · Kerf UI · component · Controls
6
+
7
+ A labeled single-line input or multi-line textarea with hint and error text, an optional leading icon, clear button, and character count, at the 44px control height or compact.
8
+
9
+ ## When to use
10
+
11
+ Collect free text (names, addresses, notes, comments) with Kerf's field chrome, a visible or accessible label, supporting and validation text, and native input semantics.
12
+
13
+ - A form or dialog collects a line of free text: label names it (or ariaLabel when nearby content already does), hint explains it, and error reports a validation problem.
14
+ - People write a longer note or message: multiline with rows, or rows plus maxRows to grow with the content; maxLength with showCount shows the remaining budget.
15
+ - A filter or search field needs a leading icon and a clear button: icon and clearable.
16
+
17
+ **Not when:**
18
+
19
+ - Do not use when only existing values are allowed; use Select.
20
+ - Do not use when people pick among suggestions or create tags; use Combobox.
21
+ - Do not use for search text with removable filter tokens; use SearchField.
22
+ - Do not use for a chat-style message with a send action; use MessageComposer.
23
+
24
+ **Alternatives:**
25
+
26
+ - [Input](./wa-input.md) (prefer-over)
27
+ - [Textarea](./wa-textarea.md) (prefer-over)
28
+ - [Combobox](./combobox.md) (nearest) — Use Combobox when people pick among suggestions or create a value.
29
+ - [MessageComposer](./message-composer.md) (nearest) — Use MessageComposer for a message with a send action.
30
+
31
+ ## Imports
32
+
33
+ - JavaScript: `@kerfjs/ui/text-field` — exports `TextField`, `wireTextFields`.
34
+ - CSS: the browser build of `@kerfjs/ui/text-field` pulls its CSS automatically; import `@kerfjs/ui/text-field.css` manually only without the `browser` export condition.
35
+ - Wiring: `wireTextFields` from `@kerfjs/ui/wire-text-fields` (optional).
36
+ - Declared side effects: browser-condition-css.
37
+
38
+ ## Props
39
+
40
+ Exact prop names and types: [`@kerfjs/ui/text-field`](../public-api-signatures-v1.md#kerfjsuitext-field) in `public-api-signatures-v1.md`. Do not infer props from examples.
41
+
42
+ **Variants (configure, do not restyle):**
43
+
44
+ - visible label or ariaLabel
45
+ - hint
46
+ - error
47
+ - default or compact size
48
+ - leading icon
49
+ - clearable
50
+ - multiline (fixed rows or growing to maxRows)
51
+ - maxLength with a live count
52
+ - disabled
53
+ - read-only
54
+ - required
55
+ - email, password, search, url, tel, or number type
56
+
57
+ ## Composition
58
+
59
+ - Parents: any.
60
+ - Contexts: `application-ui`.
61
+ - Children: unrestricted.
62
+ - Built from: [LucideIcon](./lucide-icon.md).
63
+
64
+ ## State and wiring
65
+
66
+ **The app owns:** value; validation and error copy; hint copy; what a cleared field means.
67
+
68
+ **Wiring:** `wireTextFields` is optional.
69
+
70
+ ## Geometry
71
+
72
+ Margin: none · border: self · padding: self (layout role: controls). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
73
+
74
+ - Label, hint, and error sit on the value's text column (1px border + 8px padding); the 44px box matches Button and Select, and compact matches their compact 33px.
75
+
76
+ ## Accessibility
77
+
78
+ - The whole field is a \<label> around a native \<input> or \<textarea>, so clicking anywhere on it focuses the field; the input is named by label (aria-label, with the visible label text hidden from assistive technology so the clear button and count stay out of the name) or by ariaLabel. Focus shows the standard focus ring around the box.
79
+ - The hint and error are visible below the field and form the input's aria-description; an error also sets aria-invalid="true". The clear button is a native button named by clearLabel (default Clear), hidden while the field is empty, and returns focus to the field.
80
+ - Compact text grows to 16px on coarse-pointer touch screens so iOS does not zoom on focus.
81
+
82
+ ## Styling boundary
83
+
84
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
85
+
86
+ Public class hooks (select for layout placement only, never to change the component's look): `kui-text-field`, `kui-text-field__label`, `kui-text-field__required`, `kui-text-field__box`, `kui-text-field__icon`, `kui-text-field__input`, `kui-text-field__clear`, `kui-text-field__hint`, `kui-text-field__error`, `kui-text-field__footer`, `kui-text-field__count`.
87
+
88
+ Never put `kui-text-field`, `kui-text-field__label`, `kui-text-field__required`, `kui-text-field__box`, `kui-text-field__icon`, `kui-text-field__input`, `kui-text-field__clear`, `kui-text-field__hint`, `kui-text-field__error`, `kui-text-field__footer`, `kui-text-field__count` on an element you write; render `TextField` instead (`KUI-L103`).
89
+
90
+ Public tokens it reads: `--kui-color-neutral-on-quiet`, `--kui-color-neutral-border-normal`, `--kui-color-danger-border-loud`, `--kui-color-danger-on-quiet`, `--kui-color-text`, `--kui-color-text-quiet`, `--kui-color-surface`, `--kui-focus-ring`, `--kui-font-m`, `--kui-font-s`, `--kui-font-xs`, `--kui-layout-item-padding`, `--kui-layout-rounded-radius`, `--kui-radius-circle`. Set a token only where its public contract allows; prefer a prop.
91
+
92
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
93
+
94
+ ## Related
95
+
96
+ - Components: [LucideIcon](./lucide-icon.md), [Input](./wa-input.md), [Textarea](./wa-textarea.md), [Combobox](./combobox.md), [MessageComposer](./message-composer.md).
97
+ - Docs: [`docs/component-selection.md`](../../docs/component-selection.md), [`docs/component-selection.md#problem-to-component-matrix`](../../docs/component-selection.md#problem-to-component-matrix).
98
+ - UX catalog route: `?component=text-field`.
@@ -43,6 +43,7 @@ Exact prop names and types: [`@kerfjs/ui/text`](../public-api-signatures-v1.md#k
43
43
  - align start (default), center, or end for centered status copy or trailing values
44
44
  - controlMargins selects exterior 8px gutters with canonical physical Sides
45
45
  - wrap normal, anywhere, nowrap, or truncate; truncate places its ellipsis at the end, the start (keeping the tail), or the middle (keeping the last path segment or a character suffix)
46
+ - size="medium" for a 16px heading, such as an in-list group title that wraps a long name
46
47
 
47
48
  ## Composition
48
49
 
@@ -0,0 +1,85 @@
1
+ # Toast
2
+
3
+ <!-- Generated by scripts/sync-component-docs.mjs from ai/component-catalog.json and ai/component-composition.json. Do not edit; run `npm run catalog:sync`. -->
4
+
5
+ `@kerfjs/ui:toast` · Kerf UI · CSS composition · Feedback
6
+
7
+ Styling for kerfjs/overlay's toast(): a bottom-edge region of stacked, auto-dismissing notifications on the raised surface, with info, success, and warning tones, StateBanner content, and enter and exit motion.
8
+
9
+ ## When to use
10
+
11
+ Show a brief, non-blocking confirmation or status message that dismisses itself, without hand-written toast CSS.
12
+
13
+ - A completed action needs brief, non-blocking confirmation (saved, copied, published): import @kerfjs/ui/overlay-toast.css once and call toast() from kerfjs/overlay with exitClass 'kui-toast-exit' and exitDuration 200.
14
+ - A status message needs a tone or an icon and detail: pass variant ('info', 'success', 'warning') for a plain message, or render a StateBanner as the toast's only content.
15
+ - A rapid sequence (repeated copy actions) should collapse to the latest message: mode 'replace'.
16
+
17
+ **Not when:**
18
+
19
+ - Do not use a toast for an error the person must act on or a decision; use a StateBanner in the affected surface, or a DialogSurface.
20
+ - Do not put controls that must stay reachable in a toast that dismisses itself; set duration 0 and dismiss it from your own action, or use a StateBanner.
21
+ - Do not hand-write toast placement, stacking, or motion CSS, and do not use wa-toast.
22
+
23
+ **Alternatives:**
24
+
25
+ - [StateBanner](./state-banner.md) (nearest) — Use a StateBanner in place for a persistent status or an error tied to one surface.
26
+
27
+ ## Imports
28
+
29
+ - CSS: import `@kerfjs/ui/overlay-toast.css` once.
30
+ - Declared side effects: css.
31
+
32
+ ## Props
33
+
34
+ No props: this entry has no JavaScript API.
35
+
36
+ **Variants (configure, do not restyle):**
37
+
38
+ - plain message on the raised surface
39
+ - info, success, or warning tone (variant)
40
+ - StateBanner as the toast's only content, taking the banner's tone and chrome
41
+ - replace mode collapsing a rapid sequence to the latest
42
+ - bottom-edge region by default, or top-edge stacking on an app-owned container with data-placement="top"
43
+
44
+ ## Composition
45
+
46
+ - Parents: any.
47
+ - Contexts: `application-ui`.
48
+ - Children: unrestricted.
49
+ - Built from: [StateBanner](./state-banner.md).
50
+
51
+ ## State and wiring
52
+
53
+ **The app owns:** when to show a toast and its message; duration, variant, and replace mode; an app-owned container with data-placement="top" for top-edge stacking; dismissing a persistent (duration 0) toast.
54
+
55
+ No wiring helper.
56
+
57
+ ## Geometry
58
+
59
+ Margin: self · border: self · padding: self (layout role: feedback). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
60
+
61
+ - The region insets 16px from the viewport edge plus the safe area and caps its width at 480px; toasts stack with an 8px gap.
62
+
63
+ ## Accessibility
64
+
65
+ - The core region is an aria-live polite region and each toast is role status, so assistive technology announces it without moving focus.
66
+ - Toasts dismiss themselves after four seconds by default; give longer messages a longer duration, and never rely on a toast for the only path to an action.
67
+ - The entrance and exit only fade under prefers-reduced-motion or the static-effects switch, and forced colors draw a CanvasText border on Canvas.
68
+
69
+ ## Styling boundary
70
+
71
+ The component owns its own styles. Configure it through its props and variants; do not override its internals.
72
+
73
+ Public class hooks (select for layout placement only, never to change the component's look): `kerf-toasts`, `kerf-toast`, `kui-toast-exit`.
74
+
75
+ Classes an application may place on its own elements: `kerf-toasts`, `kerf-toast`, `kui-toast-exit`.
76
+
77
+ Public tokens it reads: `--kui-overlay-toast-z-index`. Set a token only where its public contract allows; prefer a prop.
78
+
79
+ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-*` selectors (`KUI-L001`, `KUI-L010`), unknown or private tokens (`KUI-L002`, `KUI-L012`), and any application rule that restyles the component, forced dimensions included (`KUI-L019`).
80
+
81
+ ## Related
82
+
83
+ - Components: [StateBanner](./state-banner.md).
84
+ - Docs: [`docs/overlay-toast.md`](../../docs/overlay-toast.md), [`docs/component-selection.md#web-awesome-integration`](../../docs/component-selection.md#web-awesome-integration).
85
+ - UX catalog route: `?component=toast`.