pixelize-design-library 2.0.8 → 2.0.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.
@@ -13,7 +13,7 @@ function CheckBox(_a) {
13
13
  var label = _a.label, spacing = _a.spacing, isInvalid = _a.isInvalid, color = _a.color, iconColor = _a.iconColor, iconSize = _a.iconSize, isChecked = _a.isChecked, isIndeterminate = _a.isIndeterminate, onChange = _a.onChange, isDisabled = _a.isDisabled, size = _a.size, value = _a.value, defaultChecked = _a.defaultChecked, sx = _a.sx, isRequired = _a.isRequired, error = _a.error, errorMessage = _a.errorMessage, isInformation = _a.isInformation, informationMessage = _a.informationMessage, id = _a.id, helperText = _a.helperText;
14
14
  var theme = (0, useCustomTheme_1.useCustomTheme)();
15
15
  return (react_1.default.createElement(react_2.FormControl, { isInvalid: error },
16
- react_1.default.createElement(react_2.Checkbox, { spacing: spacing, isInvalid: isInvalid, isRequired: isRequired, colorScheme: color, iconColor: iconColor, iconSize: iconSize, isChecked: isChecked, isIndeterminate: isIndeterminate, onChange: onChange, isDisabled: isDisabled, size: size, value: value, defaultChecked: defaultChecked, borderColor: theme.colors.gray[500], sx: sx }, label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, id: id, isInformation: isInformation, informationMessage: informationMessage, isRequired: isRequired }))),
16
+ react_1.default.createElement(react_2.Checkbox, { spacing: spacing, isInvalid: isInvalid, isRequired: isRequired, colorScheme: color, iconColor: iconColor, iconSize: iconSize, isChecked: isChecked, isIndeterminate: isIndeterminate, onChange: onChange, isDisabled: isDisabled, size: size, value: value, defaultChecked: defaultChecked, borderColor: theme.colors.gray[500], sx: sx, display: "flex", alignItems: "inherit" }, label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, id: id, isInformation: isInformation, informationMessage: informationMessage, isRequired: isRequired }))),
17
17
  error && react_1.default.createElement(ErrorMessage_1.default, { errorMessage: errorMessage }),
18
18
  helperText && !error && react_1.default.createElement(HelperText_1.default, { helperText: helperText })));
19
19
  }
@@ -62,17 +62,23 @@ function CustomDatePicker(props) {
62
62
  var _k = (0, react_1.useState)(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null), tempDate = _k[0], setTempDate = _k[1];
63
63
  var _l = (0, react_1.useState)(rangeStart), tempRangeStart = _l[0], setTempRangeStart = _l[1];
64
64
  var _m = (0, react_1.useState)(rangeEnd), tempRangeEnd = _m[0], setTempRangeEnd = _m[1];
65
- // Ensure default tempDate if null and pickerType is "time"
65
+ var popoverRef = (0, react_1.useRef)(null);
66
+ var handleOpen = function () {
67
+ if (!isRange && !selectedDate) {
68
+ setTempDate(new Date());
69
+ }
70
+ onOpen();
71
+ };
66
72
  (0, react_1.useEffect)(function () {
67
73
  if (!isRange) {
68
74
  if (selectedDate instanceof Date) {
69
75
  setTempDate(new Date(selectedDate));
70
76
  }
71
- else if (resolvedPickerType === "time" || resolvedPickerType === "datetime") {
72
- setTempDate(new Date());
77
+ else {
78
+ setTempDate(null);
73
79
  }
74
80
  }
75
- }, [selectedDate, isRange, resolvedPickerType]);
81
+ }, [selectedDate, isRange]);
76
82
  var handleDaySelect = function (day) {
77
83
  var updated = new Date(day);
78
84
  if (isRange) {
@@ -93,8 +99,7 @@ function CustomDatePicker(props) {
93
99
  setTempDate(function (prev) {
94
100
  if (!prev)
95
101
  return updated;
96
- var newDateWithTime = new Date(updated.getFullYear(), updated.getMonth(), updated.getDate(), prev.getHours(), prev.getMinutes(), prev.getSeconds());
97
- return newDateWithTime;
102
+ return new Date(updated.getFullYear(), updated.getMonth(), updated.getDate(), prev.getHours(), prev.getMinutes(), prev.getSeconds());
98
103
  });
99
104
  }
100
105
  };
@@ -149,28 +154,32 @@ function CustomDatePicker(props) {
149
154
  : tempDate
150
155
  ? (0, date_fns_1.format)(tempDate, dateFormat)
151
156
  : "";
157
+ (0, react_1.useEffect)(function () {
158
+ var handleClickOutside = function (event) {
159
+ var _a;
160
+ if (popoverRef.current &&
161
+ !popoverRef.current.contains(event.target) &&
162
+ !((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))) {
163
+ onClose();
164
+ }
165
+ };
166
+ if (isOpen) {
167
+ document.addEventListener("mousedown", handleClickOutside);
168
+ }
169
+ else {
170
+ document.removeEventListener("mousedown", handleClickOutside);
171
+ }
172
+ return function () {
173
+ document.removeEventListener("mousedown", handleClickOutside);
174
+ };
175
+ }, [isOpen, onClose]);
152
176
  return (react_1.default.createElement(react_2.Box, { width: width, position: "relative" },
153
177
  label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage })),
154
- react_1.default.createElement(react_2.Popover, { isLazy: true, isOpen: isOpen, onClose: onClose, placement: "bottom-start", modifiers: [
155
- {
156
- name: "flip",
157
- enabled: true,
158
- options: {
159
- fallbackPlacements: ["top-start", "right-start", "left-start"],
160
- },
161
- },
162
- {
163
- name: "preventOverflow",
164
- enabled: true,
165
- options: {
166
- boundary: "viewport",
167
- },
168
- },
169
- ] },
178
+ react_1.default.createElement(react_2.Popover, { isLazy: true, isOpen: isOpen, onClose: onClose, placement: "bottom-start", initialFocusRef: inputRef, closeOnBlur: true },
170
179
  react_1.default.createElement(react_2.PopoverTrigger, null,
171
- react_1.default.createElement(react_2.Box, { onClick: onOpen },
180
+ react_1.default.createElement(react_2.Box, { onClick: handleOpen },
172
181
  react_1.default.createElement(TextInput_1.default, { id: id, name: name, ref: inputRef, placeholder: placeholderText, value: displayValue, isReadOnly: true, error: error, errorMessage: errorMessage, helperText: helperText, autoComplete: autoComplete, isDisabled: disabled, width: width }))),
173
- react_1.default.createElement(react_2.PopoverContent, { width: "auto", p: 2 },
182
+ react_1.default.createElement(react_2.PopoverContent, { width: "auto", p: 2, ref: popoverRef },
174
183
  react_1.default.createElement(react_2.PopoverBody, null,
175
184
  showDate && (react_1.default.createElement(react_1.default.Fragment, null,
176
185
  react_1.default.createElement(react_2.Box, { display: "flex", justifyContent: "space-between", mb: 2 },
@@ -187,8 +196,7 @@ function CustomDatePicker(props) {
187
196
  } })),
188
197
  react_1.default.createElement(react_2.Box, { display: "flex", justifyContent: "space-between", mt: 3 },
189
198
  react_1.default.createElement(Button_1.default, { size: "sm", variant: "ghost", onClick: function () {
190
- var now = new Date();
191
- setTempDate(now);
199
+ setTempDate(null);
192
200
  setTempRangeStart(null);
193
201
  setTempRangeEnd(null);
194
202
  setRangeStart(null);
@@ -201,10 +209,7 @@ function CustomDatePicker(props) {
201
209
  if (isRange && tempRangeStart && tempRangeEnd) {
202
210
  setRangeStart(tempRangeStart);
203
211
  setRangeEnd(tempRangeEnd);
204
- props.onChange({
205
- from: tempRangeStart,
206
- to: tempRangeEnd,
207
- });
212
+ props.onChange({ from: tempRangeStart, to: tempRangeEnd });
208
213
  }
209
214
  else if (!isRange && tempDate) {
210
215
  props.onChange(tempDate);
@@ -25,12 +25,13 @@ export interface SingleDatePickerProps extends BaseDatePickerProps {
25
25
  selectedDate?: Date | null;
26
26
  onChange: (date: Date | null) => void;
27
27
  }
28
+ export interface RangeDate {
29
+ from: Date | null;
30
+ to: Date | null;
31
+ }
28
32
  export interface RangeDatePickerProps extends BaseDatePickerProps {
29
33
  isRange: true;
30
- selectedDate?: Date | null;
31
- onChange: ((date: Date | null) => void) | ((range: {
32
- from: Date | null;
33
- to: Date | null;
34
- } | null) => void);
34
+ selectedDate?: RangeDate | null;
35
+ onChange: (range: RangeDate | null) => void;
35
36
  }
36
37
  export type DatePickerProps = SingleDatePickerProps | RangeDatePickerProps;
@@ -24,7 +24,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  var react_1 = __importStar(require("react"));
27
- var padZero = function (num) { return (num < 10 ? "0".concat(num) : "".concat(num)); };
28
27
  var TimePicker = function (_a) {
29
28
  var date = _a.date, onChange = _a.onChange, dateFormat = _a.dateFormat;
30
29
  var is12HourFormat = /(hh|h).*a/i.test(dateFormat);
@@ -36,12 +35,9 @@ var TimePicker = function (_a) {
36
35
  setMinute(date.getMinutes());
37
36
  }, [date]);
38
37
  var convertTo24Hour = function (hr, meridiem) {
39
- if (meridiem === "AM") {
38
+ if (meridiem === "AM")
40
39
  return hr === 12 ? 0 : hr;
41
- }
42
- else {
43
- return hr === 12 ? 12 : hr + 12;
44
- }
40
+ return hr === 12 ? 12 : hr + 12;
45
41
  };
46
42
  var updateTime = function (hrInput, min, meridiem) {
47
43
  var newHour = is12HourFormat ? convertTo24Hour(hrInput, meridiem || ampm) : hrInput;
@@ -70,8 +66,7 @@ var TimePicker = function (_a) {
70
66
  setMinute(min);
71
67
  updateTime(hour, min, ampm);
72
68
  };
73
- var handleAmpmToggle = function (e) {
74
- e.preventDefault();
69
+ var handleAmpmToggle = function () {
75
70
  var newMeridiem = ampm === "AM" ? "PM" : "AM";
76
71
  var displayHr = hour % 12 === 0 ? 12 : hour % 12;
77
72
  var newHr = convertTo24Hour(displayHr, newMeridiem);
@@ -80,9 +75,9 @@ var TimePicker = function (_a) {
80
75
  };
81
76
  var displayHour = is12HourFormat ? (hour % 12 === 0 ? 12 : hour % 12) : hour;
82
77
  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" } }),
78
+ react_1.default.createElement("input", { type: "number", value: displayHour, onChange: handleHourChange, min: is12HourFormat ? 1 : 0, max: is12HourFormat ? 12 : 23, style: { width: "3rem", textAlign: "center" } }),
84
79
  ":",
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))));
80
+ react_1.default.createElement("input", { type: "number", value: minute, onChange: handleMinuteChange, min: 0, max: 59, style: { width: "3rem", textAlign: "center" } }),
81
+ is12HourFormat && (react_1.default.createElement("button", { onClick: handleAmpmToggle, style: { fontWeight: "bold", padding: "0.25rem 0.5rem" } }, ampm))));
87
82
  };
88
83
  exports.default = TimePicker;
@@ -39,24 +39,31 @@ exports.Input = {
39
39
  borderColor: borderColor,
40
40
  _hover: {
41
41
  borderColor: primary,
42
- boxShadow: "0 0 0 0.125rem ".concat(shadowPrimary),
42
+ // boxShadow: `0 0 0 0.125rem ${shadowPrimary}`,
43
+ outline: "0"
43
44
  },
44
45
  _focus: {
45
46
  borderColor: primary,
46
47
  boxShadow: "0 0 0 0.125rem ".concat(shadowPrimary),
48
+ outline: "0"
47
49
  },
48
50
  _invalid: {
49
51
  borderColor: errorColor,
50
52
  boxShadow: "0 0 0 0.125rem ".concat(shadowError),
51
53
  _hover: {
52
54
  borderColor: errorColor,
53
- boxShadow: "0 0 0 0.125rem ".concat(shadowError),
55
+ // boxShadow: `0 0 0 0.125rem ${shadowError}`,
56
+ outline: "0"
54
57
  },
55
58
  _focus: {
56
59
  borderColor: errorColor,
57
60
  boxShadow: "0 0 0 0.125rem ".concat(shadowError),
61
+ outline: "0"
58
62
  },
59
63
  },
64
+ _readOnly: {
65
+ boxShadow: 'inherit',
66
+ },
60
67
  },
61
68
  };
62
69
  },
@@ -29,32 +29,42 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  var react_1 = __importStar(require("react"));
30
30
  var DatePicker_1 = __importDefault(require("../Components/DatePicker/DatePicker"));
31
31
  var DatePick = function () {
32
- var _a = (0, react_1.useState)(new Date()), selectedDate = _a[0], setSelectedDate = _a[1];
32
+ var _a = (0, react_1.useState)(null), selectedDate = _a[0], setSelectedDate = _a[1];
33
+ var _b = (0, react_1.useState)(null), selectedTime = _b[0], setSelectedTime = _b[1];
34
+ var _c = (0, react_1.useState)(null), selectedDateTime = _c[0], setSelectedDateTime = _c[1];
35
+ var _d = (0, react_1.useState)(null), selectedDateRange = _d[0], setSelectedDateRange = _d[1];
33
36
  var handleDateChange = function (value) {
34
- console.log("Date change event:", value);
35
- if (!value) {
36
- console.log("Date cleared");
37
- return;
38
- }
39
- if ("from" in value && "to" in value) {
40
- var from = value.from, to = value.to;
41
- if (from && to) {
42
- console.log("Range selected:", from, to);
43
- }
44
- else {
45
- console.log("Incomplete range selected:", value);
46
- }
37
+ setSelectedDate(value);
38
+ console.log("Date selected:", value);
39
+ };
40
+ var handleTimeChange = function (value) {
41
+ setSelectedTime(value);
42
+ console.log("Time selected:", value);
43
+ };
44
+ var handleDateTimeChange = function (value) {
45
+ setSelectedDateTime(value);
46
+ console.log("DateTime selected:", value);
47
+ };
48
+ var handleDateRangeChange = function (value) {
49
+ if (value && "from" in value && "to" in value) {
50
+ setSelectedDateRange(value);
51
+ console.log("Date range selected:", value.from, value.to);
47
52
  }
48
53
  else {
49
- setSelectedDate(value);
50
- console.log("Date selected:", value);
54
+ setSelectedDateRange(null);
55
+ console.log("Date range cleared");
51
56
  }
52
57
  };
53
58
  return (react_1.default.createElement("div", null,
54
59
  react_1.default.createElement("h2", null, "Single Date Picker"),
55
- react_1.default.createElement(DatePicker_1.default, { selectedDate: selectedDate, onChange: handleDateChange, dateFormat: "HH:mm", pickerType: "time", width: "300px" }),
60
+ react_1.default.createElement("h2", null, "Date "),
61
+ react_1.default.createElement(DatePicker_1.default, { selectedDate: selectedDate, onChange: handleDateChange, dateFormat: "dd/MM/yyyy", pickerType: "date", width: "300px", error: true, errorMessage: "Invalid date" }),
62
+ react_1.default.createElement("h2", null, "time "),
63
+ react_1.default.createElement(DatePicker_1.default, { selectedDate: selectedTime, onChange: handleTimeChange, dateFormat: "HH:mm", pickerType: "time", width: "300px", error: true, errorMessage: "Invalid date" }),
64
+ react_1.default.createElement("h2", null, "datetime "),
65
+ react_1.default.createElement(DatePicker_1.default, { selectedDate: selectedDateTime, onChange: handleDateTimeChange, dateFormat: "dd/MM/yyyy HH:mm", pickerType: "datetime", width: "300px", error: true, errorMessage: "Invalid date" }),
56
66
  react_1.default.createElement("br", null),
57
67
  react_1.default.createElement("h2", null, "Date Range Picker"),
58
- react_1.default.createElement(DatePicker_1.default, { isRange: true, dateFormat: "dd/MM/yyyy", pickerType: "datetime", onChange: handleDateChange })));
68
+ react_1.default.createElement(DatePicker_1.default, { isRange: true, dateFormat: "dd/MM/yyyy", pickerType: "date", onChange: handleDateRangeChange, selectedDate: selectedDateRange, width: "300px", error: true, errorMessage: "Invalid date" })));
59
69
  };
60
70
  exports.default = DatePick;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "2.0.8",
3
+ "version": "2.0.9",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",