@nuxt/ui 3.0.0-alpha.7 → 3.0.0-alpha.8

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 (243) hide show
  1. package/.nuxt/ui/accordion.ts +20 -0
  2. package/.nuxt/ui/alert.ts +242 -0
  3. package/.nuxt/ui/avatar-group.ts +40 -0
  4. package/.nuxt/ui/avatar.ts +42 -0
  5. package/.nuxt/ui/badge.ts +194 -0
  6. package/.nuxt/ui/breadcrumb.ts +45 -0
  7. package/.nuxt/ui/button-group.ts +16 -0
  8. package/.nuxt/ui/button.ts +344 -0
  9. package/.nuxt/ui/card.ts +8 -0
  10. package/.nuxt/ui/carousel.ts +41 -0
  11. package/.nuxt/ui/checkbox.ts +105 -0
  12. package/.nuxt/ui/chip.ts +67 -0
  13. package/.nuxt/ui/collapsible.ts +6 -0
  14. package/.nuxt/ui/command-palette.ts +40 -0
  15. package/.nuxt/ui/container.ts +3 -0
  16. package/.nuxt/ui/context-menu.ts +198 -0
  17. package/.nuxt/ui/drawer.ts +55 -0
  18. package/.nuxt/ui/dropdown-menu.ts +199 -0
  19. package/.nuxt/ui/form-field.ts +40 -0
  20. package/.nuxt/ui/form.ts +3 -0
  21. package/.nuxt/ui/index.ts +43 -0
  22. package/.nuxt/ui/input-menu.ts +411 -0
  23. package/.nuxt/ui/input.ts +263 -0
  24. package/.nuxt/ui/kbd.ts +19 -0
  25. package/.nuxt/ui/link.ts +15 -0
  26. package/.nuxt/ui/modal.ts +28 -0
  27. package/.nuxt/ui/navigation-menu.ts +390 -0
  28. package/.nuxt/ui/pagination.ts +8 -0
  29. package/.nuxt/ui/popover.ts +6 -0
  30. package/.nuxt/ui/progress.ts +258 -0
  31. package/.nuxt/ui/radio-group.ts +112 -0
  32. package/.nuxt/ui/select-menu.ts +321 -0
  33. package/.nuxt/ui/select.ts +314 -0
  34. package/.nuxt/ui/separator.ts +143 -0
  35. package/.nuxt/ui/skeleton.ts +3 -0
  36. package/.nuxt/ui/slideover.ts +63 -0
  37. package/.nuxt/ui/slider.ts +148 -0
  38. package/.nuxt/ui/switch.ts +113 -0
  39. package/.nuxt/ui/table.ts +128 -0
  40. package/.nuxt/ui/tabs.ts +227 -0
  41. package/.nuxt/ui/textarea.ts +263 -0
  42. package/.nuxt/ui/toast.ts +66 -0
  43. package/.nuxt/ui/toaster.ts +75 -0
  44. package/.nuxt/ui/tooltip.ts +9 -0
  45. package/cli/templates.mjs +1 -1
  46. package/dist/chunks/component-meta.cjs +73264 -0
  47. package/dist/chunks/component-meta.mjs +73262 -0
  48. package/dist/client/devtools/200.html +1 -0
  49. package/dist/client/devtools/404.html +1 -0
  50. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKK58UfivUw4aw-SK92LTmKP0.woff2 +0 -0
  51. package/dist/client/devtools/_fonts/rP2Wp2ywxg089UriCZaSExd86J3t9jz86MvyyKy58UfivUw-9uYm8d48E4.woff2 +0 -0
  52. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg-VNw7NHvqnp.woff2 +0 -0
  53. package/dist/client/devtools/_fonts/rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0-EkYdMs3MAX.woff2 +0 -0
  54. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-7DW3w-R7n06NbhGy.woff +0 -0
  55. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDG3w-leGNfkTmsj.woff +0 -0
  56. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat-JDW3w-ciElMF03ku.woff +0 -0
  57. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JCm3w-sB722Uoa0f.woff +0 -0
  58. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8JDW3w-PBDI1JDjwV.woff +0 -0
  59. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat8gCm3w-0q1hqVn09O.woff +0 -0
  60. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9XCm3w-ByvzuLy2fa.woff +0 -0
  61. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat9uCm3w-5TKCIs6EEw.woff +0 -0
  62. package/dist/client/devtools/_fonts/rP2rp2ywxg089UriCZaSExd86J3t9jz86Mvy4qCRAL19DksVat_XDW3w-r2swRDGfn2.woff +0 -0
  63. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAC5thTQ-ldB60l5U8r.woff +0 -0
  64. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpthTQ-wbFKGFDrgo.woff +0 -0
  65. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAIpxhTQ-LLUBv5jskj.woff +0 -0
  66. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwARZthTQ-F71RdTRbNg.woff +0 -0
  67. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwA_JxhTQ-6nh65gZkc0.woff +0 -0
  68. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAfJthTQ-aMoWEJLmTt.woff +0 -0
  69. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAkJxhTQ-WMBvmLOgKm.woff +0 -0
  70. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAop1hTQ-utGC2hnWq2.woff +0 -0
  71. package/dist/client/devtools/_fonts/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxhTQ-YpyTieVa5B.woff +0 -0
  72. package/dist/client/devtools/_nuxt/Bj9hdafK.js +1 -0
  73. package/dist/client/devtools/_nuxt/DM3_wAgz.js +62 -0
  74. package/dist/client/devtools/_nuxt/builds/latest.json +1 -0
  75. package/dist/client/devtools/_nuxt/builds/meta/e6b425f7-b919-4014-915b-0ea07c316790.json +1 -0
  76. package/dist/client/devtools/_nuxt/entry.DaJP-ZMB.css +24 -0
  77. package/dist/client/devtools/_nuxt/error-404.B0Nmv3fV.css +1 -0
  78. package/dist/client/devtools/_nuxt/error-500.C8fgTxVz.css +1 -0
  79. package/dist/client/devtools/_nuxt/hKiujHsR.js +1 -0
  80. package/dist/client/devtools/favicon.svg +1 -0
  81. package/dist/client/devtools/index.html +1 -0
  82. package/dist/devtools/runtime/DevtoolsRenderer.vue +53 -0
  83. package/dist/devtools/runtime/examples/AvatarGroupExample.vue +7 -0
  84. package/dist/devtools/runtime/examples/ButtonGroupExample.vue +8 -0
  85. package/dist/devtools/runtime/examples/CardExample.vue +13 -0
  86. package/dist/devtools/runtime/examples/CarouselExample.vue +13 -0
  87. package/dist/devtools/runtime/examples/ChipExample.vue +5 -0
  88. package/dist/devtools/runtime/examples/CollapsibleExample.vue +8 -0
  89. package/dist/devtools/runtime/examples/CommandPaletteExample.vue +29 -0
  90. package/dist/devtools/runtime/examples/ContainerExample.vue +5 -0
  91. package/dist/devtools/runtime/examples/ContextMenuExample.vue +5 -0
  92. package/dist/devtools/runtime/examples/DrawerExample.vue +8 -0
  93. package/dist/devtools/runtime/examples/DropdownMenuExample.vue +5 -0
  94. package/dist/devtools/runtime/examples/FormExample.vue +30 -0
  95. package/dist/devtools/runtime/examples/FormFieldExample.vue +5 -0
  96. package/dist/devtools/runtime/examples/LinkExample.vue +5 -0
  97. package/dist/devtools/runtime/examples/ModalExample.vue +8 -0
  98. package/dist/devtools/runtime/examples/PopoverExample.vue +8 -0
  99. package/dist/devtools/runtime/examples/SkeletonExample.vue +3 -0
  100. package/dist/devtools/runtime/examples/SlideoverExample.vue +8 -0
  101. package/dist/devtools/runtime/examples/ToasterExample.vue +11 -0
  102. package/dist/devtools/runtime/examples/TooltipExample.vue +5 -0
  103. package/dist/module.cjs +222 -4
  104. package/dist/module.d.cts +54 -0
  105. package/dist/module.d.mts +10 -0
  106. package/dist/module.d.ts +10 -0
  107. package/dist/module.json +1 -1
  108. package/dist/module.mjs +157 -2763
  109. package/dist/runtime/components/Accordion.vue +32 -1
  110. package/dist/runtime/components/Alert.vue +4 -0
  111. package/dist/runtime/components/App.vue +8 -0
  112. package/dist/runtime/components/Avatar.vue +23 -5
  113. package/dist/runtime/components/AvatarGroup.vue +3 -0
  114. package/dist/runtime/components/Badge.vue +33 -3
  115. package/dist/runtime/components/Breadcrumb.vue +25 -1
  116. package/dist/runtime/components/Button.vue +6 -1
  117. package/dist/runtime/components/ButtonGroup.vue +4 -1
  118. package/dist/runtime/components/Card.vue +3 -0
  119. package/dist/runtime/components/Carousel.vue +7 -2
  120. package/dist/runtime/components/Checkbox.vue +4 -0
  121. package/dist/runtime/components/Chip.vue +9 -2
  122. package/dist/runtime/components/Collapsible.vue +3 -0
  123. package/dist/runtime/components/CommandPalette.vue +3 -1
  124. package/dist/runtime/components/Container.vue +3 -0
  125. package/dist/runtime/components/ContextMenu.vue +64 -3
  126. package/dist/runtime/components/ContextMenuContent.vue +8 -8
  127. package/dist/runtime/components/Drawer.vue +3 -0
  128. package/dist/runtime/components/DropdownMenu.vue +52 -3
  129. package/dist/runtime/components/DropdownMenuContent.vue +8 -8
  130. package/dist/runtime/components/Form.vue +3 -0
  131. package/dist/runtime/components/FormField.vue +3 -0
  132. package/dist/runtime/components/Input.vue +1 -0
  133. package/dist/runtime/components/InputMenu.vue +23 -12
  134. package/dist/runtime/components/Kbd.vue +2 -0
  135. package/dist/runtime/components/Link.vue +50 -1
  136. package/dist/runtime/components/Modal.vue +3 -0
  137. package/dist/runtime/components/NavigationMenu.vue +91 -44
  138. package/dist/runtime/components/Pagination.vue +5 -1
  139. package/dist/runtime/components/Popover.vue +3 -0
  140. package/dist/runtime/components/Progress.vue +1 -1
  141. package/dist/runtime/components/RadioGroup.vue +4 -1
  142. package/dist/runtime/components/Select.vue +24 -13
  143. package/dist/runtime/components/SelectMenu.vue +29 -17
  144. package/dist/runtime/components/Separator.vue +1 -1
  145. package/dist/runtime/components/Skeleton.vue +3 -0
  146. package/dist/runtime/components/Slideover.vue +3 -0
  147. package/dist/runtime/components/Slider.vue +1 -1
  148. package/dist/runtime/components/Switch.vue +5 -1
  149. package/dist/runtime/components/Table.vue +16 -7
  150. package/dist/runtime/components/Tabs.vue +20 -1
  151. package/dist/runtime/components/Toast.vue +4 -0
  152. package/dist/runtime/components/Toaster.vue +7 -0
  153. package/dist/runtime/components/Tooltip.vue +3 -0
  154. package/dist/runtime/composables/defineShortcuts.js +0 -6
  155. package/dist/runtime/composables/extendDevtoolsMeta.d.ts +7 -0
  156. package/dist/runtime/composables/extendDevtoolsMeta.js +2 -0
  157. package/dist/runtime/composables/useKbd.d.ts +10 -3
  158. package/dist/runtime/composables/useKbd.js +14 -8
  159. package/dist/runtime/types/utils.d.ts +7 -0
  160. package/dist/runtime/utils/index.js +1 -1
  161. package/dist/runtime/utils/link.d.ts +1 -1
  162. package/dist/runtime/vue/components/Icon.vue +15 -0
  163. package/dist/runtime/vue/components/Link.vue +195 -0
  164. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  165. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  166. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  167. package/dist/runtime/vue/plugins/head.js +6 -0
  168. package/dist/runtime/vue/stubs.d.ts +15 -0
  169. package/dist/runtime/vue/stubs.js +27 -0
  170. package/dist/shared/ui.BU7wzH0D.cjs +2872 -0
  171. package/dist/shared/ui.BufKhDiD.mjs +2865 -0
  172. package/dist/unplugin.cjs +192 -0
  173. package/dist/unplugin.d.cts +47 -0
  174. package/dist/unplugin.d.mts +47 -0
  175. package/dist/unplugin.d.ts +47 -0
  176. package/dist/unplugin.mjs +181 -0
  177. package/dist/vite.cjs +22 -0
  178. package/dist/vite.d.cts +13 -0
  179. package/dist/vite.d.mts +13 -0
  180. package/dist/vite.d.ts +13 -0
  181. package/dist/vite.mjs +20 -0
  182. package/package.json +68 -30
  183. package/vue-plugin.d.ts +5 -0
  184. package/cli/node_modules/.ignored/citty/LICENSE +0 -36
  185. package/cli/node_modules/.ignored/citty/README.md +0 -134
  186. package/cli/node_modules/.ignored/citty/dist/index.cjs +0 -475
  187. package/cli/node_modules/.ignored/citty/dist/index.d.cts +0 -80
  188. package/cli/node_modules/.ignored/citty/dist/index.d.mts +0 -80
  189. package/cli/node_modules/.ignored/citty/dist/index.d.ts +0 -80
  190. package/cli/node_modules/.ignored/citty/dist/index.mjs +0 -463
  191. package/cli/node_modules/.ignored/citty/package.json +0 -49
  192. package/cli/node_modules/.ignored/consola/LICENSE +0 -47
  193. package/cli/node_modules/.ignored/consola/README.md +0 -318
  194. package/cli/node_modules/.ignored/consola/core.d.ts +0 -1
  195. package/cli/node_modules/.ignored/consola/dist/basic.cjs +0 -32
  196. package/cli/node_modules/.ignored/consola/dist/basic.d.ts +0 -9
  197. package/cli/node_modules/.ignored/consola/dist/basic.mjs +0 -24
  198. package/cli/node_modules/.ignored/consola/dist/browser.cjs +0 -80
  199. package/cli/node_modules/.ignored/consola/dist/browser.d.ts +0 -7
  200. package/cli/node_modules/.ignored/consola/dist/browser.mjs +0 -72
  201. package/cli/node_modules/.ignored/consola/dist/chunks/prompt.cjs +0 -436
  202. package/cli/node_modules/.ignored/consola/dist/chunks/prompt.mjs +0 -429
  203. package/cli/node_modules/.ignored/consola/dist/core.cjs +0 -415
  204. package/cli/node_modules/.ignored/consola/dist/core.d.ts +0 -124
  205. package/cli/node_modules/.ignored/consola/dist/core.mjs +0 -410
  206. package/cli/node_modules/.ignored/consola/dist/index.cjs +0 -21
  207. package/cli/node_modules/.ignored/consola/dist/index.d.ts +0 -9
  208. package/cli/node_modules/.ignored/consola/dist/index.mjs +0 -8
  209. package/cli/node_modules/.ignored/consola/dist/shared/consola.06ad8a64.mjs +0 -62
  210. package/cli/node_modules/.ignored/consola/dist/shared/consola.36c0034f.mjs +0 -636
  211. package/cli/node_modules/.ignored/consola/dist/shared/consola.4bbae468.cjs +0 -645
  212. package/cli/node_modules/.ignored/consola/dist/shared/consola.deac7d5a.cjs +0 -65
  213. package/cli/node_modules/.ignored/consola/dist/utils.cjs +0 -308
  214. package/cli/node_modules/.ignored/consola/dist/utils.d.ts +0 -169
  215. package/cli/node_modules/.ignored/consola/dist/utils.mjs +0 -284
  216. package/cli/node_modules/.ignored/consola/lib/index.cjs +0 -9
  217. package/cli/node_modules/.ignored/consola/package.json +0 -101
  218. package/cli/node_modules/.ignored/consola/utils.d.ts +0 -1
  219. package/cli/node_modules/.ignored/pathe/LICENSE +0 -44
  220. package/cli/node_modules/.ignored/pathe/README.md +0 -69
  221. package/cli/node_modules/.ignored/pathe/dist/index.cjs +0 -23
  222. package/cli/node_modules/.ignored/pathe/dist/index.d.cts +0 -36
  223. package/cli/node_modules/.ignored/pathe/dist/index.d.mts +0 -36
  224. package/cli/node_modules/.ignored/pathe/dist/index.d.ts +0 -36
  225. package/cli/node_modules/.ignored/pathe/dist/index.mjs +0 -1
  226. package/cli/node_modules/.ignored/pathe/dist/shared/pathe.1f0a373c.cjs +0 -238
  227. package/cli/node_modules/.ignored/pathe/dist/shared/pathe.ff20891b.mjs +0 -221
  228. package/cli/node_modules/.ignored/pathe/dist/utils.cjs +0 -58
  229. package/cli/node_modules/.ignored/pathe/dist/utils.d.cts +0 -5
  230. package/cli/node_modules/.ignored/pathe/dist/utils.d.mts +0 -5
  231. package/cli/node_modules/.ignored/pathe/dist/utils.d.ts +0 -5
  232. package/cli/node_modules/.ignored/pathe/dist/utils.mjs +0 -54
  233. package/cli/node_modules/.ignored/pathe/package.json +0 -48
  234. package/cli/node_modules/.ignored/pathe/utils.d.ts +0 -1
  235. package/cli/node_modules/.ignored/scule/LICENSE +0 -21
  236. package/cli/node_modules/.ignored/scule/README.md +0 -149
  237. package/cli/node_modules/.ignored/scule/dist/index.cjs +0 -92
  238. package/cli/node_modules/.ignored/scule/dist/index.d.cts +0 -57
  239. package/cli/node_modules/.ignored/scule/dist/index.d.mts +0 -57
  240. package/cli/node_modules/.ignored/scule/dist/index.d.ts +0 -57
  241. package/cli/node_modules/.ignored/scule/dist/index.mjs +0 -80
  242. package/cli/node_modules/.ignored/scule/package.json +0 -43
  243. package/cli/node_modules/.package-lock.json +0 -33
@@ -4,6 +4,7 @@ import type { SwitchRootProps } from 'radix-vue'
4
4
  import type { AppConfig } from '@nuxt/schema'
5
5
  import _appConfig from '#build/app.config'
6
6
  import theme from '#build/ui/switch'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
8
  import type { PartialString } from '../types/utils'
8
9
 
9
10
  const appConfig = _appConfig as AppConfig & { ui: { switch: Partial<typeof theme> } }
@@ -15,7 +16,7 @@ type SwitchVariants = VariantProps<typeof switchTv>
15
16
  export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | 'name' | 'required' | 'value'> {
16
17
  /**
17
18
  * The element or component this component should render as.
18
- * @defaultValue `div`
19
+ * @defaultValue 'div'
19
20
  */
20
21
  as?: any
21
22
  color?: SwitchVariants['color']
@@ -48,6 +49,8 @@ export interface SwitchSlots {
48
49
  label(props: { label?: string }): any
49
50
  description(props: { description?: string }): any
50
51
  }
52
+
53
+ extendDevtoolsMeta({ defaultProps: { label: 'Switch me!' } })
51
54
  </script>
52
55
 
53
56
  <script setup lang="ts">
@@ -56,6 +59,7 @@ import { SwitchRoot, SwitchThumb, useForwardProps, Label } from 'radix-vue'
56
59
  import { reactivePick } from '@vueuse/core'
57
60
  import { useAppConfig } from '#imports'
58
61
  import { useFormField } from '../composables/useFormField'
62
+ import UIcon from './Icon.vue'
59
63
 
60
64
  const props = defineProps<SwitchProps>()
61
65
  const slots = defineSlots<SwitchSlots>()
@@ -19,7 +19,9 @@ import type {
19
19
  ExpandedOptions,
20
20
  SortingOptions,
21
21
  RowSelectionOptions,
22
- Updater
22
+ Updater,
23
+ CellContext,
24
+ HeaderContext
23
25
  } from '@tanstack/vue-table'
24
26
  import _appConfig from '#build/app.config'
25
27
  import theme from '#build/ui/table'
@@ -87,10 +89,13 @@ export interface TableProps<T> {
87
89
  ui?: Partial<typeof table.slots>
88
90
  }
89
91
 
90
- export interface TableSlots<T> {
91
- expanded(props: { row: Row<T> }): any
92
- empty(props?: {}): any
93
- }
92
+ type DynamicHeaderSlots<T, K = keyof T> = Record<string, (props: HeaderContext<T, unknown>) => any> & Record<`${K extends string ? K : never}-header`, (props: HeaderContext<T, unknown>) => any>
93
+ type DynamicCellSlots<T, K = keyof T> = Record<string, (props: CellContext<T, unknown>) => any> & Record<`${K extends string ? K : never}-cell`, (props: CellContext<T, unknown>) => any>
94
+
95
+ export type TableSlots<T> = {
96
+ expanded: (props: { row: Row<T> }) => any
97
+ empty: (props?: {}) => any
98
+ } & DynamicHeaderSlots<T> & DynamicCellSlots<T>
94
99
 
95
100
  </script>
96
101
 
@@ -193,7 +198,9 @@ defineExpose({
193
198
  :data-pinned="header.column.getIsPinned()"
194
199
  :class="ui.th({ class: [props.ui?.th], pinned: !!header.column.getIsPinned() })"
195
200
  >
196
- <FlexRender v-if="!header.isPlaceholder" :render="header.column.columnDef.header" :props="header.getContext()" />
201
+ <slot :name="`${header.id}-header`" v-bind="header.getContext()">
202
+ <FlexRender v-if="!header.isPlaceholder" :render="header.column.columnDef.header" :props="header.getContext()" />
203
+ </slot>
197
204
  </th>
198
205
  </tr>
199
206
  </thead>
@@ -208,7 +215,9 @@ defineExpose({
208
215
  :data-pinned="cell.column.getIsPinned()"
209
216
  :class="ui.td({ class: [props.ui?.td], pinned: !!cell.column.getIsPinned() })"
210
217
  >
211
- <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
218
+ <slot :name="`${cell.column.id}-cell`" v-bind="cell.getContext()">
219
+ <FlexRender :render="cell.column.columnDef.cell" :props="cell.getContext()" />
220
+ </slot>
212
221
  </td>
213
222
  </tr>
214
223
  <tr v-if="row.getIsExpanded()" :class="ui.tr({ class: [props.ui?.tr] })">
@@ -1,10 +1,10 @@
1
- <!-- eslint-disable vue/block-tag-newline -->
2
1
  <script lang="ts">
3
2
  import { tv, type VariantProps } from 'tailwind-variants'
4
3
  import type { TabsRootProps, TabsRootEmits, TabsContentProps } from 'radix-vue'
5
4
  import type { AppConfig } from '@nuxt/schema'
6
5
  import _appConfig from '#build/app.config'
7
6
  import theme from '#build/ui/tabs'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
8
8
  import type { AvatarProps } from '../types'
9
9
  import type { DynamicSlots, PartialString } from '../types/utils'
10
10
 
@@ -65,6 +65,23 @@ export type TabsSlots<T extends { slot?: string }> = {
65
65
  content: SlotProps<T>
66
66
  } & DynamicSlots<T, SlotProps<T>>
67
67
 
68
+ extendDevtoolsMeta({
69
+ defaultProps: {
70
+ items: [{
71
+ label: 'Tab1',
72
+ avatar: { src: 'https://avatars.githubusercontent.com/u/739984?v=4' },
73
+ content: 'This is the content shown for Tab1'
74
+ }, {
75
+ label: 'Tab2',
76
+ icon: 'i-lucide-user',
77
+ content: 'And, this is the content for Tab2'
78
+ }, {
79
+ label: 'Tab3',
80
+ icon: 'i-lucide-bell',
81
+ content: 'Finally, this is the content for Tab3'
82
+ }]
83
+ }
84
+ })
68
85
  </script>
69
86
 
70
87
  <script setup lang="ts" generic="T extends TabsItem">
@@ -73,6 +90,8 @@ import { defu } from 'defu'
73
90
  import { TabsRoot, TabsList, TabsIndicator, TabsTrigger, TabsContent, useForwardPropsEmits } from 'radix-vue'
74
91
  import { reactivePick } from '@vueuse/core'
75
92
  import { get } from '../utils'
93
+ import UIcon from './Icon.vue'
94
+ import UAvatar from './Avatar.vue'
76
95
 
77
96
  const props = withDefaults(defineProps<TabsProps<T>>(), {
78
97
  content: true,
@@ -4,6 +4,7 @@ import type { ToastRootProps, ToastRootEmits } from 'radix-vue'
4
4
  import type { AppConfig } from '@nuxt/schema'
5
5
  import _appConfig from '#build/app.config'
6
6
  import theme from '#build/ui/toast'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
8
  import type { AvatarProps, ButtonProps } from '../types'
8
9
 
9
10
  const appConfig = _appConfig as AppConfig & { ui: { toast: Partial<typeof theme> } }
@@ -53,6 +54,8 @@ export interface ToastSlots {
53
54
  actions(props?: {}): any
54
55
  close(props: { ui: any }): any
55
56
  }
57
+
58
+ extendDevtoolsMeta<ToastProps>({ ignore: true })
56
59
  </script>
57
60
 
58
61
  <script setup lang="ts">
@@ -62,6 +65,7 @@ import { reactivePick } from '@vueuse/core'
62
65
  import { useAppConfig } from '#imports'
63
66
  import UIcon from './Icon.vue'
64
67
  import UAvatar from './Avatar.vue'
68
+ import UButton from './Button.vue'
65
69
 
66
70
  const props = withDefaults(defineProps<ToastProps>(), {
67
71
  close: true
@@ -4,6 +4,7 @@ import type { ToastProviderProps } from 'radix-vue'
4
4
  import type { AppConfig } from '@nuxt/schema'
5
5
  import _appConfig from '#build/app.config'
6
6
  import theme from '#build/ui/toaster'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
8
 
8
9
  const appConfig = _appConfig as AppConfig & { ui: { toaster: Partial<typeof theme> } }
9
10
 
@@ -25,6 +26,12 @@ export interface ToasterProps extends Omit<ToastProviderProps, 'swipeDirection'>
25
26
  export interface ToasterSlots {
26
27
  default(props?: {}): any
27
28
  }
29
+
30
+ export default {
31
+ name: 'Toaster'
32
+ }
33
+
34
+ extendDevtoolsMeta({ example: 'ToasterExample' })
28
35
  </script>
29
36
 
30
37
  <script setup lang="ts">
@@ -4,6 +4,7 @@ import type { TooltipRootProps, TooltipRootEmits, TooltipContentProps, TooltipAr
4
4
  import type { AppConfig } from '@nuxt/schema'
5
5
  import _appConfig from '#build/app.config'
6
6
  import theme from '#build/ui/tooltip'
7
+ import { extendDevtoolsMeta } from '../composables/extendDevtoolsMeta'
7
8
  import type { KbdProps } from '../types'
8
9
 
9
10
  const appConfig = _appConfig as AppConfig & { ui: { tooltip: Partial<typeof theme> } }
@@ -40,6 +41,8 @@ export interface TooltipSlots {
40
41
  default(props: { open: boolean }): any
41
42
  content(props?: {}): any
42
43
  }
44
+
45
+ extendDevtoolsMeta({ example: 'TooltipExample', defaultProps: { text: 'Hello world!' } })
43
46
  </script>
44
47
 
45
48
  <script setup lang="ts">
@@ -1,6 +1,5 @@
1
1
  import { ref, computed, toValue } from "vue";
2
2
  import { useEventListener, useActiveElement, useDebounceFn } from "@vueuse/core";
3
- import { useKbd } from "../composables/useKbd.js";
4
3
  const chainedShortcutRegex = /^[^-]+.*-.*[^-]+$/;
5
4
  const combinedShortcutRegex = /^[^_]+.*_.*[^_]+$/;
6
5
  export function extractShortcuts(items) {
@@ -28,7 +27,6 @@ export function defineShortcuts(config, options = {}) {
28
27
  chainedInputs.value.splice(0, chainedInputs.value.length);
29
28
  };
30
29
  const debouncedClearChainedInput = useDebounceFn(clearChainedInput, options.chainDelay ?? 800);
31
- const { macOS } = useKbd();
32
30
  const activeElement = useActiveElement();
33
31
  const onKeyDown = (e) => {
34
32
  if (!e.key) {
@@ -114,10 +112,6 @@ export function defineShortcuts(config, options = {}) {
114
112
  };
115
113
  }
116
114
  shortcut.chained = chained;
117
- if (!macOS.value && shortcut.metaKey && !shortcut.ctrlKey) {
118
- shortcut.metaKey = false;
119
- shortcut.ctrlKey = true;
120
- }
121
115
  if (typeof shortcutConfig === "function") {
122
116
  shortcut.handler = shortcutConfig;
123
117
  } else if (typeof shortcutConfig === "object") {
@@ -0,0 +1,7 @@
1
+ export type DevtoolsMeta<T> = {
2
+ defaultProps?: T;
3
+ example?: string;
4
+ ignore?: boolean;
5
+ ignoreProps?: string[];
6
+ };
7
+ export declare function extendDevtoolsMeta<T>(_meta: DevtoolsMeta<T>): void;
@@ -0,0 +1,2 @@
1
+ export function extendDevtoolsMeta(_meta) {
2
+ }
@@ -1,10 +1,16 @@
1
+ type KbdKeysSpecificMap = {
2
+ meta: string;
3
+ alt: string;
4
+ ctrl: string;
5
+ };
1
6
  export declare const kbdKeysMap: {
2
7
  meta: string;
8
+ ctrl: string;
9
+ alt: string;
10
+ win: string;
3
11
  command: string;
4
12
  shift: string;
5
- ctrl: string;
6
13
  option: string;
7
- alt: string;
8
14
  enter: string;
9
15
  delete: string;
10
16
  backspace: string;
@@ -21,8 +27,9 @@ export declare const kbdKeysMap: {
21
27
  end: string;
22
28
  };
23
29
  export type KbdKey = keyof typeof kbdKeysMap;
30
+ export type KbdKeySpecific = keyof KbdKeysSpecificMap;
24
31
  export declare const useKbd: () => {
25
32
  macOS: import("vue").ComputedRef<false | "" | RegExpMatchArray | null | undefined>;
26
- metaSymbol: import("vue").Ref<string, string>;
27
33
  getKbdKey: (value?: KbdKey | string) => string | undefined;
28
34
  };
35
+ export {};
@@ -1,12 +1,13 @@
1
+ import { reactive, computed, onMounted } from "vue";
1
2
  import { createSharedComposable } from "@vueuse/core";
2
- import { ref, computed, onMounted } from "vue";
3
3
  export const kbdKeysMap = {
4
4
  meta: "",
5
+ ctrl: "",
6
+ alt: "",
7
+ win: "\u229E",
5
8
  command: "\u2318",
6
9
  shift: "\u21E7",
7
- ctrl: "\u2303",
8
10
  option: "\u2325",
9
- alt: "\u2387",
10
11
  enter: "\u21B5",
11
12
  delete: "\u2326",
12
13
  backspace: "\u232B",
@@ -24,22 +25,27 @@ export const kbdKeysMap = {
24
25
  };
25
26
  const _useKbd = () => {
26
27
  const macOS = computed(() => import.meta.client && navigator && navigator.userAgent && navigator.userAgent.match(/Macintosh;/));
27
- const metaSymbol = ref(" ");
28
+ const kbdKeysSpecificMap = reactive({
29
+ meta: " ",
30
+ alt: " ",
31
+ ctrl: " "
32
+ });
28
33
  onMounted(() => {
29
- metaSymbol.value = macOS.value ? kbdKeysMap.command : kbdKeysMap.ctrl;
34
+ kbdKeysSpecificMap.meta = macOS.value ? kbdKeysMap.command : kbdKeysMap.win;
35
+ kbdKeysSpecificMap.alt = macOS.value ? kbdKeysMap.option : "alt";
36
+ kbdKeysSpecificMap.ctrl = macOS.value ? "\u2303" : "ctrl";
30
37
  });
31
38
  function getKbdKey(value) {
32
39
  if (!value) {
33
40
  return;
34
41
  }
35
- if (value === "meta") {
36
- return metaSymbol.value;
42
+ if (["meta", "alt", "ctrl"].includes(value)) {
43
+ return kbdKeysSpecificMap[value];
37
44
  }
38
45
  return kbdKeysMap[value] || value.toUpperCase();
39
46
  }
40
47
  return {
41
48
  macOS,
42
- metaSymbol,
43
49
  getKbdKey
44
50
  };
45
51
  };
@@ -15,3 +15,10 @@ export type ArrayOrWrapped<T> = T extends any[] ? T : Array<T>;
15
15
  export type PartialString<T> = {
16
16
  [K in keyof T]?: string;
17
17
  };
18
+ export type MaybeArrayOfArray<T> = T[] | T[][];
19
+ export type MaybeArrayOfArrayItem<I> = I extends Array<infer T> ? T extends Array<infer U> ? U : T : never;
20
+ export type SelectModelValue<T, V, M extends boolean = false, DV = T> = (T extends Record<string, any> ? V extends keyof T ? T[V] : DV : T) extends infer U ? M extends true ? U[] : U : never;
21
+ export type SelectItemKey<T> = T extends Record<string, any> ? keyof T : string;
22
+ export type SelectModelValueEmits<T, V, M extends boolean = false, DV = T> = {
23
+ 'update:modelValue': [payload: SelectModelValue<T, V, M, DV>];
24
+ };
@@ -46,5 +46,5 @@ export function looseToNumber(val) {
46
46
  return Number.isNaN(n) ? val : n;
47
47
  }
48
48
  export function escapeRegExp(string) {
49
- return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
49
+ return string.replace(/[.*+?^${}()|[\]\\]/g, (match) => `\\${match}`);
50
50
  }
@@ -3,6 +3,7 @@ export declare function pickLinkProps(link: LinkProps & {
3
3
  ariaLabel?: string;
4
4
  title?: string;
5
5
  }): {
6
+ replace: any;
6
7
  type: any;
7
8
  title: any;
8
9
  active: any;
@@ -23,7 +24,6 @@ export declare function pickLinkProps(link: LinkProps & {
23
24
  prefetch: any;
24
25
  prefetchedClass: any;
25
26
  rel: any;
26
- replace: any;
27
27
  target: any;
28
28
  to: any;
29
29
  };
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ export interface IconProps {
3
+ name: string
4
+ }
5
+ </script>
6
+
7
+ <script setup lang="ts">
8
+ import { Icon } from '@iconify/vue'
9
+
10
+ defineProps<IconProps>()
11
+ </script>
12
+
13
+ <template>
14
+ <Icon :icon="name.replace(/^i-/, '')" />
15
+ </template>
@@ -0,0 +1,195 @@
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 type { RouterLinkProps, RouteLocationRaw } from 'vue-router'
7
+ import theme from '#build/ui/link'
8
+
9
+ interface NuxtLinkProps extends Omit<RouterLinkProps, 'to'> {
10
+ /**
11
+ * Route Location the link should navigate to when clicked on.
12
+ */
13
+ to?: RouteLocationRaw // need to manually type to avoid breaking typedPages
14
+ /**
15
+ * An alias for `to`. If used with `to`, `href` will be ignored
16
+ */
17
+ href?: NuxtLinkProps['to']
18
+ /**
19
+ * Forces the link to be considered as external (true) or internal (false). This is helpful to handle edge-cases
20
+ */
21
+ external?: boolean
22
+ /**
23
+ * Where to display the linked URL, as the name for a browsing context.
24
+ */
25
+ target?: '_blank' | '_parent' | '_self' | '_top' | (string & {}) | null
26
+ /**
27
+ * A rel attribute value to apply on the link. Defaults to "noopener noreferrer" for external links.
28
+ */
29
+ rel?: 'noopener' | 'noreferrer' | 'nofollow' | 'sponsored' | 'ugc' | (string & {}) | null
30
+ /**
31
+ * If set to true, no rel attribute will be added to the link
32
+ */
33
+ noRel?: boolean
34
+ /**
35
+ * A class to apply to links that have been prefetched.
36
+ */
37
+ prefetchedClass?: string
38
+ /**
39
+ * When enabled will prefetch middleware, layouts and payloads of links in the viewport.
40
+ */
41
+ prefetch?: boolean
42
+ /**
43
+ * Allows controlling when to prefetch links. By default, prefetch is triggered only on visibility.
44
+ */
45
+ prefetchOn?: 'visibility' | 'interaction' | Partial<{
46
+ visibility: boolean
47
+ interaction: boolean
48
+ }>
49
+ /**
50
+ * Escape hatch to disable `prefetch` attribute.
51
+ */
52
+ noPrefetch?: boolean
53
+ }
54
+
55
+ const appConfig = _appConfig as AppConfig & { ui: { link: Partial<typeof theme> } }
56
+
57
+ const link = tv({ extend: tv(theme), ...(appConfig.ui?.link || {}) })
58
+
59
+ export interface LinkProps extends NuxtLinkProps {
60
+ /**
61
+ * The element or component this component should render as when not a link.
62
+ * @defaultValue 'button'
63
+ */
64
+ as?: any
65
+ /**
66
+ * The type of the button when not a link.
67
+ * @defaultValue 'button'
68
+ */
69
+ type?: ButtonHTMLAttributes['type']
70
+ disabled?: boolean
71
+ /** Force the link to be active independent of the current route. */
72
+ active?: boolean
73
+ /** Will only be active if the current route is an exact match. */
74
+ exact?: boolean
75
+ /** Will only be active if the current route query is an exact match. */
76
+ exactQuery?: boolean
77
+ /** Will only be active if the current route hash is an exact match. */
78
+ exactHash?: boolean
79
+ /** The class to apply when the link is inactive. */
80
+ inactiveClass?: string
81
+ custom?: boolean
82
+ /** When `true`, only styles from `class`, `activeClass`, and `inactiveClass` will be applied. */
83
+ raw?: boolean
84
+ class?: any
85
+ }
86
+
87
+ export interface LinkSlots {
88
+ default(props: { active: boolean }): any
89
+ }
90
+ </script>
91
+
92
+ <script setup lang="ts">
93
+ import { computed } from 'vue'
94
+ import { isEqual } from 'ohash'
95
+ import { useForwardProps } from 'radix-vue'
96
+ import { reactiveOmit } from '@vueuse/core'
97
+ import { hasProtocol } from 'ufo'
98
+ import { useRoute } from '#imports'
99
+ import { RouterLink } from 'vue-router'
100
+
101
+ defineOptions({ inheritAttrs: false })
102
+
103
+ const props = withDefaults(defineProps<LinkProps>(), {
104
+ as: 'button',
105
+ type: 'button',
106
+ active: undefined,
107
+ activeClass: '',
108
+ inactiveClass: ''
109
+ })
110
+ defineSlots<LinkSlots>()
111
+
112
+ const route = useRoute()
113
+ const routerLinkProps = useForwardProps(reactiveOmit(props, 'as', 'type', 'disabled', 'active', 'exact', 'exactQuery', 'exactHash', 'activeClass', 'inactiveClass', 'to'))
114
+
115
+ const ui = computed(() => tv({
116
+ extend: link,
117
+ variants: {
118
+ active: {
119
+ true: props.activeClass,
120
+ false: props.inactiveClass
121
+ }
122
+ }
123
+ }))
124
+
125
+ const isExternal = computed(() => typeof props.to === 'string' && hasProtocol(props.to, { acceptRelative: true }))
126
+
127
+ function isLinkActive({ route: linkRoute, isActive, isExactActive }: any) {
128
+ if (props.active !== undefined) {
129
+ return props.active
130
+ }
131
+
132
+ if (!props.to) {
133
+ return false
134
+ }
135
+
136
+ if (props.exactQuery && !isEqual(linkRoute.query, route.query)) {
137
+ return false
138
+ }
139
+ if (props.exactHash && linkRoute.hash !== route.hash) {
140
+ return false
141
+ }
142
+
143
+ if (props.exact && isExactActive) {
144
+ return true
145
+ }
146
+
147
+ if (!props.exact && isActive) {
148
+ return true
149
+ }
150
+
151
+ return false
152
+ }
153
+
154
+ function resolveLinkClass({ route, isActive, isExactActive }: any) {
155
+ const active = isLinkActive({ route, isActive, isExactActive })
156
+
157
+ if (props.raw) {
158
+ return [props.class, active ? props.activeClass : props.inactiveClass]
159
+ }
160
+
161
+ return ui.value({ class: props.class, active, disabled: props.disabled })
162
+ }
163
+ </script>
164
+
165
+ <template>
166
+ <RouterLink v-slot="{ href, navigate, route: linkRoute, isActive, isExactActive }" v-bind="routerLinkProps" :to="to || '#'" custom>
167
+ <template v-if="custom">
168
+ <slot
169
+ v-bind="{
170
+ ...$attrs,
171
+ as,
172
+ type,
173
+ disabled,
174
+ href: to ? (isExternal ? to as string : href) : undefined,
175
+ navigate,
176
+ active: isLinkActive({ route: linkRoute, isActive, isExactActive })
177
+ }"
178
+ />
179
+ </template>
180
+ <ULinkBase
181
+ v-else
182
+ v-bind="{
183
+ ...$attrs,
184
+ as,
185
+ type,
186
+ disabled,
187
+ href: to ? (isExternal ? to as string : href) : undefined,
188
+ navigate
189
+ }"
190
+ :class="resolveLinkClass({ route: linkRoute, isActive: isActive, isExactActive: isExactActive })"
191
+ >
192
+ <slot :active="isLinkActive({ route: linkRoute, isActive, isExactActive })" />
193
+ </ULinkBase>
194
+ </RouterLink>
195
+ </template>
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ install(): void;
3
+ };
4
+ export default _default;
@@ -0,0 +1,6 @@
1
+ import { useDark } from "@vueuse/core";
2
+ export default {
3
+ install() {
4
+ useDark();
5
+ }
6
+ };
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ install(app: import("vue").App<any>): void;
3
+ };
4
+ export default _default;
@@ -0,0 +1,6 @@
1
+ import { createHead } from "@unhead/vue";
2
+ export default {
3
+ install(app) {
4
+ app.use(createHead());
5
+ }
6
+ };
@@ -0,0 +1,15 @@
1
+ import type { Ref } from 'vue';
2
+ import type { NuxtApp } from '#app';
3
+ export { useHead } from '@unhead/vue';
4
+ export { useRoute, useRouter } from 'vue-router';
5
+ export declare const useAppConfig: () => any;
6
+ export declare const useState: <T>(key: string, init: () => T) => Ref<T>;
7
+ export declare function useNuxtApp(): {
8
+ isHydrating: boolean;
9
+ payload: {
10
+ serverRendered: boolean;
11
+ };
12
+ };
13
+ export declare function defineNuxtPlugin(plugin: (nuxtApp: NuxtApp) => void): {
14
+ install(app: import("vue").App<any>): void;
15
+ };
@@ -0,0 +1,27 @@
1
+ import { ref } from "vue";
2
+ import appConfig from "#build/app.config";
3
+ export { useHead } from "@unhead/vue";
4
+ export { useRoute, useRouter } from "vue-router";
5
+ export const useAppConfig = () => appConfig;
6
+ const state = {};
7
+ export const useState = (key, init) => {
8
+ if (state[key]) {
9
+ return state[key];
10
+ }
11
+ const value = ref(init());
12
+ state[key] = value;
13
+ return value;
14
+ };
15
+ export function useNuxtApp() {
16
+ return {
17
+ isHydrating: true,
18
+ payload: { serverRendered: false }
19
+ };
20
+ }
21
+ export function defineNuxtPlugin(plugin) {
22
+ return {
23
+ install(app) {
24
+ plugin({ vueApp: app });
25
+ }
26
+ };
27
+ }