pixelize-design-library 2.2.51 → 2.2.53

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.
@@ -13,6 +13,8 @@ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
13
13
  var CalendarPanel = function (_a) {
14
14
  var currentMonth = _a.currentMonth, setCurrentMonth = _a.setCurrentMonth, today = _a.today, isRange = _a.isRange, tempDate = _a.tempDate, tempRangeStart = _a.tempRangeStart, tempRangeEnd = _a.tempRangeEnd, isSameDay = _a.isSameDay, isBefore = _a.isBefore, isAfter = _a.isAfter, minDate = _a.minDate, maxDate = _a.maxDate, disablePastDates = _a.disablePastDates, disableFutureDates = _a.disableFutureDates, disableToday = _a.disableToday, onDaySelect = _a.onDaySelect, renderWeekdays = _a.renderWeekdays;
15
15
  var theme = (0, useCustomTheme_1.useCustomTheme)();
16
+ var isViewingCurrentMonth = currentMonth.getFullYear() === today.getFullYear() &&
17
+ currentMonth.getMonth() === today.getMonth();
16
18
  var renderDays = function () {
17
19
  var monthStart = (0, date_fns_1.startOfMonth)(currentMonth);
18
20
  var monthEnd = (0, date_fns_1.endOfMonth)(currentMonth);
@@ -96,8 +98,15 @@ var CalendarPanel = function (_a) {
96
98
  var year = new Date().getFullYear() - 50 + i;
97
99
  return (react_1.default.createElement("option", { key: year, value: year }, year));
98
100
  }))),
99
- react_1.default.createElement(Button_1.default, { variant: "ghost", size: "sm", onClick: function () { return setCurrentMonth(function (prev) { return new Date(prev.getFullYear(), prev.getMonth() + 1, 1); }); }, "aria-label": "Next month" },
100
- react_1.default.createElement(lucide_react_1.ChevronRightIcon, { size: 20 }))), renderWeekdays !== null && renderWeekdays !== void 0 ? renderWeekdays : (react_1.default.createElement(react_2.Grid, { templateColumns: "repeat(7, 1fr)", gap: 1, fontWeight: "bold", mb: 2 }, ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map(function (day) { return (react_1.default.createElement(react_2.Box, { textAlign: "center", key: day, fontSize: "sm", color: "gray.600", py: 2 }, day)); }))),
101
+ react_1.default.createElement(react_2.Box, { display: "flex", alignItems: "center", gap: 1 },
102
+ !isViewingCurrentMonth && (react_1.default.createElement(Button_1.default, { variant: "ghost", size: "sm", onClick: function () {
103
+ setCurrentMonth(function (_prev) { return new Date(today.getFullYear(), today.getMonth(), 1); });
104
+ if (!disableToday) {
105
+ onDaySelect(new Date(today));
106
+ }
107
+ }, "aria-label": "Today", sx: { fontSize: "0.75rem", px: 2 }, isDisabled: disableToday }, "Today")),
108
+ react_1.default.createElement(Button_1.default, { variant: "ghost", size: "sm", onClick: function () { return setCurrentMonth(function (prev) { return new Date(prev.getFullYear(), prev.getMonth() + 1, 1); }); }, "aria-label": "Next month" },
109
+ react_1.default.createElement(lucide_react_1.ChevronRightIcon, { size: 20 })))), renderWeekdays !== null && renderWeekdays !== void 0 ? renderWeekdays : (react_1.default.createElement(react_2.Grid, { templateColumns: "repeat(7, 1fr)", gap: 1, fontWeight: "bold", mb: 2 }, ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map(function (day) { return (react_1.default.createElement(react_2.Box, { textAlign: "center", key: day, fontSize: "sm", color: "gray.600", py: 2 }, day)); }))),
101
110
  renderDays()));
102
111
  };
103
112
  exports.CalendarPanel = CalendarPanel;
@@ -75,6 +75,8 @@ function CustomDatePicker(props) {
75
75
  var _m = (0, react_1.useState)(rangeStart), tempRangeStart = _m[0], setTempRangeStart = _m[1];
76
76
  var _o = (0, react_1.useState)(rangeEnd), tempRangeEnd = _o[0], setTempRangeEnd = _o[1];
77
77
  var popoverRef = (0, react_1.useRef)(null);
78
+ var isViewingCurrentMonth = currentMonth.getFullYear() === today.getFullYear() &&
79
+ currentMonth.getMonth() === today.getMonth();
78
80
  var handleOpen = function () {
79
81
  if (!isRange && !selectedDate) {
80
82
  // setTempDate(new Date());
@@ -234,8 +236,15 @@ function CustomDatePicker(props) {
234
236
  var year = new Date().getFullYear() - 50 + i;
235
237
  return (react_1.default.createElement("option", { key: year, value: year }, year));
236
238
  }))),
237
- react_1.default.createElement(Button_1.default, { variant: "ghost", size: "sm", onClick: function () { return setCurrentMonth(function (prev) { return (0, date_fns_1.addMonths)(prev, 1); }); } },
238
- react_1.default.createElement(lucide_react_1.ChevronRightIcon, null))),
239
+ react_1.default.createElement(react_2.Box, { display: "flex", alignItems: "center", gap: 1 },
240
+ !isViewingCurrentMonth && (react_1.default.createElement(Button_1.default, { variant: "ghost", size: "sm", onClick: function () {
241
+ setCurrentMonth(new Date(today.getFullYear(), today.getMonth(), 1));
242
+ if (!disableToday && !isRange) {
243
+ handleDaySelect(new Date(today));
244
+ }
245
+ }, "aria-label": "Today", sx: { fontSize: "0.75rem", px: 2 }, isDisabled: disableToday }, "Today")),
246
+ react_1.default.createElement(Button_1.default, { variant: "ghost", size: "sm", onClick: function () { return setCurrentMonth(function (prev) { return (0, date_fns_1.addMonths)(prev, 1); }); } },
247
+ react_1.default.createElement(lucide_react_1.ChevronRightIcon, null)))),
239
248
  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)); })),
240
249
  renderDays())),
241
250
  !isRange && showTime && (react_1.default.createElement(TimePicker_1.default
@@ -266,10 +266,10 @@ var normalizeTimeBuffer = function (tokenChar, rawBuffer, segmentLength, is12Hou
266
266
  return { value: buf, completed: buf.length >= segmentLength };
267
267
  };
268
268
  var SingleDatePicker = function (props) {
269
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
270
- var id = props.id, name = props.name, label = props.label, isRequired = props.isRequired, isInformation = props.isInformation, informationMessage = props.informationMessage, error = props.error, errorMessage = props.errorMessage, helperText = props.helperText, placeholderText = props.placeholderText, _k = props.dateFormat, dateFormat = _k === void 0 ? "dd/MM/yyyy" : _k, pickerType = props.pickerType, minDate = props.minDate, maxDate = props.maxDate, disableFutureDates = props.disableFutureDates, disablePastDates = props.disablePastDates, _l = props.autoComplete, autoComplete = _l === void 0 ? "off" : _l, disabled = props.disabled, _m = props.width, width = _m === void 0 ? "100%" : _m, _o = props.disableToday, disableToday = _o === void 0 ? false : _o;
269
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
270
+ var id = props.id, name = props.name, label = props.label, isRequired = props.isRequired, isInformation = props.isInformation, informationMessage = props.informationMessage, error = props.error, errorMessage = props.errorMessage, helperText = props.helperText, placeholderText = props.placeholderText, _l = props.dateFormat, dateFormat = _l === void 0 ? "dd/MM/yyyy" : _l, pickerType = props.pickerType, minDate = props.minDate, maxDate = props.maxDate, disableFutureDates = props.disableFutureDates, disablePastDates = props.disablePastDates, _m = props.autoComplete, autoComplete = _m === void 0 ? "off" : _m, disabled = props.disabled, _o = props.width, width = _o === void 0 ? "100%" : _o, _p = props.disableToday, disableToday = _p === void 0 ? false : _p;
271
271
  var theme = (0, useCustomTheme_1.useCustomTheme)();
272
- var _p = (0, react_2.useDisclosure)(), isOpen = _p.isOpen, onOpen = _p.onOpen, onClose = _p.onClose;
272
+ var _q = (0, react_2.useDisclosure)(), isOpen = _q.isOpen, onOpen = _q.onOpen, onClose = _q.onClose;
273
273
  var inputRef = (0, react_1.useRef)(null);
274
274
  var popoverRef = (0, react_1.useRef)(null);
275
275
  var triggerRef = (0, react_1.useRef)(null);
@@ -327,18 +327,18 @@ var SingleDatePicker = function (props) {
327
327
  resolvedDateFormat.toLowerCase().includes("mm") ||
328
328
  resolvedDateFormat.toLowerCase().includes("ss");
329
329
  var selectedDate = ((_a = props.value) !== null && _a !== void 0 ? _a : props.selectedDate);
330
- var _q = (0, react_1.useState)(selectedDate
330
+ var _r = (0, react_1.useState)(selectedDate
331
331
  ? disableToday && (0, date_fns_1.isSameDay)(selectedDate, today)
332
332
  ? tomorrow
333
333
  : selectedDate
334
334
  : disableToday
335
335
  ? tomorrow
336
- : today), currentMonth = _q[0], setCurrentMonth = _q[1];
337
- var _r = (0, react_1.useState)(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null), tempDate = _r[0], setTempDate = _r[1];
338
- var _s = (0, react_1.useState)(""), inputValue = _s[0], setInputValue = _s[1];
339
- var _t = (0, react_1.useState)(false), isTyping = _t[0], setIsTyping = _t[1];
340
- var _u = (0, react_1.useState)(false), isMaskActive = _u[0], setIsMaskActive = _u[1];
341
- var _v = (0, react_1.useState)(0), currentSegmentIndex = _v[0], setCurrentSegmentIndex = _v[1];
336
+ : today), currentMonth = _r[0], setCurrentMonth = _r[1];
337
+ var _s = (0, react_1.useState)(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null), tempDate = _s[0], setTempDate = _s[1];
338
+ var _t = (0, react_1.useState)(""), inputValue = _t[0], setInputValue = _t[1];
339
+ var _u = (0, react_1.useState)(false), isTyping = _u[0], setIsTyping = _u[1];
340
+ var _v = (0, react_1.useState)(false), isMaskActive = _v[0], setIsMaskActive = _v[1];
341
+ var _w = (0, react_1.useState)(0), currentSegmentIndex = _w[0], setCurrentSegmentIndex = _w[1];
342
342
  var lastSegmentIndexRef = (0, react_1.useRef)(0);
343
343
  var resetCommitGuardAndOpen = function () {
344
344
  didCommitRef.current = false;
@@ -948,11 +948,11 @@ var SingleDatePicker = function (props) {
948
948
  react_1.default.createElement(react_2.Input, { ref: inputRef, id: id, name: name, placeholder: displayPlaceholder, value: displayValue, onChange: handleInputChange, onKeyDown: handleKeyDownMask, onPaste: handlePasteMask, onBlur: handleInputBlur, onClick: handleInputClickMask, onFocus: handleInputFocusMask, isDisabled: disabled, autoComplete: autoComplete, borderColor: error ? (_c = (_b = theme.colors.semantic) === null || _b === void 0 ? void 0 : _b.error) === null || _c === void 0 ? void 0 : _c[500] : undefined, _focus: {
949
949
  borderColor: error ? (_e = (_d = theme.colors.semantic) === null || _d === void 0 ? void 0 : _d.error) === null || _e === void 0 ? void 0 : _e[500] : theme.colors.primary[500],
950
950
  boxShadow: error
951
- ? "0 0 0 1px ".concat((_g = (_f = theme.colors.semantic) === null || _f === void 0 ? void 0 : _f.error) === null || _g === void 0 ? void 0 : _g[500])
952
- : "0 0 0 1px ".concat(theme.colors.primary[500]),
951
+ ? "0 0 0 0.125rem ".concat((_f = theme.colors.boxShadow) === null || _f === void 0 ? void 0 : _f.error)
952
+ : "0 0 0 0.125rem ".concat((_g = theme.colors.boxShadow) === null || _g === void 0 ? void 0 : _g.primary),
953
953
  }, _hover: {
954
954
  borderColor: error ? (_j = (_h = theme.colors.semantic) === null || _h === void 0 ? void 0 : _h.error) === null || _j === void 0 ? void 0 : _j[500] : undefined,
955
- }, cursor: "text" }),
955
+ }, cursor: "text", boxShadow: error ? "0 0 0 0.125rem ".concat((_k = theme.colors.boxShadow) === null || _k === void 0 ? void 0 : _k.error) : "" }),
956
956
  react_1.default.createElement(react_2.InputRightElement, { pr: 3, pointerEvents: "auto", onClick: function (e) {
957
957
  e.stopPropagation();
958
958
  if (!isOpen) {
@@ -69,6 +69,9 @@ var TimeOnlyPicker = function (props) {
69
69
  // Do not close; user asked only outside-click and OK to close
70
70
  };
71
71
  var handleOk = function () {
72
+ var commitValue = tempDate !== null && tempDate !== void 0 ? tempDate : new Date(resolvedTempDate.getFullYear(), resolvedTempDate.getMonth(), resolvedTempDate.getDate(), resolvedTempDate.getHours(), resolvedTempDate.getMinutes(), resolvedTempDate.getSeconds(), resolvedTempDate.getMilliseconds());
73
+ setTempDate(commitValue);
74
+ props.onChange(commitValue);
72
75
  onClose();
73
76
  };
74
77
  (0, react_1.useEffect)(function () {
@@ -111,7 +111,9 @@ var caretFromDigitIndex = function (digitIndex, digitsLen) {
111
111
  return 3;
112
112
  return digitIndex + 1;
113
113
  };
114
- var formatToPlaceholder = function (formatStr) { return formatStr.replace(/h{1,2}/gi, "HH").replace(/m{1,2}/gi, "mm").replace(/a{1,2}/gi, "AM"); };
114
+ var formatToPlaceholder = function (formatStr) {
115
+ return formatStr.replace(/h{1,2}/gi, "HH").replace(/m{1,2}/gi, "mm").replace(/a{1,2}/gi, "AM");
116
+ };
115
117
  var TimePickerInput = function (_a) {
116
118
  var value = _a.value, onChange = _a.onChange, dateFormat = _a.dateFormat, _b = _a.disabled, disabled = _b === void 0 ? false : _b, placeholder = _a.placeholder, onFocus = _a.onFocus, onBlur = _a.onBlur;
117
119
  var theme = (0, useCustomTheme_1.useCustomTheme)();
@@ -123,6 +125,8 @@ var TimePickerInput = function (_a) {
123
125
  var _e = (0, react_1.useState)("hour"), activeSegment = _e[0], setActiveSegment = _e[1];
124
126
  var is12Hour = (0, react_1.useMemo)(function () { return /h{1,2}/i.test(dateFormat) && !/H{1,2}/.test(dateFormat); }, [dateFormat]);
125
127
  var placeholderText = (0, react_1.useMemo)(function () { return placeholder || formatToPlaceholder(dateFormat); }, [placeholder, dateFormat]);
128
+ var ampmRef = (0, react_1.useRef)("AM");
129
+ var _f = (0, react_1.useState)(""), ampm = _f[0], setAmpm = _f[1];
126
130
  var setInputValueAndCaret = (0, react_1.useCallback)(function (formatted, caretDigitIndex) {
127
131
  requestAnimationFrame(function () {
128
132
  var el = inputRef.current;
@@ -142,7 +146,8 @@ var TimePickerInput = function (_a) {
142
146
  var nextDigitIndex = Math.max(0, Math.min(desiredDigitIndex, maxDigitIndex));
143
147
  setInputValueAndCaret(formatted, nextDigitIndex);
144
148
  if (clamped.length === 4) {
145
- var parsed = (0, date_fns_1.parse)(formatted, dateFormat, new Date());
149
+ var formattedInput = is12Hour ? "".concat(formatted, " ").concat(ampmRef.current || "AM") : formatted;
150
+ var parsed = (0, date_fns_1.parse)(formattedInput, dateFormat, new Date());
146
151
  if ((0, date_fns_1.isValid)(parsed))
147
152
  onChange(parsed);
148
153
  }
@@ -282,6 +287,7 @@ var TimePickerInput = function (_a) {
282
287
  var el = inputRef.current;
283
288
  if (!el)
284
289
  return;
290
+ el.value = formatDigits(digitsRef.current);
285
291
  el.focus();
286
292
  el.setSelectionRange(0, Math.min(2, el.value.length));
287
293
  });
@@ -290,8 +296,16 @@ var TimePickerInput = function (_a) {
290
296
  var handleBlur = (0, react_1.useCallback)(function () {
291
297
  setIsFocused(false);
292
298
  isFocusedRef.current = false;
299
+ var el = inputRef.current;
300
+ if (el) {
301
+ var formatted = formatDigits(digitsRef.current);
302
+ el.value =
303
+ is12Hour && formatted
304
+ ? "".concat(formatted, " ").concat(ampmRef.current || ampm || "AM")
305
+ : formatted;
306
+ }
293
307
  onBlur === null || onBlur === void 0 ? void 0 : onBlur();
294
- }, [onBlur]);
308
+ }, [onBlur, is12Hour, ampm]);
295
309
  var handleClick = (0, react_1.useCallback)(function () {
296
310
  var _a;
297
311
  var el = inputRef.current;
@@ -330,19 +344,33 @@ var TimePickerInput = function (_a) {
330
344
  }, [applyDigits]);
331
345
  (0, react_1.useEffect)(function () {
332
346
  if (value) {
333
- var newDigits = adjustDigits((0, date_fns_1.format)(value, dateFormat).replace(/\D/g, ""), is12Hour);
347
+ var formattedValue = (0, date_fns_1.format)(value, dateFormat);
348
+ var newDigits = adjustDigits(formattedValue.replace(/\D/g, ""), is12Hour);
334
349
  digitsRef.current = newDigits;
335
350
  setDigits(newDigits);
351
+ if (is12Hour) {
352
+ var newAmpm = (0, date_fns_1.format)(value, "a").toUpperCase();
353
+ ampmRef.current = newAmpm;
354
+ setAmpm(newAmpm);
355
+ }
356
+ else {
357
+ ampmRef.current = "";
358
+ setAmpm("");
359
+ }
336
360
  if (!isFocusedRef.current) {
337
361
  var formatted = formatDigits(newDigits);
338
362
  if (inputRef.current) {
339
- inputRef.current.value = formatted;
363
+ inputRef.current.value = is12Hour && formatted ? "".concat(formatted, " ").concat(ampmRef.current) : formatted;
340
364
  }
341
365
  }
342
366
  }
343
367
  else {
344
368
  digitsRef.current = "";
345
369
  setDigits("");
370
+ if (is12Hour) {
371
+ ampmRef.current = "";
372
+ setAmpm("");
373
+ }
346
374
  if (inputRef.current && !isFocusedRef.current) {
347
375
  inputRef.current.value = "";
348
376
  }
@@ -351,9 +379,9 @@ var TimePickerInput = function (_a) {
351
379
  (0, react_1.useEffect)(function () {
352
380
  var formatted = formatDigits(digits);
353
381
  if (!isFocusedRef.current && inputRef.current) {
354
- inputRef.current.value = formatted;
382
+ inputRef.current.value = is12Hour && formatted ? "".concat(formatted, " ").concat(ampm) : formatted;
355
383
  }
356
- }, [digits]);
384
+ }, [digits, ampm, is12Hour]);
357
385
  return (react_1.default.createElement(react_2.InputGroup, null,
358
386
  react_1.default.createElement(react_2.Input, { ref: inputRef, defaultValue: "", onChange: handleInput, onKeyDown: handleKeyDown, onFocus: handleFocus, onBlur: handleBlur, onClick: handleClick, onPaste: handlePaste, placeholder: placeholderText, isDisabled: disabled, autoComplete: "off" }),
359
387
  react_1.default.createElement(react_2.InputRightElement, { pointerEvents: "none" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "2.2.51",
3
+ "version": "2.2.53",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",