@indico-data/design-system 2.41.0 → 2.41.1

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.
Files changed (39) hide show
  1. package/build/generated/iconTypes.ts +5 -0
  2. package/lib/components/forms/date/datePicker/DatePicker.d.ts +1 -2
  3. package/lib/components/forms/date/datePicker/__tests__/DatePicker.test.d.ts +1 -0
  4. package/lib/components/forms/date/datePicker/contants.d.ts +1 -1
  5. package/lib/components/forms/date/datePicker/index.d.ts +1 -0
  6. package/lib/components/forms/date/iconTriggerDatePicker/IconTriggerDatePicker.d.ts +3 -3
  7. package/lib/components/forms/date/iconTriggerDatePicker/__tests__/IconTriggerDatePicker.test.d.ts +1 -0
  8. package/lib/components/forms/date/inputDatePicker/SingleInputDatePicker.d.ts +5 -6
  9. package/lib/components/forms/date/inputDatePicker/__tests__/SingleInputDatePicker.test.d.ts +1 -0
  10. package/lib/components/forms/date/inputDatePicker/helpers.d.ts +1 -0
  11. package/lib/components/forms/date/inputDateRangePicker/InputDateRangePicker.d.ts +5 -6
  12. package/lib/components/forms/date/inputDateRangePicker/InputDateRangePicker.stories.d.ts +1 -1
  13. package/lib/components/forms/date/inputDateRangePicker/__tests__/InputDateRangePicker.test.d.ts +1 -0
  14. package/lib/components/index.d.ts +1 -0
  15. package/lib/index.d.ts +8 -7
  16. package/lib/index.esm.js +48 -47
  17. package/lib/index.esm.js.map +1 -1
  18. package/lib/index.js +48 -47
  19. package/lib/index.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/components/floatUI/{FloatUI.test.tsx → __tests__/FloatUI.test.tsx} +3 -3
  22. package/src/components/forms/date/datePicker/DatePicker.tsx +2 -2
  23. package/src/components/forms/date/datePicker/__tests__/DatePicker.test.tsx +55 -0
  24. package/src/components/forms/date/datePicker/contants.ts +1 -1
  25. package/src/components/forms/date/datePicker/index.ts +1 -0
  26. package/src/components/forms/date/iconTriggerDatePicker/IconTriggerDatePicker.mdx +1 -1
  27. package/src/components/forms/date/iconTriggerDatePicker/IconTriggerDatePicker.stories.tsx +0 -10
  28. package/src/components/forms/date/iconTriggerDatePicker/IconTriggerDatePicker.tsx +9 -12
  29. package/src/components/forms/date/iconTriggerDatePicker/__tests__/IconTriggerDatePicker.test.tsx +47 -127
  30. package/src/components/forms/date/inputDatePicker/SingleInputDatePicker.stories.tsx +17 -3
  31. package/src/components/forms/date/inputDatePicker/SingleInputDatePicker.tsx +31 -30
  32. package/src/components/forms/date/inputDatePicker/__tests__/SingleInputDatePicker.test.tsx +118 -0
  33. package/src/components/forms/date/inputDatePicker/helpers.ts +3 -0
  34. package/src/components/forms/date/inputDateRangePicker/InputDateRangePicker.mdx +9 -3
  35. package/src/components/forms/date/inputDateRangePicker/InputDateRangePicker.stories.tsx +41 -44
  36. package/src/components/forms/date/inputDateRangePicker/InputDateRangePicker.tsx +83 -49
  37. package/src/components/forms/date/inputDateRangePicker/__tests__/InputDateRangePicker.test.tsx +96 -0
  38. package/src/components/index.ts +1 -0
  39. /package/lib/components/floatUI/{FloatUI.test.d.ts → __tests__/FloatUI.test.d.ts} +0 -0
package/lib/index.js CHANGED
@@ -13945,28 +13945,31 @@ function DayPicker(props) {
13945
13945
  props.footer && (React__namespace.default.createElement(components.Footer, { className: classNames[UI.Footer], style: styles?.[UI.Footer], role: "status", "aria-live": "polite" }, props.footer)))));
13946
13946
  }
13947
13947
 
13948
- const getCommonProps = (props) => ({
13949
- className: props.className,
13950
- id: props.id,
13951
- month: props.month,
13952
- captionLayout: props.captionLayout,
13953
- defaultMonth: props.defaultMonth,
13954
- startMonth: props.startMonth,
13955
- endMonth: props.endMonth,
13956
- components: props.components,
13957
- isDisabled: props.isDisabled,
13958
- formatters: props.formatters,
13959
- weekStartsOn: props.weekStartsOn,
13960
- firstWeekContainsDate: props.firstWeekContainsDate,
13961
- today: props.today,
13962
- required: props.isRequired,
13963
- onMonthChange: props.onMonthChange,
13964
- onNextClick: props.onNextClick,
13965
- onPrevClick: props.onPrevClick,
13966
- onDayClick: props.onDayClick,
13967
- });
13948
+ const getCommonProps = (props) => {
13949
+ var _a;
13950
+ return ({
13951
+ className: props.className,
13952
+ id: props.id,
13953
+ month: props.month,
13954
+ captionLayout: (_a = props.captionLayout) !== null && _a !== void 0 ? _a : 'dropdown',
13955
+ defaultMonth: props.defaultMonth,
13956
+ startMonth: props.startMonth,
13957
+ endMonth: props.endMonth,
13958
+ components: props.components,
13959
+ isDisabled: props.isDisabled,
13960
+ formatters: props.formatters,
13961
+ weekStartsOn: props.weekStartsOn,
13962
+ firstWeekContainsDate: props.firstWeekContainsDate,
13963
+ today: props.today,
13964
+ required: props.isRequired,
13965
+ onMonthChange: props.onMonthChange,
13966
+ onNextClick: props.onNextClick,
13967
+ onPrevClick: props.onPrevClick,
13968
+ onDayClick: props.onDayClick,
13969
+ });
13970
+ };
13968
13971
 
13969
- const DatePicker = React__namespace.default.forwardRef((props) => {
13972
+ const DatePicker = (props) => {
13970
13973
  const { mode = 'single', className, captionLayout = 'dropdown', selected, id, month, defaultMonth, startMonth, endMonth, components, numberOfMonths, isDisabled, formatters, weekStartsOn, firstWeekContainsDate, today, isRequired, min, max, onSelect, onMonthChange, onNextClick, onPrevClick, onDayClick } = props, rest = __rest(props, ["mode", "className", "captionLayout", "selected", "id", "month", "defaultMonth", "startMonth", "endMonth", "components", "numberOfMonths", "isDisabled", "formatters", "weekStartsOn", "firstWeekContainsDate", "today", "isRequired", "min", "max", "onSelect", "onMonthChange", "onNextClick", "onPrevClick", "onDayClick"]);
13971
13974
  const commonProps = getCommonProps(props);
13972
13975
  const modeMap = {
@@ -13991,28 +13994,26 @@ const DatePicker = React__namespace.default.forwardRef((props) => {
13991
13994
  };
13992
13995
  const modeProps = modeMap[mode];
13993
13996
  return jsxRuntime.jsx(DayPicker, Object.assign({}, modeProps, commonProps, rest));
13994
- });
13997
+ };
13995
13998
 
13996
13999
  const IconTriggerDatePicker = (props) => {
13997
- const { ariaLabel, className, isDisabled, disableBeforeDate, disableAfterDate, month, id, label, onSelect, selected, triggerIcon, triggerIconSize, mode, isOpen, clearOnClose } = props, rest = __rest(props, ["ariaLabel", "className", "isDisabled", "disableBeforeDate", "disableAfterDate", "month", "id", "label", "onSelect", "selected", "triggerIcon", "triggerIconSize", "mode", "isOpen", "clearOnClose"]);
13998
- const [localSelected, setLocalSelected] = React.useState(selected || undefined);
14000
+ const { ariaLabel, className, isDisabled, disableBeforeDate, disableAfterDate, id, label, onSelect, selected, triggerIcon, triggerIconSize, mode, isOpen, clearOnClose, initialMonth } = props, rest = __rest(props, ["ariaLabel", "className", "isDisabled", "disableBeforeDate", "disableAfterDate", "id", "label", "onSelect", "selected", "triggerIcon", "triggerIconSize", "mode", "isOpen", "clearOnClose", "initialMonth"]);
14001
+ const [localMonth, setLocalMonth] = React.useState(initialMonth !== null && initialMonth !== void 0 ? initialMonth : new Date());
13999
14002
  const handleSelect = (date) => {
14000
14003
  if (!date) {
14001
14004
  onSelect && onSelect(undefined);
14002
- setLocalSelected(undefined);
14003
14005
  }
14004
14006
  else {
14005
14007
  onSelect && onSelect(date);
14006
- setLocalSelected(date);
14007
14008
  }
14008
14009
  };
14009
14010
  // clear selection if clear on close is true
14010
14011
  React.useEffect(() => {
14011
14012
  if (!isOpen && clearOnClose) {
14012
- setLocalSelected(undefined);
14013
+ onSelect && onSelect(undefined);
14013
14014
  }
14014
14015
  }, [isOpen, clearOnClose]);
14015
- return (jsxRuntime.jsxs(FloatUI, { isOpen: isOpen, ariaLabel: ariaLabel, children: [jsxRuntime.jsx(Icon, { "aria-label": "Open date picker", name: triggerIcon, size: triggerIconSize, className: "date__picker__trigger", "data-testid": `datepicker-trigger-for-${id}` }), jsxRuntime.jsx(DatePicker, Object.assign({ isDisabled: isDisabled, mode: mode, month: month, selected: localSelected, onSelect: handleSelect, startMonth: disableBeforeDate, endMonth: disableAfterDate }, rest))] }));
14016
+ return (jsxRuntime.jsxs(FloatUI, { isOpen: isOpen, ariaLabel: ariaLabel, children: [jsxRuntime.jsx(Icon, { "aria-label": "Open date picker", name: triggerIcon, size: triggerIconSize, className: "date__picker__trigger", "data-testid": `datepicker-trigger-for-${id}` }), jsxRuntime.jsx(DatePicker, Object.assign({ isDisabled: isDisabled, mode: mode, selected: selected, onSelect: handleSelect, month: localMonth, startMonth: disableBeforeDate, endMonth: disableAfterDate, onMonthChange: setLocalMonth }, rest))] }));
14016
14017
  };
14017
14018
 
14018
14019
  /**
@@ -19401,45 +19402,45 @@ function cleanEscapedString(input) {
19401
19402
  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'");
19402
19403
  }
19403
19404
 
19405
+ const formatDateAsString = (date) => format(date, 'MM/dd/yyyy');
19406
+
19404
19407
  function SingleInputDatePicker(props) {
19405
- const { ariaLabel, className, isDisabled, disableBeforeDate, disableAfterDate, month, id, label, onSelect, selected, isOpen, inputPlaceholder, clearOnClose, inputIconName, isClearable, errorMessage } = props, rest = __rest(props, ["ariaLabel", "className", "isDisabled", "disableBeforeDate", "disableAfterDate", "month", "id", "label", "onSelect", "selected", "isOpen", "inputPlaceholder", "clearOnClose", "inputIconName", "isClearable", "errorMessage"]);
19408
+ var _a;
19409
+ const { ariaLabel, className, isDisabled, disableBeforeDate, disableAfterDate, captionLayout, initialMonth, id, label, selected, isOpen, inputPlaceholder, clearOnClose, inputIconName, isClearable, errorMessage, onSelect } = props, rest = __rest(props, ["ariaLabel", "className", "isDisabled", "disableBeforeDate", "disableAfterDate", "captionLayout", "initialMonth", "id", "label", "selected", "isOpen", "inputPlaceholder", "clearOnClose", "inputIconName", "isClearable", "errorMessage", "onSelect"]);
19406
19410
  const inputId = React.useId();
19407
- // Hold the month in state to control the calendar when the input changes
19408
- const [localMonth, setLocalMonth] = React.useState(new Date());
19409
- // Hold the selected date in state
19410
- const [selectedDate, setSelectedDate] = React.useState(undefined);
19411
- // Hold the input value in state
19412
- const [inputValue, setInputValue] = React.useState('');
19411
+ // The text value is assumed to be unneeded by the consumer.
19412
+ const [localTextValue, setLocalTextValue] = React.useState(selected ? formatDateAsString(selected) : '');
19413
+ const [localMonth, setLocalMonth] = React.useState((_a = initialMonth !== null && initialMonth !== void 0 ? initialMonth : selected) !== null && _a !== void 0 ? _a : new Date());
19414
+ // When the day picker is selected, update the text value.
19413
19415
  const handleDayPickerSelect = (date) => {
19414
19416
  if (!date) {
19415
- setInputValue('');
19416
- setSelectedDate(undefined);
19417
+ setLocalTextValue('');
19418
+ onSelect(undefined);
19417
19419
  }
19418
19420
  else {
19419
- setSelectedDate(date);
19420
- setLocalMonth(date);
19421
- setInputValue(format(date, 'MM/dd/yyyy'));
19421
+ setLocalTextValue(formatDateAsString(date));
19422
+ onSelect(date);
19422
19423
  }
19423
19424
  };
19425
+ // When the text input is changed, update the selected date.
19424
19426
  const handleInputChange = (e) => {
19425
- setInputValue(e.target.value); // keep the input value in sync
19427
+ setLocalTextValue(e.target.value); // keep the input value in sync
19426
19428
  const parsedDate = parse(e.target.value, 'MM/dd/yyyy', new Date());
19427
19429
  if (isValid(parsedDate)) {
19428
- setSelectedDate(parsedDate);
19429
- setLocalMonth(parsedDate);
19430
+ onSelect(parsedDate);
19430
19431
  }
19431
19432
  else {
19432
- setSelectedDate(undefined);
19433
+ onSelect(undefined);
19433
19434
  }
19434
19435
  };
19435
19436
  // clear selection if clear on close is true
19436
19437
  React.useEffect(() => {
19437
19438
  if (!isOpen && clearOnClose) {
19438
- setSelectedDate(undefined);
19439
- setInputValue('');
19439
+ onSelect(undefined);
19440
+ setLocalTextValue('');
19440
19441
  }
19441
19442
  }, [isOpen, clearOnClose]);
19442
- return (jsxRuntime.jsxs(FloatUI, { isOpen: isOpen, ariaLabel: ariaLabel, children: [jsxRuntime.jsx(LabeledInput, { id: inputId, value: inputValue, placeholder: inputPlaceholder, isDisabled: isDisabled, iconName: inputIconName, isClearable: isClearable, onChange: handleInputChange, errorMessage: errorMessage, label: 'Single Date Picker', name: 'Date Picker' }), jsxRuntime.jsx(DatePicker, Object.assign({ month: localMonth, onMonthChange: setLocalMonth, mode: "single", selected: selectedDate, onSelect: handleDayPickerSelect }, rest))] }));
19443
+ return (jsxRuntime.jsxs(FloatUI, { isOpen: isOpen, ariaLabel: ariaLabel, children: [jsxRuntime.jsx(LabeledInput, { id: inputId, value: localTextValue, placeholder: inputPlaceholder, isDisabled: isDisabled, iconName: inputIconName, isClearable: isClearable, onChange: handleInputChange, errorMessage: errorMessage, label: 'Single Date Picker', name: 'Date Picker' }), jsxRuntime.jsx(DatePicker, Object.assign({ captionLayout: captionLayout, mode: "single", selected: selected, onSelect: handleDayPickerSelect, month: localMonth, onMonthChange: setLocalMonth }, rest))] }));
19443
19444
  }
19444
19445
 
19445
19446
  const StyledAccordion = styled__default.default.details `