@terraware/web-components 5.0.12 → 5.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ import { type JSX } from 'react';
2
+ import './styles.scss';
3
+ type ClusterBadgeProps = {
4
+ count: number;
5
+ leftPx: number;
6
+ onClose: () => void;
7
+ };
8
+ declare const ClusterBadge: ({ count, leftPx, onClose }: ClusterBadgeProps) => JSX.Element;
9
+ export default ClusterBadge;
10
+ //# sourceMappingURL=ClusterBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClusterBadge.d.ts","sourceRoot":"","sources":["../../../src/components/TimelineSliderV2/ClusterBadge.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAGxC,OAAO,eAAe,CAAC;AAEvB,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,4BAA4B,iBAAiB,KAAG,GAAG,CAAC,OASzE,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,29 @@
1
+ import 'react';
2
+ import Icon from '../Icon/Icon.js';
3
+ import './styles.scss';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ const ClusterBadge = ({
7
+ count,
8
+ leftPx,
9
+ onClose
10
+ }) => {
11
+ return /*#__PURE__*/jsxs("div", {
12
+ className: "timeline-v2-cluster-badge",
13
+ style: {
14
+ left: `${leftPx}px`
15
+ },
16
+ children: [count, /*#__PURE__*/jsx("button", {
17
+ "aria-label": "Close cluster",
18
+ className: "timeline-v2-cluster-badge__close",
19
+ onClick: onClose,
20
+ type: "button",
21
+ children: /*#__PURE__*/jsx(Icon, {
22
+ name: "close",
23
+ size: "small"
24
+ })
25
+ })]
26
+ });
27
+ };
28
+
29
+ export { ClusterBadge as default };
@@ -0,0 +1,16 @@
1
+ import { type JSX } from 'react';
2
+ import './styles.scss';
3
+ import type { ColorWeight } from './types';
4
+ type TimelineDotProps = {
5
+ ariaLabel?: string;
6
+ colorWeights: ColorWeight[];
7
+ dimmed: boolean;
8
+ leftPx: number;
9
+ markCount: number;
10
+ onClick: () => void;
11
+ selected: boolean;
12
+ sizePx: number;
13
+ };
14
+ declare const TimelineDot: ({ ariaLabel, colorWeights, dimmed, leftPx, markCount, onClick, selected, sizePx, }: TimelineDotProps) => JSX.Element;
15
+ export default TimelineDot;
16
+ //# sourceMappingURL=TimelineDot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineDot.d.ts","sourceRoot":"","sources":["../../../src/components/TimelineSliderV2/TimelineDot.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,GAAG,EAAW,MAAM,OAAO,CAAC;AAGjD,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,KAAK,gBAAgB,GAAG;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,oFASlB,gBAAgB,KAAG,GAAG,CAAC,OAsBzB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { useMemo } from 'react';
2
+ import { toConicGradient } from './layout.js';
3
+ import './styles.scss';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ const TimelineDot = ({
7
+ ariaLabel,
8
+ colorWeights,
9
+ dimmed,
10
+ leftPx,
11
+ markCount,
12
+ onClick,
13
+ selected,
14
+ sizePx
15
+ }) => {
16
+ const background = useMemo(() => toConicGradient(colorWeights), [colorWeights]);
17
+ const className = ['timeline-v2-dot', dimmed ? 'timeline-v2-dot--dimmed' : '', selected ? 'timeline-v2-dot--selected' : ''].filter(entry => entry !== '').join(' ');
18
+ return /*#__PURE__*/jsx("button", {
19
+ "aria-label": ariaLabel,
20
+ className: className,
21
+ style: {
22
+ background,
23
+ height: `${sizePx}px`,
24
+ left: `${leftPx}px`,
25
+ width: `${sizePx}px`
26
+ },
27
+ onClick: onClick,
28
+ type: "button",
29
+ children: markCount > 1 && /*#__PURE__*/jsx("span", {
30
+ className: "timeline-v2-dot__count",
31
+ children: markCount
32
+ })
33
+ });
34
+ };
35
+
36
+ export { TimelineDot as default };
@@ -0,0 +1,5 @@
1
+ import { type JSX } from 'react';
2
+ import './styles.scss';
3
+ declare const TimelineRail: () => JSX.Element;
4
+ export default TimelineRail;
5
+ //# sourceMappingURL=TimelineRail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineRail.d.ts","sourceRoot":"","sources":["../../../src/components/TimelineSliderV2/TimelineRail.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,eAAe,CAAC;AAEvB,QAAA,MAAM,YAAY,QAAO,GAAG,CAAC,OAE5B,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,11 @@
1
+ import 'react';
2
+ import './styles.scss';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ const TimelineRail = () => {
6
+ return /*#__PURE__*/jsx("div", {
7
+ className: "timeline-v2-rail"
8
+ });
9
+ };
10
+
11
+ export { TimelineRail as default };
@@ -0,0 +1,15 @@
1
+ import { type JSX } from 'react';
2
+ import './styles.scss';
3
+ import type { TimelineSliderV2Mark } from './types';
4
+ export type { TimelineSliderV2Mark };
5
+ export type TimelineSliderV2Props = {
6
+ clusterThresholdPx?: number;
7
+ labelEnd?: string;
8
+ labelStart?: string;
9
+ marks: TimelineSliderV2Mark[];
10
+ onSelect?: (markId: string) => void;
11
+ selectedMarkId?: string;
12
+ };
13
+ declare const TimelineSliderV2: ({ clusterThresholdPx, labelEnd, labelStart, marks, onSelect, selectedMarkId, }: TimelineSliderV2Props) => JSX.Element;
14
+ export default TimelineSliderV2;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/TimelineSliderV2/index.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,GAAG,EAAqD,MAAM,OAAO,CAAC;AAQ3F,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAgB,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAElE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,MAAM,MAAM,qBAAqB,GAAG;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,gFAOvB,qBAAqB,KAAG,GAAG,CAAC,OAwG9B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { useRef, useState, useEffect, useMemo, useCallback } from 'react';
2
+ import { useTheme } from '@mui/material';
3
+ import ClusterBadge from './ClusterBadge.js';
4
+ import TimelineDot from './TimelineDot.js';
5
+ import TimelineRail from './TimelineRail.js';
6
+ import { buildLayout, DEFAULT_CLUSTER_THRESHOLD_PX } from './layout.js';
7
+ import './styles.scss';
8
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
9
+
10
+ const TimelineSliderV2 = ({
11
+ clusterThresholdPx = DEFAULT_CLUSTER_THRESHOLD_PX,
12
+ labelEnd,
13
+ labelStart,
14
+ marks,
15
+ onSelect,
16
+ selectedMarkId
17
+ }) => {
18
+ const theme = useTheme();
19
+ const containerRef = useRef(null);
20
+ const [containerWidth, setContainerWidth] = useState(0);
21
+ const [expandedClusterId, setExpandedClusterId] = useState();
22
+ useEffect(() => {
23
+ const node = containerRef.current;
24
+ if (node === null) {
25
+ return;
26
+ }
27
+ const measure = () => setContainerWidth(node.clientWidth);
28
+ measure();
29
+ const observer = new ResizeObserver(measure);
30
+ observer.observe(node);
31
+ return () => observer.disconnect();
32
+ }, []);
33
+ const layout = useMemo(() => buildLayout({
34
+ containerWidth,
35
+ expandedClusterId,
36
+ marks,
37
+ thresholdPx: clusterThresholdPx
38
+ }), [clusterThresholdPx, containerWidth, expandedClusterId, marks]);
39
+ useEffect(() => {
40
+ if (containerWidth > 0 && expandedClusterId !== undefined && layout.band === undefined) {
41
+ setExpandedClusterId(undefined);
42
+ }
43
+ }, [containerWidth, expandedClusterId, layout.band]);
44
+ const selectedLabel = useMemo(() => marks.find(mark => mark.id === selectedMarkId)?.label, [marks, selectedMarkId]);
45
+ const markNames = useMemo(() => new Map(marks.map(mark => [mark.id, mark.ariaLabel ?? mark.label])), [marks]);
46
+ const nodeAriaLabel = useCallback(node => {
47
+ const names = node.markIds.map(markId => markNames.get(markId)).filter(name => name !== undefined);
48
+ return names.length > 0 ? names.join(', ') : undefined;
49
+ }, [markNames]);
50
+ const handleNodeClick = useCallback(node => {
51
+ if (node.markIds.length > 1) {
52
+ setExpandedClusterId(node.id);
53
+ } else {
54
+ onSelect?.(node.markIds[0]);
55
+ }
56
+ }, [onSelect]);
57
+ const handleCollapse = useCallback(() => setExpandedClusterId(undefined), []);
58
+ return /*#__PURE__*/jsxs("div", {
59
+ className: "timeline-v2",
60
+ children: [/*#__PURE__*/jsx("div", {
61
+ className: "timeline-v2-label",
62
+ style: {
63
+ marginRight: theme.spacing(2)
64
+ },
65
+ children: labelStart
66
+ }), /*#__PURE__*/jsxs("div", {
67
+ className: "timeline-v2-container",
68
+ ref: containerRef,
69
+ children: [/*#__PURE__*/jsx(TimelineRail, {}), layout.band && /*#__PURE__*/jsxs(Fragment, {
70
+ children: [/*#__PURE__*/jsx("div", {
71
+ className: "timeline-v2-band",
72
+ style: {
73
+ left: `${layout.band.leftPx}px`,
74
+ width: `${layout.band.widthPx}px`
75
+ }
76
+ }), /*#__PURE__*/jsx(ClusterBadge, {
77
+ count: layout.band.memberCount,
78
+ leftPx: layout.band.leftPx + layout.band.widthPx / 2,
79
+ onClose: handleCollapse
80
+ })]
81
+ }), layout.nodes.map(node => /*#__PURE__*/jsx(TimelineDot, {
82
+ ariaLabel: nodeAriaLabel(node),
83
+ colorWeights: node.colorWeights,
84
+ dimmed: node.dimmed,
85
+ leftPx: node.leftPx,
86
+ markCount: node.markIds.length,
87
+ onClick: () => handleNodeClick(node),
88
+ selected: selectedMarkId !== undefined && node.markIds.includes(selectedMarkId),
89
+ sizePx: node.sizePx
90
+ }, node.id))]
91
+ }), /*#__PURE__*/jsx("div", {
92
+ className: "timeline-v2-label",
93
+ style: {
94
+ marginLeft: theme.spacing(2)
95
+ },
96
+ children: labelEnd
97
+ }), selectedLabel && /*#__PURE__*/jsx("div", {
98
+ className: "timeline-v2-selected-label",
99
+ children: selectedLabel
100
+ })]
101
+ });
102
+ };
103
+
104
+ export { TimelineSliderV2 as default };
@@ -0,0 +1,16 @@
1
+ import type { BuildLayoutParams, ColorWeight, LayoutMark, PositionedMark, TimelineCluster, TimelineLayout } from './types';
2
+ export declare const DOT_SIZE_PX = 12;
3
+ export declare const CLUSTER_DOT_SIZE_PX = 18;
4
+ export declare const EXPANDED_SPACING_PX = 20;
5
+ export declare const MIN_SQUEEZE_PITCH_PX = 12;
6
+ export declare const BAND_PADDING_PX = 8;
7
+ export declare const SQUEEZE_GAP_PX = 12;
8
+ export declare const MAX_BAND_RATIO = 0.8;
9
+ export declare const DEFAULT_CLUSTER_THRESHOLD_PX = 16;
10
+ export declare const DIMMED_OPACITY = 0.35;
11
+ export declare const normalizePositions: (marks: LayoutMark[], containerWidth: number) => PositionedMark[];
12
+ export declare const toColorWeights: (colors: string[]) => ColorWeight[];
13
+ export declare const buildClusters: (marks: LayoutMark[], containerWidth: number, thresholdPx: number) => TimelineCluster[];
14
+ export declare const toConicGradient: (colorWeights: ColorWeight[]) => string;
15
+ export declare const buildLayout: ({ containerWidth, expandedClusterId, marks, thresholdPx, }: BuildLayoutParams) => TimelineLayout;
16
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/components/TimelineSliderV2/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,cAAc,EACd,eAAe,EACf,cAAc,EAEf,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,oBAAoB,KAAc,CAAC;AAChD,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAC/C,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,eAAO,MAAM,kBAAkB,GAAI,OAAO,UAAU,EAAE,EAAE,gBAAgB,MAAM,KAAG,cAAc,EAkB9F,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,KAAG,WAAW,EAQ5D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,UAAU,EAAE,EAAE,gBAAgB,MAAM,EAAE,aAAa,MAAM,KAAG,eAAe,EAkC/G,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,cAAc,WAAW,EAAE,KAAG,MAiB7D,CAAC;AAkCF,eAAO,MAAM,WAAW,GAAI,4DAKzB,iBAAiB,KAAG,cAyDtB,CAAC"}
@@ -0,0 +1,168 @@
1
+ const DOT_SIZE_PX = 12;
2
+ const CLUSTER_DOT_SIZE_PX = 18;
3
+ const EXPANDED_SPACING_PX = 20;
4
+ const MIN_SQUEEZE_PITCH_PX = DOT_SIZE_PX;
5
+ const BAND_PADDING_PX = 8;
6
+ const SQUEEZE_GAP_PX = 12;
7
+ const MAX_BAND_RATIO = 0.8;
8
+ const DEFAULT_CLUSTER_THRESHOLD_PX = 16;
9
+ const DIMMED_OPACITY = 0.35;
10
+ const normalizePositions = (marks, containerWidth) => {
11
+ if (marks.length === 0) {
12
+ return [];
13
+ }
14
+ const values = marks.map(mark => mark.value);
15
+ const minValue = Math.min(...values);
16
+ const maxValue = Math.max(...values);
17
+ const range = maxValue - minValue;
18
+
19
+ // Mirrors TimelineSlider's behavior: when every mark shares one value, they all land at the right edge.
20
+ return marks.map(mark => ({
21
+ color: mark.color,
22
+ id: mark.id,
23
+ positionPx: (range === 0 ? 1 : (mark.value - minValue) / range) * containerWidth
24
+ })).sort((a, b) => a.positionPx - b.positionPx);
25
+ };
26
+ const toColorWeights = colors => {
27
+ const weights = new Map();
28
+ colors.forEach(color => {
29
+ weights.set(color, (weights.get(color) ?? 0) + 1);
30
+ });
31
+ return [...weights.entries()].map(([color, weight]) => ({
32
+ color,
33
+ weight
34
+ }));
35
+ };
36
+ const buildClusters = (marks, containerWidth, thresholdPx) => {
37
+ const positioned = normalizePositions(marks, containerWidth);
38
+ const clusters = [];
39
+ let current = [];
40
+ const flush = () => {
41
+ if (current.length === 0) {
42
+ return;
43
+ }
44
+ const total = current.reduce((sum, member) => sum + member.positionPx, 0);
45
+ clusters.push({
46
+ anchorPx: total / current.length,
47
+ id: `cluster-${current[0].id}`,
48
+ members: current
49
+ });
50
+ current = [];
51
+ };
52
+ positioned.forEach(mark => {
53
+ const previous = current[current.length - 1];
54
+ if (previous !== undefined && mark.positionPx - previous.positionPx >= thresholdPx) {
55
+ flush();
56
+ }
57
+ current.push(mark);
58
+ });
59
+ flush();
60
+ return clusters;
61
+ };
62
+ const toConicGradient = colorWeights => {
63
+ if (colorWeights.length <= 1) {
64
+ return colorWeights[0]?.color ?? 'transparent';
65
+ }
66
+ const total = colorWeights.reduce((sum, {
67
+ weight
68
+ }) => sum + weight, 0);
69
+ let consumed = 0;
70
+ const stops = colorWeights.map(({
71
+ color,
72
+ weight
73
+ }) => {
74
+ const startDeg = consumed / total * 360;
75
+ consumed += weight;
76
+ const endDeg = consumed / total * 360;
77
+ return `${color} ${startDeg}deg ${endDeg}deg`;
78
+ });
79
+ return `conic-gradient(${stops.join(', ')})`;
80
+ };
81
+ const toCollapsedNode = (cluster, dimmed) => ({
82
+ colorWeights: toColorWeights(cluster.members.map(member => member.color)),
83
+ dimmed,
84
+ id: cluster.id,
85
+ leftPx: cluster.anchorPx,
86
+ markIds: cluster.members.map(member => member.id),
87
+ sizePx: cluster.members.length > 1 ? CLUSTER_DOT_SIZE_PX : DOT_SIZE_PX
88
+ });
89
+ const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
90
+ const expandedSpacing = (memberCount, containerWidth, maxBandWidth) => {
91
+ if (memberCount <= 1) {
92
+ return EXPANDED_SPACING_PX;
93
+ }
94
+ const cap = Math.min(containerWidth * MAX_BAND_RATIO, maxBandWidth);
95
+ const fitted = (cap - DOT_SIZE_PX - 2 * BAND_PADDING_PX) / (memberCount - 1);
96
+ return Math.max(0, Math.min(EXPANDED_SPACING_PX, fitted));
97
+ };
98
+ const rescale = (value, fromStart, fromEnd, toStart, toEnd) => {
99
+ const fromSpan = fromEnd - fromStart;
100
+ if (fromSpan <= 0) {
101
+ return toStart;
102
+ }
103
+ return toStart + (value - fromStart) / fromSpan * (toEnd - toStart);
104
+ };
105
+ const buildLayout = ({
106
+ containerWidth,
107
+ expandedClusterId,
108
+ marks,
109
+ thresholdPx = DEFAULT_CLUSTER_THRESHOLD_PX
110
+ }) => {
111
+ if (containerWidth <= 0 || marks.length === 0) {
112
+ return {
113
+ nodes: []
114
+ };
115
+ }
116
+ const clusters = buildClusters(marks, containerWidth, thresholdPx);
117
+ const expanded = clusters.find(cluster => cluster.id === expandedClusterId && cluster.members.length > 1);
118
+ if (expanded === undefined) {
119
+ return {
120
+ nodes: clusters.map(cluster => toCollapsedNode(cluster, false))
121
+ };
122
+ }
123
+ const sideClusters = clusters.filter(cluster => cluster.id !== expanded.id);
124
+ const leftCount = sideClusters.filter(cluster => cluster.anchorPx < expanded.anchorPx).length;
125
+ const rightCount = sideClusters.length - leftCount;
126
+ const reserve = count => count === 0 ? 0 : SQUEEZE_GAP_PX + (count - 1) * MIN_SQUEEZE_PITCH_PX;
127
+ const leftReserve = reserve(leftCount);
128
+ const rightReserve = reserve(rightCount);
129
+ const minBandWidth = DOT_SIZE_PX + 2 * BAND_PADDING_PX;
130
+ const maxBandWidth = Math.max(minBandWidth, containerWidth - leftReserve - rightReserve);
131
+ const spacing = expandedSpacing(expanded.members.length, containerWidth, maxBandWidth);
132
+ const widthPx = Math.min(maxBandWidth, (expanded.members.length - 1) * spacing + minBandWidth);
133
+ const leftPx = clamp(expanded.anchorPx - widthPx / 2, leftReserve, Math.max(leftReserve, containerWidth - widthPx - rightReserve));
134
+ const band = {
135
+ leftPx,
136
+ memberCount: expanded.members.length,
137
+ widthPx
138
+ };
139
+ const leftLimit = Math.max(0, leftPx - SQUEEZE_GAP_PX);
140
+ const rightLimit = Math.min(containerWidth, leftPx + widthPx + SQUEEZE_GAP_PX);
141
+ const nodes = clusters.flatMap(cluster => {
142
+ if (cluster.id === expanded.id) {
143
+ return cluster.members.map((member, index) => ({
144
+ colorWeights: [{
145
+ color: member.color,
146
+ weight: 1
147
+ }],
148
+ dimmed: false,
149
+ id: member.id,
150
+ leftPx: leftPx + BAND_PADDING_PX + DOT_SIZE_PX / 2 + index * spacing,
151
+ markIds: [member.id],
152
+ sizePx: DOT_SIZE_PX
153
+ }));
154
+ }
155
+ const collapsed = toCollapsedNode(cluster, true);
156
+ const squeezed = cluster.anchorPx < expanded.anchorPx ? rescale(cluster.anchorPx, 0, expanded.anchorPx, 0, leftLimit) : rescale(cluster.anchorPx, expanded.anchorPx, containerWidth, rightLimit, containerWidth);
157
+ return [{
158
+ ...collapsed,
159
+ leftPx: squeezed
160
+ }];
161
+ });
162
+ return {
163
+ band,
164
+ nodes
165
+ };
166
+ };
167
+
168
+ export { BAND_PADDING_PX, CLUSTER_DOT_SIZE_PX, DEFAULT_CLUSTER_THRESHOLD_PX, DIMMED_OPACITY, DOT_SIZE_PX, EXPANDED_SPACING_PX, MAX_BAND_RATIO, MIN_SQUEEZE_PITCH_PX, SQUEEZE_GAP_PX, buildClusters, buildLayout, normalizePositions, toColorWeights, toConicGradient };
@@ -0,0 +1,134 @@
1
+ @use '../../style-dictionary-dist/terraware.scss';
2
+
3
+ .timeline-v2 {
4
+ align-items: center;
5
+ display: flex;
6
+ flex-direction: row;
7
+ justify-content: end;
8
+ width: 100%;
9
+ }
10
+
11
+ .timeline-v2-label {
12
+ font-family: terraware.$tw-fnt-frm-fld-label-font-family;
13
+ font-size: terraware.$tw-fnt-frm-fld-label-font-size;
14
+ font-weight: terraware.$tw-fnt-frm-fld-label-font-weight;
15
+ line-height: terraware.$tw-fnt-frm-fld-label-line-height;
16
+ color: terraware.$tw-clr-txt-secondary;
17
+ }
18
+
19
+ .timeline-v2-selected-label {
20
+ border-radius: 8px;
21
+ background: terraware.$tw-clr-bg-secondary;
22
+ width: 140px;
23
+ padding: 10px;
24
+ text-align: center;
25
+ margin-left: 12px;
26
+ font-family: terraware.$tw-fnt-btn-label-small-font-family;
27
+ font-size: terraware.$tw-fnt-btn-label-small-font-size;
28
+ font-weight: terraware.$tw-fnt-mssg-title-font-weight;
29
+ line-height: terraware.$tw-fnt-btn-label-small-line-height;
30
+ color: terraware.$tw-clr-base-black;
31
+ }
32
+
33
+ .timeline-v2-container {
34
+ width: 100%;
35
+ max-width: 500px;
36
+ margin: 0;
37
+ position: relative;
38
+ height: 40px;
39
+ }
40
+
41
+ .timeline-v2-rail {
42
+ position: absolute;
43
+ top: 50%;
44
+ left: 0;
45
+ right: 0;
46
+ height: 5px;
47
+ background-color: terraware.$tw-clr-base-gray-200;
48
+ transform: translateY(-50%);
49
+ z-index: 0;
50
+ }
51
+
52
+ .timeline-v2-band {
53
+ position: absolute;
54
+ top: 50%;
55
+ height: 24px;
56
+ border-radius: 12px;
57
+ background-color: terraware.$tw-clr-base-gray-200;
58
+ transform: translateY(-50%);
59
+ transition:
60
+ left 200ms ease,
61
+ width 200ms ease;
62
+ z-index: 1;
63
+ }
64
+
65
+ .timeline-v2-dot {
66
+ position: absolute;
67
+ top: 50%;
68
+ border-radius: 50%;
69
+ cursor: pointer;
70
+ padding: 0;
71
+ border: none;
72
+ appearance: none;
73
+ background: none;
74
+ transform: translate(-50%, -50%);
75
+ transition:
76
+ left 200ms ease,
77
+ width 200ms ease,
78
+ height 200ms ease,
79
+ opacity 200ms ease;
80
+ z-index: 2;
81
+
82
+ &--dimmed {
83
+ opacity: 0.35;
84
+ }
85
+
86
+ &--selected::after {
87
+ content: '';
88
+ position: absolute;
89
+ inset: -4px;
90
+ border: 2px solid terraware.$tw-clr-base-black;
91
+ border-radius: 50%;
92
+ }
93
+
94
+ &__count {
95
+ position: absolute;
96
+ bottom: 100%;
97
+ left: 50%;
98
+ transform: translateX(-50%);
99
+ white-space: nowrap;
100
+ font-family: terraware.$tw-fnt-frm-fld-label-font-family;
101
+ font-size: terraware.$tw-fnt-frm-fld-label-font-size;
102
+ font-weight: terraware.$tw-fnt-frm-fld-label-font-weight;
103
+ line-height: terraware.$tw-fnt-frm-fld-label-line-height;
104
+ color: terraware.$tw-clr-txt-secondary;
105
+ }
106
+ }
107
+
108
+ .timeline-v2-cluster-badge {
109
+ position: absolute;
110
+ bottom: calc(50% + 20px);
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 4px;
114
+ padding: 2px 4px 2px 8px;
115
+ border-radius: 4px;
116
+ background: terraware.$tw-clr-bg-secondary;
117
+ transform: translateX(-50%);
118
+ font-family: terraware.$tw-fnt-frm-fld-label-font-family;
119
+ font-size: terraware.$tw-fnt-frm-fld-label-font-size;
120
+ font-weight: terraware.$tw-fnt-mssg-title-font-weight;
121
+ line-height: terraware.$tw-fnt-frm-fld-label-line-height;
122
+ color: terraware.$tw-clr-base-black;
123
+ z-index: 3;
124
+
125
+ &__close {
126
+ display: flex;
127
+ align-items: center;
128
+ padding: 0;
129
+ border: none;
130
+ background: none;
131
+ appearance: none;
132
+ cursor: pointer;
133
+ }
134
+ }
@@ -0,0 +1,50 @@
1
+ export type TimelineSliderV2Mark = {
2
+ ariaLabel?: string;
3
+ color: string;
4
+ id: string;
5
+ label?: string;
6
+ value: number;
7
+ };
8
+ export type LayoutMark = {
9
+ color: string;
10
+ id: string;
11
+ value: number;
12
+ };
13
+ export type ColorWeight = {
14
+ color: string;
15
+ weight: number;
16
+ };
17
+ export type PositionedMark = {
18
+ color: string;
19
+ id: string;
20
+ positionPx: number;
21
+ };
22
+ export type TimelineCluster = {
23
+ anchorPx: number;
24
+ id: string;
25
+ members: PositionedMark[];
26
+ };
27
+ export type TimelineNode = {
28
+ colorWeights: ColorWeight[];
29
+ dimmed: boolean;
30
+ id: string;
31
+ leftPx: number;
32
+ markIds: string[];
33
+ sizePx: number;
34
+ };
35
+ export type ExpandedBand = {
36
+ leftPx: number;
37
+ memberCount: number;
38
+ widthPx: number;
39
+ };
40
+ export type TimelineLayout = {
41
+ band?: ExpandedBand;
42
+ nodes: TimelineNode[];
43
+ };
44
+ export type BuildLayoutParams = {
45
+ containerWidth: number;
46
+ expandedClusterId?: string;
47
+ marks: LayoutMark[];
48
+ thresholdPx?: number;
49
+ };
50
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/TimelineSliderV2/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC"}
package/index.d.ts CHANGED
@@ -45,6 +45,7 @@ import Tabs from './components/Tabs';
45
45
  import TextTruncated from './components/TextTruncated';
46
46
  import Textfield from './components/Textfield/Textfield';
47
47
  import TimelineSlider from './components/TimelineSlider';
48
+ import TimelineSliderV2 from './components/TimelineSliderV2';
48
49
  import Tooltip from './components/Tooltip/Tooltip';
49
50
  import ViewPhotosDialog from './components/ViewPhotosDialog';
50
51
  import * as Svg from './components/svg';
@@ -73,5 +74,5 @@ export type { DatePickerDateType, Props as DatePickerProps } from './components/
73
74
  export type { DateType } from './utils/date';
74
75
  export type { ComponentStrings } from './strings';
75
76
  export type { LocaleDetails } from './strings/locales';
76
- export { AntSwitch, Autocomplete, Badge, BusySpinner, Button, CellRenderer, CellDateRenderer, Checkbox, Confirm, DatePicker, descendingComparator, DialogBox, Divisor, Dropdown, DropdownV1, EditableTable, ErrorBox, FileChooser, findLocaleDetails, FormBottomBar, getComparator, getLocale, getStrings, getSupportedLocales, icons, Icon, IconTooltip, MapComponent, Message, MultiSelect, NavFooter, NavItem, NavSection, Navbar, Note, OverlayModal, PageForm, Pill, PillList, PhotoChooser, PhotosCarousel, PlacementWrapper, Popover, PopoverMenu, PopoverMultiSelect, ProgressCircle, RadioButton, Select, SelectT, Separator, setLocale, Slider, stableSort, SummaryBox, supportedLocales, Svg, Table, Tabs, Textfield, TextTruncated, TimelineSlider, theme, Tooltip, useStrings, ViewPhotosDialog, };
77
+ export { AntSwitch, Autocomplete, Badge, BusySpinner, Button, CellRenderer, CellDateRenderer, Checkbox, Confirm, DatePicker, descendingComparator, DialogBox, Divisor, Dropdown, DropdownV1, EditableTable, ErrorBox, FileChooser, findLocaleDetails, FormBottomBar, getComparator, getLocale, getStrings, getSupportedLocales, icons, Icon, IconTooltip, MapComponent, Message, MultiSelect, NavFooter, NavItem, NavSection, Navbar, Note, OverlayModal, PageForm, Pill, PillList, PhotoChooser, PhotosCarousel, PlacementWrapper, Popover, PopoverMenu, PopoverMultiSelect, ProgressCircle, RadioButton, Select, SelectT, Separator, setLocale, Slider, stableSort, SummaryBox, supportedLocales, Svg, Table, Tabs, Textfield, TextTruncated, TimelineSlider, TimelineSliderV2, theme, Tooltip, useStrings, ViewPhotosDialog, };
77
78
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/index.js CHANGED
@@ -45,6 +45,7 @@ export { default as Tabs } from './components/Tabs/index.js';
45
45
  export { default as TextTruncated } from './components/TextTruncated/index.js';
46
46
  export { default as Textfield } from './components/Textfield/Textfield.js';
47
47
  export { default as TimelineSlider } from './components/TimelineSlider/index.js';
48
+ export { default as TimelineSliderV2 } from './components/TimelineSliderV2/index.js';
48
49
  export { default as Tooltip } from './components/Tooltip/Tooltip.js';
49
50
  export { default as ViewPhotosDialog } from './components/ViewPhotosDialog/index.js';
50
51
  import * as index from './components/svg/index.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terraware/web-components",
3
- "version": "5.0.12",
3
+ "version": "5.0.14",
4
4
  "author": "Terraformation Inc.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {