@epilot/volt-ui-experimental-griffel 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ADOPTING.md +416 -0
- package/README.md +32 -31
- package/dist/_virtual/jsx-dev-runtime.js +5 -0
- package/dist/_virtual/jsx-dev-runtime.js.map +1 -0
- package/dist/_virtual/react-jsx-dev-runtime.development.js +5 -0
- package/dist/_virtual/react-jsx-dev-runtime.development.js.map +1 -0
- package/dist/_virtual/react-jsx-dev-runtime.production.js +5 -0
- package/dist/_virtual/react-jsx-dev-runtime.production.js.map +1 -0
- package/dist/components/accordion/accordion.js +126 -66
- package/dist/components/accordion/accordion.js.map +1 -1
- package/dist/components/alert-dialog/alert-dialog.js +239 -137
- package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
- package/dist/components/avatar/avatar-group.js +102 -47
- package/dist/components/avatar/avatar-group.js.map +1 -1
- package/dist/components/avatar/avatar.js +97 -73
- package/dist/components/avatar/avatar.js.map +1 -1
- package/dist/components/badge/badge.js +53 -37
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js +97 -49
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/button/button.js +88 -77
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/button-group/button-group.js +55 -31
- package/dist/components/button-group/button-group.js.map +1 -1
- package/dist/components/callout/callout.js +288 -164
- package/dist/components/callout/callout.js.map +1 -1
- package/dist/components/card/card.js +137 -81
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/checkbox/checkbox.js +100 -49
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/collapsible-sidebar/collapsible-sidebar.js +155 -107
- package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
- package/dist/components/command/command.js +297 -158
- package/dist/components/command/command.js.map +1 -1
- package/dist/components/data-table/data-table-body.js +114 -54
- package/dist/components/data-table/data-table-body.js.map +1 -1
- package/dist/components/data-table/data-table-column-header.js +117 -45
- package/dist/components/data-table/data-table-column-header.js.map +1 -1
- package/dist/components/data-table/data-table-column-visibility.js +98 -39
- package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
- package/dist/components/data-table/data-table-content.js +90 -58
- package/dist/components/data-table/data-table-content.js.map +1 -1
- package/dist/components/data-table/data-table-error.js +83 -39
- package/dist/components/data-table/data-table-error.js.map +1 -1
- package/dist/components/data-table/data-table-header.js +88 -54
- package/dist/components/data-table/data-table-header.js.map +1 -1
- package/dist/components/data-table/data-table-loading.js +27 -15
- package/dist/components/data-table/data-table-loading.js.map +1 -1
- package/dist/components/data-table/data-table-pagination.js +27 -19
- package/dist/components/data-table/data-table-pagination.js.map +1 -1
- package/dist/components/data-table/data-table-row.js +87 -64
- package/dist/components/data-table/data-table-row.js.map +1 -1
- package/dist/components/data-table/data-table-toolbar.js +24 -16
- package/dist/components/data-table/data-table-toolbar.js.map +1 -1
- package/dist/components/data-table/data-table.js +182 -145
- package/dist/components/data-table/data-table.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.js +342 -214
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/date-range-picker/range-calendar.js +132 -92
- package/dist/components/date-range-picker/range-calendar.js.map +1 -1
- package/dist/components/date-time-picker/calendar.js +501 -317
- package/dist/components/date-time-picker/calendar.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-context.js +64 -60
- package/dist/components/date-time-picker/date-time-picker-context.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-input.js +249 -149
- package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-panel.js +273 -165
- package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-popover.js +22 -14
- package/dist/components/date-time-picker/date-time-picker-popover.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker.js +134 -90
- package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
- package/dist/components/date-time-picker/time-picker.js +198 -132
- package/dist/components/date-time-picker/time-picker.js.map +1 -1
- package/dist/components/density-provider/density-provider.js +48 -0
- package/dist/components/density-provider/density-provider.js.map +1 -0
- package/dist/components/dialog/dialog.js +280 -150
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/drawer/drawer.js +273 -163
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.js +378 -195
- package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/components/field/field-combobox.js +447 -240
- package/dist/components/field/field-combobox.js.map +1 -1
- package/dist/components/field/field-select.js +23 -19
- package/dist/components/field/field-select.js.map +1 -1
- package/dist/components/field/field.js +318 -209
- package/dist/components/field/field.js.map +1 -1
- package/dist/components/label/label.js +27 -19
- package/dist/components/label/label.js.map +1 -1
- package/dist/components/list/list.js +623 -369
- package/dist/components/list/list.js.map +1 -1
- package/dist/components/option-card/option-card.js +323 -159
- package/dist/components/option-card/option-card.js.map +1 -1
- package/dist/components/pill/pill.js +82 -64
- package/dist/components/pill/pill.js.map +1 -1
- package/dist/components/popover/popover.js +101 -56
- package/dist/components/popover/popover.js.map +1 -1
- package/dist/components/radio/radio.js +94 -51
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/scroll-overflow/scroll-overflow.js +350 -198
- package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
- package/dist/components/segmented-control/segmented-control.js +141 -97
- package/dist/components/segmented-control/segmented-control.js.map +1 -1
- package/dist/components/select/select.js +452 -227
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/separator/separator.js +24 -16
- package/dist/components/separator/separator.js.map +1 -1
- package/dist/components/skeleton/skeleton.js +83 -43
- package/dist/components/skeleton/skeleton.js.map +1 -1
- package/dist/components/spinner/spinner.js +44 -20
- package/dist/components/spinner/spinner.js.map +1 -1
- package/dist/components/switch/switch.js +163 -86
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/table/table-pagination.js +465 -205
- package/dist/components/table/table-pagination.js.map +1 -1
- package/dist/components/table/table.js +212 -144
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/tabs/tabs.js +94 -58
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/text/text.js +40 -32
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/toast/toast.js +187 -111
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/toggle/toggle-group.js +40 -24
- package/dist/components/toggle/toggle-group.js.map +1 -1
- package/dist/components/toggle/toggle.js +48 -40
- package/dist/components/toggle/toggle.js.map +1 -1
- package/dist/components/tooltip/tooltip.js +101 -55
- package/dist/components/tooltip/tooltip.js.map +1 -1
- package/dist/index.d.ts +600 -427
- package/dist/index.js +215 -212
- package/dist/index.js.map +1 -1
- package/dist/lib/clear-button.js +27 -15
- package/dist/lib/clear-button.js.map +1 -1
- package/dist/lib/icons.js +18 -6
- package/dist/lib/icons.js.map +1 -1
- package/dist/packages/volt-runtime/dist/sheet.js +27 -10
- package/dist/packages/volt-runtime/dist/sheet.js.map +1 -1
- package/dist/packages/volt-runtime/dist/styles/recipe.js +76 -0
- package/dist/packages/volt-runtime/dist/styles/recipe.js.map +1 -0
- package/dist/styles/document-context.js +12 -0
- package/dist/styles/document-context.js.map +1 -0
- package/dist/styles/make-styles.js +18 -10
- package/dist/styles/make-styles.js.map +1 -1
- package/dist/tokens/core.generated.js +1238 -1166
- package/dist/tokens/core.generated.js.map +1 -1
- package/dist/tokens/index.d.ts +442 -415
- package/dist/tokens/index.js +1105 -1078
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/install.js +9 -5
- package/dist/tokens/install.js.map +1 -1
- package/dist/tokens/use-palette-tokens.js +20 -0
- package/dist/tokens/use-palette-tokens.js.map +1 -0
- package/dist/tokens.json +83 -2
- package/dist/vendor/react/cjs/react-jsx-dev-runtime.development.js +236 -0
- package/dist/vendor/react/cjs/react-jsx-dev-runtime.development.js.map +1 -0
- package/dist/vendor/react/cjs/react-jsx-dev-runtime.production.js +21 -0
- package/dist/vendor/react/cjs/react-jsx-dev-runtime.production.js.map +1 -0
- package/dist/vendor/react/jsx-dev-runtime.js +9 -0
- package/dist/vendor/react/jsx-dev-runtime.js.map +1 -0
- package/package.json +13 -5
- package/scripts/migration-diagnostics-core.mjs +859 -0
- package/scripts/migration-diagnostics.mjs +353 -0
- package/scripts/migration-sweep.mjs +179 -0
- package/AGENTS.md +0 -153
- package/AUTHORING.md +0 -292
- package/dist/packages/volt-runtime/dist/styles/make-styles.js +0 -22
- package/dist/packages/volt-runtime/dist/styles/make-styles.js.map +0 -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/volt-ui-runtime\"\n\nimport { Button } from \"../button/button\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeVoltStyles } 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 = makeVoltStyles({\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.semAccentSolid,\n color: tokens.semAccentContrast,\n \":hover\": {\n backgroundColor: tokens.semAccentSolidHover,\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.semAccentSolid,\n color: tokens.semAccentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.semAccentSolidHover,\n },\n },\n dayBtnRangeStart: {\n borderTopLeftRadius: tokens.radiusMd,\n borderBottomLeftRadius: tokens.radiusMd,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n backgroundColor: tokens.semAccentSolid,\n color: tokens.semAccentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.semAccentSolidHover,\n },\n },\n dayBtnRangeEnd: {\n borderTopRightRadius: tokens.radiusMd,\n borderBottomRightRadius: tokens.radiusMd,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n backgroundColor: tokens.semAccentSolid,\n color: tokens.semAccentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.semAccentSolidHover,\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","makeVoltStyles","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.semAccentSolid","tokens.semAccentContrast","tokens.semAccentSolidHover","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/volt-ui-runtime\"\n\nimport { Button } from \"../button/button\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeVoltStyles } 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 = makeVoltStyles({\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.semAccentSolid,\n color: tokens.semAccentContrast,\n \":hover\": {\n backgroundColor: tokens.semAccentSolidHover,\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.semAccentSolid,\n color: tokens.semAccentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.semAccentSolidHover,\n },\n },\n dayBtnRangeStart: {\n borderTopLeftRadius: tokens.radiusMd,\n borderBottomLeftRadius: tokens.radiusMd,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n backgroundColor: tokens.semAccentSolid,\n color: tokens.semAccentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.semAccentSolidHover,\n },\n },\n dayBtnRangeEnd: {\n borderTopRightRadius: tokens.radiusMd,\n borderBottomRightRadius: tokens.radiusMd,\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n backgroundColor: tokens.semAccentSolid,\n color: tokens.semAccentContrast,\n fontWeight: tokens.fontWeightSemibold,\n \":hover\": {\n backgroundColor: tokens.semAccentSolidHover,\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","jsxDEV","this","ChevronRightIcon","useStyles","makeVoltStyles","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.semAccentSolid","tokens.semAccentContrast","tokens.semAccentSolidHover","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","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,79 +1,83 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import * as
|
|
3
|
-
import { formatDateTimeDisplay as
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
if (!
|
|
1
|
+
import { j as N } from "../../vendor/react/jsx-dev-runtime.js";
|
|
2
|
+
import * as i from "react";
|
|
3
|
+
import { formatDateTimeDisplay as u, parseDateTimeInput as b } from "./date-time-picker-utils.js";
|
|
4
|
+
const O = "dd/MM/yyyy HH:mm", R = i.createContext(null), F = () => {
|
|
5
|
+
const a = i.useContext(R);
|
|
6
|
+
if (!a)
|
|
7
7
|
throw new Error(
|
|
8
8
|
"DateTimePicker compound components must be used within <DateTimePickerRoot>"
|
|
9
9
|
);
|
|
10
|
-
return
|
|
11
|
-
},
|
|
10
|
+
return a;
|
|
11
|
+
}, H = function({
|
|
12
12
|
value: e,
|
|
13
|
-
onChange:
|
|
14
|
-
onBlur:
|
|
15
|
-
format: t =
|
|
13
|
+
onChange: o,
|
|
14
|
+
onBlur: p,
|
|
15
|
+
format: t = O,
|
|
16
16
|
locale: s = "de",
|
|
17
|
-
disabled:
|
|
18
|
-
disablePast:
|
|
19
|
-
currentTimeInTimezone:
|
|
20
|
-
children:
|
|
17
|
+
disabled: V = !1,
|
|
18
|
+
disablePast: C = !1,
|
|
19
|
+
currentTimeInTimezone: P,
|
|
20
|
+
children: E
|
|
21
21
|
}) {
|
|
22
|
-
const [
|
|
23
|
-
() => e ?
|
|
24
|
-
), [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}, [e, t, s]),
|
|
28
|
-
|
|
29
|
-
}, [
|
|
30
|
-
const
|
|
31
|
-
(
|
|
32
|
-
const D =
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
22
|
+
const [f, d] = i.useState(!1), [k, n] = i.useState(
|
|
23
|
+
() => e ? u(e, t, s) : ""
|
|
24
|
+
), [x, r] = i.useState(e), m = i.useRef(e);
|
|
25
|
+
i.useEffect(() => {
|
|
26
|
+
n(e ? u(e, t, s) : ""), r(e);
|
|
27
|
+
}, [e, t, s]), i.useEffect(() => {
|
|
28
|
+
f && (m.current = e, r(e));
|
|
29
|
+
}, [f, e]);
|
|
30
|
+
const y = i.useCallback(
|
|
31
|
+
(c) => {
|
|
32
|
+
const D = c.target.value;
|
|
33
|
+
n(D);
|
|
34
|
+
const T = b(D, t, s);
|
|
35
|
+
T && o(T);
|
|
36
36
|
},
|
|
37
|
-
[
|
|
38
|
-
),
|
|
39
|
-
const
|
|
40
|
-
!
|
|
41
|
-
}, [
|
|
42
|
-
(
|
|
43
|
-
|
|
37
|
+
[o, t, s]
|
|
38
|
+
), I = i.useCallback(() => {
|
|
39
|
+
const c = b(k, t, s);
|
|
40
|
+
!c && e ? n(u(e, t, s)) : !c && !e && n(""), p == null || p();
|
|
41
|
+
}, [k, e, t, s, p]), h = i.useCallback(
|
|
42
|
+
(c) => {
|
|
43
|
+
r(c), n(u(c, t, s));
|
|
44
44
|
},
|
|
45
45
|
[t, s]
|
|
46
|
-
), w =
|
|
47
|
-
|
|
48
|
-
}, [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
),
|
|
52
|
-
}, [t, s]),
|
|
46
|
+
), w = i.useCallback(() => {
|
|
47
|
+
o(x), d(!1);
|
|
48
|
+
}, [o, x]), j = i.useCallback(() => {
|
|
49
|
+
r(m.current), n(
|
|
50
|
+
m.current ? u(m.current, t, s) : ""
|
|
51
|
+
), d(!1);
|
|
52
|
+
}, [t, s]), M = {
|
|
53
53
|
value: e,
|
|
54
|
-
tempValue:
|
|
55
|
-
inputValue:
|
|
56
|
-
isOpen:
|
|
54
|
+
tempValue: x,
|
|
55
|
+
inputValue: k,
|
|
56
|
+
isOpen: f,
|
|
57
57
|
format: t,
|
|
58
58
|
locale: s,
|
|
59
|
-
disabled:
|
|
60
|
-
disablePast:
|
|
61
|
-
currentTimeInTimezone:
|
|
62
|
-
onChange:
|
|
63
|
-
onBlur:
|
|
64
|
-
setIsOpen:
|
|
65
|
-
setTempValue:
|
|
66
|
-
setInputValue:
|
|
59
|
+
disabled: V,
|
|
60
|
+
disablePast: C,
|
|
61
|
+
currentTimeInTimezone: P,
|
|
62
|
+
onChange: o,
|
|
63
|
+
onBlur: p,
|
|
64
|
+
setIsOpen: d,
|
|
65
|
+
setTempValue: r,
|
|
66
|
+
setInputValue: n,
|
|
67
67
|
confirm: w,
|
|
68
|
-
cancel:
|
|
69
|
-
handleInputChange:
|
|
70
|
-
handleInputBlur:
|
|
68
|
+
cancel: j,
|
|
69
|
+
handleInputChange: y,
|
|
70
|
+
handleInputBlur: I,
|
|
71
71
|
handleDateChange: h
|
|
72
72
|
};
|
|
73
|
-
return /* @__PURE__ */
|
|
73
|
+
return /* @__PURE__ */ N.jsxDEV(R.Provider, { value: M, children: E }, void 0, !1, {
|
|
74
|
+
fileName: "/Users/wilianmolinari/repos/volt-ui-rollout/release/packages/experimental-griffel/src/components/date-time-picker/date-time-picker-context.tsx",
|
|
75
|
+
lineNumber: 172,
|
|
76
|
+
columnNumber: 5
|
|
77
|
+
}, this);
|
|
74
78
|
};
|
|
75
79
|
export {
|
|
76
|
-
|
|
77
|
-
|
|
80
|
+
H as DateTimePickerRoot,
|
|
81
|
+
F as useDateTimePickerContext
|
|
78
82
|
};
|
|
79
83
|
//# sourceMappingURL=date-time-picker-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-time-picker-context.js","sources":["../../../src/components/date-time-picker/date-time-picker-context.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport type { DateTimePickerLocale } from \"./date-time-picker-utils\"\nimport {\n formatDateTimeDisplay,\n parseDateTimeInput,\n} from \"./date-time-picker-utils\"\n\nconst DEFAULT_FORMAT = \"dd/MM/yyyy HH:mm\"\n\nexport type DateTimePickerContextValue = {\n // State\n value: Date | null\n tempValue: Date | null\n inputValue: string\n isOpen: boolean\n\n // Config\n format: string\n locale: DateTimePickerLocale\n disabled: boolean\n disablePast: boolean\n currentTimeInTimezone?: Date\n\n // Raw callbacks (for advanced/editable input usage)\n onChange: (date: Date | null) => void\n onBlur?: () => void\n\n // Actions\n setIsOpen: (open: boolean) => void\n setTempValue: (date: Date | null) => void\n setInputValue: (value: string) => void\n confirm: () => void\n cancel: () => void\n handleInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void\n handleInputBlur: () => void\n handleDateChange: (date: Date) => void\n}\n\nconst DateTimePickerContext =\n React.createContext<DateTimePickerContextValue | null>(null)\n\nexport const useDateTimePickerContext = () => {\n const context = React.useContext(DateTimePickerContext)\n\n if (!context) {\n throw new Error(\n \"DateTimePicker compound components must be used within <DateTimePickerRoot>\"\n )\n }\n\n return context\n}\n\nexport type DateTimePickerRootProps = {\n value: Date | null\n onChange: (date: Date | null) => void\n onBlur?: () => void\n format?: string\n locale?: DateTimePickerLocale\n disabled?: boolean\n disablePast?: boolean\n currentTimeInTimezone?: Date\n children: React.ReactNode\n}\n\n/**\n * @no-host-element Context provider only, renders no DOM element.\n */\nexport const DateTimePickerRoot = function DateTimePickerRoot({\n value,\n onChange,\n onBlur,\n format: formatStr = DEFAULT_FORMAT,\n locale = \"de\",\n disabled = false,\n disablePast = false,\n currentTimeInTimezone,\n children,\n}: DateTimePickerRootProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const [inputValue, setInputValue] = React.useState(() =>\n value ? formatDateTimeDisplay(value, formatStr, locale) : \"\"\n )\n const [tempValue, setTempValue] = React.useState<Date | null>(value)\n const originalValueRef = React.useRef<Date | null>(value)\n\n React.useEffect(() => {\n setInputValue(value ? formatDateTimeDisplay(value, formatStr, locale) : \"\")\n setTempValue(value)\n }, [value, formatStr, locale])\n\n React.useEffect(() => {\n if (isOpen) {\n originalValueRef.current = value\n setTempValue(value)\n }\n }, [isOpen, value])\n\n const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n\n setInputValue(newValue)\n\n const parsed = parseDateTimeInput(newValue, formatStr, locale)\n\n if (parsed) {\n onChange(parsed)\n }\n },\n [onChange, formatStr, locale]\n )\n\n const handleInputBlur = React.useCallback(() => {\n const parsed = parseDateTimeInput(inputValue, formatStr, locale)\n\n if (!parsed && value) {\n setInputValue(formatDateTimeDisplay(value, formatStr, locale))\n } else if (!parsed && !value) {\n setInputValue(\"\")\n }\n onBlur?.()\n }, [inputValue, value, formatStr, locale, onBlur])\n\n const handleDateChange = React.useCallback(\n (newDate: Date) => {\n setTempValue(newDate)\n setInputValue(formatDateTimeDisplay(newDate, formatStr, locale))\n },\n [formatStr, locale]\n )\n\n const confirm = React.useCallback(() => {\n onChange(tempValue)\n setIsOpen(false)\n }, [onChange, tempValue])\n\n const cancel = React.useCallback(() => {\n setTempValue(originalValueRef.current)\n setInputValue(\n originalValueRef.current\n ? formatDateTimeDisplay(originalValueRef.current, formatStr, locale)\n : \"\"\n )\n setIsOpen(false)\n }, [formatStr, locale])\n\n const contextValue: DateTimePickerContextValue = {\n value,\n tempValue,\n inputValue,\n isOpen,\n format: formatStr,\n locale,\n disabled,\n disablePast,\n currentTimeInTimezone,\n onChange,\n onBlur,\n setIsOpen,\n setTempValue,\n setInputValue,\n confirm,\n cancel,\n handleInputChange,\n handleInputBlur,\n handleDateChange,\n }\n\n return (\n <DateTimePickerContext.Provider value={contextValue}>\n {children}\n </DateTimePickerContext.Provider>\n )\n}\n"],"names":["DEFAULT_FORMAT","DateTimePickerContext","React","useDateTimePickerContext","context","DateTimePickerRoot","value","onChange","onBlur","formatStr","locale","disabled","disablePast","currentTimeInTimezone","children","isOpen","setIsOpen","inputValue","setInputValue","formatDateTimeDisplay","tempValue","setTempValue","originalValueRef","handleInputChange","e","newValue","parsed","parseDateTimeInput","handleInputBlur","handleDateChange","newDate","confirm","cancel","contextValue"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"date-time-picker-context.js","sources":["../../../src/components/date-time-picker/date-time-picker-context.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport type { DateTimePickerLocale } from \"./date-time-picker-utils\"\nimport {\n formatDateTimeDisplay,\n parseDateTimeInput,\n} from \"./date-time-picker-utils\"\n\nconst DEFAULT_FORMAT = \"dd/MM/yyyy HH:mm\"\n\nexport type DateTimePickerContextValue = {\n // State\n value: Date | null\n tempValue: Date | null\n inputValue: string\n isOpen: boolean\n\n // Config\n format: string\n locale: DateTimePickerLocale\n disabled: boolean\n disablePast: boolean\n currentTimeInTimezone?: Date\n\n // Raw callbacks (for advanced/editable input usage)\n onChange: (date: Date | null) => void\n onBlur?: () => void\n\n // Actions\n setIsOpen: (open: boolean) => void\n setTempValue: (date: Date | null) => void\n setInputValue: (value: string) => void\n confirm: () => void\n cancel: () => void\n handleInputChange: (e: React.ChangeEvent<HTMLInputElement>) => void\n handleInputBlur: () => void\n handleDateChange: (date: Date) => void\n}\n\nconst DateTimePickerContext =\n React.createContext<DateTimePickerContextValue | null>(null)\n\nexport const useDateTimePickerContext = () => {\n const context = React.useContext(DateTimePickerContext)\n\n if (!context) {\n throw new Error(\n \"DateTimePicker compound components must be used within <DateTimePickerRoot>\"\n )\n }\n\n return context\n}\n\nexport type DateTimePickerRootProps = {\n value: Date | null\n onChange: (date: Date | null) => void\n onBlur?: () => void\n format?: string\n locale?: DateTimePickerLocale\n disabled?: boolean\n disablePast?: boolean\n currentTimeInTimezone?: Date\n children: React.ReactNode\n}\n\n/**\n * @no-host-element Context provider only, renders no DOM element.\n */\nexport const DateTimePickerRoot = function DateTimePickerRoot({\n value,\n onChange,\n onBlur,\n format: formatStr = DEFAULT_FORMAT,\n locale = \"de\",\n disabled = false,\n disablePast = false,\n currentTimeInTimezone,\n children,\n}: DateTimePickerRootProps) {\n const [isOpen, setIsOpen] = React.useState(false)\n const [inputValue, setInputValue] = React.useState(() =>\n value ? formatDateTimeDisplay(value, formatStr, locale) : \"\"\n )\n const [tempValue, setTempValue] = React.useState<Date | null>(value)\n const originalValueRef = React.useRef<Date | null>(value)\n\n React.useEffect(() => {\n setInputValue(value ? formatDateTimeDisplay(value, formatStr, locale) : \"\")\n setTempValue(value)\n }, [value, formatStr, locale])\n\n React.useEffect(() => {\n if (isOpen) {\n originalValueRef.current = value\n setTempValue(value)\n }\n }, [isOpen, value])\n\n const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n\n setInputValue(newValue)\n\n const parsed = parseDateTimeInput(newValue, formatStr, locale)\n\n if (parsed) {\n onChange(parsed)\n }\n },\n [onChange, formatStr, locale]\n )\n\n const handleInputBlur = React.useCallback(() => {\n const parsed = parseDateTimeInput(inputValue, formatStr, locale)\n\n if (!parsed && value) {\n setInputValue(formatDateTimeDisplay(value, formatStr, locale))\n } else if (!parsed && !value) {\n setInputValue(\"\")\n }\n onBlur?.()\n }, [inputValue, value, formatStr, locale, onBlur])\n\n const handleDateChange = React.useCallback(\n (newDate: Date) => {\n setTempValue(newDate)\n setInputValue(formatDateTimeDisplay(newDate, formatStr, locale))\n },\n [formatStr, locale]\n )\n\n const confirm = React.useCallback(() => {\n onChange(tempValue)\n setIsOpen(false)\n }, [onChange, tempValue])\n\n const cancel = React.useCallback(() => {\n setTempValue(originalValueRef.current)\n setInputValue(\n originalValueRef.current\n ? formatDateTimeDisplay(originalValueRef.current, formatStr, locale)\n : \"\"\n )\n setIsOpen(false)\n }, [formatStr, locale])\n\n const contextValue: DateTimePickerContextValue = {\n value,\n tempValue,\n inputValue,\n isOpen,\n format: formatStr,\n locale,\n disabled,\n disablePast,\n currentTimeInTimezone,\n onChange,\n onBlur,\n setIsOpen,\n setTempValue,\n setInputValue,\n confirm,\n cancel,\n handleInputChange,\n handleInputBlur,\n handleDateChange,\n }\n\n return (\n <DateTimePickerContext.Provider value={contextValue}>\n {children}\n </DateTimePickerContext.Provider>\n )\n}\n"],"names":["DEFAULT_FORMAT","DateTimePickerContext","React","useDateTimePickerContext","context","DateTimePickerRoot","value","onChange","onBlur","formatStr","locale","disabled","disablePast","currentTimeInTimezone","children","isOpen","setIsOpen","inputValue","setInputValue","formatDateTimeDisplay","tempValue","setTempValue","originalValueRef","handleInputChange","e","newValue","parsed","parseDateTimeInput","handleInputBlur","handleDateChange","newDate","confirm","cancel","contextValue"],"mappings":"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"}
|