@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,143 @@
1
+ "use client";
2
+ import { cn } from "../../../helpers/cn.mjs";
3
+ import { mergeRefs } from "../../../helpers/merge-refs.mjs";
4
+ import { useCanHover } from "../_internal/use-can-hover.mjs";
5
+ import { useHoverIntent } from "../_internal/use-hover-intent.mjs";
6
+ import { useListNavigation } from "../_internal/use-list-navigation.mjs";
7
+ import { useOpenContext, usePopoverContext } from "../popover/hooks.mjs";
8
+ import { Popover } from "../popover/popover.mjs";
9
+ import { ChevronIcon } from "../../icons/lucide.mjs";
10
+ import { MenuContextProvider, useMenuContext } from "./hooks.mjs";
11
+ import { cloneWithIndex, itemClass, panelClass } from "./shared.mjs";
12
+ import { useSafeTriangle } from "./use-safe-triangle.mjs";
13
+ import { useEffect, useRef, useState } from "react";
14
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
15
+ //#region src/components/overlays/dropdown-menu/sub-menu.tsx
16
+ const SUBMENU_CLOSE_DELAY = 150;
17
+ const safeTriangleClass = cn("after:absolute after:z-10", "after:top-(--safe-top) after:left-(--safe-left)", "after:h-(--safe-height) after:w-(--safe-width)", "after:[clip-path:var(--safe-clip)]");
18
+ const NAVIGATION_KEYS = /* @__PURE__ */ new Set([
19
+ "ArrowDown",
20
+ "ArrowUp",
21
+ "ArrowRight",
22
+ "Home",
23
+ "End"
24
+ ]);
25
+ const SubMenu = ({ label, children, index = 0 }) => {
26
+ const { isOpen: isParentOpen } = useOpenContext();
27
+ return /* @__PURE__ */ jsx(Popover.Root, {
28
+ placement: "right-start",
29
+ trapFocus: false,
30
+ role: "menu",
31
+ children: /* @__PURE__ */ jsx(SubMenuInner, {
32
+ index,
33
+ isParentOpen,
34
+ label,
35
+ children
36
+ })
37
+ });
38
+ };
39
+ const SubMenuInner = ({ label, index, isParentOpen, children }) => {
40
+ const parentMenu = useMenuContext();
41
+ const popover = usePopoverContext();
42
+ const canHover = useCanHover("(hover: hover) and (pointer: fine)");
43
+ const triggerRef = useRef(null);
44
+ const panelRef = useRef(null);
45
+ const intent = useHoverIntent({
46
+ onOpen: popover.onOpen,
47
+ onClose: popover.onClose,
48
+ closeDelay: SUBMENU_CLOSE_DELAY,
49
+ enabled: canHover
50
+ });
51
+ const [activeIndex, setActiveIndex] = useState(null);
52
+ const nav = useListNavigation({
53
+ open: popover.isOpen,
54
+ activeIndex,
55
+ setActiveIndex,
56
+ loop: true,
57
+ autoActivateOnOpen: false
58
+ });
59
+ useEffect(() => {
60
+ if (!isParentOpen) {
61
+ intent.cancel();
62
+ popover.onClose();
63
+ }
64
+ }, [
65
+ isParentOpen,
66
+ intent,
67
+ popover
68
+ ]);
69
+ const openedByKeyboardRef = useRef(false);
70
+ const wasOpenRef = useRef(false);
71
+ useEffect(() => {
72
+ const wasOpen = wasOpenRef.current;
73
+ wasOpenRef.current = popover.isOpen;
74
+ if (!wasOpen || popover.isOpen) return;
75
+ const byKeyboard = openedByKeyboardRef.current;
76
+ openedByKeyboardRef.current = false;
77
+ if (!byKeyboard) return;
78
+ const active = document.activeElement;
79
+ if (active === null || active === document.body || (panelRef.current?.contains(active) ?? false)) triggerRef.current?.focus();
80
+ }, [popover.isOpen]);
81
+ const openByKeyboard = () => {
82
+ openedByKeyboardRef.current = true;
83
+ popover.onOpen();
84
+ setActiveIndex(0);
85
+ };
86
+ const handleTriggerKeyDown = (event) => {
87
+ if (event.key === "Enter" || event.key === " " || event.key === "ArrowRight") {
88
+ event.preventDefault();
89
+ openByKeyboard();
90
+ }
91
+ };
92
+ const navContentProps = nav.getContentProps();
93
+ const handlePanelKeyDown = (event) => {
94
+ if (event.key === "ArrowLeft") {
95
+ event.preventDefault();
96
+ event.stopPropagation();
97
+ popover.onClose();
98
+ return;
99
+ }
100
+ navContentProps.onKeyDown(event);
101
+ if (NAVIGATION_KEYS.has(event.key)) event.stopPropagation();
102
+ };
103
+ const updateSafeTriangle = useSafeTriangle(panelRef, popover.isOpen && canHover);
104
+ const parentItemProps = parentMenu.getItemProps(index);
105
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("button", {
106
+ "aria-controls": popover.isOpen ? `${popover.rootId}_list` : void 0,
107
+ "aria-expanded": popover.isOpen,
108
+ "aria-haspopup": "menu",
109
+ className: cn(itemClass, "relative flex items-center justify-between gap-2", popover.isOpen && "bg-bg-subtle", popover.isOpen && canHover && safeTriangleClass),
110
+ "data-submenu-trigger": "",
111
+ onClick: popover.onOpen,
112
+ onKeyDown: handleTriggerKeyDown,
113
+ onMouseEnter: intent.hoverStart,
114
+ onMouseLeave: intent.hoverEnd,
115
+ onPointerMove: updateSafeTriangle,
116
+ role: "menuitem",
117
+ type: "button",
118
+ ...parentItemProps,
119
+ ref: mergeRefs(triggerRef, popover.setTriggerRef, parentItemProps.ref),
120
+ children: [/* @__PURE__ */ jsx("span", { children: label }), /* @__PURE__ */ jsx(ChevronIcon, {
121
+ direction: "right",
122
+ size: "sm"
123
+ })]
124
+ }), /* @__PURE__ */ jsx(MenuContextProvider, {
125
+ value: {
126
+ ...nav,
127
+ closeRoot: parentMenu.closeRoot
128
+ },
129
+ children: /* @__PURE__ */ jsx(Popover.Content, { renderItem: (props) => /* @__PURE__ */ jsx("div", {
130
+ ...props,
131
+ className: panelClass,
132
+ onKeyDown: handlePanelKeyDown,
133
+ onMouseEnter: intent.hoverStart,
134
+ onMouseLeave: intent.hoverEnd,
135
+ ref: mergeRefs(props.ref, panelRef),
136
+ role: "menu",
137
+ tabIndex: -1,
138
+ children: cloneWithIndex(children)
139
+ }) })
140
+ })] });
141
+ };
142
+ //#endregion
143
+ export { SubMenu };
@@ -0,0 +1,18 @@
1
+ import { PointerEvent, RefObject } from "react";
2
+ //#region src/components/overlays/dropdown-menu/use-safe-triangle.d.ts
3
+ /**
4
+ * ポインタ位置とサブメニューの手前側 2 角を結ぶ「safe triangle」を
5
+ * トリガーの ::after に clip-path で描くための CSS 変数を更新する。
6
+ *
7
+ * 三角形の内側はトリガーの当たり判定として扱われるため、サブメニューへ
8
+ * 斜めに移動しても途中の兄弟項目で mouseleave が発火しない。
9
+ * ポインタが動くたびに頂点を追従させ、離れる方向に動けば三角形は狭まる。
10
+ *
11
+ * getBoundingClientRect(強制同期レイアウト)を pointermove の生の頻度で
12
+ * 呼ばないよう、更新は requestAnimationFrame で 1 フレーム 1 回に間引く。
13
+ *
14
+ * 参考: https://ics.media/entry/260803/
15
+ */
16
+ declare const useSafeTriangle: (panelRef: RefObject<HTMLElement | null>, enabled: boolean) => ((event: PointerEvent<HTMLElement>) => void);
17
+ //#endregion
18
+ export { useSafeTriangle };
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useRef } from "react";
3
+ //#region src/components/overlays/dropdown-menu/use-safe-triangle.ts
4
+ /**
5
+ * ポインタ位置とサブメニューの手前側 2 角を結ぶ「safe triangle」を
6
+ * トリガーの ::after に clip-path で描くための CSS 変数を更新する。
7
+ *
8
+ * 三角形の内側はトリガーの当たり判定として扱われるため、サブメニューへ
9
+ * 斜めに移動しても途中の兄弟項目で mouseleave が発火しない。
10
+ * ポインタが動くたびに頂点を追従させ、離れる方向に動けば三角形は狭まる。
11
+ *
12
+ * getBoundingClientRect(強制同期レイアウト)を pointermove の生の頻度で
13
+ * 呼ばないよう、更新は requestAnimationFrame で 1 フレーム 1 回に間引く。
14
+ *
15
+ * 参考: https://ics.media/entry/260803/
16
+ */
17
+ const useSafeTriangle = (panelRef, enabled) => {
18
+ const pointerRef = useRef(null);
19
+ const frameRef = useRef(null);
20
+ useEffect(() => () => {
21
+ if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
22
+ }, []);
23
+ return useCallback((event) => {
24
+ if (!enabled) return;
25
+ pointerRef.current = {
26
+ x: event.clientX,
27
+ y: event.clientY,
28
+ trigger: event.currentTarget
29
+ };
30
+ if (frameRef.current !== null) return;
31
+ frameRef.current = requestAnimationFrame(() => {
32
+ frameRef.current = null;
33
+ const pointer = pointerRef.current;
34
+ const panel = panelRef.current;
35
+ if (!pointer || !panel) return;
36
+ const panelRect = panel.getBoundingClientRect();
37
+ if (panelRect.width === 0 && panelRect.height === 0) return;
38
+ const { trigger } = pointer;
39
+ const triggerRect = trigger.getBoundingClientRect();
40
+ const { style } = trigger;
41
+ const opensRight = panelRect.left + panelRect.width / 2 >= triggerRect.left + triggerRect.width / 2;
42
+ const width = opensRight ? panelRect.left - pointer.x : pointer.x - panelRect.right;
43
+ if (width <= 0) {
44
+ style.setProperty("--safe-width", "0px");
45
+ return;
46
+ }
47
+ style.setProperty("--safe-top", `${panelRect.top - triggerRect.top}px`);
48
+ style.setProperty("--safe-height", `${panelRect.height}px`);
49
+ style.setProperty("--safe-width", `${width}px`);
50
+ style.setProperty("--safe-left", `${(opensRight ? pointer.x : panelRect.right) - triggerRect.left}px`);
51
+ style.setProperty("--safe-y", `${pointer.y - panelRect.top}px`);
52
+ style.setProperty("--safe-clip", opensRight ? "polygon(0 var(--safe-y), 100% 0, 100% 100%)" : "polygon(100% var(--safe-y), 0 0, 0 100%)");
53
+ });
54
+ }, [panelRef, enabled]);
55
+ };
56
+ //#endregion
57
+ export { useSafeTriangle };
@@ -0,0 +1,35 @@
1
+ import { Option } from "../../../types/variables.mjs";
2
+ import { ListNavigation } from "../_internal/use-list-navigation.mjs";
3
+ //#region src/components/overlays/list-box/hooks.d.ts
4
+ type MenuContext = ListNavigation & {
5
+ options: readonly Option[];
6
+ selectedIndex: number;
7
+ handleSelect: (index: number) => void;
8
+ };
9
+ declare const MenuContextProvider: import("react").Context<MenuContext | null>;
10
+ declare const useMenuContent: () => {
11
+ options: readonly Readonly<{
12
+ value: string;
13
+ label: string;
14
+ }>[];
15
+ selectedIndex: number;
16
+ contentProps: {
17
+ onKeyDown: (event: import("react").KeyboardEvent<HTMLElement>) => void;
18
+ };
19
+ };
20
+ declare const useMenuItem: (index: number) => {
21
+ selected: boolean;
22
+ props: {
23
+ ref: (node: HTMLElement | null) => void;
24
+ tabIndex: number;
25
+ onFocus: () => void;
26
+ role: 'option';
27
+ 'aria-selected': boolean;
28
+ onClick: () => void;
29
+ };
30
+ };
31
+ declare const useMenuTrigger: () => {
32
+ valueLabel: string;
33
+ };
34
+ //#endregion
35
+ export { MenuContextProvider, useMenuContent, useMenuItem, useMenuTrigger };
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ import { useMessages } from "../../../i18n/context.mjs";
3
+ import { createSafeContext } from "../../../helpers/create-safe-context.mjs";
4
+ import { useOpenContext } from "../popover/hooks.mjs";
5
+ import { useMemo } from "react";
6
+ //#region src/components/overlays/list-box/hooks.ts
7
+ const [MenuContextProvider, useMenuContext] = createSafeContext("useMenuContext must be used within a ListBox.Root");
8
+ const useMenuContent = () => {
9
+ const menu = useMenuContext();
10
+ return useMemo(() => ({
11
+ options: menu.options,
12
+ selectedIndex: menu.selectedIndex,
13
+ contentProps: menu.getContentProps()
14
+ }), [menu]);
15
+ };
16
+ const useMenuItem = (index) => {
17
+ const menu = useMenuContext();
18
+ const { onClose } = useOpenContext();
19
+ return useMemo(() => ({
20
+ selected: menu.selectedIndex === index,
21
+ props: {
22
+ role: "option",
23
+ "aria-selected": menu.selectedIndex === index,
24
+ ...menu.getItemProps(index),
25
+ onClick: () => {
26
+ menu.handleSelect(index);
27
+ onClose();
28
+ }
29
+ }
30
+ }), [
31
+ index,
32
+ menu,
33
+ onClose
34
+ ]);
35
+ };
36
+ const useMenuTrigger = () => {
37
+ const menu = useMenuContext();
38
+ const defaultLabel = useMessages().listBoxPlaceholder;
39
+ const valueLabel = menu.selectedIndex < 0 ? defaultLabel : menu.options[menu.selectedIndex]?.label ?? defaultLabel;
40
+ return useMemo(() => ({ valueLabel }), [valueLabel]);
41
+ };
42
+ //#endregion
43
+ export { MenuContextProvider, useMenuContent, useMenuItem, useMenuTrigger };
@@ -0,0 +1,2 @@
1
+ import { ListBox } from "./list-box.mjs";
2
+ export { ListBox };
@@ -0,0 +1,2 @@
1
+ import { ListBox } from "./list-box.mjs";
2
+ export { ListBox };
@@ -0,0 +1,28 @@
1
+ import { Button } from "../../buttons/button/button.mjs";
2
+ import "../../buttons/button/index.mjs";
3
+ import { Option, Placement } from "../../../types/variables.mjs";
4
+ import { ComponentProps, FC, PropsWithChildren, ReactElement } from "react";
5
+ //#region src/components/overlays/list-box/list-box.d.ts
6
+ declare const ListBox: {
7
+ readonly Root: FC<PropsWithChildren<{
8
+ placement?: Placement;
9
+ options: readonly Option[];
10
+ value?: Option['value'];
11
+ defaultValue?: Option['value'];
12
+ onChange?: (value: Option['value']) => void;
13
+ }>>;
14
+ readonly Content: FC<{
15
+ helpContent?: ReactElement;
16
+ }>;
17
+ readonly Trigger: FC<{
18
+ size?: ComponentProps<typeof Button>['size'];
19
+ label?: string;
20
+ }>;
21
+ readonly IconTrigger: FC<{
22
+ size?: ComponentProps<typeof Button>['size'];
23
+ icon: ReactElement;
24
+ label?: string;
25
+ }>;
26
+ };
27
+ //#endregion
28
+ export { ListBox };
@@ -0,0 +1,150 @@
1
+ "use client";
2
+ import { cn } from "../../../helpers/cn.mjs";
3
+ import { Button } from "../../buttons/button/button.mjs";
4
+ import { useListNavigation } from "../_internal/use-list-navigation.mjs";
5
+ import { useControllableState } from "../../../hooks/controllable-state/index.mjs";
6
+ import { useOpenContext } from "../popover/hooks.mjs";
7
+ import { Popover } from "../popover/popover.mjs";
8
+ import { IconButton } from "../../buttons/icon-button/icon-button.mjs";
9
+ import { CheckIcon, ChevronIcon } from "../../icons/lucide.mjs";
10
+ import { MenuContextProvider, useMenuContent, useMenuItem, useMenuTrigger } from "./hooks.mjs";
11
+ import { useId, useState } from "react";
12
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
13
+ //#region src/components/overlays/list-box/list-box.tsx
14
+ const Root = ({ children, placement = "bottom", options, value, defaultValue, onChange }) => {
15
+ const [selectedValue, setSelectedValue] = useControllableState({
16
+ value,
17
+ defaultValue,
18
+ onChange: (next) => {
19
+ if (next !== void 0) onChange?.(next);
20
+ }
21
+ });
22
+ return /* @__PURE__ */ jsx(Popover.Root, {
23
+ flipDisabled: true,
24
+ placement,
25
+ role: "listbox",
26
+ children: /* @__PURE__ */ jsx(MenuProvider, {
27
+ onChange: setSelectedValue,
28
+ options,
29
+ value: selectedValue,
30
+ children
31
+ })
32
+ });
33
+ };
34
+ const MenuProvider = ({ children, options, onChange, value }) => {
35
+ const { isOpen } = useOpenContext();
36
+ const selectedIndex = options.findIndex((option) => option.value === value);
37
+ const [activeIndex, setActiveIndex] = useState(null);
38
+ const nav = useListNavigation({
39
+ open: isOpen,
40
+ activeIndex,
41
+ setActiveIndex,
42
+ selectedIndex,
43
+ loop: true
44
+ });
45
+ const handleSelect = (index) => {
46
+ const next = options[index]?.value;
47
+ if (next !== void 0 && next !== "") onChange(next);
48
+ };
49
+ return /* @__PURE__ */ jsx(MenuContextProvider, {
50
+ value: {
51
+ ...nav,
52
+ options,
53
+ selectedIndex,
54
+ handleSelect
55
+ },
56
+ children
57
+ });
58
+ };
59
+ const Content = ({ helpContent }) => {
60
+ const { options, contentProps } = useMenuContent();
61
+ const helpId = useId();
62
+ return /* @__PURE__ */ jsx(Popover.Content, { renderItem: ({ ref, ...listProps }) => /* @__PURE__ */ jsxs("div", {
63
+ className: "bg-bg-raised border-border-subtle vertical:max-h-none vertical:min-w-0 vertical:max-w-48 vertical:min-h-40 flex max-h-48 min-w-40 flex-col rounded-lg border py-2 shadow-md",
64
+ ref,
65
+ children: [helpContent === void 0 ? null : /* @__PURE__ */ jsx("div", {
66
+ id: helpId,
67
+ children: helpContent
68
+ }), /* @__PURE__ */ jsx("div", {
69
+ ...listProps,
70
+ ...contentProps,
71
+ "aria-describedby": helpContent === void 0 ? void 0 : helpId,
72
+ className: "vertical:overflow-x-auto vertical:overflow-y-visible flex min-h-0 min-w-0 flex-col overflow-y-auto",
73
+ children: options.map(({ value, label }, idx) => /* @__PURE__ */ jsx(Item, {
74
+ index: idx,
75
+ label
76
+ }, value))
77
+ })]
78
+ }) });
79
+ };
80
+ const Item = ({ label, index }) => {
81
+ const { props, selected } = useMenuItem(index);
82
+ return /* @__PURE__ */ jsxs("button", {
83
+ className: cn("flex w-full items-center justify-between px-3 py-2 text-left transition-colors", "hover:bg-bg-subtle", "focus-visible:border-transparent focus-visible:bg-bg-subtle focus-visible:outline-hidden"),
84
+ type: "button",
85
+ ...props,
86
+ children: [label, selected && /* @__PURE__ */ jsx("span", {
87
+ className: "text-fg-success",
88
+ children: /* @__PURE__ */ jsx(CheckIcon, {})
89
+ })]
90
+ });
91
+ };
92
+ const useTriggerLabels = (label) => {
93
+ const { valueLabel } = useMenuTrigger();
94
+ const labelId = useId();
95
+ const valueId = useId();
96
+ return {
97
+ valueLabel,
98
+ labelId,
99
+ valueId,
100
+ labelledBy: label === void 0 ? valueId : `${labelId} ${valueId}`
101
+ };
102
+ };
103
+ const Trigger = ({ size = "md", label }) => {
104
+ const { valueLabel, labelId, valueId, labelledBy } = useTriggerLabels(label);
105
+ return /* @__PURE__ */ jsx(Popover.Trigger, { renderItem: (props) => /* @__PURE__ */ jsxs(Fragment$1, { children: [label !== void 0 && /* @__PURE__ */ jsx("span", {
106
+ className: "sr-only",
107
+ id: labelId,
108
+ children: label
109
+ }), /* @__PURE__ */ jsx(Button, {
110
+ ...props,
111
+ "aria-labelledby": labelledBy,
112
+ color: "base",
113
+ endIcon: /* @__PURE__ */ jsx(ChevronIcon, { direction: "down" }),
114
+ fullWidth: true,
115
+ size,
116
+ type: "button",
117
+ variant: "solid",
118
+ children: /* @__PURE__ */ jsx("span", {
119
+ id: valueId,
120
+ children: valueLabel
121
+ })
122
+ })] }) });
123
+ };
124
+ const IconTrigger = ({ size = "md", icon, label }) => {
125
+ const { valueLabel, labelId, valueId, labelledBy } = useTriggerLabels(label);
126
+ return /* @__PURE__ */ jsx(Popover.Trigger, { renderItem: (props) => /* @__PURE__ */ jsxs(Fragment$1, { children: [label !== void 0 && /* @__PURE__ */ jsx("span", {
127
+ className: "sr-only",
128
+ id: labelId,
129
+ children: label
130
+ }), /* @__PURE__ */ jsxs(IconButton, {
131
+ "aria-labelledby": labelledBy,
132
+ label: label ?? valueLabel,
133
+ size,
134
+ tooltipDisabled: true,
135
+ ...props,
136
+ children: [icon, /* @__PURE__ */ jsx("span", {
137
+ className: "sr-only",
138
+ id: valueId,
139
+ children: valueLabel
140
+ })]
141
+ })] }) });
142
+ };
143
+ const ListBox = {
144
+ Root,
145
+ Content,
146
+ Trigger,
147
+ IconTrigger
148
+ };
149
+ //#endregion
150
+ export { ListBox };
@@ -0,0 +1,2 @@
1
+ import { Modal } from "./modal.mjs";
2
+ export { Modal };
@@ -0,0 +1,2 @@
1
+ import { Modal } from "./modal.mjs";
2
+ export { Modal };
@@ -0,0 +1,15 @@
1
+ import { ModalSide } from "../../../types/variables.mjs";
2
+ import { FC, PropsWithChildren, Ref } from "react";
3
+ //#region src/components/overlays/modal/modal.d.ts
4
+ declare const Modal: FC<PropsWithChildren<{
5
+ ref?: Ref<HTMLDialogElement>;
6
+ side?: ModalSide;
7
+ defaultOpen?: boolean;
8
+ isOpen?: boolean;
9
+ onClose?: () => void;
10
+ 'aria-label'?: string;
11
+ 'aria-labelledby'?: string;
12
+ 'aria-describedby'?: string;
13
+ }>>;
14
+ //#endregion
15
+ export { Modal };
@@ -0,0 +1,72 @@
1
+ "use client";
2
+ import { cn } from "../../../helpers/cn.mjs";
3
+ import { mergeRefs } from "../../../helpers/merge-refs.mjs";
4
+ import { ToastProvider } from "../../feedback/toast/provider.mjs";
5
+ import { ModalDialogProvider } from "../_internal/modal-dialog-context.mjs";
6
+ import { PortalRootProvider } from "../../providers/portal-root.mjs";
7
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ //#region src/components/overlays/modal/modal.tsx
10
+ const Modal = ({ ref, side = "center", defaultOpen, isOpen, onClose, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, children }) => {
11
+ const dialogRef = useRef(null);
12
+ const mergedRef = useMemo(() => mergeRefs(dialogRef, ref), [ref]);
13
+ const [dialogOpen, setDialogOpen] = useState(defaultOpen ?? false);
14
+ const [registeredLabelledBy, setRegisteredLabelledBy] = useState(void 0);
15
+ const [registeredDescribedBy, setRegisteredDescribedBy] = useState(void 0);
16
+ const realDialogOpen = isOpen === true || isOpen === false ? isOpen : dialogOpen;
17
+ const realOnClose = useCallback(() => {
18
+ onClose?.();
19
+ if (isOpen === void 0) return;
20
+ setDialogOpen(false);
21
+ }, [isOpen, onClose]);
22
+ const modalDialogContext = useMemo(() => ({
23
+ registerLabelledBy: setRegisteredLabelledBy,
24
+ registerDescribedBy: setRegisteredDescribedBy
25
+ }), []);
26
+ const labelledBy = ariaLabelledBy ?? (ariaLabel === void 0 ? registeredLabelledBy : void 0);
27
+ const describedBy = ariaDescribedBy ?? registeredDescribedBy;
28
+ useEffect(() => {
29
+ const dialog = dialogRef.current;
30
+ if (!dialog || realDialogOpen === dialog.open) return;
31
+ if (realDialogOpen) dialog.showModal();
32
+ else dialog.close();
33
+ }, [realDialogOpen]);
34
+ useEffect(() => {
35
+ const dialog = dialogRef.current;
36
+ if (!dialog || isOpen !== void 0) return void 0;
37
+ const observer = new MutationObserver(() => {
38
+ setDialogOpen(dialog.open);
39
+ });
40
+ observer.observe(dialog, {
41
+ attributes: true,
42
+ attributeFilter: ["open"]
43
+ });
44
+ return () => {
45
+ observer.disconnect();
46
+ };
47
+ }, [isOpen]);
48
+ return /* @__PURE__ */ jsx("dialog", {
49
+ "aria-describedby": describedBy,
50
+ "aria-label": ariaLabel,
51
+ "aria-labelledby": labelledBy,
52
+ className: cn("ao-modal bg-bg-raised text-fg-base z-modal shadow-md backdrop:bg-back-drop", side === "center" && "ao-modal-center m-auto max-h-128 w-5/6 max-w-2xl rounded-lg vertical:h-5/6 vertical:max-h-168 vertical:w-auto vertical:max-w-lg", side === "bottom" && "ao-modal-bottom mt-auto w-screen max-w-screen rounded-t-lg", side === "right" && "ao-modal-right ml-auto h-svh max-h-none w-screen max-w-sm rounded-l-lg", side === "left" && "ao-modal-left mr-auto h-svh max-h-none w-screen max-w-sm rounded-r-lg"),
53
+ onClick: (e) => {
54
+ if (e.target === e.currentTarget) dialogRef.current?.close();
55
+ },
56
+ onClose: realOnClose,
57
+ ref: mergedRef,
58
+ children: /* @__PURE__ */ jsx(ModalDialogProvider, {
59
+ value: modalDialogContext,
60
+ children: /* @__PURE__ */ jsx(PortalRootProvider, {
61
+ value: dialogRef,
62
+ children: /* @__PURE__ */ jsx(ToastProvider, {
63
+ portalRef: dialogRef,
64
+ position: "absolute",
65
+ children
66
+ })
67
+ })
68
+ })
69
+ });
70
+ };
71
+ //#endregion
72
+ export { Modal };
@@ -0,0 +1,26 @@
1
+ import { Placement } from "../../../types/variables.mjs";
2
+ import { CSSProperties } from "react";
3
+ //#region src/components/overlays/popover/anchor-positioning.d.ts
4
+ /**
5
+ * CSS Anchor Positioning による配置ヘルパー。
6
+ *
7
+ * placement を position-area / position-try-fallbacks / 対向辺マージン(offset 相当)へ
8
+ * 変換する。旧 floating-ui のミドルウェア(offset / flip / autoUpdate)の置き換え。
9
+ *
10
+ * 注意: CSS Anchor Positioning は Baseline newly available(2026-01)で、
11
+ * 縦書き / RTL のインライン軸補正にエンジン差(既知の interop バグ)がある。
12
+ */
13
+ type AnchorCSSProperties = CSSProperties & {
14
+ positionAnchor?: string;
15
+ positionArea?: string;
16
+ positionTryFallbacks?: string;
17
+ '--ao-anchor'?: string;
18
+ };
19
+ declare const toAnchorName: (id: string) => string;
20
+ /**
21
+ * Popover content(位置決め対象)に適用する style。
22
+ * `flipDisabled` のときは position-try-fallbacks を付けず、はみ出しても反転しない。
23
+ */
24
+ declare const getContentAnchorStyle: (anchorName: string, placement: Placement, flipDisabled: boolean) => AnchorCSSProperties;
25
+ //#endregion
26
+ export { getContentAnchorStyle, toAnchorName };
@@ -0,0 +1,49 @@
1
+ //#region src/components/overlays/popover/anchor-positioning.ts
2
+ const POSITION_AREA = {
3
+ top: "top",
4
+ "top-start": "top span-right",
5
+ "top-end": "top span-left",
6
+ bottom: "bottom",
7
+ "bottom-start": "bottom span-right",
8
+ "bottom-end": "bottom span-left",
9
+ left: "left",
10
+ "left-start": "left span-bottom",
11
+ "left-end": "left span-top",
12
+ right: "right",
13
+ "right-start": "right span-bottom",
14
+ "right-end": "right span-top"
15
+ };
16
+ const GAP = "8px";
17
+ const sideGap = (side) => {
18
+ switch (side) {
19
+ case "top": return { marginBottom: GAP };
20
+ case "bottom": return { marginTop: GAP };
21
+ case "left": return { marginRight: GAP };
22
+ case "right": return { marginLeft: GAP };
23
+ default: return {};
24
+ }
25
+ };
26
+ const toAnchorName = (id) => `--ao-popover-${id.replaceAll(/[^a-zA-Z0-9_-]/gu, "")}`;
27
+ /**
28
+ * Popover content(位置決め対象)に適用する style。
29
+ * `flipDisabled` のときは position-try-fallbacks を付けず、はみ出しても反転しない。
30
+ */
31
+ const getContentAnchorStyle = (anchorName, placement, flipDisabled) => {
32
+ const side = placement.split("-")[0] ?? "bottom";
33
+ return {
34
+ position: "fixed",
35
+ inset: "auto",
36
+ margin: 0,
37
+ overflow: "visible",
38
+ background: "transparent",
39
+ border: 0,
40
+ padding: 0,
41
+ ...sideGap(side),
42
+ positionAnchor: anchorName,
43
+ "--ao-anchor": anchorName,
44
+ positionArea: POSITION_AREA[placement],
45
+ ...flipDisabled ? {} : { positionTryFallbacks: "flip-block, flip-inline, flip-block flip-inline" }
46
+ };
47
+ };
48
+ //#endregion
49
+ export { getContentAnchorStyle, toAnchorName };
@@ -0,0 +1,7 @@
1
+ //#region src/components/overlays/popover/escape-stack.d.ts
2
+ /**
3
+ * ポップオーバーを最上位レイヤーとして積む。戻り値を呼ぶと取り除かれる。
4
+ */
5
+ declare const pushEscapeLayer: (close: () => void) => (() => void);
6
+ //#endregion
7
+ export { pushEscapeLayer };