@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.
Files changed (70) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/AdminRoot.d.ts.map +1 -1
  3. package/dist/BarChart.d.ts +4 -14
  4. package/dist/BarChart.d.ts.map +1 -1
  5. package/dist/Breadcrumbs.d.ts +0 -1
  6. package/dist/Breadcrumbs.d.ts.map +1 -1
  7. package/dist/Button.d.ts +4 -6
  8. package/dist/Button.d.ts.map +1 -1
  9. package/dist/ButtonGroup.d.ts +2 -5
  10. package/dist/ButtonGroup.d.ts.map +1 -1
  11. package/dist/ChartLegend.d.ts +2 -5
  12. package/dist/ChartLegend.d.ts.map +1 -1
  13. package/dist/CodeBlock.d.ts +2 -4
  14. package/dist/CodeBlock.d.ts.map +1 -1
  15. package/dist/Container.d.ts +3 -4
  16. package/dist/Container.d.ts.map +1 -1
  17. package/dist/Dialog.d.ts +3 -14
  18. package/dist/Dialog.d.ts.map +1 -1
  19. package/dist/Donut.d.ts +4 -6
  20. package/dist/Donut.d.ts.map +1 -1
  21. package/dist/Field.d.ts +3 -19
  22. package/dist/Field.d.ts.map +1 -1
  23. package/dist/Indicator.d.ts +2 -3
  24. package/dist/Indicator.d.ts.map +1 -1
  25. package/dist/Kbd.d.ts +3 -15
  26. package/dist/Kbd.d.ts.map +1 -1
  27. package/dist/Link.d.ts +5 -13
  28. package/dist/Link.d.ts.map +1 -1
  29. package/dist/Menu.d.ts +1 -5
  30. package/dist/Menu.d.ts.map +1 -1
  31. package/dist/Pagination.d.ts +2 -9
  32. package/dist/Pagination.d.ts.map +1 -1
  33. package/dist/PropertyList.d.ts +3 -7
  34. package/dist/PropertyList.d.ts.map +1 -1
  35. package/dist/Prose.d.ts +3 -12
  36. package/dist/Prose.d.ts.map +1 -1
  37. package/dist/Select.d.ts.map +1 -1
  38. package/dist/Sidebar.d.ts +0 -2
  39. package/dist/Sidebar.d.ts.map +1 -1
  40. package/dist/Spinner.d.ts.map +1 -1
  41. package/dist/StackedBar.d.ts +2 -9
  42. package/dist/StackedBar.d.ts.map +1 -1
  43. package/dist/StatCard.d.ts +3 -6
  44. package/dist/StatCard.d.ts.map +1 -1
  45. package/dist/Table.d.ts +4 -12
  46. package/dist/Table.d.ts.map +1 -1
  47. package/dist/Textarea.d.ts +5 -9
  48. package/dist/Textarea.d.ts.map +1 -1
  49. package/dist/Tooltip.d.ts +0 -1
  50. package/dist/Tooltip.d.ts.map +1 -1
  51. package/dist/admin.scoped.css +25 -4
  52. package/dist/chart-internal.d.ts +4 -16
  53. package/dist/chart-internal.d.ts.map +1 -1
  54. package/dist/cn.d.ts +5 -8
  55. package/dist/cn.d.ts.map +1 -1
  56. package/dist/hotkey-parse.d.ts +7 -21
  57. package/dist/hotkey-parse.d.ts.map +1 -1
  58. package/dist/hotkey-registry.d.ts +2 -14
  59. package/dist/hotkey-registry.d.ts.map +1 -1
  60. package/dist/icon.d.ts +5 -17
  61. package/dist/icon.d.ts.map +1 -1
  62. package/dist/index.cjs +53 -172
  63. package/dist/index.cjs.map +1 -1
  64. package/dist/index.mjs +53 -172
  65. package/dist/index.mjs.map +1 -1
  66. package/dist/portal-context.d.ts +5 -8
  67. package/dist/portal-context.d.ts.map +1 -1
  68. package/dist/useHotkey.d.ts +5 -20
  69. package/dist/useHotkey.d.ts.map +1 -1
  70. 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 name is prefixed so the bundle can coexist with a host
19
- * page's CSS without colliding on common names like `.btn` or `.card`. The
20
- * matching CSS lives in `@aortl/admin-css/admin.scoped.css` (built by
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 that Base UI popups (Select, Tooltip, etc.) should portal into.
71
- * `<AdminRoot>` publishes its own element here so popups render inside the
72
- * scoped subtree and match the `@scope (._ao-admin-root)` CSS without it
73
- * they portal to `document.body`, outside the scope, and render unstyled. A
74
- * `<Dialog>` ancestor overrides it with its own `<dialog>` element so popups
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` to a React node, defaulting to `size="1em" aria-hidden`
108
- * when given a component reference. The `"1em"` default makes SVG icons inherit
109
- * the host's `font-size`, matching how the Tabler webfont (`<i class="ti …">`)
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 is latched in a ref internally so
454
- * callers don't need to memoize it. Passing nullish `keys` is a no-op, so
455
- * the hook is safe to call unconditionally from components that may or may
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 text input. Rendered through Base UI's `Field.Control` with a
841
- * `<textarea>` swapped in for the default `<input>`, so inside a `<Field>` it
842
- * gets the same wiring as `<Input>`: a generated id, label `htmlFor`
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 also owns the
1057
- * vertical gap between stacked sections. Place inside `<AppShell.Main>`,
1058
- * which provides no padding of its own. Distinct from the `.Container`
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 — `label / value / detail`. Renders a `.card` shell (so it
1162
- * shares the surface, border, radius, shadow, and every card modifier) with an
1163
- * inverted inner hierarchy: the value dominates, the label is a small
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 references EXISTING Flexoki palette tokens, NOT a new
1200
- * token layer. Cycled by index (`SERIES[i % len]`); a datum's own `color`
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. Renders a label (only when present), the fill (with a native
1291
- * `title`), and an always-present value cell (hidden by CSS unless the chart
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
- * Shared legend for `<Donut>` and `<StackedBar>` one swatch + label per
1352
- * datum. Each row carries its own `title`, which is where the donut's
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. Builds `--donut-segments` from the data. */
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. Builds the cumulative conic-gradient string from
1397
- * `data`, overlays an optional `centerLabel`, and generates an overridable
1398
- * `aria-label`. Per-slice read-outs live on the optional `legend` rows — a
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
- * Wraps by default; opt out with `nowrap`. No syntax highlighting layer
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
- * A styled container for HTML the system can't annotate with its semantic class
1910
- * names — backend-rendered markdown, CMS bodies, model output. Styles its
1911
- * descendant flow elements (`p`, `ul`, `a`, `code`, `blockquote`, `table`, …)
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", {