@viax.io/uxm 4.39.0 → 4.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +33 -44
  4. package/dist/hooks/index.cjs.map +1 -1
  5. package/dist/hooks/index.d.ts +1 -1
  6. package/dist/hooks/index.js.map +1 -1
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +3 -3
  9. package/dist/index.js.map +1 -1
  10. package/dist/previews/index.cjs.map +1 -1
  11. package/dist/previews/index.d.ts +2 -2
  12. package/dist/previews/index.js.map +1 -1
  13. package/dist/studio/index.cjs.map +1 -1
  14. package/dist/studio/index.d.ts +2 -2
  15. package/dist/studio/index.js.map +1 -1
  16. package/dist/studio/lib/registry/buttons.cjs +2 -2
  17. package/dist/studio/lib/registry/buttons.cjs.map +1 -1
  18. package/dist/studio/lib/registry/buttons.js +2 -2
  19. package/dist/studio/lib/registry/buttons.js.map +1 -1
  20. package/dist/studio/lib/registry/composite/sidebar-nav-trigger.cjs +1 -1
  21. package/dist/studio/lib/registry/composite/sidebar-nav-trigger.cjs.map +1 -1
  22. package/dist/studio/lib/registry/composite/sidebar-nav-trigger.js +1 -1
  23. package/dist/studio/lib/registry/composite/sidebar-nav-trigger.js.map +1 -1
  24. package/dist/studio/lib/registry/diagram.cjs +1 -1
  25. package/dist/studio/lib/registry/diagram.cjs.map +1 -1
  26. package/dist/studio/lib/registry/diagram.js +1 -1
  27. package/dist/studio/lib/registry/diagram.js.map +1 -1
  28. package/dist/studio/lib/registry/display.cjs +2 -2
  29. package/dist/studio/lib/registry/display.cjs.map +1 -1
  30. package/dist/studio/lib/registry/display.js +2 -2
  31. package/dist/studio/lib/registry/display.js.map +1 -1
  32. package/dist/studio/lib/registry/feedback.cjs +3 -3
  33. package/dist/studio/lib/registry/feedback.cjs.map +1 -1
  34. package/dist/studio/lib/registry/feedback.js +3 -3
  35. package/dist/studio/lib/registry/feedback.js.map +1 -1
  36. package/dist/studio/lib/registry/inputs/color-input.cjs +1 -1
  37. package/dist/studio/lib/registry/inputs/color-input.cjs.map +1 -1
  38. package/dist/studio/lib/registry/inputs/color-input.js +1 -1
  39. package/dist/studio/lib/registry/inputs/color-input.js.map +1 -1
  40. package/dist/studio/lib/registry/inputs/currency-input.cjs +1 -1
  41. package/dist/studio/lib/registry/inputs/currency-input.cjs.map +1 -1
  42. package/dist/studio/lib/registry/inputs/currency-input.js +1 -1
  43. package/dist/studio/lib/registry/inputs/currency-input.js.map +1 -1
  44. package/dist/studio/lib/registry/inputs/editable-cell.cjs +1 -1
  45. package/dist/studio/lib/registry/inputs/editable-cell.cjs.map +1 -1
  46. package/dist/studio/lib/registry/inputs/editable-cell.js +1 -1
  47. package/dist/studio/lib/registry/inputs/editable-cell.js.map +1 -1
  48. package/dist/studio/lib/registry/inputs/file-upload.cjs +1 -1
  49. package/dist/studio/lib/registry/inputs/file-upload.cjs.map +1 -1
  50. package/dist/studio/lib/registry/inputs/file-upload.js +1 -1
  51. package/dist/studio/lib/registry/inputs/file-upload.js.map +1 -1
  52. package/dist/studio/lib/registry/inputs/input-text.cjs +1 -1
  53. package/dist/studio/lib/registry/inputs/input-text.cjs.map +1 -1
  54. package/dist/studio/lib/registry/inputs/input-text.js +1 -1
  55. package/dist/studio/lib/registry/inputs/input-text.js.map +1 -1
  56. package/dist/studio/lib/registry/inputs/listbox.cjs +1 -1
  57. package/dist/studio/lib/registry/inputs/listbox.cjs.map +1 -1
  58. package/dist/studio/lib/registry/inputs/listbox.js +1 -1
  59. package/dist/studio/lib/registry/inputs/listbox.js.map +1 -1
  60. package/dist/studio/lib/registry/inputs/menu.cjs +1 -1
  61. package/dist/studio/lib/registry/inputs/menu.cjs.map +1 -1
  62. package/dist/studio/lib/registry/inputs/menu.js +1 -1
  63. package/dist/studio/lib/registry/inputs/menu.js.map +1 -1
  64. package/dist/studio/lib/registry/inputs/number-input.cjs +1 -1
  65. package/dist/studio/lib/registry/inputs/number-input.cjs.map +1 -1
  66. package/dist/studio/lib/registry/inputs/number-input.js +1 -1
  67. package/dist/studio/lib/registry/inputs/number-input.js.map +1 -1
  68. package/dist/studio/lib/registry/inputs/password-input.cjs +1 -1
  69. package/dist/studio/lib/registry/inputs/password-input.cjs.map +1 -1
  70. package/dist/studio/lib/registry/inputs/password-input.js +1 -1
  71. package/dist/studio/lib/registry/inputs/password-input.js.map +1 -1
  72. package/dist/studio/lib/registry/inputs/phone-input.cjs +1 -1
  73. package/dist/studio/lib/registry/inputs/phone-input.cjs.map +1 -1
  74. package/dist/studio/lib/registry/inputs/phone-input.js +1 -1
  75. package/dist/studio/lib/registry/inputs/phone-input.js.map +1 -1
  76. package/dist/studio/lib/registry/inputs/slider.cjs +1 -1
  77. package/dist/studio/lib/registry/inputs/slider.cjs.map +1 -1
  78. package/dist/studio/lib/registry/inputs/slider.js +1 -1
  79. package/dist/studio/lib/registry/inputs/slider.js.map +1 -1
  80. package/dist/studio/lib/registry/inputs/time-input.cjs +1 -1
  81. package/dist/studio/lib/registry/inputs/time-input.cjs.map +1 -1
  82. package/dist/studio/lib/registry/inputs/time-input.js +1 -1
  83. package/dist/studio/lib/registry/inputs/time-input.js.map +1 -1
  84. package/dist/studio/lib/types.cjs.map +1 -1
  85. package/dist/studio/persistence/generate-css.cjs.map +1 -1
  86. package/dist/studio/persistence/generate-css.js.map +1 -1
  87. package/dist/ui/editable-cell/editable-cell-date.cjs +226 -0
  88. package/dist/ui/editable-cell/editable-cell-date.cjs.map +1 -0
  89. package/dist/ui/editable-cell/editable-cell-date.d.ts +4 -0
  90. package/dist/ui/editable-cell/editable-cell-date.d.ts.map +1 -0
  91. package/dist/ui/editable-cell/editable-cell-date.js +202 -0
  92. package/dist/ui/editable-cell/editable-cell-date.js.map +1 -0
  93. package/dist/ui/editable-cell/editable-cell-select.cjs +297 -0
  94. package/dist/ui/editable-cell/editable-cell-select.cjs.map +1 -0
  95. package/dist/ui/editable-cell/editable-cell-select.d.ts +4 -0
  96. package/dist/ui/editable-cell/editable-cell-select.d.ts.map +1 -0
  97. package/dist/ui/editable-cell/editable-cell-select.js +273 -0
  98. package/dist/ui/editable-cell/editable-cell-select.js.map +1 -0
  99. package/dist/ui/editable-cell/editable-cell-text.cjs +175 -0
  100. package/dist/ui/editable-cell/editable-cell-text.cjs.map +1 -0
  101. package/dist/ui/editable-cell/editable-cell-text.d.ts +4 -0
  102. package/dist/ui/editable-cell/editable-cell-text.d.ts.map +1 -0
  103. package/dist/ui/editable-cell/editable-cell-text.js +151 -0
  104. package/dist/ui/editable-cell/editable-cell-text.js.map +1 -0
  105. package/dist/ui/editable-cell/editable-cell.cjs +27 -705
  106. package/dist/ui/editable-cell/editable-cell.cjs.map +1 -1
  107. package/dist/ui/editable-cell/editable-cell.d.ts +1 -1
  108. package/dist/ui/editable-cell/editable-cell.d.ts.map +1 -1
  109. package/dist/ui/editable-cell/editable-cell.js +28 -706
  110. package/dist/ui/editable-cell/editable-cell.js.map +1 -1
  111. package/dist/ui/editable-cell/use-editable-cell.cjs +284 -0
  112. package/dist/ui/editable-cell/use-editable-cell.cjs.map +1 -0
  113. package/dist/ui/editable-cell/use-editable-cell.d.ts +51 -0
  114. package/dist/ui/editable-cell/use-editable-cell.d.ts.map +1 -0
  115. package/dist/ui/editable-cell/use-editable-cell.js +260 -0
  116. package/dist/ui/editable-cell/use-editable-cell.js.map +1 -0
  117. package/dist/ui/page-shell/page-shell.cjs.map +1 -1
  118. package/dist/ui/page-shell/page-shell.d.ts +1 -1
  119. package/dist/ui/page-shell/page-shell.d.ts.map +1 -1
  120. package/dist/ui/page-shell/page-shell.js.map +1 -1
  121. package/dist/ui/styles.css +1 -1
  122. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/studio/lib/registry/composite/sidebar-nav-trigger.ts"],"sourcesContent":["import type { ComponentDef } from '../../types';\n\nexport const sidebarNavTriggerDef: ComponentDef = {\n id: 'sidebar-nav-trigger',\n name: 'Sidebar Nav Trigger',\n category: 'Composite',\n description:\n \"A rail row that OPENS something rather than navigating to it — a workspace switcher, an account menu, an environment picker. A <button> extending ButtonHTMLAttributes, so a Menu's or Listbox's `triggerProps` spread straight onto it, ref and ARIA included. Four optional slots: icon (a bare Icon in a switcher, an Avatar in the account row), caption (the small line beside the value; captionPlacement 'above' | 'below', default above — above LABELS the level this control changes, below QUALIFIES the value), children (the value) and trailing (the chevron — shown as soon as it is passed; no hover-reveal, unlike Sidebar Nav Item's trailing slot. The Trailing picker here decides whether the showcase PASSES the slot at all, exactly like Mark and Caption — it is not a visibility gate in the component). The atom draws NO tile behind the icon: it reserves the slot, sizes it, aligns it, and paints nothing. And it reserves nothing it was not given — no icon and the text starts at the padding edge, no caption and the value centres, no trailing and there is no gap where a chevron would have been. Sibling of Sidebar Nav Item rather than a variant of it: that one renders an <a>, hides trailing until hover, paints an icon tile and has a single-line label. `collapsed` renders it for a 64px rail: a 46px tile, the chevron dropped, and caption + value clipped but kept in the DOM so the accessible name survives. Pair it with a 32px mark. See the collapsed prop below for the reasoning.\",\n styleProperties: [\n // ── Per-state surface. Hover and open paint the SAME thing in both\n // variants, so they share one knob — a second one would only let a\n // designer make them disagree, and they mean the same thing to the eye.\n // Open has no prop: it is read from [aria-expanded=\"true\"], which Menu\n // and Listbox already set through triggerProps.\n { key: 'bg', label: 'Background', control: 'color', defaultValue: 'transparent', section: 'states', showWhen: { state: 'default' } },\n { key: 'hoverBg', label: 'Background', control: 'color', defaultValue: 'var(--color-surface)', section: 'states', showWhen: { state: ['hover', 'open'] } },\n { key: 'focusRing', label: 'Ring Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'focusState', showWhen: { state: 'focus' } },\n // Dimmed, not recoloured — a disabled `outlined` trigger has to stay the\n // same box. One opacity covers both variants, so there is nothing to keep\n // in sync between them.\n { key: 'disabledOpacity', label: 'Opacity', control: 'slider', defaultValue: 0.45, min: 0.1, max: 1, step: 0.05, section: 'disabledState', showWhen: { state: 'disabled' } },\n\n // ── The outlined variant's resting chrome. The border is deliberately\n // NOT per-state: it holds through hover and open, because a border that\n // moved too would be a second signal for a fact the surface carries.\n { key: 'outlinedBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'outlined', showWhen: { variant: 'outlined' } },\n { key: 'outlinedBorder', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'outlined', showWhen: { variant: 'outlined' } },\n\n // ── The value.\n // Gated on `collapsed: no` — the collapsed row clips its text away, so\n // every type knob below is a slider with no visible effect there. Same\n // reasoning for the caption group, the trailing colour, and padding/gap.\n { key: 'valueColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text)', section: 'value', showWhen: { collapsed: 'no' } },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 14, min: 11, max: 18, step: 1, unit: 'px', section: 'value', showWhen: { collapsed: 'no' } },\n { key: 'fontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'], section: 'value', showWhen: { collapsed: 'no' } },\n\n // ── The caption. Muted is under the AA text floor on the card surface\n // (2.54:1), which is acceptable here ONLY because a caption names the\n // control rather than carrying content — the value beneath it is the\n // content. Swap to --color-text-strong if that ever stops being true.\n { key: 'captionColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionFontSize', label: 'Font Size', control: 'number', defaultValue: 10, min: 8, max: 14, step: 1, unit: 'px', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionFontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'], section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n // Uppercase is the DEFAULT, not the definition — an eyebrow in most rails,\n // but a sentence-case caption under an address is the same slot read\n // differently, and a brand font may not carry caps well. Paired knob: the\n // tracking below exists to open up caps, so turning this off usually means\n // turning that down too.\n { key: 'captionTextTransform', label: 'Text Transform', control: 'select', defaultValue: 'uppercase', options: ['uppercase', 'none', 'capitalize', 'lowercase'], section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n // A number in `em`, not a free-text CSS length: the unit is fixed, so the\n // only thing a text field adds is the chance to type `6px` (catastrophic\n // tracking at a 10px caption) or a bare `0.06`, which is invalid CSS the\n // browser drops in silence. `em` and not `px` so the tracking scales with\n // the caption's own size — and with the brand font, which Brand Settings\n // can change under it.\n { key: 'captionLetterSpacing', label: 'Letter Spacing', control: 'number', defaultValue: 0.06, min: 0, max: 0.2, step: 0.01, unit: 'em', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionGap', label: 'Row Gap', control: 'number', defaultValue: 2, min: 0, max: 8, step: 1, unit: 'px', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n\n // ── The mark. `iconSize` is a MIN box, not a fixed one: it reserves and\n // aligns without squeezing a child that brings its own size (an Avatar).\n // Gated to the Icon mark alone. Being a FLOOR, it does nothing while it\n // sits below the mark's own size — measured, a 32px `Avatar size='small'`\n // in a 28px slot yields a 32px slot, and Avatar's 40px default is further\n // out still. Exposed for Avatar it was a knob a designer drags through its\n // whole default range for no visible effect, waking up only past 32. The\n // lever that actually sizes an avatar is Avatar's own `size` preset; two\n // knobs competing to answer \"how big is the mark\" is worse than one.\n { key: 'iconSize', label: 'Slot Size', control: 'number', defaultValue: 28, min: 16, max: 44, step: 2, unit: 'px', section: 'icon', showWhen: { mark: 'icon' } },\n // Only the Icon mark inherits this colour — an Avatar paints itself.\n { key: 'iconColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-strong)', section: 'icon', showWhen: { mark: 'icon' } },\n\n { key: 'trailingColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'trailing', showWhen: { withTrailing: 'yes', collapsed: 'no' } },\n\n // ── Shared sizing. Padding and gap are the two that STOP applying when\n // collapsed (the tile sets `padding: 0` and has one in-flow child left),\n // so they are gated; radius still paints the 32x32 box and stays.\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 12, min: 4, max: 24, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 8, min: 4, max: 16, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'gap', label: 'Gap', control: 'number', defaultValue: 10, min: 2, max: 20, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'borderRadius', label: 'Radius', control: 'slider', defaultValue: 8, min: 0, max: 20, step: 1, unit: 'px' },\n // The collapsed tile's own footprint — a MINIMUM, so a mark larger than it\n // (an `Avatar`) grows the row rather than being clipped. 46px deliberately\n // differs from the 32px `app-sidebar` gives its collapsed nav items: a\n // trigger has lost its chevron and its text at rail width, so footprint is\n // the only thing left saying it opens something rather than navigating.\n // It is also a composition choice: the tile is a surface AROUND the mark,\n // so a 32px mark (`Avatar size=\"small\"`) sits with ~7px on every side,\n // mirroring `sidebar-nav-item`'s 32px tile around a smaller icon.\n { key: 'collapsedSize', label: 'Tile Size', control: 'number', defaultValue: 46, min: 24, max: 64, step: 2, unit: 'px', showWhen: { collapsed: 'yes' } },\n ],\n layoutVariants: [\n {\n key: 'variant',\n label: 'Variant',\n options: [\n { value: 'outlined', label: 'Outlined' },\n { value: 'plain', label: 'Plain' },\n ],\n defaultValue: 'outlined',\n },\n {\n // `open` and `disabled` are not classes the showcase fakes — it applies\n // the real `aria-expanded=\"true\"` and the real `disabled` attribute,\n // which ARE the atom's selectors for those states, so the picker\n // exercises the production mechanism. Only `hover` / `focus` need the\n // kit's `--state-*` forced classes (a pointer and the tab ring cannot be\n // parked on demand); those share a declaration block with the real\n // pseudo-selectors and so cannot drift from them.\n key: 'state',\n label: 'State',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'hover', label: 'Hover' },\n { value: 'open', label: 'Open' },\n { value: 'focus', label: 'Focus' },\n { value: 'disabled', label: 'Disabled' },\n ],\n defaultValue: 'default',\n },\n {\n // The mark slot takes either kind of child, and `Avatar` is the case\n // worth being able to see: it proves the slot paints no tile and does\n // not squeeze a child that brings its own size. `None` is here for the\n // same reason as the other two slot pickers — to show what the atom\n // does NOT reserve: turn a slot off and the row closes up rather than\n // leaving a hole. The showcase's caption and value follow this pick,\n // since an avatar beside a workspace name would misrepresent the atom.\n key: 'mark',\n label: 'Mark',\n options: [\n { value: 'icon', label: 'Icon' },\n { value: 'avatar', label: 'Avatar' },\n { value: 'none', label: 'None' },\n ],\n defaultValue: 'icon',\n },\n {\n // The 64px rail. Its own picker rather than a value on `state`, because\n // it is orthogonal to every state — a collapsed row still hovers, opens\n // and disables, and folding the two would make five of those\n // combinations unreachable.\n key: 'collapsed',\n label: 'Rail',\n options: [\n { value: 'no', label: 'Expanded' },\n { value: 'yes', label: 'Collapsed' },\n ],\n defaultValue: 'no',\n },\n {\n key: 'withCaption',\n label: 'Caption',\n options: [\n { value: 'yes', label: 'On' },\n { value: 'no', label: 'Off' },\n ],\n defaultValue: 'yes',\n // Collapsed clips the caption and drops the chevron, so both slot\n // toggles (and the placement picker) would be no-ops there — they\n // disappear rather than sit dead, per the list-item precedent.\n showWhen: { collapsed: 'no' },\n },\n {\n // Above the value the caption LABELS the level (\"Workspace\"); below it,\n // it QUALIFIES the value (\"Tenant owner\" under an address). Swapped in\n // the markup, not with `column-reverse` — reversing visually while the\n // DOM stays put would split reading order from visual order (WCAG\n // 1.3.2) and keep announcing the pair the wrong way round.\n key: 'captionPlacement',\n label: 'Caption Position',\n options: [\n { value: 'above', label: 'Above' },\n { value: 'below', label: 'Below' },\n ],\n defaultValue: 'above',\n showWhen: { withCaption: 'yes', collapsed: 'no' },\n },\n {\n key: 'withTrailing',\n label: 'Trailing',\n options: [\n { value: 'yes', label: 'On' },\n { value: 'no', label: 'Off' },\n ],\n defaultValue: 'yes',\n showWhen: { collapsed: 'no' },\n },\n ],\n events: [\n { name: 'onClick', description: 'Fires when the row is activated. Wired for you when the trigger is spread with a Menu/Listbox `triggerProps` — do not add your own on top, it would override theirs.', payload: 'MouseEvent' },\n ],\n api: {\n importPath: '@viax/uxm/ui',\n importNames: 'SidebarNavTrigger',\n props: [\n { name: 'icon', type: 'ReactNode', description: 'The mark on the left — a bare Icon in a switcher, an Avatar in an account row. No tile is drawn behind it: the slot is reserved, sized and aligned, and paints nothing.' },\n { name: 'caption', type: 'ReactNode', description: 'The small line beside the value. It sits inside the button, so it joins the accessible name — pass an explicit aria-label if a pairing reads badly.' },\n { name: 'captionPlacement', type: '\"above\" | \"below\"', defaultValue: '\"above\"', description: 'Which side of the value the caption sits on. Above it LABELS the level this control changes (a switcher\\'s \"Workspace\"); below it QUALIFIES the value (an account row\\'s \"Tenant owner\" under the address). Swapped in the markup rather than with flex-direction: column-reverse, so reading order keeps matching visual order (WCAG 1.3.2) and the accessible name follows the row.' },\n { name: 'children', type: 'ReactNode', description: 'The value — the workspace name, the signed-in address.' },\n { name: 'trailing', type: 'ReactNode', description: 'The chevron. Visible at rest, with no reveal-on-hover behaviour: a control that opens something has to advertise it before you point at it.' },\n { name: 'variant', type: '\"plain\" | \"outlined\"', defaultValue: '\"plain\"', description: 'plain — nothing at rest, for the account row at the foot of the rail. outlined — a hairline plus the card surface, for the switcher, which stands in a box because it names the level everything below it belongs to.' },\n { name: 'collapsed', type: 'boolean', defaultValue: 'false', description: 'Render for a 64px rail: a 46px tile (--uxm-sidebar-nav-trigger-collapsed-size, a MINIMUM rather than a clamp — a mark larger than it grows the row instead of being clipped), the trailing chevron dropped, and caption + value kept in the DOM but visually hidden — so the button announces identically collapsed and expanded rather than becoming a nameless icon. 46 deliberately differs from the 32px AppSidebar gives its collapsed nav items: a trigger has lost both chevron and text at this width, so footprint is the only signal left that it opens something. The tile is a surface AROUND the mark rather than a frame hugging it — pair it with Avatar size=\"small\" (32px) for ~7px on every side. outlined keeps its border at this size, since the box is then the only thing distinguishing a switcher from a plain account row. Pass title as well: with the chevron gone, only position and the mark still say the row opens something.' },\n ],\n },\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../src/studio/lib/registry/composite/sidebar-nav-trigger.ts"],"sourcesContent":["import type { ComponentDef } from '../../types';\n\nexport const sidebarNavTriggerDef: ComponentDef = {\n id: 'sidebar-nav-trigger',\n name: 'Sidebar Nav Trigger',\n category: 'Composite',\n description:\n \"A rail row that OPENS something rather than navigating to it — a workspace switcher, an account menu, an environment picker. A <button> extending ButtonHTMLAttributes, so a Menu's or Listbox's `triggerProps` spread straight onto it, ref and ARIA included. Four optional slots: icon (a bare Icon in a switcher, an Avatar in the account row), caption (the small line beside the value; captionPlacement 'above' | 'below', default above — above LABELS the level this control changes, below QUALIFIES the value), children (the value) and trailing (the chevron — shown as soon as it is passed; no hover-reveal, unlike Sidebar Nav Item's trailing slot. The Trailing picker here decides whether the showcase PASSES the slot at all, exactly like Mark and Caption — it is not a visibility gate in the component). The atom draws NO tile behind the icon: it reserves the slot, sizes it, aligns it, and paints nothing. And it reserves nothing it was not given — no icon and the text starts at the padding edge, no caption and the value centres, no trailing and there is no gap where a chevron would have been. Sibling of Sidebar Nav Item rather than a variant of it: that one renders an <a>, hides trailing until hover, paints an icon tile and has a single-line label. `collapsed` renders it for a 64px rail: a 46px tile, the chevron dropped, and caption + value clipped but kept in the DOM so the accessible name survives. Pair it with a 32px mark. See the collapsed prop below for the reasoning.\",\n styleProperties: [\n // ── Per-state surface. Hover and open paint the SAME thing in both\n // variants, so they share one knob — a second one would only let a\n // designer make them disagree, and they mean the same thing to the eye.\n // Open has no prop: it is read from [aria-expanded=\"true\"], which Menu\n // and Listbox already set through triggerProps.\n { key: 'bg', label: 'Background', control: 'color', defaultValue: 'transparent', section: 'states', showWhen: { state: 'default' } },\n { key: 'hoverBg', label: 'Background', control: 'color', defaultValue: 'var(--color-surface)', section: 'states', showWhen: { state: ['hover', 'open'] } },\n { key: 'focusRing', label: 'Ring Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'focusState', showWhen: { state: 'focus' } },\n // Dimmed, not recoloured — a disabled `outlined` trigger has to stay the\n // same box. One opacity covers both variants, so there is nothing to keep\n // in sync between them.\n { key: 'disabledOpacity', label: 'Opacity', control: 'slider', defaultValue: 0.45, min: 0.1, max: 1, step: 0.05, section: 'disabledState', showWhen: { state: 'disabled' } },\n\n // ── The outlined variant's resting chrome. The border is deliberately\n // NOT per-state: it holds through hover and open, because a border that\n // moved too would be a second signal for a fact the surface carries.\n { key: 'outlinedBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'outlined', showWhen: { variant: 'outlined' } },\n { key: 'outlinedBorder', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'outlined', showWhen: { variant: 'outlined' } },\n\n // ── The value.\n // Gated on `collapsed: no` — the collapsed row clips its text away, so\n // every type knob below is a slider with no visible effect there. Same\n // reasoning for the caption group, the trailing colour, and padding/gap.\n { key: 'valueColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text)', section: 'value', showWhen: { collapsed: 'no' } },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 14, min: 11, max: 18, step: 1, unit: 'px', section: 'value', showWhen: { collapsed: 'no' } },\n { key: 'fontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'], section: 'value', showWhen: { collapsed: 'no' } },\n\n // ── The caption. Muted is under the AA text floor on the card surface\n // (2.54:1), which is acceptable here ONLY because a caption names the\n // control rather than carrying content — the value beneath it is the\n // content. Swap to --color-text-strong if that ever stops being true.\n { key: 'captionColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionFontSize', label: 'Font Size', control: 'number', defaultValue: 10, min: 8, max: 14, step: 1, unit: 'px', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionFontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'], section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n // Uppercase is the DEFAULT, not the definition — an eyebrow in most rails,\n // but a sentence-case caption under an address is the same slot read\n // differently, and a brand font may not carry caps well. Paired knob: the\n // tracking below exists to open up caps, so turning this off usually means\n // turning that down too.\n { key: 'captionTextTransform', label: 'Text Transform', control: 'select', defaultValue: 'uppercase', options: ['uppercase', 'none', 'capitalize', 'lowercase'], section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n // A number in `em`, not a free-text CSS length: the unit is fixed, so the\n // only thing a text field adds is the chance to type `6px` (catastrophic\n // tracking at a 10px caption) or a bare `0.06`, which is invalid CSS the\n // browser drops in silence. `em` and not `px` so the tracking scales with\n // the caption's own size — and with the brand font, which Brand Settings\n // can change under it.\n { key: 'captionLetterSpacing', label: 'Letter Spacing', control: 'number', defaultValue: 0.06, min: 0, max: 0.2, step: 0.01, unit: 'em', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionGap', label: 'Row Gap', control: 'number', defaultValue: 2, min: 0, max: 8, step: 1, unit: 'px', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n\n // ── The mark. `iconSize` is a MIN box, not a fixed one: it reserves and\n // aligns without squeezing a child that brings its own size (an Avatar).\n // Gated to the Icon mark alone. Being a FLOOR, it does nothing while it\n // sits below the mark's own size — measured, a 32px `Avatar size='small'`\n // in a 28px slot yields a 32px slot, and Avatar's 40px default is further\n // out still. Exposed for Avatar it was a knob a designer drags through its\n // whole default range for no visible effect, waking up only past 32. The\n // lever that actually sizes an avatar is Avatar's own `size` preset; two\n // knobs competing to answer \"how big is the mark\" is worse than one.\n { key: 'iconSize', label: 'Slot Size', control: 'number', defaultValue: 28, min: 16, max: 44, step: 2, unit: 'px', section: 'icon', showWhen: { mark: 'icon' } },\n // Only the Icon mark inherits this colour — an Avatar paints itself.\n { key: 'iconColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-strong)', section: 'icon', showWhen: { mark: 'icon' } },\n\n { key: 'trailingColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'trailing', showWhen: { withTrailing: 'yes', collapsed: 'no' } },\n\n // ── Shared sizing. Padding and gap are the two that STOP applying when\n // collapsed (the tile sets `padding: 0` and has one in-flow child left),\n // so they are gated; radius still paints the 32x32 box and stays.\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 12, min: 4, max: 24, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 8, min: 4, max: 16, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'gap', label: 'Gap', control: 'number', defaultValue: 10, min: 2, max: 20, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'borderRadius', label: 'Radius', control: 'slider', defaultValue: 8, min: 0, max: 20, step: 1, unit: 'px' },\n // The collapsed tile's own footprint — a MINIMUM, so a mark larger than it\n // (an `Avatar`) grows the row rather than being clipped. 46px deliberately\n // differs from the 32px `app-sidebar` gives its collapsed nav items: a\n // trigger has lost its chevron and its text at rail width, so footprint is\n // the only thing left saying it opens something rather than navigating.\n // It is also a composition choice: the tile is a surface AROUND the mark,\n // so a 32px mark (`Avatar size=\"small\"`) sits with ~7px on every side,\n // mirroring `sidebar-nav-item`'s 32px tile around a smaller icon.\n { key: 'collapsedSize', label: 'Tile Size', control: 'number', defaultValue: 46, min: 24, max: 64, step: 2, unit: 'px', showWhen: { collapsed: 'yes' } },\n ],\n layoutVariants: [\n {\n key: 'variant',\n label: 'Variant',\n options: [\n { value: 'outlined', label: 'Outlined' },\n { value: 'plain', label: 'Plain' },\n ],\n defaultValue: 'outlined',\n },\n {\n // `open` and `disabled` are not classes the showcase fakes — it applies\n // the real `aria-expanded=\"true\"` and the real `disabled` attribute,\n // which ARE the atom's selectors for those states, so the picker\n // exercises the production mechanism. Only `hover` / `focus` need the\n // kit's `--state-*` forced classes (a pointer and the tab ring cannot be\n // parked on demand); those share a declaration block with the real\n // pseudo-selectors and so cannot drift from them.\n key: 'state',\n label: 'State',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'hover', label: 'Hover' },\n { value: 'open', label: 'Open' },\n { value: 'focus', label: 'Focus' },\n { value: 'disabled', label: 'Disabled' },\n ],\n defaultValue: 'default',\n },\n {\n // The mark slot takes either kind of child, and `Avatar` is the case\n // worth being able to see: it proves the slot paints no tile and does\n // not squeeze a child that brings its own size. `None` is here for the\n // same reason as the other two slot pickers — to show what the atom\n // does NOT reserve: turn a slot off and the row closes up rather than\n // leaving a hole. The showcase's caption and value follow this pick,\n // since an avatar beside a workspace name would misrepresent the atom.\n key: 'mark',\n label: 'Mark',\n options: [\n { value: 'icon', label: 'Icon' },\n { value: 'avatar', label: 'Avatar' },\n { value: 'none', label: 'None' },\n ],\n defaultValue: 'icon',\n },\n {\n // The 64px rail. Its own picker rather than a value on `state`, because\n // it is orthogonal to every state — a collapsed row still hovers, opens\n // and disables, and folding the two would make five of those\n // combinations unreachable.\n key: 'collapsed',\n label: 'Rail',\n options: [\n { value: 'no', label: 'Expanded' },\n { value: 'yes', label: 'Collapsed' },\n ],\n defaultValue: 'no',\n },\n {\n key: 'withCaption',\n label: 'Caption',\n options: [\n { value: 'yes', label: 'On' },\n { value: 'no', label: 'Off' },\n ],\n defaultValue: 'yes',\n // Collapsed clips the caption and drops the chevron, so both slot\n // toggles (and the placement picker) would be no-ops there — they\n // disappear rather than sit dead, per the list-item precedent.\n showWhen: { collapsed: 'no' },\n },\n {\n // Above the value the caption LABELS the level (\"Workspace\"); below it,\n // it QUALIFIES the value (\"Tenant owner\" under an address). Swapped in\n // the markup, not with `column-reverse` — reversing visually while the\n // DOM stays put would split reading order from visual order (WCAG\n // 1.3.2) and keep announcing the pair the wrong way round.\n key: 'captionPlacement',\n label: 'Caption Position',\n options: [\n { value: 'above', label: 'Above' },\n { value: 'below', label: 'Below' },\n ],\n defaultValue: 'above',\n showWhen: { withCaption: 'yes', collapsed: 'no' },\n },\n {\n key: 'withTrailing',\n label: 'Trailing',\n options: [\n { value: 'yes', label: 'On' },\n { value: 'no', label: 'Off' },\n ],\n defaultValue: 'yes',\n showWhen: { collapsed: 'no' },\n },\n ],\n events: [\n { name: 'onClick', description: 'Fires when the row is activated. Wired for you when the trigger is spread with a Menu/Listbox `triggerProps` — do not add your own on top, it would override theirs.', payload: 'MouseEvent' },\n ],\n api: {\n importPath: '@viax.io/uxm/ui',\n importNames: 'SidebarNavTrigger',\n props: [\n { name: 'icon', type: 'ReactNode', description: 'The mark on the left — a bare Icon in a switcher, an Avatar in an account row. No tile is drawn behind it: the slot is reserved, sized and aligned, and paints nothing.' },\n { name: 'caption', type: 'ReactNode', description: 'The small line beside the value. It sits inside the button, so it joins the accessible name — pass an explicit aria-label if a pairing reads badly.' },\n { name: 'captionPlacement', type: '\"above\" | \"below\"', defaultValue: '\"above\"', description: 'Which side of the value the caption sits on. Above it LABELS the level this control changes (a switcher\\'s \"Workspace\"); below it QUALIFIES the value (an account row\\'s \"Tenant owner\" under the address). Swapped in the markup rather than with flex-direction: column-reverse, so reading order keeps matching visual order (WCAG 1.3.2) and the accessible name follows the row.' },\n { name: 'children', type: 'ReactNode', description: 'The value — the workspace name, the signed-in address.' },\n { name: 'trailing', type: 'ReactNode', description: 'The chevron. Visible at rest, with no reveal-on-hover behaviour: a control that opens something has to advertise it before you point at it.' },\n { name: 'variant', type: '\"plain\" | \"outlined\"', defaultValue: '\"plain\"', description: 'plain — nothing at rest, for the account row at the foot of the rail. outlined — a hairline plus the card surface, for the switcher, which stands in a box because it names the level everything below it belongs to.' },\n { name: 'collapsed', type: 'boolean', defaultValue: 'false', description: 'Render for a 64px rail: a 46px tile (--uxm-sidebar-nav-trigger-collapsed-size, a MINIMUM rather than a clamp — a mark larger than it grows the row instead of being clipped), the trailing chevron dropped, and caption + value kept in the DOM but visually hidden — so the button announces identically collapsed and expanded rather than becoming a nameless icon. 46 deliberately differs from the 32px AppSidebar gives its collapsed nav items: a trigger has lost both chevron and text at this width, so footprint is the only signal left that it opens something. The tile is a surface AROUND the mark rather than a frame hugging it — pair it with Avatar size=\"small\" (32px) for ~7px on every side. outlined keeps its border at this size, since the box is then the only thing distinguishing a switcher from a plain account row. Pass title as well: with the chevron gone, only position and the mark still say the row opens something.' },\n ],\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,uBAAqC;AAAA,EAChD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aACE;AAAA,EACF,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMf,EAAE,KAAK,MAAM,OAAO,cAAc,SAAS,SAAS,cAAc,eAAe,SAAS,UAAU,UAAU,EAAE,OAAO,UAAU,EAAE;AAAA,IACnI,EAAE,KAAK,WAAW,OAAO,cAAc,SAAS,SAAS,cAAc,wBAAwB,SAAS,UAAU,UAAU,EAAE,OAAO,CAAC,SAAS,MAAM,EAAE,EAAE;AAAA,IACzJ,EAAE,KAAK,aAAa,OAAO,cAAc,SAAS,SAAS,cAAc,uBAAuB,SAAS,cAAc,UAAU,EAAE,OAAO,QAAQ,EAAE;AAAA;AAAA;AAAA;AAAA,IAIpJ,EAAE,KAAK,mBAAmB,OAAO,WAAW,SAAS,UAAU,cAAc,MAAM,KAAK,KAAK,KAAK,GAAG,MAAM,MAAM,SAAS,iBAAiB,UAAU,EAAE,OAAO,WAAW,EAAE;AAAA;AAAA;AAAA;AAAA,IAK3K,EAAE,KAAK,cAAc,OAAO,cAAc,SAAS,SAAS,cAAc,qBAAqB,SAAS,YAAY,UAAU,EAAE,SAAS,WAAW,EAAE;AAAA,IACtJ,EAAE,KAAK,kBAAkB,OAAO,UAAU,SAAS,SAAS,cAAc,uBAAuB,SAAS,YAAY,UAAU,EAAE,SAAS,WAAW,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,IAMxJ,EAAE,KAAK,cAAc,OAAO,SAAS,SAAS,SAAS,cAAc,qBAAqB,SAAS,SAAS,UAAU,EAAE,WAAW,KAAK,EAAE;AAAA,IAC1I,EAAE,KAAK,YAAY,OAAO,aAAa,SAAS,UAAU,cAAc,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,GAAG,MAAM,MAAM,SAAS,SAAS,UAAU,EAAE,WAAW,KAAK,EAAE;AAAA,IACnK,EAAE,KAAK,cAAc,OAAO,eAAe,SAAS,UAAU,cAAc,OAAO,SAAS,CAAC,OAAO,OAAO,OAAO,KAAK,GAAG,SAAS,SAAS,UAAU,EAAE,WAAW,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,IAM1K,EAAE,KAAK,gBAAgB,OAAO,SAAS,SAAS,SAAS,cAAc,2BAA2B,SAAS,WAAW,UAAU,EAAE,aAAa,OAAO,WAAW,KAAK,EAAE;AAAA,IACxK,EAAE,KAAK,mBAAmB,OAAO,aAAa,SAAS,UAAU,cAAc,IAAI,KAAK,GAAG,KAAK,IAAI,MAAM,GAAG,MAAM,MAAM,SAAS,WAAW,UAAU,EAAE,aAAa,OAAO,WAAW,KAAK,EAAE;AAAA,IAC/L,EAAE,KAAK,qBAAqB,OAAO,eAAe,SAAS,UAAU,cAAc,OAAO,SAAS,CAAC,OAAO,OAAO,OAAO,KAAK,GAAG,SAAS,WAAW,UAAU,EAAE,aAAa,OAAO,WAAW,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMvM,EAAE,KAAK,wBAAwB,OAAO,kBAAkB,SAAS,UAAU,cAAc,aAAa,SAAS,CAAC,aAAa,QAAQ,cAAc,WAAW,GAAG,SAAS,WAAW,UAAU,EAAE,aAAa,OAAO,WAAW,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOvO,EAAE,KAAK,wBAAwB,OAAO,kBAAkB,SAAS,UAAU,cAAc,MAAM,KAAK,GAAG,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,SAAS,WAAW,UAAU,EAAE,aAAa,OAAO,WAAW,KAAK,EAAE;AAAA,IAC/M,EAAE,KAAK,cAAc,OAAO,WAAW,SAAS,UAAU,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,MAAM,SAAS,WAAW,UAAU,EAAE,aAAa,OAAO,WAAW,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWtL,EAAE,KAAK,YAAY,OAAO,aAAa,SAAS,UAAU,cAAc,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,GAAG,MAAM,MAAM,SAAS,QAAQ,UAAU,EAAE,MAAM,OAAO,EAAE;AAAA;AAAA,IAE/J,EAAE,KAAK,aAAa,OAAO,SAAS,SAAS,SAAS,cAAc,4BAA4B,SAAS,QAAQ,UAAU,EAAE,MAAM,OAAO,EAAE;AAAA,IAE5I,EAAE,KAAK,iBAAiB,OAAO,SAAS,SAAS,SAAS,cAAc,2BAA2B,SAAS,YAAY,UAAU,EAAE,cAAc,OAAO,WAAW,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA,IAK3K,EAAE,KAAK,YAAY,OAAO,aAAa,SAAS,UAAU,cAAc,IAAI,KAAK,GAAG,KAAK,IAAI,MAAM,GAAG,MAAM,MAAM,UAAU,EAAE,WAAW,KAAK,EAAE;AAAA,IAChJ,EAAE,KAAK,YAAY,OAAO,aAAa,SAAS,UAAU,cAAc,GAAG,KAAK,GAAG,KAAK,IAAI,MAAM,GAAG,MAAM,MAAM,UAAU,EAAE,WAAW,KAAK,EAAE;AAAA,IAC/I,EAAE,KAAK,OAAO,OAAO,OAAO,SAAS,UAAU,cAAc,IAAI,KAAK,GAAG,KAAK,IAAI,MAAM,GAAG,MAAM,MAAM,UAAU,EAAE,WAAW,KAAK,EAAE;AAAA,IACrI,EAAE,KAAK,gBAAgB,OAAO,UAAU,SAAS,UAAU,cAAc,GAAG,KAAK,GAAG,KAAK,IAAI,MAAM,GAAG,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASjH,EAAE,KAAK,iBAAiB,OAAO,aAAa,SAAS,UAAU,cAAc,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,GAAG,MAAM,MAAM,UAAU,EAAE,WAAW,MAAM,EAAE;AAAA,EACzJ;AAAA,EACA,gBAAgB;AAAA,IACd;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,QACvC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,MACnC;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,QACrC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,QACjC,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,QAC/B,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,QACjC,EAAE,OAAO,YAAY,OAAO,WAAW;AAAA,MACzC;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,QAC/B,EAAE,OAAO,UAAU,OAAO,SAAS;AAAA,QACnC,EAAE,OAAO,QAAQ,OAAO,OAAO;AAAA,MACjC;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,MAAM,OAAO,WAAW;AAAA,QACjC,EAAE,OAAO,OAAO,OAAO,YAAY;AAAA,MACrC;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,OAAO,OAAO,KAAK;AAAA,QAC5B,EAAE,OAAO,MAAM,OAAO,MAAM;AAAA,MAC9B;AAAA,MACA,cAAc;AAAA;AAAA;AAAA;AAAA,MAId,UAAU,EAAE,WAAW,KAAK;AAAA,IAC9B;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAME,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,QACjC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,MACnC;AAAA,MACA,cAAc;AAAA,MACd,UAAU,EAAE,aAAa,OAAO,WAAW,KAAK;AAAA,IAClD;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,OAAO,OAAO,KAAK;AAAA,QAC5B,EAAE,OAAO,MAAM,OAAO,MAAM;AAAA,MAC9B;AAAA,MACA,cAAc;AAAA,MACd,UAAU,EAAE,WAAW,KAAK;AAAA,IAC9B;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,EAAE,MAAM,WAAW,aAAa,6KAAwK,SAAS,aAAa;AAAA,EAChO;AAAA,EACA,KAAK;AAAA,IACH,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,OAAO;AAAA,MACL,EAAE,MAAM,QAAQ,MAAM,aAAa,aAAa,+KAA0K;AAAA,MAC1N,EAAE,MAAM,WAAW,MAAM,aAAa,aAAa,2JAAsJ;AAAA,MACzM,EAAE,MAAM,oBAAoB,MAAM,qBAAqB,cAAc,WAAW,aAAa,sXAAwX;AAAA,MACrd,EAAE,MAAM,YAAY,MAAM,aAAa,aAAa,8DAAyD;AAAA,MAC7G,EAAE,MAAM,YAAY,MAAM,aAAa,aAAa,8IAA8I;AAAA,MAClM,EAAE,MAAM,WAAW,MAAM,wBAAwB,cAAc,WAAW,aAAa,kOAAwN;AAAA,MAC/S,EAAE,MAAM,aAAa,MAAM,WAAW,cAAc,SAAS,aAAa,+6BAAg6B;AAAA,IAC5+B;AAAA,EACF;AACF;","names":[]}
@@ -181,7 +181,7 @@ const sidebarNavTriggerDef = {
181
181
  { name: "onClick", description: "Fires when the row is activated. Wired for you when the trigger is spread with a Menu/Listbox `triggerProps` \u2014 do not add your own on top, it would override theirs.", payload: "MouseEvent" }
182
182
  ],
183
183
  api: {
184
- importPath: "@viax/uxm/ui",
184
+ importPath: "@viax.io/uxm/ui",
185
185
  importNames: "SidebarNavTrigger",
186
186
  props: [
187
187
  { name: "icon", type: "ReactNode", description: "The mark on the left \u2014 a bare Icon in a switcher, an Avatar in an account row. No tile is drawn behind it: the slot is reserved, sized and aligned, and paints nothing." },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/studio/lib/registry/composite/sidebar-nav-trigger.ts"],"sourcesContent":["import type { ComponentDef } from '../../types';\n\nexport const sidebarNavTriggerDef: ComponentDef = {\n id: 'sidebar-nav-trigger',\n name: 'Sidebar Nav Trigger',\n category: 'Composite',\n description:\n \"A rail row that OPENS something rather than navigating to it — a workspace switcher, an account menu, an environment picker. A <button> extending ButtonHTMLAttributes, so a Menu's or Listbox's `triggerProps` spread straight onto it, ref and ARIA included. Four optional slots: icon (a bare Icon in a switcher, an Avatar in the account row), caption (the small line beside the value; captionPlacement 'above' | 'below', default above — above LABELS the level this control changes, below QUALIFIES the value), children (the value) and trailing (the chevron — shown as soon as it is passed; no hover-reveal, unlike Sidebar Nav Item's trailing slot. The Trailing picker here decides whether the showcase PASSES the slot at all, exactly like Mark and Caption — it is not a visibility gate in the component). The atom draws NO tile behind the icon: it reserves the slot, sizes it, aligns it, and paints nothing. And it reserves nothing it was not given — no icon and the text starts at the padding edge, no caption and the value centres, no trailing and there is no gap where a chevron would have been. Sibling of Sidebar Nav Item rather than a variant of it: that one renders an <a>, hides trailing until hover, paints an icon tile and has a single-line label. `collapsed` renders it for a 64px rail: a 46px tile, the chevron dropped, and caption + value clipped but kept in the DOM so the accessible name survives. Pair it with a 32px mark. See the collapsed prop below for the reasoning.\",\n styleProperties: [\n // ── Per-state surface. Hover and open paint the SAME thing in both\n // variants, so they share one knob — a second one would only let a\n // designer make them disagree, and they mean the same thing to the eye.\n // Open has no prop: it is read from [aria-expanded=\"true\"], which Menu\n // and Listbox already set through triggerProps.\n { key: 'bg', label: 'Background', control: 'color', defaultValue: 'transparent', section: 'states', showWhen: { state: 'default' } },\n { key: 'hoverBg', label: 'Background', control: 'color', defaultValue: 'var(--color-surface)', section: 'states', showWhen: { state: ['hover', 'open'] } },\n { key: 'focusRing', label: 'Ring Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'focusState', showWhen: { state: 'focus' } },\n // Dimmed, not recoloured — a disabled `outlined` trigger has to stay the\n // same box. One opacity covers both variants, so there is nothing to keep\n // in sync between them.\n { key: 'disabledOpacity', label: 'Opacity', control: 'slider', defaultValue: 0.45, min: 0.1, max: 1, step: 0.05, section: 'disabledState', showWhen: { state: 'disabled' } },\n\n // ── The outlined variant's resting chrome. The border is deliberately\n // NOT per-state: it holds through hover and open, because a border that\n // moved too would be a second signal for a fact the surface carries.\n { key: 'outlinedBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'outlined', showWhen: { variant: 'outlined' } },\n { key: 'outlinedBorder', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'outlined', showWhen: { variant: 'outlined' } },\n\n // ── The value.\n // Gated on `collapsed: no` — the collapsed row clips its text away, so\n // every type knob below is a slider with no visible effect there. Same\n // reasoning for the caption group, the trailing colour, and padding/gap.\n { key: 'valueColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text)', section: 'value', showWhen: { collapsed: 'no' } },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 14, min: 11, max: 18, step: 1, unit: 'px', section: 'value', showWhen: { collapsed: 'no' } },\n { key: 'fontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'], section: 'value', showWhen: { collapsed: 'no' } },\n\n // ── The caption. Muted is under the AA text floor on the card surface\n // (2.54:1), which is acceptable here ONLY because a caption names the\n // control rather than carrying content — the value beneath it is the\n // content. Swap to --color-text-strong if that ever stops being true.\n { key: 'captionColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionFontSize', label: 'Font Size', control: 'number', defaultValue: 10, min: 8, max: 14, step: 1, unit: 'px', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionFontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'], section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n // Uppercase is the DEFAULT, not the definition — an eyebrow in most rails,\n // but a sentence-case caption under an address is the same slot read\n // differently, and a brand font may not carry caps well. Paired knob: the\n // tracking below exists to open up caps, so turning this off usually means\n // turning that down too.\n { key: 'captionTextTransform', label: 'Text Transform', control: 'select', defaultValue: 'uppercase', options: ['uppercase', 'none', 'capitalize', 'lowercase'], section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n // A number in `em`, not a free-text CSS length: the unit is fixed, so the\n // only thing a text field adds is the chance to type `6px` (catastrophic\n // tracking at a 10px caption) or a bare `0.06`, which is invalid CSS the\n // browser drops in silence. `em` and not `px` so the tracking scales with\n // the caption's own size — and with the brand font, which Brand Settings\n // can change under it.\n { key: 'captionLetterSpacing', label: 'Letter Spacing', control: 'number', defaultValue: 0.06, min: 0, max: 0.2, step: 0.01, unit: 'em', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionGap', label: 'Row Gap', control: 'number', defaultValue: 2, min: 0, max: 8, step: 1, unit: 'px', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n\n // ── The mark. `iconSize` is a MIN box, not a fixed one: it reserves and\n // aligns without squeezing a child that brings its own size (an Avatar).\n // Gated to the Icon mark alone. Being a FLOOR, it does nothing while it\n // sits below the mark's own size — measured, a 32px `Avatar size='small'`\n // in a 28px slot yields a 32px slot, and Avatar's 40px default is further\n // out still. Exposed for Avatar it was a knob a designer drags through its\n // whole default range for no visible effect, waking up only past 32. The\n // lever that actually sizes an avatar is Avatar's own `size` preset; two\n // knobs competing to answer \"how big is the mark\" is worse than one.\n { key: 'iconSize', label: 'Slot Size', control: 'number', defaultValue: 28, min: 16, max: 44, step: 2, unit: 'px', section: 'icon', showWhen: { mark: 'icon' } },\n // Only the Icon mark inherits this colour — an Avatar paints itself.\n { key: 'iconColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-strong)', section: 'icon', showWhen: { mark: 'icon' } },\n\n { key: 'trailingColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'trailing', showWhen: { withTrailing: 'yes', collapsed: 'no' } },\n\n // ── Shared sizing. Padding and gap are the two that STOP applying when\n // collapsed (the tile sets `padding: 0` and has one in-flow child left),\n // so they are gated; radius still paints the 32x32 box and stays.\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 12, min: 4, max: 24, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 8, min: 4, max: 16, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'gap', label: 'Gap', control: 'number', defaultValue: 10, min: 2, max: 20, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'borderRadius', label: 'Radius', control: 'slider', defaultValue: 8, min: 0, max: 20, step: 1, unit: 'px' },\n // The collapsed tile's own footprint — a MINIMUM, so a mark larger than it\n // (an `Avatar`) grows the row rather than being clipped. 46px deliberately\n // differs from the 32px `app-sidebar` gives its collapsed nav items: a\n // trigger has lost its chevron and its text at rail width, so footprint is\n // the only thing left saying it opens something rather than navigating.\n // It is also a composition choice: the tile is a surface AROUND the mark,\n // so a 32px mark (`Avatar size=\"small\"`) sits with ~7px on every side,\n // mirroring `sidebar-nav-item`'s 32px tile around a smaller icon.\n { key: 'collapsedSize', label: 'Tile Size', control: 'number', defaultValue: 46, min: 24, max: 64, step: 2, unit: 'px', showWhen: { collapsed: 'yes' } },\n ],\n layoutVariants: [\n {\n key: 'variant',\n label: 'Variant',\n options: [\n { value: 'outlined', label: 'Outlined' },\n { value: 'plain', label: 'Plain' },\n ],\n defaultValue: 'outlined',\n },\n {\n // `open` and `disabled` are not classes the showcase fakes — it applies\n // the real `aria-expanded=\"true\"` and the real `disabled` attribute,\n // which ARE the atom's selectors for those states, so the picker\n // exercises the production mechanism. Only `hover` / `focus` need the\n // kit's `--state-*` forced classes (a pointer and the tab ring cannot be\n // parked on demand); those share a declaration block with the real\n // pseudo-selectors and so cannot drift from them.\n key: 'state',\n label: 'State',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'hover', label: 'Hover' },\n { value: 'open', label: 'Open' },\n { value: 'focus', label: 'Focus' },\n { value: 'disabled', label: 'Disabled' },\n ],\n defaultValue: 'default',\n },\n {\n // The mark slot takes either kind of child, and `Avatar` is the case\n // worth being able to see: it proves the slot paints no tile and does\n // not squeeze a child that brings its own size. `None` is here for the\n // same reason as the other two slot pickers — to show what the atom\n // does NOT reserve: turn a slot off and the row closes up rather than\n // leaving a hole. The showcase's caption and value follow this pick,\n // since an avatar beside a workspace name would misrepresent the atom.\n key: 'mark',\n label: 'Mark',\n options: [\n { value: 'icon', label: 'Icon' },\n { value: 'avatar', label: 'Avatar' },\n { value: 'none', label: 'None' },\n ],\n defaultValue: 'icon',\n },\n {\n // The 64px rail. Its own picker rather than a value on `state`, because\n // it is orthogonal to every state — a collapsed row still hovers, opens\n // and disables, and folding the two would make five of those\n // combinations unreachable.\n key: 'collapsed',\n label: 'Rail',\n options: [\n { value: 'no', label: 'Expanded' },\n { value: 'yes', label: 'Collapsed' },\n ],\n defaultValue: 'no',\n },\n {\n key: 'withCaption',\n label: 'Caption',\n options: [\n { value: 'yes', label: 'On' },\n { value: 'no', label: 'Off' },\n ],\n defaultValue: 'yes',\n // Collapsed clips the caption and drops the chevron, so both slot\n // toggles (and the placement picker) would be no-ops there — they\n // disappear rather than sit dead, per the list-item precedent.\n showWhen: { collapsed: 'no' },\n },\n {\n // Above the value the caption LABELS the level (\"Workspace\"); below it,\n // it QUALIFIES the value (\"Tenant owner\" under an address). Swapped in\n // the markup, not with `column-reverse` — reversing visually while the\n // DOM stays put would split reading order from visual order (WCAG\n // 1.3.2) and keep announcing the pair the wrong way round.\n key: 'captionPlacement',\n label: 'Caption Position',\n options: [\n { value: 'above', label: 'Above' },\n { value: 'below', label: 'Below' },\n ],\n defaultValue: 'above',\n showWhen: { withCaption: 'yes', collapsed: 'no' },\n },\n {\n key: 'withTrailing',\n label: 'Trailing',\n options: [\n { value: 'yes', label: 'On' },\n { value: 'no', label: 'Off' },\n ],\n defaultValue: 'yes',\n showWhen: { collapsed: 'no' },\n },\n ],\n events: [\n { name: 'onClick', description: 'Fires when the row is activated. Wired for you when the trigger is spread with a Menu/Listbox `triggerProps` — do not add your own on top, it would override theirs.', payload: 'MouseEvent' },\n ],\n api: {\n importPath: '@viax/uxm/ui',\n importNames: 'SidebarNavTrigger',\n props: [\n { name: 'icon', type: 'ReactNode', description: 'The mark on the left — a bare Icon in a switcher, an Avatar in an account row. No tile is drawn behind it: the slot is reserved, sized and aligned, and paints nothing.' },\n { name: 'caption', type: 'ReactNode', description: 'The small line beside the value. It sits inside the button, so it joins the accessible name — pass an explicit aria-label if a pairing reads badly.' },\n { name: 'captionPlacement', type: '\"above\" | \"below\"', defaultValue: '\"above\"', description: 'Which side of the value the caption sits on. Above it LABELS the level this control changes (a switcher\\'s \"Workspace\"); below it QUALIFIES the value (an account row\\'s \"Tenant owner\" under the address). Swapped in the markup rather than with flex-direction: column-reverse, so reading order keeps matching visual order (WCAG 1.3.2) and the accessible name follows the row.' },\n { name: 'children', type: 'ReactNode', description: 'The value — the workspace name, the signed-in address.' },\n { name: 'trailing', type: 'ReactNode', description: 'The chevron. Visible at rest, with no reveal-on-hover behaviour: a control that opens something has to advertise it before you point at it.' },\n { name: 'variant', type: '\"plain\" | \"outlined\"', defaultValue: '\"plain\"', description: 'plain — nothing at rest, for the account row at the foot of the rail. outlined — a hairline plus the card surface, for the switcher, which stands in a box because it names the level everything below it belongs to.' },\n { name: 'collapsed', type: 'boolean', defaultValue: 'false', description: 'Render for a 64px rail: a 46px tile (--uxm-sidebar-nav-trigger-collapsed-size, a MINIMUM rather than a clamp — a mark larger than it grows the row instead of being clipped), the trailing chevron dropped, and caption + value kept in the DOM but visually hidden — so the button announces identically collapsed and expanded rather than becoming a nameless icon. 46 deliberately differs from the 32px AppSidebar gives its collapsed nav items: a trigger has lost both chevron and text at this width, so footprint is the only signal left that it opens something. The tile is a surface AROUND the mark rather than a frame hugging it — pair it with Avatar size=\"small\" (32px) for ~7px on every side. outlined keeps its border at this size, since the box is then the only thing distinguishing a switcher from a plain account row. Pass title as well: with the chevron gone, only position and the mark still say the row opens something.' },\n ],\n },\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../../src/studio/lib/registry/composite/sidebar-nav-trigger.ts"],"sourcesContent":["import type { ComponentDef } from '../../types';\n\nexport const sidebarNavTriggerDef: ComponentDef = {\n id: 'sidebar-nav-trigger',\n name: 'Sidebar Nav Trigger',\n category: 'Composite',\n description:\n \"A rail row that OPENS something rather than navigating to it — a workspace switcher, an account menu, an environment picker. A <button> extending ButtonHTMLAttributes, so a Menu's or Listbox's `triggerProps` spread straight onto it, ref and ARIA included. Four optional slots: icon (a bare Icon in a switcher, an Avatar in the account row), caption (the small line beside the value; captionPlacement 'above' | 'below', default above — above LABELS the level this control changes, below QUALIFIES the value), children (the value) and trailing (the chevron — shown as soon as it is passed; no hover-reveal, unlike Sidebar Nav Item's trailing slot. The Trailing picker here decides whether the showcase PASSES the slot at all, exactly like Mark and Caption — it is not a visibility gate in the component). The atom draws NO tile behind the icon: it reserves the slot, sizes it, aligns it, and paints nothing. And it reserves nothing it was not given — no icon and the text starts at the padding edge, no caption and the value centres, no trailing and there is no gap where a chevron would have been. Sibling of Sidebar Nav Item rather than a variant of it: that one renders an <a>, hides trailing until hover, paints an icon tile and has a single-line label. `collapsed` renders it for a 64px rail: a 46px tile, the chevron dropped, and caption + value clipped but kept in the DOM so the accessible name survives. Pair it with a 32px mark. See the collapsed prop below for the reasoning.\",\n styleProperties: [\n // ── Per-state surface. Hover and open paint the SAME thing in both\n // variants, so they share one knob — a second one would only let a\n // designer make them disagree, and they mean the same thing to the eye.\n // Open has no prop: it is read from [aria-expanded=\"true\"], which Menu\n // and Listbox already set through triggerProps.\n { key: 'bg', label: 'Background', control: 'color', defaultValue: 'transparent', section: 'states', showWhen: { state: 'default' } },\n { key: 'hoverBg', label: 'Background', control: 'color', defaultValue: 'var(--color-surface)', section: 'states', showWhen: { state: ['hover', 'open'] } },\n { key: 'focusRing', label: 'Ring Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'focusState', showWhen: { state: 'focus' } },\n // Dimmed, not recoloured — a disabled `outlined` trigger has to stay the\n // same box. One opacity covers both variants, so there is nothing to keep\n // in sync between them.\n { key: 'disabledOpacity', label: 'Opacity', control: 'slider', defaultValue: 0.45, min: 0.1, max: 1, step: 0.05, section: 'disabledState', showWhen: { state: 'disabled' } },\n\n // ── The outlined variant's resting chrome. The border is deliberately\n // NOT per-state: it holds through hover and open, because a border that\n // moved too would be a second signal for a fact the surface carries.\n { key: 'outlinedBg', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'outlined', showWhen: { variant: 'outlined' } },\n { key: 'outlinedBorder', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'outlined', showWhen: { variant: 'outlined' } },\n\n // ── The value.\n // Gated on `collapsed: no` — the collapsed row clips its text away, so\n // every type knob below is a slider with no visible effect there. Same\n // reasoning for the caption group, the trailing colour, and padding/gap.\n { key: 'valueColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text)', section: 'value', showWhen: { collapsed: 'no' } },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 14, min: 11, max: 18, step: 1, unit: 'px', section: 'value', showWhen: { collapsed: 'no' } },\n { key: 'fontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'], section: 'value', showWhen: { collapsed: 'no' } },\n\n // ── The caption. Muted is under the AA text floor on the card surface\n // (2.54:1), which is acceptable here ONLY because a caption names the\n // control rather than carrying content — the value beneath it is the\n // content. Swap to --color-text-strong if that ever stops being true.\n { key: 'captionColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionFontSize', label: 'Font Size', control: 'number', defaultValue: 10, min: 8, max: 14, step: 1, unit: 'px', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionFontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'], section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n // Uppercase is the DEFAULT, not the definition — an eyebrow in most rails,\n // but a sentence-case caption under an address is the same slot read\n // differently, and a brand font may not carry caps well. Paired knob: the\n // tracking below exists to open up caps, so turning this off usually means\n // turning that down too.\n { key: 'captionTextTransform', label: 'Text Transform', control: 'select', defaultValue: 'uppercase', options: ['uppercase', 'none', 'capitalize', 'lowercase'], section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n // A number in `em`, not a free-text CSS length: the unit is fixed, so the\n // only thing a text field adds is the chance to type `6px` (catastrophic\n // tracking at a 10px caption) or a bare `0.06`, which is invalid CSS the\n // browser drops in silence. `em` and not `px` so the tracking scales with\n // the caption's own size — and with the brand font, which Brand Settings\n // can change under it.\n { key: 'captionLetterSpacing', label: 'Letter Spacing', control: 'number', defaultValue: 0.06, min: 0, max: 0.2, step: 0.01, unit: 'em', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n { key: 'captionGap', label: 'Row Gap', control: 'number', defaultValue: 2, min: 0, max: 8, step: 1, unit: 'px', section: 'caption', showWhen: { withCaption: 'yes', collapsed: 'no' } },\n\n // ── The mark. `iconSize` is a MIN box, not a fixed one: it reserves and\n // aligns without squeezing a child that brings its own size (an Avatar).\n // Gated to the Icon mark alone. Being a FLOOR, it does nothing while it\n // sits below the mark's own size — measured, a 32px `Avatar size='small'`\n // in a 28px slot yields a 32px slot, and Avatar's 40px default is further\n // out still. Exposed for Avatar it was a knob a designer drags through its\n // whole default range for no visible effect, waking up only past 32. The\n // lever that actually sizes an avatar is Avatar's own `size` preset; two\n // knobs competing to answer \"how big is the mark\" is worse than one.\n { key: 'iconSize', label: 'Slot Size', control: 'number', defaultValue: 28, min: 16, max: 44, step: 2, unit: 'px', section: 'icon', showWhen: { mark: 'icon' } },\n // Only the Icon mark inherits this colour — an Avatar paints itself.\n { key: 'iconColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-strong)', section: 'icon', showWhen: { mark: 'icon' } },\n\n { key: 'trailingColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'trailing', showWhen: { withTrailing: 'yes', collapsed: 'no' } },\n\n // ── Shared sizing. Padding and gap are the two that STOP applying when\n // collapsed (the tile sets `padding: 0` and has one in-flow child left),\n // so they are gated; radius still paints the 32x32 box and stays.\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 12, min: 4, max: 24, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 8, min: 4, max: 16, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'gap', label: 'Gap', control: 'number', defaultValue: 10, min: 2, max: 20, step: 1, unit: 'px', showWhen: { collapsed: 'no' } },\n { key: 'borderRadius', label: 'Radius', control: 'slider', defaultValue: 8, min: 0, max: 20, step: 1, unit: 'px' },\n // The collapsed tile's own footprint — a MINIMUM, so a mark larger than it\n // (an `Avatar`) grows the row rather than being clipped. 46px deliberately\n // differs from the 32px `app-sidebar` gives its collapsed nav items: a\n // trigger has lost its chevron and its text at rail width, so footprint is\n // the only thing left saying it opens something rather than navigating.\n // It is also a composition choice: the tile is a surface AROUND the mark,\n // so a 32px mark (`Avatar size=\"small\"`) sits with ~7px on every side,\n // mirroring `sidebar-nav-item`'s 32px tile around a smaller icon.\n { key: 'collapsedSize', label: 'Tile Size', control: 'number', defaultValue: 46, min: 24, max: 64, step: 2, unit: 'px', showWhen: { collapsed: 'yes' } },\n ],\n layoutVariants: [\n {\n key: 'variant',\n label: 'Variant',\n options: [\n { value: 'outlined', label: 'Outlined' },\n { value: 'plain', label: 'Plain' },\n ],\n defaultValue: 'outlined',\n },\n {\n // `open` and `disabled` are not classes the showcase fakes — it applies\n // the real `aria-expanded=\"true\"` and the real `disabled` attribute,\n // which ARE the atom's selectors for those states, so the picker\n // exercises the production mechanism. Only `hover` / `focus` need the\n // kit's `--state-*` forced classes (a pointer and the tab ring cannot be\n // parked on demand); those share a declaration block with the real\n // pseudo-selectors and so cannot drift from them.\n key: 'state',\n label: 'State',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'hover', label: 'Hover' },\n { value: 'open', label: 'Open' },\n { value: 'focus', label: 'Focus' },\n { value: 'disabled', label: 'Disabled' },\n ],\n defaultValue: 'default',\n },\n {\n // The mark slot takes either kind of child, and `Avatar` is the case\n // worth being able to see: it proves the slot paints no tile and does\n // not squeeze a child that brings its own size. `None` is here for the\n // same reason as the other two slot pickers — to show what the atom\n // does NOT reserve: turn a slot off and the row closes up rather than\n // leaving a hole. The showcase's caption and value follow this pick,\n // since an avatar beside a workspace name would misrepresent the atom.\n key: 'mark',\n label: 'Mark',\n options: [\n { value: 'icon', label: 'Icon' },\n { value: 'avatar', label: 'Avatar' },\n { value: 'none', label: 'None' },\n ],\n defaultValue: 'icon',\n },\n {\n // The 64px rail. Its own picker rather than a value on `state`, because\n // it is orthogonal to every state — a collapsed row still hovers, opens\n // and disables, and folding the two would make five of those\n // combinations unreachable.\n key: 'collapsed',\n label: 'Rail',\n options: [\n { value: 'no', label: 'Expanded' },\n { value: 'yes', label: 'Collapsed' },\n ],\n defaultValue: 'no',\n },\n {\n key: 'withCaption',\n label: 'Caption',\n options: [\n { value: 'yes', label: 'On' },\n { value: 'no', label: 'Off' },\n ],\n defaultValue: 'yes',\n // Collapsed clips the caption and drops the chevron, so both slot\n // toggles (and the placement picker) would be no-ops there — they\n // disappear rather than sit dead, per the list-item precedent.\n showWhen: { collapsed: 'no' },\n },\n {\n // Above the value the caption LABELS the level (\"Workspace\"); below it,\n // it QUALIFIES the value (\"Tenant owner\" under an address). Swapped in\n // the markup, not with `column-reverse` — reversing visually while the\n // DOM stays put would split reading order from visual order (WCAG\n // 1.3.2) and keep announcing the pair the wrong way round.\n key: 'captionPlacement',\n label: 'Caption Position',\n options: [\n { value: 'above', label: 'Above' },\n { value: 'below', label: 'Below' },\n ],\n defaultValue: 'above',\n showWhen: { withCaption: 'yes', collapsed: 'no' },\n },\n {\n key: 'withTrailing',\n label: 'Trailing',\n options: [\n { value: 'yes', label: 'On' },\n { value: 'no', label: 'Off' },\n ],\n defaultValue: 'yes',\n showWhen: { collapsed: 'no' },\n },\n ],\n events: [\n { name: 'onClick', description: 'Fires when the row is activated. Wired for you when the trigger is spread with a Menu/Listbox `triggerProps` — do not add your own on top, it would override theirs.', payload: 'MouseEvent' },\n ],\n api: {\n importPath: '@viax.io/uxm/ui',\n importNames: 'SidebarNavTrigger',\n props: [\n { name: 'icon', type: 'ReactNode', description: 'The mark on the left — a bare Icon in a switcher, an Avatar in an account row. No tile is drawn behind it: the slot is reserved, sized and aligned, and paints nothing.' },\n { name: 'caption', type: 'ReactNode', description: 'The small line beside the value. It sits inside the button, so it joins the accessible name — pass an explicit aria-label if a pairing reads badly.' },\n { name: 'captionPlacement', type: '\"above\" | \"below\"', defaultValue: '\"above\"', description: 'Which side of the value the caption sits on. Above it LABELS the level this control changes (a switcher\\'s \"Workspace\"); below it QUALIFIES the value (an account row\\'s \"Tenant owner\" under the address). Swapped in the markup rather than with flex-direction: column-reverse, so reading order keeps matching visual order (WCAG 1.3.2) and the accessible name follows the row.' },\n { name: 'children', type: 'ReactNode', description: 'The value — the workspace name, the signed-in address.' },\n { name: 'trailing', type: 'ReactNode', description: 'The chevron. Visible at rest, with no reveal-on-hover behaviour: a control that opens something has to advertise it before you point at it.' },\n { name: 'variant', type: '\"plain\" | \"outlined\"', defaultValue: '\"plain\"', description: 'plain — nothing at rest, for the account row at the foot of the rail. outlined — a hairline plus the card surface, for the switcher, which stands in a box because it names the level everything below it belongs to.' },\n { name: 'collapsed', type: 'boolean', defaultValue: 'false', description: 'Render for a 64px rail: a 46px tile (--uxm-sidebar-nav-trigger-collapsed-size, a MINIMUM rather than a clamp — a mark larger than it grows the row instead of being clipped), the trailing chevron dropped, and caption + value kept in the DOM but visually hidden — so the button announces identically collapsed and expanded rather than becoming a nameless icon. 46 deliberately differs from the 32px AppSidebar gives its collapsed nav items: a trigger has lost both chevron and text at this width, so footprint is the only signal left that it opens something. The tile is a surface AROUND the mark rather than a frame hugging it — pair it with Avatar size=\"small\" (32px) for ~7px on every side. outlined keeps its border at this size, since the box is then the only thing distinguishing a switcher from a plain account row. Pass title as well: with the chevron gone, only position and the mark still say the row opens something.' },\n ],\n },\n};\n"],"mappings":"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","names":[]}
@@ -477,7 +477,7 @@ const diagramDefs = [
477
477
  }
478
478
  ],
479
479
  api: {
480
- importPath: "@viax/uxm/ui",
480
+ importPath: "@viax.io/uxm/ui",
481
481
  importNames: ["Dialog", "Modal"],
482
482
  props: [
483
483
  { name: "open", type: "boolean", required: true, description: "Dialog open state (controlled). Pair with onOpenChange." },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/studio/lib/registry/diagram.ts"],"sourcesContent":["import type { ComponentDef } from '../types';\n\nexport const diagramDefs: ComponentDef[] = [\n // ── Diagram (BI Lifecycle) ──\n {\n id: 'lifecycle-node-card',\n name: 'Lifecycle Node Card',\n category: 'Diagram',\n description: 'State / Condition / Task / Business Interaction node card used in the BI Lifecycle canvas.',\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 6, min: 0, max: 16, step: 1, unit: 'px' },\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: 6, max: 24, step: 2, unit: 'px' },\n { key: 'width', label: 'Width', control: 'number', defaultValue: 280, min: 200, max: 360, step: 10, unit: 'px' },\n { key: 'minHeight', label: 'Min Height', control: 'number', defaultValue: 0, min: 0, max: 120, step: 2, unit: 'px' },\n { key: 'iconSize', label: 'Icon Size', control: 'number', defaultValue: 32, min: 24, max: 48, step: 2, unit: 'px' },\n { key: 'titleSize', label: 'Title Size', control: 'number', defaultValue: 14, min: 11, max: 18, step: 1, unit: 'px' },\n { key: 'kindSize', label: 'Kind Label Size', control: 'number', defaultValue: 11, min: 9, max: 14, step: 1, unit: 'px' },\n ],\n layoutVariants: [\n {\n key: 'type',\n label: 'Node Type',\n options: [\n { value: 'state', label: 'State' },\n { value: 'condition', label: 'Condition' },\n { value: 'task', label: 'Task' },\n { value: 'interaction', label: 'Business Interaction' },\n ],\n defaultValue: 'state',\n },\n ],\n events: [\n { name: 'onClick', description: 'Fires when the user clicks the node card. Typically opens an inspector or selects the node.', payload: 'MouseEvent' },\n ],\n },\n {\n id: 'lifecycle-terminal',\n name: 'Lifecycle Terminal',\n category: 'Diagram',\n description: \"Start / End pill used as the graph's terminal nodes.\",\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'color', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 4, min: 0, max: 20, step: 1, unit: 'px' },\n { key: 'width', label: 'Width', control: 'number', defaultValue: 60, min: 40, max: 120, step: 4, unit: 'px' },\n { key: 'height', label: 'Height', control: 'number', defaultValue: 32, min: 20, max: 48, step: 2, unit: 'px' },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 13, min: 10, max: 18, step: 1, unit: 'px' },\n { key: 'fontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'] },\n ],\n layoutVariants: [\n {\n key: 'label',\n label: 'Label',\n options: [\n { value: 'Start', label: 'Start' },\n { value: 'End', label: 'End' },\n ],\n defaultValue: 'Start',\n },\n ],\n },\n {\n id: 'lifecycle-edge-label',\n name: 'Lifecycle Edge Label',\n category: 'Diagram',\n description: 'Pill label attached to a transition edge (true / false / custom).',\n styleProperties: [\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 12, min: 4, max: 24, step: 1, unit: 'px' },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 3, min: 0, max: 10, step: 1, unit: 'px' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 999, min: 4, max: 999, step: 1, unit: 'px' },\n { key: 'borderWidth', label: 'Border Width', control: 'number', defaultValue: 1, min: 0, max: 3, step: 1, unit: 'px' },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 12, min: 9, max: 16, step: 1, unit: 'px' },\n { key: 'fontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'] },\n ],\n layoutVariants: [\n {\n key: 'variant',\n label: 'Variant',\n options: [\n { value: 'true', label: 'True' },\n { value: 'false', label: 'False' },\n { value: 'neutral', label: 'Custom / Neutral' },\n ],\n defaultValue: 'true',\n },\n ],\n },\n {\n id: 'lifecycle-plus-button',\n name: 'Lifecycle Plus Button',\n category: 'Diagram',\n description: 'Floating circular + button used to insert a node on a canvas edge.',\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-accent)', section: 'colors' },\n { key: 'hoverBackgroundColor', label: 'Hover Background', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'colors' },\n { key: 'color', label: 'Icon Color', control: 'color', defaultValue: 'var(--color-text-inverse)', section: 'colors' },\n { key: 'size', label: 'Size', control: 'number', defaultValue: 24, min: 16, max: 40, step: 2, unit: 'px' },\n { key: 'iconSize', label: 'Icon Size', control: 'number', defaultValue: 14, min: 8, max: 24, step: 1, unit: 'px' },\n ],\n layoutVariants: [],\n },\n {\n id: 'lifecycle-connector',\n name: 'Lifecycle Connector',\n category: 'Diagram',\n description: 'Edge between two nodes — idle / hovered stroke, thickness, arrow, dashed variant, and straight / Bezier / elbow routing.',\n styleProperties: [\n // Paint is scoped to the State picker — one Color / Stroke Width pair\n // that follows the selected state, rather than three parallel knobs of\n // which two are inert at any moment. Keys keep their `connector*` prefix\n // so themes saved before this regrouping still resolve.\n { key: 'connectorIdleColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-subtle)', section: 'states', showWhen: { state: 'idle' } },\n { key: 'connectorIdleStrokeWidth', label: 'Stroke Width', control: 'slider', defaultValue: 1.5, min: 0.5, max: 4, step: 0.5, unit: 'px', section: 'states', showWhen: { state: 'idle' } },\n // Active colour/width also drive `dashed-active` — it shares the active\n // emphasis, so its knobs surface for both states.\n { key: 'connectorActiveColor', label: 'Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'states', showWhen: { state: ['active', 'dashed-active'] } },\n { key: 'connectorActiveStrokeWidth', label: 'Stroke Width', control: 'slider', defaultValue: 2, min: 0.5, max: 5, step: 0.5, unit: 'px', section: 'states', showWhen: { state: ['active', 'dashed-active'] } },\n { key: 'connectorDashedColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'states', showWhen: { state: 'dashed' } },\n { key: 'connectorDashedStrokeWidth', label: 'Stroke Width', control: 'slider', defaultValue: 1.5, min: 0.5, max: 4, step: 0.5, unit: 'px', section: 'states', showWhen: { state: 'dashed' } },\n // The dash pattern applies to both dashed states.\n { key: 'connectorDashPattern', label: 'Dash Pattern', control: 'text', defaultValue: '6 4', section: 'states', showWhen: { state: ['dashed', 'dashed-active'] } },\n { key: 'connectorArrowSize', label: 'Arrow Size', control: 'number', defaultValue: 7, min: 3, max: 14, step: 1, unit: 'px' },\n // No knobs for `crossAt` / `cornerRadius` on purpose. Where an elbow's\n // cross bus sits is per-edge geometry — the same kind of value as\n // `from` / `to` — so it belongs to the diagram's layout code, not to a\n // saved theme. They stay props.\n ],\n layoutVariants: [\n {\n key: 'state',\n label: 'State',\n options: [\n { value: 'idle', label: 'Idle' },\n { value: 'active', label: 'Active' },\n { value: 'dashed', label: 'Dashed (false)' },\n { value: 'dashed-active', label: 'Dashed · Active' },\n ],\n defaultValue: 'idle',\n },\n {\n key: 'routing',\n label: 'Routing',\n options: [\n { value: 'auto', label: 'Auto' },\n { value: 'straight', label: 'Straight' },\n { value: 'bezier', label: 'Bezier' },\n { value: 'orthogonal', label: 'Elbow' },\n ],\n defaultValue: 'auto',\n },\n {\n key: 'startDot',\n label: 'Start Dot',\n options: [\n { value: 'on', label: 'On' },\n { value: 'off', label: 'Off' },\n ],\n defaultValue: 'on',\n },\n {\n key: 'arrowhead',\n label: 'Arrowhead',\n options: [\n { value: 'triangle', label: 'Triangle' },\n { value: 'line', label: 'Line' },\n ],\n defaultValue: 'triangle',\n },\n ],\n },\n {\n id: 'lifecycle-connector-knobs',\n name: 'Lifecycle Connector Knobs',\n category: 'Diagram',\n description: 'Pair of insert (+) and rename (pencil) circles that appear when hovering a connector.',\n styleProperties: [\n { key: 'backgroundColor', label: 'Circle Fill', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'size', label: 'Diameter', control: 'number', defaultValue: 22, min: 16, max: 36, step: 1, unit: 'px' },\n { key: 'borderWidth', label: 'Border Width', control: 'number', defaultValue: 1.5, min: 0.5, max: 3, step: 0.5, unit: 'px' },\n { key: 'insertBorderColor', label: 'Insert Border', control: 'color', defaultValue: 'var(--color-accent)', section: 'colors' },\n { key: 'insertIconColor', label: 'Insert Icon', control: 'color', defaultValue: 'var(--color-accent)', section: 'colors' },\n { key: 'editBorderColor', label: 'Edit Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'editIconColor', label: 'Edit Icon', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'colors' },\n { key: 'gap', label: 'Gap Between Knobs', control: 'number', defaultValue: 4, min: 0, max: 16, step: 1, unit: 'px' },\n ],\n layoutVariants: [\n {\n key: 'orientation',\n label: 'Orientation',\n options: [\n { value: 'horizontal', label: 'Horizontal' },\n { value: 'vertical', label: 'Vertical' },\n ],\n defaultValue: 'horizontal',\n },\n ],\n },\n {\n id: 'lifecycle-drop-slot',\n name: 'Lifecycle Drop Slot',\n category: 'Diagram',\n description:\n 'Dashed slot showing where a dragged node can land — card-sized for a node, pill-sized for the group a drop would mint.',\n styleProperties: [\n // Knob keys stay the plain CSS-ish names — no `dropSlot*` prefix, which\n // the generator would turn into `--uxm-lifecycle-drop-slot-drop-slot-*`\n // (the lifecycle-connector trap).\n //\n // Dashes and label are separate knobs sharing one default, so they read as\n // one signal until someone deliberately moves them apart. Both default to\n // `var(--color-accent-bold)` rather than the `--color-drop-target` alias —\n // the alias isn't a `themeTokens` entry, so the picker would render its raw\n // var string, and accent (what the alias resolves to) measures 1.92:1 as\n // ink on this fill.\n { key: 'borderColor', label: 'Dashes', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'colors' },\n { key: 'color', label: 'Text', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'colors' },\n // A LIVE token, not a raw expression: `themeTokens` is what the picker's\n // swatch list is built from, so a `color-mix(…)` default would render as\n // unreadable text. The fill is flat, so what is picked here is what paints.\n { key: 'bg', label: 'Fill', control: 'color', defaultValue: 'var(--color-accent-subtle)', section: 'colors' },\n // Style + width are the two levers on how the edge reads, the same pair\n // FileUpload's drop area exposes. Neither is a dash PATTERN — the UA\n // derives dash length from the width, and CSS has no property for the\n // pattern itself.\n //\n // Both apply to either shape, so they stay in the unscoped section — the\n // panel then subtitles them \"Shared across all shapes\" while the two shape\n // sections below read \"Per Shape · …\". Mixing them into one section is what\n // made the group box's panel claim shared knobs were per-state.\n { key: 'borderStyle', label: 'Border Style', control: 'select', defaultValue: 'dashed', options: ['dashed', 'solid', 'dotted'] },\n { key: 'borderWidth', label: 'Border Width', control: 'number', defaultValue: 1, min: 1, max: 3, step: 1, unit: 'px' },\n // Card-only. Labels drop the \"Card\" prefix — the section heading carries\n // it, and short labels don't truncate in the narrow panel orientation.\n { key: 'cardRadius', label: 'Radius', control: 'slider', defaultValue: 10, min: 0, max: 20, step: 1, unit: 'px', section: 'card', showWhen: { shape: 'card' } },\n { key: 'cardPaddingX', label: 'Padding X', control: 'number', defaultValue: 16, min: 4, max: 32, step: 2, unit: 'px', section: 'card', showWhen: { shape: 'card' } },\n { key: 'cardFontSize', label: 'Font Size', control: 'number', defaultValue: 12, min: 9, max: 16, step: 1, unit: 'px', section: 'card', showWhen: { shape: 'card' } },\n { key: 'cardMinWidth', label: 'Min Width', control: 'number', defaultValue: 72, min: 40, max: 160, step: 4, unit: 'px', section: 'card', showWhen: { shape: 'card' } },\n // No card HEIGHT knob: that one is shared with the node card through the\n // token layer, so it isn't per-component. The atom does expose\n // `--uxm-lifecycle-drop-slot-card-min-height` for a canvas that owns node\n // geometry and needs to zero the floor — a consumer escape hatch, not a\n // theme value, so it gets no knob either.\n //\n // Pill-only. Same 4–999 range LifecycleEdgeLabel uses for its own pill\n // radius: everything at or above half the height reads as a full pill, so\n // the useful travel is the bottom of the slider.\n { key: 'pillRadius', label: 'Radius', control: 'slider', defaultValue: 999, min: 4, max: 999, step: 1, unit: 'px', section: 'pill', showWhen: { shape: 'pill' } },\n { key: 'pillPaddingY', label: 'Padding Y', control: 'number', defaultValue: 4, min: 0, max: 12, step: 1, unit: 'px', section: 'pill', showWhen: { shape: 'pill' } },\n { key: 'pillPaddingX', label: 'Padding X', control: 'number', defaultValue: 12, min: 4, max: 24, step: 1, unit: 'px', section: 'pill', showWhen: { shape: 'pill' } },\n // 13 matches Chip assist (`--uxm-chip-assist-font-size`), which is what the\n // real group pill is drawn with, so the placeholder doesn't change size on\n // drop.\n { key: 'pillFontSize', label: 'Font Size', control: 'number', defaultValue: 13, min: 10, max: 16, step: 1, unit: 'px', section: 'pill', showWhen: { shape: 'pill' } },\n ],\n layoutVariants: [\n // The preview renders the SELECTED shape only. A picker that left both on\n // canvas would be a control that changes nothing there — the same reason\n // `interactive` gets no knob (it moves hit-testing only, never a pixel, and\n // the canvas has no drag to demonstrate it with). It stays a prop,\n // documented in the README.\n {\n key: 'shape',\n label: 'Shape',\n // Named for what the slot stands in for — the node a drop would create,\n // or the group it would mint — not for a pixel size. \"node-sized\" read\n // as a dimension and obscured that.\n options: [\n { value: 'card', label: 'Card (node)' },\n { value: 'pill', label: 'Pill (group)' },\n ],\n defaultValue: 'card',\n },\n ],\n events: [\n { name: 'onDragOver', description: 'Fires while a dragged node is over the slot. Requires interactive; call preventDefault to accept the drop.', payload: 'DragEvent' },\n { name: 'onDrop', description: 'Fires when a node is dropped on the slot. The consumer creates the node or group; the atom carries no logic.', payload: 'DragEvent' },\n { name: 'onDragLeave', description: \"Fires when the drag leaves the slot — the consumer's cue to unmount it, since the slot exists only while it is the target.\", payload: 'DragEvent' },\n ],\n },\n {\n id: 'lifecycle-group-box',\n name: 'Lifecycle Group Box',\n category: 'Diagram',\n description:\n 'Frosted frame around the sibling nodes of one group — and, on an editable diagram, the drop zone for adding a member to it.',\n styleProperties: [\n // Knob keys are the ordinary CSS-ish names every other atom uses\n // (`backgroundColor`, `borderWidth`, …), deliberately NOT prefixed with\n // the component's own name: `groupBoxBg` under id `lifecycle-group-box`\n // would have the generator emit\n // `--uxm-lifecycle-group-box-group-box-bg`. That doubling is exactly what\n // happened to lifecycle-connector, whose published themes now need a\n // permanent fallback alias.\n // Both colour knobs default to a LIVE token, not to the literal CSS the\n // rule resolves to: `themeTokens` is what the editor's swatch list is\n // built from, so a raw `color-mix(…)` / `var(--color-drop-target)` string\n // renders as unreadable text in the picker instead of a named colour.\n // The atom applies its own 55% frost around this value (see the\n // stylesheet), which is why Card — the frosted colour — is the honest\n // default here rather than the mix.\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderWidth', label: 'Border Width', control: 'number', defaultValue: 1, min: 0, max: 4, step: 1, unit: 'px' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 14, min: 0, max: 28, step: 1, unit: 'px' },\n // The group's single spacing number: the canvas insets its members by it\n // AND derives the box rect from it, so there is one knob rather than a\n // box padding and a member inset that can drift apart. The inset ring is\n // internal and deliberately not exposed.\n { key: 'padding', label: 'Padding', control: 'number', defaultValue: 20, min: 8, max: 40, step: 2, unit: 'px' },\n { key: 'blur', label: 'Backdrop Blur', control: 'slider', defaultValue: 4, min: 0, max: 12, step: 1, unit: 'px' },\n // The state-scoped knobs get their OWN section, the way\n // lifecycle-connector's do. Mixed into `colors` / `style` they dragged\n // those whole sections into a \"Per State · Drop target\" subtitle — the\n // panel derives it from every prop in a section — which claimed the\n // Background, Padding and Radius above were per-state when they are\n // shared. Split out, each section states the truth: Colors / Style read\n // \"Shared across all states\", and only this one is per-state. It also\n // disappears entirely on `default`, since the panel builds its sections\n // from VISIBLE props.\n //\n // The section is named for what it themes (\"Drop Outline\") so the three\n // labels can stay one word each. Prefixing them instead — Outline Color /\n // Outline Width / Outline Offset — reads as the same set but pays for it\n // in ellipses: the panel truncates a label around 13 characters in its\n // narrow orientation, so `Outline Offset` arrives as \"Outline O…\". One\n // word in the heading beats the same word truncated three times.\n //\n // `var(--color-accent)` rather than `var(--color-drop-target)`: the alias\n // isn't a `themeTokens` entry (deliberately — see tokens/index.css), so\n // the picker would show the raw var string, and the two resolve to the\n // same colour anyway. The CSS chain is still knob → alias → accent, so a\n // consumer who re-points the alias changes the paint without this\n // default following.\n { key: 'targetColor', label: 'Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'dropOutline', showWhen: { state: 'target' } },\n { key: 'targetWidth', label: 'Width', control: 'slider', defaultValue: 2, min: 1, max: 5, step: 1, unit: 'px', section: 'dropOutline', showWhen: { state: 'target' } },\n { key: 'targetOffset', label: 'Offset', control: 'number', defaultValue: 2, min: 0, max: 8, step: 1, unit: 'px', section: 'dropOutline', showWhen: { state: 'target' } },\n ],\n layoutVariants: [\n // A State picker, like lifecycle-connector's, rather than a \"Drop Target\"\n // On/Off: the panel builds its section subtitles out of the variant LABEL\n // (\"Per {label}\" when scoped, \"Shared across all {label}s\" otherwise), and\n // \"Shared across all drop targets\" was actively misleading on the plain\n // style knobs — they are shared across STATES, and there is one box, not\n // many targets.\n //\n // There is no `interactive` picker: that prop moves hit-testing only,\n // never a pixel, and a variant that changes nothing on the canvas reads\n // as a broken toggle. It stays a prop, documented in the README.\n {\n key: 'state',\n label: 'State',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'target', label: 'Drop target' },\n ],\n defaultValue: 'default',\n },\n ],\n events: [\n { name: 'onDragOver', description: 'Fires while a dragged node is over the group. Requires interactive; call preventDefault to accept the drop.', payload: 'DragEvent' },\n { name: 'onDragEnter', description: 'Fires when a drag enters the group — the consumer\\'s cue to set `target`.', payload: 'DragEvent' },\n { name: 'onDragLeave', description: 'Fires when a drag leaves the group — clear `target` here.', payload: 'DragEvent' },\n { name: 'onDrop', description: 'Fires when a node is dropped on the group. The consumer adds the member; the atom carries no logic.', payload: 'DragEvent' },\n ],\n },\n {\n id: 'lifecycle-zoom-control',\n name: 'Lifecycle Zoom Control',\n category: 'Diagram',\n description: 'Segmented −/percent/+ zoom control docked at the canvas corner.',\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 6, min: 0, max: 20, step: 1, unit: 'px' },\n { key: 'buttonSize', label: 'Button Size', control: 'number', defaultValue: 32, min: 24, max: 48, step: 2, unit: 'px' },\n { key: 'fontSize', label: 'Value Size', control: 'number', defaultValue: 13, min: 10, max: 18, step: 1, unit: 'px' },\n { key: 'color', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'colors' },\n { key: 'iconColor', label: 'Icon Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'colors' },\n ],\n layoutVariants: [],\n },\n {\n id: 'lifecycle-minimap',\n name: 'Lifecycle Minimap',\n category: 'Diagram',\n description: 'Miniature graph overview with a viewport indicator.',\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-surface-alt)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 6, min: 0, max: 16, step: 1, unit: 'px' },\n { key: 'nodeColor', label: 'Node Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'colors' },\n { key: 'edgeColor', label: 'Edge Color', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'viewportBorder', label: 'Viewport Border', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'colors' },\n { key: 'viewportFill', label: 'Viewport Fill', control: 'color', defaultValue: 'color-mix(in srgb, var(--color-accent) 10%, transparent)', section: 'colors' },\n { key: 'width', label: 'Width', control: 'number', defaultValue: 240, min: 160, max: 320, step: 10, unit: 'px' },\n { key: 'height', label: 'Height', control: 'number', defaultValue: 104, min: 60, max: 200, step: 4, unit: 'px' },\n ],\n layoutVariants: [],\n },\n {\n id: 'lifecycle-action-row',\n name: 'Lifecycle Action Row',\n category: 'Diagram',\n description: 'Row with a type badge + action name + delete — used inside the node flexpane.',\n styleProperties: [\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 4, min: 0, max: 12, step: 1, unit: 'px' },\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 12, min: 6, max: 24, step: 2, unit: 'px' },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 10, min: 4, max: 20, step: 2, unit: 'px' },\n { key: 'gap', label: 'Gap', control: 'number', defaultValue: 10, min: 4, max: 20, step: 1, unit: 'px' },\n { key: 'fontSize', label: 'Text Size', control: 'number', defaultValue: 13, min: 10, max: 16, step: 1, unit: 'px' },\n { key: 'color', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'colors' },\n { key: 'badgeRadius', label: 'Badge Radius', control: 'slider', defaultValue: 999, min: 4, max: 999, step: 1, unit: 'px' },\n { key: 'badgeSize', label: 'Badge Text Size', control: 'number', defaultValue: 11, min: 9, max: 14, step: 1, unit: 'px' },\n ],\n layoutVariants: [\n {\n key: 'actionType',\n label: 'Action Type',\n options: [\n { value: 'notify', label: 'Notify' },\n { value: 'transform', label: 'Transform' },\n { value: 'validate', label: 'Validate' },\n ],\n defaultValue: 'notify',\n },\n ],\n },\n {\n id: 'modal',\n name: 'Modal',\n category: 'Feedback',\n description:\n 'Standard modal panel — header / body / footer slots — rendered inside the Dialog shell. Theming knobs live here; backdrop styling is global (tokens).',\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 12, min: 0, max: 24, step: 1, unit: 'px' },\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 20, min: 8, max: 40, step: 2, unit: 'px' },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 16, min: 8, max: 32, step: 2, unit: 'px' },\n { key: 'titleSize', label: 'Title Size', control: 'number', defaultValue: 16, min: 12, max: 24, step: 1, unit: 'px' },\n { key: 'titleColor', label: 'Title Color', control: 'color', defaultValue: 'var(--color-text)', section: 'colors' },\n ],\n layoutVariants: [\n {\n key: 'size',\n label: 'Size',\n options: [\n { value: 'sm', label: 'Small (360px)' },\n { value: 'md', label: 'Medium (480px)' },\n { value: 'lg', label: 'Large (640px)' },\n { value: 'fullscreen', label: 'Fullscreen' },\n ],\n defaultValue: 'md',\n },\n ],\n api: {\n importPath: '@viax/uxm/ui',\n importNames: ['Dialog', 'Modal'],\n props: [\n { name: 'open', type: 'boolean', required: true, description: 'Dialog open state (controlled). Pair with onOpenChange.' },\n { name: 'onOpenChange', type: '(open: boolean) => void', required: true, description: 'Called when the user requests close (Escape or backdrop click).' },\n { name: 'size', type: '\"sm\" | \"md\" | \"lg\" | \"fullscreen\"', defaultValue: '\"md\"', description: 'Modal panel width preset.' },\n { name: 'onClose', type: '() => void', description: 'When set, Modal.Header renders a close X that calls this.' },\n { name: 'closeOnEscape', type: 'boolean', defaultValue: 'true', description: 'Escape key dismisses the dialog.' },\n { name: 'closeOnOutsideClick', type: 'boolean', defaultValue: 'true', description: 'Backdrop click dismisses the dialog.' },\n { name: 'initialFocus', type: 'RefObject<HTMLElement>', description: 'Element to focus on open. Defaults to first focusable in panel.' },\n ],\n },\n },\n];\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/studio/lib/registry/diagram.ts"],"sourcesContent":["import type { ComponentDef } from '../types';\n\nexport const diagramDefs: ComponentDef[] = [\n // ── Diagram (BI Lifecycle) ──\n {\n id: 'lifecycle-node-card',\n name: 'Lifecycle Node Card',\n category: 'Diagram',\n description: 'State / Condition / Task / Business Interaction node card used in the BI Lifecycle canvas.',\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 6, min: 0, max: 16, step: 1, unit: 'px' },\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: 6, max: 24, step: 2, unit: 'px' },\n { key: 'width', label: 'Width', control: 'number', defaultValue: 280, min: 200, max: 360, step: 10, unit: 'px' },\n { key: 'minHeight', label: 'Min Height', control: 'number', defaultValue: 0, min: 0, max: 120, step: 2, unit: 'px' },\n { key: 'iconSize', label: 'Icon Size', control: 'number', defaultValue: 32, min: 24, max: 48, step: 2, unit: 'px' },\n { key: 'titleSize', label: 'Title Size', control: 'number', defaultValue: 14, min: 11, max: 18, step: 1, unit: 'px' },\n { key: 'kindSize', label: 'Kind Label Size', control: 'number', defaultValue: 11, min: 9, max: 14, step: 1, unit: 'px' },\n ],\n layoutVariants: [\n {\n key: 'type',\n label: 'Node Type',\n options: [\n { value: 'state', label: 'State' },\n { value: 'condition', label: 'Condition' },\n { value: 'task', label: 'Task' },\n { value: 'interaction', label: 'Business Interaction' },\n ],\n defaultValue: 'state',\n },\n ],\n events: [\n { name: 'onClick', description: 'Fires when the user clicks the node card. Typically opens an inspector or selects the node.', payload: 'MouseEvent' },\n ],\n },\n {\n id: 'lifecycle-terminal',\n name: 'Lifecycle Terminal',\n category: 'Diagram',\n description: \"Start / End pill used as the graph's terminal nodes.\",\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'color', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 4, min: 0, max: 20, step: 1, unit: 'px' },\n { key: 'width', label: 'Width', control: 'number', defaultValue: 60, min: 40, max: 120, step: 4, unit: 'px' },\n { key: 'height', label: 'Height', control: 'number', defaultValue: 32, min: 20, max: 48, step: 2, unit: 'px' },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 13, min: 10, max: 18, step: 1, unit: 'px' },\n { key: 'fontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'] },\n ],\n layoutVariants: [\n {\n key: 'label',\n label: 'Label',\n options: [\n { value: 'Start', label: 'Start' },\n { value: 'End', label: 'End' },\n ],\n defaultValue: 'Start',\n },\n ],\n },\n {\n id: 'lifecycle-edge-label',\n name: 'Lifecycle Edge Label',\n category: 'Diagram',\n description: 'Pill label attached to a transition edge (true / false / custom).',\n styleProperties: [\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 12, min: 4, max: 24, step: 1, unit: 'px' },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 3, min: 0, max: 10, step: 1, unit: 'px' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 999, min: 4, max: 999, step: 1, unit: 'px' },\n { key: 'borderWidth', label: 'Border Width', control: 'number', defaultValue: 1, min: 0, max: 3, step: 1, unit: 'px' },\n { key: 'fontSize', label: 'Font Size', control: 'number', defaultValue: 12, min: 9, max: 16, step: 1, unit: 'px' },\n { key: 'fontWeight', label: 'Font Weight', control: 'select', defaultValue: '500', options: ['400', '500', '600', '700'] },\n ],\n layoutVariants: [\n {\n key: 'variant',\n label: 'Variant',\n options: [\n { value: 'true', label: 'True' },\n { value: 'false', label: 'False' },\n { value: 'neutral', label: 'Custom / Neutral' },\n ],\n defaultValue: 'true',\n },\n ],\n },\n {\n id: 'lifecycle-plus-button',\n name: 'Lifecycle Plus Button',\n category: 'Diagram',\n description: 'Floating circular + button used to insert a node on a canvas edge.',\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-accent)', section: 'colors' },\n { key: 'hoverBackgroundColor', label: 'Hover Background', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'colors' },\n { key: 'color', label: 'Icon Color', control: 'color', defaultValue: 'var(--color-text-inverse)', section: 'colors' },\n { key: 'size', label: 'Size', control: 'number', defaultValue: 24, min: 16, max: 40, step: 2, unit: 'px' },\n { key: 'iconSize', label: 'Icon Size', control: 'number', defaultValue: 14, min: 8, max: 24, step: 1, unit: 'px' },\n ],\n layoutVariants: [],\n },\n {\n id: 'lifecycle-connector',\n name: 'Lifecycle Connector',\n category: 'Diagram',\n description: 'Edge between two nodes — idle / hovered stroke, thickness, arrow, dashed variant, and straight / Bezier / elbow routing.',\n styleProperties: [\n // Paint is scoped to the State picker — one Color / Stroke Width pair\n // that follows the selected state, rather than three parallel knobs of\n // which two are inert at any moment. Keys keep their `connector*` prefix\n // so themes saved before this regrouping still resolve.\n { key: 'connectorIdleColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-subtle)', section: 'states', showWhen: { state: 'idle' } },\n { key: 'connectorIdleStrokeWidth', label: 'Stroke Width', control: 'slider', defaultValue: 1.5, min: 0.5, max: 4, step: 0.5, unit: 'px', section: 'states', showWhen: { state: 'idle' } },\n // Active colour/width also drive `dashed-active` — it shares the active\n // emphasis, so its knobs surface for both states.\n { key: 'connectorActiveColor', label: 'Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'states', showWhen: { state: ['active', 'dashed-active'] } },\n { key: 'connectorActiveStrokeWidth', label: 'Stroke Width', control: 'slider', defaultValue: 2, min: 0.5, max: 5, step: 0.5, unit: 'px', section: 'states', showWhen: { state: ['active', 'dashed-active'] } },\n { key: 'connectorDashedColor', label: 'Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'states', showWhen: { state: 'dashed' } },\n { key: 'connectorDashedStrokeWidth', label: 'Stroke Width', control: 'slider', defaultValue: 1.5, min: 0.5, max: 4, step: 0.5, unit: 'px', section: 'states', showWhen: { state: 'dashed' } },\n // The dash pattern applies to both dashed states.\n { key: 'connectorDashPattern', label: 'Dash Pattern', control: 'text', defaultValue: '6 4', section: 'states', showWhen: { state: ['dashed', 'dashed-active'] } },\n { key: 'connectorArrowSize', label: 'Arrow Size', control: 'number', defaultValue: 7, min: 3, max: 14, step: 1, unit: 'px' },\n // No knobs for `crossAt` / `cornerRadius` on purpose. Where an elbow's\n // cross bus sits is per-edge geometry — the same kind of value as\n // `from` / `to` — so it belongs to the diagram's layout code, not to a\n // saved theme. They stay props.\n ],\n layoutVariants: [\n {\n key: 'state',\n label: 'State',\n options: [\n { value: 'idle', label: 'Idle' },\n { value: 'active', label: 'Active' },\n { value: 'dashed', label: 'Dashed (false)' },\n { value: 'dashed-active', label: 'Dashed · Active' },\n ],\n defaultValue: 'idle',\n },\n {\n key: 'routing',\n label: 'Routing',\n options: [\n { value: 'auto', label: 'Auto' },\n { value: 'straight', label: 'Straight' },\n { value: 'bezier', label: 'Bezier' },\n { value: 'orthogonal', label: 'Elbow' },\n ],\n defaultValue: 'auto',\n },\n {\n key: 'startDot',\n label: 'Start Dot',\n options: [\n { value: 'on', label: 'On' },\n { value: 'off', label: 'Off' },\n ],\n defaultValue: 'on',\n },\n {\n key: 'arrowhead',\n label: 'Arrowhead',\n options: [\n { value: 'triangle', label: 'Triangle' },\n { value: 'line', label: 'Line' },\n ],\n defaultValue: 'triangle',\n },\n ],\n },\n {\n id: 'lifecycle-connector-knobs',\n name: 'Lifecycle Connector Knobs',\n category: 'Diagram',\n description: 'Pair of insert (+) and rename (pencil) circles that appear when hovering a connector.',\n styleProperties: [\n { key: 'backgroundColor', label: 'Circle Fill', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'size', label: 'Diameter', control: 'number', defaultValue: 22, min: 16, max: 36, step: 1, unit: 'px' },\n { key: 'borderWidth', label: 'Border Width', control: 'number', defaultValue: 1.5, min: 0.5, max: 3, step: 0.5, unit: 'px' },\n { key: 'insertBorderColor', label: 'Insert Border', control: 'color', defaultValue: 'var(--color-accent)', section: 'colors' },\n { key: 'insertIconColor', label: 'Insert Icon', control: 'color', defaultValue: 'var(--color-accent)', section: 'colors' },\n { key: 'editBorderColor', label: 'Edit Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'editIconColor', label: 'Edit Icon', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'colors' },\n { key: 'gap', label: 'Gap Between Knobs', control: 'number', defaultValue: 4, min: 0, max: 16, step: 1, unit: 'px' },\n ],\n layoutVariants: [\n {\n key: 'orientation',\n label: 'Orientation',\n options: [\n { value: 'horizontal', label: 'Horizontal' },\n { value: 'vertical', label: 'Vertical' },\n ],\n defaultValue: 'horizontal',\n },\n ],\n },\n {\n id: 'lifecycle-drop-slot',\n name: 'Lifecycle Drop Slot',\n category: 'Diagram',\n description:\n 'Dashed slot showing where a dragged node can land — card-sized for a node, pill-sized for the group a drop would mint.',\n styleProperties: [\n // Knob keys stay the plain CSS-ish names — no `dropSlot*` prefix, which\n // the generator would turn into `--uxm-lifecycle-drop-slot-drop-slot-*`\n // (the lifecycle-connector trap).\n //\n // Dashes and label are separate knobs sharing one default, so they read as\n // one signal until someone deliberately moves them apart. Both default to\n // `var(--color-accent-bold)` rather than the `--color-drop-target` alias —\n // the alias isn't a `themeTokens` entry, so the picker would render its raw\n // var string, and accent (what the alias resolves to) measures 1.92:1 as\n // ink on this fill.\n { key: 'borderColor', label: 'Dashes', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'colors' },\n { key: 'color', label: 'Text', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'colors' },\n // A LIVE token, not a raw expression: `themeTokens` is what the picker's\n // swatch list is built from, so a `color-mix(…)` default would render as\n // unreadable text. The fill is flat, so what is picked here is what paints.\n { key: 'bg', label: 'Fill', control: 'color', defaultValue: 'var(--color-accent-subtle)', section: 'colors' },\n // Style + width are the two levers on how the edge reads, the same pair\n // FileUpload's drop area exposes. Neither is a dash PATTERN — the UA\n // derives dash length from the width, and CSS has no property for the\n // pattern itself.\n //\n // Both apply to either shape, so they stay in the unscoped section — the\n // panel then subtitles them \"Shared across all shapes\" while the two shape\n // sections below read \"Per Shape · …\". Mixing them into one section is what\n // made the group box's panel claim shared knobs were per-state.\n { key: 'borderStyle', label: 'Border Style', control: 'select', defaultValue: 'dashed', options: ['dashed', 'solid', 'dotted'] },\n { key: 'borderWidth', label: 'Border Width', control: 'number', defaultValue: 1, min: 1, max: 3, step: 1, unit: 'px' },\n // Card-only. Labels drop the \"Card\" prefix — the section heading carries\n // it, and short labels don't truncate in the narrow panel orientation.\n { key: 'cardRadius', label: 'Radius', control: 'slider', defaultValue: 10, min: 0, max: 20, step: 1, unit: 'px', section: 'card', showWhen: { shape: 'card' } },\n { key: 'cardPaddingX', label: 'Padding X', control: 'number', defaultValue: 16, min: 4, max: 32, step: 2, unit: 'px', section: 'card', showWhen: { shape: 'card' } },\n { key: 'cardFontSize', label: 'Font Size', control: 'number', defaultValue: 12, min: 9, max: 16, step: 1, unit: 'px', section: 'card', showWhen: { shape: 'card' } },\n { key: 'cardMinWidth', label: 'Min Width', control: 'number', defaultValue: 72, min: 40, max: 160, step: 4, unit: 'px', section: 'card', showWhen: { shape: 'card' } },\n // No card HEIGHT knob: that one is shared with the node card through the\n // token layer, so it isn't per-component. The atom does expose\n // `--uxm-lifecycle-drop-slot-card-min-height` for a canvas that owns node\n // geometry and needs to zero the floor — a consumer escape hatch, not a\n // theme value, so it gets no knob either.\n //\n // Pill-only. Same 4–999 range LifecycleEdgeLabel uses for its own pill\n // radius: everything at or above half the height reads as a full pill, so\n // the useful travel is the bottom of the slider.\n { key: 'pillRadius', label: 'Radius', control: 'slider', defaultValue: 999, min: 4, max: 999, step: 1, unit: 'px', section: 'pill', showWhen: { shape: 'pill' } },\n { key: 'pillPaddingY', label: 'Padding Y', control: 'number', defaultValue: 4, min: 0, max: 12, step: 1, unit: 'px', section: 'pill', showWhen: { shape: 'pill' } },\n { key: 'pillPaddingX', label: 'Padding X', control: 'number', defaultValue: 12, min: 4, max: 24, step: 1, unit: 'px', section: 'pill', showWhen: { shape: 'pill' } },\n // 13 matches Chip assist (`--uxm-chip-assist-font-size`), which is what the\n // real group pill is drawn with, so the placeholder doesn't change size on\n // drop.\n { key: 'pillFontSize', label: 'Font Size', control: 'number', defaultValue: 13, min: 10, max: 16, step: 1, unit: 'px', section: 'pill', showWhen: { shape: 'pill' } },\n ],\n layoutVariants: [\n // The preview renders the SELECTED shape only. A picker that left both on\n // canvas would be a control that changes nothing there — the same reason\n // `interactive` gets no knob (it moves hit-testing only, never a pixel, and\n // the canvas has no drag to demonstrate it with). It stays a prop,\n // documented in the README.\n {\n key: 'shape',\n label: 'Shape',\n // Named for what the slot stands in for — the node a drop would create,\n // or the group it would mint — not for a pixel size. \"node-sized\" read\n // as a dimension and obscured that.\n options: [\n { value: 'card', label: 'Card (node)' },\n { value: 'pill', label: 'Pill (group)' },\n ],\n defaultValue: 'card',\n },\n ],\n events: [\n { name: 'onDragOver', description: 'Fires while a dragged node is over the slot. Requires interactive; call preventDefault to accept the drop.', payload: 'DragEvent' },\n { name: 'onDrop', description: 'Fires when a node is dropped on the slot. The consumer creates the node or group; the atom carries no logic.', payload: 'DragEvent' },\n { name: 'onDragLeave', description: \"Fires when the drag leaves the slot — the consumer's cue to unmount it, since the slot exists only while it is the target.\", payload: 'DragEvent' },\n ],\n },\n {\n id: 'lifecycle-group-box',\n name: 'Lifecycle Group Box',\n category: 'Diagram',\n description:\n 'Frosted frame around the sibling nodes of one group — and, on an editable diagram, the drop zone for adding a member to it.',\n styleProperties: [\n // Knob keys are the ordinary CSS-ish names every other atom uses\n // (`backgroundColor`, `borderWidth`, …), deliberately NOT prefixed with\n // the component's own name: `groupBoxBg` under id `lifecycle-group-box`\n // would have the generator emit\n // `--uxm-lifecycle-group-box-group-box-bg`. That doubling is exactly what\n // happened to lifecycle-connector, whose published themes now need a\n // permanent fallback alias.\n // Both colour knobs default to a LIVE token, not to the literal CSS the\n // rule resolves to: `themeTokens` is what the editor's swatch list is\n // built from, so a raw `color-mix(…)` / `var(--color-drop-target)` string\n // renders as unreadable text in the picker instead of a named colour.\n // The atom applies its own 55% frost around this value (see the\n // stylesheet), which is why Card — the frosted colour — is the honest\n // default here rather than the mix.\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderWidth', label: 'Border Width', control: 'number', defaultValue: 1, min: 0, max: 4, step: 1, unit: 'px' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 14, min: 0, max: 28, step: 1, unit: 'px' },\n // The group's single spacing number: the canvas insets its members by it\n // AND derives the box rect from it, so there is one knob rather than a\n // box padding and a member inset that can drift apart. The inset ring is\n // internal and deliberately not exposed.\n { key: 'padding', label: 'Padding', control: 'number', defaultValue: 20, min: 8, max: 40, step: 2, unit: 'px' },\n { key: 'blur', label: 'Backdrop Blur', control: 'slider', defaultValue: 4, min: 0, max: 12, step: 1, unit: 'px' },\n // The state-scoped knobs get their OWN section, the way\n // lifecycle-connector's do. Mixed into `colors` / `style` they dragged\n // those whole sections into a \"Per State · Drop target\" subtitle — the\n // panel derives it from every prop in a section — which claimed the\n // Background, Padding and Radius above were per-state when they are\n // shared. Split out, each section states the truth: Colors / Style read\n // \"Shared across all states\", and only this one is per-state. It also\n // disappears entirely on `default`, since the panel builds its sections\n // from VISIBLE props.\n //\n // The section is named for what it themes (\"Drop Outline\") so the three\n // labels can stay one word each. Prefixing them instead — Outline Color /\n // Outline Width / Outline Offset — reads as the same set but pays for it\n // in ellipses: the panel truncates a label around 13 characters in its\n // narrow orientation, so `Outline Offset` arrives as \"Outline O…\". One\n // word in the heading beats the same word truncated three times.\n //\n // `var(--color-accent)` rather than `var(--color-drop-target)`: the alias\n // isn't a `themeTokens` entry (deliberately — see tokens/index.css), so\n // the picker would show the raw var string, and the two resolve to the\n // same colour anyway. The CSS chain is still knob → alias → accent, so a\n // consumer who re-points the alias changes the paint without this\n // default following.\n { key: 'targetColor', label: 'Color', control: 'color', defaultValue: 'var(--color-accent)', section: 'dropOutline', showWhen: { state: 'target' } },\n { key: 'targetWidth', label: 'Width', control: 'slider', defaultValue: 2, min: 1, max: 5, step: 1, unit: 'px', section: 'dropOutline', showWhen: { state: 'target' } },\n { key: 'targetOffset', label: 'Offset', control: 'number', defaultValue: 2, min: 0, max: 8, step: 1, unit: 'px', section: 'dropOutline', showWhen: { state: 'target' } },\n ],\n layoutVariants: [\n // A State picker, like lifecycle-connector's, rather than a \"Drop Target\"\n // On/Off: the panel builds its section subtitles out of the variant LABEL\n // (\"Per {label}\" when scoped, \"Shared across all {label}s\" otherwise), and\n // \"Shared across all drop targets\" was actively misleading on the plain\n // style knobs — they are shared across STATES, and there is one box, not\n // many targets.\n //\n // There is no `interactive` picker: that prop moves hit-testing only,\n // never a pixel, and a variant that changes nothing on the canvas reads\n // as a broken toggle. It stays a prop, documented in the README.\n {\n key: 'state',\n label: 'State',\n options: [\n { value: 'default', label: 'Default' },\n { value: 'target', label: 'Drop target' },\n ],\n defaultValue: 'default',\n },\n ],\n events: [\n { name: 'onDragOver', description: 'Fires while a dragged node is over the group. Requires interactive; call preventDefault to accept the drop.', payload: 'DragEvent' },\n { name: 'onDragEnter', description: 'Fires when a drag enters the group — the consumer\\'s cue to set `target`.', payload: 'DragEvent' },\n { name: 'onDragLeave', description: 'Fires when a drag leaves the group — clear `target` here.', payload: 'DragEvent' },\n { name: 'onDrop', description: 'Fires when a node is dropped on the group. The consumer adds the member; the atom carries no logic.', payload: 'DragEvent' },\n ],\n },\n {\n id: 'lifecycle-zoom-control',\n name: 'Lifecycle Zoom Control',\n category: 'Diagram',\n description: 'Segmented −/percent/+ zoom control docked at the canvas corner.',\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 6, min: 0, max: 20, step: 1, unit: 'px' },\n { key: 'buttonSize', label: 'Button Size', control: 'number', defaultValue: 32, min: 24, max: 48, step: 2, unit: 'px' },\n { key: 'fontSize', label: 'Value Size', control: 'number', defaultValue: 13, min: 10, max: 18, step: 1, unit: 'px' },\n { key: 'color', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'colors' },\n { key: 'iconColor', label: 'Icon Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'colors' },\n ],\n layoutVariants: [],\n },\n {\n id: 'lifecycle-minimap',\n name: 'Lifecycle Minimap',\n category: 'Diagram',\n description: 'Miniature graph overview with a viewport indicator.',\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-surface-alt)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 6, min: 0, max: 16, step: 1, unit: 'px' },\n { key: 'nodeColor', label: 'Node Color', control: 'color', defaultValue: 'var(--color-text-muted)', section: 'colors' },\n { key: 'edgeColor', label: 'Edge Color', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'viewportBorder', label: 'Viewport Border', control: 'color', defaultValue: 'var(--color-accent-bold)', section: 'colors' },\n { key: 'viewportFill', label: 'Viewport Fill', control: 'color', defaultValue: 'color-mix(in srgb, var(--color-accent) 10%, transparent)', section: 'colors' },\n { key: 'width', label: 'Width', control: 'number', defaultValue: 240, min: 160, max: 320, step: 10, unit: 'px' },\n { key: 'height', label: 'Height', control: 'number', defaultValue: 104, min: 60, max: 200, step: 4, unit: 'px' },\n ],\n layoutVariants: [],\n },\n {\n id: 'lifecycle-action-row',\n name: 'Lifecycle Action Row',\n category: 'Diagram',\n description: 'Row with a type badge + action name + delete — used inside the node flexpane.',\n styleProperties: [\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 4, min: 0, max: 12, step: 1, unit: 'px' },\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 12, min: 6, max: 24, step: 2, unit: 'px' },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 10, min: 4, max: 20, step: 2, unit: 'px' },\n { key: 'gap', label: 'Gap', control: 'number', defaultValue: 10, min: 4, max: 20, step: 1, unit: 'px' },\n { key: 'fontSize', label: 'Text Size', control: 'number', defaultValue: 13, min: 10, max: 16, step: 1, unit: 'px' },\n { key: 'color', label: 'Text Color', control: 'color', defaultValue: 'var(--color-text)', section: 'colors' },\n { key: 'badgeRadius', label: 'Badge Radius', control: 'slider', defaultValue: 999, min: 4, max: 999, step: 1, unit: 'px' },\n { key: 'badgeSize', label: 'Badge Text Size', control: 'number', defaultValue: 11, min: 9, max: 14, step: 1, unit: 'px' },\n ],\n layoutVariants: [\n {\n key: 'actionType',\n label: 'Action Type',\n options: [\n { value: 'notify', label: 'Notify' },\n { value: 'transform', label: 'Transform' },\n { value: 'validate', label: 'Validate' },\n ],\n defaultValue: 'notify',\n },\n ],\n },\n {\n id: 'modal',\n name: 'Modal',\n category: 'Feedback',\n description:\n 'Standard modal panel — header / body / footer slots — rendered inside the Dialog shell. Theming knobs live here; backdrop styling is global (tokens).',\n styleProperties: [\n { key: 'backgroundColor', label: 'Background', control: 'color', defaultValue: 'var(--color-card)', section: 'colors' },\n { key: 'borderColor', label: 'Border', control: 'color', defaultValue: 'var(--color-border)', section: 'colors' },\n { key: 'borderRadius', label: 'Border Radius', control: 'slider', defaultValue: 12, min: 0, max: 24, step: 1, unit: 'px' },\n { key: 'paddingX', label: 'Padding X', control: 'number', defaultValue: 20, min: 8, max: 40, step: 2, unit: 'px' },\n { key: 'paddingY', label: 'Padding Y', control: 'number', defaultValue: 16, min: 8, max: 32, step: 2, unit: 'px' },\n { key: 'titleSize', label: 'Title Size', control: 'number', defaultValue: 16, min: 12, max: 24, step: 1, unit: 'px' },\n { key: 'titleColor', label: 'Title Color', control: 'color', defaultValue: 'var(--color-text)', section: 'colors' },\n ],\n layoutVariants: [\n {\n key: 'size',\n label: 'Size',\n options: [\n { value: 'sm', label: 'Small (360px)' },\n { value: 'md', label: 'Medium (480px)' },\n { value: 'lg', label: 'Large (640px)' },\n { value: 'fullscreen', label: 'Fullscreen' },\n ],\n defaultValue: 'md',\n },\n ],\n api: {\n importPath: '@viax.io/uxm/ui',\n importNames: ['Dialog', 'Modal'],\n props: [\n { name: 'open', type: 'boolean', required: true, description: 'Dialog open state (controlled). Pair with onOpenChange.' },\n { name: 'onOpenChange', type: '(open: boolean) => void', required: true, description: 'Called when the user requests close (Escape or backdrop click).' },\n { name: 'size', type: '\"sm\" | \"md\" | \"lg\" | \"fullscreen\"', defaultValue: '\"md\"', description: 'Modal panel width preset.' },\n { name: 'onClose', type: '() => void', description: 'When set, Modal.Header renders a close X that calls this.' },\n { name: 'closeOnEscape', type: 'boolean', defaultValue: 'true', description: 'Escape key dismisses the dialog.' },\n { name: 'closeOnOutsideClick', type: 'boolean', defaultValue: 'true', description: 'Backdrop click dismisses the dialog.' },\n { name: 'initialFocus', type: 'RefObject<HTMLElement>', description: 'Element to focus on open. Defaults to first focusable in panel.' },\n ],\n },\n },\n];\n"],"mappings":"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","names":[]}
@@ -454,7 +454,7 @@ const diagramDefs = [
454
454
  }
455
455
  ],
456
456
  api: {
457
- importPath: "@viax/uxm/ui",
457
+ importPath: "@viax.io/uxm/ui",
458
458
  importNames: ["Dialog", "Modal"],
459
459
  props: [
460
460
  { name: "open", type: "boolean", required: true, description: "Dialog open state (controlled). Pair with onOpenChange." },