@automattic/date-range-picker 1.0.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.
Files changed (64) hide show
  1. package/README.md +80 -0
  2. package/dist/cjs/button-stack.js +9 -0
  3. package/dist/cjs/button-stack.js.map +1 -0
  4. package/dist/cjs/date-inputs.js +37 -0
  5. package/dist/cjs/date-inputs.js.map +1 -0
  6. package/dist/cjs/date-range-content.js +194 -0
  7. package/dist/cjs/date-range-content.js.map +1 -0
  8. package/dist/cjs/date-range-picker.js +48 -0
  9. package/dist/cjs/date-range-picker.js.map +1 -0
  10. package/dist/cjs/datetime.js +56 -0
  11. package/dist/cjs/datetime.js.map +1 -0
  12. package/dist/cjs/index.js +16 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/presets-listbox.js +18 -0
  15. package/dist/cjs/presets-listbox.js.map +1 -0
  16. package/dist/cjs/utils.js +137 -0
  17. package/dist/cjs/utils.js.map +1 -0
  18. package/dist/esm/button-stack.js +6 -0
  19. package/dist/esm/button-stack.js.map +1 -0
  20. package/dist/esm/date-inputs.js +34 -0
  21. package/dist/esm/date-inputs.js.map +1 -0
  22. package/dist/esm/date-range-content.js +191 -0
  23. package/dist/esm/date-range-content.js.map +1 -0
  24. package/dist/esm/date-range-picker.js +45 -0
  25. package/dist/esm/date-range-picker.js.map +1 -0
  26. package/dist/esm/datetime.js +50 -0
  27. package/dist/esm/datetime.js.map +1 -0
  28. package/dist/esm/index.js +4 -0
  29. package/dist/esm/index.js.map +1 -0
  30. package/dist/esm/presets-listbox.js +15 -0
  31. package/dist/esm/presets-listbox.js.map +1 -0
  32. package/dist/esm/utils.js +130 -0
  33. package/dist/esm/utils.js.map +1 -0
  34. package/dist/tsconfig-cjs.tsbuildinfo +1 -0
  35. package/dist/tsconfig.tsbuildinfo +1 -0
  36. package/dist/types/button-stack.d.ts +8 -0
  37. package/dist/types/button-stack.d.ts.map +1 -0
  38. package/dist/types/date-inputs.d.ts +21 -0
  39. package/dist/types/date-inputs.d.ts.map +1 -0
  40. package/dist/types/date-range-content.d.ts +39 -0
  41. package/dist/types/date-range-content.d.ts.map +1 -0
  42. package/dist/types/date-range-picker.d.ts +25 -0
  43. package/dist/types/date-range-picker.d.ts.map +1 -0
  44. package/dist/types/datetime.d.ts +15 -0
  45. package/dist/types/datetime.d.ts.map +1 -0
  46. package/dist/types/index.d.ts +6 -0
  47. package/dist/types/index.d.ts.map +1 -0
  48. package/dist/types/presets-listbox.d.ts +12 -0
  49. package/dist/types/presets-listbox.d.ts.map +1 -0
  50. package/dist/types/utils.d.ts +40 -0
  51. package/dist/types/utils.d.ts.map +1 -0
  52. package/package.json +71 -0
  53. package/src/button-stack.tsx +17 -0
  54. package/src/date-inputs.tsx +142 -0
  55. package/src/date-range-content.tsx +379 -0
  56. package/src/date-range-picker.tsx +197 -0
  57. package/src/datetime.ts +58 -0
  58. package/src/index.ts +11 -0
  59. package/src/presets-listbox.tsx +65 -0
  60. package/src/style.scss +72 -0
  61. package/src/test/date-range-picker.test.tsx +334 -0
  62. package/src/test/utils.test.ts +58 -0
  63. package/src/types.d.ts +1 -0
  64. package/src/utils.ts +174 -0
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.presetDefs = void 0;
4
+ exports.computePresetRange = computePresetRange;
5
+ exports.getActivePresetId = getActivePresetId;
6
+ exports.formatLabel = formatLabel;
7
+ exports.isLast7Days = isLast7Days;
8
+ const i18n_1 = require("@wordpress/i18n");
9
+ const date_fns_1 = require("date-fns");
10
+ const datetime_1 = require("./datetime");
11
+ // Range helpers (inclusive)
12
+ const lastNDays = (date, number) => ({
13
+ from: new Date(date.getFullYear(), date.getMonth(), date.getDate() - (number - 1)),
14
+ to: date,
15
+ });
16
+ const monthToDate = (date) => ({
17
+ from: new Date(date.getFullYear(), date.getMonth(), 1),
18
+ to: date,
19
+ });
20
+ const yearToDate = (date) => ({
21
+ from: new Date(date.getFullYear(), 0, 1),
22
+ to: date,
23
+ });
24
+ const lastTwelveMonths = (date) => ({
25
+ from: new Date(date.getFullYear() - 1, date.getMonth(), date.getDate() + 1),
26
+ to: date,
27
+ });
28
+ const lastThreeYears = (date) => ({
29
+ from: new Date(date.getFullYear() - 3, date.getMonth(), date.getDate() + 1),
30
+ to: date,
31
+ });
32
+ exports.presetDefs = [
33
+ { id: 'today', label: (0, i18n_1.__)('Today') },
34
+ { id: 'yesterday', label: (0, i18n_1.__)('Yesterday') },
35
+ { id: 'last-7-days', label: (0, i18n_1.__)('Last 7 days') },
36
+ { id: 'last-30-days', label: (0, i18n_1.__)('Last 30 days') },
37
+ { id: 'last-90-days', label: (0, i18n_1.__)('Last 90 days') },
38
+ { id: 'month-to-date', label: (0, i18n_1.__)('Month to date') },
39
+ { id: 'last-12-months', label: (0, i18n_1.__)('Last 12 months') },
40
+ { id: 'year-to-date', label: (0, i18n_1.__)('Year to date') },
41
+ { id: 'last-3-years', label: (0, i18n_1.__)('Last 3 years') },
42
+ ];
43
+ function computePresetRange(preset, baseDate) {
44
+ switch (preset) {
45
+ case 'today':
46
+ return { from: baseDate, to: baseDate };
47
+ case 'yesterday':
48
+ return {
49
+ from: new Date(baseDate.getFullYear(), baseDate.getMonth(), baseDate.getDate() - 1),
50
+ to: new Date(baseDate.getFullYear(), baseDate.getMonth(), baseDate.getDate() - 1),
51
+ };
52
+ case 'last-7-days':
53
+ return lastNDays(baseDate, 7);
54
+ case 'last-30-days':
55
+ return lastNDays(baseDate, 30);
56
+ case 'last-90-days':
57
+ return lastNDays(baseDate, 90);
58
+ case 'month-to-date':
59
+ return monthToDate(baseDate);
60
+ case 'last-12-months':
61
+ return lastTwelveMonths(baseDate);
62
+ case 'year-to-date':
63
+ return yearToDate(baseDate);
64
+ case 'last-3-years':
65
+ return lastThreeYears(baseDate);
66
+ default:
67
+ return undefined;
68
+ }
69
+ }
70
+ function getActivePresetId(from, to, baseDate) {
71
+ if (!from || !to || !baseDate) {
72
+ return;
73
+ }
74
+ let newFrom = (0, date_fns_1.startOfDay)(from);
75
+ let newTo = (0, date_fns_1.startOfDay)(to);
76
+ if (newFrom.getTime() > newTo.getTime()) {
77
+ const tmp = newFrom;
78
+ newFrom = newTo;
79
+ newTo = tmp;
80
+ }
81
+ const todayStart = (0, date_fns_1.startOfDay)(baseDate);
82
+ const yesterdayStart = (0, date_fns_1.addDays)(todayStart, -1);
83
+ if ((0, date_fns_1.isSameDay)(newFrom, todayStart) && (0, date_fns_1.isSameDay)(newTo, todayStart)) {
84
+ return 'today';
85
+ }
86
+ if ((0, date_fns_1.isSameDay)(newFrom, yesterdayStart) && (0, date_fns_1.isSameDay)(newTo, yesterdayStart)) {
87
+ return 'yesterday';
88
+ }
89
+ if ((0, date_fns_1.isSameDay)(newTo, todayStart)) {
90
+ const diff = (0, date_fns_1.differenceInCalendarDays)(todayStart, newFrom); // inclusive days = diff + 1
91
+ if (diff === 6) {
92
+ return 'last-7-days';
93
+ }
94
+ if (diff === 29) {
95
+ return 'last-30-days';
96
+ }
97
+ if (diff === 89) {
98
+ return 'last-90-days';
99
+ }
100
+ if ((0, date_fns_1.isSameDay)(newFrom, (0, date_fns_1.addYears)(todayStart, -1)) ||
101
+ (0, date_fns_1.isSameDay)(newFrom, (0, date_fns_1.addDays)((0, date_fns_1.addYears)(todayStart, -1), 1))) {
102
+ return 'last-12-months';
103
+ }
104
+ if ((0, date_fns_1.isSameDay)(newFrom, (0, date_fns_1.addYears)(todayStart, -3)) ||
105
+ (0, date_fns_1.isSameDay)(newFrom, (0, date_fns_1.addDays)((0, date_fns_1.addYears)(todayStart, -3), 1))) {
106
+ return 'last-3-years';
107
+ }
108
+ }
109
+ if ((0, date_fns_1.isSameDay)(newFrom, (0, date_fns_1.startOfMonth)(todayStart)) && (0, date_fns_1.isSameDay)(newTo, todayStart)) {
110
+ return 'month-to-date';
111
+ }
112
+ if ((0, date_fns_1.isSameDay)(newFrom, (0, date_fns_1.startOfYear)(todayStart)) && (0, date_fns_1.isSameDay)(newTo, todayStart)) {
113
+ return 'year-to-date';
114
+ }
115
+ for (const preset of exports.presetDefs) {
116
+ const range = computePresetRange(preset.id, todayStart);
117
+ if (range &&
118
+ (0, date_fns_1.isSameDay)(newFrom, (0, date_fns_1.startOfDay)(range.from)) &&
119
+ (0, date_fns_1.isSameDay)(newTo, (0, date_fns_1.startOfDay)(range.to))) {
120
+ return preset.id;
121
+ }
122
+ }
123
+ return undefined;
124
+ }
125
+ // UI-specific: Date range label for the picker
126
+ function formatLabel(start, end, locale) {
127
+ return (0, i18n_1.sprintf)(
128
+ /* translators: %1$s: start date, %2$s: end date */
129
+ (0, i18n_1.__)('%1$s to %2$s'), (0, datetime_1.formatDate)(start, locale, { dateStyle: 'medium' }), (0, datetime_1.formatDate)(end, locale, { dateStyle: 'medium' }));
130
+ }
131
+ // Determine if the given date range matches the last 7 days preset
132
+ function isLast7Days(range, timezoneString, gmtOffset) {
133
+ const siteToday = (0, datetime_1.parseYmdLocal)((0, datetime_1.formatYmd)(new Date(), timezoneString, gmtOffset)) ??
134
+ new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate());
135
+ return getActivePresetId(range.start, range.end, siteToday) === 'last-7-days';
136
+ }
137
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { __experimentalHStack as HStack } from '@wordpress/components';
3
+ export function ButtonStack({ children, ...hStackProps }) {
4
+ return (_jsx(HStack, { ...hStackProps, spacing: 3, children: children }));
5
+ }
6
+ //# sourceMappingURL=button-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-stack.js","sourceRoot":"","sources":["../../src/button-stack.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,IAAI,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAOvE,MAAM,UAAU,WAAW,CAAE,EAC5B,QAAQ,EACR,GAAG,WAAW,EACyD;IACvE,OAAO,CACN,KAAC,MAAM,OAAM,WAAW,EAAG,OAAO,EAAG,CAAC,YACnC,QAAQ,GACF,CACT,CAAC;AACH,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { __experimentalHStack as HStack, __experimentalVStack as VStack, __experimentalInputControl as InputControl, } from '@wordpress/components';
3
+ import { __ } from '@wordpress/i18n';
4
+ export function DateInputs({ fromStr, toStr, onFromChange, onToChange, todayStr, minStr, fromStyle, toStyle, stack = false, justify = 'flex-start', containerStyle, onFromFocus, onToFocus, onFromBlur, onToBlur, }) {
5
+ if (stack) {
6
+ return (_jsxs(VStack, { as: "div", spacing: 2, className: "daterange-inputs", style: containerStyle, children: [_jsx(InputControl, { type: "date", label: __('Start date'), value: fromStr, onFocus: (e) => {
7
+ onFromFocus?.(e);
8
+ }, onBlur: (e) => {
9
+ onFromBlur?.(e);
10
+ }, onChange: (value) => {
11
+ onFromChange(value ?? '');
12
+ }, autoComplete: "off", min: minStr, max: toStr || todayStr, style: { width: '100%', ...(fromStyle || {}) }, __next40pxDefaultSize: true }), _jsx(InputControl, { type: "date", label: __('End date'), value: toStr, onFocus: (e) => {
13
+ onToFocus?.(e);
14
+ }, onBlur: (e) => {
15
+ onToBlur?.(e);
16
+ }, onChange: (value) => {
17
+ onToChange(value ?? '');
18
+ }, autoComplete: "off", min: fromStr || minStr, style: { width: '100%', ...(toStyle || {}) }, __next40pxDefaultSize: true })] }));
19
+ }
20
+ return (_jsxs(HStack, { as: "div", spacing: 8, justify: justify, className: "daterange-inputs", wrap: false, style: containerStyle, children: [_jsx(InputControl, { type: "date", label: __('Start date'), value: fromStr, onFocus: (e) => {
21
+ onFromFocus?.(e);
22
+ }, onBlur: (e) => {
23
+ onFromBlur?.(e);
24
+ }, onChange: (value) => {
25
+ onFromChange(value ?? '');
26
+ }, autoComplete: "off", min: minStr, max: toStr || todayStr, style: fromStyle, __next40pxDefaultSize: true }), _jsx(InputControl, { type: "date", label: __('End date'), value: toStr, onFocus: (e) => {
27
+ onToFocus?.(e);
28
+ }, onBlur: (e) => {
29
+ onToBlur?.(e);
30
+ }, onChange: (value) => {
31
+ onToChange(value ?? '');
32
+ }, autoComplete: "off", min: fromStr || minStr, style: toStyle, __next40pxDefaultSize: true })] }));
33
+ }
34
+ //# sourceMappingURL=date-inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-inputs.js","sourceRoot":"","sources":["../../src/date-inputs.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { DateRangeCalendar, TZDate } from '@automattic/ui';
3
+ import { __experimentalText as Text, Button, __experimentalHStack as HStack, __experimentalVStack as VStack, } from '@wordpress/components';
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import { startOfMonth, subMonths } from 'date-fns';
6
+ import { useState } from 'react';
7
+ import { ButtonStack } from './button-stack';
8
+ import { DateInputs } from './date-inputs';
9
+ import { formatYmd, formatSiteYmd, parseYmdLocal } from './datetime';
10
+ import { PresetsListbox } from './presets-listbox';
11
+ import { computePresetRange, getActivePresetId, presetDefs } from './utils';
12
+ export function DateRangeContent(props) {
13
+ const { isSmall, showTwoMonths = false, fromDraft, toDraft, fromStr, toStr, setFromDraft, setToDraft, setFromStr, setToStr, timezoneString, gmtOffset, onChange, onClose, compositeActiveId, setCompositeActiveId, today, todayStr, mobileLabelId, desktopLabelId, disableFuture = true, disabledBefore, defaultFallbackPreset = 'last-7-days', hiddenPresets, inputsProps, } = props;
14
+ // Avoid passing invalid or empty time zones to Intl consumers
15
+ const isValidIanaTimeZone = (timeZone) => {
16
+ if (!timeZone) {
17
+ return false;
18
+ }
19
+ try {
20
+ // Will throw for invalid IANA identifiers (including empty strings)
21
+ Intl.DateTimeFormat('en-US', { timeZone: timeZone });
22
+ return true;
23
+ }
24
+ catch (_e) {
25
+ return false;
26
+ }
27
+ };
28
+ const timeZoneForCalendar = isValidIanaTimeZone(timezoneString) ? timezoneString : undefined;
29
+ const [isTyping, setIsTyping] = useState(false);
30
+ const [inputsVersion, setInputsVersion] = useState(0);
31
+ const clear = () => {
32
+ setFromDraft(undefined);
33
+ setToDraft(undefined);
34
+ setFromStr('');
35
+ setToStr('');
36
+ setIsTyping(false);
37
+ // Force controlled inputs to remount so any internal buffers are reset
38
+ setInputsVersion((version) => version + 1);
39
+ };
40
+ const canDefaultApply = !fromDraft && !toDraft && !fromStr && !toStr && !isTyping;
41
+ const defaultPresetLabel = presetDefs.find((p) => p.id === defaultFallbackPreset)?.label || __('default range');
42
+ const apply = () => {
43
+ if (fromDraft && toDraft) {
44
+ const [startPoint, endPoint] = fromDraft <= toDraft ? [fromDraft, toDraft] : [toDraft, fromDraft];
45
+ onChange({ start: startPoint, end: endPoint });
46
+ onClose?.();
47
+ return;
48
+ }
49
+ if (canDefaultApply) {
50
+ const range = computePresetRange(defaultFallbackPreset, today);
51
+ if (range) {
52
+ onChange({ start: range.from, end: range.to });
53
+ onClose?.();
54
+ }
55
+ }
56
+ };
57
+ const setPreset = (id) => {
58
+ const range = computePresetRange(id, today);
59
+ if (!range) {
60
+ return;
61
+ }
62
+ setFromDraft(range.from);
63
+ setToDraft(range.to);
64
+ setFromStr(formatYmd(range.from, timezoneString, gmtOffset));
65
+ setToStr(formatYmd(range.to, timezoneString, gmtOffset));
66
+ onChange({ start: range.from, end: range.to });
67
+ onClose?.();
68
+ };
69
+ const activePresetId = (() => {
70
+ const preset = getActivePresetId(fromDraft, toDraft, today);
71
+ if (preset) {
72
+ return preset;
73
+ }
74
+ // Only mark "custom" when both dates are present and do not match a known preset
75
+ if (fromDraft && toDraft) {
76
+ return 'custom';
77
+ }
78
+ // When cleared or incomplete, highlight nothing
79
+ return undefined;
80
+ })();
81
+ // Site “today” as a site-day Date
82
+ const siteToday = parseYmdLocal(formatYmd(today, timezoneString, gmtOffset)) ??
83
+ new Date(today.getFullYear(), today.getMonth(), today.getDate());
84
+ // Month anchors in site time
85
+ const siteMonthStart = startOfMonth(siteToday);
86
+ const prevMonthStart = subMonths(siteMonthStart, 1);
87
+ // Build calendar month refs
88
+ const makeTZMonthFromDate = (d) => timeZoneForCalendar
89
+ ? new TZDate(Date.UTC(d.getFullYear(), d.getMonth(), 1, 12), timeZoneForCalendar)
90
+ : new Date(d.getFullYear(), d.getMonth(), 1);
91
+ const defaultMonth = showTwoMonths
92
+ ? makeTZMonthFromDate(prevMonthStart)
93
+ : makeTZMonthFromDate(siteMonthStart);
94
+ const endMonth = makeTZMonthFromDate(siteMonthStart);
95
+ // Use TZDate for calendar selection when a valid IANA time zone is available
96
+ const selected = timeZoneForCalendar && (fromDraft || toDraft)
97
+ ? {
98
+ from: fromDraft ? new TZDate(+fromDraft, timeZoneForCalendar) : undefined,
99
+ to: toDraft ? new TZDate(+toDraft, timeZoneForCalendar) : undefined,
100
+ }
101
+ : { from: fromDraft ?? undefined, to: toDraft ?? undefined };
102
+ const disabledMatcher = (() => {
103
+ const matchers = [];
104
+ if (disableFuture) {
105
+ matchers.push({ after: today });
106
+ }
107
+ if (disabledBefore) {
108
+ matchers.push({ before: disabledBefore });
109
+ }
110
+ if (matchers.length === 0) {
111
+ return undefined;
112
+ }
113
+ return matchers.length === 1 ? matchers[0] : matchers;
114
+ })();
115
+ const minInputStr = disabledBefore ? formatSiteYmd(disabledBefore) : undefined;
116
+ return (_jsxs(VStack, { as: "div", spacing: 3, style: { padding: 12 }, children: [_jsx(Text, { as: "div", weight: 600, align: "center", size: "smallTitle", children: __('Date Range') }), isSmall ? (_jsxs(VStack, { as: "div", spacing: 2, children: [_jsx(PresetsListbox, { labelId: mobileLabelId, activePresetId: activePresetId, onSelect: setPreset, compositeActiveId: compositeActiveId, setCompositeActiveId: setCompositeActiveId, hiddenPresets: hiddenPresets }), _jsx(DateInputs, { fromStr: fromStr, toStr: toStr, onFromChange: (value) => {
117
+ setFromStr(value);
118
+ const parsed = value ? parseYmdLocal(value) || undefined : undefined;
119
+ setFromDraft(parsed);
120
+ setIsTyping(Boolean(value || toStr));
121
+ }, onToChange: (value) => {
122
+ setToStr(value);
123
+ const parsed = value ? parseYmdLocal(value) || undefined : undefined;
124
+ setToDraft(parsed);
125
+ setIsTyping(Boolean(fromStr || value));
126
+ }, todayStr: todayStr, minStr: minInputStr, onFromFocus: (e) => {
127
+ setIsTyping(true);
128
+ inputsProps?.onStartFocus?.(e);
129
+ }, onToFocus: (e) => {
130
+ setIsTyping(true);
131
+ inputsProps?.onEndFocus?.(e);
132
+ }, onFromBlur: (e) => {
133
+ if (!fromStr && !toStr) {
134
+ setIsTyping(false);
135
+ }
136
+ inputsProps?.onStartBlur?.(e);
137
+ }, onToBlur: (e) => {
138
+ if (!fromStr && !toStr) {
139
+ setIsTyping(false);
140
+ }
141
+ inputsProps?.onEndBlur?.(e);
142
+ }, stack: true, fromStyle: { minWidth: 140 }, toStyle: { minWidth: 140 } }, `inputs-${inputsVersion}-mobile`)] })) : (_jsx(HStack, { as: "div", spacing: 4, justify: "flex-end", className: "daterange-inputs", wrap: false, style: { width: '100%' }, children: _jsx(DateInputs, { fromStr: fromStr, toStr: toStr, onFromChange: (value) => {
143
+ setFromStr(value);
144
+ const parsed = value ? parseYmdLocal(value) || undefined : undefined;
145
+ setFromDraft(parsed);
146
+ setIsTyping(Boolean(value || toStr));
147
+ }, onToChange: (value) => {
148
+ setToStr(value);
149
+ const parsed = value ? parseYmdLocal(value) || undefined : undefined;
150
+ setToDraft(parsed);
151
+ setIsTyping(Boolean(fromStr || value));
152
+ }, todayStr: todayStr, minStr: minInputStr, onFromFocus: (e) => {
153
+ setIsTyping(true);
154
+ inputsProps?.onStartFocus?.(e);
155
+ }, onToFocus: (e) => {
156
+ setIsTyping(true);
157
+ inputsProps?.onEndFocus?.(e);
158
+ }, onFromBlur: (e) => {
159
+ if (!fromStr && !toStr) {
160
+ setIsTyping(false);
161
+ }
162
+ inputsProps?.onStartBlur?.(e);
163
+ }, onToBlur: (e) => {
164
+ if (!fromStr && !toStr) {
165
+ setIsTyping(false);
166
+ }
167
+ inputsProps?.onEndBlur?.(e);
168
+ }, fromStyle: { minWidth: 220, flex: '0 0 auto' }, toStyle: { minWidth: 220, flex: '0 0 auto' }, justify: "flex-end", containerStyle: { width: '100%' } }, `inputs-${inputsVersion}-desktop`) })), _jsxs(HStack, { as: "div", spacing: 4, justify: "flex-start", className: "daterange-body", wrap: false, children: [!isSmall && (_jsx(PresetsListbox, { labelId: desktopLabelId, activePresetId: activePresetId, onSelect: setPreset, compositeActiveId: compositeActiveId, setCompositeActiveId: setCompositeActiveId, hiddenPresets: hiddenPresets })), _jsx("div", { className: "daterange-calendar", children: _jsx(DateRangeCalendar, { timeZone: timeZoneForCalendar, numberOfMonths: isSmall ? 1 : 2, defaultMonth: defaultMonth, endMonth: endMonth, disabled: disabledMatcher, excludeDisabled: true, selected: selected, onSelect: (range) => {
169
+ const toNative = (d) => (d ? new Date(d.getTime()) : undefined);
170
+ if (range?.from) {
171
+ const from = toNative(range.from);
172
+ setFromDraft(from);
173
+ if (from) {
174
+ setFromStr(formatYmd(from, timezoneString, gmtOffset));
175
+ }
176
+ }
177
+ if (range?.to) {
178
+ const to = toNative(range.to);
179
+ setToDraft(to);
180
+ if (to) {
181
+ setToStr(formatYmd(to, timezoneString, gmtOffset));
182
+ }
183
+ }
184
+ setIsTyping(false);
185
+ } }) })] }), _jsxs(ButtonStack, { as: "div", justify: "flex-end", children: [_jsx(Button, { variant: "secondary", onClick: clear, children: __('Clear') }), _jsx(Button, { variant: "primary", onClick: apply, disabled: (!fromDraft || !toDraft) && !canDefaultApply, "aria-label":
186
+ /* translators: %s is the preset label, e.g. 'Last 30 days' */
187
+ canDefaultApply ? sprintf(__('Apply %s'), defaultPresetLabel) : __('Apply'), children:
188
+ /* translators: %s is the preset label, e.g. 'Last 30 days' */
189
+ canDefaultApply ? sprintf(__('Apply %s'), defaultPresetLabel) : __('Apply') })] })] }));
190
+ }
191
+ //# sourceMappingURL=date-range-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-content.js","sourceRoot":"","sources":["../../src/date-range-content.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Dropdown, Tooltip, Button } from '@wordpress/components';
3
+ import { useMediaQuery, useInstanceId } from '@wordpress/compose';
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import { calendar } from '@wordpress/icons';
6
+ import { useMemo, useState } from 'react';
7
+ import { DateRangeContent } from './date-range-content';
8
+ import { parseYmdLocal, formatYmd, formatSiteYmd } from './datetime';
9
+ import { formatLabel } from './utils';
10
+ import './style.scss';
11
+ export function DateRangePicker({ start, end, onChange, gmtOffset, timezoneString, locale, disableFuture = true, disabledBefore, defaultFallbackPreset = 'last-7-days', hiddenPresets, inputsProps, }) {
12
+ const isSmall = useMediaQuery('(max-width: 600px)');
13
+ // Use a wider breakpoint to decide when two calendars can fit comfortably
14
+ const showTwoMonths = useMediaQuery('(min-width: 900px)');
15
+ const instanceId = useInstanceId(DateRangePicker, 'daterange');
16
+ const mobileLabelId = `presets-label-${instanceId}-mobile`;
17
+ const desktopLabelId = `presets-label-${instanceId}-desktop`;
18
+ const label = formatLabel(start, end, locale);
19
+ // Reset internal draft state when key inputs change by remounting the inner component
20
+ const resetKey = [
21
+ formatSiteYmd(start),
22
+ formatSiteYmd(end),
23
+ timezoneString ?? '',
24
+ gmtOffset ?? '',
25
+ ].join('|');
26
+ return (_jsx(Dropdown, { popoverProps: { className: 'daterange-popover' }, renderToggle: ({ onToggle, isOpen }) => (_jsx(Tooltip, { text: __('Select a date range'), placement: "top", children: _jsx("div", { className: "daterange-input__toggle", children: _jsx(Button, { type: "button", variant: "tertiary", onClick: onToggle, "aria-haspopup": "dialog", "aria-expanded": isOpen, "aria-label": sprintf(
27
+ /* Translators: %s: date range label */
28
+ __('Date range: %s. Activate to open calendar.'), label), className: "daterange-input__field", icon: calendar, iconPosition: "right", children: _jsx("span", { "aria-hidden": "true", className: "daterange-input__text", children: label }) }) }) })), renderContent: ({ onClose }) => (_jsx(DateRangePickerInner, { isSmall: isSmall, showTwoMonths: showTwoMonths, start: start, end: end, timezoneString: timezoneString, gmtOffset: gmtOffset, onChange: onChange, onClose: onClose, mobileLabelId: mobileLabelId, desktopLabelId: desktopLabelId, disableFuture: disableFuture, disabledBefore: disabledBefore, defaultFallbackPreset: defaultFallbackPreset, hiddenPresets: hiddenPresets, inputsProps: inputsProps }, resetKey)) }));
29
+ }
30
+ function DateRangePickerInner({ isSmall, showTwoMonths, start, end, timezoneString, gmtOffset, onChange, onClose, mobileLabelId, desktopLabelId, disableFuture, disabledBefore, defaultFallbackPreset, hiddenPresets, inputsProps, }) {
31
+ const [fromDraft, setFromDraft] = useState(() => start);
32
+ const [toDraft, setToDraft] = useState(() => end);
33
+ const [fromStr, setFromStr] = useState(() => formatSiteYmd(start));
34
+ const [toStr, setToStr] = useState(() => formatSiteYmd(end));
35
+ // Tracks the keyboard-focused preset in the listbox (roving focus), not the selected preset.
36
+ const [compositeActiveId, setCompositeActiveId] = useState(null);
37
+ const today = useMemo(() => {
38
+ const parsed = parseYmdLocal(formatYmd(new Date(), timezoneString, gmtOffset));
39
+ // Fallback to local midnight if parsing ever fails
40
+ return (parsed ?? new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()));
41
+ }, [timezoneString, gmtOffset]);
42
+ const todayStr = useMemo(() => formatSiteYmd(today), [today]);
43
+ return (_jsx(DateRangeContent, { isSmall: isSmall, fromDraft: fromDraft, toDraft: toDraft, fromStr: fromStr, toStr: toStr, setFromDraft: setFromDraft, setToDraft: setToDraft, setFromStr: setFromStr, setToStr: setToStr, timezoneString: timezoneString, gmtOffset: gmtOffset, onChange: onChange, onClose: onClose, compositeActiveId: compositeActiveId, setCompositeActiveId: setCompositeActiveId, today: today, todayStr: todayStr, mobileLabelId: mobileLabelId, desktopLabelId: desktopLabelId, disableFuture: disableFuture, disabledBefore: disabledBefore, showTwoMonths: showTwoMonths, defaultFallbackPreset: defaultFallbackPreset, hiddenPresets: hiddenPresets, inputsProps: inputsProps }));
44
+ }
45
+ //# sourceMappingURL=date-range-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-picker.js","sourceRoot":"","sources":["../../src/date-range-picker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { dateI18n } from '@wordpress/date';
2
+ import { parse, isValid, format } from 'date-fns';
3
+ const YMD_REGEX = /^\d{4}-\d{2}-\d{2}$/;
4
+ export function formatDate(date, locale, formatOptions = { dateStyle: 'medium' }) {
5
+ if (isNaN(date.getTime())) {
6
+ return '';
7
+ }
8
+ return new Intl.DateTimeFormat(locale, formatOptions).format(date);
9
+ }
10
+ /**
11
+ * Parse a date string in the format "YYYY-MM-DD" (local time).
12
+ */
13
+ export function parseYmdLocal(value) {
14
+ if (!YMD_REGEX.test(value)) {
15
+ return null;
16
+ }
17
+ const parsed = parse(value, 'yyyy-MM-dd', new Date());
18
+ if (!isValid(parsed)) {
19
+ return null;
20
+ }
21
+ // Ensure strict match (reject overflows like 2023-02-31 -> 2023-03-03)
22
+ return format(parsed, 'yyyy-MM-dd') === value ? parsed : null;
23
+ }
24
+ /**
25
+ * Format a date as a site calendar day (YYYY-MM-DD).
26
+ */
27
+ export function formatYmd(date, timezoneString, gmtOffset) {
28
+ if (timezoneString) {
29
+ return dateI18n('Y-m-d', date, timezoneString);
30
+ }
31
+ if (typeof gmtOffset === 'number') {
32
+ const shifted = new Date(date.getTime() + gmtOffset * 60 * 60 * 1000);
33
+ const year = shifted.getUTCFullYear();
34
+ const month = String(shifted.getUTCMonth() + 1).padStart(2, '0');
35
+ const day = String(shifted.getUTCDate()).padStart(2, '0');
36
+ return `${year}-${month}-${day}`;
37
+ }
38
+ return dateI18n('Y-m-d', date);
39
+ }
40
+ /**
41
+ * Format a Date that already represents a site calendar day.
42
+ * This avoids reapplying timezone math to dates coming from the picker or URL.
43
+ */
44
+ export function formatSiteYmd(date) {
45
+ const year = date.getFullYear();
46
+ const month = String(date.getMonth() + 1).padStart(2, '0');
47
+ const day = String(date.getDate()).padStart(2, '0');
48
+ return `${year}-${month}-${day}`;
49
+ }
50
+ //# sourceMappingURL=datetime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../src/datetime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElD,MAAM,SAAS,GAAG,qBAAqB,CAAC;AAExC,MAAM,UAAU,UAAU,CACzB,IAAU,EACV,MAAc,EACd,gBAA4C,EAAE,SAAS,EAAE,QAAQ,EAAE;IAEnE,IAAK,KAAK,CAAE,IAAI,CAAC,OAAO,EAAE,CAAE,EAAG,CAAC;QAC/B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,cAAc,CAAE,MAAM,EAAE,aAAa,CAAE,CAAC,MAAM,CAAE,IAAI,CAAE,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAE,KAAa;IAC3C,IAAK,CAAE,SAAS,CAAC,IAAI,CAAE,KAAK,CAAE,EAAG,CAAC;QACjC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAE,KAAK,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,CAAE,CAAC;IACxD,IAAK,CAAE,OAAO,CAAE,MAAM,CAAE,EAAG,CAAC;QAC3B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,uEAAuE;IACvE,OAAO,MAAM,CAAE,MAAM,EAAE,YAAY,CAAE,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAE,IAAU,EAAE,cAAuB,EAAE,SAAkB;IACjF,IAAK,cAAc,EAAG,CAAC;QACtB,OAAO,QAAQ,CAAE,OAAO,EAAE,IAAI,EAAE,cAAc,CAAE,CAAC;IAClD,CAAC;IACD,IAAK,OAAO,SAAS,KAAK,QAAQ,EAAG,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAE,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAE,CAAC;QACxE,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAE,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAE,CAAC,QAAQ,CAAE,CAAC,EAAE,GAAG,CAAE,CAAC;QACrE,MAAM,GAAG,GAAG,MAAM,CAAE,OAAO,CAAC,UAAU,EAAE,CAAE,CAAC,QAAQ,CAAE,CAAC,EAAE,GAAG,CAAE,CAAC;QAC9D,OAAO,GAAI,IAAK,IAAK,KAAM,IAAK,GAAI,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,QAAQ,CAAE,OAAO,EAAE,IAAI,CAAE,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAE,IAAU;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAE,CAAC,QAAQ,CAAE,CAAC,EAAE,GAAG,CAAE,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAE,IAAI,CAAC,OAAO,EAAE,CAAE,CAAC,QAAQ,CAAE,CAAC,EAAE,GAAG,CAAE,CAAC;IACxD,OAAO,GAAI,IAAK,IAAK,KAAM,IAAK,GAAI,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { DateRangePicker } from './date-range-picker';
2
+ export { computePresetRange, formatLabel, getActivePresetId, isLast7Days, presetDefs, } from './utils';
3
+ export { formatYmd, formatSiteYmd, parseYmdLocal } from './datetime';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EACN,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,UAAU,GACV,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, __experimentalVStack as VStack, Composite, VisuallyHidden, } from '@wordpress/components';
3
+ import { __ } from '@wordpress/i18n';
4
+ import { presetDefs } from './utils';
5
+ export function PresetsListbox({ labelId, activePresetId, onSelect, compositeActiveId, setCompositeActiveId, hiddenPresets, }) {
6
+ const items = [
7
+ ...presetDefs,
8
+ { id: 'custom', label: __('Custom') },
9
+ ].filter((item) => !hiddenPresets?.includes(item.id));
10
+ return (_jsxs(VStack, { justify: "flex-start", alignment: "stretch", spacing: 1, className: "daterange-presets", children: [_jsx(VisuallyHidden, { id: labelId, children: __('Date range presets') }), _jsx(Composite, { "aria-labelledby": labelId, activeId: compositeActiveId ?? undefined, setActiveId: (id) => setCompositeActiveId(id ?? null), focusLoop: true, virtualFocus: true, role: "listbox", children: _jsx(VStack, { justify: "flex-start", alignment: "stretch", spacing: 1, children: items.map((preset) => {
11
+ const isSelected = activePresetId === preset.id;
12
+ return (_jsx(Composite.Item, { id: preset.id, render: _jsx(Button, { size: "compact", variant: isSelected ? 'primary' : undefined }), onClick: () => onSelect(preset.id), role: "option", "aria-selected": isSelected || undefined, className: "preset-listbox__item", children: preset.label }, preset.id));
13
+ }) }) })] }));
14
+ }
15
+ //# sourceMappingURL=presets-listbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets-listbox.js","sourceRoot":"","sources":["../../src/presets-listbox.tsx"],"names":[],"mappings":";AAAA,OAAO,EACN,MAAM,EACN,oBAAoB,IAAI,MAAM,EAC9B,SAAS,EACT,cAAc,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAYrC,MAAM,UAAU,cAAc,CAAE,EAC/B,OAAO,EACP,cAAc,EACd,QAAQ,EACR,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,GACQ;IACrB,MAAM,KAAK,GAAqD;QAC/D,GAAG,UAAU;QACb,EAAE,EAAE,EAAE,QAAiB,EAAE,KAAK,EAAE,EAAE,CAAE,QAAQ,CAAE,EAAE;KAChD,CAAC,MAAM,CAAE,CAAE,IAAI,EAAG,EAAE,CAAC,CAAE,aAAa,EAAE,QAAQ,CAAE,IAAI,CAAC,EAAE,CAAE,CAAE,CAAC;IAE7D,OAAO,CACN,MAAC,MAAM,IAAC,OAAO,EAAC,YAAY,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAG,CAAC,EAAG,SAAS,EAAC,mBAAmB,aAC3F,KAAC,cAAc,IAAC,EAAE,EAAG,OAAO,YAAK,EAAE,CAAE,oBAAoB,CAAE,GAAmB,EAC9E,KAAC,SAAS,uBACS,OAAO,EACzB,QAAQ,EAAG,iBAAiB,IAAI,SAAS,EACzC,WAAW,EAAG,CAAE,EAAE,EAAG,EAAE,CAAC,oBAAoB,CAAE,EAAE,IAAI,IAAI,CAAE,EAC1D,SAAS,QACT,YAAY,QACZ,IAAI,EAAC,SAAS,YAEd,KAAC,MAAM,IAAC,OAAO,EAAC,YAAY,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAG,CAAC,YACzD,KAAK,CAAC,GAAG,CAAE,CAAE,MAAM,EAAG,EAAE;wBACzB,MAAM,UAAU,GAAG,cAAc,KAAK,MAAM,CAAC,EAAE,CAAC;wBAChD,OAAO,CACN,KAAC,SAAS,CAAC,IAAI,IAEd,EAAE,EAAG,MAAM,CAAC,EAAE,EACd,MAAM,EAAG,KAAC,MAAM,IAAC,IAAI,EAAC,SAAS,EAAC,OAAO,EAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAK,EACjF,OAAO,EAAG,GAAG,EAAE,CAAC,QAAQ,CAAE,MAAM,CAAC,EAAE,CAAE,EACrC,IAAI,EAAC,QAAQ,mBACG,UAAU,IAAI,SAAS,EACvC,SAAS,EAAC,sBAAsB,YAE9B,MAAM,CAAC,KAAK,IARR,MAAM,CAAC,EAAE,CASC,CACjB,CAAC;oBACH,CAAC,CAAE,GACK,GACE,IACJ,CACT,CAAC;AACH,CAAC"}