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

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 (178) hide show
  1. package/README.md +1 -1
  2. package/dist/_virtual/_zenith-runtime-family_accordion.js +1 -1
  3. package/dist/_virtual/_zenith-runtime-family_alert-dialog.js +1 -1
  4. package/dist/_virtual/_zenith-runtime-family_avatar.js +1 -1
  5. package/dist/_virtual/_zenith-runtime-family_button.js +1 -1
  6. package/dist/_virtual/_zenith-runtime-family_checkbox.js +1 -1
  7. package/dist/_virtual/_zenith-runtime-family_csp-provider.js +1 -1
  8. package/dist/_virtual/_zenith-runtime-family_dialog.js +1 -1
  9. package/dist/_virtual/_zenith-runtime-family_direction-provider.js +1 -1
  10. package/dist/_virtual/_zenith-runtime-family_menu.js +1 -1
  11. package/dist/_virtual/_zenith-runtime-family_merge-props.js +1 -1
  12. package/dist/_virtual/_zenith-runtime-family_popover.js +1 -1
  13. package/dist/_virtual/_zenith-runtime-family_radio-group.js +1 -1
  14. package/dist/_virtual/_zenith-runtime-family_radio.js +1 -1
  15. package/dist/_virtual/_zenith-runtime-family_scroll-area.js +1 -1
  16. package/dist/_virtual/_zenith-runtime-family_select.js +1 -1
  17. package/dist/_virtual/_zenith-runtime-family_separator.js +1 -1
  18. package/dist/_virtual/_zenith-runtime-family_switch.js +1 -1
  19. package/dist/_virtual/_zenith-runtime-family_tabs.js +1 -1
  20. package/dist/_virtual/_zenith-runtime-family_toast.js +1 -1
  21. package/dist/_virtual/_zenith-runtime-family_toggle-group.js +1 -1
  22. package/dist/_virtual/_zenith-runtime-family_toggle.js +1 -1
  23. package/dist/_virtual/_zenith-runtime-family_tooltip.js +1 -1
  24. package/dist/_virtual/_zenith-runtime-family_use-render.js +1 -1
  25. package/dist/components/accordion/accordion.js +1 -1
  26. package/dist/components/accordion/accordion.js.map +1 -1
  27. package/dist/components/alert-dialog/alert-dialog.js +1 -1
  28. package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
  29. package/dist/components/appearance-boundary/appearance-boundary.js +1 -1
  30. package/dist/components/appearance-boundary/appearance-boundary.js.map +1 -1
  31. package/dist/components/avatar/avatar-group.js +1 -1
  32. package/dist/components/avatar/avatar-group.js.map +1 -1
  33. package/dist/components/avatar/avatar.js +1 -1
  34. package/dist/components/avatar/avatar.js.map +1 -1
  35. package/dist/components/badge/badge.js +1 -1
  36. package/dist/components/badge/badge.js.map +1 -1
  37. package/dist/components/breadcrumb/breadcrumb.js +1 -1
  38. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  39. package/dist/components/button/button.js +1 -1
  40. package/dist/components/button/button.js.map +1 -1
  41. package/dist/components/button-group/button-group.js +1 -1
  42. package/dist/components/button-group/button-group.js.map +1 -1
  43. package/dist/components/callout/callout.js +1 -1
  44. package/dist/components/callout/callout.js.map +1 -1
  45. package/dist/components/card/card.js +1 -1
  46. package/dist/components/card/card.js.map +1 -1
  47. package/dist/components/checkbox/checkbox.js +41 -39
  48. package/dist/components/checkbox/checkbox.js.map +1 -1
  49. package/dist/components/code-block/code-block.js +1 -1
  50. package/dist/components/code-block/code-block.js.map +1 -1
  51. package/dist/components/code-editor/code-editor.js +1 -1
  52. package/dist/components/code-editor/code-editor.js.map +1 -1
  53. package/dist/components/collapsible-sidebar/collapsible-sidebar.js +1 -1
  54. package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
  55. package/dist/components/command/command.js +1 -1
  56. package/dist/components/command/command.js.map +1 -1
  57. package/dist/components/data-table/data-table-body.js +1 -1
  58. package/dist/components/data-table/data-table-body.js.map +1 -1
  59. package/dist/components/data-table/data-table-column-header.js +1 -1
  60. package/dist/components/data-table/data-table-column-header.js.map +1 -1
  61. package/dist/components/data-table/data-table-column-order.js +1 -1
  62. package/dist/components/data-table/data-table-column-order.js.map +1 -1
  63. package/dist/components/data-table/data-table-column-visibility.js +1 -1
  64. package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
  65. package/dist/components/data-table/data-table-content.js +1 -1
  66. package/dist/components/data-table/data-table-content.js.map +1 -1
  67. package/dist/components/data-table/data-table-error.js +1 -1
  68. package/dist/components/data-table/data-table-error.js.map +1 -1
  69. package/dist/components/data-table/data-table-footer.js +1 -1
  70. package/dist/components/data-table/data-table-footer.js.map +1 -1
  71. package/dist/components/data-table/data-table-header-draggable.js +1 -1
  72. package/dist/components/data-table/data-table-header-draggable.js.map +1 -1
  73. package/dist/components/data-table/data-table-header.js +1 -1
  74. package/dist/components/data-table/data-table-header.js.map +1 -1
  75. package/dist/components/data-table/data-table-loading.js +1 -1
  76. package/dist/components/data-table/data-table-loading.js.map +1 -1
  77. package/dist/components/data-table/data-table-resize-handle.js +1 -1
  78. package/dist/components/data-table/data-table-resize-handle.js.map +1 -1
  79. package/dist/components/data-table/data-table-row.js +1 -1
  80. package/dist/components/data-table/data-table-row.js.map +1 -1
  81. package/dist/components/data-table/data-table-toolbar.js +1 -1
  82. package/dist/components/data-table/data-table-toolbar.js.map +1 -1
  83. package/dist/components/data-table/data-table.js +1 -1
  84. package/dist/components/data-table/data-table.js.map +1 -1
  85. package/dist/components/date-range-picker/date-range-picker.js +1 -1
  86. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  87. package/dist/components/date-range-picker/range-calendar.js +1 -1
  88. package/dist/components/date-range-picker/range-calendar.js.map +1 -1
  89. package/dist/components/date-time-picker/calendar.js +1 -1
  90. package/dist/components/date-time-picker/calendar.js.map +1 -1
  91. package/dist/components/date-time-picker/date-time-picker-input.js +1 -1
  92. package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
  93. package/dist/components/date-time-picker/date-time-picker-panel.js +1 -1
  94. package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
  95. package/dist/components/date-time-picker/date-time-picker.js +1 -1
  96. package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
  97. package/dist/components/date-time-picker/time-picker.js +1 -1
  98. package/dist/components/date-time-picker/time-picker.js.map +1 -1
  99. package/dist/components/density-provider/density-provider.js +1 -1
  100. package/dist/components/dialog/dialog.js +1 -1
  101. package/dist/components/dialog/dialog.js.map +1 -1
  102. package/dist/components/drawer/drawer.js +1 -1
  103. package/dist/components/drawer/drawer.js.map +1 -1
  104. package/dist/components/dropdown-menu/dropdown-menu.js +1 -1
  105. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  106. package/dist/components/field/field-combobox.js +1 -1
  107. package/dist/components/field/field-combobox.js.map +1 -1
  108. package/dist/components/field/field-select.js +1 -1
  109. package/dist/components/field/field-select.js.map +1 -1
  110. package/dist/components/field/field.js +1 -1
  111. package/dist/components/field/field.js.map +1 -1
  112. package/dist/components/label/label.js +1 -1
  113. package/dist/components/label/label.js.map +1 -1
  114. package/dist/components/list/list.js +1 -1
  115. package/dist/components/list/list.js.map +1 -1
  116. package/dist/components/option-card/option-card.js +1 -1
  117. package/dist/components/option-card/option-card.js.map +1 -1
  118. package/dist/components/pill/pill.js +1 -1
  119. package/dist/components/pill/pill.js.map +1 -1
  120. package/dist/components/popover/popover.js +1 -1
  121. package/dist/components/popover/popover.js.map +1 -1
  122. package/dist/components/radio/radio.js +15 -12
  123. package/dist/components/radio/radio.js.map +1 -1
  124. package/dist/components/scroll-area/scroll-area.js +1 -1
  125. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  126. package/dist/components/scroll-area/scrollbar-styles.js +1 -1
  127. package/dist/components/scroll-area/scrollbar-styles.js.map +1 -1
  128. package/dist/components/scroll-overflow/scroll-overflow.js +1 -1
  129. package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
  130. package/dist/components/segmented-control/segmented-control.js +1 -1
  131. package/dist/components/segmented-control/segmented-control.js.map +1 -1
  132. package/dist/components/select/select.js +178 -176
  133. package/dist/components/select/select.js.map +1 -1
  134. package/dist/components/separator/separator.js +1 -1
  135. package/dist/components/separator/separator.js.map +1 -1
  136. package/dist/components/skeleton/skeleton.js +1 -1
  137. package/dist/components/skeleton/skeleton.js.map +1 -1
  138. package/dist/components/slot/compose-as-child.js +1 -1
  139. package/dist/components/slot/compose-as-child.js.map +1 -1
  140. package/dist/components/spinner/spinner.js +1 -1
  141. package/dist/components/spinner/spinner.js.map +1 -1
  142. package/dist/components/surface/surface.js +1 -1
  143. package/dist/components/surface/surface.js.map +1 -1
  144. package/dist/components/switch/switch.js +59 -57
  145. package/dist/components/switch/switch.js.map +1 -1
  146. package/dist/components/table/table-pagination.js +1 -1
  147. package/dist/components/table/table-pagination.js.map +1 -1
  148. package/dist/components/table/table.js +1 -1
  149. package/dist/components/table/table.js.map +1 -1
  150. package/dist/components/tabs/tabs.js +1 -1
  151. package/dist/components/tabs/tabs.js.map +1 -1
  152. package/dist/components/text/text.js +1 -1
  153. package/dist/components/text/text.js.map +1 -1
  154. package/dist/components/toast/toast.js +1 -1
  155. package/dist/components/toast/toast.js.map +1 -1
  156. package/dist/components/toggle/toggle-group.js +1 -1
  157. package/dist/components/toggle/toggle-group.js.map +1 -1
  158. package/dist/components/toggle/toggle.js +1 -1
  159. package/dist/components/toggle/toggle.js.map +1 -1
  160. package/dist/components/tooltip/tooltip.js +1 -1
  161. package/dist/components/tooltip/tooltip.js.map +1 -1
  162. package/dist/index.js +1 -1
  163. package/dist/lib/clear-button.js +1 -1
  164. package/dist/lib/clear-button.js.map +1 -1
  165. package/dist/lib/hidden-input-box.js +26 -0
  166. package/dist/lib/hidden-input-box.js.map +1 -0
  167. package/dist/packages/tokens/dist/delivery/index.js +1 -1
  168. package/dist/packages/tokens/dist/delivery/index.js.map +1 -1
  169. package/dist/packages/tokens/dist/install.js +1 -1
  170. package/dist/packages/tokens/dist/install.js.map +1 -1
  171. package/dist/renderer/served.js +1 -1
  172. package/dist/renderer/served.js.map +1 -1
  173. package/dist/styles/host-reset.js.map +1 -1
  174. package/dist/styles/make-styles.js +1 -1
  175. package/dist/styles/make-styles.js.map +1 -1
  176. package/dist/styles/text-box.js.map +1 -1
  177. package/dist/tokens.json +1 -1
  178. package/package.json +3 -4
@@ -1 +1 @@
1
- {"version":3,"file":"time-picker.js","sources":["../../../src/components/date-time-picker/time-picker.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, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\n\nimport {\n getHours,\n getMinutes,\n padNumber,\n updateTime,\n} from \"./date-time-picker-utils\"\n\nconst HOURS = Array.from({ length: 24 }, (_, i) => i)\n\nexport type TimePickerProps = {\n value: Date | null\n onChange: (date: Date) => void\n onTimeSelect?: () => void\n disablePast?: boolean\n currentTimeInTimezone?: Date\n fillHeight?: boolean\n minuteStep?: number\n className?: string\n /**\n * Accessible name for the hours column. Pass a translated string. These are ACCESSIBLE NAMES,\n * not visible headers, and the distinction is deliberate.\n */\n hoursLabel?: string\n /** Accessible name for the minutes column. Pass a translated string. See `hoursLabel`. */\n minutesLabel?: string\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"stretch\",\n justifyContent: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n },\n fillHeight: {\n ...boxModel,\n height: \"100%\",\n },\n column: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n width: \"3.5rem\",\n },\n columnFillHeight: {\n ...boxModel,\n minHeight: \"0\",\n },\n scroll: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"column\",\n overflowY: \"auto\",\n overflowX: \"hidden\",\n width: \"100%\",\n alignItems: \"center\",\n ...shorthands.borderRadius(tokens.radiusMd),\n ...shorthands.border(\"1px\", \"solid\", tokens.grayA5),\n scrollbarWidth: \"thin\",\n scrollbarColor: `${tokens.grayA6} transparent`,\n },\n scrollFixed: {\n ...boxModel,\n height: \"8rem\",\n },\n scrollFill: {\n ...boxModel,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n minHeight: \"0\",\n },\n separator: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.textBase,\n lineHeight: tokens.leadingBase,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA8,\n },\n timeBtn: {\n ...nativeControl,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n ...shorthands.borderRadius(tokens.radiusMd),\n transitionProperty: \"background-color, color\",\n transitionDuration: \"150ms\",\n minHeight: \"2rem\",\n width: \"100%\",\n maxWidth: \"3rem\",\n ...shorthands.border(\"0\"),\n outlineStyle: \"none\",\n },\n timeBtnDefault: {\n backgroundColor: \"transparent\",\n color: tokens.grayA11,\n \":hover\": {\n backgroundColor: tokens.grayA4,\n },\n },\n timeBtnSelected: {\n fontWeight: tokens.fontWeightSemibold,\n backgroundColor: tokens.accentSolid,\n color: tokens.accentContrast,\n \":hover\": {\n backgroundColor: tokens.accentSolidHover,\n },\n },\n timeBtnDisabled: {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n timeBtnEnabled: {\n cursor: \"pointer\",\n },\n})\n\ntype TimeButtonProps = {\n value: number\n isSelected: boolean\n isDisabled: boolean\n onClick: (value: number) => void\n}\n\nconst TimeButton = React.memo(function TimeButton({\n value,\n isSelected,\n isDisabled,\n onClick,\n}: TimeButtonProps) {\n const styles = useStyles()\n const handleClick = React.useCallback(() => {\n if (!isDisabled) {\n onClick(value)\n }\n }, [onClick, value, isDisabled])\n\n return (\n <button\n aria-disabled={isDisabled}\n aria-pressed={isSelected}\n className={mergeClasses(\n styles.timeBtn,\n !isSelected && styles.timeBtnDefault,\n isSelected && styles.timeBtnSelected,\n isDisabled ? styles.timeBtnDisabled : styles.timeBtnEnabled\n )}\n data-selected={isSelected}\n data-slot=\"time-button\"\n {...{ [SLOT_ATTR]: \"time-button\" }}\n data-value={value}\n disabled={isDisabled}\n onClick={handleClick}\n type=\"button\"\n >\n {padNumber(value)}\n </button>\n )\n})\n\nTimeButton.displayName = \"TimeButton\"\n\nexport const TimePicker = React.forwardRef<HTMLDivElement, TimePickerProps>(\n function TimePicker(\n {\n value,\n onChange,\n onTimeSelect,\n disablePast = false,\n currentTimeInTimezone,\n fillHeight = false,\n minuteStep = 1,\n className,\n hoursLabel = \"Hours\",\n minutesLabel = \"Minutes\",\n },\n ref\n ) {\n const styles = useStyles()\n const step = Math.max(1, Math.floor(minuteStep))\n\n // Enumerate buckets 0, step, 2·step… stopping at <60 so a step that\n // doesn't divide 60 evenly (e.g. 7) can never produce an out-of-range\n // value like 63.\n const MINUTES = React.useMemo(() => {\n const buckets: number[] = []\n for (let m = 0; m < 60; m += step) buckets.push(m)\n\n return buckets\n }, [step])\n\n const selectedHour = value !== null ? getHours(value) : -1\n const rawMinute = value !== null ? getMinutes(value) : -1\n const selectedMinute =\n value === null\n ? -1\n : step === 1\n ? rawMinute\n : Math.min(\n MINUTES[MINUTES.length - 1],\n Math.round(rawMinute / step) * step\n )\n\n const hoursRef = React.useRef<HTMLDivElement>(null)\n const minutesRef = React.useRef<HTMLDivElement>(null)\n\n const now = React.useMemo(\n () => currentTimeInTimezone || new Date(),\n [currentTimeInTimezone]\n )\n const isToday = React.useMemo(() => {\n if (!value) return false\n\n return (\n value.getFullYear() === now.getFullYear() &&\n value.getMonth() === now.getMonth() &&\n value.getDate() === now.getDate()\n )\n }, [value, now])\n\n const currentHour = now.getHours()\n const currentMinute = now.getMinutes()\n\n const isHourDisabled = React.useCallback(\n (hour: number) => {\n if (!disablePast || !isToday) return false\n\n return hour < currentHour\n },\n [disablePast, isToday, currentHour]\n )\n\n const isMinuteDisabled = React.useCallback(\n (minute: number) => {\n if (!disablePast || !isToday) return false\n if (selectedHour < currentHour) return true\n if (selectedHour === currentHour) return minute < currentMinute\n\n return false\n },\n [disablePast, isToday, selectedHour, currentHour, currentMinute]\n )\n\n const handleHourChange = React.useCallback(\n (hour: number) => {\n const base = value || now\n const minute = selectedMinute >= 0 ? selectedMinute : 0\n\n onChange(updateTime(base, hour, minute))\n },\n [onChange, value, now, selectedMinute]\n )\n\n const handleMinuteChange = React.useCallback(\n (minute: number) => {\n const base = value || now\n const hour = selectedHour >= 0 ? selectedHour : 0\n\n onChange(updateTime(base, hour, minute))\n onTimeSelect?.()\n },\n [onChange, onTimeSelect, value, now, selectedHour]\n )\n\n React.useEffect(() => {\n if (hoursRef.current) {\n const selectedElement = hoursRef.current.querySelector(\n `[data-value=\"${selectedHour}\"]`\n )\n\n if (selectedElement) {\n selectedElement.scrollIntoView?.({\n block: \"center\",\n behavior: \"auto\",\n })\n }\n }\n if (minutesRef.current) {\n const selectedElement = minutesRef.current.querySelector(\n `[data-value=\"${selectedMinute}\"]`\n )\n\n if (selectedElement) {\n selectedElement.scrollIntoView?.({\n block: \"center\",\n behavior: \"auto\",\n })\n }\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <div\n ref={ref}\n className={mergeClasses(\n styles.root,\n fillHeight && styles.fillHeight,\n className\n )}\n data-slot=\"timepicker\"\n {...{ [SLOT_ATTR]: \"timepicker\" }}\n >\n <div\n className={mergeClasses(\n styles.column,\n fillHeight && styles.columnFillHeight\n )}\n >\n <div\n className={mergeClasses(\n styles.scroll,\n fillHeight ? styles.scrollFill : styles.scrollFixed\n )}\n aria-label={hoursLabel}\n data-slot=\"timepicker-scroll\"\n role=\"group\"\n {...{ [SLOT_ATTR]: \"timepicker-scroll\" }}\n ref={hoursRef}\n >\n {HOURS.map((hour) => (\n <TimeButton\n isDisabled={isHourDisabled(hour)}\n isSelected={hour === selectedHour}\n key={hour}\n onClick={handleHourChange}\n value={hour}\n />\n ))}\n </div>\n </div>\n\n <div className={styles.separator}>:</div>\n\n <div\n className={mergeClasses(\n styles.column,\n fillHeight && styles.columnFillHeight\n )}\n >\n <div\n className={mergeClasses(\n styles.scroll,\n fillHeight ? styles.scrollFill : styles.scrollFixed\n )}\n aria-label={minutesLabel}\n data-slot=\"timepicker-scroll\"\n role=\"group\"\n {...{ [SLOT_ATTR]: \"timepicker-scroll\" }}\n ref={minutesRef}\n >\n {MINUTES.map((minute) => (\n <TimeButton\n isDisabled={isMinuteDisabled(minute)}\n isSelected={minute === selectedMinute}\n key={minute}\n onClick={handleMinuteChange}\n value={minute}\n />\n ))}\n </div>\n </div>\n </div>\n )\n }\n)\n"],"names":["HOURS","_","i","useStyles","makeZenithStyles","shorthands","tokens.spacingElement1","boxModel","tokens.radiusMd","tokens.grayA5","tokens.grayA6","tokens.textBase","tokens.leadingBase","tokens.fontWeightSemibold","tokens.grayA8","nativeControl","tokens.textSm","tokens.leadingSm","tokens.grayA11","tokens.grayA4","tokens.accentSolid","tokens.accentContrast","tokens.accentSolidHover","TimeButton","React","value","isSelected","isDisabled","onClick","styles","handleClick","jsx","mergeClasses","SLOT_ATTR","TimePicker","onChange","onTimeSelect","disablePast","currentTimeInTimezone","fillHeight","minuteStep","className","hoursLabel","minutesLabel","ref","step","MINUTES","buckets","m","selectedHour","getHours","rawMinute","getMinutes","selectedMinute","hoursRef","minutesRef","now","isToday","currentHour","currentMinute","isHourDisabled","hour","isMinuteDisabled","minute","handleHourChange","base","updateTime","handleMinuteChange","selectedElement","_a","_b","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"time-picker.js","sources":["../../../src/components/date-time-picker/time-picker.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, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\n\nimport {\n getHours,\n getMinutes,\n padNumber,\n updateTime,\n} from \"./date-time-picker-utils\"\n\nconst HOURS = Array.from({ length: 24 }, (_, i) => i)\n\nexport type TimePickerProps = {\n value: Date | null\n onChange: (date: Date) => void\n onTimeSelect?: () => void\n disablePast?: boolean\n currentTimeInTimezone?: Date\n fillHeight?: boolean\n minuteStep?: number\n className?: string\n /**\n * Accessible name for the hours column. Pass a translated string. These are ACCESSIBLE NAMES,\n * not visible headers, and the distinction is deliberate.\n */\n hoursLabel?: string\n /** Accessible name for the minutes column. Pass a translated string. See `hoursLabel`. */\n minutesLabel?: string\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"stretch\",\n justifyContent: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n },\n fillHeight: {\n ...boxModel,\n height: \"100%\",\n },\n column: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n width: \"3.5rem\",\n },\n columnFillHeight: {\n ...boxModel,\n minHeight: \"0\",\n },\n scroll: {\n ...boxModel,\n display: \"flex\",\n flexDirection: \"column\",\n overflowY: \"auto\",\n overflowX: \"hidden\",\n width: \"100%\",\n alignItems: \"center\",\n ...shorthands.borderRadius(tokens.radiusMd),\n ...shorthands.border(\"1px\", \"solid\", tokens.grayA5),\n scrollbarWidth: \"thin\",\n scrollbarColor: `${tokens.grayA6} transparent`,\n },\n scrollFixed: {\n ...boxModel,\n height: \"8rem\",\n },\n scrollFill: {\n ...boxModel,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n minHeight: \"0\",\n },\n separator: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.textBase,\n lineHeight: tokens.leadingBase,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA8,\n },\n timeBtn: {\n ...nativeControl,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n ...shorthands.borderRadius(tokens.radiusMd),\n transitionProperty: \"background-color, color\",\n transitionDuration: \"150ms\",\n minHeight: \"2rem\",\n width: \"100%\",\n maxWidth: \"3rem\",\n ...shorthands.border(\"0\"),\n outlineStyle: \"none\",\n },\n timeBtnDefault: {\n backgroundColor: \"transparent\",\n color: tokens.grayA11,\n \":hover\": {\n backgroundColor: tokens.grayA4,\n },\n },\n timeBtnSelected: {\n fontWeight: tokens.fontWeightSemibold,\n backgroundColor: tokens.accentSolid,\n color: tokens.accentContrast,\n \":hover\": {\n backgroundColor: tokens.accentSolidHover,\n },\n },\n timeBtnDisabled: {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n timeBtnEnabled: {\n cursor: \"pointer\",\n },\n})\n\ntype TimeButtonProps = {\n value: number\n isSelected: boolean\n isDisabled: boolean\n onClick: (value: number) => void\n}\n\nconst TimeButton = React.memo(function TimeButton({\n value,\n isSelected,\n isDisabled,\n onClick,\n}: TimeButtonProps) {\n const styles = useStyles()\n const handleClick = React.useCallback(() => {\n if (!isDisabled) {\n onClick(value)\n }\n }, [onClick, value, isDisabled])\n\n return (\n <button\n aria-disabled={isDisabled}\n aria-pressed={isSelected}\n className={mergeClasses(\n styles.timeBtn,\n !isSelected && styles.timeBtnDefault,\n isSelected && styles.timeBtnSelected,\n isDisabled ? styles.timeBtnDisabled : styles.timeBtnEnabled\n )}\n data-selected={isSelected}\n data-slot=\"time-button\"\n {...{ [SLOT_ATTR]: \"time-button\" }}\n data-value={value}\n disabled={isDisabled}\n onClick={handleClick}\n type=\"button\"\n >\n {padNumber(value)}\n </button>\n )\n})\n\nTimeButton.displayName = \"TimeButton\"\n\nexport const TimePicker = React.forwardRef<HTMLDivElement, TimePickerProps>(\n function TimePicker(\n {\n value,\n onChange,\n onTimeSelect,\n disablePast = false,\n currentTimeInTimezone,\n fillHeight = false,\n minuteStep = 1,\n className,\n hoursLabel = \"Hours\",\n minutesLabel = \"Minutes\",\n },\n ref\n ) {\n const styles = useStyles()\n const step = Math.max(1, Math.floor(minuteStep))\n\n // Enumerate buckets 0, step, 2·step… stopping at <60 so a step that\n // doesn't divide 60 evenly (e.g. 7) can never produce an out-of-range\n // value like 63.\n const MINUTES = React.useMemo(() => {\n const buckets: number[] = []\n for (let m = 0; m < 60; m += step) buckets.push(m)\n\n return buckets\n }, [step])\n\n const selectedHour = value !== null ? getHours(value) : -1\n const rawMinute = value !== null ? getMinutes(value) : -1\n const selectedMinute =\n value === null\n ? -1\n : step === 1\n ? rawMinute\n : Math.min(\n MINUTES[MINUTES.length - 1],\n Math.round(rawMinute / step) * step\n )\n\n const hoursRef = React.useRef<HTMLDivElement>(null)\n const minutesRef = React.useRef<HTMLDivElement>(null)\n\n const now = React.useMemo(\n () => currentTimeInTimezone || new Date(),\n [currentTimeInTimezone]\n )\n const isToday = React.useMemo(() => {\n if (!value) return false\n\n return (\n value.getFullYear() === now.getFullYear() &&\n value.getMonth() === now.getMonth() &&\n value.getDate() === now.getDate()\n )\n }, [value, now])\n\n const currentHour = now.getHours()\n const currentMinute = now.getMinutes()\n\n const isHourDisabled = React.useCallback(\n (hour: number) => {\n if (!disablePast || !isToday) return false\n\n return hour < currentHour\n },\n [disablePast, isToday, currentHour]\n )\n\n const isMinuteDisabled = React.useCallback(\n (minute: number) => {\n if (!disablePast || !isToday) return false\n if (selectedHour < currentHour) return true\n if (selectedHour === currentHour) return minute < currentMinute\n\n return false\n },\n [disablePast, isToday, selectedHour, currentHour, currentMinute]\n )\n\n const handleHourChange = React.useCallback(\n (hour: number) => {\n const base = value || now\n const minute = selectedMinute >= 0 ? selectedMinute : 0\n\n onChange(updateTime(base, hour, minute))\n },\n [onChange, value, now, selectedMinute]\n )\n\n const handleMinuteChange = React.useCallback(\n (minute: number) => {\n const base = value || now\n const hour = selectedHour >= 0 ? selectedHour : 0\n\n onChange(updateTime(base, hour, minute))\n onTimeSelect?.()\n },\n [onChange, onTimeSelect, value, now, selectedHour]\n )\n\n React.useEffect(() => {\n if (hoursRef.current) {\n const selectedElement = hoursRef.current.querySelector(\n `[data-value=\"${selectedHour}\"]`\n )\n\n if (selectedElement) {\n selectedElement.scrollIntoView?.({\n block: \"center\",\n behavior: \"auto\",\n })\n }\n }\n if (minutesRef.current) {\n const selectedElement = minutesRef.current.querySelector(\n `[data-value=\"${selectedMinute}\"]`\n )\n\n if (selectedElement) {\n selectedElement.scrollIntoView?.({\n block: \"center\",\n behavior: \"auto\",\n })\n }\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return (\n <div\n ref={ref}\n className={mergeClasses(\n styles.root,\n fillHeight && styles.fillHeight,\n className\n )}\n data-slot=\"timepicker\"\n {...{ [SLOT_ATTR]: \"timepicker\" }}\n >\n <div\n className={mergeClasses(\n styles.column,\n fillHeight && styles.columnFillHeight\n )}\n >\n <div\n className={mergeClasses(\n styles.scroll,\n fillHeight ? styles.scrollFill : styles.scrollFixed\n )}\n aria-label={hoursLabel}\n data-slot=\"timepicker-scroll\"\n role=\"group\"\n {...{ [SLOT_ATTR]: \"timepicker-scroll\" }}\n ref={hoursRef}\n >\n {HOURS.map((hour) => (\n <TimeButton\n isDisabled={isHourDisabled(hour)}\n isSelected={hour === selectedHour}\n key={hour}\n onClick={handleHourChange}\n value={hour}\n />\n ))}\n </div>\n </div>\n\n <div className={styles.separator}>:</div>\n\n <div\n className={mergeClasses(\n styles.column,\n fillHeight && styles.columnFillHeight\n )}\n >\n <div\n className={mergeClasses(\n styles.scroll,\n fillHeight ? styles.scrollFill : styles.scrollFixed\n )}\n aria-label={minutesLabel}\n data-slot=\"timepicker-scroll\"\n role=\"group\"\n {...{ [SLOT_ATTR]: \"timepicker-scroll\" }}\n ref={minutesRef}\n >\n {MINUTES.map((minute) => (\n <TimeButton\n isDisabled={isMinuteDisabled(minute)}\n isSelected={minute === selectedMinute}\n key={minute}\n onClick={handleMinuteChange}\n value={minute}\n />\n ))}\n </div>\n </div>\n </div>\n )\n }\n)\n"],"names":["HOURS","_","i","useStyles","makeZenithStyles","shorthands","tokens.spacingElement1","boxModel","tokens.radiusMd","tokens.grayA5","tokens.grayA6","tokens.textBase","tokens.leadingBase","tokens.fontWeightSemibold","tokens.grayA8","nativeControl","tokens.textSm","tokens.leadingSm","tokens.grayA11","tokens.grayA4","tokens.accentSolid","tokens.accentContrast","tokens.accentSolidHover","TimeButton","React","value","isSelected","isDisabled","onClick","styles","handleClick","jsx","mergeClasses","SLOT_ATTR","TimePicker","onChange","onTimeSelect","disablePast","currentTimeInTimezone","fillHeight","minuteStep","className","hoursLabel","minutesLabel","ref","step","MINUTES","buckets","m","selectedHour","getHours","rawMinute","getMinutes","selectedMinute","hoursRef","minutesRef","now","isToday","currentHour","currentMinute","isHourDisabled","hour","isMinuteDisabled","minute","handleHourChange","base","updateTime","handleMinuteChange","selectedElement","_a","_b","jsxs"],"mappings":";;;;;;;AAeA,MAAMA,KAAQ,MAAM,KAAK,EAAE,QAAQ,MAAM,CAACC,GAAGC,MAAMA,CAAC,GAoB9CC,IAAYC,EAAiB;AAAA,EACjC,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,GAAGC,EAAW,IAAIC,EAAsB;AAAA,EAAA;AAAA,EAE1C,YAAY;AAAA,IACV,GAAGC;AAAA,IACH,QAAQ;AAAA,EAAA;AAAA,EAEV,QAAQ;AAAA,IACN,GAAGA;AAAA,IACH,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA;AAAA,EAET,kBAAkB;AAAA,IAChB,GAAGA;AAAA,IACH,WAAW;AAAA,EAAA;AAAA,EAEb,QAAQ;AAAA,IACN,GAAGA;AAAA,IACH,SAAS;AAAA,IACT,eAAe;AAAA,IACf,WAAW;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,GAAGF,EAAW,aAAaG,CAAe;AAAA,IAC1C,GAAGH,EAAW,OAAO,OAAO,SAASI,EAAa;AAAA,IAClD,gBAAgB;AAAA,IAChB,gBAAgB,GAAGC,EAAa;AAAA,EAAA;AAAA,EAElC,aAAa;AAAA,IACX,GAAGH;AAAA,IACH,QAAQ;AAAA,EAAA;AAAA,EAEV,YAAY;AAAA,IACV,GAAGA;AAAA,IACH,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,EAAA;AAAA,EAEb,WAAW;AAAA,IACT,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,UAAUI;AAAAA,IACV,YAAYC;AAAAA,IACZ,YAAYC;AAAAA,IACZ,OAAOC;AAAAA,EAAO;AAAA,EAEhB,SAAS;AAAA,IACP,GAAGC;AAAA,IACH,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,UAAUC;AAAAA,IACV,YAAYC;AAAAA,IACZ,GAAGZ,EAAW,aAAaG,CAAe;AAAA,IAC1C,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,WAAW;AAAA,IACX,OAAO;AAAA,IACP,UAAU;AAAA,IACV,GAAGH,EAAW,OAAO,GAAG;AAAA,IACxB,cAAc;AAAA,EAAA;AAAA,EAEhB,gBAAgB;AAAA,IACd,iBAAiB;AAAA,IACjB,OAAOa;AAAAA,IACP,UAAU;AAAA,MACR,iBAAiBC;AAAAA,IAAO;AAAA,EAC1B;AAAA,EAEF,iBAAiB;AAAA,IACf,YAAYN;AAAAA,IACZ,iBAAiBO;AAAAA,IACjB,OAAOC;AAAAA,IACP,UAAU;AAAA,MACR,iBAAiBC;AAAAA,IAAO;AAAA,EAC1B;AAAA,EAEF,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,SAAS;AAAA,EAAA;AAAA,EAEX,gBAAgB;AAAA,IACd,QAAQ;AAAA,EAAA;AAEZ,CAAC,GASKC,IAAaC,EAAM,KAAK,SAAoB;AAAA,EAChD,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AACF,GAAoB;AAClB,QAAMC,IAAS1B,EAAA,GACT2B,IAAcN,EAAM,YAAY,MAAM;AAC1C,IAAKG,KACHC,EAAQH,CAAK;AAAA,EAEjB,GAAG,CAACG,GAASH,GAAOE,CAAU,CAAC;AAE/B,SACE,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,iBAAeJ;AAAA,MACf,gBAAcD;AAAA,MACd,WAAWM;AAAA,QACTH,EAAO;AAAA,QACP,CAACH,KAAcG,EAAO;AAAA,QACtBH,KAAcG,EAAO;AAAA,QACrBF,IAAaE,EAAO,kBAAkBA,EAAO;AAAA,MAAA;AAAA,MAE/C,iBAAeH;AAAA,MACf,aAAU;AAAA,MACJ,CAACO,CAAS,GAAG;AAAA,MACnB,cAAYR;AAAA,MACZ,UAAUE;AAAA,MACV,SAASG;AAAA,MACT,MAAK;AAAA,MAEJ,aAAUL,CAAK;AAAA,IAAA;AAAA,EAAA;AAGtB,CAAC;AAEDF,EAAW,cAAc;AAElB,MAAMW,KAAaV,EAAM;AAAA,EAC9B,SACE;AAAA,IACE,OAAAC;AAAA,IACA,UAAAU;AAAA,IACA,cAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,uBAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,YAAAC,IAAa;AAAA,IACb,WAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,cAAAC,IAAe;AAAA,EAAA,GAEjBC,GACA;AACA,UAAMf,IAAS1B,EAAA,GACT0C,IAAO,KAAK,IAAI,GAAG,KAAK,MAAML,CAAU,CAAC,GAKzCM,IAAUtB,EAAM,QAAQ,MAAM;AAClC,YAAMuB,IAAoB,CAAA;AAC1B,eAASC,IAAI,GAAGA,IAAI,IAAIA,KAAKH,EAAM,CAAAE,EAAQ,KAAKC,CAAC;AAEjD,aAAOD;AAAA,IACT,GAAG,CAACF,CAAI,CAAC,GAEHI,IAAexB,MAAU,OAAOyB,GAASzB,CAAK,IAAI,IAClD0B,IAAY1B,MAAU,OAAO2B,GAAW3B,CAAK,IAAI,IACjD4B,IACJ5B,MAAU,OACN,KACAoB,MAAS,IACPM,IACA,KAAK;AAAA,MACHL,EAAQA,EAAQ,SAAS,CAAC;AAAA,MAC1B,KAAK,MAAMK,IAAYN,CAAI,IAAIA;AAAA,IAAA,GAGnCS,IAAW9B,EAAM,OAAuB,IAAI,GAC5C+B,IAAa/B,EAAM,OAAuB,IAAI,GAE9CgC,IAAMhC,EAAM;AAAA,MAChB,MAAMc,KAAyB,oBAAI,KAAA;AAAA,MACnC,CAACA,CAAqB;AAAA,IAAA,GAElBmB,IAAUjC,EAAM,QAAQ,MACvBC,IAGHA,EAAM,YAAA,MAAkB+B,EAAI,YAAA,KAC5B/B,EAAM,SAAA,MAAe+B,EAAI,cACzB/B,EAAM,QAAA,MAAc+B,EAAI,QAAA,IALP,IAOlB,CAAC/B,GAAO+B,CAAG,CAAC,GAETE,IAAcF,EAAI,SAAA,GAClBG,IAAgBH,EAAI,WAAA,GAEpBI,IAAiBpC,EAAM;AAAA,MAC3B,CAACqC,MACK,CAACxB,KAAe,CAACoB,IAAgB,KAE9BI,IAAOH;AAAA,MAEhB,CAACrB,GAAaoB,GAASC,CAAW;AAAA,IAAA,GAG9BI,IAAmBtC,EAAM;AAAA,MAC7B,CAACuC,MACK,CAAC1B,KAAe,CAACoB,IAAgB,KACjCR,IAAeS,IAAoB,KACnCT,MAAiBS,IAAoBK,IAASJ,IAE3C;AAAA,MAET,CAACtB,GAAaoB,GAASR,GAAcS,GAAaC,CAAa;AAAA,IAAA,GAG3DK,IAAmBxC,EAAM;AAAA,MAC7B,CAACqC,MAAiB;AAChB,cAAMI,IAAOxC,KAAS+B,GAChBO,IAASV,KAAkB,IAAIA,IAAiB;AAEtD,QAAAlB,EAAS+B,EAAWD,GAAMJ,GAAME,CAAM,CAAC;AAAA,MACzC;AAAA,MACA,CAAC5B,GAAUV,GAAO+B,GAAKH,CAAc;AAAA,IAAA,GAGjCc,IAAqB3C,EAAM;AAAA,MAC/B,CAACuC,MAAmB;AAClB,cAAME,IAAOxC,KAAS+B,GAChBK,IAAOZ,KAAgB,IAAIA,IAAe;AAEhD,QAAAd,EAAS+B,EAAWD,GAAMJ,GAAME,CAAM,CAAC,GACvC3B,KAAA,QAAAA;AAAA,MACF;AAAA,MACA,CAACD,GAAUC,GAAcX,GAAO+B,GAAKP,CAAY;AAAA,IAAA;AAGnD,WAAAzB,EAAM,UAAU,MAAM;;AACpB,UAAI8B,EAAS,SAAS;AACpB,cAAMc,IAAkBd,EAAS,QAAQ;AAAA,UACvC,gBAAgBL,CAAY;AAAA,QAAA;AAG9B,QAAImB,OACFC,IAAAD,EAAgB,mBAAhB,QAAAC,EAAA,KAAAD,GAAiC;AAAA,UAC/B,OAAO;AAAA,UACP,UAAU;AAAA,QAAA;AAAA,MAGhB;AACA,UAAIb,EAAW,SAAS;AACtB,cAAMa,IAAkBb,EAAW,QAAQ;AAAA,UACzC,gBAAgBF,CAAc;AAAA,QAAA;AAGhC,QAAIe,OACFE,IAAAF,EAAgB,mBAAhB,QAAAE,EAAA,KAAAF,GAAiC;AAAA,UAC/B,OAAO;AAAA,UACP,UAAU;AAAA,QAAA;AAAA,MAGhB;AAAA,IACF,GAAG,CAAA,CAAE,GAGH,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA3B;AAAA,QACA,WAAWZ;AAAA,UACTH,EAAO;AAAA,UACPU,KAAcV,EAAO;AAAA,UACrBY;AAAA,QAAA;AAAA,QAEF,aAAU;AAAA,QACJ,CAACR,CAAS,GAAG;AAAA,QAEnB,UAAA;AAAA,UAAA,gBAAAF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWC;AAAA,gBACTH,EAAO;AAAA,gBACPU,KAAcV,EAAO;AAAA,cAAA;AAAA,cAGvB,UAAA,gBAAAE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWC;AAAA,oBACTH,EAAO;AAAA,oBACPU,IAAaV,EAAO,aAAaA,EAAO;AAAA,kBAAA;AAAA,kBAE1C,cAAYa;AAAA,kBACZ,aAAU;AAAA,kBACV,MAAK;AAAA,kBACC,CAACT,CAAS,GAAG;AAAA,kBACnB,KAAKqB;AAAA,kBAEJ,UAAAtD,GAAM,IAAI,CAAC6D,MACV,gBAAA9B;AAAA,oBAACR;AAAA,oBAAA;AAAA,sBACC,YAAYqC,EAAeC,CAAI;AAAA,sBAC/B,YAAYA,MAASZ;AAAA,sBAErB,SAASe;AAAA,sBACT,OAAOH;AAAA,oBAAA;AAAA,oBAFFA;AAAA,kBAAA,CAIR;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH;AAAA,UAAA;AAAA,UAGF,gBAAA9B,EAAC,OAAA,EAAI,WAAWF,EAAO,WAAW,UAAA,KAAC;AAAA,UAEnC,gBAAAE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWC;AAAA,gBACTH,EAAO;AAAA,gBACPU,KAAcV,EAAO;AAAA,cAAA;AAAA,cAGvB,UAAA,gBAAAE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWC;AAAA,oBACTH,EAAO;AAAA,oBACPU,IAAaV,EAAO,aAAaA,EAAO;AAAA,kBAAA;AAAA,kBAE1C,cAAYc;AAAA,kBACZ,aAAU;AAAA,kBACV,MAAK;AAAA,kBACC,CAACV,CAAS,GAAG;AAAA,kBACnB,KAAKsB;AAAA,kBAEJ,UAAAT,EAAQ,IAAI,CAACiB,MACZ,gBAAAhC;AAAA,oBAACR;AAAA,oBAAA;AAAA,sBACC,YAAYuC,EAAiBC,CAAM;AAAA,sBACnC,YAAYA,MAAWV;AAAA,sBAEvB,SAASc;AAAA,sBACT,OAAOJ;AAAA,oBAAA;AAAA,oBAFFA;AAAA,kBAAA,CAIR;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as r, Fragment as v } from "react/jsx-runtime";
2
2
  import * as e from "react";
3
- import { SLOT_ATTR as u } from "@epilot/zenith-runtime/v1/core.js";
3
+ import { SLOT_ATTR as u } from "@epilot/zenith-runtime/v1";
4
4
  const f = [
5
5
  "compact",
6
6
  "normal",
@@ -1,7 +1,7 @@
1
1
  import { jsx as r, jsxs as T, Fragment as _ } from "react/jsx-runtime";
2
2
  import * as l from "react";
3
3
  import { Dialog as d } from "../../_virtual/_zenith-runtime-family_dialog.js";
4
- import { mergeClasses as f, SLOT_ATTR as g, shorthands as c } from "@epilot/zenith-runtime/v1/core.js";
4
+ import { mergeClasses as f, SLOT_ATTR as g, shorthands as c } from "@epilot/zenith-runtime/v1";
5
5
  import { useAppearanceAttributes as E } from "../appearance-boundary/appearance-boundary.js";
6
6
  import { useDensity as j } from "../density-provider/density-provider.js";
7
7
  import { makeZenithStyles as Z } from "../../styles/make-styles.js";
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","sources":["../../../src/components/dialog/dialog.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { useAppearanceAttributes } from \"../appearance-boundary/appearance-boundary\"\nimport { useDensity } from \"../density-provider/density-provider\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport { OVERLAY_Z_INDEX } from \"../../styles/overlay-layer\"\nimport * as tokens from \"../../tokens\"\n\nconst easeOut = \"cubic-bezier(0.4, 0, 0.2, 1)\"\nconst easeIn = \"cubic-bezier(0.4, 0, 1, 1)\"\n\nconst useStyles = makeZenithStyles({\n // For the bare native `<button>` a Trigger/Close renders. Not applied under `asChild`, where the\n // child owns its own element and two atom sets would race for the same properties.\n nativeTrigger: {\n ...nativeControl,\n },\n overlay: {\n position: \"fixed\",\n ...shorthands.inset(0),\n zIndex: OVERLAY_Z_INDEX,\n backgroundColor: \"rgb(0 0 0 / 50%)\",\n transitionProperty: \"opacity\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: easeOut,\n \"&[data-starting-style]\": { opacity: 0 },\n \"&[data-ending-style]\": { opacity: 0, transitionTimingFunction: easeIn },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n },\n content: {\n ...boxModel,\n backgroundColor: tokens.body,\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n zIndex: OVERLAY_Z_INDEX,\n display: \"grid\",\n width: \"100%\",\n maxWidth: \"calc(100% - 2rem)\",\n transform: \"translate(-50%, -50%)\",\n ...shorthands.gap(tokens.spacingLayout1),\n ...shorthands.borderRadius(tokens.radiusXl),\n ...shorthands.border(\"1px\", \"solid\", tokens.grayA1),\n // v1 shadow-lg; elevation has no token in this package.\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n transitionProperty: \"opacity, transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: easeOut,\n \"&[data-starting-style]\": {\n opacity: 0,\n transform: \"translate(-50%, -50%) scale(0.95)\",\n },\n \"&[data-ending-style]\": {\n opacity: 0,\n transform: \"translate(-50%, -50%) scale(0.95)\",\n transitionTimingFunction: easeIn,\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n \"&[data-size='sm']\": { maxWidth: tokens.containerSm },\n \"&[data-size='md']\": { maxWidth: tokens.containerMd },\n \"&[data-size='lg']\": { maxWidth: tokens.containerLg },\n \"&[data-size='xl']\": { maxWidth: tokens.containerXl },\n \"&[data-size='2xl']\": { maxWidth: tokens.container2xl },\n \"&[data-size='3xl']\": { maxWidth: tokens.container3xl },\n \"&[data-size='4xl']\": { maxWidth: tokens.container4xl },\n \"&[data-size='5xl']\": { maxWidth: tokens.container5xl },\n \"&[data-size='full-width']\": { maxWidth: \"100%\" },\n },\n contentPadding: {\n ...boxModel,\n ...shorthands.padding(tokens.spacingGroup2),\n },\n close: {\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.focusRing,\n },\n },\n closeButton: {\n ...nativeControl,\n position: \"absolute\",\n top: tokens.spacingGroup2,\n right: tokens.spacingGroup2,\n ...shorthands.padding(tokens.spacingElement2),\n // v1 rounded-full; no full-radius token exists in this package.\n borderRadius: \"9999px\",\n cursor: \"pointer\",\n color: tokens.accentA11,\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.focusRing,\n },\n \":disabled\": {\n pointerEvents: \"none\",\n },\n \"& svg\": {\n display: \"block\",\n pointerEvents: \"none\",\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n header: {\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingElement2),\n textAlign: \"left\",\n },\n footer: {\n display: \"flex\",\n ...shorthands.gap(tokens.spacingElement2),\n justifyContent: \"flex-end\",\n },\n title: {\n ...shorthands.margin(0),\n fontSize: tokens.textLg,\n lineHeight: tokens.leadingLg,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA12,\n },\n description: {\n ...shorthands.margin(0),\n color: tokens.grayA11,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: 0,\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n },\n})\n\nconst XIcon = React.forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n function XIcon(props, ref) {\n return (\n <svg\n ref={ref}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M4.38333 5.31667L1.11667 8.58333C0.994445 8.70556 0.838889 8.76667 0.65 8.76667C0.461111 8.76667 0.305556 8.70556 0.183333 8.58333C0.0611111 8.46111 0 8.30556 0 8.11667C0 7.92778 0.0611111 7.77222 0.183333 7.65L3.45 4.38333L0.183333 1.11667C0.0611111 0.994445 0 0.838889 0 0.65C0 0.461111 0.0611111 0.305556 0.183333 0.183333C0.305556 0.0611111 0.461111 0 0.65 0C0.838889 0 0.994445 0.0611111 1.11667 0.183333L4.38333 3.45L7.65 0.183333C7.77222 0.0611111 7.92778 0 8.11667 0C8.30556 0 8.46111 0.0611111 8.58333 0.183333C8.70556 0.305556 8.76667 0.461111 8.76667 0.65C8.76667 0.838889 8.70556 0.994445 8.58333 1.11667L5.31667 4.38333L8.58333 7.65C8.70556 7.77222 8.76667 7.92778 8.76667 8.11667C8.76667 8.30556 8.70556 8.46111 8.58333 8.58333C8.46111 8.70556 8.30556 8.76667 8.11667 8.76667C7.92778 8.76667 7.77222 8.70556 7.65 8.58333L4.38333 5.31667Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\n// A single child can arrive wrapped in a one-element array depending on the JSX runtime (MDX call\n// sites do this). Radix's Slot normalised that, so the `asChild` shim has to as well.\nfunction onlySlotChild(children: React.ReactNode) {\n const elements = React.Children.toArray(children).filter(React.isValidElement)\n return elements.length === 1 ? elements[0] : undefined\n}\n\n/**\n * Radix's `asChild` over Base UI's `render`: the single child element becomes the part and keeps\n * its own children, since Base UI lets the rendered element's props win the merge.\n */\nfunction slotProps(asChild: boolean, children: React.ReactNode) {\n const child = asChild ? onlySlotChild(children) : undefined\n return child ? { render: child } : { children }\n}\n\n/**\n * A part's props as they were under Radix: its native element's own (DOM attributes, React's\n * handler types, a `CSSProperties` style, a string `className`, `ref`) plus `asChild`. Base UI's\n * prop types widen `style` and `className` to functions of the part's state, wrap every handler's\n * event in `BaseUIEvent` and add props of their own; none of that reaches the public surface.\n */\ntype NativePartProps<Tag extends \"button\" | \"div\" | \"h2\" | \"p\"> =\n React.ComponentProps<Tag> & {\n /** Renders the single child element as this part, merging its props and behaviour onto it. */\n asChild?: boolean\n }\n\n/**\n * Radix-shaped focus interception over Base UI's `initialFocus`/`finalFocus`. `preventDefault()`\n * leaves focus where it is; otherwise the default move happens, because Base UI reads a callback\n * that returns `undefined` as \"move nothing\".\n */\nfunction radixFocusCallback(handler: ((event: Event) => void) | undefined) {\n if (!handler) return undefined\n\n return () => {\n const event = new Event(\"focus\", { cancelable: true })\n const before = document.activeElement\n handler(event)\n const moved = document.activeElement\n // Base UI calls `finalFocus` inside React's commit, and React then restores the focus it saw\n // before the commit. Radix ran this handler after the commit, so a handler that moves focus\n // itself has its move applied again once the commit is done.\n if (moved !== before && moved instanceof HTMLElement) {\n queueMicrotask(() => moved.focus())\n }\n return !event.defaultPrevented\n }\n}\n\n/**\n * What `onOpenChange` receives as its second argument: Base UI's change details, declared in\n * Zenith. Base UI's own type drags its dialog store into the published declarations, and\n * TypeScript 4 cannot parse that store. `event` narrows with `reason`, as it does in Base UI.\n */\ntype DialogOpenChangeDetails = (\n | {\n reason: \"trigger-press\"\n event: MouseEvent | PointerEvent | TouchEvent | KeyboardEvent\n }\n | { reason: \"outside-press\"; event: MouseEvent | PointerEvent | TouchEvent }\n | { reason: \"escape-key\"; event: KeyboardEvent }\n | { reason: \"close-press\"; event: MouseEvent | KeyboardEvent | PointerEvent }\n | { reason: \"focus-out\"; event: FocusEvent | KeyboardEvent }\n | { reason: \"imperative-action\"; event: Event }\n | { reason: \"none\"; event: Event }\n) & {\n /** Keeps the dialog in its current state. */\n cancel: () => void\n /** Lets the event propagate where the dialog would otherwise stop it. */\n allowPropagation: () => void\n isCanceled: boolean\n isPropagationAllowed: boolean\n /** The element that caused the change, if any. */\n trigger: Element | undefined\n /** Keeps the dialog's elements mounted after it closes. */\n preventUnmountOnClose: () => void\n}\n\nexport type DialogProps = {\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n modal?: boolean\n /**\n * Called when the dialog opens or closes. `eventDetails.reason` says why (`trigger-press`,\n * `escape-key`, `outside-press`, `focus-out`, `close-press`) and `eventDetails.cancel()` keeps\n * the dialog in its current state.\n */\n onOpenChange?: (open: boolean, eventDetails: DialogOpenChangeDetails) => void\n}\n\nexport const Dialog = React.forwardRef<HTMLElement, DialogProps>(\n function Dialog({ onOpenChange, ...props }, _ref) {\n return (\n <DialogPrimitive.Root\n data-slot=\"dialog\"\n onOpenChange={(open, eventDetails) => {\n // A layer inside (a Volt select or popover, which run on Radix, or a control handling\n // the key itself) prevents the Escape it consumes, but Base UI dismisses regardless, so\n // one Escape would close both. Honour the handled event. Consumers still mix Zenith with\n // Volt on one page, so this stays after the Radix teardown (D12).\n if (\n eventDetails.reason === \"escape-key\" &&\n eventDetails.event.defaultPrevented\n ) {\n eventDetails.cancel()\n return\n }\n onOpenChange?.(open, eventDetails)\n }}\n {...props}\n />\n )\n }\n)\n\nexport type DialogTriggerProps = NativePartProps<\"button\">\n\nexport const DialogTrigger = React.forwardRef<\n HTMLButtonElement,\n DialogTriggerProps\n>(function DialogTrigger(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Trigger\n ref={ref}\n data-slot=\"dialog-trigger\"\n {...{ [SLOT_ATTR]: \"dialog-trigger\" }}\n className={mergeClasses(!asChild && styles.nativeTrigger, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\n// Lets DialogContent supply Base UI's required Portal itself when no DialogPortal wraps it, as\n// Radix rendered content inline without one.\nconst DialogPortalPresenceContext = React.createContext(false)\n\nexport type DialogPortalProps = {\n children?: React.ReactNode\n /** The element the overlay and the content portal into; `document.body` when omitted or null. */\n container?: Element | DocumentFragment | null\n /** Keeps the overlay and the content mounted while the dialog is closed. */\n forceMount?: true\n}\n\nexport const DialogPortal = React.forwardRef<HTMLElement, DialogPortalProps>(\n function DialogPortal({ container, forceMount, ...props }, ref) {\n return (\n <DialogPortalPresenceContext.Provider value={true}>\n <DialogPrimitive.Portal\n // Base UI types the ref as its portal div, which any HTMLElement ref can hold.\n ref={ref as React.Ref<HTMLDivElement>}\n data-slot=\"dialog-portal\"\n {...{ [SLOT_ATTR]: \"dialog-portal\" }}\n // Radix took any Element or DocumentFragment, null meaning the body. Base UI hands a\n // node straight to createPortal, which takes either, but reads null as \"wait for one\".\n container={(container ?? undefined) as HTMLElement | undefined}\n keepMounted={forceMount}\n {...props}\n />\n </DialogPortalPresenceContext.Provider>\n )\n }\n)\n\nexport type DialogOverlayProps = NativePartProps<\"div\"> & {\n /** Kept for compatibility: the overlay stays mounted whenever DialogPortal's `forceMount` keeps the portal mounted. */\n forceMount?: true\n}\n\nexport const DialogOverlay = React.forwardRef<\n HTMLDivElement,\n DialogOverlayProps\n>(function DialogOverlay(\n { asChild = false, children, className, forceMount: _forceMount, ...props },\n ref\n) {\n const styles = useStyles()\n // The overlay is portalled too, so it re-stamps the boundary's appearance like the content (#8).\n const appearance = useAppearanceAttributes()\n\n return (\n <DialogPrimitive.Backdrop\n ref={ref}\n // Base UI renders no backdrop for a dialog nested in another; Radix's overlay always rendered,\n // dimming the dialog beneath.\n forceRender\n data-slot=\"dialog-overlay\"\n {...{ [SLOT_ATTR]: \"dialog-overlay\" }}\n {...appearance}\n className={mergeClasses(styles.overlay, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DialogContentSize =\n \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\" | \"full-width\"\n\nexport type DialogContentProps = NativePartProps<\"div\"> & {\n showCloseButton?: boolean\n /**\n * Accessible name of the built-in close button, read by screen readers. Pass a translated\n * string for any locale other than English. Defaults to \"Close\".\n */\n closeButtonLabel?: string\n size?: DialogContentSize\n flush?: boolean\n /**\n * Keeps the content mounted while the dialog is closed. Inside DialogPortal, the portal's\n * `forceMount` decides.\n */\n forceMount?: true\n /** Called before focus moves into the dialog; `preventDefault()` leaves focus where it is. */\n onOpenAutoFocus?: (event: Event) => void\n /** Called before focus returns on close; `preventDefault()` skips the return. */\n onCloseAutoFocus?: (event: Event) => void\n}\n\nexport const DialogContent = React.forwardRef<\n HTMLDivElement,\n DialogContentProps\n>(function DialogContent(\n {\n asChild = false,\n className,\n children,\n showCloseButton = true,\n closeButtonLabel = \"Close\",\n flush = false,\n size = \"lg\",\n forceMount,\n onOpenAutoFocus,\n onCloseAutoFocus,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const hasPortal = React.useContext(DialogPortalPresenceContext)\n // DENSITY-SPEC.md §4.4 — portal content boundary: stamp only an explicit override, never a\n // default, so an ambient shell density (already reaching this portal via ordinary DOM\n // inheritance) isn't masked.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n\n const closeButton = showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n {...{ [SLOT_ATTR]: \"dialog-close\" }}\n className={styles.closeButton}\n >\n <XIcon />\n <span className={styles.srOnly}>{closeButtonLabel}</span>\n </DialogPrimitive.Close>\n )\n const child = asChild ? onlySlotChild(children) : undefined\n // The child keeps its own children, so the built-in close button joins them there.\n const content = child\n ? {\n render: React.cloneElement(\n child,\n undefined,\n (child.props as { children?: React.ReactNode }).children,\n closeButton\n ),\n }\n : {\n children: (\n <>\n {children}\n {closeButton}\n </>\n ),\n }\n\n const popup = (\n <DialogPrimitive.Popup\n ref={ref}\n data-slot=\"dialog-content\"\n {...{ [SLOT_ATTR]: \"dialog-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n data-size={size}\n initialFocus={radixFocusCallback(onOpenAutoFocus)}\n finalFocus={radixFocusCallback(onCloseAutoFocus)}\n className={mergeClasses(\n styles.content,\n !flush && styles.contentPadding,\n className\n )}\n {...props}\n {...content}\n />\n )\n\n // Base UI's Popup requires a Portal ancestor; Radix rendered inline without one.\n return hasPortal ? (\n popup\n ) : (\n <DialogPrimitive.Portal keepMounted={forceMount}>\n {popup}\n </DialogPrimitive.Portal>\n )\n})\n\nexport type DialogCloseProps = NativePartProps<\"button\">\n\nexport const DialogClose = React.forwardRef<\n HTMLButtonElement,\n DialogCloseProps\n>(function DialogClose(\n { asChild = false, className, children, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Close\n ref={ref}\n data-slot=\"dialog-close\"\n {...{ [SLOT_ATTR]: \"dialog-close\" }}\n className={mergeClasses(\n !asChild && styles.nativeTrigger,\n styles.close,\n className\n )}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DialogHeaderProps = React.ComponentProps<\"div\">\n\nexport const DialogHeader = React.forwardRef<HTMLDivElement, DialogHeaderProps>(\n function DialogHeader({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"dialog-header\"\n {...{ [SLOT_ATTR]: \"dialog-header\" }}\n className={mergeClasses(styles.header, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DialogFooterProps = React.ComponentProps<\"div\">\n\nexport const DialogFooter = React.forwardRef<HTMLDivElement, DialogFooterProps>(\n function DialogFooter({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"dialog-footer\"\n {...{ [SLOT_ATTR]: \"dialog-footer\" }}\n className={mergeClasses(styles.footer, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DialogTitleProps = NativePartProps<\"h2\">\n\nexport const DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n DialogTitleProps\n>(function DialogTitle(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"dialog-title\"\n {...{ [SLOT_ATTR]: \"dialog-title\" }}\n className={mergeClasses(styles.title, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DialogDescriptionProps = NativePartProps<\"p\">\n\nexport const DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(function DialogDescription(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"dialog-description\"\n {...{ [SLOT_ATTR]: \"dialog-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n"],"names":["easeOut","easeIn","useStyles","makeZenithStyles","nativeControl","shorthands","OVERLAY_Z_INDEX","boxModel","tokens.body","tokens.spacingLayout1","tokens.radiusXl","tokens.grayA1","tokens.containerSm","tokens.containerMd","tokens.containerLg","tokens.containerXl","tokens.container2xl","tokens.container3xl","tokens.container4xl","tokens.container5xl","tokens.spacingGroup2","tokens.focusRing","tokens.spacingElement2","tokens.accentA11","tokens.accentSoft","tokens.textLg","tokens.leadingLg","tokens.fontWeightSemibold","tokens.grayA12","tokens.grayA11","tokens.textSm","tokens.leadingSm","XIcon","React","props","ref","jsx","onlySlotChild","children","elements","slotProps","asChild","child","radixFocusCallback","handler","event","before","moved","Dialog","onOpenChange","_ref","DialogPrimitive","open","eventDetails","DialogTrigger","className","styles","SLOT_ATTR","mergeClasses","DialogPortalPresenceContext","DialogPortal","container","forceMount","DialogOverlay","_forceMount","appearance","useAppearanceAttributes","DialogContent","showCloseButton","closeButtonLabel","flush","size","onOpenAutoFocus","onCloseAutoFocus","hasPortal","override","useDensity","closeButton","jsxs","content","Fragment","popup","DialogClose","DialogHeader","DialogFooter","DialogTitle","DialogDescription"],"mappings":"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"}
1
+ {"version":3,"file":"dialog.js","sources":["../../../src/components/dialog/dialog.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { useAppearanceAttributes } from \"../appearance-boundary/appearance-boundary\"\nimport { useDensity } from \"../density-provider/density-provider\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport { OVERLAY_Z_INDEX } from \"../../styles/overlay-layer\"\nimport * as tokens from \"../../tokens\"\n\nconst easeOut = \"cubic-bezier(0.4, 0, 0.2, 1)\"\nconst easeIn = \"cubic-bezier(0.4, 0, 1, 1)\"\n\nconst useStyles = makeZenithStyles({\n // For the bare native `<button>` a Trigger/Close renders. Not applied under `asChild`, where the\n // child owns its own element and two atom sets would race for the same properties.\n nativeTrigger: {\n ...nativeControl,\n },\n overlay: {\n position: \"fixed\",\n ...shorthands.inset(0),\n zIndex: OVERLAY_Z_INDEX,\n backgroundColor: \"rgb(0 0 0 / 50%)\",\n transitionProperty: \"opacity\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: easeOut,\n \"&[data-starting-style]\": { opacity: 0 },\n \"&[data-ending-style]\": { opacity: 0, transitionTimingFunction: easeIn },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n },\n content: {\n ...boxModel,\n backgroundColor: tokens.body,\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n zIndex: OVERLAY_Z_INDEX,\n display: \"grid\",\n width: \"100%\",\n maxWidth: \"calc(100% - 2rem)\",\n transform: \"translate(-50%, -50%)\",\n ...shorthands.gap(tokens.spacingLayout1),\n ...shorthands.borderRadius(tokens.radiusXl),\n ...shorthands.border(\"1px\", \"solid\", tokens.grayA1),\n // v1 shadow-lg; elevation has no token in this package.\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n transitionProperty: \"opacity, transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: easeOut,\n \"&[data-starting-style]\": {\n opacity: 0,\n transform: \"translate(-50%, -50%) scale(0.95)\",\n },\n \"&[data-ending-style]\": {\n opacity: 0,\n transform: \"translate(-50%, -50%) scale(0.95)\",\n transitionTimingFunction: easeIn,\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n \"&[data-size='sm']\": { maxWidth: tokens.containerSm },\n \"&[data-size='md']\": { maxWidth: tokens.containerMd },\n \"&[data-size='lg']\": { maxWidth: tokens.containerLg },\n \"&[data-size='xl']\": { maxWidth: tokens.containerXl },\n \"&[data-size='2xl']\": { maxWidth: tokens.container2xl },\n \"&[data-size='3xl']\": { maxWidth: tokens.container3xl },\n \"&[data-size='4xl']\": { maxWidth: tokens.container4xl },\n \"&[data-size='5xl']\": { maxWidth: tokens.container5xl },\n \"&[data-size='full-width']\": { maxWidth: \"100%\" },\n },\n contentPadding: {\n ...boxModel,\n ...shorthands.padding(tokens.spacingGroup2),\n },\n close: {\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.focusRing,\n },\n },\n closeButton: {\n ...nativeControl,\n position: \"absolute\",\n top: tokens.spacingGroup2,\n right: tokens.spacingGroup2,\n ...shorthands.padding(tokens.spacingElement2),\n // v1 rounded-full; no full-radius token exists in this package.\n borderRadius: \"9999px\",\n cursor: \"pointer\",\n color: tokens.accentA11,\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.focusRing,\n },\n \":disabled\": {\n pointerEvents: \"none\",\n },\n \"& svg\": {\n display: \"block\",\n pointerEvents: \"none\",\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n header: {\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingElement2),\n textAlign: \"left\",\n },\n footer: {\n display: \"flex\",\n ...shorthands.gap(tokens.spacingElement2),\n justifyContent: \"flex-end\",\n },\n title: {\n ...shorthands.margin(0),\n fontSize: tokens.textLg,\n lineHeight: tokens.leadingLg,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA12,\n },\n description: {\n ...shorthands.margin(0),\n color: tokens.grayA11,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: 0,\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n },\n})\n\nconst XIcon = React.forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n function XIcon(props, ref) {\n return (\n <svg\n ref={ref}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M4.38333 5.31667L1.11667 8.58333C0.994445 8.70556 0.838889 8.76667 0.65 8.76667C0.461111 8.76667 0.305556 8.70556 0.183333 8.58333C0.0611111 8.46111 0 8.30556 0 8.11667C0 7.92778 0.0611111 7.77222 0.183333 7.65L3.45 4.38333L0.183333 1.11667C0.0611111 0.994445 0 0.838889 0 0.65C0 0.461111 0.0611111 0.305556 0.183333 0.183333C0.305556 0.0611111 0.461111 0 0.65 0C0.838889 0 0.994445 0.0611111 1.11667 0.183333L4.38333 3.45L7.65 0.183333C7.77222 0.0611111 7.92778 0 8.11667 0C8.30556 0 8.46111 0.0611111 8.58333 0.183333C8.70556 0.305556 8.76667 0.461111 8.76667 0.65C8.76667 0.838889 8.70556 0.994445 8.58333 1.11667L5.31667 4.38333L8.58333 7.65C8.70556 7.77222 8.76667 7.92778 8.76667 8.11667C8.76667 8.30556 8.70556 8.46111 8.58333 8.58333C8.46111 8.70556 8.30556 8.76667 8.11667 8.76667C7.92778 8.76667 7.77222 8.70556 7.65 8.58333L4.38333 5.31667Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\n// A single child can arrive wrapped in a one-element array depending on the JSX runtime (MDX call\n// sites do this). Radix's Slot normalised that, so the `asChild` shim has to as well.\nfunction onlySlotChild(children: React.ReactNode) {\n const elements = React.Children.toArray(children).filter(React.isValidElement)\n return elements.length === 1 ? elements[0] : undefined\n}\n\n/**\n * Radix's `asChild` over Base UI's `render`: the single child element becomes the part and keeps\n * its own children, since Base UI lets the rendered element's props win the merge.\n */\nfunction slotProps(asChild: boolean, children: React.ReactNode) {\n const child = asChild ? onlySlotChild(children) : undefined\n return child ? { render: child } : { children }\n}\n\n/**\n * A part's props as they were under Radix: its native element's own (DOM attributes, React's\n * handler types, a `CSSProperties` style, a string `className`, `ref`) plus `asChild`. Base UI's\n * prop types widen `style` and `className` to functions of the part's state, wrap every handler's\n * event in `BaseUIEvent` and add props of their own; none of that reaches the public surface.\n */\ntype NativePartProps<Tag extends \"button\" | \"div\" | \"h2\" | \"p\"> =\n React.ComponentProps<Tag> & {\n /** Renders the single child element as this part, merging its props and behaviour onto it. */\n asChild?: boolean\n }\n\n/**\n * Radix-shaped focus interception over Base UI's `initialFocus`/`finalFocus`. `preventDefault()`\n * leaves focus where it is; otherwise the default move happens, because Base UI reads a callback\n * that returns `undefined` as \"move nothing\".\n */\nfunction radixFocusCallback(handler: ((event: Event) => void) | undefined) {\n if (!handler) return undefined\n\n return () => {\n const event = new Event(\"focus\", { cancelable: true })\n const before = document.activeElement\n handler(event)\n const moved = document.activeElement\n // Base UI calls `finalFocus` inside React's commit, and React then restores the focus it saw\n // before the commit. Radix ran this handler after the commit, so a handler that moves focus\n // itself has its move applied again once the commit is done.\n if (moved !== before && moved instanceof HTMLElement) {\n queueMicrotask(() => moved.focus())\n }\n return !event.defaultPrevented\n }\n}\n\n/**\n * What `onOpenChange` receives as its second argument: Base UI's change details, declared in\n * Zenith. Base UI's own type drags its dialog store into the published declarations, and\n * TypeScript 4 cannot parse that store. `event` narrows with `reason`, as it does in Base UI.\n */\ntype DialogOpenChangeDetails = (\n | {\n reason: \"trigger-press\"\n event: MouseEvent | PointerEvent | TouchEvent | KeyboardEvent\n }\n | { reason: \"outside-press\"; event: MouseEvent | PointerEvent | TouchEvent }\n | { reason: \"escape-key\"; event: KeyboardEvent }\n | { reason: \"close-press\"; event: MouseEvent | KeyboardEvent | PointerEvent }\n | { reason: \"focus-out\"; event: FocusEvent | KeyboardEvent }\n | { reason: \"imperative-action\"; event: Event }\n | { reason: \"none\"; event: Event }\n) & {\n /** Keeps the dialog in its current state. */\n cancel: () => void\n /** Lets the event propagate where the dialog would otherwise stop it. */\n allowPropagation: () => void\n isCanceled: boolean\n isPropagationAllowed: boolean\n /** The element that caused the change, if any. */\n trigger: Element | undefined\n /** Keeps the dialog's elements mounted after it closes. */\n preventUnmountOnClose: () => void\n}\n\nexport type DialogProps = {\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n modal?: boolean\n /**\n * Called when the dialog opens or closes. `eventDetails.reason` says why (`trigger-press`,\n * `escape-key`, `outside-press`, `focus-out`, `close-press`) and `eventDetails.cancel()` keeps\n * the dialog in its current state.\n */\n onOpenChange?: (open: boolean, eventDetails: DialogOpenChangeDetails) => void\n}\n\nexport const Dialog = React.forwardRef<HTMLElement, DialogProps>(\n function Dialog({ onOpenChange, ...props }, _ref) {\n return (\n <DialogPrimitive.Root\n data-slot=\"dialog\"\n onOpenChange={(open, eventDetails) => {\n // A layer inside (a Volt select or popover, which run on Radix, or a control handling\n // the key itself) prevents the Escape it consumes, but Base UI dismisses regardless, so\n // one Escape would close both. Honour the handled event. Consumers still mix Zenith with\n // Volt on one page, so this stays after the Radix teardown (D12).\n if (\n eventDetails.reason === \"escape-key\" &&\n eventDetails.event.defaultPrevented\n ) {\n eventDetails.cancel()\n return\n }\n onOpenChange?.(open, eventDetails)\n }}\n {...props}\n />\n )\n }\n)\n\nexport type DialogTriggerProps = NativePartProps<\"button\">\n\nexport const DialogTrigger = React.forwardRef<\n HTMLButtonElement,\n DialogTriggerProps\n>(function DialogTrigger(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Trigger\n ref={ref}\n data-slot=\"dialog-trigger\"\n {...{ [SLOT_ATTR]: \"dialog-trigger\" }}\n className={mergeClasses(!asChild && styles.nativeTrigger, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\n// Lets DialogContent supply Base UI's required Portal itself when no DialogPortal wraps it, as\n// Radix rendered content inline without one.\nconst DialogPortalPresenceContext = React.createContext(false)\n\nexport type DialogPortalProps = {\n children?: React.ReactNode\n /** The element the overlay and the content portal into; `document.body` when omitted or null. */\n container?: Element | DocumentFragment | null\n /** Keeps the overlay and the content mounted while the dialog is closed. */\n forceMount?: true\n}\n\nexport const DialogPortal = React.forwardRef<HTMLElement, DialogPortalProps>(\n function DialogPortal({ container, forceMount, ...props }, ref) {\n return (\n <DialogPortalPresenceContext.Provider value={true}>\n <DialogPrimitive.Portal\n // Base UI types the ref as its portal div, which any HTMLElement ref can hold.\n ref={ref as React.Ref<HTMLDivElement>}\n data-slot=\"dialog-portal\"\n {...{ [SLOT_ATTR]: \"dialog-portal\" }}\n // Radix took any Element or DocumentFragment, null meaning the body. Base UI hands a\n // node straight to createPortal, which takes either, but reads null as \"wait for one\".\n container={(container ?? undefined) as HTMLElement | undefined}\n keepMounted={forceMount}\n {...props}\n />\n </DialogPortalPresenceContext.Provider>\n )\n }\n)\n\nexport type DialogOverlayProps = NativePartProps<\"div\"> & {\n /** Kept for compatibility: the overlay stays mounted whenever DialogPortal's `forceMount` keeps the portal mounted. */\n forceMount?: true\n}\n\nexport const DialogOverlay = React.forwardRef<\n HTMLDivElement,\n DialogOverlayProps\n>(function DialogOverlay(\n { asChild = false, children, className, forceMount: _forceMount, ...props },\n ref\n) {\n const styles = useStyles()\n // The overlay is portalled too, so it re-stamps the boundary's appearance like the content (#8).\n const appearance = useAppearanceAttributes()\n\n return (\n <DialogPrimitive.Backdrop\n ref={ref}\n // Base UI renders no backdrop for a dialog nested in another; Radix's overlay always rendered,\n // dimming the dialog beneath.\n forceRender\n data-slot=\"dialog-overlay\"\n {...{ [SLOT_ATTR]: \"dialog-overlay\" }}\n {...appearance}\n className={mergeClasses(styles.overlay, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DialogContentSize =\n \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\" | \"4xl\" | \"5xl\" | \"full-width\"\n\nexport type DialogContentProps = NativePartProps<\"div\"> & {\n showCloseButton?: boolean\n /**\n * Accessible name of the built-in close button, read by screen readers. Pass a translated\n * string for any locale other than English. Defaults to \"Close\".\n */\n closeButtonLabel?: string\n size?: DialogContentSize\n flush?: boolean\n /**\n * Keeps the content mounted while the dialog is closed. Inside DialogPortal, the portal's\n * `forceMount` decides.\n */\n forceMount?: true\n /** Called before focus moves into the dialog; `preventDefault()` leaves focus where it is. */\n onOpenAutoFocus?: (event: Event) => void\n /** Called before focus returns on close; `preventDefault()` skips the return. */\n onCloseAutoFocus?: (event: Event) => void\n}\n\nexport const DialogContent = React.forwardRef<\n HTMLDivElement,\n DialogContentProps\n>(function DialogContent(\n {\n asChild = false,\n className,\n children,\n showCloseButton = true,\n closeButtonLabel = \"Close\",\n flush = false,\n size = \"lg\",\n forceMount,\n onOpenAutoFocus,\n onCloseAutoFocus,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const hasPortal = React.useContext(DialogPortalPresenceContext)\n // DENSITY-SPEC.md §4.4 — portal content boundary: stamp only an explicit override, never a\n // default, so an ambient shell density (already reaching this portal via ordinary DOM\n // inheritance) isn't masked.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n\n const closeButton = showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n {...{ [SLOT_ATTR]: \"dialog-close\" }}\n className={styles.closeButton}\n >\n <XIcon />\n <span className={styles.srOnly}>{closeButtonLabel}</span>\n </DialogPrimitive.Close>\n )\n const child = asChild ? onlySlotChild(children) : undefined\n // The child keeps its own children, so the built-in close button joins them there.\n const content = child\n ? {\n render: React.cloneElement(\n child,\n undefined,\n (child.props as { children?: React.ReactNode }).children,\n closeButton\n ),\n }\n : {\n children: (\n <>\n {children}\n {closeButton}\n </>\n ),\n }\n\n const popup = (\n <DialogPrimitive.Popup\n ref={ref}\n data-slot=\"dialog-content\"\n {...{ [SLOT_ATTR]: \"dialog-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n data-size={size}\n initialFocus={radixFocusCallback(onOpenAutoFocus)}\n finalFocus={radixFocusCallback(onCloseAutoFocus)}\n className={mergeClasses(\n styles.content,\n !flush && styles.contentPadding,\n className\n )}\n {...props}\n {...content}\n />\n )\n\n // Base UI's Popup requires a Portal ancestor; Radix rendered inline without one.\n return hasPortal ? (\n popup\n ) : (\n <DialogPrimitive.Portal keepMounted={forceMount}>\n {popup}\n </DialogPrimitive.Portal>\n )\n})\n\nexport type DialogCloseProps = NativePartProps<\"button\">\n\nexport const DialogClose = React.forwardRef<\n HTMLButtonElement,\n DialogCloseProps\n>(function DialogClose(\n { asChild = false, className, children, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Close\n ref={ref}\n data-slot=\"dialog-close\"\n {...{ [SLOT_ATTR]: \"dialog-close\" }}\n className={mergeClasses(\n !asChild && styles.nativeTrigger,\n styles.close,\n className\n )}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DialogHeaderProps = React.ComponentProps<\"div\">\n\nexport const DialogHeader = React.forwardRef<HTMLDivElement, DialogHeaderProps>(\n function DialogHeader({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"dialog-header\"\n {...{ [SLOT_ATTR]: \"dialog-header\" }}\n className={mergeClasses(styles.header, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DialogFooterProps = React.ComponentProps<\"div\">\n\nexport const DialogFooter = React.forwardRef<HTMLDivElement, DialogFooterProps>(\n function DialogFooter({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"dialog-footer\"\n {...{ [SLOT_ATTR]: \"dialog-footer\" }}\n className={mergeClasses(styles.footer, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DialogTitleProps = NativePartProps<\"h2\">\n\nexport const DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n DialogTitleProps\n>(function DialogTitle(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"dialog-title\"\n {...{ [SLOT_ATTR]: \"dialog-title\" }}\n className={mergeClasses(styles.title, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DialogDescriptionProps = NativePartProps<\"p\">\n\nexport const DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n DialogDescriptionProps\n>(function DialogDescription(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"dialog-description\"\n {...{ [SLOT_ATTR]: \"dialog-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n"],"names":["easeOut","easeIn","useStyles","makeZenithStyles","nativeControl","shorthands","OVERLAY_Z_INDEX","boxModel","tokens.body","tokens.spacingLayout1","tokens.radiusXl","tokens.grayA1","tokens.containerSm","tokens.containerMd","tokens.containerLg","tokens.containerXl","tokens.container2xl","tokens.container3xl","tokens.container4xl","tokens.container5xl","tokens.spacingGroup2","tokens.focusRing","tokens.spacingElement2","tokens.accentA11","tokens.accentSoft","tokens.textLg","tokens.leadingLg","tokens.fontWeightSemibold","tokens.grayA12","tokens.grayA11","tokens.textSm","tokens.leadingSm","XIcon","React","props","ref","jsx","onlySlotChild","children","elements","slotProps","asChild","child","radixFocusCallback","handler","event","before","moved","Dialog","onOpenChange","_ref","DialogPrimitive","open","eventDetails","DialogTrigger","className","styles","SLOT_ATTR","mergeClasses","DialogPortalPresenceContext","DialogPortal","container","forceMount","DialogOverlay","_forceMount","appearance","useAppearanceAttributes","DialogContent","showCloseButton","closeButtonLabel","flush","size","onOpenAutoFocus","onCloseAutoFocus","hasPortal","override","useDensity","closeButton","jsxs","content","Fragment","popup","DialogClose","DialogHeader","DialogFooter","DialogTitle","DialogDescription"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as i, jsxs as P, Fragment as j } from "react/jsx-runtime";
2
2
  import * as s from "react";
3
3
  import { Dialog as f } from "../../_virtual/_zenith-runtime-family_dialog.js";
4
- import { mergeClasses as p, SLOT_ATTR as u, shorthands as c } from "@epilot/zenith-runtime/v1/core.js";
4
+ import { mergeClasses as p, SLOT_ATTR as u, shorthands as c } from "@epilot/zenith-runtime/v1";
5
5
  import { useAppearanceAttributes as M } from "../appearance-boundary/appearance-boundary.js";
6
6
  import { useDensity as Z } from "../density-provider/density-provider.js";
7
7
  import { makeZenithStyles as V } from "../../styles/make-styles.js";
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.js","sources":["../../../src/components/drawer/drawer.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { useAppearanceAttributes } from \"../appearance-boundary/appearance-boundary\"\nimport { useDensity } from \"../density-provider/density-provider\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport { OVERLAY_Z_INDEX } from \"../../styles/overlay-layer\"\nimport * as tokens from \"../../tokens\"\n\nconst easeOut = \"cubic-bezier(0.4, 0, 0.2, 1)\"\nconst easeIn = \"cubic-bezier(0.4, 0, 1, 1)\"\n\nconst useStyles = makeZenithStyles({\n // For the bare native `<button>` a Trigger/Close renders. Not applied under `asChild`, where the\n // child owns its own element and two atom sets would race for the same properties.\n nativeTrigger: {\n ...nativeControl,\n },\n overlay: {\n position: \"fixed\",\n ...shorthands.inset(0),\n zIndex: OVERLAY_Z_INDEX,\n backgroundColor: \"rgb(0 0 0 / 50%)\",\n transitionProperty: \"opacity\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: easeOut,\n \"&[data-starting-style]\": { opacity: 0 },\n \"&[data-ending-style]\": { opacity: 0, transitionTimingFunction: easeIn },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n },\n content: {\n ...boxModel,\n backgroundColor: tokens.gray2,\n position: \"fixed\",\n zIndex: OVERLAY_Z_INDEX,\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingLayout1),\n ...shorthands.borderRadius(tokens.radius2xl),\n // v1 shadow-lg; elevation has no token in this package.\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n // The fade lives here, the slide's distance in each side's slot below.\n transitionProperty: \"opacity, transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: easeOut,\n \"&[data-starting-style]\": { opacity: 0 },\n \"&[data-ending-style]\": { opacity: 0, transitionTimingFunction: easeIn },\n // Collapses the side slots' slide too: they set only where it starts and ends.\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n },\n contentPadding: {\n ...boxModel,\n // Layout tier, unlike Dialog, AlertDialog and Popover: a drawer holds sections, not one group.\n ...shorthands.padding(tokens.spacingLayout1),\n },\n right: {\n ...boxModel,\n top: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n right: tokens.spacingElement1,\n height: \"calc(100% - 0.5rem)\",\n ...shorthands.borderLeft(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-starting-style]\": { transform: \"translateX(100%)\" },\n \"&[data-ending-style]\": { transform: \"translateX(100%)\" },\n },\n left: {\n ...boxModel,\n top: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n left: tokens.spacingElement1,\n height: \"calc(100% - 0.5rem)\",\n ...shorthands.borderRight(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-starting-style]\": { transform: \"translateX(-100%)\" },\n \"&[data-ending-style]\": { transform: \"translateX(-100%)\" },\n },\n top: {\n ...boxModel,\n left: tokens.spacingElement1,\n right: tokens.spacingElement1,\n top: tokens.spacingElement1,\n width: \"calc(100% - 0.5rem)\",\n ...shorthands.borderBottom(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-starting-style]\": { transform: \"translateY(-100%)\" },\n \"&[data-ending-style]\": { transform: \"translateY(-100%)\" },\n },\n bottom: {\n ...boxModel,\n left: tokens.spacingElement1,\n right: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n width: \"calc(100% - 0.5rem)\",\n ...shorthands.borderTop(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-starting-style]\": { transform: \"translateY(100%)\" },\n \"&[data-ending-style]\": { transform: \"translateY(100%)\" },\n },\n close: {\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n },\n closeButton: {\n ...nativeControl,\n position: \"absolute\",\n // Inset by the content padding so it lines up with the padded header.\n top: tokens.spacingLayout1,\n right: tokens.spacingLayout1,\n ...shorthands.padding(tokens.spacingElement2),\n // v1 rounded-full; no full-radius token exists in this package.\n borderRadius: \"9999px\",\n cursor: \"pointer\",\n color: tokens.accentA11,\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \":disabled\": {\n pointerEvents: \"none\",\n },\n \"& svg\": {\n display: \"block\",\n pointerEvents: \"none\",\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n header: {\n display: \"flex\",\n flexShrink: 0,\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingElement2),\n textAlign: \"left\",\n },\n footer: {\n marginTop: \"auto\",\n display: \"flex\",\n flexShrink: 0,\n ...shorthands.gap(tokens.spacingElement2),\n justifyContent: \"flex-end\",\n },\n title: {\n ...shorthands.margin(0),\n fontSize: tokens.textLg,\n lineHeight: tokens.leadingLg,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA12,\n },\n description: {\n ...shorthands.margin(0),\n color: tokens.grayA11,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: 0,\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n },\n})\n\nconst XIcon = React.forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n function XIcon(props, ref) {\n return (\n <svg\n ref={ref}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M4.38333 5.31667L1.11667 8.58333C0.994445 8.70556 0.838889 8.76667 0.65 8.76667C0.461111 8.76667 0.305556 8.70556 0.183333 8.58333C0.0611111 8.46111 0 8.30556 0 8.11667C0 7.92778 0.0611111 7.77222 0.183333 7.65L3.45 4.38333L0.183333 1.11667C0.0611111 0.994445 0 0.838889 0 0.65C0 0.461111 0.0611111 0.305556 0.183333 0.183333C0.305556 0.0611111 0.461111 0 0.65 0C0.838889 0 0.994445 0.0611111 1.11667 0.183333L4.38333 3.45L7.65 0.183333C7.77222 0.0611111 7.92778 0 8.11667 0C8.30556 0 8.46111 0.0611111 8.58333 0.183333C8.70556 0.305556 8.76667 0.461111 8.76667 0.65C8.76667 0.838889 8.70556 0.994445 8.58333 1.11667L5.31667 4.38333L8.58333 7.65C8.70556 7.77222 8.76667 7.92778 8.76667 8.11667C8.76667 8.30556 8.70556 8.46111 8.58333 8.58333C8.46111 8.70556 8.30556 8.76667 8.11667 8.76667C7.92778 8.76667 7.77222 8.70556 7.65 8.58333L4.38333 5.31667Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\n// A single child can arrive wrapped in a one-element array depending on the JSX runtime (MDX call\n// sites do this). Radix's Slot normalised that, so the `asChild` shim has to as well.\nfunction onlySlotChild(children: React.ReactNode) {\n const elements = React.Children.toArray(children).filter(React.isValidElement)\n return elements.length === 1 ? elements[0] : undefined\n}\n\n/**\n * Radix's `asChild` over Base UI's `render`: the single child element becomes the part and keeps\n * its own children, since Base UI lets the rendered element's props win the merge.\n */\nfunction slotProps(asChild: boolean, children: React.ReactNode) {\n const child = asChild ? onlySlotChild(children) : undefined\n return child ? { render: child } : { children }\n}\n\n/**\n * A part's props as they were under Radix: its native element's own (DOM attributes, React's\n * handler types, a `CSSProperties` style, a string `className`, `ref`) plus `asChild`. Base UI's\n * prop types widen `style` and `className` to functions of the part's state, wrap every handler's\n * event in `BaseUIEvent` and add props of their own; none of that reaches the public surface.\n */\ntype NativePartProps<Tag extends \"button\" | \"div\" | \"h2\" | \"p\"> =\n React.ComponentProps<Tag> & {\n /** Renders the single child element as this part, merging its props and behaviour onto it. */\n asChild?: boolean\n }\n\n/**\n * Radix-shaped focus interception over Base UI's `initialFocus`/`finalFocus`. `preventDefault()`\n * leaves focus where it is; otherwise the default move happens, because Base UI reads a callback\n * that returns `undefined` as \"move nothing\".\n */\nfunction radixFocusCallback(handler: ((event: Event) => void) | undefined) {\n if (!handler) return undefined\n\n return () => {\n const event = new Event(\"focus\", { cancelable: true })\n const before = document.activeElement\n handler(event)\n const moved = document.activeElement\n // Base UI calls `finalFocus` inside React's commit, and React then restores the focus it saw\n // before the commit. Radix ran this handler after the commit, so a handler that moves focus\n // itself has its move applied again once the commit is done.\n if (moved !== before && moved instanceof HTMLElement) {\n queueMicrotask(() => moved.focus())\n }\n return !event.defaultPrevented\n }\n}\n\n/**\n * What `onOpenChange` receives as its second argument: Base UI's change details, declared in\n * Zenith. Base UI's own type drags its dialog store into the published declarations, and\n * TypeScript 4 cannot parse that store. `event` narrows with `reason`, as it does in Base UI.\n */\ntype DrawerOpenChangeDetails = (\n | {\n reason: \"trigger-press\"\n event: MouseEvent | PointerEvent | TouchEvent | KeyboardEvent\n }\n | { reason: \"outside-press\"; event: MouseEvent | PointerEvent | TouchEvent }\n | { reason: \"escape-key\"; event: KeyboardEvent }\n | { reason: \"close-press\"; event: MouseEvent | KeyboardEvent | PointerEvent }\n | { reason: \"focus-out\"; event: FocusEvent | KeyboardEvent }\n | { reason: \"imperative-action\"; event: Event }\n | { reason: \"none\"; event: Event }\n) & {\n /** Keeps the drawer in its current state. */\n cancel: () => void\n /** Lets the event propagate where the drawer would otherwise stop it. */\n allowPropagation: () => void\n isCanceled: boolean\n isPropagationAllowed: boolean\n /** The element that caused the change, if any. */\n trigger: Element | undefined\n /** Keeps the drawer's elements mounted after it closes. */\n preventUnmountOnClose: () => void\n}\n\nexport type DrawerProps = {\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n modal?: boolean\n /**\n * Called when the drawer opens or closes. `eventDetails.reason` says why (`trigger-press`,\n * `escape-key`, `outside-press`, `focus-out`, `close-press`) and `eventDetails.cancel()` keeps\n * the drawer in its current state.\n */\n onOpenChange?: (open: boolean, eventDetails: DrawerOpenChangeDetails) => void\n}\n\nexport const Drawer = React.forwardRef<HTMLElement, DrawerProps>(\n function Drawer({ onOpenChange, ...props }, _ref) {\n return (\n <DialogPrimitive.Root\n data-slot=\"drawer\"\n onOpenChange={(open, eventDetails) => {\n // A layer inside (a Volt select or tooltip, which run on Radix, or a control handling\n // the key itself) prevents the Escape it consumes, but Base UI dismisses regardless, so\n // one Escape would close both. Honour the handled event. Consumers still mix Zenith with\n // Volt on one page, so this stays after the Radix teardown (D12).\n if (\n eventDetails.reason === \"escape-key\" &&\n eventDetails.event.defaultPrevented\n ) {\n eventDetails.cancel()\n return\n }\n onOpenChange?.(open, eventDetails)\n }}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerTriggerProps = NativePartProps<\"button\">\n\nexport const DrawerTrigger = React.forwardRef<\n HTMLButtonElement,\n DrawerTriggerProps\n>(function DrawerTrigger(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Trigger\n ref={ref}\n data-slot=\"drawer-trigger\"\n {...{ [SLOT_ATTR]: \"drawer-trigger\" }}\n className={mergeClasses(!asChild && styles.nativeTrigger, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\n// Lets DrawerContent supply Base UI's required Portal itself when no DrawerPortal wraps it, as\n// Radix rendered content inline without one.\nconst DrawerPortalPresenceContext = React.createContext(false)\n\nexport type DrawerPortalProps = {\n children?: React.ReactNode\n /** The element the overlay and the content portal into; `document.body` when omitted or null. */\n container?: Element | DocumentFragment | null\n /** Keeps the overlay and the content mounted while the drawer is closed. */\n forceMount?: true\n}\n\nexport const DrawerPortal = React.forwardRef<HTMLElement, DrawerPortalProps>(\n function DrawerPortal({ container, forceMount, ...props }, ref) {\n return (\n <DrawerPortalPresenceContext.Provider value={true}>\n <DialogPrimitive.Portal\n // Base UI types the ref as its portal div, which any HTMLElement ref can hold.\n ref={ref as React.Ref<HTMLDivElement>}\n data-slot=\"drawer-portal\"\n {...{ [SLOT_ATTR]: \"drawer-portal\" }}\n // Radix took any Element or DocumentFragment, null meaning the body. Base UI hands a\n // node straight to createPortal, which takes either, but reads null as \"wait for one\".\n container={(container ?? undefined) as HTMLElement | undefined}\n keepMounted={forceMount}\n {...props}\n />\n </DrawerPortalPresenceContext.Provider>\n )\n }\n)\n\nexport type DrawerOverlayProps = NativePartProps<\"div\"> & {\n /** Kept for compatibility: the overlay stays mounted whenever DrawerPortal's `forceMount` keeps the portal mounted. */\n forceMount?: true\n}\n\nexport const DrawerOverlay = React.forwardRef<\n HTMLDivElement,\n DrawerOverlayProps\n>(function DrawerOverlay(\n { asChild = false, children, className, forceMount: _forceMount, ...props },\n ref\n) {\n const styles = useStyles()\n // The overlay is portalled too, so it re-stamps the boundary's appearance like the content (#8).\n const appearance = useAppearanceAttributes()\n\n return (\n <DialogPrimitive.Backdrop\n ref={ref}\n // Base UI renders no backdrop for a dialog nested in another; Radix's overlay always rendered,\n // dimming the drawer beneath.\n forceRender\n data-slot=\"drawer-overlay\"\n {...{ [SLOT_ATTR]: \"drawer-overlay\" }}\n {...appearance}\n className={mergeClasses(styles.overlay, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DrawerSide = \"left\" | \"right\" | \"top\" | \"bottom\"\n\nexport type DrawerContentProps = NativePartProps<\"div\"> & {\n showCloseButton?: boolean\n /**\n * Accessible name of the built-in close button, read by screen readers. Pass a translated\n * string for any locale other than English. Defaults to \"Close\".\n */\n closeButtonLabel?: string\n side?: DrawerSide\n flush?: boolean\n /**\n * Keeps the content mounted while the drawer is closed. Inside DrawerPortal, the portal's\n * `forceMount` decides.\n */\n forceMount?: true\n /** Called before focus moves into the drawer; `preventDefault()` leaves focus where it is. */\n onOpenAutoFocus?: (event: Event) => void\n /** Called before focus returns on close; `preventDefault()` skips the return. */\n onCloseAutoFocus?: (event: Event) => void\n}\n\nexport const DrawerContent = React.forwardRef<\n HTMLDivElement,\n DrawerContentProps\n>(function DrawerContent(\n {\n asChild = false,\n className,\n children,\n showCloseButton = true,\n closeButtonLabel = \"Close\",\n side = \"right\",\n flush = false,\n forceMount,\n onOpenAutoFocus,\n onCloseAutoFocus,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const hasPortal = React.useContext(DrawerPortalPresenceContext)\n // DENSITY-SPEC.md §4.4 — portal content boundary; see dialog.tsx's identical comment.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n\n const closeButton = showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"drawer-close\"\n {...{ [SLOT_ATTR]: \"drawer-close\" }}\n className={styles.closeButton}\n >\n <XIcon />\n <span className={styles.srOnly}>{closeButtonLabel}</span>\n </DialogPrimitive.Close>\n )\n const child = asChild ? onlySlotChild(children) : undefined\n // The child keeps its own children, so the built-in close button joins them there.\n const content = child\n ? {\n render: React.cloneElement(\n child,\n undefined,\n (child.props as { children?: React.ReactNode }).children,\n closeButton\n ),\n }\n : {\n children: (\n <>\n {children}\n {closeButton}\n </>\n ),\n }\n\n const popup = (\n <DialogPrimitive.Popup\n ref={ref}\n data-slot=\"drawer-content\"\n {...{ [SLOT_ATTR]: \"drawer-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n data-side={side}\n initialFocus={radixFocusCallback(onOpenAutoFocus)}\n finalFocus={radixFocusCallback(onCloseAutoFocus)}\n className={mergeClasses(\n styles.content,\n styles[side],\n !flush && styles.contentPadding,\n className\n )}\n {...props}\n {...content}\n />\n )\n\n // Base UI's Popup requires a Portal ancestor; Radix rendered inline without one.\n return hasPortal ? (\n popup\n ) : (\n <DialogPrimitive.Portal keepMounted={forceMount}>\n {popup}\n </DialogPrimitive.Portal>\n )\n})\n\nexport type DrawerCloseProps = NativePartProps<\"button\">\n\nexport const DrawerClose = React.forwardRef<\n HTMLButtonElement,\n DrawerCloseProps\n>(function DrawerClose(\n { asChild = false, className, children, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Close\n ref={ref}\n data-slot=\"drawer-close\"\n {...{ [SLOT_ATTR]: \"drawer-close\" }}\n className={mergeClasses(\n !asChild && styles.nativeTrigger,\n styles.close,\n className\n )}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DrawerHeaderProps = React.ComponentProps<\"div\">\n\nexport const DrawerHeader = React.forwardRef<HTMLDivElement, DrawerHeaderProps>(\n function DrawerHeader({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"drawer-header\"\n {...{ [SLOT_ATTR]: \"drawer-header\" }}\n className={mergeClasses(styles.header, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerFooterProps = React.ComponentProps<\"div\">\n\nexport const DrawerFooter = React.forwardRef<HTMLDivElement, DrawerFooterProps>(\n function DrawerFooter({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"drawer-footer\"\n {...{ [SLOT_ATTR]: \"drawer-footer\" }}\n className={mergeClasses(styles.footer, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerTitleProps = NativePartProps<\"h2\">\n\nexport const DrawerTitle = React.forwardRef<\n HTMLHeadingElement,\n DrawerTitleProps\n>(function DrawerTitle(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"drawer-title\"\n {...{ [SLOT_ATTR]: \"drawer-title\" }}\n className={mergeClasses(styles.title, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DrawerDescriptionProps = NativePartProps<\"p\">\n\nexport const DrawerDescription = React.forwardRef<\n HTMLParagraphElement,\n DrawerDescriptionProps\n>(function DrawerDescription(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"drawer-description\"\n {...{ [SLOT_ATTR]: \"drawer-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n"],"names":["easeOut","easeIn","useStyles","makeZenithStyles","nativeControl","shorthands","OVERLAY_Z_INDEX","boxModel","tokens.gray2","tokens.spacingLayout1","tokens.radius2xl","tokens.spacingElement1","tokens.grayA1","tokens.accentA8","tokens.spacingElement2","tokens.accentA11","tokens.accentSoft","tokens.textLg","tokens.leadingLg","tokens.fontWeightSemibold","tokens.grayA12","tokens.grayA11","tokens.textSm","tokens.leadingSm","XIcon","React","props","ref","jsx","onlySlotChild","children","elements","slotProps","asChild","child","radixFocusCallback","handler","event","before","moved","Drawer","onOpenChange","_ref","DialogPrimitive","open","eventDetails","DrawerTrigger","className","styles","SLOT_ATTR","mergeClasses","DrawerPortalPresenceContext","DrawerPortal","container","forceMount","DrawerOverlay","_forceMount","appearance","useAppearanceAttributes","DrawerContent","showCloseButton","closeButtonLabel","side","flush","onOpenAutoFocus","onCloseAutoFocus","hasPortal","override","useDensity","closeButton","jsxs","content","Fragment","popup","DrawerClose","DrawerHeader","DrawerFooter","DrawerTitle","DrawerDescription"],"mappings":"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"}
1
+ {"version":3,"file":"drawer.js","sources":["../../../src/components/drawer/drawer.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { useAppearanceAttributes } from \"../appearance-boundary/appearance-boundary\"\nimport { useDensity } from \"../density-provider/density-provider\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport { OVERLAY_Z_INDEX } from \"../../styles/overlay-layer\"\nimport * as tokens from \"../../tokens\"\n\nconst easeOut = \"cubic-bezier(0.4, 0, 0.2, 1)\"\nconst easeIn = \"cubic-bezier(0.4, 0, 1, 1)\"\n\nconst useStyles = makeZenithStyles({\n // For the bare native `<button>` a Trigger/Close renders. Not applied under `asChild`, where the\n // child owns its own element and two atom sets would race for the same properties.\n nativeTrigger: {\n ...nativeControl,\n },\n overlay: {\n position: \"fixed\",\n ...shorthands.inset(0),\n zIndex: OVERLAY_Z_INDEX,\n backgroundColor: \"rgb(0 0 0 / 50%)\",\n transitionProperty: \"opacity\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: easeOut,\n \"&[data-starting-style]\": { opacity: 0 },\n \"&[data-ending-style]\": { opacity: 0, transitionTimingFunction: easeIn },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n },\n content: {\n ...boxModel,\n backgroundColor: tokens.gray2,\n position: \"fixed\",\n zIndex: OVERLAY_Z_INDEX,\n display: \"flex\",\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingLayout1),\n ...shorthands.borderRadius(tokens.radius2xl),\n // v1 shadow-lg; elevation has no token in this package.\n boxShadow: \"0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a\",\n // The fade lives here, the slide's distance in each side's slot below.\n transitionProperty: \"opacity, transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: easeOut,\n \"&[data-starting-style]\": { opacity: 0 },\n \"&[data-ending-style]\": { opacity: 0, transitionTimingFunction: easeIn },\n // Collapses the side slots' slide too: they set only where it starts and ends.\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n },\n contentPadding: {\n ...boxModel,\n // Layout tier, unlike Dialog, AlertDialog and Popover: a drawer holds sections, not one group.\n ...shorthands.padding(tokens.spacingLayout1),\n },\n right: {\n ...boxModel,\n top: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n right: tokens.spacingElement1,\n height: \"calc(100% - 0.5rem)\",\n ...shorthands.borderLeft(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-starting-style]\": { transform: \"translateX(100%)\" },\n \"&[data-ending-style]\": { transform: \"translateX(100%)\" },\n },\n left: {\n ...boxModel,\n top: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n left: tokens.spacingElement1,\n height: \"calc(100% - 0.5rem)\",\n ...shorthands.borderRight(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-starting-style]\": { transform: \"translateX(-100%)\" },\n \"&[data-ending-style]\": { transform: \"translateX(-100%)\" },\n },\n top: {\n ...boxModel,\n left: tokens.spacingElement1,\n right: tokens.spacingElement1,\n top: tokens.spacingElement1,\n width: \"calc(100% - 0.5rem)\",\n ...shorthands.borderBottom(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-starting-style]\": { transform: \"translateY(-100%)\" },\n \"&[data-ending-style]\": { transform: \"translateY(-100%)\" },\n },\n bottom: {\n ...boxModel,\n left: tokens.spacingElement1,\n right: tokens.spacingElement1,\n bottom: tokens.spacingElement1,\n width: \"calc(100% - 0.5rem)\",\n ...shorthands.borderTop(\"1px\", \"solid\", tokens.grayA1),\n \"&[data-starting-style]\": { transform: \"translateY(100%)\" },\n \"&[data-ending-style]\": { transform: \"translateY(100%)\" },\n },\n close: {\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n },\n closeButton: {\n ...nativeControl,\n position: \"absolute\",\n // Inset by the content padding so it lines up with the padded header.\n top: tokens.spacingLayout1,\n right: tokens.spacingLayout1,\n ...shorthands.padding(tokens.spacingElement2),\n // v1 rounded-full; no full-radius token exists in this package.\n borderRadius: \"9999px\",\n cursor: \"pointer\",\n color: tokens.accentA11,\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.accentA8,\n },\n \":disabled\": {\n pointerEvents: \"none\",\n },\n \"& svg\": {\n display: \"block\",\n pointerEvents: \"none\",\n flexShrink: 0,\n width: \"1rem\",\n height: \"1rem\",\n },\n },\n header: {\n display: \"flex\",\n flexShrink: 0,\n flexDirection: \"column\",\n ...shorthands.gap(tokens.spacingElement2),\n textAlign: \"left\",\n },\n footer: {\n marginTop: \"auto\",\n display: \"flex\",\n flexShrink: 0,\n ...shorthands.gap(tokens.spacingElement2),\n justifyContent: \"flex-end\",\n },\n title: {\n ...shorthands.margin(0),\n fontSize: tokens.textLg,\n lineHeight: tokens.leadingLg,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.grayA12,\n },\n description: {\n ...shorthands.margin(0),\n color: tokens.grayA11,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n },\n srOnly: {\n ...boxModel,\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: 0,\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n },\n})\n\nconst XIcon = React.forwardRef<SVGSVGElement, React.SVGProps<SVGSVGElement>>(\n function XIcon(props, ref) {\n return (\n <svg\n ref={ref}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M4.38333 5.31667L1.11667 8.58333C0.994445 8.70556 0.838889 8.76667 0.65 8.76667C0.461111 8.76667 0.305556 8.70556 0.183333 8.58333C0.0611111 8.46111 0 8.30556 0 8.11667C0 7.92778 0.0611111 7.77222 0.183333 7.65L3.45 4.38333L0.183333 1.11667C0.0611111 0.994445 0 0.838889 0 0.65C0 0.461111 0.0611111 0.305556 0.183333 0.183333C0.305556 0.0611111 0.461111 0 0.65 0C0.838889 0 0.994445 0.0611111 1.11667 0.183333L4.38333 3.45L7.65 0.183333C7.77222 0.0611111 7.92778 0 8.11667 0C8.30556 0 8.46111 0.0611111 8.58333 0.183333C8.70556 0.305556 8.76667 0.461111 8.76667 0.65C8.76667 0.838889 8.70556 0.994445 8.58333 1.11667L5.31667 4.38333L8.58333 7.65C8.70556 7.77222 8.76667 7.92778 8.76667 8.11667C8.76667 8.30556 8.70556 8.46111 8.58333 8.58333C8.46111 8.70556 8.30556 8.76667 8.11667 8.76667C7.92778 8.76667 7.77222 8.70556 7.65 8.58333L4.38333 5.31667Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n }\n)\n\n// A single child can arrive wrapped in a one-element array depending on the JSX runtime (MDX call\n// sites do this). Radix's Slot normalised that, so the `asChild` shim has to as well.\nfunction onlySlotChild(children: React.ReactNode) {\n const elements = React.Children.toArray(children).filter(React.isValidElement)\n return elements.length === 1 ? elements[0] : undefined\n}\n\n/**\n * Radix's `asChild` over Base UI's `render`: the single child element becomes the part and keeps\n * its own children, since Base UI lets the rendered element's props win the merge.\n */\nfunction slotProps(asChild: boolean, children: React.ReactNode) {\n const child = asChild ? onlySlotChild(children) : undefined\n return child ? { render: child } : { children }\n}\n\n/**\n * A part's props as they were under Radix: its native element's own (DOM attributes, React's\n * handler types, a `CSSProperties` style, a string `className`, `ref`) plus `asChild`. Base UI's\n * prop types widen `style` and `className` to functions of the part's state, wrap every handler's\n * event in `BaseUIEvent` and add props of their own; none of that reaches the public surface.\n */\ntype NativePartProps<Tag extends \"button\" | \"div\" | \"h2\" | \"p\"> =\n React.ComponentProps<Tag> & {\n /** Renders the single child element as this part, merging its props and behaviour onto it. */\n asChild?: boolean\n }\n\n/**\n * Radix-shaped focus interception over Base UI's `initialFocus`/`finalFocus`. `preventDefault()`\n * leaves focus where it is; otherwise the default move happens, because Base UI reads a callback\n * that returns `undefined` as \"move nothing\".\n */\nfunction radixFocusCallback(handler: ((event: Event) => void) | undefined) {\n if (!handler) return undefined\n\n return () => {\n const event = new Event(\"focus\", { cancelable: true })\n const before = document.activeElement\n handler(event)\n const moved = document.activeElement\n // Base UI calls `finalFocus` inside React's commit, and React then restores the focus it saw\n // before the commit. Radix ran this handler after the commit, so a handler that moves focus\n // itself has its move applied again once the commit is done.\n if (moved !== before && moved instanceof HTMLElement) {\n queueMicrotask(() => moved.focus())\n }\n return !event.defaultPrevented\n }\n}\n\n/**\n * What `onOpenChange` receives as its second argument: Base UI's change details, declared in\n * Zenith. Base UI's own type drags its dialog store into the published declarations, and\n * TypeScript 4 cannot parse that store. `event` narrows with `reason`, as it does in Base UI.\n */\ntype DrawerOpenChangeDetails = (\n | {\n reason: \"trigger-press\"\n event: MouseEvent | PointerEvent | TouchEvent | KeyboardEvent\n }\n | { reason: \"outside-press\"; event: MouseEvent | PointerEvent | TouchEvent }\n | { reason: \"escape-key\"; event: KeyboardEvent }\n | { reason: \"close-press\"; event: MouseEvent | KeyboardEvent | PointerEvent }\n | { reason: \"focus-out\"; event: FocusEvent | KeyboardEvent }\n | { reason: \"imperative-action\"; event: Event }\n | { reason: \"none\"; event: Event }\n) & {\n /** Keeps the drawer in its current state. */\n cancel: () => void\n /** Lets the event propagate where the drawer would otherwise stop it. */\n allowPropagation: () => void\n isCanceled: boolean\n isPropagationAllowed: boolean\n /** The element that caused the change, if any. */\n trigger: Element | undefined\n /** Keeps the drawer's elements mounted after it closes. */\n preventUnmountOnClose: () => void\n}\n\nexport type DrawerProps = {\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n modal?: boolean\n /**\n * Called when the drawer opens or closes. `eventDetails.reason` says why (`trigger-press`,\n * `escape-key`, `outside-press`, `focus-out`, `close-press`) and `eventDetails.cancel()` keeps\n * the drawer in its current state.\n */\n onOpenChange?: (open: boolean, eventDetails: DrawerOpenChangeDetails) => void\n}\n\nexport const Drawer = React.forwardRef<HTMLElement, DrawerProps>(\n function Drawer({ onOpenChange, ...props }, _ref) {\n return (\n <DialogPrimitive.Root\n data-slot=\"drawer\"\n onOpenChange={(open, eventDetails) => {\n // A layer inside (a Volt select or tooltip, which run on Radix, or a control handling\n // the key itself) prevents the Escape it consumes, but Base UI dismisses regardless, so\n // one Escape would close both. Honour the handled event. Consumers still mix Zenith with\n // Volt on one page, so this stays after the Radix teardown (D12).\n if (\n eventDetails.reason === \"escape-key\" &&\n eventDetails.event.defaultPrevented\n ) {\n eventDetails.cancel()\n return\n }\n onOpenChange?.(open, eventDetails)\n }}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerTriggerProps = NativePartProps<\"button\">\n\nexport const DrawerTrigger = React.forwardRef<\n HTMLButtonElement,\n DrawerTriggerProps\n>(function DrawerTrigger(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Trigger\n ref={ref}\n data-slot=\"drawer-trigger\"\n {...{ [SLOT_ATTR]: \"drawer-trigger\" }}\n className={mergeClasses(!asChild && styles.nativeTrigger, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\n// Lets DrawerContent supply Base UI's required Portal itself when no DrawerPortal wraps it, as\n// Radix rendered content inline without one.\nconst DrawerPortalPresenceContext = React.createContext(false)\n\nexport type DrawerPortalProps = {\n children?: React.ReactNode\n /** The element the overlay and the content portal into; `document.body` when omitted or null. */\n container?: Element | DocumentFragment | null\n /** Keeps the overlay and the content mounted while the drawer is closed. */\n forceMount?: true\n}\n\nexport const DrawerPortal = React.forwardRef<HTMLElement, DrawerPortalProps>(\n function DrawerPortal({ container, forceMount, ...props }, ref) {\n return (\n <DrawerPortalPresenceContext.Provider value={true}>\n <DialogPrimitive.Portal\n // Base UI types the ref as its portal div, which any HTMLElement ref can hold.\n ref={ref as React.Ref<HTMLDivElement>}\n data-slot=\"drawer-portal\"\n {...{ [SLOT_ATTR]: \"drawer-portal\" }}\n // Radix took any Element or DocumentFragment, null meaning the body. Base UI hands a\n // node straight to createPortal, which takes either, but reads null as \"wait for one\".\n container={(container ?? undefined) as HTMLElement | undefined}\n keepMounted={forceMount}\n {...props}\n />\n </DrawerPortalPresenceContext.Provider>\n )\n }\n)\n\nexport type DrawerOverlayProps = NativePartProps<\"div\"> & {\n /** Kept for compatibility: the overlay stays mounted whenever DrawerPortal's `forceMount` keeps the portal mounted. */\n forceMount?: true\n}\n\nexport const DrawerOverlay = React.forwardRef<\n HTMLDivElement,\n DrawerOverlayProps\n>(function DrawerOverlay(\n { asChild = false, children, className, forceMount: _forceMount, ...props },\n ref\n) {\n const styles = useStyles()\n // The overlay is portalled too, so it re-stamps the boundary's appearance like the content (#8).\n const appearance = useAppearanceAttributes()\n\n return (\n <DialogPrimitive.Backdrop\n ref={ref}\n // Base UI renders no backdrop for a dialog nested in another; Radix's overlay always rendered,\n // dimming the drawer beneath.\n forceRender\n data-slot=\"drawer-overlay\"\n {...{ [SLOT_ATTR]: \"drawer-overlay\" }}\n {...appearance}\n className={mergeClasses(styles.overlay, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DrawerSide = \"left\" | \"right\" | \"top\" | \"bottom\"\n\nexport type DrawerContentProps = NativePartProps<\"div\"> & {\n showCloseButton?: boolean\n /**\n * Accessible name of the built-in close button, read by screen readers. Pass a translated\n * string for any locale other than English. Defaults to \"Close\".\n */\n closeButtonLabel?: string\n side?: DrawerSide\n flush?: boolean\n /**\n * Keeps the content mounted while the drawer is closed. Inside DrawerPortal, the portal's\n * `forceMount` decides.\n */\n forceMount?: true\n /** Called before focus moves into the drawer; `preventDefault()` leaves focus where it is. */\n onOpenAutoFocus?: (event: Event) => void\n /** Called before focus returns on close; `preventDefault()` skips the return. */\n onCloseAutoFocus?: (event: Event) => void\n}\n\nexport const DrawerContent = React.forwardRef<\n HTMLDivElement,\n DrawerContentProps\n>(function DrawerContent(\n {\n asChild = false,\n className,\n children,\n showCloseButton = true,\n closeButtonLabel = \"Close\",\n side = \"right\",\n flush = false,\n forceMount,\n onOpenAutoFocus,\n onCloseAutoFocus,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const hasPortal = React.useContext(DrawerPortalPresenceContext)\n // DENSITY-SPEC.md §4.4 — portal content boundary; see dialog.tsx's identical comment.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n\n const closeButton = showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"drawer-close\"\n {...{ [SLOT_ATTR]: \"drawer-close\" }}\n className={styles.closeButton}\n >\n <XIcon />\n <span className={styles.srOnly}>{closeButtonLabel}</span>\n </DialogPrimitive.Close>\n )\n const child = asChild ? onlySlotChild(children) : undefined\n // The child keeps its own children, so the built-in close button joins them there.\n const content = child\n ? {\n render: React.cloneElement(\n child,\n undefined,\n (child.props as { children?: React.ReactNode }).children,\n closeButton\n ),\n }\n : {\n children: (\n <>\n {children}\n {closeButton}\n </>\n ),\n }\n\n const popup = (\n <DialogPrimitive.Popup\n ref={ref}\n data-slot=\"drawer-content\"\n {...{ [SLOT_ATTR]: \"drawer-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n data-side={side}\n initialFocus={radixFocusCallback(onOpenAutoFocus)}\n finalFocus={radixFocusCallback(onCloseAutoFocus)}\n className={mergeClasses(\n styles.content,\n styles[side],\n !flush && styles.contentPadding,\n className\n )}\n {...props}\n {...content}\n />\n )\n\n // Base UI's Popup requires a Portal ancestor; Radix rendered inline without one.\n return hasPortal ? (\n popup\n ) : (\n <DialogPrimitive.Portal keepMounted={forceMount}>\n {popup}\n </DialogPrimitive.Portal>\n )\n})\n\nexport type DrawerCloseProps = NativePartProps<\"button\">\n\nexport const DrawerClose = React.forwardRef<\n HTMLButtonElement,\n DrawerCloseProps\n>(function DrawerClose(\n { asChild = false, className, children, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Close\n ref={ref}\n data-slot=\"drawer-close\"\n {...{ [SLOT_ATTR]: \"drawer-close\" }}\n className={mergeClasses(\n !asChild && styles.nativeTrigger,\n styles.close,\n className\n )}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DrawerHeaderProps = React.ComponentProps<\"div\">\n\nexport const DrawerHeader = React.forwardRef<HTMLDivElement, DrawerHeaderProps>(\n function DrawerHeader({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"drawer-header\"\n {...{ [SLOT_ATTR]: \"drawer-header\" }}\n className={mergeClasses(styles.header, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerFooterProps = React.ComponentProps<\"div\">\n\nexport const DrawerFooter = React.forwardRef<HTMLDivElement, DrawerFooterProps>(\n function DrawerFooter({ className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <div\n ref={ref}\n data-slot=\"drawer-footer\"\n {...{ [SLOT_ATTR]: \"drawer-footer\" }}\n className={mergeClasses(styles.footer, className)}\n {...props}\n />\n )\n }\n)\n\nexport type DrawerTitleProps = NativePartProps<\"h2\">\n\nexport const DrawerTitle = React.forwardRef<\n HTMLHeadingElement,\n DrawerTitleProps\n>(function DrawerTitle(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"drawer-title\"\n {...{ [SLOT_ATTR]: \"drawer-title\" }}\n className={mergeClasses(styles.title, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type DrawerDescriptionProps = NativePartProps<\"p\">\n\nexport const DrawerDescription = React.forwardRef<\n HTMLParagraphElement,\n DrawerDescriptionProps\n>(function DrawerDescription(\n { asChild = false, children, className, ...props },\n ref\n) {\n const styles = useStyles()\n\n return (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"drawer-description\"\n {...{ [SLOT_ATTR]: \"drawer-description\" }}\n className={mergeClasses(styles.description, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n"],"names":["easeOut","easeIn","useStyles","makeZenithStyles","nativeControl","shorthands","OVERLAY_Z_INDEX","boxModel","tokens.gray2","tokens.spacingLayout1","tokens.radius2xl","tokens.spacingElement1","tokens.grayA1","tokens.accentA8","tokens.spacingElement2","tokens.accentA11","tokens.accentSoft","tokens.textLg","tokens.leadingLg","tokens.fontWeightSemibold","tokens.grayA12","tokens.grayA11","tokens.textSm","tokens.leadingSm","XIcon","React","props","ref","jsx","onlySlotChild","children","elements","slotProps","asChild","child","radixFocusCallback","handler","event","before","moved","Drawer","onOpenChange","_ref","DialogPrimitive","open","eventDetails","DrawerTrigger","className","styles","SLOT_ATTR","mergeClasses","DrawerPortalPresenceContext","DrawerPortal","container","forceMount","DrawerOverlay","_forceMount","appearance","useAppearanceAttributes","DrawerContent","showCloseButton","closeButtonLabel","side","flush","onOpenAutoFocus","onCloseAutoFocus","hasPortal","override","useDensity","closeButton","jsxs","content","Fragment","popup","DrawerClose","DrawerHeader","DrawerFooter","DrawerTitle","DrawerDescription"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { Menu as f } from "../../_virtual/_zenith-runtime-family_menu.js";
5
5
  import { mergeProps as re } from "../../_virtual/_zenith-runtime-family_merge-props.js";
6
6
  import { Separator as ie } from "../../_virtual/_zenith-runtime-family_separator.js";
7
7
  import { useRender as ae } from "../../_virtual/_zenith-runtime-family_use-render.js";
8
- import { mergeClasses as w, SLOT_ATTR as g, shorthands as P } from "@epilot/zenith-runtime/v1/core.js";
8
+ import { mergeClasses as w, SLOT_ATTR as g, shorthands as P } from "@epilot/zenith-runtime/v1";
9
9
  import { useAppearanceAttributes as V } from "../appearance-boundary/appearance-boundary.js";
10
10
  import { useDensity as J } from "../density-provider/density-provider.js";
11
11
  import { makeZenithStyles as se } from "../../styles/make-styles.js";