@maas/vue-equipment 0.29.1 → 0.29.3

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 (169) hide show
  1. package/dist/composables/index.js +5 -10
  2. package/dist/composables/index.js.map +1 -1
  3. package/dist/composables/index.mjs +5 -10
  4. package/dist/composables/index.mjs.map +1 -1
  5. package/dist/nuxt/module.json +1 -1
  6. package/dist/nuxt/module.mjs +16 -9
  7. package/dist/plugins/MagicCommand/index.d.ts +2 -4
  8. package/dist/plugins/MagicCommand/index.mjs +2 -2
  9. package/dist/plugins/MagicCommand/src/components/MagicCommandBody.vue +3 -3
  10. package/dist/plugins/MagicCommand/src/components/MagicCommandDrawer.vue +2 -2
  11. package/dist/plugins/MagicCommand/src/components/MagicCommandDrawer.vue.d.ts +2 -2
  12. package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue +4 -4
  13. package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue.d.ts +5 -5
  14. package/dist/plugins/MagicCommand/src/components/MagicCommandModal.vue +2 -2
  15. package/dist/plugins/MagicCommand/src/components/MagicCommandModal.vue.d.ts +2 -2
  16. package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue +4 -4
  17. package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue.d.ts +5 -5
  18. package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue +4 -2
  19. package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue.d.ts +3 -3
  20. package/dist/plugins/MagicCommand/src/composables/private/useCommandScroll.mjs +1 -1
  21. package/dist/plugins/MagicCommand/src/composables/private/useCommandStore.mjs +1 -1
  22. package/dist/plugins/MagicCommand/src/symbols/index.d.ts +3 -3
  23. package/dist/plugins/MagicCommand/src/symbols/index.mjs +2 -2
  24. package/dist/plugins/MagicCommand/src/types/index.d.ts +5 -5
  25. package/dist/plugins/MagicCommand/src/utils/defaultOptions.d.ts +2 -2
  26. package/dist/plugins/MagicCookie/index.d.ts +0 -2
  27. package/dist/plugins/MagicCookie/src/components/MagicCookie.vue +6 -7
  28. package/dist/plugins/MagicCookie/src/components/MagicCookie.vue.d.ts +6 -6
  29. package/dist/plugins/MagicCookie/src/composables/private/useCookieApi.d.ts +17 -0
  30. package/dist/plugins/MagicCookie/src/composables/private/{defineCookieApi.mjs → useCookieApi.mjs} +4 -4
  31. package/dist/plugins/MagicCookie/src/composables/useMagicCookie.d.ts +5 -5
  32. package/dist/plugins/MagicCookie/src/composables/useMagicCookie.mjs +4 -4
  33. package/dist/plugins/MagicCookie/src/types/index.d.ts +6 -10
  34. package/dist/plugins/MagicDraggable/index.d.ts +2 -2
  35. package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue +4 -4
  36. package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue.d.ts +6 -6
  37. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableState.d.ts +1 -2
  38. package/dist/plugins/MagicDraggable/src/types/index.d.ts +1 -1
  39. package/dist/plugins/MagicDraggable/src/utils/defaultOptions.d.ts +4 -4
  40. package/dist/plugins/MagicDrawer/index.d.ts +2 -2
  41. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +3 -4
  42. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue.d.ts +3 -3
  43. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.d.ts +2 -2
  44. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.d.ts +3 -3
  45. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.mjs +2 -2
  46. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +3 -1
  47. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerProgress.mjs +3 -1
  48. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.mjs +1 -3
  49. package/dist/plugins/MagicDrawer/src/types/index.d.ts +1 -1
  50. package/dist/plugins/MagicDrawer/src/utils/defaultOptions.d.ts +7 -7
  51. package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.d.ts +494 -170
  52. package/dist/plugins/MagicEmitter/src/types/index.d.ts +9 -9
  53. package/dist/plugins/MagicMarquee/nuxt.mjs +1 -5
  54. package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue +3 -3
  55. package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue.d.ts +3 -3
  56. package/dist/plugins/MagicMenu/index.d.ts +4 -0
  57. package/dist/plugins/MagicMenu/index.mjs +27 -0
  58. package/dist/plugins/MagicMenu/nuxt.d.ts +2 -0
  59. package/dist/plugins/MagicMenu/nuxt.mjs +14 -0
  60. package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue +140 -0
  61. package/dist/plugins/MagicMenu/src/components/MagicMenuContent.vue.d.ts +26 -0
  62. package/dist/plugins/MagicMenu/src/components/MagicMenuFloat.vue +169 -0
  63. package/dist/plugins/MagicMenu/src/components/MagicMenuFloat.vue.d.ts +24 -0
  64. package/dist/plugins/MagicMenu/src/components/MagicMenuItem.vue +137 -0
  65. package/dist/plugins/MagicMenu/src/components/MagicMenuItem.vue.d.ts +29 -0
  66. package/dist/plugins/MagicMenu/src/components/MagicMenuProvider.vue +106 -0
  67. package/dist/plugins/MagicMenu/src/components/MagicMenuProvider.vue.d.ts +24 -0
  68. package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue +122 -0
  69. package/dist/plugins/MagicMenu/src/components/MagicMenuTrigger.vue.d.ts +26 -0
  70. package/dist/plugins/MagicMenu/src/components/MagicMenuView.vue +53 -0
  71. package/dist/plugins/MagicMenu/src/components/MagicMenuView.vue.d.ts +21 -0
  72. package/dist/plugins/MagicMenu/src/composables/private/useMenuCallback.d.ts +18 -0
  73. package/dist/plugins/MagicMenu/src/composables/private/useMenuCallback.mjs +52 -0
  74. package/dist/plugins/MagicMenu/src/composables/private/useMenuDOM.d.ts +6 -0
  75. package/dist/plugins/MagicMenu/src/composables/private/useMenuDOM.mjs +42 -0
  76. package/dist/plugins/MagicMenu/src/composables/private/useMenuItem.d.ts +15 -0
  77. package/dist/plugins/MagicMenu/src/composables/private/useMenuItem.mjs +75 -0
  78. package/dist/plugins/MagicMenu/src/composables/private/useMenuKeyListener.d.ts +10 -0
  79. package/dist/plugins/MagicMenu/src/composables/private/useMenuKeyListener.mjs +178 -0
  80. package/dist/plugins/MagicMenu/src/composables/private/useMenuState.d.ts +7 -0
  81. package/dist/plugins/MagicMenu/src/composables/private/useMenuState.mjs +48 -0
  82. package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.d.ts +18 -0
  83. package/dist/plugins/MagicMenu/src/composables/private/useMenuTrigger.mjs +262 -0
  84. package/dist/plugins/MagicMenu/src/composables/private/useMenuUtils.d.ts +3 -0
  85. package/dist/plugins/MagicMenu/src/composables/private/useMenuUtils.mjs +16 -0
  86. package/dist/plugins/MagicMenu/src/composables/private/useMenuView.d.ts +20 -0
  87. package/dist/plugins/MagicMenu/src/composables/private/useMenuView.mjs +116 -0
  88. package/dist/plugins/MagicMenu/src/symbols/index.d.ts +9 -0
  89. package/dist/plugins/MagicMenu/src/symbols/index.mjs +16 -0
  90. package/dist/plugins/MagicMenu/src/types/index.d.ts +72 -0
  91. package/dist/plugins/MagicMenu/src/types/index.mjs +0 -0
  92. package/dist/plugins/MagicMenu/src/utils/defaultOptions.d.ts +4 -0
  93. package/dist/plugins/MagicMenu/src/utils/defaultOptions.mjs +9 -0
  94. package/dist/plugins/MagicModal/index.d.ts +2 -2
  95. package/dist/plugins/MagicModal/src/components/MagicModal.vue +4 -4
  96. package/dist/plugins/MagicModal/src/components/MagicModal.vue.d.ts +5 -5
  97. package/dist/plugins/MagicModal/src/composables/private/useModalCallback.d.ts +2 -2
  98. package/dist/plugins/MagicModal/src/composables/private/useModalDOM.d.ts +3 -3
  99. package/dist/plugins/MagicModal/src/composables/private/useModalDOM.mjs +2 -2
  100. package/dist/plugins/MagicModal/src/types/index.d.ts +1 -1
  101. package/dist/plugins/MagicModal/src/utils/defaultOptions.d.ts +2 -2
  102. package/dist/plugins/MagicNoise/index.d.ts +1 -2
  103. package/dist/plugins/MagicNoise/index.mjs +1 -2
  104. package/dist/plugins/MagicNoise/nuxt.mjs +1 -5
  105. package/dist/plugins/MagicNoise/src/components/MagicNoise.vue +4 -4
  106. package/dist/plugins/MagicNoise/src/components/MagicNoise.vue.d.ts +5 -5
  107. package/dist/plugins/MagicNoise/src/composables/private/useNoiseApi.d.ts +2 -2
  108. package/dist/plugins/MagicNoise/src/types/index.d.ts +1 -1
  109. package/dist/plugins/MagicNoise/src/utils/defaultOptions.d.ts +2 -2
  110. package/dist/plugins/MagicPlayer/index.d.ts +0 -1
  111. package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayer.vue +2 -2
  112. package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayer.vue.d.ts +3 -3
  113. package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayerControls.vue +2 -2
  114. package/dist/plugins/MagicPlayer/src/components/MagicAudioPlayerControls.vue.d.ts +2 -2
  115. package/dist/plugins/MagicPlayer/src/components/MagicPlayer.vue +9 -30
  116. package/dist/plugins/MagicPlayer/src/components/MagicPlayer.vue.d.ts +10 -14
  117. package/dist/plugins/MagicPlayer/src/components/MagicPlayerControls.vue +79 -56
  118. package/dist/plugins/MagicPlayer/src/components/MagicPlayerControls.vue.d.ts +20 -2
  119. package/dist/plugins/MagicPlayer/src/components/MagicPlayerDisplayTime.vue +2 -2
  120. package/dist/plugins/MagicPlayer/src/components/MagicPlayerDisplayTime.vue.d.ts +3 -3
  121. package/dist/plugins/MagicPlayer/src/components/MagicPlayerMuxPopover.vue +9 -7
  122. package/dist/plugins/MagicPlayer/src/components/MagicPlayerMuxPopover.vue.d.ts +2 -2
  123. package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue +2 -2
  124. package/dist/plugins/MagicPlayer/src/components/MagicPlayerOverlay.vue.d.ts +2 -2
  125. package/dist/plugins/MagicPlayer/src/components/MagicPlayerTimeline.vue +2 -3
  126. package/dist/plugins/MagicPlayer/src/components/MagicPlayerTimeline.vue.d.ts +2 -2
  127. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerMediaApi.mjs +3 -0
  128. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.d.ts +2 -2
  129. package/dist/plugins/MagicPlayer/src/composables/private/usePlayerRuntime.mjs +23 -4
  130. package/dist/plugins/MagicPlayer/src/types/index.d.ts +1 -1
  131. package/dist/plugins/MagicScroll/index.d.ts +3 -3
  132. package/dist/plugins/MagicScroll/index.mjs +1 -2
  133. package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue +11 -7
  134. package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue.d.ts +2 -2
  135. package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue +2 -2
  136. package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue.d.ts +3 -3
  137. package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue +2 -2
  138. package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue.d.ts +3 -3
  139. package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue +2 -2
  140. package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue.d.ts +3 -3
  141. package/dist/plugins/MagicScroll/src/components/MagicScrollTransform.vue +2 -2
  142. package/dist/plugins/MagicScroll/src/components/MagicScrollTransform.vue.d.ts +3 -3
  143. package/dist/plugins/MagicScroll/src/composables/private/useCollisionDetect.d.ts +28 -0
  144. package/dist/plugins/MagicScroll/src/composables/private/useCollisionDetect.mjs +144 -0
  145. package/dist/plugins/MagicScroll/src/composables/private/useScrollApi.d.ts +0 -1
  146. package/dist/plugins/MagicScroll/src/types/index.d.ts +19 -25
  147. package/dist/plugins/MagicToast/index.d.ts +0 -2
  148. package/dist/plugins/MagicToast/src/components/MagicToast.vue +4 -4
  149. package/dist/plugins/MagicToast/src/components/MagicToast.vue.d.ts +2 -2
  150. package/dist/plugins/MagicToast/src/components/MagicToastComponent.vue +4 -4
  151. package/dist/plugins/MagicToast/src/components/MagicToastComponent.vue.d.ts +5 -5
  152. package/dist/plugins/MagicToast/src/composables/private/useToastApi.d.ts +1 -1
  153. package/dist/plugins/MagicToast/src/composables/private/useToastCallback.d.ts +3 -3
  154. package/dist/plugins/MagicToast/src/composables/private/useToastCallback.mjs +5 -7
  155. package/dist/plugins/MagicToast/src/composables/private/useToastInternalApi.d.ts +2 -2
  156. package/dist/plugins/MagicToast/src/composables/private/useToastStore.d.ts +4 -14
  157. package/dist/plugins/MagicToast/src/composables/useMagicToast.d.ts +6 -6
  158. package/dist/plugins/MagicToast/src/types/index.d.ts +20 -21
  159. package/dist/plugins/MagicToast/src/utils/defaultOptions.d.ts +2 -2
  160. package/dist/plugins/index.d.ts +1 -0
  161. package/dist/plugins/index.mjs +1 -0
  162. package/dist/utils/index.js +4 -8
  163. package/dist/utils/index.js.map +1 -1
  164. package/dist/utils/index.mjs +4 -8
  165. package/dist/utils/index.mjs.map +1 -1
  166. package/package.json +9 -4
  167. package/dist/plugins/MagicCookie/src/composables/private/defineCookieApi.d.ts +0 -12
  168. package/dist/plugins/MagicScroll/src/composables/useCollisionDetect.d.ts +0 -6
  169. package/dist/plugins/MagicScroll/src/composables/useCollisionDetect.mjs +0 -119
@@ -1,21 +1,21 @@
1
- import type { CollisionEvents } from '../../../MagicScroll.js';
2
- import type { CommandEvents } from '../../../MagicCommand.js';
3
- import type { CookieEvents } from '../../../MagicCookie.js';
4
- import type { DraggableEvents } from '../../../MagicDraggable.js';
5
- import type { DrawerEvents } from '../../../MagicDrawer.js';
6
- import type { ModalEvents } from '../../../MagicModal.js';
7
- import type { ToastEvents } from '../../../MagicToast.js';
1
+ import type { CookieEvents } from '../../../MagicCookie/src/types/index.js';
2
+ import type { DraggableEvents } from '../../../MagicDraggable/src/types/index.js';
3
+ import type { DrawerEvents } from '../../../MagicDrawer/src/types/index.js';
4
+ import type { ModalEvents } from '../../../MagicModal/src/types/index.js';
5
+ import type { MenuEvents } from '../../../MagicMenu/src/types/index.js';
6
+ import type { ScrollEvents } from '../../../MagicScroll/src/types/index.js';
7
+ import type { ToastEvents } from '../../../MagicToast/src/types/index.js';
8
8
  type MergeTypes<T, U> = {
9
9
  [K in keyof T]: K extends keyof U ? T[K] | U[K] : T[K];
10
10
  } & Omit<U, keyof T>;
11
11
  type Merge<T extends unknown[]> = T extends [infer First, ...infer Rest] ? MergeTypes<First, Merge<Rest>> : {};
12
12
  export type MagicEmitterEvents = Merge<[
13
- CollisionEvents,
14
- CommandEvents,
15
13
  CookieEvents,
16
14
  DraggableEvents,
17
15
  DrawerEvents,
18
16
  ModalEvents,
17
+ MenuEvents,
18
+ ScrollEvents,
19
19
  ToastEvents
20
20
  ]>;
21
21
  export {};
@@ -1,8 +1,4 @@
1
- import {
2
- defineNuxtModule,
3
- createResolver,
4
- addComponentsDir
5
- } from "@nuxt/kit";
1
+ import { defineNuxtModule, createResolver, addComponentsDir } from "@nuxt/kit";
6
2
  export default defineNuxtModule({
7
3
  meta: {
8
4
  name: "@maas/vue-equipment/nuxt/MagicMarquee"
@@ -19,12 +19,12 @@
19
19
  import { ref, computed, onMounted } from 'vue'
20
20
  import { useMarqueeApi } from '../composables/private/useMarqueeApi'
21
21
 
22
- interface Props {
22
+ interface MagicMarqueeProps {
23
23
  direction?: 'reverse' | 'normal'
24
24
  speed?: number
25
25
  }
26
26
 
27
- const props = withDefaults(defineProps<Props>(), {
27
+ const props = withDefaults(defineProps<MagicMarqueeProps>(), {
28
28
  direction: 'normal',
29
29
  speed: 1,
30
30
  })
@@ -53,5 +53,5 @@ defineExpose({
53
53
  </script>
54
54
 
55
55
  <style>
56
- :root{--magic-marquee-gap:1rem;--magic-marquee-content-width:unset;--magic-marquee-transform-target-x:-100%}@keyframes magicMarqueeScrollX{0%{transform:translateZ(0)}to{transform:translate3d(-100%,0,0)}}@keyframes magicMarqueeScrollY{0%{transform:translateZ(0)}to{transform:translate3d(0,-100%,0)}}.magic-marquee{overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.magic-marquee__track{display:flex;justify-content:flex-start;position:relative;width:100%}.magic-marquee__content{animation-direction:var(--magic-marquee-animation-direction,normal);animation-duration:var(--magic-marquee-animation-duration);animation-iteration-count:infinite;animation-name:var(--magic-marquee-animation-name);animation-play-state:var(--magic-marquee-animation-play-state,running);animation-timing-function:linear;backface-visibility:hidden;flex-grow:0;flex-shrink:0;padding-right:var(--magic-marquee-gap);white-space:nowrap;width:var(--magic-marquee-content-width)}
56
+ :root{--magic-marquee-gap:1rem;--magic-marquee-content-width:unset;--magic-marquee-transform-target-x:-100%}@keyframes magicMarqueeScrollX{0%{transform:translateZ(0)}to{transform:translate3d(-100%,0,0)}}@keyframes magicMarqueeScrollY{0%{transform:translateZ(0)}to{transform:translate3d(0,-100%,0)}}.magic-marquee{overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.magic-marquee__track{display:flex;justify-content:flex-start;position:relative;width:100%}.magic-marquee__content{animation-direction:var(--magic-marquee-animation-direction,normal);animation-duration:var(--magic-marquee-animation-duration);animation-iteration-count:infinite;animation-name:var(--magic-marquee-animation-name);animation-play-state:var(--magic-marquee-animation-play-state,running);animation-timing-function:linear;backface-visibility:hidden;display:flex;flex-grow:0;flex-shrink:0;gap:var(--magic-marquee-gap);padding-right:var(--magic-marquee-gap);white-space:nowrap;width:var(--magic-marquee-content-width)}
57
57
  </style>
@@ -1,15 +1,15 @@
1
- interface Props {
1
+ interface MagicMarqueeProps {
2
2
  direction?: 'reverse' | 'normal';
3
3
  speed?: number;
4
4
  }
5
- declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToOption<Props>, {
5
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToOption<MagicMarqueeProps>, {
6
6
  direction: string;
7
7
  speed: number;
8
8
  }>, {
9
9
  playing: import("vue").Ref<boolean>;
10
10
  play: () => void;
11
11
  pause: () => void;
12
- }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<Props>, {
12
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<MagicMarqueeProps>, {
13
13
  direction: string;
14
14
  speed: number;
15
15
  }>>>, {
@@ -0,0 +1,4 @@
1
+ import { MagicMenuInstanceId, MagicMenuItemActive, MagicMenuParentTree } from './src/symbols/index.js';
2
+ import type { Plugin } from 'vue';
3
+ declare const MagicMenuPlugin: Plugin;
4
+ export { MagicMenuPlugin, MagicMenuInstanceId, MagicMenuItemActive, MagicMenuParentTree, };
@@ -0,0 +1,27 @@
1
+ import MagicMenuFloat from "./src/components/MagicMenuFloat.vue";
2
+ import MagicMenuContent from "./src/components/MagicMenuContent.vue";
3
+ import MagicMenuItem from "./src/components/MagicMenuItem.vue";
4
+ import MagicMenuProvider from "./src/components/MagicMenuProvider.vue";
5
+ import MagicMenuTrigger from "./src/components/MagicMenuTrigger.vue";
6
+ import MagicMenuView from "./src/components/MagicMenuView.vue";
7
+ import {
8
+ MagicMenuInstanceId,
9
+ MagicMenuItemActive,
10
+ MagicMenuParentTree
11
+ } from "./src/symbols/index.mjs";
12
+ const MagicMenuPlugin = {
13
+ install: (app) => {
14
+ app.component("MagicMenuFloat", MagicMenuFloat);
15
+ app.component("MagicMenuContent", MagicMenuContent);
16
+ app.component("MagicMenuItem", MagicMenuItem);
17
+ app.component("MagicMenuProvider", MagicMenuProvider);
18
+ app.component("MagicMenuTrigger", MagicMenuTrigger);
19
+ app.component("MagicMenuView", MagicMenuView);
20
+ }
21
+ };
22
+ export {
23
+ MagicMenuPlugin,
24
+ MagicMenuInstanceId,
25
+ MagicMenuItemActive,
26
+ MagicMenuParentTree
27
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@nuxt/schema").NuxtModule<import("@nuxt/schema").ModuleOptions>;
2
+ export default _default;
@@ -0,0 +1,14 @@
1
+ import { defineNuxtModule, createResolver, addComponentsDir } from "@nuxt/kit";
2
+ export default defineNuxtModule({
3
+ meta: {
4
+ name: "@maas/vue-equipment/nuxt/MagicMenu"
5
+ },
6
+ setup(_options, _nuxt) {
7
+ const resolver = createResolver(import.meta.url);
8
+ addComponentsDir({
9
+ path: resolver.resolve("src/components"),
10
+ global: true,
11
+ pathPrefix: false
12
+ });
13
+ }
14
+ });
@@ -0,0 +1,140 @@
1
+ <template>
2
+ <teleport to="body" v-if="wrapperActive">
3
+ <transition
4
+ :name="mappedTransition"
5
+ :on-before-enter="onBeforeEnter"
6
+ :on-enter="onEnter"
7
+ :on-after-enter="onAfterEnter"
8
+ :on-before-leave="onBeforeLeave"
9
+ :on-leave="onLeave"
10
+ :on-after-leave="onAfterLeave"
11
+ >
12
+ <div
13
+ class="magic-menu-content"
14
+ :data-id="`${viewId}-content`"
15
+ v-if="innerActive"
16
+ >
17
+ <magic-menu-float :placement="placement" :arrow="arrow">
18
+ <template #arrow v-if="$slots.arrow && arrow">
19
+ <slot name="arrow" />
20
+ </template>
21
+ <template #default>
22
+ <div class="magic-menu-content__inner" ref="contentRef">
23
+ <slot />
24
+ </div>
25
+ </template>
26
+ </magic-menu-float>
27
+ </div>
28
+ </transition>
29
+ </teleport>
30
+ </template>
31
+
32
+ <script lang="ts" setup>
33
+ import { ref, inject, provide, nextTick, watch, computed } from 'vue'
34
+ import type { Placement } from '@floating-ui/vue'
35
+ import { useMenuView } from '../composables/private/useMenuView'
36
+ import {
37
+ MagicMenuInstanceId,
38
+ MagicMenuViewId,
39
+ MagicMenuContentId,
40
+ } from '../symbols'
41
+
42
+ import '@maas/vue-equipment/utils/css/animations/fade-in.css'
43
+ import '@maas/vue-equipment/utils/css/animations/fade-out.css'
44
+ import { useMenuState } from '../composables/private/useMenuState'
45
+ import { useMenuCallback } from '../composables/private/useMenuCallback'
46
+ import { useMenuDOM } from '../composables/private/useMenuDOM'
47
+
48
+ interface MagicMenuContentProps {
49
+ placement?: Placement
50
+ arrow?: boolean
51
+ }
52
+
53
+ defineProps<MagicMenuContentProps>()
54
+
55
+ const contentRef = ref<HTMLElement | undefined>(undefined)
56
+
57
+ const instanceId = inject(MagicMenuInstanceId, undefined)
58
+ const viewId = inject(MagicMenuViewId, undefined)
59
+
60
+ if (!instanceId) {
61
+ throw new Error('MagicMenuContent must be nested inside MagicMenuProvider')
62
+ }
63
+
64
+ if (!viewId) {
65
+ throw new Error('MagicMenuContent must be nested inside MagicMenuView')
66
+ }
67
+
68
+ const { getView } = useMenuView(instanceId)
69
+ const view = getView(viewId)
70
+
71
+ const { initializeState } = useMenuState(instanceId)
72
+ const state = initializeState()
73
+
74
+ const mappedTransition = computed(() => {
75
+ switch (true) {
76
+ case !!view?.parent.item:
77
+ return state.options.transition?.nested
78
+ case state.active:
79
+ return state.options.transition?.initial
80
+ case !state.active:
81
+ return state.options.transition?.final
82
+ default:
83
+ return ''
84
+ }
85
+ })
86
+
87
+ const { lockScroll, unlockScroll } = useMenuDOM()
88
+ const {
89
+ onBeforeEnter,
90
+ onEnter,
91
+ onAfterEnter,
92
+ onBeforeLeave,
93
+ onLeave,
94
+ onAfterLeave,
95
+ } = useMenuCallback({
96
+ state,
97
+ instanceId,
98
+ viewId,
99
+ lockScroll,
100
+ unlockScroll,
101
+ })
102
+
103
+ // Split isActive into two values to animate content smoothly
104
+ const innerActive = ref(false)
105
+ const wrapperActive = ref(false)
106
+
107
+ // Handle state
108
+ async function onOpen() {
109
+ wrapperActive.value = true
110
+ await nextTick()
111
+ innerActive.value = true
112
+ await nextTick()
113
+ if (view) {
114
+ view.children.content = contentRef.value
115
+ }
116
+ }
117
+
118
+ async function onClose() {
119
+ innerActive.value = false
120
+ await nextTick()
121
+ wrapperActive.value = false
122
+ }
123
+
124
+ watch(
125
+ () => view?.active,
126
+ async (value) => {
127
+ if (value) {
128
+ await onOpen()
129
+ } else {
130
+ onClose()
131
+ }
132
+ }
133
+ )
134
+
135
+ provide(MagicMenuContentId, `${viewId}-content`)
136
+ </script>
137
+
138
+ <style>
139
+ .magic-menu-content{-webkit-user-select:none;-moz-user-select:none;user-select:none}.magic-menu-content__inner{border:0;padding:0}.magic-menu-content__initial-enter-active{animation:fade-in 50ms ease}.magic-menu-content__final-leave-active{animation:fade-out .15s ease}.magic-menu-content__nested-enter-active{animation:fade-in .1s ease}
140
+ </style>
@@ -0,0 +1,26 @@
1
+ import type { Placement } from '@floating-ui/vue';
2
+ import '@maas/vue-equipment/utils/css/animations/fade-in.css';
3
+ import '@maas/vue-equipment/utils/css/animations/fade-out.css';
4
+ interface MagicMenuContentProps {
5
+ placement?: Placement;
6
+ arrow?: boolean;
7
+ }
8
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_TypePropsToOption<MagicMenuContentProps>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToOption<MagicMenuContentProps>>>, {}, {}>, {
9
+ arrow?(_: {}): any;
10
+ default?(_: {}): any;
11
+ }>;
12
+ export default _default;
13
+ type __VLS_WithTemplateSlots<T, S> = T & {
14
+ new (): {
15
+ $slots: S;
16
+ };
17
+ };
18
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
19
+ type __VLS_TypePropsToOption<T> = {
20
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
21
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
22
+ } : {
23
+ type: import('vue').PropType<T[K]>;
24
+ required: true;
25
+ };
26
+ };
@@ -0,0 +1,169 @@
1
+ <template>
2
+ <div
3
+ class="magic-menu-float"
4
+ ref="elRef"
5
+ :style="floatingStyles"
6
+ :class="placementClasses"
7
+ >
8
+ <div
9
+ v-if="hasArrow"
10
+ ref="arrowRef"
11
+ class="magic-menu-float__arrow"
12
+ :style="arrowStyles"
13
+ >
14
+ <slot name="arrow">
15
+ <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
16
+ <polygon :points="polygonPoints" fill="currentColor" />
17
+ </svg>
18
+ </slot>
19
+ </div>
20
+ <slot />
21
+ </div>
22
+ </template>
23
+
24
+ <script lang="ts" setup>
25
+ import { ref, computed, inject } from 'vue'
26
+ import {
27
+ useFloating,
28
+ autoUpdate,
29
+ flip,
30
+ shift,
31
+ limitShift,
32
+ arrow,
33
+ type Placement,
34
+ } from '@floating-ui/vue'
35
+ import { MagicMenuInstanceId, MagicMenuViewId } from '../symbols'
36
+ import { useMenuView } from '../composables/private/useMenuView'
37
+ import { useMenuState } from '../composables/private/useMenuState'
38
+
39
+ interface MagicMenuFloatProps {
40
+ placement?: Placement
41
+ arrow?: boolean
42
+ }
43
+
44
+ const props = defineProps<MagicMenuFloatProps>()
45
+
46
+ const elRef = ref<HTMLElement | undefined>(undefined)
47
+ const arrowRef = ref<HTMLElement | undefined>(undefined)
48
+
49
+ const instanceId = inject(MagicMenuInstanceId, undefined)
50
+ const viewId = inject(MagicMenuViewId, undefined)
51
+
52
+ const { initializeState } = useMenuState(instanceId ?? '')
53
+ const state = initializeState()
54
+
55
+ const { getView } = useMenuView(instanceId ?? '')
56
+ const view = getView(viewId ?? '')
57
+
58
+ const mappedPlacement = computed(() => {
59
+ if (props.placement) {
60
+ return props.placement
61
+ }
62
+
63
+ switch (state.options.mode) {
64
+ case 'menubar':
65
+ return !view?.parent.item ? 'bottom-start' : 'right-start'
66
+ case 'dropdown':
67
+ return !view?.parent.item ? 'bottom' : 'right-start'
68
+ case 'context':
69
+ return 'right-start'
70
+ }
71
+ })
72
+
73
+ const hasArrow = computed(
74
+ () => props.arrow || (state.options.mode === 'dropdown' && !view?.parent.item)
75
+ )
76
+
77
+ const mappedMiddleware = computed(() => {
78
+ const middleware = [flip()]
79
+
80
+ if (view?.parent.item) {
81
+ middleware.push(shift({ crossAxis: true, limiter: limitShift() }))
82
+ }
83
+
84
+ if (hasArrow.value) {
85
+ middleware.push(arrow({ element: arrowRef }))
86
+ }
87
+
88
+ return middleware
89
+ })
90
+
91
+ const referenceEl = computed(() => {
92
+ if (view?.click) {
93
+ return {
94
+ getBoundingClientRect() {
95
+ return {
96
+ width: 0,
97
+ height: 0,
98
+ x: view.click!.x,
99
+ y: view.click!.y,
100
+ top: view.click!.y,
101
+ left: view.click!.x,
102
+ right: view.click!.x,
103
+ bottom: view.click!.y,
104
+ }
105
+ },
106
+ }
107
+ } else {
108
+ return view?.children?.trigger
109
+ }
110
+ })
111
+
112
+ const { floatingStyles, placement, middlewareData } = useFloating(
113
+ referenceEl,
114
+ elRef,
115
+ {
116
+ placement: mappedPlacement,
117
+ whileElementsMounted: autoUpdate,
118
+ middleware: mappedMiddleware,
119
+ }
120
+ )
121
+
122
+ const arrowStyles = computed(() => {
123
+ if (!hasArrow.value) {
124
+ return {}
125
+ }
126
+
127
+ let translate = 'translate3d('
128
+ ;(translate +=
129
+ middlewareData.value.arrow?.x != null
130
+ ? `${middlewareData.value.arrow.x}px`
131
+ : '0'),
132
+ (translate += ', ')
133
+ ;(translate +=
134
+ middlewareData.value.arrow?.y != null
135
+ ? `${middlewareData.value.arrow.y}px`
136
+ : '0'),
137
+ (translate += ', 0)')
138
+
139
+ return {
140
+ transform: translate,
141
+ }
142
+ })
143
+
144
+ const placementClasses = computed(() => {
145
+ return placement.value
146
+ .split('-')
147
+ .map((value) => `-${value}`)
148
+ .join(' ')
149
+ })
150
+
151
+ const polygonPoints = computed(() => {
152
+ const position = placement.value.split('-')[0]
153
+
154
+ switch (position) {
155
+ case 'bottom':
156
+ return '50,50 100,100 0,100'
157
+ case 'top':
158
+ return '50,50 100,0 0,0'
159
+ case 'right':
160
+ return '50,50 100,100 100,0'
161
+ case 'left':
162
+ return '50,50 0,100 0,0'
163
+ }
164
+ })
165
+ </script>
166
+
167
+ <style>
168
+ .magic-menu-float{display:flex;z-index:var(--magic-menu-float-z-index,999)}.magic-menu-float.-top{flex-direction:column-reverse}.magic-menu-float.-bottom{flex-direction:column}.magic-menu-float.-left{flex-direction:row-reverse}.magic-menu-float.-right{flex-direction:row}.magic-menu-float__arrow{color:var(--magic-menu-float-arrow-color,inherit);height:var(--magic-menu-float-arrow-height,.75rem);width:var(--magic-menu-float-arrow-width,.75rem)}.magic-menu-float__arrow svg{height:100%;width:100%}
169
+ </style>
@@ -0,0 +1,24 @@
1
+ import { type Placement } from '@floating-ui/vue';
2
+ interface MagicMenuFloatProps {
3
+ placement?: Placement;
4
+ arrow?: boolean;
5
+ }
6
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_TypePropsToOption<MagicMenuFloatProps>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToOption<MagicMenuFloatProps>>>, {}, {}>, {
7
+ arrow?(_: {}): any;
8
+ default?(_: {}): any;
9
+ }>;
10
+ export default _default;
11
+ type __VLS_WithTemplateSlots<T, S> = T & {
12
+ new (): {
13
+ $slots: S;
14
+ };
15
+ };
16
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
17
+ type __VLS_TypePropsToOption<T> = {
18
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
19
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
20
+ } : {
21
+ type: import('vue').PropType<T[K]>;
22
+ required: true;
23
+ };
24
+ };
@@ -0,0 +1,137 @@
1
+ <template>
2
+ <div
3
+ class="magic-menu-item"
4
+ ref="elRef"
5
+ :id="mappedId"
6
+ :class="{ '-active': item.active, '-disabled': disabled }"
7
+ @mouseenter="guardedSelect"
8
+ @mousemove="guardedSelect"
9
+ @touchstart.passive="guardedSelect"
10
+ @mouseleave="guardedUnselect"
11
+ @click="onClick"
12
+ >
13
+ <slot :is-active="item.active" :is-disabled="disabled" />
14
+ </div>
15
+ </template>
16
+
17
+ <script lang="ts" setup>
18
+ import { computed, inject, provide, onBeforeUnmount, watch } from 'vue'
19
+ import { uuid } from '@maas/vue-equipment/utils'
20
+ import { useMenuItem } from '../composables/private/useMenuItem'
21
+ import { useMenuState } from '../composables/private/useMenuState'
22
+ import { useMenuView } from '../composables/private/useMenuView'
23
+ import {
24
+ MagicMenuInstanceId,
25
+ MagicMenuViewId,
26
+ MagicMenuContentId,
27
+ MagicMenuItemId,
28
+ MagicMenuItemActive,
29
+ } from '../symbols'
30
+
31
+ interface MagicMenuItemProps {
32
+ id?: string
33
+ disabled?: boolean
34
+ }
35
+
36
+ const props = defineProps<MagicMenuItemProps>()
37
+ const emit = defineEmits<{
38
+ (e: 'click', event: MouseEvent): void
39
+ }>()
40
+
41
+ const instanceId = inject(MagicMenuInstanceId, undefined)
42
+ const viewId = inject(MagicMenuViewId, undefined)
43
+ const contentId = inject(MagicMenuContentId, undefined)
44
+
45
+ if (!instanceId) {
46
+ throw new Error('MagicMenuItem must be nested inside MagicMenuProvider')
47
+ }
48
+
49
+ if (!viewId) {
50
+ throw new Error('MagicMenuItem must be nested inside MagicMenuView')
51
+ }
52
+
53
+ if (!contentId) {
54
+ throw new Error('MagicMenuItem must be nested inside MagicMenuContent')
55
+ }
56
+
57
+ const mappedId = computed(() => props.id ?? `magic-menu-item-${uuid()}`)
58
+
59
+ // Register item
60
+ const { initializeItem, deleteItem, selectItem, unselectItem } = useMenuItem({
61
+ instanceId,
62
+ viewId,
63
+ })
64
+
65
+ // Guarded select
66
+ // Check for mode and active state
67
+ const { initializeState } = useMenuState(instanceId)
68
+ const state = initializeState()
69
+ const item = initializeItem({
70
+ id: mappedId.value,
71
+ disabled: props.disabled ?? false,
72
+ })
73
+
74
+ function guardedSelect() {
75
+ if (
76
+ state.input.type === 'pointer' &&
77
+ !state.input.disabled.includes('pointer') &&
78
+ !item.active &&
79
+ !item.disabled
80
+ ) {
81
+ selectItem(mappedId.value)
82
+ }
83
+ }
84
+
85
+ // Guarded unselect
86
+ // Check for active nested views
87
+ const { getNestedView, unselectAllViews } = useMenuView(instanceId)
88
+ const nestedView = computed(() => getNestedView(mappedId.value))
89
+
90
+ function guardedUnselect() {
91
+ // If there is no nested active view, unselect the item
92
+ if (!nestedView.value || !nestedView.value.active) {
93
+ unselectItem(mappedId.value)
94
+ } else {
95
+ // If there is a nested active view,
96
+ // unselect the item once it is closed
97
+ watch(
98
+ () => nestedView.value?.active,
99
+ (value) => {
100
+ if (!value) {
101
+ unselectItem(mappedId.value)
102
+ }
103
+ },
104
+ { once: true }
105
+ )
106
+ }
107
+ }
108
+
109
+ function onClick(event: MouseEvent) {
110
+ emit('click', event)
111
+
112
+ state.input.type = 'pointer'
113
+ state.input.disabled = []
114
+
115
+ if (!item.disabled && !item.active) {
116
+ selectItem(mappedId.value)
117
+ }
118
+
119
+ if (!nestedView.value) {
120
+ state.active = false
121
+ unselectAllViews()
122
+ }
123
+ }
124
+
125
+ // Pass id and active state to children
126
+ provide(MagicMenuItemId, mappedId.value)
127
+ provide(MagicMenuItemActive, item.active)
128
+
129
+ // Lifecycle
130
+ onBeforeUnmount(() => {
131
+ deleteItem(mappedId.value)
132
+ })
133
+ </script>
134
+
135
+ <style>
136
+ .magic-menu-item{cursor:var(--magic-menu-item-cursor,default)}.magic-menu-item.-disabled{cursor:var(--magic-menu-item-cursor-disabled,not-allowed)}.magic-menu-item.-disabled>*{pointer-events:none}
137
+ </style>
@@ -0,0 +1,29 @@
1
+ interface MagicMenuItemProps {
2
+ id?: string;
3
+ disabled?: boolean;
4
+ }
5
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_TypePropsToOption<MagicMenuItemProps>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
6
+ click: (event: MouseEvent) => void;
7
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToOption<MagicMenuItemProps>>> & {
8
+ onClick?: ((event: MouseEvent) => any) | undefined;
9
+ }, {}, {}>, {
10
+ default?(_: {
11
+ isActive: boolean;
12
+ isDisabled: boolean | undefined;
13
+ }): any;
14
+ }>;
15
+ export default _default;
16
+ type __VLS_WithTemplateSlots<T, S> = T & {
17
+ new (): {
18
+ $slots: S;
19
+ };
20
+ };
21
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
22
+ type __VLS_TypePropsToOption<T> = {
23
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
24
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
25
+ } : {
26
+ type: import('vue').PropType<T[K]>;
27
+ required: true;
28
+ };
29
+ };