pixelize-design-library 2.2.38 → 2.2.39

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.
@@ -55,7 +55,11 @@ function CustomDatePicker(props) {
55
55
  var tomorrow = (0, date_fns_1.addDays)(today, 1);
56
56
  var showDate = resolvedPickerType === "date" || resolvedPickerType === "datetime";
57
57
  var showTime = resolvedPickerType === "time" || resolvedPickerType === "datetime";
58
+ var formatHasTime = dateFormat.toLowerCase().includes("hh") || dateFormat.toLowerCase().includes("mm") || dateFormat.toLowerCase().includes("ss");
58
59
  var selectedDate = !isRange ? props.selectedDate : null;
60
+ // const [currentMonth, setCurrentMonth] = useState<Date>(
61
+ // isRange ? new Date() : selectedDate ?? new Date()
62
+ // );
59
63
  var _g = (0, react_1.useState)(isRange ? new Date() :
60
64
  selectedDate
61
65
  ? (disableToday && (0, date_fns_1.isSameDay)(selectedDate, today) ? tomorrow : selectedDate)
@@ -64,12 +68,30 @@ function CustomDatePicker(props) {
64
68
  var _j = (0, react_1.useState)(null), rangeEnd = _j[0], setRangeEnd = _j[1];
65
69
  var _k = (0, react_1.useState)(true), selectingStart = _k[0], setSelectingStart = _k[1];
66
70
  var _l = (0, react_1.useState)(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null), tempDate = _l[0], setTempDate = _l[1];
71
+ // const [tempDate, setTempDate] = useState<Date | null>(
72
+ // selectedDate
73
+ // ? (disableToday && isSameDay(selectedDate, today) ? tomorrow : selectedDate)
74
+ // : (disableToday ? tomorrow : null)
75
+ // );
67
76
  var _m = (0, react_1.useState)(rangeStart), tempRangeStart = _m[0], setTempRangeStart = _m[1];
68
77
  var _o = (0, react_1.useState)(rangeEnd), tempRangeEnd = _o[0], setTempRangeEnd = _o[1];
69
78
  var _p = (0, react_1.useState)(""), inputValue = _p[0], setInputValue = _p[1];
70
79
  var _q = (0, react_1.useState)(false), isTyping = _q[0], setIsTyping = _q[1];
71
80
  var popoverRef = (0, react_1.useRef)(null);
72
- var _r = (0, react_1.useState)(false), isManualOpen = _r[0], setIsManualOpen = _r[1];
81
+ var triggerRef = (0, react_1.useRef)(null);
82
+ var handleOpen = function () {
83
+ if (!isRange && !selectedDate) {
84
+ // setTempDate(new Date());
85
+ setTempDate(disableToday ? tomorrow : new Date());
86
+ }
87
+ if (showTime) {
88
+ // setTempDate(new Date()); // add new
89
+ // setTempDate(disableToday ? tomorrow : new Date());
90
+ // console.log(selectedDate,"selectedDateselectedDate")
91
+ setTempDate(disableToday ? tomorrow : selectedDate ? selectedDate : new Date());
92
+ }
93
+ onOpen();
94
+ };
73
95
  // Initialize input value based on selected date
74
96
  (0, react_1.useEffect)(function () {
75
97
  if (!isRange) {
@@ -87,12 +109,31 @@ function CustomDatePicker(props) {
87
109
  var value = e.target.value;
88
110
  setInputValue(value);
89
111
  setIsTyping(true);
112
+ if (!value.trim()) {
113
+ setTempDate(null);
114
+ setTempRangeStart(null);
115
+ setTempRangeEnd(null);
116
+ setRangeStart(null);
117
+ setRangeEnd(null);
118
+ setSelectingStart(true);
119
+ props.onChange(null);
120
+ setIsTyping(false);
121
+ onClose();
122
+ return;
123
+ }
90
124
  };
91
125
  var handleInputKeyDown = function (e) {
92
126
  if (e.key === 'Enter') {
93
127
  e.currentTarget.blur();
94
128
  }
95
129
  };
130
+ var handleInputFocus = function (e) {
131
+ e.stopPropagation();
132
+ setIsTyping(true);
133
+ if (!isOpen) {
134
+ onOpen();
135
+ }
136
+ };
96
137
  var handleInputBlur = function () {
97
138
  setIsTyping(false);
98
139
  if (!inputValue.trim()) {
@@ -116,13 +157,10 @@ function CustomDatePicker(props) {
116
157
  isValidDate = false;
117
158
  if (isValidDate) {
118
159
  var finalDate = parsed;
119
- if (showTime && tempDate) {
160
+ // Only preserve previous time if the input format does NOT include time tokens
161
+ if (showTime && tempDate && !formatHasTime) {
120
162
  finalDate = new Date(parsed.getFullYear(), parsed.getMonth(), parsed.getDate(), tempDate.getHours(), tempDate.getMinutes(), tempDate.getSeconds());
121
163
  }
122
- else if (showTime && !tempDate) {
123
- var now = new Date();
124
- finalDate = new Date(parsed.getFullYear(), parsed.getMonth(), parsed.getDate(), now.getHours(), now.getMinutes(), now.getSeconds());
125
- }
126
164
  setTempDate(finalDate);
127
165
  setCurrentMonth(finalDate);
128
166
  setInputValue((0, date_fns_1.format)(finalDate, dateFormat));
@@ -131,9 +169,7 @@ function CustomDatePicker(props) {
131
169
  }
132
170
  }
133
171
  }
134
- catch (error) {
135
- // Parsing failed
136
- }
172
+ catch (_a) { }
137
173
  if (tempDate) {
138
174
  setInputValue((0, date_fns_1.format)(tempDate, dateFormat));
139
175
  }
@@ -143,44 +179,25 @@ function CustomDatePicker(props) {
143
179
  props.onChange(null);
144
180
  }
145
181
  };
146
- var handleInputFocus = function (e) {
147
- e.stopPropagation();
148
- setIsTyping(true);
149
- // Only open on focus if it's not already open and not a manual click
150
- if (!isOpen && !isManualOpen) {
151
- onOpen();
152
- }
153
- setIsManualOpen(false);
154
- };
155
- var handleTriggerClick = function (e) {
156
- e.stopPropagation();
157
- setIsManualOpen(true);
158
- // Initialize tempDate if needed
159
- if (!isRange && !tempDate) {
160
- setTempDate(disableToday ? tomorrow : new Date());
161
- }
162
- // Toggle popover
163
- if (isOpen) {
164
- onClose();
165
- }
166
- else {
167
- onOpen();
168
- }
169
- };
170
182
  (0, react_1.useEffect)(function () {
171
183
  if (!isRange) {
172
184
  if (selectedDate instanceof Date) {
173
185
  setTempDate(new Date(selectedDate));
174
- setInputValue((0, date_fns_1.format)(selectedDate, dateFormat));
186
+ // const corrected = disableToday && isSameDay(selectedDate, today)
187
+ // ? tomorrow
188
+ // : selectedDate;
189
+ // setTempDate(new Date(corrected));
175
190
  }
176
191
  else {
177
192
  setTempDate(null);
178
- setInputValue("");
193
+ // setTempDate(disableToday ? tomorrow : null);
179
194
  }
180
195
  }
181
- }, [selectedDate, isRange, disableToday, dateFormat]);
196
+ }, [selectedDate, isRange, disableToday]);
182
197
  var handleDaySelect = function (day) {
198
+ // const updated = new Date(day);
183
199
  var updated = new Date(day);
200
+ // 👇 Redirect selection from today → tomorrow
184
201
  if (disableToday && (0, date_fns_1.isSameDay)(updated, today)) {
185
202
  updated = tomorrow;
186
203
  }
@@ -208,6 +225,7 @@ function CustomDatePicker(props) {
208
225
  : updated;
209
226
  setTempDate(updatedDate);
210
227
  setInputValue((0, date_fns_1.format)(updatedDate, dateFormat));
228
+ setIsTyping(false);
211
229
  props.onChange(updatedDate);
212
230
  }
213
231
  };
@@ -267,12 +285,17 @@ function CustomDatePicker(props) {
267
285
  : "";
268
286
  (0, react_1.useEffect)(function () {
269
287
  var handleClickOutside = function (event) {
270
- var _a;
288
+ var _a, _b;
271
289
  if (popoverRef.current &&
272
290
  !popoverRef.current.contains(event.target) &&
273
- !((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))) {
291
+ !((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target)) &&
292
+ !((_b = triggerRef.current) === null || _b === void 0 ? void 0 : _b.contains(event.target))) {
293
+ if (tempDate) {
294
+ props.onChange(tempDate); // add new
295
+ setInputValue((0, date_fns_1.format)(tempDate, dateFormat));
296
+ setIsTyping(false);
297
+ }
274
298
  onClose();
275
- setIsManualOpen(false);
276
299
  }
277
300
  };
278
301
  if (isOpen) {
@@ -284,12 +307,21 @@ function CustomDatePicker(props) {
284
307
  return function () {
285
308
  document.removeEventListener("mousedown", handleClickOutside);
286
309
  };
287
- }, [isOpen, onClose]);
310
+ }, [isOpen, onClose, props, tempDate]);
288
311
  return (react_1.default.createElement(react_2.Box, { width: width, position: "relative" },
289
312
  label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage })),
290
- react_1.default.createElement(react_2.Popover, { isLazy: true, isOpen: isOpen, onOpen: onOpen, onClose: onClose, placement: "bottom-start", initialFocusRef: inputRef, closeOnBlur: false },
313
+ react_1.default.createElement(react_2.Popover, { isLazy: true, isOpen: isOpen, onClose: onClose, placement: "bottom-start", initialFocusRef: inputRef, closeOnBlur: false },
291
314
  react_1.default.createElement(react_2.PopoverTrigger, null,
292
- react_1.default.createElement(react_2.Box, { onClick: handleTriggerClick },
315
+ react_1.default.createElement(react_2.Box, { ref: triggerRef, onMouseDown: function (e) {
316
+ e.stopPropagation();
317
+ if (!isOpen) {
318
+ handleOpen();
319
+ }
320
+ }, onClick: function (e) {
321
+ // Prevent Chakra PopoverTrigger from toggling (which would immediately close after open)
322
+ e.preventDefault();
323
+ e.stopPropagation();
324
+ } },
293
325
  react_1.default.createElement(TextInput_1.default, { id: id, name: name, ref: inputRef, placeholder: placeholderText, value: displayValue, onChange: !isRange ? handleInputChange : undefined, onKeyDown: !isRange ? handleInputKeyDown : undefined, onFocus: !isRange ? handleInputFocus : undefined, onBlur: !isRange ? handleInputBlur : undefined, isReadOnly: isRange, error: error, errorMessage: errorMessage, helperText: helperText, autoComplete: autoComplete, isDisabled: disabled, width: width }))),
294
326
  react_1.default.createElement(react_2.PopoverContent, { width: "auto", p: 2, ref: popoverRef },
295
327
  react_1.default.createElement(react_2.PopoverBody, null,
@@ -313,21 +345,36 @@ function CustomDatePicker(props) {
313
345
  react_1.default.createElement(lucide_react_1.ChevronRightIcon, null))),
314
346
  react_1.default.createElement(react_2.Grid, { templateColumns: "repeat(7, 1fr)", gap: 1, fontWeight: "bold", mb: 1 }, ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map(function (day) { return (react_1.default.createElement(react_2.Box, { textAlign: "center", key: day }, day)); })),
315
347
  renderDays())),
316
- !isRange && showTime && (react_1.default.createElement(TimePicker_1.default, { date: tempDate !== null && tempDate !== void 0 ? tempDate : (disableToday ? tomorrow : today), dateFormat: dateFormat, onChange: function (updatedDate) {
348
+ !isRange && showTime && (react_1.default.createElement(TimePicker_1.default
349
+ // date={tempDate ?? new Date()}
350
+ , {
351
+ // date={tempDate ?? new Date()}
352
+ date: tempDate !== null && tempDate !== void 0 ? tempDate : (disableToday ? tomorrow : today), dateFormat: dateFormat,
353
+ // onChange={(updatedDate) => {
354
+ // 👇 Redirect time change if today
355
+ // const corrected = disableToday && isSameDay(updatedDate, today)
356
+ // ? tomorrow
357
+ // : updatedDate;
358
+ // setTempDate(corrected);
359
+ // (props as any).onChange(corrected);
360
+ // }}
361
+ onChange: function (updatedDate) {
317
362
  setTempDate(updatedDate);
318
363
  setInputValue((0, date_fns_1.format)(updatedDate, dateFormat));
364
+ setIsTyping(false);
319
365
  props.onChange(updatedDate);
320
366
  } })),
321
367
  react_1.default.createElement(react_2.Box, { display: "flex", justifyContent: "space-between", mt: 3 },
322
368
  react_1.default.createElement(Button_1.default, { size: "sm", variant: "ghost", onClick: function () {
323
369
  setTempDate(null);
324
- setInputValue("");
370
+ // setTempDate(disableToday ? tomorrow : null);
325
371
  setTempRangeStart(null);
326
372
  setTempRangeEnd(null);
327
373
  setRangeStart(null);
328
374
  setRangeEnd(null);
329
375
  setSelectingStart(true);
330
376
  props.onChange(null);
377
+ // (props as any).onChange(disableToday ? tomorrow : null);
331
378
  onClose();
332
379
  } }, "Clear"),
333
380
  react_1.default.createElement(Button_1.default, { size: "sm", colorScheme: "primary", onClick: function () {
@@ -338,6 +385,8 @@ function CustomDatePicker(props) {
338
385
  }
339
386
  else if (!isRange && tempDate) {
340
387
  props.onChange(tempDate);
388
+ setInputValue((0, date_fns_1.format)(tempDate, dateFormat));
389
+ setIsTyping(false);
341
390
  }
342
391
  onClose();
343
392
  } }, "OK")))))));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "2.2.38",
3
+ "version": "2.2.39",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",