@auth0/quantum-product 2.5.7 → 2.5.9

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 (36) hide show
  1. package/date-picker/date-picker-classes.d.ts +10 -0
  2. package/date-picker/date-picker-classes.js +21 -0
  3. package/date-picker/date-picker-context.d.ts +10 -0
  4. package/date-picker/date-picker-context.js +36 -0
  5. package/date-picker/date-picker-popover.d.ts +4 -0
  6. package/date-picker/date-picker-popover.js +458 -0
  7. package/date-picker/date-picker-state.d.ts +24 -0
  8. package/date-picker/date-picker-state.js +95 -0
  9. package/date-picker/date-picker-types.d.ts +43 -0
  10. package/date-picker/date-picker-types.js +2 -0
  11. package/date-picker/date-picker-utils.d.ts +47 -0
  12. package/date-picker/date-picker-utils.js +165 -0
  13. package/date-picker/date-picker.d.ts +9 -0
  14. package/date-picker/date-picker.js +164 -0
  15. package/date-picker/index.d.ts +11 -0
  16. package/date-picker/index.js +17 -0
  17. package/esm/date-picker/date-picker-classes.js +16 -0
  18. package/esm/date-picker/date-picker-context.js +9 -0
  19. package/esm/date-picker/date-picker-popover.js +429 -0
  20. package/esm/date-picker/date-picker-state.js +66 -0
  21. package/esm/date-picker/date-picker-types.js +1 -0
  22. package/esm/date-picker/date-picker-utils.js +153 -0
  23. package/esm/date-picker/date-picker.js +135 -0
  24. package/esm/date-picker/index.js +5 -0
  25. package/esm/icon/index.js +3 -1
  26. package/esm/icon-button/icon-button.js +14 -3
  27. package/esm/index.js +1 -0
  28. package/esm/stepper/step-label/step-label.js +19 -3
  29. package/icon/index.d.ts +2 -0
  30. package/icon/index.js +8 -6
  31. package/icon-button/icon-button.d.ts +3 -0
  32. package/icon-button/icon-button.js +14 -3
  33. package/index.d.ts +1 -0
  34. package/index.js +1 -0
  35. package/package.json +3 -2
  36. package/stepper/step-label/step-label.js +18 -2
@@ -0,0 +1,10 @@
1
+ export declare const datePickerComponentName: "QuantumDatePicker";
2
+ export declare const datePickerPopoverComponentName: "QuantumDatePickerPopover";
3
+ export declare function getDatePickerUtilityClass(slot: string): string;
4
+ export declare function getDatePickerPopoverUtilityClass(slot: string): string;
5
+ export declare const datePickerClasses: Record<"input" | "root", string>;
6
+ export declare const datePickerPopoverClasses: Record<"content" | "root" | "calendarWrapper" | "buttonContainer", string>;
7
+ export type DatePickerClasses = typeof datePickerClasses;
8
+ export type DatePickerClassKey = keyof DatePickerClasses;
9
+ export type DatePickerPopoverClasses = typeof datePickerPopoverClasses;
10
+ export type DatePickerPopoverClassKey = keyof DatePickerPopoverClasses;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.datePickerPopoverClasses = exports.datePickerClasses = exports.getDatePickerPopoverUtilityClass = exports.getDatePickerUtilityClass = exports.datePickerPopoverComponentName = exports.datePickerComponentName = void 0;
4
+ var classes_1 = require("../styles/classes");
5
+ exports.datePickerComponentName = 'QuantumDatePicker';
6
+ exports.datePickerPopoverComponentName = 'QuantumDatePickerPopover';
7
+ function getDatePickerUtilityClass(slot) {
8
+ return (0, classes_1.generateUtilityClass)(exports.datePickerComponentName, slot);
9
+ }
10
+ exports.getDatePickerUtilityClass = getDatePickerUtilityClass;
11
+ function getDatePickerPopoverUtilityClass(slot) {
12
+ return (0, classes_1.generateUtilityClass)(exports.datePickerPopoverComponentName, slot);
13
+ }
14
+ exports.getDatePickerPopoverUtilityClass = getDatePickerPopoverUtilityClass;
15
+ exports.datePickerClasses = (0, classes_1.generateUtilityClasses)(exports.datePickerComponentName, ['root', 'input']);
16
+ exports.datePickerPopoverClasses = (0, classes_1.generateUtilityClasses)(exports.datePickerPopoverComponentName, [
17
+ 'root',
18
+ 'content',
19
+ 'calendarWrapper',
20
+ 'buttonContainer',
21
+ ]);
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ export interface IDatePickerContextValue {
3
+ dateFormat: string;
4
+ timeFormat?: string;
5
+ onSelectDate(date: string, shouldClose?: boolean): void;
6
+ isRangeSelection?: boolean;
7
+ showTimeInput?: boolean;
8
+ }
9
+ export declare const DatePickerContext: React.Context<IDatePickerContextValue>;
10
+ export declare const useDatePickerContext: () => IDatePickerContextValue;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.useDatePickerContext = exports.DatePickerContext = void 0;
27
+ var React = __importStar(require("react"));
28
+ exports.DatePickerContext = React.createContext({
29
+ dateFormat: 'MM/dd/yyyy',
30
+ timeFormat: 'HH:mm:ss',
31
+ onSelectDate: function () { return undefined; },
32
+ isRangeSelection: false,
33
+ showTimeInput: false,
34
+ });
35
+ var useDatePickerContext = function () { return React.useContext(exports.DatePickerContext); };
36
+ exports.useDatePickerContext = useDatePickerContext;
@@ -0,0 +1,4 @@
1
+ import 'react-day-picker/style.css';
2
+ import * as React from 'react';
3
+ import { IDatePickerPopoverProps } from './date-picker-types';
4
+ export declare const DatePickerPopover: React.ForwardRefExoticComponent<IDatePickerPopoverProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,458 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __rest = (this && this.__rest) || function (s, e) {
37
+ var t = {};
38
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
39
+ t[p] = s[p];
40
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
41
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
42
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
43
+ t[p[i]] = s[p[i]];
44
+ }
45
+ return t;
46
+ };
47
+ var __read = (this && this.__read) || function (o, n) {
48
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
49
+ if (!m) return o;
50
+ var i = m.call(o), r, ar = [], e;
51
+ try {
52
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
53
+ }
54
+ catch (error) { e = { error: error }; }
55
+ finally {
56
+ try {
57
+ if (r && !r.done && (m = i["return"])) m.call(i);
58
+ }
59
+ finally { if (e) throw e.error; }
60
+ }
61
+ return ar;
62
+ };
63
+ var __importDefault = (this && this.__importDefault) || function (mod) {
64
+ return (mod && mod.__esModule) ? mod : { "default": mod };
65
+ };
66
+ Object.defineProperty(exports, "__esModule", { value: true });
67
+ exports.DatePickerPopover = void 0;
68
+ require("react-day-picker/style.css");
69
+ var React = __importStar(require("react"));
70
+ var react_day_picker_1 = require("react-day-picker");
71
+ var box_1 = require("../box");
72
+ var button_1 = require("../button");
73
+ var card_1 = require("../card");
74
+ var dropdown_menu_1 = require("../dropdown-menu");
75
+ var popover_1 = require("../popover");
76
+ var styled_1 = require("../styled");
77
+ var classes_1 = require("../styles/classes");
78
+ var text_field_1 = require("../text-field");
79
+ var clsx_1 = __importDefault(require("../utils/clsx"));
80
+ var date_picker_classes_1 = require("./date-picker-classes");
81
+ var date_picker_utils_1 = require("./date-picker-utils");
82
+ var Root = (0, styled_1.styled)(popover_1.Popover, { name: date_picker_classes_1.datePickerPopoverComponentName, slot: 'Root' })(function (_a) {
83
+ var theme = _a.theme;
84
+ return ({
85
+ marginTop: theme.spacing(0.5),
86
+ });
87
+ });
88
+ var Content = (0, styled_1.styled)(card_1.Card, { name: date_picker_classes_1.datePickerPopoverComponentName, slot: 'Content' })(function (_a) {
89
+ var theme = _a.theme, ownerState = _a.ownerState;
90
+ return ({
91
+ maxHeight: 'calc(100% - 96px)',
92
+ minWidth: theme.typography.pxToRem(180),
93
+ width: ownerState.currentView === 'options'
94
+ ? ownerState.inputWidth
95
+ ? "".concat(ownerState.inputWidth, "px")
96
+ : 'auto'
97
+ : ownerState.showTwoMonths
98
+ ? theme.typography.pxToRem(514) // Width for two months calendar view
99
+ : theme.typography.pxToRem(256),
100
+ WebkitOverflowScrolling: 'touch',
101
+ padding: theme.spacing(1),
102
+ border: "1px solid ".concat(theme.tokens.color_border_default),
103
+ borderRadius: 8,
104
+ borderColor: theme.tokens.color_border_default,
105
+ boxShadow: "0px 33px 80px rgba(0, 0, 0, 0.07), 0px 13.7866px 33.4221px rgba(0, 0, 0, 0.0503198), 0px 7.37098px 17.869px rgba(0, 0, 0, 0.0417275), 0px 4.13211px 10.0172px rgba(0, 0, 0, 0.035), 0px 2.19453px 5.32008px rgba(0, 0, 0, 0.0282725), 0px 0.913195px 2.21381px rgba(0, 0, 0, 0.0196802)",
106
+ });
107
+ });
108
+ var CalendarWrapper = (0, styled_1.styled)('div', { name: date_picker_classes_1.datePickerPopoverComponentName, slot: 'CalendarWrapper' })(function (_a) {
109
+ var theme = _a.theme;
110
+ return ({
111
+ padding: theme.spacing(1),
112
+ '.rdp': {
113
+ '--rdp-cell-size': theme.spacing(2),
114
+ '--rdp-accent-color': theme.tokens.color_bg_button_primary,
115
+ '--rdp-background-color': theme.tokens.color_bg_link_primary_hover,
116
+ '--rdp-day-width': theme.spacing(2),
117
+ '--rdp-day-height': theme.spacing(2),
118
+ '--rdp-day_button-width': theme.spacing(2),
119
+ '--rdp-day_button-height': theme.spacing(2),
120
+ margin: 0,
121
+ },
122
+ '.rdp-nav': {
123
+ width: '100%',
124
+ },
125
+ '.rdp-day': {
126
+ color: theme.tokens.color_fg_default,
127
+ fontSize: theme.spacing(1.75),
128
+ width: theme.spacing(4),
129
+ height: theme.spacing(4),
130
+ },
131
+ '.rdp-month_caption': {
132
+ justifyContent: 'center',
133
+ },
134
+ '.rdp-button_previous': {
135
+ '&:focus': {
136
+ outline: "2px solid ".concat(theme.tokens.color_border_focus_bold),
137
+ outlineOffset: 2,
138
+ },
139
+ border: "1px solid ".concat(theme.tokens.color_border_default),
140
+ position: 'absolute',
141
+ left: 0,
142
+ width: theme.spacing(3),
143
+ height: theme.spacing(3),
144
+ borderRadius: theme.spacing(0.5),
145
+ display: 'flex',
146
+ alignItems: 'center',
147
+ justifyContent: 'center',
148
+ },
149
+ '.rdp-button_next': {
150
+ '&:focus': {
151
+ outline: "2px solid ".concat(theme.tokens.color_border_focus_bold),
152
+ outlineOffset: 2,
153
+ },
154
+ border: "1px solid ".concat(theme.tokens.color_border_default),
155
+ position: 'absolute',
156
+ right: 0,
157
+ width: theme.spacing(3),
158
+ height: theme.spacing(3),
159
+ borderRadius: theme.spacing(0.5),
160
+ display: 'flex',
161
+ alignItems: 'center',
162
+ justifyContent: 'center',
163
+ },
164
+ '.rdp-chevron': {
165
+ width: theme.spacing(2),
166
+ height: theme.spacing(2),
167
+ display: 'inline-block',
168
+ margin: 0,
169
+ fill: theme.tokens.color_fg_bold,
170
+ },
171
+ '.rdp-day_button': {
172
+ width: theme.spacing(4),
173
+ height: theme.spacing(4),
174
+ },
175
+ '.rdp-range_start .rdp-day_button': {
176
+ backgroundColor: theme.tokens.color_bg_button_primary,
177
+ border: 'none',
178
+ borderRadius: theme.spacing(0.75),
179
+ },
180
+ '.rdp-range_end .rdp-day_button': {
181
+ backgroundColor: theme.tokens.color_bg_button_primary,
182
+ border: 'none',
183
+ borderRadius: theme.spacing(0.75),
184
+ },
185
+ '.rdp-range_middle': {
186
+ backgroundColor: theme.tokens.color_bg_brand_primary_subtle,
187
+ },
188
+ '.rdp-selected': {
189
+ color: theme.tokens.color_fg_bold,
190
+ fontWeight: 'inherit',
191
+ fontSize: theme.spacing(1.75),
192
+ },
193
+ '.rdp-caption_label': {
194
+ fontSize: 14,
195
+ },
196
+ '.rdp-day_selected': {
197
+ backgroundColor: theme.tokens.color_bg_button_primary,
198
+ color: theme.tokens.color_fg_on_button_primary,
199
+ },
200
+ '.rdp-day_selected:hover': {
201
+ backgroundColor: theme.tokens.color_bg_button_primary_hover,
202
+ },
203
+ '.rdp-day_range_start, .rdp-day_range_end': {
204
+ backgroundColor: theme.tokens.color_bg_button_primary,
205
+ color: theme.tokens.color_fg_on_button_primary,
206
+ },
207
+ '.rdp-day_range_middle': {
208
+ backgroundColor: theme.tokens.color_bg_link_primary_hover,
209
+ },
210
+ });
211
+ });
212
+ var ButtonContainer = (0, styled_1.styled)(box_1.Box, { name: date_picker_classes_1.datePickerPopoverComponentName, slot: 'ButtonContainer' })(function (_a) {
213
+ var theme = _a.theme;
214
+ return ({
215
+ display: 'flex',
216
+ justifyContent: 'flex-end',
217
+ padding: theme.spacing(1),
218
+ borderTop: "1px solid ".concat(theme.tokens.color_border_default),
219
+ });
220
+ });
221
+ var TimeInputContainer = (0, styled_1.styled)('div', { name: date_picker_classes_1.datePickerPopoverComponentName, slot: 'TimeInput' })(function (_a) {
222
+ var theme = _a.theme;
223
+ return ({
224
+ display: 'flex',
225
+ justifyContent: 'flex-start',
226
+ gap: theme.spacing(0.5),
227
+ padding: theme.spacing(1),
228
+ alignItems: 'center',
229
+ borderTop: "1px solid ".concat(theme.tokens.color_border_default),
230
+ });
231
+ });
232
+ var EndTimeInputContainer = (0, styled_1.styled)('div', { name: date_picker_classes_1.datePickerPopoverComponentName, slot: 'EndTimeInput' })(function (_a) {
233
+ var theme = _a.theme;
234
+ return ({
235
+ display: 'flex',
236
+ justifyContent: 'flex-start',
237
+ gap: theme.spacing(0.5),
238
+ alignItems: 'center',
239
+ marginLeft: theme.spacing(2),
240
+ });
241
+ });
242
+ var TimeInput = (0, styled_1.styled)(text_field_1.TextField, { name: date_picker_classes_1.datePickerPopoverComponentName, slot: 'TimeInputField' })({
243
+ width: '3rem',
244
+ });
245
+ var TimeInputLabel = (0, styled_1.styled)('span', { name: date_picker_classes_1.datePickerPopoverComponentName, slot: 'TimeInputLabel' })(function (_a) {
246
+ var theme = _a.theme;
247
+ return ({
248
+ color: theme.tokens.color_fg_default,
249
+ fontSize: theme.typography.caption.fontSize,
250
+ });
251
+ });
252
+ exports.DatePickerPopover = React.forwardRef(function (props, ref) {
253
+ var anchorEl = props.anchorEl, open = props.open, onClose = props.onClose, onDateSelect = props.onDateSelect, options = props.options, value = props.value, _a = props.dateFormat, dateFormat = _a === void 0 ? 'MM/dd/yyyy' : _a, _b = props.timeFormat, timeFormat = _b === void 0 ? 'HH:mm:ss' : _b, PopoverProps = props.PopoverProps, _c = props.showTwoMonths, showTwoMonths = _c === void 0 ? false : _c, _d = props.isRangeSelection, isRangeSelection = _d === void 0 ? false : _d, _e = props.showTimeInput, showTimeInput = _e === void 0 ? false : _e, propClasses = props.classes, rootProps = __rest(props, ["anchorEl", "open", "onClose", "onDateSelect", "options", "value", "dateFormat", "timeFormat", "PopoverProps", "showTwoMonths", "isRangeSelection", "showTimeInput", "classes"]);
254
+ var classes = (0, classes_1.useMergedClasses)(date_picker_classes_1.datePickerPopoverClasses, date_picker_classes_1.getDatePickerPopoverUtilityClass, propClasses);
255
+ // State to track the current view: 'options' or 'calendar'
256
+ var _f = __read(React.useState(options ? 'options' : 'calendar'), 2), currentView = _f[0], setCurrentView = _f[1];
257
+ // State to track the current range selection
258
+ var _g = __read(React.useState({}), 2), rangeSelection = _g[0], setRangeSelection = _g[1];
259
+ // Time state for single date or range start/end
260
+ var _h = __read(React.useState('00'), 2), hours = _h[0], setHours = _h[1];
261
+ var _j = __read(React.useState('00'), 2), minutes = _j[0], setMinutes = _j[1];
262
+ var _k = __read(React.useState('00'), 2), seconds = _k[0], setSeconds = _k[1];
263
+ // For range selection - end time
264
+ var _l = __read(React.useState('00'), 2), endHours = _l[0], setEndHours = _l[1];
265
+ var _m = __read(React.useState('00'), 2), endMinutes = _m[0], setEndMinutes = _m[1];
266
+ var _o = __read(React.useState('00'), 2), endSeconds = _o[0], setEndSeconds = _o[1];
267
+ // Reset selection and view when popover opens/closes
268
+ React.useEffect(function () {
269
+ if (!open) {
270
+ setRangeSelection({});
271
+ // Reset the view to options if there are options available
272
+ if (options) {
273
+ setCurrentView('options');
274
+ }
275
+ }
276
+ else if (value) {
277
+ if (isRangeSelection && value.includes('-')) {
278
+ // Parse range selection
279
+ var _a = (0, date_picker_utils_1.parseDateRange)(value, dateFormat, showTimeInput ? timeFormat : undefined), from = _a.from, to = _a.to;
280
+ if (from) {
281
+ // Extract time components for range start
282
+ var _b = (0, date_picker_utils_1.extractTimeComponents)(from), h = _b.hours, m = _b.minutes, s = _b.seconds;
283
+ setHours(h);
284
+ setMinutes(m);
285
+ setSeconds(s);
286
+ }
287
+ if (to) {
288
+ // Extract time components for range end
289
+ var _c = (0, date_picker_utils_1.extractTimeComponents)(to), h = _c.hours, m = _c.minutes, s = _c.seconds;
290
+ setEndHours(h);
291
+ setEndMinutes(m);
292
+ setEndSeconds(s);
293
+ }
294
+ if (from && to) {
295
+ setRangeSelection({ from: from, to: to });
296
+ }
297
+ }
298
+ else if (!isRangeSelection) {
299
+ // For single date, try to parse with time format first if showTimeInput is enabled
300
+ var formatString = showTimeInput ? "".concat(dateFormat, " ").concat(timeFormat) : dateFormat;
301
+ var date = (0, date_picker_utils_1.parseDate)(value, formatString);
302
+ if (date) {
303
+ setRangeSelection({ from: date });
304
+ if (showTimeInput) {
305
+ // Extract time components
306
+ var _d = (0, date_picker_utils_1.extractTimeComponents)(date), h = _d.hours, m = _d.minutes, s = _d.seconds;
307
+ setHours(h);
308
+ setMinutes(m);
309
+ setSeconds(s);
310
+ }
311
+ }
312
+ }
313
+ }
314
+ }, [open, value, isRangeSelection, dateFormat, timeFormat, options, showTimeInput]);
315
+ // Handle calendar selections
316
+ var handleCalendarSelect = function (selection) {
317
+ if (!selection)
318
+ return;
319
+ // Keep the time values when date changes
320
+ if (selection.from && !selection.to) {
321
+ // Single date or range start
322
+ if (showTimeInput) {
323
+ var newFrom = (0, date_picker_utils_1.applyTimeToDate)(selection.from, { hours: hours, minutes: minutes, seconds: seconds });
324
+ setRangeSelection({ from: newFrom });
325
+ }
326
+ else {
327
+ setRangeSelection({ from: selection.from });
328
+ }
329
+ }
330
+ else if (selection.from && selection.to) {
331
+ // Range selection
332
+ if (showTimeInput) {
333
+ var newFrom = (0, date_picker_utils_1.applyTimeToDate)(selection.from, { hours: hours, minutes: minutes, seconds: seconds });
334
+ var newTo = (0, date_picker_utils_1.applyTimeToDate)(selection.to, { hours: endHours, minutes: endMinutes, seconds: endSeconds });
335
+ setRangeSelection({ from: newFrom, to: newTo });
336
+ }
337
+ else {
338
+ setRangeSelection(selection);
339
+ }
340
+ }
341
+ // Only auto-apply selection for non-range selection mode and when not showing time input
342
+ if (!isRangeSelection && !showTimeInput) {
343
+ applySelection(selection.from);
344
+ }
345
+ // For range selection or time input, we'll wait for user to click Apply
346
+ };
347
+ var handleTimeChange = function (value, setter, max) {
348
+ var numValue = value.replace(/\D/g, '');
349
+ var parsed = parseInt(numValue, 10);
350
+ if (!isNaN(parsed) && parsed >= 0 && parsed <= max) {
351
+ setter(parsed.toString().padStart(2, '0'));
352
+ }
353
+ else if (value === '') {
354
+ setter('00');
355
+ }
356
+ updateDateWithTime();
357
+ };
358
+ var updateDateWithTime = function () {
359
+ if (!rangeSelection.from)
360
+ return;
361
+ var newFrom = (0, date_picker_utils_1.applyTimeToDate)(rangeSelection.from, { hours: hours, minutes: minutes, seconds: seconds });
362
+ if (isRangeSelection && rangeSelection.to) {
363
+ var newTo = (0, date_picker_utils_1.applyTimeToDate)(rangeSelection.to, {
364
+ hours: endHours,
365
+ minutes: endMinutes,
366
+ seconds: endSeconds,
367
+ });
368
+ setRangeSelection({ from: newFrom, to: newTo });
369
+ }
370
+ else {
371
+ setRangeSelection({ from: newFrom });
372
+ }
373
+ };
374
+ var applySelection = function (singleDate) {
375
+ if (isRangeSelection) {
376
+ if (rangeSelection.from && rangeSelection.to) {
377
+ var formattedRange = (0, date_picker_utils_1.formatDateRange)(rangeSelection.from, rangeSelection.to, dateFormat, showTimeInput ? timeFormat : undefined);
378
+ onDateSelect(formattedRange, true);
379
+ }
380
+ }
381
+ else if (singleDate || rangeSelection.from) {
382
+ var dateToFormat = singleDate || rangeSelection.from;
383
+ if (dateToFormat) {
384
+ var formatString = showTimeInput ? "".concat(dateFormat, " ").concat(timeFormat) : dateFormat;
385
+ var formattedDate = (0, date_picker_utils_1.formatDate)(dateToFormat, formatString);
386
+ onDateSelect(formattedDate, true);
387
+ }
388
+ }
389
+ };
390
+ var cancelSelection = function () {
391
+ if (options) {
392
+ setCurrentView('options');
393
+ }
394
+ else {
395
+ onClose();
396
+ }
397
+ };
398
+ var handleOptionSelect = function (optionValue) {
399
+ if (optionValue === 'custom') {
400
+ setCurrentView('calendar');
401
+ return;
402
+ }
403
+ onDateSelect(optionValue, true);
404
+ };
405
+ var selectedValue;
406
+ if (rangeSelection.from) {
407
+ selectedValue = { from: rangeSelection.from, to: rangeSelection.to };
408
+ }
409
+ else if (value && !isRangeSelection) {
410
+ var formatString = showTimeInput ? "".concat(dateFormat, " ").concat(timeFormat) : dateFormat;
411
+ var parsedDate = (0, date_picker_utils_1.parseDate)(value, formatString);
412
+ if (parsedDate) {
413
+ selectedValue = parsedDate;
414
+ }
415
+ }
416
+ // Determine if we should show the action buttons - now for both range selection and time input
417
+ var showActionButtons = isRangeSelection || showTimeInput;
418
+ var canApply = isRangeSelection ? rangeSelection.from && rangeSelection.to : !!rangeSelection.from;
419
+ var _p = __read(React.useState(null), 2), inputWidth = _p[0], setInputWidth = _p[1];
420
+ React.useEffect(function () {
421
+ if (open && anchorEl) {
422
+ var width = anchorEl.getBoundingClientRect().width;
423
+ setInputWidth(width);
424
+ }
425
+ }, [open, anchorEl]);
426
+ var ownerState = {
427
+ showTwoMonths: showTwoMonths,
428
+ isRangeSelection: isRangeSelection,
429
+ };
430
+ return (React.createElement(Root, __assign({ open: open, anchorEl: anchorEl, onClose: onClose, className: (0, clsx_1.default)(classes.root), ownerState: ownerState, ref: ref, anchorOrigin: {
431
+ vertical: 'bottom',
432
+ horizontal: 'left',
433
+ }, transformOrigin: {
434
+ vertical: 'top',
435
+ horizontal: 'left',
436
+ }, marginThreshold: 30, style: { marginTop: '-24px' } }, PopoverProps, rootProps),
437
+ React.createElement(Content, { className: classes.content, ownerState: __assign(__assign({}, ownerState), { inputWidth: inputWidth, currentView: currentView }) }, currentView === 'options' && options ? (React.createElement(dropdown_menu_1.DropdownMenuList, null, options.map(function (option, index) { return (React.createElement(dropdown_menu_1.DropdownMenuListItem, { key: index, title: option.text, selected: option.value === value, onClick: function () { return handleOptionSelect(option.value); } })); }))) : (React.createElement(React.Fragment, null,
438
+ React.createElement(CalendarWrapper, { className: classes.calendarWrapper },
439
+ React.createElement(react_day_picker_1.DayPicker, { mode: "range", selected: selectedValue, onSelect: handleCalendarSelect, showOutsideDays: true, numberOfMonths: showTwoMonths ? 2 : 1, pagedNavigation: showTwoMonths })),
440
+ showTimeInput && (React.createElement(React.Fragment, null,
441
+ React.createElement(TimeInputContainer, null,
442
+ React.createElement(TimeInputLabel, null, "Time:"),
443
+ React.createElement(TimeInput, { size: "small", value: hours, onChange: function (e) { return handleTimeChange(e.target.value, setHours, 23); }, placeholder: "HH" }),
444
+ React.createElement("span", null, ":"),
445
+ React.createElement(TimeInput, { size: "small", value: minutes, onChange: function (e) { return handleTimeChange(e.target.value, setMinutes, 59); }, placeholder: "MM" }),
446
+ React.createElement("span", null, ":"),
447
+ React.createElement(TimeInput, { size: "small", value: seconds, onChange: function (e) { return handleTimeChange(e.target.value, setSeconds, 59); }, placeholder: "SS" }),
448
+ isRangeSelection && (React.createElement(EndTimeInputContainer, null,
449
+ React.createElement(TimeInputLabel, null, "End Time:"),
450
+ React.createElement(TimeInput, { size: "small", value: endHours, onChange: function (e) { return handleTimeChange(e.target.value, setEndHours, 23); }, placeholder: "HH" }),
451
+ React.createElement("span", null, ":"),
452
+ React.createElement(TimeInput, { size: "small", value: endMinutes, onChange: function (e) { return handleTimeChange(e.target.value, setEndMinutes, 59); }, placeholder: "MM" }),
453
+ React.createElement("span", null, ":"),
454
+ React.createElement(TimeInput, { size: "small", value: endSeconds, onChange: function (e) { return handleTimeChange(e.target.value, setEndSeconds, 59); }, placeholder: "SS" })))))),
455
+ showActionButtons && (React.createElement(ButtonContainer, { className: classes.buttonContainer },
456
+ React.createElement(button_1.Button, { size: "small", variant: "outlined", onClick: cancelSelection, style: { marginRight: 8 } }, "Cancel"),
457
+ React.createElement(button_1.Button, { size: "small", variant: "contained", color: "primary", onClick: function () { return applySelection(); }, disabled: !canApply }, "Apply"))))))));
458
+ });
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { IDatePickerPopoverProps } from './date-picker-types';
3
+ export interface IDatePickerTriggerProps {
4
+ 'aria-controls'?: string;
5
+ 'aria-haspopup'?: 'dialog';
6
+ 'aria-expanded'?: boolean;
7
+ id?: string;
8
+ onClick(event: React.MouseEvent<HTMLDivElement>): void;
9
+ }
10
+ export interface IDatePickerStateValue {
11
+ triggerProps: IDatePickerTriggerProps;
12
+ popoverProps: Pick<IDatePickerPopoverProps, 'open' | 'anchorEl' | 'onClose'>;
13
+ }
14
+ export interface IDatePickerStateProps {
15
+ baseId?: string;
16
+ }
17
+ export declare const useDatePickerState: ({ baseId: propBaseId }?: IDatePickerStateProps) => IDatePickerStateValue;
18
+ interface IDatePickerStateProviderProps extends IDatePickerStateProps {
19
+ children?: React.ReactNode | ((state: IDatePickerStateValue) => React.ReactNode);
20
+ }
21
+ export declare const DatePickerStateContext: React.Context<IDatePickerStateValue>;
22
+ export declare const useDatePickerStateContext: () => IDatePickerStateValue;
23
+ export declare const DatePickerStateProvider: ({ children, ...props }: IDatePickerStateProviderProps) => React.JSX.Element;
24
+ export {};
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
36
+ var __read = (this && this.__read) || function (o, n) {
37
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
38
+ if (!m) return o;
39
+ var i = m.call(o), r, ar = [], e;
40
+ try {
41
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
42
+ }
43
+ catch (error) { e = { error: error }; }
44
+ finally {
45
+ try {
46
+ if (r && !r.done && (m = i["return"])) m.call(i);
47
+ }
48
+ finally { if (e) throw e.error; }
49
+ }
50
+ return ar;
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.DatePickerStateProvider = exports.useDatePickerStateContext = exports.DatePickerStateContext = exports.useDatePickerState = void 0;
54
+ var React = __importStar(require("react"));
55
+ var use_id_1 = require("../utils/use-id");
56
+ var useDatePickerState = function (_a) {
57
+ var _b = _a === void 0 ? {} : _a, propBaseId = _b.baseId;
58
+ var baseId = (0, use_id_1.useId)(propBaseId);
59
+ var triggerId = "".concat(baseId, "-trigger");
60
+ var popoverId = "".concat(baseId, "-popover");
61
+ var _c = __read(React.useState(null), 2), anchorEl = _c[0], setAnchorEl = _c[1];
62
+ var handleTriggerClick = function (event) {
63
+ event.preventDefault();
64
+ setAnchorEl(event.currentTarget);
65
+ };
66
+ var handlePopoverClose = function () { return setAnchorEl(null); };
67
+ var isOpen = Boolean(anchorEl);
68
+ return {
69
+ triggerProps: {
70
+ onClick: handleTriggerClick,
71
+ id: triggerId,
72
+ 'aria-controls': popoverId,
73
+ 'aria-haspopup': 'dialog',
74
+ 'aria-expanded': isOpen,
75
+ },
76
+ popoverProps: {
77
+ anchorEl: anchorEl,
78
+ open: isOpen,
79
+ onClose: handlePopoverClose,
80
+ },
81
+ };
82
+ };
83
+ exports.useDatePickerState = useDatePickerState;
84
+ exports.DatePickerStateContext = React.createContext({
85
+ triggerProps: { onClick: function () { return undefined; } },
86
+ popoverProps: { anchorEl: null, open: false, onClose: function () { return undefined; } },
87
+ });
88
+ var useDatePickerStateContext = function () { return React.useContext(exports.DatePickerStateContext); };
89
+ exports.useDatePickerStateContext = useDatePickerStateContext;
90
+ var DatePickerStateProvider = function (_a) {
91
+ var children = _a.children, props = __rest(_a, ["children"]);
92
+ var state = (0, exports.useDatePickerState)(props);
93
+ return (React.createElement(exports.DatePickerStateContext.Provider, { value: state }, typeof children === 'function' ? children(state) : children));
94
+ };
95
+ exports.DatePickerStateProvider = DatePickerStateProvider;