@viax.io/uxm 4.43.2 → 4.45.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.
Files changed (35) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/studio/lib/registry/composite/list-item.cjs +21 -1
  3. package/dist/studio/lib/registry/composite/list-item.cjs.map +1 -1
  4. package/dist/studio/lib/registry/composite/list-item.d.ts.map +1 -1
  5. package/dist/studio/lib/registry/composite/list-item.js +21 -1
  6. package/dist/studio/lib/registry/composite/list-item.js.map +1 -1
  7. package/dist/ui/button/button.cjs +10 -10
  8. package/dist/ui/button/button.cjs.map +1 -1
  9. package/dist/ui/button/button.d.ts +20 -8
  10. package/dist/ui/button/button.d.ts.map +1 -1
  11. package/dist/ui/button/button.js +10 -10
  12. package/dist/ui/button/button.js.map +1 -1
  13. package/dist/ui/icon-button/icon-button.cjs +2 -0
  14. package/dist/ui/icon-button/icon-button.cjs.map +1 -1
  15. package/dist/ui/icon-button/icon-button.d.ts +3 -3
  16. package/dist/ui/icon-button/icon-button.d.ts.map +1 -1
  17. package/dist/ui/icon-button/icon-button.js +2 -0
  18. package/dist/ui/icon-button/icon-button.js.map +1 -1
  19. package/dist/ui/index.cjs.map +1 -1
  20. package/dist/ui/index.d.ts +1 -1
  21. package/dist/ui/index.d.ts.map +1 -1
  22. package/dist/ui/index.js.map +1 -1
  23. package/dist/ui/list/list-item-preview.cjs +6 -4
  24. package/dist/ui/list/list-item-preview.cjs.map +1 -1
  25. package/dist/ui/list/list-item-preview.d.ts.map +1 -1
  26. package/dist/ui/list/list-item-preview.js +6 -4
  27. package/dist/ui/list/list-item-preview.js.map +1 -1
  28. package/dist/ui/list/list.cjs +9 -2
  29. package/dist/ui/list/list.cjs.map +1 -1
  30. package/dist/ui/list/list.css +16 -0
  31. package/dist/ui/list/list.d.ts +20 -1
  32. package/dist/ui/list/list.d.ts.map +1 -1
  33. package/dist/ui/list/list.js +9 -2
  34. package/dist/ui/list/list.js.map +1 -1
  35. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [4.45.0](https://github.com/viax-io/uxm/compare/v4.44.0...v4.45.0) (2026-09-22)
2
+
3
+
4
+ ### Features
5
+
6
+ * **button,icon-button:** declare ref on the button family ([ee76076](https://github.com/viax-io/uxm/commit/ee760764465faf8054f550d816d2c188adf0bc82))
7
+
8
+ # [4.44.0](https://github.com/viax-io/uxm/compare/v4.43.2...v4.44.0) (2026-09-22)
9
+
10
+
11
+ ### Features
12
+
13
+ * **list:** add a plain container variant ([6388c97](https://github.com/viax-io/uxm/commit/6388c97ddd6229786bc46033db1760fa9b17f70f))
14
+
1
15
  ## [4.43.2](https://github.com/viax-io/uxm/compare/v4.43.1...v4.43.2) (2026-09-22)
2
16
 
3
17
 
@@ -49,8 +49,16 @@ const listItemDef = {
49
49
  { key: "focusRing", label: "Ring Color", control: "color", defaultValue: "var(--color-accent)", section: "focusState", showWhen: { state: "focus", mode: "interactive" } },
50
50
  { key: "disabledOpacity", label: "Opacity", control: "slider", defaultValue: 0.5, min: 0.1, max: 1, step: 0.05, section: "disabledState", showWhen: { state: "disabled" } },
51
51
  // ── Container (List wrapper)
52
+ // NOT container-gated, despite the label and the section it sits in:
53
+ // `borderColor` maps to `--uxm-list-item-border-color`, whose only read is
54
+ // the ROW divider (`.uxm-list-item` border-bottom). The container's own
55
+ // border is a hardcoded `var(--color-border)` with no knob. Gating this on
56
+ // `card` took the divider colour away from `plain` — the one presentation
57
+ // where the dividers are the only separator left.
52
58
  { key: "borderColor", label: "Border Color", control: "color", defaultValue: "var(--color-border)", section: "container" },
53
- { key: "borderRadius", label: "Border Radius", control: "slider", defaultValue: 8, min: 0, max: 16, step: 1, unit: "px", section: "container" },
59
+ // This one IS the container's: `--uxm-list-item-border-radius` is read only
60
+ // by `.uxm-list`'s own radius, which `plain` removes.
61
+ { key: "borderRadius", label: "Border Radius", control: "slider", defaultValue: 8, min: 0, max: 16, step: 1, unit: "px", section: "container", showWhen: { container: "card" } },
54
62
  // ── Shared sizing (applies to every state)
55
63
  { key: "paddingX", label: "Padding X", control: "number", defaultValue: 16, min: 8, max: 32, step: 2, unit: "px" },
56
64
  { key: "paddingY", label: "Padding Y", control: "number", defaultValue: 12, min: 4, max: 24, step: 2, unit: "px" },
@@ -115,6 +123,18 @@ const listItemDef = {
115
123
  ],
116
124
  defaultValue: "default"
117
125
  },
126
+ {
127
+ // The List wrapper's presentation, not the row's — but it lives on this
128
+ // entry because `List` has no registry entry of its own and its two
129
+ // container knobs (Border Color / Border Radius) are already here.
130
+ key: "container",
131
+ label: "Container",
132
+ options: [
133
+ { value: "card", label: "Card" },
134
+ { value: "plain", label: "Plain" }
135
+ ],
136
+ defaultValue: "card"
137
+ },
118
138
  {
119
139
  key: "leading",
120
140
  label: "Leading",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/studio/lib/registry/composite/list-item.ts"],"sourcesContent":["import type { ComponentDef } from '../../types';\n\nexport const listItemDef: ComponentDef = {\n id: 'list-item',\n name: 'List Item',\n category: 'Composite',\n description: \"Row with a leading slot (accent icon tile, or media rendered as-is for a thumbnail / avatar), title, and optional trailing slot — used in stacked lists. Renders as `<div>` (static) or `<button>` / `<a>` (interactive) depending on the atom's `interactive` / `href` props. State knobs gate on `mode` rather than trailing — trailing is purely a visual choice and the two are orthogonal: an interactive row can have any trailing, a static row can have a chevron decoration without being tappable.\",\n styleProperties: [\n // ── Per-state row colors. Filtered into the \"States\" section by\n // the State variant. Default-state knobs (`inactiveBg`,\n // `inactiveText`) gate on `state: \"default\"` only — so the bg /\n // text are editable in both static and interactive modes. The\n // interactive-only state knobs (hover / focus / active)\n // additionally gate on `mode: \"interactive\"` so they hide\n // entirely when the row is rendered as a display-only `<div>`.\n // `disabled` is a visual treatment, not an interaction state, so\n // its knobs are NOT mode-gated.\n { key: 'inactiveBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'states', showWhen: { state: 'default' } },\n { key: 'inactiveText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'default' } },\n { key: 'hoverBg', label: 'Background', control: 'color', defaultValue: 'var(--color-surface-alt)', section: 'states', showWhen: { state: 'hover', mode: 'interactive' } },\n { key: 'hoverText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'hover', mode: 'interactive' } },\n { key: 'focusText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'focus', mode: 'interactive' } },\n { key: 'activeBg', label: 'Background', control: 'color', defaultValue: 'var(--color-accent-subtle)', section: 'states', showWhen: { state: 'active', mode: 'interactive' } },\n { key: 'activeText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'states', showWhen: { state: 'active', mode: 'interactive' } },\n { key: 'disabledBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'states', showWhen: { state: 'disabled' } },\n { key: 'disabledText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'states', showWhen: { state: 'disabled' } },\n // Focus ring + disabled opacity in their own sections.\n { key: 'focusRing', label: 'Ring Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'focusState', showWhen: { state: 'focus', mode: 'interactive' } },\n { key: 'disabledOpacity', label: 'Opacity', control: 'slider', defaultValue: 0.5, min: 0.1, max: 1, step: 0.05, section: 'disabledState', showWhen: { state: 'disabled' } },\n // ── Container (List wrapper)\n { key: 'borderColor', label: 'Border Color', control: 'color', defaultValue: 'var(--color-border)', section: 'container' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 8, min: 0, max: 16, step: 1, unit: 'px', section: 'container' },\n // ── Shared sizing (applies to every state)\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 16, min: 8, max: 32, step: 2, unit: 'px' },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 12, min: 4, max: 24, step: 2, unit: 'px' },\n { key: 'gap', label: 'Icon Gap', control: 'number', defaultValue: 12, min: 4, max: 24, step: 2, unit: 'px' },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 14, min: 11, max: 18, step: 1, unit: 'px' },\n // ── Sub-elements (shared across every state)\n { key: 'valueColor', label: 'Value Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'value', showWhen: { value: 'shown' } },\n { key: 'valueSize', label: 'Value Size', control: 'number', defaultValue: 12, min: 10, max: 16, step: 1, unit: 'px', section: 'value', showWhen: { value: 'shown' } },\n // Trailing slot is purely composable — the consumer passes whatever\n // ReactNode they want. The preview demos the canonical pattern per\n // mode (chevron for interactive nav rows, Tag for static status\n // rows), so a single Chevron Color knob covers the interactive\n // example. Other trailing decorations (Tag, Badge, Avatar, etc.)\n // bring their own styling via their respective atoms.\n { key: 'chevronColor', label: 'Chevron Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'trailing', showWhen: { mode: 'interactive' } },\n // High-contrast icon \"stamp\" — bright accent tile with a card-coloured\n // glyph inside. Keeps the icon visually distinct from the row bg in\n // every state (default / hover / active / disabled), so the shared\n // icon knobs don't need to vary per-state.\n { key: 'iconBg', label: 'Icon Bg', control: 'color', defaultValue: 'var(--color-accent)', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconColor', label: 'Icon Color', control: 'color', defaultValue: 'var(--color-card)', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconSize', label: 'Icon Size', control: 'number', defaultValue: 24, min: 16, max: 40, step: 2, unit: 'px', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconRadius', label: 'Icon Radius', control: 'slider', defaultValue: 6, min: 0, max: 16, step: 1, unit: 'px', section: 'icon', showWhen: { leading: 'icon' } },\n // Media slot is the un-tiled leading alternative: the passed node\n // (Thumbnail / avatar / <img>) brings its own surface and radius, so\n // the row only owns the box it sits in — one size knob, no colours.\n { key: 'mediaSize', label: 'Media Size', control: 'number', defaultValue: 36, min: 24, max: 64, step: 2, unit: 'px', section: 'media', showWhen: { leading: 'media' } },\n ],\n layoutVariants: [\n {\n key: 'mode',\n label: 'Mode',\n options: [\n // `static` → renders as `<div>`; no hover / focus / active\n // styling. `interactive` → renders as `<button>` (or `<a>`\n // when href is passed); full state styling. Mode is\n // orthogonal to trailing: any trailing can sit in either mode.\n { value: 'static', label: 'Static' },\n { value: 'interactive', label: 'Interactive' },\n ],\n defaultValue: 'interactive',\n },\n {\n key: 'state',\n label: 'State',\n options: [\n // `default` and `disabled` are always available — every row\n // has a resting state, and `disabled` is a visual treatment\n // (dimmed, muted) that applies regardless of mode. The CSS\n // rule includes a bare `.uxm-list-item[aria-disabled]`\n // selector that fires on `<div>` as well as `<button>` /\n // `<a>`. The interactive-only states (hover / focus / active)\n // are option-level-gated to `mode: \"interactive\"`: when the\n // row is static, the picker collapses to \"Default\" +\n // \"Disabled\", which self-explains as \"this row only has\n // visual states\" without the picker disappearing.\n { value: 'default', label: 'Default' },\n { value: 'hover', label: 'Hover', showWhen: { mode: 'interactive' } },\n { value: 'focus', label: 'Focus', showWhen: { mode: 'interactive' } },\n { value: 'active', label: 'Active', showWhen: { mode: 'interactive' } },\n { value: 'disabled', label: 'Disabled' },\n ],\n defaultValue: 'default',\n },\n {\n key: 'leading',\n label: 'Leading',\n options: [\n // `icon` → the accent `IconTile` (the long-standing default, so an\n // existing saved theme opens on the same row it was saved against).\n // `media` → the node renders as-is; the preview passes a `Thumbnail`,\n // which is the shape this slot exists for (product / people rows).\n { value: 'icon', label: 'Icon' },\n { value: 'media', label: 'Media' },\n ],\n defaultValue: 'icon',\n },\n {\n key: 'value',\n label: 'Value Text',\n options: [\n { value: 'shown', label: 'Shown' },\n { value: 'hidden', label: 'Hidden' },\n ],\n defaultValue: 'shown',\n },\n // No `trailing` variant — the preview chooses what to show in\n // the trailing slot based on `mode` (chevron for interactive,\n // Tag for static). Real consumers pass any ReactNode via the\n // atom's `trailing` prop; the editor preview demos the\n // canonical patterns only.\n ],\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../src/studio/lib/registry/composite/list-item.ts"],"sourcesContent":["import type { ComponentDef } from '../../types';\n\nexport const listItemDef: ComponentDef = {\n id: 'list-item',\n name: 'List Item',\n category: 'Composite',\n description: \"Row with a leading slot (accent icon tile, or media rendered as-is for a thumbnail / avatar), title, and optional trailing slot — used in stacked lists. Renders as `<div>` (static) or `<button>` / `<a>` (interactive) depending on the atom's `interactive` / `href` props. State knobs gate on `mode` rather than trailing — trailing is purely a visual choice and the two are orthogonal: an interactive row can have any trailing, a static row can have a chevron decoration without being tappable.\",\n styleProperties: [\n // ── Per-state row colors. Filtered into the \"States\" section by\n // the State variant. Default-state knobs (`inactiveBg`,\n // `inactiveText`) gate on `state: \"default\"` only — so the bg /\n // text are editable in both static and interactive modes. The\n // interactive-only state knobs (hover / focus / active)\n // additionally gate on `mode: \"interactive\"` so they hide\n // entirely when the row is rendered as a display-only `<div>`.\n // `disabled` is a visual treatment, not an interaction state, so\n // its knobs are NOT mode-gated.\n { key: 'inactiveBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'states', showWhen: { state: 'default' } },\n { key: 'inactiveText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'default' } },\n { key: 'hoverBg', label: 'Background', control: 'color', defaultValue: 'var(--color-surface-alt)', section: 'states', showWhen: { state: 'hover', mode: 'interactive' } },\n { key: 'hoverText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'hover', mode: 'interactive' } },\n { key: 'focusText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'focus', mode: 'interactive' } },\n { key: 'activeBg', label: 'Background', control: 'color', defaultValue: 'var(--color-accent-subtle)', section: 'states', showWhen: { state: 'active', mode: 'interactive' } },\n { key: 'activeText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'states', showWhen: { state: 'active', mode: 'interactive' } },\n { key: 'disabledBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'states', showWhen: { state: 'disabled' } },\n { key: 'disabledText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'states', showWhen: { state: 'disabled' } },\n // Focus ring + disabled opacity in their own sections.\n { key: 'focusRing', label: 'Ring Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'focusState', showWhen: { state: 'focus', mode: 'interactive' } },\n { key: 'disabledOpacity', label: 'Opacity', control: 'slider', defaultValue: 0.5, min: 0.1, max: 1, step: 0.05, section: 'disabledState', showWhen: { state: 'disabled' } },\n // ── Container (List wrapper)\n // NOT container-gated, despite the label and the section it sits in:\n // `borderColor` maps to `--uxm-list-item-border-color`, whose only read is\n // the ROW divider (`.uxm-list-item` border-bottom). The container's own\n // border is a hardcoded `var(--color-border)` with no knob. Gating this on\n // `card` took the divider colour away from `plain` — the one presentation\n // where the dividers are the only separator left.\n { key: 'borderColor', label: 'Border Color', control: 'color', defaultValue: 'var(--color-border)', section: 'container' },\n // This one IS the container's: `--uxm-list-item-border-radius` is read only\n // by `.uxm-list`'s own radius, which `plain` removes.\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 8, min: 0, max: 16, step: 1, unit: 'px', section: 'container', showWhen: { container: 'card' } },\n // ── Shared sizing (applies to every state)\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 16, min: 8, max: 32, step: 2, unit: 'px' },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 12, min: 4, max: 24, step: 2, unit: 'px' },\n { key: 'gap', label: 'Icon Gap', control: 'number', defaultValue: 12, min: 4, max: 24, step: 2, unit: 'px' },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 14, min: 11, max: 18, step: 1, unit: 'px' },\n // ── Sub-elements (shared across every state)\n { key: 'valueColor', label: 'Value Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'value', showWhen: { value: 'shown' } },\n { key: 'valueSize', label: 'Value Size', control: 'number', defaultValue: 12, min: 10, max: 16, step: 1, unit: 'px', section: 'value', showWhen: { value: 'shown' } },\n // Trailing slot is purely composable — the consumer passes whatever\n // ReactNode they want. The preview demos the canonical pattern per\n // mode (chevron for interactive nav rows, Tag for static status\n // rows), so a single Chevron Color knob covers the interactive\n // example. Other trailing decorations (Tag, Badge, Avatar, etc.)\n // bring their own styling via their respective atoms.\n { key: 'chevronColor', label: 'Chevron Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'trailing', showWhen: { mode: 'interactive' } },\n // High-contrast icon \"stamp\" — bright accent tile with a card-coloured\n // glyph inside. Keeps the icon visually distinct from the row bg in\n // every state (default / hover / active / disabled), so the shared\n // icon knobs don't need to vary per-state.\n { key: 'iconBg', label: 'Icon Bg', control: 'color', defaultValue: 'var(--color-accent)', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconColor', label: 'Icon Color', control: 'color', defaultValue: 'var(--color-card)', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconSize', label: 'Icon Size', control: 'number', defaultValue: 24, min: 16, max: 40, step: 2, unit: 'px', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconRadius', label: 'Icon Radius', control: 'slider', defaultValue: 6, min: 0, max: 16, step: 1, unit: 'px', section: 'icon', showWhen: { leading: 'icon' } },\n // Media slot is the un-tiled leading alternative: the passed node\n // (Thumbnail / avatar / <img>) brings its own surface and radius, so\n // the row only owns the box it sits in — one size knob, no colours.\n { key: 'mediaSize', label: 'Media Size', control: 'number', defaultValue: 36, min: 24, max: 64, step: 2, unit: 'px', section: 'media', showWhen: { leading: 'media' } },\n ],\n layoutVariants: [\n {\n key: 'mode',\n label: 'Mode',\n options: [\n // `static` → renders as `<div>`; no hover / focus / active\n // styling. `interactive` → renders as `<button>` (or `<a>`\n // when href is passed); full state styling. Mode is\n // orthogonal to trailing: any trailing can sit in either mode.\n { value: 'static', label: 'Static' },\n { value: 'interactive', label: 'Interactive' },\n ],\n defaultValue: 'interactive',\n },\n {\n key: 'state',\n label: 'State',\n options: [\n // `default` and `disabled` are always available — every row\n // has a resting state, and `disabled` is a visual treatment\n // (dimmed, muted) that applies regardless of mode. The CSS\n // rule includes a bare `.uxm-list-item[aria-disabled]`\n // selector that fires on `<div>` as well as `<button>` /\n // `<a>`. The interactive-only states (hover / focus / active)\n // are option-level-gated to `mode: \"interactive\"`: when the\n // row is static, the picker collapses to \"Default\" +\n // \"Disabled\", which self-explains as \"this row only has\n // visual states\" without the picker disappearing.\n { value: 'default', label: 'Default' },\n { value: 'hover', label: 'Hover', showWhen: { mode: 'interactive' } },\n { value: 'focus', label: 'Focus', showWhen: { mode: 'interactive' } },\n { value: 'active', label: 'Active', showWhen: { mode: 'interactive' } },\n { value: 'disabled', label: 'Disabled' },\n ],\n defaultValue: 'default',\n },\n {\n // The List wrapper's presentation, not the row's — but it lives on this\n // entry because `List` has no registry entry of its own and its two\n // container knobs (Border Color / Border Radius) are already here.\n key: 'container',\n label: 'Container',\n options: [\n { value: 'card', label: 'Card' },\n { value: 'plain', label: 'Plain' },\n ],\n defaultValue: 'card',\n },\n {\n key: 'leading',\n label: 'Leading',\n options: [\n // `icon` → the accent `IconTile` (the long-standing default, so an\n // existing saved theme opens on the same row it was saved against).\n // `media` → the node renders as-is; the preview passes a `Thumbnail`,\n // which is the shape this slot exists for (product / people rows).\n { value: 'icon', label: 'Icon' },\n { value: 'media', label: 'Media' },\n ],\n defaultValue: 'icon',\n },\n {\n key: 'value',\n label: 'Value Text',\n options: [\n { value: 'shown', label: 'Shown' },\n { value: 'hidden', label: 'Hidden' },\n ],\n defaultValue: 'shown',\n },\n // No `trailing` variant — the preview chooses what to show in\n // the trailing slot based on `mode` (chevron for interactive,\n // Tag for static). Real consumers pass any ReactNode via the\n // atom's `trailing` prop; the editor preview demos the\n // canonical patterns only.\n ],\n};\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"list-item.d.ts","sourceRoot":"","sources":["../../../../../src/studio/lib/registry/composite/list-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,WAAW,EAAE,YA0HzB,CAAC"}
1
+ {"version":3,"file":"list-item.d.ts","sourceRoot":"","sources":["../../../../../src/studio/lib/registry/composite/list-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,WAAW,EAAE,YA8IzB,CAAC"}
@@ -26,8 +26,16 @@ const listItemDef = {
26
26
  { key: "focusRing", label: "Ring Color", control: "color", defaultValue: "var(--color-accent)", section: "focusState", showWhen: { state: "focus", mode: "interactive" } },
27
27
  { key: "disabledOpacity", label: "Opacity", control: "slider", defaultValue: 0.5, min: 0.1, max: 1, step: 0.05, section: "disabledState", showWhen: { state: "disabled" } },
28
28
  // ── Container (List wrapper)
29
+ // NOT container-gated, despite the label and the section it sits in:
30
+ // `borderColor` maps to `--uxm-list-item-border-color`, whose only read is
31
+ // the ROW divider (`.uxm-list-item` border-bottom). The container's own
32
+ // border is a hardcoded `var(--color-border)` with no knob. Gating this on
33
+ // `card` took the divider colour away from `plain` — the one presentation
34
+ // where the dividers are the only separator left.
29
35
  { key: "borderColor", label: "Border Color", control: "color", defaultValue: "var(--color-border)", section: "container" },
30
- { key: "borderRadius", label: "Border Radius", control: "slider", defaultValue: 8, min: 0, max: 16, step: 1, unit: "px", section: "container" },
36
+ // This one IS the container's: `--uxm-list-item-border-radius` is read only
37
+ // by `.uxm-list`'s own radius, which `plain` removes.
38
+ { key: "borderRadius", label: "Border Radius", control: "slider", defaultValue: 8, min: 0, max: 16, step: 1, unit: "px", section: "container", showWhen: { container: "card" } },
31
39
  // ── Shared sizing (applies to every state)
32
40
  { key: "paddingX", label: "Padding X", control: "number", defaultValue: 16, min: 8, max: 32, step: 2, unit: "px" },
33
41
  { key: "paddingY", label: "Padding Y", control: "number", defaultValue: 12, min: 4, max: 24, step: 2, unit: "px" },
@@ -92,6 +100,18 @@ const listItemDef = {
92
100
  ],
93
101
  defaultValue: "default"
94
102
  },
103
+ {
104
+ // The List wrapper's presentation, not the row's — but it lives on this
105
+ // entry because `List` has no registry entry of its own and its two
106
+ // container knobs (Border Color / Border Radius) are already here.
107
+ key: "container",
108
+ label: "Container",
109
+ options: [
110
+ { value: "card", label: "Card" },
111
+ { value: "plain", label: "Plain" }
112
+ ],
113
+ defaultValue: "card"
114
+ },
95
115
  {
96
116
  key: "leading",
97
117
  label: "Leading",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/studio/lib/registry/composite/list-item.ts"],"sourcesContent":["import type { ComponentDef } from '../../types';\n\nexport const listItemDef: ComponentDef = {\n id: 'list-item',\n name: 'List Item',\n category: 'Composite',\n description: \"Row with a leading slot (accent icon tile, or media rendered as-is for a thumbnail / avatar), title, and optional trailing slot — used in stacked lists. Renders as `<div>` (static) or `<button>` / `<a>` (interactive) depending on the atom's `interactive` / `href` props. State knobs gate on `mode` rather than trailing — trailing is purely a visual choice and the two are orthogonal: an interactive row can have any trailing, a static row can have a chevron decoration without being tappable.\",\n styleProperties: [\n // ── Per-state row colors. Filtered into the \"States\" section by\n // the State variant. Default-state knobs (`inactiveBg`,\n // `inactiveText`) gate on `state: \"default\"` only — so the bg /\n // text are editable in both static and interactive modes. The\n // interactive-only state knobs (hover / focus / active)\n // additionally gate on `mode: \"interactive\"` so they hide\n // entirely when the row is rendered as a display-only `<div>`.\n // `disabled` is a visual treatment, not an interaction state, so\n // its knobs are NOT mode-gated.\n { key: 'inactiveBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'states', showWhen: { state: 'default' } },\n { key: 'inactiveText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'default' } },\n { key: 'hoverBg', label: 'Background', control: 'color', defaultValue: 'var(--color-surface-alt)', section: 'states', showWhen: { state: 'hover', mode: 'interactive' } },\n { key: 'hoverText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'hover', mode: 'interactive' } },\n { key: 'focusText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'focus', mode: 'interactive' } },\n { key: 'activeBg', label: 'Background', control: 'color', defaultValue: 'var(--color-accent-subtle)', section: 'states', showWhen: { state: 'active', mode: 'interactive' } },\n { key: 'activeText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'states', showWhen: { state: 'active', mode: 'interactive' } },\n { key: 'disabledBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'states', showWhen: { state: 'disabled' } },\n { key: 'disabledText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'states', showWhen: { state: 'disabled' } },\n // Focus ring + disabled opacity in their own sections.\n { key: 'focusRing', label: 'Ring Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'focusState', showWhen: { state: 'focus', mode: 'interactive' } },\n { key: 'disabledOpacity', label: 'Opacity', control: 'slider', defaultValue: 0.5, min: 0.1, max: 1, step: 0.05, section: 'disabledState', showWhen: { state: 'disabled' } },\n // ── Container (List wrapper)\n { key: 'borderColor', label: 'Border Color', control: 'color', defaultValue: 'var(--color-border)', section: 'container' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 8, min: 0, max: 16, step: 1, unit: 'px', section: 'container' },\n // ── Shared sizing (applies to every state)\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 16, min: 8, max: 32, step: 2, unit: 'px' },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 12, min: 4, max: 24, step: 2, unit: 'px' },\n { key: 'gap', label: 'Icon Gap', control: 'number', defaultValue: 12, min: 4, max: 24, step: 2, unit: 'px' },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 14, min: 11, max: 18, step: 1, unit: 'px' },\n // ── Sub-elements (shared across every state)\n { key: 'valueColor', label: 'Value Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'value', showWhen: { value: 'shown' } },\n { key: 'valueSize', label: 'Value Size', control: 'number', defaultValue: 12, min: 10, max: 16, step: 1, unit: 'px', section: 'value', showWhen: { value: 'shown' } },\n // Trailing slot is purely composable — the consumer passes whatever\n // ReactNode they want. The preview demos the canonical pattern per\n // mode (chevron for interactive nav rows, Tag for static status\n // rows), so a single Chevron Color knob covers the interactive\n // example. Other trailing decorations (Tag, Badge, Avatar, etc.)\n // bring their own styling via their respective atoms.\n { key: 'chevronColor', label: 'Chevron Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'trailing', showWhen: { mode: 'interactive' } },\n // High-contrast icon \"stamp\" — bright accent tile with a card-coloured\n // glyph inside. Keeps the icon visually distinct from the row bg in\n // every state (default / hover / active / disabled), so the shared\n // icon knobs don't need to vary per-state.\n { key: 'iconBg', label: 'Icon Bg', control: 'color', defaultValue: 'var(--color-accent)', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconColor', label: 'Icon Color', control: 'color', defaultValue: 'var(--color-card)', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconSize', label: 'Icon Size', control: 'number', defaultValue: 24, min: 16, max: 40, step: 2, unit: 'px', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconRadius', label: 'Icon Radius', control: 'slider', defaultValue: 6, min: 0, max: 16, step: 1, unit: 'px', section: 'icon', showWhen: { leading: 'icon' } },\n // Media slot is the un-tiled leading alternative: the passed node\n // (Thumbnail / avatar / <img>) brings its own surface and radius, so\n // the row only owns the box it sits in — one size knob, no colours.\n { key: 'mediaSize', label: 'Media Size', control: 'number', defaultValue: 36, min: 24, max: 64, step: 2, unit: 'px', section: 'media', showWhen: { leading: 'media' } },\n ],\n layoutVariants: [\n {\n key: 'mode',\n label: 'Mode',\n options: [\n // `static` → renders as `<div>`; no hover / focus / active\n // styling. `interactive` → renders as `<button>` (or `<a>`\n // when href is passed); full state styling. Mode is\n // orthogonal to trailing: any trailing can sit in either mode.\n { value: 'static', label: 'Static' },\n { value: 'interactive', label: 'Interactive' },\n ],\n defaultValue: 'interactive',\n },\n {\n key: 'state',\n label: 'State',\n options: [\n // `default` and `disabled` are always available — every row\n // has a resting state, and `disabled` is a visual treatment\n // (dimmed, muted) that applies regardless of mode. The CSS\n // rule includes a bare `.uxm-list-item[aria-disabled]`\n // selector that fires on `<div>` as well as `<button>` /\n // `<a>`. The interactive-only states (hover / focus / active)\n // are option-level-gated to `mode: \"interactive\"`: when the\n // row is static, the picker collapses to \"Default\" +\n // \"Disabled\", which self-explains as \"this row only has\n // visual states\" without the picker disappearing.\n { value: 'default', label: 'Default' },\n { value: 'hover', label: 'Hover', showWhen: { mode: 'interactive' } },\n { value: 'focus', label: 'Focus', showWhen: { mode: 'interactive' } },\n { value: 'active', label: 'Active', showWhen: { mode: 'interactive' } },\n { value: 'disabled', label: 'Disabled' },\n ],\n defaultValue: 'default',\n },\n {\n key: 'leading',\n label: 'Leading',\n options: [\n // `icon` → the accent `IconTile` (the long-standing default, so an\n // existing saved theme opens on the same row it was saved against).\n // `media` → the node renders as-is; the preview passes a `Thumbnail`,\n // which is the shape this slot exists for (product / people rows).\n { value: 'icon', label: 'Icon' },\n { value: 'media', label: 'Media' },\n ],\n defaultValue: 'icon',\n },\n {\n key: 'value',\n label: 'Value Text',\n options: [\n { value: 'shown', label: 'Shown' },\n { value: 'hidden', label: 'Hidden' },\n ],\n defaultValue: 'shown',\n },\n // No `trailing` variant — the preview chooses what to show in\n // the trailing slot based on `mode` (chevron for interactive,\n // Tag for static). Real consumers pass any ReactNode via the\n // atom's `trailing` prop; the editor preview demos the\n // canonical patterns only.\n ],\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../src/studio/lib/registry/composite/list-item.ts"],"sourcesContent":["import type { ComponentDef } from '../../types';\n\nexport const listItemDef: ComponentDef = {\n id: 'list-item',\n name: 'List Item',\n category: 'Composite',\n description: \"Row with a leading slot (accent icon tile, or media rendered as-is for a thumbnail / avatar), title, and optional trailing slot — used in stacked lists. Renders as `<div>` (static) or `<button>` / `<a>` (interactive) depending on the atom's `interactive` / `href` props. State knobs gate on `mode` rather than trailing — trailing is purely a visual choice and the two are orthogonal: an interactive row can have any trailing, a static row can have a chevron decoration without being tappable.\",\n styleProperties: [\n // ── Per-state row colors. Filtered into the \"States\" section by\n // the State variant. Default-state knobs (`inactiveBg`,\n // `inactiveText`) gate on `state: \"default\"` only — so the bg /\n // text are editable in both static and interactive modes. The\n // interactive-only state knobs (hover / focus / active)\n // additionally gate on `mode: \"interactive\"` so they hide\n // entirely when the row is rendered as a display-only `<div>`.\n // `disabled` is a visual treatment, not an interaction state, so\n // its knobs are NOT mode-gated.\n { key: 'inactiveBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'states', showWhen: { state: 'default' } },\n { key: 'inactiveText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'default' } },\n { key: 'hoverBg', label: 'Background', control: 'color', defaultValue: 'var(--color-surface-alt)', section: 'states', showWhen: { state: 'hover', mode: 'interactive' } },\n { key: 'hoverText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'hover', mode: 'interactive' } },\n { key: 'focusText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'states', showWhen: { state: 'focus', mode: 'interactive' } },\n { key: 'activeBg', label: 'Background', control: 'color', defaultValue: 'var(--color-accent-subtle)', section: 'states', showWhen: { state: 'active', mode: 'interactive' } },\n { key: 'activeText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'states', showWhen: { state: 'active', mode: 'interactive' } },\n { key: 'disabledBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'states', showWhen: { state: 'disabled' } },\n { key: 'disabledText', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'states', showWhen: { state: 'disabled' } },\n // Focus ring + disabled opacity in their own sections.\n { key: 'focusRing', label: 'Ring Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'focusState', showWhen: { state: 'focus', mode: 'interactive' } },\n { key: 'disabledOpacity', label: 'Opacity', control: 'slider', defaultValue: 0.5, min: 0.1, max: 1, step: 0.05, section: 'disabledState', showWhen: { state: 'disabled' } },\n // ── Container (List wrapper)\n // NOT container-gated, despite the label and the section it sits in:\n // `borderColor` maps to `--uxm-list-item-border-color`, whose only read is\n // the ROW divider (`.uxm-list-item` border-bottom). The container's own\n // border is a hardcoded `var(--color-border)` with no knob. Gating this on\n // `card` took the divider colour away from `plain` — the one presentation\n // where the dividers are the only separator left.\n { key: 'borderColor', label: 'Border Color', control: 'color', defaultValue: 'var(--color-border)', section: 'container' },\n // This one IS the container's: `--uxm-list-item-border-radius` is read only\n // by `.uxm-list`'s own radius, which `plain` removes.\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 8, min: 0, max: 16, step: 1, unit: 'px', section: 'container', showWhen: { container: 'card' } },\n // ── Shared sizing (applies to every state)\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 16, min: 8, max: 32, step: 2, unit: 'px' },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 12, min: 4, max: 24, step: 2, unit: 'px' },\n { key: 'gap', label: 'Icon Gap', control: 'number', defaultValue: 12, min: 4, max: 24, step: 2, unit: 'px' },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 14, min: 11, max: 18, step: 1, unit: 'px' },\n // ── Sub-elements (shared across every state)\n { key: 'valueColor', label: 'Value Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'value', showWhen: { value: 'shown' } },\n { key: 'valueSize', label: 'Value Size', control: 'number', defaultValue: 12, min: 10, max: 16, step: 1, unit: 'px', section: 'value', showWhen: { value: 'shown' } },\n // Trailing slot is purely composable — the consumer passes whatever\n // ReactNode they want. The preview demos the canonical pattern per\n // mode (chevron for interactive nav rows, Tag for static status\n // rows), so a single Chevron Color knob covers the interactive\n // example. Other trailing decorations (Tag, Badge, Avatar, etc.)\n // bring their own styling via their respective atoms.\n { key: 'chevronColor', label: 'Chevron Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'trailing', showWhen: { mode: 'interactive' } },\n // High-contrast icon \"stamp\" — bright accent tile with a card-coloured\n // glyph inside. Keeps the icon visually distinct from the row bg in\n // every state (default / hover / active / disabled), so the shared\n // icon knobs don't need to vary per-state.\n { key: 'iconBg', label: 'Icon Bg', control: 'color', defaultValue: 'var(--color-accent)', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconColor', label: 'Icon Color', control: 'color', defaultValue: 'var(--color-card)', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconSize', label: 'Icon Size', control: 'number', defaultValue: 24, min: 16, max: 40, step: 2, unit: 'px', section: 'icon', showWhen: { leading: 'icon' } },\n { key: 'iconRadius', label: 'Icon Radius', control: 'slider', defaultValue: 6, min: 0, max: 16, step: 1, unit: 'px', section: 'icon', showWhen: { leading: 'icon' } },\n // Media slot is the un-tiled leading alternative: the passed node\n // (Thumbnail / avatar / <img>) brings its own surface and radius, so\n // the row only owns the box it sits in — one size knob, no colours.\n { key: 'mediaSize', label: 'Media Size', control: 'number', defaultValue: 36, min: 24, max: 64, step: 2, unit: 'px', section: 'media', showWhen: { leading: 'media' } },\n ],\n layoutVariants: [\n {\n key: 'mode',\n label: 'Mode',\n options: [\n // `static` → renders as `<div>`; no hover / focus / active\n // styling. `interactive` → renders as `<button>` (or `<a>`\n // when href is passed); full state styling. Mode is\n // orthogonal to trailing: any trailing can sit in either mode.\n { value: 'static', label: 'Static' },\n { value: 'interactive', label: 'Interactive' },\n ],\n defaultValue: 'interactive',\n },\n {\n key: 'state',\n label: 'State',\n options: [\n // `default` and `disabled` are always available — every row\n // has a resting state, and `disabled` is a visual treatment\n // (dimmed, muted) that applies regardless of mode. The CSS\n // rule includes a bare `.uxm-list-item[aria-disabled]`\n // selector that fires on `<div>` as well as `<button>` /\n // `<a>`. The interactive-only states (hover / focus / active)\n // are option-level-gated to `mode: \"interactive\"`: when the\n // row is static, the picker collapses to \"Default\" +\n // \"Disabled\", which self-explains as \"this row only has\n // visual states\" without the picker disappearing.\n { value: 'default', label: 'Default' },\n { value: 'hover', label: 'Hover', showWhen: { mode: 'interactive' } },\n { value: 'focus', label: 'Focus', showWhen: { mode: 'interactive' } },\n { value: 'active', label: 'Active', showWhen: { mode: 'interactive' } },\n { value: 'disabled', label: 'Disabled' },\n ],\n defaultValue: 'default',\n },\n {\n // The List wrapper's presentation, not the row's — but it lives on this\n // entry because `List` has no registry entry of its own and its two\n // container knobs (Border Color / Border Radius) are already here.\n key: 'container',\n label: 'Container',\n options: [\n { value: 'card', label: 'Card' },\n { value: 'plain', label: 'Plain' },\n ],\n defaultValue: 'card',\n },\n {\n key: 'leading',\n label: 'Leading',\n options: [\n // `icon` → the accent `IconTile` (the long-standing default, so an\n // existing saved theme opens on the same row it was saved against).\n // `media` → the node renders as-is; the preview passes a `Thumbnail`,\n // which is the shape this slot exists for (product / people rows).\n { value: 'icon', label: 'Icon' },\n { value: 'media', label: 'Media' },\n ],\n defaultValue: 'icon',\n },\n {\n key: 'value',\n label: 'Value Text',\n options: [\n { value: 'shown', label: 'Shown' },\n { value: 'hidden', label: 'Hidden' },\n ],\n defaultValue: 'shown',\n },\n // No `trailing` variant — the preview chooses what to show in\n // the trailing slot based on `mode` (chevron for interactive,\n // Tag for static). Real consumers pass any ReactNode via the\n // atom's `trailing` prop; the editor preview demos the\n // canonical patterns only.\n ],\n};\n"],"mappings":"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","names":[]}
@@ -27,20 +27,20 @@ __export(button_exports, {
27
27
  module.exports = __toCommonJS(button_exports);
28
28
  var import_jsx_runtime = require("react/jsx-runtime");
29
29
  var import_helpers = require("../../helpers/index.cjs");
30
- function ButtonPrimary({ className, type = "button", ...rest }) {
31
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type, className: (0, import_helpers.cn)("uxm-button-primary", className), ...rest });
30
+ function ButtonPrimary({ className, type = "button", ref, ...rest }) {
31
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref, type, className: (0, import_helpers.cn)("uxm-button-primary", className), ...rest });
32
32
  }
33
- function ButtonSecondary({ className, type = "button", ...rest }) {
34
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type, className: (0, import_helpers.cn)("uxm-button-secondary", className), ...rest });
33
+ function ButtonSecondary({ className, type = "button", ref, ...rest }) {
34
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref, type, className: (0, import_helpers.cn)("uxm-button-secondary", className), ...rest });
35
35
  }
36
- function ButtonTertiary({ className, type = "button", ...rest }) {
37
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type, className: (0, import_helpers.cn)("uxm-button-tertiary", className), ...rest });
36
+ function ButtonTertiary({ className, type = "button", ref, ...rest }) {
37
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref, type, className: (0, import_helpers.cn)("uxm-button-tertiary", className), ...rest });
38
38
  }
39
- function ButtonGhost({ className, type = "button", ...rest }) {
40
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type, className: (0, import_helpers.cn)("uxm-button-ghost", className), ...rest });
39
+ function ButtonGhost({ className, type = "button", ref, ...rest }) {
40
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref, type, className: (0, import_helpers.cn)("uxm-button-ghost", className), ...rest });
41
41
  }
42
- function ButtonDanger({ className, type = "button", ...rest }) {
43
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { type, className: (0, import_helpers.cn)("uxm-button-danger", className), ...rest });
42
+ function ButtonDanger({ className, type = "button", ref, ...rest }) {
43
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { ref, type, className: (0, import_helpers.cn)("uxm-button-danger", className), ...rest });
44
44
  }
45
45
  // Annotate the CommonJS export names for ESM import in node:
46
46
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/button/button.tsx"],"sourcesContent":["import { cn } from '@/helpers';\n\nimport type { ButtonHTMLAttributes } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type -- ButtonProps is a named alias for native button attrs (no extra members needed yet); shared by all button variants.\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport function ButtonPrimary({ className, type = 'button', ...rest }: ButtonProps) {\n return <button type={type} className={cn('uxm-button-primary', className)} {...rest} />;\n}\n\nexport function ButtonSecondary({ className, type = 'button', ...rest }: ButtonProps) {\n return <button type={type} className={cn('uxm-button-secondary', className)} {...rest} />;\n}\n\nexport function ButtonTertiary({ className, type = 'button', ...rest }: ButtonProps) {\n return <button type={type} className={cn('uxm-button-tertiary', className)} {...rest} />;\n}\n\nexport function ButtonGhost({ className, type = 'button', ...rest }: ButtonProps) {\n return <button type={type} className={cn('uxm-button-ghost', className)} {...rest} />;\n}\n\nexport function ButtonDanger({ className, type = 'button', ...rest }: ButtonProps) {\n return <button type={type} className={cn('uxm-button-danger', className)} {...rest} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQS;AART,qBAAmB;AAOZ,SAAS,cAAc,EAAE,WAAW,OAAO,UAAU,GAAG,KAAK,GAAgB;AAClF,SAAO,4CAAC,YAAO,MAAY,eAAW,mBAAG,sBAAsB,SAAS,GAAI,GAAG,MAAM;AACvF;AAEO,SAAS,gBAAgB,EAAE,WAAW,OAAO,UAAU,GAAG,KAAK,GAAgB;AACpF,SAAO,4CAAC,YAAO,MAAY,eAAW,mBAAG,wBAAwB,SAAS,GAAI,GAAG,MAAM;AACzF;AAEO,SAAS,eAAe,EAAE,WAAW,OAAO,UAAU,GAAG,KAAK,GAAgB;AACnF,SAAO,4CAAC,YAAO,MAAY,eAAW,mBAAG,uBAAuB,SAAS,GAAI,GAAG,MAAM;AACxF;AAEO,SAAS,YAAY,EAAE,WAAW,OAAO,UAAU,GAAG,KAAK,GAAgB;AAChF,SAAO,4CAAC,YAAO,MAAY,eAAW,mBAAG,oBAAoB,SAAS,GAAI,GAAG,MAAM;AACrF;AAEO,SAAS,aAAa,EAAE,WAAW,OAAO,UAAU,GAAG,KAAK,GAAgB;AACjF,SAAO,4CAAC,YAAO,MAAY,eAAW,mBAAG,qBAAqB,SAAS,GAAI,GAAG,MAAM;AACtF;","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/button/button.tsx"],"sourcesContent":["import { cn } from '@/helpers';\n\nimport type { ComponentPropsWithRef } from 'react';\n\n/**\n * Native `<button>` attributes **including `ref`**, shared by every variant.\n *\n * `ComponentPropsWithRef<'button'>` rather than `ButtonHTMLAttributes`: React 19\n * passes `ref` as an ordinary prop, so it already reached the element through\n * the rest spread — but `ButtonHTMLAttributes` does not declare it, so\n * `<ButtonPrimary ref={…}>` was a type error for every TypeScript consumer even\n * though it worked at runtime. That is what blocked the buttons from being\n * `HoverTooltip` / `Popover` anchors without a wrapper element around them.\n *\n * Not `forwardRef`: 4.39 deliberately moved `Modal`'s sub-components the other\n * way, off `forwardRef` and onto React 19 ref props.\n */\nexport type ButtonProps = ComponentPropsWithRef<'button'>;\n\nexport function ButtonPrimary({ className, type = 'button', ref, ...rest }: ButtonProps) {\n return <button ref={ref} type={type} className={cn('uxm-button-primary', className)} {...rest} />;\n}\n\nexport function ButtonSecondary({ className, type = 'button', ref, ...rest }: ButtonProps) {\n return <button ref={ref} type={type} className={cn('uxm-button-secondary', className)} {...rest} />;\n}\n\nexport function ButtonTertiary({ className, type = 'button', ref, ...rest }: ButtonProps) {\n return <button ref={ref} type={type} className={cn('uxm-button-tertiary', className)} {...rest} />;\n}\n\nexport function ButtonGhost({ className, type = 'button', ref, ...rest }: ButtonProps) {\n return <button ref={ref} type={type} className={cn('uxm-button-ghost', className)} {...rest} />;\n}\n\nexport function ButtonDanger({ className, type = 'button', ref, ...rest }: ButtonProps) {\n return <button ref={ref} type={type} className={cn('uxm-button-danger', className)} {...rest} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBS;AApBT,qBAAmB;AAmBZ,SAAS,cAAc,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,KAAK,GAAgB;AACvF,SAAO,4CAAC,YAAO,KAAU,MAAY,eAAW,mBAAG,sBAAsB,SAAS,GAAI,GAAG,MAAM;AACjG;AAEO,SAAS,gBAAgB,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,KAAK,GAAgB;AACzF,SAAO,4CAAC,YAAO,KAAU,MAAY,eAAW,mBAAG,wBAAwB,SAAS,GAAI,GAAG,MAAM;AACnG;AAEO,SAAS,eAAe,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,KAAK,GAAgB;AACxF,SAAO,4CAAC,YAAO,KAAU,MAAY,eAAW,mBAAG,uBAAuB,SAAS,GAAI,GAAG,MAAM;AAClG;AAEO,SAAS,YAAY,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,KAAK,GAAgB;AACrF,SAAO,4CAAC,YAAO,KAAU,MAAY,eAAW,mBAAG,oBAAoB,SAAS,GAAI,GAAG,MAAM;AAC/F;AAEO,SAAS,aAAa,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,KAAK,GAAgB;AACtF,SAAO,4CAAC,YAAO,KAAU,MAAY,eAAW,mBAAG,qBAAqB,SAAS,GAAI,GAAG,MAAM;AAChG;","names":[]}
@@ -1,9 +1,21 @@
1
- import type { ButtonHTMLAttributes } from 'react';
2
- export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
3
- }
4
- export declare function ButtonPrimary({ className, type, ...rest }: ButtonProps): import("react").JSX.Element;
5
- export declare function ButtonSecondary({ className, type, ...rest }: ButtonProps): import("react").JSX.Element;
6
- export declare function ButtonTertiary({ className, type, ...rest }: ButtonProps): import("react").JSX.Element;
7
- export declare function ButtonGhost({ className, type, ...rest }: ButtonProps): import("react").JSX.Element;
8
- export declare function ButtonDanger({ className, type, ...rest }: ButtonProps): import("react").JSX.Element;
1
+ import type { ComponentPropsWithRef } from 'react';
2
+ /**
3
+ * Native `<button>` attributes **including `ref`**, shared by every variant.
4
+ *
5
+ * `ComponentPropsWithRef<'button'>` rather than `ButtonHTMLAttributes`: React 19
6
+ * passes `ref` as an ordinary prop, so it already reached the element through
7
+ * the rest spread but `ButtonHTMLAttributes` does not declare it, so
8
+ * `<ButtonPrimary ref={…}>` was a type error for every TypeScript consumer even
9
+ * though it worked at runtime. That is what blocked the buttons from being
10
+ * `HoverTooltip` / `Popover` anchors without a wrapper element around them.
11
+ *
12
+ * Not `forwardRef`: 4.39 deliberately moved `Modal`'s sub-components the other
13
+ * way, off `forwardRef` and onto React 19 ref props.
14
+ */
15
+ export type ButtonProps = ComponentPropsWithRef<'button'>;
16
+ export declare function ButtonPrimary({ className, type, ref, ...rest }: ButtonProps): import("react").JSX.Element;
17
+ export declare function ButtonSecondary({ className, type, ref, ...rest }: ButtonProps): import("react").JSX.Element;
18
+ export declare function ButtonTertiary({ className, type, ref, ...rest }: ButtonProps): import("react").JSX.Element;
19
+ export declare function ButtonGhost({ className, type, ref, ...rest }: ButtonProps): import("react").JSX.Element;
20
+ export declare function ButtonDanger({ className, type, ref, ...rest }: ButtonProps): import("react").JSX.Element;
9
21
  //# sourceMappingURL=button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/ui/button/button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAGlD,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;CAAG;AAE/E,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAEjF;AAED,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAEnF;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAElF;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAE/E;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAEhF"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/ui/button/button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAE1D,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAEtF;AAED,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAExF;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAEvF;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAEpF;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,IAAe,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,+BAErF"}
@@ -1,19 +1,19 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { cn } from "../../helpers/index.js";
3
- function ButtonPrimary({ className, type = "button", ...rest }) {
4
- return /* @__PURE__ */ jsx("button", { type, className: cn("uxm-button-primary", className), ...rest });
3
+ function ButtonPrimary({ className, type = "button", ref, ...rest }) {
4
+ return /* @__PURE__ */ jsx("button", { ref, type, className: cn("uxm-button-primary", className), ...rest });
5
5
  }
6
- function ButtonSecondary({ className, type = "button", ...rest }) {
7
- return /* @__PURE__ */ jsx("button", { type, className: cn("uxm-button-secondary", className), ...rest });
6
+ function ButtonSecondary({ className, type = "button", ref, ...rest }) {
7
+ return /* @__PURE__ */ jsx("button", { ref, type, className: cn("uxm-button-secondary", className), ...rest });
8
8
  }
9
- function ButtonTertiary({ className, type = "button", ...rest }) {
10
- return /* @__PURE__ */ jsx("button", { type, className: cn("uxm-button-tertiary", className), ...rest });
9
+ function ButtonTertiary({ className, type = "button", ref, ...rest }) {
10
+ return /* @__PURE__ */ jsx("button", { ref, type, className: cn("uxm-button-tertiary", className), ...rest });
11
11
  }
12
- function ButtonGhost({ className, type = "button", ...rest }) {
13
- return /* @__PURE__ */ jsx("button", { type, className: cn("uxm-button-ghost", className), ...rest });
12
+ function ButtonGhost({ className, type = "button", ref, ...rest }) {
13
+ return /* @__PURE__ */ jsx("button", { ref, type, className: cn("uxm-button-ghost", className), ...rest });
14
14
  }
15
- function ButtonDanger({ className, type = "button", ...rest }) {
16
- return /* @__PURE__ */ jsx("button", { type, className: cn("uxm-button-danger", className), ...rest });
15
+ function ButtonDanger({ className, type = "button", ref, ...rest }) {
16
+ return /* @__PURE__ */ jsx("button", { ref, type, className: cn("uxm-button-danger", className), ...rest });
17
17
  }
18
18
  export {
19
19
  ButtonDanger,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/button/button.tsx"],"sourcesContent":["import { cn } from '@/helpers';\n\nimport type { ButtonHTMLAttributes } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type -- ButtonProps is a named alias for native button attrs (no extra members needed yet); shared by all button variants.\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport function ButtonPrimary({ className, type = 'button', ...rest }: ButtonProps) {\n return <button type={type} className={cn('uxm-button-primary', className)} {...rest} />;\n}\n\nexport function ButtonSecondary({ className, type = 'button', ...rest }: ButtonProps) {\n return <button type={type} className={cn('uxm-button-secondary', className)} {...rest} />;\n}\n\nexport function ButtonTertiary({ className, type = 'button', ...rest }: ButtonProps) {\n return <button type={type} className={cn('uxm-button-tertiary', className)} {...rest} />;\n}\n\nexport function ButtonGhost({ className, type = 'button', ...rest }: ButtonProps) {\n return <button type={type} className={cn('uxm-button-ghost', className)} {...rest} />;\n}\n\nexport function ButtonDanger({ className, type = 'button', ...rest }: ButtonProps) {\n return <button type={type} className={cn('uxm-button-danger', className)} {...rest} />;\n}\n"],"mappings":"AAQS;AART,SAAS,UAAU;AAOZ,SAAS,cAAc,EAAE,WAAW,OAAO,UAAU,GAAG,KAAK,GAAgB;AAClF,SAAO,oBAAC,YAAO,MAAY,WAAW,GAAG,sBAAsB,SAAS,GAAI,GAAG,MAAM;AACvF;AAEO,SAAS,gBAAgB,EAAE,WAAW,OAAO,UAAU,GAAG,KAAK,GAAgB;AACpF,SAAO,oBAAC,YAAO,MAAY,WAAW,GAAG,wBAAwB,SAAS,GAAI,GAAG,MAAM;AACzF;AAEO,SAAS,eAAe,EAAE,WAAW,OAAO,UAAU,GAAG,KAAK,GAAgB;AACnF,SAAO,oBAAC,YAAO,MAAY,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,MAAM;AACxF;AAEO,SAAS,YAAY,EAAE,WAAW,OAAO,UAAU,GAAG,KAAK,GAAgB;AAChF,SAAO,oBAAC,YAAO,MAAY,WAAW,GAAG,oBAAoB,SAAS,GAAI,GAAG,MAAM;AACrF;AAEO,SAAS,aAAa,EAAE,WAAW,OAAO,UAAU,GAAG,KAAK,GAAgB;AACjF,SAAO,oBAAC,YAAO,MAAY,WAAW,GAAG,qBAAqB,SAAS,GAAI,GAAG,MAAM;AACtF;","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/button/button.tsx"],"sourcesContent":["import { cn } from '@/helpers';\n\nimport type { ComponentPropsWithRef } from 'react';\n\n/**\n * Native `<button>` attributes **including `ref`**, shared by every variant.\n *\n * `ComponentPropsWithRef<'button'>` rather than `ButtonHTMLAttributes`: React 19\n * passes `ref` as an ordinary prop, so it already reached the element through\n * the rest spread — but `ButtonHTMLAttributes` does not declare it, so\n * `<ButtonPrimary ref={…}>` was a type error for every TypeScript consumer even\n * though it worked at runtime. That is what blocked the buttons from being\n * `HoverTooltip` / `Popover` anchors without a wrapper element around them.\n *\n * Not `forwardRef`: 4.39 deliberately moved `Modal`'s sub-components the other\n * way, off `forwardRef` and onto React 19 ref props.\n */\nexport type ButtonProps = ComponentPropsWithRef<'button'>;\n\nexport function ButtonPrimary({ className, type = 'button', ref, ...rest }: ButtonProps) {\n return <button ref={ref} type={type} className={cn('uxm-button-primary', className)} {...rest} />;\n}\n\nexport function ButtonSecondary({ className, type = 'button', ref, ...rest }: ButtonProps) {\n return <button ref={ref} type={type} className={cn('uxm-button-secondary', className)} {...rest} />;\n}\n\nexport function ButtonTertiary({ className, type = 'button', ref, ...rest }: ButtonProps) {\n return <button ref={ref} type={type} className={cn('uxm-button-tertiary', className)} {...rest} />;\n}\n\nexport function ButtonGhost({ className, type = 'button', ref, ...rest }: ButtonProps) {\n return <button ref={ref} type={type} className={cn('uxm-button-ghost', className)} {...rest} />;\n}\n\nexport function ButtonDanger({ className, type = 'button', ref, ...rest }: ButtonProps) {\n return <button ref={ref} type={type} className={cn('uxm-button-danger', className)} {...rest} />;\n}\n"],"mappings":"AAoBS;AApBT,SAAS,UAAU;AAmBZ,SAAS,cAAc,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,KAAK,GAAgB;AACvF,SAAO,oBAAC,YAAO,KAAU,MAAY,WAAW,GAAG,sBAAsB,SAAS,GAAI,GAAG,MAAM;AACjG;AAEO,SAAS,gBAAgB,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,KAAK,GAAgB;AACzF,SAAO,oBAAC,YAAO,KAAU,MAAY,WAAW,GAAG,wBAAwB,SAAS,GAAI,GAAG,MAAM;AACnG;AAEO,SAAS,eAAe,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,KAAK,GAAgB;AACxF,SAAO,oBAAC,YAAO,KAAU,MAAY,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,MAAM;AAClG;AAEO,SAAS,YAAY,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,KAAK,GAAgB;AACrF,SAAO,oBAAC,YAAO,KAAU,MAAY,WAAW,GAAG,oBAAoB,SAAS,GAAI,GAAG,MAAM;AAC/F;AAEO,SAAS,aAAa,EAAE,WAAW,OAAO,UAAU,KAAK,GAAG,KAAK,GAAgB;AACtF,SAAO,oBAAC,YAAO,KAAU,MAAY,WAAW,GAAG,qBAAqB,SAAS,GAAI,GAAG,MAAM;AAChG;","names":[]}
@@ -28,11 +28,13 @@ function IconButton({
28
28
  className,
29
29
  type = "button",
30
30
  variant = "ghost",
31
+ ref,
31
32
  ...rest
32
33
  }) {
33
34
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
34
35
  "button",
35
36
  {
37
+ ref,
36
38
  type,
37
39
  className: (0, import_helpers.cn)("uxm-icon-button", variant === "filled" && "uxm-icon-button--filled", className),
38
40
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/icon-button/icon-button.tsx"],"sourcesContent":["import { cn } from '@/helpers';\n\nimport type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nexport type IconButtonVariant = 'ghost' | 'filled';\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** SVG content (use the Icon component or a raw <svg>). */\n children: ReactNode;\n /** Required for accessibility on icon-only buttons. */\n 'aria-label': string;\n /**\n * `ghost` (default) — 32px, transparent, for toolbars, row ⋮ and inline\n * chrome. `filled` — 40px, `--color-surface-alt` fill, radius 8, for a\n * standalone action (\"add\", \"create\"). `filled` is the successor of the\n * deprecated `ButtonIcon` atom and paints exactly what it painted.\n */\n variant?: IconButtonVariant;\n}\n\nexport function IconButton({\n children,\n className,\n type = 'button',\n variant = 'ghost',\n ...rest\n}: IconButtonProps) {\n return (\n <button\n type={type}\n className={cn('uxm-icon-button', variant === 'filled' && 'uxm-icon-button--filled', className)}\n {...rest}\n >\n {children}\n </button>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BI;AA5BJ,qBAAmB;AAoBZ,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,GAAG;AACL,GAAoB;AAClB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAW,mBAAG,mBAAmB,YAAY,YAAY,2BAA2B,SAAS;AAAA,MAC5F,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/icon-button/icon-button.tsx"],"sourcesContent":["import { cn } from '@/helpers';\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\n\nexport type IconButtonVariant = 'ghost' | 'filled';\n\nexport interface IconButtonProps extends ComponentPropsWithRef<'button'> {\n /** SVG content (use the Icon component or a raw <svg>). */\n children: ReactNode;\n /** Required for accessibility on icon-only buttons. */\n 'aria-label': string;\n /**\n * `ghost` (default) — 32px, transparent, for toolbars, row ⋮ and inline\n * chrome. `filled` — 40px, `--color-surface-alt` fill, radius 8, for a\n * standalone action (\"add\", \"create\"). `filled` is the successor of the\n * deprecated `ButtonIcon` atom and paints exactly what it painted.\n */\n variant?: IconButtonVariant;\n}\n\nexport function IconButton({\n children,\n className,\n type = 'button',\n variant = 'ghost',\n ref,\n ...rest\n}: IconButtonProps) {\n return (\n <button\n ref={ref}\n type={type}\n className={cn('uxm-icon-button', variant === 'filled' && 'uxm-icon-button--filled', className)}\n {...rest}\n >\n {children}\n </button>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BI;AA7BJ,qBAAmB;AAoBZ,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,eAAW,mBAAG,mBAAmB,YAAY,YAAY,2BAA2B,SAAS;AAAA,MAC5F,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -1,6 +1,6 @@
1
- import type { ButtonHTMLAttributes, ReactNode } from 'react';
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react';
2
2
  export type IconButtonVariant = 'ghost' | 'filled';
3
- export interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
3
+ export interface IconButtonProps extends ComponentPropsWithRef<'button'> {
4
4
  /** SVG content (use the Icon component or a raw <svg>). */
5
5
  children: ReactNode;
6
6
  /** Required for accessibility on icon-only buttons. */
@@ -13,5 +13,5 @@ export interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>
13
13
  */
14
14
  variant?: IconButtonVariant;
15
15
  }
16
- export declare function IconButton({ children, className, type, variant, ...rest }: IconButtonProps): import("react").JSX.Element;
16
+ export declare function IconButton({ children, className, type, variant, ref, ...rest }: IconButtonProps): import("react").JSX.Element;
17
17
  //# sourceMappingURL=icon-button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/ui/icon-button/icon-button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,eAAgB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC9E,2DAA2D;IAC3D,QAAQ,EAAE,SAAS,CAAC;IACpB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,IAAe,EACf,OAAiB,EACjB,GAAG,IAAI,EACR,EAAE,eAAe,+BAUjB"}
1
+ {"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/ui/icon-button/icon-button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,eAAgB,SAAQ,qBAAqB,CAAC,QAAQ,CAAC;IACtE,2DAA2D;IAC3D,QAAQ,EAAE,SAAS,CAAC;IACpB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,IAAe,EACf,OAAiB,EACjB,GAAG,EACH,GAAG,IAAI,EACR,EAAE,eAAe,+BAWjB"}
@@ -5,11 +5,13 @@ function IconButton({
5
5
  className,
6
6
  type = "button",
7
7
  variant = "ghost",
8
+ ref,
8
9
  ...rest
9
10
  }) {
10
11
  return /* @__PURE__ */ jsx(
11
12
  "button",
12
13
  {
14
+ ref,
13
15
  type,
14
16
  className: cn("uxm-icon-button", variant === "filled" && "uxm-icon-button--filled", className),
15
17
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/icon-button/icon-button.tsx"],"sourcesContent":["import { cn } from '@/helpers';\n\nimport type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nexport type IconButtonVariant = 'ghost' | 'filled';\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** SVG content (use the Icon component or a raw <svg>). */\n children: ReactNode;\n /** Required for accessibility on icon-only buttons. */\n 'aria-label': string;\n /**\n * `ghost` (default) — 32px, transparent, for toolbars, row ⋮ and inline\n * chrome. `filled` — 40px, `--color-surface-alt` fill, radius 8, for a\n * standalone action (\"add\", \"create\"). `filled` is the successor of the\n * deprecated `ButtonIcon` atom and paints exactly what it painted.\n */\n variant?: IconButtonVariant;\n}\n\nexport function IconButton({\n children,\n className,\n type = 'button',\n variant = 'ghost',\n ...rest\n}: IconButtonProps) {\n return (\n <button\n type={type}\n className={cn('uxm-icon-button', variant === 'filled' && 'uxm-icon-button--filled', className)}\n {...rest}\n >\n {children}\n </button>\n );\n}\n"],"mappings":"AA4BI;AA5BJ,SAAS,UAAU;AAoBZ,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,GAAG;AACL,GAAoB;AAClB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAW,GAAG,mBAAmB,YAAY,YAAY,2BAA2B,SAAS;AAAA,MAC5F,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/icon-button/icon-button.tsx"],"sourcesContent":["import { cn } from '@/helpers';\n\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\n\nexport type IconButtonVariant = 'ghost' | 'filled';\n\nexport interface IconButtonProps extends ComponentPropsWithRef<'button'> {\n /** SVG content (use the Icon component or a raw <svg>). */\n children: ReactNode;\n /** Required for accessibility on icon-only buttons. */\n 'aria-label': string;\n /**\n * `ghost` (default) — 32px, transparent, for toolbars, row ⋮ and inline\n * chrome. `filled` — 40px, `--color-surface-alt` fill, radius 8, for a\n * standalone action (\"add\", \"create\"). `filled` is the successor of the\n * deprecated `ButtonIcon` atom and paints exactly what it painted.\n */\n variant?: IconButtonVariant;\n}\n\nexport function IconButton({\n children,\n className,\n type = 'button',\n variant = 'ghost',\n ref,\n ...rest\n}: IconButtonProps) {\n return (\n <button\n ref={ref}\n type={type}\n className={cn('uxm-icon-button', variant === 'filled' && 'uxm-icon-button--filled', className)}\n {...rest}\n >\n {children}\n </button>\n );\n}\n"],"mappings":"AA6BI;AA7BJ,SAAS,UAAU;AAoBZ,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,GAAoB;AAClB,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,GAAG,mBAAmB,YAAY,YAAY,2BAA2B,SAAS;AAAA,MAC5F,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/index.ts"],"sourcesContent":["export { AppSidebar, DEFAULT_SIDEBAR_ICON_COLORS } from './app-sidebar';\nexport type {\n AppSidebarBrand,\n AppSidebarIconColor,\n AppSidebarNavItem,\n AppSidebarProps,\n AppSidebarSection,\n} from './app-sidebar';\nexport { AppTopBar } from './app-top-bar';\nexport type { AppTopBarProps } from './app-top-bar';\nexport { Avatar } from './avatar';\nexport type { AvatarProps, AvatarSize, AvatarType } from './avatar';\nexport { BackLink } from './back-link';\nexport type { BackLinkProps } from './back-link';\nexport { Badge } from './badge';\nexport type { BadgeMode, BadgeProps, BadgeType } from './badge';\nexport { Banner } from './banner';\nexport type { BannerProps, BannerVariant } from './banner';\nexport { BulkActionBar } from './bulk-action-bar';\nexport type { BulkAction, BulkActionBarProps } from './bulk-action-bar';\nexport { Breadcrumb } from './breadcrumb';\nexport type { BreadcrumbCrumb, BreadcrumbProps, BreadcrumbSeparator } from './breadcrumb';\nexport { ButtonDanger, ButtonGhost, ButtonPrimary, ButtonSecondary, ButtonTertiary } from './button';\nexport type { ButtonProps } from './button';\nexport { ButtonGroup } from './button-group';\nexport type { ButtonGroupOption, ButtonGroupProps } from './button-group';\nexport { ButtonIcon } from './button-icon';\nexport type { ButtonIconProps } from './button-icon';\nexport { ButtonWithIcon } from './button-with-icon';\nexport type { ButtonWithIconProps } from './button-with-icon';\nexport { Calendar } from './calendar';\nexport type { CalendarProps, CalendarValue } from './calendar';\nexport { Card } from './card';\nexport type { CardProps } from './card';\nexport { Checkbox } from './checkbox';\nexport type { CheckboxProps } from './checkbox';\nexport { Chip } from './chip';\nexport type { ChipMode, ChipProps } from './chip';\nexport { Cluster } from './cluster';\nexport type { ClusterProps } from './cluster';\nexport { CodeBlock, CodeEditor } from './code-editor';\nexport type { CodeBlockProps, CodeEditorProps } from './code-editor';\nexport { ComponentRow } from './component-row';\nexport type { ComponentRowProps } from './component-row';\nexport { ConfigComponentRow } from './config-component-row';\nexport type { ConfigComponentRowProps } from './config-component-row';\nexport { ConfigSegmentItem } from './config-segment-item';\nexport type { ConfigSegmentItemProps } from './config-segment-item';\nexport { ContentTooltip, Tooltip } from './tooltip';\nexport type { ContentTooltipProps, TooltipPlacement, TooltipProps } from './tooltip';\nexport { DataTable } from './data-table';\nexport type { DataTableColumn, DataTableDensity, DataTableProps } from './data-table';\nexport { DateInput } from './date-input';\nexport type { DateInputFormat, DateInputMode, DateInputProps } from './date-input';\nexport { DetailSection } from './detail-section';\nexport type { DetailSectionProps } from './detail-section';\nexport { Dialog } from './dialog';\nexport type { DialogProps } from './dialog';\nexport { Disclosure } from './disclosure';\nexport type { DisclosureProps } from './disclosure';\nexport { Divider } from './divider';\nexport type { DividerProps } from './divider';\nexport { EditableCell } from './editable-cell';\nexport type { EditableCellAlign, EditableCellOption, EditableCellProps, EditableCellSize, EditableCellType, EditableCellValue } from './editable-cell';\nexport { EmptyState } from './empty-state';\nexport type { EmptyStateProps } from './empty-state';\nexport { ErrorPage } from './error-page';\nexport type { ErrorPageProps } from './error-page';\nexport { ExplorerListItem } from './explorer-list-item';\nexport type { ExplorerListItemProps } from './explorer-list-item';\nexport { ExplorerSection } from './explorer-section';\nexport type { ExplorerSectionProps } from './explorer-section';\nexport { FieldError } from './field-error';\nexport type { FieldErrorProps } from './field-error';\nexport { FilterTabs } from './filter-tabs';\nexport type { FilterTabsOption, FilterTabsProps } from './filter-tabs';\nexport { Icon } from './icon';\nexport type { IconProps } from './icon';\nexport { IconButton } from './icon-button';\nexport type { IconButtonProps, IconButtonVariant } from './icon-button';\nexport { IconTile } from './icon-tile';\nexport type { IconTileProps } from './icon-tile';\nexport { LifecycleConnector } from './lifecycle-connector';\nexport type {\n LifecycleConnectorArrowhead,\n LifecycleConnectorProps,\n LifecycleConnectorRouting,\n LifecycleConnectorState,\n} from './lifecycle-connector';\nexport { LifecycleDropSlot } from './lifecycle-drop-slot';\nexport type {\n LifecycleDropSlotProps,\n LifecycleDropSlotShape,\n} from './lifecycle-drop-slot';\nexport { LifecycleEdgeLabel } from './lifecycle-edge-label';\nexport type {\n LifecycleEdgeLabelProps,\n LifecycleEdgeLabelVariant,\n} from './lifecycle-edge-label';\nexport { LifecycleGroupBox } from './lifecycle-group-box';\nexport type { LifecycleGroupBoxProps } from './lifecycle-group-box';\nexport { LifecycleMinimap } from './lifecycle-minimap';\nexport type {\n LifecycleMinimapNode,\n LifecycleMinimapProps,\n LifecycleMinimapViewport,\n} from './lifecycle-minimap';\nexport { LifecycleNodeCard } from './lifecycle-node-card';\nexport type {\n LifecycleNodeCardProps,\n LifecycleNodeKind,\n} from './lifecycle-node-card';\nexport { LifecycleTerminal } from './lifecycle-terminal';\nexport type { LifecycleTerminalProps } from './lifecycle-terminal';\nexport { LifecycleZoomControl } from './lifecycle-zoom-control';\nexport type { LifecycleZoomControlProps } from './lifecycle-zoom-control';\nexport { MetaRow } from './meta-row';\nexport type { MetaRowProps } from './meta-row';\nexport { Modal } from './modal';\nexport type { ModalHeaderProps, ModalProps, ModalSectionProps, ModalSize } from './modal';\nexport { InlineAction } from './inline-action';\nexport type { InlineActionProps } from './inline-action';\nexport { InlineFilter } from './inline-filter';\nexport type { InlineFilterProps } from './inline-filter';\nexport { ColorInput, ColorInputPopover } from './color-input';\nexport type { ColorFormat, ColorInputPopoverProps, ColorInputProps } from './color-input';\nexport { InputWithIcon } from './input-with-icon';\nexport type { InputWithIconProps } from './input-with-icon';\nexport { Select, Textarea, TextInput } from './input';\nexport type { SelectProps, SelectSingleProps, SelectMultiProps, TextareaProps, TextInputProps } from './input';\nexport { LanguageSwitcher } from './language-switcher';\nexport type { LanguageSwitcherProps, LanguageSwitcherVariant } from './language-switcher';\nexport { Link } from './link';\nexport type { LinkProps, LinkUnderline } from './link';\nexport { List, ListItem } from './list';\nexport type { ListItemProps, ListProps } from './list';\nexport { SEARCHABLE_AUTO_THRESHOLD, Listbox, MultiListbox } from './listbox';\nexport type {\n ListboxProps,\n ListboxRenderItemState,\n ListboxRenderTriggerState,\n ListboxTriggerProps,\n MultiListboxProps,\n} from './listbox';\nexport { DEFAULT_UXM_LOCALE, UxmLocaleProvider, useUxmLocale } from './locale';\nexport type { UxmLocaleProviderProps } from './locale';\nexport { Loader } from './loader';\nexport type { LoaderLayout, LoaderProps, LoaderVariant } from './loader';\nexport { Menu } from './menu';\nexport type {\n MenuProps,\n MenuItem,\n MenuSeparator,\n MenuEntry,\n MenuTriggerProps,\n} from './menu';\nexport { NumberStepper } from './number-stepper';\nexport type { NumberStepperProps } from './number-stepper';\nexport { PageHeader } from './page-header';\nexport type { PageHeaderProps } from './page-header';\nexport { PageShell } from './page-shell';\nexport type { PageShellProps, PageShellVariant } from './page-shell';\nexport { CurrencyInput } from './currency-input';\nexport type { CurrencyInputProps, CurrencyValue } from './currency-input';\nexport { FileUpload } from './file-upload';\nexport type {\n FileStatus,\n FileUploadFileMeta,\n FileUploadLabels,\n FileUploadProps,\n FileUploadState,\n} from './file-upload';\nexport { FormField } from './form-field';\nexport type { FormFieldLabelPosition, FormFieldLabelTint, FormFieldLabelVariant, FormFieldProps } from './form-field';\nexport { HoverTooltip } from './hover-tooltip';\nexport type { HoverTooltipProps } from './hover-tooltip';\nexport { NumberInput } from './number-input';\nexport type { NumberInputProps } from './number-input';\nexport { PasswordInput } from './password-input';\nexport type { PasswordInputProps } from './password-input';\nexport { PhoneInput } from './phone-input';\nexport type { PhoneInputProps, PhoneValue } from './phone-input';\nexport { TimeInput } from './time-input';\nexport type { TimeInputFormat, TimeInputProps } from './time-input';\nexport { PillSelect } from './pill-select';\nexport type { PillSelectProps } from './pill-select';\nexport { Popover } from './popover';\nexport type { PopoverPlacement, PopoverProps } from './popover';\nexport { ProgressBar } from './progress-bar';\nexport type { ProgressBarProps, ProgressBarVariant } from './progress-bar';\nexport { PropertyField, PropertyGrid } from './property-field';\nexport type { PropertyFieldProps, PropertyGridProps } from './property-field';\nexport { RadioGroup, RadioOption } from './radio-group';\nexport type { RadioGroupDirection, RadioGroupProps, RadioOptionProps } from './radio-group';\nexport { RangeSlider } from './range-slider';\nexport type { RangeSliderProps } from './range-slider';\nexport { ResponsiveGrid } from './responsive-grid';\nexport type { ResponsiveGridProps } from './responsive-grid';\nexport { SearchDropdown } from './search-dropdown';\nexport type { SearchDropdownOption, SearchDropdownProps } from './search-dropdown';\nexport { SideFlexpane } from './side-flexpane';\nexport type { SideFlexpaneProps } from './side-flexpane';\nexport { SectionHeader } from './section-header';\nexport type { SectionHeaderProps } from './section-header';\nexport { SegmentCard } from './segment-card';\nexport type { SegmentCardProps } from './segment-card';\nexport { SegmentRow } from './segment-row';\nexport type { SegmentRowProps } from './segment-row';\nexport { OptionList } from './option-list';\nexport type { OptionListItem, OptionListProps } from './option-list';\nexport { SidebarNavItem } from './sidebar-nav-item';\nexport type { SidebarNavItemProps } from './sidebar-nav-item';\nexport { SidebarNavTrigger } from './sidebar-nav-trigger';\nexport type {\n SidebarNavTriggerCaptionPlacement,\n SidebarNavTriggerProps,\n SidebarNavTriggerVariant,\n} from './sidebar-nav-trigger';\nexport { Slider } from './slider';\nexport type { SliderProps } from './slider';\nexport { Stack } from './stack';\nexport type { StackProps } from './stack';\nexport { StatCard } from './stat-card';\nexport type { StatCardProps, StatCardTrend } from './stat-card';\nexport { Tabs } from './tabs';\nexport type { TabsOption, TabsProps } from './tabs';\nexport { TabsUnderline } from './tabs-underline';\nexport type { TabsUnderlineOption, TabsUnderlineProps } from './tabs-underline';\nexport { Tag } from './tag';\nexport type { TagProps, TagSize, TagType } from './tag';\nexport { Thumbnail } from './thumbnail';\nexport type { ThumbnailFit, ThumbnailProps } from './thumbnail';\nexport { TimelineEntry } from './timeline-entry';\nexport type { TimelineDotState, TimelineEntryProps } from './timeline-entry';\nexport { Toast, Toaster, toast } from './toast';\nexport type {\n ToastPosition,\n ToasterProps,\n ToastProps,\n ToastVariant,\n} from './toast';\nexport { TypeOverviewCard } from './type-overview-card';\nexport type { TypeOverviewCardProps } from './type-overview-card';\nexport { ToggleSwitch } from './toggle-switch';\nexport type { ToggleSwitchProps } from './toggle-switch';\nexport { ViewSwitcher } from './view-switcher';\nexport type { ViewSwitcherOption, ViewSwitcherProps } from './view-switcher';\n\n// Icon registry — useful for shell-style tooling that needs to enumerate icons,\n// surface them in a picker, or look one up by id.\nexport { ICONS, ICON_OPTIONS, getIcon } from '../lib/icons';\nexport type { IconDef } from '../lib/icons';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAwD;AAQxD,yBAA0B;AAE1B,oBAAuB;AAEvB,uBAAyB;AAEzB,mBAAsB;AAEtB,oBAAuB;AAEvB,6BAA8B;AAE9B,wBAA2B;AAE3B,oBAA0F;AAE1F,0BAA4B;AAE5B,yBAA2B;AAE3B,8BAA+B;AAE/B,sBAAyB;AAEzB,kBAAqB;AAErB,sBAAyB;AAEzB,kBAAqB;AAErB,qBAAwB;AAExB,yBAAsC;AAEtC,2BAA6B;AAE7B,kCAAmC;AAEnC,iCAAkC;AAElC,qBAAwC;AAExC,wBAA0B;AAE1B,wBAA0B;AAE1B,4BAA8B;AAE9B,oBAAuB;AAEvB,wBAA2B;AAE3B,qBAAwB;AAExB,2BAA6B;AAE7B,yBAA2B;AAE3B,wBAA0B;AAE1B,gCAAiC;AAEjC,8BAAgC;AAEhC,yBAA2B;AAE3B,yBAA2B;AAE3B,kBAAqB;AAErB,yBAA2B;AAE3B,uBAAyB;AAEzB,iCAAmC;AAOnC,iCAAkC;AAKlC,kCAAmC;AAKnC,iCAAkC;AAElC,+BAAiC;AAMjC,iCAAkC;AAKlC,gCAAkC;AAElC,oCAAqC;AAErC,sBAAwB;AAExB,mBAAsB;AAEtB,2BAA6B;AAE7B,2BAA6B;AAE7B,yBAA8C;AAE9C,6BAA8B;AAE9B,mBAA4C;AAE5C,+BAAiC;AAEjC,kBAAqB;AAErB,kBAA+B;AAE/B,qBAAiE;AAQjE,oBAAoE;AAEpE,oBAAuB;AAEvB,kBAAqB;AAQrB,4BAA8B;AAE9B,yBAA2B;AAE3B,wBAA0B;AAE1B,4BAA8B;AAE9B,yBAA2B;AAQ3B,wBAA0B;AAE1B,2BAA6B;AAE7B,0BAA4B;AAE5B,4BAA8B;AAE9B,yBAA2B;AAE3B,wBAA0B;AAE1B,yBAA2B;AAE3B,qBAAwB;AAExB,0BAA4B;AAE5B,4BAA4C;AAE5C,yBAAwC;AAExC,0BAA4B;AAE5B,6BAA+B;AAE/B,6BAA+B;AAE/B,2BAA6B;AAE7B,4BAA8B;AAE9B,0BAA4B;AAE5B,yBAA2B;AAE3B,yBAA2B;AAE3B,8BAA+B;AAE/B,iCAAkC;AAMlC,oBAAuB;AAEvB,mBAAsB;AAEtB,uBAAyB;AAEzB,kBAAqB;AAErB,4BAA8B;AAE9B,iBAAoB;AAEpB,uBAA0B;AAE1B,4BAA8B;AAE9B,mBAAsC;AAOtC,gCAAiC;AAEjC,2BAA6B;AAE7B,2BAA6B;AAK7B,mBAA6C;","names":[]}
1
+ {"version":3,"sources":["../../src/ui/index.ts"],"sourcesContent":["export { AppSidebar, DEFAULT_SIDEBAR_ICON_COLORS } from './app-sidebar';\nexport type {\n AppSidebarBrand,\n AppSidebarIconColor,\n AppSidebarNavItem,\n AppSidebarProps,\n AppSidebarSection,\n} from './app-sidebar';\nexport { AppTopBar } from './app-top-bar';\nexport type { AppTopBarProps } from './app-top-bar';\nexport { Avatar } from './avatar';\nexport type { AvatarProps, AvatarSize, AvatarType } from './avatar';\nexport { BackLink } from './back-link';\nexport type { BackLinkProps } from './back-link';\nexport { Badge } from './badge';\nexport type { BadgeMode, BadgeProps, BadgeType } from './badge';\nexport { Banner } from './banner';\nexport type { BannerProps, BannerVariant } from './banner';\nexport { BulkActionBar } from './bulk-action-bar';\nexport type { BulkAction, BulkActionBarProps } from './bulk-action-bar';\nexport { Breadcrumb } from './breadcrumb';\nexport type { BreadcrumbCrumb, BreadcrumbProps, BreadcrumbSeparator } from './breadcrumb';\nexport { ButtonDanger, ButtonGhost, ButtonPrimary, ButtonSecondary, ButtonTertiary } from './button';\nexport type { ButtonProps } from './button';\nexport { ButtonGroup } from './button-group';\nexport type { ButtonGroupOption, ButtonGroupProps } from './button-group';\nexport { ButtonIcon } from './button-icon';\nexport type { ButtonIconProps } from './button-icon';\nexport { ButtonWithIcon } from './button-with-icon';\nexport type { ButtonWithIconProps } from './button-with-icon';\nexport { Calendar } from './calendar';\nexport type { CalendarProps, CalendarValue } from './calendar';\nexport { Card } from './card';\nexport type { CardProps } from './card';\nexport { Checkbox } from './checkbox';\nexport type { CheckboxProps } from './checkbox';\nexport { Chip } from './chip';\nexport type { ChipMode, ChipProps } from './chip';\nexport { Cluster } from './cluster';\nexport type { ClusterProps } from './cluster';\nexport { CodeBlock, CodeEditor } from './code-editor';\nexport type { CodeBlockProps, CodeEditorProps } from './code-editor';\nexport { ComponentRow } from './component-row';\nexport type { ComponentRowProps } from './component-row';\nexport { ConfigComponentRow } from './config-component-row';\nexport type { ConfigComponentRowProps } from './config-component-row';\nexport { ConfigSegmentItem } from './config-segment-item';\nexport type { ConfigSegmentItemProps } from './config-segment-item';\nexport { ContentTooltip, Tooltip } from './tooltip';\nexport type { ContentTooltipProps, TooltipPlacement, TooltipProps } from './tooltip';\nexport { DataTable } from './data-table';\nexport type { DataTableColumn, DataTableDensity, DataTableProps } from './data-table';\nexport { DateInput } from './date-input';\nexport type { DateInputFormat, DateInputMode, DateInputProps } from './date-input';\nexport { DetailSection } from './detail-section';\nexport type { DetailSectionProps } from './detail-section';\nexport { Dialog } from './dialog';\nexport type { DialogProps } from './dialog';\nexport { Disclosure } from './disclosure';\nexport type { DisclosureProps } from './disclosure';\nexport { Divider } from './divider';\nexport type { DividerProps } from './divider';\nexport { EditableCell } from './editable-cell';\nexport type { EditableCellAlign, EditableCellOption, EditableCellProps, EditableCellSize, EditableCellType, EditableCellValue } from './editable-cell';\nexport { EmptyState } from './empty-state';\nexport type { EmptyStateProps } from './empty-state';\nexport { ErrorPage } from './error-page';\nexport type { ErrorPageProps } from './error-page';\nexport { ExplorerListItem } from './explorer-list-item';\nexport type { ExplorerListItemProps } from './explorer-list-item';\nexport { ExplorerSection } from './explorer-section';\nexport type { ExplorerSectionProps } from './explorer-section';\nexport { FieldError } from './field-error';\nexport type { FieldErrorProps } from './field-error';\nexport { FilterTabs } from './filter-tabs';\nexport type { FilterTabsOption, FilterTabsProps } from './filter-tabs';\nexport { Icon } from './icon';\nexport type { IconProps } from './icon';\nexport { IconButton } from './icon-button';\nexport type { IconButtonProps, IconButtonVariant } from './icon-button';\nexport { IconTile } from './icon-tile';\nexport type { IconTileProps } from './icon-tile';\nexport { LifecycleConnector } from './lifecycle-connector';\nexport type {\n LifecycleConnectorArrowhead,\n LifecycleConnectorProps,\n LifecycleConnectorRouting,\n LifecycleConnectorState,\n} from './lifecycle-connector';\nexport { LifecycleDropSlot } from './lifecycle-drop-slot';\nexport type {\n LifecycleDropSlotProps,\n LifecycleDropSlotShape,\n} from './lifecycle-drop-slot';\nexport { LifecycleEdgeLabel } from './lifecycle-edge-label';\nexport type {\n LifecycleEdgeLabelProps,\n LifecycleEdgeLabelVariant,\n} from './lifecycle-edge-label';\nexport { LifecycleGroupBox } from './lifecycle-group-box';\nexport type { LifecycleGroupBoxProps } from './lifecycle-group-box';\nexport { LifecycleMinimap } from './lifecycle-minimap';\nexport type {\n LifecycleMinimapNode,\n LifecycleMinimapProps,\n LifecycleMinimapViewport,\n} from './lifecycle-minimap';\nexport { LifecycleNodeCard } from './lifecycle-node-card';\nexport type {\n LifecycleNodeCardProps,\n LifecycleNodeKind,\n} from './lifecycle-node-card';\nexport { LifecycleTerminal } from './lifecycle-terminal';\nexport type { LifecycleTerminalProps } from './lifecycle-terminal';\nexport { LifecycleZoomControl } from './lifecycle-zoom-control';\nexport type { LifecycleZoomControlProps } from './lifecycle-zoom-control';\nexport { MetaRow } from './meta-row';\nexport type { MetaRowProps } from './meta-row';\nexport { Modal } from './modal';\nexport type { ModalHeaderProps, ModalProps, ModalSectionProps, ModalSize } from './modal';\nexport { InlineAction } from './inline-action';\nexport type { InlineActionProps } from './inline-action';\nexport { InlineFilter } from './inline-filter';\nexport type { InlineFilterProps } from './inline-filter';\nexport { ColorInput, ColorInputPopover } from './color-input';\nexport type { ColorFormat, ColorInputPopoverProps, ColorInputProps } from './color-input';\nexport { InputWithIcon } from './input-with-icon';\nexport type { InputWithIconProps } from './input-with-icon';\nexport { Select, Textarea, TextInput } from './input';\nexport type { SelectProps, SelectSingleProps, SelectMultiProps, TextareaProps, TextInputProps } from './input';\nexport { LanguageSwitcher } from './language-switcher';\nexport type { LanguageSwitcherProps, LanguageSwitcherVariant } from './language-switcher';\nexport { Link } from './link';\nexport type { LinkProps, LinkUnderline } from './link';\nexport { List, ListItem } from './list';\nexport type { ListItemProps, ListProps, ListVariant } from './list';\nexport { SEARCHABLE_AUTO_THRESHOLD, Listbox, MultiListbox } from './listbox';\nexport type {\n ListboxProps,\n ListboxRenderItemState,\n ListboxRenderTriggerState,\n ListboxTriggerProps,\n MultiListboxProps,\n} from './listbox';\nexport { DEFAULT_UXM_LOCALE, UxmLocaleProvider, useUxmLocale } from './locale';\nexport type { UxmLocaleProviderProps } from './locale';\nexport { Loader } from './loader';\nexport type { LoaderLayout, LoaderProps, LoaderVariant } from './loader';\nexport { Menu } from './menu';\nexport type {\n MenuProps,\n MenuItem,\n MenuSeparator,\n MenuEntry,\n MenuTriggerProps,\n} from './menu';\nexport { NumberStepper } from './number-stepper';\nexport type { NumberStepperProps } from './number-stepper';\nexport { PageHeader } from './page-header';\nexport type { PageHeaderProps } from './page-header';\nexport { PageShell } from './page-shell';\nexport type { PageShellProps, PageShellVariant } from './page-shell';\nexport { CurrencyInput } from './currency-input';\nexport type { CurrencyInputProps, CurrencyValue } from './currency-input';\nexport { FileUpload } from './file-upload';\nexport type {\n FileStatus,\n FileUploadFileMeta,\n FileUploadLabels,\n FileUploadProps,\n FileUploadState,\n} from './file-upload';\nexport { FormField } from './form-field';\nexport type { FormFieldLabelPosition, FormFieldLabelTint, FormFieldLabelVariant, FormFieldProps } from './form-field';\nexport { HoverTooltip } from './hover-tooltip';\nexport type { HoverTooltipProps } from './hover-tooltip';\nexport { NumberInput } from './number-input';\nexport type { NumberInputProps } from './number-input';\nexport { PasswordInput } from './password-input';\nexport type { PasswordInputProps } from './password-input';\nexport { PhoneInput } from './phone-input';\nexport type { PhoneInputProps, PhoneValue } from './phone-input';\nexport { TimeInput } from './time-input';\nexport type { TimeInputFormat, TimeInputProps } from './time-input';\nexport { PillSelect } from './pill-select';\nexport type { PillSelectProps } from './pill-select';\nexport { Popover } from './popover';\nexport type { PopoverPlacement, PopoverProps } from './popover';\nexport { ProgressBar } from './progress-bar';\nexport type { ProgressBarProps, ProgressBarVariant } from './progress-bar';\nexport { PropertyField, PropertyGrid } from './property-field';\nexport type { PropertyFieldProps, PropertyGridProps } from './property-field';\nexport { RadioGroup, RadioOption } from './radio-group';\nexport type { RadioGroupDirection, RadioGroupProps, RadioOptionProps } from './radio-group';\nexport { RangeSlider } from './range-slider';\nexport type { RangeSliderProps } from './range-slider';\nexport { ResponsiveGrid } from './responsive-grid';\nexport type { ResponsiveGridProps } from './responsive-grid';\nexport { SearchDropdown } from './search-dropdown';\nexport type { SearchDropdownOption, SearchDropdownProps } from './search-dropdown';\nexport { SideFlexpane } from './side-flexpane';\nexport type { SideFlexpaneProps } from './side-flexpane';\nexport { SectionHeader } from './section-header';\nexport type { SectionHeaderProps } from './section-header';\nexport { SegmentCard } from './segment-card';\nexport type { SegmentCardProps } from './segment-card';\nexport { SegmentRow } from './segment-row';\nexport type { SegmentRowProps } from './segment-row';\nexport { OptionList } from './option-list';\nexport type { OptionListItem, OptionListProps } from './option-list';\nexport { SidebarNavItem } from './sidebar-nav-item';\nexport type { SidebarNavItemProps } from './sidebar-nav-item';\nexport { SidebarNavTrigger } from './sidebar-nav-trigger';\nexport type {\n SidebarNavTriggerCaptionPlacement,\n SidebarNavTriggerProps,\n SidebarNavTriggerVariant,\n} from './sidebar-nav-trigger';\nexport { Slider } from './slider';\nexport type { SliderProps } from './slider';\nexport { Stack } from './stack';\nexport type { StackProps } from './stack';\nexport { StatCard } from './stat-card';\nexport type { StatCardProps, StatCardTrend } from './stat-card';\nexport { Tabs } from './tabs';\nexport type { TabsOption, TabsProps } from './tabs';\nexport { TabsUnderline } from './tabs-underline';\nexport type { TabsUnderlineOption, TabsUnderlineProps } from './tabs-underline';\nexport { Tag } from './tag';\nexport type { TagProps, TagSize, TagType } from './tag';\nexport { Thumbnail } from './thumbnail';\nexport type { ThumbnailFit, ThumbnailProps } from './thumbnail';\nexport { TimelineEntry } from './timeline-entry';\nexport type { TimelineDotState, TimelineEntryProps } from './timeline-entry';\nexport { Toast, Toaster, toast } from './toast';\nexport type {\n ToastPosition,\n ToasterProps,\n ToastProps,\n ToastVariant,\n} from './toast';\nexport { TypeOverviewCard } from './type-overview-card';\nexport type { TypeOverviewCardProps } from './type-overview-card';\nexport { ToggleSwitch } from './toggle-switch';\nexport type { ToggleSwitchProps } from './toggle-switch';\nexport { ViewSwitcher } from './view-switcher';\nexport type { ViewSwitcherOption, ViewSwitcherProps } from './view-switcher';\n\n// Icon registry — useful for shell-style tooling that needs to enumerate icons,\n// surface them in a picker, or look one up by id.\nexport { ICONS, ICON_OPTIONS, getIcon } from '../lib/icons';\nexport type { IconDef } from '../lib/icons';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAwD;AAQxD,yBAA0B;AAE1B,oBAAuB;AAEvB,uBAAyB;AAEzB,mBAAsB;AAEtB,oBAAuB;AAEvB,6BAA8B;AAE9B,wBAA2B;AAE3B,oBAA0F;AAE1F,0BAA4B;AAE5B,yBAA2B;AAE3B,8BAA+B;AAE/B,sBAAyB;AAEzB,kBAAqB;AAErB,sBAAyB;AAEzB,kBAAqB;AAErB,qBAAwB;AAExB,yBAAsC;AAEtC,2BAA6B;AAE7B,kCAAmC;AAEnC,iCAAkC;AAElC,qBAAwC;AAExC,wBAA0B;AAE1B,wBAA0B;AAE1B,4BAA8B;AAE9B,oBAAuB;AAEvB,wBAA2B;AAE3B,qBAAwB;AAExB,2BAA6B;AAE7B,yBAA2B;AAE3B,wBAA0B;AAE1B,gCAAiC;AAEjC,8BAAgC;AAEhC,yBAA2B;AAE3B,yBAA2B;AAE3B,kBAAqB;AAErB,yBAA2B;AAE3B,uBAAyB;AAEzB,iCAAmC;AAOnC,iCAAkC;AAKlC,kCAAmC;AAKnC,iCAAkC;AAElC,+BAAiC;AAMjC,iCAAkC;AAKlC,gCAAkC;AAElC,oCAAqC;AAErC,sBAAwB;AAExB,mBAAsB;AAEtB,2BAA6B;AAE7B,2BAA6B;AAE7B,yBAA8C;AAE9C,6BAA8B;AAE9B,mBAA4C;AAE5C,+BAAiC;AAEjC,kBAAqB;AAErB,kBAA+B;AAE/B,qBAAiE;AAQjE,oBAAoE;AAEpE,oBAAuB;AAEvB,kBAAqB;AAQrB,4BAA8B;AAE9B,yBAA2B;AAE3B,wBAA0B;AAE1B,4BAA8B;AAE9B,yBAA2B;AAQ3B,wBAA0B;AAE1B,2BAA6B;AAE7B,0BAA4B;AAE5B,4BAA8B;AAE9B,yBAA2B;AAE3B,wBAA0B;AAE1B,yBAA2B;AAE3B,qBAAwB;AAExB,0BAA4B;AAE5B,4BAA4C;AAE5C,yBAAwC;AAExC,0BAA4B;AAE5B,6BAA+B;AAE/B,6BAA+B;AAE/B,2BAA6B;AAE7B,4BAA8B;AAE9B,0BAA4B;AAE5B,yBAA2B;AAE3B,yBAA2B;AAE3B,8BAA+B;AAE/B,iCAAkC;AAMlC,oBAAuB;AAEvB,mBAAsB;AAEtB,uBAAyB;AAEzB,kBAAqB;AAErB,4BAA8B;AAE9B,iBAAoB;AAEpB,uBAA0B;AAE1B,4BAA8B;AAE9B,mBAAsC;AAOtC,gCAAiC;AAEjC,2BAA6B;AAE7B,2BAA6B;AAK7B,mBAA6C;","names":[]}
@@ -109,7 +109,7 @@ export type { LanguageSwitcherProps, LanguageSwitcherVariant } from './language-
109
109
  export { Link } from './link/index.js';
110
110
  export type { LinkProps, LinkUnderline } from './link/index.js';
111
111
  export { List, ListItem } from './list/index.js';
112
- export type { ListItemProps, ListProps } from './list/index.js';
112
+ export type { ListItemProps, ListProps, ListVariant } from './list/index.js';
113
113
  export { SEARCHABLE_AUTO_THRESHOLD, Listbox, MultiListbox } from './listbox/index.js';
114
114
  export type { ListboxProps, ListboxRenderItemState, ListboxRenderTriggerState, ListboxTriggerProps, MultiListboxProps, } from './listbox/index.js';
115
115
  export { DEFAULT_UXM_LOCALE, UxmLocaleProvider, useUxmLocale } from './locale/index.js';