@epilot/zenith-react 0.1.0-next.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -10
- package/dist/components/appearance-boundary/appearance-boundary.js +32 -34
- package/dist/components/appearance-boundary/appearance-boundary.js.map +1 -1
- package/dist/components/badge/badge.js +1 -1
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js +10 -10
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/button/button.js +28 -28
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/callout/callout.js +13 -13
- package/dist/components/callout/callout.js.map +1 -1
- package/dist/components/checkbox/checkbox.js +13 -13
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/code-block/code-block.js +6 -6
- package/dist/components/code-block/code-block.js.map +1 -1
- package/dist/components/code-editor/code-editor.js +1 -1
- package/dist/components/code-editor/code-editor.js.map +1 -1
- package/dist/components/command/command.js +6 -6
- package/dist/components/command/command.js.map +1 -1
- package/dist/components/data-table/data-table-body.js +120 -66
- package/dist/components/data-table/data-table-body.js.map +1 -1
- package/dist/components/data-table/data-table-column-header.js +7 -7
- package/dist/components/data-table/data-table-column-header.js.map +1 -1
- package/dist/components/data-table/data-table-column-order.js +277 -0
- package/dist/components/data-table/data-table-column-order.js.map +1 -0
- package/dist/components/data-table/data-table-content.js +72 -58
- package/dist/components/data-table/data-table-content.js.map +1 -1
- package/dist/components/data-table/data-table-context.js +8 -4
- package/dist/components/data-table/data-table-context.js.map +1 -1
- package/dist/components/data-table/data-table-footer.js +31 -0
- package/dist/components/data-table/data-table-footer.js.map +1 -0
- package/dist/components/data-table/data-table-header-draggable.js +151 -0
- package/dist/components/data-table/data-table-header-draggable.js.map +1 -0
- package/dist/components/data-table/data-table-header.js +130 -57
- package/dist/components/data-table/data-table-header.js.map +1 -1
- package/dist/components/data-table/data-table-resize-handle.js +137 -0
- package/dist/components/data-table/data-table-resize-handle.js.map +1 -0
- package/dist/components/data-table/data-table.js +184 -156
- package/dist/components/data-table/data-table.js.map +1 -1
- package/dist/components/data-table/hooks/use-data-table-virtualizer.js +9 -0
- package/dist/components/data-table/hooks/use-data-table-virtualizer.js.map +1 -0
- package/dist/components/date-range-picker/date-range-picker.js +194 -187
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/date-time-picker/calendar.js +29 -29
- package/dist/components/date-time-picker/calendar.js.map +1 -1
- package/dist/components/date-time-picker/time-picker.js +55 -55
- package/dist/components/date-time-picker/time-picker.js.map +1 -1
- package/dist/components/dialog/dialog.js +1 -1
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/drawer/drawer.js +5 -5
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.js +36 -36
- package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/components/field/field-combobox.js +4 -4
- package/dist/components/field/field-combobox.js.map +1 -1
- package/dist/components/field/field.js +40 -40
- package/dist/components/field/field.js.map +1 -1
- package/dist/components/list/list.js +40 -40
- package/dist/components/list/list.js.map +1 -1
- package/dist/components/option-card/option-card.js +27 -25
- package/dist/components/option-card/option-card.js.map +1 -1
- package/dist/components/pill/pill.js +9 -9
- package/dist/components/pill/pill.js.map +1 -1
- package/dist/components/radio/radio.js +14 -14
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/scroll-area/scroll-area.js +9 -9
- package/dist/components/scroll-area/scroll-area.js.map +1 -1
- package/dist/components/segmented-control/segmented-control.js +1 -1
- package/dist/components/segmented-control/segmented-control.js.map +1 -1
- package/dist/components/select/select.js +11 -11
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/spinner/spinner.js.map +1 -1
- package/dist/components/switch/switch.js +11 -11
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/table/table-pagination.js +1 -1
- package/dist/components/table/table-pagination.js.map +1 -1
- package/dist/components/table/table.js +15 -15
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/text/text.js +10 -1
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/toast/toast.js +26 -26
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/toggle/toggle.js +20 -20
- package/dist/components/toggle/toggle.js.map +1 -1
- package/dist/index.d.ts +1930 -1867
- package/dist/index.js +133 -121
- package/dist/index.js.map +1 -1
- package/dist/packages/tokens/dist/generated/core.generated.js +13 -22
- package/dist/packages/tokens/dist/generated/core.generated.js.map +1 -1
- package/dist/packages/tokens/dist/generated/palette.generated.js +5 -5
- package/dist/packages/tokens/dist/generated/palette.generated.js.map +1 -1
- package/dist/packages/tokens/dist/install.js +5 -5
- package/dist/packages/tokens/dist/install.js.map +1 -1
- package/dist/tokens/core.meta.generated.js +2 -2
- package/dist/tokens/core.meta.generated.js.map +1 -1
- package/dist/tokens/index.d.ts +1029 -1104
- package/dist/tokens/index.js +1031 -1106
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/palette.generated.js +2 -2
- package/dist/tokens/palette.generated.js.map +1 -1
- package/dist/tokens.json +605 -755
- package/dist/vendor/.bun/@dnd-kit_core@6.3.1_6f4b9a1cfb20c0ae/vendor/@dnd-kit/core/dist/core.esm.js +385 -340
- package/dist/vendor/.bun/@dnd-kit_core@6.3.1_6f4b9a1cfb20c0ae/vendor/@dnd-kit/core/dist/core.esm.js.map +1 -1
- package/dist/vendor/.bun/@dnd-kit_sortable@10.0.0_1d291640e1250bbe/vendor/@dnd-kit/sortable/dist/sortable.esm.js +344 -229
- package/dist/vendor/.bun/@dnd-kit_sortable@10.0.0_1d291640e1250bbe/vendor/@dnd-kit/sortable/dist/sortable.esm.js.map +1 -1
- package/dist/vendor/.bun/@dnd-kit_utilities@3.2.2_62547eec5a2188e3/vendor/@dnd-kit/utilities/dist/utilities.esm.js +1 -1
- package/dist/vendor/.bun/@tanstack_react-virtual@3.11.2_6f4b9a1cfb20c0ae/vendor/@tanstack/react-virtual/dist/esm/index.js +36 -0
- package/dist/vendor/.bun/@tanstack_react-virtual@3.11.2_6f4b9a1cfb20c0ae/vendor/@tanstack/react-virtual/dist/esm/index.js.map +1 -0
- package/dist/vendor/.bun/@tanstack_virtual-core@3.11.2/vendor/@tanstack/virtual-core/dist/esm/index.js +450 -0
- package/dist/vendor/.bun/@tanstack_virtual-core@3.11.2/vendor/@tanstack/virtual-core/dist/esm/index.js.map +1 -0
- package/dist/vendor/.bun/@tanstack_virtual-core@3.11.2/vendor/@tanstack/virtual-core/dist/esm/utils.js +50 -0
- package/dist/vendor/.bun/@tanstack_virtual-core@3.11.2/vendor/@tanstack/virtual-core/dist/esm/utils.js.map +1 -0
- package/package.json +5 -3
|
@@ -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.\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
|
+
{"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.errorSoft,\n color: tokens.errorDefault,\n },\n statusWarning: {\n backgroundColor: tokens.warningSoft,\n color: tokens.warningDefault,\n },\n statusSuccess: {\n backgroundColor: tokens.successSoft,\n color: tokens.successDefault,\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.accentSoft,\n },\n },\n interactiveError: {\n \":hover\": {\n backgroundColor: tokens.errorSoftHover,\n },\n },\n interactiveWarning: {\n \":hover\": {\n backgroundColor: tokens.warningSoftHover,\n },\n },\n interactiveSuccess: {\n \":hover\": {\n backgroundColor: tokens.successSoftHover,\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.accentSolid,\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.errorLight,\n },\n statusIconWarning: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.warningLight,\n },\n statusIconSuccess: {\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.successLight,\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.errorSoft","tokens.errorDefault","tokens.warningSoft","tokens.warningDefault","tokens.successSoft","tokens.successDefault","tokens.grayA2","tokens.accentSoft","tokens.errorSoftHover","tokens.warningSoftHover","tokens.successSoftHover","tokens.grayA11","tokens.listIndexMinWidth","tokens.listIndexPaddingX","tokens.spacingElement2","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.grayA8","tokens.accentA8","tokens.accentSolid","tokens.grayA5","tokens.fontWeightMedium","tokens.grayA10","tokens.spacingGroup2","tokens.spacingElement3","tokens.fontWeightSemibold","tokens.errorLight","tokens.warningLight","tokens.successLight","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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"}
|
|
@@ -4,8 +4,8 @@ import { Root as J } from "../../vendor/.bun/@radix-ui_react-toggle@1.1.10_2b23d
|
|
|
4
4
|
import { Item as K, Root as Q } from "../../vendor/.bun/@radix-ui_react-toggle-group@1.1.11_2b23df507bdda662/vendor/@radix-ui/react-toggle-group/dist/index.js";
|
|
5
5
|
import { mergeClasses as h, SLOT_ATTR as r, shorthands as s } from "@epilot/zenith-runtime/v1";
|
|
6
6
|
import { makeZenithStyles as tt } from "../../styles/make-styles.js";
|
|
7
|
-
import { grayContrast as ot, grayA3 as rt, accentContrast as et,
|
|
8
|
-
const
|
|
7
|
+
import { grayContrast as ot, grayA3 as rt, accentContrast as et, accentSoft as f, accentSolid as C, grayA11 as nt, fontWeightNormal as I, leadingXs as it, textXs as at, fontWeightSemibold as st, spacingElement1 as G, spacingElement2 as ct, accentLight as dt, accentA8 as D, grayA12 as lt, leadingSm as pt, textSm as ut, accentA7 as P, radiusLg as W, spacingElement3 as E, grayA6 as ht, spacingGroup1 as mt } from "../../tokens/index.js";
|
|
8
|
+
const gt = "grid", ft = "OptionCard: a card inside an OptionCardGroup is missing a `value`. Give each card a unique `value` so it can be selected and controlled.", F = n.createContext(null), k = n.createContext(
|
|
9
9
|
null
|
|
10
10
|
), p = tt({
|
|
11
11
|
// Group layouts
|
|
@@ -15,7 +15,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
15
15
|
// while `styles.card` and `styles[layout]` were read but never declared. See make-styles.ts for
|
|
16
16
|
// why tsc accepted that for as long as it did.
|
|
17
17
|
display: "grid",
|
|
18
|
-
...s.gap(
|
|
18
|
+
...s.gap(mt)
|
|
19
19
|
},
|
|
20
20
|
// v1: grid-cols-[repeat(auto-fit,minmax(200px,1fr))]
|
|
21
21
|
grid: {
|
|
@@ -37,7 +37,9 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
37
37
|
...s.gap(E),
|
|
38
38
|
overflow: "hidden",
|
|
39
39
|
...s.borderRadius(W),
|
|
40
|
-
|
|
40
|
+
// Not currentColor: that picked up this rule's `color: grayA12` and painted a near-black
|
|
41
|
+
// edge. The predecessor's bare `border` resolved to a subtle grey; grayA6 is its match.
|
|
42
|
+
...s.border("1px", "solid", ht),
|
|
41
43
|
...s.paddingInline(E),
|
|
42
44
|
...s.paddingBlock("0.375rem"),
|
|
43
45
|
textAlign: "left",
|
|
@@ -237,7 +239,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
237
239
|
transitionProperty: "transform",
|
|
238
240
|
transitionDuration: "150ms"
|
|
239
241
|
}
|
|
240
|
-
}),
|
|
242
|
+
}), Ct = (o) => /* @__PURE__ */ t(
|
|
241
243
|
"svg",
|
|
242
244
|
{
|
|
243
245
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -247,7 +249,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
247
249
|
...o,
|
|
248
250
|
children: /* @__PURE__ */ t("path", { d: "m382-354 339-339q12-12 28-12t28 12q12 12 12 28.5T777-636L410-268q-12 12-28 12t-28-12L182-440q-12-12-11.5-28.5T183-497q12-12 28.5-12t28.5 12l142 143Z" })
|
|
249
251
|
}
|
|
250
|
-
),
|
|
252
|
+
), bt = () => {
|
|
251
253
|
const o = p();
|
|
252
254
|
return /* @__PURE__ */ t(
|
|
253
255
|
"span",
|
|
@@ -263,7 +265,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
263
265
|
)
|
|
264
266
|
}
|
|
265
267
|
);
|
|
266
|
-
},
|
|
268
|
+
}, xt = () => {
|
|
267
269
|
const o = p();
|
|
268
270
|
return /* @__PURE__ */ t(
|
|
269
271
|
"span",
|
|
@@ -271,7 +273,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
271
273
|
className: o.checkboxOuter,
|
|
272
274
|
[r]: "option-card-checkbox-outer",
|
|
273
275
|
children: /* @__PURE__ */ t(
|
|
274
|
-
|
|
276
|
+
Ct,
|
|
275
277
|
{
|
|
276
278
|
className: o.checkboxCheck,
|
|
277
279
|
[r]: "option-card-checkbox-check"
|
|
@@ -279,7 +281,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
279
281
|
)
|
|
280
282
|
}
|
|
281
283
|
);
|
|
282
|
-
},
|
|
284
|
+
}, yt = () => {
|
|
283
285
|
const o = p();
|
|
284
286
|
return /* @__PURE__ */ t(
|
|
285
287
|
"span",
|
|
@@ -295,7 +297,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
295
297
|
)
|
|
296
298
|
}
|
|
297
299
|
);
|
|
298
|
-
},
|
|
300
|
+
}, It = n.forwardRef(function({ className: i, layout: e = gt, ...a }, c) {
|
|
299
301
|
const d = p();
|
|
300
302
|
return /* @__PURE__ */ t(F.Provider, { value: { type: a.type, layout: e }, children: /* @__PURE__ */ t(
|
|
301
303
|
Q,
|
|
@@ -324,7 +326,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
324
326
|
[r]: "option-card-control",
|
|
325
327
|
className: h(d.control, i),
|
|
326
328
|
...a,
|
|
327
|
-
children: g === "radio" ? /* @__PURE__ */ t(
|
|
329
|
+
children: g === "radio" ? /* @__PURE__ */ t(bt, {}) : g === "switch" ? /* @__PURE__ */ t(yt, {}) : /* @__PURE__ */ t(xt, {})
|
|
328
330
|
}
|
|
329
331
|
);
|
|
330
332
|
}), L = n.forwardRef(function({ className: i, variant: e = "icon", ...a }, c) {
|
|
@@ -345,7 +347,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
345
347
|
...a
|
|
346
348
|
}
|
|
347
349
|
);
|
|
348
|
-
}),
|
|
350
|
+
}), wt = n.forwardRef(function({ className: i, ...e }, a) {
|
|
349
351
|
const c = p();
|
|
350
352
|
return /* @__PURE__ */ t(
|
|
351
353
|
"span",
|
|
@@ -357,7 +359,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
357
359
|
...e
|
|
358
360
|
}
|
|
359
361
|
);
|
|
360
|
-
}),
|
|
362
|
+
}), Gt = n.forwardRef(function({ className: i, ...e }, a) {
|
|
361
363
|
const c = p();
|
|
362
364
|
return /* @__PURE__ */ t(
|
|
363
365
|
"span",
|
|
@@ -369,7 +371,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
369
371
|
...e
|
|
370
372
|
}
|
|
371
373
|
);
|
|
372
|
-
}),
|
|
374
|
+
}), kt = (o) => n.Children.toArray(o).some(
|
|
373
375
|
(i) => n.isValidElement(i) && i.type === _
|
|
374
376
|
), $ = n.forwardRef(function({ className: i, children: e, ...a }, c) {
|
|
375
377
|
const d = p();
|
|
@@ -383,11 +385,11 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
383
385
|
...a,
|
|
384
386
|
children: [
|
|
385
387
|
e,
|
|
386
|
-
!
|
|
388
|
+
!kt(e) && /* @__PURE__ */ t(_, {})
|
|
387
389
|
]
|
|
388
390
|
}
|
|
389
391
|
);
|
|
390
|
-
}), w = (o, ...i) => n.isValidElement(o) && i.includes(o.type),
|
|
392
|
+
}), w = (o, ...i) => n.isValidElement(o) && i.includes(o.type), Dt = n.forwardRef(
|
|
391
393
|
function({
|
|
392
394
|
className: i,
|
|
393
395
|
children: e,
|
|
@@ -398,7 +400,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
398
400
|
...m
|
|
399
401
|
}, g) {
|
|
400
402
|
const S = p(), R = n.useContext(F), b = R !== null, j = n.useId();
|
|
401
|
-
process.env.NODE_ENV !== "production" && b && a === void 0 && console.warn(
|
|
403
|
+
process.env.NODE_ENV !== "production" && b && a === void 0 && console.warn(ft);
|
|
402
404
|
const [B, M] = n.useState(
|
|
403
405
|
d ?? !1
|
|
404
406
|
), v = c !== void 0, O = v ? c : B, V = (u) => {
|
|
@@ -406,9 +408,9 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
406
408
|
}, X = b ? R.type === "multiple" ? "checkbox" : "radio" : "checkbox", [x, z] = n.useState(X), T = n.useMemo(
|
|
407
409
|
() => ({ controlType: x, registerType: z }),
|
|
408
410
|
[x]
|
|
409
|
-
), y = n.Children.toArray(e), U = y.some((u) => w(u, $)), H = y.filter((u) => w(u, L)),
|
|
411
|
+
), y = n.Children.toArray(e), U = y.some((u) => w(u, $)), H = y.filter((u) => w(u, L)), N = y.filter((u) => !w(u, L)), A = /* @__PURE__ */ q(Y, { children: [
|
|
410
412
|
H,
|
|
411
|
-
U ?
|
|
413
|
+
U ? N : /* @__PURE__ */ t($, { children: /* @__PURE__ */ t(wt, { children: N }) })
|
|
412
414
|
] });
|
|
413
415
|
if (b)
|
|
414
416
|
return /* @__PURE__ */ t(k.Provider, { value: T, children: /* @__PURE__ */ t(
|
|
@@ -420,7 +422,7 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
420
422
|
value: a ?? j,
|
|
421
423
|
className: h(S.card, i),
|
|
422
424
|
...m,
|
|
423
|
-
children:
|
|
425
|
+
children: A
|
|
424
426
|
}
|
|
425
427
|
) });
|
|
426
428
|
const Z = x === "switch" ? "switch" : "checkbox";
|
|
@@ -437,18 +439,18 @@ const mt = "grid", gt = "OptionCard: a card inside an OptionCardGroup is missing
|
|
|
437
439
|
"aria-pressed": void 0,
|
|
438
440
|
className: h(S.card, i),
|
|
439
441
|
...m,
|
|
440
|
-
children:
|
|
442
|
+
children: A
|
|
441
443
|
}
|
|
442
444
|
) });
|
|
443
445
|
}
|
|
444
446
|
);
|
|
445
447
|
export {
|
|
446
|
-
|
|
448
|
+
Dt as OptionCard,
|
|
447
449
|
$ as OptionCardContent,
|
|
448
450
|
_ as OptionCardControl,
|
|
449
|
-
|
|
450
|
-
|
|
451
|
+
Gt as OptionCardDescription,
|
|
452
|
+
It as OptionCardGroup,
|
|
451
453
|
L as OptionCardMedia,
|
|
452
|
-
|
|
454
|
+
wt as OptionCardTitle
|
|
453
455
|
};
|
|
454
456
|
//# sourceMappingURL=option-card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"option-card.js","sources":["../../../src/components/option-card/option-card.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\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 DEFAULT_LAYOUT = \"grid\" as const\n\nconst MISSING_VALUE_WARNING =\n \"OptionCard: a card inside an OptionCardGroup is missing a `value`. \" +\n \"Give each card a unique `value` so it can be selected and controlled.\"\n\n/** The trailing control glyph an {@link OptionCard} shows for its selected state. */\nexport type OptionCardControlType = \"radio\" | \"checkbox\" | \"switch\" | \"none\"\n\nexport type OptionCardLayout = \"grid\" | \"row\" | \"column\"\n\n// ── Group context ──────────────────────────────────────────────────────────\ntype OptionCardGroupContextValue = {\n type?: \"single\" | \"multiple\"\n layout: OptionCardLayout\n}\nconst OptionCardGroupContext =\n React.createContext<OptionCardGroupContextValue | null>(null)\n\n// ── Card context ───────────────────────────────────────────────────────────\ntype OptionCardContextValue = {\n controlType: OptionCardControlType\n registerType: (type: OptionCardControlType) => void\n}\nconst OptionCardContext = React.createContext<OptionCardContextValue | null>(\n null\n)\n\n// ── Styles ─────────────────────────────────────────────────────────────────\n\nconst useStyles = makeZenithStyles({\n // Group layouts\n group: {\n // The GROUP only lays out. v1's group base class is literally \"\" -- every border, padding and\n // interaction style below used to live here, copied from v1's CARD class onto the wrong element,\n // while `styles.card` and `styles[layout]` were read but never declared. See make-styles.ts for\n // why tsc accepted that for as long as it did.\n display: \"grid\",\n ...shorthands.gap(tokens.spacingGroup1),\n },\n\n // v1: grid-cols-[repeat(auto-fit,minmax(200px,1fr))]\n grid: {\n gridTemplateColumns: \"repeat(auto-fit, minmax(200px, 1fr))\",\n },\n // v1: grid-flow-col auto-cols-fr -- equal-width columns in one non-wrapping row, so options read\n // as equal-weight peers regardless of their content.\n row: {\n gridAutoFlow: \"column\",\n gridAutoColumns: \"minmax(0, 1fr)\",\n },\n // v1: plain `grid` with no template. One column, stacked.\n column: {},\n\n card: {\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n // v1 gap-3 = 0.75rem. No token: the semantic scale has no 0.75rem step.\n ...shorthands.gap(tokens.spacingElement3),\n overflow: \"hidden\",\n ...shorthands.borderRadius(tokens.radiusLg),\n ...shorthands.border(\"1px\", \"solid\", \"currentColor\"),\n ...shorthands.paddingInline(tokens.spacingElement3),\n ...shorthands.paddingBlock(\"0.375rem\"),\n textAlign: \"left\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n fontWeight: tokens.fontWeightNormal,\n color: tokens.grayA12,\n backgroundColor: \"transparent\",\n transitionProperty: \"color, background-color, border-color, box-shadow\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n cursor: \"pointer\",\n userSelect: \"none\",\n height: \"auto\",\n minWidth: \"0\",\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \":disabled, &[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n \"&[data-state='on']\": {\n backgroundColor: tokens.semAccentSoft,\n ...shorthands.borderColor(tokens.accentA8),\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-radio-outer\"]`]: {\n ...shorthands.borderColor(tokens.semAccentSolid),\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-radio-dot\"]`]: {\n opacity: 1,\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-checkbox-outer\"]`]: {\n ...shorthands.borderColor(\"transparent\"),\n backgroundColor: tokens.semAccentSolid,\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-checkbox-check\"]`]: {\n opacity: 1,\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-switch-track\"]`]: {\n backgroundColor: tokens.semAccentSolid,\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-switch-thumb\"]`]: {\n transform: \"translateX(calc(100% - 1px))\",\n },\n },\n\n // Media\n mediaRoot: {\n flexShrink: 0,\n },\n mediaIcon: {\n display: \"grid\",\n width: \"2.5rem\",\n height: \"2.5rem\",\n placeContent: \"center\",\n alignSelf: \"start\",\n ...shorthands.borderRadius(tokens.radiusLg),\n backgroundColor: tokens.semAccentSoft,\n color: tokens.semAccentLight,\n \"& svg\": {\n width: \"1.25rem\",\n height: \"1.25rem\",\n },\n },\n mediaIllustration: {\n position: \"relative\",\n aspectRatio: \"1 / 1\",\n alignSelf: \"stretch\",\n overflow: \"hidden\",\n \"& svg\": {\n position: \"absolute\",\n ...shorthands.inset(0),\n width: \"100%\",\n height: \"100%\",\n },\n \"& img\": {\n position: \"absolute\",\n ...shorthands.inset(0),\n width: \"100%\",\n height: \"100%\",\n objectFit: \"contain\",\n },\n },\n\n // Content\n content: {\n display: \"grid\",\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n gridAutoRows: \"min-content\",\n alignItems: \"center\",\n columnGap: tokens.spacingElement2,\n paddingTop: tokens.spacingElement1,\n paddingBottom: tokens.spacingElement1,\n [`&:has([${SLOT_ATTR}=\"option-card-control\"])`]: {\n gridTemplateColumns: \"1fr auto\",\n },\n },\n\n // Title\n title: {\n gridColumnStart: 1,\n gridRowStart: 1,\n minWidth: 0,\n alignSelf: \"center\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontWeight: tokens.fontWeightSemibold,\n },\n\n // Description\n description: {\n gridColumnStart: 1,\n gridRowStart: 2,\n minWidth: 0,\n overflowWrap: \"break-word\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightNormal,\n color: tokens.grayA11,\n },\n\n // Control\n control: {\n gridColumnStart: 2,\n gridRowStart: 1,\n alignSelf: \"center\",\n justifySelf: \"end\",\n },\n\n // Radio glyph\n radioOuter: {\n display: \"grid\",\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n placeContent: \"center\",\n borderRadius: \"9999px\",\n ...shorthands.border(\"1px\", \"solid\", tokens.accentA7),\n backgroundColor: tokens.semAccentSoft,\n transitionProperty: \"border-color\",\n transitionDuration: \"150ms\",\n },\n radioDot: {\n width: \"0.5rem\",\n height: \"0.5rem\",\n borderRadius: \"9999px\",\n backgroundColor: tokens.semAccentSolid,\n opacity: 0,\n transitionProperty: \"opacity\",\n transitionDuration: \"150ms\",\n },\n\n // Checkbox glyph\n checkboxOuter: {\n display: \"grid\",\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n placeContent: \"center\",\n ...shorthands.borderRadius(\"4px\"),\n ...shorthands.border(\"1px\", \"solid\", tokens.accentA7),\n backgroundColor: tokens.semAccentSoft,\n color: tokens.accentContrast,\n transitionProperty: \"background-color, border-color\",\n transitionDuration: \"150ms\",\n },\n checkboxCheck: {\n width: \"0.75rem\",\n height: \"0.75rem\",\n opacity: 0,\n transitionProperty: \"opacity\",\n transitionDuration: \"150ms\",\n },\n\n // Switch glyph\n switchTrack: {\n display: \"inline-flex\",\n height: \"1.25rem\",\n width: \"2.125rem\",\n flexShrink: 0,\n alignItems: \"center\",\n borderRadius: \"9999px\",\n ...shorthands.border(\"1px\", \"solid\", \"transparent\"),\n backgroundColor: tokens.grayA3,\n transitionProperty: \"background-color\",\n transitionDuration: \"150ms\",\n },\n switchThumb: {\n display: \"block\",\n width: \"1rem\",\n height: \"1rem\",\n transform: \"translateX(1px)\",\n borderRadius: \"9999px\",\n backgroundColor: tokens.grayContrast,\n // v1 shadow-xs; no shadow tokens in this package.\n boxShadow: \"0 1px 2px 0 #0000000d\",\n transitionProperty: \"transform\",\n transitionDuration: \"150ms\",\n },\n})\n\n// ── Control Glyphs ─────────────────────────────────────────────────────────\n\nconst CheckIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"m382-354 339-339q12-12 28-12t28 12q12 12 12 28.5T777-636L410-268q-12 12-28 12t-28-12L182-440q-12-12-11.5-28.5T183-497q12-12 28.5-12t28.5 12l142 143Z\" />\n </svg>\n)\n\nconst RadioGlyph = () => {\n const styles = useStyles()\n return (\n <span\n className={styles.radioOuter}\n {...{ [SLOT_ATTR]: \"option-card-radio-outer\" }}\n >\n <span\n className={styles.radioDot}\n {...{ [SLOT_ATTR]: \"option-card-radio-dot\" }}\n />\n </span>\n )\n}\n\nconst CheckboxGlyph = () => {\n const styles = useStyles()\n return (\n <span\n className={styles.checkboxOuter}\n {...{ [SLOT_ATTR]: \"option-card-checkbox-outer\" }}\n >\n <CheckIcon\n className={styles.checkboxCheck}\n {...{ [SLOT_ATTR]: \"option-card-checkbox-check\" }}\n />\n </span>\n )\n}\n\nconst SwitchGlyph = () => {\n const styles = useStyles()\n return (\n <span\n className={styles.switchTrack}\n {...{ [SLOT_ATTR]: \"option-card-switch-track\" }}\n >\n <span\n className={styles.switchThumb}\n {...{ [SLOT_ATTR]: \"option-card-switch-thumb\" }}\n />\n </span>\n )\n}\n\n// ── OptionCardGroup ────────────────────────────────────────────────────────\n\nexport type OptionCardGroupProps = React.ComponentProps<\n typeof ToggleGroupPrimitive.Root\n> & {\n layout?: OptionCardLayout\n}\n\nexport const OptionCardGroup = React.forwardRef<\n React.ComponentRef<typeof ToggleGroupPrimitive.Root>,\n OptionCardGroupProps\n>(function OptionCardGroup(\n { className, layout = DEFAULT_LAYOUT, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <OptionCardGroupContext.Provider value={{ type: props.type, layout }}>\n <ToggleGroupPrimitive.Root\n ref={ref}\n data-slot=\"option-card-group\"\n {...{ [SLOT_ATTR]: \"option-card-group\" }}\n data-layout={layout}\n {...(props.type === \"single\" ? { role: \"radiogroup\" } : {})}\n className={mergeClasses(styles.group, styles[layout], className)}\n {...props}\n />\n </OptionCardGroupContext.Provider>\n )\n})\n\n// ── OptionCardControl ──────────────────────────────────────────────────────\n\nexport type OptionCardControlProps = React.ComponentProps<\"span\"> & {\n type?: OptionCardControlType\n}\n\nexport const OptionCardControl = React.forwardRef<\n HTMLSpanElement,\n OptionCardControlProps\n>(function OptionCardControl({ className, type, ...props }, ref) {\n const styles = useStyles()\n const card = React.useContext(OptionCardContext)\n const register = card?.registerType\n\n React.useEffect(() => {\n if (type && register) register(type)\n }, [type, register])\n\n const resolved = type ?? card?.controlType ?? \"checkbox\"\n if (resolved === \"none\") return null\n\n return (\n <span\n ref={ref}\n aria-hidden=\"true\"\n data-slot=\"option-card-control\"\n {...{ [SLOT_ATTR]: \"option-card-control\" }}\n className={mergeClasses(styles.control, className)}\n {...props}\n >\n {resolved === \"radio\" ? (\n <RadioGlyph />\n ) : resolved === \"switch\" ? (\n <SwitchGlyph />\n ) : (\n <CheckboxGlyph />\n )}\n </span>\n )\n})\n\n// ── OptionCardMedia ────────────────────────────────────────────────────────\n\nexport type OptionCardMediaVariant = \"icon\" | \"illustration\"\n\nexport type OptionCardMediaProps = React.ComponentProps<\"span\"> & {\n variant?: OptionCardMediaVariant\n}\n\nexport const OptionCardMedia = React.forwardRef<\n HTMLSpanElement,\n OptionCardMediaProps\n>(function OptionCardMedia({ className, variant = \"icon\", ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n aria-hidden=\"true\"\n data-slot=\"option-card-media\"\n {...{ [SLOT_ATTR]: \"option-card-media\" }}\n data-variant={variant}\n className={mergeClasses(\n styles.mediaRoot,\n variant === \"illustration\"\n ? styles.mediaIllustration\n : styles.mediaIcon,\n className\n )}\n {...props}\n />\n )\n})\n\n// ── OptionCardTitle ────────────────────────────────────────────────────────\n\nexport type OptionCardTitleProps = React.ComponentProps<\"span\">\n\nexport const OptionCardTitle = React.forwardRef<\n HTMLSpanElement,\n OptionCardTitleProps\n>(function OptionCardTitle({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"option-card-title\"\n {...{ [SLOT_ATTR]: \"option-card-title\" }}\n className={mergeClasses(styles.title, className)}\n {...props}\n />\n )\n})\n\n// ── OptionCardDescription ──────────────────────────────────────────────────\n\nexport type OptionCardDescriptionProps = React.ComponentProps<\"span\">\n\nexport const OptionCardDescription = React.forwardRef<\n HTMLSpanElement,\n OptionCardDescriptionProps\n>(function OptionCardDescription({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"option-card-description\"\n {...{ [SLOT_ATTR]: \"option-card-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n />\n )\n})\n\n// ── OptionCardContent ──────────────────────────────────────────────────────\n\nexport type OptionCardContentProps = React.ComponentProps<\"span\">\n\nconst hasControl = (children: React.ReactNode) =>\n React.Children.toArray(children).some(\n (c) => React.isValidElement(c) && c.type === OptionCardControl\n )\n\nexport const OptionCardContent = React.forwardRef<\n HTMLSpanElement,\n OptionCardContentProps\n>(function OptionCardContent({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"option-card-content\"\n {...{ [SLOT_ATTR]: \"option-card-content\" }}\n className={mergeClasses(styles.content, className)}\n {...props}\n >\n {children}\n {!hasControl(children) && <OptionCardControl />}\n </span>\n )\n})\n\n// ── OptionCard ─────────────────────────────────────────────────────────────\n\nexport type OptionCardProps = Omit<\n React.ComponentProps<\"button\">,\n \"onChange\" | \"title\"\n> & {\n /** Value of this option. Required inside an {@link OptionCardGroup}. */\n value?: string\n /** Controlled selected state for a standalone (group-less) card. */\n pressed?: boolean\n /** Uncontrolled default selected state for a standalone card. */\n defaultPressed?: boolean\n /** Fired when a standalone card is toggled. */\n onPressedChange?: (pressed: boolean) => void\n}\n\nconst isPart = (node: React.ReactNode, ...parts: React.ElementType[]) =>\n React.isValidElement(node) && parts.includes(node.type as React.ElementType)\n\nexport const OptionCard = React.forwardRef<HTMLButtonElement, OptionCardProps>(\n function OptionCard(\n {\n className,\n children,\n value,\n pressed,\n defaultPressed,\n onPressedChange,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n const group = React.useContext(OptionCardGroupContext)\n const inGroup = group !== null\n\n const fallbackId = React.useId()\n if (\n process.env.NODE_ENV !== \"production\" &&\n inGroup &&\n value === undefined\n ) {\n console.warn(MISSING_VALUE_WARNING)\n }\n\n const [internalPressed, setInternalPressed] = React.useState(\n defaultPressed ?? false\n )\n const isControlled = pressed !== undefined\n const currentPressed = isControlled ? pressed : internalPressed\n const handlePressedChange = (next: boolean) => {\n if (!isControlled) setInternalPressed(next)\n onPressedChange?.(next)\n }\n\n const groupControlType: OptionCardControlType = inGroup\n ? group.type === \"multiple\"\n ? \"checkbox\"\n : \"radio\"\n : \"checkbox\"\n const [controlType, setControlType] =\n React.useState<OptionCardControlType>(groupControlType)\n const ctx = React.useMemo<OptionCardContextValue>(\n () => ({ controlType, registerType: setControlType }),\n [controlType]\n )\n\n const childArray = React.Children.toArray(children)\n const hasContentChild = childArray.some((c) => isPart(c, OptionCardContent))\n const media = childArray.filter((c) => isPart(c, OptionCardMedia))\n const rest = childArray.filter((c) => !isPart(c, OptionCardMedia))\n const content = hasContentChild ? (\n rest\n ) : (\n <OptionCardContent>\n <OptionCardTitle>{rest}</OptionCardTitle>\n </OptionCardContent>\n )\n\n const body = (\n <>\n {media}\n {content}\n </>\n )\n\n if (inGroup) {\n return (\n <OptionCardContext.Provider value={ctx}>\n <ToggleGroupPrimitive.Item\n ref={ref}\n data-slot=\"option-card\"\n {...{ [SLOT_ATTR]: \"option-card\" }}\n value={value ?? fallbackId}\n className={mergeClasses(styles.card, className)}\n {...props}\n >\n {body}\n </ToggleGroupPrimitive.Item>\n </OptionCardContext.Provider>\n )\n }\n\n const standaloneRole = controlType === \"switch\" ? \"switch\" : \"checkbox\"\n\n return (\n <OptionCardContext.Provider value={ctx}>\n <TogglePrimitive.Root\n ref={ref}\n data-slot=\"option-card\"\n {...{ [SLOT_ATTR]: \"option-card\" }}\n pressed={currentPressed}\n onPressedChange={handlePressedChange}\n role={standaloneRole}\n aria-checked={currentPressed}\n aria-pressed={undefined}\n className={mergeClasses(styles.card, className)}\n {...props}\n >\n {body}\n </TogglePrimitive.Root>\n </OptionCardContext.Provider>\n )\n }\n)\n"],"names":["DEFAULT_LAYOUT","MISSING_VALUE_WARNING","OptionCardGroupContext","React","OptionCardContext","useStyles","makeZenithStyles","shorthands","tokens.spacingGroup1","tokens.spacingElement3","tokens.radiusLg","tokens.textSm","tokens.leadingSm","tokens.fontWeightNormal","tokens.grayA12","tokens.accentA8","tokens.semAccentSoft","SLOT_ATTR","tokens.semAccentSolid","tokens.semAccentLight","tokens.spacingElement2","tokens.spacingElement1","tokens.fontWeightSemibold","tokens.textXs","tokens.leadingXs","tokens.grayA11","tokens.accentA7","tokens.accentContrast","tokens.grayA3","tokens.grayContrast","CheckIcon","props","jsx","RadioGlyph","styles","CheckboxGlyph","SwitchGlyph","OptionCardGroup","className","layout","ref","ToggleGroupPrimitive.Root","mergeClasses","OptionCardControl","type","card","register","resolved","OptionCardMedia","variant","OptionCardTitle","OptionCardDescription","hasControl","children","c","OptionCardContent","jsxs","isPart","node","parts","OptionCard","value","pressed","defaultPressed","onPressedChange","group","inGroup","fallbackId","internalPressed","setInternalPressed","isControlled","currentPressed","handlePressedChange","next","groupControlType","controlType","setControlType","ctx","childArray","hasContentChild","media","rest","body","Fragment","ToggleGroupPrimitive.Item","standaloneRole","TogglePrimitive.Root"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"option-card.js","sources":["../../../src/components/option-card/option-card.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport * as ToggleGroupPrimitive from \"@radix-ui/react-toggle-group\"\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 DEFAULT_LAYOUT = \"grid\" as const\n\nconst MISSING_VALUE_WARNING =\n \"OptionCard: a card inside an OptionCardGroup is missing a `value`. \" +\n \"Give each card a unique `value` so it can be selected and controlled.\"\n\n/** The trailing control glyph an {@link OptionCard} shows for its selected state. */\nexport type OptionCardControlType = \"radio\" | \"checkbox\" | \"switch\" | \"none\"\n\nexport type OptionCardLayout = \"grid\" | \"row\" | \"column\"\n\n// ── Group context ──────────────────────────────────────────────────────────\ntype OptionCardGroupContextValue = {\n type?: \"single\" | \"multiple\"\n layout: OptionCardLayout\n}\nconst OptionCardGroupContext =\n React.createContext<OptionCardGroupContextValue | null>(null)\n\n// ── Card context ───────────────────────────────────────────────────────────\ntype OptionCardContextValue = {\n controlType: OptionCardControlType\n registerType: (type: OptionCardControlType) => void\n}\nconst OptionCardContext = React.createContext<OptionCardContextValue | null>(\n null\n)\n\n// ── Styles ─────────────────────────────────────────────────────────────────\n\nconst useStyles = makeZenithStyles({\n // Group layouts\n group: {\n // The GROUP only lays out. v1's group base class is literally \"\" -- every border, padding and\n // interaction style below used to live here, copied from v1's CARD class onto the wrong element,\n // while `styles.card` and `styles[layout]` were read but never declared. See make-styles.ts for\n // why tsc accepted that for as long as it did.\n display: \"grid\",\n ...shorthands.gap(tokens.spacingGroup1),\n },\n\n // v1: grid-cols-[repeat(auto-fit,minmax(200px,1fr))]\n grid: {\n gridTemplateColumns: \"repeat(auto-fit, minmax(200px, 1fr))\",\n },\n // v1: grid-flow-col auto-cols-fr -- equal-width columns in one non-wrapping row, so options read\n // as equal-weight peers regardless of their content.\n row: {\n gridAutoFlow: \"column\",\n gridAutoColumns: \"minmax(0, 1fr)\",\n },\n // v1: plain `grid` with no template. One column, stacked.\n column: {},\n\n card: {\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n // v1 gap-3 = 0.75rem. No token: the semantic scale has no 0.75rem step.\n ...shorthands.gap(tokens.spacingElement3),\n overflow: \"hidden\",\n ...shorthands.borderRadius(tokens.radiusLg),\n // Not currentColor: that picked up this rule's `color: grayA12` and painted a near-black\n // edge. The predecessor's bare `border` resolved to a subtle grey; grayA6 is its match.\n ...shorthands.border(\"1px\", \"solid\", tokens.grayA6),\n ...shorthands.paddingInline(tokens.spacingElement3),\n ...shorthands.paddingBlock(\"0.375rem\"),\n textAlign: \"left\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n fontWeight: tokens.fontWeightNormal,\n color: tokens.grayA12,\n backgroundColor: \"transparent\",\n transitionProperty: \"color, background-color, border-color, box-shadow\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n cursor: \"pointer\",\n userSelect: \"none\",\n height: \"auto\",\n minWidth: \"0\",\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \":disabled, &[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n \"&[data-state='on']\": {\n backgroundColor: tokens.accentSoft,\n ...shorthands.borderColor(tokens.accentA8),\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-radio-outer\"]`]: {\n ...shorthands.borderColor(tokens.accentSolid),\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-radio-dot\"]`]: {\n opacity: 1,\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-checkbox-outer\"]`]: {\n ...shorthands.borderColor(\"transparent\"),\n backgroundColor: tokens.accentSolid,\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-checkbox-check\"]`]: {\n opacity: 1,\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-switch-track\"]`]: {\n backgroundColor: tokens.accentSolid,\n },\n [`&[data-state='on'] [${SLOT_ATTR}=\"option-card-switch-thumb\"]`]: {\n transform: \"translateX(calc(100% - 1px))\",\n },\n },\n\n // Media\n mediaRoot: {\n flexShrink: 0,\n },\n mediaIcon: {\n display: \"grid\",\n width: \"2.5rem\",\n height: \"2.5rem\",\n placeContent: \"center\",\n alignSelf: \"start\",\n ...shorthands.borderRadius(tokens.radiusLg),\n backgroundColor: tokens.accentSoft,\n color: tokens.accentLight,\n \"& svg\": {\n width: \"1.25rem\",\n height: \"1.25rem\",\n },\n },\n mediaIllustration: {\n position: \"relative\",\n aspectRatio: \"1 / 1\",\n alignSelf: \"stretch\",\n overflow: \"hidden\",\n \"& svg\": {\n position: \"absolute\",\n ...shorthands.inset(0),\n width: \"100%\",\n height: \"100%\",\n },\n \"& img\": {\n position: \"absolute\",\n ...shorthands.inset(0),\n width: \"100%\",\n height: \"100%\",\n objectFit: \"contain\",\n },\n },\n\n // Content\n content: {\n display: \"grid\",\n minWidth: 0,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n gridAutoRows: \"min-content\",\n alignItems: \"center\",\n columnGap: tokens.spacingElement2,\n paddingTop: tokens.spacingElement1,\n paddingBottom: tokens.spacingElement1,\n [`&:has([${SLOT_ATTR}=\"option-card-control\"])`]: {\n gridTemplateColumns: \"1fr auto\",\n },\n },\n\n // Title\n title: {\n gridColumnStart: 1,\n gridRowStart: 1,\n minWidth: 0,\n alignSelf: \"center\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontWeight: tokens.fontWeightSemibold,\n },\n\n // Description\n description: {\n gridColumnStart: 1,\n gridRowStart: 2,\n minWidth: 0,\n overflowWrap: \"break-word\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightNormal,\n color: tokens.grayA11,\n },\n\n // Control\n control: {\n gridColumnStart: 2,\n gridRowStart: 1,\n alignSelf: \"center\",\n justifySelf: \"end\",\n },\n\n // Radio glyph\n radioOuter: {\n display: \"grid\",\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n placeContent: \"center\",\n borderRadius: \"9999px\",\n ...shorthands.border(\"1px\", \"solid\", tokens.accentA7),\n backgroundColor: tokens.accentSoft,\n transitionProperty: \"border-color\",\n transitionDuration: \"150ms\",\n },\n radioDot: {\n width: \"0.5rem\",\n height: \"0.5rem\",\n borderRadius: \"9999px\",\n backgroundColor: tokens.accentSolid,\n opacity: 0,\n transitionProperty: \"opacity\",\n transitionDuration: \"150ms\",\n },\n\n // Checkbox glyph\n checkboxOuter: {\n display: \"grid\",\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n placeContent: \"center\",\n ...shorthands.borderRadius(\"4px\"),\n ...shorthands.border(\"1px\", \"solid\", tokens.accentA7),\n backgroundColor: tokens.accentSoft,\n color: tokens.accentContrast,\n transitionProperty: \"background-color, border-color\",\n transitionDuration: \"150ms\",\n },\n checkboxCheck: {\n width: \"0.75rem\",\n height: \"0.75rem\",\n opacity: 0,\n transitionProperty: \"opacity\",\n transitionDuration: \"150ms\",\n },\n\n // Switch glyph\n switchTrack: {\n display: \"inline-flex\",\n height: \"1.25rem\",\n width: \"2.125rem\",\n flexShrink: 0,\n alignItems: \"center\",\n borderRadius: \"9999px\",\n ...shorthands.border(\"1px\", \"solid\", \"transparent\"),\n backgroundColor: tokens.grayA3,\n transitionProperty: \"background-color\",\n transitionDuration: \"150ms\",\n },\n switchThumb: {\n display: \"block\",\n width: \"1rem\",\n height: \"1rem\",\n transform: \"translateX(1px)\",\n borderRadius: \"9999px\",\n backgroundColor: tokens.grayContrast,\n // v1 shadow-xs; no shadow tokens in this package.\n boxShadow: \"0 1px 2px 0 #0000000d\",\n transitionProperty: \"transform\",\n transitionDuration: \"150ms\",\n },\n})\n\n// ── Control Glyphs ─────────────────────────────────────────────────────────\n\nconst CheckIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"m382-354 339-339q12-12 28-12t28 12q12 12 12 28.5T777-636L410-268q-12 12-28 12t-28-12L182-440q-12-12-11.5-28.5T183-497q12-12 28.5-12t28.5 12l142 143Z\" />\n </svg>\n)\n\nconst RadioGlyph = () => {\n const styles = useStyles()\n return (\n <span\n className={styles.radioOuter}\n {...{ [SLOT_ATTR]: \"option-card-radio-outer\" }}\n >\n <span\n className={styles.radioDot}\n {...{ [SLOT_ATTR]: \"option-card-radio-dot\" }}\n />\n </span>\n )\n}\n\nconst CheckboxGlyph = () => {\n const styles = useStyles()\n return (\n <span\n className={styles.checkboxOuter}\n {...{ [SLOT_ATTR]: \"option-card-checkbox-outer\" }}\n >\n <CheckIcon\n className={styles.checkboxCheck}\n {...{ [SLOT_ATTR]: \"option-card-checkbox-check\" }}\n />\n </span>\n )\n}\n\nconst SwitchGlyph = () => {\n const styles = useStyles()\n return (\n <span\n className={styles.switchTrack}\n {...{ [SLOT_ATTR]: \"option-card-switch-track\" }}\n >\n <span\n className={styles.switchThumb}\n {...{ [SLOT_ATTR]: \"option-card-switch-thumb\" }}\n />\n </span>\n )\n}\n\n// ── OptionCardGroup ────────────────────────────────────────────────────────\n\nexport type OptionCardGroupProps = React.ComponentProps<\n typeof ToggleGroupPrimitive.Root\n> & {\n layout?: OptionCardLayout\n}\n\nexport const OptionCardGroup = React.forwardRef<\n React.ComponentRef<typeof ToggleGroupPrimitive.Root>,\n OptionCardGroupProps\n>(function OptionCardGroup(\n { className, layout = DEFAULT_LAYOUT, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <OptionCardGroupContext.Provider value={{ type: props.type, layout }}>\n <ToggleGroupPrimitive.Root\n ref={ref}\n data-slot=\"option-card-group\"\n {...{ [SLOT_ATTR]: \"option-card-group\" }}\n data-layout={layout}\n {...(props.type === \"single\" ? { role: \"radiogroup\" } : {})}\n className={mergeClasses(styles.group, styles[layout], className)}\n {...props}\n />\n </OptionCardGroupContext.Provider>\n )\n})\n\n// ── OptionCardControl ──────────────────────────────────────────────────────\n\nexport type OptionCardControlProps = React.ComponentProps<\"span\"> & {\n type?: OptionCardControlType\n}\n\nexport const OptionCardControl = React.forwardRef<\n HTMLSpanElement,\n OptionCardControlProps\n>(function OptionCardControl({ className, type, ...props }, ref) {\n const styles = useStyles()\n const card = React.useContext(OptionCardContext)\n const register = card?.registerType\n\n React.useEffect(() => {\n if (type && register) register(type)\n }, [type, register])\n\n const resolved = type ?? card?.controlType ?? \"checkbox\"\n if (resolved === \"none\") return null\n\n return (\n <span\n ref={ref}\n aria-hidden=\"true\"\n data-slot=\"option-card-control\"\n {...{ [SLOT_ATTR]: \"option-card-control\" }}\n className={mergeClasses(styles.control, className)}\n {...props}\n >\n {resolved === \"radio\" ? (\n <RadioGlyph />\n ) : resolved === \"switch\" ? (\n <SwitchGlyph />\n ) : (\n <CheckboxGlyph />\n )}\n </span>\n )\n})\n\n// ── OptionCardMedia ────────────────────────────────────────────────────────\n\nexport type OptionCardMediaVariant = \"icon\" | \"illustration\"\n\nexport type OptionCardMediaProps = React.ComponentProps<\"span\"> & {\n variant?: OptionCardMediaVariant\n}\n\nexport const OptionCardMedia = React.forwardRef<\n HTMLSpanElement,\n OptionCardMediaProps\n>(function OptionCardMedia({ className, variant = \"icon\", ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n aria-hidden=\"true\"\n data-slot=\"option-card-media\"\n {...{ [SLOT_ATTR]: \"option-card-media\" }}\n data-variant={variant}\n className={mergeClasses(\n styles.mediaRoot,\n variant === \"illustration\"\n ? styles.mediaIllustration\n : styles.mediaIcon,\n className\n )}\n {...props}\n />\n )\n})\n\n// ── OptionCardTitle ────────────────────────────────────────────────────────\n\nexport type OptionCardTitleProps = React.ComponentProps<\"span\">\n\nexport const OptionCardTitle = React.forwardRef<\n HTMLSpanElement,\n OptionCardTitleProps\n>(function OptionCardTitle({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"option-card-title\"\n {...{ [SLOT_ATTR]: \"option-card-title\" }}\n className={mergeClasses(styles.title, className)}\n {...props}\n />\n )\n})\n\n// ── OptionCardDescription ──────────────────────────────────────────────────\n\nexport type OptionCardDescriptionProps = React.ComponentProps<\"span\">\n\nexport const OptionCardDescription = React.forwardRef<\n HTMLSpanElement,\n OptionCardDescriptionProps\n>(function OptionCardDescription({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"option-card-description\"\n {...{ [SLOT_ATTR]: \"option-card-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n />\n )\n})\n\n// ── OptionCardContent ──────────────────────────────────────────────────────\n\nexport type OptionCardContentProps = React.ComponentProps<\"span\">\n\nconst hasControl = (children: React.ReactNode) =>\n React.Children.toArray(children).some(\n (c) => React.isValidElement(c) && c.type === OptionCardControl\n )\n\nexport const OptionCardContent = React.forwardRef<\n HTMLSpanElement,\n OptionCardContentProps\n>(function OptionCardContent({ className, children, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n data-slot=\"option-card-content\"\n {...{ [SLOT_ATTR]: \"option-card-content\" }}\n className={mergeClasses(styles.content, className)}\n {...props}\n >\n {children}\n {!hasControl(children) && <OptionCardControl />}\n </span>\n )\n})\n\n// ── OptionCard ─────────────────────────────────────────────────────────────\n\nexport type OptionCardProps = Omit<\n React.ComponentProps<\"button\">,\n \"onChange\" | \"title\"\n> & {\n /** Value of this option. Required inside an {@link OptionCardGroup}. */\n value?: string\n /** Controlled selected state for a standalone (group-less) card. */\n pressed?: boolean\n /** Uncontrolled default selected state for a standalone card. */\n defaultPressed?: boolean\n /** Fired when a standalone card is toggled. */\n onPressedChange?: (pressed: boolean) => void\n}\n\nconst isPart = (node: React.ReactNode, ...parts: React.ElementType[]) =>\n React.isValidElement(node) && parts.includes(node.type as React.ElementType)\n\nexport const OptionCard = React.forwardRef<HTMLButtonElement, OptionCardProps>(\n function OptionCard(\n {\n className,\n children,\n value,\n pressed,\n defaultPressed,\n onPressedChange,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n const group = React.useContext(OptionCardGroupContext)\n const inGroup = group !== null\n\n const fallbackId = React.useId()\n if (\n process.env.NODE_ENV !== \"production\" &&\n inGroup &&\n value === undefined\n ) {\n console.warn(MISSING_VALUE_WARNING)\n }\n\n const [internalPressed, setInternalPressed] = React.useState(\n defaultPressed ?? false\n )\n const isControlled = pressed !== undefined\n const currentPressed = isControlled ? pressed : internalPressed\n const handlePressedChange = (next: boolean) => {\n if (!isControlled) setInternalPressed(next)\n onPressedChange?.(next)\n }\n\n const groupControlType: OptionCardControlType = inGroup\n ? group.type === \"multiple\"\n ? \"checkbox\"\n : \"radio\"\n : \"checkbox\"\n const [controlType, setControlType] =\n React.useState<OptionCardControlType>(groupControlType)\n const ctx = React.useMemo<OptionCardContextValue>(\n () => ({ controlType, registerType: setControlType }),\n [controlType]\n )\n\n const childArray = React.Children.toArray(children)\n const hasContentChild = childArray.some((c) => isPart(c, OptionCardContent))\n const media = childArray.filter((c) => isPart(c, OptionCardMedia))\n const rest = childArray.filter((c) => !isPart(c, OptionCardMedia))\n const content = hasContentChild ? (\n rest\n ) : (\n <OptionCardContent>\n <OptionCardTitle>{rest}</OptionCardTitle>\n </OptionCardContent>\n )\n\n const body = (\n <>\n {media}\n {content}\n </>\n )\n\n if (inGroup) {\n return (\n <OptionCardContext.Provider value={ctx}>\n <ToggleGroupPrimitive.Item\n ref={ref}\n data-slot=\"option-card\"\n {...{ [SLOT_ATTR]: \"option-card\" }}\n value={value ?? fallbackId}\n className={mergeClasses(styles.card, className)}\n {...props}\n >\n {body}\n </ToggleGroupPrimitive.Item>\n </OptionCardContext.Provider>\n )\n }\n\n const standaloneRole = controlType === \"switch\" ? \"switch\" : \"checkbox\"\n\n return (\n <OptionCardContext.Provider value={ctx}>\n <TogglePrimitive.Root\n ref={ref}\n data-slot=\"option-card\"\n {...{ [SLOT_ATTR]: \"option-card\" }}\n pressed={currentPressed}\n onPressedChange={handlePressedChange}\n role={standaloneRole}\n aria-checked={currentPressed}\n aria-pressed={undefined}\n className={mergeClasses(styles.card, className)}\n {...props}\n >\n {body}\n </TogglePrimitive.Root>\n </OptionCardContext.Provider>\n )\n }\n)\n"],"names":["DEFAULT_LAYOUT","MISSING_VALUE_WARNING","OptionCardGroupContext","React","OptionCardContext","useStyles","makeZenithStyles","shorthands","tokens.spacingGroup1","tokens.spacingElement3","tokens.radiusLg","tokens.grayA6","tokens.textSm","tokens.leadingSm","tokens.fontWeightNormal","tokens.grayA12","tokens.accentA8","tokens.accentSoft","SLOT_ATTR","tokens.accentSolid","tokens.accentLight","tokens.spacingElement2","tokens.spacingElement1","tokens.fontWeightSemibold","tokens.textXs","tokens.leadingXs","tokens.grayA11","tokens.accentA7","tokens.accentContrast","tokens.grayA3","tokens.grayContrast","CheckIcon","props","jsx","RadioGlyph","styles","CheckboxGlyph","SwitchGlyph","OptionCardGroup","className","layout","ref","ToggleGroupPrimitive.Root","mergeClasses","OptionCardControl","type","card","register","resolved","OptionCardMedia","variant","OptionCardTitle","OptionCardDescription","hasControl","children","c","OptionCardContent","jsxs","isPart","node","parts","OptionCard","value","pressed","defaultPressed","onPressedChange","group","inGroup","fallbackId","internalPressed","setInternalPressed","isControlled","currentPressed","handlePressedChange","next","groupControlType","controlType","setControlType","ctx","childArray","hasContentChild","media","rest","body","Fragment","ToggleGroupPrimitive.Item","standaloneRole","TogglePrimitive.Root"],"mappings":"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"}
|