@roy-ui/ui 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/{Button-XBBWB5ZT.css → Button-OZLAH5NO.css} +60 -13
  2. package/dist/Table-qVdGZkB4.d.ts +42 -0
  3. package/dist/TimePicker-BhRta4MK.d.ts +39 -0
  4. package/dist/chunk-4SGMAZBG.js +161 -0
  5. package/dist/chunk-4SGMAZBG.js.map +1 -0
  6. package/dist/chunk-5CIBIH7R.js +98 -0
  7. package/dist/chunk-5CIBIH7R.js.map +1 -0
  8. package/dist/chunk-75IGGPXL.js +518 -0
  9. package/dist/chunk-75IGGPXL.js.map +1 -0
  10. package/dist/chunk-C5X3TE5U.js +87 -0
  11. package/dist/chunk-C5X3TE5U.js.map +1 -0
  12. package/dist/chunk-HUCK7AM7.js +840 -0
  13. package/dist/chunk-HUCK7AM7.js.map +1 -0
  14. package/dist/chunk-KSHKVSNK.js +82 -0
  15. package/dist/chunk-KSHKVSNK.js.map +1 -0
  16. package/dist/chunk-M6HB6BMA.js +101 -0
  17. package/dist/chunk-M6HB6BMA.js.map +1 -0
  18. package/dist/chunk-MDPMEW4K.js +58 -0
  19. package/dist/chunk-MDPMEW4K.js.map +1 -0
  20. package/dist/chunk-PGV55XSZ.js +107 -0
  21. package/dist/chunk-PGV55XSZ.js.map +1 -0
  22. package/dist/chunk-RLBVY3DG.js +64 -0
  23. package/dist/chunk-RLBVY3DG.js.map +1 -0
  24. package/dist/chunk-SFENGB5N.js +410 -0
  25. package/dist/chunk-SFENGB5N.js.map +1 -0
  26. package/dist/chunk-XERZVDIT.js +194 -0
  27. package/dist/chunk-XERZVDIT.js.map +1 -0
  28. package/dist/components/button/index.d.ts +37 -0
  29. package/dist/components/button/index.js +4 -0
  30. package/dist/components/button/index.js.map +1 -0
  31. package/dist/components/data-table/index.d.ts +145 -0
  32. package/dist/components/data-table/index.js +9 -0
  33. package/dist/components/data-table/index.js.map +1 -0
  34. package/dist/components/date-range-picker/index.d.ts +30 -0
  35. package/dist/components/date-range-picker/index.js +4 -0
  36. package/dist/components/date-range-picker/index.js.map +1 -0
  37. package/dist/components/gradient-button/index.d.ts +12 -0
  38. package/dist/components/gradient-button/index.js +4 -0
  39. package/dist/components/gradient-button/index.js.map +1 -0
  40. package/dist/components/made-by/index.d.ts +23 -0
  41. package/dist/components/made-by/index.js +4 -0
  42. package/dist/components/made-by/index.js.map +1 -0
  43. package/dist/components/pagination/index.d.ts +23 -0
  44. package/dist/components/pagination/index.js +4 -0
  45. package/dist/components/pagination/index.js.map +1 -0
  46. package/dist/components/popover/index.d.ts +18 -0
  47. package/dist/components/popover/index.js +4 -0
  48. package/dist/components/popover/index.js.map +1 -0
  49. package/dist/components/table/index.d.ts +28 -0
  50. package/dist/components/table/index.js +4 -0
  51. package/dist/components/table/index.js.map +1 -0
  52. package/dist/components/table-search/index.d.ts +19 -0
  53. package/dist/components/table-search/index.js +4 -0
  54. package/dist/components/table-search/index.js.map +1 -0
  55. package/dist/components/text-morph/index.d.ts +28 -0
  56. package/dist/components/text-morph/index.js +4 -0
  57. package/dist/components/text-morph/index.js.map +1 -0
  58. package/dist/components/time-picker/index.d.ts +14 -0
  59. package/dist/components/time-picker/index.js +4 -0
  60. package/dist/components/time-picker/index.js.map +1 -0
  61. package/dist/components/tree-nav/index.d.ts +30 -0
  62. package/dist/components/tree-nav/index.js +4 -0
  63. package/dist/components/tree-nav/index.js.map +1 -0
  64. package/dist/dateUtils-B_m_EICl.d.ts +14 -0
  65. package/dist/index.d.ts +17 -422
  66. package/dist/index.js +12 -2519
  67. package/dist/index.js.map +1 -1
  68. package/package.json +51 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/gradient-button/GradientButton.tsx"],"names":[],"mappings":";;;;;AAYA,IAAM,iBAAiB,sBACrB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,aAAA,EAAY,MAAA,EAClD,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAQ,WAAA,EAAY,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,MAAK,MAAA,EACnD,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAG,IAAA;AAAA,MACH,EAAA,EAAG,IAAA;AAAA,MACH,CAAA,EAAE,GAAA;AAAA,MACF,MAAA,EAAO,cAAA;AAAA,MACP,aAAA,EAAc,KAAA;AAAA,MACd,WAAA,EAAY;AAAA;AAAA,GACd;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,CAAA,EAAE,sBAAA;AAAA,MACF,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAc;AAAA;AAAA;AAChB,CAAA,EACF,CAAA,EACF,CAAA;AAGK,IAAM,cAAA,GAAiB,UAAA;AAAA,EAC5B,CACE;AAAA,IACE,OAAA,GAAU,KAAA;AAAA,IACV,YAAA;AAAA,IACA,SAAA,GAAY,IAAA;AAAA,IACZ,QAAA;AAAA,IACA,SAAA,GAAY,EAAA;AAAA,IACZ,QAAA;AAAA,IACA,IAAA,GAAO,QAAA;AAAA,IACP,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,cAAA;AAAA,MACA,YAAY,oBAAA,GAAuB,EAAA;AAAA,MACnC,UAAU,uBAAA,GAA0B,EAAA;AAAA,MACpC;AAAA,KACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA;AAAA,QACA,UAAU,QAAA,IAAY,OAAA;AAAA,QACtB,SAAA,EAAW,OAAA;AAAA,QACX,aAAW,OAAA,IAAW,MAAA;AAAA,QACrB,GAAG,IAAA;AAAA,QAEH,QAAA,EAAA,OAAA,GAAW,YAAA,oBAAgB,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA,GAAM;AAAA;AAAA,KACpD;AAAA,EAEJ;AACF;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA","file":"chunk-RLBVY3DG.js","sourcesContent":["'use client';\n\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport './GradientButton.css';\n\nexport interface GradientButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n loading?: boolean;\n loadingLabel?: ReactNode;\n fullWidth?: boolean;\n children: ReactNode;\n}\n\nconst DefaultSpinner = () => (\n <span className=\"gradient-btn__spinner\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.3\"\n strokeWidth=\"2.5\"\n />\n <path\n d=\"M21 12a9 9 0 0 0-9-9\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </span>\n);\n\nexport const GradientButton = forwardRef<HTMLButtonElement, GradientButtonProps>(\n (\n {\n loading = false,\n loadingLabel,\n fullWidth = true,\n disabled,\n className = '',\n children,\n type = 'button',\n ...rest\n },\n ref,\n ) => {\n const classes = [\n 'gradient-btn',\n fullWidth ? 'gradient-btn--full' : '',\n loading ? 'gradient-btn--loading' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled || loading}\n className={classes}\n aria-busy={loading || undefined}\n {...rest}\n >\n {loading ? (loadingLabel ?? <DefaultSpinner />) : children}\n </button>\n );\n },\n);\n\nGradientButton.displayName = 'GradientButton';\n"]}
@@ -0,0 +1,410 @@
1
+ "use client";
2
+ import { useState, useRef, useEffect, useMemo } from 'react';
3
+ import './DateRangePicker-BCP26AOC.css';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ // src/components/date-range-picker/DateRangePicker.tsx
7
+
8
+ // src/components/date-range-picker/dateUtils.ts
9
+ var MONTHS = [
10
+ "January",
11
+ "February",
12
+ "March",
13
+ "April",
14
+ "May",
15
+ "June",
16
+ "July",
17
+ "August",
18
+ "September",
19
+ "October",
20
+ "November",
21
+ "December"
22
+ ];
23
+ var SHORT_MONTHS = [
24
+ "Jan",
25
+ "Feb",
26
+ "Mar",
27
+ "Apr",
28
+ "May",
29
+ "Jun",
30
+ "Jul",
31
+ "Aug",
32
+ "Sep",
33
+ "Oct",
34
+ "Nov",
35
+ "Dec"
36
+ ];
37
+ var WEEKDAYS = ["S", "M", "T", "W", "T", "F", "S"];
38
+ function startOfDay(d) {
39
+ const n = new Date(d);
40
+ n.setHours(0, 0, 0, 0);
41
+ return n;
42
+ }
43
+ function isSameDay(a, b) {
44
+ if (!a || !b) return false;
45
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
46
+ }
47
+ function isSameMonth(a, b) {
48
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();
49
+ }
50
+ function addMonths(d, n) {
51
+ const x = new Date(d);
52
+ x.setDate(1);
53
+ x.setMonth(x.getMonth() + n);
54
+ return x;
55
+ }
56
+ function addDays(d, n) {
57
+ const x = new Date(d);
58
+ x.setDate(x.getDate() + n);
59
+ return x;
60
+ }
61
+ function isBefore(a, b) {
62
+ return a.getTime() < b.getTime();
63
+ }
64
+ function isAfter(a, b) {
65
+ return a.getTime() > b.getTime();
66
+ }
67
+ function isBetween(d, from, to) {
68
+ const t = d.getTime();
69
+ const a = Math.min(from.getTime(), to.getTime());
70
+ const b = Math.max(from.getTime(), to.getTime());
71
+ return t >= a && t <= b;
72
+ }
73
+ function clampToBounds(d, min, max) {
74
+ let r = d;
75
+ if (min && isBefore(r, min)) r = min;
76
+ if (max && isAfter(r, max)) r = max;
77
+ return r;
78
+ }
79
+ function getMonthGrid(year, month, weekStartsOn = 0) {
80
+ const first = new Date(year, month, 1);
81
+ const firstDow = first.getDay();
82
+ const offset = (firstDow - weekStartsOn + 7) % 7;
83
+ const gridStart = addDays(first, -offset);
84
+ const cells = [];
85
+ for (let i = 0; i < 42; i++) {
86
+ const date = addDays(gridStart, i);
87
+ cells.push({
88
+ date,
89
+ inMonth: date.getMonth() === month,
90
+ iso: date.toISOString().slice(0, 10)
91
+ });
92
+ }
93
+ return cells;
94
+ }
95
+ function getWeekdayLabels(weekStartsOn = 0) {
96
+ return Array.from({ length: 7 }, (_, i) => WEEKDAYS[(weekStartsOn + i) % 7] ?? "");
97
+ }
98
+ function formatMonthYear(d) {
99
+ return `${MONTHS[d.getMonth()] ?? ""} ${d.getFullYear()}`;
100
+ }
101
+ function formatShort(d) {
102
+ if (!d) return "";
103
+ const m = SHORT_MONTHS[d.getMonth()] ?? "";
104
+ const sameYear = d.getFullYear() === (/* @__PURE__ */ new Date()).getFullYear();
105
+ return sameYear ? `${m} ${d.getDate()}` : `${m} ${d.getDate()}, ${d.getFullYear()}`;
106
+ }
107
+ function formatRange(range) {
108
+ if (!range.from && !range.to) return "";
109
+ if (range.from && !range.to) return formatShort(range.from);
110
+ if (!range.from && range.to) return formatShort(range.to);
111
+ if (isSameDay(range.from, range.to)) return formatShort(range.from);
112
+ return `${formatShort(range.from)} \u2013 ${formatShort(range.to)}`;
113
+ }
114
+ var today = () => startOfDay(/* @__PURE__ */ new Date());
115
+ var DEFAULT_PRESETS = [
116
+ { label: "Today", range: () => ({ from: today(), to: today() }) },
117
+ {
118
+ label: "Last 7 days",
119
+ range: () => ({ from: addDays(today(), -6), to: today() })
120
+ },
121
+ {
122
+ label: "Last 30 days",
123
+ range: () => ({ from: addDays(today(), -29), to: today() })
124
+ },
125
+ {
126
+ label: "This month",
127
+ range: () => {
128
+ const t = today();
129
+ return {
130
+ from: new Date(t.getFullYear(), t.getMonth(), 1),
131
+ to: t
132
+ };
133
+ }
134
+ },
135
+ {
136
+ label: "Last month",
137
+ range: () => {
138
+ const t = today();
139
+ const first = new Date(t.getFullYear(), t.getMonth() - 1, 1);
140
+ const last = new Date(t.getFullYear(), t.getMonth(), 0);
141
+ return { from: first, to: last };
142
+ }
143
+ }
144
+ ];
145
+ function DateRangePicker({
146
+ value,
147
+ defaultValue,
148
+ onChange,
149
+ monthsVisible = 2,
150
+ weekStartsOn = 0,
151
+ minDate,
152
+ maxDate,
153
+ placeholder = "Pick a range",
154
+ presets = DEFAULT_PRESETS,
155
+ align = "left",
156
+ className = "",
157
+ style,
158
+ triggerLabel,
159
+ disabled
160
+ }) {
161
+ const controlled = value !== void 0;
162
+ const [internal, setInternal] = useState(
163
+ defaultValue ?? { from: null, to: null }
164
+ );
165
+ const current = controlled ? value : internal;
166
+ const [open, setOpen] = useState(false);
167
+ const [draft, setDraft] = useState(current);
168
+ const [hover, setHover] = useState(null);
169
+ const [anchorMonth, setAnchorMonth] = useState(
170
+ () => startOfDay(current.from ?? today())
171
+ );
172
+ const wrap = useRef(null);
173
+ useEffect(() => {
174
+ if (!open) return;
175
+ function onDown(e) {
176
+ if (wrap.current && !wrap.current.contains(e.target)) {
177
+ setOpen(false);
178
+ }
179
+ }
180
+ function onKey(e) {
181
+ if (e.key === "Escape") setOpen(false);
182
+ }
183
+ document.addEventListener("mousedown", onDown);
184
+ document.addEventListener("keydown", onKey);
185
+ return () => {
186
+ document.removeEventListener("mousedown", onDown);
187
+ document.removeEventListener("keydown", onKey);
188
+ };
189
+ }, [open]);
190
+ useEffect(() => {
191
+ if (open) {
192
+ setDraft(current);
193
+ setHover(null);
194
+ setAnchorMonth(startOfDay(current.from ?? today()));
195
+ }
196
+ }, [open]);
197
+ const months = useMemo(() => {
198
+ return Array.from({ length: monthsVisible }, (_, i) => addMonths(anchorMonth, i));
199
+ }, [anchorMonth, monthsVisible]);
200
+ const commit = (next) => {
201
+ if (!controlled) setInternal(next);
202
+ onChange?.(next);
203
+ };
204
+ const apply = () => {
205
+ commit(draft);
206
+ setOpen(false);
207
+ };
208
+ const clear = () => {
209
+ setDraft({ from: null, to: null });
210
+ setHover(null);
211
+ };
212
+ const selectDay = (d) => {
213
+ const day = startOfDay(d);
214
+ const { from, to } = draft;
215
+ if (!from || from && to) {
216
+ setDraft({ from: day, to: null });
217
+ setHover(day);
218
+ return;
219
+ }
220
+ if (isBefore(day, from)) {
221
+ setDraft({ from: day, to: from });
222
+ } else {
223
+ setDraft({ from, to: day });
224
+ }
225
+ };
226
+ const isDisabled = (d) => {
227
+ if (minDate && isBefore(d, startOfDay(minDate))) return true;
228
+ if (maxDate && isAfter(d, startOfDay(maxDate))) return true;
229
+ return false;
230
+ };
231
+ const previewTo = !draft.to && draft.from && hover ? hover : draft.to;
232
+ const previewRange = { from: draft.from, to: previewTo };
233
+ return /* @__PURE__ */ jsxs(
234
+ "div",
235
+ {
236
+ ref: wrap,
237
+ className: ["royui-drp", className].filter(Boolean).join(" "),
238
+ style,
239
+ children: [
240
+ /* @__PURE__ */ jsxs(
241
+ "button",
242
+ {
243
+ type: "button",
244
+ className: "royui-drp__trigger",
245
+ onClick: () => !disabled && setOpen((o) => !o),
246
+ "aria-haspopup": "dialog",
247
+ "aria-expanded": open,
248
+ disabled,
249
+ children: [
250
+ /* @__PURE__ */ jsx("span", { className: "royui-drp__trigger-dot", "aria-hidden": true }),
251
+ /* @__PURE__ */ jsx("span", { className: "royui-drp__trigger-label", children: triggerLabel ?? (formatRange(current) || placeholder) })
252
+ ]
253
+ }
254
+ ),
255
+ open && /* @__PURE__ */ jsxs(
256
+ "div",
257
+ {
258
+ className: `royui-drp__panel royui-drp__panel--${align}`,
259
+ role: "dialog",
260
+ "aria-label": "Choose date range",
261
+ children: [
262
+ presets.length > 0 && /* @__PURE__ */ jsx("div", { className: "royui-drp__presets", children: presets.map((p) => {
263
+ const r = p.range();
264
+ const isActive = isSameDay(draft.from, r.from) && isSameDay(draft.to, r.to);
265
+ return /* @__PURE__ */ jsx(
266
+ "button",
267
+ {
268
+ type: "button",
269
+ className: [
270
+ "royui-drp__preset",
271
+ isActive && "royui-drp__preset--active"
272
+ ].filter(Boolean).join(" "),
273
+ onClick: () => {
274
+ const next = {
275
+ from: r.from ? startOfDay(clampToBounds(r.from, minDate, maxDate)) : null,
276
+ to: r.to ? startOfDay(clampToBounds(r.to, minDate, maxDate)) : null
277
+ };
278
+ setDraft(next);
279
+ if (next.from) setAnchorMonth(next.from);
280
+ },
281
+ children: p.label
282
+ },
283
+ p.label
284
+ );
285
+ }) }),
286
+ /* @__PURE__ */ jsxs("div", { className: "royui-drp__main", children: [
287
+ /* @__PURE__ */ jsxs("div", { className: "royui-drp__nav", children: [
288
+ /* @__PURE__ */ jsx(
289
+ "button",
290
+ {
291
+ type: "button",
292
+ className: "royui-drp__nav-btn",
293
+ onClick: () => setAnchorMonth(addMonths(anchorMonth, -1)),
294
+ "aria-label": "Previous month",
295
+ children: "Prev"
296
+ }
297
+ ),
298
+ /* @__PURE__ */ jsx(
299
+ "button",
300
+ {
301
+ type: "button",
302
+ className: "royui-drp__nav-btn",
303
+ onClick: () => setAnchorMonth(addMonths(anchorMonth, 1)),
304
+ "aria-label": "Next month",
305
+ children: "Next"
306
+ }
307
+ )
308
+ ] }),
309
+ /* @__PURE__ */ jsx("div", { className: "royui-drp__months", children: months.map((m) => /* @__PURE__ */ jsx(
310
+ MonthGrid,
311
+ {
312
+ month: m,
313
+ range: previewRange,
314
+ hover,
315
+ weekStartsOn,
316
+ isDisabled,
317
+ onSelect: selectDay,
318
+ onHover: (d) => setHover(d)
319
+ },
320
+ `${m.getFullYear()}-${m.getMonth()}`
321
+ )) }),
322
+ /* @__PURE__ */ jsxs("div", { className: "royui-drp__foot", children: [
323
+ /* @__PURE__ */ jsx("div", { className: "royui-drp__readout", children: formatRange(draft) || "Select start and end" }),
324
+ /* @__PURE__ */ jsxs("div", { className: "royui-drp__foot-actions", children: [
325
+ /* @__PURE__ */ jsx(
326
+ "button",
327
+ {
328
+ type: "button",
329
+ className: "royui-drp__ghost",
330
+ onClick: clear,
331
+ children: "Clear"
332
+ }
333
+ ),
334
+ /* @__PURE__ */ jsx(
335
+ "button",
336
+ {
337
+ type: "button",
338
+ className: "royui-drp__primary",
339
+ onClick: apply,
340
+ disabled: !draft.from,
341
+ children: "Apply"
342
+ }
343
+ )
344
+ ] })
345
+ ] })
346
+ ] })
347
+ ]
348
+ }
349
+ )
350
+ ]
351
+ }
352
+ );
353
+ }
354
+ function MonthGrid({
355
+ month,
356
+ range,
357
+ hover,
358
+ weekStartsOn,
359
+ isDisabled,
360
+ onSelect,
361
+ onHover
362
+ }) {
363
+ const grid = useMemo(
364
+ () => getMonthGrid(month.getFullYear(), month.getMonth(), weekStartsOn),
365
+ [month, weekStartsOn]
366
+ );
367
+ const labels = useMemo(() => getWeekdayLabels(weekStartsOn), [weekStartsOn]);
368
+ const todayD = today();
369
+ return /* @__PURE__ */ jsxs("div", { className: "royui-drp__month", children: [
370
+ /* @__PURE__ */ jsx("div", { className: "royui-drp__month-title", children: formatMonthYear(month) }),
371
+ /* @__PURE__ */ jsx("div", { className: "royui-drp__weekdays", children: labels.map((l, i) => /* @__PURE__ */ jsx("span", { className: "royui-drp__weekday", children: l }, i)) }),
372
+ /* @__PURE__ */ jsx("div", { className: "royui-drp__grid", onMouseLeave: () => onHover(null), children: grid.map((c) => {
373
+ const inMonth = isSameMonth(c.date, month);
374
+ const disabled = isDisabled(c.date);
375
+ const isStart = isSameDay(c.date, range.from);
376
+ const isEnd = isSameDay(c.date, range.to);
377
+ const isInRange = range.from && range.to && isBetween(c.date, range.from, range.to);
378
+ const isPreview = range.from && !range.to && hover && isBetween(c.date, range.from, hover);
379
+ const isTodayCell = isSameDay(c.date, todayD);
380
+ const classes = [
381
+ "royui-drp__day",
382
+ !inMonth && "royui-drp__day--out",
383
+ disabled && "royui-drp__day--disabled",
384
+ (isStart || isEnd) && "royui-drp__day--edge",
385
+ isStart && "royui-drp__day--start",
386
+ isEnd && "royui-drp__day--end",
387
+ (isInRange || isPreview) && "royui-drp__day--in",
388
+ isTodayCell && "royui-drp__day--today"
389
+ ].filter(Boolean).join(" ");
390
+ return /* @__PURE__ */ jsx(
391
+ "button",
392
+ {
393
+ type: "button",
394
+ className: classes,
395
+ disabled,
396
+ tabIndex: inMonth ? 0 : -1,
397
+ onClick: () => inMonth && onSelect(c.date),
398
+ onMouseEnter: () => inMonth && onHover(c.date),
399
+ "aria-label": c.date.toDateString(),
400
+ children: /* @__PURE__ */ jsx("span", { children: c.date.getDate() })
401
+ },
402
+ c.iso
403
+ );
404
+ }) })
405
+ ] });
406
+ }
407
+
408
+ export { DEFAULT_PRESETS, DateRangePicker, addDays, addMonths, formatMonthYear, formatRange, formatShort, isBetween, isSameDay, startOfDay };
409
+ //# sourceMappingURL=chunk-SFENGB5N.js.map
410
+ //# sourceMappingURL=chunk-SFENGB5N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/date-range-picker/dateUtils.ts","../src/components/date-range-picker/DateRangePicker.tsx"],"names":[],"mappings":"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","file":"chunk-SFENGB5N.js","sourcesContent":["export type DateRange = { from: Date | null; to: Date | null };\n\nexport const MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n];\n\nexport const SHORT_MONTHS = [\n 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',\n];\n\nexport const WEEKDAYS = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\nexport function startOfDay(d: Date): Date {\n const n = new Date(d);\n n.setHours(0, 0, 0, 0);\n return n;\n}\n\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n if (!a || !b) return false;\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function isSameMonth(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\nexport function addMonths(d: Date, n: number): Date {\n const x = new Date(d);\n x.setDate(1);\n x.setMonth(x.getMonth() + n);\n return x;\n}\n\nexport function addDays(d: Date, n: number): Date {\n const x = new Date(d);\n x.setDate(x.getDate() + n);\n return x;\n}\n\nexport function isBefore(a: Date, b: Date): boolean {\n return a.getTime() < b.getTime();\n}\n\nexport function isAfter(a: Date, b: Date): boolean {\n return a.getTime() > b.getTime();\n}\n\nexport function isBetween(d: Date, from: Date, to: Date): boolean {\n const t = d.getTime();\n const a = Math.min(from.getTime(), to.getTime());\n const b = Math.max(from.getTime(), to.getTime());\n return t >= a && t <= b;\n}\n\nexport function clampToBounds(d: Date, min?: Date | null, max?: Date | null): Date {\n let r = d;\n if (min && isBefore(r, min)) r = min;\n if (max && isAfter(r, max)) r = max;\n return r;\n}\n\nexport type DayCell = {\n date: Date;\n inMonth: boolean;\n iso: string;\n};\n\n/** Returns 6 rows × 7 days = 42 cells covering the month, padded with neighbors. */\nexport function getMonthGrid(year: number, month: number, weekStartsOn = 0): DayCell[] {\n const first = new Date(year, month, 1);\n const firstDow = first.getDay();\n const offset = (firstDow - weekStartsOn + 7) % 7;\n const gridStart = addDays(first, -offset);\n const cells: DayCell[] = [];\n for (let i = 0; i < 42; i++) {\n const date = addDays(gridStart, i);\n cells.push({\n date,\n inMonth: date.getMonth() === month,\n iso: date.toISOString().slice(0, 10),\n });\n }\n return cells;\n}\n\nexport function getWeekdayLabels(weekStartsOn = 0): string[] {\n return Array.from({ length: 7 }, (_, i) => WEEKDAYS[(weekStartsOn + i) % 7] ?? '');\n}\n\nexport function formatMonthYear(d: Date): string {\n return `${MONTHS[d.getMonth()] ?? ''} ${d.getFullYear()}`;\n}\n\nexport function formatShort(d: Date | null): string {\n if (!d) return '';\n const m = SHORT_MONTHS[d.getMonth()] ?? '';\n const sameYear = d.getFullYear() === new Date().getFullYear();\n return sameYear\n ? `${m} ${d.getDate()}`\n : `${m} ${d.getDate()}, ${d.getFullYear()}`;\n}\n\nexport function formatRange(range: DateRange): string {\n if (!range.from && !range.to) return '';\n if (range.from && !range.to) return formatShort(range.from);\n if (!range.from && range.to) return formatShort(range.to);\n if (isSameDay(range.from, range.to)) return formatShort(range.from);\n return `${formatShort(range.from)} – ${formatShort(range.to)}`;\n}\n","'use client';\n\nimport {\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport {\n addDays,\n addMonths,\n clampToBounds,\n DateRange,\n formatMonthYear,\n formatRange,\n getMonthGrid,\n getWeekdayLabels,\n isAfter,\n isBefore,\n isBetween,\n isSameDay,\n isSameMonth,\n startOfDay,\n} from './dateUtils';\nimport './DateRangePicker.css';\n\nexport type DatePreset = {\n label: string;\n range: () => DateRange;\n};\n\nexport interface DateRangePickerProps {\n value?: DateRange;\n defaultValue?: DateRange;\n onChange?: (range: DateRange) => void;\n monthsVisible?: number;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n minDate?: Date | null;\n maxDate?: Date | null;\n placeholder?: string;\n presets?: DatePreset[];\n /** Render below the trigger when open. Default 'left'. */\n align?: 'left' | 'right';\n className?: string;\n style?: CSSProperties;\n triggerLabel?: ReactNode;\n disabled?: boolean;\n}\n\nconst today = () => startOfDay(new Date());\n\nexport const DEFAULT_PRESETS: DatePreset[] = [\n { label: 'Today', range: () => ({ from: today(), to: today() }) },\n {\n label: 'Last 7 days',\n range: () => ({ from: addDays(today(), -6), to: today() }),\n },\n {\n label: 'Last 30 days',\n range: () => ({ from: addDays(today(), -29), to: today() }),\n },\n {\n label: 'This month',\n range: () => {\n const t = today();\n return {\n from: new Date(t.getFullYear(), t.getMonth(), 1),\n to: t,\n };\n },\n },\n {\n label: 'Last month',\n range: () => {\n const t = today();\n const first = new Date(t.getFullYear(), t.getMonth() - 1, 1);\n const last = new Date(t.getFullYear(), t.getMonth(), 0);\n return { from: first, to: last };\n },\n },\n];\n\nexport function DateRangePicker({\n value,\n defaultValue,\n onChange,\n monthsVisible = 2,\n weekStartsOn = 0,\n minDate,\n maxDate,\n placeholder = 'Pick a range',\n presets = DEFAULT_PRESETS,\n align = 'left',\n className = '',\n style,\n triggerLabel,\n disabled,\n}: DateRangePickerProps) {\n const controlled = value !== undefined;\n const [internal, setInternal] = useState<DateRange>(\n defaultValue ?? { from: null, to: null },\n );\n const current = controlled ? value! : internal;\n\n const [open, setOpen] = useState(false);\n const [draft, setDraft] = useState<DateRange>(current);\n const [hover, setHover] = useState<Date | null>(null);\n const [anchorMonth, setAnchorMonth] = useState<Date>(() =>\n startOfDay(current.from ?? today()),\n );\n\n const wrap = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n function onDown(e: MouseEvent) {\n if (wrap.current && !wrap.current.contains(e.target as Node)) {\n setOpen(false);\n }\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n useEffect(() => {\n if (open) {\n setDraft(current);\n setHover(null);\n setAnchorMonth(startOfDay(current.from ?? today()));\n }\n }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const months = useMemo(() => {\n return Array.from({ length: monthsVisible }, (_, i) => addMonths(anchorMonth, i));\n }, [anchorMonth, monthsVisible]);\n\n const commit = (next: DateRange) => {\n if (!controlled) setInternal(next);\n onChange?.(next);\n };\n\n const apply = () => {\n commit(draft);\n setOpen(false);\n };\n\n const clear = () => {\n setDraft({ from: null, to: null });\n setHover(null);\n };\n\n const selectDay = (d: Date) => {\n const day = startOfDay(d);\n const { from, to } = draft;\n if (!from || (from && to)) {\n setDraft({ from: day, to: null });\n setHover(day);\n return;\n }\n // from is set, to is null\n if (isBefore(day, from)) {\n setDraft({ from: day, to: from });\n } else {\n setDraft({ from, to: day });\n }\n };\n\n const isDisabled = (d: Date) => {\n if (minDate && isBefore(d, startOfDay(minDate))) return true;\n if (maxDate && isAfter(d, startOfDay(maxDate))) return true;\n return false;\n };\n\n const previewTo = !draft.to && draft.from && hover ? hover : draft.to;\n const previewRange: DateRange = { from: draft.from, to: previewTo };\n\n return (\n <div\n ref={wrap}\n className={['royui-drp', className].filter(Boolean).join(' ')}\n style={style}\n >\n <button\n type=\"button\"\n className=\"royui-drp__trigger\"\n onClick={() => !disabled && setOpen((o) => !o)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n disabled={disabled}\n >\n <span className=\"royui-drp__trigger-dot\" aria-hidden />\n <span className=\"royui-drp__trigger-label\">\n {triggerLabel ?? (formatRange(current) || placeholder)}\n </span>\n </button>\n\n {open && (\n <div\n className={`royui-drp__panel royui-drp__panel--${align}`}\n role=\"dialog\"\n aria-label=\"Choose date range\"\n >\n {presets.length > 0 && (\n <div className=\"royui-drp__presets\">\n {presets.map((p) => {\n const r = p.range();\n const isActive =\n isSameDay(draft.from, r.from) && isSameDay(draft.to, r.to);\n return (\n <button\n key={p.label}\n type=\"button\"\n className={[\n 'royui-drp__preset',\n isActive && 'royui-drp__preset--active',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => {\n const next = {\n from: r.from ? startOfDay(clampToBounds(r.from, minDate, maxDate)) : null,\n to: r.to ? startOfDay(clampToBounds(r.to, minDate, maxDate)) : null,\n };\n setDraft(next);\n if (next.from) setAnchorMonth(next.from);\n }}\n >\n {p.label}\n </button>\n );\n })}\n </div>\n )}\n\n <div className=\"royui-drp__main\">\n <div className=\"royui-drp__nav\">\n <button\n type=\"button\"\n className=\"royui-drp__nav-btn\"\n onClick={() => setAnchorMonth(addMonths(anchorMonth, -1))}\n aria-label=\"Previous month\"\n >\n Prev\n </button>\n <button\n type=\"button\"\n className=\"royui-drp__nav-btn\"\n onClick={() => setAnchorMonth(addMonths(anchorMonth, 1))}\n aria-label=\"Next month\"\n >\n Next\n </button>\n </div>\n\n <div className=\"royui-drp__months\">\n {months.map((m) => (\n <MonthGrid\n key={`${m.getFullYear()}-${m.getMonth()}`}\n month={m}\n range={previewRange}\n hover={hover}\n weekStartsOn={weekStartsOn}\n isDisabled={isDisabled}\n onSelect={selectDay}\n onHover={(d) => setHover(d)}\n />\n ))}\n </div>\n\n <div className=\"royui-drp__foot\">\n <div className=\"royui-drp__readout\">\n {formatRange(draft) || 'Select start and end'}\n </div>\n <div className=\"royui-drp__foot-actions\">\n <button\n type=\"button\"\n className=\"royui-drp__ghost\"\n onClick={clear}\n >\n Clear\n </button>\n <button\n type=\"button\"\n className=\"royui-drp__primary\"\n onClick={apply}\n disabled={!draft.from}\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction MonthGrid({\n month,\n range,\n hover,\n weekStartsOn,\n isDisabled,\n onSelect,\n onHover,\n}: {\n month: Date;\n range: DateRange;\n hover: Date | null;\n weekStartsOn: number;\n isDisabled: (d: Date) => boolean;\n onSelect: (d: Date) => void;\n onHover: (d: Date | null) => void;\n}) {\n const grid = useMemo(\n () => getMonthGrid(month.getFullYear(), month.getMonth(), weekStartsOn),\n [month, weekStartsOn],\n );\n const labels = useMemo(() => getWeekdayLabels(weekStartsOn), [weekStartsOn]);\n const todayD = today();\n\n return (\n <div className=\"royui-drp__month\">\n <div className=\"royui-drp__month-title\">{formatMonthYear(month)}</div>\n <div className=\"royui-drp__weekdays\">\n {labels.map((l, i) => (\n <span key={i} className=\"royui-drp__weekday\">\n {l}\n </span>\n ))}\n </div>\n <div className=\"royui-drp__grid\" onMouseLeave={() => onHover(null)}>\n {grid.map((c) => {\n const inMonth = isSameMonth(c.date, month);\n const disabled = isDisabled(c.date);\n const isStart = isSameDay(c.date, range.from);\n const isEnd = isSameDay(c.date, range.to);\n const isInRange =\n range.from && range.to && isBetween(c.date, range.from, range.to);\n const isPreview =\n range.from && !range.to && hover && isBetween(c.date, range.from, hover);\n\n const isTodayCell = isSameDay(c.date, todayD);\n\n const classes = [\n 'royui-drp__day',\n !inMonth && 'royui-drp__day--out',\n disabled && 'royui-drp__day--disabled',\n (isStart || isEnd) && 'royui-drp__day--edge',\n isStart && 'royui-drp__day--start',\n isEnd && 'royui-drp__day--end',\n (isInRange || isPreview) && 'royui-drp__day--in',\n isTodayCell && 'royui-drp__day--today',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n key={c.iso}\n type=\"button\"\n className={classes}\n disabled={disabled}\n tabIndex={inMonth ? 0 : -1}\n onClick={() => inMonth && onSelect(c.date)}\n onMouseEnter={() => inMonth && onHover(c.date)}\n aria-label={c.date.toDateString()}\n >\n <span>{c.date.getDate()}</span>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
@@ -0,0 +1,194 @@
1
+ "use client";
2
+ import { forwardRef } from 'react';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+ import './Table-YTEWR635.css';
5
+
6
+ // src/components/table/Table.tsx
7
+ function Spinner({
8
+ size = 16,
9
+ strokeWidth = 2,
10
+ label = "Loading",
11
+ style,
12
+ className = ""
13
+ }) {
14
+ const r = (size - strokeWidth) / 2;
15
+ const c = size / 2;
16
+ const circumference = 2 * Math.PI * r;
17
+ return /* @__PURE__ */ jsx(
18
+ "span",
19
+ {
20
+ role: "status",
21
+ "aria-label": label,
22
+ className: ["royui-spinner", className].filter(Boolean).join(" "),
23
+ style: { width: size, height: size, ...style },
24
+ children: /* @__PURE__ */ jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, "aria-hidden": true, children: [
25
+ /* @__PURE__ */ jsx(
26
+ "circle",
27
+ {
28
+ cx: c,
29
+ cy: c,
30
+ r,
31
+ fill: "none",
32
+ stroke: "currentColor",
33
+ strokeOpacity: 0.18,
34
+ strokeWidth
35
+ }
36
+ ),
37
+ /* @__PURE__ */ jsx(
38
+ "circle",
39
+ {
40
+ cx: c,
41
+ cy: c,
42
+ r,
43
+ fill: "none",
44
+ stroke: "currentColor",
45
+ strokeWidth,
46
+ strokeLinecap: "round",
47
+ strokeDasharray: circumference,
48
+ strokeDashoffset: circumference * 0.72,
49
+ transform: `rotate(-90 ${c} ${c})`
50
+ }
51
+ )
52
+ ] })
53
+ }
54
+ );
55
+ }
56
+ function fontVars(prefix, spec) {
57
+ if (!spec) return {};
58
+ const out = {};
59
+ if (typeof spec === "string") {
60
+ out[`${prefix}-font`] = spec;
61
+ return out;
62
+ }
63
+ if (spec.family) out[`${prefix}-font`] = spec.family;
64
+ if (spec.size != null)
65
+ out[`${prefix}-size`] = typeof spec.size === "number" ? `${spec.size}px` : spec.size;
66
+ if (spec.weight != null) out[`${prefix}-weight`] = String(spec.weight);
67
+ if (spec.letterSpacing) out[`${prefix}-tracking`] = spec.letterSpacing;
68
+ if (spec.featureSettings) out[`${prefix}-features`] = spec.featureSettings;
69
+ return out;
70
+ }
71
+ var Table = forwardRef(function Table2({
72
+ visibleRows = 7,
73
+ rowHeight = 44,
74
+ stickyHeader = true,
75
+ density = "cozy",
76
+ loading = false,
77
+ empty,
78
+ isEmpty = false,
79
+ fitColumns = false,
80
+ headerFont,
81
+ rowHeaderFont,
82
+ cellFont,
83
+ className = "",
84
+ style,
85
+ children,
86
+ tableProps,
87
+ ...rest
88
+ }, ref) {
89
+ const headerH = 40;
90
+ const maxH = rowHeight * visibleRows + (stickyHeader ? headerH : 0);
91
+ const mergedStyle = {
92
+ ...style,
93
+ ["--royui-table-row-h"]: `${rowHeight}px`,
94
+ ["--royui-table-max-h"]: `${maxH}px`,
95
+ ...fontVars("--royui-table-header", headerFont),
96
+ ...fontVars("--royui-table-row-header", rowHeaderFont),
97
+ ...fontVars("--royui-table-cell", cellFont)
98
+ };
99
+ const classes = [
100
+ "royui-table",
101
+ `royui-table--${density}`,
102
+ stickyHeader && "royui-table--sticky",
103
+ loading && "royui-table--loading",
104
+ fitColumns && "royui-table--fit",
105
+ className
106
+ ].filter(Boolean).join(" ");
107
+ return /* @__PURE__ */ jsx("div", { ref, className: classes, style: mergedStyle, ...rest, children: /* @__PURE__ */ jsxs("div", { className: "royui-table__scroll", role: "region", "aria-label": "Table", children: [
108
+ /* @__PURE__ */ jsx("table", { className: "royui-table__table", ...tableProps, children }),
109
+ isEmpty && !loading && /* @__PURE__ */ jsx("div", { className: "royui-table__empty", role: "status", children: empty ?? /* @__PURE__ */ jsx("span", { children: "No results" }) }),
110
+ loading && /* @__PURE__ */ jsx("div", { className: "royui-table__loading", "aria-hidden": true, children: /* @__PURE__ */ jsx(Spinner, { size: 18 }) })
111
+ ] }) });
112
+ });
113
+ var TableHeader = forwardRef(function TableHeader2({ className = "", ...rest }, ref) {
114
+ return /* @__PURE__ */ jsx(
115
+ "thead",
116
+ {
117
+ ref,
118
+ className: ["royui-table__thead", className].filter(Boolean).join(" "),
119
+ ...rest
120
+ }
121
+ );
122
+ });
123
+ var TableBody = forwardRef(function TableBody2({ className = "", ...rest }, ref) {
124
+ return /* @__PURE__ */ jsx(
125
+ "tbody",
126
+ {
127
+ ref,
128
+ className: ["royui-table__tbody", className].filter(Boolean).join(" "),
129
+ ...rest
130
+ }
131
+ );
132
+ });
133
+ var TableRow = forwardRef(function TableRow2({ className = "", ...rest }, ref) {
134
+ return /* @__PURE__ */ jsx(
135
+ "tr",
136
+ {
137
+ ref,
138
+ className: ["royui-table__tr", className].filter(Boolean).join(" "),
139
+ ...rest
140
+ }
141
+ );
142
+ });
143
+ var TableHead = forwardRef(
144
+ function TableHead2({ className = "", align = "left", ...rest }, ref) {
145
+ return /* @__PURE__ */ jsx(
146
+ "th",
147
+ {
148
+ ref,
149
+ scope: "col",
150
+ className: [
151
+ "royui-table__th",
152
+ align !== "left" && `royui-table__th--${align}`,
153
+ className
154
+ ].filter(Boolean).join(" "),
155
+ ...rest
156
+ }
157
+ );
158
+ }
159
+ );
160
+ var TableCell = forwardRef(
161
+ function TableCell2({ className = "", align = "left", isRowHeader, ...rest }, ref) {
162
+ if (isRowHeader) {
163
+ return /* @__PURE__ */ jsx(
164
+ "th",
165
+ {
166
+ ref,
167
+ scope: "row",
168
+ className: [
169
+ "royui-table__row-header",
170
+ align !== "left" && `royui-table__td--${align}`,
171
+ className
172
+ ].filter(Boolean).join(" "),
173
+ ...rest
174
+ }
175
+ );
176
+ }
177
+ return /* @__PURE__ */ jsx(
178
+ "td",
179
+ {
180
+ ref,
181
+ className: [
182
+ "royui-table__td",
183
+ align !== "left" && `royui-table__td--${align}`,
184
+ className
185
+ ].filter(Boolean).join(" "),
186
+ ...rest
187
+ }
188
+ );
189
+ }
190
+ );
191
+
192
+ export { Spinner, Table, TableBody, TableCell, TableHead, TableHeader, TableRow };
193
+ //# sourceMappingURL=chunk-XERZVDIT.js.map
194
+ //# sourceMappingURL=chunk-XERZVDIT.js.map