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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +34 -0
  2. package/dist/components/accordion/accordion.js +57 -48
  3. package/dist/components/accordion/accordion.js.map +1 -1
  4. package/dist/components/alert-dialog/alert-dialog.js +120 -91
  5. package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
  6. package/dist/components/avatar/avatar-group.js +38 -35
  7. package/dist/components/avatar/avatar-group.js.map +1 -1
  8. package/dist/components/avatar/avatar.js +78 -71
  9. package/dist/components/avatar/avatar.js.map +1 -1
  10. package/dist/components/badge/badge.js +60 -55
  11. package/dist/components/badge/badge.js.map +1 -1
  12. package/dist/components/breadcrumb/breadcrumb.js +99 -54
  13. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  14. package/dist/components/button/button.js +87 -77
  15. package/dist/components/button/button.js.map +1 -1
  16. package/dist/components/button-group/button-group.js +36 -32
  17. package/dist/components/button-group/button-group.js.map +1 -1
  18. package/dist/components/callout/callout.js +113 -104
  19. package/dist/components/callout/callout.js.map +1 -1
  20. package/dist/components/card/card.js +62 -52
  21. package/dist/components/card/card.js.map +1 -1
  22. package/dist/components/checkbox/checkbox.js +22 -19
  23. package/dist/components/checkbox/checkbox.js.map +1 -1
  24. package/dist/components/code-block/code-block.js +135 -123
  25. package/dist/components/code-block/code-block.js.map +1 -1
  26. package/dist/components/code-editor/code-editor.js +276 -260
  27. package/dist/components/code-editor/code-editor.js.map +1 -1
  28. package/dist/components/collapsible-sidebar/collapsible-sidebar.js +62 -56
  29. package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
  30. package/dist/components/command/command.js +116 -105
  31. package/dist/components/command/command.js.map +1 -1
  32. package/dist/components/data-table/data-table-body.js +38 -34
  33. package/dist/components/data-table/data-table-body.js.map +1 -1
  34. package/dist/components/data-table/data-table-column-header.js +30 -26
  35. package/dist/components/data-table/data-table-column-header.js.map +1 -1
  36. package/dist/components/data-table/data-table-column-order.js +79 -73
  37. package/dist/components/data-table/data-table-column-order.js.map +1 -1
  38. package/dist/components/data-table/data-table-column-visibility.js +25 -22
  39. package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
  40. package/dist/components/data-table/data-table-content.js +47 -44
  41. package/dist/components/data-table/data-table-content.js.map +1 -1
  42. package/dist/components/data-table/data-table-error.js +36 -32
  43. package/dist/components/data-table/data-table-error.js.map +1 -1
  44. package/dist/components/data-table/data-table-footer.js +10 -8
  45. package/dist/components/data-table/data-table-footer.js.map +1 -1
  46. package/dist/components/data-table/data-table-header-draggable.js +40 -36
  47. package/dist/components/data-table/data-table-header-draggable.js.map +1 -1
  48. package/dist/components/data-table/data-table-loading.js +21 -18
  49. package/dist/components/data-table/data-table-loading.js.map +1 -1
  50. package/dist/components/data-table/data-table-resize-handle.js +13 -11
  51. package/dist/components/data-table/data-table-resize-handle.js.map +1 -1
  52. package/dist/components/data-table/data-table-row.js +47 -44
  53. package/dist/components/data-table/data-table-row.js.map +1 -1
  54. package/dist/components/data-table/data-table-toolbar.js +9 -7
  55. package/dist/components/data-table/data-table-toolbar.js.map +1 -1
  56. package/dist/components/data-table/data-table.js +48 -46
  57. package/dist/components/data-table/data-table.js.map +1 -1
  58. package/dist/components/date-range-picker/date-range-picker.js +212 -193
  59. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  60. package/dist/components/date-range-picker/range-calendar.js +36 -34
  61. package/dist/components/date-range-picker/range-calendar.js.map +1 -1
  62. package/dist/components/date-time-picker/calendar.js +290 -272
  63. package/dist/components/date-time-picker/calendar.js.map +1 -1
  64. package/dist/components/date-time-picker/date-time-picker-input.js +127 -112
  65. package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
  66. package/dist/components/date-time-picker/date-time-picker-panel.js +126 -120
  67. package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
  68. package/dist/components/date-time-picker/date-time-picker.js +91 -86
  69. package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
  70. package/dist/components/date-time-picker/time-picker.js +95 -87
  71. package/dist/components/date-time-picker/time-picker.js.map +1 -1
  72. package/dist/components/dialog/dialog.js +125 -103
  73. package/dist/components/dialog/dialog.js.map +1 -1
  74. package/dist/components/drawer/drawer.js +151 -114
  75. package/dist/components/drawer/drawer.js.map +1 -1
  76. package/dist/components/dropdown-menu/dropdown-menu.js +141 -112
  77. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  78. package/dist/components/field/field-combobox.js +196 -176
  79. package/dist/components/field/field-combobox.js.map +1 -1
  80. package/dist/components/field/field.js +237 -195
  81. package/dist/components/field/field.js.map +1 -1
  82. package/dist/components/list/list.js +237 -219
  83. package/dist/components/list/list.js.map +1 -1
  84. package/dist/components/option-card/option-card.js +129 -116
  85. package/dist/components/option-card/option-card.js.map +1 -1
  86. package/dist/components/pill/pill.js +55 -51
  87. package/dist/components/pill/pill.js.map +1 -1
  88. package/dist/components/popover/popover.js +53 -36
  89. package/dist/components/popover/popover.js.map +1 -1
  90. package/dist/components/radio/radio.js +38 -34
  91. package/dist/components/radio/radio.js.map +1 -1
  92. package/dist/components/scroll-area/scroll-area.js +38 -35
  93. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  94. package/dist/components/scroll-overflow/scroll-overflow.js +166 -151
  95. package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
  96. package/dist/components/segmented-control/segmented-control.js +93 -85
  97. package/dist/components/segmented-control/segmented-control.js.map +1 -1
  98. package/dist/components/select/select.js +149 -128
  99. package/dist/components/select/select.js.map +1 -1
  100. package/dist/components/separator/separator.js +19 -16
  101. package/dist/components/separator/separator.js.map +1 -1
  102. package/dist/components/skeleton/skeleton.js +34 -30
  103. package/dist/components/skeleton/skeleton.js.map +1 -1
  104. package/dist/components/spinner/spinner.js +22 -17
  105. package/dist/components/spinner/spinner.js.map +1 -1
  106. package/dist/components/surface/surface.js +25 -22
  107. package/dist/components/surface/surface.js.map +1 -1
  108. package/dist/components/switch/switch.js +66 -57
  109. package/dist/components/switch/switch.js.map +1 -1
  110. package/dist/components/table/table-pagination.js +139 -129
  111. package/dist/components/table/table-pagination.js.map +1 -1
  112. package/dist/components/table/table.js +104 -90
  113. package/dist/components/table/table.js.map +1 -1
  114. package/dist/components/tabs/tabs.js +212 -79
  115. package/dist/components/tabs/tabs.js.map +1 -1
  116. package/dist/components/toast/toast.js +112 -100
  117. package/dist/components/toast/toast.js.map +1 -1
  118. package/dist/components/toggle/toggle.js +32 -30
  119. package/dist/components/toggle/toggle.js.map +1 -1
  120. package/dist/components/tooltip/tooltip.js +59 -46
  121. package/dist/components/tooltip/tooltip.js.map +1 -1
  122. package/dist/index.d.ts +22 -0
  123. package/dist/lib/clear-button.js +18 -17
  124. package/dist/lib/clear-button.js.map +1 -1
  125. package/dist/styles/host-reset.js +47 -0
  126. package/dist/styles/host-reset.js.map +1 -0
  127. package/dist/styles/overlay-layer.js +5 -0
  128. package/dist/styles/overlay-layer.js.map +1 -0
  129. package/dist/tokens.json +1 -1
  130. package/package.json +8 -7
  131. package/scripts/migration-diagnostics.mjs +42 -7
  132. package/scripts/migration-sweep.mjs +9 -1
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.js","sources":["../../../src/components/date-time-picker/calendar.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { isSameDay } from \"date-fns\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { Button } from \"../button/button\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport * as tokens from \"../../tokens\"\n\nimport type { DateTimePickerLocale } from \"./date-time-picker-utils\"\nimport {\n getCalendarDays,\n getWeekDays,\n formatMonth,\n isDateDisabled,\n isDayInCurrentMonth,\n isDaySelected,\n isDayToday,\n goToPreviousMonth,\n goToNextMonth,\n adjustTimeIfPast,\n getMonthNames,\n getDecadeStart,\n getWeekNumber,\n getWeekLabel,\n isDateInRange,\n normalizeRange,\n} from \"./date-time-picker-utils\"\n\nconst ChevronLeftIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"16px\"\n viewBox=\"0 -960 960 960\"\n width=\"16px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"16px\"\n viewBox=\"0 -960 960 960\"\n width=\"16px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\n </svg>\n)\n\nexport type CalendarView = \"days\" | \"months\" | \"years\"\n\nexport type CalendarProps = {\n value: Date | null\n onChange: (date: Date) => void\n onDateSelect?: () => void\n disablePast?: boolean\n locale?: DateTimePickerLocale\n previousMonthLabel?: string\n nextMonthLabel?: string\n showTodayButton?: boolean\n todayLabel?: string\n currentTimeInTimezone?: Date\n showWeekNumbers?: boolean\n // Range mode props (optional - when provided, enables range highlighting)\n rangeStart?: Date | null\n rangeEnd?: Date | null\n hoveredDate?: Date | null\n onDayHover?: (day: Date | null) => void\n onDayClick?: (day: Date) => void\n showPreviousButton?: boolean\n showNextButton?: boolean\n controlledViewDate?: Date\n onViewDateChange?: (date: Date) => void\n // Replace prev/next-month overflow cells with empty placeholders — used by\n // RangeCalendar so adjacent panels don't render the same dates twice (which\n // would otherwise both pick up range styling and read as duplicates).\n hideOutOfMonthDays?: boolean\n className?: string\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n width: \"100%\",\n },\n header: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: tokens.spacingElement2,\n },\n buttonSpacer: {\n width: \"1.75rem\",\n height: \"1.75rem\",\n },\n headerCenter: {\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n },\n headerBtn: {\n fontWeight: tokens.fontWeightSemibold,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n backgroundColor: tokens.grayA3,\n \":hover\": {\n backgroundColor: tokens.grayA4,\n },\n transitionProperty: \"background-color, color\",\n transitionDuration: \"150ms\",\n cursor: \"pointer\",\n ...shorthands.padding(\"0.25rem\", tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusMd),\n ...shorthands.border(\"0\"),\n outlineStyle: \"none\",\n },\n monthHeaderBtn: {\n textTransform: \"capitalize\",\n },\n decadeLabel: {\n fontWeight: tokens.fontWeightSemibold,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n ...shorthands.padding(\"0.25rem\", tokens.spacingElement2),\n },\n grid: {\n display: \"grid\",\n justifyItems: \"center\",\n ...shorthands.gap(\"0.125rem\"),\n gridTemplateColumns: \"repeat(7, minmax(0, 1fr))\",\n },\n gridWithWeeks: {\n gridTemplateColumns: \"auto repeat(7, minmax(0, 1fr))\",\n },\n gridRange: {\n rowGap: tokens.spacingElement1,\n columnGap: \"0\",\n },\n weekLabel: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightMedium,\n color: tokens.grayA11,\n height: \"1.75rem\",\n width: \"2rem\",\n },\n weekNumber: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightMedium,\n color: tokens.grayA11,\n height: \"2rem\",\n width: \"2rem\",\n },\n cellPlaceholder: {\n height: \"2rem\",\n width: \"2rem\",\n },\n dayBtn: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n transitionProperty: \"background-color, color\",\n transitionDuration: \"150ms\",\n cursor: \"pointer\",\n height: \"2rem\",\n width: \"2rem\",\n ...shorthands.border(\"0\"),\n outlineStyle: \"none\",\n },\n dayBtnSingle: {\n ...shorthands.borderRadius(tokens.radiusMd),\n },\n dayBtnTransparent: {\n backgroundColor: \"transparent\",\n },\n dayBtnHover: {\n \":hover\": {\n backgroundColor: tokens.grayA4,\n },\n },\n dayBtnToday: {\n color: tokens.accentA11,\n textDecorationLine: \"underline\",\n textUnderlineOffset: \"4px\",\n textDecorationThickness: \"1.5px\",\n textDecorationColor: tokens.accentA11,\n },\n dayBtnSelected: {\n fontWeight: tokens.fontWeightSemibold,\n backgroundColor: tokens.accentSolid,\n color: tokens.accentContrast,\n \":hover\": {\n backgroundColor: tokens.accentSolidHover,\n },\n },\n dayBtnOutOfMonth: {\n color: tokens.grayA8,\n },\n dayBtnInMonth: {\n color: tokens.grayA12,\n },\n dayBtnDisabled: {\n opacity: 0.5,\n cursor: \"not-allowed\",\n },\n // Range styles\n dayBtnRangeSingleDay: {\n ...shorthands.borderRadius(tokens.radiusMd),\n backgroundColor: tokens.accentSolid,\n color: tokens.accentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.accentSolidHover,\n },\n },\n dayBtnRangeStart: {\n borderTopLeftRadius: tokens.radiusMd,\n borderBottomLeftRadius: tokens.radiusMd,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n backgroundColor: tokens.accentSolid,\n color: tokens.accentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.accentSolidHover,\n },\n },\n dayBtnRangeEnd: {\n borderTopRightRadius: tokens.radiusMd,\n borderBottomRightRadius: tokens.radiusMd,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n backgroundColor: tokens.accentSolid,\n color: tokens.accentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.accentSolidHover,\n },\n },\n dayBtnRangeMiddle: {\n ...shorthands.borderRadius(0),\n backgroundColor: tokens.accent3,\n color: tokens.grayA12,\n },\n dayBtnRangeMiddlePreview: {\n ...shorthands.borderRadius(0),\n backgroundColor: tokens.accentA3,\n color: tokens.grayA12,\n },\n todayContainer: {\n display: \"flex\",\n justifyContent: \"center\",\n paddingTop: tokens.spacingElement2,\n },\n monthsYearsGrid: {\n display: \"grid\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.padding(tokens.spacingElement2, 0),\n },\n monthsGridCols: {\n gridTemplateColumns: \"repeat(3, 1fr)\",\n },\n yearsGridCols: {\n gridTemplateColumns: \"repeat(2, 1fr)\",\n },\n monthYearBtn: {\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 cursor: \"pointer\",\n height: \"2.25rem\",\n ...shorthands.border(\"0\"),\n outlineStyle: \"none\",\n },\n monthBtnCapitalize: {\n textTransform: \"capitalize\",\n },\n})\n\nexport const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>(\n function Calendar(\n {\n value,\n onChange,\n onDateSelect,\n disablePast = false,\n locale = \"de\",\n previousMonthLabel = \"Previous month\",\n nextMonthLabel = \"Next month\",\n showTodayButton = false,\n todayLabel = \"Today\",\n currentTimeInTimezone,\n showWeekNumbers = false,\n rangeStart,\n rangeEnd,\n hoveredDate,\n onDayHover,\n onDayClick,\n showPreviousButton = true,\n showNextButton = true,\n controlledViewDate,\n onViewDateChange,\n hideOutOfMonthDays = false,\n className,\n },\n ref\n ) {\n const styles = useStyles()\n const [internalViewDate, setInternalViewDate] = React.useState(\n () => value || currentTimeInTimezone || new Date()\n )\n const [view, setView] = React.useState<CalendarView>(\"days\")\n\n const isRangeMode = rangeStart !== undefined\n const viewDate = controlledViewDate || internalViewDate\n const setViewDate = React.useCallback(\n (updater: Date | ((prev: Date) => Date)) => {\n if (onViewDateChange) {\n if (typeof updater === \"function\") {\n onViewDateChange(updater(viewDate))\n } else {\n onViewDateChange(updater)\n }\n } else {\n setInternalViewDate(updater)\n }\n },\n [onViewDateChange, viewDate]\n )\n\n const weekDays = getWeekDays(locale)\n const calendarDays = getCalendarDays(viewDate, locale)\n const monthNames = React.useMemo(() => getMonthNames(locale), [locale])\n\n const now = React.useMemo(\n () => currentTimeInTimezone || new Date(),\n [currentTimeInTimezone]\n )\n const currentYear = now.getFullYear()\n const currentMonth = now.getMonth()\n\n const viewYear = viewDate.getFullYear()\n const decadeStart = getDecadeStart(viewYear)\n\n // Navigation handlers\n const handlePrevious = React.useCallback(() => {\n setViewDate((prev) => {\n if (view === \"days\") return goToPreviousMonth(prev)\n if (view === \"months\")\n return new Date(prev.getFullYear() - 1, prev.getMonth(), 1)\n\n return new Date(prev.getFullYear() - 10, prev.getMonth(), 1)\n })\n }, [view, setViewDate])\n\n const handleNext = React.useCallback(() => {\n setViewDate((prev) => {\n if (view === \"days\") return goToNextMonth(prev)\n if (view === \"months\")\n return new Date(prev.getFullYear() + 1, prev.getMonth(), 1)\n\n return new Date(prev.getFullYear() + 10, prev.getMonth(), 1)\n })\n }, [view, setViewDate])\n\n const handleTodayClick = React.useCallback(() => {\n const today = new Date(now)\n\n if (value) {\n today.setHours(value.getHours(), value.getMinutes(), 0, 0)\n } else {\n today.setHours(0, 0, 0, 0)\n }\n\n const adjustedDate = adjustTimeIfPast(\n today,\n disablePast,\n currentTimeInTimezone\n )\n\n setViewDate(now)\n onChange(adjustedDate)\n onDateSelect?.()\n }, [\n onChange,\n onDateSelect,\n value,\n disablePast,\n currentTimeInTimezone,\n now,\n setViewDate,\n ])\n\n const handleDayClick = React.useCallback(\n (day: Date) => {\n if (isDateDisabled(day, disablePast, currentTimeInTimezone)) return\n\n // In range mode, delegate to parent handler\n if (onDayClick) {\n onDayClick(day)\n\n return\n }\n\n const newDate = new Date(day)\n\n if (value) {\n newDate.setHours(value.getHours(), value.getMinutes(), 0, 0)\n } else {\n newDate.setHours(0, 0, 0, 0)\n }\n\n const adjustedDate = adjustTimeIfPast(\n newDate,\n disablePast,\n currentTimeInTimezone\n )\n\n onChange(adjustedDate)\n onDateSelect?.()\n },\n [\n onChange,\n onDateSelect,\n onDayClick,\n value,\n disablePast,\n currentTimeInTimezone,\n ]\n )\n\n const handleMonthSelect = React.useCallback(\n (monthIndex: number) => {\n setViewDate((prev) => new Date(prev.getFullYear(), monthIndex, 1))\n setView(\"days\")\n },\n [setViewDate]\n )\n\n const handleYearSelect = React.useCallback(\n (year: number) => {\n setViewDate((prev) => new Date(year, prev.getMonth(), 1))\n setView(\"months\")\n },\n [setViewDate]\n )\n\n const handleMonthHeaderClick = React.useCallback(() => {\n setView(\"months\")\n }, [])\n\n const handleYearHeaderClick = React.useCallback(() => {\n setView(\"years\")\n }, [])\n\n return (\n <div\n ref={ref}\n className={mergeClasses(styles.root, className)}\n data-slot=\"calendar\"\n {...{ [SLOT_ATTR]: \"calendar\" }}\n onMouseLeave={onDayHover ? () => onDayHover(null) : undefined}\n >\n <div className={styles.header}>\n {showPreviousButton ? (\n <Button\n aria-label={previousMonthLabel}\n onClick={handlePrevious}\n size=\"icon\"\n variant=\"tertiary\"\n >\n <ChevronLeftIcon />\n </Button>\n ) : (\n <div className={styles.buttonSpacer} />\n )}\n <div className={styles.headerCenter}>\n {view === \"days\" && (\n <>\n <button\n className={mergeClasses(\n styles.headerBtn,\n styles.monthHeaderBtn\n )}\n onClick={handleMonthHeaderClick}\n type=\"button\"\n >\n {formatMonth(viewDate, locale)}\n </button>\n <button\n className={styles.headerBtn}\n onClick={handleYearHeaderClick}\n type=\"button\"\n >\n {viewYear}\n </button>\n </>\n )}\n {view === \"months\" && (\n <button\n className={styles.headerBtn}\n onClick={handleYearHeaderClick}\n type=\"button\"\n >\n {viewYear}\n </button>\n )}\n {view === \"years\" && (\n <span className={styles.decadeLabel}>\n {`${decadeStart} \\u2013 ${decadeStart + 9}`}\n </span>\n )}\n </div>\n {showNextButton ? (\n <Button\n aria-label={nextMonthLabel}\n onClick={handleNext}\n size=\"icon\"\n variant=\"tertiary\"\n >\n <ChevronRightIcon />\n </Button>\n ) : (\n <div className={styles.buttonSpacer} />\n )}\n </div>\n\n <div>\n {view === \"days\" && (\n <>\n <div\n className={mergeClasses(\n styles.grid,\n isRangeMode && styles.gridRange,\n showWeekNumbers && styles.gridWithWeeks\n )}\n data-slot=\"calendar-grid\"\n {...{ [SLOT_ATTR]: \"calendar-grid\" }}\n >\n {showWeekNumbers && (\n <div\n className={styles.weekLabel}\n data-slot=\"calendar-week-label\"\n {...{ [SLOT_ATTR]: \"calendar-week-label\" }}\n >\n {getWeekLabel(locale)}\n </div>\n )}\n {weekDays.map((day) => (\n <div\n className={styles.weekLabel}\n data-slot=\"calendar-weekday\"\n {...{ [SLOT_ATTR]: \"calendar-weekday\" }}\n key={day}\n >\n {day}\n </div>\n ))}\n\n {calendarDays.map((day, index) => {\n const weekLeading = showWeekNumbers && index % 7 === 0\n const rowIsAllOutOfMonth =\n hideOutOfMonthDays &&\n weekLeading &&\n calendarDays\n .slice(index, index + 7)\n .every((d) => !isDayInCurrentMonth(d, viewDate))\n const weekCell =\n weekLeading && !rowIsAllOutOfMonth ? (\n <div\n className={styles.weekNumber}\n data-slot=\"calendar-week-number\"\n {...{ [SLOT_ATTR]: \"calendar-week-number\" }}\n data-week={getWeekNumber(day)}\n key={`wk-${index}`}\n >\n {getWeekNumber(day)}\n </div>\n ) : weekLeading ? (\n <div\n aria-hidden=\"true\"\n className={styles.cellPlaceholder}\n data-slot=\"calendar-week-number-placeholder\"\n {...{ [SLOT_ATTR]: \"calendar-week-number-placeholder\" }}\n key={`wk-${index}`}\n />\n ) : null\n const isCurrentMonth = isDayInCurrentMonth(day, viewDate)\n\n // In range mode, skip rendering overflow days entirely so the\n // same date doesn't appear in two adjacent panels.\n if (hideOutOfMonthDays && !isCurrentMonth) {\n return (\n <React.Fragment key={index}>\n {weekCell}\n <div\n aria-hidden=\"true\"\n className={styles.cellPlaceholder}\n data-slot=\"calendar-day-placeholder\"\n {...{ [SLOT_ATTR]: \"calendar-day-placeholder\" }}\n />\n </React.Fragment>\n )\n }\n\n const isDisabled = isDateDisabled(\n day,\n disablePast,\n currentTimeInTimezone\n )\n const isSelected =\n !isRangeMode && value !== null && isDaySelected(day, value)\n const isCurrentDay = isDayToday(day)\n\n // Range mode calculations\n const effectiveEnd = rangeEnd || hoveredDate || null\n const hasRange = isRangeMode && rangeStart && effectiveEnd\n const inRange = hasRange\n ? isDateInRange(day, rangeStart!, effectiveEnd!)\n : false\n\n let isStart = false\n let isEnd = false\n let isSingleDay = false\n\n if (hasRange) {\n const normalized = normalizeRange(\n rangeStart!,\n effectiveEnd!\n )\n\n isStart = isSameDay(day, normalized.start)\n isEnd = isSameDay(day, normalized.end)\n isSingleDay = isStart && isEnd\n } else if (isRangeMode && rangeStart) {\n isStart = isSameDay(day, rangeStart)\n isSingleDay = isStart\n }\n\n const isEndpoint = isStart || isEnd\n const inRangeMiddle = inRange && !isStart && !isEnd\n const isPreviewRange =\n isRangeMode && !rangeEnd && !!hoveredDate\n\n let rangeOrSingleStyle = null\n if (!isRangeMode) {\n rangeOrSingleStyle = mergeClasses(\n styles.dayBtnSingle,\n !isSelected && !isCurrentDay && styles.dayBtnTransparent,\n !isSelected && styles.dayBtnHover,\n isCurrentDay && !isSelected && styles.dayBtnToday,\n isDisabled && styles.dayBtnDisabled,\n !isCurrentMonth &&\n !isDisabled &&\n !isSelected &&\n styles.dayBtnOutOfMonth,\n isSelected && styles.dayBtnSelected,\n isCurrentMonth &&\n !isSelected &&\n !isDisabled &&\n styles.dayBtnInMonth\n )\n } else {\n rangeOrSingleStyle = mergeClasses(\n isSingleDay && isEndpoint && styles.dayBtnRangeSingleDay,\n isStart && !isSingleDay && styles.dayBtnRangeStart,\n isEnd && !isStart && styles.dayBtnRangeEnd,\n inRangeMiddle &&\n !isPreviewRange &&\n styles.dayBtnRangeMiddle,\n inRangeMiddle &&\n isPreviewRange &&\n styles.dayBtnRangeMiddlePreview,\n !isEndpoint && !inRangeMiddle && styles.dayBtnSingle,\n !isEndpoint && !inRangeMiddle && styles.dayBtnTransparent,\n !isEndpoint && !inRangeMiddle && styles.dayBtnHover,\n isCurrentDay &&\n !isEndpoint &&\n !inRangeMiddle &&\n styles.dayBtnToday,\n isDisabled && styles.dayBtnDisabled,\n !isCurrentMonth &&\n !isDisabled &&\n !isEndpoint &&\n styles.dayBtnOutOfMonth,\n isCurrentMonth &&\n !isEndpoint &&\n !isDisabled &&\n styles.dayBtnInMonth\n )\n }\n\n return (\n <React.Fragment key={index}>\n {weekCell}\n <button\n aria-disabled={isDisabled}\n aria-pressed={isSelected || isEndpoint}\n className={mergeClasses(\n styles.dayBtn,\n rangeOrSingleStyle\n )}\n data-in-range={inRangeMiddle || undefined}\n data-selected={isSelected || isEndpoint}\n data-slot=\"calendar-day\"\n {...{ [SLOT_ATTR]: \"calendar-day\" }}\n data-today={isCurrentDay}\n disabled={isDisabled}\n onClick={() => handleDayClick(day)}\n onMouseEnter={\n onDayHover ? () => onDayHover(day) : undefined\n }\n type=\"button\"\n >\n {day.getDate()}\n </button>\n </React.Fragment>\n )\n })}\n </div>\n {showTodayButton && (\n <div\n className={styles.todayContainer}\n data-slot=\"calendar-today\"\n {...{ [SLOT_ATTR]: \"calendar-today\" }}\n >\n <Button\n onClick={handleTodayClick}\n size=\"xs\"\n variant=\"tertiary\"\n >\n {todayLabel}\n </Button>\n </div>\n )}\n </>\n )}\n\n {view === \"months\" && (\n <div\n className={mergeClasses(\n styles.monthsYearsGrid,\n styles.monthsGridCols\n )}\n data-slot=\"calendar-months\"\n {...{ [SLOT_ATTR]: \"calendar-months\" }}\n >\n {monthNames.map((name, index) => {\n const isSelected =\n value !== null &&\n viewYear === value.getFullYear() &&\n index === value.getMonth()\n const isCurrent =\n viewYear === currentYear && index === currentMonth\n const isPast =\n disablePast &&\n (viewYear < currentYear ||\n (viewYear === currentYear && index < currentMonth))\n\n return (\n <button\n className={mergeClasses(\n styles.monthYearBtn,\n styles.monthBtnCapitalize,\n !isSelected && !isCurrent && styles.dayBtnTransparent,\n !isSelected && styles.dayBtnHover,\n isCurrent && !isSelected && styles.dayBtnToday,\n isPast && styles.dayBtnDisabled,\n isSelected && styles.dayBtnSelected,\n !isSelected && !isPast && styles.dayBtnInMonth\n )}\n data-selected={isSelected}\n data-slot=\"calendar-month\"\n {...{ [SLOT_ATTR]: \"calendar-month\" }}\n disabled={isPast}\n key={index}\n onClick={() => handleMonthSelect(index)}\n type=\"button\"\n >\n {name}\n </button>\n )\n })}\n </div>\n )}\n\n {view === \"years\" && (\n <div\n className={mergeClasses(\n styles.monthsYearsGrid,\n styles.yearsGridCols\n )}\n data-slot=\"calendar-years\"\n {...{ [SLOT_ATTR]: \"calendar-years\" }}\n >\n {Array.from({ length: 10 }, (_, i) => {\n const year = decadeStart + i\n const isSelected =\n value !== null && year === value.getFullYear()\n const isCurrent = year === currentYear\n const isPast = disablePast && year < currentYear\n\n return (\n <button\n className={mergeClasses(\n styles.monthYearBtn,\n !isSelected && !isCurrent && styles.dayBtnTransparent,\n !isSelected && styles.dayBtnHover,\n isCurrent && !isSelected && styles.dayBtnToday,\n isPast && styles.dayBtnDisabled,\n isSelected && styles.dayBtnSelected,\n !isSelected && !isPast && styles.dayBtnInMonth\n )}\n data-selected={isSelected}\n data-slot=\"calendar-year\"\n {...{ [SLOT_ATTR]: \"calendar-year\" }}\n disabled={isPast}\n key={year}\n onClick={() => handleYearSelect(year)}\n type=\"button\"\n >\n {year}\n </button>\n )\n })}\n </div>\n )}\n </div>\n </div>\n )\n }\n)\n"],"names":["ChevronLeftIcon","props","jsx","ChevronRightIcon","useStyles","makeZenithStyles","tokens.spacingElement2","shorthands","tokens.spacingElement1","tokens.fontWeightSemibold","tokens.textSm","tokens.leadingSm","tokens.grayA12","tokens.grayA3","tokens.grayA4","tokens.radiusMd","tokens.textXs","tokens.leadingXs","tokens.fontWeightMedium","tokens.grayA11","tokens.accentA11","tokens.accentSolid","tokens.accentContrast","tokens.accentSolidHover","tokens.grayA8","tokens.accent3","tokens.accentA3","Calendar","React","value","onChange","onDateSelect","disablePast","locale","previousMonthLabel","nextMonthLabel","showTodayButton","todayLabel","currentTimeInTimezone","showWeekNumbers","rangeStart","rangeEnd","hoveredDate","onDayHover","onDayClick","showPreviousButton","showNextButton","controlledViewDate","onViewDateChange","hideOutOfMonthDays","className","ref","styles","internalViewDate","setInternalViewDate","view","setView","isRangeMode","viewDate","setViewDate","updater","weekDays","getWeekDays","calendarDays","getCalendarDays","monthNames","getMonthNames","now","currentYear","currentMonth","viewYear","decadeStart","getDecadeStart","handlePrevious","prev","goToPreviousMonth","handleNext","goToNextMonth","handleTodayClick","today","adjustedDate","adjustTimeIfPast","handleDayClick","day","isDateDisabled","newDate","handleMonthSelect","monthIndex","handleYearSelect","year","handleMonthHeaderClick","handleYearHeaderClick","jsxs","mergeClasses","SLOT_ATTR","Button","Fragment","formatMonth","createElement","index","weekLeading","rowIsAllOutOfMonth","d","isDayInCurrentMonth","weekCell","getWeekNumber","isCurrentMonth","isDisabled","isSelected","isDaySelected","isCurrentDay","isDayToday","effectiveEnd","hasRange","inRange","isDateInRange","isStart","isEnd","isSingleDay","normalized","normalizeRange","isSameDay","isEndpoint","inRangeMiddle","isPreviewRange","rangeOrSingleStyle","name","isCurrent","isPast","_","i"],"mappings":"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"}
1
+ {"version":3,"file":"calendar.js","sources":["../../../src/components/date-time-picker/calendar.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { isSameDay } from \"date-fns\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { Button } from \"../button/button\"\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 type { DateTimePickerLocale } from \"./date-time-picker-utils\"\nimport {\n getCalendarDays,\n getWeekDays,\n formatMonth,\n isDateDisabled,\n isDayInCurrentMonth,\n isDaySelected,\n isDayToday,\n goToPreviousMonth,\n goToNextMonth,\n adjustTimeIfPast,\n getMonthNames,\n getDecadeStart,\n getWeekNumber,\n getWeekLabel,\n isDateInRange,\n normalizeRange,\n} from \"./date-time-picker-utils\"\n\nconst ChevronLeftIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"16px\"\n viewBox=\"0 -960 960 960\"\n width=\"16px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"16px\"\n viewBox=\"0 -960 960 960\"\n width=\"16px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\n </svg>\n)\n\nexport type CalendarView = \"days\" | \"months\" | \"years\"\n\nexport type CalendarProps = {\n value: Date | null\n onChange: (date: Date) => void\n onDateSelect?: () => void\n disablePast?: boolean\n locale?: DateTimePickerLocale\n previousMonthLabel?: string\n nextMonthLabel?: string\n showTodayButton?: boolean\n todayLabel?: string\n currentTimeInTimezone?: Date\n showWeekNumbers?: boolean\n // Range mode props (optional - when provided, enables range highlighting)\n rangeStart?: Date | null\n rangeEnd?: Date | null\n hoveredDate?: Date | null\n onDayHover?: (day: Date | null) => void\n onDayClick?: (day: Date) => void\n showPreviousButton?: boolean\n showNextButton?: boolean\n controlledViewDate?: Date\n onViewDateChange?: (date: Date) => void\n // Replace prev/next-month overflow cells with empty placeholders — used by\n // RangeCalendar so adjacent panels don't render the same dates twice (which\n // would otherwise both pick up range styling and read as duplicates).\n hideOutOfMonthDays?: boolean\n className?: string\n}\n\nconst useStyles = makeZenithStyles({\n root: {\n ...boxModel,\n width: \"100%\",\n },\n header: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: tokens.spacingElement2,\n },\n buttonSpacer: {\n ...boxModel,\n width: \"1.75rem\",\n height: \"1.75rem\",\n },\n headerCenter: {\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement1),\n },\n headerBtn: {\n ...nativeControl,\n fontWeight: tokens.fontWeightSemibold,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n backgroundColor: tokens.grayA3,\n \":hover\": {\n backgroundColor: tokens.grayA4,\n },\n transitionProperty: \"background-color, color\",\n transitionDuration: \"150ms\",\n cursor: \"pointer\",\n ...shorthands.padding(\"0.25rem\", tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusMd),\n ...shorthands.border(\"0\"),\n outlineStyle: \"none\",\n },\n monthHeaderBtn: {\n textTransform: \"capitalize\",\n },\n decadeLabel: {\n ...boxModel,\n fontWeight: tokens.fontWeightSemibold,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n ...shorthands.padding(\"0.25rem\", tokens.spacingElement2),\n },\n grid: {\n display: \"grid\",\n justifyItems: \"center\",\n ...shorthands.gap(\"0.125rem\"),\n gridTemplateColumns: \"repeat(7, minmax(0, 1fr))\",\n },\n gridWithWeeks: {\n gridTemplateColumns: \"auto repeat(7, minmax(0, 1fr))\",\n },\n gridRange: {\n rowGap: tokens.spacingElement1,\n columnGap: \"0\",\n },\n weekLabel: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightMedium,\n color: tokens.grayA11,\n height: \"1.75rem\",\n width: \"2rem\",\n },\n weekNumber: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightMedium,\n color: tokens.grayA11,\n height: \"2rem\",\n width: \"2rem\",\n },\n cellPlaceholder: {\n ...boxModel,\n height: \"2rem\",\n width: \"2rem\",\n },\n dayBtn: {\n ...nativeControl,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n transitionProperty: \"background-color, color\",\n transitionDuration: \"150ms\",\n cursor: \"pointer\",\n height: \"2rem\",\n width: \"2rem\",\n ...shorthands.border(\"0\"),\n outlineStyle: \"none\",\n },\n dayBtnSingle: {\n ...boxModel,\n ...shorthands.borderRadius(tokens.radiusMd),\n },\n dayBtnTransparent: {\n backgroundColor: \"transparent\",\n },\n dayBtnHover: {\n \":hover\": {\n backgroundColor: tokens.grayA4,\n },\n },\n dayBtnToday: {\n color: tokens.accentA11,\n textDecorationLine: \"underline\",\n textUnderlineOffset: \"4px\",\n textDecorationThickness: \"1.5px\",\n textDecorationColor: tokens.accentA11,\n },\n dayBtnSelected: {\n fontWeight: tokens.fontWeightSemibold,\n backgroundColor: tokens.accentSolid,\n color: tokens.accentContrast,\n \":hover\": {\n backgroundColor: tokens.accentSolidHover,\n },\n },\n dayBtnOutOfMonth: {\n color: tokens.grayA8,\n },\n dayBtnInMonth: {\n color: tokens.grayA12,\n },\n dayBtnDisabled: {\n opacity: 0.5,\n cursor: \"not-allowed\",\n },\n // Range styles\n dayBtnRangeSingleDay: {\n ...boxModel,\n ...shorthands.borderRadius(tokens.radiusMd),\n backgroundColor: tokens.accentSolid,\n color: tokens.accentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.accentSolidHover,\n },\n },\n dayBtnRangeStart: {\n ...boxModel,\n borderTopLeftRadius: tokens.radiusMd,\n borderBottomLeftRadius: tokens.radiusMd,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n backgroundColor: tokens.accentSolid,\n color: tokens.accentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.accentSolidHover,\n },\n },\n dayBtnRangeEnd: {\n ...boxModel,\n borderTopRightRadius: tokens.radiusMd,\n borderBottomRightRadius: tokens.radiusMd,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n backgroundColor: tokens.accentSolid,\n color: tokens.accentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.accentSolidHover,\n },\n },\n dayBtnRangeMiddle: {\n ...boxModel,\n ...shorthands.borderRadius(0),\n backgroundColor: tokens.accent3,\n color: tokens.grayA12,\n },\n dayBtnRangeMiddlePreview: {\n ...boxModel,\n ...shorthands.borderRadius(0),\n backgroundColor: tokens.accentA3,\n color: tokens.grayA12,\n },\n todayContainer: {\n ...boxModel,\n display: \"flex\",\n justifyContent: \"center\",\n paddingTop: tokens.spacingElement2,\n },\n monthsYearsGrid: {\n ...boxModel,\n display: \"grid\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.padding(tokens.spacingElement2, 0),\n },\n monthsGridCols: {\n gridTemplateColumns: \"repeat(3, 1fr)\",\n },\n yearsGridCols: {\n gridTemplateColumns: \"repeat(2, 1fr)\",\n },\n monthYearBtn: {\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 cursor: \"pointer\",\n height: \"2.25rem\",\n ...shorthands.border(\"0\"),\n outlineStyle: \"none\",\n },\n monthBtnCapitalize: {\n textTransform: \"capitalize\",\n },\n})\n\nexport const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>(\n function Calendar(\n {\n value,\n onChange,\n onDateSelect,\n disablePast = false,\n locale = \"de\",\n previousMonthLabel = \"Previous month\",\n nextMonthLabel = \"Next month\",\n showTodayButton = false,\n todayLabel = \"Today\",\n currentTimeInTimezone,\n showWeekNumbers = false,\n rangeStart,\n rangeEnd,\n hoveredDate,\n onDayHover,\n onDayClick,\n showPreviousButton = true,\n showNextButton = true,\n controlledViewDate,\n onViewDateChange,\n hideOutOfMonthDays = false,\n className,\n },\n ref\n ) {\n const styles = useStyles()\n const [internalViewDate, setInternalViewDate] = React.useState(\n () => value || currentTimeInTimezone || new Date()\n )\n const [view, setView] = React.useState<CalendarView>(\"days\")\n\n const isRangeMode = rangeStart !== undefined\n const viewDate = controlledViewDate || internalViewDate\n const setViewDate = React.useCallback(\n (updater: Date | ((prev: Date) => Date)) => {\n if (onViewDateChange) {\n if (typeof updater === \"function\") {\n onViewDateChange(updater(viewDate))\n } else {\n onViewDateChange(updater)\n }\n } else {\n setInternalViewDate(updater)\n }\n },\n [onViewDateChange, viewDate]\n )\n\n const weekDays = getWeekDays(locale)\n const calendarDays = getCalendarDays(viewDate, locale)\n const monthNames = React.useMemo(() => getMonthNames(locale), [locale])\n\n const now = React.useMemo(\n () => currentTimeInTimezone || new Date(),\n [currentTimeInTimezone]\n )\n const currentYear = now.getFullYear()\n const currentMonth = now.getMonth()\n\n const viewYear = viewDate.getFullYear()\n const decadeStart = getDecadeStart(viewYear)\n\n // Navigation handlers\n const handlePrevious = React.useCallback(() => {\n setViewDate((prev) => {\n if (view === \"days\") return goToPreviousMonth(prev)\n if (view === \"months\")\n return new Date(prev.getFullYear() - 1, prev.getMonth(), 1)\n\n return new Date(prev.getFullYear() - 10, prev.getMonth(), 1)\n })\n }, [view, setViewDate])\n\n const handleNext = React.useCallback(() => {\n setViewDate((prev) => {\n if (view === \"days\") return goToNextMonth(prev)\n if (view === \"months\")\n return new Date(prev.getFullYear() + 1, prev.getMonth(), 1)\n\n return new Date(prev.getFullYear() + 10, prev.getMonth(), 1)\n })\n }, [view, setViewDate])\n\n const handleTodayClick = React.useCallback(() => {\n const today = new Date(now)\n\n if (value) {\n today.setHours(value.getHours(), value.getMinutes(), 0, 0)\n } else {\n today.setHours(0, 0, 0, 0)\n }\n\n const adjustedDate = adjustTimeIfPast(\n today,\n disablePast,\n currentTimeInTimezone\n )\n\n setViewDate(now)\n onChange(adjustedDate)\n onDateSelect?.()\n }, [\n onChange,\n onDateSelect,\n value,\n disablePast,\n currentTimeInTimezone,\n now,\n setViewDate,\n ])\n\n const handleDayClick = React.useCallback(\n (day: Date) => {\n if (isDateDisabled(day, disablePast, currentTimeInTimezone)) return\n\n // In range mode, delegate to parent handler\n if (onDayClick) {\n onDayClick(day)\n\n return\n }\n\n const newDate = new Date(day)\n\n if (value) {\n newDate.setHours(value.getHours(), value.getMinutes(), 0, 0)\n } else {\n newDate.setHours(0, 0, 0, 0)\n }\n\n const adjustedDate = adjustTimeIfPast(\n newDate,\n disablePast,\n currentTimeInTimezone\n )\n\n onChange(adjustedDate)\n onDateSelect?.()\n },\n [\n onChange,\n onDateSelect,\n onDayClick,\n value,\n disablePast,\n currentTimeInTimezone,\n ]\n )\n\n const handleMonthSelect = React.useCallback(\n (monthIndex: number) => {\n setViewDate((prev) => new Date(prev.getFullYear(), monthIndex, 1))\n setView(\"days\")\n },\n [setViewDate]\n )\n\n const handleYearSelect = React.useCallback(\n (year: number) => {\n setViewDate((prev) => new Date(year, prev.getMonth(), 1))\n setView(\"months\")\n },\n [setViewDate]\n )\n\n const handleMonthHeaderClick = React.useCallback(() => {\n setView(\"months\")\n }, [])\n\n const handleYearHeaderClick = React.useCallback(() => {\n setView(\"years\")\n }, [])\n\n return (\n <div\n ref={ref}\n className={mergeClasses(styles.root, className)}\n data-slot=\"calendar\"\n {...{ [SLOT_ATTR]: \"calendar\" }}\n onMouseLeave={onDayHover ? () => onDayHover(null) : undefined}\n >\n <div className={styles.header}>\n {showPreviousButton ? (\n <Button\n aria-label={previousMonthLabel}\n onClick={handlePrevious}\n size=\"icon\"\n variant=\"tertiary\"\n >\n <ChevronLeftIcon />\n </Button>\n ) : (\n <div className={styles.buttonSpacer} />\n )}\n <div className={styles.headerCenter}>\n {view === \"days\" && (\n <>\n <button\n className={mergeClasses(\n styles.headerBtn,\n styles.monthHeaderBtn\n )}\n onClick={handleMonthHeaderClick}\n type=\"button\"\n >\n {formatMonth(viewDate, locale)}\n </button>\n <button\n className={styles.headerBtn}\n onClick={handleYearHeaderClick}\n type=\"button\"\n >\n {viewYear}\n </button>\n </>\n )}\n {view === \"months\" && (\n <button\n className={styles.headerBtn}\n onClick={handleYearHeaderClick}\n type=\"button\"\n >\n {viewYear}\n </button>\n )}\n {view === \"years\" && (\n <span className={styles.decadeLabel}>\n {`${decadeStart} \\u2013 ${decadeStart + 9}`}\n </span>\n )}\n </div>\n {showNextButton ? (\n <Button\n aria-label={nextMonthLabel}\n onClick={handleNext}\n size=\"icon\"\n variant=\"tertiary\"\n >\n <ChevronRightIcon />\n </Button>\n ) : (\n <div className={styles.buttonSpacer} />\n )}\n </div>\n\n <div>\n {view === \"days\" && (\n <>\n <div\n className={mergeClasses(\n styles.grid,\n isRangeMode && styles.gridRange,\n showWeekNumbers && styles.gridWithWeeks\n )}\n data-slot=\"calendar-grid\"\n {...{ [SLOT_ATTR]: \"calendar-grid\" }}\n >\n {showWeekNumbers && (\n <div\n className={styles.weekLabel}\n data-slot=\"calendar-week-label\"\n {...{ [SLOT_ATTR]: \"calendar-week-label\" }}\n >\n {getWeekLabel(locale)}\n </div>\n )}\n {weekDays.map((day) => (\n <div\n className={styles.weekLabel}\n data-slot=\"calendar-weekday\"\n {...{ [SLOT_ATTR]: \"calendar-weekday\" }}\n key={day}\n >\n {day}\n </div>\n ))}\n\n {calendarDays.map((day, index) => {\n const weekLeading = showWeekNumbers && index % 7 === 0\n const rowIsAllOutOfMonth =\n hideOutOfMonthDays &&\n weekLeading &&\n calendarDays\n .slice(index, index + 7)\n .every((d) => !isDayInCurrentMonth(d, viewDate))\n const weekCell =\n weekLeading && !rowIsAllOutOfMonth ? (\n <div\n className={styles.weekNumber}\n data-slot=\"calendar-week-number\"\n {...{ [SLOT_ATTR]: \"calendar-week-number\" }}\n data-week={getWeekNumber(day)}\n key={`wk-${index}`}\n >\n {getWeekNumber(day)}\n </div>\n ) : weekLeading ? (\n <div\n aria-hidden=\"true\"\n className={styles.cellPlaceholder}\n data-slot=\"calendar-week-number-placeholder\"\n {...{ [SLOT_ATTR]: \"calendar-week-number-placeholder\" }}\n key={`wk-${index}`}\n />\n ) : null\n const isCurrentMonth = isDayInCurrentMonth(day, viewDate)\n\n // In range mode, skip rendering overflow days entirely so the\n // same date doesn't appear in two adjacent panels.\n if (hideOutOfMonthDays && !isCurrentMonth) {\n return (\n <React.Fragment key={index}>\n {weekCell}\n <div\n aria-hidden=\"true\"\n className={styles.cellPlaceholder}\n data-slot=\"calendar-day-placeholder\"\n {...{ [SLOT_ATTR]: \"calendar-day-placeholder\" }}\n />\n </React.Fragment>\n )\n }\n\n const isDisabled = isDateDisabled(\n day,\n disablePast,\n currentTimeInTimezone\n )\n const isSelected =\n !isRangeMode && value !== null && isDaySelected(day, value)\n const isCurrentDay = isDayToday(day)\n\n // Range mode calculations\n const effectiveEnd = rangeEnd || hoveredDate || null\n const hasRange = isRangeMode && rangeStart && effectiveEnd\n const inRange = hasRange\n ? isDateInRange(day, rangeStart!, effectiveEnd!)\n : false\n\n let isStart = false\n let isEnd = false\n let isSingleDay = false\n\n if (hasRange) {\n const normalized = normalizeRange(\n rangeStart!,\n effectiveEnd!\n )\n\n isStart = isSameDay(day, normalized.start)\n isEnd = isSameDay(day, normalized.end)\n isSingleDay = isStart && isEnd\n } else if (isRangeMode && rangeStart) {\n isStart = isSameDay(day, rangeStart)\n isSingleDay = isStart\n }\n\n const isEndpoint = isStart || isEnd\n const inRangeMiddle = inRange && !isStart && !isEnd\n const isPreviewRange =\n isRangeMode && !rangeEnd && !!hoveredDate\n\n let rangeOrSingleStyle = null\n if (!isRangeMode) {\n rangeOrSingleStyle = mergeClasses(\n styles.dayBtnSingle,\n !isSelected && !isCurrentDay && styles.dayBtnTransparent,\n !isSelected && styles.dayBtnHover,\n isCurrentDay && !isSelected && styles.dayBtnToday,\n isDisabled && styles.dayBtnDisabled,\n !isCurrentMonth &&\n !isDisabled &&\n !isSelected &&\n styles.dayBtnOutOfMonth,\n isSelected && styles.dayBtnSelected,\n isCurrentMonth &&\n !isSelected &&\n !isDisabled &&\n styles.dayBtnInMonth\n )\n } else {\n rangeOrSingleStyle = mergeClasses(\n isSingleDay && isEndpoint && styles.dayBtnRangeSingleDay,\n isStart && !isSingleDay && styles.dayBtnRangeStart,\n isEnd && !isStart && styles.dayBtnRangeEnd,\n inRangeMiddle &&\n !isPreviewRange &&\n styles.dayBtnRangeMiddle,\n inRangeMiddle &&\n isPreviewRange &&\n styles.dayBtnRangeMiddlePreview,\n !isEndpoint && !inRangeMiddle && styles.dayBtnSingle,\n !isEndpoint && !inRangeMiddle && styles.dayBtnTransparent,\n !isEndpoint && !inRangeMiddle && styles.dayBtnHover,\n isCurrentDay &&\n !isEndpoint &&\n !inRangeMiddle &&\n styles.dayBtnToday,\n isDisabled && styles.dayBtnDisabled,\n !isCurrentMonth &&\n !isDisabled &&\n !isEndpoint &&\n styles.dayBtnOutOfMonth,\n isCurrentMonth &&\n !isEndpoint &&\n !isDisabled &&\n styles.dayBtnInMonth\n )\n }\n\n return (\n <React.Fragment key={index}>\n {weekCell}\n <button\n aria-disabled={isDisabled}\n aria-pressed={isSelected || isEndpoint}\n className={mergeClasses(\n styles.dayBtn,\n rangeOrSingleStyle\n )}\n data-in-range={inRangeMiddle || undefined}\n data-selected={isSelected || isEndpoint}\n data-slot=\"calendar-day\"\n {...{ [SLOT_ATTR]: \"calendar-day\" }}\n data-today={isCurrentDay}\n disabled={isDisabled}\n onClick={() => handleDayClick(day)}\n onMouseEnter={\n onDayHover ? () => onDayHover(day) : undefined\n }\n type=\"button\"\n >\n {day.getDate()}\n </button>\n </React.Fragment>\n )\n })}\n </div>\n {showTodayButton && (\n <div\n className={styles.todayContainer}\n data-slot=\"calendar-today\"\n {...{ [SLOT_ATTR]: \"calendar-today\" }}\n >\n <Button\n onClick={handleTodayClick}\n size=\"xs\"\n variant=\"tertiary\"\n >\n {todayLabel}\n </Button>\n </div>\n )}\n </>\n )}\n\n {view === \"months\" && (\n <div\n className={mergeClasses(\n styles.monthsYearsGrid,\n styles.monthsGridCols\n )}\n data-slot=\"calendar-months\"\n {...{ [SLOT_ATTR]: \"calendar-months\" }}\n >\n {monthNames.map((name, index) => {\n const isSelected =\n value !== null &&\n viewYear === value.getFullYear() &&\n index === value.getMonth()\n const isCurrent =\n viewYear === currentYear && index === currentMonth\n const isPast =\n disablePast &&\n (viewYear < currentYear ||\n (viewYear === currentYear && index < currentMonth))\n\n return (\n <button\n className={mergeClasses(\n styles.monthYearBtn,\n styles.monthBtnCapitalize,\n !isSelected && !isCurrent && styles.dayBtnTransparent,\n !isSelected && styles.dayBtnHover,\n isCurrent && !isSelected && styles.dayBtnToday,\n isPast && styles.dayBtnDisabled,\n isSelected && styles.dayBtnSelected,\n !isSelected && !isPast && styles.dayBtnInMonth\n )}\n data-selected={isSelected}\n data-slot=\"calendar-month\"\n {...{ [SLOT_ATTR]: \"calendar-month\" }}\n disabled={isPast}\n key={index}\n onClick={() => handleMonthSelect(index)}\n type=\"button\"\n >\n {name}\n </button>\n )\n })}\n </div>\n )}\n\n {view === \"years\" && (\n <div\n className={mergeClasses(\n styles.monthsYearsGrid,\n styles.yearsGridCols\n )}\n data-slot=\"calendar-years\"\n {...{ [SLOT_ATTR]: \"calendar-years\" }}\n >\n {Array.from({ length: 10 }, (_, i) => {\n const year = decadeStart + i\n const isSelected =\n value !== null && year === value.getFullYear()\n const isCurrent = year === currentYear\n const isPast = disablePast && year < currentYear\n\n return (\n <button\n className={mergeClasses(\n styles.monthYearBtn,\n !isSelected && !isCurrent && styles.dayBtnTransparent,\n !isSelected && styles.dayBtnHover,\n isCurrent && !isSelected && styles.dayBtnToday,\n isPast && styles.dayBtnDisabled,\n isSelected && styles.dayBtnSelected,\n !isSelected && !isPast && styles.dayBtnInMonth\n )}\n data-selected={isSelected}\n data-slot=\"calendar-year\"\n {...{ [SLOT_ATTR]: \"calendar-year\" }}\n disabled={isPast}\n key={year}\n onClick={() => handleYearSelect(year)}\n type=\"button\"\n >\n {year}\n </button>\n )\n })}\n </div>\n )}\n </div>\n </div>\n )\n }\n)\n"],"names":["ChevronLeftIcon","props","jsx","ChevronRightIcon","useStyles","makeZenithStyles","boxModel","tokens.spacingElement2","shorthands","tokens.spacingElement1","nativeControl","tokens.fontWeightSemibold","tokens.textSm","tokens.leadingSm","tokens.grayA12","tokens.grayA3","tokens.grayA4","tokens.radiusMd","tokens.textXs","tokens.leadingXs","tokens.fontWeightMedium","tokens.grayA11","tokens.accentA11","tokens.accentSolid","tokens.accentContrast","tokens.accentSolidHover","tokens.grayA8","tokens.accent3","tokens.accentA3","Calendar","React","value","onChange","onDateSelect","disablePast","locale","previousMonthLabel","nextMonthLabel","showTodayButton","todayLabel","currentTimeInTimezone","showWeekNumbers","rangeStart","rangeEnd","hoveredDate","onDayHover","onDayClick","showPreviousButton","showNextButton","controlledViewDate","onViewDateChange","hideOutOfMonthDays","className","ref","styles","internalViewDate","setInternalViewDate","view","setView","isRangeMode","viewDate","setViewDate","updater","weekDays","getWeekDays","calendarDays","getCalendarDays","monthNames","getMonthNames","now","currentYear","currentMonth","viewYear","decadeStart","getDecadeStart","handlePrevious","prev","goToPreviousMonth","handleNext","goToNextMonth","handleTodayClick","today","adjustedDate","adjustTimeIfPast","handleDayClick","day","isDateDisabled","newDate","handleMonthSelect","monthIndex","handleYearSelect","year","handleMonthHeaderClick","handleYearHeaderClick","jsxs","mergeClasses","SLOT_ATTR","Button","Fragment","formatMonth","createElement","index","weekLeading","rowIsAllOutOfMonth","d","isDayInCurrentMonth","weekCell","getWeekNumber","isCurrentMonth","isDisabled","isSelected","isDaySelected","isCurrentDay","isDayToday","effectiveEnd","hasRange","inRange","isDateInRange","isStart","isEnd","isSingleDay","normalized","normalizeRange","isSameDay","isEndpoint","inRangeMiddle","isPreviewRange","rangeOrSingleStyle","name","isCurrent","isPast","_","i"],"mappings":"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"}
@@ -1,14 +1,15 @@
1
1
  import { jsx as s, jsxs as G } from "react/jsx-runtime";
2
- import * as r from "react";
3
- import { useRifm as ee } from "../../vendor/.bun/rifm@0.12.1_62547eec5a2188e3/vendor/rifm/dist/rifm.esm.js";
4
- import { mergeClasses as C, SLOT_ATTR as K } from "@epilot/zenith-runtime/v1";
2
+ import * as l from "react";
3
+ import { useRifm as ae } from "../../vendor/.bun/rifm@0.12.1_62547eec5a2188e3/vendor/rifm/dist/rifm.esm.js";
4
+ import { mergeClasses as b, SLOT_ATTR as K } from "@epilot/zenith-runtime/v1";
5
5
  import { Button as N } from "../button/button.js";
6
- import { FieldInputGroup as P, FieldInput as b, FieldGroupAddon as j } from "../field/field.js";
7
- import { PopoverTrigger as z, PopoverAnchor as te } from "../popover/popover.js";
8
- import { makeZenithStyles as ne } from "../../styles/make-styles.js";
9
- import { useDateTimePickerContext as ae } from "./date-time-picker-context.js";
10
- import { formatDateTimeDisplay as V, parseDateTimeInput as se } from "./date-time-picker-utils.js";
11
- const re = (f) => /* @__PURE__ */ s(
6
+ import { FieldInputGroup as j, FieldInput as R, FieldGroupAddon as z } from "../field/field.js";
7
+ import { PopoverTrigger as L, PopoverAnchor as se } from "../popover/popover.js";
8
+ import { makeZenithStyles as le } from "../../styles/make-styles.js";
9
+ import { boxModel as re } from "../../styles/host-reset.js";
10
+ import { useDateTimePickerContext as oe } from "./date-time-picker-context.js";
11
+ import { formatDateTimeDisplay as V, parseDateTimeInput as ie } from "./date-time-picker-utils.js";
12
+ const ce = (r) => /* @__PURE__ */ s(
12
13
  "svg",
13
14
  {
14
15
  xmlns: "http://www.w3.org/2000/svg",
@@ -16,18 +17,28 @@ const re = (f) => /* @__PURE__ */ s(
16
17
  viewBox: "0 -960 960 960",
17
18
  width: "18px",
18
19
  fill: "currentColor",
19
- ...f,
20
+ ...r,
20
21
  children: /* @__PURE__ */ s("path", { d: "M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z" })
21
22
  }
22
- ), le = /\d/g, oe = "dd.MM.yyyy", ie = "dd.MM.yyyy HH:mm", ce = (f) => {
23
- const q = f ? 12 : 8;
24
- return (o) => {
25
- const n = o.replace(/\D/g, "").slice(0, q);
23
+ ), ue = /\d/g, de = "dd.MM.yyyy", me = "dd.MM.yyyy HH:mm", pe = (r) => {
24
+ const f = r ? 12 : 8;
25
+ return (i) => {
26
+ const n = i.replace(/\D/g, "").slice(0, f);
26
27
  let t = "", e = 0;
27
- return t += (n[e++] || "_") + (n[e++] || "_"), t += ".", t += (n[e++] || "_") + (n[e++] || "_"), t += ".", t += (n[e++] || "_") + (n[e++] || "_") + (n[e++] || "_") + (n[e++] || "_"), f && (t += " ", t += (n[e++] || "_") + (n[e++] || "_"), t += ":", t += (n[e++] || "_") + (n[e++] || "_")), t;
28
+ return t += (n[e++] || "_") + (n[e++] || "_"), t += ".", t += (n[e++] || "_") + (n[e++] || "_"), t += ".", t += (n[e++] || "_") + (n[e++] || "_") + (n[e++] || "_") + (n[e++] || "_"), r && (t += " ", t += (n[e++] || "_") + (n[e++] || "_"), t += ":", t += (n[e++] || "_") + (n[e++] || "_")), t;
28
29
  };
29
- }, J = ne({
30
+ }, J = l.createContext(null), _e = ({
31
+ value: r,
32
+ children: f
33
+ }) => /* @__PURE__ */ s(J.Provider, { value: r, children: f }), Q = () => {
34
+ const r = l.useContext(J);
35
+ return r === null ? {} : {
36
+ id: r.inputId,
37
+ ...r.namedByLabel ? { "aria-labelledby": r.labelId } : {}
38
+ };
39
+ }, U = le({
30
40
  group: {
41
+ ...re,
31
42
  width: "100%"
32
43
  },
33
44
  input: {
@@ -38,191 +49,195 @@ const re = (f) => /* @__PURE__ */ s(
38
49
  flexShrink: 1,
39
50
  flexBasis: "0%"
40
51
  }
41
- }), ue = r.forwardRef(
52
+ }), fe = l.forwardRef(
42
53
  function({
43
- ctx: q,
44
- disabled: o,
54
+ ctx: f,
55
+ disabled: i,
45
56
  icon: n,
46
57
  iconPosition: t,
47
58
  inputAriaLabel: e,
48
59
  openPickerAriaLabel: x,
49
60
  testId: v,
50
- className: y
61
+ className: k
51
62
  }, _) {
52
- const u = J(), {
53
- value: h,
54
- format: l,
55
- locale: d,
56
- onChange: T,
57
- onBlur: p,
63
+ const d = U(), T = Q(), {
64
+ value: y,
65
+ format: o,
66
+ locale: m,
67
+ onChange: g,
68
+ onBlur: h,
58
69
  setTempValue: D,
59
70
  setInputValue: F
60
- } = q, M = l.includes("HH:mm"), k = r.useMemo(
61
- () => ce(M),
71
+ } = f, M = o.includes("HH:mm"), C = l.useMemo(
72
+ () => pe(M),
62
73
  [M]
63
- ), w = M ? ie : oe, I = h ? V(h, l, d) : "", [Q, S] = r.useState(""), [U, A] = r.useState(!1), Z = r.useRef(null), W = r.useCallback((a) => {
64
- if (Z.current = a, !a) return;
74
+ ), w = M ? me : de, I = y ? V(y, o, m) : "", [W, S] = l.useState(""), [X, Z] = l.useState(!1), H = l.useRef(null), Y = l.useCallback((a) => {
75
+ if (H.current = a, !a) return;
65
76
  a.focus();
66
- const m = a.value.indexOf("_");
67
- m !== -1 && a.setSelectionRange(m, m);
68
- }, []), R = r.useCallback(
77
+ const p = a.value.indexOf("_");
78
+ p !== -1 && a.setSelectionRange(p, p);
79
+ }, []), A = l.useCallback(
69
80
  (a) => {
70
81
  if (S(a), requestAnimationFrame(() => {
71
- const g = Z.current;
72
- if (!g) return;
73
- const c = g.value.indexOf("_"), E = c === -1 ? g.value.length : c;
74
- g.setSelectionRange(E, E);
82
+ const q = H.current;
83
+ if (!q) return;
84
+ const u = q.value.indexOf("_"), P = u === -1 ? q.value.length : u;
85
+ q.setSelectionRange(P, P);
75
86
  }), a.replace(/\D/g, "").length === 0) {
76
- T(null), D(null), F("");
87
+ g(null), D(null), F("");
77
88
  return;
78
89
  }
79
- const i = se(a, w, d);
80
- i && (T(i), D(i), F(V(i, l, d)));
90
+ const c = ie(a, w, m);
91
+ c && (g(c), D(c), F(V(c, o, m)));
81
92
  },
82
- [T, D, F, w, l, d]
83
- ), H = ee({
84
- accept: le,
85
- format: k,
93
+ [g, D, F, w, o, m]
94
+ ), B = ae({
95
+ accept: ue,
96
+ format: C,
86
97
  mask: !0,
87
- onChange: R,
88
- value: Q
89
- }), O = r.useCallback(() => {
90
- S(k(I)), A(!0);
91
- }, [I, k]), X = r.useCallback(() => {
92
- A(!1), p == null || p();
93
- }, [p]), Y = r.useCallback(
98
+ onChange: A,
99
+ value: W
100
+ }), O = l.useCallback(() => {
101
+ S(C(I)), Z(!0);
102
+ }, [I, C]), $ = l.useCallback(() => {
103
+ Z(!1), h == null || h();
104
+ }, [h]), ee = l.useCallback(
94
105
  (a) => {
95
- a.preventDefault(), R(k(a.clipboardData.getData("text")));
106
+ a.preventDefault(), A(C(a.clipboardData.getData("text")));
96
107
  },
97
- [R, k]
98
- ), $ = r.useCallback(
108
+ [A, C]
109
+ ), te = l.useCallback(
99
110
  (a) => {
100
111
  if (a.key !== "Backspace") return;
101
- const m = a.currentTarget, { selectionStart: i, selectionEnd: g } = m;
102
- if (i === null || i !== g) return;
103
- let c = i;
104
- for (; c > 0 && !/[\d_]/.test(m.value[c - 1]); )
105
- c--;
106
- c !== i && m.setSelectionRange(c, c);
112
+ const p = a.currentTarget, { selectionStart: c, selectionEnd: q } = p;
113
+ if (c === null || c !== q) return;
114
+ let u = c;
115
+ for (; u > 0 && !/[\d_]/.test(p.value[u - 1]); )
116
+ u--;
117
+ u !== c && p.setSelectionRange(u, u);
107
118
  },
108
119
  []
109
- ), B = /* @__PURE__ */ s(j, { align: t, children: /* @__PURE__ */ s(z, { asChild: !0, children: /* @__PURE__ */ s(
120
+ ), E = /* @__PURE__ */ s(z, { align: t, children: /* @__PURE__ */ s(L, { asChild: !0, children: /* @__PURE__ */ s(
110
121
  N,
111
122
  {
112
123
  "aria-label": x,
113
- disabled: o,
124
+ disabled: i,
114
125
  size: "icon-sm",
115
126
  variant: "tertiary",
116
127
  children: n
117
128
  }
118
- ) }) }), L = U ? /* @__PURE__ */ s(
119
- b,
129
+ ) }) }), ne = X ? /* @__PURE__ */ s(
130
+ R,
120
131
  {
121
132
  "aria-label": e,
122
- className: C(u.inputFlex, u.input),
133
+ ...T,
134
+ className: b(d.inputFlex, d.input),
123
135
  "data-testid": v,
124
- disabled: o,
125
- onBlur: X,
126
- onChange: H.onChange,
136
+ disabled: i,
137
+ onBlur: $,
138
+ onChange: B.onChange,
127
139
  onFocus: O,
128
- onKeyDown: $,
129
- onPaste: Y,
130
- ref: W,
131
- value: H.value
140
+ onKeyDown: te,
141
+ onPaste: ee,
142
+ ref: Y,
143
+ value: B.value
132
144
  }
133
145
  ) : /* @__PURE__ */ s(
134
- b,
146
+ R,
135
147
  {
136
148
  "aria-label": e,
137
- className: C(u.inputFlex, u.input),
149
+ ...T,
150
+ className: b(d.inputFlex, d.input),
138
151
  "data-testid": v,
139
- disabled: o,
152
+ disabled: i,
140
153
  onFocus: O,
141
154
  readOnly: !0,
142
155
  value: I
143
156
  }
144
157
  );
145
- return /* @__PURE__ */ s(te, { asChild: !0, children: /* @__PURE__ */ G(
146
- P,
158
+ return /* @__PURE__ */ s(se, { asChild: !0, children: /* @__PURE__ */ G(
159
+ j,
147
160
  {
148
- className: C(u.group, y),
161
+ className: b(d.group, k),
149
162
  "data-slot": "datetimepicker-input",
150
163
  [K]: "datetimepicker-input",
151
164
  ref: _,
152
165
  children: [
153
- t === "start" && B,
154
- L,
155
- t === "end" && B
166
+ t === "start" && E,
167
+ ne,
168
+ t === "end" && E
156
169
  ]
157
170
  }
158
171
  ) });
159
172
  }
160
- ), ke = r.forwardRef(function({
161
- editable: q = !1,
162
- iconPosition: o = "end",
173
+ ), De = l.forwardRef(function({
174
+ editable: f = !1,
175
+ iconPosition: i = "end",
163
176
  placeholder: n = "dd/MM/yyyy HH:mm",
164
177
  inputAriaLabel: t = "change date and time",
165
178
  openPickerAriaLabel: e = "Open date picker",
166
179
  keyboardIcon: x,
167
180
  testId: v,
168
- className: y,
181
+ className: k,
169
182
  disabled: _
170
- }, u) {
171
- const h = J(), l = ae(), d = _ ?? l.disabled, T = x || /* @__PURE__ */ s(re, {});
172
- if (q)
183
+ }, d) {
184
+ const T = U(), y = Q(), o = oe(), m = _ ?? o.disabled, g = x || /* @__PURE__ */ s(ce, {});
185
+ if (f)
173
186
  return /* @__PURE__ */ s(
174
- ue,
187
+ fe,
175
188
  {
176
- className: y,
177
- ctx: l,
178
- disabled: d,
179
- icon: T,
180
- iconPosition: o,
189
+ className: k,
190
+ ctx: o,
191
+ disabled: m,
192
+ icon: g,
193
+ iconPosition: i,
181
194
  inputAriaLabel: t,
182
195
  openPickerAriaLabel: e,
183
- ref: u,
196
+ ref: d,
184
197
  testId: v
185
198
  }
186
199
  );
187
- const p = /* @__PURE__ */ s(j, { align: o, children: /* @__PURE__ */ s(
200
+ const h = /* @__PURE__ */ s(z, { align: i, children: /* @__PURE__ */ s(
188
201
  N,
189
202
  {
190
203
  "aria-label": e,
191
- disabled: d,
192
- onClick: () => l.setIsOpen(!0),
204
+ disabled: m,
205
+ onClick: () => o.setIsOpen(!0),
193
206
  size: "icon-sm",
194
207
  variant: "tertiary",
195
- children: T
208
+ children: g
196
209
  }
197
210
  ) });
198
211
  return /* @__PURE__ */ G(
199
- P,
212
+ j,
200
213
  {
201
- className: C(h.group, y),
214
+ className: b(T.group, k),
202
215
  "data-slot": "datetimepicker-input",
203
216
  [K]: "datetimepicker-input",
204
- ref: u,
217
+ ref: d,
205
218
  children: [
206
- o === "start" && p,
207
- /* @__PURE__ */ s(z, { asChild: !0, children: /* @__PURE__ */ s(
208
- b,
219
+ i === "start" && h,
220
+ /* @__PURE__ */ s(L, { asChild: !0, children: /* @__PURE__ */ s(
221
+ R,
209
222
  {
210
223
  "aria-label": t,
211
- className: C(h.inputFlex, h.input),
224
+ ...y,
225
+ className: b(T.inputFlex, T.input),
212
226
  "data-testid": v,
213
- disabled: d,
214
- onBlur: l.handleInputBlur,
215
- onChange: l.handleInputChange,
227
+ disabled: m,
228
+ onBlur: o.handleInputBlur,
229
+ onChange: o.handleInputChange,
216
230
  placeholder: n,
217
- value: l.inputValue
231
+ value: o.inputValue
218
232
  }
219
233
  ) }),
220
- o === "end" && p
234
+ i === "end" && h
221
235
  ]
222
236
  }
223
237
  );
224
238
  });
225
239
  export {
226
- ke as DateTimePickerInput
240
+ De as DateTimePickerInput,
241
+ _e as DateTimePickerLabelProvider
227
242
  };
228
243
  //# sourceMappingURL=date-time-picker-input.js.map