@coreui/react-pro 4.9.0 → 4.11.0-next.0

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 (38) hide show
  1. package/README.md +1 -1
  2. package/dist/components/calendar/CCalendar.d.ts +12 -0
  3. package/dist/components/date-range-picker/CDateRangePicker.d.ts +6 -0
  4. package/dist/components/multi-select/CMultiSelect.d.ts +18 -1
  5. package/dist/components/multi-select/CMultiSelectOptions.d.ts +1 -0
  6. package/dist/components/multi-select/types.d.ts +1 -0
  7. package/dist/components/multi-select/utils.d.ts +5 -0
  8. package/dist/components/smart-table/CSmartTableInterface.d.ts +1 -1
  9. package/dist/components/time-picker/CTimePicker.d.ts +6 -0
  10. package/dist/index.es.js +126 -61
  11. package/dist/index.es.js.map +1 -1
  12. package/dist/index.js +126 -61
  13. package/dist/index.js.map +1 -1
  14. package/package.json +2 -2
  15. package/src/components/calendar/CCalendar.tsx +79 -44
  16. package/src/components/calendar/utils.ts +1 -0
  17. package/src/components/date-range-picker/CDateRangePicker.tsx +14 -0
  18. package/src/components/dropdown/CDropdown.tsx +33 -30
  19. package/src/components/multi-select/CMultiSelect.tsx +99 -14
  20. package/src/components/multi-select/CMultiSelectOptions.tsx +29 -16
  21. package/src/components/multi-select/types.ts +1 -0
  22. package/src/components/multi-select/utils.ts +42 -25
  23. package/src/components/smart-table/CSmartTableInterface.tsx +1 -1
  24. package/src/components/time-picker/CTimePicker.tsx +9 -0
  25. package/src/components/virtual-scroller/CVirtualScroller.tsx +8 -7
  26. package/dist/components/Types.d.ts +0 -14
  27. package/dist/components/multi-select/CMultiSelectCleaner.d.ts +0 -2
  28. package/dist/components/multi-select/CMultiSelectSearchInput.d.ts +0 -5
  29. package/dist/components/pagination/CSmartPagination.d.ts +0 -80
  30. package/dist/components/time-picker/CTimePicker copy.d.ts +0 -46
  31. package/dist/utils/calendar.d.ts +0 -23
  32. package/dist/utils/getNextSibling.d.ts +0 -2
  33. package/dist/utils/getPreviousSibling.d.ts +0 -2
  34. package/dist/utils/hooks/index.d.ts +0 -3
  35. package/dist/utils/hooks/useForkedRef.d.ts +0 -7
  36. package/dist/utils/hooks/useStateWithCallback.d.ts +0 -2
  37. package/dist/utils/isVisible.d.ts +0 -2
  38. package/dist/utils/time.d.ts +0 -21
package/dist/index.es.js CHANGED
@@ -6921,7 +6921,7 @@ var isToday = function (date) {
6921
6921
  };
6922
6922
 
6923
6923
  var Calendar = function (props) {
6924
- var addMonths = props.addMonths, calendarDate = props.calendarDate, dayFormat = props.dayFormat, disabledDates = props.disabledDates, endDate = props.endDate, firstDayOfWeek = props.firstDayOfWeek, hoverDate = props.hoverDate, locale = props.locale, maxDate = props.maxDate, minDate = props.minDate, onCellClick = props.onCellClick, onCellKeyDown = props.onCellKeyDown, onCellMouseEnter = props.onCellMouseEnter, onCellMouseLeave = props.onCellMouseLeave, onMonthClick = props.onMonthClick, onYearClick = props.onYearClick, selectEndDate = props.selectEndDate, startDate = props.startDate, view = props.view, weekdayFormat = props.weekdayFormat;
6924
+ var addMonths = props.addMonths, calendarDate = props.calendarDate, dayFormat = props.dayFormat, disabledDates = props.disabledDates, endDate = props.endDate, firstDayOfWeek = props.firstDayOfWeek, hoverDate = props.hoverDate, locale = props.locale, maxDate = props.maxDate, minDate = props.minDate, onCellClick = props.onCellClick, onCellKeyDown = props.onCellKeyDown, onCellMouseEnter = props.onCellMouseEnter, onCellMouseLeave = props.onCellMouseLeave, onMonthClick = props.onMonthClick, onYearClick = props.onYearClick, selectAdjacementDays = props.selectAdjacementDays, selectEndDate = props.selectEndDate, showAdjacementDays = props.showAdjacementDays, startDate = props.startDate, view = props.view, weekdayFormat = props.weekdayFormat;
6925
6925
  var _a = useState(calendarDate), date = _a[0], setDate = _a[1];
6926
6926
  var _b = useState([]), listOfMonths = _b[0], setListOfMonths = _b[1];
6927
6927
  useEffect(function () {
@@ -6954,7 +6954,7 @@ var Calendar = function (props) {
6954
6954
  return (React__default$1.createElement("tr", { key: index }, week.map(function (_a, idx) {
6955
6955
  var _b;
6956
6956
  var date = _a.date, month = _a.month;
6957
- return (React__default$1.createElement("td", __assign$1({ className: classNames$1('calendar-cell', (_b = {
6957
+ return month === 'current' || showAdjacementDays ? (React__default$1.createElement("td", __assign$1({ className: classNames$1('calendar-cell', (_b = {
6958
6958
  today: month === 'current' && isToday(date),
6959
6959
  disabled: isDateDisabled(date, minDate, maxDate, disabledDates)
6960
6960
  },
@@ -6968,19 +6968,20 @@ var Calendar = function (props) {
6968
6968
  _b.selected = isDateSelected(date, startDate, endDate),
6969
6969
  _b.start = isStartDate(date, startDate, endDate),
6970
6970
  _b.end = isEndDate(date, startDate, endDate),
6971
- _b)), key: idx, tabIndex: 0, title: date.toLocaleDateString(locale) }, (month === 'current' && {
6971
+ _b)), key: idx, tabIndex: 0, title: date.toLocaleDateString(locale) }, ((month === 'current' || selectAdjacementDays) && {
6972
6972
  onBlur: function () { return onCellMouseLeave(); },
6973
6973
  onClick: function () { return onCellClick(date); },
6974
6974
  onFocus: function () { return onCellMouseEnter(date); },
6975
6975
  onKeyDown: function (event) { return onCellKeyDown(event, date); },
6976
6976
  onMouseEnter: function () { return onCellMouseEnter(date); },
6977
6977
  onMouseLeave: function () { return onCellMouseLeave(); },
6978
- }), (month !== 'current' && {
6978
+ }), (month !== 'current' &&
6979
+ !selectAdjacementDays && {
6979
6980
  onMouseEnter: function () { return onCellMouseLeave(); },
6980
6981
  })),
6981
6982
  React__default$1.createElement("div", { className: "calendar-cell-inner" }, typeof dayFormat === 'function'
6982
6983
  ? dayFormat(date)
6983
- : date.toLocaleDateString(locale, { day: dayFormat }))));
6984
+ : date.toLocaleDateString(locale, { day: dayFormat })))) : (React__default$1.createElement("td", { key: idx }));
6984
6985
  })));
6985
6986
  }),
6986
6987
  view === 'months' &&
@@ -7022,9 +7023,9 @@ var Navigation = function (props) {
7022
7023
  React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return onNavigationClick('next', true); } }, navNextDoubleIcon ? (navNextDoubleIcon) : (React__default$1.createElement("span", { className: "calendar-nav-icon calendar-nav-icon-double-next" })))))));
7023
7024
  };
7024
7025
  var CCalendar = forwardRef(function (_a, ref) {
7025
- var startDate = _a.startDate, endDate = _a.endDate, _b = _a.calendarDate, calendarDate = _b === void 0 ? startDate || endDate || null : _b, _c = _a.calendars, calendars = _c === void 0 ? 1 : _c, className = _a.className, _d = _a.dayFormat, dayFormat = _d === void 0 ? 'numeric' : _d, disabledDates = _a.disabledDates, _e = _a.firstDayOfWeek, firstDayOfWeek = _e === void 0 ? 1 : _e, _f = _a.locale, locale = _f === void 0 ? 'default' : _f, maxDate = _a.maxDate, minDate = _a.minDate, _g = _a.navigation, navigation = _g === void 0 ? true : _g, navNextIcon = _a.navNextIcon, navNextDoubleIcon = _a.navNextDoubleIcon, navPrevIcon = _a.navPrevIcon, navPrevDoubleIcon = _a.navPrevDoubleIcon, navYearFirst = _a.navYearFirst, range = _a.range, selectEndDate = _a.selectEndDate, _h = _a.weekdayFormat, weekdayFormat = _h === void 0 ? 2 : _h, onCalendarCellHover = _a.onCalendarCellHover, onCalendarDateChange = _a.onCalendarDateChange, onEndDateChange = _a.onEndDateChange, onStartDateChange = _a.onStartDateChange, onSelectEndChange = _a.onSelectEndChange, onViewChanged = _a.onViewChanged;
7026
+ var startDate = _a.startDate, endDate = _a.endDate, _b = _a.calendarDate, calendarDate = _b === void 0 ? startDate || endDate || null : _b, _c = _a.calendars, calendars = _c === void 0 ? 1 : _c, className = _a.className, _d = _a.dayFormat, dayFormat = _d === void 0 ? 'numeric' : _d, disabledDates = _a.disabledDates, _e = _a.firstDayOfWeek, firstDayOfWeek = _e === void 0 ? 1 : _e, _f = _a.locale, locale = _f === void 0 ? 'default' : _f, maxDate = _a.maxDate, minDate = _a.minDate, _g = _a.navigation, navigation = _g === void 0 ? true : _g, navNextIcon = _a.navNextIcon, navNextDoubleIcon = _a.navNextDoubleIcon, navPrevIcon = _a.navPrevIcon, navPrevDoubleIcon = _a.navPrevDoubleIcon, navYearFirst = _a.navYearFirst, range = _a.range, _h = _a.selectAdjacementDays, selectAdjacementDays = _h === void 0 ? false : _h, selectEndDate = _a.selectEndDate, _j = _a.showAdjacementDays, showAdjacementDays = _j === void 0 ? true : _j, _k = _a.weekdayFormat, weekdayFormat = _k === void 0 ? 2 : _k, onCalendarCellHover = _a.onCalendarCellHover, onCalendarDateChange = _a.onCalendarDateChange, onEndDateChange = _a.onEndDateChange, onStartDateChange = _a.onStartDateChange, onSelectEndChange = _a.onSelectEndChange, onViewChanged = _a.onViewChanged;
7026
7027
  var isInitialMount = useRef(true);
7027
- var _j = useState(null), _calendarDate = _j[0], setCalendarDate = _j[1];
7028
+ var _l = useState(null), _calendarDate = _l[0], setCalendarDate = _l[1];
7028
7029
  useEffect(function () {
7029
7030
  if (calendarDate === null) {
7030
7031
  setCalendarDate(new Date());
@@ -7035,30 +7036,30 @@ var CCalendar = forwardRef(function (_a, ref) {
7035
7036
  !isSameDateAs(_calendarDate, date) && setCalendarDate(date);
7036
7037
  }
7037
7038
  }, [calendarDate]);
7038
- var _k = useStateWithCallback(startDate ? new Date(startDate) : null, onStartDateChange, !isInitialMount.current), _startDate = _k[0], setStartDate = _k[1];
7039
+ var _m = useStateWithCallback(startDate ? new Date(startDate) : null, onStartDateChange, !isInitialMount.current), _startDate = _m[0], setStartDate = _m[1];
7039
7040
  useEffect(function () {
7040
7041
  var date = startDate ? new Date(startDate) : null;
7041
7042
  if (!isSameDateAs(date, _startDate)) {
7042
7043
  setStartDate(date);
7043
7044
  }
7044
7045
  }, [startDate]);
7045
- var _l = useStateWithCallback(endDate ? new Date(endDate) : null, onEndDateChange, !isInitialMount.current), _endDate = _l[0], setEndDate = _l[1];
7046
+ var _o = useStateWithCallback(endDate ? new Date(endDate) : null, onEndDateChange, !isInitialMount.current), _endDate = _o[0], setEndDate = _o[1];
7046
7047
  useEffect(function () {
7047
7048
  var date = endDate ? new Date(endDate) : null;
7048
7049
  if (!isSameDateAs(date, _endDate)) {
7049
7050
  setEndDate(date);
7050
7051
  }
7051
7052
  }, [endDate]);
7052
- var _m = useState(null), _hoverDate = _m[0], setHoverDate = _m[1];
7053
- var _o = useState(maxDate ? new Date(maxDate) : null), _maxDate = _o[0], setMaxDate = _o[1];
7053
+ var _p = useState(null), _hoverDate = _p[0], setHoverDate = _p[1];
7054
+ var _q = useState(maxDate ? new Date(maxDate) : null), _maxDate = _q[0], setMaxDate = _q[1];
7054
7055
  useEffect(function () {
7055
7056
  maxDate && setMaxDate(new Date(maxDate));
7056
7057
  }, [maxDate]);
7057
- var _p = useState(minDate ? new Date(minDate) : null), _minDate = _p[0], setMinDate = _p[1];
7058
+ var _r = useState(minDate ? new Date(minDate) : null), _minDate = _r[0], setMinDate = _r[1];
7058
7059
  useEffect(function () {
7059
7060
  minDate && setMinDate(new Date(minDate));
7060
7061
  }, [minDate]);
7061
- var _q = useStateWithCallback(selectEndDate, onSelectEndChange), _selectEndDate = _q[0], setSelectEndDate = _q[1];
7062
+ var _s = useStateWithCallback(selectEndDate, onSelectEndChange), _selectEndDate = _s[0], setSelectEndDate = _s[1];
7062
7063
  useEffect(function () {
7063
7064
  setSelectEndDate(selectEndDate);
7064
7065
  }, [selectEndDate]);
@@ -7068,7 +7069,7 @@ var CCalendar = forwardRef(function (_a, ref) {
7068
7069
  onSelectEndChange &&
7069
7070
  onSelectEndChange(_selectEndDate);
7070
7071
  }, [_selectEndDate]);
7071
- var _r = useStateWithCallback('days', onViewChanged), view = _r[0], setView = _r[1];
7072
+ var _t = useStateWithCallback('days', onViewChanged), view = _t[0], setView = _t[1];
7072
7073
  useEffect(function () {
7073
7074
  isInitialMount.current = false;
7074
7075
  }, []);
@@ -7086,10 +7087,12 @@ var CCalendar = forwardRef(function (_a, ref) {
7086
7087
  setCalendarDate(d);
7087
7088
  onCalendarDateChange && onCalendarDateChange(d);
7088
7089
  };
7089
- var handleCellOnClick = function (date) {
7090
+ var handleCellOnClick = function (date, index) {
7090
7091
  if (isDateDisabled(date, _minDate, _maxDate, disabledDates)) {
7091
7092
  return;
7092
7093
  }
7094
+ var _date = new Date(date);
7095
+ setCalendarDate(index ? new Date(_date.setMonth(_date.getMonth() - index)) : _date);
7093
7096
  if (range) {
7094
7097
  if (_selectEndDate) {
7095
7098
  setSelectEndDate(false);
@@ -7133,10 +7136,10 @@ var CCalendar = forwardRef(function (_a, ref) {
7133
7136
  setHoverDate(null);
7134
7137
  onCalendarCellHover && onCalendarCellHover(null);
7135
7138
  };
7136
- var handleCellKeyDown = function (event, date) {
7139
+ var handleCellKeyDown = function (event, date, index) {
7137
7140
  if (event.code === 'Space' || event.key === 'Enter') {
7138
7141
  event.preventDefault();
7139
- handleCellOnClick && handleCellOnClick(date);
7142
+ handleCellOnClick && handleCellOnClick(date, index);
7140
7143
  return;
7141
7144
  }
7142
7145
  };
@@ -7170,13 +7173,13 @@ var CCalendar = forwardRef(function (_a, ref) {
7170
7173
  return (React__default$1.createElement("div", { className: classNames$1('calendars', className) }, _calendarDate &&
7171
7174
  Array.from({ length: calendars }, function (_, index) { return (React__default$1.createElement("div", { className: classNames$1('calendar', view), key: index, ref: ref },
7172
7175
  React__default$1.createElement(Navigation, { addMonths: index, calendarDate: _calendarDate, locale: locale, navigation: navigation, navNextDoubleIcon: navNextDoubleIcon, navNextIcon: navNextIcon, navPrevDoubleIcon: navPrevDoubleIcon, navPrevIcon: navPrevIcon, navYearFirst: navYearFirst, onMonthClick: function () { return setView('months'); }, onNavigationClick: handleNavigationOnClick, onYearClick: function () { return setView('years'); }, view: view }),
7173
- React__default$1.createElement(Calendar, { addMonths: index, calendarDate: _calendarDate, dayFormat: dayFormat, disabledDates: disabledDates, endDate: _endDate, firstDayOfWeek: firstDayOfWeek, hoverDate: _hoverDate, locale: locale, maxDate: _maxDate, minDate: _minDate, onCellClick: handleCellOnClick, onCellKeyDown: handleCellKeyDown, onCellMouseEnter: handleCellMouseEnter, onCellMouseLeave: handleCellMouseLeave, onMonthClick: function (month, view) {
7176
+ React__default$1.createElement(Calendar, { addMonths: index, calendarDate: _calendarDate, dayFormat: dayFormat, disabledDates: disabledDates, endDate: _endDate, firstDayOfWeek: firstDayOfWeek, hoverDate: _hoverDate, locale: locale, maxDate: _maxDate, minDate: _minDate, onCellClick: function (date) { return handleCellOnClick(date, index); }, onCellKeyDown: function (event, date) { return handleCellKeyDown(event, date, index); }, onCellMouseEnter: handleCellMouseEnter, onCellMouseLeave: handleCellMouseLeave, onMonthClick: function (month, view) {
7174
7177
  setCalendarPage(0, 0, month);
7175
7178
  setView(view);
7176
7179
  }, onYearClick: function (date, view) {
7177
7180
  setCalendarDate(date);
7178
7181
  setView(view);
7179
- }, selectEndDate: _selectEndDate, startDate: _startDate, view: view, weekdayFormat: weekdayFormat }))); })));
7182
+ }, selectEndDate: _selectEndDate, selectAdjacementDays: selectAdjacementDays, showAdjacementDays: showAdjacementDays, startDate: _startDate, view: view, weekdayFormat: weekdayFormat }))); })));
7180
7183
  });
7181
7184
  CCalendar.propTypes = {
7182
7185
  className: propTypesExports.string,
@@ -7199,7 +7202,9 @@ CCalendar.propTypes = {
7199
7202
  navPrevDoubleIcon: propTypesExports.node,
7200
7203
  navYearFirst: propTypesExports.bool,
7201
7204
  range: propTypesExports.bool,
7205
+ selectAdjacementDays: propTypesExports.bool,
7202
7206
  selectEndDate: propTypesExports.bool,
7207
+ showAdjacementDays: propTypesExports.bool,
7203
7208
  startDate: propTypesExports.oneOfType([propTypesExports.instanceOf(Date), propTypesExports.string]),
7204
7209
  weekdayFormat: propTypesExports.oneOfType([
7205
7210
  propTypesExports.func,
@@ -9916,6 +9921,10 @@ function Reference(_ref) {
9916
9921
  });
9917
9922
  }
9918
9923
 
9924
+ var PopperManagerWrapper = function (_a) {
9925
+ var children = _a.children, popper = _a.popper;
9926
+ return popper ? React__default$1.createElement(Manager, null, children) : React__default$1.createElement(React__default$1.Fragment, null, children);
9927
+ };
9919
9928
  var CDropdownContext = createContext({});
9920
9929
  var CDropdown = forwardRef(function (_a, ref) {
9921
9930
  var children = _a.children, alignment = _a.alignment, _b = _a.autoClose, autoClose = _b === void 0 ? true : _b, className = _a.className, dark = _a.dark, direction = _a.direction, onHide = _a.onHide, onShow = _a.onShow, _c = _a.placement, placement = _c === void 0 ? 'bottom-start' : _c, _d = _a.popper, popper = _d === void 0 ? true : _d, _e = _a.variant, variant = _e === void 0 ? 'btn-group' : _e, _f = _a.component, component = _f === void 0 ? 'div' : _f, _g = _a.visible, visible = _g === void 0 ? false : _g, rest = __rest$1(_a, ["children", "alignment", "autoClose", "className", "dark", "direction", "onHide", "onShow", "placement", "popper", "variant", "component", "visible"]);
@@ -9947,16 +9956,13 @@ var CDropdown = forwardRef(function (_a, ref) {
9947
9956
  _visible && onShow && onShow();
9948
9957
  !_visible && onHide && onHide();
9949
9958
  }, [_visible]);
9950
- var DropdownContent = function () {
9951
- return variant === 'input-group' ? (React__default$1.createElement(React__default$1.Fragment, null, children)) : (React__default$1.createElement(Component, __assign$1({ className: classNames$1(variant === 'nav-item' ? 'nav-item dropdown' : variant, {
9959
+ return (React__default$1.createElement(CDropdownContext.Provider, { value: contextValues },
9960
+ React__default$1.createElement(PopperManagerWrapper, { popper: popper }, variant === 'input-group' ? (React__default$1.createElement(React__default$1.Fragment, null, children)) : (React__default$1.createElement(Component, __assign$1({ className: classNames$1(variant === 'nav-item' ? 'nav-item dropdown' : variant, {
9952
9961
  'dropdown-center': direction === 'center',
9953
9962
  'dropup dropup-center': direction === 'dropup-center',
9954
9963
  direction: direction && direction !== 'center' && direction !== 'dropup-center',
9955
9964
  show: _visible,
9956
- }, className) }, rest, { ref: forkedRef }), children));
9957
- };
9958
- return (React__default$1.createElement(CDropdownContext.Provider, { value: contextValues }, popper ? (React__default$1.createElement(Manager, null,
9959
- React__default$1.createElement(DropdownContent, null))) : (React__default$1.createElement(DropdownContent, null))));
9965
+ }, className) }, rest, { ref: forkedRef }), children)))));
9960
9966
  });
9961
9967
  var alignmentDirection = propTypesExports.oneOf(['start', 'end']);
9962
9968
  CDropdown.propTypes = {
@@ -10264,7 +10270,7 @@ var isValidTime = function (time) {
10264
10270
 
10265
10271
  var CTimePicker = forwardRef(function (_a, ref) {
10266
10272
  var _b;
10267
- var _c = _a.ampm, ampm = _c === void 0 ? 'auto' : _c, className = _a.className, _d = _a.cleaner, cleaner = _d === void 0 ? true : _d, _e = _a.container, container = _e === void 0 ? 'dropdown' : _e, disabled = _a.disabled, feedback = _a.feedback, feedbackInvalid = _a.feedbackInvalid, feedbackValid = _a.feedbackValid, _f = _a.footer, footer = _f === void 0 ? true : _f, id = _a.id, _g = _a.indicator, indicator = _g === void 0 ? true : _g, inputReadOnly = _a.inputReadOnly, invalid = _a.invalid, label = _a.label, _h = _a.locale, locale = _h === void 0 ? 'default' : _h, onTimeChange = _a.onTimeChange, onHide = _a.onHide, onShow = _a.onShow, _j = _a.placeholder, placeholder = _j === void 0 ? 'Select time' : _j, _k = _a.seconds, seconds = _k === void 0 ? true : _k, size = _a.size, text = _a.text, time = _a.time, tooltipFeedback = _a.tooltipFeedback, valid = _a.valid, _l = _a.variant, variant = _l === void 0 ? 'roll' : _l, visible = _a.visible, rest = __rest$1(_a, ["ampm", "className", "cleaner", "container", "disabled", "feedback", "feedbackInvalid", "feedbackValid", "footer", "id", "indicator", "inputReadOnly", "invalid", "label", "locale", "onTimeChange", "onHide", "onShow", "placeholder", "seconds", "size", "text", "time", "tooltipFeedback", "valid", "variant", "visible"]);
10273
+ var _c = _a.ampm, ampm = _c === void 0 ? 'auto' : _c, className = _a.className, _d = _a.cleaner, cleaner = _d === void 0 ? true : _d, _e = _a.container, container = _e === void 0 ? 'dropdown' : _e, disabled = _a.disabled, feedback = _a.feedback, feedbackInvalid = _a.feedbackInvalid, feedbackValid = _a.feedbackValid, _f = _a.footer, footer = _f === void 0 ? true : _f, id = _a.id, _g = _a.indicator, indicator = _g === void 0 ? true : _g, inputReadOnly = _a.inputReadOnly, invalid = _a.invalid, label = _a.label, _h = _a.locale, locale = _h === void 0 ? 'default' : _h, onTimeChange = _a.onTimeChange, onHide = _a.onHide, onShow = _a.onShow, _j = _a.placeholder, placeholder = _j === void 0 ? 'Select time' : _j, required = _a.required, _k = _a.seconds, seconds = _k === void 0 ? true : _k, size = _a.size, text = _a.text, time = _a.time, tooltipFeedback = _a.tooltipFeedback, valid = _a.valid, _l = _a.variant, variant = _l === void 0 ? 'roll' : _l, visible = _a.visible, rest = __rest$1(_a, ["ampm", "className", "cleaner", "container", "disabled", "feedback", "feedbackInvalid", "feedbackValid", "footer", "id", "indicator", "inputReadOnly", "invalid", "label", "locale", "onTimeChange", "onHide", "onShow", "placeholder", "required", "seconds", "size", "text", "time", "tooltipFeedback", "valid", "variant", "visible"]);
10268
10274
  var inputRef = useRef(null);
10269
10275
  var _m = useState(convertTimeToDate(time)), date = _m[0], setDate = _m[1];
10270
10276
  var _o = useState(null), initialDate = _o[0], setInitialDate = _o[1];
@@ -10323,7 +10329,7 @@ var CTimePicker = forwardRef(function (_a, ref) {
10323
10329
  var InputGroup = function () { return (React__default$1.createElement(CInputGroup, { className: "picker-input-group", size: size },
10324
10330
  React__default$1.createElement(CFormInput, { autoComplete: "off", delay: true, disabled: disabled, onChange: function (event) {
10325
10331
  return isValidTime(event.target.value) && setDate(convertTimeToDate(event.target.value));
10326
- }, placeholder: placeholder, readOnly: inputReadOnly, ref: inputRef }),
10332
+ }, placeholder: placeholder, readOnly: inputReadOnly, required: required, ref: inputRef }),
10327
10333
  (indicator || cleaner) && (React__default$1.createElement(CInputGroupText, null,
10328
10334
  indicator && (React__default$1.createElement("span", { className: "picker-input-group-indicator" }, typeof indicator === 'boolean' ? (React__default$1.createElement("span", { className: "picker-input-group-icon time-picker-input-icon" })) : (indicator))),
10329
10335
  cleaner && date && (React__default$1.createElement("span", { className: "picker-input-group-cleaner", role: "button", onClick: function (event) { return handleClear(event); } }, typeof cleaner === 'boolean' ? (React__default$1.createElement("span", { className: "picker-input-group-icon time-picker-cleaner-icon" })) : (cleaner))))))); };
@@ -10395,7 +10401,7 @@ var CTimePicker = forwardRef(function (_a, ref) {
10395
10401
  _b['time-picker-roll'] = variant === 'roll',
10396
10402
  _b)) }, variant === 'select' ? React__default$1.createElement(TimePickerSelect, null) : TimePickerRoll()))));
10397
10403
  });
10398
- CTimePicker.propTypes = __assign$1(__assign$1(__assign$1({}, CFormControlWrapper.propTypes), CPicker.propTypes), { ampm: propTypesExports.oneOfType([propTypesExports.oneOf(['auto']), propTypesExports.bool]), className: propTypesExports.string, locale: propTypesExports.string, onTimeChange: propTypesExports.func, seconds: propTypesExports.bool, time: propTypesExports.oneOfType([propTypesExports.instanceOf(Date), propTypesExports.string]), variant: propTypesExports.oneOf(['roll', 'select']) });
10404
+ CTimePicker.propTypes = __assign$1(__assign$1(__assign$1({}, CFormControlWrapper.propTypes), CPicker.propTypes), { ampm: propTypesExports.oneOfType([propTypesExports.oneOf(['auto']), propTypesExports.bool]), className: propTypesExports.string, locale: propTypesExports.string, onTimeChange: propTypesExports.func, required: propTypesExports.bool, seconds: propTypesExports.bool, time: propTypesExports.oneOfType([propTypesExports.instanceOf(Date), propTypesExports.string]), variant: propTypesExports.oneOf(['roll', 'select']) });
10399
10405
  CTimePicker.displayName = 'CTimePicker';
10400
10406
 
10401
10407
  var getLocalDateFromString = function (string, locale, time) {
@@ -10433,7 +10439,7 @@ var getLocalDateFromString = function (string, locale, time) {
10433
10439
 
10434
10440
  var _a, _b, _c, _d, _e, _f;
10435
10441
  var CDateRangePicker = forwardRef(function (_a, ref) {
10436
- var _b = _a.calendars, calendars = _b === void 0 ? 2 : _b, className = _a.className, _c = _a.cleaner, cleaner = _c === void 0 ? true : _c, calendarDate = _a.calendarDate, _d = _a.closeOnSelect, closeOnSelect = _d === void 0 ? true : _d, _e = _a.indicator, indicator = _e === void 0 ? true : _e, dayFormat = _a.dayFormat, disabled = _a.disabled, disabledDates = _a.disabledDates, endDate = _a.endDate, feedback = _a.feedback, feedbackInvalid = _a.feedbackInvalid, feedbackValid = _a.feedbackValid, firstDayOfWeek = _a.firstDayOfWeek, format = _a.format, footer = _a.footer, id = _a.id, inputReadOnly = _a.inputReadOnly, invalid = _a.invalid, label = _a.label, _f = _a.locale, locale = _f === void 0 ? 'default' : _f, maxDate = _a.maxDate, minDate = _a.minDate, navigation = _a.navigation, navYearFirst = _a.navYearFirst, onEndDateChange = _a.onEndDateChange, onHide = _a.onHide, onStartDateChange = _a.onStartDateChange, onShow = _a.onShow, _g = _a.placeholder, placeholder = _g === void 0 ? ['Start date', 'End date'] : _g, _h = _a.range, range = _h === void 0 ? true : _h, ranges = _a.ranges, _j = _a.rangesButtonsColor, rangesButtonsColor = _j === void 0 ? 'secondary' : _j, rangesButtonsSize = _a.rangesButtonsSize, _k = _a.rangesButtonsVariant, rangesButtonsVariant = _k === void 0 ? 'ghost' : _k, _l = _a.separator, separator = _l === void 0 ? true : _l, size = _a.size, startDate = _a.startDate, text = _a.text, timepicker = _a.timepicker, toggler = _a.toggler, _m = _a.todayButton, todayButton = _m === void 0 ? 'Today' : _m, _o = _a.todayButtonColor, todayButtonColor = _o === void 0 ? 'primary' : _o, _p = _a.todayButtonSize, todayButtonSize = _p === void 0 ? 'sm' : _p, todayButtonVariant = _a.todayButtonVariant, tooltipFeedback = _a.tooltipFeedback, valid = _a.valid, visible = _a.visible, weekdayFormat = _a.weekdayFormat, rest = __rest$1(_a, ["calendars", "className", "cleaner", "calendarDate", "closeOnSelect", "indicator", "dayFormat", "disabled", "disabledDates", "endDate", "feedback", "feedbackInvalid", "feedbackValid", "firstDayOfWeek", "format", "footer", "id", "inputReadOnly", "invalid", "label", "locale", "maxDate", "minDate", "navigation", "navYearFirst", "onEndDateChange", "onHide", "onStartDateChange", "onShow", "placeholder", "range", "ranges", "rangesButtonsColor", "rangesButtonsSize", "rangesButtonsVariant", "separator", "size", "startDate", "text", "timepicker", "toggler", "todayButton", "todayButtonColor", "todayButtonSize", "todayButtonVariant", "tooltipFeedback", "valid", "visible", "weekdayFormat"]);
10442
+ var _b = _a.calendars, calendars = _b === void 0 ? 2 : _b, className = _a.className, _c = _a.cleaner, cleaner = _c === void 0 ? true : _c, calendarDate = _a.calendarDate, _d = _a.closeOnSelect, closeOnSelect = _d === void 0 ? true : _d, _e = _a.indicator, indicator = _e === void 0 ? true : _e, dayFormat = _a.dayFormat, disabled = _a.disabled, disabledDates = _a.disabledDates, endDate = _a.endDate, feedback = _a.feedback, feedbackInvalid = _a.feedbackInvalid, feedbackValid = _a.feedbackValid, firstDayOfWeek = _a.firstDayOfWeek, format = _a.format, footer = _a.footer, id = _a.id, inputReadOnly = _a.inputReadOnly, invalid = _a.invalid, label = _a.label, _f = _a.locale, locale = _f === void 0 ? 'default' : _f, maxDate = _a.maxDate, minDate = _a.minDate, navigation = _a.navigation, navYearFirst = _a.navYearFirst, onEndDateChange = _a.onEndDateChange, onHide = _a.onHide, onStartDateChange = _a.onStartDateChange, onShow = _a.onShow, _g = _a.placeholder, placeholder = _g === void 0 ? ['Start date', 'End date'] : _g, _h = _a.range, range = _h === void 0 ? true : _h, ranges = _a.ranges, _j = _a.rangesButtonsColor, rangesButtonsColor = _j === void 0 ? 'secondary' : _j, rangesButtonsSize = _a.rangesButtonsSize, _k = _a.rangesButtonsVariant, rangesButtonsVariant = _k === void 0 ? 'ghost' : _k, required = _a.required, _l = _a.separator, separator = _l === void 0 ? true : _l, selectAdjacementDays = _a.selectAdjacementDays, showAdjacementDays = _a.showAdjacementDays, size = _a.size, startDate = _a.startDate, text = _a.text, timepicker = _a.timepicker, toggler = _a.toggler, _m = _a.todayButton, todayButton = _m === void 0 ? 'Today' : _m, _o = _a.todayButtonColor, todayButtonColor = _o === void 0 ? 'primary' : _o, _p = _a.todayButtonSize, todayButtonSize = _p === void 0 ? 'sm' : _p, todayButtonVariant = _a.todayButtonVariant, tooltipFeedback = _a.tooltipFeedback, valid = _a.valid, visible = _a.visible, weekdayFormat = _a.weekdayFormat, rest = __rest$1(_a, ["calendars", "className", "cleaner", "calendarDate", "closeOnSelect", "indicator", "dayFormat", "disabled", "disabledDates", "endDate", "feedback", "feedbackInvalid", "feedbackValid", "firstDayOfWeek", "format", "footer", "id", "inputReadOnly", "invalid", "label", "locale", "maxDate", "minDate", "navigation", "navYearFirst", "onEndDateChange", "onHide", "onStartDateChange", "onShow", "placeholder", "range", "ranges", "rangesButtonsColor", "rangesButtonsSize", "rangesButtonsVariant", "required", "separator", "selectAdjacementDays", "showAdjacementDays", "size", "startDate", "text", "timepicker", "toggler", "todayButton", "todayButtonColor", "todayButtonSize", "todayButtonVariant", "tooltipFeedback", "valid", "visible", "weekdayFormat"]);
10437
10443
  var _q = useState(visible), _visible = _q[0], setVisible = _q[1];
10438
10444
  var inputStartRef = useRef(null);
10439
10445
  var inputEndRef = useRef(null);
@@ -10534,7 +10540,7 @@ var CDateRangePicker = forwardRef(function (_a, ref) {
10534
10540
  var InputGroup = function () { return (React__default$1.createElement(CInputGroup, { className: "picker-input-group", size: size },
10535
10541
  React__default$1.createElement(CFormInput, __assign$1({ autoComplete: "off", className: classNames$1({
10536
10542
  hover: inputStartHoverValue,
10537
- }), delay: true, disabled: disabled }, (id && { name: range ? "".concat(id, "-start-date") : "".concat(id, "-date") }), { placeholder: Array.isArray(placeholder) ? placeholder[0] : placeholder, readOnly: inputReadOnly || typeof format === 'string', onChange: function (event) {
10543
+ }), delay: true, disabled: disabled }, (id && { name: range ? "".concat(id, "-start-date") : "".concat(id, "-date") }), { placeholder: Array.isArray(placeholder) ? placeholder[0] : placeholder, readOnly: inputReadOnly || typeof format === 'string', required: required, onChange: function (event) {
10538
10544
  var date = getLocalDateFromString(event.target.value, locale, timepicker);
10539
10545
  if (date instanceof Date && date.getTime()) {
10540
10546
  setCalendarDate(date);
@@ -10544,7 +10550,7 @@ var CDateRangePicker = forwardRef(function (_a, ref) {
10544
10550
  range && separator !== false && (React__default$1.createElement(CInputGroupText, null, typeof separator === 'boolean' ? (React__default$1.createElement("span", { className: "picker-input-group-icon date-picker-arrow-icon" })) : (separator))),
10545
10551
  range && (React__default$1.createElement(CFormInput, __assign$1({ autoComplete: "off", className: classNames$1({
10546
10552
  hover: inputEndHoverValue,
10547
- }), delay: true, disabled: disabled }, (id && { name: "".concat(id, "-end-date") }), { placeholder: placeholder[1], readOnly: inputReadOnly || typeof format === 'string', onChange: function (event) {
10553
+ }), delay: true, disabled: disabled }, (id && { name: "".concat(id, "-end-date") }), { placeholder: placeholder[1], readOnly: inputReadOnly || typeof format === 'string', required: required, onChange: function (event) {
10548
10554
  var date = getLocalDateFromString(event.target.value, locale, timepicker);
10549
10555
  if (date instanceof Date && date.getTime()) {
10550
10556
  setCalendarDate(date);
@@ -10581,7 +10587,7 @@ var CDateRangePicker = forwardRef(function (_a, ref) {
10581
10587
  handleStartDateChange(ranges[key][0]);
10582
10588
  handleEndDateChange(ranges[key][1]);
10583
10589
  }, size: rangesButtonsSize, variant: rangesButtonsVariant }, key)); }))),
10584
- React__default$1.createElement(CCalendar, { calendarDate: _calendarDate, calendars: isMobile_1 ? 1 : calendars, className: "date-picker-calendars", dayFormat: dayFormat, disabledDates: disabledDates, endDate: _endDate, firstDayOfWeek: firstDayOfWeek, locale: locale, maxDate: _maxDate, minDate: _minDate, navigation: navigation, navYearFirst: navYearFirst, range: range, selectEndDate: selectEndDate, startDate: _startDate, onCalendarCellHover: function (date) { return handleCalendarCellHover(date); }, onCalendarDateChange: function (date) { return handleCalendarDateChange(date); }, onStartDateChange: function (date) { return handleStartDateChange(date); }, onEndDateChange: function (date) { return handleEndDateChange(date); }, onSelectEndChange: function (value) { return setSelectEndDate(value); }, weekdayFormat: weekdayFormat }),
10590
+ React__default$1.createElement(CCalendar, { calendarDate: _calendarDate, calendars: isMobile_1 ? 1 : calendars, className: "date-picker-calendars", dayFormat: dayFormat, disabledDates: disabledDates, endDate: _endDate, firstDayOfWeek: firstDayOfWeek, locale: locale, maxDate: _maxDate, minDate: _minDate, navigation: navigation, navYearFirst: navYearFirst, range: range, selectAdjacementDays: selectAdjacementDays, selectEndDate: selectEndDate, showAdjacementDays: showAdjacementDays, startDate: _startDate, onCalendarCellHover: function (date) { return handleCalendarCellHover(date); }, onCalendarDateChange: function (date) { return handleCalendarDateChange(date); }, onStartDateChange: function (date) { return handleStartDateChange(date); }, onEndDateChange: function (date) { return handleEndDateChange(date); }, onSelectEndChange: function (value) { return setSelectEndDate(value); }, weekdayFormat: weekdayFormat }),
10585
10591
  timepicker && (React__default$1.createElement("div", { className: "date-picker-timepickers" }, isMobile_1 || (range && calendars === 1) ? (React__default$1.createElement(React__default$1.Fragment, null,
10586
10592
  React__default$1.createElement(CTimePicker, { container: "inline", disabled: _startDate === null ? true : false, locale: locale, onTimeChange: function (_, __, date) { return date && handleStartDateChange(date); }, time: _startDate, variant: "select" }),
10587
10593
  React__default$1.createElement(CTimePicker, { container: "inline", disabled: _endDate === null ? true : false, locale: locale, onTimeChange: function (_, __, date) { return date && handleEndDateChange(date); }, time: _endDate, variant: "select" }))) : (__spreadArray([], Array(calendars), true).map(function (_, index) { return (React__default$1.createElement(CTimePicker, { container: "inline", disabled: index === 0
@@ -10597,7 +10603,7 @@ var CDateRangePicker = forwardRef(function (_a, ref) {
10597
10603
  }, time: index === 0 ? _startDate : _endDate, variant: "select" })); }))))))));
10598
10604
  });
10599
10605
  CDateRangePicker.displayName = 'CDateRangePicker';
10600
- CDateRangePicker.propTypes = __assign$1(__assign$1(__assign$1(__assign$1({}, CCalendar.propTypes), CFormControlWrapper.propTypes), CPicker.propTypes), { calendars: propTypesExports.number, className: propTypesExports.string, cleaner: propTypesExports.bool, closeOnSelect: propTypesExports.bool, id: propTypesExports.string, indicator: propTypesExports.oneOfType([propTypesExports.bool, propTypesExports.node]), inputReadOnly: propTypesExports.bool, placeholder: propTypesExports.oneOfType([propTypesExports.string, propTypesExports.arrayOf(propTypesExports.any)]), range: propTypesExports.bool, ranges: propTypesExports.object, rangesButtonsColor: (_a = CButton.propTypes) === null || _a === void 0 ? void 0 : _a.color, rangesButtonsSize: (_b = CButton.propTypes) === null || _b === void 0 ? void 0 : _b.size, rangesButtonsVariant: (_c = CButton.propTypes) === null || _c === void 0 ? void 0 : _c.variant, separator: propTypesExports.oneOfType([propTypesExports.bool, propTypesExports.node]), size: propTypesExports.oneOf(['sm', 'lg']), timepicker: propTypesExports.bool, todayButton: propTypesExports.oneOfType([propTypesExports.bool, propTypesExports.node]), todayButtonColor: (_d = CButton.propTypes) === null || _d === void 0 ? void 0 : _d.color, todayButtonSize: (_e = CButton.propTypes) === null || _e === void 0 ? void 0 : _e.size, todayButtonVariant: (_f = CButton.propTypes) === null || _f === void 0 ? void 0 : _f.variant });
10606
+ CDateRangePicker.propTypes = __assign$1(__assign$1(__assign$1(__assign$1({}, CCalendar.propTypes), CFormControlWrapper.propTypes), CPicker.propTypes), { calendars: propTypesExports.number, className: propTypesExports.string, cleaner: propTypesExports.bool, closeOnSelect: propTypesExports.bool, id: propTypesExports.string, indicator: propTypesExports.oneOfType([propTypesExports.bool, propTypesExports.node]), inputReadOnly: propTypesExports.bool, placeholder: propTypesExports.oneOfType([propTypesExports.string, propTypesExports.arrayOf(propTypesExports.any)]), range: propTypesExports.bool, ranges: propTypesExports.object, rangesButtonsColor: (_a = CButton.propTypes) === null || _a === void 0 ? void 0 : _a.color, rangesButtonsSize: (_b = CButton.propTypes) === null || _b === void 0 ? void 0 : _b.size, rangesButtonsVariant: (_c = CButton.propTypes) === null || _c === void 0 ? void 0 : _c.variant, required: propTypesExports.bool, separator: propTypesExports.oneOfType([propTypesExports.bool, propTypesExports.node]), size: propTypesExports.oneOf(['sm', 'lg']), timepicker: propTypesExports.bool, todayButton: propTypesExports.oneOfType([propTypesExports.bool, propTypesExports.node]), todayButtonColor: (_d = CButton.propTypes) === null || _d === void 0 ? void 0 : _d.color, todayButtonSize: (_e = CButton.propTypes) === null || _e === void 0 ? void 0 : _e.size, todayButtonVariant: (_f = CButton.propTypes) === null || _f === void 0 ? void 0 : _f.variant });
10601
10607
 
10602
10608
  var CDatePicker = forwardRef(function (_a, ref) {
10603
10609
  var date = _a.date, id = _a.id, onDateChange = _a.onDateChange, _b = _a.placeholder, placeholder = _b === void 0 ? 'Select date' : _b, rest = __rest$1(_a, ["date", "id", "onDateChange", "placeholder"]);
@@ -11273,15 +11279,15 @@ var CVirtualScroller = forwardRef(function (_a, ref) {
11273
11279
  setViewportPadding(Number.parseFloat(getComputedStyle(virtualScrollRef.current).paddingTop));
11274
11280
  });
11275
11281
  useEffect(function () {
11276
- setItemsNumber(itemsNumber || React__default$1.Children.count(children));
11277
- }, [children, itemsNumber]);
11282
+ setItemsNumber(React__default$1.Children.count(children));
11283
+ }, [children]);
11278
11284
  useEffect(function () {
11279
- setViewportHeight(visibleItems * itemHeight + 2 * viewportPadding);
11280
- }, [viewportPadding, visibleItems, itemHeight]);
11285
+ setViewportHeight(Math.min(visibleItems, itemsNumber) * itemHeight + 2 * viewportPadding);
11286
+ }, [itemHeight, itemsNumber, viewportPadding, visibleItems]);
11281
11287
  useEffect(function () {
11282
- setMaxHeight(itemsNumber * itemHeight + 2 * viewportPadding);
11288
+ setMaxHeight(itemsNumber * itemHeight);
11283
11289
  virtualScrollRef.current && virtualScrollRef.current.scrollTop;
11284
- }, [itemsNumber, itemHeight]);
11290
+ }, [itemHeight, itemsNumber]);
11285
11291
  useEffect(function () {
11286
11292
  setBuffer(Math.floor(visibleItems / 2));
11287
11293
  }, [visibleItems]);
@@ -11293,7 +11299,8 @@ var CVirtualScroller = forwardRef(function (_a, ref) {
11293
11299
  return (React__default$1.createElement("div", { className: classNames$1('virtual-scroller', className), onScroll: function (event) {
11294
11300
  return handleScroll(event.target.scrollTop);
11295
11301
  }, ref: forkedRef, style: {
11296
- height: maxHeight > viewportHeight ? viewportHeight : maxHeight,
11302
+ // height: maxHeight > viewportHeight ? viewportHeight : maxHeight,
11303
+ height: viewportHeight,
11297
11304
  overflowY: 'auto',
11298
11305
  } },
11299
11306
  React__default$1.createElement("div", { className: "virtual-scroller-content", style: {
@@ -11328,14 +11335,28 @@ CVirtualScroller.propTypes = {
11328
11335
  };
11329
11336
  CVirtualScroller.displayName = 'CVirtualScroller';
11330
11337
 
11338
+ var createOption = function (text, options) {
11339
+ var value = text.toLowerCase().replace(/\s/g, '-');
11340
+ var uniqueValue = value;
11341
+ var i = 1;
11342
+ while (options.find(function (option) { return String(option.value) === uniqueValue; })) {
11343
+ uniqueValue = "".concat(value, "-").concat(i);
11344
+ i++;
11345
+ }
11346
+ return [
11347
+ {
11348
+ value: uniqueValue,
11349
+ text: text,
11350
+ custom: true,
11351
+ },
11352
+ ];
11353
+ };
11331
11354
  var filterOptionsList = function (search, _options) {
11332
11355
  return search.length > 0
11333
11356
  ? _options &&
11334
11357
  _options.reduce(function (acc, val) {
11335
11358
  var options = val.options &&
11336
- val.options.filter(function (element) {
11337
- return element.text && element.text.toLowerCase().includes(search.toLowerCase());
11338
- });
11359
+ val.options.filter(function (element) { return element.text && element.text.toLowerCase().includes(search.toLowerCase()); });
11339
11360
  if ((val.text && val.text.toLowerCase().includes(search.toLowerCase())) ||
11340
11361
  (options && options.length > 0)) {
11341
11362
  acc.push(Object.assign({}, val, options && options.length > 0 && { options: options }));
@@ -11396,7 +11417,7 @@ var selectOptions = function (options, selected, deselected) {
11396
11417
  };
11397
11418
 
11398
11419
  var CMultiSelectOptions = forwardRef(function (_a, ref) {
11399
- var handleOptionOnClick = _a.handleOptionOnClick, options = _a.options, optionsMaxHeight = _a.optionsMaxHeight, optionsStyle = _a.optionsStyle, searchNoResultsLabel = _a.searchNoResultsLabel, selected = _a.selected, virtualScroller = _a.virtualScroller, _b = _a.visibleItems, visibleItems = _b === void 0 ? 10 : _b;
11420
+ var handleOptionOnClick = _a.handleOptionOnClick, loading = _a.loading, options = _a.options, optionsMaxHeight = _a.optionsMaxHeight, optionsStyle = _a.optionsStyle, searchNoResultsLabel = _a.searchNoResultsLabel, selected = _a.selected, virtualScroller = _a.virtualScroller, _b = _a.visibleItems, visibleItems = _b === void 0 ? 10 : _b;
11400
11421
  var handleKeyDown = function (event, option) {
11401
11422
  if (event.code === 'Space' || event.key === 'Enter') {
11402
11423
  event.preventDefault();
@@ -11431,12 +11452,15 @@ var CMultiSelectOptions = forwardRef(function (_a, ref) {
11431
11452
  }), key: index, onClick: function () { return handleOptionOnClick && handleOptionOnClick(option); }, onKeyDown: function (event) { return handleKeyDown(event, option); }, tabIndex: 0 }, option.text));
11432
11453
  })) : (React__default$1.createElement("div", { className: "form-multi-select-options-empty" }, searchNoResultsLabel));
11433
11454
  };
11434
- return virtualScroller ? (React__default$1.createElement(CVirtualScroller, { className: "form-multi-select-options", visibleItems: visibleItems, ref: ref }, createOptions(options))) : (React__default$1.createElement("div", __assign$1({ className: "form-multi-select-options" }, (optionsMaxHeight !== 'auto' && {
11435
- style: { maxHeight: optionsMaxHeight, overflow: 'scroll' },
11436
- }), { ref: ref }), createOptions(options)));
11455
+ return (React__default$1.createElement(React__default$1.Fragment, null,
11456
+ virtualScroller ? (React__default$1.createElement(CVirtualScroller, { className: "form-multi-select-options", visibleItems: visibleItems, ref: ref }, createOptions(options))) : (React__default$1.createElement("div", __assign$1({ className: "form-multi-select-options" }, (optionsMaxHeight !== 'auto' && {
11457
+ style: { maxHeight: optionsMaxHeight, overflow: 'scroll' },
11458
+ }), { ref: ref }), createOptions(options))),
11459
+ loading && React__default$1.createElement(CElementCover, null)));
11437
11460
  });
11438
11461
  CMultiSelectOptions.propTypes = {
11439
11462
  handleOptionOnClick: propTypesExports.func,
11463
+ loading: propTypesExports.bool,
11440
11464
  options: propTypesExports.array.isRequired,
11441
11465
  optionsMaxHeight: propTypesExports.oneOfType([propTypesExports.number, propTypesExports.string]),
11442
11466
  optionsStyle: propTypesExports.oneOf(['checkbox', 'text']),
@@ -11479,14 +11503,27 @@ CMultiSelectSelection.displayName = 'CMultiSelectSelection';
11479
11503
 
11480
11504
  var CMultiSelect = forwardRef(function (_a, ref) {
11481
11505
  var _b;
11482
- var className = _a.className, _c = _a.cleaner, cleaner = _c === void 0 ? true : _c, disabled = _a.disabled, feedback = _a.feedback, feedbackInvalid = _a.feedbackInvalid, feedbackValid = _a.feedbackValid, _d = _a.multiple, multiple = _d === void 0 ? true : _d, id = _a.id, invalid = _a.invalid, label = _a.label, onChange = _a.onChange, onFilterChange = _a.onFilterChange, options = _a.options, _e = _a.optionsMaxHeight, optionsMaxHeight = _e === void 0 ? 'auto' : _e, _f = _a.optionsStyle, optionsStyle = _f === void 0 ? 'checkbox' : _f, _g = _a.placeholder, placeholder = _g === void 0 ? 'Select...' : _g, _h = _a.search, search = _h === void 0 ? true : _h, _j = _a.searchNoResultsLabel, searchNoResultsLabel = _j === void 0 ? 'No results found' : _j, _k = _a.selectAll, selectAll = _k === void 0 ? true : _k, _l = _a.selectAllLabel, selectAllLabel = _l === void 0 ? 'Select all options' : _l, _m = _a.selectionType, selectionType = _m === void 0 ? 'tags' : _m, _o = _a.selectionTypeCounterText, selectionTypeCounterText = _o === void 0 ? 'item(s) selected' : _o, size = _a.size, text = _a.text, tooltipFeedback = _a.tooltipFeedback, valid = _a.valid, virtualScroller = _a.virtualScroller, _p = _a.visible, visible = _p === void 0 ? false : _p, _q = _a.visibleItems, visibleItems = _q === void 0 ? 10 : _q, rest = __rest$1(_a, ["className", "cleaner", "disabled", "feedback", "feedbackInvalid", "feedbackValid", "multiple", "id", "invalid", "label", "onChange", "onFilterChange", "options", "optionsMaxHeight", "optionsStyle", "placeholder", "search", "searchNoResultsLabel", "selectAll", "selectAllLabel", "selectionType", "selectionTypeCounterText", "size", "text", "tooltipFeedback", "valid", "virtualScroller", "visible", "visibleItems"]);
11506
+ var allowCreateOptions = _a.allowCreateOptions, className = _a.className, _c = _a.cleaner, cleaner = _c === void 0 ? true : _c, clearSearchOnSelect = _a.clearSearchOnSelect, disabled = _a.disabled, feedback = _a.feedback, feedbackInvalid = _a.feedbackInvalid, feedbackValid = _a.feedbackValid, loading = _a.loading, _d = _a.multiple, multiple = _d === void 0 ? true : _d, id = _a.id, invalid = _a.invalid, label = _a.label, onChange = _a.onChange, onFilterChange = _a.onFilterChange, options = _a.options, _e = _a.optionsMaxHeight, optionsMaxHeight = _e === void 0 ? 'auto' : _e, _f = _a.optionsStyle, optionsStyle = _f === void 0 ? 'checkbox' : _f, _g = _a.placeholder, placeholder = _g === void 0 ? 'Select...' : _g, _h = _a.search, search = _h === void 0 ? true : _h, _j = _a.searchNoResultsLabel, searchNoResultsLabel = _j === void 0 ? 'No results found' : _j, _k = _a.selectAll, selectAll = _k === void 0 ? true : _k, _l = _a.selectAllLabel, selectAllLabel = _l === void 0 ? 'Select all options' : _l, _m = _a.selectionType, selectionType = _m === void 0 ? 'tags' : _m, _o = _a.selectionTypeCounterText, selectionTypeCounterText = _o === void 0 ? 'item(s) selected' : _o, size = _a.size, text = _a.text, tooltipFeedback = _a.tooltipFeedback, valid = _a.valid, virtualScroller = _a.virtualScroller, _p = _a.visible, visible = _p === void 0 ? false : _p, _q = _a.visibleItems, visibleItems = _q === void 0 ? 10 : _q, rest = __rest$1(_a, ["allowCreateOptions", "className", "cleaner", "clearSearchOnSelect", "disabled", "feedback", "feedbackInvalid", "feedbackValid", "loading", "multiple", "id", "invalid", "label", "onChange", "onFilterChange", "options", "optionsMaxHeight", "optionsStyle", "placeholder", "search", "searchNoResultsLabel", "selectAll", "selectAllLabel", "selectionType", "selectionTypeCounterText", "size", "text", "tooltipFeedback", "valid", "virtualScroller", "visible", "visibleItems"]);
11483
11507
  var isInitialMount = useRef(true);
11484
11508
  var nativeSelectRef = useRef(null);
11485
11509
  var searchRef = useRef(null);
11486
11510
  var _r = useState(options), _options = _r[0], setOptions = _r[1];
11487
- var _s = useState(''), _search = _s[0], setSearch = _s[1];
11488
- var _t = useState(visible), _visible = _t[0], setVisible = _t[1];
11511
+ var _s = useState(visible), _visible = _s[0], setVisible = _s[1];
11512
+ var _t = useState(''), searchValue = _t[0], setSearchValue = _t[1];
11489
11513
  var _u = useState([]), selected = _u[0], setSelected = _u[1];
11514
+ var _v = useState([]), userOptions = _v[0], setUserOptions = _v[1];
11515
+ var filteredOptions = useMemo(function () {
11516
+ return search === 'external'
11517
+ ? __spreadArray(__spreadArray([], _options, true), filterOptionsList(searchValue, userOptions), true) : filterOptionsList(searchValue, __spreadArray(__spreadArray([], _options, true), userOptions, true));
11518
+ }, [_options, searchValue, userOptions]);
11519
+ var userOption = useMemo(function () {
11520
+ if (allowCreateOptions &&
11521
+ filteredOptions.length > 0 &&
11522
+ flattenArray(filteredOptions).filter(function (option) { return option.text.toLowerCase() === searchValue.toLowerCase(); }).length > 0) {
11523
+ return false;
11524
+ }
11525
+ return searchRef.current && createOption(String(searchValue), flattenArray(_options));
11526
+ }, [filteredOptions, searchValue]);
11490
11527
  useMemo(function () {
11491
11528
  setOptions(options);
11492
11529
  var _selected = options &&
@@ -11505,6 +11542,9 @@ var CMultiSelect = forwardRef(function (_a, ref) {
11505
11542
  });
11506
11543
  _selected && setSelected(selectOptions(_selected, selected, deselected));
11507
11544
  }, [JSON.stringify(options)]);
11545
+ useEffect(function () {
11546
+ !isInitialMount.current && onFilterChange && onFilterChange(searchValue);
11547
+ }, [searchValue]);
11508
11548
  useEffect(function () {
11509
11549
  !isInitialMount.current &&
11510
11550
  nativeSelectRef.current &&
@@ -11514,14 +11554,27 @@ var CMultiSelect = forwardRef(function (_a, ref) {
11514
11554
  isInitialMount.current = false;
11515
11555
  }, []);
11516
11556
  var handleSearchChange = function (event) {
11517
- var target = event.target;
11518
- if (search !== 'external') {
11519
- setSearch(target.value.toLowerCase());
11520
- }
11521
- onFilterChange && onFilterChange(target.value);
11557
+ var value = event.target.value;
11558
+ setSearchValue(value);
11522
11559
  };
11523
11560
  var handleSearchKeyDown = function (event) {
11524
- if (_search.length > 0) {
11561
+ if (event.key === 'Enter' && searchValue && allowCreateOptions) {
11562
+ if (userOption) {
11563
+ setSelected(__spreadArray(__spreadArray([], selected, true), userOption, true));
11564
+ setUserOptions(__spreadArray(__spreadArray([], userOptions, true), userOption, true));
11565
+ }
11566
+ if (!userOption) {
11567
+ setSelected(__spreadArray(__spreadArray([], selected, true), [
11568
+ flattenArray(filteredOptions).filter(function (option) { return String(option.text).toLowerCase() === searchValue.toLowerCase(); })[0],
11569
+ ], false));
11570
+ }
11571
+ setSearchValue('');
11572
+ if (searchRef.current) {
11573
+ searchRef.current.value = '';
11574
+ }
11575
+ return;
11576
+ }
11577
+ if (searchValue.length > 0) {
11525
11578
  return;
11526
11579
  }
11527
11580
  if (event.key === 'Backspace' || event.key === 'Delete') {
@@ -11533,12 +11586,22 @@ var CMultiSelect = forwardRef(function (_a, ref) {
11533
11586
  if (!multiple) {
11534
11587
  setSelected([{ value: option.value, text: option.text }]);
11535
11588
  setVisible(false);
11536
- setSearch('');
11589
+ setSearchValue('');
11537
11590
  if (searchRef.current) {
11538
11591
  searchRef.current.value = '';
11539
11592
  }
11540
11593
  return;
11541
11594
  }
11595
+ if (option.custom && !userOptions.some(function (_option) { return _option.value === option.value; })) {
11596
+ setUserOptions(__spreadArray(__spreadArray([], userOptions, true), [option], false));
11597
+ }
11598
+ if (clearSearchOnSelect || option.custom) {
11599
+ setSearchValue('');
11600
+ if (searchRef.current) {
11601
+ searchRef.current.value = '';
11602
+ searchRef.current.focus();
11603
+ }
11604
+ }
11542
11605
  if (selected.some(function (_option) { return _option.value === option.value; })) {
11543
11606
  setSelected(selected.filter(function (_option) { return _option.value !== option.value; }));
11544
11607
  }
@@ -11547,7 +11610,7 @@ var CMultiSelect = forwardRef(function (_a, ref) {
11547
11610
  }
11548
11611
  };
11549
11612
  var handleSelectAll = function () {
11550
- setSelected(selectOptions(flattenArray(options).filter(function (option) { return !option.disabled; }), selected));
11613
+ setSelected(selectOptions(__spreadArray(__spreadArray([], flattenArray(options).filter(function (option) { return !option.disabled; }), true), userOptions, true), selected));
11551
11614
  };
11552
11615
  var handleDeselectAll = function () {
11553
11616
  setSelected(selected.filter(function (option) { return option.disabled; }));
@@ -11577,12 +11640,14 @@ var CMultiSelect = forwardRef(function (_a, ref) {
11577
11640
  }), (selected.length > 0 &&
11578
11641
  !multiple && { placeholder: selected.map(function (option) { return option.text; })[0] }), (multiple &&
11579
11642
  selected.length > 0 &&
11580
- selectionType !== 'counter' && { size: _search.length + 2 }), { ref: searchRef })))), visible: _visible, ref: ref },
11643
+ selectionType !== 'counter' && { size: searchValue.length + 2 }), { ref: searchRef })))), visible: _visible, ref: ref },
11581
11644
  React__default$1.createElement(React__default$1.Fragment, null,
11582
11645
  multiple && selectAll && (React__default$1.createElement("button", { type: "button", className: "form-multi-select-all", onClick: function () { return handleSelectAll(); } }, selectAllLabel)),
11583
- React__default$1.createElement(CMultiSelectOptions, { handleOptionOnClick: function (option) { return !disabled && handleOptionOnClick(option); }, options: search === 'external' ? _options : filterOptionsList(_search, _options), optionsMaxHeight: optionsMaxHeight, optionsStyle: optionsStyle, searchNoResultsLabel: searchNoResultsLabel, selected: selected, virtualScroller: virtualScroller, visibleItems: visibleItems })))));
11646
+ React__default$1.createElement(CMultiSelectOptions, { handleOptionOnClick: function (option) { return !disabled && handleOptionOnClick(option); }, loading: loading, options: filteredOptions.length === 0 && allowCreateOptions
11647
+ ? userOption || []
11648
+ : filteredOptions, optionsMaxHeight: optionsMaxHeight, optionsStyle: optionsStyle, searchNoResultsLabel: searchNoResultsLabel, selected: selected, virtualScroller: virtualScroller, visibleItems: visibleItems })))));
11584
11649
  });
11585
- CMultiSelect.propTypes = __assign$1({ className: propTypesExports.string, cleaner: propTypesExports.bool, disabled: propTypesExports.bool, multiple: propTypesExports.bool, onChange: propTypesExports.func, options: propTypesExports.array.isRequired, optionsMaxHeight: propTypesExports.oneOfType([propTypesExports.number, propTypesExports.string]), optionsStyle: propTypesExports.oneOf(['checkbox', 'text']), placeholder: propTypesExports.string, search: propTypesExports.oneOfType([propTypesExports.bool, propTypesExports.oneOf(['external'])]), searchNoResultsLabel: propTypesExports.oneOfType([propTypesExports.string, propTypesExports.node]), selectAll: propTypesExports.bool, selectAllLabel: propTypesExports.oneOfType([propTypesExports.string, propTypesExports.node]), selectionType: propTypesExports.oneOf(['counter', 'tags', 'text']), selectionTypeCounterText: propTypesExports.string, size: propTypesExports.oneOf(['sm', 'lg']), virtualScroller: propTypesExports.bool, visible: propTypesExports.bool, visibleItems: propTypesExports.number }, CFormControlWrapper.propTypes);
11650
+ CMultiSelect.propTypes = __assign$1({ className: propTypesExports.string, cleaner: propTypesExports.bool, clearSearchOnSelect: propTypesExports.bool, disabled: propTypesExports.bool, loading: propTypesExports.bool, multiple: propTypesExports.bool, onChange: propTypesExports.func, options: propTypesExports.array.isRequired, optionsMaxHeight: propTypesExports.oneOfType([propTypesExports.number, propTypesExports.string]), optionsStyle: propTypesExports.oneOf(['checkbox', 'text']), placeholder: propTypesExports.string, search: propTypesExports.oneOfType([propTypesExports.bool, propTypesExports.oneOf(['external'])]), searchNoResultsLabel: propTypesExports.oneOfType([propTypesExports.string, propTypesExports.node]), selectAll: propTypesExports.bool, selectAllLabel: propTypesExports.oneOfType([propTypesExports.string, propTypesExports.node]), selectionType: propTypesExports.oneOf(['counter', 'tags', 'text']), selectionTypeCounterText: propTypesExports.string, size: propTypesExports.oneOf(['sm', 'lg']), virtualScroller: propTypesExports.bool, visible: propTypesExports.bool, visibleItems: propTypesExports.number }, CFormControlWrapper.propTypes);
11586
11651
  CMultiSelect.displayName = 'CMultiSelect';
11587
11652
 
11588
11653
  var CNav = forwardRef(function (_a, ref) {