@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,112 @@
1
+ # 生成 UI(json-render / OpenUI)
2
+
3
+ k8ordo UI は、LLM が k8ordo UI コンポーネントだけで UI を生成できる公式アダプタを同梱している。生成される UI はデザイントークンに固定され、ブランドから外れない。フレームワークは [json-render](https://json-render.dev) と [OpenUI](https://www.openui.com) の 2 つ。
4
+
5
+ いずれも optional peer dependency なので、使うフレームワークだけインストールする。
6
+
7
+ ```bash
8
+ # json-render
9
+ pnpm add @json-render/core @json-render/react zod
10
+ # OpenUI
11
+ pnpm add @openuidev/react-lang zod
12
+ # OpenUI のサーバー安全な prompt エントリを使う場合は追加で:
13
+ pnpm add @openuidev/lang-core
14
+ ```
15
+
16
+ ## json-render
17
+
18
+ catalog(スキーマ・プロンプト)と registry(描画)が分かれており、catalog は**サーバー安全**。
19
+
20
+ ### 1. サーバーでプロンプトを生成する
21
+
22
+ ```tsx
23
+ import { catalog, uiRules } from '@k8ordo/ui/json-render';
24
+
25
+ // customRules は LLM が破りやすい横断制約を注入する
26
+ // (Table のセル数を columns に一致 / href の形式 / Tabs・Accordion の content はテキストのみ)。
27
+ const systemPrompt = catalog.prompt({ customRules: [...uiRules] });
28
+ ```
29
+
30
+ ### 2. クライアントで描画する
31
+
32
+ `JsonRenderUI` が `JSONUIProvider` + `Renderer` + registry を内部結線済みなので、spec を渡すだけでよい。フォーム値を回収するときは `onStateChange` を渡す。
33
+
34
+ ```tsx
35
+ 'use client';
36
+ import { JsonRenderUI } from '@k8ordo/ui/json-render/registry';
37
+
38
+ export function GenUi({ spec }: { spec: unknown }) {
39
+ return <JsonRenderUI spec={spec} />;
40
+ }
41
+ ```
42
+
43
+ 高度な構成(独自の `navigate` / `handlers` / `validationFunctions`)が必要なら、低レベルの `registry` を `@json-render/react` の `JSONUIProvider` / `Renderer` に直接渡す。
44
+
45
+ ### 3. LLM 出力を検証して描画 or 修復する
46
+
47
+ `validateGeneratedSpec` は機械修正 → 構造検証 → コンポーネントごとの props 検証を行い、失敗時はそのまま LLM に投げ返せる修復プロンプトを返す。`catalog.validate()` は現行の上流バージョンで正常 spec を誤って弾くため、こちらを使う。
48
+
49
+ ```tsx
50
+ import { validateGeneratedSpec } from '@k8ordo/ui/json-render';
51
+
52
+ const result = validateGeneratedSpec(JSON.parse(llmOutput));
53
+ if (result.ok) {
54
+ // result.fixes に自動修正の内容
55
+ return <JsonRenderUI spec={result.spec} />;
56
+ }
57
+ // 壊れていたら修復プロンプトで再生成させる
58
+ const retried = await llm(result.repairPrompt);
59
+ ```
60
+
61
+ ### 4. 型付き spec(任意)
62
+
63
+ `satisfies UISpec` で書くと、component 名・props の typo がコンパイルエラーになり、`as unknown as Spec` が不要になる。
64
+
65
+ ```tsx
66
+ import type { UISpec } from '@k8ordo/ui/json-render';
67
+
68
+ const spec = {
69
+ root: 'root',
70
+ elements: {
71
+ root: { type: 'Stack', props: { direction: 'column' }, children: ['ok'] },
72
+ ok: { type: 'Button', props: { label: 'OK' } },
73
+ },
74
+ } satisfies UISpec;
75
+ ```
76
+
77
+ `ComponentName` / `ComponentProps<K>` も export されており、特定コンポーネントの props 型を取り出せる。
78
+
79
+ ## OpenUI
80
+
81
+ 子要素を型付きサブコンポーネント(`z.array(Child.ref)`)で表すモデル。描画は `'use client'`。
82
+
83
+ ```tsx
84
+ 'use client';
85
+ import { library } from '@k8ordo/ui/openui';
86
+ import { Renderer } from '@openuidev/react-lang';
87
+
88
+ export function GenUi({ response }: { response: string }) {
89
+ return <Renderer library={library} response={response} />;
90
+ }
91
+ ```
92
+
93
+ システムプロンプトはサーバー安全な専用エントリで生成できる(json-render の `catalog.prompt()` と対称)。
94
+
95
+ ```tsx
96
+ import { prompt } from '@k8ordo/ui/openui/prompt';
97
+
98
+ const systemPrompt = prompt(); // React 非依存。RSC / API ルートから呼べる
99
+ ```
100
+
101
+ OpenUI では `Stack` / `Grid` の直下に `Stack` / `Grid` / `Card` を置けない(自己参照スキーマ非対応)。入れ子レイアウトが必要なら `Card` の中に `Stack` / `Grid` を入れる。json-render は slots ベースで自由に入れ子にできる。
102
+
103
+ ## エクスポート早見表
104
+
105
+ | エクスポート | 区分 | 内容 |
106
+ | --------------------------------- | -------------- | ------------------------------------------------------------------ |
107
+ | `@k8ordo/ui/json-render` | サーバー安全 | `catalog`, `validateGeneratedSpec`, `uiRules`, 型(`UISpec` など) |
108
+ | `@k8ordo/ui/json-render/registry` | `'use client'` | `JsonRenderUI`(事前結線), `registry`(低レベル) |
109
+ | `@k8ordo/ui/openui` | `'use client'` | `library`(描画) |
110
+ | `@k8ordo/ui/openui/prompt` | サーバー安全 | `prompt()`(プロンプト生成) |
111
+
112
+ > いずれも `@k8ordo/ui/styles.css`(Tailwind CSS 4 のプロジェクトは代わりに `@k8ordo/ui/tailwind.css`)の読み込みと `UIProvider` でのラップが前提。
@@ -0,0 +1,120 @@
1
+ # ヘルパー・型
2
+
3
+ k8ordo UI が提供するユーティリティ関数と型定義。
4
+
5
+ ```tsx
6
+ import { cn, between, commalize, uuidV4 } from '@k8ordo/ui';
7
+ import type { Status, Direction, Option } from '@k8ordo/ui';
8
+ ```
9
+
10
+ ## ヘルパー関数
11
+
12
+ ### cn
13
+
14
+ Tailwind クラスのマージ(clsx + tailwind-merge)。
15
+
16
+ ```tsx
17
+ import { cn } from '@k8ordo/ui';
18
+
19
+ cn('text-fg-base', isActive && 'bg-primary-bg', className);
20
+ // 重複するクラスを自動的に解決
21
+ cn('px-4 py-2', 'px-6'); // → 'py-2 px-6'
22
+ ```
23
+
24
+ ### between
25
+
26
+ 値を範囲内にクランプ。
27
+
28
+ ```tsx
29
+ import { between } from '@k8ordo/ui';
30
+
31
+ between(150, 0, 100); // → 100
32
+ between(-5, 0, 100); // → 0
33
+ between(50, 0, 100); // → 50
34
+ ```
35
+
36
+ ### commalize
37
+
38
+ 数値を3桁区切りでフォーマット。
39
+
40
+ ```tsx
41
+ import { commalize } from '@k8ordo/ui';
42
+
43
+ commalize(1000); // → '1,000'
44
+ commalize(1234567); // → '1,234,567'
45
+ ```
46
+
47
+ ### toPrecision
48
+
49
+ 指定した小数点以下の精度に丸める。
50
+
51
+ ```tsx
52
+ import { toPrecision } from '@k8ordo/ui';
53
+
54
+ toPrecision(3.14159, 2); // → 3.14
55
+ ```
56
+
57
+ ### cast
58
+
59
+ 型キャストユーティリティ。
60
+
61
+ ```tsx
62
+ import { cast } from '@k8ordo/ui';
63
+ ```
64
+
65
+ ### isInternalRoute
66
+
67
+ 内部ルートかどうかの判定。
68
+
69
+ ```tsx
70
+ import { isInternalRoute } from '@k8ordo/ui';
71
+
72
+ isInternalRoute('/about'); // → true
73
+ isInternalRoute('https://ext.com'); // → false
74
+ ```
75
+
76
+ ### findAllColors
77
+
78
+ デザイントークンからすべてのカラーを抽出。
79
+
80
+ ```tsx
81
+ import { findAllColors } from '@k8ordo/ui';
82
+
83
+ const colors = findAllColors();
84
+ ```
85
+
86
+ ### uuidV4
87
+
88
+ UUID v4 の生成。
89
+
90
+ ```tsx
91
+ import { uuidV4 } from '@k8ordo/ui';
92
+
93
+ const id = uuidV4(); // → 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
94
+ ```
95
+
96
+ ## 型定義
97
+
98
+ ### Status
99
+
100
+ ```tsx
101
+ type Status = 'success' | 'info' | 'warning' | 'error';
102
+ ```
103
+
104
+ Alert, Badge, Toast 等のステータス表示に使用。
105
+
106
+ ### Direction
107
+
108
+ ```tsx
109
+ type Direction = 'up' | 'down' | 'right' | 'left';
110
+ ```
111
+
112
+ ChevronIcon 等の方向指定に使用。
113
+
114
+ ### Option
115
+
116
+ ```tsx
117
+ type Option = { value: string; label: string };
118
+ ```
119
+
120
+ Select, Autocomplete 等の選択肢に使用。
@@ -0,0 +1,314 @@
1
+ # Hooks
2
+
3
+ k8ordo UI が提供するカスタムフック。
4
+
5
+ ```tsx
6
+ import { useDisclosure, useDeferredDebounce } from '@k8ordo/ui';
7
+ ```
8
+
9
+ ## 状態管理
10
+
11
+ ### useDisclosure
12
+
13
+ 開閉状態のトグル管理。
14
+
15
+ ```tsx
16
+ const { isOpen, open, close, toggle } = useDisclosure();
17
+ ```
18
+
19
+ ### useControllableState
20
+
21
+ Controlled / Uncontrolled を透過的に扱うパターン。
22
+
23
+ ```tsx
24
+ const [value, setValue] = useControllableState({
25
+ value: controlledValue,
26
+ defaultValue: 'default',
27
+ onChange: onControlledChange,
28
+ });
29
+ ```
30
+
31
+ ### useStep
32
+
33
+ ステップカウンター。進む/戻るの制御。
34
+
35
+ ```tsx
36
+ const { count, next, back, isDisabledBack, isDisabledNext } = useStep({
37
+ initialCount: 0,
38
+ maxCount: 5,
39
+ });
40
+ ```
41
+
42
+ ### useHash
43
+
44
+ URL ハッシュの読み取り(読み取り専用)。
45
+
46
+ ```tsx
47
+ const hash = useHash(); // string | null
48
+ ```
49
+
50
+ ## ストレージ
51
+
52
+ ### useLocalStorage
53
+
54
+ LocalStorage と同期した状態。`remove` で削除も可能。
55
+
56
+ ```tsx
57
+ const [value, setValue, remove] = useLocalStorage<string>('key', 'default');
58
+ ```
59
+
60
+ ### useSessionStorage
61
+
62
+ SessionStorage と同期した状態。`remove` で削除も可能。
63
+
64
+ ```tsx
65
+ const [value, setValue, remove] = useSessionStorage<string>('key', 'default');
66
+ ```
67
+
68
+ ## イベント
69
+
70
+ ### useClickAway
71
+
72
+ 要素外クリックの検知。ref と callback を引数に取る。
73
+
74
+ ```tsx
75
+ const ref = useRef<HTMLDivElement>(null);
76
+
77
+ useClickAway(ref, (e) => {
78
+ console.log('外側をクリック');
79
+ });
80
+ ```
81
+
82
+ 引数:
83
+
84
+ - `ref`: `RefObject<T | null>`
85
+ - `callback`: `(e: Event) => void`
86
+ - `enabled`: boolean(デフォルト: `true`)
87
+
88
+ ### useHover
89
+
90
+ ホバー状態の検知。`hoverProps` を要素に spread する。
91
+
92
+ ```tsx
93
+ const { isHovered, hoverProps } = useHover();
94
+
95
+ <div {...hoverProps}>{isHovered ? 'ホバー中' : '通常'}</div>;
96
+ ```
97
+
98
+ `hoverProps` は `{ onPointerEnter, onPointerLeave }` を含む。
99
+
100
+ ## タイミング
101
+
102
+ > `useDeferredDebounce` と `useDebouncedTransition` は役割が異なります。
103
+ >
104
+ > - **`useDeferredDebounce`**: **描画の遅延**(render defer)。React スケジューラが重い再レンダーを後回しにするだけで、遅延時間の保証はない。副作用(fetch / 外部 API)を間引く用途には使えない。
105
+ > - **`useDebouncedTransition`**: **副作用の間引き**(rate limiting)。指定した `delay` を待ってからアクションを実行し、再呼び出し時には前回の `AbortSignal` を abort する。fetch など「軽々しく連射したくない処理」に使う。
106
+
107
+ ### useDeferredDebounce
108
+
109
+ `useDeferredValue` をラップし、値と「追いついていない」ペンディング状態を返す。入力に応じてリストを絞り込むような **純 UI 用途のみ** 向け。
110
+
111
+ ```tsx
112
+ const [deferredValue, isPending] = useDeferredDebounce(inputValue);
113
+ ```
114
+
115
+ 戻り値:
116
+
117
+ - `[T, boolean]` — `[deferredValue, isPending]`
118
+
119
+ ### useDebouncedTransition
120
+
121
+ `startTransition(async)` と `AbortController` を組み合わせ、delay 経過後にアクションを実行する。再呼び出し時は前回のアクションに渡した signal を abort し、action 内が `fetch({ signal })` 等で AbortError を投げても未処理 rejection にはならない。
122
+
123
+ ```tsx
124
+ const [isPending, run] = useDebouncedTransition(300);
125
+
126
+ const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
127
+ const q = e.target.value;
128
+ setQuery(q);
129
+ run(async (signal) => {
130
+ const res = await fetch(`/api/search?q=${q}`, { signal });
131
+ setResults(await res.json());
132
+ });
133
+ };
134
+ ```
135
+
136
+ 戻り値:
137
+
138
+ - `[boolean, (action: (signal: AbortSignal) => void | Promise<void>) => void]`
139
+
140
+ ### useInterval
141
+
142
+ 定期実行。
143
+
144
+ ```tsx
145
+ useInterval(() => {
146
+ fetchData();
147
+ }, 5000);
148
+ ```
149
+
150
+ ### useTimeout
151
+
152
+ 遅延実行。
153
+
154
+ ```tsx
155
+ useTimeout(() => {
156
+ hideMessage();
157
+ }, 3000);
158
+ ```
159
+
160
+ ## DOM・ブラウザ
161
+
162
+ ### useWindowSize
163
+
164
+ ウィンドウサイズの取得。
165
+
166
+ ```tsx
167
+ const { width, height } = useWindowSize();
168
+ ```
169
+
170
+ ### useWindowResize
171
+
172
+ ウィンドウリサイズのリスナー。コールバックに `{ width, height }` が渡される。
173
+
174
+ ```tsx
175
+ useWindowResize(
176
+ (size) => {
177
+ recalculate(size.width, size.height);
178
+ },
179
+ { enabled: true },
180
+ );
181
+ ```
182
+
183
+ 引数:
184
+
185
+ - `callback`: `(size: { width: number; height: number }) => void`
186
+ - `options`: `{ enabled?: boolean }`
187
+
188
+ ### useResize
189
+
190
+ 要素のリサイズ監視(ResizeObserver)。ref を引数に取る。
191
+
192
+ ```tsx
193
+ const ref = useRef<HTMLDivElement>(null);
194
+
195
+ useResize(
196
+ ref,
197
+ (entry) => {
198
+ console.log(entry.contentRect);
199
+ },
200
+ { enabled: true },
201
+ );
202
+ ```
203
+
204
+ 引数:
205
+
206
+ - `ref`: `RefObject<T | null>`
207
+ - `callback`: `(entry: ResizeObserverEntry) => void`
208
+ - `options`: `{ enabled?: boolean }`
209
+
210
+ ### useIntersectionObserver
211
+
212
+ 交差オブザーバー。ref を引数に取る。
213
+
214
+ ```tsx
215
+ const ref = useRef<HTMLDivElement>(null);
216
+
217
+ useIntersectionObserver(
218
+ ref,
219
+ (entry) => {
220
+ console.log(entry.isIntersecting);
221
+ },
222
+ { threshold: 0.5 },
223
+ );
224
+ ```
225
+
226
+ 引数:
227
+
228
+ - `ref`: `RefObject<T | null>`
229
+ - `callback`: `(entry: IntersectionObserverEntry) => void`
230
+ - `options`: IntersectionObserver のオプション
231
+
232
+ ### useInView
233
+
234
+ 要素の表示状態。ref を引数に取り、boolean を返す。
235
+
236
+ ```tsx
237
+ const ref = useRef<HTMLDivElement>(null);
238
+ const isInView = useInView(ref, { threshold: 0.1 });
239
+ ```
240
+
241
+ 引数:
242
+
243
+ - `ref`: `RefObject<T | null>`
244
+ - `options`: IntersectionObserver のオプション
245
+
246
+ ### useScrollDirection
247
+
248
+ スクロール方向の検知。X 軸と Y 軸の両方を返す。
249
+
250
+ ```tsx
251
+ const { x, y } = useScrollDirection();
252
+ // x: 'left' | 'right'
253
+ // y: 'up' | 'down'
254
+ ```
255
+
256
+ ### useScrollLock
257
+
258
+ body のスクロールロック。lock / unlock 関数を返す。
259
+
260
+ ```tsx
261
+ const { lock, unlock } = useScrollLock();
262
+
263
+ // モーダルを開くとき
264
+ lock();
265
+
266
+ // モーダルを閉じるとき
267
+ unlock();
268
+ ```
269
+
270
+ ### useWritingMode
271
+
272
+ 要素の `writing-mode` を検知し、`'horizontal'` または `'vertical'` を返す。`vertical-*` / `sideways-*` はすべて `'vertical'` として正規化される。ResizeObserver で監視し、SSR では `'horizontal'` を返す。
273
+
274
+ ```tsx
275
+ const ref = useRef<HTMLDivElement>(null);
276
+ const writingMode = useWritingMode(ref); // 'horizontal' | 'vertical'
277
+ ```
278
+
279
+ 引数:
280
+
281
+ - `ref`: `RefObject<Element | null>`
282
+
283
+ 戻り値:
284
+
285
+ - `'horizontal' | 'vertical'`
286
+
287
+ ### useBreakpoint
288
+
289
+ Tailwind ブレークポイントの判定。
290
+
291
+ ```tsx
292
+ const isMd = useBreakpoint('md'); // 768px 以上かどうか
293
+ ```
294
+
295
+ ## ユーティリティ
296
+
297
+ ### useClient
298
+
299
+ クライアントサイドかどうか。
300
+
301
+ ```tsx
302
+ const isClient = useClient();
303
+ ```
304
+
305
+ ### useClipboard
306
+
307
+ クリップボードの読み書き。
308
+
309
+ ```tsx
310
+ const { writeClipboard, readClipboard } = useClipboard();
311
+
312
+ await writeClipboard('コピーするテキスト');
313
+ const text = await readClipboard();
314
+ ```
@@ -0,0 +1,95 @@
1
+ # インタラクションデザイン
2
+
3
+ k8ordo UI のインタラクションは「静かな変化」を原則とする。
4
+
5
+ ## インタラクティブ状態
6
+
7
+ 8つの状態を意識して設計する。
8
+
9
+ | 状態 | スタイル |
10
+ | -------- | ----------------------------------------------------- |
11
+ | Default | 基本スタイル |
12
+ | Hover | `hover:bg-bg-mute` — 穏やかな色変化 |
13
+ | Focus | `focus-visible:ring-2 focus-visible:ring-border-info` |
14
+ | Active | `active:bg-bg-emphasize` |
15
+ | Disabled | `opacity-50 cursor-not-allowed` |
16
+ | Loading | スピナーまたはスケルトン |
17
+ | Selected | `bg-primary-bg-subtle` |
18
+ | Error | `border-border-error` + `text-fg-error` |
19
+
20
+ ## トランジション
21
+
22
+ 控えめで自然な動き。
23
+
24
+ | 用途 | 推奨設定 |
25
+ | -------------------- | ------------------------------------------ |
26
+ | ホバー色変化 | `transition-colors duration-150 ease-out` |
27
+ | 透過度変化 | `transition-opacity duration-200 ease-out` |
28
+ | サイズ変化を伴う場合 | `transition-all duration-150 ease-out` |
29
+
30
+ ### タイミングの原則
31
+
32
+ - **100ms**: 即時フィードバック(ボタンプレス)
33
+ - **150–200ms**: 標準トランジション(ホバー、フォーカス)
34
+ - **300ms**: 開閉アニメーション(Accordion, Drawer の限度)
35
+ - **300ms を超えない** — 重く感じる
36
+
37
+ ### アニメーションの選択
38
+
39
+ ```tsx
40
+ // Good: transition-colors(色だけ変わる)
41
+ className = 'transition-colors hover:bg-bg-mute';
42
+
43
+ // OK: transition-all(複数のプロパティが変わる場合のみ)
44
+ className = 'transition-all hover:bg-bg-mute hover:scale-[1.02]';
45
+
46
+ // Bad: bounce, spring 系のイージング
47
+ className = 'animate-bounce';
48
+ ```
49
+
50
+ ## フォーカス管理
51
+
52
+ - `focus-visible` を使う(`focus` ではなく)— マウスクリック時にリングが出ない
53
+ - フォーカスリングは `ring-border-info` で統一
54
+ - `outline-hidden` でデフォルトのアウトラインを消してから ring を適用
55
+
56
+ ```tsx
57
+ className =
58
+ 'focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-border-info';
59
+ ```
60
+
61
+ ## フォームデザイン
62
+
63
+ - ラベルは入力の上に配置(左配置は日本語で読みにくい)
64
+ - エラーメッセージは入力の直下に `text-fg-error text-sm`
65
+ - 必須マークは `*` でラベルの後ろに
66
+ - バリデーションは送信時に行う(リアルタイムは控えめに)
67
+ - `FormControl` コンポーネントでラベル・エラー表示を統一
68
+
69
+ ```tsx
70
+ import { FormControl, TextField } from '@k8ordo/ui';
71
+
72
+ <FormControl
73
+ label="メールアドレス"
74
+ errorText="入力してください"
75
+ required
76
+ renderInput={(props) => (
77
+ <TextField {...props} placeholder="example@mail.com" />
78
+ )}
79
+ />;
80
+ ```
81
+
82
+ ## アクセシビリティ
83
+
84
+ - `aria-label` / `aria-describedby` を適切に設定
85
+ - キーボードナビゲーションを確保(Tab, Enter, Escape, 矢印キー)
86
+ - `prefers-reduced-motion` を考慮 — motion ライブラリが自動対応
87
+ - カラーだけに頼らない状態表現(アイコンやテキストを併用)
88
+
89
+ ## やってはいけないこと
90
+
91
+ - bounce / spring 系のイージング
92
+ - 300ms を超えるアニメーション
93
+ - ホバーに強い原色(`bg-primary-bg`)を使う
94
+ - `cursor-pointer` をボタン以外に付ける(リンクにも不要)
95
+ - ダブルクリック防止なしの送信ボタン