@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,10 @@
1
+ import { cn } from "../../../helpers/cn.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/components/data-display/card/card.tsx
4
+ const Card = ({ children, width = "full", variant = "shadow", interactive = false, ...rest }) => /* @__PURE__ */ jsx("div", {
5
+ ...rest,
6
+ className: cn("rounded-xl", variant === "shadow" && "shadow-sm", variant === "outline" && "border border-border-mute", width === "full" && "w-full", width === "fit" && "w-fit", interactive && "motion-safe:transition-transform hover:motion-safe:scale-[1.02] active:motion-safe:scale-[0.98]", "bg-bg-base"),
7
+ children
8
+ });
9
+ //#endregion
10
+ export { Card };
@@ -0,0 +1,2 @@
1
+ import { Card } from "./card.mjs";
2
+ export { Card };
@@ -0,0 +1,2 @@
1
+ import { Card } from "./card.mjs";
2
+ export { Card };
@@ -0,0 +1,8 @@
1
+ import { FC, HTMLAttributes } from "react";
2
+ //#region src/components/data-display/code/code.d.ts
3
+ type Props = {
4
+ children: string;
5
+ } & Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'style'>;
6
+ declare const Code: FC<Props>;
7
+ //#endregion
8
+ export { Code };
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { useMessages } from "../../../i18n/context.mjs";
3
+ import { findAllColors } from "./find-all-colors.mjs";
4
+ import { Fragment } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/components/data-display/code/code.tsx
7
+ const Code = ({ children, ...rest }) => {
8
+ const messages = useMessages();
9
+ const colors = findAllColors(children);
10
+ if (colors.length === 0) return /* @__PURE__ */ jsx("code", {
11
+ ...rest,
12
+ className: "bg-bg-mute m-0.5 rounded-md px-1.5 sm:py-0.5",
13
+ children
14
+ });
15
+ const parts = [];
16
+ let lastIndex = 0;
17
+ for (const [index, colorInfo] of colors.entries()) {
18
+ if (colorInfo.start > lastIndex) parts.push(children.slice(lastIndex, colorInfo.start));
19
+ parts.push(/* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
20
+ "aria-label": `${messages.color}: ${colorInfo.color}`,
21
+ className: "border-border-base inline-block size-3 shrink-0 rounded-sm border",
22
+ role: "img",
23
+ style: { backgroundColor: colorInfo.color }
24
+ }), children.slice(colorInfo.start, colorInfo.end)] }, `color-${String(index)}`));
25
+ lastIndex = colorInfo.end;
26
+ }
27
+ if (lastIndex < children.length) parts.push(children.slice(lastIndex));
28
+ return /* @__PURE__ */ jsx("code", {
29
+ ...rest,
30
+ className: "bg-bg-mute vertical:inline vertical:gap-0 m-0.5 inline-flex items-center gap-1 rounded-md px-1.5 sm:py-0.5",
31
+ children: parts
32
+ });
33
+ };
34
+ //#endregion
35
+ export { Code };
@@ -0,0 +1,16 @@
1
+ //#region src/components/data-display/code/find-all-colors.d.ts
2
+ type ColorMatch = {
3
+ color: string;
4
+ start: number;
5
+ end: number;
6
+ };
7
+ /**
8
+ * テキスト文字列内のすべての色の値とその位置を見つけます。
9
+ * HSL、RGB、RGBA、HSLA、HEX、名前付き色をサポートします。
10
+ *
11
+ * @param text - 色の値を検索するテキスト
12
+ * @returns 色の値、開始位置、終了位置を含む色オブジェクトの配列
13
+ */
14
+ declare function findAllColors(text: string): ColorMatch[];
15
+ //#endregion
16
+ export { findAllColors };
@@ -0,0 +1,267 @@
1
+ //#region src/components/data-display/code/find-all-colors.ts
2
+ const extractFunctionContent = (source, funcName) => {
3
+ const funcPattern = new RegExp(`${funcName}\\s*\\(`, "giu");
4
+ const matches = [];
5
+ let match = funcPattern.exec(source);
6
+ while (match !== null) {
7
+ const startIndex = match.index + match[0].length - 1;
8
+ let depth = 0;
9
+ let endIndex = -1;
10
+ for (let i = startIndex; i < source.length; i++) if (source[i] === "(") depth++;
11
+ else if (source[i] === ")") {
12
+ depth--;
13
+ if (depth === 0) {
14
+ endIndex = i;
15
+ break;
16
+ }
17
+ }
18
+ if (endIndex !== -1) {
19
+ const content = source.slice(startIndex + 1, endIndex);
20
+ const fullColor = `${funcName.toLowerCase()}(${content})`;
21
+ matches.push({
22
+ color: fullColor,
23
+ start: match.index,
24
+ end: endIndex + 1
25
+ });
26
+ }
27
+ match = funcPattern.exec(source);
28
+ }
29
+ return matches;
30
+ };
31
+ /**
32
+ * テキスト文字列内のすべての色の値とその位置を見つけます。
33
+ * HSL、RGB、RGBA、HSLA、HEX、名前付き色をサポートします。
34
+ *
35
+ * @param text - 色の値を検索するテキスト
36
+ * @returns 色の値、開始位置、終了位置を含む色オブジェクトの配列
37
+ */
38
+ function findAllColors(text) {
39
+ const results = [];
40
+ for (const func of [
41
+ "hsl",
42
+ "rgb",
43
+ "rgba",
44
+ "hsla"
45
+ ]) {
46
+ const matches = extractFunctionContent(text, func);
47
+ results.push(...matches);
48
+ }
49
+ const hexPattern = /#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})(?=\s|;|,|$|\)|\]|\})/gu;
50
+ let hexMatch = hexPattern.exec(text);
51
+ while (hexMatch !== null) {
52
+ results.push({
53
+ color: hexMatch[0],
54
+ start: hexMatch.index,
55
+ end: hexMatch.index + hexMatch[0].length
56
+ });
57
+ hexMatch = hexPattern.exec(text);
58
+ }
59
+ const namedColors = [
60
+ "red",
61
+ "blue",
62
+ "green",
63
+ "yellow",
64
+ "orange",
65
+ "purple",
66
+ "pink",
67
+ "brown",
68
+ "black",
69
+ "white",
70
+ "gray",
71
+ "grey",
72
+ "cyan",
73
+ "magenta",
74
+ "lime",
75
+ "navy",
76
+ "maroon",
77
+ "olive",
78
+ "teal",
79
+ "silver",
80
+ "gold",
81
+ "indigo",
82
+ "violet"
83
+ ];
84
+ const lowerText = text.toLowerCase();
85
+ for (const color of namedColors) {
86
+ let startIndex = 0;
87
+ let index = lowerText.indexOf(color, startIndex);
88
+ while (index !== -1) {
89
+ const beforeChar = index > 0 ? lowerText[index - 1] ?? " " : " ";
90
+ const afterChar = index + color.length < lowerText.length ? lowerText[index + color.length] ?? " " : " ";
91
+ if (!(/[a-zA-Z0-9]/u.test(beforeChar) || /[a-zA-Z0-9]/u.test(afterChar))) results.push({
92
+ color,
93
+ start: index,
94
+ end: index + color.length
95
+ });
96
+ startIndex = index + 1;
97
+ index = lowerText.indexOf(color, startIndex);
98
+ }
99
+ }
100
+ results.sort((a, b) => a.start - b.start);
101
+ const filteredResults = [];
102
+ for (const result of results) if (!filteredResults.some((existing) => result.start >= existing.start && result.start < existing.end || result.end > existing.start && result.end <= existing.end || result.start <= existing.start && result.end >= existing.end)) filteredResults.push(result);
103
+ return filteredResults;
104
+ }
105
+ if (import.meta.vitest) {
106
+ const { describe, expect, it } = import.meta.vitest;
107
+ describe("findAllColors", () => {
108
+ describe("単一の色の場合", () => {
109
+ it("HSL色を見つける", () => {
110
+ const result = findAllColors("hsl(280, 70%, 50%)");
111
+ expect(result).toEqual([{
112
+ color: "hsl(280, 70%, 50%)",
113
+ start: 0,
114
+ end: 18
115
+ }]);
116
+ });
117
+ it("HEX色を見つける", () => {
118
+ const result = findAllColors("#ff0080");
119
+ expect(result).toEqual([{
120
+ color: "#ff0080",
121
+ start: 0,
122
+ end: 7
123
+ }]);
124
+ });
125
+ it("名前付き色を見つける", () => {
126
+ const result = findAllColors("background-color: red;");
127
+ expect(result).toEqual([{
128
+ color: "red",
129
+ start: 18,
130
+ end: 21
131
+ }]);
132
+ });
133
+ });
134
+ describe("複数の色の場合", () => {
135
+ it("異なる形式の複数の色を見つける", () => {
136
+ const result = findAllColors("border: 1px solid #ff0080; background: hsl(280, 70%, 50%); color: white;");
137
+ expect(result).toEqual([
138
+ {
139
+ color: "#ff0080",
140
+ start: 18,
141
+ end: 25
142
+ },
143
+ {
144
+ color: "hsl(280, 70%, 50%)",
145
+ start: 39,
146
+ end: 57
147
+ },
148
+ {
149
+ color: "white",
150
+ start: 66,
151
+ end: 71
152
+ }
153
+ ]);
154
+ });
155
+ it("gradient内の複数の色を見つける", () => {
156
+ const result = findAllColors("linear-gradient(45deg, #ff0080, hsl(280, 70%, 50%), rgba(255, 0, 128, 0.5))");
157
+ expect(result).toEqual([
158
+ {
159
+ color: "#ff0080",
160
+ start: 23,
161
+ end: 30
162
+ },
163
+ {
164
+ color: "hsl(280, 70%, 50%)",
165
+ start: 32,
166
+ end: 50
167
+ },
168
+ {
169
+ color: "rgba(255, 0, 128, 0.5)",
170
+ start: 52,
171
+ end: 74
172
+ }
173
+ ]);
174
+ });
175
+ });
176
+ describe("重複する色パターンの場合", () => {
177
+ it("関数型色を名前付き色より優先する", () => {
178
+ const result = findAllColors("rgb(255, 0, 0) red");
179
+ expect(result).toEqual([{
180
+ color: "rgb(255, 0, 0)",
181
+ start: 0,
182
+ end: 14
183
+ }, {
184
+ color: "red",
185
+ start: 15,
186
+ end: 18
187
+ }]);
188
+ });
189
+ it("重複する領域では最初の色のみを保持する", () => {
190
+ const result = findAllColors("background-color: red");
191
+ expect(result).toEqual([{
192
+ color: "red",
193
+ start: 18,
194
+ end: 21
195
+ }]);
196
+ });
197
+ });
198
+ describe("複雑なCSS関数の場合", () => {
199
+ it("calc式を含むHSL色を見つける", () => {
200
+ const result = findAllColors("hsl(calc(var(--hue) + 50), 70%, 50%)");
201
+ expect(result).toEqual([{
202
+ color: "hsl(calc(var(--hue) + 50), 70%, 50%)",
203
+ start: 0,
204
+ end: 36
205
+ }]);
206
+ });
207
+ it("ネストした括弧を含む色を見つける", () => {
208
+ const result = findAllColors("hsl(calc(sign(var(--x)) * 80 + 200), 70%, 50%)");
209
+ expect(result).toEqual([{
210
+ color: "hsl(calc(sign(var(--x)) * 80 + 200), 70%, 50%)",
211
+ start: 0,
212
+ end: 46
213
+ }]);
214
+ });
215
+ });
216
+ describe("色が見つからない場合", () => {
217
+ it("空の配列を返す", () => {
218
+ const result = findAllColors("transform: translateX(100px);");
219
+ expect(result).toEqual([]);
220
+ });
221
+ it("色でないテキストでは空の配列を返す", () => {
222
+ const result = findAllColors("font-size: 16px; margin: 10px;");
223
+ expect(result).toEqual([]);
224
+ });
225
+ });
226
+ describe("エッジケース", () => {
227
+ it("同じ色が複数回出現する場合", () => {
228
+ const result = findAllColors("color: red; border-color: red;");
229
+ expect(result).toEqual([{
230
+ color: "red",
231
+ start: 7,
232
+ end: 10
233
+ }, {
234
+ color: "red",
235
+ start: 26,
236
+ end: 29
237
+ }]);
238
+ });
239
+ it("文字列の境界での色検出", () => {
240
+ const result = findAllColors("red");
241
+ expect(result).toEqual([{
242
+ color: "red",
243
+ start: 0,
244
+ end: 3
245
+ }]);
246
+ });
247
+ it("他の単語の一部として含まれる色名を検出しない", () => {
248
+ const result = findAllColors("reduce");
249
+ expect(result).toEqual([]);
250
+ });
251
+ it("他の単語の一部として含まれる色名を検出しない(複数パターン)", () => {
252
+ const result = findAllColors("blueberry, greenfield, redirection");
253
+ expect(result).toEqual([]);
254
+ });
255
+ it("単語の一部でない色名のみを検出する", () => {
256
+ const result = findAllColors("reduce color: red; blueberry");
257
+ expect(result).toEqual([{
258
+ color: "red",
259
+ start: 14,
260
+ end: 17
261
+ }]);
262
+ });
263
+ });
264
+ });
265
+ }
266
+ //#endregion
267
+ export { findAllColors };
@@ -0,0 +1,2 @@
1
+ import { Code } from "./code.mjs";
2
+ export { Code };
@@ -0,0 +1,2 @@
1
+ import { Code } from "./code.mjs";
2
+ export { Code };
@@ -0,0 +1,9 @@
1
+ import { FC, HTMLAttributes } from "react";
2
+ //#region src/components/data-display/heading/heading.d.ts
3
+ type Props = {
4
+ level: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
5
+ lineClamp?: 1 | 2 | 3 | 4 | 5 | 6;
6
+ } & Omit<HTMLAttributes<HTMLHeadingElement>, 'className' | 'style'>;
7
+ declare const Heading: FC<Props>;
8
+ //#endregion
9
+ export { Heading };
@@ -0,0 +1,46 @@
1
+ import { cn } from "../../../helpers/cn.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/components/data-display/heading/heading.tsx
4
+ const LINE_CLAMP_CLASS = {
5
+ 1: "line-clamp-1",
6
+ 2: "line-clamp-2",
7
+ 3: "line-clamp-3",
8
+ 4: "line-clamp-4",
9
+ 5: "line-clamp-5",
10
+ 6: "line-clamp-6"
11
+ };
12
+ const Heading = ({ children, level, lineClamp, ...rest }) => {
13
+ const lineClampClass = lineClamp === void 0 ? void 0 : LINE_CLAMP_CLASS[lineClamp];
14
+ if (level === "h1") return /* @__PURE__ */ jsx("h1", {
15
+ ...rest,
16
+ className: cn("font-bold text-2xl md:text-3xl", lineClampClass),
17
+ children
18
+ });
19
+ if (level === "h2") return /* @__PURE__ */ jsx("h2", {
20
+ ...rest,
21
+ className: cn("font-bold text-xl md:text-2xl", lineClampClass),
22
+ children
23
+ });
24
+ if (level === "h3") return /* @__PURE__ */ jsx("h3", {
25
+ ...rest,
26
+ className: cn("font-bold text-lg md:text-xl", lineClampClass),
27
+ children
28
+ });
29
+ if (level === "h4") return /* @__PURE__ */ jsx("h4", {
30
+ ...rest,
31
+ className: cn("font-bold text-md md:text-lg", lineClampClass),
32
+ children
33
+ });
34
+ if (level === "h5") return /* @__PURE__ */ jsx("h5", {
35
+ ...rest,
36
+ className: cn("font-bold text-sm md:text-md", lineClampClass),
37
+ children
38
+ });
39
+ return /* @__PURE__ */ jsx("h6", {
40
+ ...rest,
41
+ className: cn("font-bold text-xs md:text-sm", lineClampClass),
42
+ children
43
+ });
44
+ };
45
+ //#endregion
46
+ export { Heading };
@@ -0,0 +1,2 @@
1
+ import { Heading } from "./heading.mjs";
2
+ export { Heading };
@@ -0,0 +1,2 @@
1
+ import { Heading } from "./heading.mjs";
2
+ export { Heading };
@@ -0,0 +1,2 @@
1
+ import { CellAlign, Table } from "./table.mjs";
2
+ export { type CellAlign, Table };
@@ -0,0 +1,2 @@
1
+ import { Table } from "./table.mjs";
2
+ export { Table };
@@ -0,0 +1,33 @@
1
+ import { FC, HTMLAttributes, PropsWithChildren, ReactNode, TableHTMLAttributes, TdHTMLAttributes, ThHTMLAttributes } from "react";
2
+ //#region src/components/data-display/table/table.d.ts
3
+ type RootProps = PropsWithChildren<Omit<TableHTMLAttributes<HTMLTableElement>, 'className' | 'style'>>;
4
+ type RowProps = PropsWithChildren<{
5
+ interactive?: boolean;
6
+ } & Omit<HTMLAttributes<HTMLTableRowElement>, 'className' | 'style'>>;
7
+ type CellAlign = 'left' | 'center' | 'right';
8
+ type HeaderCellProps = PropsWithChildren<{
9
+ align?: CellAlign;
10
+ scope?: 'col' | 'row' | 'colgroup' | 'rowgroup';
11
+ } & Omit<ThHTMLAttributes<HTMLTableCellElement>, 'className' | 'style' | 'align' | 'scope'>>;
12
+ type CellProps = PropsWithChildren<{
13
+ align?: CellAlign;
14
+ color?: 'base' | 'mute';
15
+ } & Omit<TdHTMLAttributes<HTMLTableCellElement>, 'className' | 'style' | 'align'>>;
16
+ type SectionProps = PropsWithChildren<Omit<HTMLAttributes<HTMLTableSectionElement>, 'className' | 'style'>>;
17
+ type CaptionProps = PropsWithChildren<Omit<HTMLAttributes<HTMLTableCaptionElement>, 'className' | 'style'>>;
18
+ type EmptyStateProps = {
19
+ colSpan: number;
20
+ children: ReactNode;
21
+ };
22
+ declare const Table: {
23
+ readonly Root: FC<RootProps>;
24
+ readonly Head: FC<SectionProps>;
25
+ readonly Body: FC<SectionProps>;
26
+ readonly Row: FC<RowProps>;
27
+ readonly HeaderCell: FC<HeaderCellProps>;
28
+ readonly Cell: FC<CellProps>;
29
+ readonly Caption: FC<CaptionProps>;
30
+ readonly EmptyState: FC<EmptyStateProps>;
31
+ };
32
+ //#endregion
33
+ export { CellAlign, Table };
@@ -0,0 +1,62 @@
1
+ import { cn } from "../../../helpers/cn.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/components/data-display/table/table.tsx
4
+ const Root = ({ children, ...rest }) => /* @__PURE__ */ jsx("div", {
5
+ className: "border-border-mute bg-bg-base vertical:writing-sideways-rl vertical:size-fit w-full overflow-x-auto rounded-lg border",
6
+ children: /* @__PURE__ */ jsx("table", {
7
+ ...rest,
8
+ className: "min-w-full border-collapse text-left text-sm",
9
+ children
10
+ })
11
+ });
12
+ const Head = ({ children, ...rest }) => /* @__PURE__ */ jsx("thead", {
13
+ ...rest,
14
+ className: "bg-bg-subtle",
15
+ children
16
+ });
17
+ const Body = ({ children, ...rest }) => /* @__PURE__ */ jsx("tbody", {
18
+ ...rest,
19
+ className: "vertical:[&_tr:last-child]:border-l-0 [&_tr:last-child]:border-b-0",
20
+ children
21
+ });
22
+ const Row = ({ children, interactive = false, ...rest }) => /* @__PURE__ */ jsx("tr", {
23
+ ...rest,
24
+ className: cn("border-border-mute border-b transition-colors vertical:border-b-0 vertical:border-l", interactive && "hover:bg-bg-mute"),
25
+ children
26
+ });
27
+ const HeaderCell = ({ align = "left", children, scope = "col", ...rest }) => /* @__PURE__ */ jsx("th", {
28
+ ...rest,
29
+ className: cn("px-4 py-3 font-medium text-fg-base", align === "center" && "text-center", align === "right" && "text-right"),
30
+ scope,
31
+ children
32
+ });
33
+ const Cell = ({ align = "left", children, color = "base", ...rest }) => /* @__PURE__ */ jsx("td", {
34
+ ...rest,
35
+ className: cn("px-4 py-3 align-middle", color === "mute" ? "text-fg-mute" : "text-fg-base", align === "center" && "text-center", align === "right" && "text-right"),
36
+ children
37
+ });
38
+ const Caption = ({ children, ...rest }) => /* @__PURE__ */ jsx("caption", {
39
+ ...rest,
40
+ className: "text-fg-mute caption-bottom px-4 py-3 text-sm",
41
+ children
42
+ });
43
+ const EmptyState = ({ children, colSpan }) => /* @__PURE__ */ jsx("tr", {
44
+ className: "border-border-mute border-b transition-colors",
45
+ children: /* @__PURE__ */ jsx("td", {
46
+ className: "text-fg-mute px-4 py-10 text-center align-middle",
47
+ colSpan,
48
+ children
49
+ })
50
+ });
51
+ const Table = {
52
+ Root,
53
+ Head,
54
+ Body,
55
+ Row,
56
+ HeaderCell,
57
+ Cell,
58
+ Caption,
59
+ EmptyState
60
+ };
61
+ //#endregion
62
+ export { Table };
@@ -0,0 +1,19 @@
1
+ import { Status } from "../../../types/variables.mjs";
2
+ import { FC, HTMLAttributes, ReactNode } from "react";
3
+ //#region src/components/feedback/alert/alert.d.ts
4
+ type AlertAction = {
5
+ label: string;
6
+ renderItem: (props: {
7
+ children: ReactNode;
8
+ }) => ReactNode;
9
+ };
10
+ type Props = {
11
+ tone: Status;
12
+ message: string | string[];
13
+ action?: AlertAction;
14
+ onClose?: () => void;
15
+ closeLabel?: string;
16
+ } & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'role' | 'className' | 'style'>;
17
+ declare const Alert: FC<Props>;
18
+ //#endregion
19
+ export { Alert, AlertAction };
@@ -0,0 +1,71 @@
1
+ "use client";
2
+ import { cn } from "../../../helpers/cn.mjs";
3
+ import { useMessages } from "../../../i18n/context.mjs";
4
+ import { IconButton } from "../../buttons/icon-button/icon-button.mjs";
5
+ import { AlertIcon, CloseIcon } from "../../icons/lucide.mjs";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/components/feedback/alert/alert.tsx
8
+ const STATUS_MESSAGE_KEY = {
9
+ success: "alertSuccess",
10
+ info: "alertInfo",
11
+ warning: "alertWarning",
12
+ error: "alertError"
13
+ };
14
+ const Alert = ({ tone, message, action, onClose, closeLabel, ...rest }) => {
15
+ const messages = useMessages();
16
+ const actionNode = action ? action.renderItem({ children: action.label }) : null;
17
+ const inlineAction = action ? /* @__PURE__ */ jsx("span", {
18
+ className: "ml-1",
19
+ children: actionNode
20
+ }) : null;
21
+ let messageContent;
22
+ if (Array.isArray(message) && message.length > 1) {
23
+ const list = /* @__PURE__ */ jsx("ul", {
24
+ className: "space-y-1",
25
+ children: message.map((msg) => /* @__PURE__ */ jsx("li", { children: msg }, msg))
26
+ });
27
+ messageContent = action ? /* @__PURE__ */ jsxs("div", { children: [list, /* @__PURE__ */ jsx("div", {
28
+ className: "mt-1",
29
+ children: actionNode
30
+ })] }) : list;
31
+ } else {
32
+ const text = Array.isArray(message) ? message[0] : message;
33
+ messageContent = /* @__PURE__ */ jsxs("p", {
34
+ className: "font-bold",
35
+ children: [text, inlineAction]
36
+ });
37
+ }
38
+ return /* @__PURE__ */ jsxs("div", {
39
+ ...rest,
40
+ className: cn("flex items-center gap-3 rounded-lg p-4", tone === "success" && "bg-bg-success", tone === "info" && "bg-bg-info", tone === "warning" && "bg-bg-warning", tone === "error" && "bg-bg-error"),
41
+ role: tone === "error" || tone === "warning" ? "alert" : "status",
42
+ children: [
43
+ /* @__PURE__ */ jsxs("span", {
44
+ className: cn("shrink-0", tone === "success" && "text-fg-success", tone === "info" && "text-fg-info", tone === "warning" && "text-fg-warning", tone === "error" && "text-fg-error"),
45
+ children: [/* @__PURE__ */ jsx(AlertIcon, {
46
+ size: "md",
47
+ status: tone
48
+ }), /* @__PURE__ */ jsx("span", {
49
+ className: "sr-only",
50
+ children: messages[STATUS_MESSAGE_KEY[tone]]
51
+ })]
52
+ }),
53
+ /* @__PURE__ */ jsx("div", {
54
+ className: "min-w-0 flex-1",
55
+ children: messageContent
56
+ }),
57
+ onClose ? /* @__PURE__ */ jsx("span", {
58
+ className: "shrink-0",
59
+ children: /* @__PURE__ */ jsx(IconButton, {
60
+ label: closeLabel ?? messages.close,
61
+ onClick: onClose,
62
+ size: "sm",
63
+ tooltipDisabled: true,
64
+ children: /* @__PURE__ */ jsx(CloseIcon, { size: "sm" })
65
+ })
66
+ }) : null
67
+ ]
68
+ });
69
+ };
70
+ //#endregion
71
+ export { Alert };
@@ -0,0 +1,2 @@
1
+ import { Alert, AlertAction } from "./alert.mjs";
2
+ export { Alert, type AlertAction };
@@ -0,0 +1,2 @@
1
+ import { Alert } from "./alert.mjs";
2
+ export { Alert };
@@ -0,0 +1,2 @@
1
+ import { Progress } from "./progress.mjs";
2
+ export { Progress };
@@ -0,0 +1,2 @@
1
+ import { Progress } from "./progress.mjs";
2
+ export { Progress };
@@ -0,0 +1,11 @@
1
+ import { FC, HTMLAttributes } from "react";
2
+ //#region src/components/feedback/progress/progress.d.ts
3
+ type Props = {
4
+ value: number;
5
+ max: number;
6
+ min?: number;
7
+ label?: string;
8
+ } & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className' | 'style'>;
9
+ declare const Progress: FC<Props>;
10
+ //#endregion
11
+ export { Progress };
@@ -0,0 +1,21 @@
1
+ import { toPrecision } from "../../../internal/to-precision.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/components/feedback/progress/progress.tsx
4
+ const Progress = ({ value, max, min = 0, label, ...rest }) => {
5
+ const percentage = toPrecision((value - min) / (max - min) * 100);
6
+ return /* @__PURE__ */ jsx("div", {
7
+ ...rest,
8
+ className: "bg-bg-emphasize vertical:inline-48 rounded-full block-4 inline-full",
9
+ style: { "--progress-fill": `${percentage.toString()}%` },
10
+ children: /* @__PURE__ */ jsx("div", {
11
+ "aria-label": label ?? `${percentage.toString()}%`,
12
+ "aria-valuemax": max,
13
+ "aria-valuemin": min,
14
+ "aria-valuenow": value,
15
+ className: "bg-primary-bg rounded-full transition-[inline-size] block-full inline-(--progress-fill)",
16
+ role: "progressbar"
17
+ })
18
+ });
19
+ };
20
+ //#endregion
21
+ export { Progress };