@wow-two-beta/ui 0.0.68 → 0.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-3BKZLK7D.js → chunk-EKGOQL75.js} +40 -55
- package/dist/chunk-EKGOQL75.js.map +1 -0
- package/dist/{chunk-HPA5BHDK.js → chunk-SREWD3XJ.js} +73 -68
- package/dist/chunk-SREWD3XJ.js.map +1 -0
- package/dist/{chunk-D5QVCOX5.js → chunk-X3JVVEUJ.js} +24 -3
- package/dist/chunk-X3JVVEUJ.js.map +1 -0
- package/dist/display/index.js +2 -2
- package/dist/forms/DateExtensions.d.ts +30 -25
- package/dist/forms/MonthGrid.d.ts +8 -7
- package/dist/forms/calendar/Calendar.d.ts +8 -7
- package/dist/forms/colorPicker/ColorPicker.d.ts +7 -0
- package/dist/forms/dateField/DateField.d.ts +6 -5
- package/dist/forms/datePicker/DatePicker.d.ts +8 -7
- package/dist/forms/dateRangePicker/DateRangePicker.d.ts +5 -4
- package/dist/forms/index.js +2 -2
- package/dist/forms/rangeCalendar/RangeCalendar.d.ts +8 -6
- package/dist/forms/recurrenceEditor/RecurrenceEditor.d.ts +3 -2
- package/dist/forms/timeField/TimeField.d.ts +4 -7
- package/dist/forms/timeField/index.d.ts +1 -1
- package/dist/forms/timePicker/TimePicker.d.ts +5 -5
- package/dist/index.js +3 -3
- package/package.json +2 -1
- package/dist/chunk-3BKZLK7D.js.map +0 -1
- package/dist/chunk-D5QVCOX5.js.map +0 -1
- package/dist/chunk-HPA5BHDK.js.map +0 -1
|
@@ -4,6 +4,7 @@ import { cn } from './chunk-D4ZT36AZ.js';
|
|
|
4
4
|
import { forwardRef } from 'react';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
6
|
import { X } from 'lucide-react';
|
|
7
|
+
import { Temporal } from '@js-temporal/polyfill';
|
|
7
8
|
|
|
8
9
|
var Kbd = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
9
10
|
"kbd",
|
|
@@ -52,8 +53,6 @@ var Tag = forwardRef(
|
|
|
52
53
|
] })
|
|
53
54
|
);
|
|
54
55
|
Tag.displayName = "Tag";
|
|
55
|
-
|
|
56
|
-
// src/forms/DateExtensions.ts
|
|
57
56
|
var WEEKDAYS_SHORT = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
|
|
58
57
|
var MONTHS_LONG = [
|
|
59
58
|
"January",
|
|
@@ -69,95 +68,81 @@ var MONTHS_LONG = [
|
|
|
69
68
|
"November",
|
|
70
69
|
"December"
|
|
71
70
|
];
|
|
72
|
-
function
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
function sundayIndex(d) {
|
|
72
|
+
return d.dayOfWeek % 7;
|
|
73
|
+
}
|
|
74
|
+
function today() {
|
|
75
|
+
return Temporal.Now.plainDateISO();
|
|
76
76
|
}
|
|
77
77
|
function isSameDay(a, b) {
|
|
78
78
|
if (!a || !b) return false;
|
|
79
|
-
return a.
|
|
79
|
+
return a.equals(b);
|
|
80
80
|
}
|
|
81
81
|
function isToday(d) {
|
|
82
|
-
return
|
|
82
|
+
return d.equals(today());
|
|
83
83
|
}
|
|
84
84
|
function addMonths(d, n) {
|
|
85
|
-
|
|
86
|
-
const month = d.getMonth() + n;
|
|
87
|
-
c.setMonth(month, Math.min(d.getDate(), daysInMonth(d.getFullYear(), month)));
|
|
88
|
-
return c;
|
|
85
|
+
return d.add({ months: n });
|
|
89
86
|
}
|
|
90
87
|
function addDays(d, n) {
|
|
91
|
-
|
|
92
|
-
c.setDate(c.getDate() + n);
|
|
93
|
-
return c;
|
|
88
|
+
return d.add({ days: n });
|
|
94
89
|
}
|
|
95
90
|
function startOfMonth(d) {
|
|
96
|
-
return
|
|
91
|
+
return d.with({ day: 1 });
|
|
97
92
|
}
|
|
98
93
|
function daysInMonth(year, month) {
|
|
99
|
-
return
|
|
94
|
+
return Temporal.PlainDate.from({ year, month, day: 1 }).daysInMonth;
|
|
100
95
|
}
|
|
101
96
|
function buildMonthGrid(year, month) {
|
|
102
|
-
const first =
|
|
103
|
-
const
|
|
104
|
-
const start = addDays(first, -firstWeekday);
|
|
97
|
+
const first = Temporal.PlainDate.from({ year, month, day: 1 });
|
|
98
|
+
const start = first.subtract({ days: sundayIndex(first) });
|
|
105
99
|
const cells = [];
|
|
106
100
|
for (let i = 0; i < 42; i++) {
|
|
107
|
-
const date =
|
|
108
|
-
cells.push({ date, outOfMonth: date.
|
|
101
|
+
const date = start.add({ days: i });
|
|
102
|
+
cells.push({ date, outOfMonth: date.month !== month });
|
|
109
103
|
}
|
|
110
104
|
return cells;
|
|
111
105
|
}
|
|
112
106
|
function formatISODate(d) {
|
|
113
107
|
if (!d) return "";
|
|
114
|
-
|
|
115
|
-
const month = String(d.getMonth() + 1).padStart(2, "0");
|
|
116
|
-
const day = String(d.getDate()).padStart(2, "0");
|
|
117
|
-
return `${year}-${month}-${day}`;
|
|
108
|
+
return d.toString();
|
|
118
109
|
}
|
|
119
110
|
function parseISODate(s) {
|
|
120
111
|
if (!s) return null;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return date;
|
|
112
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(s)) return null;
|
|
113
|
+
try {
|
|
114
|
+
return Temporal.PlainDate.from(s, { overflow: "reject" });
|
|
115
|
+
} catch {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
128
118
|
}
|
|
129
|
-
function formatISOTime(
|
|
130
|
-
if (!
|
|
131
|
-
|
|
132
|
-
const m = String(d.getMinutes()).padStart(2, "0");
|
|
133
|
-
return `${h}:${m}`;
|
|
119
|
+
function formatISOTime(t) {
|
|
120
|
+
if (!t) return "";
|
|
121
|
+
return t.toString({ smallestUnit: "minute" });
|
|
134
122
|
}
|
|
135
123
|
function parseISOTime(s) {
|
|
136
124
|
if (!s) return null;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) return null;
|
|
144
|
-
return { hours, minutes };
|
|
125
|
+
if (!/^\d{2}:\d{2}$/.test(s)) return null;
|
|
126
|
+
try {
|
|
127
|
+
return Temporal.PlainTime.from(s, { overflow: "reject" });
|
|
128
|
+
} catch {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
145
131
|
}
|
|
146
132
|
function isDateDisabled(d, options) {
|
|
147
133
|
const { min, max, isDisabled } = options;
|
|
148
|
-
if (min &&
|
|
149
|
-
if (max &&
|
|
134
|
+
if (min && Temporal.PlainDate.compare(d, min) < 0) return true;
|
|
135
|
+
if (max && Temporal.PlainDate.compare(d, max) > 0) return true;
|
|
150
136
|
if (isDisabled?.(d)) return true;
|
|
151
137
|
return false;
|
|
152
138
|
}
|
|
153
139
|
function isInRange(d, start, end) {
|
|
154
140
|
if (!start || !end) return false;
|
|
155
|
-
const
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
return t >= Math.min(s, e) && t <= Math.max(s, e);
|
|
141
|
+
const lo = Temporal.PlainDate.compare(start, end) <= 0 ? start : end;
|
|
142
|
+
const hi = Temporal.PlainDate.compare(start, end) <= 0 ? end : start;
|
|
143
|
+
return Temporal.PlainDate.compare(d, lo) >= 0 && Temporal.PlainDate.compare(d, hi) <= 0;
|
|
159
144
|
}
|
|
160
145
|
|
|
161
|
-
export { Kbd, MONTHS_LONG, Tag, WEEKDAYS_SHORT, addDays, addMonths, buildMonthGrid, formatISODate, formatISOTime, isDateDisabled, isInRange, isSameDay, isToday, parseISODate, parseISOTime,
|
|
162
|
-
//# sourceMappingURL=chunk-
|
|
163
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
export { Kbd, MONTHS_LONG, Tag, WEEKDAYS_SHORT, addDays, addMonths, buildMonthGrid, daysInMonth, formatISODate, formatISOTime, isDateDisabled, isInRange, isSameDay, isToday, parseISODate, parseISOTime, startOfMonth, sundayIndex, tagVariants, today };
|
|
147
|
+
//# sourceMappingURL=chunk-EKGOQL75.js.map
|
|
148
|
+
//# sourceMappingURL=chunk-EKGOQL75.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/display/kbd/Kbd.tsx","../src/display/tag/Tag.variants.ts","../src/display/tag/Tag.tsx","../src/forms/DateExtensions.ts"],"names":["forwardRef","jsx"],"mappings":"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","file":"chunk-EKGOQL75.js","sourcesContent":["import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport type KbdProps = ComponentPropsWithoutRef<'kbd'>;\n\n/**\n * Keyboard key affordance — `<kbd>` styled with subtle border and inset\n * shadow. Single key per `<Kbd>`; chain via `<Kbd>⌘</Kbd> + <Kbd>K</Kbd>`.\n */\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(({ className, ...props }, ref) => (\n <kbd\n ref={ref}\n className={cn(\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-sm border border-border',\n 'bg-muted px-1.5 font-mono text-xs text-muted-foreground shadow-[inset_0_-1px_0_0_rgb(0_0_0/0.05)]',\n className,\n )}\n {...props}\n />\n));\nKbd.displayName = 'Kbd';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const tagVariants = tv({\n base: 'inline-flex items-center gap-1 rounded-md border border-border bg-card px-2 py-0.5 text-xs font-medium text-card-foreground',\n variants: {\n variant: {\n neutral: '',\n brand: 'border-transparent bg-primary-soft text-primary-soft-foreground',\n success: 'border-transparent bg-success-soft text-success-soft-foreground',\n warning: 'border-transparent bg-warning-soft text-warning-soft-foreground',\n danger: 'border-transparent bg-destructive-soft text-destructive-soft-foreground',\n info: 'border-transparent bg-info-soft text-info-soft-foreground',\n },\n },\n defaultVariants: {\n variant: 'neutral',\n },\n});\n\nexport type TagVariants = VariantProps<typeof tagVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { X } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { tagVariants, type TagVariants } from './Tag.variants';\n\nexport interface TagProps\n extends Omit<ComponentPropsWithoutRef<'span'>, 'children'>,\n TagVariants {\n children?: ReactNode;\n /** Show a close (×) button. Pass a handler to receive the click. */\n onClose?: () => void;\n /** Accessible label for the close button. Default `\"Remove\"`. */\n closeLabel?: string;\n}\n\n/**\n * Pill with an optional close button. The close button is a raw `<button>`\n * to keep the strict atom rule (Tag is L3, so importing Button would make\n * this an atom-on-atom composition).\n */\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(\n ({ children, onClose, closeLabel = 'Remove', variant, className, ...props }, ref) => (\n <span ref={ref} className={cn(tagVariants({ variant }), className)} {...props}>\n {children}\n {onClose && (\n <button\n type=\"button\"\n aria-label={closeLabel}\n onClick={onClose}\n className=\"-mr-1 inline-flex h-4 w-4 items-center justify-center rounded-sm text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <Icon icon={X} size={12} />\n </button>\n )}\n </span>\n ),\n);\nTag.displayName = 'Tag';\n","// Shared date helpers for Calendar / DatePicker / DateField / RangeCalendar.\n// Co-located in `forms/` so imports stay within-domain.\n//\n// Temporal-based — the ecosystem standardizes on the Temporal API (dates =\n// `Temporal.*`). `Temporal.PlainDate` carries calendar math (no timezone), so\n// these helpers are inherently local/wall-clock, which is what calendar UIs want.\n// `Temporal.PlainTime` carries hour/minute for the time components.\n\nimport { Temporal } from '@js-temporal/polyfill';\n\nexport const WEEKDAYS_SHORT = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\nexport const MONTHS_LONG = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\n/** Sunday-anchored column index (0 = Sun … 6 = Sat) for a PlainDate. */\nexport function sundayIndex(d: Temporal.PlainDate): number {\n // Temporal `dayOfWeek` is 1 (Mon) … 7 (Sun); map Sunday to 0 for our Su-first grid.\n return d.dayOfWeek % 7;\n}\n\n/** Today as a PlainDate in the local time zone. */\nexport function today(): Temporal.PlainDate {\n return Temporal.Now.plainDateISO();\n}\n\nexport function isSameDay(\n a: Temporal.PlainDate | null | undefined,\n b: Temporal.PlainDate | null | undefined,\n): boolean {\n if (!a || !b) return false;\n return a.equals(b);\n}\n\nexport function isToday(d: Temporal.PlainDate): boolean {\n return d.equals(today());\n}\n\n/** Add `n` months; Temporal clamps to the target month's last day (Jan 31 +1 → Feb 28). */\nexport function addMonths(d: Temporal.PlainDate, n: number): Temporal.PlainDate {\n return d.add({ months: n });\n}\n\nexport function addDays(d: Temporal.PlainDate, n: number): Temporal.PlainDate {\n return d.add({ days: n });\n}\n\n/** First day of `d`'s month. */\nexport function startOfMonth(d: Temporal.PlainDate): Temporal.PlainDate {\n return d.with({ day: 1 });\n}\n\n/** Number of days in the given year/month (1-indexed month). */\nexport function daysInMonth(year: number, month: number): number {\n return Temporal.PlainDate.from({ year, month, day: 1 }).daysInMonth;\n}\n\n/**\n * Build the 6-week (42-cell) grid that the calendar UI renders.\n * `year`/`month` are 1-indexed (Temporal convention). Cells outside the target\n * month carry `outOfMonth: true`.\n */\nexport function buildMonthGrid(\n year: number,\n month: number,\n): { date: Temporal.PlainDate; outOfMonth: boolean }[] {\n const first = Temporal.PlainDate.from({ year, month, day: 1 });\n const start = first.subtract({ days: sundayIndex(first) });\n const cells: { date: Temporal.PlainDate; outOfMonth: boolean }[] = [];\n for (let i = 0; i < 42; i++) {\n const date = start.add({ days: i });\n cells.push({ date, outOfMonth: date.month !== month });\n }\n return cells;\n}\n\n/** Format PlainDate → \"YYYY-MM-DD\" for a native `<input type=\"date\">` value. */\nexport function formatISODate(d: Temporal.PlainDate | null | undefined): string {\n if (!d) return '';\n return d.toString();\n}\n\n/** Parse \"YYYY-MM-DD\" → PlainDate. Returns null for invalid input. */\nexport function parseISODate(s: string | null | undefined): Temporal.PlainDate | null {\n if (!s) return null;\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(s)) return null;\n try {\n return Temporal.PlainDate.from(s, { overflow: 'reject' });\n } catch {\n return null;\n }\n}\n\n/** Format PlainTime → \"HH:MM\" for a native `<input type=\"time\">` value. */\nexport function formatISOTime(t: Temporal.PlainTime | null | undefined): string {\n if (!t) return '';\n return t.toString({ smallestUnit: 'minute' });\n}\n\n/** Parse \"HH:MM\" → PlainTime. Returns null for invalid input. */\nexport function parseISOTime(s: string | null | undefined): Temporal.PlainTime | null {\n if (!s) return null;\n if (!/^\\d{2}:\\d{2}$/.test(s)) return null;\n try {\n return Temporal.PlainTime.from(s, { overflow: 'reject' });\n } catch {\n return null;\n }\n}\n\nexport function clampDate(\n d: Temporal.PlainDate,\n min?: Temporal.PlainDate | null,\n max?: Temporal.PlainDate | null,\n): Temporal.PlainDate {\n if (min && Temporal.PlainDate.compare(d, min) < 0) return min;\n if (max && Temporal.PlainDate.compare(d, max) > 0) return max;\n return d;\n}\n\nexport function isDateDisabled(\n d: Temporal.PlainDate,\n options: {\n min?: Temporal.PlainDate | null;\n max?: Temporal.PlainDate | null;\n isDisabled?: (d: Temporal.PlainDate) => boolean;\n },\n): boolean {\n const { min, max, isDisabled } = options;\n if (min && Temporal.PlainDate.compare(d, min) < 0) return true;\n if (max && Temporal.PlainDate.compare(d, max) > 0) return true;\n if (isDisabled?.(d)) return true;\n return false;\n}\n\nexport function isInRange(\n d: Temporal.PlainDate,\n start: Temporal.PlainDate | null | undefined,\n end: Temporal.PlainDate | null | undefined,\n): boolean {\n if (!start || !end) return false;\n const lo = Temporal.PlainDate.compare(start, end) <= 0 ? start : end;\n const hi = Temporal.PlainDate.compare(start, end) <= 0 ? end : start;\n return Temporal.PlainDate.compare(d, lo) >= 0 && Temporal.PlainDate.compare(d, hi) <= 0;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { listboxItemVariants, listboxVariants, listboxGroupLabelVariants, listboxSeparatorVariants, listboxEmptyVariants } from './chunk-UMRRFZ4R.js';
|
|
2
2
|
import { PopoverTrigger, Popover, PopoverContent } from './chunk-XFUD3RZK.js';
|
|
3
|
-
import { startOfMonth, isSameDay, isToday, isDateDisabled, parseISODate, formatISODate, parseISOTime, Tag, addMonths, Kbd, addDays, buildMonthGrid, MONTHS_LONG, WEEKDAYS_SHORT,
|
|
3
|
+
import { startOfMonth, today, isSameDay, isToday, isDateDisabled, parseISODate, formatISODate, parseISOTime, formatISOTime, Tag, addMonths, Kbd, addDays, sundayIndex, buildMonthGrid, MONTHS_LONG, WEEKDAYS_SHORT, isInRange, daysInMonth } from './chunk-EKGOQL75.js';
|
|
4
4
|
import { useControlled, useTypeahead } from './chunk-RNHY33US.js';
|
|
5
5
|
import { Icon } from './chunk-D7ZFCHX5.js';
|
|
6
6
|
import { tv, CssExtensions, ColorExtensions, dataAttr, surfaceVariants, Equality } from './chunk-XSW3NZDD.js';
|
|
@@ -11,6 +11,7 @@ import * as React from 'react';
|
|
|
11
11
|
import { forwardRef, useRef, useImperativeHandle, useState, useEffect, Children, isValidElement, cloneElement, useId as useId$1, createContext, useMemo, useCallback, Fragment as Fragment$1, useContext } from 'react';
|
|
12
12
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
13
13
|
import { Minus, Plus, EyeOff, Eye, Search, X, Check, Upload, Loader2, ChevronDown, Calendar as Calendar$1, Clock, UploadCloud, ChevronRight, Copy, Zap, Wallet, Video, User, Trash, Tag as Tag$1, Sun, Star, ShoppingCart, Share2, Settings, Send, Play, Pin, Phone, Pencil, Paperclip, Music, Moon, Mic, MessageCircle, Map as Map$1, Mail, Lock, Link2, Lightbulb, Layers, Info, Inbox, Image, Home, Heart, Globe, Folder, File, ExternalLink, Edit, Download, Compass, Coffee, Code, Cloud, Camera, Bookmark, Bell, ChevronLeft, Heading1, Heading2, Bold, Italic, List, Quote } from 'lucide-react';
|
|
14
|
+
import { Temporal } from '@js-temporal/polyfill';
|
|
14
15
|
import { Marked } from 'marked';
|
|
15
16
|
|
|
16
17
|
var SIZE = {
|
|
@@ -2683,7 +2684,7 @@ function MonthGrid({
|
|
|
2683
2684
|
useEffect(() => {
|
|
2684
2685
|
if (!interactedRef.current) return;
|
|
2685
2686
|
const cell = gridRef.current?.querySelector(
|
|
2686
|
-
`[data-date="${focusedDate.
|
|
2687
|
+
`[data-date="${focusedDate.toString()}"]`
|
|
2687
2688
|
);
|
|
2688
2689
|
cell?.focus();
|
|
2689
2690
|
}, [focusedDate]);
|
|
@@ -2714,7 +2715,7 @@ function MonthGrid({
|
|
|
2714
2715
|
if (isDayDisabled(target)) return;
|
|
2715
2716
|
}
|
|
2716
2717
|
interactedRef.current = true;
|
|
2717
|
-
if (target.
|
|
2718
|
+
if (target.month !== viewMonth.month || target.year !== viewMonth.year) {
|
|
2718
2719
|
onViewMonthChange(startOfMonth(target));
|
|
2719
2720
|
}
|
|
2720
2721
|
onFocusedDateChange(target);
|
|
@@ -2742,11 +2743,11 @@ function MonthGrid({
|
|
|
2742
2743
|
break;
|
|
2743
2744
|
case "Home":
|
|
2744
2745
|
e.preventDefault();
|
|
2745
|
-
moveFocus(addDays(date, -date
|
|
2746
|
+
moveFocus(addDays(date, -sundayIndex(date)), 1);
|
|
2746
2747
|
break;
|
|
2747
2748
|
case "End":
|
|
2748
2749
|
e.preventDefault();
|
|
2749
|
-
moveFocus(addDays(date, 6 - date
|
|
2750
|
+
moveFocus(addDays(date, 6 - sundayIndex(date)), -1);
|
|
2750
2751
|
break;
|
|
2751
2752
|
case "PageDown":
|
|
2752
2753
|
e.preventDefault();
|
|
@@ -2766,7 +2767,7 @@ function MonthGrid({
|
|
|
2766
2767
|
[moveFocus, onDayActivate, isDayDisabled]
|
|
2767
2768
|
);
|
|
2768
2769
|
const dayDisabled = (date) => isDayDisabled?.(date) ?? false;
|
|
2769
|
-
const cells = buildMonthGrid(viewMonth.
|
|
2770
|
+
const cells = buildMonthGrid(viewMonth.year, viewMonth.month);
|
|
2770
2771
|
const weeks = Array.from({ length: 6 }, (_, w) => cells.slice(w * 7, w * 7 + 7));
|
|
2771
2772
|
let tabStopDate = focusedDate;
|
|
2772
2773
|
if (dayDisabled(focusedDate)) {
|
|
@@ -2794,9 +2795,9 @@ function MonthGrid({
|
|
|
2794
2795
|
}
|
|
2795
2796
|
),
|
|
2796
2797
|
/* @__PURE__ */ jsxs("div", { className: "text-sm font-medium", "aria-live": "polite", children: [
|
|
2797
|
-
MONTHS_LONG[viewMonth.
|
|
2798
|
+
MONTHS_LONG[viewMonth.month - 1],
|
|
2798
2799
|
" ",
|
|
2799
|
-
viewMonth.
|
|
2800
|
+
viewMonth.year
|
|
2800
2801
|
] }),
|
|
2801
2802
|
/* @__PURE__ */ jsx(
|
|
2802
2803
|
"button",
|
|
@@ -2827,7 +2828,7 @@ function MonthGrid({
|
|
|
2827
2828
|
{
|
|
2828
2829
|
type: "button",
|
|
2829
2830
|
role: "gridcell",
|
|
2830
|
-
"data-date": date.
|
|
2831
|
+
"data-date": date.toString(),
|
|
2831
2832
|
"aria-disabled": disabled || void 0,
|
|
2832
2833
|
"data-today": isToday(date) ? "" : void 0,
|
|
2833
2834
|
"data-out-of-month": outOfMonth ? "" : void 0,
|
|
@@ -2850,9 +2851,9 @@ function MonthGrid({
|
|
|
2850
2851
|
disabled && "pointer-events-none opacity-40",
|
|
2851
2852
|
cellClassName
|
|
2852
2853
|
),
|
|
2853
|
-
children: date.
|
|
2854
|
+
children: date.day
|
|
2854
2855
|
},
|
|
2855
|
-
date.
|
|
2856
|
+
date.toString()
|
|
2856
2857
|
);
|
|
2857
2858
|
}) }, weekIndex)) })
|
|
2858
2859
|
]
|
|
@@ -2877,9 +2878,9 @@ var Calendar = forwardRef(function Calendar2({
|
|
|
2877
2878
|
onChange: onValueChange
|
|
2878
2879
|
});
|
|
2879
2880
|
const [viewMonth, setViewMonth] = useState(
|
|
2880
|
-
() => startOfMonth(defaultMonth ?? selected ??
|
|
2881
|
+
() => startOfMonth(defaultMonth ?? selected ?? today())
|
|
2881
2882
|
);
|
|
2882
|
-
const [focusedDate, setFocusedDate] = useState(() => selected ??
|
|
2883
|
+
const [focusedDate, setFocusedDate] = useState(() => selected ?? today());
|
|
2883
2884
|
return /* @__PURE__ */ jsx("div", { ref, className: cn(className), ...rest, children: /* @__PURE__ */ jsx(
|
|
2884
2885
|
MonthGrid,
|
|
2885
2886
|
{
|
|
@@ -2931,12 +2932,6 @@ var DateField = forwardRef(function DateField2({ value, defaultValue, onValueCha
|
|
|
2931
2932
|
}
|
|
2932
2933
|
);
|
|
2933
2934
|
});
|
|
2934
|
-
function timeToString(t) {
|
|
2935
|
-
if (!t) return "";
|
|
2936
|
-
const date = /* @__PURE__ */ new Date();
|
|
2937
|
-
date.setHours(t.hours, t.minutes, 0, 0);
|
|
2938
|
-
return formatISOTime(date);
|
|
2939
|
-
}
|
|
2940
2935
|
var TimeField = forwardRef(function TimeField2({ value, defaultValue, onValueChange, size, state, className, id, disabled, required, ...rest }, ref) {
|
|
2941
2936
|
const ctx = useFormControl();
|
|
2942
2937
|
const [current, setCurrent] = useControlled({
|
|
@@ -2954,7 +2949,7 @@ var TimeField = forwardRef(function TimeField2({ value, defaultValue, onValueCha
|
|
|
2954
2949
|
required: required ?? ctx?.isRequired,
|
|
2955
2950
|
"aria-invalid": ctx?.isInvalid || void 0,
|
|
2956
2951
|
"aria-describedby": ctx ? `${ctx.helperId} ${ctx.errorId}` : void 0,
|
|
2957
|
-
value:
|
|
2952
|
+
value: formatISOTime(current),
|
|
2958
2953
|
onChange: (e) => setCurrent(parseISOTime(e.target.value)),
|
|
2959
2954
|
className: cn(inputBaseVariants({ size, state: state ?? (ctx?.isInvalid ? "invalid" : "default") }), className),
|
|
2960
2955
|
...rest
|
|
@@ -2980,28 +2975,29 @@ var RangeCalendar = forwardRef(
|
|
|
2980
2975
|
onChange: onValueChange
|
|
2981
2976
|
});
|
|
2982
2977
|
const [viewMonth, setViewMonth] = useState(
|
|
2983
|
-
() => startOfMonth(defaultMonth ?? range?.start ??
|
|
2978
|
+
() => startOfMonth(defaultMonth ?? range?.start ?? today())
|
|
2979
|
+
);
|
|
2980
|
+
const [focusedDate, setFocusedDate] = useState(
|
|
2981
|
+
() => range?.start ?? today()
|
|
2984
2982
|
);
|
|
2985
|
-
const [focusedDate, setFocusedDate] = useState(() => range?.start ?? /* @__PURE__ */ new Date());
|
|
2986
2983
|
const [hoveredDate, setHoveredDate] = useState(null);
|
|
2987
2984
|
const [pendingStart, setPendingStart] = useState(null);
|
|
2988
2985
|
const handleActivate = (date) => {
|
|
2989
2986
|
if (!pendingStart) {
|
|
2990
2987
|
setPendingStart(date);
|
|
2991
|
-
setRange(
|
|
2988
|
+
setRange(null);
|
|
2992
2989
|
return;
|
|
2993
2990
|
}
|
|
2994
|
-
const
|
|
2995
|
-
const
|
|
2996
|
-
const
|
|
2997
|
-
const finalEnd = startTime <= endTime ? date : pendingStart;
|
|
2991
|
+
const forward = Temporal.PlainDate.compare(pendingStart, date) <= 0;
|
|
2992
|
+
const finalStart = forward ? pendingStart : date;
|
|
2993
|
+
const finalEnd = forward ? date : pendingStart;
|
|
2998
2994
|
setRange({ start: finalStart, end: finalEnd });
|
|
2999
2995
|
setPendingStart(null);
|
|
3000
2996
|
};
|
|
3001
|
-
const previewEnd = pendingStart ? hoveredDate : range?.end;
|
|
2997
|
+
const previewEnd = pendingStart ? hoveredDate : range?.end ?? null;
|
|
3002
2998
|
const isStart = (d) => isSameDay(d, range?.start ?? null) || isSameDay(d, pendingStart);
|
|
3003
2999
|
const isEnd = (d) => isSameDay(d, range?.end ?? null);
|
|
3004
|
-
const inRange = (d) => isInRange(d, pendingStart ?? range?.start, previewEnd
|
|
3000
|
+
const inRange = (d) => isInRange(d, pendingStart ?? range?.start, previewEnd);
|
|
3005
3001
|
return /* @__PURE__ */ jsx("div", { ref, className: cn(className), ...rest, children: /* @__PURE__ */ jsx(
|
|
3006
3002
|
MonthGrid,
|
|
3007
3003
|
{
|
|
@@ -3037,7 +3033,7 @@ var RangeCalendar = forwardRef(
|
|
|
3037
3033
|
) });
|
|
3038
3034
|
}
|
|
3039
3035
|
);
|
|
3040
|
-
var defaultFormat = (d) => d.
|
|
3036
|
+
var defaultFormat = (d) => d.toLocaleString(void 0, { year: "numeric", month: "short", day: "numeric" });
|
|
3041
3037
|
var DatePicker = forwardRef(function DatePicker2({
|
|
3042
3038
|
value,
|
|
3043
3039
|
defaultValue,
|
|
@@ -3088,7 +3084,7 @@ var DatePicker = forwardRef(function DatePicker2({
|
|
|
3088
3084
|
setDate(d);
|
|
3089
3085
|
setOpen(false);
|
|
3090
3086
|
},
|
|
3091
|
-
defaultMonth: date ??
|
|
3087
|
+
defaultMonth: date ?? today(),
|
|
3092
3088
|
min,
|
|
3093
3089
|
max,
|
|
3094
3090
|
isDisabled: dayDisabled
|
|
@@ -3097,7 +3093,7 @@ var DatePicker = forwardRef(function DatePicker2({
|
|
|
3097
3093
|
name && /* @__PURE__ */ jsx("input", { type: "hidden", name, value: formatISODate(date) })
|
|
3098
3094
|
] });
|
|
3099
3095
|
});
|
|
3100
|
-
var defaultFormat2 = (t) =>
|
|
3096
|
+
var defaultFormat2 = (t) => t.toString({ smallestUnit: "minute" });
|
|
3101
3097
|
var HOURS = Array.from({ length: 24 }, (_, i) => i);
|
|
3102
3098
|
var TimePicker = forwardRef(function TimePicker2({
|
|
3103
3099
|
value,
|
|
@@ -3139,10 +3135,10 @@ var TimePicker = forwardRef(function TimePicker2({
|
|
|
3139
3135
|
}, [open]);
|
|
3140
3136
|
const triggerState = state ?? (isInvalid ? "invalid" : "default");
|
|
3141
3137
|
const update = (next) => {
|
|
3142
|
-
const merged = {
|
|
3143
|
-
|
|
3144
|
-
|
|
3145
|
-
};
|
|
3138
|
+
const merged = Temporal.PlainTime.from({
|
|
3139
|
+
hour: next.hour ?? time?.hour ?? 0,
|
|
3140
|
+
minute: next.minute ?? time?.minute ?? 0
|
|
3141
|
+
});
|
|
3146
3142
|
setTime(merged);
|
|
3147
3143
|
};
|
|
3148
3144
|
return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, placement: "bottom-start", offset: 6, children: [
|
|
@@ -3169,7 +3165,7 @@ var TimePicker = forwardRef(function TimePicker2({
|
|
|
3169
3165
|
"aria-label": "Hours",
|
|
3170
3166
|
className: "flex max-h-56 flex-col gap-0.5 overflow-y-auto pr-1",
|
|
3171
3167
|
children: HOURS.map((h) => {
|
|
3172
|
-
const selected = time?.
|
|
3168
|
+
const selected = time?.hour === h;
|
|
3173
3169
|
return /* @__PURE__ */ jsx(
|
|
3174
3170
|
"button",
|
|
3175
3171
|
{
|
|
@@ -3177,7 +3173,7 @@ var TimePicker = forwardRef(function TimePicker2({
|
|
|
3177
3173
|
role: "option",
|
|
3178
3174
|
"aria-selected": selected,
|
|
3179
3175
|
"data-selected": selected ? "" : void 0,
|
|
3180
|
-
onClick: () => update({
|
|
3176
|
+
onClick: () => update({ hour: h }),
|
|
3181
3177
|
className: cn(
|
|
3182
3178
|
"grid h-8 w-12 place-items-center rounded-sm text-sm transition-colors hover:bg-muted",
|
|
3183
3179
|
selected && "bg-primary text-primary-foreground hover:bg-primary"
|
|
@@ -3198,7 +3194,7 @@ var TimePicker = forwardRef(function TimePicker2({
|
|
|
3198
3194
|
"aria-label": "Minutes",
|
|
3199
3195
|
className: "flex max-h-56 flex-col gap-0.5 overflow-y-auto pl-1",
|
|
3200
3196
|
children: minutes.map((m) => {
|
|
3201
|
-
const selected = time?.
|
|
3197
|
+
const selected = time?.minute === m;
|
|
3202
3198
|
return /* @__PURE__ */ jsx(
|
|
3203
3199
|
"button",
|
|
3204
3200
|
{
|
|
@@ -3206,7 +3202,7 @@ var TimePicker = forwardRef(function TimePicker2({
|
|
|
3206
3202
|
role: "option",
|
|
3207
3203
|
"aria-selected": selected,
|
|
3208
3204
|
"data-selected": selected ? "" : void 0,
|
|
3209
|
-
onClick: () => update({
|
|
3205
|
+
onClick: () => update({ minute: m }),
|
|
3210
3206
|
className: cn(
|
|
3211
3207
|
"grid h-8 w-12 place-items-center rounded-sm text-sm transition-colors hover:bg-muted",
|
|
3212
3208
|
selected && "bg-primary text-primary-foreground hover:bg-primary"
|
|
@@ -3219,17 +3215,10 @@ var TimePicker = forwardRef(function TimePicker2({
|
|
|
3219
3215
|
}
|
|
3220
3216
|
)
|
|
3221
3217
|
] }) }),
|
|
3222
|
-
name && time && /* @__PURE__ */ jsx(
|
|
3223
|
-
"input",
|
|
3224
|
-
{
|
|
3225
|
-
type: "hidden",
|
|
3226
|
-
name,
|
|
3227
|
-
value: `${String(time.hours).padStart(2, "0")}:${String(time.minutes).padStart(2, "0")}`
|
|
3228
|
-
}
|
|
3229
|
-
)
|
|
3218
|
+
name && time && /* @__PURE__ */ jsx("input", { type: "hidden", name, value: time.toString({ smallestUnit: "minute" }) })
|
|
3230
3219
|
] });
|
|
3231
3220
|
});
|
|
3232
|
-
var defaultFormat3 = (d) => d.
|
|
3221
|
+
var defaultFormat3 = (d) => d.toLocaleString(void 0, { year: "numeric", month: "short", day: "numeric" });
|
|
3233
3222
|
var DateRangePicker = forwardRef(
|
|
3234
3223
|
function DateRangePicker2({
|
|
3235
3224
|
value,
|
|
@@ -3287,7 +3276,7 @@ var DateRangePicker = forwardRef(
|
|
|
3287
3276
|
{
|
|
3288
3277
|
value: range,
|
|
3289
3278
|
onValueChange: setRange,
|
|
3290
|
-
defaultMonth: range?.start ??
|
|
3279
|
+
defaultMonth: range?.start ?? today(),
|
|
3291
3280
|
min,
|
|
3292
3281
|
max,
|
|
3293
3282
|
isDisabled: dayDisabled
|
|
@@ -4052,6 +4041,8 @@ function ColorSwatchPicker({
|
|
|
4052
4041
|
);
|
|
4053
4042
|
}
|
|
4054
4043
|
var FALLBACK_HSV = { h: 217, s: 0.91, v: 0.96, a: 1 };
|
|
4044
|
+
var NOOP = () => {
|
|
4045
|
+
};
|
|
4055
4046
|
var ColorPicker = forwardRef(function ColorPicker2({
|
|
4056
4047
|
value,
|
|
4057
4048
|
defaultValue = "#3b82f6",
|
|
@@ -4059,6 +4050,7 @@ var ColorPicker = forwardRef(function ColorPicker2({
|
|
|
4059
4050
|
hasAlpha = false,
|
|
4060
4051
|
presets,
|
|
4061
4052
|
triggerSize = "md",
|
|
4053
|
+
triggerVariant = "full",
|
|
4062
4054
|
isDisabled = false,
|
|
4063
4055
|
name,
|
|
4064
4056
|
className,
|
|
@@ -4085,7 +4077,22 @@ var ColorPicker = forwardRef(function ColorPicker2({
|
|
|
4085
4077
|
setHex(hsvToHex(next, { withAlpha: hasAlpha }));
|
|
4086
4078
|
};
|
|
4087
4079
|
return /* @__PURE__ */ jsxs(Popover, { children: [
|
|
4088
|
-
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: trigger ??
|
|
4080
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: trigger ?? (triggerVariant === "swatch" ? (
|
|
4081
|
+
// Bare interactive swatch — ColorSwatch is a real <button> here (given onClick),
|
|
4082
|
+
// so it becomes the popover trigger via Slot with no wrapper chrome.
|
|
4083
|
+
/* @__PURE__ */ jsx(
|
|
4084
|
+
ColorSwatch,
|
|
4085
|
+
{
|
|
4086
|
+
ref,
|
|
4087
|
+
color: hex ?? "#00000000",
|
|
4088
|
+
size: triggerSize,
|
|
4089
|
+
onClick: NOOP,
|
|
4090
|
+
"aria-label": ariaLabel,
|
|
4091
|
+
isDisabled,
|
|
4092
|
+
className
|
|
4093
|
+
}
|
|
4094
|
+
)
|
|
4095
|
+
) : /* @__PURE__ */ jsxs(
|
|
4089
4096
|
"button",
|
|
4090
4097
|
{
|
|
4091
4098
|
ref,
|
|
@@ -4097,11 +4104,11 @@ var ColorPicker = forwardRef(function ColorPicker2({
|
|
|
4097
4104
|
className
|
|
4098
4105
|
),
|
|
4099
4106
|
children: [
|
|
4100
|
-
/* @__PURE__ */ jsx(ColorSwatch, { color: hex ?? "#00000000", size: triggerSize }),
|
|
4107
|
+
triggerVariant === "full" && /* @__PURE__ */ jsx(ColorSwatch, { color: hex ?? "#00000000", size: triggerSize }),
|
|
4101
4108
|
/* @__PURE__ */ jsx("span", { className: "font-mono uppercase", children: hex ?? "\u2014" })
|
|
4102
4109
|
]
|
|
4103
4110
|
}
|
|
4104
|
-
) }),
|
|
4111
|
+
)) }),
|
|
4105
4112
|
/* @__PURE__ */ jsxs(PopoverContent, { className: "flex w-64 flex-col gap-3", children: [
|
|
4106
4113
|
/* @__PURE__ */ jsx(
|
|
4107
4114
|
ColorArea,
|
|
@@ -5762,13 +5769,13 @@ function nextOccurrence(rule, prev) {
|
|
|
5762
5769
|
if (!rule.byDay || rule.byDay.length === 0) return addDays(prev, 7 * rule.interval);
|
|
5763
5770
|
const allowed = new Set(rule.byDay);
|
|
5764
5771
|
let cursor = addDays(prev, 1);
|
|
5765
|
-
while (cursor
|
|
5766
|
-
if (allowed.has(JS_TO_RRULE[cursor
|
|
5772
|
+
while (sundayIndex(cursor) !== 0) {
|
|
5773
|
+
if (allowed.has(JS_TO_RRULE[sundayIndex(cursor)])) return cursor;
|
|
5767
5774
|
cursor = addDays(cursor, 1);
|
|
5768
5775
|
}
|
|
5769
5776
|
cursor = addDays(cursor, 7 * (rule.interval - 1));
|
|
5770
5777
|
for (let i = 0; i < 7; i++) {
|
|
5771
|
-
if (allowed.has(JS_TO_RRULE[cursor
|
|
5778
|
+
if (allowed.has(JS_TO_RRULE[sundayIndex(cursor)])) return cursor;
|
|
5772
5779
|
cursor = addDays(cursor, 1);
|
|
5773
5780
|
}
|
|
5774
5781
|
return null;
|
|
@@ -5776,25 +5783,23 @@ function nextOccurrence(rule, prev) {
|
|
|
5776
5783
|
case "MONTHLY": {
|
|
5777
5784
|
const next = addMonths(prev, rule.interval);
|
|
5778
5785
|
if (rule.byMonthDay) {
|
|
5779
|
-
|
|
5786
|
+
const day = Math.min(rule.byMonthDay, daysInMonth(next.year, next.month));
|
|
5787
|
+
return next.with({ day });
|
|
5780
5788
|
}
|
|
5781
5789
|
return next;
|
|
5782
5790
|
}
|
|
5783
|
-
case "YEARLY":
|
|
5784
|
-
|
|
5785
|
-
c.setFullYear(c.getFullYear() + rule.interval);
|
|
5786
|
-
return c;
|
|
5787
|
-
}
|
|
5791
|
+
case "YEARLY":
|
|
5792
|
+
return prev.add({ years: rule.interval });
|
|
5788
5793
|
}
|
|
5789
5794
|
}
|
|
5790
5795
|
function buildPreview(rule, from, count) {
|
|
5791
5796
|
const out = [];
|
|
5792
5797
|
let cursor = from;
|
|
5793
|
-
out.push(
|
|
5798
|
+
out.push(cursor);
|
|
5794
5799
|
for (let i = 0; i < count - 1; i++) {
|
|
5795
5800
|
const next = nextOccurrence(rule, cursor);
|
|
5796
5801
|
if (!next) break;
|
|
5797
|
-
if (rule.until && next
|
|
5802
|
+
if (rule.until && Temporal.PlainDate.compare(next, rule.until) > 0) break;
|
|
5798
5803
|
if (rule.count && out.length >= rule.count) break;
|
|
5799
5804
|
out.push(next);
|
|
5800
5805
|
cursor = next;
|
|
@@ -5807,7 +5812,7 @@ var RecurrenceEditor = forwardRef(
|
|
|
5807
5812
|
value,
|
|
5808
5813
|
defaultValue,
|
|
5809
5814
|
onValueChange,
|
|
5810
|
-
from =
|
|
5815
|
+
from = today(),
|
|
5811
5816
|
previewCount = 5,
|
|
5812
5817
|
isDisabled,
|
|
5813
5818
|
isReadOnly,
|
|
@@ -5908,7 +5913,7 @@ var RecurrenceEditor = forwardRef(
|
|
|
5908
5913
|
type: "number",
|
|
5909
5914
|
min: 1,
|
|
5910
5915
|
max: 31,
|
|
5911
|
-
value: rule.byMonthDay ?? from.
|
|
5916
|
+
value: rule.byMonthDay ?? from.day,
|
|
5912
5917
|
disabled: isDisabled,
|
|
5913
5918
|
readOnly: isReadOnly,
|
|
5914
5919
|
onChange: (e) => update({ byMonthDay: Math.min(31, Math.max(1, Number(e.target.value) || 1)) }),
|
|
@@ -7790,5 +7795,5 @@ var ChatComposer = forwardRef(
|
|
|
7790
7795
|
ChatComposer.displayName = "ChatComposer";
|
|
7791
7796
|
|
|
7792
7797
|
export { ADDRESS_COUNTRIES, AddressForm, BUILT_IN_EMOJI, BUILT_IN_FONTS, Calendar, CharacterCount, ChatComposer, Checkbox, CheckboxField, CheckboxGroup, ChoiceCard, CodeEditor, ColorArea, ColorField, ColorPicker, ColorSlider, ColorSwatch, ColorSwatchPicker, ColorWheel, Combobox, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxSeparator, CronInput, CurrencyInput, DateField, DatePicker, DateRangePicker, Editable, EditableCancel, EditableInput, EditablePreview, EditableSubmit, EmailInput, EmojiPicker, Field, Fieldset, FilePicker, FileUpload, FontPicker, FormErrorMessage, FormHelperText, GradientPicker, IconPicker, InputAddon, InputGroup, JSONEditor, KeyboardShortcutPicker, Knob, Label, LabeledInput, Legend, Listbox, ListboxEmpty, ListboxGroup, ListboxItem, ListboxSeparator, MarkdownEditor, MaskedInput, MultiSelect, MultiSelectContent, MultiSelectItem, MultiSelectTags, MultiSelectTrigger, NumberInput, PHONE_COUNTRIES, PasswordInput, PasswordStrength, PercentInput, PhoneInput, PinInput, Radio, RadioField, RadioGroup, RangeCalendar, ReactionPicker, RecurrenceEditor, SearchInput, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Slider, Stepper2 as Stepper, StepperList, StepperPanel, StepperStep, Switch, SwitchField, TagsInput, TelInput, TextInput, TextareaInput, TimeField, TimePicker, UrlInput, Wizard2 as Wizard, WizardFooter, WizardStep, WizardSteps, colorSwatchVariants, gradientToCss, useWizard };
|
|
7793
|
-
//# sourceMappingURL=chunk-
|
|
7794
|
-
//# sourceMappingURL=chunk-
|
|
7798
|
+
//# sourceMappingURL=chunk-SREWD3XJ.js.map
|
|
7799
|
+
//# sourceMappingURL=chunk-SREWD3XJ.js.map
|