@coreui/react 4.9.0-alpha.0 → 4.9.0-beta.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 (35) hide show
  1. package/README.md +1 -1
  2. package/dist/components/accordion/index.d.ts +1 -1
  3. package/dist/components/tooltip/CTooltip.d.ts +2 -2
  4. package/dist/hooks/index.d.ts +2 -1
  5. package/dist/hooks/useColorModes.d.ts +6 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.es.js +184 -243
  8. package/dist/index.es.js.map +1 -1
  9. package/dist/index.js +185 -242
  10. package/dist/index.js.map +1 -1
  11. package/dist/props.d.ts +1 -1
  12. package/dist/utils/index.d.ts +2 -1
  13. package/dist/utils/isRTL.d.ts +2 -0
  14. package/package.json +9 -9
  15. package/src/components/accordion/index.ts +1 -7
  16. package/src/components/dropdown/CDropdownMenu.tsx +5 -4
  17. package/src/components/form/CFormSelect.tsx +3 -1
  18. package/src/components/modal/CModal.tsx +2 -0
  19. package/src/components/popover/CPopover.tsx +60 -25
  20. package/src/components/popover/__tests__/__snapshots__/CPopover.spec.tsx.snap +2 -1
  21. package/src/components/progress/CProgress.tsx +1 -0
  22. package/src/components/sidebar/CSidebar.tsx +2 -2
  23. package/src/components/spinner/CSpinner.tsx +4 -2
  24. package/src/components/spinner/__tests__/__snapshots__/CSpinner.spec.tsx.snap +2 -2
  25. package/src/components/table/CTable.tsx +2 -1
  26. package/src/components/tooltip/CTooltip.tsx +64 -30
  27. package/src/components/tooltip/__tests__/CTooltip.spec.tsx +1 -1
  28. package/src/hooks/index.ts +2 -1
  29. package/src/hooks/useColorModes.ts +55 -0
  30. package/src/hooks/useForkedRef.ts +1 -1
  31. package/src/index.ts +1 -0
  32. package/src/props.ts +4 -1
  33. package/src/utils/index.ts +2 -1
  34. package/src/utils/isRTL.ts +13 -0
  35. package/src/components/accordion/__tests__/__snapshots__/CAccordionCollapse.spec.tsx.snap +0 -11
package/dist/index.es.js CHANGED
@@ -2472,6 +2472,46 @@ CSSTransition.propTypes = process.env.NODE_ENV !== "production" ? _extends({}, T
2472
2472
  }) : {};
2473
2473
  var CSSTransition$1 = CSSTransition;
2474
2474
 
2475
+ var getStoredTheme = function (localStorageItemName) { return localStorage.getItem(localStorageItemName); };
2476
+ var setStoredTheme = function (localStorageItemName, colorMode) {
2477
+ return localStorage.setItem(localStorageItemName, colorMode);
2478
+ };
2479
+ var getPreferredColorScheme = function (localStorageItemName) {
2480
+ var storedTheme = getStoredTheme(localStorageItemName);
2481
+ if (storedTheme) {
2482
+ return storedTheme;
2483
+ }
2484
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
2485
+ };
2486
+ var setTheme = function (colorMode) {
2487
+ document.documentElement.dataset.coreuiTheme =
2488
+ colorMode === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches
2489
+ ? 'dark'
2490
+ : colorMode;
2491
+ var event = new Event('ColorSchemeChange');
2492
+ document.documentElement.dispatchEvent(event);
2493
+ };
2494
+ var useColorModes = function (localStorageItemName) {
2495
+ if (localStorageItemName === void 0) { localStorageItemName = 'coreui-react-color-scheme'; }
2496
+ var _a = useState(getPreferredColorScheme(localStorageItemName)), colorMode = _a[0], setColorMode = _a[1];
2497
+ useEffect(function () {
2498
+ setStoredTheme(localStorageItemName, colorMode);
2499
+ setTheme(colorMode);
2500
+ }, [colorMode]);
2501
+ useEffect(function () {
2502
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function () {
2503
+ var storedTheme = getStoredTheme(localStorageItemName);
2504
+ if (storedTheme !== 'light' && storedTheme !== 'dark') {
2505
+ setTheme(colorMode);
2506
+ }
2507
+ });
2508
+ }, []);
2509
+ return {
2510
+ getColorMode: function () { return colorMode; },
2511
+ setColorMode: function (mode) { return setColorMode(mode); },
2512
+ };
2513
+ };
2514
+
2475
2515
  // code borrowed from https://github.com/reach/reach-ui
2476
2516
  // problem described https://github.com/facebook/react/issues/13029
2477
2517
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -2505,7 +2545,7 @@ value) {
2505
2545
  try {
2506
2546
  ref.current = value;
2507
2547
  }
2508
- catch (error) {
2548
+ catch (_a) {
2509
2549
  throw new Error("Cannot assign value \"".concat(value, "\" to ref \"").concat(ref, "\""));
2510
2550
  }
2511
2551
  }
@@ -2677,7 +2717,10 @@ var textColorsPropType = PropTypes.oneOfType([
2677
2717
  PropTypes.oneOf(['white', 'muted']),
2678
2718
  PropTypes.string,
2679
2719
  ]);
2680
- var triggerPropType = PropTypes.oneOf(['hover', 'focus', 'click']);
2720
+ var triggerPropType = PropTypes.oneOfType([
2721
+ PropTypes.arrayOf(PropTypes.oneOf(['hover', 'focus', 'click']).isRequired),
2722
+ PropTypes.oneOf(['hover', 'focus', 'click']),
2723
+ ]);
2681
2724
 
2682
2725
  var CAlert = forwardRef(function (_a, ref) {
2683
2726
  var children = _a.children, className = _a.className, _b = _a.color, color = _b === void 0 ? 'primary' : _b, dismissible = _a.dismissible, variant = _a.variant, _c = _a.visible, visible = _c === void 0 ? true : _c, onClose = _a.onClose, rest = __rest(_a, ["children", "className", "color", "dismissible", "variant", "visible", "onClose"]);
@@ -3021,6 +3064,16 @@ var isInViewport = function (element) {
3021
3064
  Math.floor(rect.right) <= (window.innerWidth || document.documentElement.clientWidth));
3022
3065
  };
3023
3066
 
3067
+ var isRTL = function (element) {
3068
+ if (typeof document !== 'undefined' && document.documentElement.dir === 'rtl') {
3069
+ return true;
3070
+ }
3071
+ if (element) {
3072
+ return element.closest('[dir="rtl"]') !== null;
3073
+ }
3074
+ return false;
3075
+ };
3076
+
3024
3077
  var CCarouselContext = createContext({});
3025
3078
  var CCarousel = forwardRef(function (_a, ref) {
3026
3079
  var children = _a.children, _b = _a.activeIndex, activeIndex = _b === void 0 ? 0 : _b, className = _a.className, controls = _a.controls, dark = _a.dark, indicators = _a.indicators, _c = _a.interval, interval = _c === void 0 ? 5000 : _c, onSlid = _a.onSlid, onSlide = _a.onSlide, _d = _a.pause, pause = _d === void 0 ? 'hover' : _d, _e = _a.touch, touch = _e === void 0 ? true : _e, transition = _a.transition, _f = _a.wrap, wrap = _f === void 0 ? true : _f, rest = __rest(_a, ["children", "activeIndex", "className", "controls", "dark", "indicators", "interval", "onSlid", "onSlide", "pause", "touch", "transition", "wrap"]);
@@ -3797,17 +3850,7 @@ function effect$1(_ref2) {
3797
3850
  }
3798
3851
  }
3799
3852
 
3800
- if (process.env.NODE_ENV !== "production") {
3801
- if (!isHTMLElement(arrowElement)) {
3802
- console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));
3803
- }
3804
- }
3805
-
3806
3853
  if (!contains(state.elements.popper, arrowElement)) {
3807
- if (process.env.NODE_ENV !== "production") {
3808
- console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' '));
3809
- }
3810
-
3811
3854
  return;
3812
3855
  }
3813
3856
 
@@ -3949,17 +3992,6 @@ function computeStyles(_ref5) {
3949
3992
  adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
3950
3993
  _options$roundOffsets = options.roundOffsets,
3951
3994
  roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
3952
-
3953
- if (process.env.NODE_ENV !== "production") {
3954
- var transitionProperty = getComputedStyle$1(state.elements.popper).transitionProperty || '';
3955
-
3956
- if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {
3957
- return transitionProperty.indexOf(property) >= 0;
3958
- })) {
3959
- console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));
3960
- }
3961
- }
3962
-
3963
3995
  var commonStyles = {
3964
3996
  placement: getBasePlacement(state.placement),
3965
3997
  variation: getVariation(state.placement),
@@ -4400,10 +4432,6 @@ function computeAutoPlacement(state, options) {
4400
4432
 
4401
4433
  if (allowedPlacements.length === 0) {
4402
4434
  allowedPlacements = placements$1;
4403
-
4404
- if (process.env.NODE_ENV !== "production") {
4405
- console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' '));
4406
- }
4407
4435
  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
4408
4436
 
4409
4437
 
@@ -4955,108 +4983,6 @@ function debounce(fn) {
4955
4983
  };
4956
4984
  }
4957
4985
 
4958
- function format(str) {
4959
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
4960
- args[_key - 1] = arguments[_key];
4961
- }
4962
-
4963
- return [].concat(args).reduce(function (p, c) {
4964
- return p.replace(/%s/, c);
4965
- }, str);
4966
- }
4967
-
4968
- var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s';
4969
- var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available';
4970
- var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];
4971
- function validateModifiers(modifiers) {
4972
- modifiers.forEach(function (modifier) {
4973
- [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)`
4974
- .filter(function (value, index, self) {
4975
- return self.indexOf(value) === index;
4976
- }).forEach(function (key) {
4977
- switch (key) {
4978
- case 'name':
4979
- if (typeof modifier.name !== 'string') {
4980
- console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\""));
4981
- }
4982
-
4983
- break;
4984
-
4985
- case 'enabled':
4986
- if (typeof modifier.enabled !== 'boolean') {
4987
- console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\""));
4988
- }
4989
-
4990
- break;
4991
-
4992
- case 'phase':
4993
- if (modifierPhases.indexOf(modifier.phase) < 0) {
4994
- console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(', '), "\"" + String(modifier.phase) + "\""));
4995
- }
4996
-
4997
- break;
4998
-
4999
- case 'fn':
5000
- if (typeof modifier.fn !== 'function') {
5001
- console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\""));
5002
- }
5003
-
5004
- break;
5005
-
5006
- case 'effect':
5007
- if (modifier.effect != null && typeof modifier.effect !== 'function') {
5008
- console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\""));
5009
- }
5010
-
5011
- break;
5012
-
5013
- case 'requires':
5014
- if (modifier.requires != null && !Array.isArray(modifier.requires)) {
5015
- console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\""));
5016
- }
5017
-
5018
- break;
5019
-
5020
- case 'requiresIfExists':
5021
- if (!Array.isArray(modifier.requiresIfExists)) {
5022
- console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\""));
5023
- }
5024
-
5025
- break;
5026
-
5027
- case 'options':
5028
- case 'data':
5029
- break;
5030
-
5031
- default:
5032
- console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) {
5033
- return "\"" + s + "\"";
5034
- }).join(', ') + "; but \"" + key + "\" was provided.");
5035
- }
5036
-
5037
- modifier.requires && modifier.requires.forEach(function (requirement) {
5038
- if (modifiers.find(function (mod) {
5039
- return mod.name === requirement;
5040
- }) == null) {
5041
- console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));
5042
- }
5043
- });
5044
- });
5045
- });
5046
- }
5047
-
5048
- function uniqueBy(arr, fn) {
5049
- var identifiers = new Set();
5050
- return arr.filter(function (item) {
5051
- var identifier = fn(item);
5052
-
5053
- if (!identifiers.has(identifier)) {
5054
- identifiers.add(identifier);
5055
- return true;
5056
- }
5057
- });
5058
- }
5059
-
5060
4986
  function mergeByName(modifiers) {
5061
4987
  var merged = modifiers.reduce(function (merged, current) {
5062
4988
  var existing = merged[current.name];
@@ -5072,8 +4998,6 @@ function mergeByName(modifiers) {
5072
4998
  });
5073
4999
  }
5074
5000
 
5075
- var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';
5076
- var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';
5077
5001
  var DEFAULT_OPTIONS = {
5078
5002
  placement: 'bottom',
5079
5003
  modifiers: [],
@@ -5135,42 +5059,7 @@ function popperGenerator(generatorOptions) {
5135
5059
 
5136
5060
  state.orderedModifiers = orderedModifiers.filter(function (m) {
5137
5061
  return m.enabled;
5138
- }); // Validate the provided modifiers so that the consumer will get warned
5139
- // if one of the modifiers is invalid for any reason
5140
-
5141
- if (process.env.NODE_ENV !== "production") {
5142
- var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {
5143
- var name = _ref.name;
5144
- return name;
5145
- });
5146
- validateModifiers(modifiers);
5147
-
5148
- if (getBasePlacement(state.options.placement) === auto) {
5149
- var flipModifier = state.orderedModifiers.find(function (_ref2) {
5150
- var name = _ref2.name;
5151
- return name === 'flip';
5152
- });
5153
-
5154
- if (!flipModifier) {
5155
- console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' '));
5156
- }
5157
- }
5158
-
5159
- var _getComputedStyle = getComputedStyle$1(popper),
5160
- marginTop = _getComputedStyle.marginTop,
5161
- marginRight = _getComputedStyle.marginRight,
5162
- marginBottom = _getComputedStyle.marginBottom,
5163
- marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can
5164
- // cause bugs with positioning, so we'll warn the consumer
5165
-
5166
-
5167
- if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {
5168
- return parseFloat(margin);
5169
- })) {
5170
- console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));
5171
- }
5172
- }
5173
-
5062
+ });
5174
5063
  runModifierEffects();
5175
5064
  return instance.update();
5176
5065
  },
@@ -5190,10 +5079,6 @@ function popperGenerator(generatorOptions) {
5190
5079
  // anymore
5191
5080
 
5192
5081
  if (!areValidElements(reference, popper)) {
5193
- if (process.env.NODE_ENV !== "production") {
5194
- console.error(INVALID_ELEMENT_ERROR);
5195
- }
5196
-
5197
5082
  return;
5198
5083
  } // Store the reference and popper rects to be read by modifiers
5199
5084
 
@@ -5216,18 +5101,8 @@ function popperGenerator(generatorOptions) {
5216
5101
  state.orderedModifiers.forEach(function (modifier) {
5217
5102
  return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
5218
5103
  });
5219
- var __debug_loops__ = 0;
5220
5104
 
5221
5105
  for (var index = 0; index < state.orderedModifiers.length; index++) {
5222
- if (process.env.NODE_ENV !== "production") {
5223
- __debug_loops__ += 1;
5224
-
5225
- if (__debug_loops__ > 100) {
5226
- console.error(INFINITE_LOOP_ERROR);
5227
- break;
5228
- }
5229
- }
5230
-
5231
5106
  if (state.reset === true) {
5232
5107
  state.reset = false;
5233
5108
  index = -1;
@@ -5265,10 +5140,6 @@ function popperGenerator(generatorOptions) {
5265
5140
  };
5266
5141
 
5267
5142
  if (!areValidElements(reference, popper)) {
5268
- if (process.env.NODE_ENV !== "production") {
5269
- console.error(INVALID_ELEMENT_ERROR);
5270
- }
5271
-
5272
5143
  return instance;
5273
5144
  }
5274
5145
 
@@ -5283,11 +5154,11 @@ function popperGenerator(generatorOptions) {
5283
5154
  // one.
5284
5155
 
5285
5156
  function runModifierEffects() {
5286
- state.orderedModifiers.forEach(function (_ref3) {
5287
- var name = _ref3.name,
5288
- _ref3$options = _ref3.options,
5289
- options = _ref3$options === void 0 ? {} : _ref3$options,
5290
- effect = _ref3.effect;
5157
+ state.orderedModifiers.forEach(function (_ref) {
5158
+ var name = _ref.name,
5159
+ _ref$options = _ref.options,
5160
+ options = _ref$options === void 0 ? {} : _ref$options,
5161
+ effect = _ref.effect;
5291
5162
 
5292
5163
  if (typeof effect === 'function') {
5293
5164
  var cleanupFn = effect({
@@ -5886,19 +5757,19 @@ var CDropdownMenu = function (_a) {
5886
5757
  _placement = 'bottom';
5887
5758
  }
5888
5759
  if (direction === 'dropup') {
5889
- _placement = 'top-start';
5760
+ _placement = isRTL(dropdownMenuRef.current) ? 'top-end' : 'top-start';
5890
5761
  }
5891
5762
  if (direction === 'dropup-center') {
5892
5763
  _placement = 'top';
5893
5764
  }
5894
5765
  if (direction === 'dropend') {
5895
- _placement = 'right-start';
5766
+ _placement = isRTL(dropdownMenuRef.current) ? 'left-start' : 'right-start';
5896
5767
  }
5897
5768
  if (direction === 'dropstart') {
5898
- _placement = 'left-start';
5769
+ _placement = isRTL(dropdownMenuRef.current) ? 'right-start' : 'left-start';
5899
5770
  }
5900
5771
  if (alignment === 'end') {
5901
- _placement = 'bottom-end';
5772
+ _placement = isRTL(dropdownMenuRef.current) ? 'bottom-start' : 'bottom-end';
5902
5773
  }
5903
5774
  var dropdownMenuComponent = function (style, ref) { return (React__default.createElement(CConditionalPortal, { portal: portal !== null && portal !== void 0 ? portal : false },
5904
5775
  React__default.createElement(Component, __assign({ className: classNames('dropdown-menu', {
@@ -6169,7 +6040,8 @@ var CFormSelect = forwardRef(function (_a, ref) {
6169
6040
  _b), className), size: htmlSize }, rest, { ref: ref }), options
6170
6041
  ? options.map(function (option, index) {
6171
6042
  return (React__default.createElement("option", __assign({}, (typeof option === 'object' &&
6172
- option.disabled && { disabled: option.disabled }), (typeof option === 'object' && option.value && { value: option.value }), { key: index }), typeof option === 'string' ? option : option.label));
6043
+ option.disabled && { disabled: option.disabled }), (typeof option === 'object' &&
6044
+ option.value !== undefined && { value: option.value }), { key: index }), typeof option === 'string' ? option : option.label));
6173
6045
  })
6174
6046
  : children)));
6175
6047
  });
@@ -6597,6 +6469,7 @@ var CModal = forwardRef(function (_a, ref) {
6597
6469
  if (backdrop === 'static') {
6598
6470
  return setStaticBackdrop(true);
6599
6471
  }
6472
+ setVisible(false);
6600
6473
  return onClose && onClose();
6601
6474
  };
6602
6475
  useLayoutEffect(function () {
@@ -7143,6 +7016,7 @@ CProgressBar.propTypes = {
7143
7016
  };
7144
7017
  CProgressBar.displayName = 'CProgressBar';
7145
7018
 
7019
+ // TODO: update markup and add '.progress-stacked' in v5
7146
7020
  var CProgress = forwardRef(function (_a, ref) {
7147
7021
  var children = _a.children, className = _a.className, height = _a.height, thin = _a.thin, _b = _a.value, value = _b === void 0 ? 0 : _b, white = _a.white, rest = __rest(_a, ["children", "className", "height", "thin", "value", "white"]);
7148
7022
  return (React__default.createElement("div", { className: classNames('progress', {
@@ -7160,30 +7034,59 @@ CProgress.propTypes = {
7160
7034
  };
7161
7035
  CProgress.displayName = 'CProgress';
7162
7036
 
7037
+ var getPlacement$1 = function (placement, element) {
7038
+ switch (placement) {
7039
+ case 'right': {
7040
+ return isRTL(element) ? 'left' : 'right';
7041
+ }
7042
+ case 'left': {
7043
+ return isRTL(element) ? 'right' : 'left';
7044
+ }
7045
+ default: {
7046
+ return placement;
7047
+ }
7048
+ }
7049
+ };
7163
7050
  var CPopover = function (_a) {
7164
7051
  var children = _a.children, className = _a.className, content = _a.content, _b = _a.offset, offset = _b === void 0 ? [0, 8] : _b, onHide = _a.onHide, onShow = _a.onShow, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, title = _a.title, _d = _a.trigger, trigger = _d === void 0 ? 'click' : _d, visible = _a.visible, rest = __rest(_a, ["children", "className", "content", "offset", "onHide", "onShow", "placement", "title", "trigger", "visible"]);
7052
+ var popoverRef = useRef(null);
7053
+ var togglerRef = useRef(null);
7054
+ var popper = useRef();
7165
7055
  var _e = useState(visible), _visible = _e[0], setVisible = _e[1];
7166
- var popoverRef = useRef();
7167
- var _f = useState(null), referenceElement = _f[0], setReferenceElement = _f[1];
7168
- var _g = useState(null), popperElement = _g[0], setPopperElement = _g[1];
7169
- var _h = useState(null), arrowElement = _h[0], setArrowElement = _h[1];
7170
- var _j = usePopper(referenceElement, popperElement, {
7171
- modifiers: [
7172
- { name: 'arrow', options: { element: arrowElement } },
7173
- {
7174
- name: 'offset',
7175
- options: {
7176
- offset: offset,
7177
- },
7178
- },
7179
- ],
7180
- placement: placement,
7181
- }), styles = _j.styles, attributes = _j.attributes;
7182
7056
  useEffect(function () {
7183
7057
  setVisible(visible);
7184
7058
  }, [visible]);
7059
+ useEffect(function () {
7060
+ if (_visible) {
7061
+ initPopper();
7062
+ }
7063
+ return function () {
7064
+ destroyPopper();
7065
+ };
7066
+ }, [_visible]);
7067
+ var initPopper = function () {
7068
+ if (togglerRef.current && popoverRef.current) {
7069
+ popper.current = createPopper(togglerRef.current, popoverRef.current, {
7070
+ modifiers: [
7071
+ {
7072
+ name: 'offset',
7073
+ options: {
7074
+ offset: offset,
7075
+ },
7076
+ },
7077
+ ],
7078
+ placement: getPlacement$1(placement, togglerRef.current),
7079
+ });
7080
+ }
7081
+ };
7082
+ var destroyPopper = function () {
7083
+ if (popper.current) {
7084
+ popper.current.destroy();
7085
+ }
7086
+ popper.current = undefined;
7087
+ };
7185
7088
  return (React__default.createElement(React__default.Fragment, null,
7186
- React__default.cloneElement(children, __assign(__assign(__assign({ ref: setReferenceElement }, ((trigger === 'click' || trigger.includes('click')) && {
7089
+ React__default.cloneElement(children, __assign(__assign(__assign({ ref: togglerRef }, ((trigger === 'click' || trigger.includes('click')) && {
7187
7090
  onClick: function () { return setVisible(!_visible); },
7188
7091
  })), ((trigger === 'focus' || trigger.includes('focus')) && {
7189
7092
  onFocus: function () { return setVisible(true); },
@@ -7196,10 +7099,12 @@ var CPopover = function (_a) {
7196
7099
  createPortal(React__default.createElement(Transition$1, { in: _visible, mountOnEnter: true, nodeRef: popoverRef, onEnter: onShow, onExit: onHide, timeout: {
7197
7100
  enter: 0,
7198
7101
  exit: 200,
7199
- }, unmountOnExit: true }, function (state) { return (React__default.createElement("div", __assign({ className: classNames('popover', "bs-popover-".concat(placement.replace('left', 'start').replace('right', 'end')), 'fade', {
7102
+ }, unmountOnExit: true }, function (state) { return (React__default.createElement("div", __assign({ className: classNames('popover', "bs-popover-".concat(getPlacement$1(placement, togglerRef.current)
7103
+ .replace('left', 'start')
7104
+ .replace('right', 'end')), 'fade', {
7200
7105
  show: state === 'entered',
7201
- }, className), ref: setPopperElement, role: "tooltip", style: styles.popper }, attributes.popper, rest),
7202
- React__default.createElement("div", { className: "popover-arrow", style: styles.arrow, ref: setArrowElement }),
7106
+ }, className), ref: popoverRef, role: "tooltip" }, rest),
7107
+ React__default.createElement("div", { "data-popper-arrow": true, className: "popover-arrow" }),
7203
7108
  React__default.createElement("div", { className: "popover-header" }, title),
7204
7109
  React__default.createElement("div", { className: "popover-body" }, content))); }), document.body)));
7205
7110
  };
@@ -7244,7 +7149,7 @@ var CSidebar = forwardRef(function (_a, ref) {
7244
7149
  var _a, _b;
7245
7150
  sidebarRef.current && setMobile(isOnMobile(sidebarRef.current));
7246
7151
  sidebarRef.current && setInViewport(isInViewport(sidebarRef.current));
7247
- window.addEventListener('resize', function () { return handleResize(); });
7152
+ window.addEventListener('resize', handleResize);
7248
7153
  window.addEventListener('mouseup', handleClickOutside);
7249
7154
  window.addEventListener('keyup', handleKeyup);
7250
7155
  (_a = sidebarRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener('mouseup', handleOnClick);
@@ -7253,7 +7158,7 @@ var CSidebar = forwardRef(function (_a, ref) {
7253
7158
  });
7254
7159
  return function () {
7255
7160
  var _a, _b;
7256
- window.removeEventListener('resize', function () { return handleResize(); });
7161
+ window.removeEventListener('resize', handleResize);
7257
7162
  window.removeEventListener('mouseup', handleClickOutside);
7258
7163
  window.removeEventListener('keyup', handleKeyup);
7259
7164
  (_a = sidebarRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('mouseup', handleOnClick);
@@ -7362,8 +7267,12 @@ CSidebarHeader.propTypes = {
7362
7267
  CSidebarHeader.displayName = 'CSidebarHeader';
7363
7268
 
7364
7269
  var CSpinner = forwardRef(function (_a, ref) {
7365
- var className = _a.className, color = _a.color, _b = _a.component, Component = _b === void 0 ? 'div' : _b, size = _a.size, _c = _a.variant, variant = _c === void 0 ? 'border' : _c, _d = _a.visuallyHiddenLabel, visuallyHiddenLabel = _d === void 0 ? 'Loading...' : _d, rest = __rest(_a, ["className", "color", "component", "size", "variant", "visuallyHiddenLabel"]);
7366
- return (React__default.createElement(Component, __assign({ className: classNames("spinner-".concat(variant), "text-".concat(color), size && "spinner-".concat(variant, "-").concat(size), className), role: "status" }, rest, { ref: ref }),
7270
+ var _b;
7271
+ var className = _a.className, color = _a.color, _c = _a.component, Component = _c === void 0 ? 'div' : _c, size = _a.size, _d = _a.variant, variant = _d === void 0 ? 'border' : _d, _e = _a.visuallyHiddenLabel, visuallyHiddenLabel = _e === void 0 ? 'Loading...' : _e, rest = __rest(_a, ["className", "color", "component", "size", "variant", "visuallyHiddenLabel"]);
7272
+ return (React__default.createElement(Component, __assign({ className: classNames("spinner-".concat(variant), (_b = {},
7273
+ _b["spinner-".concat(variant, "-").concat(size)] = size,
7274
+ _b["text-".concat(color)] = color,
7275
+ _b), className), role: "status" }, rest, { ref: ref }),
7367
7276
  React__default.createElement("span", { className: "visually-hidden" }, visuallyHiddenLabel)));
7368
7277
  });
7369
7278
  CSpinner.propTypes = {
@@ -7534,7 +7443,8 @@ var CTable = forwardRef(function (_a, ref) {
7534
7443
  React__default.createElement(CTableRow, null, columns.map(function (column, index) { return (React__default.createElement(CTableHeaderCell, __assign({}, (column._props && __assign({}, column._props)), (column._style && { style: __assign({}, column._style) }), { key: index }), getColumnLabel(column))); })))),
7535
7444
  items && (React__default.createElement(CTableBody, null, items.map(function (item, index) { return (React__default.createElement(CTableRow, __assign({}, (item._props && __assign({}, item._props)), { key: index }), columnNames &&
7536
7445
  columnNames.map(function (colName, index) {
7537
- return item[colName] ? (React__default.createElement(CTableDataCell, __assign({}, (item._cellProps && __assign(__assign({}, (item._cellProps['all'] && __assign({}, item._cellProps['all']))), (item._cellProps[colName] && __assign({}, item._cellProps[colName])))), { key: index }), item[colName])) : null;
7446
+ // eslint-disable-next-line unicorn/no-negated-condition
7447
+ return item[colName] !== undefined ? (React__default.createElement(CTableDataCell, __assign({}, (item._cellProps && __assign(__assign({}, (item._cellProps['all'] && __assign({}, item._cellProps['all']))), (item._cellProps[colName] && __assign({}, item._cellProps[colName])))), { key: index }), item[colName])) : null;
7538
7448
  }))); }))),
7539
7449
  children,
7540
7450
  footer && (React__default.createElement(CTableFoot, __assign({}, tableFootProps),
@@ -7732,30 +7642,59 @@ CToaster.propTypes = {
7732
7642
  };
7733
7643
  CToaster.displayName = 'CToaster';
7734
7644
 
7645
+ var getPlacement = function (placement, element) {
7646
+ switch (placement) {
7647
+ case 'right': {
7648
+ return isRTL(element) ? 'left' : 'right';
7649
+ }
7650
+ case 'left': {
7651
+ return isRTL(element) ? 'right' : 'left';
7652
+ }
7653
+ default: {
7654
+ return placement;
7655
+ }
7656
+ }
7657
+ };
7735
7658
  var CTooltip = function (_a) {
7736
- var children = _a.children, className = _a.className, content = _a.content, _b = _a.offset, offset = _b === void 0 ? [0, 0] : _b, onHide = _a.onHide, onShow = _a.onShow, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, _d = _a.trigger, trigger = _d === void 0 ? 'hover' : _d, visible = _a.visible, rest = __rest(_a, ["children", "className", "content", "offset", "onHide", "onShow", "placement", "trigger", "visible"]);
7737
- var tooltipRef = useRef();
7659
+ var children = _a.children, className = _a.className, content = _a.content, _b = _a.offset, offset = _b === void 0 ? [0, 6] : _b, onHide = _a.onHide, onShow = _a.onShow, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, _d = _a.trigger, trigger = _d === void 0 ? 'hover' : _d, visible = _a.visible, rest = __rest(_a, ["children", "className", "content", "offset", "onHide", "onShow", "placement", "trigger", "visible"]);
7660
+ var tooltipRef = useRef(null);
7661
+ var togglerRef = useRef(null);
7662
+ var popper = useRef();
7738
7663
  var _e = useState(visible), _visible = _e[0], setVisible = _e[1];
7739
- var _f = useState(null), referenceElement = _f[0], setReferenceElement = _f[1];
7740
- var _g = useState(null), popperElement = _g[0], setPopperElement = _g[1];
7741
- var _h = useState(null), arrowElement = _h[0], setArrowElement = _h[1];
7742
- var _j = usePopper(referenceElement, popperElement, {
7743
- modifiers: [
7744
- { name: 'arrow', options: { element: arrowElement } },
7745
- {
7746
- name: 'offset',
7747
- options: {
7748
- offset: offset,
7749
- },
7750
- },
7751
- ],
7752
- placement: placement,
7753
- }), styles = _j.styles, attributes = _j.attributes;
7754
7664
  useEffect(function () {
7755
7665
  setVisible(visible);
7756
7666
  }, [visible]);
7667
+ useEffect(function () {
7668
+ if (_visible) {
7669
+ initPopper();
7670
+ }
7671
+ return function () {
7672
+ destroyPopper();
7673
+ };
7674
+ }, [_visible]);
7675
+ var initPopper = function () {
7676
+ if (togglerRef.current && tooltipRef.current) {
7677
+ popper.current = createPopper(togglerRef.current, tooltipRef.current, {
7678
+ modifiers: [
7679
+ {
7680
+ name: 'offset',
7681
+ options: {
7682
+ offset: offset,
7683
+ },
7684
+ },
7685
+ ],
7686
+ placement: getPlacement(placement, togglerRef.current),
7687
+ });
7688
+ }
7689
+ };
7690
+ var destroyPopper = function () {
7691
+ if (popper.current) {
7692
+ popper.current.destroy();
7693
+ }
7694
+ popper.current = undefined;
7695
+ };
7757
7696
  return (React__default.createElement(React__default.Fragment, null,
7758
- React__default.cloneElement(children, __assign(__assign(__assign({ ref: setReferenceElement }, ((trigger === 'click' || trigger.includes('click')) && {
7697
+ React__default.cloneElement(children, __assign(__assign(__assign({ ref: togglerRef }, ((trigger === 'click' || trigger.includes('click')) && {
7759
7698
  onClick: function () { return setVisible(!_visible); },
7760
7699
  })), ((trigger === 'focus' || trigger.includes('focus')) && {
7761
7700
  onFocus: function () { return setVisible(true); },
@@ -7765,13 +7704,15 @@ var CTooltip = function (_a) {
7765
7704
  onMouseLeave: function () { return setVisible(false); },
7766
7705
  }))),
7767
7706
  typeof window !== 'undefined' &&
7768
- createPortal(React__default.createElement(Transition$1, { in: _visible, mountOnEnter: true, nodeRef: tooltipRef, onEnter: onShow, onExit: onHide, timeout: {
7707
+ createPortal(React__default.createElement(Transition$1, { in: _visible, mountOnEnter: true, onEnter: onShow, onExit: onHide, timeout: {
7769
7708
  enter: 0,
7770
7709
  exit: 200,
7771
- }, unmountOnExit: true }, function (state) { return (React__default.createElement("div", __assign({ className: classNames('tooltip', "bs-popover-".concat(placement.replace('left', 'start').replace('right', 'end')), 'fade', {
7710
+ }, unmountOnExit: true }, function (state) { return (React__default.createElement("div", __assign({ className: classNames('tooltip', "bs-tooltip-".concat(getPlacement(placement, togglerRef.current)
7711
+ .replace('left', 'start')
7712
+ .replace('right', 'end')), 'fade', {
7772
7713
  show: state === 'entered',
7773
- }, className), ref: setPopperElement, role: "tooltip", style: styles.popper }, attributes.popper, rest),
7774
- React__default.createElement("div", { className: "tooltip-arrow", style: styles.arrow, ref: setArrowElement }),
7714
+ }, className), ref: tooltipRef, role: "tooltip" }, rest),
7715
+ React__default.createElement("div", { "data-popper-arrow": true, className: "tooltip-arrow" }),
7775
7716
  React__default.createElement("div", { className: "tooltip-inner" }, content))); }), document.body)));
7776
7717
  };
7777
7718
  CTooltip.propTypes = {
@@ -7912,5 +7853,5 @@ CWidgetStatsF.propTypes = {
7912
7853
  };
7913
7854
  CWidgetStatsF.displayName = 'CWidgetStatsF';
7914
7855
 
7915
- export { CAccordion, CAccordionBody, CAccordionButton, CAccordionHeader, CAccordionItem, CAlert, CAlertHeading, CAlertLink, CAvatar, CBackdrop, CBadge, CBreadcrumb, CBreadcrumbItem, CButton, CButtonGroup, CButtonToolbar, CCallout, CCard, CCardBody, CCardFooter, CCardGroup, CCardHeader, CCardImage, CCardImageOverlay, CCardLink, CCardSubtitle, CCardText, CCardTitle, CCarousel, CCarouselCaption, CCarouselItem, CCloseButton, CCol, CCollapse, CConditionalPortal, CContainer, CDropdown, CDropdownDivider, CDropdownHeader, CDropdownItem, CDropdownItemPlain, CDropdownMenu, CDropdownToggle, CFooter, CForm, CFormCheck, CFormControlValidation, CFormControlWrapper, CFormFeedback, CFormFloating, CFormInput, CFormLabel, CFormRange, CFormSelect, CFormSwitch, CFormText, CFormTextarea, CHeader, CHeaderBrand, CHeaderDivider, CHeaderNav, CHeaderText, CHeaderToggler, CImage, CInputGroup, CInputGroupText, CLink, CListGroup, CListGroupItem, CModal, CModalBody, CModalContent, CModalDialog, CModalFooter, CModalHeader, CModalTitle, CNav, CNavGroup, CNavGroupItems, CNavItem, CNavLink, CNavTitle, CNavbar, CNavbarBrand, CNavbarNav, CNavbarText, CNavbarToggler, COffcanvas, COffcanvasBody, COffcanvasHeader, COffcanvasTitle, CPagination, CPaginationItem, CPlaceholder, CPopover, CProgress, CProgressBar, CRow, CSidebar, CSidebarBrand, CSidebarFooter, CSidebarHeader, CSidebarNav, CSidebarToggler, CSpinner, CTabContent, CTabPane, CTable, CTableBody, CTableCaption, CTableDataCell, CTableFoot, CTableHead, CTableHeaderCell, CTableRow, CToast, CToastBody, CToastClose, CToastHeader, CToaster, CTooltip, CWidgetStatsA, CWidgetStatsB, CWidgetStatsC, CWidgetStatsD, CWidgetStatsE, CWidgetStatsF };
7856
+ export { CAccordion, CAccordionBody, CAccordionButton, CAccordionHeader, CAccordionItem, CAlert, CAlertHeading, CAlertLink, CAvatar, CBackdrop, CBadge, CBreadcrumb, CBreadcrumbItem, CButton, CButtonGroup, CButtonToolbar, CCallout, CCard, CCardBody, CCardFooter, CCardGroup, CCardHeader, CCardImage, CCardImageOverlay, CCardLink, CCardSubtitle, CCardText, CCardTitle, CCarousel, CCarouselCaption, CCarouselItem, CCloseButton, CCol, CCollapse, CConditionalPortal, CContainer, CDropdown, CDropdownDivider, CDropdownHeader, CDropdownItem, CDropdownItemPlain, CDropdownMenu, CDropdownToggle, CFooter, CForm, CFormCheck, CFormControlValidation, CFormControlWrapper, CFormFeedback, CFormFloating, CFormInput, CFormLabel, CFormRange, CFormSelect, CFormSwitch, CFormText, CFormTextarea, CHeader, CHeaderBrand, CHeaderDivider, CHeaderNav, CHeaderText, CHeaderToggler, CImage, CInputGroup, CInputGroupText, CLink, CListGroup, CListGroupItem, CModal, CModalBody, CModalContent, CModalDialog, CModalFooter, CModalHeader, CModalTitle, CNav, CNavGroup, CNavGroupItems, CNavItem, CNavLink, CNavTitle, CNavbar, CNavbarBrand, CNavbarNav, CNavbarText, CNavbarToggler, COffcanvas, COffcanvasBody, COffcanvasHeader, COffcanvasTitle, CPagination, CPaginationItem, CPlaceholder, CPopover, CProgress, CProgressBar, CRow, CSidebar, CSidebarBrand, CSidebarFooter, CSidebarHeader, CSidebarNav, CSidebarToggler, CSpinner, CTabContent, CTabPane, CTable, CTableBody, CTableCaption, CTableDataCell, CTableFoot, CTableHead, CTableHeaderCell, CTableRow, CToast, CToastBody, CToastClose, CToastHeader, CToaster, CTooltip, CWidgetStatsA, CWidgetStatsB, CWidgetStatsC, CWidgetStatsD, CWidgetStatsE, CWidgetStatsF, useColorModes, useForkedRef };
7916
7857
  //# sourceMappingURL=index.es.js.map