@coreui/react 4.9.0-alpha.0 → 4.9.0-alpha.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.
package/README.md CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  Several quick start options are available:
48
48
 
49
- - [Download the latest release](https://github.com/coreui/coreui-react/archive/v4.9.0-alpha.0.zip)
49
+ - [Download the latest release](https://github.com/coreui/coreui-react/archive/v4.9.0-alpha.1.zip)
50
50
  - Clone the repo: `git clone https://github.com/coreui/coreui-react.git`
51
51
  - Install with [npm](https://www.npmjs.com/): `npm install @coreui/react`
52
52
  - Install with [yarn](https://yarnpkg.com/): `yarn add @coreui/react`
@@ -10,7 +10,7 @@ export interface CTooltipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'con
10
10
  */
11
11
  content: ReactNode | string;
12
12
  /**
13
- * Offset of the popover relative to its target.
13
+ * Offset of the tooltip relative to its target.
14
14
  */
15
15
  offset?: [number, number];
16
16
  /**
@@ -32,7 +32,7 @@ export interface CTooltipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'con
32
32
  */
33
33
  placement?: 'auto' | 'top' | 'right' | 'bottom' | 'left';
34
34
  /**
35
- * Toggle the visibility of popover component.
35
+ * Toggle the visibility of tooltip component.
36
36
  */
37
37
  visible?: boolean;
38
38
  }
package/dist/index.es.js CHANGED
@@ -3021,6 +3021,16 @@ var isInViewport = function (element) {
3021
3021
  Math.floor(rect.right) <= (window.innerWidth || document.documentElement.clientWidth));
3022
3022
  };
3023
3023
 
3024
+ var isRTL = function (element) {
3025
+ if (document.documentElement.dir === 'rtl') {
3026
+ return true;
3027
+ }
3028
+ if (element) {
3029
+ return element.closest('[dir="rtl"]') !== null;
3030
+ }
3031
+ return false;
3032
+ };
3033
+
3024
3034
  var CCarouselContext = createContext({});
3025
3035
  var CCarousel = forwardRef(function (_a, ref) {
3026
3036
  var children = _a.children, _b = _a.activeIndex, activeIndex = _b === void 0 ? 0 : _b, className = _a.className, controls = _a.controls, dark = _a.dark, indicators = _a.indicators, _c = _a.interval, interval = _c === void 0 ? 5000 : _c, onSlid = _a.onSlid, onSlide = _a.onSlide, _d = _a.pause, pause = _d === void 0 ? 'hover' : _d, _e = _a.touch, touch = _e === void 0 ? true : _e, transition = _a.transition, _f = _a.wrap, wrap = _f === void 0 ? true : _f, rest = __rest(_a, ["children", "activeIndex", "className", "controls", "dark", "indicators", "interval", "onSlid", "onSlide", "pause", "touch", "transition", "wrap"]);
@@ -5886,19 +5896,19 @@ var CDropdownMenu = function (_a) {
5886
5896
  _placement = 'bottom';
5887
5897
  }
5888
5898
  if (direction === 'dropup') {
5889
- _placement = 'top-start';
5899
+ _placement = isRTL(dropdownMenuRef.current) ? 'top-end' : 'top-start';
5890
5900
  }
5891
5901
  if (direction === 'dropup-center') {
5892
5902
  _placement = 'top';
5893
5903
  }
5894
5904
  if (direction === 'dropend') {
5895
- _placement = 'right-start';
5905
+ _placement = isRTL(dropdownMenuRef.current) ? 'left-start' : 'right-start';
5896
5906
  }
5897
5907
  if (direction === 'dropstart') {
5898
- _placement = 'left-start';
5908
+ _placement = isRTL(dropdownMenuRef.current) ? 'right-start' : 'left-start';
5899
5909
  }
5900
5910
  if (alignment === 'end') {
5901
- _placement = 'bottom-end';
5911
+ _placement = isRTL(dropdownMenuRef.current) ? 'bottom-start' : 'bottom-end';
5902
5912
  }
5903
5913
  var dropdownMenuComponent = function (style, ref) { return (React__default.createElement(CConditionalPortal, { portal: portal !== null && portal !== void 0 ? portal : false },
5904
5914
  React__default.createElement(Component, __assign({ className: classNames('dropdown-menu', {
@@ -7160,30 +7170,60 @@ CProgress.propTypes = {
7160
7170
  };
7161
7171
  CProgress.displayName = 'CProgress';
7162
7172
 
7173
+ var getPlacement$1 = function (placement, element) {
7174
+ console.log(element);
7175
+ switch (placement) {
7176
+ case 'right': {
7177
+ return isRTL(element) ? 'left' : 'right';
7178
+ }
7179
+ case 'left': {
7180
+ return isRTL(element) ? 'right' : 'left';
7181
+ }
7182
+ default: {
7183
+ return placement;
7184
+ }
7185
+ }
7186
+ };
7163
7187
  var CPopover = function (_a) {
7164
7188
  var children = _a.children, className = _a.className, content = _a.content, _b = _a.offset, offset = _b === void 0 ? [0, 8] : _b, onHide = _a.onHide, onShow = _a.onShow, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, title = _a.title, _d = _a.trigger, trigger = _d === void 0 ? 'click' : _d, visible = _a.visible, rest = __rest(_a, ["children", "className", "content", "offset", "onHide", "onShow", "placement", "title", "trigger", "visible"]);
7189
+ var popoverRef = useRef(null);
7190
+ var togglerRef = useRef(null);
7191
+ var popper = useRef();
7165
7192
  var _e = useState(visible), _visible = _e[0], setVisible = _e[1];
7166
- var popoverRef = useRef();
7167
- var _f = useState(null), referenceElement = _f[0], setReferenceElement = _f[1];
7168
- var _g = useState(null), popperElement = _g[0], setPopperElement = _g[1];
7169
- var _h = useState(null), arrowElement = _h[0], setArrowElement = _h[1];
7170
- var _j = usePopper(referenceElement, popperElement, {
7171
- modifiers: [
7172
- { name: 'arrow', options: { element: arrowElement } },
7173
- {
7174
- name: 'offset',
7175
- options: {
7176
- offset: offset,
7177
- },
7178
- },
7179
- ],
7180
- placement: placement,
7181
- }), styles = _j.styles, attributes = _j.attributes;
7182
7193
  useEffect(function () {
7183
7194
  setVisible(visible);
7184
7195
  }, [visible]);
7196
+ useEffect(function () {
7197
+ if (_visible) {
7198
+ initPopper();
7199
+ }
7200
+ return function () {
7201
+ destroyPopper();
7202
+ };
7203
+ }, [_visible]);
7204
+ var initPopper = function () {
7205
+ if (togglerRef.current && popoverRef.current) {
7206
+ popper.current = createPopper(togglerRef.current, popoverRef.current, {
7207
+ modifiers: [
7208
+ {
7209
+ name: 'offset',
7210
+ options: {
7211
+ offset: offset,
7212
+ },
7213
+ },
7214
+ ],
7215
+ placement: getPlacement$1(placement, togglerRef.current),
7216
+ });
7217
+ }
7218
+ };
7219
+ var destroyPopper = function () {
7220
+ if (popper.current) {
7221
+ popper.current.destroy();
7222
+ }
7223
+ popper.current = undefined;
7224
+ };
7185
7225
  return (React__default.createElement(React__default.Fragment, null,
7186
- React__default.cloneElement(children, __assign(__assign(__assign({ ref: setReferenceElement }, ((trigger === 'click' || trigger.includes('click')) && {
7226
+ React__default.cloneElement(children, __assign(__assign(__assign({ ref: togglerRef }, ((trigger === 'click' || trigger.includes('click')) && {
7187
7227
  onClick: function () { return setVisible(!_visible); },
7188
7228
  })), ((trigger === 'focus' || trigger.includes('focus')) && {
7189
7229
  onFocus: function () { return setVisible(true); },
@@ -7196,10 +7236,12 @@ var CPopover = function (_a) {
7196
7236
  createPortal(React__default.createElement(Transition$1, { in: _visible, mountOnEnter: true, nodeRef: popoverRef, onEnter: onShow, onExit: onHide, timeout: {
7197
7237
  enter: 0,
7198
7238
  exit: 200,
7199
- }, unmountOnExit: true }, function (state) { return (React__default.createElement("div", __assign({ className: classNames('popover', "bs-popover-".concat(placement.replace('left', 'start').replace('right', 'end')), 'fade', {
7239
+ }, unmountOnExit: true }, function (state) { return (React__default.createElement("div", __assign({ className: classNames('popover', "bs-popover-".concat(getPlacement$1(placement, togglerRef.current)
7240
+ .replace('left', 'start')
7241
+ .replace('right', 'end')), 'fade', {
7200
7242
  show: state === 'entered',
7201
- }, className), ref: setPopperElement, role: "tooltip", style: styles.popper }, attributes.popper, rest),
7202
- React__default.createElement("div", { className: "popover-arrow", style: styles.arrow, ref: setArrowElement }),
7243
+ }, className), ref: popoverRef, role: "tooltip" }, rest),
7244
+ React__default.createElement("div", { "data-popper-arrow": true, className: "popover-arrow" }),
7203
7245
  React__default.createElement("div", { className: "popover-header" }, title),
7204
7246
  React__default.createElement("div", { className: "popover-body" }, content))); }), document.body)));
7205
7247
  };
@@ -7732,30 +7774,60 @@ CToaster.propTypes = {
7732
7774
  };
7733
7775
  CToaster.displayName = 'CToaster';
7734
7776
 
7777
+ var getPlacement = function (placement, element) {
7778
+ console.log(element);
7779
+ switch (placement) {
7780
+ case 'right': {
7781
+ return isRTL(element) ? 'left' : 'right';
7782
+ }
7783
+ case 'left': {
7784
+ return isRTL(element) ? 'right' : 'left';
7785
+ }
7786
+ default: {
7787
+ return placement;
7788
+ }
7789
+ }
7790
+ };
7735
7791
  var CTooltip = function (_a) {
7736
- var children = _a.children, className = _a.className, content = _a.content, _b = _a.offset, offset = _b === void 0 ? [0, 0] : _b, onHide = _a.onHide, onShow = _a.onShow, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, _d = _a.trigger, trigger = _d === void 0 ? 'hover' : _d, visible = _a.visible, rest = __rest(_a, ["children", "className", "content", "offset", "onHide", "onShow", "placement", "trigger", "visible"]);
7737
- var tooltipRef = useRef();
7792
+ var children = _a.children, className = _a.className, content = _a.content, _b = _a.offset, offset = _b === void 0 ? [0, 6] : _b, onHide = _a.onHide, onShow = _a.onShow, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, _d = _a.trigger, trigger = _d === void 0 ? 'hover' : _d, visible = _a.visible, rest = __rest(_a, ["children", "className", "content", "offset", "onHide", "onShow", "placement", "trigger", "visible"]);
7793
+ var tooltipRef = useRef(null);
7794
+ var togglerRef = useRef(null);
7795
+ var popper = useRef();
7738
7796
  var _e = useState(visible), _visible = _e[0], setVisible = _e[1];
7739
- var _f = useState(null), referenceElement = _f[0], setReferenceElement = _f[1];
7740
- var _g = useState(null), popperElement = _g[0], setPopperElement = _g[1];
7741
- var _h = useState(null), arrowElement = _h[0], setArrowElement = _h[1];
7742
- var _j = usePopper(referenceElement, popperElement, {
7743
- modifiers: [
7744
- { name: 'arrow', options: { element: arrowElement } },
7745
- {
7746
- name: 'offset',
7747
- options: {
7748
- offset: offset,
7749
- },
7750
- },
7751
- ],
7752
- placement: placement,
7753
- }), styles = _j.styles, attributes = _j.attributes;
7754
7797
  useEffect(function () {
7755
7798
  setVisible(visible);
7756
7799
  }, [visible]);
7800
+ useEffect(function () {
7801
+ if (_visible) {
7802
+ initPopper();
7803
+ }
7804
+ return function () {
7805
+ destroyPopper();
7806
+ };
7807
+ }, [_visible]);
7808
+ var initPopper = function () {
7809
+ if (togglerRef.current && tooltipRef.current) {
7810
+ popper.current = createPopper(togglerRef.current, tooltipRef.current, {
7811
+ modifiers: [
7812
+ {
7813
+ name: 'offset',
7814
+ options: {
7815
+ offset: offset,
7816
+ },
7817
+ },
7818
+ ],
7819
+ placement: getPlacement(placement, togglerRef.current),
7820
+ });
7821
+ }
7822
+ };
7823
+ var destroyPopper = function () {
7824
+ if (popper.current) {
7825
+ popper.current.destroy();
7826
+ }
7827
+ popper.current = undefined;
7828
+ };
7757
7829
  return (React__default.createElement(React__default.Fragment, null,
7758
- React__default.cloneElement(children, __assign(__assign(__assign({ ref: setReferenceElement }, ((trigger === 'click' || trigger.includes('click')) && {
7830
+ React__default.cloneElement(children, __assign(__assign(__assign({ ref: togglerRef }, ((trigger === 'click' || trigger.includes('click')) && {
7759
7831
  onClick: function () { return setVisible(!_visible); },
7760
7832
  })), ((trigger === 'focus' || trigger.includes('focus')) && {
7761
7833
  onFocus: function () { return setVisible(true); },
@@ -7765,13 +7837,15 @@ var CTooltip = function (_a) {
7765
7837
  onMouseLeave: function () { return setVisible(false); },
7766
7838
  }))),
7767
7839
  typeof window !== 'undefined' &&
7768
- createPortal(React__default.createElement(Transition$1, { in: _visible, mountOnEnter: true, nodeRef: tooltipRef, onEnter: onShow, onExit: onHide, timeout: {
7840
+ createPortal(React__default.createElement(Transition$1, { in: _visible, mountOnEnter: true, onEnter: onShow, onExit: onHide, timeout: {
7769
7841
  enter: 0,
7770
7842
  exit: 200,
7771
- }, unmountOnExit: true }, function (state) { return (React__default.createElement("div", __assign({ className: classNames('tooltip', "bs-popover-".concat(placement.replace('left', 'start').replace('right', 'end')), 'fade', {
7843
+ }, unmountOnExit: true }, function (state) { return (React__default.createElement("div", __assign({ className: classNames('tooltip', "bs-tooltip-".concat(getPlacement(placement, togglerRef.current)
7844
+ .replace('left', 'start')
7845
+ .replace('right', 'end')), 'fade', {
7772
7846
  show: state === 'entered',
7773
- }, className), ref: setPopperElement, role: "tooltip", style: styles.popper }, attributes.popper, rest),
7774
- React__default.createElement("div", { className: "tooltip-arrow", style: styles.arrow, ref: setArrowElement }),
7847
+ }, className), ref: tooltipRef, role: "tooltip" }, rest),
7848
+ React__default.createElement("div", { "data-popper-arrow": true, className: "tooltip-arrow" }),
7775
7849
  React__default.createElement("div", { className: "tooltip-inner" }, content))); }), document.body)));
7776
7850
  };
7777
7851
  CTooltip.propTypes = {