pixelize-design-library 2.2.149 → 2.2.151

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.
@@ -20,7 +20,8 @@ export type BaseDatePickerProps = {
20
20
  disabled?: boolean;
21
21
  width?: string | number;
22
22
  disableToday?: boolean;
23
- size?: "sm" | "md" | "lg";
23
+ /** Chakra `Input` / `InputGroup` size for the field and chevron (calendar/clock) scale. */
24
+ size?: "xs" | "sm" | "md" | "lg";
24
25
  };
25
26
  export type SingleDatePickerProps = BaseDatePickerProps & {
26
27
  isRange?: false;
@@ -47,6 +47,7 @@ var HelperText_1 = __importDefault(require("../Common/HelperText"));
47
47
  var ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
48
48
  var CalendarPanel_1 = __importDefault(require("./CalendarPanel"));
49
49
  var useCustomTheme_1 = require("../../Theme/useCustomTheme");
50
+ var textInputIconSize_1 = require("../Input/textInputIconSize");
50
51
  var TimePicker_1 = __importDefault(require("./TimePicker"));
51
52
  var TimePickerInput_1 = require("./TimePickerInput");
52
53
  // helper to set time on date while preserving date part
@@ -56,20 +57,23 @@ var setTimeFrom = function (base, time) {
56
57
  };
57
58
  var RangeDatePicker = function (props) {
58
59
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
59
- 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, _o = props.dateFormat, dateFormat = _o === void 0 ? "dd/MM/yyyy" : _o, minDate = props.minDate, maxDate = props.maxDate, disableFutureDates = props.disableFutureDates, disablePastDates = props.disablePastDates, _p = props.autoComplete, autoComplete = _p === void 0 ? "off" : _p, disabled = props.disabled, _q = props.width, width = _q === void 0 ? "100%" : _q, _r = props.disableToday, disableToday = _r === void 0 ? false : _r;
60
+ 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, _o = props.dateFormat, dateFormat = _o === void 0 ? "dd/MM/yyyy" : _o, minDate = props.minDate, maxDate = props.maxDate, disableFutureDates = props.disableFutureDates, disablePastDates = props.disablePastDates, _p = props.autoComplete, autoComplete = _p === void 0 ? "off" : _p, disabled = props.disabled, _q = props.width, width = _q === void 0 ? "100%" : _q, _r = props.disableToday, disableToday = _r === void 0 ? false : _r, _s = props.size, size = _s === void 0 ? "md" : _s;
60
61
  var theme = (0, useCustomTheme_1.useCustomTheme)();
61
- var _s = (0, react_2.useDisclosure)(), isOpen = _s.isOpen, onOpen = _s.onOpen, onClose = _s.onClose;
62
+ var sizeKey = typeof size === "string" ? size : "md";
63
+ var calendarIconPx = (0, textInputIconSize_1.getTextInputIconSizePx)(sizeKey);
64
+ var calendarIconWrapperSx = (0, textInputIconSize_1.getTextInputIconWrapperSx)(sizeKey);
65
+ var _t = (0, react_2.useDisclosure)(), isOpen = _t.isOpen, onOpen = _t.onOpen, onClose = _t.onClose;
62
66
  var inputRef = (0, react_1.useRef)(null);
63
67
  var triggerRef = (0, react_1.useRef)(null);
64
68
  var popoverRef = (0, react_1.useRef)(null);
65
69
  var today = new Date();
66
70
  var placeholder = (0, react_1.useMemo)(function () { return placeholderText || "".concat(dateFormat, " - ").concat(dateFormat); }, [placeholderText, dateFormat]);
67
71
  var selectedRange = (_b = (_a = props.value) !== null && _a !== void 0 ? _a : props.selectedDate) !== null && _b !== void 0 ? _b : null;
68
- var _t = (0, react_1.useState)(new Date()), currentMonth = _t[0], setCurrentMonthState = _t[1];
69
- var _u = (0, react_1.useState)((_c = selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from) !== null && _c !== void 0 ? _c : null), tempRangeStart = _u[0], setTempRangeStart = _u[1];
70
- var _v = (0, react_1.useState)((_d = selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) !== null && _d !== void 0 ? _d : null), tempRangeEnd = _v[0], setTempRangeEnd = _v[1];
71
- var _w = (0, react_1.useState)(true), selectingStart = _w[0], setSelectingStart = _w[1];
72
- var _x = (0, react_1.useState)(""), inputValue = _x[0], setInputValue = _x[1];
72
+ var _u = (0, react_1.useState)(new Date()), currentMonth = _u[0], setCurrentMonthState = _u[1];
73
+ var _v = (0, react_1.useState)((_c = selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.from) !== null && _c !== void 0 ? _c : null), tempRangeStart = _v[0], setTempRangeStart = _v[1];
74
+ var _w = (0, react_1.useState)((_d = selectedRange === null || selectedRange === void 0 ? void 0 : selectedRange.to) !== null && _d !== void 0 ? _d : null), tempRangeEnd = _w[0], setTempRangeEnd = _w[1];
75
+ var _x = (0, react_1.useState)(true), selectingStart = _x[0], setSelectingStart = _x[1];
76
+ var _y = (0, react_1.useState)(""), inputValue = _y[0], setInputValue = _y[1];
73
77
  var formatHasTime = (0, react_1.useMemo)(function () { return /(h{1,2}|H{1,2})/.test(dateFormat); }, [dateFormat]);
74
78
  var formatHasSeconds = (0, react_1.useMemo)(function () { return /s{1,2}/i.test(dateFormat); }, [dateFormat]);
75
79
  var shouldUseSelectTimePicker = formatHasTime && !formatHasSeconds;
@@ -181,8 +185,8 @@ var RangeDatePicker = function (props) {
181
185
  react_1.default.createElement(react_2.Popover, { isLazy: true, isOpen: isOpen, onClose: finalize, placement: "bottom-start", closeOnBlur: false, returnFocusOnClose: false },
182
186
  react_1.default.createElement(react_2.PopoverTrigger, null,
183
187
  react_1.default.createElement(react_2.Box, { ref: triggerRef, as: "div" },
184
- react_1.default.createElement(react_2.InputGroup, null,
185
- react_1.default.createElement(react_2.Input, { ref: inputRef, id: id, name: name, placeholder: placeholder, value: displayValue, readOnly: true, isDisabled: disabled, autoComplete: autoComplete, onFocus: function () {
188
+ react_1.default.createElement(react_2.InputGroup, { size: sizeKey },
189
+ react_1.default.createElement(react_2.Input, { ref: inputRef, id: id, name: name, size: sizeKey, placeholder: placeholder, value: displayValue, readOnly: true, isDisabled: disabled, autoComplete: autoComplete, onFocus: function () {
186
190
  if (!isOpen)
187
191
  handleOpen();
188
192
  }, onClick: function () {
@@ -196,8 +200,9 @@ var RangeDatePicker = function (props) {
196
200
  }, _hover: {
197
201
  borderColor: error ? (_m = (_l = theme.colors.semantic) === null || _l === void 0 ? void 0 : _l.error) === null || _m === void 0 ? void 0 : _m[500] : undefined,
198
202
  }, cursor: "pointer" }),
199
- react_1.default.createElement(react_2.InputRightElement, { pr: 3, pointerEvents: "auto", style: { cursor: "pointer" }, onClick: function () { return (isOpen ? onClose() : handleOpen()); } },
200
- react_1.default.createElement(lucide_react_1.CalendarIcon, { size: 18, color: theme.colors.gray[500] }))))),
203
+ react_1.default.createElement(react_2.InputRightElement, { pr: 3, height: "100%", display: "flex", alignItems: "center", pointerEvents: "auto", style: { cursor: "pointer" }, onClick: function () { return (isOpen ? onClose() : handleOpen()); } },
204
+ react_1.default.createElement(react_2.Box, { as: "span", sx: calendarIconWrapperSx },
205
+ react_1.default.createElement(lucide_react_1.CalendarIcon, { size: calendarIconPx, color: theme.colors.gray[500] })))))),
201
206
  react_1.default.createElement(react_2.PopoverContent, { width: "auto", p: 4, ref: popoverRef, boxShadow: "lg" },
202
207
  react_1.default.createElement(react_2.PopoverBody, null,
203
208
  react_1.default.createElement(CalendarPanel_1.default, { currentMonth: currentMonth, setCurrentMonth: function (updater) { return setCurrentMonthState(function (prev) { return updater(prev); }); }, today: today, isRange: true, tempDate: null, tempRangeStart: tempRangeStart, tempRangeEnd: tempRangeEnd, isSameDay: date_fns_1.isSameDay, isBefore: date_fns_1.isBefore, isAfter: date_fns_1.isAfter, minDate: minDate, maxDate: maxDate, disablePastDates: disablePastDates, disableFutureDates: disableFutureDates, disableToday: disableToday, onDaySelect: handleDaySelect }),
@@ -217,7 +222,7 @@ var RangeDatePicker = function (props) {
217
222
  return;
218
223
  }
219
224
  setTempRangeStart(setTimeFrom(startTimeBaseDate, t));
220
- }, dateFormat: timePickerFormat, disabled: disabled || !tempRangeStart }))),
225
+ }, dateFormat: timePickerFormat, disabled: disabled || !tempRangeStart, size: sizeKey }))),
221
226
  react_1.default.createElement(react_2.Box, null,
222
227
  react_1.default.createElement(react_2.Box, { fontSize: "xs", color: "gray.600", mb: 1 }, "End time"),
223
228
  shouldUseSelectTimePicker ? (react_1.default.createElement(TimePicker_1.default, { date: endTimeBaseDate, onChange: function (updated) {
@@ -233,7 +238,7 @@ var RangeDatePicker = function (props) {
233
238
  return;
234
239
  }
235
240
  setTempRangeEnd(setTimeFrom(endTimeBaseDate, t));
236
- }, dateFormat: timePickerFormat, disabled: disabled || !tempRangeEnd }))))),
241
+ }, dateFormat: timePickerFormat, disabled: disabled || !tempRangeEnd, size: sizeKey }))))),
237
242
  react_1.default.createElement(react_2.Box, { display: "flex", justifyContent: "space-between", mt: 4, pt: 4, borderTop: "1px solid", borderColor: "gray.200" },
238
243
  react_1.default.createElement(Button_1.default, { size: "sm", variant: "ghost", onClick: handleClear }, "Clear"),
239
244
  react_1.default.createElement(Button_1.default, { size: "sm", colorScheme: "primary", onClick: requestClose }, "OK"))))),
@@ -43,6 +43,7 @@ var date_fns_1 = require("date-fns");
43
43
  var lucide_react_1 = require("lucide-react");
44
44
  var Button_1 = __importDefault(require("../Button/Button"));
45
45
  var useCustomTheme_1 = require("../../Theme/useCustomTheme");
46
+ var textInputIconSize_1 = require("../Input/textInputIconSize");
46
47
  var FormLabel_1 = require("../Common/FormLabel");
47
48
  var HelperText_1 = __importDefault(require("../Common/HelperText"));
48
49
  var ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
@@ -275,9 +276,12 @@ var normalizeTimeBuffer = function (tokenChar, rawBuffer, segmentLength, is12Hou
275
276
  };
276
277
  var SingleDatePicker = function (props) {
277
278
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
278
- 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;
279
+ 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, _q = props.size, size = _q === void 0 ? "md" : _q;
279
280
  var theme = (0, useCustomTheme_1.useCustomTheme)();
280
- var _q = (0, react_2.useDisclosure)(), isOpen = _q.isOpen, onOpen = _q.onOpen, onClose = _q.onClose;
281
+ var sizeKey = typeof size === "string" ? size : "md";
282
+ var calendarIconPx = (0, textInputIconSize_1.getTextInputIconSizePx)(sizeKey);
283
+ var calendarIconWrapperSx = (0, textInputIconSize_1.getTextInputIconWrapperSx)(sizeKey);
284
+ var _r = (0, react_2.useDisclosure)(), isOpen = _r.isOpen, onOpen = _r.onOpen, onClose = _r.onClose;
281
285
  var inputRef = (0, react_1.useRef)(null);
282
286
  var popoverRef = (0, react_1.useRef)(null);
283
287
  var triggerRef = (0, react_1.useRef)(null);
@@ -335,18 +339,18 @@ var SingleDatePicker = function (props) {
335
339
  resolvedDateFormat.toLowerCase().includes("mm") ||
336
340
  resolvedDateFormat.toLowerCase().includes("ss");
337
341
  var selectedDate = ((_a = props.value) !== null && _a !== void 0 ? _a : props.selectedDate);
338
- var _r = (0, react_1.useState)(selectedDate
342
+ var _s = (0, react_1.useState)(selectedDate
339
343
  ? disableToday && (0, date_fns_1.isSameDay)(selectedDate, today)
340
344
  ? tomorrow
341
345
  : selectedDate
342
346
  : disableToday
343
347
  ? tomorrow
344
- : today), currentMonth = _r[0], setCurrentMonth = _r[1];
345
- var _s = (0, react_1.useState)(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null), tempDate = _s[0], setTempDate = _s[1];
346
- var _t = (0, react_1.useState)(""), inputValue = _t[0], setInputValue = _t[1];
347
- var _u = (0, react_1.useState)(false), isTyping = _u[0], setIsTyping = _u[1];
348
- var _v = (0, react_1.useState)(false), isMaskActive = _v[0], setIsMaskActive = _v[1];
349
- var _w = (0, react_1.useState)(0), setCurrentSegmentIndex = _w[1];
348
+ : today), currentMonth = _s[0], setCurrentMonth = _s[1];
349
+ var _t = (0, react_1.useState)(selectedDate !== null && selectedDate !== void 0 ? selectedDate : null), tempDate = _t[0], setTempDate = _t[1];
350
+ var _u = (0, react_1.useState)(""), inputValue = _u[0], setInputValue = _u[1];
351
+ var _v = (0, react_1.useState)(false), isTyping = _v[0], setIsTyping = _v[1];
352
+ var _w = (0, react_1.useState)(false), isMaskActive = _w[0], setIsMaskActive = _w[1];
353
+ var _x = (0, react_1.useState)(0), setCurrentSegmentIndex = _x[1];
350
354
  var lastSegmentIndexRef = (0, react_1.useRef)(0);
351
355
  var resetCommitGuardAndOpen = function () {
352
356
  didCommitRef.current = false;
@@ -952,8 +956,8 @@ var SingleDatePicker = function (props) {
952
956
  }, placement: "bottom-start", closeOnBlur: false, returnFocusOnClose: false },
953
957
  react_1.default.createElement(react_2.PopoverTrigger, null,
954
958
  react_1.default.createElement(react_2.Box, { ref: triggerRef, as: "div" },
955
- react_1.default.createElement(react_2.InputGroup, null,
956
- 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: {
959
+ react_1.default.createElement(react_2.InputGroup, { size: sizeKey },
960
+ react_1.default.createElement(react_2.Input, { ref: inputRef, id: id, name: name, size: sizeKey, 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: {
957
961
  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],
958
962
  boxShadow: error
959
963
  ? "0 0 0 0.125rem ".concat((_f = theme.colors.boxShadow) === null || _f === void 0 ? void 0 : _f.error)
@@ -961,7 +965,7 @@ var SingleDatePicker = function (props) {
961
965
  }, _hover: {
962
966
  borderColor: error ? (_j = (_h = theme.colors.semantic) === null || _h === void 0 ? void 0 : _h.error) === null || _j === void 0 ? void 0 : _j[500] : undefined,
963
967
  }, cursor: "text", boxShadow: error ? "0 0 0 0.125rem ".concat((_k = theme.colors.boxShadow) === null || _k === void 0 ? void 0 : _k.error) : "" }),
964
- react_1.default.createElement(react_2.InputRightElement, { pr: 3, pointerEvents: "auto", onClick: function (e) {
968
+ react_1.default.createElement(react_2.InputRightElement, { pr: 3, height: "100%", display: "flex", alignItems: "center", pointerEvents: "auto", onClick: function (e) {
965
969
  e.stopPropagation();
966
970
  if (!isOpen) {
967
971
  handleOpen();
@@ -970,7 +974,8 @@ var SingleDatePicker = function (props) {
970
974
  onClose();
971
975
  }
972
976
  }, style: { cursor: "pointer" } },
973
- react_1.default.createElement(lucide_react_1.CalendarIcon, { size: 18, color: theme.colors.gray[500] }))))),
977
+ react_1.default.createElement(react_2.Box, { as: "span", sx: calendarIconWrapperSx },
978
+ react_1.default.createElement(lucide_react_1.CalendarIcon, { size: calendarIconPx, color: theme.colors.gray[500] })))))),
974
979
  react_1.default.createElement(react_2.PopoverContent, { width: "auto", p: 4, ref: popoverRef, boxShadow: "lg" },
975
980
  react_1.default.createElement(react_2.PopoverBody, null,
976
981
  showDate && (react_1.default.createElement(CalendarPanel_1.default, { currentMonth: currentMonth, setCurrentMonth: function (updater) { return setCurrentMonth(function (prev) { return updater(prev); }); }, today: today, isRange: false, tempDate: tempDate, tempRangeStart: null, tempRangeEnd: null, isSameDay: date_fns_1.isSameDay, isBefore: date_fns_1.isBefore, isAfter: date_fns_1.isAfter, minDate: minDate, maxDate: maxDate, disablePastDates: disablePastDates, disableFutureDates: disableFutureDates, disableToday: disableToday, onDaySelect: handleDaySelect })),
@@ -978,7 +983,7 @@ var SingleDatePicker = function (props) {
978
983
  setTempDate(updatedDate);
979
984
  setInputValue(updatedDate ? (0, date_fns_1.format)(updatedDate, resolvedDateFormat) : "");
980
985
  setIsTyping(false);
981
- }, dateFormat: resolvedDateFormat, disabled: disabled, placeholder: placeholderText })) : (react_1.default.createElement(TimePicker_1.default, { date: tempDate !== null && tempDate !== void 0 ? tempDate : new Date((disableToday ? tomorrow : today).getFullYear(), (disableToday ? tomorrow : today).getMonth(), (disableToday ? tomorrow : today).getDate(), 0, 0, 0, 0), dateFormat: resolvedDateFormat, onChange: function (updatedDate) {
986
+ }, dateFormat: resolvedDateFormat, disabled: disabled, placeholder: placeholderText, size: sizeKey, error: error })) : (react_1.default.createElement(TimePicker_1.default, { date: tempDate !== null && tempDate !== void 0 ? tempDate : new Date((disableToday ? tomorrow : today).getFullYear(), (disableToday ? tomorrow : today).getMonth(), (disableToday ? tomorrow : today).getDate(), 0, 0, 0, 0), dateFormat: resolvedDateFormat, onChange: function (updatedDate) {
982
987
  setTempDate(updatedDate);
983
988
  setInputValue((0, date_fns_1.format)(updatedDate, resolvedDateFormat));
984
989
  setIsTyping(false);
@@ -50,15 +50,16 @@ var formatToPlaceholder = function (formatStr) {
50
50
  };
51
51
  var TimeOnlyPicker = function (props) {
52
52
  var _a;
53
- var id = props.id, label = props.label, isRequired = props.isRequired, isInformation = props.isInformation, informationMessage = props.informationMessage, error = props.error, errorMessage = props.errorMessage, helperText = props.helperText, placeholderText = props.placeholderText, _b = props.dateFormat, dateFormat = _b === void 0 ? "HH:mm" : _b, disabled = props.disabled, _c = props.width, width = _c === void 0 ? "100%" : _c, _d = props.disableToday, disableToday = _d === void 0 ? false : _d;
54
- var _e = (0, react_2.useDisclosure)(), isOpen = _e.isOpen, onOpen = _e.onOpen, onClose = _e.onClose;
53
+ var id = props.id, label = props.label, isRequired = props.isRequired, isInformation = props.isInformation, informationMessage = props.informationMessage, error = props.error, errorMessage = props.errorMessage, helperText = props.helperText, placeholderText = props.placeholderText, _b = props.dateFormat, dateFormat = _b === void 0 ? "HH:mm" : _b, disabled = props.disabled, _c = props.width, width = _c === void 0 ? "100%" : _c, _d = props.disableToday, disableToday = _d === void 0 ? false : _d, _e = props.size, size = _e === void 0 ? "md" : _e;
54
+ var _f = (0, react_2.useDisclosure)(), isOpen = _f.isOpen, onOpen = _f.onOpen, onClose = _f.onClose;
55
55
  var popoverRef = (0, react_1.useRef)(null);
56
56
  var triggerRef = (0, react_1.useRef)(null);
57
57
  var inputWrapperRef = (0, react_1.useRef)(null);
58
58
  var today = new Date();
59
59
  var tomorrow = (0, date_fns_1.addDays)(today, 1);
60
+ var sizeKey = typeof size === "string" ? size : "md";
60
61
  var selectedDate = ((_a = props.value) !== null && _a !== void 0 ? _a : props.selectedDate);
61
- var _f = (0, react_1.useState)(selectedDate ? new Date(selectedDate) : null), tempDate = _f[0], setTempDate = _f[1];
62
+ var _g = (0, react_1.useState)(selectedDate ? new Date(selectedDate) : null), tempDate = _g[0], setTempDate = _g[1];
62
63
  (0, react_1.useEffect)(function () {
63
64
  setTempDate(selectedDate ? new Date(selectedDate) : null);
64
65
  }, [selectedDate]);
@@ -114,7 +115,7 @@ var TimeOnlyPicker = function (props) {
114
115
  }, dateFormat: dateFormat, disabled: disabled, placeholder: placeholder, onFocus: function () {
115
116
  if (!disabled && !isOpen)
116
117
  onOpen();
117
- }, error: error })))),
118
+ }, error: error, size: sizeKey })))),
118
119
  react_1.default.createElement(react_2.PopoverContent, { width: "auto", p: 4, ref: popoverRef, boxShadow: "lg" },
119
120
  react_1.default.createElement(react_2.PopoverBody, null,
120
121
  react_1.default.createElement(TimePicker_1.default, { date: resolvedTempDate, dateFormat: dateFormat, onChange: function (updatedDate) {
@@ -8,6 +8,7 @@ interface TimePickerInputProps {
8
8
  onFocus?: () => void;
9
9
  onBlur?: () => void;
10
10
  error?: boolean;
11
+ size?: "xs" | "sm" | "md" | "lg";
11
12
  }
12
13
  export declare const TimePickerInput: React.FC<TimePickerInputProps>;
13
14
  export {};
@@ -39,6 +39,7 @@ var react_2 = require("@chakra-ui/react");
39
39
  var date_fns_1 = require("date-fns");
40
40
  var lucide_react_1 = require("lucide-react");
41
41
  var useCustomTheme_1 = require("../../Theme/useCustomTheme");
42
+ var textInputIconSize_1 = require("../Input/textInputIconSize");
42
43
  var sanitizeDigits = function (input) { return input.replace(/\D/g, "").slice(0, 4); };
43
44
  var adjustDigits = function (digits, is12Hour) {
44
45
  var result = sanitizeDigits(digits);
@@ -125,18 +126,21 @@ var formatToPlaceholder = function (formatStr) {
125
126
  return formatStr.replace(/h{1,2}/gi, "HH").replace(/m{1,2}/gi, "mm").replace(/a{1,2}/gi, "AM");
126
127
  };
127
128
  var TimePickerInput = function (_a) {
128
- 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, error = _a.error;
129
+ 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, error = _a.error, _c = _a.size, size = _c === void 0 ? "md" : _c;
129
130
  var theme = (0, useCustomTheme_1.useCustomTheme)();
131
+ var sizeKey = typeof size === "string" ? size : "md";
132
+ var iconPx = (0, textInputIconSize_1.getTextInputIconSizePx)(sizeKey);
133
+ var iconWrapperSx = (0, textInputIconSize_1.getTextInputIconWrapperSx)(sizeKey);
130
134
  var inputRef = (0, react_1.useRef)(null);
131
- var _c = (0, react_1.useState)(""), digits = _c[0], setDigits = _c[1];
135
+ var _d = (0, react_1.useState)(""), digits = _d[0], setDigits = _d[1];
132
136
  var digitsRef = (0, react_1.useRef)("");
133
- var _d = (0, react_1.useState)(false), setIsFocused = _d[1];
137
+ var _e = (0, react_1.useState)(false), setIsFocused = _e[1];
134
138
  var isFocusedRef = (0, react_1.useRef)(false);
135
- var _e = (0, react_1.useState)("hour"), setActiveSegment = _e[1];
139
+ var _f = (0, react_1.useState)("hour"), setActiveSegment = _f[1];
136
140
  var is12Hour = (0, react_1.useMemo)(function () { return /h{1,2}/i.test(dateFormat) && !/H{1,2}/.test(dateFormat); }, [dateFormat]);
137
141
  var placeholderText = (0, react_1.useMemo)(function () { return placeholder || formatToPlaceholder(dateFormat); }, [placeholder, dateFormat]);
138
142
  var ampmRef = (0, react_1.useRef)("AM");
139
- var _f = (0, react_1.useState)("AM"), ampm = _f[0], setAmpm = _f[1];
143
+ var _g = (0, react_1.useState)("AM"), ampm = _g[0], setAmpm = _g[1];
140
144
  var setInputValueAndCaret = (0, react_1.useCallback)(function (formatted, caretDigitIndex) {
141
145
  requestAnimationFrame(function () {
142
146
  var el = inputRef.current;
@@ -434,9 +438,10 @@ var TimePickerInput = function (_a) {
434
438
  inputRef.current.value = is12Hour && formatted ? "".concat(formatted, " ").concat(ampm) : formatted;
435
439
  }
436
440
  }, [digits, ampm, is12Hour]);
437
- return (react_1.default.createElement(react_2.InputGroup, null,
438
- 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", isInvalid: error }),
439
- react_1.default.createElement(react_2.InputRightElement, { pointerEvents: "none" },
440
- react_1.default.createElement(lucide_react_1.ClockIcon, { size: 18, color: theme.colors.gray[500] }))));
441
+ return (react_1.default.createElement(react_2.InputGroup, { size: sizeKey },
442
+ 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", isInvalid: error, size: sizeKey }),
443
+ react_1.default.createElement(react_2.InputRightElement, { pointerEvents: "none", height: "100%", display: "flex", alignItems: "center" },
444
+ react_1.default.createElement(react_2.Box, { as: "span", sx: iconWrapperSx },
445
+ react_1.default.createElement(lucide_react_1.ClockIcon, { size: iconPx, color: theme.colors.gray[500] })))));
441
446
  };
442
447
  exports.TimePickerInput = TimePickerInput;
@@ -63,6 +63,7 @@ var react_2 = require("@chakra-ui/react");
63
63
  var ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
64
64
  var HelperText_1 = __importDefault(require("../Common/HelperText"));
65
65
  var FormLabel_1 = require("../Common/FormLabel");
66
+ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
66
67
  var getFlagEmoji = function (countryCode) {
67
68
  if (!countryCode)
68
69
  return "";
@@ -72,8 +73,11 @@ var getFlagEmoji = function (countryCode) {
72
73
  return String.fromCodePoint(127397 + char.charCodeAt(0));
73
74
  });
74
75
  };
76
+ var sizeToPt = { xs: 2, sm: -1, md: 2, lg: 4 };
77
+ var sizeToWidth = { xs: "3.5rem", sm: "3.8rem", md: "4rem", lg: "4rem" };
75
78
  var PhoneNumberInput = function (_a) {
76
79
  var _b = _a.size, size = _b === void 0 ? "md" : _b, value = _a.value, _c = _a.codeValueReturn, codeValueReturn = _c === void 0 ? true : _c, country = _a.country, countries = _a.countries, _d = _a.placeholder, placeholder = _d === void 0 ? "Enter phone number" : _d, onChange = _a.onChange, inputId = _a.inputId, selectId = _a.selectId, error = _a.error, errorMessage = _a.errorMessage, helperText = _a.helperText, label = _a.label, id = _a.id, _e = _a.width, width = _e === void 0 ? "100%" : _e, isInformation = _a.isInformation, informationMessage = _a.informationMessage, isRequired = _a.isRequired, onBlur = _a.onBlur, onFocus = _a.onFocus, isReadOnly = _a.isReadOnly, height = _a.height, autoComplete = _a.autoComplete, _f = _a.showCountrySelect, showCountrySelect = _f === void 0 ? true : _f, ref = _a.ref, name = _a.name, minW = _a.minW, maxW = _a.maxW, rest = __rest(_a, ["size", "value", "codeValueReturn", "country", "countries", "placeholder", "onChange", "inputId", "selectId", "error", "errorMessage", "helperText", "label", "id", "width", "isInformation", "informationMessage", "isRequired", "onBlur", "onFocus", "isReadOnly", "height", "autoComplete", "showCountrySelect", "ref", "name", "minW", "maxW"]);
80
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
77
81
  var getCountryTelCode = (0, react_1.useCallback)(function (countryCode) {
78
82
  var _a;
79
83
  if (!countryCode)
@@ -121,9 +125,9 @@ var PhoneNumberInput = function (_a) {
121
125
  return (react_1.default.createElement(react_2.FormControl, { w: width, minW: minW, maxW: maxW },
122
126
  label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, id: id, isInformation: isInformation, informationMessage: informationMessage, isRequired: isRequired })),
123
127
  react_1.default.createElement(react_2.InputGroup, __assign({ size: size }, rest),
124
- react_1.default.createElement(react_2.InputLeftElement, { width: showCountrySelect ? "4rem" : "2rem", height: "100%" },
128
+ react_1.default.createElement(react_2.InputLeftElement, { width: showCountrySelect ? "3rem" : "2rem", height: "100%" },
125
129
  showCountrySelect && react_1.default.createElement(react_1.default.Fragment, null,
126
- react_1.default.createElement(react_2.Select, { position: "absolute", top: "0", left: "0", height: "100%", id: selectId, width: "4rem", opacity: 0, zIndex: 1, value: selectedCountry, onChange: handleCountryChange, lineHeight: "1.5rem" },
130
+ react_1.default.createElement(react_2.Select, { position: "absolute", top: "0", left: "0", height: "100%", id: selectId, width: sizeToWidth[size], opacity: 0, zIndex: 1, value: selectedCountry, onChange: handleCountryChange, size: size, pt: sizeToPt[size], iconColor: theme.colors.gray[500] },
127
131
  react_1.default.createElement("option", { value: "" }, "Select Country"),
128
132
  countries.map(function (option) { return (react_1.default.createElement("option", { key: option.code, value: option.code }, option.country)); }))),
129
133
  react_1.default.createElement(react_2.Flex, { pl: 2, width: "100%", alignItems: "center", justifyContent: "space-between" }, selectedCountry ? (react_1.default.createElement(react_2.Box, { fontSize: "1.2rem" }, getFlagEmoji(selectedCountry))) : (react_1.default.createElement(react_2.Icon, { viewBox: "0 0 24 24", boxSize: "1rem" },
@@ -60,17 +60,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
60
60
  Object.defineProperty(exports, "__esModule", { value: true });
61
61
  var react_1 = __importStar(require("react"));
62
62
  var react_2 = require("@chakra-ui/react");
63
+ var textInputIconSize_1 = require("./textInputIconSize");
63
64
  var FormLabel_1 = require("../Common/FormLabel");
64
65
  var HelperText_1 = __importDefault(require("../Common/HelperText"));
65
66
  var ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
67
+ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
66
68
  var TextInput = (0, react_1.forwardRef)(function (_a, ref) {
67
69
  var label = _a.label, _b = _a.type, type = _b === void 0 ? "text" : _b, id = _a.id, name = _a.name, onChange = _a.onChange, onBlur = _a.onBlur, onFocus = _a.onFocus, _c = _a.isDisabled, isDisabled = _c === void 0 ? false : _c, _d = _a.isReadOnly, isReadOnly = _d === void 0 ? false : _d, _e = _a.isRequired, isRequired = _e === void 0 ? false : _e, value = _a.value, _f = _a.placeholder, placeholder = _f === void 0 ? "Placeholder" : _f, _g = _a.width, width = _g === void 0 ? "100%" : _g, height = _a.height, error = _a.error, errorMessage = _a.errorMessage, helperText = _a.helperText, onRightIconclick = _a.onRightIconclick, inputRightIcon = _a.inputRightIcon, inputLeftIcon = _a.inputLeftIcon, onLeftIconClick = _a.onLeftIconClick, inputGroupStyle = _a.inputGroupStyle, inputStyle = _a.inputStyle, _h = _a.size, size = _h === void 0 ? "md" : _h, _j = _a.isInformation, isInformation = _j === void 0 ? false : _j, informationMessage = _a.informationMessage, leftElementStyle = _a.leftElementStyle, rightElementStyle = _a.rightElementStyle, autoComplete = _a.autoComplete, minW = _a.minW, maxW = _a.maxW, props = __rest(_a, ["label", "type", "id", "name", "onChange", "onBlur", "onFocus", "isDisabled", "isReadOnly", "isRequired", "value", "placeholder", "width", "height", "error", "errorMessage", "helperText", "onRightIconclick", "inputRightIcon", "inputLeftIcon", "onLeftIconClick", "inputGroupStyle", "inputStyle", "size", "isInformation", "informationMessage", "leftElementStyle", "rightElementStyle", "autoComplete", "minW", "maxW"]);
70
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
71
+ var sizeKey = typeof size === "string" ? size : "md";
72
+ var iconScaleSx = (0, textInputIconSize_1.getTextInputIconWrapperSx)(sizeKey);
68
73
  return (react_1.default.createElement(react_2.FormControl, { w: width, minW: minW, maxW: maxW },
69
74
  label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, id: id, isInformation: isInformation, informationMessage: informationMessage, isRequired: isRequired })),
70
75
  react_1.default.createElement(react_2.InputGroup, { style: inputGroupStyle, size: size, height: height },
71
- inputLeftIcon && (react_1.default.createElement(react_2.InputLeftElement, __assign({ onClick: onLeftIconClick, pointerEvents: onLeftIconClick ? "auto" : "none" }, leftElementStyle, { height: "100%", display: "flex", alignItems: "center" }), inputLeftIcon)),
76
+ inputLeftIcon && (react_1.default.createElement(react_2.InputLeftElement, __assign({ onClick: onLeftIconClick, pointerEvents: onLeftIconClick ? "auto" : "none" }, leftElementStyle, { height: "100%", display: "flex", alignItems: "center" }),
77
+ react_1.default.createElement(react_2.Box, { as: "span", sx: iconScaleSx, color: theme.colors.gray[500] }, inputLeftIcon))),
72
78
  react_1.default.createElement(react_2.Input, __assign({ type: type, placeholder: placeholder, onChange: onChange, onBlur: onBlur, onFocus: onFocus, value: value, isDisabled: isDisabled, isReadOnly: isReadOnly, id: id, name: name, size: size }, (height != null && { height: height }), { isInvalid: error, ref: ref, autoComplete: autoComplete }, inputStyle, props)),
73
- inputRightIcon && (react_1.default.createElement(react_2.InputRightElement, __assign({ onClick: onRightIconclick, pointerEvents: onRightIconclick ? "auto" : "none" }, rightElementStyle, { height: "100%", display: "flex", alignItems: "center" }), inputRightIcon))),
79
+ inputRightIcon && (react_1.default.createElement(react_2.InputRightElement, __assign({ onClick: onRightIconclick, pointerEvents: onRightIconclick ? "auto" : "none" }, rightElementStyle, { height: "100%", display: "flex", alignItems: "center" }),
80
+ react_1.default.createElement(react_2.Box, { as: "span", sx: iconScaleSx }, inputRightIcon)))),
74
81
  error && react_1.default.createElement(ErrorMessage_1.default, { errorMessage: errorMessage }),
75
82
  helperText && !error && react_1.default.createElement(HelperText_1.default, { helperText: helperText })));
76
83
  });
@@ -0,0 +1,10 @@
1
+ import type { SystemStyleObject } from "@chakra-ui/styled-system";
2
+ /**
3
+ * Returns icon target width/height in px for a Chakra `Input` / `InputGroup` `size`.
4
+ */
5
+ export declare function getTextInputIconSizePx(size: string | undefined): number;
6
+ /**
7
+ * Scales any SVG in the icon slot (e.g. Lucide) to match field size; plain `fontSize` does not
8
+ * affect them because they set explicit width/height.
9
+ */
10
+ export declare function getTextInputIconWrapperSx(size: string | undefined): SystemStyleObject;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTextInputIconSizePx = getTextInputIconSizePx;
4
+ exports.getTextInputIconWrapperSx = getTextInputIconWrapperSx;
5
+ /** Pixels: aligned with `Input` field density (Chakra `sizes.6`–`12` and typical Lucide use). */
6
+ var TEXT_INPUT_ICON_PX = {
7
+ xs: 14,
8
+ sm: 16,
9
+ md: 18,
10
+ lg: 20,
11
+ xl: 24,
12
+ };
13
+ /**
14
+ * Returns icon target width/height in px for a Chakra `Input` / `InputGroup` `size`.
15
+ */
16
+ function getTextInputIconSizePx(size) {
17
+ var _a;
18
+ if (!size)
19
+ return TEXT_INPUT_ICON_PX.md;
20
+ return (_a = TEXT_INPUT_ICON_PX[size]) !== null && _a !== void 0 ? _a : TEXT_INPUT_ICON_PX.md;
21
+ }
22
+ /**
23
+ * Scales any SVG in the icon slot (e.g. Lucide) to match field size; plain `fontSize` does not
24
+ * affect them because they set explicit width/height.
25
+ */
26
+ function getTextInputIconWrapperSx(size) {
27
+ var px = getTextInputIconSizePx(size);
28
+ return {
29
+ display: "inline-flex",
30
+ alignItems: "center",
31
+ justifyContent: "center",
32
+ lineHeight: 0,
33
+ flexShrink: 0,
34
+ // Override Lucide/inline width on SVG; cover direct or nested (e.g. one wrapper) icons
35
+ "& > svg, & > * svg, & svg": {
36
+ width: "".concat(px, "px !important"),
37
+ height: "".concat(px, "px !important"),
38
+ },
39
+ };
40
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var textInputIconSize_1 = require("./textInputIconSize");
4
+ describe("getTextInputIconSizePx", function () {
5
+ it("maps Chakra input sizes to increasing pixel values", function () {
6
+ var xs = (0, textInputIconSize_1.getTextInputIconSizePx)("xs");
7
+ var sm = (0, textInputIconSize_1.getTextInputIconSizePx)("sm");
8
+ var md = (0, textInputIconSize_1.getTextInputIconSizePx)("md");
9
+ var lg = (0, textInputIconSize_1.getTextInputIconSizePx)("lg");
10
+ expect(xs).toBeLessThan(sm);
11
+ expect(sm).toBeLessThan(md);
12
+ expect(md).toBeLessThan(lg);
13
+ });
14
+ it("defaults to md for missing or unknown size", function () {
15
+ expect((0, textInputIconSize_1.getTextInputIconSizePx)(undefined)).toBe(18);
16
+ expect((0, textInputIconSize_1.getTextInputIconSizePx)("nope")).toBe(18);
17
+ });
18
+ });
19
+ describe("getTextInputIconWrapperSx", function () {
20
+ it("includes the resolved pixel size in svg rules for xs", function () {
21
+ var sx = (0, textInputIconSize_1.getTextInputIconWrapperSx)("xs");
22
+ var svg = sx["& > svg, & > * svg, & svg"];
23
+ expect(svg).toBeDefined();
24
+ expect(svg === null || svg === void 0 ? void 0 : svg.width).toContain("14");
25
+ expect(svg === null || svg === void 0 ? void 0 : svg.height).toContain("14");
26
+ });
27
+ });
@@ -61,8 +61,11 @@ var react_1 = __importStar(require("react"));
61
61
  var react_2 = require("@chakra-ui/react");
62
62
  var FormLabel_1 = require("../Common/FormLabel");
63
63
  var useCustomTheme_1 = require("../../Theme/useCustomTheme");
64
+ var searchSelectSize_1 = require("../SearchSelect/searchSelectSize");
64
65
  var ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
65
66
  var HelperText_1 = __importDefault(require("../Common/HelperText"));
67
+ var Tag_1 = __importDefault(require("../Tag/Tag"));
68
+ var lucide_react_1 = require("lucide-react");
66
69
  var generateUniqueId = (function () {
67
70
  var counter = 0;
68
71
  return function () {
@@ -72,11 +75,12 @@ var generateUniqueId = (function () {
72
75
  })();
73
76
  function MultiSelect(_a) {
74
77
  var _b, _c;
75
- var value = _a.value, onValueChange = _a.onValueChange, _d = _a.width, width = _d === void 0 ? "100%" : _d, _e = _a.label, label = _e === void 0 ? "label" : _e, _f = _a.isRequired, isRequired = _f === void 0 ? true : _f, _g = _a.isInformation, isInformation = _g === void 0 ? false : _g, _h = _a.informationMessage, informationMessage = _h === void 0 ? "" : _h, name = _a.name, id = _a.id, _j = _a.placeholderText, placeholderText = _j === void 0 ? "Type valid email and press enter" : _j, isDisabled = _a.isDisabled, isReadOnly = _a.isReadOnly, size = _a.size, inputStyle = _a.inputStyle, helperText = _a.helperText, error = _a.error, errorMessage = _a.errorMessage;
78
+ var value = _a.value, onValueChange = _a.onValueChange, _d = _a.width, width = _d === void 0 ? "100%" : _d, _e = _a.label, label = _e === void 0 ? "label" : _e, _f = _a.isRequired, isRequired = _f === void 0 ? true : _f, _g = _a.isInformation, isInformation = _g === void 0 ? false : _g, _h = _a.informationMessage, informationMessage = _h === void 0 ? "" : _h, name = _a.name, id = _a.id, _j = _a.placeholderText, placeholderText = _j === void 0 ? "Type valid email and press enter" : _j, isDisabled = _a.isDisabled, isReadOnly = _a.isReadOnly, _k = _a.size, size = _k === void 0 ? "md" : _k, inputStyle = _a.inputStyle, helperText = _a.helperText, error = _a.error, errorMessage = _a.errorMessage;
76
79
  var theme = (0, useCustomTheme_1.useCustomTheme)();
77
- var _k = (0, react_1.useState)(value), options = _k[0], setOptions = _k[1];
78
- var _l = (0, react_1.useState)(""), inputValue = _l[0], setInputValue = _l[1];
79
- var _m = (0, react_1.useState)(""), localError = _m[0], setLocalError = _m[1];
80
+ var s = (0, searchSelectSize_1.getSearchSelectSizeStyles)((size || "md"));
81
+ var _l = (0, react_1.useState)(value), options = _l[0], setOptions = _l[1];
82
+ var _m = (0, react_1.useState)(""), inputValue = _m[0], setInputValue = _m[1];
83
+ var _o = (0, react_1.useState)(""), localError = _o[0], setLocalError = _o[1];
80
84
  var inputRef = (0, react_1.useRef)(null);
81
85
  (0, react_1.useEffect)(function () {
82
86
  setOptions(value);
@@ -117,9 +121,9 @@ function MultiSelect(_a) {
117
121
  };
118
122
  return (react_1.default.createElement(react_2.Box, { width: width },
119
123
  label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage })),
120
- react_1.default.createElement(react_2.Flex, { wrap: "wrap", gap: 2, align: "center", px: 2, border: "1px solid", borderColor: error || localError
124
+ react_1.default.createElement(react_2.Flex, { wrap: "wrap", gap: s.gap, align: "center", px: s.px, border: "1px solid", borderColor: error || localError
121
125
  ? theme.colors.red[500]
122
- : theme.colors.gray[300], borderRadius: "sm", bg: theme.colors.white, minH: "42px", _focusWithin: {
126
+ : theme.colors.gray[300], borderRadius: "sm", bg: theme.colors.white, minH: s.minH, _focusWithin: {
123
127
  borderColor: error || localError
124
128
  ? theme.colors.red[500]
125
129
  : theme.colors.primary[500],
@@ -128,10 +132,8 @@ function MultiSelect(_a) {
128
132
  ? (_b = theme.colors.boxShadow) === null || _b === void 0 ? void 0 : _b.error
129
133
  : (_c = theme.colors.boxShadow) === null || _c === void 0 ? void 0 : _c.primary),
130
134
  } },
131
- options.map(function (option) { return (react_1.default.createElement(react_2.Tag, { key: option.id, size: "md", borderRadius: "full", variant: "subtle", colorScheme: "primary" },
132
- react_1.default.createElement(react_2.TagLabel, null, option.label),
133
- react_1.default.createElement(react_2.TagCloseButton, { onClick: function () { return handleRemove(option); } }))); }),
134
- react_1.default.createElement(react_2.Input, { ref: inputRef, type: "text", value: inputValue, isDisabled: isDisabled, isReadOnly: isReadOnly, id: id, name: name, size: size, variant: "unstyled", flex: "1", style: __assign(__assign({}, inputStyle), { backgroundColor: "transparent", fontWeight: 500, color: theme.colors.gray[700], fontSize: 15, letterSpacing: 0.3 }), onChange: handleInputChange, onKeyDown: handleKeyDown, placeholder: options.length === 0 ? placeholderText : "" })),
135
+ options.map(function (option) { return (react_1.default.createElement(Tag_1.default, { key: option.id, size: s.tagSize, colorScheme: "primary", label: option.label, onIconClick: function () { return handleRemove(option); }, icon: lucide_react_1.X })); }),
136
+ react_1.default.createElement(react_2.Input, { ref: inputRef, type: "text", value: inputValue, isDisabled: isDisabled, isReadOnly: isReadOnly, id: id, name: name, size: size, variant: "unstyled", h: s.fieldHeight, minH: s.fieldHeight, fontSize: s.fieldFontSize, fontWeight: "500", color: theme.colors.gray[700], letterSpacing: "0.02em", flex: "1", minW: 0, style: __assign({ backgroundColor: "transparent" }, inputStyle), onChange: handleInputChange, onKeyDown: handleKeyDown, placeholder: options.length === 0 ? placeholderText : "" })),
135
137
  (error || localError) && (react_1.default.createElement(ErrorMessage_1.default, { errorMessage: localError || errorMessage })),
136
138
  helperText && !error && react_1.default.createElement(HelperText_1.default, { helperText: helperText })));
137
139
  }
@@ -12,7 +12,7 @@ export type MultiSelectProps = {
12
12
  isDisabled?: boolean;
13
13
  isReadOnly?: boolean;
14
14
  error?: boolean;
15
- size?: string;
15
+ size?: "xs" | "sm" | "md" | "lg";
16
16
  inputStyle?: {};
17
17
  errorMessage?: string;
18
18
  helperText?: string;
@@ -66,6 +66,7 @@ var ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
66
66
  var HelperText_1 = __importDefault(require("../Common/HelperText"));
67
67
  var ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
68
68
  var SelectTruncatedLabel_1 = __importDefault(require("./SelectTruncatedLabel"));
69
+ var searchSelectSize_1 = require("./searchSelectSize");
69
70
  var normalizeSingleValue = function (val) {
70
71
  if (typeof val === "object" && val !== null && "id" in val && "label" in val) {
71
72
  return val;
@@ -80,21 +81,23 @@ var normalizeMultiValue = function (val) {
80
81
  };
81
82
  var SearchSelect = function (_a) {
82
83
  var _b, _c, _d, _e, _f, _g, _h, _j;
83
- var id = _a.id, label = _a.label, options = _a.options, onSelect = _a.onSelect, onSearch = _a.onSearch, _k = _a.isOptionLoading, isOptionLoading = _k === void 0 ? false : _k, _l = _a.isLoading, isLoading = _l === void 0 ? false : _l, _m = _a.loadingText, loadingText = _m === void 0 ? "Loading..." : _m, _o = _a.placeholder, placeholder = _o === void 0 ? "Select" : _o, value = _a.value, _p = _a.searchQuery, searchQuery = _p === void 0 ? "" : _p, _q = _a.isMultiple, isMultiple = _q === void 0 ? false : _q, _r = _a.isRequired, isRequired = _r === void 0 ? false : _r, _s = _a.error, error = _s === void 0 ? false : _s, errorMessage = _a.errorMessage, helperText = _a.helperText, _t = _a.width, width = _t === void 0 ? "100%" : _t, _u = _a.height, height = _u === void 0 ? "2.75rem" : _u, _v = _a.size, size = _v === void 0 ? "md" : _v, chip = _a.chip, information = _a.information, rightIcon = _a.rightIcon, addNew = _a.addNew, _w = _a.isSelectAll, isSelectAll = _w === void 0 ? false : _w, pagination = _a.pagination, insideSelect = _a.insideSelect, isRemoveAllIcon = _a.isRemoveAllIcon;
84
- var _x = (0, react_1.useState)(searchQuery), inputValue = _x[0], setInputValue = _x[1];
85
- var _y = (0, react_1.useState)(false), isOpen = _y[0], setIsOpen = _y[1];
86
- var _z = (0, react_1.useState)(true), hasMore = _z[0], setHasMore = _z[1];
84
+ var id = _a.id, label = _a.label, options = _a.options, onSelect = _a.onSelect, onSearch = _a.onSearch, _k = _a.isOptionLoading, isOptionLoading = _k === void 0 ? false : _k, _l = _a.isLoading, isLoading = _l === void 0 ? false : _l, _m = _a.loadingText, loadingText = _m === void 0 ? "Loading..." : _m, _o = _a.placeholder, placeholder = _o === void 0 ? "Select" : _o, value = _a.value, _p = _a.searchQuery, searchQuery = _p === void 0 ? "" : _p, _q = _a.isMultiple, isMultiple = _q === void 0 ? false : _q, _r = _a.isRequired, isRequired = _r === void 0 ? false : _r, _s = _a.error, error = _s === void 0 ? false : _s, errorMessage = _a.errorMessage, helperText = _a.helperText, _t = _a.width, width = _t === void 0 ? "100%" : _t, height = _a.height, _u = _a.size, size = _u === void 0 ? "md" : _u, chip = _a.chip, information = _a.information, rightIcon = _a.rightIcon, addNew = _a.addNew, _v = _a.isSelectAll, isSelectAll = _v === void 0 ? false : _v, pagination = _a.pagination, insideSelect = _a.insideSelect, isRemoveAllIcon = _a.isRemoveAllIcon;
85
+ var s = (0, searchSelectSize_1.getSearchSelectSizeStyles)((size || "md"));
86
+ var insideSelectBoxHeight = height !== null && height !== void 0 ? height : s.insideSelectDefaultHeight;
87
+ var _w = (0, react_1.useState)(searchQuery), inputValue = _w[0], setInputValue = _w[1];
88
+ var _x = (0, react_1.useState)(false), isOpen = _x[0], setIsOpen = _x[1];
89
+ var _y = (0, react_1.useState)(true), hasMore = _y[0], setHasMore = _y[1];
87
90
  var inputRef = (0, react_1.useRef)(null);
88
91
  var containerRef = (0, react_1.useRef)(null);
89
92
  var scrollTimeoutRef = (0, react_1.useRef)(null);
90
- var _0 = (0, react_1.useState)(false), focused = _0[0], setFocused = _0[1];
91
- var _1 = (0, react_1.useState)(false), customSelectOpen = _1[0], setCustomSelectOpen = _1[1];
93
+ var _z = (0, react_1.useState)(false), focused = _z[0], setFocused = _z[1];
94
+ var _0 = (0, react_1.useState)(false), customSelectOpen = _0[0], setCustomSelectOpen = _0[1];
92
95
  var customSelectRef = (0, react_1.useRef)(null);
93
- var _2 = (0, react_1.useState)({
96
+ var _1 = (0, react_1.useState)({
94
97
  top: 0,
95
98
  left: 0,
96
99
  width: 0,
97
- }), customSelectPos = _2[0], setCustomSelectPos = _2[1];
100
+ }), customSelectPos = _1[0], setCustomSelectPos = _1[1];
98
101
  var theme = (0, useCustomTheme_1.useCustomTheme)();
99
102
  (0, react_2.useOutsideClick)({
100
103
  ref: containerRef,
@@ -220,7 +223,7 @@ var SearchSelect = function (_a) {
220
223
  return (react_1.default.createElement(react_2.Box, { ref: containerRef, width: width, position: "relative" },
221
224
  label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, id: id, isRequired: isRequired, isInformation: information === null || information === void 0 ? void 0 : information.isInformation, informationMessage: information === null || information === void 0 ? void 0 : information.informationMessage })),
222
225
  react_1.default.createElement(react_2.InputGroup, { size: size },
223
- react_1.default.createElement(react_2.Box, { as: "div", w: "100%", minH: "2.85rem", px: 3, pr: "2rem", position: "relative", display: "flex", alignItems: "center", flexWrap: "wrap", gap: "0.375rem", border: "0.063rem solid", borderColor: error
226
+ react_1.default.createElement(react_2.Box, { as: "div", w: "100%", minH: s.minH, px: s.px, pr: s.pr, position: "relative", display: "flex", alignItems: "center", flexWrap: "wrap", gap: s.gap, border: "0.063rem solid", borderColor: error
224
227
  ? theme.colors.semantic.error[500]
225
228
  : focused
226
229
  ? theme.colors.primary[500]
@@ -231,12 +234,12 @@ var SearchSelect = function (_a) {
231
234
  : error
232
235
  ? "0 0 0 0.125rem ".concat((_f = theme.colors.boxShadow) === null || _f === void 0 ? void 0 : _f.error)
233
236
  : "none", transition: "box-shadow 0.2s, border-color 0.2s", onClick: function () { return setIsOpen(true); } },
234
- insideSelect && (react_1.default.createElement(react_2.Box, { position: "relative", ref: customSelectRef, backgroundColor: theme.colors.gray[200], ml: "-0.75rem", h: "-webkit-fill-available", borderRadius: "0.25rem 0 0 0.25rem", onClick: function () { return setCustomSelectOpen(function (prev) { return !prev; }); } },
235
- react_1.default.createElement(react_2.Box, { minW: "5rem", cursor: "pointer", display: "flex", justifyContent: "space-between", alignItems: "center", width: insideSelect.width, height: height, pl: "0.5rem", pr: "0.5rem" },
236
- react_1.default.createElement(SelectTruncatedLabel_1.default, { label: (_h = (_g = insideSelect === null || insideSelect === void 0 ? void 0 : insideSelect.value) === null || _g === void 0 ? void 0 : _g.label) !== null && _h !== void 0 ? _h : "", maxWidth: (insideSelect === null || insideSelect === void 0 ? void 0 : insideSelect.width) || "6rem" }),
237
- customSelectOpen ? react_1.default.createElement(lucide_react_1.ChevronUp, { size: 16 }) : react_1.default.createElement(lucide_react_1.ChevronDown, { size: 16 })),
237
+ insideSelect && (react_1.default.createElement(react_2.Box, { position: "relative", ref: customSelectRef, backgroundColor: theme.colors.gray[200], ml: s.insideSelectMarginLeft, h: "-webkit-fill-available", borderRadius: "0.25rem 0 0 0.25rem", onClick: function () { return setCustomSelectOpen(function (prev) { return !prev; }); } },
238
+ react_1.default.createElement(react_2.Box, { minW: "5rem", cursor: "pointer", display: "flex", justifyContent: "space-between", alignItems: "center", width: insideSelect.width, height: insideSelectBoxHeight, pl: "0.5rem", pr: "0.5rem" },
239
+ react_1.default.createElement(SelectTruncatedLabel_1.default, { label: (_h = (_g = insideSelect === null || insideSelect === void 0 ? void 0 : insideSelect.value) === null || _g === void 0 ? void 0 : _g.label) !== null && _h !== void 0 ? _h : "", maxWidth: (insideSelect === null || insideSelect === void 0 ? void 0 : insideSelect.width) || "6rem", fontSize: s.fieldFontSize }),
240
+ customSelectOpen ? (react_1.default.createElement(lucide_react_1.ChevronUp, { size: s.chevronSize })) : (react_1.default.createElement(lucide_react_1.ChevronDown, { size: s.chevronSize }))),
238
241
  customSelectOpen && (react_1.default.createElement(react_2.Portal, null,
239
- react_1.default.createElement(react_2.Box, { id: "custom-select-portal", position: "absolute", top: "".concat(customSelectPos.top, "px"), left: "".concat(customSelectPos.left, "px"), zIndex: 1400, bg: theme.colors.white, border: "0.063rem solid", borderColor: theme.colors.gray[300], borderRadius: "md", boxShadow: "md", minW: "10rem", maxW: "38rem" }, (_j = insideSelect === null || insideSelect === void 0 ? void 0 : insideSelect.option) === null || _j === void 0 ? void 0 : _j.map(function (item) { return (react_1.default.createElement(react_2.Box, { key: item.id, display: "flex", alignItems: "center", height: "2.5rem", px: "0.75rem", fontSize: "sm", _hover: { bg: theme.colors.gray[100] }, cursor: "pointer", onClick: function (e) {
242
+ react_1.default.createElement(react_2.Box, { id: "custom-select-portal", position: "absolute", top: "".concat(customSelectPos.top, "px"), left: "".concat(customSelectPos.left, "px"), zIndex: 1400, bg: theme.colors.white, border: "0.063rem solid", borderColor: theme.colors.gray[300], borderRadius: "md", boxShadow: "md", minW: "10rem", maxW: "38rem" }, (_j = insideSelect === null || insideSelect === void 0 ? void 0 : insideSelect.option) === null || _j === void 0 ? void 0 : _j.map(function (item) { return (react_1.default.createElement(react_2.Box, { key: item.id, display: "flex", alignItems: "center", minH: s.optionRowMinH, px: "0.75rem", fontSize: s.dropdownTextFontSize, _hover: { bg: theme.colors.gray[100] }, cursor: "pointer", onClick: function (e) {
240
243
  e.stopPropagation();
241
244
  handleCustomSelect(item);
242
245
  } }, item.label)); })))))),
@@ -245,42 +248,42 @@ var SearchSelect = function (_a) {
245
248
  .slice(0, (chip === null || chip === void 0 ? void 0 : chip.maxChips) || selectedValues.length)
246
249
  .map(function (item) { return (react_1.default.createElement(Tag_1.default, { key: item.id, label: (chip === null || chip === void 0 ? void 0 : chip.maxText) && item.label.length > chip.maxText
247
250
  ? item.label.slice(0, chip.maxText) + "…"
248
- : item.label, onIconClick: (chip === null || chip === void 0 ? void 0 : chip.onClick) ? function () { return handleRemove(item === null || item === void 0 ? void 0 : item.id); } : undefined, icon: (chip === null || chip === void 0 ? void 0 : chip.onClick) ? lucide_react_1.CircleX : undefined, colorScheme: "gray", size: "sm" })); })
251
+ : item.label, onIconClick: (chip === null || chip === void 0 ? void 0 : chip.onClick) ? function () { return handleRemove(item === null || item === void 0 ? void 0 : item.id); } : undefined, icon: (chip === null || chip === void 0 ? void 0 : chip.onClick) ? lucide_react_1.CircleX : undefined, colorScheme: "gray", size: s.tagSize })); })
249
252
  : selectedValues.length === 1 &&
250
- !isOpen && (react_1.default.createElement(react_2.Box, { as: "button", type: "button", onClick: function () { return setIsOpen(true); }, fontSize: "sm", color: theme.colors.gray[800], background: "transparent", border: "none", cursor: "pointer", p: 0, display: "flex", alignItems: "center", flex: "1", minW: 0 },
251
- react_1.default.createElement(SelectTruncatedLabel_1.default, { label: String(selectedValues[0].label), maxWidth: "calc(100% - 2rem)" }))),
252
- (chip === null || chip === void 0 ? void 0 : chip.maxChips) && isMultiple && selectedValues.length > chip.maxChips && (react_1.default.createElement(Tag_1.default, { key: "extra-count", label: "+ ".concat(selectedValues.length - chip.maxChips), colorScheme: "gray", size: "sm" })),
253
- (isOpen || inputValue || !selectedValues.length) && (react_1.default.createElement(react_2.Input, { ref: inputRef, variant: "unstyled", flex: "1",
253
+ !isOpen && (react_1.default.createElement(react_2.Box, { as: "button", type: "button", onClick: function () { return setIsOpen(true); }, fontSize: s.fieldFontSize, color: theme.colors.gray[800], background: "transparent", border: "none", cursor: "pointer", p: 0, display: "flex", alignItems: "center", flex: "1", minW: 0 },
254
+ react_1.default.createElement(SelectTruncatedLabel_1.default, { label: String(selectedValues[0].label), maxWidth: "calc(100% - 2rem)", fontSize: s.fieldFontSize }))),
255
+ (chip === null || chip === void 0 ? void 0 : chip.maxChips) && isMultiple && selectedValues.length > chip.maxChips && (react_1.default.createElement(Tag_1.default, { key: "extra-count", label: "+ ".concat(selectedValues.length - chip.maxChips), colorScheme: "gray", size: s.tagSize })),
256
+ (isOpen || inputValue || !selectedValues.length) && (react_1.default.createElement(react_2.Input, { ref: inputRef, variant: "unstyled", size: size, h: s.fieldHeight, minH: s.fieldHeight, fontSize: s.fieldFontSize, flex: "1",
254
257
  // minW="5rem"
255
258
  minW: "0", value: inputValue, onChange: function (e) { return setInputValue(e.target.value); }, onFocus: function () {
256
259
  setFocused(true);
257
260
  setIsOpen(true);
258
261
  }, onBlur: function () { return setFocused(false); }, placeholder: selectedValues.length && !isOpen ? "" : placeholder })),
259
- react_1.default.createElement(react_2.Box, { position: "absolute", right: "0.75rem", top: "50%", transform: "translateY(-50%)", display: "flex", alignItems: "center", gap: 1 },
262
+ react_1.default.createElement(react_2.Box, { position: "absolute", right: s.rightOffset, top: "50%", transform: "translateY(-50%)", display: "flex", alignItems: "center", gap: 1 },
260
263
  isRemoveAllIcon && selectedValues.length > 0 && (react_1.default.createElement(ToolTip_1.default, { placement: "top", label: "Remove All", hasArrow: true, bg: theme.colors.gray[600], color: theme.colors.white, fontSize: "0.75rem" },
261
- react_1.default.createElement(react_2.IconButton, { icon: react_1.default.createElement(lucide_react_1.X, { size: 12, color: theme.colors.black }), "aria-label": "Clear all", variant: "ghost", size: "sm", onClick: handleClearAll, sx: {
264
+ react_1.default.createElement(react_2.IconButton, { icon: react_1.default.createElement(lucide_react_1.X, { size: s.clearIconSize, color: theme.colors.black }), "aria-label": "Clear all", variant: "ghost", size: s.iconButtonSize, onClick: handleClearAll, sx: {
262
265
  bg: "transparent",
263
266
  _hover: { bg: "transparent" },
264
267
  _active: { bg: "transparent" },
265
268
  _focus: { boxShadow: "none", bg: "transparent" },
266
269
  } }))),
267
- isLoading ? (react_1.default.createElement(react_2.Spinner, { size: "sm" })) : isValidIcon(rightIcon === null || rightIcon === void 0 ? void 0 : rightIcon.icon) ? (react_1.default.createElement(react_2.IconButton, { icon: rightIcon === null || rightIcon === void 0 ? void 0 : rightIcon.icon, "aria-label": "right-icon", variant: "ghost", size: "sm", onClick: rightIcon === null || rightIcon === void 0 ? void 0 : rightIcon.onClick })) : (react_1.default.createElement(react_2.Box, { as: "button", onClick: function (e) {
270
+ isLoading ? (react_1.default.createElement(react_2.Spinner, { size: s.spinnerSize })) : isValidIcon(rightIcon === null || rightIcon === void 0 ? void 0 : rightIcon.icon) ? (react_1.default.createElement(react_2.IconButton, { icon: rightIcon === null || rightIcon === void 0 ? void 0 : rightIcon.icon, "aria-label": "right-icon", variant: "ghost", size: s.iconButtonSize, onClick: rightIcon === null || rightIcon === void 0 ? void 0 : rightIcon.onClick })) : (react_1.default.createElement(react_2.Box, { as: "button", onClick: function (e) {
268
271
  e.preventDefault();
269
272
  e.stopPropagation();
270
273
  setIsOpen(function (prev) { return !prev; });
271
- }, "aria-label": "toggle-dropdown", display: "flex", alignItems: "center" }, isOpen ? react_1.default.createElement(lucide_react_1.ChevronUp, { size: 16 }) : react_1.default.createElement(lucide_react_1.ChevronDown, { size: 16 })))))),
274
+ }, "aria-label": "toggle-dropdown", display: "flex", alignItems: "center" }, isOpen ? (react_1.default.createElement(lucide_react_1.ChevronUp, { size: s.chevronSize })) : (react_1.default.createElement(lucide_react_1.ChevronDown, { size: s.chevronSize }))))))),
272
275
  isOpen && (react_1.default.createElement(react_2.Box, { position: "absolute", zIndex: 10, width: "100%", maxH: "20rem", borderWidth: 1, borderRadius: "sm", bg: theme.colors.white, boxShadow: "md", display: "flex", flexDirection: "column" },
273
- isMultiple && isSelectAll && (react_1.default.createElement(react_2.Box, { p: 2, px: 3, cursor: "pointer", onClick: handleSelectAll, display: "flex", alignItems: "center", gap: 2, borderBottom: "0.063rem solid ".concat(theme.colors.gray[100]) },
274
- react_1.default.createElement(react_2.Checkbox, { isChecked: allFilteredSelected, pointerEvents: "none" }),
275
- react_1.default.createElement(react_2.Text, { fontSize: "sm" }, allFilteredSelected ? "Unselect All" : "Select All"))),
276
- react_1.default.createElement(react_2.Box, { flex: "1", overflowY: "auto", onScroll: handleScroll, maxH: "15rem", borderBottom: "0.063rem solid", borderColor: theme.colors.gray[200] }, isOptionLoading ? (react_1.default.createElement(react_2.Box, { p: 3, display: "flex", alignItems: "center", gap: 2 },
277
- react_1.default.createElement(react_2.Spinner, { size: "sm" }),
278
- react_1.default.createElement(react_2.Text, { fontSize: "sm" }, loadingText))) : filteredOptions.length === 0 ? (react_1.default.createElement(react_2.Text, { p: 3, fontSize: "sm", color: theme.colors.gray[500] }, "No results found")) : (filteredOptions.map(function (option) { return (react_1.default.createElement(react_2.Box, { key: option.id, p: 2, px: 3, cursor: "pointer", bg: isSelected(option.id) ? theme.colors.gray[100] : "transparent", _hover: { bg: theme.colors.gray[50] }, onClick: function () { return handleSelect(option); }, display: "flex", alignItems: "center", gap: 2, borderBottom: "0.063rem solid ".concat(theme.colors.gray[100]) },
279
- isMultiple && (react_1.default.createElement(react_2.Checkbox, { isChecked: isSelected(option.id), pointerEvents: "none", colorScheme: "blue" })),
280
- option.view ? (react_1.default.createElement(react_1.default.Fragment, null, option.view)) : (react_1.default.createElement(react_2.Text, { fontSize: "sm" }, option.label)))); }))),
281
- (addNew === null || addNew === void 0 ? void 0 : addNew.enabled) && (react_1.default.createElement(react_2.Box, { p: 2, borderTop: "0.063rem solid", borderColor: theme.colors.gray[200], bg: theme.colors.white, display: "flex", alignItems: "center", gap: 2, cursor: "pointer", onClick: addNew.onClick, _hover: { bg: theme.colors.gray[50] } },
282
- addNew.icon || react_1.default.createElement(lucide_react_1.Plus, { size: 16 }),
283
- react_1.default.createElement(react_2.Text, { fontSize: "sm" }, addNew.text || "Add New"))))),
276
+ isMultiple && isSelectAll && (react_1.default.createElement(react_2.Box, { py: s.optionRowPy, px: 3, cursor: "pointer", onClick: handleSelectAll, display: "flex", alignItems: "center", gap: 2, borderBottom: "0.063rem solid ".concat(theme.colors.gray[100]) },
277
+ react_1.default.createElement(react_2.Checkbox, { isChecked: allFilteredSelected, pointerEvents: "none", size: s.checkboxSize }),
278
+ react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, allFilteredSelected ? "Unselect All" : "Select All"))),
279
+ react_1.default.createElement(react_2.Box, { flex: "1", overflowY: "auto", onScroll: handleScroll, maxH: "15rem", borderBottom: "0.063rem solid", borderColor: theme.colors.gray[200] }, isOptionLoading ? (react_1.default.createElement(react_2.Box, { py: s.optionRowPy, px: 3, display: "flex", alignItems: "center", gap: 2, minH: s.optionRowMinH },
280
+ react_1.default.createElement(react_2.Spinner, { size: s.spinnerSize }),
281
+ react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, loadingText))) : filteredOptions.length === 0 ? (react_1.default.createElement(react_2.Text, { p: 3, fontSize: s.dropdownTextFontSize, color: theme.colors.gray[500] }, "No results found")) : (filteredOptions.map(function (option) { return (react_1.default.createElement(react_2.Box, { key: option.id, py: s.optionRowPy, px: 3, minH: s.optionRowMinH, cursor: "pointer", bg: isSelected(option.id) ? theme.colors.gray[100] : "transparent", _hover: { bg: theme.colors.gray[50] }, onClick: function () { return handleSelect(option); }, display: "flex", alignItems: "center", gap: 2, borderBottom: "0.063rem solid ".concat(theme.colors.gray[100]) },
282
+ isMultiple && (react_1.default.createElement(react_2.Checkbox, { isChecked: isSelected(option.id), pointerEvents: "none", colorScheme: "blue", size: s.checkboxSize })),
283
+ option.view ? (react_1.default.createElement(react_1.default.Fragment, null, option.view)) : (react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, option.label)))); }))),
284
+ (addNew === null || addNew === void 0 ? void 0 : addNew.enabled) && (react_1.default.createElement(react_2.Box, { py: s.optionRowPy, px: 3, borderTop: "0.063rem solid", borderColor: theme.colors.gray[200], bg: theme.colors.white, display: "flex", alignItems: "center", gap: 2, minH: s.optionRowMinH, cursor: "pointer", onClick: addNew.onClick, _hover: { bg: theme.colors.gray[50] } },
285
+ addNew.icon || react_1.default.createElement(lucide_react_1.Plus, { size: s.addNewIconSize }),
286
+ react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, addNew.text || "Add New"))))),
284
287
  helperText && !error && react_1.default.createElement(HelperText_1.default, { helperText: helperText }),
285
288
  error && react_1.default.createElement(ErrorMessage_1.default, { errorMessage: errorMessage })));
286
289
  };
@@ -1,6 +1,7 @@
1
- import React from 'react';
2
- declare const SelectTruncatedLabel: ({ label, maxWidth, }: {
1
+ import { TextProps } from "@chakra-ui/react";
2
+ import React from "react";
3
+ declare const SelectTruncatedLabel: ({ label, maxWidth, fontSize, }: {
3
4
  label: string;
4
5
  maxWidth?: string;
5
- }) => React.JSX.Element;
6
+ } & Pick<TextProps, "fontSize">) => React.JSX.Element;
6
7
  export default SelectTruncatedLabel;
@@ -40,16 +40,16 @@ var react_1 = require("@chakra-ui/react");
40
40
  var react_2 = __importStar(require("react"));
41
41
  var ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
42
42
  var SelectTruncatedLabel = function (_a) {
43
- var label = _a.label, _b = _a.maxWidth, maxWidth = _b === void 0 ? "6rem" : _b;
43
+ var label = _a.label, _b = _a.maxWidth, maxWidth = _b === void 0 ? "6rem" : _b, _c = _a.fontSize, fontSize = _c === void 0 ? "sm" : _c;
44
44
  var textRef = (0, react_2.useRef)(null);
45
- var _c = (0, react_2.useState)(false), isOverflowing = _c[0], setIsOverflowing = _c[1];
45
+ var _d = (0, react_2.useState)(false), isOverflowing = _d[0], setIsOverflowing = _d[1];
46
46
  (0, react_2.useEffect)(function () {
47
47
  var el = textRef.current;
48
48
  if (el) {
49
49
  setIsOverflowing(el.scrollWidth > el.clientWidth);
50
50
  }
51
51
  }, [label, maxWidth]);
52
- var textElement = (react_2.default.createElement(react_1.Text, { ref: textRef, maxW: maxWidth, isTruncated: true, whiteSpace: "nowrap", fontWeight: 500, fontSize: "0.875rem", letterSpacing: "0.044rem" }, label));
52
+ var textElement = (react_2.default.createElement(react_1.Text, { ref: textRef, maxW: maxWidth, isTruncated: true, whiteSpace: "nowrap", fontWeight: 500, fontSize: fontSize, letterSpacing: "0.044rem" }, label));
53
53
  return isOverflowing ? react_2.default.createElement(ToolTip_1.default, { label: label, placement: "top" }, textElement) : textElement;
54
54
  };
55
55
  exports.default = SelectTruncatedLabel;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Layout tokens for SearchSelect so `size` matches Chakra input density (xs–lg).
3
+ */
4
+ export type SearchSelectControlSize = "xs" | "sm" | "md" | "lg";
5
+ export type SearchSelectSizeStyles = {
6
+ minH: string;
7
+ /** Horizontal padding of the main field (Chakra spacing scale or rem). */
8
+ px: number;
9
+ /** Right padding to clear the absolute-positioned action icons. */
10
+ pr: string;
11
+ /** Vertical gap for wrapped chips. */
12
+ gap: string;
13
+ chevronSize: number;
14
+ iconButtonSize: "xs" | "sm" | "md" | "lg";
15
+ tagSize: "sm" | "md" | "lg";
16
+ spinnerSize: "sm" | "md" | "lg" | "xl" | "xs";
17
+ /** Default height for the `insideSelect` trigger when `height` prop is omitted. */
18
+ insideSelectDefaultHeight: string;
19
+ rightOffset: string;
20
+ clearIconSize: number;
21
+ addNewIconSize: number;
22
+ /** Offset for the nested select segment (aligns with field padding). */
23
+ insideSelectMarginLeft: string;
24
+ /** “Select all” / option row text in the dropdown. */
25
+ dropdownTextFontSize: "xs" | "sm" | "md";
26
+ /** Min row height for main option list items. */
27
+ optionRowMinH: string;
28
+ optionRowPy: number;
29
+ /** Chakra `Checkbox` only supports sm | md | lg. */
30
+ checkboxSize: "sm" | "md" | "lg";
31
+ /**
32
+ * Chakra `Input` uses these font tokens per `size` (unstyled still needs explicit fontSize).
33
+ */
34
+ fieldFontSize: "xs" | "sm" | "md" | "lg";
35
+ /**
36
+ * Matches Chakra `Input` field height (`sizes.6`..`12`) so `unstyled` + `height: auto` does
37
+ * not prevent `size` from affecting the control.
38
+ */
39
+ fieldHeight: string;
40
+ };
41
+ /**
42
+ * Returns layout and child control tokens for a SearchSelect `size`.
43
+ */
44
+ export declare function getSearchSelectSizeStyles(size: SearchSelectControlSize): SearchSelectSizeStyles;
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSearchSelectSizeStyles = getSearchSelectSizeStyles;
4
+ var SIZE_STYLES = {
5
+ xs: {
6
+ minH: "1.5rem",
7
+ px: 2,
8
+ pr: "1.75rem",
9
+ gap: "0.25rem",
10
+ fieldFontSize: "xs",
11
+ fieldHeight: "1.5rem",
12
+ chevronSize: 14,
13
+ iconButtonSize: "xs",
14
+ tagSize: "sm",
15
+ spinnerSize: "sm",
16
+ insideSelectDefaultHeight: "1.5rem",
17
+ rightOffset: "0.5rem",
18
+ clearIconSize: 10,
19
+ addNewIconSize: 14,
20
+ insideSelectMarginLeft: "-0.5rem",
21
+ dropdownTextFontSize: "xs",
22
+ optionRowMinH: "1.5rem",
23
+ optionRowPy: 1.5,
24
+ checkboxSize: "sm",
25
+ },
26
+ sm: {
27
+ minH: "2rem",
28
+ px: 2.5,
29
+ pr: "1.85rem",
30
+ gap: "0.3rem",
31
+ fieldFontSize: "sm",
32
+ fieldHeight: "2rem",
33
+ chevronSize: 16,
34
+ iconButtonSize: "sm",
35
+ tagSize: "sm",
36
+ spinnerSize: "sm",
37
+ insideSelectDefaultHeight: "2rem",
38
+ rightOffset: "0.5rem",
39
+ clearIconSize: 12,
40
+ addNewIconSize: 16,
41
+ insideSelectMarginLeft: "-0.625rem",
42
+ dropdownTextFontSize: "sm",
43
+ optionRowMinH: "2rem",
44
+ optionRowPy: 2,
45
+ checkboxSize: "sm",
46
+ },
47
+ md: {
48
+ minH: "2.5rem",
49
+ px: 3,
50
+ pr: "2rem",
51
+ gap: "0.375rem",
52
+ fieldFontSize: "sm",
53
+ fieldHeight: "2.5rem",
54
+ chevronSize: 16,
55
+ iconButtonSize: "sm",
56
+ tagSize: "sm",
57
+ spinnerSize: "sm",
58
+ insideSelectDefaultHeight: "2.5rem",
59
+ rightOffset: "0.75rem",
60
+ clearIconSize: 12,
61
+ addNewIconSize: 16,
62
+ insideSelectMarginLeft: "-0.75rem",
63
+ dropdownTextFontSize: "sm",
64
+ optionRowMinH: "2.5rem",
65
+ optionRowPy: 2,
66
+ checkboxSize: "md",
67
+ },
68
+ lg: {
69
+ minH: "3rem",
70
+ px: 4,
71
+ pr: "2.25rem",
72
+ gap: "0.5rem",
73
+ fieldFontSize: "sm",
74
+ fieldHeight: "3rem",
75
+ chevronSize: 18,
76
+ iconButtonSize: "md",
77
+ tagSize: "md",
78
+ spinnerSize: "md",
79
+ insideSelectDefaultHeight: "3rem",
80
+ rightOffset: "0.75rem",
81
+ clearIconSize: 14,
82
+ addNewIconSize: 18,
83
+ insideSelectMarginLeft: "-0.875rem",
84
+ dropdownTextFontSize: "md",
85
+ optionRowMinH: "2.75rem",
86
+ optionRowPy: 2.5,
87
+ checkboxSize: "lg",
88
+ },
89
+ };
90
+ /**
91
+ * Returns layout and child control tokens for a SearchSelect `size`.
92
+ */
93
+ function getSearchSelectSizeStyles(size) {
94
+ var _a;
95
+ return (_a = SIZE_STYLES[size]) !== null && _a !== void 0 ? _a : SIZE_STYLES.md;
96
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var searchSelectSize_1 = require("./searchSelectSize");
4
+ describe("getSearchSelectSizeStyles", function () {
5
+ it.each(["xs", "sm", "md", "lg"])("returns minH for %s", function (sz) {
6
+ var t = (0, searchSelectSize_1.getSearchSelectSizeStyles)(sz);
7
+ expect(t.minH).toMatch(/rem$/);
8
+ expect(t.insideSelectDefaultHeight).toMatch(/rem$/);
9
+ });
10
+ it("xs is more compact than lg", function () {
11
+ var xs = (0, searchSelectSize_1.getSearchSelectSizeStyles)("xs");
12
+ var lg = (0, searchSelectSize_1.getSearchSelectSizeStyles)("lg");
13
+ var parse = function (h) { return parseFloat(h); };
14
+ expect(parse(xs.minH)).toBeLessThan(parse(lg.minH));
15
+ expect(parse(xs.insideSelectDefaultHeight)).toBeLessThan(parse(lg.insideSelectDefaultHeight));
16
+ });
17
+ it("uses md as fallback for unknown size keys (runtime map lookup)", function () {
18
+ var t = (0, searchSelectSize_1.getSearchSelectSizeStyles)("unknown");
19
+ var md = (0, searchSelectSize_1.getSearchSelectSizeStyles)("md");
20
+ expect(t).toEqual(md);
21
+ });
22
+ });
@@ -1,4 +1,15 @@
1
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
+ };
2
13
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
14
  if (k2 === undefined) k2 = k;
4
15
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -39,11 +50,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
50
  exports.default = Select;
40
51
  var react_1 = __importStar(require("react"));
41
52
  var react_2 = require("@chakra-ui/react");
53
+ var textInputIconSize_1 = require("../Input/textInputIconSize");
42
54
  var FormLabel_1 = require("../Common/FormLabel");
43
55
  var ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
44
56
  var HelperText_1 = __importDefault(require("../Common/HelperText"));
45
57
  function Select(_a) {
46
- var _b = _a.placeholder, placeholder = _b === void 0 ? "Select Option" : _b, _c = _a.size, size = _c === void 0 ? "md" : _c, _d = _a.variant, variant = _d === void 0 ? "outline" : _d, icon = _a.icon, onChange = _a.onChange, onBlur = _a.onBlur, onFocus = _a.onFocus, errorBorderColor = _a.errorBorderColor, isDisabled = _a.isDisabled, isReadOnly = _a.isReadOnly, _e = _a.isRequired, isRequired = _e === void 0 ? false : _e, _f = _a.value, value = _f === void 0 ? "" : _f, colorScheme = _a.colorScheme, label = _a.label, error = _a.error, errorMessage = _a.errorMessage, helperText = _a.helperText, _g = _a.options, options = _g === void 0 ? [] : _g, _h = _a.height, height = _h === void 0 ? "2.75rem" : _h, formControlStyle = _a.formControlStyle, _j = _a.isInformation, isInformation = _j === void 0 ? false : _j, informationMessage = _a.informationMessage, selectStyle = _a.selectStyle;
58
+ var _b = _a.placeholder, placeholder = _b === void 0 ? "Select Option" : _b, _c = _a.size, size = _c === void 0 ? "md" : _c, _d = _a.variant, variant = _d === void 0 ? "outline" : _d, icon = _a.icon, onChange = _a.onChange, onBlur = _a.onBlur, onFocus = _a.onFocus, errorBorderColor = _a.errorBorderColor, isDisabled = _a.isDisabled, isReadOnly = _a.isReadOnly, _e = _a.isRequired, isRequired = _e === void 0 ? false : _e, _f = _a.value, value = _f === void 0 ? "" : _f, colorScheme = _a.colorScheme, label = _a.label, error = _a.error, errorMessage = _a.errorMessage, helperText = _a.helperText, _g = _a.options, options = _g === void 0 ? [] : _g, height = _a.height, formControlStyle = _a.formControlStyle, _h = _a.isInformation, isInformation = _h === void 0 ? false : _h, informationMessage = _a.informationMessage, selectStyle = _a.selectStyle;
59
+ var sizeKey = typeof size === "string" ? size : "md";
60
+ var iconSizePx = (0, textInputIconSize_1.getTextInputIconSizePx)(sizeKey);
47
61
  var getOptionsList = (0, react_1.useCallback)(function () {
48
62
  if (!options.length)
49
63
  return react_1.default.createElement("option", { value: "" }, "No Options");
@@ -56,9 +70,9 @@ function Select(_a) {
56
70
  onChange(selectedOption);
57
71
  }
58
72
  };
59
- return (react_1.default.createElement(react_2.FormControl, { isInvalid: error, style: formControlStyle },
73
+ return (react_1.default.createElement(react_2.FormControl, { isInvalid: error, style: formControlStyle, size: size },
60
74
  label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage })),
61
- react_1.default.createElement(react_2.Select, { placeholder: placeholder, size: size, variant: variant, icon: icon, isInvalid: error, value: value, onChange: handleOnChange, onBlur: onBlur, onFocus: onFocus, isDisabled: isDisabled, isReadOnly: isReadOnly, colorScheme: colorScheme, errorBorderColor: errorBorderColor, style: selectStyle, minH: height }, getOptionsList()),
75
+ react_1.default.createElement(react_2.Select, __assign({ placeholder: placeholder, size: size, variant: variant, icon: icon, iconSize: "".concat(iconSizePx, "px"), isInvalid: error, value: value, onChange: handleOnChange, onBlur: onBlur, onFocus: onFocus, isDisabled: isDisabled, isReadOnly: isReadOnly, colorScheme: colorScheme, errorBorderColor: errorBorderColor, style: selectStyle }, (height != null && height !== "" ? { minH: height, h: height } : {})), getOptionsList()),
62
76
  error && react_1.default.createElement(ErrorMessage_1.default, { errorMessage: errorMessage }),
63
77
  helperText && !error && react_1.default.createElement(HelperText_1.default, { helperText: helperText })));
64
78
  }
@@ -9,7 +9,7 @@ var Tag = function (_a) {
9
9
  var label = _a.label, _b = _a.colorScheme, colorScheme = _b === void 0 ? "primary" : _b, _c = _a.variant, variant = _c === void 0 ? "solid" : _c, _d = _a.size, size = _d === void 0 ? "md" : _d, icon = _a.icon, onTagClick = _a.onTagClick, onIconClick = _a.onIconClick;
10
10
  return (react_1.default.createElement(react_2.Tag, { size: size, variant: variant, colorScheme: colorScheme, borderRadius: "full", cursor: "pointer", onClick: function () { return onTagClick === null || onTagClick === void 0 ? void 0 : onTagClick(); } },
11
11
  react_1.default.createElement(react_2.TagLabel, null, label),
12
- icon && (react_1.default.createElement(react_2.TagRightIcon, { as: icon, boxSize: "1em", ml: 1.5, cursor: onIconClick ? "pointer" : "default", onClick: function (e) {
12
+ icon && (react_1.default.createElement(react_2.TagRightIcon, { as: icon, boxSize: "1em", cursor: onIconClick ? "pointer" : "default", onClick: function (e) {
13
13
  e.stopPropagation();
14
14
  onIconClick === null || onIconClick === void 0 ? void 0 : onIconClick();
15
15
  }, transition: "all 0.2s ease", _hover: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixelize-design-library",
3
- "version": "2.2.149",
3
+ "version": "2.2.151",
4
4
  "private": false,
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",