@elliemae/ds-popover 2.3.0-alpha.9 → 2.3.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/cjs/Arrow.js +63 -0
  2. package/cjs/DSPopover.js +167 -0
  3. package/cjs/Popover.js +66 -0
  4. package/cjs/PopoverTrigger.js +68 -0
  5. package/cjs/index.js +23 -0
  6. package/cjs/usePopover.js +41 -0
  7. package/cjs/usePopoverProviderState.js +75 -0
  8. package/cjs/usePopper.js +123 -0
  9. package/esm/Arrow.js +55 -0
  10. package/esm/DSPopover.js +148 -0
  11. package/esm/Popover.js +57 -0
  12. package/esm/PopoverTrigger.js +58 -0
  13. package/esm/index.js +4 -0
  14. package/esm/usePopover.js +34 -0
  15. package/esm/usePopoverProviderState.js +69 -0
  16. package/esm/usePopper.js +116 -0
  17. package/package.json +35 -37
  18. package/{dist/types → types}/Arrow.d.ts +0 -0
  19. package/{dist/types → types}/DSPopover.d.ts +0 -0
  20. package/{dist/types → types}/Popover.d.ts +0 -0
  21. package/{dist/types → types}/PopoverTrigger.d.ts +0 -0
  22. package/{dist/types → types}/index.d.ts +0 -0
  23. package/{dist/types → types}/usePopover.d.ts +0 -0
  24. package/{dist/types → types}/usePopoverProviderState.d.ts +0 -0
  25. package/{dist/types → types}/usePopper.d.ts +0 -0
  26. package/dist/cjs/Arrow.js +0 -62
  27. package/dist/cjs/Arrow.js.map +0 -7
  28. package/dist/cjs/DSPopover.js +0 -155
  29. package/dist/cjs/DSPopover.js.map +0 -7
  30. package/dist/cjs/Popover.js +0 -73
  31. package/dist/cjs/Popover.js.map +0 -7
  32. package/dist/cjs/PopoverTrigger.js +0 -72
  33. package/dist/cjs/PopoverTrigger.js.map +0 -7
  34. package/dist/cjs/index.js +0 -36
  35. package/dist/cjs/index.js.map +0 -7
  36. package/dist/cjs/usePopover.js +0 -45
  37. package/dist/cjs/usePopover.js.map +0 -7
  38. package/dist/cjs/usePopoverProviderState.js +0 -85
  39. package/dist/cjs/usePopoverProviderState.js.map +0 -7
  40. package/dist/cjs/usePopper.js +0 -135
  41. package/dist/cjs/usePopper.js.map +0 -7
  42. package/dist/esm/Arrow.js +0 -33
  43. package/dist/esm/Arrow.js.map +0 -7
  44. package/dist/esm/DSPopover.js +0 -126
  45. package/dist/esm/DSPopover.js.map +0 -7
  46. package/dist/esm/Popover.js +0 -44
  47. package/dist/esm/Popover.js.map +0 -7
  48. package/dist/esm/PopoverTrigger.js +0 -43
  49. package/dist/esm/PopoverTrigger.js.map +0 -7
  50. package/dist/esm/index.js +0 -7
  51. package/dist/esm/index.js.map +0 -7
  52. package/dist/esm/usePopover.js +0 -16
  53. package/dist/esm/usePopover.js.map +0 -7
  54. package/dist/esm/usePopoverProviderState.js +0 -56
  55. package/dist/esm/usePopoverProviderState.js.map +0 -7
  56. package/dist/esm/usePopper.js +0 -106
  57. package/dist/esm/usePopper.js.map +0 -7
package/esm/Arrow.js ADDED
@@ -0,0 +1,55 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
7
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
8
+ import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
9
+ import { forwardRef } from 'react';
10
+ import { aggregatedClasses } from '@elliemae/ds-classnames';
11
+ import { getArrowStylesBySize } from '@elliemae/ds-popper';
12
+ import { jsx } from 'react/jsx-runtime';
13
+
14
+ var _svg;
15
+
16
+ const _excluded = ["style", "className", "innerRef", "blockName", "placement"];
17
+
18
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19
+
20
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
+ const ArrowWrapper = aggregatedClasses('span')('popover', 'arrow');
22
+
23
+ function Arrow(_ref) {
24
+ let {
25
+ style,
26
+ className,
27
+ innerRef,
28
+ blockName = 'popover',
29
+ placement
30
+ } = _ref,
31
+ otherProps = _objectWithoutProperties(_ref, _excluded);
32
+
33
+ return /*#__PURE__*/jsx(ArrowWrapper, _objectSpread(_objectSpread({
34
+ className: className,
35
+ "data-placement": placement
36
+ }, otherProps), {}, {
37
+ innerRef: innerRef,
38
+ style: _objectSpread(_objectSpread({}, style), getArrowStylesBySize(placement, 25)),
39
+ children: _svg || (_svg = /*#__PURE__*/_jsx("svg", {
40
+ viewBox: "0 0 30 30"
41
+ }, void 0, /*#__PURE__*/_jsx("path", {
42
+ className: "stroke",
43
+ d: "M23.7,27.1L17,19.9C16.5,19.3,15.8,19,15,19s-1.6,0.3-2.1,0.9l-6.6,7.2C5.3,28.1,3.4,29,2,29h26 C26.7,29,24.6,28.1,23.7,27.1z"
44
+ }), /*#__PURE__*/_jsx("path", {
45
+ className: "fill",
46
+ d: "M23,27.8c1.1,1.2,3.4,2.2,5,2.2h2H0h2c1.7,0,3.9-1,5-2.2l6.6-7.2c0.7-0.8,2-0.8,2.7,0L23,27.8L23,27.8z"
47
+ })))
48
+ }));
49
+ }
50
+
51
+ var Arrow$1 = /*#__PURE__*/forwardRef((props, ref) => /*#__PURE__*/jsx(Arrow, _objectSpread(_objectSpread({}, props), {}, {
52
+ innerRef: ref || props.innerRef
53
+ })));
54
+
55
+ export { Arrow$1 as default };
@@ -0,0 +1,148 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
7
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
8
+ import 'core-js/modules/web.dom-collections.iterator.js';
9
+ import 'react';
10
+ import { PropTypes, describe } from 'react-desc';
11
+ import { useHoverHandlersDelay } from '@elliemae/ds-utilities';
12
+ import { useHiddenController } from '@elliemae/ds-hidden';
13
+ import Popover from './Popover.js';
14
+ import usePopper from './usePopper.js';
15
+ export { default as usePopper } from './usePopper.js';
16
+ import Arrow from './Arrow.js';
17
+ export { default as usePopoverProviderState } from './usePopoverProviderState.js';
18
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
19
+ export * from '@elliemae/ds-popper';
20
+
21
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
22
+
23
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
24
+ const Interaction = {
25
+ CLICK: 'click',
26
+ HOVER: 'hover'
27
+ };
28
+ /* Unstable Popover, not yet fully working */
29
+
30
+ const DSPopover = _ref => {
31
+ let {
32
+ containerProps,
33
+ content,
34
+ // react component inside the popover to render its content
35
+ renderer,
36
+ // function to render the popover component, ex: (popoverProps) => (<div {...popoverProps}></div>)
37
+ visible: visibleProp,
38
+ offset,
39
+ showArrow,
40
+ // popper props options
41
+ placement,
42
+ boundaries,
43
+ // scrollParent | window | viewport
44
+ modifiers,
45
+ referenceEl,
46
+ renderTrigger,
47
+ onClickOutside,
48
+ destroyOnHidden,
49
+ interactionType,
50
+ isOpen,
51
+ style
52
+ } = _ref;
53
+ const {
54
+ visible,
55
+ onShow,
56
+ onHide,
57
+ onToggle
58
+ } = useHiddenController(visibleProp);
59
+ const {
60
+ reference,
61
+ popper,
62
+ arrow,
63
+ popperData
64
+ } = usePopper({
65
+ placement,
66
+ showArrow,
67
+ boundaries,
68
+ modifiers,
69
+ offset,
70
+ referenceEl,
71
+ eventsEnabled: visible,
72
+ isOpen
73
+ });
74
+ const hoverHandlers = useHoverHandlersDelay({
75
+ onMouseOver: onShow,
76
+ onMouseLeave: onHide
77
+ });
78
+ const isPopoverVisible = visible || isOpen;
79
+ return /*#__PURE__*/jsxs(Fragment, {
80
+ children: [renderTrigger(_objectSpread(_objectSpread({}, reference), {}, {
81
+ handlers: interactionType === 'click' ? {
82
+ onClick: onToggle
83
+ } : hoverHandlers,
84
+ onShow,
85
+ onToggle,
86
+ onHide,
87
+ 'aria-haspopup': true,
88
+ 'aria-expanded': visible
89
+ })), isPopoverVisible && reference.ref && /*#__PURE__*/_jsx(Popover, {
90
+ containerProps: containerProps,
91
+ destroyOnHidden: destroyOnHidden,
92
+ interactionType: interactionType,
93
+ isOpen: isOpen,
94
+ onClickOutside: function () {
95
+ onClickOutside(...arguments);
96
+ if (interactionType === 'click') onHide();
97
+ },
98
+ popperProps: popper,
99
+ renderer: renderer && (props => renderer(_objectSpread(_objectSpread({}, props), {}, {
100
+ onShow,
101
+ onToggle,
102
+ onHide
103
+ }))),
104
+ style: style,
105
+ visible: isPopoverVisible
106
+ }, void 0, showArrow && /*#__PURE__*/jsx(Arrow, _objectSpread(_objectSpread({}, arrow), {}, {
107
+ placement: popperData.placement
108
+ })), isPopoverVisible && content)]
109
+ });
110
+ };
111
+
112
+ DSPopover.defaultProps = {
113
+ containerProps: {},
114
+ renderer: undefined,
115
+ visible: undefined,
116
+ offset: undefined,
117
+ showArrow: false,
118
+ placement: 'top',
119
+ modifiers: {},
120
+ renderTrigger: () => null,
121
+ onClickOutside: () => null,
122
+ destroyOnHidden: true,
123
+ isOpen: undefined
124
+ };
125
+ const popoverProps = {
126
+ containerProps: PropTypes.shape({}).description('Set of Properties attached to the main container'),
127
+ destroyOnHidden: PropTypes.bool.description('destroy popover on hidden or not').defaultValue(true),
128
+ renderer: PropTypes.func.description('custom renderer'),
129
+ popperProps: PropTypes.object.description('Popper props attached to container'),
130
+ visible: PropTypes.bool.description('is visible or not').defaultValue(false),
131
+ content: PropTypes.oneOfType([PropTypes.element, PropTypes.string]).description('popover content'),
132
+ onClickOutside: PropTypes.func.description('function called on click outside'),
133
+ interaction: PropTypes.string.description('interaction type: hover, click'),
134
+ offset: PropTypes.object.description('offset'),
135
+ showArrow: PropTypes.bool.description('show tooltip arrow or not'),
136
+ placement: PropTypes.string.description('popover placement: top, bottom, right, left'),
137
+ boundaries: PropTypes.string.description('popover boundaries'),
138
+ modifiers: PropTypes.object.description('modifiers'),
139
+ style: PropTypes.object.description('css style object'),
140
+ referenceEl: PropTypes.element.description('reference element'),
141
+ renderTrigger: PropTypes.func.description('render trigger element'),
142
+ interactionType: PropTypes.string.description('interaction type'),
143
+ isOpen: PropTypes.bool.description('open or not').defaultValue(false)
144
+ };
145
+ const PopoverWithSchema = describe(DSPopover);
146
+ PopoverWithSchema.propTypes = popoverProps;
147
+
148
+ export { DSPopover, Interaction, PopoverWithSchema, DSPopover as default };
package/esm/Popover.js ADDED
@@ -0,0 +1,57 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
7
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
8
+ import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
9
+ import { useRef } from 'react';
10
+ import { omit } from 'lodash';
11
+ import { aggregatedClasses } from '@elliemae/ds-classnames';
12
+ import { removeUndefinedProperties, useOnClickOutside, isFunction } from '@elliemae/ds-utilities';
13
+ import { useHiddenTransition } from '@elliemae/ds-hidden';
14
+ import DSPortal from '@elliemae/ds-portal';
15
+ import { jsx } from 'react/jsx-runtime';
16
+
17
+ const _excluded = ["containerProps", "destroyOnHidden", "renderer", "popperProps", "visible", "content", "onClickOutside", "style"];
18
+
19
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
20
+
21
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
22
+ const blockName = 'popover';
23
+ const PopoverComponent = aggregatedClasses('div')(blockName);
24
+
25
+ function Popover(_ref) {
26
+ let {
27
+ containerProps,
28
+ destroyOnHidden = true,
29
+ renderer = undefined,
30
+ popperProps = {},
31
+ visible = false,
32
+ content = undefined,
33
+ onClickOutside = () => null,
34
+ style
35
+ } = _ref,
36
+ otherProps = _objectWithoutProperties(_ref, _excluded);
37
+
38
+ const popoverRef = useRef();
39
+ const hiddenTransitionProps = useHiddenTransition({
40
+ visible
41
+ });
42
+ const popoverProps = removeUndefinedProperties(_objectSpread(_objectSpread({
43
+ containerprops: containerProps,
44
+ content,
45
+ ref: popoverRef
46
+ }, otherProps), hiddenTransitionProps));
47
+ useOnClickOutside(popoverRef, onClickOutside);
48
+ const wrapStyle = omit(style, 'zIndex') || {};
49
+ return destroyOnHidden && !hiddenTransitionProps.destroyed && /*#__PURE__*/_jsx(DSPortal, {}, void 0, /*#__PURE__*/jsx("div", _objectSpread(_objectSpread({}, popperProps), {}, {
50
+ style: _objectSpread(_objectSpread({}, style), popperProps.style),
51
+ children: isFunction(renderer) ? renderer(popoverProps) : /*#__PURE__*/jsx(PopoverComponent, _objectSpread(_objectSpread({}, popoverProps), {}, {
52
+ style: wrapStyle
53
+ }))
54
+ })));
55
+ }
56
+
57
+ export { Popover as default };
@@ -0,0 +1,58 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
7
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
8
+ import 'react';
9
+ import { jsx } from 'react/jsx-runtime';
10
+
11
+ const _excluded = ["as"];
12
+
13
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14
+
15
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16
+ const Interaction = {
17
+ CLICK: 'click',
18
+ HOVER: 'hover'
19
+ };
20
+
21
+ const noop = () => {};
22
+
23
+ function useHiddenTrigger(_ref) {
24
+ let {
25
+ hiddenId,
26
+ visible = false,
27
+ interaction = 'click',
28
+ onToggle = noop,
29
+ onShow = noop,
30
+ onHide = noop
31
+ } = _ref;
32
+ const handlers = {
33
+ [Interaction.CLICK]: {
34
+ onClick: onToggle
35
+ },
36
+ [Interaction.HOVER]: {
37
+ onMouseEnter: onShow,
38
+ onMouseLeave: onHide
39
+ }
40
+ };
41
+ return _objectSpread(_objectSpread({
42
+ 'aria-expanded': visible
43
+ }, handlers[interaction]), {}, {
44
+ 'aria-controls': hiddenId
45
+ });
46
+ }
47
+
48
+ function PopoverTrigger(_ref2) {
49
+ let {
50
+ as: Component
51
+ } = _ref2,
52
+ props = _objectWithoutProperties(_ref2, _excluded);
53
+
54
+ const hiddenTriggerProps = useHiddenTrigger(props);
55
+ return /*#__PURE__*/jsx(Component, _objectSpread({}, hiddenTriggerProps));
56
+ }
57
+
58
+ export { Interaction, PopoverTrigger as default };
package/esm/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { DSPopover, Interaction, PopoverWithSchema, DSPopover as default } from './DSPopover.js';
2
+ export * from '@elliemae/ds-popper';
3
+ export { default as usePopper } from './usePopper.js';
4
+ export { default as usePopoverProviderState } from './usePopoverProviderState.js';
@@ -0,0 +1,34 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
7
+ import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
8
+ import usePopper from './usePopper.js';
9
+
10
+ const _excluded = ["reference", "popper", "arrow"];
11
+
12
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
+
14
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15
+
16
+ function usePopover(_ref) {
17
+ let otherProps = Object.assign({}, _ref);
18
+
19
+ const _usePopper = usePopper(otherProps),
20
+ {
21
+ reference,
22
+ popper,
23
+ arrow
24
+ } = _usePopper,
25
+ popperProps = _objectWithoutProperties(_usePopper, _excluded);
26
+
27
+ return _objectSpread({
28
+ triggerProps: _objectSpread({}, reference),
29
+ popoverProps: _objectSpread({}, popper),
30
+ arrowProps: _objectSpread({}, arrow)
31
+ }, popperProps);
32
+ }
33
+
34
+ export { usePopover as default };
@@ -0,0 +1,69 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
7
+ import 'core-js/modules/web.dom-collections.iterator.js';
8
+ import { useRef, useState, useEffect } from 'react';
9
+ import { throttle } from 'lodash';
10
+ import { useExecutionTimer } from '@elliemae/ds-utilities';
11
+
12
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
13
+
14
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15
+
16
+ function usePopoverProviderState(_ref) {
17
+ let {
18
+ initialState = {
19
+ reference: null,
20
+ visible: false,
21
+ value: '',
22
+ options: {}
23
+ },
24
+ delay
25
+ } = _ref;
26
+ const triggerRef = useRef();
27
+ const [tooltipState, setTooltipState] = useState(initialState);
28
+
29
+ const show = state => {
30
+ setTooltipState(prevState => _objectSpread(_objectSpread(_objectSpread({}, prevState), state), {}, {
31
+ visible: true
32
+ }));
33
+ };
34
+
35
+ const hide = state => {
36
+ setTooltipState(prevState => _objectSpread(_objectSpread(_objectSpread({}, prevState), state), {}, {
37
+ visible: false
38
+ }));
39
+ };
40
+
41
+ const [showTooltip, hideTooltip] = useExecutionTimer(show, hide, delay);
42
+
43
+ const handleShowTooltip = (state, e) => {
44
+ triggerRef.current = e.target;
45
+ showTooltip(_objectSpread(_objectSpread({}, state), {}, {
46
+ reference: e.target
47
+ }));
48
+ };
49
+
50
+ const handleHideTooltip = state => {
51
+ hideTooltip(state);
52
+ };
53
+
54
+ useEffect(() => {
55
+ window.addEventListener('scroll', throttle(handleHideTooltip, 300), true);
56
+ window.addEventListener('click', handleHideTooltip, true);
57
+ return () => {
58
+ window.removeEventListener('scroll', throttle(handleHideTooltip, 300), true);
59
+ window.addEventListener('click', handleHideTooltip, true);
60
+ };
61
+ }, [tooltipState.reference]);
62
+ return {
63
+ show: handleShowTooltip,
64
+ hide: handleHideTooltip,
65
+ state: tooltipState
66
+ };
67
+ }
68
+
69
+ export { usePopoverProviderState as default };
@@ -0,0 +1,116 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
7
+ import 'core-js/modules/web.dom-collections.iterator.js';
8
+ import Popper from 'popper.js';
9
+ import { useState, useRef, useEffect } from 'react';
10
+
11
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12
+
13
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14
+
15
+ function calculateOffset(_ref) {
16
+ let {
17
+ offset,
18
+ showArrow
19
+ } = _ref;
20
+ const arrowSize = 10;
21
+ const defaultPadding = 3;
22
+ return {
23
+ enabled: showArrow || offset,
24
+ offset: Array.isArray(offset) ? "".concat(offset[0], ", ").concat((offset[1] || offset[0]) + arrowSize + defaultPadding) : "0, ".concat(arrowSize + defaultPadding)
25
+ };
26
+ }
27
+
28
+ function usePopper(_ref2) {
29
+ let {
30
+ offset,
31
+ showArrow,
32
+ placement,
33
+ isOpen,
34
+ modifiers,
35
+ eventsEnabled = true,
36
+ positionFixed,
37
+ boundaries = 'scrollParent',
38
+ referenceEl: refEl
39
+ } = _ref2;
40
+ const [popperData, setPopperData] = useState({}); // this is util for deferred rendering like with portals
41
+
42
+ const [dynamicPopperNode, setPopperNode] = useState(null);
43
+ const referenceRef = useRef();
44
+ const popperRef = useRef();
45
+ const arrowRef = useRef();
46
+ const popper = useRef(); // initialize popper with refs and options
47
+
48
+ useEffect(() => {
49
+ const referenceEl = refEl || referenceRef.current;
50
+ const popperEl = dynamicPopperNode || popperRef.current;
51
+ const arrowEl = arrowRef.current;
52
+ popper.current = referenceEl && popperEl && new Popper(referenceEl, popperEl, {
53
+ placement,
54
+ isOpen,
55
+ eventsEnabled,
56
+ positionFixed,
57
+ modifiers: _objectSpread(_objectSpread({
58
+ preventOverflow: _objectSpread({
59
+ padding: 0,
60
+ boundariesElement: boundaries
61
+ }, modifiers.preventOverflow),
62
+ offset: calculateOffset({
63
+ offset,
64
+ showArrow
65
+ })
66
+ }, modifiers), {}, {
67
+ arrow: {
68
+ enabled: !!arrowEl,
69
+ element: arrowEl
70
+ },
71
+ applyStyle: {
72
+ enabled: false
73
+ },
74
+ updateStateModifier: {
75
+ order: 900,
76
+ enabled: true,
77
+ fn: data => {
78
+ setPopperData(data);
79
+ return data;
80
+ }
81
+ }
82
+ })
83
+ });
84
+ return () => {
85
+ if (popper.current) popper.current.destroy();
86
+ };
87
+ }, [refEl, dynamicPopperNode, placement, showArrow, offset, popperRef, eventsEnabled]); // update popper instance after initialization
88
+
89
+ useEffect(() => {
90
+ if (!popper.current) return;
91
+ popper.current.update();
92
+ }, [popper.current]);
93
+ const arrow = {
94
+ ref: arrowRef,
95
+ style: popperData.arrowStyles
96
+ };
97
+ const popperProps = {
98
+ style: popperData.styles,
99
+ ref: setPopperNode,
100
+ placement: popperData.placement,
101
+ 'data-testid': 'popover-container'
102
+ };
103
+ const reference = {
104
+ ref: referenceRef
105
+ };
106
+ return {
107
+ popperInstance: popper.current,
108
+ popper: popperProps,
109
+ arrow,
110
+ reference,
111
+ // setPopperNode,
112
+ popperData
113
+ };
114
+ }
115
+
116
+ export { usePopper as default };
package/package.json CHANGED
@@ -1,46 +1,43 @@
1
1
  {
2
2
  "name": "@elliemae/ds-popover",
3
- "version": "2.3.0-alpha.9",
3
+ "version": "2.3.0-next.0",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Popover",
6
- "files": [
7
- "dist"
8
- ],
9
- "module": "./dist/esm/index.js",
10
- "main": "./dist/cjs/index.js",
11
- "types": "./dist/types/index.d.ts",
6
+ "module": "./esm/index.js",
7
+ "main": "./cjs/index.js",
8
+ "types": "./types/index.d.ts",
12
9
  "exports": {
13
10
  ".": {
14
- "import": "./dist/esm/index.js",
15
- "require": "./dist/cjs/index.js"
11
+ "import": "./esm/index.js",
12
+ "require": "./cjs/index.js"
16
13
  },
17
14
  "./usePopper": {
18
- "import": "./dist/esm/usePopper.js",
19
- "require": "./dist/cjs/usePopper.js"
15
+ "import": "./esm/usePopper.js",
16
+ "require": "./cjs/usePopper.js"
20
17
  },
21
18
  "./usePopoverProviderState": {
22
- "import": "./dist/esm/usePopoverProviderState.js",
23
- "require": "./dist/cjs/usePopoverProviderState.js"
19
+ "import": "./esm/usePopoverProviderState.js",
20
+ "require": "./cjs/usePopoverProviderState.js"
24
21
  },
25
22
  "./usePopover": {
26
- "import": "./dist/esm/usePopover.js",
27
- "require": "./dist/cjs/usePopover.js"
23
+ "import": "./esm/usePopover.js",
24
+ "require": "./cjs/usePopover.js"
28
25
  },
29
26
  "./PopoverTrigger": {
30
- "import": "./dist/esm/PopoverTrigger.js",
31
- "require": "./dist/cjs/PopoverTrigger.js"
27
+ "import": "./esm/PopoverTrigger.js",
28
+ "require": "./cjs/PopoverTrigger.js"
32
29
  },
33
30
  "./Popover": {
34
- "import": "./dist/esm/Popover.js",
35
- "require": "./dist/cjs/Popover.js"
31
+ "import": "./esm/Popover.js",
32
+ "require": "./cjs/Popover.js"
36
33
  },
37
34
  "./DSPopover": {
38
- "import": "./dist/esm/DSPopover.js",
39
- "require": "./dist/cjs/DSPopover.js"
35
+ "import": "./esm/DSPopover.js",
36
+ "require": "./cjs/DSPopover.js"
40
37
  },
41
38
  "./Arrow": {
42
- "import": "./dist/esm/Arrow.js",
43
- "require": "./dist/cjs/Arrow.js"
39
+ "import": "./esm/Arrow.js",
40
+ "require": "./cjs/Arrow.js"
44
41
  }
45
42
  },
46
43
  "sideEffects": [
@@ -52,16 +49,22 @@
52
49
  "url": "https://git.elliemae.io/platform-ui/dimsum.git"
53
50
  },
54
51
  "engines": {
55
- "pnpm": ">=6",
56
- "node": ">=16"
52
+ "npm": ">=7",
53
+ "node": ">=14"
57
54
  },
58
55
  "author": "ICE MT",
56
+ "scripts": {
57
+ "dev": "cross-env NODE_ENV=development && node ../../scripts/build/build.js -w",
58
+ "prebuild": "exit 0",
59
+ "predev": "exit 0",
60
+ "build": "node ../../scripts/build/build.js"
61
+ },
59
62
  "dependencies": {
60
- "@elliemae/ds-classnames": "2.3.0-alpha.9",
61
- "@elliemae/ds-hidden": "2.3.0-alpha.9",
62
- "@elliemae/ds-popper": "2.3.0-alpha.9",
63
- "@elliemae/ds-portal": "2.3.0-alpha.9",
64
- "@elliemae/ds-utilities": "2.3.0-alpha.9",
63
+ "@elliemae/ds-classnames": "2.3.0-next.0",
64
+ "@elliemae/ds-hidden": "2.3.0-next.0",
65
+ "@elliemae/ds-popper": "2.3.0-next.0",
66
+ "@elliemae/ds-portal": "2.3.0-next.0",
67
+ "@elliemae/ds-utilities": "2.3.0-next.0",
65
68
  "popper.js": "~1.16.1",
66
69
  "react-desc": "~4.1.3"
67
70
  },
@@ -72,12 +75,7 @@
72
75
  },
73
76
  "publishConfig": {
74
77
  "access": "public",
75
- "typeSafety": false
76
- },
77
- "scripts": {
78
- "dev": "cross-env NODE_ENV=development && node ../../scripts/build/build.js -w",
79
- "prebuild": "exit 0",
80
- "predev": "exit 0",
81
- "build": "node ../../scripts/build/build.js"
78
+ "directory": "dist",
79
+ "generateSubmodules": true
82
80
  }
83
81
  }
File without changes
File without changes
File without changes
File without changes