@stackone/malachite 2.42.2 → 2.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,153 +1,153 @@
1
- import { jsxs as me, Fragment as ve, jsx as C } from "react/jsx-runtime";
2
- import he, { useContext as be, useState as U, useSyncExternalStore as Pe, useRef as h, useCallback as ge, useEffect as W, useMemo as xe } from "react";
1
+ import { jsxs as ve, Fragment as he, jsx as D } from "react/jsx-runtime";
2
+ import be, { useContext as Pe, useState as W, useSyncExternalStore as ge, useRef as h, useCallback as xe, useEffect as j, useMemo as we } from "react";
3
3
  import { createPortal as Ee } from "react-dom";
4
- import { ShadowRootWrapper as we } from "../ShadowRootWrapper.js";
5
- import { PopoverEmpty as Le, PopoverSection as Me, PopoverList as ye, PopoverAction as Se, PopoverHeader as Te } from "./PopoverParts.js";
6
- import { getDeepActiveElement as j } from "./activeElement.js";
7
- import { elementRef as _e, composeRefs as Ae, chainHandler as v } from "./composeRefs.js";
8
- import { pushEscapeLayer as Ce } from "./escapeLayers.js";
9
- import { MENU_VIEWPORT_PADDING_PX as De } from "./floatingMenuGeometry.js";
10
- import { FOCUSABLE_SELECTOR as Oe } from "./overlayBehaviour.js";
11
- import { PopoverTreeContext as q } from "./popoverTree.js";
12
- import { overlayIdentity as Ie } from "./portalOverlay.js";
13
- import { useHoverClose as Ne } from "./useHoverClose.js";
14
- import { useLatestRef as D } from "./useLatestRef.js";
15
- import { usePopoverPosition as ke } from "./usePopoverPosition.js";
4
+ import { ShadowRootWrapper as Le } from "../ShadowRootWrapper.js";
5
+ import { PopoverEmpty as Me, PopoverSection as ye, PopoverList as Te, PopoverAction as Se, PopoverHeader as _e } from "./PopoverParts.js";
6
+ import { getDeepActiveElement as U } from "./activeElement.js";
7
+ import { elementRef as Ae, composeRefs as De, chainHandler as v } from "./composeRefs.js";
8
+ import { pushEscapeLayer as Ie } from "./escapeLayers.js";
9
+ import { MENU_VIEWPORT_PADDING_PX as Ce } from "./floatingMenuGeometry.js";
10
+ import { firstTabStopIn as Ne } from "./overlayBehaviour.js";
11
+ import { usePopupLayer as Oe } from "./overlayLayers.js";
12
+ import { PopoverTreeContext as G } from "./popoverTree.js";
13
+ import { useHoverClose as ke } from "./useHoverClose.js";
14
+ import { useLatestRef as I } from "./useLatestRef.js";
15
+ import { usePopoverPosition as Ke } from "./usePopoverPosition.js";
16
16
  import { usePopoverTree as Re } from "./usePopoverTree.js";
17
- const Ke = "font-sans box-border overflow-auto outline-none rounded-[var(--malachite-radius-xl,12px)] border border-solid border-[var(--malachite-card-border,rgb(232,232,232))] bg-[var(--malachite-card-background,rgb(255,255,255))] text-[var(--malachite-text-primary,rgb(10,10,10))]", Be = {
17
+ const Be = "font-sans box-border overflow-auto outline-none rounded-[var(--malachite-radius-xl,12px)] border border-solid border-[var(--malachite-card-border,rgb(232,232,232))] bg-[var(--malachite-card-background,rgb(255,255,255))] text-[var(--malachite-text-primary,rgb(10,10,10))]", $e = {
18
18
  default: "[box-shadow:0px_4px_10px_0px_var(--malachite-card-shadow,rgba(0,0,0,0.1))]",
19
19
  raised: "[box-shadow:0px_8px_24px_0px_var(--malachite-card-shadow,rgba(0,0,0,0.1))]"
20
- }, $e = {
20
+ }, He = {
21
21
  none: "p-0",
22
22
  small: "p-1",
23
23
  medium: "p-2"
24
- }, He = (o, c) => {
24
+ }, We = (o, c) => {
25
25
  for (const b of c)
26
26
  if (b && o.includes(b))
27
27
  return !0;
28
28
  return !1;
29
- }, Ue = {
29
+ }, je = {
30
30
  bottom: "ArrowDown",
31
31
  top: "ArrowUp",
32
32
  right: "ArrowRight",
33
33
  left: "ArrowLeft"
34
- }, V = (o) => {
34
+ }, Y = (o) => {
35
35
  if (!(o instanceof Node))
36
36
  return [];
37
37
  const c = o.getRootNode();
38
- return [o, ...c instanceof ShadowRoot ? V(c.host) : []];
39
- }, We = () => () => {
40
- }, je = () => !0, qe = () => !1, G = (o, c) => c ?? o.querySelector(Oe) ?? o, Ge = ({
38
+ return [o, ...c instanceof ShadowRoot ? Y(c.host) : []];
39
+ }, Ue = () => () => {
40
+ }, Ge = () => !0, Ve = () => !1, V = (o, c) => c ?? Ne(o) ?? o, Ye = ({
41
41
  trigger: o,
42
42
  children: c,
43
43
  open: b,
44
- defaultOpen: Y = !1,
44
+ defaultOpen: q = !1,
45
45
  onOpenChange: X,
46
- placement: O = "bottom-start",
46
+ placement: C = "bottom-start",
47
47
  openOn: i = "click",
48
48
  width: z = "content",
49
- padding: F = "small",
50
- anchorRef: J,
51
- offset: Q = "small",
52
- elevation: Z = "default",
53
- initialFocusRef: d,
54
- role: I = "dialog",
49
+ padding: J = "small",
50
+ anchorRef: Q,
51
+ offset: Z = "small",
52
+ elevation: F = "default",
53
+ initialFocusRef: p,
54
+ role: N = "dialog",
55
55
  "aria-label": ee,
56
56
  "aria-labelledby": re,
57
57
  className: oe = ""
58
58
  }) => {
59
- const te = be(q), [ne, se] = U(Y), t = b ?? ne, ce = Pe(We, je, qe), P = h(null), E = h(null), [u, ue] = U(null), N = h(0), _ = h(!1), w = h(!1), L = h(!1), M = D(t), k = D(b), y = D(X), n = ge(
59
+ const te = Pe(G), [ne, se] = W(q), t = b ?? ne, ce = ge(Ue, Ge, Ve), P = h(null), g = h(null), ue = Oe("popover", t, g), [u, ae] = W(null), O = h(0), _ = h(!1), E = h(!1), L = h(!1), M = I(t), k = I(b), y = I(X), n = xe(
60
60
  (e) => {
61
61
  var m;
62
62
  e !== M.current && (k.current === void 0 && se(e), (m = y.current) == null || m.call(y, e));
63
63
  },
64
64
  [M, k, y]
65
- ), { pointerInside: g, focusInside: x, triggerFocused: R, cancelClose: f, scheduleClose: S } = Ne({
65
+ ), { pointerInside: x, focusInside: w, triggerFocused: K, cancelClose: d, scheduleClose: T } = ke({
66
66
  isOpenRef: M,
67
- heldByChildren: N,
67
+ heldByChildren: O,
68
68
  setOpen: n
69
- }), { tree: ae, ownedSources: A } = Re({
69
+ }), { tree: le, ownedSources: A } = Re({
70
70
  parent: te,
71
71
  isOpen: t,
72
72
  openOn: i,
73
73
  isOpenRef: M,
74
- heldByChildren: N,
75
- cancelClose: f,
76
- scheduleClose: S
77
- }), r = ke({
74
+ heldByChildren: O,
75
+ cancelClose: d,
76
+ scheduleClose: T
77
+ }), r = Ke({
78
78
  isOpen: t,
79
79
  panel: u,
80
- hostRef: E,
80
+ hostRef: g,
81
81
  triggerRef: P,
82
- anchorRef: J,
83
- placement: O,
82
+ anchorRef: Q,
83
+ placement: C,
84
84
  width: z,
85
- offset: Q
85
+ offset: Z
86
86
  });
87
- W(() => {
87
+ j(() => {
88
88
  if (!t)
89
89
  return;
90
90
  const e = (a) => {
91
91
  const l = a.composedPath();
92
- He(l, [
92
+ We(l, [
93
93
  P.current,
94
- E.current,
95
- ...[...A.current].map((pe) => pe())
94
+ g.current,
95
+ ...[...A.current].map((me) => me())
96
96
  ]) || n(!1);
97
97
  };
98
98
  document.addEventListener("mousedown", e, !0);
99
- const m = Ce(() => n(!1));
99
+ const m = Ie(() => n(!1));
100
100
  return () => {
101
101
  var l;
102
- document.removeEventListener("mousedown", e, !0), m(), g.current = !1;
103
- const a = j();
104
- x.current && (!a || a === document.body) && (w.current = !0, (l = P.current) == null || l.focus({ preventScroll: !0 }), w.current = !1), x.current = !1;
102
+ document.removeEventListener("mousedown", e, !0), m(), x.current = !1;
103
+ const a = U();
104
+ w.current && (!a || a === document.body) && (E.current = !0, (l = P.current) == null || l.focus({ preventScroll: !0 }), E.current = !1), w.current = !1;
105
105
  };
106
- }, [t, n, A, g, x]);
107
- const K = t && u !== null && r !== null;
108
- W(() => {
106
+ }, [t, n, A, x, w]);
107
+ const R = t && u !== null && r !== null;
108
+ j(() => {
109
109
  const e = i === "click" || _.current;
110
- !K || !u || !e || (_.current = !1, G(u, d == null ? void 0 : d.current).focus({ preventScroll: !0 }));
111
- }, [K, u, i, d]);
110
+ !R || !u || !e || (_.current = !1, V(u, p == null ? void 0 : p.current).focus({ preventScroll: !0 }));
111
+ }, [R, u, i, p]);
112
112
  const B = () => {
113
- if (f(), t && u) {
114
- G(u, d == null ? void 0 : d.current).focus({ preventScroll: !0 });
113
+ if (d(), t && u) {
114
+ V(u, p == null ? void 0 : p.current).focus({ preventScroll: !0 });
115
115
  return;
116
116
  }
117
117
  _.current = !0, n(!0);
118
- }, T = (e) => {
118
+ }, S = (e) => {
119
119
  const m = [
120
120
  P.current,
121
- E.current,
121
+ g.current,
122
122
  u,
123
123
  ...[...A.current].map((a) => a())
124
124
  ];
125
- return V(e).some(
125
+ return Y(e).some(
126
126
  (a) => m.some((l) => l == null ? void 0 : l.contains(a))
127
127
  );
128
128
  }, $ = (e) => {
129
129
  e && queueMicrotask(() => {
130
- !T(e) && !T(j()) && n(!1);
130
+ !S(e) && !S(U()) && n(!1);
131
131
  });
132
132
  }, s = i === "hover" ? {
133
133
  onMouseEnter: () => {
134
- g.current = !0, f(), n(!0);
134
+ x.current = !0, d(), n(!0);
135
135
  },
136
136
  onMouseLeave: () => {
137
- g.current = !1, S();
137
+ x.current = !1, T();
138
138
  },
139
139
  onPanelMouseOver: () => {
140
- g.current = !0, f();
140
+ x.current = !0, d();
141
141
  }
142
- } : null, p = o.props, H = _e(o), le = xe(
143
- () => Ae(H, P),
142
+ } : null, f = o.props, H = Ae(o), ie = we(
143
+ () => De(H, P),
144
144
  [H]
145
- ), ie = Ue[O.split("-")[0]], de = he.cloneElement(o, {
146
- ref: le,
147
- "aria-haspopup": I,
145
+ ), pe = je[C.split("-")[0]], de = be.cloneElement(o, {
146
+ ref: ie,
147
+ "aria-haspopup": N,
148
148
  "aria-expanded": t,
149
149
  onClick: v(
150
- p.onClick,
150
+ f.onClick,
151
151
  (e) => {
152
152
  if (i !== "hover") {
153
153
  n(!t);
@@ -157,43 +157,43 @@ const Ke = "font-sans box-border overflow-auto outline-none rounded-[var(--malac
157
157
  B();
158
158
  return;
159
159
  }
160
- f(), n(!0);
160
+ d(), n(!0);
161
161
  }
162
162
  ),
163
163
  ...s ? {
164
164
  onMouseEnter: v(
165
- p.onMouseEnter,
165
+ f.onMouseEnter,
166
166
  s.onMouseEnter
167
167
  ),
168
168
  onMouseLeave: v(
169
- p.onMouseLeave,
169
+ f.onMouseLeave,
170
170
  s.onMouseLeave
171
171
  ),
172
172
  onMouseDown: v(
173
- p.onMouseDown,
173
+ f.onMouseDown,
174
174
  () => {
175
175
  L.current = !0, setTimeout(() => {
176
176
  L.current = !1;
177
177
  });
178
178
  }
179
179
  ),
180
- onFocus: v(p.onFocus, () => {
180
+ onFocus: v(f.onFocus, () => {
181
181
  const e = L.current;
182
- L.current = !1, R.current = !e && !w.current, !w.current && (f(), n(!0));
182
+ L.current = !1, K.current = !e && !E.current, !E.current && (d(), n(!0));
183
183
  }),
184
184
  onKeyDown: v(
185
- p.onKeyDown,
185
+ f.onKeyDown,
186
186
  (e) => {
187
- e.key === ie && (e.preventDefault(), B());
187
+ e.key === pe && (e.preventDefault(), B());
188
188
  }
189
189
  )
190
190
  } : {},
191
191
  onBlur: v(
192
- p.onBlur,
192
+ f.onBlur,
193
193
  (e) => {
194
- if (R.current = !1, !(!t || T(e.relatedTarget))) {
194
+ if (K.current = !1, !(!t || S(e.relatedTarget))) {
195
195
  if (i === "hover") {
196
- S();
196
+ T();
197
197
  return;
198
198
  }
199
199
  $(e.relatedTarget);
@@ -202,42 +202,42 @@ const Ke = "font-sans box-border overflow-auto outline-none rounded-[var(--malac
202
202
  )
203
203
  }), fe = {
204
204
  maxHeight: r == null ? void 0 : r.maxHeight,
205
- maxWidth: `calc(100vw - ${De * 2}px)`,
205
+ maxWidth: `calc(100vw - ${Ce * 2}px)`,
206
206
  visibility: r ? "visible" : "hidden"
207
207
  };
208
- return /* @__PURE__ */ me(ve, { children: [
208
+ return /* @__PURE__ */ ve(he, { children: [
209
209
  de,
210
210
  t && ce && Ee(
211
- /* @__PURE__ */ C(q.Provider, { value: ae, children: /* @__PURE__ */ C(
212
- we,
211
+ /* @__PURE__ */ D(G.Provider, { value: le, children: /* @__PURE__ */ D(
212
+ Le,
213
213
  {
214
- hostRef: E,
215
- hostProps: Ie("popover"),
214
+ hostRef: g,
215
+ hostProps: ue,
216
216
  hostStyle: {
217
217
  position: "fixed",
218
218
  top: (r == null ? void 0 : r.top) ?? 0,
219
219
  left: (r == null ? void 0 : r.left) ?? 0
220
220
  },
221
- children: /* @__PURE__ */ C(
221
+ children: /* @__PURE__ */ D(
222
222
  "div",
223
223
  {
224
- ref: ue,
225
- role: I,
224
+ ref: ae,
225
+ role: N,
226
226
  "aria-label": ee,
227
227
  "aria-labelledby": re,
228
228
  "data-side": r == null ? void 0 : r.side,
229
229
  tabIndex: -1,
230
- className: `${Ke} ${Be[Z]} ${$e[F]} ${oe}`.trim(),
230
+ className: `${Be} ${$e[F]} ${He[J]} ${oe}`.trim(),
231
231
  style: fe,
232
232
  onMouseOver: s == null ? void 0 : s.onPanelMouseOver,
233
233
  onMouseLeave: s == null ? void 0 : s.onMouseLeave,
234
234
  onFocus: () => {
235
- x.current = !0, f();
235
+ w.current = !0, d();
236
236
  },
237
237
  onBlur: (e) => {
238
- if (!T(e.relatedTarget)) {
239
- if (x.current = !1, i === "hover") {
240
- S();
238
+ if (!S(e.relatedTarget)) {
239
+ if (w.current = !1, i === "hover") {
240
+ T();
241
241
  return;
242
242
  }
243
243
  $(e.relatedTarget);
@@ -251,15 +251,15 @@ const Ke = "font-sans box-border overflow-auto outline-none rounded-[var(--malac
251
251
  document.body
252
252
  )
253
253
  ] });
254
- }, lr = Object.assign(Ge, {
255
- Header: Te,
254
+ }, ir = Object.assign(Ye, {
255
+ Header: _e,
256
256
  Action: Se,
257
- List: ye,
258
- Section: Me,
259
- Empty: Le
257
+ List: Te,
258
+ Section: ye,
259
+ Empty: Me
260
260
  });
261
261
  export {
262
- lr as Popover,
263
- lr as default
262
+ ir as Popover,
263
+ ir as default
264
264
  };
265
265
  //# sourceMappingURL=Popover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.js","sources":["../../src/components/Popover.tsx"],"sourcesContent":["import React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { ShadowRootWrapper } from '../ShadowRootWrapper';\nimport {\n PopoverAction,\n PopoverEmpty,\n PopoverHeader,\n PopoverList,\n PopoverSection,\n} from './PopoverParts';\nimport { getDeepActiveElement } from './activeElement';\nimport { chainHandler, composeRefs, elementRef } from './composeRefs';\nimport { pushEscapeLayer } from './escapeLayers';\nimport {\n type FloatingOffset,\n type FloatingPlacement,\n MENU_VIEWPORT_PADDING_PX,\n} from './floatingMenuGeometry';\nimport { FOCUSABLE_SELECTOR } from './overlayBehaviour';\nimport { PopoverTreeContext } from './popoverTree';\nimport { overlayIdentity } from './portalOverlay';\nimport { useHoverClose } from './useHoverClose';\nimport { useLatestRef } from './useLatestRef';\nimport { usePopoverPosition } from './usePopoverPosition';\nimport { usePopoverTree } from './usePopoverTree';\n\nexport type PopoverPlacement = FloatingPlacement;\n\ninterface PopoverBaseProps {\n trigger: React.ReactElement;\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: PopoverPlacement;\n openOn?: 'click' | 'hover';\n width?: 'content' | 'trigger';\n padding?: 'none' | 'small' | 'medium';\n anchorRef?: React.RefObject<HTMLElement | null>;\n offset?: FloatingOffset;\n elevation?: 'default' | 'raised';\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n role?: 'dialog' | 'menu' | 'listbox';\n className?: string;\n}\n\ntype PopoverName =\n | { 'aria-label': string; 'aria-labelledby'?: string }\n | { 'aria-label'?: string; 'aria-labelledby': string };\n\nexport type PopoverProps = PopoverBaseProps & PopoverName;\n\nconst PANEL =\n 'font-sans box-border overflow-auto outline-none rounded-[var(--malachite-radius-xl,12px)] border border-solid border-[var(--malachite-card-border,rgb(232,232,232))] bg-[var(--malachite-card-background,rgb(255,255,255))] text-[var(--malachite-text-primary,rgb(10,10,10))]';\n\nconst ELEVATION: Record<NonNullable<PopoverBaseProps['elevation']>, string> = {\n default: '[box-shadow:0px_4px_10px_0px_var(--malachite-card-shadow,rgba(0,0,0,0.1))]',\n raised: '[box-shadow:0px_8px_24px_0px_var(--malachite-card-shadow,rgba(0,0,0,0.1))]',\n};\n\nconst PADDING: Record<NonNullable<PopoverBaseProps['padding']>, string> = {\n none: 'p-0',\n small: 'p-1',\n medium: 'p-2',\n};\n\nconst pathHits = (path: EventTarget[], nodes: Iterable<Element | null | undefined>): boolean => {\n for (const node of nodes) {\n if (node && path.includes(node)) {\n return true;\n }\n }\n return false;\n};\n\nconst KEYBOARD_OPEN_KEY: Record<string, string> = {\n bottom: 'ArrowDown',\n top: 'ArrowUp',\n right: 'ArrowRight',\n left: 'ArrowLeft',\n};\n\nconst composedPathOf = (node: EventTarget | null): Node[] => {\n if (!(node instanceof Node)) {\n return [];\n }\n const root = node.getRootNode();\n return [node, ...(root instanceof ShadowRoot ? composedPathOf(root.host) : [])];\n};\n\nconst subscribeToNothing = () => () => undefined;\nconst onClient = () => true;\nconst onServer = () => false;\n\nconst focusTarget = (panel: HTMLElement, initial: HTMLElement | null | undefined): HTMLElement =>\n initial ?? panel.querySelector<HTMLElement>(FOCUSABLE_SELECTOR) ?? panel;\n\n/** An anchored, non-modal panel; nested Popovers count as inside their parent. */\nconst PopoverRoot: React.FC<PopoverProps> = ({\n trigger,\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom-start',\n openOn = 'click',\n width = 'content',\n padding = 'small',\n anchorRef,\n offset = 'small',\n elevation = 'default',\n initialFocusRef,\n role = 'dialog',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n className = '',\n}) => {\n const parent = useContext(PopoverTreeContext);\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const isOpen = controlledOpen ?? uncontrolledOpen;\n const isClient = useSyncExternalStore(subscribeToNothing, onClient, onServer);\n\n const triggerRef = useRef<HTMLElement | null>(null);\n const hostRef = useRef<HTMLDivElement | null>(null);\n const [panel, setPanel] = useState<HTMLDivElement | null>(null);\n const heldByChildren = useRef(0);\n const focusOnOpen = useRef(false);\n const returningFocus = useRef(false);\n const pointerPressedTrigger = useRef(false);\n\n const isOpenRef = useLatestRef(isOpen);\n const controlledRef = useLatestRef(controlledOpen);\n const onOpenChangeRef = useLatestRef(onOpenChange);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (next === isOpenRef.current) {\n return;\n }\n if (controlledRef.current === undefined) {\n setUncontrolledOpen(next);\n }\n onOpenChangeRef.current?.(next);\n },\n [isOpenRef, controlledRef, onOpenChangeRef],\n );\n\n const { pointerInside, focusInside, triggerFocused, cancelClose, scheduleClose } =\n useHoverClose({\n isOpenRef,\n heldByChildren,\n setOpen,\n });\n\n const { tree, ownedSources } = usePopoverTree({\n parent,\n isOpen,\n openOn,\n isOpenRef,\n heldByChildren,\n cancelClose,\n scheduleClose,\n });\n\n const geometry = usePopoverPosition({\n isOpen,\n panel,\n hostRef,\n triggerRef,\n anchorRef,\n placement,\n width,\n offset,\n });\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n const closeOnOutsidePress = (event: MouseEvent) => {\n const path = event.composedPath();\n const inside = pathHits(path, [\n triggerRef.current,\n hostRef.current,\n ...[...ownedSources.current].map((source) => source()),\n ]);\n if (!inside) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', closeOnOutsidePress, true);\n const popEscapeLayer = pushEscapeLayer(() => setOpen(false));\n return () => {\n document.removeEventListener('mousedown', closeOnOutsidePress, true);\n popEscapeLayer();\n pointerInside.current = false;\n const active = getDeepActiveElement();\n if (focusInside.current && (!active || active === document.body)) {\n returningFocus.current = true;\n triggerRef.current?.focus({ preventScroll: true });\n returningFocus.current = false;\n }\n focusInside.current = false;\n };\n }, [isOpen, setOpen, ownedSources, pointerInside, focusInside]);\n\n const shown = isOpen && panel !== null && geometry !== null;\n\n useEffect(() => {\n const shouldFocus = openOn === 'click' || focusOnOpen.current;\n if (!shown || !panel || !shouldFocus) {\n return;\n }\n focusOnOpen.current = false;\n focusTarget(panel, initialFocusRef?.current).focus({ preventScroll: true });\n }, [shown, panel, openOn, initialFocusRef]);\n\n const openWithFocus = () => {\n cancelClose();\n if (isOpen && panel) {\n focusTarget(panel, initialFocusRef?.current).focus({ preventScroll: true });\n return;\n }\n focusOnOpen.current = true;\n setOpen(true);\n };\n\n const isInside = (node: EventTarget | null): boolean => {\n const containers = [\n triggerRef.current,\n hostRef.current,\n panel,\n ...[...ownedSources.current].map((source) => source()),\n ];\n return composedPathOf(node).some((step) =>\n containers.some((container) => container?.contains(step)),\n );\n };\n\n const closeIfFocusLeft = (next: EventTarget | null) => {\n if (!next) {\n return;\n }\n queueMicrotask(() => {\n if (!isInside(next) && !isInside(getDeepActiveElement())) {\n setOpen(false);\n }\n });\n };\n\n const hoverHandlers =\n openOn === 'hover'\n ? {\n onMouseEnter: () => {\n pointerInside.current = true;\n cancelClose();\n setOpen(true);\n },\n onMouseLeave: () => {\n pointerInside.current = false;\n scheduleClose();\n },\n onPanelMouseOver: () => {\n pointerInside.current = true;\n cancelClose();\n },\n }\n : null;\n\n const triggerProps = trigger.props as Record<string, unknown>;\n type Handler<E extends React.SyntheticEvent> = ((event: E) => void) | undefined;\n\n const ownTriggerRef = elementRef<HTMLElement>(trigger);\n const composedTriggerRef = useMemo(\n () => composeRefs(ownTriggerRef, triggerRef),\n [ownTriggerRef],\n );\n const openKey = KEYBOARD_OPEN_KEY[placement.split('-')[0]];\n\n const clonedTrigger = React.cloneElement(trigger, {\n ref: composedTriggerRef,\n 'aria-haspopup': role,\n 'aria-expanded': isOpen,\n onClick: chainHandler(\n triggerProps.onClick as Handler<React.MouseEvent>,\n (event: React.MouseEvent) => {\n if (openOn !== 'hover') {\n setOpen(!isOpen);\n return;\n }\n const fromKeyboard = event.detail === 0;\n if (fromKeyboard) {\n openWithFocus();\n return;\n }\n cancelClose();\n setOpen(true);\n },\n ),\n ...(hoverHandlers\n ? {\n onMouseEnter: chainHandler(\n triggerProps.onMouseEnter as Handler<React.MouseEvent>,\n hoverHandlers.onMouseEnter,\n ),\n onMouseLeave: chainHandler(\n triggerProps.onMouseLeave as Handler<React.MouseEvent>,\n hoverHandlers.onMouseLeave,\n ),\n onMouseDown: chainHandler(\n triggerProps.onMouseDown as Handler<React.MouseEvent>,\n () => {\n pointerPressedTrigger.current = true;\n setTimeout(() => {\n pointerPressedTrigger.current = false;\n });\n },\n ),\n onFocus: chainHandler(triggerProps.onFocus as Handler<React.FocusEvent>, () => {\n const fromPointer = pointerPressedTrigger.current;\n pointerPressedTrigger.current = false;\n triggerFocused.current = !fromPointer && !returningFocus.current;\n if (returningFocus.current) {\n return;\n }\n cancelClose();\n setOpen(true);\n }),\n onKeyDown: chainHandler(\n triggerProps.onKeyDown as Handler<React.KeyboardEvent>,\n (event: React.KeyboardEvent) => {\n if (event.key !== openKey) {\n return;\n }\n event.preventDefault();\n openWithFocus();\n },\n ),\n }\n : {}),\n onBlur: chainHandler(\n triggerProps.onBlur as Handler<React.FocusEvent>,\n (event: React.FocusEvent) => {\n triggerFocused.current = false;\n if (!isOpen || isInside(event.relatedTarget)) {\n return;\n }\n if (openOn === 'hover') {\n scheduleClose();\n return;\n }\n closeIfFocusLeft(event.relatedTarget);\n },\n ),\n } as Record<string, unknown>);\n\n const panelStyle: React.CSSProperties = {\n maxHeight: geometry?.maxHeight,\n maxWidth: `calc(100vw - ${MENU_VIEWPORT_PADDING_PX * 2}px)`,\n visibility: geometry ? 'visible' : 'hidden',\n };\n\n return (\n <>\n {clonedTrigger}\n {isOpen &&\n isClient &&\n createPortal(\n <PopoverTreeContext.Provider value={tree}>\n <ShadowRootWrapper\n hostRef={hostRef}\n hostProps={overlayIdentity('popover')}\n hostStyle={{\n position: 'fixed',\n top: geometry?.top ?? 0,\n left: geometry?.left ?? 0,\n }}\n >\n <div\n ref={setPanel}\n role={role}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n data-side={geometry?.side}\n tabIndex={-1}\n className={`${PANEL} ${ELEVATION[elevation]} ${PADDING[padding]} ${className}`.trim()}\n style={panelStyle}\n // React's mouseenter stops at the shadow host, so the panel listens for mouseover.\n onMouseOver={hoverHandlers?.onPanelMouseOver}\n onMouseLeave={hoverHandlers?.onMouseLeave}\n onFocus={() => {\n focusInside.current = true;\n cancelClose();\n }}\n onBlur={(event) => {\n if (isInside(event.relatedTarget)) {\n return;\n }\n focusInside.current = false;\n if (openOn === 'hover') {\n scheduleClose();\n return;\n }\n closeIfFocusLeft(event.relatedTarget);\n }}\n >\n {children}\n </div>\n </ShadowRootWrapper>\n </PopoverTreeContext.Provider>,\n document.body,\n )}\n </>\n );\n};\n\nexport const Popover = Object.assign(PopoverRoot, {\n Header: PopoverHeader,\n Action: PopoverAction,\n List: PopoverList,\n Section: PopoverSection,\n Empty: PopoverEmpty,\n});\n\nexport default Popover;\n"],"names":["PANEL","ELEVATION","PADDING","pathHits","path","nodes","node","KEYBOARD_OPEN_KEY","composedPathOf","root","subscribeToNothing","onClient","onServer","focusTarget","panel","initial","FOCUSABLE_SELECTOR","PopoverRoot","trigger","children","controlledOpen","defaultOpen","onOpenChange","placement","openOn","width","padding","anchorRef","offset","elevation","initialFocusRef","role","ariaLabel","ariaLabelledBy","className","parent","useContext","PopoverTreeContext","uncontrolledOpen","setUncontrolledOpen","useState","isOpen","isClient","useSyncExternalStore","triggerRef","useRef","hostRef","setPanel","heldByChildren","focusOnOpen","returningFocus","pointerPressedTrigger","isOpenRef","useLatestRef","controlledRef","onOpenChangeRef","setOpen","useCallback","next","_a","pointerInside","focusInside","triggerFocused","cancelClose","scheduleClose","useHoverClose","tree","ownedSources","usePopoverTree","geometry","usePopoverPosition","useEffect","closeOnOutsidePress","event","source","popEscapeLayer","pushEscapeLayer","active","getDeepActiveElement","shown","shouldFocus","openWithFocus","isInside","containers","step","container","closeIfFocusLeft","hoverHandlers","triggerProps","ownTriggerRef","elementRef","composedTriggerRef","useMemo","composeRefs","openKey","clonedTrigger","React","chainHandler","fromPointer","panelStyle","MENU_VIEWPORT_PADDING_PX","jsxs","Fragment","createPortal","jsx","ShadowRootWrapper","overlayIdentity","Popover","PopoverHeader","PopoverAction","PopoverList","PopoverSection","PopoverEmpty"],"mappings":"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"}
1
+ {"version":3,"file":"Popover.js","sources":["../../src/components/Popover.tsx"],"sourcesContent":["import React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { ShadowRootWrapper } from '../ShadowRootWrapper';\nimport {\n PopoverAction,\n PopoverEmpty,\n PopoverHeader,\n PopoverList,\n PopoverSection,\n} from './PopoverParts';\nimport { getDeepActiveElement } from './activeElement';\nimport { chainHandler, composeRefs, elementRef } from './composeRefs';\nimport { pushEscapeLayer } from './escapeLayers';\nimport {\n type FloatingOffset,\n type FloatingPlacement,\n MENU_VIEWPORT_PADDING_PX,\n} from './floatingMenuGeometry';\nimport { firstTabStopIn } from './overlayBehaviour';\nimport { usePopupLayer } from './overlayLayers';\nimport { PopoverTreeContext } from './popoverTree';\nimport { useHoverClose } from './useHoverClose';\nimport { useLatestRef } from './useLatestRef';\nimport { usePopoverPosition } from './usePopoverPosition';\nimport { usePopoverTree } from './usePopoverTree';\n\nexport type PopoverPlacement = FloatingPlacement;\n\ninterface PopoverBaseProps {\n trigger: React.ReactElement;\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: PopoverPlacement;\n openOn?: 'click' | 'hover';\n width?: 'content' | 'trigger';\n padding?: 'none' | 'small' | 'medium';\n anchorRef?: React.RefObject<HTMLElement | null>;\n offset?: FloatingOffset;\n elevation?: 'default' | 'raised';\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n role?: 'dialog' | 'menu' | 'listbox';\n className?: string;\n}\n\ntype PopoverName =\n | { 'aria-label': string; 'aria-labelledby'?: string }\n | { 'aria-label'?: string; 'aria-labelledby': string };\n\nexport type PopoverProps = PopoverBaseProps & PopoverName;\n\nconst PANEL =\n 'font-sans box-border overflow-auto outline-none rounded-[var(--malachite-radius-xl,12px)] border border-solid border-[var(--malachite-card-border,rgb(232,232,232))] bg-[var(--malachite-card-background,rgb(255,255,255))] text-[var(--malachite-text-primary,rgb(10,10,10))]';\n\nconst ELEVATION: Record<NonNullable<PopoverBaseProps['elevation']>, string> = {\n default: '[box-shadow:0px_4px_10px_0px_var(--malachite-card-shadow,rgba(0,0,0,0.1))]',\n raised: '[box-shadow:0px_8px_24px_0px_var(--malachite-card-shadow,rgba(0,0,0,0.1))]',\n};\n\nconst PADDING: Record<NonNullable<PopoverBaseProps['padding']>, string> = {\n none: 'p-0',\n small: 'p-1',\n medium: 'p-2',\n};\n\nconst pathHits = (path: EventTarget[], nodes: Iterable<Element | null | undefined>): boolean => {\n for (const node of nodes) {\n if (node && path.includes(node)) {\n return true;\n }\n }\n return false;\n};\n\nconst KEYBOARD_OPEN_KEY: Record<string, string> = {\n bottom: 'ArrowDown',\n top: 'ArrowUp',\n right: 'ArrowRight',\n left: 'ArrowLeft',\n};\n\nconst composedPathOf = (node: EventTarget | null): Node[] => {\n if (!(node instanceof Node)) {\n return [];\n }\n const root = node.getRootNode();\n return [node, ...(root instanceof ShadowRoot ? composedPathOf(root.host) : [])];\n};\n\nconst subscribeToNothing = () => () => undefined;\nconst onClient = () => true;\nconst onServer = () => false;\n\nconst focusTarget = (panel: HTMLElement, initial: HTMLElement | null | undefined): HTMLElement =>\n initial ?? firstTabStopIn(panel) ?? panel;\n\n/** An anchored, non-modal panel; nested Popovers count as inside their parent. */\nconst PopoverRoot: React.FC<PopoverProps> = ({\n trigger,\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom-start',\n openOn = 'click',\n width = 'content',\n padding = 'small',\n anchorRef,\n offset = 'small',\n elevation = 'default',\n initialFocusRef,\n role = 'dialog',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n className = '',\n}) => {\n const parent = useContext(PopoverTreeContext);\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const isOpen = controlledOpen ?? uncontrolledOpen;\n const isClient = useSyncExternalStore(subscribeToNothing, onClient, onServer);\n\n const triggerRef = useRef<HTMLElement | null>(null);\n const hostRef = useRef<HTMLDivElement | null>(null);\n const popupIdentity = usePopupLayer('popover', isOpen, hostRef);\n const [panel, setPanel] = useState<HTMLDivElement | null>(null);\n const heldByChildren = useRef(0);\n const focusOnOpen = useRef(false);\n const returningFocus = useRef(false);\n const pointerPressedTrigger = useRef(false);\n\n const isOpenRef = useLatestRef(isOpen);\n const controlledRef = useLatestRef(controlledOpen);\n const onOpenChangeRef = useLatestRef(onOpenChange);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (next === isOpenRef.current) {\n return;\n }\n if (controlledRef.current === undefined) {\n setUncontrolledOpen(next);\n }\n onOpenChangeRef.current?.(next);\n },\n [isOpenRef, controlledRef, onOpenChangeRef],\n );\n\n const { pointerInside, focusInside, triggerFocused, cancelClose, scheduleClose } =\n useHoverClose({\n isOpenRef,\n heldByChildren,\n setOpen,\n });\n\n const { tree, ownedSources } = usePopoverTree({\n parent,\n isOpen,\n openOn,\n isOpenRef,\n heldByChildren,\n cancelClose,\n scheduleClose,\n });\n\n const geometry = usePopoverPosition({\n isOpen,\n panel,\n hostRef,\n triggerRef,\n anchorRef,\n placement,\n width,\n offset,\n });\n\n useEffect(() => {\n if (!isOpen) {\n return;\n }\n const closeOnOutsidePress = (event: MouseEvent) => {\n const path = event.composedPath();\n const inside = pathHits(path, [\n triggerRef.current,\n hostRef.current,\n ...[...ownedSources.current].map((source) => source()),\n ]);\n if (!inside) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', closeOnOutsidePress, true);\n const popEscapeLayer = pushEscapeLayer(() => setOpen(false));\n return () => {\n document.removeEventListener('mousedown', closeOnOutsidePress, true);\n popEscapeLayer();\n pointerInside.current = false;\n const active = getDeepActiveElement();\n if (focusInside.current && (!active || active === document.body)) {\n returningFocus.current = true;\n triggerRef.current?.focus({ preventScroll: true });\n returningFocus.current = false;\n }\n focusInside.current = false;\n };\n }, [isOpen, setOpen, ownedSources, pointerInside, focusInside]);\n\n const shown = isOpen && panel !== null && geometry !== null;\n\n useEffect(() => {\n const shouldFocus = openOn === 'click' || focusOnOpen.current;\n if (!shown || !panel || !shouldFocus) {\n return;\n }\n focusOnOpen.current = false;\n focusTarget(panel, initialFocusRef?.current).focus({ preventScroll: true });\n }, [shown, panel, openOn, initialFocusRef]);\n\n const openWithFocus = () => {\n cancelClose();\n if (isOpen && panel) {\n focusTarget(panel, initialFocusRef?.current).focus({ preventScroll: true });\n return;\n }\n focusOnOpen.current = true;\n setOpen(true);\n };\n\n const isInside = (node: EventTarget | null): boolean => {\n const containers = [\n triggerRef.current,\n hostRef.current,\n panel,\n ...[...ownedSources.current].map((source) => source()),\n ];\n return composedPathOf(node).some((step) =>\n containers.some((container) => container?.contains(step)),\n );\n };\n\n const closeIfFocusLeft = (next: EventTarget | null) => {\n if (!next) {\n return;\n }\n queueMicrotask(() => {\n if (!isInside(next) && !isInside(getDeepActiveElement())) {\n setOpen(false);\n }\n });\n };\n\n const hoverHandlers =\n openOn === 'hover'\n ? {\n onMouseEnter: () => {\n pointerInside.current = true;\n cancelClose();\n setOpen(true);\n },\n onMouseLeave: () => {\n pointerInside.current = false;\n scheduleClose();\n },\n onPanelMouseOver: () => {\n pointerInside.current = true;\n cancelClose();\n },\n }\n : null;\n\n const triggerProps = trigger.props as Record<string, unknown>;\n type Handler<E extends React.SyntheticEvent> = ((event: E) => void) | undefined;\n\n const ownTriggerRef = elementRef<HTMLElement>(trigger);\n const composedTriggerRef = useMemo(\n () => composeRefs(ownTriggerRef, triggerRef),\n [ownTriggerRef],\n );\n const openKey = KEYBOARD_OPEN_KEY[placement.split('-')[0]];\n\n const clonedTrigger = React.cloneElement(trigger, {\n ref: composedTriggerRef,\n 'aria-haspopup': role,\n 'aria-expanded': isOpen,\n onClick: chainHandler(\n triggerProps.onClick as Handler<React.MouseEvent>,\n (event: React.MouseEvent) => {\n if (openOn !== 'hover') {\n setOpen(!isOpen);\n return;\n }\n const fromKeyboard = event.detail === 0;\n if (fromKeyboard) {\n openWithFocus();\n return;\n }\n cancelClose();\n setOpen(true);\n },\n ),\n ...(hoverHandlers\n ? {\n onMouseEnter: chainHandler(\n triggerProps.onMouseEnter as Handler<React.MouseEvent>,\n hoverHandlers.onMouseEnter,\n ),\n onMouseLeave: chainHandler(\n triggerProps.onMouseLeave as Handler<React.MouseEvent>,\n hoverHandlers.onMouseLeave,\n ),\n onMouseDown: chainHandler(\n triggerProps.onMouseDown as Handler<React.MouseEvent>,\n () => {\n pointerPressedTrigger.current = true;\n setTimeout(() => {\n pointerPressedTrigger.current = false;\n });\n },\n ),\n onFocus: chainHandler(triggerProps.onFocus as Handler<React.FocusEvent>, () => {\n const fromPointer = pointerPressedTrigger.current;\n pointerPressedTrigger.current = false;\n triggerFocused.current = !fromPointer && !returningFocus.current;\n if (returningFocus.current) {\n return;\n }\n cancelClose();\n setOpen(true);\n }),\n onKeyDown: chainHandler(\n triggerProps.onKeyDown as Handler<React.KeyboardEvent>,\n (event: React.KeyboardEvent) => {\n if (event.key !== openKey) {\n return;\n }\n event.preventDefault();\n openWithFocus();\n },\n ),\n }\n : {}),\n onBlur: chainHandler(\n triggerProps.onBlur as Handler<React.FocusEvent>,\n (event: React.FocusEvent) => {\n triggerFocused.current = false;\n if (!isOpen || isInside(event.relatedTarget)) {\n return;\n }\n if (openOn === 'hover') {\n scheduleClose();\n return;\n }\n closeIfFocusLeft(event.relatedTarget);\n },\n ),\n } as Record<string, unknown>);\n\n const panelStyle: React.CSSProperties = {\n maxHeight: geometry?.maxHeight,\n maxWidth: `calc(100vw - ${MENU_VIEWPORT_PADDING_PX * 2}px)`,\n visibility: geometry ? 'visible' : 'hidden',\n };\n\n return (\n <>\n {clonedTrigger}\n {isOpen &&\n isClient &&\n createPortal(\n <PopoverTreeContext.Provider value={tree}>\n <ShadowRootWrapper\n hostRef={hostRef}\n hostProps={popupIdentity}\n hostStyle={{\n position: 'fixed',\n top: geometry?.top ?? 0,\n left: geometry?.left ?? 0,\n }}\n >\n <div\n ref={setPanel}\n role={role}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n data-side={geometry?.side}\n tabIndex={-1}\n className={`${PANEL} ${ELEVATION[elevation]} ${PADDING[padding]} ${className}`.trim()}\n style={panelStyle}\n // React's mouseenter stops at the shadow host, so the panel listens for mouseover.\n onMouseOver={hoverHandlers?.onPanelMouseOver}\n onMouseLeave={hoverHandlers?.onMouseLeave}\n onFocus={() => {\n focusInside.current = true;\n cancelClose();\n }}\n onBlur={(event) => {\n if (isInside(event.relatedTarget)) {\n return;\n }\n focusInside.current = false;\n if (openOn === 'hover') {\n scheduleClose();\n return;\n }\n closeIfFocusLeft(event.relatedTarget);\n }}\n >\n {children}\n </div>\n </ShadowRootWrapper>\n </PopoverTreeContext.Provider>,\n document.body,\n )}\n </>\n );\n};\n\nexport const Popover = Object.assign(PopoverRoot, {\n Header: PopoverHeader,\n Action: PopoverAction,\n List: PopoverList,\n Section: PopoverSection,\n Empty: PopoverEmpty,\n});\n\nexport default Popover;\n"],"names":["PANEL","ELEVATION","PADDING","pathHits","path","nodes","node","KEYBOARD_OPEN_KEY","composedPathOf","root","subscribeToNothing","onClient","onServer","focusTarget","panel","initial","firstTabStopIn","PopoverRoot","trigger","children","controlledOpen","defaultOpen","onOpenChange","placement","openOn","width","padding","anchorRef","offset","elevation","initialFocusRef","role","ariaLabel","ariaLabelledBy","className","parent","useContext","PopoverTreeContext","uncontrolledOpen","setUncontrolledOpen","useState","isOpen","isClient","useSyncExternalStore","triggerRef","useRef","hostRef","popupIdentity","usePopupLayer","setPanel","heldByChildren","focusOnOpen","returningFocus","pointerPressedTrigger","isOpenRef","useLatestRef","controlledRef","onOpenChangeRef","setOpen","useCallback","next","_a","pointerInside","focusInside","triggerFocused","cancelClose","scheduleClose","useHoverClose","tree","ownedSources","usePopoverTree","geometry","usePopoverPosition","useEffect","closeOnOutsidePress","event","source","popEscapeLayer","pushEscapeLayer","active","getDeepActiveElement","shown","shouldFocus","openWithFocus","isInside","containers","step","container","closeIfFocusLeft","hoverHandlers","triggerProps","ownTriggerRef","elementRef","composedTriggerRef","useMemo","composeRefs","openKey","clonedTrigger","React","chainHandler","fromPointer","panelStyle","MENU_VIEWPORT_PADDING_PX","jsxs","Fragment","createPortal","jsx","ShadowRootWrapper","Popover","PopoverHeader","PopoverAction","PopoverList","PopoverSection","PopoverEmpty"],"mappings":"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"}