@coreui/react-pro 4.2.0-beta.0 → 4.2.0-beta.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 (35) hide show
  1. package/README.md +1 -1
  2. package/dist/components/calendar/CCalendar.d.ts +27 -10
  3. package/dist/components/calendar/CCalendar.utils.d.ts +2 -1
  4. package/dist/components/daterangepicker/CDateRangePicker.d.ts +26 -11
  5. package/dist/components/picker/CPicker.d.ts +50 -9
  6. package/dist/components/timepicker/CTimePicker.d.ts +9 -13
  7. package/dist/components/timepicker/CTimePicker.utils.d.ts +13 -0
  8. package/dist/index.es.js +243 -206
  9. package/dist/index.es.js.map +1 -1
  10. package/dist/index.js +243 -206
  11. package/dist/index.js.map +1 -1
  12. package/dist/utils/calendar.d.ts +21 -0
  13. package/dist/utils/time.d.ts +17 -0
  14. package/package.json +3 -2
  15. package/src/components/accordion/__tests__/__snapshots__/CAccordionButton.spec.tsx.snap +2 -0
  16. package/src/components/accordion/__tests__/__snapshots__/CAccordionHeader.spec.tsx.snap +2 -0
  17. package/src/components/calendar/CCalendar.tsx +104 -58
  18. package/src/components/calendar/__tests__/CCalendar.spec.tsx +9 -0
  19. package/src/components/calendar/__tests__/__snapshots__/CCalendar.spec.tsx.snap +573 -0
  20. package/src/components/datepicker/CDatePicker.tsx +1 -0
  21. package/src/components/datepicker/__tests__/CDatePicker.spec.tsx +9 -0
  22. package/src/components/datepicker/__tests__/__snapshots__/CDatePicker.spec.tsx.snap +617 -0
  23. package/src/components/daterangepicker/CDateRangePicker.tsx +152 -91
  24. package/src/components/daterangepicker/__tests__/CDateRangePicker.spec.tsx +9 -0
  25. package/src/components/daterangepicker/__tests__/__snapshots__/CDateRangePicker.spec.tsx.snap +1201 -0
  26. package/src/components/dropdown/CDropdownMenu.tsx +5 -3
  27. package/src/components/picker/CPicker.tsx +99 -34
  28. package/src/components/picker/__tests__/CPicker.spec.tsx +9 -0
  29. package/src/components/picker/__tests__/__snapshots__/CPicker.spec.tsx.snap +23 -0
  30. package/src/components/timepicker/CTimePicker.tsx +66 -87
  31. package/src/components/timepicker/CTimePickerRollCol.tsx +7 -1
  32. package/src/components/timepicker/__tests__/CTimePicker.spec.tsx +9 -0
  33. package/src/{components/calendar/CCalendar.utils.ts → utils/calendar.ts} +11 -1
  34. package/src/utils/time.ts +58 -0
  35. package/src/components/timepicker/CTimePicker.utils.ts +0 -27
package/dist/index.es.js CHANGED
@@ -2833,10 +2833,6 @@ CButtonToolbar.propTypes = {
2833
2833
  };
2834
2834
  CButtonToolbar.displayName = 'CButtonToolbar';
2835
2835
 
2836
- var convertToLocalDate = function (d, locale, options) {
2837
- if (options === void 0) { options = {}; }
2838
- return d.toLocaleDateString(locale, options);
2839
- };
2840
2836
  var createGroupsInArray = function (arr, numberOfGroups) {
2841
2837
  var perGroup = Math.ceil(arr.length / numberOfGroups);
2842
2838
  return new Array(numberOfGroups)
@@ -2916,7 +2912,7 @@ var getMonthDetails = function (year, month, firstDayOfWeek) {
2916
2912
  });
2917
2913
  return weeks;
2918
2914
  };
2919
- var isDisabled = function (date, min, max, dates) {
2915
+ var isDateDisabled = function (date, min, max, dates) {
2920
2916
  var disabled;
2921
2917
  if (dates) {
2922
2918
  dates.forEach(function (_date) {
@@ -2969,14 +2965,20 @@ var isToday = function (date) {
2969
2965
  date.getMonth() == today.getMonth() &&
2970
2966
  date.getFullYear() == today.getFullYear());
2971
2967
  };
2968
+ var isValidDate = function (date) {
2969
+ var d = new Date(date);
2970
+ return d instanceof Date && d.getTime();
2971
+ };
2972
2972
 
2973
2973
  var CCalendar = forwardRef(function (_a, ref) {
2974
- var calendarDate = _a.calendarDate, disabledDates = _a.disabledDates, endDate = _a.endDate, _b = _a.firstDayOfWeek, firstDayOfWeek = _b === void 0 ? 1 : _b, _c = _a.locale, locale = _c === void 0 ? navigator.language : _c, maxDate = _a.maxDate, minDate = _a.minDate, _d = _a.navigation, navigation = _d === void 0 ? true : _d, nextIcon = _a.nextIcon, nextDoubleIcon = _a.nextDoubleIcon, prevIcon = _a.prevIcon, prevDoubleIcon = _a.prevDoubleIcon, range = _a.range, selectEndDate = _a.selectEndDate, startDate = _a.startDate, _e = _a.weekdayLength, weekdayLength = _e === void 0 ? 2 : _e, onCalendarDateChange = _a.onCalendarDateChange, onStartDateChange = _a.onStartDateChange, onEndDateChange = _a.onEndDateChange, onCalendarCellHover = _a.onCalendarCellHover;
2974
+ var calendarDate = _a.calendarDate, disabledDates = _a.disabledDates, endDate = _a.endDate, _b = _a.firstDayOfWeek, firstDayOfWeek = _b === void 0 ? 1 : _b, _c = _a.locale, locale = _c === void 0 ? 'default' : _c, maxDate = _a.maxDate, minDate = _a.minDate, _d = _a.navigation, navigation = _d === void 0 ? true : _d, navNextIcon = _a.navNextIcon, navNextDoubleIcon = _a.navNextDoubleIcon, navPrevIcon = _a.navPrevIcon, navPrevDoubleIcon = _a.navPrevDoubleIcon, range = _a.range, selectEndDate = _a.selectEndDate, startDate = _a.startDate, _e = _a.weekdayFormat, weekdayFormat = _e === void 0 ? 2 : _e, onCalendarDateChange = _a.onCalendarDateChange, onStartDateChange = _a.onStartDateChange, onEndDateChange = _a.onEndDateChange, onCalendarCellHover = _a.onCalendarCellHover, onViewChanged = _a.onViewChanged;
2975
2975
  var _f = useState(calendarDate ? new Date(calendarDate) : new Date()), _calendarDate = _f[0], setCalendarDate = _f[1];
2976
2976
  var _g = useState(startDate ? new Date(startDate) : null), _startDate = _g[0], setStartDate = _g[1];
2977
2977
  var _h = useState(endDate ? new Date(endDate) : null), _endDate = _h[0], setEndDate = _h[1];
2978
2978
  var _j = useState(selectEndDate), _selectEndDate = _j[0], setSelectEndDate = _j[1];
2979
2979
  var _k = useState('days'), view = _k[0], setView = _k[1];
2980
+ var _maxDate = maxDate ? new Date(maxDate) : null;
2981
+ var _minDate = minDate ? new Date(minDate) : null;
2980
2982
  useEffect(function () {
2981
2983
  if (calendarDate) {
2982
2984
  var d = new Date(calendarDate);
@@ -3024,6 +3026,9 @@ var CCalendar = forwardRef(function (_a, ref) {
3024
3026
  useEffect(function () {
3025
3027
  setSelectEndDate(selectEndDate);
3026
3028
  }, [selectEndDate]);
3029
+ useEffect(function () {
3030
+ onViewChanged && onViewChanged(view);
3031
+ }, [view]);
3027
3032
  var setCalendarPage = function (years, months, setMonth) {
3028
3033
  if (months === void 0) { months = 0; }
3029
3034
  var year = _calendarDate.getFullYear();
@@ -3036,7 +3041,7 @@ var CCalendar = forwardRef(function (_a, ref) {
3036
3041
  onCalendarDateChange && onCalendarDateChange(d);
3037
3042
  };
3038
3043
  var handleCellOnClick = function (date) {
3039
- if (isDisabled(date, minDate, maxDate, disabledDates)) {
3044
+ if (isDateDisabled(date, _minDate, _maxDate, disabledDates)) {
3040
3045
  return;
3041
3046
  }
3042
3047
  if (range) {
@@ -3060,7 +3065,7 @@ var CCalendar = forwardRef(function (_a, ref) {
3060
3065
  }
3061
3066
  };
3062
3067
  var handleCellMouseEnter = function (date) {
3063
- if (isDisabled(date, minDate, maxDate, disabledDates)) {
3068
+ if (isDateDisabled(date, _minDate, _maxDate, disabledDates)) {
3064
3069
  return;
3065
3070
  }
3066
3071
  onCalendarCellHover && onCalendarCellHover(date);
@@ -3072,7 +3077,7 @@ var CCalendar = forwardRef(function (_a, ref) {
3072
3077
  if (double === void 0) { double = false; }
3073
3078
  if (direction === 'prev') {
3074
3079
  if (double) {
3075
- setCalendarPage(view !== 'days' ? -10 : -1);
3080
+ setCalendarPage(view === 'years' ? -10 : -1);
3076
3081
  return;
3077
3082
  }
3078
3083
  if (view !== 'days') {
@@ -3084,7 +3089,7 @@ var CCalendar = forwardRef(function (_a, ref) {
3084
3089
  }
3085
3090
  if (direction === 'next') {
3086
3091
  if (double) {
3087
- setCalendarPage(view !== 'days' ? 10 : 1);
3092
+ setCalendarPage(view === 'years' ? 10 : 1);
3088
3093
  return;
3089
3094
  }
3090
3095
  if (view !== 'days') {
@@ -3105,7 +3110,11 @@ var CCalendar = forwardRef(function (_a, ref) {
3105
3110
  React__default$1.createElement("tr", null, weekDays.map(function (_a, idx) {
3106
3111
  var date = _a.date;
3107
3112
  return (React__default$1.createElement("th", { key: idx, className: "calendar-cell" },
3108
- React__default$1.createElement("div", { className: "calendar-header-cell-inner" }, date.toLocaleDateString(locale, { weekday: 'long' }).slice(0, weekdayLength))));
3113
+ React__default$1.createElement("div", { className: "calendar-header-cell-inner" }, typeof weekdayFormat === 'string'
3114
+ ? date.toLocaleDateString(locale, { weekday: weekdayFormat })
3115
+ : date
3116
+ .toLocaleDateString(locale, { weekday: 'long' })
3117
+ .slice(0, weekdayFormat))));
3109
3118
  })))),
3110
3119
  React__default$1.createElement("tbody", { onMouseLeave: function () { return handleCellMouseLeave(); } },
3111
3120
  view === 'days' &&
@@ -3114,7 +3123,7 @@ var CCalendar = forwardRef(function (_a, ref) {
3114
3123
  var date = _a.date, month = _a.month;
3115
3124
  return (React__default$1.createElement("td", { className: classNames$1('calendar-cell', {
3116
3125
  today: isToday(date),
3117
- disabled: isDisabled(date, minDate, maxDate, disabledDates),
3126
+ disabled: isDateDisabled(date, _minDate, _maxDate, disabledDates),
3118
3127
  next: month === 'next',
3119
3128
  previous: month === 'previous',
3120
3129
  last: isLastDayOfMonth(date),
@@ -3150,16 +3159,16 @@ var CCalendar = forwardRef(function (_a, ref) {
3150
3159
  var Navigation = function () {
3151
3160
  return (React__default$1.createElement("div", { className: "calendar-nav" },
3152
3161
  navigation && (React__default$1.createElement("div", { className: "calendar-nav-prev" },
3153
- React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return handleNavigationOnClick('prev', true); } }, prevDoubleIcon ? (prevDoubleIcon) : (React__default$1.createElement("span", { className: "calendar-nav-icon calendar-nav-icon-double-prev" }))),
3154
- React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return handleNavigationOnClick('prev'); } }, prevIcon ? (prevIcon) : (React__default$1.createElement("span", { className: "calendar-nav-icon calendar-nav-icon-prev" }))))),
3162
+ React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return handleNavigationOnClick('prev', true); } }, navPrevDoubleIcon ? (navPrevDoubleIcon) : (React__default$1.createElement("span", { className: "calendar-nav-icon calendar-nav-icon-double-prev" }))),
3163
+ view === 'days' && (React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return handleNavigationOnClick('prev'); } }, navPrevIcon ? (navPrevIcon) : (React__default$1.createElement("span", { className: "calendar-nav-icon calendar-nav-icon-prev" })))))),
3155
3164
  React__default$1.createElement("div", { className: "calendar-nav-date" },
3156
3165
  view === 'days' && (React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return navigation && setView('months'); } }, _calendarDate.toLocaleDateString(locale, { month: 'long' }))),
3157
3166
  React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return navigation && setView('years'); } }, _calendarDate.toLocaleDateString(locale, { year: 'numeric' }))),
3158
3167
  navigation && (React__default$1.createElement("div", { className: "calendar-nav-next" },
3159
- React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return handleNavigationOnClick('next'); } }, nextIcon ? (nextIcon) : (React__default$1.createElement("span", { className: "calendar-nav-icon calendar-nav-icon-next" }))),
3160
- React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return handleNavigationOnClick('next', true); } }, nextDoubleIcon ? (nextDoubleIcon) : (React__default$1.createElement("span", { className: "calendar-nav-icon calendar-nav-icon-double-next" })))))));
3168
+ view === 'days' && (React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return handleNavigationOnClick('next'); } }, navNextIcon ? (navNextIcon) : (React__default$1.createElement("span", { className: "calendar-nav-icon calendar-nav-icon-next" })))),
3169
+ React__default$1.createElement(CButton, { color: "transparent", size: "sm", onClick: function () { return handleNavigationOnClick('next', true); } }, navNextDoubleIcon ? (navNextDoubleIcon) : (React__default$1.createElement("span", { className: "calendar-nav-icon calendar-nav-icon-double-next" })))))));
3161
3170
  };
3162
- return (React__default$1.createElement("div", { className: "calendar", ref: ref },
3171
+ return (React__default$1.createElement("div", { className: classNames$1('calendar', view), ref: ref },
3163
3172
  React__default$1.createElement(Navigation, null),
3164
3173
  React__default$1.createElement(Calendar, null)));
3165
3174
  });
@@ -3170,21 +3179,25 @@ CCalendar.propTypes = {
3170
3179
  endDate: PropTypes$1.oneOfType([PropTypes$1.instanceOf(Date), PropTypes$1.string]),
3171
3180
  firstDayOfWeek: PropTypes$1.number,
3172
3181
  locale: PropTypes$1.string,
3173
- maxDate: PropTypes$1.instanceOf(Date),
3174
- minDate: PropTypes$1.instanceOf(Date),
3182
+ maxDate: PropTypes$1.oneOfType([PropTypes$1.instanceOf(Date), PropTypes$1.string]),
3183
+ minDate: PropTypes$1.oneOfType([PropTypes$1.instanceOf(Date), PropTypes$1.string]),
3175
3184
  navigation: PropTypes$1.bool,
3176
- nextIcon: PropTypes$1.node,
3177
- nextDoubleIcon: PropTypes$1.node,
3178
- prevIcon: PropTypes$1.node,
3179
- prevDoubleIcon: PropTypes$1.node,
3185
+ navNextIcon: PropTypes$1.node,
3186
+ navNextDoubleIcon: PropTypes$1.node,
3187
+ navPrevIcon: PropTypes$1.node,
3188
+ navPrevDoubleIcon: PropTypes$1.node,
3180
3189
  range: PropTypes$1.bool,
3181
3190
  selectEndDate: PropTypes$1.bool,
3182
3191
  startDate: PropTypes$1.oneOfType([PropTypes$1.instanceOf(Date), PropTypes$1.string]),
3183
- weekdayLength: PropTypes$1.number,
3192
+ weekdayFormat: PropTypes$1.oneOfType([
3193
+ PropTypes$1.number,
3194
+ PropTypes$1.oneOf(['long', 'narrow', 'short']),
3195
+ ]),
3184
3196
  onCalendarCellHover: PropTypes$1.func,
3185
3197
  onCalendarDateChange: PropTypes$1.func,
3186
3198
  onStartDateChange: PropTypes$1.func,
3187
3199
  onEndDateChange: PropTypes$1.func,
3200
+ onViewChanged: PropTypes$1.func,
3188
3201
  };
3189
3202
  CCalendar.displayName = 'CCalendar';
3190
3203
 
@@ -4655,6 +4668,55 @@ lib.useDeviceSelectors = useDeviceSelectors;
4655
4668
  lib.useMobileOrientation = useMobileOrientation;
4656
4669
  lib.withOrientationChange = withOrientationChange;
4657
4670
 
4671
+ var CFormInput = forwardRef(function (_a, ref) {
4672
+ var _b;
4673
+ var children = _a.children, className = _a.className, invalid = _a.invalid, plainText = _a.plainText, size = _a.size, _c = _a.type, type = _c === void 0 ? 'text' : _c, valid = _a.valid, rest = __rest$1(_a, ["children", "className", "invalid", "plainText", "size", "type", "valid"]);
4674
+ var _className = classNames$1(plainText ? 'form-control-plaintext' : 'form-control', (_b = {},
4675
+ _b["form-control-".concat(size)] = size,
4676
+ _b['form-control-color'] = type === 'color',
4677
+ _b['is-invalid'] = invalid,
4678
+ _b['is-valid'] = valid,
4679
+ _b), className);
4680
+ return (React__default$1.createElement("input", __assign$1({ type: type, className: _className }, rest, { ref: ref }), children));
4681
+ });
4682
+ CFormInput.propTypes = {
4683
+ children: PropTypes$1.node,
4684
+ className: PropTypes$1.string,
4685
+ invalid: PropTypes$1.bool,
4686
+ plainText: PropTypes$1.bool,
4687
+ size: PropTypes$1.oneOf(['sm', 'lg']),
4688
+ type: PropTypes$1.oneOfType([PropTypes$1.oneOf(['color', 'file', 'text']), PropTypes$1.string]),
4689
+ valid: PropTypes$1.bool,
4690
+ };
4691
+ CFormInput.displayName = 'CFormInput';
4692
+
4693
+ var CInputGroup = forwardRef(function (_a, ref) {
4694
+ var _b;
4695
+ var children = _a.children, className = _a.className, size = _a.size, rest = __rest$1(_a, ["children", "className", "size"]);
4696
+ var _className = classNames$1('input-group', (_b = {},
4697
+ _b["input-group-".concat(size)] = size,
4698
+ _b), className);
4699
+ return (React__default$1.createElement("div", __assign$1({ className: _className }, rest, { ref: ref }), children));
4700
+ });
4701
+ CInputGroup.propTypes = {
4702
+ children: PropTypes$1.node,
4703
+ className: PropTypes$1.string,
4704
+ size: PropTypes$1.oneOf(['sm', 'lg']),
4705
+ };
4706
+ CInputGroup.displayName = 'CInputGroup';
4707
+
4708
+ var CInputGroupText = forwardRef(function (_a, ref) {
4709
+ var children = _a.children, className = _a.className, _b = _a.component, Component = _b === void 0 ? 'span' : _b, rest = __rest$1(_a, ["children", "className", "component"]);
4710
+ var _className = classNames$1('input-group-text', className);
4711
+ return (React__default$1.createElement(Component, __assign$1({ className: _className }, rest, { ref: ref }), children));
4712
+ });
4713
+ CInputGroupText.propTypes = {
4714
+ children: PropTypes$1.node,
4715
+ className: PropTypes$1.string,
4716
+ component: PropTypes$1.elementType,
4717
+ };
4718
+ CInputGroupText.displayName = 'CInputGroupText';
4719
+
4658
4720
  var ManagerReferenceNodeContext = React$1.createContext();
4659
4721
  var ManagerReferenceNodeSetterContext = React$1.createContext();
4660
4722
  function Manager(_ref) {
@@ -5034,6 +5096,10 @@ function getContainingBlock(element) {
5034
5096
 
5035
5097
  var currentNode = getParentNode(element);
5036
5098
 
5099
+ if (isShadowRoot(currentNode)) {
5100
+ currentNode = currentNode.host;
5101
+ }
5102
+
5037
5103
  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
5038
5104
  var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that
5039
5105
  // create a containing block.
@@ -5266,7 +5332,7 @@ function mapToStyles(_ref2) {
5266
5332
 
5267
5333
  if (placement === top || (placement === left || placement === right) && variation === end) {
5268
5334
  sideY = bottom;
5269
- var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
5335
+ var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
5270
5336
  offsetParent[heightProp];
5271
5337
  y -= offsetY - popperRect.height;
5272
5338
  y *= gpuAcceleration ? 1 : -1;
@@ -5274,7 +5340,7 @@ function mapToStyles(_ref2) {
5274
5340
 
5275
5341
  if (placement === left || (placement === top || placement === bottom) && variation === end) {
5276
5342
  sideX = right;
5277
- var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
5343
+ var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
5278
5344
  offsetParent[widthProp];
5279
5345
  x -= offsetX - popperRect.width;
5280
5346
  x *= gpuAcceleration ? 1 : -1;
@@ -7162,11 +7228,10 @@ var CDropdownMenu = function (_a) {
7162
7228
  };
7163
7229
  }, [visible]);
7164
7230
  var handleKeyup = function (event) {
7165
- var _a;
7166
7231
  if (autoClose === false) {
7167
7232
  return;
7168
7233
  }
7169
- if (!((_a = dropdownMenuRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))) {
7234
+ if (event.key === 'Escape') {
7170
7235
  setVisible(false);
7171
7236
  }
7172
7237
  };
@@ -7279,18 +7344,19 @@ CDropdownToggle.propTypes = {
7279
7344
  };
7280
7345
  CDropdownToggle.displayName = 'CDropdownToggle';
7281
7346
 
7347
+ var _a$1, _b$1, _c$1, _d, _e, _f;
7282
7348
  var CPicker = forwardRef(function (_a, ref) {
7283
- var children = _a.children, _b = _a.cancelButtonText, cancelButtonText = _b === void 0 ? 'Cancel' : _b, className = _a.className, _c = _a.container, container = _c === void 0 ? 'dropdown' : _c, disabled = _a.disabled, footer = _a.footer, _d = _a.okButtonText, okButtonText = _d === void 0 ? 'OK' : _d, onCancelClick = _a.onCancelClick, onOkClick = _a.onOkClick, onHide = _a.onHide, onShow = _a.onShow, Toggler = _a.toggler, visible = _a.visible, rest = __rest$1(_a, ["children", "cancelButtonText", "className", "container", "disabled", "footer", "okButtonText", "onCancelClick", "onOkClick", "onHide", "onShow", "toggler", "visible"]);
7284
- var _e = useState(visible), _visible = _e[0], setVisible = _e[1];
7349
+ var children = _a.children, _b = _a.cancelButton, cancelButton = _b === void 0 ? 'Cancel' : _b, _c = _a.cancelButtonColor, cancelButtonColor = _c === void 0 ? 'primary' : _c, _d = _a.cancelButtonSize, cancelButtonSize = _d === void 0 ? 'sm' : _d, _e = _a.cancelButtonVariant, cancelButtonVariant = _e === void 0 ? 'ghost' : _e, _f = _a.confirmButton, confirmButton = _f === void 0 ? 'OK' : _f, _g = _a.confirmButtonColor, confirmButtonColor = _g === void 0 ? 'primary' : _g, _h = _a.confirmButtonSize, confirmButtonSize = _h === void 0 ? 'sm' : _h, confirmButtonVariant = _a.confirmButtonVariant, className = _a.className, _j = _a.container, container = _j === void 0 ? 'dropdown' : _j, disabled = _a.disabled, footer = _a.footer, onCancel = _a.onCancel, onConfirm = _a.onConfirm, onHide = _a.onHide, onShow = _a.onShow, Toggler = _a.toggler, visible = _a.visible, rest = __rest$1(_a, ["children", "cancelButton", "cancelButtonColor", "cancelButtonSize", "cancelButtonVariant", "confirmButton", "confirmButtonColor", "confirmButtonSize", "confirmButtonVariant", "className", "container", "disabled", "footer", "onCancel", "onConfirm", "onHide", "onShow", "toggler", "visible"]);
7350
+ var _k = useState(visible), _visible = _k[0], setVisible = _k[1];
7285
7351
  useEffect(function () {
7286
7352
  setVisible(visible);
7287
7353
  }, [visible]);
7288
7354
  var Footer = function () { return (React__default$1.createElement(React__default$1.Fragment, null,
7289
- React__default$1.createElement(CButton, { color: "primary", size: "sm", variant: "ghost", onClick: function () { return onCancelClick && onCancelClick(); } }, cancelButtonText),
7290
- React__default$1.createElement(CButton, { color: "primary", size: "sm", onClick: function () {
7291
- onOkClick && onOkClick();
7355
+ cancelButton && (React__default$1.createElement(CButton, { color: cancelButtonColor, size: cancelButtonSize, variant: cancelButtonVariant, onClick: function () { return onCancel && onCancel(); } }, cancelButton)),
7356
+ confirmButton && (React__default$1.createElement(CButton, { color: confirmButtonColor, size: confirmButtonSize, variant: confirmButtonVariant, onClick: function () {
7357
+ onConfirm && onConfirm();
7292
7358
  setVisible(false);
7293
- } }, okButtonText))); };
7359
+ } }, confirmButton)))); };
7294
7360
  var _className = classNames$1('picker', className);
7295
7361
  switch (container) {
7296
7362
  case 'inline':
@@ -7310,29 +7376,7 @@ var CPicker = forwardRef(function (_a, ref) {
7310
7376
  }
7311
7377
  });
7312
7378
  CPicker.displayName = 'CPicker';
7313
- CPicker.propTypes = __assign$1(__assign$1({}, CDropdown.propTypes), { container: PropTypes$1.oneOf(['dropdown', 'inline']), disabled: PropTypes$1.bool, onCancelClick: PropTypes$1.func, onOkClick: PropTypes$1.func });
7314
-
7315
- var CFormInput = forwardRef(function (_a, ref) {
7316
- var _b;
7317
- var children = _a.children, className = _a.className, invalid = _a.invalid, plainText = _a.plainText, size = _a.size, _c = _a.type, type = _c === void 0 ? 'text' : _c, valid = _a.valid, rest = __rest$1(_a, ["children", "className", "invalid", "plainText", "size", "type", "valid"]);
7318
- var _className = classNames$1(plainText ? 'form-control-plaintext' : 'form-control', (_b = {},
7319
- _b["form-control-".concat(size)] = size,
7320
- _b['form-control-color'] = type === 'color',
7321
- _b['is-invalid'] = invalid,
7322
- _b['is-valid'] = valid,
7323
- _b), className);
7324
- return (React__default$1.createElement("input", __assign$1({ type: type, className: _className }, rest, { ref: ref }), children));
7325
- });
7326
- CFormInput.propTypes = {
7327
- children: PropTypes$1.node,
7328
- className: PropTypes$1.string,
7329
- invalid: PropTypes$1.bool,
7330
- plainText: PropTypes$1.bool,
7331
- size: PropTypes$1.oneOf(['sm', 'lg']),
7332
- type: PropTypes$1.oneOfType([PropTypes$1.oneOf(['color', 'file', 'text']), PropTypes$1.string]),
7333
- valid: PropTypes$1.bool,
7334
- };
7335
- CFormInput.displayName = 'CFormInput';
7379
+ CPicker.propTypes = __assign$1({ cancelButton: PropTypes$1.oneOfType([PropTypes$1.bool, PropTypes$1.node]), cancelButtonColor: (_a$1 = CButton.propTypes) === null || _a$1 === void 0 ? void 0 : _a$1.color, cancelButtonSize: (_b$1 = CButton.propTypes) === null || _b$1 === void 0 ? void 0 : _b$1.size, cancelButtonVariant: (_c$1 = CButton.propTypes) === null || _c$1 === void 0 ? void 0 : _c$1.variant, confirmButton: PropTypes$1.oneOfType([PropTypes$1.bool, PropTypes$1.node]), confirmButtonColor: (_d = CButton.propTypes) === null || _d === void 0 ? void 0 : _d.color, confirmButtonSize: (_e = CButton.propTypes) === null || _e === void 0 ? void 0 : _e.size, confirmButtonVariant: (_f = CButton.propTypes) === null || _f === void 0 ? void 0 : _f.variant, children: PropTypes$1.node, className: PropTypes$1.string, container: PropTypes$1.oneOf(['dropdown', 'inline']), disabled: PropTypes$1.bool, footer: PropTypes$1.oneOfType([PropTypes$1.bool, PropTypes$1.node]), onCancel: PropTypes$1.func, onConfirm: PropTypes$1.func, toggler: PropTypes$1.node }, CDropdown.propTypes);
7336
7380
 
7337
7381
  var CFormSelect = forwardRef(function (_a, ref) {
7338
7382
  var _b;
@@ -7360,43 +7404,21 @@ CFormSelect.propTypes = {
7360
7404
  };
7361
7405
  CFormSelect.displayName = 'CFormSelect';
7362
7406
 
7363
- var CInputGroup = forwardRef(function (_a, ref) {
7364
- var _b;
7365
- var children = _a.children, className = _a.className, size = _a.size, rest = __rest$1(_a, ["children", "className", "size"]);
7366
- var _className = classNames$1('input-group', (_b = {},
7367
- _b["input-group-".concat(size)] = size,
7368
- _b), className);
7369
- return (React__default$1.createElement("div", __assign$1({ className: _className }, rest, { ref: ref }), children));
7370
- });
7371
- CInputGroup.propTypes = {
7372
- children: PropTypes$1.node,
7373
- className: PropTypes$1.string,
7374
- size: PropTypes$1.oneOf(['sm', 'lg']),
7375
- };
7376
- CInputGroup.displayName = 'CInputGroup';
7377
-
7378
- var CInputGroupText = forwardRef(function (_a, ref) {
7379
- var children = _a.children, className = _a.className, _b = _a.component, Component = _b === void 0 ? 'span' : _b, rest = __rest$1(_a, ["children", "className", "component"]);
7380
- var _className = classNames$1('input-group-text', className);
7381
- return (React__default$1.createElement(Component, __assign$1({ className: _className }, rest, { ref: ref }), children));
7382
- });
7383
- CInputGroupText.propTypes = {
7384
- children: PropTypes$1.node,
7385
- className: PropTypes$1.string,
7386
- component: PropTypes$1.elementType,
7387
- };
7388
- CInputGroupText.displayName = 'CInputGroupText';
7389
-
7390
7407
  var CTimePickerRollCol = forwardRef(function (_a, ref) {
7391
7408
  var elements = _a.elements, onClick = _a.onClick, selected = _a.selected;
7409
+ var init = useRef(true);
7392
7410
  var colRef = useRef(null);
7393
7411
  var forkedRef = useForkedRef(ref, colRef);
7394
7412
  useEffect(function () {
7395
7413
  var _a, _b;
7396
7414
  var nodeEl = (_a = colRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('.selected');
7397
7415
  if (nodeEl && nodeEl instanceof HTMLElement) {
7398
- (_b = colRef.current) === null || _b === void 0 ? void 0 : _b.scrollTo({ top: nodeEl.offsetTop, behavior: 'smooth' });
7416
+ (_b = colRef.current) === null || _b === void 0 ? void 0 : _b.scrollTo({
7417
+ top: nodeEl.offsetTop,
7418
+ behavior: init.current ? 'auto' : 'smooth',
7419
+ });
7399
7420
  }
7421
+ init.current = false;
7400
7422
  }, [selected]);
7401
7423
  return (React__default$1.createElement("div", { className: "time-picker-roll-col", ref: forkedRef }, elements.map(function (element, index) {
7402
7424
  return (React__default$1.createElement("div", { className: classNames$1('time-picker-roll-cell', {
@@ -7424,6 +7446,9 @@ var convert12hTo24h = function (abbr, hour) {
7424
7446
  return hour + 12;
7425
7447
  };
7426
7448
  var convert24hTo12h = function (hour) { return hour % 12 || 12; };
7449
+ var convertTimeToDate = function (time) {
7450
+ return time ? (time instanceof Date ? new Date(time) : new Date("1970-01-01 ".concat(time))) : null;
7451
+ };
7427
7452
  var getAmPm = function (date, locale) {
7428
7453
  if (date.toLocaleTimeString(locale).includes('AM')) {
7429
7454
  return 'am';
@@ -7433,47 +7458,51 @@ var getAmPm = function (date, locale) {
7433
7458
  }
7434
7459
  return date.getHours() >= 12 ? 'pm' : 'am';
7435
7460
  };
7461
+ var getListOfHours = function (locale) {
7462
+ return Array.from({ length: isAmPm(locale) ? 12 : 24 }, function (_, i) {
7463
+ return {
7464
+ value: isAmPm(locale) ? i + 1 : i,
7465
+ label: (isAmPm(locale) ? i + 1 : i).toLocaleString(locale),
7466
+ };
7467
+ });
7468
+ };
7469
+ var getMinutesOrSeconds = function (locale) {
7470
+ return Array.from({ length: 60 }, function (_, i) {
7471
+ return {
7472
+ value: i,
7473
+ label: i.toLocaleString(locale).padStart(2, (0).toLocaleString(locale)),
7474
+ };
7475
+ });
7476
+ };
7477
+ var getSelectedHour = function (date, locale) {
7478
+ return date ? (isAmPm(locale) ? convert24hTo12h(date.getHours()) : date.getHours()) : '';
7479
+ };
7480
+ var getSelectedMinutes = function (date) { return (date ? date.getMinutes() : ''); };
7481
+ var getSelectedSeconds = function (date) { return (date ? date.getSeconds() : ''); };
7436
7482
  var isAmPm = function (locale) {
7437
7483
  return ['am', 'AM', 'pm', 'PM'].some(function (el) { return new Date().toLocaleString(locale).includes(el); });
7438
7484
  };
7485
+ var isValidTime = function (time) {
7486
+ var d = new Date("1970-01-01 ".concat(time));
7487
+ return d instanceof Date && d.getTime();
7488
+ };
7439
7489
 
7440
7490
  var CTimePicker = forwardRef(function (_a, ref) {
7441
7491
  var _b;
7442
- var className = _a.className, _c = _a.cleaner, cleaner = _c === void 0 ? true : _c, cleanerIcon = _a.cleanerIcon, _d = _a.container, container = _d === void 0 ? 'dropdown' : _d, defaultIcon = _a.defaultIcon, disabled = _a.disabled, _e = _a.footer, footer = _e === void 0 ? true : _e, inputReadOnly = _a.inputReadOnly, _f = _a.locale, locale = _f === void 0 ? navigator.language : _f, onChange = _a.onChange, _g = _a.placeholder, placeholder = _g === void 0 ? 'Select time' : _g, size = _a.size, value = _a.value, _h = _a.variant, variant = _h === void 0 ? 'roll' : _h, rest = __rest$1(_a, ["className", "cleaner", "cleanerIcon", "container", "defaultIcon", "disabled", "footer", "inputReadOnly", "locale", "onChange", "placeholder", "size", "value", "variant"]);
7492
+ var className = _a.className, _c = _a.cleaner, cleaner = _c === void 0 ? true : _c, _d = _a.container, container = _d === void 0 ? 'dropdown' : _d, disabled = _a.disabled, _e = _a.footer, footer = _e === void 0 ? true : _e, _f = _a.indicator, indicator = _f === void 0 ? true : _f, inputReadOnly = _a.inputReadOnly, _g = _a.locale, locale = _g === void 0 ? 'default' : _g, onTimeChange = _a.onTimeChange, onHide = _a.onHide, onShow = _a.onShow, _h = _a.placeholder, placeholder = _h === void 0 ? 'Select time' : _h, size = _a.size, time = _a.time, _j = _a.variant, variant = _j === void 0 ? 'roll' : _j, rest = __rest$1(_a, ["className", "cleaner", "container", "disabled", "footer", "indicator", "inputReadOnly", "locale", "onTimeChange", "onHide", "onShow", "placeholder", "size", "time", "variant"]);
7443
7493
  var inputRef = useRef(null);
7444
- var _j = useState(value ? (value instanceof Date ? new Date(value) : new Date("1970-01-01 ".concat(value))) : null), date = _j[0], setDate = _j[1];
7445
- var _k = useState(date ? getAmPm(new Date(date), locale) : 'am'), _ampm = _k[0], setAmPm = _k[1];
7494
+ var _k = useState(convertTimeToDate(time)), date = _k[0], setDate = _k[1];
7495
+ var _l = useState(null), initialDate = _l[0], setInitialDate = _l[1];
7496
+ var _m = useState(date ? getAmPm(new Date(date), locale) : 'am'), _ampm = _m[0], setAmPm = _m[1];
7446
7497
  useEffect(function () {
7447
- setDate(value ? (value instanceof Date ? new Date(value) : new Date("1970-01-01 ".concat(value))) : null);
7448
- }, [value]);
7498
+ setDate(convertTimeToDate(time));
7499
+ }, [time]);
7449
7500
  useEffect(function () {
7450
7501
  if (inputRef.current) {
7451
7502
  inputRef.current.value = date ? date.toLocaleTimeString(locale) : '';
7452
7503
  }
7504
+ date && setAmPm(getAmPm(new Date(date), locale));
7453
7505
  }, [date]);
7454
- var getHours = function (locale) {
7455
- return Array.from(new Array(isAmPm(locale) ? 12 : 24), function (_, i) {
7456
- return {
7457
- value: isAmPm(locale) ? i + 1 : i,
7458
- label: (isAmPm(locale) ? i + 1 : i).toLocaleString(locale),
7459
- };
7460
- });
7461
- };
7462
- var getMinutesOrSeconds = function (locale) {
7463
- return Array.from(new Array(60), function (_, i) {
7464
- return {
7465
- value: i,
7466
- label: i.toLocaleString(locale).padStart(2, (0).toLocaleString(locale)),
7467
- };
7468
- });
7469
- };
7470
- var selectedHour = date
7471
- ? isAmPm(locale)
7472
- ? convert24hTo12h(date.getHours())
7473
- : date.getHours()
7474
- : null;
7475
- var selectedMinutes = date ? date.getMinutes() : null;
7476
- var selectedSeconds = date ? date.getSeconds() : null;
7477
7506
  var handleClear = function (event) {
7478
7507
  event.stopPropagation();
7479
7508
  setDate(null);
@@ -7482,11 +7511,9 @@ var CTimePicker = forwardRef(function (_a, ref) {
7482
7511
  var _date = date || new Date('1970-01-01');
7483
7512
  if (set === 'toggle') {
7484
7513
  if (value === 'am') {
7485
- setAmPm('am');
7486
7514
  _date.setHours(_date.getHours() - 12);
7487
7515
  }
7488
7516
  if (value === 'pm') {
7489
- setAmPm('pm');
7490
7517
  _date.setHours(_date.getHours() + 12);
7491
7518
  }
7492
7519
  }
@@ -7505,42 +7532,44 @@ var CTimePicker = forwardRef(function (_a, ref) {
7505
7532
  _date.setSeconds(parseInt(value));
7506
7533
  }
7507
7534
  setDate(new Date(_date));
7508
- onChange && onChange(_date.toTimeString(), _date.toLocaleTimeString(), _date);
7535
+ onTimeChange && onTimeChange(_date.toTimeString(), _date.toLocaleTimeString(), _date);
7509
7536
  };
7510
7537
  var InputGroup = function () { return (React__default$1.createElement(CInputGroup, { className: "picker-input-group", size: size },
7511
- React__default$1.createElement(CFormInput, { disabled: disabled, placeholder: placeholder, readOnly: inputReadOnly, ref: inputRef }),
7512
- (defaultIcon !== false || cleaner) && (React__default$1.createElement(CInputGroupText, null,
7513
- defaultIcon !== false && (React__default$1.createElement("span", { className: "picker-input-group-indicator" }, defaultIcon ? (defaultIcon) : (React__default$1.createElement("span", { className: "picker-input-group-icon time-picker-input-icon" })))),
7514
- cleaner && date && (React__default$1.createElement("span", { className: "picker-input-group-cleaner", role: "button", onClick: function (event) { return handleClear(event); } }, cleanerIcon ? (cleanerIcon) : (React__default$1.createElement("span", { className: "picker-input-group-icon time-picker-cleaner-icon" })))))))); };
7538
+ React__default$1.createElement(CFormInput, { disabled: disabled, onChange: function (event) {
7539
+ return isValidTime(event.target.value) && setDate(convertTimeToDate(event.target.value));
7540
+ }, placeholder: placeholder, readOnly: inputReadOnly, ref: inputRef }),
7541
+ (indicator || cleaner) && (React__default$1.createElement(CInputGroupText, null,
7542
+ 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))),
7543
+ cleaner && date && (React__default$1.createElement("span", { className: "picker-input-group-cleaner", onClick: function (event) { return handleClear(event); }, role: "button" }, typeof cleaner === 'boolean' ? (React__default$1.createElement("span", { className: "picker-input-group-icon time-picker-cleaner-icon" })) : (cleaner))))))); };
7515
7544
  var TimePickerSelect = function () {
7516
7545
  return (React__default$1.createElement(React__default$1.Fragment, null,
7517
7546
  React__default$1.createElement("span", { className: "time-picker-inline-icon" }),
7518
- React__default$1.createElement(CFormSelect, { disabled: disabled, options: getHours(locale).map(function (option) {
7547
+ React__default$1.createElement(CFormSelect, { disabled: disabled, options: getListOfHours(locale).map(function (option) {
7519
7548
  return {
7520
7549
  value: option.value.toString(),
7521
7550
  label: option.label,
7522
7551
  };
7523
7552
  }), onChange: function (event) {
7524
7553
  return handleTimeChange('hours', event.target.value);
7525
- }, value: selectedHour ? selectedHour : '0' }),
7526
- React__default$1.createElement("span", { className: "px-1" }, ":"),
7527
- React__default$1.createElement(CFormSelect, { disabled: disabled, options: Array.from(new Array(60), function (_, i) {
7554
+ }, value: getSelectedHour(date, locale) }),
7555
+ React__default$1.createElement(React__default$1.Fragment, null, ":"),
7556
+ React__default$1.createElement(CFormSelect, { disabled: disabled, options: Array.from({ length: 60 }, function (_, i) {
7528
7557
  return {
7529
7558
  value: i.toString(),
7530
7559
  label: i.toLocaleString(locale).padStart(2, (0).toLocaleString(locale)),
7531
7560
  };
7532
7561
  }), onChange: function (event) {
7533
7562
  return handleTimeChange('minutes', event.target.value);
7534
- }, value: selectedMinutes ? selectedMinutes : '0' }),
7535
- React__default$1.createElement("span", { className: "px-1" }, ":"),
7536
- React__default$1.createElement(CFormSelect, { disabled: disabled, options: Array.from(new Array(60), function (_, i) {
7563
+ }, value: getSelectedMinutes(date) }),
7564
+ React__default$1.createElement(React__default$1.Fragment, null, ":"),
7565
+ React__default$1.createElement(CFormSelect, { disabled: disabled, options: Array.from({ length: 60 }, function (_, i) {
7537
7566
  return {
7538
7567
  value: i.toString(),
7539
7568
  label: i.toLocaleString(locale).padStart(2, (0).toLocaleString(locale)),
7540
7569
  };
7541
7570
  }), onChange: function (event) {
7542
7571
  return handleTimeChange('seconds', event.target.value);
7543
- }, value: selectedSeconds ? selectedSeconds : '0' }),
7572
+ }, value: getSelectedSeconds(date) }),
7544
7573
  isAmPm(locale) && (React__default$1.createElement(CFormSelect, { disabled: disabled, options: [
7545
7574
  { value: 'am', label: 'AM' },
7546
7575
  { value: 'pm', label: 'PM' },
@@ -7549,39 +7578,39 @@ var CTimePicker = forwardRef(function (_a, ref) {
7549
7578
  }, value: _ampm }))));
7550
7579
  };
7551
7580
  var TimePickerRoll = function () { return (React__default$1.createElement(React__default$1.Fragment, null,
7552
- React__default$1.createElement(CTimePickerRollCol, { elements: getHours(locale), onClick: function (index) { return handleTimeChange('hours', index.toString()); }, selected: selectedHour }),
7553
- React__default$1.createElement(CTimePickerRollCol, { elements: getMinutesOrSeconds(locale), selected: selectedMinutes, onClick: function (index) { return handleTimeChange('minutes', index.toString()); } }),
7554
- React__default$1.createElement(CTimePickerRollCol, { elements: getMinutesOrSeconds(locale), selected: selectedSeconds, onClick: function (index) { return handleTimeChange('seconds', index.toString()); } }),
7581
+ React__default$1.createElement(CTimePickerRollCol, { elements: getListOfHours(locale), onClick: function (index) { return handleTimeChange('hours', index.toString()); }, selected: getSelectedHour(date, locale) }),
7582
+ React__default$1.createElement(CTimePickerRollCol, { elements: getMinutesOrSeconds(locale), onClick: function (index) { return handleTimeChange('minutes', index.toString()); }, selected: getSelectedMinutes(date) }),
7583
+ React__default$1.createElement(CTimePickerRollCol, { elements: getMinutesOrSeconds(locale), onClick: function (index) { return handleTimeChange('seconds', index.toString()); }, selected: getSelectedSeconds(date) }),
7555
7584
  isAmPm(locale) && (React__default$1.createElement(CTimePickerRollCol, { elements: [
7556
7585
  { value: 'am', label: 'AM' },
7557
7586
  { value: 'pm', label: 'PM' },
7558
- ], selected: _ampm, onClick: function (value) { return handleTimeChange('toggle', value); } })))); };
7587
+ ], onClick: function (value) { return handleTimeChange('toggle', value); }, selected: _ampm })))); };
7559
7588
  var _className = classNames$1('time-picker', className);
7560
- return (React__default$1.createElement(CPicker, __assign$1({ className: _className, container: container, disabled: disabled, footer: footer, onCancelClick: function () {
7561
- setDate(value
7562
- ? value instanceof Date
7563
- ? new Date(value)
7564
- : new Date("1970-01-01 ".concat(value))
7565
- : new Date());
7589
+ return (React__default$1.createElement(CPicker, __assign$1({ className: _className, container: container, disabled: disabled, footer: footer, onCancel: function () { return initialDate && setDate(new Date(initialDate)); }, onHide: function () { return onHide && onHide(); }, onShow: function () {
7590
+ date && setInitialDate(new Date(date));
7591
+ onShow && onShow();
7566
7592
  }, toggler: InputGroup() }, rest, { ref: ref }),
7567
7593
  React__default$1.createElement("div", { className: classNames$1('time-picker-body', (_b = {},
7568
7594
  _b['time-picker-roll'] = variant === 'roll',
7569
7595
  _b)) }, variant === 'select' ? React__default$1.createElement(TimePickerSelect, null) : TimePickerRoll())));
7570
7596
  });
7571
- CTimePicker.propTypes = __assign$1(__assign$1({}, CPicker.propTypes), { className: PropTypes$1.string, locale: PropTypes$1.string, onChange: PropTypes$1.func, value: PropTypes$1.oneOfType([PropTypes$1.instanceOf(Date), PropTypes$1.string]), variant: PropTypes$1.oneOf(['roll', 'select']) });
7597
+ CTimePicker.propTypes = __assign$1(__assign$1({}, CPicker.propTypes), { className: PropTypes$1.string, locale: PropTypes$1.string, onTimeChange: PropTypes$1.func, time: PropTypes$1.oneOfType([PropTypes$1.instanceOf(Date), PropTypes$1.string]), variant: PropTypes$1.oneOf(['roll', 'select']) });
7572
7598
  CTimePicker.displayName = 'CTimePicker';
7573
7599
 
7600
+ var _a, _b, _c;
7574
7601
  var CDateRangePicker = forwardRef(function (_a, ref) {
7575
- var _b = _a.calendars, calendars = _b === void 0 ? 2 : _b, className = _a.className, _c = _a.cleaner, cleaner = _c === void 0 ? true : _c, cleanerIcon = _a.cleanerIcon, calendarDate = _a.calendarDate, disabled = _a.disabled, disabledDates = _a.disabledDates, endDate = _a.endDate, defaultIcon = _a.defaultIcon, infixIcon = _a.infixIcon, inputReadOnly = _a.inputReadOnly, _d = _a.locale, locale = _d === void 0 ? navigator.language : _d, maxDate = _a.maxDate, minDate = _a.minDate, onEndDateChange = _a.onEndDateChange, onHide = _a.onHide, onStartDateChange = _a.onStartDateChange, onShow = _a.onShow, _e = _a.placeholder, placeholder = _e === void 0 ? ['Start date', 'End date'] : _e, _f = _a.range, range = _f === void 0 ? true : _f, ranges = _a.ranges, size = _a.size, startDate = _a.startDate, timepicker = _a.timepicker, toggler = _a.toggler, visible = _a.visible, rest = __rest$1(_a, ["calendars", "className", "cleaner", "cleanerIcon", "calendarDate", "disabled", "disabledDates", "endDate", "defaultIcon", "infixIcon", "inputReadOnly", "locale", "maxDate", "minDate", "onEndDateChange", "onHide", "onStartDateChange", "onShow", "placeholder", "range", "ranges", "size", "startDate", "timepicker", "toggler", "visible"]);
7602
+ 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.indicator, indicator = _d === void 0 ? true : _d, disabled = _a.disabled, disabledDates = _a.disabledDates, endDate = _a.endDate, firstDayOfWeek = _a.firstDayOfWeek, footer = _a.footer, inputReadOnly = _a.inputReadOnly, _e = _a.locale, locale = _e === void 0 ? 'default' : _e, maxDate = _a.maxDate, minDate = _a.minDate, navigation = _a.navigation, onEndDateChange = _a.onEndDateChange, onHide = _a.onHide, onStartDateChange = _a.onStartDateChange, onShow = _a.onShow, _f = _a.placeholder, placeholder = _f === void 0 ? ['Start date', 'End date'] : _f, _g = _a.range, range = _g === void 0 ? true : _g, ranges = _a.ranges, _h = _a.rangesButtonsColor, rangesButtonsColor = _h === void 0 ? 'secondary' : _h, rangesButtonsSize = _a.rangesButtonsSize, _j = _a.rangesButtonsVariant, rangesButtonsVariant = _j === void 0 ? 'ghost' : _j, _k = _a.separator, separator = _k === void 0 ? true : _k, size = _a.size, startDate = _a.startDate, timepicker = _a.timepicker, toggler = _a.toggler, visible = _a.visible, rest = __rest$1(_a, ["calendars", "className", "cleaner", "calendarDate", "indicator", "disabled", "disabledDates", "endDate", "firstDayOfWeek", "footer", "inputReadOnly", "locale", "maxDate", "minDate", "navigation", "onEndDateChange", "onHide", "onStartDateChange", "onShow", "placeholder", "range", "ranges", "rangesButtonsColor", "rangesButtonsSize", "rangesButtonsVariant", "separator", "size", "startDate", "timepicker", "toggler", "visible"]);
7603
+ var _l = useState(visible), _visible = _l[0], setVisible = _l[1];
7576
7604
  var inputStartRef = useRef(null);
7577
7605
  var inputEndRef = useRef(null);
7578
- var _g = useState(visible), _visible = _g[0], setVisible = _g[1];
7579
- var _h = useState(startDate ? new Date(startDate) : null), _startDate = _h[0], setStartDate = _h[1];
7580
- var _j = useState(endDate ? new Date(endDate) : null), _endDate = _j[0], setEndDate = _j[1];
7581
- var _k = useState(null), inputHoverValue = _k[0], setInputHoverValue = _k[1];
7582
- var _l = useState(null), inputToHoverValue = _l[0], setInputToHoverValue = _l[1];
7583
- var _m = useState(false), selectEndDate = _m[0], setSelectEndDate = _m[1];
7584
- var _o = useState(calendarDate ? new Date(calendarDate) : new Date()), _calendarDate = _o[0], setCalendarDate = _o[1];
7606
+ var _m = useState(null), inputStartHoverValue = _m[0], setInputStartHoverValue = _m[1];
7607
+ var _o = useState(null), inputEndHoverValue = _o[0], setInputEndHoverValue = _o[1];
7608
+ var _p = useState(calendarDate ? new Date(calendarDate) : new Date()), _calendarDate = _p[0], setCalendarDate = _p[1];
7609
+ var _q = useState(startDate ? new Date(startDate) : null), _startDate = _q[0], setStartDate = _q[1];
7610
+ var _r = useState(endDate ? new Date(endDate) : null), _endDate = _r[0], setEndDate = _r[1];
7611
+ var _s = useState(startDate ? new Date(startDate) : null), initialStartDate = _s[0], setInitialStartDate = _s[1];
7612
+ var _t = useState(endDate ? new Date(endDate) : null), initialEndDate = _t[0], setInitialEndDate = _t[1];
7613
+ var _u = useState(false), selectEndDate = _u[0], setSelectEndDate = _u[1];
7585
7614
  useEffect(function () {
7586
7615
  startDate && setCalendarDate(new Date(startDate));
7587
7616
  }, [startDate]);
@@ -7589,39 +7618,32 @@ var CDateRangePicker = forwardRef(function (_a, ref) {
7589
7618
  endDate && setCalendarDate(new Date(endDate));
7590
7619
  }, [endDate]);
7591
7620
  useEffect(function () {
7592
- _visible && onShow && onShow();
7593
- !_visible && onHide && onHide();
7594
- }, [_visible]);
7595
- useEffect(function () {
7596
- if (inputStartRef.current) {
7597
- if (inputHoverValue) {
7598
- inputStartRef.current.value = convertToLocalDate(inputHoverValue, locale);
7599
- return;
7600
- }
7601
- if (_startDate) {
7602
- inputStartRef.current.value = timepicker
7603
- ? _startDate.toLocaleString(locale)
7604
- : _startDate.toLocaleDateString(locale);
7605
- return;
7606
- }
7607
- inputStartRef.current.value = '';
7621
+ if (inputStartHoverValue) {
7622
+ setInputValue(inputStartRef.current, inputStartHoverValue, timepicker);
7623
+ return;
7608
7624
  }
7609
- }, [inputHoverValue, _startDate]);
7625
+ setInputValue(inputStartRef.current, _startDate, timepicker);
7626
+ }, [inputStartHoverValue, _startDate]);
7610
7627
  useEffect(function () {
7611
- if (inputEndRef.current) {
7612
- if (inputToHoverValue) {
7613
- inputEndRef.current.value = convertToLocalDate(inputToHoverValue, locale);
7614
- return;
7615
- }
7616
- if (_endDate) {
7617
- inputEndRef.current.value = timepicker
7618
- ? _endDate.toLocaleString(locale)
7619
- : _endDate.toLocaleDateString(locale);
7620
- return;
7621
- }
7622
- inputEndRef.current.value = '';
7628
+ if (inputEndHoverValue) {
7629
+ setInputValue(inputEndRef.current, inputEndHoverValue, timepicker);
7630
+ return;
7631
+ }
7632
+ setInputValue(inputEndRef.current, _endDate, timepicker);
7633
+ }, [inputEndHoverValue, _endDate]);
7634
+ var setInputValue = function (el, date, timepicker) {
7635
+ if (!el) {
7636
+ return;
7623
7637
  }
7624
- }, [inputToHoverValue, _endDate]);
7638
+ if (date) {
7639
+ el.value = timepicker ? date.toLocaleString(locale) : date.toLocaleDateString(locale);
7640
+ return;
7641
+ }
7642
+ el.value = '';
7643
+ };
7644
+ var handleCalendarCellHover = function (date) {
7645
+ selectEndDate ? setInputEndHoverValue(date) : setInputStartHoverValue(date);
7646
+ };
7625
7647
  var handleCalendarDateChange = function (date, difference) {
7626
7648
  difference
7627
7649
  ? setCalendarDate(new Date(date.getFullYear(), date.getMonth() - difference, 1))
@@ -7631,65 +7653,80 @@ var CDateRangePicker = forwardRef(function (_a, ref) {
7631
7653
  setStartDate(date);
7632
7654
  range && setSelectEndDate(true);
7633
7655
  onStartDateChange && onStartDateChange(date);
7634
- setInputHoverValue(null);
7656
+ setInputStartHoverValue(null);
7635
7657
  };
7636
7658
  var handleEndDateChange = function (date) {
7637
7659
  setEndDate(date);
7638
7660
  setSelectEndDate(false);
7639
7661
  onEndDateChange && onEndDateChange(date);
7640
- setInputToHoverValue(null);
7641
- if (timepicker !== true) {
7662
+ setInputEndHoverValue(null);
7663
+ if (timepicker !== true && footer !== true) {
7642
7664
  _startDate !== null && setVisible(false);
7643
7665
  }
7644
7666
  };
7645
- var handleCalendarCellHover = function (date) {
7646
- selectEndDate ? setInputToHoverValue(date) : setInputHoverValue(date);
7647
- };
7648
7667
  var handleClear = function (event) {
7649
7668
  event.stopPropagation();
7650
- setStartDate(null);
7651
- setEndDate(null);
7652
- setInputHoverValue(null);
7653
- setInputToHoverValue(null);
7669
+ setStartDate(initialStartDate);
7670
+ setEndDate(initialEndDate);
7671
+ setInputStartHoverValue(null);
7672
+ setInputEndHoverValue(null);
7654
7673
  };
7655
7674
  var _className = classNames$1('date-picker', className);
7656
7675
  var InputGroup = function () { return (React__default$1.createElement(CInputGroup, { className: "picker-input-group", size: size },
7657
7676
  React__default$1.createElement(CFormInput, { className: classNames$1({
7658
- hover: inputHoverValue,
7659
- }), disabled: disabled, placeholder: Array.isArray(placeholder) ? placeholder[0] : placeholder, readOnly: inputReadOnly, onClick: function () { return setSelectEndDate(false); }, ref: inputStartRef }),
7660
- range && infixIcon !== false && (React__default$1.createElement(CInputGroupText, null, infixIcon ? (infixIcon) : (React__default$1.createElement("span", { className: "picker-input-group-icon date-picker-arrow-icon" })))),
7677
+ hover: inputStartHoverValue,
7678
+ }), disabled: disabled, placeholder: Array.isArray(placeholder) ? placeholder[0] : placeholder, readOnly: inputReadOnly, onChange: function (event) {
7679
+ if (isValidDate(event.target.value)) {
7680
+ setCalendarDate(new Date(event.target.value));
7681
+ setStartDate(new Date(event.target.value));
7682
+ }
7683
+ }, onClick: function () { return setSelectEndDate(false); }, ref: inputStartRef }),
7684
+ 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))),
7661
7685
  range && (React__default$1.createElement(CFormInput, { className: classNames$1({
7662
- hover: inputToHoverValue,
7663
- }), disabled: disabled, placeholder: placeholder[1], readOnly: inputReadOnly, onClick: function () { return setSelectEndDate(true); }, ref: inputEndRef })),
7664
- (defaultIcon !== false || cleaner) && (React__default$1.createElement(CInputGroupText, null,
7665
- defaultIcon !== false && (React__default$1.createElement("span", { className: "picker-input-group-indicator" }, defaultIcon ? (defaultIcon) : (React__default$1.createElement("span", { className: "picker-input-group-icon date-picker-input-icon" })))),
7666
- cleaner && _startDate && (React__default$1.createElement("span", { className: "picker-input-group-cleaner", role: "button", onClick: function (event) { return handleClear(event); } }, cleanerIcon ? (cleanerIcon) : (React__default$1.createElement("span", { className: "picker-input-group-icon date-picker-cleaner-icon" })))))))); };
7667
- return (React__default$1.createElement(CPicker, __assign$1({ className: _className, disabled: disabled, footer: timepicker, toggler: toggler ? toggler : InputGroup(), onCancelClick: function () {
7668
- handleStartDateChange(startDate ? new Date(startDate) : null);
7669
- handleEndDateChange(endDate ? new Date(endDate) : null);
7686
+ hover: inputEndHoverValue,
7687
+ }), disabled: disabled, placeholder: placeholder[1], readOnly: inputReadOnly, onChange: function (event) {
7688
+ if (isValidDate(event.target.value)) {
7689
+ setCalendarDate(new Date(event.target.value));
7690
+ setEndDate(new Date(event.target.value));
7691
+ }
7692
+ }, onClick: function () { return setSelectEndDate(true); }, ref: inputEndRef })),
7693
+ (indicator || cleaner) && (React__default$1.createElement(CInputGroupText, null,
7694
+ indicator && (React__default$1.createElement("span", { className: "picker-input-group-indicator" }, typeof indicator === 'boolean' ? (React__default$1.createElement("span", { className: "picker-input-group-icon date-picker-input-icon" })) : (indicator))),
7695
+ cleaner && _startDate && (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 date-picker-cleaner-icon" })) : (cleaner))))))); };
7696
+ return (React__default$1.createElement(CPicker, __assign$1({ className: _className, disabled: disabled, footer: footer || timepicker, toggler: toggler ? toggler : InputGroup(), onCancel: function () {
7697
+ handleStartDateChange(initialStartDate);
7698
+ handleEndDateChange(initialEndDate);
7699
+ }, onHide: function () {
7700
+ setInputStartHoverValue(null);
7701
+ setInputEndHoverValue(null);
7702
+ onHide && onHide();
7703
+ }, onShow: function () {
7704
+ setInitialStartDate(_startDate);
7705
+ setInitialEndDate(_endDate);
7706
+ onShow && onShow();
7670
7707
  }, visible: _visible }, rest, { ref: ref }),
7671
7708
  React__default$1.createElement("div", { className: "date-picker-body" },
7672
- ranges && (React__default$1.createElement("div", { className: "date-picker-ranges" }, Object.keys(ranges).map(function (key, index) { return (React__default$1.createElement(CButton, { color: "secondary", key: index, onClick: function () {
7709
+ ranges && (React__default$1.createElement("div", { className: "date-picker-ranges" }, Object.keys(ranges).map(function (key, index) { return (React__default$1.createElement(CButton, { color: rangesButtonsColor, key: index, onClick: function () {
7673
7710
  setStartDate(ranges[key][0]);
7674
7711
  setEndDate(ranges[key][1]);
7675
- }, variant: "ghost" }, key)); }))),
7712
+ }, size: rangesButtonsSize, variant: rangesButtonsVariant }, key)); }))),
7676
7713
  React__default$1.createElement("div", { className: "date-picker-calendars" }, __spreadArray([], Array(isMobile_1 ? 1 : calendars), true).map(function (_, index) { return (React__default$1.createElement("div", { className: "date-picker-calendar", key: index },
7677
- React__default$1.createElement(CCalendar, { calendarDate: new Date(_calendarDate.getFullYear(), _calendarDate.getMonth() + index, 1), disabledDates: disabledDates, endDate: _endDate, locale: locale, maxDate: maxDate, minDate: minDate, range: range, selectEndDate: selectEndDate, startDate: _startDate, onCalendarCellHover: function (date) { return handleCalendarCellHover(date); }, onCalendarDateChange: function (date) { return handleCalendarDateChange(date, index); }, onStartDateChange: function (date) { return handleStartDateChange(date); }, onEndDateChange: function (date) { return handleEndDateChange(date); } }),
7714
+ React__default$1.createElement(CCalendar, { calendarDate: new Date(_calendarDate.getFullYear(), _calendarDate.getMonth() + index, 1), disabledDates: disabledDates, endDate: _endDate, firstDayOfWeek: firstDayOfWeek, locale: locale, maxDate: maxDate, minDate: minDate, navigation: navigation, range: range, selectEndDate: selectEndDate, startDate: _startDate, onCalendarCellHover: function (date) { return handleCalendarCellHover(date); }, onCalendarDateChange: function (date) { return handleCalendarDateChange(date, index); }, onStartDateChange: function (date) { return handleStartDateChange(date); }, onEndDateChange: function (date) { return handleEndDateChange(date); } }),
7678
7715
  !isMobile_1 && timepicker && (index === 0 || calendars - index === 1) && (React__default$1.createElement(CTimePicker, { container: "inline", disabled: index === 0
7679
7716
  ? _startDate === null
7680
7717
  ? true
7681
7718
  : false
7682
7719
  : _endDate === null
7683
7720
  ? true
7684
- : false, locale: locale, onChange: function (_, __, date) {
7721
+ : false, locale: locale, onTimeChange: function (_, __, date) {
7685
7722
  return index === 0 ? handleStartDateChange(date) : handleEndDateChange(date);
7686
- }, value: index === 0 ? _startDate : _endDate, variant: "select" })),
7723
+ }, time: index === 0 ? _startDate : _endDate, variant: "select" })),
7687
7724
  isMobile_1 && timepicker && (React__default$1.createElement(React__default$1.Fragment, null,
7688
- React__default$1.createElement(CTimePicker, { container: "inline", disabled: _startDate === null ? true : false, locale: locale, onChange: function (_, __, date) { return handleStartDateChange(date); }, value: _startDate, variant: "select" }),
7689
- React__default$1.createElement(CTimePicker, { container: "inline", disabled: _endDate === null ? true : false, locale: locale, onChange: function (_, __, date) { return handleEndDateChange(date); }, value: _endDate, variant: "select" }))))); })))));
7725
+ React__default$1.createElement(CTimePicker, { container: "inline", disabled: _startDate === null ? true : false, locale: locale, onTimeChange: function (_, __, date) { return handleStartDateChange(date); }, time: _startDate, variant: "select" }),
7726
+ React__default$1.createElement(CTimePicker, { container: "inline", disabled: _endDate === null ? true : false, locale: locale, onTimeChange: function (_, __, date) { return handleEndDateChange(date); }, time: _endDate, variant: "select" }))))); })))));
7690
7727
  });
7691
7728
  CDateRangePicker.displayName = 'CDateRangePicker';
7692
- CDateRangePicker.propTypes = __assign$1(__assign$1(__assign$1({}, CCalendar.propTypes), CPicker.propTypes), { calendars: PropTypes$1.number, inputReadOnly: PropTypes$1.bool, placeholder: PropTypes$1.oneOfType([PropTypes$1.string, PropTypes$1.arrayOf(PropTypes$1.any)]), range: PropTypes$1.bool, ranges: PropTypes$1.object, timepicker: PropTypes$1.bool });
7729
+ CDateRangePicker.propTypes = __assign$1(__assign$1(__assign$1({}, CCalendar.propTypes), CPicker.propTypes), { calendars: PropTypes$1.number, className: PropTypes$1.string, cleaner: PropTypes$1.bool, indicator: PropTypes$1.oneOfType([PropTypes$1.bool, PropTypes$1.node]), inputReadOnly: PropTypes$1.bool, placeholder: PropTypes$1.oneOfType([PropTypes$1.string, PropTypes$1.arrayOf(PropTypes$1.any)]), range: PropTypes$1.bool, ranges: PropTypes$1.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: PropTypes$1.oneOfType([PropTypes$1.bool, PropTypes$1.node]), size: PropTypes$1.oneOf(['sm', 'lg']), timepicker: PropTypes$1.bool });
7693
7730
 
7694
7731
  var CDatePicker = forwardRef(function (_a, ref) {
7695
7732
  var date = _a.date, onDateChange = _a.onDateChange, _b = _a.placeholder, placeholder = _b === void 0 ? 'Select date' : _b, rest = __rest$1(_a, ["date", "onDateChange", "placeholder"]);