@maas/vue-equipment 0.27.3 → 0.28.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 (138) hide show
  1. package/dist/composables/index.d.mts +1 -9
  2. package/dist/composables/index.d.ts +1 -9
  3. package/dist/composables/index.js +2 -55
  4. package/dist/composables/index.js.map +1 -1
  5. package/dist/composables/index.mjs +1 -53
  6. package/dist/composables/index.mjs.map +1 -1
  7. package/dist/nuxt/module.json +1 -1
  8. package/dist/nuxt/module.mjs +16 -16
  9. package/dist/plugins/MagicCommand/index.d.ts +3 -4
  10. package/dist/plugins/MagicCommand/index.mjs +8 -7
  11. package/dist/plugins/MagicCommand/nuxt.mjs +1 -5
  12. package/dist/plugins/MagicCommand/src/components/MagicCommandBody.vue +3 -3
  13. package/dist/plugins/MagicCommand/src/components/MagicCommandDrawer.vue +10 -8
  14. package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue +2 -2
  15. package/dist/plugins/MagicCommand/src/components/MagicCommandModal.vue +10 -8
  16. package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue +6 -6
  17. package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue +2 -2
  18. package/dist/plugins/MagicCommand/src/composables/{useCommandApi.d.ts → useMagicCommand.d.ts} +1 -1
  19. package/dist/plugins/MagicCommand/src/composables/{useCommandApi.mjs → useMagicCommand.mjs} +5 -7
  20. package/dist/plugins/MagicCommand/src/symbols/index.d.ts +3 -3
  21. package/dist/plugins/MagicCommand/src/symbols/index.mjs +3 -3
  22. package/dist/plugins/MagicCookie/index.d.ts +2 -3
  23. package/dist/plugins/MagicCookie/index.mjs +2 -3
  24. package/dist/plugins/MagicCookie/nuxt.mjs +1 -1
  25. package/dist/plugins/MagicCookie/src/components/MagicCookie.vue +2 -2
  26. package/dist/plugins/MagicCookie/src/composables/{useCookieApi.d.ts → useMagicCookie.d.ts} +2 -1
  27. package/dist/plugins/MagicCookie/src/composables/{useCookieApi.mjs → useMagicCookie.mjs} +3 -3
  28. package/dist/plugins/MagicDraggable/index.d.ts +1 -2
  29. package/dist/plugins/MagicDraggable/index.mjs +1 -2
  30. package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue +12 -10
  31. package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue.d.ts +2 -2
  32. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableDrag.d.ts +1 -0
  33. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableDrag.mjs +33 -3
  34. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableScrollLock.d.ts +6 -0
  35. package/dist/plugins/MagicDraggable/src/composables/private/useDraggableScrollLock.mjs +42 -0
  36. package/dist/plugins/MagicDraggable/src/types/index.d.ts +1 -0
  37. package/dist/plugins/MagicDraggable/src/utils/defaultOptions.d.ts +4 -1
  38. package/dist/plugins/MagicDraggable/src/utils/defaultOptions.mjs +2 -1
  39. package/dist/plugins/MagicDrawer/index.d.ts +2 -3
  40. package/dist/plugins/MagicDrawer/index.mjs +2 -3
  41. package/dist/plugins/MagicDrawer/nuxt.mjs +1 -5
  42. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +13 -23
  43. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.mjs +10 -9
  44. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.d.ts +13 -0
  45. package/dist/plugins/MagicDrawer/src/composables/{useDrawerApi.mjs → private/useDrawerDOM.mjs} +4 -46
  46. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +14 -10
  47. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerProgress.mjs +22 -20
  48. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerSnap.mjs +5 -4
  49. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.d.ts +4 -0
  50. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.mjs +5 -1
  51. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerUtils.d.ts +0 -7
  52. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerUtils.mjs +1 -6
  53. package/dist/plugins/MagicDrawer/src/composables/useMagicDrawer.d.ts +13 -0
  54. package/dist/plugins/MagicDrawer/src/composables/useMagicDrawer.mjs +31 -0
  55. package/dist/plugins/MagicDrawer/src/types/index.d.ts +4 -0
  56. package/dist/plugins/MagicEmitter/index.d.ts +4 -0
  57. package/dist/plugins/MagicEmitter/index.mjs +2 -0
  58. package/dist/plugins/MagicEmitter/nuxt.d.ts +2 -0
  59. package/dist/plugins/MagicEmitter/nuxt.mjs +12 -0
  60. package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.d.ts +446 -0
  61. package/dist/plugins/{MagicModal/src/composables/useModalEmitter.mjs → MagicEmitter/src/composables/useMagicEmitter.mjs} +1 -1
  62. package/dist/plugins/MagicEmitter/src/types/index.d.ts +19 -0
  63. package/dist/plugins/MagicEmitter/src/types/index.mjs +0 -0
  64. package/dist/plugins/MagicMarquee/nuxt.mjs +1 -3
  65. package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue +1 -1
  66. package/dist/plugins/MagicModal/index.d.ts +2 -3
  67. package/dist/plugins/MagicModal/index.mjs +2 -3
  68. package/dist/plugins/MagicModal/nuxt.mjs +1 -5
  69. package/dist/plugins/MagicModal/src/components/MagicModal.vue +8 -9
  70. package/dist/plugins/MagicModal/src/composables/private/useModalCallback.mjs +10 -9
  71. package/dist/plugins/MagicModal/src/composables/private/useModalDOM.d.ts +13 -0
  72. package/dist/plugins/MagicModal/src/composables/{useModalApi.mjs → private/useModalDOM.mjs} +3 -17
  73. package/dist/plugins/MagicModal/src/composables/useMagicModal.d.ts +6 -0
  74. package/dist/plugins/MagicModal/src/composables/useMagicModal.mjs +17 -0
  75. package/dist/plugins/MagicNoise/index.d.ts +1 -1
  76. package/dist/plugins/MagicNoise/index.mjs +1 -1
  77. package/dist/plugins/MagicNoise/nuxt.mjs +1 -6
  78. package/dist/plugins/MagicNoise/src/components/MagicNoise.vue +2 -2
  79. package/dist/plugins/MagicNoise/src/composables/{useNoiseApi.d.ts → private/useNoiseApi.d.ts} +1 -1
  80. package/dist/plugins/MagicNoise/src/composables/{useNoiseApi.mjs → private/useNoiseApi.mjs} +1 -1
  81. package/dist/plugins/MagicPlayer/index.d.ts +2 -2
  82. package/dist/plugins/MagicPlayer/index.mjs +2 -2
  83. package/dist/plugins/MagicPlayer/nuxt.mjs +1 -1
  84. package/dist/plugins/MagicPlayer/src/composables/{usePlayerApi.d.ts → useMagicPlayer.d.ts} +2 -2
  85. package/dist/plugins/MagicPlayer/src/composables/{usePlayerApi.mjs → useMagicPlayer.mjs} +1 -1
  86. package/dist/plugins/MagicScroll/index.d.ts +2 -4
  87. package/dist/plugins/MagicScroll/index.mjs +6 -10
  88. package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue +3 -3
  89. package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue +2 -2
  90. package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue +5 -5
  91. package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue.d.ts +1 -1
  92. package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue +8 -8
  93. package/dist/plugins/MagicScroll/src/composables/{useScrollApi.d.ts → private/useScrollApi.d.ts} +1 -1
  94. package/dist/plugins/MagicScroll/src/composables/{useScrollApi.mjs → private/useScrollApi.mjs} +4 -4
  95. package/dist/plugins/MagicScroll/src/composables/useCollisionDetect.mjs +2 -2
  96. package/dist/plugins/MagicScroll/src/symbols/index.d.ts +4 -4
  97. package/dist/plugins/MagicScroll/src/symbols/index.mjs +4 -4
  98. package/dist/plugins/MagicScroll/src/types/index.d.ts +2 -2
  99. package/dist/plugins/MagicToast/index.d.ts +2 -3
  100. package/dist/plugins/MagicToast/index.mjs +2 -3
  101. package/dist/plugins/MagicToast/nuxt.mjs +0 -4
  102. package/dist/plugins/MagicToast/src/components/MagicToast.vue +5 -3
  103. package/dist/plugins/MagicToast/src/composables/private/useToastApi.d.ts +5 -0
  104. package/dist/plugins/MagicToast/src/composables/private/useToastApi.mjs +23 -0
  105. package/dist/plugins/MagicToast/src/composables/private/useToastCallback.d.ts +3 -3
  106. package/dist/plugins/MagicToast/src/composables/private/useToastCallback.mjs +11 -9
  107. package/dist/plugins/MagicToast/src/composables/useMagicToast.d.ts +12 -0
  108. package/dist/plugins/MagicToast/src/composables/useMagicToast.mjs +36 -0
  109. package/dist/plugins/index.d.ts +1 -0
  110. package/dist/plugins/index.mjs +1 -0
  111. package/dist/utils/index.d.mts +10 -1
  112. package/dist/utils/index.d.ts +10 -1
  113. package/dist/utils/index.js +8 -0
  114. package/dist/utils/index.js.map +1 -1
  115. package/dist/utils/index.mjs +7 -0
  116. package/dist/utils/index.mjs.map +1 -1
  117. package/dist/utils/types/ValueOf.ts +1 -0
  118. package/dist/utils/types/index.ts +1 -0
  119. package/package.json +1 -1
  120. package/dist/plugins/MagicCommand/src/composables/useCommandEmitter.d.ts +0 -15
  121. package/dist/plugins/MagicCommand/src/composables/useCommandEmitter.mjs +0 -9
  122. package/dist/plugins/MagicCookie/src/composables/useCookieEmitter.d.ts +0 -15
  123. package/dist/plugins/MagicCookie/src/composables/useCookieEmitter.mjs +0 -9
  124. package/dist/plugins/MagicDraggable/src/composables/useDraggableApi.d.ts +0 -1
  125. package/dist/plugins/MagicDraggable/src/composables/useDraggableApi.mjs +0 -2
  126. package/dist/plugins/MagicDrawer/src/composables/useDrawerApi.d.ts +0 -26
  127. package/dist/plugins/MagicDrawer/src/composables/useDrawerEmitter.d.ts +0 -15
  128. package/dist/plugins/MagicDrawer/src/composables/useDrawerEmitter.mjs +0 -9
  129. package/dist/plugins/MagicModal/src/composables/useModalApi.d.ts +0 -19
  130. package/dist/plugins/MagicModal/src/composables/useModalEmitter.d.ts +0 -15
  131. package/dist/plugins/MagicScroll/src/composables/useCollisionEmitter.d.ts +0 -15
  132. package/dist/plugins/MagicScroll/src/composables/useCollisionEmitter.mjs +0 -9
  133. package/dist/plugins/MagicToast/src/composables/useToastApi.d.ts +0 -13
  134. package/dist/plugins/MagicToast/src/composables/useToastApi.mjs +0 -50
  135. package/dist/plugins/MagicToast/src/composables/useToastEmitter.d.ts +0 -15
  136. package/dist/plugins/MagicToast/src/composables/useToastEmitter.mjs +0 -9
  137. /package/dist/plugins/MagicMarquee/src/composables/{useMarqueeApi.d.ts → private/useMarqueeApi.d.ts} +0 -0
  138. /package/dist/plugins/MagicMarquee/src/composables/{useMarqueeApi.mjs → private/useMarqueeApi.mjs} +0 -0
@@ -85,7 +85,7 @@ import { createDefu } from 'defu'
85
85
  import { onKeyStroke, unrefElement } from '@vueuse/core'
86
86
  import { useMetaViewport } from '@maas/vue-equipment/composables'
87
87
  import { defaultOptions } from './../utils/defaultOptions'
88
- import { useDrawerApi } from './../composables/useDrawerApi'
88
+ import { useDrawerDOM } from '../composables/private/useDrawerDOM'
89
89
  import { useDrawerCallback } from '../composables/private/useDrawerCallback'
90
90
  import { useDrawerProgress } from '../composables/private/useDrawerProgress'
91
91
  import { useDrawerDrag } from '../composables/private/useDrawerDrag'
@@ -104,6 +104,7 @@ import '@maas/vue-equipment/utils/css/animations/slide-ltr-out.css'
104
104
  import '@maas/vue-equipment/utils/css/animations/slide-rtl-out.css'
105
105
  import '@maas/vue-equipment/utils/css/animations/slide-ttb-out.css'
106
106
  import '@maas/vue-equipment/utils/css/animations/slide-btt-out.css'
107
+ import { useMagicDrawer } from '../composables/useMagicDrawer'
107
108
 
108
109
  // Prevent deep merge of certain options
109
110
  // In this case, don’t merge the `close` and `points` options
@@ -135,11 +136,20 @@ const elRef = ref<HTMLElement | undefined>(undefined)
135
136
  const drawerRef = ref<HTMLDivElement | undefined>(undefined)
136
137
  const wrapperRef = ref<HTMLDivElement | undefined>(undefined)
137
138
 
138
- const drawerApi = useDrawerApi(props.id, {
139
+ const {
140
+ trapFocus,
141
+ releaseFocus,
142
+ lockScroll,
143
+ unlockScroll,
144
+ addScrollLockPadding,
145
+ removeScrollLockPadding,
146
+ } = useDrawerDOM({
139
147
  focusTarget: drawerRef,
140
148
  focusTrap: mappedOptions.focusTrap,
141
149
  })
142
150
 
151
+ const { isActive, open, close } = useMagicDrawer(props.id)
152
+
143
153
  const overshoot = ref(0)
144
154
  const {
145
155
  position,
@@ -150,20 +160,6 @@ const {
150
160
  initial,
151
161
  } = mappedOptions
152
162
 
153
- const {
154
- isActive,
155
- open,
156
- close,
157
- trapFocus,
158
- releaseFocus,
159
- lockScroll,
160
- unlockScroll,
161
- addScrollLockPadding,
162
- removeScrollLockPadding,
163
- initialize,
164
- destroy,
165
- } = drawerApi
166
-
167
163
  // Make sure this is reactive
168
164
  const disabled = computed(() => {
169
165
  if (props.options.disabled === undefined) {
@@ -347,10 +343,6 @@ onBeforeMount(async () => {
347
343
  }
348
344
  })
349
345
 
350
- onMounted(() => {
351
- initialize()
352
- })
353
-
354
346
  // Reset state on unmount
355
347
  onBeforeUnmount(() => {
356
348
  close()
@@ -374,11 +366,9 @@ onUnmounted(() => {
374
366
  if (!mappedOptions.preventZoom) {
375
367
  resetMetaViewport()
376
368
  }
377
-
378
- destroy()
379
369
  })
380
370
  </script>
381
371
 
382
372
  <style>
383
- :root{--magic-drawer-height:75svh;--magic-drawer-width:100%;--magic-drawer-z-index:999;--magic-drawer-justify-content:center;--magic-drawer-align-items:flex-end;--magic-drawer-backdrop-color:rgba(0,0,0,.5);--magic-drawer-backdrop-filter:unset;--magic-drawer-content-overflow-x:hidden;--magic-drawer-content-overflow-y:hidden;--magic-drawer-enter-animation:slide-btt-in 300ms ease;--magic-drawer-leave-animation:slide-btt-out 300ms ease;--magic-drawer-drag-overshoot:4rem;--magic-drawer-padding:0px}.magic-drawer{--magic-drawer-drag-overshoot-x:0px;--magic-drawer-drag-overshoot-y:0px;align-items:var(--magic-drawer-align-items);background:transparent;border:none;color:inherit;display:flex;height:100%;inset:0;justify-content:var(--magic-drawer-justify-content);padding:0;pointer-events:none;position:fixed;width:100%;z-index:var(--magic-drawer-z-index)}.magic-drawer.-bottom{--magic-drawer-drag-overshoot-y:var(--magic-drawer-drag-overshoot);--magic-drawer-padding:0 0 var(--magic-drawer-drag-overshoot-y) 0}.magic-drawer.-bottom>.magic-drawer__wrapper{height:calc(var(--magic-drawer-height, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-top{--magic-drawer-enter-animation:slide-ttb-in 300ms ease;--magic-drawer-leave-animation:slide-ttb-out 300ms ease;--magic-drawer-align-items:flex-start;--magic-drawer-drag-overshoot-y:calc(var(--magic-drawer-drag-overshoot)*-1);--magic-drawer-padding:var(--magic-drawer-drag-overshoot-y) 0 0 0}.magic-drawer.-top>.magic-drawer__wrapper{height:calc(var(--magic-drawer-height, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-right{--magic-drawer-enter-animation:slide-rtl-in 300ms ease;--magic-drawer-leave-animation:slide-rtl-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-end;--magic-drawer-drag-overshoot-x:var(--magic-drawer-drag-overshoot);--magic-drawer-padding:0 var(--magic-drawer-drag-overshoot-x) 0 0}.magic-drawer.-right>.magic-drawer__wrapper{width:calc(var(--magic-drawer-width, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-left{--magic-drawer-enter-animation:slide-ltr-in 300ms ease;--magic-drawer-leave-animation:slide-ltr-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-start;--magic-drawer-drag-overshoot-x:calc(var(--magic-drawer-drag-overshoot)*-1);--magic-drawer-padding:0 0 0 var(--magic-drawer-drag-overshoot-x)}.magic-drawer.-left>.magic-drawer__wrapper{width:calc(var(--magic-drawer-width, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer__wrapper{height:var(--magic-drawer-height);pointer-events:none;transform:translate(var(--magic-drawer-drag-overshoot-x),var(--magic-drawer-drag-overshoot-y));width:var(--magic-drawer-width)}.magic-drawer__content{height:100%;max-height:100%;position:relative;width:100%}.magic-drawer__drag{-webkit-overflow-scrolling:touch;align-items:var(--magic-drawer-align-items);cursor:grab;display:flex;height:100%;justify-content:var(--magic-drawer-justify-content);overflow-x:var(--magic-drawer-content-overflow-x);overflow-y:var(--magic-drawer-content-overflow-y);pointer-events:auto;position:relative;scroll-behavior:smooth;width:100%}dialog.magic-drawer__drag{background:transparent;border:0;margin:0;outline:0;padding:0}dialog.magic-drawer__drag::backdrop{background-color:transparent}.magic-drawer.-dragging .magic-drawer__drag{cursor:grabbing;-webkit-user-select:none;-moz-user-select:none;user-select:none}.magic-drawer.-disabled .magic-drawer__drag,.magic-drawer.-wheeling .magic-drawer__drag{cursor:auto}.magic-drawer__drag>*{padding:var(--magic-drawer-padding)}.magic-drawer__overlay{inset:0;position:absolute;z-index:9999}.magic-drawer__backdrop{-webkit-backdrop-filter:var(--magic-drawer-backdrop-filter);backdrop-filter:var(--magic-drawer-backdrop-filter);background-color:var(--magic-drawer-backdrop-color);bottom:0;height:100%;left:0;pointer-events:auto;position:fixed;right:0;top:0;width:100%;z-index:-1}.magic-drawer.-disabled .magic-drawer__backdrop{pointer-events:none}.magic-drawer--content-enter-active{animation:var(--magic-drawer-enter-animation)}.magic-drawer--content-leave-active{animation:var(--magic-drawer-leave-animation)}.magic-drawer--backdrop-enter-active{animation:fade-in .3s ease}.magic-drawer--backdrop-leave-active{animation:fade-out .3s ease}
373
+ :root{--magic-drawer-height:75svh;--magic-drawer-width:100%;--magic-drawer-z-index:999;--magic-drawer-justify-content:center;--magic-drawer-align-items:flex-end;--magic-drawer-backdrop-color:rgba(0,0,0,.5);--magic-drawer-backdrop-filter:unset;--magic-drawer-content-overflow-x:hidden;--magic-drawer-content-overflow-y:hidden;--magic-drawer-enter-animation:slide-btt-in 300ms ease;--magic-drawer-leave-animation:slide-btt-out 300ms ease;--magic-drawer-drag-overshoot:4rem;--magic-drawer-padding:0px}.magic-drawer{--magic-drawer-drag-overshoot-x:0px;--magic-drawer-drag-overshoot-y:0px;align-items:var(--magic-drawer-align-items);background:transparent;border:none;color:inherit;display:flex;height:100%;inset:0;justify-content:var(--magic-drawer-justify-content);padding:0;pointer-events:none;position:fixed;width:100%;z-index:var(--magic-drawer-z-index)}.magic-drawer.-bottom{--magic-drawer-drag-overshoot-y:var(--magic-drawer-drag-overshoot);--magic-drawer-padding:0 0 var(--magic-drawer-drag-overshoot-y) 0}.magic-drawer.-bottom>.magic-drawer__wrapper{height:calc(var(--magic-drawer-height, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-top{--magic-drawer-enter-animation:slide-ttb-in 300ms ease;--magic-drawer-leave-animation:slide-ttb-out 300ms ease;--magic-drawer-align-items:flex-start;--magic-drawer-drag-overshoot-y:calc(var(--magic-drawer-drag-overshoot)*-1);--magic-drawer-padding:var(--magic-drawer-drag-overshoot-y) 0 0 0}.magic-drawer.-top>.magic-drawer__wrapper{height:calc(var(--magic-drawer-height, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-right{--magic-drawer-enter-animation:slide-rtl-in 300ms ease;--magic-drawer-leave-animation:slide-rtl-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-end;--magic-drawer-drag-overshoot-x:var(--magic-drawer-drag-overshoot);--magic-drawer-padding:0 var(--magic-drawer-drag-overshoot-x) 0 0}.magic-drawer.-right>.magic-drawer__wrapper{width:calc(var(--magic-drawer-width, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer.-left{--magic-drawer-enter-animation:slide-ltr-in 300ms ease;--magic-drawer-leave-animation:slide-ltr-out 300ms ease;--magic-drawer-align-items:center;--magic-drawer-justify-content:flex-start;--magic-drawer-drag-overshoot-x:calc(var(--magic-drawer-drag-overshoot)*-1);--magic-drawer-padding:0 0 0 var(--magic-drawer-drag-overshoot-x)}.magic-drawer.-left>.magic-drawer__wrapper{width:calc(var(--magic-drawer-width, 0px) + var(--magic-drawer-drag-overshoot, 0px))}.magic-drawer__wrapper{height:var(--magic-drawer-height);pointer-events:none;transform:translate(var(--magic-drawer-drag-overshoot-x),var(--magic-drawer-drag-overshoot-y));width:var(--magic-drawer-width)}.magic-drawer__content{height:100%;max-height:100%;position:relative;width:100%}.magic-drawer__drag{-webkit-overflow-scrolling:touch;align-items:var(--magic-drawer-align-items);cursor:grab;display:flex;height:100%;justify-content:var(--magic-drawer-justify-content);overflow-x:var(--magic-drawer-content-overflow-x);overflow-y:var(--magic-drawer-content-overflow-y);pointer-events:auto;position:relative;scroll-behavior:smooth;touch-action:none;width:100%}dialog.magic-drawer__drag{background:transparent;border:0;margin:0;outline:0;padding:0}dialog.magic-drawer__drag::backdrop{background-color:transparent}.magic-drawer.-dragging .magic-drawer__drag{cursor:grabbing;-webkit-user-select:none;-moz-user-select:none;user-select:none}.magic-drawer.-disabled .magic-drawer__drag,.magic-drawer.-wheeling .magic-drawer__drag{cursor:auto}.magic-drawer__drag>*{padding:var(--magic-drawer-padding)}.magic-drawer__overlay{inset:0;position:absolute;z-index:9999}.magic-drawer__backdrop{-webkit-backdrop-filter:var(--magic-drawer-backdrop-filter);backdrop-filter:var(--magic-drawer-backdrop-filter);background-color:var(--magic-drawer-backdrop-color);bottom:0;height:100%;left:0;pointer-events:auto;position:fixed;right:0;top:0;width:100%;z-index:-1}.magic-drawer.-disabled .magic-drawer__backdrop{pointer-events:none}.magic-drawer--content-enter-active{animation:var(--magic-drawer-enter-animation)}.magic-drawer--content-leave-active{animation:var(--magic-drawer-leave-animation)}.magic-drawer--backdrop-enter-active{animation:fade-in .3s ease}.magic-drawer--backdrop-leave-active{animation:fade-out .3s ease}
384
374
  </style>
@@ -1,6 +1,6 @@
1
1
  import { toValue, nextTick } from "vue";
2
2
  import { useMetaViewport } from "@maas/vue-equipment/composables";
3
- import { useDrawerEmitter } from "./../useDrawerEmitter.mjs";
3
+ import { useMagicEmitter } from "@maas/vue-equipment/plugins";
4
4
  export function useDrawerCallback(args) {
5
5
  const {
6
6
  id,
@@ -15,10 +15,11 @@ export function useDrawerCallback(args) {
15
15
  wasActive
16
16
  } = args;
17
17
  const { setMetaViewport, resetMetaViewport } = useMetaViewport();
18
+ const emitter = useMagicEmitter();
18
19
  function onBeforeEnter(_el) {
19
- useDrawerEmitter().emit("beforeEnter", toValue(id));
20
+ emitter.emit("beforeEnter", toValue(id));
20
21
  if (mappedOptions.scrollLock) {
21
- if (mappedOptions.scrollLockPadding) {
22
+ if (typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding) {
22
23
  addScrollLockPadding();
23
24
  }
24
25
  lockScroll();
@@ -28,10 +29,10 @@ export function useDrawerCallback(args) {
28
29
  }
29
30
  }
30
31
  function onEnter(_el) {
31
- useDrawerEmitter().emit("enter", toValue(id));
32
+ emitter.emit("enter", toValue(id));
32
33
  }
33
34
  async function onAfterEnter(_el) {
34
- useDrawerEmitter().emit("afterEnter", toValue(id));
35
+ emitter.emit("afterEnter", toValue(id));
35
36
  if (mappedOptions.focusTrap) {
36
37
  await nextTick();
37
38
  trapFocus();
@@ -39,16 +40,16 @@ export function useDrawerCallback(args) {
39
40
  wasActive.value = true;
40
41
  }
41
42
  function onBeforeLeave(_el) {
42
- useDrawerEmitter().emit("beforeLeave", toValue(id));
43
+ emitter.emit("beforeLeave", toValue(id));
43
44
  }
44
45
  function onLeave(_el) {
45
- useDrawerEmitter().emit("leave", toValue(id));
46
+ emitter.emit("leave", toValue(id));
46
47
  }
47
48
  function onAfterLeave(_el) {
48
- useDrawerEmitter().emit("afterLeave", toValue(id));
49
+ emitter.emit("afterLeave", toValue(id));
49
50
  if (mappedOptions.scrollLock) {
50
51
  unlockScroll();
51
- if (mappedOptions.scrollLockPadding) {
52
+ if (typeof mappedOptions.scrollLock === "object" && mappedOptions.scrollLock.padding) {
52
53
  removeScrollLockPadding();
53
54
  }
54
55
  }
@@ -0,0 +1,13 @@
1
+ import { type MaybeElementRef } from '@vueuse/core';
2
+ import type { DrawerOptions } from '../../types/index.js';
3
+ export type UseDrawerDOMOptions = Pick<DrawerOptions, 'scrollLock' | 'focusTrap'> & {
4
+ focusTarget: MaybeElementRef;
5
+ };
6
+ export declare function useDrawerDOM(options?: UseDrawerDOMOptions): {
7
+ trapFocus: () => void;
8
+ releaseFocus: () => void;
9
+ lockScroll: () => void;
10
+ unlockScroll: () => void;
11
+ addScrollLockPadding: () => void;
12
+ removeScrollLockPadding: () => void;
13
+ };
@@ -1,46 +1,18 @@
1
- import { ref, computed, toValue } from "vue";
1
+ import { ref } from "vue";
2
2
  import { defu } from "defu";
3
3
  import { useScrollLock } from "@vueuse/core";
4
4
  import { useFocusTrap } from "@vueuse/integrations/useFocusTrap";
5
- import { uuid, matchClass } from "@maas/vue-equipment/utils";
6
- import { useDrawerStore } from "./private/useDrawerStore.mjs";
7
- import { useDrawerState } from "./private/useDrawerState.mjs";
8
- import { useDrawerEmitter } from "./useDrawerEmitter.mjs";
5
+ import { matchClass } from "@maas/vue-equipment/utils";
9
6
  const defaultOptions = {
10
7
  focusTrap: false,
11
8
  focusTarget: void 0,
12
9
  scrollLock: true
13
10
  };
14
11
  const scrollLock = typeof window !== "undefined" ? useScrollLock(document?.documentElement) : ref(false);
15
- export function useDrawerApi(id, options) {
12
+ export function useDrawerDOM(options) {
16
13
  const positionFixedElements = ref([]);
17
- const mappedId = computed(() => toValue(id) || uuid());
18
14
  const mappedOptions = defu(options, defaultOptions);
19
15
  const focusTrap = mappedOptions.focusTarget ? typeof mappedOptions.focusTrap === "boolean" ? useFocusTrap(mappedOptions.focusTarget) : useFocusTrap(mappedOptions.focusTarget, mappedOptions.focusTrap) : void 0;
20
- const { drawerStore, addInstance, removeInstance } = useDrawerStore();
21
- const { deleteState } = useDrawerState(mappedId.value);
22
- function progressCallback(payload) {
23
- if (payload.id === mappedId.value) {
24
- progress.value.x = payload.x;
25
- progress.value.y = payload.y;
26
- }
27
- }
28
- const isActive = computed(() => drawerStore.value.includes(mappedId.value));
29
- const progress = ref({ x: 0, y: 0 });
30
- function open() {
31
- addInstance(mappedId.value);
32
- }
33
- function close() {
34
- removeInstance(mappedId.value);
35
- deleteState();
36
- }
37
- function snapTo(snapPoint, duration) {
38
- useDrawerEmitter().emit("snapTo", {
39
- id: mappedId.value,
40
- snapPoint,
41
- duration
42
- });
43
- }
44
16
  function trapFocus() {
45
17
  if (focusTrap) {
46
18
  focusTrap.activate();
@@ -84,26 +56,12 @@ export function useDrawerApi(id, options) {
84
56
  (elem) => elem.style.paddingRight = ""
85
57
  );
86
58
  }
87
- function initialize() {
88
- useDrawerEmitter().on("progress", progressCallback);
89
- }
90
- function destroy() {
91
- useDrawerEmitter().off("progress", progressCallback);
92
- }
93
59
  return {
94
- id: mappedId,
95
- isActive,
96
- progress,
97
- open,
98
- close,
99
- snapTo,
100
60
  trapFocus,
101
61
  releaseFocus,
102
62
  lockScroll,
103
63
  unlockScroll,
104
64
  addScrollLockPadding,
105
- removeScrollLockPadding,
106
- initialize,
107
- destroy
65
+ removeScrollLockPadding
108
66
  };
109
67
  }
@@ -13,12 +13,12 @@ import {
13
13
  useThrottleFn,
14
14
  useScrollLock
15
15
  } from "@vueuse/core";
16
- import { useDrawerEmitter } from "../useDrawerEmitter.mjs";
16
+ import { isIOS, isWithinRange } from "@maas/vue-equipment/utils";
17
+ import { useMagicEmitter } from "@maas/vue-equipment/plugins";
17
18
  import { useDrawerSnap } from "./useDrawerSnap.mjs";
18
19
  import { useDrawerGuards } from "./useDrawerGuards.mjs";
19
20
  import { useDrawerUtils } from "./useDrawerUtils.mjs";
20
21
  import { useDrawerState } from "./useDrawerState.mjs";
21
- import { isIOS } from "@maas/vue-equipment/utils";
22
22
  export function useDrawerDrag(args) {
23
23
  const {
24
24
  id,
@@ -102,7 +102,8 @@ export function useDrawerDrag(args) {
102
102
  position,
103
103
  activeSnapPoint
104
104
  });
105
- const { clamp, isWithinRange } = useDrawerUtils();
105
+ const { clamp } = useDrawerUtils();
106
+ const emitter = useMagicEmitter();
106
107
  async function getSizes() {
107
108
  elRect.value = unrefElement(elRef)?.getBoundingClientRect();
108
109
  wrapperRect.value = unrefElement(wrapperRef)?.getBoundingClientRect();
@@ -316,7 +317,7 @@ export function useDrawerDrag(args) {
316
317
  break;
317
318
  }
318
319
  }
319
- useDrawerEmitter().emit("afterDrag", {
320
+ emitter.emit("afterDrag", {
320
321
  id: toValue(id),
321
322
  x: draggedX.value,
322
323
  y: draggedY.value
@@ -331,6 +332,9 @@ export function useDrawerDrag(args) {
331
332
  if (e.isTrusted && wheeling.value) {
332
333
  return;
333
334
  }
335
+ if (e.isTrusted && !e.isPrimary) {
336
+ return;
337
+ }
334
338
  shouldClose.value = false;
335
339
  checkDirection({ x: e.screenX, y: e.screenY });
336
340
  if (!scrollLock) {
@@ -346,7 +350,7 @@ export function useDrawerDrag(args) {
346
350
  setDragged({ x: e.screenX, y: e.screenY });
347
351
  checkMomentum();
348
352
  checkPosition();
349
- useDrawerEmitter().emit("drag", {
353
+ emitter.emit("drag", {
350
354
  id: toValue(id),
351
355
  x: draggedX.value,
352
356
  y: draggedY.value
@@ -357,7 +361,7 @@ export function useDrawerDrag(args) {
357
361
  return;
358
362
  } else {
359
363
  dragging.value = true;
360
- useDrawerEmitter().emit("beforeDrag", {
364
+ emitter.emit("beforeDrag", {
361
365
  id: toValue(id),
362
366
  x: draggedX.value,
363
367
  y: draggedY.value
@@ -380,8 +384,8 @@ export function useDrawerDrag(args) {
380
384
  }
381
385
  onMounted(async () => {
382
386
  await getSizes();
383
- useDrawerEmitter().on("snapTo", snapToCallback);
384
- useDrawerEmitter().on("afterLeave", afterLeaveCallback);
387
+ emitter.on("snapTo", snapToCallback);
388
+ emitter.on("afterLeave", afterLeaveCallback);
385
389
  });
386
390
  watch(
387
391
  () => [unrefElement(elRef), unrefElement(wrapperRef)],
@@ -407,8 +411,8 @@ export function useDrawerDrag(args) {
407
411
  }, 100)();
408
412
  });
409
413
  onBeforeUnmount(() => {
410
- useDrawerEmitter().off("snapTo", snapToCallback);
411
- useDrawerEmitter().off("afterLeave", afterLeaveCallback);
414
+ emitter.off("snapTo", snapToCallback);
415
+ emitter.off("afterLeave", afterLeaveCallback);
412
416
  });
413
417
  return {
414
418
  onPointerdown,
@@ -1,5 +1,4 @@
1
1
  import {
2
- ref,
3
2
  watch,
4
3
  toValue,
5
4
  computed,
@@ -7,11 +6,13 @@ import {
7
6
  onBeforeUnmount,
8
7
  nextTick
9
8
  } from "vue";
10
- import { useDrawerEmitter } from "./../useDrawerEmitter.mjs";
11
9
  import { useElementBounding, useRafFn } from "@vueuse/core";
12
10
  import { clampValue, mapValue } from "@maas/vue-equipment/utils";
11
+ import { useMagicEmitter } from "@maas/vue-equipment/plugins";
12
+ import { useDrawerState } from "./useDrawerState.mjs";
13
13
  export function useDrawerProgress(args) {
14
14
  const { id, drawerRef, elRef, position, overshoot } = args;
15
+ const { findState } = useDrawerState(id);
15
16
  const drawerRect = useElementBounding(drawerRef);
16
17
  const elRect = useElementBounding(elRef);
17
18
  const maxX = computed(
@@ -20,12 +21,13 @@ export function useDrawerProgress(args) {
20
21
  const maxY = computed(
21
22
  () => drawerRect.height.value - elRect.height.value + toValue(overshoot)
22
23
  );
23
- const progress = ref({ x: 0, y: 0 });
24
+ const { progress } = findState();
24
25
  function rafCallback() {
25
26
  drawerRect.update();
26
27
  elRect.update();
27
28
  calculateProgress();
28
29
  }
30
+ const emitter = useMagicEmitter();
29
31
  const { pause: snapPause, resume: snapResume } = useRafFn(rafCallback, {
30
32
  immediate: false
31
33
  });
@@ -81,7 +83,7 @@ export function useDrawerProgress(args) {
81
83
  progress.value = { x, y };
82
84
  }
83
85
  watch([() => progress.value.x, () => progress.value.y], ([x, y]) => {
84
- useDrawerEmitter().emit("progress", {
86
+ emitter.emit("progress", {
85
87
  id: toValue(id),
86
88
  x,
87
89
  y
@@ -127,24 +129,24 @@ export function useDrawerProgress(args) {
127
129
  }
128
130
  }
129
131
  onMounted(() => {
130
- useDrawerEmitter().on("beforeEnter", beforeCallback);
131
- useDrawerEmitter().on("afterEnter", afterCallback);
132
- useDrawerEmitter().on("beforeDrag", beforeDragCallback);
133
- useDrawerEmitter().on("afterDrag", afterDragCallback);
134
- useDrawerEmitter().on("beforeSnap", beforeSnapCallback);
135
- useDrawerEmitter().on("afterSnap", afterSnapCallback);
136
- useDrawerEmitter().on("beforeLeave", beforeCallback);
137
- useDrawerEmitter().on("afterLeave", afterCallback);
132
+ emitter.on("beforeEnter", beforeCallback);
133
+ emitter.on("afterEnter", afterCallback);
134
+ emitter.on("beforeDrag", beforeDragCallback);
135
+ emitter.on("afterDrag", afterDragCallback);
136
+ emitter.on("beforeSnap", beforeSnapCallback);
137
+ emitter.on("afterSnap", afterSnapCallback);
138
+ emitter.on("beforeLeave", beforeCallback);
139
+ emitter.on("afterLeave", afterCallback);
138
140
  });
139
141
  onBeforeUnmount(() => {
140
- useDrawerEmitter().off("beforeEnter", beforeCallback);
141
- useDrawerEmitter().off("afterEnter", afterCallback);
142
- useDrawerEmitter().off("beforeDrag", beforeDragCallback);
143
- useDrawerEmitter().off("afterDrag", afterDragCallback);
144
- useDrawerEmitter().off("beforeSnap", beforeSnapCallback);
145
- useDrawerEmitter().off("afterSnap", afterSnapCallback);
146
- useDrawerEmitter().off("beforeLeave", beforeCallback);
147
- useDrawerEmitter().off("afterLeave", afterCallback);
142
+ emitter.off("beforeEnter", beforeCallback);
143
+ emitter.off("afterEnter", afterCallback);
144
+ emitter.off("beforeDrag", beforeDragCallback);
145
+ emitter.off("afterDrag", afterDragCallback);
146
+ emitter.off("beforeSnap", beforeSnapCallback);
147
+ emitter.off("afterSnap", afterSnapCallback);
148
+ emitter.off("beforeLeave", beforeCallback);
149
+ emitter.off("afterLeave", afterCallback);
148
150
  });
149
151
  return { progress };
150
152
  }
@@ -1,7 +1,7 @@
1
1
  import { ref, computed, toValue, nextTick } from "vue";
2
2
  import { computedWithControl } from "@vueuse/core";
3
3
  import { mapValue, interpolate } from "@maas/vue-equipment/utils";
4
- import { useDrawerEmitter } from "../useDrawerEmitter.mjs";
4
+ import { useMagicEmitter } from "@maas/vue-equipment/plugins";
5
5
  export function useDrawerSnap(args) {
6
6
  const {
7
7
  id,
@@ -58,6 +58,7 @@ export function useDrawerSnap(args) {
58
58
  return toValue(wrapperRect)?.width - toValue(overshoot);
59
59
  }
60
60
  });
61
+ const emitter = useMagicEmitter();
61
62
  function findClosestNumber(args2) {
62
63
  const { number, numbers, direction } = args2;
63
64
  let filtered = numbers;
@@ -194,7 +195,7 @@ export function useDrawerSnap(args) {
194
195
  easing
195
196
  } = args2;
196
197
  const snapPoint = snapPointsMap.value[to];
197
- useDrawerEmitter().emit("beforeSnap", { id: toValue(id), snapPoint });
198
+ emitter.emit("beforeSnap", { id: toValue(id), snapPoint });
198
199
  switch (position) {
199
200
  case "bottom":
200
201
  case "top":
@@ -206,7 +207,7 @@ export function useDrawerSnap(args) {
206
207
  callback: (value) => {
207
208
  draggedY.value = value;
208
209
  if (draggedY.value === to) {
209
- useDrawerEmitter().emit("afterSnap", {
210
+ emitter.emit("afterSnap", {
210
211
  id: toValue(id),
211
212
  snapPoint
212
213
  });
@@ -224,7 +225,7 @@ export function useDrawerSnap(args) {
224
225
  callback: (value) => {
225
226
  draggedX.value = value;
226
227
  if (draggedX.value === to) {
227
- useDrawerEmitter().emit("afterSnap", {
228
+ emitter.emit("afterSnap", {
228
229
  id: toValue(id),
229
230
  snapPoint
230
231
  });
@@ -69,6 +69,10 @@ export declare function useDrawerState(id: MaybeRef<string>): {
69
69
  } | undefined;
70
70
  dragging: boolean;
71
71
  wheeling: boolean;
72
+ progress: {
73
+ x: number;
74
+ y: number;
75
+ };
72
76
  shouldClose: boolean;
73
77
  interpolateTo: number | undefined;
74
78
  originX: number;
@@ -20,7 +20,11 @@ export function useDrawerState(id) {
20
20
  absDirectionY: void 0,
21
21
  absDirectionX: void 0,
22
22
  elRect: void 0,
23
- wrapperRect: void 0
23
+ wrapperRect: void 0,
24
+ progress: {
25
+ x: 0,
26
+ y: 0
27
+ }
24
28
  };
25
29
  return reactive(state);
26
30
  }
@@ -1,10 +1,3 @@
1
- interface isWithinRangeArgs {
2
- input: number;
3
- base: number;
4
- threshold: number;
5
- }
6
1
  export declare function useDrawerUtils(): {
7
2
  clamp: (value: number, from: number, to: number) => number;
8
- isWithinRange: (args: isWithinRangeArgs) => boolean;
9
3
  };
10
- export {};
@@ -21,12 +21,7 @@ export function useDrawerUtils() {
21
21
  return value;
22
22
  }
23
23
  }
24
- function isWithinRange(args) {
25
- const { input, base, threshold } = args;
26
- return input >= base - threshold && input <= base + threshold;
27
- }
28
24
  return {
29
- clamp,
30
- isWithinRange
25
+ clamp
31
26
  };
32
27
  }
@@ -0,0 +1,13 @@
1
+ import { type MaybeRef } from 'vue';
2
+ import type { SnapPoint } from '../types/index.js';
3
+ export declare function useMagicDrawer(id: MaybeRef<string>): {
4
+ isActive: import("vue").ComputedRef<boolean>;
5
+ progress: import("vue").Ref<{
6
+ x: number;
7
+ y: number;
8
+ }>;
9
+ open: () => void;
10
+ close: () => void;
11
+ snapTo: (snapPoint: SnapPoint, duration?: number) => void;
12
+ };
13
+ export type UseMagicDrawerReturn = ReturnType<typeof useMagicDrawer>;
@@ -0,0 +1,31 @@
1
+ import { computed, toValue } from "vue";
2
+ import { useMagicEmitter } from "@maas/vue-equipment/plugins";
3
+ import { useDrawerStore } from "./private/useDrawerStore.mjs";
4
+ import { useDrawerState } from "./private/useDrawerState.mjs";
5
+ export function useMagicDrawer(id) {
6
+ const { drawerStore, addInstance, removeInstance } = useDrawerStore();
7
+ const { deleteState, findState } = useDrawerState(toValue(id));
8
+ const { progress } = findState();
9
+ const isActive = computed(() => drawerStore.value.includes(toValue(id)));
10
+ function open() {
11
+ addInstance(toValue(id));
12
+ }
13
+ function close() {
14
+ removeInstance(toValue(id));
15
+ deleteState();
16
+ }
17
+ function snapTo(snapPoint, duration) {
18
+ useMagicEmitter().emit("snapTo", {
19
+ id: toValue(id),
20
+ snapPoint,
21
+ duration
22
+ });
23
+ }
24
+ return {
25
+ isActive,
26
+ progress,
27
+ open,
28
+ close,
29
+ snapTo
30
+ };
31
+ }
@@ -46,6 +46,10 @@ export interface DrawerState {
46
46
  dragStart: Date | undefined;
47
47
  dragging: boolean;
48
48
  wheeling: boolean;
49
+ progress: {
50
+ x: number;
51
+ y: number;
52
+ };
49
53
  shouldClose: boolean;
50
54
  interpolateTo: number | undefined;
51
55
  originX: number;
@@ -0,0 +1,4 @@
1
+ import { useMagicEmitter } from './src/composables/useMagicEmitter.js';
2
+ import type { MagicEmitterEvents } from './src/types/index.js';
3
+ export { useMagicEmitter };
4
+ export type { MagicEmitterEvents };
@@ -0,0 +1,2 @@
1
+ import { useMagicEmitter } from "./src/composables/useMagicEmitter.mjs";
2
+ export { useMagicEmitter };
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@nuxt/schema").NuxtModule<import("@nuxt/schema").ModuleOptions>;
2
+ export default _default;
@@ -0,0 +1,12 @@
1
+ import { defineNuxtModule, addImports } from "@nuxt/kit";
2
+ export default defineNuxtModule({
3
+ meta: {
4
+ name: "@maas/vue-equipment/nuxt/MagicEmitter"
5
+ },
6
+ setup() {
7
+ addImports({
8
+ from: "@maas/vue-equipment/plugins/MagicEmitter",
9
+ name: "useMagicEmitter"
10
+ });
11
+ }
12
+ });