@soave/ui 0.3.2 → 0.5.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 (310) hide show
  1. package/dist/adapters/css-variables.d.ts +2 -1
  2. package/dist/adapters/css-variables.d.ts.map +1 -0
  3. package/dist/adapters/headless.d.ts +2 -1
  4. package/dist/adapters/headless.d.ts.map +1 -0
  5. package/dist/adapters/index.d.ts +6 -5
  6. package/dist/adapters/index.d.ts.map +1 -0
  7. package/dist/adapters/tailwind.d.ts +2 -1
  8. package/dist/adapters/tailwind.d.ts.map +1 -0
  9. package/dist/adapters/types.d.ts +2 -1
  10. package/dist/adapters/types.d.ts.map +1 -0
  11. package/dist/adapters.d.ts +2 -0
  12. package/dist/{adapters/css-variables.mjs → adapters.mjs} +33 -2
  13. package/dist/adapters.mjs.map +1 -0
  14. package/dist/components/Alert.vue.d.ts +23 -0
  15. package/dist/components/Alert.vue.d.ts.map +1 -0
  16. package/dist/components/AlertDescription.vue.d.ts +18 -0
  17. package/dist/components/AlertDescription.vue.d.ts.map +1 -0
  18. package/dist/components/AlertTitle.vue.d.ts +18 -0
  19. package/dist/components/AlertTitle.vue.d.ts.map +1 -0
  20. package/dist/components/Button.vue.d.ts +35 -0
  21. package/dist/components/Button.vue.d.ts.map +1 -0
  22. package/dist/components/Card.vue.d.ts +29 -0
  23. package/dist/components/Card.vue.d.ts.map +1 -0
  24. package/dist/components/CardContent.vue.d.ts +18 -0
  25. package/dist/components/CardContent.vue.d.ts.map +1 -0
  26. package/dist/components/CardDescription.vue.d.ts +18 -0
  27. package/dist/components/CardDescription.vue.d.ts.map +1 -0
  28. package/dist/components/CardFooter.vue.d.ts +18 -0
  29. package/dist/components/CardFooter.vue.d.ts.map +1 -0
  30. package/dist/components/CardHeader.vue.d.ts +18 -0
  31. package/dist/components/CardHeader.vue.d.ts.map +1 -0
  32. package/dist/components/CardTitle.vue.d.ts +18 -0
  33. package/dist/components/CardTitle.vue.d.ts.map +1 -0
  34. package/dist/components/Checkbox.vue.d.ts +39 -0
  35. package/dist/components/Checkbox.vue.d.ts.map +1 -0
  36. package/dist/components/Dialog.vue.d.ts +46 -0
  37. package/dist/components/Dialog.vue.d.ts.map +1 -0
  38. package/dist/components/DialogContent.vue.d.ts +24 -0
  39. package/dist/components/DialogContent.vue.d.ts.map +1 -0
  40. package/dist/components/DialogDescription.vue.d.ts +21 -0
  41. package/dist/components/DialogDescription.vue.d.ts.map +1 -0
  42. package/dist/components/DialogFooter.vue.d.ts +18 -0
  43. package/dist/components/DialogFooter.vue.d.ts.map +1 -0
  44. package/dist/components/DialogHeader.vue.d.ts +18 -0
  45. package/dist/components/DialogHeader.vue.d.ts.map +1 -0
  46. package/dist/components/DialogOverlay.vue.d.ts +7 -0
  47. package/dist/components/DialogOverlay.vue.d.ts.map +1 -0
  48. package/dist/components/DialogTitle.vue.d.ts +21 -0
  49. package/dist/components/DialogTitle.vue.d.ts.map +1 -0
  50. package/dist/components/DialogTrigger.vue.d.ts +20 -0
  51. package/dist/components/DialogTrigger.vue.d.ts.map +1 -0
  52. package/dist/components/DropdownMenu.vue.d.ts +33 -0
  53. package/dist/components/DropdownMenu.vue.d.ts.map +1 -0
  54. package/dist/components/DropdownMenuContent.vue.d.ts +25 -0
  55. package/dist/components/DropdownMenuContent.vue.d.ts.map +1 -0
  56. package/dist/components/DropdownMenuItem.vue.d.ts +29 -0
  57. package/dist/components/DropdownMenuItem.vue.d.ts.map +1 -0
  58. package/dist/components/DropdownMenuLabel.vue.d.ts +18 -0
  59. package/dist/components/DropdownMenuLabel.vue.d.ts.map +1 -0
  60. package/dist/components/DropdownMenuSeparator.vue.d.ts +3 -0
  61. package/dist/components/DropdownMenuSeparator.vue.d.ts.map +1 -0
  62. package/dist/components/DropdownMenuTrigger.vue.d.ts +24 -0
  63. package/dist/components/DropdownMenuTrigger.vue.d.ts.map +1 -0
  64. package/dist/components/FileInput.vue.d.ts +81 -0
  65. package/dist/components/FileInput.vue.d.ts.map +1 -0
  66. package/dist/components/FormError.vue.d.ts +21 -0
  67. package/dist/components/FormError.vue.d.ts.map +1 -0
  68. package/dist/components/FormField.vue.d.ts +26 -0
  69. package/dist/components/FormField.vue.d.ts.map +1 -0
  70. package/dist/components/FormInput.vue.d.ts +19 -0
  71. package/dist/components/FormInput.vue.d.ts.map +1 -0
  72. package/dist/components/FormLabel.vue.d.ts +21 -0
  73. package/dist/components/FormLabel.vue.d.ts.map +1 -0
  74. package/dist/components/FormTextarea.vue.d.ts +19 -0
  75. package/dist/components/FormTextarea.vue.d.ts.map +1 -0
  76. package/dist/components/Input.vue.d.ts +24 -0
  77. package/dist/components/Input.vue.d.ts.map +1 -0
  78. package/dist/components/Popover.vue.d.ts +38 -0
  79. package/dist/components/Popover.vue.d.ts.map +1 -0
  80. package/dist/components/PopoverContent.vue.d.ts +25 -0
  81. package/dist/components/PopoverContent.vue.d.ts.map +1 -0
  82. package/dist/components/PopoverTrigger.vue.d.ts +24 -0
  83. package/dist/components/PopoverTrigger.vue.d.ts.map +1 -0
  84. package/dist/components/RadioGroup.vue.d.ts +32 -0
  85. package/dist/components/RadioGroup.vue.d.ts.map +1 -0
  86. package/dist/components/RadioItem.vue.d.ts +40 -0
  87. package/dist/components/RadioItem.vue.d.ts.map +1 -0
  88. package/dist/components/Select.vue.d.ts +50 -0
  89. package/dist/components/Select.vue.d.ts.map +1 -0
  90. package/dist/components/SelectContent.vue.d.ts +25 -0
  91. package/dist/components/SelectContent.vue.d.ts.map +1 -0
  92. package/dist/components/SelectItem.vue.d.ts +36 -0
  93. package/dist/components/SelectItem.vue.d.ts.map +1 -0
  94. package/dist/components/SelectTrigger.vue.d.ts +36 -0
  95. package/dist/components/SelectTrigger.vue.d.ts.map +1 -0
  96. package/dist/components/SelectValue.vue.d.ts +24 -0
  97. package/dist/components/SelectValue.vue.d.ts.map +1 -0
  98. package/dist/components/Sheet.vue.d.ts +42 -0
  99. package/dist/components/Sheet.vue.d.ts.map +1 -0
  100. package/dist/components/SheetClose.vue.d.ts +20 -0
  101. package/dist/components/SheetClose.vue.d.ts.map +1 -0
  102. package/dist/components/SheetContent.vue.d.ts +18 -0
  103. package/dist/components/SheetContent.vue.d.ts.map +1 -0
  104. package/dist/components/SheetDescription.vue.d.ts +18 -0
  105. package/dist/components/SheetDescription.vue.d.ts.map +1 -0
  106. package/dist/components/SheetFooter.vue.d.ts +18 -0
  107. package/dist/components/SheetFooter.vue.d.ts.map +1 -0
  108. package/dist/components/SheetHeader.vue.d.ts +18 -0
  109. package/dist/components/SheetHeader.vue.d.ts.map +1 -0
  110. package/dist/components/SheetOverlay.vue.d.ts +3 -0
  111. package/dist/components/SheetOverlay.vue.d.ts.map +1 -0
  112. package/dist/components/SheetTitle.vue.d.ts +18 -0
  113. package/dist/components/SheetTitle.vue.d.ts.map +1 -0
  114. package/dist/components/SheetTrigger.vue.d.ts +20 -0
  115. package/dist/components/SheetTrigger.vue.d.ts.map +1 -0
  116. package/dist/components/Switch.vue.d.ts +46 -0
  117. package/dist/components/Switch.vue.d.ts.map +1 -0
  118. package/dist/components/Textarea.vue.d.ts +41 -0
  119. package/dist/components/Textarea.vue.d.ts.map +1 -0
  120. package/dist/components/Toast.vue.d.ts +35 -0
  121. package/dist/components/Toast.vue.d.ts.map +1 -0
  122. package/dist/components/ToastClose.vue.d.ts +22 -0
  123. package/dist/components/ToastClose.vue.d.ts.map +1 -0
  124. package/dist/components/ToastDescription.vue.d.ts +18 -0
  125. package/dist/components/ToastDescription.vue.d.ts.map +1 -0
  126. package/dist/components/ToastTitle.vue.d.ts +18 -0
  127. package/dist/components/ToastTitle.vue.d.ts.map +1 -0
  128. package/dist/components/Toaster.vue.d.ts +58 -0
  129. package/dist/components/Toaster.vue.d.ts.map +1 -0
  130. package/dist/components/Tooltip.vue.d.ts +34 -0
  131. package/dist/components/Tooltip.vue.d.ts.map +1 -0
  132. package/dist/components/TooltipContent.vue.d.ts +23 -0
  133. package/dist/components/TooltipContent.vue.d.ts.map +1 -0
  134. package/dist/components/TooltipTrigger.vue.d.ts +22 -0
  135. package/dist/components/TooltipTrigger.vue.d.ts.map +1 -0
  136. package/dist/components/index.d.ts +62 -13
  137. package/dist/components/index.d.ts.map +1 -0
  138. package/dist/composables/index.d.ts +18 -17
  139. package/dist/composables/index.d.ts.map +1 -0
  140. package/dist/composables/useButton.d.ts +3 -2
  141. package/dist/composables/useButton.d.ts.map +1 -0
  142. package/dist/composables/useCard.d.ts +3 -2
  143. package/dist/composables/useCard.d.ts.map +1 -0
  144. package/dist/composables/useCheckbox.d.ts +3 -2
  145. package/dist/composables/useCheckbox.d.ts.map +1 -0
  146. package/dist/composables/useDialog.d.ts +2 -1
  147. package/dist/composables/useDialog.d.ts.map +1 -0
  148. package/dist/composables/useDropdown.d.ts +3 -2
  149. package/dist/composables/useDropdown.d.ts.map +1 -0
  150. package/dist/composables/useFileInput.d.ts +3 -2
  151. package/dist/composables/useFileInput.d.ts.map +1 -0
  152. package/dist/composables/useForm.d.ts +3 -2
  153. package/dist/composables/useForm.d.ts.map +1 -0
  154. package/dist/composables/useInput.d.ts +3 -2
  155. package/dist/composables/useInput.d.ts.map +1 -0
  156. package/dist/composables/usePopover.d.ts +3 -2
  157. package/dist/composables/usePopover.d.ts.map +1 -0
  158. package/dist/composables/useRadio.d.ts +3 -2
  159. package/dist/composables/useRadio.d.ts.map +1 -0
  160. package/dist/composables/useSelect.d.ts +3 -2
  161. package/dist/composables/useSelect.d.ts.map +1 -0
  162. package/dist/composables/useSwitch.d.ts +3 -2
  163. package/dist/composables/useSwitch.d.ts.map +1 -0
  164. package/dist/composables/useTextarea.d.ts +3 -2
  165. package/dist/composables/useTextarea.d.ts.map +1 -0
  166. package/dist/composables/useTheme.d.ts +3 -2
  167. package/dist/composables/useTheme.d.ts.map +1 -0
  168. package/dist/composables/useToast.d.ts +2 -1
  169. package/dist/composables/useToast.d.ts.map +1 -0
  170. package/dist/composables/useTooltip.d.ts +3 -2
  171. package/dist/composables/useTooltip.d.ts.map +1 -0
  172. package/dist/composables/useUIConfig.d.ts +5 -4
  173. package/dist/composables/useUIConfig.d.ts.map +1 -0
  174. package/dist/composables.d.ts +2 -0
  175. package/dist/composables.mjs +30 -0
  176. package/dist/composables.mjs.map +1 -0
  177. package/dist/constants/errors.d.ts +1 -0
  178. package/dist/constants/errors.d.ts.map +1 -0
  179. package/dist/constants/index.d.ts +3 -2
  180. package/dist/constants/index.d.ts.map +1 -0
  181. package/dist/constants/logs.d.ts +1 -0
  182. package/dist/constants/logs.d.ts.map +1 -0
  183. package/dist/index.d.ts +7 -6
  184. package/dist/index.d.ts.map +1 -0
  185. package/dist/index.mjs +2109 -6
  186. package/dist/index.mjs.map +1 -0
  187. package/dist/{adapters/tailwind.mjs → tailwind-B-R7fPT1.js} +16 -7
  188. package/dist/tailwind-B-R7fPT1.js.map +1 -0
  189. package/dist/types/alert.d.ts +2 -1
  190. package/dist/types/alert.d.ts.map +1 -0
  191. package/dist/types/button.d.ts +2 -1
  192. package/dist/types/button.d.ts.map +1 -0
  193. package/dist/types/card.d.ts +2 -1
  194. package/dist/types/card.d.ts.map +1 -0
  195. package/dist/types/checkbox.d.ts +2 -1
  196. package/dist/types/checkbox.d.ts.map +1 -0
  197. package/dist/types/composables.d.ts +10 -1
  198. package/dist/types/composables.d.ts.map +1 -0
  199. package/dist/types/config.d.ts +6 -5
  200. package/dist/types/config.d.ts.map +1 -0
  201. package/dist/types/dialog.d.ts +2 -1
  202. package/dist/types/dialog.d.ts.map +1 -0
  203. package/dist/types/dropdown.d.ts +3 -2
  204. package/dist/types/dropdown.d.ts.map +1 -0
  205. package/dist/types/file-input.d.ts +2 -1
  206. package/dist/types/file-input.d.ts.map +1 -0
  207. package/dist/types/form.d.ts +2 -1
  208. package/dist/types/form.d.ts.map +1 -0
  209. package/dist/types/index.d.ts +22 -21
  210. package/dist/types/index.d.ts.map +1 -0
  211. package/dist/types/input.d.ts +2 -1
  212. package/dist/types/input.d.ts.map +1 -0
  213. package/dist/types/popover.d.ts +3 -2
  214. package/dist/types/popover.d.ts.map +1 -0
  215. package/dist/types/radio.d.ts +2 -1
  216. package/dist/types/radio.d.ts.map +1 -0
  217. package/dist/types/select.d.ts +2 -1
  218. package/dist/types/select.d.ts.map +1 -0
  219. package/dist/types/sheet.d.ts +2 -1
  220. package/dist/types/sheet.d.ts.map +1 -0
  221. package/dist/types/switch.d.ts +2 -1
  222. package/dist/types/switch.d.ts.map +1 -0
  223. package/dist/types/textarea.d.ts +2 -1
  224. package/dist/types/textarea.d.ts.map +1 -0
  225. package/dist/types/theme.d.ts +1 -0
  226. package/dist/types/theme.d.ts.map +1 -0
  227. package/dist/types/toast.d.ts +1 -0
  228. package/dist/types/toast.d.ts.map +1 -0
  229. package/dist/types/tooltip.d.ts +3 -2
  230. package/dist/types/tooltip.d.ts.map +1 -0
  231. package/dist/types/utils.d.ts +1 -0
  232. package/dist/types/utils.d.ts.map +1 -0
  233. package/dist/useTheme-C2uPqAtQ.js +1175 -0
  234. package/dist/useTheme-C2uPqAtQ.js.map +1 -0
  235. package/dist/utils/cn.d.ts +2 -1
  236. package/dist/utils/cn.d.ts.map +1 -0
  237. package/dist/utils/deepMerge.d.ts +2 -1
  238. package/dist/utils/deepMerge.d.ts.map +1 -0
  239. package/dist/utils/index.d.ts +3 -2
  240. package/dist/utils/index.d.ts.map +1 -0
  241. package/package.json +6 -4
  242. package/dist/adapters/headless.mjs +0 -7
  243. package/dist/adapters/index.mjs +0 -11
  244. package/dist/adapters/types.mjs +0 -10
  245. package/dist/build.config.d.ts +0 -2
  246. package/dist/build.config.mjs +0 -14
  247. package/dist/components/Button.vue +0 -41
  248. package/dist/components/Card.vue +0 -24
  249. package/dist/components/Checkbox.vue +0 -47
  250. package/dist/components/Dialog.vue +0 -105
  251. package/dist/components/Input.vue +0 -48
  252. package/dist/components/RadioGroup.vue +0 -45
  253. package/dist/components/RadioItem.vue +0 -65
  254. package/dist/components/Select.vue +0 -114
  255. package/dist/components/SelectContent.vue +0 -54
  256. package/dist/components/SelectItem.vue +0 -61
  257. package/dist/components/SelectTrigger.vue +0 -75
  258. package/dist/components/Switch.vue +0 -45
  259. package/dist/components/Textarea.vue +0 -55
  260. package/dist/components/index.mjs +0 -13
  261. package/dist/composables/index.mjs +0 -17
  262. package/dist/composables/useButton.mjs +0 -22
  263. package/dist/composables/useCard.mjs +0 -11
  264. package/dist/composables/useCheckbox.mjs +0 -18
  265. package/dist/composables/useDialog.mjs +0 -19
  266. package/dist/composables/useDropdown.mjs +0 -170
  267. package/dist/composables/useFileInput.mjs +0 -137
  268. package/dist/composables/useForm.mjs +0 -159
  269. package/dist/composables/useInput.mjs +0 -31
  270. package/dist/composables/usePopover.mjs +0 -113
  271. package/dist/composables/useRadio.mjs +0 -23
  272. package/dist/composables/useSelect.mjs +0 -42
  273. package/dist/composables/useSwitch.mjs +0 -17
  274. package/dist/composables/useTextarea.mjs +0 -29
  275. package/dist/composables/useTheme.mjs +0 -89
  276. package/dist/composables/useToast.mjs +0 -64
  277. package/dist/composables/useTooltip.mjs +0 -125
  278. package/dist/composables/useUIConfig.mjs +0 -53
  279. package/dist/constants/errors.mjs +0 -18
  280. package/dist/constants/index.mjs +0 -2
  281. package/dist/constants/logs.mjs +0 -17
  282. package/dist/env.d.ts +0 -11
  283. package/dist/styles/css-variables.css +0 -1
  284. package/dist/styles/index.d.ts +0 -1
  285. package/dist/styles/index.mjs +0 -1
  286. package/dist/types/alert.mjs +0 -0
  287. package/dist/types/button.mjs +0 -0
  288. package/dist/types/card.mjs +0 -0
  289. package/dist/types/checkbox.mjs +0 -0
  290. package/dist/types/composables.mjs +0 -0
  291. package/dist/types/config.mjs +0 -15
  292. package/dist/types/dialog.mjs +0 -1
  293. package/dist/types/dropdown.mjs +0 -1
  294. package/dist/types/file-input.mjs +0 -0
  295. package/dist/types/form.mjs +0 -0
  296. package/dist/types/index.mjs +0 -21
  297. package/dist/types/input.mjs +0 -0
  298. package/dist/types/popover.mjs +0 -1
  299. package/dist/types/radio.mjs +0 -1
  300. package/dist/types/select.mjs +0 -1
  301. package/dist/types/sheet.mjs +0 -1
  302. package/dist/types/switch.mjs +0 -0
  303. package/dist/types/textarea.mjs +0 -0
  304. package/dist/types/theme.mjs +0 -42
  305. package/dist/types/toast.mjs +0 -0
  306. package/dist/types/tooltip.mjs +0 -1
  307. package/dist/types/utils.mjs +0 -0
  308. package/dist/utils/cn.mjs +0 -5
  309. package/dist/utils/deepMerge.mjs +0 -18
  310. package/dist/utils/index.mjs +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme-C2uPqAtQ.js","sources":["../types/config.ts","../utils/deepMerge.ts","../constants/errors.ts","../composables/useUIConfig.ts","../composables/useButton.ts","../composables/useInput.ts","../composables/useCard.ts","../composables/useDialog.ts","../composables/useForm.ts","../composables/useCheckbox.ts","../types/radio.ts","../composables/useRadio.ts","../composables/useSwitch.ts","../composables/useTextarea.ts","../types/select.ts","../composables/useSelect.ts","../composables/useFileInput.ts","../composables/useToast.ts","../composables/useTooltip.ts","../composables/usePopover.ts","../composables/useDropdown.ts","../composables/useTheme.ts"],"sourcesContent":["import type { ButtonVariant, ButtonSize } from \"./button\"\nimport type { InputSize } from \"./input\"\nimport type { CardPadding } from \"./card\"\nimport type { AlertVariant } from \"./alert\"\nimport type { StyleAdapter } from \"../adapters/types\"\n\n/**\n * UIコンポーネントのグローバル設定\n */\nexport interface UIConfig {\n [key: string]: unknown\n button: ButtonConfig\n input: InputConfig\n card: CardConfig\n alert: AlertConfig\n}\n\n/**\n * UIProvider のコンテキスト(設定 + Adapter)\n */\nexport interface UIProviderContext {\n config: UIConfig\n adapter: StyleAdapter\n}\n\nexport interface ButtonConfig {\n default_variant: ButtonVariant\n default_size: ButtonSize\n}\n\nexport interface InputConfig {\n default_size: InputSize\n}\n\nexport interface CardConfig {\n default_padding: CardPadding\n}\n\nexport interface AlertConfig {\n default_variant: AlertVariant\n}\n\n/**\n * デフォルト設定\n */\nexport const DEFAULT_UI_CONFIG: UIConfig = {\n button: {\n default_variant: \"primary\",\n default_size: \"md\"\n },\n input: {\n default_size: \"md\"\n },\n card: {\n default_padding: \"md\"\n },\n alert: {\n default_variant: \"default\"\n }\n}\n","import type { DeepPartial } from \"../types/utils\"\n\n/**\n * オブジェクトを深層マージするユーティリティ関数\n * sourceの値でtargetを上書きする(undefinedは無視)\n */\nexport const deepMerge = <T extends Record<string, unknown>>(\n target: T,\n source: DeepPartial<T>\n): T => {\n const output = { ...target }\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const source_value = source[key]\n const target_value = target[key]\n\n if (\n source_value !== null &&\n typeof source_value === \"object\" &&\n !Array.isArray(source_value) &&\n target_value !== null &&\n typeof target_value === \"object\" &&\n !Array.isArray(target_value)\n ) {\n output[key] = deepMerge(\n target_value as Record<string, unknown>,\n source_value as DeepPartial<Record<string, unknown>>\n ) as T[Extract<keyof T, string>]\n } else if (source_value !== undefined) {\n output[key] = source_value as T[Extract<keyof T, string>]\n }\n }\n }\n\n return output\n}\n","// CLAUDE.md規則: 全てのエラーメッセージは単一のファイル内に記述\n\nexport const FORM_ERRORS = {\n FIELD_NOT_FOUND: \"指定されたフィールドがスキーマに存在しません\",\n VALIDATION_FAILED: \"バリデーションに失敗しました\",\n SUBMIT_FAILED: \"フォームの送信に失敗しました\",\n SCHEMA_INVALID: \"無効なスキーマが指定されました\"\n} as const\n\nexport const COMPONENT_ERRORS = {\n INVALID_VARIANT: \"無効なvariantが指定されました\",\n INVALID_SIZE: \"無効なsizeが指定されました\",\n PROVIDER_NOT_FOUND: \"UIProviderが見つかりません。アプリケーションをUIProviderでラップしてください\"\n} as const\n\nexport const DIALOG_ERRORS = {\n ALREADY_OPEN: \"ダイアログは既に開いています\",\n ALREADY_CLOSED: \"ダイアログは既に閉じています\"\n} as const\n\nexport const INPUT_ERRORS = {\n INVALID_TYPE: \"無効なinputタイプが指定されました\"\n} as const\n\nexport type FormErrorKey = keyof typeof FORM_ERRORS\nexport type ComponentErrorKey = keyof typeof COMPONENT_ERRORS\nexport type DialogErrorKey = keyof typeof DIALOG_ERRORS\nexport type InputErrorKey = keyof typeof INPUT_ERRORS\n","import { inject, provide, reactive, readonly, type InjectionKey } from \"vue\"\nimport type { DeepPartial } from \"../types/utils\"\nimport type { UIConfig, UIProviderContext, ButtonConfig, InputConfig, CardConfig, AlertConfig } from \"../types/config\"\nimport { DEFAULT_UI_CONFIG } from \"../types/config\"\nimport type { StyleAdapter } from \"../adapters/types\"\nimport { tailwindAdapter } from \"../adapters/tailwind\"\nimport { deepMerge } from \"../utils/deepMerge\"\nimport { COMPONENT_ERRORS } from \"../constants/errors\"\nimport { CONFIG_LOGS } from \"../constants/logs\"\n\n/**\n * UIProviderContext用のInjectionKey\n */\nexport const UI_PROVIDER_KEY: InjectionKey<UIProviderContext> = Symbol(\"ui-provider\")\n\n/**\n * @deprecated UI_CONFIG_KEY は後方互換性のために残されています。UI_PROVIDER_KEY を使用してください。\n */\nexport const UI_CONFIG_KEY: InjectionKey<UIConfig> = Symbol(\"ui-config\")\n\n/**\n * UIProviderで設定とStyleAdapterを提供する\n * @param config - 部分的なUI設定(デフォルト値とマージされる)\n * @param adapter - 使用するStyleAdapter(デフォルト: tailwindAdapter)\n * @returns UIProviderContext\n */\nexport const useUIProvider = (\n config: DeepPartial<UIConfig> = {},\n adapter: StyleAdapter = tailwindAdapter\n): UIProviderContext => {\n const merged_config = reactive(\n deepMerge(DEFAULT_UI_CONFIG, config)\n ) as UIConfig\n\n const context: UIProviderContext = {\n config: merged_config,\n adapter\n }\n\n provide(UI_PROVIDER_KEY, context)\n // 後方互換性のため、UI_CONFIG_KEYでも提供\n provide(UI_CONFIG_KEY, merged_config)\n\n if (import.meta.env.DEV) {\n console.debug(CONFIG_LOGS.PROVIDER_INITIALIZED, context)\n }\n\n return context\n}\n\n/**\n * コンポーネント固有の設定を取得する\n * @param component - コンポーネント名\n * @returns 読み取り専用の設定\n * @throws Provider未設定時はデフォルト設定を使用\n */\nexport function useUI(component: \"button\"): Readonly<ButtonConfig>\nexport function useUI(component: \"input\"): Readonly<InputConfig>\nexport function useUI(component: \"card\"): Readonly<CardConfig>\nexport function useUI(component: \"alert\"): Readonly<AlertConfig>\nexport function useUI<K extends keyof UIConfig>(component: K): Readonly<UIConfig[K]> {\n const context = inject(UI_PROVIDER_KEY, null)\n\n if (!context) {\n if (import.meta.env.DEV) {\n console.warn(COMPONENT_ERRORS.PROVIDER_NOT_FOUND)\n }\n return readonly(DEFAULT_UI_CONFIG[component] as object) as Readonly<UIConfig[K]>\n }\n\n return readonly(context.config[component] as object) as Readonly<UIConfig[K]>\n}\n\n/**\n * 全体のUI設定を取得する\n * @returns 読み取り専用の全体設定\n */\nexport const useUIConfig = (): Readonly<UIConfig> => {\n const context = inject(UI_PROVIDER_KEY, null)\n\n if (!context) {\n if (import.meta.env.DEV) {\n console.warn(COMPONENT_ERRORS.PROVIDER_NOT_FOUND)\n }\n return readonly(DEFAULT_UI_CONFIG)\n }\n\n return readonly(context.config)\n}\n\n/**\n * Style Adapter を取得する\n * @returns 現在設定されているStyleAdapter(デフォルト: tailwindAdapter)\n */\nexport const useStyleAdapter = (): StyleAdapter => {\n const context = inject(UI_PROVIDER_KEY, null)\n\n if (!context) {\n if (import.meta.env.DEV) {\n console.warn(COMPONENT_ERRORS.PROVIDER_NOT_FOUND)\n }\n return tailwindAdapter\n }\n\n return context.adapter\n}\n","import { computed, readonly, type Ref } from \"vue\"\nimport type { ButtonProps, ButtonReturn, ButtonAriaAttributes, ButtonState } from \"../types/button\"\nimport { useUI } from \"./useUIConfig\"\n\n/**\n * Buttonコンポーネントのロジックを提供するComposable\n * 状態とARIA属性のみを返す(スタイル情報なし)\n * スタイルは StyleAdapter または外部のスタイルパッケージが担当\n */\nexport const useButton = (props: Ref<ButtonProps>): ButtonReturn => {\n const ui_config = useUI(\"button\")\n\n const state = computed((): ButtonState => ({\n variant: props.value.variant ?? ui_config.default_variant,\n size: props.value.size ?? ui_config.default_size,\n disabled: props.value.disabled ?? false,\n loading: props.value.loading ?? false,\n type: props.value.type ?? \"button\"\n }))\n\n const aria_attributes = computed<ButtonAriaAttributes>(() => ({\n \"aria-disabled\": state.value.disabled || undefined,\n \"aria-busy\": state.value.loading || undefined,\n role: \"button\",\n type: state.value.type\n }))\n\n return {\n state: readonly(state),\n aria_attributes: readonly(aria_attributes)\n }\n}\n","import { computed, ref, readonly, type Ref } from \"vue\"\nimport type { InputProps, InputReturn, InputAriaAttributes, InputState } from \"../types/input\"\nimport { useUI } from \"./useUIConfig\"\n\n/**\n * Inputコンポーネントのロジックを提供するComposable\n * 状態とARIA属性のみを返す(スタイル情報なし)\n * スタイルは StyleAdapter または外部のスタイルパッケージが担当\n */\nexport const useInput = (props: Ref<InputProps>): InputReturn => {\n const ui_config = useUI(\"input\")\n\n const is_focused = ref(false)\n\n const state = computed((): InputState => ({\n type: props.value.type ?? \"text\",\n size: props.value.size ?? ui_config.default_size,\n disabled: props.value.disabled ?? false,\n readonly: props.value.readonly ?? false,\n has_error: !!props.value.error\n }))\n\n const aria_attributes = computed<InputAriaAttributes>(() => ({\n \"aria-invalid\": state.value.has_error || undefined,\n \"aria-describedby\": props.value.error_id,\n \"aria-readonly\": state.value.readonly || undefined\n }))\n\n const handleFocus = () => {\n is_focused.value = true\n }\n\n const handleBlur = () => {\n is_focused.value = false\n }\n\n return {\n state: readonly(state),\n is_focused,\n aria_attributes: readonly(aria_attributes),\n handleFocus,\n handleBlur\n }\n}\n","import { computed, readonly, type Ref } from \"vue\"\nimport type { CardProps, CardReturn, CardState } from \"../types/card\"\nimport { useUI } from \"./useUIConfig\"\n\n/**\n * Cardコンポーネントのロジックを提供するComposable\n * 状態のみを返す(スタイル情報なし)\n * スタイルは StyleAdapter または外部のスタイルパッケージが担当\n */\nexport const useCard = (props: Ref<CardProps>): CardReturn => {\n const ui_config = useUI(\"card\")\n\n const state = computed((): CardState => ({\n padding: props.value.padding ?? ui_config.default_padding\n }))\n\n return {\n state: readonly(state)\n }\n}\n","import { ref, readonly } from \"vue\"\nimport type { DialogReturn } from \"../types/dialog\"\n\n/**\n * Dialogコンポーネントの状態管理を提供するComposable\n * open/close/toggle操作と状態を管理\n */\nexport const useDialog = (): DialogReturn => {\n const is_open = ref(false)\n\n const open = () => {\n is_open.value = true\n }\n\n const close = () => {\n is_open.value = false\n }\n\n const toggle = () => {\n is_open.value = !is_open.value\n }\n\n return {\n is_open: readonly(is_open),\n open,\n close,\n toggle\n }\n}\n","import { reactive, computed, readonly } from \"vue\"\nimport { z, type ZodSchema, ZodError, type ZodObject, type ZodRawShape } from \"zod\"\nimport type { FormState, FormReturn, FieldArrayHelpers } from \"../types/form\"\nimport { FORM_ERRORS } from \"../constants/errors\"\n\n/**\n * フォーム状態管理とZodバリデーションを提供するComposable\n * スキーマに基づいた型安全なフォーム管理を実現\n */\nexport const useForm = <T extends ZodSchema>(schema: T): FormReturn<z.infer<T>> => {\n type FormData = z.infer<T>\n\n const form_state = reactive({\n values: {} as FormData,\n errors: {} as Record<string, string | undefined>,\n touched: {} as Record<string, boolean>,\n is_submitting: false,\n is_dirty: false\n })\n\n const is_valid = computed(() => {\n const result = schema.safeParse(form_state.values)\n return result.success\n })\n\n const validateField = (field: keyof FormData): void => {\n (form_state.touched as Record<string, boolean>)[field as string] = true\n form_state.is_dirty = true\n\n try {\n const zod_object = schema as unknown as ZodObject<ZodRawShape>\n const field_schema = zod_object.shape[field as string]\n\n if (!field_schema) {\n throw new Error(FORM_ERRORS.FIELD_NOT_FOUND)\n }\n\n field_schema.parse(form_state.values[field])\n ;(form_state.errors as Record<string, string | undefined>)[field as string] = undefined\n } catch (error) {\n if (error instanceof ZodError) {\n (form_state.errors as Record<string, string | undefined>)[field as string] = error.errors[0].message\n } else if (error instanceof Error) {\n (form_state.errors as Record<string, string | undefined>)[field as string] = error.message\n }\n }\n }\n\n const validateAll = (): boolean => {\n try {\n schema.parse(form_state.values)\n form_state.errors = {}\n return true\n } catch (error) {\n if (error instanceof ZodError) {\n form_state.errors = {}\n error.errors.forEach((err) => {\n const field = err.path[0] as string\n ;(form_state.errors as Record<string, string | undefined>)[field] = err.message\n ;(form_state.touched as Record<string, boolean>)[field] = true\n })\n }\n return false\n }\n }\n\n const reset = (): void => {\n form_state.values = {} as FormData\n form_state.errors = {}\n form_state.touched = {}\n form_state.is_dirty = false\n }\n\n const setValues = (values: Partial<FormData>): void => {\n Object.assign(form_state.values, values)\n form_state.is_dirty = true\n }\n\n const setFieldValue = (field: keyof FormData, value: FormData[keyof FormData]): void => {\n form_state.values[field] = value\n form_state.is_dirty = true\n }\n\n const submit = async (on_submit: (data: FormData) => Promise<void>): Promise<void> => {\n if (!validateAll()) {\n return\n }\n\n form_state.is_submitting = true\n\n try {\n const validated_data = schema.parse(form_state.values)\n await on_submit(validated_data)\n } catch (error) {\n if (error instanceof ZodError) {\n error.errors.forEach((err) => {\n const field = err.path[0] as string\n ;(form_state.errors as Record<string, string | undefined>)[field] = err.message\n })\n }\n throw error\n } finally {\n form_state.is_submitting = false\n }\n }\n\n /**\n * 配列フィールドの操作ヘルパーを取得\n */\n const getFieldArray = <K extends keyof FormData>(\n field: K\n ): FormData[K] extends Array<infer U> ? FieldArrayHelpers<U> : never => {\n type TItem = FormData[K] extends Array<infer U> ? U : never\n\n const getArray = (): TItem[] => {\n const value = form_state.values[field]\n if (!Array.isArray(value)) {\n form_state.values[field] = [] as FormData[K]\n return [] as TItem[]\n }\n return value as TItem[]\n }\n\n const helpers: FieldArrayHelpers<TItem> = {\n get fields() {\n return getArray()\n },\n\n append: (value: TItem) => {\n const array = getArray()\n array.push(value)\n form_state.is_dirty = true\n },\n\n prepend: (value: TItem) => {\n const array = getArray()\n array.unshift(value)\n form_state.is_dirty = true\n },\n\n insert: (index: number, value: TItem) => {\n const array = getArray()\n array.splice(index, 0, value)\n form_state.is_dirty = true\n },\n\n remove: (index: number) => {\n const array = getArray()\n array.splice(index, 1)\n form_state.is_dirty = true\n },\n\n move: (from_index: number, to_index: number) => {\n const array = getArray()\n const item = array.splice(from_index, 1)[0]\n array.splice(to_index, 0, item)\n form_state.is_dirty = true\n },\n\n swap: (index_a: number, index_b: number) => {\n const array = getArray()\n const temp = array[index_a]\n array[index_a] = array[index_b]\n array[index_b] = temp\n form_state.is_dirty = true\n },\n\n replace: (index: number, value: TItem) => {\n const array = getArray()\n array[index] = value\n form_state.is_dirty = true\n },\n\n clear: () => {\n form_state.values[field] = [] as FormData[K]\n form_state.is_dirty = true\n }\n }\n\n return helpers as FormData[K] extends Array<infer U> ? FieldArrayHelpers<U> : never\n }\n\n return {\n values: form_state.values,\n errors: readonly(form_state.errors) as Readonly<Partial<Record<keyof FormData, string>>>,\n touched: readonly(form_state.touched) as Readonly<Partial<Record<keyof FormData, boolean>>>,\n is_valid,\n is_submitting: computed(() => form_state.is_submitting),\n is_dirty: computed(() => form_state.is_dirty),\n validateField,\n validateAll,\n reset,\n setValues,\n setFieldValue,\n submit,\n getFieldArray\n }\n}\n","import { computed, readonly, type Ref } from \"vue\"\nimport type { CheckboxProps, CheckboxReturn, CheckboxAriaAttributes, CheckboxState } from \"../types/checkbox\"\n\n/**\n * Checkboxコンポーネントのロジックを提供するComposable\n * 状態とARIA属性のみを返す(スタイル情報なし)\n * スタイルは StyleAdapter または外部のスタイルパッケージが担当\n */\nexport const useCheckbox = (\n props: Ref<CheckboxProps>,\n checked: Ref<boolean>\n): CheckboxReturn => {\n const state = computed((): CheckboxState => ({\n size: props.value.size ?? \"md\",\n disabled: props.value.disabled ?? false,\n indeterminate: props.value.indeterminate ?? false,\n checked: checked.value\n }))\n\n const aria_attributes = computed<CheckboxAriaAttributes>(() => ({\n role: \"checkbox\",\n \"aria-checked\": state.value.indeterminate ? \"mixed\" : state.value.checked,\n \"aria-disabled\": state.value.disabled || undefined\n }))\n\n return {\n state: readonly(state),\n aria_attributes: readonly(aria_attributes)\n }\n}\n","import type { ComputedRef, InjectionKey, Ref, DeepReadonly } from \"vue\"\n\nexport type RadioSize = \"sm\" | \"md\" | \"lg\"\n\nexport interface RadioGroupProps {\n disabled?: boolean\n orientation?: \"horizontal\" | \"vertical\"\n class?: string\n unstyled?: boolean\n}\n\nexport interface RadioItemProps {\n value: string\n size?: RadioSize\n disabled?: boolean\n class?: string\n unstyled?: boolean\n}\n\nexport interface RadioGroupContext {\n model_value: Ref<string>\n disabled: Ref<boolean>\n updateValue: (value: string) => void\n}\n\nexport const RADIO_GROUP_KEY: InjectionKey<RadioGroupContext> = Symbol(\"radio-group\")\n\n/**\n * ラジオボタンの状態(StyleAdapterに渡す用)\n */\nexport interface RadioItemState {\n size: RadioSize\n disabled: boolean\n checked: boolean\n}\n\nexport interface RadioAriaAttributes {\n role: \"radio\"\n \"aria-checked\": boolean\n \"aria-disabled\"?: boolean\n}\n\n/**\n * useRadioItem の戻り値(ヘッドレス - スタイル情報なし)\n */\nexport interface RadioItemReturn {\n state: DeepReadonly<ComputedRef<RadioItemState>>\n aria_attributes: DeepReadonly<ComputedRef<RadioAriaAttributes>>\n}\n","import { computed, inject, readonly, type Ref } from \"vue\"\nimport type { RadioItemProps, RadioItemReturn, RadioAriaAttributes, RadioGroupContext, RadioItemState } from \"../types/radio\"\nimport { RADIO_GROUP_KEY } from \"../types/radio\"\nimport { COMPONENT_ERRORS } from \"../constants/errors\"\n\n/**\n * RadioItemコンポーネントのロジックを提供するComposable\n * 状態とARIA属性のみを返す(スタイル情報なし)\n * スタイルは StyleAdapter または外部のスタイルパッケージが担当\n */\nexport const useRadioItem = (props: Ref<RadioItemProps>): RadioItemReturn => {\n const context = inject<RadioGroupContext | null>(RADIO_GROUP_KEY, null)\n\n if (!context) {\n throw new Error(COMPONENT_ERRORS.PROVIDER_NOT_FOUND)\n }\n\n const state = computed((): RadioItemState => ({\n size: props.value.size ?? \"md\",\n disabled: props.value.disabled ?? context.disabled.value,\n checked: context.model_value.value === props.value.value\n }))\n\n const aria_attributes = computed<RadioAriaAttributes>(() => ({\n role: \"radio\",\n \"aria-checked\": state.value.checked,\n \"aria-disabled\": state.value.disabled || undefined\n }))\n\n return {\n state: readonly(state),\n aria_attributes: readonly(aria_attributes)\n }\n}\n","import { computed, readonly, type Ref } from \"vue\"\nimport type { SwitchProps, SwitchReturn, SwitchAriaAttributes, SwitchState } from \"../types/switch\"\n\n/**\n * Switchコンポーネントのロジックを提供するComposable\n * 状態とARIA属性のみを返す(スタイル情報なし)\n * スタイルは StyleAdapter または外部のスタイルパッケージが担当\n */\nexport const useSwitch = (\n props: Ref<SwitchProps>,\n checked: Ref<boolean>\n): SwitchReturn => {\n const state = computed((): SwitchState => ({\n size: props.value.size ?? \"md\",\n disabled: props.value.disabled ?? false,\n checked: checked.value\n }))\n\n const aria_attributes = computed<SwitchAriaAttributes>(() => ({\n role: \"switch\",\n \"aria-checked\": state.value.checked,\n \"aria-disabled\": state.value.disabled || undefined\n }))\n\n return {\n state: readonly(state),\n aria_attributes: readonly(aria_attributes)\n }\n}\n","import { computed, ref, readonly, type Ref } from \"vue\"\nimport type { TextareaProps, TextareaReturn, TextareaAriaAttributes, TextareaState } from \"../types/textarea\"\n\n/**\n * Textareaコンポーネントのロジックを提供するComposable\n * 状態とARIA属性のみを返す(スタイル情報なし)\n * スタイルは StyleAdapter または外部のスタイルパッケージが担当\n */\nexport const useTextarea = (props: Ref<TextareaProps>): TextareaReturn => {\n const is_focused = ref(false)\n\n const state = computed((): TextareaState => ({\n size: props.value.size ?? \"md\",\n disabled: props.value.disabled ?? false,\n readonly: props.value.readonly ?? false,\n has_error: !!props.value.error,\n resize: props.value.resize ?? \"vertical\"\n }))\n\n const aria_attributes = computed<TextareaAriaAttributes>(() => ({\n \"aria-invalid\": state.value.has_error || undefined,\n \"aria-describedby\": props.value.error_id,\n \"aria-readonly\": state.value.readonly || undefined\n }))\n\n const handleFocus = () => {\n is_focused.value = true\n }\n\n const handleBlur = () => {\n is_focused.value = false\n }\n\n return {\n state: readonly(state),\n is_focused,\n aria_attributes: readonly(aria_attributes),\n handleFocus,\n handleBlur\n }\n}\n","import type { ComputedRef, InjectionKey, Ref, DeepReadonly } from \"vue\"\n\nexport type SelectSize = \"sm\" | \"md\" | \"lg\"\n\nexport interface SelectProps {\n size?: SelectSize\n disabled?: boolean\n placeholder?: string\n unstyled?: boolean\n}\n\nexport interface SelectTriggerProps {\n class?: string\n unstyled?: boolean\n}\n\nexport interface SelectContentProps {\n class?: string\n unstyled?: boolean\n}\n\nexport interface SelectItemProps {\n value: string\n disabled?: boolean\n class?: string\n unstyled?: boolean\n}\n\nexport interface SelectValueProps {\n class?: string\n unstyled?: boolean\n}\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface SelectContext {\n model_value: Ref<string>\n is_open: Ref<boolean>\n disabled: Ref<boolean>\n size: Ref<SelectSize>\n placeholder: Ref<string>\n trigger_ref: Ref<HTMLElement | null>\n updateValue: (value: string) => void\n open: () => void\n close: () => void\n toggle: () => void\n setTriggerRef: (element: HTMLElement | null) => void\n}\n\nexport const SELECT_KEY: InjectionKey<SelectContext> = Symbol(\"select\")\n\n/**\n * セレクトトリガーの状態(StyleAdapterに渡す用)\n */\nexport interface SelectTriggerState {\n size: SelectSize\n disabled: boolean\n is_open: boolean\n}\n\n/**\n * セレクトコンテンツの状態(StyleAdapterに渡す用)\n */\nexport interface SelectContentState {\n is_open: boolean\n}\n\n/**\n * セレクトアイテムの状態(StyleAdapterに渡す用)\n */\nexport interface SelectItemState {\n selected: boolean\n disabled: boolean\n}\n\nexport interface SelectTriggerReturn {\n state: DeepReadonly<ComputedRef<SelectTriggerState>>\n}\n\nexport interface SelectContentReturn {\n state: DeepReadonly<ComputedRef<SelectContentState>>\n}\n\nexport interface SelectItemReturn {\n state: DeepReadonly<ComputedRef<SelectItemState>>\n}\n","import { computed, inject, readonly, type Ref } from \"vue\"\nimport type {\n SelectContext,\n SelectTriggerReturn,\n SelectContentReturn,\n SelectItemReturn,\n SelectTriggerState,\n SelectContentState,\n SelectItemState\n} from \"../types/select\"\nimport { SELECT_KEY } from \"../types/select\"\nimport { COMPONENT_ERRORS } from \"../constants/errors\"\n\n/**\n * SelectTriggerコンポーネントのロジックを提供するComposable\n * 状態のみを返す(スタイル情報なし)\n */\nexport const useSelectTrigger = (): SelectTriggerReturn => {\n const context = inject<SelectContext | null>(SELECT_KEY, null)\n\n if (!context) {\n throw new Error(COMPONENT_ERRORS.PROVIDER_NOT_FOUND)\n }\n\n const state = computed((): SelectTriggerState => ({\n size: context.size.value,\n disabled: context.disabled.value,\n is_open: context.is_open.value\n }))\n\n return {\n state: readonly(state)\n }\n}\n\n/**\n * SelectContentコンポーネントのロジックを提供するComposable\n * 状態のみを返す(スタイル情報なし)\n */\nexport const useSelectContent = (): SelectContentReturn => {\n const context = inject<SelectContext | null>(SELECT_KEY, null)\n\n if (!context) {\n throw new Error(COMPONENT_ERRORS.PROVIDER_NOT_FOUND)\n }\n\n const state = computed((): SelectContentState => ({\n is_open: context.is_open.value\n }))\n\n return {\n state: readonly(state)\n }\n}\n\n/**\n * SelectItemコンポーネントのロジックを提供するComposable\n * 状態のみを返す(スタイル情報なし)\n */\nexport const useSelectItem = (\n props: Ref<{ value: string; disabled?: boolean }>\n): SelectItemReturn => {\n const context = inject<SelectContext | null>(SELECT_KEY, null)\n\n if (!context) {\n throw new Error(COMPONENT_ERRORS.PROVIDER_NOT_FOUND)\n }\n\n const state = computed((): SelectItemState => ({\n selected: context.model_value.value === props.value.value,\n disabled: props.value.disabled ?? false\n }))\n\n return {\n state: readonly(state)\n }\n}\n","import { computed, ref, readonly, type Ref } from \"vue\"\nimport type { FileInputProps, FileInputReturn, FileInputAriaAttributes, FileInfo, FileInputState } from \"../types/file-input\"\n\nconst FILE_ERRORS = {\n MAX_SIZE_EXCEEDED: (max: number) => `ファイルサイズが${formatFileSize(max)}を超えています`,\n MAX_FILES_EXCEEDED: (max: number) => `最大${max}ファイルまでアップロードできます`,\n INVALID_TYPE: \"許可されていないファイル形式です\"\n} as const\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return `${bytes}B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)}MB`\n}\n\nconst createPreviewUrl = (file: File): string | null => {\n if (file.type.startsWith(\"image/\")) {\n return URL.createObjectURL(file)\n }\n return null\n}\n\n/**\n * FileInputコンポーネントのロジックを提供するComposable\n * 状態とARIA属性のみを返す(スタイル情報なし)\n * スタイルは StyleAdapter または外部のスタイルパッケージが担当\n */\nexport const useFileInput = (\n props: Ref<FileInputProps>,\n input_ref: Ref<HTMLInputElement | null>\n): FileInputReturn => {\n const is_dragging = ref(false)\n const files = ref<FileInfo[]>([])\n const error = ref<string | null>(null)\n\n const state = computed((): FileInputState => ({\n disabled: props.value.disabled ?? false,\n is_dragging: is_dragging.value,\n has_error: !!error.value,\n has_files: files.value.length > 0\n }))\n\n const aria_attributes = computed<FileInputAriaAttributes>(() => ({\n \"aria-disabled\": state.value.disabled || undefined,\n \"aria-invalid\": state.value.has_error || undefined\n }))\n\n const validateFile = (file: File): string | null => {\n const { accept, max_size } = props.value\n\n if (max_size && file.size > max_size) {\n return FILE_ERRORS.MAX_SIZE_EXCEEDED(max_size)\n }\n\n if (accept) {\n const accepted_types = accept.split(\",\").map(t => t.trim())\n const is_valid = accepted_types.some(type => {\n if (type.startsWith(\".\")) {\n return file.name.toLowerCase().endsWith(type.toLowerCase())\n }\n if (type.endsWith(\"/*\")) {\n return file.type.startsWith(type.replace(\"/*\", \"/\"))\n }\n return file.type === type\n })\n\n if (!is_valid) {\n return FILE_ERRORS.INVALID_TYPE\n }\n }\n\n return null\n }\n\n const handleFiles = (file_list: FileList | null): void => {\n if (!file_list || state.value.disabled) return\n\n error.value = null\n const { multiple, max_files } = props.value\n const new_files: FileInfo[] = []\n\n const files_to_process = Array.from(file_list)\n\n for (const file of files_to_process) {\n const validation_error = validateFile(file)\n if (validation_error) {\n error.value = validation_error\n return\n }\n\n new_files.push({\n file,\n name: file.name,\n size: file.size,\n type: file.type,\n preview_url: createPreviewUrl(file)\n })\n }\n\n if (multiple) {\n const total = files.value.length + new_files.length\n if (max_files && total > max_files) {\n error.value = FILE_ERRORS.MAX_FILES_EXCEEDED(max_files)\n return\n }\n files.value.push(...new_files)\n } else {\n files.value.forEach(f => {\n if (f.preview_url) URL.revokeObjectURL(f.preview_url)\n })\n files.value = new_files.slice(0, 1)\n }\n }\n\n const handleDragEnter = (event: DragEvent): void => {\n event.preventDefault()\n if (!state.value.disabled) {\n is_dragging.value = true\n }\n }\n\n const handleDragLeave = (event: DragEvent): void => {\n event.preventDefault()\n is_dragging.value = false\n }\n\n const handleDrop = (event: DragEvent): void => {\n event.preventDefault()\n is_dragging.value = false\n if (!state.value.disabled) {\n handleFiles(event.dataTransfer?.files ?? null)\n }\n }\n\n const removeFile = (index: number): void => {\n const removed = files.value.splice(index, 1)[0]\n if (removed?.preview_url) {\n URL.revokeObjectURL(removed.preview_url)\n }\n }\n\n const clearFiles = (): void => {\n files.value.forEach(f => {\n if (f.preview_url) URL.revokeObjectURL(f.preview_url)\n })\n files.value = []\n error.value = null\n }\n\n const openFilePicker = (): void => {\n if (!state.value.disabled && input_ref.value) {\n input_ref.value.click()\n }\n }\n\n return {\n state: readonly(state),\n is_dragging,\n files,\n error,\n aria_attributes: readonly(aria_attributes),\n handleFiles,\n handleDragEnter,\n handleDragLeave,\n handleDrop,\n removeFile,\n clearFiles,\n openFilePicker\n }\n}\n","import { ref } from \"vue\"\nimport type { ToastItem, ToastProps, ToastReturn } from \"../types/toast\"\n\nconst toasts = ref<ToastItem[]>([])\nlet toast_counter = 0\n\nconst generateId = (): string => {\n toast_counter++\n return `toast-${toast_counter}-${Date.now()}`\n}\n\nexport function useToast(): ToastReturn {\n const add = (props: ToastProps): string => {\n const id = props.id ?? generateId()\n\n const toast: ToastItem = {\n id,\n title: props.title,\n description: props.description,\n variant: props.variant ?? \"default\",\n duration: props.duration ?? 5000,\n dismissible: props.dismissible ?? true,\n action: props.action,\n created_at: Date.now()\n }\n\n toasts.value = [...toasts.value, toast]\n\n // Auto dismiss after duration (if duration > 0)\n if (toast.duration > 0) {\n setTimeout(() => {\n dismiss(id)\n }, toast.duration)\n }\n\n return id\n }\n\n const dismiss = (id: string): void => {\n toasts.value = toasts.value.filter(t => t.id !== id)\n }\n\n const dismissAll = (): void => {\n toasts.value = []\n }\n\n const update = (id: string, props: Partial<ToastProps>): void => {\n toasts.value = toasts.value.map(toast => {\n if (toast.id === id) {\n return {\n ...toast,\n ...props,\n id: toast.id,\n created_at: toast.created_at\n }\n }\n return toast\n })\n }\n\n return {\n toasts: [...toasts.value],\n add,\n dismiss,\n dismissAll,\n update\n }\n}\n\n// Convenience functions for common toast types\nexport const toast = {\n default: (props: Omit<ToastProps, \"variant\">) => useToast().add({ ...props, variant: \"default\" }),\n success: (props: Omit<ToastProps, \"variant\">) => useToast().add({ ...props, variant: \"success\" }),\n error: (props: Omit<ToastProps, \"variant\">) => useToast().add({ ...props, variant: \"error\" }),\n warning: (props: Omit<ToastProps, \"variant\">) => useToast().add({ ...props, variant: \"warning\" }),\n info: (props: Omit<ToastProps, \"variant\">) => useToast().add({ ...props, variant: \"info\" }),\n dismiss: (id: string) => useToast().dismiss(id),\n dismissAll: () => useToast().dismissAll()\n}\n","import { ref, computed, onUnmounted, type Ref, type ComputedRef } from \"vue\"\nimport type { TooltipSide, TooltipAlign } from \"../types/tooltip\"\n\nexport interface UseTooltipProps {\n side?: TooltipSide\n align?: TooltipAlign\n delay_duration?: number\n skip_delay_duration?: number\n disabled?: boolean\n}\n\nexport interface UseTooltipReturn {\n is_open: Ref<boolean>\n trigger_ref: Ref<HTMLElement | null>\n content_ref: Ref<HTMLElement | null>\n tooltip_id: string\n position_styles: ComputedRef<Record<string, string>>\n show: () => void\n hide: () => void\n handleMouseEnter: () => void\n handleMouseLeave: () => void\n handleFocus: () => void\n handleBlur: () => void\n}\n\nlet tooltip_counter = 0\n\nexport function useTooltip(props: Ref<UseTooltipProps>): UseTooltipReturn {\n const is_open = ref(false)\n const trigger_ref = ref<HTMLElement | null>(null)\n const content_ref = ref<HTMLElement | null>(null)\n const tooltip_id = `tooltip-${++tooltip_counter}`\n\n let show_timeout: ReturnType<typeof setTimeout> | null = null\n let hide_timeout: ReturnType<typeof setTimeout> | null = null\n\n const clearTimeouts = (): void => {\n if (show_timeout) {\n clearTimeout(show_timeout)\n show_timeout = null\n }\n if (hide_timeout) {\n clearTimeout(hide_timeout)\n hide_timeout = null\n }\n }\n\n const show = (): void => {\n if (props.value.disabled) return\n clearTimeouts()\n is_open.value = true\n }\n\n const hide = (): void => {\n clearTimeouts()\n is_open.value = false\n }\n\n const handleMouseEnter = (): void => {\n if (props.value.disabled) return\n clearTimeouts()\n\n const delay = props.value.delay_duration ?? 200\n show_timeout = setTimeout(() => {\n is_open.value = true\n }, delay)\n }\n\n const handleMouseLeave = (): void => {\n clearTimeouts()\n\n const skip_delay = props.value.skip_delay_duration ?? 100\n hide_timeout = setTimeout(() => {\n is_open.value = false\n }, skip_delay)\n }\n\n const handleFocus = (): void => {\n if (props.value.disabled) return\n show()\n }\n\n const handleBlur = (): void => {\n hide()\n }\n\n const position_styles = computed<Record<string, string>>(() => {\n if (!trigger_ref.value || !is_open.value) {\n return {}\n }\n\n const side = props.value.side ?? \"top\"\n const align = props.value.align ?? \"center\"\n const offset = 8\n\n // Base positioning using CSS transforms\n const styles: Record<string, string> = {\n position: \"absolute\",\n zIndex: \"50\"\n }\n\n // Side positioning\n switch (side) {\n case \"top\":\n styles.bottom = \"100%\"\n styles.marginBottom = `${offset}px`\n break\n case \"bottom\":\n styles.top = \"100%\"\n styles.marginTop = `${offset}px`\n break\n case \"left\":\n styles.right = \"100%\"\n styles.marginRight = `${offset}px`\n break\n case \"right\":\n styles.left = \"100%\"\n styles.marginLeft = `${offset}px`\n break\n }\n\n // Alignment\n if (side === \"top\" || side === \"bottom\") {\n switch (align) {\n case \"start\":\n styles.left = \"0\"\n break\n case \"center\":\n styles.left = \"50%\"\n styles.transform = \"translateX(-50%)\"\n break\n case \"end\":\n styles.right = \"0\"\n break\n }\n } else {\n switch (align) {\n case \"start\":\n styles.top = \"0\"\n break\n case \"center\":\n styles.top = \"50%\"\n styles.transform = \"translateY(-50%)\"\n break\n case \"end\":\n styles.bottom = \"0\"\n break\n }\n }\n\n return styles\n })\n\n onUnmounted(() => {\n clearTimeouts()\n })\n\n return {\n is_open,\n trigger_ref,\n content_ref,\n tooltip_id,\n position_styles,\n show,\n hide,\n handleMouseEnter,\n handleMouseLeave,\n handleFocus,\n handleBlur\n }\n}\n","import { ref, computed, onMounted, onUnmounted, type Ref, type ComputedRef } from \"vue\"\nimport type { PopoverSide, PopoverAlign } from \"../types/popover\"\n\nexport interface UsePopoverProps {\n side?: PopoverSide\n align?: PopoverAlign\n modal?: boolean\n}\n\nexport interface UsePopoverReturn {\n is_open: Ref<boolean>\n trigger_ref: Ref<HTMLElement | null>\n content_ref: Ref<HTMLElement | null>\n popover_id: string\n position_styles: ComputedRef<Record<string, string>>\n open: () => void\n close: () => void\n toggle: () => void\n handleTriggerClick: () => void\n handleKeyDown: (event: KeyboardEvent) => void\n}\n\nlet popover_counter = 0\n\nexport function usePopover(props: Ref<UsePopoverProps>): UsePopoverReturn {\n const is_open = ref(false)\n const trigger_ref = ref<HTMLElement | null>(null)\n const content_ref = ref<HTMLElement | null>(null)\n const popover_id = `popover-${++popover_counter}`\n\n const open = (): void => {\n is_open.value = true\n }\n\n const close = (): void => {\n is_open.value = false\n }\n\n const toggle = (): void => {\n is_open.value = !is_open.value\n }\n\n const handleTriggerClick = (): void => {\n toggle()\n }\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Escape\" && is_open.value) {\n close()\n trigger_ref.value?.focus()\n }\n }\n\n const handleClickOutside = (event: MouseEvent): void => {\n if (!is_open.value) return\n\n const target = event.target as Node\n const trigger = trigger_ref.value\n const content = content_ref.value\n\n if (trigger && trigger.contains(target)) return\n if (content && content.contains(target)) return\n\n close()\n }\n\n const position_styles = computed<Record<string, string>>(() => {\n if (!trigger_ref.value || !is_open.value) {\n return {}\n }\n\n const side = props.value.side ?? \"bottom\"\n const align = props.value.align ?? \"center\"\n const offset = 8\n\n const styles: Record<string, string> = {\n position: \"absolute\",\n zIndex: \"50\"\n }\n\n // Side positioning\n switch (side) {\n case \"top\":\n styles.bottom = \"100%\"\n styles.marginBottom = `${offset}px`\n break\n case \"bottom\":\n styles.top = \"100%\"\n styles.marginTop = `${offset}px`\n break\n case \"left\":\n styles.right = \"100%\"\n styles.marginRight = `${offset}px`\n break\n case \"right\":\n styles.left = \"100%\"\n styles.marginLeft = `${offset}px`\n break\n }\n\n // Alignment\n if (side === \"top\" || side === \"bottom\") {\n switch (align) {\n case \"start\":\n styles.left = \"0\"\n break\n case \"center\":\n styles.left = \"50%\"\n styles.transform = \"translateX(-50%)\"\n break\n case \"end\":\n styles.right = \"0\"\n break\n }\n } else {\n switch (align) {\n case \"start\":\n styles.top = \"0\"\n break\n case \"center\":\n styles.top = \"50%\"\n styles.transform = \"translateY(-50%)\"\n break\n case \"end\":\n styles.bottom = \"0\"\n break\n }\n }\n\n return styles\n })\n\n onMounted(() => {\n document.addEventListener(\"mousedown\", handleClickOutside)\n document.addEventListener(\"keydown\", handleKeyDown)\n })\n\n onUnmounted(() => {\n document.removeEventListener(\"mousedown\", handleClickOutside)\n document.removeEventListener(\"keydown\", handleKeyDown)\n })\n\n return {\n is_open,\n trigger_ref,\n content_ref,\n popover_id,\n position_styles,\n open,\n close,\n toggle,\n handleTriggerClick,\n handleKeyDown\n }\n}\n","import { ref, computed, onMounted, onUnmounted, type Ref, type ComputedRef } from \"vue\"\nimport type { DropdownSide, DropdownAlign } from \"../types/dropdown\"\n\nexport interface UseDropdownProps {\n side?: DropdownSide\n align?: DropdownAlign\n}\n\nexport interface UseDropdownReturn {\n is_open: Ref<boolean>\n trigger_ref: Ref<HTMLElement | null>\n content_ref: Ref<HTMLElement | null>\n dropdown_id: string\n active_item_index: Ref<number>\n items_count: Ref<number>\n position_styles: ComputedRef<Record<string, string>>\n open: () => void\n close: () => void\n toggle: () => void\n handleTriggerClick: () => void\n handleTriggerKeyDown: (event: KeyboardEvent) => void\n handleContentKeyDown: (event: KeyboardEvent) => void\n registerItem: () => number\n setActiveItem: (index: number) => void\n}\n\nlet dropdown_counter = 0\n\nexport function useDropdown(props: Ref<UseDropdownProps>): UseDropdownReturn {\n const is_open = ref(false)\n const trigger_ref = ref<HTMLElement | null>(null)\n const content_ref = ref<HTMLElement | null>(null)\n const dropdown_id = `dropdown-${++dropdown_counter}`\n const active_item_index = ref(-1)\n const items_count = ref(0)\n let item_counter = 0\n\n const open = (): void => {\n is_open.value = true\n active_item_index.value = 0\n }\n\n const close = (): void => {\n is_open.value = false\n active_item_index.value = -1\n }\n\n const toggle = (): void => {\n if (is_open.value) {\n close()\n } else {\n open()\n }\n }\n\n const handleTriggerClick = (): void => {\n toggle()\n }\n\n const handleTriggerKeyDown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case \"Enter\":\n case \" \":\n case \"ArrowDown\":\n event.preventDefault()\n open()\n break\n case \"ArrowUp\":\n event.preventDefault()\n open()\n active_item_index.value = items_count.value - 1\n break\n }\n }\n\n const handleContentKeyDown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault()\n active_item_index.value = Math.min(active_item_index.value + 1, items_count.value - 1)\n break\n case \"ArrowUp\":\n event.preventDefault()\n active_item_index.value = Math.max(active_item_index.value - 1, 0)\n break\n case \"Home\":\n event.preventDefault()\n active_item_index.value = 0\n break\n case \"End\":\n event.preventDefault()\n active_item_index.value = items_count.value - 1\n break\n case \"Escape\":\n event.preventDefault()\n close()\n trigger_ref.value?.focus()\n break\n case \"Tab\":\n close()\n break\n }\n }\n\n const handleClickOutside = (event: MouseEvent): void => {\n if (!is_open.value) return\n\n const target = event.target as Node\n const trigger = trigger_ref.value\n const content = content_ref.value\n\n if (trigger && trigger.contains(target)) return\n if (content && content.contains(target)) return\n\n close()\n }\n\n const registerItem = (): number => {\n const index = item_counter++\n items_count.value = item_counter\n return index\n }\n\n const setActiveItem = (index: number): void => {\n active_item_index.value = index\n }\n\n const position_styles = computed<Record<string, string>>(() => {\n if (!trigger_ref.value || !is_open.value) {\n return {}\n }\n\n const side = props.value.side ?? \"bottom\"\n const align = props.value.align ?? \"start\"\n const offset = 4\n\n const styles: Record<string, string> = {\n position: \"absolute\",\n zIndex: \"50\"\n }\n\n switch (side) {\n case \"top\":\n styles.bottom = \"100%\"\n styles.marginBottom = `${offset}px`\n break\n case \"bottom\":\n styles.top = \"100%\"\n styles.marginTop = `${offset}px`\n break\n case \"left\":\n styles.right = \"100%\"\n styles.marginRight = `${offset}px`\n break\n case \"right\":\n styles.left = \"100%\"\n styles.marginLeft = `${offset}px`\n break\n }\n\n if (side === \"top\" || side === \"bottom\") {\n switch (align) {\n case \"start\":\n styles.left = \"0\"\n break\n case \"center\":\n styles.left = \"50%\"\n styles.transform = \"translateX(-50%)\"\n break\n case \"end\":\n styles.right = \"0\"\n break\n }\n } else {\n switch (align) {\n case \"start\":\n styles.top = \"0\"\n break\n case \"center\":\n styles.top = \"50%\"\n styles.transform = \"translateY(-50%)\"\n break\n case \"end\":\n styles.bottom = \"0\"\n break\n }\n }\n\n return styles\n })\n\n onMounted(() => {\n document.addEventListener(\"mousedown\", handleClickOutside)\n })\n\n onUnmounted(() => {\n document.removeEventListener(\"mousedown\", handleClickOutside)\n })\n\n return {\n is_open,\n trigger_ref,\n content_ref,\n dropdown_id,\n active_item_index,\n items_count,\n position_styles,\n open,\n close,\n toggle,\n handleTriggerClick,\n handleTriggerKeyDown,\n handleContentKeyDown,\n registerItem,\n setActiveItem\n }\n}\n","import { ref, computed, watch, onMounted, onUnmounted, type Ref, type ComputedRef } from \"vue\"\nimport type { ThemeMode, ThemeColors, DEFAULT_LIGHT_COLORS, DEFAULT_DARK_COLORS } from \"../types/theme\"\n\nexport interface UseThemeOptions {\n default_mode?: ThemeMode\n storage_key?: string\n attribute?: string\n}\n\nexport interface UseThemeReturn {\n mode: Ref<ThemeMode>\n resolved_mode: ComputedRef<\"light\" | \"dark\">\n setMode: (mode: ThemeMode) => void\n toggleMode: () => void\n}\n\nconst DEFAULT_OPTIONS: Required<UseThemeOptions> = {\n default_mode: \"system\",\n storage_key: \"soave-ui-theme\",\n attribute: \"data-theme\"\n}\n\nexport function useTheme(options: UseThemeOptions = {}): UseThemeReturn {\n const merged_options = { ...DEFAULT_OPTIONS, ...options }\n const mode = ref<ThemeMode>(merged_options.default_mode)\n let media_query: MediaQueryList | null = null\n\n const getSystemTheme = (): \"light\" | \"dark\" => {\n if (typeof window === \"undefined\") return \"light\"\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\"\n }\n\n const resolved_mode = computed<\"light\" | \"dark\">(() => {\n if (mode.value === \"system\") {\n return getSystemTheme()\n }\n return mode.value\n })\n\n const applyTheme = (theme: \"light\" | \"dark\"): void => {\n if (typeof document === \"undefined\") return\n\n const root = document.documentElement\n\n // Set the attribute on the root element\n root.setAttribute(merged_options.attribute, theme)\n\n // Also set the class for Tailwind dark mode\n if (theme === \"dark\") {\n root.classList.add(\"dark\")\n } else {\n root.classList.remove(\"dark\")\n }\n }\n\n const setMode = (new_mode: ThemeMode): void => {\n mode.value = new_mode\n\n // Save to localStorage\n if (typeof localStorage !== \"undefined\") {\n localStorage.setItem(merged_options.storage_key, new_mode)\n }\n\n applyTheme(resolved_mode.value)\n }\n\n const toggleMode = (): void => {\n const next_mode = resolved_mode.value === \"light\" ? \"dark\" : \"light\"\n setMode(next_mode)\n }\n\n const handleSystemThemeChange = (event: MediaQueryListEvent): void => {\n if (mode.value === \"system\") {\n applyTheme(event.matches ? \"dark\" : \"light\")\n }\n }\n\n onMounted(() => {\n // Load from localStorage\n if (typeof localStorage !== \"undefined\") {\n const stored = localStorage.getItem(merged_options.storage_key) as ThemeMode | null\n if (stored && [\"light\", \"dark\", \"system\"].includes(stored)) {\n mode.value = stored\n }\n }\n\n // Listen for system theme changes\n if (typeof window !== \"undefined\") {\n media_query = window.matchMedia(\"(prefers-color-scheme: dark)\")\n media_query.addEventListener(\"change\", handleSystemThemeChange)\n }\n\n // Apply initial theme\n applyTheme(resolved_mode.value)\n })\n\n onUnmounted(() => {\n if (media_query) {\n media_query.removeEventListener(\"change\", handleSystemThemeChange)\n }\n })\n\n watch(mode, () => {\n applyTheme(resolved_mode.value)\n })\n\n return {\n mode,\n resolved_mode,\n setMode,\n toggleMode\n }\n}\n\nexport function generateThemeCSS(light: ThemeColors, dark: ThemeColors): string {\n const formatColor = (key: string, value: string): string => {\n const css_key = key.replace(/_/g, \"-\")\n return ` --${css_key}: ${value};`\n }\n\n const lightCSS = Object.entries(light)\n .map(([key, value]) => formatColor(key, value))\n .join(\"\\n\")\n\n const darkCSS = Object.entries(dark)\n .map(([key, value]) => formatColor(key, value))\n .join(\"\\n\")\n\n return `:root {\\n${lightCSS}\\n}\\n\\n.dark {\\n${darkCSS}\\n}`\n}\n"],"names":["toast"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { type ClassValue } from "clsx";
1
+ import { ClassValue } from 'clsx';
2
2
  /**
3
3
  * クラス名をマージするユーティリティ関数
4
4
  * clsxで条件付きクラスを処理し、tailwind-mergeで競合を解決
5
5
  */
6
6
  export declare const cn: (...inputs: ClassValue[]) => string;
7
+ //# sourceMappingURL=cn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../utils/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAG5C;;;GAGG;AACH,eAAO,MAAM,EAAE,GAAI,GAAG,QAAQ,UAAU,EAAE,KAAG,MAE5C,CAAA"}
@@ -1,6 +1,7 @@
1
- import type { DeepPartial } from "../types/utils";
1
+ import { DeepPartial } from '../types/utils';
2
2
  /**
3
3
  * オブジェクトを深層マージするユーティリティ関数
4
4
  * sourceの値でtargetを上書きする(undefinedは無視)
5
5
  */
6
6
  export declare const deepMerge: <T extends Record<string, unknown>>(target: T, source: DeepPartial<T>) => T;
7
+ //# sourceMappingURL=deepMerge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepMerge.d.ts","sourceRoot":"","sources":["../../utils/deepMerge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvD,QAAQ,CAAC,EACT,QAAQ,WAAW,CAAC,CAAC,CAAC,KACvB,CA2BF,CAAA"}
@@ -1,2 +1,3 @@
1
- export { cn } from "./cn";
2
- export { deepMerge } from "./deepMerge";
1
+ export { cn } from './cn';
2
+ export { deepMerge } from './deepMerge';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soave/ui",
3
- "version": "0.3.2",
3
+ "version": "0.5.0",
4
4
  "description": "soave UI - Composable-First UI Framework for Vue 3 / Nuxt 4",
5
5
  "author": "Arata Ouchi (Original SIN Architecture)",
6
6
  "license": "MIT",
@@ -31,8 +31,8 @@
31
31
  "dist"
32
32
  ],
33
33
  "scripts": {
34
- "build": "unbuild",
35
- "dev": "unbuild --stub",
34
+ "build": "vite build",
35
+ "dev": "vite build --watch",
36
36
  "typecheck": "vue-tsc --noEmit"
37
37
  },
38
38
  "peerDependencies": {
@@ -44,9 +44,11 @@
44
44
  "zod": "^3.22.0"
45
45
  },
46
46
  "devDependencies": {
47
+ "@vitejs/plugin-vue": "^6.0.0",
47
48
  "@vue/tsconfig": "^0.5.0",
48
49
  "typescript": "^5.4.0",
49
- "unbuild": "^2.0.0",
50
+ "vite": "^6.0.0",
51
+ "vite-plugin-dts": "^4.3.0",
50
52
  "vue": "^3.4.0",
51
53
  "vue-tsc": "^2.2.12"
52
54
  }
@@ -1,7 +0,0 @@
1
- export const headlessAdapter = {
2
- name: "headless",
3
- description: "Headless \u30E2\u30FC\u30C9\uFF08\u30B9\u30BF\u30A4\u30EB\u9069\u7528\u306A\u3057\uFF09",
4
- getClasses(_component, _state) {
5
- return "";
6
- }
7
- };
@@ -1,11 +0,0 @@
1
- export { registerAdapter, getAdapter, getRegisteredAdapters, ADAPTER_REGISTRY } from "./types.mjs";
2
- export { tailwindAdapter } from "./tailwind.mjs";
3
- export { cssVariablesAdapter } from "./css-variables.mjs";
4
- export { headlessAdapter } from "./headless.mjs";
5
- import { registerAdapter as registerAdapter2 } from "./types.mjs";
6
- import { tailwindAdapter as tailwindAdapter2 } from "./tailwind.mjs";
7
- import { cssVariablesAdapter as cssVariablesAdapter2 } from "./css-variables.mjs";
8
- import { headlessAdapter as headlessAdapter2 } from "./headless.mjs";
9
- registerAdapter2(tailwindAdapter2);
10
- registerAdapter2(cssVariablesAdapter2);
11
- registerAdapter2(headlessAdapter2);
@@ -1,10 +0,0 @@
1
- export const ADAPTER_REGISTRY = /* @__PURE__ */ new Map();
2
- export const registerAdapter = (adapter) => {
3
- ADAPTER_REGISTRY.set(adapter.name, adapter);
4
- };
5
- export const getAdapter = (name) => {
6
- return ADAPTER_REGISTRY.get(name);
7
- };
8
- export const getRegisteredAdapters = () => {
9
- return ADAPTER_REGISTRY;
10
- };
@@ -1,2 +0,0 @@
1
- declare const _default: import("unbuild").BuildConfig[];
2
- export default _default;
@@ -1,14 +0,0 @@
1
- import { defineBuildConfig } from "unbuild";
2
- export default defineBuildConfig({
3
- entries: [
4
- {
5
- builder: "mkdist",
6
- input: "./",
7
- outDir: "./dist",
8
- pattern: ["**/*.ts", "**/*.vue", "**/*.css"],
9
- declaration: true
10
- }
11
- ],
12
- clean: true,
13
- externals: ["vue", "zod", "clsx", "tailwind-merge"]
14
- });
@@ -1,41 +0,0 @@
1
- <template>
2
- <button
3
- :disabled="composable.state.value.disabled || composable.state.value.loading"
4
- :type="composable.state.value.type"
5
- v-bind="composable.aria_attributes.value"
6
- @click="handleClick"
7
- >
8
- <slot />
9
- </button>
10
- </template>
11
-
12
- <script setup lang="ts">
13
- import { toRef } from "vue"
14
- import { useButton } from "../../composables/useButton"
15
-
16
- const props = withDefaults(defineProps<{
17
- variant?: "primary" | "secondary" | "outline" | "ghost" | "destructive"
18
- size?: "sm" | "md" | "lg"
19
- disabled?: boolean
20
- loading?: boolean
21
- type?: "button" | "submit" | "reset"
22
- }>(), {
23
- variant: "primary",
24
- size: "md",
25
- disabled: false,
26
- loading: false,
27
- type: "button"
28
- })
29
-
30
- const emit = defineEmits<{
31
- click: [event: MouseEvent]
32
- }>()
33
-
34
- const composable = useButton(toRef(() => props))
35
-
36
- const handleClick = (event: MouseEvent) => {
37
- if (!composable.state.value.disabled && !composable.state.value.loading) {
38
- emit("click", event)
39
- }
40
- }
41
- </script>
@@ -1,24 +0,0 @@
1
- <template>
2
- <div>
3
- <slot />
4
- </div>
5
- </template>
6
-
7
- <script setup lang="ts">
8
- import { toRef } from "vue"
9
- import { useCard } from "../../composables/useCard"
10
-
11
- const props = withDefaults(defineProps<{
12
- padding?: "none" | "sm" | "md" | "lg"
13
- }>(), {
14
- padding: "md"
15
- })
16
-
17
- // Composable is available for state access if needed
18
- const composable = useCard(toRef(() => props))
19
-
20
- // Export state for external access
21
- defineExpose({
22
- state: composable.state
23
- })
24
- </script>
@@ -1,47 +0,0 @@
1
- <template>
2
- <button
3
- type="button"
4
- :disabled="composable.state.value.disabled"
5
- :data-state="dataState"
6
- v-bind="composable.aria_attributes.value"
7
- @click="handleClick"
8
- @keydown.space.prevent="handleClick"
9
- >
10
- <slot :checked="model" :indeterminate="composable.state.value.indeterminate" />
11
- </button>
12
- </template>
13
-
14
- <script setup lang="ts">
15
- import { toRef, computed } from "vue"
16
- import { useCheckbox } from "../../composables/useCheckbox"
17
-
18
- const props = withDefaults(defineProps<{
19
- size?: "sm" | "md" | "lg"
20
- disabled?: boolean
21
- indeterminate?: boolean
22
- }>(), {
23
- size: "md",
24
- disabled: false,
25
- indeterminate: false
26
- })
27
-
28
- const model = defineModel<boolean>({ default: false })
29
-
30
- const emit = defineEmits<{
31
- change: [checked: boolean]
32
- }>()
33
-
34
- const composable = useCheckbox(toRef(() => props), model)
35
-
36
- const dataState = computed(() => {
37
- if (composable.state.value.indeterminate) return "indeterminate"
38
- return model.value ? "checked" : "unchecked"
39
- })
40
-
41
- const handleClick = () => {
42
- if (!composable.state.value.disabled) {
43
- model.value = !model.value
44
- emit("change", model.value)
45
- }
46
- }
47
- </script>
@@ -1,105 +0,0 @@
1
- <template>
2
- <Teleport to="body">
3
- <div
4
- v-if="is_open"
5
- role="dialog"
6
- aria-modal="true"
7
- :aria-labelledby="titleId"
8
- :aria-describedby="descriptionId"
9
- >
10
- <!-- Overlay -->
11
- <div
12
- @click="handleOverlayClick"
13
- @keydown.escape="close"
14
- />
15
- <!-- Content -->
16
- <div
17
- ref="content_ref"
18
- tabindex="-1"
19
- @keydown.escape="close"
20
- >
21
- <slot :close="close" />
22
- </div>
23
- </div>
24
- </Teleport>
25
- </template>
26
-
27
- <script setup lang="ts">
28
- import { ref, watch, onMounted, onUnmounted, provide } from "vue"
29
- import type { Ref, InjectionKey } from "vue"
30
- import { useDialog } from "../../composables/useDialog"
31
-
32
- interface DialogContext {
33
- is_open: Ref<boolean>
34
- close: () => void
35
- titleId?: string
36
- descriptionId?: string
37
- }
38
-
39
- const DIALOG_KEY: InjectionKey<DialogContext> = Symbol("dialog")
40
-
41
- const props = withDefaults(defineProps<{
42
- closeOnOverlay?: boolean
43
- closeOnEscape?: boolean
44
- titleId?: string
45
- descriptionId?: string
46
- }>(), {
47
- closeOnOverlay: true,
48
- closeOnEscape: true
49
- })
50
-
51
- const model = defineModel<boolean>("open", { default: false })
52
-
53
- const content_ref = ref<HTMLElement | null>(null)
54
- const dialog = useDialog()
55
- const { is_open, open, close, toggle } = dialog
56
-
57
- // Sync with v-model
58
- watch(model, (value) => {
59
- if (value) {
60
- open()
61
- } else {
62
- close()
63
- }
64
- }, { immediate: true })
65
-
66
- watch(is_open, (value) => {
67
- model.value = value
68
- })
69
-
70
- const handleOverlayClick = () => {
71
- if (props.closeOnOverlay) {
72
- close()
73
- }
74
- }
75
-
76
- const handleKeyDown = (event: KeyboardEvent) => {
77
- if (event.key === "Escape" && props.closeOnEscape && is_open.value) {
78
- close()
79
- }
80
- }
81
-
82
- // Provide context for child components
83
- const context: DialogContext = {
84
- is_open,
85
- close,
86
- titleId: props.titleId,
87
- descriptionId: props.descriptionId
88
- }
89
- provide(DIALOG_KEY, context)
90
-
91
- onMounted(() => {
92
- document.addEventListener("keydown", handleKeyDown)
93
- })
94
-
95
- onUnmounted(() => {
96
- document.removeEventListener("keydown", handleKeyDown)
97
- })
98
-
99
- defineExpose({
100
- is_open,
101
- open,
102
- close,
103
- toggle
104
- })
105
- </script>
@@ -1,48 +0,0 @@
1
- <template>
2
- <input
3
- :type="composable.state.value.type"
4
- :value="modelValue"
5
- :disabled="composable.state.value.disabled"
6
- :readonly="composable.state.value.readonly"
7
- :placeholder="placeholder"
8
- :id="id"
9
- v-bind="composable.aria_attributes.value"
10
- @input="handleInput"
11
- @focus="composable.handleFocus"
12
- @blur="composable.handleBlur"
13
- />
14
- </template>
15
-
16
- <script setup lang="ts">
17
- import { toRef } from "vue"
18
- import { useInput } from "../../composables/useInput"
19
- import type { InputType, InputSize } from "../../types/input"
20
-
21
- const props = withDefaults(defineProps<{
22
- type?: InputType
23
- size?: InputSize
24
- placeholder?: string
25
- disabled?: boolean
26
- readonly?: boolean
27
- error?: string
28
- error_id?: string
29
- id?: string
30
- modelValue?: string
31
- }>(), {
32
- type: "text",
33
- size: "md",
34
- disabled: false,
35
- readonly: false
36
- })
37
-
38
- const emit = defineEmits<{
39
- "update:modelValue": [value: string]
40
- }>()
41
-
42
- const composable = useInput(toRef(() => props))
43
-
44
- const handleInput = (event: Event) => {
45
- const target = event.target as HTMLInputElement
46
- emit("update:modelValue", target.value)
47
- }
48
- </script>
@@ -1,45 +0,0 @@
1
- <template>
2
- <div
3
- role="radiogroup"
4
- :aria-orientation="orientation"
5
- >
6
- <slot />
7
- </div>
8
- </template>
9
-
10
- <script setup lang="ts">
11
- import { provide, computed } from "vue"
12
- import type { Ref, ComputedRef, InjectionKey } from "vue"
13
-
14
- interface RadioGroupContext {
15
- model_value: Ref<string>
16
- disabled: ComputedRef<boolean>
17
- updateValue: (value: string) => void
18
- }
19
-
20
- const RADIO_GROUP_KEY: InjectionKey<RadioGroupContext> = Symbol("radio-group")
21
-
22
- const props = withDefaults(defineProps<{
23
- disabled?: boolean
24
- orientation?: "horizontal" | "vertical"
25
- }>(), {
26
- disabled: false,
27
- orientation: "vertical"
28
- })
29
-
30
- const model = defineModel<string>({ default: "" })
31
-
32
- const updateValue = (value: string) => {
33
- if (!props.disabled) {
34
- model.value = value
35
- }
36
- }
37
-
38
- const context: RadioGroupContext = {
39
- model_value: model,
40
- disabled: computed(() => props.disabled),
41
- updateValue
42
- }
43
-
44
- provide(RADIO_GROUP_KEY, context)
45
- </script>