@particle-academy/react-fancy 5.56.0 → 5.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/dist/{chunk-XO4UWQCU.cjs → chunk-4DL2U23D.cjs} +233 -77
- package/dist/chunk-4DL2U23D.cjs.map +1 -0
- package/dist/{chunk-SFJ5WOX5.js → chunk-MLZGGAXQ.js} +233 -77
- package/dist/chunk-MLZGGAXQ.js.map +1 -0
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/dist/time-grid.cjs +2 -2
- package/dist/time-grid.d.cts +8 -0
- package/dist/time-grid.d.ts +8 -0
- package/dist/time-grid.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-SFJ5WOX5.js.map +0 -1
- package/dist/chunk-XO4UWQCU.cjs.map +0 -1
package/dist/time-grid.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk4DL2U23D_cjs = require('./chunk-4DL2U23D.cjs');
|
|
4
4
|
require('./chunk-I27K6NLX.cjs');
|
|
5
5
|
require('./chunk-ZU5Q77OT.cjs');
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@ require('./chunk-ZU5Q77OT.cjs');
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, "TimeGrid", {
|
|
10
10
|
enumerable: true,
|
|
11
|
-
get: function () { return
|
|
11
|
+
get: function () { return chunk4DL2U23D_cjs.TimeGrid; }
|
|
12
12
|
});
|
|
13
13
|
//# sourceMappingURL=time-grid.cjs.map
|
|
14
14
|
//# sourceMappingURL=time-grid.cjs.map
|
package/dist/time-grid.d.cts
CHANGED
|
@@ -142,6 +142,14 @@ interface TimeGridProps {
|
|
|
142
142
|
onBlockedSelect?: (blocked: TimeGridBlockedCell[]) => void;
|
|
143
143
|
/** Hover, for a host-owned detail panel. `null, null` when the pointer leaves. */
|
|
144
144
|
onCellHover?: (cell: TimeGridCell | null, at: TimeGridCoord | null) => void;
|
|
145
|
+
/**
|
|
146
|
+
* Typed grid: render only the columns in view (plus overscan), holding the
|
|
147
|
+
* rest of the width with spacers. Default: on above 500 columns. Cell ids,
|
|
148
|
+
* selection and callbacks still cover every cell — they come from `cells`,
|
|
149
|
+
* not the DOM — and keyboard focus or an out-of-view `selection` scrolls the
|
|
150
|
+
* window to it.
|
|
151
|
+
*/
|
|
152
|
+
windowColumns?: boolean;
|
|
145
153
|
/** Accessible name of the grid (typed grid). */
|
|
146
154
|
"aria-label"?: string;
|
|
147
155
|
}
|
package/dist/time-grid.d.ts
CHANGED
|
@@ -142,6 +142,14 @@ interface TimeGridProps {
|
|
|
142
142
|
onBlockedSelect?: (blocked: TimeGridBlockedCell[]) => void;
|
|
143
143
|
/** Hover, for a host-owned detail panel. `null, null` when the pointer leaves. */
|
|
144
144
|
onCellHover?: (cell: TimeGridCell | null, at: TimeGridCoord | null) => void;
|
|
145
|
+
/**
|
|
146
|
+
* Typed grid: render only the columns in view (plus overscan), holding the
|
|
147
|
+
* rest of the width with spacers. Default: on above 500 columns. Cell ids,
|
|
148
|
+
* selection and callbacks still cover every cell — they come from `cells`,
|
|
149
|
+
* not the DOM — and keyboard focus or an out-of-view `selection` scrolls the
|
|
150
|
+
* window to it.
|
|
151
|
+
*/
|
|
152
|
+
windowColumns?: boolean;
|
|
145
153
|
/** Accessible name of the grid (typed grid). */
|
|
146
154
|
"aria-label"?: string;
|
|
147
155
|
}
|
package/dist/time-grid.js
CHANGED
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/TimeGrid/TimeGrid.selection.ts","../src/components/TimeGrid/TypedTimeGrid.tsx","../src/components/TimeGrid/TimeGrid.tsx"],"names":["rEnd","TypedRow","TypedTimeGrid","forwardRef","jsx","useState","jsxs"],"mappings":"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","file":"chunk-SFJ5WOX5.js","sourcesContent":["import type {\n TimeGridCoord,\n TimeGridDisabledRange,\n TimeGridSelection,\n TimeGridSelectionShape,\n} from \"./TimeGrid.types\";\n\n/**\n * Pure selection arithmetic for the typed TimeGrid. No React, no DOM: every\n * selection is DERIVED from an anchor and a target cell, never accumulated\n * from the cells a pointer happened to visit (which is how a fast drag used to\n * leave gaps).\n */\n\nexport type IsDisabled = (r: number, c: number) => boolean;\n\n/** Rectangle from two corners, normalised; linear run from two ends, normalised. */\nexport function selectionBetween(\n shape: TimeGridSelectionShape,\n a: TimeGridCoord,\n b: TimeGridCoord,\n nCols: number,\n): TimeGridSelection {\n if (shape === \"linear\") {\n const ia = a.r * nCols + a.c;\n const ib = b.r * nCols + b.c;\n return ia <= ib\n ? { shape: \"linear\", from: { r: a.r, c: a.c }, to: { r: b.r, c: b.c } }\n : { shape: \"linear\", from: { r: b.r, c: b.c }, to: { r: a.r, c: a.c } };\n }\n return {\n shape: \"rectangle\",\n r1: Math.min(a.r, b.r),\n c1: Math.min(a.c, b.c),\n r2: Math.max(a.r, b.r),\n c2: Math.max(a.c, b.c),\n };\n}\n\n/** The columns `[start, end]` of row `r` inside `sel`, or null. */\nexport function rowSegment(\n sel: TimeGridSelection | null | undefined,\n r: number,\n nCols: number,\n): [number, number] | null {\n if (!sel) return null;\n if (sel.shape === \"rectangle\") {\n return r >= sel.r1 && r <= sel.r2 ? [sel.c1, sel.c2] : null;\n }\n const { from, to } = sel;\n if (r < from.r || r > to.r) return null;\n const start = r === from.r ? from.c : 0;\n const end = r === to.r ? to.c : nCols - 1;\n return start <= end ? [start, end] : null;\n}\n\n/** Every coordinate in `sel`, in selection order (row-major). */\nexport function selectionCoords(\n sel: TimeGridSelection | null | undefined,\n nRows: number,\n nCols: number,\n): TimeGridCoord[] {\n const out: TimeGridCoord[] = [];\n if (!sel) return out;\n const rFrom = sel.shape === \"rectangle\" ? sel.r1 : sel.from.r;\n const rTo = sel.shape === \"rectangle\" ? sel.r2 : sel.to.r;\n for (let r = Math.max(0, rFrom); r <= Math.min(nRows - 1, rTo); r++) {\n const seg = rowSegment(sel, r, nCols);\n if (!seg) continue;\n for (let c = Math.max(0, seg[0]); c <= Math.min(nCols - 1, seg[1]); c++) out.push({ r, c });\n }\n return out;\n}\n\nexport function sameSelection(\n a: TimeGridSelection | null | undefined,\n b: TimeGridSelection | null | undefined,\n): boolean {\n if (!a || !b) return !a && !b;\n if (a.shape === \"rectangle\" && b.shape === \"rectangle\") {\n return a.r1 === b.r1 && a.c1 === b.c1 && a.r2 === b.r2 && a.c2 === b.c2;\n }\n if (a.shape === \"linear\" && b.shape === \"linear\") {\n return a.from.r === b.from.r && a.from.c === b.from.c && a.to.r === b.to.r && a.to.c === b.to.c;\n }\n return false;\n}\n\nexport type ResolvedRange =\n /** Apply this selection. `blocked` lists disabled cells it was clipped by. */\n | { kind: \"select\"; selection: TimeGridSelection; blocked: TimeGridCoord[] }\n /** Leave the selection as it was; report `blocked`. */\n | { kind: \"refuse\"; blocked: TimeGridCoord[] };\n\n/**\n * Resolve anchor -> target under the `disabledRange` policy.\n *\n * - `span`: the requested range, disabled cells included. Nothing is reported.\n * - `refuse`: the requested range if it holds no disabled cell, else nothing.\n * - `clamp`: cut on the ANCHOR's side of the nearest block.\n * linear — the run stops before the first disabled cell walking from\n * the anchor toward the target, in time order.\n * rectangle — the time window (columns) ends before the nearest column,\n * from the anchor, that holds a disabled cell in any selected\n * row. If the anchor's own column is blocked, the row span is\n * cut first, before the nearest row blocked in that column.\n *\n * A disabled anchor is refused under `clamp` and `refuse` alike.\n */\nexport function resolveRange(\n shape: TimeGridSelectionShape,\n anchor: TimeGridCoord,\n target: TimeGridCoord,\n nRows: number,\n nCols: number,\n isDisabled: IsDisabled,\n policy: TimeGridDisabledRange,\n): ResolvedRange {\n const requested = selectionBetween(shape, anchor, target, nCols);\n if (policy === \"span\") return { kind: \"select\", selection: requested, blocked: [] };\n\n const blocked = selectionCoords(requested, nRows, nCols).filter(({ r, c }) => isDisabled(r, c));\n if (blocked.length === 0) return { kind: \"select\", selection: requested, blocked };\n if (policy === \"refuse\" || isDisabled(anchor.r, anchor.c)) return { kind: \"refuse\", blocked };\n\n if (shape === \"linear\") {\n const ia = anchor.r * nCols + anchor.c;\n const it = target.r * nCols + target.c;\n const step = it >= ia ? 1 : -1;\n let last = ia;\n for (let i = ia + step; step > 0 ? i <= it : i >= it; i += step) {\n if (isDisabled(Math.floor(i / nCols), i % nCols)) break;\n last = i;\n }\n const end = { r: Math.floor(last / nCols), c: last % nCols };\n return { kind: \"select\", selection: selectionBetween(\"linear\", anchor, end, nCols), blocked };\n }\n\n const rStep = target.r >= anchor.r ? 1 : -1;\n const cStep = target.c >= anchor.c ? 1 : -1;\n const colBlocked = (c: number, rEnd: number) => {\n for (let r = anchor.r; rStep > 0 ? r <= rEnd : r >= rEnd; r += rStep) {\n if (isDisabled(r, c)) return true;\n }\n return false;\n };\n\n let rEnd = target.r;\n if (colBlocked(anchor.c, rEnd)) {\n rEnd = anchor.r;\n for (let r = anchor.r + rStep; rStep > 0 ? r <= target.r : r >= target.r; r += rStep) {\n if (isDisabled(r, anchor.c)) break;\n rEnd = r;\n }\n }\n let cEnd = anchor.c;\n for (let c = anchor.c + cStep; cStep > 0 ? c <= target.c : c >= target.c; c += cStep) {\n if (colBlocked(c, rEnd)) break;\n cEnd = c;\n }\n return {\n kind: \"select\",\n selection: selectionBetween(\"rectangle\", anchor, { r: rEnd, c: cEnd }, nCols),\n blocked,\n };\n}\n","import {\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type RefObject,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { composeRefs } from \"../../utils/compose-refs\";\nimport {\n resolveRange,\n rowSegment,\n sameSelection,\n selectionBetween,\n selectionCoords,\n} from \"./TimeGrid.selection\";\nimport type {\n TimeGridCell,\n TimeGridCoord,\n TimeGridMarkDef,\n TimeGridProps,\n TimeGridSelection,\n TimeGridStateDef,\n TimeGridTone,\n} from \"./TimeGrid.types\";\n\n/* Literal class strings so Tailwind's scanner finds them in dist. */\nconst TONE_FILL: Record<TimeGridTone, string> = {\n violet: \"bg-violet-500\",\n emerald: \"bg-emerald-500\",\n sky: \"bg-sky-500\",\n rose: \"bg-rose-500\",\n amber: \"bg-amber-500\",\n indigo: \"bg-indigo-500\",\n blue: \"bg-blue-500\",\n zinc: \"bg-zinc-500\",\n};\n\n/** A state with no tone: the neutral well, from the theme tokens. */\nconst NEUTRAL_FILL =\n \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\";\n\nconst CELL_BASE = \"relative m-px rounded-sm\";\nconst CELL_ENABLED = \"cursor-pointer hover:brightness-90 dark:hover:brightness-125\";\nconst CELL_DISABLED = \"cursor-not-allowed opacity-40\";\n/** Selected: a translucent focus-colour wash over the state's own tone, so both stay readable. */\nconst CELL_SELECTED =\n \"after:pointer-events-none after:absolute after:inset-0 after:rounded-sm after:bg-[color:var(--fancy-focus,var(--color-blue-500))]/50 dark:after:bg-[color:var(--fancy-focus-dark,var(--color-blue-400))]/50\";\n/** The keyboard-focused cell, while the grid has focus. */\nconst CELL_ACTIVE =\n \"z-10 outline-2 outline-offset-1 outline-[color:var(--fancy-text,var(--color-zinc-900))] dark:outline-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\nconst MARK_DOT =\n \"h-1.5 w-1.5 rounded-full ring-1 ring-[color:var(--fancy-surface,var(--color-white))] dark:ring-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\";\n\nconst HEADER_COL =\n \"overflow-visible whitespace-nowrap text-[10px] leading-4 text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\";\nconst HEADER_ROW =\n \"whitespace-nowrap pr-1 text-right text-[10px] font-medium text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\";\nconst HEADER_HOVER =\n \"cursor-pointer hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\nconst TOOLTIP =\n \"pointer-events-none absolute z-20 max-w-xs rounded-md px-2 py-1 text-xs shadow-lg bg-[color:var(--fancy-text,var(--color-zinc-900))] text-[color:var(--fancy-surface,var(--color-white))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\n// Bundlers replace `process.env.NODE_ENV` textually; without one, the\n// reference throws and we read that as production.\ndeclare const process: { env: Record<string, string | undefined> };\n\nfunction isDev(): boolean {\n try {\n return process.env.NODE_ENV !== \"production\";\n } catch {\n return false;\n }\n}\n\nconst EMPTY = {} as Record<string, never>;\nconst warnedStates = new Set<string>();\nlet warnedNoStates = false;\n\ntype Ctx = {\n baseId: string;\n rows: string[];\n cols: string[];\n states: Record<string, TimeGridStateDef>;\n marks: Record<string, TimeGridMarkDef>;\n stateClass: (state: string) => string;\n cellWidth: number;\n cellHeight: number;\n fns: RefObject<{\n cellId?: (r: number, c: number) => string;\n ariaCell?: (r: number, c: number, on: boolean) => string;\n }>;\n};\n\nconst cellDomId = (baseId: string, r: number, c: number) => `${baseId}-${r}-${c}`;\n\nfunction parseCoord(el: Element | null, baseId: string): TimeGridCoord | null {\n const id = el?.id;\n if (!id || !id.startsWith(baseId + \"-\")) return null;\n const m = /-(\\d+)-(\\d+)$/.exec(id);\n return m ? { r: Number(m[1]), c: Number(m[2]) } : null;\n}\n\ntype RowProps = {\n ctx: Ctx;\n r: number;\n rowCells: TimeGridCell[];\n selStart: number;\n selEnd: number;\n /** Column of the keyboard-focused cell when it is in this row AND the grid has focus, else -1. */\n activeCol: number;\n onRowHeader?: (r: number) => void;\n};\n\nconst TypedRow = memo(function TypedRow({\n ctx,\n r,\n rowCells,\n selStart,\n selEnd,\n activeCol,\n onRowHeader,\n}: RowProps) {\n const { baseId, rows, cols, states, marks, stateClass, cellWidth, cellHeight } = ctx;\n const { cellId, ariaCell } = ctx.fns.current;\n const out = new Array(cols.length + 1);\n out[0] = (\n <div\n key=\"h\"\n role=\"rowheader\"\n data-react-fancy-timegrid-row={r}\n onClick={onRowHeader ? () => onRowHeader(r) : undefined}\n className={onRowHeader ? `${HEADER_ROW} ${HEADER_HOVER}` : HEADER_ROW}\n >\n {rows[r]}\n </div>\n );\n for (let c = 0; c < cols.length; c++) {\n const cell = rowCells?.[c];\n const state = cell?.state ?? \"\";\n const selected = c >= selStart && c <= selEnd;\n const reasons = cell?.reasons?.length ? cell.reasons.join(\". \") : undefined;\n const markIds = cell?.marks;\n let label: string;\n if (ariaCell) {\n label = ariaCell(r, c, selected);\n } else {\n label = `${rows[r]} ${cols[c]} ${states[state]?.label ?? state}`;\n if (markIds?.length) label += \", \" + markIds.map((m) => marks[m]?.label ?? m).join(\", \");\n }\n let cls = stateClass(state) + \" \" + (cell?.disabled ? CELL_DISABLED : CELL_ENABLED);\n if (selected) cls += \" \" + CELL_SELECTED;\n if (c === activeCol) cls += \" \" + CELL_ACTIVE;\n out[c + 1] = (\n <div\n key={c}\n id={cellDomId(baseId, r, c)}\n role=\"gridcell\"\n data-react-fancy-timegrid-cell={cellId ? cellId(r, c) : `${r}:${c}`}\n data-state={state}\n data-marks={markIds?.length ? markIds.join(\" \") : undefined}\n aria-selected={selected}\n aria-disabled={cell?.disabled ? true : undefined}\n aria-label={label}\n aria-description={reasons}\n title={reasons}\n className={cls}\n style={{ width: cellWidth, height: cellHeight }}\n >\n {markIds?.length ? (\n <span aria-hidden className=\"pointer-events-none absolute right-0 top-0 flex gap-px\">\n {markIds.map((m) => {\n const def = marks[m];\n return def?.icon ? (\n <span key={m} data-react-fancy-timegrid-mark={m} className=\"flex h-2.5 w-2.5 items-center justify-center [&>svg]:h-full [&>svg]:w-full\">\n {def.icon}\n </span>\n ) : (\n <span\n key={m}\n data-react-fancy-timegrid-mark={m}\n className={`${MARK_DOT} ${def?.tone ? TONE_FILL[def.tone] : NEUTRAL_FILL}`}\n />\n );\n })}\n </span>\n ) : null}\n </div>\n );\n }\n return (\n <div role=\"row\" className=\"contents\">\n {out}\n </div>\n );\n});\n\ntype Gesture = {\n anchor: TimeGridCoord;\n last: TimeGridCoord;\n selection: TimeGridSelection | null;\n blockedKey: string;\n};\n\nexport const TypedTimeGrid = forwardRef<HTMLDivElement, TimeGridProps>(function TypedTimeGrid(\n {\n rows,\n cols,\n cells: cellsProp,\n states: statesProp,\n marks: marksProp,\n cellWidth = 20,\n cellHeight = 16,\n sparseColLabels = true,\n toggleStripsOnHeaderClick = true,\n ariaCell,\n cellId,\n className,\n selectionShape = \"rectangle\",\n selection: selectionProp,\n onSelectionChange,\n onSelectionCommit,\n disabledRange = \"clamp\",\n onBlockedSelect,\n onCellHover,\n \"aria-label\": ariaLabel,\n },\n ref,\n) {\n if (!statesProp) {\n const msg =\n \"TimeGrid: `cells` was given without `states`. Every cell names a state id, and with no \" +\n \"vocabulary there is no tone to draw it in. Pass `states={{ open: { tone: \\\"emerald\\\", label: \\\"Open\\\" }, … }}`.\";\n if (isDev()) throw new Error(msg);\n if (!warnedNoStates) {\n warnedNoStates = true;\n console.error(msg);\n }\n }\n const states = statesProp ?? EMPTY;\n const marks = marksProp ?? EMPTY;\n const cells = cellsProp!;\n const nRows = rows.length;\n const nCols = cols.length;\n\n const baseId = useId();\n const outerRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n const setOuterRef = useMemo(() => composeRefs(ref, outerRef), [ref]);\n\n const controlled = selectionProp !== undefined;\n const [inner, setInner] = useState<TimeGridSelection | null>(null);\n const selection = controlled ? selectionProp : inner;\n\n const [active, setActive] = useState<TimeGridCoord>({ r: 0, c: 0 });\n const [focused, setFocused] = useState(false);\n const anchorRef = useRef<TimeGridCoord | null>(null);\n const gestureRef = useRef<Gesture | null>(null);\n const hoverRef = useRef<string>(\"\");\n\n // Latest values for handlers, so they stay stable across renders.\n const live = useRef({ cells, selection, selectionShape, disabledRange, onSelectionChange, onSelectionCommit, onBlockedSelect, onCellHover });\n live.current = { cells, selection, selectionShape, disabledRange, onSelectionChange, onSelectionCommit, onBlockedSelect, onCellHover };\n\n const fns = useRef<Ctx[\"fns\"][\"current\"]>({});\n fns.current = { cellId, ariaCell };\n\n const stateClass = useMemo(() => {\n const cache = new Map<string, string>();\n return (state: string) => {\n let cls = cache.get(state);\n if (cls !== undefined) return cls;\n const def = states[state];\n if (!def && statesProp && !warnedStates.has(state)) {\n warnedStates.add(state);\n console.warn(`TimeGrid: unknown state id \"${state}\" — not a key of \\`states\\`. Rendering it neutral.`);\n }\n cls = `${CELL_BASE} ${def?.tone ? TONE_FILL[def.tone] : NEUTRAL_FILL}${def?.className ? \" \" + def.className : \"\"}`;\n cache.set(state, cls);\n return cls;\n };\n }, [states, statesProp]);\n\n const ctx = useMemo<Ctx>(\n () => ({ baseId, rows, cols, states, marks, stateClass, cellWidth, cellHeight, fns }),\n [baseId, rows, cols, states, marks, stateClass, cellWidth, cellHeight],\n );\n\n /* ── selection plumbing ─────────────────────────────────────────────── */\n\n const isDisabled = useCallback(\n (r: number, c: number) => !!live.current.cells[r]?.[c]?.disabled,\n [],\n );\n\n const cellsOf = useCallback(\n (sel: TimeGridSelection | null) =>\n selectionCoords(sel, nRows, nCols).map(({ r, c }) => live.current.cells[r]?.[c]),\n [nRows, nCols],\n );\n\n const emit = useCallback(\n (next: TimeGridSelection | null) => {\n if (!controlled) setInner(next);\n live.current.onSelectionChange?.(next, cellsOf(next));\n },\n [controlled, cellsOf],\n );\n\n const reportBlocked = useCallback((blocked: TimeGridCoord[], g: Gesture | null) => {\n if (!blocked.length) return;\n const key = blocked.map((b) => `${b.r}:${b.c}`).join(\",\");\n if (g) {\n if (g.blockedKey === key) return;\n g.blockedKey = key;\n }\n live.current.onBlockedSelect?.(\n blocked.map(({ r, c }) => {\n const reasons = live.current.cells[r]?.[c]?.reasons;\n return reasons ? { r, c, reasons } : { r, c };\n }),\n );\n }, []);\n\n /** Apply anchor -> target under the policy. Returns the selection now in force for this gesture. */\n const extend = useCallback(\n (\n anchor: TimeGridCoord,\n target: TimeGridCoord,\n g: Gesture | null,\n shape = live.current.selectionShape,\n ): TimeGridSelection | null | undefined => {\n const res = resolveRange(shape, anchor, target, nRows, nCols, isDisabled, live.current.disabledRange);\n reportBlocked(res.blocked, g);\n if (res.kind === \"refuse\") return undefined;\n const current = g ? g.selection : live.current.selection;\n if (!sameSelection(current, res.selection) || (g && g.selection === null)) emit(res.selection);\n return res.selection;\n },\n [nRows, nCols, isDisabled, reportBlocked, emit],\n );\n\n const commit = useCallback(\n (sel: TimeGridSelection | null) => {\n if (sel) live.current.onSelectionCommit?.(sel, cellsOf(sel));\n },\n [cellsOf],\n );\n\n /* ── pointer ────────────────────────────────────────────────────────── */\n\n const coordFromEvent = useCallback(\n (e: ReactPointerEvent): TimeGridCoord | null => {\n const t = e.target as Element;\n let hit = parseCoord(t?.closest?.('[role=\"gridcell\"]') ?? null, baseId);\n if (!hit && typeof document.elementFromPoint === \"function\") {\n const under = document.elementFromPoint(e.clientX, e.clientY);\n hit = parseCoord(under?.closest?.('[role=\"gridcell\"]') ?? null, baseId);\n }\n if (!hit) hit = clampToGrid(e.clientX, e.clientY);\n return hit;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [baseId, nRows, nCols],\n );\n\n /**\n * Outside every cell (a captured drag past the grid's edge): the nearest cell\n * by geometry, measured from the first and last cell's boxes.\n */\n function clampToGrid(x: number, y: number): TimeGridCoord | null {\n const first = document.getElementById(cellDomId(baseId, 0, 0));\n const last = document.getElementById(cellDomId(baseId, nRows - 1, nCols - 1));\n if (!first || !last) return null;\n const a = first.getBoundingClientRect();\n const b = last.getBoundingClientRect();\n const w = (b.right - a.left) / nCols;\n const h = (b.bottom - a.top) / nRows;\n if (!(w > 0) || !(h > 0)) return null;\n return {\n r: Math.min(nRows - 1, Math.max(0, Math.floor((y - a.top) / h))),\n c: Math.min(nCols - 1, Math.max(0, Math.floor((x - a.left) / w))),\n };\n }\n\n const onPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (e.button !== 0) return;\n const at = coordFromEvent(e);\n if (!at) return;\n e.preventDefault();\n gridRef.current?.focus({ preventScroll: true });\n try {\n e.currentTarget.setPointerCapture?.(e.pointerId);\n } catch {\n /* jsdom / synthetic pointers */\n }\n setActive(at);\n const g: Gesture = { anchor: at, last: at, selection: null, blockedKey: \"\" };\n const sel = extend(at, at, g);\n if (sel === undefined) {\n gestureRef.current = null;\n return;\n }\n g.selection = sel;\n anchorRef.current = at;\n gestureRef.current = g;\n };\n\n const onPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const g = gestureRef.current;\n if (!g) return;\n const at = coordFromEvent(e);\n if (!at || (at.r === g.last.r && at.c === g.last.c)) return;\n g.last = at;\n setActive(at);\n const sel = extend(g.anchor, at, g);\n if (sel !== undefined) g.selection = sel;\n };\n\n const endGesture = () => {\n const g = gestureRef.current;\n gestureRef.current = null;\n if (g) commit(g.selection);\n };\n\n const onPointerOver = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!live.current.onCellHover) return;\n const at = parseCoord((e.target as Element)?.closest?.('[role=\"gridcell\"]') ?? null, baseId);\n if (!at) return;\n const key = `${at.r}:${at.c}`;\n if (hoverRef.current === key) return;\n hoverRef.current = key;\n live.current.onCellHover(live.current.cells[at.r]?.[at.c] ?? null, at);\n };\n\n const onPointerLeave = () => {\n if (!hoverRef.current) return;\n hoverRef.current = \"\";\n live.current.onCellHover?.(null, null);\n };\n\n /* ── keyboard: the grid holds focus; aria-activedescendant names the cell ── */\n\n const onKeyDown = (e: ReactKeyboardEvent<HTMLDivElement>) => {\n const move: Record<string, [number, number]> = {\n ArrowUp: [-1, 0],\n ArrowDown: [1, 0],\n ArrowLeft: [0, -1],\n ArrowRight: [0, 1],\n };\n const d = move[e.key];\n if (d) {\n e.preventDefault();\n const next = {\n r: Math.min(nRows - 1, Math.max(0, active.r + d[0])),\n c: Math.min(nCols - 1, Math.max(0, active.c + d[1])),\n };\n setActive(next);\n if (e.shiftKey) {\n const anchor = anchorRef.current ?? active;\n anchorRef.current = anchor;\n extend(anchor, next, null);\n }\n return;\n }\n if (e.key === \" \" || e.key === \"Spacebar\") {\n e.preventDefault();\n const sel = live.current.selection;\n const single = selectionBetween(live.current.selectionShape, active, active, nCols);\n if (sel && sameSelection(sel, single)) {\n anchorRef.current = null;\n emit(null);\n } else {\n const res = extend(active, active, null);\n if (res !== undefined) anchorRef.current = active;\n }\n return;\n }\n if (e.key === \"Enter\") {\n e.preventDefault();\n let sel = live.current.selection ?? null;\n if (!sel) {\n const res = extend(active, active, null);\n if (res === undefined) return;\n anchorRef.current = active;\n sel = res;\n }\n commit(sel);\n return;\n }\n if (e.key === \"Escape\") {\n if (live.current.selection) {\n e.preventDefault();\n anchorRef.current = null;\n emit(null);\n }\n }\n };\n\n /* ── header strips: select a whole row / column ─────────────────────── */\n\n const pickStrip = useCallback(\n (a: TimeGridCoord, b: TimeGridCoord) => {\n anchorRef.current = a;\n setActive(a);\n const sel = extend(a, b, null, \"rectangle\");\n if (sel) commit(sel);\n },\n [extend, commit],\n );\n const onRowHeader = useMemo(\n () => (toggleStripsOnHeaderClick ? (r: number) => pickStrip({ r, c: 0 }, { r, c: nCols - 1 }) : undefined),\n [toggleStripsOnHeaderClick, pickStrip, nCols],\n );\n\n /* ── focus tooltip for reasons ──────────────────────────────────────── */\n\n const activeCell = cells[active.r]?.[active.c];\n const activeReasons = focused && activeCell?.reasons?.length ? activeCell.reasons.join(\". \") : null;\n const [tipPos, setTipPos] = useState<{ left: number; top: number } | null>(null);\n useLayoutEffect(() => {\n if (!activeReasons) return;\n const outer = outerRef.current;\n const el = document.getElementById(cellDomId(baseId, active.r, active.c));\n if (!outer || !el) return;\n const o = outer.getBoundingClientRect();\n const b = el.getBoundingClientRect();\n setTipPos({ left: b.left - o.left + outer.scrollLeft, top: b.bottom - o.top + outer.scrollTop + 4 });\n }, [activeReasons, active.r, active.c, baseId]);\n\n // Keep the active cell in view when the keyboard moves it.\n useEffect(() => {\n if (!focused) return;\n const el = document.getElementById(cellDomId(baseId, active.r, active.c));\n el?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n }, [focused, active.r, active.c, baseId]);\n\n const colStep = Math.max(1, Math.floor(nCols / 6));\n const pitchX = cellWidth + 2;\n const tipId = `${baseId}-tip`;\n\n const bodyRows = new Array(nRows);\n for (let r = 0; r < nRows; r++) {\n const seg = rowSegment(selection, r, nCols);\n bodyRows[r] = (\n <TypedRow\n key={r}\n ctx={ctx}\n r={r}\n rowCells={cells[r]}\n selStart={seg ? seg[0] : -1}\n selEnd={seg ? seg[1] : -2}\n activeCol={focused && active.r === r ? active.c : -1}\n onRowHeader={onRowHeader}\n />\n );\n }\n\n return (\n <div\n ref={setOuterRef}\n data-react-fancy-timegrid=\"\"\n data-typed=\"\"\n className={cn(\"relative select-none overflow-x-auto\", className)}\n >\n <div\n ref={gridRef}\n role=\"grid\"\n tabIndex={0}\n aria-label={ariaLabel}\n aria-multiselectable=\"true\"\n aria-rowcount={nRows + 1}\n aria-colcount={nCols + 1}\n aria-activedescendant={cellDomId(baseId, active.r, active.c)}\n aria-describedby={activeReasons ? tipId : undefined}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endGesture}\n onPointerCancel={endGesture}\n onPointerOver={onPointerOver}\n onPointerLeave={onPointerLeave}\n onKeyDown={onKeyDown}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n className=\"inline-grid touch-none items-center outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--fancy-focus,var(--color-blue-500))]/40 dark:focus-visible:ring-[color:var(--fancy-focus-dark,var(--color-blue-400))]/20\"\n style={{ gridTemplateColumns: `max-content repeat(${nCols}, ${pitchX}px)` }}\n >\n <div role=\"row\" className=\"contents\">\n <div role=\"columnheader\" />\n {cols.map((label, c) => (\n <div\n key={c}\n role=\"columnheader\"\n data-react-fancy-timegrid-col={c}\n onClick={toggleStripsOnHeaderClick ? () => pickStrip({ r: 0, c }, { r: nRows - 1, c }) : undefined}\n className={toggleStripsOnHeaderClick ? `${HEADER_COL} ${HEADER_HOVER}` : HEADER_COL}\n >\n {sparseColLabels ? (c % colStep === 0 ? label : \"\") : label}\n </div>\n ))}\n </div>\n {bodyRows}\n </div>\n {activeReasons ? (\n <div\n id={tipId}\n role=\"tooltip\"\n data-react-fancy-timegrid-tooltip=\"\"\n className={TOOLTIP}\n style={tipPos ? { left: tipPos.left, top: tipPos.top } : undefined}\n >\n {activeReasons}\n </div>\n ) : null}\n </div>\n );\n});\n","import { forwardRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { TimeGridProps, TimeGridTone } from \"./TimeGrid.types\";\nimport { TypedTimeGrid } from \"./TypedTimeGrid\";\n\nconst TONE_CLASSES: Record<TimeGridTone, string> = {\n violet: \"bg-violet-500 hover:bg-violet-600\",\n emerald: \"bg-emerald-500 hover:bg-emerald-600\",\n sky: \"bg-sky-500 hover:bg-sky-600\",\n rose: \"bg-rose-500 hover:bg-rose-600\",\n amber: \"bg-amber-500 hover:bg-amber-600\",\n indigo: \"bg-indigo-500 hover:bg-indigo-600\",\n blue: \"bg-blue-500 hover:bg-blue-600\",\n zinc: \"bg-zinc-500 hover:bg-zinc-600\",\n};\n\nconst OFF_CLASSES =\n \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:bg-zinc-200 dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:bg-zinc-700\";\n\nconst NO_VALUE: boolean[][] = [];\nconst noop = () => {};\n\n/**\n * Two grids behind one name. `cells` (5.55.0) selects the typed grid: the\n * host's state vocabulary, range selection, keyboard. Without it this is the\n * boolean grid, unchanged since before 5.55.0.\n */\nexport const TimeGrid = forwardRef<HTMLDivElement, TimeGridProps>((props, ref) =>\n props.cells ? <TypedTimeGrid ref={ref} {...props} /> : <BooleanTimeGrid ref={ref} {...props} />,\n);\n\nconst BooleanTimeGrid = forwardRef<HTMLDivElement, TimeGridProps>(\n (\n {\n rows,\n cols,\n value = NO_VALUE,\n onChange = noop,\n toneOn = \"violet\",\n cellWidth = 20,\n cellHeight = 16,\n sparseColLabels = true,\n toggleStripsOnHeaderClick = true,\n ariaCell,\n cellId,\n className,\n },\n ref,\n ) => {\n const [drag, setDrag] = useState<boolean | null>(null);\n\n const setCell = (r: number, c: number, v: boolean) => {\n if (value[r]?.[c] === v) return;\n const next = value.map((row) => row.slice());\n next[r][c] = v;\n onChange(next);\n };\n\n const toggleRow = (r: number) => {\n if (!toggleStripsOnHeaderClick) return;\n const all = value[r].every(Boolean);\n const next = value.map((row) => row.slice());\n for (let c = 0; c < cols.length; c++) next[r][c] = !all;\n onChange(next);\n };\n\n const toggleCol = (c: number) => {\n if (!toggleStripsOnHeaderClick) return;\n const all = value.every((row) => row[c]);\n const next = value.map((row) => row.slice());\n for (let r = 0; r < rows.length; r++) next[r][c] = !all;\n onChange(next);\n };\n\n const colStep = Math.max(1, Math.floor(cols.length / 6));\n const onTone = TONE_CLASSES[toneOn];\n\n return (\n <div\n ref={ref}\n data-react-fancy-timegrid=\"\"\n className={cn(\n \"select-none overflow-x-auto\",\n className,\n )}\n onMouseLeave={() => setDrag(null)}\n onMouseUp={() => setDrag(null)}\n >\n <table className=\"text-[10px]\">\n <thead>\n <tr>\n <th />\n {cols.map((label, c) => (\n <th\n key={c}\n onClick={() => toggleCol(c)}\n style={{ width: cellWidth }}\n data-react-fancy-timegrid-col={c}\n className={cn(\n \"text-zinc-400\",\n toggleStripsOnHeaderClick &&\n \"cursor-pointer hover:text-zinc-700 dark:hover:text-zinc-200\",\n )}\n >\n {sparseColLabels ? (c % colStep === 0 ? label : \"\") : label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((label, r) => (\n <tr key={r}>\n <th\n onClick={() => toggleRow(r)}\n data-react-fancy-timegrid-row={r}\n className={cn(\n \"pr-1 text-right font-medium text-zinc-500\",\n toggleStripsOnHeaderClick &&\n \"cursor-pointer hover:text-zinc-800 dark:hover:text-zinc-200\",\n )}\n >\n {label}\n </th>\n {cols.map((_, c) => {\n const on = value[r]?.[c] ?? false;\n return (\n <td key={c} className=\"p-px\">\n <button\n type=\"button\"\n onMouseDown={() => {\n const v = !on;\n setDrag(v);\n setCell(r, c, v);\n }}\n onMouseEnter={() => drag !== null && setCell(r, c, drag)}\n style={{ width: cellWidth, height: cellHeight }}\n data-react-fancy-timegrid-cell={\n cellId ? cellId(r, c) : `${r}:${c}`\n }\n aria-pressed={on}\n aria-label={\n ariaCell\n ? ariaCell(r, c, on)\n : `${rows[r]} ${cols[c]} ${on ? \"on\" : \"off\"}`\n }\n className={cn(\n \"block rounded-sm transition\",\n on ? onTone : OFF_CLASSES,\n )}\n />\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n },\n);\n\nTimeGrid.displayName = \"TimeGrid\";\nBooleanTimeGrid.displayName = \"BooleanTimeGrid\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/TimeGrid/TimeGrid.selection.ts","../src/components/TimeGrid/TypedTimeGrid.tsx","../src/components/TimeGrid/TimeGrid.tsx"],"names":["rEnd","memo","TypedRow","jsx","forwardRef","TypedTimeGrid","useId","useRef","useMemo","composeRefs","useState","useCallback","useLayoutEffect","useEffect","jsxs","cn"],"mappings":"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","file":"chunk-XO4UWQCU.cjs","sourcesContent":["import type {\n TimeGridCoord,\n TimeGridDisabledRange,\n TimeGridSelection,\n TimeGridSelectionShape,\n} from \"./TimeGrid.types\";\n\n/**\n * Pure selection arithmetic for the typed TimeGrid. No React, no DOM: every\n * selection is DERIVED from an anchor and a target cell, never accumulated\n * from the cells a pointer happened to visit (which is how a fast drag used to\n * leave gaps).\n */\n\nexport type IsDisabled = (r: number, c: number) => boolean;\n\n/** Rectangle from two corners, normalised; linear run from two ends, normalised. */\nexport function selectionBetween(\n shape: TimeGridSelectionShape,\n a: TimeGridCoord,\n b: TimeGridCoord,\n nCols: number,\n): TimeGridSelection {\n if (shape === \"linear\") {\n const ia = a.r * nCols + a.c;\n const ib = b.r * nCols + b.c;\n return ia <= ib\n ? { shape: \"linear\", from: { r: a.r, c: a.c }, to: { r: b.r, c: b.c } }\n : { shape: \"linear\", from: { r: b.r, c: b.c }, to: { r: a.r, c: a.c } };\n }\n return {\n shape: \"rectangle\",\n r1: Math.min(a.r, b.r),\n c1: Math.min(a.c, b.c),\n r2: Math.max(a.r, b.r),\n c2: Math.max(a.c, b.c),\n };\n}\n\n/** The columns `[start, end]` of row `r` inside `sel`, or null. */\nexport function rowSegment(\n sel: TimeGridSelection | null | undefined,\n r: number,\n nCols: number,\n): [number, number] | null {\n if (!sel) return null;\n if (sel.shape === \"rectangle\") {\n return r >= sel.r1 && r <= sel.r2 ? [sel.c1, sel.c2] : null;\n }\n const { from, to } = sel;\n if (r < from.r || r > to.r) return null;\n const start = r === from.r ? from.c : 0;\n const end = r === to.r ? to.c : nCols - 1;\n return start <= end ? [start, end] : null;\n}\n\n/** Every coordinate in `sel`, in selection order (row-major). */\nexport function selectionCoords(\n sel: TimeGridSelection | null | undefined,\n nRows: number,\n nCols: number,\n): TimeGridCoord[] {\n const out: TimeGridCoord[] = [];\n if (!sel) return out;\n const rFrom = sel.shape === \"rectangle\" ? sel.r1 : sel.from.r;\n const rTo = sel.shape === \"rectangle\" ? sel.r2 : sel.to.r;\n for (let r = Math.max(0, rFrom); r <= Math.min(nRows - 1, rTo); r++) {\n const seg = rowSegment(sel, r, nCols);\n if (!seg) continue;\n for (let c = Math.max(0, seg[0]); c <= Math.min(nCols - 1, seg[1]); c++) out.push({ r, c });\n }\n return out;\n}\n\nexport function sameSelection(\n a: TimeGridSelection | null | undefined,\n b: TimeGridSelection | null | undefined,\n): boolean {\n if (!a || !b) return !a && !b;\n if (a.shape === \"rectangle\" && b.shape === \"rectangle\") {\n return a.r1 === b.r1 && a.c1 === b.c1 && a.r2 === b.r2 && a.c2 === b.c2;\n }\n if (a.shape === \"linear\" && b.shape === \"linear\") {\n return a.from.r === b.from.r && a.from.c === b.from.c && a.to.r === b.to.r && a.to.c === b.to.c;\n }\n return false;\n}\n\nexport type ResolvedRange =\n /** Apply this selection. `blocked` lists disabled cells it was clipped by. */\n | { kind: \"select\"; selection: TimeGridSelection; blocked: TimeGridCoord[] }\n /** Leave the selection as it was; report `blocked`. */\n | { kind: \"refuse\"; blocked: TimeGridCoord[] };\n\n/**\n * Resolve anchor -> target under the `disabledRange` policy.\n *\n * - `span`: the requested range, disabled cells included. Nothing is reported.\n * - `refuse`: the requested range if it holds no disabled cell, else nothing.\n * - `clamp`: cut on the ANCHOR's side of the nearest block.\n * linear — the run stops before the first disabled cell walking from\n * the anchor toward the target, in time order.\n * rectangle — the time window (columns) ends before the nearest column,\n * from the anchor, that holds a disabled cell in any selected\n * row. If the anchor's own column is blocked, the row span is\n * cut first, before the nearest row blocked in that column.\n *\n * A disabled anchor is refused under `clamp` and `refuse` alike.\n */\nexport function resolveRange(\n shape: TimeGridSelectionShape,\n anchor: TimeGridCoord,\n target: TimeGridCoord,\n nRows: number,\n nCols: number,\n isDisabled: IsDisabled,\n policy: TimeGridDisabledRange,\n): ResolvedRange {\n const requested = selectionBetween(shape, anchor, target, nCols);\n if (policy === \"span\") return { kind: \"select\", selection: requested, blocked: [] };\n\n const blocked = selectionCoords(requested, nRows, nCols).filter(({ r, c }) => isDisabled(r, c));\n if (blocked.length === 0) return { kind: \"select\", selection: requested, blocked };\n if (policy === \"refuse\" || isDisabled(anchor.r, anchor.c)) return { kind: \"refuse\", blocked };\n\n if (shape === \"linear\") {\n const ia = anchor.r * nCols + anchor.c;\n const it = target.r * nCols + target.c;\n const step = it >= ia ? 1 : -1;\n let last = ia;\n for (let i = ia + step; step > 0 ? i <= it : i >= it; i += step) {\n if (isDisabled(Math.floor(i / nCols), i % nCols)) break;\n last = i;\n }\n const end = { r: Math.floor(last / nCols), c: last % nCols };\n return { kind: \"select\", selection: selectionBetween(\"linear\", anchor, end, nCols), blocked };\n }\n\n const rStep = target.r >= anchor.r ? 1 : -1;\n const cStep = target.c >= anchor.c ? 1 : -1;\n const colBlocked = (c: number, rEnd: number) => {\n for (let r = anchor.r; rStep > 0 ? r <= rEnd : r >= rEnd; r += rStep) {\n if (isDisabled(r, c)) return true;\n }\n return false;\n };\n\n let rEnd = target.r;\n if (colBlocked(anchor.c, rEnd)) {\n rEnd = anchor.r;\n for (let r = anchor.r + rStep; rStep > 0 ? r <= target.r : r >= target.r; r += rStep) {\n if (isDisabled(r, anchor.c)) break;\n rEnd = r;\n }\n }\n let cEnd = anchor.c;\n for (let c = anchor.c + cStep; cStep > 0 ? c <= target.c : c >= target.c; c += cStep) {\n if (colBlocked(c, rEnd)) break;\n cEnd = c;\n }\n return {\n kind: \"select\",\n selection: selectionBetween(\"rectangle\", anchor, { r: rEnd, c: cEnd }, nCols),\n blocked,\n };\n}\n","import {\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type RefObject,\n} from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { composeRefs } from \"../../utils/compose-refs\";\nimport {\n resolveRange,\n rowSegment,\n sameSelection,\n selectionBetween,\n selectionCoords,\n} from \"./TimeGrid.selection\";\nimport type {\n TimeGridCell,\n TimeGridCoord,\n TimeGridMarkDef,\n TimeGridProps,\n TimeGridSelection,\n TimeGridStateDef,\n TimeGridTone,\n} from \"./TimeGrid.types\";\n\n/* Literal class strings so Tailwind's scanner finds them in dist. */\nconst TONE_FILL: Record<TimeGridTone, string> = {\n violet: \"bg-violet-500\",\n emerald: \"bg-emerald-500\",\n sky: \"bg-sky-500\",\n rose: \"bg-rose-500\",\n amber: \"bg-amber-500\",\n indigo: \"bg-indigo-500\",\n blue: \"bg-blue-500\",\n zinc: \"bg-zinc-500\",\n};\n\n/** A state with no tone: the neutral well, from the theme tokens. */\nconst NEUTRAL_FILL =\n \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))]\";\n\nconst CELL_BASE = \"relative m-px rounded-sm\";\nconst CELL_ENABLED = \"cursor-pointer hover:brightness-90 dark:hover:brightness-125\";\nconst CELL_DISABLED = \"cursor-not-allowed opacity-40\";\n/** Selected: a translucent focus-colour wash over the state's own tone, so both stay readable. */\nconst CELL_SELECTED =\n \"after:pointer-events-none after:absolute after:inset-0 after:rounded-sm after:bg-[color:var(--fancy-focus,var(--color-blue-500))]/50 dark:after:bg-[color:var(--fancy-focus-dark,var(--color-blue-400))]/50\";\n/** The keyboard-focused cell, while the grid has focus. */\nconst CELL_ACTIVE =\n \"z-10 outline-2 outline-offset-1 outline-[color:var(--fancy-text,var(--color-zinc-900))] dark:outline-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\nconst MARK_DOT =\n \"h-1.5 w-1.5 rounded-full ring-1 ring-[color:var(--fancy-surface,var(--color-white))] dark:ring-[color:var(--fancy-surface-dark,var(--color-zinc-900))]\";\n\nconst HEADER_COL =\n \"overflow-visible whitespace-nowrap text-[10px] leading-4 text-[color:var(--fancy-text-faint,var(--color-zinc-400))] dark:text-[color:var(--fancy-text-faint-dark,var(--color-zinc-500))]\";\nconst HEADER_ROW =\n \"whitespace-nowrap pr-1 text-right text-[10px] font-medium text-[color:var(--fancy-text-muted,var(--color-zinc-500))] dark:text-[color:var(--fancy-text-muted-dark,var(--color-zinc-400))]\";\nconst HEADER_HOVER =\n \"cursor-pointer hover:text-[color:var(--fancy-text,var(--color-zinc-900))] dark:hover:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\nconst TOOLTIP =\n \"pointer-events-none absolute z-20 max-w-xs rounded-md px-2 py-1 text-xs shadow-lg bg-[color:var(--fancy-text,var(--color-zinc-900))] text-[color:var(--fancy-surface,var(--color-white))] dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:text-[color:var(--fancy-text-dark,var(--color-zinc-100))]\";\n\n// Bundlers replace `process.env.NODE_ENV` textually; without one, the\n// reference throws and we read that as production.\ndeclare const process: { env: Record<string, string | undefined> };\n\nfunction isDev(): boolean {\n try {\n return process.env.NODE_ENV !== \"production\";\n } catch {\n return false;\n }\n}\n\nconst EMPTY = {} as Record<string, never>;\nconst warnedStates = new Set<string>();\nlet warnedNoStates = false;\n\ntype Ctx = {\n baseId: string;\n rows: string[];\n cols: string[];\n states: Record<string, TimeGridStateDef>;\n marks: Record<string, TimeGridMarkDef>;\n stateClass: (state: string) => string;\n cellWidth: number;\n cellHeight: number;\n fns: RefObject<{\n cellId?: (r: number, c: number) => string;\n ariaCell?: (r: number, c: number, on: boolean) => string;\n }>;\n};\n\nconst cellDomId = (baseId: string, r: number, c: number) => `${baseId}-${r}-${c}`;\n\nfunction parseCoord(el: Element | null, baseId: string): TimeGridCoord | null {\n const id = el?.id;\n if (!id || !id.startsWith(baseId + \"-\")) return null;\n const m = /-(\\d+)-(\\d+)$/.exec(id);\n return m ? { r: Number(m[1]), c: Number(m[2]) } : null;\n}\n\ntype RowProps = {\n ctx: Ctx;\n r: number;\n rowCells: TimeGridCell[];\n selStart: number;\n selEnd: number;\n /** Column of the keyboard-focused cell when it is in this row AND the grid has focus, else -1. */\n activeCol: number;\n onRowHeader?: (r: number) => void;\n};\n\nconst TypedRow = memo(function TypedRow({\n ctx,\n r,\n rowCells,\n selStart,\n selEnd,\n activeCol,\n onRowHeader,\n}: RowProps) {\n const { baseId, rows, cols, states, marks, stateClass, cellWidth, cellHeight } = ctx;\n const { cellId, ariaCell } = ctx.fns.current;\n const out = new Array(cols.length + 1);\n out[0] = (\n <div\n key=\"h\"\n role=\"rowheader\"\n data-react-fancy-timegrid-row={r}\n onClick={onRowHeader ? () => onRowHeader(r) : undefined}\n className={onRowHeader ? `${HEADER_ROW} ${HEADER_HOVER}` : HEADER_ROW}\n >\n {rows[r]}\n </div>\n );\n for (let c = 0; c < cols.length; c++) {\n const cell = rowCells?.[c];\n const state = cell?.state ?? \"\";\n const selected = c >= selStart && c <= selEnd;\n const reasons = cell?.reasons?.length ? cell.reasons.join(\". \") : undefined;\n const markIds = cell?.marks;\n let label: string;\n if (ariaCell) {\n label = ariaCell(r, c, selected);\n } else {\n label = `${rows[r]} ${cols[c]} ${states[state]?.label ?? state}`;\n if (markIds?.length) label += \", \" + markIds.map((m) => marks[m]?.label ?? m).join(\", \");\n }\n let cls = stateClass(state) + \" \" + (cell?.disabled ? CELL_DISABLED : CELL_ENABLED);\n if (selected) cls += \" \" + CELL_SELECTED;\n if (c === activeCol) cls += \" \" + CELL_ACTIVE;\n out[c + 1] = (\n <div\n key={c}\n id={cellDomId(baseId, r, c)}\n role=\"gridcell\"\n data-react-fancy-timegrid-cell={cellId ? cellId(r, c) : `${r}:${c}`}\n data-state={state}\n data-marks={markIds?.length ? markIds.join(\" \") : undefined}\n aria-selected={selected}\n aria-disabled={cell?.disabled ? true : undefined}\n aria-label={label}\n aria-description={reasons}\n title={reasons}\n className={cls}\n style={{ width: cellWidth, height: cellHeight }}\n >\n {markIds?.length ? (\n <span aria-hidden className=\"pointer-events-none absolute right-0 top-0 flex gap-px\">\n {markIds.map((m) => {\n const def = marks[m];\n return def?.icon ? (\n <span key={m} data-react-fancy-timegrid-mark={m} className=\"flex h-2.5 w-2.5 items-center justify-center [&>svg]:h-full [&>svg]:w-full\">\n {def.icon}\n </span>\n ) : (\n <span\n key={m}\n data-react-fancy-timegrid-mark={m}\n className={`${MARK_DOT} ${def?.tone ? TONE_FILL[def.tone] : NEUTRAL_FILL}`}\n />\n );\n })}\n </span>\n ) : null}\n </div>\n );\n }\n return (\n <div role=\"row\" className=\"contents\">\n {out}\n </div>\n );\n});\n\ntype Gesture = {\n anchor: TimeGridCoord;\n last: TimeGridCoord;\n selection: TimeGridSelection | null;\n blockedKey: string;\n};\n\nexport const TypedTimeGrid = forwardRef<HTMLDivElement, TimeGridProps>(function TypedTimeGrid(\n {\n rows,\n cols,\n cells: cellsProp,\n states: statesProp,\n marks: marksProp,\n cellWidth = 20,\n cellHeight = 16,\n sparseColLabels = true,\n toggleStripsOnHeaderClick = true,\n ariaCell,\n cellId,\n className,\n selectionShape = \"rectangle\",\n selection: selectionProp,\n onSelectionChange,\n onSelectionCommit,\n disabledRange = \"clamp\",\n onBlockedSelect,\n onCellHover,\n \"aria-label\": ariaLabel,\n },\n ref,\n) {\n if (!statesProp) {\n const msg =\n \"TimeGrid: `cells` was given without `states`. Every cell names a state id, and with no \" +\n \"vocabulary there is no tone to draw it in. Pass `states={{ open: { tone: \\\"emerald\\\", label: \\\"Open\\\" }, … }}`.\";\n if (isDev()) throw new Error(msg);\n if (!warnedNoStates) {\n warnedNoStates = true;\n console.error(msg);\n }\n }\n const states = statesProp ?? EMPTY;\n const marks = marksProp ?? EMPTY;\n const cells = cellsProp!;\n const nRows = rows.length;\n const nCols = cols.length;\n\n const baseId = useId();\n const outerRef = useRef<HTMLDivElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n const setOuterRef = useMemo(() => composeRefs(ref, outerRef), [ref]);\n\n const controlled = selectionProp !== undefined;\n const [inner, setInner] = useState<TimeGridSelection | null>(null);\n const selection = controlled ? selectionProp : inner;\n\n const [active, setActive] = useState<TimeGridCoord>({ r: 0, c: 0 });\n const [focused, setFocused] = useState(false);\n const anchorRef = useRef<TimeGridCoord | null>(null);\n const gestureRef = useRef<Gesture | null>(null);\n const hoverRef = useRef<string>(\"\");\n\n // Latest values for handlers, so they stay stable across renders.\n const live = useRef({ cells, selection, selectionShape, disabledRange, onSelectionChange, onSelectionCommit, onBlockedSelect, onCellHover });\n live.current = { cells, selection, selectionShape, disabledRange, onSelectionChange, onSelectionCommit, onBlockedSelect, onCellHover };\n\n const fns = useRef<Ctx[\"fns\"][\"current\"]>({});\n fns.current = { cellId, ariaCell };\n\n const stateClass = useMemo(() => {\n const cache = new Map<string, string>();\n return (state: string) => {\n let cls = cache.get(state);\n if (cls !== undefined) return cls;\n const def = states[state];\n if (!def && statesProp && !warnedStates.has(state)) {\n warnedStates.add(state);\n console.warn(`TimeGrid: unknown state id \"${state}\" — not a key of \\`states\\`. Rendering it neutral.`);\n }\n cls = `${CELL_BASE} ${def?.tone ? TONE_FILL[def.tone] : NEUTRAL_FILL}${def?.className ? \" \" + def.className : \"\"}`;\n cache.set(state, cls);\n return cls;\n };\n }, [states, statesProp]);\n\n const ctx = useMemo<Ctx>(\n () => ({ baseId, rows, cols, states, marks, stateClass, cellWidth, cellHeight, fns }),\n [baseId, rows, cols, states, marks, stateClass, cellWidth, cellHeight],\n );\n\n /* ── selection plumbing ─────────────────────────────────────────────── */\n\n const isDisabled = useCallback(\n (r: number, c: number) => !!live.current.cells[r]?.[c]?.disabled,\n [],\n );\n\n const cellsOf = useCallback(\n (sel: TimeGridSelection | null) =>\n selectionCoords(sel, nRows, nCols).map(({ r, c }) => live.current.cells[r]?.[c]),\n [nRows, nCols],\n );\n\n const emit = useCallback(\n (next: TimeGridSelection | null) => {\n if (!controlled) setInner(next);\n live.current.onSelectionChange?.(next, cellsOf(next));\n },\n [controlled, cellsOf],\n );\n\n const reportBlocked = useCallback((blocked: TimeGridCoord[], g: Gesture | null) => {\n if (!blocked.length) return;\n const key = blocked.map((b) => `${b.r}:${b.c}`).join(\",\");\n if (g) {\n if (g.blockedKey === key) return;\n g.blockedKey = key;\n }\n live.current.onBlockedSelect?.(\n blocked.map(({ r, c }) => {\n const reasons = live.current.cells[r]?.[c]?.reasons;\n return reasons ? { r, c, reasons } : { r, c };\n }),\n );\n }, []);\n\n /** Apply anchor -> target under the policy. Returns the selection now in force for this gesture. */\n const extend = useCallback(\n (\n anchor: TimeGridCoord,\n target: TimeGridCoord,\n g: Gesture | null,\n shape = live.current.selectionShape,\n ): TimeGridSelection | null | undefined => {\n const res = resolveRange(shape, anchor, target, nRows, nCols, isDisabled, live.current.disabledRange);\n reportBlocked(res.blocked, g);\n if (res.kind === \"refuse\") return undefined;\n const current = g ? g.selection : live.current.selection;\n if (!sameSelection(current, res.selection) || (g && g.selection === null)) emit(res.selection);\n return res.selection;\n },\n [nRows, nCols, isDisabled, reportBlocked, emit],\n );\n\n const commit = useCallback(\n (sel: TimeGridSelection | null) => {\n if (sel) live.current.onSelectionCommit?.(sel, cellsOf(sel));\n },\n [cellsOf],\n );\n\n /* ── pointer ────────────────────────────────────────────────────────── */\n\n const coordFromEvent = useCallback(\n (e: ReactPointerEvent): TimeGridCoord | null => {\n const t = e.target as Element;\n let hit = parseCoord(t?.closest?.('[role=\"gridcell\"]') ?? null, baseId);\n if (!hit && typeof document.elementFromPoint === \"function\") {\n const under = document.elementFromPoint(e.clientX, e.clientY);\n hit = parseCoord(under?.closest?.('[role=\"gridcell\"]') ?? null, baseId);\n }\n if (!hit) hit = clampToGrid(e.clientX, e.clientY);\n return hit;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [baseId, nRows, nCols],\n );\n\n /**\n * Outside every cell (a captured drag past the grid's edge): the nearest cell\n * by geometry, measured from the first and last cell's boxes.\n */\n function clampToGrid(x: number, y: number): TimeGridCoord | null {\n const first = document.getElementById(cellDomId(baseId, 0, 0));\n const last = document.getElementById(cellDomId(baseId, nRows - 1, nCols - 1));\n if (!first || !last) return null;\n const a = first.getBoundingClientRect();\n const b = last.getBoundingClientRect();\n const w = (b.right - a.left) / nCols;\n const h = (b.bottom - a.top) / nRows;\n if (!(w > 0) || !(h > 0)) return null;\n return {\n r: Math.min(nRows - 1, Math.max(0, Math.floor((y - a.top) / h))),\n c: Math.min(nCols - 1, Math.max(0, Math.floor((x - a.left) / w))),\n };\n }\n\n const onPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (e.button !== 0) return;\n const at = coordFromEvent(e);\n if (!at) return;\n e.preventDefault();\n gridRef.current?.focus({ preventScroll: true });\n try {\n e.currentTarget.setPointerCapture?.(e.pointerId);\n } catch {\n /* jsdom / synthetic pointers */\n }\n setActive(at);\n const g: Gesture = { anchor: at, last: at, selection: null, blockedKey: \"\" };\n const sel = extend(at, at, g);\n if (sel === undefined) {\n gestureRef.current = null;\n return;\n }\n g.selection = sel;\n anchorRef.current = at;\n gestureRef.current = g;\n };\n\n const onPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n const g = gestureRef.current;\n if (!g) return;\n const at = coordFromEvent(e);\n if (!at || (at.r === g.last.r && at.c === g.last.c)) return;\n g.last = at;\n setActive(at);\n const sel = extend(g.anchor, at, g);\n if (sel !== undefined) g.selection = sel;\n };\n\n const endGesture = () => {\n const g = gestureRef.current;\n gestureRef.current = null;\n if (g) commit(g.selection);\n };\n\n const onPointerOver = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!live.current.onCellHover) return;\n const at = parseCoord((e.target as Element)?.closest?.('[role=\"gridcell\"]') ?? null, baseId);\n if (!at) return;\n const key = `${at.r}:${at.c}`;\n if (hoverRef.current === key) return;\n hoverRef.current = key;\n live.current.onCellHover(live.current.cells[at.r]?.[at.c] ?? null, at);\n };\n\n const onPointerLeave = () => {\n if (!hoverRef.current) return;\n hoverRef.current = \"\";\n live.current.onCellHover?.(null, null);\n };\n\n /* ── keyboard: the grid holds focus; aria-activedescendant names the cell ── */\n\n const onKeyDown = (e: ReactKeyboardEvent<HTMLDivElement>) => {\n const move: Record<string, [number, number]> = {\n ArrowUp: [-1, 0],\n ArrowDown: [1, 0],\n ArrowLeft: [0, -1],\n ArrowRight: [0, 1],\n };\n const d = move[e.key];\n if (d) {\n e.preventDefault();\n const next = {\n r: Math.min(nRows - 1, Math.max(0, active.r + d[0])),\n c: Math.min(nCols - 1, Math.max(0, active.c + d[1])),\n };\n setActive(next);\n if (e.shiftKey) {\n const anchor = anchorRef.current ?? active;\n anchorRef.current = anchor;\n extend(anchor, next, null);\n }\n return;\n }\n if (e.key === \" \" || e.key === \"Spacebar\") {\n e.preventDefault();\n const sel = live.current.selection;\n const single = selectionBetween(live.current.selectionShape, active, active, nCols);\n if (sel && sameSelection(sel, single)) {\n anchorRef.current = null;\n emit(null);\n } else {\n const res = extend(active, active, null);\n if (res !== undefined) anchorRef.current = active;\n }\n return;\n }\n if (e.key === \"Enter\") {\n e.preventDefault();\n let sel = live.current.selection ?? null;\n if (!sel) {\n const res = extend(active, active, null);\n if (res === undefined) return;\n anchorRef.current = active;\n sel = res;\n }\n commit(sel);\n return;\n }\n if (e.key === \"Escape\") {\n if (live.current.selection) {\n e.preventDefault();\n anchorRef.current = null;\n emit(null);\n }\n }\n };\n\n /* ── header strips: select a whole row / column ─────────────────────── */\n\n const pickStrip = useCallback(\n (a: TimeGridCoord, b: TimeGridCoord) => {\n anchorRef.current = a;\n setActive(a);\n const sel = extend(a, b, null, \"rectangle\");\n if (sel) commit(sel);\n },\n [extend, commit],\n );\n const onRowHeader = useMemo(\n () => (toggleStripsOnHeaderClick ? (r: number) => pickStrip({ r, c: 0 }, { r, c: nCols - 1 }) : undefined),\n [toggleStripsOnHeaderClick, pickStrip, nCols],\n );\n\n /* ── focus tooltip for reasons ──────────────────────────────────────── */\n\n const activeCell = cells[active.r]?.[active.c];\n const activeReasons = focused && activeCell?.reasons?.length ? activeCell.reasons.join(\". \") : null;\n const [tipPos, setTipPos] = useState<{ left: number; top: number } | null>(null);\n useLayoutEffect(() => {\n if (!activeReasons) return;\n const outer = outerRef.current;\n const el = document.getElementById(cellDomId(baseId, active.r, active.c));\n if (!outer || !el) return;\n const o = outer.getBoundingClientRect();\n const b = el.getBoundingClientRect();\n setTipPos({ left: b.left - o.left + outer.scrollLeft, top: b.bottom - o.top + outer.scrollTop + 4 });\n }, [activeReasons, active.r, active.c, baseId]);\n\n // Keep the active cell in view when the keyboard moves it.\n useEffect(() => {\n if (!focused) return;\n const el = document.getElementById(cellDomId(baseId, active.r, active.c));\n el?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n }, [focused, active.r, active.c, baseId]);\n\n const colStep = Math.max(1, Math.floor(nCols / 6));\n const pitchX = cellWidth + 2;\n const tipId = `${baseId}-tip`;\n\n const bodyRows = new Array(nRows);\n for (let r = 0; r < nRows; r++) {\n const seg = rowSegment(selection, r, nCols);\n bodyRows[r] = (\n <TypedRow\n key={r}\n ctx={ctx}\n r={r}\n rowCells={cells[r]}\n selStart={seg ? seg[0] : -1}\n selEnd={seg ? seg[1] : -2}\n activeCol={focused && active.r === r ? active.c : -1}\n onRowHeader={onRowHeader}\n />\n );\n }\n\n return (\n <div\n ref={setOuterRef}\n data-react-fancy-timegrid=\"\"\n data-typed=\"\"\n className={cn(\"relative select-none overflow-x-auto\", className)}\n >\n <div\n ref={gridRef}\n role=\"grid\"\n tabIndex={0}\n aria-label={ariaLabel}\n aria-multiselectable=\"true\"\n aria-rowcount={nRows + 1}\n aria-colcount={nCols + 1}\n aria-activedescendant={cellDomId(baseId, active.r, active.c)}\n aria-describedby={activeReasons ? tipId : undefined}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={endGesture}\n onPointerCancel={endGesture}\n onPointerOver={onPointerOver}\n onPointerLeave={onPointerLeave}\n onKeyDown={onKeyDown}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n className=\"inline-grid touch-none items-center outline-none focus-visible:ring-2 focus-visible:ring-[color:var(--fancy-focus,var(--color-blue-500))]/40 dark:focus-visible:ring-[color:var(--fancy-focus-dark,var(--color-blue-400))]/20\"\n style={{ gridTemplateColumns: `max-content repeat(${nCols}, ${pitchX}px)` }}\n >\n <div role=\"row\" className=\"contents\">\n <div role=\"columnheader\" />\n {cols.map((label, c) => (\n <div\n key={c}\n role=\"columnheader\"\n data-react-fancy-timegrid-col={c}\n onClick={toggleStripsOnHeaderClick ? () => pickStrip({ r: 0, c }, { r: nRows - 1, c }) : undefined}\n className={toggleStripsOnHeaderClick ? `${HEADER_COL} ${HEADER_HOVER}` : HEADER_COL}\n >\n {sparseColLabels ? (c % colStep === 0 ? label : \"\") : label}\n </div>\n ))}\n </div>\n {bodyRows}\n </div>\n {activeReasons ? (\n <div\n id={tipId}\n role=\"tooltip\"\n data-react-fancy-timegrid-tooltip=\"\"\n className={TOOLTIP}\n style={tipPos ? { left: tipPos.left, top: tipPos.top } : undefined}\n >\n {activeReasons}\n </div>\n ) : null}\n </div>\n );\n});\n","import { forwardRef, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport type { TimeGridProps, TimeGridTone } from \"./TimeGrid.types\";\nimport { TypedTimeGrid } from \"./TypedTimeGrid\";\n\nconst TONE_CLASSES: Record<TimeGridTone, string> = {\n violet: \"bg-violet-500 hover:bg-violet-600\",\n emerald: \"bg-emerald-500 hover:bg-emerald-600\",\n sky: \"bg-sky-500 hover:bg-sky-600\",\n rose: \"bg-rose-500 hover:bg-rose-600\",\n amber: \"bg-amber-500 hover:bg-amber-600\",\n indigo: \"bg-indigo-500 hover:bg-indigo-600\",\n blue: \"bg-blue-500 hover:bg-blue-600\",\n zinc: \"bg-zinc-500 hover:bg-zinc-600\",\n};\n\nconst OFF_CLASSES =\n \"bg-[color:var(--fancy-surface-muted,var(--color-zinc-100))] hover:bg-zinc-200 dark:bg-[color:var(--fancy-surface-muted-dark,var(--color-zinc-800))] dark:hover:bg-zinc-700\";\n\nconst NO_VALUE: boolean[][] = [];\nconst noop = () => {};\n\n/**\n * Two grids behind one name. `cells` (5.55.0) selects the typed grid: the\n * host's state vocabulary, range selection, keyboard. Without it this is the\n * boolean grid, unchanged since before 5.55.0.\n */\nexport const TimeGrid = forwardRef<HTMLDivElement, TimeGridProps>((props, ref) =>\n props.cells ? <TypedTimeGrid ref={ref} {...props} /> : <BooleanTimeGrid ref={ref} {...props} />,\n);\n\nconst BooleanTimeGrid = forwardRef<HTMLDivElement, TimeGridProps>(\n (\n {\n rows,\n cols,\n value = NO_VALUE,\n onChange = noop,\n toneOn = \"violet\",\n cellWidth = 20,\n cellHeight = 16,\n sparseColLabels = true,\n toggleStripsOnHeaderClick = true,\n ariaCell,\n cellId,\n className,\n },\n ref,\n ) => {\n const [drag, setDrag] = useState<boolean | null>(null);\n\n const setCell = (r: number, c: number, v: boolean) => {\n if (value[r]?.[c] === v) return;\n const next = value.map((row) => row.slice());\n next[r][c] = v;\n onChange(next);\n };\n\n const toggleRow = (r: number) => {\n if (!toggleStripsOnHeaderClick) return;\n const all = value[r].every(Boolean);\n const next = value.map((row) => row.slice());\n for (let c = 0; c < cols.length; c++) next[r][c] = !all;\n onChange(next);\n };\n\n const toggleCol = (c: number) => {\n if (!toggleStripsOnHeaderClick) return;\n const all = value.every((row) => row[c]);\n const next = value.map((row) => row.slice());\n for (let r = 0; r < rows.length; r++) next[r][c] = !all;\n onChange(next);\n };\n\n const colStep = Math.max(1, Math.floor(cols.length / 6));\n const onTone = TONE_CLASSES[toneOn];\n\n return (\n <div\n ref={ref}\n data-react-fancy-timegrid=\"\"\n className={cn(\n \"select-none overflow-x-auto\",\n className,\n )}\n onMouseLeave={() => setDrag(null)}\n onMouseUp={() => setDrag(null)}\n >\n <table className=\"text-[10px]\">\n <thead>\n <tr>\n <th />\n {cols.map((label, c) => (\n <th\n key={c}\n onClick={() => toggleCol(c)}\n style={{ width: cellWidth }}\n data-react-fancy-timegrid-col={c}\n className={cn(\n \"text-zinc-400\",\n toggleStripsOnHeaderClick &&\n \"cursor-pointer hover:text-zinc-700 dark:hover:text-zinc-200\",\n )}\n >\n {sparseColLabels ? (c % colStep === 0 ? label : \"\") : label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((label, r) => (\n <tr key={r}>\n <th\n onClick={() => toggleRow(r)}\n data-react-fancy-timegrid-row={r}\n className={cn(\n \"pr-1 text-right font-medium text-zinc-500\",\n toggleStripsOnHeaderClick &&\n \"cursor-pointer hover:text-zinc-800 dark:hover:text-zinc-200\",\n )}\n >\n {label}\n </th>\n {cols.map((_, c) => {\n const on = value[r]?.[c] ?? false;\n return (\n <td key={c} className=\"p-px\">\n <button\n type=\"button\"\n onMouseDown={() => {\n const v = !on;\n setDrag(v);\n setCell(r, c, v);\n }}\n onMouseEnter={() => drag !== null && setCell(r, c, drag)}\n style={{ width: cellWidth, height: cellHeight }}\n data-react-fancy-timegrid-cell={\n cellId ? cellId(r, c) : `${r}:${c}`\n }\n aria-pressed={on}\n aria-label={\n ariaCell\n ? ariaCell(r, c, on)\n : `${rows[r]} ${cols[c]} ${on ? \"on\" : \"off\"}`\n }\n className={cn(\n \"block rounded-sm transition\",\n on ? onTone : OFF_CLASSES,\n )}\n />\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n },\n);\n\nTimeGrid.displayName = \"TimeGrid\";\nBooleanTimeGrid.displayName = \"BooleanTimeGrid\";\n"]}
|