@aortl/admin-react 0.16.0 → 0.16.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.
- package/CHANGELOG.md +54 -0
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/BarChart.d.ts +4 -14
- package/dist/BarChart.d.ts.map +1 -1
- package/dist/Breadcrumbs.d.ts +0 -1
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Button.d.ts +4 -6
- package/dist/Button.d.ts.map +1 -1
- package/dist/ButtonGroup.d.ts +2 -5
- package/dist/ButtonGroup.d.ts.map +1 -1
- package/dist/ChartLegend.d.ts +2 -5
- package/dist/ChartLegend.d.ts.map +1 -1
- package/dist/CodeBlock.d.ts +2 -4
- package/dist/CodeBlock.d.ts.map +1 -1
- package/dist/Container.d.ts +3 -4
- package/dist/Container.d.ts.map +1 -1
- package/dist/Dialog.d.ts +3 -14
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Donut.d.ts +4 -6
- package/dist/Donut.d.ts.map +1 -1
- package/dist/Field.d.ts +3 -19
- package/dist/Field.d.ts.map +1 -1
- package/dist/Indicator.d.ts +2 -3
- package/dist/Indicator.d.ts.map +1 -1
- package/dist/Kbd.d.ts +3 -15
- package/dist/Kbd.d.ts.map +1 -1
- package/dist/Link.d.ts +5 -13
- package/dist/Link.d.ts.map +1 -1
- package/dist/Menu.d.ts +1 -5
- package/dist/Menu.d.ts.map +1 -1
- package/dist/Pagination.d.ts +2 -9
- package/dist/Pagination.d.ts.map +1 -1
- package/dist/PropertyList.d.ts +3 -7
- package/dist/PropertyList.d.ts.map +1 -1
- package/dist/Prose.d.ts +3 -12
- package/dist/Prose.d.ts.map +1 -1
- package/dist/Select.d.ts.map +1 -1
- package/dist/Sidebar.d.ts +0 -2
- package/dist/Sidebar.d.ts.map +1 -1
- package/dist/Spinner.d.ts.map +1 -1
- package/dist/StackedBar.d.ts +2 -9
- package/dist/StackedBar.d.ts.map +1 -1
- package/dist/StatCard.d.ts +3 -6
- package/dist/StatCard.d.ts.map +1 -1
- package/dist/Table.d.ts +4 -12
- package/dist/Table.d.ts.map +1 -1
- package/dist/Textarea.d.ts +5 -9
- package/dist/Textarea.d.ts.map +1 -1
- package/dist/Tooltip.d.ts +0 -1
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/admin.scoped.css +25 -4
- package/dist/chart-internal.d.ts +4 -16
- package/dist/chart-internal.d.ts.map +1 -1
- package/dist/cn.d.ts +5 -8
- package/dist/cn.d.ts.map +1 -1
- package/dist/hotkey-parse.d.ts +7 -21
- package/dist/hotkey-parse.d.ts.map +1 -1
- package/dist/hotkey-registry.d.ts +2 -14
- package/dist/hotkey-registry.d.ts.map +1 -1
- package/dist/icon.d.ts +5 -17
- package/dist/icon.d.ts.map +1 -1
- package/dist/index.cjs +53 -172
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +53 -172
- package/dist/index.mjs.map +1 -1
- package/dist/portal-context.d.ts +5 -8
- package/dist/portal-context.d.ts.map +1 -1
- package/dist/useHotkey.d.ts +5 -20
- package/dist/useHotkey.d.ts.map +1 -1
- package/package.json +4 -3
package/dist/index.cjs
CHANGED
|
@@ -15,10 +15,9 @@ let _base_ui_react_tooltip = require("@base-ui/react/tooltip");
|
|
|
15
15
|
let _base_ui_react_dialog = require("@base-ui/react/dialog");
|
|
16
16
|
//#region src/cn.ts
|
|
17
17
|
/**
|
|
18
|
-
* Every admin class
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* `wrap-scoped.mjs`), which carries the same prefix on every selector.
|
|
18
|
+
* Every admin class is prefixed so the bundle coexists with host-page CSS
|
|
19
|
+
* without colliding on common names like `.btn`. Must match the selector
|
|
20
|
+
* prefix `wrap-scoped.mjs` bakes into `@aortl/admin-css/admin.scoped.css`.
|
|
22
21
|
*/
|
|
23
22
|
var PREFIX = "_ao-";
|
|
24
23
|
function prefixTokens(value) {
|
|
@@ -67,14 +66,11 @@ var Accordion = Object.assign(AccordionRoot, {
|
|
|
67
66
|
//#endregion
|
|
68
67
|
//#region src/portal-context.ts
|
|
69
68
|
/**
|
|
70
|
-
* Container
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* join the top layer, painting above the backdrop and escaping its
|
|
76
|
-
* `overflow: hidden`. With no provider the context is null and popups fall
|
|
77
|
-
* back to `document.body`.
|
|
69
|
+
* Container Base UI popups portal into. `<AdminRoot>` publishes its element so
|
|
70
|
+
* popups stay inside the `@scope (._ao-admin-root)` subtree — portaled to
|
|
71
|
+
* `document.body` they fall outside the scope and render unstyled. A `<Dialog>`
|
|
72
|
+
* ancestor overrides it with its `<dialog>` so popups join the top layer above
|
|
73
|
+
* the backdrop. Null falls back to `document.body`.
|
|
78
74
|
*/
|
|
79
75
|
var PortalContainerContext = (0, react.createContext)(null);
|
|
80
76
|
//#endregion
|
|
@@ -104,14 +100,9 @@ function AdminRoot({ className, theme, systemAccent, style, ref, ...rest }) {
|
|
|
104
100
|
//#endregion
|
|
105
101
|
//#region src/icon.ts
|
|
106
102
|
/**
|
|
107
|
-
* Render an `IconProp
|
|
108
|
-
*
|
|
109
|
-
* the
|
|
110
|
-
* renders in the vanilla bundle — so both previews end up the same size.
|
|
111
|
-
*
|
|
112
|
-
* Anything that is not `null`/`undefined` and not already a React element is
|
|
113
|
-
* treated as a component type — `createElement` accepts function components,
|
|
114
|
-
* `forwardRef`s (e.g. `@tabler/icons-react`), `memo`, etc.
|
|
103
|
+
* Render an `IconProp`, defaulting component references to `size="1em"
|
|
104
|
+
* aria-hidden`. `"1em"` makes SVG icons inherit the host `font-size`, matching
|
|
105
|
+
* the Tabler webfont in the vanilla bundle.
|
|
115
106
|
*/
|
|
116
107
|
function renderIcon(icon, size = "1em") {
|
|
117
108
|
if (icon == null) return null;
|
|
@@ -227,12 +218,6 @@ var MOD_ORDER = [
|
|
|
227
218
|
"alt",
|
|
228
219
|
"meta"
|
|
229
220
|
];
|
|
230
|
-
/**
|
|
231
|
-
* Resolve the modifier `mod` aliases to. Apple platforms use ⌘ (`meta`) as the
|
|
232
|
-
* primary command modifier; everywhere else it's Ctrl. Detected once at module
|
|
233
|
-
* load (SSR-safe — the registry never dispatches server-side) and shared by the
|
|
234
|
-
* parse and display layers so the binding and its `<Kbd>` chip always agree.
|
|
235
|
-
*/
|
|
236
221
|
function detectApplePlatform() {
|
|
237
222
|
if (typeof navigator === "undefined") return false;
|
|
238
223
|
const platform = navigator.userAgentData?.platform || navigator.platform || "";
|
|
@@ -281,11 +266,7 @@ function canonicalize(chord) {
|
|
|
281
266
|
parts.push(chord.key);
|
|
282
267
|
return parts.join("+");
|
|
283
268
|
}
|
|
284
|
-
/**
|
|
285
|
-
* Normalize a keyboard event to its canonical chord string. Returns `null`
|
|
286
|
-
* if the event is a bare modifier press (`Shift` by itself, etc.) so callers
|
|
287
|
-
* can short-circuit before a map lookup.
|
|
288
|
-
*/
|
|
269
|
+
/** Canonical chord string for a keyboard event; `null` for a bare modifier press. */
|
|
289
270
|
function normalizeEvent(e) {
|
|
290
271
|
const key = e.key.toLowerCase();
|
|
291
272
|
if (key === "control" || key === "shift" || key === "alt" || key === "meta") return null;
|
|
@@ -299,7 +280,6 @@ function normalizeEvent(e) {
|
|
|
299
280
|
key
|
|
300
281
|
});
|
|
301
282
|
}
|
|
302
|
-
/** A single printable symbol (`?`, `+`, `:`, …) — not a letter, digit, or named key. */
|
|
303
283
|
function isShiftedSymbol(key) {
|
|
304
284
|
return key.length === 1 && !/[a-z0-9]/.test(key);
|
|
305
285
|
}
|
|
@@ -351,26 +331,13 @@ function toAriaPart(chord) {
|
|
|
351
331
|
parts.push(chord.key.length === 1 ? chord.key.toUpperCase() : chord.key);
|
|
352
332
|
return parts.join("+");
|
|
353
333
|
}
|
|
354
|
-
/**
|
|
355
|
-
* Serialize one or more chords to the `aria-keyshortcuts` format
|
|
356
|
-
* (space-separated alternatives, modifiers as `Control`/`Shift`/etc.).
|
|
357
|
-
*/
|
|
334
|
+
/** Serialize chords to `aria-keyshortcuts` format (space-separated alternatives). */
|
|
358
335
|
function toAriaKeyShortcuts(chords) {
|
|
359
336
|
return chords.map(toAriaPart).join(" ");
|
|
360
337
|
}
|
|
361
338
|
//#endregion
|
|
362
339
|
//#region src/Kbd.tsx
|
|
363
|
-
/**
|
|
364
|
-
* Visual representation of a keyboard shortcut. Two shapes:
|
|
365
|
-
*
|
|
366
|
-
* ```tsx
|
|
367
|
-
* <Kbd keys="mod+s" /> // parsed: <Ctrl><S> in a .kbd-group
|
|
368
|
-
* <Kbd>Esc</Kbd> // literal: single <kbd>Esc</kbd>
|
|
369
|
-
* ```
|
|
370
|
-
*
|
|
371
|
-
* Render outside of action surfaces (tooltips, help dialogs) or inside them
|
|
372
|
-
* via the `hotkey` prop on `<Button>` / `<Menu.Item>`.
|
|
373
|
-
*/
|
|
340
|
+
/** Keyboard shortcut chips — parsed via `keys`, or a single literal chip via `children`. */
|
|
374
341
|
function Kbd({ keys, children, className, ...rest }) {
|
|
375
342
|
if (keys != null) {
|
|
376
343
|
const chord = parseKeys(keys)[0];
|
|
@@ -422,11 +389,7 @@ function dispatch(e) {
|
|
|
422
389
|
e.preventDefault();
|
|
423
390
|
for (const entry of bucket) entry.handlerRef.current?.(e);
|
|
424
391
|
}
|
|
425
|
-
/**
|
|
426
|
-
* Register a hotkey entry under each of its canonical chord strings.
|
|
427
|
-
* Returns an unregister function that removes the entry from every bucket
|
|
428
|
-
* and detaches the listener if the registry is empty.
|
|
429
|
-
*/
|
|
392
|
+
/** Returns an unregister function. */
|
|
430
393
|
function register(canonicalChords, entry) {
|
|
431
394
|
for (const chord of canonicalChords) {
|
|
432
395
|
let bucket = registry.get(chord);
|
|
@@ -450,16 +413,9 @@ function register(canonicalChords, entry) {
|
|
|
450
413
|
//#endregion
|
|
451
414
|
//#region src/useHotkey.ts
|
|
452
415
|
/**
|
|
453
|
-
* Register a keyboard shortcut. The handler
|
|
454
|
-
* callers
|
|
455
|
-
* the hook is safe to call unconditionally
|
|
456
|
-
* not have a binding (e.g. the `hotkey` prop on `<Button>`).
|
|
457
|
-
*
|
|
458
|
-
* @example
|
|
459
|
-
* useHotkey("mod+s", save);
|
|
460
|
-
* useHotkey(["mod+s", "mod+enter"], save, { enabled: !isLoading });
|
|
461
|
-
*
|
|
462
|
-
* Returns derived strings for rendering — see {@link HotkeyInfo}.
|
|
416
|
+
* Register a keyboard shortcut, e.g. `useHotkey("mod+s", save)`. The handler
|
|
417
|
+
* is latched in a ref, so callers need not memoize it. Nullish `keys` is a
|
|
418
|
+
* no-op, so the hook is safe to call unconditionally.
|
|
463
419
|
*/
|
|
464
420
|
function useHotkey(keys, handler, options) {
|
|
465
421
|
const enabled = options?.enabled ?? true;
|
|
@@ -656,11 +612,7 @@ function Indicator({ label, variant = "neutral", size = "sm", icon, placement =
|
|
|
656
612
|
}
|
|
657
613
|
//#endregion
|
|
658
614
|
//#region src/Link.tsx
|
|
659
|
-
/**
|
|
660
|
-
* A text link — a plain `<a>` with the design system's link styling: primary
|
|
661
|
-
* color, hover shift, underline, and a focus-visible ring. Pass `external` for
|
|
662
|
-
* the new-tab affordance.
|
|
663
|
-
*/
|
|
615
|
+
/** A plain `<a>` with the design system's link styling. */
|
|
664
616
|
function Link({ external, icon, iconTrailing, className, target, rel, children, ...rest }) {
|
|
665
617
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
|
|
666
618
|
target: target ?? (external ? "_blank" : void 0),
|
|
@@ -676,12 +628,7 @@ function Link({ external, icon, iconTrailing, className, target, rel, children,
|
|
|
676
628
|
}
|
|
677
629
|
//#endregion
|
|
678
630
|
//#region src/Pagination.tsx
|
|
679
|
-
/**
|
|
680
|
-
* Compute the items to render for a given `page` / `total`. Always returns:
|
|
681
|
-
* previous, ...numbers/ellipses, next
|
|
682
|
-
* with `boundaryCount` items on each end and `siblingCount` items around `page`.
|
|
683
|
-
* Pure: no React state, safe to call during render.
|
|
684
|
-
*/
|
|
631
|
+
/** Pure (safe during render): previous, numbers/ellipses (`boundaryCount` at each end, `siblingCount` around `page`), next. */
|
|
685
632
|
function getPaginationItems({ page, total, siblingCount = 1, boundaryCount = 1 }) {
|
|
686
633
|
if (total <= 0) return [{
|
|
687
634
|
type: "previous",
|
|
@@ -837,11 +784,9 @@ function defaultRender(item, onPageChange, prev, next) {
|
|
|
837
784
|
//#endregion
|
|
838
785
|
//#region src/Textarea.tsx
|
|
839
786
|
/**
|
|
840
|
-
* Multi-line
|
|
841
|
-
* `<
|
|
842
|
-
*
|
|
843
|
-
* association, and validity-driven `:user-valid` / `<Field.Error>`. Works
|
|
844
|
-
* standalone too — `Field.Control` falls back to a default context.
|
|
787
|
+
* Multi-line input via Base UI `Field.Control` with a `<textarea>` swapped in,
|
|
788
|
+
* so inside a `<Field>` it gets the same wiring as `<Input>` (generated id,
|
|
789
|
+
* label association, validity). Works standalone via the default context.
|
|
845
790
|
*/
|
|
846
791
|
function Textarea({ variant = "bordered", textareaSize = "md", autoResize, className, ...rest }) {
|
|
847
792
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_field.Field.Control, {
|
|
@@ -1053,10 +998,9 @@ var Select = Object.assign(SelectRoot, {
|
|
|
1053
998
|
//#endregion
|
|
1054
999
|
//#region src/Container.tsx
|
|
1055
1000
|
/**
|
|
1056
|
-
* Page content region: a centered, max-width column that
|
|
1057
|
-
*
|
|
1058
|
-
*
|
|
1059
|
-
* escape hatch (e.g. `Card.Container`) — this is a standalone page region.
|
|
1001
|
+
* Page content region: a centered, max-width column that owns the vertical
|
|
1002
|
+
* gap between stacked sections. Place inside `<AppShell.Main>`, which has no
|
|
1003
|
+
* padding of its own. Not the `.Container` escape hatch (`Card.Container`).
|
|
1060
1004
|
*/
|
|
1061
1005
|
function Container({ size = "md", compact, className, ...rest }) {
|
|
1062
1006
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
@@ -1158,12 +1102,9 @@ var Card = Object.assign(CardRoot, {
|
|
|
1158
1102
|
//#endregion
|
|
1159
1103
|
//#region src/StatCard.tsx
|
|
1160
1104
|
/**
|
|
1161
|
-
* Compact KPI tile
|
|
1162
|
-
*
|
|
1163
|
-
*
|
|
1164
|
-
* annotation. `compact`/`bordered` map to the shared `.card-compact`/
|
|
1165
|
-
* `.card-bordered` modifiers. For free-form tiles, use `<Card>`; for
|
|
1166
|
-
* label/value tables, use `<PropertyList>`.
|
|
1105
|
+
* Compact KPI tile (label / value / detail) on a `.card` shell, so it shares
|
|
1106
|
+
* every card modifier — `compact`/`bordered` map to `.card-compact`/`.card-bordered`.
|
|
1107
|
+
* Free-form tiles: `<Card>`; label/value tables: `<PropertyList>`.
|
|
1167
1108
|
*/
|
|
1168
1109
|
function StatCard({ variant = "default", label, value, detail, icon, compact, bordered, className, children, ...rest }) {
|
|
1169
1110
|
const hasLabel = label !== void 0;
|
|
@@ -1196,11 +1137,8 @@ function StatCard({ variant = "default", label, value, detail, icon, compact, bo
|
|
|
1196
1137
|
//#endregion
|
|
1197
1138
|
//#region src/chart-internal.ts
|
|
1198
1139
|
/**
|
|
1199
|
-
* Multi-series palette
|
|
1200
|
-
*
|
|
1201
|
-
* overrides. Vanilla authors copy the same sequence (it's documented), so both
|
|
1202
|
-
* bundles render identical colours. Single-series charts ignore this entirely
|
|
1203
|
-
* and follow `currentColor`.
|
|
1140
|
+
* Multi-series palette of existing Flexoki tokens, not a new token layer. The
|
|
1141
|
+
* documented vanilla sequence copies this exactly — both bundles must match.
|
|
1204
1142
|
*/
|
|
1205
1143
|
var SERIES = [
|
|
1206
1144
|
"var(--color-blue-500)",
|
|
@@ -1212,7 +1150,6 @@ var SERIES = [
|
|
|
1212
1150
|
"var(--color-yellow-500)",
|
|
1213
1151
|
"var(--color-red-400)"
|
|
1214
1152
|
];
|
|
1215
|
-
/** Resolve a segment's colour: explicit `datum.color` wins, else cycle SERIES. */
|
|
1216
1153
|
function seriesColor(datum, index) {
|
|
1217
1154
|
return datum.color ?? SERIES[index % SERIES.length];
|
|
1218
1155
|
}
|
|
@@ -1221,11 +1158,7 @@ function computeMax(data, explicit) {
|
|
|
1221
1158
|
if (explicit !== void 0) return explicit;
|
|
1222
1159
|
return Math.max(1, ...data.map((d) => d.value));
|
|
1223
1160
|
}
|
|
1224
|
-
/**
|
|
1225
|
-
* Build the cumulative `conic-gradient` stop string for a donut/pie:
|
|
1226
|
-
* `<color> <from>deg <to>deg, …`. Degrees accumulate across segments. A
|
|
1227
|
-
* non-positive total yields a single neutral fill so the ring isn't blank.
|
|
1228
|
-
*/
|
|
1161
|
+
/** Cumulative `conic-gradient` stops. A non-positive total yields a neutral fill so the ring isn't blank. */
|
|
1229
1162
|
function buildDonutSegments(data) {
|
|
1230
1163
|
const total = data.reduce((sum, d) => sum + Math.max(0, d.value), 0);
|
|
1231
1164
|
if (total <= 0) return "var(--color-surface-strong) 0 100%";
|
|
@@ -1246,10 +1179,7 @@ var TYPE_NOUN = {
|
|
|
1246
1179
|
donut: "Donut chart",
|
|
1247
1180
|
pie: "Pie chart"
|
|
1248
1181
|
};
|
|
1249
|
-
/**
|
|
1250
|
-
* Auto-generated summary for the chart root's `aria-label`. Callers that pass
|
|
1251
|
-
* their own `aria-label` skip this. Example: "Bar chart. Mon: 80, Tue: 52."
|
|
1252
|
-
*/
|
|
1182
|
+
/** Chart-root `aria-label` summary, e.g. "Bar chart. Mon: 80, Tue: 52." */
|
|
1253
1183
|
function buildAriaLabel(type, data) {
|
|
1254
1184
|
const parts = data.map((d) => d.label !== void 0 ? `${d.label}: ${d.value}` : `${d.value}`);
|
|
1255
1185
|
return `${TYPE_NOUN[type]}. ${parts.join(", ")}.`;
|
|
@@ -1267,10 +1197,7 @@ function mergeStyle(vars, incoming) {
|
|
|
1267
1197
|
}
|
|
1268
1198
|
//#endregion
|
|
1269
1199
|
//#region src/BarChart.tsx
|
|
1270
|
-
/**
|
|
1271
|
-
* The bare bar-chart grid — no bars. Compose `<BarChart.Bar>` children by hand
|
|
1272
|
-
* (e.g. to interleave a reference line). Sets `role="img"`; pass `aria-label`.
|
|
1273
|
-
*/
|
|
1200
|
+
/** Bare grid, no bars — compose `<BarChart.Bar>` by hand. Sets `role="img"`; pass `aria-label`. */
|
|
1274
1201
|
function BarChartContainer({ orientation = "horizontal", size = "md", showValues, inline, variant = "info", className, ...rest }) {
|
|
1275
1202
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1276
1203
|
role: "img",
|
|
@@ -1287,10 +1214,8 @@ function BarChartContainer({ orientation = "horizontal", size = "md", showValues
|
|
|
1287
1214
|
});
|
|
1288
1215
|
}
|
|
1289
1216
|
/**
|
|
1290
|
-
* One bar.
|
|
1291
|
-
* `
|
|
1292
|
-
* carries `.chart-values`). Stays `currentColor` unless an explicit colour is
|
|
1293
|
-
* given — single-series bars never cycle the SERIES palette.
|
|
1217
|
+
* One bar. The value cell always renders (CSS hides it without `.chart-values`);
|
|
1218
|
+
* fill stays `currentColor` — single-series bars never cycle SERIES.
|
|
1294
1219
|
*/
|
|
1295
1220
|
function Bar({ datum, value, label, color, className, style, ...rest }) {
|
|
1296
1221
|
const v = datum?.value ?? value ?? 0;
|
|
@@ -1322,12 +1247,7 @@ function Bar({ datum, value, label, color, className, style, ...rest }) {
|
|
|
1322
1247
|
]
|
|
1323
1248
|
});
|
|
1324
1249
|
}
|
|
1325
|
-
/**
|
|
1326
|
-
* Single-series bar chart. Computes the max, sets `--chart-max` on the
|
|
1327
|
-
* container (bars inherit it), and generates an overridable `aria-label`.
|
|
1328
|
-
* Horizontal by default; pass `orientation="vertical"` for columns. For
|
|
1329
|
-
* hand-composed layouts use `<BarChart.Container>` + `<BarChart.Bar>`.
|
|
1330
|
-
*/
|
|
1250
|
+
/** Single-series bar chart. For hand-composed layouts use `<BarChart.Container>` + `<BarChart.Bar>`. */
|
|
1331
1251
|
function BarChartRoot({ data, max, orientation = "horizontal", size = "md", showValues, inline, variant = "info", style, "aria-label": ariaLabel, ...rest }) {
|
|
1332
1252
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BarChartContainer, {
|
|
1333
1253
|
orientation,
|
|
@@ -1348,11 +1268,8 @@ var BarChart = Object.assign(BarChartRoot, {
|
|
|
1348
1268
|
//#endregion
|
|
1349
1269
|
//#region src/ChartLegend.tsx
|
|
1350
1270
|
/**
|
|
1351
|
-
*
|
|
1352
|
-
*
|
|
1353
|
-
* per-slice read-out lives (a conic-gradient slice has no element to hang a
|
|
1354
|
-
* `title` on). The swatch colour mirrors `seriesColor`, so legend and chart
|
|
1355
|
-
* stay in sync.
|
|
1271
|
+
* Each row's `title` carries the donut's per-slice read-out — a conic-gradient
|
|
1272
|
+
* slice has no element to hang a `title` on.
|
|
1356
1273
|
*/
|
|
1357
1274
|
function ChartLegend({ data, className, ...rest }) {
|
|
1358
1275
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
@@ -1375,7 +1292,7 @@ function Figure({ size = "md", className, ...rest }) {
|
|
|
1375
1292
|
...rest
|
|
1376
1293
|
});
|
|
1377
1294
|
}
|
|
1378
|
-
/** The masked conic-gradient ring.
|
|
1295
|
+
/** The masked conic-gradient ring. */
|
|
1379
1296
|
function Ring({ data, pie, thickness, className, style, ...rest }) {
|
|
1380
1297
|
const vars = { "--donut-segments": buildDonutSegments(data) };
|
|
1381
1298
|
if (thickness !== void 0 && !pie) vars["--donut-thickness"] = thickness;
|
|
@@ -1393,11 +1310,9 @@ function Center({ className, ...rest }) {
|
|
|
1393
1310
|
});
|
|
1394
1311
|
}
|
|
1395
1312
|
/**
|
|
1396
|
-
* Donut (or `pie`) breakdown.
|
|
1397
|
-
*
|
|
1398
|
-
*
|
|
1399
|
-
* conic slice has no element to carry a `title`. Resize by overriding
|
|
1400
|
-
* `--chart-size` (it inherits to the figure) or via `size`.
|
|
1313
|
+
* Donut (or `pie`) breakdown. Per-slice read-outs live on the `legend` rows —
|
|
1314
|
+
* a conic slice has no element to carry a `title`. Resize via `size` or
|
|
1315
|
+
* `--chart-size`.
|
|
1401
1316
|
*/
|
|
1402
1317
|
function DonutRoot({ data, size = "md", thickness, pie, centerLabel, legend, inline, className, "aria-label": ariaLabel, ...rest }) {
|
|
1403
1318
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -1430,10 +1345,7 @@ function Track({ className, ...rest }) {
|
|
|
1430
1345
|
...rest
|
|
1431
1346
|
});
|
|
1432
1347
|
}
|
|
1433
|
-
/**
|
|
1434
|
-
* One proportion segment, sized by `flex: var(--value)`. Multi-series by
|
|
1435
|
-
* default: takes its colour from `seriesColor` (SERIES cycle or `datum.color`).
|
|
1436
|
-
*/
|
|
1348
|
+
/** One proportion segment, sized by `flex: var(--value)`; SERIES-cycle colours by default. */
|
|
1437
1349
|
function Segment({ datum, index = 0, value, color, className, style, ...rest }) {
|
|
1438
1350
|
const v = datum?.value ?? value ?? 0;
|
|
1439
1351
|
const segColor = datum !== void 0 ? seriesColor(datum, index) : color;
|
|
@@ -1447,11 +1359,7 @@ function Segment({ datum, index = 0, value, color, className, style, ...rest })
|
|
|
1447
1359
|
...rest
|
|
1448
1360
|
});
|
|
1449
1361
|
}
|
|
1450
|
-
/**
|
|
1451
|
-
* Single horizontal proportion bar — a "60% A / 30% B / 10% C" breakdown.
|
|
1452
|
-
* Segments are sized by their flex ratios (no max needed) and coloured from the
|
|
1453
|
-
* SERIES palette by default. Generates an overridable `aria-label`.
|
|
1454
|
-
*/
|
|
1362
|
+
/** Single horizontal proportion bar. Segments size by flex ratio — no max needed. */
|
|
1455
1363
|
function StackedBarRoot({ data, legend, inline, className, "aria-label": ariaLabel, ...rest }) {
|
|
1456
1364
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1457
1365
|
role: "img",
|
|
@@ -1486,11 +1394,7 @@ function DefaultCloseIcon() {
|
|
|
1486
1394
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M18 6 6 18" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "m6 6 12 12" })]
|
|
1487
1395
|
});
|
|
1488
1396
|
}
|
|
1489
|
-
/**
|
|
1490
|
-
* The bare `<dialog>` primitive — no opinions about header, body, or footer.
|
|
1491
|
-
* Use this when the default `<Dialog>` layout doesn't fit (custom header,
|
|
1492
|
-
* media block, multi-step content).
|
|
1493
|
-
*/
|
|
1397
|
+
/** The bare `<dialog>` primitive — for layouts the default `<Dialog>` doesn't fit. */
|
|
1494
1398
|
function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", className, children, ref: consumerRef, ...rest }) {
|
|
1495
1399
|
const ref = (0, react.useRef)(null);
|
|
1496
1400
|
const onOpenChangeRef = (0, react.useRef)(onOpenChange);
|
|
@@ -1572,11 +1476,7 @@ function DialogCloseButton({ icon, className, children, onClick, type = "button"
|
|
|
1572
1476
|
children: children ?? (icon !== void 0 ? renderIcon(icon) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DefaultCloseIcon, {}))
|
|
1573
1477
|
});
|
|
1574
1478
|
}
|
|
1575
|
-
/**
|
|
1576
|
-
* Standard modal: a `<dialog>` with an opinionated header / body / footer
|
|
1577
|
-
* layout driven by shorthand props. For anything outside that shape, use
|
|
1578
|
-
* `<Dialog.Container>` and compose by hand.
|
|
1579
|
-
*/
|
|
1479
|
+
/** Standard modal with shorthand-driven header/body/footer. For other shapes, compose `<Dialog.Container>` by hand. */
|
|
1580
1480
|
function DialogRoot({ icon, title, description, actions, dismissible = true, closeLabel = "Close", children, ...containerProps }) {
|
|
1581
1481
|
const hasTitle = title !== void 0 || icon !== void 0;
|
|
1582
1482
|
const showHeader = hasTitle || dismissible;
|
|
@@ -1604,23 +1504,14 @@ var Dialog = Object.assign(DialogRoot, {
|
|
|
1604
1504
|
});
|
|
1605
1505
|
//#endregion
|
|
1606
1506
|
//#region src/Field.tsx
|
|
1607
|
-
/**
|
|
1608
|
-
* The bare `.field` container. Use this when the default layout doesn't fit —
|
|
1609
|
-
* multiple validity-keyed `<Field.Error>` messages, a control that needs to
|
|
1610
|
-
* sit between description and error, etc.
|
|
1611
|
-
*/
|
|
1507
|
+
/** The bare `.field` container — for layouts the default `<Field>` doesn't fit. */
|
|
1612
1508
|
function FieldContainer({ className, ...rest }) {
|
|
1613
1509
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_field.Field.Root, {
|
|
1614
1510
|
className: cn("field", className),
|
|
1615
1511
|
...rest
|
|
1616
1512
|
});
|
|
1617
1513
|
}
|
|
1618
|
-
/**
|
|
1619
|
-
* Standard field: a `.field` container that lays out an optional label, the
|
|
1620
|
-
* control passed as `children`, an optional description, and an optional
|
|
1621
|
-
* single-message error. For anything outside that shape, use
|
|
1622
|
-
* `<Field.Container>` and compose by hand.
|
|
1623
|
-
*/
|
|
1514
|
+
/** Standard field — label, control (`children`), description, error. For other shapes, compose `<Field.Container>` by hand. */
|
|
1624
1515
|
function FieldRoot({ label, description, error, required, inline, className, children, ...rest }) {
|
|
1625
1516
|
const labelEl = label !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldLabel, {
|
|
1626
1517
|
required,
|
|
@@ -1894,8 +1785,7 @@ var Tabs = Object.assign(TabsRoot, {
|
|
|
1894
1785
|
/**
|
|
1895
1786
|
* Styled `<pre>` for logs, JSON dumps, terminal output, raw model output.
|
|
1896
1787
|
* Theme-following surface via `--color-code-surface` / `--color-code-text`.
|
|
1897
|
-
*
|
|
1898
|
-
* Shiki/Prism on a nested `<code>` if needed.
|
|
1788
|
+
* No syntax highlighting — layer Shiki/Prism on a nested `<code>` if needed.
|
|
1899
1789
|
*/
|
|
1900
1790
|
function CodeBlock({ nowrap, className, ...rest }) {
|
|
1901
1791
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
|
|
@@ -1906,18 +1796,9 @@ function CodeBlock({ nowrap, className, ...rest }) {
|
|
|
1906
1796
|
//#endregion
|
|
1907
1797
|
//#region src/Prose.tsx
|
|
1908
1798
|
/**
|
|
1909
|
-
*
|
|
1910
|
-
*
|
|
1911
|
-
*
|
|
1912
|
-
* from the design tokens, scoped to this wrapper so the rest of the admin UI
|
|
1913
|
-
* keeps the global element reset.
|
|
1914
|
-
*
|
|
1915
|
-
* ```tsx
|
|
1916
|
-
* <Prose dangerouslySetInnerHTML={{ __html: renderedMarkdown }} />
|
|
1917
|
-
* ```
|
|
1918
|
-
*
|
|
1919
|
-
* Accepts children too — `<Prose><h2>…</h2><p>…</p></Prose>` — for content
|
|
1920
|
-
* authored directly in JSX.
|
|
1799
|
+
* Styled container for HTML the system can't annotate with its class names —
|
|
1800
|
+
* backend-rendered markdown, CMS bodies, model output. Element styles are
|
|
1801
|
+
* scoped to this wrapper; the rest of the admin UI keeps the global reset.
|
|
1921
1802
|
*/
|
|
1922
1803
|
function Prose({ className, ...rest }) {
|
|
1923
1804
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|