@epilot/zenith-react 0.1.0-next.0 → 0.1.0-next.1

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 (57) hide show
  1. package/README.md +61 -16
  2. package/dist/components/appearance-boundary/appearance-boundary.js.map +1 -1
  3. package/dist/components/badge/badge.js.map +1 -1
  4. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  5. package/dist/components/button-group/button-group.js.map +1 -1
  6. package/dist/components/callout/callout.js.map +1 -1
  7. package/dist/components/card/card.js.map +1 -1
  8. package/dist/components/code-editor/code-editor.js.map +1 -1
  9. package/dist/components/code-editor/indent.js.map +1 -1
  10. package/dist/components/command/command.js +1 -7
  11. package/dist/components/command/command.js.map +1 -1
  12. package/dist/components/date-range-picker/date-range-picker.js +3 -8
  13. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  14. package/dist/components/date-time-picker/time-picker.js.map +1 -1
  15. package/dist/components/density-provider/density-provider.js.map +1 -1
  16. package/dist/components/field/field.js.map +1 -1
  17. package/dist/components/label/label.js +0 -28
  18. package/dist/components/label/label.js.map +1 -1
  19. package/dist/components/list/list.js +2 -12
  20. package/dist/components/list/list.js.map +1 -1
  21. package/dist/components/pill/pill.js.map +1 -1
  22. package/dist/components/separator/separator.js.map +1 -1
  23. package/dist/components/skeleton/skeleton.js.map +1 -1
  24. package/dist/components/slot/compose-as-child.js.map +1 -1
  25. package/dist/components/spinner/spinner.js.map +1 -1
  26. package/dist/components/switch/switch.js.map +1 -1
  27. package/dist/components/table/table.js.map +1 -1
  28. package/dist/components/text/text.js.map +1 -1
  29. package/dist/components/toast/toast.js +4 -6
  30. package/dist/components/toast/toast.js.map +1 -1
  31. package/dist/delivery/index.d.ts +10 -44
  32. package/dist/delivery/index.js +5 -9
  33. package/dist/index.d.ts +69 -410
  34. package/dist/lib/clear-button.js.map +1 -1
  35. package/dist/lib/code-highlight.js.map +1 -1
  36. package/dist/lib/code-tokens.js.map +1 -1
  37. package/dist/lib/pagination.js.map +1 -1
  38. package/dist/packages/tokens/dist/delivery/index.js +18 -48
  39. package/dist/packages/tokens/dist/delivery/index.js.map +1 -1
  40. package/dist/{token-assets/core/5cd4072decf5df2a664f0b1d5f2ec250a3309101ded3056c1f87c8bbe3738d50.css → packages/tokens/dist/generated/core.generated.js} +8 -3
  41. package/dist/packages/tokens/dist/generated/core.generated.js.map +1 -0
  42. package/dist/packages/tokens/dist/install.js +4 -4
  43. package/dist/packages/tokens/dist/install.js.map +1 -1
  44. package/dist/styles/document-context.js.map +1 -1
  45. package/dist/styles/make-styles.js.map +1 -1
  46. package/dist/tokens/core.meta.generated.js.map +1 -1
  47. package/dist/tokens/use-palette-tokens.js.map +1 -1
  48. package/dist/tokens.json +1 -1
  49. package/package.json +3 -4
  50. package/scripts/migration-diagnostics-core.mjs +19 -90
  51. package/scripts/migration-diagnostics.mjs +1 -16
  52. package/scripts/migration-sweep.mjs +2 -12
  53. package/ADOPTING.md +0 -73
  54. package/dist/packages/tokens/dist/delivery/internal.js +0 -181
  55. package/dist/packages/tokens/dist/delivery/internal.js.map +0 -1
  56. package/dist/packages/tokens/dist/generated/core.meta.generated.js +0 -10
  57. package/dist/packages/tokens/dist/generated/core.meta.generated.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sources":["../../../src/components/list/list.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {\n DndContext,\n DragOverlay,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n type DraggableAttributes,\n type DraggableSyntheticListeners,\n} from \"@dnd-kit/core\"\nimport {\n SortableContext,\n verticalListSortingStrategy,\n arrayMove,\n useSortable,\n} from \"@dnd-kit/sortable\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * `relaxed` is a permanent compatibility alias for `normal` (DENSITY-SPEC.md §4.2,\n * WP9B2A-ACCEPTANCE-LIST) — identical geometry, forever, not deprecated. `compact`/`normal`/\n * `comfortable` are the three canonical CSS density tiers (`[data-density]`); `relaxed` never\n * appears as a DOM attribute value — an explicit `density=\"relaxed\"` normalizes to the DOM's\n * canonical `data-density=\"normal\"` (§ List, below), since the generator's three selector blocks\n * only ever match those three literal strings.\n */\nexport type ListDensity = \"compact\" | \"normal\" | \"comfortable\" | \"relaxed\"\nexport type ListItemStatus = \"default\" | \"error\" | \"warning\" | \"success\"\n\n// ── Icons ──────────────────────────────────────────────────────────────────\n\nconst GripVerticalIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <circle cx=\"9\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"19\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"19\" r=\"1.5\" />\n </svg>\n)\n\nconst WarningIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n)\n\nconst CheckCircleIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n)\n\n// ── Styles ─────────────────────────────────────────────────────────────────\n\nconst useStyles = makeZenithStyles({\n list: {\n display: \"flex\",\n width: \"100%\",\n listStyleType: \"none\",\n flexDirection: \"column\",\n ...shorthands.gap(0),\n ...shorthands.padding(0),\n ...shorthands.margin(0),\n },\n\n // ListItem base — density-bound (DENSITY-SPEC.md §2.2, WP9B2A-ACCEPTANCE-LIST). One style, not\n // a compact/relaxed pair: the three CSS tiers are resolved by [data-density] inheritance, so\n // there is no longer a JS branch to pick between \"compact\" and \"everything else\" — normal\n // resolves to the same values `itemRelaxed` used to hardcode, and an explicit `relaxed` is\n // normalized to the DOM's canonical `data-density=\"normal\"` before it ever reaches this class,\n // so it resolves through the identical selector. Typography is unchanged across every tier.\n item: {\n position: \"relative\",\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n ...shorthands.borderRadius(tokens.radiusMd),\n color: tokens.grayA12,\n transitionProperty:\n \"color, background-color, border-color, text-decoration-color, fill, stroke\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n minHeight: tokens.listItemMinHeight,\n ...shorthands.gap(tokens.listItemGap),\n ...shorthands.padding(tokens.listItemPaddingY, tokens.listItemPaddingX),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n \"& > svg\": {\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n\n // Status variants\n statusDefault: {},\n statusError: {\n backgroundColor: tokens.semErrorSoft,\n color: tokens.semErrorDefault,\n },\n statusWarning: {\n backgroundColor: tokens.semWarningSoft,\n color: tokens.semWarningDefault,\n },\n statusSuccess: {\n backgroundColor: tokens.semSuccessSoft,\n color: tokens.semSuccessDefault,\n },\n\n // Striped variant (only neutral rows)\n stripedEven: {\n \"&:nth-child(even)\": {\n backgroundColor: tokens.grayA2,\n },\n },\n\n // Interactive hovers\n interactiveDefault: {\n \":hover\": {\n backgroundColor: tokens.semAccentSoft,\n },\n },\n interactiveError: {\n \":hover\": {\n backgroundColor: tokens.semErrorSoftHover,\n },\n },\n interactiveWarning: {\n \":hover\": {\n backgroundColor: tokens.semWarningSoftHover,\n },\n },\n interactiveSuccess: {\n \":hover\": {\n backgroundColor: tokens.semSuccessSoftHover,\n },\n },\n\n // Sortable modifiers\n sortableItem: {\n cursor: \"grab\",\n touchAction: \"none\",\n \":active\": {\n cursor: \"grabbing\",\n },\n },\n itemDragging: {\n opacity: 0.4,\n },\n\n // Index gutter — density-bound. The negative margins cancel the ITEM's own (now density-bound)\n // padding to keep the index flush to the row edge at every tier; `calc(-1 * var(...))`\n // (WP9B2A-ACCEPTANCE-LIST: \"negative token expressions for that existing cancellation are\n // authorized\") tracks whichever tier is active without a separate JS branch, same reasoning as\n // `item` above. `index-padding-x` is the one matrix completion this slice adds (DENSITY-SPEC.md\n // §2.2): 6/8/8px — comfortable reuses the normal inset, no separate source value exists for it.\n indexBase: {\n display: \"flex\",\n flexShrink: 0,\n userSelect: \"none\",\n alignItems: \"center\",\n justifyContent: \"center\",\n alignSelf: \"stretch\",\n borderTopLeftRadius: tokens.radiusMd,\n borderBottomLeftRadius: tokens.radiusMd,\n backgroundColor: tokens.grayA2,\n textAlign: \"center\",\n color: tokens.grayA11,\n fontVariantNumeric: \"tabular-nums\",\n minWidth: tokens.listIndexMinWidth,\n marginTop: `calc(-1 * ${tokens.listItemPaddingY})`,\n marginBottom: `calc(-1 * ${tokens.listItemPaddingY})`,\n marginLeft: `calc(-1 * ${tokens.listItemPaddingX})`,\n paddingLeft: tokens.listIndexPaddingX,\n paddingRight: tokens.listIndexPaddingX,\n },\n\n // Content\n content: {\n display: \"flex\",\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n \"& > svg\": {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n },\n },\n\n // Actions\n actions: {\n position: \"relative\",\n zIndex: 10,\n display: \"flex\",\n flexShrink: 0,\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n },\n\n // Text\n text: {\n display: \"flex\",\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n flexDirection: \"column\",\n ...shorthands.gap(\"0.125rem\"),\n },\n\n // Description\n description: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n color: tokens.grayA11,\n },\n\n // Drag handle button\n dragHandle: {\n position: \"relative\",\n zIndex: 10,\n display: \"inline-flex\",\n flexShrink: 0,\n cursor: \"grab\",\n alignItems: \"center\",\n color: tokens.grayA8,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n \":hover\": {\n color: tokens.grayA11,\n },\n \":active\": {\n cursor: \"grabbing\",\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \"& svg\": {\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n\n // Drop indicator line\n dropIndicator: {\n pointerEvents: \"none\",\n position: \"absolute\",\n left: 0,\n right: 0,\n zIndex: 10,\n height: \"0.125rem\",\n transformOrigin: \"center\",\n ...shorthands.borderRadius(\"9999px\"),\n backgroundColor: tokens.semAccentSolid,\n animationName: {\n from: {\n transform: \"scaleX(0)\",\n opacity: 0,\n },\n to: {\n transform: \"scaleX(1)\",\n opacity: 1,\n },\n },\n animationDuration: \"160ms\",\n animationTimingFunction: \"ease-out\",\n },\n dropIndicatorTop: {\n top: \"-0.125rem\",\n },\n dropIndicatorBottom: {\n bottom: \"-0.125rem\",\n },\n\n // DragOverlay ghost\n dragOverlayItem: {\n transformOrigin: \"center\",\n transform: \"scale(0.95)\",\n cursor: \"grabbing\",\n ...shorthands.border(\"1px\", \"solid\", tokens.grayA5),\n backgroundColor: \"rgb(255 255 255 / 55%)\",\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n backdropFilter: \"blur(12px)\",\n animationName: {\n from: { transform: \"scale(1)\" },\n to: { transform: \"scale(0.95)\" },\n },\n animationDuration: \"160ms\",\n animationTimingFunction: \"ease-out\",\n \":hover\": {\n backgroundColor: \"rgb(255 255 255 / 55%)\",\n },\n },\n\n // Group\n group: {\n listStyleType: \"none\",\n },\n groupTrigger: {\n cursor: \"pointer\",\n textAlign: \"left\",\n fontWeight: tokens.fontWeightMedium,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n },\n groupChevron: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.grayA10,\n transitionProperty: \"transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n groupChevronOpen: {\n transform: \"rotate(90deg)\",\n },\n groupTriggerText: {\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n standaloneGroupLabel: {\n marginTop: tokens.spacingGroup2,\n display: \"block\",\n listStyleType: \"none\",\n ...shorthands.padding(\"0.375rem\", tokens.spacingElement3),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA12,\n \"&:first-child\": {\n marginTop: 0,\n },\n },\n groupContentList: {\n paddingLeft: tokens.spacingGroup2,\n },\n collapseWrapper: {\n display: \"grid\",\n gridTemplateRows: \"0fr\",\n transitionProperty: \"grid-template-rows\",\n transitionDuration: \"200ms\",\n transitionTimingFunction: \"cubic-bezier(0, 0, 0.2, 1)\",\n \"&[data-state='open']\": {\n gridTemplateRows: \"1fr\",\n },\n },\n collapseWrapperOpen: {\n gridTemplateRows: \"1fr\",\n },\n collapseInner: {\n minHeight: 0,\n overflow: \"hidden\",\n },\n\n // Status icons\n statusIconError: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.semErrorLight,\n },\n statusIconWarning: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.semWarningLight,\n },\n statusIconSuccess: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.semSuccessLight,\n },\n})\n\n// ── Status Icons Helper ────────────────────────────────────────────────────\n\nconst StatusIcon = ({ status }: { status: ListItemStatus }) => {\n const styles = useStyles()\n if (status === \"error\") {\n return <WarningIcon className={styles.statusIconError} />\n }\n if (status === \"warning\") {\n return <WarningIcon className={styles.statusIconWarning} />\n }\n if (status === \"success\") {\n return <CheckCircleIcon className={styles.statusIconSuccess} />\n }\n return null\n}\n\n// ── Context ────────────────────────────────────────────────────────────────\n\n/**\n * `density` is deliberately NOT here — every downstream consumer (`ListItemBody`,\n * `ListGroupLabel`'s collapsible-trigger branch) now reads geometry from CSS custom properties via\n * `[data-density]` inheritance, not from this context. `ListContext` is private/unexported (unlike\n * `TableDensityContext`), so it never had the public-`Provider`-compatibility problem Table\n * had — there is no external raw Provider to reconcile with, so no marker/comparison mechanism\n * is needed here.\n */\ntype ListContextValue = {\n striped: boolean\n showIndex: boolean\n sortable: boolean\n}\n\nconst ListContext = React.createContext<ListContextValue>({\n striped: false,\n showIndex: false,\n sortable: false,\n})\n\nconst useListContext = () => React.useContext(ListContext)\n\n/**\n * `undefined` (density omitted) stays `undefined` — no implicit normal stamp, so the `<ol>`\n * inherits ambient CSS density through ordinary DOM inheritance. Explicit `relaxed` normalizes to\n * the canonical DOM value `\"normal\"`: the generator's three selector blocks\n * (`packages/tokens/scripts/lib/model.ts`, `densitySelector`) only ever match the literal strings\n * `\"compact\"`/`\"normal\"`/`\"comfortable\"`, so a raw `data-density=\"relaxed\"` attribute would match\n * none of them and silently fall through to whatever ancestor happens to be there — not the\n * pixel-identical-to-normal geometry `relaxed` promises. Every other explicit value passes through\n * unchanged.\n */\nconst canonicalDomDensity = (\n density: ListDensity | undefined\n): \"compact\" | \"normal\" | \"comfortable\" | undefined =>\n density === undefined ? undefined : density === \"relaxed\" ? \"normal\" : density\n\n// ── List ───────────────────────────────────────────────────────────────────\n\nexport type ListProps = Omit<React.ComponentProps<\"ol\">, \"onReorder\"> & {\n /**\n * Row density. Omitted inherits the ambient shell `[data-density]` (no stamp is written).\n * `\"relaxed\"` is a permanent alias for `\"normal\"` — identical geometry, normalized to\n * `data-density=\"normal\"` in the DOM. An explicit value (including `\"relaxed\"`) creates a\n * canonical density boundary for this list's subtree and its `DragOverlay`.\n */\n density?: ListDensity\n /** Alternating background on neutral rows. Default: false */\n striped?: boolean\n /** Show a 1-based position number on each item. Default: false */\n showIndex?: boolean\n /** Enable drag-and-drop reordering. Each `ListItem` must have a `value`. */\n sortable?: boolean\n /** Called with the new order of `ListItem` values after a drag. */\n onReorder?: (values: string[]) => void\n}\n\nexport const List = React.forwardRef<HTMLOListElement, ListProps>(function List(\n {\n className,\n density,\n striped = false,\n showIndex = false,\n sortable = false,\n onReorder,\n children,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const domDensity = canonicalDomDensity(density)\n\n const items = React.Children.toArray(children).filter(\n React.isValidElement\n ) as React.ReactElement<ListItemProps>[]\n\n const indexedItems = items.map((child, index) =>\n child.type === ListItem ? React.cloneElement(child, { index }) : child\n )\n\n const sortableItems = items.filter((child) => child.type === ListItem)\n const values = sortableItems\n .map((child) => child.props.value)\n .filter((v): v is string => typeof v === \"string\")\n\n const [activeId, setActiveId] = React.useState<string | null>(null)\n const activeIndex = activeId ? values.indexOf(activeId) : -1\n const activeItem =\n activeId != null\n ? sortableItems.find((child) => child.props.value === activeId)\n : undefined\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 3 } }),\n useSensor(KeyboardSensor)\n )\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveId(event.active.id as string)\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n setActiveId(null)\n const { active, over } = event\n if (!over || active.id === over.id) return\n\n const oldIndex = values.indexOf(active.id as string)\n const newIndex = values.indexOf(over.id as string)\n if (oldIndex === -1 || newIndex === -1) return\n\n onReorder?.(arrayMove(values, oldIndex, newIndex))\n }\n\n const listElement = (\n <ol\n ref={ref}\n data-slot=\"list\"\n {...{ [SLOT_ATTR]: \"list\" }}\n {...(domDensity !== undefined ? { \"data-density\": domDensity } : {})}\n className={mergeClasses(styles.list, className)}\n {...props}\n >\n {indexedItems}\n </ol>\n )\n\n return (\n <ListContext.Provider value={{ striped, showIndex, sortable }}>\n {sortable ? (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext\n items={values}\n strategy={verticalListSortingStrategy}\n >\n {listElement}\n </SortableContext>\n <DragOverlay>\n {activeItem ? (\n <ListItemBody\n value={activeItem.props.value}\n status={activeItem.props.status}\n index={activeIndex}\n className={styles.dragOverlayItem}\n // Reasserted only for an EXPLICIT density: DragOverlay is an ordinary DOM\n // sibling of `listElement`, not a portal\n // (dnd-kit's `PositionedOverlay` renders in place — confirmed from the installed\n // source), so an omitted/ambient density already reaches it correctly through the\n // real DOM tree with no stamp at all. Stamping the resolved value unconditionally\n // would mask a correct ambient value with a stale JS default. The boundary lands\n // directly on this existing `ListItemBody` root, not a new wrapper.\n {...(domDensity !== undefined\n ? { \"data-density\": domDensity }\n : {})}\n >\n {activeItem.props.children}\n </ListItemBody>\n ) : null}\n </DragOverlay>\n </DndContext>\n ) : (\n listElement\n )}\n </ListContext.Provider>\n )\n})\n\n// ── ListItemActions ────────────────────────────────────────────────────────\n\nexport type ListItemActionsProps = React.ComponentProps<\"span\">\n\nexport const ListItemActions = React.forwardRef<\n HTMLSpanElement,\n ListItemActionsProps\n>(function ListItemActions({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-actions\"\n {...{ [SLOT_ATTR]: \"list-item-actions\" }}\n onPointerDown={(e) => e.stopPropagation()}\n className={mergeClasses(styles.actions, className)}\n {...props}\n >\n {children}\n </span>\n )\n})\n\n// ── ListItemText ───────────────────────────────────────────────────────────\n\nexport type ListItemTextProps = React.ComponentProps<\"span\">\n\nexport const ListItemText = React.forwardRef<\n HTMLSpanElement,\n ListItemTextProps\n>(function ListItemText({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-text\"\n {...{ [SLOT_ATTR]: \"list-item-text\" }}\n className={mergeClasses(styles.text, className)}\n {...props}\n />\n )\n})\n\n// ── ListItemDescription ────────────────────────────────────────────────────\n\nexport type ListItemDescriptionProps = React.ComponentProps<\"span\">\n\nexport const ListItemDescription = React.forwardRef<\n HTMLSpanElement,\n ListItemDescriptionProps\n>(function ListItemDescription({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-description\"\n {...{ [SLOT_ATTR]: \"list-item-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n />\n )\n})\n\n// ── ListItemBody ───────────────────────────────────────────────────────────\n\nexport type ListItemProps = React.ComponentProps<\"li\"> & {\n /** Stable id used for drag-and-drop. Required when the `List` is `sortable`. */\n value?: string\n /** System status. Tints the row and shows a trailing status icon. */\n status?: ListItemStatus\n /** Injected by `List` — the 0-based position. */\n index?: number\n}\n\ntype ListItemBodyProps = ListItemProps & {\n setNodeRef?: (node: HTMLElement | null) => void\n setActivatorNodeRef?: (node: HTMLElement | null) => void\n style?: React.CSSProperties\n isDragging?: boolean\n /** Insertion indicator edge while another item is dragged over this one. */\n dropEdge?: \"top\" | \"bottom\" | null\n /** dnd-kit listeners — pointer activation goes on the row, keyboard on the handle. */\n listeners?: DraggableSyntheticListeners\n /** dnd-kit a11y attributes for the keyboard drag handle. */\n attributes?: DraggableAttributes\n}\n\nconst ListItemBody = React.forwardRef<HTMLLIElement, ListItemBodyProps>(\n function ListItemBody(\n {\n className,\n value,\n status = \"default\",\n index,\n children,\n setNodeRef,\n setActivatorNodeRef,\n style,\n isDragging,\n dropEdge,\n listeners,\n attributes,\n ...props\n },\n forwardedRef\n ) {\n const styles = useStyles()\n const { striped, showIndex, sortable } = useListContext()\n const interactive = sortable && !isDragging\n\n const childArray = React.Children.toArray(children)\n const actionsSlot = childArray.find(\n (child): child is React.ReactElement =>\n React.isValidElement(child) && child.type === ListItemActions\n )\n const contentChildren = childArray.filter((child) => child !== actionsSlot)\n\n // Combined ref for dnd-kit setNodeRef + caller's forwardedRef\n const handleRef = React.useCallback(\n (node: HTMLLIElement | null) => {\n setNodeRef?.(node)\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node)\n } else if (forwardedRef) {\n ;(\n forwardedRef as React.MutableRefObject<HTMLLIElement | null>\n ).current = node\n }\n },\n [setNodeRef, forwardedRef]\n )\n\n const statusStyle =\n status === \"error\"\n ? styles.statusError\n : status === \"warning\"\n ? styles.statusWarning\n : status === \"success\"\n ? styles.statusSuccess\n : styles.statusDefault\n\n const interactiveStyle = interactive\n ? status === \"error\"\n ? styles.interactiveError\n : status === \"warning\"\n ? styles.interactiveWarning\n : status === \"success\"\n ? styles.interactiveSuccess\n : styles.interactiveDefault\n : undefined\n\n return (\n <li\n ref={handleRef}\n style={style}\n data-slot=\"list-item\"\n {...{ [SLOT_ATTR]: \"list-item\" }}\n data-status={status}\n data-value={value}\n onPointerDown={\n sortable\n ? (listeners?.onPointerDown as\n React.PointerEventHandler<HTMLLIElement> | undefined)\n : undefined\n }\n className={mergeClasses(\n styles.item,\n statusStyle,\n striped && status === \"default\" && styles.stripedEven,\n interactiveStyle,\n sortable && styles.sortableItem,\n isDragging && styles.itemDragging,\n className\n )}\n {...props}\n >\n {dropEdge && (\n <span\n data-slot=\"list-drop-indicator\"\n {...{ [SLOT_ATTR]: \"list-drop-indicator\" }}\n aria-hidden=\"true\"\n className={mergeClasses(\n styles.dropIndicator,\n dropEdge === \"top\"\n ? styles.dropIndicatorTop\n : styles.dropIndicatorBottom\n )}\n />\n )}\n\n {showIndex && (\n <span\n data-slot=\"list-item-index\"\n {...{ [SLOT_ATTR]: \"list-item-index\" }}\n aria-hidden=\"true\"\n className={styles.indexBase}\n >\n {(index ?? 0) + 1}\n </span>\n )}\n\n <span\n data-slot=\"list-item-content\"\n {...{ [SLOT_ATTR]: \"list-item-content\" }}\n className={styles.content}\n >\n {contentChildren}\n </span>\n\n <StatusIcon status={status} />\n\n {actionsSlot}\n\n {sortable && (\n <button\n ref={setActivatorNodeRef}\n type=\"button\"\n aria-label={`Drag to reorder ${value ?? \"item\"}`}\n className={styles.dragHandle}\n {...attributes}\n onKeyDown={\n listeners?.onKeyDown as\n React.KeyboardEventHandler<HTMLButtonElement> | undefined\n }\n >\n <GripVerticalIcon />\n </button>\n )}\n </li>\n )\n }\n)\n\n// ── SortableListItem ───────────────────────────────────────────────────────\n\nconst SortableListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n function SortableListItem(props, ref) {\n const fallbackId = React.useId()\n\n if (process.env.NODE_ENV !== \"production\" && props.value === undefined) {\n console.warn(\n \"List: a sortable `ListItem` is missing a `value`. \" +\n \"Give each sortable item a unique `value` so it can be reordered — \" +\n \"items without one are excluded from `onReorder`.\"\n )\n }\n\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n isDragging,\n isOver,\n activeIndex,\n overIndex,\n } = useSortable({\n id: props.value ?? fallbackId,\n animateLayoutChanges: () => false,\n })\n\n const dropEdge: \"top\" | \"bottom\" | null =\n isOver && !isDragging && activeIndex !== -1\n ? activeIndex < overIndex\n ? \"bottom\"\n : \"top\"\n : null\n\n return (\n <ListItemBody\n ref={ref}\n {...props}\n setNodeRef={setNodeRef}\n setActivatorNodeRef={setActivatorNodeRef}\n isDragging={isDragging}\n dropEdge={dropEdge}\n listeners={listeners}\n attributes={attributes}\n />\n )\n }\n)\n\n// ── ListItem ───────────────────────────────────────────────────────────────\n\nexport const ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n function ListItem(props, ref) {\n const { sortable } = useListContext()\n\n if (sortable) {\n return <SortableListItem ref={ref} {...props} />\n }\n\n return <ListItemBody ref={ref} {...props} />\n }\n)\n\n// ── ListGroup ──────────────────────────────────────────────────────────────\n\ntype ListGroupContextValue = {\n open: boolean\n setOpen: (open: boolean) => void\n contentId: string\n}\n\nconst ListGroupContext = React.createContext<ListGroupContextValue | null>(null)\n\nexport type ListGroupProps = Omit<React.ComponentProps<\"li\">, \"onChange\"> & {\n /** Controlled open state of the collapsible group. */\n open?: boolean\n /** Initial open state when uncontrolled. Default: false */\n defaultOpen?: boolean\n /** Called when the group is expanded or collapsed. */\n onOpenChange?: (open: boolean) => void\n}\n\nexport const ListGroup = React.forwardRef<HTMLLIElement, ListGroupProps>(\n function ListGroup(\n {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n className,\n children,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const open = openProp ?? uncontrolledOpen\n const contentId = React.useId()\n\n const setOpen = (next: boolean) => {\n if (openProp === undefined) setUncontrolledOpen(next)\n onOpenChange?.(next)\n }\n\n return (\n <ListGroupContext.Provider value={{ open, setOpen, contentId }}>\n <li\n ref={ref}\n data-slot=\"list-group\"\n {...{ [SLOT_ATTR]: \"list-group\" }}\n data-state={open ? \"open\" : \"closed\"}\n className={mergeClasses(styles.group, className)}\n {...props}\n >\n {children}\n </li>\n </ListGroupContext.Provider>\n )\n }\n)\n\n// ── ListGroupLabel ─────────────────────────────────────────────────────────\n\nexport type ListGroupLabelProps = React.ComponentProps<\"button\"> & {\n asListItem?: boolean\n}\n\nexport const ListGroupLabel = React.forwardRef<\n HTMLElement,\n ListGroupLabelProps\n>(function ListGroupLabel({ className, children, ...props }, ref) {\n const styles = useStyles()\n const group = React.useContext(ListGroupContext)\n\n if (group) {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n data-slot=\"list-group-trigger\"\n {...{ [SLOT_ATTR]: \"list-group-trigger\" }}\n aria-expanded={group.open}\n aria-controls={group.contentId}\n onClick={() => group.setOpen(!group.open)}\n className={mergeClasses(\n styles.item,\n styles.interactiveDefault,\n styles.groupTrigger,\n className\n )}\n {...props}\n >\n <ChevronRightIcon\n className={mergeClasses(\n styles.groupChevron,\n group.open && styles.groupChevronOpen\n )}\n />\n <span className={styles.groupTriggerText}>{children}</span>\n </button>\n )\n }\n\n return (\n <li\n ref={ref as React.Ref<HTMLLIElement>}\n data-slot=\"list-group-label\"\n {...{ [SLOT_ATTR]: \"list-group-label\" }}\n className={mergeClasses(styles.standaloneGroupLabel, className)}\n >\n {children}\n </li>\n )\n})\n\n// ── ListGroupContent ───────────────────────────────────────────────────────\n\nexport type ListGroupContentProps = React.ComponentProps<\"ul\">\n\nexport const ListGroupContent = React.forwardRef<\n HTMLUListElement,\n ListGroupContentProps\n>(function ListGroupContent({ className, children, ...props }, ref) {\n const styles = useStyles()\n const group = React.useContext(ListGroupContext)\n\n const items = (\n <ul\n ref={ref}\n data-slot=\"list-group-content\"\n {...{ [SLOT_ATTR]: \"list-group-content\" }}\n className={mergeClasses(styles.list, styles.groupContentList, className)}\n {...props}\n >\n {children}\n </ul>\n )\n\n if (!group) return items\n\n return (\n <div\n id={group.contentId}\n data-state={group.open ? \"open\" : \"closed\"}\n className={mergeClasses(\n styles.collapseWrapper,\n group.open && styles.collapseWrapperOpen\n )}\n >\n <div className={styles.collapseInner}>{items}</div>\n </div>\n )\n})\n"],"names":["GripVerticalIcon","props","jsxs","jsx","WarningIcon","CheckCircleIcon","ChevronRightIcon","useStyles","makeZenithStyles","shorthands","tokens.radiusMd","tokens.grayA12","tokens.listItemMinHeight","tokens.listItemGap","tokens.listItemPaddingY","tokens.listItemPaddingX","tokens.textSm","tokens.leadingSm","tokens.semErrorSoft","tokens.semErrorDefault","tokens.semWarningSoft","tokens.semWarningDefault","tokens.semSuccessSoft","tokens.semSuccessDefault","tokens.grayA2","tokens.semAccentSoft","tokens.semErrorSoftHover","tokens.semWarningSoftHover","tokens.semSuccessSoftHover","tokens.grayA11","tokens.listIndexMinWidth","tokens.listIndexPaddingX","tokens.spacingElement2","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.grayA8","tokens.accentA8","tokens.semAccentSolid","tokens.grayA5","tokens.fontWeightMedium","tokens.grayA10","tokens.spacingGroup2","tokens.spacingElement3","tokens.fontWeightSemibold","tokens.semErrorLight","tokens.semWarningLight","tokens.semSuccessLight","StatusIcon","status","styles","ListContext","React","useListContext","canonicalDomDensity","density","List","className","striped","showIndex","sortable","onReorder","children","ref","domDensity","items","indexedItems","child","index","ListItem","sortableItems","values","v","activeId","setActiveId","activeIndex","activeItem","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","handleDragStart","event","handleDragEnd","active","over","oldIndex","newIndex","arrayMove","listElement","SLOT_ATTR","mergeClasses","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","DragOverlay","ListItemBody","ListItemActions","e","ListItemText","ListItemDescription","value","setNodeRef","setActivatorNodeRef","style","isDragging","dropEdge","listeners","attributes","forwardedRef","interactive","childArray","actionsSlot","contentChildren","handleRef","node","statusStyle","interactiveStyle","SortableListItem","fallbackId","isOver","overIndex","useSortable","ListGroupContext","ListGroup","openProp","defaultOpen","onOpenChange","uncontrolledOpen","setUncontrolledOpen","open","contentId","setOpen","next","ListGroupLabel","group","ListGroupContent"],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sources":["../../../src/components/list/list.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {\n DndContext,\n DragOverlay,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n type DraggableAttributes,\n type DraggableSyntheticListeners,\n} from \"@dnd-kit/core\"\nimport {\n SortableContext,\n verticalListSortingStrategy,\n arrayMove,\n useSortable,\n} from \"@dnd-kit/sortable\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * `relaxed` is a permanent compatibility alias for `normal` (DENSITY-SPEC.md §4.2,\n * WP9B2A-ACCEPTANCE-LIST) — identical geometry, forever, not deprecated.\n */\nexport type ListDensity = \"compact\" | \"normal\" | \"comfortable\" | \"relaxed\"\nexport type ListItemStatus = \"default\" | \"error\" | \"warning\" | \"success\"\n\n// ── Icons ──────────────────────────────────────────────────────────────────\n\nconst GripVerticalIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <circle cx=\"9\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"5\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"19\" r=\"1.5\" />\n <circle cx=\"15\" cy=\"19\" r=\"1.5\" />\n </svg>\n)\n\nconst WarningIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n)\n\nconst CheckCircleIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n)\n\n// ── Styles ─────────────────────────────────────────────────────────────────\n\nconst useStyles = makeZenithStyles({\n list: {\n display: \"flex\",\n width: \"100%\",\n listStyleType: \"none\",\n flexDirection: \"column\",\n ...shorthands.gap(0),\n ...shorthands.padding(0),\n ...shorthands.margin(0),\n },\n\n // ListItem base — density-bound (DENSITY-SPEC.md §2.2, WP9B2A-ACCEPTANCE-LIST).\n item: {\n position: \"relative\",\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n ...shorthands.borderRadius(tokens.radiusMd),\n color: tokens.grayA12,\n transitionProperty:\n \"color, background-color, border-color, text-decoration-color, fill, stroke\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n minHeight: tokens.listItemMinHeight,\n ...shorthands.gap(tokens.listItemGap),\n ...shorthands.padding(tokens.listItemPaddingY, tokens.listItemPaddingX),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n \"& > svg\": {\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n\n // Status variants\n statusDefault: {},\n statusError: {\n backgroundColor: tokens.semErrorSoft,\n color: tokens.semErrorDefault,\n },\n statusWarning: {\n backgroundColor: tokens.semWarningSoft,\n color: tokens.semWarningDefault,\n },\n statusSuccess: {\n backgroundColor: tokens.semSuccessSoft,\n color: tokens.semSuccessDefault,\n },\n\n // Striped variant (only neutral rows)\n stripedEven: {\n \"&:nth-child(even)\": {\n backgroundColor: tokens.grayA2,\n },\n },\n\n // Interactive hovers\n interactiveDefault: {\n \":hover\": {\n backgroundColor: tokens.semAccentSoft,\n },\n },\n interactiveError: {\n \":hover\": {\n backgroundColor: tokens.semErrorSoftHover,\n },\n },\n interactiveWarning: {\n \":hover\": {\n backgroundColor: tokens.semWarningSoftHover,\n },\n },\n interactiveSuccess: {\n \":hover\": {\n backgroundColor: tokens.semSuccessSoftHover,\n },\n },\n\n // Sortable modifiers\n sortableItem: {\n cursor: \"grab\",\n touchAction: \"none\",\n \":active\": {\n cursor: \"grabbing\",\n },\n },\n itemDragging: {\n opacity: 0.4,\n },\n\n // Index gutter — density-bound.\n indexBase: {\n display: \"flex\",\n flexShrink: 0,\n userSelect: \"none\",\n alignItems: \"center\",\n justifyContent: \"center\",\n alignSelf: \"stretch\",\n borderTopLeftRadius: tokens.radiusMd,\n borderBottomLeftRadius: tokens.radiusMd,\n backgroundColor: tokens.grayA2,\n textAlign: \"center\",\n color: tokens.grayA11,\n fontVariantNumeric: \"tabular-nums\",\n minWidth: tokens.listIndexMinWidth,\n marginTop: `calc(-1 * ${tokens.listItemPaddingY})`,\n marginBottom: `calc(-1 * ${tokens.listItemPaddingY})`,\n marginLeft: `calc(-1 * ${tokens.listItemPaddingX})`,\n paddingLeft: tokens.listIndexPaddingX,\n paddingRight: tokens.listIndexPaddingX,\n },\n\n // Content\n content: {\n display: \"flex\",\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n \"& > svg\": {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n },\n },\n\n // Actions\n actions: {\n position: \"relative\",\n zIndex: 10,\n display: \"flex\",\n flexShrink: 0,\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n },\n\n // Text\n text: {\n display: \"flex\",\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n flexDirection: \"column\",\n ...shorthands.gap(\"0.125rem\"),\n },\n\n // Description\n description: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n color: tokens.grayA11,\n },\n\n // Drag handle button\n dragHandle: {\n position: \"relative\",\n zIndex: 10,\n display: \"inline-flex\",\n flexShrink: 0,\n cursor: \"grab\",\n alignItems: \"center\",\n color: tokens.grayA8,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n ...shorthands.padding(0),\n \":hover\": {\n color: tokens.grayA11,\n },\n \":active\": {\n cursor: \"grabbing\",\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \"& svg\": {\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n\n // Drop indicator line\n dropIndicator: {\n pointerEvents: \"none\",\n position: \"absolute\",\n left: 0,\n right: 0,\n zIndex: 10,\n height: \"0.125rem\",\n transformOrigin: \"center\",\n ...shorthands.borderRadius(\"9999px\"),\n backgroundColor: tokens.semAccentSolid,\n animationName: {\n from: {\n transform: \"scaleX(0)\",\n opacity: 0,\n },\n to: {\n transform: \"scaleX(1)\",\n opacity: 1,\n },\n },\n animationDuration: \"160ms\",\n animationTimingFunction: \"ease-out\",\n },\n dropIndicatorTop: {\n top: \"-0.125rem\",\n },\n dropIndicatorBottom: {\n bottom: \"-0.125rem\",\n },\n\n // DragOverlay ghost\n dragOverlayItem: {\n transformOrigin: \"center\",\n transform: \"scale(0.95)\",\n cursor: \"grabbing\",\n ...shorthands.border(\"1px\", \"solid\", tokens.grayA5),\n backgroundColor: \"rgb(255 255 255 / 55%)\",\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n backdropFilter: \"blur(12px)\",\n animationName: {\n from: { transform: \"scale(1)\" },\n to: { transform: \"scale(0.95)\" },\n },\n animationDuration: \"160ms\",\n animationTimingFunction: \"ease-out\",\n \":hover\": {\n backgroundColor: \"rgb(255 255 255 / 55%)\",\n },\n },\n\n // Group\n group: {\n listStyleType: \"none\",\n },\n groupTrigger: {\n cursor: \"pointer\",\n textAlign: \"left\",\n fontWeight: tokens.fontWeightMedium,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n },\n groupChevron: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.grayA10,\n transitionProperty: \"transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n },\n groupChevronOpen: {\n transform: \"rotate(90deg)\",\n },\n groupTriggerText: {\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n standaloneGroupLabel: {\n marginTop: tokens.spacingGroup2,\n display: \"block\",\n listStyleType: \"none\",\n ...shorthands.padding(\"0.375rem\", tokens.spacingElement3),\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA12,\n \"&:first-child\": {\n marginTop: 0,\n },\n },\n groupContentList: {\n paddingLeft: tokens.spacingGroup2,\n },\n collapseWrapper: {\n display: \"grid\",\n gridTemplateRows: \"0fr\",\n transitionProperty: \"grid-template-rows\",\n transitionDuration: \"200ms\",\n transitionTimingFunction: \"cubic-bezier(0, 0, 0.2, 1)\",\n \"&[data-state='open']\": {\n gridTemplateRows: \"1fr\",\n },\n },\n collapseWrapperOpen: {\n gridTemplateRows: \"1fr\",\n },\n collapseInner: {\n minHeight: 0,\n overflow: \"hidden\",\n },\n\n // Status icons\n statusIconError: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.semErrorLight,\n },\n statusIconWarning: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.semWarningLight,\n },\n statusIconSuccess: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.semSuccessLight,\n },\n})\n\n// ── Status Icons Helper ────────────────────────────────────────────────────\n\nconst StatusIcon = ({ status }: { status: ListItemStatus }) => {\n const styles = useStyles()\n if (status === \"error\") {\n return <WarningIcon className={styles.statusIconError} />\n }\n if (status === \"warning\") {\n return <WarningIcon className={styles.statusIconWarning} />\n }\n if (status === \"success\") {\n return <CheckCircleIcon className={styles.statusIconSuccess} />\n }\n return null\n}\n\n// ── Context ────────────────────────────────────────────────────────────────\n\n/**\n * `density` is deliberately NOT here — every downstream consumer (`ListItemBody`,\n * `ListGroupLabel`'s collapsible-trigger branch) now reads geometry from CSS custom properties via\n * `[data-density]` inheritance, not from this context.\n */\ntype ListContextValue = {\n striped: boolean\n showIndex: boolean\n sortable: boolean\n}\n\nconst ListContext = React.createContext<ListContextValue>({\n striped: false,\n showIndex: false,\n sortable: false,\n})\n\nconst useListContext = () => React.useContext(ListContext)\n\n/**\n * `undefined` (density omitted) stays `undefined` — no implicit normal stamp, so the `<ol>`\n * inherits ambient CSS density through ordinary DOM inheritance.\n */\nconst canonicalDomDensity = (\n density: ListDensity | undefined\n): \"compact\" | \"normal\" | \"comfortable\" | undefined =>\n density === undefined ? undefined : density === \"relaxed\" ? \"normal\" : density\n\n// ── List ───────────────────────────────────────────────────────────────────\n\nexport type ListProps = Omit<React.ComponentProps<\"ol\">, \"onReorder\"> & {\n /**\n * Row density. Omitted inherits the ambient shell `[data-density]` (no stamp is written).\n * `\"relaxed\"` is a permanent alias for `\"normal\"` — identical geometry, normalized to\n * `data-density=\"normal\"` in the DOM. An explicit value (including `\"relaxed\"`) creates a\n * canonical density boundary for this list's subtree and its `DragOverlay`.\n */\n density?: ListDensity\n /** Alternating background on neutral rows. Default: false */\n striped?: boolean\n /** Show a 1-based position number on each item. Default: false */\n showIndex?: boolean\n /** Enable drag-and-drop reordering. Each `ListItem` must have a `value`. */\n sortable?: boolean\n /** Called with the new order of `ListItem` values after a drag. */\n onReorder?: (values: string[]) => void\n}\n\nexport const List = React.forwardRef<HTMLOListElement, ListProps>(function List(\n {\n className,\n density,\n striped = false,\n showIndex = false,\n sortable = false,\n onReorder,\n children,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const domDensity = canonicalDomDensity(density)\n\n const items = React.Children.toArray(children).filter(\n React.isValidElement\n ) as React.ReactElement<ListItemProps>[]\n\n const indexedItems = items.map((child, index) =>\n child.type === ListItem ? React.cloneElement(child, { index }) : child\n )\n\n const sortableItems = items.filter((child) => child.type === ListItem)\n const values = sortableItems\n .map((child) => child.props.value)\n .filter((v): v is string => typeof v === \"string\")\n\n const [activeId, setActiveId] = React.useState<string | null>(null)\n const activeIndex = activeId ? values.indexOf(activeId) : -1\n const activeItem =\n activeId != null\n ? sortableItems.find((child) => child.props.value === activeId)\n : undefined\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 3 } }),\n useSensor(KeyboardSensor)\n )\n\n const handleDragStart = (event: DragStartEvent) => {\n setActiveId(event.active.id as string)\n }\n\n const handleDragEnd = (event: DragEndEvent) => {\n setActiveId(null)\n const { active, over } = event\n if (!over || active.id === over.id) return\n\n const oldIndex = values.indexOf(active.id as string)\n const newIndex = values.indexOf(over.id as string)\n if (oldIndex === -1 || newIndex === -1) return\n\n onReorder?.(arrayMove(values, oldIndex, newIndex))\n }\n\n const listElement = (\n <ol\n ref={ref}\n data-slot=\"list\"\n {...{ [SLOT_ATTR]: \"list\" }}\n {...(domDensity !== undefined ? { \"data-density\": domDensity } : {})}\n className={mergeClasses(styles.list, className)}\n {...props}\n >\n {indexedItems}\n </ol>\n )\n\n return (\n <ListContext.Provider value={{ striped, showIndex, sortable }}>\n {sortable ? (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragCancel={() => setActiveId(null)}\n >\n <SortableContext\n items={values}\n strategy={verticalListSortingStrategy}\n >\n {listElement}\n </SortableContext>\n <DragOverlay>\n {activeItem ? (\n <ListItemBody\n value={activeItem.props.value}\n status={activeItem.props.status}\n index={activeIndex}\n className={styles.dragOverlayItem}\n // Reasserted only for an EXPLICIT density: DragOverlay is an ordinary DOM sibling\n // of `listElement`, not a portal (dnd-kit's `PositionedOverlay` renders in place —\n // confirmed from the installed source), so an omitted/ambient density already\n // reaches it correctly through the real DOM tree with no stamp at all.\n {...(domDensity !== undefined\n ? { \"data-density\": domDensity }\n : {})}\n >\n {activeItem.props.children}\n </ListItemBody>\n ) : null}\n </DragOverlay>\n </DndContext>\n ) : (\n listElement\n )}\n </ListContext.Provider>\n )\n})\n\n// ── ListItemActions ────────────────────────────────────────────────────────\n\nexport type ListItemActionsProps = React.ComponentProps<\"span\">\n\nexport const ListItemActions = React.forwardRef<\n HTMLSpanElement,\n ListItemActionsProps\n>(function ListItemActions({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-actions\"\n {...{ [SLOT_ATTR]: \"list-item-actions\" }}\n onPointerDown={(e) => e.stopPropagation()}\n className={mergeClasses(styles.actions, className)}\n {...props}\n >\n {children}\n </span>\n )\n})\n\n// ── ListItemText ───────────────────────────────────────────────────────────\n\nexport type ListItemTextProps = React.ComponentProps<\"span\">\n\nexport const ListItemText = React.forwardRef<\n HTMLSpanElement,\n ListItemTextProps\n>(function ListItemText({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-text\"\n {...{ [SLOT_ATTR]: \"list-item-text\" }}\n className={mergeClasses(styles.text, className)}\n {...props}\n />\n )\n})\n\n// ── ListItemDescription ────────────────────────────────────────────────────\n\nexport type ListItemDescriptionProps = React.ComponentProps<\"span\">\n\nexport const ListItemDescription = React.forwardRef<\n HTMLSpanElement,\n ListItemDescriptionProps\n>(function ListItemDescription({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"list-item-description\"\n {...{ [SLOT_ATTR]: \"list-item-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n />\n )\n})\n\n// ── ListItemBody ───────────────────────────────────────────────────────────\n\nexport type ListItemProps = React.ComponentProps<\"li\"> & {\n /** Stable id used for drag-and-drop. Required when the `List` is `sortable`. */\n value?: string\n /** System status. Tints the row and shows a trailing status icon. */\n status?: ListItemStatus\n /** Injected by `List` — the 0-based position. */\n index?: number\n}\n\ntype ListItemBodyProps = ListItemProps & {\n setNodeRef?: (node: HTMLElement | null) => void\n setActivatorNodeRef?: (node: HTMLElement | null) => void\n style?: React.CSSProperties\n isDragging?: boolean\n /** Insertion indicator edge while another item is dragged over this one. */\n dropEdge?: \"top\" | \"bottom\" | null\n /** dnd-kit listeners — pointer activation goes on the row, keyboard on the handle. */\n listeners?: DraggableSyntheticListeners\n /** dnd-kit a11y attributes for the keyboard drag handle. */\n attributes?: DraggableAttributes\n}\n\nconst ListItemBody = React.forwardRef<HTMLLIElement, ListItemBodyProps>(\n function ListItemBody(\n {\n className,\n value,\n status = \"default\",\n index,\n children,\n setNodeRef,\n setActivatorNodeRef,\n style,\n isDragging,\n dropEdge,\n listeners,\n attributes,\n ...props\n },\n forwardedRef\n ) {\n const styles = useStyles()\n const { striped, showIndex, sortable } = useListContext()\n const interactive = sortable && !isDragging\n\n const childArray = React.Children.toArray(children)\n const actionsSlot = childArray.find(\n (child): child is React.ReactElement =>\n React.isValidElement(child) && child.type === ListItemActions\n )\n const contentChildren = childArray.filter((child) => child !== actionsSlot)\n\n // Combined ref for dnd-kit setNodeRef + caller's forwardedRef\n const handleRef = React.useCallback(\n (node: HTMLLIElement | null) => {\n setNodeRef?.(node)\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node)\n } else if (forwardedRef) {\n ;(\n forwardedRef as React.MutableRefObject<HTMLLIElement | null>\n ).current = node\n }\n },\n [setNodeRef, forwardedRef]\n )\n\n const statusStyle =\n status === \"error\"\n ? styles.statusError\n : status === \"warning\"\n ? styles.statusWarning\n : status === \"success\"\n ? styles.statusSuccess\n : styles.statusDefault\n\n const interactiveStyle = interactive\n ? status === \"error\"\n ? styles.interactiveError\n : status === \"warning\"\n ? styles.interactiveWarning\n : status === \"success\"\n ? styles.interactiveSuccess\n : styles.interactiveDefault\n : undefined\n\n return (\n <li\n ref={handleRef}\n style={style}\n data-slot=\"list-item\"\n {...{ [SLOT_ATTR]: \"list-item\" }}\n data-status={status}\n data-value={value}\n onPointerDown={\n sortable\n ? (listeners?.onPointerDown as\n React.PointerEventHandler<HTMLLIElement> | undefined)\n : undefined\n }\n className={mergeClasses(\n styles.item,\n statusStyle,\n striped && status === \"default\" && styles.stripedEven,\n interactiveStyle,\n sortable && styles.sortableItem,\n isDragging && styles.itemDragging,\n className\n )}\n {...props}\n >\n {dropEdge && (\n <span\n data-slot=\"list-drop-indicator\"\n {...{ [SLOT_ATTR]: \"list-drop-indicator\" }}\n aria-hidden=\"true\"\n className={mergeClasses(\n styles.dropIndicator,\n dropEdge === \"top\"\n ? styles.dropIndicatorTop\n : styles.dropIndicatorBottom\n )}\n />\n )}\n\n {showIndex && (\n <span\n data-slot=\"list-item-index\"\n {...{ [SLOT_ATTR]: \"list-item-index\" }}\n aria-hidden=\"true\"\n className={styles.indexBase}\n >\n {(index ?? 0) + 1}\n </span>\n )}\n\n <span\n data-slot=\"list-item-content\"\n {...{ [SLOT_ATTR]: \"list-item-content\" }}\n className={styles.content}\n >\n {contentChildren}\n </span>\n\n <StatusIcon status={status} />\n\n {actionsSlot}\n\n {sortable && (\n <button\n ref={setActivatorNodeRef}\n type=\"button\"\n aria-label={`Drag to reorder ${value ?? \"item\"}`}\n className={styles.dragHandle}\n {...attributes}\n onKeyDown={\n listeners?.onKeyDown as\n React.KeyboardEventHandler<HTMLButtonElement> | undefined\n }\n >\n <GripVerticalIcon />\n </button>\n )}\n </li>\n )\n }\n)\n\n// ── SortableListItem ───────────────────────────────────────────────────────\n\nconst SortableListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n function SortableListItem(props, ref) {\n const fallbackId = React.useId()\n\n if (process.env.NODE_ENV !== \"production\" && props.value === undefined) {\n console.warn(\n \"List: a sortable `ListItem` is missing a `value`. \" +\n \"Give each sortable item a unique `value` so it can be reordered — \" +\n \"items without one are excluded from `onReorder`.\"\n )\n }\n\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n isDragging,\n isOver,\n activeIndex,\n overIndex,\n } = useSortable({\n id: props.value ?? fallbackId,\n animateLayoutChanges: () => false,\n })\n\n const dropEdge: \"top\" | \"bottom\" | null =\n isOver && !isDragging && activeIndex !== -1\n ? activeIndex < overIndex\n ? \"bottom\"\n : \"top\"\n : null\n\n return (\n <ListItemBody\n ref={ref}\n {...props}\n setNodeRef={setNodeRef}\n setActivatorNodeRef={setActivatorNodeRef}\n isDragging={isDragging}\n dropEdge={dropEdge}\n listeners={listeners}\n attributes={attributes}\n />\n )\n }\n)\n\n// ── ListItem ───────────────────────────────────────────────────────────────\n\nexport const ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n function ListItem(props, ref) {\n const { sortable } = useListContext()\n\n if (sortable) {\n return <SortableListItem ref={ref} {...props} />\n }\n\n return <ListItemBody ref={ref} {...props} />\n }\n)\n\n// ── ListGroup ──────────────────────────────────────────────────────────────\n\ntype ListGroupContextValue = {\n open: boolean\n setOpen: (open: boolean) => void\n contentId: string\n}\n\nconst ListGroupContext = React.createContext<ListGroupContextValue | null>(null)\n\nexport type ListGroupProps = Omit<React.ComponentProps<\"li\">, \"onChange\"> & {\n /** Controlled open state of the collapsible group. */\n open?: boolean\n /** Initial open state when uncontrolled. Default: false */\n defaultOpen?: boolean\n /** Called when the group is expanded or collapsed. */\n onOpenChange?: (open: boolean) => void\n}\n\nexport const ListGroup = React.forwardRef<HTMLLIElement, ListGroupProps>(\n function ListGroup(\n {\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n className,\n children,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const open = openProp ?? uncontrolledOpen\n const contentId = React.useId()\n\n const setOpen = (next: boolean) => {\n if (openProp === undefined) setUncontrolledOpen(next)\n onOpenChange?.(next)\n }\n\n return (\n <ListGroupContext.Provider value={{ open, setOpen, contentId }}>\n <li\n ref={ref}\n data-slot=\"list-group\"\n {...{ [SLOT_ATTR]: \"list-group\" }}\n data-state={open ? \"open\" : \"closed\"}\n className={mergeClasses(styles.group, className)}\n {...props}\n >\n {children}\n </li>\n </ListGroupContext.Provider>\n )\n }\n)\n\n// ── ListGroupLabel ─────────────────────────────────────────────────────────\n\nexport type ListGroupLabelProps = React.ComponentProps<\"button\"> & {\n asListItem?: boolean\n}\n\nexport const ListGroupLabel = React.forwardRef<\n HTMLElement,\n ListGroupLabelProps\n>(function ListGroupLabel({ className, children, ...props }, ref) {\n const styles = useStyles()\n const group = React.useContext(ListGroupContext)\n\n if (group) {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n data-slot=\"list-group-trigger\"\n {...{ [SLOT_ATTR]: \"list-group-trigger\" }}\n aria-expanded={group.open}\n aria-controls={group.contentId}\n onClick={() => group.setOpen(!group.open)}\n className={mergeClasses(\n styles.item,\n styles.interactiveDefault,\n styles.groupTrigger,\n className\n )}\n {...props}\n >\n <ChevronRightIcon\n className={mergeClasses(\n styles.groupChevron,\n group.open && styles.groupChevronOpen\n )}\n />\n <span className={styles.groupTriggerText}>{children}</span>\n </button>\n )\n }\n\n return (\n <li\n ref={ref as React.Ref<HTMLLIElement>}\n data-slot=\"list-group-label\"\n {...{ [SLOT_ATTR]: \"list-group-label\" }}\n className={mergeClasses(styles.standaloneGroupLabel, className)}\n >\n {children}\n </li>\n )\n})\n\n// ── ListGroupContent ───────────────────────────────────────────────────────\n\nexport type ListGroupContentProps = React.ComponentProps<\"ul\">\n\nexport const ListGroupContent = React.forwardRef<\n HTMLUListElement,\n ListGroupContentProps\n>(function ListGroupContent({ className, children, ...props }, ref) {\n const styles = useStyles()\n const group = React.useContext(ListGroupContext)\n\n const items = (\n <ul\n ref={ref}\n data-slot=\"list-group-content\"\n {...{ [SLOT_ATTR]: \"list-group-content\" }}\n className={mergeClasses(styles.list, styles.groupContentList, className)}\n {...props}\n >\n {children}\n </ul>\n )\n\n if (!group) return items\n\n return (\n <div\n id={group.contentId}\n data-state={group.open ? \"open\" : \"closed\"}\n className={mergeClasses(\n styles.collapseWrapper,\n group.open && styles.collapseWrapperOpen\n )}\n >\n <div className={styles.collapseInner}>{items}</div>\n </div>\n )\n})\n"],"names":["GripVerticalIcon","props","jsxs","jsx","WarningIcon","CheckCircleIcon","ChevronRightIcon","useStyles","makeZenithStyles","shorthands","tokens.radiusMd","tokens.grayA12","tokens.listItemMinHeight","tokens.listItemGap","tokens.listItemPaddingY","tokens.listItemPaddingX","tokens.textSm","tokens.leadingSm","tokens.semErrorSoft","tokens.semErrorDefault","tokens.semWarningSoft","tokens.semWarningDefault","tokens.semSuccessSoft","tokens.semSuccessDefault","tokens.grayA2","tokens.semAccentSoft","tokens.semErrorSoftHover","tokens.semWarningSoftHover","tokens.semSuccessSoftHover","tokens.grayA11","tokens.listIndexMinWidth","tokens.listIndexPaddingX","tokens.spacingElement2","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.grayA8","tokens.accentA8","tokens.semAccentSolid","tokens.grayA5","tokens.fontWeightMedium","tokens.grayA10","tokens.spacingGroup2","tokens.spacingElement3","tokens.fontWeightSemibold","tokens.semErrorLight","tokens.semWarningLight","tokens.semSuccessLight","StatusIcon","status","styles","ListContext","React","useListContext","canonicalDomDensity","density","List","className","striped","showIndex","sortable","onReorder","children","ref","domDensity","items","indexedItems","child","index","ListItem","sortableItems","values","v","activeId","setActiveId","activeIndex","activeItem","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","handleDragStart","event","handleDragEnd","active","over","oldIndex","newIndex","arrayMove","listElement","SLOT_ATTR","mergeClasses","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","DragOverlay","ListItemBody","ListItemActions","e","ListItemText","ListItemDescription","value","setNodeRef","setActivatorNodeRef","style","isDragging","dropEdge","listeners","attributes","forwardedRef","interactive","childArray","actionsSlot","contentChildren","handleRef","node","statusStyle","interactiveStyle","SortableListItem","fallbackId","isOver","overIndex","useSortable","ListGroupContext","ListGroup","openProp","defaultOpen","onOpenChange","uncontrolledOpen","setUncontrolledOpen","open","contentId","setOpen","next","ListGroupLabel","group","ListGroupContent"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pill.js","sources":["../../../src/components/pill/pill.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { NS, PALETTE_NS } from \"../../tokens\"\nimport { isCoreFamily } from \"../../tokens/install\"\nimport { useZenithPaletteTokensFor } from \"../../tokens/use-palette-tokens\"\nimport * as tokens from \"../../tokens\"\nimport { ClearButton } from \"../../lib/clear-button\"\n\n/**\n * Pill — same colour-matrix collapse as Badge, plus a hover background.\n *\n * v1 enumerates 19 colours x 3 styles as 57 `compoundVariants`, each a distinct class string\n * built by interpolation (`volt-bg-${color}-soft`), which Tailwind's scanner cannot see and\n * `safelist.css` exists to force into existence. The hover state made that 57 more per-colour\n * rules. Here the colour is a VALUE, not part of a class name: the four atoms below read four\n * custom properties, the component sets those inline from the `color` prop, and a single `:hover`\n * atom reads the hover background. Total rules: one small set per style variant — 9 colours' worth\n * of rules cover all 19 x 3 combinations.\n */\n\nconst COLORS = [\n \"blue\",\n \"sky\",\n \"mint\",\n \"lime\",\n \"green\",\n \"teal\",\n \"cyan\",\n \"indigo\",\n \"purple\",\n \"pink\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"bronze\",\n \"gray\",\n \"accent\",\n \"warning\",\n \"success\",\n \"error\",\n] as const\n\nexport type PillColor = (typeof COLORS)[number]\nexport type PillVariant = \"soft\" | \"solid\" | \"surface\"\n\n/** The four slots a variant can paint. Set inline; read by the atoms below. */\nconst BG = \"--zenith-pill-bg\"\nconst FG = \"--zenith-pill-fg\"\nconst BD = \"--zenith-pill-bd\"\nconst HOV = \"--zenith-pill-hov\"\n\n/**\n * The namespace fix — same shape as Badge's. Pill has no `neutral` alias of its own (its\n * gray-when-disabled resolution already happens in the component body, before `VARIANT_SLOTS` is\n * called — `color` here is always the already-resolved family), so no extra resolve step is needed\n * before classifying it.\n */\nconst namespaceFor = (family: string): string =>\n isCoreFamily(family) ? NS : PALETTE_NS\n\nconst semantic = (color: PillColor, slot: string): string =>\n `var(--zenith-${namespaceFor(color)}-sem-${color}-${slot})`\nconst primitive = (color: PillColor, step: string): string =>\n `var(--zenith-${namespaceFor(color)}-${color}-${step})`\n\n/**\n * Which token each variant pulls into each slot. This replaces the 57-entry compound matrix: it is\n * data about three variants, not about 57 combinations. Text uses the `light` semantic slot, which\n * is Pill's one departure from Badge (Badge uses `default`).\n */\nconst VARIANT_SLOTS: Record<\n PillVariant,\n (color: PillColor) => Record<string, string>\n> = {\n soft: (c) => ({\n [BG]: semantic(c, \"soft\"),\n [FG]: semantic(c, \"light\"),\n [BD]: \"transparent\",\n [HOV]: semantic(c, \"soft-hover\"),\n }),\n solid: (c) => ({\n [BG]: semantic(c, \"solid\"),\n [FG]: semantic(c, \"contrast\"),\n [BD]: \"transparent\",\n [HOV]: semantic(c, \"solid-hover\"),\n }),\n surface: (c) => ({\n [BG]: semantic(c, \"surface\"),\n [FG]: semantic(c, \"light\"),\n [BD]: primitive(c, \"a6\"),\n [HOV]: semantic(c, \"surface-hover\"),\n }),\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n display: \"inline-flex\",\n alignItems: \"center\",\n // v1 `h-6` — a fixed height, not a minimum.\n height: \"1.5rem\",\n gap: tokens.spacingElement1,\n whiteSpace: \"nowrap\",\n flexShrink: 0,\n overflow: \"hidden\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightBold,\n paddingInline: tokens.spacingElement2,\n borderRadius: tokens.radiusMd,\n transitionProperty: \"color, box-shadow, background-color\",\n // NEVER write a CSS shorthand in a Griffel style object — see Badge. One atom reads one\n // custom property; `border` and a later `borderColor` would both survive.\n ...shorthands.border(\"1px\", \"solid\", `var(${BD})`),\n // The whole point: one rule each, colour supplied per instance.\n backgroundColor: `var(${BG})`,\n color: `var(${FG})`,\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n // v1 `[&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:pointer-events-none`.\n \"& > svg\": {\n // Literals, not tokens.spacingGroup2: that happens to be 1rem, but a spacing token has no\n // business describing a dimension. The scale has no size family — noted rather than faked.\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n pointerEvents: \"none\",\n },\n },\n interactive: {\n cursor: \"pointer\",\n // The one hover rule. It reads the fourth custom property, line-picked per colour and variant\n // by VARIANT_SLOTS — never per-colour hover rules.\n \":hover\": { backgroundColor: `var(${HOV})` },\n },\n hasRemove: {\n // v1's `pr-1` when a clear button is present.\n paddingRight: tokens.spacingElement1,\n },\n disabled: {\n pointerEvents: \"none\",\n },\n removeSize: {\n // v1's `size-4` on the composed ClearButton.\n width: tokens.spacingGroup2,\n height: tokens.spacingGroup2,\n },\n})\n\nexport type PillProps = Omit<React.ComponentProps<\"span\">, \"color\"> & {\n color?: PillColor\n /**\n * Named `variant`, not `style`. v1 called this `style`, which shadows the HTML `style` attribute.\n * Retrocompat is not a requirement here, so the collision is fixed rather than inherited.\n */\n variant?: PillVariant\n disabled?: boolean\n onRemove?: (e: React.MouseEvent<HTMLButtonElement>) => void\n}\n\nexport const Pill = React.forwardRef<HTMLSpanElement, PillProps>(function Pill(\n {\n className,\n color = \"accent\",\n variant = \"soft\",\n disabled,\n onRemove,\n onClick,\n children,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n\n // v1 resolves to gray when disabled and only makes the pill interactive when it has an onClick.\n const resolvedColor: PillColor = disabled ? \"gray\" : color\n\n // A decorative family can still arrive from an expression the build cannot see, so this has to\n // be re-evaluated every commit (WP2B2 — the hook closes over this render's resolved value) — but\n // it is the RESOLVED family that decides, and the five core families Pill offers (accent, gray,\n // warning, success, error) need no palette sheet at all.\n useZenithPaletteTokensFor(resolvedColor)\n const interactive = !!onClick && !disabled\n\n // The hover slot is only meaningful while interactive — v1 attaches its hover background class\n // (`interactive && hoverStyleClasses[...]`) only then, so drop it from the inline properties\n // otherwise. Setting it unconditionally would be harmless but would claim a hover state that\n // cannot be reached.\n const slot = VARIANT_SLOTS[variant](resolvedColor)\n if (!interactive) delete slot[HOV]\n\n return (\n <span\n ref={ref}\n data-slot=\"pill\"\n {...{ [SLOT_ATTR]: \"pill\" }}\n data-disabled={disabled || undefined}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n onClick?.(e as unknown as React.MouseEvent<HTMLSpanElement>)\n }\n }\n : undefined\n }\n className={mergeClasses(\n styles.root,\n interactive && styles.interactive,\n onRemove && styles.hasRemove,\n disabled && styles.disabled,\n className\n )}\n style={{ ...slot } as React.CSSProperties}\n {...props}\n >\n {children}\n {onRemove && (\n // v1 composes the shared ClearButton here — hover, focus ring and the size-3 CloseIcon\n // fallback all live in the lib, not inline.\n <ClearButton\n className={styles.removeSize}\n onClick={onRemove}\n disabled={disabled}\n />\n )}\n </span>\n )\n})\n\nexport { COLORS as PILL_COLORS }\n"],"names":["COLORS","BG","FG","BD","HOV","namespaceFor","family","isCoreFamily","NS","PALETTE_NS","semantic","color","slot","primitive","step","VARIANT_SLOTS","c","useStyles","makeZenithStyles","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.fontWeightBold","tokens.spacingElement2","tokens.radiusMd","shorthands","tokens.accentA8","tokens.spacingGroup2","Pill","React","className","variant","disabled","onRemove","onClick","children","props","ref","styles","resolvedColor","useZenithPaletteTokensFor","interactive","jsxs","SLOT_ATTR","e","mergeClasses","jsx","ClearButton"],"mappings":"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"}
1
+ {"version":3,"file":"pill.js","sources":["../../../src/components/pill/pill.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { NS, PALETTE_NS } from \"../../tokens\"\nimport { isCoreFamily } from \"../../tokens/install\"\nimport { useZenithPaletteTokensFor } from \"../../tokens/use-palette-tokens\"\nimport * as tokens from \"../../tokens\"\nimport { ClearButton } from \"../../lib/clear-button\"\n\n/** Pill — same colour-matrix collapse as Badge, plus a hover background. */\n\nconst COLORS = [\n \"blue\",\n \"sky\",\n \"mint\",\n \"lime\",\n \"green\",\n \"teal\",\n \"cyan\",\n \"indigo\",\n \"purple\",\n \"pink\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"bronze\",\n \"gray\",\n \"accent\",\n \"warning\",\n \"success\",\n \"error\",\n] as const\n\nexport type PillColor = (typeof COLORS)[number]\nexport type PillVariant = \"soft\" | \"solid\" | \"surface\"\n\n/** The four slots a variant can paint. Set inline; read by the atoms below. */\nconst BG = \"--zenith-pill-bg\"\nconst FG = \"--zenith-pill-fg\"\nconst BD = \"--zenith-pill-bd\"\nconst HOV = \"--zenith-pill-hov\"\n\n/**\n * The namespace fix — same shape as Badge's. Pill has no `neutral` alias of its own (its\n * gray-when-disabled resolution already happens in the component body, before `VARIANT_SLOTS` is\n * called — `color` here is always the already-resolved family), so no extra resolve step is needed\n * before classifying it.\n */\nconst namespaceFor = (family: string): string =>\n isCoreFamily(family) ? NS : PALETTE_NS\n\nconst semantic = (color: PillColor, slot: string): string =>\n `var(--zenith-${namespaceFor(color)}-sem-${color}-${slot})`\nconst primitive = (color: PillColor, step: string): string =>\n `var(--zenith-${namespaceFor(color)}-${color}-${step})`\n\n/**\n * Which token each variant pulls into each slot. This replaces the 57-entry compound matrix: it is\n * data about three variants, not about 57 combinations. Text uses the `light` semantic slot, which\n * is Pill's one departure from Badge (Badge uses `default`).\n */\nconst VARIANT_SLOTS: Record<\n PillVariant,\n (color: PillColor) => Record<string, string>\n> = {\n soft: (c) => ({\n [BG]: semantic(c, \"soft\"),\n [FG]: semantic(c, \"light\"),\n [BD]: \"transparent\",\n [HOV]: semantic(c, \"soft-hover\"),\n }),\n solid: (c) => ({\n [BG]: semantic(c, \"solid\"),\n [FG]: semantic(c, \"contrast\"),\n [BD]: \"transparent\",\n [HOV]: semantic(c, \"solid-hover\"),\n }),\n surface: (c) => ({\n [BG]: semantic(c, \"surface\"),\n [FG]: semantic(c, \"light\"),\n [BD]: primitive(c, \"a6\"),\n [HOV]: semantic(c, \"surface-hover\"),\n }),\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n display: \"inline-flex\",\n alignItems: \"center\",\n // v1 `h-6` — a fixed height, not a minimum.\n height: \"1.5rem\",\n gap: tokens.spacingElement1,\n whiteSpace: \"nowrap\",\n flexShrink: 0,\n overflow: \"hidden\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightBold,\n paddingInline: tokens.spacingElement2,\n borderRadius: tokens.radiusMd,\n transitionProperty: \"color, box-shadow, background-color\",\n // NEVER write a CSS shorthand in a Griffel style object — see Badge. One atom reads one\n // custom property; `border` and a later `borderColor` would both survive.\n ...shorthands.border(\"1px\", \"solid\", `var(${BD})`),\n // The whole point: one rule each, colour supplied per instance.\n backgroundColor: `var(${BG})`,\n color: `var(${FG})`,\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n // v1 `[&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:pointer-events-none`.\n \"& > svg\": {\n // Literals, not tokens.spacingGroup2: that happens to be 1rem, but a spacing token has no\n // business describing a dimension. The scale has no size family — noted rather than faked.\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n pointerEvents: \"none\",\n },\n },\n interactive: {\n cursor: \"pointer\",\n // The one hover rule. It reads the fourth custom property, line-picked per colour and variant\n // by VARIANT_SLOTS — never per-colour hover rules.\n \":hover\": { backgroundColor: `var(${HOV})` },\n },\n hasRemove: {\n // v1's `pr-1` when a clear button is present.\n paddingRight: tokens.spacingElement1,\n },\n disabled: {\n pointerEvents: \"none\",\n },\n removeSize: {\n // v1's `size-4` on the composed ClearButton.\n width: tokens.spacingGroup2,\n height: tokens.spacingGroup2,\n },\n})\n\nexport type PillProps = Omit<React.ComponentProps<\"span\">, \"color\"> & {\n color?: PillColor\n /**\n * Named `variant`, not `style`. v1 called this `style`, which shadows the HTML `style` attribute.\n * Retrocompat is not a requirement here, so the collision is fixed rather than inherited.\n */\n variant?: PillVariant\n disabled?: boolean\n onRemove?: (e: React.MouseEvent<HTMLButtonElement>) => void\n}\n\nexport const Pill = React.forwardRef<HTMLSpanElement, PillProps>(function Pill(\n {\n className,\n color = \"accent\",\n variant = \"soft\",\n disabled,\n onRemove,\n onClick,\n children,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n\n // v1 resolves to gray when disabled and only makes the pill interactive when it has an onClick.\n const resolvedColor: PillColor = disabled ? \"gray\" : color\n\n // A decorative family can still arrive from an expression the build cannot see, so this has to\n // be re-evaluated every commit (WP2B2 — the hook closes over this render's resolved value) — but\n // it is the RESOLVED family that decides, and the five core families Pill offers (accent, gray,\n // warning, success, error) need no palette sheet at all.\n useZenithPaletteTokensFor(resolvedColor)\n const interactive = !!onClick && !disabled\n\n // The hover slot is only meaningful while interactive — v1 attaches its hover background class\n // (`interactive && hoverStyleClasses[...]`) only then, so drop it from the inline properties\n // otherwise. Setting it unconditionally would be harmless but would claim a hover state that\n // cannot be reached.\n const slot = VARIANT_SLOTS[variant](resolvedColor)\n if (!interactive) delete slot[HOV]\n\n return (\n <span\n ref={ref}\n data-slot=\"pill\"\n {...{ [SLOT_ATTR]: \"pill\" }}\n data-disabled={disabled || undefined}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n onClick?.(e as unknown as React.MouseEvent<HTMLSpanElement>)\n }\n }\n : undefined\n }\n className={mergeClasses(\n styles.root,\n interactive && styles.interactive,\n onRemove && styles.hasRemove,\n disabled && styles.disabled,\n className\n )}\n style={{ ...slot } as React.CSSProperties}\n {...props}\n >\n {children}\n {onRemove && (\n // v1 composes the shared ClearButton here — hover, focus ring and the size-3 CloseIcon\n // fallback all live in the lib, not inline.\n <ClearButton\n className={styles.removeSize}\n onClick={onRemove}\n disabled={disabled}\n />\n )}\n </span>\n )\n})\n\nexport { COLORS as PILL_COLORS }\n"],"names":["COLORS","BG","FG","BD","HOV","namespaceFor","family","isCoreFamily","NS","PALETTE_NS","semantic","color","slot","primitive","step","VARIANT_SLOTS","c","useStyles","makeZenithStyles","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.fontWeightBold","tokens.spacingElement2","tokens.radiusMd","shorthands","tokens.accentA8","tokens.spacingGroup2","Pill","React","className","variant","disabled","onRemove","onClick","children","props","ref","styles","resolvedColor","useZenithPaletteTokensFor","interactive","jsxs","SLOT_ATTR","e","mergeClasses","jsx","ClearButton"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"separator.js","sources":["../../../src/components/separator/separator.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * Separator — v1's `@radix-ui/react-separator` ported to Griffel atoms with no Radix dependency.\n *\n * A separator needs no behaviour beyond correct semantics, so it is a plain `<div>`. The two\n * orientation variants are separate style slots selected in JS from the `orientation` prop — we\n * deliberately do NOT style off a `data-[orientation=...]` attribute, like v1 does. v1 keyed its\n * sizing on `data-[orientation=horizontal]`; doing that here would either key on `data-slot`-style\n * selectors (whose values are shared with v1, so the rule also matches v1-rendered DOM) or on the\n * custom-property slot marker. Two slots in the style object is simpler and cheaper. We still emit\n * `data-orientation` as a plain attribute — for diagnostics and for consumers — we just never style\n * off it.\n *\n * The accessibility surface is the whole point of the component, so it gets the full treatment:\n * - `decorative` (default `true`): the divider is purely presentational, so it is hidden from\n * assistive technology with `aria-hidden=\"true\"` and carries no `role`.\n * - `decorative={false}`: a meaningful separator, so it gets `role=\"separator\"` and\n * `aria-orientation` matching the `orientation` prop.\n */\n\nexport type SeparatorOrientation = \"horizontal\" | \"vertical\"\n\nconst useStyles = makeZenithStyles({\n horizontal: {\n backgroundColor: tokens.grayA5,\n flexShrink: 0,\n height: \"1px\",\n width: \"100%\",\n },\n vertical: {\n backgroundColor: tokens.grayA5,\n flexShrink: 0,\n height: \"100%\",\n width: \"1px\",\n },\n})\n\nexport type SeparatorProps = React.ComponentProps<\"div\"> & {\n orientation?: SeparatorOrientation\n /**\n * When `true` the separator is purely decorative and is hidden from assistive technology\n * (`aria-hidden=\"true\"`, no `role`). When `false` it is a meaningful separator and gets\n * `role=\"separator\"` plus `aria-orientation`.\n */\n decorative?: boolean\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n function Separator(\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) {\n const styles = useStyles()\n\n const meaningful = !decorative\n\n return (\n <div\n ref={ref}\n data-slot=\"separator\"\n {...{ [SLOT_ATTR]: \"separator\" }}\n data-orientation={orientation}\n role={meaningful ? \"separator\" : undefined}\n aria-orientation={meaningful ? orientation : undefined}\n aria-hidden={decorative ? \"true\" : undefined}\n className={mergeClasses(styles[orientation], className)}\n {...props}\n />\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","tokens.grayA5","Separator","React","className","orientation","decorative","props","ref","styles","meaningful","jsx","SLOT_ATTR","mergeClasses"],"mappings":";;;;;AA6BA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,YAAY;AAAA,IACV,iBAAiBC;AAAAA,IACjB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAAA,EAET,UAAU;AAAA,IACR,iBAAiBA;AAAAA,IACjB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAEX,CAAC,GAYYC,IAAYC,EAAM;AAAA,EAC7B,SACE,EAAE,WAAAC,GAAW,aAAAC,IAAc,cAAc,YAAAC,IAAa,IAAM,GAAGC,EAAA,GAC/DC,GACA;AACA,UAAMC,IAASV,EAAA,GAETW,IAAa,CAACJ;AAEpB,WACE,gBAAAK;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAH;AAAA,QACA,aAAU;AAAA,QACJ,CAACI,CAAS,GAAG;AAAA,QACnB,oBAAkBP;AAAA,QAClB,MAAMK,IAAa,cAAc;AAAA,QACjC,oBAAkBA,IAAaL,IAAc;AAAA,QAC7C,eAAaC,IAAa,SAAS;AAAA,QACnC,WAAWO,EAAaJ,EAAOJ,CAAW,GAAGD,CAAS;AAAA,QACrD,GAAGG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;"}
1
+ {"version":3,"file":"separator.js","sources":["../../../src/components/separator/separator.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * Separator — v1's `@radix-ui/react-separator` ported to Griffel atoms with no Radix dependency. A\n * separator needs no behaviour beyond correct semantics, so it is a plain `<div>`.\n */\n\nexport type SeparatorOrientation = \"horizontal\" | \"vertical\"\n\nconst useStyles = makeZenithStyles({\n horizontal: {\n backgroundColor: tokens.grayA5,\n flexShrink: 0,\n height: \"1px\",\n width: \"100%\",\n },\n vertical: {\n backgroundColor: tokens.grayA5,\n flexShrink: 0,\n height: \"100%\",\n width: \"1px\",\n },\n})\n\nexport type SeparatorProps = React.ComponentProps<\"div\"> & {\n orientation?: SeparatorOrientation\n /**\n * When `true` the separator is purely decorative and is hidden from assistive technology\n * (`aria-hidden=\"true\"`, no `role`). When `false` it is a meaningful separator and gets\n * `role=\"separator\"` plus `aria-orientation`.\n */\n decorative?: boolean\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n function Separator(\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) {\n const styles = useStyles()\n\n const meaningful = !decorative\n\n return (\n <div\n ref={ref}\n data-slot=\"separator\"\n {...{ [SLOT_ATTR]: \"separator\" }}\n data-orientation={orientation}\n role={meaningful ? \"separator\" : undefined}\n aria-orientation={meaningful ? orientation : undefined}\n aria-hidden={decorative ? \"true\" : undefined}\n className={mergeClasses(styles[orientation], className)}\n {...props}\n />\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","tokens.grayA5","Separator","React","className","orientation","decorative","props","ref","styles","meaningful","jsx","SLOT_ATTR","mergeClasses"],"mappings":";;;;;AAeA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,YAAY;AAAA,IACV,iBAAiBC;AAAAA,IACjB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAAA,EAET,UAAU;AAAA,IACR,iBAAiBA;AAAAA,IACjB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAEX,CAAC,GAYYC,IAAYC,EAAM;AAAA,EAC7B,SACE,EAAE,WAAAC,GAAW,aAAAC,IAAc,cAAc,YAAAC,IAAa,IAAM,GAAGC,EAAA,GAC/DC,GACA;AACA,UAAMC,IAASV,EAAA,GAETW,IAAa,CAACJ;AAEpB,WACE,gBAAAK;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAH;AAAA,QACA,aAAU;AAAA,QACJ,CAACI,CAAS,GAAG;AAAA,QACnB,oBAAkBP;AAAA,QAClB,MAAMK,IAAa,cAAc;AAAA,QACjC,oBAAkBA,IAAaL,IAAc;AAAA,QAC7C,eAAaC,IAAa,SAAS;AAAA,QACnC,WAAWO,EAAaJ,EAAOJ,CAAW,GAAGD,CAAS;AAAA,QACrD,GAAGG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.js","sources":["../../../src/components/skeleton/skeleton.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\nimport { useZenithPaletteTokensWhen } from \"../../tokens/use-palette-tokens\"\n\n/**\n * Skeleton — v1's loading placeholder ported to Griffel atoms.\n *\n * Two variants, `default` and `ai`. `default` is a gray block that pulses; `ai` is a gray field\n * that renders three decorative colour spots drifting behind the content. The spots are ported from\n * v1's global `skeleton-ai-spot-*` classes in `styles/utilities.css`, including their exact\n * gradients, durations (10s / 12s / 14s) and easing.\n *\n * The keyframes are the object form, so Griffel hashes each one from its content — a hand-authored\n * global `@keyframes` would collide across two co-resident copies of this package. The pulse is a\n * single three-stop animation; each spot carries its own.\n *\n * The spots are `purple-a4`, `pink-a4` and `indigo-a4`, none of which is a core token family\n * (accent / gray / error / warning / success / info ship in the core sheet; everything else lives\n * in the palette sheet, which is not loaded by default). `ai` therefore calls\n * `ensurePaletteTokens()` — CONVENTIONS rule 3. There is no `color` prop, so no inline custom\n * properties: the spot colours are constant and live inside the style objects.\n */\n\nexport type SkeletonVariant = \"default\" | \"ai\"\n\nconst useStyles = makeZenithStyles({\n default: {\n backgroundColor: tokens.gray4,\n ...shorthands.borderRadius(tokens.radiusMd),\n animationName: {\n \"0%,100%\": { opacity: 1 },\n \"50%\": { opacity: 0.5 },\n },\n animationDuration: \"2s\",\n animationTimingFunction: \"cubic-bezier(0.4,0,0.6,1)\",\n animationIterationCount: \"infinite\",\n },\n ai: {\n backgroundColor: tokens.gray3,\n ...shorthands.borderRadius(tokens.radiusMd),\n position: \"relative\",\n ...shorthands.overflow(\"hidden\"),\n },\n spot: {\n position: \"absolute\",\n inset: \"-50%\",\n ...shorthands.borderRadius(\"50%\"),\n opacity: 0.6,\n filter: \"blur(18px)\",\n pointerEvents: \"none\",\n },\n spot1: {\n backgroundImage: `radial-gradient(circle, ${tokens.purpleA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(-20%, 0%) scale(1)\" },\n \"33%\": { transform: \"translate(40%, -25%) scale(1.2)\" },\n \"66%\": { transform: \"translate(-10%, 30%) scale(0.9)\" },\n },\n animationDuration: \"10s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n spot2: {\n backgroundImage: `radial-gradient(circle, ${tokens.pinkA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(20%, 0%) scale(1.1)\" },\n \"33%\": { transform: \"translate(-35%, 25%) scale(0.9)\" },\n \"66%\": { transform: \"translate(30%, -20%) scale(1.3)\" },\n },\n animationDuration: \"12s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n spot3: {\n backgroundImage: `radial-gradient(circle, ${tokens.indigoA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(0%, 20%) scale(1)\" },\n \"33%\": { transform: \"translate(25%, -30%) scale(1.2)\" },\n \"66%\": { transform: \"translate(-30%, 10%) scale(0.8)\" },\n },\n animationDuration: \"14s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n})\n\nexport type SkeletonProps = React.ComponentProps<\"div\"> & {\n /**\n * `default` is the ordinary loading pulse.\n *\n * `ai` is the placeholder for content being generated, drawn with three\n * drifting colour spots. It is not merely decorative: its spot colours\n * (purple, pink, indigo) are palette families rather than core ones, so `ai`\n * calls `ensurePaletteTokens()` and its colours arrive on a later frame than\n * the rest of the surface.\n *\n * @default \"default\"\n */\n variant?: SkeletonVariant\n}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n function Skeleton(\n { variant = \"default\", className, children, ...props },\n ref\n ) {\n // The decorative families live in the palette sheet, which is not installed by default\n // (CONVENTIONS rule 3). Only the `ai` variant paints them — purple-a4, pink-a4, indigo-a4.\n // The hook is called unconditionally every render (WP2B2 — hook order); the `variant === \"ai\"`\n // branch lives inside its commit-phase effect, not around this call, so the default variant\n // still installs nothing it never reads.\n useZenithPaletteTokensWhen(variant === \"ai\")\n\n const styles = useStyles()\n\n if (variant === \"ai\") {\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n {...{ [SLOT_ATTR]: \"skeleton\" }}\n className={mergeClasses(styles.ai, className)}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot1)}\n />\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot2)}\n />\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot3)}\n />\n {children}\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n {...{ [SLOT_ATTR]: \"skeleton\" }}\n className={mergeClasses(styles.default, className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","tokens.gray4","shorthands","tokens.radiusMd","tokens.gray3","tokens.purpleA4","tokens.pinkA4","tokens.indigoA4","Skeleton","React","variant","className","children","props","ref","useZenithPaletteTokensWhen","styles","jsxs","SLOT_ATTR","mergeClasses","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"skeleton.js","sources":["../../../src/components/skeleton/skeleton.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\nimport { useZenithPaletteTokensWhen } from \"../../tokens/use-palette-tokens\"\n\n/**\n * Skeleton — v1's loading placeholder ported to Griffel atoms. Two variants, `default` and `ai`.\n */\n\nexport type SkeletonVariant = \"default\" | \"ai\"\n\nconst useStyles = makeZenithStyles({\n default: {\n backgroundColor: tokens.gray4,\n ...shorthands.borderRadius(tokens.radiusMd),\n animationName: {\n \"0%,100%\": { opacity: 1 },\n \"50%\": { opacity: 0.5 },\n },\n animationDuration: \"2s\",\n animationTimingFunction: \"cubic-bezier(0.4,0,0.6,1)\",\n animationIterationCount: \"infinite\",\n },\n ai: {\n backgroundColor: tokens.gray3,\n ...shorthands.borderRadius(tokens.radiusMd),\n position: \"relative\",\n ...shorthands.overflow(\"hidden\"),\n },\n spot: {\n position: \"absolute\",\n inset: \"-50%\",\n ...shorthands.borderRadius(\"50%\"),\n opacity: 0.6,\n filter: \"blur(18px)\",\n pointerEvents: \"none\",\n },\n spot1: {\n backgroundImage: `radial-gradient(circle, ${tokens.purpleA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(-20%, 0%) scale(1)\" },\n \"33%\": { transform: \"translate(40%, -25%) scale(1.2)\" },\n \"66%\": { transform: \"translate(-10%, 30%) scale(0.9)\" },\n },\n animationDuration: \"10s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n spot2: {\n backgroundImage: `radial-gradient(circle, ${tokens.pinkA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(20%, 0%) scale(1.1)\" },\n \"33%\": { transform: \"translate(-35%, 25%) scale(0.9)\" },\n \"66%\": { transform: \"translate(30%, -20%) scale(1.3)\" },\n },\n animationDuration: \"12s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n spot3: {\n backgroundImage: `radial-gradient(circle, ${tokens.indigoA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(0%, 20%) scale(1)\" },\n \"33%\": { transform: \"translate(25%, -30%) scale(1.2)\" },\n \"66%\": { transform: \"translate(-30%, 10%) scale(0.8)\" },\n },\n animationDuration: \"14s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n})\n\nexport type SkeletonProps = React.ComponentProps<\"div\"> & {\n /**\n * `default` is the ordinary loading pulse. `ai` is the placeholder for content being generated,\n * drawn with three drifting colour spots.\n */\n variant?: SkeletonVariant\n}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n function Skeleton(\n { variant = \"default\", className, children, ...props },\n ref\n ) {\n // The decorative families live in the palette sheet, which is not installed by default\n // (CONVENTIONS rule 3). Only the `ai` variant paints them — purple-a4, pink-a4, indigo-a4.\n // The hook is called unconditionally every render (WP2B2 — hook order); the `variant === \"ai\"`\n // branch lives inside its commit-phase effect, not around this call, so the default variant\n // still installs nothing it never reads.\n useZenithPaletteTokensWhen(variant === \"ai\")\n\n const styles = useStyles()\n\n if (variant === \"ai\") {\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n {...{ [SLOT_ATTR]: \"skeleton\" }}\n className={mergeClasses(styles.ai, className)}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot1)}\n />\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot2)}\n />\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot3)}\n />\n {children}\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n {...{ [SLOT_ATTR]: \"skeleton\" }}\n className={mergeClasses(styles.default, className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","tokens.gray4","shorthands","tokens.radiusMd","tokens.gray3","tokens.purpleA4","tokens.pinkA4","tokens.indigoA4","Skeleton","React","variant","className","children","props","ref","useZenithPaletteTokensWhen","styles","jsxs","SLOT_ATTR","mergeClasses","jsx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"compose-as-child.js","sources":["../../../src/components/slot/compose-as-child.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1\"\nimport { Slot } from \"@radix-ui/react-slot\"\n\n/**\n * The Radix Slot is still responsible for its established prop contract: it composes event\n * handlers and refs, and gives an existing child's inline style precedence. Its built-in className\n * merge is string concatenation, however, which cannot collapse competing Griffel atomic groups.\n * Merge that one prop before handing the real child to Slot so a composing Surface can replace a\n * Card's visual atoms without relying on stylesheet insertion order.\n *\n * This helper deliberately does not add diagnostic markers. An asChild composer decorates the\n * child's actual element, so the child remains a Card (or a plain native element), not a Surface.\n *\n * @internal composition plumbing for `asChild`, not a component. Its only callers are Surface and\n * AppearanceBoundary; it renders no element of its own and has no appearance to document, so\n * exporting it would add a name to the public API that no consumer has a use for.\n */\nexport type ComposeAsChildProps = Omit<\n React.ComponentPropsWithoutRef<typeof Slot>,\n \"children\" | \"className\"\n> & {\n children: React.ReactElement\n className?: string\n /** Values which must win over raw child props (appearance's canonical DOM pair). */\n forceProps?: Record<string, unknown>\n}\n\nexport const ComposeAsChild = React.forwardRef<\n HTMLElement,\n ComposeAsChildProps\n>(function ComposeAsChild(\n { children, className, forceProps, ...slotProps },\n forwardedRef\n) {\n const child = React.Children.only(children)\n\n if (child.type === React.Fragment)\n throw new Error(\"asChild requires one real element, not a React.Fragment\")\n\n const classedChild = child as React.ReactElement<{ className?: string }>\n const childWithMergedClasses = React.cloneElement(classedChild, {\n ...forceProps,\n // Child classes first makes the composer's role recipe authoritative; its caller class is\n // appended by the composer and can then deliberately override the recipe. Inline child\n // styles still win through Radix Slot's normal style merge.\n className: mergeClasses(classedChild.props.className, className),\n })\n\n return (\n <Slot {...slotProps} ref={forwardedRef}>\n {childWithMergedClasses}\n </Slot>\n )\n})\n"],"names":["ComposeAsChild","React","children","className","forceProps","slotProps","forwardedRef","child","classedChild","childWithMergedClasses","mergeClasses","Slot"],"mappings":";;;;AA6BO,MAAMA,IAAiBC,EAAM,WAGlC,SACA,EAAE,UAAAC,GAAU,WAAAC,GAAW,YAAAC,GAAY,GAAGC,EAAA,GACtCC,GACA;AACA,QAAMC,IAAQN,EAAM,SAAS,KAAKC,CAAQ;AAE1C,MAAIK,EAAM,SAASN,EAAM;AACvB,UAAM,IAAI,MAAM,yDAAyD;AAE3E,QAAMO,IAAeD,GACfE,IAAyBR,EAAM,aAAaO,GAAc;AAAA,IAC9D,GAAGJ;AAAA;AAAA;AAAA;AAAA,IAIH,WAAWM,EAAaF,EAAa,MAAM,WAAWL,CAAS;AAAA,EAAA,CAChE;AAED,2BACGQ,GAAA,EAAM,GAAGN,GAAW,KAAKC,GACvB,UAAAG,GACH;AAEJ,CAAC;"}
1
+ {"version":3,"file":"compose-as-child.js","sources":["../../../src/components/slot/compose-as-child.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1\"\nimport { Slot } from \"@radix-ui/react-slot\"\n\n/**\n * The Radix Slot is still responsible for its established prop contract: it composes event\n * handlers and refs, and gives an existing child's inline style precedence. Its built-in className\n * merge is string concatenation, however, which cannot collapse competing Griffel atomic groups.\n * @internal composition plumbing for `asChild`, not a component. Its only callers are Surface and\n */\nexport type ComposeAsChildProps = Omit<\n React.ComponentPropsWithoutRef<typeof Slot>,\n \"children\" | \"className\"\n> & {\n children: React.ReactElement\n className?: string\n /** Values which must win over raw child props (appearance's canonical DOM pair). */\n forceProps?: Record<string, unknown>\n}\n\nexport const ComposeAsChild = React.forwardRef<\n HTMLElement,\n ComposeAsChildProps\n>(function ComposeAsChild(\n { children, className, forceProps, ...slotProps },\n forwardedRef\n) {\n const child = React.Children.only(children)\n\n if (child.type === React.Fragment)\n throw new Error(\"asChild requires one real element, not a React.Fragment\")\n\n const classedChild = child as React.ReactElement<{ className?: string }>\n const childWithMergedClasses = React.cloneElement(classedChild, {\n ...forceProps,\n // Child classes first makes the composer's role recipe authoritative; its caller class is\n // appended by the composer and can then deliberately override the recipe. Inline child\n // styles still win through Radix Slot's normal style merge.\n className: mergeClasses(classedChild.props.className, className),\n })\n\n return (\n <Slot {...slotProps} ref={forwardedRef}>\n {childWithMergedClasses}\n </Slot>\n )\n})\n"],"names":["ComposeAsChild","React","children","className","forceProps","slotProps","forwardedRef","child","classedChild","childWithMergedClasses","mergeClasses","Slot"],"mappings":";;;;AAqBO,MAAMA,IAAiBC,EAAM,WAGlC,SACA,EAAE,UAAAC,GAAU,WAAAC,GAAW,YAAAC,GAAY,GAAGC,EAAA,GACtCC,GACA;AACA,QAAMC,IAAQN,EAAM,SAAS,KAAKC,CAAQ;AAE1C,MAAIK,EAAM,SAASN,EAAM;AACvB,UAAM,IAAI,MAAM,yDAAyD;AAE3E,QAAMO,IAAeD,GACfE,IAAyBR,EAAM,aAAaO,GAAc;AAAA,IAC9D,GAAGJ;AAAA;AAAA;AAAA;AAAA,IAIH,WAAWM,EAAaF,EAAa,MAAM,WAAWL,CAAS;AAAA,EAAA,CAChE;AAED,2BACGQ,GAAA,EAAM,GAAGN,GAAW,KAAKC,GACvB,UAAAG,GACH;AAEJ,CAAC;"}
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.js","sources":["../../../src/components/spinner/spinner.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\n\n/**\n * Spinner — v1's SVG spinner ported to a size-driven style object.\n *\n * v1 sizes this with Tailwind `size-*` utilities and deprecated the `size` prop in favour of a\n * `className` like `size-4`. There is no Tailwind here, so that escape hatch does not exist: `size`\n * is the supported API and the `@deprecated` tag is dropped (CONVENTIONS rule 9).\n *\n * The SVG markup, `viewBox` and stroke attributes are copied exactly from v1. Both animations are\n * the object form per CONVENTIONS rule 8: the outer `<g>` spins from a single `100%` stop, and the\n * dash sweep carries all three of v1's keyframe stops (`0%`, `47.5%`, `95%,100%`) from\n * `styles/animations.css`. The only mechanical changes are stylistic: sizes become width/height\n * atoms and the two `animate-*` classes become `animationName` + duration + timing + iteration.\n *\n * The five dimensions (1rem / 1.5rem / 2.5rem / 4rem / 6rem) are v1's Tailwind `size-N` values;\n * the v2 token set has no size or width/height family, so they are literals (CONVENTIONS rule 1).\n *\n * v1 also exposes a `variant` prop (`circle` | `line`) whose branches are both empty strings — it\n * produces no styles at all, so it is omitted here.\n */\n\nexport type SpinnerSize = \"sm\" | \"base\" | \"lg\" | \"xl\" | \"2xl\"\n\nconst useStyles = makeZenithStyles({\n sm: {\n width: \"1rem\",\n height: \"1rem\",\n },\n base: {\n width: \"1.5rem\",\n height: \"1.5rem\",\n },\n lg: {\n width: \"2.5rem\",\n height: \"2.5rem\",\n },\n xl: {\n width: \"4rem\",\n height: \"4rem\",\n },\n \"2xl\": {\n width: \"6rem\",\n height: \"6rem\",\n },\n spin: {\n transformOrigin: \"center\",\n animationName: {\n \"100%\": { transform: \"rotate(360deg)\" },\n },\n animationDuration: \"2s\",\n animationTimingFunction: \"linear\",\n animationIterationCount: \"infinite\",\n },\n dash: {\n animationName: {\n \"0%\": {\n strokeDasharray: \"0 150\",\n strokeDashoffset: 0,\n },\n \"47.5%\": {\n strokeDasharray: \"42 150\",\n strokeDashoffset: -16,\n },\n \"95%,100%\": {\n strokeDasharray: \"42 150\",\n strokeDashoffset: -59,\n },\n },\n animationDuration: \"1.5s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n})\n\nexport type SpinnerProps = React.ComponentProps<\"svg\"> & {\n size?: SpinnerSize\n}\n\nexport const Spinner = React.forwardRef<SVGSVGElement, SpinnerProps>(\n function Spinner({ size = \"base\", className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n role=\"status\"\n data-slot=\"spinner\"\n {...{ [SLOT_ATTR]: \"spinner\" }}\n className={mergeClasses(styles[size], className)}\n {...props}\n >\n <g className={styles.spin}>\n <circle cx=\"12\" cy=\"12\" r=\"9.5\" strokeWidth=\"3\" opacity=\"0.1\" />\n <circle\n className={styles.dash}\n cx=\"12\"\n cy=\"12\"\n r=\"9.5\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </g>\n </svg>\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","Spinner","React","size","className","props","ref","styles","jsx","SLOT_ATTR","mergeClasses","jsxs"],"mappings":";;;;AA6BA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,IAAI;AAAA,IACF,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,MAAM;AAAA,IACJ,iBAAiB;AAAA,IACjB,eAAe;AAAA,MACb,QAAQ,EAAE,WAAW,iBAAA;AAAA,IAAiB;AAAA,IAExC,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,EAAA;AAAA,EAE3B,MAAM;AAAA,IACJ,eAAe;AAAA,MACb,MAAM;AAAA,QACJ,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,MAEpB,SAAS;AAAA,QACP,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,MAEpB,YAAY;AAAA,QACV,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,IACpB;AAAA,IAEF,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,EAAA;AAE7B,CAAC,GAMYC,IAAUC,EAAM;AAAA,EAC3B,SAAiB,EAAE,MAAAC,IAAO,QAAQ,WAAAC,GAAW,GAAGC,EAAA,GAASC,GAAK;AAC5D,UAAMC,IAASR,EAAA;AAEf,WACE,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAF;AAAA,QACA,OAAM;AAAA,QACN,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,QAAO;AAAA,QACP,MAAK;AAAA,QACL,aAAU;AAAA,QACJ,CAACG,CAAS,GAAG;AAAA,QACnB,WAAWC,EAAaH,EAAOJ,CAAI,GAAGC,CAAS;AAAA,QAC9C,GAAGC;AAAA,QAEJ,UAAA,gBAAAM,EAAC,KAAA,EAAE,WAAWJ,EAAO,MACnB,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,OAAM,aAAY,KAAI,SAAQ,MAAA,CAAM;AAAA,UAC9D,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD,EAAO;AAAA,cAClB,IAAG;AAAA,cACH,IAAG;AAAA,cACH,GAAE;AAAA,cACF,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,MAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACP,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;"}
1
+ {"version":3,"file":"spinner.js","sources":["../../../src/components/spinner/spinner.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\n\n/**\n * Spinner — v1's SVG spinner ported to a size-driven style object. v1 sizes this with Tailwind\n * `size-*` utilities and deprecated the `size` prop in favour of a `className` like `size-4`.\n * is the supported API and the `@deprecated` tag is dropped (CONVENTIONS rule 9).\n */\n\nexport type SpinnerSize = \"sm\" | \"base\" | \"lg\" | \"xl\" | \"2xl\"\n\nconst useStyles = makeZenithStyles({\n sm: {\n width: \"1rem\",\n height: \"1rem\",\n },\n base: {\n width: \"1.5rem\",\n height: \"1.5rem\",\n },\n lg: {\n width: \"2.5rem\",\n height: \"2.5rem\",\n },\n xl: {\n width: \"4rem\",\n height: \"4rem\",\n },\n \"2xl\": {\n width: \"6rem\",\n height: \"6rem\",\n },\n spin: {\n transformOrigin: \"center\",\n animationName: {\n \"100%\": { transform: \"rotate(360deg)\" },\n },\n animationDuration: \"2s\",\n animationTimingFunction: \"linear\",\n animationIterationCount: \"infinite\",\n },\n dash: {\n animationName: {\n \"0%\": {\n strokeDasharray: \"0 150\",\n strokeDashoffset: 0,\n },\n \"47.5%\": {\n strokeDasharray: \"42 150\",\n strokeDashoffset: -16,\n },\n \"95%,100%\": {\n strokeDasharray: \"42 150\",\n strokeDashoffset: -59,\n },\n },\n animationDuration: \"1.5s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n})\n\nexport type SpinnerProps = React.ComponentProps<\"svg\"> & {\n size?: SpinnerSize\n}\n\nexport const Spinner = React.forwardRef<SVGSVGElement, SpinnerProps>(\n function Spinner({ size = \"base\", className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n role=\"status\"\n data-slot=\"spinner\"\n {...{ [SLOT_ATTR]: \"spinner\" }}\n className={mergeClasses(styles[size], className)}\n {...props}\n >\n <g className={styles.spin}>\n <circle cx=\"12\" cy=\"12\" r=\"9.5\" strokeWidth=\"3\" opacity=\"0.1\" />\n <circle\n className={styles.dash}\n cx=\"12\"\n cy=\"12\"\n r=\"9.5\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </g>\n </svg>\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","Spinner","React","size","className","props","ref","styles","jsx","SLOT_ATTR","mergeClasses","jsxs"],"mappings":";;;;AAeA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,IAAI;AAAA,IACF,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,MAAM;AAAA,IACJ,iBAAiB;AAAA,IACjB,eAAe;AAAA,MACb,QAAQ,EAAE,WAAW,iBAAA;AAAA,IAAiB;AAAA,IAExC,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,EAAA;AAAA,EAE3B,MAAM;AAAA,IACJ,eAAe;AAAA,MACb,MAAM;AAAA,QACJ,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,MAEpB,SAAS;AAAA,QACP,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,MAEpB,YAAY;AAAA,QACV,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,IACpB;AAAA,IAEF,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,EAAA;AAE7B,CAAC,GAMYC,IAAUC,EAAM;AAAA,EAC3B,SAAiB,EAAE,MAAAC,IAAO,QAAQ,WAAAC,GAAW,GAAGC,EAAA,GAASC,GAAK;AAC5D,UAAMC,IAASR,EAAA;AAEf,WACE,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAF;AAAA,QACA,OAAM;AAAA,QACN,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,QAAO;AAAA,QACP,MAAK;AAAA,QACL,aAAU;AAAA,QACJ,CAACG,CAAS,GAAG;AAAA,QACnB,WAAWC,EAAaH,EAAOJ,CAAI,GAAGC,CAAS;AAAA,QAC9C,GAAGC;AAAA,QAEJ,UAAA,gBAAAM,EAAC,KAAA,EAAE,WAAWJ,EAAO,MACnB,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,OAAM,aAAY,KAAI,SAAQ,MAAA,CAAM;AAAA,UAC9D,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD,EAAO;AAAA,cAClB,IAAG;AAAA,cACH,IAAG;AAAA,cACH,GAAE;AAAA,cACF,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,MAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACP,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"switch.js","sources":["../../../src/components/switch/switch.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\nconst ThumbIconChecked = React.forwardRef<SVGSVGElement>(\n function ThumbIconChecked(_props, ref) {\n const styles = useThumbIconStyles()\n\n return (\n <svg\n ref={ref}\n data-slot=\"switch-thumb-icon-checked\"\n {...{ [SLOT_ATTR]: \"switch-thumb-icon-checked\" }}\n role=\"presentation\"\n className={styles.checked}\n viewBox=\"0 0 1 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect width=\"1\" height=\"6\" fill=\"currentColor\" />\n </svg>\n )\n }\n)\n\nconst ThumbIconUnchecked = React.forwardRef<SVGSVGElement>(\n function ThumbIconUnchecked(_props, ref) {\n const styles = useThumbIconStyles()\n\n return (\n <svg\n ref={ref}\n data-slot=\"switch-thumb-icon-unchecked\"\n {...{ [SLOT_ATTR]: \"switch-thumb-icon-unchecked\" }}\n role=\"presentation\"\n className={styles.unchecked}\n viewBox=\"0 0 4 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"0.5\"\n y=\"0.5\"\n width=\"3\"\n height=\"5\"\n rx=\"1.5\"\n stroke=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\nconst ThumbIconDisabled = React.forwardRef<SVGSVGElement>(\n function ThumbIconDisabled(_props, ref) {\n const styles = useThumbIconStyles()\n\n return (\n <svg\n ref={ref}\n data-slot=\"switch-thumb-icon-disabled\"\n {...{ [SLOT_ATTR]: \"switch-thumb-icon-disabled\" }}\n className={styles.disabled}\n viewBox=\"0 0 4 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 5V1.875H0.666667V1.25C0.666667 0.90625 0.797223 0.611979 1.05833 0.367188C1.31944 0.122396 1.63333 0 2 0C2.36667 0 2.68056 0.122396 2.94167 0.367188C3.20278 0.611979 3.33333 0.90625 3.33333 1.25V1.875H4V5H0ZM1.33333 1.875H2.66667V1.25C2.66667 1.07292 2.60278 0.924479 2.475 0.804687C2.34722 0.684896 2.18889 0.625 2 0.625C1.81111 0.625 1.65278 0.684896 1.525 0.804687C1.39722 0.924479 1.33333 1.07292 1.33333 1.25V1.875Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\nconst useThumbIconStyles = makeZenithStyles({\n checked: {\n display: \"none\",\n position: \"absolute\",\n pointerEvents: \"none\",\n ...shorthands.inset(0),\n color: \"currentColor\",\n ...shorthands.margin(\"auto\"),\n },\n unchecked: {\n display: \"none\",\n position: \"absolute\",\n pointerEvents: \"none\",\n ...shorthands.inset(0),\n color: \"currentColor\",\n ...shorthands.margin(\"auto\"),\n },\n disabled: {\n display: \"inline-block\",\n position: \"absolute\",\n pointerEvents: \"none\",\n ...shorthands.inset(0),\n color: \"currentColor\",\n ...shorthands.margin(\"auto\"),\n },\n})\n\nconst useRootStyles = makeZenithStyles({\n root: {\n boxSizing: \"border-box\",\n display: \"inline-flex\",\n alignItems: \"center\",\n flexShrink: 0,\n cursor: \"pointer\",\n borderRadius: \"9999px\",\n ...shorthands.border(\"1px\", \"solid\", \"transparent\"),\n boxShadow: \"0 1px 2px 0 #0000000d\",\n transitionProperty: \"all\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n transitionDuration: \"150ms\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.semFocusRing,\n },\n \":disabled, &[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n },\n default: {\n color: tokens.grayA8,\n \"&[data-state='checked']\": { backgroundColor: tokens.semAccentSolid },\n \"&[data-state='unchecked']\": { backgroundColor: tokens.grayA3 },\n },\n destructive: {\n color: tokens.errorA8,\n \"&[data-state='checked']\": { backgroundColor: tokens.semErrorSolid },\n \"&[data-state='unchecked']\": { backgroundColor: tokens.errorA3 },\n },\n sm: {\n width: \"1.625rem\",\n height: \"1rem\",\n \"& svg\": { width: \"0.25rem\", height: \"0.375rem\" },\n },\n base: {\n width: \"2.125rem\",\n height: \"1.25rem\",\n \"& svg\": { width: \"0.4375rem\", height: \"0.5rem\" },\n },\n lg: {\n width: \"2.625rem\",\n height: \"1.5rem\",\n \"& svg\": { width: \"0.5rem\", height: \"0.625rem\" },\n },\n})\n\nconst useThumbStyles = makeZenithStyles({\n thumb: {\n position: \"relative\",\n display: \"block\",\n pointerEvents: \"none\",\n borderRadius: \"9999px\",\n boxShadow: \"0 1px 2px 0 #0000000d\",\n transitionProperty: \"transform\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n transitionDuration: \"150ms\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n \"&[data-state='checked']\": {\n transform: \"translateX(calc(100% - 1px))\",\n },\n \"&[data-state='unchecked']\": {\n transform: \"translateX(1px)\",\n },\n \"&[data-state='checked'] [data-zenith-slot='switch-thumb-icon-checked']\": {\n display: \"inline-block\",\n },\n \"&[data-state='unchecked'] [data-zenith-slot='switch-thumb-icon-unchecked']\":\n {\n display: \"inline-block\",\n },\n },\n default: {\n backgroundColor: tokens.grayContrast,\n color: tokens.grayA8,\n \"&[data-state='checked']\": { color: tokens.accentA11 },\n \"&[data-state='unchecked']\": { color: tokens.grayA8 },\n },\n destructive: {\n backgroundColor: tokens.errorContrast,\n color: tokens.errorA8,\n \"&[data-state='checked']\": { color: tokens.errorA11 },\n \"&[data-state='unchecked']\": { color: tokens.errorA8 },\n },\n sm: {\n width: \"0.75rem\",\n height: \"0.75rem\",\n \"& svg[data-zenith-slot='switch-thumb-icon-disabled']\": {\n width: \"0.25rem\",\n },\n },\n base: {\n width: \"1rem\",\n height: \"1rem\",\n \"& svg[data-zenith-slot='switch-thumb-icon-disabled']\": {\n width: \"0.375rem\",\n },\n },\n lg: {\n width: \"1.25rem\",\n height: \"1.25rem\",\n \"& svg[data-zenith-slot='switch-thumb-icon-disabled']\": {\n width: \"0.4375rem\",\n },\n },\n})\n\n/**\n * `primary` is a deprecated alias of `default`, carried because v1 has it and real consumers still\n * pass it — entity-sidepanel's SettingsControls does. v1's own comment marks it deprecated and its\n * styles are byte-identical to `default`, so it is mapped rather than duplicated.\n *\n * @remarks `primary` is deprecated; use `default`.\n */\nexport type SwitchVariant = \"default\" | \"destructive\" | \"primary\"\nexport type SwitchSize = \"sm\" | \"base\" | \"lg\"\n\nexport type SwitchProps = React.ComponentProps<typeof SwitchPrimitive.Root> & {\n /**\n * `default` or `destructive`.\n *\n * `primary` is a **deprecated alias of `default`** with byte-identical styles,\n * kept because v1 had it and consumers still pass it. Choosing it changes\n * nothing; use `default`.\n *\n * @default \"default\"\n */\n variant?: SwitchVariant\n /** @default \"base\" */\n size?: SwitchSize\n showThumbIcon?: boolean\n}\n\nexport const Switch = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(function Switch(\n {\n variant = \"default\",\n size = \"base\",\n className,\n showThumbIcon = false,\n ...props\n },\n ref\n) {\n const rootStyles = useRootStyles()\n const thumbStyles = useThumbStyles()\n // See SwitchVariant: `primary` is v1's deprecated alias for `default`, same styles.\n const variantKey = variant === \"primary\" ? \"default\" : variant\n\n return (\n <SwitchPrimitive.Root\n ref={ref}\n data-slot=\"switch\"\n {...{ [SLOT_ATTR]: \"switch\" }}\n className={mergeClasses(\n rootStyles.root,\n rootStyles[variantKey],\n rootStyles[size],\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n {...{ [SLOT_ATTR]: \"switch-thumb\" }}\n className={mergeClasses(\n thumbStyles.thumb,\n thumbStyles[variantKey],\n thumbStyles[size]\n )}\n >\n {showThumbIcon && !props.disabled && <ThumbIconChecked />}\n {showThumbIcon && !props.disabled && <ThumbIconUnchecked />}\n {showThumbIcon && props.disabled && <ThumbIconDisabled />}\n </SwitchPrimitive.Thumb>\n </SwitchPrimitive.Root>\n )\n})\n"],"names":["ThumbIconChecked","React","_props","ref","styles","useThumbIconStyles","jsx","SLOT_ATTR","ThumbIconUnchecked","ThumbIconDisabled","makeZenithStyles","shorthands","useRootStyles","tokens.semFocusRing","tokens.grayA8","tokens.semAccentSolid","tokens.grayA3","tokens.errorA8","tokens.semErrorSolid","tokens.errorA3","useThumbStyles","tokens.grayContrast","tokens.accentA11","tokens.errorContrast","tokens.errorA11","Switch","variant","size","className","showThumbIcon","props","rootStyles","thumbStyles","variantKey","SwitchPrimitive.Root","mergeClasses","jsxs","SwitchPrimitive.Thumb"],"mappings":"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"}
1
+ {"version":3,"file":"switch.js","sources":["../../../src/components/switch/switch.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as SwitchPrimitive from \"@radix-ui/react-switch\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\nconst ThumbIconChecked = React.forwardRef<SVGSVGElement>(\n function ThumbIconChecked(_props, ref) {\n const styles = useThumbIconStyles()\n\n return (\n <svg\n ref={ref}\n data-slot=\"switch-thumb-icon-checked\"\n {...{ [SLOT_ATTR]: \"switch-thumb-icon-checked\" }}\n role=\"presentation\"\n className={styles.checked}\n viewBox=\"0 0 1 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect width=\"1\" height=\"6\" fill=\"currentColor\" />\n </svg>\n )\n }\n)\n\nconst ThumbIconUnchecked = React.forwardRef<SVGSVGElement>(\n function ThumbIconUnchecked(_props, ref) {\n const styles = useThumbIconStyles()\n\n return (\n <svg\n ref={ref}\n data-slot=\"switch-thumb-icon-unchecked\"\n {...{ [SLOT_ATTR]: \"switch-thumb-icon-unchecked\" }}\n role=\"presentation\"\n className={styles.unchecked}\n viewBox=\"0 0 4 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"0.5\"\n y=\"0.5\"\n width=\"3\"\n height=\"5\"\n rx=\"1.5\"\n stroke=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\nconst ThumbIconDisabled = React.forwardRef<SVGSVGElement>(\n function ThumbIconDisabled(_props, ref) {\n const styles = useThumbIconStyles()\n\n return (\n <svg\n ref={ref}\n data-slot=\"switch-thumb-icon-disabled\"\n {...{ [SLOT_ATTR]: \"switch-thumb-icon-disabled\" }}\n className={styles.disabled}\n viewBox=\"0 0 4 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0 5V1.875H0.666667V1.25C0.666667 0.90625 0.797223 0.611979 1.05833 0.367188C1.31944 0.122396 1.63333 0 2 0C2.36667 0 2.68056 0.122396 2.94167 0.367188C3.20278 0.611979 3.33333 0.90625 3.33333 1.25V1.875H4V5H0ZM1.33333 1.875H2.66667V1.25C2.66667 1.07292 2.60278 0.924479 2.475 0.804687C2.34722 0.684896 2.18889 0.625 2 0.625C1.81111 0.625 1.65278 0.684896 1.525 0.804687C1.39722 0.924479 1.33333 1.07292 1.33333 1.25V1.875Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\nconst useThumbIconStyles = makeZenithStyles({\n checked: {\n display: \"none\",\n position: \"absolute\",\n pointerEvents: \"none\",\n ...shorthands.inset(0),\n color: \"currentColor\",\n ...shorthands.margin(\"auto\"),\n },\n unchecked: {\n display: \"none\",\n position: \"absolute\",\n pointerEvents: \"none\",\n ...shorthands.inset(0),\n color: \"currentColor\",\n ...shorthands.margin(\"auto\"),\n },\n disabled: {\n display: \"inline-block\",\n position: \"absolute\",\n pointerEvents: \"none\",\n ...shorthands.inset(0),\n color: \"currentColor\",\n ...shorthands.margin(\"auto\"),\n },\n})\n\nconst useRootStyles = makeZenithStyles({\n root: {\n boxSizing: \"border-box\",\n display: \"inline-flex\",\n alignItems: \"center\",\n flexShrink: 0,\n cursor: \"pointer\",\n borderRadius: \"9999px\",\n ...shorthands.border(\"1px\", \"solid\", \"transparent\"),\n boxShadow: \"0 1px 2px 0 #0000000d\",\n transitionProperty: \"all\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n transitionDuration: \"150ms\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.semFocusRing,\n },\n \":disabled, &[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n },\n default: {\n color: tokens.grayA8,\n \"&[data-state='checked']\": { backgroundColor: tokens.semAccentSolid },\n \"&[data-state='unchecked']\": { backgroundColor: tokens.grayA3 },\n },\n destructive: {\n color: tokens.errorA8,\n \"&[data-state='checked']\": { backgroundColor: tokens.semErrorSolid },\n \"&[data-state='unchecked']\": { backgroundColor: tokens.errorA3 },\n },\n sm: {\n width: \"1.625rem\",\n height: \"1rem\",\n \"& svg\": { width: \"0.25rem\", height: \"0.375rem\" },\n },\n base: {\n width: \"2.125rem\",\n height: \"1.25rem\",\n \"& svg\": { width: \"0.4375rem\", height: \"0.5rem\" },\n },\n lg: {\n width: \"2.625rem\",\n height: \"1.5rem\",\n \"& svg\": { width: \"0.5rem\", height: \"0.625rem\" },\n },\n})\n\nconst useThumbStyles = makeZenithStyles({\n thumb: {\n position: \"relative\",\n display: \"block\",\n pointerEvents: \"none\",\n borderRadius: \"9999px\",\n boxShadow: \"0 1px 2px 0 #0000000d\",\n transitionProperty: \"transform\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n transitionDuration: \"150ms\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n \"&[data-state='checked']\": {\n transform: \"translateX(calc(100% - 1px))\",\n },\n \"&[data-state='unchecked']\": {\n transform: \"translateX(1px)\",\n },\n \"&[data-state='checked'] [data-zenith-slot='switch-thumb-icon-checked']\": {\n display: \"inline-block\",\n },\n \"&[data-state='unchecked'] [data-zenith-slot='switch-thumb-icon-unchecked']\":\n {\n display: \"inline-block\",\n },\n },\n default: {\n backgroundColor: tokens.grayContrast,\n color: tokens.grayA8,\n \"&[data-state='checked']\": { color: tokens.accentA11 },\n \"&[data-state='unchecked']\": { color: tokens.grayA8 },\n },\n destructive: {\n backgroundColor: tokens.errorContrast,\n color: tokens.errorA8,\n \"&[data-state='checked']\": { color: tokens.errorA11 },\n \"&[data-state='unchecked']\": { color: tokens.errorA8 },\n },\n sm: {\n width: \"0.75rem\",\n height: \"0.75rem\",\n \"& svg[data-zenith-slot='switch-thumb-icon-disabled']\": {\n width: \"0.25rem\",\n },\n },\n base: {\n width: \"1rem\",\n height: \"1rem\",\n \"& svg[data-zenith-slot='switch-thumb-icon-disabled']\": {\n width: \"0.375rem\",\n },\n },\n lg: {\n width: \"1.25rem\",\n height: \"1.25rem\",\n \"& svg[data-zenith-slot='switch-thumb-icon-disabled']\": {\n width: \"0.4375rem\",\n },\n },\n})\n\n/**\n * `primary` is a deprecated alias of `default`, carried because v1 has it and real consumers still\n * pass it — entity-sidepanel's SettingsControls does. v1's own comment marks it deprecated and its\n * styles are byte-identical to `default`, so it is mapped rather than duplicated.\n *\n * @remarks `primary` is deprecated; use `default`.\n */\nexport type SwitchVariant = \"default\" | \"destructive\" | \"primary\"\nexport type SwitchSize = \"sm\" | \"base\" | \"lg\"\n\nexport type SwitchProps = React.ComponentProps<typeof SwitchPrimitive.Root> & {\n /**\n * `default` or `destructive`. `primary` is a **deprecated alias of `default`** with byte-\n * identical styles, kept because v1 had it and consumers still pass it. Choosing it changes\n * nothing; use `default`.\n */\n variant?: SwitchVariant\n /** @default \"base\" */\n size?: SwitchSize\n showThumbIcon?: boolean\n}\n\nexport const Switch = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitive.Root>,\n SwitchProps\n>(function Switch(\n {\n variant = \"default\",\n size = \"base\",\n className,\n showThumbIcon = false,\n ...props\n },\n ref\n) {\n const rootStyles = useRootStyles()\n const thumbStyles = useThumbStyles()\n // See SwitchVariant: `primary` is v1's deprecated alias for `default`, same styles.\n const variantKey = variant === \"primary\" ? \"default\" : variant\n\n return (\n <SwitchPrimitive.Root\n ref={ref}\n data-slot=\"switch\"\n {...{ [SLOT_ATTR]: \"switch\" }}\n className={mergeClasses(\n rootStyles.root,\n rootStyles[variantKey],\n rootStyles[size],\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n {...{ [SLOT_ATTR]: \"switch-thumb\" }}\n className={mergeClasses(\n thumbStyles.thumb,\n thumbStyles[variantKey],\n thumbStyles[size]\n )}\n >\n {showThumbIcon && !props.disabled && <ThumbIconChecked />}\n {showThumbIcon && !props.disabled && <ThumbIconUnchecked />}\n {showThumbIcon && props.disabled && <ThumbIconDisabled />}\n </SwitchPrimitive.Thumb>\n </SwitchPrimitive.Root>\n )\n})\n"],"names":["ThumbIconChecked","React","_props","ref","styles","useThumbIconStyles","jsx","SLOT_ATTR","ThumbIconUnchecked","ThumbIconDisabled","makeZenithStyles","shorthands","useRootStyles","tokens.semFocusRing","tokens.grayA8","tokens.semAccentSolid","tokens.grayA3","tokens.errorA8","tokens.semErrorSolid","tokens.errorA3","useThumbStyles","tokens.grayContrast","tokens.accentA11","tokens.errorContrast","tokens.errorA11","Switch","variant","size","className","showThumbIcon","props","rootStyles","thumbStyles","variantKey","SwitchPrimitive.Root","mergeClasses","jsxs","SwitchPrimitive.Thumb"],"mappings":"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"}