@danxbot/ui 15.27.0 → 15.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/theme.css CHANGED
@@ -45,186 +45,197 @@
45
45
  @source "./index.js";
46
46
 
47
47
  /* from src/styles/authored.css */
48
- @theme inline {
49
- /* --- Surfaces + structure --- */
50
- --color-canvas: var(--canvas);
51
- --color-canvas-subtle: var(--canvas-subtle);
52
- --color-surface: var(--surface);
53
- --color-surface-sunken: var(--surface-sunken);
54
- --color-surface-raised: var(--surface-raised);
55
- --color-surface-overlay: var(--surface-overlay);
56
- --color-surface-inset: var(--surface-inset);
57
- --color-surface-hover: var(--surface-hover);
58
- --color-surface-active: var(--surface-active);
59
- --color-surface-selected: var(--surface-selected);
60
-
61
- --color-border-subtle: var(--border-subtle);
62
- --color-border: var(--border);
63
- --color-border-strong: var(--border-strong);
64
- --color-border-interactive: var(--border-interactive);
65
-
66
- /* --- Content --- */
67
- --color-primary: var(--text-primary);
68
- --color-secondary: var(--text-secondary);
69
- --color-tertiary: var(--text-tertiary);
70
- --color-disabled: var(--text-disabled);
71
- --color-inverse: var(--text-inverse);
72
-
73
- /* --- Accent (celadon) --- */
74
- --color-accent: var(--accent);
75
- --color-accent-hover: var(--accent-hover);
76
- --color-accent-active: var(--accent-active);
77
- --color-accent-subtle: var(--accent-subtle);
78
- --color-accent-subtle-hover: var(--accent-subtle-hover);
79
- --color-accent-border: var(--accent-border);
80
- --color-accent-text: var(--accent-text);
81
- --color-accent-contrast: var(--accent-contrast);
82
-
83
- /* --- Brand (ember) --- */
84
- --color-brand: var(--brand);
85
- --color-brand-hover: var(--brand-hover);
86
- --color-brand-subtle: var(--brand-subtle);
87
- --color-brand-text: var(--brand-text);
88
- --color-brand-contrast: var(--brand-contrast);
89
-
90
- /* --- Status --- */
91
- --color-success: var(--success);
92
- --color-success-subtle: var(--success-subtle);
93
- --color-success-text: var(--success-text);
94
- --color-success-border: var(--success-border);
95
-
96
- --color-warning: var(--warning);
97
- --color-warning-subtle: var(--warning-subtle);
98
- --color-warning-subtle-hover: var(--warning-subtle-hover);
99
- --color-warning-text: var(--warning-text);
100
- --color-warning-border: var(--warning-border);
101
-
102
- --color-danger: var(--danger);
103
- --color-danger-hover: var(--danger-hover);
104
- --color-danger-subtle: var(--danger-subtle);
105
- --color-danger-text: var(--danger-text);
106
- --color-danger-border: var(--danger-border);
107
- --color-danger-contrast: var(--danger-contrast);
108
-
109
- /* --- Confidence (a 1-5 self-rating, one colour per level) --- */
110
- --color-confidence-1: var(--confidence-1);
111
- --color-confidence-2: var(--confidence-2);
112
- --color-confidence-3: var(--confidence-3);
113
- --color-confidence-4: var(--confidence-4);
114
- --color-confidence-5: var(--confidence-5);
115
- --color-confidence-none: var(--confidence-none);
116
-
117
- --color-info: var(--info);
118
- --color-info-subtle: var(--info-subtle);
119
- --color-info-text: var(--info-text);
120
- --color-info-border: var(--info-border);
121
-
122
- /* DX-3662 — the 8th tone: a quieter grey for a CLOSED/inert fact (a
123
- terminated card, a retired record) — distinct from `--neutral`
124
- (`text-tertiary`/`bg-tertiary`, the "not yet decided" grey every OTHER
125
- pending/undetermined state already draws from). Both are on the same
126
- near-zero-chroma axis on purpose (an inert fact and an undecided one are
127
- both "no signal", just at different points in a lifecycle) but pinned to
128
- different `L`s so they stay tellable apart side by side — see
129
- `muted-quieter-than-neutral.test.ts` for the measured contrast-ranking
130
- floor this promises (DX-3696 — the file this comment used to cite,
131
- `token-distance.test.ts`, does not exist in this repo). */
132
- --color-muted: var(--muted);
133
- --color-muted-subtle: var(--muted-subtle);
134
- --color-muted-text: var(--muted-text);
135
- --color-muted-border: var(--muted-border);
136
-
137
- /* --- Fields --- */
138
- --color-field: var(--field-bg);
139
- --color-field-hover: var(--field-bg-hover);
140
- --color-field-border: var(--field-border);
141
- --color-field-border-hover: var(--field-border-hover);
142
- --color-field-placeholder: var(--field-placeholder);
143
-
144
- --color-scrim: var(--scrim);
145
- --color-veil: var(--veil);
146
- --color-focus-halo: var(--focus-halo);
147
- --color-control-knob: var(--control-knob);
148
- --color-control-knob-on: var(--control-knob-on);
149
- --color-switch-track-off: var(--switch-track-off);
150
- --color-focus-ring: var(--focus-ring);
151
-
152
- /* --- Type --- */
153
- --font-display: var(--font-display);
154
- --font-sans: var(--font-sans);
155
- --font-mono: var(--font-mono);
156
-
157
- --text-2xs: var(--text-2xs);
158
- --text-xs: var(--text-xs);
159
- --text-sm: var(--text-sm);
160
- --text-base: var(--text-base);
161
- --text-md: var(--text-md);
162
- --text-lg: var(--text-lg);
163
- --text-xl: var(--text-xl);
164
- --text-2xl: var(--text-2xl);
165
- --text-3xl: var(--text-3xl);
166
- --text-4xl: var(--text-4xl);
167
- --text-5xl: var(--text-5xl);
168
-
169
- /* Remap Tailwind's weight utilities onto the non-integer ramp, so
170
- `font-medium` / `font-bold` pick up 510 / 680 rather than 500 / 700. */
171
- --font-weight-normal: var(--weight-normal);
172
- --font-weight-medium: var(--weight-medium);
173
- --font-weight-semibold: var(--weight-semibold);
174
- --font-weight-bold: var(--weight-bold);
175
-
176
- --leading-tight: var(--leading-tight);
177
- --leading-snug: var(--leading-snug);
178
- --leading-normal: var(--leading-normal);
179
- --leading-relaxed: var(--leading-relaxed);
180
-
181
- --tracking-tighter: var(--tracking-tighter);
182
- --tracking-tight: var(--tracking-tight);
183
- --tracking-normal: var(--tracking-normal);
184
- --tracking-wide: var(--tracking-wide);
185
- --tracking-widest: var(--tracking-widest);
186
-
187
- /* --- Shape --- */
188
- --radius-xs: var(--radius-xs);
189
- --radius-sm: var(--radius-sm);
190
- --radius-md: var(--radius-md);
191
- --radius-lg: var(--radius-lg);
192
- --radius-xl: var(--radius-xl);
193
- --radius-2xl: var(--radius-2xl);
194
- --radius-3xl: var(--radius-3xl);
195
-
196
- /* --- Control heights, exposed as sizing utilities (h-control-md etc.) --- */
197
- /* Tailwind's spacing BASE, retargeted through the size multiplier.
198
- This one line is what makes every `p-4`, `gap-3`, `size-5` in every
199
- component respond to the size control — without it the utilities keep
200
- Tailwind's fixed 0.25rem and only the hand-written control heights move,
201
- which is why the first version of the control read as "changes padding
202
- slightly" and nothing else. */
203
- --spacing: calc(0.25rem * var(--ui-scale));
204
-
205
- --spacing-control-xs: var(--control-xs);
206
- --spacing-control-sm: var(--control-sm);
207
- --spacing-control-md: var(--control-md);
208
- --spacing-control-lg: var(--control-lg);
209
- --spacing-control-xl: var(--control-xl);
210
-
211
- /* --- Elevation --- */
212
- --shadow-xs: var(--shadow-xs);
213
- --shadow-sm: var(--shadow-sm);
214
- --shadow-knob: var(--shadow-knob);
215
- --shadow-md: var(--shadow-md);
216
- --shadow-lg: var(--shadow-lg);
217
- --shadow-xl: var(--shadow-xl);
218
- --shadow-tooltip: var(--shadow-tooltip);
219
- --shadow-glow-accent: var(--shadow-glow-accent);
220
-
221
- /* --- Motion ---
222
- The curves, durations and `animate-*` utilities are owned by motion.css,
223
- which declares them directly in Tailwind's own namespaces. All that is
224
- left here is retargeting the framework's bare `transition` default off
225
- its Material-1-era `cubic-bezier(0.4, 0, 0.2, 1)` @ 150ms. */
226
- --default-transition-duration: var(--dur-base);
227
- --default-transition-timing-function: var(--ease-standard);
48
+ @theme inline {
49
+ /* --- Surfaces + structure --- */
50
+ --color-canvas: var(--canvas);
51
+ --color-canvas-subtle: var(--canvas-subtle);
52
+ --color-surface: var(--surface);
53
+ --color-surface-sunken: var(--surface-sunken);
54
+ --color-surface-raised: var(--surface-raised);
55
+ --color-surface-overlay: var(--surface-overlay);
56
+ --color-surface-inset: var(--surface-inset);
57
+ --color-surface-hover: var(--surface-hover);
58
+ --color-surface-active: var(--surface-active);
59
+ --color-surface-selected: var(--surface-selected);
60
+
61
+ --color-border-subtle: var(--border-subtle);
62
+ --color-border: var(--border);
63
+ --color-border-strong: var(--border-strong);
64
+ --color-border-interactive: var(--border-interactive);
65
+
66
+ /* --- Content --- */
67
+ --color-primary: var(--text-primary);
68
+ --color-secondary: var(--text-secondary);
69
+ --color-tertiary: var(--text-tertiary);
70
+ --color-disabled: var(--text-disabled);
71
+ --color-inverse: var(--text-inverse);
72
+
73
+ /* --- Accent (celadon) --- */
74
+ --color-accent: var(--accent);
75
+ --color-accent-hover: var(--accent-hover);
76
+ --color-accent-active: var(--accent-active);
77
+ --color-accent-subtle: var(--accent-subtle);
78
+ --color-accent-subtle-hover: var(--accent-subtle-hover);
79
+ --color-accent-border: var(--accent-border);
80
+ --color-accent-text: var(--accent-text);
81
+ --color-accent-contrast: var(--accent-contrast);
82
+
83
+ /* --- Brand (ember) --- */
84
+ --color-brand: var(--brand);
85
+ --color-brand-hover: var(--brand-hover);
86
+ --color-brand-subtle: var(--brand-subtle);
87
+ --color-brand-text: var(--brand-text);
88
+ --color-brand-contrast: var(--brand-contrast);
89
+
90
+ /* --- Status --- */
91
+ --color-success: var(--success);
92
+ --color-success-subtle: var(--success-subtle);
93
+ --color-success-text: var(--success-text);
94
+ --color-success-border: var(--success-border);
95
+
96
+ --color-warning: var(--warning);
97
+ --color-warning-subtle: var(--warning-subtle);
98
+ --color-warning-subtle-hover: var(--warning-subtle-hover);
99
+ --color-warning-text: var(--warning-text);
100
+ --color-warning-border: var(--warning-border);
101
+
102
+ --color-danger: var(--danger);
103
+ --color-danger-hover: var(--danger-hover);
104
+ --color-danger-subtle: var(--danger-subtle);
105
+ --color-danger-text: var(--danger-text);
106
+ --color-danger-border: var(--danger-border);
107
+ --color-danger-contrast: var(--danger-contrast);
108
+
109
+ /* --- Chart palette (DX-3963): eight ordered categorical hues + one sequential --- */
110
+ --color-chart-1: var(--chart-1);
111
+ --color-chart-2: var(--chart-2);
112
+ --color-chart-3: var(--chart-3);
113
+ --color-chart-4: var(--chart-4);
114
+ --color-chart-5: var(--chart-5);
115
+ --color-chart-6: var(--chart-6);
116
+ --color-chart-7: var(--chart-7);
117
+ --color-chart-8: var(--chart-8);
118
+ --color-chart-seq: var(--chart-seq);
119
+
120
+ /* --- Confidence (a 1-5 self-rating, one colour per level) --- */
121
+ --color-confidence-1: var(--confidence-1);
122
+ --color-confidence-2: var(--confidence-2);
123
+ --color-confidence-3: var(--confidence-3);
124
+ --color-confidence-4: var(--confidence-4);
125
+ --color-confidence-5: var(--confidence-5);
126
+ --color-confidence-none: var(--confidence-none);
127
+
128
+ --color-info: var(--info);
129
+ --color-info-subtle: var(--info-subtle);
130
+ --color-info-text: var(--info-text);
131
+ --color-info-border: var(--info-border);
132
+
133
+ /* DX-3662 — the 8th tone: a quieter grey for a CLOSED/inert fact (a
134
+ terminated card, a retired record) — distinct from `--neutral`
135
+ (`text-tertiary`/`bg-tertiary`, the "not yet decided" grey every OTHER
136
+ pending/undetermined state already draws from). Both are on the same
137
+ near-zero-chroma axis on purpose (an inert fact and an undecided one are
138
+ both "no signal", just at different points in a lifecycle) but pinned to
139
+ different `L`s so they stay tellable apart side by side — see
140
+ `muted-quieter-than-neutral.test.ts` for the measured contrast-ranking
141
+ floor this promises (DX-3696 — the file this comment used to cite,
142
+ `token-distance.test.ts`, does not exist in this repo). */
143
+ --color-muted: var(--muted);
144
+ --color-muted-subtle: var(--muted-subtle);
145
+ --color-muted-text: var(--muted-text);
146
+ --color-muted-border: var(--muted-border);
147
+
148
+ /* --- Fields --- */
149
+ --color-field: var(--field-bg);
150
+ --color-field-hover: var(--field-bg-hover);
151
+ --color-field-border: var(--field-border);
152
+ --color-field-border-hover: var(--field-border-hover);
153
+ --color-field-placeholder: var(--field-placeholder);
154
+
155
+ --color-scrim: var(--scrim);
156
+ --color-veil: var(--veil);
157
+ --color-focus-halo: var(--focus-halo);
158
+ --color-control-knob: var(--control-knob);
159
+ --color-control-knob-on: var(--control-knob-on);
160
+ --color-switch-track-off: var(--switch-track-off);
161
+ --color-focus-ring: var(--focus-ring);
162
+
163
+ /* --- Type --- */
164
+ --font-display: var(--font-display);
165
+ --font-sans: var(--font-sans);
166
+ --font-mono: var(--font-mono);
167
+
168
+ --text-2xs: var(--text-2xs);
169
+ --text-xs: var(--text-xs);
170
+ --text-sm: var(--text-sm);
171
+ --text-base: var(--text-base);
172
+ --text-md: var(--text-md);
173
+ --text-lg: var(--text-lg);
174
+ --text-xl: var(--text-xl);
175
+ --text-2xl: var(--text-2xl);
176
+ --text-3xl: var(--text-3xl);
177
+ --text-4xl: var(--text-4xl);
178
+ --text-5xl: var(--text-5xl);
179
+
180
+ /* Remap Tailwind's weight utilities onto the non-integer ramp, so
181
+ `font-medium` / `font-bold` pick up 510 / 680 rather than 500 / 700. */
182
+ --font-weight-normal: var(--weight-normal);
183
+ --font-weight-medium: var(--weight-medium);
184
+ --font-weight-semibold: var(--weight-semibold);
185
+ --font-weight-bold: var(--weight-bold);
186
+
187
+ --leading-tight: var(--leading-tight);
188
+ --leading-snug: var(--leading-snug);
189
+ --leading-normal: var(--leading-normal);
190
+ --leading-relaxed: var(--leading-relaxed);
191
+
192
+ --tracking-tighter: var(--tracking-tighter);
193
+ --tracking-tight: var(--tracking-tight);
194
+ --tracking-normal: var(--tracking-normal);
195
+ --tracking-wide: var(--tracking-wide);
196
+ --tracking-widest: var(--tracking-widest);
197
+
198
+ /* --- Shape --- */
199
+ --radius-xs: var(--radius-xs);
200
+ --radius-sm: var(--radius-sm);
201
+ --radius-md: var(--radius-md);
202
+ --radius-lg: var(--radius-lg);
203
+ --radius-xl: var(--radius-xl);
204
+ --radius-2xl: var(--radius-2xl);
205
+ --radius-3xl: var(--radius-3xl);
206
+
207
+ /* --- Control heights, exposed as sizing utilities (h-control-md etc.) --- */
208
+ /* Tailwind's spacing BASE, retargeted through the size multiplier.
209
+ This one line is what makes every `p-4`, `gap-3`, `size-5` in every
210
+ component respond to the size control — without it the utilities keep
211
+ Tailwind's fixed 0.25rem and only the hand-written control heights move,
212
+ which is why the first version of the control read as "changes padding
213
+ slightly" and nothing else. */
214
+ --spacing: calc(0.25rem * var(--ui-scale));
215
+
216
+ --spacing-control-xs: var(--control-xs);
217
+ --spacing-control-sm: var(--control-sm);
218
+ --spacing-control-md: var(--control-md);
219
+ --spacing-control-lg: var(--control-lg);
220
+ --spacing-control-xl: var(--control-xl);
221
+
222
+ /* --- Elevation --- */
223
+ --shadow-xs: var(--shadow-xs);
224
+ --shadow-sm: var(--shadow-sm);
225
+ --shadow-knob: var(--shadow-knob);
226
+ --shadow-md: var(--shadow-md);
227
+ --shadow-lg: var(--shadow-lg);
228
+ --shadow-xl: var(--shadow-xl);
229
+ --shadow-tooltip: var(--shadow-tooltip);
230
+ --shadow-glow-accent: var(--shadow-glow-accent);
231
+
232
+ /* --- Motion ---
233
+ The curves, durations and `animate-*` utilities are owned by motion.css,
234
+ which declares them directly in Tailwind's own namespaces. All that is
235
+ left here is retargeting the framework's bare `transition` default off
236
+ its Material-1-era `cubic-bezier(0.4, 0, 0.2, 1)` @ 150ms. */
237
+ --default-transition-duration: var(--dur-base);
238
+ --default-transition-timing-function: var(--ease-standard);
228
239
  }
229
240
 
230
241
  /* from src/styles/tokens.css */
@@ -0,0 +1,27 @@
1
+ import type { Ref } from "react";
2
+ export interface BarListItem {
3
+ /** Unique within the list. */
4
+ id: string;
5
+ label: string;
6
+ /** Finite and >= 0 — anything else throws. */
7
+ value: number;
8
+ /** A quieter line under the label — a count, a unit, a note. */
9
+ secondary?: string;
10
+ /** Renders the row as a real link. Wins over `onSelect`. */
11
+ href?: string;
12
+ /** Renders the row as a button. */
13
+ onSelect?: () => void;
14
+ }
15
+ export interface BarListProps {
16
+ /** In the order to show; never re-sorted. */
17
+ items: readonly BarListItem[];
18
+ /** What the list measures, e.g. "What is contributing". Names the list and captions the table. */
19
+ label: string;
20
+ /** Keep this many rows and fold the rest into one `Other` row. @default every row */
21
+ maxItems?: number;
22
+ /** How a raw value reads in the row, the tooltip and the table. @default locale-formatted number */
23
+ formatValue?: (value: number) => string;
24
+ className?: string;
25
+ ref?: Ref<HTMLUListElement>;
26
+ }
27
+ export declare function BarList({ items, label, maxItems, formatValue, className, ref }: BarListProps): import("react").JSX.Element;
@@ -0,0 +1,20 @@
1
+ import type { Ref } from "react";
2
+ export interface ShareBarSegment {
3
+ /** Unique within the bar. */
4
+ id: string;
5
+ label: string;
6
+ /** Finite and >= 0 — anything else throws. */
7
+ value: number;
8
+ /** Any CSS colour. Wins over the palette hue the segment's position would get. */
9
+ color?: string;
10
+ }
11
+ export interface ShareBarProps {
12
+ segments: readonly ShareBarSegment[];
13
+ /** What the bar measures, e.g. "Model share". Names the group and captions the table. */
14
+ label: string;
15
+ /** How a raw value reads in the tooltip and the table. @default locale-formatted number */
16
+ formatValue?: (value: number) => string;
17
+ className?: string;
18
+ ref?: Ref<HTMLDivElement>;
19
+ }
20
+ export declare function ShareBar({ segments, label, formatValue, className, ref }: ShareBarProps): import("react").JSX.Element;
@@ -0,0 +1,49 @@
1
+ import { type ReactElement, type ReactNode } from "react";
2
+ export interface ChartDatum {
3
+ id: string;
4
+ value: number;
5
+ }
6
+ /**
7
+ * Refuse an input a chart cannot draw truthfully, at the point it arrives.
8
+ * A negative magnitude has no length, a NaN has no share, and a duplicate id
9
+ * would collapse two rows into one React key — each is a caller bug that a
10
+ * clamped or skipped row would hide.
11
+ */
12
+ export declare function assertChartData(component: string, data: readonly ChartDatum[]): void;
13
+ /**
14
+ * A share as a person reads it: a whole number from 10% up, one decimal below
15
+ * (`4.5%`), and `<1%` for a real but tiny share so a nonzero segment is never
16
+ * printed as `0%`. A zero total reads `0%`, never `NaN%`.
17
+ */
18
+ export declare function formatShare(fraction: number): string;
19
+ /** The default way a raw value reads. Callers pass `formatValue` for units. */
20
+ export declare function defaultFormatValue(value: number): string;
21
+ /**
22
+ * A tooltip a keyboard and a finger can reach. Base UI opens its tooltip on
23
+ * hover and on KEYBOARD focus only — a tap or a programmatic focus never
24
+ * mounts it (DX-3014) — so the open state is held here and a plain `focus`
25
+ * opens it too. Escape and blur close it; hover is still Base UI's own.
26
+ */
27
+ export declare function ChartTip({ content, children }: {
28
+ content: ReactNode;
29
+ children: ReactElement<Record<string, unknown>>;
30
+ }): import("react").JSX.Element;
31
+ /** What a tooltip says about one mark — ink tokens only, never the series colour. */
32
+ export declare function TipBody({ label, lines }: {
33
+ label: ReactNode;
34
+ lines: readonly ReactNode[];
35
+ }): import("react").JSX.Element;
36
+ /**
37
+ * The visually hidden table every chart carries — the text-equivalent of its
38
+ * marks, in reading order, so colour and length are never the only way in.
39
+ * `sr-only` keeps it in the accessibility tree and out of the layout.
40
+ */
41
+ export declare function ChartTable({ caption, columns, rows, }: {
42
+ caption: string;
43
+ columns: readonly string[];
44
+ rows: readonly {
45
+ key: string;
46
+ header: ReactNode;
47
+ cells: readonly ReactNode[];
48
+ }[];
49
+ }): import("react").JSX.Element;
@@ -69,6 +69,9 @@ export { PanelGroup, Panel, PanelResizer, type PanelGroupProps, type PanelProps,
69
69
  export { Avatar, AvatarGroup, type AvatarProps, type AvatarGroupProps, type AvatarStatus, } from "./components/Avatar";
70
70
  export { Progress, Meter, ProgressRing, type ProgressProps, type MeterProps, type ProgressRingProps, type ProgressRingValueProps, type ProgressRingSegmentsProps, type ProgressRingSegment, type ProgressTone, } from "./components/Progress";
71
71
  export { Stat, StatRow, Sparkline, type StatProps, type StatRowProps, type SparklineProps, type StatSize, type StatTrend, type StatSentiment, } from "./components/Stat";
72
+ export { ShareBar, type ShareBarProps, type ShareBarSegment, } from "./components/chart/ShareBar";
73
+ export { BarList, type BarListProps, type BarListItem, } from "./components/chart/BarList";
74
+ export { CHART_SERIES_COUNT, CHART_SERIES_TOKENS, CHART_SEQUENTIAL_TOKEN, CHART_SEQUENTIAL_COLOR, chartSeriesColor, } from "./lib/chart-palette";
72
75
  export { DataTable, TableEmptyState, CellStack, type DataTableProps, type TableDensity, } from "./components/Table";
73
76
  export { CodeEditor, CodeEditorToolbar, CodeEditorCaption, CodeEditorCopyButton, CodeEditorWrapToggle, CodeEditorViewSwitch, type CodeEditorProps, type CodeEditorToolbarProps, type CodeEditorView, } from "./components/CodeEditor";
74
77
  export { Markdown, CodeBlock, type MarkdownProps, type CodeBlockProps } from "./components/Markdown";
@@ -0,0 +1,14 @@
1
+ /** How many categorical hues exist. A 9th series is never a 9th hue: it folds into "Other". */
2
+ export declare const CHART_SERIES_COUNT = 8;
3
+ /** The eight categorical tokens, in the fixed order series are assigned. */
4
+ export declare const CHART_SERIES_TOKENS: readonly ["--chart-1", "--chart-2", "--chart-3", "--chart-4", "--chart-5", "--chart-6", "--chart-7", "--chart-8"];
5
+ /** The one sequential hue: a single series of magnitudes (a ranked bar list). */
6
+ export declare const CHART_SEQUENTIAL_TOKEN: "--chart-seq";
7
+ /**
8
+ * The CSS colour for the series at zero-based `index` — `var(--chart-1)` for
9
+ * index 0. Throws past the eighth: a ninth series is folded into "Other" by
10
+ * the caller, never given a generated hue.
11
+ */
12
+ export declare function chartSeriesColor(index: number): string;
13
+ /** The CSS colour of the sequential hue. */
14
+ export declare const CHART_SEQUENTIAL_COLOR: string;
@@ -41,3 +41,4 @@
41
41
  export { formatBytes, formatTokens, formatCompactNumber } from "./lib/format";
42
42
  export { formatDate, parseDate, formatDateTime, parseDateTime, type FormatDateTimeOptions, type ParseDateTimeOptions, formatCurrency, parseCurrency, formatNumber, parseNumber, type FormatNumberOptions, formatBoolean, parseBoolean, type FormatBooleanOptions, } from "./lib/values";
43
43
  export { confidenceLevel, CONFIDENCE_LEVEL_LABELS, type ConfidenceLevel } from "./lib/confidence";
44
+ export { CHART_SERIES_COUNT, CHART_SERIES_TOKENS, CHART_SEQUENTIAL_TOKEN, CHART_SEQUENTIAL_COLOR, chartSeriesColor, } from "./lib/chart-palette";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danxbot/ui",
3
- "version": "15.27.0",
3
+ "version": "15.28.0",
4
4
  "type": "module",
5
5
  "description": "Danxbot — a domain-agnostic React design system with motion as a first-class primitive.",
6
6
  "license": "MIT",