@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,113 @@
1
+ <script lang="ts">
2
+ import { tv, type VariantProps } from 'tailwind-variants'
3
+ import type { SliderRootProps } from 'radix-vue'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/slider'
7
+
8
+ const appConfig = _appConfig as AppConfig & { ui: { slider: Partial<typeof theme> } }
9
+
10
+ const slider = tv({ extend: tv(theme), ...(appConfig.ui?.slider || {}) })
11
+
12
+ type SliderVariants = VariantProps<typeof slider>
13
+
14
+ export interface SliderProps extends Pick<SliderRootProps, 'name' | 'disabled' | 'inverted' | 'min' | 'max' | 'step' | 'minStepsBetweenThumbs'> {
15
+ /**
16
+ * The element or component this component should render as.
17
+ * @defaultValue `div`
18
+ */
19
+ as?: any
20
+ size?: SliderVariants['size']
21
+ color?: SliderVariants['color']
22
+ /**
23
+ * The orientation of the slider.
24
+ * @defaultValue 'horizontal'
25
+ */
26
+ orientation?: SliderRootProps['orientation']
27
+ /** The value of the slider when initially rendered. Use when you do not need to control the state of the slider. */
28
+ defaultValue?: number | number[]
29
+ class?: any
30
+ ui?: Partial<typeof slider.slots>
31
+ }
32
+
33
+ export interface SliderEmits {
34
+ (e: 'update:modelValue', payload: number | number[]): void
35
+ (e: 'change', payload: Event): void
36
+ }
37
+ </script>
38
+
39
+ <script setup lang="ts">
40
+ import { computed } from 'vue'
41
+ import { SliderRoot, SliderRange, SliderTrack, SliderThumb, useForwardPropsEmits } from 'radix-vue'
42
+ import { reactivePick } from '@vueuse/core'
43
+ import { useFormField } from '../composables/useFormField'
44
+
45
+ const props = withDefaults(defineProps<SliderProps>(), {
46
+ min: 0,
47
+ max: 100,
48
+ step: 1,
49
+ orientation: 'horizontal'
50
+ })
51
+ const emits = defineEmits<SliderEmits>()
52
+
53
+ const modelValue = defineModel<number | number[]>()
54
+
55
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'orientation', 'min', 'max', 'step', 'minStepsBetweenThumbs', 'inverted'), emits)
56
+
57
+ const { id, emitFormChange, emitFormInput, size, color, name, disabled } = useFormField<SliderProps>(props)
58
+
59
+ const defaultSliderValue = computed(() => {
60
+ if (typeof props.defaultValue === 'number') {
61
+ return [props.defaultValue]
62
+ }
63
+ return props.defaultValue
64
+ })
65
+
66
+ const sliderValue = computed({
67
+ get() {
68
+ if (typeof modelValue.value === 'number') {
69
+ return [modelValue.value]
70
+ }
71
+ return modelValue.value ?? defaultSliderValue.value
72
+ },
73
+ set(value) {
74
+ modelValue.value = value?.length !== 1 ? value : value[0]
75
+ }
76
+ })
77
+
78
+ const thumbsCount = computed(() => sliderValue.value?.length ?? 1)
79
+
80
+ const ui = computed(() => slider({
81
+ disabled: disabled.value,
82
+ size: size.value,
83
+ color: color.value,
84
+ orientation: props.orientation
85
+ }))
86
+
87
+ function onChange(value: any) {
88
+ // @ts-expect-error - 'target' does not exist in type 'EventInit'
89
+ const event = new Event('change', { target: { value } })
90
+ emits('change', event)
91
+ emitFormChange()
92
+ }
93
+ </script>
94
+
95
+ <template>
96
+ <SliderRoot
97
+ v-bind="rootProps"
98
+ :id="id"
99
+ v-model="sliderValue"
100
+ :name="name"
101
+ :disabled="disabled"
102
+ :class="ui.root({ class: [props.class, props.ui?.root] })"
103
+ :default-value="defaultSliderValue"
104
+ @update:model-value="emitFormInput()"
105
+ @value-commit="onChange"
106
+ >
107
+ <SliderTrack :class="ui.track({ class: props.ui?.track })">
108
+ <SliderRange :class="ui.range({ class: props.ui?.range })" />
109
+ </SliderTrack>
110
+
111
+ <SliderThumb v-for="count in thumbsCount" :key="count" :class="ui.thumb({ class: props.ui?.thumb })" />
112
+ </SliderRoot>
113
+ </template>
@@ -0,0 +1,124 @@
1
+ <script lang="ts">
2
+ import { tv, type VariantProps } from 'tailwind-variants'
3
+ import type { SwitchRootProps } from 'radix-vue'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/switch'
7
+ import type { PartialString } from '../types/utils'
8
+
9
+ const appConfig = _appConfig as AppConfig & { ui: { switch: Partial<typeof theme> } }
10
+
11
+ const switchTv = tv({ extend: tv(theme), ...(appConfig.ui?.switch || {}) })
12
+
13
+ type SwitchVariants = VariantProps<typeof switchTv>
14
+
15
+ export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | 'name' | 'required' | 'value'> {
16
+ /**
17
+ * The element or component this component should render as.
18
+ * @defaultValue `div`
19
+ */
20
+ as?: any
21
+ color?: SwitchVariants['color']
22
+ size?: SwitchVariants['size']
23
+ /** When `true`, the loading icon will be displayed. */
24
+ loading?: boolean
25
+ /**
26
+ * The icon when the `loading` prop is `true`.
27
+ * @defaultValue appConfig.ui.icons.loading
28
+ */
29
+ loadingIcon?: string
30
+ /** Display an icon when the switch is checked. */
31
+ checkedIcon?: string
32
+ /** Display an icon when the switch is unchecked. */
33
+ uncheckedIcon?: string
34
+ label?: string
35
+ description?: string
36
+ /** The state of the switch when it is initially rendered. Use when you do not need to control its state. */
37
+ defaultValue?: boolean
38
+ class?: any
39
+ ui?: PartialString<typeof switchTv.slots>
40
+ }
41
+
42
+ export interface SwitchEmits {
43
+ (e: 'update:modelValue', payload: boolean): void
44
+ (e: 'change', payload: Event): void
45
+ }
46
+
47
+ export interface SwitchSlots {
48
+ label(props: { label?: string }): any
49
+ description(props: { description?: string }): any
50
+ }
51
+ </script>
52
+
53
+ <script setup lang="ts">
54
+ import { computed, useId } from 'vue'
55
+ import { SwitchRoot, SwitchThumb, useForwardProps, Label } from 'radix-vue'
56
+ import { reactivePick } from '@vueuse/core'
57
+ import { useAppConfig } from '#imports'
58
+ import { useFormField } from '../composables/useFormField'
59
+
60
+ const props = defineProps<SwitchProps>()
61
+ const slots = defineSlots<SwitchSlots>()
62
+ const emits = defineEmits<SwitchEmits>()
63
+
64
+ const modelValue = defineModel<boolean | undefined>({ default: undefined })
65
+
66
+ const appConfig = useAppConfig()
67
+ const rootProps = useForwardProps(reactivePick(props, 'as', 'required', 'value'))
68
+
69
+ const { id: _id, emitFormChange, emitFormInput, size, color, name, disabled } = useFormField<SwitchProps>(props)
70
+ const id = _id.value ?? useId()
71
+
72
+ const ui = computed(() => switchTv({
73
+ size: size.value,
74
+ color: color.value,
75
+ required: props.required,
76
+ loading: props.loading,
77
+ disabled: disabled.value || props.loading
78
+ }))
79
+
80
+ function onUpdate(value: any) {
81
+ // @ts-expect-error - 'target' does not exist in type 'EventInit'
82
+ const event = new Event('change', { target: { value } })
83
+ emits('change', event)
84
+ emitFormChange()
85
+ emitFormInput()
86
+ }
87
+ </script>
88
+
89
+ <template>
90
+ <div :class="ui.root({ class: [props.class, props.ui?.root] })">
91
+ <div :class="ui.container({ class: props.ui?.container })">
92
+ <SwitchRoot
93
+ :id="id"
94
+ v-model:checked="modelValue"
95
+ :default-checked="defaultValue"
96
+ v-bind="rootProps"
97
+ :name="name"
98
+ :disabled="disabled || loading"
99
+ :class="ui.base({ class: props.ui?.base })"
100
+ @update:checked="onUpdate"
101
+ >
102
+ <SwitchThumb :class="ui.thumb({ class: props.ui?.thumb })">
103
+ <UIcon v-if="loading" :name="loadingIcon || appConfig.ui.icons.loading" :class="ui.icon({ class: props.ui?.icon, checked: true, unchecked: true })" />
104
+ <template v-else>
105
+ <UIcon v-if="checkedIcon" :name="checkedIcon" :class="ui.icon({ class: props.ui?.icon, checked: true })" />
106
+ <UIcon v-if="uncheckedIcon" :name="uncheckedIcon" :class="ui.icon({ class: props.ui?.icon, unchecked: true })" />
107
+ </template>
108
+ </SwitchThumb>
109
+ </SwitchRoot>
110
+ </div>
111
+ <div v-if="(label || !!slots.label) || (description || !!slots.description)" :class="ui.wrapper({ class: props.ui?.wrapper })">
112
+ <Label v-if="label || !!slots.label" :for="id" :class="ui.label({ class: props.ui?.label })">
113
+ <slot name="label" :label="label">
114
+ {{ label }}
115
+ </slot>
116
+ </Label>
117
+ <p v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
118
+ <slot name="description" :description="description">
119
+ {{ description }}
120
+ </slot>
121
+ </p>
122
+ </div>
123
+ </div>
124
+ </template>
@@ -0,0 +1,114 @@
1
+ <script lang="ts">
2
+ import { tv, type VariantProps } from 'tailwind-variants'
3
+ import type { TabsRootProps, TabsRootEmits, TabsContentProps, TabsTriggerProps } from 'radix-vue'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/tabs'
7
+ import type { AvatarProps } from '../types'
8
+ import type { DynamicSlots, PartialString } from '../types/utils'
9
+
10
+ const appConfig = _appConfig as AppConfig & { ui: { tabs: Partial<typeof theme> } }
11
+
12
+ const tabs = tv({ extend: tv(theme), ...(appConfig.ui?.tabs || {}) })
13
+
14
+ export interface TabsItem extends Pick<TabsTriggerProps, 'disabled'> {
15
+ label?: string
16
+ icon?: string
17
+ avatar?: AvatarProps
18
+ slot?: string
19
+ content?: string
20
+ /** A unique value for the tab item. Defaults to the index. */
21
+ value?: string | number
22
+ }
23
+
24
+ type TabsVariants = VariantProps<typeof tabs>
25
+
26
+ export interface TabsProps<T> extends Pick<TabsRootProps<string | number>, 'defaultValue' | 'modelValue' | 'activationMode'> {
27
+ /**
28
+ * The element or component this component should render as.
29
+ * @defaultValue 'div'
30
+ */
31
+ as?: any
32
+ items?: T[]
33
+ color?: TabsVariants['color']
34
+ variant?: TabsVariants['variant']
35
+ size?: TabsVariants['size']
36
+ /**
37
+ * The orientation of the tabs.
38
+ * @defaultValue 'horizontal'
39
+ */
40
+ orientation?: TabsRootProps['orientation']
41
+ /**
42
+ * The content of the tabs, can be disabled to prevent rendering the content.
43
+ * @defaultValue true
44
+ */
45
+ content?: boolean | Omit<TabsContentProps, 'as' | 'asChild' | 'value'>
46
+ class?: any
47
+ ui?: PartialString<typeof tabs.slots>
48
+ }
49
+
50
+ export interface TabsEmits extends TabsRootEmits<string | number> {}
51
+
52
+ type SlotProps<T> = (props: { item: T, index: number }) => any
53
+
54
+ export type TabsSlots<T extends { slot?: string }> = {
55
+ leading: SlotProps<T>
56
+ default: SlotProps<T>
57
+ trailing: SlotProps<T>
58
+ content: SlotProps<T>
59
+ } & DynamicSlots<T, SlotProps<T>>
60
+ </script>
61
+
62
+ <script setup lang="ts" generic="T extends TabsItem">
63
+ import { computed, toRef } from 'vue'
64
+ import { defu } from 'defu'
65
+ import { TabsRoot, TabsList, TabsIndicator, TabsTrigger, TabsContent, useForwardPropsEmits } from 'radix-vue'
66
+ import { reactivePick } from '@vueuse/core'
67
+
68
+ const props = withDefaults(defineProps<TabsProps<T>>(), {
69
+ content: true,
70
+ defaultValue: '0',
71
+ orientation: 'horizontal'
72
+ })
73
+ const emits = defineEmits<TabsEmits>()
74
+ const slots = defineSlots<TabsSlots<T>>()
75
+
76
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'defaultValue', 'orientation', 'activationMode', 'modelValue'), emits)
77
+ const contentProps = toRef(() => defu(props.content || {}, { forceMount: true }) as TabsContentProps)
78
+
79
+ const ui = computed(() => tabs({
80
+ color: props.color,
81
+ variant: props.variant,
82
+ size: props.size,
83
+ orientation: props.orientation
84
+ }))
85
+ </script>
86
+
87
+ <template>
88
+ <TabsRoot v-bind="rootProps" :class="ui.root({ class: [props.class, props.ui?.root] })">
89
+ <TabsList :class="ui.list({ class: props.ui?.list })">
90
+ <TabsIndicator :class="ui.indicator({ class: props.ui?.indicator })" />
91
+
92
+ <TabsTrigger v-for="(item, index) of items" :key="index" :value="item.value || String(index)" :disabled="item.disabled" :class="ui.trigger({ class: props.ui?.trigger })">
93
+ <slot name="leading" :item="item" :index="index">
94
+ <UAvatar v-if="item.avatar" :size="((props.ui?.leadingAvatarSize || ui.leadingAvatarSize()) as AvatarProps['size'])" v-bind="item.avatar" :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })" />
95
+ <UIcon v-else-if="item.icon" :name="item.icon" :class="ui.leadingIcon({ class: props.ui?.leadingIcon })" />
96
+ </slot>
97
+
98
+ <span v-if="item.label || !!slots.default" :class="ui.label({ class: props.ui?.label })">
99
+ <slot :item="item" :index="index">{{ item.label }}</slot>
100
+ </span>
101
+
102
+ <slot name="trailing" :item="item" :index="index" />
103
+ </TabsTrigger>
104
+ </TabsList>
105
+
106
+ <template v-if="!!content">
107
+ <TabsContent v-for="(item, index) of items" :key="index" v-bind="contentProps" :value="item.value || String(index)" :class="ui.content({ class: props.ui?.content })">
108
+ <slot :name="item.slot || 'content'" :item="item" :index="index">
109
+ {{ item.content }}
110
+ </slot>
111
+ </TabsContent>
112
+ </template>
113
+ </TabsRoot>
114
+ </template>
@@ -0,0 +1,189 @@
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/textarea'
6
+
7
+ const appConfig = _appConfig as AppConfig & { ui: { textarea: Partial<typeof theme> } }
8
+
9
+ const textarea = tv({ extend: tv(theme), ...(appConfig.ui?.textarea || {}) })
10
+
11
+ type TextareaVariants = VariantProps<typeof textarea>
12
+
13
+ export interface TextareaProps {
14
+ id?: string
15
+ name?: string
16
+ /** The placeholder text when the textarea is empty. */
17
+ placeholder?: string
18
+ color?: TextareaVariants['color']
19
+ variant?: TextareaVariants['variant']
20
+ size?: TextareaVariants['size']
21
+ required?: boolean
22
+ autofocus?: boolean
23
+ autofocusDelay?: number
24
+ disabled?: boolean
25
+ class?: any
26
+ rows?: number
27
+ maxrows?: number
28
+ autoresize?: boolean
29
+ /** Highlight the ring color like a focus state. */
30
+ highlight?: boolean
31
+ ui?: Partial<typeof textarea.slots>
32
+ }
33
+
34
+ export interface TextareaEmits {
35
+ (e: 'update:modelValue', payload: string | number): void
36
+ (e: 'blur', event: FocusEvent): void
37
+ (e: 'change', event: Event): void
38
+ }
39
+
40
+ export interface TextareaSlots {
41
+ default(props?: {}): any
42
+ }
43
+ </script>
44
+
45
+ <script setup lang="ts">
46
+ import { ref, computed, onMounted, nextTick, watch } from 'vue'
47
+ import { useFormField } from '../composables/useFormField'
48
+ import { looseToNumber } from '../utils'
49
+
50
+ defineOptions({ inheritAttrs: false })
51
+
52
+ const props = withDefaults(defineProps<TextareaProps>(), {
53
+ rows: 3,
54
+ maxrows: 0,
55
+ autofocusDelay: 0
56
+ })
57
+ defineSlots<TextareaSlots>()
58
+ const emits = defineEmits<TextareaEmits>()
59
+
60
+ const [modelValue, modelModifiers] = defineModel<string | number>()
61
+
62
+ const { emitFormBlur, emitFormInput, emitFormChange, size, color, id, name, highlight, disabled } = useFormField<TextareaProps>(props)
63
+
64
+ const ui = computed(() => textarea({
65
+ color: color.value,
66
+ variant: props.variant,
67
+ size: size?.value,
68
+ highlight: highlight.value
69
+ }))
70
+
71
+ const textareaRef = ref<HTMLTextAreaElement | null>(null)
72
+
73
+ function autoFocus() {
74
+ if (props.autofocus) {
75
+ textareaRef.value?.focus()
76
+ }
77
+ }
78
+
79
+ // Custom function to handle the v-model properties
80
+ function updateInput(value: string) {
81
+ if (modelModifiers.trim) {
82
+ value = value.trim()
83
+ }
84
+
85
+ if (modelModifiers.number) {
86
+ value = looseToNumber(value)
87
+ }
88
+
89
+ modelValue.value = value
90
+ emitFormInput()
91
+ }
92
+
93
+ function onInput(event: Event) {
94
+ autoResize()
95
+
96
+ if (!modelModifiers.lazy) {
97
+ updateInput((event.target as HTMLInputElement).value)
98
+ }
99
+ }
100
+
101
+ function onChange(event: Event) {
102
+ const value = (event.target as HTMLInputElement).value
103
+
104
+ if (modelModifiers.lazy) {
105
+ updateInput(value)
106
+ }
107
+
108
+ // Update trimmed textarea so that it has same behavior as native textarea https://github.com/vuejs/core/blob/5ea8a8a4fab4e19a71e123e4d27d051f5e927172/packages/runtime-dom/src/directives/vModel.ts#L63
109
+ if (modelModifiers.trim) {
110
+ (event.target as HTMLInputElement).value = value.trim()
111
+ }
112
+
113
+ emitFormChange()
114
+ emits('change', event)
115
+ }
116
+
117
+ function onBlur(event: FocusEvent) {
118
+ emitFormBlur()
119
+ emits('blur', event)
120
+ }
121
+
122
+ onMounted(() => {
123
+ setTimeout(() => {
124
+ autoFocus()
125
+ }, props.autofocusDelay)
126
+ })
127
+
128
+ function autoResize() {
129
+ if (props.autoresize) {
130
+ if (!textareaRef.value) {
131
+ return
132
+ }
133
+
134
+ textareaRef.value.rows = props.rows
135
+ const overflow = textareaRef.value.style.overflow
136
+ textareaRef.value.style.overflow = 'hidden'
137
+
138
+ const styles = window.getComputedStyle(textareaRef.value)
139
+ const paddingTop = Number.parseInt(styles.paddingTop)
140
+ const paddingBottom = Number.parseInt(styles.paddingBottom)
141
+ const padding = paddingTop + paddingBottom
142
+ const lineHeight = Number.parseInt(styles.lineHeight)
143
+ const { scrollHeight } = textareaRef.value
144
+ const newRows = (scrollHeight - padding) / lineHeight
145
+
146
+ if (newRows > props.rows) {
147
+ textareaRef.value.rows = props.maxrows ? Math.min(newRows, props.maxrows) : newRows
148
+ }
149
+
150
+ textareaRef.value.style.overflow = overflow
151
+ }
152
+ }
153
+
154
+ watch(() => modelValue, () => {
155
+ nextTick(autoResize)
156
+ })
157
+
158
+ defineExpose({
159
+ textareaRef
160
+ })
161
+
162
+ onMounted(() => {
163
+ setTimeout(() => {
164
+ autoResize()
165
+ }, 100)
166
+ })
167
+ </script>
168
+
169
+ <template>
170
+ <div :class="ui.root({ class: [props.class, props.ui?.root] })">
171
+ <textarea
172
+ :id="id"
173
+ ref="textareaRef"
174
+ :value="modelValue"
175
+ :name="name"
176
+ :rows="rows"
177
+ :placeholder="placeholder"
178
+ :class="ui.base({ class: props.ui?.base })"
179
+ :disabled="disabled"
180
+ :required="required"
181
+ v-bind="$attrs"
182
+ @input="onInput"
183
+ @blur="onBlur"
184
+ @change="onChange"
185
+ />
186
+
187
+ <slot />
188
+ </div>
189
+ </template>
@@ -0,0 +1,161 @@
1
+ <script lang="ts">
2
+ import { tv, type VariantProps } from 'tailwind-variants'
3
+ import type { ToastRootProps, ToastRootEmits } from 'radix-vue'
4
+ import type { AppConfig } from '@nuxt/schema'
5
+ import _appConfig from '#build/app.config'
6
+ import theme from '#build/ui/toast'
7
+ import type { AvatarProps, ButtonProps } from '../types'
8
+
9
+ const appConfig = _appConfig as AppConfig & { ui: { toast: Partial<typeof theme> } }
10
+
11
+ const toast = tv({ extend: tv(theme), ...(appConfig.ui?.toast || {}) })
12
+
13
+ type ToastVariants = VariantProps<typeof toast>
14
+
15
+ export interface ToastProps extends Pick<ToastRootProps, 'defaultOpen' | 'open' | 'type' | 'duration'> {
16
+ /**
17
+ * The element or component this component should render as.
18
+ * @defaultValue 'li'
19
+ */
20
+ as?: any
21
+ title?: string
22
+ description?: string
23
+ icon?: string
24
+ avatar?: AvatarProps
25
+ color?: ToastVariants['color']
26
+ /**
27
+ * Display a list of actions:
28
+ * - under the title and description if multiline
29
+ * - next to the close button if not multiline
30
+ */
31
+ actions?: ButtonProps[]
32
+ /**
33
+ * Display a close button to dismiss the toast.
34
+ * `{ size: 'md', color: 'gray', variant: 'link' }`{lang="ts-type"}
35
+ * @defaultValue true
36
+ */
37
+ close?: ButtonProps | boolean
38
+ /**
39
+ * The icon displayed in the close button.
40
+ * @defaultValue appConfig.ui.icons.close
41
+ */
42
+ closeIcon?: string
43
+ class?: any
44
+ ui?: Partial<typeof toast.slots>
45
+ }
46
+
47
+ export interface ToastEmits extends ToastRootEmits {}
48
+
49
+ export interface ToastSlots {
50
+ leading(props?: {}): any
51
+ title(props?: {}): any
52
+ description(props?: {}): any
53
+ actions(props?: {}): any
54
+ close(props: { ui: any }): any
55
+ }
56
+ </script>
57
+
58
+ <script setup lang="ts">
59
+ import { ref, computed, onMounted } from 'vue'
60
+ import { ToastRoot, ToastTitle, ToastDescription, ToastAction, ToastClose, useForwardPropsEmits } from 'radix-vue'
61
+ import { reactivePick } from '@vueuse/core'
62
+ import { useAppConfig } from '#imports'
63
+ import UIcon from './Icon.vue'
64
+ import UAvatar from './Avatar.vue'
65
+
66
+ const props = withDefaults(defineProps<ToastProps>(), {
67
+ close: true
68
+ })
69
+ const emits = defineEmits<ToastEmits>()
70
+ const slots = defineSlots<ToastSlots>()
71
+
72
+ const appConfig = useAppConfig()
73
+ const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'defaultOpen', 'open', 'duration', 'type'), emits)
74
+
75
+ const multiline = computed(() => !!props.title && !!props.description)
76
+
77
+ const ui = computed(() => toast({
78
+ color: props.color
79
+ }))
80
+
81
+ const el = ref()
82
+ const height = ref(0)
83
+
84
+ onMounted(() => {
85
+ if (!el.value) {
86
+ return
87
+ }
88
+
89
+ setTimeout(() => {
90
+ height.value = el.value.$el.getBoundingClientRect()?.height
91
+ }, 0)
92
+ })
93
+
94
+ defineExpose({
95
+ height
96
+ })
97
+ </script>
98
+
99
+ <template>
100
+ <ToastRoot
101
+ ref="el"
102
+ v-slot="{ remaining, duration }"
103
+ v-bind="rootProps"
104
+ :class="ui.root({ class: [props.class, props.ui?.root], multiline })"
105
+ :style="{ '--height': height }"
106
+ >
107
+ <slot name="leading">
108
+ <UAvatar v-if="avatar" :size="((props.ui?.avatarSize || ui.avatarSize()) as AvatarProps['size'])" v-bind="avatar" :class="ui.avatar({ class: props.ui?.avatar })" />
109
+ <UIcon v-else-if="icon" :name="icon" :class="ui.icon({ class: props.ui?.icon })" />
110
+ </slot>
111
+
112
+ <div :class="ui.wrapper({ class: props.ui?.wrapper })">
113
+ <ToastTitle v-if="title || !!slots.title" :class="ui.title({ class: props.ui?.title })">
114
+ <slot name="title">
115
+ {{ title }}
116
+ </slot>
117
+ </ToastTitle>
118
+ <ToastDescription v-if="description || !!slots.description" :class="ui.description({ class: props.ui?.description })">
119
+ <slot name="description">
120
+ {{ description }}
121
+ </slot>
122
+ </ToastDescription>
123
+
124
+ <div v-if="multiline && actions?.length" :class="ui.actions({ class: props.ui?.actions, multiline: true })">
125
+ <slot name="actions">
126
+ <ToastAction v-for="(action, index) in actions" :key="index" :alt-text="action.label || 'Action'" as-child @click.stop>
127
+ <UButton size="xs" :color="color" v-bind="action" />
128
+ </ToastAction>
129
+ </slot>
130
+ </div>
131
+ </div>
132
+
133
+ <div v-if="(!multiline && actions?.length) || close !== null" :class="ui.actions({ class: props.ui?.actions, multiline: false })">
134
+ <template v-if="!multiline">
135
+ <slot name="actions">
136
+ <ToastAction v-for="(action, index) in actions" :key="index" :alt-text="action.label || 'Action'" as-child @click.stop>
137
+ <UButton size="xs" :color="color" v-bind="action" />
138
+ </ToastAction>
139
+ </slot>
140
+ </template>
141
+
142
+ <ToastClose as-child>
143
+ <slot name="close" :ui="ui">
144
+ <UButton
145
+ v-if="close"
146
+ :icon="closeIcon || appConfig.ui.icons.close"
147
+ size="md"
148
+ color="gray"
149
+ variant="link"
150
+ aria-label="Close"
151
+ v-bind="typeof close === 'object' ? close : undefined"
152
+ :class="ui.close({ class: props.ui?.close })"
153
+ @click.stop
154
+ />
155
+ </slot>
156
+ </ToastClose>
157
+ </div>
158
+
159
+ <div v-if="remaining > 0 && duration" :class="ui.progress({ class: props.ui?.progress })" :style="{ width: `${remaining / duration * 100}%` }" />
160
+ </ToastRoot>
161
+ </template>