@elliemae/ds-tooltip 2.3.0-next.9 → 2.3.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.
- package/cjs/index.js +5 -3
- package/cjs/v3/DSTooltipV3.js +124 -0
- package/cjs/v3/constants.js +9 -0
- package/cjs/v3/defaultProps.js +15 -0
- package/cjs/v3/index.js +4 -120
- package/cjs/v3/propTypes.js +29 -0
- package/cjs/v3/{styleds.js → styles.js} +10 -5
- package/cjs/v3/utils.js +14 -0
- package/esm/index.js +2 -1
- package/esm/v3/DSTooltipV3.js +112 -0
- package/esm/v3/constants.js +4 -0
- package/esm/v3/defaultProps.js +11 -0
- package/esm/v3/index.js +2 -116
- package/esm/v3/propTypes.js +25 -0
- package/esm/v3/{styleds.js → styles.js} +10 -5
- package/esm/v3/utils.js +10 -0
- package/package.json +31 -19
- package/types/v3/DSTooltipV3.d.ts +61 -0
- package/types/v3/constants.d.ts +2 -0
- package/types/v3/defaultProps.d.ts +2 -0
- package/types/v3/index.d.ts +2 -6
- package/types/v3/{propsTypes.d.ts → propTypes.d.ts} +38 -54
- package/types/v3/{styleds.d.ts → styles.d.ts} +7 -3
- package/types/v3/utils.d.ts +3 -0
- package/cjs/v3/config/useWithDefaultProps.js +0 -18
- package/cjs/v3/index.d.js +0 -2
- package/cjs/v3/propsTypes.js +0 -96
- package/esm/v3/config/useWithDefaultProps.js +0 -14
- package/esm/v3/index.d.js +0 -1
- package/esm/v3/propsTypes.js +0 -92
- package/types/v3/config/useWithDefaultProps.d.ts +0 -2
package/cjs/index.js
CHANGED
|
@@ -6,7 +6,8 @@ var DSTooltip = require('./v1/DSTooltip.js');
|
|
|
6
6
|
var DSTooltip$1 = require('./v2/DSTooltip.js');
|
|
7
7
|
var tooltipPositions = require('./v2/utils/tooltipPositions.js');
|
|
8
8
|
var TooltipType = require('./v2/TooltipType.js');
|
|
9
|
-
var
|
|
9
|
+
var DSTooltipV3 = require('./v3/DSTooltipV3.js');
|
|
10
|
+
var TooltipV3DatatestId = require('./v3/TooltipV3DatatestId.js');
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
|
|
@@ -19,5 +20,6 @@ exports.DSTooltipV2 = DSTooltip$1.DSTooltipV2;
|
|
|
19
20
|
exports.TooltipV2WithSchema = DSTooltip$1.TooltipV2WithSchema;
|
|
20
21
|
exports.tooltipPositions = tooltipPositions.tooltipPositions;
|
|
21
22
|
exports.TooltipType = TooltipType.TooltipType;
|
|
22
|
-
exports.DSTooltipV3 =
|
|
23
|
-
exports.DSTooltipV3WithSchema =
|
|
23
|
+
exports.DSTooltipV3 = DSTooltipV3.DSTooltipV3;
|
|
24
|
+
exports.DSTooltipV3WithSchema = DSTooltipV3.DSTooltipV3WithSchema;
|
|
25
|
+
exports.TooltipV3DatatestId = TooltipV3DatatestId.TooltipV3DatatestId;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
6
|
+
var _jsx = require('@babel/runtime/helpers/jsx');
|
|
7
|
+
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
8
|
+
require('core-js/modules/web.dom-collections.iterator.js');
|
|
9
|
+
require('core-js/modules/esnext.async-iterator.filter.js');
|
|
10
|
+
require('core-js/modules/esnext.iterator.constructor.js');
|
|
11
|
+
require('core-js/modules/esnext.iterator.filter.js');
|
|
12
|
+
require('core-js/modules/esnext.async-iterator.for-each.js');
|
|
13
|
+
require('core-js/modules/esnext.iterator.for-each.js');
|
|
14
|
+
var react = require('react');
|
|
15
|
+
var dsPopperjs = require('@elliemae/ds-popperjs');
|
|
16
|
+
var dsPropsHelpers = require('@elliemae/ds-props-helpers');
|
|
17
|
+
var propTypes = require('./propTypes.js');
|
|
18
|
+
var TooltipV3DatatestId = require('./TooltipV3DatatestId.js');
|
|
19
|
+
var defaultProps = require('./defaultProps.js');
|
|
20
|
+
var styles = require('./styles.js');
|
|
21
|
+
var utils = require('./utils.js');
|
|
22
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
23
|
+
|
|
24
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
25
|
+
|
|
26
|
+
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
27
|
+
var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
|
|
28
|
+
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
|
|
29
|
+
|
|
30
|
+
var _StyledMouseOverDetec;
|
|
31
|
+
|
|
32
|
+
const _excluded = ["text", "children", "onOpen", "onClose", "id", "textAlign", "wrapWords"];
|
|
33
|
+
|
|
34
|
+
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; }
|
|
35
|
+
|
|
36
|
+
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__default["default"](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; }
|
|
37
|
+
|
|
38
|
+
const DSTooltipV3 = props => {
|
|
39
|
+
const _useMemoMergePropsWit = dsPropsHelpers.useMemoMergePropsWithDefault(props, defaultProps.defaultProps),
|
|
40
|
+
{
|
|
41
|
+
text,
|
|
42
|
+
children,
|
|
43
|
+
onOpen,
|
|
44
|
+
onClose,
|
|
45
|
+
id,
|
|
46
|
+
textAlign,
|
|
47
|
+
wrapWords
|
|
48
|
+
} = _useMemoMergePropsWit,
|
|
49
|
+
extraPopperJsProps = _objectWithoutProperties__default["default"](_useMemoMergePropsWit, _excluded);
|
|
50
|
+
|
|
51
|
+
const [isFocused, setIsFocused] = react.useState(false);
|
|
52
|
+
const [isHover, setIsHover] = react.useState(false);
|
|
53
|
+
const [latestOpenInteraction, setLatestOpenInteraction] = react.useState('');
|
|
54
|
+
const [referenceElement, setReferenceElement] = react.useState();
|
|
55
|
+
const [showPopover, setShowPopover] = react.useState(false);
|
|
56
|
+
const showTooltip = react.useCallback(() => {
|
|
57
|
+
setShowPopover(true);
|
|
58
|
+
onOpen();
|
|
59
|
+
}, [onOpen]);
|
|
60
|
+
const hideTooltip = react.useCallback(() => {
|
|
61
|
+
setShowPopover(false);
|
|
62
|
+
onClose();
|
|
63
|
+
}, [onClose]);
|
|
64
|
+
const onFocus = react.useCallback(() => {
|
|
65
|
+
setIsFocused(true);
|
|
66
|
+
|
|
67
|
+
if (!showPopover) {
|
|
68
|
+
showTooltip();
|
|
69
|
+
setLatestOpenInteraction('onFocus');
|
|
70
|
+
}
|
|
71
|
+
}, [showPopover, showTooltip]);
|
|
72
|
+
const onBlur = react.useCallback(() => {
|
|
73
|
+
setIsFocused(false);
|
|
74
|
+
if (!isHover || latestOpenInteraction === 'onFocus') hideTooltip();
|
|
75
|
+
}, [hideTooltip, isHover, latestOpenInteraction]);
|
|
76
|
+
const onMouseEnter = react.useCallback(() => {
|
|
77
|
+
setIsHover(true);
|
|
78
|
+
|
|
79
|
+
if (!showPopover) {
|
|
80
|
+
showTooltip();
|
|
81
|
+
setLatestOpenInteraction('onMouseEnter');
|
|
82
|
+
}
|
|
83
|
+
}, [showPopover, showTooltip]);
|
|
84
|
+
const onMouseLeave = react.useCallback(() => {
|
|
85
|
+
setIsHover(false);
|
|
86
|
+
if (!isFocused || latestOpenInteraction === 'onMouseEnter') hideTooltip();
|
|
87
|
+
}, [hideTooltip, isFocused, latestOpenInteraction]);
|
|
88
|
+
const handleEscKey = react.useCallback(_ref => {
|
|
89
|
+
let {
|
|
90
|
+
key
|
|
91
|
+
} = _ref;
|
|
92
|
+
if (key === 'Escape') hideTooltip();
|
|
93
|
+
}, [hideTooltip]);
|
|
94
|
+
utils.useGlobalKeyboardListener(handleEscKey);
|
|
95
|
+
return /*#__PURE__*/jsxRuntime.jsxs(styles.StyledTriggerWrapper, {
|
|
96
|
+
onMouseEnter: onMouseEnter,
|
|
97
|
+
onMouseLeave: onMouseLeave,
|
|
98
|
+
onPointerEnter: onMouseEnter,
|
|
99
|
+
onPointerLeave: onMouseLeave,
|
|
100
|
+
onFocus: onFocus,
|
|
101
|
+
onBlur: onBlur,
|
|
102
|
+
ref: setReferenceElement,
|
|
103
|
+
"data-testid": "".concat(TooltipV3DatatestId.TooltipV3DatatestId.TRIGGER_WRAPPER).concat(id !== '' ? "_".concat(id) : ''),
|
|
104
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(dsPopperjs.DSPopperJS, _objectSpread(_objectSpread({
|
|
105
|
+
referenceElement: referenceElement,
|
|
106
|
+
showPopover: showPopover,
|
|
107
|
+
withoutPortal: true
|
|
108
|
+
}, extraPopperJsProps), {}, {
|
|
109
|
+
children: /*#__PURE__*/_jsx__default["default"]("div", {
|
|
110
|
+
"data-testid": "".concat(TooltipV3DatatestId.TooltipV3DatatestId.TOOLTIP_TEXT_WRAPPER).concat(id !== '' ? "_".concat(id) : '')
|
|
111
|
+
}, void 0, /*#__PURE__*/_jsx__default["default"](styles.StyledTooltipContainer, {}, void 0, /*#__PURE__*/_jsx__default["default"](styles.StyledTooltipText, {
|
|
112
|
+
textAlign: textAlign,
|
|
113
|
+
wrapWords: wrapWords
|
|
114
|
+
}, void 0, text), _StyledMouseOverDetec || (_StyledMouseOverDetec = /*#__PURE__*/_jsx__default["default"](styles.StyledMouseOverDetectionBox, {}))))
|
|
115
|
+
})), children]
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const DSTooltipV3WithSchema = dsPropsHelpers.describe(DSTooltipV3);
|
|
120
|
+
DSTooltipV3WithSchema.propTypes = propTypes.propTypes;
|
|
121
|
+
|
|
122
|
+
exports.DSTooltipV3 = DSTooltipV3;
|
|
123
|
+
exports.DSTooltipV3WithSchema = DSTooltipV3WithSchema;
|
|
124
|
+
exports["default"] = DSTooltipV3;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const PLACEMENT = ['top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
|
|
6
|
+
const TEXT_ALIGNMENT = ['left', 'right', 'center', 'justify', 'initial', 'inherit'];
|
|
7
|
+
|
|
8
|
+
exports.PLACEMENT = PLACEMENT;
|
|
9
|
+
exports.TEXT_ALIGNMENT = TEXT_ALIGNMENT;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const noop = () => {};
|
|
6
|
+
|
|
7
|
+
const defaultProps = {
|
|
8
|
+
onOpen: noop,
|
|
9
|
+
onClose: noop,
|
|
10
|
+
id: '',
|
|
11
|
+
textAlign: 'left',
|
|
12
|
+
wrapWords: false
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
exports.defaultProps = defaultProps;
|
package/cjs/v3/index.js
CHANGED
|
@@ -2,127 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
6
|
-
var _jsx = require('@babel/runtime/helpers/jsx');
|
|
7
|
-
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
8
|
-
require('core-js/modules/web.dom-collections.iterator.js');
|
|
9
|
-
require('core-js/modules/esnext.async-iterator.filter.js');
|
|
10
|
-
require('core-js/modules/esnext.iterator.constructor.js');
|
|
11
|
-
require('core-js/modules/esnext.iterator.filter.js');
|
|
12
|
-
require('core-js/modules/esnext.async-iterator.for-each.js');
|
|
13
|
-
require('core-js/modules/esnext.iterator.for-each.js');
|
|
14
|
-
var react = require('react');
|
|
15
|
-
var dsPopperjs = require('@elliemae/ds-popperjs');
|
|
16
|
-
var reactDesc = require('react-desc');
|
|
17
|
-
var propsTypes = require('./propsTypes.js');
|
|
18
|
-
var useWithDefaultProps = require('./config/useWithDefaultProps.js');
|
|
5
|
+
var DSTooltipV3 = require('./DSTooltipV3.js');
|
|
19
6
|
var TooltipV3DatatestId = require('./TooltipV3DatatestId.js');
|
|
20
|
-
var styleds = require('./styleds.js');
|
|
21
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
22
7
|
|
|
23
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
24
8
|
|
|
25
|
-
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
26
|
-
var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
|
|
27
|
-
var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
|
|
28
9
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
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; }
|
|
34
|
-
|
|
35
|
-
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__default["default"](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; }
|
|
36
|
-
|
|
37
|
-
const useGlobalKeyboardListener = func => {
|
|
38
|
-
react.useEffect(() => {
|
|
39
|
-
document.addEventListener('keydown', func);
|
|
40
|
-
return () => document.removeEventListener('keydown', func);
|
|
41
|
-
}, [func]);
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
const DSTooltipV3 = props => {
|
|
45
|
-
const _useWithDefaultProps = useWithDefaultProps.useWithDefaultProps(props),
|
|
46
|
-
{
|
|
47
|
-
text,
|
|
48
|
-
children,
|
|
49
|
-
onOpen,
|
|
50
|
-
onClose,
|
|
51
|
-
id,
|
|
52
|
-
textAlign
|
|
53
|
-
} = _useWithDefaultProps,
|
|
54
|
-
extraPopperJsProps = _objectWithoutProperties__default["default"](_useWithDefaultProps, _excluded);
|
|
55
|
-
|
|
56
|
-
const [isFocused, setIsFocused] = react.useState(false);
|
|
57
|
-
const [isHover, setIsHover] = react.useState(false);
|
|
58
|
-
const [latestOpenInteraction, setLatestOpenInteraction] = react.useState('');
|
|
59
|
-
const [referenceElement, setReferenceElement] = react.useState();
|
|
60
|
-
const [showPopover, setShowPopover] = react.useState(false);
|
|
61
|
-
const showTooltip = react.useCallback(() => {
|
|
62
|
-
setShowPopover(true);
|
|
63
|
-
onOpen();
|
|
64
|
-
}, [onOpen]);
|
|
65
|
-
const hideTooltip = react.useCallback(() => {
|
|
66
|
-
setShowPopover(false);
|
|
67
|
-
onClose();
|
|
68
|
-
}, [onClose]);
|
|
69
|
-
const onFocus = react.useCallback(() => {
|
|
70
|
-
setIsFocused(true);
|
|
71
|
-
|
|
72
|
-
if (!showPopover) {
|
|
73
|
-
showTooltip();
|
|
74
|
-
setLatestOpenInteraction('onFocus');
|
|
75
|
-
}
|
|
76
|
-
}, [showPopover, showTooltip]);
|
|
77
|
-
const onBlur = react.useCallback(() => {
|
|
78
|
-
setIsFocused(false);
|
|
79
|
-
if (!isHover || latestOpenInteraction === 'onFocus') hideTooltip();
|
|
80
|
-
}, [hideTooltip, isHover, latestOpenInteraction]);
|
|
81
|
-
const onMouseEnter = react.useCallback(() => {
|
|
82
|
-
setIsHover(true);
|
|
83
|
-
|
|
84
|
-
if (!showPopover) {
|
|
85
|
-
showTooltip();
|
|
86
|
-
setLatestOpenInteraction('onMouseEnter');
|
|
87
|
-
}
|
|
88
|
-
}, [showPopover, showTooltip]);
|
|
89
|
-
const onMouseLeave = react.useCallback(() => {
|
|
90
|
-
setIsHover(false);
|
|
91
|
-
if (!isFocused || latestOpenInteraction === 'onMouseEnter') hideTooltip();
|
|
92
|
-
}, [hideTooltip, isFocused, latestOpenInteraction]);
|
|
93
|
-
const handleEscKey = react.useCallback(_ref => {
|
|
94
|
-
let {
|
|
95
|
-
key
|
|
96
|
-
} = _ref;
|
|
97
|
-
if (key === 'Escape') hideTooltip();
|
|
98
|
-
}, [hideTooltip]);
|
|
99
|
-
useGlobalKeyboardListener(handleEscKey);
|
|
100
|
-
return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
101
|
-
children: /*#__PURE__*/jsxRuntime.jsxs(styleds.StyledTriggerWrapper, {
|
|
102
|
-
onMouseEnter: onMouseEnter,
|
|
103
|
-
onMouseLeave: onMouseLeave,
|
|
104
|
-
onFocus: onFocus,
|
|
105
|
-
onBlur: onBlur,
|
|
106
|
-
ref: setReferenceElement,
|
|
107
|
-
"data-testid": "".concat(TooltipV3DatatestId.TooltipV3DatatestId.TRIGGER_WRAPPER).concat(id !== '' ? "_".concat(id) : ''),
|
|
108
|
-
children: [/*#__PURE__*/jsxRuntime.jsx(dsPopperjs.DSPopperJS, _objectSpread(_objectSpread({
|
|
109
|
-
referenceElement: referenceElement,
|
|
110
|
-
showPopover: showPopover,
|
|
111
|
-
withoutPortal: true
|
|
112
|
-
}, extraPopperJsProps), {}, {
|
|
113
|
-
children: /*#__PURE__*/_jsx__default["default"]("div", {
|
|
114
|
-
"data-testid": "".concat(TooltipV3DatatestId.TooltipV3DatatestId.TOOLTIP_TEXT_WRAPPER).concat(id !== '' ? "_".concat(id) : '')
|
|
115
|
-
}, void 0, /*#__PURE__*/_jsx__default["default"](styleds.StyledTooltipContainer, {}, void 0, /*#__PURE__*/_jsx__default["default"](styleds.StyledTooltipText, {
|
|
116
|
-
textAlign: textAlign
|
|
117
|
-
}, void 0, text), _StyledMouseOverDetec || (_StyledMouseOverDetec = /*#__PURE__*/_jsx__default["default"](styleds.StyledMouseOverDetectionBox, {}))))
|
|
118
|
-
})), children]
|
|
119
|
-
})
|
|
120
|
-
});
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const DSTooltipV3WithSchema = reactDesc.describe(DSTooltipV3).description('A tooltip component');
|
|
124
|
-
DSTooltipV3WithSchema.propTypes = propsTypes.dsTooltipPropTypes;
|
|
125
|
-
|
|
126
|
-
exports.DSTooltipV3 = DSTooltipV3;
|
|
127
|
-
exports.DSTooltipV3WithSchema = DSTooltipV3WithSchema;
|
|
128
|
-
exports["default"] = DSTooltipV3;
|
|
10
|
+
exports.DSTooltipV3 = DSTooltipV3.DSTooltipV3;
|
|
11
|
+
exports.DSTooltipV3WithSchema = DSTooltipV3.DSTooltipV3WithSchema;
|
|
12
|
+
exports.TooltipV3DatatestId = TooltipV3DatatestId.TooltipV3DatatestId;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var reactDesc = require('react-desc');
|
|
6
|
+
var constants = require('./constants.js');
|
|
7
|
+
|
|
8
|
+
const propTypes = {
|
|
9
|
+
text: reactDesc.PropTypes.string.description('Tooltip text to be displayed on hover/focus').isRequired,
|
|
10
|
+
textAlign: reactDesc.PropTypes.oneOf(constants.TEXT_ALIGNMENT).description('Tooltip text alignment').defaultValue('left'),
|
|
11
|
+
wrapWords: reactDesc.PropTypes.bool.description('Break words into a new line. Useful when words exceed tooltip max-lenght.').defaultValue(false),
|
|
12
|
+
children: reactDesc.PropTypes.node.description('Element to tie the tooltip to, must be a single node').isRequired,
|
|
13
|
+
withoutPortal: reactDesc.PropTypes.bool.description('Whether or not the tooltip content should appear in a DOM portal or not').defaultValue(true),
|
|
14
|
+
withoutArrow: reactDesc.PropTypes.bool.description('Whether or not the tooltip should use the arrow').defaultValue(false),
|
|
15
|
+
boundaryElement: reactDesc.PropTypes.element.description('Bounding element to calculate upon, defaults to "clippingParents",' + 'which are the scrolling containers that may cause element to be partially or fully cut off').defaultValue(undefined),
|
|
16
|
+
withoutAnimation: reactDesc.PropTypes.bool.description('Whether or not the popper context menu should be animated').defaultValue(false),
|
|
17
|
+
animationDuration: reactDesc.PropTypes.number.description('Popper context menus Animation duration in ms').defaultValue(100),
|
|
18
|
+
portalDOMContainer: reactDesc.PropTypes.element.description('When using portal, the container in which to append the DOM content, defaults to document body').defaultValue(undefined),
|
|
19
|
+
startPlacementPreference: reactDesc.PropTypes.oneOf(constants.PLACEMENT).description('start placement preferences, as per popperjs placement option').defaultValue("'top'"),
|
|
20
|
+
placementOrderPreference: reactDesc.PropTypes.arrayOf(reactDesc.PropTypes.oneOf(constants.PLACEMENT)).description('Array of placement preferences, as per popperjs "flip" placement option').defaultValue("['top', 'bottom', 'left', 'right']"),
|
|
21
|
+
zIndex: reactDesc.PropTypes.number.description('popperjs content z-index').defaultValue(1),
|
|
22
|
+
customOffset: reactDesc.PropTypes.arrayOf(reactDesc.PropTypes.number).description('placement offset array').defaultValue([0, 14]),
|
|
23
|
+
modifiers: reactDesc.PropTypes.array.description('modifiers array for full-custom tooltip-js override, https://tooltip.js.org/docs/v2/modifiers/').defaultValue(1),
|
|
24
|
+
id: reactDesc.PropTypes.string.description('Optional id appended to data-testid').defaultValue(''),
|
|
25
|
+
onOpen: reactDesc.PropTypes.func.description('Optional callback to be invoked when the tooltip opens').defaultValue('() => {}'),
|
|
26
|
+
onClose: reactDesc.PropTypes.func.description('Optional callback to be invoked when the tooltip closes').defaultValue('() => {}')
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
exports.propTypes = propTypes;
|
|
@@ -9,7 +9,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
9
9
|
var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
|
|
10
10
|
|
|
11
11
|
const StyledTooltipContainer = /*#__PURE__*/styled__default["default"].div.withConfig({
|
|
12
|
-
componentId: "sc-
|
|
12
|
+
componentId: "sc-1jxtr2y-0"
|
|
13
13
|
})(["text-align:center;min-width:", ";max-width:250px;min-height:30px;display:grid;align-items:center;padding:", ";position:relative;background-color:white;border-radius:2px;font-size:13px;color:", ";"], _ref => {
|
|
14
14
|
let {
|
|
15
15
|
theme
|
|
@@ -27,18 +27,23 @@ const StyledTooltipContainer = /*#__PURE__*/styled__default["default"].div.withC
|
|
|
27
27
|
return theme.colors.neutral[600];
|
|
28
28
|
});
|
|
29
29
|
const StyledTooltipText = /*#__PURE__*/styled__default["default"].div.withConfig({
|
|
30
|
-
componentId: "sc-
|
|
31
|
-
})(["
|
|
30
|
+
componentId: "sc-1jxtr2y-1"
|
|
31
|
+
})(["display:inline-block;text-align:", ";word-wrap:break-word;", ""], _ref4 => {
|
|
32
32
|
let {
|
|
33
33
|
textAlign
|
|
34
34
|
} = _ref4;
|
|
35
35
|
return textAlign;
|
|
36
|
+
}, _ref5 => {
|
|
37
|
+
let {
|
|
38
|
+
wrapWords
|
|
39
|
+
} = _ref5;
|
|
40
|
+
return wrapWords ? "word-break: break-all;" : "white-space: normal;";
|
|
36
41
|
});
|
|
37
42
|
const StyledMouseOverDetectionBox = /*#__PURE__*/styled__default["default"].div.withConfig({
|
|
38
|
-
componentId: "sc-
|
|
43
|
+
componentId: "sc-1jxtr2y-2"
|
|
39
44
|
})(["position:absolute;top:-15px;right:-15px;width:calc(100% + 30px);height:calc(100% + 30px);z-index:-1;"]);
|
|
40
45
|
const StyledTriggerWrapper = /*#__PURE__*/styled__default["default"].div.withConfig({
|
|
41
|
-
componentId: "sc-
|
|
46
|
+
componentId: "sc-1jxtr2y-3"
|
|
42
47
|
})(["display:inline-flex;width:100%;"]);
|
|
43
48
|
|
|
44
49
|
exports.StyledMouseOverDetectionBox = StyledMouseOverDetectionBox;
|
package/cjs/v3/utils.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var react = require('react');
|
|
6
|
+
|
|
7
|
+
const useGlobalKeyboardListener = func => {
|
|
8
|
+
react.useEffect(() => {
|
|
9
|
+
document.addEventListener('keydown', func);
|
|
10
|
+
return () => document.removeEventListener('keydown', func);
|
|
11
|
+
}, [func]);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
exports.useGlobalKeyboardListener = useGlobalKeyboardListener;
|
package/esm/index.js
CHANGED
|
@@ -2,4 +2,5 @@ export { DSTooltip, TooltipContainer, TooltipText, TooltipWithSchema, DSTooltip
|
|
|
2
2
|
export { DSTooltipV2, TooltipV2WithSchema } from './v2/DSTooltip.js';
|
|
3
3
|
export { tooltipPositions } from './v2/utils/tooltipPositions.js';
|
|
4
4
|
export { TooltipType } from './v2/TooltipType.js';
|
|
5
|
-
export { DSTooltipV3, DSTooltipV3WithSchema } from './v3/
|
|
5
|
+
export { DSTooltipV3, DSTooltipV3WithSchema } from './v3/DSTooltipV3.js';
|
|
6
|
+
export { TooltipV3DatatestId } from './v3/TooltipV3DatatestId.js';
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
|
|
2
|
+
import _jsx from '@babel/runtime/helpers/esm/jsx';
|
|
3
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
|
|
4
|
+
import 'core-js/modules/web.dom-collections.iterator.js';
|
|
5
|
+
import 'core-js/modules/esnext.async-iterator.filter.js';
|
|
6
|
+
import 'core-js/modules/esnext.iterator.constructor.js';
|
|
7
|
+
import 'core-js/modules/esnext.iterator.filter.js';
|
|
8
|
+
import 'core-js/modules/esnext.async-iterator.for-each.js';
|
|
9
|
+
import 'core-js/modules/esnext.iterator.for-each.js';
|
|
10
|
+
import { useState, useCallback } from 'react';
|
|
11
|
+
import { DSPopperJS } from '@elliemae/ds-popperjs';
|
|
12
|
+
import { describe, useMemoMergePropsWithDefault } from '@elliemae/ds-props-helpers';
|
|
13
|
+
import { propTypes } from './propTypes.js';
|
|
14
|
+
import { TooltipV3DatatestId } from './TooltipV3DatatestId.js';
|
|
15
|
+
import { defaultProps } from './defaultProps.js';
|
|
16
|
+
import { StyledTriggerWrapper, StyledTooltipContainer, StyledTooltipText, StyledMouseOverDetectionBox } from './styles.js';
|
|
17
|
+
import { useGlobalKeyboardListener } from './utils.js';
|
|
18
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
19
|
+
|
|
20
|
+
var _StyledMouseOverDetec;
|
|
21
|
+
|
|
22
|
+
const _excluded = ["text", "children", "onOpen", "onClose", "id", "textAlign", "wrapWords"];
|
|
23
|
+
|
|
24
|
+
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; }
|
|
25
|
+
|
|
26
|
+
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; }
|
|
27
|
+
|
|
28
|
+
const DSTooltipV3 = props => {
|
|
29
|
+
const _useMemoMergePropsWit = useMemoMergePropsWithDefault(props, defaultProps),
|
|
30
|
+
{
|
|
31
|
+
text,
|
|
32
|
+
children,
|
|
33
|
+
onOpen,
|
|
34
|
+
onClose,
|
|
35
|
+
id,
|
|
36
|
+
textAlign,
|
|
37
|
+
wrapWords
|
|
38
|
+
} = _useMemoMergePropsWit,
|
|
39
|
+
extraPopperJsProps = _objectWithoutProperties(_useMemoMergePropsWit, _excluded);
|
|
40
|
+
|
|
41
|
+
const [isFocused, setIsFocused] = useState(false);
|
|
42
|
+
const [isHover, setIsHover] = useState(false);
|
|
43
|
+
const [latestOpenInteraction, setLatestOpenInteraction] = useState('');
|
|
44
|
+
const [referenceElement, setReferenceElement] = useState();
|
|
45
|
+
const [showPopover, setShowPopover] = useState(false);
|
|
46
|
+
const showTooltip = useCallback(() => {
|
|
47
|
+
setShowPopover(true);
|
|
48
|
+
onOpen();
|
|
49
|
+
}, [onOpen]);
|
|
50
|
+
const hideTooltip = useCallback(() => {
|
|
51
|
+
setShowPopover(false);
|
|
52
|
+
onClose();
|
|
53
|
+
}, [onClose]);
|
|
54
|
+
const onFocus = useCallback(() => {
|
|
55
|
+
setIsFocused(true);
|
|
56
|
+
|
|
57
|
+
if (!showPopover) {
|
|
58
|
+
showTooltip();
|
|
59
|
+
setLatestOpenInteraction('onFocus');
|
|
60
|
+
}
|
|
61
|
+
}, [showPopover, showTooltip]);
|
|
62
|
+
const onBlur = useCallback(() => {
|
|
63
|
+
setIsFocused(false);
|
|
64
|
+
if (!isHover || latestOpenInteraction === 'onFocus') hideTooltip();
|
|
65
|
+
}, [hideTooltip, isHover, latestOpenInteraction]);
|
|
66
|
+
const onMouseEnter = useCallback(() => {
|
|
67
|
+
setIsHover(true);
|
|
68
|
+
|
|
69
|
+
if (!showPopover) {
|
|
70
|
+
showTooltip();
|
|
71
|
+
setLatestOpenInteraction('onMouseEnter');
|
|
72
|
+
}
|
|
73
|
+
}, [showPopover, showTooltip]);
|
|
74
|
+
const onMouseLeave = useCallback(() => {
|
|
75
|
+
setIsHover(false);
|
|
76
|
+
if (!isFocused || latestOpenInteraction === 'onMouseEnter') hideTooltip();
|
|
77
|
+
}, [hideTooltip, isFocused, latestOpenInteraction]);
|
|
78
|
+
const handleEscKey = useCallback(_ref => {
|
|
79
|
+
let {
|
|
80
|
+
key
|
|
81
|
+
} = _ref;
|
|
82
|
+
if (key === 'Escape') hideTooltip();
|
|
83
|
+
}, [hideTooltip]);
|
|
84
|
+
useGlobalKeyboardListener(handleEscKey);
|
|
85
|
+
return /*#__PURE__*/jsxs(StyledTriggerWrapper, {
|
|
86
|
+
onMouseEnter: onMouseEnter,
|
|
87
|
+
onMouseLeave: onMouseLeave,
|
|
88
|
+
onPointerEnter: onMouseEnter,
|
|
89
|
+
onPointerLeave: onMouseLeave,
|
|
90
|
+
onFocus: onFocus,
|
|
91
|
+
onBlur: onBlur,
|
|
92
|
+
ref: setReferenceElement,
|
|
93
|
+
"data-testid": "".concat(TooltipV3DatatestId.TRIGGER_WRAPPER).concat(id !== '' ? "_".concat(id) : ''),
|
|
94
|
+
children: [/*#__PURE__*/jsx(DSPopperJS, _objectSpread(_objectSpread({
|
|
95
|
+
referenceElement: referenceElement,
|
|
96
|
+
showPopover: showPopover,
|
|
97
|
+
withoutPortal: true
|
|
98
|
+
}, extraPopperJsProps), {}, {
|
|
99
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
100
|
+
"data-testid": "".concat(TooltipV3DatatestId.TOOLTIP_TEXT_WRAPPER).concat(id !== '' ? "_".concat(id) : '')
|
|
101
|
+
}, void 0, /*#__PURE__*/_jsx(StyledTooltipContainer, {}, void 0, /*#__PURE__*/_jsx(StyledTooltipText, {
|
|
102
|
+
textAlign: textAlign,
|
|
103
|
+
wrapWords: wrapWords
|
|
104
|
+
}, void 0, text), _StyledMouseOverDetec || (_StyledMouseOverDetec = /*#__PURE__*/_jsx(StyledMouseOverDetectionBox, {}))))
|
|
105
|
+
})), children]
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const DSTooltipV3WithSchema = describe(DSTooltipV3);
|
|
110
|
+
DSTooltipV3WithSchema.propTypes = propTypes;
|
|
111
|
+
|
|
112
|
+
export { DSTooltipV3, DSTooltipV3WithSchema, DSTooltipV3 as default };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const PLACEMENT = ['top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
|
|
2
|
+
const TEXT_ALIGNMENT = ['left', 'right', 'center', 'justify', 'initial', 'inherit'];
|
|
3
|
+
|
|
4
|
+
export { PLACEMENT, TEXT_ALIGNMENT };
|
package/esm/v3/index.js
CHANGED
|
@@ -1,116 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';
|
|
4
|
-
import 'core-js/modules/web.dom-collections.iterator.js';
|
|
5
|
-
import 'core-js/modules/esnext.async-iterator.filter.js';
|
|
6
|
-
import 'core-js/modules/esnext.iterator.constructor.js';
|
|
7
|
-
import 'core-js/modules/esnext.iterator.filter.js';
|
|
8
|
-
import 'core-js/modules/esnext.async-iterator.for-each.js';
|
|
9
|
-
import 'core-js/modules/esnext.iterator.for-each.js';
|
|
10
|
-
import { useState, useCallback, useEffect } from 'react';
|
|
11
|
-
import { DSPopperJS } from '@elliemae/ds-popperjs';
|
|
12
|
-
import { describe } from 'react-desc';
|
|
13
|
-
import { dsTooltipPropTypes } from './propsTypes.js';
|
|
14
|
-
import { useWithDefaultProps } from './config/useWithDefaultProps.js';
|
|
15
|
-
import { TooltipV3DatatestId } from './TooltipV3DatatestId.js';
|
|
16
|
-
import { StyledTriggerWrapper, StyledTooltipContainer, StyledTooltipText, StyledMouseOverDetectionBox } from './styleds.js';
|
|
17
|
-
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
18
|
-
|
|
19
|
-
var _StyledMouseOverDetec;
|
|
20
|
-
|
|
21
|
-
const _excluded = ["text", "children", "onOpen", "onClose", "id", "textAlign"];
|
|
22
|
-
|
|
23
|
-
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; }
|
|
24
|
-
|
|
25
|
-
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; }
|
|
26
|
-
|
|
27
|
-
const useGlobalKeyboardListener = func => {
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
document.addEventListener('keydown', func);
|
|
30
|
-
return () => document.removeEventListener('keydown', func);
|
|
31
|
-
}, [func]);
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
const DSTooltipV3 = props => {
|
|
35
|
-
const _useWithDefaultProps = useWithDefaultProps(props),
|
|
36
|
-
{
|
|
37
|
-
text,
|
|
38
|
-
children,
|
|
39
|
-
onOpen,
|
|
40
|
-
onClose,
|
|
41
|
-
id,
|
|
42
|
-
textAlign
|
|
43
|
-
} = _useWithDefaultProps,
|
|
44
|
-
extraPopperJsProps = _objectWithoutProperties(_useWithDefaultProps, _excluded);
|
|
45
|
-
|
|
46
|
-
const [isFocused, setIsFocused] = useState(false);
|
|
47
|
-
const [isHover, setIsHover] = useState(false);
|
|
48
|
-
const [latestOpenInteraction, setLatestOpenInteraction] = useState('');
|
|
49
|
-
const [referenceElement, setReferenceElement] = useState();
|
|
50
|
-
const [showPopover, setShowPopover] = useState(false);
|
|
51
|
-
const showTooltip = useCallback(() => {
|
|
52
|
-
setShowPopover(true);
|
|
53
|
-
onOpen();
|
|
54
|
-
}, [onOpen]);
|
|
55
|
-
const hideTooltip = useCallback(() => {
|
|
56
|
-
setShowPopover(false);
|
|
57
|
-
onClose();
|
|
58
|
-
}, [onClose]);
|
|
59
|
-
const onFocus = useCallback(() => {
|
|
60
|
-
setIsFocused(true);
|
|
61
|
-
|
|
62
|
-
if (!showPopover) {
|
|
63
|
-
showTooltip();
|
|
64
|
-
setLatestOpenInteraction('onFocus');
|
|
65
|
-
}
|
|
66
|
-
}, [showPopover, showTooltip]);
|
|
67
|
-
const onBlur = useCallback(() => {
|
|
68
|
-
setIsFocused(false);
|
|
69
|
-
if (!isHover || latestOpenInteraction === 'onFocus') hideTooltip();
|
|
70
|
-
}, [hideTooltip, isHover, latestOpenInteraction]);
|
|
71
|
-
const onMouseEnter = useCallback(() => {
|
|
72
|
-
setIsHover(true);
|
|
73
|
-
|
|
74
|
-
if (!showPopover) {
|
|
75
|
-
showTooltip();
|
|
76
|
-
setLatestOpenInteraction('onMouseEnter');
|
|
77
|
-
}
|
|
78
|
-
}, [showPopover, showTooltip]);
|
|
79
|
-
const onMouseLeave = useCallback(() => {
|
|
80
|
-
setIsHover(false);
|
|
81
|
-
if (!isFocused || latestOpenInteraction === 'onMouseEnter') hideTooltip();
|
|
82
|
-
}, [hideTooltip, isFocused, latestOpenInteraction]);
|
|
83
|
-
const handleEscKey = useCallback(_ref => {
|
|
84
|
-
let {
|
|
85
|
-
key
|
|
86
|
-
} = _ref;
|
|
87
|
-
if (key === 'Escape') hideTooltip();
|
|
88
|
-
}, [hideTooltip]);
|
|
89
|
-
useGlobalKeyboardListener(handleEscKey);
|
|
90
|
-
return /*#__PURE__*/jsx(Fragment, {
|
|
91
|
-
children: /*#__PURE__*/jsxs(StyledTriggerWrapper, {
|
|
92
|
-
onMouseEnter: onMouseEnter,
|
|
93
|
-
onMouseLeave: onMouseLeave,
|
|
94
|
-
onFocus: onFocus,
|
|
95
|
-
onBlur: onBlur,
|
|
96
|
-
ref: setReferenceElement,
|
|
97
|
-
"data-testid": "".concat(TooltipV3DatatestId.TRIGGER_WRAPPER).concat(id !== '' ? "_".concat(id) : ''),
|
|
98
|
-
children: [/*#__PURE__*/jsx(DSPopperJS, _objectSpread(_objectSpread({
|
|
99
|
-
referenceElement: referenceElement,
|
|
100
|
-
showPopover: showPopover,
|
|
101
|
-
withoutPortal: true
|
|
102
|
-
}, extraPopperJsProps), {}, {
|
|
103
|
-
children: /*#__PURE__*/_jsx("div", {
|
|
104
|
-
"data-testid": "".concat(TooltipV3DatatestId.TOOLTIP_TEXT_WRAPPER).concat(id !== '' ? "_".concat(id) : '')
|
|
105
|
-
}, void 0, /*#__PURE__*/_jsx(StyledTooltipContainer, {}, void 0, /*#__PURE__*/_jsx(StyledTooltipText, {
|
|
106
|
-
textAlign: textAlign
|
|
107
|
-
}, void 0, text), _StyledMouseOverDetec || (_StyledMouseOverDetec = /*#__PURE__*/_jsx(StyledMouseOverDetectionBox, {}))))
|
|
108
|
-
})), children]
|
|
109
|
-
})
|
|
110
|
-
});
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
const DSTooltipV3WithSchema = describe(DSTooltipV3).description('A tooltip component');
|
|
114
|
-
DSTooltipV3WithSchema.propTypes = dsTooltipPropTypes;
|
|
115
|
-
|
|
116
|
-
export { DSTooltipV3, DSTooltipV3WithSchema, DSTooltipV3 as default };
|
|
1
|
+
export { DSTooltipV3, DSTooltipV3WithSchema } from './DSTooltipV3.js';
|
|
2
|
+
export { TooltipV3DatatestId } from './TooltipV3DatatestId.js';
|