@k8ordo/ui 1.0.0

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 (425) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +624 -0
  3. package/dist/components/_internal/focus-ring.d.mts +8 -0
  4. package/dist/components/_internal/focus-ring.mjs +8 -0
  5. package/dist/components/ai/_internal/collapsible.d.mts +13 -0
  6. package/dist/components/ai/_internal/collapsible.mjs +49 -0
  7. package/dist/components/ai/_internal/streaming-cursor.d.mts +5 -0
  8. package/dist/components/ai/_internal/streaming-cursor.mjs +8 -0
  9. package/dist/components/ai/conversation/conversation.d.mts +18 -0
  10. package/dist/components/ai/conversation/conversation.mjs +111 -0
  11. package/dist/components/ai/conversation/index.d.mts +2 -0
  12. package/dist/components/ai/conversation/index.mjs +2 -0
  13. package/dist/components/ai/index.d.mts +14 -0
  14. package/dist/components/ai/index.mjs +7 -0
  15. package/dist/components/ai/message/index.d.mts +2 -0
  16. package/dist/components/ai/message/index.mjs +2 -0
  17. package/dist/components/ai/message/message.d.mts +17 -0
  18. package/dist/components/ai/message/message.mjs +34 -0
  19. package/dist/components/ai/prompt-input/index.d.mts +2 -0
  20. package/dist/components/ai/prompt-input/index.mjs +2 -0
  21. package/dist/components/ai/prompt-input/prompt-input.d.mts +27 -0
  22. package/dist/components/ai/prompt-input/prompt-input.mjs +108 -0
  23. package/dist/components/ai/reasoning/index.d.mts +2 -0
  24. package/dist/components/ai/reasoning/index.mjs +2 -0
  25. package/dist/components/ai/reasoning/reasoning.d.mts +12 -0
  26. package/dist/components/ai/reasoning/reasoning.mjs +25 -0
  27. package/dist/components/ai/response/index.d.mts +2 -0
  28. package/dist/components/ai/response/index.mjs +2 -0
  29. package/dist/components/ai/response/response.d.mts +20 -0
  30. package/dist/components/ai/response/response.mjs +57 -0
  31. package/dist/components/ai/suggestion/index.d.mts +2 -0
  32. package/dist/components/ai/suggestion/index.mjs +2 -0
  33. package/dist/components/ai/suggestion/suggestion.d.mts +17 -0
  34. package/dist/components/ai/suggestion/suggestion.mjs +29 -0
  35. package/dist/components/ai/tool-invocation/index.d.mts +2 -0
  36. package/dist/components/ai/tool-invocation/index.mjs +2 -0
  37. package/dist/components/ai/tool-invocation/tool-invocation.d.mts +17 -0
  38. package/dist/components/ai/tool-invocation/tool-invocation.mjs +73 -0
  39. package/dist/components/ai/types.d.mts +5 -0
  40. package/dist/components/ai/types.mjs +1 -0
  41. package/dist/components/buttons/button/button.d.mts +27 -0
  42. package/dist/components/buttons/button/button.mjs +60 -0
  43. package/dist/components/buttons/button/index.d.mts +2 -0
  44. package/dist/components/buttons/button/index.mjs +2 -0
  45. package/dist/components/buttons/icon-button/icon-button.d.mts +29 -0
  46. package/dist/components/buttons/icon-button/icon-button.mjs +84 -0
  47. package/dist/components/buttons/icon-button/index.d.mts +2 -0
  48. package/dist/components/buttons/icon-button/index.mjs +2 -0
  49. package/dist/components/data-display/accordion/accordion-button.d.mts +5 -0
  50. package/dist/components/data-display/accordion/accordion-button.mjs +26 -0
  51. package/dist/components/data-display/accordion/accordion-item.d.mts +9 -0
  52. package/dist/components/data-display/accordion/accordion-item.mjs +20 -0
  53. package/dist/components/data-display/accordion/accordion-panel.d.mts +5 -0
  54. package/dist/components/data-display/accordion/accordion-panel.mjs +18 -0
  55. package/dist/components/data-display/accordion/accordion.d.mts +5 -0
  56. package/dist/components/data-display/accordion/accordion.mjs +8 -0
  57. package/dist/components/data-display/accordion/context.d.mts +14 -0
  58. package/dist/components/data-display/accordion/context.mjs +32 -0
  59. package/dist/components/data-display/accordion/index.d.mts +19 -0
  60. package/dist/components/data-display/accordion/index.mjs +13 -0
  61. package/dist/components/data-display/avatar/avatar.d.mts +14 -0
  62. package/dist/components/data-display/avatar/avatar.mjs +43 -0
  63. package/dist/components/data-display/avatar/index.d.mts +2 -0
  64. package/dist/components/data-display/avatar/index.mjs +2 -0
  65. package/dist/components/data-display/badge/badge.d.mts +21 -0
  66. package/dist/components/data-display/badge/badge.mjs +27 -0
  67. package/dist/components/data-display/badge/index.d.mts +2 -0
  68. package/dist/components/data-display/badge/index.mjs +2 -0
  69. package/dist/components/data-display/card/card.d.mts +10 -0
  70. package/dist/components/data-display/card/card.mjs +10 -0
  71. package/dist/components/data-display/card/index.d.mts +2 -0
  72. package/dist/components/data-display/card/index.mjs +2 -0
  73. package/dist/components/data-display/code/code.d.mts +8 -0
  74. package/dist/components/data-display/code/code.mjs +35 -0
  75. package/dist/components/data-display/code/find-all-colors.d.mts +16 -0
  76. package/dist/components/data-display/code/find-all-colors.mjs +267 -0
  77. package/dist/components/data-display/code/index.d.mts +2 -0
  78. package/dist/components/data-display/code/index.mjs +2 -0
  79. package/dist/components/data-display/heading/heading.d.mts +9 -0
  80. package/dist/components/data-display/heading/heading.mjs +46 -0
  81. package/dist/components/data-display/heading/index.d.mts +2 -0
  82. package/dist/components/data-display/heading/index.mjs +2 -0
  83. package/dist/components/data-display/table/index.d.mts +2 -0
  84. package/dist/components/data-display/table/index.mjs +2 -0
  85. package/dist/components/data-display/table/table.d.mts +33 -0
  86. package/dist/components/data-display/table/table.mjs +62 -0
  87. package/dist/components/feedback/alert/alert.d.mts +19 -0
  88. package/dist/components/feedback/alert/alert.mjs +71 -0
  89. package/dist/components/feedback/alert/index.d.mts +2 -0
  90. package/dist/components/feedback/alert/index.mjs +2 -0
  91. package/dist/components/feedback/progress/index.d.mts +2 -0
  92. package/dist/components/feedback/progress/index.mjs +2 -0
  93. package/dist/components/feedback/progress/progress.d.mts +11 -0
  94. package/dist/components/feedback/progress/progress.mjs +21 -0
  95. package/dist/components/feedback/skeleton/index.d.mts +2 -0
  96. package/dist/components/feedback/skeleton/index.mjs +2 -0
  97. package/dist/components/feedback/skeleton/skeleton.d.mts +10 -0
  98. package/dist/components/feedback/skeleton/skeleton.mjs +10 -0
  99. package/dist/components/feedback/spinner/index.d.mts +2 -0
  100. package/dist/components/feedback/spinner/index.mjs +2 -0
  101. package/dist/components/feedback/spinner/spinner.d.mts +9 -0
  102. package/dist/components/feedback/spinner/spinner.mjs +24 -0
  103. package/dist/components/feedback/toast/context.d.mts +34 -0
  104. package/dist/components/feedback/toast/context.mjs +7 -0
  105. package/dist/components/feedback/toast/index.d.mts +3 -0
  106. package/dist/components/feedback/toast/index.mjs +3 -0
  107. package/dist/components/feedback/toast/provider.d.mts +8 -0
  108. package/dist/components/feedback/toast/provider.mjs +171 -0
  109. package/dist/components/feedback/toast/toast.d.mts +15 -0
  110. package/dist/components/feedback/toast/toast.mjs +32 -0
  111. package/dist/components/form/autocomplete/autocomplete.d.mts +23 -0
  112. package/dist/components/form/autocomplete/autocomplete.mjs +225 -0
  113. package/dist/components/form/autocomplete/index.d.mts +2 -0
  114. package/dist/components/form/autocomplete/index.mjs +2 -0
  115. package/dist/components/form/checkbox/checkbox.d.mts +21 -0
  116. package/dist/components/form/checkbox/checkbox.mjs +59 -0
  117. package/dist/components/form/checkbox/index.d.mts +2 -0
  118. package/dist/components/form/checkbox/index.mjs +2 -0
  119. package/dist/components/form/checkbox-card/checkbox-card.d.mts +29 -0
  120. package/dist/components/form/checkbox-card/checkbox-card.mjs +76 -0
  121. package/dist/components/form/checkbox-card/index.d.mts +2 -0
  122. package/dist/components/form/checkbox-card/index.mjs +2 -0
  123. package/dist/components/form/checkbox-group/checkbox-group.d.mts +29 -0
  124. package/dist/components/form/checkbox-group/checkbox-group.mjs +43 -0
  125. package/dist/components/form/checkbox-group/index.d.mts +34 -0
  126. package/dist/components/form/checkbox-group/index.mjs +9 -0
  127. package/dist/components/form/file-field/file-field.d.mts +27 -0
  128. package/dist/components/form/file-field/file-field.mjs +129 -0
  129. package/dist/components/form/file-field/index.d.mts +2 -0
  130. package/dist/components/form/file-field/index.mjs +2 -0
  131. package/dist/components/form/form/form.d.mts +9 -0
  132. package/dist/components/form/form/form.mjs +11 -0
  133. package/dist/components/form/form/index.d.mts +2 -0
  134. package/dist/components/form/form/index.mjs +2 -0
  135. package/dist/components/form/form-control/form-control.d.mts +23 -0
  136. package/dist/components/form/form-control/form-control.mjs +61 -0
  137. package/dist/components/form/form-control/index.d.mts +2 -0
  138. package/dist/components/form/form-control/index.mjs +2 -0
  139. package/dist/components/form/number-field/cast.d.mts +4 -0
  140. package/dist/components/form/number-field/cast.mjs +32 -0
  141. package/dist/components/form/number-field/index.d.mts +2 -0
  142. package/dist/components/form/number-field/index.mjs +2 -0
  143. package/dist/components/form/number-field/number-field.d.mts +25 -0
  144. package/dist/components/form/number-field/number-field.mjs +115 -0
  145. package/dist/components/form/password-input/index.d.mts +2 -0
  146. package/dist/components/form/password-input/index.mjs +2 -0
  147. package/dist/components/form/password-input/password-input.d.mts +11 -0
  148. package/dist/components/form/password-input/password-input.mjs +36 -0
  149. package/dist/components/form/radio/index.d.mts +2 -0
  150. package/dist/components/form/radio/index.mjs +2 -0
  151. package/dist/components/form/radio/radio.d.mts +24 -0
  152. package/dist/components/form/radio/radio.mjs +51 -0
  153. package/dist/components/form/radio-card/index.d.mts +2 -0
  154. package/dist/components/form/radio-card/index.mjs +2 -0
  155. package/dist/components/form/radio-card/radio-card.d.mts +29 -0
  156. package/dist/components/form/radio-card/radio-card.mjs +74 -0
  157. package/dist/components/form/select/index.d.mts +2 -0
  158. package/dist/components/form/select/index.mjs +2 -0
  159. package/dist/components/form/select/select.d.mts +11 -0
  160. package/dist/components/form/select/select.mjs +33 -0
  161. package/dist/components/form/slider/index.d.mts +2 -0
  162. package/dist/components/form/slider/index.mjs +2 -0
  163. package/dist/components/form/slider/slider.d.mts +23 -0
  164. package/dist/components/form/slider/slider.mjs +50 -0
  165. package/dist/components/form/switch/index.d.mts +2 -0
  166. package/dist/components/form/switch/index.mjs +2 -0
  167. package/dist/components/form/switch/switch.d.mts +21 -0
  168. package/dist/components/form/switch/switch.mjs +50 -0
  169. package/dist/components/form/text-field/index.d.mts +2 -0
  170. package/dist/components/form/text-field/index.mjs +2 -0
  171. package/dist/components/form/text-field/text-field.d.mts +11 -0
  172. package/dist/components/form/text-field/text-field.mjs +19 -0
  173. package/dist/components/form/textarea/index.d.mts +2 -0
  174. package/dist/components/form/textarea/index.mjs +2 -0
  175. package/dist/components/form/textarea/textarea.d.mts +11 -0
  176. package/dist/components/form/textarea/textarea.mjs +38 -0
  177. package/dist/components/icons/base.d.mts +15 -0
  178. package/dist/components/icons/base.mjs +18 -0
  179. package/dist/components/icons/browsers.d.mts +9 -0
  180. package/dist/components/icons/browsers.mjs +891 -0
  181. package/dist/components/icons/color-scale.d.mts +6 -0
  182. package/dist/components/icons/color-scale.mjs +44 -0
  183. package/dist/components/icons/github-mark.d.mts +6 -0
  184. package/dist/components/icons/github-mark.mjs +19 -0
  185. package/dist/components/icons/index.d.mts +10 -0
  186. package/dist/components/icons/index.mjs +9 -0
  187. package/dist/components/icons/logo.d.mts +7 -0
  188. package/dist/components/icons/logo.mjs +29 -0
  189. package/dist/components/icons/lucide-deep.d.mts +9 -0
  190. package/dist/components/icons/lucide-imports.d.mts +65 -0
  191. package/dist/components/icons/lucide-imports.mjs +65 -0
  192. package/dist/components/icons/lucide.d.mts +69 -0
  193. package/dist/components/icons/lucide.mjs +256 -0
  194. package/dist/components/icons/qiita.d.mts +6 -0
  195. package/dist/components/icons/qiita.mjs +28 -0
  196. package/dist/components/icons/twitter.d.mts +6 -0
  197. package/dist/components/icons/twitter.mjs +20 -0
  198. package/dist/components/icons/vertical-writing.d.mts +6 -0
  199. package/dist/components/icons/vertical-writing.mjs +26 -0
  200. package/dist/components/index.d.mts +106 -0
  201. package/dist/components/index.mjs +57 -0
  202. package/dist/components/layout/_shared/gap.d.mts +11 -0
  203. package/dist/components/layout/_shared/gap.mjs +10 -0
  204. package/dist/components/layout/_shared/padding.d.mts +11 -0
  205. package/dist/components/layout/_shared/padding.mjs +10 -0
  206. package/dist/components/layout/grid/grid.d.mts +16 -0
  207. package/dist/components/layout/grid/grid.mjs +35 -0
  208. package/dist/components/layout/grid/index.d.mts +2 -0
  209. package/dist/components/layout/grid/index.mjs +2 -0
  210. package/dist/components/layout/scroll-linked/index.d.mts +2 -0
  211. package/dist/components/layout/scroll-linked/index.mjs +2 -0
  212. package/dist/components/layout/scroll-linked/scroll-linked.d.mts +14 -0
  213. package/dist/components/layout/scroll-linked/scroll-linked.mjs +59 -0
  214. package/dist/components/layout/separator/index.d.mts +2 -0
  215. package/dist/components/layout/separator/index.mjs +2 -0
  216. package/dist/components/layout/separator/separator.d.mts +9 -0
  217. package/dist/components/layout/separator/separator.mjs +14 -0
  218. package/dist/components/layout/stack/index.d.mts +2 -0
  219. package/dist/components/layout/stack/index.mjs +2 -0
  220. package/dist/components/layout/stack/stack.d.mts +15 -0
  221. package/dist/components/layout/stack/stack.mjs +24 -0
  222. package/dist/components/navigation/anchor/anchor.d.mts +20 -0
  223. package/dist/components/navigation/anchor/anchor.mjs +28 -0
  224. package/dist/components/navigation/anchor/index.d.mts +2 -0
  225. package/dist/components/navigation/anchor/index.mjs +2 -0
  226. package/dist/components/navigation/breadcrumb/breadcrumb.d.mts +19 -0
  227. package/dist/components/navigation/breadcrumb/breadcrumb.mjs +43 -0
  228. package/dist/components/navigation/breadcrumb/index.d.mts +14 -0
  229. package/dist/components/navigation/breadcrumb/index.mjs +10 -0
  230. package/dist/components/navigation/pagination/index.d.mts +2 -0
  231. package/dist/components/navigation/pagination/index.mjs +2 -0
  232. package/dist/components/navigation/pagination/pagination.d.mts +15 -0
  233. package/dist/components/navigation/pagination/pagination.mjs +74 -0
  234. package/dist/components/navigation/tabs/index.d.mts +2 -0
  235. package/dist/components/navigation/tabs/index.mjs +2 -0
  236. package/dist/components/navigation/tabs/tabs.d.mts +21 -0
  237. package/dist/components/navigation/tabs/tabs.mjs +130 -0
  238. package/dist/components/overlays/_internal/index.d.mts +4 -0
  239. package/dist/components/overlays/_internal/index.mjs +4 -0
  240. package/dist/components/overlays/_internal/modal-dialog-context.d.mts +14 -0
  241. package/dist/components/overlays/_internal/modal-dialog-context.mjs +13 -0
  242. package/dist/components/overlays/_internal/use-can-hover.d.mts +9 -0
  243. package/dist/components/overlays/_internal/use-can-hover.mjs +20 -0
  244. package/dist/components/overlays/_internal/use-hover-intent.d.mts +25 -0
  245. package/dist/components/overlays/_internal/use-hover-intent.mjs +56 -0
  246. package/dist/components/overlays/_internal/use-list-navigation.d.mts +36 -0
  247. package/dist/components/overlays/_internal/use-list-navigation.mjs +98 -0
  248. package/dist/components/overlays/dialog/dialog.d.mts +19 -0
  249. package/dist/components/overlays/dialog/dialog.mjs +87 -0
  250. package/dist/components/overlays/dialog/index.d.mts +2 -0
  251. package/dist/components/overlays/dialog/index.mjs +2 -0
  252. package/dist/components/overlays/drawer/drawer.d.mts +12 -0
  253. package/dist/components/overlays/drawer/drawer.mjs +60 -0
  254. package/dist/components/overlays/drawer/index.d.mts +2 -0
  255. package/dist/components/overlays/drawer/index.mjs +2 -0
  256. package/dist/components/overlays/dropdown-menu/dropdown-menu.d.mts +34 -0
  257. package/dist/components/overlays/dropdown-menu/dropdown-menu.mjs +85 -0
  258. package/dist/components/overlays/dropdown-menu/hooks.d.mts +24 -0
  259. package/dist/components/overlays/dropdown-menu/hooks.mjs +26 -0
  260. package/dist/components/overlays/dropdown-menu/index.d.mts +2 -0
  261. package/dist/components/overlays/dropdown-menu/index.mjs +2 -0
  262. package/dist/components/overlays/dropdown-menu/shared.d.mts +7 -0
  263. package/dist/components/overlays/dropdown-menu/shared.mjs +8 -0
  264. package/dist/components/overlays/dropdown-menu/sub-menu.d.mts +10 -0
  265. package/dist/components/overlays/dropdown-menu/sub-menu.mjs +143 -0
  266. package/dist/components/overlays/dropdown-menu/use-safe-triangle.d.mts +18 -0
  267. package/dist/components/overlays/dropdown-menu/use-safe-triangle.mjs +57 -0
  268. package/dist/components/overlays/list-box/hooks.d.mts +35 -0
  269. package/dist/components/overlays/list-box/hooks.mjs +43 -0
  270. package/dist/components/overlays/list-box/index.d.mts +2 -0
  271. package/dist/components/overlays/list-box/index.mjs +2 -0
  272. package/dist/components/overlays/list-box/list-box.d.mts +28 -0
  273. package/dist/components/overlays/list-box/list-box.mjs +150 -0
  274. package/dist/components/overlays/modal/index.d.mts +2 -0
  275. package/dist/components/overlays/modal/index.mjs +2 -0
  276. package/dist/components/overlays/modal/modal.d.mts +15 -0
  277. package/dist/components/overlays/modal/modal.mjs +72 -0
  278. package/dist/components/overlays/popover/anchor-positioning.d.mts +26 -0
  279. package/dist/components/overlays/popover/anchor-positioning.mjs +49 -0
  280. package/dist/components/overlays/popover/escape-stack.d.mts +7 -0
  281. package/dist/components/overlays/popover/escape-stack.mjs +34 -0
  282. package/dist/components/overlays/popover/hooks.d.mts +53 -0
  283. package/dist/components/overlays/popover/hooks.mjs +141 -0
  284. package/dist/components/overlays/popover/index.d.mts +3 -0
  285. package/dist/components/overlays/popover/index.mjs +3 -0
  286. package/dist/components/overlays/popover/popover.d.mts +25 -0
  287. package/dist/components/overlays/popover/popover.mjs +90 -0
  288. package/dist/components/overlays/tooltip/bridge.d.mts +5 -0
  289. package/dist/components/overlays/tooltip/bridge.mjs +29 -0
  290. package/dist/components/overlays/tooltip/index.d.mts +2 -0
  291. package/dist/components/overlays/tooltip/index.mjs +2 -0
  292. package/dist/components/overlays/tooltip/tooltip.d.mts +34 -0
  293. package/dist/components/overlays/tooltip/tooltip.mjs +87 -0
  294. package/dist/components/providers/index.d.mts +4 -0
  295. package/dist/components/providers/index.mjs +3 -0
  296. package/dist/components/providers/portal-root.d.mts +8 -0
  297. package/dist/components/providers/portal-root.mjs +12 -0
  298. package/dist/components/providers/ui-provider.d.mts +8 -0
  299. package/dist/components/providers/ui-provider.mjs +11 -0
  300. package/dist/helpers/chain.d.mts +5 -0
  301. package/dist/helpers/chain.mjs +29 -0
  302. package/dist/helpers/cn.d.mts +5 -0
  303. package/dist/helpers/cn.mjs +27 -0
  304. package/dist/helpers/create-safe-context.d.mts +6 -0
  305. package/dist/helpers/create-safe-context.mjs +30 -0
  306. package/dist/helpers/index.d.mts +6 -0
  307. package/dist/helpers/index.mjs +6 -0
  308. package/dist/helpers/merge-props.d.mts +6 -0
  309. package/dist/helpers/merge-props.mjs +56 -0
  310. package/dist/helpers/merge-refs.d.mts +5 -0
  311. package/dist/helpers/merge-refs.mjs +55 -0
  312. package/dist/hooks/breakpoint/index.d.mts +5 -0
  313. package/dist/hooks/breakpoint/index.mjs +24 -0
  314. package/dist/hooks/click-away/index.d.mts +5 -0
  315. package/dist/hooks/click-away/index.mjs +24 -0
  316. package/dist/hooks/client/index.d.mts +4 -0
  317. package/dist/hooks/client/index.mjs +6 -0
  318. package/dist/hooks/clipboard/index.d.mts +7 -0
  319. package/dist/hooks/clipboard/index.mjs +15 -0
  320. package/dist/hooks/controllable-state/index.d.mts +9 -0
  321. package/dist/hooks/controllable-state/index.mjs +21 -0
  322. package/dist/hooks/debounced-transition/index.d.mts +5 -0
  323. package/dist/hooks/debounced-transition/index.mjs +49 -0
  324. package/dist/hooks/deferred-debounce/index.d.mts +4 -0
  325. package/dist/hooks/deferred-debounce/index.mjs +9 -0
  326. package/dist/hooks/disclosure/index.d.mts +10 -0
  327. package/dist/hooks/disclosure/index.mjs +20 -0
  328. package/dist/hooks/focus-trap/index.d.mts +18 -0
  329. package/dist/hooks/focus-trap/index.mjs +51 -0
  330. package/dist/hooks/hash/index.d.mts +4 -0
  331. package/dist/hooks/hash/index.mjs +25 -0
  332. package/dist/hooks/hover/index.d.mts +12 -0
  333. package/dist/hooks/hover/index.mjs +19 -0
  334. package/dist/hooks/index.d.mts +25 -0
  335. package/dist/hooks/index.mjs +24 -0
  336. package/dist/hooks/intersection-observer/index.d.mts +3 -0
  337. package/dist/hooks/intersection-observer/index.mjs +3 -0
  338. package/dist/hooks/intersection-observer/use-in-view.d.mts +11 -0
  339. package/dist/hooks/intersection-observer/use-in-view.mjs +18 -0
  340. package/dist/hooks/intersection-observer/use-intersection-observer.d.mts +11 -0
  341. package/dist/hooks/intersection-observer/use-intersection-observer.mjs +33 -0
  342. package/dist/hooks/interval/index.d.mts +4 -0
  343. package/dist/hooks/interval/index.mjs +19 -0
  344. package/dist/hooks/local-storage/index.d.mts +4 -0
  345. package/dist/hooks/local-storage/index.mjs +46 -0
  346. package/dist/hooks/resize/index.d.mts +8 -0
  347. package/dist/hooks/resize/index.mjs +24 -0
  348. package/dist/hooks/scroll-direction/index.d.mts +13 -0
  349. package/dist/hooks/scroll-direction/index.mjs +67 -0
  350. package/dist/hooks/scroll-lock/index.d.mts +9 -0
  351. package/dist/hooks/scroll-lock/index.mjs +59 -0
  352. package/dist/hooks/session-storage/index.d.mts +4 -0
  353. package/dist/hooks/session-storage/index.mjs +46 -0
  354. package/dist/hooks/step/index.d.mts +15 -0
  355. package/dist/hooks/step/index.mjs +39 -0
  356. package/dist/hooks/timeout/index.d.mts +4 -0
  357. package/dist/hooks/timeout/index.mjs +19 -0
  358. package/dist/hooks/window-resize/index.d.mts +11 -0
  359. package/dist/hooks/window-resize/index.mjs +21 -0
  360. package/dist/hooks/window-size/index.d.mts +8 -0
  361. package/dist/hooks/window-size/index.mjs +31 -0
  362. package/dist/hooks/writing-mode/index.d.mts +6 -0
  363. package/dist/hooks/writing-mode/index.mjs +24 -0
  364. package/dist/i18n/context.d.mts +9 -0
  365. package/dist/i18n/context.mjs +19 -0
  366. package/dist/i18n/en.d.mts +5 -0
  367. package/dist/i18n/en.mjs +64 -0
  368. package/dist/i18n/index.d.mts +5 -0
  369. package/dist/i18n/index.mjs +4 -0
  370. package/dist/i18n/ja.d.mts +5 -0
  371. package/dist/i18n/ja.mjs +64 -0
  372. package/dist/i18n/messages.d.mts +84 -0
  373. package/dist/i18n/messages.mjs +1 -0
  374. package/dist/index.d.mts +94 -0
  375. package/dist/index.mjs +85 -0
  376. package/dist/integrations/_shared/openui-defs.d.mts +18 -0
  377. package/dist/integrations/_shared/openui-defs.mjs +162 -0
  378. package/dist/integrations/_shared/renderers.d.mts +71 -0
  379. package/dist/integrations/_shared/renderers.mjs +679 -0
  380. package/dist/integrations/_shared/schemas.d.mts +718 -0
  381. package/dist/integrations/_shared/schemas.mjs +545 -0
  382. package/dist/integrations/ai-sdk/index.d.mts +3 -0
  383. package/dist/integrations/ai-sdk/index.mjs +2 -0
  384. package/dist/integrations/ai-sdk/map-parts.d.mts +28 -0
  385. package/dist/integrations/ai-sdk/map-parts.mjs +32 -0
  386. package/dist/integrations/json-render/catalog.d.mts +838 -0
  387. package/dist/integrations/json-render/catalog.mjs +311 -0
  388. package/dist/integrations/json-render/registry.d.mts +29 -0
  389. package/dist/integrations/json-render/registry.mjs +159 -0
  390. package/dist/integrations/openui/form-views.d.mts +21 -0
  391. package/dist/integrations/openui/form-views.mjs +66 -0
  392. package/dist/integrations/openui/library.d.mts +151 -0
  393. package/dist/integrations/openui/library.mjs +69 -0
  394. package/dist/integrations/openui/prompt.d.mts +5 -0
  395. package/dist/integrations/openui/prompt.mjs +19 -0
  396. package/dist/internal/clamp.d.mts +4 -0
  397. package/dist/internal/clamp.mjs +15 -0
  398. package/dist/internal/to-precision.d.mts +4 -0
  399. package/dist/internal/to-precision.mjs +15 -0
  400. package/dist/styles/base.css +315 -0
  401. package/dist/styles/index.css +2677 -0
  402. package/dist/styles/tailwind.css +22 -0
  403. package/dist/styles/tokens.css +380 -0
  404. package/dist/styles/tokens.d.mts +2 -0
  405. package/dist/styles/tokens.generated.d.mts +840 -0
  406. package/dist/styles/tokens.generated.mjs +813 -0
  407. package/dist/styles/tokens.mjs +2 -0
  408. package/dist/styles/utilities.css +62 -0
  409. package/dist/types/index.d.mts +2 -0
  410. package/dist/types/index.mjs +1 -0
  411. package/dist/types/variables.d.mts +23 -0
  412. package/dist/types/variables.mjs +1 -0
  413. package/docs/GUIDE.md +324 -0
  414. package/docs/llms.txt +25 -0
  415. package/docs/props.generated.json +3519 -0
  416. package/docs/references/ai-chat.md +354 -0
  417. package/docs/references/color.md +121 -0
  418. package/docs/references/components.md +1466 -0
  419. package/docs/references/generative-ui.md +112 -0
  420. package/docs/references/helpers.md +120 -0
  421. package/docs/references/hooks.md +314 -0
  422. package/docs/references/interaction-design.md +95 -0
  423. package/docs/references/spatial-design.md +137 -0
  424. package/docs/references/typography.md +110 -0
  425. package/package.json +197 -0
@@ -0,0 +1,2 @@
1
+ import { Skeleton } from "./skeleton.mjs";
2
+ export { Skeleton };
@@ -0,0 +1,2 @@
1
+ import { Skeleton } from "./skeleton.mjs";
2
+ export { Skeleton };
@@ -0,0 +1,10 @@
1
+ import { FC, HTMLAttributes } from "react";
2
+ //#region src/components/feedback/skeleton/skeleton.d.ts
3
+ type Props = {
4
+ animate?: boolean;
5
+ shape?: 'rect' | 'circle';
6
+ size?: 'sm' | 'md' | 'lg';
7
+ } & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className' | 'style'>;
8
+ declare const Skeleton: FC<Props>;
9
+ //#endregion
10
+ export { Skeleton };
@@ -0,0 +1,10 @@
1
+ import { cn } from "../../../helpers/cn.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/components/feedback/skeleton/skeleton.tsx
4
+ const Skeleton = ({ animate = true, shape = "rect", size = "md", ...rest }) => /* @__PURE__ */ jsx("div", {
5
+ ...rest,
6
+ "aria-hidden": true,
7
+ className: cn("bg-bg-mute", animate && "animate-pulse", shape === "rect" && "rounded-lg", shape === "rect" && size === "sm" && "h-3 w-24", shape === "rect" && size === "md" && "h-4 w-40", shape === "rect" && size === "lg" && "h-5 w-56", shape === "circle" && "rounded-full", shape === "circle" && size === "sm" && "size-8", shape === "circle" && size === "md" && "size-12", shape === "circle" && size === "lg" && "size-16")
8
+ });
9
+ //#endregion
10
+ export { Skeleton };
@@ -0,0 +1,2 @@
1
+ import { Spinner } from "./spinner.mjs";
2
+ export { Spinner };
@@ -0,0 +1,2 @@
1
+ import { Spinner } from "./spinner.mjs";
2
+ export { Spinner };
@@ -0,0 +1,9 @@
1
+ import { FC, OutputHTMLAttributes } from "react";
2
+ //#region src/components/feedback/spinner/spinner.d.ts
3
+ type Props = {
4
+ label?: string;
5
+ size?: 'sm' | 'md' | 'lg';
6
+ } & Omit<OutputHTMLAttributes<HTMLOutputElement>, 'children' | 'aria-label' | 'className' | 'style'>;
7
+ declare const Spinner: FC<Props>;
8
+ //#endregion
9
+ export { Spinner };
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { cn } from "../../../helpers/cn.mjs";
3
+ import { useMessages } from "../../../i18n/context.mjs";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/components/feedback/spinner/spinner.tsx
6
+ const Spinner = ({ label, size = "md", ...rest }) => {
7
+ const messages = useMessages();
8
+ const resolvedLabel = label ?? messages.loading;
9
+ return /* @__PURE__ */ jsxs("output", {
10
+ ...rest,
11
+ "aria-label": resolvedLabel,
12
+ "aria-live": "polite",
13
+ className: "inline-flex items-center justify-center",
14
+ children: [/* @__PURE__ */ jsx("span", {
15
+ "aria-hidden": true,
16
+ className: cn("inline-block animate-spin rounded-full border-4 border-border-base border-t-primary-border", size === "sm" && "size-4", size === "md" && "size-6", size === "lg" && "size-8")
17
+ }), /* @__PURE__ */ jsx("span", {
18
+ className: "sr-only",
19
+ children: resolvedLabel
20
+ })]
21
+ });
22
+ };
23
+ //#endregion
24
+ export { Spinner };
@@ -0,0 +1,34 @@
1
+ import { Status } from "../../../types/variables.mjs";
2
+ import { AlertAction } from "../alert/alert.mjs";
3
+ import "../alert/index.mjs";
4
+ //#region src/components/feedback/toast/context.d.ts
5
+ type ToastAction = AlertAction;
6
+ type ToastOptions = {
7
+ /**
8
+ * 自動で閉じるまでのミリ秒。`Number.POSITIVE_INFINITY` で自動クローズなし
9
+ * (閉じるボタンでのみ閉じる)。既定は 5000ms。
10
+ */
11
+ duration?: number;
12
+ action?: ToastAction;
13
+ };
14
+ type ToastType = {
15
+ id: string;
16
+ tone: Status;
17
+ message: string;
18
+ duration: number;
19
+ action?: ToastAction;
20
+ /**
21
+ * 開いた時点のフォーカス位置。閉じたときの返還先候補として使う。
22
+ * 参照を握り続けて DOM のリークを起こさないよう WeakRef で持つ。
23
+ */
24
+ opener?: WeakRef<HTMLElement>;
25
+ };
26
+ type ToastStore = {
27
+ open: (tone: Status, message: string, options?: ToastOptions) => void;
28
+ close: (id: string) => void;
29
+ closeAll: () => void;
30
+ };
31
+ declare const ToastStoreContext: import("react").Context<ToastStore | null>, useToastStore: () => ToastStore;
32
+ declare const useToast: () => ToastStore;
33
+ //#endregion
34
+ export { ToastAction, ToastOptions, ToastStore, ToastStoreContext, ToastType, useToast, useToastStore };
@@ -0,0 +1,7 @@
1
+ "use client";
2
+ import { createSafeContext } from "../../../helpers/create-safe-context.mjs";
3
+ //#region src/components/feedback/toast/context.ts
4
+ const [ToastStoreContext, useToastStore] = createSafeContext("useToast must be used within a ToastProvider");
5
+ const useToast = () => useToastStore();
6
+ //#endregion
7
+ export { ToastStoreContext, useToast, useToastStore };
@@ -0,0 +1,3 @@
1
+ import { ToastAction, ToastOptions, useToast } from "./context.mjs";
2
+ import { ToastProvider } from "./provider.mjs";
3
+ export { type ToastAction, type ToastOptions, ToastProvider, useToast };
@@ -0,0 +1,3 @@
1
+ import { useToast } from "./context.mjs";
2
+ import { ToastProvider } from "./provider.mjs";
3
+ export { ToastProvider, useToast };
@@ -0,0 +1,8 @@
1
+ import { FC, PropsWithChildren, RefObject } from "react";
2
+ //#region src/components/feedback/toast/provider.d.ts
3
+ declare const ToastProvider: FC<PropsWithChildren<{
4
+ portalRef?: RefObject<HTMLElement | null>;
5
+ position?: 'fixed' | 'absolute';
6
+ }>>;
7
+ //#endregion
8
+ export { ToastProvider };
@@ -0,0 +1,171 @@
1
+ "use client";
2
+ import { cn } from "../../../helpers/cn.mjs";
3
+ import { useMessages } from "../../../i18n/context.mjs";
4
+ import { ToastStoreContext } from "./context.mjs";
5
+ import { Toast } from "./toast.mjs";
6
+ import { useEffect, useMemo, useRef, useState } from "react";
7
+ import { createPortal } from "react-dom";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/components/feedback/toast/provider.tsx
10
+ const MAX_TOAST_COUNT = 5;
11
+ const DEFAULT_DURATION_MS = 5e3;
12
+ const EXIT_MS = 200;
13
+ const FOCUSABLE_SELECTOR = "a[href], button:not(:disabled), [tabindex]:not([tabindex=\"-1\"])";
14
+ const enforceLimit = (state) => {
15
+ if (state.isHovered || state.isFocused) return state;
16
+ const active = state.toasts.filter((toast) => !state.closingIds.includes(toast.id));
17
+ const overflow = active.length - MAX_TOAST_COUNT;
18
+ if (overflow <= 0) return state;
19
+ return {
20
+ ...state,
21
+ closingIds: [...state.closingIds, ...active.slice(0, overflow).map((toast) => toast.id)]
22
+ };
23
+ };
24
+ const ToastProvider = ({ children, portalRef = null, position = "fixed" }) => {
25
+ const messages = useMessages();
26
+ const [state, setState] = useState({
27
+ toasts: [],
28
+ closingIds: [],
29
+ isHovered: false,
30
+ isFocused: false
31
+ });
32
+ const [defaultContainer, setDefaultContainer] = useState(null);
33
+ const viewportRef = useRef(null);
34
+ const focusedToastIdRef = useRef(null);
35
+ useEffect(() => {
36
+ setDefaultContainer(document.body);
37
+ }, []);
38
+ const exitTimersRef = useRef(/* @__PURE__ */ new Map());
39
+ useEffect(() => {
40
+ for (const id of state.closingIds) {
41
+ if (exitTimersRef.current.has(id)) continue;
42
+ const timerId = window.setTimeout(() => {
43
+ exitTimersRef.current.delete(id);
44
+ setState((prev) => ({
45
+ ...prev,
46
+ toasts: prev.toasts.filter((toast) => toast.id !== id),
47
+ closingIds: prev.closingIds.filter((closingId) => closingId !== id)
48
+ }));
49
+ }, EXIT_MS);
50
+ exitTimersRef.current.set(id, timerId);
51
+ }
52
+ }, [state.closingIds]);
53
+ useEffect(() => {
54
+ const timers = exitTimersRef.current;
55
+ return () => {
56
+ for (const timerId of timers.values()) window.clearTimeout(timerId);
57
+ timers.clear();
58
+ };
59
+ }, []);
60
+ useEffect(() => {
61
+ const closedId = focusedToastIdRef.current;
62
+ const viewport = viewportRef.current;
63
+ if (closedId === null || viewport === null || !state.closingIds.includes(closedId)) return;
64
+ focusedToastIdRef.current = null;
65
+ const focusIfPossible = (element) => {
66
+ if (element === null || element === void 0 || !element.isConnected) return false;
67
+ element.focus();
68
+ return viewport.ownerDocument.activeElement === element;
69
+ };
70
+ for (const item of viewport.querySelectorAll("[data-toast-id]:not([data-closing])")) if (focusIfPossible(item.querySelector(FOCUSABLE_SELECTOR))) return;
71
+ const opener = state.toasts.find((toast) => toast.id === closedId)?.opener?.deref();
72
+ if (focusIfPossible(opener)) return;
73
+ viewport.focus();
74
+ }, [state.closingIds, state.toasts]);
75
+ const store = useMemo(() => ({
76
+ open: (tone, message, options) => {
77
+ const id = crypto.randomUUID();
78
+ const { activeElement } = document;
79
+ const opener = activeElement instanceof HTMLElement && activeElement !== document.body ? new WeakRef(activeElement) : void 0;
80
+ setState((prev) => enforceLimit({
81
+ ...prev,
82
+ toasts: [...prev.toasts, {
83
+ id,
84
+ tone,
85
+ message,
86
+ duration: options?.duration ?? DEFAULT_DURATION_MS,
87
+ action: options?.action,
88
+ opener
89
+ }]
90
+ }));
91
+ },
92
+ close: (id) => {
93
+ setState((prev) => prev.closingIds.includes(id) ? prev : {
94
+ ...prev,
95
+ closingIds: [...prev.closingIds, id]
96
+ });
97
+ },
98
+ closeAll: () => {
99
+ setState((prev) => ({
100
+ ...prev,
101
+ closingIds: prev.toasts.map((toast) => toast.id)
102
+ }));
103
+ }
104
+ }), []);
105
+ const setHovered = (isHovered) => {
106
+ setState((prev) => prev.isHovered === isHovered ? prev : enforceLimit({
107
+ ...prev,
108
+ isHovered
109
+ }));
110
+ };
111
+ const setFocused = (isFocused) => {
112
+ setState((prev) => prev.isFocused === isFocused ? prev : enforceLimit({
113
+ ...prev,
114
+ isFocused
115
+ }));
116
+ };
117
+ const container = portalRef?.current ?? defaultContainer;
118
+ const isPaused = state.isHovered || state.isFocused;
119
+ return /* @__PURE__ */ jsxs(ToastStoreContext, {
120
+ value: store,
121
+ children: [children, container ? createPortal(/* @__PURE__ */ jsx("section", {
122
+ "aria-label": state.toasts.length > 0 ? messages.toastRegion : void 0,
123
+ className: cn("bottom-3 z-toast flex w-full flex-col items-center justify-center", position === "fixed" && "fixed", position === "absolute" && "absolute"),
124
+ onBlur: (event) => {
125
+ if (event.currentTarget.contains(event.relatedTarget)) return;
126
+ setFocused(false);
127
+ if (event.target.closest("[data-closing]") === null) focusedToastIdRef.current = null;
128
+ },
129
+ onFocus: (event) => {
130
+ const item = event.target.closest("[data-toast-id]");
131
+ focusedToastIdRef.current = item?.dataset.toastId ?? null;
132
+ setFocused(item !== null);
133
+ },
134
+ onPointerEnter: () => {
135
+ setHovered(true);
136
+ },
137
+ onPointerLeave: () => {
138
+ setHovered(false);
139
+ },
140
+ ref: viewportRef,
141
+ tabIndex: -1,
142
+ children: state.toasts.map((toast) => {
143
+ const isClosing = state.closingIds.includes(toast.id);
144
+ return /* @__PURE__ */ jsx("div", {
145
+ className: "ao-toast-item w-full justify-items-center",
146
+ "data-closing": isClosing || void 0,
147
+ "data-toast-id": toast.id,
148
+ inert: isClosing || void 0,
149
+ children: /* @__PURE__ */ jsx("div", {
150
+ className: "min-h-0",
151
+ children: /* @__PURE__ */ jsx("div", {
152
+ className: "ao-toast-enter shadow-lg",
153
+ children: /* @__PURE__ */ jsx(Toast, {
154
+ action: toast.action,
155
+ duration: toast.duration,
156
+ isPaused,
157
+ message: toast.message,
158
+ onClose: () => {
159
+ store.close(toast.id);
160
+ },
161
+ tone: toast.tone
162
+ })
163
+ })
164
+ })
165
+ }, toast.id);
166
+ })
167
+ }), container) : null]
168
+ });
169
+ };
170
+ //#endregion
171
+ export { ToastProvider };
@@ -0,0 +1,15 @@
1
+ import { Status } from "../../../types/variables.mjs";
2
+ import { ToastAction } from "./context.mjs";
3
+ import { FC } from "react";
4
+ //#region src/components/feedback/toast/toast.d.ts
5
+ type ToastProps = {
6
+ tone: Status;
7
+ message: string;
8
+ duration: number;
9
+ action?: ToastAction;
10
+ isPaused?: boolean;
11
+ onClose: () => void;
12
+ };
13
+ declare const Toast: FC<ToastProps>;
14
+ //#endregion
15
+ export { Toast };
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { Alert } from "../alert/alert.mjs";
3
+ import { useEffect, useRef } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/components/feedback/toast/toast.tsx
6
+ const Toast = ({ tone, message, duration, action, isPaused = false, onClose }) => {
7
+ const onCloseRef = useRef(onClose);
8
+ useEffect(() => {
9
+ onCloseRef.current = onClose;
10
+ });
11
+ const remainingRef = useRef(duration);
12
+ useEffect(() => {
13
+ if (isPaused || !Number.isFinite(remainingRef.current)) return;
14
+ const startedAt = performance.now();
15
+ const timeoutId = window.setTimeout(() => {
16
+ onCloseRef.current();
17
+ }, remainingRef.current);
18
+ return () => {
19
+ window.clearTimeout(timeoutId);
20
+ remainingRef.current -= performance.now() - startedAt;
21
+ };
22
+ }, [isPaused]);
23
+ return /* @__PURE__ */ jsx(Alert, {
24
+ action,
25
+ "aria-atomic": true,
26
+ message,
27
+ onClose,
28
+ tone
29
+ });
30
+ };
31
+ //#endregion
32
+ export { Toast };
@@ -0,0 +1,23 @@
1
+ import { Option } from "../../../types/variables.mjs";
2
+ import { FC, InputHTMLAttributes, Ref } from "react";
3
+ //#region src/components/form/autocomplete/autocomplete.d.ts
4
+ type BaseProps = {
5
+ id: string;
6
+ invalid?: boolean;
7
+ options: readonly Option[];
8
+ ref?: Ref<HTMLInputElement>;
9
+ } & Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'role' | 'className' | 'style' | 'value' | 'onChange' | 'defaultValue' | 'children' | 'id' | 'autoComplete' | 'aria-autocomplete' | 'aria-controls' | 'aria-expanded' | 'aria-activedescendant'>;
10
+ type ControlledProps = {
11
+ value: string[];
12
+ onChange: (value: string[]) => void;
13
+ defaultValue?: never;
14
+ };
15
+ type UncontrolledProps = {
16
+ defaultValue?: string[];
17
+ value?: never;
18
+ onChange?: (value: string[]) => void;
19
+ };
20
+ type Props = BaseProps & (ControlledProps | UncontrolledProps);
21
+ declare const Autocomplete: FC<Props>;
22
+ //#endregion
23
+ export { Autocomplete };
@@ -0,0 +1,225 @@
1
+ "use client";
2
+ import { FOCUS_RING_WITHIN } from "../../_internal/focus-ring.mjs";
3
+ import { cn } from "../../../helpers/cn.mjs";
4
+ import { useMessages } from "../../../i18n/context.mjs";
5
+ import { chain } from "../../../helpers/chain.mjs";
6
+ import { useClickAway } from "../../../hooks/click-away/index.mjs";
7
+ import { useControllableState } from "../../../hooks/controllable-state/index.mjs";
8
+ import { useDeferredDebounce } from "../../../hooks/deferred-debounce/index.mjs";
9
+ import { useDisclosure } from "../../../hooks/disclosure/index.mjs";
10
+ import { useWritingMode } from "../../../hooks/writing-mode/index.mjs";
11
+ import { IconButton } from "../../buttons/icon-button/icon-button.mjs";
12
+ import { CloseIcon } from "../../icons/lucide.mjs";
13
+ import { useCallback, useRef, useState } from "react";
14
+ import { useFormStatus } from "react-dom";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ //#region src/components/form/autocomplete/autocomplete.tsx
17
+ const Autocomplete = ({ id, name, invalid = false, disabled = false, required = false, options, value, defaultValue, onChange, placeholder, onBlur, onClick, onKeyDown, ref, ...rest }) => {
18
+ const messages = useMessages();
19
+ const [currentValue, handleChange] = useControllableState({
20
+ value,
21
+ defaultValue: defaultValue ?? [],
22
+ onChange
23
+ });
24
+ const containerRef = useRef(null);
25
+ const { isOpen, open, close } = useDisclosure();
26
+ const [text, setText] = useState("");
27
+ const [selectIndex, setSelectIndex] = useState();
28
+ const writingMode = useWritingMode(containerRef);
29
+ const anchorName = `--ao-ac-${id.replaceAll(/[^a-zA-Z0-9_-]/gu, "")}`;
30
+ const listboxStyle = {
31
+ position: "fixed",
32
+ inset: "auto",
33
+ margin: 0,
34
+ marginTop: "4px",
35
+ positionAnchor: anchorName,
36
+ positionArea: "bottom span-right",
37
+ positionTryFallbacks: "flip-block, flip-inline, flip-block flip-inline",
38
+ inlineSize: `anchor-size(${writingMode === "vertical" ? "height" : "width"})`
39
+ };
40
+ const [deferredText, isPending] = useDeferredDebounce(text);
41
+ const filteredOptions = options.filter((option) => option.label.includes(deferredText));
42
+ const activeIndex = selectIndex === void 0 || filteredOptions.length === 0 ? void 0 : Math.min(selectIndex, filteredOptions.length - 1);
43
+ const activeOption = activeIndex === void 0 ? void 0 : filteredOptions[activeIndex];
44
+ const { pending: formPending } = useFormStatus();
45
+ const disabledResolved = disabled || formPending;
46
+ const reset = useCallback(() => {
47
+ setText("");
48
+ close();
49
+ setSelectIndex(void 0);
50
+ }, [close]);
51
+ useClickAway(containerRef, reset, isOpen);
52
+ const scrollActiveIntoView = useCallback((node) => {
53
+ node?.scrollIntoView({ block: "nearest" });
54
+ }, []);
55
+ const setReferenceRef = useCallback((node) => {
56
+ containerRef.current = node;
57
+ if (node) node.style.setProperty("anchor-name", anchorName);
58
+ }, [anchorName]);
59
+ const handleBlur = (e) => {
60
+ if (e.relatedTarget?.id.startsWith(`${id}_option_`) === true) return;
61
+ close();
62
+ };
63
+ const handleClick = () => {
64
+ if (isOpen && text.length === 0) {
65
+ close();
66
+ return;
67
+ }
68
+ open();
69
+ setSelectIndex(void 0);
70
+ };
71
+ const handleKeyDown = (e) => {
72
+ if (e.key === "Backspace" && text.length === 0) {
73
+ reset();
74
+ handleChange(currentValue.slice(0, -1));
75
+ return;
76
+ }
77
+ if (e.key === "Escape") {
78
+ if (isOpen) {
79
+ e.preventDefault();
80
+ close();
81
+ setSelectIndex(void 0);
82
+ }
83
+ return;
84
+ }
85
+ if (e.key === "ArrowDown") {
86
+ open();
87
+ if (filteredOptions.length === 0) return;
88
+ setSelectIndex(activeIndex === void 0 ? 0 : Math.min(activeIndex + 1, filteredOptions.length - 1));
89
+ return;
90
+ }
91
+ if (e.key === "ArrowUp") {
92
+ open();
93
+ if (filteredOptions.length === 0) return;
94
+ setSelectIndex(activeIndex === void 0 ? 0 : Math.max(activeIndex - 1, 0));
95
+ return;
96
+ }
97
+ if (e.key === "Enter" && activeIndex !== void 0) {
98
+ if (isPending) {
99
+ e.preventDefault();
100
+ return;
101
+ }
102
+ const selected = filteredOptions[activeIndex];
103
+ if (!selected) return;
104
+ if (currentValue.includes(selected.value)) {
105
+ handleChange(currentValue.filter((v) => v !== selected.value));
106
+ reset();
107
+ return;
108
+ }
109
+ handleChange([...currentValue, selected.value]);
110
+ reset();
111
+ }
112
+ };
113
+ return /* @__PURE__ */ jsxs("div", {
114
+ className: cn("relative rounded-xl border border-border-base bg-bg-base inline-full", FOCUS_RING_WITHIN, "has-aria-invalid:border-border-error", "has-disabled:cursor-not-allowed has-disabled:border-border-mute has-disabled:bg-bg-mute hover:has-disabled:has-hover:bg-bg-mute"),
115
+ ref: setReferenceRef,
116
+ children: [
117
+ name !== void 0 && name !== "" ? currentValue.map((selectedValue) => /* @__PURE__ */ jsx("input", {
118
+ name,
119
+ type: "hidden",
120
+ value: selectedValue
121
+ }, selectedValue)) : null,
122
+ /* @__PURE__ */ jsxs("div", {
123
+ className: "flex min-h-12 items-center justify-between gap-2 px-3 py-2",
124
+ children: [/* @__PURE__ */ jsxs("div", {
125
+ className: "flex w-full min-w-0 flex-wrap gap-1",
126
+ children: [currentValue.map((selectedValue) => {
127
+ const label = options.find((option) => option.value === selectedValue)?.label;
128
+ return /* @__PURE__ */ jsxs("div", {
129
+ className: "bg-bg-mute inline-flex items-center gap-2 rounded-full px-3 py-1 text-sm font-medium",
130
+ tabIndex: -1,
131
+ children: [label, /* @__PURE__ */ jsx(IconButton, {
132
+ label: messages.autocompleteRemoveTag,
133
+ onClick: (e) => {
134
+ e.stopPropagation();
135
+ reset();
136
+ handleChange(currentValue.filter((v) => v !== selectedValue));
137
+ },
138
+ size: "sm",
139
+ children: /* @__PURE__ */ jsx(CloseIcon, { size: "sm" })
140
+ })]
141
+ }, selectedValue);
142
+ }), /* @__PURE__ */ jsx("input", {
143
+ ...rest,
144
+ "aria-activedescendant": isOpen && activeOption !== void 0 ? `${id}_option_${activeOption.value}` : void 0,
145
+ "aria-autocomplete": "list",
146
+ "aria-controls": isOpen ? `${id}_listbox` : void 0,
147
+ "aria-expanded": isOpen,
148
+ "aria-invalid": invalid,
149
+ "aria-required": required,
150
+ autoComplete: "off",
151
+ className: cn("grow bg-transparent focus-visible:outline-hidden", "disabled:cursor-not-allowed"),
152
+ disabled: disabledResolved,
153
+ id,
154
+ onBlur: chain(handleBlur, onBlur),
155
+ onChange: (e) => {
156
+ open();
157
+ setText(e.target.value);
158
+ setSelectIndex(void 0);
159
+ },
160
+ onClick: chain(handleClick, onClick),
161
+ onKeyDown: chain(handleKeyDown, onKeyDown),
162
+ placeholder: placeholder ?? messages.autocompletePlaceholder,
163
+ ref,
164
+ role: "combobox",
165
+ type: "text",
166
+ value: text
167
+ })]
168
+ }), currentValue.length > 0 && /* @__PURE__ */ jsx(IconButton, {
169
+ label: messages.autocompleteClear,
170
+ onClick: (e) => {
171
+ e.stopPropagation();
172
+ handleChange([]);
173
+ },
174
+ size: "sm",
175
+ children: /* @__PURE__ */ jsx(CloseIcon, { size: "sm" })
176
+ })]
177
+ }),
178
+ isOpen && /* @__PURE__ */ jsx("div", {
179
+ className: "bg-bg-raised border-border-subtle z-10 rounded-xl border shadow-md",
180
+ role: "presentation",
181
+ style: listboxStyle,
182
+ children: /* @__PURE__ */ jsxs("ul", {
183
+ "aria-busy": isPending || void 0,
184
+ "aria-multiselectable": "true",
185
+ className: cn("max-h-96 overflow-y-auto py-2 transition-opacity vertical:max-h-none vertical:max-w-96 vertical:overflow-x-auto vertical:overflow-y-visible", isPending && "opacity-60"),
186
+ id: `${id}_listbox`,
187
+ role: "listbox",
188
+ children: [filteredOptions.length === 0 && /* @__PURE__ */ jsx("li", {
189
+ className: "text-fg-mute px-3 py-2",
190
+ role: "presentation",
191
+ children: messages.autocompleteEmpty
192
+ }), filteredOptions.map((option, idx) => {
193
+ const selected = currentValue.includes(option.value);
194
+ return /* @__PURE__ */ jsx("li", {
195
+ "aria-selected": selected,
196
+ className: cn("cursor-pointer px-3 py-2 transition-colors", selected && "bg-primary-bg-subtle text-primary-fg", activeIndex === idx && !selected && "bg-bg-subtle", activeIndex === idx && selected && "bg-primary-bg-mute text-primary-fg"),
197
+ id: `${id}_option_${option.value}`,
198
+ ref: activeIndex === idx ? scrollActiveIntoView : void 0,
199
+ role: "option",
200
+ onClick: (e) => {
201
+ e.stopPropagation();
202
+ reset();
203
+ if (selected) {
204
+ handleChange(currentValue.filter((v) => v !== option.value));
205
+ return;
206
+ }
207
+ handleChange([...currentValue, option.value]);
208
+ },
209
+ onKeyDown: (e) => {
210
+ e.preventDefault();
211
+ },
212
+ onMouseEnter: () => {
213
+ setSelectIndex(idx);
214
+ },
215
+ tabIndex: -1,
216
+ children: option.label
217
+ }, option.value);
218
+ })]
219
+ })
220
+ })
221
+ ]
222
+ });
223
+ };
224
+ //#endregion
225
+ export { Autocomplete };
@@ -0,0 +1,2 @@
1
+ import { Autocomplete } from "./autocomplete.mjs";
2
+ export { Autocomplete };
@@ -0,0 +1,2 @@
1
+ import { Autocomplete } from "./autocomplete.mjs";
2
+ export { Autocomplete };
@@ -0,0 +1,21 @@
1
+ import { ChangeEvent, FC, InputHTMLAttributes, Ref } from "react";
2
+ //#region src/components/form/checkbox/checkbox.d.ts
3
+ type BaseProps = {
4
+ itemValue?: string;
5
+ label: string;
6
+ ref?: Ref<HTMLInputElement>;
7
+ } & Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'className' | 'style' | 'value' | 'onChange' | 'defaultChecked' | 'checked' | 'children'>;
8
+ type ControlledProps = {
9
+ checked: boolean;
10
+ onChange: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;
11
+ defaultChecked?: never;
12
+ };
13
+ type UncontrolledProps = {
14
+ defaultChecked?: boolean;
15
+ checked?: never;
16
+ onChange?: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;
17
+ };
18
+ type Props = BaseProps & (ControlledProps | UncontrolledProps);
19
+ declare const Checkbox: FC<Props>;
20
+ //#endregion
21
+ export { Checkbox };