@epilot/zenith-react 0.2.0-next.4 → 0.2.0-next.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +12 -1
  2. package/codemods/README.md +18 -4
  3. package/codemods/format.ts +86 -0
  4. package/codemods/migrate/from-base-elements.ts +8 -2
  5. package/codemods/migrate/from-volt.ts +8 -2
  6. package/codemods/radix-to-base-ui.ts +300 -12
  7. package/dist/_virtual/_zenith-runtime-family_accordion.js +1 -1
  8. package/dist/_virtual/_zenith-runtime-family_alert-dialog.js +1 -1
  9. package/dist/_virtual/_zenith-runtime-family_avatar.js +1 -1
  10. package/dist/_virtual/_zenith-runtime-family_button.js +1 -1
  11. package/dist/_virtual/_zenith-runtime-family_checkbox.js +1 -1
  12. package/dist/_virtual/_zenith-runtime-family_csp-provider.js +1 -1
  13. package/dist/_virtual/_zenith-runtime-family_dialog.js +1 -1
  14. package/dist/_virtual/_zenith-runtime-family_direction-provider.js +1 -1
  15. package/dist/_virtual/_zenith-runtime-family_menu.js +1 -1
  16. package/dist/_virtual/_zenith-runtime-family_merge-props.js +1 -1
  17. package/dist/_virtual/_zenith-runtime-family_popover.js +1 -1
  18. package/dist/_virtual/_zenith-runtime-family_radio-group.js +1 -1
  19. package/dist/_virtual/_zenith-runtime-family_radio.js +1 -1
  20. package/dist/_virtual/_zenith-runtime-family_scroll-area.js +1 -1
  21. package/dist/_virtual/_zenith-runtime-family_select.js +1 -1
  22. package/dist/_virtual/_zenith-runtime-family_separator.js +1 -1
  23. package/dist/_virtual/_zenith-runtime-family_switch.js +1 -1
  24. package/dist/_virtual/_zenith-runtime-family_tabs.js +1 -1
  25. package/dist/_virtual/_zenith-runtime-family_toast.js +1 -1
  26. package/dist/_virtual/_zenith-runtime-family_toggle-group.js +1 -1
  27. package/dist/_virtual/_zenith-runtime-family_toggle.js +1 -1
  28. package/dist/_virtual/_zenith-runtime-family_tooltip.js +1 -1
  29. package/dist/_virtual/_zenith-runtime-family_use-render.js +1 -1
  30. package/dist/components/accordion/accordion.js +1 -1
  31. package/dist/components/accordion/accordion.js.map +1 -1
  32. package/dist/components/alert-dialog/alert-dialog.js +1 -1
  33. package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
  34. package/dist/components/appearance-boundary/appearance-boundary.js +1 -1
  35. package/dist/components/appearance-boundary/appearance-boundary.js.map +1 -1
  36. package/dist/components/avatar/avatar-group.js +1 -1
  37. package/dist/components/avatar/avatar-group.js.map +1 -1
  38. package/dist/components/avatar/avatar.js +1 -1
  39. package/dist/components/avatar/avatar.js.map +1 -1
  40. package/dist/components/badge/badge.js +1 -1
  41. package/dist/components/badge/badge.js.map +1 -1
  42. package/dist/components/breadcrumb/breadcrumb.js +1 -1
  43. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  44. package/dist/components/button/button.js +1 -1
  45. package/dist/components/button/button.js.map +1 -1
  46. package/dist/components/button-group/button-group.js +1 -1
  47. package/dist/components/button-group/button-group.js.map +1 -1
  48. package/dist/components/callout/callout.js +1 -1
  49. package/dist/components/callout/callout.js.map +1 -1
  50. package/dist/components/card/card.js +1 -1
  51. package/dist/components/card/card.js.map +1 -1
  52. package/dist/components/checkbox/checkbox.js +1 -1
  53. package/dist/components/checkbox/checkbox.js.map +1 -1
  54. package/dist/components/code-block/code-block.js +1 -1
  55. package/dist/components/code-block/code-block.js.map +1 -1
  56. package/dist/components/code-editor/code-editor.js +1 -1
  57. package/dist/components/code-editor/code-editor.js.map +1 -1
  58. package/dist/components/collapsible-sidebar/collapsible-sidebar.js +1 -1
  59. package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
  60. package/dist/components/command/command.js +1 -1
  61. package/dist/components/command/command.js.map +1 -1
  62. package/dist/components/data-table/data-table-body.js +1 -1
  63. package/dist/components/data-table/data-table-body.js.map +1 -1
  64. package/dist/components/data-table/data-table-column-header.js +1 -1
  65. package/dist/components/data-table/data-table-column-header.js.map +1 -1
  66. package/dist/components/data-table/data-table-column-order.js +1 -1
  67. package/dist/components/data-table/data-table-column-order.js.map +1 -1
  68. package/dist/components/data-table/data-table-column-visibility.js +1 -1
  69. package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
  70. package/dist/components/data-table/data-table-content.js +1 -1
  71. package/dist/components/data-table/data-table-content.js.map +1 -1
  72. package/dist/components/data-table/data-table-error.js +1 -1
  73. package/dist/components/data-table/data-table-error.js.map +1 -1
  74. package/dist/components/data-table/data-table-footer.js +1 -1
  75. package/dist/components/data-table/data-table-footer.js.map +1 -1
  76. package/dist/components/data-table/data-table-header-draggable.js +1 -1
  77. package/dist/components/data-table/data-table-header-draggable.js.map +1 -1
  78. package/dist/components/data-table/data-table-header.js +1 -1
  79. package/dist/components/data-table/data-table-header.js.map +1 -1
  80. package/dist/components/data-table/data-table-loading.js +1 -1
  81. package/dist/components/data-table/data-table-loading.js.map +1 -1
  82. package/dist/components/data-table/data-table-resize-handle.js +1 -1
  83. package/dist/components/data-table/data-table-resize-handle.js.map +1 -1
  84. package/dist/components/data-table/data-table-row.js +1 -1
  85. package/dist/components/data-table/data-table-row.js.map +1 -1
  86. package/dist/components/data-table/data-table-toolbar.js +1 -1
  87. package/dist/components/data-table/data-table-toolbar.js.map +1 -1
  88. package/dist/components/data-table/data-table.js +1 -1
  89. package/dist/components/data-table/data-table.js.map +1 -1
  90. package/dist/components/date-range-picker/date-range-picker.js +1 -1
  91. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  92. package/dist/components/date-range-picker/range-calendar.js +1 -1
  93. package/dist/components/date-range-picker/range-calendar.js.map +1 -1
  94. package/dist/components/date-time-picker/calendar.js +1 -1
  95. package/dist/components/date-time-picker/calendar.js.map +1 -1
  96. package/dist/components/date-time-picker/date-time-picker-input.js +1 -1
  97. package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
  98. package/dist/components/date-time-picker/date-time-picker-panel.js +1 -1
  99. package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
  100. package/dist/components/date-time-picker/date-time-picker.js +1 -1
  101. package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
  102. package/dist/components/date-time-picker/time-picker.js +1 -1
  103. package/dist/components/date-time-picker/time-picker.js.map +1 -1
  104. package/dist/components/density-provider/density-provider.js +1 -1
  105. package/dist/components/dialog/dialog.js +1 -1
  106. package/dist/components/dialog/dialog.js.map +1 -1
  107. package/dist/components/drawer/drawer.js +1 -1
  108. package/dist/components/drawer/drawer.js.map +1 -1
  109. package/dist/components/dropdown-menu/dropdown-menu.js +1 -1
  110. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  111. package/dist/components/field/field-combobox.js +190 -181
  112. package/dist/components/field/field-combobox.js.map +1 -1
  113. package/dist/components/field/field-select.js +37 -22
  114. package/dist/components/field/field-select.js.map +1 -1
  115. package/dist/components/field/field.js +1 -1
  116. package/dist/components/field/field.js.map +1 -1
  117. package/dist/components/label/label.js +1 -1
  118. package/dist/components/label/label.js.map +1 -1
  119. package/dist/components/list/list.js +1 -1
  120. package/dist/components/list/list.js.map +1 -1
  121. package/dist/components/option-card/option-card.js +1 -1
  122. package/dist/components/option-card/option-card.js.map +1 -1
  123. package/dist/components/pill/pill.js +1 -1
  124. package/dist/components/pill/pill.js.map +1 -1
  125. package/dist/components/popover/popover.js +1 -1
  126. package/dist/components/popover/popover.js.map +1 -1
  127. package/dist/components/radio/radio.js +1 -1
  128. package/dist/components/radio/radio.js.map +1 -1
  129. package/dist/components/scroll-area/scroll-area.js +1 -1
  130. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  131. package/dist/components/scroll-area/scrollbar-styles.js +1 -1
  132. package/dist/components/scroll-area/scrollbar-styles.js.map +1 -1
  133. package/dist/components/scroll-overflow/scroll-overflow.js +22 -22
  134. package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
  135. package/dist/components/segmented-control/segmented-control.js +133 -122
  136. package/dist/components/segmented-control/segmented-control.js.map +1 -1
  137. package/dist/components/select/select.js +1 -1
  138. package/dist/components/select/select.js.map +1 -1
  139. package/dist/components/separator/separator.js +1 -1
  140. package/dist/components/separator/separator.js.map +1 -1
  141. package/dist/components/skeleton/skeleton.js +1 -1
  142. package/dist/components/skeleton/skeleton.js.map +1 -1
  143. package/dist/components/slot/compose-as-child.js +1 -1
  144. package/dist/components/slot/compose-as-child.js.map +1 -1
  145. package/dist/components/spinner/spinner.js +1 -1
  146. package/dist/components/spinner/spinner.js.map +1 -1
  147. package/dist/components/surface/surface.js +1 -1
  148. package/dist/components/surface/surface.js.map +1 -1
  149. package/dist/components/switch/switch.js +1 -1
  150. package/dist/components/switch/switch.js.map +1 -1
  151. package/dist/components/table/table-pagination.js +1 -1
  152. package/dist/components/table/table-pagination.js.map +1 -1
  153. package/dist/components/table/table.js +1 -1
  154. package/dist/components/table/table.js.map +1 -1
  155. package/dist/components/tabs/tabs.js +1 -1
  156. package/dist/components/tabs/tabs.js.map +1 -1
  157. package/dist/components/text/text.js +1 -1
  158. package/dist/components/text/text.js.map +1 -1
  159. package/dist/components/toast/toast.js +1 -1
  160. package/dist/components/toast/toast.js.map +1 -1
  161. package/dist/components/toggle/toggle-group.js +1 -1
  162. package/dist/components/toggle/toggle-group.js.map +1 -1
  163. package/dist/components/toggle/toggle.js +29 -26
  164. package/dist/components/toggle/toggle.js.map +1 -1
  165. package/dist/components/tooltip/tooltip.js +1 -1
  166. package/dist/components/tooltip/tooltip.js.map +1 -1
  167. package/dist/index.d.ts +1 -1
  168. package/dist/index.js +1 -1
  169. package/dist/lib/clear-button.js +1 -1
  170. package/dist/lib/clear-button.js.map +1 -1
  171. package/dist/packages/tokens/dist/delivery/index.js +1 -1
  172. package/dist/packages/tokens/dist/delivery/index.js.map +1 -1
  173. package/dist/packages/tokens/dist/install.js +1 -1
  174. package/dist/packages/tokens/dist/install.js.map +1 -1
  175. package/dist/renderer/served.js +19 -14
  176. package/dist/renderer/served.js.map +1 -1
  177. package/dist/styles/host-reset.js.map +1 -1
  178. package/dist/styles/make-styles.js +1 -1
  179. package/dist/styles/make-styles.js.map +1 -1
  180. package/dist/styles/text-box.js.map +1 -1
  181. package/dist/tokens.json +1 -1
  182. package/package.json +5 -3
  183. package/scripts/migration-diagnostics-core.mjs +284 -0
  184. package/scripts/migration-sweep.mjs +10 -10
  185. package/testing/setup.cjs +87 -0
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sources":["../../../src/components/list/list.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\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\nexport const useListStyles = makeZenithStyles({\n list: {\n ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\n cursor: \"pointer\",\n textAlign: \"left\",\n fontWeight: tokens.fontWeightMedium,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n },\n groupChevron: {\n ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\n minHeight: 0,\n overflow: \"hidden\",\n },\n\n // Status icons\n statusIconError: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.errorLight,\n },\n statusIconWarning: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.warningLight,\n },\n statusIconSuccess: {\n ...boxModel,\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 = useListStyles()\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 */\nexport type ListContextValue = {\n striped: boolean\n showIndex: boolean\n /** Set only by `SortableList` (`@epilot/zenith-react/list/sortable`). */\n sortable: boolean\n /**\n * The drag-aware row `SortableList` supplies. The root entry never imports dnd-kit, so `ListItem`\n * cannot name it; it renders whatever the surrounding `SortableList` put here.\n */\n SortableItem?: React.ForwardRefExoticComponent<\n ListItemProps & React.RefAttributes<HTMLLIElement>\n >\n}\n\n/** Internal: shared with `list-sortable.tsx`, deliberately not exported from the package index. */\nexport const 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 */\nexport const 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 = React.ComponentProps<\"ol\"> & {\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}\n\n/**\n * Internal: the `<ol>` itself, with the index injected into each `ListItem`. Shared by `List` and\n * `SortableList` so both render identical markup; the context provider stays with the caller.\n */\nexport const ListRoot = React.forwardRef<\n HTMLOListElement,\n Omit<ListProps, \"striped\" | \"showIndex\">\n>(function ListRoot({ className, density, children, ...props }, ref) {\n const styles = useListStyles()\n const domDensity = canonicalDomDensity(density)\n\n const indexedItems = React.Children.toArray(children)\n .filter(React.isValidElement)\n .map((child, index) =>\n child.type === ListItem\n ? React.cloneElement(child as React.ReactElement<ListItemProps>, {\n index,\n })\n : child\n )\n\n return (\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\nexport const List = React.forwardRef<HTMLOListElement, ListProps>(function List(\n { striped = false, showIndex = false, ...props },\n ref\n) {\n return (\n <listContext.Provider value={{ striped, showIndex, sortable: false }}>\n <ListRoot ref={ref} {...props} />\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 = useListStyles()\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 = useListStyles()\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 = useListStyles()\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 on every item of a `SortableList`. */\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\n/** The slice of dnd-kit's activator listeners a row uses; typed here so this module stays dnd-free. */\nexport type ListItemDragListeners = {\n onPointerDown?: React.PointerEventHandler<HTMLLIElement>\n onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>\n}\n\nexport type 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?: ListItemDragListeners\n /** dnd-kit a11y attributes for the keyboard drag handle. */\n attributes?: React.ButtonHTMLAttributes<HTMLButtonElement>\n}\n\nexport const 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 = useListStyles()\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={sortable ? listeners?.onPointerDown : undefined}\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={listeners?.onKeyDown}\n >\n <GripVerticalIcon />\n </button>\n )}\n </li>\n )\n }\n)\n\n// ── ListItem ───────────────────────────────────────────────────────────────\n\nexport const ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n function ListItem(props, ref) {\n const { SortableItem } = useListContext()\n\n if (SortableItem) {\n return <SortableItem 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 = useListStyles()\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 = useListStyles()\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 = useListStyles()\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","useListStyles","makeZenithStyles","boxModel","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","ListRoot","className","children","ref","domDensity","indexedItems","child","index","ListItem","SLOT_ATTR","mergeClasses","List","striped","showIndex","ListItemActions","e","ListItemText","ListItemDescription","ListItemBody","value","setNodeRef","setActivatorNodeRef","style","isDragging","dropEdge","listeners","attributes","forwardedRef","sortable","interactive","childArray","actionsSlot","contentChildren","handleRef","node","statusStyle","interactiveStyle","SortableItem","ListGroupContext","ListGroup","openProp","defaultOpen","onOpenChange","uncontrolledOpen","setUncontrolledOpen","open","contentId","setOpen","next","ListGroupLabel","group","ListGroupContent","items"],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sources":["../../../src/components/list/list.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\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\nexport const useListStyles = makeZenithStyles({\n list: {\n ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\n cursor: \"pointer\",\n textAlign: \"left\",\n fontWeight: tokens.fontWeightMedium,\n backgroundColor: \"transparent\",\n ...shorthands.border(\"0\"),\n },\n groupChevron: {\n ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\n minHeight: 0,\n overflow: \"hidden\",\n },\n\n // Status icons\n statusIconError: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.errorLight,\n },\n statusIconWarning: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n color: tokens.warningLight,\n },\n statusIconSuccess: {\n ...boxModel,\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 = useListStyles()\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 */\nexport type ListContextValue = {\n striped: boolean\n showIndex: boolean\n /** Set only by `SortableList` (`@epilot/zenith-react/list/sortable`). */\n sortable: boolean\n /**\n * The drag-aware row `SortableList` supplies. The root entry never imports dnd-kit, so `ListItem`\n * cannot name it; it renders whatever the surrounding `SortableList` put here.\n */\n SortableItem?: React.ForwardRefExoticComponent<\n ListItemProps & React.RefAttributes<HTMLLIElement>\n >\n}\n\n/** Internal: shared with `list-sortable.tsx`, deliberately not exported from the package index. */\nexport const 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 */\nexport const 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 = React.ComponentProps<\"ol\"> & {\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}\n\n/**\n * Internal: the `<ol>` itself, with the index injected into each `ListItem`. Shared by `List` and\n * `SortableList` so both render identical markup; the context provider stays with the caller.\n */\nexport const ListRoot = React.forwardRef<\n HTMLOListElement,\n Omit<ListProps, \"striped\" | \"showIndex\">\n>(function ListRoot({ className, density, children, ...props }, ref) {\n const styles = useListStyles()\n const domDensity = canonicalDomDensity(density)\n\n const indexedItems = React.Children.toArray(children)\n .filter(React.isValidElement)\n .map((child, index) =>\n child.type === ListItem\n ? React.cloneElement(child as React.ReactElement<ListItemProps>, {\n index,\n })\n : child\n )\n\n return (\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\nexport const List = React.forwardRef<HTMLOListElement, ListProps>(function List(\n { striped = false, showIndex = false, ...props },\n ref\n) {\n return (\n <listContext.Provider value={{ striped, showIndex, sortable: false }}>\n <ListRoot ref={ref} {...props} />\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 = useListStyles()\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 = useListStyles()\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 = useListStyles()\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 on every item of a `SortableList`. */\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\n/** The slice of dnd-kit's activator listeners a row uses; typed here so this module stays dnd-free. */\nexport type ListItemDragListeners = {\n onPointerDown?: React.PointerEventHandler<HTMLLIElement>\n onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>\n}\n\nexport type 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?: ListItemDragListeners\n /** dnd-kit a11y attributes for the keyboard drag handle. */\n attributes?: React.ButtonHTMLAttributes<HTMLButtonElement>\n}\n\nexport const 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 = useListStyles()\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={sortable ? listeners?.onPointerDown : undefined}\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={listeners?.onKeyDown}\n >\n <GripVerticalIcon />\n </button>\n )}\n </li>\n )\n }\n)\n\n// ── ListItem ───────────────────────────────────────────────────────────────\n\nexport const ListItem = React.forwardRef<HTMLLIElement, ListItemProps>(\n function ListItem(props, ref) {\n const { SortableItem } = useListContext()\n\n if (SortableItem) {\n return <SortableItem 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 = useListStyles()\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 = useListStyles()\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 = useListStyles()\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","useListStyles","makeZenithStyles","boxModel","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","ListRoot","className","children","ref","domDensity","indexedItems","child","index","ListItem","SLOT_ATTR","mergeClasses","List","striped","showIndex","ListItemActions","e","ListItemText","ListItemDescription","ListItemBody","value","setNodeRef","setActivatorNodeRef","style","isDragging","dropEdge","listeners","attributes","forwardedRef","sortable","interactive","childArray","actionsSlot","contentChildren","handleRef","node","statusStyle","interactiveStyle","SortableItem","ListGroupContext","ListGroup","openProp","defaultOpen","onOpenChange","uncontrolledOpen","setUncontrolledOpen","open","contentId","setOpen","next","ListGroupLabel","group","ListGroupContent","items"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as o, jsxs as _, Fragment as Q } from "react/jsx-runtime";
2
2
  import * as n from "react";
3
3
  import { Toggle as oo } from "../../_virtual/_zenith-runtime-family_toggle.js";
4
- import { mergeClasses as m, SLOT_ATTR as r, shorthands as s } from "@epilot/zenith-runtime/v1";
4
+ import { mergeClasses as m, SLOT_ATTR as r, shorthands as s } from "@epilot/zenith-runtime/v1/core.js";
5
5
  import { makeZenithStyles as to } from "../../styles/make-styles.js";
6
6
  import { boxModel as l, nativeControl as ro } from "../../styles/host-reset.js";
7
7
  import { grayContrast as eo, grayA3 as no, accentContrast as io, accentSoft as C, accentSolid as b, grayA11 as ao, fontWeightNormal as P, leadingXs as so, textXs as co, fontWeightSemibold as lo, spacingElement1 as W, spacingElement2 as po, accentLight as uo, accentA8 as E, grayA12 as ho, leadingSm as mo, textSm as go, accentA7 as L, radiusLg as $, spacingElement3 as q, grayA6 as fo, spacingGroup1 as Co } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"option-card.js","sources":["../../../src/components/option-card/option-card.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport {\n respectDefaultPrevented,\n type ToggleChangeDetails,\n} from \"../toggle/toggle\"\nimport {\n ToggleGroupItemRoot,\n ToggleGroupRoot,\n type ToggleGroupMultipleProps,\n type ToggleGroupSingleProps,\n} from \"../toggle/toggle-group\"\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 ...boxModel,\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 ...nativeControl,\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-pressed]\": {\n backgroundColor: tokens.accentSoft,\n ...shorthands.borderColor(tokens.accentA8),\n },\n [`&[data-pressed] [${SLOT_ATTR}=\"option-card-radio-outer\"]`]: {\n ...shorthands.borderColor(tokens.accentSolid),\n },\n [`&[data-pressed] [${SLOT_ATTR}=\"option-card-radio-dot\"]`]: {\n opacity: 1,\n },\n [`&[data-pressed] [${SLOT_ATTR}=\"option-card-checkbox-outer\"]`]: {\n ...shorthands.borderColor(\"transparent\"),\n backgroundColor: tokens.accentSolid,\n },\n [`&[data-pressed] [${SLOT_ATTR}=\"option-card-checkbox-check\"]`]: {\n opacity: 1,\n },\n [`&[data-pressed] [${SLOT_ATTR}=\"option-card-switch-track\"]`]: {\n backgroundColor: tokens.accentSolid,\n },\n [`&[data-pressed] [${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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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\ntype OptionCardGroupOwnProps = { layout?: OptionCardLayout }\n\nexport type OptionCardGroupProps =\n | (ToggleGroupSingleProps & OptionCardGroupOwnProps)\n | (ToggleGroupMultipleProps & OptionCardGroupOwnProps)\n\nexport const OptionCardGroup = React.forwardRef<\n HTMLDivElement,\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 <ToggleGroupRoot\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 /**\n * Fired when a standalone card is toggled, with Base UI's change details second.\n * `eventDetails.cancel()` keeps the current state.\n */\n onPressedChange?: (\n pressed: boolean,\n eventDetails: ToggleChangeDetails\n ) => 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 onClick,\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 = (\n next: boolean,\n eventDetails: ToggleChangeDetails\n ) => {\n onPressedChange?.(next, eventDetails)\n if (!isControlled && !eventDetails.isCanceled) setInternalPressed(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 <ToggleGroupItemRoot\n ref={ref}\n data-slot=\"option-card\"\n {...{ [SLOT_ATTR]: \"option-card\" }}\n value={value ?? fallbackId}\n className={mergeClasses(styles.card, className)}\n onClick={onClick}\n {...props}\n >\n {body}\n </ToggleGroupItemRoot>\n </OptionCardContext.Provider>\n )\n }\n\n const standaloneRole = controlType === \"switch\" ? \"switch\" : \"checkbox\"\n\n return (\n <OptionCardContext.Provider value={ctx}>\n <TogglePrimitive\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 // Base UI types the handlers with its own event wrapper; the element is the same\n // <button>, so the caller's button-typed handlers receive the events they declare.\n {...(props as TogglePrimitive.Props)}\n onClick={respectDefaultPrevented(onClick)}\n >\n {body}\n </TogglePrimitive>\n </OptionCardContext.Provider>\n )\n }\n)\n"],"names":["DEFAULT_LAYOUT","MISSING_VALUE_WARNING","OptionCardGroupContext","React","OptionCardContext","useStyles","makeZenithStyles","boxModel","shorthands","tokens.spacingGroup1","nativeControl","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","ToggleGroupRoot","mergeClasses","OptionCardControl","type","card","register","resolved","OptionCardMedia","variant","OptionCardTitle","OptionCardDescription","hasControl","children","c","OptionCardContent","jsxs","isPart","node","parts","OptionCard","value","pressed","defaultPressed","onPressedChange","onClick","group","inGroup","fallbackId","internalPressed","setInternalPressed","isControlled","currentPressed","handlePressedChange","next","eventDetails","groupControlType","controlType","setControlType","ctx","childArray","hasContentChild","media","rest","body","Fragment","ToggleGroupItemRoot","standaloneRole","TogglePrimitive","respectDefaultPrevented"],"mappings":";;;;;;;;;AAmBA,MAAMA,KAAiB,QAEjBC,KACJ,4IAaIC,IACJC,EAAM,cAAkD,IAAI,GAOxDC,IAAoBD,EAAM;AAAA,EAC9B;AACF,GAIME,IAAYC,GAAiB;AAAA;AAAA,EAEjC,OAAO;AAAA,IACL,GAAGC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKH,SAAS;AAAA,IACT,GAAGC,EAAW,IAAIC,EAAoB;AAAA,EAAA;AAAA;AAAA,EAIxC,MAAM;AAAA,IACJ,qBAAqB;AAAA,EAAA;AAAA;AAAA;AAAA,EAIvB,KAAK;AAAA,IACH,cAAc;AAAA,IACd,iBAAiB;AAAA,EAAA;AAAA;AAAA,EAGnB,QAAQ,CAAA;AAAA,EAER,MAAM;AAAA,IACJ,GAAGC;AAAA,IACH,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA;AAAA,IAEZ,GAAGF,EAAW,IAAIG,CAAsB;AAAA,IACxC,UAAU;AAAA,IACV,GAAGH,EAAW,aAAaI,CAAe;AAAA;AAAA;AAAA,IAG1C,GAAGJ,EAAW,OAAO,OAAO,SAASK,EAAa;AAAA,IAClD,GAAGL,EAAW,cAAcG,CAAsB;AAAA,IAClD,GAAGH,EAAW,aAAa,UAAU;AAAA,IACrC,WAAW;AAAA,IACX,UAAUM;AAAAA,IACV,YAAYC;AAAAA,IACZ,YAAYC;AAAAA,IACZ,OAAOC;AAAAA,IACP,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,MAChB,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,cAAcC;AAAAA,IAAO;AAAA,IAEvB,+BAA+B;AAAA,MAC7B,eAAe;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,IAEX,mBAAmB;AAAA,MACjB,iBAAiBC;AAAAA,MACjB,GAAGX,EAAW,YAAYU,CAAe;AAAA,IAAA;AAAA,IAE3C,CAAC,oBAAoBE,CAAS,6BAA6B,GAAG;AAAA,MAC5D,GAAGZ,EAAW,YAAYa,CAAkB;AAAA,IAAA;AAAA,IAE9C,CAAC,oBAAoBD,CAAS,2BAA2B,GAAG;AAAA,MAC1D,SAAS;AAAA,IAAA;AAAA,IAEX,CAAC,oBAAoBA,CAAS,gCAAgC,GAAG;AAAA,MAC/D,GAAGZ,EAAW,YAAY,aAAa;AAAA,MACvC,iBAAiBa;AAAAA,IAAO;AAAA,IAE1B,CAAC,oBAAoBD,CAAS,gCAAgC,GAAG;AAAA,MAC/D,SAAS;AAAA,IAAA;AAAA,IAEX,CAAC,oBAAoBA,CAAS,8BAA8B,GAAG;AAAA,MAC7D,iBAAiBC;AAAAA,IAAO;AAAA,IAE1B,CAAC,oBAAoBD,CAAS,8BAA8B,GAAG;AAAA,MAC7D,WAAW;AAAA,IAAA;AAAA,EACb;AAAA;AAAA,EAIF,WAAW;AAAA,IACT,YAAY;AAAA,EAAA;AAAA,EAEd,WAAW;AAAA,IACT,GAAGb;AAAA,IACH,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,WAAW;AAAA,IACX,GAAGC,EAAW,aAAaI,CAAe;AAAA,IAC1C,iBAAiBO;AAAAA,IACjB,OAAOG;AAAAA,IACP,SAAS;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA,EAEF,mBAAmB;AAAA,IACjB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,MACP,UAAU;AAAA,MACV,GAAGd,EAAW,MAAM,CAAC;AAAA,MACrB,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA;AAAA,IAEV,SAAS;AAAA,MACP,UAAU;AAAA,MACV,GAAGA,EAAW,MAAM,CAAC;AAAA,MACrB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,IAAA;AAAA,EACb;AAAA;AAAA,EAIF,SAAS;AAAA,IACP,GAAGD;AAAA,IACH,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAWgB;AAAAA,IACX,YAAYC;AAAAA,IACZ,eAAeA;AAAAA,IACf,CAAC,UAAUJ,CAAS,0BAA0B,GAAG;AAAA,MAC/C,qBAAqB;AAAA,IAAA;AAAA,EACvB;AAAA;AAAA,EAIF,OAAO;AAAA,IACL,GAAGb;AAAA,IACH,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,YAAYkB;AAAAA,EAAO;AAAA;AAAA,EAIrB,aAAa;AAAA,IACX,GAAGlB;AAAA,IACH,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,cAAc;AAAA,IACd,UAAUmB;AAAAA,IACV,YAAYC;AAAAA,IACZ,YAAYX;AAAAA,IACZ,OAAOY;AAAAA,EAAO;AAAA;AAAA,EAIhB,SAAS;AAAA,IACP,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,aAAa;AAAA,EAAA;AAAA;AAAA,EAIf,YAAY;AAAA,IACV,GAAGrB;AAAA,IACH,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,cAAc;AAAA,IACd,GAAGC,EAAW,OAAO,OAAO,SAASqB,CAAe;AAAA,IACpD,iBAAiBV;AAAAA,IACjB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAAA,EAEtB,UAAU;AAAA,IACR,GAAGZ;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiBc;AAAAA,IACjB,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAAA;AAAA,EAItB,eAAe;AAAA,IACb,GAAGd;AAAA,IACH,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,GAAGC,EAAW,aAAa,KAAK;AAAA,IAChC,GAAGA,EAAW,OAAO,OAAO,SAASqB,CAAe;AAAA,IACpD,iBAAiBV;AAAAA,IACjB,OAAOW;AAAAA,IACP,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAAA,EAEtB,eAAe;AAAA,IACb,GAAGvB;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAAA;AAAA,EAItB,aAAa;AAAA,IACX,GAAGA;AAAA,IACH,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,GAAGC,EAAW,OAAO,OAAO,SAAS,aAAa;AAAA,IAClD,iBAAiBuB;AAAAA,IACjB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAAA,EAEtB,aAAa;AAAA,IACX,GAAGxB;AAAA,IACH,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,cAAc;AAAA,IACd,iBAAiByB;AAAAA;AAAAA,IAEjB,WAAW;AAAA,IACX,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAExB,CAAC,GAIKC,KAAY,CAACC,MACjB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,eAAY;AAAA,IACX,GAAGD;AAAA,IAEJ,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,uJAAA,CAAuJ;AAAA,EAAA;AACjK,GAGIC,KAAa,MAAM;AACvB,QAAMC,IAAShC,EAAA;AACf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWE,EAAO;AAAA,MACZ,CAACjB,CAAS,GAAG;AAAA,MAEnB,UAAA,gBAAAe;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWE,EAAO;AAAA,UACZ,CAACjB,CAAS,GAAG;AAAA,QAAwB;AAAA,MAAA;AAAA,IAC7C;AAAA,EAAA;AAGN,GAEMkB,KAAgB,MAAM;AAC1B,QAAMD,IAAShC,EAAA;AACf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWE,EAAO;AAAA,MACZ,CAACjB,CAAS,GAAG;AAAA,MAEnB,UAAA,gBAAAe;AAAA,QAACF;AAAA,QAAA;AAAA,UACC,WAAWI,EAAO;AAAA,UACZ,CAACjB,CAAS,GAAG;AAAA,QAA6B;AAAA,MAAA;AAAA,IAClD;AAAA,EAAA;AAGN,GAEMmB,KAAc,MAAM;AACxB,QAAMF,IAAShC,EAAA;AACf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWE,EAAO;AAAA,MACZ,CAACjB,CAAS,GAAG;AAAA,MAEnB,UAAA,gBAAAe;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWE,EAAO;AAAA,UACZ,CAACjB,CAAS,GAAG;AAAA,QAA2B;AAAA,MAAA;AAAA,IAChD;AAAA,EAAA;AAGN,GAUaoB,KAAkBrC,EAAM,WAGnC,SACA,EAAE,WAAAsC,GAAW,QAAAC,IAAS1C,IAAgB,GAAGkC,EAAA,GACzCS,GACA;AACA,QAAMN,IAAShC,EAAA;AAEf,SACE,gBAAA8B,EAACjC,EAAuB,UAAvB,EAAgC,OAAO,EAAE,MAAMgC,EAAM,MAAM,QAAAQ,EAAA,GAC1D,UAAA,gBAAAP;AAAA,IAACS;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,eAAasB;AAAA,MACZ,GAAIR,EAAM,SAAS,WAAW,EAAE,MAAM,aAAA,IAAiB,CAAA;AAAA,MACxD,WAAWW,EAAaR,EAAO,OAAOA,EAAOK,CAAM,GAAGD,CAAS;AAAA,MAC9D,GAAGP;AAAA,IAAA;AAAA,EAAA,GAER;AAEJ,CAAC,GAQYY,IAAoB3C,EAAM,WAGrC,SAA2B,EAAE,WAAAsC,GAAW,MAAAM,GAAM,GAAGb,EAAA,GAASS,GAAK;AAC/D,QAAMN,IAAShC,EAAA,GACT2C,IAAO7C,EAAM,WAAWC,CAAiB,GACzC6C,IAAWD,KAAA,gBAAAA,EAAM;AAEvB,EAAA7C,EAAM,UAAU,MAAM;AACpB,IAAI4C,KAAQE,KAAUA,EAASF,CAAI;AAAA,EACrC,GAAG,CAACA,GAAME,CAAQ,CAAC;AAEnB,QAAMC,IAAWH,MAAQC,KAAA,gBAAAA,EAAM,gBAAe;AAC9C,SAAIE,MAAa,SAAe,OAG9B,gBAAAf;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAQ;AAAA,MACA,eAAY;AAAA,MACZ,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,WAAWyB,EAAaR,EAAO,SAASI,CAAS;AAAA,MAChD,GAAGP;AAAA,MAEH,UAAAgB,MAAa,UACZ,gBAAAf,EAACC,IAAA,CAAA,CAAW,IACVc,MAAa,WACf,gBAAAf,EAACI,IAAA,CAAA,CAAY,IAEb,gBAAAJ,EAACG,IAAA,CAAA,CAAc;AAAA,IAAA;AAAA,EAAA;AAIvB,CAAC,GAUYa,IAAkBhD,EAAM,WAGnC,SAAyB,EAAE,WAAAsC,GAAW,SAAAW,IAAU,QAAQ,GAAGlB,EAAA,GAASS,GAAK;AACzE,QAAMN,IAAShC,EAAA;AAEf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAQ;AAAA,MACA,eAAY;AAAA,MACZ,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,gBAAcgC;AAAA,MACd,WAAWP;AAAA,QACTR,EAAO;AAAA,QACPe,MAAY,iBACRf,EAAO,oBACPA,EAAO;AAAA,QACXI;AAAA,MAAA;AAAA,MAED,GAAGP;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAMYmB,KAAkBlD,EAAM,WAGnC,SAAyB,EAAE,WAAAsC,GAAW,GAAGP,EAAA,GAASS,GAAK;AACvD,QAAMN,IAAShC,EAAA;AAEf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAQ;AAAA,MACA,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,WAAWyB,EAAaR,EAAO,OAAOI,CAAS;AAAA,MAC9C,GAAGP;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAMYoB,KAAwBnD,EAAM,WAGzC,SAA+B,EAAE,WAAAsC,GAAW,GAAGP,EAAA,GAASS,GAAK;AAC7D,QAAMN,IAAShC,EAAA;AAEf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAQ;AAAA,MACA,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,WAAWyB,EAAaR,EAAO,aAAaI,CAAS;AAAA,MACpD,GAAGP;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAMKqB,KAAa,CAACC,MAClBrD,EAAM,SAAS,QAAQqD,CAAQ,EAAE;AAAA,EAC/B,CAACC,MAAMtD,EAAM,eAAesD,CAAC,KAAKA,EAAE,SAASX;AAC/C,GAEWY,IAAoBvD,EAAM,WAGrC,SAA2B,EAAE,WAAAsC,GAAW,UAAAe,GAAU,GAAGtB,EAAA,GAASS,GAAK;AACnE,QAAMN,IAAShC,EAAA;AAEf,SACE,gBAAAsD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAhB;AAAA,MACA,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,WAAWyB,EAAaR,EAAO,SAASI,CAAS;AAAA,MAChD,GAAGP;AAAA,MAEH,UAAA;AAAA,QAAAsB;AAAA,QACA,CAACD,GAAWC,CAAQ,uBAAMV,GAAA,CAAA,CAAkB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnD,CAAC,GAwBKc,IAAS,CAACC,MAA0BC,MACxC3D,EAAM,eAAe0D,CAAI,KAAKC,EAAM,SAASD,EAAK,IAAyB,GAEhEE,KAAa5D,EAAM;AAAA,EAC9B,SACE;AAAA,IACE,WAAAsC;AAAA,IACA,UAAAe;AAAA,IACA,OAAAQ;AAAA,IACA,SAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,GAAGlC;AAAA,EAAA,GAELS,GACA;AACA,UAAMN,IAAShC,EAAA,GACTgE,IAAQlE,EAAM,WAAWD,CAAsB,GAC/CoE,IAAUD,MAAU,MAEpBE,IAAapE,EAAM,MAAA;AACzB,IACE,QAAQ,IAAI,aAAa,gBACzBmE,KACAN,MAAU,UAEV,QAAQ,KAAK/D,EAAqB;AAGpC,UAAM,CAACuE,GAAiBC,CAAkB,IAAItE,EAAM;AAAA,MAClD+D,KAAkB;AAAA,IAAA,GAEdQ,IAAeT,MAAY,QAC3BU,IAAiBD,IAAeT,IAAUO,GAC1CI,IAAsB,CAC1BC,GACAC,MACG;AACH,MAAAX,KAAA,QAAAA,EAAkBU,GAAMC,IACpB,CAACJ,KAAgB,CAACI,EAAa,gBAA+BD,CAAI;AAAA,IACxE,GAEME,IAA0CT,IAC5CD,EAAM,SAAS,aACb,aACA,UACF,YACE,CAACW,GAAaC,CAAc,IAChC9E,EAAM,SAAgC4E,CAAgB,GAClDG,IAAM/E,EAAM;AAAA,MAChB,OAAO,EAAE,aAAA6E,GAAa,cAAcC;MACpC,CAACD,CAAW;AAAA,IAAA,GAGRG,IAAahF,EAAM,SAAS,QAAQqD,CAAQ,GAC5C4B,IAAkBD,EAAW,KAAK,CAAC1B,MAAMG,EAAOH,GAAGC,CAAiB,CAAC,GACrE2B,IAAQF,EAAW,OAAO,CAAC1B,MAAMG,EAAOH,GAAGN,CAAe,CAAC,GAC3DmC,IAAOH,EAAW,OAAO,CAAC1B,MAAM,CAACG,EAAOH,GAAGN,CAAe,CAAC,GAS3DoC,IACJ,gBAAA5B,EAAA6B,GAAA,EACG,UAAA;AAAA,MAAAH;AAAA,MAVWD,IACdE,IAEA,gBAAAnD,EAACuB,KACC,UAAA,gBAAAvB,EAACkB,IAAA,EAAiB,aAAK,EAAA,CACzB;AAAA,IAMG,GACH;AAGF,QAAIiB;AACF,aACE,gBAAAnC,EAAC/B,EAAkB,UAAlB,EAA2B,OAAO8E,GACjC,UAAA,gBAAA/C;AAAA,QAACsD;AAAA,QAAA;AAAA,UACC,KAAA9C;AAAA,UACA,aAAU;AAAA,UACJ,CAACvB,CAAS,GAAG;AAAA,UACnB,OAAO4C,KAASO;AAAA,UAChB,WAAW1B,EAAaR,EAAO,MAAMI,CAAS;AAAA,UAC9C,SAAA2B;AAAA,UACC,GAAGlC;AAAA,UAEH,UAAAqD;AAAA,QAAA;AAAA,MAAA,GAEL;AAIJ,UAAMG,IAAiBV,MAAgB,WAAW,WAAW;AAE7D,WACE,gBAAA7C,EAAC/B,EAAkB,UAAlB,EAA2B,OAAO8E,GACjC,UAAA,gBAAA/C;AAAA,MAACwD;AAAAA,MAAA;AAAA,QACC,KAAAhD;AAAA,QACA,aAAU;AAAA,QACJ,CAACvB,CAAS,GAAG;AAAA,QACnB,SAASuD;AAAA,QACT,iBAAiBC;AAAA,QACjB,MAAMc;AAAA,QACN,gBAAcf;AAAA,QACd,gBAAc;AAAA,QACd,WAAW9B,EAAaR,EAAO,MAAMI,CAAS;AAAA,QAG7C,GAAIP;AAAA,QACL,SAAS0D,GAAwBxB,CAAO;AAAA,QAEvC,UAAAmB;AAAA,MAAA;AAAA,IAAA,GAEL;AAAA,EAEJ;AACF;"}
1
+ {"version":3,"file":"option-card.js","sources":["../../../src/components/option-card/option-card.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport {\n respectDefaultPrevented,\n type ToggleChangeDetails,\n} from \"../toggle/toggle\"\nimport {\n ToggleGroupItemRoot,\n ToggleGroupRoot,\n type ToggleGroupMultipleProps,\n type ToggleGroupSingleProps,\n} from \"../toggle/toggle-group\"\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 ...boxModel,\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 ...nativeControl,\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-pressed]\": {\n backgroundColor: tokens.accentSoft,\n ...shorthands.borderColor(tokens.accentA8),\n },\n [`&[data-pressed] [${SLOT_ATTR}=\"option-card-radio-outer\"]`]: {\n ...shorthands.borderColor(tokens.accentSolid),\n },\n [`&[data-pressed] [${SLOT_ATTR}=\"option-card-radio-dot\"]`]: {\n opacity: 1,\n },\n [`&[data-pressed] [${SLOT_ATTR}=\"option-card-checkbox-outer\"]`]: {\n ...shorthands.borderColor(\"transparent\"),\n backgroundColor: tokens.accentSolid,\n },\n [`&[data-pressed] [${SLOT_ATTR}=\"option-card-checkbox-check\"]`]: {\n opacity: 1,\n },\n [`&[data-pressed] [${SLOT_ATTR}=\"option-card-switch-track\"]`]: {\n backgroundColor: tokens.accentSolid,\n },\n [`&[data-pressed] [${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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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 ...boxModel,\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\ntype OptionCardGroupOwnProps = { layout?: OptionCardLayout }\n\nexport type OptionCardGroupProps =\n | (ToggleGroupSingleProps & OptionCardGroupOwnProps)\n | (ToggleGroupMultipleProps & OptionCardGroupOwnProps)\n\nexport const OptionCardGroup = React.forwardRef<\n HTMLDivElement,\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 <ToggleGroupRoot\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 /**\n * Fired when a standalone card is toggled, with Base UI's change details second.\n * `eventDetails.cancel()` keeps the current state.\n */\n onPressedChange?: (\n pressed: boolean,\n eventDetails: ToggleChangeDetails\n ) => 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 onClick,\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 = (\n next: boolean,\n eventDetails: ToggleChangeDetails\n ) => {\n onPressedChange?.(next, eventDetails)\n if (!isControlled && !eventDetails.isCanceled) setInternalPressed(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 <ToggleGroupItemRoot\n ref={ref}\n data-slot=\"option-card\"\n {...{ [SLOT_ATTR]: \"option-card\" }}\n value={value ?? fallbackId}\n className={mergeClasses(styles.card, className)}\n onClick={onClick}\n {...props}\n >\n {body}\n </ToggleGroupItemRoot>\n </OptionCardContext.Provider>\n )\n }\n\n const standaloneRole = controlType === \"switch\" ? \"switch\" : \"checkbox\"\n\n return (\n <OptionCardContext.Provider value={ctx}>\n <TogglePrimitive\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 // Base UI types the handlers with its own event wrapper; the element is the same\n // <button>, so the caller's button-typed handlers receive the events they declare.\n {...(props as TogglePrimitive.Props)}\n onClick={respectDefaultPrevented(onClick)}\n >\n {body}\n </TogglePrimitive>\n </OptionCardContext.Provider>\n )\n }\n)\n"],"names":["DEFAULT_LAYOUT","MISSING_VALUE_WARNING","OptionCardGroupContext","React","OptionCardContext","useStyles","makeZenithStyles","boxModel","shorthands","tokens.spacingGroup1","nativeControl","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","ToggleGroupRoot","mergeClasses","OptionCardControl","type","card","register","resolved","OptionCardMedia","variant","OptionCardTitle","OptionCardDescription","hasControl","children","c","OptionCardContent","jsxs","isPart","node","parts","OptionCard","value","pressed","defaultPressed","onPressedChange","onClick","group","inGroup","fallbackId","internalPressed","setInternalPressed","isControlled","currentPressed","handlePressedChange","next","eventDetails","groupControlType","controlType","setControlType","ctx","childArray","hasContentChild","media","rest","body","Fragment","ToggleGroupItemRoot","standaloneRole","TogglePrimitive","respectDefaultPrevented"],"mappings":";;;;;;;;;AAmBA,MAAMA,KAAiB,QAEjBC,KACJ,4IAaIC,IACJC,EAAM,cAAkD,IAAI,GAOxDC,IAAoBD,EAAM;AAAA,EAC9B;AACF,GAIME,IAAYC,GAAiB;AAAA;AAAA,EAEjC,OAAO;AAAA,IACL,GAAGC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKH,SAAS;AAAA,IACT,GAAGC,EAAW,IAAIC,EAAoB;AAAA,EAAA;AAAA;AAAA,EAIxC,MAAM;AAAA,IACJ,qBAAqB;AAAA,EAAA;AAAA;AAAA;AAAA,EAIvB,KAAK;AAAA,IACH,cAAc;AAAA,IACd,iBAAiB;AAAA,EAAA;AAAA;AAAA,EAGnB,QAAQ,CAAA;AAAA,EAER,MAAM;AAAA,IACJ,GAAGC;AAAA,IACH,UAAU;AAAA,IACV,SAAS;AAAA,IACT,YAAY;AAAA;AAAA,IAEZ,GAAGF,EAAW,IAAIG,CAAsB;AAAA,IACxC,UAAU;AAAA,IACV,GAAGH,EAAW,aAAaI,CAAe;AAAA;AAAA;AAAA,IAG1C,GAAGJ,EAAW,OAAO,OAAO,SAASK,EAAa;AAAA,IAClD,GAAGL,EAAW,cAAcG,CAAsB;AAAA,IAClD,GAAGH,EAAW,aAAa,UAAU;AAAA,IACrC,WAAW;AAAA,IACX,UAAUM;AAAAA,IACV,YAAYC;AAAAA,IACZ,YAAYC;AAAAA,IACZ,OAAOC;AAAAA,IACP,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,kBAAkB;AAAA,MAChB,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,cAAcC;AAAAA,IAAO;AAAA,IAEvB,+BAA+B;AAAA,MAC7B,eAAe;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,IAEX,mBAAmB;AAAA,MACjB,iBAAiBC;AAAAA,MACjB,GAAGX,EAAW,YAAYU,CAAe;AAAA,IAAA;AAAA,IAE3C,CAAC,oBAAoBE,CAAS,6BAA6B,GAAG;AAAA,MAC5D,GAAGZ,EAAW,YAAYa,CAAkB;AAAA,IAAA;AAAA,IAE9C,CAAC,oBAAoBD,CAAS,2BAA2B,GAAG;AAAA,MAC1D,SAAS;AAAA,IAAA;AAAA,IAEX,CAAC,oBAAoBA,CAAS,gCAAgC,GAAG;AAAA,MAC/D,GAAGZ,EAAW,YAAY,aAAa;AAAA,MACvC,iBAAiBa;AAAAA,IAAO;AAAA,IAE1B,CAAC,oBAAoBD,CAAS,gCAAgC,GAAG;AAAA,MAC/D,SAAS;AAAA,IAAA;AAAA,IAEX,CAAC,oBAAoBA,CAAS,8BAA8B,GAAG;AAAA,MAC7D,iBAAiBC;AAAAA,IAAO;AAAA,IAE1B,CAAC,oBAAoBD,CAAS,8BAA8B,GAAG;AAAA,MAC7D,WAAW;AAAA,IAAA;AAAA,EACb;AAAA;AAAA,EAIF,WAAW;AAAA,IACT,YAAY;AAAA,EAAA;AAAA,EAEd,WAAW;AAAA,IACT,GAAGb;AAAA,IACH,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,WAAW;AAAA,IACX,GAAGC,EAAW,aAAaI,CAAe;AAAA,IAC1C,iBAAiBO;AAAAA,IACjB,OAAOG;AAAAA,IACP,SAAS;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA;AAAA,EACV;AAAA,EAEF,mBAAmB;AAAA,IACjB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,WAAW;AAAA,IACX,UAAU;AAAA,IACV,SAAS;AAAA,MACP,UAAU;AAAA,MACV,GAAGd,EAAW,MAAM,CAAC;AAAA,MACrB,OAAO;AAAA,MACP,QAAQ;AAAA,IAAA;AAAA,IAEV,SAAS;AAAA,MACP,UAAU;AAAA,MACV,GAAGA,EAAW,MAAM,CAAC;AAAA,MACrB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,IAAA;AAAA,EACb;AAAA;AAAA,EAIF,SAAS;AAAA,IACP,GAAGD;AAAA,IACH,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,WAAWgB;AAAAA,IACX,YAAYC;AAAAA,IACZ,eAAeA;AAAAA,IACf,CAAC,UAAUJ,CAAS,0BAA0B,GAAG;AAAA,MAC/C,qBAAqB;AAAA,IAAA;AAAA,EACvB;AAAA;AAAA,EAIF,OAAO;AAAA,IACL,GAAGb;AAAA,IACH,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,YAAYkB;AAAAA,EAAO;AAAA;AAAA,EAIrB,aAAa;AAAA,IACX,GAAGlB;AAAA,IACH,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,UAAU;AAAA,IACV,cAAc;AAAA,IACd,UAAUmB;AAAAA,IACV,YAAYC;AAAAA,IACZ,YAAYX;AAAAA,IACZ,OAAOY;AAAAA,EAAO;AAAA;AAAA,EAIhB,SAAS;AAAA,IACP,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,aAAa;AAAA,EAAA;AAAA;AAAA,EAIf,YAAY;AAAA,IACV,GAAGrB;AAAA,IACH,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,cAAc;AAAA,IACd,GAAGC,EAAW,OAAO,OAAO,SAASqB,CAAe;AAAA,IACpD,iBAAiBV;AAAAA,IACjB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAAA,EAEtB,UAAU;AAAA,IACR,GAAGZ;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,iBAAiBc;AAAAA,IACjB,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAAA;AAAA,EAItB,eAAe;AAAA,IACb,GAAGd;AAAA,IACH,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,GAAGC,EAAW,aAAa,KAAK;AAAA,IAChC,GAAGA,EAAW,OAAO,OAAO,SAASqB,CAAe;AAAA,IACpD,iBAAiBV;AAAAA,IACjB,OAAOW;AAAAA,IACP,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAAA,EAEtB,eAAe;AAAA,IACb,GAAGvB;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAAA;AAAA,EAItB,aAAa;AAAA,IACX,GAAGA;AAAA,IACH,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,GAAGC,EAAW,OAAO,OAAO,SAAS,aAAa;AAAA,IAClD,iBAAiBuB;AAAAA,IACjB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAAA,EAEtB,aAAa;AAAA,IACX,GAAGxB;AAAA,IACH,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,cAAc;AAAA,IACd,iBAAiByB;AAAAA;AAAAA,IAEjB,WAAW;AAAA,IACX,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EAAA;AAExB,CAAC,GAIKC,KAAY,CAACC,MACjB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,eAAY;AAAA,IACX,GAAGD;AAAA,IAEJ,UAAA,gBAAAC,EAAC,QAAA,EAAK,GAAE,uJAAA,CAAuJ;AAAA,EAAA;AACjK,GAGIC,KAAa,MAAM;AACvB,QAAMC,IAAShC,EAAA;AACf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWE,EAAO;AAAA,MACZ,CAACjB,CAAS,GAAG;AAAA,MAEnB,UAAA,gBAAAe;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWE,EAAO;AAAA,UACZ,CAACjB,CAAS,GAAG;AAAA,QAAwB;AAAA,MAAA;AAAA,IAC7C;AAAA,EAAA;AAGN,GAEMkB,KAAgB,MAAM;AAC1B,QAAMD,IAAShC,EAAA;AACf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWE,EAAO;AAAA,MACZ,CAACjB,CAAS,GAAG;AAAA,MAEnB,UAAA,gBAAAe;AAAA,QAACF;AAAA,QAAA;AAAA,UACC,WAAWI,EAAO;AAAA,UACZ,CAACjB,CAAS,GAAG;AAAA,QAA6B;AAAA,MAAA;AAAA,IAClD;AAAA,EAAA;AAGN,GAEMmB,KAAc,MAAM;AACxB,QAAMF,IAAShC,EAAA;AACf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWE,EAAO;AAAA,MACZ,CAACjB,CAAS,GAAG;AAAA,MAEnB,UAAA,gBAAAe;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWE,EAAO;AAAA,UACZ,CAACjB,CAAS,GAAG;AAAA,QAA2B;AAAA,MAAA;AAAA,IAChD;AAAA,EAAA;AAGN,GAUaoB,KAAkBrC,EAAM,WAGnC,SACA,EAAE,WAAAsC,GAAW,QAAAC,IAAS1C,IAAgB,GAAGkC,EAAA,GACzCS,GACA;AACA,QAAMN,IAAShC,EAAA;AAEf,SACE,gBAAA8B,EAACjC,EAAuB,UAAvB,EAAgC,OAAO,EAAE,MAAMgC,EAAM,MAAM,QAAAQ,EAAA,GAC1D,UAAA,gBAAAP;AAAA,IAACS;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,eAAasB;AAAA,MACZ,GAAIR,EAAM,SAAS,WAAW,EAAE,MAAM,aAAA,IAAiB,CAAA;AAAA,MACxD,WAAWW,EAAaR,EAAO,OAAOA,EAAOK,CAAM,GAAGD,CAAS;AAAA,MAC9D,GAAGP;AAAA,IAAA;AAAA,EAAA,GAER;AAEJ,CAAC,GAQYY,IAAoB3C,EAAM,WAGrC,SAA2B,EAAE,WAAAsC,GAAW,MAAAM,GAAM,GAAGb,EAAA,GAASS,GAAK;AAC/D,QAAMN,IAAShC,EAAA,GACT2C,IAAO7C,EAAM,WAAWC,CAAiB,GACzC6C,IAAWD,KAAA,gBAAAA,EAAM;AAEvB,EAAA7C,EAAM,UAAU,MAAM;AACpB,IAAI4C,KAAQE,KAAUA,EAASF,CAAI;AAAA,EACrC,GAAG,CAACA,GAAME,CAAQ,CAAC;AAEnB,QAAMC,IAAWH,MAAQC,KAAA,gBAAAA,EAAM,gBAAe;AAC9C,SAAIE,MAAa,SAAe,OAG9B,gBAAAf;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAQ;AAAA,MACA,eAAY;AAAA,MACZ,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,WAAWyB,EAAaR,EAAO,SAASI,CAAS;AAAA,MAChD,GAAGP;AAAA,MAEH,UAAAgB,MAAa,UACZ,gBAAAf,EAACC,IAAA,CAAA,CAAW,IACVc,MAAa,WACf,gBAAAf,EAACI,IAAA,CAAA,CAAY,IAEb,gBAAAJ,EAACG,IAAA,CAAA,CAAc;AAAA,IAAA;AAAA,EAAA;AAIvB,CAAC,GAUYa,IAAkBhD,EAAM,WAGnC,SAAyB,EAAE,WAAAsC,GAAW,SAAAW,IAAU,QAAQ,GAAGlB,EAAA,GAASS,GAAK;AACzE,QAAMN,IAAShC,EAAA;AAEf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAQ;AAAA,MACA,eAAY;AAAA,MACZ,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,gBAAcgC;AAAA,MACd,WAAWP;AAAA,QACTR,EAAO;AAAA,QACPe,MAAY,iBACRf,EAAO,oBACPA,EAAO;AAAA,QACXI;AAAA,MAAA;AAAA,MAED,GAAGP;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAMYmB,KAAkBlD,EAAM,WAGnC,SAAyB,EAAE,WAAAsC,GAAW,GAAGP,EAAA,GAASS,GAAK;AACvD,QAAMN,IAAShC,EAAA;AAEf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAQ;AAAA,MACA,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,WAAWyB,EAAaR,EAAO,OAAOI,CAAS;AAAA,MAC9C,GAAGP;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAMYoB,KAAwBnD,EAAM,WAGzC,SAA+B,EAAE,WAAAsC,GAAW,GAAGP,EAAA,GAASS,GAAK;AAC7D,QAAMN,IAAShC,EAAA;AAEf,SACE,gBAAA8B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAQ;AAAA,MACA,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,WAAWyB,EAAaR,EAAO,aAAaI,CAAS;AAAA,MACpD,GAAGP;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC,GAMKqB,KAAa,CAACC,MAClBrD,EAAM,SAAS,QAAQqD,CAAQ,EAAE;AAAA,EAC/B,CAACC,MAAMtD,EAAM,eAAesD,CAAC,KAAKA,EAAE,SAASX;AAC/C,GAEWY,IAAoBvD,EAAM,WAGrC,SAA2B,EAAE,WAAAsC,GAAW,UAAAe,GAAU,GAAGtB,EAAA,GAASS,GAAK;AACnE,QAAMN,IAAShC,EAAA;AAEf,SACE,gBAAAsD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAhB;AAAA,MACA,aAAU;AAAA,MACJ,CAACvB,CAAS,GAAG;AAAA,MACnB,WAAWyB,EAAaR,EAAO,SAASI,CAAS;AAAA,MAChD,GAAGP;AAAA,MAEH,UAAA;AAAA,QAAAsB;AAAA,QACA,CAACD,GAAWC,CAAQ,uBAAMV,GAAA,CAAA,CAAkB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGnD,CAAC,GAwBKc,IAAS,CAACC,MAA0BC,MACxC3D,EAAM,eAAe0D,CAAI,KAAKC,EAAM,SAASD,EAAK,IAAyB,GAEhEE,KAAa5D,EAAM;AAAA,EAC9B,SACE;AAAA,IACE,WAAAsC;AAAA,IACA,UAAAe;AAAA,IACA,OAAAQ;AAAA,IACA,SAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,GAAGlC;AAAA,EAAA,GAELS,GACA;AACA,UAAMN,IAAShC,EAAA,GACTgE,IAAQlE,EAAM,WAAWD,CAAsB,GAC/CoE,IAAUD,MAAU,MAEpBE,IAAapE,EAAM,MAAA;AACzB,IACE,QAAQ,IAAI,aAAa,gBACzBmE,KACAN,MAAU,UAEV,QAAQ,KAAK/D,EAAqB;AAGpC,UAAM,CAACuE,GAAiBC,CAAkB,IAAItE,EAAM;AAAA,MAClD+D,KAAkB;AAAA,IAAA,GAEdQ,IAAeT,MAAY,QAC3BU,IAAiBD,IAAeT,IAAUO,GAC1CI,IAAsB,CAC1BC,GACAC,MACG;AACH,MAAAX,KAAA,QAAAA,EAAkBU,GAAMC,IACpB,CAACJ,KAAgB,CAACI,EAAa,gBAA+BD,CAAI;AAAA,IACxE,GAEME,IAA0CT,IAC5CD,EAAM,SAAS,aACb,aACA,UACF,YACE,CAACW,GAAaC,CAAc,IAChC9E,EAAM,SAAgC4E,CAAgB,GAClDG,IAAM/E,EAAM;AAAA,MAChB,OAAO,EAAE,aAAA6E,GAAa,cAAcC;MACpC,CAACD,CAAW;AAAA,IAAA,GAGRG,IAAahF,EAAM,SAAS,QAAQqD,CAAQ,GAC5C4B,IAAkBD,EAAW,KAAK,CAAC1B,MAAMG,EAAOH,GAAGC,CAAiB,CAAC,GACrE2B,IAAQF,EAAW,OAAO,CAAC1B,MAAMG,EAAOH,GAAGN,CAAe,CAAC,GAC3DmC,IAAOH,EAAW,OAAO,CAAC1B,MAAM,CAACG,EAAOH,GAAGN,CAAe,CAAC,GAS3DoC,IACJ,gBAAA5B,EAAA6B,GAAA,EACG,UAAA;AAAA,MAAAH;AAAA,MAVWD,IACdE,IAEA,gBAAAnD,EAACuB,KACC,UAAA,gBAAAvB,EAACkB,IAAA,EAAiB,aAAK,EAAA,CACzB;AAAA,IAMG,GACH;AAGF,QAAIiB;AACF,aACE,gBAAAnC,EAAC/B,EAAkB,UAAlB,EAA2B,OAAO8E,GACjC,UAAA,gBAAA/C;AAAA,QAACsD;AAAA,QAAA;AAAA,UACC,KAAA9C;AAAA,UACA,aAAU;AAAA,UACJ,CAACvB,CAAS,GAAG;AAAA,UACnB,OAAO4C,KAASO;AAAA,UAChB,WAAW1B,EAAaR,EAAO,MAAMI,CAAS;AAAA,UAC9C,SAAA2B;AAAA,UACC,GAAGlC;AAAA,UAEH,UAAAqD;AAAA,QAAA;AAAA,MAAA,GAEL;AAIJ,UAAMG,IAAiBV,MAAgB,WAAW,WAAW;AAE7D,WACE,gBAAA7C,EAAC/B,EAAkB,UAAlB,EAA2B,OAAO8E,GACjC,UAAA,gBAAA/C;AAAA,MAACwD;AAAAA,MAAA;AAAA,QACC,KAAAhD;AAAA,QACA,aAAU;AAAA,QACJ,CAACvB,CAAS,GAAG;AAAA,QACnB,SAASuD;AAAA,QACT,iBAAiBC;AAAA,QACjB,MAAMc;AAAA,QACN,gBAAcf;AAAA,QACd,gBAAc;AAAA,QACd,WAAW9B,EAAaR,EAAO,MAAMI,CAAS;AAAA,QAG7C,GAAIP;AAAA,QACL,SAAS0D,GAAwBxB,CAAO;AAAA,QAEvC,UAAAmB;AAAA,MAAA;AAAA,IAAA,GAEL;AAAA,EAEJ;AACF;"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as z, jsx as O } from "react/jsx-runtime";
2
2
  import * as R from "react";
3
- import { mergeClasses as T, SLOT_ATTR as k, shorthands as L } from "@epilot/zenith-runtime/v1";
3
+ import { mergeClasses as T, SLOT_ATTR as k, shorthands as L } from "@epilot/zenith-runtime/v1/core.js";
4
4
  import { makeZenithStyles as N } from "../../styles/make-styles.js";
5
5
  import { boxModel as c } from "../../styles/host-reset.js";
6
6
  import { spacingGroup2 as v, spacingElement1 as u, accentA8 as E, radiusMd as I, spacingElement2 as P, fontWeightBold as A, leadingXs as B, textXs as C } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"pill.js","sources":["../../../src/components/pill/pill.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport { NS, PALETTE_NS } from \"../../tokens\"\nimport { isCoreFamily } from \"../../tokens/install\"\nimport { useZenithPaletteTokensFor } from \"../../tokens/use-palette-tokens\"\nimport * as tokens from \"../../tokens\"\nimport { ClearButton } from \"../../lib/clear-button\"\n\n/** Pill — same colour-matrix collapse as Badge, plus a hover background. */\n\nconst COLORS = [\n \"blue\",\n \"sky\",\n \"mint\",\n \"lime\",\n \"green\",\n \"teal\",\n \"cyan\",\n \"indigo\",\n \"purple\",\n \"pink\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"bronze\",\n \"gray\",\n \"accent\",\n \"warning\",\n \"success\",\n \"error\",\n] as const\n\nexport type PillColor = (typeof COLORS)[number]\nexport type PillVariant = \"soft\" | \"solid\" | \"surface\"\n\n/** The four slots a variant can paint. Set inline; read by the atoms below. */\nconst BG = \"--zenith-pill-bg\"\nconst FG = \"--zenith-pill-fg\"\nconst BD = \"--zenith-pill-bd\"\nconst HOV = \"--zenith-pill-hov\"\n\n/**\n * The namespace fix — same shape as Badge's. Pill has no `neutral` alias of its own (its\n * gray-when-disabled resolution already happens in the component body, before `VARIANT_SLOTS` is\n * called — `color` here is always the already-resolved family), so no extra resolve step is needed\n * before classifying it.\n */\nconst namespaceFor = (family: string): string =>\n isCoreFamily(family) ? NS : PALETTE_NS\n\nconst semantic = (color: PillColor, slot: string): string =>\n `var(--zenith-${namespaceFor(color)}-${color}-${slot})`\nconst primitive = (color: PillColor, step: string): string =>\n `var(--zenith-${namespaceFor(color)}-${color}-${step})`\n\n/**\n * Which token each variant pulls into each slot. This replaces the 57-entry compound matrix: it is\n * data about three variants, not about 57 combinations. Text uses the `light` semantic slot, which\n * is Pill's one departure from Badge (Badge uses `default`).\n */\nconst VARIANT_SLOTS: Record<\n PillVariant,\n (color: PillColor) => Record<string, string>\n> = {\n soft: (c) => ({\n [BG]: semantic(c, \"soft\"),\n [FG]: semantic(c, \"light\"),\n [BD]: \"transparent\",\n [HOV]: semantic(c, \"soft-hover\"),\n }),\n solid: (c) => ({\n [BG]: semantic(c, \"solid\"),\n [FG]: semantic(c, \"contrast\"),\n [BD]: \"transparent\",\n [HOV]: semantic(c, \"solid-hover\"),\n }),\n surface: (c) => ({\n [BG]: semantic(c, \"surface\"),\n [FG]: semantic(c, \"light\"),\n [BD]: primitive(c, \"a6\"),\n [HOV]: semantic(c, \"surface-hover\"),\n }),\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n display: \"inline-flex\",\n alignItems: \"center\",\n // v1 `h-6` — a fixed height, not a minimum.\n height: \"1.5rem\",\n gap: tokens.spacingElement1,\n whiteSpace: \"nowrap\",\n flexShrink: 0,\n overflow: \"hidden\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightBold,\n paddingInline: tokens.spacingElement2,\n borderRadius: tokens.radiusMd,\n transitionProperty: \"color, box-shadow, background-color\",\n // NEVER write a CSS shorthand in a Griffel style object — see Badge. One atom reads one\n // custom property; `border` and a later `borderColor` would both survive.\n ...shorthands.border(\"1px\", \"solid\", `var(${BD})`),\n // The whole point: one rule each, colour supplied per instance.\n backgroundColor: `var(${BG})`,\n color: `var(${FG})`,\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n // v1 `[&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:pointer-events-none`.\n \"& > svg\": {\n // Literals, not tokens.spacingGroup2: that happens to be 1rem, but a spacing token has no\n // business describing a dimension. The scale has no size family — noted rather than faked.\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n pointerEvents: \"none\",\n },\n },\n interactive: {\n cursor: \"pointer\",\n // The one hover rule. It reads the fourth custom property, line-picked per colour and variant\n // by VARIANT_SLOTS — never per-colour hover rules.\n \":hover\": { backgroundColor: `var(${HOV})` },\n },\n hasRemove: {\n ...boxModel,\n // v1's `pr-1` when a clear button is present.\n paddingRight: tokens.spacingElement1,\n },\n disabled: {\n pointerEvents: \"none\",\n },\n removeSize: {\n ...boxModel,\n // v1's `size-4` on the composed ClearButton.\n width: tokens.spacingGroup2,\n height: tokens.spacingGroup2,\n },\n})\n\nexport type PillProps = Omit<React.ComponentProps<\"span\">, \"color\"> & {\n color?: PillColor\n /**\n * Named `variant`, not `style`. v1 called this `style`, which shadows the HTML `style` attribute.\n * Retrocompat is not a requirement here, so the collision is fixed rather than inherited.\n */\n variant?: PillVariant\n disabled?: boolean\n onRemove?: (e: React.MouseEvent<HTMLButtonElement>) => void\n}\n\nexport const Pill = React.forwardRef<HTMLSpanElement, PillProps>(function Pill(\n {\n className,\n color = \"accent\",\n variant = \"soft\",\n disabled,\n onRemove,\n onClick,\n children,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n\n // v1 resolves to gray when disabled and only makes the pill interactive when it has an onClick.\n const resolvedColor: PillColor = disabled ? \"gray\" : color\n\n // A decorative family can still arrive from an expression the build cannot see, so this has to\n // be re-evaluated every commit (WP2B2 — the hook closes over this render's resolved value) — but\n // it is the RESOLVED family that decides, and the five core families Pill offers (accent, gray,\n // warning, success, error) need no palette sheet at all.\n useZenithPaletteTokensFor(resolvedColor)\n const interactive = !!onClick && !disabled\n\n // The hover slot is only meaningful while interactive — v1 attaches its hover background class\n // (`interactive && hoverStyleClasses[...]`) only then, so drop it from the inline properties\n // otherwise. Setting it unconditionally would be harmless but would claim a hover state that\n // cannot be reached.\n const slot = VARIANT_SLOTS[variant](resolvedColor)\n if (!interactive) delete slot[HOV]\n\n return (\n <span\n ref={ref}\n data-slot=\"pill\"\n {...{ [SLOT_ATTR]: \"pill\" }}\n data-disabled={disabled || undefined}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n onClick?.(e as unknown as React.MouseEvent<HTMLSpanElement>)\n }\n }\n : undefined\n }\n className={mergeClasses(\n styles.root,\n interactive && styles.interactive,\n onRemove && styles.hasRemove,\n disabled && styles.disabled,\n className\n )}\n style={{ ...slot } as React.CSSProperties}\n {...props}\n >\n {children}\n {onRemove && (\n // v1 composes the shared ClearButton here — hover, focus ring and the size-3 CloseIcon\n // fallback all live in the lib, not inline.\n <ClearButton\n className={styles.removeSize}\n onClick={onRemove}\n disabled={disabled}\n />\n )}\n </span>\n )\n})\n\nexport { COLORS as PILL_COLORS }\n"],"names":["COLORS","BG","FG","BD","HOV","namespaceFor","family","isCoreFamily","NS","PALETTE_NS","semantic","color","slot","primitive","step","VARIANT_SLOTS","c","useStyles","makeZenithStyles","boxModel","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.fontWeightBold","tokens.spacingElement2","tokens.radiusMd","shorthands","tokens.accentA8","tokens.spacingGroup2","Pill","React","className","variant","disabled","onRemove","onClick","children","props","ref","styles","resolvedColor","useZenithPaletteTokensFor","interactive","jsxs","SLOT_ATTR","e","mergeClasses","jsx","ClearButton"],"mappings":"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"}
1
+ {"version":3,"file":"pill.js","sources":["../../../src/components/pill/pill.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport { NS, PALETTE_NS } from \"../../tokens\"\nimport { isCoreFamily } from \"../../tokens/install\"\nimport { useZenithPaletteTokensFor } from \"../../tokens/use-palette-tokens\"\nimport * as tokens from \"../../tokens\"\nimport { ClearButton } from \"../../lib/clear-button\"\n\n/** Pill — same colour-matrix collapse as Badge, plus a hover background. */\n\nconst COLORS = [\n \"blue\",\n \"sky\",\n \"mint\",\n \"lime\",\n \"green\",\n \"teal\",\n \"cyan\",\n \"indigo\",\n \"purple\",\n \"pink\",\n \"red\",\n \"orange\",\n \"yellow\",\n \"bronze\",\n \"gray\",\n \"accent\",\n \"warning\",\n \"success\",\n \"error\",\n] as const\n\nexport type PillColor = (typeof COLORS)[number]\nexport type PillVariant = \"soft\" | \"solid\" | \"surface\"\n\n/** The four slots a variant can paint. Set inline; read by the atoms below. */\nconst BG = \"--zenith-pill-bg\"\nconst FG = \"--zenith-pill-fg\"\nconst BD = \"--zenith-pill-bd\"\nconst HOV = \"--zenith-pill-hov\"\n\n/**\n * The namespace fix — same shape as Badge's. Pill has no `neutral` alias of its own (its\n * gray-when-disabled resolution already happens in the component body, before `VARIANT_SLOTS` is\n * called — `color` here is always the already-resolved family), so no extra resolve step is needed\n * before classifying it.\n */\nconst namespaceFor = (family: string): string =>\n isCoreFamily(family) ? NS : PALETTE_NS\n\nconst semantic = (color: PillColor, slot: string): string =>\n `var(--zenith-${namespaceFor(color)}-${color}-${slot})`\nconst primitive = (color: PillColor, step: string): string =>\n `var(--zenith-${namespaceFor(color)}-${color}-${step})`\n\n/**\n * Which token each variant pulls into each slot. This replaces the 57-entry compound matrix: it is\n * data about three variants, not about 57 combinations. Text uses the `light` semantic slot, which\n * is Pill's one departure from Badge (Badge uses `default`).\n */\nconst VARIANT_SLOTS: Record<\n PillVariant,\n (color: PillColor) => Record<string, string>\n> = {\n soft: (c) => ({\n [BG]: semantic(c, \"soft\"),\n [FG]: semantic(c, \"light\"),\n [BD]: \"transparent\",\n [HOV]: semantic(c, \"soft-hover\"),\n }),\n solid: (c) => ({\n [BG]: semantic(c, \"solid\"),\n [FG]: semantic(c, \"contrast\"),\n [BD]: \"transparent\",\n [HOV]: semantic(c, \"solid-hover\"),\n }),\n surface: (c) => ({\n [BG]: semantic(c, \"surface\"),\n [FG]: semantic(c, \"light\"),\n [BD]: primitive(c, \"a6\"),\n [HOV]: semantic(c, \"surface-hover\"),\n }),\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n display: \"inline-flex\",\n alignItems: \"center\",\n // v1 `h-6` — a fixed height, not a minimum.\n height: \"1.5rem\",\n gap: tokens.spacingElement1,\n whiteSpace: \"nowrap\",\n flexShrink: 0,\n overflow: \"hidden\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightBold,\n paddingInline: tokens.spacingElement2,\n borderRadius: tokens.radiusMd,\n transitionProperty: \"color, box-shadow, background-color\",\n // NEVER write a CSS shorthand in a Griffel style object — see Badge. One atom reads one\n // custom property; `border` and a later `borderColor` would both survive.\n ...shorthands.border(\"1px\", \"solid\", `var(${BD})`),\n // The whole point: one rule each, colour supplied per instance.\n backgroundColor: `var(${BG})`,\n color: `var(${FG})`,\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n // v1 `[&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:pointer-events-none`.\n \"& > svg\": {\n // Literals, not tokens.spacingGroup2: that happens to be 1rem, but a spacing token has no\n // business describing a dimension. The scale has no size family — noted rather than faked.\n width: \"1rem\",\n height: \"1rem\",\n flexShrink: 0,\n pointerEvents: \"none\",\n },\n },\n interactive: {\n cursor: \"pointer\",\n // The one hover rule. It reads the fourth custom property, line-picked per colour and variant\n // by VARIANT_SLOTS — never per-colour hover rules.\n \":hover\": { backgroundColor: `var(${HOV})` },\n },\n hasRemove: {\n ...boxModel,\n // v1's `pr-1` when a clear button is present.\n paddingRight: tokens.spacingElement1,\n },\n disabled: {\n pointerEvents: \"none\",\n },\n removeSize: {\n ...boxModel,\n // v1's `size-4` on the composed ClearButton.\n width: tokens.spacingGroup2,\n height: tokens.spacingGroup2,\n },\n})\n\nexport type PillProps = Omit<React.ComponentProps<\"span\">, \"color\"> & {\n color?: PillColor\n /**\n * Named `variant`, not `style`. v1 called this `style`, which shadows the HTML `style` attribute.\n * Retrocompat is not a requirement here, so the collision is fixed rather than inherited.\n */\n variant?: PillVariant\n disabled?: boolean\n onRemove?: (e: React.MouseEvent<HTMLButtonElement>) => void\n}\n\nexport const Pill = React.forwardRef<HTMLSpanElement, PillProps>(function Pill(\n {\n className,\n color = \"accent\",\n variant = \"soft\",\n disabled,\n onRemove,\n onClick,\n children,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n\n // v1 resolves to gray when disabled and only makes the pill interactive when it has an onClick.\n const resolvedColor: PillColor = disabled ? \"gray\" : color\n\n // A decorative family can still arrive from an expression the build cannot see, so this has to\n // be re-evaluated every commit (WP2B2 — the hook closes over this render's resolved value) — but\n // it is the RESOLVED family that decides, and the five core families Pill offers (accent, gray,\n // warning, success, error) need no palette sheet at all.\n useZenithPaletteTokensFor(resolvedColor)\n const interactive = !!onClick && !disabled\n\n // The hover slot is only meaningful while interactive — v1 attaches its hover background class\n // (`interactive && hoverStyleClasses[...]`) only then, so drop it from the inline properties\n // otherwise. Setting it unconditionally would be harmless but would claim a hover state that\n // cannot be reached.\n const slot = VARIANT_SLOTS[variant](resolvedColor)\n if (!interactive) delete slot[HOV]\n\n return (\n <span\n ref={ref}\n data-slot=\"pill\"\n {...{ [SLOT_ATTR]: \"pill\" }}\n data-disabled={disabled || undefined}\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault()\n onClick?.(e as unknown as React.MouseEvent<HTMLSpanElement>)\n }\n }\n : undefined\n }\n className={mergeClasses(\n styles.root,\n interactive && styles.interactive,\n onRemove && styles.hasRemove,\n disabled && styles.disabled,\n className\n )}\n style={{ ...slot } as React.CSSProperties}\n {...props}\n >\n {children}\n {onRemove && (\n // v1 composes the shared ClearButton here — hover, focus ring and the size-3 CloseIcon\n // fallback all live in the lib, not inline.\n <ClearButton\n className={styles.removeSize}\n onClick={onRemove}\n disabled={disabled}\n />\n )}\n </span>\n )\n})\n\nexport { COLORS as PILL_COLORS }\n"],"names":["COLORS","BG","FG","BD","HOV","namespaceFor","family","isCoreFamily","NS","PALETTE_NS","semantic","color","slot","primitive","step","VARIANT_SLOTS","c","useStyles","makeZenithStyles","boxModel","tokens.spacingElement1","tokens.textXs","tokens.leadingXs","tokens.fontWeightBold","tokens.spacingElement2","tokens.radiusMd","shorthands","tokens.accentA8","tokens.spacingGroup2","Pill","React","className","variant","disabled","onRemove","onClick","children","props","ref","styles","resolvedColor","useZenithPaletteTokensFor","interactive","jsxs","SLOT_ATTR","e","mergeClasses","jsx","ClearButton"],"mappings":"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"}
@@ -3,7 +3,7 @@ import * as o from "react";
3
3
  import { createPortal as q } from "react-dom";
4
4
  import { Popover as p } from "../../_virtual/_zenith-runtime-family_popover.js";
5
5
  import { useRender as G } from "../../_virtual/_zenith-runtime-family_use-render.js";
6
- import { SLOT_ATTR as m, mergeClasses as P, shorthands as g } from "@epilot/zenith-runtime/v1";
6
+ import { SLOT_ATTR as m, mergeClasses as P, shorthands as g } from "@epilot/zenith-runtime/v1/core.js";
7
7
  import { useAppearanceAttributes as B } from "../appearance-boundary/appearance-boundary.js";
8
8
  import { useDensity as J } from "../density-provider/density-provider.js";
9
9
  import { makeZenithStyles as K } from "../../styles/make-styles.js";