@setsquare/ui 0.9.1 → 0.11.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 +107 -0
- package/README.md +5 -2
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/cn.d.ts.map +1 -1
- package/dist/lib/cn.js +1 -0
- package/dist/lib/cn.js.map +1 -1
- package/dist/lib/english.d.ts.map +1 -1
- package/dist/lib/english.js +2 -0
- package/dist/lib/english.js.map +1 -1
- package/dist/lib/locale.d.ts +3 -0
- package/dist/lib/locale.d.ts.map +1 -1
- package/dist/lib/locale.js.map +1 -1
- package/dist/lib/timeline-scale.d.ts +106 -0
- package/dist/lib/timeline-scale.d.ts.map +1 -0
- package/dist/lib/timeline-scale.js +221 -0
- package/dist/lib/timeline-scale.js.map +1 -0
- package/dist/lib/use-scroll-tab-stop.d.ts +9 -0
- package/dist/lib/use-scroll-tab-stop.d.ts.map +1 -0
- package/dist/lib/use-scroll-tab-stop.js +46 -0
- package/dist/lib/use-scroll-tab-stop.js.map +1 -0
- package/dist/shell/dashboard-shell.d.ts +1 -0
- package/dist/shell/dashboard-shell.d.ts.map +1 -1
- package/dist/shell/dashboard-shell.js +2 -34
- package/dist/shell/dashboard-shell.js.map +1 -1
- package/dist/shell/page-header.d.ts +7 -1
- package/dist/shell/page-header.d.ts.map +1 -1
- package/dist/shell/page-header.js +3 -2
- package/dist/shell/page-header.js.map +1 -1
- package/dist/shell/right-panel.d.ts +29 -1
- package/dist/shell/right-panel.d.ts.map +1 -1
- package/dist/shell/right-panel.js +14 -5
- package/dist/shell/right-panel.js.map +1 -1
- package/dist/styles/theme.css +16 -0
- package/dist/styles/tokens.css +23 -0
- package/dist/tokens.json +95 -0
- package/dist/ui/button.d.ts +2 -1
- package/dist/ui/button.d.ts.map +1 -1
- package/dist/ui/button.js +9 -3
- package/dist/ui/button.js.map +1 -1
- package/dist/ui/dialog.d.ts +14 -2
- package/dist/ui/dialog.d.ts.map +1 -1
- package/dist/ui/dialog.js +19 -4
- package/dist/ui/dialog.js.map +1 -1
- package/dist/ui/disabled-reason.d.ts +36 -0
- package/dist/ui/disabled-reason.d.ts.map +1 -0
- package/dist/ui/disabled-reason.js +27 -0
- package/dist/ui/disabled-reason.js.map +1 -0
- package/dist/ui/icon-button.d.ts.map +1 -1
- package/dist/ui/icon-button.js +10 -6
- package/dist/ui/icon-button.js.map +1 -1
- package/dist/ui/menu.d.ts +9 -3
- package/dist/ui/menu.d.ts.map +1 -1
- package/dist/ui/menu.js +22 -4
- package/dist/ui/menu.js.map +1 -1
- package/dist/ui/timeline.d.ts +231 -0
- package/dist/ui/timeline.d.ts.map +1 -0
- package/dist/ui/timeline.js +539 -0
- package/dist/ui/timeline.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Children, createContext, isValidElement, useCallback, useContext, useEffect, useId, useMemo, useRef, useState, } from 'react';
|
|
4
|
+
import { ChevronRight } from 'lucide-react';
|
|
5
|
+
import { Button as RACButton, Focusable, ToggleButton, Tree as RACTree, TreeItem as RACTreeItem, TreeItemContent, TooltipTrigger, useLocale, } from 'react-aria-components';
|
|
6
|
+
import { cn } from '../lib/cn.js';
|
|
7
|
+
import { useLabels } from '../lib/locale.js';
|
|
8
|
+
import { clampTime, formatTime, nudge, place, speakTime, stackTiers, tickSteps, ticks, } from '../lib/timeline-scale.js';
|
|
9
|
+
import { Tooltip } from './tooltip.js';
|
|
10
|
+
export const timelineLabels = {
|
|
11
|
+
playhead: 'Playhead',
|
|
12
|
+
frames: '{count, plural, one {# frame} other {# frames}}',
|
|
13
|
+
frame: 'Frame {frame}',
|
|
14
|
+
span: '{start} to {end}',
|
|
15
|
+
item: '{label}, {time}',
|
|
16
|
+
snapped: 'Snapped to {point}',
|
|
17
|
+
picked: '{label} picked up. Click the ruler or its lane where it should go, or press Escape.',
|
|
18
|
+
placed: '{label} moved to {time}',
|
|
19
|
+
cancelled: '{label} left at {time}',
|
|
20
|
+
markerHint: 'Drag it, or use the arrow keys. Or click it, then click where it should go. Hold Alt or Option to move it freely.',
|
|
21
|
+
};
|
|
22
|
+
const TimelineContext = createContext(null);
|
|
23
|
+
function useTimeline(part) {
|
|
24
|
+
const value = useContext(TimelineContext);
|
|
25
|
+
if (!value)
|
|
26
|
+
throw new Error(`${part} goes inside a Timeline.`);
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
function useControlled(value, initial, onChange) {
|
|
30
|
+
const [own, setOwn] = useState(initial);
|
|
31
|
+
const controlled = value !== undefined;
|
|
32
|
+
return [
|
|
33
|
+
controlled ? value : own,
|
|
34
|
+
(next) => {
|
|
35
|
+
if (!controlled)
|
|
36
|
+
setOwn(next);
|
|
37
|
+
onChange?.(next);
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
const defaultStep = (format, fps) => format === 'frames' || format === 'timecode' ? 1 / fps : format === 'date' ? 900 : 0.1;
|
|
42
|
+
/** AAA as products mark it and as the design-system artifact does. */
|
|
43
|
+
const AAA = '[data-conformance="aaa"], [data-theme$="-aaa"]';
|
|
44
|
+
/**
|
|
45
|
+
* Things over time, and the work on them: a ruler whose ticks and labels adapt to the zoom, a playhead to scrub,
|
|
46
|
+
* lanes of spans and points, markers people move, and slots for a product's own drawing (a waveform, thumbnails).
|
|
47
|
+
* One scroll container: the ruler stays at the top and the label column at the start while the rest scrolls both
|
|
48
|
+
* ways, and focus scrolls clear of both. Put `TimeRuler`, `TimelineSlot`, `TimelineMarkers` and `TimelineLanes`
|
|
49
|
+
* inside, in the order they stack.
|
|
50
|
+
*
|
|
51
|
+
* The playhead's line crosses every row. Times are seconds throughout; for `date`, seconds since the epoch. The
|
|
52
|
+
* axis runs left to right; right-to-left layouts aren't supported yet. Under it, a line says what moving a marker
|
|
53
|
+
* did (snapped, picked up, put down), and is read out as it changes.
|
|
54
|
+
*/
|
|
55
|
+
export function Timeline({ duration, start = 0, format = 'seconds', fps = 25, timeZone, pxPerSecond: pps = 100, step: givenStep, time: givenTime, defaultTime, onTimeChange, snapPoints = [], selectedItem: givenItem, defaultSelectedItem = null, onSelectedItemChange, labelWidth = 160, maxHeight, followPlayhead = true, labels, className, children, ...name }) {
|
|
56
|
+
const t = useLabels('timeline', timelineLabels, labels);
|
|
57
|
+
const { locale } = useLocale();
|
|
58
|
+
const end = start + duration;
|
|
59
|
+
const step = givenStep ?? defaultStep(format, fps);
|
|
60
|
+
const trackWidth = Math.ceil(duration * pps);
|
|
61
|
+
const scale = useMemo(() => ({ format, fps, locale, timeZone }), [format, fps, locale, timeZone]);
|
|
62
|
+
const hasPlayhead = givenTime !== undefined || defaultTime !== undefined;
|
|
63
|
+
const [time, setTime] = useControlled(givenTime, defaultTime ?? start, onTimeChange);
|
|
64
|
+
const [selectedItem, selectItem] = useControlled(givenItem, defaultSelectedItem, onSelectedItemChange);
|
|
65
|
+
const [status, setStatus] = useState('');
|
|
66
|
+
const [picked, pick] = useState(null);
|
|
67
|
+
// Before the scroller is measured (and on the server), assume a wide screen's worth is in view.
|
|
68
|
+
const [scroll, setScroll] = useState({ left: 0, width: 1600 });
|
|
69
|
+
const scroller = useRef(null);
|
|
70
|
+
const toX = (s) => (s - start) * pps;
|
|
71
|
+
const value = {
|
|
72
|
+
start,
|
|
73
|
+
end,
|
|
74
|
+
pps,
|
|
75
|
+
step,
|
|
76
|
+
trackWidth,
|
|
77
|
+
scale,
|
|
78
|
+
toX,
|
|
79
|
+
timeAt: (clientX, track) => clampTime(start + (clientX - track.getBoundingClientRect().left) / pps, start, end),
|
|
80
|
+
show: (s, shownStep = step) => formatTime(s, scale, shownStep),
|
|
81
|
+
speak: (s) => speakTime(s, scale, {
|
|
82
|
+
frames: (count) => t('frames', { count }),
|
|
83
|
+
frame: (frame) => t('frame', { frame }),
|
|
84
|
+
}),
|
|
85
|
+
t,
|
|
86
|
+
time: hasPlayhead ? time : undefined,
|
|
87
|
+
seek: (s) => setTime(clampTime(s, start, end)),
|
|
88
|
+
snapPoints,
|
|
89
|
+
selectedItem,
|
|
90
|
+
selectItem,
|
|
91
|
+
announce: setStatus,
|
|
92
|
+
picked,
|
|
93
|
+
pick,
|
|
94
|
+
view: {
|
|
95
|
+
start: clampTime(start + scroll.left / pps, start, end),
|
|
96
|
+
end: clampTime(start + (scroll.left + scroll.width) / pps, start, end),
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
// Track what's in view, for the ruler's ticks and the slots: on scroll, and as the scroller resizes.
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
const el = scroller.current;
|
|
102
|
+
if (!el)
|
|
103
|
+
return;
|
|
104
|
+
let frame = 0;
|
|
105
|
+
const read = () => {
|
|
106
|
+
cancelAnimationFrame(frame);
|
|
107
|
+
frame = requestAnimationFrame(() => setScroll({ left: el.scrollLeft, width: Math.max(0, el.clientWidth - labelWidth) }));
|
|
108
|
+
};
|
|
109
|
+
read();
|
|
110
|
+
el.addEventListener('scroll', read, { passive: true });
|
|
111
|
+
const observer = new ResizeObserver(read);
|
|
112
|
+
observer.observe(el);
|
|
113
|
+
return () => {
|
|
114
|
+
cancelAnimationFrame(frame);
|
|
115
|
+
el.removeEventListener('scroll', read);
|
|
116
|
+
observer.disconnect();
|
|
117
|
+
};
|
|
118
|
+
}, [labelWidth]);
|
|
119
|
+
// Keep the playhead in view as its time changes: playback, a key, a seek.
|
|
120
|
+
const playheadX = hasPlayhead ? (time - start) * pps : null;
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
const el = scroller.current;
|
|
123
|
+
if (!followPlayhead || playheadX === null || !el)
|
|
124
|
+
return;
|
|
125
|
+
const width = el.clientWidth - labelWidth;
|
|
126
|
+
const margin = 32;
|
|
127
|
+
if (playheadX >= el.scrollLeft + margin && playheadX <= el.scrollLeft + width - margin)
|
|
128
|
+
return;
|
|
129
|
+
const still = matchMedia('(prefers-reduced-motion: reduce)').matches || !!el.closest(AAA);
|
|
130
|
+
el.scrollTo({
|
|
131
|
+
left: Math.max(0, playheadX - width / 3),
|
|
132
|
+
behavior: still ? 'instant' : 'smooth',
|
|
133
|
+
});
|
|
134
|
+
}, [playheadX, followPlayhead, labelWidth]);
|
|
135
|
+
const onKeyDownCapture = (e) => {
|
|
136
|
+
if (e.key === 'Escape' && picked) {
|
|
137
|
+
e.stopPropagation();
|
|
138
|
+
picked.cancel();
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
return (_jsx(TimelineContext.Provider, { value: value, children: _jsxs("div", { role: "group", ...name, onKeyDownCapture: onKeyDownCapture, style: {
|
|
142
|
+
'--timeline-label-width': `${labelWidth}px`,
|
|
143
|
+
}, className: cn('relative flex flex-col overflow-hidden rounded-lg border border-border bg-background text-sm', className), children: [_jsx("div", { ref: scroller, "data-timeline-scroller": "", style: { maxHeight }, className: "relative overflow-auto overscroll-contain [scroll-padding-block-start:var(--lane-height)] [scroll-padding-inline-start:var(--timeline-label-width)]", children: _jsxs("div", { className: "relative", style: { width: `calc(var(--timeline-label-width) + ${trackWidth}px)` }, children: [children, playheadX !== null && (_jsx("div", { "aria-hidden": "true", "data-timeline-playhead-line": "", className: "pointer-events-none absolute inset-y-0 z-10 w-0.5 -translate-x-1/2 bg-primary forced-colors:bg-[Highlight] forced-colors:forced-color-adjust-none", style: { left: `calc(var(--timeline-label-width) + ${playheadX}px)` } }))] }) }), _jsx("p", { "aria-live": "polite", "aria-atomic": "true", "data-timeline-status": "", className: "border-t border-border px-3 py-1 text-[13px] leading-5 text-muted-foreground empty:border-0 empty:p-0", children: status })] }) }));
|
|
144
|
+
}
|
|
145
|
+
/** The label column's cell at the start of a row: it stays put while the track scrolls under it. */
|
|
146
|
+
function LabelCell({ className, style, children, }) {
|
|
147
|
+
return (_jsx("div", { style: style, className: cn('sticky start-0 z-20 flex w-(--timeline-label-width) shrink-0 items-center border-e border-border bg-background px-2', className), children: children }));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Ticks and labels along the top, which stay as the rows scroll. They adapt to the zoom: labels as close as they
|
|
151
|
+
* fit and no closer, at steps a reader expects (1, 2, 5, 10, 15, 30 seconds; frames; hours; days), with unlabelled
|
|
152
|
+
* ticks between. It is where the playhead lives: press anywhere on it to seek, drag to scrub.
|
|
153
|
+
*
|
|
154
|
+
* The playhead is a slider named "Playhead", its value said as a time ("1 minute, 4 seconds"), not a number. ← →
|
|
155
|
+
* move it a step (a frame), Shift ten, Page Up and Page Down a tenth of the timeline, Home and End to the ends.
|
|
156
|
+
* While a marker is picked up, pressing the ruler puts the marker there instead, and the playhead stays.
|
|
157
|
+
*/
|
|
158
|
+
export function TimeRuler({ corner, className }) {
|
|
159
|
+
const tl = useTimeline('TimeRuler');
|
|
160
|
+
const { start, end, pps, scale, time, view, toX, show } = tl;
|
|
161
|
+
const [dragging, setDragging] = useState(false);
|
|
162
|
+
const thumb = useRef(null);
|
|
163
|
+
// A label is about as wide as its widest text at this step: 8.5px a character, and room either side.
|
|
164
|
+
const labelWidthAt = (s) => formatTime(end, scale, s).length * 8.5 + 16;
|
|
165
|
+
const { major, minor } = tickSteps(pps, scale, labelWidthAt);
|
|
166
|
+
const labelPx = labelWidthAt(major);
|
|
167
|
+
const marks = ticks(Math.max(start, view.start - major), Math.min(end, view.end + major), minor ?? major, major, start);
|
|
168
|
+
const onPointerDown = (e) => {
|
|
169
|
+
if (e.button !== 0)
|
|
170
|
+
return;
|
|
171
|
+
const at = tl.timeAt(e.clientX, e.currentTarget);
|
|
172
|
+
if (tl.picked) {
|
|
173
|
+
tl.picked.put(at, e.altKey);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (time === undefined)
|
|
177
|
+
return;
|
|
178
|
+
e.preventDefault();
|
|
179
|
+
e.currentTarget.setPointerCapture(e.pointerId);
|
|
180
|
+
setDragging(true);
|
|
181
|
+
tl.seek(place(at, { step: tl.step, origin: start, pxPerSecond: pps, free: e.altKey }).time);
|
|
182
|
+
thumb.current?.focus({ preventScroll: true });
|
|
183
|
+
};
|
|
184
|
+
const onPointerMove = (e) => {
|
|
185
|
+
if (!dragging)
|
|
186
|
+
return;
|
|
187
|
+
const at = tl.timeAt(e.clientX, e.currentTarget);
|
|
188
|
+
tl.seek(place(at, { step: tl.step, origin: start, pxPerSecond: pps, free: e.altKey }).time);
|
|
189
|
+
};
|
|
190
|
+
const stop = () => setDragging(false);
|
|
191
|
+
const onKeyDown = (e) => {
|
|
192
|
+
if (time === undefined)
|
|
193
|
+
return;
|
|
194
|
+
const next = keyTime(e, time, tl);
|
|
195
|
+
if (next === null)
|
|
196
|
+
return;
|
|
197
|
+
e.preventDefault();
|
|
198
|
+
tl.seek(next);
|
|
199
|
+
};
|
|
200
|
+
return (_jsxs("div", { "data-timeline-ruler": "", className: cn('sticky top-0 z-30 flex h-lane min-h-target bg-background', className), children: [_jsx(LabelCell, { className: "justify-end shadow-[inset_0_-1px_0_var(--border)]", children: _jsx("span", { "aria-hidden": "true", className: "leading-5 font-semibold text-foreground tabular-nums", children: corner ?? (time !== undefined ? show(time) : null) }) }), _jsxs("div", { "data-timeline-ruler-track": "", onPointerDown: onPointerDown, onPointerMove: onPointerMove, onPointerUp: stop, onPointerCancel: stop, className: cn('relative shrink-0 touch-none shadow-[inset_0_-1px_0_var(--border)] select-none', time !== undefined || tl.picked ? 'cursor-pointer' : 'cursor-default'), style: { width: tl.trackWidth }, children: [marks.map((mark) => (_jsx("span", { "aria-hidden": "true", className: cn('absolute bottom-0 w-px bg-muted-foreground', mark.major ? 'h-2.5' : 'h-1.5'), style: { left: toX(mark.t) } }, mark.t))), marks
|
|
201
|
+
.filter((mark) => mark.major)
|
|
202
|
+
.map((mark) => {
|
|
203
|
+
const x = toX(mark.t);
|
|
204
|
+
// A label starts at its tick, or ends there when it would run past the end of the track.
|
|
205
|
+
const last = x > tl.trackWidth - labelPx;
|
|
206
|
+
return (_jsx("span", { "aria-hidden": "true", className: "absolute top-0 text-sm leading-5 whitespace-nowrap text-muted-foreground tabular-nums", style: last ? { right: tl.trackWidth - x + 4 } : { left: x + 4 }, children: show(mark.t, major) }, mark.t));
|
|
207
|
+
}), time !== undefined && (_jsx("div", { ref: thumb, role: "slider", tabIndex: 0, "aria-label": tl.t('playhead'), "aria-orientation": "horizontal", "aria-valuemin": start, "aria-valuemax": end, "aria-valuenow": Math.round(time * 1000) / 1000, "aria-valuetext": tl.speak(time), "data-dragging": dragging || undefined, onKeyDown: onKeyDown,
|
|
208
|
+
// Layer 1: one target square, centred on the time. Dragged, so grab.
|
|
209
|
+
className: "group/playhead absolute top-0 z-10 flex h-full w-target -translate-x-1/2 cursor-grab justify-center outline-none data-dragging:cursor-grabbing", style: { left: toX(time) }, children: _jsx("span", { "aria-hidden": "true", className: "mt-0.5 h-[calc(100%-4px)] w-2.5 rounded-sm bg-primary group-focus-visible/playhead:focus-ring forced-colors:bg-[Highlight] forced-colors:forced-color-adjust-none" }) }))] })] }));
|
|
210
|
+
}
|
|
211
|
+
/** The time a key moves a slider on the timeline to, or null for a key it doesn't use. */
|
|
212
|
+
function keyTime(e, from, tl) {
|
|
213
|
+
const by = tl.step * (e.shiftKey ? 10 : 1);
|
|
214
|
+
const page = (tl.end - tl.start) / 10;
|
|
215
|
+
const next = {
|
|
216
|
+
ArrowRight: from + by,
|
|
217
|
+
ArrowUp: from + by,
|
|
218
|
+
ArrowLeft: from - by,
|
|
219
|
+
ArrowDown: from - by,
|
|
220
|
+
PageUp: from + page,
|
|
221
|
+
PageDown: from - page,
|
|
222
|
+
Home: tl.start,
|
|
223
|
+
End: tl.end,
|
|
224
|
+
};
|
|
225
|
+
return e.key in next ? clampTime(Math.round(next[e.key] * 1e6) / 1e6, tl.start, tl.end) : null;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* A band across the timeline for the product's own drawing: a waveform canvas, a strip of thumbnails, a grid. It
|
|
229
|
+
* scrolls with the track; the playhead's line crosses it. Not a target: pointers pass through to nothing.
|
|
230
|
+
*/
|
|
231
|
+
export function TimelineSlot({ label, height = 48, 'aria-label': named, children, className, }) {
|
|
232
|
+
const tl = useTimeline('TimelineSlot');
|
|
233
|
+
const view = {
|
|
234
|
+
start: tl.start,
|
|
235
|
+
end: tl.end,
|
|
236
|
+
visibleStart: tl.view.start,
|
|
237
|
+
visibleEnd: tl.view.end,
|
|
238
|
+
pxPerSecond: tl.pps,
|
|
239
|
+
width: tl.trackWidth,
|
|
240
|
+
toX: tl.toX,
|
|
241
|
+
};
|
|
242
|
+
return (_jsxs("div", { "data-timeline-slot": "", className: "flex", style: { height }, children: [_jsx(LabelCell, { className: "text-muted-foreground shadow-[inset_0_-1px_0_var(--border)]", children: _jsx("span", { className: "min-w-0 truncate leading-5", children: label }) }), _jsx("div", { ...(named ? { role: 'img', 'aria-label': named } : { 'aria-hidden': true }), className: cn('relative shrink-0 overflow-hidden shadow-[inset_0_-1px_0_var(--border)]', className), style: { width: tl.trackWidth }, children: children(view) })] }));
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* The rows: React Aria's Tree, a `treegrid` and one tab stop. ↑ ↓ move between lanes, → opens a group and ← closes
|
|
246
|
+
* it, and typing jumps to a lane by name. → on a lane moves into its items, in time order; ← → move between them
|
|
247
|
+
* and back to the lane. Pressing a lane selects it (one at a time by default). Each lane is `--lane-height` tall:
|
|
248
|
+
* 32px, 24px in compact density, 44px at AAA, so its items are targets at least `--target-min` tall.
|
|
249
|
+
*/
|
|
250
|
+
export function TimelineLanes({ className, children, ...props }) {
|
|
251
|
+
return (_jsx(RACTree, { selectionMode: "single", ...props, className: cn('relative outline-none data-focus-visible:focus-ring-inset', className), children: children }));
|
|
252
|
+
}
|
|
253
|
+
const ItemRoomContext = createContext({ before: -Infinity, after: Infinity });
|
|
254
|
+
const itemTimes = (node) => {
|
|
255
|
+
if (!isValidElement(node))
|
|
256
|
+
return [0, 0];
|
|
257
|
+
const p = node.props;
|
|
258
|
+
return p.at !== undefined ? [p.at, p.at] : [p.start ?? 0, p.end ?? p.start ?? 0];
|
|
259
|
+
};
|
|
260
|
+
/**
|
|
261
|
+
* One lane: its name in the label column, its items on the track. A lane with lanes inside it is a group, with a
|
|
262
|
+
* chevron to open it. Selected, it takes the `brand-subtle` ground and, in forced colours, a Highlight bar.
|
|
263
|
+
*/
|
|
264
|
+
export function TimelineLane({ id, label, items, children, className }) {
|
|
265
|
+
const tl = useTimeline('TimelineLane');
|
|
266
|
+
const sorted = Children.toArray(items)
|
|
267
|
+
.filter(isValidElement)
|
|
268
|
+
.sort((a, b) => itemTimes(a)[0] - itemTimes(b)[0]);
|
|
269
|
+
return (_jsxs(RACTreeItem, { id: id, textValue: label, className: cn('group/lane relative flex h-lane min-h-target cursor-default outline-none', 'data-hovered:cursor-pointer data-hovered:bg-accent data-selected:bg-brand-subtle data-focus-visible:focus-ring-inset', className), children: [_jsx(TreeItemContent, { children: ({ hasChildItems, level }) => (_jsxs(_Fragment, { children: [_jsxs(LabelCell, { style: { '--lane-indent': level - 1 }, className: cn('gap-0.5 ps-[calc(var(--lane-indent)*12px)] shadow-[inset_0_-1px_0_var(--border)] group-data-hovered/lane:bg-accent group-data-selected/lane:bg-brand-subtle',
|
|
270
|
+
// Forced colours drop the selected ground: a Highlight bar instead, on the cell that stays in view.
|
|
271
|
+
"forced-colors:group-data-selected/lane:before:absolute forced-colors:group-data-selected/lane:before:inset-y-0.5 forced-colors:group-data-selected/lane:before:start-0 forced-colors:group-data-selected/lane:before:w-[3px] forced-colors:group-data-selected/lane:before:bg-[Highlight] forced-colors:group-data-selected/lane:before:forced-color-adjust-none forced-colors:group-data-selected/lane:before:content-['']"), children: [hasChildItems ? (_jsx(RACButton, { slot: "chevron", className: "group/lane-chevron relative flex size-target shrink-0 cursor-pointer items-center justify-center outline-none", children: _jsx("span", { className: "flex size-5 items-center justify-center rounded-sm text-muted-foreground group-data-focus-visible/lane-chevron:focus-ring group-data-hovered/lane-chevron:bg-muted group-data-hovered/lane-chevron:text-foreground", children: _jsx(ChevronRight, { "aria-hidden": "true", className: "size-4 group-data-expanded/lane:rotate-90" }) }) })) : (_jsx("span", { "aria-hidden": "true", className: "w-target shrink-0" })), _jsx("span", { className: "min-w-0 truncate leading-5 font-medium text-foreground group-data-selected/lane:font-semibold", children: label })] }), _jsx("div", { className: "relative shrink-0 shadow-[inset_0_-1px_0_var(--border)]", style: { width: tl.trackWidth }, children: sorted.map((item, i) => (_jsx(ItemRoomContext.Provider, { value: {
|
|
272
|
+
before: i > 0 ? tl.toX(itemTimes(sorted[i - 1])[1]) : -Infinity,
|
|
273
|
+
after: i < sorted.length - 1 ? tl.toX(itemTimes(sorted[i + 1])[0]) : Infinity,
|
|
274
|
+
}, children: item }, item.key ?? i))) })] })) }), children] }));
|
|
275
|
+
}
|
|
276
|
+
// The badge's pairs, whose text the contrast audit promises against their ground; the edge is the text colour.
|
|
277
|
+
const tones = {
|
|
278
|
+
success: 'bg-success-subtle text-success',
|
|
279
|
+
warning: 'bg-warning-subtle text-warning',
|
|
280
|
+
danger: 'bg-destructive-subtle text-destructive',
|
|
281
|
+
info: 'bg-brand-subtle text-brand',
|
|
282
|
+
neutral: 'bg-muted text-muted-foreground',
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* Hides a span's label when the span is too narrow for it, rather than cut it short: the label is always in the
|
|
286
|
+
* tooltip and the name. Read when the span arrives and whenever it or its label resizes (zoom, text spacing),
|
|
287
|
+
* and set on the element directly, so a long lane costs no re-render.
|
|
288
|
+
*/
|
|
289
|
+
// One observer per element, whatever re-attaches the ref: React 18 (the design-system artifact) has no ref cleanup,
|
|
290
|
+
// and a ref merged by React Aria is a new function each render, so the ref runs again.
|
|
291
|
+
const watching = new WeakMap();
|
|
292
|
+
function watch(el, targets, check) {
|
|
293
|
+
watching.get(el)?.disconnect();
|
|
294
|
+
const observer = new ResizeObserver(check);
|
|
295
|
+
for (const target of targets)
|
|
296
|
+
observer.observe(target);
|
|
297
|
+
watching.set(el, observer);
|
|
298
|
+
return () => {
|
|
299
|
+
observer.disconnect();
|
|
300
|
+
if (watching.get(el) === observer)
|
|
301
|
+
watching.delete(el);
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
function useLabelFits() {
|
|
305
|
+
return useCallback((paint) => {
|
|
306
|
+
const label = paint?.querySelector('[data-timeline-item-label]');
|
|
307
|
+
if (!paint || !label)
|
|
308
|
+
return;
|
|
309
|
+
const range = document.createRange();
|
|
310
|
+
let natural = 0;
|
|
311
|
+
const check = () => {
|
|
312
|
+
if (!label.hidden) {
|
|
313
|
+
range.selectNodeContents(label);
|
|
314
|
+
natural = range.getBoundingClientRect().width;
|
|
315
|
+
}
|
|
316
|
+
const padding = parseFloat(getComputedStyle(label).paddingInlineStart) * 2;
|
|
317
|
+
label.hidden = natural + padding > paint.clientWidth + 0.5;
|
|
318
|
+
};
|
|
319
|
+
check();
|
|
320
|
+
return watch(paint, [paint, label], check);
|
|
321
|
+
}, []);
|
|
322
|
+
}
|
|
323
|
+
function ItemButton({ id, label, time, shown, details, style, className, children, }) {
|
|
324
|
+
const tl = useTimeline('A timeline item');
|
|
325
|
+
const selected = tl.selectedItem === id;
|
|
326
|
+
const [tip, setTip] = useState(false);
|
|
327
|
+
// React Aria closes a tooltip when its scroller scrolls, and focus that brings an item into view scrolls: open it
|
|
328
|
+
// again once that scroll ends, if the item still has keyboard focus.
|
|
329
|
+
const onFocus = (e) => {
|
|
330
|
+
const el = e.target;
|
|
331
|
+
const scroller = el.closest('[data-timeline-scroller]');
|
|
332
|
+
if (!scroller)
|
|
333
|
+
return;
|
|
334
|
+
const reopen = () => {
|
|
335
|
+
if (document.activeElement === el && el.matches(':focus-visible'))
|
|
336
|
+
setTip(true);
|
|
337
|
+
};
|
|
338
|
+
scroller.addEventListener('scrollend', reopen, { once: true });
|
|
339
|
+
setTimeout(() => scroller.removeEventListener('scrollend', reopen), 1000);
|
|
340
|
+
};
|
|
341
|
+
return (_jsxs(TooltipTrigger, { delay: 600, isOpen: tip, onOpenChange: setTip, children: [_jsx(ToggleButton, { onFocus: onFocus,
|
|
342
|
+
// A tooltip opened above isn't in React Aria's list of open ones, and a key that moves focus on before the
|
|
343
|
+
// reopen renders reaches a stale close: close it here, so leaving always closes it.
|
|
344
|
+
onBlur: () => setTip(false), "data-timeline-item": id, "aria-label": tl.t('item', { label, time }), isSelected: selected, onChange: (on) => tl.selectItem(on ? id : null), className: cn('absolute top-0 h-full cursor-pointer outline-none', className), style: style, children: children }), _jsxs(Tooltip, { placement: "top", children: [_jsx("span", { className: "block font-semibold", children: label }), _jsx("span", { className: "block tabular-nums", children: shown }), details && _jsx("span", { className: "mt-0.5 block font-normal", children: details })] })] }));
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Something that lasts, from `start` to `end`: a tween, a booking, a deploy. A bar in its tone; its target is the
|
|
348
|
+
* whole bar, as tall as the lane. Selecting it (pressing it, or Enter or Space on it) marks it with a ring; its
|
|
349
|
+
* label, times and `details` show on hover and focus.
|
|
350
|
+
*
|
|
351
|
+
* A bar is as wide as its time, however narrow that is: two moments close in time are close on screen. That rests
|
|
352
|
+
* on 2.5.8's Essential exception for the time axis; keyboard focus reaches every item, in time order, whatever its
|
|
353
|
+
* width. Items in a lane shouldn't overlap in time: put overlapping things in lanes of their own.
|
|
354
|
+
*/
|
|
355
|
+
export function TimelineSpan({ id, label, start, end, tone = 'info', details, className, }) {
|
|
356
|
+
const tl = useTimeline('TimelineSpan');
|
|
357
|
+
const ref = useLabelFits();
|
|
358
|
+
const left = tl.toX(start);
|
|
359
|
+
return (_jsx(ItemButton, { id: id, label: label, time: tl.t('span', { start: tl.speak(start), end: tl.speak(end) }), shown: `${tl.show(start)}–${tl.show(end)}`, details: details, className: cn('group/item', className), style: { left, width: Math.max(2, tl.toX(end) - left) }, children: _jsx("span", { ref: ref, "aria-hidden": "true", className: cn(
|
|
360
|
+
// overflow-clip, not hidden, so the label can stick: hidden would make the bar its scroller.
|
|
361
|
+
'absolute inset-x-0 inset-y-0.5 flex items-center overflow-clip rounded-sm border border-current', tones[tone], 'group-data-hovered/item:brightness-95 dark:group-data-hovered/item:brightness-125',
|
|
362
|
+
// Selected: a 2px foreground ring as a shadow, so focus's outline still shows on top of it.
|
|
363
|
+
'group-data-selected/item:shadow-[0_0_0_1px_var(--background),0_0_0_3px_var(--foreground)]', 'group-data-focus-visible/item:focus-ring', 'forced-colors:border-[CanvasText] forced-colors:bg-[Canvas] forced-colors:text-[CanvasText] forced-colors:forced-color-adjust-none forced-colors:group-data-selected/item:border-[Highlight] forced-colors:group-data-selected/item:bg-[Highlight] forced-colors:group-data-selected/item:text-[HighlightText]'), children: _jsx("span", { "data-timeline-item-label": "",
|
|
364
|
+
// Sticks clear of the label column, so a long bar scrolled half out of view still says what it is.
|
|
365
|
+
className: "sticky start-(--timeline-label-width) px-1.5 text-[13px] leading-4 font-medium whitespace-nowrap text-foreground forced-colors:text-inherit", children: label }) }) }));
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Something that happens at an instant, `at`: a cue, an error, a release. A diamond in its tone. Its target is
|
|
369
|
+
* `--target-min` wide, centred on its time, or narrower where a neighbour is closer than that, so targets never
|
|
370
|
+
* overlap; the narrow case rests on 2.5.8's Essential exception, as a span's does.
|
|
371
|
+
*/
|
|
372
|
+
export function TimelinePoint({ id, label, at, tone = 'info', details, className, }) {
|
|
373
|
+
const tl = useTimeline('TimelinePoint');
|
|
374
|
+
const room = useContext(ItemRoomContext);
|
|
375
|
+
const x = tl.toX(at);
|
|
376
|
+
const half = Math.min(x - room.before, room.after - x);
|
|
377
|
+
return (_jsx(ItemButton, { id: id, label: label, time: tl.speak(at), shown: tl.show(at), details: details, className: cn('group/item flex -translate-x-1/2 items-center justify-center', className), style: {
|
|
378
|
+
left: x,
|
|
379
|
+
width: Number.isFinite(half)
|
|
380
|
+
? `min(var(--target-min), ${Math.max(2, half * 2)}px)`
|
|
381
|
+
: undefined,
|
|
382
|
+
minWidth: Number.isFinite(half) ? undefined : 'var(--target-min)',
|
|
383
|
+
}, children: _jsx("span", { "aria-hidden": "true", className: cn('size-3 rotate-45 rounded-[2px] border border-current', tones[tone], 'group-data-hovered/item:scale-110', 'group-data-selected/item:shadow-[0_0_0_1px_var(--background),0_0_0_3px_var(--foreground)]', 'group-data-focus-visible/item:focus-ring', 'forced-colors:border-[CanvasText] forced-colors:bg-[CanvasText] forced-colors:forced-color-adjust-none forced-colors:group-data-selected/item:border-[Highlight] forced-colors:group-data-selected/item:bg-[Highlight]') }) }));
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Flags at times, each with a short label, on a band of their own: under the ruler for markers and cue points, or
|
|
387
|
+
* beside the lanes for beats. Flags that would overlap stack into tiers, each a `--lane-height` row.
|
|
388
|
+
*
|
|
389
|
+
* Each flag is a slider (its value said as a time) and its own tab stop. People move one by:
|
|
390
|
+
* - dragging it, snapping to the snap points within 8px and otherwise to the step (a frame); Alt or Option moves it
|
|
391
|
+
* freely. The point it snaps to is said, once each time it snaps.
|
|
392
|
+
* - the arrow keys: a step, Shift ten, caught by any snap point on the way; Alt or Option without snapping.
|
|
393
|
+
* - without dragging (2.5.7): click it to pick it up, then click the ruler or this band where it should go. Escape
|
|
394
|
+
* puts it back. What happened shows, and is said, in the line under the timeline.
|
|
395
|
+
*/
|
|
396
|
+
export function TimelineMarkers({ label, markers, onMove, snapPoints, className, }) {
|
|
397
|
+
const tl = useTimeline('TimelineMarkers');
|
|
398
|
+
const hint = useId();
|
|
399
|
+
const [widths, setWidths] = useState({});
|
|
400
|
+
const points = snapPoints ?? tl.snapPoints;
|
|
401
|
+
// Lay the flags out: each starts at its time, or ends there when it would run past the end.
|
|
402
|
+
const boxes = markers.map((m) => {
|
|
403
|
+
const x = tl.toX(m.time);
|
|
404
|
+
const w = widths[m.id] ?? 0;
|
|
405
|
+
const flipped = x + w > tl.trackWidth;
|
|
406
|
+
return { x, w, flipped, left: flipped ? x - w : x, right: flipped ? x : x + w };
|
|
407
|
+
});
|
|
408
|
+
const { tiers, count } = stackTiers(boxes);
|
|
409
|
+
const onTrackPointerDown = (e) => {
|
|
410
|
+
if (e.button !== 0 || !tl.picked || e.target !== e.currentTarget)
|
|
411
|
+
return;
|
|
412
|
+
tl.picked.put(tl.timeAt(e.clientX, e.currentTarget), e.altKey);
|
|
413
|
+
};
|
|
414
|
+
return (_jsxs("div", { role: "group", "aria-label": label, "data-timeline-markers": "", className: cn('flex', className), style: { height: `calc(var(--lane-height) * ${count})`, minHeight: 'var(--target-min)' }, children: [_jsx(LabelCell, { className: "items-start pt-0.5 text-muted-foreground shadow-[inset_0_-1px_0_var(--border)]", children: _jsx("span", { className: "min-w-0 truncate leading-5", children: label }) }), _jsxs("div", { onPointerDown: onTrackPointerDown, className: cn('relative shrink-0 shadow-[inset_0_-1px_0_var(--border)]', tl.picked ? 'cursor-pointer' : 'cursor-default'), style: { width: tl.trackWidth }, children: [_jsx("span", { id: hint, hidden: true, children: tl.t('markerHint') }), markers.map((m, i) => (_jsx(Flag, { marker: m, box: boxes[i], tier: tiers[i] ?? 0, setWidths: setWidths, hint: onMove ? hint : undefined, onMove: onMove, points: points }, m.id)))] })] }));
|
|
415
|
+
}
|
|
416
|
+
function Flag({ marker, box, tier, setWidths, hint, onMove, points, }) {
|
|
417
|
+
const tl = useTimeline('A marker');
|
|
418
|
+
const drag = useRef(null);
|
|
419
|
+
const [dragging, setDragging] = useState(false);
|
|
420
|
+
const [tip, setTip] = useState(false);
|
|
421
|
+
const [quiet, setQuiet] = useState(false);
|
|
422
|
+
const picked = tl.picked?.id === marker.id;
|
|
423
|
+
// Its width, for the tiers: read when it arrives and as its label or text spacing changes it.
|
|
424
|
+
const id = marker.id;
|
|
425
|
+
const measure = useCallback((el) => {
|
|
426
|
+
if (!el)
|
|
427
|
+
return;
|
|
428
|
+
const read = () => {
|
|
429
|
+
const w = el.offsetWidth;
|
|
430
|
+
setWidths((was) => (was[id] === w ? was : { ...was, [id]: w }));
|
|
431
|
+
};
|
|
432
|
+
return watch(el, [el], read);
|
|
433
|
+
}, [id, setWidths]);
|
|
434
|
+
const others = points.filter((p) => Math.abs(p.time - marker.time) > 1e-9 || p.label !== marker.label);
|
|
435
|
+
const move = (time, point, was) => {
|
|
436
|
+
onMove?.(marker.id, clampTime(time, tl.start, tl.end));
|
|
437
|
+
if (point && point !== was)
|
|
438
|
+
tl.announce(tl.t('snapped', { point: point.label }));
|
|
439
|
+
else if (!point && was)
|
|
440
|
+
tl.announce('');
|
|
441
|
+
};
|
|
442
|
+
const pickUp = () => {
|
|
443
|
+
const from = marker.time;
|
|
444
|
+
tl.announce(tl.t('picked', { label: marker.label }));
|
|
445
|
+
tl.pick({
|
|
446
|
+
id: marker.id,
|
|
447
|
+
label: marker.label,
|
|
448
|
+
put: (time, free) => {
|
|
449
|
+
const { time: to } = place(time, {
|
|
450
|
+
step: tl.step,
|
|
451
|
+
origin: tl.start,
|
|
452
|
+
points: others,
|
|
453
|
+
pxPerSecond: tl.pps,
|
|
454
|
+
free,
|
|
455
|
+
});
|
|
456
|
+
onMove?.(marker.id, clampTime(to, tl.start, tl.end));
|
|
457
|
+
tl.pick(null);
|
|
458
|
+
tl.announce(tl.t('placed', { label: marker.label, time: tl.speak(to) }));
|
|
459
|
+
},
|
|
460
|
+
cancel: () => {
|
|
461
|
+
onMove?.(marker.id, from);
|
|
462
|
+
tl.pick(null);
|
|
463
|
+
tl.announce(tl.t('cancelled', { label: marker.label, time: tl.speak(from) }));
|
|
464
|
+
},
|
|
465
|
+
});
|
|
466
|
+
};
|
|
467
|
+
const onPointerDown = (e) => {
|
|
468
|
+
if (e.button !== 0 || !onMove)
|
|
469
|
+
return;
|
|
470
|
+
e.stopPropagation();
|
|
471
|
+
e.preventDefault();
|
|
472
|
+
e.currentTarget.focus({ preventScroll: true });
|
|
473
|
+
e.currentTarget.setPointerCapture(e.pointerId);
|
|
474
|
+
drag.current = { x: e.clientX, from: marker.time, moved: false, snapped: null };
|
|
475
|
+
setQuiet(true);
|
|
476
|
+
};
|
|
477
|
+
const onPointerMove = (e) => {
|
|
478
|
+
const d = drag.current;
|
|
479
|
+
if (!d)
|
|
480
|
+
return;
|
|
481
|
+
if (!d.moved && Math.abs(e.clientX - d.x) < 4)
|
|
482
|
+
return;
|
|
483
|
+
if (!d.moved) {
|
|
484
|
+
d.moved = true;
|
|
485
|
+
setDragging(true);
|
|
486
|
+
if (tl.picked)
|
|
487
|
+
tl.pick(null);
|
|
488
|
+
}
|
|
489
|
+
const raw = clampTime(d.from + (e.clientX - d.x) / tl.pps, tl.start, tl.end);
|
|
490
|
+
const { time, point } = place(raw, {
|
|
491
|
+
step: tl.step,
|
|
492
|
+
origin: tl.start,
|
|
493
|
+
points: others,
|
|
494
|
+
pxPerSecond: tl.pps,
|
|
495
|
+
free: e.altKey,
|
|
496
|
+
});
|
|
497
|
+
move(time, point, d.snapped);
|
|
498
|
+
d.snapped = point;
|
|
499
|
+
};
|
|
500
|
+
const onPointerUp = () => {
|
|
501
|
+
const d = drag.current;
|
|
502
|
+
drag.current = null;
|
|
503
|
+
setDragging(false);
|
|
504
|
+
if (d && !d.moved) {
|
|
505
|
+
if (picked)
|
|
506
|
+
tl.picked?.cancel();
|
|
507
|
+
else
|
|
508
|
+
pickUp();
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
const onKeyDown = (e) => {
|
|
512
|
+
if (!onMove)
|
|
513
|
+
return;
|
|
514
|
+
setQuiet(true);
|
|
515
|
+
const target = keyTime(e, marker.time, tl);
|
|
516
|
+
if (target === null)
|
|
517
|
+
return;
|
|
518
|
+
e.preventDefault();
|
|
519
|
+
const arrow = e.key.startsWith('Arrow');
|
|
520
|
+
const { time, point } = arrow
|
|
521
|
+
? nudge(marker.time, target - marker.time, {
|
|
522
|
+
points: others,
|
|
523
|
+
pxPerSecond: tl.pps,
|
|
524
|
+
free: e.altKey,
|
|
525
|
+
})
|
|
526
|
+
: { time: target, point: null };
|
|
527
|
+
move(time, point, null);
|
|
528
|
+
if (!point)
|
|
529
|
+
tl.announce('');
|
|
530
|
+
};
|
|
531
|
+
return (_jsxs(TooltipTrigger, { delay: 600, isOpen: tip && !quiet && !dragging, onOpenChange: setTip, children: [_jsx(Focusable, { children: _jsxs("div", { ref: measure, role: "slider", tabIndex: 0, "aria-label": marker.label, "aria-orientation": "horizontal", "aria-valuemin": tl.start, "aria-valuemax": tl.end, "aria-valuenow": Math.round(marker.time * 1000) / 1000, "aria-valuetext": tl.speak(marker.time), "aria-readonly": onMove ? undefined : true, "aria-describedby": hint, "data-marker": marker.id, "data-picked": picked || undefined, "data-dragging": dragging || undefined, "data-flipped": box.flipped || undefined, onPointerDown: onPointerDown, onPointerMove: onPointerMove, onPointerUp: onPointerUp, onPointerCancel: onPointerUp, onKeyDown: onKeyDown, onBlur: () => setQuiet(false), onPointerLeave: () => setQuiet(false), className: cn(
|
|
532
|
+
// Layer 1: the flag, a lane tall and at least a target wide, starting (or ending) at its time.
|
|
533
|
+
'group/marker absolute flex h-lane min-h-target min-w-target touch-none items-center outline-none select-none', onMove ? 'cursor-grab data-dragging:cursor-grabbing' : 'cursor-default', box.flipped ? 'flex-row-reverse' : ''), style: {
|
|
534
|
+
left: box.flipped ? undefined : box.x,
|
|
535
|
+
right: box.flipped ? `calc(100% - ${box.x}px)` : undefined,
|
|
536
|
+
top: `calc(var(--lane-height) * ${tier})`,
|
|
537
|
+
}, children: [_jsx("span", { "aria-hidden": "true", className: "w-0.5 self-stretch bg-foreground group-data-picked/marker:bg-primary forced-colors:bg-[Highlight] forced-colors:forced-color-adjust-none" }), _jsx("span", { "aria-hidden": "true", className: cn('h-5 rounded-sm border border-foreground bg-background px-1.5 text-[13px] leading-[18px] font-medium whitespace-nowrap text-foreground', box.flipped ? 'rounded-e-none' : 'rounded-s-none', 'group-hover/marker:bg-accent group-data-dragging/marker:bg-accent', 'group-data-picked/marker:border-primary group-data-picked/marker:bg-primary group-data-picked/marker:text-primary-foreground', 'group-focus-visible/marker:focus-ring', 'forced-colors:border-[Highlight] forced-colors:bg-[Canvas] forced-colors:text-[CanvasText] forced-colors:forced-color-adjust-none forced-colors:group-data-picked/marker:bg-[Highlight] forced-colors:group-data-picked/marker:text-[HighlightText]'), children: marker.label })] }) }), _jsxs(Tooltip, { placement: "top", children: [_jsx("span", { className: "block font-semibold", children: marker.label }), _jsx("span", { className: "block tabular-nums", children: tl.show(marker.time) })] })] }));
|
|
538
|
+
}
|
|
539
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/ui/timeline.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@setsquare/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "React Aria components, design tokens, a dashboard shell and a site shell, with a switch between WCAG 2.2 AA and AAA sizing, spacing and contrast.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/Worktree-Amigos/setsquare-ui#readme",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"dependencies": {
|
|
74
74
|
"clsx": "2.1.1",
|
|
75
75
|
"intl-messageformat": "12.1.3",
|
|
76
|
-
"lucide-react": "1.48.0",
|
|
76
|
+
"lucide-react": "^1.48.0",
|
|
77
77
|
"tailwind-merge": "3.7.0"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|