@hjmds/react-native 1.20.0 → 1.21.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/dist/actions.d.ts +10 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js.map +1 -1
- package/dist/authoring-tools.d.ts +24 -0
- package/dist/authoring-tools.d.ts.map +1 -0
- package/dist/authoring-tools.js +28 -0
- package/dist/authoring-tools.js.map +1 -0
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +2 -1
- package/dist/calendar.js.map +1 -1
- package/dist/chart.d.ts +138 -0
- package/dist/chart.d.ts.map +1 -0
- package/dist/chart.js +271 -0
- package/dist/chart.js.map +1 -0
- package/dist/collection-editing.d.ts +63 -0
- package/dist/collection-editing.d.ts.map +1 -0
- package/dist/collection-editing.js +114 -0
- package/dist/collection-editing.js.map +1 -0
- package/dist/communication.d.ts +51 -0
- package/dist/communication.d.ts.map +1 -0
- package/dist/communication.js +68 -0
- package/dist/communication.js.map +1 -0
- package/dist/data-table.d.ts +48 -0
- package/dist/data-table.d.ts.map +1 -0
- package/dist/data-table.js +90 -0
- package/dist/data-table.js.map +1 -0
- package/dist/data-workflows.d.ts +68 -0
- package/dist/data-workflows.d.ts.map +1 -0
- package/dist/data-workflows.js +60 -0
- package/dist/data-workflows.js.map +1 -0
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/internal/recipe-button.d.ts +4 -0
- package/dist/internal/recipe-button.d.ts.map +1 -1
- package/dist/internal/recipe-button.js +24 -5
- package/dist/internal/recipe-button.js.map +1 -1
- package/dist/internal/use-composition-action.d.ts +17 -0
- package/dist/internal/use-composition-action.d.ts.map +1 -0
- package/dist/internal/use-composition-action.js +17 -0
- package/dist/internal/use-composition-action.js.map +1 -0
- package/dist/media-transport.d.ts +22 -0
- package/dist/media-transport.d.ts.map +1 -0
- package/dist/media-transport.js +49 -0
- package/dist/media-transport.js.map +1 -0
- package/dist/navigation.d.ts +3 -1
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +24 -9
- package/dist/navigation.js.map +1 -1
- package/dist/screen-flows.d.ts +3 -2
- package/dist/screen-flows.d.ts.map +1 -1
- package/dist/screen-flows.js +1 -1
- package/dist/screen-flows.js.map +1 -1
- package/dist/screens.d.ts +8 -2
- package/dist/screens.d.ts.map +1 -1
- package/dist/screens.js +21 -7
- package/dist/screens.js.map +1 -1
- package/dist/social-compositions.d.ts +52 -0
- package/dist/social-compositions.d.ts.map +1 -0
- package/dist/social-compositions.js +40 -0
- package/dist/social-compositions.js.map +1 -0
- package/dist/streaming-answer.d.ts +24 -0
- package/dist/streaming-answer.d.ts.map +1 -0
- package/dist/streaming-answer.js +57 -0
- package/dist/streaming-answer.js.map +1 -0
- package/dist/table-family.d.ts +46 -0
- package/dist/table-family.d.ts.map +1 -0
- package/dist/table-family.js +56 -0
- package/dist/table-family.js.map +1 -0
- package/dist/task-controls.d.ts +47 -0
- package/dist/task-controls.d.ts.map +1 -0
- package/dist/task-controls.js +46 -0
- package/dist/task-controls.js.map +1 -0
- package/dist/toggle-feedback.d.ts +26 -0
- package/dist/toggle-feedback.d.ts.map +1 -0
- package/dist/toggle-feedback.js +46 -0
- package/dist/toggle-feedback.js.map +1 -0
- package/dist/transfer-task.d.ts +18 -0
- package/dist/transfer-task.d.ts.map +1 -0
- package/dist/transfer-task.js +56 -0
- package/dist/transfer-task.js.map +1 -0
- package/package.json +75 -3
package/dist/chart.js
ADDED
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { AppState, PanResponder, Pressable, Text as NativeText, View } from "react-native";
|
|
4
|
+
import Svg, { Circle, ClipPath, Defs, G, Line, LinearGradient, Path, Rect, Stop, Text as SvgText } from "react-native-svg";
|
|
5
|
+
import { resolveColorReference } from "@hjmds/design-contracts/color-references";
|
|
6
|
+
import { resolveDatavizSeriesColor } from "@hjmds/design-contracts/dataviz";
|
|
7
|
+
import { prepareChartLineMorph, areaPath, chartRecipe, describeChart, isChartNumber, linePath, nearestChartIndex, nearestScatterPoint, observedIndices, resolveBarGeometry, resolveLineGeometry, resolvePieGeometry, resolvePieVisibility, resolveRadarGeometry, resolveScatterGeometry, seriesExtremes, splitSegments, stepChartIndex, validateChartSeries, } from "@hjmds/design-contracts/components/chart";
|
|
8
|
+
import { spacing } from "@hjmds/design-contracts/foundations";
|
|
9
|
+
import { Text } from "./primitives.js";
|
|
10
|
+
import { useHjmNativeTheme } from "./provider.js";
|
|
11
|
+
function useChartPalette() {
|
|
12
|
+
const theme = useHjmNativeTheme();
|
|
13
|
+
const resolved = theme.environment.theme;
|
|
14
|
+
return {
|
|
15
|
+
theme,
|
|
16
|
+
seriesColor: (series, index) => series.color ?? resolveDatavizSeriesColor(resolved, index),
|
|
17
|
+
grid: resolveColorReference(chartRecipe.chrome.gridLine, theme.palette),
|
|
18
|
+
axis: resolveColorReference(chartRecipe.chrome.axisLine, theme.palette),
|
|
19
|
+
label: resolveColorReference(chartRecipe.chrome.axisLabel, theme.palette),
|
|
20
|
+
legend: resolveColorReference(chartRecipe.chrome.legendLabel, theme.palette),
|
|
21
|
+
surface: resolveColorReference(chartRecipe.chrome.tooltipSurface, theme.palette),
|
|
22
|
+
background: theme.colors.bg,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function useWidth(initial = 0) {
|
|
26
|
+
const [width, setWidth] = useState(initial);
|
|
27
|
+
return [width, useCallback((event) => setWidth(Math.round(event.nativeEvent.layout.width)), [])];
|
|
28
|
+
}
|
|
29
|
+
/** Controlled/uncontrolled focus with a separate transient scrub index. */
|
|
30
|
+
function useFocus({ focusIndex, defaultFocusIndex = null, onFocusChange, holdOnRelease = false }, fallback, categories) {
|
|
31
|
+
const categoryKey = (index) => index === null || categories?.[index] === undefined ? null : JSON.stringify([categories[index], categories.slice(0, index).filter(value => value === categories[index]).length]);
|
|
32
|
+
const selectedKey = useRef(categoryKey(defaultFocusIndex));
|
|
33
|
+
const [own, setOwn] = useState(defaultFocusIndex);
|
|
34
|
+
const [scrub, setScrub] = useState(null);
|
|
35
|
+
const last = useRef(null);
|
|
36
|
+
const mapped = categories && selectedKey.current !== null ? categories.findIndex((_, index) => categoryKey(index) === selectedKey.current) : own;
|
|
37
|
+
const ownSelection = mapped === -1 ? null : mapped;
|
|
38
|
+
const settled = focusIndex !== undefined ? (categories && (focusIndex === null || categories[focusIndex] === undefined) ? null : focusIndex) : ownSelection;
|
|
39
|
+
const focus = scrub ?? settled ?? fallback;
|
|
40
|
+
const set = useCallback((index, scrubbing) => {
|
|
41
|
+
if (scrubbing) {
|
|
42
|
+
setScrub(index);
|
|
43
|
+
last.current = index;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
setScrub(null);
|
|
47
|
+
if (focusIndex === undefined) {
|
|
48
|
+
selectedKey.current = categoryKey(index);
|
|
49
|
+
setOwn(index);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
onFocusChange?.(index, { scrubbing });
|
|
53
|
+
}, [focusIndex, onFocusChange, categories]);
|
|
54
|
+
const release = useCallback(() => set(holdOnRelease ? last.current : null, false), [set, holdOnRelease]);
|
|
55
|
+
return { focus, scrubbing: scrub !== null, set, release };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Horizontal press-and-drag scrubbing. Vertical drags are released to the parent ScrollView so a
|
|
59
|
+
* chart inside a scrolling screen never traps the page.
|
|
60
|
+
*/
|
|
61
|
+
function useScrub(pick, onScrub, onEnd) {
|
|
62
|
+
const pickRef = useRef(pick);
|
|
63
|
+
pickRef.current = pick;
|
|
64
|
+
const scrubRef = useRef(onScrub);
|
|
65
|
+
scrubRef.current = onScrub;
|
|
66
|
+
const endRef = useRef(onEnd);
|
|
67
|
+
endRef.current = onEnd;
|
|
68
|
+
return useMemo(() => {
|
|
69
|
+
const at = (event) => scrubRef.current(pickRef.current(event.nativeEvent.locationX, event.nativeEvent.locationY));
|
|
70
|
+
return PanResponder.create({
|
|
71
|
+
onStartShouldSetPanResponder: () => true,
|
|
72
|
+
onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dx) > Math.abs(g.dy),
|
|
73
|
+
onPanResponderTerminationRequest: (_, g) => Math.abs(g.dy) > Math.abs(g.dx),
|
|
74
|
+
onPanResponderGrant: at,
|
|
75
|
+
onPanResponderMove: at,
|
|
76
|
+
onPanResponderRelease: () => endRef.current(),
|
|
77
|
+
onPanResponderTerminate: () => endRef.current(),
|
|
78
|
+
}).panHandlers;
|
|
79
|
+
}, []);
|
|
80
|
+
}
|
|
81
|
+
function CursorBubble({ x, width, text, surface, color }) {
|
|
82
|
+
const box = 88, left = Math.min(width - box, Math.max(0, x - box / 2));
|
|
83
|
+
return _jsx(View, { pointerEvents: "none", importantForAccessibility: "no-hide-descendants", accessibilityElementsHidden: true, style: { position: "absolute", top: 0, left, width: box, alignItems: "center" }, children: _jsx(View, { style: { paddingHorizontal: spacing.xs, paddingVertical: 2, borderRadius: 8, backgroundColor: surface }, children: _jsx(NativeText, { numberOfLines: 1, style: { color, fontSize: 11, fontWeight: "700" }, children: text }) }) });
|
|
84
|
+
}
|
|
85
|
+
function AxisLabels({ ticks, y, x, color, format }) {
|
|
86
|
+
return _jsx(_Fragment, { children: ticks.map(tick => _jsx(SvgText, { x: x, y: y(tick) + 4, fontSize: 10, fill: color, textAnchor: "end", children: format(tick) }, tick)) });
|
|
87
|
+
}
|
|
88
|
+
// Paths/rectangles update their host attributes directly; values, axes and accessibility
|
|
89
|
+
// always come from the latest real data. No per-frame React reconciliation.
|
|
90
|
+
function MotionLinePath({ points, lower, floor, curve, animate, ...rest }) {
|
|
91
|
+
const reducedMotion = useHjmNativeTheme().environment.reducedMotion;
|
|
92
|
+
const node = useRef(null);
|
|
93
|
+
const previous = useRef(null);
|
|
94
|
+
const path = (p, base, edge) => base === undefined ? linePath(p, curve) : areaPath(p, base, curve, edge);
|
|
95
|
+
const signature = JSON.stringify([points, lower, floor, curve]);
|
|
96
|
+
useLayoutEffect(() => {
|
|
97
|
+
const before = previous.current;
|
|
98
|
+
const target = { points, lower, floor };
|
|
99
|
+
previous.current = target;
|
|
100
|
+
// A bounded morph avoids multiplying frame work for dense historical datasets.
|
|
101
|
+
const morph = animate && !reducedMotion && AppState.currentState === "active" && before && points.length + before.points.length <= 1024 ? prepareChartLineMorph(before.points, points) : null;
|
|
102
|
+
if (!morph) {
|
|
103
|
+
node.current?.setNativeProps({ d: path(points, floor, lower) });
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const lowerMorph = before?.lower && lower ? prepareChartLineMorph(before.lower, lower) : null;
|
|
107
|
+
let frame = 0, start;
|
|
108
|
+
const paint = (t) => {
|
|
109
|
+
const current = t === 1 ? target : { points: morph(t), lower: lowerMorph?.(t) ?? lower, floor: floor === undefined ? undefined : (before?.floor ?? floor) + (floor - (before?.floor ?? floor)) * t };
|
|
110
|
+
previous.current = current;
|
|
111
|
+
const d = path(current.points, current.floor, current.lower);
|
|
112
|
+
node.current?.setNativeProps({ d });
|
|
113
|
+
};
|
|
114
|
+
const tick = (now) => { start ??= now; const t = Math.min(1, (now - start) / 220); paint(1 - (1 - t) ** 3); if (t < 1)
|
|
115
|
+
frame = requestAnimationFrame(tick); };
|
|
116
|
+
paint(0);
|
|
117
|
+
frame = requestAnimationFrame(tick);
|
|
118
|
+
const subscription = AppState.addEventListener("change", state => { if (state !== "active") {
|
|
119
|
+
cancelAnimationFrame(frame);
|
|
120
|
+
paint(1);
|
|
121
|
+
} });
|
|
122
|
+
return () => { cancelAnimationFrame(frame); subscription.remove(); };
|
|
123
|
+
}, [signature, animate, reducedMotion]);
|
|
124
|
+
return _jsx(Path, { ...rest, ref: node, d: path(points, floor, lower) });
|
|
125
|
+
}
|
|
126
|
+
function MotionBar({ bar, animate, ...rest }) {
|
|
127
|
+
const reducedMotion = useHjmNativeTheme().environment.reducedMotion;
|
|
128
|
+
const node = useRef(null), previous = useRef(null);
|
|
129
|
+
const signature = JSON.stringify(bar);
|
|
130
|
+
useLayoutEffect(() => {
|
|
131
|
+
const before = previous.current;
|
|
132
|
+
previous.current = bar;
|
|
133
|
+
if (!animate || reducedMotion || !before || AppState.currentState !== "active") {
|
|
134
|
+
node.current?.setNativeProps({ x: bar.x, y: bar.y, width: bar.width, height: bar.height });
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
let frame = 0, start;
|
|
138
|
+
const paint = (t) => {
|
|
139
|
+
const value = { ...bar, x: before.x + (bar.x - before.x) * t, y: before.y + (bar.y - before.y) * t, width: before.width + (bar.width - before.width) * t, height: before.height + (bar.height - before.height) * t };
|
|
140
|
+
previous.current = value;
|
|
141
|
+
node.current?.setNativeProps({ x: value.x, y: value.y, width: value.width, height: value.height });
|
|
142
|
+
};
|
|
143
|
+
const tick = (now) => { start ??= now; const t = Math.min(1, (now - start) / 220); paint(1 - (1 - t) ** 3); if (t < 1)
|
|
144
|
+
frame = requestAnimationFrame(tick); };
|
|
145
|
+
paint(0);
|
|
146
|
+
frame = requestAnimationFrame(tick);
|
|
147
|
+
const subscription = AppState.addEventListener("change", state => { if (state !== "active") {
|
|
148
|
+
cancelAnimationFrame(frame);
|
|
149
|
+
paint(1);
|
|
150
|
+
} });
|
|
151
|
+
return () => { cancelAnimationFrame(frame); subscription.remove(); };
|
|
152
|
+
}, [signature, animate, reducedMotion]);
|
|
153
|
+
return _jsx(Rect, { ...rest, ref: node, x: bar.x, y: bar.y, width: bar.width, height: bar.height });
|
|
154
|
+
}
|
|
155
|
+
export function LineChart({ categories, series, accessibilityLabel, formatValue, missingLabel, height = chartRecipe.heights.regular, curve = "linear", area, stacked = false, invert = false, domain, includeZero, referenceValue, extremes, showAxis = false, valueAxis = false, ticks: tickOverride, cursorLabel, animateChanges = false, scrubEmphasis, ...focusProps }) {
|
|
156
|
+
const palette = useChartPalette(), id = useId().replace(/[^a-zA-Z0-9]/g, "");
|
|
157
|
+
const [width, onLayout] = useWidth();
|
|
158
|
+
const available = useMemo(() => observedIndices(series), [series]);
|
|
159
|
+
const { focus, scrubbing, set, release } = useFocus(focusProps, available.at(-1) ?? null, categories);
|
|
160
|
+
const insets = showAxis || valueAxis ? chartRecipe.insets.axis : chartRecipe.insets.plot;
|
|
161
|
+
const g = useMemo(() => width > 0 ? resolveLineGeometry({ categories, series, width, height, insets, invert, stacked, domain, includeZero }) : null, [categories, series, width, height, insets, invert, stacked, domain, includeZero]);
|
|
162
|
+
const handlers = useScrub(x => g ? nearestChartIndex(g.xs, x, available) : null, index => set(index, true), release);
|
|
163
|
+
const showArea = area ?? series.length === 1;
|
|
164
|
+
const reference = referenceValue === "first" ? series[0]?.values.find(isChartNumber) : referenceValue;
|
|
165
|
+
const marks = extremes && !scrubbing ? seriesExtremes(series[0]?.values ?? []) : null;
|
|
166
|
+
return _jsxs(View, { accessible: true, accessibilityRole: "adjustable", accessibilityLabel: accessibilityLabel, accessibilityHint: describeChart(categories, series, formatValue, missingLabel), accessibilityValue: { text: focus === null ? missingLabel : `${categories[focus]} ${series.map(item => { const v = item.values[focus]; return isChartNumber(v) ? formatValue(v) : missingLabel; }).join(", ")}` }, accessibilityActions: [{ name: "increment" }, { name: "decrement" }], onAccessibilityAction: event => set(stepChartIndex(available, focus, event.nativeEvent.actionName === "increment" ? 1 : -1), false), onLayout: onLayout, style: { height }, ...handlers, children: [g && _jsxs(Svg, { width: width, height: height, accessible: false, children: [_jsxs(Defs, { children: [scrubEmphasis && _jsx(ClipPath, { id: `hjmScrub${id}`, children: _jsx(Rect, { x: scrubEmphasis === "after" && focus !== null ? g.xs[focus] ?? g.plot.left : g.plot.left, y: 0, width: focus === null ? width : scrubEmphasis === "after" ? g.plot.right - (g.xs[focus] ?? g.plot.left) : (g.xs[focus] ?? g.plot.right) - g.plot.left, height: height }) }), series.map((item, s) => _jsxs(LinearGradient, { id: `hjmArea${id}${s}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx(Stop, { offset: "0", stopColor: palette.seriesColor(item, s), stopOpacity: chartRecipe.area.topOpacity }), _jsx(Stop, { offset: "1", stopColor: palette.seriesColor(item, s), stopOpacity: chartRecipe.area.bottomOpacity })] }, item.id))] }), (tickOverride ?? g.ticks).map(tick => _jsx(Line, { x1: g.plot.left, x2: g.plot.right, y1: g.y(tick), y2: g.y(tick), stroke: palette.grid, strokeWidth: chartRecipe.chrome.gridWidth }, tick)), (showAxis || valueAxis) && _jsx(AxisLabels, { ticks: tickOverride ?? g.ticks, y: g.y, x: g.plot.left - 6, color: palette.label, format: formatValue }), isChartNumber(reference) && _jsx(Line, { x1: g.plot.left, x2: g.plot.right, y1: g.y(reference), y2: g.y(reference), stroke: palette.label, strokeDasharray: [...chartRecipe.reference.dash], strokeWidth: 1 }), series.map((item, s) => {
|
|
167
|
+
const color = palette.seriesColor(item, s), segments = splitSegments(g.plots[s]);
|
|
168
|
+
const lowerSegments = g.lower ? splitSegments(g.lower[s]) : null;
|
|
169
|
+
return _jsxs(G, { children: [(showArea || stacked) && segments.map((segment, i) => _jsx(MotionLinePath, { animate: animateChanges, points: segment, floor: g.plot.bottom, curve: curve, lower: lowerSegments?.[i], fill: `url(#hjmArea${id}${s})` }, `a${i}`)), segments.map((segment, i) => _jsxs(G, { children: [_jsx(MotionLinePath, { animate: animateChanges, points: segment, curve: curve, stroke: scrubEmphasis && focus !== null ? palette.label : color, strokeWidth: chartRecipe.line.strokeWidth, fill: "none", strokeLinejoin: "round", strokeLinecap: "round" }), scrubEmphasis && focus !== null && _jsx(G, { clipPath: `url(#hjmScrub${id})`, children: _jsx(MotionLinePath, { animate: animateChanges, points: segment, curve: curve, stroke: color, strokeWidth: chartRecipe.line.strokeWidth, fill: "none", strokeLinejoin: "round", strokeLinecap: "round" }) })] }, `l${i}`)), segments.filter(segment => segment.length === 1).map(segment => _jsx(Circle, { cx: segment[0].x, cy: segment[0].y, r: 3, fill: color }, `d${segment[0].index}`))] }, item.id);
|
|
170
|
+
}), focus !== null && _jsxs(_Fragment, { children: [_jsx(Line, { x1: g.xs[focus], x2: g.xs[focus], y1: g.plot.top - 4, y2: g.plot.bottom, stroke: palette.label, strokeWidth: chartRecipe.cursor.strokeWidth, ...(scrubbing ? {} : { strokeDasharray: [...chartRecipe.cursor.dash] }) }), series.map((item, s) => { const p = g.plots[s][focus]; const color = palette.seriesColor(item, s); return p ? _jsxs(G, { children: [_jsx(Circle, { cx: p.x, cy: p.y, r: chartRecipe.line.focusHaloRadius, fill: color, opacity: chartRecipe.line.focusHaloOpacity }), _jsx(Circle, { cx: p.x, cy: p.y, r: chartRecipe.line.pointRadius, fill: color, stroke: palette.background, strokeWidth: 2 })] }, item.id) : null; })] }), marks && extremes && [[marks.max, extremes.high], [marks.min, extremes.low]].filter(([index], i) => i === 0 || index !== marks.max).map(([index, label]) => {
|
|
171
|
+
const p = g.plots[0][index];
|
|
172
|
+
// Place the label on the open side of the point: above when it sits in the upper half of the
|
|
173
|
+
// plot, below otherwise, so inverted (rank) series never draw text across their own line.
|
|
174
|
+
const above = p ? p.y < (g.plot.top + g.plot.bottom) / 2 : true;
|
|
175
|
+
return p ? _jsx(SvgText, { x: Math.min(g.plot.right - 4, Math.max(g.plot.left + 4, p.x)), y: Math.max(10, Math.min(height - 2, p.y + (above ? -10 : 16))), fontSize: 11, fontWeight: "600", fill: palette.label, textAnchor: p.x < width * 0.2 ? "start" : p.x > width * 0.8 ? "end" : "middle", children: `${label} ${formatValue(p.value)}` }, label) : null;
|
|
176
|
+
}), showAxis && categories.length > 0 && _jsxs(_Fragment, { children: [_jsx(SvgText, { x: g.xs[0], y: height - 4, fontSize: 10, fill: palette.label, textAnchor: "start", children: categories[0] }), _jsx(SvgText, { x: g.xs.at(-1), y: height - 4, fontSize: 10, fill: palette.label, textAnchor: "end", children: categories.at(-1) })] })] }), g && scrubbing && focus !== null && _jsx(CursorBubble, { x: g.xs[focus], width: width, text: cursorLabel?.(focus) ?? categories[focus], surface: palette.surface, color: palette.legend })] });
|
|
177
|
+
}
|
|
178
|
+
export function BarChart({ categories, series, accessibilityLabel, formatValue, missingLabel, height, orientation = "vertical", layout = "grouped", domain, showAxis = false, showValues = false, animateChanges = false, ...focusProps }) {
|
|
179
|
+
const palette = useChartPalette();
|
|
180
|
+
const [width, onLayout] = useWidth();
|
|
181
|
+
const vertical = orientation === "vertical";
|
|
182
|
+
// Horizontal bars grow with the category count so labels never overlap (gifted-charts horizontal mode).
|
|
183
|
+
const resolvedHeight = height ?? (vertical ? chartRecipe.heights.regular : Math.max(chartRecipe.heights.compact, categories.length * 36 + spacing.lg));
|
|
184
|
+
const available = useMemo(() => observedIndices(series), [series]);
|
|
185
|
+
const { focus, scrubbing, set } = useFocus(focusProps, null, categories);
|
|
186
|
+
const insets = vertical
|
|
187
|
+
? (showAxis ? chartRecipe.insets.axis : { ...chartRecipe.insets.plot, bottom: spacing.lg })
|
|
188
|
+
: { top: spacing.xs, right: showValues ? 48 : spacing.sm, bottom: spacing.xs, left: 72 };
|
|
189
|
+
const g = useMemo(() => width > 0 ? resolveBarGeometry({ categories, series, width, height: resolvedHeight, insets, orientation, layout, domain }) : null, [categories, series, width, resolvedHeight, insets, orientation, layout, domain]);
|
|
190
|
+
const categoryKeys = useMemo(() => {
|
|
191
|
+
const occurrences = new Map();
|
|
192
|
+
return categories.map(label => { const occurrence = occurrences.get(label) ?? 0; occurrences.set(label, occurrence + 1); return JSON.stringify([label, occurrence]); });
|
|
193
|
+
}, [categories]);
|
|
194
|
+
const handlers = useScrub((x, y) => g ? nearestChartIndex(g.centers, vertical ? x : y, available) : null, index => set(index, true), () => set(focus, false));
|
|
195
|
+
return _jsxs(View, { accessible: true, accessibilityRole: "adjustable", accessibilityLabel: accessibilityLabel, accessibilityHint: describeChart(categories, series, formatValue, missingLabel), accessibilityValue: { text: focus === null ? "" : `${categories[focus]} ${series.map(item => { const v = item.values[focus]; return isChartNumber(v) ? formatValue(v) : missingLabel; }).join(", ")}` }, accessibilityActions: [{ name: "increment" }, { name: "decrement" }], onAccessibilityAction: event => set(stepChartIndex(available, focus, event.nativeEvent.actionName === "increment" ? 1 : -1), false), onLayout: onLayout, style: { height: resolvedHeight }, ...handlers, children: [g && _jsxs(Svg, { width: width, height: resolvedHeight, accessible: false, children: [g.ticks.map(tick => vertical
|
|
196
|
+
? _jsx(Line, { x1: g.plot.left, x2: g.plot.right, y1: g.value(tick), y2: g.value(tick), stroke: palette.grid, strokeWidth: chartRecipe.chrome.gridWidth }, tick)
|
|
197
|
+
: _jsx(Line, { y1: g.plot.top, y2: g.plot.bottom, x1: g.value(tick), x2: g.value(tick), stroke: palette.grid, strokeWidth: chartRecipe.chrome.gridWidth }, tick)), showAxis && vertical && _jsx(AxisLabels, { ticks: g.ticks, y: g.value, x: g.plot.left - 6, color: palette.label, format: formatValue }), g.bars.map(bar => _jsx(MotionBar, { bar: bar, animate: animateChanges && g.bars.length <= 200, rx: chartRecipe.bar.radius, fill: palette.seriesColor(series[bar.seriesIndex], bar.seriesIndex), opacity: focus === null || focus === bar.index ? 1 : chartRecipe.bar.restOpacity }, `${series[bar.seriesIndex].id}-${categoryKeys[bar.index]}`)), showValues && layout === "grouped" && g.bars.map(bar => _jsx(SvgText, { x: vertical ? bar.x + bar.width / 2 : bar.x + bar.width + 4, y: vertical ? bar.y - 4 : bar.y + bar.height / 2 + 4, fontSize: 10, fontWeight: "600", fill: palette.legend, textAnchor: vertical ? "middle" : "start", children: formatValue(bar.value) }, `v${bar.seriesIndex}-${bar.index}`)), categories.map((category, i) => vertical
|
|
198
|
+
? (categories.length <= 12 || i % Math.ceil(categories.length / 12) === 0) && _jsx(SvgText, { x: g.centers[i], y: resolvedHeight - 4, fontSize: 10, fill: focus === i ? palette.legend : palette.label, textAnchor: "middle", children: category }, category + i)
|
|
199
|
+
: _jsx(SvgText, { x: g.plot.left - 8, y: g.centers[i] + 4, fontSize: 11, fill: focus === i ? palette.legend : palette.label, textAnchor: "end", children: category }, category + i))] }), g && scrubbing && focus !== null && vertical && _jsx(CursorBubble, { x: g.centers[focus], width: width, text: `${categories[focus]} ${series.map(item => { const v = item.values[focus]; return isChartNumber(v) ? formatValue(v) : missingLabel; }).join(" · ")}`, surface: palette.surface, color: palette.legend })] });
|
|
200
|
+
}
|
|
201
|
+
export function ChartLegend({ items, selectedId, onSelect, exclusion }) {
|
|
202
|
+
const palette = useChartPalette();
|
|
203
|
+
return _jsx(View, { style: { gap: spacing.xxs }, children: items.map(item => {
|
|
204
|
+
const content = _jsxs(View, { style: { flexDirection: "row", alignItems: "center", gap: spacing.xs, minHeight: 32, opacity: selectedId && selectedId !== item.id ? 0.5 : 1 }, children: [_jsx(View, { style: { width: 10, height: 10, borderRadius: 3, backgroundColor: item.color } }), _jsx(Text, { variant: "body", layoutStyle: { flex: 1 }, numberOfLines: 1, children: item.label }), item.value !== undefined && _jsx(NativeText, { style: { color: palette.legend, fontSize: 13, fontWeight: "700", fontVariant: ["tabular-nums"] }, children: item.value })] });
|
|
205
|
+
const selection = onSelect ? _jsx(Pressable, { accessibilityRole: "button", accessibilityState: { selected: selectedId === item.id }, accessibilityLabel: `${item.label}${item.value ? ` ${item.value}` : ""}`, onPress: () => onSelect(selectedId === item.id ? null : item.id), children: content }, item.id)
|
|
206
|
+
: _jsx(View, { accessible: true, accessibilityLabel: `${item.label}${item.value ? ` ${item.value}` : ""}`, children: content }, item.id);
|
|
207
|
+
return exclusion ? _jsxs(View, { style: { flexDirection: "row", alignItems: "center", gap: spacing.sm }, children: [_jsx(Pressable, { style: { minHeight: 44, minWidth: 44, alignItems: "center", justifyContent: "center" }, accessibilityRole: "checkbox", accessibilityState: { checked: !exclusion.excludedIds.includes(item.id) }, accessibilityLabel: exclusion.label(item, !exclusion.excludedIds.includes(item.id)), onPress: () => exclusion.onToggle(item.id), children: _jsx(Text, { children: exclusion.excludedIds.includes(item.id) ? "□" : "✓" }) }), _jsx(View, { style: { flex: 1 }, children: selection })] }, item.id) : selection;
|
|
208
|
+
}) });
|
|
209
|
+
}
|
|
210
|
+
export function PieChart({ data, accessibilityLabel, formatValue, donut = true, size = 180, centerContent, selectedId, defaultSelectedId = null, onSelect, showLegend = true, exclusion }) {
|
|
211
|
+
const palette = useChartPalette();
|
|
212
|
+
const [own, setOwn] = useState(defaultSelectedId);
|
|
213
|
+
const candidate = selectedId !== undefined ? selectedId : own;
|
|
214
|
+
const selected = candidate !== null && exclusion?.excludedIds.includes(candidate) ? null : candidate;
|
|
215
|
+
const select = (id) => { if (selectedId === undefined)
|
|
216
|
+
setOwn(id); onSelect?.(id); };
|
|
217
|
+
const radius = size / 2 - 6, inner = donut ? radius * chartRecipe.pie.donutRatio : 0;
|
|
218
|
+
const visibility = resolvePieVisibility(data, exclusion?.excludedIds);
|
|
219
|
+
const slices = resolvePieGeometry(visibility.values, { cx: size / 2, cy: size / 2, radius, innerRadius: inner });
|
|
220
|
+
const center = typeof centerContent === "function" ? centerContent(visibility) : centerContent;
|
|
221
|
+
const legendExclusion = exclusion ? { excludedIds: exclusion.excludedIds, label: (item, included) => exclusion.label(data.find(datum => datum.id === item.id), included),
|
|
222
|
+
onToggle: (id) => exclusion.onExcludedIdsChange(exclusion.excludedIds.includes(id) ? exclusion.excludedIds.filter(key => key !== id) : [...exclusion.excludedIds, id]) } : undefined;
|
|
223
|
+
const colorOf = (index) => data[index].color ?? palette.seriesColor({}, index);
|
|
224
|
+
const percent = (index) => slices.find(slice => slice.index === index)?.percent;
|
|
225
|
+
const summary = data.map((d, i) => exclusion?.excludedIds.includes(d.id) ? "" : `${d.label} ${isChartNumber(d.value) ? formatValue(d.value) : ""}${percent(i) !== undefined ? ` (${Math.round(percent(i))}%)` : ""}`).filter(Boolean).join(", ");
|
|
226
|
+
return _jsxs(View, { style: { gap: spacing.md }, children: [_jsxs(View, { accessible: true, accessibilityRole: "image", accessibilityLabel: `${accessibilityLabel}. ${summary}`, style: { width: size, height: size, alignSelf: "center" }, children: [_jsxs(Svg, { width: size, height: size, accessible: false, children: [slices.map(slice => _jsx(Path, { d: slice.path, fill: colorOf(slice.index), opacity: selected && data[slice.index].id !== selected ? 0.35 : 1, ...(onSelect || selectedId !== undefined ? { onPress: () => select(data[slice.index].id === selected ? null : data[slice.index].id) } : {}) }, slice.index)), slices.filter(slice => !donut && slice.percent >= chartRecipe.pie.minLabelPercent * 2).map(slice => _jsx(SvgText, { x: slice.centroid.x, y: slice.centroid.y + 4, fontSize: 11, fontWeight: "700", fill: "#FFFFFF", textAnchor: "middle", children: `${Math.round(slice.percent)}%` }, `t${slice.index}`))] }), donut && center != null && _jsx(View, { pointerEvents: "none", style: { position: "absolute", inset: 0, alignItems: "center", justifyContent: "center" }, children: center })] }), showLegend && _jsx(ChartLegend, { items: data.map((d, i) => ({ id: d.id, label: d.label, color: colorOf(i), value: isChartNumber(d.value) ? `${formatValue(d.value)}${percent(i) !== undefined ? ` · ${Math.round(percent(i))}%` : ""}` : "—" })), selectedId: selected, ...(legendExclusion ? { exclusion: legendExclusion } : {}), ...(onSelect || selectedId !== undefined ? { onSelect: select } : {}) })] });
|
|
227
|
+
}
|
|
228
|
+
export function RadarChart({ categories, series, accessibilityLabel, formatValue, missingLabel, domain, levels = chartRecipe.radar.levels, size = 240, showLegend }) {
|
|
229
|
+
const palette = useChartPalette();
|
|
230
|
+
validateChartSeries(categories, series);
|
|
231
|
+
// Reserve room around the polygon for axis labels.
|
|
232
|
+
const pad = 44, radius = size / 2 - pad;
|
|
233
|
+
const g = resolveRadarGeometry({ categories, series, cx: size / 2, cy: size / 2, radius, levels, ...(domain ? { domain } : {}) });
|
|
234
|
+
return _jsxs(View, { style: { gap: spacing.sm }, children: [_jsx(View, { accessible: true, accessibilityRole: "image", accessibilityLabel: `${accessibilityLabel}. ${describeChart(categories, series, formatValue, missingLabel)}`, style: { width: size, height: size, alignSelf: "center" }, children: _jsxs(Svg, { width: size, height: size, accessible: false, children: [g.rings.map((ring, i) => _jsx(Path, { d: ring, fill: "none", stroke: palette.grid, strokeWidth: chartRecipe.chrome.gridWidth }, i)), g.axes.map(axis => _jsx(Line, { x1: size / 2, y1: size / 2, x2: axis.end.x, y2: axis.end.y, stroke: palette.grid, strokeWidth: chartRecipe.chrome.gridWidth }, axis.index)), g.polygons.map(polygon => {
|
|
235
|
+
const color = palette.seriesColor(series[polygon.seriesIndex], polygon.seriesIndex);
|
|
236
|
+
return _jsxs(G, { children: [_jsx(Path, { d: polygon.path, fill: color, fillOpacity: chartRecipe.radar.fillOpacity, stroke: color, strokeWidth: chartRecipe.radar.strokeWidth, strokeLinejoin: "round" }), polygon.points.map(p => p.value !== null && _jsx(Circle, { cx: p.x, cy: p.y, r: 3, fill: color }, p.index))] }, polygon.seriesIndex);
|
|
237
|
+
}), g.axes.map(axis => {
|
|
238
|
+
const first = series[0]?.values[axis.index];
|
|
239
|
+
return _jsxs(G, { children: [_jsx(SvgText, { x: axis.labelAt.x, y: axis.labelAt.y, fontSize: 11, fontWeight: "600", fill: palette.legend, textAnchor: axis.anchor, children: axis.label }), series.length === 1 && _jsx(SvgText, { x: axis.labelAt.x, y: axis.labelAt.y + 14, fontSize: 11, fill: palette.label, textAnchor: axis.anchor, children: isChartNumber(first) ? formatValue(first) : missingLabel })] }, `l${axis.index}`);
|
|
240
|
+
})] }) }), (showLegend ?? series.length > 1) && _jsx(ChartLegend, { items: series.map((item, s) => ({ id: item.id, label: item.label, color: palette.seriesColor(item, s) })) })] });
|
|
241
|
+
}
|
|
242
|
+
export function ScatterChart({ points, accessibilityLabel, xLabel, yLabel, formatX, formatY, height = chartRecipe.heights.tall, seriesLabels, focusId, onFocusChange }) {
|
|
243
|
+
const palette = useChartPalette();
|
|
244
|
+
const [width, onLayout] = useWidth();
|
|
245
|
+
const [own, setOwn] = useState(null);
|
|
246
|
+
const focused = focusId !== undefined ? focusId : own;
|
|
247
|
+
const choose = (id) => { if (focusId === undefined)
|
|
248
|
+
setOwn(id); onFocusChange?.(id); };
|
|
249
|
+
const g = useMemo(() => width > 0 ? resolveScatterGeometry({ points, width, height }) : null, [points, width, height]);
|
|
250
|
+
const ordered = useMemo(() => [...points].sort((a, b) => a.x - b.x || a.y - b.y), [points]);
|
|
251
|
+
const handlers = useScrub((x, y) => { const index = g ? nearestScatterPoint(g.points, x, y) : null; return index; }, index => { if (index !== null)
|
|
252
|
+
choose(points[index].id); }, () => undefined);
|
|
253
|
+
const focusPoint = g?.points.find(p => p.id === focused);
|
|
254
|
+
return _jsxs(View, { style: { gap: spacing.sm }, children: [_jsxs(View, { accessible: true, accessibilityRole: "adjustable", accessibilityLabel: accessibilityLabel, accessibilityValue: { text: focusPoint ? `${focusPoint.label}, ${xLabel} ${formatX(focusPoint.x)}, ${yLabel} ${formatY(focusPoint.y)}` : `${points.length}` }, accessibilityActions: [{ name: "increment" }, { name: "decrement" }], onAccessibilityAction: event => {
|
|
255
|
+
const at = ordered.findIndex(p => p.id === focused), next = ordered[Math.min(ordered.length - 1, Math.max(0, (at < 0 ? -1 : at) + (event.nativeEvent.actionName === "increment" ? 1 : -1)))];
|
|
256
|
+
if (next)
|
|
257
|
+
choose(next.id);
|
|
258
|
+
}, onLayout: onLayout, style: { height }, ...handlers, children: [g && _jsxs(Svg, { width: width, height: height, accessible: false, children: [g.yTicks.map(tick => { const y = g.plot.bottom - (tick - g.yDomain[0]) / ((g.yDomain[1] - g.yDomain[0]) || 1) * (g.plot.bottom - g.plot.top); return _jsxs(G, { children: [_jsx(Line, { x1: g.plot.left, x2: g.plot.right, y1: y, y2: y, stroke: palette.grid, strokeWidth: chartRecipe.chrome.gridWidth }), _jsx(SvgText, { x: g.plot.left - 6, y: y + 4, fontSize: 10, fill: palette.label, textAnchor: "end", children: formatY(tick) })] }, `y${tick}`); }), g.xTicks.map(tick => { const x = g.plot.left + (tick - g.xDomain[0]) / ((g.xDomain[1] - g.xDomain[0]) || 1) * (g.plot.right - g.plot.left); return _jsx(SvgText, { x: x, y: height - 4, fontSize: 10, fill: palette.label, textAnchor: "middle", children: formatX(tick) }, `x${tick}`); }), g.points.map(p => _jsx(Circle, { cx: p.px, cy: p.py, r: p.id === focused ? chartRecipe.scatter.focusRadius : chartRecipe.scatter.radius, fill: palette.seriesColor({}, p.seriesIndex ?? 0), opacity: focused && p.id !== focused ? 0.45 : 0.9, stroke: p.id === focused ? palette.background : "none", strokeWidth: 2 }, p.id))] }), g && focusPoint && _jsx(CursorBubble, { x: focusPoint.px, width: width, text: `${focusPoint.label} · ${formatX(focusPoint.x)} / ${formatY(focusPoint.y)}`, surface: palette.surface, color: palette.legend })] }), _jsxs(View, { style: { flexDirection: "row", justifyContent: "space-between" }, children: [_jsxs(Text, { variant: "caption", tone: "muted", children: [yLabel, " \u2191"] }), _jsxs(Text, { variant: "caption", tone: "muted", children: [xLabel, " \u2192"] })] }), seriesLabels && seriesLabels.length > 1 && _jsx(ChartLegend, { items: seriesLabels.map((label, i) => ({ id: String(i), label, color: palette.seriesColor({}, i) })) })] });
|
|
259
|
+
}
|
|
260
|
+
export function Sparkline({ values, color, invert = false, domain, width = chartRecipe.sparkline.width, height = chartRecipe.sparkline.height, accessibilityLabel }) {
|
|
261
|
+
const palette = useChartPalette(), id = useId().replace(/[^a-zA-Z0-9]/g, "");
|
|
262
|
+
const stroke = color ?? palette.seriesColor({}, 0);
|
|
263
|
+
const pad = chartRecipe.sparkline.padding;
|
|
264
|
+
const g = resolveLineGeometry({ categories: values.map((_, i) => String(i)), series: [{ id: "s", label: "s", values }], width, height, insets: { top: pad, right: pad, bottom: pad, left: pad }, invert, domain });
|
|
265
|
+
const segments = splitSegments(g.plots[0]);
|
|
266
|
+
const svg = _jsxs(Svg, { width: width, height: height, accessible: false, children: [_jsx(Defs, { children: _jsxs(LinearGradient, { id: `hjmSpark${id}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx(Stop, { offset: "0", stopColor: stroke, stopOpacity: 0.28 }), _jsx(Stop, { offset: "1", stopColor: stroke, stopOpacity: 0 })] }) }), segments.map((segment, i) => _jsx(Path, { d: areaPath(segment, height), fill: `url(#hjmSpark${id})` }, `a${i}`)), segments.map((segment, i) => _jsx(Path, { d: linePath(segment), stroke: stroke, strokeWidth: chartRecipe.sparkline.strokeWidth, fill: "none", strokeLinejoin: "round", strokeLinecap: "round" }, `l${i}`))] });
|
|
267
|
+
return accessibilityLabel
|
|
268
|
+
? _jsx(View, { accessible: true, accessibilityRole: "image", accessibilityLabel: accessibilityLabel, children: svg })
|
|
269
|
+
: _jsx(View, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", children: svg });
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=chart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../src/chart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type ColumnSetting, type FilterRecoveryOption, type FocusTarget, type SelectionAction } from "@hjmds/design-contracts/collection-editing";
|
|
3
|
+
import { type FieldGroupBinding, type FieldGroupProps } from "./field-group.js";
|
|
4
|
+
export type InlineEditProps = Readonly<{
|
|
5
|
+
id: string;
|
|
6
|
+
value: string;
|
|
7
|
+
label: string;
|
|
8
|
+
editLabel: string;
|
|
9
|
+
saveLabel: string;
|
|
10
|
+
cancelLabel: string;
|
|
11
|
+
errorLabel: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
validate?: (draft: string) => string | undefined;
|
|
14
|
+
onSave: (draft: string) => void | Promise<void>;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function InlineEdit(props: InlineEditProps): import("react").JSX.Element;
|
|
17
|
+
export type RepeatableFieldGroupProps = Omit<FieldGroupProps, "renderField"> & Readonly<{
|
|
18
|
+
renderField: (binding: FieldGroupBinding & {
|
|
19
|
+
focusRef: (target: FocusTarget | null) => void;
|
|
20
|
+
}) => ReactNode;
|
|
21
|
+
addLabel: string;
|
|
22
|
+
removeLabel: (id: string) => string;
|
|
23
|
+
minFields?: number;
|
|
24
|
+
maxFields?: number;
|
|
25
|
+
onAdd: () => string | undefined;
|
|
26
|
+
onRemove: (id: string) => void;
|
|
27
|
+
}>;
|
|
28
|
+
export declare function RepeatableFieldGroup({ renderField, addLabel, removeLabel, minFields, maxFields, onAdd, onRemove, ...props }: RepeatableFieldGroupProps): import("react").JSX.Element;
|
|
29
|
+
export type SelectionActionBarProps = Readonly<{
|
|
30
|
+
selectedIds: readonly string[];
|
|
31
|
+
selectionLabel: (count: number) => string;
|
|
32
|
+
clearLabel: string;
|
|
33
|
+
onClear: () => void;
|
|
34
|
+
actions: readonly SelectionAction[];
|
|
35
|
+
onAction: (actionId: string, selectedIds: readonly string[]) => void | Promise<void>;
|
|
36
|
+
errorLabel: string;
|
|
37
|
+
disabled?: boolean;
|
|
38
|
+
recovery?: Readonly<{
|
|
39
|
+
label: string;
|
|
40
|
+
onUndo: () => void | Promise<void>;
|
|
41
|
+
}>;
|
|
42
|
+
}>;
|
|
43
|
+
export declare function SelectionActionBar(props: SelectionActionBarProps): import("react").JSX.Element | null;
|
|
44
|
+
export type FilterRecoveryProps = Readonly<{
|
|
45
|
+
title: string;
|
|
46
|
+
description?: string;
|
|
47
|
+
options: readonly FilterRecoveryOption[];
|
|
48
|
+
optionLabel: (option: FilterRecoveryOption) => string;
|
|
49
|
+
onApply: (id: string) => void | Promise<void>;
|
|
50
|
+
errorLabel: string;
|
|
51
|
+
disabled?: boolean;
|
|
52
|
+
}>;
|
|
53
|
+
export declare function FilterRecovery(props: FilterRecoveryProps): import("react").JSX.Element;
|
|
54
|
+
export type TableColumnSettingsProps = Readonly<{
|
|
55
|
+
label: string;
|
|
56
|
+
columns: readonly ColumnSetting[];
|
|
57
|
+
disabled?: boolean;
|
|
58
|
+
earlierLabel: (column: ColumnSetting) => string;
|
|
59
|
+
laterLabel: (column: ColumnSetting) => string;
|
|
60
|
+
onColumnsChange: (columns: readonly ColumnSetting[]) => void;
|
|
61
|
+
}>;
|
|
62
|
+
export declare function TableColumnSettings(props: TableColumnSettingsProps): import("react").JSX.Element;
|
|
63
|
+
//# sourceMappingURL=collection-editing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-editing.d.ts","sourceRoot":"","sources":["../src/collection-editing.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
3
|
+
import { AccessibilityInfo, Platform, View } from "react-native";
|
|
4
|
+
import { useCompositionAction } from "./internal/use-composition-action.js";
|
|
5
|
+
import { assertDistinctIds, changeColumnSettings, collectionEditingRecipe, focusAfterRemoval, recoverableFilters, snapshotSelection } from "@hjmds/design-contracts/collection-editing";
|
|
6
|
+
import { Button } from "./actions.js";
|
|
7
|
+
import { TextField, Checkbox } from "./inputs.js";
|
|
8
|
+
import { Stack, Text } from "./primitives.js";
|
|
9
|
+
import { FieldGroup } from "./field-group.js";
|
|
10
|
+
function ErrorMessage({ children }) {
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
// Native live regions announce updates on Android; iOS needs an explicit announcement.
|
|
13
|
+
if (Platform.OS === "ios")
|
|
14
|
+
AccessibilityInfo.announceForAccessibility(children);
|
|
15
|
+
}, [children]);
|
|
16
|
+
return _jsx(View, { style: { alignItems: "center", justifyContent: "center" }, children: _jsx(Text, { tone: "danger", align: "center", accessibilityRole: "alert", accessibilityLiveRegion: "assertive", children: children }) });
|
|
17
|
+
}
|
|
18
|
+
export function InlineEdit(props) { return _jsx(InlineEditBody, { ...props }, props.id); }
|
|
19
|
+
function InlineEditBody(props) {
|
|
20
|
+
const [editing, setEditing] = useState(false), [draft, setDraft] = useState(props.value);
|
|
21
|
+
const action = useCompositionAction(props.disabled);
|
|
22
|
+
const input = useRef(null), trigger = useRef(null), restore = useRef(false);
|
|
23
|
+
useLayoutEffect(() => {
|
|
24
|
+
if (editing)
|
|
25
|
+
input.current?.focus();
|
|
26
|
+
else if (restore.current) {
|
|
27
|
+
restore.current = false;
|
|
28
|
+
trigger.current?.focus();
|
|
29
|
+
}
|
|
30
|
+
}, [editing]);
|
|
31
|
+
const error = props.validate?.(draft);
|
|
32
|
+
const close = (restoreFocus = true) => { restore.current = restoreFocus; setEditing(false); };
|
|
33
|
+
const save = async () => {
|
|
34
|
+
if (props.disabled || error || action.pending || action.session.getSnapshot().status === "pending")
|
|
35
|
+
return;
|
|
36
|
+
const result = await action.run("save", () => props.onSave(draft));
|
|
37
|
+
// An async response must not steal focus after the user moved to another input.
|
|
38
|
+
if (result.status === "success")
|
|
39
|
+
close(input.current?.isFocused() ?? false);
|
|
40
|
+
};
|
|
41
|
+
return _jsx(View, { accessible: false, children: !editing ? _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", wrap: true, children: [_jsx(Text, { children: props.value }), _jsx(Button, { ref: trigger, disabled: props.disabled ?? false, tone: "ghost", onPress: () => { setDraft(props.value); action.session.reset(null); setEditing(true); }, children: props.editLabel })] })
|
|
42
|
+
: _jsxs(Stack, { gap: collectionEditingRecipe.actionGap, children: [_jsx(TextField, { ref: input, label: props.label, value: draft, disabled: props.disabled === true || action.pending, ...(error ? { error, invalid: true } : {}), onValueChange: setDraft, onSubmitEditing: () => void save() }), _jsxs(Stack, { axis: "inline", gap: "sm", wrap: true, children: [_jsx(Button, { tone: "ghost", disabled: action.pending, onPress: () => close(), children: props.cancelLabel }), _jsx(Button, { loading: action.pending, disabled: props.disabled === true || !!error, onPress: () => void save(), children: props.saveLabel })] }), action.failed ? _jsx(ErrorMessage, { children: props.errorLabel }) : null] }) });
|
|
43
|
+
}
|
|
44
|
+
export function RepeatableFieldGroup({ renderField, addLabel, removeLabel, minFields = 0, maxFields = Infinity, onAdd, onRemove, ...props }) {
|
|
45
|
+
const targets = useRef(new Map()), add = useRef(null);
|
|
46
|
+
const focus = useRef(undefined);
|
|
47
|
+
useLayoutEffect(() => {
|
|
48
|
+
if (focus.current === undefined)
|
|
49
|
+
return;
|
|
50
|
+
if (focus.current === null) {
|
|
51
|
+
add.current?.focus();
|
|
52
|
+
focus.current = undefined;
|
|
53
|
+
}
|
|
54
|
+
else if (targets.current.has(focus.current)) {
|
|
55
|
+
targets.current.get(focus.current)?.focus();
|
|
56
|
+
focus.current = undefined;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
const fields = props.descriptor.fields;
|
|
60
|
+
const live = useRef(true), policy = useRef({ fields, minFields, maxFields, onAdd, onRemove, disabled: props.descriptor.disabled });
|
|
61
|
+
policy.current = { fields, minFields, maxFields, onAdd, onRemove, disabled: props.descriptor.disabled };
|
|
62
|
+
useEffect(() => { live.current = true; return () => { live.current = false; }; }, []);
|
|
63
|
+
return _jsxs(Stack, { gap: collectionEditingRecipe.gap, children: [_jsx(FieldGroup, { ...props, renderField: binding => _jsxs(Stack, { gap: "sm", children: [renderField({ ...binding, focusRef: target => { if (target)
|
|
64
|
+
targets.current.set(binding.id, target);
|
|
65
|
+
else
|
|
66
|
+
targets.current.delete(binding.id); } }), _jsx(Button, { tone: "ghost", disabled: binding.controlProps.disabled || fields.length <= minFields, onPress: binding.guardChange(() => {
|
|
67
|
+
const current = policy.current;
|
|
68
|
+
if (!live.current || current.disabled || current.fields.length <= current.minFields)
|
|
69
|
+
return;
|
|
70
|
+
focus.current = focusAfterRemoval(current.fields.map(field => field.id), binding.id, current.fields.filter(field => field.disabled).map(field => field.id)) ?? null;
|
|
71
|
+
current.onRemove(binding.id);
|
|
72
|
+
}), children: removeLabel(binding.id) })] }) }), _jsx(Button, { ref: add, tone: "secondary", disabled: props.descriptor.disabled === true || fields.length >= maxFields, onPress: () => {
|
|
73
|
+
const current = policy.current;
|
|
74
|
+
if (!live.current || current.disabled || current.fields.length >= current.maxFields)
|
|
75
|
+
return;
|
|
76
|
+
const id = current.onAdd();
|
|
77
|
+
if (id !== undefined)
|
|
78
|
+
focus.current = id;
|
|
79
|
+
}, children: addLabel })] });
|
|
80
|
+
}
|
|
81
|
+
export function SelectionActionBar(props) {
|
|
82
|
+
const action = useCompositionAction(props.disabled);
|
|
83
|
+
assertDistinctIds(props.actions);
|
|
84
|
+
snapshotSelection(props.selectedIds);
|
|
85
|
+
if (!props.selectedIds.length && !props.recovery && !action.pending && !action.failed)
|
|
86
|
+
return null;
|
|
87
|
+
return _jsx(View, { accessible: false, children: _jsxs(Stack, { gap: "sm", children: [_jsx(Text, { accessibilityLiveRegion: "polite", children: props.selectionLabel(props.selectedIds.length) }), _jsxs(Stack, { axis: "inline", gap: "sm", wrap: true, children: [props.actions.map(item => _jsx(Button, { tone: item.destructive ? "danger" : "secondary", loading: action.active === `action:${item.id}`, disabled: props.disabled === true || (action.pending && action.active !== `action:${item.id}`) || !props.selectedIds.length, onPress: () => {
|
|
88
|
+
if (props.disabled)
|
|
89
|
+
return;
|
|
90
|
+
const scope = snapshotSelection(props.selectedIds);
|
|
91
|
+
if (scope.length)
|
|
92
|
+
void action.run(`action:${item.id}`, () => props.onAction(item.id, scope));
|
|
93
|
+
}, children: item.label }, item.id)), _jsx(Button, { tone: "ghost", disabled: props.disabled === true || action.pending || !props.selectedIds.length, onPress: props.onClear, children: props.clearLabel }), props.recovery ? _jsx(Button, { tone: "ghost", loading: action.active === "undo", disabled: props.disabled === true || (action.pending && action.active !== "undo"), onPress: () => {
|
|
94
|
+
if (!props.disabled)
|
|
95
|
+
void action.run("undo", () => props.recovery.onUndo());
|
|
96
|
+
}, children: props.recovery.label }) : null] }), action.failed ? _jsx(ErrorMessage, { children: props.errorLabel }) : null] }) });
|
|
97
|
+
}
|
|
98
|
+
export function FilterRecovery(props) {
|
|
99
|
+
const action = useCompositionAction(props.disabled), options = recoverableFilters(props.options);
|
|
100
|
+
return _jsx(View, { style: { alignItems: "center", justifyContent: "center" }, children: _jsxs(Stack, { gap: "sm", align: "center", children: [_jsx(Text, { emphasis: "strong", align: "center", children: props.title }), props.description ? _jsx(Text, { tone: "muted", align: "center", children: props.description }) : null, options.map(option => _jsx(Button, { tone: "secondary", loading: action.active === option.id, disabled: props.disabled === true || (action.pending && action.active !== option.id), onPress: () => { if (!props.disabled)
|
|
101
|
+
void action.run(option.id, () => props.onApply(option.id)); }, children: props.optionLabel(option) }, option.id)), action.failed ? _jsx(ErrorMessage, { children: props.errorLabel }) : null] }) });
|
|
102
|
+
}
|
|
103
|
+
export function TableColumnSettings(props) {
|
|
104
|
+
assertDistinctIds(props.columns);
|
|
105
|
+
const change = (id, kind) => {
|
|
106
|
+
if (props.disabled)
|
|
107
|
+
return;
|
|
108
|
+
const next = changeColumnSettings(props.columns, id, kind);
|
|
109
|
+
if (next !== props.columns)
|
|
110
|
+
props.onColumnsChange(next);
|
|
111
|
+
};
|
|
112
|
+
return _jsxs(Stack, { gap: "sm", children: [_jsx(Text, { emphasis: "strong", children: props.label }), props.columns.map(column => _jsxs(Stack, { gap: "sm", children: [_jsx(Checkbox, { label: column.label, checked: column.visible, disabled: props.disabled === true || column.locked === true || (column.visible && props.columns.filter(item => item.visible).length === 1), onCheckedChange: () => change(column.id, "toggle") }), _jsxs(Stack, { axis: "inline", gap: "sm", wrap: true, children: [_jsx(Button, { tone: "ghost", disabled: props.disabled === true || changeColumnSettings(props.columns, column.id, "earlier") === props.columns, onPress: () => change(column.id, "earlier"), children: props.earlierLabel(column) }), _jsx(Button, { tone: "ghost", disabled: props.disabled === true || changeColumnSettings(props.columns, column.id, "later") === props.columns, onPress: () => change(column.id, "later"), children: props.laterLabel(column) })] })] }, column.id))] });
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=collection-editing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-editing.js","sourceRoot":"","sources":["../src/collection-editing.tsx"],"names":[],"mappings":"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"}
|