@nuxt/ui 3.0.0-alpha.9 → 3.0.0-beta.2

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 (289) hide show
  1. package/.nuxt/ui/accordion.ts +2 -2
  2. package/.nuxt/ui/alert.ts +122 -95
  3. package/.nuxt/ui/avatar-group.ts +14 -2
  4. package/.nuxt/ui/avatar.ts +16 -4
  5. package/.nuxt/ui/badge.ts +139 -93
  6. package/.nuxt/ui/breadcrumb.ts +5 -5
  7. package/.nuxt/ui/button-group.ts +13 -0
  8. package/.nuxt/ui/button.ts +167 -136
  9. package/.nuxt/ui/calendar.ts +103 -0
  10. package/.nuxt/ui/card.ts +27 -1
  11. package/.nuxt/ui/carousel.ts +7 -5
  12. package/.nuxt/ui/checkbox.ts +45 -27
  13. package/.nuxt/ui/chip.ts +44 -15
  14. package/.nuxt/ui/color-picker.ts +47 -0
  15. package/.nuxt/ui/command-palette.ts +28 -18
  16. package/.nuxt/ui/container.ts +1 -1
  17. package/.nuxt/ui/context-menu.ts +64 -46
  18. package/.nuxt/ui/drawer.ts +83 -15
  19. package/.nuxt/ui/dropdown-menu.ts +65 -47
  20. package/.nuxt/ui/form-field.ts +15 -7
  21. package/.nuxt/ui/index.ts +5 -1
  22. package/.nuxt/ui/input-menu.ts +150 -116
  23. package/.nuxt/ui/input-number.ts +102 -71
  24. package/.nuxt/ui/input.ts +111 -76
  25. package/.nuxt/ui/kbd.ts +18 -6
  26. package/.nuxt/ui/link.ts +3 -3
  27. package/.nuxt/ui/modal.ts +8 -7
  28. package/.nuxt/ui/navigation-menu.ts +244 -131
  29. package/.nuxt/ui/pin-input.ts +77 -51
  30. package/.nuxt/ui/popover.ts +2 -2
  31. package/.nuxt/ui/progress.ts +111 -72
  32. package/.nuxt/ui/radio-group.ts +45 -22
  33. package/.nuxt/ui/select-menu.ts +122 -86
  34. package/.nuxt/ui/select.ts +120 -84
  35. package/.nuxt/ui/separator.ts +60 -31
  36. package/.nuxt/ui/skeleton.ts +1 -1
  37. package/.nuxt/ui/slideover.ts +17 -9
  38. package/.nuxt/ui/slider.ts +61 -38
  39. package/.nuxt/ui/stepper.ts +202 -0
  40. package/.nuxt/ui/switch.ts +40 -22
  41. package/.nuxt/ui/table.ts +48 -31
  42. package/.nuxt/ui/tabs.ts +100 -72
  43. package/.nuxt/ui/textarea.ts +111 -76
  44. package/.nuxt/ui/toast.ts +53 -33
  45. package/.nuxt/ui/toaster.ts +31 -15
  46. package/.nuxt/ui/tooltip.ts +2 -2
  47. package/.nuxt/ui/tree.ts +154 -0
  48. package/.nuxt/ui.css +92 -0
  49. package/README.md +19 -8
  50. package/cli/commands/make/component.mjs +12 -0
  51. package/cli/package.json +2 -2
  52. package/cli/templates.mjs +27 -22
  53. package/dist/module.cjs +9 -171
  54. package/dist/module.d.cts +5 -15
  55. package/dist/module.d.mts +5 -15
  56. package/dist/module.d.ts +5 -15
  57. package/dist/module.json +2 -2
  58. package/dist/module.mjs +12 -168
  59. package/dist/runtime/components/Accordion.vue +8 -39
  60. package/dist/runtime/components/Alert.vue +22 -21
  61. package/dist/runtime/components/App.vue +9 -15
  62. package/dist/runtime/components/Avatar.vue +33 -21
  63. package/dist/runtime/components/AvatarGroup.vue +5 -7
  64. package/dist/runtime/components/Badge.vue +10 -8
  65. package/dist/runtime/components/Breadcrumb.vue +5 -31
  66. package/dist/runtime/components/Button.vue +5 -8
  67. package/dist/runtime/components/ButtonGroup.vue +5 -7
  68. package/dist/runtime/components/Calendar.vue +194 -0
  69. package/dist/runtime/components/Card.vue +10 -9
  70. package/dist/runtime/components/Carousel.vue +15 -10
  71. package/dist/runtime/components/Checkbox.vue +32 -38
  72. package/dist/runtime/components/Chip.vue +6 -8
  73. package/dist/runtime/components/Collapsible.vue +10 -11
  74. package/dist/runtime/components/ColorPicker.vue +297 -0
  75. package/dist/runtime/components/CommandPalette.vue +111 -97
  76. package/dist/runtime/components/Container.vue +4 -7
  77. package/dist/runtime/components/ContextMenu.vue +16 -69
  78. package/dist/runtime/components/ContextMenuContent.vue +12 -10
  79. package/dist/runtime/components/Drawer.vue +23 -12
  80. package/dist/runtime/components/DropdownMenu.vue +18 -59
  81. package/dist/runtime/components/DropdownMenuContent.vue +12 -10
  82. package/dist/runtime/components/Form.vue +65 -34
  83. package/dist/runtime/components/FormField.vue +22 -13
  84. package/dist/runtime/components/Icon.vue +1 -1
  85. package/dist/runtime/components/Input.vue +15 -7
  86. package/dist/runtime/components/InputMenu.vue +95 -104
  87. package/dist/runtime/components/InputNumber.vue +14 -9
  88. package/dist/runtime/components/Kbd.vue +5 -6
  89. package/dist/runtime/components/Link.vue +5 -8
  90. package/dist/runtime/components/LinkBase.vue +1 -1
  91. package/dist/runtime/components/Modal.vue +51 -38
  92. package/dist/runtime/components/NavigationMenu.vue +129 -114
  93. package/dist/runtime/components/OverlayProvider.vue +29 -0
  94. package/dist/runtime/components/Pagination.vue +6 -9
  95. package/dist/runtime/components/PinInput.vue +10 -11
  96. package/dist/runtime/components/Popover.vue +16 -18
  97. package/dist/runtime/components/Progress.vue +28 -12
  98. package/dist/runtime/components/RadioGroup.vue +9 -12
  99. package/dist/runtime/components/Select.vue +60 -34
  100. package/dist/runtime/components/SelectMenu.vue +160 -165
  101. package/dist/runtime/components/Separator.vue +6 -5
  102. package/dist/runtime/components/Skeleton.vue +4 -7
  103. package/dist/runtime/components/Slideover.vue +51 -37
  104. package/dist/runtime/components/Slider.vue +8 -7
  105. package/dist/runtime/components/Stepper.vue +170 -0
  106. package/dist/runtime/components/Switch.vue +19 -23
  107. package/dist/runtime/components/Table.vue +146 -31
  108. package/dist/runtime/components/Tabs.vue +12 -31
  109. package/dist/runtime/components/Textarea.vue +17 -8
  110. package/dist/runtime/components/Toast.vue +36 -25
  111. package/dist/runtime/components/Toaster.vue +10 -11
  112. package/dist/runtime/components/Tooltip.vue +9 -12
  113. package/dist/runtime/components/Tree.vue +196 -0
  114. package/dist/runtime/composables/defineShortcuts.d.ts +1 -1
  115. package/dist/runtime/composables/defineShortcuts.js +2 -2
  116. package/dist/runtime/composables/useFormField.d.ts +7 -3
  117. package/dist/runtime/composables/useFormField.js +18 -8
  118. package/dist/runtime/composables/useLocale.js +1 -1
  119. package/dist/runtime/composables/useOverlay.d.ts +30 -0
  120. package/dist/runtime/composables/useOverlay.js +71 -0
  121. package/dist/runtime/composables/useToast.d.ts +4 -3
  122. package/dist/runtime/composables/useToast.js +20 -6
  123. package/dist/runtime/index.css +1 -1
  124. package/dist/runtime/keyframes.css +1 -1
  125. package/dist/runtime/locale/ar.js +9 -1
  126. package/dist/runtime/locale/az.js +54 -0
  127. package/dist/runtime/locale/bn.js +54 -0
  128. package/dist/runtime/locale/cs.js +9 -1
  129. package/dist/runtime/locale/da.d.ts +2 -0
  130. package/dist/runtime/locale/da.js +54 -0
  131. package/dist/runtime/locale/de.js +11 -3
  132. package/dist/runtime/locale/el.d.ts +2 -0
  133. package/dist/runtime/locale/el.js +54 -0
  134. package/dist/runtime/locale/en.js +9 -1
  135. package/dist/runtime/locale/es.js +9 -1
  136. package/dist/runtime/locale/et.d.ts +2 -0
  137. package/dist/runtime/locale/et.js +54 -0
  138. package/dist/runtime/locale/fa_ir.js +9 -1
  139. package/dist/runtime/locale/fi.d.ts +2 -0
  140. package/dist/runtime/locale/fi.js +54 -0
  141. package/dist/runtime/locale/fr.js +9 -1
  142. package/dist/runtime/locale/he.d.ts +2 -0
  143. package/dist/runtime/locale/he.js +53 -0
  144. package/dist/runtime/locale/hi.d.ts +2 -0
  145. package/dist/runtime/locale/hi.js +54 -0
  146. package/dist/runtime/locale/hu.d.ts +2 -0
  147. package/dist/runtime/locale/hu.js +54 -0
  148. package/dist/runtime/locale/id.d.ts +2 -0
  149. package/dist/runtime/locale/id.js +54 -0
  150. package/dist/runtime/locale/index.d.ts +25 -3
  151. package/dist/runtime/locale/index.js +25 -3
  152. package/dist/runtime/locale/it.js +9 -1
  153. package/dist/runtime/locale/ja.d.ts +2 -0
  154. package/dist/runtime/locale/ja.js +54 -0
  155. package/dist/runtime/locale/km.d.ts +2 -0
  156. package/dist/runtime/locale/km.js +54 -0
  157. package/dist/runtime/locale/ko.d.ts +2 -0
  158. package/dist/runtime/locale/ko.js +54 -0
  159. package/dist/runtime/locale/nb_no.d.ts +2 -0
  160. package/dist/runtime/locale/nb_no.js +54 -0
  161. package/dist/runtime/locale/nl.d.ts +2 -0
  162. package/dist/runtime/locale/nl.js +54 -0
  163. package/dist/runtime/locale/pl.js +9 -1
  164. package/dist/runtime/locale/pt.d.ts +2 -0
  165. package/dist/runtime/locale/pt.js +54 -0
  166. package/dist/runtime/locale/pt_br.d.ts +2 -0
  167. package/dist/runtime/locale/pt_br.js +54 -0
  168. package/dist/runtime/locale/ru.js +9 -1
  169. package/dist/runtime/locale/sk.d.ts +2 -0
  170. package/dist/runtime/locale/sk.js +54 -0
  171. package/dist/runtime/locale/sv.d.ts +2 -0
  172. package/dist/runtime/locale/sv.js +54 -0
  173. package/dist/runtime/locale/th.d.ts +2 -0
  174. package/dist/runtime/locale/th.js +54 -0
  175. package/dist/runtime/locale/tr.d.ts +2 -0
  176. package/dist/runtime/locale/tr.js +54 -0
  177. package/dist/runtime/locale/uk.d.ts +2 -0
  178. package/dist/runtime/locale/uk.js +54 -0
  179. package/dist/runtime/locale/vi.d.ts +2 -0
  180. package/dist/runtime/locale/vi.js +54 -0
  181. package/dist/runtime/locale/zh_cn.d.ts +2 -0
  182. package/dist/runtime/locale/{zh_hans.js → zh_cn.js} +10 -2
  183. package/dist/runtime/locale/zh_tw.d.ts +2 -0
  184. package/dist/runtime/locale/{zh_hant.js → zh_tw.js} +16 -8
  185. package/dist/runtime/plugins/colors.js +8 -5
  186. package/dist/runtime/types/form.d.ts +24 -15
  187. package/dist/runtime/types/form.js +2 -2
  188. package/dist/runtime/types/index.d.ts +5 -0
  189. package/dist/runtime/types/index.js +5 -0
  190. package/dist/runtime/types/locale.d.ts +8 -0
  191. package/dist/runtime/types/utils.d.ts +7 -3
  192. package/dist/runtime/utils/form.d.ts +4 -4
  193. package/dist/runtime/utils/form.js +6 -8
  194. package/dist/runtime/utils/index.d.ts +1 -1
  195. package/dist/runtime/utils/index.js +15 -2
  196. package/dist/runtime/utils/tv.d.ts +1 -0
  197. package/dist/runtime/utils/tv.js +4 -0
  198. package/dist/runtime/vue/components/Icon.vue +2 -2
  199. package/dist/runtime/vue/components/Link.vue +87 -23
  200. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  201. package/dist/runtime/vue/composables/useAppConfig.js +2 -0
  202. package/dist/runtime/vue/plugins/head.d.ts +1 -1
  203. package/dist/runtime/vue/plugins/head.js +3 -3
  204. package/dist/runtime/vue/stubs.d.ts +19 -0
  205. package/dist/runtime/vue/stubs.js +37 -0
  206. package/dist/shared/{ui.d52SSCwA.mjs → ui.DSPu6Y8j.mjs} +905 -401
  207. package/dist/shared/{ui.BPnAe4QS.cjs → ui.DfK2RX6G.cjs} +908 -401
  208. package/dist/unplugin.cjs +62 -26
  209. package/dist/unplugin.d.cts +13 -1
  210. package/dist/unplugin.d.mts +13 -1
  211. package/dist/unplugin.d.ts +13 -1
  212. package/dist/unplugin.mjs +61 -25
  213. package/dist/vite.cjs +3 -2
  214. package/dist/vite.d.cts +2 -0
  215. package/dist/vite.d.mts +2 -0
  216. package/dist/vite.d.ts +2 -0
  217. package/dist/vite.mjs +3 -2
  218. package/package.json +103 -67
  219. package/dist/chunks/component-meta.cjs +0 -77249
  220. package/dist/chunks/component-meta.mjs +0 -77247
  221. package/dist/client/devtools/200.html +0 -1
  222. package/dist/client/devtools/404.html +0 -1
  223. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKK58UfivUw4aw-SK92LTmKP0.woff2 +0 -0
  224. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKy58UfivUw-9uYm8d48E4.woff2 +0 -0
  225. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg-VNw7NHvqnp.woff2 +0 -0
  226. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0-EkYdMs3MAX.woff2 +0 -0
  227. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-7DW3w-R7n06NbhGy.woff +0 -0
  228. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDG3w-leGNfkTmsj.woff +0 -0
  229. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDW3w-ciElMF03ku.woff +0 -0
  230. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JCm3w-sB722Uoa0f.woff +0 -0
  231. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JDW3w-PBDI1JDjwV.woff +0 -0
  232. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8gCm3w-0q1hqVn09O.woff +0 -0
  233. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9XCm3w-ByvzuLy2fa.woff +0 -0
  234. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9uCm3w-5TKCIs6EEw.woff +0 -0
  235. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat_XDW3w-r2swRDGfn2.woff +0 -0
  236. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAC5thTQ-ldB60l5U8r.woff +0 -0
  237. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpthTQ-wbFKGFDrgo.woff +0 -0
  238. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpxhTQ-LLUBv5jskj.woff +0 -0
  239. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwARZthTQ-F71RdTRbNg.woff +0 -0
  240. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwA_JxhTQ-6nh65gZkc0.woff +0 -0
  241. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAfJthTQ-aMoWEJLmTt.woff +0 -0
  242. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAkJxhTQ-WMBvmLOgKm.woff +0 -0
  243. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAop1hTQ-utGC2hnWq2.woff +0 -0
  244. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxhTQ-YpyTieVa5B.woff +0 -0
  245. package/dist/client/devtools/_nuxt/BDC8ywlR.js +0 -1
  246. package/dist/client/devtools/_nuxt/BT004Uxp.js +0 -53
  247. package/dist/client/devtools/_nuxt/C1H2Soz3.js +0 -1
  248. package/dist/client/devtools/_nuxt/builds/latest.json +0 -1
  249. package/dist/client/devtools/_nuxt/builds/meta/f98c13ea-d751-4b37-8ce3-94e99708745f.json +0 -1
  250. package/dist/client/devtools/_nuxt/entry.Bx6WJjrx.css +0 -1
  251. package/dist/client/devtools/_nuxt/error-404.Cq4qshcf.css +0 -1
  252. package/dist/client/devtools/_nuxt/error-500.ax1aM34m.css +0 -1
  253. package/dist/client/devtools/favicon.svg +0 -1
  254. package/dist/client/devtools/index.html +0 -1
  255. package/dist/devtools/runtime/DevtoolsRenderer.vue +0 -53
  256. package/dist/devtools/runtime/examples/AvatarGroupExample.vue +0 -7
  257. package/dist/devtools/runtime/examples/ButtonGroupExample.vue +0 -8
  258. package/dist/devtools/runtime/examples/CardExample.vue +0 -13
  259. package/dist/devtools/runtime/examples/CarouselExample.vue +0 -13
  260. package/dist/devtools/runtime/examples/ChipExample.vue +0 -5
  261. package/dist/devtools/runtime/examples/CollapsibleExample.vue +0 -8
  262. package/dist/devtools/runtime/examples/CommandPaletteExample.vue +0 -29
  263. package/dist/devtools/runtime/examples/ContainerExample.vue +0 -5
  264. package/dist/devtools/runtime/examples/ContextMenuExample.vue +0 -5
  265. package/dist/devtools/runtime/examples/DrawerExample.vue +0 -8
  266. package/dist/devtools/runtime/examples/DropdownMenuExample.vue +0 -5
  267. package/dist/devtools/runtime/examples/FormExample.vue +0 -30
  268. package/dist/devtools/runtime/examples/FormFieldExample.vue +0 -5
  269. package/dist/devtools/runtime/examples/LinkExample.vue +0 -5
  270. package/dist/devtools/runtime/examples/ModalExample.vue +0 -8
  271. package/dist/devtools/runtime/examples/PopoverExample.vue +0 -8
  272. package/dist/devtools/runtime/examples/SkeletonExample.vue +0 -3
  273. package/dist/devtools/runtime/examples/SlideoverExample.vue +0 -8
  274. package/dist/devtools/runtime/examples/ToasterExample.vue +0 -11
  275. package/dist/devtools/runtime/examples/TooltipExample.vue +0 -5
  276. package/dist/runtime/components/ModalProvider.vue +0 -12
  277. package/dist/runtime/components/SlideoverProvider.vue +0 -12
  278. package/dist/runtime/composables/extendDevtoolsMeta.d.ts +0 -7
  279. package/dist/runtime/composables/extendDevtoolsMeta.js +0 -2
  280. package/dist/runtime/composables/useModal.d.ts +0 -17
  281. package/dist/runtime/composables/useModal.js +0 -46
  282. package/dist/runtime/composables/useSlideover.d.ts +0 -17
  283. package/dist/runtime/composables/useSlideover.js +0 -46
  284. package/dist/runtime/plugins/modal.d.ts +0 -2
  285. package/dist/runtime/plugins/modal.js +0 -10
  286. package/dist/runtime/plugins/slideover.d.ts +0 -2
  287. package/dist/runtime/plugins/slideover.js +0 -10
  288. /package/dist/runtime/locale/{zh_hans.d.ts → az.d.ts} +0 -0
  289. /package/dist/runtime/locale/{zh_hant.d.ts → bn.d.ts} +0 -0
@@ -1,13 +1,13 @@
1
1
  <script lang="ts">
2
- import { tv, type VariantProps } from 'tailwind-variants'
2
+ import type { VariantProps } from 'tailwind-variants'
3
3
  import type { AppConfig } from '@nuxt/schema'
4
4
  import _appConfig from '#build/app.config'
5
5
  import theme from '#build/ui/chip'
6
- import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
6
+ import { tv } from '../utils/tv'
7
7
 
8
- const appConfig = _appConfig as AppConfig & { ui: { chip: Partial<typeof theme> } }
8
+ const appConfigChip = _appConfig as AppConfig & { ui: { chip: Partial<typeof theme> } }
9
9
 
10
- const chip = tv({ extend: tv(theme), ...(appConfig.ui?.chip || {}) })
10
+ const chip = tv({ extend: tv(theme), ...(appConfigChip.ui?.chip || {}) })
11
11
 
12
12
  type ChipVariants = VariantProps<typeof chip>
13
13
 
@@ -22,7 +22,7 @@ export interface ChipProps {
22
22
  color?: ChipVariants['color']
23
23
  size?: ChipVariants['size']
24
24
  position?: ChipVariants['position']
25
- /** When `true`, translate the chip at the edge for non rounded elements. */
25
+ /** When `true`, keep the chip inside the component for rounded elements. */
26
26
  inset?: boolean
27
27
  /** When `true`, render the chip relatively to the parent. */
28
28
  standalone?: boolean
@@ -38,13 +38,11 @@ export interface ChipSlots {
38
38
  default(props?: {}): any
39
39
  content(props?: {}): any
40
40
  }
41
-
42
- extendDevtoolsMeta({ example: 'ChipExample' })
43
41
  </script>
44
42
 
45
43
  <script setup lang="ts">
46
44
  import { computed } from 'vue'
47
- import { Primitive, Slot } from 'radix-vue'
45
+ import { Primitive, Slot } from 'reka-ui'
48
46
  import { useAvatarGroup } from '../composables/useAvatarGroup'
49
47
 
50
48
  defineOptions({ inheritAttrs: false })
@@ -1,16 +1,15 @@
1
1
  <script lang="ts">
2
- import { tv } from 'tailwind-variants'
3
- import type { CollapsibleRootProps, CollapsibleRootEmits } from 'radix-vue'
2
+ import type { CollapsibleRootProps, CollapsibleRootEmits } from 'reka-ui'
4
3
  import type { AppConfig } from '@nuxt/schema'
5
4
  import _appConfig from '#build/app.config'
6
5
  import theme from '#build/ui/collapsible'
7
- import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
6
+ import { tv } from '../utils/tv'
8
7
 
9
- const appConfig = _appConfig as AppConfig & { ui: { collapsible: Partial<typeof theme> } }
8
+ const appConfigCollapsible = _appConfig as AppConfig & { ui: { collapsible: Partial<typeof theme> } }
10
9
 
11
- const collapsible = tv({ extend: tv(theme), ...(appConfig.ui?.collapsible || {}) })
10
+ const collapsible = tv({ extend: tv(theme), ...(appConfigCollapsible.ui?.collapsible || {}) })
12
11
 
13
- export interface CollapsibleProps extends Pick<CollapsibleRootProps, 'defaultOpen' | 'open' | 'disabled'> {
12
+ export interface CollapsibleProps extends Pick<CollapsibleRootProps, 'defaultOpen' | 'open' | 'disabled' | 'unmountOnHide'> {
14
13
  /**
15
14
  * The element or component this component should render as.
16
15
  * @defaultValue 'div'
@@ -26,19 +25,19 @@ export interface CollapsibleSlots {
26
25
  default(props: { open: boolean }): any
27
26
  content(props?: {}): any
28
27
  }
29
-
30
- extendDevtoolsMeta({ example: 'CollapsibleExample' })
31
28
  </script>
32
29
 
33
30
  <script setup lang="ts">
34
- import { CollapsibleRoot, CollapsibleTrigger, CollapsibleContent, useForwardPropsEmits } from 'radix-vue'
31
+ import { CollapsibleRoot, CollapsibleTrigger, CollapsibleContent, useForwardPropsEmits } from 'reka-ui'
35
32
  import { reactivePick } from '@vueuse/core'
36
33
 
37
- const props = defineProps<CollapsibleProps>()
34
+ const props = withDefaults(defineProps<CollapsibleProps>(), {
35
+ unmountOnHide: true
36
+ })
38
37
  const emits = defineEmits<CollapsibleEmits>()
39
38
  const slots = defineSlots<CollapsibleSlots>()
40
39
 
41
- const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'defaultOpen', 'open', 'disabled'), emits)
40
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'defaultOpen', 'open', 'disabled', 'unmountOnHide'), emits)
42
41
 
43
42
  // eslint-disable-next-line vue/no-dupe-keys
44
43
  const ui = collapsible()
@@ -0,0 +1,297 @@
1
+ <script lang="ts">
2
+ import type { VariantProps } from 'tailwind-variants'
3
+ import type { MaybeRefOrGetter } from '@vueuse/shared'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/color-picker'
7
+ import { tv } from '../utils/tv'
8
+ import type { HSLObject } from 'colortranslator'
9
+
10
+ const appConfigColorPicker = _appConfig as AppConfig & { ui: { colorPicker: Partial<typeof theme> } }
11
+
12
+ const colorPicker = tv({ extend: tv(theme), ...(appConfigColorPicker.ui?.colorPicker || {}) })
13
+
14
+ type ColorPickerVariants = VariantProps<typeof colorPicker>
15
+
16
+ type HSVColor = {
17
+ h: number
18
+ s: number
19
+ v: number
20
+ }
21
+
22
+ function HSLtoHSV(hsl: HSLObject): HSVColor {
23
+ const x = hsl.S * (hsl.L < 50 ? hsl.L : 100 - hsl.L)
24
+ const v = hsl.L + (x / 100)
25
+
26
+ return {
27
+ h: hsl.H,
28
+ s: hsl.L === 0 ? hsl.S : 2 * x / v,
29
+ v
30
+ }
31
+ }
32
+
33
+ function HSVtoHSL(hsv: HSVColor): HSLObject {
34
+ const x = (200 - hsv.s) * hsv.v / 100
35
+
36
+ return {
37
+ H: hsv.h,
38
+ S: x === 0 || x === 200 ? 0 : Math.round(hsv.s * hsv.v / (x <= 100 ? x : 200 - x)),
39
+ L: Math.round(x / 2)
40
+ }
41
+ }
42
+
43
+ export type ColorPickerProps = {
44
+ /**
45
+ * The element or component this component should render as.
46
+ * @defaultValue 'div'
47
+ */
48
+ as?: any
49
+ /**
50
+ * Throttle time in ms for the color picker
51
+ */
52
+ throttle?: number
53
+ /**
54
+ * Disable the color picker
55
+ */
56
+ disabled?: boolean
57
+ /**
58
+ * The default value of the color picker
59
+ */
60
+ defaultValue?: string
61
+ /**
62
+ * Format of the color
63
+ * @defaultValue 'hex'
64
+ */
65
+ format?: 'hex' | 'rgb' | 'hsl' | 'cmyk' | 'lab'
66
+ size?: ColorPickerVariants['size']
67
+ class?: any
68
+ ui?: Partial<typeof colorPicker.slots>
69
+ }
70
+ </script>
71
+
72
+ <script setup lang="ts">
73
+ import { ref, nextTick, computed, toValue } from 'vue'
74
+ import { Primitive } from 'reka-ui'
75
+ import { useEventListener, useElementBounding, watchThrottled, watchPausable } from '@vueuse/core'
76
+ import { isClient } from '@vueuse/shared'
77
+ import { ColorTranslator } from 'colortranslator'
78
+
79
+ const props = withDefaults(defineProps<ColorPickerProps>(), {
80
+ format: 'hex',
81
+ throttle: 50,
82
+ defaultValue: '#FFFFFF'
83
+ })
84
+ const modelValue = defineModel<string>(undefined)
85
+
86
+ const pickedColor = computed<HSVColor>({
87
+ get() {
88
+ try {
89
+ const color = new ColorTranslator(modelValue.value || props.defaultValue)
90
+
91
+ return HSLtoHSV(color.HSLObject)
92
+ } catch (_) {
93
+ return { h: 0, s: 0, v: 100 }
94
+ }
95
+ },
96
+ set(value) {
97
+ const color = new ColorTranslator(HSVtoHSL(value), {
98
+ decimals: 2,
99
+ labUnit: 'percent',
100
+ cmykUnit: 'percent',
101
+ cmykFunction: 'cmyk'
102
+ })
103
+
104
+ switch (props.format) {
105
+ case 'rgb':
106
+ modelValue.value = color.RGB
107
+ break
108
+ case 'hsl':
109
+ modelValue.value = color.HSL
110
+ break
111
+ case 'cmyk':
112
+ modelValue.value = color.CMYK
113
+ break
114
+ case 'lab':
115
+ modelValue.value = color.CIELab
116
+ break
117
+ case 'hex':
118
+ default:
119
+ modelValue.value = color.HEX
120
+ }
121
+ }
122
+ })
123
+
124
+ function useColorDraggable(targetElement: MaybeRefOrGetter<HTMLElement | null>,
125
+ containerElement: MaybeRefOrGetter<HTMLElement | null>,
126
+ axis: 'x' | 'y' | 'both' = 'both',
127
+ initialPosition = { x: 0, y: 0 },
128
+ disabled?: MaybeRefOrGetter<boolean | undefined>
129
+ ) {
130
+ const position = ref<{ x: number, y: number }>(initialPosition)
131
+ const pressedDelta = ref<{ x: number, y: number }>()
132
+ const targetRect = useElementBounding(targetElement)
133
+ const containerRect = useElementBounding(containerElement)
134
+
135
+ function start(event: PointerEvent) {
136
+ if (toValue(disabled)) return event.preventDefault()
137
+
138
+ const container = toValue(containerElement)
139
+
140
+ pressedDelta.value = {
141
+ x: event.clientX - (container ? event.clientX - containerRect.left.value + container.scrollLeft : targetRect.left.value),
142
+ y: event.clientY - (container ? event.clientY - containerRect.top.value + container.scrollTop : targetRect.top.value)
143
+ }
144
+
145
+ move(event)
146
+ }
147
+
148
+ function move(event: PointerEvent) {
149
+ if (!pressedDelta.value) return
150
+
151
+ const container = toValue(containerElement)
152
+ let { x, y } = position.value
153
+
154
+ if (container && (axis === 'x' || axis === 'both')) {
155
+ x = Math.min(Math.max(0, (event.clientX - pressedDelta.value.x) / container.scrollWidth * 100), 100)
156
+ }
157
+
158
+ if (container && (axis === 'y' || axis === 'both')) {
159
+ y = Math.min(Math.max(0, (event.clientY - pressedDelta.value.y) / container.scrollHeight * 100), 100)
160
+ }
161
+
162
+ position.value = { x, y }
163
+ }
164
+
165
+ function end() {
166
+ if (!pressedDelta.value) {
167
+ return
168
+ }
169
+
170
+ pressedDelta.value = undefined
171
+ }
172
+
173
+ if (isClient) {
174
+ useEventListener(containerElement, 'pointerdown', start)
175
+ useEventListener(window, 'pointermove', move)
176
+ useEventListener(window, 'pointerup', end)
177
+ }
178
+
179
+ return {
180
+ position
181
+ }
182
+ }
183
+
184
+ function normalizeHue(hue: number, dir: 'left' | 'right' = 'left'): number {
185
+ if (dir === 'right') {
186
+ return (hue * 100) / 360
187
+ }
188
+
189
+ return (hue / 100) * 360
190
+ }
191
+
192
+ function normalizeBrightness(brightness: number): number {
193
+ return 100 - brightness
194
+ }
195
+
196
+ const selectorRef = ref<HTMLDivElement | null>(null)
197
+ const selectorThumbRef = ref<HTMLDivElement | null>(null)
198
+ const trackRef = ref<HTMLDivElement | null>(null)
199
+ const trackThumbRef = ref<HTMLDivElement | null>(null)
200
+
201
+ const disabled = computed(() => props.disabled)
202
+
203
+ const { position: selectorThumbPosition } = useColorDraggable(selectorThumbRef, selectorRef, 'both', {
204
+ x: pickedColor.value.s,
205
+ y: normalizeBrightness(pickedColor.value.v)
206
+ }, disabled)
207
+
208
+ const { position: trackThumbPosition } = useColorDraggable(trackThumbRef, trackRef, 'y', {
209
+ x: 0,
210
+ y: normalizeHue(pickedColor.value.h, 'right')
211
+ }, disabled)
212
+
213
+ const { pause: pauseWatchColor, resume: resumeWatchColor } = watchPausable(pickedColor, (hsb) => {
214
+ selectorThumbPosition.value = {
215
+ x: hsb.s,
216
+ y: normalizeBrightness(hsb.v)
217
+ }
218
+ trackThumbPosition.value = {
219
+ x: 0,
220
+ y: normalizeHue(hsb.h, 'right')
221
+ }
222
+ })
223
+
224
+ watchThrottled([selectorThumbPosition, trackThumbPosition], () => {
225
+ pauseWatchColor()
226
+
227
+ pickedColor.value = {
228
+ h: normalizeHue(trackThumbPosition.value.y),
229
+ s: selectorThumbPosition.value.x,
230
+ v: normalizeBrightness(selectorThumbPosition.value.y)
231
+ }
232
+
233
+ nextTick(resumeWatchColor)
234
+ }, { throttle: () => props.throttle })
235
+
236
+ const trackThumbColor = computed(() => new ColorTranslator(HSVtoHSL({
237
+ h: normalizeHue(trackThumbPosition.value.y),
238
+ s: 100,
239
+ v: 100
240
+ })).HEX)
241
+
242
+ const selectorStyle = computed(() => ({
243
+ backgroundColor: trackThumbColor.value
244
+ }))
245
+
246
+ const selectorThumbStyle = computed(() => ({
247
+ backgroundColor: new ColorTranslator(modelValue.value || props.defaultValue).HEX,
248
+ left: `${selectorThumbPosition.value.x}%`,
249
+ top: `${selectorThumbPosition.value.y}%`
250
+ }))
251
+
252
+ const trackThumbStyle = computed(() => ({
253
+ backgroundColor: trackThumbColor.value,
254
+ top: `${trackThumbPosition.value.y}%`
255
+ }))
256
+
257
+ const ui = computed(() => colorPicker({
258
+ size: props.size
259
+ }))
260
+ </script>
261
+
262
+ <template>
263
+ <Primitive :as="as" :class="ui.root({ class: [props.class, props.ui?.root] })" :data-disabled="disabled ? true : undefined">
264
+ <div :class="ui.picker({ class: props.ui?.picker })">
265
+ <div
266
+ ref="selectorRef"
267
+ :class="ui.selector({ class: props.ui?.selector })"
268
+ :style="selectorStyle"
269
+ >
270
+ <div :class="ui.selectorBackground({ class: props.ui?.selectorBackground })" data-color-picker-background>
271
+ <div
272
+ ref="selectorThumbRef"
273
+ :class="ui.selectorThumb({ class: props.ui?.selectorThumb })"
274
+ :style="selectorThumbStyle"
275
+ :data-disabled="disabled ? true : undefined"
276
+ />
277
+ </div>
278
+ </div>
279
+ <div
280
+ ref="trackRef"
281
+ :class="ui.track({ class: props.ui?.track })"
282
+ data-color-picker-track
283
+ >
284
+ <div
285
+ ref="trackThumbRef"
286
+ :class="ui.trackThumb({ class: props.ui?.trackThumb })"
287
+ :style="trackThumbStyle"
288
+ :data-disabled="disabled ? true : undefined"
289
+ />
290
+ </div>
291
+ </div>
292
+ </Primitive>
293
+ </template>
294
+
295
+ <style scoped>
296
+ [data-color-picker-background]{background-image:linear-gradient(0deg,#000 0,transparent),linear-gradient(90deg,#fff 0,hsla(0,0%,100%,0))}[data-color-picker-track]{background-image:linear-gradient(0deg,red,#f0f 17%,#00f 33%,#0ff 50%,#0f0 67%,#ff0 83%,red)}
297
+ </style>