@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
@@ -1,65 +0,0 @@
1
- <template>
2
- <button
3
- type="button"
4
- :disabled="composable.state.value.disabled"
5
- :data-state="composable.state.value.checked ? 'checked' : 'unchecked'"
6
- v-bind="composable.aria_attributes.value"
7
- @click="handleClick"
8
- @keydown="handleKeyDown"
9
- >
10
- <slot :checked="composable.state.value.checked" :disabled="composable.state.value.disabled" />
11
- </button>
12
- </template>
13
-
14
- <script setup lang="ts">
15
- import { inject, toRef } from "vue"
16
- import type { Ref, ComputedRef, InjectionKey } from "vue"
17
- import { useRadioItem } from "../../composables/useRadio"
18
-
19
- interface RadioGroupContext {
20
- model_value: Ref<string>
21
- disabled: ComputedRef<boolean>
22
- updateValue: (value: string) => void
23
- }
24
-
25
- const RADIO_GROUP_KEY: InjectionKey<RadioGroupContext> = Symbol("radio-group")
26
-
27
- const props = withDefaults(defineProps<{
28
- value: string
29
- size?: "sm" | "md" | "lg"
30
- disabled?: boolean
31
- }>(), {
32
- size: "md",
33
- disabled: false
34
- })
35
-
36
- const context = inject<RadioGroupContext | null>(RADIO_GROUP_KEY, null)
37
-
38
- if (!context) {
39
- throw new Error("RadioItem must be used within RadioGroup")
40
- }
41
-
42
- const composable = useRadioItem(toRef(() => props))
43
-
44
- const handleClick = () => {
45
- if (!composable.state.value.disabled) {
46
- context.updateValue(props.value)
47
- }
48
- }
49
-
50
- const handleKeyDown = (event: KeyboardEvent) => {
51
- if (composable.state.value.disabled) return
52
-
53
- switch (event.key) {
54
- case "Enter":
55
- case " ":
56
- event.preventDefault()
57
- context.updateValue(props.value)
58
- break
59
- }
60
- }
61
-
62
- defineExpose({
63
- state: composable.state
64
- })
65
- </script>
@@ -1,114 +0,0 @@
1
- <template>
2
- <div ref="root_ref">
3
- <slot
4
- :is_open="context.is_open.value"
5
- :selected_value="model"
6
- :open="context.open"
7
- :close="context.close"
8
- :toggle="context.toggle"
9
- />
10
- </div>
11
- </template>
12
-
13
- <script setup lang="ts">
14
- import { ref, provide, watch, onMounted, onUnmounted, computed } from "vue"
15
- import type { Ref, ComputedRef, InjectionKey } from "vue"
16
-
17
- interface SelectContext {
18
- model_value: Ref<string>
19
- is_open: Ref<boolean>
20
- disabled: ComputedRef<boolean>
21
- size: ComputedRef<"sm" | "md" | "lg">
22
- placeholder: ComputedRef<string>
23
- trigger_ref: Ref<HTMLElement | null>
24
- updateValue: (value: string) => void
25
- open: () => void
26
- close: () => void
27
- toggle: () => void
28
- setTriggerRef: (element: HTMLElement | null) => void
29
- }
30
-
31
- const SELECT_KEY: InjectionKey<SelectContext> = Symbol("select")
32
-
33
- const props = withDefaults(defineProps<{
34
- size?: "sm" | "md" | "lg"
35
- disabled?: boolean
36
- placeholder?: string
37
- }>(), {
38
- size: "md",
39
- disabled: false,
40
- placeholder: ""
41
- })
42
-
43
- const model = defineModel<string>({ default: "" })
44
-
45
- const root_ref = ref<HTMLElement | null>(null)
46
- const trigger_ref = ref<HTMLElement | null>(null)
47
- const is_open = ref(false)
48
-
49
- const open = () => {
50
- if (!props.disabled) {
51
- is_open.value = true
52
- }
53
- }
54
-
55
- const close = () => {
56
- is_open.value = false
57
- }
58
-
59
- const toggle = () => {
60
- if (is_open.value) {
61
- close()
62
- } else {
63
- open()
64
- }
65
- }
66
-
67
- const updateValue = (value: string) => {
68
- model.value = value
69
- close()
70
- }
71
-
72
- const setTriggerRef = (element: HTMLElement | null) => {
73
- trigger_ref.value = element
74
- }
75
-
76
- const handleClickOutside = (event: MouseEvent) => {
77
- if (!is_open.value) return
78
- const target = event.target as Node
79
- if (root_ref.value && !root_ref.value.contains(target)) {
80
- close()
81
- }
82
- }
83
-
84
- const context: SelectContext = {
85
- model_value: model,
86
- is_open,
87
- disabled: computed(() => props.disabled),
88
- size: computed(() => props.size ?? "md"),
89
- placeholder: computed(() => props.placeholder ?? ""),
90
- trigger_ref,
91
- updateValue,
92
- open,
93
- close,
94
- toggle,
95
- setTriggerRef
96
- }
97
-
98
- provide(SELECT_KEY, context)
99
-
100
- onMounted(() => {
101
- document.addEventListener("mousedown", handleClickOutside)
102
- })
103
-
104
- onUnmounted(() => {
105
- document.removeEventListener("mousedown", handleClickOutside)
106
- })
107
-
108
- defineExpose({
109
- is_open,
110
- open,
111
- close,
112
- toggle
113
- })
114
- </script>
@@ -1,54 +0,0 @@
1
- <template>
2
- <div
3
- v-if="composable.state.value.is_open"
4
- role="listbox"
5
- tabindex="-1"
6
- @keydown="handleKeyDown"
7
- >
8
- <slot />
9
- </div>
10
- </template>
11
-
12
- <script setup lang="ts">
13
- import { inject } from "vue"
14
- import type { Ref, ComputedRef, InjectionKey } from "vue"
15
- import { useSelectContent } from "../../composables/useSelect"
16
-
17
- interface SelectContext {
18
- model_value: Ref<string>
19
- is_open: Ref<boolean>
20
- disabled: ComputedRef<boolean>
21
- size: ComputedRef<"sm" | "md" | "lg">
22
- placeholder: ComputedRef<string>
23
- trigger_ref: Ref<HTMLElement | null>
24
- updateValue: (value: string) => void
25
- open: () => void
26
- close: () => void
27
- toggle: () => void
28
- setTriggerRef: (element: HTMLElement | null) => void
29
- }
30
-
31
- const SELECT_KEY: InjectionKey<SelectContext> = Symbol("select")
32
-
33
- const context = inject<SelectContext | null>(SELECT_KEY, null)
34
-
35
- if (!context) {
36
- throw new Error("SelectContent must be used within Select")
37
- }
38
-
39
- const composable = useSelectContent()
40
-
41
- const handleKeyDown = (event: KeyboardEvent) => {
42
- switch (event.key) {
43
- case "Escape":
44
- event.preventDefault()
45
- context.close()
46
- context.trigger_ref.value?.focus()
47
- break
48
- }
49
- }
50
-
51
- defineExpose({
52
- state: composable.state
53
- })
54
- </script>
@@ -1,61 +0,0 @@
1
- <template>
2
- <div
3
- role="option"
4
- :aria-selected="composable.state.value.selected"
5
- :aria-disabled="composable.state.value.disabled"
6
- :data-state="composable.state.value.selected ? 'selected' : undefined"
7
- :data-disabled="composable.state.value.disabled ? '' : undefined"
8
- @click="handleClick"
9
- @keydown.enter="handleClick"
10
- @keydown.space.prevent="handleClick"
11
- >
12
- <slot :selected="composable.state.value.selected" :disabled="composable.state.value.disabled" />
13
- </div>
14
- </template>
15
-
16
- <script setup lang="ts">
17
- import { inject, toRef } from "vue"
18
- import type { Ref, ComputedRef, InjectionKey } from "vue"
19
- import { useSelectItem } from "../../composables/useSelect"
20
-
21
- interface SelectContext {
22
- model_value: Ref<string>
23
- is_open: Ref<boolean>
24
- disabled: ComputedRef<boolean>
25
- size: ComputedRef<"sm" | "md" | "lg">
26
- placeholder: ComputedRef<string>
27
- trigger_ref: Ref<HTMLElement | null>
28
- updateValue: (value: string) => void
29
- open: () => void
30
- close: () => void
31
- toggle: () => void
32
- setTriggerRef: (element: HTMLElement | null) => void
33
- }
34
-
35
- const SELECT_KEY: InjectionKey<SelectContext> = Symbol("select")
36
-
37
- const props = withDefaults(defineProps<{
38
- value: string
39
- disabled?: boolean
40
- }>(), {
41
- disabled: false
42
- })
43
-
44
- const context = inject<SelectContext | null>(SELECT_KEY, null)
45
-
46
- if (!context) {
47
- throw new Error("SelectItem must be used within Select")
48
- }
49
-
50
- const composable = useSelectItem(toRef(() => ({ value: props.value, disabled: props.disabled })))
51
-
52
- const handleClick = () => {
53
- if (!composable.state.value.disabled) {
54
- context.updateValue(props.value)
55
- }
56
- }
57
-
58
- defineExpose({
59
- state: composable.state
60
- })
61
- </script>
@@ -1,75 +0,0 @@
1
- <template>
2
- <button
3
- ref="trigger_element"
4
- type="button"
5
- :disabled="composable.state.value.disabled"
6
- :aria-expanded="composable.state.value.is_open"
7
- aria-haspopup="listbox"
8
- @click="handleClick"
9
- @keydown="handleKeyDown"
10
- >
11
- <slot :is_open="composable.state.value.is_open" :disabled="composable.state.value.disabled" />
12
- </button>
13
- </template>
14
-
15
- <script setup lang="ts">
16
- import { ref, inject, onMounted } from "vue"
17
- import type { Ref, ComputedRef, InjectionKey } from "vue"
18
- import { useSelectTrigger } from "../../composables/useSelect"
19
-
20
- interface SelectContext {
21
- model_value: Ref<string>
22
- is_open: Ref<boolean>
23
- disabled: ComputedRef<boolean>
24
- size: ComputedRef<"sm" | "md" | "lg">
25
- placeholder: ComputedRef<string>
26
- trigger_ref: Ref<HTMLElement | null>
27
- updateValue: (value: string) => void
28
- open: () => void
29
- close: () => void
30
- toggle: () => void
31
- setTriggerRef: (element: HTMLElement | null) => void
32
- }
33
-
34
- const SELECT_KEY: InjectionKey<SelectContext> = Symbol("select")
35
-
36
- const trigger_element = ref<HTMLElement | null>(null)
37
- const context = inject<SelectContext | null>(SELECT_KEY, null)
38
-
39
- if (!context) {
40
- throw new Error("SelectTrigger must be used within Select")
41
- }
42
-
43
- const composable = useSelectTrigger()
44
-
45
- const handleClick = () => {
46
- if (!composable.state.value.disabled) {
47
- context.toggle()
48
- }
49
- }
50
-
51
- const handleKeyDown = (event: KeyboardEvent) => {
52
- if (composable.state.value.disabled) return
53
-
54
- switch (event.key) {
55
- case "Enter":
56
- case " ":
57
- case "ArrowDown":
58
- event.preventDefault()
59
- context.open()
60
- break
61
- case "ArrowUp":
62
- event.preventDefault()
63
- context.open()
64
- break
65
- }
66
- }
67
-
68
- onMounted(() => {
69
- context.setTriggerRef(trigger_element.value)
70
- })
71
-
72
- defineExpose({
73
- state: composable.state
74
- })
75
- </script>
@@ -1,45 +0,0 @@
1
- <template>
2
- <button
3
- type="button"
4
- :disabled="composable.state.value.disabled"
5
- :data-state="model ? 'checked' : 'unchecked'"
6
- v-bind="composable.aria_attributes.value"
7
- @click="handleClick"
8
- >
9
- <slot :checked="model">
10
- <span :data-state="model ? 'checked' : 'unchecked'" />
11
- </slot>
12
- </button>
13
- </template>
14
-
15
- <script setup lang="ts">
16
- import { toRef } from "vue"
17
- import { useSwitch } from "../../composables/useSwitch"
18
-
19
- const props = withDefaults(defineProps<{
20
- size?: "sm" | "md" | "lg"
21
- disabled?: boolean
22
- }>(), {
23
- size: "md",
24
- disabled: false
25
- })
26
-
27
- const model = defineModel<boolean>({ default: false })
28
-
29
- const emit = defineEmits<{
30
- change: [checked: boolean]
31
- }>()
32
-
33
- const composable = useSwitch(toRef(() => props), model)
34
-
35
- const handleClick = () => {
36
- if (!composable.state.value.disabled) {
37
- model.value = !model.value
38
- emit("change", model.value)
39
- }
40
- }
41
-
42
- defineExpose({
43
- state: composable.state
44
- })
45
- </script>
@@ -1,55 +0,0 @@
1
- <template>
2
- <textarea
3
- :value="modelValue"
4
- :disabled="composable.state.value.disabled"
5
- :readonly="composable.state.value.readonly"
6
- :placeholder="placeholder"
7
- :rows="rows"
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 { useTextarea } from "../../composables/useTextarea"
19
- import type { TextareaSize, TextareaResize } from "../../types/textarea"
20
-
21
- const props = withDefaults(defineProps<{
22
- size?: TextareaSize
23
- placeholder?: string
24
- disabled?: boolean
25
- readonly?: boolean
26
- error?: string
27
- error_id?: string
28
- rows?: number
29
- resize?: TextareaResize
30
- modelValue?: string
31
- id?: string
32
- }>(), {
33
- size: "md",
34
- disabled: false,
35
- readonly: false,
36
- rows: 3,
37
- resize: "vertical"
38
- })
39
-
40
- const emit = defineEmits<{
41
- "update:modelValue": [value: string]
42
- }>()
43
-
44
- const composable = useTextarea(toRef(() => props))
45
-
46
- const handleInput = (event: Event) => {
47
- const target = event.target as HTMLTextAreaElement
48
- emit("update:modelValue", target.value)
49
- }
50
-
51
- defineExpose({
52
- state: composable.state,
53
- is_focused: composable.is_focused
54
- })
55
- </script>
@@ -1,13 +0,0 @@
1
- export { default as Button } from "./Button.vue";
2
- export { default as Input } from "./Input.vue";
3
- export { default as Textarea } from "./Textarea.vue";
4
- export { default as Card } from "./Card.vue";
5
- export { default as Checkbox } from "./Checkbox.vue";
6
- export { default as Switch } from "./Switch.vue";
7
- export { default as Dialog } from "./Dialog.vue";
8
- export { default as Select } from "./Select.vue";
9
- export { default as SelectTrigger } from "./SelectTrigger.vue";
10
- export { default as SelectContent } from "./SelectContent.vue";
11
- export { default as SelectItem } from "./SelectItem.vue";
12
- export { default as RadioGroup } from "./RadioGroup.vue";
13
- export { default as RadioItem } from "./RadioItem.vue";
@@ -1,17 +0,0 @@
1
- export { useButton } from "./useButton.mjs";
2
- export { useInput } from "./useInput.mjs";
3
- export { useCard } from "./useCard.mjs";
4
- export { useDialog } from "./useDialog.mjs";
5
- export { useForm } from "./useForm.mjs";
6
- export { useUIProvider, useUI, useUIConfig, useStyleAdapter, UI_PROVIDER_KEY, UI_CONFIG_KEY } from "./useUIConfig.mjs";
7
- export { useCheckbox } from "./useCheckbox.mjs";
8
- export { useRadioItem } from "./useRadio.mjs";
9
- export { useSwitch } from "./useSwitch.mjs";
10
- export { useTextarea } from "./useTextarea.mjs";
11
- export { useSelectTrigger, useSelectContent, useSelectItem } from "./useSelect.mjs";
12
- export { useFileInput } from "./useFileInput.mjs";
13
- export { useToast, toast } from "./useToast.mjs";
14
- export { useTooltip } from "./useTooltip.mjs";
15
- export { usePopover } from "./usePopover.mjs";
16
- export { useDropdown } from "./useDropdown.mjs";
17
- export { useTheme, generateThemeCSS } from "./useTheme.mjs";
@@ -1,22 +0,0 @@
1
- import { computed, readonly } from "vue";
2
- import { useUI } from "./useUIConfig.mjs";
3
- export const useButton = (props) => {
4
- const ui_config = useUI("button");
5
- const state = computed(() => ({
6
- variant: props.value.variant ?? ui_config.default_variant,
7
- size: props.value.size ?? ui_config.default_size,
8
- disabled: props.value.disabled ?? false,
9
- loading: props.value.loading ?? false,
10
- type: props.value.type ?? "button"
11
- }));
12
- const aria_attributes = computed(() => ({
13
- "aria-disabled": state.value.disabled || void 0,
14
- "aria-busy": state.value.loading || void 0,
15
- role: "button",
16
- type: state.value.type
17
- }));
18
- return {
19
- state: readonly(state),
20
- aria_attributes: readonly(aria_attributes)
21
- };
22
- };
@@ -1,11 +0,0 @@
1
- import { computed, readonly } from "vue";
2
- import { useUI } from "./useUIConfig.mjs";
3
- export const useCard = (props) => {
4
- const ui_config = useUI("card");
5
- const state = computed(() => ({
6
- padding: props.value.padding ?? ui_config.default_padding
7
- }));
8
- return {
9
- state: readonly(state)
10
- };
11
- };
@@ -1,18 +0,0 @@
1
- import { computed, readonly } from "vue";
2
- export const useCheckbox = (props, checked) => {
3
- const state = computed(() => ({
4
- size: props.value.size ?? "md",
5
- disabled: props.value.disabled ?? false,
6
- indeterminate: props.value.indeterminate ?? false,
7
- checked: checked.value
8
- }));
9
- const aria_attributes = computed(() => ({
10
- role: "checkbox",
11
- "aria-checked": state.value.indeterminate ? "mixed" : state.value.checked,
12
- "aria-disabled": state.value.disabled || void 0
13
- }));
14
- return {
15
- state: readonly(state),
16
- aria_attributes: readonly(aria_attributes)
17
- };
18
- };
@@ -1,19 +0,0 @@
1
- import { ref, readonly } from "vue";
2
- export const useDialog = () => {
3
- const is_open = ref(false);
4
- const open = () => {
5
- is_open.value = true;
6
- };
7
- const close = () => {
8
- is_open.value = false;
9
- };
10
- const toggle = () => {
11
- is_open.value = !is_open.value;
12
- };
13
- return {
14
- is_open: readonly(is_open),
15
- open,
16
- close,
17
- toggle
18
- };
19
- };