pixelize-design-library 2.0.5 → 2.0.6

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.
@@ -46,30 +46,27 @@ var inferPickerTypeFromFormat = function (formatStr) {
46
46
  return "date";
47
47
  };
48
48
  function CustomDatePicker(props) {
49
- 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, _a = props.placeholderText, placeholderText = _a === void 0 ? "Select a date" : _a, _b = props.dateFormat, dateFormat = _b === void 0 ? "dd/MM/yyyy" : _b, pickerType = props.pickerType, minDate = props.minDate, maxDate = props.maxDate, disableFutureDates = props.disableFutureDates, disablePastDates = props.disablePastDates, isRange = props.isRange, autoComplete = props.autoComplete, disabled = props.disabled, _c = props.width, width = _c === void 0 ? "100%" : _c;
49
+ 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, _a = props.placeholderText, placeholderText = _a === void 0 ? "Select a date" : _a, _b = props.dateFormat, dateFormat = _b === void 0 ? "dd/MM/yyyy" : _b, pickerType = props.pickerType, minDate = props.minDate, maxDate = props.maxDate, disableFutureDates = props.disableFutureDates, disablePastDates = props.disablePastDates, isRange = props.isRange, _c = props.autoComplete, autoComplete = _c === void 0 ? "off" : _c, disabled = props.disabled, _d = props.width, width = _d === void 0 ? "100%" : _d;
50
50
  var theme = (0, useCustomTheme_1.useCustomTheme)();
51
- var _d = (0, react_2.useDisclosure)(), isOpen = _d.isOpen, onOpen = _d.onOpen, onClose = _d.onClose;
51
+ var _e = (0, react_2.useDisclosure)(), isOpen = _e.isOpen, onOpen = _e.onOpen, onClose = _e.onClose;
52
52
  var resolvedPickerType = pickerType !== null && pickerType !== void 0 ? pickerType : inferPickerTypeFromFormat(dateFormat);
53
53
  var inputRef = (0, react_1.useRef)(null);
54
54
  var today = new Date();
55
55
  var showDate = resolvedPickerType === "date" || resolvedPickerType === "datetime";
56
56
  var showTime = resolvedPickerType === "time" || resolvedPickerType === "datetime";
57
57
  var selectedDate = !isRange ? props.selectedDate : null;
58
- var _e = (0, react_1.useState)(isRange ? new Date() : selectedDate !== null && selectedDate !== void 0 ? selectedDate : new Date()), currentMonth = _e[0], setCurrentMonth = _e[1];
59
- var _f = (0, react_1.useState)(null), rangeStart = _f[0], setRangeStart = _f[1];
60
- var _g = (0, react_1.useState)(null), rangeEnd = _g[0], setRangeEnd = _g[1];
61
- var _h = (0, react_1.useState)(true), selectingStart = _h[0], setSelectingStart = _h[1];
62
- var _j = (0, react_1.useState)(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null), tempDate = _j[0], setTempDate = _j[1];
63
- var _k = (0, react_1.useState)(rangeStart), tempRangeStart = _k[0], setTempRangeStart = _k[1];
64
- var _l = (0, react_1.useState)(rangeEnd), tempRangeEnd = _l[0], setTempRangeEnd = _l[1];
58
+ var _f = (0, react_1.useState)(isRange ? new Date() : selectedDate !== null && selectedDate !== void 0 ? selectedDate : new Date()), currentMonth = _f[0], setCurrentMonth = _f[1];
59
+ var _g = (0, react_1.useState)(null), rangeStart = _g[0], setRangeStart = _g[1];
60
+ var _h = (0, react_1.useState)(null), rangeEnd = _h[0], setRangeEnd = _h[1];
61
+ var _j = (0, react_1.useState)(true), selectingStart = _j[0], setSelectingStart = _j[1];
62
+ var _k = (0, react_1.useState)(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null), tempDate = _k[0], setTempDate = _k[1];
63
+ var _l = (0, react_1.useState)(rangeStart), tempRangeStart = _l[0], setTempRangeStart = _l[1];
64
+ var _m = (0, react_1.useState)(rangeEnd), tempRangeEnd = _m[0], setTempRangeEnd = _m[1];
65
65
  (0, react_1.useEffect)(function () {
66
- if (!isRange) {
67
- setTempDate(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null);
66
+ if (!isRange && selectedDate instanceof Date) {
67
+ setTempDate(new Date(selectedDate)); // clone with full time
68
68
  }
69
69
  }, [selectedDate, isRange]);
70
- (0, react_1.useEffect)(function () {
71
- setTempDate(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null);
72
- }, [selectedDate]);
73
70
  var handleDaySelect = function (day) {
74
71
  var updated = new Date(day);
75
72
  if (isRange) {
@@ -87,7 +84,12 @@ function CustomDatePicker(props) {
87
84
  }
88
85
  }
89
86
  else {
90
- setTempDate(updated);
87
+ setTempDate(function (prev) {
88
+ if (!prev)
89
+ return updated;
90
+ var newDateWithTime = new Date(updated.getFullYear(), updated.getMonth(), updated.getDate(), prev.getHours(), prev.getMinutes(), prev.getSeconds());
91
+ return newDateWithTime;
92
+ });
91
93
  }
92
94
  };
93
95
  var renderDays = function () {
@@ -173,17 +175,21 @@ function CustomDatePicker(props) {
173
175
  react_1.default.createElement(lucide_react_1.ChevronRightIcon, null))),
174
176
  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)); })),
175
177
  renderDays())),
176
- !isRange && showTime && tempDate && (react_1.default.createElement(TimePicker_1.default, { date: tempDate, onChange: setTempDate })),
178
+ !isRange && showTime && tempDate && (react_1.default.createElement(TimePicker_1.default, { date: tempDate, dateFormat: dateFormat, onChange: function (updatedDate) {
179
+ setTempDate(updatedDate);
180
+ props.onChange(updatedDate);
181
+ } })),
177
182
  react_1.default.createElement(react_2.Box, { display: "flex", justifyContent: "space-between", mt: 3 },
178
183
  react_1.default.createElement(Button_1.default, { size: "sm", variant: "ghost", onClick: function () {
179
- setTempDate(null);
184
+ var now = new Date();
185
+ setTempDate(now);
180
186
  setTempRangeStart(null);
181
187
  setTempRangeEnd(null);
182
188
  setRangeStart(null);
183
189
  setRangeEnd(null);
184
190
  setSelectingStart(true);
185
191
  props.onChange(null);
186
- onClose();
192
+ onOpen();
187
193
  } }, "Clear"),
188
194
  react_1.default.createElement(Button_1.default, { size: "sm", colorScheme: "primary", onClick: function () {
189
195
  if (isRange && tempRangeStart && tempRangeEnd) {
@@ -22,7 +22,7 @@ export interface BaseDatePickerProps {
22
22
  }
23
23
  export interface SingleDatePickerProps extends BaseDatePickerProps {
24
24
  isRange?: false;
25
- selectedDate: Date | null;
25
+ selectedDate?: Date | null;
26
26
  onChange: (date: Date | null) => void;
27
27
  }
28
28
  export interface RangeDatePickerProps extends BaseDatePickerProps {
@@ -1,6 +1,8 @@
1
- import React from 'react';
2
- declare const TimePicker: ({ date, onChange }: {
1
+ import React from "react";
2
+ interface TimePickerProps {
3
3
  date: Date;
4
4
  onChange: (date: Date) => void;
5
- }) => React.JSX.Element;
5
+ dateFormat: string;
6
+ }
7
+ declare const TimePicker: React.FC<TimePickerProps>;
6
8
  export default TimePicker;
@@ -1,16 +1,88 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
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;
4
24
  };
5
25
  Object.defineProperty(exports, "__esModule", { value: true });
6
- var react_1 = __importDefault(require("react"));
26
+ var react_1 = __importStar(require("react"));
27
+ var padZero = function (num) { return (num < 10 ? "0".concat(num) : "".concat(num)); };
7
28
  var TimePicker = function (_a) {
8
- var date = _a.date, onChange = _a.onChange;
9
- return (react_1.default.createElement("input", { type: "time", value: date.toISOString().substring(11, 16), onChange: function (e) {
10
- var _a = e.target.value.split(':'), hours = _a[0], minutes = _a[1];
11
- var newDate = new Date(date);
12
- newDate.setHours(Number(hours), Number(minutes));
13
- onChange(newDate);
14
- } }));
29
+ var date = _a.date, onChange = _a.onChange, dateFormat = _a.dateFormat;
30
+ var is12HourFormat = /(hh|h).*a/i.test(dateFormat);
31
+ var _b = (0, react_1.useState)(date.getHours()), hour = _b[0], setHour = _b[1];
32
+ var _c = (0, react_1.useState)(date.getMinutes()), minute = _c[0], setMinute = _c[1];
33
+ var ampm = is12HourFormat ? (hour >= 12 ? "PM" : "AM") : "";
34
+ (0, react_1.useEffect)(function () {
35
+ setHour(date.getHours());
36
+ setMinute(date.getMinutes());
37
+ }, [date]);
38
+ var convertTo24Hour = function (hr, meridiem) {
39
+ if (meridiem === "AM") {
40
+ return hr === 12 ? 0 : hr;
41
+ }
42
+ else {
43
+ return hr === 12 ? 12 : hr + 12;
44
+ }
45
+ };
46
+ var updateTime = function (hrInput, min, meridiem) {
47
+ var newHour = is12HourFormat ? convertTo24Hour(hrInput, meridiem || ampm) : hrInput;
48
+ var newDate = new Date(date);
49
+ newDate.setHours(newHour);
50
+ newDate.setMinutes(min);
51
+ newDate.setSeconds(0);
52
+ newDate.setMilliseconds(0);
53
+ onChange(newDate);
54
+ };
55
+ var handleHourChange = function (e) {
56
+ var hr = parseInt(e.target.value || "1", 10);
57
+ if (is12HourFormat) {
58
+ hr = Math.max(1, Math.min(12, hr));
59
+ updateTime(hr, minute, ampm);
60
+ }
61
+ else {
62
+ hr = Math.max(0, Math.min(23, hr));
63
+ updateTime(hr, minute);
64
+ }
65
+ setHour(hr);
66
+ };
67
+ var handleMinuteChange = function (e) {
68
+ var min = parseInt(e.target.value || "0", 10);
69
+ min = Math.max(0, Math.min(59, min));
70
+ setMinute(min);
71
+ updateTime(hour, min, ampm);
72
+ };
73
+ var handleAmpmToggle = function (e) {
74
+ e.preventDefault();
75
+ var newMeridiem = ampm === "AM" ? "PM" : "AM";
76
+ var displayHr = hour % 12 === 0 ? 12 : hour % 12;
77
+ var newHr = convertTo24Hour(displayHr, newMeridiem);
78
+ setHour(newHr);
79
+ updateTime(newHr, minute, newMeridiem);
80
+ };
81
+ var displayHour = is12HourFormat ? (hour % 12 === 0 ? 12 : hour % 12) : hour;
82
+ return (react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem", fontSize: "1.25rem" } },
83
+ react_1.default.createElement("input", { type: "number", value: padZero(displayHour), onChange: handleHourChange, min: is12HourFormat ? 1 : 0, max: is12HourFormat ? 12 : 23, style: { width: "3rem", textAlign: "center" } }),
84
+ ":",
85
+ react_1.default.createElement("input", { type: "number", value: padZero(minute), onChange: handleMinuteChange, min: 0, max: 59, style: { width: "3rem", textAlign: "center" } }),
86
+ is12HourFormat && (react_1.default.createElement("button", { onClick: function () { return handleAmpmToggle; }, style: { fontWeight: "bold", padding: "0.25rem 0.5rem" } }, ampm))));
15
87
  };
16
88
  exports.default = TimePicker;
@@ -52,7 +52,7 @@ var DatePick = function () {
52
52
  };
53
53
  return (react_1.default.createElement("div", null,
54
54
  react_1.default.createElement("h2", null, "Single Date Picker"),
55
- react_1.default.createElement(DatePicker_1.default, { selectedDate: selectedDate, onChange: handleDateChange, dateFormat: "dd/MM/yyyy", pickerType: "time", width: "20px" }),
55
+ react_1.default.createElement(DatePicker_1.default, { selectedDate: selectedDate, onChange: handleDateChange, dateFormat: "HH:mm", pickerType: "time", width: "300px" }),
56
56
  react_1.default.createElement("br", null),
57
57
  react_1.default.createElement("h2", null, "Date Range Picker"),
58
58
  react_1.default.createElement(DatePicker_1.default, { isRange: true, dateFormat: "dd/MM/yyyy", pickerType: "datetime", onChange: handleDateChange })));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",