@metamask-previews/design-system-react 0.24.0-preview.a0fe3894 → 0.25.0-preview.1f40f69f
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 +16 -1
- package/dist/components/AvatarBase/AvatarBase.cjs +1 -1
- package/dist/components/AvatarBase/AvatarBase.cjs.map +1 -1
- package/dist/components/AvatarBase/AvatarBase.mjs +1 -1
- package/dist/components/AvatarBase/AvatarBase.mjs.map +1 -1
- package/dist/components/AvatarFavicon/AvatarFavicon.cjs +1 -1
- package/dist/components/AvatarFavicon/AvatarFavicon.cjs.map +1 -1
- package/dist/components/AvatarFavicon/AvatarFavicon.mjs +1 -1
- package/dist/components/AvatarFavicon/AvatarFavicon.mjs.map +1 -1
- package/dist/components/AvatarNetwork/AvatarNetwork.cjs +1 -1
- package/dist/components/AvatarNetwork/AvatarNetwork.cjs.map +1 -1
- package/dist/components/AvatarNetwork/AvatarNetwork.mjs +1 -1
- package/dist/components/AvatarNetwork/AvatarNetwork.mjs.map +1 -1
- package/dist/components/AvatarToken/AvatarToken.cjs +2 -2
- package/dist/components/AvatarToken/AvatarToken.cjs.map +1 -1
- package/dist/components/AvatarToken/AvatarToken.mjs +2 -2
- package/dist/components/AvatarToken/AvatarToken.mjs.map +1 -1
- package/dist/components/FormTextField/FormTextField.cjs +38 -0
- package/dist/components/FormTextField/FormTextField.cjs.map +1 -0
- package/dist/components/FormTextField/FormTextField.d.cts +4 -0
- package/dist/components/FormTextField/FormTextField.d.cts.map +1 -0
- package/dist/components/FormTextField/FormTextField.d.mts +4 -0
- package/dist/components/FormTextField/FormTextField.d.mts.map +1 -0
- package/dist/components/FormTextField/FormTextField.mjs +19 -0
- package/dist/components/FormTextField/FormTextField.mjs.map +1 -0
- package/dist/components/FormTextField/FormTextField.types.cjs +3 -0
- package/dist/components/FormTextField/FormTextField.types.cjs.map +1 -0
- package/dist/components/FormTextField/FormTextField.types.d.cts +50 -0
- package/dist/components/FormTextField/FormTextField.types.d.cts.map +1 -0
- package/dist/components/FormTextField/FormTextField.types.d.mts +50 -0
- package/dist/components/FormTextField/FormTextField.types.d.mts.map +1 -0
- package/dist/components/FormTextField/FormTextField.types.mjs +2 -0
- package/dist/components/FormTextField/FormTextField.types.mjs.map +1 -0
- package/dist/components/FormTextField/index.cjs +6 -0
- package/dist/components/FormTextField/index.cjs.map +1 -0
- package/dist/components/FormTextField/index.d.cts +3 -0
- package/dist/components/FormTextField/index.d.cts.map +1 -0
- package/dist/components/FormTextField/index.d.mts +3 -0
- package/dist/components/FormTextField/index.d.mts.map +1 -0
- package/dist/components/FormTextField/index.mjs +2 -0
- package/dist/components/FormTextField/index.mjs.map +1 -0
- package/dist/components/Popover/Popover.cjs +129 -0
- package/dist/components/Popover/Popover.cjs.map +1 -0
- package/dist/components/Popover/Popover.constants.cjs +28 -0
- package/dist/components/Popover/Popover.constants.cjs.map +1 -0
- package/dist/components/Popover/Popover.constants.d.cts +12 -0
- package/dist/components/Popover/Popover.constants.d.cts.map +1 -0
- package/dist/components/Popover/Popover.constants.d.mts +12 -0
- package/dist/components/Popover/Popover.constants.d.mts.map +1 -0
- package/dist/components/Popover/Popover.constants.mjs +25 -0
- package/dist/components/Popover/Popover.constants.mjs.map +1 -0
- package/dist/components/Popover/Popover.d.cts +4 -0
- package/dist/components/Popover/Popover.d.cts.map +1 -0
- package/dist/components/Popover/Popover.d.mts +4 -0
- package/dist/components/Popover/Popover.d.mts.map +1 -0
- package/dist/components/Popover/Popover.mjs +110 -0
- package/dist/components/Popover/Popover.mjs.map +1 -0
- package/dist/components/Popover/Popover.types.cjs +33 -0
- package/dist/components/Popover/Popover.types.cjs.map +1 -0
- package/dist/components/Popover/Popover.types.d.cts +128 -0
- package/dist/components/Popover/Popover.types.d.cts.map +1 -0
- package/dist/components/Popover/Popover.types.d.mts +128 -0
- package/dist/components/Popover/Popover.types.d.mts.map +1 -0
- package/dist/components/Popover/Popover.types.mjs +30 -0
- package/dist/components/Popover/Popover.types.mjs.map +1 -0
- package/dist/components/Popover/index.cjs +9 -0
- package/dist/components/Popover/index.cjs.map +1 -0
- package/dist/components/Popover/index.d.cts +4 -0
- package/dist/components/Popover/index.d.cts.map +1 -0
- package/dist/components/Popover/index.d.mts +4 -0
- package/dist/components/Popover/index.d.mts.map +1 -0
- package/dist/components/Popover/index.mjs +3 -0
- package/dist/components/Popover/index.mjs.map +1 -0
- package/dist/components/TextArea/TextArea.cjs +37 -0
- package/dist/components/TextArea/TextArea.cjs.map +1 -0
- package/dist/components/TextArea/TextArea.constants.cjs +35 -0
- package/dist/components/TextArea/TextArea.constants.cjs.map +1 -0
- package/dist/components/TextArea/TextArea.constants.d.cts +28 -0
- package/dist/components/TextArea/TextArea.constants.d.cts.map +1 -0
- package/dist/components/TextArea/TextArea.constants.d.mts +28 -0
- package/dist/components/TextArea/TextArea.constants.d.mts.map +1 -0
- package/dist/components/TextArea/TextArea.constants.mjs +32 -0
- package/dist/components/TextArea/TextArea.constants.mjs.map +1 -0
- package/dist/components/TextArea/TextArea.d.cts +9 -0
- package/dist/components/TextArea/TextArea.d.cts.map +1 -0
- package/dist/components/TextArea/TextArea.d.mts +9 -0
- package/dist/components/TextArea/TextArea.d.mts.map +1 -0
- package/dist/components/TextArea/TextArea.mjs +18 -0
- package/dist/components/TextArea/TextArea.mjs.map +1 -0
- package/dist/components/TextArea/TextArea.types.cjs +3 -0
- package/dist/components/TextArea/TextArea.types.cjs.map +1 -0
- package/dist/components/TextArea/TextArea.types.d.cts +33 -0
- package/dist/components/TextArea/TextArea.types.d.cts.map +1 -0
- package/dist/components/TextArea/TextArea.types.d.mts +33 -0
- package/dist/components/TextArea/TextArea.types.d.mts.map +1 -0
- package/dist/components/TextArea/TextArea.types.mjs +2 -0
- package/dist/components/TextArea/TextArea.types.mjs.map +1 -0
- package/dist/components/TextArea/index.cjs +8 -0
- package/dist/components/TextArea/index.cjs.map +1 -0
- package/dist/components/TextArea/index.d.cts +4 -0
- package/dist/components/TextArea/index.d.cts.map +1 -0
- package/dist/components/TextArea/index.d.mts +4 -0
- package/dist/components/TextArea/index.d.mts.map +1 -0
- package/dist/components/TextArea/index.mjs +3 -0
- package/dist/components/TextArea/index.mjs.map +1 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.cjs +40 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.cjs.map +1 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.d.cts +6 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.d.cts.map +1 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.d.mts +6 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.d.mts.map +1 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.mjs +21 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.mjs.map +1 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.types.cjs +3 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.types.cjs.map +1 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.types.d.cts +17 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.types.d.cts.map +1 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.types.d.mts +17 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.types.d.mts.map +1 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.types.mjs +2 -0
- package/dist/components/TextFieldSearch/TextFieldSearch.types.mjs.map +1 -0
- package/dist/components/TextFieldSearch/index.cjs +6 -0
- package/dist/components/TextFieldSearch/index.cjs.map +1 -0
- package/dist/components/TextFieldSearch/index.d.cts +3 -0
- package/dist/components/TextFieldSearch/index.d.cts.map +1 -0
- package/dist/components/TextFieldSearch/index.d.mts +3 -0
- package/dist/components/TextFieldSearch/index.d.mts.map +1 -0
- package/dist/components/TextFieldSearch/index.mjs +2 -0
- package/dist/components/TextFieldSearch/index.mjs.map +1 -0
- package/dist/components/Toast/Toast.cjs +1 -1
- package/dist/components/Toast/Toast.cjs.map +1 -1
- package/dist/components/Toast/Toast.mjs +1 -1
- package/dist/components/Toast/Toast.mjs.map +1 -1
- package/dist/components/Toast/Toaster.cjs +75 -39
- package/dist/components/Toast/Toaster.cjs.map +1 -1
- package/dist/components/Toast/Toaster.d.cts.map +1 -1
- package/dist/components/Toast/Toaster.d.mts.map +1 -1
- package/dist/components/Toast/Toaster.mjs +76 -40
- package/dist/components/Toast/Toaster.mjs.map +1 -1
- package/dist/components/index.cjs +13 -1
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.cts +8 -0
- package/dist/components/index.d.cts.map +1 -1
- package/dist/components/index.d.mts +8 -0
- package/dist/components/index.d.mts.map +1 -1
- package/dist/components/index.mjs +4 -0
- package/dist/components/index.mjs.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.Popover = void 0;
|
|
27
|
+
const react_dom_1 = require("@floating-ui/react-dom");
|
|
28
|
+
const react_1 = __importStar(require("react"));
|
|
29
|
+
const react_dom_2 = require("react-dom");
|
|
30
|
+
const tw_merge_1 = require("../../utils/tw-merge.cjs");
|
|
31
|
+
const Box_1 = require("../Box/index.cjs");
|
|
32
|
+
const Popover_constants_1 = require("./Popover.constants.cjs");
|
|
33
|
+
const Popover_types_1 = require("./Popover.types.cjs");
|
|
34
|
+
const CAPTURE_EVENT_LISTENER_OPTIONS = { capture: true };
|
|
35
|
+
exports.Popover = (0, react_1.forwardRef)(({ children, className, style, position = Popover_types_1.PopoverPosition.Auto, role = Popover_types_1.PopoverRole.Tooltip, hasArrow = false, matchWidth = false, preventOverflow = false, offset: offsetProp = [0, 8], flip: flipEnabled = false, referenceHidden = true, referenceElement, isOpen, isPortal = false, arrowProps, onClickOutside, onPressEscKey, ...props }, ref) => {
|
|
36
|
+
const arrowRef = (0, react_1.useRef)(null);
|
|
37
|
+
const popoverRef = (0, react_1.useRef)(null);
|
|
38
|
+
const isAuto = position === Popover_types_1.PopoverPosition.Auto;
|
|
39
|
+
const [offsetSkidding, offsetDistance] = offsetProp;
|
|
40
|
+
const middleware = [
|
|
41
|
+
(0, react_dom_1.offset)({ mainAxis: offsetDistance, crossAxis: offsetSkidding }),
|
|
42
|
+
];
|
|
43
|
+
if (isAuto) {
|
|
44
|
+
middleware.push((0, react_dom_1.autoPlacement)());
|
|
45
|
+
}
|
|
46
|
+
else if (flipEnabled) {
|
|
47
|
+
middleware.push((0, react_dom_1.flip)());
|
|
48
|
+
}
|
|
49
|
+
if (isAuto || preventOverflow) {
|
|
50
|
+
middleware.push((0, react_dom_1.shift)());
|
|
51
|
+
}
|
|
52
|
+
if (hasArrow) {
|
|
53
|
+
middleware.push((0, react_dom_1.arrow)({ element: arrowRef }));
|
|
54
|
+
}
|
|
55
|
+
middleware.push((0, react_dom_1.hide)());
|
|
56
|
+
const { refs, floatingStyles, placement, middlewareData } = (0, react_dom_1.useFloating)({
|
|
57
|
+
open: isOpen,
|
|
58
|
+
whileElementsMounted: react_dom_1.autoUpdate,
|
|
59
|
+
placement: isAuto ? 'bottom' : position,
|
|
60
|
+
elements: { reference: referenceElement ?? null },
|
|
61
|
+
middleware,
|
|
62
|
+
});
|
|
63
|
+
(0, react_1.useEffect)(() => {
|
|
64
|
+
if (!isOpen || (!onPressEscKey && !onClickOutside)) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
const handleEscKey = (event) => {
|
|
68
|
+
if (event.key === 'Escape') {
|
|
69
|
+
onPressEscKey?.();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const handleClickOutside = (event) => {
|
|
73
|
+
if (popoverRef.current &&
|
|
74
|
+
!popoverRef.current.contains(event.target) &&
|
|
75
|
+
!referenceElement?.contains(event.target)) {
|
|
76
|
+
onClickOutside?.();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
if (onPressEscKey) {
|
|
80
|
+
document.addEventListener('keydown', handleEscKey, CAPTURE_EVENT_LISTENER_OPTIONS);
|
|
81
|
+
}
|
|
82
|
+
if (onClickOutside) {
|
|
83
|
+
document.addEventListener('click', handleClickOutside, CAPTURE_EVENT_LISTENER_OPTIONS);
|
|
84
|
+
}
|
|
85
|
+
return () => {
|
|
86
|
+
if (onPressEscKey) {
|
|
87
|
+
document.removeEventListener('keydown', handleEscKey, CAPTURE_EVENT_LISTENER_OPTIONS);
|
|
88
|
+
}
|
|
89
|
+
if (onClickOutside) {
|
|
90
|
+
document.removeEventListener('click', handleClickOutside, CAPTURE_EVENT_LISTENER_OPTIONS);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}, [onPressEscKey, isOpen, onClickOutside, referenceElement]);
|
|
94
|
+
if (!isOpen) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
const arrowSide = placement.split('-')[0];
|
|
98
|
+
const arrowPlacementStyle = Popover_constants_1.POPOVER_ARROW_PLACEMENT_STYLES[arrowSide];
|
|
99
|
+
const referenceHiddenValue = Boolean(middlewareData.hide?.referenceHidden);
|
|
100
|
+
const popoverStyle = {
|
|
101
|
+
...floatingStyles,
|
|
102
|
+
width: matchWidth ? referenceElement?.clientWidth : 'auto',
|
|
103
|
+
...style,
|
|
104
|
+
};
|
|
105
|
+
const setPopoverRef = (element) => {
|
|
106
|
+
if (typeof ref === 'function') {
|
|
107
|
+
ref(element);
|
|
108
|
+
}
|
|
109
|
+
else if (ref) {
|
|
110
|
+
ref.current = element;
|
|
111
|
+
}
|
|
112
|
+
refs.setFloating(element);
|
|
113
|
+
popoverRef.current = element;
|
|
114
|
+
};
|
|
115
|
+
const popoverContent = (react_1.default.createElement(Box_1.Box, { backgroundColor: Box_1.BoxBackgroundColor.BackgroundDefault, borderColor: Box_1.BoxBorderColor.BorderMuted, borderWidth: 1, padding: 4, role: role, ref: setPopoverRef, "data-popper-placement": placement, "data-popper-reference-hidden": referenceHiddenValue, className: (0, tw_merge_1.twMerge)('rounded-lg shadow-md', referenceHidden &&
|
|
116
|
+
'data-[popper-reference-hidden=true]:pointer-events-none data-[popper-reference-hidden=true]:invisible', className), ...props, style: popoverStyle },
|
|
117
|
+
children,
|
|
118
|
+
hasArrow && (react_1.default.createElement(Box_1.Box, { "data-testid": "popover-arrow", ...arrowProps, ref: arrowRef, className: (0, tw_merge_1.twMerge)('invisible absolute size-10', arrowProps?.className), style: {
|
|
119
|
+
left: middlewareData.arrow?.x,
|
|
120
|
+
top: middlewareData.arrow?.y,
|
|
121
|
+
...arrowPlacementStyle.container,
|
|
122
|
+
} },
|
|
123
|
+
react_1.default.createElement(Box_1.Box, { backgroundColor: Box_1.BoxBackgroundColor.BackgroundDefault, borderColor: Box_1.BoxBorderColor.BorderMuted, borderWidth: 1, "data-testid": "popover-arrow-visual", className: "visible absolute left-1/2 top-1/2 -ml-1 -mt-1 size-2 rounded-tl-sm border-b-transparent border-r-transparent", style: arrowPlacementStyle.visual })))));
|
|
124
|
+
return isPortal
|
|
125
|
+
? (0, react_dom_2.createPortal)(popoverContent, document.body)
|
|
126
|
+
: popoverContent;
|
|
127
|
+
});
|
|
128
|
+
exports.Popover.displayName = 'Popover';
|
|
129
|
+
//# sourceMappingURL=Popover.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.cjs","sourceRoot":"","sources":["../../../src/components/Popover/Popover.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n arrow,\n autoPlacement,\n autoUpdate,\n flip,\n hide,\n offset,\n shift,\n useFloating,\n} from '@floating-ui/react-dom';\nimport type { Middleware, Placement } from '@floating-ui/react-dom';\nimport React, { forwardRef, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { twMerge } from '../../utils/tw-merge';\nimport { Box, BoxBackgroundColor, BoxBorderColor } from '../Box';\n\nimport { POPOVER_ARROW_PLACEMENT_STYLES } from './Popover.constants';\nimport { PopoverPosition, PopoverRole } from './Popover.types';\nimport type { PopoverProps } from './Popover.types';\n\ntype ArrowPlacementKey = keyof typeof POPOVER_ARROW_PLACEMENT_STYLES;\n\nconst CAPTURE_EVENT_LISTENER_OPTIONS = { capture: true };\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n children,\n className,\n style,\n position = PopoverPosition.Auto,\n role = PopoverRole.Tooltip,\n hasArrow = false,\n matchWidth = false,\n preventOverflow = false,\n offset: offsetProp = [0, 8],\n flip: flipEnabled = false,\n referenceHidden = true,\n referenceElement,\n isOpen,\n isPortal = false,\n arrowProps,\n onClickOutside,\n onPressEscKey,\n ...props\n },\n ref,\n ) => {\n const arrowRef = useRef<HTMLDivElement | null>(null);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n\n const isAuto = position === PopoverPosition.Auto;\n const [offsetSkidding, offsetDistance] = offsetProp;\n\n const middleware: Middleware[] = [\n offset({ mainAxis: offsetDistance, crossAxis: offsetSkidding }),\n ];\n if (isAuto) {\n middleware.push(autoPlacement());\n } else if (flipEnabled) {\n middleware.push(flip());\n }\n if (isAuto || preventOverflow) {\n middleware.push(shift());\n }\n if (hasArrow) {\n middleware.push(arrow({ element: arrowRef }));\n }\n middleware.push(hide());\n\n const { refs, floatingStyles, placement, middlewareData } = useFloating({\n open: isOpen,\n whileElementsMounted: autoUpdate,\n placement: isAuto ? 'bottom' : (position as Placement),\n elements: { reference: referenceElement ?? null },\n middleware,\n });\n\n useEffect(() => {\n if (!isOpen || (!onPressEscKey && !onClickOutside)) {\n return undefined;\n }\n\n const handleEscKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onPressEscKey?.();\n }\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(event.target as Node) &&\n !referenceElement?.contains(event.target as Node)\n ) {\n onClickOutside?.();\n }\n };\n\n if (onPressEscKey) {\n document.addEventListener(\n 'keydown',\n handleEscKey,\n CAPTURE_EVENT_LISTENER_OPTIONS,\n );\n }\n\n if (onClickOutside) {\n document.addEventListener(\n 'click',\n handleClickOutside,\n CAPTURE_EVENT_LISTENER_OPTIONS,\n );\n }\n\n return () => {\n if (onPressEscKey) {\n document.removeEventListener(\n 'keydown',\n handleEscKey,\n CAPTURE_EVENT_LISTENER_OPTIONS,\n );\n }\n\n if (onClickOutside) {\n document.removeEventListener(\n 'click',\n handleClickOutside,\n CAPTURE_EVENT_LISTENER_OPTIONS,\n );\n }\n };\n }, [onPressEscKey, isOpen, onClickOutside, referenceElement]);\n\n if (!isOpen) {\n return null;\n }\n\n const arrowSide = placement.split('-')[0] as ArrowPlacementKey;\n const arrowPlacementStyle = POPOVER_ARROW_PLACEMENT_STYLES[arrowSide];\n const referenceHiddenValue = Boolean(middlewareData.hide?.referenceHidden);\n\n const popoverStyle: React.CSSProperties = {\n ...floatingStyles,\n width: matchWidth ? referenceElement?.clientWidth : 'auto',\n ...style,\n };\n\n const setPopoverRef = (element: HTMLDivElement | null) => {\n if (typeof ref === 'function') {\n ref(element);\n } else if (ref) {\n ref.current = element;\n }\n refs.setFloating(element);\n popoverRef.current = element;\n };\n\n const popoverContent = (\n <Box\n backgroundColor={BoxBackgroundColor.BackgroundDefault}\n borderColor={BoxBorderColor.BorderMuted}\n borderWidth={1}\n padding={4}\n role={role}\n ref={setPopoverRef}\n data-popper-placement={placement}\n data-popper-reference-hidden={referenceHiddenValue}\n className={twMerge(\n 'rounded-lg shadow-md',\n referenceHidden &&\n 'data-[popper-reference-hidden=true]:pointer-events-none data-[popper-reference-hidden=true]:invisible',\n className,\n )}\n {...props}\n style={popoverStyle}\n >\n {children}\n {hasArrow && (\n <Box\n data-testid=\"popover-arrow\"\n {...arrowProps}\n ref={arrowRef}\n className={twMerge(\n 'invisible absolute size-10',\n arrowProps?.className,\n )}\n style={{\n left: middlewareData.arrow?.x,\n top: middlewareData.arrow?.y,\n ...arrowPlacementStyle.container,\n }}\n >\n <Box\n backgroundColor={BoxBackgroundColor.BackgroundDefault}\n borderColor={BoxBorderColor.BorderMuted}\n borderWidth={1}\n data-testid=\"popover-arrow-visual\"\n className=\"visible absolute left-1/2 top-1/2 -ml-1 -mt-1 size-2 rounded-tl-sm border-b-transparent border-r-transparent\"\n style={arrowPlacementStyle.visual}\n />\n </Box>\n )}\n </Box>\n );\n\n return isPortal\n ? createPortal(popoverContent, document.body)\n : popoverContent;\n },\n);\n\nPopover.displayName = 'Popover';\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POPOVER_ARROW_PLACEMENT_STYLES = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Per-placement offsets and rotations applied on top of `react-popper`'s
|
|
6
|
+
* computed arrow position. Keys are the leading segment of
|
|
7
|
+
* `data-popper-placement` (`'top'`, `'top-start'`, etc. all share the same
|
|
8
|
+
* offset/rotation).
|
|
9
|
+
*/
|
|
10
|
+
exports.POPOVER_ARROW_PLACEMENT_STYLES = {
|
|
11
|
+
top: {
|
|
12
|
+
container: { bottom: -20 },
|
|
13
|
+
visual: { transform: 'rotate(-135deg)' },
|
|
14
|
+
},
|
|
15
|
+
bottom: {
|
|
16
|
+
container: { top: -20 },
|
|
17
|
+
visual: { transform: 'rotate(45deg)' },
|
|
18
|
+
},
|
|
19
|
+
left: {
|
|
20
|
+
container: { right: -20 },
|
|
21
|
+
visual: { transform: 'rotate(135deg)' },
|
|
22
|
+
},
|
|
23
|
+
right: {
|
|
24
|
+
container: { left: -20 },
|
|
25
|
+
visual: { transform: 'rotate(-45deg)' },
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=Popover.constants.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.constants.cjs","sourceRoot":"","sources":["../../../src/components/Popover/Popover.constants.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACU,QAAA,8BAA8B,GAGvC;IACF,GAAG,EAAE;QACH,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;KACzC;IACD,MAAM,EAAE;QACN,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE;KACvC;IACD,IAAI,EAAE;QACJ,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;KACxC;IACD,KAAK,EAAE;QACL,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;KACxC;CACF,CAAC","sourcesContent":["import type { CSSProperties } from 'react';\n\n/**\n * Per-placement offsets and rotations applied on top of `react-popper`'s\n * computed arrow position. Keys are the leading segment of\n * `data-popper-placement` (`'top'`, `'top-start'`, etc. all share the same\n * offset/rotation).\n */\nexport const POPOVER_ARROW_PLACEMENT_STYLES: Record<\n 'top' | 'bottom' | 'left' | 'right',\n { container: CSSProperties; visual: CSSProperties }\n> = {\n top: {\n container: { bottom: -20 },\n visual: { transform: 'rotate(-135deg)' },\n },\n bottom: {\n container: { top: -20 },\n visual: { transform: 'rotate(45deg)' },\n },\n left: {\n container: { right: -20 },\n visual: { transform: 'rotate(135deg)' },\n },\n right: {\n container: { left: -20 },\n visual: { transform: 'rotate(-45deg)' },\n },\n};\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Per-placement offsets and rotations applied on top of `react-popper`'s
|
|
4
|
+
* computed arrow position. Keys are the leading segment of
|
|
5
|
+
* `data-popper-placement` (`'top'`, `'top-start'`, etc. all share the same
|
|
6
|
+
* offset/rotation).
|
|
7
|
+
*/
|
|
8
|
+
export declare const POPOVER_ARROW_PLACEMENT_STYLES: Record<'top' | 'bottom' | 'left' | 'right', {
|
|
9
|
+
container: CSSProperties;
|
|
10
|
+
visual: CSSProperties;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=Popover.constants.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.constants.d.cts","sourceRoot":"","sources":["../../../src/components/Popover/Popover.constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,CACjD,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,EACnC;IAAE,SAAS,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAkBpD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Per-placement offsets and rotations applied on top of `react-popper`'s
|
|
4
|
+
* computed arrow position. Keys are the leading segment of
|
|
5
|
+
* `data-popper-placement` (`'top'`, `'top-start'`, etc. all share the same
|
|
6
|
+
* offset/rotation).
|
|
7
|
+
*/
|
|
8
|
+
export declare const POPOVER_ARROW_PLACEMENT_STYLES: Record<'top' | 'bottom' | 'left' | 'right', {
|
|
9
|
+
container: CSSProperties;
|
|
10
|
+
visual: CSSProperties;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=Popover.constants.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.constants.d.mts","sourceRoot":"","sources":["../../../src/components/Popover/Popover.constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,MAAM,CACjD,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,EACnC;IAAE,SAAS,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAkBpD,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-placement offsets and rotations applied on top of `react-popper`'s
|
|
3
|
+
* computed arrow position. Keys are the leading segment of
|
|
4
|
+
* `data-popper-placement` (`'top'`, `'top-start'`, etc. all share the same
|
|
5
|
+
* offset/rotation).
|
|
6
|
+
*/
|
|
7
|
+
export const POPOVER_ARROW_PLACEMENT_STYLES = {
|
|
8
|
+
top: {
|
|
9
|
+
container: { bottom: -20 },
|
|
10
|
+
visual: { transform: 'rotate(-135deg)' },
|
|
11
|
+
},
|
|
12
|
+
bottom: {
|
|
13
|
+
container: { top: -20 },
|
|
14
|
+
visual: { transform: 'rotate(45deg)' },
|
|
15
|
+
},
|
|
16
|
+
left: {
|
|
17
|
+
container: { right: -20 },
|
|
18
|
+
visual: { transform: 'rotate(135deg)' },
|
|
19
|
+
},
|
|
20
|
+
right: {
|
|
21
|
+
container: { left: -20 },
|
|
22
|
+
visual: { transform: 'rotate(-45deg)' },
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=Popover.constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.constants.mjs","sourceRoot":"","sources":["../../../src/components/Popover/Popover.constants.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAGvC;IACF,GAAG,EAAE;QACH,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;KACzC;IACD,MAAM,EAAE;QACN,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE;KACvC;IACD,IAAI,EAAE;QACJ,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;KACxC;IACD,KAAK,EAAE;QACL,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;KACxC;CACF,CAAC","sourcesContent":["import type { CSSProperties } from 'react';\n\n/**\n * Per-placement offsets and rotations applied on top of `react-popper`'s\n * computed arrow position. Keys are the leading segment of\n * `data-popper-placement` (`'top'`, `'top-start'`, etc. all share the same\n * offset/rotation).\n */\nexport const POPOVER_ARROW_PLACEMENT_STYLES: Record<\n 'top' | 'bottom' | 'left' | 'right',\n { container: CSSProperties; visual: CSSProperties }\n> = {\n top: {\n container: { bottom: -20 },\n visual: { transform: 'rotate(-135deg)' },\n },\n bottom: {\n container: { top: -20 },\n visual: { transform: 'rotate(45deg)' },\n },\n left: {\n container: { right: -20 },\n visual: { transform: 'rotate(135deg)' },\n },\n right: {\n container: { left: -20 },\n visual: { transform: 'rotate(-45deg)' },\n },\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.d.cts","sourceRoot":"","sources":["../../../src/components/Popover/Popover.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAwC,cAAc;AAQ7D,OAAO,KAAK,EAAE,YAAY,EAAE,4BAAwB;AAMpD,eAAO,MAAM,OAAO,kGA0LnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.d.mts","sourceRoot":"","sources":["../../../src/components/Popover/Popover.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAwC,cAAc;AAQ7D,OAAO,KAAK,EAAE,YAAY,EAAE,4BAAwB;AAMpD,eAAO,MAAM,OAAO,kGA0LnB,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
function $importDefault(module) {
|
|
2
|
+
if (module?.__esModule) {
|
|
3
|
+
return module.default;
|
|
4
|
+
}
|
|
5
|
+
return module;
|
|
6
|
+
}
|
|
7
|
+
import { arrow, autoPlacement, autoUpdate, flip, hide, offset, shift, useFloating } from "@floating-ui/react-dom";
|
|
8
|
+
import $React, { forwardRef, useEffect, useRef } from "react";
|
|
9
|
+
const React = $importDefault($React);
|
|
10
|
+
import { createPortal } from "react-dom";
|
|
11
|
+
import { twMerge } from "../../utils/tw-merge.mjs";
|
|
12
|
+
import { Box, BoxBackgroundColor, BoxBorderColor } from "../Box/index.mjs";
|
|
13
|
+
import { POPOVER_ARROW_PLACEMENT_STYLES } from "./Popover.constants.mjs";
|
|
14
|
+
import { PopoverPosition, PopoverRole } from "./Popover.types.mjs";
|
|
15
|
+
const CAPTURE_EVENT_LISTENER_OPTIONS = { capture: true };
|
|
16
|
+
export const Popover = forwardRef(({ children, className, style, position = PopoverPosition.Auto, role = PopoverRole.Tooltip, hasArrow = false, matchWidth = false, preventOverflow = false, offset: offsetProp = [0, 8], flip: flipEnabled = false, referenceHidden = true, referenceElement, isOpen, isPortal = false, arrowProps, onClickOutside, onPressEscKey, ...props }, ref) => {
|
|
17
|
+
const arrowRef = useRef(null);
|
|
18
|
+
const popoverRef = useRef(null);
|
|
19
|
+
const isAuto = position === PopoverPosition.Auto;
|
|
20
|
+
const [offsetSkidding, offsetDistance] = offsetProp;
|
|
21
|
+
const middleware = [
|
|
22
|
+
offset({ mainAxis: offsetDistance, crossAxis: offsetSkidding }),
|
|
23
|
+
];
|
|
24
|
+
if (isAuto) {
|
|
25
|
+
middleware.push(autoPlacement());
|
|
26
|
+
}
|
|
27
|
+
else if (flipEnabled) {
|
|
28
|
+
middleware.push(flip());
|
|
29
|
+
}
|
|
30
|
+
if (isAuto || preventOverflow) {
|
|
31
|
+
middleware.push(shift());
|
|
32
|
+
}
|
|
33
|
+
if (hasArrow) {
|
|
34
|
+
middleware.push(arrow({ element: arrowRef }));
|
|
35
|
+
}
|
|
36
|
+
middleware.push(hide());
|
|
37
|
+
const { refs, floatingStyles, placement, middlewareData } = useFloating({
|
|
38
|
+
open: isOpen,
|
|
39
|
+
whileElementsMounted: autoUpdate,
|
|
40
|
+
placement: isAuto ? 'bottom' : position,
|
|
41
|
+
elements: { reference: referenceElement ?? null },
|
|
42
|
+
middleware,
|
|
43
|
+
});
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (!isOpen || (!onPressEscKey && !onClickOutside)) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const handleEscKey = (event) => {
|
|
49
|
+
if (event.key === 'Escape') {
|
|
50
|
+
onPressEscKey?.();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const handleClickOutside = (event) => {
|
|
54
|
+
if (popoverRef.current &&
|
|
55
|
+
!popoverRef.current.contains(event.target) &&
|
|
56
|
+
!referenceElement?.contains(event.target)) {
|
|
57
|
+
onClickOutside?.();
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
if (onPressEscKey) {
|
|
61
|
+
document.addEventListener('keydown', handleEscKey, CAPTURE_EVENT_LISTENER_OPTIONS);
|
|
62
|
+
}
|
|
63
|
+
if (onClickOutside) {
|
|
64
|
+
document.addEventListener('click', handleClickOutside, CAPTURE_EVENT_LISTENER_OPTIONS);
|
|
65
|
+
}
|
|
66
|
+
return () => {
|
|
67
|
+
if (onPressEscKey) {
|
|
68
|
+
document.removeEventListener('keydown', handleEscKey, CAPTURE_EVENT_LISTENER_OPTIONS);
|
|
69
|
+
}
|
|
70
|
+
if (onClickOutside) {
|
|
71
|
+
document.removeEventListener('click', handleClickOutside, CAPTURE_EVENT_LISTENER_OPTIONS);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}, [onPressEscKey, isOpen, onClickOutside, referenceElement]);
|
|
75
|
+
if (!isOpen) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
const arrowSide = placement.split('-')[0];
|
|
79
|
+
const arrowPlacementStyle = POPOVER_ARROW_PLACEMENT_STYLES[arrowSide];
|
|
80
|
+
const referenceHiddenValue = Boolean(middlewareData.hide?.referenceHidden);
|
|
81
|
+
const popoverStyle = {
|
|
82
|
+
...floatingStyles,
|
|
83
|
+
width: matchWidth ? referenceElement?.clientWidth : 'auto',
|
|
84
|
+
...style,
|
|
85
|
+
};
|
|
86
|
+
const setPopoverRef = (element) => {
|
|
87
|
+
if (typeof ref === 'function') {
|
|
88
|
+
ref(element);
|
|
89
|
+
}
|
|
90
|
+
else if (ref) {
|
|
91
|
+
ref.current = element;
|
|
92
|
+
}
|
|
93
|
+
refs.setFloating(element);
|
|
94
|
+
popoverRef.current = element;
|
|
95
|
+
};
|
|
96
|
+
const popoverContent = (React.createElement(Box, { backgroundColor: BoxBackgroundColor.BackgroundDefault, borderColor: BoxBorderColor.BorderMuted, borderWidth: 1, padding: 4, role: role, ref: setPopoverRef, "data-popper-placement": placement, "data-popper-reference-hidden": referenceHiddenValue, className: twMerge('rounded-lg shadow-md', referenceHidden &&
|
|
97
|
+
'data-[popper-reference-hidden=true]:pointer-events-none data-[popper-reference-hidden=true]:invisible', className), ...props, style: popoverStyle },
|
|
98
|
+
children,
|
|
99
|
+
hasArrow && (React.createElement(Box, { "data-testid": "popover-arrow", ...arrowProps, ref: arrowRef, className: twMerge('invisible absolute size-10', arrowProps?.className), style: {
|
|
100
|
+
left: middlewareData.arrow?.x,
|
|
101
|
+
top: middlewareData.arrow?.y,
|
|
102
|
+
...arrowPlacementStyle.container,
|
|
103
|
+
} },
|
|
104
|
+
React.createElement(Box, { backgroundColor: BoxBackgroundColor.BackgroundDefault, borderColor: BoxBorderColor.BorderMuted, borderWidth: 1, "data-testid": "popover-arrow-visual", className: "visible absolute left-1/2 top-1/2 -ml-1 -mt-1 size-2 rounded-tl-sm border-b-transparent border-r-transparent", style: arrowPlacementStyle.visual })))));
|
|
105
|
+
return isPortal
|
|
106
|
+
? createPortal(popoverContent, document.body)
|
|
107
|
+
: popoverContent;
|
|
108
|
+
});
|
|
109
|
+
Popover.displayName = 'Popover';
|
|
110
|
+
//# sourceMappingURL=Popover.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.mjs","sourceRoot":"","sources":["../../../src/components/Popover/Popover.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n arrow,\n autoPlacement,\n autoUpdate,\n flip,\n hide,\n offset,\n shift,\n useFloating,\n} from '@floating-ui/react-dom';\nimport type { Middleware, Placement } from '@floating-ui/react-dom';\nimport React, { forwardRef, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { twMerge } from '../../utils/tw-merge';\nimport { Box, BoxBackgroundColor, BoxBorderColor } from '../Box';\n\nimport { POPOVER_ARROW_PLACEMENT_STYLES } from './Popover.constants';\nimport { PopoverPosition, PopoverRole } from './Popover.types';\nimport type { PopoverProps } from './Popover.types';\n\ntype ArrowPlacementKey = keyof typeof POPOVER_ARROW_PLACEMENT_STYLES;\n\nconst CAPTURE_EVENT_LISTENER_OPTIONS = { capture: true };\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n children,\n className,\n style,\n position = PopoverPosition.Auto,\n role = PopoverRole.Tooltip,\n hasArrow = false,\n matchWidth = false,\n preventOverflow = false,\n offset: offsetProp = [0, 8],\n flip: flipEnabled = false,\n referenceHidden = true,\n referenceElement,\n isOpen,\n isPortal = false,\n arrowProps,\n onClickOutside,\n onPressEscKey,\n ...props\n },\n ref,\n ) => {\n const arrowRef = useRef<HTMLDivElement | null>(null);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n\n const isAuto = position === PopoverPosition.Auto;\n const [offsetSkidding, offsetDistance] = offsetProp;\n\n const middleware: Middleware[] = [\n offset({ mainAxis: offsetDistance, crossAxis: offsetSkidding }),\n ];\n if (isAuto) {\n middleware.push(autoPlacement());\n } else if (flipEnabled) {\n middleware.push(flip());\n }\n if (isAuto || preventOverflow) {\n middleware.push(shift());\n }\n if (hasArrow) {\n middleware.push(arrow({ element: arrowRef }));\n }\n middleware.push(hide());\n\n const { refs, floatingStyles, placement, middlewareData } = useFloating({\n open: isOpen,\n whileElementsMounted: autoUpdate,\n placement: isAuto ? 'bottom' : (position as Placement),\n elements: { reference: referenceElement ?? null },\n middleware,\n });\n\n useEffect(() => {\n if (!isOpen || (!onPressEscKey && !onClickOutside)) {\n return undefined;\n }\n\n const handleEscKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onPressEscKey?.();\n }\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(event.target as Node) &&\n !referenceElement?.contains(event.target as Node)\n ) {\n onClickOutside?.();\n }\n };\n\n if (onPressEscKey) {\n document.addEventListener(\n 'keydown',\n handleEscKey,\n CAPTURE_EVENT_LISTENER_OPTIONS,\n );\n }\n\n if (onClickOutside) {\n document.addEventListener(\n 'click',\n handleClickOutside,\n CAPTURE_EVENT_LISTENER_OPTIONS,\n );\n }\n\n return () => {\n if (onPressEscKey) {\n document.removeEventListener(\n 'keydown',\n handleEscKey,\n CAPTURE_EVENT_LISTENER_OPTIONS,\n );\n }\n\n if (onClickOutside) {\n document.removeEventListener(\n 'click',\n handleClickOutside,\n CAPTURE_EVENT_LISTENER_OPTIONS,\n );\n }\n };\n }, [onPressEscKey, isOpen, onClickOutside, referenceElement]);\n\n if (!isOpen) {\n return null;\n }\n\n const arrowSide = placement.split('-')[0] as ArrowPlacementKey;\n const arrowPlacementStyle = POPOVER_ARROW_PLACEMENT_STYLES[arrowSide];\n const referenceHiddenValue = Boolean(middlewareData.hide?.referenceHidden);\n\n const popoverStyle: React.CSSProperties = {\n ...floatingStyles,\n width: matchWidth ? referenceElement?.clientWidth : 'auto',\n ...style,\n };\n\n const setPopoverRef = (element: HTMLDivElement | null) => {\n if (typeof ref === 'function') {\n ref(element);\n } else if (ref) {\n ref.current = element;\n }\n refs.setFloating(element);\n popoverRef.current = element;\n };\n\n const popoverContent = (\n <Box\n backgroundColor={BoxBackgroundColor.BackgroundDefault}\n borderColor={BoxBorderColor.BorderMuted}\n borderWidth={1}\n padding={4}\n role={role}\n ref={setPopoverRef}\n data-popper-placement={placement}\n data-popper-reference-hidden={referenceHiddenValue}\n className={twMerge(\n 'rounded-lg shadow-md',\n referenceHidden &&\n 'data-[popper-reference-hidden=true]:pointer-events-none data-[popper-reference-hidden=true]:invisible',\n className,\n )}\n {...props}\n style={popoverStyle}\n >\n {children}\n {hasArrow && (\n <Box\n data-testid=\"popover-arrow\"\n {...arrowProps}\n ref={arrowRef}\n className={twMerge(\n 'invisible absolute size-10',\n arrowProps?.className,\n )}\n style={{\n left: middlewareData.arrow?.x,\n top: middlewareData.arrow?.y,\n ...arrowPlacementStyle.container,\n }}\n >\n <Box\n backgroundColor={BoxBackgroundColor.BackgroundDefault}\n borderColor={BoxBorderColor.BorderMuted}\n borderWidth={1}\n data-testid=\"popover-arrow-visual\"\n className=\"visible absolute left-1/2 top-1/2 -ml-1 -mt-1 size-2 rounded-tl-sm border-b-transparent border-r-transparent\"\n style={arrowPlacementStyle.visual}\n />\n </Box>\n )}\n </Box>\n );\n\n return isPortal\n ? createPortal(popoverContent, document.body)\n : popoverContent;\n },\n);\n\nPopover.displayName = 'Popover';\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PopoverRole = exports.PopoverPosition = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Popover - placement of the floating element relative to the reference element.
|
|
6
|
+
* Mirrors the placements supported by `react-popper` (`Auto` enables both
|
|
7
|
+
* `flip` and `preventOverflow` automatically).
|
|
8
|
+
*/
|
|
9
|
+
exports.PopoverPosition = {
|
|
10
|
+
Auto: 'auto',
|
|
11
|
+
Top: 'top',
|
|
12
|
+
TopStart: 'top-start',
|
|
13
|
+
TopEnd: 'top-end',
|
|
14
|
+
Right: 'right',
|
|
15
|
+
RightStart: 'right-start',
|
|
16
|
+
RightEnd: 'right-end',
|
|
17
|
+
Bottom: 'bottom',
|
|
18
|
+
BottomStart: 'bottom-start',
|
|
19
|
+
BottomEnd: 'bottom-end',
|
|
20
|
+
Left: 'left',
|
|
21
|
+
LeftStart: 'left-start',
|
|
22
|
+
LeftEnd: 'left-end',
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Popover - ARIA role for the floating element.
|
|
26
|
+
* Use `Dialog` when the contents are interactive, `Tooltip` for purely
|
|
27
|
+
* informational content.
|
|
28
|
+
*/
|
|
29
|
+
exports.PopoverRole = {
|
|
30
|
+
Tooltip: 'tooltip',
|
|
31
|
+
Dialog: 'dialog',
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=Popover.types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.types.cjs","sourceRoot":"","sources":["../../../src/components/Popover/Popover.types.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACU,QAAA,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,aAAa;IACzB,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,cAAc;IAC3B,SAAS,EAAE,YAAY;IACvB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,UAAU;CACX,CAAC;AAIX;;;;GAIG;AACU,QAAA,WAAW,GAAG;IACzB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACR,CAAC","sourcesContent":["import type { ComponentProps, CSSProperties, ReactNode } from 'react';\n\n/**\n * Popover - placement of the floating element relative to the reference element.\n * Mirrors the placements supported by `react-popper` (`Auto` enables both\n * `flip` and `preventOverflow` automatically).\n */\nexport const PopoverPosition = {\n Auto: 'auto',\n Top: 'top',\n TopStart: 'top-start',\n TopEnd: 'top-end',\n Right: 'right',\n RightStart: 'right-start',\n RightEnd: 'right-end',\n Bottom: 'bottom',\n BottomStart: 'bottom-start',\n BottomEnd: 'bottom-end',\n Left: 'left',\n LeftStart: 'left-start',\n LeftEnd: 'left-end',\n} as const;\nexport type PopoverPosition =\n (typeof PopoverPosition)[keyof typeof PopoverPosition];\n\n/**\n * Popover - ARIA role for the floating element.\n * Use `Dialog` when the contents are interactive, `Tooltip` for purely\n * informational content.\n */\nexport const PopoverRole = {\n Tooltip: 'tooltip',\n Dialog: 'dialog',\n} as const;\nexport type PopoverRole = (typeof PopoverRole)[keyof typeof PopoverRole];\n\nexport type PopoverProps = Omit<ComponentProps<'div'>, 'role'> & {\n /**\n * The contents of the Popover.\n */\n children?: ReactNode;\n /**\n * Additional class names to merge onto the Popover root.\n */\n className?: string;\n /**\n * Inline styles applied to the Popover root. Merged after the styles\n * computed by `react-popper`.\n */\n style?: CSSProperties;\n /**\n * Placement relative to `referenceElement`. When `PopoverPosition.Auto`,\n * `flip` and `preventOverflow` are forced on regardless of their props.\n *\n * @default PopoverPosition.Auto\n */\n position?: PopoverPosition;\n /**\n * ARIA role applied to the Popover root.\n *\n * @default PopoverRole.Tooltip\n */\n role?: PopoverRole;\n /**\n * Render an arrow pointing at the reference element.\n *\n * @default false\n */\n hasArrow?: boolean;\n /**\n * Props forwarded to the arrow element. `ref`, `style`, and `children` are\n * reserved for internal use (popper positioning, rotation styles, and the\n * arrow visual) and cannot be overridden.\n */\n arrowProps?: Omit<ComponentProps<'div'>, 'ref' | 'style' | 'children'>;\n /**\n * Match the popover width to the reference element's `clientWidth`.\n *\n * @default false\n */\n matchWidth?: boolean;\n /**\n * Keep the Popover within the viewport. Forced on when\n * `position === PopoverPosition.Auto`.\n *\n * @default false\n */\n preventOverflow?: boolean;\n /**\n * Allow flipping to the opposite side when there is not enough space.\n * Forced on when `position === PopoverPosition.Auto`.\n *\n * @default false\n */\n flip?: boolean;\n /**\n * Hide the Popover when the reference element is scrolled out of view.\n *\n * @default true\n */\n referenceHidden?: boolean;\n /**\n * The element the Popover is positioned against.\n */\n referenceElement?: HTMLElement | null;\n /**\n * Whether the Popover is open. Nothing is rendered when `false`.\n */\n isOpen?: boolean;\n /**\n * `[skidding, distance]` offset (in px) applied to the Popover.\n *\n * @default [0, 8]\n */\n offset?: [number, number];\n /**\n * Render the Popover into `document.body` via `createPortal`.\n *\n * @default false\n */\n isPortal?: boolean;\n /**\n * Called when the user presses the Escape key while the Popover is open.\n */\n onPressEscKey?: () => void;\n /**\n * Called when the user clicks outside the Popover and the reference element\n * while the Popover is open.\n */\n onClickOutside?: () => void;\n};\n"]}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type { ComponentProps, CSSProperties, ReactNode } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Popover - placement of the floating element relative to the reference element.
|
|
4
|
+
* Mirrors the placements supported by `react-popper` (`Auto` enables both
|
|
5
|
+
* `flip` and `preventOverflow` automatically).
|
|
6
|
+
*/
|
|
7
|
+
export declare const PopoverPosition: {
|
|
8
|
+
readonly Auto: "auto";
|
|
9
|
+
readonly Top: "top";
|
|
10
|
+
readonly TopStart: "top-start";
|
|
11
|
+
readonly TopEnd: "top-end";
|
|
12
|
+
readonly Right: "right";
|
|
13
|
+
readonly RightStart: "right-start";
|
|
14
|
+
readonly RightEnd: "right-end";
|
|
15
|
+
readonly Bottom: "bottom";
|
|
16
|
+
readonly BottomStart: "bottom-start";
|
|
17
|
+
readonly BottomEnd: "bottom-end";
|
|
18
|
+
readonly Left: "left";
|
|
19
|
+
readonly LeftStart: "left-start";
|
|
20
|
+
readonly LeftEnd: "left-end";
|
|
21
|
+
};
|
|
22
|
+
export type PopoverPosition = (typeof PopoverPosition)[keyof typeof PopoverPosition];
|
|
23
|
+
/**
|
|
24
|
+
* Popover - ARIA role for the floating element.
|
|
25
|
+
* Use `Dialog` when the contents are interactive, `Tooltip` for purely
|
|
26
|
+
* informational content.
|
|
27
|
+
*/
|
|
28
|
+
export declare const PopoverRole: {
|
|
29
|
+
readonly Tooltip: "tooltip";
|
|
30
|
+
readonly Dialog: "dialog";
|
|
31
|
+
};
|
|
32
|
+
export type PopoverRole = (typeof PopoverRole)[keyof typeof PopoverRole];
|
|
33
|
+
export type PopoverProps = Omit<ComponentProps<'div'>, 'role'> & {
|
|
34
|
+
/**
|
|
35
|
+
* The contents of the Popover.
|
|
36
|
+
*/
|
|
37
|
+
children?: ReactNode;
|
|
38
|
+
/**
|
|
39
|
+
* Additional class names to merge onto the Popover root.
|
|
40
|
+
*/
|
|
41
|
+
className?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Inline styles applied to the Popover root. Merged after the styles
|
|
44
|
+
* computed by `react-popper`.
|
|
45
|
+
*/
|
|
46
|
+
style?: CSSProperties;
|
|
47
|
+
/**
|
|
48
|
+
* Placement relative to `referenceElement`. When `PopoverPosition.Auto`,
|
|
49
|
+
* `flip` and `preventOverflow` are forced on regardless of their props.
|
|
50
|
+
*
|
|
51
|
+
* @default PopoverPosition.Auto
|
|
52
|
+
*/
|
|
53
|
+
position?: PopoverPosition;
|
|
54
|
+
/**
|
|
55
|
+
* ARIA role applied to the Popover root.
|
|
56
|
+
*
|
|
57
|
+
* @default PopoverRole.Tooltip
|
|
58
|
+
*/
|
|
59
|
+
role?: PopoverRole;
|
|
60
|
+
/**
|
|
61
|
+
* Render an arrow pointing at the reference element.
|
|
62
|
+
*
|
|
63
|
+
* @default false
|
|
64
|
+
*/
|
|
65
|
+
hasArrow?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Props forwarded to the arrow element. `ref`, `style`, and `children` are
|
|
68
|
+
* reserved for internal use (popper positioning, rotation styles, and the
|
|
69
|
+
* arrow visual) and cannot be overridden.
|
|
70
|
+
*/
|
|
71
|
+
arrowProps?: Omit<ComponentProps<'div'>, 'ref' | 'style' | 'children'>;
|
|
72
|
+
/**
|
|
73
|
+
* Match the popover width to the reference element's `clientWidth`.
|
|
74
|
+
*
|
|
75
|
+
* @default false
|
|
76
|
+
*/
|
|
77
|
+
matchWidth?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Keep the Popover within the viewport. Forced on when
|
|
80
|
+
* `position === PopoverPosition.Auto`.
|
|
81
|
+
*
|
|
82
|
+
* @default false
|
|
83
|
+
*/
|
|
84
|
+
preventOverflow?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Allow flipping to the opposite side when there is not enough space.
|
|
87
|
+
* Forced on when `position === PopoverPosition.Auto`.
|
|
88
|
+
*
|
|
89
|
+
* @default false
|
|
90
|
+
*/
|
|
91
|
+
flip?: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Hide the Popover when the reference element is scrolled out of view.
|
|
94
|
+
*
|
|
95
|
+
* @default true
|
|
96
|
+
*/
|
|
97
|
+
referenceHidden?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* The element the Popover is positioned against.
|
|
100
|
+
*/
|
|
101
|
+
referenceElement?: HTMLElement | null;
|
|
102
|
+
/**
|
|
103
|
+
* Whether the Popover is open. Nothing is rendered when `false`.
|
|
104
|
+
*/
|
|
105
|
+
isOpen?: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* `[skidding, distance]` offset (in px) applied to the Popover.
|
|
108
|
+
*
|
|
109
|
+
* @default [0, 8]
|
|
110
|
+
*/
|
|
111
|
+
offset?: [number, number];
|
|
112
|
+
/**
|
|
113
|
+
* Render the Popover into `document.body` via `createPortal`.
|
|
114
|
+
*
|
|
115
|
+
* @default false
|
|
116
|
+
*/
|
|
117
|
+
isPortal?: boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Called when the user presses the Escape key while the Popover is open.
|
|
120
|
+
*/
|
|
121
|
+
onPressEscKey?: () => void;
|
|
122
|
+
/**
|
|
123
|
+
* Called when the user clicks outside the Popover and the reference element
|
|
124
|
+
* while the Popover is open.
|
|
125
|
+
*/
|
|
126
|
+
onClickOutside?: () => void;
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=Popover.types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.types.d.cts","sourceRoot":"","sources":["../../../src/components/Popover/Popover.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc;AAEtE;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;CAclB,CAAC;AACX,MAAM,MAAM,eAAe,GACzB,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;CAGd,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG;IAC/D;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC,CAAC;IACvE;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACtC;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B,CAAC"}
|