@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.
- package/components/TimelineSliderV2/ClusterBadge.d.ts +10 -0
- package/components/TimelineSliderV2/ClusterBadge.d.ts.map +1 -0
- package/components/TimelineSliderV2/ClusterBadge.js +29 -0
- package/components/TimelineSliderV2/TimelineDot.d.ts +16 -0
- package/components/TimelineSliderV2/TimelineDot.d.ts.map +1 -0
- package/components/TimelineSliderV2/TimelineDot.js +36 -0
- package/components/TimelineSliderV2/TimelineRail.d.ts +5 -0
- package/components/TimelineSliderV2/TimelineRail.d.ts.map +1 -0
- package/components/TimelineSliderV2/TimelineRail.js +11 -0
- package/components/TimelineSliderV2/index.d.ts +15 -0
- package/components/TimelineSliderV2/index.d.ts.map +1 -0
- package/components/TimelineSliderV2/index.js +104 -0
- package/components/TimelineSliderV2/layout.d.ts +16 -0
- package/components/TimelineSliderV2/layout.d.ts.map +1 -0
- package/components/TimelineSliderV2/layout.js +168 -0
- package/components/TimelineSliderV2/styles.scss +134 -0
- package/components/TimelineSliderV2/types.d.ts +50 -0
- package/components/TimelineSliderV2/types.d.ts.map +1 -0
- package/components/TimelineSliderV2/types.js +1 -0
- package/index.d.ts +2 -1
- package/index.d.ts.map +1 -1
- package/index.js +1 -0
- package/package.json +1 -1
|
@@ -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 @@
|
|
|
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,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
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":"AAGA,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,YAAY,MAAM,wCAAwC,CAAC;AAClE,OAAO,KAAK,MAAM,oBAAoB,CAAC;AACvC,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,UAAU,MAAM,oCAAoC,CAAC;AAC5D,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,QAAQ,MAAM,gCAAgC,CAAC;AACtD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,IAAI,MAAM,wBAAwB,CAAC;AAC1C,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAC5C,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,OAAO,MAAM,8BAA8B,CAAC;AACnD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,SAAS,MAAM,+BAA+B,CAAC;AACtD,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAClD,OAAO,UAAU,MAAM,gCAAgC,CAAC;AACxD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,YAAY,MAAM,wCAAwC,CAAC;AAClE,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,YAAY,MAAM,2BAA2B,CAAC;AACrD,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,OAAO,MAAM,kCAAkC,CAAC;AACvD,OAAO,kBAAkB,MAAM,iCAAiC,CAAC;AACjE,OAAO,cAAc,MAAM,4CAA4C,CAAC;AACxE,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAClD,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,UAAU,MAAM,yBAAyB,CAAC;AACjD,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,OAAO,MAAM,8BAA8B,CAAC;AACnD,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,MAAM,oBAAoB,CAAC;AACvC,OAAO,YAAY,EAAE,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpG,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,YAAY,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACjG,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACvG,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EACL,SAAS,EACT,YAAY,EACZ,KAAK,EACL,WAAW,EACX,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,OAAO,EACP,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,SAAS,EACT,UAAU,EACV,mBAAmB,EACnB,KAAK,EACL,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,OAAO,EACP,WAAW,EACX,SAAS,EACT,OAAO,EACP,UAAU,EACV,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,MAAM,EACN,OAAO,EACP,SAAS,EACT,SAAS,EACT,MAAM,EACN,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,GAAG,EACH,KAAK,EACL,IAAI,EACJ,SAAS,EACT,aAAa,EACb,cAAc,EACd,KAAK,EACL,OAAO,EACP,UAAU,EACV,gBAAgB,GACjB,CAAC"}
|
|
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';
|