@douxcode/vue-spring-bottom-sheet 1.0.8 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/composables/useSnapPoints.d.ts +1 -1
- package/dist/index.mjs +165 -103
- package/dist/style.css +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -76,7 +76,7 @@ For Nuxt 3, just wrap component in `<ClientOnly>`
|
|
|
76
76
|
|
|
77
77
|
```css
|
|
78
78
|
--vsbs-backdrop-bg: rgba(0, 0, 0, 0.5);
|
|
79
|
-
--vsbs-shadow-color:
|
|
79
|
+
--vsbs-shadow-color: rgba(89, 89, 89, 0.2);
|
|
80
80
|
--vsbs-background: #fff;
|
|
81
81
|
--vsbs-border-radius: 16px;
|
|
82
82
|
--vsbs-max-width: 640px;
|
|
@@ -3,5 +3,5 @@ export declare function useSnapPoints(snapPoints: Ref<number[]>, height: Ref<num
|
|
|
3
3
|
minSnap: import('vue').ComputedRef<number>;
|
|
4
4
|
maxSnap: import('vue').ComputedRef<number>;
|
|
5
5
|
snapPoints: Ref<number[], number[]>;
|
|
6
|
-
|
|
6
|
+
closestSnapPointIndex: import('vue').ComputedRef<number>;
|
|
7
7
|
};
|
package/dist/index.mjs
CHANGED
|
@@ -1,23 +1,67 @@
|
|
|
1
|
-
import { computed as
|
|
2
|
-
import { useWindowSize as
|
|
3
|
-
import { useGesture as
|
|
4
|
-
import { useMotionProperties as
|
|
5
|
-
import { useFocusTrap as
|
|
6
|
-
function
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { computed as H, defineComponent as ie, ref as h, toRefs as se, watch as U, nextTick as z, onMounted as re, openBlock as ve, createBlock as de, Teleport as ce, createElementVNode as b, createVNode as fe, Transition as ge, withCtx as he, withDirectives as pe, vShow as me, renderSlot as N } from "vue";
|
|
2
|
+
import { useWindowSize as be, useElementBounding as I, useScrollLock as ye } from "@vueuse/core";
|
|
3
|
+
import { useGesture as R, rubberbandIfOutOfBounds as V } from "@vueuse/gesture";
|
|
4
|
+
import { useMotionProperties as we, useMotionTransitions as Se, useMotionControls as ke } from "@vueuse/motion";
|
|
5
|
+
import { useFocusTrap as Te } from "@vueuse/integrations/useFocusTrap";
|
|
6
|
+
function Ce(n, u, a) {
|
|
7
|
+
let t = (o) => n(o, ...u);
|
|
8
|
+
return a === void 0 ? t : Object.assign(t, { lazy: a, lazyArgs: u });
|
|
9
|
+
}
|
|
10
|
+
function De(n, u, a) {
|
|
11
|
+
let t = n.length - u.length;
|
|
12
|
+
if (t === 0) return n(...u);
|
|
13
|
+
if (t === 1) return Ce(n, u, a);
|
|
14
|
+
throw new Error("Wrong number of arguments");
|
|
15
|
+
}
|
|
16
|
+
function xe(n, { triggerAt: u = "end", minQuietPeriodMs: a, maxBurstDurationMs: t, minGapMs: o, reducer: c = Me }) {
|
|
17
|
+
let s, r, f, y, T = () => {
|
|
18
|
+
let v = f;
|
|
19
|
+
v !== void 0 && (f = void 0, n(v), o !== void 0 && (r = setTimeout(O, o)));
|
|
20
|
+
}, O = () => {
|
|
21
|
+
clearTimeout(r), r = void 0, s === void 0 && T();
|
|
22
|
+
}, w = () => {
|
|
23
|
+
clearTimeout(s), s = void 0, y = void 0, r === void 0 && T();
|
|
24
|
+
};
|
|
25
|
+
return { call: (...v) => {
|
|
26
|
+
let g = s === void 0 && r === void 0;
|
|
27
|
+
if ((u !== "start" || g) && (f = c(f, ...v)), !(s === void 0 && !g)) {
|
|
28
|
+
if (a !== void 0 || t !== void 0 || o === void 0) {
|
|
29
|
+
clearTimeout(s);
|
|
30
|
+
let p = Date.now();
|
|
31
|
+
y ?? (y = p);
|
|
32
|
+
let W = t === void 0 ? a ?? 0 : Math.min(a ?? t, t - (p - y));
|
|
33
|
+
s = setTimeout(w, W);
|
|
34
|
+
}
|
|
35
|
+
u !== "end" && g && T();
|
|
36
|
+
}
|
|
37
|
+
}, cancel: () => {
|
|
38
|
+
clearTimeout(s), s = void 0, y = void 0, clearTimeout(r), r = void 0, f = void 0;
|
|
39
|
+
}, flush: () => {
|
|
40
|
+
w(), O();
|
|
41
|
+
}, get isIdle() {
|
|
42
|
+
return s === void 0 && r === void 0;
|
|
43
|
+
} };
|
|
44
|
+
}
|
|
45
|
+
var Me = () => "";
|
|
46
|
+
function $(...n) {
|
|
47
|
+
return De(_e, n);
|
|
48
|
+
}
|
|
49
|
+
var _e = (n, { min: u, max: a }) => u !== void 0 && n < u ? u : a !== void 0 && n > a ? a : n;
|
|
50
|
+
function Be(n, u) {
|
|
51
|
+
const a = H(() => n.value.sort()), t = H(() => a.value[0]), o = H(() => a.value[a.value.length - 1]), c = H(() => {
|
|
52
|
+
const s = a.value.reduce(
|
|
53
|
+
(r, f) => Math.abs(f - u.value) < Math.abs(r - u.value) ? f : r
|
|
10
54
|
);
|
|
11
|
-
return
|
|
55
|
+
return a.value.indexOf(s);
|
|
12
56
|
});
|
|
13
57
|
return {
|
|
14
|
-
minSnap:
|
|
58
|
+
minSnap: t,
|
|
15
59
|
maxSnap: o,
|
|
16
|
-
snapPoints:
|
|
17
|
-
|
|
60
|
+
snapPoints: n,
|
|
61
|
+
closestSnapPointIndex: c
|
|
18
62
|
};
|
|
19
63
|
}
|
|
20
|
-
const
|
|
64
|
+
const He = { "data-vsbs-container": "" }, Oe = ["data-vsbs-shadow", "data-vsbs-sheet-show"], Pe = /* @__PURE__ */ ie({
|
|
21
65
|
__name: "BottomSheet",
|
|
22
66
|
props: {
|
|
23
67
|
snapPoints: {},
|
|
@@ -28,165 +72,183 @@ const ke = { "data-vsbs-container": "" }, we = ["data-vsbs-shadow", "data-vsbs-s
|
|
|
28
72
|
expandOnContentDrag: { type: Boolean, default: !0 }
|
|
29
73
|
},
|
|
30
74
|
emits: ["opened", "closed", "ready", "dragging-up", "dragging-down", "minHeight", "maxHeight"],
|
|
31
|
-
setup(
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
},
|
|
35
|
-
|
|
75
|
+
setup(n, { expose: u, emit: a }) {
|
|
76
|
+
const t = n, o = a, c = h(null), s = h(null), r = h(null), f = h(null), y = h(null), T = h(null), O = h(null), w = h(!1), v = h(t.expandOnContentDrag), { height: g } = be(), { height: p } = I(c), { height: W } = I(s), { height: q } = I(r), { height: J } = I(T), { activate: Z, deactivate: Y } = Te([c, O], { immediate: !1 }), S = H(() => Math.ceil(J.value + W.value + q.value)), { motionProperties: C } = we(c), { push: D, stop: ee, motionValues: x } = Se(), { set: M, stop: X } = ke(C, {}, { push: D, motionValues: x, stop: ee }), e = h(0), l = h(0), { snapPoints: te } = se(t), ae = H(() => te.value ?? [S.value]), { minSnap: _, maxSnap: B, snapPoints: k, closestSnapPointIndex: A } = Be(ae, e), G = ye(document.body), Q = (i) => {
|
|
77
|
+
i.key === "Escape" && E();
|
|
78
|
+
}, ne = () => {
|
|
79
|
+
c.value && (e.value = Math.min(t.defaultBreakpoint ?? _.value, g.value), M({
|
|
36
80
|
height: e.value,
|
|
37
81
|
y: e.value
|
|
38
|
-
}),
|
|
39
|
-
|
|
82
|
+
}), D("y", 0, C, { type: "tween", easings: "easeInOut", bounce: 0, duration: 300 }), w.value = !0, G.value = !0, window.addEventListener("keydown", Q), t.blocking && setTimeout(() => {
|
|
83
|
+
x.value.y.get() - 0 < 0.1 && (o("opened"), Z());
|
|
40
84
|
}, 300));
|
|
41
|
-
},
|
|
42
|
-
|
|
43
|
-
|
|
85
|
+
}, E = () => {
|
|
86
|
+
c.value && (D("y", p.value, C, { type: "tween", bounce: 0, duration: 300 }), w.value = !1, G.value = !1, t.blocking && Y(), window.removeEventListener("keydown", Q), setTimeout(() => {
|
|
87
|
+
x.value.y.get() - p.value < 0.1 && o("closed");
|
|
44
88
|
}, 300));
|
|
45
|
-
},
|
|
46
|
-
|
|
89
|
+
}, oe = () => {
|
|
90
|
+
t.canBackdropClose && E();
|
|
47
91
|
};
|
|
48
|
-
function
|
|
49
|
-
|
|
92
|
+
function le(i) {
|
|
93
|
+
v.value && i.preventDefault();
|
|
50
94
|
}
|
|
51
|
-
const
|
|
52
|
-
|
|
95
|
+
const F = (i) => {
|
|
96
|
+
e.value = i, D("height", e.value, C, {
|
|
53
97
|
type: "tween",
|
|
54
98
|
easings: "easeInOut",
|
|
55
99
|
bounce: 0,
|
|
56
100
|
duration: 300
|
|
57
|
-
})
|
|
58
|
-
},
|
|
59
|
-
|
|
60
|
-
y:
|
|
61
|
-
})),
|
|
62
|
-
height:
|
|
63
|
-
}),
|
|
64
|
-
},
|
|
65
|
-
|
|
101
|
+
});
|
|
102
|
+
}, j = ({ delta: [i, d], direction: [P, m] }) => {
|
|
103
|
+
c.value && (l.value <= 0 && (e.value -= d), e.value <= _.value && (e.value = _.value, l.value += d, M({
|
|
104
|
+
y: t.canSwipeClose ? $(l.value, { min: 0 }) : $(V(l.value, -p.value, 0, 0.5), { min: 0 })
|
|
105
|
+
})), M({
|
|
106
|
+
height: $(V(e.value, 0, B.value, 0.25), { min: 0, max: g.value })
|
|
107
|
+
}), m > 0 ? o("dragging-down") : m < 0 && o("dragging-up"));
|
|
108
|
+
}, L = () => {
|
|
109
|
+
c.value && (l.value = t.canSwipeClose ? [0, e.value].reduce((i, d) => Math.abs(d - l.value) < Math.abs(i - l.value) ? d : i) : 0, D("y", l.value, C, { type: "tween", easings: "easeInOut", bounce: 0, duration: 300 }), l.value === e.value && (l.value = 0, E()), e.value = Math.min(k.value[A.value], g.value), D("height", e.value, C, { type: "tween", easings: "easeInOut", bounce: 0, duration: 300 }));
|
|
66
110
|
};
|
|
67
|
-
|
|
111
|
+
R(
|
|
68
112
|
{
|
|
69
|
-
|
|
70
|
-
|
|
113
|
+
onDragStart: () => {
|
|
114
|
+
e.value = p.value, l.value = x.value.y.get(), X();
|
|
115
|
+
},
|
|
116
|
+
onDrag: j,
|
|
117
|
+
onDragEnd: L
|
|
71
118
|
},
|
|
72
119
|
{
|
|
73
|
-
domTarget:
|
|
120
|
+
domTarget: s,
|
|
74
121
|
drag: { filterTaps: !0 }
|
|
75
122
|
}
|
|
76
|
-
),
|
|
123
|
+
), R(
|
|
77
124
|
{
|
|
78
|
-
|
|
79
|
-
|
|
125
|
+
onDragStart: () => {
|
|
126
|
+
e.value = p.value, l.value = x.value.y.get(), X();
|
|
127
|
+
},
|
|
128
|
+
onDrag: j,
|
|
129
|
+
onDragEnd: L
|
|
80
130
|
},
|
|
81
131
|
{
|
|
82
|
-
domTarget:
|
|
132
|
+
domTarget: r,
|
|
83
133
|
drag: { filterTaps: !0 }
|
|
84
134
|
}
|
|
85
|
-
),
|
|
135
|
+
), R(
|
|
86
136
|
{
|
|
87
|
-
onDragStart: ({ direction:
|
|
88
|
-
|
|
89
|
-
|
|
137
|
+
onDragStart: ({ direction: [i, d] }) => {
|
|
138
|
+
e.value = p.value, l.value = x.value.y.get(), X();
|
|
139
|
+
const P = f.value.scrollTop === 0, m = d > 0;
|
|
140
|
+
k.value.length === 1 ? l.value === 0 && P && (v.value = m) : (t.expandOnContentDrag && e.value !== B.value && (v.value = !0), e.value === B.value && P && (v.value = m));
|
|
90
141
|
},
|
|
91
|
-
onDrag: ({ delta:
|
|
92
|
-
if (!
|
|
93
|
-
|
|
142
|
+
onDrag: ({ delta: [i, d], direction: [P, m] }) => {
|
|
143
|
+
if (!t.expandOnContentDrag) {
|
|
144
|
+
v.value = !1;
|
|
94
145
|
return;
|
|
95
146
|
}
|
|
96
|
-
if (!
|
|
97
|
-
|
|
98
|
-
y:
|
|
99
|
-
})), e.value >
|
|
100
|
-
const
|
|
101
|
-
|
|
147
|
+
if (!c.value) return;
|
|
148
|
+
l.value === 0 && v.value && t.expandOnContentDrag && (e.value -= d), e.value <= _.value && (e.value = _.value, v.value && t.expandOnContentDrag && (l.value += d), l.value = $(l.value, { min: 0, max: _.value }), M({
|
|
149
|
+
y: t.canSwipeClose ? l.value : V(l.value, -p.value, 0, 0.5)
|
|
150
|
+
})), e.value > B.value && (e.value = B.value), e.value = Math.min(e.value, g.value);
|
|
151
|
+
const K = f.value.scrollTop === 0;
|
|
152
|
+
k.value.length === 1 ? d < 0 && l.value === 0 && K && (v.value = !1) : e.value === B.value && (v.value = !1), M({
|
|
102
153
|
height: e.value
|
|
103
|
-
}),
|
|
154
|
+
}), m > 0 ? o("dragging-down") : m < 0 && o("dragging-up");
|
|
104
155
|
},
|
|
105
|
-
onDragEnd:
|
|
156
|
+
onDragEnd: L
|
|
106
157
|
},
|
|
107
158
|
{
|
|
108
|
-
domTarget:
|
|
159
|
+
domTarget: y,
|
|
109
160
|
drag: { filterTaps: !0 }
|
|
110
161
|
}
|
|
111
|
-
)
|
|
112
|
-
|
|
113
|
-
|
|
162
|
+
);
|
|
163
|
+
const ue = xe(
|
|
164
|
+
() => {
|
|
165
|
+
o("maxHeight", g.value), z(() => {
|
|
166
|
+
e.value = k.value[A.value], F(k.value[A.value]);
|
|
167
|
+
});
|
|
168
|
+
},
|
|
169
|
+
{ minQuietPeriodMs: 50 }
|
|
170
|
+
);
|
|
171
|
+
return U(g, () => {
|
|
172
|
+
ue.call();
|
|
173
|
+
}), U(S, () => {
|
|
174
|
+
o("minHeight", S.value), k.value.length === 1 && z(() => {
|
|
175
|
+
k.value[0] === S.value && F(Math.min(S.value, g.value));
|
|
114
176
|
});
|
|
115
|
-
}),
|
|
116
|
-
o("minHeight",
|
|
177
|
+
}), re(() => {
|
|
178
|
+
o("minHeight", S.value), o("maxHeight", g.value), e.value = t.defaultBreakpoint ?? Number(S.value), M({
|
|
117
179
|
height: e.value,
|
|
118
180
|
y: e.value
|
|
119
|
-
}),
|
|
181
|
+
}), z(() => {
|
|
120
182
|
o("ready");
|
|
121
183
|
});
|
|
122
|
-
}),
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
default:
|
|
126
|
-
|
|
184
|
+
}), u({ open: ne, close: E, snapToPoint: F }), (i, d) => (ve(), de(ce, { to: "body" }, [
|
|
185
|
+
b("div", He, [
|
|
186
|
+
fe(ge, { name: "fade" }, {
|
|
187
|
+
default: he(() => [
|
|
188
|
+
pe(b("div", {
|
|
127
189
|
ref_key: "backdrop",
|
|
128
|
-
ref:
|
|
190
|
+
ref: O,
|
|
129
191
|
"data-vsbs-backdrop": "",
|
|
130
|
-
onClick:
|
|
192
|
+
onClick: d[0] || (d[0] = (P) => oe())
|
|
131
193
|
}, null, 512), [
|
|
132
|
-
[
|
|
194
|
+
[me, w.value && i.blocking]
|
|
133
195
|
])
|
|
134
196
|
]),
|
|
135
197
|
_: 1
|
|
136
198
|
}),
|
|
137
|
-
|
|
199
|
+
b("div", {
|
|
138
200
|
ref_key: "sheet",
|
|
139
|
-
ref:
|
|
140
|
-
"data-vsbs-shadow": !
|
|
141
|
-
"data-vsbs-sheet-show":
|
|
201
|
+
ref: c,
|
|
202
|
+
"data-vsbs-shadow": !i.blocking,
|
|
203
|
+
"data-vsbs-sheet-show": w.value,
|
|
142
204
|
"aria-modal": "true",
|
|
143
205
|
"data-vsbs-sheet": "",
|
|
144
206
|
tabindex: "-1"
|
|
145
207
|
}, [
|
|
146
|
-
|
|
208
|
+
b("div", {
|
|
147
209
|
ref_key: "sheetHeader",
|
|
148
|
-
ref:
|
|
210
|
+
ref: s,
|
|
149
211
|
"data-vsbs-header": ""
|
|
150
212
|
}, [
|
|
151
|
-
|
|
213
|
+
N(i.$slots, "header", {}, void 0, !0)
|
|
152
214
|
], 512),
|
|
153
|
-
|
|
215
|
+
b("div", {
|
|
154
216
|
ref_key: "sheetScroll",
|
|
155
|
-
ref:
|
|
217
|
+
ref: f,
|
|
156
218
|
"data-vsbs-scroll": "",
|
|
157
|
-
onTouchmove:
|
|
219
|
+
onTouchmove: le
|
|
158
220
|
}, [
|
|
159
|
-
|
|
221
|
+
b("div", {
|
|
160
222
|
ref_key: "sheetContentWrapper",
|
|
161
|
-
ref:
|
|
223
|
+
ref: y,
|
|
162
224
|
"data-vsbs-content-wrapper": ""
|
|
163
225
|
}, [
|
|
164
|
-
|
|
226
|
+
b("div", {
|
|
165
227
|
ref_key: "sheetContent",
|
|
166
|
-
ref:
|
|
228
|
+
ref: T,
|
|
167
229
|
"data-vsbs-content": ""
|
|
168
230
|
}, [
|
|
169
|
-
|
|
231
|
+
N(i.$slots, "default", {}, void 0, !0)
|
|
170
232
|
], 512)
|
|
171
233
|
], 512)
|
|
172
234
|
], 544),
|
|
173
|
-
|
|
235
|
+
b("div", {
|
|
174
236
|
ref_key: "sheetFooter",
|
|
175
|
-
ref:
|
|
237
|
+
ref: r,
|
|
176
238
|
"data-vsbs-footer": ""
|
|
177
239
|
}, [
|
|
178
|
-
|
|
240
|
+
N(i.$slots, "footer", {}, void 0, !0)
|
|
179
241
|
], 512)
|
|
180
|
-
], 8,
|
|
242
|
+
], 8, Oe)
|
|
181
243
|
])
|
|
182
244
|
]));
|
|
183
245
|
}
|
|
184
|
-
}),
|
|
185
|
-
const
|
|
186
|
-
for (const [
|
|
187
|
-
|
|
188
|
-
return
|
|
189
|
-
},
|
|
246
|
+
}), Ee = (n, u) => {
|
|
247
|
+
const a = n.__vccOpts || n;
|
|
248
|
+
for (const [t, o] of u)
|
|
249
|
+
a[t] = o;
|
|
250
|
+
return a;
|
|
251
|
+
}, Fe = /* @__PURE__ */ Ee(Pe, [["__scopeId", "data-v-4d79fa76"]]);
|
|
190
252
|
export {
|
|
191
|
-
|
|
253
|
+
Fe as default
|
|
192
254
|
};
|
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[data-vsbs-backdrop][data-v-
|
|
1
|
+
[data-vsbs-backdrop][data-v-4d79fa76]{background-color:var(--vsbs-backdrop-bg, rgba(0, 0, 0, .5));top:0;right:0;bottom:0;left:0;pointer-events:auto;position:fixed;-webkit-user-select:none;user-select:none;will-change:opacity;z-index:100}[data-vsbs-shadow=true][data-v-4d79fa76]{box-shadow:0 -5px 60px 0 var(--vsbs-shadow-color, rgba(89, 89, 89, .2))}[data-vsbs-sheet][data-v-4d79fa76]{background-color:var(--vsbs-background, #fff);border-top-left-radius:var(--vsbs-border-radius, 16px);border-top-right-radius:var(--vsbs-border-radius, 16px);bottom:0;display:flex;flex-direction:column;left:0;margin-left:auto;margin-right:auto;max-height:inherit;max-width:var(--vsbs-max-width, 640px);pointer-events:all;position:fixed;right:0;transition:visibility .3s ease-in-out;visibility:hidden;width:100%;will-change:height;z-index:100}[data-vsbs-sheet-show=true][data-v-4d79fa76]{visibility:visible}[data-vsbs-header][data-v-4d79fa76]{box-shadow:0 1px 0 var(--vsbs-border-color, rgba(46, 59, 66, .125));flex-shrink:0;padding:20px var(--vsbs-padding-x, 16px) 8px;-webkit-user-select:none;user-select:none;z-index:1}[data-vsbs-header][data-v-4d79fa76]:before{background-color:var(--vsbs-handle-background, rgba(0, 0, 0, .28));border-radius:2px;content:"";display:block;height:4px;left:50%;position:absolute;top:8px;transform:translate(-50%);width:36px}[data-vsbs-header][data-v-4d79fa76]:empty{box-shadow:none;padding:12px var(--vsbs-padding-x, 16px) 8px}[data-vsbs-footer][data-v-4d79fa76]{box-shadow:0 -1px 0 var(--vsbs-border-color, rgba(46, 59, 66, .125));flex-grow:0;flex-shrink:0;padding:16px var(--vsbs-padding-x, 16px);-webkit-user-select:none;user-select:none}[data-vsbs-footer][data-v-4d79fa76]:empty{display:none}[data-vsbs-scroll][data-v-4d79fa76]{flex-grow:1;overflow-y:auto;overscroll-behavior:contain}[data-vsbs-content-wrapper][data-v-4d79fa76]{height:100%}[data-vsbs-content][data-v-4d79fa76]{display:grid;padding:1vh var(--vsbs-padding-x, 16px);-webkit-user-select:none;user-select:none}.fade-enter-active[data-v-4d79fa76],.fade-leave-active[data-v-4d79fa76]{transition:opacity .3s ease}.fade-enter-from[data-v-4d79fa76],.fade-leave-to[data-v-4d79fa76]{opacity:0}
|
package/package.json
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"url": "https://github.com/megaarmos/vue-spring-bottom-sheet/issues"
|
|
33
33
|
},
|
|
34
34
|
"private": false,
|
|
35
|
-
"version": "1.0
|
|
35
|
+
"version": "1.1.0",
|
|
36
36
|
"type": "module",
|
|
37
37
|
"exports": {
|
|
38
38
|
".": {
|
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
"@vueuse/integrations": "^12.0.0",
|
|
64
64
|
"@vueuse/motion": "^2.2.6",
|
|
65
65
|
"focus-trap": "^7",
|
|
66
|
+
"remeda": "^2.19.0",
|
|
66
67
|
"vue": "^3.5.13"
|
|
67
68
|
},
|
|
68
69
|
"devDependencies": {
|