@dnb/eufemia 9.31.0 → 9.32.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/CHANGELOG.md +24 -0
- package/cjs/components/accordion/style/themes/dnb-accordion-theme-ui.css +19 -20
- package/cjs/components/accordion/style/themes/dnb-accordion-theme-ui.min.css +3 -3
- package/cjs/components/accordion/style/themes/dnb-accordion-theme-ui.scss +11 -14
- package/cjs/components/avatar/Avatar.d.ts +4 -4
- package/cjs/components/avatar/AvatarGroup.d.ts +2 -2
- package/cjs/components/badge/Badge.d.ts +3 -3
- package/cjs/components/breadcrumb/Breadcrumb.d.ts +4 -4
- package/cjs/components/breadcrumb/Breadcrumb.js +1 -1
- package/cjs/components/breadcrumb/BreadcrumbItem.d.ts +2 -1
- package/cjs/components/breadcrumb/BreadcrumbItem.js +5 -2
- package/cjs/components/breadcrumb/BreadcrumbMultiple.d.ts +1 -1
- package/cjs/components/breadcrumb/BreadcrumbMultiple.js +7 -5
- package/cjs/components/button/Button.d.ts +1 -1
- package/cjs/components/height-animation/HeightAnimation.d.ts +2 -2
- package/cjs/components/height-animation/HeightAnimation.js +1 -1
- package/cjs/components/info-card/InfoCard.d.ts +2 -2
- package/cjs/components/lib.d.ts +16 -16
- package/cjs/components/modal/Modal.d.ts +2 -2
- package/cjs/components/section/Section.d.ts +2 -2
- package/cjs/components/slider/SliderThumb.js +17 -4
- package/cjs/components/slider/SliderTrack.js +3 -6
- package/cjs/components/slider/hooks/useSliderEvents.d.ts +2 -2
- package/cjs/components/slider/hooks/useSliderEvents.js +3 -2
- package/cjs/components/slider/types.d.ts +2 -2
- package/cjs/components/table/Table.d.ts +2 -2
- package/cjs/components/tag/Tag.d.ts +4 -4
- package/cjs/components/tag/TagGroup.d.ts +2 -2
- package/cjs/components/timeline/Timeline.d.ts +2 -2
- package/cjs/components/tooltip/Tooltip.js +21 -18
- package/cjs/components/tooltip/TooltipContainer.js +42 -17
- package/cjs/components/tooltip/TooltipHelpers.d.ts +1 -1
- package/cjs/components/tooltip/TooltipHelpers.js +5 -9
- package/cjs/components/tooltip/TooltipPortal.d.ts +1 -1
- package/cjs/components/tooltip/TooltipPortal.js +47 -30
- package/cjs/components/tooltip/TooltipWithEvents.d.ts +1 -1
- package/cjs/components/tooltip/TooltipWithEvents.js +69 -41
- package/cjs/components/tooltip/types.d.ts +3 -2
- package/cjs/components/visually-hidden/VisuallyHidden.d.ts +1 -1
- package/cjs/elements/Anchor.d.ts +4 -4
- package/cjs/elements/Dd.d.ts +2 -2
- package/cjs/elements/Dl.d.ts +5 -8
- package/cjs/elements/Dl.js +2 -2
- package/cjs/elements/Dt.d.ts +2 -2
- package/cjs/elements/Element.d.ts +4 -2
- package/cjs/elements/Li.d.ts +6 -26
- package/cjs/elements/Li.js +0 -23
- package/cjs/elements/Link.d.ts +2 -2
- package/cjs/elements/Ol.d.ts +20 -29
- package/cjs/elements/Ol.js +0 -33
- package/cjs/elements/Ul.d.ts +20 -30
- package/cjs/elements/Ul.js +0 -35
- package/cjs/elements/lib.d.ts +13 -15
- package/cjs/fragments/lib.d.ts +2 -2
- package/cjs/fragments/scroll-view/ScrollView.d.ts +4 -4
- package/cjs/shared/Eufemia.js +1 -1
- package/cjs/shared/component-helper.js +1 -1
- package/cjs/shared/interfaces.d.ts +4 -25
- package/cjs/shared/interfaces.js +24 -1
- package/cjs/shared/types.d.ts +35 -0
- package/cjs/shared/types.js +1 -0
- package/cjs/style/dnb-ui-elements.css +32 -17
- package/cjs/style/dnb-ui-elements.min.css +1 -1
- package/cjs/style/dnb-ui-tags.css +62 -33
- package/cjs/style/dnb-ui-tags.min.css +1 -1
- package/cjs/style/elements/lists.scss +1 -1
- package/cjs/style/elements/ui-spacing.scss +3 -1
- package/cjs/style/themes/theme-eiendom/dnb-theme-eiendom.css +51 -37
- package/cjs/style/themes/theme-eiendom/dnb-theme-eiendom.min.css +3 -3
- package/cjs/style/themes/theme-ui/dnb-theme-ui.css +51 -37
- package/cjs/style/themes/theme-ui/dnb-theme-ui.min.css +3 -3
- package/components/accordion/style/themes/dnb-accordion-theme-ui.css +19 -20
- package/components/accordion/style/themes/dnb-accordion-theme-ui.min.css +3 -3
- package/components/accordion/style/themes/dnb-accordion-theme-ui.scss +11 -14
- package/components/avatar/Avatar.d.ts +4 -4
- package/components/avatar/AvatarGroup.d.ts +2 -2
- package/components/badge/Badge.d.ts +3 -3
- package/components/breadcrumb/Breadcrumb.d.ts +4 -4
- package/components/breadcrumb/Breadcrumb.js +1 -1
- package/components/breadcrumb/BreadcrumbItem.d.ts +2 -1
- package/components/breadcrumb/BreadcrumbItem.js +5 -2
- package/components/breadcrumb/BreadcrumbMultiple.d.ts +1 -1
- package/components/breadcrumb/BreadcrumbMultiple.js +7 -5
- package/components/button/Button.d.ts +1 -1
- package/components/height-animation/HeightAnimation.d.ts +2 -2
- package/components/height-animation/HeightAnimation.js +1 -1
- package/components/info-card/InfoCard.d.ts +2 -2
- package/components/lib.d.ts +16 -16
- package/components/modal/Modal.d.ts +2 -2
- package/components/section/Section.d.ts +2 -2
- package/components/slider/SliderThumb.js +18 -5
- package/components/slider/SliderTrack.js +3 -6
- package/components/slider/hooks/useSliderEvents.d.ts +2 -2
- package/components/slider/hooks/useSliderEvents.js +3 -2
- package/components/slider/types.d.ts +2 -2
- package/components/table/Table.d.ts +2 -2
- package/components/tag/Tag.d.ts +4 -4
- package/components/tag/TagGroup.d.ts +2 -2
- package/components/timeline/Timeline.d.ts +2 -2
- package/components/tooltip/Tooltip.js +21 -18
- package/components/tooltip/TooltipContainer.js +41 -18
- package/components/tooltip/TooltipHelpers.d.ts +1 -1
- package/components/tooltip/TooltipHelpers.js +5 -9
- package/components/tooltip/TooltipPortal.d.ts +1 -1
- package/components/tooltip/TooltipPortal.js +46 -29
- package/components/tooltip/TooltipWithEvents.d.ts +1 -1
- package/components/tooltip/TooltipWithEvents.js +67 -42
- package/components/tooltip/types.d.ts +3 -2
- package/components/visually-hidden/VisuallyHidden.d.ts +1 -1
- package/elements/Anchor.d.ts +4 -4
- package/elements/Dd.d.ts +2 -2
- package/elements/Dl.d.ts +5 -8
- package/elements/Dl.js +2 -2
- package/elements/Dt.d.ts +2 -2
- package/elements/Element.d.ts +4 -2
- package/elements/Li.d.ts +6 -26
- package/elements/Li.js +0 -20
- package/elements/Link.d.ts +2 -2
- package/elements/Ol.d.ts +20 -29
- package/elements/Ol.js +0 -28
- package/elements/Ul.d.ts +20 -30
- package/elements/Ul.js +0 -30
- package/elements/lib.d.ts +13 -15
- package/es/components/accordion/style/themes/dnb-accordion-theme-ui.css +19 -20
- package/es/components/accordion/style/themes/dnb-accordion-theme-ui.min.css +3 -3
- package/es/components/accordion/style/themes/dnb-accordion-theme-ui.scss +11 -14
- package/es/components/avatar/Avatar.d.ts +4 -4
- package/es/components/avatar/AvatarGroup.d.ts +2 -2
- package/es/components/badge/Badge.d.ts +3 -3
- package/es/components/breadcrumb/Breadcrumb.d.ts +4 -4
- package/es/components/breadcrumb/Breadcrumb.js +1 -1
- package/es/components/breadcrumb/BreadcrumbItem.d.ts +2 -1
- package/es/components/breadcrumb/BreadcrumbItem.js +5 -2
- package/es/components/breadcrumb/BreadcrumbMultiple.d.ts +1 -1
- package/es/components/breadcrumb/BreadcrumbMultiple.js +5 -5
- package/es/components/button/Button.d.ts +1 -1
- package/es/components/height-animation/HeightAnimation.d.ts +2 -2
- package/es/components/height-animation/HeightAnimation.js +1 -1
- package/es/components/info-card/InfoCard.d.ts +2 -2
- package/es/components/lib.d.ts +16 -16
- package/es/components/modal/Modal.d.ts +2 -2
- package/es/components/section/Section.d.ts +2 -2
- package/es/components/slider/SliderThumb.js +18 -5
- package/es/components/slider/SliderTrack.js +3 -6
- package/es/components/slider/hooks/useSliderEvents.d.ts +2 -2
- package/es/components/slider/hooks/useSliderEvents.js +3 -2
- package/es/components/slider/types.d.ts +2 -2
- package/es/components/table/Table.d.ts +2 -2
- package/es/components/tag/Tag.d.ts +4 -4
- package/es/components/tag/TagGroup.d.ts +2 -2
- package/es/components/timeline/Timeline.d.ts +2 -2
- package/es/components/tooltip/Tooltip.js +13 -15
- package/es/components/tooltip/TooltipContainer.js +37 -20
- package/es/components/tooltip/TooltipHelpers.d.ts +1 -1
- package/es/components/tooltip/TooltipHelpers.js +5 -9
- package/es/components/tooltip/TooltipPortal.d.ts +1 -1
- package/es/components/tooltip/TooltipPortal.js +44 -29
- package/es/components/tooltip/TooltipWithEvents.d.ts +1 -1
- package/es/components/tooltip/TooltipWithEvents.js +69 -43
- package/es/components/tooltip/types.d.ts +3 -2
- package/es/components/visually-hidden/VisuallyHidden.d.ts +1 -1
- package/es/elements/Anchor.d.ts +4 -4
- package/es/elements/Dd.d.ts +2 -2
- package/es/elements/Dl.d.ts +5 -8
- package/es/elements/Dl.js +2 -2
- package/es/elements/Dt.d.ts +2 -2
- package/es/elements/Element.d.ts +4 -2
- package/es/elements/Li.d.ts +6 -26
- package/es/elements/Li.js +0 -15
- package/es/elements/Link.d.ts +2 -2
- package/es/elements/Ol.d.ts +20 -29
- package/es/elements/Ol.js +0 -21
- package/es/elements/Ul.d.ts +20 -30
- package/es/elements/Ul.js +0 -23
- package/es/elements/lib.d.ts +13 -15
- package/es/fragments/lib.d.ts +2 -2
- package/es/fragments/scroll-view/ScrollView.d.ts +4 -4
- package/es/shared/Eufemia.js +1 -1
- package/es/shared/component-helper.js +1 -1
- package/es/shared/interfaces.d.ts +4 -25
- package/es/shared/interfaces.js +1 -1
- package/es/shared/types.d.ts +35 -0
- package/es/shared/types.js +1 -0
- package/es/style/dnb-ui-elements.css +32 -17
- package/es/style/dnb-ui-elements.min.css +1 -1
- package/es/style/dnb-ui-tags.css +62 -33
- package/es/style/dnb-ui-tags.min.css +1 -1
- package/es/style/elements/lists.scss +1 -1
- package/es/style/elements/ui-spacing.scss +3 -1
- package/es/style/themes/theme-eiendom/dnb-theme-eiendom.css +51 -37
- package/es/style/themes/theme-eiendom/dnb-theme-eiendom.min.css +3 -3
- package/es/style/themes/theme-ui/dnb-theme-ui.css +51 -37
- package/es/style/themes/theme-ui/dnb-theme-ui.min.css +3 -3
- package/esm/dnb-ui-basis.min.mjs +1 -1
- package/esm/dnb-ui-components.min.mjs +1 -1
- package/esm/dnb-ui-elements.min.mjs +3 -3
- package/esm/dnb-ui-extensions.min.mjs +1 -1
- package/esm/dnb-ui-lib.min.mjs +2 -2
- package/esm/dnb-ui-web-components.min.mjs +2 -2
- package/fragments/lib.d.ts +2 -2
- package/fragments/scroll-view/ScrollView.d.ts +4 -4
- package/package.json +1 -1
- package/shared/Eufemia.js +1 -1
- package/shared/component-helper.js +1 -1
- package/shared/interfaces.d.ts +4 -25
- package/shared/interfaces.js +1 -1
- package/shared/types.d.ts +35 -0
- package/shared/types.js +1 -0
- package/style/dnb-ui-elements.css +32 -17
- package/style/dnb-ui-elements.min.css +1 -1
- package/style/dnb-ui-tags.css +62 -33
- package/style/dnb-ui-tags.min.css +1 -1
- package/style/elements/lists.scss +1 -1
- package/style/elements/ui-spacing.scss +3 -1
- package/style/themes/theme-eiendom/dnb-theme-eiendom.css +51 -37
- package/style/themes/theme-eiendom/dnb-theme-eiendom.min.css +3 -3
- package/style/themes/theme-ui/dnb-theme-ui.css +51 -37
- package/style/themes/theme-ui/dnb-theme-ui.min.css +3 -3
- package/umd/dnb-ui-basis.min.js +1 -1
- package/umd/dnb-ui-components.min.js +1 -1
- package/umd/dnb-ui-elements.min.js +5 -5
- package/umd/dnb-ui-extensions.min.js +1 -1
- package/umd/dnb-ui-lib.min.js +2 -2
- package/umd/dnb-ui-web-components.min.js +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { SpacingProps } from '../../shared/types';
|
|
3
3
|
import { SkeletonShow } from '../skeleton/Skeleton';
|
|
4
4
|
export interface TagGroupProps {
|
|
5
5
|
/**
|
|
@@ -29,5 +29,5 @@ export declare const defaultProps: {
|
|
|
29
29
|
children: any;
|
|
30
30
|
skeleton: boolean;
|
|
31
31
|
};
|
|
32
|
-
declare const TagGroup: (localProps: TagGroupProps &
|
|
32
|
+
declare const TagGroup: (localProps: TagGroupProps & SpacingProps) => JSX.Element;
|
|
33
33
|
export default TagGroup;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { SpacingProps } from '../../shared/types';
|
|
3
3
|
import { SkeletonShow } from '../skeleton/Skeleton';
|
|
4
4
|
import TimelineItem, { TimelineItemProps } from './TimelineItem';
|
|
5
5
|
export interface TimelineProps {
|
|
@@ -31,7 +31,7 @@ export declare const defaultProps: {
|
|
|
31
31
|
children: any;
|
|
32
32
|
};
|
|
33
33
|
declare const Timeline: {
|
|
34
|
-
(localProps: TimelineProps &
|
|
34
|
+
(localProps: TimelineProps & SpacingProps): JSX.Element;
|
|
35
35
|
Item: (localProps: TimelineItemProps) => JSX.Element;
|
|
36
36
|
};
|
|
37
37
|
export { TimelineItem };
|
|
@@ -10,12 +10,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
10
10
|
import React from 'react';
|
|
11
11
|
import classnames from 'classnames';
|
|
12
12
|
import Context from '../../shared/Context';
|
|
13
|
-
import { makeUniqueId, validateDOMAttributes
|
|
13
|
+
import { makeUniqueId, validateDOMAttributes } from '../../shared/component-helper';
|
|
14
14
|
import { createSpacingClasses } from '../space/SpacingHelper';
|
|
15
|
-
import TooltipContainer from './TooltipContainer';
|
|
16
15
|
import TooltipWithEvents from './TooltipWithEvents';
|
|
17
|
-
import
|
|
18
|
-
import { defaultProps, getPropsFromTooltipProp, injectTooltipSemantic } from './TooltipHelpers';
|
|
16
|
+
import { defaultProps, getPropsFromTooltipProp, getRefElement, getTargetElement, injectTooltipSemantic } from './TooltipHelpers';
|
|
19
17
|
import { convertSnakeCaseProps } from '../../shared/helpers/withSnakeCaseProps';
|
|
20
18
|
|
|
21
19
|
function Tooltip(localProps) {
|
|
@@ -44,8 +42,14 @@ function Tooltip(localProps) {
|
|
|
44
42
|
} = props,
|
|
45
43
|
params = _objectWithoutProperties(props, _excluded);
|
|
46
44
|
|
|
45
|
+
const target = targetElement || targetSelector;
|
|
46
|
+
const [element, setElement] = React.useState();
|
|
47
47
|
const [internalId] = React.useState(() => props.id || makeUniqueId());
|
|
48
48
|
props.internalId = internalId;
|
|
49
|
+
React.useEffect(() => {
|
|
50
|
+
const element = getTargetElement(getRefElement(target));
|
|
51
|
+
setElement(element);
|
|
52
|
+
}, [target]);
|
|
49
53
|
const classes = classnames('dnb-tooltip', createSpacingClasses(props), className, size === 'large' && 'dnb-tooltip--large');
|
|
50
54
|
|
|
51
55
|
const attributes = _objectSpread({
|
|
@@ -54,20 +58,14 @@ function Tooltip(localProps) {
|
|
|
54
58
|
|
|
55
59
|
validateDOMAttributes(localProps, attributes);
|
|
56
60
|
|
|
57
|
-
if (!
|
|
58
|
-
|
|
61
|
+
if (target && !element) {
|
|
62
|
+
return null;
|
|
59
63
|
}
|
|
60
64
|
|
|
61
|
-
return React.createElement(
|
|
62
|
-
target:
|
|
65
|
+
return React.createElement(TooltipWithEvents, _extends({
|
|
66
|
+
target: element,
|
|
63
67
|
attributes: attributes
|
|
64
|
-
}, props), props.children)
|
|
65
|
-
target: targetElement,
|
|
66
|
-
attributes: attributes
|
|
67
|
-
}, props), props.children) : targetSelector && React.createElement(TooltipPortal, _extends({
|
|
68
|
-
target: targetSelector,
|
|
69
|
-
attributes: attributes
|
|
70
|
-
}, props), props.children));
|
|
68
|
+
}, props), props.children);
|
|
71
69
|
}
|
|
72
70
|
|
|
73
71
|
export { injectTooltipSemantic };
|
|
@@ -7,7 +7,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
7
7
|
|
|
8
8
|
import React from 'react';
|
|
9
9
|
import { isTrue } from '../../shared/component-helper';
|
|
10
|
-
import { getOffsetLeft } from '../../shared/helpers';
|
|
10
|
+
import { getOffsetLeft, getOffsetTop } from '../../shared/helpers';
|
|
11
11
|
import classnames from 'classnames';
|
|
12
12
|
export default function TooltipContainer(props) {
|
|
13
13
|
const {
|
|
@@ -16,11 +16,16 @@ export default function TooltipContainer(props) {
|
|
|
16
16
|
attributes,
|
|
17
17
|
arrow,
|
|
18
18
|
position,
|
|
19
|
+
align,
|
|
20
|
+
group,
|
|
21
|
+
hideDelay,
|
|
19
22
|
animatePosition,
|
|
20
23
|
fixedPosition,
|
|
21
24
|
noAnimation,
|
|
25
|
+
skipPortal,
|
|
22
26
|
useHover,
|
|
23
|
-
children
|
|
27
|
+
children,
|
|
28
|
+
targetElement: target
|
|
24
29
|
} = props;
|
|
25
30
|
const [style, setStyle] = React.useState(null);
|
|
26
31
|
const [hover, setHover] = React.useState(false);
|
|
@@ -51,7 +56,7 @@ export default function TooltipContainer(props) {
|
|
|
51
56
|
}
|
|
52
57
|
|
|
53
58
|
try {
|
|
54
|
-
resizeObserver.current = new ResizeObserver(
|
|
59
|
+
resizeObserver.current = new ResizeObserver(() => {
|
|
55
60
|
clearTimeout(debounceTimeout.current);
|
|
56
61
|
debounceTimeout.current = setTimeout(() => forceRerender(getBodySize()), 100);
|
|
57
62
|
});
|
|
@@ -75,21 +80,27 @@ export default function TooltipContainer(props) {
|
|
|
75
80
|
|
|
76
81
|
return removePositionObserver;
|
|
77
82
|
}, [isActive]);
|
|
83
|
+
const offsetLeft = React.useRef(0);
|
|
84
|
+
const offsetTop = React.useRef(0);
|
|
78
85
|
React.useLayoutEffect(() => {
|
|
86
|
+
if (!isActive) {
|
|
87
|
+
if (group && wasActive) {
|
|
88
|
+
clearTimeout(debounceTimeout.current);
|
|
89
|
+
debounceTimeout.current = setTimeout(() => setStyle(null), hideDelay);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
79
95
|
const element = elementRef === null || elementRef === void 0 ? void 0 : elementRef.current;
|
|
80
|
-
const {
|
|
81
|
-
targetElement: target,
|
|
82
|
-
align,
|
|
83
|
-
fixedPosition
|
|
84
|
-
} = props;
|
|
85
96
|
|
|
86
97
|
if (typeof window === 'undefined' || !element || !(target !== null && target !== void 0 && target.getBoundingClientRect)) {
|
|
87
98
|
return;
|
|
88
99
|
}
|
|
89
100
|
|
|
101
|
+
let alignOffset = 0;
|
|
90
102
|
const elementWidth = element.offsetWidth;
|
|
91
103
|
const elementHeight = element.offsetHeight;
|
|
92
|
-
let alignOffset = 0;
|
|
93
104
|
const rect = target.getBoundingClientRect();
|
|
94
105
|
const targetBodySize = {
|
|
95
106
|
width: target.offsetWidth,
|
|
@@ -101,13 +112,18 @@ export default function TooltipContainer(props) {
|
|
|
101
112
|
targetBodySize.height = rect.height;
|
|
102
113
|
}
|
|
103
114
|
|
|
115
|
+
if (skipPortal && (!offsetLeft.current || !offsetTop.current)) {
|
|
116
|
+
offsetLeft.current = getOffsetLeft(element) - offset.current;
|
|
117
|
+
offsetTop.current = getOffsetTop(element) - offset.current;
|
|
118
|
+
}
|
|
119
|
+
|
|
104
120
|
const scrollY = window.scrollY !== undefined ? window.scrollY : window.pageYOffset;
|
|
105
121
|
const scrollX = window.scrollX !== undefined ? window.scrollX : window.pageXOffset;
|
|
106
|
-
const top = (isTrue(fixedPosition) ? 0 : scrollY) + rect.top;
|
|
122
|
+
const top = (isTrue(fixedPosition) ? 0 : scrollY) + rect.top - offsetTop.current;
|
|
107
123
|
const useMouseWhen = targetBodySize.width > 400;
|
|
108
124
|
const mousePos = getOffsetLeft(target) + rect.left / 2 + (element ? element.offsetWidth : 0);
|
|
109
125
|
const widthBased = scrollX + rect.left;
|
|
110
|
-
const left = useMouseWhen && mousePos < targetBodySize.width ? mousePos : widthBased;
|
|
126
|
+
const left = (useMouseWhen && mousePos < targetBodySize.width ? mousePos : widthBased) - offsetLeft.current;
|
|
111
127
|
|
|
112
128
|
const style = _objectSpread({}, props.style);
|
|
113
129
|
|
|
@@ -154,9 +170,7 @@ export default function TooltipContainer(props) {
|
|
|
154
170
|
|
|
155
171
|
if (stylesFromPosition[position]) {
|
|
156
172
|
stylesFromPosition[position]();
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
if (stylesFromArrow[arrow]) {
|
|
173
|
+
} else if (stylesFromArrow[arrow]) {
|
|
160
174
|
stylesFromArrow[arrow]();
|
|
161
175
|
}
|
|
162
176
|
|
|
@@ -174,10 +188,8 @@ export default function TooltipContainer(props) {
|
|
|
174
188
|
style.top = 0;
|
|
175
189
|
}
|
|
176
190
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
}, [isActive, arrow, position, children, renewStyles]);
|
|
191
|
+
setStyle(style);
|
|
192
|
+
}, [active, arrow, position, children, renewStyles]);
|
|
181
193
|
|
|
182
194
|
const handleMouseEnter = () => {
|
|
183
195
|
if (isTrue(active) && useHover !== false) {
|
|
@@ -191,12 +203,17 @@ export default function TooltipContainer(props) {
|
|
|
191
203
|
}
|
|
192
204
|
};
|
|
193
205
|
|
|
206
|
+
const handlePropagation = e => e.stopPropagation();
|
|
207
|
+
|
|
194
208
|
return React.createElement("span", _extends({
|
|
195
209
|
role: "tooltip",
|
|
196
|
-
"aria-hidden": true,
|
|
210
|
+
"aria-hidden": target ? true : undefined,
|
|
197
211
|
ref: elementRef,
|
|
198
212
|
onMouseEnter: handleMouseEnter,
|
|
199
|
-
onMouseLeave: handleMouseLeave
|
|
213
|
+
onMouseLeave: handleMouseLeave,
|
|
214
|
+
onMouseMove: handlePropagation,
|
|
215
|
+
onMouseDown: handlePropagation,
|
|
216
|
+
onTouchStart: handlePropagation
|
|
200
217
|
}, attributes, {
|
|
201
218
|
className: classnames(attributes === null || attributes === void 0 ? void 0 : attributes.className, isActive ? 'dnb-tooltip--active' : wasActive && 'dnb-tooltip--hide', isTrue(animatePosition) && 'dnb-tooltip--animate_position', isTrue(noAnimation) && 'dnb-tooltip--no-animation', isTrue(fixedPosition) && 'dnb-tooltip--fixed'),
|
|
202
219
|
style: _objectSpread(_objectSpread({}, style), attributes.style)
|
|
@@ -25,7 +25,7 @@ export declare const defaultProps: {
|
|
|
25
25
|
tooltip: any;
|
|
26
26
|
};
|
|
27
27
|
export declare function getTargetElement(target: HTMLElement): HTMLElement;
|
|
28
|
-
export declare function useHandleAria(targetElement:
|
|
28
|
+
export declare function useHandleAria(targetElement: HTMLElement, internalId: string): void;
|
|
29
29
|
export declare function getPropsFromTooltipProp(localProps: any): any;
|
|
30
30
|
export declare function getRefElement(target: React.RefObject<HTMLElement>): any;
|
|
31
31
|
export declare const isTouch: (type: string) => boolean;
|
|
@@ -34,14 +34,10 @@ export function getTargetElement(target) {
|
|
|
34
34
|
export function useHandleAria(targetElement, internalId) {
|
|
35
35
|
React.useEffect(() => {
|
|
36
36
|
try {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
'aria-describedby': elem.getAttribute('aria-describedby')
|
|
42
|
-
};
|
|
43
|
-
elem.setAttribute('aria-describedby', combineDescribedBy(existing, internalId));
|
|
44
|
-
}
|
|
37
|
+
const existing = {
|
|
38
|
+
'aria-describedby': targetElement.getAttribute('aria-describedby')
|
|
39
|
+
};
|
|
40
|
+
targetElement.setAttribute('aria-describedby', combineDescribedBy(existing, internalId));
|
|
45
41
|
} catch (e) {}
|
|
46
42
|
}, [targetElement, internalId]);
|
|
47
43
|
}
|
|
@@ -60,7 +56,7 @@ export function getRefElement(target) {
|
|
|
60
56
|
element = getRefElement(unknownTarget.current._ref);
|
|
61
57
|
}
|
|
62
58
|
|
|
63
|
-
if (Object.prototype.hasOwnProperty.call(element, 'current')) {
|
|
59
|
+
if (element && Object.prototype.hasOwnProperty.call(element, 'current')) {
|
|
64
60
|
element = element.current;
|
|
65
61
|
}
|
|
66
62
|
|
|
@@ -3,7 +3,6 @@ import React from 'react';
|
|
|
3
3
|
import ReactDOM from 'react-dom';
|
|
4
4
|
import { makeUniqueId, warn } from '../../shared/component-helper';
|
|
5
5
|
import TooltipContainer from './TooltipContainer';
|
|
6
|
-
import { getTargetElement } from './TooltipHelpers';
|
|
7
6
|
let tooltipPortal;
|
|
8
7
|
|
|
9
8
|
if (typeof globalThis !== 'undefined') {
|
|
@@ -16,7 +15,7 @@ if (typeof globalThis !== 'undefined') {
|
|
|
16
15
|
function TooltipPortal(props) {
|
|
17
16
|
const {
|
|
18
17
|
active,
|
|
19
|
-
|
|
18
|
+
targetElement,
|
|
20
19
|
hideDelay,
|
|
21
20
|
keepInDOM,
|
|
22
21
|
noAnimation,
|
|
@@ -24,40 +23,56 @@ function TooltipPortal(props) {
|
|
|
24
23
|
} = props;
|
|
25
24
|
const [isMounted, setIsMounted] = React.useState(false);
|
|
26
25
|
const [isActive, setIsActive] = React.useState(active);
|
|
27
|
-
const [
|
|
26
|
+
const [id] = React.useState(() => props.group || makeUniqueId());
|
|
28
27
|
const isInDOM = React.useRef(false);
|
|
29
28
|
const hasGroup = props.group;
|
|
30
29
|
|
|
31
|
-
if (tooltipPortal[group]) {
|
|
32
|
-
tooltipPortal[group].inDOM = isInDOM.current;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
30
|
const makePortal = () => {
|
|
36
|
-
if (!tooltipPortal[
|
|
37
|
-
tooltipPortal[
|
|
38
|
-
|
|
31
|
+
if (!tooltipPortal[id]) {
|
|
32
|
+
tooltipPortal[id] = {
|
|
33
|
+
count: 0,
|
|
34
|
+
node: hasGroup ? createGroupElement(id) : createRootElement()
|
|
39
35
|
};
|
|
40
36
|
}
|
|
41
37
|
};
|
|
42
38
|
|
|
43
|
-
const removeFromDOM =
|
|
44
|
-
if (
|
|
45
|
-
|
|
39
|
+
const removeFromDOM = hide => {
|
|
40
|
+
if (isActive && hide) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const ref = tooltipPortal[id];
|
|
45
|
+
|
|
46
|
+
if (ref !== null && ref !== void 0 && ref.node) {
|
|
47
|
+
ref.count--;
|
|
48
|
+
|
|
49
|
+
if (ref.count <= 0) {
|
|
50
|
+
if (hasGroup) {
|
|
51
|
+
ReactDOM.unmountComponentAtNode(ref.node);
|
|
52
|
+
createRootElement().removeChild(ref.node);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
delete tooltipPortal[id];
|
|
56
|
+
}
|
|
46
57
|
}
|
|
47
58
|
};
|
|
48
59
|
|
|
49
60
|
React.useEffect(() => {
|
|
50
|
-
var _tooltipPortal$
|
|
61
|
+
var _tooltipPortal$id, _tooltipPortal$id2;
|
|
51
62
|
|
|
52
63
|
setIsMounted(true);
|
|
53
|
-
clearTimeout((_tooltipPortal$
|
|
54
|
-
clearTimeout((_tooltipPortal$
|
|
64
|
+
clearTimeout((_tooltipPortal$id = tooltipPortal[id]) === null || _tooltipPortal$id === void 0 ? void 0 : _tooltipPortal$id.delayTimeout);
|
|
65
|
+
clearTimeout((_tooltipPortal$id2 = tooltipPortal[id]) === null || _tooltipPortal$id2 === void 0 ? void 0 : _tooltipPortal$id2.hiddenTimeout);
|
|
55
66
|
|
|
56
67
|
if (active) {
|
|
57
68
|
makePortal();
|
|
58
69
|
setIsActive(true);
|
|
59
70
|
isInDOM.current = true;
|
|
60
71
|
|
|
72
|
+
if (!isMounted) {
|
|
73
|
+
tooltipPortal[id].count++;
|
|
74
|
+
}
|
|
75
|
+
|
|
61
76
|
if (hasGroup) {
|
|
62
77
|
renderPortal(true);
|
|
63
78
|
}
|
|
@@ -72,19 +87,19 @@ function TooltipPortal(props) {
|
|
|
72
87
|
|
|
73
88
|
const delayHidden = () => {
|
|
74
89
|
isInDOM.current = false;
|
|
75
|
-
removeFromDOM();
|
|
90
|
+
removeFromDOM(true);
|
|
76
91
|
};
|
|
77
92
|
|
|
78
93
|
if (noAnimation || globalThis.IS_TEST) {
|
|
79
94
|
delayRender();
|
|
80
95
|
delayHidden();
|
|
81
|
-
} else if (tooltipPortal[
|
|
96
|
+
} else if (tooltipPortal[id]) {
|
|
82
97
|
const delay = parseFloat(String(hideDelay));
|
|
83
|
-
tooltipPortal[
|
|
84
|
-
tooltipPortal[
|
|
98
|
+
tooltipPortal[id].delayTimeout = setTimeout(delayRender, delay);
|
|
99
|
+
tooltipPortal[id].hiddenTimeout = setTimeout(delayHidden, delay + 300);
|
|
85
100
|
}
|
|
86
101
|
}
|
|
87
|
-
}, [children, active,
|
|
102
|
+
}, [children, active, id, hideDelay, noAnimation]);
|
|
88
103
|
React.useEffect(() => {
|
|
89
104
|
if (keepInDOM) {
|
|
90
105
|
makePortal();
|
|
@@ -94,13 +109,13 @@ function TooltipPortal(props) {
|
|
|
94
109
|
}, []);
|
|
95
110
|
|
|
96
111
|
const renderPortal = isActive => {
|
|
97
|
-
var _tooltipPortal$
|
|
112
|
+
var _tooltipPortal$id3;
|
|
98
113
|
|
|
99
|
-
const root = (_tooltipPortal$
|
|
114
|
+
const root = (_tooltipPortal$id3 = tooltipPortal[id]) === null || _tooltipPortal$id3 === void 0 ? void 0 : _tooltipPortal$id3.node;
|
|
100
115
|
|
|
101
116
|
if (root && hasGroup && isInDOM.current) {
|
|
102
117
|
ReactDOM.render(React.createElement(TooltipContainer, _extends({}, props, {
|
|
103
|
-
targetElement:
|
|
118
|
+
targetElement: targetElement,
|
|
104
119
|
active: isActive
|
|
105
120
|
})), root);
|
|
106
121
|
}
|
|
@@ -109,13 +124,13 @@ function TooltipPortal(props) {
|
|
|
109
124
|
};
|
|
110
125
|
|
|
111
126
|
if (!hasGroup) {
|
|
112
|
-
var _tooltipPortal$
|
|
127
|
+
var _tooltipPortal$id4;
|
|
113
128
|
|
|
114
|
-
const root = (_tooltipPortal$
|
|
129
|
+
const root = (_tooltipPortal$id4 = tooltipPortal[id]) === null || _tooltipPortal$id4 === void 0 ? void 0 : _tooltipPortal$id4.node;
|
|
115
130
|
|
|
116
131
|
if (root) {
|
|
117
132
|
return ReactDOM.createPortal(isInDOM.current || keepInDOM ? React.createElement(TooltipContainer, _extends({}, props, {
|
|
118
|
-
targetElement:
|
|
133
|
+
targetElement: targetElement,
|
|
119
134
|
active: isActive
|
|
120
135
|
}), children) : null, root);
|
|
121
136
|
}
|
|
@@ -131,14 +146,14 @@ const createGroupElement = id => {
|
|
|
131
146
|
const elem = document.createElement('div');
|
|
132
147
|
elem.classList.add('dnb-tooltip__group');
|
|
133
148
|
elem.setAttribute('id', id);
|
|
134
|
-
createRootElement(
|
|
149
|
+
createRootElement().appendChild(elem);
|
|
135
150
|
return elem;
|
|
136
151
|
} catch (e) {
|
|
137
152
|
warn(e);
|
|
138
153
|
}
|
|
139
154
|
};
|
|
140
155
|
|
|
141
|
-
const createRootElement = className => {
|
|
156
|
+
const createRootElement = (className = 'dnb-tooltip__portal') => {
|
|
142
157
|
try {
|
|
143
158
|
const element = document.querySelector(`.${className}`);
|
|
144
159
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
3
3
|
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
4
|
-
const _excluded = ["children"
|
|
4
|
+
const _excluded = ["children"];
|
|
5
5
|
|
|
6
6
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
7
7
|
|
|
@@ -9,29 +9,36 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
9
9
|
|
|
10
10
|
import React from 'react';
|
|
11
11
|
import { combineDescribedBy, warn } from '../../shared/component-helper';
|
|
12
|
+
import TooltipContainer from './TooltipContainer';
|
|
12
13
|
import { getRefElement, injectTooltipSemantic, isTouch, useHandleAria } from './TooltipHelpers';
|
|
13
14
|
import TooltipPortal from './TooltipPortal';
|
|
14
15
|
|
|
15
16
|
function TooltipWithEvents(props) {
|
|
16
17
|
const {
|
|
17
|
-
children
|
|
18
|
-
target
|
|
18
|
+
children
|
|
19
19
|
} = props,
|
|
20
20
|
restProps = _objectWithoutProperties(props, _excluded);
|
|
21
21
|
|
|
22
|
-
const
|
|
22
|
+
const {
|
|
23
|
+
active,
|
|
24
|
+
target,
|
|
25
|
+
skipPortal,
|
|
26
|
+
noAnimation,
|
|
27
|
+
showDelay,
|
|
28
|
+
hideDelay,
|
|
29
|
+
internalId
|
|
30
|
+
} = restProps;
|
|
31
|
+
const [isActive, setIsActive] = React.useState(active);
|
|
23
32
|
const [isNotSemanticElement, setIsNotSemanticElement] = React.useState(false);
|
|
24
|
-
const [isMounted, setIsMounted] = React.useState(
|
|
33
|
+
const [isMounted, setIsMounted] = React.useState(!target);
|
|
25
34
|
const onEnterTimeout = React.useRef();
|
|
26
|
-
const
|
|
35
|
+
const onLeaveTimeout = React.useRef();
|
|
27
36
|
const cloneRef = React.useRef();
|
|
28
|
-
React.
|
|
37
|
+
const targetRef = React.useRef();
|
|
38
|
+
React.useLayoutEffect(() => {
|
|
29
39
|
targetRef.current = getRefElement(cloneRef);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
targetRef.current = target.current;
|
|
33
|
-
}
|
|
34
|
-
|
|
40
|
+
}, [target]);
|
|
41
|
+
React.useLayoutEffect(() => {
|
|
35
42
|
if (targetRef.current) {
|
|
36
43
|
setIsMounted(true);
|
|
37
44
|
addEvents(targetRef.current);
|
|
@@ -39,28 +46,17 @@ function TooltipWithEvents(props) {
|
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
return () => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
try {
|
|
47
|
-
element.removeEventListener('click', onMouseLeave);
|
|
48
|
-
element.removeEventListener('focus', onFocus);
|
|
49
|
-
element.removeEventListener('blur', onMouseLeave);
|
|
50
|
-
element.removeEventListener('mouseenter', onMouseEnter);
|
|
51
|
-
element.removeEventListener('mouseleave', onMouseLeave);
|
|
52
|
-
element.removeEventListener('touchstart', onMouseEnter);
|
|
53
|
-
element.removeEventListener('touchend', onMouseLeave);
|
|
54
|
-
} catch (e) {
|
|
55
|
-
warn(e);
|
|
56
|
-
}
|
|
49
|
+
clearTimers();
|
|
50
|
+
|
|
51
|
+
if (targetRef.current) {
|
|
52
|
+
removeEvents(targetRef.current);
|
|
57
53
|
}
|
|
58
54
|
};
|
|
59
55
|
}, []);
|
|
60
56
|
|
|
61
57
|
const handleSemanticElement = () => {
|
|
62
58
|
try {
|
|
63
|
-
const targetElement = document.querySelector(`*[aria-describedby*="${
|
|
59
|
+
const targetElement = document.querySelector(`*[aria-describedby*="${internalId}"]`);
|
|
64
60
|
|
|
65
61
|
if (targetElement) {
|
|
66
62
|
const role = targetElement.getAttribute('role');
|
|
@@ -89,16 +85,29 @@ function TooltipWithEvents(props) {
|
|
|
89
85
|
}
|
|
90
86
|
};
|
|
91
87
|
|
|
92
|
-
const
|
|
88
|
+
const removeEvents = element => {
|
|
93
89
|
try {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
90
|
+
element.removeEventListener('click', onMouseLeave);
|
|
91
|
+
element.removeEventListener('focus', onFocus);
|
|
92
|
+
element.removeEventListener('blur', onMouseLeave);
|
|
93
|
+
element.removeEventListener('mouseenter', onMouseEnter);
|
|
94
|
+
element.removeEventListener('mouseleave', onMouseLeave);
|
|
95
|
+
element.removeEventListener('touchstart', onMouseEnter);
|
|
96
|
+
element.removeEventListener('touchend', onMouseLeave);
|
|
97
97
|
} catch (e) {
|
|
98
98
|
warn(e);
|
|
99
99
|
}
|
|
100
100
|
};
|
|
101
101
|
|
|
102
|
+
const clearTimers = () => {
|
|
103
|
+
clearTimeout(onEnterTimeout.current);
|
|
104
|
+
clearTimeout(onLeaveTimeout.current);
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const onFocus = e => {
|
|
108
|
+
return onMouseEnter(e);
|
|
109
|
+
};
|
|
110
|
+
|
|
102
111
|
const onMouseEnter = e => {
|
|
103
112
|
try {
|
|
104
113
|
if (isTouch(e.type)) {
|
|
@@ -113,15 +122,19 @@ function TooltipWithEvents(props) {
|
|
|
113
122
|
setIsActive(true);
|
|
114
123
|
};
|
|
115
124
|
|
|
116
|
-
if (
|
|
125
|
+
if (noAnimation || globalThis.IS_TEST) {
|
|
117
126
|
run();
|
|
118
127
|
} else {
|
|
119
|
-
|
|
120
|
-
onEnterTimeout.current = setTimeout(run, parseFloat(String(
|
|
128
|
+
clearTimers();
|
|
129
|
+
onEnterTimeout.current = setTimeout(run, parseFloat(String(showDelay)) || 1);
|
|
121
130
|
}
|
|
122
131
|
};
|
|
123
132
|
|
|
124
133
|
const onMouseLeave = e => {
|
|
134
|
+
if (active) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
125
138
|
try {
|
|
126
139
|
if (isTouch(e.type)) {
|
|
127
140
|
const elem = e.currentTarget;
|
|
@@ -131,8 +144,17 @@ function TooltipWithEvents(props) {
|
|
|
131
144
|
warn(e);
|
|
132
145
|
}
|
|
133
146
|
|
|
134
|
-
|
|
135
|
-
|
|
147
|
+
clearTimers();
|
|
148
|
+
|
|
149
|
+
const run = () => {
|
|
150
|
+
setIsActive(false);
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
if (skipPortal) {
|
|
154
|
+
onLeaveTimeout.current = setTimeout(run, parseFloat(String(hideDelay)));
|
|
155
|
+
} else {
|
|
156
|
+
run();
|
|
157
|
+
}
|
|
136
158
|
};
|
|
137
159
|
|
|
138
160
|
const componentWrapper = React.useMemo(() => {
|
|
@@ -143,19 +165,23 @@ function TooltipWithEvents(props) {
|
|
|
143
165
|
return React.cloneElement(target, _objectSpread(_objectSpread({
|
|
144
166
|
ref: cloneRef
|
|
145
167
|
}, params), {}, {
|
|
146
|
-
'aria-describedby': combineDescribedBy(target.props,
|
|
168
|
+
'aria-describedby': combineDescribedBy(target.props, internalId)
|
|
147
169
|
}));
|
|
170
|
+
} else {
|
|
171
|
+
cloneRef.current = target;
|
|
148
172
|
}
|
|
149
173
|
|
|
150
174
|
return null;
|
|
151
175
|
}, [target]);
|
|
152
|
-
useHandleAria(
|
|
153
|
-
return React.createElement(React.Fragment, null,
|
|
154
|
-
|
|
176
|
+
useHandleAria(targetRef.current, internalId);
|
|
177
|
+
return React.createElement(React.Fragment, null, isMounted && (skipPortal ? React.createElement(TooltipContainer, _extends({}, restProps, {
|
|
178
|
+
active: isActive,
|
|
179
|
+
targetElement: targetRef.current
|
|
180
|
+
}), children) : React.createElement(TooltipPortal, _extends({}, restProps, {
|
|
155
181
|
active: isActive,
|
|
156
|
-
|
|
182
|
+
targetElement: targetRef.current,
|
|
157
183
|
keepInDOM: true
|
|
158
|
-
},
|
|
184
|
+
}), children)), componentWrapper);
|
|
159
185
|
}
|
|
160
186
|
|
|
161
187
|
export default TooltipWithEvents;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { IncludeSnakeCase } from '../../shared/helpers/withSnakeCaseProps';
|
|
3
|
-
import {
|
|
3
|
+
import { SpacingProps } from '../../shared/types';
|
|
4
4
|
export declare type TooltipPosition = 'top' | 'right' | 'bottom' | 'left';
|
|
5
5
|
export declare type TooltipArrow = null | 'center' | 'top' | 'right' | 'bottom' | 'left';
|
|
6
6
|
export declare type TooltipAlign = null | 'center' | 'right' | 'left';
|
|
@@ -24,5 +24,6 @@ export declare type TooltipProps = IncludeSnakeCase<{
|
|
|
24
24
|
tooltip?: React.ReactNode;
|
|
25
25
|
className?: string;
|
|
26
26
|
children?: React.ReactNode;
|
|
27
|
+
style?: React.CSSProperties;
|
|
27
28
|
}>;
|
|
28
|
-
export declare type TooltipAllProps = TooltipProps &
|
|
29
|
+
export declare type TooltipAllProps = TooltipProps & SpacingProps & Omit<React.HTMLProps<HTMLElement>, keyof TooltipProps>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { DynamicElement } from '../../shared/
|
|
2
|
+
import { DynamicElement } from '../../shared/types';
|
|
3
3
|
export interface VisuallyHiddenProps {
|
|
4
4
|
/**
|
|
5
5
|
* The content of the visually hidden element, can be a string or a React Element
|