@nuxt/ui 2.18.4 → 3.0.0-alpha.1

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 (394) hide show
  1. package/README.md +19 -2
  2. package/cli/commands/init.mjs +83 -0
  3. package/cli/index.mjs +15 -0
  4. package/cli/node_modules/.ignored/citty/LICENSE +36 -0
  5. package/cli/node_modules/.ignored/citty/README.md +134 -0
  6. package/cli/node_modules/.ignored/citty/dist/index.cjs +475 -0
  7. package/cli/node_modules/.ignored/citty/dist/index.d.cts +80 -0
  8. package/cli/node_modules/.ignored/citty/dist/index.d.mts +80 -0
  9. package/cli/node_modules/.ignored/citty/dist/index.d.ts +80 -0
  10. package/cli/node_modules/.ignored/citty/dist/index.mjs +463 -0
  11. package/cli/node_modules/.ignored/citty/package.json +49 -0
  12. package/cli/node_modules/.ignored/consola/LICENSE +47 -0
  13. package/cli/node_modules/.ignored/consola/README.md +318 -0
  14. package/cli/node_modules/.ignored/consola/core.d.ts +1 -0
  15. package/cli/node_modules/.ignored/consola/dist/basic.cjs +32 -0
  16. package/cli/node_modules/.ignored/consola/dist/basic.d.ts +9 -0
  17. package/cli/node_modules/.ignored/consola/dist/basic.mjs +24 -0
  18. package/cli/node_modules/.ignored/consola/dist/browser.cjs +80 -0
  19. package/cli/node_modules/.ignored/consola/dist/browser.d.ts +7 -0
  20. package/cli/node_modules/.ignored/consola/dist/browser.mjs +72 -0
  21. package/cli/node_modules/.ignored/consola/dist/chunks/prompt.cjs +436 -0
  22. package/cli/node_modules/.ignored/consola/dist/chunks/prompt.mjs +429 -0
  23. package/cli/node_modules/.ignored/consola/dist/core.cjs +415 -0
  24. package/cli/node_modules/.ignored/consola/dist/core.d.ts +124 -0
  25. package/cli/node_modules/.ignored/consola/dist/core.mjs +410 -0
  26. package/cli/node_modules/.ignored/consola/dist/index.cjs +21 -0
  27. package/cli/node_modules/.ignored/consola/dist/index.d.ts +9 -0
  28. package/cli/node_modules/.ignored/consola/dist/index.mjs +8 -0
  29. package/cli/node_modules/.ignored/consola/dist/shared/consola.06ad8a64.mjs +62 -0
  30. package/cli/node_modules/.ignored/consola/dist/shared/consola.36c0034f.mjs +636 -0
  31. package/cli/node_modules/.ignored/consola/dist/shared/consola.4bbae468.cjs +645 -0
  32. package/cli/node_modules/.ignored/consola/dist/shared/consola.deac7d5a.cjs +65 -0
  33. package/cli/node_modules/.ignored/consola/dist/utils.cjs +308 -0
  34. package/cli/node_modules/.ignored/consola/dist/utils.d.ts +169 -0
  35. package/cli/node_modules/.ignored/consola/dist/utils.mjs +284 -0
  36. package/cli/node_modules/.ignored/consola/lib/index.cjs +9 -0
  37. package/cli/node_modules/.ignored/consola/package.json +101 -0
  38. package/cli/node_modules/.ignored/consola/utils.d.ts +1 -0
  39. package/cli/node_modules/.ignored/pathe/LICENSE +44 -0
  40. package/cli/node_modules/.ignored/pathe/README.md +69 -0
  41. package/cli/node_modules/.ignored/pathe/dist/index.cjs +23 -0
  42. package/cli/node_modules/.ignored/pathe/dist/index.d.cts +36 -0
  43. package/cli/node_modules/.ignored/pathe/dist/index.d.mts +36 -0
  44. package/cli/node_modules/.ignored/pathe/dist/index.d.ts +36 -0
  45. package/cli/node_modules/.ignored/pathe/dist/index.mjs +1 -0
  46. package/cli/node_modules/.ignored/pathe/dist/shared/pathe.1f0a373c.cjs +238 -0
  47. package/cli/node_modules/.ignored/pathe/dist/shared/pathe.ff20891b.mjs +221 -0
  48. package/cli/node_modules/.ignored/pathe/dist/utils.cjs +58 -0
  49. package/cli/node_modules/.ignored/pathe/dist/utils.d.cts +5 -0
  50. package/cli/node_modules/.ignored/pathe/dist/utils.d.mts +5 -0
  51. package/cli/node_modules/.ignored/pathe/dist/utils.d.ts +5 -0
  52. package/cli/node_modules/.ignored/pathe/dist/utils.mjs +54 -0
  53. package/cli/node_modules/.ignored/pathe/package.json +48 -0
  54. package/cli/node_modules/.ignored/pathe/utils.d.ts +1 -0
  55. package/cli/node_modules/.ignored/scule/LICENSE +21 -0
  56. package/cli/node_modules/.ignored/scule/README.md +149 -0
  57. package/cli/node_modules/.ignored/scule/dist/index.cjs +92 -0
  58. package/cli/node_modules/.ignored/scule/dist/index.d.cts +57 -0
  59. package/cli/node_modules/.ignored/scule/dist/index.d.mts +57 -0
  60. package/cli/node_modules/.ignored/scule/dist/index.d.ts +57 -0
  61. package/cli/node_modules/.ignored/scule/dist/index.mjs +80 -0
  62. package/cli/node_modules/.ignored/scule/package.json +43 -0
  63. package/cli/node_modules/.package-lock.json +33 -0
  64. package/cli/package.json +13 -0
  65. package/cli/templates.mjs +171 -0
  66. package/cli/utils.mjs +17 -0
  67. package/dist/module.d.mts +10 -26
  68. package/dist/module.d.ts +10 -26
  69. package/dist/module.json +4 -4
  70. package/dist/module.mjs +2574 -154
  71. package/dist/runtime/components/Accordion.vue +110 -0
  72. package/dist/runtime/components/Alert.vue +130 -0
  73. package/dist/runtime/components/App.vue +42 -0
  74. package/dist/runtime/components/Avatar.vue +69 -0
  75. package/dist/runtime/components/AvatarGroup.vue +98 -0
  76. package/dist/runtime/components/Badge.vue +46 -0
  77. package/dist/runtime/components/Breadcrumb.vue +98 -0
  78. package/dist/runtime/components/Button.vue +82 -0
  79. package/dist/runtime/components/ButtonGroup.vue +53 -0
  80. package/dist/runtime/components/Card.vue +52 -0
  81. package/dist/runtime/components/Checkbox.vue +128 -0
  82. package/dist/runtime/components/Chip.vue +76 -0
  83. package/dist/runtime/components/Collapsible.vue +54 -0
  84. package/dist/runtime/components/CommandPalette.vue +303 -0
  85. package/dist/runtime/components/Container.vue +36 -0
  86. package/dist/runtime/components/ContextMenu.vue +103 -0
  87. package/dist/runtime/components/ContextMenuContent.vue +122 -0
  88. package/dist/runtime/components/Drawer.vue +115 -0
  89. package/dist/runtime/components/DropdownMenu.vue +115 -0
  90. package/dist/runtime/components/DropdownMenuContent.vue +129 -0
  91. package/dist/runtime/components/Form.vue +227 -0
  92. package/dist/runtime/components/FormField.vue +107 -0
  93. package/dist/runtime/components/Icon.vue +26 -0
  94. package/dist/runtime/components/Input.vue +180 -0
  95. package/dist/runtime/components/InputMenu.vue +371 -0
  96. package/dist/runtime/components/Kbd.vue +49 -0
  97. package/dist/runtime/components/Link.vue +147 -0
  98. package/dist/runtime/components/LinkBase.vue +60 -0
  99. package/dist/runtime/components/Modal.vue +163 -0
  100. package/dist/runtime/components/ModalProvider.vue +12 -0
  101. package/dist/runtime/components/NavigationMenu.vue +195 -0
  102. package/dist/runtime/components/Pagination.vue +173 -0
  103. package/dist/runtime/components/Popover.vue +88 -0
  104. package/dist/runtime/components/Progress.vue +164 -0
  105. package/dist/runtime/components/RadioGroup.vue +159 -0
  106. package/dist/runtime/components/Select.vue +230 -0
  107. package/dist/runtime/components/SelectMenu.vue +306 -0
  108. package/dist/runtime/components/Separator.vue +82 -0
  109. package/dist/runtime/components/Skeleton.vue +31 -0
  110. package/dist/runtime/components/Slideover.vue +162 -0
  111. package/dist/runtime/components/SlideoverProvider.vue +12 -0
  112. package/dist/runtime/components/Slider.vue +113 -0
  113. package/dist/runtime/components/Switch.vue +124 -0
  114. package/dist/runtime/components/Tabs.vue +114 -0
  115. package/dist/runtime/components/Textarea.vue +189 -0
  116. package/dist/runtime/components/Toast.vue +161 -0
  117. package/dist/runtime/components/Toaster.vue +130 -0
  118. package/dist/runtime/components/Tooltip.vue +88 -0
  119. package/dist/runtime/composables/defineShortcuts.d.ts +7 -5
  120. package/dist/runtime/composables/defineShortcuts.js +94 -65
  121. package/dist/runtime/composables/useAvatarGroup.d.ts +10 -0
  122. package/dist/runtime/composables/useAvatarGroup.js +10 -0
  123. package/dist/runtime/composables/useButtonGroup.d.ts +12 -17
  124. package/dist/runtime/composables/useButtonGroup.js +6 -56
  125. package/dist/runtime/composables/useComponentIcons.d.ts +26 -0
  126. package/dist/runtime/composables/useComponentIcons.js +26 -0
  127. package/dist/runtime/composables/useFormField.d.ts +34 -0
  128. package/dist/runtime/composables/useFormField.js +54 -0
  129. package/dist/runtime/composables/useKbd.d.ts +28 -0
  130. package/dist/runtime/composables/useKbd.js +46 -0
  131. package/dist/runtime/composables/useModal.d.ts +8 -4
  132. package/dist/runtime/composables/useModal.js +1 -0
  133. package/dist/runtime/composables/useSlideover.d.ts +9 -5
  134. package/dist/runtime/composables/useSlideover.js +3 -2
  135. package/dist/runtime/composables/useToast.d.ts +9 -17
  136. package/dist/runtime/composables/useToast.js +27 -13
  137. package/dist/runtime/index.css +1 -0
  138. package/dist/runtime/plugins/colors.js +9 -17
  139. package/dist/runtime/plugins/{slideovers.js → slideover.js} +3 -3
  140. package/dist/runtime/types/app.config.d.ts +6 -0
  141. package/dist/runtime/types/component.d.ts +17 -14
  142. package/dist/runtime/types/component.js +0 -0
  143. package/dist/runtime/types/form.d.ts +62 -32
  144. package/dist/runtime/types/form.js +12 -0
  145. package/dist/runtime/types/index.d.ts +41 -30
  146. package/dist/runtime/types/index.js +42 -31
  147. package/dist/runtime/types/utils.d.ts +13 -32
  148. package/dist/runtime/types/utils.js +0 -0
  149. package/dist/runtime/utils/form.d.ts +15 -0
  150. package/dist/runtime/utils/form.js +66 -0
  151. package/dist/runtime/utils/fuse.d.ts +4 -0
  152. package/dist/runtime/utils/fuse.js +63 -0
  153. package/dist/runtime/utils/index.d.ts +4 -10
  154. package/dist/runtime/utils/index.js +40 -60
  155. package/dist/runtime/utils/link.d.ts +26 -71
  156. package/dist/runtime/utils/link.js +4 -124
  157. package/package.json +50 -49
  158. package/dist/runtime/components/data/Table.vue +0 -355
  159. package/dist/runtime/components/data/Table.vue.d.ts +0 -439
  160. package/dist/runtime/components/elements/Accordion.vue +0 -185
  161. package/dist/runtime/components/elements/Accordion.vue.d.ts +0 -223
  162. package/dist/runtime/components/elements/Alert.vue +0 -139
  163. package/dist/runtime/components/elements/Alert.vue.d.ts +0 -194
  164. package/dist/runtime/components/elements/Avatar.vue +0 -160
  165. package/dist/runtime/components/elements/Avatar.vue.d.ts +0 -255
  166. package/dist/runtime/components/elements/AvatarGroup.d.ts +0 -56
  167. package/dist/runtime/components/elements/AvatarGroup.js +0 -58
  168. package/dist/runtime/components/elements/Badge.vue +0 -75
  169. package/dist/runtime/components/elements/Badge.vue.d.ts +0 -109
  170. package/dist/runtime/components/elements/Button.vue +0 -193
  171. package/dist/runtime/components/elements/Button.vue.d.ts +0 -504
  172. package/dist/runtime/components/elements/ButtonGroup.d.ts +0 -153
  173. package/dist/runtime/components/elements/ButtonGroup.js +0 -51
  174. package/dist/runtime/components/elements/Carousel.vue +0 -165
  175. package/dist/runtime/components/elements/Carousel.vue.d.ts +0 -159
  176. package/dist/runtime/components/elements/Chip.vue +0 -85
  177. package/dist/runtime/components/elements/Chip.vue.d.ts +0 -162
  178. package/dist/runtime/components/elements/Dropdown.vue +0 -254
  179. package/dist/runtime/components/elements/Dropdown.vue.d.ts +0 -254
  180. package/dist/runtime/components/elements/Icon.vue +0 -30
  181. package/dist/runtime/components/elements/Icon.vue.d.ts +0 -47
  182. package/dist/runtime/components/elements/Kbd.vue +0 -59
  183. package/dist/runtime/components/elements/Kbd.vue.d.ts +0 -86
  184. package/dist/runtime/components/elements/Link.vue +0 -95
  185. package/dist/runtime/components/elements/Link.vue.d.ts +0 -225
  186. package/dist/runtime/components/elements/Meter.vue +0 -170
  187. package/dist/runtime/components/elements/Meter.vue.d.ts +0 -279
  188. package/dist/runtime/components/elements/MeterGroup.d.ts +0 -135
  189. package/dist/runtime/components/elements/MeterGroup.js +0 -159
  190. package/dist/runtime/components/elements/Progress.vue +0 -203
  191. package/dist/runtime/components/elements/Progress.vue.d.ts +0 -280
  192. package/dist/runtime/components/forms/Checkbox.vue +0 -143
  193. package/dist/runtime/components/forms/Checkbox.vue.d.ts +0 -179
  194. package/dist/runtime/components/forms/Form.vue +0 -219
  195. package/dist/runtime/components/forms/Form.vue.d.ts +0 -53
  196. package/dist/runtime/components/forms/FormGroup.vue +0 -128
  197. package/dist/runtime/components/forms/FormGroup.vue.d.ts +0 -169
  198. package/dist/runtime/components/forms/Input.vue +0 -300
  199. package/dist/runtime/components/forms/Input.vue.d.ts +0 -482
  200. package/dist/runtime/components/forms/InputMenu.vue +0 -439
  201. package/dist/runtime/components/forms/InputMenu.vue.d.ts +0 -700
  202. package/dist/runtime/components/forms/Radio.vue +0 -140
  203. package/dist/runtime/components/forms/Radio.vue.d.ts +0 -168
  204. package/dist/runtime/components/forms/RadioGroup.vue +0 -145
  205. package/dist/runtime/components/forms/RadioGroup.vue.d.ts +0 -176
  206. package/dist/runtime/components/forms/Range.vue +0 -173
  207. package/dist/runtime/components/forms/Range.vue.d.ts +0 -268
  208. package/dist/runtime/components/forms/Select.vue +0 -322
  209. package/dist/runtime/components/forms/Select.vue.d.ts +0 -471
  210. package/dist/runtime/components/forms/SelectMenu.vue +0 -546
  211. package/dist/runtime/components/forms/SelectMenu.vue.d.ts +0 -754
  212. package/dist/runtime/components/forms/Textarea.vue +0 -231
  213. package/dist/runtime/components/forms/Textarea.vue.d.ts +0 -436
  214. package/dist/runtime/components/forms/Toggle.vue +0 -171
  215. package/dist/runtime/components/forms/Toggle.vue.d.ts +0 -262
  216. package/dist/runtime/components/layout/Card.vue +0 -63
  217. package/dist/runtime/components/layout/Card.vue.d.ts +0 -89
  218. package/dist/runtime/components/layout/Container.vue +0 -48
  219. package/dist/runtime/components/layout/Container.vue.d.ts +0 -53
  220. package/dist/runtime/components/layout/Divider.vue +0 -108
  221. package/dist/runtime/components/layout/Divider.vue.d.ts +0 -198
  222. package/dist/runtime/components/layout/Skeleton.vue +0 -46
  223. package/dist/runtime/components/layout/Skeleton.vue.d.ts +0 -53
  224. package/dist/runtime/components/navigation/Breadcrumb.vue +0 -82
  225. package/dist/runtime/components/navigation/Breadcrumb.vue.d.ts +0 -95
  226. package/dist/runtime/components/navigation/CommandPalette.vue +0 -345
  227. package/dist/runtime/components/navigation/CommandPalette.vue.d.ts +0 -390
  228. package/dist/runtime/components/navigation/CommandPaletteGroup.vue +0 -152
  229. package/dist/runtime/components/navigation/CommandPaletteGroup.vue.d.ts +0 -60
  230. package/dist/runtime/components/navigation/HorizontalNavigation.vue +0 -102
  231. package/dist/runtime/components/navigation/HorizontalNavigation.vue.d.ts +0 -99
  232. package/dist/runtime/components/navigation/Pagination.vue +0 -270
  233. package/dist/runtime/components/navigation/Pagination.vue.d.ts +0 -260
  234. package/dist/runtime/components/navigation/Tabs.vue +0 -163
  235. package/dist/runtime/components/navigation/Tabs.vue.d.ts +0 -165
  236. package/dist/runtime/components/navigation/VerticalNavigation.vue +0 -105
  237. package/dist/runtime/components/navigation/VerticalNavigation.vue.d.ts +0 -113
  238. package/dist/runtime/components/overlays/ContextMenu.vue +0 -85
  239. package/dist/runtime/components/overlays/ContextMenu.vue.d.ts +0 -126
  240. package/dist/runtime/components/overlays/Modal.vue +0 -122
  241. package/dist/runtime/components/overlays/Modal.vue.d.ts +0 -166
  242. package/dist/runtime/components/overlays/Modals.client.vue +0 -18
  243. package/dist/runtime/components/overlays/Notification.vue +0 -212
  244. package/dist/runtime/components/overlays/Notification.vue.d.ts +0 -235
  245. package/dist/runtime/components/overlays/Notifications.vue +0 -69
  246. package/dist/runtime/components/overlays/Notifications.vue.d.ts +0 -66
  247. package/dist/runtime/components/overlays/Popover.vue +0 -213
  248. package/dist/runtime/components/overlays/Popover.vue.d.ts +0 -220
  249. package/dist/runtime/components/overlays/Slideover.vue +0 -152
  250. package/dist/runtime/components/overlays/Slideover.vue.d.ts +0 -167
  251. package/dist/runtime/components/overlays/Slideovers.client.vue +0 -18
  252. package/dist/runtime/components/overlays/Tooltip.vue +0 -127
  253. package/dist/runtime/components/overlays/Tooltip.vue.d.ts +0 -165
  254. package/dist/runtime/composables/useCarouselScroll.d.ts +0 -2
  255. package/dist/runtime/composables/useCarouselScroll.js +0 -37
  256. package/dist/runtime/composables/useCopyToClipboard.d.ts +0 -10
  257. package/dist/runtime/composables/useCopyToClipboard.js +0 -26
  258. package/dist/runtime/composables/useFormGroup.d.ts +0 -18
  259. package/dist/runtime/composables/useFormGroup.js +0 -45
  260. package/dist/runtime/composables/usePopper.d.ts +0 -268
  261. package/dist/runtime/composables/usePopper.js +0 -94
  262. package/dist/runtime/composables/useShortcuts.d.ts +0 -12
  263. package/dist/runtime/composables/useShortcuts.js +0 -26
  264. package/dist/runtime/composables/useTimer.d.ts +0 -8
  265. package/dist/runtime/composables/useTimer.js +0 -51
  266. package/dist/runtime/composables/useUI.d.ts +0 -10
  267. package/dist/runtime/composables/useUI.js +0 -24
  268. package/dist/runtime/types/accordion.d.ts +0 -9
  269. package/dist/runtime/types/alert.d.ts +0 -12
  270. package/dist/runtime/types/avatar.d.ts +0 -17
  271. package/dist/runtime/types/badge.d.ts +0 -15
  272. package/dist/runtime/types/breadcrumb.d.ts +0 -10
  273. package/dist/runtime/types/button.d.ts +0 -31
  274. package/dist/runtime/types/chip.d.ts +0 -15
  275. package/dist/runtime/types/clipboard.d.ts +0 -3
  276. package/dist/runtime/types/command-palette.d.ts +0 -29
  277. package/dist/runtime/types/divider.d.ts +0 -3
  278. package/dist/runtime/types/dropdown.d.ts +0 -15
  279. package/dist/runtime/types/form-group.d.ts +0 -5
  280. package/dist/runtime/types/horizontal-navigation.d.ts +0 -13
  281. package/dist/runtime/types/input.d.ts +0 -8
  282. package/dist/runtime/types/kbd.d.ts +0 -5
  283. package/dist/runtime/types/link.d.ts +0 -12
  284. package/dist/runtime/types/meter.d.ts +0 -5
  285. package/dist/runtime/types/modal.d.ts +0 -18
  286. package/dist/runtime/types/notification.d.ts +0 -24
  287. package/dist/runtime/types/popper.d.ts +0 -17
  288. package/dist/runtime/types/progress.d.ts +0 -6
  289. package/dist/runtime/types/range.d.ts +0 -7
  290. package/dist/runtime/types/select.d.ts +0 -8
  291. package/dist/runtime/types/slideover.d.ts +0 -16
  292. package/dist/runtime/types/tabs.d.ts +0 -8
  293. package/dist/runtime/types/textarea.d.ts +0 -8
  294. package/dist/runtime/types/toggle.d.ts +0 -7
  295. package/dist/runtime/types/tooltip.d.ts +0 -7
  296. package/dist/runtime/types/vertical-navigation.d.ts +0 -13
  297. package/dist/runtime/ui.config/data/table.d.ts +0 -81
  298. package/dist/runtime/ui.config/data/table.js +0 -80
  299. package/dist/runtime/ui.config/elements/accordion.d.ts +0 -23
  300. package/dist/runtime/ui.config/elements/accordion.js +0 -22
  301. package/dist/runtime/ui.config/elements/alert.d.ts +0 -41
  302. package/dist/runtime/ui.config/elements/alert.js +0 -40
  303. package/dist/runtime/ui.config/elements/avatar.d.ts +0 -60
  304. package/dist/runtime/ui.config/elements/avatar.js +0 -59
  305. package/dist/runtime/ui.config/elements/avatarGroup.d.ts +0 -6
  306. package/dist/runtime/ui.config/elements/avatarGroup.js +0 -5
  307. package/dist/runtime/ui.config/elements/badge.d.ts +0 -34
  308. package/dist/runtime/ui.config/elements/badge.js +0 -33
  309. package/dist/runtime/ui.config/elements/button.d.ts +0 -81
  310. package/dist/runtime/ui.config/elements/button.js +0 -80
  311. package/dist/runtime/ui.config/elements/buttonGroup.d.ts +0 -101
  312. package/dist/runtime/ui.config/elements/buttonGroup.js +0 -19
  313. package/dist/runtime/ui.config/elements/carousel.d.ts +0 -27
  314. package/dist/runtime/ui.config/elements/carousel.js +0 -26
  315. package/dist/runtime/ui.config/elements/chip.d.ts +0 -35
  316. package/dist/runtime/ui.config/elements/chip.js +0 -34
  317. package/dist/runtime/ui.config/elements/dropdown.d.ts +0 -59
  318. package/dist/runtime/ui.config/elements/dropdown.js +0 -57
  319. package/dist/runtime/ui.config/elements/kbd.d.ts +0 -17
  320. package/dist/runtime/ui.config/elements/kbd.js +0 -16
  321. package/dist/runtime/ui.config/elements/meter.d.ts +0 -77
  322. package/dist/runtime/ui.config/elements/meter.js +0 -76
  323. package/dist/runtime/ui.config/elements/meterGroup.d.ts +0 -52
  324. package/dist/runtime/ui.config/elements/meterGroup.js +0 -24
  325. package/dist/runtime/ui.config/elements/progress.d.ts +0 -75
  326. package/dist/runtime/ui.config/elements/progress.js +0 -74
  327. package/dist/runtime/ui.config/forms/checkbox.d.ts +0 -19
  328. package/dist/runtime/ui.config/forms/checkbox.js +0 -18
  329. package/dist/runtime/ui.config/forms/formGroup.d.ts +0 -26
  330. package/dist/runtime/ui.config/forms/formGroup.js +0 -26
  331. package/dist/runtime/ui.config/forms/input.d.ts +0 -110
  332. package/dist/runtime/ui.config/forms/input.js +0 -109
  333. package/dist/runtime/ui.config/forms/inputMenu.d.ts +0 -64
  334. package/dist/runtime/ui.config/forms/inputMenu.js +0 -62
  335. package/dist/runtime/ui.config/forms/radio.d.ts +0 -18
  336. package/dist/runtime/ui.config/forms/radio.js +0 -17
  337. package/dist/runtime/ui.config/forms/radioGroup.d.ts +0 -9
  338. package/dist/runtime/ui.config/forms/radioGroup.js +0 -8
  339. package/dist/runtime/ui.config/forms/range.d.ts +0 -64
  340. package/dist/runtime/ui.config/forms/range.js +0 -63
  341. package/dist/runtime/ui.config/forms/select.d.ts +0 -111
  342. package/dist/runtime/ui.config/forms/select.js +0 -13
  343. package/dist/runtime/ui.config/forms/selectMenu.d.ts +0 -70
  344. package/dist/runtime/ui.config/forms/selectMenu.js +0 -32
  345. package/dist/runtime/ui.config/forms/textarea.d.ts +0 -109
  346. package/dist/runtime/ui.config/forms/textarea.js +0 -10
  347. package/dist/runtime/ui.config/forms/toggle.d.ts +0 -63
  348. package/dist/runtime/ui.config/forms/toggle.js +0 -62
  349. package/dist/runtime/ui.config/index.d.ts +0 -43
  350. package/dist/runtime/ui.config/index.js +0 -43
  351. package/dist/runtime/ui.config/layout/card.d.ts +0 -24
  352. package/dist/runtime/ui.config/layout/card.js +0 -23
  353. package/dist/runtime/ui.config/layout/container.d.ts +0 -6
  354. package/dist/runtime/ui.config/layout/container.js +0 -5
  355. package/dist/runtime/ui.config/layout/divider.d.ts +0 -52
  356. package/dist/runtime/ui.config/layout/divider.js +0 -51
  357. package/dist/runtime/ui.config/layout/skeleton.d.ts +0 -6
  358. package/dist/runtime/ui.config/layout/skeleton.js +0 -5
  359. package/dist/runtime/ui.config/navigation/breadcrumb.d.ts +0 -21
  360. package/dist/runtime/ui.config/navigation/breadcrumb.js +0 -20
  361. package/dist/runtime/ui.config/navigation/commandPalette.d.ts +0 -72
  362. package/dist/runtime/ui.config/navigation/commandPalette.js +0 -71
  363. package/dist/runtime/ui.config/navigation/horizontalNavigation.d.ts +0 -27
  364. package/dist/runtime/ui.config/navigation/horizontalNavigation.js +0 -26
  365. package/dist/runtime/ui.config/navigation/pagination.d.ts +0 -35
  366. package/dist/runtime/ui.config/navigation/pagination.js +0 -34
  367. package/dist/runtime/ui.config/navigation/tabs.d.ts +0 -35
  368. package/dist/runtime/ui.config/navigation/tabs.js +0 -34
  369. package/dist/runtime/ui.config/navigation/verticalNavigation.d.ts +0 -34
  370. package/dist/runtime/ui.config/navigation/verticalNavigation.js +0 -33
  371. package/dist/runtime/ui.config/overlays/contextMenu.d.ts +0 -31
  372. package/dist/runtime/ui.config/overlays/contextMenu.js +0 -25
  373. package/dist/runtime/ui.config/overlays/modal.d.ts +0 -36
  374. package/dist/runtime/ui.config/overlays/modal.js +0 -37
  375. package/dist/runtime/ui.config/overlays/notification.d.ts +0 -50
  376. package/dist/runtime/ui.config/overlays/notification.js +0 -50
  377. package/dist/runtime/ui.config/overlays/notifications.d.ts +0 -7
  378. package/dist/runtime/ui.config/overlays/notifications.js +0 -6
  379. package/dist/runtime/ui.config/overlays/popover.d.ts +0 -47
  380. package/dist/runtime/ui.config/overlays/popover.js +0 -41
  381. package/dist/runtime/ui.config/overlays/slideover.d.ts +0 -35
  382. package/dist/runtime/ui.config/overlays/slideover.js +0 -36
  383. package/dist/runtime/ui.config/overlays/tooltip.d.ts +0 -37
  384. package/dist/runtime/ui.config/overlays/tooltip.js +0 -34
  385. package/dist/runtime/ui.config/popper.d.ts +0 -8
  386. package/dist/runtime/ui.config/popper.js +0 -9
  387. package/dist/runtime/ui.css +0 -1
  388. package/dist/runtime/utils/colors.d.ts +0 -11
  389. package/dist/runtime/utils/colors.js +0 -307
  390. package/dist/runtime/utils/lodash.d.ts +0 -2
  391. package/dist/runtime/utils/lodash.js +0 -23
  392. package/dist/runtime/plugins/{modals.d.ts → modal.d.ts} +0 -0
  393. package/dist/runtime/plugins/{modals.js → modal.js} +1 -1
  394. /package/dist/runtime/plugins/{slideovers.d.ts → slideover.d.ts} +0 -0
@@ -0,0 +1,371 @@
1
+ <script lang="ts">
2
+ import type { InputHTMLAttributes } from 'vue'
3
+ import { tv, type VariantProps } from 'tailwind-variants'
4
+ import type { ComboboxRootProps, ComboboxRootEmits, ComboboxContentProps, ComboboxItemProps, ComboboxArrowProps } from 'radix-vue'
5
+ import type { AppConfig } from '@nuxt/schema'
6
+ import _appConfig from '#build/app.config'
7
+ import theme from '#build/ui/input-menu'
8
+ import type { UseComponentIconsProps } from '../composables/useComponentIcons'
9
+ import type { AvatarProps, ChipProps, InputProps } from '../types'
10
+ import type { AcceptableValue, ArrayOrWrapped, PartialString } from '../types/utils'
11
+
12
+ const appConfig = _appConfig as AppConfig & { ui: { inputMenu: Partial<typeof theme> } }
13
+
14
+ const inputMenu = tv({ extend: tv(theme), ...(appConfig.ui?.inputMenu || {}) })
15
+
16
+ export interface InputMenuItem extends Pick<ComboboxItemProps, 'disabled'> {
17
+ label?: string
18
+ icon?: string
19
+ avatar?: AvatarProps
20
+ chip?: ChipProps
21
+ /**
22
+ * The item type.
23
+ * @defaultValue 'item'
24
+ */
25
+ type?: 'label' | 'separator' | 'item'
26
+ }
27
+
28
+ type InputMenuVariants = VariantProps<typeof inputMenu>
29
+
30
+ export interface InputMenuProps<T> extends Pick<ComboboxRootProps<T>, 'modelValue' | 'defaultValue' | 'selectedValue' | 'open' | 'defaultOpen' | 'searchTerm' | 'multiple' | 'disabled' | 'name' | 'resetSearchTermOnBlur'>, UseComponentIconsProps {
31
+ /**
32
+ * The element or component this component should render as.
33
+ * @defaultValue 'div'
34
+ */
35
+ as?: any
36
+ id?: string
37
+ type?: InputHTMLAttributes['type']
38
+ /** The placeholder text when the input is empty. */
39
+ placeholder?: string
40
+ color?: InputMenuVariants['color']
41
+ variant?: InputMenuVariants['variant']
42
+ size?: InputMenuVariants['size']
43
+ required?: boolean
44
+ autofocus?: boolean
45
+ autofocusDelay?: number
46
+ /**
47
+ * The icon displayed to open the menu.
48
+ * @defaultValue appConfig.ui.icons.chevronDown
49
+ */
50
+ trailingIcon?: string
51
+ /**
52
+ * The icon displayed when an item is selected.
53
+ * @defaultValue appConfig.ui.icons.check
54
+ */
55
+ selectedIcon?: string
56
+ /**
57
+ * The icon displayed to delete a tag.
58
+ * Works only when `multiple` is `true`.
59
+ * @defaultValue appConfig.ui.icons.close
60
+ */
61
+ deleteIcon?: string
62
+ /**
63
+ * The content of the menu.
64
+ * @defaultValue { side: 'bottom', sideOffset: 8, position: 'popper' }
65
+ */
66
+ content?: Omit<ComboboxContentProps, 'as' | 'asChild' | 'forceMount'>
67
+ /**
68
+ * Display an arrow alongside the menu.
69
+ * @defaultValue false
70
+ */
71
+ arrow?: boolean | Omit<ComboboxArrowProps, 'as' | 'asChild'>
72
+ /**
73
+ * Render the menu in a portal.
74
+ * @defaultValue true
75
+ */
76
+ portal?: boolean
77
+ /**
78
+ * Whether to filter items or not, can be an array of fields to filter.
79
+ * When `false`, items will not be filtered which is useful for custom filtering.
80
+ * @defaultValue ['label']
81
+ */
82
+ filter?: boolean | string[]
83
+ /**
84
+ * When `items` is an array of objects, select the field to use as the value instead of the object itself.
85
+ * @defaultValue undefined
86
+ */
87
+ valueKey?: keyof T
88
+ items?: T[] | T[][]
89
+ /** Highlight the ring color like a focus state. */
90
+ highlight?: boolean
91
+ class?: any
92
+ ui?: PartialString<typeof inputMenu.slots>
93
+ }
94
+
95
+ export type InputMenuEmits<T> = ComboboxRootEmits<T> & {
96
+ change: [payload: Event]
97
+ blur: [payload: FocusEvent]
98
+ focus: [payload: FocusEvent]
99
+ }
100
+
101
+ type SlotProps<T> = (props: { item: T, index: number }) => any
102
+
103
+ export type InputMenuSlots<T> = {
104
+ 'leading'(props: { modelValue: T, open: boolean, ui: any }): any
105
+ 'trailing'(props: { modelValue: T, open: boolean, ui: any }): any
106
+ 'empty'(props: { searchTerm?: string }): any
107
+ 'item': SlotProps<T>
108
+ 'item-leading': SlotProps<T>
109
+ 'item-label': SlotProps<T>
110
+ 'item-trailing': SlotProps<T>
111
+ 'tags-item-text': SlotProps<T>
112
+ 'tags-item-delete': SlotProps<T>
113
+ }
114
+ </script>
115
+
116
+ <script setup lang="ts" generic="T extends InputMenuItem | AcceptableValue">
117
+ import { computed, ref, toRef, onMounted } from 'vue'
118
+ import { ComboboxRoot, ComboboxAnchor, ComboboxInput, ComboboxTrigger, ComboboxPortal, ComboboxContent, ComboboxViewport, ComboboxEmpty, ComboboxGroup, ComboboxLabel, ComboboxSeparator, ComboboxItem, ComboboxItemIndicator, TagsInputRoot, TagsInputItem, TagsInputItemText, TagsInputItemDelete, TagsInputInput, useForwardPropsEmits } from 'radix-vue'
119
+ import { defu } from 'defu'
120
+ import { reactivePick } from '@vueuse/core'
121
+ import { useAppConfig } from '#imports'
122
+ import { useButtonGroup } from '../composables/useButtonGroup'
123
+ import { useComponentIcons } from '../composables/useComponentIcons'
124
+ import { useFormField } from '../composables/useFormField'
125
+ import UIcon from './Icon.vue'
126
+ import UAvatar from './Avatar.vue'
127
+ import UChip from './Chip.vue'
128
+ import { get } from '../utils'
129
+
130
+ defineOptions({ inheritAttrs: false })
131
+
132
+ const props = withDefaults(defineProps<InputMenuProps<T>>(), {
133
+ type: 'text',
134
+ autofocusDelay: 0,
135
+ portal: true,
136
+ filter: () => ['label']
137
+ })
138
+ const emits = defineEmits<InputMenuEmits<T>>()
139
+ const slots = defineSlots<InputMenuSlots<T>>()
140
+
141
+ const searchTerm = defineModel<string>('searchTerm', { default: '' })
142
+
143
+ const appConfig = useAppConfig()
144
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'modelValue', 'defaultValue', 'selectedValue', 'open', 'defaultOpen', 'multiple', 'resetSearchTermOnBlur'), emits)
145
+ const contentProps = toRef(() => defu(props.content, { side: 'bottom', sideOffset: 8, position: 'popper' }) as ComboboxContentProps)
146
+ const { emitFormBlur, emitFormChange, emitFormInput, size: formGroupSize, color, id, name, highlight, disabled } = useFormField<InputProps>(props)
147
+ const { orientation, size: buttonGroupSize } = useButtonGroup<InputProps>(props)
148
+ const { isLeading, isTrailing, leadingIconName, trailingIconName } = useComponentIcons(toRef(() => defu(props, { trailingIcon: appConfig.ui.icons.chevronDown })))
149
+
150
+ const inputSize = computed(() => buttonGroupSize.value || formGroupSize.value)
151
+
152
+ const ui = computed(() => inputMenu({
153
+ color: color.value,
154
+ variant: props.variant,
155
+ size: inputSize?.value,
156
+ loading: props.loading,
157
+ highlight: highlight.value,
158
+ leading: isLeading.value || !!slots.leading,
159
+ trailing: isTrailing.value || !!slots.trailing,
160
+ multiple: props.multiple,
161
+ buttonGroup: orientation.value
162
+ }))
163
+
164
+ function displayValue(val: AcceptableValue) {
165
+ if (typeof val === 'object') {
166
+ return val.label
167
+ }
168
+
169
+ return val && String(val)
170
+ }
171
+
172
+ function filterFunction(items: ArrayOrWrapped<AcceptableValue>, searchTerm: string): ArrayOrWrapped<AcceptableValue> {
173
+ if (props.filter === false) {
174
+ return items
175
+ }
176
+
177
+ const fields = Array.isArray(props.filter) ? props.filter : ['label']
178
+
179
+ return items.filter((item) => {
180
+ if (typeof item !== 'object') {
181
+ return String(item).search(new RegExp(searchTerm, 'i')) !== -1
182
+ }
183
+
184
+ return fields.some((field) => {
185
+ const child = get(item, field)
186
+
187
+ return child !== null && child !== undefined && String(child).search(new RegExp(searchTerm, 'i')) !== -1
188
+ })
189
+ }) as ArrayOrWrapped<T>
190
+ }
191
+
192
+ const groups = computed(() => props.items?.length ? (Array.isArray(props.items[0]) ? props.items : [props.items]) as InputMenuItem[][] : [])
193
+
194
+ const inputRef = ref<InstanceType<typeof ComboboxInput> | null>(null)
195
+
196
+ function autoFocus() {
197
+ if (props.autofocus) {
198
+ inputRef.value?.$el?.focus()
199
+ }
200
+ }
201
+
202
+ onMounted(() => {
203
+ setTimeout(() => {
204
+ autoFocus()
205
+ }, props.autofocusDelay)
206
+ })
207
+
208
+ function onUpdate(value: any) {
209
+ // @ts-expect-error - 'target' does not exist in type 'EventInit'
210
+ const event = new Event('change', { target: { value } })
211
+ emits('change', event)
212
+ emitFormChange()
213
+ emitFormInput()
214
+ }
215
+
216
+ function onBlur(event: FocusEvent) {
217
+ emits('blur', event)
218
+ emitFormBlur()
219
+ }
220
+
221
+ function onUpdateOpen(value: boolean) {
222
+ if (!value) {
223
+ const event = new FocusEvent('blur')
224
+ emits('blur', event)
225
+ emitFormBlur()
226
+ } else {
227
+ const event = new FocusEvent('focus')
228
+ emits('focus', event)
229
+ }
230
+ }
231
+
232
+ defineExpose({
233
+ inputRef
234
+ })
235
+ </script>
236
+
237
+ <template>
238
+ <ComboboxRoot
239
+ :id="id"
240
+ v-slot="{ modelValue, open }"
241
+ v-bind="rootProps"
242
+ v-model:search-term="searchTerm"
243
+ :name="name"
244
+ :disabled="disabled"
245
+ :display-value="displayValue"
246
+ :filter-function="filterFunction"
247
+ :class="ui.root({ class: [props.class, props.ui?.root] })"
248
+ :as-child="!!multiple"
249
+ @update:model-value="onUpdate"
250
+ @update:open="onUpdateOpen"
251
+ @keydown.enter="$event.preventDefault()"
252
+ >
253
+ <ComboboxAnchor :as-child="!multiple" :class="ui.base({ class: props.ui?.base })">
254
+ <TagsInputRoot
255
+ v-if="multiple"
256
+ v-slot="{ modelValue: tags }: { modelValue: AcceptableValue[] }"
257
+ :model-value="(modelValue as string[])"
258
+ :disabled="disabled"
259
+ delimiter=""
260
+ as-child
261
+ @blur="onBlur"
262
+ >
263
+ <TagsInputItem v-for="(item, index) in tags" :key="index" :value="(item as string)" :class="ui.tagsItem({ class: props.ui?.tagsItem })">
264
+ <TagsInputItemText :class="ui.tagsItemText({ class: props.ui?.tagsItemText })">
265
+ <slot name="tags-item-text" :item="(item as T)" :index="index">
266
+ {{ typeof item === 'object' ? item.label : item }}
267
+ </slot>
268
+ </TagsInputItemText>
269
+
270
+ <TagsInputItemDelete :class="ui.tagsItemDelete({ class: props.ui?.tagsItemDelete })" :disabled="disabled">
271
+ <slot name="tags-item-delete" :item="(item as T)" :index="index">
272
+ <UIcon :name="deleteIcon || appConfig.ui.icons.close" :class="ui.tagsItemDeleteIcon({ class: props.ui?.tagsItemDeleteIcon })" />
273
+ </slot>
274
+ </TagsInputItemDelete>
275
+ </TagsInputItem>
276
+
277
+ <ComboboxInput as-child>
278
+ <TagsInputInput
279
+ ref="inputRef"
280
+ v-bind="$attrs"
281
+ :placeholder="placeholder"
282
+ :required="required"
283
+ :class="ui.tagsInput({ class: props.ui?.tagsInput })"
284
+ @keydown.enter.prevent
285
+ />
286
+ </ComboboxInput>
287
+ </TagsInputRoot>
288
+
289
+ <ComboboxInput
290
+ v-else
291
+ ref="inputRef"
292
+ v-bind="$attrs"
293
+ :type="type"
294
+ :placeholder="placeholder"
295
+ :required="required"
296
+ :class="ui.base({ class: props.ui?.base })"
297
+ @blur="onBlur"
298
+ />
299
+
300
+ <span v-if="isLeading || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })">
301
+ <slot name="leading" :model-value="(modelValue as T)" :open="open" :ui="ui">
302
+ <UIcon v-if="leadingIconName" :name="leadingIconName" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
303
+ </slot>
304
+ </span>
305
+
306
+ <ComboboxTrigger v-if="isTrailing || !!slots.trailing" :class="ui.trailing({ class: props.ui?.trailing })">
307
+ <slot name="trailing" :model-value="(modelValue as T)" :open="open" :ui="ui">
308
+ <UIcon v-if="trailingIconName" :name="trailingIconName" :class="ui.trailingIcon({ class: props.ui?.trailingIcon })" />
309
+ </slot>
310
+ </ComboboxTrigger>
311
+ </ComboboxAnchor>
312
+
313
+ <ComboboxPortal :disabled="!portal">
314
+ <ComboboxContent :class="ui.content({ class: props.ui?.content })" v-bind="contentProps">
315
+ <ComboboxEmpty :class="ui.empty({ class: props.ui?.empty })">
316
+ <slot name="empty" :search-term="searchTerm">
317
+ {{ searchTerm ? `No results for ${searchTerm}` : 'No results' }}
318
+ </slot>
319
+ </ComboboxEmpty>
320
+
321
+ <ComboboxViewport :class="ui.viewport({ class: props.ui?.viewport })">
322
+ <ComboboxGroup v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="ui.group({ class: props.ui?.group })">
323
+ <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
324
+ <ComboboxLabel v-if="item?.type === 'label'" :class="ui.label({ class: props.ui?.label })">
325
+ {{ item.label }}
326
+ </ComboboxLabel>
327
+
328
+ <ComboboxSeparator v-else-if="item?.type === 'separator'" :class="ui.separator({ class: props.ui?.separator })" />
329
+
330
+ <ComboboxItem
331
+ v-else
332
+ :class="ui.item({ class: props.ui?.item })"
333
+ :disabled="item.disabled"
334
+ :value="valueKey && typeof item === 'object' ? (item[valueKey as keyof InputMenuItem]) as AcceptableValue : item"
335
+ >
336
+ <slot name="item" :item="(item as T)" :index="index">
337
+ <slot name="item-leading" :item="(item as T)" :index="index">
338
+ <UAvatar v-if="item.avatar" :size="((props.ui?.itemLeadingAvatarSize || ui.itemLeadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.itemLeadingAvatar({ class: props.ui?.itemLeadingAvatar })" />
339
+ <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.itemLeadingIcon({ class: props.ui?.itemLeadingIcon })" />
340
+ <UChip
341
+ v-else-if="item.chip"
342
+ :size="((props.ui?.itemLeadingChipSize || ui.itemLeadingChipSize()) as ChipProps['size'])"
343
+ inset
344
+ standalone
345
+ v-bind="item.chip"
346
+ :class="ui.itemLeadingChip({ class: props.ui?.itemLeadingChip })"
347
+ />
348
+ </slot>
349
+
350
+ <span :class="ui.itemLabel({ class: props.ui?.itemLabel })">
351
+ <slot name="item-label" :item="(item as T)" :index="index">
352
+ {{ displayValue(item as T) }}
353
+ </slot>
354
+ </span>
355
+
356
+ <span :class="ui.itemTrailing({ class: props.ui?.itemTrailing })">
357
+ <slot name="item-trailing" :item="(item as T)" :index="index" />
358
+
359
+ <ComboboxItemIndicator as-child>
360
+ <UIcon :name="selectedIcon || appConfig.ui.icons.check" :class="ui.itemTrailingIcon({ class: props.ui?.itemTrailingIcon })" />
361
+ </ComboboxItemIndicator>
362
+ </span>
363
+ </slot>
364
+ </ComboboxItem>
365
+ </template>
366
+ </ComboboxGroup>
367
+ </ComboboxViewport>
368
+ </ComboboxContent>
369
+ </ComboboxPortal>
370
+ </ComboboxRoot>
371
+ </template>
@@ -0,0 +1,49 @@
1
+ <script lang="ts">
2
+ import { tv, type VariantProps } from 'tailwind-variants'
3
+ import type { AppConfig } from '@nuxt/schema'
4
+ import _appConfig from '#build/app.config'
5
+ import theme from '#build/ui/kbd'
6
+ import type { KbdKey } from '../composables/useKbd'
7
+
8
+ const appConfig = _appConfig as AppConfig & { ui: { kbd: Partial<typeof theme> } }
9
+
10
+ const kbd = tv({ extend: tv(theme), ...(appConfig.ui?.kbd || {}) })
11
+
12
+ type KbdVariants = VariantProps<typeof kbd>
13
+
14
+ export interface KbdProps {
15
+ /**
16
+ * The element or component this component should render as.
17
+ * @defaultValue 'kbd'
18
+ */
19
+ as?: any
20
+ value?: KbdKey | string
21
+ variant?: KbdVariants['variant']
22
+ size?: KbdVariants['size']
23
+ class?: any
24
+ }
25
+
26
+ export interface KbdSlots {
27
+ default(props?: {}): any
28
+ }
29
+ </script>
30
+
31
+ <script setup lang="ts">
32
+ import { Primitive } from 'radix-vue'
33
+ import { useKbd } from '../composables/useKbd'
34
+
35
+ const props = withDefaults(defineProps<KbdProps>(), {
36
+ as: 'kbd'
37
+ })
38
+ defineSlots<KbdSlots>()
39
+
40
+ const { getKbdKey } = useKbd()
41
+ </script>
42
+
43
+ <template>
44
+ <Primitive :as="as" :class="kbd({ variant, size, class: props.class })">
45
+ <slot>
46
+ {{ getKbdKey(value) }}
47
+ </slot>
48
+ </Primitive>
49
+ </template>
@@ -0,0 +1,147 @@
1
+ <script lang="ts">
2
+ import type { ButtonHTMLAttributes } from 'vue'
3
+ import { tv } from 'tailwind-variants'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/link'
7
+ import type { NuxtLinkProps } from '#app'
8
+
9
+ const appConfig = _appConfig as AppConfig & { ui: { link: Partial<typeof theme> } }
10
+
11
+ const link = tv({ extend: tv(theme), ...(appConfig.ui?.link || {}) })
12
+
13
+ export interface LinkProps extends NuxtLinkProps {
14
+ /**
15
+ * The element or component this component should render as when not a link.
16
+ * @defaultValue 'button'
17
+ */
18
+ as?: any
19
+ /**
20
+ * The type of the button when not a link.
21
+ * @defaultValue 'button'
22
+ */
23
+ type?: ButtonHTMLAttributes['type']
24
+ disabled?: boolean
25
+ /** Force the link to be active independent of the current route. */
26
+ active?: boolean
27
+ /** Will only be active if the current route is an exact match. */
28
+ exact?: boolean
29
+ /** Will only be active if the current route query is an exact match. */
30
+ exactQuery?: boolean
31
+ /** Will only be active if the current route hash is an exact match. */
32
+ exactHash?: boolean
33
+ /** The class to apply when the link is inactive. */
34
+ inactiveClass?: string
35
+ custom?: boolean
36
+ /** When `true`, only styles from `class`, `activeClass`, and `inactiveClass` will be applied. */
37
+ raw?: boolean
38
+ class?: any
39
+ }
40
+
41
+ export interface LinkSlots {
42
+ default(props: { active: boolean }): any
43
+ }
44
+ </script>
45
+
46
+ <script setup lang="ts">
47
+ import { computed } from 'vue'
48
+ import { isEqual } from 'ohash'
49
+ import { useForwardProps } from 'radix-vue'
50
+ import { reactiveOmit } from '@vueuse/core'
51
+ import { useRoute } from '#imports'
52
+
53
+ defineOptions({ inheritAttrs: false })
54
+
55
+ const props = withDefaults(defineProps<LinkProps>(), {
56
+ as: 'button',
57
+ type: 'button',
58
+ active: undefined,
59
+ activeClass: '',
60
+ inactiveClass: ''
61
+ })
62
+ defineSlots<LinkSlots>()
63
+
64
+ const route = useRoute()
65
+ const nuxtLinkProps = useForwardProps(reactiveOmit(props, 'as', 'type', 'disabled', 'active', 'exact', 'exactQuery', 'exactHash', 'activeClass', 'inactiveClass'))
66
+
67
+ const ui = computed(() => tv({
68
+ extend: link,
69
+ variants: {
70
+ active: {
71
+ true: props.activeClass,
72
+ false: props.inactiveClass
73
+ }
74
+ }
75
+ }))
76
+
77
+ function isLinkActive({ route: linkRoute, isActive, isExactActive }: any) {
78
+ if (props.active !== undefined) {
79
+ return props.active
80
+ }
81
+
82
+ if (props.exactQuery && !isEqual(linkRoute.query, route.query)) {
83
+ return false
84
+ }
85
+ if (props.exactHash && linkRoute.hash !== route.hash) {
86
+ return false
87
+ }
88
+
89
+ if (props.exact && isExactActive) {
90
+ return true
91
+ }
92
+
93
+ if (!props.exact && isActive) {
94
+ return true
95
+ }
96
+
97
+ return false
98
+ }
99
+
100
+ function resolveLinkClass({ route, isActive, isExactActive }: any) {
101
+ const active = isLinkActive({ route, isActive, isExactActive })
102
+
103
+ if (props.raw) {
104
+ return [props.class, active ? props.activeClass : props.inactiveClass]
105
+ }
106
+
107
+ return ui.value({ class: props.class, active, disabled: props.disabled })
108
+ }
109
+ </script>
110
+
111
+ <template>
112
+ <NuxtLink v-slot="{ href, navigate, route: linkRoute, rel, target, isExternal, isActive, isExactActive }" v-bind="nuxtLinkProps" custom>
113
+ <template v-if="custom">
114
+ <slot
115
+ v-bind="{
116
+ ...$attrs,
117
+ as,
118
+ type,
119
+ disabled,
120
+ href,
121
+ navigate,
122
+ rel,
123
+ target,
124
+ isExternal,
125
+ active: isLinkActive({ route: linkRoute, isActive, isExactActive })
126
+ }"
127
+ />
128
+ </template>
129
+ <ULinkBase
130
+ v-else
131
+ v-bind="{
132
+ ...$attrs,
133
+ as,
134
+ type,
135
+ disabled,
136
+ href,
137
+ navigate,
138
+ rel,
139
+ target,
140
+ isExternal
141
+ }"
142
+ :class="resolveLinkClass({ route: linkRoute, isActive, isExactActive })"
143
+ >
144
+ <slot :active="isLinkActive({ route: linkRoute, isActive, isExactActive })" />
145
+ </ULinkBase>
146
+ </NuxtLink>
147
+ </template>
@@ -0,0 +1,60 @@
1
+ <script lang="ts">
2
+ export interface LinkBaseProps {
3
+ as?: string
4
+ type?: string
5
+ disabled?: boolean
6
+ click?: (e: MouseEvent) => void
7
+ href?: string
8
+ navigate?: (e: MouseEvent) => void
9
+ rel?: string
10
+ target?: string
11
+ isExternal?: boolean
12
+ }
13
+ </script>
14
+
15
+ <script setup lang="ts">
16
+ import { Primitive } from 'radix-vue'
17
+
18
+ const props = withDefaults(defineProps<LinkBaseProps>(), {
19
+ as: 'button',
20
+ type: 'button'
21
+ })
22
+
23
+ function onClick(e: MouseEvent) {
24
+ if (props.disabled) {
25
+ e.stopPropagation()
26
+ e.preventDefault()
27
+ return
28
+ }
29
+
30
+ if (props.click) {
31
+ props.click(e)
32
+ }
33
+
34
+ if (props.href && props.navigate && !props.isExternal) {
35
+ props.navigate(e)
36
+ }
37
+ }
38
+ </script>
39
+
40
+ <template>
41
+ <Primitive
42
+ v-bind="href ? {
43
+ 'as': 'a',
44
+ 'href': disabled ? undefined : href,
45
+ 'aria-disabled': disabled ? 'true' : undefined,
46
+ 'role': disabled ? 'link' : undefined
47
+ } : as === 'button' ? {
48
+ as,
49
+ type,
50
+ disabled
51
+ } : {
52
+ as
53
+ }"
54
+ :rel="rel"
55
+ :target="target"
56
+ @click="onClick"
57
+ >
58
+ <slot />
59
+ </Primitive>
60
+ </template>