@nuxt/ui 2.11.0 → 2.12.0

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 (159) hide show
  1. package/dist/module.d.mts +294 -48
  2. package/dist/module.d.ts +294 -48
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +6 -4
  5. package/dist/runtime/components/data/Table.vue +29 -21
  6. package/dist/runtime/components/data/Table.vue.d.ts +28 -19
  7. package/dist/runtime/components/elements/Accordion.vue +10 -6
  8. package/dist/runtime/components/elements/Accordion.vue.d.ts +11 -11
  9. package/dist/runtime/components/elements/Alert.vue +12 -6
  10. package/dist/runtime/components/elements/Alert.vue.d.ts +12 -17
  11. package/dist/runtime/components/elements/Avatar.vue +2 -2
  12. package/dist/runtime/components/elements/Avatar.vue.d.ts +7 -7
  13. package/dist/runtime/components/elements/AvatarGroup.d.ts +7 -7
  14. package/dist/runtime/components/elements/AvatarGroup.mjs +2 -2
  15. package/dist/runtime/components/elements/Badge.vue +2 -2
  16. package/dist/runtime/components/elements/Badge.vue.d.ts +7 -7
  17. package/dist/runtime/components/elements/Button.vue +8 -6
  18. package/dist/runtime/components/elements/Button.vue.d.ts +9 -8
  19. package/dist/runtime/components/elements/ButtonGroup.d.ts +7 -7
  20. package/dist/runtime/components/elements/ButtonGroup.mjs +3 -16
  21. package/dist/runtime/components/elements/Chip.vue +2 -2
  22. package/dist/runtime/components/elements/Chip.vue.d.ts +9 -9
  23. package/dist/runtime/components/elements/Dropdown.vue +68 -19
  24. package/dist/runtime/components/elements/Dropdown.vue.d.ts +37 -9
  25. package/dist/runtime/components/elements/Kbd.vue +2 -2
  26. package/dist/runtime/components/elements/Kbd.vue.d.ts +7 -7
  27. package/dist/runtime/components/elements/Link.vue +2 -2
  28. package/dist/runtime/components/elements/Meter.vue +2 -2
  29. package/dist/runtime/components/elements/Meter.vue.d.ts +7 -7
  30. package/dist/runtime/components/elements/MeterGroup.d.ts +9 -9
  31. package/dist/runtime/components/elements/MeterGroup.mjs +8 -21
  32. package/dist/runtime/components/elements/Progress.vue +5 -94
  33. package/dist/runtime/components/elements/Progress.vue.d.ts +123 -1
  34. package/dist/runtime/components/forms/Checkbox.vue +7 -7
  35. package/dist/runtime/components/forms/Checkbox.vue.d.ts +8 -8
  36. package/dist/runtime/components/forms/Form.vue +17 -8
  37. package/dist/runtime/components/forms/Form.vue.d.ts +1 -1
  38. package/dist/runtime/components/forms/FormGroup.vue +2 -2
  39. package/dist/runtime/components/forms/FormGroup.vue.d.ts +7 -7
  40. package/dist/runtime/components/forms/Input.vue +8 -8
  41. package/dist/runtime/components/forms/Input.vue.d.ts +11 -11
  42. package/dist/runtime/components/forms/InputMenu.vue +410 -0
  43. package/dist/runtime/components/forms/InputMenu.vue.d.ts +331 -0
  44. package/dist/runtime/components/forms/Radio.vue +7 -7
  45. package/dist/runtime/components/forms/Radio.vue.d.ts +7 -7
  46. package/dist/runtime/components/forms/RadioGroup.vue +5 -5
  47. package/dist/runtime/components/forms/RadioGroup.vue.d.ts +13 -13
  48. package/dist/runtime/components/forms/Range.vue +5 -5
  49. package/dist/runtime/components/forms/Range.vue.d.ts +8 -8
  50. package/dist/runtime/components/forms/Select.vue +8 -8
  51. package/dist/runtime/components/forms/Select.vue.d.ts +10 -10
  52. package/dist/runtime/components/forms/SelectMenu.vue +69 -36
  53. package/dist/runtime/components/forms/SelectMenu.vue.d.ts +40 -20
  54. package/dist/runtime/components/forms/Textarea.vue +3 -3
  55. package/dist/runtime/components/forms/Textarea.vue.d.ts +10 -10
  56. package/dist/runtime/components/forms/Toggle.vue +10 -10
  57. package/dist/runtime/components/forms/Toggle.vue.d.ts +16 -15
  58. package/dist/runtime/components/layout/Card.vue +2 -2
  59. package/dist/runtime/components/layout/Card.vue.d.ts +7 -7
  60. package/dist/runtime/components/layout/Container.vue +2 -2
  61. package/dist/runtime/components/layout/Container.vue.d.ts +7 -7
  62. package/dist/runtime/components/layout/Divider.vue +3 -8
  63. package/dist/runtime/components/layout/Divider.vue.d.ts +7 -7
  64. package/dist/runtime/components/layout/Skeleton.vue +2 -2
  65. package/dist/runtime/components/layout/Skeleton.vue.d.ts +7 -7
  66. package/dist/runtime/components/navigation/Breadcrumb.vue +9 -6
  67. package/dist/runtime/components/navigation/Breadcrumb.vue.d.ts +10 -7
  68. package/dist/runtime/components/navigation/CommandPalette.vue +42 -33
  69. package/dist/runtime/components/navigation/CommandPalette.vue.d.ts +16 -9
  70. package/dist/runtime/components/navigation/CommandPaletteGroup.vue +1 -3
  71. package/dist/runtime/components/navigation/Pagination.vue +16 -11
  72. package/dist/runtime/components/navigation/Pagination.vue.d.ts +16 -7
  73. package/dist/runtime/components/navigation/Tabs.vue +8 -5
  74. package/dist/runtime/components/navigation/Tabs.vue.d.ts +9 -9
  75. package/dist/runtime/components/navigation/VerticalNavigation.vue +56 -39
  76. package/dist/runtime/components/navigation/VerticalNavigation.vue.d.ts +14 -10
  77. package/dist/runtime/components/overlays/ContextMenu.vue +4 -3
  78. package/dist/runtime/components/overlays/ContextMenu.vue.d.ts +7 -7
  79. package/dist/runtime/components/overlays/Modal.vue +3 -6
  80. package/dist/runtime/components/overlays/Modal.vue.d.ts +8 -8
  81. package/dist/runtime/components/overlays/Notification.vue +7 -7
  82. package/dist/runtime/components/overlays/Notification.vue.d.ts +7 -7
  83. package/dist/runtime/components/overlays/Notifications.vue +2 -2
  84. package/dist/runtime/components/overlays/Notifications.vue.d.ts +7 -7
  85. package/dist/runtime/components/overlays/Popover.vue +54 -17
  86. package/dist/runtime/components/overlays/Popover.vue.d.ts +21 -11
  87. package/dist/runtime/components/overlays/Slideover.vue +6 -6
  88. package/dist/runtime/components/overlays/Slideover.vue.d.ts +8 -8
  89. package/dist/runtime/components/overlays/Tooltip.vue +6 -5
  90. package/dist/runtime/components/overlays/Tooltip.vue.d.ts +7 -7
  91. package/dist/runtime/composables/useFormGroup.d.ts +3 -3
  92. package/dist/runtime/composables/useFormGroup.mjs +1 -1
  93. package/dist/runtime/composables/useShortcuts.mjs +3 -1
  94. package/dist/runtime/composables/useUI.d.ts +3 -3
  95. package/dist/runtime/types/alert.d.ts +5 -0
  96. package/dist/runtime/types/breadcrumb.d.ts +3 -0
  97. package/dist/runtime/types/dropdown.d.ts +2 -0
  98. package/dist/runtime/types/form.d.ts +2 -1
  99. package/dist/runtime/types/popper.d.ts +2 -0
  100. package/dist/runtime/types/utils.d.ts +4 -4
  101. package/dist/runtime/types/vertical-navigation.d.ts +1 -0
  102. package/dist/runtime/ui.config/data/table.d.ts +2 -2
  103. package/dist/runtime/ui.config/elements/accordion.d.ts +1 -1
  104. package/dist/runtime/ui.config/elements/alert.d.ts +5 -4
  105. package/dist/runtime/ui.config/elements/alert.mjs +1 -0
  106. package/dist/runtime/ui.config/elements/button.d.ts +4 -0
  107. package/dist/runtime/ui.config/elements/button.mjs +4 -0
  108. package/dist/runtime/ui.config/elements/buttonGroup.d.ts +92 -0
  109. package/dist/runtime/ui.config/elements/buttonGroup.mjs +12 -1
  110. package/dist/runtime/ui.config/elements/dropdown.d.ts +3 -1
  111. package/dist/runtime/ui.config/elements/dropdown.mjs +4 -2
  112. package/dist/runtime/ui.config/elements/meterGroup.d.ts +40 -0
  113. package/dist/runtime/ui.config/elements/meterGroup.mjs +14 -1
  114. package/dist/runtime/ui.config/forms/checkbox.d.ts +3 -0
  115. package/dist/runtime/ui.config/forms/checkbox.mjs +3 -0
  116. package/dist/runtime/ui.config/forms/input.d.ts +2 -0
  117. package/dist/runtime/ui.config/forms/input.mjs +14 -12
  118. package/dist/runtime/ui.config/forms/inputMenu.d.ts +64 -0
  119. package/dist/runtime/ui.config/forms/inputMenu.mjs +62 -0
  120. package/dist/runtime/ui.config/forms/radio.d.ts +3 -0
  121. package/dist/runtime/ui.config/forms/radio.mjs +3 -0
  122. package/dist/runtime/ui.config/forms/select.d.ts +2 -0
  123. package/dist/runtime/ui.config/forms/select.mjs +1 -0
  124. package/dist/runtime/ui.config/forms/selectMenu.d.ts +18 -11
  125. package/dist/runtime/ui.config/forms/selectMenu.mjs +12 -41
  126. package/dist/runtime/ui.config/forms/textarea.d.ts +2 -0
  127. package/dist/runtime/ui.config/forms/textarea.mjs +1 -0
  128. package/dist/runtime/ui.config/index.d.ts +1 -0
  129. package/dist/runtime/ui.config/index.mjs +1 -0
  130. package/dist/runtime/ui.config/layout/card.mjs +1 -1
  131. package/dist/runtime/ui.config/layout/divider.d.ts +6 -1
  132. package/dist/runtime/ui.config/layout/divider.mjs +5 -0
  133. package/dist/runtime/ui.config/navigation/breadcrumb.d.ts +1 -0
  134. package/dist/runtime/ui.config/navigation/breadcrumb.mjs +2 -1
  135. package/dist/runtime/ui.config/navigation/commandPalette.d.ts +5 -1
  136. package/dist/runtime/ui.config/navigation/commandPalette.mjs +5 -1
  137. package/dist/runtime/ui.config/navigation/pagination.d.ts +6 -6
  138. package/dist/runtime/ui.config/navigation/verticalNavigation.d.ts +6 -1
  139. package/dist/runtime/ui.config/navigation/verticalNavigation.mjs +5 -0
  140. package/dist/runtime/ui.config/overlays/contextMenu.mjs +1 -1
  141. package/dist/runtime/ui.config/overlays/modal.d.ts +1 -0
  142. package/dist/runtime/ui.config/overlays/modal.mjs +3 -2
  143. package/dist/runtime/ui.config/overlays/notification.d.ts +5 -4
  144. package/dist/runtime/ui.config/overlays/notification.mjs +1 -0
  145. package/dist/runtime/ui.config/overlays/popover.d.ts +1 -0
  146. package/dist/runtime/ui.config/overlays/popover.mjs +2 -1
  147. package/dist/runtime/ui.config/overlays/slideover.d.ts +5 -0
  148. package/dist/runtime/ui.config/overlays/slideover.mjs +5 -0
  149. package/dist/runtime/ui.config/overlays/tooltip.d.ts +1 -0
  150. package/dist/runtime/ui.config/overlays/tooltip.mjs +2 -1
  151. package/dist/runtime/ui.config/{_popperArrow.d.ts → popper.d.ts} +1 -2
  152. package/dist/runtime/ui.config/popper.mjs +9 -0
  153. package/dist/runtime/ui.css +1 -13
  154. package/dist/runtime/utils/index.mjs +11 -3
  155. package/dist/runtime/utils/uid.mjs +2 -1
  156. package/dist/types.d.mts +2 -2
  157. package/dist/types.d.ts +1 -1
  158. package/package.json +29 -28
  159. package/dist/runtime/ui.config/_popperArrow.mjs +0 -8
@@ -22,11 +22,11 @@ declare const _default: import("vue").DefineComponent<{
22
22
  };
23
23
  class: {
24
24
  type: PropType<any>;
25
- default: undefined;
25
+ default: () => "";
26
26
  };
27
27
  ui: {
28
- type: PropType<Partial<any>>;
29
- default: undefined;
28
+ type: PropType<any>;
29
+ default: () => {};
30
30
  };
31
31
  }, {
32
32
  attrs: import("vue").ComputedRef<Pick<{
@@ -55,15 +55,15 @@ declare const _default: import("vue").DefineComponent<{
55
55
  };
56
56
  class: {
57
57
  type: PropType<any>;
58
- default: undefined;
58
+ default: () => "";
59
59
  };
60
60
  ui: {
61
- type: PropType<Partial<any>>;
62
- default: undefined;
61
+ type: PropType<any>;
62
+ default: () => {};
63
63
  };
64
64
  }>>, {
65
65
  size: BadgeSize;
66
- ui: Partial<any>;
66
+ ui: any;
67
67
  color: any;
68
68
  class: any;
69
69
  label: string | number;
@@ -5,7 +5,7 @@
5
5
  </slot>
6
6
 
7
7
  <slot>
8
- <span v-if="label" :class="[truncate ? 'text-left break-all line-clamp-1' : '']">
8
+ <span v-if="label" :class="[truncate ? ui.truncate : '']">
9
9
  {{ label }}
10
10
  </span>
11
11
  </slot>
@@ -116,11 +116,11 @@ export default defineComponent({
116
116
  },
117
117
  class: {
118
118
  type: [String, Object, Array],
119
- default: void 0
119
+ default: () => ""
120
120
  },
121
121
  ui: {
122
122
  type: Object,
123
- default: void 0
123
+ default: () => ({})
124
124
  }
125
125
  },
126
126
  setup(props, { slots }) {
@@ -143,7 +143,7 @@ export default defineComponent({
143
143
  ui.value.gap[size.value],
144
144
  props.padded && ui.value[isSquare.value ? "square" : "padding"][size.value],
145
145
  variant?.replaceAll("{color}", props.color),
146
- props.block ? "w-full flex justify-center items-center" : "inline-flex items-center"
146
+ props.block ? ui.value.block : ui.value.inline
147
147
  ), props.class);
148
148
  });
149
149
  const leadingIconName = computed(() => {
@@ -162,17 +162,19 @@ export default defineComponent({
162
162
  return twJoin(
163
163
  ui.value.icon.base,
164
164
  ui.value.icon.size[size.value],
165
- props.loading && "animate-spin"
165
+ props.loading && ui.value.icon.loading
166
166
  );
167
167
  });
168
168
  const trailingIconClass = computed(() => {
169
169
  return twJoin(
170
170
  ui.value.icon.base,
171
171
  ui.value.icon.size[size.value],
172
- props.loading && !isLeading.value && "animate-spin"
172
+ props.loading && !isLeading.value && ui.value.icon.loading
173
173
  );
174
174
  });
175
175
  return {
176
+ // eslint-disable-next-line vue/no-dupe-keys
177
+ ui,
176
178
  attrs,
177
179
  isLeading,
178
180
  isTrailing,
@@ -74,13 +74,14 @@ declare const _default: import("vue").DefineComponent<{
74
74
  };
75
75
  class: {
76
76
  type: PropType<any>;
77
- default: undefined;
77
+ default: () => "";
78
78
  };
79
79
  ui: {
80
- type: PropType<Partial<any>>;
81
- default: undefined;
80
+ type: PropType<any>;
81
+ default: () => {};
82
82
  };
83
83
  }, {
84
+ ui: import("vue").ComputedRef<any>;
84
85
  attrs: import("vue").ComputedRef<Pick<{
85
86
  [x: string]: unknown;
86
87
  }, string>>;
@@ -166,19 +167,20 @@ declare const _default: import("vue").DefineComponent<{
166
167
  };
167
168
  class: {
168
169
  type: PropType<any>;
169
- default: undefined;
170
+ default: () => "";
170
171
  };
171
172
  ui: {
172
- type: PropType<Partial<any>>;
173
- default: undefined;
173
+ type: PropType<any>;
174
+ default: () => {};
174
175
  };
175
176
  }>>, {
176
177
  size: ButtonSize;
177
- ui: Partial<any>;
178
+ ui: any;
178
179
  truncate: boolean;
179
180
  icon: string;
180
181
  color: any;
181
182
  type: string;
183
+ leading: boolean;
182
184
  class: any;
183
185
  label: string;
184
186
  loading: boolean;
@@ -190,7 +192,6 @@ declare const _default: import("vue").DefineComponent<{
190
192
  leadingIcon: string;
191
193
  trailingIcon: string;
192
194
  trailing: boolean;
193
- leading: boolean;
194
195
  square: boolean;
195
196
  }, {}>;
196
197
  export default _default;
@@ -13,11 +13,11 @@ declare const _default: import("vue").DefineComponent<{
13
13
  };
14
14
  class: {
15
15
  type: PropType<any>;
16
- default: undefined;
16
+ default: () => "";
17
17
  };
18
18
  ui: {
19
- type: PropType<Partial<any>>;
20
- default: undefined;
19
+ type: PropType<any>;
20
+ default: () => {};
21
21
  };
22
22
  }, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
23
23
  [key: string]: any;
@@ -34,16 +34,16 @@ declare const _default: import("vue").DefineComponent<{
34
34
  };
35
35
  class: {
36
36
  type: PropType<any>;
37
- default: undefined;
37
+ default: () => "";
38
38
  };
39
39
  ui: {
40
- type: PropType<Partial<any>>;
41
- default: undefined;
40
+ type: PropType<any>;
41
+ default: () => {};
42
42
  };
43
43
  }>>, {
44
44
  orientation: "horizontal" | "vertical";
45
45
  size: ButtonSize;
46
- ui: Partial<any>;
46
+ ui: any;
47
47
  class: any;
48
48
  }, {}>;
49
49
  export default _default;
@@ -27,11 +27,11 @@ export default defineComponent({
27
27
  },
28
28
  class: {
29
29
  type: [String, Object, Array],
30
- default: void 0
30
+ default: () => ""
31
31
  },
32
32
  ui: {
33
33
  type: Object,
34
- default: void 0
34
+ default: () => ({})
35
35
  }
36
36
  },
37
37
  setup(props, { slots }) {
@@ -44,20 +44,7 @@ export default defineComponent({
44
44
  ui.value.shadow
45
45
  ), props.class);
46
46
  });
47
- const rounded = computed(() => {
48
- const roundedMap = {
49
- "rounded-none": { horizontal: { start: "rounded-s-none", end: "rounded-e-none" }, vertical: { start: "rounded-t-none", end: "rounded-b-none" } },
50
- "rounded-sm": { horizontal: { start: "rounded-s-sm", end: "rounded-e-sm" }, vertical: { start: "rounded-t-sm", end: "rounded-b-sm" } },
51
- rounded: { horizontal: { start: "rounded-s", end: "rounded-e" }, vertical: { start: "rounded-t", end: "rounded-b" } },
52
- "rounded-md": { horizontal: { start: "rounded-s-md", end: "rounded-e-md" }, vertical: { start: "rounded-t-md", end: "rounded-b-md" } },
53
- "rounded-lg": { horizontal: { start: "rounded-s-lg", end: "rounded-e-lg" }, vertical: { start: "rounded-t-lg", end: "rounded-b-lg" } },
54
- "rounded-xl": { horizontal: { start: "rounded-s-xl", end: "rounded-e-xl" }, vertical: { start: "rounded-t-xl", end: "rounded-b-xl" } },
55
- "rounded-2xl": { horizontal: { start: "rounded-s-2xl", end: "rounded-e-2xl" }, vertical: { start: "rounded-t-2xl", end: "rounded-b-2xl" } },
56
- "rounded-3xl": { horizontal: { start: "rounded-s-3xl", end: "rounded-e-3xl" }, vertical: { start: "rounded-t-3xl", end: "rounded-b-3xl" } },
57
- "rounded-full": { horizontal: { start: "rounded-s-full", end: "rounded-e-full" }, vertical: { start: "rounded-t-full", end: "rounded-b-full" } }
58
- };
59
- return roundedMap[ui.value.rounded][props.orientation];
60
- });
47
+ const rounded = computed(() => ui.value.orientation[ui.value.rounded][props.orientation]);
61
48
  useProvideButtonGroup({ orientation: toRef(props, "orientation"), size: toRef(props, "size"), ui, rounded });
62
49
  return () => h("div", { class: wrapperClass.value, ...attrs.value }, children.value);
63
50
  }
@@ -56,11 +56,11 @@ export default defineComponent({
56
56
  },
57
57
  class: {
58
58
  type: [String, Object, Array],
59
- default: void 0
59
+ default: () => ""
60
60
  },
61
61
  ui: {
62
62
  type: Object,
63
- default: void 0
63
+ default: () => ({})
64
64
  }
65
65
  },
66
66
  setup(props) {
@@ -29,11 +29,11 @@ declare const _default: import("vue").DefineComponent<{
29
29
  };
30
30
  class: {
31
31
  type: PropType<any>;
32
- default: undefined;
32
+ default: () => "";
33
33
  };
34
34
  ui: {
35
- type: PropType<Partial<any>>;
36
- default: undefined;
35
+ type: PropType<any>;
36
+ default: () => {};
37
37
  };
38
38
  }, {
39
39
  ui: import("vue").ComputedRef<any>;
@@ -71,20 +71,20 @@ declare const _default: import("vue").DefineComponent<{
71
71
  };
72
72
  class: {
73
73
  type: PropType<any>;
74
- default: undefined;
74
+ default: () => "";
75
75
  };
76
76
  ui: {
77
- type: PropType<Partial<any>>;
78
- default: undefined;
77
+ type: PropType<any>;
78
+ default: () => {};
79
79
  };
80
80
  }>>, {
81
81
  size: "sm" | "3xs" | "md" | "xs" | "2xs" | "lg" | "xl" | "2xl" | "3xl";
82
- ui: Partial<any>;
82
+ ui: any;
83
83
  color: any;
84
+ inset: boolean;
85
+ position: "top-right" | "bottom-right" | "top-left" | "bottom-left";
84
86
  class: any;
85
87
  text: string | number;
86
- position: "top-right" | "bottom-right" | "top-left" | "bottom-left";
87
- inset: boolean;
88
88
  show: boolean;
89
89
  }, {}>;
90
90
  export default _default;
@@ -1,10 +1,11 @@
1
1
  <template>
2
+ <!-- eslint-disable-next-line vue/no-template-shadow -->
2
3
  <HMenu v-slot="{ open }" as="div" :class="ui.wrapper" v-bind="attrs" @mouseleave="onMouseLeave">
3
4
  <HMenuButton
4
5
  ref="trigger"
5
6
  as="div"
6
7
  :disabled="disabled"
7
- class="inline-flex w-full"
8
+ :class="ui.trigger"
8
9
  role="button"
9
10
  @mouseover="onMouseOver"
10
11
  >
@@ -18,24 +19,25 @@
18
19
  <div v-if="open && items.length" ref="container" :class="[ui.container, ui.width]" :style="containerStyle" @mouseover="onMouseOver">
19
20
  <Transition appear v-bind="ui.transition">
20
21
  <div>
21
- <div v-if="popper.arrow" data-popper-arrow :class="['invisible before:visible before:block before:rotate-45 before:z-[-1]', Object.values(ui.arrow)]" />
22
+ <div v-if="popper.arrow" data-popper-arrow :class="Object.values(ui.arrow)" />
23
+
22
24
  <HMenuItems :class="[ui.base, ui.divide, ui.ring, ui.rounded, ui.shadow, ui.background, ui.height]" static>
23
25
  <div v-for="(subItems, index) of items" :key="index" :class="ui.padding">
24
- <NuxtLink v-for="(item, subIndex) of subItems" :key="subIndex" v-slot="{ href, target, rel, navigate, isExternal }" v-bind="omit(item, ['label', 'slot', 'icon', 'iconClass', 'avatar', 'shortcuts', 'disabled', 'click'])" custom>
26
+ <NuxtLink v-for="(item, subIndex) of subItems" :key="subIndex" v-slot="{ href, target, rel, navigate, isExternal }" v-bind="omit(item, ['label', 'labelClass', 'slot', 'icon', 'iconClass', 'avatar', 'shortcuts', 'disabled', 'class', 'click'])" custom>
25
27
  <HMenuItem v-slot="{ active, disabled: itemDisabled, close }" :disabled="item.disabled">
26
28
  <component
27
29
  :is="!!href ? 'a' : 'button'"
28
30
  :href="!itemDisabled ? href : undefined"
29
31
  :rel="rel"
30
32
  :target="target"
31
- :class="[ui.item.base, ui.item.padding, ui.item.size, ui.item.rounded, active ? ui.item.active : ui.item.inactive, itemDisabled && ui.item.disabled]"
33
+ :class="twMerge(twJoin(ui.item.base, ui.item.padding, ui.item.size, ui.item.rounded, active ? ui.item.active : ui.item.inactive, itemDisabled && ui.item.disabled), item.class)"
32
34
  @click="onClick($event, item, { href, navigate, close, isExternal })"
33
35
  >
34
36
  <slot :name="item.slot || 'item'" :item="item">
35
- <UIcon v-if="item.icon" :name="item.icon" :class="[ui.item.icon.base, active ? ui.item.icon.active : ui.item.icon.inactive, item.iconClass]" />
37
+ <UIcon v-if="item.icon" :name="item.icon" :class="twMerge(twJoin(ui.item.icon.base, active ? ui.item.icon.active : ui.item.icon.inactive), item.iconClass)" />
36
38
  <UAvatar v-else-if="item.avatar" v-bind="{ size: ui.item.avatar.size, ...item.avatar }" :class="ui.item.avatar.base" />
37
39
 
38
- <span class="truncate">{{ item.label }}</span>
40
+ <span :class="twMerge(ui.item.label, item.labelClass)">{{ item.label }}</span>
39
41
 
40
42
  <span v-if="item.shortcuts?.length" :class="ui.item.shortcuts">
41
43
  <UKbd v-for="shortcut of item.shortcuts" :key="shortcut">{{ shortcut }}</UKbd>
@@ -53,9 +55,10 @@
53
55
  </template>
54
56
 
55
57
  <script>
56
- import { defineComponent, ref, computed, toRef, onMounted, resolveComponent } from "vue";
58
+ import { defineComponent, ref, computed, watch, toRef, onMounted, resolveComponent } from "vue";
57
59
  import { Menu as HMenu, MenuButton as HMenuButton, MenuItems as HMenuItems, MenuItem as HMenuItem } from "@headlessui/vue";
58
60
  import { defu } from "defu";
61
+ import { twMerge, twJoin } from "tailwind-merge";
59
62
  import UIcon from "../elements/Icon.vue";
60
63
  import UAvatar from "../elements/Avatar.vue";
61
64
  import UKbd from "../elements/Kbd.vue";
@@ -86,6 +89,10 @@ export default defineComponent({
86
89
  default: "click",
87
90
  validator: (value) => ["click", "hover"].includes(value)
88
91
  },
92
+ open: {
93
+ type: Boolean,
94
+ default: void 0
95
+ },
89
96
  disabled: {
90
97
  type: Boolean,
91
98
  default: false
@@ -104,14 +111,15 @@ export default defineComponent({
104
111
  },
105
112
  class: {
106
113
  type: [String, Object, Array],
107
- default: void 0
114
+ default: () => ""
108
115
  },
109
116
  ui: {
110
117
  type: Object,
111
- default: void 0
118
+ default: () => ({})
112
119
  }
113
120
  },
114
- setup(props) {
121
+ emits: ["update:open"],
122
+ setup(props, { emit }) {
115
123
  const { ui, attrs } = useUI("dropdown", toRef(props, "ui"), config, toRef(props, "class"));
116
124
  const popper = computed(() => defu(props.mode === "hover" ? { offsetDistance: 0 } : {}, props.popper, ui.value.popper));
117
125
  const [trigger, container] = usePopper(popper.value);
@@ -119,18 +127,41 @@ export default defineComponent({
119
127
  let openTimeout = null;
120
128
  let closeTimeout = null;
121
129
  onMounted(() => {
122
- setTimeout(() => {
123
- const menuProvides = trigger.value?.$.provides;
124
- if (!menuProvides) {
125
- return;
126
- }
127
- const menuProvidesSymbols = Object.getOwnPropertySymbols(menuProvides);
128
- menuApi.value = menuProvidesSymbols.length && menuProvides[menuProvidesSymbols[0]];
129
- }, 200);
130
+ const menuProvides = trigger.value?.$.provides;
131
+ if (!menuProvides) {
132
+ return;
133
+ }
134
+ const menuProvidesSymbols = Object.getOwnPropertySymbols(menuProvides);
135
+ menuApi.value = menuProvidesSymbols.length && menuProvides[menuProvidesSymbols[0]];
136
+ if (props.open) {
137
+ menuApi.value?.openMenu();
138
+ }
130
139
  });
131
140
  const containerStyle = computed(() => {
141
+ if (props.mode !== "hover") {
142
+ return {};
143
+ }
132
144
  const offsetDistance = props.popper?.offsetDistance || ui.value.popper?.offsetDistance || 8;
133
- return props.mode === "hover" ? { paddingTop: `${offsetDistance}px`, paddingBottom: `${offsetDistance}px` } : {};
145
+ const placement = popper.value.placement?.split("-")[0];
146
+ const padding = `${offsetDistance}px`;
147
+ if (placement === "top" || placement === "bottom") {
148
+ return {
149
+ paddingTop: padding,
150
+ paddingBottom: padding
151
+ };
152
+ } else if (placement === "left" || placement === "right") {
153
+ return {
154
+ paddingLeft: padding,
155
+ paddingRight: padding
156
+ };
157
+ } else {
158
+ return {
159
+ paddingTop: padding,
160
+ paddingBottom: padding,
161
+ paddingLeft: padding,
162
+ paddingRight: padding
163
+ };
164
+ }
134
165
  });
135
166
  function onMouseOver() {
136
167
  if (props.mode !== "hover" || !menuApi.value) {
@@ -173,6 +204,22 @@ export default defineComponent({
173
204
  close();
174
205
  }
175
206
  }
207
+ watch(() => props.open, (newValue, oldValue) => {
208
+ if (!menuApi.value)
209
+ return;
210
+ if (oldValue === void 0 || newValue === oldValue)
211
+ return;
212
+ if (newValue) {
213
+ menuApi.value.openMenu();
214
+ } else {
215
+ menuApi.value.closeMenu();
216
+ }
217
+ });
218
+ watch(() => menuApi.value?.menuState, (newValue, oldValue) => {
219
+ if (oldValue === void 0 || newValue === oldValue)
220
+ return;
221
+ emit("update:open", newValue === 0);
222
+ });
176
223
  const NuxtLink = resolveComponent("NuxtLink");
177
224
  return {
178
225
  // eslint-disable-next-line vue/no-dupe-keys
@@ -187,6 +234,8 @@ export default defineComponent({
187
234
  onMouseLeave,
188
235
  onClick,
189
236
  omit,
237
+ twMerge,
238
+ twJoin,
190
239
  NuxtLink
191
240
  };
192
241
  }
@@ -1,4 +1,5 @@
1
1
  import type { PropType } from 'vue';
2
+ import { twJoin } from 'tailwind-merge';
2
3
  import { omit } from '../../utils';
3
4
  import type { DropdownItem, PopperOptions } from '../../types';
4
5
  declare const _default: import("vue").DefineComponent<{
@@ -11,6 +12,10 @@ declare const _default: import("vue").DefineComponent<{
11
12
  default: string;
12
13
  validator: (value: string) => boolean;
13
14
  };
15
+ open: {
16
+ type: BooleanConstructor;
17
+ default: undefined;
18
+ };
14
19
  disabled: {
15
20
  type: BooleanConstructor;
16
21
  default: boolean;
@@ -29,11 +34,11 @@ declare const _default: import("vue").DefineComponent<{
29
34
  };
30
35
  class: {
31
36
  type: PropType<any>;
32
- default: undefined;
37
+ default: () => string;
33
38
  };
34
39
  ui: {
35
- type: PropType<Partial<any>>;
36
- default: undefined;
40
+ type: PropType<any>;
41
+ default: () => {};
37
42
  };
38
43
  }, {
39
44
  ui: import("vue").ComputedRef<any>;
@@ -44,11 +49,25 @@ declare const _default: import("vue").DefineComponent<{
44
49
  trigger: import("vue").Ref<import("@vueuse/core").MaybeElement>;
45
50
  container: import("vue").Ref<import("@vueuse/core").MaybeElement>;
46
51
  containerStyle: import("vue").ComputedRef<{
52
+ paddingTop?: undefined;
53
+ paddingBottom?: undefined;
54
+ paddingLeft?: undefined;
55
+ paddingRight?: undefined;
56
+ } | {
47
57
  paddingTop: string;
48
58
  paddingBottom: string;
59
+ paddingLeft?: undefined;
60
+ paddingRight?: undefined;
49
61
  } | {
62
+ paddingLeft: string;
63
+ paddingRight: string;
50
64
  paddingTop?: undefined;
51
65
  paddingBottom?: undefined;
66
+ } | {
67
+ paddingTop: string;
68
+ paddingBottom: string;
69
+ paddingLeft: string;
70
+ paddingRight: string;
52
71
  }>;
53
72
  onMouseOver: () => void;
54
73
  onMouseLeave: () => void;
@@ -59,8 +78,10 @@ declare const _default: import("vue").DefineComponent<{
59
78
  isExternal: any;
60
79
  }) => void;
61
80
  omit: typeof omit;
81
+ twMerge: (...classLists: import("tailwind-merge").ClassNameValue[]) => string;
82
+ twJoin: typeof twJoin;
62
83
  NuxtLink: string | import("vue").ConcreteComponent<{}, any, any, import("vue").ComputedOptions, import("vue").MethodOptions>;
63
- }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
84
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:open"[], "update:open", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
64
85
  items: {
65
86
  type: PropType<DropdownItem[][]>;
66
87
  default: () => never[];
@@ -70,6 +91,10 @@ declare const _default: import("vue").DefineComponent<{
70
91
  default: string;
71
92
  validator: (value: string) => boolean;
72
93
  };
94
+ open: {
95
+ type: BooleanConstructor;
96
+ default: undefined;
97
+ };
73
98
  disabled: {
74
99
  type: BooleanConstructor;
75
100
  default: boolean;
@@ -88,18 +113,21 @@ declare const _default: import("vue").DefineComponent<{
88
113
  };
89
114
  class: {
90
115
  type: PropType<any>;
91
- default: undefined;
116
+ default: () => string;
92
117
  };
93
118
  ui: {
94
- type: PropType<Partial<any>>;
95
- default: undefined;
119
+ type: PropType<any>;
120
+ default: () => {};
96
121
  };
97
- }>>, {
98
- ui: Partial<any>;
122
+ }>> & {
123
+ "onUpdate:open"?: ((...args: any[]) => any) | undefined;
124
+ }, {
125
+ ui: any;
99
126
  popper: PopperOptions;
100
127
  class: any;
101
128
  disabled: boolean;
102
129
  items: DropdownItem[][];
130
+ open: boolean;
103
131
  mode: "click" | "hover";
104
132
  openDelay: number;
105
133
  closeDelay: number;
@@ -28,11 +28,11 @@ export default defineComponent({
28
28
  },
29
29
  class: {
30
30
  type: [String, Object, Array],
31
- default: void 0
31
+ default: () => ""
32
32
  },
33
33
  ui: {
34
34
  type: Object,
35
- default: void 0
35
+ default: () => ({})
36
36
  }
37
37
  },
38
38
  setup(props) {
@@ -12,11 +12,11 @@ declare const _default: import("vue").DefineComponent<{
12
12
  };
13
13
  class: {
14
14
  type: PropType<any>;
15
- default: undefined;
15
+ default: () => "";
16
16
  };
17
17
  ui: {
18
- type: PropType<Partial<any>>;
19
- default: undefined;
18
+ type: PropType<any>;
19
+ default: () => {};
20
20
  };
21
21
  }, {
22
22
  ui: import("vue").ComputedRef<any>;
@@ -36,15 +36,15 @@ declare const _default: import("vue").DefineComponent<{
36
36
  };
37
37
  class: {
38
38
  type: PropType<any>;
39
- default: undefined;
39
+ default: () => "";
40
40
  };
41
41
  ui: {
42
- type: PropType<Partial<any>>;
43
- default: undefined;
42
+ type: PropType<any>;
43
+ default: () => {};
44
44
  };
45
45
  }>>, {
46
46
  size: KbdSize;
47
- ui: Partial<any>;
47
+ ui: any;
48
48
  value: string;
49
49
  class: any;
50
50
  }, {}>;
@@ -21,7 +21,7 @@
21
21
  :role="disabled ? 'link' : undefined"
22
22
  :rel="rel"
23
23
  :target="target"
24
- :class="active ? activeClass : resolveLinkClass(route, $route, { isActive, isExactActive })"
24
+ :class="active !== undefined ? (active ? activeClass : inactiveClass) : resolveLinkClass(route, $route, { isActive, isExactActive })"
25
25
  @click="(e) => !isExternal && navigate(e)"
26
26
  >
27
27
  <slot v-bind="{ isActive: exact ? isExactActive : isActive }" />
@@ -47,7 +47,7 @@ export default defineComponent({
47
47
  },
48
48
  active: {
49
49
  type: Boolean,
50
- default: false
50
+ default: void 0
51
51
  },
52
52
  exact: {
53
53
  type: Boolean,
@@ -79,11 +79,11 @@ export default defineComponent({
79
79
  },
80
80
  class: {
81
81
  type: [String, Object, Array],
82
- default: void 0
82
+ default: () => ""
83
83
  },
84
84
  ui: {
85
85
  type: Object,
86
- default: void 0
86
+ default: () => ({})
87
87
  }
88
88
  },
89
89
  setup(props) {
@@ -36,11 +36,11 @@ declare const _default: import("vue").DefineComponent<{
36
36
  };
37
37
  class: {
38
38
  type: PropType<any>;
39
- default: undefined;
39
+ default: () => "";
40
40
  };
41
41
  ui: {
42
- type: PropType<Partial<any>>;
43
- default: undefined;
42
+ type: PropType<any>;
43
+ default: () => {};
44
44
  };
45
45
  }, {
46
46
  ui: import("vue").ComputedRef<any>;
@@ -93,15 +93,15 @@ declare const _default: import("vue").DefineComponent<{
93
93
  };
94
94
  class: {
95
95
  type: PropType<any>;
96
- default: undefined;
96
+ default: () => "";
97
97
  };
98
98
  ui: {
99
- type: PropType<Partial<any>>;
100
- default: undefined;
99
+ type: PropType<any>;
100
+ default: () => {};
101
101
  };
102
102
  }>>, {
103
103
  size: "sm" | "md" | "xs" | "2xs" | "lg" | "xl" | "2xl";
104
- ui: Partial<any>;
104
+ ui: any;
105
105
  value: number;
106
106
  icon: string;
107
107
  color: any;