asterui 0.12.6 → 0.12.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Container.d.ts +7 -1
- package/dist/components/Fieldset.d.ts +6 -0
- package/dist/components/Filter.d.ts +27 -0
- package/dist/components/FloatButton.d.ts +50 -11
- package/dist/components/Grid.d.ts +1 -1
- package/dist/components/Modal.d.ts +7 -2
- package/dist/components/ThemeController.d.ts +12 -4
- package/dist/index.d.ts +4 -2
- package/dist/index.js +167 -165
- package/dist/index.js.map +1 -1
- package/dist/index100.js +44 -11
- package/dist/index100.js.map +1 -1
- package/dist/index101.js +10 -12
- package/dist/index101.js.map +1 -1
- package/dist/index102.js +14 -7
- package/dist/index102.js.map +1 -1
- package/dist/index103.js +7 -12
- package/dist/index103.js.map +1 -1
- package/dist/index104.js +11 -29
- package/dist/index104.js.map +1 -1
- package/dist/index105.js +29 -16
- package/dist/index105.js.map +1 -1
- package/dist/index106.js +21 -0
- package/dist/index106.js.map +1 -0
- package/dist/index18.js +23 -15
- package/dist/index18.js.map +1 -1
- package/dist/index2.js +41 -34
- package/dist/index2.js.map +1 -1
- package/dist/index21.js +1 -1
- package/dist/index25.js +8 -8
- package/dist/index25.js.map +1 -1
- package/dist/index27.js +13 -8
- package/dist/index27.js.map +1 -1
- package/dist/index29.js +50 -61
- package/dist/index29.js.map +1 -1
- package/dist/index30.js +60 -77
- package/dist/index30.js.map +1 -1
- package/dist/index31.js +184 -18
- package/dist/index31.js.map +1 -1
- package/dist/index32.js +15 -217
- package/dist/index32.js.map +1 -1
- package/dist/index33.js +216 -1078
- package/dist/index33.js.map +1 -1
- package/dist/index34.js +1086 -17
- package/dist/index34.js.map +1 -1
- package/dist/index35.js +17 -121
- package/dist/index35.js.map +1 -1
- package/dist/index36.js +119 -37
- package/dist/index36.js.map +1 -1
- package/dist/index37.js +34 -208
- package/dist/index37.js.map +1 -1
- package/dist/index38.js +214 -97
- package/dist/index38.js.map +1 -1
- package/dist/index39.js +93 -158
- package/dist/index39.js.map +1 -1
- package/dist/index40.js +155 -139
- package/dist/index40.js.map +1 -1
- package/dist/index41.js +146 -15
- package/dist/index41.js.map +1 -1
- package/dist/index42.js +15 -17
- package/dist/index42.js.map +1 -1
- package/dist/index43.js +17 -21
- package/dist/index43.js.map +1 -1
- package/dist/index44.js +18 -116
- package/dist/index44.js.map +1 -1
- package/dist/index45.js +116 -10
- package/dist/index45.js.map +1 -1
- package/dist/index46.js +13 -35
- package/dist/index46.js.map +1 -1
- package/dist/index47.js +35 -34
- package/dist/index47.js.map +1 -1
- package/dist/index48.js +34 -116
- package/dist/index48.js.map +1 -1
- package/dist/index49.js +114 -174
- package/dist/index49.js.map +1 -1
- package/dist/index50.js +165 -136
- package/dist/index50.js.map +1 -1
- package/dist/index51.js +146 -11
- package/dist/index51.js.map +1 -1
- package/dist/index52.js +10 -20
- package/dist/index52.js.map +1 -1
- package/dist/index53.js +22 -14
- package/dist/index53.js.map +1 -1
- package/dist/index54.js +14 -7
- package/dist/index54.js.map +1 -1
- package/dist/index55.js +6 -268
- package/dist/index55.js.map +1 -1
- package/dist/index56.js +311 -17
- package/dist/index56.js.map +1 -1
- package/dist/index57.js +17 -122
- package/dist/index57.js.map +1 -1
- package/dist/index58.js +120 -108
- package/dist/index58.js.map +1 -1
- package/dist/index59.js +107 -167
- package/dist/index59.js.map +1 -1
- package/dist/index60.js +167 -29
- package/dist/index60.js.map +1 -1
- package/dist/index61.js +30 -120
- package/dist/index61.js.map +1 -1
- package/dist/index62.js +116 -80
- package/dist/index62.js.map +1 -1
- package/dist/index63.js +85 -19
- package/dist/index63.js.map +1 -1
- package/dist/index64.js +19 -73
- package/dist/index64.js.map +1 -1
- package/dist/index65.js +71 -54
- package/dist/index65.js.map +1 -1
- package/dist/index66.js +56 -44
- package/dist/index66.js.map +1 -1
- package/dist/index67.js +42 -49
- package/dist/index67.js.map +1 -1
- package/dist/index68.js +52 -62
- package/dist/index68.js.map +1 -1
- package/dist/index69.js +56 -101
- package/dist/index69.js.map +1 -1
- package/dist/index70.js +107 -41
- package/dist/index70.js.map +1 -1
- package/dist/index71.js +41 -68
- package/dist/index71.js.map +1 -1
- package/dist/index72.js +66 -19
- package/dist/index72.js.map +1 -1
- package/dist/index73.js +18 -43
- package/dist/index73.js.map +1 -1
- package/dist/index74.js +44 -132
- package/dist/index74.js.map +1 -1
- package/dist/index75.js +132 -50
- package/dist/index75.js.map +1 -1
- package/dist/index76.js +51 -21
- package/dist/index76.js.map +1 -1
- package/dist/index77.js +22 -31
- package/dist/index77.js.map +1 -1
- package/dist/index78.js +31 -22
- package/dist/index78.js.map +1 -1
- package/dist/index79.js +20 -327
- package/dist/index79.js.map +1 -1
- package/dist/index80.js +323 -50
- package/dist/index80.js.map +1 -1
- package/dist/index81.js +56 -40
- package/dist/index81.js.map +1 -1
- package/dist/index82.js +40 -23
- package/dist/index82.js.map +1 -1
- package/dist/index83.js +21 -93
- package/dist/index83.js.map +1 -1
- package/dist/index84.js +88 -123
- package/dist/index84.js.map +1 -1
- package/dist/index85.js +147 -152
- package/dist/index85.js.map +1 -1
- package/dist/index86.js +159 -63
- package/dist/index86.js.map +1 -1
- package/dist/index87.js +65 -35
- package/dist/index87.js.map +1 -1
- package/dist/index88.js +35 -234
- package/dist/index88.js.map +1 -1
- package/dist/index89.js +231 -31
- package/dist/index89.js.map +1 -1
- package/dist/index90.js +34 -210
- package/dist/index90.js.map +1 -1
- package/dist/index91.js +195 -198
- package/dist/index91.js.map +1 -1
- package/dist/index92.js +159 -241
- package/dist/index92.js.map +1 -1
- package/dist/index93.js +283 -166
- package/dist/index93.js.map +1 -1
- package/dist/index94.js +173 -253
- package/dist/index94.js.map +1 -1
- package/dist/index95.js +258 -14
- package/dist/index95.js.map +1 -1
- package/dist/index96.js +12 -31
- package/dist/index96.js.map +1 -1
- package/dist/index97.js +32 -5
- package/dist/index97.js.map +1 -1
- package/dist/index98.js +5 -13
- package/dist/index98.js.map +1 -1
- package/dist/index99.js +11 -43
- package/dist/index99.js.map +1 -1
- package/package.json +2 -2
package/dist/index50.js
CHANGED
|
@@ -1,150 +1,179 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useState as
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
1
|
+
import { jsx as a, jsxs as K } from "react/jsx-runtime";
|
|
2
|
+
import { useState as f, useRef as $, useCallback as A, useEffect as C } from "react";
|
|
3
|
+
import { createPortal as oe } from "react-dom";
|
|
4
|
+
const fe = ({
|
|
5
|
+
value: p,
|
|
6
|
+
defaultValue: q = "",
|
|
7
|
+
onChange: E,
|
|
8
|
+
onSelect: U,
|
|
9
|
+
onSearch: W,
|
|
10
|
+
options: R = [],
|
|
11
|
+
loading: X = !1,
|
|
12
|
+
prefix: k = "@",
|
|
13
|
+
split: v = " ",
|
|
14
|
+
placeholder: Y,
|
|
15
|
+
disabled: G = !1,
|
|
16
|
+
readOnly: J = !1,
|
|
17
|
+
rows: V = 3,
|
|
18
|
+
autoSize: o = !1,
|
|
19
|
+
notFoundContent: Q = "No matches found",
|
|
20
|
+
filterOption: x = !0,
|
|
21
|
+
className: Z = "",
|
|
22
|
+
dropdownClassName: _ = "",
|
|
23
|
+
...z
|
|
24
|
+
}) => {
|
|
25
|
+
const [ee, T] = f(q), h = p !== void 0 ? p : ee, [u, m] = f(!1), [I, N] = f(null), [D, M] = f(""), [d, y] = f(0), [g, H] = f(null), [j, te] = f({ top: 0, left: 0 }), l = $(null), b = $(null), B = $(null), ne = Array.isArray(k) ? k : [k], c = A(() => {
|
|
26
|
+
if (!x) return R;
|
|
27
|
+
const e = typeof x == "function" ? x : (t, n) => (n.label || n.value).toLowerCase().includes(t.toLowerCase());
|
|
28
|
+
return R.filter((t) => e(D, t));
|
|
29
|
+
}, [R, D, x])(), L = A(() => {
|
|
30
|
+
const e = l.current;
|
|
31
|
+
if (!e || !o) return;
|
|
32
|
+
e.style.height = "auto";
|
|
33
|
+
const t = e.scrollHeight;
|
|
34
|
+
if (typeof o == "object") {
|
|
35
|
+
const n = parseInt(getComputedStyle(e).lineHeight) || 20, r = o.minRows ? o.minRows * n : 0, s = o.maxRows ? o.maxRows * n : 1 / 0;
|
|
36
|
+
e.style.height = `${Math.min(Math.max(t, r), s)}px`;
|
|
37
|
+
} else
|
|
38
|
+
e.style.height = `${t}px`;
|
|
39
|
+
}, [o]);
|
|
40
|
+
C(() => {
|
|
41
|
+
L();
|
|
42
|
+
}, [h, L]);
|
|
43
|
+
const O = A(() => {
|
|
44
|
+
const e = l.current, t = B.current;
|
|
45
|
+
if (!e || !t || g === null) return;
|
|
46
|
+
const n = h.substring(0, g);
|
|
47
|
+
t.textContent = n;
|
|
48
|
+
const r = e.getBoundingClientRect(), s = t.getBoundingClientRect(), w = parseInt(getComputedStyle(e).lineHeight) || 20;
|
|
49
|
+
te({
|
|
50
|
+
top: r.top + window.scrollY + w + 4,
|
|
51
|
+
left: r.left + window.scrollX + Math.min(s.width % r.width, r.width - 200)
|
|
52
|
+
});
|
|
53
|
+
}, [h, g]);
|
|
54
|
+
C(() => {
|
|
55
|
+
u && O();
|
|
56
|
+
}, [u, O, D]);
|
|
57
|
+
const re = (e) => {
|
|
58
|
+
const t = e.target.value, n = e.target.selectionStart;
|
|
59
|
+
p === void 0 && T(t), E?.(t), se(t, n);
|
|
60
|
+
}, se = (e, t) => {
|
|
61
|
+
let n = null, r = null;
|
|
62
|
+
for (const s of ne) {
|
|
63
|
+
const i = e.substring(0, t).lastIndexOf(s);
|
|
64
|
+
if (i !== -1) {
|
|
65
|
+
const S = i > 0 ? e[i - 1] : v;
|
|
66
|
+
if (S === v || S === `
|
|
67
|
+
` || i === 0) {
|
|
68
|
+
const F = e.substring(i + s.length, t);
|
|
69
|
+
if (!F.includes(v) && !F.includes(`
|
|
70
|
+
`)) {
|
|
71
|
+
n = s, r = i;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (n !== null && r !== null) {
|
|
78
|
+
const s = e.substring(r + n.length, t);
|
|
79
|
+
N(n), M(s), H(r), m(!0), y(0), W?.(s, n);
|
|
80
|
+
} else
|
|
81
|
+
m(!1), N(null), M(""), H(null);
|
|
82
|
+
}, P = (e) => {
|
|
83
|
+
if (e.disabled || g === null || I === null) return;
|
|
84
|
+
const t = l.current;
|
|
85
|
+
if (!t) return;
|
|
86
|
+
const n = h.substring(0, g), r = h.substring(t.selectionStart), s = `${I}${e.value}${v}`, w = n + s + r;
|
|
87
|
+
p === void 0 && T(w), E?.(w), U?.(e, I), m(!1), N(null), M(""), H(null), setTimeout(() => {
|
|
88
|
+
const i = n.length + s.length;
|
|
89
|
+
t.focus(), t.setSelectionRange(i, i);
|
|
90
|
+
}, 0);
|
|
91
|
+
}, ae = (e) => {
|
|
92
|
+
if (u)
|
|
93
|
+
switch (e.key) {
|
|
94
|
+
case "ArrowDown":
|
|
95
|
+
e.preventDefault(), y((t) => (t + 1) % Math.max(c.length, 1));
|
|
96
|
+
break;
|
|
97
|
+
case "ArrowUp":
|
|
98
|
+
e.preventDefault(), y((t) => (t - 1 + c.length) % Math.max(c.length, 1));
|
|
99
|
+
break;
|
|
100
|
+
case "Enter":
|
|
101
|
+
c[d] && (e.preventDefault(), P(c[d]));
|
|
102
|
+
break;
|
|
103
|
+
case "Escape":
|
|
104
|
+
e.preventDefault(), m(!1);
|
|
105
|
+
break;
|
|
106
|
+
case "Tab":
|
|
107
|
+
c[d] && (e.preventDefault(), P(c[d]));
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
C(() => {
|
|
112
|
+
const e = (t) => {
|
|
113
|
+
b.current && !b.current.contains(t.target) && l.current && !l.current.contains(t.target) && m(!1);
|
|
114
|
+
};
|
|
115
|
+
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
116
|
+
}, []), C(() => {
|
|
117
|
+
u && b.current && b.current.querySelector('[data-active="true"]')?.scrollIntoView({ block: "nearest" });
|
|
118
|
+
}, [d, u]);
|
|
119
|
+
const le = u && /* @__PURE__ */ a(
|
|
120
|
+
"div",
|
|
40
121
|
{
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
122
|
+
ref: b,
|
|
123
|
+
className: `fixed z-50 bg-base-100 border border-base-300 rounded-lg shadow-lg
|
|
124
|
+
min-w-48 max-h-60 overflow-auto ${_}`,
|
|
125
|
+
style: {
|
|
126
|
+
top: j.top,
|
|
127
|
+
left: j.left
|
|
47
128
|
},
|
|
48
|
-
children: /* @__PURE__ */
|
|
129
|
+
children: X ? /* @__PURE__ */ a("div", { className: "p-3 text-center text-base-content/60", children: /* @__PURE__ */ a("span", { className: "loading loading-spinner loading-sm" }) }) : c.length === 0 ? /* @__PURE__ */ a("div", { className: "p-3 text-center text-base-content/60 text-sm", children: Q }) : /* @__PURE__ */ a("ul", { className: "menu menu-sm p-1", children: c.map((e, t) => /* @__PURE__ */ a("li", { children: /* @__PURE__ */ K(
|
|
130
|
+
"button",
|
|
131
|
+
{
|
|
132
|
+
type: "button",
|
|
133
|
+
"data-active": t === d,
|
|
134
|
+
className: `flex items-center gap-2 ${t === d ? "active" : ""} ${e.disabled ? "disabled opacity-50 cursor-not-allowed" : ""}`,
|
|
135
|
+
onClick: () => P(e),
|
|
136
|
+
onMouseEnter: () => y(t),
|
|
137
|
+
children: [
|
|
138
|
+
e.avatar && /* @__PURE__ */ a("div", { className: "avatar", children: /* @__PURE__ */ a("div", { className: "w-6 h-6 rounded-full", children: /* @__PURE__ */ a("img", { src: e.avatar, alt: "" }) }) }),
|
|
139
|
+
/* @__PURE__ */ a("span", { children: e.label || e.value })
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
) }, e.value)) })
|
|
49
143
|
}
|
|
50
144
|
);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
itemKey: e,
|
|
55
|
-
icon: t,
|
|
56
|
-
disabled: a = !1,
|
|
57
|
-
onClick: i,
|
|
58
|
-
active: f,
|
|
59
|
-
className: c = "",
|
|
60
|
-
...r
|
|
61
|
-
}) {
|
|
62
|
-
const s = g(v), l = e && s ? s.selectedKeys.includes(e) : f, u = () => {
|
|
63
|
-
a || (e && s && s.onSelect(e), i?.());
|
|
64
|
-
}, d = [
|
|
65
|
-
l && "active bg-primary text-primary-content",
|
|
66
|
-
a && "disabled",
|
|
67
|
-
c
|
|
68
|
-
].filter(Boolean).join(" ");
|
|
69
|
-
return /* @__PURE__ */ o("li", { children: /* @__PURE__ */ C(
|
|
70
|
-
"a",
|
|
71
|
-
{
|
|
72
|
-
className: d,
|
|
73
|
-
onClick: u,
|
|
74
|
-
"aria-disabled": a,
|
|
75
|
-
role: "menuitem",
|
|
76
|
-
"data-state": l ? "active" : "inactive",
|
|
77
|
-
...r,
|
|
78
|
-
children: [
|
|
79
|
-
t && /* @__PURE__ */ o("span", { className: "menu-icon", children: t }),
|
|
80
|
-
n
|
|
81
|
-
]
|
|
82
|
-
}
|
|
83
|
-
) });
|
|
84
|
-
}
|
|
85
|
-
function k({
|
|
86
|
-
children: n,
|
|
87
|
-
itemKey: e,
|
|
88
|
-
label: t,
|
|
89
|
-
icon: a,
|
|
90
|
-
disabled: i = !1,
|
|
91
|
-
className: f = "",
|
|
92
|
-
...c
|
|
93
|
-
}) {
|
|
94
|
-
const r = w(), s = r.openKeys.includes(e), l = O(), u = () => {
|
|
95
|
-
i || r.onToggleOpen(e);
|
|
96
|
-
}, d = [i && "disabled", f].filter(Boolean).join(" ");
|
|
97
|
-
return r.mode === "inline" ? /* @__PURE__ */ o("li", { className: d, "data-state": s ? "open" : "closed", ...c, children: /* @__PURE__ */ C("details", { open: s, children: [
|
|
98
|
-
/* @__PURE__ */ C(
|
|
99
|
-
"summary",
|
|
145
|
+
return /* @__PURE__ */ K("div", { className: `relative ${Z}`, "data-state": u ? "open" : "closed", ...z, children: [
|
|
146
|
+
/* @__PURE__ */ a(
|
|
147
|
+
"div",
|
|
100
148
|
{
|
|
101
|
-
|
|
102
|
-
|
|
149
|
+
ref: B,
|
|
150
|
+
className: "invisible absolute whitespace-pre-wrap break-words",
|
|
151
|
+
style: {
|
|
152
|
+
font: l.current ? getComputedStyle(l.current).font : void 0,
|
|
153
|
+
width: l.current?.clientWidth,
|
|
154
|
+
padding: l.current ? getComputedStyle(l.current).padding : void 0
|
|
103
155
|
},
|
|
104
|
-
"aria-
|
|
105
|
-
"aria-controls": l,
|
|
106
|
-
"aria-disabled": i,
|
|
107
|
-
children: [
|
|
108
|
-
a && /* @__PURE__ */ o("span", { className: "menu-icon", children: a }),
|
|
109
|
-
t
|
|
110
|
-
]
|
|
156
|
+
"aria-hidden": "true"
|
|
111
157
|
}
|
|
112
158
|
),
|
|
113
|
-
/* @__PURE__ */
|
|
114
|
-
|
|
115
|
-
/* @__PURE__ */ C(
|
|
116
|
-
"summary",
|
|
159
|
+
/* @__PURE__ */ a(
|
|
160
|
+
"textarea",
|
|
117
161
|
{
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
]
|
|
162
|
+
ref: l,
|
|
163
|
+
value: h,
|
|
164
|
+
onChange: re,
|
|
165
|
+
onKeyDown: ae,
|
|
166
|
+
placeholder: Y,
|
|
167
|
+
disabled: G,
|
|
168
|
+
readOnly: J,
|
|
169
|
+
rows: typeof o == "object" ? o.minRows || V : o ? 1 : V,
|
|
170
|
+
className: "textarea textarea-bordered w-full resize-none"
|
|
128
171
|
}
|
|
129
172
|
),
|
|
130
|
-
|
|
131
|
-
] })
|
|
132
|
-
}
|
|
133
|
-
function z({ children: n, className: e = "", ...t }) {
|
|
134
|
-
const a = ["menu-title", e].filter(Boolean).join(" ");
|
|
135
|
-
return /* @__PURE__ */ o("li", { className: a, ...t, children: n });
|
|
136
|
-
}
|
|
137
|
-
function E({ className: n = "", ...e }) {
|
|
138
|
-
const t = ["border-t border-base-300 my-1", n].filter(Boolean).join(" ");
|
|
139
|
-
return /* @__PURE__ */ o("li", { className: t, role: "separator", ...e });
|
|
140
|
-
}
|
|
141
|
-
const A = Object.assign(D, {
|
|
142
|
-
Item: K,
|
|
143
|
-
SubMenu: k,
|
|
144
|
-
Title: z,
|
|
145
|
-
Divider: E
|
|
146
|
-
});
|
|
173
|
+
oe(le, document.body)
|
|
174
|
+
] });
|
|
175
|
+
};
|
|
147
176
|
export {
|
|
148
|
-
|
|
177
|
+
fe as Mention
|
|
149
178
|
};
|
|
150
179
|
//# sourceMappingURL=index50.js.map
|
package/dist/index50.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index50.js","sources":["../src/components/Menu.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useId } from 'react'\n\nexport type MenuMode = 'vertical' | 'horizontal' | 'inline'\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n children: React.ReactNode\n mode?: MenuMode\n selectedKeys?: string[]\n defaultSelectedKeys?: string[]\n openKeys?: string[]\n defaultOpenKeys?: string[]\n onSelect?: (key: string) => void\n onOpenChange?: (openKeys: string[]) => void\n}\n\nexport interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLAnchorElement>, 'onClick'> {\n children: React.ReactNode\n itemKey?: string\n icon?: React.ReactNode\n disabled?: boolean\n onClick?: () => void\n /** @deprecated Use itemKey and selectedKeys instead */\n active?: boolean\n}\n\nexport interface MenuSubMenuProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n itemKey: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface MenuTitleProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n}\n\nexport interface MenuDividerProps extends React.HTMLAttributes<HTMLLIElement> {}\n\ninterface MenuContextValue {\n mode: MenuMode\n selectedKeys: string[]\n openKeys: string[]\n onSelect: (key: string) => void\n onToggleOpen: (key: string) => void\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu')\n }\n return context\n}\n\nfunction MenuRoot({\n children,\n mode = 'vertical',\n selectedKeys: controlledSelectedKeys,\n defaultSelectedKeys = [],\n openKeys: controlledOpenKeys,\n defaultOpenKeys = [],\n onSelect,\n onOpenChange,\n className = '',\n ...rest\n}: MenuProps) {\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys)\n\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const openKeys = controlledOpenKeys ?? internalOpenKeys\n\n const handleSelect = useCallback(\n (key: string) => {\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys([key])\n }\n onSelect?.(key)\n },\n [controlledSelectedKeys, onSelect]\n )\n\n const handleToggleOpen = useCallback(\n (key: string) => {\n const newOpenKeys = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : [...openKeys, key]\n\n if (controlledOpenKeys === undefined) {\n setInternalOpenKeys(newOpenKeys)\n }\n onOpenChange?.(newOpenKeys)\n },\n [openKeys, controlledOpenKeys, onOpenChange]\n )\n\n const modeClasses: Record<MenuMode, string> = {\n vertical: '',\n horizontal: 'menu-horizontal',\n inline: '',\n }\n\n const menuClasses = ['menu', modeClasses[mode], className].filter(Boolean).join(' ')\n\n return (\n <MenuContext.Provider\n value={{\n mode,\n selectedKeys,\n openKeys,\n onSelect: handleSelect,\n onToggleOpen: handleToggleOpen,\n }}\n >\n <ul className={menuClasses} {...rest}>{children}</ul>\n </MenuContext.Provider>\n )\n}\n\nfunction MenuItem({\n children,\n itemKey,\n icon,\n disabled = false,\n onClick,\n active,\n className = '',\n ...rest\n}: MenuItemProps) {\n const context = useContext(MenuContext)\n\n // Support both old active prop and new key-based selection\n const isSelected = itemKey && context ? context.selectedKeys.includes(itemKey) : active\n\n const handleClick = () => {\n if (disabled) return\n if (itemKey && context) {\n context.onSelect(itemKey)\n }\n onClick?.()\n }\n\n const itemClasses = [\n isSelected && 'active bg-primary text-primary-content',\n disabled && 'disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <li>\n <a\n className={itemClasses}\n onClick={handleClick}\n aria-disabled={disabled}\n role=\"menuitem\"\n data-state={isSelected ? 'active' : 'inactive'}\n {...rest}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {children}\n </a>\n </li>\n )\n}\n\nfunction MenuSubMenu({\n children,\n itemKey,\n label,\n icon,\n disabled = false,\n className = '',\n ...rest\n}: MenuSubMenuProps) {\n const context = useMenuContext()\n const isOpen = context.openKeys.includes(itemKey)\n const submenuId = useId()\n\n const handleToggle = () => {\n if (disabled) return\n context.onToggleOpen(itemKey)\n }\n\n const submenuClasses = [disabled && 'disabled', className].filter(Boolean).join(' ')\n\n // For inline mode, use collapsible details/summary\n if (context.mode === 'inline') {\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {label}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n }\n\n // For vertical/horizontal, use nested menu (dropdown style)\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {label}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n}\n\nfunction MenuTitle({ children, className = '', ...rest }: MenuTitleProps) {\n const titleClasses = ['menu-title', className].filter(Boolean).join(' ')\n\n return <li className={titleClasses} {...rest}>{children}</li>\n}\n\nfunction MenuDivider({ className = '', ...rest }: MenuDividerProps) {\n const dividerClasses = ['border-t border-base-300 my-1', className].filter(Boolean).join(' ')\n\n return <li className={dividerClasses} role=\"separator\" {...rest} />\n}\n\nexport const Menu = Object.assign(MenuRoot, {\n Item: MenuItem,\n SubMenu: MenuSubMenu,\n Title: MenuTitle,\n Divider: MenuDivider,\n})\n"],"names":["MenuContext","createContext","useMenuContext","context","useContext","MenuRoot","children","mode","controlledSelectedKeys","defaultSelectedKeys","controlledOpenKeys","defaultOpenKeys","onSelect","onOpenChange","className","rest","internalSelectedKeys","setInternalSelectedKeys","useState","internalOpenKeys","setInternalOpenKeys","selectedKeys","openKeys","handleSelect","useCallback","key","handleToggleOpen","newOpenKeys","k","menuClasses","jsx","MenuItem","itemKey","icon","disabled","onClick","active","isSelected","handleClick","itemClasses","jsxs","MenuSubMenu","label","isOpen","submenuId","useId","handleToggle","submenuClasses","e","MenuTitle","titleClasses","MenuDivider","dividerClasses","Menu"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index50.js","sources":["../src/components/Mention.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface MentionOption {\n value: string\n label?: string\n avatar?: string\n disabled?: boolean\n}\n\nexport interface MentionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onSelect' | 'defaultValue' | 'prefix'> {\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n onSelect?: (option: MentionOption, prefix: string) => void\n onSearch?: (text: string, prefix: string) => void\n options?: MentionOption[]\n loading?: boolean\n prefix?: string | string[]\n split?: string\n placeholder?: string\n disabled?: boolean\n readOnly?: boolean\n rows?: number\n autoSize?: boolean | { minRows?: number; maxRows?: number }\n notFoundContent?: React.ReactNode\n filterOption?: boolean | ((input: string, option: MentionOption) => boolean)\n dropdownClassName?: string\n}\n\nexport const Mention: React.FC<MentionProps> = ({\n value,\n defaultValue = '',\n onChange,\n onSelect,\n onSearch,\n options = [],\n loading = false,\n prefix = '@',\n split = ' ',\n placeholder,\n disabled = false,\n readOnly = false,\n rows = 3,\n autoSize = false,\n notFoundContent = 'No matches found',\n filterOption = true,\n className = '',\n dropdownClassName = '',\n ...rest\n}) => {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const [isOpen, setIsOpen] = useState(false)\n const [activePrefix, setActivePrefix] = useState<string | null>(null)\n const [searchText, setSearchText] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const [mentionStart, setMentionStart] = useState<number | null>(null)\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 })\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const measureRef = useRef<HTMLDivElement>(null)\n\n const prefixes = Array.isArray(prefix) ? prefix : [prefix]\n\n // Filter options based on search text\n const filteredOptions = useCallback(() => {\n if (!filterOption) return options\n\n const filterFn =\n typeof filterOption === 'function'\n ? filterOption\n : (input: string, option: MentionOption) => {\n const label = option.label || option.value\n return label.toLowerCase().includes(input.toLowerCase())\n }\n\n return options.filter((opt) => filterFn(searchText, opt))\n }, [options, searchText, filterOption])\n\n const filtered = filteredOptions()\n\n // Update textarea height for autoSize\n const updateHeight = useCallback(() => {\n const textarea = textareaRef.current\n if (!textarea || !autoSize) return\n\n textarea.style.height = 'auto'\n const scrollHeight = textarea.scrollHeight\n\n if (typeof autoSize === 'object') {\n const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20\n const minHeight = autoSize.minRows ? autoSize.minRows * lineHeight : 0\n const maxHeight = autoSize.maxRows ? autoSize.maxRows * lineHeight : Infinity\n\n textarea.style.height = `${Math.min(Math.max(scrollHeight, minHeight), maxHeight)}px`\n } else {\n textarea.style.height = `${scrollHeight}px`\n }\n }, [autoSize])\n\n useEffect(() => {\n updateHeight()\n }, [currentValue, updateHeight])\n\n // Calculate dropdown position\n const updateDropdownPosition = useCallback(() => {\n const textarea = textareaRef.current\n const measure = measureRef.current\n if (!textarea || !measure || mentionStart === null) return\n\n // Get text before cursor to measure position\n const textBeforeCursor = currentValue.substring(0, mentionStart)\n\n // Create a temporary element to measure text position\n measure.textContent = textBeforeCursor\n\n const textareaRect = textarea.getBoundingClientRect()\n const measureRect = measure.getBoundingClientRect()\n\n // Calculate position relative to viewport\n const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20\n\n setDropdownPosition({\n top: textareaRect.top + window.scrollY + lineHeight + 4,\n left: textareaRect.left + window.scrollX + Math.min(measureRect.width % textareaRect.width, textareaRect.width - 200),\n })\n }, [currentValue, mentionStart])\n\n useEffect(() => {\n if (isOpen) {\n updateDropdownPosition()\n }\n }, [isOpen, updateDropdownPosition, searchText])\n\n // Handle text change\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value\n const cursorPos = e.target.selectionStart\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n\n // Check if we should open the mention dropdown\n checkForMention(newValue, cursorPos)\n }\n\n const checkForMention = (text: string, cursorPos: number) => {\n // Look backwards from cursor for a prefix\n let foundPrefix: string | null = null\n let foundStart: number | null = null\n\n for (const p of prefixes) {\n // Find the last occurrence of prefix before cursor\n const beforeCursor = text.substring(0, cursorPos)\n const lastPrefixIndex = beforeCursor.lastIndexOf(p)\n\n if (lastPrefixIndex !== -1) {\n // Check if prefix is at start or preceded by whitespace/split\n const charBefore = lastPrefixIndex > 0 ? text[lastPrefixIndex - 1] : split\n if (charBefore === split || charBefore === '\\n' || lastPrefixIndex === 0) {\n // Check if there's no space between prefix and cursor\n const textAfterPrefix = text.substring(lastPrefixIndex + p.length, cursorPos)\n if (!textAfterPrefix.includes(split) && !textAfterPrefix.includes('\\n')) {\n foundPrefix = p\n foundStart = lastPrefixIndex\n break\n }\n }\n }\n }\n\n if (foundPrefix !== null && foundStart !== null) {\n const search = text.substring(foundStart + foundPrefix.length, cursorPos)\n setActivePrefix(foundPrefix)\n setSearchText(search)\n setMentionStart(foundStart)\n setIsOpen(true)\n setActiveIndex(0)\n onSearch?.(search, foundPrefix)\n } else {\n setIsOpen(false)\n setActivePrefix(null)\n setSearchText('')\n setMentionStart(null)\n }\n }\n\n // Handle option selection\n const selectOption = (option: MentionOption) => {\n if (option.disabled || mentionStart === null || activePrefix === null) return\n\n const textarea = textareaRef.current\n if (!textarea) return\n\n const beforeMention = currentValue.substring(0, mentionStart)\n const afterCursor = currentValue.substring(textarea.selectionStart)\n\n const mentionText = `${activePrefix}${option.value}${split}`\n const newValue = beforeMention + mentionText + afterCursor\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n onSelect?.(option, activePrefix)\n\n setIsOpen(false)\n setActivePrefix(null)\n setSearchText('')\n setMentionStart(null)\n\n // Set cursor position after mention\n setTimeout(() => {\n const newCursorPos = beforeMention.length + mentionText.length\n textarea.focus()\n textarea.setSelectionRange(newCursorPos, newCursorPos)\n }, 0)\n }\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!isOpen) return\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setActiveIndex((prev) => (prev + 1) % Math.max(filtered.length, 1))\n break\n case 'ArrowUp':\n e.preventDefault()\n setActiveIndex((prev) => (prev - 1 + filtered.length) % Math.max(filtered.length, 1))\n break\n case 'Enter':\n if (filtered[activeIndex]) {\n e.preventDefault()\n selectOption(filtered[activeIndex])\n }\n break\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n break\n case 'Tab':\n if (filtered[activeIndex]) {\n e.preventDefault()\n selectOption(filtered[activeIndex])\n }\n break\n }\n }\n\n // Close dropdown on outside click\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node) &&\n textareaRef.current &&\n !textareaRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n // Scroll active item into view\n useEffect(() => {\n if (isOpen && dropdownRef.current) {\n const activeItem = dropdownRef.current.querySelector('[data-active=\"true\"]')\n activeItem?.scrollIntoView({ block: 'nearest' })\n }\n }, [activeIndex, isOpen])\n\n const dropdown = isOpen && (\n <div\n ref={dropdownRef}\n className={`fixed z-50 bg-base-100 border border-base-300 rounded-lg shadow-lg\n min-w-48 max-h-60 overflow-auto ${dropdownClassName}`}\n style={{\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n }}\n >\n {loading ? (\n <div className=\"p-3 text-center text-base-content/60\">\n <span className=\"loading loading-spinner loading-sm\"></span>\n </div>\n ) : filtered.length === 0 ? (\n <div className=\"p-3 text-center text-base-content/60 text-sm\">\n {notFoundContent}\n </div>\n ) : (\n <ul className=\"menu menu-sm p-1\">\n {filtered.map((option, index) => (\n <li key={option.value}>\n <button\n type=\"button\"\n data-active={index === activeIndex}\n className={`flex items-center gap-2 ${\n index === activeIndex ? 'active' : ''\n } ${option.disabled ? 'disabled opacity-50 cursor-not-allowed' : ''}`}\n onClick={() => selectOption(option)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {option.avatar && (\n <div className=\"avatar\">\n <div className=\"w-6 h-6 rounded-full\">\n <img src={option.avatar} alt=\"\" />\n </div>\n </div>\n )}\n <span>{option.label || option.value}</span>\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n\n return (\n <div className={`relative ${className}`} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n {/* Hidden measure element for cursor position */}\n <div\n ref={measureRef}\n className=\"invisible absolute whitespace-pre-wrap break-words\"\n style={{\n font: textareaRef.current ? getComputedStyle(textareaRef.current).font : undefined,\n width: textareaRef.current?.clientWidth,\n padding: textareaRef.current ? getComputedStyle(textareaRef.current).padding : undefined,\n }}\n aria-hidden=\"true\"\n />\n\n <textarea\n ref={textareaRef}\n value={currentValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n rows={typeof autoSize === 'object' ? autoSize.minRows || rows : autoSize ? 1 : rows}\n className=\"textarea textarea-bordered w-full resize-none\"\n />\n\n {createPortal(dropdown, document.body)}\n </div>\n )\n}\n"],"names":["Mention","value","defaultValue","onChange","onSelect","onSearch","options","loading","prefix","split","placeholder","disabled","readOnly","rows","autoSize","notFoundContent","filterOption","className","dropdownClassName","rest","internalValue","setInternalValue","useState","currentValue","isOpen","setIsOpen","activePrefix","setActivePrefix","searchText","setSearchText","activeIndex","setActiveIndex","mentionStart","setMentionStart","dropdownPosition","setDropdownPosition","textareaRef","useRef","dropdownRef","measureRef","prefixes","filtered","useCallback","filterFn","input","option","opt","updateHeight","textarea","scrollHeight","lineHeight","minHeight","maxHeight","useEffect","updateDropdownPosition","measure","textBeforeCursor","textareaRect","measureRect","handleChange","newValue","cursorPos","checkForMention","text","foundPrefix","foundStart","p","lastPrefixIndex","charBefore","textAfterPrefix","search","selectOption","beforeMention","afterCursor","mentionText","newCursorPos","handleKeyDown","prev","handleClickOutside","e","dropdown","jsx","index","jsxs","createPortal"],"mappings":";;;AA8BO,MAAMA,KAAkC,CAAC;AAAA,EAC9C,OAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC,IAAU,CAAA;AAAA,EACV,SAAAC,IAAU;AAAA,EACV,QAAAC,IAAS;AAAA,EACT,OAAAC,IAAQ;AAAA,EACR,aAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,UAAAC,IAAW;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,UAAAC,IAAW;AAAA,EACX,iBAAAC,IAAkB;AAAA,EAClB,cAAAC,IAAe;AAAA,EACf,WAAAC,IAAY;AAAA,EACZ,mBAAAC,IAAoB;AAAA,EACpB,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,IAAeC,CAAgB,IAAIC,EAASpB,CAAY,GACzDqB,IAAetB,MAAU,SAAYA,IAAQmB,IAE7C,CAACI,GAAQC,CAAS,IAAIH,EAAS,EAAK,GACpC,CAACI,GAAcC,CAAe,IAAIL,EAAwB,IAAI,GAC9D,CAACM,GAAYC,CAAa,IAAIP,EAAS,EAAE,GACzC,CAACQ,GAAaC,CAAc,IAAIT,EAAS,CAAC,GAC1C,CAACU,GAAcC,CAAe,IAAIX,EAAwB,IAAI,GAC9D,CAACY,GAAkBC,EAAmB,IAAIb,EAAS,EAAE,KAAK,GAAG,MAAM,GAAG,GAEtEc,IAAcC,EAA4B,IAAI,GAC9CC,IAAcD,EAAuB,IAAI,GACzCE,IAAaF,EAAuB,IAAI,GAExCG,KAAW,MAAM,QAAQhC,CAAM,IAAIA,IAAS,CAACA,CAAM,GAiBnDiC,IAdkBC,EAAY,MAAM;AACxC,QAAI,CAAC1B,EAAc,QAAOV;AAE1B,UAAMqC,IACJ,OAAO3B,KAAiB,aACpBA,IACA,CAAC4B,GAAeC,OACAA,EAAO,SAASA,EAAO,OACxB,YAAA,EAAc,SAASD,EAAM,aAAa;AAG/D,WAAOtC,EAAQ,OAAO,CAACwC,MAAQH,EAASf,GAAYkB,CAAG,CAAC;AAAA,EAC1D,GAAG,CAACxC,GAASsB,GAAYZ,CAAY,CAAC,EAErB,GAGX+B,IAAeL,EAAY,MAAM;AACrC,UAAMM,IAAWZ,EAAY;AAC7B,QAAI,CAACY,KAAY,CAAClC,EAAU;AAE5B,IAAAkC,EAAS,MAAM,SAAS;AACxB,UAAMC,IAAeD,EAAS;AAE9B,QAAI,OAAOlC,KAAa,UAAU;AAChC,YAAMoC,IAAa,SAAS,iBAAiBF,CAAQ,EAAE,UAAU,KAAK,IAChEG,IAAYrC,EAAS,UAAUA,EAAS,UAAUoC,IAAa,GAC/DE,IAAYtC,EAAS,UAAUA,EAAS,UAAUoC,IAAa;AAErE,MAAAF,EAAS,MAAM,SAAS,GAAG,KAAK,IAAI,KAAK,IAAIC,GAAcE,CAAS,GAAGC,CAAS,CAAC;AAAA,IACnF;AACE,MAAAJ,EAAS,MAAM,SAAS,GAAGC,CAAY;AAAA,EAE3C,GAAG,CAACnC,CAAQ,CAAC;AAEb,EAAAuC,EAAU,MAAM;AACd,IAAAN,EAAA;AAAA,EACF,GAAG,CAACxB,GAAcwB,CAAY,CAAC;AAG/B,QAAMO,IAAyBZ,EAAY,MAAM;AAC/C,UAAMM,IAAWZ,EAAY,SACvBmB,IAAUhB,EAAW;AAC3B,QAAI,CAACS,KAAY,CAACO,KAAWvB,MAAiB,KAAM;AAGpD,UAAMwB,IAAmBjC,EAAa,UAAU,GAAGS,CAAY;AAG/D,IAAAuB,EAAQ,cAAcC;AAEtB,UAAMC,IAAeT,EAAS,sBAAA,GACxBU,IAAcH,EAAQ,sBAAA,GAGtBL,IAAa,SAAS,iBAAiBF,CAAQ,EAAE,UAAU,KAAK;AAEtE,IAAAb,GAAoB;AAAA,MAClB,KAAKsB,EAAa,MAAM,OAAO,UAAUP,IAAa;AAAA,MACtD,MAAMO,EAAa,OAAO,OAAO,UAAU,KAAK,IAAIC,EAAY,QAAQD,EAAa,OAAOA,EAAa,QAAQ,GAAG;AAAA,IAAA,CACrH;AAAA,EACH,GAAG,CAAClC,GAAcS,CAAY,CAAC;AAE/B,EAAAqB,EAAU,MAAM;AACd,IAAI7B,KACF8B,EAAA;AAAA,EAEJ,GAAG,CAAC9B,GAAQ8B,GAAwB1B,CAAU,CAAC;AAG/C,QAAM+B,KAAe,CAAC,MAA8C;AAClE,UAAMC,IAAW,EAAE,OAAO,OACpBC,IAAY,EAAE,OAAO;AAE3B,IAAI5D,MAAU,UACZoB,EAAiBuC,CAAQ,GAE3BzD,IAAWyD,CAAQ,GAGnBE,GAAgBF,GAAUC,CAAS;AAAA,EACrC,GAEMC,KAAkB,CAACC,GAAcF,MAAsB;AAE3D,QAAIG,IAA6B,MAC7BC,IAA4B;AAEhC,eAAWC,KAAK1B,IAAU;AAGxB,YAAM2B,IADeJ,EAAK,UAAU,GAAGF,CAAS,EACX,YAAYK,CAAC;AAElD,UAAIC,MAAoB,IAAI;AAE1B,cAAMC,IAAaD,IAAkB,IAAIJ,EAAKI,IAAkB,CAAC,IAAI1D;AACrE,YAAI2D,MAAe3D,KAAS2D,MAAe;AAAA,KAAQD,MAAoB,GAAG;AAExE,gBAAME,IAAkBN,EAAK,UAAUI,IAAkBD,EAAE,QAAQL,CAAS;AAC5E,cAAI,CAACQ,EAAgB,SAAS5D,CAAK,KAAK,CAAC4D,EAAgB,SAAS;AAAA,CAAI,GAAG;AACvE,YAAAL,IAAcE,GACdD,IAAaE;AACb;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAIH,MAAgB,QAAQC,MAAe,MAAM;AAC/C,YAAMK,IAASP,EAAK,UAAUE,IAAaD,EAAY,QAAQH,CAAS;AACxE,MAAAlC,EAAgBqC,CAAW,GAC3BnC,EAAcyC,CAAM,GACpBrC,EAAgBgC,CAAU,GAC1BxC,EAAU,EAAI,GACdM,EAAe,CAAC,GAChB1B,IAAWiE,GAAQN,CAAW;AAAA,IAChC;AACE,MAAAvC,EAAU,EAAK,GACfE,EAAgB,IAAI,GACpBE,EAAc,EAAE,GAChBI,EAAgB,IAAI;AAAA,EAExB,GAGMsC,IAAe,CAAC1B,MAA0B;AAC9C,QAAIA,EAAO,YAAYb,MAAiB,QAAQN,MAAiB,KAAM;AAEvE,UAAMsB,IAAWZ,EAAY;AAC7B,QAAI,CAACY,EAAU;AAEf,UAAMwB,IAAgBjD,EAAa,UAAU,GAAGS,CAAY,GACtDyC,IAAclD,EAAa,UAAUyB,EAAS,cAAc,GAE5D0B,IAAc,GAAGhD,CAAY,GAAGmB,EAAO,KAAK,GAAGpC,CAAK,IACpDmD,IAAWY,IAAgBE,IAAcD;AAE/C,IAAIxE,MAAU,UACZoB,EAAiBuC,CAAQ,GAE3BzD,IAAWyD,CAAQ,GACnBxD,IAAWyC,GAAQnB,CAAY,GAE/BD,EAAU,EAAK,GACfE,EAAgB,IAAI,GACpBE,EAAc,EAAE,GAChBI,EAAgB,IAAI,GAGpB,WAAW,MAAM;AACf,YAAM0C,IAAeH,EAAc,SAASE,EAAY;AACxD,MAAA1B,EAAS,MAAA,GACTA,EAAS,kBAAkB2B,GAAcA,CAAY;AAAA,IACvD,GAAG,CAAC;AAAA,EACN,GAGMC,KAAgB,CAAC,MAAgD;AACrE,QAAKpD;AAEL,cAAQ,EAAE,KAAA;AAAA,QACR,KAAK;AACH,YAAE,eAAA,GACFO,EAAe,CAAC8C,OAAUA,IAAO,KAAK,KAAK,IAAIpC,EAAS,QAAQ,CAAC,CAAC;AAClE;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFV,EAAe,CAAC8C,OAAUA,IAAO,IAAIpC,EAAS,UAAU,KAAK,IAAIA,EAAS,QAAQ,CAAC,CAAC;AACpF;AAAA,QACF,KAAK;AACH,UAAIA,EAASX,CAAW,MACtB,EAAE,eAAA,GACFyC,EAAa9B,EAASX,CAAW,CAAC;AAEpC;AAAA,QACF,KAAK;AACH,YAAE,eAAA,GACFL,EAAU,EAAK;AACf;AAAA,QACF,KAAK;AACH,UAAIgB,EAASX,CAAW,MACtB,EAAE,eAAA,GACFyC,EAAa9B,EAASX,CAAW,CAAC;AAEpC;AAAA,MAAA;AAAA,EAEN;AAGA,EAAAuB,EAAU,MAAM;AACd,UAAMyB,IAAqB,CAACC,MAAkB;AAC5C,MACEzC,EAAY,WACZ,CAACA,EAAY,QAAQ,SAASyC,EAAE,MAAc,KAC9C3C,EAAY,WACZ,CAACA,EAAY,QAAQ,SAAS2C,EAAE,MAAc,KAE9CtD,EAAU,EAAK;AAAA,IAEnB;AAEA,oBAAS,iBAAiB,aAAaqD,CAAkB,GAClD,MAAM,SAAS,oBAAoB,aAAaA,CAAkB;AAAA,EAC3E,GAAG,CAAA,CAAE,GAGLzB,EAAU,MAAM;AACd,IAAI7B,KAAUc,EAAY,WACLA,EAAY,QAAQ,cAAc,sBAAsB,GAC/D,eAAe,EAAE,OAAO,UAAA,CAAW;AAAA,EAEnD,GAAG,CAACR,GAAaN,CAAM,CAAC;AAExB,QAAMwD,KAAWxD,KACf,gBAAAyD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK3C;AAAA,MACL,WAAW;AAAA,0CACyBpB,CAAiB;AAAA,MACrD,OAAO;AAAA,QACL,KAAKgB,EAAiB;AAAA,QACtB,MAAMA,EAAiB;AAAA,MAAA;AAAA,MAGxB,UAAA3B,IACC,gBAAA0E,EAAC,OAAA,EAAI,WAAU,wCACb,UAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,qCAAA,CAAqC,GACvD,IACExC,EAAS,WAAW,IACtB,gBAAAwC,EAAC,OAAA,EAAI,WAAU,gDACZ,UAAAlE,EAAA,CACH,IAEA,gBAAAkE,EAAC,MAAA,EAAG,WAAU,oBACX,UAAAxC,EAAS,IAAI,CAACI,GAAQqC,wBACpB,MAAA,EACC,UAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,eAAaD,MAAUpD;AAAA,UACvB,WAAW,2BACToD,MAAUpD,IAAc,WAAW,EACrC,IAAIe,EAAO,WAAW,2CAA2C,EAAE;AAAA,UACnE,SAAS,MAAM0B,EAAa1B,CAAM;AAAA,UAClC,cAAc,MAAMd,EAAemD,CAAK;AAAA,UAEvC,UAAA;AAAA,YAAArC,EAAO,UACN,gBAAAoC,EAAC,OAAA,EAAI,WAAU,UACb,4BAAC,OAAA,EAAI,WAAU,wBACb,UAAA,gBAAAA,EAAC,SAAI,KAAKpC,EAAO,QAAQ,KAAI,IAAG,GAClC,EAAA,CACF;AAAA,YAEF,gBAAAoC,EAAC,QAAA,EAAM,UAAApC,EAAO,SAASA,EAAO,MAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,KAjB/BA,EAAO,KAmBhB,CACD,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAKN,SACE,gBAAAsC,EAAC,OAAA,EAAI,WAAW,YAAYlE,CAAS,IAAI,cAAYO,IAAS,SAAS,UAAW,GAAGL,GAEnF,UAAA;AAAA,IAAA,gBAAA8D;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK1C;AAAA,QACL,WAAU;AAAA,QACV,OAAO;AAAA,UACL,MAAMH,EAAY,UAAU,iBAAiBA,EAAY,OAAO,EAAE,OAAO;AAAA,UACzE,OAAOA,EAAY,SAAS;AAAA,UAC5B,SAASA,EAAY,UAAU,iBAAiBA,EAAY,OAAO,EAAE,UAAU;AAAA,QAAA;AAAA,QAEjF,eAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IAGd,gBAAA6C;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK7C;AAAA,QACL,OAAOb;AAAA,QACP,UAAUoC;AAAA,QACV,WAAWiB;AAAA,QACX,aAAAlE;AAAA,QACA,UAAAC;AAAA,QACA,UAAAC;AAAA,QACA,MAAM,OAAOE,KAAa,WAAWA,EAAS,WAAWD,IAAOC,IAAW,IAAID;AAAA,QAC/E,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGXuE,GAAaJ,IAAU,SAAS,IAAI;AAAA,EAAA,GACvC;AAEJ;"}
|
package/dist/index51.js
CHANGED
|
@@ -1,15 +1,150 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { jsx as o, jsxs as C } from "react/jsx-runtime";
|
|
2
|
+
import { useState as M, useCallback as b, createContext as B, useId as O, useContext as g } from "react";
|
|
3
|
+
const v = B(null);
|
|
4
|
+
function w() {
|
|
5
|
+
const n = g(v);
|
|
6
|
+
if (!n)
|
|
7
|
+
throw new Error("Menu components must be used within a Menu");
|
|
8
|
+
return n;
|
|
9
|
+
}
|
|
10
|
+
function D({
|
|
11
|
+
children: n,
|
|
12
|
+
mode: e = "vertical",
|
|
13
|
+
selectedKeys: t,
|
|
14
|
+
defaultSelectedKeys: a = [],
|
|
15
|
+
openKeys: i,
|
|
16
|
+
defaultOpenKeys: f = [],
|
|
17
|
+
onSelect: c,
|
|
18
|
+
onOpenChange: r,
|
|
19
|
+
className: s = "",
|
|
20
|
+
...l
|
|
21
|
+
}) {
|
|
22
|
+
const [u, d] = M(a), [p, N] = M(f), j = t ?? u, h = i ?? p, I = b(
|
|
23
|
+
(m) => {
|
|
24
|
+
t === void 0 && d([m]), c?.(m);
|
|
25
|
+
},
|
|
26
|
+
[t, c]
|
|
27
|
+
), S = b(
|
|
28
|
+
(m) => {
|
|
29
|
+
const x = h.includes(m) ? h.filter((y) => y !== m) : [...h, m];
|
|
30
|
+
i === void 0 && N(x), r?.(x);
|
|
31
|
+
},
|
|
32
|
+
[h, i, r]
|
|
33
|
+
), T = ["menu", {
|
|
34
|
+
vertical: "",
|
|
35
|
+
horizontal: "menu-horizontal",
|
|
36
|
+
inline: ""
|
|
37
|
+
}[e], s].filter(Boolean).join(" ");
|
|
38
|
+
return /* @__PURE__ */ o(
|
|
39
|
+
v.Provider,
|
|
40
|
+
{
|
|
41
|
+
value: {
|
|
42
|
+
mode: e,
|
|
43
|
+
selectedKeys: j,
|
|
44
|
+
openKeys: h,
|
|
45
|
+
onSelect: I,
|
|
46
|
+
onToggleOpen: S
|
|
47
|
+
},
|
|
48
|
+
children: /* @__PURE__ */ o("ul", { className: T, ...l, children: n })
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
function K({
|
|
53
|
+
children: n,
|
|
54
|
+
itemKey: e,
|
|
55
|
+
icon: t,
|
|
56
|
+
disabled: a = !1,
|
|
57
|
+
onClick: i,
|
|
58
|
+
active: f,
|
|
59
|
+
className: c = "",
|
|
60
|
+
...r
|
|
61
|
+
}) {
|
|
62
|
+
const s = g(v), l = e && s ? s.selectedKeys.includes(e) : f, u = () => {
|
|
63
|
+
a || (e && s && s.onSelect(e), i?.());
|
|
64
|
+
}, d = [
|
|
65
|
+
l && "active bg-primary text-primary-content",
|
|
66
|
+
a && "disabled",
|
|
67
|
+
c
|
|
68
|
+
].filter(Boolean).join(" ");
|
|
69
|
+
return /* @__PURE__ */ o("li", { children: /* @__PURE__ */ C(
|
|
70
|
+
"a",
|
|
71
|
+
{
|
|
72
|
+
className: d,
|
|
73
|
+
onClick: u,
|
|
74
|
+
"aria-disabled": a,
|
|
75
|
+
role: "menuitem",
|
|
76
|
+
"data-state": l ? "active" : "inactive",
|
|
77
|
+
...r,
|
|
78
|
+
children: [
|
|
79
|
+
t && /* @__PURE__ */ o("span", { className: "menu-icon", children: t }),
|
|
80
|
+
n
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
) });
|
|
84
|
+
}
|
|
85
|
+
function k({
|
|
86
|
+
children: n,
|
|
87
|
+
itemKey: e,
|
|
88
|
+
label: t,
|
|
89
|
+
icon: a,
|
|
90
|
+
disabled: i = !1,
|
|
91
|
+
className: f = "",
|
|
7
92
|
...c
|
|
8
|
-
})
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
]
|
|
93
|
+
}) {
|
|
94
|
+
const r = w(), s = r.openKeys.includes(e), l = O(), u = () => {
|
|
95
|
+
i || r.onToggleOpen(e);
|
|
96
|
+
}, d = [i && "disabled", f].filter(Boolean).join(" ");
|
|
97
|
+
return r.mode === "inline" ? /* @__PURE__ */ o("li", { className: d, "data-state": s ? "open" : "closed", ...c, children: /* @__PURE__ */ C("details", { open: s, children: [
|
|
98
|
+
/* @__PURE__ */ C(
|
|
99
|
+
"summary",
|
|
100
|
+
{
|
|
101
|
+
onClick: (p) => {
|
|
102
|
+
p.preventDefault(), u();
|
|
103
|
+
},
|
|
104
|
+
"aria-expanded": s,
|
|
105
|
+
"aria-controls": l,
|
|
106
|
+
"aria-disabled": i,
|
|
107
|
+
children: [
|
|
108
|
+
a && /* @__PURE__ */ o("span", { className: "menu-icon", children: a }),
|
|
109
|
+
t
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
),
|
|
113
|
+
/* @__PURE__ */ o("ul", { id: l, role: "menu", children: n })
|
|
114
|
+
] }) }) : /* @__PURE__ */ o("li", { className: d, "data-state": s ? "open" : "closed", ...c, children: /* @__PURE__ */ C("details", { open: s, children: [
|
|
115
|
+
/* @__PURE__ */ C(
|
|
116
|
+
"summary",
|
|
117
|
+
{
|
|
118
|
+
onClick: (p) => {
|
|
119
|
+
p.preventDefault(), u();
|
|
120
|
+
},
|
|
121
|
+
"aria-expanded": s,
|
|
122
|
+
"aria-controls": l,
|
|
123
|
+
"aria-disabled": i,
|
|
124
|
+
children: [
|
|
125
|
+
a && /* @__PURE__ */ o("span", { className: "menu-icon", children: a }),
|
|
126
|
+
t
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
),
|
|
130
|
+
/* @__PURE__ */ o("ul", { id: l, role: "menu", children: n })
|
|
131
|
+
] }) });
|
|
132
|
+
}
|
|
133
|
+
function z({ children: n, className: e = "", ...t }) {
|
|
134
|
+
const a = ["menu-title", e].filter(Boolean).join(" ");
|
|
135
|
+
return /* @__PURE__ */ o("li", { className: a, ...t, children: n });
|
|
136
|
+
}
|
|
137
|
+
function E({ className: n = "", ...e }) {
|
|
138
|
+
const t = ["border-t border-base-300 my-1", n].filter(Boolean).join(" ");
|
|
139
|
+
return /* @__PURE__ */ o("li", { className: t, role: "separator", ...e });
|
|
140
|
+
}
|
|
141
|
+
const A = Object.assign(D, {
|
|
142
|
+
Item: K,
|
|
143
|
+
SubMenu: k,
|
|
144
|
+
Title: z,
|
|
145
|
+
Divider: E
|
|
146
|
+
});
|
|
12
147
|
export {
|
|
13
|
-
|
|
148
|
+
A as Menu
|
|
14
149
|
};
|
|
15
150
|
//# sourceMappingURL=index51.js.map
|
package/dist/index51.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index51.js","sources":["../src/components/Browser.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface BrowserProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n url?: string\n contentClassName?: string\n}\n\nexport const Browser: React.FC<BrowserProps> = ({\n children,\n url = 'https://example.com',\n className = '',\n contentClassName = '',\n ...rest\n}) => {\n return (\n <div className={`mockup-browser border border-base-300 ${className}`} {...rest}>\n <div className=\"mockup-browser-toolbar\">\n <div className=\"input\">{url}</div>\n </div>\n <div className={`border-t border-base-300 ${contentClassName}`}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":["Browser","children","url","className","contentClassName","rest","jsx"],"mappings":";AAQO,MAAMA,IAAkC,CAAC;AAAA,EAC9C,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,WAAAC,IAAY;AAAA,EACZ,kBAAAC,IAAmB;AAAA,EACnB,GAAGC;AACL,wBAEK,OAAA,EAAI,WAAW,yCAAyCF,CAAS,IAAK,GAAGE,GACxE,UAAA;AAAA,EAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA,gBAAAA,EAAC,SAAI,WAAU,SAAS,aAAI,EAAA,CAC9B;AAAA,oBACC,OAAA,EAAI,WAAW,4BAA4BF,CAAgB,IACzD,UAAAH,EAAA,CACH;AAAA,GACF;"}
|
|
1
|
+
{"version":3,"file":"index51.js","sources":["../src/components/Menu.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useId } from 'react'\n\nexport type MenuMode = 'vertical' | 'horizontal' | 'inline'\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n children: React.ReactNode\n mode?: MenuMode\n selectedKeys?: string[]\n defaultSelectedKeys?: string[]\n openKeys?: string[]\n defaultOpenKeys?: string[]\n onSelect?: (key: string) => void\n onOpenChange?: (openKeys: string[]) => void\n}\n\nexport interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLAnchorElement>, 'onClick'> {\n children: React.ReactNode\n itemKey?: string\n icon?: React.ReactNode\n disabled?: boolean\n onClick?: () => void\n /** @deprecated Use itemKey and selectedKeys instead */\n active?: boolean\n}\n\nexport interface MenuSubMenuProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n itemKey: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface MenuTitleProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n}\n\nexport interface MenuDividerProps extends React.HTMLAttributes<HTMLLIElement> {}\n\ninterface MenuContextValue {\n mode: MenuMode\n selectedKeys: string[]\n openKeys: string[]\n onSelect: (key: string) => void\n onToggleOpen: (key: string) => void\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu')\n }\n return context\n}\n\nfunction MenuRoot({\n children,\n mode = 'vertical',\n selectedKeys: controlledSelectedKeys,\n defaultSelectedKeys = [],\n openKeys: controlledOpenKeys,\n defaultOpenKeys = [],\n onSelect,\n onOpenChange,\n className = '',\n ...rest\n}: MenuProps) {\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys)\n\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const openKeys = controlledOpenKeys ?? internalOpenKeys\n\n const handleSelect = useCallback(\n (key: string) => {\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys([key])\n }\n onSelect?.(key)\n },\n [controlledSelectedKeys, onSelect]\n )\n\n const handleToggleOpen = useCallback(\n (key: string) => {\n const newOpenKeys = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : [...openKeys, key]\n\n if (controlledOpenKeys === undefined) {\n setInternalOpenKeys(newOpenKeys)\n }\n onOpenChange?.(newOpenKeys)\n },\n [openKeys, controlledOpenKeys, onOpenChange]\n )\n\n const modeClasses: Record<MenuMode, string> = {\n vertical: '',\n horizontal: 'menu-horizontal',\n inline: '',\n }\n\n const menuClasses = ['menu', modeClasses[mode], className].filter(Boolean).join(' ')\n\n return (\n <MenuContext.Provider\n value={{\n mode,\n selectedKeys,\n openKeys,\n onSelect: handleSelect,\n onToggleOpen: handleToggleOpen,\n }}\n >\n <ul className={menuClasses} {...rest}>{children}</ul>\n </MenuContext.Provider>\n )\n}\n\nfunction MenuItem({\n children,\n itemKey,\n icon,\n disabled = false,\n onClick,\n active,\n className = '',\n ...rest\n}: MenuItemProps) {\n const context = useContext(MenuContext)\n\n // Support both old active prop and new key-based selection\n const isSelected = itemKey && context ? context.selectedKeys.includes(itemKey) : active\n\n const handleClick = () => {\n if (disabled) return\n if (itemKey && context) {\n context.onSelect(itemKey)\n }\n onClick?.()\n }\n\n const itemClasses = [\n isSelected && 'active bg-primary text-primary-content',\n disabled && 'disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <li>\n <a\n className={itemClasses}\n onClick={handleClick}\n aria-disabled={disabled}\n role=\"menuitem\"\n data-state={isSelected ? 'active' : 'inactive'}\n {...rest}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {children}\n </a>\n </li>\n )\n}\n\nfunction MenuSubMenu({\n children,\n itemKey,\n label,\n icon,\n disabled = false,\n className = '',\n ...rest\n}: MenuSubMenuProps) {\n const context = useMenuContext()\n const isOpen = context.openKeys.includes(itemKey)\n const submenuId = useId()\n\n const handleToggle = () => {\n if (disabled) return\n context.onToggleOpen(itemKey)\n }\n\n const submenuClasses = [disabled && 'disabled', className].filter(Boolean).join(' ')\n\n // For inline mode, use collapsible details/summary\n if (context.mode === 'inline') {\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {label}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n }\n\n // For vertical/horizontal, use nested menu (dropdown style)\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {label}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n}\n\nfunction MenuTitle({ children, className = '', ...rest }: MenuTitleProps) {\n const titleClasses = ['menu-title', className].filter(Boolean).join(' ')\n\n return <li className={titleClasses} {...rest}>{children}</li>\n}\n\nfunction MenuDivider({ className = '', ...rest }: MenuDividerProps) {\n const dividerClasses = ['border-t border-base-300 my-1', className].filter(Boolean).join(' ')\n\n return <li className={dividerClasses} role=\"separator\" {...rest} />\n}\n\nexport const Menu = Object.assign(MenuRoot, {\n Item: MenuItem,\n SubMenu: MenuSubMenu,\n Title: MenuTitle,\n Divider: MenuDivider,\n})\n"],"names":["MenuContext","createContext","useMenuContext","context","useContext","MenuRoot","children","mode","controlledSelectedKeys","defaultSelectedKeys","controlledOpenKeys","defaultOpenKeys","onSelect","onOpenChange","className","rest","internalSelectedKeys","setInternalSelectedKeys","useState","internalOpenKeys","setInternalOpenKeys","selectedKeys","openKeys","handleSelect","useCallback","key","handleToggleOpen","newOpenKeys","k","menuClasses","jsx","MenuItem","itemKey","icon","disabled","onClick","active","isSelected","handleClick","itemClasses","jsxs","MenuSubMenu","label","isOpen","submenuId","useId","handleToggle","submenuClasses","e","MenuTitle","titleClasses","MenuDivider","dividerClasses","Menu"],"mappings":"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"}
|
package/dist/index52.js
CHANGED
|
@@ -1,25 +1,15 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
const
|
|
1
|
+
import { jsxs as d, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
const b = ({
|
|
3
3
|
children: e,
|
|
4
|
-
|
|
5
|
-
highlight: r = !1,
|
|
4
|
+
url: s = "https://example.com",
|
|
6
5
|
className: o = "",
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
{
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
...a,
|
|
14
|
-
children: /* @__PURE__ */ t("code", { children: e })
|
|
15
|
-
}
|
|
16
|
-
), i = ({
|
|
17
|
-
children: e,
|
|
18
|
-
className: n = "",
|
|
19
|
-
...r
|
|
20
|
-
}) => /* @__PURE__ */ t("div", { className: `mockup-code ${n}`, ...r, children: e });
|
|
21
|
-
i.Line = c;
|
|
6
|
+
contentClassName: a = "",
|
|
7
|
+
...c
|
|
8
|
+
}) => /* @__PURE__ */ d("div", { className: `mockup-browser border border-base-300 ${o}`, ...c, children: [
|
|
9
|
+
/* @__PURE__ */ r("div", { className: "mockup-browser-toolbar", children: /* @__PURE__ */ r("div", { className: "input", children: s }) }),
|
|
10
|
+
/* @__PURE__ */ r("div", { className: `border-t border-base-300 ${a}`, children: e })
|
|
11
|
+
] });
|
|
22
12
|
export {
|
|
23
|
-
|
|
13
|
+
b as Browser
|
|
24
14
|
};
|
|
25
15
|
//# sourceMappingURL=index52.js.map
|
package/dist/index52.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index52.js","sources":["../src/components/
|
|
1
|
+
{"version":3,"file":"index52.js","sources":["../src/components/Browser.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface BrowserProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n url?: string\n contentClassName?: string\n}\n\nexport const Browser: React.FC<BrowserProps> = ({\n children,\n url = 'https://example.com',\n className = '',\n contentClassName = '',\n ...rest\n}) => {\n return (\n <div className={`mockup-browser border border-base-300 ${className}`} {...rest}>\n <div className=\"mockup-browser-toolbar\">\n <div className=\"input\">{url}</div>\n </div>\n <div className={`border-t border-base-300 ${contentClassName}`}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":["Browser","children","url","className","contentClassName","rest","jsx"],"mappings":";AAQO,MAAMA,IAAkC,CAAC;AAAA,EAC9C,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,WAAAC,IAAY;AAAA,EACZ,kBAAAC,IAAmB;AAAA,EACnB,GAAGC;AACL,wBAEK,OAAA,EAAI,WAAW,yCAAyCF,CAAS,IAAK,GAAGE,GACxE,UAAA;AAAA,EAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA,gBAAAA,EAAC,SAAI,WAAU,SAAS,aAAI,EAAA,CAC9B;AAAA,oBACC,OAAA,EAAI,WAAW,4BAA4BF,CAAgB,IACzD,UAAAH,EAAA,CACH;AAAA,GACF;"}
|