@redocly/theme 0.1.32 → 0.1.33
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/Tooltip/Tooltip.js +4 -2
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +1 -0
- package/hooks/useOutsideClick.d.ts +2 -0
- package/hooks/useOutsideClick.js +21 -0
- package/package.json +1 -1
- package/src/Tooltip/Tooltip.tsx +6 -3
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useOutsideClick.ts +21 -0
package/Tooltip/Tooltip.js
CHANGED
|
@@ -44,7 +44,9 @@ var styled_components_1 = __importStar(require("styled-components"));
|
|
|
44
44
|
var hooks_1 = require("../hooks");
|
|
45
45
|
function TooltipComponent(_a) {
|
|
46
46
|
var children = _a.children, isOpen = _a.isOpen, tip = _a.tip, _b = _a.withArrow, withArrow = _b === void 0 ? true : _b, _c = _a.placement, placement = _c === void 0 ? 'top' : _c, _d = _a.className, className = _d === void 0 ? 'default' : _d, width = _a.width, dataTestId = _a.dataTestId;
|
|
47
|
+
var ref = (0, react_1.useRef)(null);
|
|
47
48
|
var _e = (0, hooks_1.useControl)(isOpen), isOpened = _e.isOpened, handleOpen = _e.handleOpen, handleClose = _e.handleClose;
|
|
49
|
+
(0, hooks_1.useOutsideClick)(ref, handleClose);
|
|
48
50
|
var isControlled = isOpen !== undefined;
|
|
49
51
|
(0, react_1.useEffect)(function () {
|
|
50
52
|
if (isControlled) {
|
|
@@ -61,7 +63,7 @@ function TooltipComponent(_a) {
|
|
|
61
63
|
onMouseLeave: handleClose,
|
|
62
64
|
onClick: handleClose,
|
|
63
65
|
};
|
|
64
|
-
return (react_1.default.createElement(TooltipWrapper, __assign({}, controllers, { className: "tooltip-".concat(className), "data-component-name": "Tooltip/Tooltip" }),
|
|
66
|
+
return (react_1.default.createElement(TooltipWrapper, __assign({ ref: ref }, controllers, { className: "tooltip-".concat(className), "data-component-name": "Tooltip/Tooltip" }),
|
|
65
67
|
children,
|
|
66
68
|
isOpened && (react_1.default.createElement(TooltipBody, { "data-cy": dataTestId || (typeof tip === 'string' ? tip : ''), placement: placement, width: width, withArrow: withArrow }, tip))));
|
|
67
69
|
}
|
|
@@ -86,7 +88,7 @@ var PLACEMENTS = {
|
|
|
86
88
|
}),
|
|
87
89
|
};
|
|
88
90
|
var TooltipWrapper = styled_components_1.default.div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n position: relative;\n display: inline-block;\n"], ["\n position: relative;\n display: inline-block;\n"])));
|
|
89
|
-
var TooltipBody = styled_components_1.default.span(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n display: inline-block;\n\n position: absolute;\n text-align: center;\n\n padding: 10px 20px;\n max-width: 250px;\n white-space: normal;\n overflow-wrap: break-word;\n\n border-radius: var(--global-border-radius);\n
|
|
91
|
+
var TooltipBody = styled_components_1.default.span(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n display: inline-block;\n\n position: absolute;\n text-align: center;\n\n padding: 10px 20px;\n max-width: 250px;\n white-space: normal;\n overflow-wrap: break-word;\n\n border-radius: var(--global-border-radius);\n transition: opacity 0.3s ease-out;\n\n font-size: 13px;\n\n &::after {\n position: absolute;\n\n content: ' ';\n display: inline-block;\n width: 0;\n height: 0;\n border-color: var(--tooltip-background-color);\n }\n\n background: var(--tooltip-background-color);\n color: var(--tooltip-color);\n box-shadow: rgb(0 0 0 / 25%) 0 2px 4px;\n\n width: ", ";\n ", "\n"], ["\n display: inline-block;\n\n position: absolute;\n text-align: center;\n\n padding: 10px 20px;\n max-width: 250px;\n white-space: normal;\n overflow-wrap: break-word;\n\n border-radius: var(--global-border-radius);\n transition: opacity 0.3s ease-out;\n\n font-size: 13px;\n\n &::after {\n position: absolute;\n\n content: ' ';\n display: inline-block;\n width: 0;\n height: 0;\n border-color: var(--tooltip-background-color);\n }\n\n background: var(--tooltip-background-color);\n color: var(--tooltip-color);\n box-shadow: rgb(0 0 0 / 25%) 0 2px 4px;\n\n width: ", ";\n ", "\n"])), function (_a) {
|
|
90
92
|
var width = _a.width;
|
|
91
93
|
return width || '120px';
|
|
92
94
|
}, function (_a) {
|
package/hooks/index.d.ts
CHANGED
package/hooks/index.js
CHANGED
|
@@ -21,3 +21,4 @@ __exportStar(require("../hooks/useActiveHeading"), exports);
|
|
|
21
21
|
__exportStar(require("../hooks/useActiveSectionId"), exports);
|
|
22
22
|
__exportStar(require("../hooks/useFullHeight"), exports);
|
|
23
23
|
__exportStar(require("../hooks/useNavbarHeight"), exports);
|
|
24
|
+
__exportStar(require("../hooks/useOutsideClick"), exports);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useOutsideClick = void 0;
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
function useOutsideClick(ref, handler) {
|
|
6
|
+
(0, react_1.useEffect)(function () {
|
|
7
|
+
var listener = function (event) {
|
|
8
|
+
if (!ref.current || ref.current.contains(event.target)) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
handler(event);
|
|
12
|
+
};
|
|
13
|
+
document.addEventListener('mousedown', listener);
|
|
14
|
+
document.addEventListener('touchstart', listener);
|
|
15
|
+
return function () {
|
|
16
|
+
document.removeEventListener('mousedown', listener);
|
|
17
|
+
document.removeEventListener('touchstart', listener);
|
|
18
|
+
};
|
|
19
|
+
}, [ref, handler]);
|
|
20
|
+
}
|
|
21
|
+
exports.useOutsideClick = useOutsideClick;
|
package/package.json
CHANGED
package/src/Tooltip/Tooltip.tsx
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { PropsWithChildren, ReactNode } from 'react';
|
|
2
|
-
import React, { useEffect, memo } from 'react';
|
|
2
|
+
import React, { useEffect, memo, useRef } from 'react';
|
|
3
3
|
import styled, { css } from 'styled-components';
|
|
4
4
|
|
|
5
|
-
import { useControl } from '@theme/hooks';
|
|
5
|
+
import { useControl, useOutsideClick } from '@theme/hooks';
|
|
6
6
|
|
|
7
7
|
export interface TooltipProps {
|
|
8
8
|
tip: string | ReactNode;
|
|
@@ -24,8 +24,11 @@ export function TooltipComponent({
|
|
|
24
24
|
width,
|
|
25
25
|
dataTestId,
|
|
26
26
|
}: PropsWithChildren<TooltipProps>): JSX.Element {
|
|
27
|
+
const ref = useRef<HTMLDivElement | null>(null);
|
|
27
28
|
const { isOpened, handleOpen, handleClose } = useControl(isOpen);
|
|
28
29
|
|
|
30
|
+
useOutsideClick(ref, handleClose);
|
|
31
|
+
|
|
29
32
|
const isControlled = isOpen !== undefined;
|
|
30
33
|
|
|
31
34
|
useEffect(() => {
|
|
@@ -46,6 +49,7 @@ export function TooltipComponent({
|
|
|
46
49
|
|
|
47
50
|
return (
|
|
48
51
|
<TooltipWrapper
|
|
52
|
+
ref={ref}
|
|
49
53
|
{...controllers}
|
|
50
54
|
className={`tooltip-${className}`}
|
|
51
55
|
data-component-name="Tooltip/Tooltip"
|
|
@@ -169,7 +173,6 @@ const TooltipBody = styled.span<
|
|
|
169
173
|
overflow-wrap: break-word;
|
|
170
174
|
|
|
171
175
|
border-radius: var(--global-border-radius);
|
|
172
|
-
pointer-events: none;
|
|
173
176
|
transition: opacity 0.3s ease-out;
|
|
174
177
|
|
|
175
178
|
font-size: 13px;
|
package/src/hooks/index.ts
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { MutableRefObject, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
export function useOutsideClick(
|
|
4
|
+
ref: MutableRefObject<HTMLElement | null>,
|
|
5
|
+
handler: (event: MouseEvent | TouchEvent) => void,
|
|
6
|
+
): void {
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
const listener = (event: MouseEvent | TouchEvent) => {
|
|
9
|
+
if (!ref.current || ref.current.contains(event.target as Node)) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
handler(event);
|
|
13
|
+
};
|
|
14
|
+
document.addEventListener('mousedown', listener);
|
|
15
|
+
document.addEventListener('touchstart', listener);
|
|
16
|
+
return () => {
|
|
17
|
+
document.removeEventListener('mousedown', listener);
|
|
18
|
+
document.removeEventListener('touchstart', listener);
|
|
19
|
+
};
|
|
20
|
+
}, [ref, handler]);
|
|
21
|
+
}
|