@roy-ui/ui 0.0.6 → 0.0.7
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.
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
.royui-btn {
|
|
2
|
+
/* Surface — light grazes the top, the base sits in its own shade. */
|
|
3
|
+
--royui-btn-top: #323232;
|
|
4
|
+
--royui-btn-bottom: #222222;
|
|
5
|
+
/* A hairline ring keeps the edge crisp on any background. */
|
|
6
|
+
--royui-btn-ring: #3a3a3a;
|
|
7
|
+
--royui-btn-fg: #ffffff;
|
|
8
|
+
--royui-btn-radius: 14px;
|
|
9
|
+
--royui-btn-pad-y: 11px;
|
|
10
|
+
--royui-btn-pad-x: 22px;
|
|
11
|
+
--royui-btn-font: 15px;
|
|
12
|
+
|
|
13
|
+
position: relative;
|
|
14
|
+
display: inline-flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: center;
|
|
17
|
+
gap: 8px;
|
|
18
|
+
padding: var(--royui-btn-pad-y) var(--royui-btn-pad-x);
|
|
19
|
+
border: none;
|
|
20
|
+
border-radius: var(--royui-btn-radius);
|
|
21
|
+
background: linear-gradient(180deg, var(--royui-btn-top), var(--royui-btn-bottom));
|
|
22
|
+
color: var(--royui-btn-fg);
|
|
23
|
+
font-family: inherit;
|
|
24
|
+
font-size: var(--royui-btn-font);
|
|
25
|
+
font-weight: 600;
|
|
26
|
+
line-height: 1;
|
|
27
|
+
letter-spacing: -0.01em;
|
|
28
|
+
cursor: pointer;
|
|
29
|
+
user-select: none;
|
|
30
|
+
-webkit-tap-highlight-color: transparent;
|
|
31
|
+
transition:
|
|
32
|
+
transform 140ms cubic-bezier(0.22, 0.61, 0.36, 1),
|
|
33
|
+
box-shadow 200ms cubic-bezier(0.22, 0.61, 0.36, 1),
|
|
34
|
+
background 200ms ease;
|
|
35
|
+
/* The whole illusion lives here — four layers, none of them loud:
|
|
36
|
+
1 · ring — defines the edge without a visible border
|
|
37
|
+
2 · top inner highlight — light catching the upper lip
|
|
38
|
+
3 · bottom inner shade — the wall meeting its base
|
|
39
|
+
4 · drop shadow — it rests on the surface, barely */
|
|
40
|
+
box-shadow:
|
|
41
|
+
0 0 0 1px var(--royui-btn-ring),
|
|
42
|
+
inset 0 0.5px 1px rgba(255, 255, 255, 0.15),
|
|
43
|
+
inset 0 -1px 1.2px 0.4px rgba(8, 8, 8, 0.55),
|
|
44
|
+
0 2px 4px -1px rgba(0, 0, 0, 0.5);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Sizes — radius scales with the box so corners stay proportional. */
|
|
48
|
+
.royui-btn--sm {
|
|
49
|
+
--royui-btn-radius: 11px;
|
|
50
|
+
--royui-btn-pad-y: 8px;
|
|
51
|
+
--royui-btn-pad-x: 16px;
|
|
52
|
+
--royui-btn-font: 13px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.royui-btn--lg {
|
|
56
|
+
--royui-btn-radius: 16px;
|
|
57
|
+
--royui-btn-pad-y: 14px;
|
|
58
|
+
--royui-btn-pad-x: 28px;
|
|
59
|
+
--royui-btn-font: 16px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.royui-btn--full {
|
|
63
|
+
width: 100%;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* Hover — a half-pixel of lift and a touch more light. Restraint is the point. */
|
|
67
|
+
.royui-btn:hover:not(:disabled) {
|
|
68
|
+
--royui-btn-top: #383838;
|
|
69
|
+
--royui-btn-bottom: #262626;
|
|
70
|
+
transform: translateY(-0.5px);
|
|
71
|
+
box-shadow:
|
|
72
|
+
0 0 0 1px var(--royui-btn-ring),
|
|
73
|
+
inset 0 0.5px 1px rgba(255, 255, 255, 0.18),
|
|
74
|
+
inset 0 -1px 1.2px 0.4px rgba(8, 8, 8, 0.55),
|
|
75
|
+
0 4px 8px -2px rgba(0, 0, 0, 0.55);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* Press — the top highlight collapses into an inset shadow, so the face
|
|
79
|
+
dips in instead of staying lit. That swap is what reads as "real". */
|
|
80
|
+
.royui-btn:active:not(:disabled) {
|
|
81
|
+
--royui-btn-top: #2a2a2a;
|
|
82
|
+
--royui-btn-bottom: #1e1e1e;
|
|
83
|
+
transform: translateY(0.5px);
|
|
84
|
+
transition-duration: 60ms;
|
|
85
|
+
box-shadow:
|
|
86
|
+
0 0 0 1px var(--royui-btn-ring),
|
|
87
|
+
inset 0 1px 2px rgba(0, 0, 0, 0.45),
|
|
88
|
+
inset 0 0.5px 0.5px rgba(255, 255, 255, 0.04),
|
|
89
|
+
0 1px 2px -1px rgba(0, 0, 0, 0.5);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.royui-btn:focus-visible {
|
|
93
|
+
outline: 2px solid rgba(255, 255, 255, 0.7);
|
|
94
|
+
outline-offset: 2px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.royui-btn:disabled {
|
|
98
|
+
opacity: 0.55;
|
|
99
|
+
cursor: not-allowed;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.royui-btn--loading {
|
|
103
|
+
cursor: progress;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.royui-btn__spinner {
|
|
107
|
+
display: inline-flex;
|
|
108
|
+
align-items: center;
|
|
109
|
+
justify-content: center;
|
|
110
|
+
line-height: 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.royui-btn__spinner svg {
|
|
114
|
+
animation: royui-btn__spin 0.75s linear infinite;
|
|
115
|
+
color: currentColor;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@keyframes royui-btn__spin {
|
|
119
|
+
to {
|
|
120
|
+
transform: rotate(360deg);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@media (prefers-reduced-motion: reduce) {
|
|
125
|
+
.royui-btn {
|
|
126
|
+
transition: box-shadow 200ms ease, background 200ms ease;
|
|
127
|
+
}
|
|
128
|
+
.royui-btn:hover:not(:disabled),
|
|
129
|
+
.royui-btn:active:not(:disabled) {
|
|
130
|
+
transform: none;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
display: flex;
|
|
12
12
|
align-items: center;
|
|
13
13
|
justify-content: space-between;
|
|
14
|
-
|
|
14
|
+
flex-wrap: wrap;
|
|
15
|
+
gap: 12px 16px;
|
|
15
16
|
font-family:
|
|
16
17
|
-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial,
|
|
17
18
|
sans-serif;
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
.royui-pagination__group {
|
|
27
28
|
display: flex;
|
|
28
29
|
align-items: center;
|
|
30
|
+
flex-wrap: wrap;
|
|
29
31
|
gap: 8px;
|
|
30
32
|
margin-left: auto;
|
|
31
33
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,20 @@ import * as react from 'react';
|
|
|
2
2
|
import { ButtonHTMLAttributes, ReactNode, AnchorHTMLAttributes, CSSProperties, HTMLAttributes, LiHTMLAttributes, TableHTMLAttributes, TdHTMLAttributes, ThHTMLAttributes, InputHTMLAttributes } from 'react';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
|
|
5
|
+
type ButtonSize = 'sm' | 'md' | 'lg';
|
|
6
|
+
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
7
|
+
/** Visual scale. Defaults to "md". */
|
|
8
|
+
size?: ButtonSize;
|
|
9
|
+
/** Stretch the button to fill its container. Defaults to false. */
|
|
10
|
+
fullWidth?: boolean;
|
|
11
|
+
/** Replaces children with a spinner and disables the button. */
|
|
12
|
+
loading?: boolean;
|
|
13
|
+
/** Optional override for the loading visual. Defaults to a spinner. */
|
|
14
|
+
loadingLabel?: ReactNode;
|
|
15
|
+
children: ReactNode;
|
|
16
|
+
}
|
|
17
|
+
declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
|
|
18
|
+
|
|
5
19
|
interface GradientButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
6
20
|
loading?: boolean;
|
|
7
21
|
loadingLabel?: ReactNode;
|
|
@@ -405,4 +419,4 @@ declare function toJson<T>(rows: T[], cols: Column<T>[]): string;
|
|
|
405
419
|
declare function fromJson<T>(text: string): T[];
|
|
406
420
|
declare function downloadString(text: string, filename: string, mime: string): void;
|
|
407
421
|
|
|
408
|
-
export { AnalogClock, type AnalogClockProps, type Column, ColumnMenu, type ColumnType, DEFAULT_PRESETS, type DataIO, DataTable, type DataTableProps, type DatePreset, type DateRange, DateRangePicker, type DateRangePickerProps, DigitalClock, type DigitalClockProps, type FilterState, type FontSpec, GradientButton, type GradientButtonProps, MadeBy, type MadeByPosition, type MadeByProps, Pagination, type PaginationProps, Popover, type PopoverProps, type SortDir, Spinner, type SpinnerProps, Table, TableBody, TableCell, type TableCellProps, type TableDensity, TableHead, type TableHeadCellProps, TableHeader, type TableLayout, type TableProps, TableRow, TableSearch, type TableSearchProps, TextMorph, type TextMorphProps, TimePicker, type TimePickerProps, type TimePickerVariant, type TimeValue, TreeNav, TreeNavItem, type TreeNavItemProps, type TreeNavProps, addDays, addMonths, downloadString, formatMonthYear, formatRange, formatShort, formatTime, fromCsv, fromJson, isBetween, isSameDay, startOfDay, toCsv, toJson };
|
|
422
|
+
export { AnalogClock, type AnalogClockProps, Button, type ButtonProps, type ButtonSize, type Column, ColumnMenu, type ColumnType, DEFAULT_PRESETS, type DataIO, DataTable, type DataTableProps, type DatePreset, type DateRange, DateRangePicker, type DateRangePickerProps, DigitalClock, type DigitalClockProps, type FilterState, type FontSpec, GradientButton, type GradientButtonProps, MadeBy, type MadeByPosition, type MadeByProps, Pagination, type PaginationProps, Popover, type PopoverProps, type SortDir, Spinner, type SpinnerProps, Table, TableBody, TableCell, type TableCellProps, type TableDensity, TableHead, type TableHeadCellProps, TableHeader, type TableLayout, type TableProps, TableRow, TableSearch, type TableSearchProps, TextMorph, type TextMorphProps, TimePicker, type TimePickerProps, type TimePickerVariant, type TimeValue, TreeNav, TreeNavItem, type TreeNavItemProps, type TreeNavProps, addDays, addMonths, downloadString, formatMonthYear, formatRange, formatShort, formatTime, fromCsv, fromJson, isBetween, isSameDay, startOfDay, toCsv, toJson };
|
package/dist/index.js
CHANGED
|
@@ -1,20 +1,77 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { forwardRef, useState, useRef, useEffect, Children, isValidElement, cloneElement, useMemo, useCallback } from 'react';
|
|
3
|
-
import './
|
|
3
|
+
import './Button-XBBWB5ZT.css';
|
|
4
4
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
import './GradientButton-TX2GJRIQ.css';
|
|
5
6
|
import './Popover-LSYVKT4M.css';
|
|
6
7
|
import './MadeBy-JCYGHWSD.css';
|
|
7
8
|
import './TextMorph-RX2BX25F.css';
|
|
8
9
|
import './TreeNav-22DY7TP5.css';
|
|
9
10
|
import './Table-YTEWR635.css';
|
|
10
11
|
import './TableSearch-UZO4ZJVE.css';
|
|
11
|
-
import './Pagination-
|
|
12
|
+
import './Pagination-LLKV7XXI.css';
|
|
12
13
|
import './DateRangePicker-BCP26AOC.css';
|
|
13
14
|
import './TimePicker-44EKHQEJ.css';
|
|
14
15
|
import './DataTable-TQ5OBNZF.css';
|
|
15
16
|
|
|
16
|
-
// src/components/
|
|
17
|
-
var DefaultSpinner = () => /* @__PURE__ */ jsx("span", { className: "
|
|
17
|
+
// src/components/button/Button.tsx
|
|
18
|
+
var DefaultSpinner = () => /* @__PURE__ */ jsx("span", { className: "royui-btn__spinner", "aria-hidden": "true", children: /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", children: [
|
|
19
|
+
/* @__PURE__ */ jsx(
|
|
20
|
+
"circle",
|
|
21
|
+
{
|
|
22
|
+
cx: "12",
|
|
23
|
+
cy: "12",
|
|
24
|
+
r: "9",
|
|
25
|
+
stroke: "currentColor",
|
|
26
|
+
strokeOpacity: "0.3",
|
|
27
|
+
strokeWidth: "2.5"
|
|
28
|
+
}
|
|
29
|
+
),
|
|
30
|
+
/* @__PURE__ */ jsx(
|
|
31
|
+
"path",
|
|
32
|
+
{
|
|
33
|
+
d: "M21 12a9 9 0 0 0-9-9",
|
|
34
|
+
stroke: "currentColor",
|
|
35
|
+
strokeWidth: "2.5",
|
|
36
|
+
strokeLinecap: "round"
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
|
+
] }) });
|
|
40
|
+
var Button = forwardRef(
|
|
41
|
+
({
|
|
42
|
+
size = "md",
|
|
43
|
+
fullWidth = false,
|
|
44
|
+
loading = false,
|
|
45
|
+
loadingLabel,
|
|
46
|
+
disabled,
|
|
47
|
+
className = "",
|
|
48
|
+
children,
|
|
49
|
+
type = "button",
|
|
50
|
+
...rest
|
|
51
|
+
}, ref) => {
|
|
52
|
+
const classes = [
|
|
53
|
+
"royui-btn",
|
|
54
|
+
`royui-btn--${size}`,
|
|
55
|
+
fullWidth ? "royui-btn--full" : "",
|
|
56
|
+
loading ? "royui-btn--loading" : "",
|
|
57
|
+
className
|
|
58
|
+
].filter(Boolean).join(" ");
|
|
59
|
+
return /* @__PURE__ */ jsx(
|
|
60
|
+
"button",
|
|
61
|
+
{
|
|
62
|
+
ref,
|
|
63
|
+
type,
|
|
64
|
+
disabled: disabled || loading,
|
|
65
|
+
className: classes,
|
|
66
|
+
"aria-busy": loading || void 0,
|
|
67
|
+
...rest,
|
|
68
|
+
children: loading ? loadingLabel ?? /* @__PURE__ */ jsx(DefaultSpinner, {}) : children
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
Button.displayName = "Button";
|
|
74
|
+
var DefaultSpinner2 = () => /* @__PURE__ */ jsx("span", { className: "gradient-btn__spinner", "aria-hidden": "true", children: /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", width: "18", height: "18", fill: "none", children: [
|
|
18
75
|
/* @__PURE__ */ jsx(
|
|
19
76
|
"circle",
|
|
20
77
|
{
|
|
@@ -62,7 +119,7 @@ var GradientButton = forwardRef(
|
|
|
62
119
|
className: classes,
|
|
63
120
|
"aria-busy": loading || void 0,
|
|
64
121
|
...rest,
|
|
65
|
-
children: loading ? loadingLabel ?? /* @__PURE__ */ jsx(
|
|
122
|
+
children: loading ? loadingLabel ?? /* @__PURE__ */ jsx(DefaultSpinner2, {}) : children
|
|
66
123
|
}
|
|
67
124
|
);
|
|
68
125
|
}
|
|
@@ -2460,6 +2517,6 @@ function DataTable({
|
|
|
2460
2517
|
] });
|
|
2461
2518
|
}
|
|
2462
2519
|
|
|
2463
|
-
export { AnalogClock, ColumnMenu, DEFAULT_PRESETS, DataTable, DateRangePicker, DigitalClock, GradientButton, MadeBy, Pagination, Popover, Spinner, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, TableSearch, TextMorph, TimePicker, TreeNav, TreeNavItem, addDays, addMonths, downloadString, formatMonthYear, formatRange, formatShort, formatTime, fromCsv, fromJson, isBetween, isSameDay, startOfDay, toCsv, toJson };
|
|
2520
|
+
export { AnalogClock, Button, ColumnMenu, DEFAULT_PRESETS, DataTable, DateRangePicker, DigitalClock, GradientButton, MadeBy, Pagination, Popover, Spinner, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, TableSearch, TextMorph, TimePicker, TreeNav, TreeNavItem, addDays, addMonths, downloadString, formatMonthYear, formatRange, formatShort, formatTime, fromCsv, fromJson, isBetween, isSameDay, startOfDay, toCsv, toJson };
|
|
2464
2521
|
//# sourceMappingURL=index.js.map
|
|
2465
2522
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/gradient-button/GradientButton.tsx","../src/components/popover/Popover.tsx","../src/components/made-by/MadeBy.tsx","../src/components/text-morph/TextMorph.tsx","../src/components/tree-nav/TreeNav.tsx","../src/components/tree-nav/TreeNavItem.tsx","../src/components/table/Spinner.tsx","../src/components/table/Table.tsx","../src/components/table/TableParts.tsx","../src/components/table-search/TableSearch.tsx","../src/components/pagination/Pagination.tsx","../src/components/date-range-picker/dateUtils.ts","../src/components/date-range-picker/DateRangePicker.tsx","../src/components/time-picker/AnalogClock.tsx","../src/components/time-picker/DigitalClock.tsx","../src/components/time-picker/TimePicker.tsx","../src/components/data-table/ColumnMenu.tsx","../src/components/data-table/useTableLayout.ts","../src/components/data-table/filters.ts","../src/components/data-table/io.ts","../src/components/data-table/DataTable.tsx"],"names":["jsxs","jsx","wrap","forwardRef","TextMorph","useState","useRef","useEffect","Table","TableHeader","TableBody","TableRow","TableHead","TableCell","TableSearch","useMemo","cx","cy","hours12","isAm","pad","useCallback","Fragment"],"mappings":"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","file":"index.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","'use client';\n\nimport {\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport './Popover.css';\n\nexport interface PopoverProps {\n children: ReactNode;\n title?: string;\n align?: 'left' | 'right';\n width?: 'sm' | 'md' | 'lg' | number;\n label?: string;\n defaultOpen?: boolean;\n renderTrigger?: (api: { isOpen: boolean; toggle: () => void }) => ReactNode;\n}\n\nconst InfoIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 16v-5M12 8h.01\" />\n </svg>\n);\n\nexport function Popover({\n children,\n title,\n align = 'right',\n width = 'md',\n label = 'Open menu',\n defaultOpen = false,\n renderTrigger,\n}: PopoverProps) {\n const [open, setOpen] = useState(defaultOpen);\n const wrap = useRef<HTMLDivElement>(null);\n const toggle = () => setOpen((o) => !o);\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 const trigger = renderTrigger ? (\n renderTrigger({ isOpen: open, toggle })\n ) : (\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={label}\n aria-expanded={open}\n className={`royui-popover__trigger ${open ? 'royui-popover__trigger--on' : ''}`}\n >\n <InfoIcon />\n </button>\n );\n\n const widthClass =\n typeof width === 'string' ? `royui-popover__panel--${width}` : '';\n const customWidth =\n typeof width === 'number' ? { width: `${width}px` } : undefined;\n const alignClass = `royui-popover__panel--${align}`;\n\n return (\n <div ref={wrap} className=\"royui-popover\">\n {trigger}\n {open && (\n <div\n className={`royui-popover__panel ${widthClass} ${alignClass}`}\n style={customWidth}\n role=\"dialog\"\n >\n {title && <div className=\"royui-popover__title\">{title}</div>}\n <div className=\"royui-popover__body\">{children}</div>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport {\n forwardRef,\n type AnchorHTMLAttributes,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport './MadeBy.css';\n\nexport type MadeByPosition =\n | 'bottom-right'\n | 'bottom-left'\n | 'top-right'\n | 'top-left';\n\nexport interface MadeByProps\n extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'prefix'> {\n /** Display name shown after the prefix. */\n name: string;\n /** URL opened when the badge is clicked. */\n href: string;\n /** Prefix copy. Defaults to \"Made by\". */\n prefix?: ReactNode;\n /** Viewport anchor. Defaults to \"bottom-right\". */\n position?: MadeByPosition;\n /** Optional leading slot — avatar, mark, emoji, dot. */\n icon?: ReactNode;\n /** Custom font-family for the author name. */\n nameFont?: string;\n /** Font style for the author name. Defaults to \"italic\". */\n nameStyle?: CSSProperties['fontStyle'];\n}\n\nexport const MadeBy = forwardRef<HTMLAnchorElement, MadeByProps>(\n (\n {\n name,\n href,\n prefix = 'Made by',\n position = 'bottom-right',\n icon,\n nameFont,\n nameStyle,\n className = '',\n target = '_blank',\n rel = 'noopener noreferrer',\n ...rest\n },\n ref,\n ) => {\n const classes = [\n 'royui-madeby',\n `royui-madeby--${position}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const nameStyles: CSSProperties = {};\n if (nameFont) nameStyles.fontFamily = nameFont;\n if (nameStyle) nameStyles.fontStyle = nameStyle;\n\n return (\n <a\n ref={ref}\n href={href}\n target={target}\n rel={rel}\n className={classes}\n {...rest}\n >\n {icon && (\n <span className=\"royui-madeby__icon\" aria-hidden>\n {icon}\n </span>\n )}\n <span className=\"royui-madeby__prefix\">{prefix}</span>\n <span\n className=\"royui-madeby__name\"\n style={Object.keys(nameStyles).length ? nameStyles : undefined}\n >\n {name}\n </span>\n </a>\n );\n },\n);\n\nMadeBy.displayName = 'MadeBy';\n","'use client';\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport './TextMorph.css';\n\nexport interface TextMorphProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n /** The current text. When this prop changes, the component diff-types\n from the previously displayed text to the new value. */\n value: string;\n /** Optional renderer for the current intermediate text — handy for\n syntax highlighting, gradient spans, or wrapping each word. Receives\n the partial string at every keystroke during the animation. */\n renderText?: (current: string) => ReactNode;\n /** Per-character typing delay range in ms. Default [30, 60]. */\n typeDelay?: [min: number, max: number];\n /** Per-character backspace delay range in ms. Default [18, 30]. */\n backspaceDelay?: [min: number, max: number];\n /** Characters that get an additional delay (harder to type on a real\n keyboard — punctuation, brackets, symbols). Default /[\\/{}\\-_@]/. */\n hardChars?: RegExp;\n /** Extra delay range for hard chars in ms. Default [30, 65]. */\n hardCharExtraDelay?: [min: number, max: number];\n /** Pause between backspace phase and typing phase, in ms. Default 70. */\n pauseMs?: number;\n /** Skip animation entirely and just swap text. */\n disabled?: boolean;\n}\n\nfunction sleep(ms: number) {\n return new Promise<void>((resolve) => setTimeout(resolve, ms));\n}\n\nfunction findDiff(from: string, to: string) {\n let p = 0;\n const maxP = Math.min(from.length, to.length);\n while (p < maxP && from[p] === to[p]) p++;\n let s = 0;\n while (\n s < from.length - p &&\n s < to.length - p &&\n from[from.length - 1 - s] === to[to.length - 1 - s]\n ) {\n s++;\n }\n return {\n prefix: from.slice(0, p),\n suffix: from.slice(from.length - s),\n oldMid: from.slice(p, from.length - s),\n newMid: to.slice(p, to.length - s),\n };\n}\n\nfunction rand(min: number, max: number) {\n return min + Math.random() * (max - min);\n}\n\nexport const TextMorph = forwardRef<HTMLSpanElement, TextMorphProps>(\n function TextMorph(\n {\n value,\n renderText,\n typeDelay = [30, 60],\n backspaceDelay = [18, 30],\n hardChars = /[\\/{}\\-_@]/,\n hardCharExtraDelay = [30, 65],\n pauseMs = 70,\n disabled = false,\n className = '',\n ...rest\n },\n ref,\n ) {\n const [displayed, setDisplayed] = useState(value);\n const tokenRef = useRef(0);\n const reducedRef = useRef(false);\n const prevValueRef = useRef(value);\n const displayedRef = useRef(value);\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n reducedRef.current = window.matchMedia(\n '(prefers-reduced-motion: reduce)',\n ).matches;\n }\n }, []);\n\n // Keep a ref of the currently shown text so the animation always\n // starts from the latest frame (even if interrupted mid-typing).\n useEffect(() => {\n displayedRef.current = displayed;\n }, [displayed]);\n\n useEffect(() => {\n if (value === prevValueRef.current) return;\n const source = displayedRef.current;\n prevValueRef.current = value;\n\n if (disabled || reducedRef.current) {\n setDisplayed(value);\n return;\n }\n\n const myToken = ++tokenRef.current;\n\n (async () => {\n const { prefix, suffix, oldMid, newMid } = findDiff(source, value);\n\n for (let i = oldMid.length - 1; i >= 0; i--) {\n if (myToken !== tokenRef.current) return;\n setDisplayed(prefix + oldMid.slice(0, i) + suffix);\n await sleep(rand(backspaceDelay[0], backspaceDelay[1]));\n }\n\n if (myToken !== tokenRef.current) return;\n await sleep(pauseMs);\n\n for (let i = 1; i <= newMid.length; i++) {\n if (myToken !== tokenRef.current) return;\n setDisplayed(prefix + newMid.slice(0, i) + suffix);\n const ch = newMid.charAt(i - 1);\n const base = rand(typeDelay[0], typeDelay[1]);\n const extra = hardChars.test(ch)\n ? rand(hardCharExtraDelay[0], hardCharExtraDelay[1])\n : 0;\n await sleep(base + extra);\n }\n })();\n }, [\n value,\n disabled,\n typeDelay,\n backspaceDelay,\n hardChars,\n hardCharExtraDelay,\n pauseMs,\n ]);\n\n return (\n <span\n ref={ref}\n className={`royui-textmorph ${className}`.trim()}\n aria-live=\"polite\"\n {...rest}\n >\n {renderText ? renderText(displayed) : displayed}\n </span>\n );\n },\n);\n","'use client';\n\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n} from 'react';\nimport './TreeNav.css';\n\nexport interface TreeNavProps extends HTMLAttributes<HTMLUListElement> {\n /** Left indent of the branched group, in pixels. Default 24. */\n indent?: number;\n /** Vertical gap between items, in pixels. Default 2. */\n gap?: number;\n}\n\nexport const TreeNav = forwardRef<HTMLUListElement, TreeNavProps>(\n ({ indent = 24, gap = 2, className = '', style, children, ...rest }, ref) => {\n const mergedStyle: CSSProperties = {\n ...style,\n ['--royui-treenav-indent' as string]: `${indent}px`,\n ['--royui-treenav-gap' as string]: `${gap}px`,\n };\n\n const classes = ['royui-treenav', className].filter(Boolean).join(' ');\n\n return (\n <ul ref={ref} className={classes} style={mergedStyle} {...rest}>\n {children}\n </ul>\n );\n },\n);\n\nTreeNav.displayName = 'TreeNav';\n","'use client';\n\nimport {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type AnchorHTMLAttributes,\n type LiHTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nexport interface TreeNavItemProps\n extends Omit<LiHTMLAttributes<HTMLLIElement>, 'children'> {\n /** Link target. Used when asChild is false (default <a> render). */\n href?: string;\n /** Mark this item active. Adds aria-current=\"page\" to the rendered link. */\n active?: boolean;\n /** Render the consumer's element (e.g. next/link, TanStack Link) instead of an <a>. */\n asChild?: boolean;\n /** Hide the triangle tip at the end of the branch. Default false (tip shown). */\n hideTip?: boolean;\n /** Leading icon slot. */\n icon?: ReactNode;\n /** Anchor / link contents. */\n children?: ReactNode;\n /** Forwarded to the inner link element (className, onClick, etc.). */\n linkProps?: Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'children'>;\n}\n\ntype ChildLinkElement = ReactElement<{\n className?: string;\n 'aria-current'?: AnchorHTMLAttributes<HTMLAnchorElement>['aria-current'];\n children?: ReactNode;\n}>;\n\nexport const TreeNavItem = forwardRef<HTMLLIElement, TreeNavItemProps>(\n (\n {\n href,\n active = false,\n asChild = false,\n hideTip = false,\n icon,\n children,\n linkProps,\n className = '',\n ...rest\n },\n ref,\n ) => {\n const itemClasses = [\n 'royui-treenav__item',\n hideTip && 'royui-treenav__item--no-tip',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const linkContent = (\n <>\n {icon && (\n <span className=\"royui-treenav__icon\" aria-hidden>\n {icon}\n </span>\n )}\n <span className=\"royui-treenav__label\">{children}</span>\n </>\n );\n\n let renderedLink: ReactNode;\n\n if (asChild) {\n const onlyChild = Children.only(children) as ChildLinkElement;\n if (!isValidElement(onlyChild)) {\n throw new Error(\n 'TreeNavItem: asChild requires a single React element child.',\n );\n }\n const childClassName = [\n 'royui-treenav__link',\n onlyChild.props.className,\n ]\n .filter(Boolean)\n .join(' ');\n\n renderedLink = cloneElement(onlyChild, {\n className: childClassName,\n ...(active ? { 'aria-current': 'page' as const } : {}),\n });\n } else {\n const { className: linkClassName, ...linkRest } = linkProps ?? {};\n const mergedLinkClass = ['royui-treenav__link', linkClassName]\n .filter(Boolean)\n .join(' ');\n\n renderedLink = (\n <a\n href={href}\n className={mergedLinkClass}\n {...(active ? { 'aria-current': 'page' as const } : {})}\n {...linkRest}\n >\n {linkContent}\n </a>\n );\n }\n\n return (\n <li ref={ref} className={itemClasses} {...rest}>\n <svg\n className=\"royui-treenav__connector\"\n viewBox=\"0 0 20 30\"\n preserveAspectRatio=\"xMinYMid meet\"\n aria-hidden\n >\n {hideTip ? (\n <path\n d=\"M1.25 0 L1.25 7 Q1.25 15.75 11 15.75 L11 14.25 Q2.75 14.25 2.75 7 L2.75 0 Z\"\n fill=\"currentColor\"\n />\n ) : (\n <path\n d=\"M1.25 0 L1.25 7 Q1.25 15.75 10.33 15.75 L10.33 16.94 L14.22 15 L10.33 13.06 L10.33 14.25 Q2.75 14.25 2.75 7 L2.75 0 Z\"\n fill=\"currentColor\"\n />\n )}\n </svg>\n {renderedLink}\n </li>\n );\n },\n);\n\nTreeNavItem.displayName = 'TreeNavItem';\n","'use client';\n\nimport type { CSSProperties } from 'react';\n\nexport interface SpinnerProps {\n size?: number;\n strokeWidth?: number;\n label?: string;\n style?: CSSProperties;\n className?: string;\n}\n\nexport function Spinner({\n size = 16,\n strokeWidth = 2,\n label = 'Loading',\n style,\n className = '',\n}: SpinnerProps) {\n const r = (size - strokeWidth) / 2;\n const c = size / 2;\n const circumference = 2 * Math.PI * r;\n\n return (\n <span\n role=\"status\"\n aria-label={label}\n className={['royui-spinner', className].filter(Boolean).join(' ')}\n style={{ width: size, height: size, ...style }}\n >\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} aria-hidden>\n <circle\n cx={c}\n cy={c}\n r={r}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeOpacity={0.18}\n strokeWidth={strokeWidth}\n />\n <circle\n cx={c}\n cy={c}\n r={r}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={circumference * 0.72}\n transform={`rotate(-90 ${c} ${c})`}\n />\n </svg>\n </span>\n );\n}\n","'use client';\n\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n type TableHTMLAttributes,\n} from 'react';\nimport { Spinner } from './Spinner';\nimport './Table.css';\n\nexport type TableDensity = 'compact' | 'cozy' | 'comfortable';\n\nexport type FontSpec =\n | string\n | {\n family?: string;\n size?: string | number;\n weight?: number | string;\n letterSpacing?: string;\n featureSettings?: string;\n };\n\nexport interface TableProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Rows visible before vertical scroll. Default 7. */\n visibleRows?: number;\n /** Approximate row height in px — drives the scroll cap. Default 44. */\n rowHeight?: number;\n /** Header sticks during scroll. Default true. */\n stickyHeader?: boolean;\n /** Padding scale. Default 'cozy'. */\n density?: TableDensity;\n /** Renders an inline spinner overlay on top of rows. */\n loading?: boolean;\n /** Replaces row area when no rows are present. */\n empty?: ReactNode;\n /**\n * Force every column to fit in the container — disables horizontal scroll\n * and lets the browser distribute width across all visible columns.\n * Cell content wraps onto multiple lines instead of clipping.\n */\n fitColumns?: boolean;\n /** Per-zone fonts. */\n headerFont?: FontSpec;\n rowHeaderFont?: FontSpec;\n cellFont?: FontSpec;\n children?: ReactNode;\n tableProps?: TableHTMLAttributes<HTMLTableElement>;\n /** Show the empty slot. Set explicitly by DataTable; defaults to false. */\n isEmpty?: boolean;\n}\n\nfunction fontVars(prefix: string, spec: FontSpec | undefined): CSSProperties {\n if (!spec) return {};\n const out: Record<string, string> = {};\n if (typeof spec === 'string') {\n out[`${prefix}-font`] = spec;\n return out as CSSProperties;\n }\n if (spec.family) out[`${prefix}-font`] = spec.family;\n if (spec.size != null)\n out[`${prefix}-size`] = typeof spec.size === 'number' ? `${spec.size}px` : spec.size;\n if (spec.weight != null) out[`${prefix}-weight`] = String(spec.weight);\n if (spec.letterSpacing) out[`${prefix}-tracking`] = spec.letterSpacing;\n if (spec.featureSettings) out[`${prefix}-features`] = spec.featureSettings;\n return out as CSSProperties;\n}\n\nexport const Table = forwardRef<HTMLDivElement, TableProps>(function Table(\n {\n visibleRows = 7,\n rowHeight = 44,\n stickyHeader = true,\n density = 'cozy',\n loading = false,\n empty,\n isEmpty = false,\n fitColumns = false,\n headerFont,\n rowHeaderFont,\n cellFont,\n className = '',\n style,\n children,\n tableProps,\n ...rest\n },\n ref,\n) {\n const headerH = 40;\n const maxH = rowHeight * visibleRows + (stickyHeader ? headerH : 0);\n\n const mergedStyle: CSSProperties = {\n ...style,\n ['--royui-table-row-h' as string]: `${rowHeight}px`,\n ['--royui-table-max-h' as string]: `${maxH}px`,\n ...fontVars('--royui-table-header', headerFont),\n ...fontVars('--royui-table-row-header', rowHeaderFont),\n ...fontVars('--royui-table-cell', cellFont),\n };\n\n const classes = [\n 'royui-table',\n `royui-table--${density}`,\n stickyHeader && 'royui-table--sticky',\n loading && 'royui-table--loading',\n fitColumns && 'royui-table--fit',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={ref} className={classes} style={mergedStyle} {...rest}>\n <div className=\"royui-table__scroll\" role=\"region\" aria-label=\"Table\">\n <table className=\"royui-table__table\" {...tableProps}>\n {children}\n </table>\n {isEmpty && !loading && (\n <div className=\"royui-table__empty\" role=\"status\">\n {empty ?? <span>No results</span>}\n </div>\n )}\n {loading && (\n <div className=\"royui-table__loading\" aria-hidden>\n <Spinner size={18} />\n </div>\n )}\n </div>\n </div>\n );\n});\n","'use client';\n\nimport {\n forwardRef,\n type HTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n} from 'react';\n\nexport const TableHeader = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(function TableHeader({ className = '', ...rest }, ref) {\n return (\n <thead\n ref={ref}\n className={['royui-table__thead', className].filter(Boolean).join(' ')}\n {...rest}\n />\n );\n});\n\nexport const TableBody = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(function TableBody({ className = '', ...rest }, ref) {\n return (\n <tbody\n ref={ref}\n className={['royui-table__tbody', className].filter(Boolean).join(' ')}\n {...rest}\n />\n );\n});\n\nexport const TableRow = forwardRef<\n HTMLTableRowElement,\n HTMLAttributes<HTMLTableRowElement>\n>(function TableRow({ className = '', ...rest }, ref) {\n return (\n <tr\n ref={ref}\n className={['royui-table__tr', className].filter(Boolean).join(' ')}\n {...rest}\n />\n );\n});\n\nexport interface TableHeadCellProps extends ThHTMLAttributes<HTMLTableCellElement> {\n align?: 'left' | 'right' | 'center';\n}\n\nexport const TableHead = forwardRef<HTMLTableCellElement, TableHeadCellProps>(\n function TableHead({ className = '', align = 'left', ...rest }, ref) {\n return (\n <th\n ref={ref}\n scope=\"col\"\n className={[\n 'royui-table__th',\n align !== 'left' && `royui-table__th--${align}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n );\n },\n);\n\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n align?: 'left' | 'right' | 'center';\n isRowHeader?: boolean;\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(\n function TableCell({ className = '', align = 'left', isRowHeader, ...rest }, ref) {\n if (isRowHeader) {\n return (\n <th\n ref={ref}\n scope=\"row\"\n className={[\n 'royui-table__row-header',\n align !== 'left' && `royui-table__td--${align}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...(rest as ThHTMLAttributes<HTMLTableCellElement>)}\n />\n );\n }\n return (\n <td\n ref={ref}\n className={[\n 'royui-table__td',\n align !== 'left' && `royui-table__td--${align}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n );\n },\n);\n","'use client';\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ChangeEvent,\n type CSSProperties,\n type InputHTMLAttributes,\n} from 'react';\nimport './TableSearch.css';\n\nexport interface TableSearchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'defaultValue'> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n /** Debounce in ms before onChange fires. Default 0 (synchronous). */\n debounceMs?: number;\n placeholder?: string;\n /** Width in px. Default 260. */\n width?: number | string;\n /** Hide the magnifier dot. */\n hideIndicator?: boolean;\n style?: CSSProperties;\n}\n\nexport const TableSearch = forwardRef<HTMLInputElement, TableSearchProps>(\n function TableSearch(\n {\n value,\n defaultValue,\n onChange,\n debounceMs = 0,\n placeholder = 'Search',\n width = 260,\n hideIndicator,\n className = '',\n style,\n ...rest\n },\n ref,\n ) {\n const controlled = value !== undefined;\n const [internal, setInternal] = useState(defaultValue ?? '');\n const current = controlled ? value! : internal;\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => () => {\n if (timer.current) clearTimeout(timer.current);\n }, []);\n\n const emit = (next: string) => {\n if (!onChange) return;\n if (debounceMs <= 0) {\n onChange(next);\n return;\n }\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => onChange(next), debounceMs);\n };\n\n const handle = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n if (!controlled) setInternal(next);\n emit(next);\n };\n\n const clear = () => {\n if (!controlled) setInternal('');\n if (onChange) onChange('');\n };\n\n return (\n <div\n className={['royui-tablesearch', className].filter(Boolean).join(' ')}\n style={{ width, ...style }}\n >\n {!hideIndicator && <span className=\"royui-tablesearch__dot\" aria-hidden />}\n <input\n ref={ref}\n type=\"text\"\n className=\"royui-tablesearch__input\"\n placeholder={placeholder}\n value={current}\n onChange={handle}\n {...rest}\n />\n {current.length > 0 && (\n <button\n type=\"button\"\n className=\"royui-tablesearch__clear\"\n onClick={clear}\n aria-label=\"Clear search\"\n >\n Clear\n </button>\n )}\n </div>\n );\n },\n);\n","'use client';\n\nimport { useMemo, type CSSProperties } from 'react';\nimport './Pagination.css';\n\nexport interface PaginationProps {\n page: number;\n pageCount: number;\n onPageChange: (page: number) => void;\n /** Pages shown adjacent to the current page. Default 1. */\n siblingCount?: number;\n /** Show Prev / Next text buttons. Default true. */\n showPrevNext?: boolean;\n /** Override the Prev / Next labels. */\n prevLabel?: string;\n nextLabel?: string;\n /** Compact summary like \"Page 3 of 12\" on the left. Default false. */\n showSummary?: boolean;\n summaryRender?: (page: number, pageCount: number) => string;\n className?: string;\n style?: CSSProperties;\n}\n\ntype Cell = number | 'gap';\n\nfunction buildRange(page: number, pageCount: number, sibling: number): Cell[] {\n if (pageCount <= 1) return [1];\n const first = 1;\n const last = pageCount;\n const left = Math.max(page - sibling, first + 1);\n const right = Math.min(page + sibling, last - 1);\n\n const cells: Cell[] = [first];\n if (left > first + 1) cells.push('gap');\n for (let i = left; i <= right; i++) cells.push(i);\n if (right < last - 1) cells.push('gap');\n if (last > first) cells.push(last);\n return cells;\n}\n\nexport function Pagination({\n page,\n pageCount,\n onPageChange,\n siblingCount = 1,\n showPrevNext = true,\n prevLabel = 'Prev',\n nextLabel = 'Next',\n showSummary = false,\n summaryRender,\n className = '',\n style,\n}: PaginationProps) {\n const cells = useMemo(\n () => buildRange(page, pageCount, siblingCount),\n [page, pageCount, siblingCount],\n );\n\n const canPrev = page > 1;\n const canNext = page < pageCount;\n\n const go = (n: number) => {\n if (n < 1 || n > pageCount || n === page) return;\n onPageChange(n);\n };\n\n return (\n <nav\n className={['royui-pagination', className].filter(Boolean).join(' ')}\n style={style}\n aria-label=\"Pagination\"\n >\n {showSummary && (\n <span className=\"royui-pagination__summary\">\n {summaryRender\n ? summaryRender(page, pageCount)\n : `Page ${page} of ${pageCount}`}\n </span>\n )}\n\n <div className=\"royui-pagination__group\">\n {showPrevNext && (\n <button\n type=\"button\"\n className=\"royui-pagination__step\"\n onClick={() => go(page - 1)}\n disabled={!canPrev}\n aria-label=\"Previous page\"\n >\n {prevLabel}\n </button>\n )}\n\n <ul className=\"royui-pagination__pages\">\n {cells.map((cell, i) =>\n cell === 'gap' ? (\n <li key={`gap-${i}`} className=\"royui-pagination__gap\" aria-hidden>\n ·\n </li>\n ) : (\n <li key={cell}>\n <button\n type=\"button\"\n className={[\n 'royui-pagination__page',\n cell === page && 'royui-pagination__page--current',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => go(cell)}\n aria-current={cell === page ? 'page' : undefined}\n aria-label={`Page ${cell}`}\n >\n {cell}\n </button>\n </li>\n ),\n )}\n </ul>\n\n {showPrevNext && (\n <button\n type=\"button\"\n className=\"royui-pagination__step\"\n onClick={() => go(page + 1)}\n disabled={!canNext}\n aria-label=\"Next page\"\n >\n {nextLabel}\n </button>\n )}\n </div>\n </nav>\n );\n}\n","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","'use client';\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\n\nexport type TimeValue = { hours: number; minutes: number };\n\nexport interface AnalogClockProps {\n value: TimeValue;\n onChange: (next: TimeValue) => void;\n hourCycle?: 12 | 24;\n minuteStep?: number;\n /** SVG size in px. Default 220. */\n size?: number;\n}\n\ntype Mode = 'hours' | 'minutes';\n\nfunction angleFromCenter(cx: number, cy: number, px: number, py: number): number {\n const dx = px - cx;\n const dy = py - cy;\n const a = Math.atan2(dy, dx) * (180 / Math.PI) + 90;\n return (a + 360) % 360;\n}\n\nexport function AnalogClock({\n value,\n onChange,\n hourCycle = 24,\n minuteStep = 1,\n size = 220,\n}: AnalogClockProps) {\n const ref = useRef<SVGSVGElement>(null);\n const [mode, setMode] = useState<Mode>('hours');\n const [dragging, setDragging] = useState(false);\n\n const updateFromPointer = useCallback(\n (clientX: number, clientY: number, currentMode: Mode) => {\n const svg = ref.current;\n if (!svg) return;\n const rect = svg.getBoundingClientRect();\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n const a = angleFromCenter(cx, cy, clientX, clientY);\n\n if (currentMode === 'hours') {\n // hours12 is the position on the face (0..11, where 0 = the \"12\" position).\n // Combine with the current AM/PM half so the underlying 24h value preserves\n // whichever half the user is editing.\n const hours12 = Math.round(a / 30) % 12;\n const isAm = value.hours < 12;\n const h24 = isAm ? hours12 : hours12 + 12;\n onChange({ ...value, hours: h24 });\n } else {\n let m = Math.round(a / 6) % 60;\n if (minuteStep > 1) m = Math.round(m / minuteStep) * minuteStep;\n if (m === 60) m = 0;\n onChange({ ...value, minutes: m });\n }\n },\n [minuteStep, onChange, value],\n );\n\n const togglePeriod = () => {\n const next = value.hours < 12 ? value.hours + 12 : value.hours - 12;\n onChange({ ...value, hours: next });\n };\n\n const isAm = value.hours < 12;\n\n useEffect(() => {\n if (!dragging) return;\n const onMove = (e: PointerEvent) => updateFromPointer(e.clientX, e.clientY, mode);\n const onUp = () => setDragging(false);\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n return () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n };\n }, [dragging, mode, updateFromPointer]);\n\n const handlePointerDown = (e: ReactPointerEvent<SVGSVGElement>) => {\n e.preventDefault();\n setDragging(true);\n updateFromPointer(e.clientX, e.clientY, mode);\n };\n\n // visible hour value\n const hours12 =\n hourCycle === 12\n ? value.hours === 0\n ? 12\n : value.hours > 12\n ? value.hours - 12\n : value.hours\n : value.hours % 12 === 0\n ? 12\n : value.hours % 12;\n\n const hourAngle = ((hours12 % 12) + value.minutes / 60) * 30 - 90;\n const minuteAngle = (value.minutes / 60) * 360 - 90;\n\n const r = size / 2;\n const cx = r;\n const cy = r;\n\n // hand lengths\n const hourLen = r * 0.45;\n const minuteLen = r * 0.7;\n const tickOuter = r * 0.92;\n const tickInner = r * 0.86;\n const majorInner = r * 0.82;\n\n const handX = (len: number, deg: number) => cx + len * Math.cos((deg * Math.PI) / 180);\n const handY = (len: number, deg: number) => cy + len * Math.sin((deg * Math.PI) / 180);\n\n return (\n <div className=\"royui-tp-analog\">\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n onPointerDown={handlePointerDown}\n className=\"royui-tp-analog__face\"\n role=\"application\"\n aria-label=\"Analog clock\"\n >\n <circle\n cx={cx}\n cy={cy}\n r={r - 1}\n className=\"royui-tp-analog__bezel\"\n />\n\n {/* minute ticks */}\n {Array.from({ length: 60 }).map((_, i) => {\n const angle = (i * 6 - 90) * (Math.PI / 180);\n const isMajor = i % 5 === 0;\n const inner = isMajor ? majorInner : tickInner;\n return (\n <line\n key={i}\n x1={cx + inner * Math.cos(angle)}\n y1={cy + inner * Math.sin(angle)}\n x2={cx + tickOuter * Math.cos(angle)}\n y2={cy + tickOuter * Math.sin(angle)}\n className={isMajor ? 'royui-tp-analog__tick--major' : 'royui-tp-analog__tick'}\n />\n );\n })}\n\n {/* hour numbers at 12, 3, 6, 9 */}\n {[12, 3, 6, 9].map((n) => {\n const idx = n % 12;\n const angle = (idx * 30 - 90) * (Math.PI / 180);\n const rr = r * 0.72;\n return (\n <text\n key={n}\n x={cx + rr * Math.cos(angle)}\n y={cy + rr * Math.sin(angle)}\n dy=\"0.34em\"\n textAnchor=\"middle\"\n className=\"royui-tp-analog__numeral\"\n >\n {n}\n </text>\n );\n })}\n\n {/* hour hand */}\n <line\n x1={cx}\n y1={cy}\n x2={handX(hourLen, hourAngle)}\n y2={handY(hourLen, hourAngle)}\n className={`royui-tp-analog__hand royui-tp-analog__hand--hour ${\n mode === 'hours' ? 'royui-tp-analog__hand--active' : ''\n }`}\n onPointerDown={(e) => {\n e.stopPropagation();\n setMode('hours');\n setDragging(true);\n }}\n />\n\n {/* minute hand */}\n <line\n x1={cx}\n y1={cy}\n x2={handX(minuteLen, minuteAngle)}\n y2={handY(minuteLen, minuteAngle)}\n className={`royui-tp-analog__hand royui-tp-analog__hand--minute ${\n mode === 'minutes' ? 'royui-tp-analog__hand--active' : ''\n }`}\n onPointerDown={(e) => {\n e.stopPropagation();\n setMode('minutes');\n setDragging(true);\n }}\n />\n\n <circle cx={cx} cy={cy} r={3.5} className=\"royui-tp-analog__pin\" />\n </svg>\n\n <div className=\"royui-tp-analog__modes\">\n <button\n type=\"button\"\n className={[\n 'royui-tp-analog__mode',\n mode === 'hours' && 'royui-tp-analog__mode--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setMode('hours')}\n >\n Hours\n </button>\n <button\n type=\"button\"\n className={[\n 'royui-tp-analog__mode',\n mode === 'minutes' && 'royui-tp-analog__mode--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setMode('minutes')}\n >\n Minutes\n </button>\n <div className=\"royui-tp-analog__period\" role=\"group\" aria-label=\"Day half\">\n <button\n type=\"button\"\n className={[\n 'royui-tp-analog__period-btn',\n isAm && 'royui-tp-analog__period-btn--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => {\n if (!isAm) togglePeriod();\n }}\n aria-pressed={isAm}\n >\n AM\n </button>\n <button\n type=\"button\"\n className={[\n 'royui-tp-analog__period-btn',\n !isAm && 'royui-tp-analog__period-btn--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => {\n if (isAm) togglePeriod();\n }}\n aria-pressed={!isAm}\n >\n PM\n </button>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useRef, type KeyboardEvent, type WheelEvent } from 'react';\nimport type { TimeValue } from './AnalogClock';\n\nexport interface DigitalClockProps {\n value: TimeValue;\n onChange: (next: TimeValue) => void;\n hourCycle?: 12 | 24;\n minuteStep?: number;\n}\n\nfunction pad(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nfunction wrap(n: number, max: number): number {\n return ((n % max) + max) % max;\n}\n\nexport function DigitalClock({\n value,\n onChange,\n hourCycle = 24,\n minuteStep = 1,\n}: DigitalClockProps) {\n const hourBoundary = hourCycle === 12 ? 12 : 24;\n\n const displayHour =\n hourCycle === 12\n ? value.hours % 12 === 0\n ? 12\n : value.hours % 12\n : value.hours;\n\n const isAm = value.hours < 12;\n\n const setDisplayHour = (next: number) => {\n if (hourCycle === 24) {\n onChange({ ...value, hours: wrap(next, 24) });\n return;\n }\n let h = next;\n if (h <= 0) h = 12;\n if (h > 12) h = 1;\n const h24 = isAm ? (h === 12 ? 0 : h) : h === 12 ? 12 : h + 12;\n onChange({ ...value, hours: h24 });\n };\n\n const setMinutes = (next: number) => {\n const stepped = Math.round(next / minuteStep) * minuteStep;\n onChange({ ...value, minutes: wrap(stepped, 60) });\n };\n\n const setAm = () => {\n if (isAm) return;\n onChange({ ...value, hours: value.hours - 12 });\n };\n const setPm = () => {\n if (!isAm) return;\n onChange({ ...value, hours: value.hours + 12 });\n };\n\n return (\n <div className=\"royui-tp-digital\">\n <div className=\"royui-tp-digital__row\">\n <Segment\n label=\"Hours\"\n value={pad(displayHour)}\n onWheelStep={(d) => setDisplayHour(displayHour + d)}\n onArrow={(d) => setDisplayHour(displayHour + d)}\n max={hourBoundary}\n />\n <span className=\"royui-tp-digital__sep\" aria-hidden>\n :\n </span>\n <Segment\n label=\"Minutes\"\n value={pad(value.minutes)}\n onWheelStep={(d) => setMinutes(value.minutes + d * minuteStep)}\n onArrow={(d) => setMinutes(value.minutes + d * minuteStep)}\n max={60}\n />\n </div>\n <div className=\"royui-tp-digital__period\" role=\"group\" aria-label=\"Day half\">\n <button\n type=\"button\"\n className={[\n 'royui-tp-digital__period-btn',\n isAm && 'royui-tp-digital__period-btn--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={setAm}\n aria-pressed={isAm}\n >\n AM\n </button>\n <button\n type=\"button\"\n className={[\n 'royui-tp-digital__period-btn',\n !isAm && 'royui-tp-digital__period-btn--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={setPm}\n aria-pressed={!isAm}\n >\n PM\n </button>\n </div>\n <div className=\"royui-tp-digital__hint\">\n Scroll or use arrow keys\n </div>\n </div>\n );\n}\n\nfunction Segment({\n label,\n value,\n onWheelStep,\n onArrow,\n max,\n}: {\n label: string;\n value: string;\n onWheelStep: (delta: 1 | -1) => void;\n onArrow: (delta: 1 | -1) => void;\n max: number;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n\n const handleWheel = (e: WheelEvent<HTMLDivElement>) => {\n e.preventDefault();\n onWheelStep(e.deltaY > 0 ? 1 : -1);\n };\n\n const handleKey = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'ArrowUp' || e.key === 'ArrowRight') {\n e.preventDefault();\n onArrow(1);\n } else if (e.key === 'ArrowDown' || e.key === 'ArrowLeft') {\n e.preventDefault();\n onArrow(-1);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"spinbutton\"\n tabIndex={0}\n aria-label={label}\n aria-valuetext={value}\n aria-valuemax={max}\n className=\"royui-tp-digital__seg\"\n onWheel={handleWheel}\n onKeyDown={handleKey}\n >\n {value}\n </div>\n );\n}\n","'use client';\n\nimport {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport { AnalogClock, type TimeValue } from './AnalogClock';\nimport { DigitalClock } from './DigitalClock';\nimport './TimePicker.css';\n\nexport type TimePickerVariant = 'analog' | 'digital';\n\nexport interface TimePickerProps {\n value?: TimeValue | null;\n defaultValue?: TimeValue | null;\n onChange?: (next: TimeValue) => void;\n /** Picker style. Default 'analog'. */\n variant?: TimePickerVariant;\n /** Allow the user to switch between variants. Default true. */\n switchable?: boolean;\n hourCycle?: 12 | 24;\n minuteStep?: number;\n placeholder?: string;\n align?: 'left' | 'right';\n className?: string;\n style?: CSSProperties;\n triggerLabel?: ReactNode;\n disabled?: boolean;\n}\n\nfunction pad(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nexport function formatTime(t: TimeValue | null | undefined, hourCycle: 12 | 24 = 24): string {\n if (!t) return '';\n if (hourCycle === 24) return `${pad(t.hours)}:${pad(t.minutes)}`;\n const h = t.hours % 12 === 0 ? 12 : t.hours % 12;\n const ampm = t.hours < 12 ? 'AM' : 'PM';\n return `${pad(h)}:${pad(t.minutes)} ${ampm}`;\n}\n\nexport function TimePicker({\n value,\n defaultValue,\n onChange,\n variant = 'analog',\n switchable = true,\n hourCycle = 24,\n minuteStep = 1,\n placeholder = 'Pick a time',\n align = 'left',\n className = '',\n style,\n triggerLabel,\n disabled,\n}: TimePickerProps) {\n const controlled = value !== undefined;\n const [internal, setInternal] = useState<TimeValue | null>(defaultValue ?? null);\n const current = controlled ? value : internal;\n\n const [open, setOpen] = useState(false);\n const [mode, setMode] = useState<TimePickerVariant>(variant);\n const [draft, setDraft] = useState<TimeValue>(current ?? { hours: 12, minutes: 0 });\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) setDraft(current ?? { hours: new Date().getHours(), minutes: 0 });\n }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n setMode(variant);\n }, [variant]);\n\n const commit = (next: TimeValue) => {\n if (!controlled) setInternal(next);\n onChange?.(next);\n };\n\n const setNow = () => {\n const now = new Date();\n setDraft({ hours: now.getHours(), minutes: now.getMinutes() });\n };\n\n const apply = () => {\n commit(draft);\n setOpen(false);\n };\n\n return (\n <div\n ref={wrap}\n className={['royui-tp', className].filter(Boolean).join(' ')}\n style={style}\n >\n <button\n type=\"button\"\n className=\"royui-tp__trigger\"\n onClick={() => !disabled && setOpen((o) => !o)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n disabled={disabled}\n >\n <span className=\"royui-tp__trigger-dot\" aria-hidden />\n <span className=\"royui-tp__trigger-label\">\n {triggerLabel ?? (formatTime(current ?? null, hourCycle) || placeholder)}\n </span>\n </button>\n\n {open && (\n <div\n className={`royui-tp__panel royui-tp__panel--${align}`}\n role=\"dialog\"\n aria-label=\"Choose time\"\n >\n <div className=\"royui-tp__head\">\n <div className=\"royui-tp__readout\">\n {formatTime(draft, hourCycle)}\n </div>\n {switchable && (\n <div className=\"royui-tp__variants\" role=\"tablist\">\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === 'analog'}\n className={[\n 'royui-tp__variant',\n mode === 'analog' && 'royui-tp__variant--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setMode('analog')}\n >\n Analog\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === 'digital'}\n className={[\n 'royui-tp__variant',\n mode === 'digital' && 'royui-tp__variant--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setMode('digital')}\n >\n Digital\n </button>\n </div>\n )}\n </div>\n\n <div className=\"royui-tp__body\">\n {mode === 'analog' ? (\n <AnalogClock\n value={draft}\n onChange={setDraft}\n hourCycle={hourCycle}\n minuteStep={minuteStep}\n />\n ) : (\n <DigitalClock\n value={draft}\n onChange={setDraft}\n hourCycle={hourCycle}\n minuteStep={minuteStep}\n />\n )}\n </div>\n\n <div className=\"royui-tp__foot\">\n <button type=\"button\" className=\"royui-tp__ghost\" onClick={setNow}>\n Now\n </button>\n <button type=\"button\" className=\"royui-tp__primary\" onClick={apply}>\n Apply\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport type { TimeValue };\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport type { Column, TableLayout } from './types';\n\nexport interface ColumnMenuProps<T> {\n columns: Column<T>[];\n layout: TableLayout;\n onToggle: (key: string) => void;\n onReset: () => void;\n}\n\nexport function ColumnMenu<T>({\n columns,\n layout,\n onToggle,\n onReset,\n}: ColumnMenuProps<T>) {\n const [open, setOpen] = useState(false);\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 const hiddenCount = layout.hidden.length;\n\n return (\n <div className=\"royui-dt-colmenu\" ref={wrap}>\n <button\n type=\"button\"\n className=\"royui-dt-colmenu__trigger\"\n onClick={() => setOpen((o) => !o)}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n >\n Columns\n </button>\n {hiddenCount > 0 && (\n <button\n type=\"button\"\n className=\"royui-dt-colmenu__chip\"\n onClick={() => setOpen(true)}\n >\n {hiddenCount} hidden\n </button>\n )}\n\n {open && (\n <div className=\"royui-dt-colmenu__panel\" role=\"menu\">\n <div className=\"royui-dt-colmenu__head\">\n <span className=\"royui-dt-colmenu__title\">Columns</span>\n <button\n type=\"button\"\n className=\"royui-dt-colmenu__reset\"\n onClick={() => {\n onReset();\n }}\n >\n Reset\n </button>\n </div>\n <ul className=\"royui-dt-colmenu__list\">\n {columns.map((c) => {\n const isHidden = layout.hidden.includes(c.key);\n const disabled = c.hideable === false;\n return (\n <li key={c.key}>\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={!isHidden}\n className={[\n 'royui-dt-colmenu__row',\n isHidden && 'royui-dt-colmenu__row--off',\n disabled && 'royui-dt-colmenu__row--locked',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => !disabled && onToggle(c.key)}\n disabled={disabled}\n >\n <span\n className={[\n 'royui-dt-colmenu__dot',\n !isHidden && 'royui-dt-colmenu__dot--on',\n ]\n .filter(Boolean)\n .join(' ')}\n aria-hidden\n />\n <span className=\"royui-dt-colmenu__label\">{c.header}</span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { Column, TableLayout } from './types';\n\nfunction defaultLayout<T>(columns: Column<T>[]): TableLayout {\n return {\n order: columns.map((c) => c.key),\n sizes: columns.reduce<Record<string, number>>((acc, c) => {\n if (c.defaultWidth != null) acc[c.key] = c.defaultWidth;\n return acc;\n }, {}),\n hidden: columns.filter((c) => c.defaultHidden).map((c) => c.key),\n };\n}\n\nfunction loadLayout(key: string | undefined): TableLayout | null {\n if (!key || typeof window === 'undefined') return null;\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return null;\n return JSON.parse(raw) as TableLayout;\n } catch {\n return null;\n }\n}\n\nfunction saveLayout(key: string | undefined, layout: TableLayout): void {\n if (!key || typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, JSON.stringify(layout));\n } catch {\n // ignore\n }\n}\n\nexport function useTableLayout<T>(columns: Column<T>[], storageKey?: string) {\n const initial = useMemo<TableLayout>(() => {\n return loadLayout(storageKey) ?? defaultLayout(columns);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [layout, setLayout] = useState<TableLayout>(initial);\n\n useEffect(() => {\n // reconcile if columns change: drop unknown keys, append new ones at the end\n setLayout((prev) => {\n const known = new Set(columns.map((c) => c.key));\n const order = prev.order.filter((k) => known.has(k));\n columns.forEach((c) => {\n if (!order.includes(c.key)) order.push(c.key);\n });\n const sizes: Record<string, number> = {};\n Object.entries(prev.sizes).forEach(([k, v]) => {\n if (known.has(k)) sizes[k] = v;\n });\n const hidden = prev.hidden.filter((k) => known.has(k));\n return { order, sizes, hidden };\n });\n }, [columns]);\n\n useEffect(() => {\n saveLayout(storageKey, layout);\n }, [layout, storageKey]);\n\n const orderedColumns = useMemo(() => {\n const pinnedLeft = columns.filter((c) => c.pinned === 'left');\n const pinnedRight = columns.filter((c) => c.pinned === 'right');\n const pinnedKeys = new Set(\n [...pinnedLeft, ...pinnedRight].map((c) => c.key),\n );\n const rest = layout.order\n .filter((k) => !pinnedKeys.has(k))\n .map((k) => columns.find((c) => c.key === k))\n .filter(Boolean) as Column<T>[];\n return [...pinnedLeft, ...rest, ...pinnedRight];\n }, [columns, layout.order]);\n\n const visibleColumns = useMemo(\n () => orderedColumns.filter((c) => !layout.hidden.includes(c.key)),\n [orderedColumns, layout.hidden],\n );\n\n const reorder = useCallback((key: string, toIndex: number) => {\n setLayout((prev) => {\n const order = [...prev.order];\n const from = order.indexOf(key);\n if (from === -1 || from === toIndex) return prev;\n const item = order.splice(from, 1)[0];\n if (item === undefined) return prev;\n const insertAt = toIndex > from ? toIndex - 1 : toIndex;\n order.splice(Math.max(0, Math.min(insertAt, order.length)), 0, item);\n return { ...prev, order };\n });\n }, []);\n\n const resize = useCallback((key: string, px: number | null) => {\n setLayout((prev) => {\n const sizes = { ...prev.sizes };\n if (px == null) delete sizes[key];\n else sizes[key] = Math.max(40, Math.round(px));\n return { ...prev, sizes };\n });\n }, []);\n\n const toggleHidden = useCallback((key: string) => {\n setLayout((prev) => {\n const hidden = prev.hidden.includes(key)\n ? prev.hidden.filter((k) => k !== key)\n : [...prev.hidden, key];\n return { ...prev, hidden };\n });\n }, []);\n\n const reset = useCallback(() => {\n setLayout(defaultLayout(columns));\n }, [columns]);\n\n return {\n layout,\n orderedColumns,\n visibleColumns,\n reorder,\n resize,\n toggleHidden,\n reset,\n };\n}\n","import type { Column, FilterState, SortDir } from './types';\nimport { isBetween, startOfDay } from '../date-range-picker';\n\nexport function defaultSearchPredicate<T>(\n row: T,\n query: string,\n columns: Column<T>[],\n): boolean {\n if (!query) return true;\n const q = query.toLowerCase();\n return columns.some((c) => {\n const v = c.accessor(row);\n if (v == null) return false;\n const s = v instanceof Date ? v.toLocaleString() : String(v);\n return s.toLowerCase().includes(q);\n });\n}\n\nexport function applyFilters<T>(\n rows: T[],\n columns: Column<T>[],\n filters: FilterState,\n cfg: {\n dateColumn?: string;\n timeColumn?: string;\n timeTolerance?: number;\n searchPredicate?: (row: T, q: string, cols: Column<T>[]) => boolean;\n },\n): T[] {\n const searchFn = cfg.searchPredicate ?? defaultSearchPredicate;\n\n return rows.filter((row) => {\n if (filters.search && !searchFn(row, filters.search, columns)) return false;\n\n if (cfg.dateColumn && (filters.dateRange.from || filters.dateRange.to)) {\n const col = columns.find((c) => c.key === cfg.dateColumn);\n if (col) {\n const raw = col.accessor(row);\n const d = raw instanceof Date ? raw : raw ? new Date(raw as string | number) : null;\n if (!d || isNaN(d.getTime())) return false;\n const day = startOfDay(d);\n const from = filters.dateRange.from ?? day;\n const to = filters.dateRange.to ?? filters.dateRange.from ?? day;\n if (!isBetween(day, startOfDay(from), startOfDay(to))) return false;\n }\n }\n\n if (cfg.timeColumn && filters.time) {\n const col = columns.find((c) => c.key === cfg.timeColumn);\n if (col) {\n const raw = col.accessor(row);\n const d = raw instanceof Date ? raw : raw ? new Date(raw as string | number) : null;\n if (!d || isNaN(d.getTime())) return false;\n const rowMin = d.getHours() * 60 + d.getMinutes();\n const filterMin = filters.time.hours * 60 + filters.time.minutes;\n const tol = cfg.timeTolerance ?? 0;\n if (Math.abs(rowMin - filterMin) > tol) return false;\n }\n }\n\n return true;\n });\n}\n\nexport function applySort<T>(\n rows: T[],\n columns: Column<T>[],\n sort: { key: string; dir: SortDir } | null,\n): T[] {\n if (!sort || !sort.dir) return rows;\n const col = columns.find((c) => c.key === sort.key);\n if (!col) return rows;\n const dirMul = sort.dir === 'asc' ? 1 : -1;\n const getter = col.sortBy ?? col.accessor;\n return [...rows].sort((a, b) => {\n const av = getter(a) as string | number | Date;\n const bv = getter(b) as string | number | Date;\n if (av == null && bv == null) return 0;\n if (av == null) return 1;\n if (bv == null) return -1;\n if (av instanceof Date && bv instanceof Date) {\n return (av.getTime() - bv.getTime()) * dirMul;\n }\n if (typeof av === 'number' && typeof bv === 'number') {\n return (av - bv) * dirMul;\n }\n return String(av).localeCompare(String(bv)) * dirMul;\n });\n}\n\nexport function paginate<T>(rows: T[], page: number, pageSize: number): T[] {\n const start = (page - 1) * pageSize;\n return rows.slice(start, start + pageSize);\n}\n","import type { Column } from './types';\n\n/* ────────────────────────────────────────────────────────────\n CSV (RFC 4180)\n ──────────────────────────────────────────────────────────── */\n\nfunction csvEscape(v: unknown): string {\n if (v == null) return '';\n const s = typeof v === 'string' ? v : v instanceof Date ? v.toISOString() : String(v);\n if (/[\",\\n\\r]/.test(s)) {\n return `\"${s.replace(/\"/g, '\"\"')}\"`;\n }\n return s;\n}\n\nexport function toCsv<T>(rows: T[], cols: Column<T>[]): string {\n const visible = cols.filter((c) => !c.defaultHidden);\n const header = visible.map((c) => csvEscape(c.header)).join(',');\n const body = rows\n .map((row) =>\n visible.map((c) => csvEscape(c.accessor(row))).join(','),\n )\n .join('\\n');\n return body ? `${header}\\n${body}` : header;\n}\n\nexport function fromCsv(text: string): Record<string, string>[] {\n const rows: string[][] = [];\n let cur: string[] = [];\n let field = '';\n let i = 0;\n let inQuotes = false;\n const len = text.length;\n\n while (i < len) {\n const ch = text[i];\n if (inQuotes) {\n if (ch === '\"') {\n if (text[i + 1] === '\"') {\n field += '\"';\n i += 2;\n continue;\n }\n inQuotes = false;\n i++;\n continue;\n }\n field += ch;\n i++;\n continue;\n }\n if (ch === '\"') {\n inQuotes = true;\n i++;\n continue;\n }\n if (ch === ',') {\n cur.push(field);\n field = '';\n i++;\n continue;\n }\n if (ch === '\\r') {\n i++;\n continue;\n }\n if (ch === '\\n') {\n cur.push(field);\n rows.push(cur);\n cur = [];\n field = '';\n i++;\n continue;\n }\n field += ch;\n i++;\n }\n if (field.length > 0 || cur.length > 0) {\n cur.push(field);\n rows.push(cur);\n }\n\n if (rows.length === 0) return [];\n const head = rows[0] ?? [];\n const body = rows.slice(1);\n return body.map((r) => {\n const obj: Record<string, string> = {};\n head.forEach((h, idx) => {\n obj[h] = r[idx] ?? '';\n });\n return obj;\n });\n}\n\n/* ────────────────────────────────────────────────────────────\n JSON\n ──────────────────────────────────────────────────────────── */\n\nexport function toJson<T>(rows: T[], cols: Column<T>[]): string {\n const visible = cols.filter((c) => !c.defaultHidden);\n const out = rows.map((row) => {\n const obj: Record<string, unknown> = {};\n visible.forEach((c) => {\n obj[c.key] = c.accessor(row);\n });\n return obj;\n });\n return JSON.stringify(out, null, 2);\n}\n\nexport function fromJson<T>(text: string): T[] {\n const parsed = JSON.parse(text);\n if (!Array.isArray(parsed)) {\n throw new Error('Expected a JSON array of rows');\n }\n return parsed as T[];\n}\n\n/* ────────────────────────────────────────────────────────────\n Download trigger\n ──────────────────────────────────────────────────────────── */\n\nexport function downloadString(text: string, filename: string, mime: string): void {\n if (typeof window === 'undefined') return;\n const blob = new Blob([text], { type: mime });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\n","'use client';\n\nimport {\n useCallback,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DragEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n type FontSpec,\n} from '../table';\nimport { TableSearch } from '../table-search';\nimport { Pagination } from '../pagination';\nimport { DateRangePicker } from '../date-range-picker';\nimport type { DateRange } from '../date-range-picker';\nimport { TimePicker, type TimeValue } from '../time-picker';\nimport { ColumnMenu } from './ColumnMenu';\nimport { useTableLayout } from './useTableLayout';\nimport { applyFilters, applySort, paginate } from './filters';\nimport { downloadString, toCsv, toJson, fromCsv, fromJson } from './io';\nimport type {\n Column,\n DataTableProps,\n FilterState,\n SortDir,\n} from './types';\nimport './DataTable.css';\n\nfunction fontStyleFor(spec: FontSpec | undefined): CSSProperties | undefined {\n if (!spec) return undefined;\n if (typeof spec === 'string') return { fontFamily: spec };\n const s: CSSProperties = {};\n if (spec.family) s.fontFamily = spec.family;\n if (spec.size != null)\n s.fontSize = typeof spec.size === 'number' ? `${spec.size}px` : spec.size;\n if (spec.weight != null) s.fontWeight = spec.weight as number;\n if (spec.letterSpacing) s.letterSpacing = spec.letterSpacing;\n if (spec.featureSettings) s.fontFeatureSettings = spec.featureSettings;\n return s;\n}\n\nfunction renderCellValue(value: unknown, type?: Column<unknown>['type']): string {\n if (value == null) return '';\n if (value instanceof Date) {\n if (type === 'time') {\n return value.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n if (type === 'date') {\n return value.toLocaleDateString();\n }\n return value.toLocaleString();\n }\n return String(value);\n}\n\nexport function DataTable<T>({\n data,\n columns,\n getRowId,\n visibleRows = 7,\n rowHeight = 44,\n stickyHeader = true,\n density = 'cozy',\n loading,\n empty,\n fitColumns = false,\n search,\n dateFilter,\n timeFilter,\n pagination,\n reorderable = true,\n resizable = true,\n columnMenu = true,\n dataIO,\n headerFont,\n rowHeaderFont,\n cellFont,\n storageKey,\n className = '',\n toolbarExtras,\n}: DataTableProps<T>) {\n const {\n layout,\n orderedColumns,\n visibleColumns,\n reorder,\n resize,\n toggleHidden,\n reset,\n } = useTableLayout(columns, storageKey);\n\n /* ── filter state ─────────────────────────────────────── */\n const [filters, setFilters] = useState<FilterState>({\n search: '',\n dateRange: { from: null, to: null },\n time: null,\n });\n const [sort, setSort] = useState<{ key: string; dir: SortDir } | null>(null);\n const pageSize = pagination === false ? Infinity : pagination?.pageSize ?? 25;\n const [page, setPage] = useState(1);\n\n /* ── pipeline ─────────────────────────────────────────── */\n const filtered = useMemo(\n () =>\n applyFilters(data, columns, filters, {\n dateColumn: dateFilter?.column,\n timeColumn: timeFilter?.column,\n timeTolerance: timeFilter?.toleranceMinutes,\n searchPredicate: search?.predicate,\n }),\n [data, columns, filters, dateFilter?.column, timeFilter?.column, timeFilter?.toleranceMinutes, search?.predicate],\n );\n\n const sorted = useMemo(() => applySort(filtered, columns, sort), [filtered, columns, sort]);\n\n const pageCount = pagination === false ? 1 : Math.max(1, Math.ceil(sorted.length / pageSize));\n const currentPage = Math.min(page, pageCount);\n\n const pageRows = useMemo(\n () => (pagination === false ? sorted : paginate(sorted, currentPage, pageSize)),\n [pagination, sorted, currentPage, pageSize],\n );\n\n /* ── column drag reorder ──────────────────────────────── */\n const [dragKey, setDragKey] = useState<string | null>(null);\n const [dropIndex, setDropIndex] = useState<number | null>(null);\n\n const onDragStart = (e: DragEvent<HTMLTableCellElement>, key: string) => {\n if (!reorderable) return;\n setDragKey(key);\n e.dataTransfer.effectAllowed = 'move';\n try {\n e.dataTransfer.setData('text/plain', key);\n } catch {\n /* IE/Safari quirks */\n }\n };\n\n const onDragOver = (e: DragEvent<HTMLTableCellElement>, idx: number) => {\n if (!reorderable || !dragKey) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n const rect = e.currentTarget.getBoundingClientRect();\n const isRight = e.clientX - rect.left > rect.width / 2;\n setDropIndex(idx + (isRight ? 1 : 0));\n };\n\n const onDrop = (e: DragEvent<HTMLTableCellElement>) => {\n if (!reorderable || !dragKey || dropIndex == null) return;\n e.preventDefault();\n reorder(dragKey, dropIndex);\n setDragKey(null);\n setDropIndex(null);\n };\n\n const onDragEnd = () => {\n setDragKey(null);\n setDropIndex(null);\n };\n\n /* ── column resize ────────────────────────────────────── */\n const resizingKey = useRef<string | null>(null);\n const resizeStartX = useRef(0);\n const resizeStartW = useRef(0);\n\n const beginResize = (\n e: ReactPointerEvent<HTMLSpanElement>,\n key: string,\n ) => {\n if (!resizable) return;\n e.stopPropagation();\n e.preventDefault();\n const th = (e.currentTarget.parentElement as HTMLElement) ?? null;\n const startW = th ? th.getBoundingClientRect().width : 120;\n resizingKey.current = key;\n resizeStartX.current = e.clientX;\n resizeStartW.current = startW;\n window.addEventListener('pointermove', onResizeMove);\n window.addEventListener('pointerup', endResize);\n };\n\n const onResizeMove = (e: PointerEvent) => {\n if (!resizingKey.current) return;\n const dx = e.clientX - resizeStartX.current;\n const col = columns.find((c) => c.key === resizingKey.current);\n const min = col?.minWidth ?? 80;\n const max = col?.maxWidth ?? 2000;\n const next = Math.max(min, Math.min(max, resizeStartW.current + dx));\n resize(resizingKey.current, next);\n };\n\n const endResize = () => {\n resizingKey.current = null;\n window.removeEventListener('pointermove', onResizeMove);\n window.removeEventListener('pointerup', endResize);\n };\n\n const doubleClickReset = (key: string) => resize(key, null);\n\n /* ── sort handler ─────────────────────────────────────── */\n const cycleSort = useCallback((key: string) => {\n setSort((prev) => {\n if (!prev || prev.key !== key) return { key, dir: 'asc' };\n if (prev.dir === 'asc') return { key, dir: 'desc' };\n return null;\n });\n }, []);\n\n /* ── data IO ──────────────────────────────────────────── */\n const fileInput = useRef<HTMLInputElement>(null);\n const [ioFlash, setIoFlash] = useState<string | null>(null);\n const flashTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const flash = (text: string, ms = 1400) => {\n if (flashTimer.current) clearTimeout(flashTimer.current);\n setIoFlash(text);\n flashTimer.current = setTimeout(() => setIoFlash(null), ms);\n };\n\n const exportRows = (format: 'csv' | 'json') => {\n if (!dataIO?.export) return;\n const scope = dataIO.export.scope ?? 'filtered';\n let rows: T[];\n if (scope === 'all') rows = data;\n else if (scope === 'page') rows = pageRows;\n else rows = sorted;\n\n const cols = visibleColumns;\n const text = dataIO.export.serialize\n ? dataIO.export.serialize(rows, cols, format)\n : format === 'csv'\n ? toCsv(rows, cols)\n : toJson(rows, cols);\n\n const baseName =\n typeof dataIO.export.filename === 'function'\n ? dataIO.export.filename()\n : dataIO.export.filename ?? 'table-export';\n const filename = `${baseName}.${format}`;\n const mime = format === 'csv' ? 'text/csv;charset=utf-8' : 'application/json';\n downloadString(text, filename, mime);\n flash('Exported');\n };\n\n const onPickFile = async (file: File) => {\n if (!dataIO?.import) return;\n const text = await file.text();\n try {\n const parsed = dataIO.import.parse\n ? await dataIO.import.parse(text, file)\n : file.name.endsWith('.json')\n ? (fromJson(text) as T[])\n : (fromCsv(text) as unknown as T[]);\n dataIO.import.onImport(parsed as T[], {\n mode: dataIO.import.mode ?? 'replace',\n file,\n });\n flash(`Imported ${parsed.length} ${parsed.length === 1 ? 'row' : 'rows'}`);\n } catch (err) {\n dataIO.import.onError?.(err, file);\n flash(\"Couldn't read file\", 2000);\n }\n };\n\n /* ── render ───────────────────────────────────────────── */\n\n const showToolbar =\n search?.enabled ||\n !!dateFilter ||\n !!timeFilter ||\n columnMenu ||\n !!dataIO?.export?.enabled ||\n !!dataIO?.import?.enabled ||\n !!toolbarExtras;\n\n const exportFormats = dataIO?.export?.formats ?? ['csv', 'json'];\n const [exportMenuOpen, setExportMenuOpen] = useState(false);\n\n return (\n <div className={['royui-dt', className].filter(Boolean).join(' ')}>\n {showToolbar && (\n <div className=\"royui-dt__toolbar\">\n <div className=\"royui-dt__toolbar-left\">\n {search?.enabled && (\n <TableSearch\n value={filters.search}\n onChange={(v) => {\n setFilters((f) => ({ ...f, search: v }));\n setPage(1);\n }}\n placeholder={search.placeholder}\n debounceMs={search.debounceMs}\n />\n )}\n {dateFilter && (\n <DateRangePicker\n value={filters.dateRange}\n onChange={(r) => {\n setFilters((f) => ({ ...f, dateRange: r }));\n setPage(1);\n }}\n monthsVisible={dateFilter.monthsVisible ?? 2}\n placeholder={dateFilter.placeholder ?? 'Date range'}\n />\n )}\n {timeFilter && (\n <TimePicker\n value={filters.time}\n onChange={(t: TimeValue) => {\n setFilters((f) => ({ ...f, time: t }));\n setPage(1);\n }}\n variant={timeFilter.variant ?? 'analog'}\n hourCycle={timeFilter.hourCycle ?? 24}\n placeholder={timeFilter.placeholder ?? 'Time'}\n />\n )}\n </div>\n\n <div className=\"royui-dt__toolbar-right\">\n {toolbarExtras}\n {columnMenu && (\n <ColumnMenu\n columns={orderedColumns}\n layout={layout}\n onToggle={toggleHidden}\n onReset={reset}\n />\n )}\n {(dataIO?.export?.enabled || dataIO?.import?.enabled) && (\n <span className=\"royui-dt__sep\" aria-hidden>·</span>\n )}\n {dataIO?.export?.enabled && (\n <div className=\"royui-dt-io\">\n <button\n type=\"button\"\n className=\"royui-dt-io__btn\"\n onClick={() => {\n const only = exportFormats[0];\n if (exportFormats.length === 1 && only) {\n exportRows(only);\n } else {\n setExportMenuOpen((o) => !o);\n }\n }}\n >\n {ioFlash && ioFlash.startsWith('Export') ? ioFlash : 'Export'}\n </button>\n {exportMenuOpen && exportFormats.length > 1 && (\n <div\n className=\"royui-dt-io__menu\"\n onMouseLeave={() => setExportMenuOpen(false)}\n >\n {exportFormats.map((f) => (\n <button\n key={f}\n type=\"button\"\n className=\"royui-dt-io__menu-item\"\n onClick={() => {\n exportRows(f);\n setExportMenuOpen(false);\n }}\n >\n {f.toUpperCase()}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n {dataIO?.import?.enabled && (\n <>\n <button\n type=\"button\"\n className=\"royui-dt-io__btn\"\n onClick={() => fileInput.current?.click()}\n >\n {ioFlash && (ioFlash.startsWith('Import') || ioFlash.startsWith(\"Couldn't\"))\n ? ioFlash\n : 'Import'}\n </button>\n <input\n ref={fileInput}\n type=\"file\"\n accept={dataIO.import.accept ?? '.csv,.json'}\n style={{ display: 'none' }}\n onChange={(e) => {\n const f = e.target.files?.[0];\n if (f) onPickFile(f);\n e.target.value = '';\n }}\n />\n </>\n )}\n </div>\n </div>\n )}\n\n <Table\n visibleRows={visibleRows}\n rowHeight={rowHeight}\n stickyHeader={stickyHeader}\n density={density}\n loading={loading}\n empty={empty}\n isEmpty={pageRows.length === 0}\n fitColumns={fitColumns}\n headerFont={headerFont}\n rowHeaderFont={rowHeaderFont}\n cellFont={cellFont}\n >\n <colgroup>\n {visibleColumns.map((c) => {\n const w = fitColumns ? undefined : layout.sizes[c.key];\n return (\n <col\n key={c.key}\n style={w ? { width: w } : undefined}\n className={dragKey === c.key ? 'royui-dt__col--dragging' : undefined}\n />\n );\n })}\n </colgroup>\n\n <TableHeader>\n <TableRow>\n {visibleColumns.map((c, idx) => {\n const isDragging = dragKey === c.key;\n const showDropBefore = dropIndex === idx;\n const sortDir =\n sort && sort.key === c.key && sort.dir ? sort.dir : null;\n const canReorder = reorderable && c.reorderable !== false && !c.pinned;\n const canResize = resizable && c.resizable !== false;\n\n return (\n <TableHead\n key={c.key}\n align={c.align ?? (c.type === 'number' ? 'right' : 'left')}\n className={[\n 'royui-dt__th',\n canReorder && 'royui-dt__th--reorderable',\n canResize && 'royui-dt__th--resizable',\n isDragging && 'royui-dt__th--dragging',\n showDropBefore && 'royui-dt__th--drop-before',\n ]\n .filter(Boolean)\n .join(' ')}\n draggable={canReorder}\n onDragStart={(e) => onDragStart(e, c.key)}\n onDragOver={(e) => onDragOver(e, idx)}\n onDrop={onDrop}\n onDragEnd={onDragEnd}\n title={\n canReorder && canResize\n ? 'Drag to reorder · drag the right edge to resize'\n : canReorder\n ? 'Drag to reorder'\n : canResize\n ? 'Drag the right edge to resize'\n : undefined\n }\n >\n <span\n className=\"royui-dt__th-inner\"\n onClick={() => cycleSort(c.key)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n cycleSort(c.key);\n }\n }}\n >\n <span className=\"royui-dt__th-label\">{c.header}</span>\n {sortDir && (\n <span\n className={`royui-dt__sort-indicator royui-dt__sort-indicator--${sortDir}`}\n aria-hidden\n />\n )}\n </span>\n {canResize && (\n <span\n className=\"royui-dt__resize\"\n onPointerDown={(e) => beginResize(e, c.key)}\n onDoubleClick={() => doubleClickReset(c.key)}\n aria-hidden\n >\n <span className=\"royui-dt__resize-bar\" aria-hidden />\n </span>\n )}\n </TableHead>\n );\n })}\n {dropIndex === visibleColumns.length && (\n <TableHead className=\"royui-dt__th--drop-end\" aria-hidden />\n )}\n </TableRow>\n </TableHeader>\n\n <TableBody>\n {pageRows.map((row, i) => {\n const id = getRowId\n ? getRowId(row, i)\n : (row as Record<string, unknown>)?.['id'] != null\n ? String((row as Record<string, unknown>)['id'])\n : i;\n return (\n <TableRow key={id as string | number}>\n {visibleColumns.map((c) => {\n const value = c.accessor(row);\n const display = c.cell ? c.cell(value, row) : renderCellValue(value, c.type);\n const cellStyle = fontStyleFor(c.font);\n const isNum = c.type === 'number';\n return (\n <TableCell\n key={c.key}\n isRowHeader={c.isRowHeader}\n align={c.align ?? (isNum ? 'right' : 'left')}\n className={isNum ? 'royui-table__td--num' : undefined}\n style={cellStyle}\n >\n {display}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n\n {pagination !== false && pageCount > 1 && (\n <div className=\"royui-dt__pagination\">\n <Pagination\n page={currentPage}\n pageCount={pageCount}\n onPageChange={setPage}\n siblingCount={pagination?.siblingCount ?? 1}\n showSummary={pagination?.showSummary ?? true}\n summaryRender={(p, pc) =>\n `${(p - 1) * pageSize + 1}–${Math.min(p * pageSize, sorted.length)} of ${sorted.length}`\n }\n />\n </div>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/button/Button.tsx","../src/components/gradient-button/GradientButton.tsx","../src/components/popover/Popover.tsx","../src/components/made-by/MadeBy.tsx","../src/components/text-morph/TextMorph.tsx","../src/components/tree-nav/TreeNav.tsx","../src/components/tree-nav/TreeNavItem.tsx","../src/components/table/Spinner.tsx","../src/components/table/Table.tsx","../src/components/table/TableParts.tsx","../src/components/table-search/TableSearch.tsx","../src/components/pagination/Pagination.tsx","../src/components/date-range-picker/dateUtils.ts","../src/components/date-range-picker/DateRangePicker.tsx","../src/components/time-picker/AnalogClock.tsx","../src/components/time-picker/DigitalClock.tsx","../src/components/time-picker/TimePicker.tsx","../src/components/data-table/ColumnMenu.tsx","../src/components/data-table/useTableLayout.ts","../src/components/data-table/filters.ts","../src/components/data-table/io.ts","../src/components/data-table/DataTable.tsx"],"names":["DefaultSpinner","jsx","jsxs","forwardRef","wrap","TextMorph","useState","useRef","useEffect","Table","TableHeader","TableBody","TableRow","TableHead","TableCell","TableSearch","useMemo","cx","cy","hours12","isAm","pad","useCallback","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport './Button.css';\n\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual scale. Defaults to \"md\". */\n size?: ButtonSize;\n /** Stretch the button to fill its container. Defaults to false. */\n fullWidth?: boolean;\n /** Replaces children with a spinner and disables the button. */\n loading?: boolean;\n /** Optional override for the loading visual. Defaults to a spinner. */\n loadingLabel?: ReactNode;\n children: ReactNode;\n}\n\nconst DefaultSpinner = () => (\n <span className=\"royui-btn__spinner\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" 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 Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n size = 'md',\n fullWidth = false,\n loading = false,\n loadingLabel,\n disabled,\n className = '',\n children,\n type = 'button',\n ...rest\n },\n ref,\n ) => {\n const classes = [\n 'royui-btn',\n `royui-btn--${size}`,\n fullWidth ? 'royui-btn--full' : '',\n loading ? 'royui-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\nButton.displayName = 'Button';\n","'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","'use client';\n\nimport {\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport './Popover.css';\n\nexport interface PopoverProps {\n children: ReactNode;\n title?: string;\n align?: 'left' | 'right';\n width?: 'sm' | 'md' | 'lg' | number;\n label?: string;\n defaultOpen?: boolean;\n renderTrigger?: (api: { isOpen: boolean; toggle: () => void }) => ReactNode;\n}\n\nconst InfoIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 16v-5M12 8h.01\" />\n </svg>\n);\n\nexport function Popover({\n children,\n title,\n align = 'right',\n width = 'md',\n label = 'Open menu',\n defaultOpen = false,\n renderTrigger,\n}: PopoverProps) {\n const [open, setOpen] = useState(defaultOpen);\n const wrap = useRef<HTMLDivElement>(null);\n const toggle = () => setOpen((o) => !o);\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 const trigger = renderTrigger ? (\n renderTrigger({ isOpen: open, toggle })\n ) : (\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={label}\n aria-expanded={open}\n className={`royui-popover__trigger ${open ? 'royui-popover__trigger--on' : ''}`}\n >\n <InfoIcon />\n </button>\n );\n\n const widthClass =\n typeof width === 'string' ? `royui-popover__panel--${width}` : '';\n const customWidth =\n typeof width === 'number' ? { width: `${width}px` } : undefined;\n const alignClass = `royui-popover__panel--${align}`;\n\n return (\n <div ref={wrap} className=\"royui-popover\">\n {trigger}\n {open && (\n <div\n className={`royui-popover__panel ${widthClass} ${alignClass}`}\n style={customWidth}\n role=\"dialog\"\n >\n {title && <div className=\"royui-popover__title\">{title}</div>}\n <div className=\"royui-popover__body\">{children}</div>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport {\n forwardRef,\n type AnchorHTMLAttributes,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport './MadeBy.css';\n\nexport type MadeByPosition =\n | 'bottom-right'\n | 'bottom-left'\n | 'top-right'\n | 'top-left';\n\nexport interface MadeByProps\n extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'prefix'> {\n /** Display name shown after the prefix. */\n name: string;\n /** URL opened when the badge is clicked. */\n href: string;\n /** Prefix copy. Defaults to \"Made by\". */\n prefix?: ReactNode;\n /** Viewport anchor. Defaults to \"bottom-right\". */\n position?: MadeByPosition;\n /** Optional leading slot — avatar, mark, emoji, dot. */\n icon?: ReactNode;\n /** Custom font-family for the author name. */\n nameFont?: string;\n /** Font style for the author name. Defaults to \"italic\". */\n nameStyle?: CSSProperties['fontStyle'];\n}\n\nexport const MadeBy = forwardRef<HTMLAnchorElement, MadeByProps>(\n (\n {\n name,\n href,\n prefix = 'Made by',\n position = 'bottom-right',\n icon,\n nameFont,\n nameStyle,\n className = '',\n target = '_blank',\n rel = 'noopener noreferrer',\n ...rest\n },\n ref,\n ) => {\n const classes = [\n 'royui-madeby',\n `royui-madeby--${position}`,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const nameStyles: CSSProperties = {};\n if (nameFont) nameStyles.fontFamily = nameFont;\n if (nameStyle) nameStyles.fontStyle = nameStyle;\n\n return (\n <a\n ref={ref}\n href={href}\n target={target}\n rel={rel}\n className={classes}\n {...rest}\n >\n {icon && (\n <span className=\"royui-madeby__icon\" aria-hidden>\n {icon}\n </span>\n )}\n <span className=\"royui-madeby__prefix\">{prefix}</span>\n <span\n className=\"royui-madeby__name\"\n style={Object.keys(nameStyles).length ? nameStyles : undefined}\n >\n {name}\n </span>\n </a>\n );\n },\n);\n\nMadeBy.displayName = 'MadeBy';\n","'use client';\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport './TextMorph.css';\n\nexport interface TextMorphProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, 'children'> {\n /** The current text. When this prop changes, the component diff-types\n from the previously displayed text to the new value. */\n value: string;\n /** Optional renderer for the current intermediate text — handy for\n syntax highlighting, gradient spans, or wrapping each word. Receives\n the partial string at every keystroke during the animation. */\n renderText?: (current: string) => ReactNode;\n /** Per-character typing delay range in ms. Default [30, 60]. */\n typeDelay?: [min: number, max: number];\n /** Per-character backspace delay range in ms. Default [18, 30]. */\n backspaceDelay?: [min: number, max: number];\n /** Characters that get an additional delay (harder to type on a real\n keyboard — punctuation, brackets, symbols). Default /[\\/{}\\-_@]/. */\n hardChars?: RegExp;\n /** Extra delay range for hard chars in ms. Default [30, 65]. */\n hardCharExtraDelay?: [min: number, max: number];\n /** Pause between backspace phase and typing phase, in ms. Default 70. */\n pauseMs?: number;\n /** Skip animation entirely and just swap text. */\n disabled?: boolean;\n}\n\nfunction sleep(ms: number) {\n return new Promise<void>((resolve) => setTimeout(resolve, ms));\n}\n\nfunction findDiff(from: string, to: string) {\n let p = 0;\n const maxP = Math.min(from.length, to.length);\n while (p < maxP && from[p] === to[p]) p++;\n let s = 0;\n while (\n s < from.length - p &&\n s < to.length - p &&\n from[from.length - 1 - s] === to[to.length - 1 - s]\n ) {\n s++;\n }\n return {\n prefix: from.slice(0, p),\n suffix: from.slice(from.length - s),\n oldMid: from.slice(p, from.length - s),\n newMid: to.slice(p, to.length - s),\n };\n}\n\nfunction rand(min: number, max: number) {\n return min + Math.random() * (max - min);\n}\n\nexport const TextMorph = forwardRef<HTMLSpanElement, TextMorphProps>(\n function TextMorph(\n {\n value,\n renderText,\n typeDelay = [30, 60],\n backspaceDelay = [18, 30],\n hardChars = /[\\/{}\\-_@]/,\n hardCharExtraDelay = [30, 65],\n pauseMs = 70,\n disabled = false,\n className = '',\n ...rest\n },\n ref,\n ) {\n const [displayed, setDisplayed] = useState(value);\n const tokenRef = useRef(0);\n const reducedRef = useRef(false);\n const prevValueRef = useRef(value);\n const displayedRef = useRef(value);\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n reducedRef.current = window.matchMedia(\n '(prefers-reduced-motion: reduce)',\n ).matches;\n }\n }, []);\n\n // Keep a ref of the currently shown text so the animation always\n // starts from the latest frame (even if interrupted mid-typing).\n useEffect(() => {\n displayedRef.current = displayed;\n }, [displayed]);\n\n useEffect(() => {\n if (value === prevValueRef.current) return;\n const source = displayedRef.current;\n prevValueRef.current = value;\n\n if (disabled || reducedRef.current) {\n setDisplayed(value);\n return;\n }\n\n const myToken = ++tokenRef.current;\n\n (async () => {\n const { prefix, suffix, oldMid, newMid } = findDiff(source, value);\n\n for (let i = oldMid.length - 1; i >= 0; i--) {\n if (myToken !== tokenRef.current) return;\n setDisplayed(prefix + oldMid.slice(0, i) + suffix);\n await sleep(rand(backspaceDelay[0], backspaceDelay[1]));\n }\n\n if (myToken !== tokenRef.current) return;\n await sleep(pauseMs);\n\n for (let i = 1; i <= newMid.length; i++) {\n if (myToken !== tokenRef.current) return;\n setDisplayed(prefix + newMid.slice(0, i) + suffix);\n const ch = newMid.charAt(i - 1);\n const base = rand(typeDelay[0], typeDelay[1]);\n const extra = hardChars.test(ch)\n ? rand(hardCharExtraDelay[0], hardCharExtraDelay[1])\n : 0;\n await sleep(base + extra);\n }\n })();\n }, [\n value,\n disabled,\n typeDelay,\n backspaceDelay,\n hardChars,\n hardCharExtraDelay,\n pauseMs,\n ]);\n\n return (\n <span\n ref={ref}\n className={`royui-textmorph ${className}`.trim()}\n aria-live=\"polite\"\n {...rest}\n >\n {renderText ? renderText(displayed) : displayed}\n </span>\n );\n },\n);\n","'use client';\n\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n} from 'react';\nimport './TreeNav.css';\n\nexport interface TreeNavProps extends HTMLAttributes<HTMLUListElement> {\n /** Left indent of the branched group, in pixels. Default 24. */\n indent?: number;\n /** Vertical gap between items, in pixels. Default 2. */\n gap?: number;\n}\n\nexport const TreeNav = forwardRef<HTMLUListElement, TreeNavProps>(\n ({ indent = 24, gap = 2, className = '', style, children, ...rest }, ref) => {\n const mergedStyle: CSSProperties = {\n ...style,\n ['--royui-treenav-indent' as string]: `${indent}px`,\n ['--royui-treenav-gap' as string]: `${gap}px`,\n };\n\n const classes = ['royui-treenav', className].filter(Boolean).join(' ');\n\n return (\n <ul ref={ref} className={classes} style={mergedStyle} {...rest}>\n {children}\n </ul>\n );\n },\n);\n\nTreeNav.displayName = 'TreeNav';\n","'use client';\n\nimport {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type AnchorHTMLAttributes,\n type LiHTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nexport interface TreeNavItemProps\n extends Omit<LiHTMLAttributes<HTMLLIElement>, 'children'> {\n /** Link target. Used when asChild is false (default <a> render). */\n href?: string;\n /** Mark this item active. Adds aria-current=\"page\" to the rendered link. */\n active?: boolean;\n /** Render the consumer's element (e.g. next/link, TanStack Link) instead of an <a>. */\n asChild?: boolean;\n /** Hide the triangle tip at the end of the branch. Default false (tip shown). */\n hideTip?: boolean;\n /** Leading icon slot. */\n icon?: ReactNode;\n /** Anchor / link contents. */\n children?: ReactNode;\n /** Forwarded to the inner link element (className, onClick, etc.). */\n linkProps?: Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href' | 'children'>;\n}\n\ntype ChildLinkElement = ReactElement<{\n className?: string;\n 'aria-current'?: AnchorHTMLAttributes<HTMLAnchorElement>['aria-current'];\n children?: ReactNode;\n}>;\n\nexport const TreeNavItem = forwardRef<HTMLLIElement, TreeNavItemProps>(\n (\n {\n href,\n active = false,\n asChild = false,\n hideTip = false,\n icon,\n children,\n linkProps,\n className = '',\n ...rest\n },\n ref,\n ) => {\n const itemClasses = [\n 'royui-treenav__item',\n hideTip && 'royui-treenav__item--no-tip',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const linkContent = (\n <>\n {icon && (\n <span className=\"royui-treenav__icon\" aria-hidden>\n {icon}\n </span>\n )}\n <span className=\"royui-treenav__label\">{children}</span>\n </>\n );\n\n let renderedLink: ReactNode;\n\n if (asChild) {\n const onlyChild = Children.only(children) as ChildLinkElement;\n if (!isValidElement(onlyChild)) {\n throw new Error(\n 'TreeNavItem: asChild requires a single React element child.',\n );\n }\n const childClassName = [\n 'royui-treenav__link',\n onlyChild.props.className,\n ]\n .filter(Boolean)\n .join(' ');\n\n renderedLink = cloneElement(onlyChild, {\n className: childClassName,\n ...(active ? { 'aria-current': 'page' as const } : {}),\n });\n } else {\n const { className: linkClassName, ...linkRest } = linkProps ?? {};\n const mergedLinkClass = ['royui-treenav__link', linkClassName]\n .filter(Boolean)\n .join(' ');\n\n renderedLink = (\n <a\n href={href}\n className={mergedLinkClass}\n {...(active ? { 'aria-current': 'page' as const } : {})}\n {...linkRest}\n >\n {linkContent}\n </a>\n );\n }\n\n return (\n <li ref={ref} className={itemClasses} {...rest}>\n <svg\n className=\"royui-treenav__connector\"\n viewBox=\"0 0 20 30\"\n preserveAspectRatio=\"xMinYMid meet\"\n aria-hidden\n >\n {hideTip ? (\n <path\n d=\"M1.25 0 L1.25 7 Q1.25 15.75 11 15.75 L11 14.25 Q2.75 14.25 2.75 7 L2.75 0 Z\"\n fill=\"currentColor\"\n />\n ) : (\n <path\n d=\"M1.25 0 L1.25 7 Q1.25 15.75 10.33 15.75 L10.33 16.94 L14.22 15 L10.33 13.06 L10.33 14.25 Q2.75 14.25 2.75 7 L2.75 0 Z\"\n fill=\"currentColor\"\n />\n )}\n </svg>\n {renderedLink}\n </li>\n );\n },\n);\n\nTreeNavItem.displayName = 'TreeNavItem';\n","'use client';\n\nimport type { CSSProperties } from 'react';\n\nexport interface SpinnerProps {\n size?: number;\n strokeWidth?: number;\n label?: string;\n style?: CSSProperties;\n className?: string;\n}\n\nexport function Spinner({\n size = 16,\n strokeWidth = 2,\n label = 'Loading',\n style,\n className = '',\n}: SpinnerProps) {\n const r = (size - strokeWidth) / 2;\n const c = size / 2;\n const circumference = 2 * Math.PI * r;\n\n return (\n <span\n role=\"status\"\n aria-label={label}\n className={['royui-spinner', className].filter(Boolean).join(' ')}\n style={{ width: size, height: size, ...style }}\n >\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} aria-hidden>\n <circle\n cx={c}\n cy={c}\n r={r}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeOpacity={0.18}\n strokeWidth={strokeWidth}\n />\n <circle\n cx={c}\n cy={c}\n r={r}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={circumference * 0.72}\n transform={`rotate(-90 ${c} ${c})`}\n />\n </svg>\n </span>\n );\n}\n","'use client';\n\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n type TableHTMLAttributes,\n} from 'react';\nimport { Spinner } from './Spinner';\nimport './Table.css';\n\nexport type TableDensity = 'compact' | 'cozy' | 'comfortable';\n\nexport type FontSpec =\n | string\n | {\n family?: string;\n size?: string | number;\n weight?: number | string;\n letterSpacing?: string;\n featureSettings?: string;\n };\n\nexport interface TableProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Rows visible before vertical scroll. Default 7. */\n visibleRows?: number;\n /** Approximate row height in px — drives the scroll cap. Default 44. */\n rowHeight?: number;\n /** Header sticks during scroll. Default true. */\n stickyHeader?: boolean;\n /** Padding scale. Default 'cozy'. */\n density?: TableDensity;\n /** Renders an inline spinner overlay on top of rows. */\n loading?: boolean;\n /** Replaces row area when no rows are present. */\n empty?: ReactNode;\n /**\n * Force every column to fit in the container — disables horizontal scroll\n * and lets the browser distribute width across all visible columns.\n * Cell content wraps onto multiple lines instead of clipping.\n */\n fitColumns?: boolean;\n /** Per-zone fonts. */\n headerFont?: FontSpec;\n rowHeaderFont?: FontSpec;\n cellFont?: FontSpec;\n children?: ReactNode;\n tableProps?: TableHTMLAttributes<HTMLTableElement>;\n /** Show the empty slot. Set explicitly by DataTable; defaults to false. */\n isEmpty?: boolean;\n}\n\nfunction fontVars(prefix: string, spec: FontSpec | undefined): CSSProperties {\n if (!spec) return {};\n const out: Record<string, string> = {};\n if (typeof spec === 'string') {\n out[`${prefix}-font`] = spec;\n return out as CSSProperties;\n }\n if (spec.family) out[`${prefix}-font`] = spec.family;\n if (spec.size != null)\n out[`${prefix}-size`] = typeof spec.size === 'number' ? `${spec.size}px` : spec.size;\n if (spec.weight != null) out[`${prefix}-weight`] = String(spec.weight);\n if (spec.letterSpacing) out[`${prefix}-tracking`] = spec.letterSpacing;\n if (spec.featureSettings) out[`${prefix}-features`] = spec.featureSettings;\n return out as CSSProperties;\n}\n\nexport const Table = forwardRef<HTMLDivElement, TableProps>(function Table(\n {\n visibleRows = 7,\n rowHeight = 44,\n stickyHeader = true,\n density = 'cozy',\n loading = false,\n empty,\n isEmpty = false,\n fitColumns = false,\n headerFont,\n rowHeaderFont,\n cellFont,\n className = '',\n style,\n children,\n tableProps,\n ...rest\n },\n ref,\n) {\n const headerH = 40;\n const maxH = rowHeight * visibleRows + (stickyHeader ? headerH : 0);\n\n const mergedStyle: CSSProperties = {\n ...style,\n ['--royui-table-row-h' as string]: `${rowHeight}px`,\n ['--royui-table-max-h' as string]: `${maxH}px`,\n ...fontVars('--royui-table-header', headerFont),\n ...fontVars('--royui-table-row-header', rowHeaderFont),\n ...fontVars('--royui-table-cell', cellFont),\n };\n\n const classes = [\n 'royui-table',\n `royui-table--${density}`,\n stickyHeader && 'royui-table--sticky',\n loading && 'royui-table--loading',\n fitColumns && 'royui-table--fit',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={ref} className={classes} style={mergedStyle} {...rest}>\n <div className=\"royui-table__scroll\" role=\"region\" aria-label=\"Table\">\n <table className=\"royui-table__table\" {...tableProps}>\n {children}\n </table>\n {isEmpty && !loading && (\n <div className=\"royui-table__empty\" role=\"status\">\n {empty ?? <span>No results</span>}\n </div>\n )}\n {loading && (\n <div className=\"royui-table__loading\" aria-hidden>\n <Spinner size={18} />\n </div>\n )}\n </div>\n </div>\n );\n});\n","'use client';\n\nimport {\n forwardRef,\n type HTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n} from 'react';\n\nexport const TableHeader = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(function TableHeader({ className = '', ...rest }, ref) {\n return (\n <thead\n ref={ref}\n className={['royui-table__thead', className].filter(Boolean).join(' ')}\n {...rest}\n />\n );\n});\n\nexport const TableBody = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(function TableBody({ className = '', ...rest }, ref) {\n return (\n <tbody\n ref={ref}\n className={['royui-table__tbody', className].filter(Boolean).join(' ')}\n {...rest}\n />\n );\n});\n\nexport const TableRow = forwardRef<\n HTMLTableRowElement,\n HTMLAttributes<HTMLTableRowElement>\n>(function TableRow({ className = '', ...rest }, ref) {\n return (\n <tr\n ref={ref}\n className={['royui-table__tr', className].filter(Boolean).join(' ')}\n {...rest}\n />\n );\n});\n\nexport interface TableHeadCellProps extends ThHTMLAttributes<HTMLTableCellElement> {\n align?: 'left' | 'right' | 'center';\n}\n\nexport const TableHead = forwardRef<HTMLTableCellElement, TableHeadCellProps>(\n function TableHead({ className = '', align = 'left', ...rest }, ref) {\n return (\n <th\n ref={ref}\n scope=\"col\"\n className={[\n 'royui-table__th',\n align !== 'left' && `royui-table__th--${align}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n );\n },\n);\n\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n align?: 'left' | 'right' | 'center';\n isRowHeader?: boolean;\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(\n function TableCell({ className = '', align = 'left', isRowHeader, ...rest }, ref) {\n if (isRowHeader) {\n return (\n <th\n ref={ref}\n scope=\"row\"\n className={[\n 'royui-table__row-header',\n align !== 'left' && `royui-table__td--${align}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...(rest as ThHTMLAttributes<HTMLTableCellElement>)}\n />\n );\n }\n return (\n <td\n ref={ref}\n className={[\n 'royui-table__td',\n align !== 'left' && `royui-table__td--${align}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n );\n },\n);\n","'use client';\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ChangeEvent,\n type CSSProperties,\n type InputHTMLAttributes,\n} from 'react';\nimport './TableSearch.css';\n\nexport interface TableSearchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'defaultValue'> {\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n /** Debounce in ms before onChange fires. Default 0 (synchronous). */\n debounceMs?: number;\n placeholder?: string;\n /** Width in px. Default 260. */\n width?: number | string;\n /** Hide the magnifier dot. */\n hideIndicator?: boolean;\n style?: CSSProperties;\n}\n\nexport const TableSearch = forwardRef<HTMLInputElement, TableSearchProps>(\n function TableSearch(\n {\n value,\n defaultValue,\n onChange,\n debounceMs = 0,\n placeholder = 'Search',\n width = 260,\n hideIndicator,\n className = '',\n style,\n ...rest\n },\n ref,\n ) {\n const controlled = value !== undefined;\n const [internal, setInternal] = useState(defaultValue ?? '');\n const current = controlled ? value! : internal;\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => () => {\n if (timer.current) clearTimeout(timer.current);\n }, []);\n\n const emit = (next: string) => {\n if (!onChange) return;\n if (debounceMs <= 0) {\n onChange(next);\n return;\n }\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => onChange(next), debounceMs);\n };\n\n const handle = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value;\n if (!controlled) setInternal(next);\n emit(next);\n };\n\n const clear = () => {\n if (!controlled) setInternal('');\n if (onChange) onChange('');\n };\n\n return (\n <div\n className={['royui-tablesearch', className].filter(Boolean).join(' ')}\n style={{ width, ...style }}\n >\n {!hideIndicator && <span className=\"royui-tablesearch__dot\" aria-hidden />}\n <input\n ref={ref}\n type=\"text\"\n className=\"royui-tablesearch__input\"\n placeholder={placeholder}\n value={current}\n onChange={handle}\n {...rest}\n />\n {current.length > 0 && (\n <button\n type=\"button\"\n className=\"royui-tablesearch__clear\"\n onClick={clear}\n aria-label=\"Clear search\"\n >\n Clear\n </button>\n )}\n </div>\n );\n },\n);\n","'use client';\n\nimport { useMemo, type CSSProperties } from 'react';\nimport './Pagination.css';\n\nexport interface PaginationProps {\n page: number;\n pageCount: number;\n onPageChange: (page: number) => void;\n /** Pages shown adjacent to the current page. Default 1. */\n siblingCount?: number;\n /** Show Prev / Next text buttons. Default true. */\n showPrevNext?: boolean;\n /** Override the Prev / Next labels. */\n prevLabel?: string;\n nextLabel?: string;\n /** Compact summary like \"Page 3 of 12\" on the left. Default false. */\n showSummary?: boolean;\n summaryRender?: (page: number, pageCount: number) => string;\n className?: string;\n style?: CSSProperties;\n}\n\ntype Cell = number | 'gap';\n\nfunction buildRange(page: number, pageCount: number, sibling: number): Cell[] {\n if (pageCount <= 1) return [1];\n const first = 1;\n const last = pageCount;\n const left = Math.max(page - sibling, first + 1);\n const right = Math.min(page + sibling, last - 1);\n\n const cells: Cell[] = [first];\n if (left > first + 1) cells.push('gap');\n for (let i = left; i <= right; i++) cells.push(i);\n if (right < last - 1) cells.push('gap');\n if (last > first) cells.push(last);\n return cells;\n}\n\nexport function Pagination({\n page,\n pageCount,\n onPageChange,\n siblingCount = 1,\n showPrevNext = true,\n prevLabel = 'Prev',\n nextLabel = 'Next',\n showSummary = false,\n summaryRender,\n className = '',\n style,\n}: PaginationProps) {\n const cells = useMemo(\n () => buildRange(page, pageCount, siblingCount),\n [page, pageCount, siblingCount],\n );\n\n const canPrev = page > 1;\n const canNext = page < pageCount;\n\n const go = (n: number) => {\n if (n < 1 || n > pageCount || n === page) return;\n onPageChange(n);\n };\n\n return (\n <nav\n className={['royui-pagination', className].filter(Boolean).join(' ')}\n style={style}\n aria-label=\"Pagination\"\n >\n {showSummary && (\n <span className=\"royui-pagination__summary\">\n {summaryRender\n ? summaryRender(page, pageCount)\n : `Page ${page} of ${pageCount}`}\n </span>\n )}\n\n <div className=\"royui-pagination__group\">\n {showPrevNext && (\n <button\n type=\"button\"\n className=\"royui-pagination__step\"\n onClick={() => go(page - 1)}\n disabled={!canPrev}\n aria-label=\"Previous page\"\n >\n {prevLabel}\n </button>\n )}\n\n <ul className=\"royui-pagination__pages\">\n {cells.map((cell, i) =>\n cell === 'gap' ? (\n <li key={`gap-${i}`} className=\"royui-pagination__gap\" aria-hidden>\n ·\n </li>\n ) : (\n <li key={cell}>\n <button\n type=\"button\"\n className={[\n 'royui-pagination__page',\n cell === page && 'royui-pagination__page--current',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => go(cell)}\n aria-current={cell === page ? 'page' : undefined}\n aria-label={`Page ${cell}`}\n >\n {cell}\n </button>\n </li>\n ),\n )}\n </ul>\n\n {showPrevNext && (\n <button\n type=\"button\"\n className=\"royui-pagination__step\"\n onClick={() => go(page + 1)}\n disabled={!canNext}\n aria-label=\"Next page\"\n >\n {nextLabel}\n </button>\n )}\n </div>\n </nav>\n );\n}\n","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","'use client';\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\n\nexport type TimeValue = { hours: number; minutes: number };\n\nexport interface AnalogClockProps {\n value: TimeValue;\n onChange: (next: TimeValue) => void;\n hourCycle?: 12 | 24;\n minuteStep?: number;\n /** SVG size in px. Default 220. */\n size?: number;\n}\n\ntype Mode = 'hours' | 'minutes';\n\nfunction angleFromCenter(cx: number, cy: number, px: number, py: number): number {\n const dx = px - cx;\n const dy = py - cy;\n const a = Math.atan2(dy, dx) * (180 / Math.PI) + 90;\n return (a + 360) % 360;\n}\n\nexport function AnalogClock({\n value,\n onChange,\n hourCycle = 24,\n minuteStep = 1,\n size = 220,\n}: AnalogClockProps) {\n const ref = useRef<SVGSVGElement>(null);\n const [mode, setMode] = useState<Mode>('hours');\n const [dragging, setDragging] = useState(false);\n\n const updateFromPointer = useCallback(\n (clientX: number, clientY: number, currentMode: Mode) => {\n const svg = ref.current;\n if (!svg) return;\n const rect = svg.getBoundingClientRect();\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n const a = angleFromCenter(cx, cy, clientX, clientY);\n\n if (currentMode === 'hours') {\n // hours12 is the position on the face (0..11, where 0 = the \"12\" position).\n // Combine with the current AM/PM half so the underlying 24h value preserves\n // whichever half the user is editing.\n const hours12 = Math.round(a / 30) % 12;\n const isAm = value.hours < 12;\n const h24 = isAm ? hours12 : hours12 + 12;\n onChange({ ...value, hours: h24 });\n } else {\n let m = Math.round(a / 6) % 60;\n if (minuteStep > 1) m = Math.round(m / minuteStep) * minuteStep;\n if (m === 60) m = 0;\n onChange({ ...value, minutes: m });\n }\n },\n [minuteStep, onChange, value],\n );\n\n const togglePeriod = () => {\n const next = value.hours < 12 ? value.hours + 12 : value.hours - 12;\n onChange({ ...value, hours: next });\n };\n\n const isAm = value.hours < 12;\n\n useEffect(() => {\n if (!dragging) return;\n const onMove = (e: PointerEvent) => updateFromPointer(e.clientX, e.clientY, mode);\n const onUp = () => setDragging(false);\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n return () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n };\n }, [dragging, mode, updateFromPointer]);\n\n const handlePointerDown = (e: ReactPointerEvent<SVGSVGElement>) => {\n e.preventDefault();\n setDragging(true);\n updateFromPointer(e.clientX, e.clientY, mode);\n };\n\n // visible hour value\n const hours12 =\n hourCycle === 12\n ? value.hours === 0\n ? 12\n : value.hours > 12\n ? value.hours - 12\n : value.hours\n : value.hours % 12 === 0\n ? 12\n : value.hours % 12;\n\n const hourAngle = ((hours12 % 12) + value.minutes / 60) * 30 - 90;\n const minuteAngle = (value.minutes / 60) * 360 - 90;\n\n const r = size / 2;\n const cx = r;\n const cy = r;\n\n // hand lengths\n const hourLen = r * 0.45;\n const minuteLen = r * 0.7;\n const tickOuter = r * 0.92;\n const tickInner = r * 0.86;\n const majorInner = r * 0.82;\n\n const handX = (len: number, deg: number) => cx + len * Math.cos((deg * Math.PI) / 180);\n const handY = (len: number, deg: number) => cy + len * Math.sin((deg * Math.PI) / 180);\n\n return (\n <div className=\"royui-tp-analog\">\n <svg\n ref={ref}\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n onPointerDown={handlePointerDown}\n className=\"royui-tp-analog__face\"\n role=\"application\"\n aria-label=\"Analog clock\"\n >\n <circle\n cx={cx}\n cy={cy}\n r={r - 1}\n className=\"royui-tp-analog__bezel\"\n />\n\n {/* minute ticks */}\n {Array.from({ length: 60 }).map((_, i) => {\n const angle = (i * 6 - 90) * (Math.PI / 180);\n const isMajor = i % 5 === 0;\n const inner = isMajor ? majorInner : tickInner;\n return (\n <line\n key={i}\n x1={cx + inner * Math.cos(angle)}\n y1={cy + inner * Math.sin(angle)}\n x2={cx + tickOuter * Math.cos(angle)}\n y2={cy + tickOuter * Math.sin(angle)}\n className={isMajor ? 'royui-tp-analog__tick--major' : 'royui-tp-analog__tick'}\n />\n );\n })}\n\n {/* hour numbers at 12, 3, 6, 9 */}\n {[12, 3, 6, 9].map((n) => {\n const idx = n % 12;\n const angle = (idx * 30 - 90) * (Math.PI / 180);\n const rr = r * 0.72;\n return (\n <text\n key={n}\n x={cx + rr * Math.cos(angle)}\n y={cy + rr * Math.sin(angle)}\n dy=\"0.34em\"\n textAnchor=\"middle\"\n className=\"royui-tp-analog__numeral\"\n >\n {n}\n </text>\n );\n })}\n\n {/* hour hand */}\n <line\n x1={cx}\n y1={cy}\n x2={handX(hourLen, hourAngle)}\n y2={handY(hourLen, hourAngle)}\n className={`royui-tp-analog__hand royui-tp-analog__hand--hour ${\n mode === 'hours' ? 'royui-tp-analog__hand--active' : ''\n }`}\n onPointerDown={(e) => {\n e.stopPropagation();\n setMode('hours');\n setDragging(true);\n }}\n />\n\n {/* minute hand */}\n <line\n x1={cx}\n y1={cy}\n x2={handX(minuteLen, minuteAngle)}\n y2={handY(minuteLen, minuteAngle)}\n className={`royui-tp-analog__hand royui-tp-analog__hand--minute ${\n mode === 'minutes' ? 'royui-tp-analog__hand--active' : ''\n }`}\n onPointerDown={(e) => {\n e.stopPropagation();\n setMode('minutes');\n setDragging(true);\n }}\n />\n\n <circle cx={cx} cy={cy} r={3.5} className=\"royui-tp-analog__pin\" />\n </svg>\n\n <div className=\"royui-tp-analog__modes\">\n <button\n type=\"button\"\n className={[\n 'royui-tp-analog__mode',\n mode === 'hours' && 'royui-tp-analog__mode--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setMode('hours')}\n >\n Hours\n </button>\n <button\n type=\"button\"\n className={[\n 'royui-tp-analog__mode',\n mode === 'minutes' && 'royui-tp-analog__mode--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setMode('minutes')}\n >\n Minutes\n </button>\n <div className=\"royui-tp-analog__period\" role=\"group\" aria-label=\"Day half\">\n <button\n type=\"button\"\n className={[\n 'royui-tp-analog__period-btn',\n isAm && 'royui-tp-analog__period-btn--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => {\n if (!isAm) togglePeriod();\n }}\n aria-pressed={isAm}\n >\n AM\n </button>\n <button\n type=\"button\"\n className={[\n 'royui-tp-analog__period-btn',\n !isAm && 'royui-tp-analog__period-btn--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => {\n if (isAm) togglePeriod();\n }}\n aria-pressed={!isAm}\n >\n PM\n </button>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useRef, type KeyboardEvent, type WheelEvent } from 'react';\nimport type { TimeValue } from './AnalogClock';\n\nexport interface DigitalClockProps {\n value: TimeValue;\n onChange: (next: TimeValue) => void;\n hourCycle?: 12 | 24;\n minuteStep?: number;\n}\n\nfunction pad(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nfunction wrap(n: number, max: number): number {\n return ((n % max) + max) % max;\n}\n\nexport function DigitalClock({\n value,\n onChange,\n hourCycle = 24,\n minuteStep = 1,\n}: DigitalClockProps) {\n const hourBoundary = hourCycle === 12 ? 12 : 24;\n\n const displayHour =\n hourCycle === 12\n ? value.hours % 12 === 0\n ? 12\n : value.hours % 12\n : value.hours;\n\n const isAm = value.hours < 12;\n\n const setDisplayHour = (next: number) => {\n if (hourCycle === 24) {\n onChange({ ...value, hours: wrap(next, 24) });\n return;\n }\n let h = next;\n if (h <= 0) h = 12;\n if (h > 12) h = 1;\n const h24 = isAm ? (h === 12 ? 0 : h) : h === 12 ? 12 : h + 12;\n onChange({ ...value, hours: h24 });\n };\n\n const setMinutes = (next: number) => {\n const stepped = Math.round(next / minuteStep) * minuteStep;\n onChange({ ...value, minutes: wrap(stepped, 60) });\n };\n\n const setAm = () => {\n if (isAm) return;\n onChange({ ...value, hours: value.hours - 12 });\n };\n const setPm = () => {\n if (!isAm) return;\n onChange({ ...value, hours: value.hours + 12 });\n };\n\n return (\n <div className=\"royui-tp-digital\">\n <div className=\"royui-tp-digital__row\">\n <Segment\n label=\"Hours\"\n value={pad(displayHour)}\n onWheelStep={(d) => setDisplayHour(displayHour + d)}\n onArrow={(d) => setDisplayHour(displayHour + d)}\n max={hourBoundary}\n />\n <span className=\"royui-tp-digital__sep\" aria-hidden>\n :\n </span>\n <Segment\n label=\"Minutes\"\n value={pad(value.minutes)}\n onWheelStep={(d) => setMinutes(value.minutes + d * minuteStep)}\n onArrow={(d) => setMinutes(value.minutes + d * minuteStep)}\n max={60}\n />\n </div>\n <div className=\"royui-tp-digital__period\" role=\"group\" aria-label=\"Day half\">\n <button\n type=\"button\"\n className={[\n 'royui-tp-digital__period-btn',\n isAm && 'royui-tp-digital__period-btn--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={setAm}\n aria-pressed={isAm}\n >\n AM\n </button>\n <button\n type=\"button\"\n className={[\n 'royui-tp-digital__period-btn',\n !isAm && 'royui-tp-digital__period-btn--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={setPm}\n aria-pressed={!isAm}\n >\n PM\n </button>\n </div>\n <div className=\"royui-tp-digital__hint\">\n Scroll or use arrow keys\n </div>\n </div>\n );\n}\n\nfunction Segment({\n label,\n value,\n onWheelStep,\n onArrow,\n max,\n}: {\n label: string;\n value: string;\n onWheelStep: (delta: 1 | -1) => void;\n onArrow: (delta: 1 | -1) => void;\n max: number;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n\n const handleWheel = (e: WheelEvent<HTMLDivElement>) => {\n e.preventDefault();\n onWheelStep(e.deltaY > 0 ? 1 : -1);\n };\n\n const handleKey = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'ArrowUp' || e.key === 'ArrowRight') {\n e.preventDefault();\n onArrow(1);\n } else if (e.key === 'ArrowDown' || e.key === 'ArrowLeft') {\n e.preventDefault();\n onArrow(-1);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"spinbutton\"\n tabIndex={0}\n aria-label={label}\n aria-valuetext={value}\n aria-valuemax={max}\n className=\"royui-tp-digital__seg\"\n onWheel={handleWheel}\n onKeyDown={handleKey}\n >\n {value}\n </div>\n );\n}\n","'use client';\n\nimport {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from 'react';\nimport { AnalogClock, type TimeValue } from './AnalogClock';\nimport { DigitalClock } from './DigitalClock';\nimport './TimePicker.css';\n\nexport type TimePickerVariant = 'analog' | 'digital';\n\nexport interface TimePickerProps {\n value?: TimeValue | null;\n defaultValue?: TimeValue | null;\n onChange?: (next: TimeValue) => void;\n /** Picker style. Default 'analog'. */\n variant?: TimePickerVariant;\n /** Allow the user to switch between variants. Default true. */\n switchable?: boolean;\n hourCycle?: 12 | 24;\n minuteStep?: number;\n placeholder?: string;\n align?: 'left' | 'right';\n className?: string;\n style?: CSSProperties;\n triggerLabel?: ReactNode;\n disabled?: boolean;\n}\n\nfunction pad(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nexport function formatTime(t: TimeValue | null | undefined, hourCycle: 12 | 24 = 24): string {\n if (!t) return '';\n if (hourCycle === 24) return `${pad(t.hours)}:${pad(t.minutes)}`;\n const h = t.hours % 12 === 0 ? 12 : t.hours % 12;\n const ampm = t.hours < 12 ? 'AM' : 'PM';\n return `${pad(h)}:${pad(t.minutes)} ${ampm}`;\n}\n\nexport function TimePicker({\n value,\n defaultValue,\n onChange,\n variant = 'analog',\n switchable = true,\n hourCycle = 24,\n minuteStep = 1,\n placeholder = 'Pick a time',\n align = 'left',\n className = '',\n style,\n triggerLabel,\n disabled,\n}: TimePickerProps) {\n const controlled = value !== undefined;\n const [internal, setInternal] = useState<TimeValue | null>(defaultValue ?? null);\n const current = controlled ? value : internal;\n\n const [open, setOpen] = useState(false);\n const [mode, setMode] = useState<TimePickerVariant>(variant);\n const [draft, setDraft] = useState<TimeValue>(current ?? { hours: 12, minutes: 0 });\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) setDraft(current ?? { hours: new Date().getHours(), minutes: 0 });\n }, [open]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n setMode(variant);\n }, [variant]);\n\n const commit = (next: TimeValue) => {\n if (!controlled) setInternal(next);\n onChange?.(next);\n };\n\n const setNow = () => {\n const now = new Date();\n setDraft({ hours: now.getHours(), minutes: now.getMinutes() });\n };\n\n const apply = () => {\n commit(draft);\n setOpen(false);\n };\n\n return (\n <div\n ref={wrap}\n className={['royui-tp', className].filter(Boolean).join(' ')}\n style={style}\n >\n <button\n type=\"button\"\n className=\"royui-tp__trigger\"\n onClick={() => !disabled && setOpen((o) => !o)}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n disabled={disabled}\n >\n <span className=\"royui-tp__trigger-dot\" aria-hidden />\n <span className=\"royui-tp__trigger-label\">\n {triggerLabel ?? (formatTime(current ?? null, hourCycle) || placeholder)}\n </span>\n </button>\n\n {open && (\n <div\n className={`royui-tp__panel royui-tp__panel--${align}`}\n role=\"dialog\"\n aria-label=\"Choose time\"\n >\n <div className=\"royui-tp__head\">\n <div className=\"royui-tp__readout\">\n {formatTime(draft, hourCycle)}\n </div>\n {switchable && (\n <div className=\"royui-tp__variants\" role=\"tablist\">\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === 'analog'}\n className={[\n 'royui-tp__variant',\n mode === 'analog' && 'royui-tp__variant--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setMode('analog')}\n >\n Analog\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === 'digital'}\n className={[\n 'royui-tp__variant',\n mode === 'digital' && 'royui-tp__variant--on',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setMode('digital')}\n >\n Digital\n </button>\n </div>\n )}\n </div>\n\n <div className=\"royui-tp__body\">\n {mode === 'analog' ? (\n <AnalogClock\n value={draft}\n onChange={setDraft}\n hourCycle={hourCycle}\n minuteStep={minuteStep}\n />\n ) : (\n <DigitalClock\n value={draft}\n onChange={setDraft}\n hourCycle={hourCycle}\n minuteStep={minuteStep}\n />\n )}\n </div>\n\n <div className=\"royui-tp__foot\">\n <button type=\"button\" className=\"royui-tp__ghost\" onClick={setNow}>\n Now\n </button>\n <button type=\"button\" className=\"royui-tp__primary\" onClick={apply}>\n Apply\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport type { TimeValue };\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\nimport type { Column, TableLayout } from './types';\n\nexport interface ColumnMenuProps<T> {\n columns: Column<T>[];\n layout: TableLayout;\n onToggle: (key: string) => void;\n onReset: () => void;\n}\n\nexport function ColumnMenu<T>({\n columns,\n layout,\n onToggle,\n onReset,\n}: ColumnMenuProps<T>) {\n const [open, setOpen] = useState(false);\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 const hiddenCount = layout.hidden.length;\n\n return (\n <div className=\"royui-dt-colmenu\" ref={wrap}>\n <button\n type=\"button\"\n className=\"royui-dt-colmenu__trigger\"\n onClick={() => setOpen((o) => !o)}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n >\n Columns\n </button>\n {hiddenCount > 0 && (\n <button\n type=\"button\"\n className=\"royui-dt-colmenu__chip\"\n onClick={() => setOpen(true)}\n >\n {hiddenCount} hidden\n </button>\n )}\n\n {open && (\n <div className=\"royui-dt-colmenu__panel\" role=\"menu\">\n <div className=\"royui-dt-colmenu__head\">\n <span className=\"royui-dt-colmenu__title\">Columns</span>\n <button\n type=\"button\"\n className=\"royui-dt-colmenu__reset\"\n onClick={() => {\n onReset();\n }}\n >\n Reset\n </button>\n </div>\n <ul className=\"royui-dt-colmenu__list\">\n {columns.map((c) => {\n const isHidden = layout.hidden.includes(c.key);\n const disabled = c.hideable === false;\n return (\n <li key={c.key}>\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={!isHidden}\n className={[\n 'royui-dt-colmenu__row',\n isHidden && 'royui-dt-colmenu__row--off',\n disabled && 'royui-dt-colmenu__row--locked',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => !disabled && onToggle(c.key)}\n disabled={disabled}\n >\n <span\n className={[\n 'royui-dt-colmenu__dot',\n !isHidden && 'royui-dt-colmenu__dot--on',\n ]\n .filter(Boolean)\n .join(' ')}\n aria-hidden\n />\n <span className=\"royui-dt-colmenu__label\">{c.header}</span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport type { Column, TableLayout } from './types';\n\nfunction defaultLayout<T>(columns: Column<T>[]): TableLayout {\n return {\n order: columns.map((c) => c.key),\n sizes: columns.reduce<Record<string, number>>((acc, c) => {\n if (c.defaultWidth != null) acc[c.key] = c.defaultWidth;\n return acc;\n }, {}),\n hidden: columns.filter((c) => c.defaultHidden).map((c) => c.key),\n };\n}\n\nfunction loadLayout(key: string | undefined): TableLayout | null {\n if (!key || typeof window === 'undefined') return null;\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return null;\n return JSON.parse(raw) as TableLayout;\n } catch {\n return null;\n }\n}\n\nfunction saveLayout(key: string | undefined, layout: TableLayout): void {\n if (!key || typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, JSON.stringify(layout));\n } catch {\n // ignore\n }\n}\n\nexport function useTableLayout<T>(columns: Column<T>[], storageKey?: string) {\n const initial = useMemo<TableLayout>(() => {\n return loadLayout(storageKey) ?? defaultLayout(columns);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [layout, setLayout] = useState<TableLayout>(initial);\n\n useEffect(() => {\n // reconcile if columns change: drop unknown keys, append new ones at the end\n setLayout((prev) => {\n const known = new Set(columns.map((c) => c.key));\n const order = prev.order.filter((k) => known.has(k));\n columns.forEach((c) => {\n if (!order.includes(c.key)) order.push(c.key);\n });\n const sizes: Record<string, number> = {};\n Object.entries(prev.sizes).forEach(([k, v]) => {\n if (known.has(k)) sizes[k] = v;\n });\n const hidden = prev.hidden.filter((k) => known.has(k));\n return { order, sizes, hidden };\n });\n }, [columns]);\n\n useEffect(() => {\n saveLayout(storageKey, layout);\n }, [layout, storageKey]);\n\n const orderedColumns = useMemo(() => {\n const pinnedLeft = columns.filter((c) => c.pinned === 'left');\n const pinnedRight = columns.filter((c) => c.pinned === 'right');\n const pinnedKeys = new Set(\n [...pinnedLeft, ...pinnedRight].map((c) => c.key),\n );\n const rest = layout.order\n .filter((k) => !pinnedKeys.has(k))\n .map((k) => columns.find((c) => c.key === k))\n .filter(Boolean) as Column<T>[];\n return [...pinnedLeft, ...rest, ...pinnedRight];\n }, [columns, layout.order]);\n\n const visibleColumns = useMemo(\n () => orderedColumns.filter((c) => !layout.hidden.includes(c.key)),\n [orderedColumns, layout.hidden],\n );\n\n const reorder = useCallback((key: string, toIndex: number) => {\n setLayout((prev) => {\n const order = [...prev.order];\n const from = order.indexOf(key);\n if (from === -1 || from === toIndex) return prev;\n const item = order.splice(from, 1)[0];\n if (item === undefined) return prev;\n const insertAt = toIndex > from ? toIndex - 1 : toIndex;\n order.splice(Math.max(0, Math.min(insertAt, order.length)), 0, item);\n return { ...prev, order };\n });\n }, []);\n\n const resize = useCallback((key: string, px: number | null) => {\n setLayout((prev) => {\n const sizes = { ...prev.sizes };\n if (px == null) delete sizes[key];\n else sizes[key] = Math.max(40, Math.round(px));\n return { ...prev, sizes };\n });\n }, []);\n\n const toggleHidden = useCallback((key: string) => {\n setLayout((prev) => {\n const hidden = prev.hidden.includes(key)\n ? prev.hidden.filter((k) => k !== key)\n : [...prev.hidden, key];\n return { ...prev, hidden };\n });\n }, []);\n\n const reset = useCallback(() => {\n setLayout(defaultLayout(columns));\n }, [columns]);\n\n return {\n layout,\n orderedColumns,\n visibleColumns,\n reorder,\n resize,\n toggleHidden,\n reset,\n };\n}\n","import type { Column, FilterState, SortDir } from './types';\nimport { isBetween, startOfDay } from '../date-range-picker';\n\nexport function defaultSearchPredicate<T>(\n row: T,\n query: string,\n columns: Column<T>[],\n): boolean {\n if (!query) return true;\n const q = query.toLowerCase();\n return columns.some((c) => {\n const v = c.accessor(row);\n if (v == null) return false;\n const s = v instanceof Date ? v.toLocaleString() : String(v);\n return s.toLowerCase().includes(q);\n });\n}\n\nexport function applyFilters<T>(\n rows: T[],\n columns: Column<T>[],\n filters: FilterState,\n cfg: {\n dateColumn?: string;\n timeColumn?: string;\n timeTolerance?: number;\n searchPredicate?: (row: T, q: string, cols: Column<T>[]) => boolean;\n },\n): T[] {\n const searchFn = cfg.searchPredicate ?? defaultSearchPredicate;\n\n return rows.filter((row) => {\n if (filters.search && !searchFn(row, filters.search, columns)) return false;\n\n if (cfg.dateColumn && (filters.dateRange.from || filters.dateRange.to)) {\n const col = columns.find((c) => c.key === cfg.dateColumn);\n if (col) {\n const raw = col.accessor(row);\n const d = raw instanceof Date ? raw : raw ? new Date(raw as string | number) : null;\n if (!d || isNaN(d.getTime())) return false;\n const day = startOfDay(d);\n const from = filters.dateRange.from ?? day;\n const to = filters.dateRange.to ?? filters.dateRange.from ?? day;\n if (!isBetween(day, startOfDay(from), startOfDay(to))) return false;\n }\n }\n\n if (cfg.timeColumn && filters.time) {\n const col = columns.find((c) => c.key === cfg.timeColumn);\n if (col) {\n const raw = col.accessor(row);\n const d = raw instanceof Date ? raw : raw ? new Date(raw as string | number) : null;\n if (!d || isNaN(d.getTime())) return false;\n const rowMin = d.getHours() * 60 + d.getMinutes();\n const filterMin = filters.time.hours * 60 + filters.time.minutes;\n const tol = cfg.timeTolerance ?? 0;\n if (Math.abs(rowMin - filterMin) > tol) return false;\n }\n }\n\n return true;\n });\n}\n\nexport function applySort<T>(\n rows: T[],\n columns: Column<T>[],\n sort: { key: string; dir: SortDir } | null,\n): T[] {\n if (!sort || !sort.dir) return rows;\n const col = columns.find((c) => c.key === sort.key);\n if (!col) return rows;\n const dirMul = sort.dir === 'asc' ? 1 : -1;\n const getter = col.sortBy ?? col.accessor;\n return [...rows].sort((a, b) => {\n const av = getter(a) as string | number | Date;\n const bv = getter(b) as string | number | Date;\n if (av == null && bv == null) return 0;\n if (av == null) return 1;\n if (bv == null) return -1;\n if (av instanceof Date && bv instanceof Date) {\n return (av.getTime() - bv.getTime()) * dirMul;\n }\n if (typeof av === 'number' && typeof bv === 'number') {\n return (av - bv) * dirMul;\n }\n return String(av).localeCompare(String(bv)) * dirMul;\n });\n}\n\nexport function paginate<T>(rows: T[], page: number, pageSize: number): T[] {\n const start = (page - 1) * pageSize;\n return rows.slice(start, start + pageSize);\n}\n","import type { Column } from './types';\n\n/* ────────────────────────────────────────────────────────────\n CSV (RFC 4180)\n ──────────────────────────────────────────────────────────── */\n\nfunction csvEscape(v: unknown): string {\n if (v == null) return '';\n const s = typeof v === 'string' ? v : v instanceof Date ? v.toISOString() : String(v);\n if (/[\",\\n\\r]/.test(s)) {\n return `\"${s.replace(/\"/g, '\"\"')}\"`;\n }\n return s;\n}\n\nexport function toCsv<T>(rows: T[], cols: Column<T>[]): string {\n const visible = cols.filter((c) => !c.defaultHidden);\n const header = visible.map((c) => csvEscape(c.header)).join(',');\n const body = rows\n .map((row) =>\n visible.map((c) => csvEscape(c.accessor(row))).join(','),\n )\n .join('\\n');\n return body ? `${header}\\n${body}` : header;\n}\n\nexport function fromCsv(text: string): Record<string, string>[] {\n const rows: string[][] = [];\n let cur: string[] = [];\n let field = '';\n let i = 0;\n let inQuotes = false;\n const len = text.length;\n\n while (i < len) {\n const ch = text[i];\n if (inQuotes) {\n if (ch === '\"') {\n if (text[i + 1] === '\"') {\n field += '\"';\n i += 2;\n continue;\n }\n inQuotes = false;\n i++;\n continue;\n }\n field += ch;\n i++;\n continue;\n }\n if (ch === '\"') {\n inQuotes = true;\n i++;\n continue;\n }\n if (ch === ',') {\n cur.push(field);\n field = '';\n i++;\n continue;\n }\n if (ch === '\\r') {\n i++;\n continue;\n }\n if (ch === '\\n') {\n cur.push(field);\n rows.push(cur);\n cur = [];\n field = '';\n i++;\n continue;\n }\n field += ch;\n i++;\n }\n if (field.length > 0 || cur.length > 0) {\n cur.push(field);\n rows.push(cur);\n }\n\n if (rows.length === 0) return [];\n const head = rows[0] ?? [];\n const body = rows.slice(1);\n return body.map((r) => {\n const obj: Record<string, string> = {};\n head.forEach((h, idx) => {\n obj[h] = r[idx] ?? '';\n });\n return obj;\n });\n}\n\n/* ────────────────────────────────────────────────────────────\n JSON\n ──────────────────────────────────────────────────────────── */\n\nexport function toJson<T>(rows: T[], cols: Column<T>[]): string {\n const visible = cols.filter((c) => !c.defaultHidden);\n const out = rows.map((row) => {\n const obj: Record<string, unknown> = {};\n visible.forEach((c) => {\n obj[c.key] = c.accessor(row);\n });\n return obj;\n });\n return JSON.stringify(out, null, 2);\n}\n\nexport function fromJson<T>(text: string): T[] {\n const parsed = JSON.parse(text);\n if (!Array.isArray(parsed)) {\n throw new Error('Expected a JSON array of rows');\n }\n return parsed as T[];\n}\n\n/* ────────────────────────────────────────────────────────────\n Download trigger\n ──────────────────────────────────────────────────────────── */\n\nexport function downloadString(text: string, filename: string, mime: string): void {\n if (typeof window === 'undefined') return;\n const blob = new Blob([text], { type: mime });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\n","'use client';\n\nimport {\n useCallback,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DragEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n type FontSpec,\n} from '../table';\nimport { TableSearch } from '../table-search';\nimport { Pagination } from '../pagination';\nimport { DateRangePicker } from '../date-range-picker';\nimport type { DateRange } from '../date-range-picker';\nimport { TimePicker, type TimeValue } from '../time-picker';\nimport { ColumnMenu } from './ColumnMenu';\nimport { useTableLayout } from './useTableLayout';\nimport { applyFilters, applySort, paginate } from './filters';\nimport { downloadString, toCsv, toJson, fromCsv, fromJson } from './io';\nimport type {\n Column,\n DataTableProps,\n FilterState,\n SortDir,\n} from './types';\nimport './DataTable.css';\n\nfunction fontStyleFor(spec: FontSpec | undefined): CSSProperties | undefined {\n if (!spec) return undefined;\n if (typeof spec === 'string') return { fontFamily: spec };\n const s: CSSProperties = {};\n if (spec.family) s.fontFamily = spec.family;\n if (spec.size != null)\n s.fontSize = typeof spec.size === 'number' ? `${spec.size}px` : spec.size;\n if (spec.weight != null) s.fontWeight = spec.weight as number;\n if (spec.letterSpacing) s.letterSpacing = spec.letterSpacing;\n if (spec.featureSettings) s.fontFeatureSettings = spec.featureSettings;\n return s;\n}\n\nfunction renderCellValue(value: unknown, type?: Column<unknown>['type']): string {\n if (value == null) return '';\n if (value instanceof Date) {\n if (type === 'time') {\n return value.toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n if (type === 'date') {\n return value.toLocaleDateString();\n }\n return value.toLocaleString();\n }\n return String(value);\n}\n\nexport function DataTable<T>({\n data,\n columns,\n getRowId,\n visibleRows = 7,\n rowHeight = 44,\n stickyHeader = true,\n density = 'cozy',\n loading,\n empty,\n fitColumns = false,\n search,\n dateFilter,\n timeFilter,\n pagination,\n reorderable = true,\n resizable = true,\n columnMenu = true,\n dataIO,\n headerFont,\n rowHeaderFont,\n cellFont,\n storageKey,\n className = '',\n toolbarExtras,\n}: DataTableProps<T>) {\n const {\n layout,\n orderedColumns,\n visibleColumns,\n reorder,\n resize,\n toggleHidden,\n reset,\n } = useTableLayout(columns, storageKey);\n\n /* ── filter state ─────────────────────────────────────── */\n const [filters, setFilters] = useState<FilterState>({\n search: '',\n dateRange: { from: null, to: null },\n time: null,\n });\n const [sort, setSort] = useState<{ key: string; dir: SortDir } | null>(null);\n const pageSize = pagination === false ? Infinity : pagination?.pageSize ?? 25;\n const [page, setPage] = useState(1);\n\n /* ── pipeline ─────────────────────────────────────────── */\n const filtered = useMemo(\n () =>\n applyFilters(data, columns, filters, {\n dateColumn: dateFilter?.column,\n timeColumn: timeFilter?.column,\n timeTolerance: timeFilter?.toleranceMinutes,\n searchPredicate: search?.predicate,\n }),\n [data, columns, filters, dateFilter?.column, timeFilter?.column, timeFilter?.toleranceMinutes, search?.predicate],\n );\n\n const sorted = useMemo(() => applySort(filtered, columns, sort), [filtered, columns, sort]);\n\n const pageCount = pagination === false ? 1 : Math.max(1, Math.ceil(sorted.length / pageSize));\n const currentPage = Math.min(page, pageCount);\n\n const pageRows = useMemo(\n () => (pagination === false ? sorted : paginate(sorted, currentPage, pageSize)),\n [pagination, sorted, currentPage, pageSize],\n );\n\n /* ── column drag reorder ──────────────────────────────── */\n const [dragKey, setDragKey] = useState<string | null>(null);\n const [dropIndex, setDropIndex] = useState<number | null>(null);\n\n const onDragStart = (e: DragEvent<HTMLTableCellElement>, key: string) => {\n if (!reorderable) return;\n setDragKey(key);\n e.dataTransfer.effectAllowed = 'move';\n try {\n e.dataTransfer.setData('text/plain', key);\n } catch {\n /* IE/Safari quirks */\n }\n };\n\n const onDragOver = (e: DragEvent<HTMLTableCellElement>, idx: number) => {\n if (!reorderable || !dragKey) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n const rect = e.currentTarget.getBoundingClientRect();\n const isRight = e.clientX - rect.left > rect.width / 2;\n setDropIndex(idx + (isRight ? 1 : 0));\n };\n\n const onDrop = (e: DragEvent<HTMLTableCellElement>) => {\n if (!reorderable || !dragKey || dropIndex == null) return;\n e.preventDefault();\n reorder(dragKey, dropIndex);\n setDragKey(null);\n setDropIndex(null);\n };\n\n const onDragEnd = () => {\n setDragKey(null);\n setDropIndex(null);\n };\n\n /* ── column resize ────────────────────────────────────── */\n const resizingKey = useRef<string | null>(null);\n const resizeStartX = useRef(0);\n const resizeStartW = useRef(0);\n\n const beginResize = (\n e: ReactPointerEvent<HTMLSpanElement>,\n key: string,\n ) => {\n if (!resizable) return;\n e.stopPropagation();\n e.preventDefault();\n const th = (e.currentTarget.parentElement as HTMLElement) ?? null;\n const startW = th ? th.getBoundingClientRect().width : 120;\n resizingKey.current = key;\n resizeStartX.current = e.clientX;\n resizeStartW.current = startW;\n window.addEventListener('pointermove', onResizeMove);\n window.addEventListener('pointerup', endResize);\n };\n\n const onResizeMove = (e: PointerEvent) => {\n if (!resizingKey.current) return;\n const dx = e.clientX - resizeStartX.current;\n const col = columns.find((c) => c.key === resizingKey.current);\n const min = col?.minWidth ?? 80;\n const max = col?.maxWidth ?? 2000;\n const next = Math.max(min, Math.min(max, resizeStartW.current + dx));\n resize(resizingKey.current, next);\n };\n\n const endResize = () => {\n resizingKey.current = null;\n window.removeEventListener('pointermove', onResizeMove);\n window.removeEventListener('pointerup', endResize);\n };\n\n const doubleClickReset = (key: string) => resize(key, null);\n\n /* ── sort handler ─────────────────────────────────────── */\n const cycleSort = useCallback((key: string) => {\n setSort((prev) => {\n if (!prev || prev.key !== key) return { key, dir: 'asc' };\n if (prev.dir === 'asc') return { key, dir: 'desc' };\n return null;\n });\n }, []);\n\n /* ── data IO ──────────────────────────────────────────── */\n const fileInput = useRef<HTMLInputElement>(null);\n const [ioFlash, setIoFlash] = useState<string | null>(null);\n const flashTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const flash = (text: string, ms = 1400) => {\n if (flashTimer.current) clearTimeout(flashTimer.current);\n setIoFlash(text);\n flashTimer.current = setTimeout(() => setIoFlash(null), ms);\n };\n\n const exportRows = (format: 'csv' | 'json') => {\n if (!dataIO?.export) return;\n const scope = dataIO.export.scope ?? 'filtered';\n let rows: T[];\n if (scope === 'all') rows = data;\n else if (scope === 'page') rows = pageRows;\n else rows = sorted;\n\n const cols = visibleColumns;\n const text = dataIO.export.serialize\n ? dataIO.export.serialize(rows, cols, format)\n : format === 'csv'\n ? toCsv(rows, cols)\n : toJson(rows, cols);\n\n const baseName =\n typeof dataIO.export.filename === 'function'\n ? dataIO.export.filename()\n : dataIO.export.filename ?? 'table-export';\n const filename = `${baseName}.${format}`;\n const mime = format === 'csv' ? 'text/csv;charset=utf-8' : 'application/json';\n downloadString(text, filename, mime);\n flash('Exported');\n };\n\n const onPickFile = async (file: File) => {\n if (!dataIO?.import) return;\n const text = await file.text();\n try {\n const parsed = dataIO.import.parse\n ? await dataIO.import.parse(text, file)\n : file.name.endsWith('.json')\n ? (fromJson(text) as T[])\n : (fromCsv(text) as unknown as T[]);\n dataIO.import.onImport(parsed as T[], {\n mode: dataIO.import.mode ?? 'replace',\n file,\n });\n flash(`Imported ${parsed.length} ${parsed.length === 1 ? 'row' : 'rows'}`);\n } catch (err) {\n dataIO.import.onError?.(err, file);\n flash(\"Couldn't read file\", 2000);\n }\n };\n\n /* ── render ───────────────────────────────────────────── */\n\n const showToolbar =\n search?.enabled ||\n !!dateFilter ||\n !!timeFilter ||\n columnMenu ||\n !!dataIO?.export?.enabled ||\n !!dataIO?.import?.enabled ||\n !!toolbarExtras;\n\n const exportFormats = dataIO?.export?.formats ?? ['csv', 'json'];\n const [exportMenuOpen, setExportMenuOpen] = useState(false);\n\n return (\n <div className={['royui-dt', className].filter(Boolean).join(' ')}>\n {showToolbar && (\n <div className=\"royui-dt__toolbar\">\n <div className=\"royui-dt__toolbar-left\">\n {search?.enabled && (\n <TableSearch\n value={filters.search}\n onChange={(v) => {\n setFilters((f) => ({ ...f, search: v }));\n setPage(1);\n }}\n placeholder={search.placeholder}\n debounceMs={search.debounceMs}\n />\n )}\n {dateFilter && (\n <DateRangePicker\n value={filters.dateRange}\n onChange={(r) => {\n setFilters((f) => ({ ...f, dateRange: r }));\n setPage(1);\n }}\n monthsVisible={dateFilter.monthsVisible ?? 2}\n placeholder={dateFilter.placeholder ?? 'Date range'}\n />\n )}\n {timeFilter && (\n <TimePicker\n value={filters.time}\n onChange={(t: TimeValue) => {\n setFilters((f) => ({ ...f, time: t }));\n setPage(1);\n }}\n variant={timeFilter.variant ?? 'analog'}\n hourCycle={timeFilter.hourCycle ?? 24}\n placeholder={timeFilter.placeholder ?? 'Time'}\n />\n )}\n </div>\n\n <div className=\"royui-dt__toolbar-right\">\n {toolbarExtras}\n {columnMenu && (\n <ColumnMenu\n columns={orderedColumns}\n layout={layout}\n onToggle={toggleHidden}\n onReset={reset}\n />\n )}\n {(dataIO?.export?.enabled || dataIO?.import?.enabled) && (\n <span className=\"royui-dt__sep\" aria-hidden>·</span>\n )}\n {dataIO?.export?.enabled && (\n <div className=\"royui-dt-io\">\n <button\n type=\"button\"\n className=\"royui-dt-io__btn\"\n onClick={() => {\n const only = exportFormats[0];\n if (exportFormats.length === 1 && only) {\n exportRows(only);\n } else {\n setExportMenuOpen((o) => !o);\n }\n }}\n >\n {ioFlash && ioFlash.startsWith('Export') ? ioFlash : 'Export'}\n </button>\n {exportMenuOpen && exportFormats.length > 1 && (\n <div\n className=\"royui-dt-io__menu\"\n onMouseLeave={() => setExportMenuOpen(false)}\n >\n {exportFormats.map((f) => (\n <button\n key={f}\n type=\"button\"\n className=\"royui-dt-io__menu-item\"\n onClick={() => {\n exportRows(f);\n setExportMenuOpen(false);\n }}\n >\n {f.toUpperCase()}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n {dataIO?.import?.enabled && (\n <>\n <button\n type=\"button\"\n className=\"royui-dt-io__btn\"\n onClick={() => fileInput.current?.click()}\n >\n {ioFlash && (ioFlash.startsWith('Import') || ioFlash.startsWith(\"Couldn't\"))\n ? ioFlash\n : 'Import'}\n </button>\n <input\n ref={fileInput}\n type=\"file\"\n accept={dataIO.import.accept ?? '.csv,.json'}\n style={{ display: 'none' }}\n onChange={(e) => {\n const f = e.target.files?.[0];\n if (f) onPickFile(f);\n e.target.value = '';\n }}\n />\n </>\n )}\n </div>\n </div>\n )}\n\n <Table\n visibleRows={visibleRows}\n rowHeight={rowHeight}\n stickyHeader={stickyHeader}\n density={density}\n loading={loading}\n empty={empty}\n isEmpty={pageRows.length === 0}\n fitColumns={fitColumns}\n headerFont={headerFont}\n rowHeaderFont={rowHeaderFont}\n cellFont={cellFont}\n >\n <colgroup>\n {visibleColumns.map((c) => {\n const w = fitColumns ? undefined : layout.sizes[c.key];\n return (\n <col\n key={c.key}\n style={w ? { width: w } : undefined}\n className={dragKey === c.key ? 'royui-dt__col--dragging' : undefined}\n />\n );\n })}\n </colgroup>\n\n <TableHeader>\n <TableRow>\n {visibleColumns.map((c, idx) => {\n const isDragging = dragKey === c.key;\n const showDropBefore = dropIndex === idx;\n const sortDir =\n sort && sort.key === c.key && sort.dir ? sort.dir : null;\n const canReorder = reorderable && c.reorderable !== false && !c.pinned;\n const canResize = resizable && c.resizable !== false;\n\n return (\n <TableHead\n key={c.key}\n align={c.align ?? (c.type === 'number' ? 'right' : 'left')}\n className={[\n 'royui-dt__th',\n canReorder && 'royui-dt__th--reorderable',\n canResize && 'royui-dt__th--resizable',\n isDragging && 'royui-dt__th--dragging',\n showDropBefore && 'royui-dt__th--drop-before',\n ]\n .filter(Boolean)\n .join(' ')}\n draggable={canReorder}\n onDragStart={(e) => onDragStart(e, c.key)}\n onDragOver={(e) => onDragOver(e, idx)}\n onDrop={onDrop}\n onDragEnd={onDragEnd}\n title={\n canReorder && canResize\n ? 'Drag to reorder · drag the right edge to resize'\n : canReorder\n ? 'Drag to reorder'\n : canResize\n ? 'Drag the right edge to resize'\n : undefined\n }\n >\n <span\n className=\"royui-dt__th-inner\"\n onClick={() => cycleSort(c.key)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n cycleSort(c.key);\n }\n }}\n >\n <span className=\"royui-dt__th-label\">{c.header}</span>\n {sortDir && (\n <span\n className={`royui-dt__sort-indicator royui-dt__sort-indicator--${sortDir}`}\n aria-hidden\n />\n )}\n </span>\n {canResize && (\n <span\n className=\"royui-dt__resize\"\n onPointerDown={(e) => beginResize(e, c.key)}\n onDoubleClick={() => doubleClickReset(c.key)}\n aria-hidden\n >\n <span className=\"royui-dt__resize-bar\" aria-hidden />\n </span>\n )}\n </TableHead>\n );\n })}\n {dropIndex === visibleColumns.length && (\n <TableHead className=\"royui-dt__th--drop-end\" aria-hidden />\n )}\n </TableRow>\n </TableHeader>\n\n <TableBody>\n {pageRows.map((row, i) => {\n const id = getRowId\n ? getRowId(row, i)\n : (row as Record<string, unknown>)?.['id'] != null\n ? String((row as Record<string, unknown>)['id'])\n : i;\n return (\n <TableRow key={id as string | number}>\n {visibleColumns.map((c) => {\n const value = c.accessor(row);\n const display = c.cell ? c.cell(value, row) : renderCellValue(value, c.type);\n const cellStyle = fontStyleFor(c.font);\n const isNum = c.type === 'number';\n return (\n <TableCell\n key={c.key}\n isRowHeader={c.isRowHeader}\n align={c.align ?? (isNum ? 'right' : 'left')}\n className={isNum ? 'royui-table__td--num' : undefined}\n style={cellStyle}\n >\n {display}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n\n {pagination !== false && pageCount > 1 && (\n <div className=\"royui-dt__pagination\">\n <Pagination\n page={currentPage}\n pageCount={pageCount}\n onPageChange={setPage}\n siblingCount={pagination?.siblingCount ?? 1}\n showSummary={pagination?.showSummary ?? true}\n summaryRender={(p, pc) =>\n `${(p - 1) * pageSize + 1}–${Math.min(p * pageSize, sorted.length)} of ${sorted.length}`\n }\n />\n </div>\n )}\n </div>\n );\n}\n"]}
|
package/package.json
CHANGED