@component-hook/picker 1.4.4 → 1.5.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.
@@ -1,447 +1,451 @@
1
1
  import "./index.css";
2
- import { ref as R, readonly as Z, isRef as j, defineComponent as L, toRef as re, openBlock as k, createElementBlock as Y, unref as h, withModifiers as oe, createElementVNode as C, normalizeStyle as q, Fragment as $, renderList as se, toDisplayString as ie, useModel as U, useTemplateRef as ce, computed as I, watchEffect as me, renderSlot as J, createBlock as B, mergeModels as V, nextTick as fe } from "vue";
3
- const de = Array.isArray;
4
- function pe(e, l) {
5
- if (ue(e)) return "multiple";
6
- const [f] = e;
7
- return f?.[l.children] ? "cascade" : "single";
2
+ import { Fragment as e, computed as t, createBlock as n, createElementBlock as r, createElementVNode as i, defineComponent as a, mergeModels as o, nextTick as s, normalizeStyle as c, openBlock as l, readonly as u, ref as d, renderList as f, renderSlot as p, toDisplayString as m, toRef as h, unref as g, useModel as _, useTemplateRef as v, watchEffect as y, withModifiers as b } from "vue";
3
+ //#region src/shared/constants.ts
4
+ var x = .52, S = .008, C = [
5
+ "year",
6
+ "month",
7
+ "day"
8
+ ], w = [
9
+ "hour",
10
+ "minute",
11
+ "second"
12
+ ], T = Array.isArray;
13
+ //#endregion
14
+ //#region src/shared/utils/common.ts
15
+ function E(e, t) {
16
+ if (j(e)) return "multiple";
17
+ let [n] = e;
18
+ return n?.[t.children] ? "cascade" : "single";
8
19
  }
9
- function ve(e) {
10
- return {
11
- children: e?.children || "children",
12
- label: e?.label || "label",
13
- value: e?.value || "value"
14
- };
20
+ function D(e) {
21
+ return {
22
+ children: e?.children || "children",
23
+ label: e?.label || "label",
24
+ value: e?.value || "value"
25
+ };
15
26
  }
16
- function he(e, l, f) {
17
- if (ue(e)) return [];
18
- const o = [];
19
- let u = e, i = 0;
20
- for (; u; ) {
21
- const v = l[i];
22
- let m = le(u, v, f);
23
- m === -1 && (m = 0), o.push(u), i += 1, u = u[m]?.[f.children];
24
- }
25
- return o;
27
+ function O(e, t, n) {
28
+ if (j(e)) return [];
29
+ let r = [], i = e, a = 0;
30
+ for (; i;) {
31
+ let e = t[a], o = A(i, e, n);
32
+ o === -1 && (o = 0), r.push(i), a += 1, i = i[o]?.[n.children];
33
+ }
34
+ return r;
26
35
  }
27
- function ge(e, l, f, o) {
28
- const u = [...f];
29
- let i = e, v = l + 1;
30
- for (; i?.[o.children]; ) {
31
- const m = i[o.children][0];
32
- u[v] = m.value, i = m, v += 1;
33
- }
34
- return u;
36
+ function k(e, t, n, r) {
37
+ let i = [...n], a = e, o = t + 1;
38
+ for (; a?.[r.children];) {
39
+ let e = a[r.children][0];
40
+ i[o] = e.value, a = e, o += 1;
41
+ }
42
+ return i;
35
43
  }
36
- function le(e, l, f) {
37
- return e.findIndex((o) => o?.[f.value] === l);
44
+ function A(e, t, n) {
45
+ return e.findIndex((e) => e?.[n.value] === t);
38
46
  }
39
- function ue(e) {
40
- const [l] = e;
41
- return de(l);
47
+ function j(e) {
48
+ let [t] = e;
49
+ return T(t);
42
50
  }
43
- function Te(e, l) {
44
- return e > l ? "horizontal" : l > e ? "vertical" : "";
51
+ function M(e, t) {
52
+ return e > t ? "horizontal" : t > e ? "vertical" : "";
45
53
  }
46
- function b(e, l, f) {
47
- const o = [];
48
- for (let u = e; u <= l; u++) {
49
- const i = f(`${u}`);
50
- o.push({ label: i, value: u });
51
- }
52
- return o;
54
+ function N() {
55
+ let { fontSize: e } = getComputedStyle(document.documentElement);
56
+ return Number(e.replace("px", "")) || 16;
53
57
  }
54
- function Q(e, l) {
55
- return e === l.getFullYear();
58
+ function P(e, t, n) {
59
+ let r = [];
60
+ for (let i = e; i <= t; i++) {
61
+ let e = n(String(i));
62
+ r.push({
63
+ label: e,
64
+ value: i
65
+ });
66
+ }
67
+ return r;
56
68
  }
57
- function W(e, l) {
58
- return e === l.getFullYear();
69
+ function F(e, t) {
70
+ return e === t.getFullYear();
59
71
  }
60
- function Me(e, l) {
61
- return e === l.getMonth() + 1;
72
+ function I(e, t) {
73
+ return e === t.getFullYear();
62
74
  }
63
- function xe(e, l) {
64
- return e === l.getMonth() + 1;
75
+ function L(e, t) {
76
+ return e === t.getMonth() + 1;
65
77
  }
66
- function ye(e, l) {
67
- return new Date(e, l, 0).getDate();
78
+ function R(e, t) {
79
+ return e === t.getMonth() + 1;
68
80
  }
69
- function _(e, l, f) {
70
- const o = /* @__PURE__ */ new Date(), u = Date.now(), i = e.getTime(), v = l.getTime(), m = u >= i && u <= v;
71
- return f === "year" ? m ? o.getFullYear() : e.getFullYear() : f === "month" ? m ? o.getMonth() + 1 : e.getMonth() + 1 : m ? o.getDate() : e.getDate();
81
+ function z(e, t) {
82
+ return new Date(e, t, 0).getDate();
72
83
  }
73
- function N(e) {
74
- return e;
84
+ function B(e, t, n) {
85
+ let r = /* @__PURE__ */ new Date(), i = Date.now(), a = e.getTime(), o = t.getTime(), s = i >= a && i <= o;
86
+ return n === "year" ? s ? r.getFullYear() : e.getFullYear() : n === "month" ? (s ? r.getMonth() : e.getMonth()) + 1 : s ? r.getDate() : e.getDate();
75
87
  }
76
- function De(e) {
77
- return /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(e);
78
- }
79
- function ee(e) {
80
- if (!De(e)) return null;
81
- const [l, f, o] = e.split(":");
82
- return { hour: Number(l), minute: Number(f), second: Number(o) };
88
+ function V(e) {
89
+ return e;
83
90
  }
84
91
  function H(e) {
85
- return e.padStart(2, "0");
92
+ return /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(e);
93
+ }
94
+ function U(e) {
95
+ if (!H(e)) return null;
96
+ let [t, n, r] = e.split(":");
97
+ return {
98
+ hour: Number(t),
99
+ minute: Number(n),
100
+ second: Number(r)
101
+ };
102
+ }
103
+ function W(e) {
104
+ return e.padStart(2, "0");
86
105
  }
87
- function te(e, l, f) {
88
- const o = Date.now(), { hour: u, minute: i, second: v } = e, { hour: m, minute: d, second: p } = l, g = (/* @__PURE__ */ new Date()).setHours(u, i, v), M = (/* @__PURE__ */ new Date()).setHours(m, d, p), r = o >= g && o <= M;
89
- return f === "hour" ? r ? (/* @__PURE__ */ new Date()).getHours() : u : f === "minute" ? r ? (/* @__PURE__ */ new Date()).getMinutes() : i : r ? (/* @__PURE__ */ new Date()).getSeconds() : v;
106
+ function G(e, t, n) {
107
+ let r = Date.now(), { hour: i, minute: a, second: o } = e, { hour: s, minute: c, second: l } = t, u = (/* @__PURE__ */ new Date()).setHours(i, a, o), d = (/* @__PURE__ */ new Date()).setHours(s, c, l), f = r >= u && r <= d;
108
+ return n === "hour" ? f ? (/* @__PURE__ */ new Date()).getHours() : i : n === "minute" ? f ? (/* @__PURE__ */ new Date()).getMinutes() : a : f ? (/* @__PURE__ */ new Date()).getSeconds() : o;
90
109
  }
91
- const ke = 16, F = 48, Se = 0.52, ne = 150, X = 300, Ye = 15, Ie = 8e-3, Oe = ["year", "month", "day"], be = ["hour", "minute", "second"];
92
- function Ve() {
93
- const e = {
94
- startX: 0,
95
- startY: 0,
96
- deltaX: 0,
97
- deltaY: 0,
98
- offsetX: 0,
99
- offsetY: 0
100
- };
101
- let l = "";
102
- const f = () => l === "vertical", o = () => l === "horizontal";
103
- function u() {
104
- e.deltaX = 0, e.deltaY = 0, e.offsetX = 0, e.offsetY = 0, l = "";
105
- }
106
- function i(d) {
107
- const p = "touches" in d ? d.touches[0] : d;
108
- u(), e.startX = p.clientX, e.startY = p.clientY;
109
- }
110
- function v(d) {
111
- if (!e.startX || !e.startY) return !0;
112
- const p = "touches" in d ? d.touches[0] : d;
113
- e.deltaX = Math.max(p.clientX, 0) - e.startX, e.deltaY = p.clientY - e.startY, e.offsetX = Math.abs(e.deltaX), e.offsetY = Math.abs(e.deltaY);
114
- const g = 10;
115
- (!l || e.offsetX < g && e.offsetY < g) && (l = Te(e.offsetX, e.offsetY));
116
- }
117
- function m() {
118
- e.startX = 0, e.startY = 0;
119
- }
120
- return {
121
- pointer: e,
122
- move: v,
123
- start: i,
124
- stop: m,
125
- reset: u,
126
- isVertical: f,
127
- isHorizontal: o
128
- };
110
+ //#endregion
111
+ //#region src/shared/utils/pointer.ts
112
+ function K() {
113
+ let e = {
114
+ startX: 0,
115
+ startY: 0,
116
+ deltaX: 0,
117
+ deltaY: 0,
118
+ offsetX: 0,
119
+ offsetY: 0
120
+ }, t = "", n = !0, r = () => t === "vertical", i = () => t === "horizontal";
121
+ function a() {
122
+ e.deltaX = 0, e.deltaY = 0, e.offsetX = 0, e.offsetY = 0, t = "", n = !0;
123
+ }
124
+ function o(t) {
125
+ let n = "touches" in t ? t.touches[0] : t;
126
+ a(), e.startX = n.clientX, e.startY = n.clientY;
127
+ }
128
+ function s(r) {
129
+ if (!e.startX || !e.startY) return !0;
130
+ let i = "touches" in r ? r.touches[0] : r;
131
+ e.deltaX = Math.max(i.clientX, 0) - e.startX, e.deltaY = i.clientY - e.startY, e.offsetX = Math.abs(e.deltaX), e.offsetY = Math.abs(e.deltaY), (!t || e.offsetX < 10 && e.offsetY < 10) && (t = M(e.offsetX, e.offsetY)), n && (e.offsetX > 5 || e.offsetY > 5) && (n = !1);
132
+ }
133
+ function c() {
134
+ e.startX = 0, e.startY = 0;
135
+ }
136
+ return {
137
+ pointer: e,
138
+ move: s,
139
+ start: o,
140
+ stop: c,
141
+ reset: a,
142
+ isVertical: r,
143
+ isHorizontal: i
144
+ };
129
145
  }
130
- function Ce({ column: e, onChange: l }) {
131
- const o = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) / ke, u = R(0), i = R(0), { pointer: v, start: m, move: d, stop: p } = Ve();
132
- let g = 0, M = 0, r = 0, s = !1, t = null;
133
- function n(T) {
134
- m(T), s = !0, i.value = 0, M = Date.now(), g = u.value, r = g, t = null;
135
- }
136
- function a(T) {
137
- if (d(T)) return;
138
- const D = j(e) ? e.value.length : e.length, E = g + v.deltaY, A = P((D - 1) * -F), G = Math.min(Math.max(E, A), 0), K = Date.now();
139
- u.value = G, !(K - M <= X) && (M = K, r = G);
140
- }
141
- function c() {
142
- p();
143
- const T = u.value - r, x = Date.now() - M;
144
- if (x < X && Math.abs(T) > Ye) {
145
- y(T, x);
146
- return;
147
- }
148
- const D = w(u.value);
149
- i.value = ne, O(D), s = !1;
150
- }
151
- function y(T, x) {
152
- const D = Math.abs(T / x), E = u.value + D / Ie * (T < 0 ? -1 : 1), A = w(E);
153
- i.value = X, O(A);
154
- }
155
- function S() {
156
- i.value = 0, s = !1, t && (t(), t = null);
157
- }
158
- function O(T) {
159
- const x = -T * P(F), D = () => l?.(T);
160
- s && x !== u.value ? t = D : D(), u.value = x;
161
- }
162
- function w(T) {
163
- const x = j(e) ? e.value.length : e.length, D = Math.round(-T / P(F));
164
- return D < 0 ? 0 : D >= x ? x - 1 : D;
165
- }
166
- function P(T) {
167
- return T * o;
168
- }
169
- function z(T, x = "auto") {
170
- s && x === "smooth" || (t = null, s = x === "smooth", i.value = x === "smooth" ? ne : 0, O(T));
171
- }
172
- return {
173
- offsetY: Z(u),
174
- transitionDuration: Z(i),
175
- onPointerDown: n,
176
- onPointerMove: a,
177
- onPointerUp: c,
178
- stopInertialSliding: S,
179
- scrollToIndex: z
180
- };
146
+ //#endregion
147
+ //#region src/vue/hooks/use-scroll-snap.ts
148
+ function q({ column: e, onChange: t }) {
149
+ let n = N() / 16, r = d(0), i = d(0), { pointer: a, start: o, move: s, stop: c } = K(), l = 0, f = 0, p = 0, m = !1, h = null;
150
+ function _(e) {
151
+ o(e), m = !0, i.value = 0, f = Date.now(), l = r.value, p = l, h = null;
152
+ }
153
+ function v(t) {
154
+ if (s(t)) return;
155
+ let n = g(e).length, i = l + a.deltaY, o = T((n - 1) * -48), c = Math.min(Math.max(i, o), 0), u = Date.now();
156
+ r.value = c, !(u - f <= 300) && (f = u, p = c);
157
+ }
158
+ function y() {
159
+ c();
160
+ let e = r.value - p, t = Date.now() - f;
161
+ if (t < 300 && Math.abs(e) > 15) {
162
+ b(e, t);
163
+ return;
164
+ }
165
+ let n = w(r.value);
166
+ i.value = 150, C(n), m = !1;
167
+ }
168
+ function b(e, t) {
169
+ let n = Math.abs(e / t), a = w(r.value + n / S * (e < 0 ? -1 : 1));
170
+ i.value = 300, C(a);
171
+ }
172
+ function x() {
173
+ i.value = 0, m = !1, h &&= (h(), null);
174
+ }
175
+ function C(e) {
176
+ let n = -e * T(48), i = () => t?.(e);
177
+ m && n !== r.value ? h = i : i(), r.value = n;
178
+ }
179
+ function w(t) {
180
+ let n = g(e).length, r = Math.round(-t / T(48));
181
+ return r < 0 ? 0 : r >= n ? n - 1 : r;
182
+ }
183
+ function T(e) {
184
+ return e * n;
185
+ }
186
+ function E(e, t = "auto") {
187
+ m && t === "smooth" || (h = null, m = t === "smooth", i.value = t === "smooth" ? 150 : 0, C(e));
188
+ }
189
+ return {
190
+ offsetY: u(r),
191
+ transitionDuration: u(i),
192
+ onPointerDown: _,
193
+ onPointerMove: v,
194
+ onPointerUp: y,
195
+ stopInertialSliding: x,
196
+ scrollToIndex: E
197
+ };
181
198
  }
182
- const we = ["onClick"], Pe = /* @__PURE__ */ L({
183
- __name: "PickerColumn",
184
- props: {
185
- column: {},
186
- fields: {},
187
- selectedIndex: { default: 0 }
188
- },
189
- emits: ["change"],
190
- setup(e, { expose: l, emit: f }) {
191
- const o = e, u = f, { offsetY: i, transitionDuration: v, onPointerDown: m, onPointerMove: d, onPointerUp: p, stopInertialSliding: g, scrollToIndex: M } = Ce({
192
- column: re(o, "column"),
193
- onChange: r
194
- });
195
- function r(n) {
196
- n !== o.selectedIndex && u("change", n);
197
- }
198
- function s(n = o.selectedIndex, a) {
199
- M(n, a);
200
- }
201
- function t(n) {
202
- n !== o.selectedIndex && s(n, "smooth");
203
- }
204
- return l({ scrollToSelected: s }), (n, a) => (k(), Y("div", {
205
- class: "chook-picker-column",
206
- "aria-label": "Picker column",
207
- onTouchstartPassive: a[1] || (a[1] = //@ts-ignore
208
- (...c) => h(m) && h(m)(...c)),
209
- onTouchmove: a[2] || (a[2] = oe(
210
- //@ts-ignore
211
- (...c) => h(d) && h(d)(...c),
212
- ["prevent"]
213
- )),
214
- onTouchendPassive: a[3] || (a[3] = //@ts-ignore
215
- (...c) => h(p) && h(p)(...c)),
216
- onTouchcancel: a[4] || (a[4] = //@ts-ignore
217
- (...c) => h(p) && h(p)(...c)),
218
- onMousedownPassive: a[5] || (a[5] = //@ts-ignore
219
- (...c) => h(m) && h(m)(...c)),
220
- onMousemovePassive: a[6] || (a[6] = //@ts-ignore
221
- (...c) => h(d) && h(d)(...c)),
222
- onMouseupPassive: a[7] || (a[7] = //@ts-ignore
223
- (...c) => h(p) && h(p)(...c)),
224
- onMouseleavePassive: a[8] || (a[8] = //@ts-ignore
225
- (...c) => h(p) && h(p)(...c))
226
- }, [
227
- C("ul", {
228
- style: q({
229
- overflowY: "hidden",
230
- "--offset-y": `${h(i)}`,
231
- transform: "translate3d(0, calc(var(--offset-y) * 1px), 0)",
232
- transitionDuration: `${h(v)}ms`,
233
- transitionProperty: h(v) ? "all" : "none"
234
- }),
235
- onTransitionend: a[0] || (a[0] = //@ts-ignore
236
- (...c) => h(g) && h(g)(...c))
237
- }, [
238
- (k(!0), Y($, null, se(e.column, (c, y) => (k(), Y("li", {
239
- key: c?.[e.fields.value],
240
- class: "chook-picker-column-item",
241
- role: "button",
242
- tabindex: "0",
243
- onClick: (S) => t(y)
244
- }, [
245
- C("p", {
246
- class: "chook-picker-column-label",
247
- style: q({
248
- transform: `rotate3d(1, 0, 0, calc((${y * h(F)} + var(--offset-y)) * ${h(Se)}deg)`
249
- })
250
- }, ie(c?.[e.fields.label]), 5)
251
- ], 8, we))), 128))
252
- ], 36)
253
- ], 32));
254
- }
255
- }), Fe = {
256
- class: "chook-picker-container",
257
- "aria-label": "Picker"
258
- }, Le = { class: "chook-picker-loading" }, Ee = {
259
- key: 1,
260
- class: "chook-picker-columns"
261
- }, ae = /* @__PURE__ */ L({
262
- __name: "Picker",
263
- props: /* @__PURE__ */ V({
264
- columns: {},
265
- loading: { type: Boolean },
266
- columnsFieldNames: {}
267
- }, {
268
- modelValue: { default: [] },
269
- modelModifiers: {}
270
- }),
271
- emits: /* @__PURE__ */ V(["change"], ["update:modelValue"]),
272
- setup(e, { emit: l }) {
273
- const f = e, o = l, u = U(e, "modelValue"), i = R([]), v = ce("columnsRef"), m = I(() => ve(f.columnsFieldNames)), d = I(() => pe(f.columns, m.value)), p = I(() => {
274
- const { columns: r } = f;
275
- return d.value === "single" ? [r] : d.value === "multiple" ? r : he(r, u.value, m.value);
276
- });
277
- function g(r, s) {
278
- const t = p.value[r], n = t[s]?.[m.value.value], a = u.value[r];
279
- if (n === a) return;
280
- const c = [...u.value];
281
- if (c[r] = n, d.value === "cascade") {
282
- const y = t[s];
283
- u.value = ge(y, r, c, m.value);
284
- } else
285
- u.value = c;
286
- fe(() => {
287
- o("change", u.value);
288
- });
289
- }
290
- function M() {
291
- const r = p.value.length, s = [];
292
- for (let t = 0; t < r; t++) {
293
- const n = p.value[t], a = u.value[t], c = le(n, a, m.value);
294
- if (c === -1) {
295
- const S = (i.value[t] ?? 0) >= n.length ? Math.max(n.length - 1, 0) : 0;
296
- u.value[t] = n[S]?.[m.value.value], s[t] = S;
297
- } else
298
- s[t] = c;
299
- s[t] !== i.value[t] && v.value?.[t]?.scrollToSelected(s[t]);
300
- }
301
- i.value = s;
302
- }
303
- return me(
304
- () => {
305
- M();
306
- },
307
- { flush: "post" }
308
- ), (r, s) => (k(), Y("div", Fe, [
309
- e.loading ? (k(), Y($, { key: 0 }, [
310
- C("div", Le, [
311
- J(r.$slots, "loading")
312
- ]),
313
- s[1] || (s[1] = C("div", { class: "chook-picker-columns" }, null, -1))
314
- ], 64)) : e.columns.length ? (k(), Y("div", {
315
- key: 2,
316
- class: "chook-picker-columns chook-picker-columns-backdrop",
317
- onTouchmove: s[0] || (s[0] = oe(() => {
318
- }, ["stop"]))
319
- }, [
320
- (k(!0), Y($, null, se(p.value, (t, n) => (k(), B(Pe, {
321
- key: n,
322
- ref_for: !0,
323
- ref_key: "columnsRef",
324
- ref: v,
325
- column: t,
326
- fields: m.value,
327
- "selected-index": i.value[n],
328
- onChange: (a) => g(n, a)
329
- }, null, 8, ["column", "fields", "selected-index", "onChange"]))), 128)),
330
- s[2] || (s[2] = C("div", { class: "chook-picker-mask-backdrop" }, null, -1))
331
- ], 32)) : (k(), Y("div", Ee, [
332
- J(r.$slots, "empty")
333
- ]))
334
- ]));
335
- }
336
- }), Ne = /* @__PURE__ */ L({
337
- __name: "DatePicker",
338
- props: /* @__PURE__ */ V({
339
- columnsType: { default: () => Oe },
340
- minDate: { default: () => new Date((/* @__PURE__ */ new Date()).getFullYear() - 10, 0, 1) },
341
- maxDate: { default: () => new Date((/* @__PURE__ */ new Date()).getFullYear() + 10, 11, 31) },
342
- formatYearLabel: { type: Function, default: N },
343
- formatMonthLabel: { type: Function, default: N },
344
- formatDayLabel: { type: Function, default: N }
345
- }, {
346
- modelValue: { default: [] },
347
- modelModifiers: {}
348
- }),
349
- emits: /* @__PURE__ */ V(["change"], ["update:modelValue"]),
350
- setup(e, { expose: l, emit: f }) {
351
- const o = e, u = f, i = U(e, "modelValue"), v = I(() => {
352
- const { columnsType: r, minDate: s, maxDate: t } = o, n = {
353
- year: m,
354
- month: d,
355
- day: p
356
- };
357
- return r.map((a) => n[a](s, t));
358
- });
359
- i.value.length || M();
360
- function m(r, s) {
361
- const t = r.getFullYear(), n = s.getFullYear();
362
- return b(t, n, o.formatYearLabel);
363
- }
364
- function d(r, s) {
365
- const t = g("year"), n = Q(t, r) ? r.getMonth() + 1 : 1, a = W(t, s) ? s.getMonth() + 1 : 12;
366
- return b(n, a, o.formatMonthLabel);
367
- }
368
- function p(r, s) {
369
- const t = g("year"), n = g("month"), a = Q(t, r) && Me(n, r), c = W(t, s) && xe(n, s), y = a ? r.getDate() : 1, S = c ? s.getDate() : ye(t, n);
370
- return b(y, S, o.formatDayLabel);
371
- }
372
- function g(r) {
373
- const { columnsType: s } = o, t = s.indexOf(r), n = i.value[t];
374
- return n ? Number(n) : _(o.minDate, o.maxDate, r);
375
- }
376
- function M() {
377
- const { columnsType: r } = o;
378
- i.value = r.map((s) => _(o.minDate, o.maxDate, s));
379
- }
380
- return l({
381
- setCurrentDate: M
382
- }), (r, s) => (k(), B(ae, {
383
- modelValue: i.value,
384
- "onUpdate:modelValue": s[0] || (s[0] = (t) => i.value = t),
385
- columns: v.value,
386
- onChange: s[1] || (s[1] = (t) => u("change", t))
387
- }, null, 8, ["modelValue", "columns"]));
388
- }
389
- }), He = /* @__PURE__ */ L({
390
- __name: "TimePicker",
391
- props: /* @__PURE__ */ V({
392
- columnsType: { default: () => be },
393
- minTime: {},
394
- maxTime: {},
395
- formatHourLabel: { type: Function, default: H },
396
- formatMinuteLabel: { type: Function, default: H },
397
- formatSecondLabel: { type: Function, default: H }
398
- }, {
399
- modelValue: { default: [] },
400
- modelModifiers: {}
401
- }),
402
- emits: /* @__PURE__ */ V(["change"], ["update:modelValue"]),
403
- setup(e, { expose: l, emit: f }) {
404
- const o = e, u = f, i = U(e, "modelValue"), v = I(() => {
405
- const { columnsType: t } = o, n = {
406
- hour: p,
407
- minute: g,
408
- second: M
409
- };
410
- return t.map((a) => n[a]());
411
- }), m = I(() => ee(o.minTime ?? "") ?? { hour: 0, minute: 0, second: 0 }), d = I(() => ee(o.maxTime ?? "") ?? { hour: 23, minute: 59, second: 59 });
412
- i.value.length || s();
413
- function p() {
414
- const t = m.value.hour, n = d.value.hour;
415
- return b(t, n, o.formatHourLabel);
416
- }
417
- function g() {
418
- const t = r("hour"), { hour: n, minute: a } = m.value, { hour: c, minute: y } = d.value;
419
- return b(t === n ? a : 0, t === c ? y : 59, o.formatMinuteLabel);
420
- }
421
- function M() {
422
- const t = r("hour"), n = r("minute"), { hour: a, minute: c, second: y } = m.value, { hour: S, minute: O, second: w } = d.value;
423
- return b(t === a && n === c ? y : 0, t === S && n === O ? w : 59, o.formatSecondLabel);
424
- }
425
- function r(t) {
426
- const { columnsType: n } = o, a = n.indexOf(t), c = i.value[a];
427
- return c !== void 0 ? Number(c) : te(m.value, d.value, t);
428
- }
429
- function s() {
430
- const { columnsType: t } = o;
431
- i.value = t.map((n) => te(m.value, d.value, n));
432
- }
433
- return l({
434
- setCurrentTime: s
435
- }), (t, n) => (k(), B(ae, {
436
- modelValue: i.value,
437
- "onUpdate:modelValue": n[0] || (n[0] = (a) => i.value = a),
438
- columns: v.value,
439
- onChange: n[1] || (n[1] = (a) => u("change", a))
440
- }, null, 8, ["modelValue", "columns"]));
441
- }
199
+ //#endregion
200
+ //#region src/vue/components/PickerColumn.vue?vue&type=script&setup=true&lang.ts
201
+ var J = ["onClick"], Y = /* @__PURE__ */ a({
202
+ __name: "PickerColumn",
203
+ props: {
204
+ column: {},
205
+ fields: {},
206
+ selectedIndex: { default: 0 }
207
+ },
208
+ emits: ["change"],
209
+ setup(t, { expose: n, emit: a }) {
210
+ let o = t, s = a, { offsetY: u, transitionDuration: d, onPointerDown: p, onPointerMove: _, onPointerUp: v, stopInertialSliding: y, scrollToIndex: S } = q({
211
+ column: h(o, "column"),
212
+ onChange: C
213
+ });
214
+ function C(e) {
215
+ e !== o.selectedIndex && s("change", e);
216
+ }
217
+ function w(e = o.selectedIndex, t) {
218
+ S(e, t);
219
+ }
220
+ function T(e) {
221
+ e !== o.selectedIndex && w(e, "smooth");
222
+ }
223
+ return n({ scrollToSelected: w }), (n, a) => (l(), r("div", {
224
+ class: "chook-picker-column",
225
+ "aria-label": "Picker column",
226
+ onTouchstartPassive: a[1] ||= (...e) => g(p) && g(p)(...e),
227
+ onTouchmove: a[2] ||= b((...e) => g(_) && g(_)(...e), ["prevent"]),
228
+ onTouchendPassive: a[3] ||= (...e) => g(v) && g(v)(...e),
229
+ onTouchcancel: a[4] ||= (...e) => g(v) && g(v)(...e),
230
+ onMousedownPassive: a[5] ||= (...e) => g(p) && g(p)(...e),
231
+ onMousemovePassive: a[6] ||= (...e) => g(_) && g(_)(...e),
232
+ onMouseupPassive: a[7] ||= (...e) => g(v) && g(v)(...e),
233
+ onMouseleavePassive: a[8] ||= (...e) => g(v) && g(v)(...e)
234
+ }, [i("ul", {
235
+ style: c({
236
+ overflowY: "hidden",
237
+ "--offset-y": `${g(u)}`,
238
+ transform: "translate3d(0, calc(var(--offset-y) * 1px), 0)",
239
+ transitionDuration: `${g(d)}ms`,
240
+ transitionProperty: g(d) ? "all" : "none"
241
+ }),
242
+ onTransitionend: a[0] ||= (...e) => g(y) && g(y)(...e)
243
+ }, [(l(!0), r(e, null, f(t.column, (e, n) => (l(), r("li", {
244
+ key: e?.[t.fields.value],
245
+ class: "chook-picker-column-item",
246
+ role: "button",
247
+ tabindex: "0",
248
+ onClick: (e) => T(n)
249
+ }, [i("p", {
250
+ class: "chook-picker-column-label",
251
+ style: c({ transform: `rotate3d(1, 0, 0, calc((${n * g(48)} + var(--offset-y)) * ${g(x)}deg)` })
252
+ }, m(e?.[t.fields.label]), 5)], 8, J))), 128))], 36)], 32));
253
+ }
254
+ }), X = {
255
+ class: "chook-picker-container",
256
+ "aria-label": "Picker"
257
+ }, Z = { class: "chook-picker-loading" }, Q = {
258
+ key: 1,
259
+ class: "chook-picker-columns"
260
+ }, $ = /* @__PURE__ */ a({
261
+ __name: "Picker",
262
+ props: /*@__PURE__*/ o({
263
+ columns: {},
264
+ loading: { type: Boolean },
265
+ columnsFieldNames: {}
266
+ }, {
267
+ modelValue: { default: () => [] },
268
+ modelModifiers: {}
269
+ }),
270
+ emits: /*@__PURE__*/ o(["change"], ["update:modelValue"]),
271
+ setup(a, { emit: o }) {
272
+ let c = a, u = o, m = _(a, "modelValue"), h = d([]), g = v("columnsRef"), x = t(() => D(c.columnsFieldNames)), S = t(() => E(c.columns, x.value)), C = t(() => {
273
+ let { columns: e } = c;
274
+ return S.value === "single" ? [e] : S.value === "multiple" ? e : O(e, m.value, x.value);
275
+ });
276
+ function w(e, t) {
277
+ let n = C.value[e], r = n[t]?.[x.value.value];
278
+ if (r === m.value[e]) return;
279
+ let i = [...m.value];
280
+ if (i[e] = r, S.value === "cascade") {
281
+ let r = n[t];
282
+ m.value = k(r, e, i, x.value);
283
+ } else m.value = i;
284
+ s(() => {
285
+ u("change", m.value);
286
+ });
287
+ }
288
+ function T() {
289
+ let e = C.value.length, t = [];
290
+ for (let n = 0; n < e; n++) {
291
+ let e = C.value[n], r = m.value[n], i = A(e, r, x.value);
292
+ if (i === -1) {
293
+ let r = (h.value[n] ?? 0) >= e.length ? Math.max(e.length - 1, 0) : 0;
294
+ m.value[n] = e[r]?.[x.value.value], t[n] = r;
295
+ } else t[n] = i;
296
+ t[n] !== h.value[n] && g.value?.[n]?.scrollToSelected(t[n]);
297
+ }
298
+ h.value = t;
299
+ }
300
+ return y(() => {
301
+ T();
302
+ }, { flush: "post" }), (t, o) => (l(), r("div", X, [a.loading ? (l(), r(e, { key: 0 }, [i("div", Z, [p(t.$slots, "loading")]), o[1] ||= i("div", { class: "chook-picker-columns" }, null, -1)], 64)) : a.columns.length ? (l(), r("div", {
303
+ key: 2,
304
+ class: "chook-picker-columns chook-picker-columns-backdrop",
305
+ onTouchmove: o[0] ||= b(() => {}, ["stop"])
306
+ }, [(l(!0), r(e, null, f(C.value, (e, t) => (l(), n(Y, {
307
+ key: t,
308
+ ref_for: !0,
309
+ ref_key: "columnsRef",
310
+ ref: g,
311
+ column: e,
312
+ fields: x.value,
313
+ "selected-index": h.value[t],
314
+ onChange: (e) => w(t, e)
315
+ }, null, 8, [
316
+ "column",
317
+ "fields",
318
+ "selected-index",
319
+ "onChange"
320
+ ]))), 128)), o[2] ||= i("div", { class: "chook-picker-mask-backdrop" }, null, -1)], 32)) : (l(), r("div", Q, [p(t.$slots, "empty")]))]));
321
+ }
322
+ }), ee = /* @__PURE__ */ a({
323
+ __name: "DatePicker",
324
+ props: /*@__PURE__*/ o({
325
+ columnsType: { default: () => C },
326
+ minDate: { default: () => new Date((/* @__PURE__ */ new Date()).getFullYear() - 10, 0, 1) },
327
+ maxDate: { default: () => new Date((/* @__PURE__ */ new Date()).getFullYear() + 10, 11, 31) },
328
+ formatYearLabel: {
329
+ type: Function,
330
+ default: V
331
+ },
332
+ formatMonthLabel: {
333
+ type: Function,
334
+ default: V
335
+ },
336
+ formatDayLabel: {
337
+ type: Function,
338
+ default: V
339
+ }
340
+ }, {
341
+ modelValue: { default: () => [] },
342
+ modelModifiers: {}
343
+ }),
344
+ emits: /*@__PURE__*/ o(["change"], ["update:modelValue"]),
345
+ setup(e, { expose: r, emit: i }) {
346
+ let a = e, o = i, s = _(e, "modelValue"), c = t(() => {
347
+ let { columnsType: e, minDate: t, maxDate: n } = a, r = {
348
+ year: u,
349
+ month: d,
350
+ day: f
351
+ };
352
+ return e.map((e) => r[e](t, n));
353
+ });
354
+ s.value.length || m();
355
+ function u(e, t) {
356
+ return P(e.getFullYear(), t.getFullYear(), a.formatYearLabel);
357
+ }
358
+ function d(e, t) {
359
+ let n = p("year");
360
+ return P(F(n, e) ? e.getMonth() + 1 : 1, I(n, t) ? t.getMonth() + 1 : 12, a.formatMonthLabel);
361
+ }
362
+ function f(e, t) {
363
+ let n = p("year"), r = p("month"), i = F(n, e) && L(r, e), o = I(n, t) && R(r, t);
364
+ return P(i ? e.getDate() : 1, o ? t.getDate() : z(n, r), a.formatDayLabel);
365
+ }
366
+ function p(e) {
367
+ let { columnsType: t } = a, n = t.indexOf(e), r = s.value[n];
368
+ return r ? Number(r) : B(a.minDate, a.maxDate, e);
369
+ }
370
+ function m() {
371
+ let { columnsType: e } = a;
372
+ s.value = e.map((e) => B(a.minDate, a.maxDate, e));
373
+ }
374
+ return r({ setCurrentDate: m }), (e, t) => (l(), n($, {
375
+ modelValue: s.value,
376
+ "onUpdate:modelValue": t[0] ||= (e) => s.value = e,
377
+ columns: c.value,
378
+ onChange: t[1] ||= (e) => o("change", e)
379
+ }, null, 8, ["modelValue", "columns"]));
380
+ }
381
+ }), te = /* @__PURE__ */ a({
382
+ __name: "TimePicker",
383
+ props: /*@__PURE__*/ o({
384
+ columnsType: { default: () => w },
385
+ minTime: {},
386
+ maxTime: {},
387
+ formatHourLabel: {
388
+ type: Function,
389
+ default: W
390
+ },
391
+ formatMinuteLabel: {
392
+ type: Function,
393
+ default: W
394
+ },
395
+ formatSecondLabel: {
396
+ type: Function,
397
+ default: W
398
+ }
399
+ }, {
400
+ modelValue: { default: () => [] },
401
+ modelModifiers: {}
402
+ }),
403
+ emits: /*@__PURE__*/ o(["change"], ["update:modelValue"]),
404
+ setup(e, { expose: r, emit: i }) {
405
+ let a = e, o = i, s = _(e, "modelValue"), c = t(() => {
406
+ let { columnsType: e } = a, t = {
407
+ hour: f,
408
+ minute: p,
409
+ second: m
410
+ };
411
+ return e.map((e) => t[e]());
412
+ }), u = t(() => U(a.minTime ?? "") ?? {
413
+ hour: 0,
414
+ minute: 0,
415
+ second: 0
416
+ }), d = t(() => U(a.maxTime ?? "") ?? {
417
+ hour: 23,
418
+ minute: 59,
419
+ second: 59
420
+ });
421
+ s.value.length || g();
422
+ function f() {
423
+ let e = u.value.hour, t = d.value.hour;
424
+ return P(e, t, a.formatHourLabel);
425
+ }
426
+ function p() {
427
+ let e = h("hour"), { hour: t, minute: n } = u.value, { hour: r, minute: i } = d.value;
428
+ return P(e === t ? n : 0, e === r ? i : 59, a.formatMinuteLabel);
429
+ }
430
+ function m() {
431
+ let e = h("hour"), t = h("minute"), { hour: n, minute: r, second: i } = u.value, { hour: o, minute: s, second: c } = d.value;
432
+ return P(e === n && t === r ? i : 0, e === o && t === s ? c : 59, a.formatSecondLabel);
433
+ }
434
+ function h(e) {
435
+ let { columnsType: t } = a, n = t.indexOf(e), r = s.value[n];
436
+ return r === void 0 ? G(u.value, d.value, e) : Number(r);
437
+ }
438
+ function g() {
439
+ let { columnsType: e } = a;
440
+ s.value = e.map((e) => G(u.value, d.value, e));
441
+ }
442
+ return r({ setCurrentTime: g }), (e, t) => (l(), n($, {
443
+ modelValue: s.value,
444
+ "onUpdate:modelValue": t[0] ||= (e) => s.value = e,
445
+ columns: c.value,
446
+ onChange: t[1] ||= (e) => o("change", e)
447
+ }, null, 8, ["modelValue", "columns"]));
448
+ }
442
449
  });
443
- export {
444
- Ne as DatePicker,
445
- ae as Picker,
446
- He as TimePicker
447
- };
450
+ //#endregion
451
+ export { ee as DatePicker, $ as Picker, te as TimePicker };