@stackone/malachite 2.68.0 → 2.69.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/COMPONENTS.md +1 -0
- package/dist/components/DatePickerPanel.js +206 -188
- package/dist/components/DatePickerPanel.js.map +1 -1
- package/dist/components/ToastHost.js +59 -0
- package/dist/components/ToastHost.js.map +1 -0
- package/dist/components/ToastItem.js +51 -0
- package/dist/components/ToastItem.js.map +1 -0
- package/dist/components/ToastProvider.js +54 -0
- package/dist/components/ToastProvider.js.map +1 -0
- package/dist/components/dateMath.js +44 -44
- package/dist/components/dateMath.js.map +1 -1
- package/dist/components/overlayBehaviour.js +112 -107
- package/dist/components/overlayBehaviour.js.map +1 -1
- package/dist/components/portalOverlay.js +30 -24
- package/dist/components/portalOverlay.js.map +1 -1
- package/dist/components/toastContext.js +12 -0
- package/dist/components/toastContext.js.map +1 -0
- package/dist/components/toastTypes.js +6 -0
- package/dist/components/toastTypes.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +329 -325
- package/dist/index.js.map +1 -1
- package/dist/tailwind.css.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerPanel.js","sources":["../../src/components/DatePickerPanel.tsx"],"sourcesContent":["import React, { useEffect, useId, useLayoutEffect, useRef } from 'react';\nimport { Button } from './Button';\nimport CaretDoubleLeftIcon from './CustomIcons/CaretDoubleLeftIcon';\nimport CaretDoubleRightIcon from './CustomIcons/CaretDoubleRightIcon';\nimport CaretLeftIcon from './CustomIcons/CaretLeftIcon';\nimport CaretRightIcon from './CustomIcons/CaretRightIcon';\nimport SegmentedControl from './SegmentedControl';\nimport {\n type DatePickerPrecision,\n type DatePickerTimeZone,\n type DayKey,\n type MonthKey,\n type WeekStart,\n addDays,\n addMonths,\n addMonthsToDay,\n compareDays,\n dayKeyOf,\n dayKeyString,\n formatTimeReadout,\n monthLabel,\n monthWeeks,\n partsOf,\n sameDay,\n spokenDay,\n startOfWeek,\n weekdayLabels,\n} from './dateMath';\nimport {\n CELL_CLASS,\n DIVIDER_H,\n DIVIDER_V,\n HEADING_TEXT,\n LINK_BUTTON,\n LINK_HOVER,\n NAV_BUTTON,\n PRESET_BUTTON,\n PRESET_HOVER,\n RANGE_BAND,\n RANGE_BAND_SPAN,\n dayToneClass,\n} from './datePickerStyles';\nimport type { DateMinuteStep } from './datePickerTypes';\nimport { FOCUS_RING } from './focusRing';\n\nexport type Endpoint = 'start' | 'end';\nexport type TimeUnit = 'hours' | 'minutes' | 'seconds';\n\nexport interface Selection {\n start: Date | null;\n end: Date | null;\n}\n\ninterface DatePickerPanelProps {\n mode: 'single' | 'range';\n zone: DatePickerTimeZone;\n precision: DatePickerPrecision;\n minuteStep: DateMinuteStep;\n weekStart: WeekStart;\n view: MonthKey;\n onViewChange: (view: MonthKey) => void;\n focusDay: DayKey;\n onFocusDayChange: (day: DayKey) => void;\n draft: Selection;\n active: Endpoint;\n onActiveChange: (endpoint: Endpoint) => void;\n today: DayKey;\n isDayDisabled: (day: DayKey) => boolean;\n isMonthReachable: (month: MonthKey) => boolean;\n isTimeDisabled: (unit: TimeUnit, value: number) => boolean;\n onPickDay: (day: DayKey) => void;\n onPickTime: (unit: TimeUnit, value: number) => void;\n presets?: string[];\n onPreset: (index: number) => void;\n todayLabel: string;\n todayDisabled: boolean;\n onToday: () => void;\n showApply: boolean;\n applyDisabled: boolean;\n onApply: () => void;\n initialFocusRef: React.MutableRefObject<HTMLElement | null>;\n}\n\nconst TIME_ROW_PX = 40;\nconst TIME_COLUMN_HEIGHT_PX = 240;\n\nconst range = (count: number, step = 1): number[] =>\n Array.from({ length: Math.ceil(count / step) }, (_, index) => index * step);\n\nconst keyMove = (key: string, shift: boolean, day: DayKey, weekStart: WeekStart): DayKey | null => {\n switch (key) {\n case 'ArrowLeft':\n return addDays(day, -1);\n case 'ArrowRight':\n return addDays(day, 1);\n case 'ArrowUp':\n return addDays(day, -7);\n case 'ArrowDown':\n return addDays(day, 7);\n case 'Home':\n return startOfWeek(day, weekStart);\n case 'End':\n return addDays(startOfWeek(day, weekStart), 6);\n case 'PageUp':\n return addMonthsToDay(day, shift ? -12 : -1);\n case 'PageDown':\n return addMonthsToDay(day, shift ? 12 : 1);\n default:\n return null;\n }\n};\n\nconst MonthHeader: React.FC<{\n view: MonthKey;\n labelId: string;\n onViewChange: (view: MonthKey) => void;\n isMonthReachable: (month: MonthKey) => boolean;\n}> = ({ view, labelId, onViewChange, isMonthReachable }) => {\n const step = (amount: number) => {\n const target = addMonths(view, amount);\n return { target, disabled: !isMonthReachable(target) };\n };\n const prevMonth = step(-1);\n const prevYear = step(-12);\n const nextMonth = step(1);\n const nextYear = step(12);\n // aria-disabled: a natively disabled button drops focus to <body>.\n const go = ({ target, disabled }: { target: MonthKey; disabled: boolean }) => {\n if (!disabled) {\n onViewChange(target);\n }\n };\n return (\n <div className=\"flex items-center justify-between p-2\">\n <div className=\"flex items-center gap-0.5\">\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={prevMonth.disabled || undefined}\n onClick={() => go(prevMonth)}\n >\n <CaretLeftIcon size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Previous year\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={prevYear.disabled || undefined}\n onClick={() => go(prevYear)}\n >\n <CaretDoubleLeftIcon size={14} />\n </button>\n </div>\n <span id={labelId} aria-live=\"polite\" className={HEADING_TEXT}>\n {monthLabel(view)}\n </span>\n <div className=\"flex items-center gap-0.5\">\n <button\n type=\"button\"\n aria-label=\"Next month\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={nextMonth.disabled || undefined}\n onClick={() => go(nextMonth)}\n >\n <CaretRightIcon size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Next year\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={nextYear.disabled || undefined}\n onClick={() => go(nextYear)}\n >\n <CaretDoubleRightIcon size={14} />\n </button>\n </div>\n </div>\n );\n};\n\nconst bandSpan = (\n day: DayKey,\n start: DayKey | null,\n end: DayKey | null,\n): keyof typeof RANGE_BAND_SPAN | null => {\n if (!start || !end || compareDays(start, end) === 0) {\n return null;\n }\n if (sameDay(day, start)) {\n return 'start';\n }\n if (sameDay(day, end)) {\n return 'end';\n }\n return compareDays(day, start) > 0 && compareDays(day, end) < 0 ? 'middle' : null;\n};\n\nconst DayGrid: React.FC<\n Pick<\n DatePickerPanelProps,\n | 'mode'\n | 'zone'\n | 'weekStart'\n | 'view'\n | 'onViewChange'\n | 'focusDay'\n | 'onFocusDayChange'\n | 'draft'\n | 'today'\n | 'isDayDisabled'\n | 'isMonthReachable'\n | 'onPickDay'\n | 'initialFocusRef'\n > & { labelId: string }\n> = ({\n mode,\n zone,\n weekStart,\n view,\n onViewChange,\n focusDay,\n onFocusDayChange,\n draft,\n today,\n isDayDisabled,\n isMonthReachable,\n onPickDay,\n initialFocusRef,\n labelId,\n}) => {\n const gridRef = useRef<HTMLDivElement>(null);\n const moveFocus = useRef(false);\n const weeks = monthWeeks(view, weekStart);\n const start = draft.start ? dayKeyOf(draft.start, zone) : null;\n const end = mode === 'range' && draft.end ? dayKeyOf(draft.end, zone) : null;\n const focusInView = weeks.some((week) => week.some((day) => sameDay(day, focusDay)));\n const tabStop = focusInView ? focusDay : { ...view, day: 1 };\n\n useEffect(() => {\n if (!moveFocus.current) {\n return;\n }\n moveFocus.current = false;\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${dayKeyString(focusDay)}\"]`)\n ?.focus({ preventScroll: true });\n }, [focusDay]);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (!isDayDisabled(tabStop)) {\n onPickDay(tabStop);\n }\n return;\n }\n const next = keyMove(event.key, event.shiftKey, tabStop, weekStart);\n if (!next) {\n return;\n }\n event.preventDefault();\n const leavesView = next.month !== view.month || next.year !== view.year;\n if (leavesView && !isMonthReachable(next)) {\n return;\n }\n if (leavesView) {\n onViewChange({ year: next.year, month: next.month });\n }\n moveFocus.current = true;\n onFocusDayChange(next);\n };\n\n const weekdays = weekdayLabels(weekStart);\n\n return (\n <div\n ref={gridRef}\n role=\"grid\"\n aria-labelledby={labelId}\n aria-multiselectable={mode === 'range' || undefined}\n className=\"flex w-[276px] flex-col\"\n onKeyDown={handleKeyDown}\n >\n <div role=\"row\" className=\"grid grid-cols-7 px-[14px] py-2\">\n {weekdays.map((weekday) => (\n <span\n key={weekday.short}\n role=\"columnheader\"\n aria-label={weekday.long}\n className={`flex h-6 items-center justify-center ${HEADING_TEXT}`}\n >\n {weekday.short}\n </span>\n ))}\n </div>\n {weeks.map((week) => (\n <div\n key={dayKeyString(week[0])}\n role=\"row\"\n className=\"grid grid-cols-7 px-[14px] py-2\"\n >\n {week.map((day) => {\n const key = dayKeyString(day);\n const disabled = isDayDisabled(day);\n const band = mode === 'range' ? bandSpan(day, start, end) : null;\n const selected =\n sameDay(day, start) || sameDay(day, end) || band === 'middle';\n const endpoint = sameDay(day, start) || sameDay(day, end);\n const isToday = sameDay(day, today);\n const outside = day.month !== view.month;\n const isTabStop = sameDay(day, tabStop);\n return (\n <div\n key={key}\n role=\"presentation\"\n className=\"relative flex h-6 items-center justify-center\"\n >\n {band && (\n <span\n aria-hidden=\"true\"\n className={`${RANGE_BAND} ${RANGE_BAND_SPAN[band]}`}\n />\n )}\n <button\n ref={\n isTabStop\n ? (node) => {\n initialFocusRef.current = node;\n }\n : undefined\n }\n type=\"button\"\n role=\"gridcell\"\n aria-selected={selected}\n data-day={key}\n tabIndex={isTabStop ? 0 : -1}\n aria-label={spokenDay(day)}\n aria-current={isToday ? 'date' : undefined}\n aria-disabled={disabled || undefined}\n className={`${CELL_CLASS(disabled)} ${dayToneClass({\n selected: endpoint,\n today: isToday,\n outside,\n disabled,\n })}`}\n onClick={() => {\n onFocusDayChange(day);\n if (!disabled) {\n onPickDay(day);\n }\n }}\n >\n {day.day}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n};\n\nconst TimeColumn: React.FC<{\n label: string;\n values: number[];\n selected: number | null;\n isDisabled: (value: number) => boolean;\n onPick: (value: number) => void;\n}> = ({ label, values, selected, isDisabled, onPick }) => {\n const listRef = useRef<HTMLDivElement>(null);\n const parkedIndex =\n selected === null ? -1 : values.filter((value) => value <= selected).length - 1;\n\n // A write, never a layout read.\n useLayoutEffect(() => {\n if (listRef.current && parkedIndex >= 0) {\n listRef.current.scrollTop = parkedIndex * TIME_ROW_PX;\n }\n }, [parkedIndex]);\n\n const firstEnabled = Math.max(\n 0,\n values.findIndex((value) => !isDisabled(value)),\n );\n const tabIndexOf = (index: number) =>\n index === (parkedIndex >= 0 ? parkedIndex : firstEnabled) ? 0 : -1;\n\n const pickAt = (index: number, focus: boolean) => {\n const value = values[index];\n if (value === undefined || isDisabled(value)) {\n return;\n }\n onPick(value);\n if (focus) {\n listRef.current\n ?.querySelector<HTMLElement>(`[data-value=\"${value}\"]`)\n ?.focus({ preventScroll: true });\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const from = parkedIndex >= 0 ? parkedIndex : -1;\n const delta: Record<string, number> = {\n ArrowDown: 1,\n ArrowUp: -1,\n PageDown: 5,\n PageUp: -5,\n };\n let target: number | null = null;\n if (event.key in delta) {\n target = from < 0 ? firstEnabled : from + delta[event.key];\n const step = Math.sign(delta[event.key]);\n while (target >= 0 && target < values.length && isDisabled(values[target])) {\n target += step;\n }\n } else if (event.key === 'Home') {\n target = values.findIndex((value) => !isDisabled(value));\n } else if (event.key === 'End') {\n target = values.length - 1;\n while (target >= 0 && isDisabled(values[target])) {\n target -= 1;\n }\n }\n if (target === null) {\n return;\n }\n event.preventDefault();\n pickAt(target, true);\n };\n\n return (\n <div\n ref={listRef}\n role=\"listbox\"\n aria-label={label}\n className=\"flex flex-col items-center overflow-y-auto overscroll-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n style={{ height: TIME_COLUMN_HEIGHT_PX }}\n onKeyDown={handleKeyDown}\n >\n {values.map((value, index) => {\n const disabled = isDisabled(value);\n const isSelected = value === selected;\n return (\n <div key={value} className=\"flex shrink-0 items-center py-2\">\n <button\n type=\"button\"\n role=\"option\"\n data-value={value}\n aria-selected={isSelected}\n aria-disabled={disabled || undefined}\n tabIndex={tabIndexOf(index)}\n className={`${CELL_CLASS(disabled)} ${dayToneClass({\n selected: isSelected,\n today: false,\n outside: false,\n disabled,\n })}`}\n onClick={() => pickAt(index, false)}\n >\n {String(value).padStart(2, '0')}\n </button>\n </div>\n );\n })}\n </div>\n );\n};\n\nconst TimePanel: React.FC<\n Pick<\n DatePickerPanelProps,\n | 'mode'\n | 'zone'\n | 'precision'\n | 'minuteStep'\n | 'draft'\n | 'active'\n | 'onActiveChange'\n | 'isTimeDisabled'\n | 'onPickTime'\n >\n> = ({\n mode,\n zone,\n precision,\n minuteStep,\n draft,\n active,\n onActiveChange,\n isTimeDisabled,\n onPickTime,\n}) => {\n const target = mode === 'range' ? draft[active] : draft.start;\n const parts = target ? partsOf(target, zone) : null;\n const columns: { unit: TimeUnit; label: string; values: number[] }[] = [\n { unit: 'hours', label: 'Hours', values: range(24) },\n { unit: 'minutes', label: 'Minutes', values: range(60, minuteStep) },\n ...(precision === 'second'\n ? [{ unit: 'seconds' as const, label: 'Seconds', values: range(60) }]\n : []),\n ];\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex min-h-8 items-center justify-center p-2\">\n {mode === 'range' ? (\n <SegmentedControl<Endpoint>\n size=\"small\"\n aria-label=\"Time for\"\n value={active}\n onChange={onActiveChange}\n options={[\n { value: 'start', label: 'Start' },\n { value: 'end', label: 'End' },\n ]}\n />\n ) : (\n <span className={`${HEADING_TEXT} whitespace-nowrap`}>\n {formatTimeReadout(target, zone, precision)}\n </span>\n )}\n </div>\n <div className={DIVIDER_H} />\n <div\n className=\"grid px-[14px]\"\n style={{ gridTemplateColumns: `repeat(${columns.length}, 35.67px)` }}\n >\n {columns.map((column) => (\n <TimeColumn\n key={column.unit}\n label={column.label}\n values={column.values}\n selected={parts ? parts[column.unit] : null}\n isDisabled={(value) => isTimeDisabled(column.unit, value)}\n onPick={(value) => onPickTime(column.unit, value)}\n />\n ))}\n </div>\n </div>\n );\n};\n\nconst PresetList: React.FC<{ presets: string[]; onPreset: (index: number) => void }> = ({\n presets,\n onPreset,\n}) => (\n <div className=\"flex w-36 flex-col gap-0.5 p-1\" role=\"group\" aria-label=\"Presets\">\n {presets.map((label, index) => (\n <button\n key={label}\n type=\"button\"\n className={`${PRESET_BUTTON} ${PRESET_HOVER} ${FOCUS_RING}`}\n onClick={() => onPreset(index)}\n >\n {label}\n </button>\n ))}\n </div>\n);\n\nconst DatePickerPanel: React.FC<DatePickerPanelProps> = (props) => {\n const labelId = `${useId().replace(/[^a-zA-Z0-9_-]/g, '')}-month`;\n const {\n presets,\n onPreset,\n precision,\n todayLabel,\n todayDisabled,\n onToday,\n showApply,\n applyDisabled,\n onApply,\n } = props;\n return (\n <div className=\"flex flex-col gap-1 p-1.5\">\n {props.mode === 'range' && (\n <span className=\"sr-only\" aria-live=\"polite\">\n {props.active === 'end' && props.draft.start && !props.draft.end\n ? 'Choose the end date'\n : ''}\n </span>\n )}\n <div className=\"flex\">\n {presets && presets.length > 0 && (\n <>\n <PresetList presets={presets} onPreset={onPreset} />\n <div className={`${DIVIDER_V} mx-1`} />\n </>\n )}\n <div className=\"flex flex-col gap-1\">\n <MonthHeader\n view={props.view}\n labelId={labelId}\n onViewChange={props.onViewChange}\n isMonthReachable={props.isMonthReachable}\n />\n <div className={DIVIDER_H} />\n <DayGrid {...props} labelId={labelId} />\n </div>\n {precision !== 'day' && (\n <>\n <div className={DIVIDER_V} />\n <TimePanel {...props} />\n </>\n )}\n </div>\n <div className={DIVIDER_H} />\n <div\n className={`flex items-center p-2 ${showApply ? 'justify-between' : 'justify-center'}`}\n >\n <button\n type=\"button\"\n className={`${LINK_BUTTON} ${LINK_HOVER} ${FOCUS_RING}`}\n disabled={todayDisabled}\n onClick={onToday}\n >\n {todayLabel}\n </button>\n {showApply && (\n <Button\n size=\"small\"\n variant=\"filled\"\n disabled={applyDisabled}\n onClick={onApply}\n >\n Apply\n </Button>\n )}\n </div>\n </div>\n );\n};\n\nexport default DatePickerPanel;\n"],"names":["TIME_ROW_PX","TIME_COLUMN_HEIGHT_PX","range","count","step","_","index","keyMove","key","shift","day","weekStart","addDays","startOfWeek","addMonthsToDay","MonthHeader","view","labelId","onViewChange","isMonthReachable","amount","target","addMonths","prevMonth","prevYear","nextMonth","nextYear","go","disabled","jsxs","jsx","NAV_BUTTON","FOCUS_RING","CaretLeftIcon","CaretDoubleLeftIcon","HEADING_TEXT","monthLabel","CaretRightIcon","CaretDoubleRightIcon","bandSpan","start","end","compareDays","sameDay","DayGrid","mode","zone","focusDay","onFocusDayChange","draft","today","isDayDisabled","onPickDay","initialFocusRef","gridRef","useRef","moveFocus","weeks","monthWeeks","dayKeyOf","tabStop","week","useEffect","_b","_a","dayKeyString","handleKeyDown","event","next","leavesView","weekdays","weekdayLabels","weekday","band","selected","endpoint","isToday","outside","isTabStop","RANGE_BAND","RANGE_BAND_SPAN","node","spokenDay","CELL_CLASS","dayToneClass","TimeColumn","label","values","isDisabled","onPick","listRef","parkedIndex","value","useLayoutEffect","firstEnabled","tabIndexOf","pickAt","focus","from","delta","isSelected","TimePanel","precision","minuteStep","active","onActiveChange","isTimeDisabled","onPickTime","parts","partsOf","columns","SegmentedControl","formatTimeReadout","DIVIDER_H","column","PresetList","presets","onPreset","PRESET_BUTTON","PRESET_HOVER","DatePickerPanel","props","useId","todayLabel","todayDisabled","onToday","showApply","applyDisabled","onApply","Fragment","DIVIDER_V","LINK_BUTTON","LINK_HOVER","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePickerPanel.js","sources":["../../src/components/DatePickerPanel.tsx"],"sourcesContent":["import React, { useEffect, useId, useLayoutEffect, useRef } from 'react';\nimport { Button } from './Button';\nimport CaretDoubleLeftIcon from './CustomIcons/CaretDoubleLeftIcon';\nimport CaretDoubleRightIcon from './CustomIcons/CaretDoubleRightIcon';\nimport CaretLeftIcon from './CustomIcons/CaretLeftIcon';\nimport CaretRightIcon from './CustomIcons/CaretRightIcon';\nimport SegmentedControl from './SegmentedControl';\nimport {\n type DatePickerPrecision,\n type DatePickerTimeZone,\n type DayKey,\n type MonthKey,\n type WeekStart,\n addDays,\n addMonths,\n addMonthsToDay,\n compareDays,\n dayKeyOf,\n dayKeyString,\n daysInMonth,\n formatTimeReadout,\n monthLabel,\n monthWeeks,\n partsOf,\n sameDay,\n spokenDay,\n startOfWeek,\n weekdayLabels,\n} from './dateMath';\nimport {\n CELL_CLASS,\n DIVIDER_H,\n DIVIDER_V,\n HEADING_TEXT,\n LINK_BUTTON,\n LINK_HOVER,\n NAV_BUTTON,\n PRESET_BUTTON,\n PRESET_HOVER,\n RANGE_BAND,\n RANGE_BAND_SPAN,\n dayToneClass,\n} from './datePickerStyles';\nimport type { DateMinuteStep } from './datePickerTypes';\nimport { FOCUS_RING } from './focusRing';\n\nexport type Endpoint = 'start' | 'end';\nexport type TimeUnit = 'hours' | 'minutes' | 'seconds';\n\nexport interface Selection {\n start: Date | null;\n end: Date | null;\n}\n\ninterface DatePickerPanelProps {\n mode: 'single' | 'range';\n zone: DatePickerTimeZone;\n precision: DatePickerPrecision;\n minuteStep: DateMinuteStep;\n weekStart: WeekStart;\n view: MonthKey;\n onViewChange: (view: MonthKey) => void;\n focusDay: DayKey;\n onFocusDayChange: (day: DayKey) => void;\n draft: Selection;\n active: Endpoint;\n onActiveChange: (endpoint: Endpoint) => void;\n today: DayKey;\n isDayDisabled: (day: DayKey) => boolean;\n isMonthReachable: (month: MonthKey) => boolean;\n isTimeDisabled: (unit: TimeUnit, value: number) => boolean;\n onPickDay: (day: DayKey) => void;\n onPickTime: (unit: TimeUnit, value: number) => void;\n presets?: string[];\n onPreset: (index: number) => void;\n todayLabel: string;\n todayDisabled: boolean;\n onToday: () => void;\n showApply: boolean;\n applyDisabled: boolean;\n onApply: () => void;\n initialFocusRef: React.MutableRefObject<HTMLElement | null>;\n}\n\nconst TIME_ROW_PX = 40;\nconst TIME_COLUMN_HEIGHT_PX = 240;\n\nconst range = (count: number, step = 1): number[] =>\n Array.from({ length: Math.ceil(count / step) }, (_, index) => index * step);\n\nconst keyMove = (key: string, shift: boolean, day: DayKey, weekStart: WeekStart): DayKey | null => {\n switch (key) {\n case 'ArrowLeft':\n return addDays(day, -1);\n case 'ArrowRight':\n return addDays(day, 1);\n case 'ArrowUp':\n return addDays(day, -7);\n case 'ArrowDown':\n return addDays(day, 7);\n case 'Home':\n return startOfWeek(day, weekStart);\n case 'End':\n return addDays(startOfWeek(day, weekStart), 6);\n case 'PageUp':\n return addMonthsToDay(day, shift ? -12 : -1);\n case 'PageDown':\n return addMonthsToDay(day, shift ? 12 : 1);\n default:\n return null;\n }\n};\n\nconst carriedDay = (\n target: MonthKey,\n dayOfMonth: number,\n isDayDisabled: (day: DayKey) => boolean,\n): DayKey => {\n const last = daysInMonth(target);\n const wanted = Math.min(dayOfMonth, last);\n for (let offset = 0; offset < last; offset++) {\n for (const day of [wanted - offset, wanted + offset]) {\n if (day >= 1 && day <= last && !isDayDisabled({ ...target, day })) {\n return { ...target, day };\n }\n }\n }\n return { ...target, day: wanted };\n};\n\nconst MonthHeader: React.FC<{\n view: MonthKey;\n labelId: string;\n onViewChange: (view: MonthKey) => void;\n focusDay: DayKey;\n onFocusDayChange: (day: DayKey) => void;\n isDayDisabled: (day: DayKey) => boolean;\n isMonthReachable: (month: MonthKey) => boolean;\n}> = ({\n view,\n labelId,\n onViewChange,\n focusDay,\n onFocusDayChange,\n isDayDisabled,\n isMonthReachable,\n}) => {\n const step = (amount: number) => {\n const target = addMonths(view, amount);\n return { target, disabled: !isMonthReachable(target) };\n };\n const prevMonth = step(-1);\n const prevYear = step(-12);\n const nextMonth = step(1);\n const nextYear = step(12);\n // aria-disabled: a natively disabled button drops focus to <body>.\n const go = ({ target, disabled }: { target: MonthKey; disabled: boolean }) => {\n if (!disabled) {\n onViewChange(target);\n onFocusDayChange(carriedDay(target, focusDay.day, isDayDisabled));\n }\n };\n return (\n <div className=\"flex items-center justify-between p-2\">\n <div className=\"flex items-center gap-0.5\">\n <button\n type=\"button\"\n aria-label=\"Previous year\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={prevYear.disabled || undefined}\n onClick={() => go(prevYear)}\n >\n <CaretDoubleLeftIcon size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={prevMonth.disabled || undefined}\n onClick={() => go(prevMonth)}\n >\n <CaretLeftIcon size={14} />\n </button>\n </div>\n <span id={labelId} aria-live=\"polite\" className={HEADING_TEXT}>\n {monthLabel(view)}\n </span>\n <div className=\"flex items-center gap-0.5\">\n <button\n type=\"button\"\n aria-label=\"Next month\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={nextMonth.disabled || undefined}\n onClick={() => go(nextMonth)}\n >\n <CaretRightIcon size={14} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Next year\"\n className={`${NAV_BUTTON} ${FOCUS_RING}`}\n aria-disabled={nextYear.disabled || undefined}\n onClick={() => go(nextYear)}\n >\n <CaretDoubleRightIcon size={14} />\n </button>\n </div>\n </div>\n );\n};\n\nconst bandSpan = (\n day: DayKey,\n start: DayKey | null,\n end: DayKey | null,\n): keyof typeof RANGE_BAND_SPAN | null => {\n if (!start || !end || compareDays(start, end) === 0) {\n return null;\n }\n if (sameDay(day, start)) {\n return 'start';\n }\n if (sameDay(day, end)) {\n return 'end';\n }\n return compareDays(day, start) > 0 && compareDays(day, end) < 0 ? 'middle' : null;\n};\n\nconst DayGrid: React.FC<\n Pick<\n DatePickerPanelProps,\n | 'mode'\n | 'zone'\n | 'weekStart'\n | 'view'\n | 'onViewChange'\n | 'focusDay'\n | 'onFocusDayChange'\n | 'draft'\n | 'today'\n | 'isDayDisabled'\n | 'isMonthReachable'\n | 'onPickDay'\n | 'initialFocusRef'\n > & { labelId: string }\n> = ({\n mode,\n zone,\n weekStart,\n view,\n onViewChange,\n focusDay,\n onFocusDayChange,\n draft,\n today,\n isDayDisabled,\n isMonthReachable,\n onPickDay,\n initialFocusRef,\n labelId,\n}) => {\n const gridRef = useRef<HTMLDivElement>(null);\n const moveFocus = useRef(false);\n const weeks = monthWeeks(view, weekStart);\n const start = draft.start ? dayKeyOf(draft.start, zone) : null;\n const end = mode === 'range' && draft.end ? dayKeyOf(draft.end, zone) : null;\n const focusInView = weeks.some((week) => week.some((day) => sameDay(day, focusDay)));\n const tabStop = focusInView ? focusDay : { ...view, day: 1 };\n\n useEffect(() => {\n if (!moveFocus.current) {\n return;\n }\n moveFocus.current = false;\n gridRef.current\n ?.querySelector<HTMLElement>(`[data-day=\"${dayKeyString(focusDay)}\"]`)\n ?.focus({ preventScroll: true });\n }, [focusDay]);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n if (!isDayDisabled(tabStop)) {\n onPickDay(tabStop);\n }\n return;\n }\n const next = keyMove(event.key, event.shiftKey, tabStop, weekStart);\n if (!next) {\n return;\n }\n event.preventDefault();\n const leavesView = next.month !== view.month || next.year !== view.year;\n if (leavesView && !isMonthReachable(next)) {\n return;\n }\n if (leavesView) {\n onViewChange({ year: next.year, month: next.month });\n }\n moveFocus.current = true;\n onFocusDayChange(next);\n };\n\n const weekdays = weekdayLabels(weekStart);\n\n return (\n <div\n ref={gridRef}\n role=\"grid\"\n aria-labelledby={labelId}\n aria-multiselectable={mode === 'range' || undefined}\n className=\"flex w-[276px] flex-col\"\n onKeyDown={handleKeyDown}\n >\n <div role=\"row\" className=\"grid grid-cols-7 px-[14px] py-2\">\n {weekdays.map((weekday) => (\n <span\n key={weekday.short}\n role=\"columnheader\"\n aria-label={weekday.long}\n className={`flex h-6 items-center justify-center ${HEADING_TEXT}`}\n >\n {weekday.short}\n </span>\n ))}\n </div>\n {weeks.map((week) => (\n <div\n key={dayKeyString(week[0])}\n role=\"row\"\n className=\"grid grid-cols-7 px-[14px] py-2\"\n >\n {week.map((day) => {\n const key = dayKeyString(day);\n const disabled = isDayDisabled(day);\n const band = mode === 'range' ? bandSpan(day, start, end) : null;\n const selected =\n sameDay(day, start) || sameDay(day, end) || band === 'middle';\n const endpoint = sameDay(day, start) || sameDay(day, end);\n const isToday = sameDay(day, today);\n const outside = day.month !== view.month;\n const isTabStop = sameDay(day, tabStop);\n return (\n <div\n key={key}\n role=\"presentation\"\n className=\"relative flex h-6 items-center justify-center\"\n >\n {band && (\n <span\n aria-hidden=\"true\"\n className={`${RANGE_BAND} ${RANGE_BAND_SPAN[band]}`}\n />\n )}\n <button\n ref={\n isTabStop\n ? (node) => {\n initialFocusRef.current = node;\n }\n : undefined\n }\n type=\"button\"\n role=\"gridcell\"\n aria-selected={selected}\n data-day={key}\n tabIndex={isTabStop ? 0 : -1}\n aria-label={spokenDay(day)}\n aria-current={isToday ? 'date' : undefined}\n aria-disabled={disabled || undefined}\n className={`${CELL_CLASS(disabled)} ${dayToneClass({\n selected: endpoint,\n today: isToday,\n outside,\n disabled,\n })}`}\n onClick={() => {\n onFocusDayChange(day);\n if (!disabled) {\n onPickDay(day);\n }\n }}\n >\n {day.day}\n </button>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n );\n};\n\nconst TimeColumn: React.FC<{\n label: string;\n values: number[];\n selected: number | null;\n isDisabled: (value: number) => boolean;\n onPick: (value: number) => void;\n}> = ({ label, values, selected, isDisabled, onPick }) => {\n const listRef = useRef<HTMLDivElement>(null);\n const parkedIndex =\n selected === null ? -1 : values.filter((value) => value <= selected).length - 1;\n\n // A write, never a layout read.\n useLayoutEffect(() => {\n if (listRef.current && parkedIndex >= 0) {\n listRef.current.scrollTop = parkedIndex * TIME_ROW_PX;\n }\n }, [parkedIndex]);\n\n const firstEnabled = Math.max(\n 0,\n values.findIndex((value) => !isDisabled(value)),\n );\n const tabIndexOf = (index: number) =>\n index === (parkedIndex >= 0 ? parkedIndex : firstEnabled) ? 0 : -1;\n\n const pickAt = (index: number, focus: boolean) => {\n const value = values[index];\n if (value === undefined || isDisabled(value)) {\n return;\n }\n onPick(value);\n if (focus) {\n listRef.current\n ?.querySelector<HTMLElement>(`[data-value=\"${value}\"]`)\n ?.focus({ preventScroll: true });\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const from = parkedIndex >= 0 ? parkedIndex : -1;\n const delta: Record<string, number> = {\n ArrowDown: 1,\n ArrowUp: -1,\n PageDown: 5,\n PageUp: -5,\n };\n let target: number | null = null;\n if (event.key in delta) {\n target = from < 0 ? firstEnabled : from + delta[event.key];\n const step = Math.sign(delta[event.key]);\n while (target >= 0 && target < values.length && isDisabled(values[target])) {\n target += step;\n }\n } else if (event.key === 'Home') {\n target = values.findIndex((value) => !isDisabled(value));\n } else if (event.key === 'End') {\n target = values.length - 1;\n while (target >= 0 && isDisabled(values[target])) {\n target -= 1;\n }\n }\n if (target === null) {\n return;\n }\n event.preventDefault();\n pickAt(target, true);\n };\n\n return (\n <div\n ref={listRef}\n role=\"listbox\"\n aria-label={label}\n className=\"flex flex-col items-center overflow-y-auto overscroll-contain [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n style={{ height: TIME_COLUMN_HEIGHT_PX }}\n onKeyDown={handleKeyDown}\n >\n {values.map((value, index) => {\n const disabled = isDisabled(value);\n const isSelected = value === selected;\n return (\n <div key={value} className=\"flex shrink-0 items-center py-2\">\n <button\n type=\"button\"\n role=\"option\"\n data-value={value}\n aria-selected={isSelected}\n aria-disabled={disabled || undefined}\n tabIndex={tabIndexOf(index)}\n className={`${CELL_CLASS(disabled)} ${dayToneClass({\n selected: isSelected,\n today: false,\n outside: false,\n disabled,\n })}`}\n onClick={() => pickAt(index, false)}\n >\n {String(value).padStart(2, '0')}\n </button>\n </div>\n );\n })}\n </div>\n );\n};\n\nconst TimePanel: React.FC<\n Pick<\n DatePickerPanelProps,\n | 'mode'\n | 'zone'\n | 'precision'\n | 'minuteStep'\n | 'draft'\n | 'active'\n | 'onActiveChange'\n | 'isTimeDisabled'\n | 'onPickTime'\n >\n> = ({\n mode,\n zone,\n precision,\n minuteStep,\n draft,\n active,\n onActiveChange,\n isTimeDisabled,\n onPickTime,\n}) => {\n const target = mode === 'range' ? draft[active] : draft.start;\n const parts = target ? partsOf(target, zone) : null;\n const columns: { unit: TimeUnit; label: string; values: number[] }[] = [\n { unit: 'hours', label: 'Hours', values: range(24) },\n { unit: 'minutes', label: 'Minutes', values: range(60, minuteStep) },\n ...(precision === 'second'\n ? [{ unit: 'seconds' as const, label: 'Seconds', values: range(60) }]\n : []),\n ];\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex min-h-8 items-center justify-center p-2\">\n {mode === 'range' ? (\n <SegmentedControl<Endpoint>\n size=\"small\"\n aria-label=\"Time for\"\n value={active}\n onChange={onActiveChange}\n options={[\n { value: 'start', label: 'Start' },\n { value: 'end', label: 'End' },\n ]}\n />\n ) : (\n <span className={`${HEADING_TEXT} whitespace-nowrap`}>\n {formatTimeReadout(target, zone, precision)}\n </span>\n )}\n </div>\n <div className={DIVIDER_H} />\n <div\n className=\"grid px-[14px]\"\n style={{ gridTemplateColumns: `repeat(${columns.length}, 35.67px)` }}\n >\n {columns.map((column) => (\n <TimeColumn\n key={column.unit}\n label={column.label}\n values={column.values}\n selected={parts ? parts[column.unit] : null}\n isDisabled={(value) => isTimeDisabled(column.unit, value)}\n onPick={(value) => onPickTime(column.unit, value)}\n />\n ))}\n </div>\n </div>\n );\n};\n\nconst PresetList: React.FC<{ presets: string[]; onPreset: (index: number) => void }> = ({\n presets,\n onPreset,\n}) => (\n <div className=\"flex w-36 flex-col gap-0.5 p-1\" role=\"group\" aria-label=\"Presets\">\n {presets.map((label, index) => (\n <button\n key={label}\n type=\"button\"\n className={`${PRESET_BUTTON} ${PRESET_HOVER} ${FOCUS_RING}`}\n onClick={() => onPreset(index)}\n >\n {label}\n </button>\n ))}\n </div>\n);\n\nconst DatePickerPanel: React.FC<DatePickerPanelProps> = (props) => {\n const labelId = `${useId().replace(/[^a-zA-Z0-9_-]/g, '')}-month`;\n const {\n presets,\n onPreset,\n precision,\n todayLabel,\n todayDisabled,\n onToday,\n showApply,\n applyDisabled,\n onApply,\n } = props;\n return (\n <div className=\"flex flex-col gap-1 p-1.5\">\n {props.mode === 'range' && (\n <span className=\"sr-only\" aria-live=\"polite\">\n {props.active === 'end' && props.draft.start && !props.draft.end\n ? 'Choose the end date'\n : ''}\n </span>\n )}\n <div className=\"flex\">\n {presets && presets.length > 0 && (\n <>\n <PresetList presets={presets} onPreset={onPreset} />\n <div className={`${DIVIDER_V} mx-1`} />\n </>\n )}\n <div className=\"flex flex-col gap-1\">\n <MonthHeader\n view={props.view}\n labelId={labelId}\n onViewChange={props.onViewChange}\n focusDay={props.focusDay}\n onFocusDayChange={props.onFocusDayChange}\n isDayDisabled={props.isDayDisabled}\n isMonthReachable={props.isMonthReachable}\n />\n <div className={DIVIDER_H} />\n <DayGrid {...props} labelId={labelId} />\n </div>\n {precision !== 'day' && (\n <>\n <div className={DIVIDER_V} />\n <TimePanel {...props} />\n </>\n )}\n </div>\n <div className={DIVIDER_H} />\n <div\n className={`flex items-center p-2 ${showApply ? 'justify-between' : 'justify-center'}`}\n >\n <button\n type=\"button\"\n className={`${LINK_BUTTON} ${LINK_HOVER} ${FOCUS_RING}`}\n disabled={todayDisabled}\n onClick={onToday}\n >\n {todayLabel}\n </button>\n {showApply && (\n <Button\n size=\"small\"\n variant=\"filled\"\n disabled={applyDisabled}\n onClick={onApply}\n >\n Apply\n </Button>\n )}\n </div>\n </div>\n );\n};\n\nexport default DatePickerPanel;\n"],"names":["TIME_ROW_PX","TIME_COLUMN_HEIGHT_PX","range","count","step","_","index","keyMove","key","shift","day","weekStart","addDays","startOfWeek","addMonthsToDay","carriedDay","target","dayOfMonth","isDayDisabled","last","daysInMonth","wanted","offset","MonthHeader","view","labelId","onViewChange","focusDay","onFocusDayChange","isMonthReachable","amount","addMonths","prevMonth","prevYear","nextMonth","nextYear","go","disabled","jsxs","jsx","NAV_BUTTON","FOCUS_RING","CaretDoubleLeftIcon","CaretLeftIcon","HEADING_TEXT","monthLabel","CaretRightIcon","CaretDoubleRightIcon","bandSpan","start","end","compareDays","sameDay","DayGrid","mode","zone","draft","today","onPickDay","initialFocusRef","gridRef","useRef","moveFocus","weeks","monthWeeks","dayKeyOf","tabStop","week","useEffect","_b","_a","dayKeyString","handleKeyDown","event","next","leavesView","weekdays","weekdayLabels","weekday","band","selected","endpoint","isToday","outside","isTabStop","RANGE_BAND","RANGE_BAND_SPAN","node","spokenDay","CELL_CLASS","dayToneClass","TimeColumn","label","values","isDisabled","onPick","listRef","parkedIndex","value","useLayoutEffect","firstEnabled","tabIndexOf","pickAt","focus","from","delta","isSelected","TimePanel","precision","minuteStep","active","onActiveChange","isTimeDisabled","onPickTime","parts","partsOf","columns","SegmentedControl","formatTimeReadout","DIVIDER_H","column","PresetList","presets","onPreset","PRESET_BUTTON","PRESET_HOVER","DatePickerPanel","props","useId","todayLabel","todayDisabled","onToday","showApply","applyDisabled","onApply","Fragment","DIVIDER_V","LINK_BUTTON","LINK_HOVER","Button"],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as a, useLayoutEffect as n } from "react";
|
|
3
|
+
import { createPortal as c } from "react-dom";
|
|
4
|
+
import { ShadowRootWrapper as l } from "../ShadowRootWrapper.js";
|
|
5
|
+
import d from "./ToastItem.js";
|
|
6
|
+
import { keepAboveOverlayStack as u } from "./overlayBehaviour.js";
|
|
7
|
+
import { ensureToastStyles as h, overlayIdentity as v } from "./portalOverlay.js";
|
|
8
|
+
import { leaveTopLayer as x, raiseToTopLayer as y } from "./topLayer.js";
|
|
9
|
+
const T = {
|
|
10
|
+
position: "fixed",
|
|
11
|
+
top: 0,
|
|
12
|
+
left: 0,
|
|
13
|
+
right: 0,
|
|
14
|
+
pointerEvents: "none"
|
|
15
|
+
}, w = ({ toasts: t, duration: m, onDismiss: f }) => {
|
|
16
|
+
var p;
|
|
17
|
+
const e = a(null), r = (p = t[t.length - 1]) == null ? void 0 : p.id;
|
|
18
|
+
n(() => {
|
|
19
|
+
h();
|
|
20
|
+
}, []), n(() => {
|
|
21
|
+
const o = e.current;
|
|
22
|
+
if (o) {
|
|
23
|
+
if (r === void 0) {
|
|
24
|
+
x(o);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
y(o);
|
|
28
|
+
}
|
|
29
|
+
}, [r]);
|
|
30
|
+
const s = r !== void 0;
|
|
31
|
+
return n(() => {
|
|
32
|
+
const o = e.current;
|
|
33
|
+
if (!(!o || !s))
|
|
34
|
+
return u(o);
|
|
35
|
+
}, [s]), c(
|
|
36
|
+
/* @__PURE__ */ i(
|
|
37
|
+
l,
|
|
38
|
+
{
|
|
39
|
+
hostRef: e,
|
|
40
|
+
hostStyle: T,
|
|
41
|
+
hostProps: v("toast"),
|
|
42
|
+
children: /* @__PURE__ */ i("div", { className: "flex flex-col items-center gap-[8px] px-[16px] pt-[24px]", children: t.map((o) => /* @__PURE__ */ i(
|
|
43
|
+
d,
|
|
44
|
+
{
|
|
45
|
+
toast: o,
|
|
46
|
+
duration: m,
|
|
47
|
+
onDismiss: f
|
|
48
|
+
},
|
|
49
|
+
o.id
|
|
50
|
+
)) })
|
|
51
|
+
}
|
|
52
|
+
),
|
|
53
|
+
document.body
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
export {
|
|
57
|
+
w as default
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=ToastHost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToastHost.js","sources":["../../src/components/ToastHost.tsx"],"sourcesContent":["import { useLayoutEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ShadowRootWrapper } from '../ShadowRootWrapper';\nimport ToastItem from './ToastItem';\nimport { keepAboveOverlayStack } from './overlayBehaviour';\nimport { ensureToastStyles, overlayIdentity } from './portalOverlay';\nimport type { QueuedToast } from './toastTypes';\nimport { leaveTopLayer, raiseToTopLayer } from './topLayer';\n\ninterface ToastHostProps {\n toasts: QueuedToast[];\n duration: number;\n onDismiss: (id: number) => void;\n}\n\nconst HOST_STYLE: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n pointerEvents: 'none',\n};\n\nconst ToastHost: React.FC<ToastHostProps> = ({ toasts, duration, onDismiss }) => {\n const hostRef = useRef<HTMLDivElement | null>(null);\n const newestId = toasts[toasts.length - 1]?.id;\n\n useLayoutEffect(() => {\n ensureToastStyles();\n }, []);\n\n useLayoutEffect(() => {\n const host = hostRef.current;\n if (!host) {\n return;\n }\n if (newestId === undefined) {\n leaveTopLayer(host);\n return;\n }\n raiseToTopLayer(host);\n }, [newestId]);\n\n const visible = newestId !== undefined;\n useLayoutEffect(() => {\n const host = hostRef.current;\n if (!host || !visible) {\n return;\n }\n return keepAboveOverlayStack(host);\n }, [visible]);\n\n return createPortal(\n <ShadowRootWrapper\n hostRef={hostRef}\n hostStyle={HOST_STYLE}\n hostProps={overlayIdentity('toast')}\n >\n <div className=\"flex flex-col items-center gap-[8px] px-[16px] pt-[24px]\">\n {toasts.map((toast) => (\n <ToastItem\n key={toast.id}\n toast={toast}\n duration={duration}\n onDismiss={onDismiss}\n />\n ))}\n </div>\n </ShadowRootWrapper>,\n document.body,\n );\n};\n\nexport default ToastHost;\n"],"names":["HOST_STYLE","ToastHost","toasts","duration","onDismiss","hostRef","useRef","newestId","_a","useLayoutEffect","ensureToastStyles","host","leaveTopLayer","raiseToTopLayer","visible","keepAboveOverlayStack","createPortal","jsx","ShadowRootWrapper","overlayIdentity","toast","ToastItem"],"mappings":";;;;;;;;AAeA,MAAMA,IAAkC;AAAA,EACpC,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,eAAe;AACnB,GAEMC,IAAsC,CAAC,EAAE,QAAAC,GAAQ,UAAAC,GAAU,WAAAC,QAAgB;;AAC7E,QAAMC,IAAUC,EAA8B,IAAI,GAC5CC,KAAWC,IAAAN,EAAOA,EAAO,SAAS,CAAC,MAAxB,gBAAAM,EAA2B;AAE5C,EAAAC,EAAgB,MAAM;AAClB,IAAAC,EAAA;AAAA,EACJ,GAAG,CAAA,CAAE,GAELD,EAAgB,MAAM;AAClB,UAAME,IAAON,EAAQ;AACrB,QAAKM,GAGL;AAAA,UAAIJ,MAAa,QAAW;AACxB,QAAAK,EAAcD,CAAI;AAClB;AAAA,MACJ;AACA,MAAAE,EAAgBF,CAAI;AAAA;AAAA,EACxB,GAAG,CAACJ,CAAQ,CAAC;AAEb,QAAMO,IAAUP,MAAa;AAC7B,SAAAE,EAAgB,MAAM;AAClB,UAAME,IAAON,EAAQ;AACrB,QAAI,GAACM,KAAQ,CAACG;AAGd,aAAOC,EAAsBJ,CAAI;AAAA,EACrC,GAAG,CAACG,CAAO,CAAC,GAELE;AAAA,IACH,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACG,SAAAb;AAAA,QACA,WAAWL;AAAA,QACX,WAAWmB,EAAgB,OAAO;AAAA,QAElC,4BAAC,OAAA,EAAI,WAAU,4DACV,UAAAjB,EAAO,IAAI,CAACkB,MACT,gBAAAH;AAAA,UAACI;AAAA,UAAA;AAAA,YAEG,OAAAD;AAAA,YACA,UAAAjB;AAAA,YACA,WAAAC;AAAA,UAAA;AAAA,UAHKgB,EAAM;AAAA,QAAA,CAKlB,EAAA,CACL;AAAA,MAAA;AAAA,IAAA;AAAA,IAEJ,SAAS;AAAA,EAAA;AAEjB;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsxs as x, jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { useState as v, useRef as m, useEffect as p } from "react";
|
|
3
|
+
import g from "./CustomIcons/CheckCircleFilled.js";
|
|
4
|
+
import h from "./CustomIcons/ErrorCircleFilled.js";
|
|
5
|
+
const f = {
|
|
6
|
+
success: "text-[var(--malachite-text-success,rgb(2,122,66))] supports-[color:color-mix(in_srgb,red,red)]:text-[color-mix(in_srgb,var(--malachite-text-success,rgb(2,122,66))_70%,var(--malachite-tooltip-foreground,rgb(255,255,255)))]",
|
|
7
|
+
error: "text-[var(--malachite-text-destructive,rgb(237,53,54))] supports-[color:color-mix(in_srgb,red,red)]:text-[color-mix(in_srgb,var(--malachite-text-destructive,rgb(237,53,54))_70%,var(--malachite-tooltip-foreground,rgb(255,255,255)))]"
|
|
8
|
+
}, E = ({ toast: r, duration: u, onDismiss: a }) => {
|
|
9
|
+
const [i, n] = v(!1), s = m(null), o = m(u);
|
|
10
|
+
p(() => {
|
|
11
|
+
const e = s.current;
|
|
12
|
+
if (!e)
|
|
13
|
+
return;
|
|
14
|
+
const t = () => n(!0), c = () => n(!1);
|
|
15
|
+
return e.addEventListener("pointerenter", t), e.addEventListener("pointerleave", c), () => {
|
|
16
|
+
e.removeEventListener("pointerenter", t), e.removeEventListener("pointerleave", c);
|
|
17
|
+
};
|
|
18
|
+
}, []), p(() => {
|
|
19
|
+
if (i)
|
|
20
|
+
return;
|
|
21
|
+
const e = Date.now(), t = setTimeout(() => a(r.id), o.current);
|
|
22
|
+
return () => {
|
|
23
|
+
clearTimeout(t), o.current = Math.max(0, o.current - (Date.now() - e));
|
|
24
|
+
};
|
|
25
|
+
}, [i, a, r.id]);
|
|
26
|
+
const d = r.variant === "error" ? h : g;
|
|
27
|
+
return (
|
|
28
|
+
// aria-hidden: the provider's live regions are the announced copy.
|
|
29
|
+
/* @__PURE__ */ x(
|
|
30
|
+
"div",
|
|
31
|
+
{
|
|
32
|
+
ref: s,
|
|
33
|
+
"aria-hidden": "true",
|
|
34
|
+
"data-toast": r.variant,
|
|
35
|
+
onClick: (e) => {
|
|
36
|
+
e.stopPropagation(), a(r.id);
|
|
37
|
+
},
|
|
38
|
+
className: "pointer-events-auto flex max-w-[480px] cursor-pointer items-start gap-[8px] rounded-[var(--malachite-radius-xxxl,16px)] bg-[var(--malachite-tooltip-background,rgb(59,59,59))] px-[12px] py-[8px] text-[length:var(--malachite-font-size-medium,14px)] leading-[20px] text-[var(--malachite-tooltip-foreground,rgb(255,255,255))] [box-shadow:var(--malachite-tooltip-shadow,0px_0px_10px_0px_rgba(0,0,0,0.2))] animate-[malachite-toast-in_150ms_ease-out] motion-reduce:animate-none",
|
|
39
|
+
style: { overflowWrap: "anywhere" },
|
|
40
|
+
children: [
|
|
41
|
+
/* @__PURE__ */ l(d, { size: 16, className: `mt-[2px] shrink-0 ${f[r.variant]}` }),
|
|
42
|
+
/* @__PURE__ */ l("span", { children: r.message })
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
);
|
|
47
|
+
};
|
|
48
|
+
export {
|
|
49
|
+
E as default
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=ToastItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToastItem.js","sources":["../../src/components/ToastItem.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport CheckCircleFilled from './CustomIcons/CheckCircleFilled';\nimport ErrorCircleFilled from './CustomIcons/ErrorCircleFilled';\nimport type { QueuedToast, ToastVariant } from './toastTypes';\n\n// The plain status tokens fall under 3:1 on the pill; the mix clears it in both themes.\nconst ICON_COLOR: Record<ToastVariant, string> = {\n success:\n 'text-[var(--malachite-text-success,rgb(2,122,66))] supports-[color:color-mix(in_srgb,red,red)]:text-[color-mix(in_srgb,var(--malachite-text-success,rgb(2,122,66))_70%,var(--malachite-tooltip-foreground,rgb(255,255,255)))]',\n error: 'text-[var(--malachite-text-destructive,rgb(237,53,54))] supports-[color:color-mix(in_srgb,red,red)]:text-[color-mix(in_srgb,var(--malachite-text-destructive,rgb(237,53,54))_70%,var(--malachite-tooltip-foreground,rgb(255,255,255)))]',\n};\n\ninterface ToastItemProps {\n toast: QueuedToast;\n duration: number;\n onDismiss: (id: number) => void;\n}\n\nconst ToastItem: React.FC<ToastItemProps> = ({ toast, duration, onDismiss }) => {\n const [paused, setPaused] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const remaining = useRef(duration);\n\n // React's onPointerEnter never fires across this portal's shadow boundary.\n useEffect(() => {\n const el = ref.current;\n if (!el) {\n return;\n }\n const pause = () => setPaused(true);\n const resume = () => setPaused(false);\n el.addEventListener('pointerenter', pause);\n el.addEventListener('pointerleave', resume);\n return () => {\n el.removeEventListener('pointerenter', pause);\n el.removeEventListener('pointerleave', resume);\n };\n }, []);\n\n useEffect(() => {\n if (paused) {\n return;\n }\n const startedAt = Date.now();\n const timeout = setTimeout(() => onDismiss(toast.id), remaining.current);\n return () => {\n clearTimeout(timeout);\n remaining.current = Math.max(0, remaining.current - (Date.now() - startedAt));\n };\n }, [paused, onDismiss, toast.id]);\n\n const Icon = toast.variant === 'error' ? ErrorCircleFilled : CheckCircleFilled;\n\n return (\n // aria-hidden: the provider's live regions are the announced copy.\n <div\n ref={ref}\n aria-hidden=\"true\"\n data-toast={toast.variant}\n onClick={(event) => {\n // A portal bubbles through the React tree, to the provider's ancestors.\n event.stopPropagation();\n onDismiss(toast.id);\n }}\n className=\"pointer-events-auto flex max-w-[480px] cursor-pointer items-start gap-[8px] rounded-[var(--malachite-radius-xxxl,16px)] bg-[var(--malachite-tooltip-background,rgb(59,59,59))] px-[12px] py-[8px] text-[length:var(--malachite-font-size-medium,14px)] leading-[20px] text-[var(--malachite-tooltip-foreground,rgb(255,255,255))] [box-shadow:var(--malachite-tooltip-shadow,0px_0px_10px_0px_rgba(0,0,0,0.2))] animate-[malachite-toast-in_150ms_ease-out] motion-reduce:animate-none\"\n style={{ overflowWrap: 'anywhere' }}\n >\n <Icon size={16} className={`mt-[2px] shrink-0 ${ICON_COLOR[toast.variant]}`} />\n <span>{toast.message}</span>\n </div>\n );\n};\n\nexport default ToastItem;\n"],"names":["ICON_COLOR","ToastItem","toast","duration","onDismiss","paused","setPaused","useState","ref","useRef","remaining","useEffect","el","pause","resume","startedAt","timeout","Icon","ErrorCircleFilled","CheckCircleFilled","jsxs","event","jsx"],"mappings":";;;;AAMA,MAAMA,IAA2C;AAAA,EAC7C,SACI;AAAA,EACJ,OAAO;AACX,GAQMC,IAAsC,CAAC,EAAE,OAAAC,GAAO,UAAAC,GAAU,WAAAC,QAAgB;AAC5E,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpCC,IAAMC,EAAuB,IAAI,GACjCC,IAAYD,EAAON,CAAQ;AAGjC,EAAAQ,EAAU,MAAM;AACZ,UAAMC,IAAKJ,EAAI;AACf,QAAI,CAACI;AACD;AAEJ,UAAMC,IAAQ,MAAMP,EAAU,EAAI,GAC5BQ,IAAS,MAAMR,EAAU,EAAK;AACpC,WAAAM,EAAG,iBAAiB,gBAAgBC,CAAK,GACzCD,EAAG,iBAAiB,gBAAgBE,CAAM,GACnC,MAAM;AACT,MAAAF,EAAG,oBAAoB,gBAAgBC,CAAK,GAC5CD,EAAG,oBAAoB,gBAAgBE,CAAM;AAAA,IACjD;AAAA,EACJ,GAAG,CAAA,CAAE,GAELH,EAAU,MAAM;AACZ,QAAIN;AACA;AAEJ,UAAMU,IAAY,KAAK,IAAA,GACjBC,IAAU,WAAW,MAAMZ,EAAUF,EAAM,EAAE,GAAGQ,EAAU,OAAO;AACvE,WAAO,MAAM;AACT,mBAAaM,CAAO,GACpBN,EAAU,UAAU,KAAK,IAAI,GAAGA,EAAU,WAAW,KAAK,IAAA,IAAQK,EAAU;AAAA,IAChF;AAAA,EACJ,GAAG,CAACV,GAAQD,GAAWF,EAAM,EAAE,CAAC;AAEhC,QAAMe,IAAOf,EAAM,YAAY,UAAUgB,IAAoBC;AAE7D;AAAA;AAAA,IAEI,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,KAAAZ;AAAA,QACA,eAAY;AAAA,QACZ,cAAYN,EAAM;AAAA,QAClB,SAAS,CAACmB,MAAU;AAEhB,UAAAA,EAAM,gBAAA,GACNjB,EAAUF,EAAM,EAAE;AAAA,QACtB;AAAA,QACA,WAAU;AAAA,QACV,OAAO,EAAE,cAAc,WAAA;AAAA,QAEvB,UAAA;AAAA,UAAA,gBAAAoB,EAACL,GAAA,EAAK,MAAM,IAAI,WAAW,qBAAqBjB,EAAWE,EAAM,OAAO,CAAC,GAAA,CAAI;AAAA,UAC7E,gBAAAoB,EAAC,QAAA,EAAM,UAAApB,EAAM,QAAA,CAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA;AAGjC;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsxs as m, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { useState as i, useRef as v, useCallback as u, useEffect as D, useMemo as E } from "react";
|
|
3
|
+
import _ from "./ToastHost.js";
|
|
4
|
+
import { ToastContext as x } from "./toastContext.js";
|
|
5
|
+
import { TOAST_ANNOUNCEMENT_LIFETIME_MS as I, TOAST_DEFAULT_DURATION_MS as M } from "./toastTypes.js";
|
|
6
|
+
const N = {
|
|
7
|
+
position: "absolute",
|
|
8
|
+
width: 1,
|
|
9
|
+
height: 1,
|
|
10
|
+
margin: -1,
|
|
11
|
+
padding: 0,
|
|
12
|
+
border: 0,
|
|
13
|
+
overflow: "hidden",
|
|
14
|
+
clip: "rect(0 0 0 0)",
|
|
15
|
+
clipPath: "inset(50%)",
|
|
16
|
+
whiteSpace: "nowrap"
|
|
17
|
+
}, C = ({
|
|
18
|
+
children: p,
|
|
19
|
+
duration: f = M
|
|
20
|
+
}) => {
|
|
21
|
+
const [h, r] = i([]), [a, c] = i(
|
|
22
|
+
[]
|
|
23
|
+
), [T, w] = i(!1), l = v(0), d = u(({ message: t, variant: s = "success" }) => {
|
|
24
|
+
l.current += 1;
|
|
25
|
+
const e = { id: l.current, message: t, variant: s };
|
|
26
|
+
r((o) => [...o, e].slice(-3)), c((o) => [...o, { ...e, announcedAt: Date.now() }]), w(!0);
|
|
27
|
+
}, []), A = u((t) => {
|
|
28
|
+
r((s) => s.filter((e) => e.id !== t));
|
|
29
|
+
}, []);
|
|
30
|
+
D(() => {
|
|
31
|
+
const t = a[0];
|
|
32
|
+
if (!t)
|
|
33
|
+
return;
|
|
34
|
+
const s = setTimeout(
|
|
35
|
+
() => c((e) => e.filter((o) => o.id !== t.id)),
|
|
36
|
+
Math.max(0, t.announcedAt + I - Date.now())
|
|
37
|
+
);
|
|
38
|
+
return () => clearTimeout(s);
|
|
39
|
+
}, [a]);
|
|
40
|
+
const S = E(() => ({ show: d }), [d]);
|
|
41
|
+
return /* @__PURE__ */ m(x.Provider, { value: S, children: [
|
|
42
|
+
p,
|
|
43
|
+
/* @__PURE__ */ m("div", { style: N, children: [
|
|
44
|
+
/* @__PURE__ */ n("span", { role: "status", "aria-atomic": "false", children: a.filter((t) => t.variant === "success").map((t) => /* @__PURE__ */ n("span", { children: t.message }, t.id)) }),
|
|
45
|
+
/* @__PURE__ */ n("span", { role: "alert", "aria-atomic": "false", children: a.filter((t) => t.variant === "error").map((t) => /* @__PURE__ */ n("span", { children: t.message }, t.id)) })
|
|
46
|
+
] }),
|
|
47
|
+
T && /* @__PURE__ */ n(_, { toasts: h, duration: f, onDismiss: A })
|
|
48
|
+
] });
|
|
49
|
+
};
|
|
50
|
+
export {
|
|
51
|
+
C as ToastProvider,
|
|
52
|
+
C as default
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=ToastProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToastProvider.js","sources":["../../src/components/ToastProvider.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport ToastHost from './ToastHost';\nimport { ToastContext } from './toastContext';\nimport {\n type QueuedToast,\n TOAST_ANNOUNCEMENT_LIFETIME_MS,\n TOAST_DEFAULT_DURATION_MS,\n TOAST_MAX_VISIBLE,\n type ToastOptions,\n} from './toastTypes';\n\n// Outside any shadow root, so Tailwind's sr-only is not available.\nconst VISUALLY_HIDDEN: React.CSSProperties = {\n position: 'absolute',\n width: 1,\n height: 1,\n margin: -1,\n padding: 0,\n border: 0,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n clipPath: 'inset(50%)',\n whiteSpace: 'nowrap',\n};\n\nexport interface ToastProviderProps {\n children?: React.ReactNode;\n /** How long each toast stays, in ms. Defaults to 3000. */\n duration?: number;\n}\n\nconst ToastProvider: React.FC<ToastProviderProps> = ({\n children,\n duration = TOAST_DEFAULT_DURATION_MS,\n}) => {\n const [toasts, setToasts] = useState<QueuedToast[]>([]);\n const [announcements, setAnnouncements] = useState<(QueuedToast & { announcedAt: number })[]>(\n [],\n );\n const [hasShown, setHasShown] = useState(false);\n const nextId = useRef(0);\n\n const show = useCallback(({ message, variant = 'success' }: ToastOptions) => {\n nextId.current += 1;\n const toast: QueuedToast = { id: nextId.current, message, variant };\n setToasts((previous) => [...previous, toast].slice(-TOAST_MAX_VISIBLE));\n setAnnouncements((previous) => [...previous, { ...toast, announcedAt: Date.now() }]);\n setHasShown(true);\n }, []);\n\n const dismiss = useCallback((id: number) => {\n setToasts((previous) => previous.filter((toast) => toast.id !== id));\n }, []);\n\n useEffect(() => {\n const oldest = announcements[0];\n if (!oldest) {\n return;\n }\n const timeout = setTimeout(\n () =>\n setAnnouncements((previous) => previous.filter((entry) => entry.id !== oldest.id)),\n Math.max(0, oldest.announcedAt + TOAST_ANNOUNCEMENT_LIFETIME_MS - Date.now()),\n );\n return () => clearTimeout(timeout);\n }, [announcements]);\n\n const api = useMemo(() => ({ show }), [show]);\n\n return (\n <ToastContext.Provider value={api}>\n {children}\n {/* A region added with its text is not announced; status and alert default to atomic. */}\n <div style={VISUALLY_HIDDEN}>\n <span role=\"status\" aria-atomic=\"false\">\n {announcements\n .filter((entry) => entry.variant === 'success')\n .map((entry) => (\n <span key={entry.id}>{entry.message}</span>\n ))}\n </span>\n <span role=\"alert\" aria-atomic=\"false\">\n {announcements\n .filter((entry) => entry.variant === 'error')\n .map((entry) => (\n <span key={entry.id}>{entry.message}</span>\n ))}\n </span>\n </div>\n {hasShown && <ToastHost toasts={toasts} duration={duration} onDismiss={dismiss} />}\n </ToastContext.Provider>\n );\n};\n\nexport { ToastProvider };\nexport default ToastProvider;\n"],"names":["VISUALLY_HIDDEN","ToastProvider","children","duration","TOAST_DEFAULT_DURATION_MS","toasts","setToasts","useState","announcements","setAnnouncements","hasShown","setHasShown","nextId","useRef","show","useCallback","message","variant","toast","previous","dismiss","id","useEffect","oldest","timeout","entry","TOAST_ANNOUNCEMENT_LIFETIME_MS","api","useMemo","jsxs","ToastContext","jsx","ToastHost"],"mappings":";;;;;AAYA,MAAMA,IAAuC;AAAA,EACzC,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,YAAY;AAChB,GAQMC,IAA8C,CAAC;AAAA,EACjD,UAAAC;AAAA,EACA,UAAAC,IAAWC;AACf,MAAM;AACF,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAwB,CAAA,CAAE,GAChD,CAACC,GAAeC,CAAgB,IAAIF;AAAA,IACtC,CAAA;AAAA,EAAC,GAEC,CAACG,GAAUC,CAAW,IAAIJ,EAAS,EAAK,GACxCK,IAASC,EAAO,CAAC,GAEjBC,IAAOC,EAAY,CAAC,EAAE,SAAAC,GAAS,SAAAC,IAAU,gBAA8B;AACzE,IAAAL,EAAO,WAAW;AAClB,UAAMM,IAAqB,EAAE,IAAIN,EAAO,SAAS,SAAAI,GAAS,SAAAC,EAAA;AAC1D,IAAAX,EAAU,CAACa,MAAa,CAAC,GAAGA,GAAUD,CAAK,EAAE,MAAM,EAAkB,CAAC,GACtET,EAAiB,CAACU,MAAa,CAAC,GAAGA,GAAU,EAAE,GAAGD,GAAO,aAAa,KAAK,IAAA,EAAI,CAAG,CAAC,GACnFP,EAAY,EAAI;AAAA,EACpB,GAAG,CAAA,CAAE,GAECS,IAAUL,EAAY,CAACM,MAAe;AACxC,IAAAf,EAAU,CAACa,MAAaA,EAAS,OAAO,CAACD,MAAUA,EAAM,OAAOG,CAAE,CAAC;AAAA,EACvE,GAAG,CAAA,CAAE;AAEL,EAAAC,EAAU,MAAM;AACZ,UAAMC,IAASf,EAAc,CAAC;AAC9B,QAAI,CAACe;AACD;AAEJ,UAAMC,IAAU;AAAA,MACZ,MACIf,EAAiB,CAACU,MAAaA,EAAS,OAAO,CAACM,MAAUA,EAAM,OAAOF,EAAO,EAAE,CAAC;AAAA,MACrF,KAAK,IAAI,GAAGA,EAAO,cAAcG,IAAiC,KAAK,KAAK;AAAA,IAAA;AAEhF,WAAO,MAAM,aAAaF,CAAO;AAAA,EACrC,GAAG,CAAChB,CAAa,CAAC;AAElB,QAAMmB,IAAMC,EAAQ,OAAO,EAAE,MAAAd,MAAS,CAACA,CAAI,CAAC;AAE5C,SACI,gBAAAe,EAACC,EAAa,UAAb,EAAsB,OAAOH,GACzB,UAAA;AAAA,IAAAzB;AAAA,IAED,gBAAA2B,EAAC,OAAA,EAAI,OAAO7B,GACR,UAAA;AAAA,MAAA,gBAAA+B,EAAC,QAAA,EAAK,MAAK,UAAS,eAAY,SAC3B,UAAAvB,EACI,OAAO,CAACiB,MAAUA,EAAM,YAAY,SAAS,EAC7C,IAAI,CAACA,MACF,gBAAAM,EAAC,QAAA,EAAqB,YAAM,QAAA,GAAjBN,EAAM,EAAmB,CACvC,EAAA,CACT;AAAA,MACA,gBAAAM,EAAC,QAAA,EAAK,MAAK,SAAQ,eAAY,SAC1B,UAAAvB,EACI,OAAO,CAACiB,MAAUA,EAAM,YAAY,OAAO,EAC3C,IAAI,CAACA,MACF,gBAAAM,EAAC,QAAA,EAAqB,YAAM,QAAA,GAAjBN,EAAM,EAAmB,CACvC,EAAA,CACT;AAAA,IAAA,GACJ;AAAA,IACCf,KAAY,gBAAAqB,EAACC,GAAA,EAAU,QAAA3B,GAAgB,UAAAF,GAAoB,WAAWiB,EAAA,CAAS;AAAA,EAAA,GACpF;AAER;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const N = [
|
|
2
2
|
"Jan",
|
|
3
3
|
"Feb",
|
|
4
4
|
"Mar",
|
|
@@ -11,7 +11,7 @@ const M = [
|
|
|
11
11
|
"Oct",
|
|
12
12
|
"Nov",
|
|
13
13
|
"Dec"
|
|
14
|
-
], F = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
|
|
14
|
+
], F = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], C = [
|
|
15
15
|
"Sunday",
|
|
16
16
|
"Monday",
|
|
17
17
|
"Tuesday",
|
|
@@ -19,7 +19,7 @@ const M = [
|
|
|
19
19
|
"Thursday",
|
|
20
20
|
"Friday",
|
|
21
21
|
"Saturday"
|
|
22
|
-
],
|
|
22
|
+
], i = (t, e) => e === "utc" ? {
|
|
23
23
|
year: t.getUTCFullYear(),
|
|
24
24
|
month: t.getUTCMonth(),
|
|
25
25
|
day: t.getUTCDate(),
|
|
@@ -34,37 +34,37 @@ const M = [
|
|
|
34
34
|
minutes: t.getMinutes(),
|
|
35
35
|
seconds: t.getSeconds()
|
|
36
36
|
};
|
|
37
|
-
const a = ({ year: t, month: e, day: n, hours: s = 0, minutes: o = 0, seconds:
|
|
37
|
+
const a = ({ year: t, month: e, day: n, hours: s = 0, minutes: o = 0, seconds: r = 0 }, c, g = 0) => {
|
|
38
38
|
const u = t >= 0 && t < 100 ? 400 : 0;
|
|
39
39
|
if (c === "utc") {
|
|
40
|
-
const
|
|
41
|
-
Date.UTC(t + u, e, n, s, o,
|
|
40
|
+
const d = new Date(
|
|
41
|
+
Date.UTC(t + u, e, n, s, o, r, g)
|
|
42
42
|
);
|
|
43
|
-
return u &&
|
|
43
|
+
return u && d.setUTCFullYear(d.getUTCFullYear() - u), d;
|
|
44
44
|
}
|
|
45
|
-
const
|
|
46
|
-
return u &&
|
|
45
|
+
const m = new Date(t + u, e, n, s, o, r, g);
|
|
46
|
+
return u && m.setFullYear(m.getFullYear() - u), m;
|
|
47
47
|
}, h = (t, e) => {
|
|
48
|
-
const { year: n, month: s, day: o } =
|
|
48
|
+
const { year: n, month: s, day: o } = i(t, e);
|
|
49
49
|
return { year: n, month: s, day: o };
|
|
50
|
-
},
|
|
50
|
+
}, E = (t, e) => t.year - e.year || t.month - e.month || t.day - e.day, Y = (t, e) => !!t && !!e && E(t, e) === 0, I = ({ year: t, month: e, day: n }) => `${t}-${String(e + 1).padStart(2, "0")}-${String(n).padStart(2, "0")}`, b = ({ year: t, month: e, day: n }, s) => a({ year: t, month: e, day: n }, s), k = ({ year: t, month: e, day: n }, s) => a({ year: t, month: e, day: n, hours: 23, minutes: 59, seconds: 59 }, s, 999), f = (t, e) => h(a({ year: t.year, month: t.month, day: t.day + e }, "utc"), "utc"), _ = ({ year: t, month: e }) => h(a({ year: t, month: e + 1, day: 0 }, "utc"), "utc").day, p = ({ year: t, month: e }, n) => {
|
|
51
51
|
const s = t * 12 + e + n;
|
|
52
52
|
return { year: Math.floor(s / 12), month: (s % 12 + 12) % 12 };
|
|
53
53
|
}, W = (t, e) => {
|
|
54
54
|
const n = p(t, e);
|
|
55
|
-
return { ...n, day: Math.min(t.day,
|
|
56
|
-
},
|
|
57
|
-
const s = (n +
|
|
58
|
-
return { short: F[s], long:
|
|
55
|
+
return { ...n, day: Math.min(t.day, _(n)) };
|
|
56
|
+
}, M = (t) => a(t, "utc").getUTCDay(), l = { sunday: 0, monday: 1 }, R = (t) => Array.from({ length: 7 }, (e, n) => {
|
|
57
|
+
const s = (n + l[t]) % 7;
|
|
58
|
+
return { short: F[s], long: C[s] };
|
|
59
59
|
}), K = (t, e) => {
|
|
60
|
-
const n = { ...t, day: 1 }, s = (
|
|
61
|
-
for (let
|
|
62
|
-
|
|
63
|
-
return
|
|
64
|
-
}, L = (t, e) =>
|
|
65
|
-
const s =
|
|
66
|
-
return n === "day" ? o : `${o}, ${w(s, n)}${
|
|
67
|
-
}, x = (t, e, n) => `${t ? w(
|
|
60
|
+
const n = { ...t, day: 1 }, s = (M(n) - l[e] + 7) % 7, o = f(n, -s), r = [];
|
|
61
|
+
for (let c = 0; c < 42; c++)
|
|
62
|
+
c % 7 === 0 && r.push([]), r[r.length - 1].push(f(o, c));
|
|
63
|
+
return r;
|
|
64
|
+
}, L = (t, e) => f(t, -((M(t) - l[e] + 7) % 7)), J = ({ year: t, month: e }) => `${N[e]} ${t}`, T = (t) => String(t).padStart(2, "0"), w = (t, e) => e === "second" ? `${T(t.hours)}:${T(t.minutes)}:${T(t.seconds)}` : `${T(t.hours)}:${T(t.minutes)}`, U = (t) => t === "utc" ? " UTC" : "", Z = (t, e, n) => {
|
|
65
|
+
const s = i(t, e), o = `${N[s.month]} ${s.day} ${s.year}`;
|
|
66
|
+
return n === "day" ? o : `${o}, ${w(s, n)}${U(e)}`;
|
|
67
|
+
}, x = (t, e, n) => `${t ? w(i(t, e), n) : n === "second" ? "--:--:--" : "--:--"}${U(e)}`;
|
|
68
68
|
let $;
|
|
69
69
|
const B = (t) => ($ ?? ($ = new Intl.DateTimeFormat("en-US", {
|
|
70
70
|
weekday: "long",
|
|
@@ -77,18 +77,18 @@ const B = (t) => ($ ?? ($ = new Intl.DateTimeFormat("en-US", {
|
|
|
77
77
|
return null;
|
|
78
78
|
const n = typeof t == "string" ? H.exec(t) : null;
|
|
79
79
|
if (n) {
|
|
80
|
-
const [, o,
|
|
80
|
+
const [, o, r, c, g = "0", u = "0", m = "0", d = ""] = n, y = {
|
|
81
81
|
year: Number(o),
|
|
82
|
-
month: Number(
|
|
82
|
+
month: Number(r) - 1,
|
|
83
83
|
day: Number(c),
|
|
84
|
-
hours: Number(
|
|
84
|
+
hours: Number(g),
|
|
85
85
|
minutes: Number(u),
|
|
86
|
-
seconds: Number(
|
|
86
|
+
seconds: Number(m)
|
|
87
87
|
};
|
|
88
|
-
if (
|
|
88
|
+
if (y.hours > 23 || y.minutes > 59 || y.seconds > 59)
|
|
89
89
|
return null;
|
|
90
|
-
const S = a(
|
|
91
|
-
return
|
|
90
|
+
const S = a(y, e, Number(d.padEnd(3, "0")));
|
|
91
|
+
return Y(h(S, e), y) ? S : null;
|
|
92
92
|
}
|
|
93
93
|
const s = t instanceof Date ? t : new Date(t);
|
|
94
94
|
return A(s) ? s : null;
|
|
@@ -105,32 +105,32 @@ const B = (t) => ($ ?? ($ = new Intl.DateTimeFormat("en-US", {
|
|
|
105
105
|
), D = {
|
|
106
106
|
minute: 6e4,
|
|
107
107
|
second: 1e3
|
|
108
|
-
},
|
|
108
|
+
}, O = (t, e, n) => {
|
|
109
109
|
if (n === "day")
|
|
110
|
-
return
|
|
110
|
+
return b(i(t, e), e);
|
|
111
111
|
if (e === "local" && !Number.isInteger(t.getTimezoneOffset())) {
|
|
112
|
-
const o =
|
|
112
|
+
const o = i(t, e);
|
|
113
113
|
return a({ ...o, seconds: n === "second" ? o.seconds : 0 }, e);
|
|
114
114
|
}
|
|
115
115
|
const s = D[n];
|
|
116
116
|
return new Date(Math.floor(t.getTime() / s) * s);
|
|
117
|
-
}, j = (t, e, n) => n === "day" ?
|
|
117
|
+
}, j = (t, e, n) => n === "day" ? k(h(t, e), e) : new Date(O(t, e, n).getTime() + D[n] - 1), q = (t, e, n) => {
|
|
118
118
|
if (n === "day")
|
|
119
119
|
return t;
|
|
120
|
-
const s =
|
|
120
|
+
const s = O(t, e, n);
|
|
121
121
|
return s.getTime() < t.getTime() ? new Date(s.getTime() + D[n]) : s;
|
|
122
122
|
};
|
|
123
123
|
export {
|
|
124
|
-
|
|
124
|
+
f as addDays,
|
|
125
125
|
p as addMonths,
|
|
126
126
|
W as addMonthsToDay,
|
|
127
127
|
q as ceilTo,
|
|
128
128
|
G as clampDate,
|
|
129
|
-
|
|
129
|
+
E as compareDays,
|
|
130
130
|
h as dayKeyOf,
|
|
131
131
|
I as dayKeyString,
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
_ as daysInMonth,
|
|
133
|
+
k as endOfDay,
|
|
134
134
|
j as endOfUnit,
|
|
135
135
|
Z as formatDate,
|
|
136
136
|
w as formatTime,
|
|
@@ -139,15 +139,15 @@ export {
|
|
|
139
139
|
J as monthLabel,
|
|
140
140
|
K as monthWeeks,
|
|
141
141
|
P as overlapsBounds,
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
i as partsOf,
|
|
143
|
+
Y as sameDay,
|
|
144
144
|
B as spokenDay,
|
|
145
|
-
|
|
145
|
+
b as startOfDay,
|
|
146
146
|
L as startOfWeek,
|
|
147
147
|
V as toDate,
|
|
148
|
-
|
|
148
|
+
O as truncateTo,
|
|
149
149
|
R as weekdayLabels,
|
|
150
|
-
|
|
150
|
+
M as weekdayOf,
|
|
151
151
|
X as withTime
|
|
152
152
|
};
|
|
153
153
|
//# sourceMappingURL=dateMath.js.map
|