@ui-sdk/web 0.0.0-stage → 0.1.0-beta.1

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 (467) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +10 -2
  3. package/browser/web/accordion.js +1 -0
  4. package/browser/web/alert-dialog.js +1 -0
  5. package/browser/web/autocomplete.js +1 -0
  6. package/browser/web/avatar.js +1 -0
  7. package/browser/web/button.js +1 -0
  8. package/browser/web/calendar.js +1 -0
  9. package/browser/web/carousel.js +1 -0
  10. package/browser/web/checkbox.js +1 -0
  11. package/browser/web/chunks/0eRGibL6.js +1 -0
  12. package/browser/web/chunks/2bIEUO6_.js +1 -0
  13. package/browser/web/chunks/5A9w2ULz.js +1 -0
  14. package/browser/web/chunks/5RSyydjV.js +1 -0
  15. package/browser/web/chunks/9pWTy2wl.js +1 -0
  16. package/browser/web/chunks/B0f2j6zz.js +1 -0
  17. package/browser/web/chunks/B1rux6br.js +1 -0
  18. package/browser/web/chunks/B3-APaNf.js +1 -0
  19. package/browser/web/chunks/B7EgSgjQ.js +1 -0
  20. package/browser/web/chunks/B8QcOzJU.js +1 -0
  21. package/browser/web/chunks/BFueEkwm.js +3 -0
  22. package/browser/web/chunks/BJj3oS29.js +1 -0
  23. package/browser/web/chunks/BNSvTCpr.js +1 -0
  24. package/browser/web/chunks/BPD0kAZB.js +1 -0
  25. package/browser/web/chunks/BQeduZqT.js +1 -0
  26. package/browser/web/chunks/B_CVFyiz.js +1 -0
  27. package/browser/web/chunks/B_ns1YHO.js +1 -0
  28. package/browser/web/chunks/BcwkVTsR.js +1 -0
  29. package/browser/web/chunks/BeaQ6TYM.js +1 -0
  30. package/browser/web/chunks/BgBB013u.js +1 -0
  31. package/browser/web/chunks/BgsKhHDm.js +1 -0
  32. package/browser/web/chunks/BjMcbuhi.js +9 -0
  33. package/browser/web/chunks/Bjiy_F2N.js +1 -0
  34. package/browser/web/chunks/BqScCLwv.js +1 -0
  35. package/browser/web/chunks/BqX3Utqx.js +1 -0
  36. package/browser/web/chunks/BtVkQf3z.js +1 -0
  37. package/browser/web/chunks/By30h-7B.js +1 -0
  38. package/browser/web/chunks/C1zqYpy2.js +1 -0
  39. package/browser/web/chunks/C436juFf.js +1 -0
  40. package/browser/web/chunks/C4_bULs1.js +1 -0
  41. package/browser/web/chunks/C4omqJEz.js +1 -0
  42. package/browser/web/chunks/C7tt0T3n.js +1 -0
  43. package/browser/web/chunks/C8w7s5dg.js +1 -0
  44. package/browser/web/chunks/CElY4erO.js +1 -0
  45. package/browser/web/chunks/CFODo-m2.js +1 -0
  46. package/browser/web/chunks/CL4wjam9.js +1 -0
  47. package/browser/web/chunks/CMg-8UVf.js +1 -0
  48. package/browser/web/chunks/COWKfakj.js +1 -0
  49. package/browser/web/chunks/CQBU0qZ4.js +1 -0
  50. package/browser/web/chunks/CV6uABgc.js +1 -0
  51. package/browser/web/chunks/C_SWFpWQ.js +1 -0
  52. package/browser/web/chunks/C_Uanbrl.js +1 -0
  53. package/browser/web/chunks/Ce_CSanC.js +1 -0
  54. package/browser/web/chunks/Cg-ZmRhS.js +1 -0
  55. package/browser/web/chunks/Cgf2wPI_.js +1 -0
  56. package/browser/web/chunks/Cuep_3Vf.js +1 -0
  57. package/browser/web/chunks/D02PaHn6.js +1 -0
  58. package/browser/web/chunks/D5LiaI5R.js +1 -0
  59. package/browser/web/chunks/D9UgVYvF.js +1 -0
  60. package/browser/web/chunks/DC08tnkE.js +2 -0
  61. package/browser/web/chunks/DG8YGSvu.js +1 -0
  62. package/browser/web/chunks/DIQd0FYD.js +1 -0
  63. package/browser/web/chunks/DMLqacE8.js +1 -0
  64. package/browser/web/chunks/DSUI3yI-.js +1 -0
  65. package/browser/web/chunks/DT3Hb76X.js +1 -0
  66. package/browser/web/chunks/DY75g3-W.js +1 -0
  67. package/browser/web/chunks/DZpNQKZ9.js +1 -0
  68. package/browser/web/chunks/Db-W1wrC.js +1 -0
  69. package/browser/web/chunks/Dc1xK3Ii.js +1 -0
  70. package/browser/web/chunks/DdF6awFs.js +1 -0
  71. package/browser/web/chunks/DdaCLml8.js +1 -0
  72. package/browser/web/chunks/Dh8MLjQO.js +1 -0
  73. package/browser/web/chunks/DiuslJRy.js +1 -0
  74. package/browser/web/chunks/DjRcw3Y0.js +1 -0
  75. package/browser/web/chunks/Djdv-16J.js +1 -0
  76. package/browser/web/chunks/DnFXe_lF.js +1 -0
  77. package/browser/web/chunks/DneGv1oC.js +1 -0
  78. package/browser/web/chunks/DsVxP-p-.js +1 -0
  79. package/browser/web/chunks/DwDilCo2.js +1 -0
  80. package/browser/web/chunks/DwV48AXv.js +1 -0
  81. package/browser/web/chunks/F37aF4-L.js +1 -0
  82. package/browser/web/chunks/LyB6XIbN.js +1 -0
  83. package/browser/web/chunks/NKnbYGjC.js +1 -0
  84. package/browser/web/chunks/Vk-rVi16.js +1 -0
  85. package/browser/web/chunks/XsM0J1Ex.js +1 -0
  86. package/browser/web/chunks/asSN9iEp.js +1 -0
  87. package/browser/web/chunks/c-AjHfdF.js +1 -0
  88. package/browser/web/chunks/dR-12TPY.js +1 -0
  89. package/browser/web/chunks/hR4xM0EC.js +1 -0
  90. package/browser/web/chunks/hqOaBxAg.js +1 -0
  91. package/browser/web/chunks/kMKqqeG4.js +1 -0
  92. package/browser/web/chunks/kXboBcfi.js +1 -0
  93. package/browser/web/chunks/l4aQIg22.js +1 -0
  94. package/browser/web/chunks/tJC0JSU4.js +1 -0
  95. package/browser/web/chunks/wHdS_QYM.js +1 -0
  96. package/browser/web/chunks/yv8dTvNI.js +1 -0
  97. package/browser/web/chunks/yw9M3nfi.js +1 -0
  98. package/browser/web/collapsible.js +1 -0
  99. package/browser/web/color-picker.js +1 -0
  100. package/browser/web/combobox.js +2 -0
  101. package/browser/web/command.js +1 -0
  102. package/browser/web/core.js +5 -0
  103. package/browser/web/date-input.js +1 -0
  104. package/browser/web/date-picker.js +1 -0
  105. package/browser/web/dialog.js +1 -0
  106. package/browser/web/drawer.js +1 -0
  107. package/browser/web/field.js +1 -0
  108. package/browser/web/file-input.js +1 -0
  109. package/browser/web/hover-card.js +1 -0
  110. package/browser/web/image-cropper.js +1 -0
  111. package/browser/web/input.js +1 -0
  112. package/browser/web/label.js +1 -0
  113. package/browser/web/listbox.js +1 -0
  114. package/browser/web/menu.js +1 -0
  115. package/browser/web/menubar.js +1 -0
  116. package/browser/web/meter.js +1 -0
  117. package/browser/web/navigation-menu.js +1 -0
  118. package/browser/web/number-input.js +1 -0
  119. package/browser/web/otp-input.js +2 -0
  120. package/browser/web/overlays.js +1 -0
  121. package/browser/web/pagination.js +1 -0
  122. package/browser/web/password-input.js +1 -0
  123. package/browser/web/popover.js +1 -0
  124. package/browser/web/preferences.js +1 -0
  125. package/browser/web/progress.js +1 -0
  126. package/browser/web/radio.js +1 -0
  127. package/browser/web/rating.js +1 -0
  128. package/browser/web/resizable.js +1 -0
  129. package/browser/web/scroll-area.js +1 -0
  130. package/browser/web/segmented-control.js +1 -0
  131. package/browser/web/select.js +1 -0
  132. package/browser/web/separator.js +1 -0
  133. package/browser/web/slider.js +1 -0
  134. package/browser/web/switch.js +1 -0
  135. package/browser/web/tabs.js +1 -0
  136. package/browser/web/textarea.js +1 -0
  137. package/browser/web/time-input.js +1 -0
  138. package/browser/web/timeline.js +1 -0
  139. package/browser/web/toast.js +1 -0
  140. package/browser/web/toggle.js +1 -0
  141. package/browser/web/token-input.js +8 -0
  142. package/browser/web/toolbar.js +1 -0
  143. package/browser/web/tooltip.js +1 -0
  144. package/browser/web/tree.js +1 -0
  145. package/browser/web/trigger-menu.js +4 -0
  146. package/browser/web/waterfall.js +1 -0
  147. package/browser/web.css +3378 -0
  148. package/browser/web.js +3 -0
  149. package/custom-elements.json +32315 -0
  150. package/dist/accordion.d.ts +2 -0
  151. package/dist/accordion.js +57 -0
  152. package/dist/action.d.ts +16 -0
  153. package/dist/action.js +39 -0
  154. package/dist/agent.d.ts +2 -0
  155. package/dist/agent.js +7 -0
  156. package/dist/autocomplete.d.ts +2 -0
  157. package/dist/autocomplete.js +120 -0
  158. package/dist/autoload.d.ts +18 -0
  159. package/dist/autoload.js +63 -0
  160. package/dist/avatar.d.ts +2 -0
  161. package/dist/avatar.js +27 -0
  162. package/dist/browser-core.d.ts +2 -0
  163. package/dist/browser-core.js +8 -0
  164. package/dist/button.d.ts +2 -0
  165. package/dist/button.js +35 -0
  166. package/dist/calendar.d.ts +23 -0
  167. package/dist/calendar.js +429 -0
  168. package/dist/carousel.d.ts +2 -0
  169. package/dist/carousel.js +54 -0
  170. package/dist/checkbox.d.ts +4 -0
  171. package/dist/checkbox.js +75 -0
  172. package/dist/collapsible.d.ts +2 -0
  173. package/dist/collapsible.js +28 -0
  174. package/dist/color-picker.d.ts +2 -0
  175. package/dist/color-picker.js +64 -0
  176. package/dist/combobox.d.ts +2 -0
  177. package/dist/combobox.js +334 -0
  178. package/dist/command.d.ts +2 -0
  179. package/dist/command.js +122 -0
  180. package/dist/date-input.d.ts +3 -0
  181. package/dist/date-input.js +87 -0
  182. package/dist/date-picker.d.ts +2 -0
  183. package/dist/date-picker.js +174 -0
  184. package/dist/default-text.d.ts +3 -0
  185. package/dist/default-text.js +24 -0
  186. package/dist/define-element.d.ts +404 -0
  187. package/dist/define-element.js +1489 -0
  188. package/dist/dialog.d.ts +3 -0
  189. package/dist/dialog.js +94 -0
  190. package/dist/drawer.d.ts +2 -0
  191. package/dist/drawer.js +96 -0
  192. package/dist/entries/accordion.d.ts +3 -0
  193. package/dist/entries/accordion.js +7 -0
  194. package/dist/entries/alert-dialog.d.ts +3 -0
  195. package/dist/entries/alert-dialog.js +13 -0
  196. package/dist/entries/autocomplete.d.ts +3 -0
  197. package/dist/entries/autocomplete.js +7 -0
  198. package/dist/entries/avatar.d.ts +2 -0
  199. package/dist/entries/avatar.js +3 -0
  200. package/dist/entries/button.d.ts +2 -0
  201. package/dist/entries/button.js +3 -0
  202. package/dist/entries/calendar.d.ts +3 -0
  203. package/dist/entries/calendar.js +7 -0
  204. package/dist/entries/carousel.d.ts +3 -0
  205. package/dist/entries/carousel.js +7 -0
  206. package/dist/entries/checkbox.d.ts +3 -0
  207. package/dist/entries/checkbox.js +15 -0
  208. package/dist/entries/collapsible.d.ts +3 -0
  209. package/dist/entries/collapsible.js +7 -0
  210. package/dist/entries/color-picker.d.ts +3 -0
  211. package/dist/entries/color-picker.js +7 -0
  212. package/dist/entries/combobox.d.ts +3 -0
  213. package/dist/entries/combobox.js +7 -0
  214. package/dist/entries/command.d.ts +3 -0
  215. package/dist/entries/command.js +7 -0
  216. package/dist/entries/date-input.d.ts +3 -0
  217. package/dist/entries/date-input.js +7 -0
  218. package/dist/entries/date-picker.d.ts +3 -0
  219. package/dist/entries/date-picker.js +7 -0
  220. package/dist/entries/dialog.d.ts +3 -0
  221. package/dist/entries/dialog.js +7 -0
  222. package/dist/entries/drawer.d.ts +3 -0
  223. package/dist/entries/drawer.js +8 -0
  224. package/dist/entries/field.d.ts +2 -0
  225. package/dist/entries/field.js +3 -0
  226. package/dist/entries/file-input.d.ts +3 -0
  227. package/dist/entries/file-input.js +13 -0
  228. package/dist/entries/hover-card.d.ts +3 -0
  229. package/dist/entries/hover-card.js +7 -0
  230. package/dist/entries/image-cropper.d.ts +3 -0
  231. package/dist/entries/image-cropper.js +7 -0
  232. package/dist/entries/input.d.ts +3 -0
  233. package/dist/entries/input.js +8 -0
  234. package/dist/entries/label.d.ts +2 -0
  235. package/dist/entries/label.js +3 -0
  236. package/dist/entries/listbox.d.ts +3 -0
  237. package/dist/entries/listbox.js +7 -0
  238. package/dist/entries/menu.d.ts +3 -0
  239. package/dist/entries/menu.js +7 -0
  240. package/dist/entries/menubar.d.ts +3 -0
  241. package/dist/entries/menubar.js +7 -0
  242. package/dist/entries/meter.d.ts +2 -0
  243. package/dist/entries/meter.js +3 -0
  244. package/dist/entries/navigation-menu.d.ts +3 -0
  245. package/dist/entries/navigation-menu.js +7 -0
  246. package/dist/entries/number-input.d.ts +3 -0
  247. package/dist/entries/number-input.js +7 -0
  248. package/dist/entries/otp-input.d.ts +3 -0
  249. package/dist/entries/otp-input.js +7 -0
  250. package/dist/entries/overlays.d.ts +2 -0
  251. package/dist/entries/overlays.js +3 -0
  252. package/dist/entries/pagination.d.ts +3 -0
  253. package/dist/entries/pagination.js +11 -0
  254. package/dist/entries/password-input.d.ts +3 -0
  255. package/dist/entries/password-input.js +7 -0
  256. package/dist/entries/popover.d.ts +3 -0
  257. package/dist/entries/popover.js +7 -0
  258. package/dist/entries/preferences.d.ts +3 -0
  259. package/dist/entries/preferences.js +13 -0
  260. package/dist/entries/progress.d.ts +2 -0
  261. package/dist/entries/progress.js +3 -0
  262. package/dist/entries/radio.d.ts +3 -0
  263. package/dist/entries/radio.js +7 -0
  264. package/dist/entries/rating.d.ts +3 -0
  265. package/dist/entries/rating.js +8 -0
  266. package/dist/entries/resizable.d.ts +3 -0
  267. package/dist/entries/resizable.js +11 -0
  268. package/dist/entries/scroll-area.d.ts +3 -0
  269. package/dist/entries/scroll-area.js +7 -0
  270. package/dist/entries/segmented-control.d.ts +3 -0
  271. package/dist/entries/segmented-control.js +7 -0
  272. package/dist/entries/select.d.ts +3 -0
  273. package/dist/entries/select.js +7 -0
  274. package/dist/entries/separator.d.ts +2 -0
  275. package/dist/entries/separator.js +3 -0
  276. package/dist/entries/slider.d.ts +3 -0
  277. package/dist/entries/slider.js +7 -0
  278. package/dist/entries/switch.d.ts +3 -0
  279. package/dist/entries/switch.js +7 -0
  280. package/dist/entries/tabs.d.ts +3 -0
  281. package/dist/entries/tabs.js +7 -0
  282. package/dist/entries/textarea.d.ts +3 -0
  283. package/dist/entries/textarea.js +7 -0
  284. package/dist/entries/time-input.d.ts +3 -0
  285. package/dist/entries/time-input.js +7 -0
  286. package/dist/entries/timeline.d.ts +3 -0
  287. package/dist/entries/timeline.js +7 -0
  288. package/dist/entries/toast.d.ts +2 -0
  289. package/dist/entries/toast.js +3 -0
  290. package/dist/entries/toggle.d.ts +3 -0
  291. package/dist/entries/toggle.js +12 -0
  292. package/dist/entries/token-input.d.ts +3 -0
  293. package/dist/entries/token-input.js +17 -0
  294. package/dist/entries/toolbar.d.ts +3 -0
  295. package/dist/entries/toolbar.js +7 -0
  296. package/dist/entries/tooltip.d.ts +3 -0
  297. package/dist/entries/tooltip.js +7 -0
  298. package/dist/entries/tree.d.ts +3 -0
  299. package/dist/entries/tree.js +17 -0
  300. package/dist/entries/trigger-menu.d.ts +3 -0
  301. package/dist/entries/trigger-menu.js +11 -0
  302. package/dist/entries/waterfall.d.ts +3 -0
  303. package/dist/entries/waterfall.js +11 -0
  304. package/dist/events.d.ts +1658 -0
  305. package/dist/events.js +0 -0
  306. package/dist/field.d.ts +2 -0
  307. package/dist/field.js +101 -0
  308. package/dist/file-input.d.ts +2 -0
  309. package/dist/file-input.js +140 -0
  310. package/dist/forward-attributes.d.ts +2 -0
  311. package/dist/forward-attributes.js +22 -0
  312. package/dist/history.d.ts +2 -0
  313. package/dist/history.js +11 -0
  314. package/dist/hover-card.d.ts +2 -0
  315. package/dist/hover-card.js +31 -0
  316. package/dist/image-cropper.d.ts +2 -0
  317. package/dist/image-cropper.js +66 -0
  318. package/dist/index.d.ts +66 -0
  319. package/dist/index.js +269 -0
  320. package/dist/input.d.ts +3 -0
  321. package/dist/input.js +69 -0
  322. package/dist/label.d.ts +2 -0
  323. package/dist/label.js +11 -0
  324. package/dist/list.d.ts +40 -0
  325. package/dist/list.js +192 -0
  326. package/dist/listbox.d.ts +2 -0
  327. package/dist/listbox.js +84 -0
  328. package/dist/menu.d.ts +4 -0
  329. package/dist/menu.js +295 -0
  330. package/dist/menubar.d.ts +4 -0
  331. package/dist/menubar.js +30 -0
  332. package/dist/meter.d.ts +2 -0
  333. package/dist/meter.js +22 -0
  334. package/dist/navigation-menu.d.ts +2 -0
  335. package/dist/navigation-menu.js +114 -0
  336. package/dist/number-input.d.ts +2 -0
  337. package/dist/number-input.js +73 -0
  338. package/dist/observe.d.ts +2 -0
  339. package/dist/observe.js +7 -0
  340. package/dist/otp-input.d.ts +2 -0
  341. package/dist/otp-input.js +72 -0
  342. package/dist/overlays.d.ts +13 -0
  343. package/dist/overlays.js +156 -0
  344. package/dist/pagination.d.ts +2 -0
  345. package/dist/pagination.js +127 -0
  346. package/dist/password-input.d.ts +2 -0
  347. package/dist/password-input.js +57 -0
  348. package/dist/popover.d.ts +2 -0
  349. package/dist/popover.js +64 -0
  350. package/dist/popup.d.ts +40 -0
  351. package/dist/popup.js +112 -0
  352. package/dist/preferences.d.ts +2 -0
  353. package/dist/preferences.js +56 -0
  354. package/dist/progress.d.ts +2 -0
  355. package/dist/progress.js +22 -0
  356. package/dist/radio.d.ts +2 -0
  357. package/dist/radio.js +33 -0
  358. package/dist/rating.d.ts +2 -0
  359. package/dist/rating.js +64 -0
  360. package/dist/resizable.d.ts +2 -0
  361. package/dist/resizable.js +42 -0
  362. package/dist/scroll-area.d.ts +2 -0
  363. package/dist/scroll-area.js +45 -0
  364. package/dist/segmented-control.d.ts +2 -0
  365. package/dist/segmented-control.js +28 -0
  366. package/dist/select.d.ts +2 -0
  367. package/dist/select.js +239 -0
  368. package/dist/separator.d.ts +2 -0
  369. package/dist/separator.js +11 -0
  370. package/dist/slider.d.ts +2 -0
  371. package/dist/slider.js +77 -0
  372. package/dist/tabs.d.ts +2 -0
  373. package/dist/tabs.js +37 -0
  374. package/dist/timeline.d.ts +2 -0
  375. package/dist/timeline.js +27 -0
  376. package/dist/toast.d.ts +20 -0
  377. package/dist/toast.js +177 -0
  378. package/dist/toggle.d.ts +3 -0
  379. package/dist/toggle.js +64 -0
  380. package/dist/token-input.d.ts +2 -0
  381. package/dist/token-input.js +103 -0
  382. package/dist/toolbar.d.ts +2 -0
  383. package/dist/toolbar.js +36 -0
  384. package/dist/tooltip.d.ts +2 -0
  385. package/dist/tooltip.js +35 -0
  386. package/dist/tree.d.ts +2 -0
  387. package/dist/tree.js +147 -0
  388. package/dist/trigger-menu.d.ts +2 -0
  389. package/dist/trigger-menu.js +133 -0
  390. package/dist/waterfall.d.ts +2 -0
  391. package/dist/waterfall.js +140 -0
  392. package/docs/README.md +89 -0
  393. package/docs/agents.md +1523 -0
  394. package/docs/components/accordion.md +1401 -0
  395. package/docs/components/alert-dialog.md +788 -0
  396. package/docs/components/autocomplete.md +1692 -0
  397. package/docs/components/avatar.md +261 -0
  398. package/docs/components/button.md +441 -0
  399. package/docs/components/calendar.md +1536 -0
  400. package/docs/components/carousel.md +1055 -0
  401. package/docs/components/checkbox.md +1045 -0
  402. package/docs/components/collapsible.md +535 -0
  403. package/docs/components/color-picker.md +651 -0
  404. package/docs/components/combobox.md +3274 -0
  405. package/docs/components/command.md +1431 -0
  406. package/docs/components/date-input.md +563 -0
  407. package/docs/components/date-picker.md +1136 -0
  408. package/docs/components/dialog.md +1360 -0
  409. package/docs/components/drawer.md +1201 -0
  410. package/docs/components/field.md +519 -0
  411. package/docs/components/file-input.md +617 -0
  412. package/docs/components/hover-card.md +486 -0
  413. package/docs/components/image-cropper.md +489 -0
  414. package/docs/components/input.md +327 -0
  415. package/docs/components/label.md +208 -0
  416. package/docs/components/listbox.md +1015 -0
  417. package/docs/components/menu.md +1212 -0
  418. package/docs/components/menubar.md +460 -0
  419. package/docs/components/meter.md +298 -0
  420. package/docs/components/navigation-menu.md +1573 -0
  421. package/docs/components/number-input.md +1087 -0
  422. package/docs/components/otp-input.md +558 -0
  423. package/docs/components/pagination.md +639 -0
  424. package/docs/components/password-input.md +649 -0
  425. package/docs/components/popover.md +1433 -0
  426. package/docs/components/preferences.md +243 -0
  427. package/docs/components/progress.md +406 -0
  428. package/docs/components/radio.md +855 -0
  429. package/docs/components/rating.md +431 -0
  430. package/docs/components/resizable.md +866 -0
  431. package/docs/components/scroll-area.md +898 -0
  432. package/docs/components/segmented-control.md +421 -0
  433. package/docs/components/select.md +1957 -0
  434. package/docs/components/separator.md +238 -0
  435. package/docs/components/slider.md +1018 -0
  436. package/docs/components/switch.md +583 -0
  437. package/docs/components/tabs.md +948 -0
  438. package/docs/components/textarea.md +331 -0
  439. package/docs/components/time-input.md +235 -0
  440. package/docs/components/timeline.md +622 -0
  441. package/docs/components/toast.md +1223 -0
  442. package/docs/components/toggle.md +522 -0
  443. package/docs/components/token-input.md +854 -0
  444. package/docs/components/toolbar.md +815 -0
  445. package/docs/components/tooltip.md +860 -0
  446. package/docs/components/tree.md +1243 -0
  447. package/docs/components/trigger-menu.md +1110 -0
  448. package/docs/components/waterfall.md +709 -0
  449. package/docs/controllers.md +66 -0
  450. package/docs/core.md +8027 -0
  451. package/docs/custom-parts.md +91 -0
  452. package/docs/first-component.md +88 -0
  453. package/docs/forms.md +125 -0
  454. package/docs/installation.md +141 -0
  455. package/docs/introduction.md +32 -0
  456. package/docs/lists-and-menus.md +166 -0
  457. package/docs/llms.txt +1566 -0
  458. package/docs/parts-and-composition.md +57 -0
  459. package/docs/popups.md +92 -0
  460. package/docs/rendering.md +71 -0
  461. package/docs/server-rendering.md +118 -0
  462. package/docs/state-and-events.md +134 -0
  463. package/docs/styling-and-animation.md +104 -0
  464. package/docs/utilities/async-options.md +332 -0
  465. package/docs/utilities/shortcuts.md +184 -0
  466. package/html-custom-data.json +14792 -0
  467. package/package.json +302 -3
@@ -0,0 +1,332 @@
1
+ # Async Options
2
+
3
+ Load search results, cancel stale requests, and fetch the next page.
4
+
5
+ `createAsyncOptions` loads items as someone types. It waits for typing to pause, cancels requests that are replaced, and keeps the previous results visible while loading.
6
+
7
+ ```ts title="async.ts"
8
+ import { createAsyncOptions } from "@ui-sdk/core/async-options"
9
+ import "@ui-sdk/web/combobox"
10
+ import { Check, ChevronDown, createElement } from "lucide"
11
+
12
+ const movieTitles = [
13
+ "The Shawshank Redemption",
14
+ "The Godfather",
15
+ "The Dark Knight",
16
+ "Pulp Fiction",
17
+ "Schindler's List",
18
+ "The Lord of the Rings",
19
+ "Fight Club",
20
+ "Forrest Gump",
21
+ "Inception",
22
+ "The Matrix",
23
+ "Goodfellas",
24
+ "Interstellar",
25
+ "Parasite",
26
+ "Spirited Away",
27
+ "Whiplash",
28
+ "The Prestige",
29
+ "The Departed",
30
+ "Gladiator",
31
+ "Alien",
32
+ "Casablanca",
33
+ "Amélie",
34
+ "Arrival",
35
+ ]
36
+
37
+ function searchMovies(query: string, { signal }: { signal: AbortSignal }) {
38
+ return new Promise<{ value: string; label: string }[]>((resolve, reject) => {
39
+ const timer = setTimeout(() => {
40
+ const needle = query.trim().toLowerCase()
41
+ resolve(
42
+ movieTitles
43
+ .filter((title) => title.toLowerCase().includes(needle))
44
+ .map((title) => ({
45
+ value: title.toLowerCase().replace(/\W+/g, "-"),
46
+ label: title,
47
+ }))
48
+ )
49
+ }, 500)
50
+ signal.addEventListener("abort", () => {
51
+ clearTimeout(timer)
52
+ reject(signal.reason)
53
+ })
54
+ })
55
+ }
56
+
57
+ function mount(root: HTMLElement) {
58
+ root.innerHTML = `
59
+ <ui-combobox filter="false" default-query="the">
60
+ <div data-slot="stack">
61
+ <ui-combobox-label>Movie</ui-combobox-label>
62
+ <div data-slot="row">
63
+ <ui-combobox-input>
64
+ <input placeholder="Search movies…" />
65
+ </ui-combobox-input>
66
+ <ui-combobox-trigger>
67
+ <button aria-label="Show movies">${createElement(ChevronDown, { "aria-hidden": "true" }).outerHTML}</button>
68
+ </ui-combobox-trigger>
69
+ </div>
70
+ </div>
71
+ <ui-combobox-content hidden>
72
+ <ui-combobox-status></ui-combobox-status>
73
+ <ui-combobox-empty>No movies match “<span>the</span>”.</ui-combobox-empty>
74
+ <ui-combobox-list></ui-combobox-list>
75
+ </ui-combobox-content>
76
+ <template>
77
+ <ui-combobox-item>
78
+ <ui-combobox-item-indicator>${createElement(Check, { "aria-hidden": "true" }).outerHTML}</ui-combobox-item-indicator>
79
+ </ui-combobox-item>
80
+ </template>
81
+ </ui-combobox>
82
+ `
83
+ const combobox = root.querySelector("ui-combobox")!
84
+ const status = root.querySelector("ui-combobox-status")!
85
+ const query = root.querySelector("ui-combobox-empty span")!
86
+ const movies = createAsyncOptions(searchMovies, {
87
+ debounce: 300,
88
+ query: "the",
89
+ immediate: true,
90
+ })
91
+ const update = () => {
92
+ const { items, status: loading } = movies.getState()
93
+ combobox.items = items
94
+ combobox.setAttribute("status", loading)
95
+ status.textContent =
96
+ loading === "error"
97
+ ? "Couldn't load movies."
98
+ : loading === "loading"
99
+ ? "Searching…"
100
+ : `${items.length} ${items.length === 1 ? "movie" : "movies"}`
101
+ }
102
+ movies.subscribe(update)
103
+ update()
104
+ combobox.addEventListener("querychange", (event) => {
105
+ query.textContent = event.detail.value
106
+ movies.setQuery(event.detail.value)
107
+ })
108
+ }
109
+
110
+ export { mount }
111
+ ```
112
+
113
+ Change the movie search and wait for the results. Use the arrow keys to choose a movie, then press Enter.
114
+
115
+ ## Load Results
116
+
117
+ Write the combobox, then connect its query events to a loader. This example expects `/api/movies` to return an array of movie titles:
118
+
119
+ ```html
120
+ <ui-combobox filter="false">
121
+ <ui-combobox-input
122
+ ><input aria-label="Movie" placeholder="Search movies…"
123
+ /></ui-combobox-input>
124
+ <ui-combobox-content>
125
+ <ui-combobox-list></ui-combobox-list>
126
+ </ui-combobox-content>
127
+ </ui-combobox>
128
+ ```
129
+
130
+ ```ts
131
+ import "@ui-sdk/web/combobox"
132
+ import { createAsyncOptions } from "@ui-sdk/core/async-options"
133
+ import type { UiComboboxElement } from "@ui-sdk/web"
134
+
135
+ function connectMovies(combobox: UiComboboxElement) {
136
+ const movies = createAsyncOptions<string>(async (query, { signal }) => {
137
+ const response = await fetch(`/api/movies?q=${encodeURIComponent(query)}`, {
138
+ signal,
139
+ })
140
+ if (!response.ok) throw new Error("Couldn't load movies")
141
+ return response.json()
142
+ })
143
+ function update() {
144
+ const { items, status } = movies.getState()
145
+ combobox.items = items
146
+ combobox.status = status
147
+ }
148
+ const unsubscribe = movies.subscribe(update)
149
+ update()
150
+ const events = new AbortController()
151
+ combobox.addEventListener(
152
+ "querychange",
153
+ (event) => movies.setQuery(event.detail.value),
154
+ {
155
+ signal: events.signal,
156
+ }
157
+ )
158
+ combobox.addEventListener("loadmore", () => movies.loadMore(), {
159
+ signal: events.signal,
160
+ })
161
+
162
+ return () => {
163
+ events.abort()
164
+ unsubscribe()
165
+ movies.cancel()
166
+ }
167
+ }
168
+
169
+ const disconnect = connectMovies(document.querySelector("ui-combobox")!)
170
+ ```
171
+
172
+ Keep `disconnect` and call it when removing this view. It removes listeners, unsubscribes from state, and cancels pending work.
173
+
174
+ Pass `signal` to `fetch` so a newer search can cancel the request. `filter="false"` leaves matching and result order to the server. Set `items` and `status` as properties, as shown above.
175
+
176
+ Use the component's status and empty parts to show loading, error, and empty messages, as in the demo. The same pattern works with [Select](../components/select.md#async-search), [Autocomplete](../components/autocomplete.md#async-suggestions), and [Command](../components/command.md#async-results).
177
+
178
+ ## Choose When to Load
179
+
180
+ The helper's second argument sets its starting behavior:
181
+
182
+ | Option | What It Does | Default |
183
+ | ----------- | ------------------------------------------------------- | ------- |
184
+ | `debounce` | Milliseconds typing must pause before a request starts. | `200` |
185
+ | `query` | The starting search text. | `""` |
186
+ | `immediate` | Loads that text before anyone types. | `false` |
187
+
188
+ Add `{ immediate: true, debounce: 300 }` after the loader to load initial choices. If you set `query`, use the same text for the component's `default-query`.
189
+
190
+ ## Load More
191
+
192
+ For paged results, return `{ items, hasMore }`. The page number starts at `0`:
193
+
194
+ ```ts
195
+ import type { AsyncOptionsContext } from "@ui-sdk/core/async-options"
196
+
197
+ async function loadMoviePages(
198
+ query: string,
199
+ { signal, page }: AsyncOptionsContext
200
+ ) {
201
+ const response = await fetch(
202
+ `/api/movies?q=${encodeURIComponent(query)}&page=${page}`,
203
+ { signal }
204
+ )
205
+ if (!response.ok) throw new Error("Couldn't load movies")
206
+ const data: { titles: string[]; next: number | null } = await response.json()
207
+ return { items: data.titles, hasMore: data.next !== null }
208
+ }
209
+
210
+ export { loadMoviePages }
211
+ ```
212
+
213
+ Pass `loadMoviePages` to `createAsyncOptions` in place of the inline loader above.
214
+
215
+ The `loadmore` listener above asks for another page when scrolling or keyboard navigation reaches the last item. The helper appends the new items.
216
+
217
+ ```ts title="infinite.ts"
218
+ import { createAsyncOptions } from "@ui-sdk/core/async-options"
219
+ import "@ui-sdk/web/combobox"
220
+ import { Check, ChevronDown, createElement } from "lucide"
221
+
222
+ const movieTitles = [
223
+ "The Shawshank Redemption",
224
+ "The Godfather",
225
+ "The Dark Knight",
226
+ "Pulp Fiction",
227
+ "Schindler's List",
228
+ "The Lord of the Rings",
229
+ "Fight Club",
230
+ "Forrest Gump",
231
+ "Inception",
232
+ "The Matrix",
233
+ "Goodfellas",
234
+ "Interstellar",
235
+ "Parasite",
236
+ "Spirited Away",
237
+ "Whiplash",
238
+ "The Prestige",
239
+ "The Departed",
240
+ "Gladiator",
241
+ "Alien",
242
+ "Casablanca",
243
+ "Amélie",
244
+ "Arrival",
245
+ ]
246
+
247
+ function searchMoviePages(
248
+ query: string,
249
+ { signal, page }: { signal: AbortSignal; page: number }
250
+ ) {
251
+ return new Promise<{
252
+ items: { value: string; label: string }[]
253
+ hasMore: boolean
254
+ }>((resolve, reject) => {
255
+ const timer = setTimeout(() => {
256
+ const needle = query.trim().toLowerCase()
257
+ const found = movieTitles
258
+ .filter((title) => title.toLowerCase().includes(needle))
259
+ .map((title) => ({
260
+ value: title.toLowerCase().replace(/\W+/g, "-"),
261
+ label: title,
262
+ }))
263
+ resolve({
264
+ items: found.slice(page * 5, page * 5 + 5),
265
+ hasMore: found.length > page * 5 + 5,
266
+ })
267
+ }, 500)
268
+ signal.addEventListener("abort", () => {
269
+ clearTimeout(timer)
270
+ reject(signal.reason)
271
+ })
272
+ })
273
+ }
274
+
275
+ function mount(root: HTMLElement) {
276
+ root.innerHTML = `
277
+ <ui-combobox filter="false">
278
+ <div data-slot="stack">
279
+ <ui-combobox-label>Movie</ui-combobox-label>
280
+ <div data-slot="row">
281
+ <ui-combobox-input>
282
+ <input placeholder="Search movies…" />
283
+ </ui-combobox-input>
284
+ <ui-combobox-trigger>
285
+ <button aria-label="Show movies">${createElement(ChevronDown, { "aria-hidden": "true" }).outerHTML}</button>
286
+ </ui-combobox-trigger>
287
+ </div>
288
+ </div>
289
+ <ui-combobox-content hidden>
290
+ <ui-combobox-empty>No movies found.</ui-combobox-empty>
291
+ <ui-combobox-list></ui-combobox-list>
292
+ <ui-combobox-status></ui-combobox-status>
293
+ </ui-combobox-content>
294
+ <template>
295
+ <ui-combobox-item>
296
+ <ui-combobox-item-indicator>${createElement(Check, { "aria-hidden": "true" }).outerHTML}</ui-combobox-item-indicator>
297
+ </ui-combobox-item>
298
+ </template>
299
+ </ui-combobox>
300
+ `
301
+ const combobox = root.querySelector("ui-combobox")!
302
+ const status = root.querySelector("ui-combobox-status")!
303
+ const movies = createAsyncOptions(searchMoviePages, { immediate: true })
304
+ const update = () => {
305
+ const { items, status: loading, hasMore } = movies.getState()
306
+ combobox.items = items
307
+ combobox.setAttribute("status", loading)
308
+ status.textContent =
309
+ loading === "loading"
310
+ ? "Loading more…"
311
+ : hasMore
312
+ ? `${items.length} loaded`
313
+ : `All ${items.length}`
314
+ }
315
+ movies.subscribe(update)
316
+ update()
317
+ combobox.addEventListener("querychange", (event) =>
318
+ movies.setQuery(event.detail.value)
319
+ )
320
+ combobox.addEventListener("loadmore", () => movies.loadMore())
321
+ }
322
+
323
+ export { mount }
324
+ ```
325
+
326
+ Open the movie list and scroll down, or use Arrow Down to reach the last result. The next page is added to the list.
327
+
328
+ ## Retry a Search
329
+
330
+ `movies.getState()` holds `items`, `status`, `error`, and `hasMore`. Status is `"loading"` during a request, `"error"` after a failure, and `"idle"` otherwise.
331
+
332
+ Call `movies.reload()` from a retry button to load the current query again, starting at page `0`. Previous results stay available while it loads.
@@ -0,0 +1,184 @@
1
+ # Shortcuts
2
+
3
+ Register keyboard shortcuts and show the right keys for the user's platform.
4
+
5
+ `registerShortcut` connects keys to an action. For an element that already accepts `shortcut`, such as a dialog trigger, use that attribute directly.
6
+
7
+ ```ts title="basic.ts"
8
+ import { ariaKeyshortcuts, formatShortcut, registerShortcut } from "@ui-sdk/web"
9
+
10
+ export function mount(root: HTMLElement) {
11
+ root.innerHTML = `
12
+ <div data-slot="stack">
13
+ <div data-slot="row">
14
+ <button type="button" data-action="new" aria-keyshortcuts="N">New note <kbd aria-hidden="true" data-slot="kbd">N</kbd></button>
15
+ <button type="button" data-action="save" aria-keyshortcuts="${ariaKeyshortcuts("mod+s")}">Save <kbd aria-hidden="true" data-slot="kbd">${formatShortcut("mod+s")}</kbd></button>
16
+ </div>
17
+ <output data-slot="output">Press N or the keys to save.</output>
18
+ </div>
19
+ `
20
+ const output = root.querySelector("output")!
21
+ const actions = {
22
+ new: () => (output.textContent = "Note created"),
23
+ save: () => (output.textContent = "Saved"),
24
+ }
25
+ root
26
+ .querySelector('[data-action="new"]')!
27
+ .addEventListener("click", actions.new)
28
+ root
29
+ .querySelector('[data-action="save"]')!
30
+ .addEventListener("click", actions.save)
31
+
32
+ const offs = [
33
+ registerShortcut("n", actions.new, { description: "New note" }),
34
+ registerShortcut("mod+s", actions.save, { description: "Save" }),
35
+ ]
36
+ return () => offs.forEach((off) => off())
37
+ }
38
+ ```
39
+
40
+ Press N to create a note. Press Command+S on Mac or Control+S elsewhere to save. The buttons run the same actions.
41
+
42
+ ## Register a Shortcut
43
+
44
+ Keys are joined with `+`. `mod` means Command on Apple platforms and Control elsewhere:
45
+
46
+ ```html
47
+ <button id="new-note">New note <kbd aria-hidden="true"></kbd></button>
48
+ <p id="count" aria-live="polite">0 notes</p>
49
+ ```
50
+
51
+ ```ts
52
+ import { ariaKeyshortcuts, formatShortcut, registerShortcut } from "@ui-sdk/web"
53
+
54
+ const button = document.querySelector<HTMLButtonElement>("#new-note")!
55
+ const count = document.querySelector("#count")!
56
+ let total = 0
57
+ function addNote() {
58
+ total++
59
+ count.textContent = `${total} notes`
60
+ }
61
+
62
+ const unregister = registerShortcut("mod+enter", addNote, {
63
+ description: "New note",
64
+ })
65
+ button.addEventListener("click", addNote)
66
+ button.setAttribute("aria-keyshortcuts", ariaKeyshortcuts("mod+enter"))
67
+ button.querySelector("kbd")!.textContent = formatShortcut("mod+enter")
68
+
69
+ function disconnect() {
70
+ unregister()
71
+ button.removeEventListener("click", addNote)
72
+ }
73
+ ```
74
+
75
+ Call `disconnect()` when removing this view. `registerShortcut` returns the function that unregisters it.
76
+
77
+ ## Show the Keys
78
+
79
+ `formatShortcut` produces display text for the current platform. `ariaKeyshortcuts` produces the matching `aria-keyshortcuts` value. The example hides the visual hint from screen readers because the button already exposes the shortcut.
80
+
81
+ Format browser-specific hints after the page loads. Compare the original keys, not the formatted display text.
82
+
83
+ ## While Someone Is Typing
84
+
85
+ Shortcuts with Command, Control, or Option can run in text fields. Plain letters and other keys stay available for typing. Set `allowInInput: true` when a shortcut should work there too, such as Escape to clear a search.
86
+
87
+ ## Limit a Shortcut to an Area
88
+
89
+ A named `scope` runs only while it is enabled. This connection turns it on when the textarea has focus and clears it on cleanup:
90
+
91
+ ```html
92
+ <textarea id="note" aria-label="Note"></textarea>
93
+ ```
94
+
95
+ ```ts
96
+ import { registerShortcut, shortcuts } from "@ui-sdk/web"
97
+
98
+ function connectNote(note: HTMLTextAreaElement) {
99
+ const unregister = registerShortcut(
100
+ "escape",
101
+ () => {
102
+ note.value = ""
103
+ },
104
+ {
105
+ scope: "note",
106
+ allowInInput: true,
107
+ }
108
+ )
109
+ const events = new AbortController()
110
+ note.addEventListener("focus", () => shortcuts.setScope("note", true), {
111
+ signal: events.signal,
112
+ })
113
+ note.addEventListener("blur", () => shortcuts.setScope("note", false), {
114
+ signal: events.signal,
115
+ })
116
+ shortcuts.setScope("note", document.activeElement === note)
117
+
118
+ return () => {
119
+ events.abort()
120
+ shortcuts.setScope("note", false)
121
+ unregister()
122
+ }
123
+ }
124
+
125
+ const disconnect = connectNote(
126
+ document.querySelector<HTMLTextAreaElement>("#note")!
127
+ )
128
+ ```
129
+
130
+ Call `disconnect()` when removing the note. Scope names are shared, so choose one for each area you want to enable together. A `when` function can add a condition checked on each key press.
131
+
132
+ ```ts title="scope.ts"
133
+ import { registerShortcut, shortcuts } from "@ui-sdk/web"
134
+
135
+ export function mount(root: HTMLElement) {
136
+ root.innerHTML = `
137
+ <div data-slot="stack">
138
+ <textarea aria-label="Note" placeholder="Write a note…"></textarea>
139
+ <output data-slot="output">Focus the note to turn on its shortcuts.</output>
140
+ </div>
141
+ `
142
+ const textarea = root.querySelector("textarea")!
143
+ const output = root.querySelector("output")!
144
+ textarea.addEventListener("focus", () => shortcuts.setScope("note", true))
145
+ textarea.addEventListener("blur", () => shortcuts.setScope("note", false))
146
+
147
+ const offs = [
148
+ registerShortcut(
149
+ "mod+enter",
150
+ () =>
151
+ (output.textContent = `Characters saved: ${textarea.value.trim().length}`),
152
+ {
153
+ scope: "note",
154
+ when: () => textarea.value.trim() !== "",
155
+ description: "Save the note",
156
+ }
157
+ ),
158
+ registerShortcut(
159
+ "escape",
160
+ () => {
161
+ textarea.value = ""
162
+ output.textContent = "Cleared"
163
+ },
164
+ { scope: "note", allowInInput: true, description: "Clear the note" }
165
+ ),
166
+ ]
167
+ return () => {
168
+ offs.forEach((off) => off())
169
+ shortcuts.setScope("note", false)
170
+ }
171
+ }
172
+ ```
173
+
174
+ Focus the note and type some text. Press Command+Enter on Mac or Control+Enter elsewhere to save, or Escape to clear it. Move focus outside the note to turn off its shortcuts.
175
+
176
+ ## Inside a Popup
177
+
178
+ Page shortcuts pause while a modal is open. Pass `layer`, an element inside a popup or a function that returns one, to make a shortcut belong to that popup. It runs only while the popup is open, even though its closed content stays in the DOM.
179
+
180
+ When shortcuts share the same keys, the topmost open layer wins, then the most recently registered shortcut.
181
+
182
+ ## List Available Shortcuts
183
+
184
+ Call `shortcuts.list()` when a help screen opens. It returns the shortcuts that can run now, including their `keys`, formatted `hint`, and `description`. Add descriptions when registering shortcuts so the help screen can explain each action.