@mirohq/design-system-popover 4.1.3

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/dist/main.js ADDED
@@ -0,0 +1,444 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var RadixPopover = require('@radix-ui/react-popover');
7
+ var designSystemStitches = require('@mirohq/design-system-stitches');
8
+ var reactUseSize = require('@radix-ui/react-use-size');
9
+ var designSystemStyles = require('@mirohq/design-system-styles');
10
+ var designSystemPrimitive = require('@mirohq/design-system-primitive');
11
+ var reactComposeRefs = require('@radix-ui/react-compose-refs');
12
+
13
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
+
15
+ function _interopNamespace(e) {
16
+ if (e && e.__esModule) return e;
17
+ var n = Object.create(null);
18
+ if (e) {
19
+ Object.keys(e).forEach(function (k) {
20
+ if (k !== 'default') {
21
+ var d = Object.getOwnPropertyDescriptor(e, k);
22
+ Object.defineProperty(n, k, d.get ? d : {
23
+ enumerable: true,
24
+ get: function () { return e[k]; }
25
+ });
26
+ }
27
+ });
28
+ }
29
+ n["default"] = e;
30
+ return Object.freeze(n);
31
+ }
32
+
33
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
34
+ var RadixPopover__namespace = /*#__PURE__*/_interopNamespace(RadixPopover);
35
+
36
+ const StyledTrigger = designSystemStitches.styled(RadixPopover.Trigger);
37
+
38
+ const ON_LEAVE_DURATION = 220;
39
+ const PopoverContext = React.createContext({});
40
+ const PopoverProvider = ({
41
+ open,
42
+ onOpen,
43
+ onClose,
44
+ children,
45
+ triggersOn,
46
+ variant
47
+ }) => {
48
+ const [openState, setOpenState] = React.useState(open);
49
+ const [pressed, setPressed] = React.useState(false);
50
+ const [hoveredOut, setHoveredOut] = React.useState(false);
51
+ const [hoveredIn, setHoveredIn] = React.useState(false);
52
+ const [hoveredInFirstTime, setHoveredInFirstTime] = React.useState(false);
53
+ const leaveTimer = React.useRef();
54
+ const closeBtnRef = React__default["default"].useRef(null);
55
+ const handleLeave = () => {
56
+ if (triggersOn === "press") {
57
+ return;
58
+ }
59
+ clearTimeout(leaveTimer.current);
60
+ leaveTimer.current = setTimeout(() => {
61
+ setOpenState(false);
62
+ setHoveredOut(true);
63
+ setHoveredIn(false);
64
+ handleOnOpenCloseChange(false);
65
+ }, ON_LEAVE_DURATION);
66
+ };
67
+ const handleEnter = () => {
68
+ if (triggersOn === "press") {
69
+ return;
70
+ }
71
+ if (!pressed) {
72
+ clearTimeout(leaveTimer.current);
73
+ setHoveredIn(true);
74
+ setOpenState(true);
75
+ handleOnOpenCloseChange(true);
76
+ }
77
+ };
78
+ const handleOpenChange = (newOpen) => {
79
+ if (pressed && triggersOn === "hover") {
80
+ return setPressed(false);
81
+ }
82
+ if (newOpen !== openState) {
83
+ setOpenState(newOpen);
84
+ handleOnOpenCloseChange(newOpen);
85
+ if (!newOpen && leaveTimer.current !== void 0) {
86
+ clearTimeout(leaveTimer.current);
87
+ leaveTimer.current = void 0;
88
+ }
89
+ }
90
+ };
91
+ const handleOnOpenCloseChange = (newOpen) => {
92
+ if (!hoveredInFirstTime && newOpen) {
93
+ setHoveredInFirstTime(true);
94
+ onOpen == null ? void 0 : onOpen();
95
+ }
96
+ if (hoveredInFirstTime && !newOpen) {
97
+ setHoveredInFirstTime(false);
98
+ onClose == null ? void 0 : onClose();
99
+ }
100
+ };
101
+ return /* @__PURE__ */ React__default["default"].createElement(PopoverContext.Provider, {
102
+ value: {
103
+ openState,
104
+ hoveredIn,
105
+ hoveredOut,
106
+ pressed,
107
+ setOpenState,
108
+ setHoveredOut,
109
+ setPressed,
110
+ handleEnter,
111
+ handleLeave,
112
+ handleOpenChange,
113
+ closeBtnRef,
114
+ variant
115
+ }
116
+ }, children);
117
+ };
118
+ const usePopoverContext = () => React.useContext(PopoverContext);
119
+
120
+ const Trigger = React__default["default"].forwardRef(({ onPress, onClick, ...restProps }, forwardRef) => {
121
+ const { handleEnter, handleLeave, setPressed } = usePopoverContext();
122
+ return /* @__PURE__ */ React__default["default"].createElement(StyledTrigger, {
123
+ ...restProps,
124
+ onClick: (e) => {
125
+ var _a;
126
+ (_a = onPress != null ? onPress : onClick) == null ? void 0 : _a(e);
127
+ if (e.pointerType === "keyboard") {
128
+ return;
129
+ }
130
+ setPressed(true);
131
+ },
132
+ onMouseEnter: handleEnter,
133
+ onMouseLeave: handleLeave,
134
+ ref: forwardRef
135
+ });
136
+ });
137
+
138
+ const StyledContent = designSystemStitches.styled(RadixPopover.Content, {
139
+ backgroundColor: "$black",
140
+ borderRadius: "$50",
141
+ color: "$white",
142
+ padding: "$200",
143
+ boxShadow: "0 $1 $4 rgba(9, 9, 9, 0.4)",
144
+ fontSize: "14px",
145
+ lineHeight: "20px",
146
+ "@media (prefers-reduced-motion: no-preference)": {
147
+ animationDuration: "220ms",
148
+ animationTimingFunction: "ease",
149
+ willChange: "opacity",
150
+ '&[data-state="open"]': {
151
+ animationName: designSystemStyles.animations.fadeIn
152
+ },
153
+ '&[data-state="closed"]': {
154
+ animationName: designSystemStyles.animations.fadeOut
155
+ }
156
+ },
157
+ variants: {
158
+ variant: {
159
+ light: {
160
+ background: "$white",
161
+ boxShadow: "$50",
162
+ color: "$black"
163
+ },
164
+ dark: {}
165
+ }
166
+ },
167
+ zIndex: "$popover"
168
+ });
169
+
170
+ const getAlignXStyle = (side, width) => ({
171
+ [`[data-side="${side}"][data-align="start"] > &`]: {
172
+ left: `${width * 2}px`
173
+ },
174
+ [`[data-side="${side}"][data-align="center"] > &`]: {
175
+ left: `calc(50% - ${width / 2}px)`
176
+ },
177
+ [`[data-side="${side}"][data-align="end"] > &`]: {
178
+ left: `calc(100% - ${width * 3}px)`
179
+ }
180
+ });
181
+ const getAlignYStyle = (side, width, height) => ({
182
+ [`[data-side="${side}"][data-align="start"] > &`]: {
183
+ bottom: `calc(100% - (${height - width}px))`
184
+ },
185
+ [`[data-side="${side}"][data-align="center"] > &`]: {
186
+ bottom: `calc(50% - ${height / 2}px)`
187
+ },
188
+ [`[data-side="${side}"][data-align="end"] > &`]: { bottom: `-${width}px` }
189
+ });
190
+ const getPlacement = (width, height) => {
191
+ const halfHeight = height / 2;
192
+ const halfWidth = width / 2;
193
+ return {
194
+ '[data-side="top"] > &': { bottom: `-${height}px` },
195
+ ...getAlignXStyle("top", width),
196
+ '[data-side="bottom"] > &': {
197
+ bottom: "100%",
198
+ transform: "rotate(180deg)"
199
+ },
200
+ ...getAlignXStyle("bottom", width),
201
+ '[data-side="right"] > &': {
202
+ left: `-${halfHeight + halfWidth}px`,
203
+ transform: "rotate(90deg)"
204
+ },
205
+ ...getAlignYStyle("right", width, height),
206
+ '[data-side="left"] > &': {
207
+ left: `calc(100% + ${halfHeight - halfWidth}px)`,
208
+ transform: "rotate(270deg)"
209
+ },
210
+ ...getAlignYStyle("left", width, height)
211
+ };
212
+ };
213
+ const StyledLine = designSystemStitches.styled(designSystemPrimitive.Primitive.svg, {
214
+ fill: "none",
215
+ width: "6px",
216
+ height: "50px",
217
+ position: "absolute",
218
+ "& rect": {
219
+ fill: "rgba(66, 98, 255, 1)"
220
+ },
221
+ '& [id="line"]': {
222
+ width: "44px",
223
+ height: "1px",
224
+ transform: "rotate(90 3.5 0)"
225
+ },
226
+ '& [id="circle"]': {
227
+ width: "6px",
228
+ height: "6px",
229
+ rx: "3px",
230
+ transform: "rotate(90 6 44)"
231
+ }
232
+ });
233
+
234
+ const Line = React__default["default"].forwardRef(
235
+ (props, forwardRef) => {
236
+ const placement = getPlacement(6, 50);
237
+ return /* @__PURE__ */ React__default["default"].createElement(StyledLine, {
238
+ ...props,
239
+ css: { ...placement },
240
+ ref: forwardRef,
241
+ viewBox: "0 0 6 50",
242
+ "aria-hidden": true
243
+ }, /* @__PURE__ */ React__default["default"].createElement("rect", {
244
+ id: "line",
245
+ x: "3.5",
246
+ transform: "rotate(90 3.5 0)"
247
+ }), /* @__PURE__ */ React__default["default"].createElement("rect", {
248
+ id: "circle",
249
+ x: "6",
250
+ y: "44",
251
+ transform: "rotate(90 6 44)"
252
+ }));
253
+ }
254
+ );
255
+
256
+ const StyledArrow = designSystemStitches.styled(RadixPopover.Arrow, {
257
+ fill: "$black",
258
+ height: "$1",
259
+ paddingX: "2px",
260
+ width: "$3",
261
+ variants: {
262
+ variant: {
263
+ light: {
264
+ fill: "$white"
265
+ },
266
+ dark: {}
267
+ }
268
+ }
269
+ });
270
+
271
+ const Arrow = React__default["default"].forwardRef((props, forwardRef) => {
272
+ const { variant } = usePopoverContext();
273
+ return /* @__PURE__ */ React__default["default"].createElement(StyledArrow, {
274
+ ...props,
275
+ variant,
276
+ "aria-hidden": true,
277
+ ref: forwardRef
278
+ });
279
+ });
280
+
281
+ const Content = React__default["default"].forwardRef(
282
+ ({
283
+ align = "center",
284
+ alignOffset = 0,
285
+ avoidCollisions = true,
286
+ collisionPadding = 0,
287
+ side = "top",
288
+ children,
289
+ anchor = "line",
290
+ sticky = "partial",
291
+ hideWhenDetached = false,
292
+ ...restProps
293
+ }, forwardRef) => {
294
+ const [line, setLine] = React__default["default"].useState(null);
295
+ const lineSize = reactUseSize.useSize(line);
296
+ const {
297
+ handleLeave,
298
+ handleEnter,
299
+ hoveredIn,
300
+ hoveredOut,
301
+ setHoveredOut,
302
+ closeBtnRef,
303
+ variant
304
+ } = usePopoverContext();
305
+ return /* @__PURE__ */ React__default["default"].createElement(StyledContent, {
306
+ ...restProps,
307
+ align,
308
+ alignOffset,
309
+ avoidCollisions,
310
+ collisionPadding,
311
+ side,
312
+ sideOffset: anchor === "line" ? lineSize == null ? void 0 : lineSize.height : 0,
313
+ ref: forwardRef,
314
+ onMouseEnter: handleEnter,
315
+ onMouseLeave: handleLeave,
316
+ role: "dialog",
317
+ "aria-modal": "true",
318
+ sticky,
319
+ hideWhenDetached,
320
+ variant,
321
+ onCloseAutoFocus: (e) => {
322
+ if (hoveredOut) {
323
+ e.preventDefault();
324
+ setHoveredOut(false);
325
+ }
326
+ },
327
+ onOpenAutoFocus: (e) => {
328
+ var _a;
329
+ e.preventDefault();
330
+ if (hoveredIn) {
331
+ return;
332
+ }
333
+ (_a = closeBtnRef == null ? void 0 : closeBtnRef.current) == null ? void 0 : _a.focus();
334
+ }
335
+ }, children, anchor === "arrow" ? /* @__PURE__ */ React__default["default"].createElement(Arrow, null) : /* @__PURE__ */ React__default["default"].createElement(Line, {
336
+ ref: setLine
337
+ }));
338
+ }
339
+ );
340
+
341
+ const StyledCloseIcon = designSystemStitches.styled(designSystemPrimitive.Primitive.svg, {
342
+ fill: "$white",
343
+ width: "$3",
344
+ height: "$3",
345
+ path: {
346
+ stroke: "$white",
347
+ strokeWidth: "2",
348
+ strokeLinecap: "round",
349
+ strokeLinejoin: "round"
350
+ }
351
+ });
352
+ const StyledClose = designSystemStitches.styled(RadixPopover.Close, {
353
+ all: "unset",
354
+ fontFamily: "inherit",
355
+ height: "$6",
356
+ width: "$6",
357
+ display: "flex",
358
+ alignItems: "center",
359
+ justifyContent: "center",
360
+ color: "$white",
361
+ position: "absolute",
362
+ top: "$50",
363
+ right: "$50",
364
+ borderRadius: "$50",
365
+ cursor: "pointer",
366
+ "&:hover": {
367
+ backgroundColor: "rgba(255, 255, 255, 0.12)"
368
+ },
369
+ "&:focus-visible": {
370
+ boxShadow: `inset 0 0 0 1px white, ${designSystemStyles.focus.defaults["&:focus-visible"].boxShadow}`
371
+ },
372
+ variants: {
373
+ variant: {
374
+ light: {
375
+ [`& ${StyledCloseIcon}`]: {
376
+ path: {
377
+ stroke: "$black"
378
+ }
379
+ }
380
+ },
381
+ dark: {}
382
+ }
383
+ }
384
+ });
385
+
386
+ const CloseIcon = () => /* @__PURE__ */ React__default["default"].createElement(StyledCloseIcon, {
387
+ viewBox: "0 0 12 12"
388
+ }, /* @__PURE__ */ React__default["default"].createElement("path", {
389
+ d: "M1.99878 10.0025L10.0013 2"
390
+ }), /* @__PURE__ */ React__default["default"].createElement("path", {
391
+ d: "M10.0013 10.0024L1.99878 1.99996"
392
+ }));
393
+ const Close = React__default["default"].forwardRef((props, forwardRef) => {
394
+ const { closeBtnRef, variant } = usePopoverContext();
395
+ const composedTriggerRef = reactComposeRefs.useComposedRefs(forwardRef, closeBtnRef);
396
+ return /* @__PURE__ */ React__default["default"].createElement(StyledClose, {
397
+ ...props,
398
+ ref: composedTriggerRef,
399
+ "data-testid": "close-icon",
400
+ variant
401
+ }, /* @__PURE__ */ React__default["default"].createElement(CloseIcon, null));
402
+ });
403
+
404
+ const Portal = (props) => /* @__PURE__ */ React__default["default"].createElement(RadixPopover.Portal, {
405
+ ...props
406
+ });
407
+
408
+ const Root = ({ onOpen, onClose, ...restProps }) => {
409
+ const { openState, handleOpenChange } = usePopoverContext();
410
+ return /* @__PURE__ */ React__default["default"].createElement(RadixPopover__namespace.Root, {
411
+ ...restProps,
412
+ open: openState,
413
+ onOpenChange: (newOpen) => handleOpenChange(newOpen),
414
+ modal: false
415
+ });
416
+ };
417
+ const Popover = ({
418
+ open = false,
419
+ onOpen,
420
+ onClose,
421
+ triggersOn = "press",
422
+ variant = "dark",
423
+ ...restProps
424
+ }) => /* @__PURE__ */ React__default["default"].createElement(PopoverProvider, {
425
+ open,
426
+ onOpen,
427
+ onClose,
428
+ triggersOn,
429
+ variant
430
+ }, /* @__PURE__ */ React__default["default"].createElement(Root, {
431
+ ...restProps
432
+ }));
433
+ Popover.Trigger = Trigger;
434
+ Popover.Content = Content;
435
+ Popover.Close = Close;
436
+ Popover.Portal = Portal;
437
+
438
+ var types = /*#__PURE__*/Object.freeze({
439
+ __proto__: null
440
+ });
441
+
442
+ exports.Popover = Popover;
443
+ exports.PopoverTypes = types;
444
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sources":["../src/partials/trigger.styled.tsx","../src/use-popover-context.tsx","../src/partials/trigger.tsx","../src/partials/content.styled.tsx","../src/partials/line.styled.tsx","../src/partials/line.tsx","../src/partials/arrow.styled.tsx","../src/partials/arrow.tsx","../src/partials/content.tsx","../src/partials/close.styled.tsx","../src/partials/close.tsx","../src/partials/portal.tsx","../src/popover.tsx"],"sourcesContent":["import { Trigger as RadixTrigger } from '@radix-ui/react-popover'\nimport { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\n\nexport const StyledTrigger = styled(RadixTrigger)\nexport type StyledTriggerProps = StrictComponentProps<typeof StyledTrigger>\n","import React, { createContext, useState, useRef, useContext } from 'react'\nimport type { PropsWithChildren } from 'react'\n\nimport type { Variant, TriggersOn } from './types'\n\ninterface PopoverValues {\n open: boolean\n onOpen?: () => void\n onClose?: () => void\n triggersOn: TriggersOn\n variant?: Variant\n}\n\ninterface PopoverContextProps {\n openState: boolean\n pressed: boolean\n hoveredOut: boolean\n hoveredIn: boolean\n setOpenState: (open: boolean) => void\n setPressed: (pressed: boolean) => void\n handleEnter: () => void\n handleLeave: () => void\n handleOpenChange: (open: boolean) => void\n setHoveredOut: (hoveredOut: boolean) => void\n closeBtnRef: React.RefObject<HTMLButtonElement>\n variant?: Variant\n}\n\nconst ON_LEAVE_DURATION = 220\n\nconst PopoverContext = createContext<PopoverContextProps>({} as any)\n\n/**\n * The PopoverProvider is used to manage the state of the popover,\n * when it opens or closes, and what triggers it.\n */\nexport const PopoverProvider = ({\n open,\n onOpen,\n onClose,\n children,\n triggersOn,\n variant,\n}: PropsWithChildren<PopoverValues>): any => {\n const [openState, setOpenState] = useState(open)\n const [pressed, setPressed] = useState(false)\n const [hoveredOut, setHoveredOut] = useState(false)\n const [hoveredIn, setHoveredIn] = useState(false)\n const [hoveredInFirstTime, setHoveredInFirstTime] = useState(false)\n\n const leaveTimer = useRef<any>()\n const closeBtnRef = React.useRef<HTMLButtonElement>(null)\n\n const handleLeave = (): void => {\n if (triggersOn === 'press') {\n return\n }\n\n clearTimeout(leaveTimer.current)\n\n leaveTimer.current = setTimeout(() => {\n setOpenState(false)\n setHoveredOut(true)\n setHoveredIn(false)\n handleOnOpenCloseChange(false)\n }, ON_LEAVE_DURATION)\n }\n\n const handleEnter = (): void => {\n if (triggersOn === 'press') {\n return\n }\n\n if (!pressed) {\n clearTimeout(leaveTimer.current)\n setHoveredIn(true)\n setOpenState(true)\n handleOnOpenCloseChange(true)\n }\n }\n\n const handleOpenChange = (newOpen: boolean): void => {\n if (pressed && triggersOn === 'hover') {\n return setPressed(false)\n }\n\n if (newOpen !== openState) {\n setOpenState(newOpen)\n handleOnOpenCloseChange(newOpen)\n\n if (!newOpen && leaveTimer.current !== undefined) {\n clearTimeout(leaveTimer.current)\n leaveTimer.current = undefined\n }\n }\n }\n\n const handleOnOpenCloseChange = (newOpen: boolean): void => {\n if (!hoveredInFirstTime && newOpen) {\n setHoveredInFirstTime(true)\n onOpen?.()\n }\n\n if (hoveredInFirstTime && !newOpen) {\n setHoveredInFirstTime(false)\n onClose?.()\n }\n }\n\n return (\n <PopoverContext.Provider\n value={{\n openState,\n hoveredIn,\n hoveredOut,\n pressed,\n setOpenState,\n setHoveredOut,\n setPressed,\n handleEnter,\n handleLeave,\n handleOpenChange,\n closeBtnRef,\n variant,\n }}\n >\n {children}\n </PopoverContext.Provider>\n )\n}\n\n/**\n * The usePopoverContext hook is used to access the state of the popover.\n */\nexport const usePopoverContext = (): PopoverContextProps =>\n useContext(PopoverContext)\n","import React from 'react'\nimport type { ElementRef, DOMAttributes } from 'react'\n\nimport { StyledTrigger } from './trigger.styled'\nimport { usePopoverContext } from '../use-popover-context'\nimport type { StyledTriggerProps } from './trigger.styled'\n\nexport interface TriggerProps extends StyledTriggerProps {\n /**\n * temporary the same as onClick, later will be added touch events support\n */\n onPress?: DOMAttributes<HTMLElement>['onClick']\n}\n\n/**\n * The trigger component is used to render the trigger element for the popover.\n */\nexport const Trigger = React.forwardRef<\n ElementRef<typeof StyledTrigger>,\n TriggerProps\n>(({ onPress, onClick, ...restProps }, forwardRef) => {\n const { handleEnter, handleLeave, setPressed } = usePopoverContext()\n\n return (\n <StyledTrigger\n {...restProps}\n onClick={e => {\n ;(onPress ?? onClick)?.(e)\n\n // @ts-expect-error\n if (e.pointerType === 'keyboard') {\n return\n }\n\n setPressed(true)\n }}\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n ref={forwardRef}\n />\n )\n})\n","import { Content as RadixContent } from '@radix-ui/react-popover'\nimport { styled } from '@mirohq/design-system-stitches'\nimport { animations } from '@mirohq/design-system-styles'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\n\nexport const StyledContent = styled(RadixContent, {\n backgroundColor: '$black',\n borderRadius: '$50',\n color: '$white',\n padding: '$200',\n boxShadow: '0 $1 $4 rgba(9, 9, 9, 0.4)',\n fontSize: '14px',\n lineHeight: '20px',\n '@media (prefers-reduced-motion: no-preference)': {\n animationDuration: '220ms',\n animationTimingFunction: 'ease',\n willChange: 'opacity',\n '&[data-state=\"open\"]': {\n animationName: animations.fadeIn,\n },\n '&[data-state=\"closed\"]': {\n animationName: animations.fadeOut,\n },\n },\n variants: {\n variant: {\n light: {\n background: '$white',\n boxShadow: '$50',\n color: '$black',\n },\n dark: {},\n },\n },\n zIndex: '$popover',\n})\n\nexport type StyledContentProps = StrictComponentProps<typeof StyledContent>\n","import { Primitive } from '@mirohq/design-system-primitive'\nimport { styled } from '@mirohq/design-system-stitches'\nimport type { CSSProperties } from '@stitches/react'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\n\ntype Side = 'top' | 'right' | 'bottom' | 'left'\n\ninterface AlignStyle {\n [x: string]: CSSProperties\n}\n\nconst getAlignXStyle = (side: Side, width: number): AlignStyle => ({\n [`[data-side=\"${side}\"][data-align=\"start\"] > &`]: {\n left: `${width * 2}px`,\n },\n [`[data-side=\"${side}\"][data-align=\"center\"] > &`]: {\n left: `calc(50% - ${width / 2}px)`,\n },\n [`[data-side=\"${side}\"][data-align=\"end\"] > &`]: {\n left: `calc(100% - ${width * 3}px)`,\n },\n})\n\nconst getAlignYStyle = (\n side: Side,\n width: number,\n height: number\n): AlignStyle => ({\n [`[data-side=\"${side}\"][data-align=\"start\"] > &`]: {\n bottom: `calc(100% - (${height - width}px))`,\n },\n [`[data-side=\"${side}\"][data-align=\"center\"] > &`]: {\n bottom: `calc(50% - ${height / 2}px)`,\n },\n [`[data-side=\"${side}\"][data-align=\"end\"] > &`]: { bottom: `-${width}px` },\n})\n\nexport const getPlacement = (width: number, height: number): any => {\n const halfHeight = height / 2\n const halfWidth = width / 2\n\n return {\n '[data-side=\"top\"] > &': { bottom: `-${height}px` },\n ...getAlignXStyle('top', width),\n '[data-side=\"bottom\"] > &': {\n bottom: '100%',\n transform: 'rotate(180deg)',\n },\n ...getAlignXStyle('bottom', width),\n '[data-side=\"right\"] > &': {\n left: `-${halfHeight + halfWidth}px`,\n transform: 'rotate(90deg)',\n },\n ...getAlignYStyle('right', width, height),\n '[data-side=\"left\"] > &': {\n left: `calc(100% + ${halfHeight - halfWidth}px)`,\n transform: 'rotate(270deg)',\n },\n ...getAlignYStyle('left', width, height),\n }\n}\n\nexport const StyledLine = styled(Primitive.svg, {\n fill: 'none',\n width: '6px',\n height: '50px',\n position: 'absolute',\n '& rect': {\n fill: 'rgba(66, 98, 255, 1)',\n },\n '& [id=\"line\"]': {\n width: '44px',\n height: '1px',\n transform: 'rotate(90 3.5 0)',\n },\n '& [id=\"circle\"]': {\n width: '6px',\n height: '6px',\n rx: '3px',\n transform: 'rotate(90 6 44)',\n },\n})\n\nexport type StyledLineProps = StrictComponentProps<typeof StyledLine>\n","import React from 'react'\nimport type { ElementRef } from 'react'\n\nimport { StyledLine, getPlacement } from './line.styled'\nimport type { StyledLineProps } from './line.styled'\n\nexport interface LineProps extends StyledLineProps {}\n\nexport const Line = React.forwardRef<ElementRef<typeof StyledLine>, LineProps>(\n (props, forwardRef) => {\n const placement = getPlacement(6, 50)\n return (\n <StyledLine\n {...props}\n css={{ ...placement }}\n ref={forwardRef}\n viewBox='0 0 6 50'\n aria-hidden\n >\n <rect id='line' x='3.5' transform='rotate(90 3.5 0)' />\n <rect id='circle' x='6' y='44' transform='rotate(90 6 44)' />\n </StyledLine>\n )\n }\n)\n","import { styled } from '@mirohq/design-system-stitches'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\nimport { Arrow as RadixArrow } from '@radix-ui/react-popover'\n\nexport const StyledArrow = styled(RadixArrow, {\n fill: '$black',\n height: '$1',\n paddingX: '2px',\n width: '$3',\n variants: {\n variant: {\n light: {\n fill: '$white',\n },\n dark: {},\n },\n },\n})\n\nexport type StyledArrowProps = StrictComponentProps<typeof StyledArrow>\n","import React from 'react'\nimport type { ElementRef } from 'react'\n\nimport { StyledArrow } from './arrow.styled'\nimport type { StyledArrowProps } from './arrow.styled'\nimport { usePopoverContext } from '../use-popover-context'\n\nexport interface ArrowProps extends StyledArrowProps {}\n\nexport const Arrow = React.forwardRef<\n ElementRef<typeof StyledArrow>,\n ArrowProps\n>((props, forwardRef) => {\n const { variant } = usePopoverContext()\n return (\n <StyledArrow {...props} variant={variant} aria-hidden ref={forwardRef} />\n )\n})\n","import React from 'react'\nimport type { ElementRef } from 'react'\nimport { useSize } from '@radix-ui/react-use-size'\n\nimport { StyledContent } from './content.styled'\nimport { Line } from './line'\nimport { Arrow } from './arrow'\nimport { usePopoverContext } from '../use-popover-context'\nimport type { StyledContentProps } from './content.styled'\nimport type {\n Align,\n Side,\n AnchorType,\n PointerDownOutsideEvent,\n FocusOutsideEvent,\n} from '../types'\n\nexport interface ContentProps extends StyledContentProps {\n /**\n * When true, overrides the side and align preferences to prevent collisions\n * with window edges.\n */\n avoidCollisions?: boolean\n\n /**\n * The preferred alignment against the trigger. May change when collisions occur.\n */\n align?: Align\n\n /**\n * An offset in pixels from the \"start\" or \"end\" alignment option.\n */\n alignOffset?: number\n\n /**\n * The preferred side of the trigger to render against when open.\n * Will be reversed when collisions occur and avoidCollisions is enabled.\n */\n side?: Side\n\n /**\n * The distance in pixels from the boundary edges where collision detection\n * should occur. Accepts a number (same for all sides).\n */\n collisionPadding?: number\n\n /**\n * The type of anchor to render.\n */\n anchor?: AnchorType\n\n /**\n * Whether to render in a Portal when open.\n */\n portalled?: boolean\n\n /**\n * Used to force mounting when more control is needed. Useful when controlling\n * animation with React animation libraries.\n */\n forceMount?: true\n\n /**\n * The element used as the collision boundary. By default this is the\n * viewport, though you can provide additional element(s) to be included in\n * this check.\n */\n collisionBoundary?: Element | null\n\n /**\n * The sticky behavior on the align axis. \"partial\" will keep the content in\n * the boundary as long as the trigger is at least partially in the boundary\n * whilst \"always\" will keep the content in the boundary regardless.\n */\n sticky?: 'partial' | 'always'\n\n /**\n * Whether to hide the content when the trigger becomes fully occluded.\n */\n hideWhenDetached?: boolean\n\n /**\n * Event handler called when a pointer event occurs outside the bounds of the\n * component. It can be prevented by calling event.preventDefault.\n */\n onPointerDownOutside?: (event: PointerDownOutsideEvent) => void\n\n /**\n * Event handler called when focus moves outside the bounds of the component.\n * It can be prevented by calling event.preventDefault.\n */\n onFocusOutside?: (event: FocusOutsideEvent) => void\n\n /**\n * Event handler called when the escape key is down. It can be prevented by\n * calling event.preventDefault.\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n\n /**\n * Event handler called when an interaction (pointer or focus event) happens\n * outside the bounds of the component. It can be prevented by calling\n * event.preventDefault.\n */\n onInteractOutside?: (\n event: PointerDownOutsideEvent | FocusOutsideEvent\n ) => void\n}\n\n/**\n * The content component is used to render rich content elements for the popover.\n */\nexport const Content = React.forwardRef<\n ElementRef<typeof StyledContent>,\n ContentProps\n>(\n (\n {\n align = 'center',\n alignOffset = 0,\n avoidCollisions = true,\n collisionPadding = 0,\n side = 'top',\n children,\n anchor = 'line',\n sticky = 'partial',\n hideWhenDetached = false,\n ...restProps\n },\n forwardRef\n ) => {\n const [line, setLine] = React.useState<SVGElement | null>(null)\n const lineSize = useSize(line)\n const {\n handleLeave,\n handleEnter,\n hoveredIn,\n hoveredOut,\n setHoveredOut,\n closeBtnRef,\n variant,\n } = usePopoverContext()\n\n return (\n <StyledContent\n {...restProps}\n align={align}\n alignOffset={alignOffset}\n avoidCollisions={avoidCollisions}\n collisionPadding={collisionPadding}\n side={side}\n sideOffset={anchor === 'line' ? lineSize?.height : 0}\n ref={forwardRef}\n onMouseEnter={handleEnter}\n onMouseLeave={handleLeave}\n role='dialog'\n aria-modal='true'\n sticky={sticky}\n hideWhenDetached={hideWhenDetached}\n variant={variant}\n onCloseAutoFocus={(e: Event) => {\n if (hoveredOut) {\n e.preventDefault()\n setHoveredOut(false)\n }\n }}\n onOpenAutoFocus={(e: Event) => {\n e.preventDefault()\n\n if (hoveredIn) {\n return\n }\n closeBtnRef?.current?.focus()\n }}\n >\n {children}\n {anchor === 'arrow' ? <Arrow /> : <Line ref={setLine} />}\n </StyledContent>\n )\n }\n)\n","import { Primitive } from '@mirohq/design-system-primitive'\nimport { Close as RadixClose } from '@radix-ui/react-popover'\nimport { styled } from '@mirohq/design-system-stitches'\nimport { focus } from '@mirohq/design-system-styles'\nimport type { StrictComponentProps } from '@mirohq/design-system-stitches'\n\nexport const StyledCloseIcon = styled(Primitive.svg, {\n fill: '$white',\n width: '$3',\n height: '$3',\n path: {\n stroke: '$white',\n strokeWidth: '2',\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n },\n})\n\nexport const StyledClose = styled(RadixClose, {\n all: 'unset',\n fontFamily: 'inherit',\n height: '$6',\n width: '$6',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '$white',\n position: 'absolute',\n top: '$50',\n right: '$50',\n borderRadius: '$50',\n cursor: 'pointer',\n\n '&:hover': {\n backgroundColor: 'rgba(255, 255, 255, 0.12)',\n },\n '&:focus-visible': {\n boxShadow: `inset 0 0 0 1px white, ${focus.defaults['&:focus-visible'].boxShadow}`,\n },\n\n variants: {\n variant: {\n light: {\n [`& ${StyledCloseIcon}`]: {\n path: {\n stroke: '$black',\n },\n },\n },\n dark: {},\n },\n },\n})\n\nexport type StyledCloseProps = StrictComponentProps<typeof StyledClose>\n","import React from 'react'\nimport { useComposedRefs } from '@radix-ui/react-compose-refs'\nimport type { ElementRef } from 'react'\n\nimport { StyledClose, StyledCloseIcon } from './close.styled'\nimport { usePopoverContext } from '../use-popover-context'\nimport type { StyledCloseProps } from './close.styled'\n\nexport interface CloseProps extends StyledCloseProps {}\n\nexport const CloseIcon = (): JSX.Element => (\n <StyledCloseIcon viewBox='0 0 12 12'>\n <path d='M1.99878 10.0025L10.0013 2' />\n <path d='M10.0013 10.0024L1.99878 1.99996' />\n </StyledCloseIcon>\n)\n\nexport const Close = React.forwardRef<\n ElementRef<typeof StyledClose>,\n CloseProps\n>((props, forwardRef) => {\n const { closeBtnRef, variant } = usePopoverContext()\n const composedTriggerRef = useComposedRefs(forwardRef, closeBtnRef)\n\n return (\n <StyledClose\n {...props}\n ref={composedTriggerRef}\n data-testid='close-icon'\n variant={variant}\n >\n <CloseIcon />\n </StyledClose>\n )\n})\n","import React from 'react'\nimport type { PopoverPortalProps } from '@radix-ui/react-popover'\nimport { Portal as RadixPortal } from '@radix-ui/react-popover'\n\nexport interface PortalProps extends PopoverPortalProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries. If used on this part,\n * it will be inherited by Popover.Content.\n */\n forceMount?: true\n\n /**\n * Specify a container element to portal the content into.\n */\n container?: HTMLElement | null\n}\n\nexport const Portal: React.FC<PortalProps> = props => <RadixPortal {...props} />\n","import React from 'react'\nimport * as RadixPopover from '@radix-ui/react-popover'\n\nimport { Trigger } from './partials/trigger'\nimport { Content } from './partials/content'\nimport { Close } from './partials/close'\nimport { Portal } from './partials/portal'\nimport { PopoverProvider, usePopoverContext } from './use-popover-context'\nimport type { Variant, TriggersOn } from './types'\n\nexport interface PopoverProps {\n /**\n * The current controlled state of the popover.\n */\n open?: boolean\n\n /**\n * Event handler called when the popover opens.\n */\n onOpen?: () => void\n\n /**\n * Event handler called when the popover closes.\n */\n onClose?: () => void\n\n /**\n * Defines whether the interaction with outside elements will be enabled.\n */\n interactOutside?: boolean\n\n /**\n * The event that will trigger the popover to open.\n */\n triggersOn?: TriggersOn\n\n /**\n * Change the popover's appearance\n */\n variant?: Variant\n}\n\nconst Root: React.FC<PopoverProps> = ({ onOpen, onClose, ...restProps }) => {\n const { openState, handleOpenChange } = usePopoverContext()\n return (\n <RadixPopover.Root\n {...restProps}\n open={openState}\n onOpenChange={newOpen => handleOpenChange(newOpen)}\n modal={false}\n />\n )\n}\n\nexport const Popover: React.FC<PopoverProps> & Partials = ({\n open = false,\n onOpen,\n onClose,\n triggersOn = 'press',\n variant = 'dark',\n ...restProps\n}) => (\n <PopoverProvider\n open={open}\n onOpen={onOpen}\n onClose={onClose}\n triggersOn={triggersOn}\n variant={variant}\n >\n <Root {...restProps} />\n </PopoverProvider>\n)\n\n// Partials\n// -----------------------------------------------------------------------------\ninterface Partials {\n Trigger: typeof Trigger\n Content: typeof Content\n Close: typeof Close\n Portal: typeof Portal\n}\n\nPopover.Trigger = Trigger\nPopover.Content = Content\nPopover.Close = Close\nPopover.Portal = Portal\n"],"names":["styled","RadixTrigger","createContext","useState","useRef","React","useContext","RadixContent","animations","Primitive","RadixArrow","useSize","RadixClose","focus","useComposedRefs","RadixPortal","RadixPopover"],"mappings":"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"}