@crewlethq/ui 0.7.0 → 0.8.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.
@@ -1,4 +1,15 @@
1
1
  import type { ReactNode } from 'react';
2
+ /** One part of a row's value: see [BarDatum.parts]. */
3
+ export interface BarPart {
4
+ /** Keyed by id, so a push that re-ranks the parts moves no other part. */
5
+ id: string;
6
+ label: ReactNode;
7
+ value: number;
8
+ /** What the part's number reads as in the row's key. Defaults to the value. */
9
+ display?: ReactNode;
10
+ /** Defaults to the part's place in the row's `parts`, in the data ramp. */
11
+ color?: string;
12
+ }
2
13
  export interface BarDatum {
3
14
  /**
4
15
  * What this row is, as a stable identity. REQUIRED: a ranked list is
@@ -20,6 +31,18 @@ export interface BarDatum {
20
31
  href?: string;
21
32
  /** What pressing the row does, where it is not a destination. */
22
33
  onSelect?: () => void;
34
+ /**
35
+ * What the row's value is made of, such as a team's tokens by seat. The
36
+ * row's bar is split into these, in proportion to each part's value and
37
+ * 2px apart, and the row is keyed under its bar with each part's name and
38
+ * number: a split bar with no key is a picture of some numbers. A part's
39
+ * hue is its place in this list unless it names one, so every row is keyed
40
+ * under itself and two rows may use one hue for different parts. A part
41
+ * with nothing in it is neither drawn nor keyed, and keeps its hue's place.
42
+ * The parts are the caller's to sum to `value`: the bar's length is the
43
+ * row's value, and the parts only divide it.
44
+ */
45
+ parts?: BarPart[];
23
46
  }
24
47
  /**
25
48
  * Where a row's bar stands against its words.
@@ -3,7 +3,7 @@ export { DATA_COLORS, DATA_COLOR_OTHER, dataColor } from './dataColor.js';
3
3
  export { Legend } from './Legend.js';
4
4
  export type { LegendItem, LegendProps } from './Legend.js';
5
5
  export { BarList } from './BarList.js';
6
- export type { BarDatum, BarListProps } from './BarList.js';
6
+ export type { BarDatum, BarListLayout, BarListProps, BarPart } from './BarList.js';
7
7
  export { StackedBar } from './StackedBar.js';
8
8
  export type { StackedBarProps, StackedSegment } from './StackedBar.js';
9
9
  export { ActivityStrip } from './ActivityStrip.js';
@@ -1,3 +1,3 @@
1
- export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from '../chunk-RJM4QCGG.js';
1
+ export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from '../chunk-6VL4LGWC.js';
2
2
  import '../chunk-BZFWDIV6.js';
3
3
  import '../chunk-ODEQTPFM.js';
@@ -271,6 +271,46 @@
271
271
  white-space: nowrap;
272
272
  }
273
273
 
274
+ /*
275
+ * A SPLIT BAR: one bar divided into its parts, as a stacked bar is. The parts
276
+ * stand 2px apart for the stacked bar's reason, the ground showing through is
277
+ * what makes each part a part, and each part GROWS by its value (a style
278
+ * property on the part) so the gaps come out of the parts and the bar keeps
279
+ * its length. The bar clips its parts, so the last part takes the bar's
280
+ * rounded value end and the first its square start.
281
+ */
282
+ .crewlet-bar-list__bar--parts {
283
+ display: flex;
284
+ gap: 2px;
285
+ overflow: hidden;
286
+ background: none;
287
+ }
288
+
289
+ .crewlet-bar-list__part {
290
+ flex-grow: 0;
291
+ flex-shrink: 1;
292
+ flex-basis: 0;
293
+ min-width: 0;
294
+ height: 100%;
295
+ background: var(--crewlet-bar-list-part-color, var(--color-data-other));
296
+ }
297
+
298
+ /*
299
+ * THE KEY UNDER A SPLIT BAR, at the caption step, starting where the bar
300
+ * starts: under the plot in the BESIDE register, past the words' column and
301
+ * the gap after it, so each name stands under the bar it keys rather than
302
+ * under the row's own name.
303
+ */
304
+ .crewlet-bar-list__key {
305
+ margin-top: var(--spacing-1);
306
+ font-size: var(--font-size-2xs);
307
+ }
308
+
309
+ .crewlet-bar-list--beside .crewlet-bar-list__key {
310
+ margin-top: 0;
311
+ padding-inline-start: calc(var(--crewlet-bar-list-label-width) + var(--spacing-3));
312
+ }
313
+
274
314
  /* ─── Stacked bar ─────────────────────────────────────────────── */
275
315
 
276
316
  /*
@@ -1,10 +1,10 @@
1
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-CVB7O3SZ.js';
1
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-QJZ3Y6WW.js';
2
2
  import '../chunk-LSB3EHBW.js';
3
3
  import '../chunk-EUCC37WY.js';
4
- import '../chunk-BTHX2FS3.js';
5
- import '../chunk-AV2DXAEL.js';
6
4
  import '../chunk-YCTMKKRA.js';
5
+ import '../chunk-AV2DXAEL.js';
7
6
  import '../chunk-5VNUYO76.js';
7
+ import '../chunk-BTHX2FS3.js';
8
8
  import '../chunk-PQADV6P6.js';
9
9
  import '../chunk-7RPGY3JE.js';
10
10
  import '../chunk-R25RGPUB.js';
@@ -1,18 +1,18 @@
1
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-CLPDVL46.js';
1
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-CHG7VT2M.js';
2
2
  import '../chunk-PGRPNDWM.js';
3
3
  import '../chunk-HOXGBLEY.js';
4
4
  import '../chunk-3CZ7XAVY.js';
5
- import '../chunk-SMBKXWML.js';
6
- import '../chunk-CVB7O3SZ.js';
7
- import '../chunk-LSB3EHBW.js';
8
- import '../chunk-EUCC37WY.js';
9
- import '../chunk-BTHX2FS3.js';
10
5
  import '../chunk-5I56UXBJ.js';
11
6
  import '../chunk-PDUZO35I.js';
7
+ import '../chunk-QJZ3Y6WW.js';
8
+ import '../chunk-LSB3EHBW.js';
9
+ import '../chunk-EUCC37WY.js';
10
+ import '../chunk-YCTMKKRA.js';
12
11
  import '../chunk-GXQ3B46I.js';
13
12
  import '../chunk-AV2DXAEL.js';
14
- import '../chunk-YCTMKKRA.js';
15
13
  import '../chunk-5VNUYO76.js';
14
+ import '../chunk-SMBKXWML.js';
15
+ import '../chunk-BTHX2FS3.js';
16
16
  import '../chunk-6MU7HNB4.js';
17
17
  import '../chunk-ZGX2DP7F.js';
18
18
  import '../chunk-BHHIIK3M.js';
@@ -1,6 +1,6 @@
1
1
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';
2
2
  import { cx } from './chunk-ODEQTPFM.js';
3
- import './Charts-B3YEF7R4.css';
3
+ import './Charts-THPA5BWV.css';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
  import { useState, useRef, useCallback, useId } from 'react';
6
6
 
@@ -61,15 +61,24 @@ function BarList({
61
61
  /* @__PURE__ */ jsxs("ul", { role: "list", className: cx("crewlet-bar-list", `crewlet-bar-list--${layout}`, className), children: [
62
62
  shown.map((datum, index) => {
63
63
  const width = top > 0 && datum.value > 0 ? Math.max(1, datum.value / top * 100) : 0;
64
+ const parts = (datum.parts ?? []).map((part, at) => ({ ...part, color: part.color ?? dataColor(at) })).filter((part) => part.value > 0);
64
65
  const bar = width > 0 ? /* @__PURE__ */ jsx(
65
66
  "span",
66
67
  {
67
- className: "crewlet-bar-list__bar",
68
+ className: cx("crewlet-bar-list__bar", parts.length > 0 && "crewlet-bar-list__bar--parts"),
68
69
  "aria-hidden": true,
69
- style: {
70
+ style: parts.length > 0 ? { width: `${width}%` } : {
70
71
  width: `${width}%`,
71
72
  "--crewlet-bar-list-bar-color": datum.color ?? dataColor(index)
72
- }
73
+ },
74
+ children: parts.map((part) => /* @__PURE__ */ jsx(
75
+ "span",
76
+ {
77
+ className: "crewlet-bar-list__part",
78
+ style: { flexGrow: part.value, "--crewlet-bar-list-part-color": part.color }
79
+ },
80
+ part.id
81
+ ))
73
82
  }
74
83
  ) : null;
75
84
  const value = /* @__PURE__ */ jsx("span", { className: "crewlet-bar-list__value", children: datum.display ?? datum.value.toLocaleString() });
@@ -98,15 +107,29 @@ function BarList({
98
107
  /* @__PURE__ */ jsx("span", { className: "crewlet-bar-list__sub", children: datum.sub })
99
108
  ] })
100
109
  ] });
101
- return /* @__PURE__ */ jsx("li", { className: "crewlet-bar-list__item", children: datum.href ? /* @__PURE__ */ jsx("a", { className: "crewlet-bar-list__row crewlet-bar-list__row--pressable", href: datum.href, children: body }) : datum.onSelect ? /* @__PURE__ */ jsx(
102
- "button",
103
- {
104
- type: "button",
105
- className: "crewlet-bar-list__row crewlet-bar-list__row--pressable",
106
- onClick: datum.onSelect,
107
- children: body
108
- }
109
- ) : /* @__PURE__ */ jsx("span", { className: "crewlet-bar-list__row", children: body }) }, datum.id);
110
+ return /* @__PURE__ */ jsxs("li", { className: "crewlet-bar-list__item", children: [
111
+ datum.href ? /* @__PURE__ */ jsx("a", { className: "crewlet-bar-list__row crewlet-bar-list__row--pressable", href: datum.href, children: body }) : datum.onSelect ? /* @__PURE__ */ jsx(
112
+ "button",
113
+ {
114
+ type: "button",
115
+ className: "crewlet-bar-list__row crewlet-bar-list__row--pressable",
116
+ onClick: datum.onSelect,
117
+ children: body
118
+ }
119
+ ) : /* @__PURE__ */ jsx("span", { className: "crewlet-bar-list__row", children: body }),
120
+ parts.length > 0 && /* @__PURE__ */ jsx(
121
+ Legend,
122
+ {
123
+ className: "crewlet-bar-list__key",
124
+ items: parts.map((part) => ({
125
+ id: part.id,
126
+ label: part.label,
127
+ color: part.color,
128
+ value: part.display ?? part.value.toLocaleString()
129
+ }))
130
+ }
131
+ )
132
+ ] }, datum.id);
110
133
  }),
111
134
  remaining > 0 && /* @__PURE__ */ jsx("li", { className: "crewlet-bar-list__more", children: moreLabel(remaining) })
112
135
  ] })
@@ -1,11 +1,11 @@
1
1
  import { Toolbar } from './chunk-PGRPNDWM.js';
2
2
  import { PageHeader } from './chunk-HOXGBLEY.js';
3
3
  import { RelativeTime } from './chunk-3CZ7XAVY.js';
4
- import { Kbd } from './chunk-SMBKXWML.js';
5
- import { DataTable } from './chunk-CVB7O3SZ.js';
6
- import { Menu } from './chunk-LSB3EHBW.js';
7
4
  import { DateTimePicker } from './chunk-5I56UXBJ.js';
8
5
  import { Popover } from './chunk-PDUZO35I.js';
6
+ import { DataTable } from './chunk-QJZ3Y6WW.js';
7
+ import { Menu } from './chunk-LSB3EHBW.js';
8
+ import { Kbd } from './chunk-SMBKXWML.js';
9
9
  import { useListbox, useOptionKeys } from './chunk-6MU7HNB4.js';
10
10
  import { Input } from './chunk-ZGX2DP7F.js';
11
11
  import { Count } from './chunk-BHHIIK3M.js';
@@ -40,42 +40,42 @@ export { ListInput } from '../chunk-6HXH57BL.js';
40
40
  export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from '../chunk-4PZ6FJKW.js';
41
41
  export { NewItemsNotice } from '../chunk-PXU6HOZB.js';
42
42
  export { useFullscreen } from '../chunk-XDTYBF2F.js';
43
- export { ImageUpload } from '../chunk-W4GQWFRX.js';
44
43
  export { InlineCode } from '../chunk-NN62JQLR.js';
44
+ export { ImageUpload } from '../chunk-W4GQWFRX.js';
45
45
  export { AutoGrid, Inline, Spacer, Stack } from '../chunk-W4ENKCXJ.js';
46
- export { DIFF_LIST_LABELS, DiffList } from '../chunk-LFHCXZO5.js';
47
46
  export { Disclosure } from '../chunk-MICH6QSJ.js';
48
47
  export { EmptyState } from '../chunk-RA2ULG6H.js';
49
- export { EntityChip } from '../chunk-WSOFKOLP.js';
50
48
  export { ErrorBoundary } from '../chunk-XX2VQE55.js';
51
49
  export { Eyebrow } from '../chunk-RK4XPHVG.js';
52
50
  export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from '../chunk-5YLON2PW.js';
53
- export { CommandPalette } from '../chunk-BXPLX7YU.js';
51
+ export { EntityChip } from '../chunk-WSOFKOLP.js';
54
52
  export { Container } from '../chunk-QVE4GJAT.js';
55
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-CLPDVL46.js';
53
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-CHG7VT2M.js';
56
54
  export { Toolbar, ToolbarOverflow, ToolbarWide } from '../chunk-PGRPNDWM.js';
57
55
  export { PageHeader } from '../chunk-HOXGBLEY.js';
58
56
  export { RelativeTime, currentNow, formatElapsed, formatExact, formatRelative, formatUntil, toISO, toInstant, useNow } from '../chunk-3CZ7XAVY.js';
59
- export { Kbd, isApplePlatform, keyGlyph } from '../chunk-SMBKXWML.js';
60
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-CVB7O3SZ.js';
61
- export { Menu } from '../chunk-LSB3EHBW.js';
62
- export { EMPTY_VALUE, EmptyValue } from '../chunk-EUCC37WY.js';
63
- export { ConfirmModal, Modal } from '../chunk-BTHX2FS3.js';
64
57
  export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from '../chunk-5I56UXBJ.js';
65
58
  export { Popover } from '../chunk-PDUZO35I.js';
59
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from '../chunk-QJZ3Y6WW.js';
60
+ export { Menu } from '../chunk-LSB3EHBW.js';
61
+ export { EMPTY_VALUE, EmptyValue } from '../chunk-EUCC37WY.js';
62
+ export { Checkbox } from '../chunk-YCTMKKRA.js';
66
63
  export { DescriptionList, DescriptionListItem } from '../chunk-XN4JBAN3.js';
64
+ export { DIFF_LIST_LABELS, DiffList } from '../chunk-LFHCXZO5.js';
67
65
  export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from '../chunk-GXQ3B46I.js';
68
66
  export { Callout } from '../chunk-R6FBDTP3.js';
69
67
  export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from '../chunk-VE6LD3KM.js';
70
68
  import '../chunk-53DVJCVW.js';
71
69
  export { Card } from '../chunk-CEOXFO3E.js';
72
70
  export { useCardHeaderSlot } from '../chunk-AV2DXAEL.js';
73
- export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from '../chunk-RJM4QCGG.js';
74
- export { Checkbox } from '../chunk-YCTMKKRA.js';
71
+ export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from '../chunk-6VL4LGWC.js';
75
72
  export { CodeBlock } from '../chunk-MORLKUGM.js';
76
73
  export { CopyButton, Copyable } from '../chunk-26SCUACK.js';
77
74
  export { useClipboard, writeClipboard } from '../chunk-5VNUYO76.js';
78
75
  export { Combobox } from '../chunk-UYK72NOS.js';
76
+ export { CommandPalette } from '../chunk-BXPLX7YU.js';
77
+ export { Kbd, isApplePlatform, keyGlyph } from '../chunk-SMBKXWML.js';
78
+ export { ConfirmModal, Modal } from '../chunk-BTHX2FS3.js';
79
79
  export { TYPE_AHEAD_WINDOW, useListbox, useOptionKeys } from '../chunk-6MU7HNB4.js';
80
80
  export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from '../chunk-ZGX2DP7F.js';
81
81
  export { Accordion, AccordionItem } from '../chunk-RIAZM6L3.js';
package/dist/index.js CHANGED
@@ -40,42 +40,42 @@ export { ListInput } from './chunk-6HXH57BL.js';
40
40
  export { DEFAULT_METER_THRESHOLDS, METER_STATES, Meter, meterState, meterStateTone, meterTone, progressTone } from './chunk-4PZ6FJKW.js';
41
41
  export { NewItemsNotice } from './chunk-PXU6HOZB.js';
42
42
  export { useFullscreen } from './chunk-XDTYBF2F.js';
43
- export { ImageUpload } from './chunk-W4GQWFRX.js';
44
43
  export { InlineCode } from './chunk-NN62JQLR.js';
44
+ export { ImageUpload } from './chunk-W4GQWFRX.js';
45
45
  export { AutoGrid, Inline, Spacer, Stack } from './chunk-W4ENKCXJ.js';
46
- export { DIFF_LIST_LABELS, DiffList } from './chunk-LFHCXZO5.js';
47
46
  export { Disclosure } from './chunk-MICH6QSJ.js';
48
47
  export { EmptyState } from './chunk-RA2ULG6H.js';
49
- export { EntityChip } from './chunk-WSOFKOLP.js';
50
48
  export { ErrorBoundary } from './chunk-XX2VQE55.js';
51
49
  export { Eyebrow } from './chunk-RK4XPHVG.js';
52
50
  export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from './chunk-5YLON2PW.js';
53
- export { CommandPalette } from './chunk-BXPLX7YU.js';
51
+ export { EntityChip } from './chunk-WSOFKOLP.js';
54
52
  export { Container } from './chunk-QVE4GJAT.js';
55
- export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from './chunk-CLPDVL46.js';
53
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from './chunk-CHG7VT2M.js';
56
54
  export { Toolbar, ToolbarOverflow, ToolbarWide } from './chunk-PGRPNDWM.js';
57
55
  export { PageHeader } from './chunk-HOXGBLEY.js';
58
56
  export { RelativeTime, currentNow, formatElapsed, formatExact, formatRelative, formatUntil, toISO, toInstant, useNow } from './chunk-3CZ7XAVY.js';
59
- export { Kbd, isApplePlatform, keyGlyph } from './chunk-SMBKXWML.js';
60
- export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from './chunk-CVB7O3SZ.js';
61
- export { Menu } from './chunk-LSB3EHBW.js';
62
- export { EMPTY_VALUE, EmptyValue } from './chunk-EUCC37WY.js';
63
- export { ConfirmModal, Modal } from './chunk-BTHX2FS3.js';
64
57
  export { DEFAULT_DATE_TIME_PICKER_LABELS, DateTimePicker } from './chunk-5I56UXBJ.js';
65
58
  export { Popover } from './chunk-PDUZO35I.js';
59
+ export { ALL_ITEMS, CopyableCell, DATA_TABLE_LABELS, DataTable, RowActionsMenu } from './chunk-QJZ3Y6WW.js';
60
+ export { Menu } from './chunk-LSB3EHBW.js';
61
+ export { EMPTY_VALUE, EmptyValue } from './chunk-EUCC37WY.js';
62
+ export { Checkbox } from './chunk-YCTMKKRA.js';
66
63
  export { DescriptionList, DescriptionListItem } from './chunk-XN4JBAN3.js';
64
+ export { DIFF_LIST_LABELS, DiffList } from './chunk-LFHCXZO5.js';
67
65
  export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from './chunk-GXQ3B46I.js';
68
66
  export { Callout } from './chunk-R6FBDTP3.js';
69
67
  export { CANVAS_COMPOSE_CONTEXT, CANVAS_FIT_MAX_ZOOM, CANVAS_FIT_PADDING, CANVAS_FOCUS_CONTEXT, CANVAS_MAX_ZOOM, CANVAS_MIN_ZOOM, CANVAS_PAN_MARGIN, CANVAS_PAN_STEP, CANVAS_REVEAL_PADDING, CANVAS_TAP_SLOP, CANVAS_WHEEL_LINE_PX, CANVAS_WHEEL_ZOOM_PER_PIXEL, CANVAS_ZOOM_CEILING, CANVAS_ZOOM_LIMITS, CANVAS_ZOOM_STEP, Canvas, IDENTITY_VIEW, anchorView, beyondSlop, clampPan, clampZoom, fitView, panBy, pinchView, regionView, revealView, screenRect, toScreen, toWorld, wheelPixels, wheelZoomFactor, zoomAt, zoomLimits } from './chunk-VE6LD3KM.js';
70
68
  import './chunk-53DVJCVW.js';
71
69
  export { Card } from './chunk-CEOXFO3E.js';
72
70
  export { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
73
- export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from './chunk-RJM4QCGG.js';
74
- export { Checkbox } from './chunk-YCTMKKRA.js';
71
+ export { ActivityStrip, BarList, ChartTooltip, DATA_COLORS, DATA_COLOR_OTHER, Legend, Sparkline, StackedBar, StackedColumns, TimeSeries, dataColor, niceScale, useChartHover } from './chunk-6VL4LGWC.js';
75
72
  export { CodeBlock } from './chunk-MORLKUGM.js';
76
73
  export { CopyButton, Copyable } from './chunk-26SCUACK.js';
77
74
  export { useClipboard, writeClipboard } from './chunk-5VNUYO76.js';
78
75
  export { Combobox } from './chunk-UYK72NOS.js';
76
+ export { CommandPalette } from './chunk-BXPLX7YU.js';
77
+ export { Kbd, isApplePlatform, keyGlyph } from './chunk-SMBKXWML.js';
78
+ export { ConfirmModal, Modal } from './chunk-BTHX2FS3.js';
79
79
  export { TYPE_AHEAD_WINDOW, useListbox, useOptionKeys } from './chunk-6MU7HNB4.js';
80
80
  export { FormField, FormRow, FormSection, Input, InputAffix, Label, ReadOnlyField, Textarea } from './chunk-ZGX2DP7F.js';
81
81
  export { Accordion, AccordionItem } from './chunk-RIAZM6L3.js';
package/dist/styles.css CHANGED
@@ -2877,7 +2877,7 @@
2877
2877
  }
2878
2878
 
2879
2879
 
2880
- /* Charts-B3YEF7R4.css */
2880
+ /* Charts-THPA5BWV.css */
2881
2881
  /* The chart kit: a legend, a ranked bar list, a stacked bar, stacked
2882
2882
  columns, an activity strip, a time series and the reading layer they share. Hand-drawn rather than a charting library, for one reason that
2883
2883
  decides it: every mark here reads tokens, in two themes, at the contrast
@@ -3151,6 +3151,46 @@
3151
3151
  white-space: nowrap;
3152
3152
  }
3153
3153
 
3154
+ /*
3155
+ * A SPLIT BAR: one bar divided into its parts, as a stacked bar is. The parts
3156
+ * stand 2px apart for the stacked bar's reason, the ground showing through is
3157
+ * what makes each part a part, and each part GROWS by its value (a style
3158
+ * property on the part) so the gaps come out of the parts and the bar keeps
3159
+ * its length. The bar clips its parts, so the last part takes the bar's
3160
+ * rounded value end and the first its square start.
3161
+ */
3162
+ .crewlet-bar-list__bar--parts {
3163
+ display: flex;
3164
+ gap: 2px;
3165
+ overflow: hidden;
3166
+ background: none;
3167
+ }
3168
+
3169
+ .crewlet-bar-list__part {
3170
+ flex-grow: 0;
3171
+ flex-shrink: 1;
3172
+ flex-basis: 0;
3173
+ min-width: 0;
3174
+ height: 100%;
3175
+ background: var(--crewlet-bar-list-part-color, var(--color-data-other));
3176
+ }
3177
+
3178
+ /*
3179
+ * THE KEY UNDER A SPLIT BAR, at the caption step, starting where the bar
3180
+ * starts: under the plot in the BESIDE register, past the words' column and
3181
+ * the gap after it, so each name stands under the bar it keys rather than
3182
+ * under the row's own name.
3183
+ */
3184
+ .crewlet-bar-list__key {
3185
+ margin-top: var(--spacing-1);
3186
+ font-size: var(--font-size-2xs);
3187
+ }
3188
+
3189
+ .crewlet-bar-list--beside .crewlet-bar-list__key {
3190
+ margin-top: 0;
3191
+ padding-inline-start: calc(var(--crewlet-bar-list-label-width) + var(--spacing-3));
3192
+ }
3193
+
3154
3194
  /* ─── Stacked bar ─────────────────────────────────────────────── */
3155
3195
 
3156
3196
  /*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crewlethq/ui",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Crewlet shared React components built on @crewlethq/tokens and @crewlethq/icons.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -42,8 +42,8 @@
42
42
  "clean": "rm -rf dist src/generated"
43
43
  },
44
44
  "dependencies": {
45
- "@crewlethq/icons": "0.7.0",
46
- "@crewlethq/tokens": "0.7.0"
45
+ "@crewlethq/icons": "0.8.0",
46
+ "@crewlethq/tokens": "0.8.0"
47
47
  },
48
48
  "peerDependencies": {
49
49
  "react": ">=18",
@@ -1,9 +1,9 @@
1
1
  import { Menu } from './chunk-LSB3EHBW.js';
2
2
  import { EmptyValue } from './chunk-EUCC37WY.js';
3
- import { Modal } from './chunk-BTHX2FS3.js';
4
- import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
5
3
  import { Checkbox } from './chunk-YCTMKKRA.js';
4
+ import { useCardHeaderSlot } from './chunk-AV2DXAEL.js';
6
5
  import { useClipboard } from './chunk-5VNUYO76.js';
6
+ import { Modal } from './chunk-BTHX2FS3.js';
7
7
  import { IconButton } from './chunk-4FQT6ZAY.js';
8
8
  import { Button } from './chunk-OG6CL3EB.js';
9
9
  import { VisuallyHidden } from './chunk-BZFWDIV6.js';