@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.es.js CHANGED
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, provide, h as h$1, Transition, withDirectives, vShow, inject, watch, reactive, onBeforeMount, onMounted, onUpdated, toRefs, onUnmounted, computed, Teleport, onBeforeUnmount, nextTick } from 'vue';
1
+ import { defineComponent, ref, provide, h as h$1, Transition, withDirectives, inject, watch, reactive, onBeforeMount, onMounted, onUpdated, toRefs, onUnmounted, nextTick, computed, Teleport, onBeforeUnmount, vShow } from 'vue';
2
2
 
3
3
  const CAccordion = defineComponent({
4
4
  name: 'CAccordion',
@@ -32,9 +32,45 @@ const CAccordion = defineComponent({
32
32
  },
33
33
  });
34
34
 
35
+ const vVisible = {
36
+ beforeMount(el, { value }, { transition }) {
37
+ el._vod = el.style.display === 'none' ? '' : el.style.display;
38
+ if (transition && value) {
39
+ transition.beforeEnter(el);
40
+ }
41
+ },
42
+ mounted(el, { value }, { transition }) {
43
+ if (transition && value) {
44
+ transition.enter(el);
45
+ }
46
+ },
47
+ updated(el, { value, oldValue }, { transition }) {
48
+ if (!value === !oldValue)
49
+ return;
50
+ if (transition) {
51
+ if (value) {
52
+ transition.beforeEnter(el);
53
+ transition.enter(el);
54
+ }
55
+ else {
56
+ transition.leave(el, () => {
57
+ // setDisplay(el, false)
58
+ });
59
+ }
60
+ }
61
+ },
62
+ };
63
+
35
64
  const CCollapse = defineComponent({
36
65
  name: 'CCollapse',
37
66
  props: {
67
+ /**
68
+ * Set horizontal collapsing to transition the width instead of height.
69
+ */
70
+ horizontal: {
71
+ type: Boolean,
72
+ required: false,
73
+ },
38
74
  /**
39
75
  * Toggle the visibility of component.
40
76
  */
@@ -54,42 +90,58 @@ const CCollapse = defineComponent({
54
90
  'show',
55
91
  ],
56
92
  setup(props, { slots, emit }) {
57
- const handleBeforeEnter = (el) => {
58
- el.classList.remove('collapse');
59
- el.classList.add('collapsing');
93
+ const collapsing = ref(false);
94
+ const show = ref(props.visible);
95
+ const handleBeforeEnter = () => {
96
+ collapsing.value = true;
60
97
  };
61
98
  const handleEnter = (el, done) => {
62
99
  emit('show');
63
100
  el.addEventListener('transitionend', () => {
64
- el.classList.add('collapse', 'show');
65
101
  done();
66
102
  });
67
- el.style.height = `${el.scrollHeight}px`;
103
+ setTimeout(() => {
104
+ if (props.horizontal) {
105
+ el.style.width = `${el.scrollWidth}px`;
106
+ return;
107
+ }
108
+ el.style.height = `${el.scrollHeight}px`;
109
+ }, 1);
68
110
  };
69
111
  const handleAfterEnter = (el) => {
70
- el.classList.remove('collapsing');
71
- el.style.removeProperty('height');
112
+ show.value = true;
113
+ collapsing.value = false;
114
+ props.horizontal ? el.style.removeProperty('width') : el.style.removeProperty('height');
72
115
  };
73
116
  const handleBeforeLeave = (el) => {
74
- el.classList.add('show');
117
+ collapsing.value = true;
118
+ show.value = false;
119
+ if (props.horizontal) {
120
+ el.style.width = `${el.scrollWidth}px`;
121
+ return;
122
+ }
75
123
  el.style.height = `${el.scrollHeight}px`;
76
124
  };
77
125
  const handleLeave = (el, done) => {
78
126
  emit('hide');
79
- el.classList.remove('collapse', 'show');
80
- el.classList.add('collapsing');
81
127
  el.addEventListener('transitionend', () => {
82
128
  done();
83
129
  });
84
- el.style.height = '0px';
130
+ setTimeout(() => {
131
+ if (props.horizontal) {
132
+ el.style.width = '0px';
133
+ return;
134
+ }
135
+ el.style.height = '0px';
136
+ }, 1);
85
137
  };
86
138
  const handleAfterLeave = (el) => {
87
- el.classList.remove('collapsing');
88
- el.classList.add('collapse');
139
+ collapsing.value = false;
140
+ props.horizontal ? el.style.removeProperty('width') : el.style.removeProperty('height');
89
141
  };
90
142
  return () => h$1(Transition, {
91
- name: 'fade',
92
- onBeforeEnter: (el) => handleBeforeEnter(el),
143
+ css: false,
144
+ onBeforeEnter: () => handleBeforeEnter(),
93
145
  onEnter: (el, done) => handleEnter(el, done),
94
146
  onAfterEnter: (el) => handleAfterEnter(el),
95
147
  onBeforeLeave: (el) => handleBeforeLeave(el),
@@ -97,12 +149,10 @@ const CCollapse = defineComponent({
97
149
  onAfterLeave: (el) => handleAfterLeave(el),
98
150
  }, () => withDirectives(h$1('div', {
99
151
  class: [
100
- 'collapse',
101
- {
102
- show: props.visible,
103
- },
152
+ collapsing.value ? 'collapsing' : 'collapse',
153
+ { 'collapse-horizontal': props.horizontal, show: show.value },
104
154
  ],
105
- }, slots.default && slots.default()), [[vShow, props.visible]]));
155
+ }, slots.default && slots.default()), [[vVisible, props.visible]]));
106
156
  },
107
157
  });
108
158
 
@@ -796,6 +846,7 @@ const CButton = defineComponent({
796
846
  ],
797
847
  disabled: props.disabled && props.component !== 'a',
798
848
  ...(props.component === 'a' && props.disabled && { 'aria-disabled': true, tabIndex: -1 }),
849
+ ...(props.component === 'a' && props.href && { href: props.href }),
799
850
  }, slots.default && slots.default());
800
851
  },
801
852
  });
@@ -1610,29 +1661,32 @@ function getBasePlacement(placement) {
1610
1661
  return placement.split('-')[0];
1611
1662
  }
1612
1663
 
1613
- // import { isHTMLElement } from './instanceOf';
1614
- function getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars
1615
- includeScale) {
1664
+ var max = Math.max;
1665
+ var min = Math.min;
1666
+ var round = Math.round;
1667
+
1668
+ function getBoundingClientRect(element, includeScale) {
1669
+ if (includeScale === void 0) {
1670
+ includeScale = false;
1671
+ }
1616
1672
 
1617
1673
  var rect = element.getBoundingClientRect();
1618
1674
  var scaleX = 1;
1619
- var scaleY = 1; // FIXME:
1620
- // `offsetWidth` returns an integer while `getBoundingClientRect`
1621
- // returns a float. This results in `scaleX` or `scaleY` being
1622
- // non-1 when it should be for elements that aren't a full pixel in
1623
- // width or height.
1624
- // if (isHTMLElement(element) && includeScale) {
1625
- // const offsetHeight = element.offsetHeight;
1626
- // const offsetWidth = element.offsetWidth;
1627
- // // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
1628
- // // Fallback to 1 in case both values are `0`
1629
- // if (offsetWidth > 0) {
1630
- // scaleX = rect.width / offsetWidth || 1;
1631
- // }
1632
- // if (offsetHeight > 0) {
1633
- // scaleY = rect.height / offsetHeight || 1;
1634
- // }
1635
- // }
1675
+ var scaleY = 1;
1676
+
1677
+ if (isHTMLElement(element) && includeScale) {
1678
+ var offsetHeight = element.offsetHeight;
1679
+ var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
1680
+ // Fallback to 1 in case both values are `0`
1681
+
1682
+ if (offsetWidth > 0) {
1683
+ scaleX = round(rect.width) / offsetWidth || 1;
1684
+ }
1685
+
1686
+ if (offsetHeight > 0) {
1687
+ scaleY = round(rect.height) / offsetHeight || 1;
1688
+ }
1689
+ }
1636
1690
 
1637
1691
  return {
1638
1692
  width: rect.width / scaleX,
@@ -1787,13 +1841,13 @@ function getMainAxisFromPlacement(placement) {
1787
1841
  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
1788
1842
  }
1789
1843
 
1790
- var max = Math.max;
1791
- var min = Math.min;
1792
- var round = Math.round;
1793
-
1794
1844
  function within(min$1, value, max$1) {
1795
1845
  return max(min$1, min(value, max$1));
1796
1846
  }
1847
+ function withinMaxClamp(min, value, max) {
1848
+ var v = within(min, value, max);
1849
+ return v > max ? max : v;
1850
+ }
1797
1851
 
1798
1852
  function getFreshSideObject() {
1799
1853
  return {
@@ -1925,8 +1979,8 @@ function roundOffsetsByDPR(_ref) {
1925
1979
  var win = window;
1926
1980
  var dpr = win.devicePixelRatio || 1;
1927
1981
  return {
1928
- x: round(round(x * dpr) / dpr) || 0,
1929
- y: round(round(y * dpr) / dpr) || 0
1982
+ x: round(x * dpr) / dpr || 0,
1983
+ y: round(y * dpr) / dpr || 0
1930
1984
  };
1931
1985
  }
1932
1986
 
@@ -1941,7 +1995,8 @@ function mapToStyles(_ref2) {
1941
1995
  position = _ref2.position,
1942
1996
  gpuAcceleration = _ref2.gpuAcceleration,
1943
1997
  adaptive = _ref2.adaptive,
1944
- roundOffsets = _ref2.roundOffsets;
1998
+ roundOffsets = _ref2.roundOffsets,
1999
+ isFixed = _ref2.isFixed;
1945
2000
 
1946
2001
  var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,
1947
2002
  _ref3$x = _ref3.x,
@@ -1973,16 +2028,18 @@ function mapToStyles(_ref2) {
1973
2028
  offsetParent = offsetParent;
1974
2029
 
1975
2030
  if (placement === top || (placement === left || placement === right) && variation === end) {
1976
- sideY = bottom; // $FlowFixMe[prop-missing]
1977
-
1978
- y -= offsetParent[heightProp] - popperRect.height;
2031
+ sideY = bottom;
2032
+ var offsetY = isFixed && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
2033
+ offsetParent[heightProp];
2034
+ y -= offsetY - popperRect.height;
1979
2035
  y *= gpuAcceleration ? 1 : -1;
1980
2036
  }
1981
2037
 
1982
2038
  if (placement === left || (placement === top || placement === bottom) && variation === end) {
1983
- sideX = right; // $FlowFixMe[prop-missing]
1984
-
1985
- x -= offsetParent[widthProp] - popperRect.width;
2039
+ sideX = right;
2040
+ var offsetX = isFixed && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
2041
+ offsetParent[widthProp];
2042
+ x -= offsetX - popperRect.width;
1986
2043
  x *= gpuAcceleration ? 1 : -1;
1987
2044
  }
1988
2045
  }
@@ -2025,7 +2082,8 @@ function computeStyles(_ref4) {
2025
2082
  variation: getVariation(state.placement),
2026
2083
  popper: state.elements.popper,
2027
2084
  popperRect: state.rects.popper,
2028
- gpuAcceleration: gpuAcceleration
2085
+ gpuAcceleration: gpuAcceleration,
2086
+ isFixed: state.options.strategy === 'fixed'
2029
2087
  };
2030
2088
 
2031
2089
  if (state.modifiersData.popperOffsets != null) {
@@ -2283,7 +2341,7 @@ function getInnerBoundingClientRect(element) {
2283
2341
  }
2284
2342
 
2285
2343
  function getClientRectFromMixedType(element, clippingParent) {
2286
- return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
2344
+ return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
2287
2345
  } // A "clipping parent" is an overflowable container with the characteristic of
2288
2346
  // clipping (or hiding) overflowing elements with a position different from
2289
2347
  // `initial`
@@ -2300,7 +2358,7 @@ function getClippingParents(element) {
2300
2358
 
2301
2359
 
2302
2360
  return clippingParents.filter(function (clippingParent) {
2303
- return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
2361
+ return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body' && (canEscapeClipping ? getComputedStyle$1(clippingParent).position !== 'static' : true);
2304
2362
  });
2305
2363
  } // Gets the maximum area that the element is visible in due to any number of
2306
2364
  // clipping parents
@@ -2800,6 +2858,14 @@ function preventOverflow(_ref) {
2800
2858
  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
2801
2859
  placement: state.placement
2802
2860
  })) : tetherOffset;
2861
+ var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
2862
+ mainAxis: tetherOffsetValue,
2863
+ altAxis: tetherOffsetValue
2864
+ } : Object.assign({
2865
+ mainAxis: 0,
2866
+ altAxis: 0
2867
+ }, tetherOffsetValue);
2868
+ var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
2803
2869
  var data = {
2804
2870
  x: 0,
2805
2871
  y: 0
@@ -2809,13 +2875,15 @@ function preventOverflow(_ref) {
2809
2875
  return;
2810
2876
  }
2811
2877
 
2812
- if (checkMainAxis || checkAltAxis) {
2878
+ if (checkMainAxis) {
2879
+ var _offsetModifierState$;
2880
+
2813
2881
  var mainSide = mainAxis === 'y' ? top : left;
2814
2882
  var altSide = mainAxis === 'y' ? bottom : right;
2815
2883
  var len = mainAxis === 'y' ? 'height' : 'width';
2816
2884
  var offset = popperOffsets[mainAxis];
2817
- var min$1 = popperOffsets[mainAxis] + overflow[mainSide];
2818
- var max$1 = popperOffsets[mainAxis] - overflow[altSide];
2885
+ var min$1 = offset + overflow[mainSide];
2886
+ var max$1 = offset - overflow[altSide];
2819
2887
  var additive = tether ? -popperRect[len] / 2 : 0;
2820
2888
  var minLen = variation === start ? referenceRect[len] : popperRect[len];
2821
2889
  var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
@@ -2835,36 +2903,45 @@ function preventOverflow(_ref) {
2835
2903
  // width or height)
2836
2904
 
2837
2905
  var arrowLen = within(0, referenceRect[len], arrowRect[len]);
2838
- var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;
2839
- var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;
2906
+ var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
2907
+ var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
2840
2908
  var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
2841
2909
  var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
2842
- var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;
2843
- var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;
2844
- var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;
2910
+ var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
2911
+ var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
2912
+ var tetherMax = offset + maxOffset - offsetModifierValue;
2913
+ var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
2914
+ popperOffsets[mainAxis] = preventedOffset;
2915
+ data[mainAxis] = preventedOffset - offset;
2916
+ }
2845
2917
 
2846
- if (checkMainAxis) {
2847
- var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
2848
- popperOffsets[mainAxis] = preventedOffset;
2849
- data[mainAxis] = preventedOffset - offset;
2850
- }
2918
+ if (checkAltAxis) {
2919
+ var _offsetModifierState$2;
2851
2920
 
2852
- if (checkAltAxis) {
2853
- var _mainSide = mainAxis === 'x' ? top : left;
2921
+ var _mainSide = mainAxis === 'x' ? top : left;
2854
2922
 
2855
- var _altSide = mainAxis === 'x' ? bottom : right;
2923
+ var _altSide = mainAxis === 'x' ? bottom : right;
2856
2924
 
2857
- var _offset = popperOffsets[altAxis];
2925
+ var _offset = popperOffsets[altAxis];
2858
2926
 
2859
- var _min = _offset + overflow[_mainSide];
2927
+ var _len = altAxis === 'y' ? 'height' : 'width';
2860
2928
 
2861
- var _max = _offset - overflow[_altSide];
2929
+ var _min = _offset + overflow[_mainSide];
2862
2930
 
2863
- var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);
2931
+ var _max = _offset - overflow[_altSide];
2864
2932
 
2865
- popperOffsets[altAxis] = _preventedOffset;
2866
- data[altAxis] = _preventedOffset - _offset;
2867
- }
2933
+ var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
2934
+
2935
+ var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
2936
+
2937
+ var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
2938
+
2939
+ var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
2940
+
2941
+ var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
2942
+
2943
+ popperOffsets[altAxis] = _preventedOffset;
2944
+ data[altAxis] = _preventedOffset - _offset;
2868
2945
  }
2869
2946
 
2870
2947
  state.modifiersData[name] = data;
@@ -2896,8 +2973,8 @@ function getNodeScroll(node) {
2896
2973
 
2897
2974
  function isElementScaled(element) {
2898
2975
  var rect = element.getBoundingClientRect();
2899
- var scaleX = rect.width / element.offsetWidth || 1;
2900
- var scaleY = rect.height / element.offsetHeight || 1;
2976
+ var scaleX = round(rect.width) / element.offsetWidth || 1;
2977
+ var scaleY = round(rect.height) / element.offsetHeight || 1;
2901
2978
  return scaleX !== 1 || scaleY !== 1;
2902
2979
  } // Returns the composite rect of an element relative to its offsetParent.
2903
2980
  // Composite means it takes into account transforms as well as layout.
@@ -2909,9 +2986,9 @@ function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
2909
2986
  }
2910
2987
 
2911
2988
  var isOffsetParentAnElement = isHTMLElement(offsetParent);
2912
- isHTMLElement(offsetParent) && isElementScaled(offsetParent);
2989
+ var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
2913
2990
  var documentElement = getDocumentElement(offsetParent);
2914
- var rect = getBoundingClientRect(elementOrVirtualElement);
2991
+ var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);
2915
2992
  var scroll = {
2916
2993
  scrollLeft: 0,
2917
2994
  scrollTop: 0
@@ -2928,7 +3005,7 @@ function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
2928
3005
  }
2929
3006
 
2930
3007
  if (isHTMLElement(offsetParent)) {
2931
- offsets = getBoundingClientRect(offsetParent);
3008
+ offsets = getBoundingClientRect(offsetParent, true);
2932
3009
  offsets.x += offsetParent.clientLeft;
2933
3010
  offsets.y += offsetParent.clientTop;
2934
3011
  } else if (documentElement) {
@@ -3848,6 +3925,176 @@ const CDropdownPlugin = {
3848
3925
  },
3849
3926
  };
3850
3927
 
3928
+ const CSpinner = defineComponent({
3929
+ name: 'CSpinner',
3930
+ props: {
3931
+ /**
3932
+ * Sets the color context of the component to one of CoreUI’s themed colors.
3933
+ *
3934
+ * @values 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'dark', 'light'
3935
+ */
3936
+ color: {
3937
+ type: String,
3938
+ default: undefined,
3939
+ required: false,
3940
+ validator: (value) => {
3941
+ return [
3942
+ 'primary',
3943
+ 'secondary',
3944
+ 'success',
3945
+ 'danger',
3946
+ 'warning',
3947
+ 'info',
3948
+ 'dark',
3949
+ 'light',
3950
+ ].includes(value);
3951
+ },
3952
+ },
3953
+ /**
3954
+ * Component used for the root node. Either a string to use a HTML element or a component.
3955
+ */
3956
+ component: {
3957
+ type: String,
3958
+ default: 'div',
3959
+ required: false,
3960
+ },
3961
+ /**
3962
+ * Size the component small.
3963
+ *
3964
+ * @values 'sm'
3965
+ */
3966
+ size: {
3967
+ type: String,
3968
+ default: undefined,
3969
+ required: false,
3970
+ validator: (value) => {
3971
+ return value === 'sm';
3972
+ },
3973
+ },
3974
+ /**
3975
+ * Set the button variant to an outlined button or a ghost button.
3976
+ *
3977
+ * @values 'border', 'grow'
3978
+ */
3979
+ variant: {
3980
+ type: String,
3981
+ default: 'border',
3982
+ required: false,
3983
+ validator: (value) => {
3984
+ return ['border', 'grow'].includes(value);
3985
+ },
3986
+ },
3987
+ /**
3988
+ * Set visually hidden label for accessibility purposes.
3989
+ */
3990
+ visuallyHiddenLabel: {
3991
+ type: String,
3992
+ default: 'Loading...',
3993
+ required: false,
3994
+ },
3995
+ },
3996
+ setup(props) {
3997
+ return () => h$1(props.component, {
3998
+ class: [
3999
+ `spinner-${props.variant}`,
4000
+ `text-${props.color}`,
4001
+ props.size && `spinner-${props.variant}-${props.size}`,
4002
+ ],
4003
+ role: 'status',
4004
+ }, h$1('span', { class: ['visually-hidden'] }, props.visuallyHiddenLabel));
4005
+ },
4006
+ });
4007
+
4008
+ const CSpinnerPlugin = {
4009
+ install: (app) => {
4010
+ app.component(CSpinner.name, CSpinner);
4011
+ },
4012
+ };
4013
+
4014
+ const CElementCover = defineComponent({
4015
+ name: 'CElementCover',
4016
+ props: {
4017
+ /**
4018
+ * 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:
4019
+ * - sides (array) - select boundaries of element to define boundaries. Sides names: 'top', 'bottom', 'right', 'left'.
4020
+ * - query (string) - query used to get element which define boundaries. Search will be done only inside parent element, by parent.querySelector(query) function. [docs]
4021
+ *
4022
+ * @type {sides: string[], query: string}[]
4023
+ */
4024
+ boundaries: {
4025
+ // TODO: check if this is correct, TJ
4026
+ type: Array,
4027
+ require: true,
4028
+ },
4029
+ /**
4030
+ * Opacity of the cover. [docs]
4031
+ *
4032
+ * @type number
4033
+ */
4034
+ opacity: {
4035
+ type: Number,
4036
+ require: false,
4037
+ },
4038
+ },
4039
+ setup(props) {
4040
+ let containerCoords = {};
4041
+ const elementRef = ref();
4042
+ const getCustomBoundaries = () => {
4043
+ if (!props.boundaries || elementRef === null) {
4044
+ return {};
4045
+ }
4046
+ const parent = elementRef.value.parentElement;
4047
+ if (!parent) {
4048
+ return {};
4049
+ }
4050
+ const parentCoords = parent.getBoundingClientRect();
4051
+ const customBoundaries = {};
4052
+ props.boundaries.forEach((value) => {
4053
+ const element = parent.querySelector(value.query);
4054
+ if (!element || !value.sides) {
4055
+ return;
4056
+ }
4057
+ const coords = element.getBoundingClientRect();
4058
+ value.sides.forEach((side) => {
4059
+ const sideMargin = Math.abs(coords[side] - parentCoords[side]);
4060
+ customBoundaries[side] = `${sideMargin}px`;
4061
+ });
4062
+ });
4063
+ return customBoundaries;
4064
+ };
4065
+ onMounted(function () {
4066
+ nextTick(function () {
4067
+ containerCoords = getCustomBoundaries();
4068
+ });
4069
+ });
4070
+ return () => h$1('div', {
4071
+ style: {
4072
+ ...containerCoords,
4073
+ position: 'absolute',
4074
+ 'background-color': `rgb(255,255,255,${props.opacity})`,
4075
+ },
4076
+ ref: elementRef,
4077
+ }, h$1('div', // TODO: use slot to override this
4078
+ {
4079
+ style: {
4080
+ position: 'absolute',
4081
+ top: '50%',
4082
+ left: '50%',
4083
+ transform: 'translateX(-50%) translateY(-50%)',
4084
+ },
4085
+ }, h$1(CSpinner, {
4086
+ variant: 'grow',
4087
+ color: 'primary',
4088
+ })));
4089
+ },
4090
+ });
4091
+
4092
+ const CElementCoverPlugin = {
4093
+ install: (app) => {
4094
+ app.component(CElementCover.name, CElementCover);
4095
+ },
4096
+ };
4097
+
3851
4098
  const CFooter = defineComponent({
3852
4099
  name: 'CFooter',
3853
4100
  props: {
@@ -3999,6 +4246,10 @@ const CFormCheck = defineComponent({
3999
4246
  default: undefined,
4000
4247
  required: false,
4001
4248
  },
4249
+ /**
4250
+ * Input Checkbox indeterminate Property
4251
+ */
4252
+ indeterminate: Boolean,
4002
4253
  /**
4003
4254
  * Group checkboxes or radios on the same horizontal row by adding.
4004
4255
  */
@@ -4058,25 +4309,14 @@ const CFormCheck = defineComponent({
4058
4309
  'update:modelValue',
4059
4310
  ],
4060
4311
  setup(props, { attrs, emit, slots }) {
4061
- const checked = ref(attrs.checked);
4062
- onMounted(() => {
4063
- if (props.modelValue && typeof props.modelValue === 'boolean') {
4064
- console.log(props.modelValue);
4065
- }
4066
- });
4067
- watch(() => props.modelValue, () => {
4068
- if (typeof props.modelValue === 'boolean')
4069
- checked.value = props.modelValue;
4070
- });
4071
4312
  const handleChange = (event) => {
4072
4313
  const target = event.target;
4073
- emit('change', target.checked);
4314
+ emit('change', event);
4074
4315
  emit('update:modelValue', target.checked);
4075
4316
  };
4076
4317
  const formControl = () => {
4077
4318
  return h$1('input', {
4078
- ...attrs,
4079
- checked: checked.value,
4319
+ checked: props.modelValue,
4080
4320
  class: [
4081
4321
  props.button ? 'btn-check' : 'form-check-input',
4082
4322
  {
@@ -4085,8 +4325,10 @@ const CFormCheck = defineComponent({
4085
4325
  },
4086
4326
  ],
4087
4327
  id: props.id,
4328
+ indeterminate: props.indeterminate,
4088
4329
  onChange: (event) => handleChange(event),
4089
4330
  type: props.type,
4331
+ ...attrs,
4090
4332
  });
4091
4333
  };
4092
4334
  const formLabel = () => {
@@ -4257,18 +4499,15 @@ const CFormInput = defineComponent({
4257
4499
  setup(props, { emit, slots }) {
4258
4500
  const handleChange = (event) => {
4259
4501
  const target = event.target;
4260
- emit('change', target.value);
4502
+ emit('change', event);
4261
4503
  emit('update:modelValue', target.value);
4262
4504
  };
4263
4505
  const handleInput = (event) => {
4264
4506
  const target = event.target;
4265
- emit('input', target.value);
4507
+ emit('input', event);
4266
4508
  emit('update:modelValue', target.value);
4267
4509
  };
4268
4510
  return () => h$1('input', {
4269
- type: props.type,
4270
- disabled: props.disabled,
4271
- readonly: props.readonly,
4272
4511
  class: [
4273
4512
  props.plainText ? 'form-control-plaintext' : 'form-control',
4274
4513
  {
@@ -4278,8 +4517,11 @@ const CFormInput = defineComponent({
4278
4517
  'is-valid': props.valid,
4279
4518
  },
4280
4519
  ],
4520
+ disabled: props.disabled,
4281
4521
  onChange: (event) => handleChange(event),
4282
4522
  onInput: (event) => handleInput(event),
4523
+ readonly: props.readonly,
4524
+ type: props.type,
4283
4525
  value: props.modelValue,
4284
4526
  }, slots.default && slots.default());
4285
4527
  },
@@ -4359,7 +4601,7 @@ const CFormRange = defineComponent({
4359
4601
  setup(props, { emit, slots }) {
4360
4602
  const handleChange = (event) => {
4361
4603
  const target = event.target;
4362
- emit('change', target.value);
4604
+ emit('change', event);
4363
4605
  emit('update:modelValue', target.value);
4364
4606
  };
4365
4607
  return () => h$1('input', {
@@ -4371,7 +4613,7 @@ const CFormRange = defineComponent({
4371
4613
  steps: props.steps,
4372
4614
  readonly: props.readonly,
4373
4615
  type: 'range',
4374
- value: props.modelValue || props.value,
4616
+ value: props.modelValue,
4375
4617
  }, slots.default && slots.default());
4376
4618
  },
4377
4619
  });
@@ -4451,7 +4693,7 @@ const CFormSelect = defineComponent({
4451
4693
  .filter((option) => option.selected)
4452
4694
  .map((option) => option.value);
4453
4695
  const value = target.multiple ? selected : selected[0];
4454
- emit('change', value);
4696
+ emit('change', event);
4455
4697
  emit('update:modelValue', value);
4456
4698
  };
4457
4699
  return () => h$1('select', {
@@ -4459,6 +4701,8 @@ const CFormSelect = defineComponent({
4459
4701
  'form-select',
4460
4702
  {
4461
4703
  [`form-select-${props.size}`]: props.size,
4704
+ 'is-invalid': props.invalid,
4705
+ 'is-valid': props.valid,
4462
4706
  },
4463
4707
  ],
4464
4708
  onChange: (event) => handleChange(event),
@@ -4564,7 +4808,7 @@ const CFormSwitch = defineComponent({
4564
4808
  });
4565
4809
  const handleChange = (event) => {
4566
4810
  const target = event.target;
4567
- emit('change', target.checked);
4811
+ emit('change', event);
4568
4812
  emit('update:modelValue', target.checked);
4569
4813
  };
4570
4814
  return () => h$1('div', {
@@ -4681,14 +4925,9 @@ const CFormTextarea = defineComponent({
4681
4925
  'update:modelValue',
4682
4926
  ],
4683
4927
  setup(props, { emit, slots }) {
4684
- const handleChange = (event) => {
4685
- const target = event.target;
4686
- emit('change', target.value);
4687
- emit('update:modelValue', target.value);
4688
- };
4689
4928
  const handleInput = (event) => {
4690
4929
  const target = event.target;
4691
- emit('input', target.value);
4930
+ emit('input', event);
4692
4931
  emit('update:modelValue', target.value);
4693
4932
  };
4694
4933
  return () => h$1('textarea', {
@@ -4701,7 +4940,6 @@ const CFormTextarea = defineComponent({
4701
4940
  'is-valid': props.valid,
4702
4941
  },
4703
4942
  ],
4704
- onChange: (event) => handleChange(event),
4705
4943
  onInput: (event) => handleInput(event),
4706
4944
  value: props.modelValue,
4707
4945
  }, slots.default && slots.default());
@@ -4773,7 +5011,7 @@ const CFormPlugin = {
4773
5011
  },
4774
5012
  };
4775
5013
 
4776
- const BREAKPOINTS$2 = [
5014
+ const BREAKPOINTS$4 = [
4777
5015
  'xxl',
4778
5016
  'xl',
4779
5017
  'lg',
@@ -4846,40 +5084,40 @@ const CCol = defineComponent({
4846
5084
  },
4847
5085
  },
4848
5086
  setup(props, { slots }) {
4849
- const repsonsiveCLassNames = [];
4850
- BREAKPOINTS$2.forEach((bp) => {
5087
+ const repsonsiveClassNames = [];
5088
+ BREAKPOINTS$4.forEach((bp) => {
4851
5089
  const breakpoint = props[bp];
4852
5090
  const infix = bp === 'xs' ? '' : `-${bp}`;
4853
5091
  if (breakpoint) {
4854
5092
  if (typeof breakpoint === 'number' || typeof breakpoint === 'string') {
4855
- repsonsiveCLassNames.push(`col${infix}-${breakpoint}`);
5093
+ repsonsiveClassNames.push(`col${infix}-${breakpoint}`);
4856
5094
  }
4857
5095
  if (typeof breakpoint === 'boolean') {
4858
- repsonsiveCLassNames.push(`col${infix}`);
5096
+ repsonsiveClassNames.push(`col${infix}`);
4859
5097
  }
4860
5098
  }
4861
5099
  if (breakpoint && typeof breakpoint === 'object') {
4862
5100
  if (typeof breakpoint.span === 'number' || typeof breakpoint.span === 'string') {
4863
- repsonsiveCLassNames.push(`col${infix}-${breakpoint.span}`);
5101
+ repsonsiveClassNames.push(`col${infix}-${breakpoint.span}`);
4864
5102
  }
4865
5103
  if (typeof breakpoint.span === 'boolean') {
4866
- repsonsiveCLassNames.push(`col${infix}`);
5104
+ repsonsiveClassNames.push(`col${infix}`);
4867
5105
  }
4868
5106
  if (typeof breakpoint.order === 'number' || typeof breakpoint.order === 'string') {
4869
- repsonsiveCLassNames.push(`order${infix}-${breakpoint.order}`);
5107
+ repsonsiveClassNames.push(`order${infix}-${breakpoint.order}`);
4870
5108
  }
4871
5109
  if (typeof breakpoint.offset === 'number') {
4872
- repsonsiveCLassNames.push(`offset${infix}-${breakpoint.offset}`);
5110
+ repsonsiveClassNames.push(`offset${infix}-${breakpoint.offset}`);
4873
5111
  }
4874
5112
  }
4875
5113
  });
4876
5114
  return () => h$1('div', {
4877
- class: [repsonsiveCLassNames.length ? repsonsiveCLassNames : 'col'],
5115
+ class: [repsonsiveClassNames.length ? repsonsiveClassNames : 'col'],
4878
5116
  }, slots.default && slots.default());
4879
5117
  },
4880
5118
  });
4881
5119
 
4882
- const BREAKPOINTS$1 = [
5120
+ const BREAKPOINTS$3 = [
4883
5121
  'xxl',
4884
5122
  'xl',
4885
5123
  'lg',
@@ -4934,18 +5172,18 @@ const CContainer = defineComponent({
4934
5172
  },
4935
5173
  },
4936
5174
  setup(props, { slots }) {
4937
- const repsonsiveCLassNames = [];
4938
- BREAKPOINTS$1.forEach((bp) => {
5175
+ const repsonsiveClassNames = [];
5176
+ BREAKPOINTS$3.forEach((bp) => {
4939
5177
  const breakpoint = props[bp];
4940
- breakpoint && repsonsiveCLassNames.push(`container-${bp}`);
5178
+ breakpoint && repsonsiveClassNames.push(`container-${bp}`);
4941
5179
  });
4942
5180
  return () => h$1('div', {
4943
- class: [repsonsiveCLassNames.length ? repsonsiveCLassNames : 'container'],
5181
+ class: [repsonsiveClassNames.length ? repsonsiveClassNames : 'container'],
4944
5182
  }, slots.default && slots.default());
4945
5183
  },
4946
5184
  });
4947
5185
 
4948
- const BREAKPOINTS = [
5186
+ const BREAKPOINTS$2 = [
4949
5187
  'xxl',
4950
5188
  'xl',
4951
5189
  'lg',
@@ -5018,27 +5256,27 @@ const CRow = defineComponent({
5018
5256
  },
5019
5257
  },
5020
5258
  setup(props, { slots }) {
5021
- const repsonsiveCLassNames = [];
5022
- BREAKPOINTS.forEach((bp) => {
5259
+ const repsonsiveClassNames = [];
5260
+ BREAKPOINTS$2.forEach((bp) => {
5023
5261
  const breakpoint = props[bp];
5024
5262
  const infix = bp === 'xs' ? '' : `-${bp}`;
5025
5263
  if (typeof breakpoint === 'object') {
5026
5264
  if (breakpoint.cols) {
5027
- repsonsiveCLassNames.push(`row-cols${infix}-${breakpoint.cols}`);
5265
+ repsonsiveClassNames.push(`row-cols${infix}-${breakpoint.cols}`);
5028
5266
  }
5029
5267
  if (typeof breakpoint.gutter === 'number') {
5030
- repsonsiveCLassNames.push(`g${infix}-${breakpoint.gutter}`);
5268
+ repsonsiveClassNames.push(`g${infix}-${breakpoint.gutter}`);
5031
5269
  }
5032
5270
  if (typeof breakpoint.gutterX === 'number') {
5033
- repsonsiveCLassNames.push(`gx${infix}-${breakpoint.gutterX}`);
5271
+ repsonsiveClassNames.push(`gx${infix}-${breakpoint.gutterX}`);
5034
5272
  }
5035
5273
  if (typeof breakpoint.gutterY === 'number') {
5036
- repsonsiveCLassNames.push(`gy${infix}-${breakpoint.gutterY}`);
5274
+ repsonsiveClassNames.push(`gy${infix}-${breakpoint.gutterY}`);
5037
5275
  }
5038
5276
  }
5039
5277
  });
5040
5278
  return () => h$1('div', {
5041
- class: ['row', repsonsiveCLassNames],
5279
+ class: ['row', repsonsiveClassNames],
5042
5280
  }, slots.default && slots.default());
5043
5281
  },
5044
5282
  });
@@ -5332,86 +5570,6 @@ const CListGroupPlugin = {
5332
5570
  },
5333
5571
  };
5334
5572
 
5335
- const CSpinner = defineComponent({
5336
- name: 'CSpinner',
5337
- props: {
5338
- /**
5339
- * Sets the color context of the component to one of CoreUI’s themed colors.
5340
- *
5341
- * @values 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'dark', 'light'
5342
- */
5343
- color: {
5344
- type: String,
5345
- default: undefined,
5346
- required: false,
5347
- validator: (value) => {
5348
- return [
5349
- 'primary',
5350
- 'secondary',
5351
- 'success',
5352
- 'danger',
5353
- 'warning',
5354
- 'info',
5355
- 'dark',
5356
- 'light',
5357
- ].includes(value);
5358
- },
5359
- },
5360
- /**
5361
- * Component used for the root node. Either a string to use a HTML element or a component.
5362
- */
5363
- component: {
5364
- type: String,
5365
- default: 'div',
5366
- required: false,
5367
- },
5368
- /**
5369
- * Size the component small.
5370
- *
5371
- * @values 'sm'
5372
- */
5373
- size: {
5374
- type: String,
5375
- default: undefined,
5376
- required: false,
5377
- validator: (value) => {
5378
- return value === 'sm';
5379
- },
5380
- },
5381
- /**
5382
- * Set the button variant to an outlined button or a ghost button.
5383
- *
5384
- * @values 'border', 'grow'
5385
- */
5386
- variant: {
5387
- type: String,
5388
- default: 'border',
5389
- required: false,
5390
- validator: (value) => {
5391
- return ['border', 'grow'].includes(value);
5392
- },
5393
- },
5394
- /**
5395
- * Set visually hidden label for accessibility purposes.
5396
- */
5397
- visuallyHiddenLabel: {
5398
- type: String,
5399
- default: 'Loading...',
5400
- required: false,
5401
- },
5402
- },
5403
- setup(props) {
5404
- return () => h$1(props.component, {
5405
- class: [
5406
- `spinner-${props.variant}`,
5407
- `text-${props.color}`,
5408
- props.size && `spinner-${props.variant}-${props.size}`,
5409
- ],
5410
- role: 'status',
5411
- }, h$1('span', { class: ['visually-hidden'] }, props.visuallyHiddenLabel));
5412
- },
5413
- });
5414
-
5415
5573
  const CLoadingButton = defineComponent({
5416
5574
  name: 'CLoadingButton',
5417
5575
  props: {
@@ -5618,7 +5776,7 @@ const CModal = defineComponent({
5618
5776
  emit('show');
5619
5777
  };
5620
5778
  const handleAfterEnter = () => {
5621
- window.addEventListener('click', handleClickOutside);
5779
+ window.addEventListener('mousedown', handleMouseDown);
5622
5780
  window.addEventListener('keyup', handleKeyUp);
5623
5781
  };
5624
5782
  const handleLeave = (el, done) => {
@@ -5629,7 +5787,7 @@ const CModal = defineComponent({
5629
5787
  el.classList.remove('show');
5630
5788
  };
5631
5789
  const handleAfterLeave = (el) => {
5632
- window.removeEventListener('click', handleClickOutside);
5790
+ window.removeEventListener('mousedown', handleMouseDown);
5633
5791
  window.removeEventListener('keyup', handleKeyUp);
5634
5792
  el.style.display = 'none';
5635
5793
  };
@@ -5651,7 +5809,10 @@ const CModal = defineComponent({
5651
5809
  }
5652
5810
  }
5653
5811
  };
5654
- const handleClickOutside = (event) => {
5812
+ const handleMouseDown = (event) => {
5813
+ window.addEventListener('mouseup', () => handleMouseUp(event), { once: true });
5814
+ };
5815
+ const handleMouseUp = (event) => {
5655
5816
  if (modalContentRef.value && !modalContentRef.value.contains(event.target)) {
5656
5817
  if (props.backdrop !== 'static') {
5657
5818
  handleDismiss();
@@ -6860,19 +7021,20 @@ const COffcanvas = defineComponent({
6860
7021
  }, 1);
6861
7022
  };
6862
7023
  const handleAfterEnter = () => {
6863
- window.addEventListener('click', handleClickOutside);
7024
+ window.addEventListener('mousedown', handleMouseDown);
7025
+ // window.addEventListener('click', handleClickOutside)
6864
7026
  window.addEventListener('keyup', handleKeyUp);
6865
7027
  };
6866
7028
  const handleLeave = (el, done) => {
6867
7029
  el.addEventListener('transitionend', () => {
6868
7030
  done();
6869
7031
  });
7032
+ window.removeEventListener('mousedown', handleMouseDown);
7033
+ window.removeEventListener('keyup', handleKeyUp);
6870
7034
  el.classList.remove('show');
6871
7035
  };
6872
7036
  const handleAfterLeave = (el) => {
6873
7037
  el.style.visibility = 'hidden';
6874
- window.removeEventListener('click', handleClickOutside);
6875
- window.removeEventListener('keyup', handleKeyUp);
6876
7038
  };
6877
7039
  const handleDismiss = () => {
6878
7040
  visible.value = false;
@@ -6885,31 +7047,34 @@ const COffcanvas = defineComponent({
6885
7047
  }
6886
7048
  }
6887
7049
  };
6888
- const handleClickOutside = (event) => {
7050
+ const handleMouseDown = (event) => {
7051
+ window.addEventListener('mouseup', () => handleMouseUp(event), { once: true });
7052
+ };
7053
+ const handleMouseUp = (event) => {
6889
7054
  if (offcanvasRef.value && !offcanvasRef.value.contains(event.target)) {
6890
7055
  props.backdrop && handleDismiss();
6891
7056
  }
6892
7057
  };
6893
7058
  return () => [
6894
7059
  h$1(Transition, {
7060
+ css: false,
6895
7061
  onEnter: (el, done) => handleEnter(el, done),
6896
7062
  onAfterEnter: () => handleAfterEnter(),
6897
7063
  onLeave: (el, done) => handleLeave(el, done),
6898
7064
  onAfterLeave: (el) => handleAfterLeave(el),
6899
- }, () => visible.value &&
6900
- h$1('div', {
6901
- class: [
6902
- 'offcanvas',
6903
- {
6904
- [`offcanvas-${props.placement}`]: props.placement,
6905
- },
6906
- ],
6907
- ref: offcanvasRef,
6908
- role: 'dialog',
6909
- }, slots.default && slots.default())),
7065
+ }, () => withDirectives(h$1('div', {
7066
+ class: [
7067
+ 'offcanvas',
7068
+ {
7069
+ [`offcanvas-${props.placement}`]: props.placement,
7070
+ },
7071
+ ],
7072
+ ref: offcanvasRef,
7073
+ role: 'dialog',
7074
+ }, slots.default && slots.default()), [[vVisible, props.visible]])),
6910
7075
  props.backdrop &&
6911
7076
  h$1(CBackdrop, {
6912
- class: 'modal-backdrop',
7077
+ class: 'offcanvas-backdrop',
6913
7078
  visible: visible.value,
6914
7079
  }),
6915
7080
  ];
@@ -7356,6 +7521,137 @@ const CPaginationPlugin = {
7356
7521
  },
7357
7522
  };
7358
7523
 
7524
+ const BREAKPOINTS$1 = [
7525
+ 'xxl',
7526
+ 'xl',
7527
+ 'lg',
7528
+ 'md',
7529
+ 'sm',
7530
+ 'xs',
7531
+ ];
7532
+ const CPlaceholder = defineComponent({
7533
+ name: 'CPlaceholder',
7534
+ props: {
7535
+ /**
7536
+ * Set animation type to better convey the perception of something being actively loaded.
7537
+ *
7538
+ * @values 'glow', 'wave'
7539
+ */
7540
+ animation: {
7541
+ type: String,
7542
+ default: undefined,
7543
+ require: false,
7544
+ validator: (value) => {
7545
+ return ['glow', 'wave'].includes(value);
7546
+ },
7547
+ },
7548
+ /**
7549
+ * Sets the color context of the component to one of CoreUI’s themed colors.
7550
+ *
7551
+ * @values 'primary', 'secondary', 'success', 'danger', 'warning', 'info', 'dark', 'light'
7552
+ */
7553
+ color: Color,
7554
+ /**
7555
+ * Component used for the root node. Either a string to use a HTML element or a component.
7556
+ */
7557
+ component: {
7558
+ type: String,
7559
+ default: 'span',
7560
+ required: false,
7561
+ },
7562
+ /**
7563
+ * Size the component extra small, small, or large.
7564
+ *
7565
+ * @values 'xs', 'sm', 'lg'
7566
+ */
7567
+ size: {
7568
+ type: String,
7569
+ default: undefined,
7570
+ required: false,
7571
+ validator: (value) => {
7572
+ return ['xs', 'sm', 'lg'].includes(value);
7573
+ },
7574
+ },
7575
+ /**
7576
+ * The number of columns on extra small devices (<576px).
7577
+ */
7578
+ xs: {
7579
+ type: Number,
7580
+ default: undefined,
7581
+ require: false,
7582
+ },
7583
+ /**
7584
+ * The number of columns on small devices (<768px).
7585
+ */
7586
+ sm: {
7587
+ type: Number,
7588
+ default: undefined,
7589
+ require: false,
7590
+ },
7591
+ /**
7592
+ * The number of columns on medium devices (<992px).
7593
+ */
7594
+ md: {
7595
+ type: Number,
7596
+ default: undefined,
7597
+ require: false,
7598
+ },
7599
+ /**
7600
+ * The number of columns on large devices (<1200px).
7601
+ */
7602
+ lg: {
7603
+ type: Number,
7604
+ default: undefined,
7605
+ require: false,
7606
+ },
7607
+ /**
7608
+ * The number of columns on X-Large devices (<1400px).
7609
+ */
7610
+ xl: {
7611
+ type: Number,
7612
+ default: undefined,
7613
+ require: false,
7614
+ },
7615
+ /**
7616
+ * The number of columns on XX-Large devices (≥1400px).
7617
+ */
7618
+ xxl: {
7619
+ type: Number,
7620
+ default: undefined,
7621
+ require: false,
7622
+ },
7623
+ },
7624
+ setup(props, { slots }) {
7625
+ const repsonsiveClassNames = [];
7626
+ BREAKPOINTS$1.forEach((bp) => {
7627
+ const breakpoint = props[bp];
7628
+ const infix = bp === 'xs' ? '' : `-${bp}`;
7629
+ if (typeof breakpoint === 'number') {
7630
+ repsonsiveClassNames.push(`col${infix}-${breakpoint}`);
7631
+ }
7632
+ if (typeof breakpoint === 'boolean') {
7633
+ repsonsiveClassNames.push(`col${infix}`);
7634
+ }
7635
+ });
7636
+ return () => h$1(props.component, {
7637
+ class: [
7638
+ props.animation ? `placeholder-${props.animation}` : 'placeholder',
7639
+ {
7640
+ [`bg-${props.color}`]: props.color,
7641
+ [`placeholder-${props.size}`]: props.size,
7642
+ },
7643
+ repsonsiveClassNames,
7644
+ ],
7645
+ }, slots.default && slots.default());
7646
+ },
7647
+ });
7648
+
7649
+ const CPlaceholderPlugin = {
7650
+ install: (app) => {
7651
+ app.component(CPlaceholder.name, CPlaceholder);
7652
+ },
7653
+ };
7654
+
7359
7655
  const CProgressBar = defineComponent({
7360
7656
  name: 'CProgressBar',
7361
7657
  props: {
@@ -7873,90 +8169,6 @@ const CSidebarPlugin = {
7873
8169
  },
7874
8170
  };
7875
8171
 
7876
- const CSpinnerPlugin = {
7877
- install: (app) => {
7878
- app.component(CSpinner.name, CSpinner);
7879
- },
7880
- };
7881
-
7882
- const CElementCover = defineComponent({
7883
- name: 'CElementCover',
7884
- props: {
7885
- /**
7886
- * 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:
7887
- * - sides (array) - select boundaries of element to define boundaries. Sides names: 'top', 'bottom', 'right', 'left'.
7888
- * - query (string) - query used to get element which define boundaries. Search will be done only inside parent element, by parent.querySelector(query) function. [docs]
7889
- *
7890
- * @type {sides: string[], query: string}[]
7891
- */
7892
- boundaries: {
7893
- // TODO: check if this is correct, TJ
7894
- type: Array,
7895
- require: true,
7896
- },
7897
- /**
7898
- * Opacity of the cover. [docs]
7899
- *
7900
- * @type number
7901
- */
7902
- opacity: {
7903
- type: Number,
7904
- require: false,
7905
- },
7906
- },
7907
- setup(props) {
7908
- let containerCoords = {};
7909
- const elementRef = ref();
7910
- const getCustomBoundaries = () => {
7911
- if (!props.boundaries || elementRef === null) {
7912
- return {};
7913
- }
7914
- const parent = elementRef.value.parentElement;
7915
- if (!parent) {
7916
- return {};
7917
- }
7918
- const parentCoords = parent.getBoundingClientRect();
7919
- const customBoundaries = {};
7920
- props.boundaries.forEach((value) => {
7921
- const element = parent.querySelector(value.query);
7922
- if (!element || !value.sides) {
7923
- return;
7924
- }
7925
- const coords = element.getBoundingClientRect();
7926
- value.sides.forEach((side) => {
7927
- const sideMargin = Math.abs(coords[side] - parentCoords[side]);
7928
- customBoundaries[side] = `${sideMargin}px`;
7929
- });
7930
- });
7931
- return customBoundaries;
7932
- };
7933
- onMounted(function () {
7934
- nextTick(function () {
7935
- containerCoords = getCustomBoundaries();
7936
- });
7937
- });
7938
- return () => h$1('div', {
7939
- style: {
7940
- ...containerCoords,
7941
- position: 'absolute',
7942
- 'background-color': `rgb(255,255,255,${props.opacity})`,
7943
- },
7944
- ref: elementRef,
7945
- }, h$1('div', // TODO: use slot to override this
7946
- {
7947
- style: {
7948
- position: 'absolute',
7949
- top: '50%',
7950
- left: '50%',
7951
- transform: 'translateX(-50%) translateY(-50%)',
7952
- },
7953
- }, h$1(CSpinner, {
7954
- variant: 'grow',
7955
- color: 'primary',
7956
- })));
7957
- },
7958
- });
7959
-
7960
8172
  const CTable = defineComponent({
7961
8173
  name: 'CTable',
7962
8174
  props: {
@@ -8407,9 +8619,12 @@ const CSmartTableHead = defineComponent({
8407
8619
  },
8408
8620
  columnFilter: {
8409
8621
  type: [Boolean, Object],
8410
- default: undefined,
8411
8622
  require: false,
8412
8623
  },
8624
+ columnFilterValue: {
8625
+ type: Object,
8626
+ required: false,
8627
+ },
8413
8628
  columnSorter: {
8414
8629
  type: [Boolean, Object],
8415
8630
  default: undefined,
@@ -8531,30 +8746,31 @@ const CSmartTableHead = defineComponent({
8531
8746
  })),
8532
8747
  ],
8533
8748
  }),
8534
- h$1(CTableRow, {}, {
8535
- default: () => [
8536
- props.selectable && h$1(CTableHeaderCell),
8537
- props.columns.map((column) => h$1(CTableHeaderCell, {
8538
- ...tableHeaderCellProps(column),
8539
- }, {
8540
- default: () => (typeof column !== 'object'
8541
- ? true
8542
- : typeof column.filter === 'undefined'
8749
+ props.columnFilter &&
8750
+ h$1(CTableRow, {}, {
8751
+ default: () => [
8752
+ props.selectable && h$1(CTableHeaderCell),
8753
+ props.columns.map((column) => h$1(CTableHeaderCell, {
8754
+ ...tableHeaderCellProps(column),
8755
+ }, {
8756
+ default: () => (typeof column !== 'object'
8543
8757
  ? true
8544
- : column.filter) &&
8545
- h$1(CFormInput, {
8546
- size: 'sm',
8547
- onInput: (event) => handleFilterInput(key(column), event.target.value),
8548
- onChange: (event) => handleFilterChange(key(column), event.target.value),
8549
- 'aria-label': `column name: '${label(column)}' filter input`,
8550
- ...(props.columnFilter &&
8551
- props.columnFilter[key(column)] && {
8552
- value: props.columnFilter[key(column)],
8758
+ : typeof column.filter === 'undefined'
8759
+ ? true
8760
+ : column.filter) &&
8761
+ h$1(CFormInput, {
8762
+ size: 'sm',
8763
+ onInput: (event) => handleFilterInput(key(column), event.target.value),
8764
+ onChange: (event) => handleFilterChange(key(column), event.target.value),
8765
+ 'aria-label': `column name: '${label(column)}' filter input`,
8766
+ ...(props.columnFilterValue &&
8767
+ props.columnFilterValue[key(column)] && {
8768
+ value: props.columnFilterValue[key(column)],
8769
+ }),
8553
8770
  }),
8554
- }),
8555
- })),
8556
- ],
8557
- }),
8771
+ })),
8772
+ ],
8773
+ }),
8558
8774
  ],
8559
8775
  });
8560
8776
  },
@@ -8842,7 +9058,6 @@ const CSmartTable = defineComponent({
8842
9058
  */
8843
9059
  cleaner: {
8844
9060
  type: Boolean,
8845
- default: true,
8846
9061
  required: false,
8847
9062
  },
8848
9063
  /**
@@ -8864,7 +9079,6 @@ const CSmartTable = defineComponent({
8864
9079
  */
8865
9080
  columnFilter: {
8866
9081
  type: [Boolean, Object],
8867
- default: undefined,
8868
9082
  required: false,
8869
9083
  },
8870
9084
  /**
@@ -8941,7 +9155,6 @@ const CSmartTable = defineComponent({
8941
9155
  */
8942
9156
  itemsPerPage: {
8943
9157
  type: Number,
8944
- default: 10,
8945
9158
  required: false,
8946
9159
  },
8947
9160
  /**
@@ -9013,7 +9226,8 @@ const CSmartTable = defineComponent({
9013
9226
  */
9014
9227
  selectable: Boolean,
9015
9228
  /**
9016
- * State of the sorter. Name key is column name, direction can be 'asc' or 'desc'. Set .sync modifier to track changes.
9229
+ * State of the sorter. Name key is column name, direction can be 'asc' or 'desc'. Set .sync modifier to track changes. eg.:
9230
+ * { column: 'status', state: 'asc' }
9017
9231
  *
9018
9232
  * @type SorterValue
9019
9233
  */
@@ -9053,7 +9267,6 @@ const CSmartTable = defineComponent({
9053
9267
  */
9054
9268
  tableFilter: {
9055
9269
  type: [Boolean, Object],
9056
- default: undefined,
9057
9270
  required: false,
9058
9271
  },
9059
9272
  /**
@@ -9175,6 +9388,7 @@ const CSmartTable = defineComponent({
9175
9388
  const selectedAll = ref();
9176
9389
  watch(items, () => {
9177
9390
  const selected = items.value.filter((item) => item._selected === true);
9391
+ emit('selectedItemsChange', selected);
9178
9392
  if (selected.length === items.value.length) {
9179
9393
  selectedAll.value = true;
9180
9394
  return;
@@ -9186,9 +9400,8 @@ const CSmartTable = defineComponent({
9186
9400
  if (selected.length !== 0 && selected.length !== items.value.length) {
9187
9401
  selectedAll.value = 'indeterminate';
9188
9402
  }
9189
- emit('selectedItemsChange', selected);
9190
9403
  });
9191
- const itemsPerPage = ref(props.itemsPerPage);
9404
+ const itemsPerPage = ref(props.itemsPerPage || items.value.length);
9192
9405
  const activePage = ref(props.activePage);
9193
9406
  const sorterState = reactive(props.sorterValue || {});
9194
9407
  const columnFilterState = ref(props.columnFilterValue ? props.columnFilterValue : {});
@@ -9226,7 +9439,12 @@ const CSmartTable = defineComponent({
9226
9439
  state.state = 'desc';
9227
9440
  }
9228
9441
  else {
9229
- state.state = 0;
9442
+ if (typeof props.columnSorter === 'object' && !props.columnSorter.resetable) {
9443
+ state.state = 'asc';
9444
+ }
9445
+ else {
9446
+ state.state = 0;
9447
+ }
9230
9448
  }
9231
9449
  }
9232
9450
  else {
@@ -9367,22 +9585,25 @@ const CSmartTable = defineComponent({
9367
9585
  Object.values(columnFilterState.value).join(''));
9368
9586
  });
9369
9587
  return () => h$1('div', {}, [
9370
- h$1('div', {
9371
- class: 'row my-2 mx-0',
9372
- }, {
9373
- default: () => (props.tableFilter || props.cleaner) && [
9374
- h$1('div', {
9375
- class: 'col-auto p-0',
9376
- }, props.tableFilter &&
9377
- h$1(CSmartTableFilter, {
9378
- onFilterInput: (value) => tableFilterChange(value, 'input'),
9379
- onFilterChange: (value) => tableFilterChange(value, 'change'),
9380
- value: tableFilterState.value,
9381
- })),
9382
- h$1('div', {
9383
- class: 'col-auto p-0',
9384
- }, props.cleaner &&
9385
- h$1(CSmartTableCleaner, {
9588
+ (props.tableFilter || props.cleaner) &&
9589
+ h$1('div', {
9590
+ class: 'row my-2 mx-0',
9591
+ }, [
9592
+ props.tableFilter &&
9593
+ h$1('div', {
9594
+ class: 'col-auto p-0',
9595
+ }, props.tableFilter &&
9596
+ h$1(CSmartTableFilter, {
9597
+ filterLabel: props.tableFilterLabel,
9598
+ filterPlaceholder: props.tableFilterPlaceholder,
9599
+ onFilterInput: (value) => tableFilterChange(value, 'input'),
9600
+ onFilterChange: (value) => tableFilterChange(value, 'change'),
9601
+ value: tableFilterState.value,
9602
+ })),
9603
+ props.cleaner &&
9604
+ h$1('div', {
9605
+ class: 'col-auto p-0',
9606
+ }, h$1(CSmartTableCleaner, {
9386
9607
  onClick: () => clean(),
9387
9608
  isFiltered: isFiltered.value,
9388
9609
  }, {
@@ -9391,8 +9612,7 @@ const CSmartTable = defineComponent({
9391
9612
  ? slots.cleanerIcon()
9392
9613
  : h$1(CIcon, { width: '18', content: cilFilterX }),
9393
9614
  })),
9394
- ],
9395
- }),
9615
+ ]),
9396
9616
  h$1('div', {
9397
9617
  class: 'position-relative',
9398
9618
  }, {
@@ -9405,7 +9625,8 @@ const CSmartTable = defineComponent({
9405
9625
  h$1(CSmartTableHead, {
9406
9626
  component: 'head',
9407
9627
  ...props.tableHeadProps,
9408
- columnFilter: columnFilterState.value,
9628
+ columnFilter: props.columnFilter,
9629
+ columnFilterValue: columnFilterState.value,
9409
9630
  columns: props.columns,
9410
9631
  columnSorter: props.columnSorter,
9411
9632
  selectable: props.selectable,
@@ -10527,6 +10748,8 @@ var Components = /*#__PURE__*/Object.freeze({
10527
10748
  CDropdownDivider: CDropdownDivider,
10528
10749
  CDropdownMenu: CDropdownMenu,
10529
10750
  CDropdownToggle: CDropdownToggle,
10751
+ CElementCoverPlugin: CElementCoverPlugin,
10752
+ CElementCover: CElementCover,
10530
10753
  CFooterPlugin: CFooterPlugin,
10531
10754
  CFooter: CFooter,
10532
10755
  CFormPlugin: CFormPlugin,
@@ -10593,6 +10816,8 @@ var Components = /*#__PURE__*/Object.freeze({
10593
10816
  CPagination: CPagination,
10594
10817
  CPaginationItem: CPaginationItem,
10595
10818
  CSmartPagination: CSmartPagination,
10819
+ CPlaceholderPlugin: CPlaceholderPlugin,
10820
+ CPlaceholder: CPlaceholder,
10596
10821
  CProgressPlugin: CProgressPlugin,
10597
10822
  CProgress: CProgress,
10598
10823
  CProgressBar: CProgressBar,
@@ -10638,49 +10863,79 @@ var Components = /*#__PURE__*/Object.freeze({
10638
10863
  CWidgetStatsF: CWidgetStatsF
10639
10864
  });
10640
10865
 
10866
+ const BREAKPOINTS = [
10867
+ 'xxl',
10868
+ 'xl',
10869
+ 'lg',
10870
+ 'md',
10871
+ 'sm',
10872
+ 'xs',
10873
+ ];
10874
+ var vcplaceholder = {
10875
+ name: 'c-placeholder',
10876
+ mounted(el, binding) {
10877
+ const value = binding.value;
10878
+ el.classList.add(value.animation ? `placeholder-${value.animation}` : 'placeholder');
10879
+ BREAKPOINTS.forEach((bp) => {
10880
+ const breakpoint = value[bp];
10881
+ const infix = bp === 'xs' ? '' : `-${bp}`;
10882
+ if (typeof breakpoint === 'number') {
10883
+ el.classList.add(`col${infix}-${breakpoint}`);
10884
+ }
10885
+ if (typeof breakpoint === 'boolean') {
10886
+ el.classList.add(`col${infix}`);
10887
+ }
10888
+ });
10889
+ },
10890
+ };
10891
+
10641
10892
  const getUID$1 = (prefix) => {
10642
10893
  do {
10643
10894
  prefix += Math.floor(Math.random() * 1000000);
10644
10895
  } while (document.getElementById(prefix));
10645
10896
  return prefix;
10646
10897
  };
10647
- const createTooltipElement = (id, content) => {
10648
- const tooltip = document.createElement('div');
10649
- tooltip.id = id;
10650
- tooltip.classList.add('tooltip', 'bs-tooltip-auto', 'fade');
10651
- tooltip.setAttribute('role', 'tooltip');
10652
- tooltip.innerHTML = `<div class="tooltip-arrow" data-popper-arrow></div>
10653
- <div class="tooltip-inner" id="">${content}</div>`;
10654
- return tooltip;
10898
+ const createPopoverElement = (id, header, content) => {
10899
+ const popover = document.createElement('div');
10900
+ popover.id = id;
10901
+ popover.classList.add('popover', 'bs-popover-auto', 'fade');
10902
+ popover.setAttribute('role', 'popover');
10903
+ popover.innerHTML = `<div class="popover-arrow" data-popper-arrow></div>
10904
+ <div class="popover-header">${header}</div>
10905
+ <div class="popover-body" id="">${content}</div>`;
10906
+ return popover;
10655
10907
  };
10656
- const addTooltipElement = (tooltip, el, popperOptions) => {
10657
- document.body.appendChild(tooltip);
10658
- createPopper(el, tooltip, popperOptions);
10908
+ const addPopoverElement = (popover, el, popperOptions) => {
10909
+ document.body.appendChild(popover);
10910
+ createPopper(el, popover, popperOptions);
10659
10911
  setTimeout(() => {
10660
- tooltip.classList.add('show');
10912
+ popover.classList.add('show');
10661
10913
  }, 1);
10662
10914
  };
10663
- const removeTooltipElement = (tooltip) => {
10664
- tooltip.classList.remove('show');
10915
+ const removePopoverElement = (popover) => {
10916
+ popover.classList.remove('show');
10665
10917
  setTimeout(() => {
10666
- document.body.removeChild(tooltip);
10918
+ document.body.removeChild(popover);
10667
10919
  }, 300);
10668
10920
  };
10669
- const toggleTooltipElement = (tooltip, el, popperOptions) => {
10670
- const popperElement = document.getElementById(tooltip.id);
10921
+ const togglePopoverElement = (popover, el, popperOptions) => {
10922
+ const popperElement = document.getElementById(popover.id);
10671
10923
  if (popperElement && popperElement.classList.contains('show')) {
10672
- removeTooltipElement(tooltip);
10924
+ removePopoverElement(popover);
10673
10925
  return;
10674
10926
  }
10675
- addTooltipElement(tooltip, el, popperOptions);
10927
+ addPopoverElement(popover, el, popperOptions);
10676
10928
  };
10677
- var vctooltip = {
10929
+ var vcpopover = {
10930
+ name: 'c-popover',
10931
+ uid: '',
10678
10932
  mounted(el, binding) {
10679
10933
  const value = binding.value;
10680
10934
  const content = typeof value === 'string' ? value : value.content ? value.content : '';
10681
- const trigger = value.trigger ? value.trigger : 'hover';
10935
+ const header = value.header ? value.header : '';
10936
+ const trigger = value.trigger ? value.trigger : 'click';
10682
10937
  // Popper Config
10683
- const offset = value.offset ? value.offset : [0, 0];
10938
+ const offset = value.offset ? value.offset : [0, 8];
10684
10939
  const placement = value.placement ? value.placement : 'top';
10685
10940
  const popperOptions = {
10686
10941
  placement: placement,
@@ -10693,33 +10948,33 @@ var vctooltip = {
10693
10948
  },
10694
10949
  ],
10695
10950
  };
10696
- const tooltipUID = getUID$1('tooltip');
10697
- binding.arg = tooltipUID;
10698
- const tooltip = createTooltipElement(tooltipUID, content);
10951
+ const popoverUID = getUID$1('popover');
10952
+ binding.arg = popoverUID;
10953
+ const popover = createPopoverElement(popoverUID, header, content);
10699
10954
  trigger.includes('click') &&
10700
10955
  el.addEventListener('click', () => {
10701
- toggleTooltipElement(tooltip, el, popperOptions);
10956
+ togglePopoverElement(popover, el, popperOptions);
10702
10957
  });
10703
10958
  if (trigger.includes('focus')) {
10704
10959
  el.addEventListener('focus', () => {
10705
- addTooltipElement(tooltip, el, popperOptions);
10960
+ addPopoverElement(popover, el, popperOptions);
10706
10961
  });
10707
10962
  el.addEventListener('blur', () => {
10708
- removeTooltipElement(tooltip);
10963
+ removePopoverElement(popover);
10709
10964
  });
10710
10965
  }
10711
10966
  if (trigger.includes('hover')) {
10712
10967
  el.addEventListener('mouseenter', () => {
10713
- addTooltipElement(tooltip, el, popperOptions);
10968
+ addPopoverElement(popover, el, popperOptions);
10714
10969
  });
10715
10970
  el.addEventListener('mouseleave', () => {
10716
- removeTooltipElement(tooltip);
10971
+ removePopoverElement(popover);
10717
10972
  });
10718
10973
  }
10719
10974
  },
10720
- beforeUnmount(binding) {
10721
- const tooltip = binding.arg && document.getElementById(binding.arg);
10722
- tooltip && tooltip.remove();
10975
+ unmounted(binding) {
10976
+ const popover = binding.arg && document.getElementById(binding.arg);
10977
+ popover && popover.remove();
10723
10978
  },
10724
10979
  };
10725
10980
 
@@ -10729,47 +10984,43 @@ const getUID = (prefix) => {
10729
10984
  } while (document.getElementById(prefix));
10730
10985
  return prefix;
10731
10986
  };
10732
- const createPopoverElement = (id, header, content) => {
10733
- const popover = document.createElement('div');
10734
- popover.id = id;
10735
- popover.classList.add('popover', 'bs-popover-auto', 'fade');
10736
- popover.setAttribute('role', 'popover');
10737
- popover.innerHTML = `<div class="popover-arrow" data-popper-arrow></div>
10738
- <div class="popover-header">${header}</div>
10739
- <div class="popover-body" id="">${content}</div>`;
10740
- return popover;
10987
+ const createTooltipElement = (id, content) => {
10988
+ const tooltip = document.createElement('div');
10989
+ tooltip.id = id;
10990
+ tooltip.classList.add('tooltip', 'bs-tooltip-auto', 'fade');
10991
+ tooltip.setAttribute('role', 'tooltip');
10992
+ tooltip.innerHTML = `<div class="tooltip-arrow" data-popper-arrow></div>
10993
+ <div class="tooltip-inner" id="">${content}</div>`;
10994
+ return tooltip;
10741
10995
  };
10742
- const addPopoverElement = (popover, el, popperOptions) => {
10743
- document.body.appendChild(popover);
10744
- createPopper(el, popover, popperOptions);
10996
+ const addTooltipElement = (tooltip, el, popperOptions) => {
10997
+ document.body.appendChild(tooltip);
10998
+ createPopper(el, tooltip, popperOptions);
10745
10999
  setTimeout(() => {
10746
- popover.classList.add('show');
11000
+ tooltip.classList.add('show');
10747
11001
  }, 1);
10748
11002
  };
10749
- const removePopoverElement = (popover) => {
10750
- popover.classList.remove('show');
11003
+ const removeTooltipElement = (tooltip) => {
11004
+ tooltip.classList.remove('show');
10751
11005
  setTimeout(() => {
10752
- document.body.removeChild(popover);
11006
+ document.body.removeChild(tooltip);
10753
11007
  }, 300);
10754
11008
  };
10755
- const togglePopoverElement = (popover, el, popperOptions) => {
10756
- const popperElement = document.getElementById(popover.id);
11009
+ const toggleTooltipElement = (tooltip, el, popperOptions) => {
11010
+ const popperElement = document.getElementById(tooltip.id);
10757
11011
  if (popperElement && popperElement.classList.contains('show')) {
10758
- removePopoverElement(popover);
11012
+ removeTooltipElement(tooltip);
10759
11013
  return;
10760
11014
  }
10761
- addPopoverElement(popover, el, popperOptions);
11015
+ addTooltipElement(tooltip, el, popperOptions);
10762
11016
  };
10763
- var vcpopover = {
10764
- name: 'c-popover',
10765
- uid: '',
11017
+ var vctooltip = {
10766
11018
  mounted(el, binding) {
10767
11019
  const value = binding.value;
10768
11020
  const content = typeof value === 'string' ? value : value.content ? value.content : '';
10769
- const header = value.header ? value.header : '';
10770
- const trigger = value.trigger ? value.trigger : 'click';
11021
+ const trigger = value.trigger ? value.trigger : 'hover';
10771
11022
  // Popper Config
10772
- const offset = value.offset ? value.offset : [0, 8];
11023
+ const offset = value.offset ? value.offset : [0, 0];
10773
11024
  const placement = value.placement ? value.placement : 'top';
10774
11025
  const popperOptions = {
10775
11026
  placement: placement,
@@ -10782,33 +11033,33 @@ var vcpopover = {
10782
11033
  },
10783
11034
  ],
10784
11035
  };
10785
- const popoverUID = getUID('popover');
10786
- binding.arg = popoverUID;
10787
- const popover = createPopoverElement(popoverUID, header, content);
11036
+ const tooltipUID = getUID('tooltip');
11037
+ binding.arg = tooltipUID;
11038
+ const tooltip = createTooltipElement(tooltipUID, content);
10788
11039
  trigger.includes('click') &&
10789
11040
  el.addEventListener('click', () => {
10790
- togglePopoverElement(popover, el, popperOptions);
11041
+ toggleTooltipElement(tooltip, el, popperOptions);
10791
11042
  });
10792
11043
  if (trigger.includes('focus')) {
10793
11044
  el.addEventListener('focus', () => {
10794
- addPopoverElement(popover, el, popperOptions);
11045
+ addTooltipElement(tooltip, el, popperOptions);
10795
11046
  });
10796
11047
  el.addEventListener('blur', () => {
10797
- removePopoverElement(popover);
11048
+ removeTooltipElement(tooltip);
10798
11049
  });
10799
11050
  }
10800
11051
  if (trigger.includes('hover')) {
10801
11052
  el.addEventListener('mouseenter', () => {
10802
- addPopoverElement(popover, el, popperOptions);
11053
+ addTooltipElement(tooltip, el, popperOptions);
10803
11054
  });
10804
11055
  el.addEventListener('mouseleave', () => {
10805
- removePopoverElement(popover);
11056
+ removeTooltipElement(tooltip);
10806
11057
  });
10807
11058
  }
10808
11059
  },
10809
- unmounted(binding) {
10810
- const popover = binding.arg && document.getElementById(binding.arg);
10811
- popover && popover.remove();
11060
+ beforeUnmount(binding) {
11061
+ const tooltip = binding.arg && document.getElementById(binding.arg);
11062
+ tooltip && tooltip.remove();
10812
11063
  },
10813
11064
  };
10814
11065
 
@@ -10835,10 +11086,11 @@ const CoreuiVue = {
10835
11086
  // for (const directive in pluginDirectives) {
10836
11087
  // app.directive(directive, Directives[directive])
10837
11088
  // }
11089
+ app.directive('c-placeholder', vcplaceholder);
10838
11090
  app.directive('c-popover', vcpopover);
10839
11091
  app.directive('c-tooltip', vctooltip);
10840
11092
  },
10841
11093
  };
10842
11094
 
10843
- export { CAccordion, CAccordionBody, CAccordionButton, CAccordionCollapse, CAccordionHeader, CAccordionItem, CAccordionPlugin, CAlert, CAlertHeading, CAlertLink, CAlertPlugin, CAvatar, CAvatarPlugin, CBackdrop, CBackdropPlugin, CBadge, CBadgePlugin, CBreadcrumb, CBreadcrumbItem, CBreadcrumbPlugin, CButton, CButtonGroup, CButtonGroupPlugin, CButtonPlugin, CButtonToolbar, CCLinkPlugin, CCallout, CCalloutPlugin, CCard, CCardBody, CCardFooter, CCardGroup, CCardHeader, CCardImage, CCardImageOverlay, CCardLink, CCardPlugin, CCardSubtitle, CCardText, CCardTitle, CCarousel, CCarouselCaption, CCarouselItem, CCarouselPlugin, CCloseButton, CCloseButtonPlugin, CCol, CCollapse, CCollapsePlugin, CContainer, CDropdown, CDropdownDivider, CDropdownHeader, CDropdownItem, CDropdownMenu, CDropdownPlugin, CDropdownToggle, CFooter, CFooterPlugin, CForm, CFormCheck, CFormFeedback, CFormFloating, CFormInput, CFormLabel, CFormPlugin, CFormRange, CFormSelect, CFormSwitch, CFormText, CFormTextarea, CGridPlugin, CHeader, CHeaderBrand, CHeaderDivider, CHeaderNav, CHeaderPlugin, CHeaderText, CHeaderToggler, CImage, CImagePlugin, CInputGroup, CInputGroupText, CLink, CListGroup, CListGroupItem, CListGroupPlugin, CLoadingButton, CLoadingButtonPlugin, CModal, CModalBody, CModalFooter, CModalHeader, CModalPlugin, CModalTitle, CMultiSelect, CMultiSelectPlugin, CNav, CNavGroup, CNavGroupItems, CNavItem, CNavLink, CNavPlugin, CNavTitle, CNavbar, CNavbarBrand, CNavbarNav, CNavbarPlugin, CNavbarText, CNavbarToggler, COffcanvas, COffcanvasBody, COffcanvasHeader, COffcanvasPlugin, COffcanvasTitle, CPagination, CPaginationItem, CPaginationPlugin, CPopover, CPopoverPlugin, CProgress, CProgressBar, CProgressPlugin, CRow, CSidebar, CSidebarBrand, CSidebarFooter, CSidebarHeader, CSidebarNav, CSidebarPlugin, CSidebarToggler, CSmartPagination, CSmartTable, CSmartTablePlugin, CSpinner, CSpinnerPlugin, CTabContent, CTabPane, CTable, CTableBody, CTableCaption, CTableDataCell, CTableFoot, CTableHead, CTableHeaderCell, CTablePlugin, CTableRow, CTabsPlugin, CToast, CToastBody, CToastClose, CToastHeader, CToastPlugin, CToaster, CTooltip, CTooltipPlugin, CWidgetStatsA, CWidgetStatsB, CWidgetStatsC, CWidgetStatsD, CWidgetStatsE, CWidgetStatsF, CWidgetsStatsPlugin, CoreuiVue as default, vcpopover, vctooltip };
11095
+ export { CAccordion, CAccordionBody, CAccordionButton, CAccordionCollapse, CAccordionHeader, CAccordionItem, CAccordionPlugin, CAlert, CAlertHeading, CAlertLink, CAlertPlugin, CAvatar, CAvatarPlugin, CBackdrop, CBackdropPlugin, CBadge, CBadgePlugin, CBreadcrumb, CBreadcrumbItem, CBreadcrumbPlugin, CButton, CButtonGroup, CButtonGroupPlugin, CButtonPlugin, CButtonToolbar, CCLinkPlugin, CCallout, CCalloutPlugin, CCard, CCardBody, CCardFooter, CCardGroup, CCardHeader, CCardImage, CCardImageOverlay, CCardLink, CCardPlugin, CCardSubtitle, CCardText, CCardTitle, CCarousel, CCarouselCaption, CCarouselItem, CCarouselPlugin, CCloseButton, CCloseButtonPlugin, CCol, CCollapse, CCollapsePlugin, CContainer, CDropdown, CDropdownDivider, CDropdownHeader, CDropdownItem, CDropdownMenu, CDropdownPlugin, CDropdownToggle, CElementCover, CElementCoverPlugin, CFooter, CFooterPlugin, CForm, CFormCheck, CFormFeedback, CFormFloating, CFormInput, CFormLabel, CFormPlugin, CFormRange, CFormSelect, CFormSwitch, CFormText, CFormTextarea, CGridPlugin, CHeader, CHeaderBrand, CHeaderDivider, CHeaderNav, CHeaderPlugin, CHeaderText, CHeaderToggler, CImage, CImagePlugin, CInputGroup, CInputGroupText, CLink, CListGroup, CListGroupItem, CListGroupPlugin, CLoadingButton, CLoadingButtonPlugin, CModal, CModalBody, CModalFooter, CModalHeader, CModalPlugin, CModalTitle, CMultiSelect, CMultiSelectPlugin, CNav, CNavGroup, CNavGroupItems, CNavItem, CNavLink, CNavPlugin, CNavTitle, CNavbar, CNavbarBrand, CNavbarNav, CNavbarPlugin, CNavbarText, CNavbarToggler, COffcanvas, COffcanvasBody, COffcanvasHeader, COffcanvasPlugin, COffcanvasTitle, CPagination, CPaginationItem, CPaginationPlugin, CPlaceholder, CPlaceholderPlugin, CPopover, CPopoverPlugin, CProgress, CProgressBar, CProgressPlugin, CRow, CSidebar, CSidebarBrand, CSidebarFooter, CSidebarHeader, CSidebarNav, CSidebarPlugin, CSidebarToggler, CSmartPagination, CSmartTable, CSmartTablePlugin, CSpinner, CSpinnerPlugin, CTabContent, CTabPane, CTable, CTableBody, CTableCaption, CTableDataCell, CTableFoot, CTableHead, CTableHeaderCell, CTablePlugin, CTableRow, CTabsPlugin, CToast, CToastBody, CToastClose, CToastHeader, CToastPlugin, CToaster, CTooltip, CTooltipPlugin, CWidgetStatsA, CWidgetStatsB, CWidgetStatsC, CWidgetStatsD, CWidgetStatsE, CWidgetStatsF, CWidgetsStatsPlugin, CoreuiVue as default, vcplaceholder, vcpopover, vctooltip };
10844
11096
  //# sourceMappingURL=index.es.js.map