@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.
- package/dist/composables/index.d.mts +1 -9
- package/dist/composables/index.d.ts +1 -9
- package/dist/composables/index.js +2 -55
- package/dist/composables/index.js.map +1 -1
- package/dist/composables/index.mjs +1 -53
- package/dist/composables/index.mjs.map +1 -1
- package/dist/nuxt/module.json +1 -1
- package/dist/nuxt/module.mjs +16 -16
- package/dist/plugins/MagicCommand/index.d.ts +3 -4
- package/dist/plugins/MagicCommand/index.mjs +8 -7
- package/dist/plugins/MagicCommand/nuxt.mjs +1 -5
- package/dist/plugins/MagicCommand/src/components/MagicCommandBody.vue +3 -3
- package/dist/plugins/MagicCommand/src/components/MagicCommandDrawer.vue +10 -8
- package/dist/plugins/MagicCommand/src/components/MagicCommandItem.vue +2 -2
- package/dist/plugins/MagicCommand/src/components/MagicCommandModal.vue +10 -8
- package/dist/plugins/MagicCommand/src/components/MagicCommandProvider.vue +6 -6
- package/dist/plugins/MagicCommand/src/components/MagicCommandView.vue +2 -2
- package/dist/plugins/MagicCommand/src/composables/{useCommandApi.d.ts → useMagicCommand.d.ts} +1 -1
- package/dist/plugins/MagicCommand/src/composables/{useCommandApi.mjs → useMagicCommand.mjs} +5 -7
- package/dist/plugins/MagicCommand/src/symbols/index.d.ts +3 -3
- package/dist/plugins/MagicCommand/src/symbols/index.mjs +3 -3
- package/dist/plugins/MagicCookie/index.d.ts +2 -3
- package/dist/plugins/MagicCookie/index.mjs +2 -3
- package/dist/plugins/MagicCookie/nuxt.mjs +1 -1
- package/dist/plugins/MagicCookie/src/components/MagicCookie.vue +2 -2
- package/dist/plugins/MagicCookie/src/composables/{useCookieApi.d.ts → useMagicCookie.d.ts} +2 -1
- package/dist/plugins/MagicCookie/src/composables/{useCookieApi.mjs → useMagicCookie.mjs} +3 -3
- package/dist/plugins/MagicDraggable/index.d.ts +1 -2
- package/dist/plugins/MagicDraggable/index.mjs +1 -2
- package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue +12 -10
- package/dist/plugins/MagicDraggable/src/components/MagicDraggable.vue.d.ts +2 -2
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableDrag.d.ts +1 -0
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableDrag.mjs +33 -3
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableScrollLock.d.ts +6 -0
- package/dist/plugins/MagicDraggable/src/composables/private/useDraggableScrollLock.mjs +42 -0
- package/dist/plugins/MagicDraggable/src/types/index.d.ts +1 -0
- package/dist/plugins/MagicDraggable/src/utils/defaultOptions.d.ts +4 -1
- package/dist/plugins/MagicDraggable/src/utils/defaultOptions.mjs +2 -1
- package/dist/plugins/MagicDrawer/index.d.ts +2 -3
- package/dist/plugins/MagicDrawer/index.mjs +2 -3
- package/dist/plugins/MagicDrawer/nuxt.mjs +1 -5
- package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +13 -23
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.mjs +10 -9
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDOM.d.ts +13 -0
- package/dist/plugins/MagicDrawer/src/composables/{useDrawerApi.mjs → private/useDrawerDOM.mjs} +4 -46
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +14 -10
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerProgress.mjs +22 -20
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerSnap.mjs +5 -4
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.d.ts +4 -0
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerState.mjs +5 -1
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerUtils.d.ts +0 -7
- package/dist/plugins/MagicDrawer/src/composables/private/useDrawerUtils.mjs +1 -6
- package/dist/plugins/MagicDrawer/src/composables/useMagicDrawer.d.ts +13 -0
- package/dist/plugins/MagicDrawer/src/composables/useMagicDrawer.mjs +31 -0
- package/dist/plugins/MagicDrawer/src/types/index.d.ts +4 -0
- package/dist/plugins/MagicEmitter/index.d.ts +4 -0
- package/dist/plugins/MagicEmitter/index.mjs +2 -0
- package/dist/plugins/MagicEmitter/nuxt.d.ts +2 -0
- package/dist/plugins/MagicEmitter/nuxt.mjs +12 -0
- package/dist/plugins/MagicEmitter/src/composables/useMagicEmitter.d.ts +446 -0
- package/dist/plugins/{MagicModal/src/composables/useModalEmitter.mjs → MagicEmitter/src/composables/useMagicEmitter.mjs} +1 -1
- package/dist/plugins/MagicEmitter/src/types/index.d.ts +19 -0
- package/dist/plugins/MagicEmitter/src/types/index.mjs +0 -0
- package/dist/plugins/MagicMarquee/nuxt.mjs +1 -3
- package/dist/plugins/MagicMarquee/src/components/MagicMarquee.vue +1 -1
- package/dist/plugins/MagicModal/index.d.ts +2 -3
- package/dist/plugins/MagicModal/index.mjs +2 -3
- package/dist/plugins/MagicModal/nuxt.mjs +1 -5
- package/dist/plugins/MagicModal/src/components/MagicModal.vue +8 -9
- package/dist/plugins/MagicModal/src/composables/private/useModalCallback.mjs +10 -9
- package/dist/plugins/MagicModal/src/composables/private/useModalDOM.d.ts +13 -0
- package/dist/plugins/MagicModal/src/composables/{useModalApi.mjs → private/useModalDOM.mjs} +3 -17
- package/dist/plugins/MagicModal/src/composables/useMagicModal.d.ts +6 -0
- package/dist/plugins/MagicModal/src/composables/useMagicModal.mjs +17 -0
- package/dist/plugins/MagicNoise/index.d.ts +1 -1
- package/dist/plugins/MagicNoise/index.mjs +1 -1
- package/dist/plugins/MagicNoise/nuxt.mjs +1 -6
- package/dist/plugins/MagicNoise/src/components/MagicNoise.vue +2 -2
- package/dist/plugins/MagicNoise/src/composables/{useNoiseApi.d.ts → private/useNoiseApi.d.ts} +1 -1
- package/dist/plugins/MagicNoise/src/composables/{useNoiseApi.mjs → private/useNoiseApi.mjs} +1 -1
- package/dist/plugins/MagicPlayer/index.d.ts +2 -2
- package/dist/plugins/MagicPlayer/index.mjs +2 -2
- package/dist/plugins/MagicPlayer/nuxt.mjs +1 -1
- package/dist/plugins/MagicPlayer/src/composables/{usePlayerApi.d.ts → useMagicPlayer.d.ts} +2 -2
- package/dist/plugins/MagicPlayer/src/composables/{usePlayerApi.mjs → useMagicPlayer.mjs} +1 -1
- package/dist/plugins/MagicScroll/index.d.ts +2 -4
- package/dist/plugins/MagicScroll/index.mjs +6 -10
- package/dist/plugins/MagicScroll/src/components/MagicScrollCollision.vue +3 -3
- package/dist/plugins/MagicScroll/src/components/MagicScrollMotion.vue +2 -2
- package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue +5 -5
- package/dist/plugins/MagicScroll/src/components/MagicScrollProvider.vue.d.ts +1 -1
- package/dist/plugins/MagicScroll/src/components/MagicScrollScene.vue +8 -8
- package/dist/plugins/MagicScroll/src/composables/{useScrollApi.d.ts → private/useScrollApi.d.ts} +1 -1
- package/dist/plugins/MagicScroll/src/composables/{useScrollApi.mjs → private/useScrollApi.mjs} +4 -4
- package/dist/plugins/MagicScroll/src/composables/useCollisionDetect.mjs +2 -2
- package/dist/plugins/MagicScroll/src/symbols/index.d.ts +4 -4
- package/dist/plugins/MagicScroll/src/symbols/index.mjs +4 -4
- package/dist/plugins/MagicScroll/src/types/index.d.ts +2 -2
- package/dist/plugins/MagicToast/index.d.ts +2 -3
- package/dist/plugins/MagicToast/index.mjs +2 -3
- package/dist/plugins/MagicToast/nuxt.mjs +0 -4
- package/dist/plugins/MagicToast/src/components/MagicToast.vue +5 -3
- package/dist/plugins/MagicToast/src/composables/private/useToastApi.d.ts +5 -0
- package/dist/plugins/MagicToast/src/composables/private/useToastApi.mjs +23 -0
- package/dist/plugins/MagicToast/src/composables/private/useToastCallback.d.ts +3 -3
- package/dist/plugins/MagicToast/src/composables/private/useToastCallback.mjs +11 -9
- package/dist/plugins/MagicToast/src/composables/useMagicToast.d.ts +12 -0
- package/dist/plugins/MagicToast/src/composables/useMagicToast.mjs +36 -0
- package/dist/plugins/index.d.ts +1 -0
- package/dist/plugins/index.mjs +1 -0
- package/dist/utils/index.d.mts +10 -1
- package/dist/utils/index.d.ts +10 -1
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +7 -0
- package/dist/utils/index.mjs.map +1 -1
- package/dist/utils/types/ValueOf.ts +1 -0
- package/dist/utils/types/index.ts +1 -0
- package/package.json +1 -1
- package/dist/plugins/MagicCommand/src/composables/useCommandEmitter.d.ts +0 -15
- package/dist/plugins/MagicCommand/src/composables/useCommandEmitter.mjs +0 -9
- package/dist/plugins/MagicCookie/src/composables/useCookieEmitter.d.ts +0 -15
- package/dist/plugins/MagicCookie/src/composables/useCookieEmitter.mjs +0 -9
- package/dist/plugins/MagicDraggable/src/composables/useDraggableApi.d.ts +0 -1
- package/dist/plugins/MagicDraggable/src/composables/useDraggableApi.mjs +0 -2
- package/dist/plugins/MagicDrawer/src/composables/useDrawerApi.d.ts +0 -26
- package/dist/plugins/MagicDrawer/src/composables/useDrawerEmitter.d.ts +0 -15
- package/dist/plugins/MagicDrawer/src/composables/useDrawerEmitter.mjs +0 -9
- package/dist/plugins/MagicModal/src/composables/useModalApi.d.ts +0 -19
- package/dist/plugins/MagicModal/src/composables/useModalEmitter.d.ts +0 -15
- package/dist/plugins/MagicScroll/src/composables/useCollisionEmitter.d.ts +0 -15
- package/dist/plugins/MagicScroll/src/composables/useCollisionEmitter.mjs +0 -9
- package/dist/plugins/MagicToast/src/composables/useToastApi.d.ts +0 -13
- package/dist/plugins/MagicToast/src/composables/useToastApi.mjs +0 -50
- package/dist/plugins/MagicToast/src/composables/useToastEmitter.d.ts +0 -15
- package/dist/plugins/MagicToast/src/composables/useToastEmitter.mjs +0 -9
- /package/dist/plugins/MagicMarquee/src/composables/{useMarqueeApi.d.ts → private/useMarqueeApi.d.ts} +0 -0
- /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 {
|
|
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
|
|
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 {
|
|
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
|
-
|
|
20
|
+
emitter.emit("beforeEnter", toValue(id));
|
|
20
21
|
if (mappedOptions.scrollLock) {
|
|
21
|
-
if (mappedOptions.
|
|
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
|
-
|
|
32
|
+
emitter.emit("enter", toValue(id));
|
|
32
33
|
}
|
|
33
34
|
async function onAfterEnter(_el) {
|
|
34
|
-
|
|
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
|
-
|
|
43
|
+
emitter.emit("beforeLeave", toValue(id));
|
|
43
44
|
}
|
|
44
45
|
function onLeave(_el) {
|
|
45
|
-
|
|
46
|
+
emitter.emit("leave", toValue(id));
|
|
46
47
|
}
|
|
47
48
|
function onAfterLeave(_el) {
|
|
48
|
-
|
|
49
|
+
emitter.emit("afterLeave", toValue(id));
|
|
49
50
|
if (mappedOptions.scrollLock) {
|
|
50
51
|
unlockScroll();
|
|
51
|
-
if (mappedOptions.
|
|
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
|
+
};
|
package/dist/plugins/MagicDrawer/src/composables/{useDrawerApi.mjs → private/useDrawerDOM.mjs}
RENAMED
|
@@ -1,46 +1,18 @@
|
|
|
1
|
-
import { ref
|
|
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 {
|
|
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
|
|
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 {
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
384
|
-
|
|
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
|
-
|
|
411
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
@@ -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
|
+
}
|
|
@@ -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
|
+
});
|