@maas/vue-equipment 0.13.1 → 0.14.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 (39) hide show
  1. package/dist/nuxt/module.json +1 -1
  2. package/dist/nuxt/module.mjs +7 -0
  3. package/dist/plugins/MagicDrawer/index.d.ts +6 -0
  4. package/dist/plugins/MagicDrawer/index.mjs +9 -0
  5. package/dist/plugins/MagicDrawer/nuxt.d.ts +0 -0
  6. package/dist/plugins/MagicDrawer/nuxt.mjs +27 -0
  7. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue +237 -0
  8. package/dist/plugins/MagicDrawer/src/components/MagicDrawer.vue.d.ts +52 -0
  9. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.d.ts +22 -0
  10. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerCallback.mjs +61 -0
  11. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.d.ts +15 -0
  12. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerDrag.mjs +201 -0
  13. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerStore.d.ts +5 -0
  14. package/dist/plugins/MagicDrawer/src/composables/private/useDrawerStore.mjs +15 -0
  15. package/dist/plugins/MagicDrawer/src/composables/useDrawerApi.d.ts +19 -0
  16. package/dist/plugins/MagicDrawer/src/composables/useDrawerApi.mjs +75 -0
  17. package/dist/plugins/MagicDrawer/src/composables/useDrawerEmitter.d.ts +15 -0
  18. package/dist/plugins/MagicDrawer/src/composables/useDrawerEmitter.mjs +9 -0
  19. package/dist/plugins/MagicDrawer/src/index.d.ts +0 -0
  20. package/dist/plugins/MagicDrawer/src/index.mjs +0 -0
  21. package/dist/plugins/MagicDrawer/src/types/index.d.ts +29 -0
  22. package/dist/plugins/MagicDrawer/src/types/index.mjs +0 -0
  23. package/dist/plugins/MagicDrawer/src/utils/defaultOptions.d.ts +4 -0
  24. package/dist/plugins/MagicDrawer/src/utils/defaultOptions.mjs +22 -0
  25. package/dist/plugins/MagicModal/src/components/MagicModal.vue.d.ts +2 -2
  26. package/dist/plugins/MagicModal/src/composables/private/useModalCallback.d.ts +4 -4
  27. package/dist/plugins/MagicModal/src/composables/private/useModalCallback.mjs +14 -13
  28. package/dist/plugins/MagicModal/src/utils/defaultOptions.d.ts +1 -1
  29. package/dist/plugins/index.d.ts +1 -0
  30. package/dist/plugins/index.mjs +1 -0
  31. package/dist/utils/css/animations/slide-btt-out.css +0 -3
  32. package/dist/utils/css/animations/slide-ltr-out.css +0 -3
  33. package/dist/utils/css/animations/slide-rtl-out.css +0 -3
  34. package/dist/utils/css/animations/slide-ttb-out.css +0 -3
  35. package/dist/utils/index.js +26 -0
  36. package/dist/utils/index.js.map +1 -1
  37. package/dist/utils/index.mjs +25 -0
  38. package/dist/utils/index.mjs.map +1 -1
  39. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@maas/vue-equipment/nuxt",
3
3
  "configKey": "vueEquipment",
4
- "version": "0.13.0"
4
+ "version": "0.14.0"
5
5
  }
@@ -8,6 +8,13 @@ const functions$1 = [
8
8
  docs: "https://maas.egineering/vue-equipment/plugins/MagicConsent/",
9
9
  description: "consent"
10
10
  },
11
+ {
12
+ name: "MagicDrawer",
13
+ "package": "plugins",
14
+ lastUpdated: 1704735337000,
15
+ docs: "https://maas.egineering/vue-equipment/plugins/MagicDrawer/",
16
+ description: "drawer"
17
+ },
11
18
  {
12
19
  name: "MagicMarquee",
13
20
  "package": "plugins",
@@ -0,0 +1,6 @@
1
+ import MagicDrawer from './src/components/MagicDrawer.vue.js';
2
+ import { useDrawerApi } from './src/composables/useDrawerApi.js';
3
+ import { useDrawerEmitter } from './src/composables/useDrawerEmitter.js';
4
+ import type { Plugin } from 'vue';
5
+ declare const MagicDrawerPlugin: Plugin;
6
+ export { MagicDrawerPlugin, MagicDrawer, useDrawerApi, useDrawerEmitter };
@@ -0,0 +1,9 @@
1
+ import MagicDrawer from "./src/components/MagicDrawer.vue";
2
+ import { useDrawerApi } from "./src/composables/useDrawerApi.mjs";
3
+ import { useDrawerEmitter } from "./src/composables/useDrawerEmitter.mjs";
4
+ const MagicDrawerPlugin = {
5
+ install: (app) => {
6
+ app.component("MagicDrawer", MagicDrawer);
7
+ }
8
+ };
9
+ export { MagicDrawerPlugin, MagicDrawer, useDrawerApi, useDrawerEmitter };
File without changes
@@ -0,0 +1,27 @@
1
+ import {
2
+ defineNuxtModule,
3
+ createResolver,
4
+ addComponentsDir,
5
+ addImports
6
+ } from "@nuxt/kit";
7
+ export default defineNuxtModule({
8
+ meta: {
9
+ name: "@maas/vue-equipment/nuxt/MagicDrawer"
10
+ },
11
+ setup() {
12
+ const resolver = createResolver(import.meta.url);
13
+ addComponentsDir({
14
+ path: resolver.resolve("src/components"),
15
+ global: true,
16
+ pathPrefix: false
17
+ });
18
+ addImports({
19
+ from: "@maas/vue-equipment/plugins/MagicDrawer",
20
+ name: "useDrawerApi"
21
+ });
22
+ addImports({
23
+ from: "@maas/vue-equipment/plugins/MagicDrawer",
24
+ name: "useDrawerEmitter"
25
+ });
26
+ }
27
+ });
@@ -0,0 +1,237 @@
1
+ <template>
2
+ <transition :duration="5000">
3
+ <teleport
4
+ v-if="wrapperActive"
5
+ :to="mappedOptions.teleport?.target"
6
+ :disabled="mappedOptions.teleport?.disabled"
7
+ >
8
+ <component
9
+ :is="mappedOptions.tag"
10
+ ref="drawer"
11
+ class="magic-drawer"
12
+ :id="toValue(id)"
13
+ :class="[
14
+ toValue(props.class),
15
+ `-${mappedOptions.position}`,
16
+ { '-dragging': dragging },
17
+ ]"
18
+ aria-modal="true"
19
+ >
20
+ <transition
21
+ v-if="mappedOptions.backdrop || !!$slots.backdrop"
22
+ :name="mappedOptions.transitions?.backdrop"
23
+ >
24
+ <div
25
+ v-show="innerActive"
26
+ class="magic-drawer__backdrop"
27
+ @click.self="close"
28
+ >
29
+ <slot name="backdrop" />
30
+ </div>
31
+ </transition>
32
+ <div class="magic-drawer__wrapper">
33
+ <transition
34
+ :name="mappedOptions.transitions?.content"
35
+ @before-leave="onBeforeLeave"
36
+ @leave="onLeave"
37
+ @after-leave="onAfterLeave"
38
+ @before-enter="onBeforeEnter"
39
+ @enter="onEnter"
40
+ @after-enter="onAfterEnter"
41
+ >
42
+ <div
43
+ ref="elRef"
44
+ v-show="innerActive"
45
+ class="magic-drawer__content"
46
+ @pointerdown="onPointerdown"
47
+ :style="style"
48
+ >
49
+ <component
50
+ v-if="component"
51
+ v-bind="props"
52
+ :is="component"
53
+ @close="close"
54
+ />
55
+ <slot v-else />
56
+ </div>
57
+ </transition>
58
+ </div>
59
+ </component>
60
+ </teleport>
61
+ </transition>
62
+ </template>
63
+
64
+ <script setup lang="ts">
65
+ import {
66
+ ref,
67
+ watch,
68
+ nextTick,
69
+ toValue,
70
+ type Component,
71
+ type MaybeRef,
72
+ } from 'vue'
73
+ import { createDefu } from 'defu'
74
+ import { onKeyStroke, unrefElement } from '@vueuse/core'
75
+ import { defaultOptions } from './../utils/defaultOptions'
76
+ import { useDrawerApi } from './../composables/useDrawerApi'
77
+ import { useDrawerCallback } from '../composables/private/useDrawerCallback'
78
+ import { useDrawerDrag } from '../composables/private/useDrawerDrag'
79
+
80
+ import type { RequireAll } from '@maas/vue-equipment/utils'
81
+ import type { DrawerOptions } from './../types/index'
82
+
83
+ import '@maas/vue-equipment/utils/css/animations/fade-in.css'
84
+ import '@maas/vue-equipment/utils/css/animations/fade-out.css'
85
+ import '@maas/vue-equipment/utils/css/animations/slide-ltr-in.css'
86
+ import '@maas/vue-equipment/utils/css/animations/slide-rtl-in.css'
87
+ import '@maas/vue-equipment/utils/css/animations/slide-ttb-in.css'
88
+ import '@maas/vue-equipment/utils/css/animations/slide-btt-in.css'
89
+ import '@maas/vue-equipment/utils/css/animations/slide-ltr-out.css'
90
+ import '@maas/vue-equipment/utils/css/animations/slide-rtl-out.css'
91
+ import '@maas/vue-equipment/utils/css/animations/slide-ttb-out.css'
92
+ import '@maas/vue-equipment/utils/css/animations/slide-btt-out.css'
93
+
94
+ // Prevent keys array from being merged with default
95
+ const customDefu = createDefu((obj, key, value) => {
96
+ if (key === 'keys') {
97
+ obj[key] = value
98
+ return true
99
+ }
100
+ })
101
+
102
+ interface MagicDrawerProps {
103
+ id: MaybeRef<string>
104
+ class?: MaybeRef<string>
105
+ component?: Component
106
+ props?: Record<string, unknown>
107
+ options?: DrawerOptions
108
+ }
109
+
110
+ const props = withDefaults(defineProps<MagicDrawerProps>(), {
111
+ options: () => defaultOptions,
112
+ })
113
+
114
+ const elRef = ref<HTMLDivElement | undefined>(undefined)
115
+ const drawer = ref<HTMLElement | undefined>(undefined)
116
+ const drawerApi = useDrawerApi(props.id, { focusTarget: drawer })
117
+ const mappedOptions: typeof defaultOptions = customDefu(
118
+ props.options,
119
+ defaultOptions
120
+ )
121
+
122
+ const overshoot = ref(0)
123
+ const { position, threshold } = mappedOptions
124
+
125
+ const {
126
+ isActive,
127
+ close,
128
+ trapFocus,
129
+ releaseFocus,
130
+ lockScroll,
131
+ unlockScroll,
132
+ addScrollLockPadding,
133
+ removeScrollLockPadding,
134
+ } = drawerApi
135
+
136
+ const { onPointerdown, dragging, style } = useDrawerDrag({
137
+ position,
138
+ threshold,
139
+ overshoot,
140
+ elRef,
141
+ close,
142
+ })
143
+
144
+ // Split isActive into two values to animate drawer smoothly
145
+ const innerActive = ref(false)
146
+ const wrapperActive = ref(false)
147
+
148
+ const {
149
+ onBeforeEnter,
150
+ onEnter,
151
+ onAfterEnter,
152
+ onBeforeLeave,
153
+ onLeave,
154
+ onAfterLeave,
155
+ } = useDrawerCallback({
156
+ id: props.id,
157
+ mappedOptions,
158
+ addScrollLockPadding,
159
+ removeScrollLockPadding,
160
+ lockScroll,
161
+ unlockScroll,
162
+ trapFocus,
163
+ releaseFocus,
164
+ wrapperActive,
165
+ })
166
+
167
+ // Handle state
168
+ async function onOpen() {
169
+ wrapperActive.value = true
170
+ await nextTick()
171
+ innerActive.value = true
172
+ }
173
+
174
+ function onClose() {
175
+ innerActive.value = false
176
+ }
177
+
178
+ function convertToPixels(value: string) {
179
+ const regex = /^(\d*\.?\d+)\s*(rem|px)$/
180
+
181
+ const match = value.match(regex)
182
+
183
+ if (!match) {
184
+ console.error(
185
+ `--magic-drawer-drag-overshoot (${value}) needs to be specified in px or rem`
186
+ )
187
+ return 0
188
+ }
189
+
190
+ const numericValue = parseFloat(match[1])
191
+ const unit = match[2]
192
+ const bodyFontSize = window.getComputedStyle(document.body).fontSize
193
+ const rootFontSize = parseFloat(bodyFontSize) || 16
194
+
195
+ switch (unit) {
196
+ case 'rem':
197
+ return numericValue * rootFontSize
198
+ case 'px':
199
+ return numericValue
200
+ }
201
+ }
202
+
203
+ function saveOvershoot() {
204
+ const element = unrefElement(drawer)
205
+ const overshootVar = getComputedStyle(element!).getPropertyValue(
206
+ '--magic-drawer-drag-overshoot'
207
+ )
208
+
209
+ overshoot.value = convertToPixels(overshootVar) || 0
210
+ }
211
+
212
+ if (mappedOptions.keys) {
213
+ for (const key of mappedOptions.keys) {
214
+ onKeyStroke(key, (e) => {
215
+ e.preventDefault()
216
+ close()
217
+ })
218
+ }
219
+ }
220
+
221
+ watch(isActive, async (value) => {
222
+ if (value) {
223
+ await onOpen()
224
+ } else {
225
+ onClose()
226
+ }
227
+ })
228
+
229
+ // Save overshoot, as soon as drawer apepars in in DOM
230
+ watch(innerActive, () => {
231
+ saveOvershoot()
232
+ })
233
+ </script>
234
+
235
+ <style>
236
+ :root{--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-y:auto;--magic-drawer-handle-wrapper-height:2rem;--magic-drawer-handle-width:3rem;--magic-drawer-handle-height:0.375rem;--magic-drawer-handle-color:#d4d4d8;--magic-drawer-handle-border-radius:0.25rem;--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-drag-overshoot-x:0;--magic-drawer-drag-overshoot-y:0}.magic-drawer{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;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.-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.-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.-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__wrapper{transform:translate(var(--magic-drawer-drag-overshoot-x),var(--magic-drawer-drag-overshoot-y));width:100%}.magic-drawer__content{-webkit-overflow-scrolling:touch;align-items:var(--magic-drawer-align-items);cursor:grab;display:flex;justify-content:var(--magic-drawer-justify-content);max-height:100%;overflow-y:var(--magic-drawer-content-overflow-y);position:relative;scroll-behavior:smooth;width:100%}.magic-drawer.-dragging .magic-drawer__content{cursor:grabbing}.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;position:fixed;right:0;top:0;width:100%;z-index:-1}.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}
237
+ </style>
@@ -0,0 +1,52 @@
1
+ import { type Component, type MaybeRef } from 'vue';
2
+ import type { DrawerOptions } from './../types/index';
3
+ import '@maas/vue-equipment/utils/css/animations/fade-in.css';
4
+ import '@maas/vue-equipment/utils/css/animations/fade-out.css';
5
+ import '@maas/vue-equipment/utils/css/animations/slide-ltr-in.css';
6
+ import '@maas/vue-equipment/utils/css/animations/slide-rtl-in.css';
7
+ import '@maas/vue-equipment/utils/css/animations/slide-ttb-in.css';
8
+ import '@maas/vue-equipment/utils/css/animations/slide-btt-in.css';
9
+ import '@maas/vue-equipment/utils/css/animations/slide-ltr-out.css';
10
+ import '@maas/vue-equipment/utils/css/animations/slide-rtl-out.css';
11
+ import '@maas/vue-equipment/utils/css/animations/slide-ttb-out.css';
12
+ import '@maas/vue-equipment/utils/css/animations/slide-btt-out.css';
13
+ interface MagicDrawerProps {
14
+ id: MaybeRef<string>;
15
+ class?: MaybeRef<string>;
16
+ component?: Component;
17
+ props?: Record<string, unknown>;
18
+ options?: DrawerOptions;
19
+ }
20
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<MagicDrawerProps>, {
21
+ options: () => DrawerOptions;
22
+ }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<MagicDrawerProps>, {
23
+ options: () => DrawerOptions;
24
+ }>>>, {
25
+ options: DrawerOptions;
26
+ }, {}>, {
27
+ backdrop?(_: {}): any;
28
+ default?(_: {}): any;
29
+ }>;
30
+ export default _default;
31
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
32
+ type __VLS_TypePropsToRuntimeProps<T> = {
33
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
34
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
35
+ } : {
36
+ type: import('vue').PropType<T[K]>;
37
+ required: true;
38
+ };
39
+ };
40
+ type __VLS_WithDefaults<P, D> = {
41
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
42
+ default: D[K];
43
+ }> : P[K];
44
+ };
45
+ type __VLS_Prettify<T> = {
46
+ [K in keyof T]: T[K];
47
+ } & {};
48
+ type __VLS_WithTemplateSlots<T, S> = T & {
49
+ new (): {
50
+ $slots: S;
51
+ };
52
+ };
@@ -0,0 +1,22 @@
1
+ import { type Ref, type MaybeRef } from 'vue';
2
+ import type { DrawerOptions } from '../../types.js';
3
+ type UseDrawerCallbackArgs = {
4
+ id: MaybeRef<string>;
5
+ mappedOptions: DrawerOptions;
6
+ addScrollLockPadding: () => void;
7
+ removeScrollLockPadding: () => void;
8
+ lockScroll: () => void;
9
+ unlockScroll: () => void;
10
+ trapFocus: () => void;
11
+ releaseFocus: () => void;
12
+ wrapperActive: Ref<boolean>;
13
+ };
14
+ export declare function useDrawerCallback(args: UseDrawerCallbackArgs): {
15
+ onBeforeEnter: (_el: Element) => void;
16
+ onEnter: (_el: Element) => void;
17
+ onAfterEnter: (_el: Element) => Promise<void>;
18
+ onBeforeLeave: (_el: Element) => void;
19
+ onLeave: (_el: Element) => void;
20
+ onAfterLeave: (_el: Element) => void;
21
+ };
22
+ export {};
@@ -0,0 +1,61 @@
1
+ import { toValue, nextTick } from "vue";
2
+ import { useDrawerEmitter } from "./../useDrawerEmitter.mjs";
3
+ export function useDrawerCallback(args) {
4
+ const {
5
+ id,
6
+ mappedOptions,
7
+ addScrollLockPadding,
8
+ removeScrollLockPadding,
9
+ lockScroll,
10
+ unlockScroll,
11
+ trapFocus,
12
+ releaseFocus,
13
+ wrapperActive
14
+ } = args;
15
+ function onBeforeEnter(_el) {
16
+ useDrawerEmitter().emit("beforeEnter", toValue(id));
17
+ }
18
+ function onEnter(_el) {
19
+ useDrawerEmitter().emit("enter", toValue(id));
20
+ }
21
+ async function onAfterEnter(_el) {
22
+ useDrawerEmitter().emit("afterEnter", toValue(id));
23
+ if (mappedOptions.scrollLock) {
24
+ if (mappedOptions.scrollLockPadding) {
25
+ addScrollLockPadding();
26
+ }
27
+ lockScroll();
28
+ }
29
+ if (mappedOptions.focusTrap) {
30
+ await nextTick();
31
+ trapFocus();
32
+ }
33
+ }
34
+ function onBeforeLeave(_el) {
35
+ useDrawerEmitter().emit("beforeLeave", toValue(id));
36
+ }
37
+ function onLeave(_el) {
38
+ useDrawerEmitter().emit("leave", toValue(id));
39
+ }
40
+ function onAfterLeave(_el) {
41
+ useDrawerEmitter().emit("afterLeave", toValue(id));
42
+ if (mappedOptions.scrollLock) {
43
+ unlockScroll();
44
+ if (mappedOptions.scrollLockPadding) {
45
+ removeScrollLockPadding();
46
+ }
47
+ }
48
+ if (mappedOptions.focusTrap) {
49
+ releaseFocus();
50
+ }
51
+ wrapperActive.value = false;
52
+ }
53
+ return {
54
+ onBeforeEnter,
55
+ onEnter,
56
+ onAfterEnter,
57
+ onBeforeLeave,
58
+ onLeave,
59
+ onAfterLeave
60
+ };
61
+ }
@@ -0,0 +1,15 @@
1
+ import { type MaybeRef } from 'vue';
2
+ import { defaultOptions } from '../../utils/defaultOptions.js';
3
+ type UseDrawerDragArgs = {
4
+ elRef: MaybeRef<HTMLDivElement | undefined>;
5
+ position: MaybeRef<typeof defaultOptions.position>;
6
+ threshold: MaybeRef<typeof defaultOptions.threshold>;
7
+ overshoot: MaybeRef<number>;
8
+ close: () => void;
9
+ };
10
+ export declare function useDrawerDrag(args: UseDrawerDragArgs): {
11
+ style: import("vue").ComputedRef<string>;
12
+ dragging: import("vue").Ref<boolean>;
13
+ onPointerdown: (e: PointerEvent) => void;
14
+ };
15
+ export {};
@@ -0,0 +1,201 @@
1
+ import {
2
+ ref,
3
+ computed,
4
+ onMounted,
5
+ watch,
6
+ onBeforeUnmount,
7
+ toValue
8
+ } from "vue";
9
+ import { useEventListener, unrefElement } from "@vueuse/core";
10
+ import { interpolate } from "@maas/vue-equipment/utils";
11
+ import { useDrawerEmitter } from "../useDrawerEmitter.mjs";
12
+ export function useDrawerDrag(args) {
13
+ const { elRef, position, overshoot, threshold, close } = args;
14
+ const dragStart = ref(void 0);
15
+ const originX = ref(0);
16
+ const originY = ref(0);
17
+ const dragging = ref(false);
18
+ const shouldClose = ref(false);
19
+ const elRect = ref(void 0);
20
+ let cancelPointermove = void 0;
21
+ const draggedX = ref(0);
22
+ const draggedY = ref(0);
23
+ const style = computed(
24
+ () => `transform: translate(${draggedX.value}px, ${draggedY.value}px)`
25
+ );
26
+ function getSizes() {
27
+ elRect.value = unrefElement(elRef)?.getBoundingClientRect();
28
+ }
29
+ function checkPosition() {
30
+ switch (position) {
31
+ case "bottom":
32
+ if (draggedY.value > toValue(threshold).distance) {
33
+ shouldClose.value = true;
34
+ }
35
+ break;
36
+ case "top":
37
+ if (draggedY.value < toValue(threshold).distance * -1) {
38
+ shouldClose.value = true;
39
+ }
40
+ break;
41
+ case "right":
42
+ if (draggedX.value > toValue(threshold).distance) {
43
+ shouldClose.value = true;
44
+ }
45
+ break;
46
+ case "left":
47
+ if (draggedX.value < toValue(threshold).distance * -1) {
48
+ shouldClose.value = true;
49
+ }
50
+ break;
51
+ }
52
+ }
53
+ function checkMomentum({ x, y }) {
54
+ const elapsed = Date.now() - dragStart.value.getTime();
55
+ const velocityX = (x - originX.value) / elapsed;
56
+ const velocityY = (y - originY.value) / elapsed;
57
+ switch (position) {
58
+ case "bottom":
59
+ if (velocityY > toValue(threshold).momentum) {
60
+ shouldClose.value = true;
61
+ }
62
+ break;
63
+ case "top":
64
+ if (velocityY < toValue(threshold).momentum * -1) {
65
+ shouldClose.value = true;
66
+ }
67
+ break;
68
+ case "right":
69
+ if (velocityX > toValue(threshold).momentum) {
70
+ shouldClose.value = true;
71
+ }
72
+ break;
73
+ case "left":
74
+ if (velocityX < toValue(threshold).momentum * -1) {
75
+ shouldClose.value = true;
76
+ }
77
+ break;
78
+ }
79
+ }
80
+ function clamp(value, from, to) {
81
+ if (from > to) {
82
+ if (value > from)
83
+ return value;
84
+ if (value < to)
85
+ return to;
86
+ else
87
+ return value;
88
+ } else if (from < to) {
89
+ if (value < from)
90
+ return value;
91
+ if (value > to)
92
+ return to;
93
+ else
94
+ return value;
95
+ } else {
96
+ return value;
97
+ }
98
+ }
99
+ function setDragged({ x, y }) {
100
+ switch (position) {
101
+ case "bottom":
102
+ draggedY.value = clamp(y - originY.value, 0, toValue(overshoot) * -1);
103
+ break;
104
+ case "top":
105
+ draggedY.value = clamp(y - originY.value, 0, toValue(overshoot));
106
+ break;
107
+ case "right":
108
+ draggedX.value = clamp(x - originX.value, 0, toValue(overshoot) * -1);
109
+ break;
110
+ case "left":
111
+ draggedX.value = clamp(x - originX.value, 0, toValue(overshoot));
112
+ break;
113
+ }
114
+ }
115
+ function resetStateAndListeners() {
116
+ dragging.value = false;
117
+ cancelPointermove?.();
118
+ }
119
+ function resetDragged() {
120
+ draggedX.value = 0;
121
+ draggedY.value = 0;
122
+ }
123
+ function emitterCallback(event, _payload) {
124
+ if (event === "afterLeave") {
125
+ resetDragged();
126
+ }
127
+ }
128
+ function onPointerup(e) {
129
+ resetStateAndListeners();
130
+ if (shouldClose.value) {
131
+ close();
132
+ } else {
133
+ switch (position) {
134
+ case "bottom":
135
+ case "top":
136
+ interpolate({
137
+ from: draggedY.value,
138
+ to: 0,
139
+ duration: 50,
140
+ callback: (value) => {
141
+ draggedY.value = value;
142
+ }
143
+ });
144
+ break;
145
+ case "right":
146
+ case "left":
147
+ interpolate({
148
+ from: draggedX.value,
149
+ to: 0,
150
+ duration: 50,
151
+ callback: (value) => {
152
+ draggedX.value = value;
153
+ }
154
+ });
155
+ break;
156
+ }
157
+ }
158
+ e.preventDefault();
159
+ }
160
+ function onPointermove(e) {
161
+ shouldClose.value = false;
162
+ checkMomentum({ x: e.screenX, y: e.screenY });
163
+ setDragged({ x: e.screenX, y: e.screenY });
164
+ checkPosition();
165
+ e.preventDefault();
166
+ }
167
+ function onPointerdown(e) {
168
+ if (dragging.value) {
169
+ return;
170
+ } else {
171
+ dragging.value = true;
172
+ }
173
+ ;
174
+ e.target.setPointerCapture(e.pointerId);
175
+ useEventListener(document, "pointerup", onPointerup);
176
+ cancelPointermove = useEventListener(document, "pointermove", onPointermove);
177
+ originX.value = e.screenX;
178
+ originY.value = e.screenY;
179
+ dragStart.value = /* @__PURE__ */ new Date();
180
+ onPointermove(e);
181
+ e.preventDefault();
182
+ }
183
+ onMounted(() => {
184
+ getSizes();
185
+ useDrawerEmitter().on("*", emitterCallback);
186
+ });
187
+ watch(
188
+ () => unrefElement(elRef),
189
+ () => {
190
+ getSizes();
191
+ }
192
+ );
193
+ onBeforeUnmount(() => {
194
+ useDrawerEmitter().off("*", emitterCallback);
195
+ });
196
+ return {
197
+ style,
198
+ dragging,
199
+ onPointerdown
200
+ };
201
+ }
@@ -0,0 +1,5 @@
1
+ export declare function useDrawerStore(): {
2
+ drawerStore: import("vue").Ref<string[]>;
3
+ addInstance: (id: string) => void;
4
+ removeInstance: (id: string) => void;
5
+ };
@@ -0,0 +1,15 @@
1
+ import { ref } from "vue";
2
+ let drawerStore = ref([]);
3
+ export function useDrawerStore() {
4
+ function addInstance(id) {
5
+ drawerStore.value.push(id);
6
+ }
7
+ function removeInstance(id) {
8
+ drawerStore.value = drawerStore.value.filter((x) => x !== id);
9
+ }
10
+ return {
11
+ drawerStore,
12
+ addInstance,
13
+ removeInstance
14
+ };
15
+ }
@@ -0,0 +1,19 @@
1
+ import { type MaybeRef } from 'vue';
2
+ import type { DrawerOptions } from '../types/index.js';
3
+ import type { MaybeElementRef } from '@vueuse/core';
4
+ export type useDrawerApiOptions = Pick<DrawerOptions, 'scrollLock'> & {
5
+ focusTarget: MaybeElementRef;
6
+ };
7
+ export declare function useDrawerApi(id?: MaybeRef<string>, options?: useDrawerApiOptions): {
8
+ id: import("vue").ComputedRef<string>;
9
+ isActive: import("vue").ComputedRef<boolean>;
10
+ open: () => void;
11
+ close: () => void;
12
+ trapFocus: () => void;
13
+ releaseFocus: () => void;
14
+ lockScroll: () => void;
15
+ unlockScroll: () => void;
16
+ addScrollLockPadding: () => void;
17
+ removeScrollLockPadding: () => void;
18
+ };
19
+ export type UseDrawerApiReturn = ReturnType<typeof useDrawerApi>;
@@ -0,0 +1,75 @@
1
+ import { uuid } from "@maas/vue-equipment/utils";
2
+ import { ref, computed, toValue } from "vue";
3
+ import { defu } from "defu";
4
+ import { useScrollLock } from "@vueuse/core";
5
+ import { useFocusTrap } from "@vueuse/integrations/useFocusTrap";
6
+ import { useDrawerStore } from "./private/useDrawerStore.mjs";
7
+ const defaultOptions = {
8
+ focusTarget: void 0,
9
+ scrollLock: true
10
+ };
11
+ export function useDrawerApi(id, options) {
12
+ const positionFixedElements = ref([]);
13
+ const mappedId = computed(() => toValue(id) || uuid());
14
+ const mappedOptions = defu(options, defaultOptions);
15
+ const focusTrap = mappedOptions.focusTarget ? useFocusTrap(mappedOptions.focusTarget) : void 0;
16
+ const scrollLock = mappedOptions.scrollLock && typeof window !== "undefined" ? useScrollLock(document.body) : ref(false);
17
+ const { drawerStore, addInstance, removeInstance } = useDrawerStore();
18
+ const isActive = computed(() => drawerStore.value.includes(mappedId.value));
19
+ function open() {
20
+ addInstance(mappedId.value);
21
+ }
22
+ function close() {
23
+ removeInstance(mappedId.value);
24
+ }
25
+ function trapFocus() {
26
+ if (focusTrap) {
27
+ focusTrap.activate();
28
+ }
29
+ }
30
+ function releaseFocus() {
31
+ if (focusTrap) {
32
+ focusTrap.deactivate();
33
+ }
34
+ }
35
+ function lockScroll() {
36
+ scrollLock.value = true;
37
+ }
38
+ function unlockScroll() {
39
+ scrollLock.value = false;
40
+ }
41
+ function addScrollLockPadding() {
42
+ if (typeof window === "undefined")
43
+ return;
44
+ const scrollbarWidth = window.innerWidth - document.body.offsetWidth;
45
+ document.body.style.setProperty("--scrollbar-width", `${scrollbarWidth}px`);
46
+ document.body.style.paddingRight = "var(--scrollbar-width)";
47
+ positionFixedElements.value = [
48
+ ...document.body.getElementsByTagName("*")
49
+ ].filter(
50
+ (x) => getComputedStyle(x, null).getPropertyValue("position") === "fixed"
51
+ );
52
+ positionFixedElements.value.forEach(
53
+ (elem) => elem.style.paddingRight = "var(--scrollbar-width)"
54
+ );
55
+ }
56
+ function removeScrollLockPadding() {
57
+ document.body.style.paddingRight = "";
58
+ document.body.style.removeProperty("--scrollbar-width");
59
+ positionFixedElements.value.forEach(
60
+ (elem) => elem.style.paddingRight = ""
61
+ );
62
+ }
63
+ return {
64
+ id: mappedId,
65
+ isActive,
66
+ open,
67
+ close,
68
+ trapFocus,
69
+ releaseFocus,
70
+ lockScroll,
71
+ unlockScroll,
72
+ addScrollLockPadding,
73
+ removeScrollLockPadding
74
+ };
75
+ }
@@ -0,0 +1,15 @@
1
+ import type { DrawerEvents } from '../types.js';
2
+ export declare function useDrawerEmitter(): {
3
+ on: {
4
+ <Key extends keyof DrawerEvents>(type: Key, handler: import("mitt").Handler<DrawerEvents[Key]>): void;
5
+ (type: "*", handler: import("mitt").WildcardHandler<DrawerEvents>): void;
6
+ };
7
+ off: {
8
+ <Key_1 extends keyof DrawerEvents>(type: Key_1, handler?: import("mitt").Handler<DrawerEvents[Key_1]> | undefined): void;
9
+ (type: "*", handler: import("mitt").WildcardHandler<DrawerEvents>): void;
10
+ };
11
+ emit: {
12
+ <Key_2 extends keyof DrawerEvents>(type: Key_2, event: DrawerEvents[Key_2]): void;
13
+ <Key_3 extends keyof DrawerEvents>(type: undefined extends DrawerEvents[Key_3] ? Key_3 : never): void;
14
+ };
15
+ };
@@ -0,0 +1,9 @@
1
+ import mitt from "mitt";
2
+ const emitter = mitt();
3
+ export function useDrawerEmitter() {
4
+ return {
5
+ on: emitter.on,
6
+ off: emitter.off,
7
+ emit: emitter.emit
8
+ };
9
+ }
File without changes
File without changes
@@ -0,0 +1,29 @@
1
+ export type DrawerOptions = {
2
+ position?: 'top' | 'right' | 'bottom' | 'left';
3
+ backdrop?: boolean;
4
+ focusTrap?: boolean;
5
+ scrollLock?: boolean;
6
+ scrollLockPadding?: boolean;
7
+ teleport?: {
8
+ target?: string;
9
+ disabled?: boolean;
10
+ };
11
+ transitions?: {
12
+ content?: string;
13
+ backdrop?: string;
14
+ };
15
+ threshold?: {
16
+ distance?: number;
17
+ momentum?: number;
18
+ };
19
+ tag?: 'dialog' | 'div';
20
+ keys?: string[] | false;
21
+ };
22
+ export type DrawerEvents = {
23
+ beforeEnter: string;
24
+ enter: string;
25
+ afterEnter: string;
26
+ beforeLeave: string;
27
+ leave: string;
28
+ afterLeave: string;
29
+ };
File without changes
@@ -0,0 +1,4 @@
1
+ import type { DrawerOptions } from '../types.js';
2
+ import type { RequireAll } from '@maas/vue-equipment/utils';
3
+ declare const defaultOptions: RequireAll<DrawerOptions>;
4
+ export { defaultOptions };
@@ -0,0 +1,22 @@
1
+ const defaultOptions = {
2
+ position: "bottom",
3
+ backdrop: true,
4
+ focusTrap: true,
5
+ scrollLock: true,
6
+ scrollLockPadding: true,
7
+ teleport: {
8
+ target: "body",
9
+ disabled: false
10
+ },
11
+ transitions: {
12
+ content: "magic-drawer--content",
13
+ backdrop: "magic-drawer--backdrop"
14
+ },
15
+ threshold: {
16
+ distance: 150,
17
+ momentum: 1
18
+ },
19
+ tag: "dialog",
20
+ keys: ["Escape"]
21
+ };
22
+ export { defaultOptions };
@@ -10,9 +10,9 @@ interface MagicModalProps {
10
10
  options?: ModalOptions;
11
11
  }
12
12
  declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<MagicModalProps>, {
13
- options: () => import("../../../../../packages/utils").RequireAll<ModalOptions>;
13
+ options: () => ModalOptions;
14
14
  }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<MagicModalProps>, {
15
- options: () => import("../../../../../packages/utils").RequireAll<ModalOptions>;
15
+ options: () => ModalOptions;
16
16
  }>>>, {
17
17
  options: ModalOptions;
18
18
  }, {}>, {
@@ -1,6 +1,6 @@
1
1
  import { type Ref, type MaybeRef } from 'vue';
2
2
  import type { ModalOptions } from '../../types.js';
3
- type Args = {
3
+ type UseModalCallbackArgs = {
4
4
  id: MaybeRef<string>;
5
5
  mappedOptions: ModalOptions;
6
6
  addScrollLockPadding: () => void;
@@ -11,12 +11,12 @@ type Args = {
11
11
  releaseFocus: () => void;
12
12
  wrapperActive: Ref<boolean>;
13
13
  };
14
- export declare function useModalCallback({ id, mappedOptions, addScrollLockPadding, removeScrollLockPadding, lockScroll, unlockScroll, trapFocus, releaseFocus, wrapperActive, }: Args): {
14
+ export declare function useModalCallback(args: UseModalCallbackArgs): {
15
15
  onBeforeEnter: (_el: Element) => void;
16
16
  onEnter: (_el: Element) => void;
17
- onAfterEnter: (el: Element) => Promise<void>;
17
+ onAfterEnter: (_el: Element) => Promise<void>;
18
18
  onBeforeLeave: (_el: Element) => void;
19
- onLeave: (el: Element) => void;
19
+ onLeave: (_el: Element) => void;
20
20
  onAfterLeave: (_el: Element) => void;
21
21
  };
22
22
  export {};
@@ -1,23 +1,24 @@
1
1
  import { toValue, nextTick } from "vue";
2
2
  import { useModalEmitter } from "./../useModalEmitter.mjs";
3
- export function useModalCallback({
4
- id,
5
- mappedOptions,
6
- addScrollLockPadding,
7
- removeScrollLockPadding,
8
- lockScroll,
9
- unlockScroll,
10
- trapFocus,
11
- releaseFocus,
12
- wrapperActive
13
- }) {
3
+ export function useModalCallback(args) {
4
+ const {
5
+ id,
6
+ mappedOptions,
7
+ addScrollLockPadding,
8
+ removeScrollLockPadding,
9
+ lockScroll,
10
+ unlockScroll,
11
+ trapFocus,
12
+ releaseFocus,
13
+ wrapperActive
14
+ } = args;
14
15
  function onBeforeEnter(_el) {
15
16
  useModalEmitter().emit("beforeEnter", toValue(id));
16
17
  }
17
18
  function onEnter(_el) {
18
19
  useModalEmitter().emit("enter", toValue(id));
19
20
  }
20
- async function onAfterEnter(el) {
21
+ async function onAfterEnter(_el) {
21
22
  useModalEmitter().emit("afterEnter", toValue(id));
22
23
  if (mappedOptions.scrollLock) {
23
24
  if (mappedOptions.scrollLockPadding) {
@@ -33,7 +34,7 @@ export function useModalCallback({
33
34
  function onBeforeLeave(_el) {
34
35
  useModalEmitter().emit("beforeLeave", toValue(id));
35
36
  }
36
- function onLeave(el) {
37
+ function onLeave(_el) {
37
38
  useModalEmitter().emit("leave", toValue(id));
38
39
  }
39
40
  function onAfterLeave(_el) {
@@ -1,4 +1,4 @@
1
- import type { ModalOptions } from '../types/index.js';
1
+ import type { ModalOptions } from '../types.js';
2
2
  import type { RequireAll } from '@maas/vue-equipment/utils';
3
3
  declare const defaultOptions: RequireAll<ModalOptions>;
4
4
  export { defaultOptions };
@@ -1,4 +1,5 @@
1
1
  export * from './MagicConsent/index.js';
2
+ export * from './MagicDrawer/index.js';
2
3
  export * from './MagicMarquee/index.js';
3
4
  export * from './MagicModal/index.js';
4
5
  export * from './MagicNoise/index.js';
@@ -1,4 +1,5 @@
1
1
  export * from "./MagicConsent/index.mjs";
2
+ export * from "./MagicDrawer/index.mjs";
2
3
  export * from "./MagicMarquee/index.mjs";
3
4
  export * from "./MagicModal/index.mjs";
4
5
  export * from "./MagicNoise/index.mjs";
@@ -1,8 +1,5 @@
1
1
 
2
2
  @keyframes slide-btt-out {
3
- 0% {
4
- transform: translateY(0);
5
- }
6
3
  100% {
7
4
  transform: translateY(100%);
8
5
  }
@@ -1,7 +1,4 @@
1
1
  @keyframes slide-ltr-out {
2
- 0% {
3
- transform: translateX(0);
4
- }
5
2
  100% {
6
3
  transform: translateX(-100%);
7
4
  }
@@ -1,7 +1,4 @@
1
1
  @keyframes slide-rtl-out {
2
- 0% {
3
- transform: translateX(0);
4
- }
5
2
  100% {
6
3
  transform: translateX(100%);
7
4
  }
@@ -1,7 +1,4 @@
1
1
  @keyframes slide-ttb-out {
2
- 0% {
3
- transform: translateY(0);
4
- }
5
2
  100% {
6
3
  transform: translateY(-100%);
7
4
  }
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var utils_exports = {};
22
22
  __export(utils_exports, {
23
23
  clampValue: () => clampValue,
24
+ interpolate: () => interpolate,
24
25
  isIOS: () => isIOS,
25
26
  mapValue: () => mapValue,
26
27
  slugify: () => slugify,
@@ -34,6 +35,30 @@ function clampValue(value, min, max) {
34
35
  return value <= min ? min : value >= max ? max : value;
35
36
  }
36
37
 
38
+ // src/functions/interpolate.ts
39
+ function interpolate(args) {
40
+ const {
41
+ from,
42
+ to,
43
+ duration,
44
+ callback,
45
+ easing = (t) => t * (2 - t),
46
+ interval = 1
47
+ } = args;
48
+ const steps = Math.ceil(duration / interval);
49
+ const stepSize = 1 / steps;
50
+ let currentStep = 0;
51
+ const intervalId = setInterval(() => {
52
+ const progress = currentStep * stepSize;
53
+ const value = from + (to - from) * easing(progress);
54
+ callback(value);
55
+ currentStep++;
56
+ if (currentStep >= steps) {
57
+ clearInterval(intervalId);
58
+ }
59
+ }, interval);
60
+ }
61
+
37
62
  // src/functions/isIOS.ts
38
63
  function isIOS() {
39
64
  if (typeof window === "undefined")
@@ -98,6 +123,7 @@ function slugify(string, options) {
98
123
  // Annotate the CommonJS export names for ESM import in node:
99
124
  0 && (module.exports = {
100
125
  clampValue,
126
+ interpolate,
101
127
  isIOS,
102
128
  mapValue,
103
129
  slugify,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../packages/utils/index.ts","../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts","../../packages/utils/src/functions/slugify.ts"],"sourcesContent":["export * from './src/functions/clampValue'\nexport * from './src/functions/isIOS'\nexport * from './src/functions/mapValue'\nexport * from './src/functions/uuid'\nexport * from './src/functions/uniq'\nexport * from './src/functions/slugify'\n\nexport type * from './src/types'\n","export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","// This implementation is meant for internal use only.\n// It is only used to generate a unique IDs for the `key` props.\n// It should not replace crypto.randomUUID() or window.crypto.randomUUID().\n\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n .split('')\n .reduce(\n (c, i) =>\n c +\n (i === 'x'\n ? Math.floor(Math.random() * 0xf).toString(16)\n : i === 'y'\n ? Math.floor(Math.random() * 4 + 8).toString(16)\n : i),\n '',\n )\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n","export interface SlugifyOptions {\n separator?: string\n trim?: boolean\n remove?: RegExp\n strict?: boolean\n lowercase?: boolean\n}\n\nconst defaultOptions: SlugifyOptions = {\n separator: '-',\n trim: true,\n remove: undefined,\n strict: true,\n lowercase: true,\n}\n\nexport function slugify(string: string, options?: SlugifyOptions): string {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n // Merge provided options with default options\n const _options = { ...defaultOptions, ...options }\n\n const charMap: { [key: string]: string } = {}\n\n let slug = string\n .normalize()\n .split('')\n .reduce(function (result, ch) {\n let appendChar = charMap[ch]\n if (appendChar === undefined) appendChar = ch\n if (appendChar === _options?.separator) appendChar = ' '\n return (\n result +\n appendChar.replace(_options?.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n )\n }, '')\n\n if (_options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '')\n }\n\n if (_options.trim) {\n slug = slug.trim()\n }\n\n if (_options.separator) {\n slug = slug.replace(/ +/g, _options.separator)\n }\n\n if (_options.lowercase) {\n slug = slug.toLocaleLowerCase()\n }\n\n return slug\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,SAAS,WAAW,OAAe,KAAa,KAAa;AAClE,SAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM;AACnD;;;ACFO,SAAS,QAAQ;AACtB,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,SAAO,mBAAmB,KAAK,uCAAW,SAAS;AACrD;;;ACHO,SAAS,SACd,OACA,OACA,OACA,QACA,QACA;AACA,UAAS,QAAQ,UAAU,SAAS,WAAY,QAAQ,SAAS;AACnE;;;ACJO,SAAS,OAAO;AACrB,SAAO,uCACJ,MAAM,EAAE,EACR;AAAA,IACC,CAAC,GAAG,MACF,KACC,MAAM,MACH,KAAK,MAAM,KAAK,OAAO,IAAI,EAAG,EAAE,SAAS,EAAE,IAC3C,MAAM,MACN,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,SAAS,EAAE,IAC7C;AAAA,IACN;AAAA,EACF;AACJ;;;ACjBO,SAAS,KAAsB,GAAM;AAC1C,SAAO,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAC9B;;;ACMA,IAAM,iBAAiC;AAAA,EACrC,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb;AAEO,SAAS,QAAQ,QAAgB,SAAkC;AACxE,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAGA,QAAM,WAAW,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAEjD,QAAM,UAAqC,CAAC;AAE5C,MAAI,OAAO,OACR,UAAU,EACV,MAAM,EAAE,EACR,OAAO,SAAU,QAAQ,IAAI;AAC5B,QAAI,aAAa,QAAQ,EAAE;AAC3B,QAAI,eAAe;AAAW,mBAAa;AAC3C,QAAI,gBAAe,qCAAU;AAAW,mBAAa;AACrD,WACE,SACA,WAAW,SAAQ,qCAAU,WAAU,4BAA4B,EAAE;AAAA,EAEzE,GAAG,EAAE;AAEP,MAAI,SAAS,QAAQ;AACnB,WAAO,KAAK,QAAQ,mBAAmB,EAAE;AAAA,EAC3C;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,QAAQ,OAAO,SAAS,SAAS;AAAA,EAC/C;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../packages/utils/index.ts","../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts","../../packages/utils/src/functions/slugify.ts"],"sourcesContent":["export * from './src/functions/clampValue'\nexport * from './src/functions/interpolate'\nexport * from './src/functions/isIOS'\nexport * from './src/functions/mapValue'\nexport * from './src/functions/uuid'\nexport * from './src/functions/uniq'\nexport * from './src/functions/slugify'\n\nexport type * from './src/types'\n","export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export type InterpolateArgs = {\n from: number\n to: number\n duration: number\n interval?: number\n easing?: (t: number) => number\n callback: (result: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const {\n from,\n to,\n duration,\n callback,\n easing = (t: number) => t * (2 - t),\n interval = 1,\n } = args\n\n const steps = Math.ceil(duration / interval)\n const stepSize = 1 / steps\n\n let currentStep = 0\n\n const intervalId = setInterval(() => {\n const progress = currentStep * stepSize\n const value = from + (to - from) * easing(progress)\n\n callback(value)\n currentStep++\n\n if (currentStep >= steps) {\n clearInterval(intervalId)\n }\n }, interval)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","// This implementation is meant for internal use only.\n// It is only used to generate a unique IDs for the `key` props.\n// It should not replace crypto.randomUUID() or window.crypto.randomUUID().\n\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n .split('')\n .reduce(\n (c, i) =>\n c +\n (i === 'x'\n ? Math.floor(Math.random() * 0xf).toString(16)\n : i === 'y'\n ? Math.floor(Math.random() * 4 + 8).toString(16)\n : i),\n '',\n )\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n","export interface SlugifyOptions {\n separator?: string\n trim?: boolean\n remove?: RegExp\n strict?: boolean\n lowercase?: boolean\n}\n\nconst defaultOptions: SlugifyOptions = {\n separator: '-',\n trim: true,\n remove: undefined,\n strict: true,\n lowercase: true,\n}\n\nexport function slugify(string: string, options?: SlugifyOptions): string {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n // Merge provided options with default options\n const _options = { ...defaultOptions, ...options }\n\n const charMap: { [key: string]: string } = {}\n\n let slug = string\n .normalize()\n .split('')\n .reduce(function (result, ch) {\n let appendChar = charMap[ch]\n if (appendChar === undefined) appendChar = ch\n if (appendChar === _options?.separator) appendChar = ' '\n return (\n result +\n appendChar.replace(_options?.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n )\n }, '')\n\n if (_options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '')\n }\n\n if (_options.trim) {\n slug = slug.trim()\n }\n\n if (_options.separator) {\n slug = slug.replace(/ +/g, _options.separator)\n }\n\n if (_options.lowercase) {\n slug = slug.toLocaleLowerCase()\n }\n\n return slug\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,SAAS,WAAW,OAAe,KAAa,KAAa;AAClE,SAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM;AACnD;;;ACOO,SAAS,YAAY,MAAuB;AACjD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,CAAC,MAAc,KAAK,IAAI;AAAA,IACjC,WAAW;AAAA,EACb,IAAI;AAEJ,QAAM,QAAQ,KAAK,KAAK,WAAW,QAAQ;AAC3C,QAAM,WAAW,IAAI;AAErB,MAAI,cAAc;AAElB,QAAM,aAAa,YAAY,MAAM;AACnC,UAAM,WAAW,cAAc;AAC/B,UAAM,QAAQ,QAAQ,KAAK,QAAQ,OAAO,QAAQ;AAElD,aAAS,KAAK;AACd;AAEA,QAAI,eAAe,OAAO;AACxB,oBAAc,UAAU;AAAA,IAC1B;AAAA,EACF,GAAG,QAAQ;AACb;;;ACnCO,SAAS,QAAQ;AACtB,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,SAAO,mBAAmB,KAAK,uCAAW,SAAS;AACrD;;;ACHO,SAAS,SACd,OACA,OACA,OACA,QACA,QACA;AACA,UAAS,QAAQ,UAAU,SAAS,WAAY,QAAQ,SAAS;AACnE;;;ACJO,SAAS,OAAO;AACrB,SAAO,uCACJ,MAAM,EAAE,EACR;AAAA,IACC,CAAC,GAAG,MACF,KACC,MAAM,MACH,KAAK,MAAM,KAAK,OAAO,IAAI,EAAG,EAAE,SAAS,EAAE,IAC3C,MAAM,MACN,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,SAAS,EAAE,IAC7C;AAAA,IACN;AAAA,EACF;AACJ;;;ACjBO,SAAS,KAAsB,GAAM;AAC1C,SAAO,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAC9B;;;ACMA,IAAM,iBAAiC;AAAA,EACrC,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb;AAEO,SAAS,QAAQ,QAAgB,SAAkC;AACxE,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAGA,QAAM,WAAW,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAEjD,QAAM,UAAqC,CAAC;AAE5C,MAAI,OAAO,OACR,UAAU,EACV,MAAM,EAAE,EACR,OAAO,SAAU,QAAQ,IAAI;AAC5B,QAAI,aAAa,QAAQ,EAAE;AAC3B,QAAI,eAAe;AAAW,mBAAa;AAC3C,QAAI,gBAAe,qCAAU;AAAW,mBAAa;AACrD,WACE,SACA,WAAW,SAAQ,qCAAU,WAAU,4BAA4B,EAAE;AAAA,EAEzE,GAAG,EAAE;AAEP,MAAI,SAAS,QAAQ;AACnB,WAAO,KAAK,QAAQ,mBAAmB,EAAE;AAAA,EAC3C;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,QAAQ,OAAO,SAAS,SAAS;AAAA,EAC/C;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAEA,SAAO;AACT;","names":[]}
@@ -3,6 +3,30 @@ function clampValue(value, min, max) {
3
3
  return value <= min ? min : value >= max ? max : value;
4
4
  }
5
5
 
6
+ // src/functions/interpolate.ts
7
+ function interpolate(args) {
8
+ const {
9
+ from,
10
+ to,
11
+ duration,
12
+ callback,
13
+ easing = (t) => t * (2 - t),
14
+ interval = 1
15
+ } = args;
16
+ const steps = Math.ceil(duration / interval);
17
+ const stepSize = 1 / steps;
18
+ let currentStep = 0;
19
+ const intervalId = setInterval(() => {
20
+ const progress = currentStep * stepSize;
21
+ const value = from + (to - from) * easing(progress);
22
+ callback(value);
23
+ currentStep++;
24
+ if (currentStep >= steps) {
25
+ clearInterval(intervalId);
26
+ }
27
+ }, interval);
28
+ }
29
+
6
30
  // src/functions/isIOS.ts
7
31
  function isIOS() {
8
32
  if (typeof window === "undefined")
@@ -66,6 +90,7 @@ function slugify(string, options) {
66
90
  }
67
91
  export {
68
92
  clampValue,
93
+ interpolate,
69
94
  isIOS,
70
95
  mapValue,
71
96
  slugify,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts","../../packages/utils/src/functions/slugify.ts"],"sourcesContent":["export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","// This implementation is meant for internal use only.\n// It is only used to generate a unique IDs for the `key` props.\n// It should not replace crypto.randomUUID() or window.crypto.randomUUID().\n\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n .split('')\n .reduce(\n (c, i) =>\n c +\n (i === 'x'\n ? Math.floor(Math.random() * 0xf).toString(16)\n : i === 'y'\n ? Math.floor(Math.random() * 4 + 8).toString(16)\n : i),\n '',\n )\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n","export interface SlugifyOptions {\n separator?: string\n trim?: boolean\n remove?: RegExp\n strict?: boolean\n lowercase?: boolean\n}\n\nconst defaultOptions: SlugifyOptions = {\n separator: '-',\n trim: true,\n remove: undefined,\n strict: true,\n lowercase: true,\n}\n\nexport function slugify(string: string, options?: SlugifyOptions): string {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n // Merge provided options with default options\n const _options = { ...defaultOptions, ...options }\n\n const charMap: { [key: string]: string } = {}\n\n let slug = string\n .normalize()\n .split('')\n .reduce(function (result, ch) {\n let appendChar = charMap[ch]\n if (appendChar === undefined) appendChar = ch\n if (appendChar === _options?.separator) appendChar = ' '\n return (\n result +\n appendChar.replace(_options?.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n )\n }, '')\n\n if (_options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '')\n }\n\n if (_options.trim) {\n slug = slug.trim()\n }\n\n if (_options.separator) {\n slug = slug.replace(/ +/g, _options.separator)\n }\n\n if (_options.lowercase) {\n slug = slug.toLocaleLowerCase()\n }\n\n return slug\n}\n"],"mappings":";AAAO,SAAS,WAAW,OAAe,KAAa,KAAa;AAClE,SAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM;AACnD;;;ACFO,SAAS,QAAQ;AACtB,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,SAAO,mBAAmB,KAAK,uCAAW,SAAS;AACrD;;;ACHO,SAAS,SACd,OACA,OACA,OACA,QACA,QACA;AACA,UAAS,QAAQ,UAAU,SAAS,WAAY,QAAQ,SAAS;AACnE;;;ACJO,SAAS,OAAO;AACrB,SAAO,uCACJ,MAAM,EAAE,EACR;AAAA,IACC,CAAC,GAAG,MACF,KACC,MAAM,MACH,KAAK,MAAM,KAAK,OAAO,IAAI,EAAG,EAAE,SAAS,EAAE,IAC3C,MAAM,MACN,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,SAAS,EAAE,IAC7C;AAAA,IACN;AAAA,EACF;AACJ;;;ACjBO,SAAS,KAAsB,GAAM;AAC1C,SAAO,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAC9B;;;ACMA,IAAM,iBAAiC;AAAA,EACrC,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb;AAEO,SAAS,QAAQ,QAAgB,SAAkC;AACxE,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAGA,QAAM,WAAW,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAEjD,QAAM,UAAqC,CAAC;AAE5C,MAAI,OAAO,OACR,UAAU,EACV,MAAM,EAAE,EACR,OAAO,SAAU,QAAQ,IAAI;AAC5B,QAAI,aAAa,QAAQ,EAAE;AAC3B,QAAI,eAAe;AAAW,mBAAa;AAC3C,QAAI,gBAAe,qCAAU;AAAW,mBAAa;AACrD,WACE,SACA,WAAW,SAAQ,qCAAU,WAAU,4BAA4B,EAAE;AAAA,EAEzE,GAAG,EAAE;AAEP,MAAI,SAAS,QAAQ;AACnB,WAAO,KAAK,QAAQ,mBAAmB,EAAE;AAAA,EAC3C;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,QAAQ,OAAO,SAAS,SAAS;AAAA,EAC/C;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../packages/utils/src/functions/clampValue.ts","../../packages/utils/src/functions/interpolate.ts","../../packages/utils/src/functions/isIOS.ts","../../packages/utils/src/functions/mapValue.ts","../../packages/utils/src/functions/uuid.ts","../../packages/utils/src/functions/uniq.ts","../../packages/utils/src/functions/slugify.ts"],"sourcesContent":["export function clampValue(value: number, min: number, max: number) {\n return value <= min ? min : value >= max ? max : value\n}\n","export type InterpolateArgs = {\n from: number\n to: number\n duration: number\n interval?: number\n easing?: (t: number) => number\n callback: (result: number) => void\n}\n\nexport function interpolate(args: InterpolateArgs) {\n const {\n from,\n to,\n duration,\n callback,\n easing = (t: number) => t * (2 - t),\n interval = 1,\n } = args\n\n const steps = Math.ceil(duration / interval)\n const stepSize = 1 / steps\n\n let currentStep = 0\n\n const intervalId = setInterval(() => {\n const progress = currentStep * stepSize\n const value = from + (to - from) * easing(progress)\n\n callback(value)\n currentStep++\n\n if (currentStep >= steps) {\n clearInterval(intervalId)\n }\n }, interval)\n}\n","export function isIOS() {\n if (typeof window === 'undefined') return false\n return /iPad|iPhone|iPod/.test(navigator?.userAgent)\n}\n","export function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) * (outMax - outMin)) / (inMax - inMin) + outMin\n}\n","// This implementation is meant for internal use only.\n// It is only used to generate a unique IDs for the `key` props.\n// It should not replace crypto.randomUUID() or window.crypto.randomUUID().\n\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n .split('')\n .reduce(\n (c, i) =>\n c +\n (i === 'x'\n ? Math.floor(Math.random() * 0xf).toString(16)\n : i === 'y'\n ? Math.floor(Math.random() * 4 + 8).toString(16)\n : i),\n '',\n )\n}\n","export function uniq<T extends any[]>(a: T) {\n return Array.from(new Set(a))\n}\n","export interface SlugifyOptions {\n separator?: string\n trim?: boolean\n remove?: RegExp\n strict?: boolean\n lowercase?: boolean\n}\n\nconst defaultOptions: SlugifyOptions = {\n separator: '-',\n trim: true,\n remove: undefined,\n strict: true,\n lowercase: true,\n}\n\nexport function slugify(string: string, options?: SlugifyOptions): string {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n // Merge provided options with default options\n const _options = { ...defaultOptions, ...options }\n\n const charMap: { [key: string]: string } = {}\n\n let slug = string\n .normalize()\n .split('')\n .reduce(function (result, ch) {\n let appendChar = charMap[ch]\n if (appendChar === undefined) appendChar = ch\n if (appendChar === _options?.separator) appendChar = ' '\n return (\n result +\n appendChar.replace(_options?.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n )\n }, '')\n\n if (_options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '')\n }\n\n if (_options.trim) {\n slug = slug.trim()\n }\n\n if (_options.separator) {\n slug = slug.replace(/ +/g, _options.separator)\n }\n\n if (_options.lowercase) {\n slug = slug.toLocaleLowerCase()\n }\n\n return slug\n}\n"],"mappings":";AAAO,SAAS,WAAW,OAAe,KAAa,KAAa;AAClE,SAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM;AACnD;;;ACOO,SAAS,YAAY,MAAuB;AACjD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,CAAC,MAAc,KAAK,IAAI;AAAA,IACjC,WAAW;AAAA,EACb,IAAI;AAEJ,QAAM,QAAQ,KAAK,KAAK,WAAW,QAAQ;AAC3C,QAAM,WAAW,IAAI;AAErB,MAAI,cAAc;AAElB,QAAM,aAAa,YAAY,MAAM;AACnC,UAAM,WAAW,cAAc;AAC/B,UAAM,QAAQ,QAAQ,KAAK,QAAQ,OAAO,QAAQ;AAElD,aAAS,KAAK;AACd;AAEA,QAAI,eAAe,OAAO;AACxB,oBAAc,UAAU;AAAA,IAC1B;AAAA,EACF,GAAG,QAAQ;AACb;;;ACnCO,SAAS,QAAQ;AACtB,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,SAAO,mBAAmB,KAAK,uCAAW,SAAS;AACrD;;;ACHO,SAAS,SACd,OACA,OACA,OACA,QACA,QACA;AACA,UAAS,QAAQ,UAAU,SAAS,WAAY,QAAQ,SAAS;AACnE;;;ACJO,SAAS,OAAO;AACrB,SAAO,uCACJ,MAAM,EAAE,EACR;AAAA,IACC,CAAC,GAAG,MACF,KACC,MAAM,MACH,KAAK,MAAM,KAAK,OAAO,IAAI,EAAG,EAAE,SAAS,EAAE,IAC3C,MAAM,MACN,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,SAAS,EAAE,IAC7C;AAAA,IACN;AAAA,EACF;AACJ;;;ACjBO,SAAS,KAAsB,GAAM;AAC1C,SAAO,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC;AAC9B;;;ACMA,IAAM,iBAAiC;AAAA,EACrC,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb;AAEO,SAAS,QAAQ,QAAgB,SAAkC;AACxE,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAGA,QAAM,WAAW,EAAE,GAAG,gBAAgB,GAAG,QAAQ;AAEjD,QAAM,UAAqC,CAAC;AAE5C,MAAI,OAAO,OACR,UAAU,EACV,MAAM,EAAE,EACR,OAAO,SAAU,QAAQ,IAAI;AAC5B,QAAI,aAAa,QAAQ,EAAE;AAC3B,QAAI,eAAe;AAAW,mBAAa;AAC3C,QAAI,gBAAe,qCAAU;AAAW,mBAAa;AACrD,WACE,SACA,WAAW,SAAQ,qCAAU,WAAU,4BAA4B,EAAE;AAAA,EAEzE,GAAG,EAAE;AAEP,MAAI,SAAS,QAAQ;AACnB,WAAO,KAAK,QAAQ,mBAAmB,EAAE;AAAA,EAC3C;AAEA,MAAI,SAAS,MAAM;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,QAAQ,OAAO,SAAS,SAAS;AAAA,EAC/C;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO,KAAK,kBAAkB;AAAA,EAChC;AAEA,SAAO;AACT;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@maas/vue-equipment",
3
3
  "description": "A magic collection of Vue composables, plugins, components and directives",
4
- "version": "0.13.1",
4
+ "version": "0.14.1",
5
5
  "author": "Robin Scholz <https://github.com/robinscholz>, Christoph Jeworutzki <https://github.com/ChristophJeworutzki>",
6
6
  "devDependencies": {
7
7
  "@antfu/ni": "^0.21.12",