@galaxy-io/dls 2.0.0 → 2.0.2

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.
Files changed (40) hide show
  1. package/dist/charts/BarChart.js +29 -13
  2. package/dist/charts/ChartCategoryTargets.d.ts +2 -2
  3. package/dist/charts/ChartCategoryTargets.js +2 -1
  4. package/dist/charts/ChartFrame.d.ts +7 -5
  5. package/dist/charts/ChartFrame.js +151 -76
  6. package/dist/charts/ChartLegend.d.ts +14 -4
  7. package/dist/charts/ChartLegend.js +90 -53
  8. package/dist/charts/ChartMarkTargets.d.ts +2 -2
  9. package/dist/charts/ChartMarkTargets.js +2 -1
  10. package/dist/charts/Heatmap.js +19 -7
  11. package/dist/charts/LineChart.js +19 -8
  12. package/dist/charts/PieChart.js +16 -7
  13. package/dist/charts/chartSelection.d.ts +15 -0
  14. package/dist/charts/chartSelection.js +22 -0
  15. package/dist/charts/constants.d.ts +4 -0
  16. package/dist/charts/constants.js +6 -2
  17. package/dist/charts/types.d.ts +10 -1
  18. package/dist/charts/useChartInteraction.d.ts +25 -3
  19. package/dist/charts/useChartInteraction.js +56 -10
  20. package/dist/drawer/Drawer.d.ts +3 -1
  21. package/dist/drawer/Drawer.js +43 -14
  22. package/dist/feedback/Alert.d.ts +1 -1
  23. package/dist/inputs/CheckboxGroup.js +1 -1
  24. package/dist/inputs/CheckboxInput.js +1 -1
  25. package/dist/inputs/ColorInput.js +1 -1
  26. package/dist/inputs/CronInput.js +1 -1
  27. package/dist/inputs/DateInput.js +1 -1
  28. package/dist/inputs/KeyValueInput.js +1 -1
  29. package/dist/inputs/SelectInput.js +1 -1
  30. package/dist/inputs/SwitchInput.js +1 -1
  31. package/dist/inputs/TextAreaInput.js +6 -0
  32. package/dist/inputs/internal/ownField.js +1 -1
  33. package/dist/styles.css +1 -1
  34. package/dist/table/InfiniteSpreadsheet.js +1 -1
  35. package/dist/table/TableCore.js +69 -14
  36. package/dist/theme/tokens/light.js +4 -4
  37. package/dist/timeline/Timeline.d.ts +22 -1
  38. package/dist/timeline/Timeline.js +75 -43
  39. package/dist/tokens.css +4 -4
  40. package/package.json +5 -1
@@ -754,7 +754,7 @@ var InfiniteSpreadsheetInner = forwardRef(function InfiniteSpreadsheet(props, re
754
754
  }), showAddRow && isMounted && /* @__PURE__ */ jsx(AddRow, {
755
755
  role: "row",
756
756
  "aria-rowindex": rowCount + 2,
757
- className: "gx-TableCore-VIRTUAL_ROW_CSS-vb9km4t",
757
+ className: "gx-TableCore-VIRTUAL_ROW_CSS-v1emgwoo",
758
758
  style: startStyle(totalSize),
759
759
  children: /* @__PURE__ */ jsx(AddRowCell, {
760
760
  role: "gridcell",
@@ -192,7 +192,12 @@ var DropIndicator = /*#__PURE__*/ styled("span")({
192
192
  class: "gx-TableCore-DropIndicator-d1po1i5a",
193
193
  propsAsIs: false
194
194
  });
195
- /** Follows the table, inside the scroll container; observed for `onEndReached`. */
195
+ /**
196
+ * Follows the table, inside the scroll container; observed for `onEndReached`. Zero height: a 1px
197
+ * sentinel made every table overflow its scroll box by a pixel, so the wheel scrolled that pixel
198
+ * and a trackpad gesture latched onto the table instead of scrolling the page.
199
+ * `IntersectionObserver` reports a zero-area target that touches the root's edge.
200
+ */
196
201
  var Sentinel = /*#__PURE__*/ styled("div")({
197
202
  name: "Sentinel",
198
203
  class: "gx-TableCore-Sentinel-scxvgum",
@@ -284,26 +289,71 @@ var ROW_SELECTED_CSS = "gx-TableCore-ROW_SELECTED_CSS-r1g7lrfg";
284
289
  var ROW_ACTIVE_CSS = "gx-TableCore-ROW_ACTIVE_CSS-r10dstoh";
285
290
  /** @internal The last row, or a row whose panel is open: no bottom hairline. */
286
291
  var ROW_NO_BORDER_CSS = "gx-TableCore-ROW_NO_BORDER_CSS-rpsswqs";
292
+ /**
293
+ * The rows end above the bottom of the scroll box (a full-height table with a few rows): the last
294
+ * row keeps its hairline, so the list reads as finished instead of floating in empty space. Set by
295
+ * `useRowsEndAboveBottom`; it outranks `ROW_NO_BORDER_CSS` and the panel rule by specificity, and
296
+ * sits inside each row's fixed height, so nothing moves when it toggles.
297
+ */
298
+ var ROWS_END_ABOVE_BOTTOM_CSS = "gx-TableCore-ROWS_END_ABOVE_BOTTOM_CSS-rwbqwrq";
299
+ /**
300
+ * Whether the table's rows end above the bottom of its scroll box. The last row drops its hairline
301
+ * only when it lands on the box's bottom edge, where the container's frame (or a scrolled table's
302
+ * end) already draws the line; above the edge, the hairline closes the list. Watches the scroll box
303
+ * and every row group, so rows loading, expanding or the box resizing re-measure it.
304
+ */
305
+ function useRowsEndAboveBottom(scrollRef, tableRef, isEnabled, bodyKey) {
306
+ const [isAbove, setIsAbove] = useState(false);
307
+ useIsomorphicLayoutEffect(() => {
308
+ const scroll = scrollRef.current;
309
+ const table = tableRef.current;
310
+ if (!isEnabled || scroll === null || table === null) {
311
+ setIsAbove(false);
312
+ return;
313
+ }
314
+ const measure = () => {
315
+ const rows = table.querySelectorAll(":scope > tbody > tr");
316
+ const last = rows[rows.length - 1];
317
+ if (last === void 0) {
318
+ setIsAbove(false);
319
+ return;
320
+ }
321
+ setIsAbove(last.getBoundingClientRect().bottom - scroll.getBoundingClientRect().top + scroll.scrollTop < scroll.clientHeight - 1);
322
+ };
323
+ measure();
324
+ if (typeof ResizeObserver === "undefined") return;
325
+ const observer = new ResizeObserver(measure);
326
+ observer.observe(scroll);
327
+ for (const body of Array.from(table.tBodies)) observer.observe(body);
328
+ return () => observer.disconnect();
329
+ }, [
330
+ scrollRef,
331
+ tableRef,
332
+ isEnabled,
333
+ bodyKey
334
+ ]);
335
+ return isAbove;
336
+ }
287
337
  /** The last expanded panel: no bottom hairline. */
288
- var EXPANDED_LAST_CSS = "gx-TableCore-EXPANDED_LAST_CSS-ewbqwrq";
338
+ var EXPANDED_LAST_CSS = "gx-TableCore-EXPANDED_LAST_CSS-e1jxalmm";
289
339
  /** The dragged header while reordering. 0.5 is a state, not a color token. */
290
- var HEADER_DRAGGING_CSS = "gx-TableCore-HEADER_DRAGGING_CSS-h1jxalmm";
340
+ var HEADER_DRAGGING_CSS = "gx-TableCore-HEADER_DRAGGING_CSS-h1fx3qlj";
291
341
  /** The label wrapper grows when a trailing control (column actions) follows it. */
292
- var LABEL_GROW_CSS = "gx-TableCore-LABEL_GROW_CSS-l1fx3qlj";
293
- var DROP_START_CSS = "gx-TableCore-DROP_START_CSS-d2nd1ne";
294
- var DROP_END_CSS = "gx-TableCore-DROP_END_CSS-darqcf0";
342
+ var LABEL_GROW_CSS = "gx-TableCore-LABEL_GROW_CSS-l2nd1ne";
343
+ var DROP_START_CSS = "gx-TableCore-DROP_START_CSS-darqcf0";
344
+ var DROP_END_CSS = "gx-TableCore-DROP_END_CSS-d132cb1v";
295
345
  /** Shows on hover, while dragged and on keyboard focus; straddles the column edge. */
296
- var COLUMN_RESIZE_HANDLE_CSS = "gx-TableCore-COLUMN_RESIZE_HANDLE_CSS-c132cb1v";
346
+ var COLUMN_RESIZE_HANDLE_CSS = "gx-TableCore-COLUMN_RESIZE_HANDLE_CSS-c1vn45v6";
297
347
  /** Hovering a header cell reveals its resize handle. */
298
- var HEADER_HOVER_CSS = "gx-TableCore-HEADER_HOVER_CSS-h1vn45v6";
348
+ var HEADER_HOVER_CSS = "gx-TableCore-HEADER_HOVER_CSS-h14za3v2";
299
349
  /** The expand caret button: a square of its rung. */
300
- var EXPAND_BUTTON_CSS = "gx-TableCore-EXPAND_BUTTON_CSS-e14za3v2";
350
+ var EXPAND_BUTTON_CSS = "gx-TableCore-EXPAND_BUTTON_CSS-e1w0t3ir";
301
351
  /** @internal A virtual body: as tall as every row, which are positioned inside it. */
302
- var VIRTUAL_BODY_CSS = "gx-TableCore-VIRTUAL_BODY_CSS-v1w0t3ir";
352
+ var VIRTUAL_BODY_CSS = "gx-TableCore-VIRTUAL_BODY_CSS-vb9km4t";
303
353
  /** @internal A virtual row, placed at `--gx-table-row-start`. */
304
- var VIRTUAL_ROW_CSS = "gx-TableCore-VIRTUAL_ROW_CSS-vb9km4t";
354
+ var VIRTUAL_ROW_CSS = "gx-TableCore-VIRTUAL_ROW_CSS-v1emgwoo";
305
355
  /** @internal Default cells and footer strings: shrink to truncate. */
306
- var CELL_TEXT_CSS = "gx-TableCore-CELL_TEXT_CSS-c1emgwoo";
356
+ var CELL_TEXT_CSS = "gx-TableCore-CELL_TEXT_CSS-cw38cm1";
307
357
  /** "Oct 3, 2026": the DateInput default. */
308
358
  var DATE_FORMAT_OPTIONS = { dateStyle: "medium" };
309
359
  /** @internal The default cell renderer: one truncating line of formatted text. */
@@ -739,6 +789,9 @@ function TableFrame({ metrics, columnLayout, leadingHeaders, trailingHeader, has
739
789
  const colCount = leadingCount + visibleColumns.length + (hasTrailingColumn ? 1 : 0);
740
790
  const surface = useTableSurface(ownRootRef);
741
791
  const { width: viewportWidth } = useElementClientSize(scrollRef);
792
+ const tableRef = useRef(null);
793
+ const hasFooterRow = columnLayout.visibleColumns.some(({ column }) => column.footer !== void 0 && column.footer !== null);
794
+ const doRowsEndAboveBottom = useRowsEndAboveBottom(scrollRef, tableRef, !hasFooterRow && (rowCount > 0 || isLoading), `${rowCount}:${isLoading}:${error ?? ""}`);
742
795
  const sentinelRef = useInfiniteScrollSentinel({
743
796
  scrollRef,
744
797
  onEndReached,
@@ -867,7 +920,7 @@ function TableFrame({ metrics, columnLayout, leadingHeaders, trailingHeader, has
867
920
  if (drag.beforeId === null && ids.at(-1) === columnId) return "end";
868
921
  return null;
869
922
  };
870
- const hasFooter = visibleColumns.some(({ column }) => column.footer !== void 0 && column.footer !== null);
923
+ const hasFooter = hasFooterRow;
871
924
  const footerRowIndex = ariaRowCount;
872
925
  const variables = { ...columnLayout.variables };
873
926
  if (viewportWidth !== void 0) variables["--gx-table-viewport-width"] = `${viewportWidth}px`;
@@ -943,6 +996,8 @@ function TableFrame({ metrics, columnLayout, leadingHeaders, trailingHeader, has
943
996
  children: [/* @__PURE__ */ jsxs(Scroll, {
944
997
  ref: scrollRef,
945
998
  children: [/* @__PURE__ */ jsxs(TableElement, {
999
+ ref: tableRef,
1000
+ className: cx(doRowsEndAboveBottom && ROWS_END_ABOVE_BOTTOM_CSS),
946
1001
  ...tableAria,
947
1002
  role,
948
1003
  ...ariaLabel === void 0 ? {} : { "aria-label": ariaLabel },
@@ -1038,7 +1093,7 @@ function TableFrame({ metrics, columnLayout, leadingHeaders, trailingHeader, has
1038
1093
  size: metrics.textSize,
1039
1094
  weight: TextWeight.MEDIUM,
1040
1095
  lineClamp: 1,
1041
- className: "gx-TableCore-CELL_TEXT_CSS-c1emgwoo",
1096
+ className: "gx-TableCore-CELL_TEXT_CSS-cw38cm1",
1042
1097
  children: column.footer
1043
1098
  }) : column.footer
1044
1099
  }, column.id)),
@@ -30,12 +30,12 @@ var LIGHT_THEME = {
30
30
  background: {
31
31
  base: "#ffffff",
32
32
  primary: "#fafafb",
33
- secondary: "#f1f1f2",
34
- tertiary: "#ededee",
33
+ secondary: "#f3f3f4",
34
+ tertiary: "#efeff0",
35
35
  hovered: "#f5f5f5",
36
36
  pressed: "#eeeeee",
37
37
  selected: "#e2e2e2",
38
- disabled: "#f1f1f2",
38
+ disabled: "#f3f3f4",
39
39
  success: "#ecfcf0",
40
40
  warning: "#fff8eb",
41
41
  error: "#fff2f2",
@@ -119,7 +119,7 @@ var LIGHT_THEME = {
119
119
  pressed: "#494949"
120
120
  },
121
121
  neutral: {
122
- background: "#f1f1f2",
122
+ background: "#f3f3f4",
123
123
  text: "#101010",
124
124
  hovered: "#e5e5e6",
125
125
  pressed: "#dcdcdd"
@@ -10,6 +10,15 @@ export declare enum TimelineSize {
10
10
  /** body_lg text, 24px box, 6px dot, 14px icon, 24px between events. */
11
11
  LARGE = "LARGE"
12
12
  }
13
+ /** The frame around every event's dot or icon. One shape per timeline. */
14
+ export declare enum TimelineMarkerShape {
15
+ /** A square hairline box with control-radius corners. The default. */
16
+ SQUARE = "SQUARE",
17
+ /** A round hairline box. */
18
+ CIRCLE = "CIRCLE",
19
+ /** No box: the dot or icon sits on the rail, 4px clear of the line above and below it. */
20
+ NONE = "NONE"
21
+ }
13
22
  /** Marker color of one item (Constitution V-A color set; the Timeline item is listed in that column). */
14
23
  export declare enum TimelineVariant {
15
24
  /** `text.primary` marker in a `border.primary` box. */
@@ -85,6 +94,18 @@ export interface TimelineProps extends AriaAttributes {
85
94
  * @default TimelineSize.MEDIUM
86
95
  */
87
96
  size?: TimelineSize;
97
+ /**
98
+ * The frame around each dot or icon: a square box, a round box, or none (the rail runs straight
99
+ * into the marker). The marker keeps its 16 / 20 / 24px slot in every shape, so text never moves.
100
+ * @default TimelineMarkerShape.SQUARE
101
+ */
102
+ markerShape?: TimelineMarkerShape;
103
+ /**
104
+ * Fill each box with its item's background role: a neutral step, `background.<status>` or
105
+ * `background.<family>`, the way a `Chip` fills. Ignored with `TimelineMarkerShape.NONE`.
106
+ * @default false
107
+ */
108
+ isFilled?: boolean;
88
109
  /** DOM id on the root `<ol>`. */
89
110
  id?: string;
90
111
  /** Any `data-*` attribute, forwarded to the root `<ol>`. */
@@ -94,6 +115,6 @@ export interface TimelineProps extends AriaAttributes {
94
115
  /** Inline style on the root `<ol>`; only for setting CSS custom properties. */
95
116
  style?: CSSProperties;
96
117
  }
97
- /** A vertical list of events with boxed dot or icon markers on a hairline rail. */
118
+ /** A vertical list of events with dot or icon markers (boxed or bare) on a hairline rail. */
98
119
  declare const Timeline: import("react").ForwardRefExoticComponent<TimelineProps & import("react").RefAttributes<HTMLOListElement>>;
99
120
  export default Timeline;
@@ -10,12 +10,12 @@ import { cx } from "@linaria/core";
10
10
  /**
11
11
  * A sequence of events in time order, top to bottom: a pipeline run's history, a sync's steps, an
12
12
  * audit trail, an activity feed. Each item is a marker on a vertical rail (a `Beacon` dot, or an
13
- * `Icon` when `icon` is set, inside a small square hairline box with no fill), a one-line label
14
- * centered on the box, an optional time at the end of the label line, an optional description and
13
+ * `Icon` when `icon` is set, inside a small hairline box: square, round, or no box at all with
14
+ * `markerShape`, unfilled unless `isFilled`), a one-line label centered on the marker, an optional time at the end of the label line, an optional description and
15
15
  * an optional footer. A 0.5px rail runs from the bottom edge of each box to the top edge of the
16
16
  * next, whatever the item's height. Only the marker takes the item's color-set `variant` (a
17
17
  * meaning) or categorical `color` (a palette family): the dot or icon its text color, the box its
18
- * border color. The words stay primary and secondary.
18
+ * border color (and its fill with `isFilled`). The words stay primary and secondary.
19
19
  *
20
20
  * Read-only: it does not order, group, fetch or format anything. An ordered list (`<ol>`, kept a
21
21
  * list in Safari with `role="list"` because the package reset removes list styling); the rail is
@@ -31,6 +31,16 @@ var TimelineSize = /* @__PURE__ */ function(TimelineSize) {
31
31
  TimelineSize["LARGE"] = "LARGE";
32
32
  return TimelineSize;
33
33
  }({});
34
+ /** The frame around every event's dot or icon. One shape per timeline. */
35
+ var TimelineMarkerShape = /* @__PURE__ */ function(TimelineMarkerShape) {
36
+ /** A square hairline box with control-radius corners. The default. */
37
+ TimelineMarkerShape["SQUARE"] = "SQUARE";
38
+ /** A round hairline box. */
39
+ TimelineMarkerShape["CIRCLE"] = "CIRCLE";
40
+ /** No box: the dot or icon sits on the rail, 4px clear of the line above and below it. */
41
+ TimelineMarkerShape["NONE"] = "NONE";
42
+ return TimelineMarkerShape;
43
+ }({});
34
44
  /** Marker color of one item (Constitution V-A color set; the Timeline item is listed in that column). */
35
45
  var TimelineVariant = /* @__PURE__ */ function(TimelineVariant) {
36
46
  /** `text.primary` marker in a `border.primary` box. */
@@ -84,10 +94,29 @@ var Marker = /*#__PURE__*/ styled("span")({
84
94
  class: "gx-Timeline-Marker-m11eshsv",
85
95
  propsAsIs: false
86
96
  });
97
+ /**
98
+ * The rail is a hairline from a zero-width box centered on the marker. Browsers paint it a whole CSS
99
+ * pixel wide, starting at the center and snapped to the right of it, so on a 2× screen it sits one
100
+ * device pixel right of the dot or icon. Half a pixel back centers it exactly and stays crisp at 2×
101
+ * and up; at 1× a 1px line cannot center on an even-width mark, so it stays put.
102
+ */
103
+ /**
104
+ * The marker frame per shape. `NONE` drops the box and draws the rail through the empty slot, above
105
+ * and below the dot or icon, stopping 4px short of it, so the line leads to the marker instead of an
106
+ * invisible box edge. The first event has no line above its marker and the last none below (the
107
+ * stubs keep their space, so the marker stays centered on its label).
108
+ */
109
+ var TIMELINE_MARKER_SHAPE_TO_CSS_MAP = {
110
+ ["SQUARE"]: "gx-Timeline-SQUARE-s1u5y4o2",
111
+ ["CIRCLE"]: "gx-Timeline-CIRCLE-c132ryei",
112
+ ["NONE"]: "gx-Timeline-NONE-n1j1o23c"
113
+ };
114
+ /** `isFilled`: the box takes its item's fill role (`--gx-timeline-fill`, set per variant and color). */
115
+ var FILLED_CSS = "gx-Timeline-FILLED_CSS-f6c9753";
87
116
  /** The 0.5px hairline from the bottom of this box to the top of the next one. */
88
117
  var Connector = /*#__PURE__*/ styled("span")({
89
118
  name: "Connector",
90
- class: "gx-Timeline-Connector-c1u5y4o2",
119
+ class: "gx-Timeline-Connector-c1fj1oub",
91
120
  propsAsIs: false
92
121
  });
93
122
  /**
@@ -96,13 +125,13 @@ var Connector = /*#__PURE__*/ styled("span")({
96
125
  */
97
126
  var Body = /*#__PURE__*/ styled("div")({
98
127
  name: "Body",
99
- class: "gx-Timeline-Body-b132ryei",
128
+ class: "gx-Timeline-Body-b1whgn5t",
100
129
  propsAsIs: false
101
130
  });
102
131
  /** The label wraps; the time stays at the end of the first line. */
103
132
  var Heading = /*#__PURE__*/ styled("div")({
104
133
  name: "Heading",
105
- class: "gx-Timeline-Heading-h1j1o23c",
134
+ class: "gx-Timeline-Heading-h1j9kdi1",
106
135
  propsAsIs: false
107
136
  });
108
137
  /**
@@ -111,19 +140,19 @@ var Heading = /*#__PURE__*/ styled("div")({
111
140
  */
112
141
  var Footer = /*#__PURE__*/ styled("div")({
113
142
  name: "Footer",
114
- class: "gx-Timeline-Footer-f6c9753",
143
+ class: "gx-Timeline-Footer-feakmyp",
115
144
  propsAsIs: false
116
145
  });
117
146
  /**
118
147
  * The time in the second column, on one line. A flex box, so a `<time>` wrapper has no line strut
119
148
  * of its own (the inherited font size) and shares the label's baseline at every size.
120
149
  */
121
- var TIME_CSS = "gx-Timeline-TIME_CSS-t1fj1oub";
150
+ var TIME_CSS = "gx-Timeline-TIME_CSS-t1vcatjx";
122
151
  /** Line height, marker box (16 / 20 / 24px), column gap and event spacing per rung. */
123
152
  var TIMELINE_SIZE_TO_CSS_MAP = {
124
- ["SMALL"]: "gx-Timeline-SMALL-s1whgn5t",
125
- ["MEDIUM"]: "gx-Timeline-MEDIUM-m1j9kdi1",
126
- ["LARGE"]: "gx-Timeline-LARGE-leakmyp"
153
+ ["SMALL"]: "gx-Timeline-SMALL-s1195fxg",
154
+ ["MEDIUM"]: "gx-Timeline-MEDIUM-m1oqbau9",
155
+ ["LARGE"]: "gx-Timeline-LARGE-l11wi4d2"
127
156
  };
128
157
  /** The event text's type step. */
129
158
  var TIMELINE_SIZE_TO_TEXT_SIZE_MAP = {
@@ -165,42 +194,45 @@ var TIMELINE_VARIANT_TO_ICON_VARIANT_MAP = {
165
194
  ["WARNING"]: IconVariant.WARNING,
166
195
  ["ERROR"]: IconVariant.ERROR
167
196
  };
168
- /** The marker box's hairline per variant: neutral roles keep `border.primary`; statuses take theirs. */
169
- var TIMELINE_VARIANT_TO_BORDER_CSS_MAP = {
170
- ["PRIMARY"]: "gx-Timeline-PRIMARY-p1vcatjx",
171
- ["SECONDARY"]: "gx-Timeline-SECONDARY-s1195fxg",
172
- ["TERTIARY"]: "gx-Timeline-TERTIARY-t1oqbau9",
173
- ["DISABLED"]: "gx-Timeline-DISABLED-d11wi4d2",
174
- ["INHERIT"]: "gx-Timeline-INHERIT-i1r53y3e",
175
- ["SUCCESS"]: "gx-Timeline-SUCCESS-s61v3n7",
176
- ["WARNING"]: "gx-Timeline-WARNING-w1tjq5mm",
177
- ["ERROR"]: "gx-Timeline-ERROR-ea735oo"
197
+ /**
198
+ * The marker box's hairline and fill per variant: neutral roles keep `border.primary` and fill
199
+ * `background.secondary`; statuses take their own border and background roles.
200
+ */
201
+ var TIMELINE_VARIANT_TO_CSS_MAP = {
202
+ ["PRIMARY"]: "gx-Timeline-PRIMARY-p1r53y3e",
203
+ ["SECONDARY"]: "gx-Timeline-SECONDARY-s61v3n7",
204
+ ["TERTIARY"]: "gx-Timeline-TERTIARY-t1tjq5mm",
205
+ ["DISABLED"]: "gx-Timeline-DISABLED-da735oo",
206
+ ["INHERIT"]: "gx-Timeline-INHERIT-i1ayi32k",
207
+ ["SUCCESS"]: "gx-Timeline-SUCCESS-s155vzhv",
208
+ ["WARNING"]: "gx-Timeline-WARNING-wtnc6wm",
209
+ ["ERROR"]: "gx-Timeline-ERROR-e1q3p1vl"
178
210
  };
179
211
  /**
180
212
  * Categorical `color` on the marker: `text.<family>`, which an icon marker (`IconVariant.INHERIT`)
181
- * takes, and `border.<family>` on the box.
213
+ * takes, and `border.<family>` and the `background.<family>` fill on the box.
182
214
  */
183
215
  var TIMELINE_COLOR_TO_CSS_MAP = {
184
- red: "gx-Timeline-red-r1ayi32k",
185
- orange: "gx-Timeline-orange-o155vzhv",
186
- amber: "gx-Timeline-amber-atnc6wm",
187
- yellow: "gx-Timeline-yellow-y1q3p1vl",
188
- lime: "gx-Timeline-lime-l1khc5e9",
189
- green: "gx-Timeline-green-gob0jun",
190
- emerald: "gx-Timeline-emerald-ecpz10x",
191
- teal: "gx-Timeline-teal-t1arc1uv",
192
- cyan: "gx-Timeline-cyan-c1x7dvj6",
193
- sky: "gx-Timeline-sky-s1fx1m3c",
194
- blue: "gx-Timeline-blue-b1gy5gqm",
195
- indigo: "gx-Timeline-indigo-ityv4re",
196
- violet: "gx-Timeline-violet-v1506u15",
197
- purple: "gx-Timeline-purple-p2f8n55",
198
- fuchsia: "gx-Timeline-fuchsia-f1bza0tc",
199
- pink: "gx-Timeline-pink-p1vbt6lr",
200
- rose: "gx-Timeline-rose-rjtm0e"
216
+ red: "gx-Timeline-red-r1khc5e9",
217
+ orange: "gx-Timeline-orange-oob0jun",
218
+ amber: "gx-Timeline-amber-acpz10x",
219
+ yellow: "gx-Timeline-yellow-y1arc1uv",
220
+ lime: "gx-Timeline-lime-l1x7dvj6",
221
+ green: "gx-Timeline-green-g1fx1m3c",
222
+ emerald: "gx-Timeline-emerald-e1gy5gqm",
223
+ teal: "gx-Timeline-teal-ttyv4re",
224
+ cyan: "gx-Timeline-cyan-c1506u15",
225
+ sky: "gx-Timeline-sky-s2f8n55",
226
+ blue: "gx-Timeline-blue-b1bza0tc",
227
+ indigo: "gx-Timeline-indigo-i1vbt6lr",
228
+ violet: "gx-Timeline-violet-vjtm0e",
229
+ purple: "gx-Timeline-purple-pek3kdh",
230
+ fuchsia: "gx-Timeline-fuchsia-f13hn3pe",
231
+ pink: "gx-Timeline-pink-pdf3rdi",
232
+ rose: "gx-Timeline-rose-rjv99mk"
201
233
  };
202
- /** A vertical list of events with boxed dot or icon markers on a hairline rail. */
203
- var Timeline = forwardRef(function Timeline({ items, size = "MEDIUM", className, style, ...rest }, ref) {
234
+ /** A vertical list of events with dot or icon markers (boxed or bare) on a hairline rail. */
235
+ var Timeline = forwardRef(function Timeline({ items, size = "MEDIUM", markerShape = "SQUARE", isFilled = false, className, style, ...rest }, ref) {
204
236
  const textSize = TIMELINE_SIZE_TO_TEXT_SIZE_MAP[size];
205
237
  return /* @__PURE__ */ jsx(Root, {
206
238
  ...rest,
@@ -217,7 +249,7 @@ var Timeline = forwardRef(function Timeline({ items, size = "MEDIUM", className,
217
249
  children: [/* @__PURE__ */ jsxs(Rail, {
218
250
  "aria-hidden": true,
219
251
  children: [/* @__PURE__ */ jsx(Marker, {
220
- className: color !== void 0 ? TIMELINE_COLOR_TO_CSS_MAP[color] : TIMELINE_VARIANT_TO_BORDER_CSS_MAP[variant],
252
+ className: cx(color !== void 0 ? TIMELINE_COLOR_TO_CSS_MAP[color] : TIMELINE_VARIANT_TO_CSS_MAP[variant], TIMELINE_MARKER_SHAPE_TO_CSS_MAP[markerShape], isFilled && markerShape !== "NONE" && FILLED_CSS),
221
253
  children: item.icon === void 0 ? /* @__PURE__ */ jsx(Beacon, {
222
254
  size: TIMELINE_SIZE_TO_BEACON_SIZE_MAP[size],
223
255
  ...color !== void 0 ? { color } : { variant: TIMELINE_VARIANT_TO_BEACON_VARIANT_MAP[variant] },
@@ -266,4 +298,4 @@ var Timeline = forwardRef(function Timeline({ items, size = "MEDIUM", className,
266
298
  });
267
299
  Timeline.displayName = "Timeline";
268
300
  //#endregion
269
- export { TimelineSize, TimelineVariant, Timeline as default };
301
+ export { TimelineMarkerShape, TimelineSize, TimelineVariant, Timeline as default };
package/dist/tokens.css CHANGED
@@ -386,12 +386,12 @@
386
386
  [data-gx-theme="light"] {
387
387
  --gx-color-background-base: #ffffff;
388
388
  --gx-color-background-primary: #fafafb;
389
- --gx-color-background-secondary: #f1f1f2;
390
- --gx-color-background-tertiary: #ededee;
389
+ --gx-color-background-secondary: #f3f3f4;
390
+ --gx-color-background-tertiary: #efeff0;
391
391
  --gx-color-background-hovered: #f5f5f5;
392
392
  --gx-color-background-pressed: #eeeeee;
393
393
  --gx-color-background-selected: #e2e2e2;
394
- --gx-color-background-disabled: #f1f1f2;
394
+ --gx-color-background-disabled: #f3f3f4;
395
395
  --gx-color-background-success: #ecfcf0;
396
396
  --gx-color-background-warning: #fff8eb;
397
397
  --gx-color-background-error: #fff2f2;
@@ -466,7 +466,7 @@
466
466
  --gx-color-solid-primary-text: #ffffff;
467
467
  --gx-color-solid-primary-hovered: #2d2d2d;
468
468
  --gx-color-solid-primary-pressed: #494949;
469
- --gx-color-solid-neutral-background: #f1f1f2;
469
+ --gx-color-solid-neutral-background: #f3f3f4;
470
470
  --gx-color-solid-neutral-text: #101010;
471
471
  --gx-color-solid-neutral-hovered: #e5e5e6;
472
472
  --gx-color-solid-neutral-pressed: #dcdcdd;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@galaxy-io/dls",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "Galaxy Design Language System",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -157,6 +157,10 @@
157
157
  "types": "./dist/charts/chartScales.d.ts",
158
158
  "import": "./dist/charts/chartScales.js"
159
159
  },
160
+ "./charts/chartSelection": {
161
+ "types": "./dist/charts/chartSelection.d.ts",
162
+ "import": "./dist/charts/chartSelection.js"
163
+ },
160
164
  "./charts/constants": {
161
165
  "types": "./dist/charts/constants.d.ts",
162
166
  "import": "./dist/charts/constants.js"