sherick-ui 2.9.0 → 2.10.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.
- package/README.md +32 -0
- package/dist/cjs/components/Accordion.cjs +14 -26
- package/dist/cjs/components/Accordion.cjs.map +1 -1
- package/dist/cjs/components/Alert.cjs +60 -19
- package/dist/cjs/components/Alert.cjs.map +1 -1
- package/dist/cjs/components/AlertDialog.cjs +5 -3
- package/dist/cjs/components/AlertDialog.cjs.map +1 -1
- package/dist/cjs/components/Avatar.cjs +12 -3
- package/dist/cjs/components/Avatar.cjs.map +1 -1
- package/dist/cjs/components/Badge.cjs +5 -3
- package/dist/cjs/components/Badge.cjs.map +1 -1
- package/dist/cjs/components/Breadcrumb.cjs +8 -4
- package/dist/cjs/components/Breadcrumb.cjs.map +1 -1
- package/dist/cjs/components/Button.cjs +11 -4
- package/dist/cjs/components/Button.cjs.map +1 -1
- package/dist/cjs/components/Calendar.cjs +39 -4
- package/dist/cjs/components/Calendar.cjs.map +1 -1
- package/dist/cjs/components/Card.cjs +10 -6
- package/dist/cjs/components/Card.cjs.map +1 -1
- package/dist/cjs/components/Checkbox.cjs +15 -3
- package/dist/cjs/components/Checkbox.cjs.map +1 -1
- package/dist/cjs/components/CheckboxGroup.cjs +3 -2
- package/dist/cjs/components/CheckboxGroup.cjs.map +1 -1
- package/dist/cjs/components/Chip.cjs +53 -43
- package/dist/cjs/components/Chip.cjs.map +1 -1
- package/dist/cjs/components/ChipGroup.cjs +17 -0
- package/dist/cjs/components/ChipGroup.cjs.map +1 -1
- package/dist/cjs/components/Collapsible.cjs +1 -1
- package/dist/cjs/components/Collapsible.cjs.map +1 -1
- package/dist/cjs/components/Combobox.cjs +58 -14
- package/dist/cjs/components/Combobox.cjs.map +1 -1
- package/dist/cjs/components/Command.cjs +10 -4
- package/dist/cjs/components/Command.cjs.map +1 -1
- package/dist/cjs/components/CommandPalette.cjs +5 -2
- package/dist/cjs/components/CommandPalette.cjs.map +1 -1
- package/dist/cjs/components/DatePicker.cjs +6 -3
- package/dist/cjs/components/DatePicker.cjs.map +1 -1
- package/dist/cjs/components/DateRangePicker.cjs +3 -2
- package/dist/cjs/components/DateRangePicker.cjs.map +1 -1
- package/dist/cjs/components/DateTimePicker.cjs +1 -1
- package/dist/cjs/components/DateTimePicker.cjs.map +1 -1
- package/dist/cjs/components/Dialog.cjs +10 -3
- package/dist/cjs/components/Dialog.cjs.map +1 -1
- package/dist/cjs/components/DialogContent.cjs +5 -3
- package/dist/cjs/components/DialogContent.cjs.map +1 -1
- package/dist/cjs/components/DialogDescription.cjs +5 -3
- package/dist/cjs/components/DialogDescription.cjs.map +1 -1
- package/dist/cjs/components/DialogFooter.cjs +3 -3
- package/dist/cjs/components/DialogFooter.cjs.map +1 -1
- package/dist/cjs/components/DialogHeader.cjs +5 -3
- package/dist/cjs/components/DialogHeader.cjs.map +1 -1
- package/dist/cjs/components/DialogSurface.cjs +37 -15
- package/dist/cjs/components/DialogSurface.cjs.map +1 -1
- package/dist/cjs/components/DismissButton.cjs +24 -0
- package/dist/cjs/components/DismissButton.cjs.map +1 -0
- package/dist/cjs/components/Divider.cjs +3 -1
- package/dist/cjs/components/Divider.cjs.map +1 -1
- package/dist/cjs/components/Drawer.cjs +24 -14
- package/dist/cjs/components/Drawer.cjs.map +1 -1
- package/dist/cjs/components/Field.cjs +47 -2
- package/dist/cjs/components/Field.cjs.map +1 -1
- package/dist/cjs/components/FieldLabel.cjs +20 -0
- package/dist/cjs/components/FieldLabel.cjs.map +1 -0
- package/dist/cjs/components/FileUpload.cjs +19 -9
- package/dist/cjs/components/FileUpload.cjs.map +1 -1
- package/dist/cjs/components/IconButton.cjs +28 -7
- package/dist/cjs/components/IconButton.cjs.map +1 -1
- package/dist/cjs/components/Input.cjs +14 -5
- package/dist/cjs/components/Input.cjs.map +1 -1
- package/dist/cjs/components/Menu.cjs +18 -4
- package/dist/cjs/components/Menu.cjs.map +1 -1
- package/dist/cjs/components/NavGroup.cjs +7 -1
- package/dist/cjs/components/NavGroup.cjs.map +1 -1
- package/dist/cjs/components/NavItem.cjs +28 -3
- package/dist/cjs/components/NavItem.cjs.map +1 -1
- package/dist/cjs/components/NumberField.cjs +7 -6
- package/dist/cjs/components/NumberField.cjs.map +1 -1
- package/dist/cjs/components/Pagination.cjs +42 -8
- package/dist/cjs/components/Pagination.cjs.map +1 -1
- package/dist/cjs/components/Popover.cjs +13 -5
- package/dist/cjs/components/Popover.cjs.map +1 -1
- package/dist/cjs/components/Progress.cjs +5 -3
- package/dist/cjs/components/Progress.cjs.map +1 -1
- package/dist/cjs/components/RadioGroup.cjs +3 -2
- package/dist/cjs/components/RadioGroup.cjs.map +1 -1
- package/dist/cjs/components/Search.cjs +35 -14
- package/dist/cjs/components/Search.cjs.map +1 -1
- package/dist/cjs/components/SegmentedControl.cjs +2 -1
- package/dist/cjs/components/SegmentedControl.cjs.map +1 -1
- package/dist/cjs/components/Select.cjs +14 -4
- package/dist/cjs/components/Select.cjs.map +1 -1
- package/dist/cjs/components/Skeleton.cjs +5 -3
- package/dist/cjs/components/Skeleton.cjs.map +1 -1
- package/dist/cjs/components/Slider.cjs +1 -1
- package/dist/cjs/components/Slider.cjs.map +1 -1
- package/dist/cjs/components/Spinner.cjs +24 -14
- package/dist/cjs/components/Spinner.cjs.map +1 -1
- package/dist/cjs/components/StatusMark.cjs +43 -0
- package/dist/cjs/components/StatusMark.cjs.map +1 -0
- package/dist/cjs/components/Stepper.cjs +3 -3
- package/dist/cjs/components/Stepper.cjs.map +1 -1
- package/dist/cjs/components/Switch.cjs +20 -1
- package/dist/cjs/components/Switch.cjs.map +1 -1
- package/dist/cjs/components/Table.cjs +15 -7
- package/dist/cjs/components/Table.cjs.map +1 -1
- package/dist/cjs/components/Tabs.cjs +10 -3
- package/dist/cjs/components/Tabs.cjs.map +1 -1
- package/dist/cjs/components/Textarea.cjs +8 -4
- package/dist/cjs/components/Textarea.cjs.map +1 -1
- package/dist/cjs/components/Toast.cjs +47 -34
- package/dist/cjs/components/Toast.cjs.map +1 -1
- package/dist/cjs/components/ToggleGroup.cjs +14 -3
- package/dist/cjs/components/ToggleGroup.cjs.map +1 -1
- package/dist/cjs/components/Tooltip.cjs +16 -2
- package/dist/cjs/components/Tooltip.cjs.map +1 -1
- package/dist/cjs/components/TreeView.cjs +8 -4
- package/dist/cjs/components/TreeView.cjs.map +1 -1
- package/dist/cjs/components/choice-row.cjs +1 -1
- package/dist/cjs/components/choice-row.cjs.map +1 -1
- package/dist/cjs/components/date-family.cjs +16 -2
- package/dist/cjs/components/date-family.cjs.map +1 -1
- package/dist/cjs/components/date-field.cjs +4 -2
- package/dist/cjs/components/date-field.cjs.map +1 -1
- package/dist/cjs/components/edge-fade.cjs +80 -0
- package/dist/cjs/components/edge-fade.cjs.map +1 -0
- package/dist/cjs/components/scroll-region.cjs +56 -0
- package/dist/cjs/components/scroll-region.cjs.map +1 -0
- package/dist/cjs/components/time-panel.cjs +1 -1
- package/dist/cjs/components/time-panel.cjs.map +1 -1
- package/dist/cjs/components/ui.common.cjs +115 -58
- package/dist/cjs/components/ui.common.cjs.map +1 -1
- package/dist/cjs/components/ui.motion.cjs +41 -15
- package/dist/cjs/components/ui.motion.cjs.map +1 -1
- package/dist/cjs/dev.cjs +5 -0
- package/dist/cjs/dev.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/components/Accordion.js +16 -28
- package/dist/esm/components/Accordion.js.map +1 -1
- package/dist/esm/components/Alert.js +62 -22
- package/dist/esm/components/Alert.js.map +1 -1
- package/dist/esm/components/AlertDialog.js +6 -4
- package/dist/esm/components/AlertDialog.js.map +1 -1
- package/dist/esm/components/Avatar.js +14 -5
- package/dist/esm/components/Avatar.js.map +1 -1
- package/dist/esm/components/Badge.js +5 -3
- package/dist/esm/components/Badge.js.map +1 -1
- package/dist/esm/components/Breadcrumb.js +9 -5
- package/dist/esm/components/Breadcrumb.js.map +1 -1
- package/dist/esm/components/Button.js +11 -4
- package/dist/esm/components/Button.js.map +1 -1
- package/dist/esm/components/Calendar.js +42 -7
- package/dist/esm/components/Calendar.js.map +1 -1
- package/dist/esm/components/Card.js +12 -8
- package/dist/esm/components/Card.js.map +1 -1
- package/dist/esm/components/Checkbox.js +16 -4
- package/dist/esm/components/Checkbox.js.map +1 -1
- package/dist/esm/components/CheckboxGroup.js +3 -2
- package/dist/esm/components/CheckboxGroup.js.map +1 -1
- package/dist/esm/components/Chip.js +56 -46
- package/dist/esm/components/Chip.js.map +1 -1
- package/dist/esm/components/ChipGroup.js +18 -1
- package/dist/esm/components/ChipGroup.js.map +1 -1
- package/dist/esm/components/CodeBlock.js +58 -28
- package/dist/esm/components/CodeBlock.js.map +1 -1
- package/dist/esm/components/Collapsible.js +1 -1
- package/dist/esm/components/Collapsible.js.map +1 -1
- package/dist/esm/components/Combobox.js +62 -18
- package/dist/esm/components/Combobox.js.map +1 -1
- package/dist/esm/components/Command.js +11 -5
- package/dist/esm/components/Command.js.map +1 -1
- package/dist/esm/components/CommandPalette.js +7 -4
- package/dist/esm/components/CommandPalette.js.map +1 -1
- package/dist/esm/components/DatePicker.js +7 -4
- package/dist/esm/components/DatePicker.js.map +1 -1
- package/dist/esm/components/DateRangePicker.js +4 -3
- package/dist/esm/components/DateRangePicker.js.map +1 -1
- package/dist/esm/components/DateTimePicker.js +1 -1
- package/dist/esm/components/DateTimePicker.js.map +1 -1
- package/dist/esm/components/Dialog.js +12 -6
- package/dist/esm/components/Dialog.js.map +1 -1
- package/dist/esm/components/DialogContent.js +6 -4
- package/dist/esm/components/DialogContent.js.map +1 -1
- package/dist/esm/components/DialogDescription.js +6 -4
- package/dist/esm/components/DialogDescription.js.map +1 -1
- package/dist/esm/components/DialogFooter.js +3 -3
- package/dist/esm/components/DialogFooter.js.map +1 -1
- package/dist/esm/components/DialogHeader.js +5 -3
- package/dist/esm/components/DialogHeader.js.map +1 -1
- package/dist/esm/components/DialogSurface.js +38 -17
- package/dist/esm/components/DialogSurface.js.map +1 -1
- package/dist/esm/components/DismissButton.js +20 -0
- package/dist/esm/components/DismissButton.js.map +1 -0
- package/dist/esm/components/Divider.js +3 -1
- package/dist/esm/components/Divider.js.map +1 -1
- package/dist/esm/components/Drawer.js +27 -17
- package/dist/esm/components/Drawer.js.map +1 -1
- package/dist/esm/components/Field.js +49 -6
- package/dist/esm/components/Field.js.map +1 -1
- package/dist/esm/components/FieldLabel.js +15 -0
- package/dist/esm/components/FieldLabel.js.map +1 -0
- package/dist/esm/components/FileUpload.js +23 -13
- package/dist/esm/components/FileUpload.js.map +1 -1
- package/dist/esm/components/IconButton.js +30 -9
- package/dist/esm/components/IconButton.js.map +1 -1
- package/dist/esm/components/Input.js +15 -6
- package/dist/esm/components/Input.js.map +1 -1
- package/dist/esm/components/Markdown.js +7 -4
- package/dist/esm/components/Markdown.js.map +1 -1
- package/dist/esm/components/Menu.js +20 -6
- package/dist/esm/components/Menu.js.map +1 -1
- package/dist/esm/components/NavGroup.js +8 -2
- package/dist/esm/components/NavGroup.js.map +1 -1
- package/dist/esm/components/NavItem.js +30 -6
- package/dist/esm/components/NavItem.js.map +1 -1
- package/dist/esm/components/NumberField.js +8 -7
- package/dist/esm/components/NumberField.js.map +1 -1
- package/dist/esm/components/Pagination.js +43 -9
- package/dist/esm/components/Pagination.js.map +1 -1
- package/dist/esm/components/Popover.js +14 -6
- package/dist/esm/components/Popover.js.map +1 -1
- package/dist/esm/components/Progress.js +5 -3
- package/dist/esm/components/Progress.js.map +1 -1
- package/dist/esm/components/RadioGroup.js +3 -2
- package/dist/esm/components/RadioGroup.js.map +1 -1
- package/dist/esm/components/Search.js +36 -15
- package/dist/esm/components/Search.js.map +1 -1
- package/dist/esm/components/SegmentedControl.js +2 -1
- package/dist/esm/components/SegmentedControl.js.map +1 -1
- package/dist/esm/components/Select.js +16 -6
- package/dist/esm/components/Select.js.map +1 -1
- package/dist/esm/components/Skeleton.js +5 -3
- package/dist/esm/components/Skeleton.js.map +1 -1
- package/dist/esm/components/Slider.js +2 -2
- package/dist/esm/components/Slider.js.map +1 -1
- package/dist/esm/components/Spinner.js +24 -14
- package/dist/esm/components/Spinner.js.map +1 -1
- package/dist/esm/components/StatusMark.js +38 -0
- package/dist/esm/components/StatusMark.js.map +1 -0
- package/dist/esm/components/Stepper.js +4 -4
- package/dist/esm/components/Stepper.js.map +1 -1
- package/dist/esm/components/Switch.js +21 -2
- package/dist/esm/components/Switch.js.map +1 -1
- package/dist/esm/components/Table.js +16 -8
- package/dist/esm/components/Table.js.map +1 -1
- package/dist/esm/components/Tabs.js +11 -4
- package/dist/esm/components/Tabs.js.map +1 -1
- package/dist/esm/components/Textarea.js +8 -4
- package/dist/esm/components/Textarea.js.map +1 -1
- package/dist/esm/components/Toast.js +49 -36
- package/dist/esm/components/Toast.js.map +1 -1
- package/dist/esm/components/ToggleGroup.js +16 -5
- package/dist/esm/components/ToggleGroup.js.map +1 -1
- package/dist/esm/components/Tooltip.js +17 -4
- package/dist/esm/components/Tooltip.js.map +1 -1
- package/dist/esm/components/TreeView.js +9 -5
- package/dist/esm/components/TreeView.js.map +1 -1
- package/dist/esm/components/choice-row.js +1 -1
- package/dist/esm/components/choice-row.js.map +1 -1
- package/dist/esm/components/date-family.js +15 -3
- package/dist/esm/components/date-family.js.map +1 -1
- package/dist/esm/components/date-field.js +5 -3
- package/dist/esm/components/date-field.js.map +1 -1
- package/dist/esm/components/edge-fade.js +77 -0
- package/dist/esm/components/edge-fade.js.map +1 -0
- package/dist/esm/components/scroll-region.js +52 -0
- package/dist/esm/components/scroll-region.js.map +1 -0
- package/dist/esm/components/time-panel.js +1 -1
- package/dist/esm/components/time-panel.js.map +1 -1
- package/dist/esm/components/ui.common.js +115 -60
- package/dist/esm/components/ui.common.js.map +1 -1
- package/dist/esm/components/ui.motion.js +39 -16
- package/dist/esm/components/ui.motion.js.map +1 -1
- package/dist/esm/content.js +1 -1
- package/dist/esm/dev.js +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/styles.css +326 -200
- package/dist/theme.css +15 -12
- package/dist/types/content.d.ts +13 -3
- package/dist/types/dev.d.cts +65 -30
- package/dist/types/dev.d.ts +65 -30
- package/dist/types/index.d.cts +502 -166
- package/dist/types/index.d.ts +502 -166
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-family.cjs","sources":["../../../src/components/date-family.ts"],"sourcesContent":["/* The date family's own calendar arithmetic, labels and Intl formatting.\n ====================================================================\n `Calendar`, `DatePicker`, `DateRangePicker` and `DateTimePicker` share one definition of what a\n date *is*, so a calendar grid, a native `type=date` input and a range span all agree.\n\n A `CalendarDate` is a zero-padded Gregorian civil date (`YYYY-MM-DD`, years `0001`–`9999`) and\n carries no time. Every arithmetic step below reads and writes calendar fields directly, through\n the pure helpers in this module, rather than going through a timestamp: a local-midnight\n `Date` would shift a day under a daylight-saving transition, and `Date.UTC` silently maps a\n year below 100 onto `1900 + year`. The only `Date` objects here are the ones `Intl` needs to\n *format* a value, and they are built through `setUTCFullYear` so year `0001` survives.\n\n This module is private to the date family. The public date types are re-exported from\n `Calendar.tsx`, which is the family's public entry. */\n\nexport type CalendarDate = string;\n\nexport interface DateRange {\n start: CalendarDate | null;\n end: CalendarDate | null;\n}\n\n/** A parsed civil date. `month` is 0-based, as every `Intl` and `Date` API expects. */\nexport interface DateParts {\n year: number;\n month: number;\n day: number;\n}\n\n/** Inclusive year bounds of the value format: `0001-01-01` through `9999-12-31`. */\nexport const MIN_CALENDAR_YEAR = 1;\nexport const MAX_CALENDAR_YEAR = 9999;\n\nconst DAYS_PER_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DATE_PATTERN = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nconst pad = (value: number, length: number) => String(value).padStart(length, \"0\");\n\nexport const isLeapYear = (year: number) =>\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n\nexport const daysInMonth = (year: number, month: number) =>\n month === 1 && isLeapYear(year) ? 29 : DAYS_PER_MONTH[month];\n\n/**\n * The only way a value becomes a date. A value that is not zero-padded, not a real civil date\n * (including a day that does not exist in its month) or outside the year bounds is not a date at\n * all, so callers never have to reason about a half-valid value.\n */\nexport const parseCalendarDate = (value: CalendarDate | null | undefined): DateParts | null => {\n if (typeof value !== \"string\") return null;\n\n const match = DATE_PATTERN.exec(value);\n if (!match) return null;\n\n const year = Number(match[1]);\n const month = Number(match[2]) - 1;\n const day = Number(match[3]);\n\n if (year < MIN_CALENDAR_YEAR || year > MAX_CALENDAR_YEAR) return null;\n if (month < 0 || month > 11) return null;\n if (day < 1 || day > daysInMonth(year, month)) return null;\n\n return { year, month, day };\n};\n\nexport const isValidCalendarDate = (value: CalendarDate | null | undefined) =>\n parseCalendarDate(value) !== null;\n\nexport const toCalendarDate = ({ year, month, day }: DateParts): CalendarDate =>\n `${pad(year, 4)}-${pad(month + 1, 2)}-${pad(day, 2)}`;\n\n/** A calendar date, or `null` when the input is not one. */\nexport const normalizeCalendarDate = (value: CalendarDate | null | undefined): CalendarDate | null => {\n const parts = parseCalendarDate(value);\n return parts ? toCalendarDate(parts) : null;\n};\n\nexport const normalizeDateRange = (range: DateRange | null | undefined): DateRange => ({\n start: normalizeCalendarDate(range?.start),\n end: normalizeCalendarDate(range?.end),\n});\n\nexport const emptyDateRange = (): DateRange => ({ start: null, end: null });\n\n/* Zero-padded dates order lexicographically exactly as they order in time, so comparison needs no\n parsing. */\nexport const compareCalendarDates = (left: CalendarDate, right: CalendarDate) =>\n left === right ? 0 : left < right ? -1 : 1;\n\n/** Day of week, `0` for Sunday. Sakamoto's algorithm: pure integer arithmetic, so it is exact for\n * the whole year range rather than only for the years a `Date` round-trip happens to preserve. */\nexport const dayOfWeek = ({ year, month, day }: DateParts): number => {\n const offsets = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4];\n const adjustedYear = month < 2 ? year - 1 : year;\n\n return (\n (adjustedYear +\n Math.floor(adjustedYear / 4) -\n Math.floor(adjustedYear / 100) +\n Math.floor(adjustedYear / 400) +\n offsets[month] +\n day) %\n 7\n );\n};\n\nexport const addCalendarDays = ({ year, month, day }: DateParts, delta: number): DateParts => {\n let nextYear = year;\n let nextMonth = month;\n let nextDay = day + delta;\n\n while (nextDay < 1) {\n nextMonth -= 1;\n if (nextMonth < 0) {\n nextMonth = 11;\n nextYear -= 1;\n }\n nextDay += daysInMonth(nextYear, nextMonth);\n }\n\n while (nextDay > daysInMonth(nextYear, nextMonth)) {\n nextDay -= daysInMonth(nextYear, nextMonth);\n nextMonth += 1;\n if (nextMonth > 11) {\n nextMonth = 0;\n nextYear += 1;\n }\n }\n\n return { year: nextYear, month: nextMonth, day: nextDay };\n};\n\n/** Moves by whole months and **clamps** the day to the target month, which is what keeps\n * `2024-01-31` a real date when the grid walks into February. The result never leaves the year\n * bounds, so month and year navigation cannot escape `0001`–`9999`. */\nexport const addCalendarMonths = ({ year, month, day }: DateParts, delta: number): DateParts => {\n const minIndex = MIN_CALENDAR_YEAR * 12;\n const maxIndex = MAX_CALENDAR_YEAR * 12 + 11;\n const index = Math.min(maxIndex, Math.max(minIndex, year * 12 + month + delta));\n const nextYear = Math.floor(index / 12);\n const nextMonth = index % 12;\n\n return { year: nextYear, month: nextMonth, day: Math.min(day, daysInMonth(nextYear, nextMonth)) };\n};\n\n/** Walks an inclusive span once and reports whether any date in it matches `predicate`. */\nexport const rangeIncludesDate = (\n from: DateParts,\n to: DateParts,\n predicate: (date: CalendarDate) => boolean\n): boolean => {\n const last = toCalendarDate(to);\n let cursor = from;\n\n while (!predicate(toCalendarDate(cursor))) {\n if (toCalendarDate(cursor) === last) return false;\n cursor = addCalendarDays(cursor, 1);\n }\n\n return true;\n};\n\n/** Today in UTC calendar fields — the value an application overrides through `today` when its own\n * civil day differs from UTC. */\nexport const todayCalendarDate = (): CalendarDate => {\n const now = new Date();\n return toCalendarDate({\n year: now.getUTCFullYear(),\n month: now.getUTCMonth(),\n day: now.getUTCDate(),\n });\n};\n\n/* A `Date` only so `Intl` can format; the calendar fields are set through `setUTCFullYear`, which\n keeps year `0001` intact instead of folding it into the 1900s. */\nconst utcDate = ({ year, month, day }: DateParts) => {\n const date = new Date(0);\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCFullYear(year, month, day);\n return date;\n};\n\nexport interface CalendarFormat {\n /** The visible and announced month caption, e.g. `January 2024`. */\n formatMonthYear: (parts: DateParts) => string;\n /** The day number as the locale writes digits. */\n formatDayNumber: (day: number) => string;\n /** Weekday headings, indexed from Sunday. `short` is shown, `long` is the heading's name. */\n weekdayNames: { short: string; long: string }[];\n /** The day's full accessible name, e.g. `Monday, January 15, 2024`. */\n formatDate: (parts: DateParts) => string;\n}\n\n/* 2024-01-07 is a Sunday, which is what anchors the weekday headings: asking `Intl` for a weekday\n name needs a date, and a fixed one keeps the headings independent of the visitor's clock. */\nconst WEEKDAY_ANCHOR: DateParts = { year: 2024, month: 0, day: 7 };\n\n/**\n * The locale's month, weekday and full-date wording, with the Gregorian calendar and UTC fixed.\n * Values stay Gregorian and zero-padded whatever the locale is, so a locale changes how a date is\n * written and announced, never what it means.\n */\nexport const createCalendarFormat = (locale: string): CalendarFormat => {\n const shared = { timeZone: \"UTC\", calendar: \"gregory\" } as const;\n const monthYear = new Intl.DateTimeFormat(locale, { ...shared, month: \"long\", year: \"numeric\" });\n const fullDate = new Intl.DateTimeFormat(locale, { ...shared, dateStyle: \"full\" });\n const dayNumber = new Intl.NumberFormat(locale, { useGrouping: false });\n const shortWeekday = new Intl.DateTimeFormat(locale, { ...shared, weekday: \"short\" });\n const longWeekday = new Intl.DateTimeFormat(locale, { ...shared, weekday: \"long\" });\n\n const weekdayNames = Array.from({ length: 7 }, (_, index) => {\n const date = utcDate(addCalendarDays(WEEKDAY_ANCHOR, index));\n return { short: shortWeekday.format(date), long: longWeekday.format(date) };\n });\n\n return {\n formatMonthYear: (parts) => monthYear.format(utcDate(parts)),\n formatDayNumber: (day) => dayNumber.format(day),\n weekdayNames,\n formatDate: (parts) => fullDate.format(utcDate(parts)),\n };\n};\n\nexport interface CalendarLabels {\n /** The control that moves the grid to the previous month. */\n previousMonth: string;\n /** The control that moves the grid to the next month. */\n nextMonth: string;\n /** The control that navigates to today without selecting it. */\n today: string;\n /** Describes a single-date grid to assistive technology. */\n selectDate: string;\n /** Describes a range grid to assistive technology. */\n selectRange: string;\n /** Reported when a date — or a range — cannot be selected or is not acceptable. */\n unavailableRange: string;\n}\n\nexport const defaultCalendarLabels: CalendarLabels = {\n previousMonth: \"Previous month\",\n nextMonth: \"Next month\",\n today: \"Today\",\n selectDate: \"Select a date\",\n selectRange: \"Select a range\",\n unavailableRange: \"That range includes an unavailable date\",\n};\n\nexport const resolveCalendarLabels = (labels?: Partial<CalendarLabels>): CalendarLabels => ({\n ...defaultCalendarLabels,\n ...labels,\n});\n\n/* Civil date-times.\n =================\n A `CalendarDateTime` is a `CalendarDate` and a wall-clock minute, `YYYY-MM-DDTHH:mm` — the\n exact value a native `datetime-local` input reads and submits. Like the date, it names a day on\n a calendar and a reading on a clock, not an instant: it carries no time zone and no offset, so\n nothing here converts it, and a daylight-saving change cannot move it. Zero-padded, it orders\n lexicographically exactly as it orders in time, just as a date does. */\n\nexport type CalendarDateTime = string;\n\n/** A wall-clock reading: `hour` is 0–23, `minute` 0–59. */\nexport interface TimeParts {\n hour: number;\n minute: number;\n}\n\nconst DATE_TIME_PATTERN = /^(\\d{4}-\\d{2}-\\d{2})T(\\d{2}):(\\d{2})$/;\n\n/** The only way a value becomes a date-time. Seconds are not part of the format, so a value that\n * carries them is not one, rather than one whose seconds are silently dropped. */\nexport const parseCalendarDateTime = (\n value: CalendarDateTime | null | undefined\n): { date: CalendarDate; time: TimeParts } | null => {\n if (typeof value !== \"string\") return null;\n\n const match = DATE_TIME_PATTERN.exec(value);\n if (!match) return null;\n\n const date = normalizeCalendarDate(match[1]);\n const hour = Number(match[2]);\n const minute = Number(match[3]);\n if (!date || hour > 23 || minute > 59) return null;\n\n return { date, time: { hour, minute } };\n};\n\nexport const toCalendarDateTime = (date: CalendarDate, { hour, minute }: TimeParts): CalendarDateTime =>\n `${date}T${pad(hour, 2)}:${pad(minute, 2)}`;\n\nexport const normalizeCalendarDateTime = (\n value: CalendarDateTime | null | undefined\n): CalendarDateTime | null => {\n const parts = parseCalendarDateTime(value);\n return parts ? toCalendarDateTime(parts.date, parts.time) : null;\n};\n\n/** Minutes since midnight, which is how two readings on the same day compare. */\nexport const minuteOfDay = ({ hour, minute }: TimeParts) => hour * 60 + minute;\n\nexport const timeFromMinuteOfDay = (minutes: number): TimeParts => ({\n hour: Math.floor(minutes / 60),\n minute: minutes % 60,\n});\n\n/** Whether the locale reads a clock in twelve hours with a day period, or in twenty-four. */\nexport const resolveHourCycle = (locale: string): 12 | 24 =>\n new Intl.DateTimeFormat(locale, { hour: \"numeric\", timeZone: \"UTC\" }).resolvedOptions().hour12 ? 12 : 24;\n\nexport interface TimeFormat {\n hourCycle: 12 | 24;\n /** An hour as its column writes it: `00`–`23`, or `12`, `1`–`11` beside a day period. */\n formatHour: (hour: number) => string;\n /** A minute as its column writes it, always two digits. */\n formatMinute: (minute: number) => string;\n /** The locale's own words for the morning and afternoon day periods. */\n periodNames: [string, string];\n /** The whole reading, as the locale writes a time, e.g. `2:30 PM` or `14:30`. */\n formatTime: (time: TimeParts) => string;\n}\n\n/* A `Date` only so `Intl` can write a clock reading; the day is fixed and the zone is UTC, so the\n reading is never shifted by the visitor's own zone. */\nconst utcTime = ({ hour, minute }: TimeParts) => new Date(Date.UTC(2024, 0, 1, hour, minute));\n\n/**\n * The locale's way of writing a clock, in the hour cycle the picker shows. As with dates, the\n * locale changes how a time is written and announced, never what it means: values stay\n * twenty-four-hour `HH:mm` whatever the cycle on screen is.\n */\nexport const createTimeFormat = (locale: string, hourCycle: 12 | 24): TimeFormat => {\n const twoDigits = new Intl.NumberFormat(locale, { minimumIntegerDigits: 2, useGrouping: false });\n const plain = new Intl.NumberFormat(locale, { useGrouping: false });\n const reading = new Intl.DateTimeFormat(locale, {\n hour: \"numeric\",\n minute: \"2-digit\",\n hourCycle: hourCycle === 12 ? \"h12\" : \"h23\",\n timeZone: \"UTC\",\n });\n const periodOf = (hour: number, fallback: string) =>\n reading.formatToParts(utcTime({ hour, minute: 0 })).find((part) => part.type === \"dayPeriod\")?.value ?? fallback;\n\n return {\n hourCycle,\n formatHour: (hour) => (hourCycle === 12 ? plain.format(hour % 12 || 12) : twoDigits.format(hour)),\n formatMinute: (minute) => twoDigits.format(minute),\n periodNames: [periodOf(9, \"AM\"), periodOf(15, \"PM\")],\n formatTime: (time) => reading.format(utcTime(time)),\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"date-family.cjs","sources":["../../../src/components/date-family.ts"],"sourcesContent":["/* The date family's own calendar arithmetic, labels and Intl formatting.\n ====================================================================\n `Calendar`, `DatePicker`, `DateRangePicker` and `DateTimePicker` share one definition of what a\n date *is*, so a calendar grid, a native `type=date` input and a range span all agree.\n\n A `CalendarDate` is a zero-padded Gregorian civil date (`YYYY-MM-DD`, years `0001`–`9999`) and\n carries no time. Every arithmetic step below reads and writes calendar fields directly, through\n the pure helpers in this module, rather than going through a timestamp: a local-midnight\n `Date` would shift a day under a daylight-saving transition, and `Date.UTC` silently maps a\n year below 100 onto `1900 + year`. The only `Date` objects here are the ones `Intl` needs to\n *format* a value, and they are built through `setUTCFullYear` so year `0001` survives.\n\n This module is private to the date family. The public date types are re-exported from\n `Calendar.tsx`, which is the family's public entry. */\n\nexport type CalendarDate = string;\n\nexport interface DateRange {\n start: CalendarDate | null;\n end: CalendarDate | null;\n}\n\n/** A parsed civil date. `month` is 0-based, as every `Intl` and `Date` API expects. */\nexport interface DateParts {\n year: number;\n month: number;\n day: number;\n}\n\n/** Inclusive year bounds of the value format: `0001-01-01` through `9999-12-31`. */\nexport const MIN_CALENDAR_YEAR = 1;\nexport const MAX_CALENDAR_YEAR = 9999;\n\nconst DAYS_PER_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DATE_PATTERN = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nconst pad = (value: number, length: number) => String(value).padStart(length, \"0\");\n\nexport const isLeapYear = (year: number) =>\n year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n\nexport const daysInMonth = (year: number, month: number) =>\n month === 1 && isLeapYear(year) ? 29 : DAYS_PER_MONTH[month];\n\n/**\n * The only way a value becomes a date. A value that is not zero-padded, not a real civil date\n * (including a day that does not exist in its month) or outside the year bounds is not a date at\n * all, so callers never have to reason about a half-valid value.\n */\nexport const parseCalendarDate = (value: CalendarDate | null | undefined): DateParts | null => {\n if (typeof value !== \"string\") return null;\n\n const match = DATE_PATTERN.exec(value);\n if (!match) return null;\n\n const year = Number(match[1]);\n const month = Number(match[2]) - 1;\n const day = Number(match[3]);\n\n if (year < MIN_CALENDAR_YEAR || year > MAX_CALENDAR_YEAR) return null;\n if (month < 0 || month > 11) return null;\n if (day < 1 || day > daysInMonth(year, month)) return null;\n\n return { year, month, day };\n};\n\nexport const isValidCalendarDate = (value: CalendarDate | null | undefined) =>\n parseCalendarDate(value) !== null;\n\nexport const toCalendarDate = ({ year, month, day }: DateParts): CalendarDate =>\n `${pad(year, 4)}-${pad(month + 1, 2)}-${pad(day, 2)}`;\n\n/** A calendar date, or `null` when the input is not one. */\nexport const normalizeCalendarDate = (value: CalendarDate | null | undefined): CalendarDate | null => {\n const parts = parseCalendarDate(value);\n return parts ? toCalendarDate(parts) : null;\n};\n\nexport const normalizeDateRange = (range: DateRange | null | undefined): DateRange => ({\n start: normalizeCalendarDate(range?.start),\n end: normalizeCalendarDate(range?.end),\n});\n\nexport const emptyDateRange = (): DateRange => ({ start: null, end: null });\n\n/* Zero-padded dates order lexicographically exactly as they order in time, so comparison needs no\n parsing. */\nexport const compareCalendarDates = (left: CalendarDate, right: CalendarDate) =>\n left === right ? 0 : left < right ? -1 : 1;\n\n/** Day of week, `0` for Sunday. Sakamoto's algorithm: pure integer arithmetic, so it is exact for\n * the whole year range rather than only for the years a `Date` round-trip happens to preserve. */\nexport const dayOfWeek = ({ year, month, day }: DateParts): number => {\n const offsets = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4];\n const adjustedYear = month < 2 ? year - 1 : year;\n\n return (\n (adjustedYear +\n Math.floor(adjustedYear / 4) -\n Math.floor(adjustedYear / 100) +\n Math.floor(adjustedYear / 400) +\n offsets[month] +\n day) %\n 7\n );\n};\n\nexport const addCalendarDays = ({ year, month, day }: DateParts, delta: number): DateParts => {\n let nextYear = year;\n let nextMonth = month;\n let nextDay = day + delta;\n\n while (nextDay < 1) {\n nextMonth -= 1;\n if (nextMonth < 0) {\n nextMonth = 11;\n nextYear -= 1;\n }\n nextDay += daysInMonth(nextYear, nextMonth);\n }\n\n while (nextDay > daysInMonth(nextYear, nextMonth)) {\n nextDay -= daysInMonth(nextYear, nextMonth);\n nextMonth += 1;\n if (nextMonth > 11) {\n nextMonth = 0;\n nextYear += 1;\n }\n }\n\n return { year: nextYear, month: nextMonth, day: nextDay };\n};\n\n/** Moves by whole months and **clamps** the day to the target month, which is what keeps\n * `2024-01-31` a real date when the grid walks into February. The result never leaves the year\n * bounds, so month and year navigation cannot escape `0001`–`9999`. */\nexport const addCalendarMonths = ({ year, month, day }: DateParts, delta: number): DateParts => {\n const minIndex = MIN_CALENDAR_YEAR * 12;\n const maxIndex = MAX_CALENDAR_YEAR * 12 + 11;\n const index = Math.min(maxIndex, Math.max(minIndex, year * 12 + month + delta));\n const nextYear = Math.floor(index / 12);\n const nextMonth = index % 12;\n\n return { year: nextYear, month: nextMonth, day: Math.min(day, daysInMonth(nextYear, nextMonth)) };\n};\n\n/** Walks an inclusive span once and reports whether any date in it matches `predicate`. */\nexport const rangeIncludesDate = (\n from: DateParts,\n to: DateParts,\n predicate: (date: CalendarDate) => boolean\n): boolean => {\n const last = toCalendarDate(to);\n let cursor = from;\n\n while (!predicate(toCalendarDate(cursor))) {\n if (toCalendarDate(cursor) === last) return false;\n cursor = addCalendarDays(cursor, 1);\n }\n\n return true;\n};\n\n/** Today in UTC calendar fields. It is the first reading a calendar takes, because the server and the\n * first client render share it, so the markup agrees before the viewer's own day is known. */\nexport const todayCalendarDate = (): CalendarDate => {\n const now = new Date();\n return toCalendarDate({\n year: now.getUTCFullYear(),\n month: now.getUTCMonth(),\n day: now.getUTCDate(),\n });\n};\n\n/** Today on the viewer's own clock, in local calendar fields: the civil day a reader means by \"today\". */\nexport const localCalendarDate = (now: Date = new Date()): CalendarDate =>\n toCalendarDate({\n year: now.getFullYear(),\n month: now.getMonth(),\n day: now.getDate(),\n });\n\n/** Milliseconds from `now` until the next local midnight, which is when the civil day turns over. */\nexport const millisecondsUntilLocalMidnight = (now: Date): number => {\n const midnight = new Date(now);\n midnight.setHours(24, 0, 0, 0);\n return midnight.getTime() - now.getTime();\n};\n\n/* A `Date` only so `Intl` can format; the calendar fields are set through `setUTCFullYear`, which\n keeps year `0001` intact instead of folding it into the 1900s. */\nconst utcDate = ({ year, month, day }: DateParts) => {\n const date = new Date(0);\n date.setUTCHours(0, 0, 0, 0);\n date.setUTCFullYear(year, month, day);\n return date;\n};\n\nexport interface CalendarFormat {\n /** The visible and announced month caption, e.g. `January 2024`. */\n formatMonthYear: (parts: DateParts) => string;\n /** The day number as the locale writes digits. */\n formatDayNumber: (day: number) => string;\n /** Weekday headings, indexed from Sunday. `short` is shown, `long` is the heading's name. */\n weekdayNames: { short: string; long: string }[];\n /** The day's full accessible name, e.g. `Monday, January 15, 2024`. */\n formatDate: (parts: DateParts) => string;\n}\n\n/* 2024-01-07 is a Sunday, which is what anchors the weekday headings: asking `Intl` for a weekday\n name needs a date, and a fixed one keeps the headings independent of the visitor's clock. */\nconst WEEKDAY_ANCHOR: DateParts = { year: 2024, month: 0, day: 7 };\n\n/**\n * The locale's month, weekday and full-date wording, with the Gregorian calendar and UTC fixed.\n * Values stay Gregorian and zero-padded whatever the locale is, so a locale changes how a date is\n * written and announced, never what it means.\n */\nexport const createCalendarFormat = (locale: string): CalendarFormat => {\n const shared = { timeZone: \"UTC\", calendar: \"gregory\" } as const;\n const monthYear = new Intl.DateTimeFormat(locale, { ...shared, month: \"long\", year: \"numeric\" });\n const fullDate = new Intl.DateTimeFormat(locale, { ...shared, dateStyle: \"full\" });\n const dayNumber = new Intl.NumberFormat(locale, { useGrouping: false });\n const shortWeekday = new Intl.DateTimeFormat(locale, { ...shared, weekday: \"short\" });\n const longWeekday = new Intl.DateTimeFormat(locale, { ...shared, weekday: \"long\" });\n\n const weekdayNames = Array.from({ length: 7 }, (_, index) => {\n const date = utcDate(addCalendarDays(WEEKDAY_ANCHOR, index));\n return { short: shortWeekday.format(date), long: longWeekday.format(date) };\n });\n\n return {\n formatMonthYear: (parts) => monthYear.format(utcDate(parts)),\n formatDayNumber: (day) => dayNumber.format(day),\n weekdayNames,\n formatDate: (parts) => fullDate.format(utcDate(parts)),\n };\n};\n\nexport interface CalendarLabels {\n /** The control that moves the grid to the previous month. */\n previousMonth: string;\n /** The control that moves the grid to the next month. */\n nextMonth: string;\n /** The control that navigates to today without selecting it. */\n today: string;\n /** Describes a single-date grid to assistive technology. */\n selectDate: string;\n /** Describes a range grid to assistive technology. */\n selectRange: string;\n /** Reported when a date — or a range — cannot be selected or is not acceptable. */\n unavailableRange: string;\n}\n\nexport const defaultCalendarLabels: CalendarLabels = {\n previousMonth: \"Previous month\",\n nextMonth: \"Next month\",\n today: \"Today\",\n selectDate: \"Select a date\",\n selectRange: \"Select a range\",\n unavailableRange: \"That range includes an unavailable date\",\n};\n\nexport const resolveCalendarLabels = (labels?: Partial<CalendarLabels>): CalendarLabels => ({\n ...defaultCalendarLabels,\n ...labels,\n});\n\n/* Civil date-times.\n =================\n A `CalendarDateTime` is a `CalendarDate` and a wall-clock minute, `YYYY-MM-DDTHH:mm` — the\n exact value a native `datetime-local` input reads and submits. Like the date, it names a day on\n a calendar and a reading on a clock, not an instant: it carries no time zone and no offset, so\n nothing here converts it, and a daylight-saving change cannot move it. Zero-padded, it orders\n lexicographically exactly as it orders in time, just as a date does. */\n\nexport type CalendarDateTime = string;\n\n/** A wall-clock reading: `hour` is 0–23, `minute` 0–59. */\nexport interface TimeParts {\n hour: number;\n minute: number;\n}\n\nconst DATE_TIME_PATTERN = /^(\\d{4}-\\d{2}-\\d{2})T(\\d{2}):(\\d{2})$/;\n\n/** The only way a value becomes a date-time. Seconds are not part of the format, so a value that\n * carries them is not one, rather than one whose seconds are silently dropped. */\nexport const parseCalendarDateTime = (\n value: CalendarDateTime | null | undefined\n): { date: CalendarDate; time: TimeParts } | null => {\n if (typeof value !== \"string\") return null;\n\n const match = DATE_TIME_PATTERN.exec(value);\n if (!match) return null;\n\n const date = normalizeCalendarDate(match[1]);\n const hour = Number(match[2]);\n const minute = Number(match[3]);\n if (!date || hour > 23 || minute > 59) return null;\n\n return { date, time: { hour, minute } };\n};\n\nexport const toCalendarDateTime = (date: CalendarDate, { hour, minute }: TimeParts): CalendarDateTime =>\n `${date}T${pad(hour, 2)}:${pad(minute, 2)}`;\n\nexport const normalizeCalendarDateTime = (\n value: CalendarDateTime | null | undefined\n): CalendarDateTime | null => {\n const parts = parseCalendarDateTime(value);\n return parts ? toCalendarDateTime(parts.date, parts.time) : null;\n};\n\n/** Minutes since midnight, which is how two readings on the same day compare. */\nexport const minuteOfDay = ({ hour, minute }: TimeParts) => hour * 60 + minute;\n\nexport const timeFromMinuteOfDay = (minutes: number): TimeParts => ({\n hour: Math.floor(minutes / 60),\n minute: minutes % 60,\n});\n\n/** Whether the locale reads a clock in twelve hours with a day period, or in twenty-four. */\nexport const resolveHourCycle = (locale: string): 12 | 24 =>\n new Intl.DateTimeFormat(locale, { hour: \"numeric\", timeZone: \"UTC\" }).resolvedOptions().hour12 ? 12 : 24;\n\nexport interface TimeFormat {\n hourCycle: 12 | 24;\n /** An hour as its column writes it: `00`–`23`, or `12`, `1`–`11` beside a day period. */\n formatHour: (hour: number) => string;\n /** A minute as its column writes it, always two digits. */\n formatMinute: (minute: number) => string;\n /** The locale's own words for the morning and afternoon day periods. */\n periodNames: [string, string];\n /** The whole reading, as the locale writes a time, e.g. `2:30 PM` or `14:30`. */\n formatTime: (time: TimeParts) => string;\n}\n\n/* A `Date` only so `Intl` can write a clock reading; the day is fixed and the zone is UTC, so the\n reading is never shifted by the visitor's own zone. */\nconst utcTime = ({ hour, minute }: TimeParts) => new Date(Date.UTC(2024, 0, 1, hour, minute));\n\n/**\n * The locale's way of writing a clock, in the hour cycle the picker shows. As with dates, the\n * locale changes how a time is written and announced, never what it means: values stay\n * twenty-four-hour `HH:mm` whatever the cycle on screen is.\n */\nexport const createTimeFormat = (locale: string, hourCycle: 12 | 24): TimeFormat => {\n const twoDigits = new Intl.NumberFormat(locale, { minimumIntegerDigits: 2, useGrouping: false });\n const plain = new Intl.NumberFormat(locale, { useGrouping: false });\n const reading = new Intl.DateTimeFormat(locale, {\n hour: \"numeric\",\n minute: \"2-digit\",\n hourCycle: hourCycle === 12 ? \"h12\" : \"h23\",\n timeZone: \"UTC\",\n });\n const periodOf = (hour: number, fallback: string) =>\n reading.formatToParts(utcTime({ hour, minute: 0 })).find((part) => part.type === \"dayPeriod\")?.value ?? fallback;\n\n return {\n hourCycle,\n formatHour: (hour) => (hourCycle === 12 ? plain.format(hour % 12 || 12) : twoDigits.format(hour)),\n formatMinute: (minute) => twoDigits.format(minute),\n periodNames: [periodOf(9, \"AM\"), periodOf(15, \"PM\")],\n formatTime: (time) => reading.format(utcTime(time)),\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,9 @@ const dateFieldRowClassName = (disabled) => utils.cn("group/field flex min-w-0 w
|
|
|
33
33
|
* a picker-indicator pseudo-element). The composite row owns focus, not the clipped input.
|
|
34
34
|
* Its slot takes `dateInputDirection`: the clip only lands on the affordance if every engine puts
|
|
35
35
|
* the affordance on the same physical side. */
|
|
36
|
-
|
|
36
|
+
/* The input takes the row's height rather than its own padding, so the row's density (40, 48 or 56px) is the
|
|
37
|
+
one source of a date field's height at every size; a padded input made a small field taller than its row. */
|
|
38
|
+
const dateInputClassName = "block w-[calc(100%+2.5rem)] min-w-0 self-stretch bg-transparent py-0 text-inherit [outline-style:none] disabled:cursor-not-allowed";
|
|
37
39
|
/** A native date is a left-to-right run of figures in every page direction. Chromium lays its date
|
|
38
40
|
* inputs out left to right whatever `dir` says, with the affordance on the physical right, while
|
|
39
41
|
* Firefox mirrors them — and reorders a `datetime-local` value's parts under right-to-left bidi.
|
|
@@ -43,7 +45,7 @@ const dateInputClassName = "block w-[calc(100%+2.5rem)] min-w-0 bg-transparent p
|
|
|
43
45
|
const dateInputDirection = "ltr";
|
|
44
46
|
/* The 32×44 target holds the field part's concentric 32px hover surface.
|
|
45
47
|
Only the icon presses: the adjacent native text entry never activates this button. */
|
|
46
|
-
const datePartClassName = `group inline-flex shrink-0 items-center justify-center ${ui_common.density.part} ${ui_common.shape.circle} ${ui_common.
|
|
48
|
+
const datePartClassName = `group inline-flex shrink-0 items-center justify-center ${ui_common.density.part} ${ui_common.shape.circle} ${ui_common.state.quietInk} ${ui_motion.motionFeedback} ${ui_common.stateLayer.fieldPart} ${ui_common.state.enabled} ${ui_common.state.disabledPart}`;
|
|
47
49
|
/**
|
|
48
50
|
* The named control that opens the calendar. It is a Base `Popover.Trigger` rendered as a native
|
|
49
51
|
* button, so Base owns the relationship it publishes on the field (`aria-haspopup`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-field.cjs","sources":["../../../src/components/date-field.tsx"],"sourcesContent":["\"use client\";\n\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { Calendar03Icon } from \"@hugeicons/core-free-icons\";\nimport React, { useEffect, useRef, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { density, focusRingWithin, iconStroke, material, overlay, rim, shape, stacking, state, stateLayer, text } from \"./ui.common\";\nimport { motionFeedback, motionInkPress, motionPresenceAnchored } from \"./ui.motion\";\n\n/* The parts the two date pickers share.\n ====================================\n A picker is a native `type=date` field with a named control beside it that opens the calendar,\n so the field's surface, its trailing control and the popup that holds the grid have to be one\n definition rather than two that drift. This module is private to the date family: nothing here\n is published, and neither picker adds a shell of its own.\n\n `DatePicker` and `DateRangePicker` compose Base `Field` for the label/description/error\n relationship and Base `Popover` for the popup; what lives here is only the visual and\n structural arrangement those compositions hold in common. */\n\n/**\n * The one field surface the date family uses: a borderless matte field whose focus treatment\n * wraps the whole row, exactly as the library's other composite fields do.\n *\n * The row carries `group/field` and its own `data-disabled` marker so the trailing control's dim\n * is neutralised inside an already dimmed field — a disabled field dims once, at the field.\n */\nexport const dateFieldRowClassName = (disabled: boolean) =>\n cn(\n \"group/field flex min-w-0 w-full items-center ps-5 pe-3.5\",\n density.normal,\n shape.control,\n material.control,\n rim.field,\n motionFeedback,\n focusRingWithin,\n state.field.invalid,\n !disabled && state.field.hover,\n !disabled && state.field.focusWithin,\n !disabled && state.field.invalidHover,\n !disabled && state.field.invalidFocusWithin,\n disabled ? state.disabledDescendant : state.text\n );\n\n/** Native date entry remains intact. Its trailing browser affordance sits outside the clipped\n * input slot, leaving one visible calendar trigger in every engine (Firefox does not expose\n * a picker-indicator pseudo-element). The composite row owns focus, not the clipped input.\n * Its slot takes `dateInputDirection`: the clip only lands on the affordance if every engine puts\n * the affordance on the same physical side. */\n\nexport const dateInputClassName =\n \"block w-[calc(100%+2.5rem)] min-w-0 bg-transparent py-2.5 text-inherit outline-none disabled:cursor-not-allowed\";\n\n/** A native date is a left-to-right run of figures in every page direction. Chromium lays its date\n * inputs out left to right whatever `dir` says, with the affordance on the physical right, while\n * Firefox mirrors them — and reorders a `datetime-local` value's parts under right-to-left bidi.\n * Fixing the direction of the slot that clips the input gives every engine the same layout — the\n * slot's direction, not the input's, decides which side an overflowing input spills from — so the\n * clip above hides the affordance in a right-to-left page as it does in a left-to-right one. */\nexport const dateInputDirection = \"ltr\";\n\n/* The 32×44 target holds the field part's concentric 32px hover surface.\n Only the icon presses: the adjacent native text entry never activates this button. */\nconst datePartClassName = `group inline-flex shrink-0 items-center justify-center ${density.part} ${shape.circle} ${text.medium} ${motionFeedback} ${stateLayer.fieldPart} ${state.enabled} ${state.disabledPart} [&:not([data-disabled]):not(:disabled)]:hover:text-sherick-ink`;\n\nexport interface DateFieldTriggerProps {\n /** The control's accessible name. It has no visible label, so it has to be named. */\n label: string;\n disabled?: boolean;\n /** The glyph that says what the popup holds: a calendar by default. */\n icon?: ReactNode;\n}\n\n/**\n * The named control that opens the calendar. It is a Base `Popover.Trigger` rendered as a native\n * button, so Base owns the relationship it publishes on the field (`aria-haspopup`,\n * `aria-expanded`, `aria-controls`) and the pointer and keyboard activation that opens the\n * surface; the button itself only carries the type it needs to stay out of form submission.\n */\nexport const DateFieldTrigger = ({ label, disabled = false, icon = <HugeiconsIcon icon={Calendar03Icon} aria-hidden=\"true\" className={cn(iconStroke.glyph)} /> }: DateFieldTriggerProps) => (\n <BasePopover.Trigger\n disabled={disabled}\n render={<button type=\"button\" aria-label={label} disabled={disabled} className={cn(datePartClassName)} />}\n >\n <span className={cn(\"inline-flex size-5 items-center justify-center [&>svg]:size-5\", !disabled && motionInkPress)}>\n {icon}\n </span>\n </BasePopover.Trigger>\n);\n\nexport interface DateCalendarPopupProps {\n /** Names the popup, through Base's own Title part. */\n title: string;\n children: ReactNode;\n anchor: React.ComponentProps<typeof BasePopover.Positioner>[\"anchor\"];\n /** The sheet's own anatomy when it holds more than one grid, such as its wider extent. */\n className?: string;\n}\n\n/**\n * The calendar's popup: the same shell `Popover.Content` renders, composed straight from Base's\n * public parts because the grid needs one thing the published shell does not offer — `initialFocus`\n * aimed at the day the reader is on, so the grid is usable from the moment it opens.\n *\n * Base owns the portal, the placement and collision handling, the outside-interaction and Escape\n * dismissal and the focus restoration; the surface is non-modal, so the rest of the page stays\n * reachable. Sherick owns only the sheet and its presence.\n */\nexport const DateCalendarPopup = ({ title, children, anchor, className }: DateCalendarPopupProps) => {\n const popupRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <BasePopover.Portal>\n <BasePopover.Positioner\n anchor={anchor}\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n className={cn(stacking.float)}\n >\n <BasePopover.Popup\n ref={popupRef}\n /* The roving tab stop is the calendar's own active day, so this is exactly the cell a\n keyboard reader would land on. `null` leaves Base's default focus behaviour in place\n if the grid has no tab stop to give. */\n initialFocus={() =>\n popupRef.current?.querySelector<HTMLElement>('[data-day][tabindex=\"0\"]') ?? null\n }\n className={cn(\n \"w-max max-w-[min(24rem,var(--available-width))] max-h-[var(--available-height)] overflow-y-auto p-3 [overflow-wrap:anywhere]\",\n overlay.popup,\n motionPresenceAnchored,\n className\n )}\n >\n <BasePopover.Title className={cn(\"sr-only\")}>{title}</BasePopover.Title>\n {children}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n );\n};\n\n/** Base Field controls entry and validity, but native reset emits no input/change event.\n * Bridge only the date family's domain state, after the owning form's cancelable reset. */\nexport const useDateFormReset = (\n inputRef: React.RefObject<HTMLInputElement | null>,\n formId: string | undefined,\n restore: () => void\n) => {\n const latestRestore = useRef(restore);\n useEffect(() => { latestRestore.current = restore; }, [restore]);\n useEffect(() => {\n const form = inputRef.current?.form;\n if (!form) return;\n const reset = (event: Event) => {\n // A microtask can run between native listeners, before React's delegated onReset.\n // The next task observes cancellation after the entire native dispatch/default action.\n setTimeout(() => {\n if (!event.defaultPrevented && inputRef.current?.form === form) latestRestore.current();\n }, 0);\n };\n form.addEventListener(\"reset\", reset);\n return () => form.removeEventListener(\"reset\", reset);\n }, [inputRef, formId]);\n};\n"],"names":["cn","density","shape","material","rim","motionFeedback","focusRingWithin","state","text","stateLayer","_jsx","HugeiconsIcon","Calendar03Icon","iconStroke","BasePopover","motionInkPress","useRef","stacking","_jsxs","overlay","motionPresenceAnchored","useEffect"],"mappings":"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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,kBAAkB,CAAA,CAAA,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;;AAKiG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC1F,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,kBAAkB,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA;AAElC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACwF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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"}
|
|
1
|
+
{"version":3,"file":"date-field.cjs","sources":["../../../src/components/date-field.tsx"],"sourcesContent":["\"use client\";\n\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { Calendar03Icon } from \"@hugeicons/core-free-icons\";\nimport React, { useEffect, useRef, type ReactNode } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { density, focusRingWithin, iconStroke, material, overlay, rim, shape, stacking, state, stateLayer } from \"./ui.common\";\nimport { motionFeedback, motionInkPress, motionPresenceAnchored } from \"./ui.motion\";\n\n/* The parts the two date pickers share.\n ====================================\n A picker is a native `type=date` field with a named control beside it that opens the calendar,\n so the field's surface, its trailing control and the popup that holds the grid have to be one\n definition rather than two that drift. This module is private to the date family: nothing here\n is published, and neither picker adds a shell of its own.\n\n `DatePicker` and `DateRangePicker` compose Base `Field` for the label/description/error\n relationship and Base `Popover` for the popup; what lives here is only the visual and\n structural arrangement those compositions hold in common. */\n\n/**\n * The one field surface the date family uses: a borderless matte field whose focus treatment\n * wraps the whole row, exactly as the library's other composite fields do.\n *\n * The row carries `group/field` and its own `data-disabled` marker so the trailing control's dim\n * is neutralised inside an already dimmed field — a disabled field dims once, at the field.\n */\nexport const dateFieldRowClassName = (disabled: boolean) =>\n cn(\n \"group/field flex min-w-0 w-full items-center ps-5 pe-3.5\",\n density.normal,\n shape.control,\n material.control,\n rim.field,\n motionFeedback,\n focusRingWithin,\n state.field.invalid,\n !disabled && state.field.hover,\n !disabled && state.field.focusWithin,\n !disabled && state.field.invalidHover,\n !disabled && state.field.invalidFocusWithin,\n disabled ? state.disabledDescendant : state.text\n );\n\n/** Native date entry remains intact. Its trailing browser affordance sits outside the clipped\n * input slot, leaving one visible calendar trigger in every engine (Firefox does not expose\n * a picker-indicator pseudo-element). The composite row owns focus, not the clipped input.\n * Its slot takes `dateInputDirection`: the clip only lands on the affordance if every engine puts\n * the affordance on the same physical side. */\n\n/* The input takes the row's height rather than its own padding, so the row's density (40, 48 or 56px) is the\n one source of a date field's height at every size; a padded input made a small field taller than its row. */\nexport const dateInputClassName =\n \"block w-[calc(100%+2.5rem)] min-w-0 self-stretch bg-transparent py-0 text-inherit [outline-style:none] disabled:cursor-not-allowed\";\n\n/** A native date is a left-to-right run of figures in every page direction. Chromium lays its date\n * inputs out left to right whatever `dir` says, with the affordance on the physical right, while\n * Firefox mirrors them — and reorders a `datetime-local` value's parts under right-to-left bidi.\n * Fixing the direction of the slot that clips the input gives every engine the same layout — the\n * slot's direction, not the input's, decides which side an overflowing input spills from — so the\n * clip above hides the affordance in a right-to-left page as it does in a left-to-right one. */\nexport const dateInputDirection = \"ltr\";\n\n/* The 32×44 target holds the field part's concentric 32px hover surface.\n Only the icon presses: the adjacent native text entry never activates this button. */\nconst datePartClassName = `group inline-flex shrink-0 items-center justify-center ${density.part} ${shape.circle} ${state.quietInk} ${motionFeedback} ${stateLayer.fieldPart} ${state.enabled} ${state.disabledPart}`;\n\nexport interface DateFieldTriggerProps {\n /** The control's accessible name. It has no visible label, so it has to be named. */\n label: string;\n disabled?: boolean;\n /** The glyph that says what the popup holds: a calendar by default. */\n icon?: ReactNode;\n}\n\n/**\n * The named control that opens the calendar. It is a Base `Popover.Trigger` rendered as a native\n * button, so Base owns the relationship it publishes on the field (`aria-haspopup`,\n * `aria-expanded`, `aria-controls`) and the pointer and keyboard activation that opens the\n * surface; the button itself only carries the type it needs to stay out of form submission.\n */\nexport const DateFieldTrigger = ({ label, disabled = false, icon = <HugeiconsIcon icon={Calendar03Icon} aria-hidden=\"true\" className={cn(iconStroke.glyph)} /> }: DateFieldTriggerProps) => (\n <BasePopover.Trigger\n disabled={disabled}\n render={<button type=\"button\" aria-label={label} disabled={disabled} className={cn(datePartClassName)} />}\n >\n <span className={cn(\"inline-flex size-5 items-center justify-center [&>svg]:size-5\", !disabled && motionInkPress)}>\n {icon}\n </span>\n </BasePopover.Trigger>\n);\n\nexport interface DateCalendarPopupProps {\n /** Names the popup, through Base's own Title part. */\n title: string;\n children: ReactNode;\n anchor: React.ComponentProps<typeof BasePopover.Positioner>[\"anchor\"];\n /** The sheet's own anatomy when it holds more than one grid, such as its wider extent. */\n className?: string;\n}\n\n/**\n * The calendar's popup: the same shell `Popover.Content` renders, composed straight from Base's\n * public parts because the grid needs one thing the published shell does not offer — `initialFocus`\n * aimed at the day the reader is on, so the grid is usable from the moment it opens.\n *\n * Base owns the portal, the placement and collision handling, the outside-interaction and Escape\n * dismissal and the focus restoration; the surface is non-modal, so the rest of the page stays\n * reachable. Sherick owns only the sheet and its presence.\n */\nexport const DateCalendarPopup = ({ title, children, anchor, className }: DateCalendarPopupProps) => {\n const popupRef = useRef<HTMLDivElement | null>(null);\n\n return (\n <BasePopover.Portal>\n <BasePopover.Positioner\n anchor={anchor}\n side=\"bottom\"\n align=\"start\"\n sideOffset={8}\n className={cn(stacking.float)}\n >\n <BasePopover.Popup\n ref={popupRef}\n /* The roving tab stop is the calendar's own active day, so this is exactly the cell a\n keyboard reader would land on. `null` leaves Base's default focus behaviour in place\n if the grid has no tab stop to give. */\n initialFocus={() =>\n popupRef.current?.querySelector<HTMLElement>('[data-day][tabindex=\"0\"]') ?? null\n }\n className={cn(\n \"w-max max-w-[min(24rem,var(--available-width))] max-h-[var(--available-height)] overflow-y-auto p-3 [overflow-wrap:anywhere]\",\n overlay.popup,\n motionPresenceAnchored,\n className\n )}\n >\n <BasePopover.Title className={cn(\"sr-only\")}>{title}</BasePopover.Title>\n {children}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n );\n};\n\n/** Base Field controls entry and validity, but native reset emits no input/change event.\n * Bridge only the date family's domain state, after the owning form's cancelable reset. */\nexport const useDateFormReset = (\n inputRef: React.RefObject<HTMLInputElement | null>,\n formId: string | undefined,\n restore: () => void\n) => {\n const latestRestore = useRef(restore);\n useEffect(() => { latestRestore.current = restore; }, [restore]);\n useEffect(() => {\n const form = inputRef.current?.form;\n if (!form) return;\n const reset = (event: Event) => {\n // A microtask can run between native listeners, before React's delegated onReset.\n // The next task observes cancellation after the entire native dispatch/default action.\n setTimeout(() => {\n if (!event.defaultPrevented && inputRef.current?.form === form) latestRestore.current();\n }, 0);\n };\n form.addEventListener(\"reset\", reset);\n return () => form.removeEventListener(\"reset\", reset);\n }, [inputRef, formId]);\n};\n"],"names":["cn","density","shape","material","rim","motionFeedback","focusRingWithin","state","stateLayer","_jsx","HugeiconsIcon","Calendar03Icon","iconStroke","BasePopover","motionInkPress","useRef","stacking","_jsxs","overlay","motionPresenceAnchored","useEffect"],"mappings":"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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEhD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC+G,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACxG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,kBAAkB,CAAA,CAAA,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;;AAKiG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC1F,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,kBAAkB,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA;AAElC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACwF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,C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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var directionProvider = require('@base-ui/react/direction-provider');
|
|
5
|
+
var React = require('react');
|
|
6
|
+
|
|
7
|
+
/* An overflowing track says that more lies beyond its edge (§19). The cue is a mask on the track itself, so
|
|
8
|
+
it costs no layer and no colour, and it is drawn only on an edge that really has more content behind it.
|
|
9
|
+
It is internal and not part of the public barrel. Tabs and ToggleGroup use it directly; SegmentedControl
|
|
10
|
+
scrolls through ToggleGroup, so it carries the same cue without a second copy. */
|
|
11
|
+
/* The width of the fade on an edge that carries more. A tab or a segment is 40px or more, so 16px tells a
|
|
12
|
+
reader the track continues without hiding the label at its edge. */
|
|
13
|
+
const FADE_WIDTH = "1rem";
|
|
14
|
+
/* Sub-pixel scroll offsets and rounding can leave a track a pixel short of its end, which is not overflow. */
|
|
15
|
+
const TOLERANCE = 1;
|
|
16
|
+
const NO_EDGES = { start: false, end: false };
|
|
17
|
+
/* The mask fades only the edges that carry more. Its gradient runs from the track's start edge to its
|
|
18
|
+
end edge, so `to left` is the right way round in a right-to-left page. Only the alpha of the stops is
|
|
19
|
+
used: the mask hides content, it paints no colour. */
|
|
20
|
+
const edgeMask = ({ start, end }, rtl) => {
|
|
21
|
+
if (!start && !end)
|
|
22
|
+
return undefined;
|
|
23
|
+
const stops = [
|
|
24
|
+
start ? `transparent 0, black ${FADE_WIDTH}` : "black 0",
|
|
25
|
+
end ? `black calc(100% - ${FADE_WIDTH}), transparent 100%` : "black 100%",
|
|
26
|
+
];
|
|
27
|
+
const image = `linear-gradient(${rtl ? "to left" : "to right"}, ${stops.join(", ")})`;
|
|
28
|
+
return { maskImage: image, WebkitMaskImage: image };
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Whether a scrolling track overflows on either edge, and the mask that says so. Overflow is read from the
|
|
32
|
+
* track's own scroll position and size, and the track is re-measured when its size or its content changes. A
|
|
33
|
+
* track that fits draws no mask at all.
|
|
34
|
+
*/
|
|
35
|
+
const useEdgeFade = () => {
|
|
36
|
+
const [track, setTrack] = React.useState(null);
|
|
37
|
+
const [edges, setEdges] = React.useState(NO_EDGES);
|
|
38
|
+
const rtl = directionProvider.useDirection() === "rtl";
|
|
39
|
+
/* Measured after every render, so a track whose children change is measured again without a second
|
|
40
|
+
tracking mechanism. The observers are dropped on each pass, so nothing stays subscribed. */
|
|
41
|
+
React.useEffect(() => {
|
|
42
|
+
if (track === null)
|
|
43
|
+
return;
|
|
44
|
+
/* Start is the offset from the origin, which is the left edge in a left-to-right page and the right
|
|
45
|
+
edge in a right-to-left one; `Math.abs` reads both, because scroll offsets run negative in rtl. */
|
|
46
|
+
const measure = () => {
|
|
47
|
+
const offset = Math.abs(track.scrollLeft);
|
|
48
|
+
const remaining = track.scrollWidth - track.clientWidth - offset;
|
|
49
|
+
const next = { start: offset > TOLERANCE, end: remaining > TOLERANCE };
|
|
50
|
+
setEdges((previous) => (previous.start === next.start && previous.end === next.end ? previous : next));
|
|
51
|
+
};
|
|
52
|
+
measure();
|
|
53
|
+
track.addEventListener("scroll", measure, { passive: true });
|
|
54
|
+
const observer = typeof ResizeObserver === "undefined" ? undefined : new ResizeObserver(measure);
|
|
55
|
+
observer === null || observer === void 0 ? void 0 : observer.observe(track);
|
|
56
|
+
for (const child of Array.from(track.children))
|
|
57
|
+
observer === null || observer === void 0 ? void 0 : observer.observe(child);
|
|
58
|
+
return () => {
|
|
59
|
+
track.removeEventListener("scroll", measure);
|
|
60
|
+
observer === null || observer === void 0 ? void 0 : observer.disconnect();
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
const ref = React.useCallback((node) => setTrack(node), []);
|
|
64
|
+
return { ref, mask: edgeMask(edges, rtl) };
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Adds the edge mask to a caller's own style, whether that style is an object or a function of the
|
|
68
|
+
* primitive's state. The caller's properties stay; the mask is added beside them.
|
|
69
|
+
*/
|
|
70
|
+
const withEdgeFade = (style, mask) => {
|
|
71
|
+
if (mask === undefined)
|
|
72
|
+
return style;
|
|
73
|
+
if (typeof style === "function")
|
|
74
|
+
return (state) => ({ ...style(state), ...mask });
|
|
75
|
+
return { ...style, ...mask };
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
exports.useEdgeFade = useEdgeFade;
|
|
79
|
+
exports.withEdgeFade = withEdgeFade;
|
|
80
|
+
//# sourceMappingURL=edge-fade.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-fade.cjs","sources":["../../../src/components/edge-fade.ts"],"sourcesContent":["\"use client\";\n\nimport { useDirection } from \"@base-ui/react/direction-provider\";\nimport { useCallback, useEffect, useState, type CSSProperties } from \"react\";\n\n/* An overflowing track says that more lies beyond its edge (§19). The cue is a mask on the track itself, so\n it costs no layer and no colour, and it is drawn only on an edge that really has more content behind it.\n It is internal and not part of the public barrel. Tabs and ToggleGroup use it directly; SegmentedControl\n scrolls through ToggleGroup, so it carries the same cue without a second copy. */\n\n/* The width of the fade on an edge that carries more. A tab or a segment is 40px or more, so 16px tells a\n reader the track continues without hiding the label at its edge. */\nconst FADE_WIDTH = \"1rem\";\n/* Sub-pixel scroll offsets and rounding can leave a track a pixel short of its end, which is not overflow. */\nconst TOLERANCE = 1;\n\ninterface EdgeFade {\n start: boolean;\n end: boolean;\n}\n\nconst NO_EDGES: EdgeFade = { start: false, end: false };\n\n/* The mask fades only the edges that carry more. Its gradient runs from the track's start edge to its\n end edge, so `to left` is the right way round in a right-to-left page. Only the alpha of the stops is\n used: the mask hides content, it paints no colour. */\nconst edgeMask = ({ start, end }: EdgeFade, rtl: boolean): CSSProperties | undefined => {\n if (!start && !end) return undefined;\n\n const stops = [\n start ? `transparent 0, black ${FADE_WIDTH}` : \"black 0\",\n end ? `black calc(100% - ${FADE_WIDTH}), transparent 100%` : \"black 100%\",\n ];\n const image = `linear-gradient(${rtl ? \"to left\" : \"to right\"}, ${stops.join(\", \")})`;\n\n return { maskImage: image, WebkitMaskImage: image };\n};\n\n/**\n * Whether a scrolling track overflows on either edge, and the mask that says so. Overflow is read from the\n * track's own scroll position and size, and the track is re-measured when its size or its content changes. A\n * track that fits draws no mask at all.\n */\nexport const useEdgeFade = <T extends HTMLElement>() => {\n const [track, setTrack] = useState<T | null>(null);\n const [edges, setEdges] = useState<EdgeFade>(NO_EDGES);\n const rtl = useDirection() === \"rtl\";\n\n /* Measured after every render, so a track whose children change is measured again without a second\n tracking mechanism. The observers are dropped on each pass, so nothing stays subscribed. */\n useEffect(() => {\n if (track === null) return;\n\n /* Start is the offset from the origin, which is the left edge in a left-to-right page and the right\n edge in a right-to-left one; `Math.abs` reads both, because scroll offsets run negative in rtl. */\n const measure = () => {\n const offset = Math.abs(track.scrollLeft);\n const remaining = track.scrollWidth - track.clientWidth - offset;\n const next = { start: offset > TOLERANCE, end: remaining > TOLERANCE };\n setEdges((previous) => (previous.start === next.start && previous.end === next.end ? previous : next));\n };\n\n measure();\n track.addEventListener(\"scroll\", measure, { passive: true });\n const observer = typeof ResizeObserver === \"undefined\" ? undefined : new ResizeObserver(measure);\n observer?.observe(track);\n for (const child of Array.from(track.children)) observer?.observe(child);\n\n return () => {\n track.removeEventListener(\"scroll\", measure);\n observer?.disconnect();\n };\n });\n\n const ref = useCallback((node: T | null) => setTrack(node), []);\n\n return { ref, mask: edgeMask(edges, rtl) };\n};\n\ntype StyleProp<State> = CSSProperties | ((state: State) => CSSProperties | undefined) | undefined;\n\n/**\n * Adds the edge mask to a caller's own style, whether that style is an object or a function of the\n * primitive's state. The caller's properties stay; the mask is added beside them.\n */\nexport const withEdgeFade = <State>(style: StyleProp<State>, mask: CSSProperties | undefined): StyleProp<State> => {\n if (mask === undefined) return style;\n if (typeof style === \"function\") return (state) => ({ ...style(state), ...mask });\n return { ...style, ...mask };\n};\n"],"names":["useState","useDirection","useEffect","useCallback"],"mappings":";;;;;;AAKA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;AAGoF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEpF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACsE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACtE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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CAAA,CAAA,CAAGC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY,CAAA,CAAE,KAAK,CAAA,CAAA,CAAA,CAAA,CAAK;AAEpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC8F,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var utils = require('../libs/utils.cjs');
|
|
8
|
+
var ui_common = require('./ui.common.cjs');
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* A box that scrolls its own content, and that a keyboard can reach only when there is something to
|
|
12
|
+
* scroll. A scrollable box with no focusable content is a scroll position no keyboard user can get
|
|
13
|
+
* to (axe `scrollable-region-focusable`), but a box that fits has no business being a tab stop, so
|
|
14
|
+
* it is not one. Overflow is measured rather than assumed: the same table is wide on a phone and
|
|
15
|
+
* narrow on a desktop, and both the box and its content can change size while the page is open.
|
|
16
|
+
* The `as` prop is typed with the div's ref, because a code well is never handed a ref.
|
|
17
|
+
*/
|
|
18
|
+
const ScrollRegion = React.forwardRef(({ label, as = "div", className, children, ...props }, ref) => {
|
|
19
|
+
const element = React.useRef(null);
|
|
20
|
+
const [overflowing, setOverflowing] = React.useState(false);
|
|
21
|
+
const setElement = (node) => {
|
|
22
|
+
element.current = node;
|
|
23
|
+
if (typeof ref === "function")
|
|
24
|
+
ref(node);
|
|
25
|
+
else if (ref)
|
|
26
|
+
ref.current = node;
|
|
27
|
+
};
|
|
28
|
+
/* No dependency list: the box and its children can change size on any render, so the observer is
|
|
29
|
+
re-attached with each one. A measurement that has not changed does not re-render. */
|
|
30
|
+
React.useEffect(() => {
|
|
31
|
+
const node = element.current;
|
|
32
|
+
if (!node)
|
|
33
|
+
return;
|
|
34
|
+
const measure = () => setOverflowing(node.scrollWidth > node.clientWidth || node.scrollHeight > node.clientHeight);
|
|
35
|
+
measure();
|
|
36
|
+
if (typeof ResizeObserver === "undefined")
|
|
37
|
+
return;
|
|
38
|
+
const observer = new ResizeObserver(measure);
|
|
39
|
+
observer.observe(node);
|
|
40
|
+
/* A table grows inside a box that keeps its size, so the box alone would never see the change. */
|
|
41
|
+
Array.from(node.children).forEach((child) => observer.observe(child));
|
|
42
|
+
return () => observer.disconnect();
|
|
43
|
+
});
|
|
44
|
+
return React.createElement(as, {
|
|
45
|
+
...props,
|
|
46
|
+
ref: setElement,
|
|
47
|
+
role: "region",
|
|
48
|
+
"aria-label": label,
|
|
49
|
+
tabIndex: overflowing ? 0 : undefined,
|
|
50
|
+
className: utils.cn("overflow-auto", ui_common.focusRing, className),
|
|
51
|
+
}, children);
|
|
52
|
+
});
|
|
53
|
+
ScrollRegion.displayName = "ScrollRegion";
|
|
54
|
+
|
|
55
|
+
exports.default = ScrollRegion;
|
|
56
|
+
//# sourceMappingURL=scroll-region.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-region.cjs","sources":["../../../src/components/scroll-region.tsx"],"sourcesContent":["\"use client\";\n\nimport { createElement, forwardRef, useEffect, useRef, useState, type HTMLAttributes } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { focusRing } from \"./ui.common\";\n\nexport interface ScrollRegionProps extends HTMLAttributes<HTMLElement> {\n /** The region's accessible name. A scrolling box with no name is not a landmark anyone can find. */\n label: string;\n /** `pre` keeps a code well's preformatted text; every other region is a `div`. */\n as?: \"div\" | \"pre\";\n}\n\n/*\n * A box that scrolls its own content, and that a keyboard can reach only when there is something to\n * scroll. A scrollable box with no focusable content is a scroll position no keyboard user can get\n * to (axe `scrollable-region-focusable`), but a box that fits has no business being a tab stop, so\n * it is not one. Overflow is measured rather than assumed: the same table is wide on a phone and\n * narrow on a desktop, and both the box and its content can change size while the page is open.\n * The `as` prop is typed with the div's ref, because a code well is never handed a ref.\n */\nconst ScrollRegion = forwardRef<HTMLDivElement, ScrollRegionProps>(({ label, as = \"div\", className, children, ...props }, ref) => {\n const element = useRef<HTMLElement | null>(null);\n const [overflowing, setOverflowing] = useState(false);\n\n const setElement = (node: HTMLElement | null) => {\n element.current = node;\n if (typeof ref === \"function\") ref(node as HTMLDivElement | null);\n else if (ref) ref.current = node as HTMLDivElement | null;\n };\n\n /* No dependency list: the box and its children can change size on any render, so the observer is\n re-attached with each one. A measurement that has not changed does not re-render. */\n useEffect(() => {\n const node = element.current;\n if (!node) return;\n\n const measure = () =>\n setOverflowing(node.scrollWidth > node.clientWidth || node.scrollHeight > node.clientHeight);\n measure();\n\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(measure);\n observer.observe(node);\n /* A table grows inside a box that keeps its size, so the box alone would never see the change. */\n Array.from(node.children).forEach((child) => observer.observe(child));\n return () => observer.disconnect();\n });\n\n return createElement(\n as,\n {\n ...props,\n ref: setElement,\n role: \"region\",\n \"aria-label\": label,\n tabIndex: overflowing ? 0 : undefined,\n className: cn(\"overflow-auto\", focusRing, className),\n },\n children\n );\n});\n\nScrollRegion.displayName = \"ScrollRegion\";\n\nexport default ScrollRegion;\n"],"names":["forwardRef","useRef","useState","useEffect","createElement","cn","focusRing"],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ const emptyTime = { hour: null, minute: null, afternoon: null };
|
|
|
26
26
|
/* A held reading is the same shallow held surface as a calendar day or a list option; a row answers
|
|
27
27
|
the pointer with tone, never compression. The column sits inside a `surface` sheet behind a 12px
|
|
28
28
|
inset, so its rows take the nested `row` corner. */
|
|
29
|
-
const optionClassName = `relative flex h-10 w-full shrink-0 select-none items-center justify-center
|
|
29
|
+
const optionClassName = `relative flex h-10 w-full shrink-0 select-none items-center justify-center [outline-style:none] ${ui_common.type.numeric} ${ui_common.shape.row} ${ui_common.text.high} ${ui_motion.motionFeedback} ${ui_common.focusRingInset}`;
|
|
30
30
|
function TimeColumn({ label, value, options, onValueChange, disabled, }) {
|
|
31
31
|
/* The column opens with its held reading in the middle, its neighbours visible on both sides.
|
|
32
32
|
This is placement, not navigation: it runs when the column mounts, and from then on Base keeps
|