@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.
- package/CHANGELOG.md +14 -0
- package/dist/studio/lib/registry/composite/list-item.cjs +21 -1
- package/dist/studio/lib/registry/composite/list-item.cjs.map +1 -1
- package/dist/studio/lib/registry/composite/list-item.d.ts.map +1 -1
- package/dist/studio/lib/registry/composite/list-item.js +21 -1
- package/dist/studio/lib/registry/composite/list-item.js.map +1 -1
- package/dist/ui/button/button.cjs +10 -10
- package/dist/ui/button/button.cjs.map +1 -1
- package/dist/ui/button/button.d.ts +20 -8
- package/dist/ui/button/button.d.ts.map +1 -1
- package/dist/ui/button/button.js +10 -10
- package/dist/ui/button/button.js.map +1 -1
- package/dist/ui/icon-button/icon-button.cjs +2 -0
- package/dist/ui/icon-button/icon-button.cjs.map +1 -1
- package/dist/ui/icon-button/icon-button.d.ts +3 -3
- package/dist/ui/icon-button/icon-button.d.ts.map +1 -1
- package/dist/ui/icon-button/icon-button.js +2 -0
- package/dist/ui/icon-button/icon-button.js.map +1 -1
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/list/list-item-preview.cjs +6 -4
- package/dist/ui/list/list-item-preview.cjs.map +1 -1
- package/dist/ui/list/list-item-preview.d.ts.map +1 -1
- package/dist/ui/list/list-item-preview.js +6 -4
- package/dist/ui/list/list-item-preview.js.map +1 -1
- package/dist/ui/list/list.cjs +9 -2
- package/dist/ui/list/list.cjs.map +1 -1
- package/dist/ui/list/list.css +16 -0
- package/dist/ui/list/list.d.ts +20 -1
- package/dist/ui/list/list.d.ts.map +1 -1
- package/dist/ui/list/list.js +9 -2
- package/dist/ui/list/list.js.map +1 -1
- 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
|
-
|
|
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,
|
|
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
|
-
|
|
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 {
|
|
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 {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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,
|
|
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"}
|
package/dist/ui/button/button.js
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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 {
|
|
1
|
+
import type { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
2
|
export type IconButtonVariant = 'ghost' | 'filled';
|
|
3
|
-
export interface IconButtonProps extends
|
|
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,
|
|
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 {
|
|
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":[]}
|
package/dist/ui/index.cjs.map
CHANGED
|
@@ -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":[]}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -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';
|