@coreui/vue-pro 4.0.2 → 4.1.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 (53) hide show
  1. package/README.md +1 -1
  2. package/dist/components/carousel/CCarousel.d.ts +2 -2
  3. package/dist/components/collapse/CCollapse.d.ts +10 -0
  4. package/dist/components/element-cover/index.d.ts +6 -0
  5. package/dist/components/form/CFormCheck.d.ts +7 -0
  6. package/dist/components/index.d.ts +2 -0
  7. package/dist/components/modal/CModal.d.ts +2 -2
  8. package/dist/components/placeholder/CPlaceholder.d.ts +124 -0
  9. package/dist/components/placeholder/index.d.ts +6 -0
  10. package/dist/components/popover/CPopover.d.ts +2 -2
  11. package/dist/components/smart-table/CSmartTable.d.ts +5 -11
  12. package/dist/components/smart-table/CSmartTableHead.d.ts +7 -3
  13. package/dist/components/table/CTable.d.ts +2 -2
  14. package/dist/components/widgets/CWidgetStatsB.d.ts +2 -2
  15. package/dist/components/widgets/CWidgetStatsF.d.ts +2 -2
  16. package/dist/directives/index.d.ts +3 -2
  17. package/dist/directives/v-c-placeholder.d.ts +6 -0
  18. package/dist/directives/v-c-visible.d.ts +6 -0
  19. package/dist/index.es.js +693 -441
  20. package/dist/index.es.js.map +1 -1
  21. package/dist/index.js +696 -439
  22. package/dist/index.js.map +1 -1
  23. package/package.json +8 -8
  24. package/src/components/accordion/__tests__/__snapshots__/CAccordionBody.spec.ts.snap +1 -1
  25. package/src/components/button/CButton.ts +1 -0
  26. package/src/components/collapse/CCollapse.ts +49 -21
  27. package/src/components/collapse/__test__/__snapshots__/CCollapse.spec.ts.snap +1 -1
  28. package/src/components/element-cover/index.ts +10 -0
  29. package/src/components/form/CFormCheck.ts +9 -19
  30. package/src/components/form/CFormInput.ts +5 -5
  31. package/src/components/form/CFormRange.ts +2 -2
  32. package/src/components/form/CFormSelect.ts +3 -4
  33. package/src/components/form/CFormSwitch.ts +1 -1
  34. package/src/components/form/CFormTextarea.ts +1 -7
  35. package/src/components/form/__tests__/__snapshots__/CFormInput.spec.ts.snap +3 -3
  36. package/src/components/grid/CCol.ts +8 -8
  37. package/src/components/grid/CContainer.ts +3 -3
  38. package/src/components/grid/CRow.ts +6 -6
  39. package/src/components/index.ts +2 -0
  40. package/src/components/modal/CModal.ts +8 -3
  41. package/src/components/offcanvas/COffcanvas.ts +30 -20
  42. package/src/components/offcanvas/__tests__/COffcanvas.spec.ts +1 -1
  43. package/src/components/offcanvas/__tests__/__snapshots__/COffcanvas.spec.ts.snap +2 -2
  44. package/src/components/placeholder/CPlaceholder.ts +139 -0
  45. package/src/components/placeholder/__tests__/CPlaceholder.spec.ts +44 -0
  46. package/src/components/placeholder/__tests__/__snapshots__/CPlaceholder.spec.ts.snap +15 -0
  47. package/src/components/placeholder/index.ts +10 -0
  48. package/src/components/smart-table/CSmartTable.ts +38 -36
  49. package/src/components/smart-table/CSmartTableHead.ts +54 -44
  50. package/src/directives/index.ts +3 -2
  51. package/src/directives/v-c-placeholder.ts +32 -0
  52. package/src/directives/v-c-visible.ts +33 -0
  53. package/src/index.ts +2 -1
package/dist/index.js CHANGED
@@ -36,9 +36,45 @@ const CAccordion = vue.defineComponent({
36
36
  },
37
37
  });
38
38
 
39
+ const vVisible = {
40
+ beforeMount(el, { value }, { transition }) {
41
+ el._vod = el.style.display === 'none' ? '' : el.style.display;
42
+ if (transition && value) {
43
+ transition.beforeEnter(el);
44
+ }
45
+ },
46
+ mounted(el, { value }, { transition }) {
47
+ if (transition && value) {
48
+ transition.enter(el);
49
+ }
50
+ },
51
+ updated(el, { value, oldValue }, { transition }) {
52
+ if (!value === !oldValue)
53
+ return;
54
+ if (transition) {
55
+ if (value) {
56
+ transition.beforeEnter(el);
57
+ transition.enter(el);
58
+ }
59
+ else {
60
+ transition.leave(el, () => {
61
+ // setDisplay(el, false)
62
+ });
63
+ }
64
+ }
65
+ },
66
+ };
67
+
39
68
  const CCollapse = vue.defineComponent({
40
69
  name: 'CCollapse',
41
70
  props: {
71
+ /**
72
+ * Set horizontal collapsing to transition the width instead of height.
73
+ */
74
+ horizontal: {
75
+ type: Boolean,
76
+ required: false,
77
+ },
42
78
  /**
43
79
  * Toggle the visibility of component.
44
80
  */
@@ -58,42 +94,58 @@ const CCollapse = vue.defineComponent({
58
94
  'show',
59
95
  ],
60
96
  setup(props, { slots, emit }) {
61
- const handleBeforeEnter = (el) => {
62
- el.classList.remove('collapse');
63
- el.classList.add('collapsing');
97
+ const collapsing = vue.ref(false);
98
+ const show = vue.ref(props.visible);
99
+ const handleBeforeEnter = () => {
100
+ collapsing.value = true;
64
101
  };
65
102
  const handleEnter = (el, done) => {
66
103
  emit('show');
67
104
  el.addEventListener('transitionend', () => {
68
- el.classList.add('collapse', 'show');
69
105
  done();
70
106
  });
71
- el.style.height = `${el.scrollHeight}px`;
107
+ setTimeout(() => {
108
+ if (props.horizontal) {
109
+ el.style.width = `${el.scrollWidth}px`;
110
+ return;
111
+ }
112
+ el.style.height = `${el.scrollHeight}px`;
113
+ }, 1);
72
114
  };
73
115
  const handleAfterEnter = (el) => {
74
- el.classList.remove('collapsing');
75
- el.style.removeProperty('height');
116
+ show.value = true;
117
+ collapsing.value = false;
118
+ props.horizontal ? el.style.removeProperty('width') : el.style.removeProperty('height');
76
119
  };
77
120
  const handleBeforeLeave = (el) => {
78
- el.classList.add('show');
121
+ collapsing.value = true;
122
+ show.value = false;
123
+ if (props.horizontal) {
124
+ el.style.width = `${el.scrollWidth}px`;
125
+ return;
126
+ }
79
127
  el.style.height = `${el.scrollHeight}px`;
80
128
  };
81
129
  const handleLeave = (el, done) => {
82
130
  emit('hide');
83
- el.classList.remove('collapse', 'show');
84
- el.classList.add('collapsing');
85
131
  el.addEventListener('transitionend', () => {
86
132
  done();
87
133
  });
88
- el.style.height = '0px';
134
+ setTimeout(() => {
135
+ if (props.horizontal) {
136
+ el.style.width = '0px';
137
+ return;
138
+ }
139
+ el.style.height = '0px';
140
+ }, 1);
89
141
  };
90
142
  const handleAfterLeave = (el) => {
91
- el.classList.remove('collapsing');
92
- el.classList.add('collapse');
143
+ collapsing.value = false;
144
+ props.horizontal ? el.style.removeProperty('width') : el.style.removeProperty('height');
93
145
  };
94
146
  return () => vue.h(vue.Transition, {
95
- name: 'fade',
96
- onBeforeEnter: (el) => handleBeforeEnter(el),
147
+ css: false,
148
+ onBeforeEnter: () => handleBeforeEnter(),
97
149
  onEnter: (el, done) => handleEnter(el, done),
98
150
  onAfterEnter: (el) => handleAfterEnter(el),
99
151
  onBeforeLeave: (el) => handleBeforeLeave(el),
@@ -101,12 +153,10 @@ const CCollapse = vue.defineComponent({
101
153
  onAfterLeave: (el) => handleAfterLeave(el),
102
154
  }, () => vue.withDirectives(vue.h('div', {
103
155
  class: [
104
- 'collapse',
105
- {
106
- show: props.visible,
107
- },
156
+ collapsing.value ? 'collapsing' : 'collapse',
157
+ { 'collapse-horizontal': props.horizontal, show: show.value },
108
158
  ],
109
- }, slots.default && slots.default()), [[vue.vShow, props.visible]]));
159
+ }, slots.default && slots.default()), [[vVisible, props.visible]]));
110
160
  },
111
161
  });
112
162
 
@@ -800,6 +850,7 @@ const CButton = vue.defineComponent({
800
850
  ],
801
851
  disabled: props.disabled && props.component !== 'a',
802
852
  ...(props.component === 'a' && props.disabled && { 'aria-disabled': true, tabIndex: -1 }),
853
+ ...(props.component === 'a' && props.href && { href: props.href }),
803
854
  }, slots.default && slots.default());
804
855
  },
805
856
  });
@@ -1614,29 +1665,32 @@ function getBasePlacement(placement) {
1614
1665
  return placement.split('-')[0];
1615
1666
  }
1616
1667
 
1617
- // import { isHTMLElement } from './instanceOf';
1618
- function getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars
1619
- includeScale) {
1668
+ var max = Math.max;
1669
+ var min = Math.min;
1670
+ var round = Math.round;
1671
+
1672
+ function getBoundingClientRect(element, includeScale) {
1673
+ if (includeScale === void 0) {
1674
+ includeScale = false;
1675
+ }
1620
1676
 
1621
1677
  var rect = element.getBoundingClientRect();
1622
1678
  var scaleX = 1;
1623
- var scaleY = 1; // FIXME:
1624
- // `offsetWidth` returns an integer while `getBoundingClientRect`
1625
- // returns a float. This results in `scaleX` or `scaleY` being
1626
- // non-1 when it should be for elements that aren't a full pixel in
1627
- // width or height.
1628
- // if (isHTMLElement(element) && includeScale) {
1629
- // const offsetHeight = element.offsetHeight;
1630
- // const offsetWidth = element.offsetWidth;
1631
- // // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
1632
- // // Fallback to 1 in case both values are `0`
1633
- // if (offsetWidth > 0) {
1634
- // scaleX = rect.width / offsetWidth || 1;
1635
- // }
1636
- // if (offsetHeight > 0) {
1637
- // scaleY = rect.height / offsetHeight || 1;
1638
- // }
1639
- // }
1679
+ var scaleY = 1;
1680
+
1681
+ if (isHTMLElement(element) && includeScale) {
1682
+ var offsetHeight = element.offsetHeight;
1683
+ var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
1684
+ // Fallback to 1 in case both values are `0`
1685
+
1686
+ if (offsetWidth > 0) {
1687
+ scaleX = round(rect.width) / offsetWidth || 1;
1688
+ }
1689
+
1690
+ if (offsetHeight > 0) {
1691
+ scaleY = round(rect.height) / offsetHeight || 1;
1692
+ }
1693
+ }
1640
1694
 
1641
1695
  return {
1642
1696
  width: rect.width / scaleX,
@@ -1791,13 +1845,13 @@ function getMainAxisFromPlacement(placement) {
1791
1845
  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
1792
1846
  }
1793
1847
 
1794
- var max = Math.max;
1795
- var min = Math.min;
1796
- var round = Math.round;
1797
-
1798
1848
  function within(min$1, value, max$1) {
1799
1849
  return max(min$1, min(value, max$1));
1800
1850
  }
1851
+ function withinMaxClamp(min, value, max) {
1852
+ var v = within(min, value, max);
1853
+ return v > max ? max : v;
1854
+ }
1801
1855
 
1802
1856
  function getFreshSideObject() {
1803
1857
  return {
@@ -1929,8 +1983,8 @@ function roundOffsetsByDPR(_ref) {
1929
1983
  var win = window;
1930
1984
  var dpr = win.devicePixelRatio || 1;
1931
1985
  return {
1932
- x: round(round(x * dpr) / dpr) || 0,
1933
- y: round(round(y * dpr) / dpr) || 0
1986
+ x: round(x * dpr) / dpr || 0,
1987
+ y: round(y * dpr) / dpr || 0
1934
1988
  };
1935
1989
  }
1936
1990
 
@@ -1945,7 +1999,8 @@ function mapToStyles(_ref2) {
1945
1999
  position = _ref2.position,
1946
2000
  gpuAcceleration = _ref2.gpuAcceleration,
1947
2001
  adaptive = _ref2.adaptive,
1948
- roundOffsets = _ref2.roundOffsets;
2002
+ roundOffsets = _ref2.roundOffsets,
2003
+ isFixed = _ref2.isFixed;
1949
2004
 
1950
2005
  var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,
1951
2006
  _ref3$x = _ref3.x,
@@ -1977,16 +2032,18 @@ function mapToStyles(_ref2) {
1977
2032
  offsetParent = offsetParent;
1978
2033
 
1979
2034
  if (placement === top || (placement === left || placement === right) && variation === end) {
1980
- sideY = bottom; // $FlowFixMe[prop-missing]
1981
-
1982
- y -= offsetParent[heightProp] - popperRect.height;
2035
+ sideY = bottom;
2036
+ var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
2037
+ offsetParent[heightProp];
2038
+ y -= offsetY - popperRect.height;
1983
2039
  y *= gpuAcceleration ? 1 : -1;
1984
2040
  }
1985
2041
 
1986
2042
  if (placement === left || (placement === top || placement === bottom) && variation === end) {
1987
- sideX = right; // $FlowFixMe[prop-missing]
1988
-
1989
- x -= offsetParent[widthProp] - popperRect.width;
2043
+ sideX = right;
2044
+ var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
2045
+ offsetParent[widthProp];
2046
+ x -= offsetX - popperRect.width;
1990
2047
  x *= gpuAcceleration ? 1 : -1;
1991
2048
  }
1992
2049
  }
@@ -2029,7 +2086,8 @@ function computeStyles(_ref4) {
2029
2086
  variation: getVariation(state.placement),
2030
2087
  popper: state.elements.popper,
2031
2088
  popperRect: state.rects.popper,
2032
- gpuAcceleration: gpuAcceleration
2089
+ gpuAcceleration: gpuAcceleration,
2090
+ isFixed: state.options.strategy === 'fixed'
2033
2091
  };
2034
2092
 
2035
2093
  if (state.modifiersData.popperOffsets != null) {
@@ -2287,7 +2345,7 @@ function getInnerBoundingClientRect(element) {
2287
2345
  }
2288
2346
 
2289
2347
  function getClientRectFromMixedType(element, clippingParent) {
2290
- return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
2348
+ return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
2291
2349
  } // A "clipping parent" is an overflowable container with the characteristic of
2292
2350
  // clipping (or hiding) overflowing elements with a position different from
2293
2351
  // `initial`
@@ -2304,7 +2362,7 @@ function getClippingParents(element) {
2304
2362
 
2305
2363
 
2306
2364
  return clippingParents.filter(function (clippingParent) {
2307
- return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
2365
+ return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body' && (canEscapeClipping ? getComputedStyle$1(clippingParent).position !== 'static' : true);
2308
2366
  });
2309
2367
  } // Gets the maximum area that the element is visible in due to any number of
2310
2368
  // clipping parents
@@ -2804,6 +2862,14 @@ function preventOverflow(_ref) {
2804
2862
  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
2805
2863
  placement: state.placement
2806
2864
  })) : tetherOffset;
2865
+ var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
2866
+ mainAxis: tetherOffsetValue,
2867
+ altAxis: tetherOffsetValue
2868
+ } : Object.assign({
2869
+ mainAxis: 0,
2870
+ altAxis: 0
2871
+ }, tetherOffsetValue);
2872
+ var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
2807
2873
  var data = {
2808
2874
  x: 0,
2809
2875
  y: 0
@@ -2813,13 +2879,15 @@ function preventOverflow(_ref) {
2813
2879
  return;
2814
2880
  }
2815
2881
 
2816
- if (checkMainAxis || checkAltAxis) {
2882
+ if (checkMainAxis) {
2883
+ var _offsetModifierState$;
2884
+
2817
2885
  var mainSide = mainAxis === 'y' ? top : left;
2818
2886
  var altSide = mainAxis === 'y' ? bottom : right;
2819
2887
  var len = mainAxis === 'y' ? 'height' : 'width';
2820
2888
  var offset = popperOffsets[mainAxis];
2821
- var min$1 = popperOffsets[mainAxis] + overflow[mainSide];
2822
- var max$1 = popperOffsets[mainAxis] - overflow[altSide];
2889
+ var min$1 = offset + overflow[mainSide];
2890
+ var max$1 = offset - overflow[altSide];
2823
2891
  var additive = tether ? -popperRect[len] / 2 : 0;
2824
2892
  var minLen = variation === start ? referenceRect[len] : popperRect[len];
2825
2893
  var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
@@ -2839,36 +2907,45 @@ function preventOverflow(_ref) {
2839
2907
  // width or height)
2840
2908
 
2841
2909
  var arrowLen = within(0, referenceRect[len], arrowRect[len]);
2842
- var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;
2843
- var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;
2910
+ var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
2911
+ var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
2844
2912
  var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
2845
2913
  var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
2846
- var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;
2847
- var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;
2848
- var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;
2914
+ var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
2915
+ var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
2916
+ var tetherMax = offset + maxOffset - offsetModifierValue;
2917
+ var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
2918
+ popperOffsets[mainAxis] = preventedOffset;
2919
+ data[mainAxis] = preventedOffset - offset;
2920
+ }
2849
2921
 
2850
- if (checkMainAxis) {
2851
- var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
2852
- popperOffsets[mainAxis] = preventedOffset;
2853
- data[mainAxis] = preventedOffset - offset;
2854
- }
2922
+ if (checkAltAxis) {
2923
+ var _offsetModifierState$2;
2855
2924
 
2856
- if (checkAltAxis) {
2857
- var _mainSide = mainAxis === 'x' ? top : left;
2925
+ var _mainSide = mainAxis === 'x' ? top : left;
2858
2926
 
2859
- var _altSide = mainAxis === 'x' ? bottom : right;
2927
+ var _altSide = mainAxis === 'x' ? bottom : right;
2860
2928
 
2861
- var _offset = popperOffsets[altAxis];
2929
+ var _offset = popperOffsets[altAxis];
2862
2930
 
2863
- var _min = _offset + overflow[_mainSide];
2931
+ var _len = altAxis === 'y' ? 'height' : 'width';
2864
2932
 
2865
- var _max = _offset - overflow[_altSide];
2933
+ var _min = _offset + overflow[_mainSide];
2866
2934
 
2867
- var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);
2935
+ var _max = _offset - overflow[_altSide];
2868
2936
 
2869
- popperOffsets[altAxis] = _preventedOffset;
2870
- data[altAxis] = _preventedOffset - _offset;
2871
- }
2937
+ var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
2938
+
2939
+ var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
2940
+
2941
+ var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
2942
+
2943
+ var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
2944
+
2945
+ var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
2946
+
2947
+ popperOffsets[altAxis] = _preventedOffset;
2948
+ data[altAxis] = _preventedOffset - _offset;
2872
2949
  }
2873
2950
 
2874
2951
  state.modifiersData[name] = data;
@@ -2900,8 +2977,8 @@ function getNodeScroll(node) {
2900
2977
 
2901
2978
  function isElementScaled(element) {
2902
2979
  var rect = element.getBoundingClientRect();
2903
- var scaleX = rect.width / element.offsetWidth || 1;
2904
- var scaleY = rect.height / element.offsetHeight || 1;
2980
+ var scaleX = round(rect.width) / element.offsetWidth || 1;
2981
+ var scaleY = round(rect.height) / element.offsetHeight || 1;
2905
2982
  return scaleX !== 1 || scaleY !== 1;
2906
2983
  } // Returns the composite rect of an element relative to its offsetParent.
2907
2984
  // Composite means it takes into account transforms as well as layout.
@@ -2913,9 +2990,9 @@ function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
2913
2990
  }
2914
2991
 
2915
2992
  var isOffsetParentAnElement = isHTMLElement(offsetParent);
2916
- isHTMLElement(offsetParent) && isElementScaled(offsetParent);
2993
+ var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
2917
2994
  var documentElement = getDocumentElement(offsetParent);
2918
- var rect = getBoundingClientRect(elementOrVirtualElement);
2995
+ var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);
2919
2996
  var scroll = {
2920
2997
  scrollLeft: 0,
2921
2998
  scrollTop: 0
@@ -2932,7 +3009,7 @@ function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
2932
3009
  }
2933
3010
 
2934
3011
  if (isHTMLElement(offsetParent)) {
2935
- offsets = getBoundingClientRect(offsetParent);
3012
+ offsets = getBoundingClientRect(offsetParent, true);
2936
3013
  offsets.x += offsetParent.clientLeft;
2937
3014
  offsets.y += offsetParent.clientTop;
2938
3015
  } else if (documentElement) {
@@ -3852,6 +3929,176 @@ const CDropdownPlugin = {
3852
3929
  },
3853
3930
  };
3854
3931
 
3932
+ const CSpinner = vue.defineComponent({
3933
+ name: 'CSpinner',
3934
+ props: {
3935
+ /**
3936
+ * Sets the color context of the component to one of CoreUI’s themed colors.
3937
+ *
3938
+ * @values 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'dark', 'light'
3939
+ */
3940
+ color: {
3941
+ type: String,
3942
+ default: undefined,
3943
+ required: false,
3944
+ validator: (value) => {
3945
+ return [
3946
+ 'primary',
3947
+ 'secondary',
3948
+ 'success',
3949
+ 'danger',
3950
+ 'warning',
3951
+ 'info',
3952
+ 'dark',
3953
+ 'light',
3954
+ ].includes(value);
3955
+ },
3956
+ },
3957
+ /**
3958
+ * Component used for the root node. Either a string to use a HTML element or a component.
3959
+ */
3960
+ component: {
3961
+ type: String,
3962
+ default: 'div',
3963
+ required: false,
3964
+ },
3965
+ /**
3966
+ * Size the component small.
3967
+ *
3968
+ * @values 'sm'
3969
+ */
3970
+ size: {
3971
+ type: String,
3972
+ default: undefined,
3973
+ required: false,
3974
+ validator: (value) => {
3975
+ return value === 'sm';
3976
+ },
3977
+ },
3978
+ /**
3979
+ * Set the button variant to an outlined button or a ghost button.
3980
+ *
3981
+ * @values 'border', 'grow'
3982
+ */
3983
+ variant: {
3984
+ type: String,
3985
+ default: 'border',
3986
+ required: false,
3987
+ validator: (value) => {
3988
+ return ['border', 'grow'].includes(value);
3989
+ },
3990
+ },
3991
+ /**
3992
+ * Set visually hidden label for accessibility purposes.
3993
+ */
3994
+ visuallyHiddenLabel: {
3995
+ type: String,
3996
+ default: 'Loading...',
3997
+ required: false,
3998
+ },
3999
+ },
4000
+ setup(props) {
4001
+ return () => vue.h(props.component, {
4002
+ class: [
4003
+ `spinner-${props.variant}`,
4004
+ `text-${props.color}`,
4005
+ props.size && `spinner-${props.variant}-${props.size}`,
4006
+ ],
4007
+ role: 'status',
4008
+ }, vue.h('span', { class: ['visually-hidden'] }, props.visuallyHiddenLabel));
4009
+ },
4010
+ });
4011
+
4012
+ const CSpinnerPlugin = {
4013
+ install: (app) => {
4014
+ app.component(CSpinner.name, CSpinner);
4015
+ },
4016
+ };
4017
+
4018
+ const CElementCover = vue.defineComponent({
4019
+ name: 'CElementCover',
4020
+ props: {
4021
+ /**
4022
+ * Array of custom boundaries. Use to create custom cover area (instead of parent element area). Area is defined by four sides: 'top', 'bottom', 'right', 'left'. If side is not defined by any custom boundary it is equal to parent element boundary. Each custom boundary is object with keys:
4023
+ * - sides (array) - select boundaries of element to define boundaries. Sides names: 'top', 'bottom', 'right', 'left'.
4024
+ * - query (string) - query used to get element which define boundaries. Search will be done only inside parent element, by parent.querySelector(query) function. [docs]
4025
+ *
4026
+ * @type {sides: string[], query: string}[]
4027
+ */
4028
+ boundaries: {
4029
+ // TODO: check if this is correct, TJ
4030
+ type: Array,
4031
+ require: true,
4032
+ },
4033
+ /**
4034
+ * Opacity of the cover. [docs]
4035
+ *
4036
+ * @type number
4037
+ */
4038
+ opacity: {
4039
+ type: Number,
4040
+ require: false,
4041
+ },
4042
+ },
4043
+ setup(props) {
4044
+ let containerCoords = {};
4045
+ const elementRef = vue.ref();
4046
+ const getCustomBoundaries = () => {
4047
+ if (!props.boundaries || elementRef === null) {
4048
+ return {};
4049
+ }
4050
+ const parent = elementRef.value.parentElement;
4051
+ if (!parent) {
4052
+ return {};
4053
+ }
4054
+ const parentCoords = parent.getBoundingClientRect();
4055
+ const customBoundaries = {};
4056
+ props.boundaries.forEach((value) => {
4057
+ const element = parent.querySelector(value.query);
4058
+ if (!element || !value.sides) {
4059
+ return;
4060
+ }
4061
+ const coords = element.getBoundingClientRect();
4062
+ value.sides.forEach((side) => {
4063
+ const sideMargin = Math.abs(coords[side] - parentCoords[side]);
4064
+ customBoundaries[side] = `${sideMargin}px`;
4065
+ });
4066
+ });
4067
+ return customBoundaries;
4068
+ };
4069
+ vue.onMounted(function () {
4070
+ vue.nextTick(function () {
4071
+ containerCoords = getCustomBoundaries();
4072
+ });
4073
+ });
4074
+ return () => vue.h('div', {
4075
+ style: {
4076
+ ...containerCoords,
4077
+ position: 'absolute',
4078
+ 'background-color': `rgb(255,255,255,${props.opacity})`,
4079
+ },
4080
+ ref: elementRef,
4081
+ }, vue.h('div', // TODO: use slot to override this
4082
+ {
4083
+ style: {
4084
+ position: 'absolute',
4085
+ top: '50%',
4086
+ left: '50%',
4087
+ transform: 'translateX(-50%) translateY(-50%)',
4088
+ },
4089
+ }, vue.h(CSpinner, {
4090
+ variant: 'grow',
4091
+ color: 'primary',
4092
+ })));
4093
+ },
4094
+ });
4095
+
4096
+ const CElementCoverPlugin = {
4097
+ install: (app) => {
4098
+ app.component(CElementCover.name, CElementCover);
4099
+ },
4100
+ };
4101
+
3855
4102
  const CFooter = vue.defineComponent({
3856
4103
  name: 'CFooter',
3857
4104
  props: {
@@ -4003,6 +4250,10 @@ const CFormCheck = vue.defineComponent({
4003
4250
  default: undefined,
4004
4251
  required: false,
4005
4252
  },
4253
+ /**
4254
+ * Input Checkbox indeterminate Property
4255
+ */
4256
+ indeterminate: Boolean,
4006
4257
  /**
4007
4258
  * Group checkboxes or radios on the same horizontal row by adding.
4008
4259
  */
@@ -4062,25 +4313,14 @@ const CFormCheck = vue.defineComponent({
4062
4313
  'update:modelValue',
4063
4314
  ],
4064
4315
  setup(props, { attrs, emit, slots }) {
4065
- const checked = vue.ref(attrs.checked);
4066
- vue.onMounted(() => {
4067
- if (props.modelValue && typeof props.modelValue === 'boolean') {
4068
- console.log(props.modelValue);
4069
- }
4070
- });
4071
- vue.watch(() => props.modelValue, () => {
4072
- if (typeof props.modelValue === 'boolean')
4073
- checked.value = props.modelValue;
4074
- });
4075
4316
  const handleChange = (event) => {
4076
4317
  const target = event.target;
4077
- emit('change', target.checked);
4318
+ emit('change', event);
4078
4319
  emit('update:modelValue', target.checked);
4079
4320
  };
4080
4321
  const formControl = () => {
4081
4322
  return vue.h('input', {
4082
- ...attrs,
4083
- checked: checked.value,
4323
+ checked: props.modelValue,
4084
4324
  class: [
4085
4325
  props.button ? 'btn-check' : 'form-check-input',
4086
4326
  {
@@ -4089,8 +4329,10 @@ const CFormCheck = vue.defineComponent({
4089
4329
  },
4090
4330
  ],
4091
4331
  id: props.id,
4332
+ indeterminate: props.indeterminate,
4092
4333
  onChange: (event) => handleChange(event),
4093
4334
  type: props.type,
4335
+ ...attrs,
4094
4336
  });
4095
4337
  };
4096
4338
  const formLabel = () => {
@@ -4261,18 +4503,15 @@ const CFormInput = vue.defineComponent({
4261
4503
  setup(props, { emit, slots }) {
4262
4504
  const handleChange = (event) => {
4263
4505
  const target = event.target;
4264
- emit('change', target.value);
4506
+ emit('change', event);
4265
4507
  emit('update:modelValue', target.value);
4266
4508
  };
4267
4509
  const handleInput = (event) => {
4268
4510
  const target = event.target;
4269
- emit('input', target.value);
4511
+ emit('input', event);
4270
4512
  emit('update:modelValue', target.value);
4271
4513
  };
4272
4514
  return () => vue.h('input', {
4273
- type: props.type,
4274
- disabled: props.disabled,
4275
- readonly: props.readonly,
4276
4515
  class: [
4277
4516
  props.plainText ? 'form-control-plaintext' : 'form-control',
4278
4517
  {
@@ -4282,8 +4521,11 @@ const CFormInput = vue.defineComponent({
4282
4521
  'is-valid': props.valid,
4283
4522
  },
4284
4523
  ],
4524
+ disabled: props.disabled,
4285
4525
  onChange: (event) => handleChange(event),
4286
4526
  onInput: (event) => handleInput(event),
4527
+ readonly: props.readonly,
4528
+ type: props.type,
4287
4529
  value: props.modelValue,
4288
4530
  }, slots.default && slots.default());
4289
4531
  },
@@ -4363,7 +4605,7 @@ const CFormRange = vue.defineComponent({
4363
4605
  setup(props, { emit, slots }) {
4364
4606
  const handleChange = (event) => {
4365
4607
  const target = event.target;
4366
- emit('change', target.value);
4608
+ emit('change', event);
4367
4609
  emit('update:modelValue', target.value);
4368
4610
  };
4369
4611
  return () => vue.h('input', {
@@ -4375,7 +4617,7 @@ const CFormRange = vue.defineComponent({
4375
4617
  steps: props.steps,
4376
4618
  readonly: props.readonly,
4377
4619
  type: 'range',
4378
- value: props.modelValue || props.value,
4620
+ value: props.modelValue,
4379
4621
  }, slots.default && slots.default());
4380
4622
  },
4381
4623
  });
@@ -4455,7 +4697,7 @@ const CFormSelect = vue.defineComponent({
4455
4697
  .filter((option) => option.selected)
4456
4698
  .map((option) => option.value);
4457
4699
  const value = target.multiple ? selected : selected[0];
4458
- emit('change', value);
4700
+ emit('change', event);
4459
4701
  emit('update:modelValue', value);
4460
4702
  };
4461
4703
  return () => vue.h('select', {
@@ -4463,6 +4705,8 @@ const CFormSelect = vue.defineComponent({
4463
4705
  'form-select',
4464
4706
  {
4465
4707
  [`form-select-${props.size}`]: props.size,
4708
+ 'is-invalid': props.invalid,
4709
+ 'is-valid': props.valid,
4466
4710
  },
4467
4711
  ],
4468
4712
  onChange: (event) => handleChange(event),
@@ -4568,7 +4812,7 @@ const CFormSwitch = vue.defineComponent({
4568
4812
  });
4569
4813
  const handleChange = (event) => {
4570
4814
  const target = event.target;
4571
- emit('change', target.checked);
4815
+ emit('change', event);
4572
4816
  emit('update:modelValue', target.checked);
4573
4817
  };
4574
4818
  return () => vue.h('div', {
@@ -4685,14 +4929,9 @@ const CFormTextarea = vue.defineComponent({
4685
4929
  'update:modelValue',
4686
4930
  ],
4687
4931
  setup(props, { emit, slots }) {
4688
- const handleChange = (event) => {
4689
- const target = event.target;
4690
- emit('change', target.value);
4691
- emit('update:modelValue', target.value);
4692
- };
4693
4932
  const handleInput = (event) => {
4694
4933
  const target = event.target;
4695
- emit('input', target.value);
4934
+ emit('input', event);
4696
4935
  emit('update:modelValue', target.value);
4697
4936
  };
4698
4937
  return () => vue.h('textarea', {
@@ -4705,7 +4944,6 @@ const CFormTextarea = vue.defineComponent({
4705
4944
  'is-valid': props.valid,
4706
4945
  },
4707
4946
  ],
4708
- onChange: (event) => handleChange(event),
4709
4947
  onInput: (event) => handleInput(event),
4710
4948
  value: props.modelValue,
4711
4949
  }, slots.default && slots.default());
@@ -4777,7 +5015,7 @@ const CFormPlugin = {
4777
5015
  },
4778
5016
  };
4779
5017
 
4780
- const BREAKPOINTS$2 = [
5018
+ const BREAKPOINTS$4 = [
4781
5019
  'xxl',
4782
5020
  'xl',
4783
5021
  'lg',
@@ -4850,40 +5088,40 @@ const CCol = vue.defineComponent({
4850
5088
  },
4851
5089
  },
4852
5090
  setup(props, { slots }) {
4853
- const repsonsiveCLassNames = [];
4854
- BREAKPOINTS$2.forEach((bp) => {
5091
+ const repsonsiveClassNames = [];
5092
+ BREAKPOINTS$4.forEach((bp) => {
4855
5093
  const breakpoint = props[bp];
4856
5094
  const infix = bp === 'xs' ? '' : `-${bp}`;
4857
5095
  if (breakpoint) {
4858
5096
  if (typeof breakpoint === 'number' || typeof breakpoint === 'string') {
4859
- repsonsiveCLassNames.push(`col${infix}-${breakpoint}`);
5097
+ repsonsiveClassNames.push(`col${infix}-${breakpoint}`);
4860
5098
  }
4861
5099
  if (typeof breakpoint === 'boolean') {
4862
- repsonsiveCLassNames.push(`col${infix}`);
5100
+ repsonsiveClassNames.push(`col${infix}`);
4863
5101
  }
4864
5102
  }
4865
5103
  if (breakpoint && typeof breakpoint === 'object') {
4866
5104
  if (typeof breakpoint.span === 'number' || typeof breakpoint.span === 'string') {
4867
- repsonsiveCLassNames.push(`col${infix}-${breakpoint.span}`);
5105
+ repsonsiveClassNames.push(`col${infix}-${breakpoint.span}`);
4868
5106
  }
4869
5107
  if (typeof breakpoint.span === 'boolean') {
4870
- repsonsiveCLassNames.push(`col${infix}`);
5108
+ repsonsiveClassNames.push(`col${infix}`);
4871
5109
  }
4872
5110
  if (typeof breakpoint.order === 'number' || typeof breakpoint.order === 'string') {
4873
- repsonsiveCLassNames.push(`order${infix}-${breakpoint.order}`);
5111
+ repsonsiveClassNames.push(`order${infix}-${breakpoint.order}`);
4874
5112
  }
4875
5113
  if (typeof breakpoint.offset === 'number') {
4876
- repsonsiveCLassNames.push(`offset${infix}-${breakpoint.offset}`);
5114
+ repsonsiveClassNames.push(`offset${infix}-${breakpoint.offset}`);
4877
5115
  }
4878
5116
  }
4879
5117
  });
4880
5118
  return () => vue.h('div', {
4881
- class: [repsonsiveCLassNames.length ? repsonsiveCLassNames : 'col'],
5119
+ class: [repsonsiveClassNames.length ? repsonsiveClassNames : 'col'],
4882
5120
  }, slots.default && slots.default());
4883
5121
  },
4884
5122
  });
4885
5123
 
4886
- const BREAKPOINTS$1 = [
5124
+ const BREAKPOINTS$3 = [
4887
5125
  'xxl',
4888
5126
  'xl',
4889
5127
  'lg',
@@ -4938,18 +5176,18 @@ const CContainer = vue.defineComponent({
4938
5176
  },
4939
5177
  },
4940
5178
  setup(props, { slots }) {
4941
- const repsonsiveCLassNames = [];
4942
- BREAKPOINTS$1.forEach((bp) => {
5179
+ const repsonsiveClassNames = [];
5180
+ BREAKPOINTS$3.forEach((bp) => {
4943
5181
  const breakpoint = props[bp];
4944
- breakpoint && repsonsiveCLassNames.push(`container-${bp}`);
5182
+ breakpoint && repsonsiveClassNames.push(`container-${bp}`);
4945
5183
  });
4946
5184
  return () => vue.h('div', {
4947
- class: [repsonsiveCLassNames.length ? repsonsiveCLassNames : 'container'],
5185
+ class: [repsonsiveClassNames.length ? repsonsiveClassNames : 'container'],
4948
5186
  }, slots.default && slots.default());
4949
5187
  },
4950
5188
  });
4951
5189
 
4952
- const BREAKPOINTS = [
5190
+ const BREAKPOINTS$2 = [
4953
5191
  'xxl',
4954
5192
  'xl',
4955
5193
  'lg',
@@ -5022,27 +5260,27 @@ const CRow = vue.defineComponent({
5022
5260
  },
5023
5261
  },
5024
5262
  setup(props, { slots }) {
5025
- const repsonsiveCLassNames = [];
5026
- BREAKPOINTS.forEach((bp) => {
5263
+ const repsonsiveClassNames = [];
5264
+ BREAKPOINTS$2.forEach((bp) => {
5027
5265
  const breakpoint = props[bp];
5028
5266
  const infix = bp === 'xs' ? '' : `-${bp}`;
5029
5267
  if (typeof breakpoint === 'object') {
5030
5268
  if (breakpoint.cols) {
5031
- repsonsiveCLassNames.push(`row-cols${infix}-${breakpoint.cols}`);
5269
+ repsonsiveClassNames.push(`row-cols${infix}-${breakpoint.cols}`);
5032
5270
  }
5033
5271
  if (typeof breakpoint.gutter === 'number') {
5034
- repsonsiveCLassNames.push(`g${infix}-${breakpoint.gutter}`);
5272
+ repsonsiveClassNames.push(`g${infix}-${breakpoint.gutter}`);
5035
5273
  }
5036
5274
  if (typeof breakpoint.gutterX === 'number') {
5037
- repsonsiveCLassNames.push(`gx${infix}-${breakpoint.gutterX}`);
5275
+ repsonsiveClassNames.push(`gx${infix}-${breakpoint.gutterX}`);
5038
5276
  }
5039
5277
  if (typeof breakpoint.gutterY === 'number') {
5040
- repsonsiveCLassNames.push(`gy${infix}-${breakpoint.gutterY}`);
5278
+ repsonsiveClassNames.push(`gy${infix}-${breakpoint.gutterY}`);
5041
5279
  }
5042
5280
  }
5043
5281
  });
5044
5282
  return () => vue.h('div', {
5045
- class: ['row', repsonsiveCLassNames],
5283
+ class: ['row', repsonsiveClassNames],
5046
5284
  }, slots.default && slots.default());
5047
5285
  },
5048
5286
  });
@@ -5336,86 +5574,6 @@ const CListGroupPlugin = {
5336
5574
  },
5337
5575
  };
5338
5576
 
5339
- const CSpinner = vue.defineComponent({
5340
- name: 'CSpinner',
5341
- props: {
5342
- /**
5343
- * Sets the color context of the component to one of CoreUI’s themed colors.
5344
- *
5345
- * @values 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'dark', 'light'
5346
- */
5347
- color: {
5348
- type: String,
5349
- default: undefined,
5350
- required: false,
5351
- validator: (value) => {
5352
- return [
5353
- 'primary',
5354
- 'secondary',
5355
- 'success',
5356
- 'danger',
5357
- 'warning',
5358
- 'info',
5359
- 'dark',
5360
- 'light',
5361
- ].includes(value);
5362
- },
5363
- },
5364
- /**
5365
- * Component used for the root node. Either a string to use a HTML element or a component.
5366
- */
5367
- component: {
5368
- type: String,
5369
- default: 'div',
5370
- required: false,
5371
- },
5372
- /**
5373
- * Size the component small.
5374
- *
5375
- * @values 'sm'
5376
- */
5377
- size: {
5378
- type: String,
5379
- default: undefined,
5380
- required: false,
5381
- validator: (value) => {
5382
- return value === 'sm';
5383
- },
5384
- },
5385
- /**
5386
- * Set the button variant to an outlined button or a ghost button.
5387
- *
5388
- * @values 'border', 'grow'
5389
- */
5390
- variant: {
5391
- type: String,
5392
- default: 'border',
5393
- required: false,
5394
- validator: (value) => {
5395
- return ['border', 'grow'].includes(value);
5396
- },
5397
- },
5398
- /**
5399
- * Set visually hidden label for accessibility purposes.
5400
- */
5401
- visuallyHiddenLabel: {
5402
- type: String,
5403
- default: 'Loading...',
5404
- required: false,
5405
- },
5406
- },
5407
- setup(props) {
5408
- return () => vue.h(props.component, {
5409
- class: [
5410
- `spinner-${props.variant}`,
5411
- `text-${props.color}`,
5412
- props.size && `spinner-${props.variant}-${props.size}`,
5413
- ],
5414
- role: 'status',
5415
- }, vue.h('span', { class: ['visually-hidden'] }, props.visuallyHiddenLabel));
5416
- },
5417
- });
5418
-
5419
5577
  const CLoadingButton = vue.defineComponent({
5420
5578
  name: 'CLoadingButton',
5421
5579
  props: {
@@ -5622,7 +5780,7 @@ const CModal = vue.defineComponent({
5622
5780
  emit('show');
5623
5781
  };
5624
5782
  const handleAfterEnter = () => {
5625
- window.addEventListener('click', handleClickOutside);
5783
+ window.addEventListener('mousedown', handleMouseDown);
5626
5784
  window.addEventListener('keyup', handleKeyUp);
5627
5785
  };
5628
5786
  const handleLeave = (el, done) => {
@@ -5633,7 +5791,7 @@ const CModal = vue.defineComponent({
5633
5791
  el.classList.remove('show');
5634
5792
  };
5635
5793
  const handleAfterLeave = (el) => {
5636
- window.removeEventListener('click', handleClickOutside);
5794
+ window.removeEventListener('mousedown', handleMouseDown);
5637
5795
  window.removeEventListener('keyup', handleKeyUp);
5638
5796
  el.style.display = 'none';
5639
5797
  };
@@ -5655,7 +5813,10 @@ const CModal = vue.defineComponent({
5655
5813
  }
5656
5814
  }
5657
5815
  };
5658
- const handleClickOutside = (event) => {
5816
+ const handleMouseDown = (event) => {
5817
+ window.addEventListener('mouseup', () => handleMouseUp(event), { once: true });
5818
+ };
5819
+ const handleMouseUp = (event) => {
5659
5820
  if (modalContentRef.value && !modalContentRef.value.contains(event.target)) {
5660
5821
  if (props.backdrop !== 'static') {
5661
5822
  handleDismiss();
@@ -6864,19 +7025,20 @@ const COffcanvas = vue.defineComponent({
6864
7025
  }, 1);
6865
7026
  };
6866
7027
  const handleAfterEnter = () => {
6867
- window.addEventListener('click', handleClickOutside);
7028
+ window.addEventListener('mousedown', handleMouseDown);
7029
+ // window.addEventListener('click', handleClickOutside)
6868
7030
  window.addEventListener('keyup', handleKeyUp);
6869
7031
  };
6870
7032
  const handleLeave = (el, done) => {
6871
7033
  el.addEventListener('transitionend', () => {
6872
7034
  done();
6873
7035
  });
7036
+ window.removeEventListener('mousedown', handleMouseDown);
7037
+ window.removeEventListener('keyup', handleKeyUp);
6874
7038
  el.classList.remove('show');
6875
7039
  };
6876
7040
  const handleAfterLeave = (el) => {
6877
7041
  el.style.visibility = 'hidden';
6878
- window.removeEventListener('click', handleClickOutside);
6879
- window.removeEventListener('keyup', handleKeyUp);
6880
7042
  };
6881
7043
  const handleDismiss = () => {
6882
7044
  visible.value = false;
@@ -6889,31 +7051,34 @@ const COffcanvas = vue.defineComponent({
6889
7051
  }
6890
7052
  }
6891
7053
  };
6892
- const handleClickOutside = (event) => {
7054
+ const handleMouseDown = (event) => {
7055
+ window.addEventListener('mouseup', () => handleMouseUp(event), { once: true });
7056
+ };
7057
+ const handleMouseUp = (event) => {
6893
7058
  if (offcanvasRef.value && !offcanvasRef.value.contains(event.target)) {
6894
7059
  props.backdrop && handleDismiss();
6895
7060
  }
6896
7061
  };
6897
7062
  return () => [
6898
7063
  vue.h(vue.Transition, {
7064
+ css: false,
6899
7065
  onEnter: (el, done) => handleEnter(el, done),
6900
7066
  onAfterEnter: () => handleAfterEnter(),
6901
7067
  onLeave: (el, done) => handleLeave(el, done),
6902
7068
  onAfterLeave: (el) => handleAfterLeave(el),
6903
- }, () => visible.value &&
6904
- vue.h('div', {
6905
- class: [
6906
- 'offcanvas',
6907
- {
6908
- [`offcanvas-${props.placement}`]: props.placement,
6909
- },
6910
- ],
6911
- ref: offcanvasRef,
6912
- role: 'dialog',
6913
- }, slots.default && slots.default())),
7069
+ }, () => vue.withDirectives(vue.h('div', {
7070
+ class: [
7071
+ 'offcanvas',
7072
+ {
7073
+ [`offcanvas-${props.placement}`]: props.placement,
7074
+ },
7075
+ ],
7076
+ ref: offcanvasRef,
7077
+ role: 'dialog',
7078
+ }, slots.default && slots.default()), [[vVisible, props.visible]])),
6914
7079
  props.backdrop &&
6915
7080
  vue.h(CBackdrop, {
6916
- class: 'modal-backdrop',
7081
+ class: 'offcanvas-backdrop',
6917
7082
  visible: visible.value,
6918
7083
  }),
6919
7084
  ];
@@ -7360,6 +7525,137 @@ const CPaginationPlugin = {
7360
7525
  },
7361
7526
  };
7362
7527
 
7528
+ const BREAKPOINTS$1 = [
7529
+ 'xxl',
7530
+ 'xl',
7531
+ 'lg',
7532
+ 'md',
7533
+ 'sm',
7534
+ 'xs',
7535
+ ];
7536
+ const CPlaceholder = vue.defineComponent({
7537
+ name: 'CPlaceholder',
7538
+ props: {
7539
+ /**
7540
+ * Set animation type to better convey the perception of something being actively loaded.
7541
+ *
7542
+ * @values 'glow', 'wave'
7543
+ */
7544
+ animation: {
7545
+ type: String,
7546
+ default: undefined,
7547
+ require: false,
7548
+ validator: (value) => {
7549
+ return ['glow', 'wave'].includes(value);
7550
+ },
7551
+ },
7552
+ /**
7553
+ * Sets the color context of the component to one of CoreUI’s themed colors.
7554
+ *
7555
+ * @values 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'dark', 'light'
7556
+ */
7557
+ color: Color,
7558
+ /**
7559
+ * Component used for the root node. Either a string to use a HTML element or a component.
7560
+ */
7561
+ component: {
7562
+ type: String,
7563
+ default: 'span',
7564
+ required: false,
7565
+ },
7566
+ /**
7567
+ * Size the component extra small, small, or large.
7568
+ *
7569
+ * @values 'xs', 'sm', 'lg'
7570
+ */
7571
+ size: {
7572
+ type: String,
7573
+ default: undefined,
7574
+ required: false,
7575
+ validator: (value) => {
7576
+ return ['xs', 'sm', 'lg'].includes(value);
7577
+ },
7578
+ },
7579
+ /**
7580
+ * The number of columns on extra small devices (<576px).
7581
+ */
7582
+ xs: {
7583
+ type: Number,
7584
+ default: undefined,
7585
+ require: false,
7586
+ },
7587
+ /**
7588
+ * The number of columns on small devices (<768px).
7589
+ */
7590
+ sm: {
7591
+ type: Number,
7592
+ default: undefined,
7593
+ require: false,
7594
+ },
7595
+ /**
7596
+ * The number of columns on medium devices (<992px).
7597
+ */
7598
+ md: {
7599
+ type: Number,
7600
+ default: undefined,
7601
+ require: false,
7602
+ },
7603
+ /**
7604
+ * The number of columns on large devices (<1200px).
7605
+ */
7606
+ lg: {
7607
+ type: Number,
7608
+ default: undefined,
7609
+ require: false,
7610
+ },
7611
+ /**
7612
+ * The number of columns on X-Large devices (<1400px).
7613
+ */
7614
+ xl: {
7615
+ type: Number,
7616
+ default: undefined,
7617
+ require: false,
7618
+ },
7619
+ /**
7620
+ * The number of columns on XX-Large devices (≥1400px).
7621
+ */
7622
+ xxl: {
7623
+ type: Number,
7624
+ default: undefined,
7625
+ require: false,
7626
+ },
7627
+ },
7628
+ setup(props, { slots }) {
7629
+ const repsonsiveClassNames = [];
7630
+ BREAKPOINTS$1.forEach((bp) => {
7631
+ const breakpoint = props[bp];
7632
+ const infix = bp === 'xs' ? '' : `-${bp}`;
7633
+ if (typeof breakpoint === 'number') {
7634
+ repsonsiveClassNames.push(`col${infix}-${breakpoint}`);
7635
+ }
7636
+ if (typeof breakpoint === 'boolean') {
7637
+ repsonsiveClassNames.push(`col${infix}`);
7638
+ }
7639
+ });
7640
+ return () => vue.h(props.component, {
7641
+ class: [
7642
+ props.animation ? `placeholder-${props.animation}` : 'placeholder',
7643
+ {
7644
+ [`bg-${props.color}`]: props.color,
7645
+ [`placeholder-${props.size}`]: props.size,
7646
+ },
7647
+ repsonsiveClassNames,
7648
+ ],
7649
+ }, slots.default && slots.default());
7650
+ },
7651
+ });
7652
+
7653
+ const CPlaceholderPlugin = {
7654
+ install: (app) => {
7655
+ app.component(CPlaceholder.name, CPlaceholder);
7656
+ },
7657
+ };
7658
+
7363
7659
  const CProgressBar = vue.defineComponent({
7364
7660
  name: 'CProgressBar',
7365
7661
  props: {
@@ -7877,90 +8173,6 @@ const CSidebarPlugin = {
7877
8173
  },
7878
8174
  };
7879
8175
 
7880
- const CSpinnerPlugin = {
7881
- install: (app) => {
7882
- app.component(CSpinner.name, CSpinner);
7883
- },
7884
- };
7885
-
7886
- const CElementCover = vue.defineComponent({
7887
- name: 'CElementCover',
7888
- props: {
7889
- /**
7890
- * Array of custom boundaries. Use to create custom cover area (instead of parent element area). Area is defined by four sides: 'top', 'bottom', 'right', 'left'. If side is not defined by any custom boundary it is equal to parent element boundary. Each custom boundary is object with keys:
7891
- * - sides (array) - select boundaries of element to define boundaries. Sides names: 'top', 'bottom', 'right', 'left'.
7892
- * - query (string) - query used to get element which define boundaries. Search will be done only inside parent element, by parent.querySelector(query) function. [docs]
7893
- *
7894
- * @type {sides: string[], query: string}[]
7895
- */
7896
- boundaries: {
7897
- // TODO: check if this is correct, TJ
7898
- type: Array,
7899
- require: true,
7900
- },
7901
- /**
7902
- * Opacity of the cover. [docs]
7903
- *
7904
- * @type number
7905
- */
7906
- opacity: {
7907
- type: Number,
7908
- require: false,
7909
- },
7910
- },
7911
- setup(props) {
7912
- let containerCoords = {};
7913
- const elementRef = vue.ref();
7914
- const getCustomBoundaries = () => {
7915
- if (!props.boundaries || elementRef === null) {
7916
- return {};
7917
- }
7918
- const parent = elementRef.value.parentElement;
7919
- if (!parent) {
7920
- return {};
7921
- }
7922
- const parentCoords = parent.getBoundingClientRect();
7923
- const customBoundaries = {};
7924
- props.boundaries.forEach((value) => {
7925
- const element = parent.querySelector(value.query);
7926
- if (!element || !value.sides) {
7927
- return;
7928
- }
7929
- const coords = element.getBoundingClientRect();
7930
- value.sides.forEach((side) => {
7931
- const sideMargin = Math.abs(coords[side] - parentCoords[side]);
7932
- customBoundaries[side] = `${sideMargin}px`;
7933
- });
7934
- });
7935
- return customBoundaries;
7936
- };
7937
- vue.onMounted(function () {
7938
- vue.nextTick(function () {
7939
- containerCoords = getCustomBoundaries();
7940
- });
7941
- });
7942
- return () => vue.h('div', {
7943
- style: {
7944
- ...containerCoords,
7945
- position: 'absolute',
7946
- 'background-color': `rgb(255,255,255,${props.opacity})`,
7947
- },
7948
- ref: elementRef,
7949
- }, vue.h('div', // TODO: use slot to override this
7950
- {
7951
- style: {
7952
- position: 'absolute',
7953
- top: '50%',
7954
- left: '50%',
7955
- transform: 'translateX(-50%) translateY(-50%)',
7956
- },
7957
- }, vue.h(CSpinner, {
7958
- variant: 'grow',
7959
- color: 'primary',
7960
- })));
7961
- },
7962
- });
7963
-
7964
8176
  const CTable = vue.defineComponent({
7965
8177
  name: 'CTable',
7966
8178
  props: {
@@ -8411,9 +8623,12 @@ const CSmartTableHead = vue.defineComponent({
8411
8623
  },
8412
8624
  columnFilter: {
8413
8625
  type: [Boolean, Object],
8414
- default: undefined,
8415
8626
  require: false,
8416
8627
  },
8628
+ columnFilterValue: {
8629
+ type: Object,
8630
+ required: false,
8631
+ },
8417
8632
  columnSorter: {
8418
8633
  type: [Boolean, Object],
8419
8634
  default: undefined,
@@ -8535,30 +8750,31 @@ const CSmartTableHead = vue.defineComponent({
8535
8750
  })),
8536
8751
  ],
8537
8752
  }),
8538
- vue.h(CTableRow, {}, {
8539
- default: () => [
8540
- props.selectable && vue.h(CTableHeaderCell),
8541
- props.columns.map((column) => vue.h(CTableHeaderCell, {
8542
- ...tableHeaderCellProps(column),
8543
- }, {
8544
- default: () => (typeof column !== 'object'
8545
- ? true
8546
- : typeof column.filter === 'undefined'
8753
+ props.columnFilter &&
8754
+ vue.h(CTableRow, {}, {
8755
+ default: () => [
8756
+ props.selectable && vue.h(CTableHeaderCell),
8757
+ props.columns.map((column) => vue.h(CTableHeaderCell, {
8758
+ ...tableHeaderCellProps(column),
8759
+ }, {
8760
+ default: () => (typeof column !== 'object'
8547
8761
  ? true
8548
- : column.filter) &&
8549
- vue.h(CFormInput, {
8550
- size: 'sm',
8551
- onInput: (event) => handleFilterInput(key(column), event.target.value),
8552
- onChange: (event) => handleFilterChange(key(column), event.target.value),
8553
- 'aria-label': `column name: '${label(column)}' filter input`,
8554
- ...(props.columnFilter &&
8555
- props.columnFilter[key(column)] && {
8556
- value: props.columnFilter[key(column)],
8762
+ : typeof column.filter === 'undefined'
8763
+ ? true
8764
+ : column.filter) &&
8765
+ vue.h(CFormInput, {
8766
+ size: 'sm',
8767
+ onInput: (event) => handleFilterInput(key(column), event.target.value),
8768
+ onChange: (event) => handleFilterChange(key(column), event.target.value),
8769
+ 'aria-label': `column name: '${label(column)}' filter input`,
8770
+ ...(props.columnFilterValue &&
8771
+ props.columnFilterValue[key(column)] && {
8772
+ value: props.columnFilterValue[key(column)],
8773
+ }),
8557
8774
  }),
8558
- }),
8559
- })),
8560
- ],
8561
- }),
8775
+ })),
8776
+ ],
8777
+ }),
8562
8778
  ],
8563
8779
  });
8564
8780
  },
@@ -8846,7 +9062,6 @@ const CSmartTable = vue.defineComponent({
8846
9062
  */
8847
9063
  cleaner: {
8848
9064
  type: Boolean,
8849
- default: true,
8850
9065
  required: false,
8851
9066
  },
8852
9067
  /**
@@ -8868,7 +9083,6 @@ const CSmartTable = vue.defineComponent({
8868
9083
  */
8869
9084
  columnFilter: {
8870
9085
  type: [Boolean, Object],
8871
- default: undefined,
8872
9086
  required: false,
8873
9087
  },
8874
9088
  /**
@@ -8945,7 +9159,6 @@ const CSmartTable = vue.defineComponent({
8945
9159
  */
8946
9160
  itemsPerPage: {
8947
9161
  type: Number,
8948
- default: 10,
8949
9162
  required: false,
8950
9163
  },
8951
9164
  /**
@@ -9017,7 +9230,8 @@ const CSmartTable = vue.defineComponent({
9017
9230
  */
9018
9231
  selectable: Boolean,
9019
9232
  /**
9020
- * State of the sorter. Name key is column name, direction can be 'asc' or 'desc'. Set .sync modifier to track changes.
9233
+ * State of the sorter. Name key is column name, direction can be 'asc' or 'desc'. Set .sync modifier to track changes. eg.:
9234
+ * { column: 'status', state: 'asc' }
9021
9235
  *
9022
9236
  * @type SorterValue
9023
9237
  */
@@ -9057,7 +9271,6 @@ const CSmartTable = vue.defineComponent({
9057
9271
  */
9058
9272
  tableFilter: {
9059
9273
  type: [Boolean, Object],
9060
- default: undefined,
9061
9274
  required: false,
9062
9275
  },
9063
9276
  /**
@@ -9179,6 +9392,7 @@ const CSmartTable = vue.defineComponent({
9179
9392
  const selectedAll = vue.ref();
9180
9393
  vue.watch(items, () => {
9181
9394
  const selected = items.value.filter((item) => item._selected === true);
9395
+ emit('selectedItemsChange', selected);
9182
9396
  if (selected.length === items.value.length) {
9183
9397
  selectedAll.value = true;
9184
9398
  return;
@@ -9190,9 +9404,8 @@ const CSmartTable = vue.defineComponent({
9190
9404
  if (selected.length !== 0 && selected.length !== items.value.length) {
9191
9405
  selectedAll.value = 'indeterminate';
9192
9406
  }
9193
- emit('selectedItemsChange', selected);
9194
9407
  });
9195
- const itemsPerPage = vue.ref(props.itemsPerPage);
9408
+ const itemsPerPage = vue.ref(props.itemsPerPage || items.value.length);
9196
9409
  const activePage = vue.ref(props.activePage);
9197
9410
  const sorterState = vue.reactive(props.sorterValue || {});
9198
9411
  const columnFilterState = vue.ref(props.columnFilterValue ? props.columnFilterValue : {});
@@ -9230,7 +9443,12 @@ const CSmartTable = vue.defineComponent({
9230
9443
  state.state = 'desc';
9231
9444
  }
9232
9445
  else {
9233
- state.state = 0;
9446
+ if (typeof props.columnSorter === 'object' && !props.columnSorter.resetable) {
9447
+ state.state = 'asc';
9448
+ }
9449
+ else {
9450
+ state.state = 0;
9451
+ }
9234
9452
  }
9235
9453
  }
9236
9454
  else {
@@ -9371,22 +9589,25 @@ const CSmartTable = vue.defineComponent({
9371
9589
  Object.values(columnFilterState.value).join(''));
9372
9590
  });
9373
9591
  return () => vue.h('div', {}, [
9374
- vue.h('div', {
9375
- class: 'row my-2 mx-0',
9376
- }, {
9377
- default: () => (props.tableFilter || props.cleaner) && [
9378
- vue.h('div', {
9379
- class: 'col-auto p-0',
9380
- }, props.tableFilter &&
9381
- vue.h(CSmartTableFilter, {
9382
- onFilterInput: (value) => tableFilterChange(value, 'input'),
9383
- onFilterChange: (value) => tableFilterChange(value, 'change'),
9384
- value: tableFilterState.value,
9385
- })),
9386
- vue.h('div', {
9387
- class: 'col-auto p-0',
9388
- }, props.cleaner &&
9389
- vue.h(CSmartTableCleaner, {
9592
+ (props.tableFilter || props.cleaner) &&
9593
+ vue.h('div', {
9594
+ class: 'row my-2 mx-0',
9595
+ }, [
9596
+ props.tableFilter &&
9597
+ vue.h('div', {
9598
+ class: 'col-auto p-0',
9599
+ }, props.tableFilter &&
9600
+ vue.h(CSmartTableFilter, {
9601
+ filterLabel: props.tableFilterLabel,
9602
+ filterPlaceholder: props.tableFilterPlaceholder,
9603
+ onFilterInput: (value) => tableFilterChange(value, 'input'),
9604
+ onFilterChange: (value) => tableFilterChange(value, 'change'),
9605
+ value: tableFilterState.value,
9606
+ })),
9607
+ props.cleaner &&
9608
+ vue.h('div', {
9609
+ class: 'col-auto p-0',
9610
+ }, vue.h(CSmartTableCleaner, {
9390
9611
  onClick: () => clean(),
9391
9612
  isFiltered: isFiltered.value,
9392
9613
  }, {
@@ -9395,8 +9616,7 @@ const CSmartTable = vue.defineComponent({
9395
9616
  ? slots.cleanerIcon()
9396
9617
  : vue.h(CIcon, { width: '18', content: cilFilterX }),
9397
9618
  })),
9398
- ],
9399
- }),
9619
+ ]),
9400
9620
  vue.h('div', {
9401
9621
  class: 'position-relative',
9402
9622
  }, {
@@ -9409,7 +9629,8 @@ const CSmartTable = vue.defineComponent({
9409
9629
  vue.h(CSmartTableHead, {
9410
9630
  component: 'head',
9411
9631
  ...props.tableHeadProps,
9412
- columnFilter: columnFilterState.value,
9632
+ columnFilter: props.columnFilter,
9633
+ columnFilterValue: columnFilterState.value,
9413
9634
  columns: props.columns,
9414
9635
  columnSorter: props.columnSorter,
9415
9636
  selectable: props.selectable,
@@ -10531,6 +10752,8 @@ var Components = /*#__PURE__*/Object.freeze({
10531
10752
  CDropdownDivider: CDropdownDivider,
10532
10753
  CDropdownMenu: CDropdownMenu,
10533
10754
  CDropdownToggle: CDropdownToggle,
10755
+ CElementCoverPlugin: CElementCoverPlugin,
10756
+ CElementCover: CElementCover,
10534
10757
  CFooterPlugin: CFooterPlugin,
10535
10758
  CFooter: CFooter,
10536
10759
  CFormPlugin: CFormPlugin,
@@ -10597,6 +10820,8 @@ var Components = /*#__PURE__*/Object.freeze({
10597
10820
  CPagination: CPagination,
10598
10821
  CPaginationItem: CPaginationItem,
10599
10822
  CSmartPagination: CSmartPagination,
10823
+ CPlaceholderPlugin: CPlaceholderPlugin,
10824
+ CPlaceholder: CPlaceholder,
10600
10825
  CProgressPlugin: CProgressPlugin,
10601
10826
  CProgress: CProgress,
10602
10827
  CProgressBar: CProgressBar,
@@ -10642,49 +10867,79 @@ var Components = /*#__PURE__*/Object.freeze({
10642
10867
  CWidgetStatsF: CWidgetStatsF
10643
10868
  });
10644
10869
 
10870
+ const BREAKPOINTS = [
10871
+ 'xxl',
10872
+ 'xl',
10873
+ 'lg',
10874
+ 'md',
10875
+ 'sm',
10876
+ 'xs',
10877
+ ];
10878
+ var vcplaceholder = {
10879
+ name: 'c-placeholder',
10880
+ mounted(el, binding) {
10881
+ const value = binding.value;
10882
+ el.classList.add(value.animation ? `placeholder-${value.animation}` : 'placeholder');
10883
+ BREAKPOINTS.forEach((bp) => {
10884
+ const breakpoint = value[bp];
10885
+ const infix = bp === 'xs' ? '' : `-${bp}`;
10886
+ if (typeof breakpoint === 'number') {
10887
+ el.classList.add(`col${infix}-${breakpoint}`);
10888
+ }
10889
+ if (typeof breakpoint === 'boolean') {
10890
+ el.classList.add(`col${infix}`);
10891
+ }
10892
+ });
10893
+ },
10894
+ };
10895
+
10645
10896
  const getUID$1 = (prefix) => {
10646
10897
  do {
10647
10898
  prefix += Math.floor(Math.random() * 1000000);
10648
10899
  } while (document.getElementById(prefix));
10649
10900
  return prefix;
10650
10901
  };
10651
- const createTooltipElement = (id, content) => {
10652
- const tooltip = document.createElement('div');
10653
- tooltip.id = id;
10654
- tooltip.classList.add('tooltip', 'bs-tooltip-auto', 'fade');
10655
- tooltip.setAttribute('role', 'tooltip');
10656
- tooltip.innerHTML = `<div class="tooltip-arrow" data-popper-arrow></div>
10657
- <div class="tooltip-inner" id="">${content}</div>`;
10658
- return tooltip;
10902
+ const createPopoverElement = (id, header, content) => {
10903
+ const popover = document.createElement('div');
10904
+ popover.id = id;
10905
+ popover.classList.add('popover', 'bs-popover-auto', 'fade');
10906
+ popover.setAttribute('role', 'popover');
10907
+ popover.innerHTML = `<div class="popover-arrow" data-popper-arrow></div>
10908
+ <div class="popover-header">${header}</div>
10909
+ <div class="popover-body" id="">${content}</div>`;
10910
+ return popover;
10659
10911
  };
10660
- const addTooltipElement = (tooltip, el, popperOptions) => {
10661
- document.body.appendChild(tooltip);
10662
- createPopper(el, tooltip, popperOptions);
10912
+ const addPopoverElement = (popover, el, popperOptions) => {
10913
+ document.body.appendChild(popover);
10914
+ createPopper(el, popover, popperOptions);
10663
10915
  setTimeout(() => {
10664
- tooltip.classList.add('show');
10916
+ popover.classList.add('show');
10665
10917
  }, 1);
10666
10918
  };
10667
- const removeTooltipElement = (tooltip) => {
10668
- tooltip.classList.remove('show');
10919
+ const removePopoverElement = (popover) => {
10920
+ popover.classList.remove('show');
10669
10921
  setTimeout(() => {
10670
- document.body.removeChild(tooltip);
10922
+ document.body.removeChild(popover);
10671
10923
  }, 300);
10672
10924
  };
10673
- const toggleTooltipElement = (tooltip, el, popperOptions) => {
10674
- const popperElement = document.getElementById(tooltip.id);
10925
+ const togglePopoverElement = (popover, el, popperOptions) => {
10926
+ const popperElement = document.getElementById(popover.id);
10675
10927
  if (popperElement && popperElement.classList.contains('show')) {
10676
- removeTooltipElement(tooltip);
10928
+ removePopoverElement(popover);
10677
10929
  return;
10678
10930
  }
10679
- addTooltipElement(tooltip, el, popperOptions);
10931
+ addPopoverElement(popover, el, popperOptions);
10680
10932
  };
10681
- var vctooltip = {
10933
+ var vcpopover = {
10934
+ name: 'c-popover',
10935
+ uid: '',
10682
10936
  mounted(el, binding) {
10683
10937
  const value = binding.value;
10684
10938
  const content = typeof value === 'string' ? value : value.content ? value.content : '';
10685
- const trigger = value.trigger ? value.trigger : 'hover';
10939
+ const header = value.header ? value.header : '';
10940
+ const trigger = value.trigger ? value.trigger : 'click';
10686
10941
  // Popper Config
10687
- const offset = value.offset ? value.offset : [0, 0];
10942
+ const offset = value.offset ? value.offset : [0, 8];
10688
10943
  const placement = value.placement ? value.placement : 'top';
10689
10944
  const popperOptions = {
10690
10945
  placement: placement,
@@ -10697,33 +10952,33 @@ var vctooltip = {
10697
10952
  },
10698
10953
  ],
10699
10954
  };
10700
- const tooltipUID = getUID$1('tooltip');
10701
- binding.arg = tooltipUID;
10702
- const tooltip = createTooltipElement(tooltipUID, content);
10955
+ const popoverUID = getUID$1('popover');
10956
+ binding.arg = popoverUID;
10957
+ const popover = createPopoverElement(popoverUID, header, content);
10703
10958
  trigger.includes('click') &&
10704
10959
  el.addEventListener('click', () => {
10705
- toggleTooltipElement(tooltip, el, popperOptions);
10960
+ togglePopoverElement(popover, el, popperOptions);
10706
10961
  });
10707
10962
  if (trigger.includes('focus')) {
10708
10963
  el.addEventListener('focus', () => {
10709
- addTooltipElement(tooltip, el, popperOptions);
10964
+ addPopoverElement(popover, el, popperOptions);
10710
10965
  });
10711
10966
  el.addEventListener('blur', () => {
10712
- removeTooltipElement(tooltip);
10967
+ removePopoverElement(popover);
10713
10968
  });
10714
10969
  }
10715
10970
  if (trigger.includes('hover')) {
10716
10971
  el.addEventListener('mouseenter', () => {
10717
- addTooltipElement(tooltip, el, popperOptions);
10972
+ addPopoverElement(popover, el, popperOptions);
10718
10973
  });
10719
10974
  el.addEventListener('mouseleave', () => {
10720
- removeTooltipElement(tooltip);
10975
+ removePopoverElement(popover);
10721
10976
  });
10722
10977
  }
10723
10978
  },
10724
- beforeUnmount(binding) {
10725
- const tooltip = binding.arg && document.getElementById(binding.arg);
10726
- tooltip && tooltip.remove();
10979
+ unmounted(binding) {
10980
+ const popover = binding.arg && document.getElementById(binding.arg);
10981
+ popover && popover.remove();
10727
10982
  },
10728
10983
  };
10729
10984
 
@@ -10733,47 +10988,43 @@ const getUID = (prefix) => {
10733
10988
  } while (document.getElementById(prefix));
10734
10989
  return prefix;
10735
10990
  };
10736
- const createPopoverElement = (id, header, content) => {
10737
- const popover = document.createElement('div');
10738
- popover.id = id;
10739
- popover.classList.add('popover', 'bs-popover-auto', 'fade');
10740
- popover.setAttribute('role', 'popover');
10741
- popover.innerHTML = `<div class="popover-arrow" data-popper-arrow></div>
10742
- <div class="popover-header">${header}</div>
10743
- <div class="popover-body" id="">${content}</div>`;
10744
- return popover;
10991
+ const createTooltipElement = (id, content) => {
10992
+ const tooltip = document.createElement('div');
10993
+ tooltip.id = id;
10994
+ tooltip.classList.add('tooltip', 'bs-tooltip-auto', 'fade');
10995
+ tooltip.setAttribute('role', 'tooltip');
10996
+ tooltip.innerHTML = `<div class="tooltip-arrow" data-popper-arrow></div>
10997
+ <div class="tooltip-inner" id="">${content}</div>`;
10998
+ return tooltip;
10745
10999
  };
10746
- const addPopoverElement = (popover, el, popperOptions) => {
10747
- document.body.appendChild(popover);
10748
- createPopper(el, popover, popperOptions);
11000
+ const addTooltipElement = (tooltip, el, popperOptions) => {
11001
+ document.body.appendChild(tooltip);
11002
+ createPopper(el, tooltip, popperOptions);
10749
11003
  setTimeout(() => {
10750
- popover.classList.add('show');
11004
+ tooltip.classList.add('show');
10751
11005
  }, 1);
10752
11006
  };
10753
- const removePopoverElement = (popover) => {
10754
- popover.classList.remove('show');
11007
+ const removeTooltipElement = (tooltip) => {
11008
+ tooltip.classList.remove('show');
10755
11009
  setTimeout(() => {
10756
- document.body.removeChild(popover);
11010
+ document.body.removeChild(tooltip);
10757
11011
  }, 300);
10758
11012
  };
10759
- const togglePopoverElement = (popover, el, popperOptions) => {
10760
- const popperElement = document.getElementById(popover.id);
11013
+ const toggleTooltipElement = (tooltip, el, popperOptions) => {
11014
+ const popperElement = document.getElementById(tooltip.id);
10761
11015
  if (popperElement && popperElement.classList.contains('show')) {
10762
- removePopoverElement(popover);
11016
+ removeTooltipElement(tooltip);
10763
11017
  return;
10764
11018
  }
10765
- addPopoverElement(popover, el, popperOptions);
11019
+ addTooltipElement(tooltip, el, popperOptions);
10766
11020
  };
10767
- var vcpopover = {
10768
- name: 'c-popover',
10769
- uid: '',
11021
+ var vctooltip = {
10770
11022
  mounted(el, binding) {
10771
11023
  const value = binding.value;
10772
11024
  const content = typeof value === 'string' ? value : value.content ? value.content : '';
10773
- const header = value.header ? value.header : '';
10774
- const trigger = value.trigger ? value.trigger : 'click';
11025
+ const trigger = value.trigger ? value.trigger : 'hover';
10775
11026
  // Popper Config
10776
- const offset = value.offset ? value.offset : [0, 8];
11027
+ const offset = value.offset ? value.offset : [0, 0];
10777
11028
  const placement = value.placement ? value.placement : 'top';
10778
11029
  const popperOptions = {
10779
11030
  placement: placement,
@@ -10786,33 +11037,33 @@ var vcpopover = {
10786
11037
  },
10787
11038
  ],
10788
11039
  };
10789
- const popoverUID = getUID('popover');
10790
- binding.arg = popoverUID;
10791
- const popover = createPopoverElement(popoverUID, header, content);
11040
+ const tooltipUID = getUID('tooltip');
11041
+ binding.arg = tooltipUID;
11042
+ const tooltip = createTooltipElement(tooltipUID, content);
10792
11043
  trigger.includes('click') &&
10793
11044
  el.addEventListener('click', () => {
10794
- togglePopoverElement(popover, el, popperOptions);
11045
+ toggleTooltipElement(tooltip, el, popperOptions);
10795
11046
  });
10796
11047
  if (trigger.includes('focus')) {
10797
11048
  el.addEventListener('focus', () => {
10798
- addPopoverElement(popover, el, popperOptions);
11049
+ addTooltipElement(tooltip, el, popperOptions);
10799
11050
  });
10800
11051
  el.addEventListener('blur', () => {
10801
- removePopoverElement(popover);
11052
+ removeTooltipElement(tooltip);
10802
11053
  });
10803
11054
  }
10804
11055
  if (trigger.includes('hover')) {
10805
11056
  el.addEventListener('mouseenter', () => {
10806
- addPopoverElement(popover, el, popperOptions);
11057
+ addTooltipElement(tooltip, el, popperOptions);
10807
11058
  });
10808
11059
  el.addEventListener('mouseleave', () => {
10809
- removePopoverElement(popover);
11060
+ removeTooltipElement(tooltip);
10810
11061
  });
10811
11062
  }
10812
11063
  },
10813
- unmounted(binding) {
10814
- const popover = binding.arg && document.getElementById(binding.arg);
10815
- popover && popover.remove();
11064
+ beforeUnmount(binding) {
11065
+ const tooltip = binding.arg && document.getElementById(binding.arg);
11066
+ tooltip && tooltip.remove();
10816
11067
  },
10817
11068
  };
10818
11069
 
@@ -10839,6 +11090,7 @@ const CoreuiVue = {
10839
11090
  // for (const directive in pluginDirectives) {
10840
11091
  // app.directive(directive, Directives[directive])
10841
11092
  // }
11093
+ app.directive('c-placeholder', vcplaceholder);
10842
11094
  app.directive('c-popover', vcpopover);
10843
11095
  app.directive('c-tooltip', vctooltip);
10844
11096
  },
@@ -10901,6 +11153,8 @@ exports.CDropdownItem = CDropdownItem;
10901
11153
  exports.CDropdownMenu = CDropdownMenu;
10902
11154
  exports.CDropdownPlugin = CDropdownPlugin;
10903
11155
  exports.CDropdownToggle = CDropdownToggle;
11156
+ exports.CElementCover = CElementCover;
11157
+ exports.CElementCoverPlugin = CElementCoverPlugin;
10904
11158
  exports.CFooter = CFooter;
10905
11159
  exports.CFooterPlugin = CFooterPlugin;
10906
11160
  exports.CForm = CForm;
@@ -10962,6 +11216,8 @@ exports.COffcanvasTitle = COffcanvasTitle;
10962
11216
  exports.CPagination = CPagination;
10963
11217
  exports.CPaginationItem = CPaginationItem;
10964
11218
  exports.CPaginationPlugin = CPaginationPlugin;
11219
+ exports.CPlaceholder = CPlaceholder;
11220
+ exports.CPlaceholderPlugin = CPlaceholderPlugin;
10965
11221
  exports.CPopover = CPopover;
10966
11222
  exports.CPopoverPlugin = CPopoverPlugin;
10967
11223
  exports.CProgress = CProgress;
@@ -11008,6 +11264,7 @@ exports.CWidgetStatsE = CWidgetStatsE;
11008
11264
  exports.CWidgetStatsF = CWidgetStatsF;
11009
11265
  exports.CWidgetsStatsPlugin = CWidgetsStatsPlugin;
11010
11266
  exports["default"] = CoreuiVue;
11267
+ exports.vcplaceholder = vcplaceholder;
11011
11268
  exports.vcpopover = vcpopover;
11012
11269
  exports.vctooltip = vctooltip;
11013
11270
  //# sourceMappingURL=index.js.map