rangeflow 1.0.14 → 1.0.16
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 +7 -0
- package/dist/index.js +142 -126
- package/dist/utils/normalize-date-range.d.ts +6 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,13 @@ A fancy date range picker built with React and Tailwind.
|
|
|
4
4
|
|
|
5
5
|
RangeFlow gives you a date range picker with a smooth slider, quick range tabs, and a popover calendar. It is built for React 18 and 19, ships with a tiny CSS theming layer, and does not touch your app's global styles.
|
|
6
6
|
|
|
7
|
+
<a href="https://rangeflow.raminmousavi.dev" target="_blank">
|
|
8
|
+
<picture>
|
|
9
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raminmousavi.dev/blog-assets/post-006/rangeflow-hero-dark.png?v=1.0">
|
|
10
|
+
<img alt="RangeFlow Hero" src="https://raminmousavi.dev/blog-assets/post-006/rangeflow-hero.png?v=1.0">
|
|
11
|
+
</picture>
|
|
12
|
+
</a>
|
|
13
|
+
|
|
7
14
|
## Features
|
|
8
15
|
|
|
9
16
|
- Drag based range slider that feels natural on mouse and touch.
|
package/dist/index.js
CHANGED
|
@@ -8,13 +8,13 @@ import y, { clsx as b } from "clsx";
|
|
|
8
8
|
import { useStore as x } from "zustand";
|
|
9
9
|
import { KeyboardSensor as ne, PointerSensor as re } from "@dnd-kit/dom";
|
|
10
10
|
import { Group as ie, Panel as S, Separator as C } from "react-resizable-panels";
|
|
11
|
-
import { Modifier as ae, configurator as
|
|
12
|
-
import { Rectangle as
|
|
13
|
-
import { effect as
|
|
14
|
-
import { DayPicker as
|
|
15
|
-
import * as
|
|
11
|
+
import { Modifier as ae, configurator as oe } from "@dnd-kit/abstract";
|
|
12
|
+
import { Rectangle as w } from "@dnd-kit/geometry";
|
|
13
|
+
import { effect as T, signal as E } from "@dnd-kit/state";
|
|
14
|
+
import { DayPicker as se } from "react-day-picker";
|
|
15
|
+
import * as D from "@radix-ui/react-popover";
|
|
16
16
|
//#region src/package/rangeflow/constants/date-ranges.ts
|
|
17
|
-
var
|
|
17
|
+
var ce = [
|
|
18
18
|
{
|
|
19
19
|
label: "2 Weeks",
|
|
20
20
|
from: d().subtract(1, "weeks").toDate(),
|
|
@@ -40,29 +40,40 @@ var se = [
|
|
|
40
40
|
from: d().subtract(6, "months").toDate(),
|
|
41
41
|
to: d().add(6, "months").toDate()
|
|
42
42
|
}
|
|
43
|
-
],
|
|
43
|
+
], O = "left-spacer", k = "right-spacer", A = "slider-track-thumb";
|
|
44
44
|
//#endregion
|
|
45
45
|
//#region src/package/rangeflow/utils/clamp.ts
|
|
46
|
-
function
|
|
46
|
+
function j(e, t, n) {
|
|
47
47
|
return Math.min(Math.max(e, t), n);
|
|
48
48
|
}
|
|
49
49
|
//#endregion
|
|
50
50
|
//#region src/package/rangeflow/utils/interpolate.ts
|
|
51
|
-
function
|
|
51
|
+
function M(e, t) {
|
|
52
52
|
return (n) => {
|
|
53
53
|
let [r, i] = e, [a, o] = t;
|
|
54
54
|
return a + (n - r) / (i - r) * (o - a);
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
57
|
//#endregion
|
|
58
|
+
//#region src/package/rangeflow/utils/normalize-date-range.ts
|
|
59
|
+
function N(e) {
|
|
60
|
+
let t = d().startOf("day"), n = d(e.from), r = d(e.to), i = n.isValid() ? n.startOf("day") : t, a = r.isValid() ? r.startOf("day") : i;
|
|
61
|
+
return a.isBefore(i) && (a = i), {
|
|
62
|
+
start: i,
|
|
63
|
+
end: a
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
58
67
|
//#region src/package/rangeflow/utils/create-slider-values.ts
|
|
59
|
-
var
|
|
68
|
+
var le = M([1, 100], [5, 100]);
|
|
60
69
|
function P(e, t) {
|
|
61
|
-
let n =
|
|
70
|
+
let { start: n, end: r } = N(e), i = Math.max(r.diff(n, "day") + 1, 1), a = d(t.from), o = d(t.to), s = a.isValid() ? a.startOf("day") : n, c = o.isValid() ? o.startOf("day") : s;
|
|
71
|
+
c.isBefore(s) && (c = s);
|
|
72
|
+
let l = Math.max(Math.min(s.diff(n, "day"), i - 1), 0), u = Math.max(Math.min(c.diff(s, "day") + 1, i), 1) * 100 / i, f = l * 100 / i, p = Math.max(le(u), 5), m = j(f - (p - u), 0, Math.max(100 - p, 0));
|
|
62
73
|
return {
|
|
63
|
-
size:
|
|
64
|
-
left:
|
|
65
|
-
right: Math.max(100 -
|
|
74
|
+
size: p,
|
|
75
|
+
left: m,
|
|
76
|
+
right: Math.max(100 - m - p, 0)
|
|
66
77
|
};
|
|
67
78
|
}
|
|
68
79
|
//#endregion
|
|
@@ -108,7 +119,7 @@ var z = (e) => f()((t) => ({
|
|
|
108
119
|
})), B = e(null);
|
|
109
120
|
//#endregion
|
|
110
121
|
//#region src/package/rangeflow/context/ContextProvider.tsx
|
|
111
|
-
function V({ children: e, defaultRange: t, defaultSelected: n, disabled: r, duration: i, calendar: a = !0, ranges: o =
|
|
122
|
+
function V({ children: e, defaultRange: t, defaultSelected: n, disabled: r, duration: i, calendar: a = !0, ranges: o = ce, CalendarProps: s, Slots: l, api: d, onChange: f }) {
|
|
112
123
|
let m = L(), h = I({ onChange: f }), g = R(l), [_] = u(() => z({
|
|
113
124
|
ranges: o,
|
|
114
125
|
disabled: r,
|
|
@@ -187,7 +198,10 @@ var H = n(({ value: e, delay: t }) => {
|
|
|
187
198
|
//#endregion
|
|
188
199
|
//#region src/package/rangeflow/hooks/use-days-in-range.ts
|
|
189
200
|
function W(e) {
|
|
190
|
-
return c(() =>
|
|
201
|
+
return c(() => {
|
|
202
|
+
let { start: t, end: n } = N(e);
|
|
203
|
+
return Math.max(n.diff(t, "day") + 1, 1);
|
|
204
|
+
}, [e.from, e.to]);
|
|
191
205
|
}
|
|
192
206
|
//#endregion
|
|
193
207
|
//#region src/package/rangeflow/hooks/use-rangeflow-slots.ts
|
|
@@ -201,18 +215,18 @@ function K(e) {
|
|
|
201
215
|
}
|
|
202
216
|
//#endregion
|
|
203
217
|
//#region src/package/rangeflow/components/DateSlider/DateLabelsTrack.tsx
|
|
204
|
-
function
|
|
218
|
+
function ue(e) {
|
|
205
219
|
return e > 120 ? "MMM YYYY" : e > 7 ? "MMM DD" : "ddd DD";
|
|
206
220
|
}
|
|
207
|
-
function
|
|
221
|
+
function de(e) {
|
|
208
222
|
return e > 120 ? 8 : e > 30 ? 10 : e > 7 ? 8 : Math.min(e + 1, 8);
|
|
209
223
|
}
|
|
210
|
-
var
|
|
224
|
+
var fe = n(() => {
|
|
211
225
|
let e = K((e) => e.range), n = W(e), { DateLabelsTrack: r } = G(), i = c(() => {
|
|
212
|
-
let t =
|
|
226
|
+
let t = ue(n), r = Math.max(de(n), 1), { start: i, end: a } = N(e), o = a.diff(i), s = Math.max(r - 1, 1);
|
|
213
227
|
return Array.from({ length: r }, (e, n) => {
|
|
214
|
-
let
|
|
215
|
-
return i.add(
|
|
228
|
+
let r = n / s;
|
|
229
|
+
return i.add(o * r, "ms").format(t);
|
|
216
230
|
});
|
|
217
231
|
}, [
|
|
218
232
|
e.from,
|
|
@@ -234,7 +248,7 @@ function q() {
|
|
|
234
248
|
}
|
|
235
249
|
//#endregion
|
|
236
250
|
//#region src/package/rangeflow/icons/DoubleChevronLeftIcon.tsx
|
|
237
|
-
function
|
|
251
|
+
function pe() {
|
|
238
252
|
return /* @__PURE__ */ p("svg", {
|
|
239
253
|
fill: "none",
|
|
240
254
|
height: "15",
|
|
@@ -251,7 +265,7 @@ function fe() {
|
|
|
251
265
|
}
|
|
252
266
|
//#endregion
|
|
253
267
|
//#region src/package/rangeflow/icons/DoubleChevronRightIcon.tsx
|
|
254
|
-
function
|
|
268
|
+
function me() {
|
|
255
269
|
return /* @__PURE__ */ p("svg", {
|
|
256
270
|
fill: "none",
|
|
257
271
|
height: "15",
|
|
@@ -268,7 +282,7 @@ function pe() {
|
|
|
268
282
|
}
|
|
269
283
|
//#endregion
|
|
270
284
|
//#region src/package/rangeflow/components/DateSlider/DateTickers.tsx
|
|
271
|
-
var
|
|
285
|
+
var he = n(() => {
|
|
272
286
|
let { DateTickers: e } = G(), n = Math.min(Math.max(70, W(K((e) => e.range))), 100);
|
|
273
287
|
return e ? t(e) : /* @__PURE__ */ p("div", {
|
|
274
288
|
className: "rangeflow-tickers flex items-center gap-2",
|
|
@@ -289,15 +303,15 @@ function J({ children: e, onClick: t }) {
|
|
|
289
303
|
}
|
|
290
304
|
//#endregion
|
|
291
305
|
//#region src/package/rangeflow/utils/derive-selection-from-layout.ts
|
|
292
|
-
var
|
|
293
|
-
function
|
|
294
|
-
let n = e[
|
|
306
|
+
var ge = M([5, 100], [1, 100]);
|
|
307
|
+
function _e(e, t) {
|
|
308
|
+
let n = e[A], r = e[O], i = e[k], { start: a, end: o } = N(t), s = Math.max(o.diff(a, "day") + 1, 1), c = Number.isFinite(n) ? n : 5, l = Number.isFinite(r) ? r : 0, u = ge(c), d = l + (c - u), f = Math.round(c) <= 5 ? 1 : Math.max(Math.round(u * s / 100), 1), p = j(Math.round(d * s / 100), 0, Math.max(s - f, 0));
|
|
295
309
|
return {
|
|
296
310
|
size: n,
|
|
297
311
|
left: r,
|
|
298
312
|
right: i,
|
|
299
|
-
from: a.add(
|
|
300
|
-
to: a.add(
|
|
313
|
+
from: a.add(p, "day").toDate(),
|
|
314
|
+
to: a.add(p + f - 1, "day").toDate()
|
|
301
315
|
};
|
|
302
316
|
}
|
|
303
317
|
//#endregion
|
|
@@ -310,7 +324,7 @@ function Y() {
|
|
|
310
324
|
function X() {
|
|
311
325
|
let e = Y();
|
|
312
326
|
return i((t) => {
|
|
313
|
-
let { range: n, update: r } = e.getState(), { size: i, left: a, right: o, from: s, to: c } =
|
|
327
|
+
let { range: n, update: r } = e.getState(), { size: i, left: a, right: o, from: s, to: c } = _e(t, n);
|
|
314
328
|
r({
|
|
315
329
|
slider: {
|
|
316
330
|
size: i,
|
|
@@ -326,34 +340,34 @@ function X() {
|
|
|
326
340
|
}
|
|
327
341
|
//#endregion
|
|
328
342
|
//#region src/package/rangeflow/components/DateSlider/Slider/SliderLeftSpacer.tsx
|
|
329
|
-
function
|
|
343
|
+
function ve() {
|
|
330
344
|
let e = K((e) => e.slider.left), [t] = u(() => e);
|
|
331
345
|
return /* @__PURE__ */ p(S, {
|
|
332
346
|
className: "focus:outline-none",
|
|
333
347
|
defaultSize: `${t}%`,
|
|
334
|
-
id:
|
|
348
|
+
id: O,
|
|
335
349
|
minSize: 0,
|
|
336
350
|
children: "\xA0"
|
|
337
351
|
});
|
|
338
352
|
}
|
|
339
353
|
//#endregion
|
|
340
354
|
//#region src/package/rangeflow/components/DateSlider/Slider/SliderRightSpacer.tsx
|
|
341
|
-
function
|
|
355
|
+
function ye() {
|
|
342
356
|
let e = K((e) => e.slider.right), [t] = u(() => e);
|
|
343
357
|
return /* @__PURE__ */ p(S, {
|
|
344
358
|
className: "focus:outline-none",
|
|
345
359
|
defaultSize: `${t}%`,
|
|
346
|
-
id:
|
|
360
|
+
id: k,
|
|
347
361
|
minSize: 0,
|
|
348
362
|
children: "\xA0"
|
|
349
363
|
});
|
|
350
364
|
}
|
|
351
365
|
//#endregion
|
|
352
366
|
//#region src/package/rangeflow/components/DateSlider/SliderValue.tsx
|
|
353
|
-
var
|
|
367
|
+
var be = n(() => {
|
|
354
368
|
let { SliderValueLabel: e } = G(), n = K((e) => e.slider.size), r = K((e) => e.selected_date), i = c(() => {
|
|
355
|
-
let e = d(r.to).
|
|
356
|
-
return n < 10 ? `${
|
|
369
|
+
let e = d(r.from), t = d(r.to), i = e.isValid() ? e : t, a = t.isValid() ? t : e, o = a.isValid() && i.isValid() ? a.diff(i, "day") + 1 : 1, s = Number.isFinite(o) ? Math.max(o, 1) : 1;
|
|
370
|
+
return n < 10 ? `${s}D` : s === 1 ? "1 Day" : `${s} Days`;
|
|
357
371
|
}, [
|
|
358
372
|
r.from,
|
|
359
373
|
r.to,
|
|
@@ -364,26 +378,26 @@ var ye = n(() => {
|
|
|
364
378
|
className: y("rangeflow-thumb-label flex h-full w-full items-center justify-center", "mx-[clamp(0.5rem,5vw,5%)] cursor-grab", "text-xs font-medium text-nowrap text-(--rangeflow-text)"),
|
|
365
379
|
children: e ? t(e, { label: i }) : i
|
|
366
380
|
});
|
|
367
|
-
}), Z =
|
|
368
|
-
function
|
|
381
|
+
}), Z = M([1, 100], [5, 100]);
|
|
382
|
+
function xe({ onHandleRef: e }) {
|
|
369
383
|
let t = K((e) => e.slider.size), n = K((e) => e.duration), r = W(K((e) => e.range)), [i] = u(() => t), a = n?.min ? Math.min(Z(n.min * 100 / r), 100) : 5, o = n?.max ? Math.min(Z(n.max * 100 / r), 100) : 100;
|
|
370
384
|
return /* @__PURE__ */ p(S, {
|
|
371
385
|
defaultSize: `${i}%`,
|
|
372
386
|
elementRef: e,
|
|
373
|
-
id:
|
|
387
|
+
id: A,
|
|
374
388
|
maxSize: `${o}%`,
|
|
375
389
|
minSize: `${a}%`,
|
|
376
390
|
children: /* @__PURE__ */ p("div", {
|
|
377
391
|
"data-track-handle-container": "",
|
|
378
392
|
className: y("rangeflow-thumb flex items-center justify-center", "h-full rounded-sm border border-(--rangeflow-border-strong) inset-shadow-sm shadow-(color:--rangeflow-shadow-color)", "backdrop-blur-[2.5px]", "cursor-default select-none"),
|
|
379
|
-
children: /* @__PURE__ */ p(
|
|
393
|
+
children: /* @__PURE__ */ p(be, {})
|
|
380
394
|
})
|
|
381
395
|
});
|
|
382
396
|
}
|
|
383
397
|
//#endregion
|
|
384
398
|
//#region src/package/rangeflow/components/DateSlider/Slider/index.tsx
|
|
385
|
-
var
|
|
386
|
-
function
|
|
399
|
+
var Se = (e, t, n) => !!e?.querySelector("[data-separator=\"active\"]") && t["slider-track-thumb"] === n["slider-track-thumb"];
|
|
400
|
+
function Ce({ onHandleRef: e }) {
|
|
387
401
|
let t = X(), { slider: { root: n } } = q(), i = l(null), a = l(null), o = l(null), s = b("rangeflow-separator h-3/4 w-0.75 self-center rounded-full transition-[background-color,opacity] duration-150", "bg-(--rangeflow-separator) hover:bg-(--rangeflow-separator-active) focus:outline-none", "data-[separator=active]:bg-(--rangeflow-separator-active)", "opacity-0 group-has-[[data-track-handle-container]:hover]:opacity-100", "hover:opacity-100 data-[separator=active]:opacity-100 data-[separator=focus]:opacity-100"), { ref: c } = te({
|
|
388
402
|
id: "track-handle-draggable",
|
|
389
403
|
sensors: [re.configure({ preventActivation: (e) => !(e.target instanceof HTMLDivElement) || !e.target.dataset.trackHandle }), ne]
|
|
@@ -394,11 +408,11 @@ function Se({ onHandleRef: e }) {
|
|
|
394
408
|
},
|
|
395
409
|
onDragMove: (e) => {
|
|
396
410
|
if (!n.current || !a.current || !i.current || !i.current.clientWidth) return;
|
|
397
|
-
let t = e.operation.transform.x / i.current.clientWidth * 100, r = a.current, o = r[
|
|
411
|
+
let t = e.operation.transform.x / i.current.clientWidth * 100, r = a.current, o = r[O] + r[k], s = Math.min(Math.max(r[O] + t, 0), o);
|
|
398
412
|
n.current.setLayout({
|
|
399
413
|
...r,
|
|
400
|
-
[
|
|
401
|
-
[
|
|
414
|
+
[O]: s,
|
|
415
|
+
[k]: o - s
|
|
402
416
|
});
|
|
403
417
|
},
|
|
404
418
|
onDragEnd: () => {
|
|
@@ -413,7 +427,7 @@ function Se({ onHandleRef: e }) {
|
|
|
413
427
|
groupRef: n,
|
|
414
428
|
onLayoutChange: (e) => {
|
|
415
429
|
let a = o.current;
|
|
416
|
-
if (a &&
|
|
430
|
+
if (a && Se(i.current, a, e)) {
|
|
417
431
|
n.current?.setLayout(a);
|
|
418
432
|
return;
|
|
419
433
|
}
|
|
@@ -422,23 +436,23 @@ function Se({ onHandleRef: e }) {
|
|
|
422
436
|
});
|
|
423
437
|
},
|
|
424
438
|
children: [
|
|
425
|
-
/* @__PURE__ */ p(
|
|
439
|
+
/* @__PURE__ */ p(ve, {}),
|
|
426
440
|
/* @__PURE__ */ p(C, { className: s }),
|
|
427
|
-
/* @__PURE__ */ p(
|
|
441
|
+
/* @__PURE__ */ p(xe, { onHandleRef: e }),
|
|
428
442
|
/* @__PURE__ */ p(C, { className: s }),
|
|
429
|
-
/* @__PURE__ */ p(
|
|
443
|
+
/* @__PURE__ */ p(ye, {})
|
|
430
444
|
]
|
|
431
445
|
})
|
|
432
446
|
});
|
|
433
447
|
}
|
|
434
448
|
//#endregion
|
|
435
449
|
//#region src/package/rangeflow/components/DateSlider/SliderTrack.tsx
|
|
436
|
-
function
|
|
450
|
+
function we({ onHandleRef: e }) {
|
|
437
451
|
let t = K((e) => e.update), n = K((e) => e.range), r = W(n), { slider: { root: i } } = q(), a = K((e) => e.disabled?.before), o = K((e) => e.disabled?.after), s = c(() => !a || d(n.from).isAfter(a), [n.from, a]), l = c(() => !o || d(n.to).isBefore(o), [n.to, o]), u = ({ left: e, right: t, size: n }) => {
|
|
438
452
|
i.current?.setLayout({
|
|
439
|
-
[
|
|
440
|
-
[
|
|
441
|
-
[
|
|
453
|
+
[O]: e,
|
|
454
|
+
[A]: n,
|
|
455
|
+
[k]: t
|
|
442
456
|
});
|
|
443
457
|
};
|
|
444
458
|
return /* @__PURE__ */ m("div", {
|
|
@@ -457,11 +471,11 @@ function Ce({ onHandleRef: e }) {
|
|
|
457
471
|
};
|
|
458
472
|
});
|
|
459
473
|
},
|
|
460
|
-
children: /* @__PURE__ */ p(
|
|
474
|
+
children: /* @__PURE__ */ p(pe, {})
|
|
461
475
|
}) : null,
|
|
462
476
|
/* @__PURE__ */ m("div", {
|
|
463
477
|
className: "relative flex-1 px-2",
|
|
464
|
-
children: [/* @__PURE__ */ p(
|
|
478
|
+
children: [/* @__PURE__ */ p(Ce, { onHandleRef: e }), /* @__PURE__ */ p(he, {})]
|
|
465
479
|
}),
|
|
466
480
|
l ? /* @__PURE__ */ p(J, {
|
|
467
481
|
onClick: () => {
|
|
@@ -476,18 +490,18 @@ function Ce({ onHandleRef: e }) {
|
|
|
476
490
|
};
|
|
477
491
|
});
|
|
478
492
|
},
|
|
479
|
-
children: /* @__PURE__ */ p(
|
|
493
|
+
children: /* @__PURE__ */ p(me, {})
|
|
480
494
|
}) : null
|
|
481
495
|
]
|
|
482
496
|
});
|
|
483
497
|
}
|
|
484
498
|
//#endregion
|
|
485
499
|
//#region src/package/rangeflow/components/DateSlider/utils/restrict-inner-to-element.ts
|
|
486
|
-
var
|
|
487
|
-
innerRect =
|
|
488
|
-
containerRect =
|
|
500
|
+
var Te = class e extends ae {
|
|
501
|
+
innerRect = E(null);
|
|
502
|
+
containerRect = E(null);
|
|
489
503
|
constructor(e, t) {
|
|
490
|
-
super(e, t), this.destroy =
|
|
504
|
+
super(e, t), this.destroy = T(() => {
|
|
491
505
|
if (!this.options) return;
|
|
492
506
|
let { dragOperation: t } = e;
|
|
493
507
|
if (!t.status.initialized) return;
|
|
@@ -499,25 +513,25 @@ var we = class e extends ae {
|
|
|
499
513
|
}
|
|
500
514
|
apply({ transform: e }) {
|
|
501
515
|
let t = this.innerRect.value, n = this.containerRect.value;
|
|
502
|
-
return !t || !n ? e : g(new
|
|
516
|
+
return !t || !n ? e : g(new w(t.left, t.top, t.width, t.height), e, n);
|
|
503
517
|
}
|
|
504
|
-
static configure =
|
|
518
|
+
static configure = oe(e);
|
|
505
519
|
};
|
|
506
520
|
//#endregion
|
|
507
521
|
//#region src/package/rangeflow/components/DateSlider/index.tsx
|
|
508
|
-
function
|
|
522
|
+
function Ee() {
|
|
509
523
|
let [e, t] = u(null), [n, r] = u(null);
|
|
510
524
|
return /* @__PURE__ */ p("div", {
|
|
511
525
|
ref: t,
|
|
512
526
|
className: "rangeflow-slider relative my-8 h-3 w-full px-2",
|
|
513
527
|
children: /* @__PURE__ */ m(_, {
|
|
514
|
-
modifiers: [
|
|
528
|
+
modifiers: [Te.configure({
|
|
515
529
|
inner: n,
|
|
516
530
|
container: e
|
|
517
531
|
}), h],
|
|
518
532
|
children: [
|
|
519
|
-
/* @__PURE__ */ p(
|
|
520
|
-
/* @__PURE__ */ p(
|
|
533
|
+
/* @__PURE__ */ p(we, { onHandleRef: r }),
|
|
534
|
+
/* @__PURE__ */ p(fe, {}),
|
|
521
535
|
/* @__PURE__ */ p(v, { children: null })
|
|
522
536
|
]
|
|
523
537
|
})
|
|
@@ -525,7 +539,7 @@ function Te() {
|
|
|
525
539
|
}
|
|
526
540
|
//#endregion
|
|
527
541
|
//#region src/package/rangeflow/components/RangeTabs/hooks/use-apply-slider-layout.ts
|
|
528
|
-
function
|
|
542
|
+
function De() {
|
|
529
543
|
let e = X(), t = K((e) => e.range.from.getTime()), n = K((e) => e.range.to.getTime()), { slider: { root: i } } = q();
|
|
530
544
|
o(() => {
|
|
531
545
|
r(() => {
|
|
@@ -540,7 +554,7 @@ function Ee() {
|
|
|
540
554
|
}
|
|
541
555
|
//#endregion
|
|
542
556
|
//#region src/package/rangeflow/components/RangeTabs/hooks/use-tab-indicator.ts
|
|
543
|
-
function
|
|
557
|
+
function Oe(e, t) {
|
|
544
558
|
let n = l([]), r = l(null), i = l(!1);
|
|
545
559
|
return s(() => {
|
|
546
560
|
let t = r.current;
|
|
@@ -566,15 +580,15 @@ function De(e, t) {
|
|
|
566
580
|
}
|
|
567
581
|
//#endregion
|
|
568
582
|
//#region src/package/rangeflow/components/RangeTabs/index.tsx
|
|
569
|
-
function
|
|
570
|
-
|
|
583
|
+
function ke() {
|
|
584
|
+
De();
|
|
571
585
|
let { slider: { root: e } } = q(), t = K((e) => e.ranges), n = K((e) => e.update), r = K((e) => e.range.from), i = K((e) => e.range.to), a = K((e) => e.disabled?.before), o = K((e) => e.disabled?.after), s = (t) => {
|
|
572
586
|
n((n) => {
|
|
573
587
|
let r = P(t, n.selected_date);
|
|
574
588
|
return e.current?.setLayout({
|
|
575
|
-
[
|
|
576
|
-
[
|
|
577
|
-
[
|
|
589
|
+
[O]: r.left,
|
|
590
|
+
[A]: r.size,
|
|
591
|
+
[k]: r.right
|
|
578
592
|
}), { range: {
|
|
579
593
|
from: t.from,
|
|
580
594
|
to: t.to
|
|
@@ -588,7 +602,7 @@ function Oe() {
|
|
|
588
602
|
l,
|
|
589
603
|
r,
|
|
590
604
|
i
|
|
591
|
-
]), { indicatorRef: f, registerButton: h } =
|
|
605
|
+
]), { indicatorRef: f, registerButton: h } = Oe(u, l);
|
|
592
606
|
return /* @__PURE__ */ p("div", {
|
|
593
607
|
className: "rangeflow-tabs flex items-center justify-center select-none",
|
|
594
608
|
children: /* @__PURE__ */ m("div", {
|
|
@@ -613,7 +627,7 @@ function Oe() {
|
|
|
613
627
|
}
|
|
614
628
|
//#endregion
|
|
615
629
|
//#region src/package/rangeflow/components/Calendar/CalendarDayButton.tsx
|
|
616
|
-
function
|
|
630
|
+
function Ae({ className: e, day: t, modifiers: n, ...r }) {
|
|
617
631
|
let i = l(null);
|
|
618
632
|
o(() => {
|
|
619
633
|
n.focused && i.current?.focus();
|
|
@@ -632,16 +646,16 @@ function ke({ className: e, day: t, modifiers: n, ...r }) {
|
|
|
632
646
|
}
|
|
633
647
|
//#endregion
|
|
634
648
|
//#region src/package/rangeflow/components/Calendar/Chevron.tsx
|
|
635
|
-
var
|
|
649
|
+
var je = {
|
|
636
650
|
up: "rotate-180",
|
|
637
651
|
down: "",
|
|
638
652
|
left: "rotate-90",
|
|
639
653
|
right: "-rotate-90"
|
|
640
654
|
};
|
|
641
|
-
function
|
|
655
|
+
function Me({ className: e, orientation: t = "down", size: n = 16 }) {
|
|
642
656
|
return /* @__PURE__ */ p("svg", {
|
|
643
657
|
"aria-hidden": "true",
|
|
644
|
-
className: y("shrink-0",
|
|
658
|
+
className: y("shrink-0", je[t], e),
|
|
645
659
|
fill: "none",
|
|
646
660
|
height: n,
|
|
647
661
|
stroke: "currentColor",
|
|
@@ -655,8 +669,8 @@ function je({ className: e, orientation: t = "down", size: n = 16 }) {
|
|
|
655
669
|
}
|
|
656
670
|
//#endregion
|
|
657
671
|
//#region src/package/rangeflow/components/Calendar/index.tsx
|
|
658
|
-
function
|
|
659
|
-
return /* @__PURE__ */ p(
|
|
672
|
+
function Ne({ captionLayout: e = "label", className: t, classNames: n, components: r, showOutsideDays: i = !0, ...a }) {
|
|
673
|
+
return /* @__PURE__ */ p(se, {
|
|
660
674
|
captionLayout: e,
|
|
661
675
|
className: y("rangeflow-calendar w-fit p-3 select-none", t),
|
|
662
676
|
showOutsideDays: i,
|
|
@@ -687,8 +701,8 @@ function Me({ captionLayout: e = "label", className: t, classNames: n, component
|
|
|
687
701
|
...n
|
|
688
702
|
},
|
|
689
703
|
components: {
|
|
690
|
-
DayButton:
|
|
691
|
-
Chevron:
|
|
704
|
+
DayButton: Ae,
|
|
705
|
+
Chevron: Me,
|
|
692
706
|
...r
|
|
693
707
|
},
|
|
694
708
|
...a
|
|
@@ -696,42 +710,42 @@ function Me({ captionLayout: e = "label", className: t, classNames: n, component
|
|
|
696
710
|
}
|
|
697
711
|
//#endregion
|
|
698
712
|
//#region src/package/rangeflow/components/Popover/index.tsx
|
|
699
|
-
var
|
|
713
|
+
var Pe = n(({ align: e = "center", className: t, sideOffset: n = 6, children: r, ...i }) => /* @__PURE__ */ p(D.Portal, { children: /* @__PURE__ */ p(D.Content, {
|
|
700
714
|
align: e,
|
|
701
715
|
sideOffset: n,
|
|
702
716
|
...i,
|
|
703
717
|
className: y("rangeflow-date-picker-portal rangeflow-popover z-50 rounded-lg border border-(--rangeflow-border) bg-(--rangeflow-bg) p-2 text-(--rangeflow-text) shadow-md shadow-(color:--rangeflow-shadow-color) backdrop-blur-[10px] outline-none", t),
|
|
704
718
|
children: r
|
|
705
|
-
}) })),
|
|
719
|
+
}) })), Fe = D.Root, Q = D.Trigger;
|
|
706
720
|
//#endregion
|
|
707
721
|
//#region src/package/rangeflow/components/PickerBar/CalendarPopover.tsx
|
|
708
|
-
function
|
|
722
|
+
function Ie({ children: e }) {
|
|
709
723
|
let t = K((e) => e.update), n = K((e) => e.range), r = K((e) => e.selected_date), i = K((e) => e.disabled), a = K((e) => e.duration), o = K((e) => e.CalendarProps), { slider: { root: s } } = q(), c = () => {
|
|
710
|
-
let e = d(n.from), t = d(n.to);
|
|
711
|
-
return
|
|
712
|
-
from:
|
|
713
|
-
to:
|
|
724
|
+
let e = d(n.from), t = d(n.to), i = d(r.from), a = d(r.to), o = e.isValid() ? e : d(), s = t.isValid() ? t : o;
|
|
725
|
+
return s.isBefore(o) && (s = o), i.isValid() && i.isBefore(o) && (o = i.subtract(10, "day")), a.isValid() && a.isAfter(s) && (s = a.add(10, "day")), s.isBefore(o) && (s = o.add(1, "day")), {
|
|
726
|
+
from: o.toDate(),
|
|
727
|
+
to: s.toDate()
|
|
714
728
|
};
|
|
715
729
|
}, l = () => {
|
|
716
730
|
let e = c(), { size: n, left: i, right: a } = P(e, r);
|
|
717
731
|
s.current?.setLayout({
|
|
718
|
-
[
|
|
719
|
-
[
|
|
720
|
-
[
|
|
732
|
+
[O]: i,
|
|
733
|
+
[A]: n,
|
|
734
|
+
[k]: a
|
|
721
735
|
}), t({ range: e });
|
|
722
736
|
};
|
|
723
|
-
return /* @__PURE__ */ m(
|
|
737
|
+
return /* @__PURE__ */ m(Fe, {
|
|
724
738
|
onOpenChange: (e) => {
|
|
725
739
|
e === !1 && l();
|
|
726
740
|
},
|
|
727
|
-
children: [/* @__PURE__ */ p(
|
|
741
|
+
children: [/* @__PURE__ */ p(Q, {
|
|
728
742
|
className: "cursor-pointer",
|
|
729
743
|
children: e
|
|
730
|
-
}), /* @__PURE__ */ p(
|
|
744
|
+
}), /* @__PURE__ */ p(Pe, {
|
|
731
745
|
align: "start",
|
|
732
746
|
sideOffset: 10,
|
|
733
|
-
children: /* @__PURE__ */ p(
|
|
734
|
-
defaultMonth: r.from,
|
|
747
|
+
children: /* @__PURE__ */ p(Ne, {
|
|
748
|
+
defaultMonth: d(r.from).isValid() ? r.from : void 0,
|
|
735
749
|
numberOfMonths: 2,
|
|
736
750
|
showOutsideDays: !1,
|
|
737
751
|
...o,
|
|
@@ -741,9 +755,11 @@ function Q({ children: e }) {
|
|
|
741
755
|
mode: "range",
|
|
742
756
|
selected: r,
|
|
743
757
|
onSelect: (e) => {
|
|
744
|
-
!e?.from || !e?.to
|
|
745
|
-
|
|
746
|
-
|
|
758
|
+
if (!e?.from || !e?.to) return;
|
|
759
|
+
let n = d(e.from).startOf("day"), r = d(e.to).startOf("day");
|
|
760
|
+
!n.isValid() || !r.isValid() || t({ selected_date: {
|
|
761
|
+
from: n.toDate(),
|
|
762
|
+
to: r.toDate()
|
|
747
763
|
} });
|
|
748
764
|
}
|
|
749
765
|
})
|
|
@@ -752,7 +768,7 @@ function Q({ children: e }) {
|
|
|
752
768
|
}
|
|
753
769
|
//#endregion
|
|
754
770
|
//#region src/package/rangeflow/icons/CalendarIcon.tsx
|
|
755
|
-
function
|
|
771
|
+
function Le() {
|
|
756
772
|
return /* @__PURE__ */ p("svg", {
|
|
757
773
|
fill: "none",
|
|
758
774
|
height: "15",
|
|
@@ -772,10 +788,10 @@ function Ie() {
|
|
|
772
788
|
function $() {
|
|
773
789
|
let e = K((e) => e.selected_date), { SelectedDate: n } = G(), { from: r, to: i } = c(() => {
|
|
774
790
|
let t = d(), n = d(e.from), r = d(e.to), i = n.isSame(r, "year") ? "DD MMM" : "DD MMM YYYY", a = {
|
|
775
|
-
from: n.format(i),
|
|
776
|
-
to: r.format(i)
|
|
791
|
+
from: n.isValid() ? n.format(i) : "Invalid Date",
|
|
792
|
+
to: r.isValid() ? r.format(i) : "Invalid Date"
|
|
777
793
|
};
|
|
778
|
-
return t.isSame(n, "day") && (a.from = "Today"), t.isSame(r, "day") && (a.to = "Today"), a;
|
|
794
|
+
return n.isValid() && t.isSame(n, "day") && (a.from = "Today"), r.isValid() && t.isSame(r, "day") && (a.to = "Today"), a;
|
|
779
795
|
}, [e.from, e.to]);
|
|
780
796
|
return n ? t(n, {
|
|
781
797
|
from: r,
|
|
@@ -783,7 +799,7 @@ function $() {
|
|
|
783
799
|
}) : /* @__PURE__ */ m("div", {
|
|
784
800
|
className: "rangeflow-selected-date flex items-center gap-2 text-xs font-medium text-(--rangeflow-accent-text) select-none hover:opacity-90",
|
|
785
801
|
children: [
|
|
786
|
-
/* @__PURE__ */ p(
|
|
802
|
+
/* @__PURE__ */ p(Le, {}),
|
|
787
803
|
r,
|
|
788
804
|
/* @__PURE__ */ p("span", {
|
|
789
805
|
className: "text-(--rangeflow-text-faint)",
|
|
@@ -795,51 +811,51 @@ function $() {
|
|
|
795
811
|
}
|
|
796
812
|
//#endregion
|
|
797
813
|
//#region src/package/rangeflow/components/PickerBar/index.tsx
|
|
798
|
-
function
|
|
814
|
+
function Re() {
|
|
799
815
|
let e = K((e) => e.calendar), { RangeTabs: n } = G();
|
|
800
816
|
return /* @__PURE__ */ m("div", {
|
|
801
817
|
className: "flex h-full items-center justify-between px-2",
|
|
802
|
-
children: [e ? /* @__PURE__ */ p(
|
|
818
|
+
children: [e ? /* @__PURE__ */ p(Ie, { children: /* @__PURE__ */ p($, {}) }) : /* @__PURE__ */ p($, {}), n ? t(n) : /* @__PURE__ */ p(ke, {})]
|
|
803
819
|
});
|
|
804
820
|
}
|
|
805
821
|
//#endregion
|
|
806
822
|
//#region src/package/rangeflow/hooks/use-rangeflow-events.ts
|
|
807
|
-
function
|
|
823
|
+
function ze() {
|
|
808
824
|
return a(B).events;
|
|
809
825
|
}
|
|
810
826
|
//#endregion
|
|
811
827
|
//#region src/package/rangeflow/hooks/use-emit-date-change.ts
|
|
812
|
-
function
|
|
813
|
-
let e = Y(), { onChange: t } =
|
|
828
|
+
function Be() {
|
|
829
|
+
let e = Y(), { onChange: t } = ze();
|
|
814
830
|
o(() => e.subscribe((e, n) => {
|
|
815
831
|
e.selected_date !== n.selected_date && t(e.selected_date);
|
|
816
832
|
}), [e, t]);
|
|
817
833
|
}
|
|
818
834
|
//#endregion
|
|
819
835
|
//#region src/package/rangeflow/Root.tsx
|
|
820
|
-
function
|
|
821
|
-
return
|
|
836
|
+
function Ve() {
|
|
837
|
+
return Be(), /* @__PURE__ */ m("div", {
|
|
822
838
|
className: "rangeflow-date-picker rangeflow-root h-35 w-140 rounded-lg border border-(--rangeflow-border) bg-(--rangeflow-bg) text-(--rangeflow-text) shadow-md shadow-(color:--rangeflow-shadow-color)",
|
|
823
839
|
children: [/* @__PURE__ */ p("div", {
|
|
824
840
|
className: "rangeflow-header h-10 border-b border-(--rangeflow-border) p-2",
|
|
825
|
-
children: /* @__PURE__ */ p(
|
|
841
|
+
children: /* @__PURE__ */ p(Re, {})
|
|
826
842
|
}), /* @__PURE__ */ p("div", {
|
|
827
843
|
className: "rangeflow-body mx-2",
|
|
828
|
-
children: /* @__PURE__ */ p(
|
|
844
|
+
children: /* @__PURE__ */ p(Ee, {})
|
|
829
845
|
})]
|
|
830
846
|
});
|
|
831
847
|
}
|
|
832
848
|
//#endregion
|
|
833
849
|
//#region src/package/rangeflow/RangeFlow.tsx
|
|
834
|
-
function
|
|
850
|
+
function He(e) {
|
|
835
851
|
return /* @__PURE__ */ p(V, {
|
|
836
852
|
...e,
|
|
837
|
-
children: /* @__PURE__ */ p(
|
|
853
|
+
children: /* @__PURE__ */ p(Ve, {})
|
|
838
854
|
});
|
|
839
855
|
}
|
|
840
856
|
//#endregion
|
|
841
857
|
//#region src/package/rangeflow/hooks/use-rangeflow.ts
|
|
842
|
-
function
|
|
858
|
+
function Ue() {
|
|
843
859
|
let e = l(null), t = l(null), n = i((n) => {
|
|
844
860
|
let r = e.current;
|
|
845
861
|
if (!r) return;
|
|
@@ -855,18 +871,18 @@ function He() {
|
|
|
855
871
|
right: c
|
|
856
872
|
}
|
|
857
873
|
}), t.current?.slider.root.current?.setLayout({
|
|
858
|
-
[
|
|
859
|
-
[
|
|
860
|
-
[
|
|
874
|
+
[O]: s,
|
|
875
|
+
[A]: o,
|
|
876
|
+
[k]: c
|
|
861
877
|
});
|
|
862
878
|
}, []), r = i((n) => {
|
|
863
879
|
let r = e.current;
|
|
864
880
|
if (!r) return;
|
|
865
881
|
let { range: i } = r.getState(), { size: a, left: o, right: s } = P(i, n);
|
|
866
882
|
t.current?.slider.root.current?.setLayout({
|
|
867
|
-
[
|
|
868
|
-
[
|
|
869
|
-
[
|
|
883
|
+
[O]: o,
|
|
884
|
+
[A]: a,
|
|
885
|
+
[k]: s
|
|
870
886
|
});
|
|
871
887
|
}, []);
|
|
872
888
|
return {
|
|
@@ -879,4 +895,4 @@ function He() {
|
|
|
879
895
|
};
|
|
880
896
|
}
|
|
881
897
|
//#endregion
|
|
882
|
-
export {
|
|
898
|
+
export { He as RangeFlow, Ue as useRangeFlow };
|