themelia-react-ui 2.0.2 → 2.0.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/CHANGELOG.md +17 -7
- package/README.md +9 -13
- package/THIRD_PARTY_NOTICES.md +6 -12
- package/dist/{auth-ax2BqjrI.js → auth-BGua8ouh.js} +2 -2
- package/dist/{auth-ax2BqjrI.js.map → auth-BGua8ouh.js.map} +1 -1
- package/dist/base/cascader.js +1 -1
- package/dist/base/combobox.js +2 -2
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/value-inputs.js +1 -1
- package/dist/blocks/commerce.js +1 -1
- package/dist/{combobox-xCQ2RMNE.js → combobox-DaHESuiL.js} +154 -108
- package/dist/combobox-DaHESuiL.js.map +1 -0
- package/dist/{combobox-C0EQW6dr.js → combobox-Dxo2fAYQ.js} +342 -340
- package/dist/combobox-Dxo2fAYQ.js.map +1 -0
- package/dist/{comments-BYYlTA8E.js → comments-DD0DUPwJ.js} +4 -4
- package/dist/{comments-BYYlTA8E.js.map → comments-DD0DUPwJ.js.map} +1 -1
- package/dist/components/base/combobox/combobox-field.d.ts +16 -0
- package/dist/components/ui/combobox-dismiss.d.ts +16 -0
- package/dist/components/ui/combobox.d.ts +11 -6
- package/dist/components/ui/dialog.d.ts +1 -1
- package/dist/components/ui/popover.d.ts +1 -1
- package/dist/components/ui/sheet.d.ts +1 -1
- package/dist/{date-picker-ay0Pha_a.js → date-picker-B2K3ucWn.js} +2 -2
- package/dist/{date-picker-ay0Pha_a.js.map → date-picker-B2K3ucWn.js.map} +1 -1
- package/dist/{date-pickers-Ccw8DL2b.js → date-pickers-Ds8gLaoP.js} +3 -3
- package/dist/{date-pickers-Ccw8DL2b.js.map → date-pickers-Ds8gLaoP.js.map} +1 -1
- package/dist/features/activities.js +2 -2
- package/dist/features/async-preview.js +1 -1
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +2 -2
- package/dist/features/email-composer.js +2 -2
- package/dist/features/event-calendar.js +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +1 -1
- package/dist/features/map.js +1 -1
- package/dist/features/media-library.js +1 -1
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +1 -1
- package/dist/features/resource-assignment.js +1 -1
- package/dist/features/schema-form.js +1 -1
- package/dist/features/suggestions.js +1 -1
- package/dist/features/theme-tweaker.js +2 -2
- package/dist/{filters-BGfvjP4d.js → filters-DJVAveHA.js} +4 -4
- package/dist/{filters-BGfvjP4d.js.map → filters-DJVAveHA.js.map} +1 -1
- package/dist/{header-CGXuhcRm.js → header-BSfIEWbI.js} +4 -4
- package/dist/{header-CGXuhcRm.js.map → header-BSfIEWbI.js.map} +1 -1
- package/dist/{hooks-Dkz0K2WT.js → hooks-ClH9thn4.js} +2 -2
- package/dist/{hooks-Dkz0K2WT.js.map → hooks-ClH9thn4.js.map} +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/page.js +1 -1
- package/dist/layout/sidebar.js +2 -2
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +6 -6
- package/dist/lib/use-popup-focus-recovery.d.ts +8 -0
- package/dist/{mentions-utuUvH1K.js → mentions-CGlEJ15c.js} +2 -2
- package/dist/{mentions-utuUvH1K.js.map → mentions-CGlEJ15c.js.map} +1 -1
- package/dist/{overlays-DNWmZrJ4.js → overlays-tMkF-VAN.js} +270 -268
- package/dist/overlays-tMkF-VAN.js.map +1 -0
- package/dist/{page-Bgl1F560.js → page-CL9YeH_V.js} +2 -2
- package/dist/{page-Bgl1F560.js.map → page-CL9YeH_V.js.map} +1 -1
- package/dist/{popover-7_m66eYW.js → popover-gnTOhbFM.js} +62 -60
- package/dist/popover-gnTOhbFM.js.map +1 -0
- package/dist/{popover-menu-B9WWygpa.js → popover-menu-Cn9rUkdc.js} +2 -2
- package/dist/{popover-menu-B9WWygpa.js.map → popover-menu-Cn9rUkdc.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/{sheet-CGpB3omz.js → sheet-ijlsjq-n.js} +70 -68
- package/dist/sheet-ijlsjq-n.js.map +1 -0
- package/dist/{sidebar-CPx_7YBa.js → sidebar-Db6gkh3U.js} +2 -2
- package/dist/{sidebar-CPx_7YBa.js.map → sidebar-Db6gkh3U.js.map} +1 -1
- package/dist/{sidebar-A0ElHINE.js → sidebar-DkTO4VTO.js} +3 -3
- package/dist/{sidebar-A0ElHINE.js.map → sidebar-DkTO4VTO.js.map} +1 -1
- package/dist/use-popup-focus-recovery-C0QPvgOR.js +36 -0
- package/dist/use-popup-focus-recovery-C0QPvgOR.js.map +1 -0
- package/dist/{value-inputs-DXPDjvBU.js → value-inputs-TaX4OjNk.js} +3 -3
- package/dist/{value-inputs-DXPDjvBU.js.map → value-inputs-TaX4OjNk.js.map} +1 -1
- package/dist/{workspace-Cdrg7k9f.js → workspace-B-OEm3Kf.js} +2 -2
- package/dist/{workspace-Cdrg7k9f.js.map → workspace-B-OEm3Kf.js.map} +1 -1
- package/docs/consumer-skill/SKILL.md +1 -1
- package/docs/consumer-skill/references/agents-md.md +1 -1
- package/docs/consumer-skill/references/installation.md +6 -0
- package/docs/consumer-skill/references/public-api.json +2 -2
- package/docs/consumer-skill/references/tokens.json +1 -1
- package/docs/consumer-skill/references/workflows.md +5 -4
- package/package.json +3 -3
- package/dist/combobox-C0EQW6dr.js.map +0 -1
- package/dist/combobox-xCQ2RMNE.js.map +0 -1
- package/dist/overlays-DNWmZrJ4.js.map +0 -1
- package/dist/popover-7_m66eYW.js.map +0 -1
- package/dist/sheet-CGpB3omz.js.map +0 -1
|
@@ -8,24 +8,25 @@ import { t as a } from "./slot-CLF9kLrS.js";
|
|
|
8
8
|
import { t as o } from "./structure-BmisBK-3.js";
|
|
9
9
|
import { a as s } from "./surface-recipes-BKRVW8Os.js";
|
|
10
10
|
import { a as c, r as l } from "./popover.recipes-D3j8R8Yp.js";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
11
|
+
import { t as u } from "./use-popup-focus-recovery-C0QPvgOR.js";
|
|
12
|
+
import * as d from "react";
|
|
13
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
14
|
+
import { Popover as m } from "@base-ui/react/popover";
|
|
14
15
|
//#region src/components/ui/popover.tsx
|
|
15
|
-
function
|
|
16
|
-
return /* @__PURE__ */
|
|
16
|
+
function h({ ...e }) {
|
|
17
|
+
return /* @__PURE__ */ f(m.Root, {
|
|
17
18
|
"data-slot": "popover",
|
|
18
19
|
...e
|
|
19
20
|
});
|
|
20
21
|
}
|
|
21
|
-
function
|
|
22
|
-
let o = e ? /* @__PURE__ */
|
|
22
|
+
function g({ asChild: e = !1, nativeButton: t, render: n, children: r, ...i }) {
|
|
23
|
+
let o = e ? /* @__PURE__ */ f(a, {}) : void 0, s = typeof n == "function" ? ((e, t) => {
|
|
23
24
|
let { nativeButton: r, ...i } = e;
|
|
24
25
|
return n(i, t);
|
|
25
26
|
}) : n, c = !0;
|
|
26
|
-
e &&
|
|
27
|
+
e && d.isValidElement(r) && (c = typeof r.type == "string" ? r.type === "button" : !("href" in (r.props ?? {})));
|
|
27
28
|
let l = t ?? (!e || c);
|
|
28
|
-
return /* @__PURE__ */
|
|
29
|
+
return /* @__PURE__ */ f(m.Trigger, {
|
|
29
30
|
"data-slot": "popover-trigger",
|
|
30
31
|
render: o ?? s,
|
|
31
32
|
nativeButton: l,
|
|
@@ -33,56 +34,57 @@ function h({ asChild: e = !1, nativeButton: t, render: n, children: r, ...i }) {
|
|
|
33
34
|
children: r
|
|
34
35
|
});
|
|
35
36
|
}
|
|
36
|
-
function
|
|
37
|
-
return e ? /* @__PURE__ */
|
|
37
|
+
function _({ asChild: e = !1, ...t }) {
|
|
38
|
+
return e ? /* @__PURE__ */ f(a, { ...t }) : /* @__PURE__ */ f("span", {
|
|
38
39
|
"data-slot": "popover-anchor",
|
|
39
40
|
...t
|
|
40
41
|
});
|
|
41
42
|
}
|
|
42
|
-
function
|
|
43
|
-
let
|
|
43
|
+
function v({ className: n, container: a, anchor: o, align: s = "center", alignOffset: c = 0, side: l = "bottom", sideOffset: p = 4, disablePortal: h = !1, positionMethod: g = h ? "absolute" : r, onOpenAutoFocus: _, onInteractOutside: v, onFocusCapture: y, ...b }) {
|
|
44
|
+
let x = e(a), S = u(y), [C, w] = d.useState(null), T = /* @__PURE__ */ f(m.Positioner, {
|
|
44
45
|
anchor: o,
|
|
45
|
-
positionMethod:
|
|
46
|
+
positionMethod: g,
|
|
46
47
|
align: s,
|
|
47
48
|
alignOffset: c,
|
|
48
49
|
side: l,
|
|
49
|
-
sideOffset:
|
|
50
|
+
sideOffset: p,
|
|
50
51
|
className: "isolate z-50",
|
|
51
|
-
children: /* @__PURE__ */
|
|
52
|
+
children: /* @__PURE__ */ f(m.Popup, {
|
|
52
53
|
"data-slot": "popover-content",
|
|
53
54
|
className: t(i.popup, "bg-popover text-popover-foreground ring-foreground/10 flex flex-col gap-space-xl rounded-radius p-surface text-sm shadow-md ring-1 z-50 w-72 origin-(--transform-origin) outline-hidden", n),
|
|
54
|
-
...
|
|
55
|
+
...b,
|
|
56
|
+
onFocusCapture: S
|
|
55
57
|
})
|
|
56
58
|
});
|
|
57
|
-
return
|
|
59
|
+
return h ? /* @__PURE__ */ f("div", {
|
|
58
60
|
"data-popover-inline-host": "",
|
|
59
61
|
className: "contents",
|
|
60
|
-
ref:
|
|
61
|
-
children: /* @__PURE__ */
|
|
62
|
-
container:
|
|
63
|
-
children:
|
|
62
|
+
ref: w,
|
|
63
|
+
children: /* @__PURE__ */ f(m.Portal, {
|
|
64
|
+
container: C,
|
|
65
|
+
children: T
|
|
64
66
|
})
|
|
65
|
-
}) : /* @__PURE__ */
|
|
66
|
-
container:
|
|
67
|
-
children:
|
|
67
|
+
}) : /* @__PURE__ */ f(m.Portal, {
|
|
68
|
+
container: x,
|
|
69
|
+
children: T
|
|
68
70
|
});
|
|
69
71
|
}
|
|
70
|
-
function
|
|
71
|
-
return /* @__PURE__ */
|
|
72
|
+
function y({ className: e, ...n }) {
|
|
73
|
+
return /* @__PURE__ */ f("div", {
|
|
72
74
|
"data-slot": "popover-header",
|
|
73
75
|
className: t("flex flex-col text-sm", e),
|
|
74
76
|
...n
|
|
75
77
|
});
|
|
76
78
|
}
|
|
77
|
-
function
|
|
78
|
-
return /* @__PURE__ */
|
|
79
|
+
function b({ className: e, ...n }) {
|
|
80
|
+
return /* @__PURE__ */ f(m.Title, {
|
|
79
81
|
"data-slot": "popover-title",
|
|
80
82
|
className: t("font-medium", e),
|
|
81
83
|
...n
|
|
82
84
|
});
|
|
83
85
|
}
|
|
84
|
-
function
|
|
85
|
-
return /* @__PURE__ */
|
|
86
|
+
function x({ className: e, ...n }) {
|
|
87
|
+
return /* @__PURE__ */ f(m.Description, {
|
|
86
88
|
"data-slot": "popover-description",
|
|
87
89
|
className: t("text-muted-foreground", e),
|
|
88
90
|
...n
|
|
@@ -90,23 +92,23 @@ function b({ className: e, ...n }) {
|
|
|
90
92
|
}
|
|
91
93
|
//#endregion
|
|
92
94
|
//#region src/components/base/popover/popover.tsx
|
|
93
|
-
function
|
|
95
|
+
function S(e) {
|
|
94
96
|
return typeof e == "string" || typeof e == "number" || typeof e == "bigint";
|
|
95
97
|
}
|
|
96
|
-
var
|
|
98
|
+
var C = d.createContext({
|
|
97
99
|
type: "display",
|
|
98
100
|
flush: !1,
|
|
99
101
|
regionOwned: !1
|
|
100
102
|
});
|
|
101
|
-
function
|
|
103
|
+
function w({ className: e, sideOffset: n = 6, inset: r, type: i, style: a, ...o }) {
|
|
102
104
|
let s = i ?? (r === "compact" ? "menu" : "display");
|
|
103
|
-
return /* @__PURE__ */
|
|
105
|
+
return /* @__PURE__ */ f(C.Provider, {
|
|
104
106
|
value: {
|
|
105
107
|
type: s,
|
|
106
108
|
flush: r === "flush",
|
|
107
109
|
regionOwned: !1
|
|
108
110
|
},
|
|
109
|
-
children: /* @__PURE__ */
|
|
111
|
+
children: /* @__PURE__ */ f(v, {
|
|
110
112
|
"data-surface-type": s,
|
|
111
113
|
sideOffset: n,
|
|
112
114
|
className: t("popover--component", "gap-space-md max-h-[min(var(--available-height),calc(100dvh-2rem))] overflow-y-auto overscroll-contain", l.surface, c[r ?? (s === "menu" ? "compact" : "default")], "[&_button]:active:translate-y-0!", e),
|
|
@@ -115,30 +117,30 @@ function C({ className: e, sideOffset: n = 6, inset: r, type: i, style: a, ...o
|
|
|
115
117
|
})
|
|
116
118
|
});
|
|
117
119
|
}
|
|
118
|
-
function
|
|
119
|
-
let c =
|
|
120
|
-
return /* @__PURE__ */
|
|
121
|
-
className: t("popover-header--component",
|
|
120
|
+
function T({ className: e, children: n, start: r, textGap: i, ...a }) {
|
|
121
|
+
let c = d.useContext(C), u = i ?? (c.type === "menu" ? "dense" : "normal"), m = c.flush && !c.regionOwned, h = c.type === "menu" && !c.regionOwned, g = r != null && r !== !1;
|
|
122
|
+
return /* @__PURE__ */ f(y, {
|
|
123
|
+
className: t("popover-header--component", u === "dense" ? "gap-dense" : "gap-normal", m && (c.type === "menu" ? l.menuRegion : l.display), !m && h && "py-row-y", g && "flex-row items-center gap-space-md", m && s.anchored.header, e),
|
|
122
124
|
...a,
|
|
123
|
-
children: /* @__PURE__ */
|
|
125
|
+
children: /* @__PURE__ */ p(C.Provider, {
|
|
124
126
|
value: {
|
|
125
127
|
...c,
|
|
126
128
|
regionOwned: !0
|
|
127
129
|
},
|
|
128
|
-
children: [r, /* @__PURE__ */
|
|
129
|
-
gap:
|
|
130
|
+
children: [r, /* @__PURE__ */ f(o, {
|
|
131
|
+
gap: u,
|
|
130
132
|
className: t("popover-header--body min-w-0 flex-1", h && !g && "px-row-x"),
|
|
131
133
|
children: n
|
|
132
134
|
})]
|
|
133
135
|
})
|
|
134
136
|
});
|
|
135
137
|
}
|
|
136
|
-
function
|
|
137
|
-
let a =
|
|
138
|
-
return /* @__PURE__ */
|
|
138
|
+
function E({ children: e, className: r, ...i }) {
|
|
139
|
+
let a = d.useContext(C).type === "menu";
|
|
140
|
+
return /* @__PURE__ */ f(b, {
|
|
139
141
|
className: t("popover-title--component", r),
|
|
140
142
|
...i,
|
|
141
|
-
children:
|
|
143
|
+
children: S(e) ? /* @__PURE__ */ f(n, {
|
|
142
144
|
tag: "span",
|
|
143
145
|
type: "inherit",
|
|
144
146
|
size: a ? void 0 : "base",
|
|
@@ -149,12 +151,12 @@ function T({ children: e, className: r, ...i }) {
|
|
|
149
151
|
}) : e
|
|
150
152
|
});
|
|
151
153
|
}
|
|
152
|
-
function
|
|
153
|
-
let a =
|
|
154
|
-
return /* @__PURE__ */
|
|
154
|
+
function D({ children: e, className: r, ...i }) {
|
|
155
|
+
let a = d.useContext(C).type === "menu";
|
|
156
|
+
return /* @__PURE__ */ f(x, {
|
|
155
157
|
className: t("popover-description--component", r),
|
|
156
158
|
...i,
|
|
157
|
-
children:
|
|
159
|
+
children: S(e) ? /* @__PURE__ */ f(n, {
|
|
158
160
|
tag: "span",
|
|
159
161
|
type: "secondary",
|
|
160
162
|
size: a ? "xs" : void 0,
|
|
@@ -164,33 +166,33 @@ function E({ children: e, className: r, ...i }) {
|
|
|
164
166
|
}) : e
|
|
165
167
|
});
|
|
166
168
|
}
|
|
167
|
-
function
|
|
168
|
-
let c =
|
|
169
|
-
return /* @__PURE__ */
|
|
169
|
+
function O({ className: e, children: r, caption: i, ...a }) {
|
|
170
|
+
let c = d.useContext(C), u = i == null && S(r), m = i ?? (u ? r : void 0);
|
|
171
|
+
return /* @__PURE__ */ f(o, {
|
|
170
172
|
direction: "horizontal",
|
|
171
173
|
gap: "sm",
|
|
172
174
|
justify: "end",
|
|
173
175
|
wrap: !0,
|
|
174
176
|
className: t("popover-footer--component pt-space-sm", s.anchored.footer, c.flush && !c.regionOwned && (c.type === "menu" ? l.menuRegion : l.display), e),
|
|
175
177
|
...a,
|
|
176
|
-
children: /* @__PURE__ */
|
|
178
|
+
children: /* @__PURE__ */ p(C.Provider, {
|
|
177
179
|
value: {
|
|
178
180
|
...c,
|
|
179
181
|
regionOwned: !0
|
|
180
182
|
},
|
|
181
|
-
children: [m != null && /* @__PURE__ */
|
|
183
|
+
children: [m != null && /* @__PURE__ */ f("div", {
|
|
182
184
|
className: t("popover-footer--caption me-auto min-w-0 max-w-full", c.type === "menu" && !c.regionOwned && "px-row-x"),
|
|
183
|
-
children:
|
|
185
|
+
children: S(m) ? /* @__PURE__ */ f(n, {
|
|
184
186
|
tag: "span",
|
|
185
187
|
size: "xs",
|
|
186
188
|
type: "secondary",
|
|
187
189
|
children: m
|
|
188
190
|
}) : m
|
|
189
|
-
}), !
|
|
191
|
+
}), !u && r]
|
|
190
192
|
})
|
|
191
193
|
});
|
|
192
194
|
}
|
|
193
195
|
//#endregion
|
|
194
|
-
export {
|
|
196
|
+
export { E as a, g as c, T as i, D as n, h as o, O as r, _ as s, w as t };
|
|
195
197
|
|
|
196
|
-
//# sourceMappingURL=popover-
|
|
198
|
+
//# sourceMappingURL=popover-gnTOhbFM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popover-gnTOhbFM.js","names":["Popover","PopoverPrimitive","React","PopoverContent","PopoverHeader","PopoverTitle","PopoverDescription","React","PopoverContentPrimitive","PopoverHeaderPrimitive","PopoverTitlePrimitive","PopoverDescriptionPrimitive","useThemePortalContainer","Text","anchoredPositionMethod","motionRecipes","Slot","Stack","surfaceDividerRecipes","surfaceInsetClasses","popoverRecipes","usePopupFocusRecovery","React$1","Popover$1","props","Popover","PopoverTrigger","slotRender","asChild","safeRender","render","_nativeButton","rest","renderProps","state","inferredNativeButton","children","resolvedNativeButton","nativeButton","PopoverAnchor","PopoverContent$1","disablePortal","resolvedContainer","container","recoverFocus","onFocusCapture","inlineHost","setInlineHost","content","cn","className","PopoverHeader$1","PopoverTitle$1","PopoverDescription$1","isSimpleText","value","PopoverSurfaceContext","PopoverContent","resolvedType","type","inset","PopoverHeader","surface","copyGap","textGap","band","menu","hasStart","start","PopoverTitle","compact","PopoverDescription","PopoverFooter","childrenAsCaption","caption"],"sources":["../src/components/ui/popover.tsx","../src/components/base/popover/popover.tsx"],"sourcesContent":["import { anchoredPositionMethod } from '../../lib/anchored-positioning';\nimport { usePopupFocusRecovery } from '../../lib/use-popup-focus-recovery';\nimport { motionRecipes } from '../../lib/motion-recipes';\nimport { useThemePortalContainer, type ThemePortalContainer } from '../../lib/theme-scope';\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\"\nimport * as React from \"react\"\n\nimport { Slot } from \"./slot\"\nimport { cn } from \"../../lib/utils\"\n\nfunction Popover({ ...props }: PopoverPrimitive.Root.Props) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n asChild = false,\n nativeButton,\n render,\n children,\n ...props\n}: PopoverPrimitive.Trigger.Props & { asChild?: boolean; nativeButton?: boolean }) {\n const slotRender = asChild ? <Slot /> : undefined\n const safeRender: PopoverPrimitive.Trigger.Props[\"render\"] = typeof render === \"function\"\n ? ((renderProps, state) => {\n const { nativeButton: _nativeButton, ...rest } = renderProps as Record<string, unknown>\n void _nativeButton\n return render(rest as typeof renderProps, state)\n })\n : render\n let inferredNativeButton = true\n if (asChild && React.isValidElement(children)) {\n if (typeof children.type === \"string\") {\n inferredNativeButton = children.type === \"button\"\n } else {\n const childProps = (children.props ?? {}) as Record<string, unknown>\n inferredNativeButton = !(\"href\" in childProps)\n }\n }\n const resolvedNativeButton = nativeButton ?? (asChild ? inferredNativeButton : true)\n return (\n <PopoverPrimitive.Trigger\n data-slot=\"popover-trigger\"\n render={slotRender ?? safeRender}\n nativeButton={resolvedNativeButton}\n {...props}\n >\n {children}\n </PopoverPrimitive.Trigger>\n )\n}\n\nfunction PopoverAnchor({\n asChild = false,\n ...props\n}: React.ComponentPropsWithoutRef<\"span\"> & { asChild?: boolean }) {\n if (asChild) {\n return <Slot {...props} />\n }\n\n return <span data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n container,\n anchor,\n align = \"center\",\n alignOffset = 0,\n side = \"bottom\",\n sideOffset = 4,\n disablePortal = false,\n positionMethod = disablePortal ? \"absolute\" : anchoredPositionMethod,\n onOpenAutoFocus,\n onInteractOutside,\n onFocusCapture,\n ...props\n}: PopoverPrimitive.Popup.Props &\n Pick<\n PopoverPrimitive.Positioner.Props,\n \"anchor\" | \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"positionMethod\"\n > & {\n disablePortal?: boolean\n onOpenAutoFocus?: (event: Event) => void\n onInteractOutside?: (event: Event) => void\n } & { container?: ThemePortalContainer }) {\n const resolvedContainer = useThemePortalContainer(container)\n const recoverFocus = usePopupFocusRecovery(onFocusCapture)\n const [inlineHost, setInlineHost] = React.useState<HTMLDivElement | null>(null)\n void onOpenAutoFocus\n void onInteractOutside\n\n const content = (\n <PopoverPrimitive.Positioner\n anchor={anchor}\n positionMethod={positionMethod}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <PopoverPrimitive.Popup\n data-slot=\"popover-content\"\n className={cn(\n motionRecipes.popup,\n \"bg-popover text-popover-foreground ring-foreground/10 flex flex-col gap-space-xl rounded-radius p-surface text-sm shadow-md ring-1 z-50 w-72 origin-(--transform-origin) outline-hidden\",\n className\n )}\n {...props}\n onFocusCapture={recoverFocus}\n />\n </PopoverPrimitive.Positioner>\n )\n\n if (disablePortal) {\n // Base UI requires Portal context; a local host preserves inline DOM locality.\n return <div data-popover-inline-host=\"\" className=\"contents\" ref={setInlineHost}>\n <PopoverPrimitive.Portal container={inlineHost}>{content}</PopoverPrimitive.Portal>\n </div>\n }\n\n return <PopoverPrimitive.Portal container={resolvedContainer}>{content}</PopoverPrimitive.Portal>\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props) {\n return (\n <PopoverPrimitive.Title\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: PopoverPrimitive.Description.Props) {\n return (\n <PopoverPrimitive.Description\n data-slot=\"popover-description\"\n className={cn(\"text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n}\n","import { surfaceDividerRecipes } from '../../../lib/surface-recipes';\n/**\n * Popover — public wrapper around the internal Base UI popover implementation.\n *\n * What this layer adds on top of the primitive:\n * - Library-default `sideOffset` (6px) and an explicit inset contract:\n * card/multi-content popovers use `default`, item collections use\n * `compact`, and mixed region-owned compositions use `flush`.\n * - A consistent shadow + border treatment matching the rest of the\n * library (one semantic border, no extra primitive ring).\n * - Wraps the primitive parts with stable DOM hooks and adds a separated\n * footer region while preserving the compound-component pattern:\n * `<Popover>`, `<PopoverTrigger>`, `<PopoverContent>` exactly as\n * they would with the primitive.\n *\n * Use the shared inset role for padding; className owns placement. Override\n * `--surface-x` / `--surface-y` / `--space-scale` on a wrapper for surface-wide\n * density tweaks.\n */\nimport * as React from 'react';\n\nimport {\n\tPopover as PopoverPrimitive,\n\tPopoverAnchor,\n\tPopoverContent as PopoverContentPrimitive,\n\tPopoverDescription as PopoverDescriptionPrimitive,\n\tPopoverHeader as PopoverHeaderPrimitive,\n\tPopoverTitle as PopoverTitlePrimitive,\n\tPopoverTrigger,\n} from '../../ui/popover';\nimport { Text } from '../../typography';\nimport { Stack, type TextGap } from '../structure';\nimport { cn } from '../../../lib/utils';\nimport { popoverRecipes, surfaceInsetClasses, type PopoverContentType } from './popover.recipes';\nexport type { PopoverContentType } from './popover.recipes';\n\nfunction isSimpleText(value: React.ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\ntype PopoverContentBaseProps = React.ComponentProps<typeof PopoverContentPrimitive>;\n\nexport type PopoverContentInset = 'default' | 'compact' | 'flush';\n\nexport type PopoverContentProps = PopoverContentBaseProps & {\n\t/**\n\t * Surface inset role. `default` is for card-like or multi-content popovers,\n\t * `compact` for pure item/option collections, and `flush` when child regions\n\t * own their padding.\n\t */\n\tinset?: PopoverContentInset;\n\t/** Anatomy role; supplies the inferred inset only when inset is omitted. */\n\ttype?: PopoverContentType;\n};\n\nconst PopoverSurfaceContext = React.createContext({ type: 'display' as PopoverContentType, flush: false, regionOwned: false });\n\n/** Anchored content surface with a semantic inset role and package popover chrome. */\nfunction PopoverContent({\n\tclassName,\n\tsideOffset = 6,\n\tinset,\n\ttype,\n\tstyle,\n\t...props\n}: PopoverContentProps) {\n const resolvedType = type ?? (inset === 'compact' ? 'menu' : 'display');\n return (\n <PopoverSurfaceContext.Provider value={{ type: resolvedType, flush: inset === 'flush', regionOwned: false }}>\n\t\t<PopoverContentPrimitive\n\t\t\tdata-surface-type={resolvedType}\n\t\t\tsideOffset={sideOffset}\n\t\t\tclassName={cn('popover--component',\n\t\t\t\t// A popover is a small surface, not a compressed tooltip. The\n\t\t\t\t// unsuffixed surface token is the package-wide default and remains\n\t\t\t\t// responsive to scoped spacing changes.\n\t\t\t\t'gap-space-md max-h-[min(var(--available-height),calc(100dvh-2rem))] overflow-y-auto overscroll-contain',\n\t\t\t\tpopoverRecipes.surface,\n\t\t\t\tsurfaceInsetClasses[inset ?? (resolvedType === 'menu' ? 'compact' : 'default')],\n\t\t\t\t// Raw shadcn/Base UI buttons still carry a generic 1px press\n\t\t\t\t// translation. Popovers are stable anchored surfaces; moving a\n\t\t\t\t// calendar day or menu action makes the interaction feel soft.\n\t\t\t\t'[&_button]:active:translate-y-0!',\n\t\t\t\t// The shared recipe owns the semantic hairline border and shadow.\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={style}\n\t\t\t{...props}\n\t\t/>\n </PopoverSurfaceContext.Provider>\n\t);\n}\n\ntype PopoverHeaderBaseProps = React.ComponentProps<typeof PopoverHeaderPrimitive> & {\n /** Leading control, aligned with collection highlight edges rather than label text. */\n start?: React.ReactNode;\n /** Copy rhythm. Defaults to dense for menus and normal for display surfaces. */\n textGap?: TextGap;\n};\n\nfunction PopoverHeader({ className, children, start, textGap, ...props }: PopoverHeaderBaseProps) {\n const surface = React.useContext(PopoverSurfaceContext);\n const copyGap = textGap ?? (surface.type === 'menu' ? 'dense' : 'normal');\n const band = surface.flush && !surface.regionOwned;\n const menu = surface.type === 'menu' && !surface.regionOwned;\n const hasStart = start != null && start !== false;\n return (\n\t\t<PopoverHeaderPrimitive\n\t\t\tclassName={cn(\n 'popover-header--component',\n copyGap === 'dense' ? 'gap-dense' : 'gap-normal',\n band && (surface.type === 'menu' ? popoverRecipes.menuRegion : popoverRecipes.display),\n !band && menu && 'py-row-y',\n hasStart && 'flex-row items-center gap-space-md',\n band && surfaceDividerRecipes.anchored.header,\n className,\n )}\n\t\t\t{...props}\n\t\t>\n <PopoverSurfaceContext.Provider value={{ ...surface, regionOwned: true }}>\n {start}\n <Stack gap={copyGap} className={cn('popover-header--body min-w-0 flex-1', menu && !hasStart && 'px-row-x')}>\n {children}\n </Stack>\n </PopoverSurfaceContext.Provider>\n </PopoverHeaderPrimitive>\n\t);\n}\n\ntype PopoverTitleBaseProps = React.ComponentProps<typeof PopoverTitlePrimitive>;\n\nfunction PopoverTitle({ children, className, ...props }: PopoverTitleBaseProps) {\n const compact = React.useContext(PopoverSurfaceContext).type === 'menu';\n return (\n\t\t<PopoverTitlePrimitive\n\t\t\tclassName={cn('popover-title--component', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\ttype=\"inherit\"\n\t\t\t\t\tsize={compact ? undefined : 'base'}\n\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\tlineHeight=\"snug\"\n\t\t\t\t\tclassName=\"popover-title--text\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</PopoverTitlePrimitive>\n\t);\n}\n\ntype PopoverDescriptionBaseProps = React.ComponentProps<typeof PopoverDescriptionPrimitive>;\n\nfunction PopoverDescription({ children, className, ...props }: PopoverDescriptionBaseProps) {\n const compact = React.useContext(PopoverSurfaceContext).type === 'menu';\n return (\n\t\t<PopoverDescriptionPrimitive\n\t\t\tclassName={cn('popover-description--component', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isSimpleText(children) ? (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\ttype=\"secondary\"\n size={compact ? 'xs' : undefined}\n\t\t\t\t\tlineHeight={compact ? 'normal' : 'relaxed'}\n\t\t\t\t\tclassName=\"popover-description--text\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : children}\n\t\t</PopoverDescriptionPrimitive>\n\t);\n}\n\ntype PopoverFooterProps = React.ComponentProps<'div'> & {\n /** Leading supporting content, aligned with collection labels; children are trailing actions. */\n caption?: React.ReactNode;\n};\n\nfunction PopoverFooter({ className, children, caption, ...props }: PopoverFooterProps) {\n const surface = React.useContext(PopoverSurfaceContext);\n const childrenAsCaption = caption == null && isSimpleText(children);\n const content = caption ?? (childrenAsCaption ? children : undefined);\n return (\n\t\t<Stack\n\t\t\tdirection=\"horizontal\"\n\t\t\tgap=\"sm\"\n\t\t\tjustify=\"end\"\n\t\t\twrap\n\t\t\tclassName={cn(\n\t\t\t\t'popover-footer--component pt-space-sm', surfaceDividerRecipes.anchored.footer,\n surface.flush && !surface.regionOwned && (surface.type === 'menu' ? popoverRecipes.menuRegion : popoverRecipes.display),\n\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n <PopoverSurfaceContext.Provider value={{ ...surface, regionOwned: true }}>\n {content != null && <div className={cn('popover-footer--caption me-auto min-w-0 max-w-full', surface.type === 'menu' && !surface.regionOwned && 'px-row-x')}>\n {isSimpleText(content) ? <Text tag=\"span\" size=\"xs\" type=\"secondary\">{content}</Text> : content}\n </div>}\n {!childrenAsCaption && children}\n </PopoverSurfaceContext.Provider>\n </Stack>\n\t);\n}\n\nexport {\n\tPopoverPrimitive as Popover,\n\tPopoverAnchor,\n\tPopoverContent,\n\tPopoverDescription,\n\tPopoverFooter,\n\tPopoverHeader,\n\tPopoverTitle,\n\tPopoverTrigger,\n};\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { n, t as r } from "./feedback-BYIhtitP.js";
|
|
|
5
5
|
import { i } from "./popover.recipes-D3j8R8Yp.js";
|
|
6
6
|
import { t as a } from "./collection-content-By56pLog.js";
|
|
7
7
|
import { a as o, i as s, l as c, n as l, o as u, r as d, t as f } from "./command-C25VMRII.js";
|
|
8
|
-
import { c as p, i as m, o as h, r as g, t as _ } from "./popover-
|
|
8
|
+
import { c as p, i as m, o as h, r as g, t as _ } from "./popover-gnTOhbFM.js";
|
|
9
9
|
import * as v from "react";
|
|
10
10
|
import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
|
|
11
11
|
//#region src/components/base/popover-menu/popover-menu.types.ts
|
|
@@ -97,4 +97,4 @@ C.displayName = "PopoverMenu";
|
|
|
97
97
|
//#endregion
|
|
98
98
|
export { S as n, C as t };
|
|
99
99
|
|
|
100
|
-
//# sourceMappingURL=popover-menu-
|
|
100
|
+
//# sourceMappingURL=popover-menu-Cn9rUkdc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover-menu-B9WWygpa.js","names":["React","_Fragment","ErrorState","CollectionContent","CommandItem","CommandInput","commandFilter","CommandEmpty","CommandList","CommandGroup","Command","PopoverTrigger","PopoverHeader","Popover","PopoverFooter","PopoverContent","React$1","Fragment$1","defaultPopoverMenuStrings","PopoverMenu","stringsProp","strings","useStrings","searchRef","triggerRef","keyboardDismissal","contentRef","searchOverrides","items","item","filter","value","search","keywords","next","details","onOpenChange","trigger","contentLabelledBy","contentLabel","cn","popoverWidthRecipes","contentClassName","onSearchChange","header","searchValue","loading","loadingSlot","LoadingState","error","onRetry","empty","onSelect","renderItem","footer"],"sources":["../src/components/base/popover-menu/popover-menu.types.ts","../src/components/base/popover-menu/popover-menu.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nexport interface PopoverMenuItem<T = unknown> {\n\t/** Unique identifier; remains distinct from visible search labels. */\n\tvalue: string;\n\t/** Visible label rendered in the row. Override entirely via `renderItem`. */\n\tlabel: ReactNode;\n\t/** Optional secondary line rendered under the label. */\n\tdescription?: ReactNode;\n\t/** Leading icon — keep small (size-icon-md/size-icon max). */\n\ticon?: ReactNode;\n\t/** Show the trailing checkmark when `true`. */\n\tselected?: boolean;\n\t/** Disable the row. */\n\tdisabled?: boolean;\n\t/** Explicit search keywords, useful when the label is structured content. */\n\tsearchValue?: string;\n\t/** Arbitrary payload for `onSelect` consumers. */\n\tdata?: T;\n}\n\nexport interface PopoverMenuStrings {\n\t/** Placeholder for the search input (when `search` is enabled). */\n\tsearchPlaceholder: string;\n\t/** Empty-state copy when filtering yields no items. */\n\tempty: string;\n\t/** Loading-state copy. */\n\tloading: string;\n\t/** Retry action copy when a resource fails. */\n\tretry?: string;\n}\n\nexport const defaultPopoverMenuStrings: PopoverMenuStrings = {\n\tsearchPlaceholder: 'Search…',\n\tempty: 'No results.',\n\tloading: 'Loading…',\n\tretry: 'Retry',\n};\n","import { commandFilter } from '../../../lib/command-filter';\n/**\n * PopoverMenu — blocks wrapper around `base/popover` + `base/command`.\n *\n * Captures the recurring \"trigger → optional header → search → command list\"\n * pattern used by filter facets, operator selects, and similar pickers\n * across the library.\n *\n * Slots (all optional):\n * - `header` — rendered above the search input / list\n * - `footer` — rendered below the list (e.g. confirm/clear buttons)\n * - `empty` — replaces the default empty-state copy\n * - `loading` — replaces the list when `loading` is true\n *\n * Render-prop:\n * - `renderItem={(item, ctx) => ReactNode}` — full control over a row\n *\n * Strings:\n * - `strings={{ searchPlaceholder, empty, loading }}` — merged with defaults\n *\n * For headless usage (custom UI against the same selection state),\n * compose `base/popover` + `base/command` directly.\n */\nimport * as React from 'react';\n\nimport {\n\tCommand,\n\tCommandEmpty,\n\tCommandGroup,\n\tCommandInput,\n\tCommandItem,\n\tCommandList,\n} from '../command';\nimport {\n\tPopover,\n\tPopoverContent,\n PopoverHeader,\n PopoverFooter,\n\tPopoverTrigger,\n} from '../popover';\nimport { LoadingState, ErrorState } from '../feedback';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { popoverWidthRecipes, type CollectionDensity } from '../popover/popover.recipes';\nimport { CollectionContent } from '../popover/collection-content';\n\nimport {\n\tdefaultPopoverMenuStrings,\n\ttype PopoverMenuItem,\n\ttype PopoverMenuStrings,\n} from './popover-menu.types';\n\nexport interface PopoverMenuRenderItemContext {\n\t/** True when the item is the user's currently-active match (keyboard or pointer highlight). */\n\tisHighlighted: boolean;\n}\n\nexport interface PopoverMenuProps<T = unknown> {\n\t/** Vertical row rhythm. Compact and comfortable preserve primary label size and inline room. */\n\tdensity?: CollectionDensity;\n\t/** Trigger element. The popover anchors to it. Pass any clickable. */\n\ttrigger: React.ReactNode;\n\t/** Items to render in the list. */\n\titems: ReadonlyArray<PopoverMenuItem<T>>;\n\t/** Selection callback — fires on row click / Enter. */\n\tonSelect: (item: PopoverMenuItem<T>) => void;\n\n\t/** Controlled open state. Omit for uncontrolled. */\n\topen?: boolean;\n\t/** Open-state callback for controlled / uncontrolled flows. */\n\tonOpenChange?: (open: boolean) => void;\n\n\t/** Show the search input above the list. Default: true. */\n\tsearch?: boolean;\n\t/** Search input value (controlled). */\n\tsearchValue?: string;\n\t/** Search input change callback. */\n\tonSearchChange?: (value: string) => void;\n\n\t/** Async loading flag — replaces stale options and the empty state. */\n\tloading?: boolean;\n\t/** Resource failure replaces the list. The application owns retry and fetching. */\n\terror?: React.ReactNode;\n\tonRetry?: () => void;\n\n\t/** Optional pre-list slot (e.g. a label / eyebrow). */\n\theader?: React.ReactNode;\n\t/** Optional post-list slot (e.g. confirm / clear buttons). */\n\tfooter?: React.ReactNode;\n\t/** Override empty-state slot (defaults to `strings.empty`). */\n\tempty?: React.ReactNode;\n\t/** Override loading slot (defaults to spinner + `strings.loading`). */\n\tloadingSlot?: React.ReactNode;\n\n\t/** Per-item render override. */\n\trenderItem?: (\n\t\titem: PopoverMenuItem<T>,\n\t\tctx: PopoverMenuRenderItemContext,\n\t) => React.ReactNode;\n\n\t/** Override copy. Deep-merged over defaults. */\n\tstrings?: StringsProp<PopoverMenuStrings>;\n\n\t/** Popover content positioning props (forwarded). */\n\talign?: React.ComponentProps<typeof PopoverContent>['align'];\n\t/** Distance from the trigger, in pixels. */\n\tsideOffset?: React.ComponentProps<typeof PopoverContent>['sideOffset'];\n\n\t/** Width override for the popover content. Default: w-56. */\n\tcontentClassName?: string;\n /** Accessible name for the popup. Defaults to the localized search label. */\n contentLabel?: string;\n /** ID of a consumer-owned title used instead of contentLabel. */\n contentLabelledBy?: string;\n}\n\nexport function PopoverMenu<T = unknown>({\n\tdensity = 'default',\n\ttrigger,\n\titems,\n\tonSelect,\n\topen,\n\tonOpenChange,\n\tsearch = true,\n\tsearchValue,\n\tonSearchChange,\n\tloading = false,\n\terror,\n\tonRetry,\n\theader,\n\tfooter,\n\tempty,\n\tloadingSlot,\n\trenderItem,\n\tstrings: stringsProp,\n\talign = 'start',\n\tsideOffset,\n\tcontentClassName,\n contentLabel,\n contentLabelledBy,\n}: PopoverMenuProps<T>) {\n\tconst strings = useStrings(defaultPopoverMenuStrings, stringsProp);\n\tconst searchRef = React.useRef<HTMLInputElement>(null);\n\tconst triggerRef = React.useRef<HTMLButtonElement>(null);\n\tconst keyboardDismissal = React.useRef(false);\n\tconst contentRef = React.useRef<HTMLDivElement>(null);\n const searchOverrides = React.useMemo(() => new Map(\n items.filter(item => item.searchValue !== undefined).map(item => [item.value, item.searchValue!]),\n ), [items]);\n const filter = React.useCallback((value: string, search: string, keywords?: string[]) => (\n searchOverrides.has(value)\n ? commandFilter(searchOverrides.get(value)!, search)\n : commandFilter(value, search, keywords)\n ), [searchOverrides]);\n\n\treturn (\n\t\t<Popover open={open} onOpenChange={(next, details) => {\n keyboardDismissal.current = !next && details.reason === 'escape-key';\n onOpenChange?.(next);\n }} onOpenChangeComplete={next => {\n // Rapid reopen during a focus-out exit can retain Base UI's no-return flag.\n // Restore only an accepted, completed Escape dismissal; outside focus stays owned.\n if (!next && keyboardDismissal.current) {\n keyboardDismissal.current = false;\n triggerRef.current?.focus({ preventScroll: true });\n }\n }}>\n\t\t\t<PopoverTrigger ref={triggerRef} render={trigger as React.ReactElement} />\n\t\t\t<PopoverContent\n\t\t\t\tref={contentRef}\n\t\t\t\taria-label={contentLabelledBy ? undefined : contentLabel ?? strings.searchPlaceholder}\n aria-labelledby={contentLabelledBy}\n align={align}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t\ttype=\"menu\"\n\t\t\t\tinset=\"flush\"\n\t\t\t\tclassName={cn('popover-menu--component', popoverWidthRecipes.sm, 'gap-0 overflow-hidden', contentClassName)}\n\t\t\t>\n\t\t\t\t<Command\n\t\t\t\t\tshouldFilter={!onSearchChange}\n filter={filter}\n\t\t\t\t\tinset=\"flush\"\n\t\t\t\t\tclassName=\"popover-menu--collection\"\n\t\t\t\t>\n\t\t\t\t\t{!!header && (\n\t\t\t\t\t\t<PopoverHeader className=\"popover-menu--header\">\n\t\t\t\t\t\t\t{header}\n\t\t\t\t\t\t</PopoverHeader>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!search && (\n\t\t\t\t\t\t<CommandInput\n\t\t\t\t\t\t\tref={searchRef}\n\t\t\t\t\t\t\tplaceholder={strings.searchPlaceholder}\n\t\t\t\t\t\t\tvalue={searchValue}\n\t\t\t\t\t\t\tonValueChange={onSearchChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<CommandList aria-busy={loading || undefined}>\n\t\t\t\t\t\t{loading ? (loadingSlot !== undefined ? <div role=\"status\" aria-live=\"polite\">{loadingSlot}</div> : <LoadingState label={strings.loading} />) : error ? <ErrorState variant=\"inline\" description={error} onRetry={onRetry ? () => {\n // Retry feedback is replaced by loading. Keep focus on persistent anatomy\n // before its button is removed, including in search-free pickers.\n (searchRef.current ?? contentRef.current)?.focus();\n onRetry();\n } : undefined} retryLabel={strings.retry ?? 'Retry'} /> : <>\n\n\t\t\t\t\t\t<CommandEmpty>{empty ?? strings.empty}</CommandEmpty>\n\n\t\t\t\t\t\t{items.length > 0 && (\n\t\t\t\t\t\t\t<CommandGroup>\n\t\t\t\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t\t\t\t<CommandItem\n\t\t\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\t\t\tdensity={density}\n\t\t\t\t\t\t\t\t\t\tvalue={item.value}\n keywords={item.searchValue !== undefined ? [item.searchValue] : [item.label, item.description].filter((value): value is string => typeof value === 'string')}\n\t\t\t\t\t\t\t\t\t\tonSelect={() => onSelect(item)}\n\t\t\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\t\t\tdata-checked={item.selected || undefined}\n\t\t\t\t\t\t\t\t\t\tclassName=\"data-[checked=true]:**:[svg]:text-primary-accent\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{({ isHighlighted }) => renderItem\n\t\t\t\t\t\t\t\t\t\t\t? renderItem(item, { isHighlighted })\n\t\t\t\t\t\t\t\t\t\t\t: (\n\t\t\t\t\t\t\t\t\t\t\t\t<CollectionContent label={item.label} description={item.description} leading={item.icon} leadingClassName=\"[&_svg]:size-icon\"/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</CommandItem>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</CommandGroup>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>}\n\t\t\t\t\t</CommandList>\n\n\t\t\t\t\t{/* The public surface anatomy owns header and footer bands. */}\n\t\t\t\t\t{!!footer && (\n\t\t\t\t\t\t<PopoverFooter className=\"popover-menu--footer justify-start\">\n\t\t\t\t\t\t\t{footer}\n\t\t\t\t\t\t</PopoverFooter>\n\t\t\t\t\t)}\n\t\t\t\t</Command>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n\nPopoverMenu.displayName = 'PopoverMenu';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"popover-menu-Cn9rUkdc.js","names":["React","_Fragment","ErrorState","CollectionContent","CommandItem","CommandInput","commandFilter","CommandEmpty","CommandList","CommandGroup","Command","PopoverTrigger","PopoverHeader","Popover","PopoverFooter","PopoverContent","React$1","Fragment$1","defaultPopoverMenuStrings","PopoverMenu","stringsProp","strings","useStrings","searchRef","triggerRef","keyboardDismissal","contentRef","searchOverrides","items","item","filter","value","search","keywords","next","details","onOpenChange","trigger","contentLabelledBy","contentLabel","cn","popoverWidthRecipes","contentClassName","onSearchChange","header","searchValue","loading","loadingSlot","LoadingState","error","onRetry","empty","onSelect","renderItem","footer"],"sources":["../src/components/base/popover-menu/popover-menu.types.ts","../src/components/base/popover-menu/popover-menu.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nexport interface PopoverMenuItem<T = unknown> {\n\t/** Unique identifier; remains distinct from visible search labels. */\n\tvalue: string;\n\t/** Visible label rendered in the row. Override entirely via `renderItem`. */\n\tlabel: ReactNode;\n\t/** Optional secondary line rendered under the label. */\n\tdescription?: ReactNode;\n\t/** Leading icon — keep small (size-icon-md/size-icon max). */\n\ticon?: ReactNode;\n\t/** Show the trailing checkmark when `true`. */\n\tselected?: boolean;\n\t/** Disable the row. */\n\tdisabled?: boolean;\n\t/** Explicit search keywords, useful when the label is structured content. */\n\tsearchValue?: string;\n\t/** Arbitrary payload for `onSelect` consumers. */\n\tdata?: T;\n}\n\nexport interface PopoverMenuStrings {\n\t/** Placeholder for the search input (when `search` is enabled). */\n\tsearchPlaceholder: string;\n\t/** Empty-state copy when filtering yields no items. */\n\tempty: string;\n\t/** Loading-state copy. */\n\tloading: string;\n\t/** Retry action copy when a resource fails. */\n\tretry?: string;\n}\n\nexport const defaultPopoverMenuStrings: PopoverMenuStrings = {\n\tsearchPlaceholder: 'Search…',\n\tempty: 'No results.',\n\tloading: 'Loading…',\n\tretry: 'Retry',\n};\n","import { commandFilter } from '../../../lib/command-filter';\n/**\n * PopoverMenu — blocks wrapper around `base/popover` + `base/command`.\n *\n * Captures the recurring \"trigger → optional header → search → command list\"\n * pattern used by filter facets, operator selects, and similar pickers\n * across the library.\n *\n * Slots (all optional):\n * - `header` — rendered above the search input / list\n * - `footer` — rendered below the list (e.g. confirm/clear buttons)\n * - `empty` — replaces the default empty-state copy\n * - `loading` — replaces the list when `loading` is true\n *\n * Render-prop:\n * - `renderItem={(item, ctx) => ReactNode}` — full control over a row\n *\n * Strings:\n * - `strings={{ searchPlaceholder, empty, loading }}` — merged with defaults\n *\n * For headless usage (custom UI against the same selection state),\n * compose `base/popover` + `base/command` directly.\n */\nimport * as React from 'react';\n\nimport {\n\tCommand,\n\tCommandEmpty,\n\tCommandGroup,\n\tCommandInput,\n\tCommandItem,\n\tCommandList,\n} from '../command';\nimport {\n\tPopover,\n\tPopoverContent,\n PopoverHeader,\n PopoverFooter,\n\tPopoverTrigger,\n} from '../popover';\nimport { LoadingState, ErrorState } from '../feedback';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { popoverWidthRecipes, type CollectionDensity } from '../popover/popover.recipes';\nimport { CollectionContent } from '../popover/collection-content';\n\nimport {\n\tdefaultPopoverMenuStrings,\n\ttype PopoverMenuItem,\n\ttype PopoverMenuStrings,\n} from './popover-menu.types';\n\nexport interface PopoverMenuRenderItemContext {\n\t/** True when the item is the user's currently-active match (keyboard or pointer highlight). */\n\tisHighlighted: boolean;\n}\n\nexport interface PopoverMenuProps<T = unknown> {\n\t/** Vertical row rhythm. Compact and comfortable preserve primary label size and inline room. */\n\tdensity?: CollectionDensity;\n\t/** Trigger element. The popover anchors to it. Pass any clickable. */\n\ttrigger: React.ReactNode;\n\t/** Items to render in the list. */\n\titems: ReadonlyArray<PopoverMenuItem<T>>;\n\t/** Selection callback — fires on row click / Enter. */\n\tonSelect: (item: PopoverMenuItem<T>) => void;\n\n\t/** Controlled open state. Omit for uncontrolled. */\n\topen?: boolean;\n\t/** Open-state callback for controlled / uncontrolled flows. */\n\tonOpenChange?: (open: boolean) => void;\n\n\t/** Show the search input above the list. Default: true. */\n\tsearch?: boolean;\n\t/** Search input value (controlled). */\n\tsearchValue?: string;\n\t/** Search input change callback. */\n\tonSearchChange?: (value: string) => void;\n\n\t/** Async loading flag — replaces stale options and the empty state. */\n\tloading?: boolean;\n\t/** Resource failure replaces the list. The application owns retry and fetching. */\n\terror?: React.ReactNode;\n\tonRetry?: () => void;\n\n\t/** Optional pre-list slot (e.g. a label / eyebrow). */\n\theader?: React.ReactNode;\n\t/** Optional post-list slot (e.g. confirm / clear buttons). */\n\tfooter?: React.ReactNode;\n\t/** Override empty-state slot (defaults to `strings.empty`). */\n\tempty?: React.ReactNode;\n\t/** Override loading slot (defaults to spinner + `strings.loading`). */\n\tloadingSlot?: React.ReactNode;\n\n\t/** Per-item render override. */\n\trenderItem?: (\n\t\titem: PopoverMenuItem<T>,\n\t\tctx: PopoverMenuRenderItemContext,\n\t) => React.ReactNode;\n\n\t/** Override copy. Deep-merged over defaults. */\n\tstrings?: StringsProp<PopoverMenuStrings>;\n\n\t/** Popover content positioning props (forwarded). */\n\talign?: React.ComponentProps<typeof PopoverContent>['align'];\n\t/** Distance from the trigger, in pixels. */\n\tsideOffset?: React.ComponentProps<typeof PopoverContent>['sideOffset'];\n\n\t/** Width override for the popover content. Default: w-56. */\n\tcontentClassName?: string;\n /** Accessible name for the popup. Defaults to the localized search label. */\n contentLabel?: string;\n /** ID of a consumer-owned title used instead of contentLabel. */\n contentLabelledBy?: string;\n}\n\nexport function PopoverMenu<T = unknown>({\n\tdensity = 'default',\n\ttrigger,\n\titems,\n\tonSelect,\n\topen,\n\tonOpenChange,\n\tsearch = true,\n\tsearchValue,\n\tonSearchChange,\n\tloading = false,\n\terror,\n\tonRetry,\n\theader,\n\tfooter,\n\tempty,\n\tloadingSlot,\n\trenderItem,\n\tstrings: stringsProp,\n\talign = 'start',\n\tsideOffset,\n\tcontentClassName,\n contentLabel,\n contentLabelledBy,\n}: PopoverMenuProps<T>) {\n\tconst strings = useStrings(defaultPopoverMenuStrings, stringsProp);\n\tconst searchRef = React.useRef<HTMLInputElement>(null);\n\tconst triggerRef = React.useRef<HTMLButtonElement>(null);\n\tconst keyboardDismissal = React.useRef(false);\n\tconst contentRef = React.useRef<HTMLDivElement>(null);\n const searchOverrides = React.useMemo(() => new Map(\n items.filter(item => item.searchValue !== undefined).map(item => [item.value, item.searchValue!]),\n ), [items]);\n const filter = React.useCallback((value: string, search: string, keywords?: string[]) => (\n searchOverrides.has(value)\n ? commandFilter(searchOverrides.get(value)!, search)\n : commandFilter(value, search, keywords)\n ), [searchOverrides]);\n\n\treturn (\n\t\t<Popover open={open} onOpenChange={(next, details) => {\n keyboardDismissal.current = !next && details.reason === 'escape-key';\n onOpenChange?.(next);\n }} onOpenChangeComplete={next => {\n // Rapid reopen during a focus-out exit can retain Base UI's no-return flag.\n // Restore only an accepted, completed Escape dismissal; outside focus stays owned.\n if (!next && keyboardDismissal.current) {\n keyboardDismissal.current = false;\n triggerRef.current?.focus({ preventScroll: true });\n }\n }}>\n\t\t\t<PopoverTrigger ref={triggerRef} render={trigger as React.ReactElement} />\n\t\t\t<PopoverContent\n\t\t\t\tref={contentRef}\n\t\t\t\taria-label={contentLabelledBy ? undefined : contentLabel ?? strings.searchPlaceholder}\n aria-labelledby={contentLabelledBy}\n align={align}\n\t\t\t\tsideOffset={sideOffset}\n\t\t\t\ttype=\"menu\"\n\t\t\t\tinset=\"flush\"\n\t\t\t\tclassName={cn('popover-menu--component', popoverWidthRecipes.sm, 'gap-0 overflow-hidden', contentClassName)}\n\t\t\t>\n\t\t\t\t<Command\n\t\t\t\t\tshouldFilter={!onSearchChange}\n filter={filter}\n\t\t\t\t\tinset=\"flush\"\n\t\t\t\t\tclassName=\"popover-menu--collection\"\n\t\t\t\t>\n\t\t\t\t\t{!!header && (\n\t\t\t\t\t\t<PopoverHeader className=\"popover-menu--header\">\n\t\t\t\t\t\t\t{header}\n\t\t\t\t\t\t</PopoverHeader>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{!!search && (\n\t\t\t\t\t\t<CommandInput\n\t\t\t\t\t\t\tref={searchRef}\n\t\t\t\t\t\t\tplaceholder={strings.searchPlaceholder}\n\t\t\t\t\t\t\tvalue={searchValue}\n\t\t\t\t\t\t\tonValueChange={onSearchChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<CommandList aria-busy={loading || undefined}>\n\t\t\t\t\t\t{loading ? (loadingSlot !== undefined ? <div role=\"status\" aria-live=\"polite\">{loadingSlot}</div> : <LoadingState label={strings.loading} />) : error ? <ErrorState variant=\"inline\" description={error} onRetry={onRetry ? () => {\n // Retry feedback is replaced by loading. Keep focus on persistent anatomy\n // before its button is removed, including in search-free pickers.\n (searchRef.current ?? contentRef.current)?.focus();\n onRetry();\n } : undefined} retryLabel={strings.retry ?? 'Retry'} /> : <>\n\n\t\t\t\t\t\t<CommandEmpty>{empty ?? strings.empty}</CommandEmpty>\n\n\t\t\t\t\t\t{items.length > 0 && (\n\t\t\t\t\t\t\t<CommandGroup>\n\t\t\t\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t\t\t\t<CommandItem\n\t\t\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\t\t\tdensity={density}\n\t\t\t\t\t\t\t\t\t\tvalue={item.value}\n keywords={item.searchValue !== undefined ? [item.searchValue] : [item.label, item.description].filter((value): value is string => typeof value === 'string')}\n\t\t\t\t\t\t\t\t\t\tonSelect={() => onSelect(item)}\n\t\t\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\t\t\tdata-checked={item.selected || undefined}\n\t\t\t\t\t\t\t\t\t\tclassName=\"data-[checked=true]:**:[svg]:text-primary-accent\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{({ isHighlighted }) => renderItem\n\t\t\t\t\t\t\t\t\t\t\t? renderItem(item, { isHighlighted })\n\t\t\t\t\t\t\t\t\t\t\t: (\n\t\t\t\t\t\t\t\t\t\t\t\t<CollectionContent label={item.label} description={item.description} leading={item.icon} leadingClassName=\"[&_svg]:size-icon\"/>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</CommandItem>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</CommandGroup>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>}\n\t\t\t\t\t</CommandList>\n\n\t\t\t\t\t{/* The public surface anatomy owns header and footer bands. */}\n\t\t\t\t\t{!!footer && (\n\t\t\t\t\t\t<PopoverFooter className=\"popover-menu--footer justify-start\">\n\t\t\t\t\t\t\t{footer}\n\t\t\t\t\t\t</PopoverFooter>\n\t\t\t\t\t)}\n\t\t\t\t</Command>\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n}\n\nPopoverMenu.displayName = 'PopoverMenu';\n"],"mappings":"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"}
|
package/dist/services/actions.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "../lib/strings.js";
|
|
3
|
-
import { n as t, r as n, t as r } from "../overlays-
|
|
3
|
+
import { n as t, r as n, t as r } from "../overlays-tMkF-VAN.js";
|
|
4
4
|
import { createContext as i, createElement as a, useContext as o, useEffect as s, useId as c, useMemo as l, useRef as u, useSyncExternalStore as d } from "react";
|
|
5
5
|
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
6
6
|
//#region src/services/actions/actions.types.ts
|