@nuxt/ui 4.5.1 → 4.6.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 (183) hide show
  1. package/README.md +1 -1
  2. package/dist/module.d.mts +7 -0
  3. package/dist/module.json +2 -2
  4. package/dist/module.mjs +79 -67
  5. package/dist/runtime/components/Avatar.vue +10 -12
  6. package/dist/runtime/components/Banner.vue +1 -1
  7. package/dist/runtime/components/BlogPost.vue +3 -2
  8. package/dist/runtime/components/Calendar.d.vue.ts +4 -4
  9. package/dist/runtime/components/Calendar.vue.d.ts +4 -4
  10. package/dist/runtime/components/ChangelogVersion.vue +3 -2
  11. package/dist/runtime/components/ChangelogVersions.vue +1 -1
  12. package/dist/runtime/components/ChatMessage.d.vue.ts +4 -1
  13. package/dist/runtime/components/ChatMessage.vue +5 -0
  14. package/dist/runtime/components/ChatMessage.vue.d.ts +4 -1
  15. package/dist/runtime/components/ChatMessages.vue +14 -1
  16. package/dist/runtime/components/ChatPrompt.vue +6 -1
  17. package/dist/runtime/components/ChatReasoning.d.vue.ts +78 -0
  18. package/dist/runtime/components/ChatReasoning.vue +162 -0
  19. package/dist/runtime/components/ChatReasoning.vue.d.ts +78 -0
  20. package/dist/runtime/components/ChatShimmer.d.vue.ts +34 -0
  21. package/dist/runtime/components/ChatShimmer.vue +37 -0
  22. package/dist/runtime/components/ChatShimmer.vue.d.ts +34 -0
  23. package/dist/runtime/components/ChatTool.d.vue.ts +88 -0
  24. package/dist/runtime/components/ChatTool.vue +105 -0
  25. package/dist/runtime/components/ChatTool.vue.d.ts +88 -0
  26. package/dist/runtime/components/Checkbox.d.vue.ts +22 -19
  27. package/dist/runtime/components/Checkbox.vue +9 -8
  28. package/dist/runtime/components/Checkbox.vue.d.ts +22 -19
  29. package/dist/runtime/components/DashboardGroup.d.vue.ts +1 -1
  30. package/dist/runtime/components/DashboardGroup.vue.d.ts +1 -1
  31. package/dist/runtime/components/DashboardSearchButton.vue +2 -2
  32. package/dist/runtime/components/DashboardSidebar.vue +6 -3
  33. package/dist/runtime/components/Drawer.vue +6 -4
  34. package/dist/runtime/components/DropdownMenu.d.vue.ts +29 -3
  35. package/dist/runtime/components/DropdownMenu.vue +9 -0
  36. package/dist/runtime/components/DropdownMenu.vue.d.ts +29 -3
  37. package/dist/runtime/components/DropdownMenuContent.d.vue.ts +9 -3
  38. package/dist/runtime/components/DropdownMenuContent.vue +62 -9
  39. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +9 -3
  40. package/dist/runtime/components/EditorDragHandle.d.vue.ts +4 -4
  41. package/dist/runtime/components/EditorDragHandle.vue.d.ts +4 -4
  42. package/dist/runtime/components/Error.vue +5 -5
  43. package/dist/runtime/components/FileUpload.d.vue.ts +6 -0
  44. package/dist/runtime/components/FileUpload.vue +11 -7
  45. package/dist/runtime/components/FileUpload.vue.d.ts +6 -0
  46. package/dist/runtime/components/Icon.d.vue.ts +2 -1
  47. package/dist/runtime/components/Icon.vue +3 -3
  48. package/dist/runtime/components/Icon.vue.d.ts +2 -1
  49. package/dist/runtime/components/InputDate.d.vue.ts +4 -4
  50. package/dist/runtime/components/InputDate.vue.d.ts +4 -4
  51. package/dist/runtime/components/InputMenu.d.vue.ts +7 -1
  52. package/dist/runtime/components/InputMenu.vue +67 -48
  53. package/dist/runtime/components/InputMenu.vue.d.ts +7 -1
  54. package/dist/runtime/components/InputTime.d.vue.ts +53 -27
  55. package/dist/runtime/components/InputTime.vue +52 -27
  56. package/dist/runtime/components/InputTime.vue.d.ts +53 -27
  57. package/dist/runtime/components/Kbd.vue +1 -1
  58. package/dist/runtime/components/Modal.vue +6 -4
  59. package/dist/runtime/components/NavigationMenu.vue +1 -0
  60. package/dist/runtime/components/Popover.vue +1 -1
  61. package/dist/runtime/components/Progress.d.vue.ts +1 -1
  62. package/dist/runtime/components/Progress.vue.d.ts +1 -1
  63. package/dist/runtime/components/SelectMenu.d.vue.ts +1 -1
  64. package/dist/runtime/components/SelectMenu.vue +1 -1
  65. package/dist/runtime/components/SelectMenu.vue.d.ts +1 -1
  66. package/dist/runtime/components/Sidebar.d.vue.ts +131 -0
  67. package/dist/runtime/components/Sidebar.vue +222 -0
  68. package/dist/runtime/components/Sidebar.vue.d.ts +131 -0
  69. package/dist/runtime/components/Slideover.vue +6 -4
  70. package/dist/runtime/components/Switch.d.vue.ts +22 -19
  71. package/dist/runtime/components/Switch.vue +7 -6
  72. package/dist/runtime/components/Switch.vue.d.ts +22 -19
  73. package/dist/runtime/components/Table.d.vue.ts +1 -1
  74. package/dist/runtime/components/Table.vue +12 -4
  75. package/dist/runtime/components/Table.vue.d.ts +1 -1
  76. package/dist/runtime/components/Tooltip.d.vue.ts +2 -0
  77. package/dist/runtime/components/Tooltip.vue +3 -2
  78. package/dist/runtime/components/Tooltip.vue.d.ts +2 -0
  79. package/dist/runtime/components/color-mode/ColorModeSelect.d.vue.ts +1 -1
  80. package/dist/runtime/components/color-mode/ColorModeSelect.vue.d.ts +1 -1
  81. package/dist/runtime/components/color-mode/ColorModeSwitch.vue +3 -1
  82. package/dist/runtime/components/content/ContentNavigation.vue +9 -2
  83. package/dist/runtime/components/content/ContentSurround.vue +6 -2
  84. package/dist/runtime/components/content/ContentToc.d.vue.ts +5 -0
  85. package/dist/runtime/components/content/ContentToc.vue +57 -11
  86. package/dist/runtime/components/content/ContentToc.vue.d.ts +5 -0
  87. package/dist/runtime/components/locale/LocaleSelect.d.vue.ts +1 -1
  88. package/dist/runtime/components/locale/LocaleSelect.vue.d.ts +1 -1
  89. package/dist/runtime/components/prose/Pre.vue +0 -4
  90. package/dist/runtime/composables/index.d.ts +12 -0
  91. package/dist/runtime/composables/index.js +12 -0
  92. package/dist/runtime/composables/useEditorMenu.js +1 -1
  93. package/dist/runtime/composables/useFileUpload.d.ts +2 -2
  94. package/dist/runtime/composables/useFileUpload.js +3 -3
  95. package/dist/runtime/composables/{internal/useFilter.js → useFilter.js} +1 -1
  96. package/dist/runtime/composables/useIMEGuard.d.ts +10 -0
  97. package/dist/runtime/composables/useIMEGuard.js +22 -0
  98. package/dist/runtime/composables/useScrollShadow.d.ts +23 -0
  99. package/dist/runtime/composables/useScrollShadow.js +36 -0
  100. package/dist/runtime/index.css +1 -1
  101. package/dist/runtime/keyframes.css +1 -1
  102. package/dist/runtime/locale/ar.js +13 -0
  103. package/dist/runtime/locale/az.js +13 -0
  104. package/dist/runtime/locale/be.js +13 -0
  105. package/dist/runtime/locale/bg.js +13 -0
  106. package/dist/runtime/locale/bn.js +13 -0
  107. package/dist/runtime/locale/ca.js +13 -0
  108. package/dist/runtime/locale/ckb.js +13 -0
  109. package/dist/runtime/locale/cs.js +13 -0
  110. package/dist/runtime/locale/da.js +13 -0
  111. package/dist/runtime/locale/de.js +13 -0
  112. package/dist/runtime/locale/de_ch.js +13 -0
  113. package/dist/runtime/locale/el.js +13 -0
  114. package/dist/runtime/locale/en.js +13 -0
  115. package/dist/runtime/locale/es.js +13 -0
  116. package/dist/runtime/locale/et.js +13 -0
  117. package/dist/runtime/locale/eu.js +13 -0
  118. package/dist/runtime/locale/fa_ir.js +13 -0
  119. package/dist/runtime/locale/fi.js +13 -0
  120. package/dist/runtime/locale/fr.js +13 -0
  121. package/dist/runtime/locale/gl.js +13 -0
  122. package/dist/runtime/locale/he.js +13 -0
  123. package/dist/runtime/locale/hi.js +13 -0
  124. package/dist/runtime/locale/hr.js +13 -0
  125. package/dist/runtime/locale/hu.js +13 -0
  126. package/dist/runtime/locale/hy.js +13 -0
  127. package/dist/runtime/locale/id.js +13 -0
  128. package/dist/runtime/locale/index.d.ts +1 -0
  129. package/dist/runtime/locale/index.js +1 -0
  130. package/dist/runtime/locale/is.d.ts +3 -0
  131. package/dist/runtime/locale/is.js +142 -0
  132. package/dist/runtime/locale/it.js +13 -0
  133. package/dist/runtime/locale/ja.js +13 -0
  134. package/dist/runtime/locale/ka.js +13 -0
  135. package/dist/runtime/locale/kk.js +13 -0
  136. package/dist/runtime/locale/km.js +13 -0
  137. package/dist/runtime/locale/ko.js +13 -0
  138. package/dist/runtime/locale/ky.js +13 -0
  139. package/dist/runtime/locale/lb.js +13 -0
  140. package/dist/runtime/locale/lo.js +13 -0
  141. package/dist/runtime/locale/lt.js +13 -0
  142. package/dist/runtime/locale/mn.js +13 -0
  143. package/dist/runtime/locale/ms.js +13 -0
  144. package/dist/runtime/locale/nb_no.js +13 -0
  145. package/dist/runtime/locale/nl.js +13 -0
  146. package/dist/runtime/locale/pl.js +13 -0
  147. package/dist/runtime/locale/pt.js +13 -0
  148. package/dist/runtime/locale/pt_br.js +13 -0
  149. package/dist/runtime/locale/ro.js +13 -0
  150. package/dist/runtime/locale/ru.js +13 -0
  151. package/dist/runtime/locale/sk.js +13 -0
  152. package/dist/runtime/locale/sl.js +13 -0
  153. package/dist/runtime/locale/sq.js +13 -0
  154. package/dist/runtime/locale/sv.js +13 -0
  155. package/dist/runtime/locale/th.js +13 -0
  156. package/dist/runtime/locale/tj.js +13 -0
  157. package/dist/runtime/locale/tr.js +13 -0
  158. package/dist/runtime/locale/ug_cn.js +13 -0
  159. package/dist/runtime/locale/uk.js +13 -0
  160. package/dist/runtime/locale/ur.js +13 -0
  161. package/dist/runtime/locale/uz.js +13 -0
  162. package/dist/runtime/locale/vi.js +13 -0
  163. package/dist/runtime/locale/zh_cn.js +13 -0
  164. package/dist/runtime/locale/zh_tw.js +13 -0
  165. package/dist/runtime/types/index.d.ts +4 -0
  166. package/dist/runtime/types/index.js +4 -0
  167. package/dist/runtime/types/locale.d.ts +13 -0
  168. package/dist/runtime/utils/ai.d.ts +23 -0
  169. package/dist/runtime/utils/ai.js +16 -0
  170. package/dist/runtime/utils/editor.js +17 -5
  171. package/dist/runtime/vue/components/Icon.d.vue.ts +1 -4
  172. package/dist/runtime/vue/components/Icon.vue +28 -3
  173. package/dist/runtime/vue/components/Icon.vue.d.ts +1 -4
  174. package/dist/runtime/vue/components/color-mode/ColorModeSelect.d.vue.ts +1 -1
  175. package/dist/runtime/vue/components/color-mode/ColorModeSelect.vue.d.ts +1 -1
  176. package/dist/runtime/vue/components/color-mode/ColorModeSwitch.vue +3 -1
  177. package/dist/shared/{ui.DI_ypO2T.mjs → ui.DJUbBpE2.mjs} +298 -39
  178. package/dist/unplugin.d.mts +15 -5
  179. package/dist/unplugin.mjs +53 -30
  180. package/dist/vite.d.mts +1 -0
  181. package/dist/vite.mjs +1 -1
  182. package/package.json +50 -47
  183. /package/dist/runtime/composables/{internal/useFilter.d.ts → useFilter.d.ts} +0 -0
@@ -0,0 +1,131 @@
1
+ import type { VNode } from 'vue';
2
+ import type { AppConfig } from '@nuxt/schema';
3
+ import theme from '#build/ui/sidebar';
4
+ import type { ButtonProps, DrawerProps, IconProps, ModalProps, SlideoverProps, LinkPropsKeys } from '../types';
5
+ import type { ComponentConfig } from '../types/tv';
6
+ type Sidebar = ComponentConfig<typeof theme, AppConfig, 'sidebar'>;
7
+ type SidebarState = 'expanded' | 'collapsed';
8
+ type SidebarMode = 'modal' | 'slideover' | 'drawer';
9
+ type SidebarMenu<T> = T extends 'modal' ? ModalProps : T extends 'slideover' ? SlideoverProps : T extends 'drawer' ? DrawerProps : never;
10
+ export interface SidebarProps<T extends SidebarMode = SidebarMode> {
11
+ /**
12
+ * The element or component this component should render as.
13
+ * @defaultValue 'aside'
14
+ */
15
+ as?: any;
16
+ /**
17
+ * The visual variant of the sidebar.
18
+ * @defaultValue 'sidebar'
19
+ */
20
+ variant?: Sidebar['variants']['variant'];
21
+ /**
22
+ * The collapse behavior of the sidebar.
23
+ * - `offcanvas`: The sidebar slides out of view completely.
24
+ * - `icon`: The sidebar shrinks to icon-only width.
25
+ * - `none`: The sidebar is not collapsible.
26
+ * @defaultValue 'offcanvas'
27
+ */
28
+ collapsible?: Sidebar['variants']['collapsible'];
29
+ /**
30
+ * The side to render the sidebar on.
31
+ * @defaultValue 'left'
32
+ */
33
+ side?: Sidebar['variants']['side'];
34
+ /**
35
+ * The title displayed in the sidebar header.
36
+ */
37
+ title?: string;
38
+ /**
39
+ * The description displayed in the sidebar header.
40
+ */
41
+ description?: string;
42
+ /**
43
+ * Display a close button to collapse the sidebar.
44
+ * Only renders when `collapsible` is not `none`.
45
+ * `{ size: 'md', color: 'neutral', variant: 'ghost' }`{lang="ts-type"}
46
+ * @defaultValue false
47
+ */
48
+ close?: boolean | Omit<ButtonProps, LinkPropsKeys>;
49
+ /**
50
+ * The icon displayed in the close button.
51
+ * @defaultValue appConfig.ui.icons.close
52
+ * @IconifyIcon
53
+ */
54
+ closeIcon?: IconProps['name'];
55
+ /**
56
+ * Display a rail on the sidebar edge to toggle collapse.
57
+ * Only renders when `collapsible` is not `none`.
58
+ * @defaultValue false
59
+ */
60
+ rail?: boolean;
61
+ /**
62
+ * The mode of the sidebar menu on mobile.
63
+ * @defaultValue 'slideover'
64
+ */
65
+ mode?: T;
66
+ /**
67
+ * The props for the sidebar menu component on mobile.
68
+ */
69
+ menu?: SidebarMenu<T>;
70
+ class?: any;
71
+ ui?: Sidebar['slots'];
72
+ }
73
+ export interface SidebarSlots {
74
+ header?(props: {
75
+ state: SidebarState;
76
+ open: boolean;
77
+ close: () => void;
78
+ }): VNode[];
79
+ title?(props: {
80
+ state: SidebarState;
81
+ }): VNode[];
82
+ description?(props: {
83
+ state: SidebarState;
84
+ }): VNode[];
85
+ actions?(props: {
86
+ state: SidebarState;
87
+ }): VNode[];
88
+ close?(props: {
89
+ ui: Sidebar['ui'];
90
+ state: SidebarState;
91
+ }): VNode[];
92
+ default?(props: {
93
+ state: SidebarState;
94
+ open: boolean;
95
+ close: () => void;
96
+ }): VNode[];
97
+ footer?(props: {
98
+ state: SidebarState;
99
+ open: boolean;
100
+ close: () => void;
101
+ }): VNode[];
102
+ rail?(props: {
103
+ ui: Sidebar['ui'];
104
+ state: SidebarState;
105
+ }): VNode[];
106
+ content?(props: {
107
+ close: () => void;
108
+ }): VNode[];
109
+ }
110
+ declare const _default: typeof __VLS_export;
111
+ export default _default;
112
+ declare const __VLS_export: <T extends SidebarMode>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
113
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<(SidebarProps<T> & {
114
+ open?: boolean;
115
+ }) & {
116
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
117
+ }> & (typeof globalThis extends {
118
+ __VLS_PROPS_FALLBACK: infer P;
119
+ } ? P : {});
120
+ expose: (exposed: {}) => void;
121
+ attrs: any;
122
+ slots: SidebarSlots;
123
+ emit: (event: "update:open", value: boolean) => void;
124
+ }>) => import("vue").VNode & {
125
+ __ctx?: Awaited<typeof __VLS_setup>;
126
+ };
127
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
128
+ [K in keyof T]: T[K];
129
+ } : {
130
+ [K in keyof T as K]: T[K];
131
+ }) & {};
@@ -41,7 +41,7 @@ const portalProps = usePortal(toRef(() => props.portal));
41
41
  const contentProps = toRef(() => props.content);
42
42
  const contentEvents = computed(() => {
43
43
  if (!props.dismissible) {
44
- const events = ["pointerDownOutside", "interactOutside", "escapeKeyDown"];
44
+ const events = ["interactOutside", "escapeKeyDown"];
45
45
  return events.reduce((acc, curr) => {
46
46
  acc[curr] = (e) => {
47
47
  e.preventDefault();
@@ -79,14 +79,16 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.slideover ||
79
79
  @after-leave="emits('after:leave')"
80
80
  v-on="contentEvents"
81
81
  >
82
- <VisuallyHidden v-if="!!slots.content && (title || !!slots.title || (description || !!slots.description))">
83
- <DialogTitle v-if="title || !!slots.title">
82
+ <VisuallyHidden v-if="!title && !slots.title || !description && !slots.description || !!slots.content">
83
+ <DialogTitle v-if="!title && !slots.title" />
84
+ <DialogTitle v-else-if="!!slots.content">
84
85
  <slot name="title">
85
86
  {{ title }}
86
87
  </slot>
87
88
  </DialogTitle>
88
89
 
89
- <DialogDescription v-if="description || !!slots.description">
90
+ <DialogDescription v-if="!description && !slots.description" />
91
+ <DialogDescription v-else-if="!!slots.content">
90
92
  <slot name="description">
91
93
  {{ description }}
92
94
  </slot>
@@ -1,4 +1,4 @@
1
- import type { SwitchRootProps } from 'reka-ui';
1
+ import type { SwitchRootProps, SwitchRootEmits } from 'reka-ui';
2
2
  import type { VNode } from 'vue';
3
3
  import type { AppConfig } from '@nuxt/schema';
4
4
  import theme from '#build/ui/switch';
@@ -6,7 +6,7 @@ import type { IconProps } from '../types';
6
6
  import type { ButtonHTMLAttributes } from '../types/html';
7
7
  import type { ComponentConfig } from '../types/tv';
8
8
  type Switch = ComponentConfig<typeof theme, AppConfig, 'switch'>;
9
- export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | 'name' | 'required' | 'value' | 'defaultValue'>, /** @vue-ignore */ Omit<ButtonHTMLAttributes, 'type' | 'disabled' | 'name'> {
9
+ export interface SwitchProps<T = boolean> extends Pick<SwitchRootProps<T>, 'disabled' | 'id' | 'name' | 'required' | 'value' | 'defaultValue' | 'modelValue' | 'trueValue' | 'falseValue'>, /** @vue-ignore */ Omit<ButtonHTMLAttributes, 'type' | 'disabled' | 'name'> {
10
10
  /**
11
11
  * The element or component this component should render as.
12
12
  * @defaultValue 'div'
@@ -43,9 +43,9 @@ export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | '
43
43
  class?: any;
44
44
  ui?: Switch['slots'];
45
45
  }
46
- export type SwitchEmits = {
46
+ export interface SwitchEmits<T = boolean> extends SwitchRootEmits<T> {
47
47
  change: [event: Event];
48
- };
48
+ }
49
49
  export interface SwitchSlots {
50
50
  label?(props: {
51
51
  label: string | undefined;
@@ -56,19 +56,22 @@ export interface SwitchSlots {
56
56
  }
57
57
  declare const _default: typeof __VLS_export;
58
58
  export default _default;
59
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<SwitchProps & {
60
- modelValue?: boolean;
61
- }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
62
- change: (event: Event) => any;
63
- "update:modelValue": (value: boolean) => any;
64
- }, string, import("vue").PublicProps, Readonly<SwitchProps & {
65
- modelValue?: boolean;
66
- }> & Readonly<{
67
- onChange?: ((event: Event) => any) | undefined;
68
- "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
69
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, SwitchSlots>;
70
- type __VLS_WithSlots<T, S> = T & {
71
- new (): {
72
- $slots: S;
73
- };
59
+ declare const __VLS_export: <T = boolean>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
60
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<SwitchProps<T> & {
61
+ onChange?: ((event: Event) => any) | undefined;
62
+ "onUpdate:modelValue"?: ((payload: T) => any) | undefined;
63
+ }> & (typeof globalThis extends {
64
+ __VLS_PROPS_FALLBACK: infer P;
65
+ } ? P : {});
66
+ expose: (exposed: {}) => void;
67
+ attrs: any;
68
+ slots: SwitchSlots;
69
+ emit: ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", payload: T) => void);
70
+ }>) => import("vue").VNode & {
71
+ __ctx?: Awaited<typeof __VLS_setup>;
74
72
  };
73
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
74
+ [K in keyof T]: T[K];
75
+ } : {
76
+ [K in keyof T as K]: T[K];
77
+ }) & {};
@@ -4,7 +4,7 @@ import theme from "#build/ui/switch";
4
4
 
5
5
  <script setup>
6
6
  import { computed, useAttrs, useId } from "vue";
7
- import { Primitive, SwitchRoot, SwitchThumb, useForwardProps, Label } from "reka-ui";
7
+ import { Primitive, SwitchRoot, SwitchThumb, useForwardPropsEmits, Label } from "reka-ui";
8
8
  import { reactivePick } from "@vueuse/core";
9
9
  import { useAppConfig } from "#imports";
10
10
  import { useComponentUI } from "../composables/useComponentUI";
@@ -29,14 +29,16 @@ const props = defineProps({
29
29
  name: { type: String, required: false },
30
30
  required: { type: Boolean, required: false },
31
31
  value: { type: String, required: false },
32
- defaultValue: { type: Boolean, required: false }
32
+ defaultValue: { type: null, required: false },
33
+ modelValue: { type: null, required: false },
34
+ trueValue: { type: null, required: false },
35
+ falseValue: { type: null, required: false }
33
36
  });
34
37
  const slots = defineSlots();
35
- const emits = defineEmits(["change"]);
36
- const modelValue = defineModel({ type: Boolean, ...{ default: void 0 } });
38
+ const emits = defineEmits(["change", "update:modelValue"]);
37
39
  const appConfig = useAppConfig();
38
40
  const uiProp = useComponentUI("switch", props);
39
- const rootProps = useForwardProps(reactivePick(props, "required", "value", "defaultValue"));
41
+ const rootProps = useForwardPropsEmits(reactivePick(props, "required", "value", "defaultValue", "modelValue", "trueValue", "falseValue"), emits);
40
42
  const { id: _id, emitFormChange, emitFormInput, size, color, name, disabled, ariaAttrs } = useFormField(props);
41
43
  const id = _id.value ?? useId();
42
44
  const attrs = useAttrs();
@@ -65,7 +67,6 @@ function onUpdate(value) {
65
67
  <SwitchRoot
66
68
  :id="id"
67
69
  v-bind="{ ...rootProps, ...forwardedAttrs, ...ariaAttrs }"
68
- v-model="modelValue"
69
70
  :name="name"
70
71
  :disabled="disabled || loading"
71
72
  data-slot="base"
@@ -1,4 +1,4 @@
1
- import type { SwitchRootProps } from 'reka-ui';
1
+ import type { SwitchRootProps, SwitchRootEmits } from 'reka-ui';
2
2
  import type { VNode } from 'vue';
3
3
  import type { AppConfig } from '@nuxt/schema';
4
4
  import theme from '#build/ui/switch';
@@ -6,7 +6,7 @@ import type { IconProps } from '../types';
6
6
  import type { ButtonHTMLAttributes } from '../types/html';
7
7
  import type { ComponentConfig } from '../types/tv';
8
8
  type Switch = ComponentConfig<typeof theme, AppConfig, 'switch'>;
9
- export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | 'name' | 'required' | 'value' | 'defaultValue'>, /** @vue-ignore */ Omit<ButtonHTMLAttributes, 'type' | 'disabled' | 'name'> {
9
+ export interface SwitchProps<T = boolean> extends Pick<SwitchRootProps<T>, 'disabled' | 'id' | 'name' | 'required' | 'value' | 'defaultValue' | 'modelValue' | 'trueValue' | 'falseValue'>, /** @vue-ignore */ Omit<ButtonHTMLAttributes, 'type' | 'disabled' | 'name'> {
10
10
  /**
11
11
  * The element or component this component should render as.
12
12
  * @defaultValue 'div'
@@ -43,9 +43,9 @@ export interface SwitchProps extends Pick<SwitchRootProps, 'disabled' | 'id' | '
43
43
  class?: any;
44
44
  ui?: Switch['slots'];
45
45
  }
46
- export type SwitchEmits = {
46
+ export interface SwitchEmits<T = boolean> extends SwitchRootEmits<T> {
47
47
  change: [event: Event];
48
- };
48
+ }
49
49
  export interface SwitchSlots {
50
50
  label?(props: {
51
51
  label: string | undefined;
@@ -56,19 +56,22 @@ export interface SwitchSlots {
56
56
  }
57
57
  declare const _default: typeof __VLS_export;
58
58
  export default _default;
59
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<SwitchProps & {
60
- modelValue?: boolean;
61
- }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
62
- change: (event: Event) => any;
63
- "update:modelValue": (value: boolean) => any;
64
- }, string, import("vue").PublicProps, Readonly<SwitchProps & {
65
- modelValue?: boolean;
66
- }> & Readonly<{
67
- onChange?: ((event: Event) => any) | undefined;
68
- "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
69
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, SwitchSlots>;
70
- type __VLS_WithSlots<T, S> = T & {
71
- new (): {
72
- $slots: S;
73
- };
59
+ declare const __VLS_export: <T = boolean>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
60
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<SwitchProps<T> & {
61
+ onChange?: ((event: Event) => any) | undefined;
62
+ "onUpdate:modelValue"?: ((payload: T) => any) | undefined;
63
+ }> & (typeof globalThis extends {
64
+ __VLS_PROPS_FALLBACK: infer P;
65
+ } ? P : {});
66
+ expose: (exposed: {}) => void;
67
+ attrs: any;
68
+ slots: SwitchSlots;
69
+ emit: ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", payload: T) => void);
70
+ }>) => import("vue").VNode & {
71
+ __ctx?: Awaited<typeof __VLS_setup>;
74
72
  };
73
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
74
+ [K in keyof T]: T[K];
75
+ } : {
76
+ [K in keyof T as K]: T[K];
77
+ }) & {};
@@ -52,7 +52,7 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
52
52
  meta?: TableMeta<T>;
53
53
  /**
54
54
  * Enable virtualization for large datasets.
55
- * Note: when enabled, the divider between rows and sticky properties are not supported.
55
+ * Note: when enabled, the divider between rows, sticky and row pinning properties are not supported.
56
56
  * @see https://tanstack.com/virtual/latest/docs/api/virtualizer#options
57
57
  * @defaultValue false
58
58
  */
@@ -220,6 +220,9 @@ const tableApi = useVueTable({
220
220
  }
221
221
  });
222
222
  const rows = computed(() => tableApi.getRowModel().rows);
223
+ const topRows = computed(() => props.virtualize ? [] : tableApi.getTopRows());
224
+ const bottomRows = computed(() => props.virtualize ? [] : tableApi.getBottomRows());
225
+ const centerRows = computed(() => topRows.value.length || bottomRows.value.length ? tableApi.getCenterRows() : rows.value);
223
226
  const virtualizerProps = toRef(() => defu(typeof props.virtualize === "boolean" ? {} : props.virtualize, {
224
227
  estimateSize: 65,
225
228
  overscan: 12
@@ -227,7 +230,7 @@ const virtualizerProps = toRef(() => defu(typeof props.virtualize === "boolean"
227
230
  const virtualizer = !!props.virtualize && useVirtualizer({
228
231
  ...virtualizerProps.value,
229
232
  get count() {
230
- return rows.value.length;
233
+ return centerRows.value.length;
231
234
  },
232
235
  getScrollElement: () => rootRef.value?.$el,
233
236
  estimateSize: (index) => {
@@ -311,6 +314,7 @@ defineExpose({
311
314
  :data-selected="row.getIsSelected()"
312
315
  :data-selectable="!!props.onSelect || !!props.onHover || !!props.onContextmenu"
313
316
  :data-expanded="row.getIsExpanded()"
317
+ :data-pinned="row.getIsPinned() || void 0"
314
318
  :role="props.onSelect ? 'button' : void 0"
315
319
  :tabindex="props.onSelect ? 0 : void 0"
316
320
  data-slot="tr"
@@ -401,10 +405,12 @@ defineExpose({
401
405
  <slot name="body-top" />
402
406
 
403
407
  <template v-if="rows.length">
408
+ <ReuseRowTemplate v-for="row in topRows" :key="row.id" :row="row" />
409
+
404
410
  <template v-if="virtualizer">
405
- <template v-for="(virtualRow, index) in virtualizer.getVirtualItems()" :key="rows[virtualRow.index]?.id">
411
+ <template v-for="(virtualRow, index) in virtualizer.getVirtualItems()" :key="centerRows[virtualRow.index]?.id">
406
412
  <ReuseRowTemplate
407
- :row="rows[virtualRow.index]"
413
+ :row="centerRows[virtualRow.index]"
408
414
  :style="{
409
415
  height: `${virtualRow.size}px`,
410
416
  transform: `translateY(${virtualRow.start - index * virtualRow.size}px)`
@@ -414,8 +420,10 @@ defineExpose({
414
420
  </template>
415
421
 
416
422
  <template v-else>
417
- <ReuseRowTemplate v-for="row in rows" :key="row.id" :row="row" />
423
+ <ReuseRowTemplate v-for="row in centerRows" :key="row.id" :row="row" />
418
424
  </template>
425
+
426
+ <ReuseRowTemplate v-for="row in bottomRows" :key="row.id" :row="row" />
419
427
  </template>
420
428
 
421
429
  <tr v-else-if="loading && !!slots['loading']">
@@ -52,7 +52,7 @@ export interface TableProps<T extends TableData = TableData> extends TableOption
52
52
  meta?: TableMeta<T>;
53
53
  /**
54
54
  * Enable virtualization for large datasets.
55
- * Note: when enabled, the divider between rows and sticky properties are not supported.
55
+ * Note: when enabled, the divider between rows, sticky and row pinning properties are not supported.
56
56
  * @see https://tanstack.com/virtual/latest/docs/api/virtualizer#options
57
57
  * @defaultValue false
58
58
  */
@@ -13,6 +13,8 @@ export interface TooltipProps extends TooltipRootProps {
13
13
  kbds?: KbdProps['value'][] | KbdProps[];
14
14
  /**
15
15
  * The content of the tooltip.
16
+ *
17
+ * Inherits from the `tooltip.content` of the {@link AppProps} component when not provided.
16
18
  * @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
17
19
  */
18
20
  content?: Omit<TooltipContentProps, 'as' | 'asChild'> & Partial<EmitsToProps<TooltipContentEmits>>;
@@ -5,7 +5,7 @@ import theme from "#build/ui/tooltip";
5
5
  <script setup>
6
6
  import { computed, toRef } from "vue";
7
7
  import { defu } from "defu";
8
- import { TooltipRoot, TooltipTrigger, TooltipPortal, TooltipContent, TooltipArrow, useForwardPropsEmits } from "reka-ui";
8
+ import { TooltipRoot, TooltipTrigger, TooltipPortal, TooltipContent, TooltipArrow, useForwardPropsEmits, injectTooltipProviderContext } from "reka-ui";
9
9
  import { reactivePick } from "@vueuse/core";
10
10
  import { useAppConfig } from "#imports";
11
11
  import { useComponentUI } from "../composables/useComponentUI";
@@ -33,9 +33,10 @@ const emits = defineEmits(["update:open"]);
33
33
  const slots = defineSlots();
34
34
  const appConfig = useAppConfig();
35
35
  const uiProp = useComponentUI("tooltip", props);
36
+ const providerContext = injectTooltipProviderContext();
36
37
  const rootProps = useForwardPropsEmits(reactivePick(props, "defaultOpen", "open", "delayDuration", "disableHoverableContent", "disableClosingTrigger", "ignoreNonKeyboardFocus"), emits);
37
38
  const portalProps = usePortal(toRef(() => props.portal));
38
- const contentProps = toRef(() => defu(props.content, { side: "bottom", sideOffset: 8, collisionPadding: 8 }));
39
+ const contentProps = toRef(() => defu(props.content, providerContext.content.value, { side: "bottom", sideOffset: 8, collisionPadding: 8 }));
39
40
  const arrowProps = toRef(() => defu(props.arrow, { rounded: true }));
40
41
  const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.tooltip || {} })({
41
42
  side: contentProps.value.side
@@ -13,6 +13,8 @@ export interface TooltipProps extends TooltipRootProps {
13
13
  kbds?: KbdProps['value'][] | KbdProps[];
14
14
  /**
15
15
  * The content of the tooltip.
16
+ *
17
+ * Inherits from the `tooltip.content` of the {@link AppProps} component when not provided.
16
18
  * @defaultValue { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
17
19
  */
18
20
  content?: Omit<TooltipContentProps, 'as' | 'asChild'> & Partial<EmitsToProps<TooltipContentEmits>>;
@@ -4,5 +4,5 @@ export interface ColorModeSelectProps extends Omit<SelectMenuProps<SelectMenuIte
4
4
  declare const _default: typeof __VLS_export;
5
5
  export default _default;
6
6
  declare const __VLS_export: import("vue").DefineComponent<ColorModeSelectProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ColorModeSelectProps> & Readonly<{}>, {
7
- searchInput: boolean | import("../Input.vue").InputProps;
7
+ searchInput: boolean | Omit<import("../Input.vue").InputProps, "modelValue" | "defaultValue">;
8
8
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -4,5 +4,5 @@ export interface ColorModeSelectProps extends Omit<SelectMenuProps<SelectMenuIte
4
4
  declare const _default: typeof __VLS_export;
5
5
  export default _default;
6
6
  declare const __VLS_export: import("vue").DefineComponent<ColorModeSelectProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ColorModeSelectProps> & Readonly<{}>, {
7
- searchInput: boolean | import("../Input.vue").InputProps;
7
+ searchInput: boolean | Omit<import("../Input.vue").InputProps, "modelValue" | "defaultValue">;
8
8
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -24,7 +24,9 @@ const props = defineProps({
24
24
  name: { type: String, required: false },
25
25
  required: { type: Boolean, required: false },
26
26
  value: { type: String, required: false },
27
- defaultValue: { type: Boolean, required: false }
27
+ defaultValue: { type: null, required: false },
28
+ trueValue: { type: null, required: false },
29
+ falseValue: { type: null, required: false }
28
30
  });
29
31
  const { t } = useLocale();
30
32
  const colorMode = useColorMode();
@@ -107,12 +107,19 @@ const defaultValue = computed(() => {
107
107
  <Primitive :as="as" v-bind="$attrs" :as-child="level > 0" data-slot="root" :class="ui.root({ class: [uiProp?.root, props.class] })">
108
108
  <AccordionRoot as="ul" :disabled="disabled" v-bind="rootProps" :default-value="defaultValue" :class="level > 0 ? ui.listWithChildren({ class: uiProp?.listWithChildren }) : ui.list({ class: uiProp?.list })">
109
109
  <template v-for="(link, index) in navigation" :key="index">
110
- <AccordionItem v-if="link.children?.length" as="li" data-slot="itemWithChildren" :class="ui.itemWithChildren({ class: [uiProp?.itemWithChildren, link.ui?.itemWithChildren], level: level > 0 })" :value="String(index)">
110
+ <AccordionItem
111
+ v-if="link.children?.length"
112
+ as="li"
113
+ :disabled="!!link.disabled"
114
+ data-slot="itemWithChildren"
115
+ :class="ui.itemWithChildren({ class: [uiProp?.itemWithChildren, link.ui?.itemWithChildren], level: level > 0 })"
116
+ :value="String(index)"
117
+ >
111
118
  <AccordionTrigger
112
119
  as="button"
113
120
  :class="[
114
121
  ui.link({ class: [uiProp?.link, link.ui?.link, link.class], active: link.active, disabled: !!link.disabled || disabled }),
115
- ui.trigger({ class: [uiProp?.trigger, link.ui?.trigger], disabled })
122
+ ui.trigger({ class: [uiProp?.trigger, link.ui?.trigger], disabled: !!link.disabled || disabled })
116
123
  ]"
117
124
  >
118
125
  <ReuseLinkTemplate :link="link" :active="link.active || false" />
@@ -8,6 +8,7 @@ import { Primitive } from "reka-ui";
8
8
  import { createReusableTemplate } from "@vueuse/core";
9
9
  import { useAppConfig } from "#imports";
10
10
  import { useComponentUI } from "../../composables/useComponentUI";
11
+ import { useLocale } from "../../composables/useLocale";
11
12
  import { tv } from "../../utils/tv";
12
13
  import ULink from "../Link.vue";
13
14
  import UIcon from "../Icon.vue";
@@ -21,6 +22,7 @@ const props = defineProps({
21
22
  ui: { type: Object, required: false }
22
23
  });
23
24
  defineSlots();
25
+ const { dir } = useLocale();
24
26
  const appConfig = useAppConfig();
25
27
  const uiProp = useComponentUI("contentSurround", props);
26
28
  const [DefineLinkTemplate, ReuseLinkTemplate] = createReusableTemplate({
@@ -31,6 +33,8 @@ const [DefineLinkTemplate, ReuseLinkTemplate] = createReusableTemplate({
31
33
  }
32
34
  });
33
35
  const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.contentSurround || {} })());
36
+ const prevIcon = computed(() => props.prevIcon || (dir.value === "rtl" ? appConfig.ui.icons.arrowRight : appConfig.ui.icons.arrowLeft));
37
+ const nextIcon = computed(() => props.nextIcon || (dir.value === "rtl" ? appConfig.ui.icons.arrowLeft : appConfig.ui.icons.arrowRight));
34
38
  </script>
35
39
 
36
40
  <template>
@@ -60,7 +64,7 @@ const ui = computed(() => tv({ extend: tv(theme), ...appConfig.ui?.contentSurrou
60
64
  </DefineLinkTemplate>
61
65
 
62
66
  <Primitive v-if="surround" :as="as" v-bind="$attrs" data-slot="root" :class="ui.root({ class: [uiProp?.root, props.class] })">
63
- <ReuseLinkTemplate :link="surround[0]" :icon="prevIcon || appConfig.ui.icons.arrowLeft" direction="left" />
64
- <ReuseLinkTemplate :link="surround[1]" :icon="nextIcon || appConfig.ui.icons.arrowRight" direction="right" />
67
+ <ReuseLinkTemplate :link="surround[0]" :icon="prevIcon" direction="left" />
68
+ <ReuseLinkTemplate :link="surround[1]" :icon="nextIcon" direction="right" />
65
69
  </Primitive>
66
70
  </template>
@@ -40,6 +40,11 @@ export interface ContentTocProps<T extends ContentTocLink = ContentTocLink> exte
40
40
  * @defaultValue 'primary'
41
41
  */
42
42
  highlightColor?: ContentToc['variants']['highlightColor'];
43
+ /**
44
+ * The variant of the highlight indicator.
45
+ * @defaultValue 'straight'
46
+ */
47
+ highlightVariant?: ContentToc['variants']['highlightVariant'];
43
48
  links?: T[];
44
49
  class?: any;
45
50
  ui?: ContentToc['slots'];