react-docs-ui 0.6.13 → 0.6.15

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.
Files changed (70) hide show
  1. package/README.md +13 -0
  2. package/dist/AIChatDialog-W60DtiEW.js +418 -0
  3. package/dist/AIProvider-C1_b1iKH.js +1066 -0
  4. package/dist/AISelectionTrigger-MaBGhxTE.js +86 -0
  5. package/dist/AISettingsPanel-aiMnncnQ.js +524 -0
  6. package/dist/DocsApp-BBNDiw8A.js +23556 -0
  7. package/dist/GlobalContextMenu-DG6x5Y5w.js +278 -0
  8. package/dist/MdxContent-CMB8ZbXo.js +850 -0
  9. package/dist/MdxContent.lazy-C4rcCv4v.js +1768 -0
  10. package/dist/SearchDialog-tUSKKsxW.js +403 -0
  11. package/dist/SearchRuntime-5fXpxDsi.js +23 -0
  12. package/dist/context-menu-CB7erSoV.js +73 -0
  13. package/dist/dialog-DQ6nkP0y.js +97 -0
  14. package/dist/docs-app.es.d.ts +1 -0
  15. package/dist/docs-app.es.js +7 -9
  16. package/dist/react-docs-ui.css +2 -1
  17. package/dist/react-docs-ui.es.js +66 -195
  18. package/dist/shiki-highlighter-BmQSSJpS.js +7194 -0
  19. package/dist/theme-provider-fNhx9xK0.js +37 -0
  20. package/dist/types/components/DocsLayout.d.ts +1 -31
  21. package/dist/types/components/DocsLayout.d.ts.map +1 -1
  22. package/dist/types/components/Footer.d.ts +3 -28
  23. package/dist/types/components/Footer.d.ts.map +1 -1
  24. package/dist/types/components/HeaderNav.d.ts.map +1 -1
  25. package/dist/types/components/MdxContent.d.ts.map +1 -1
  26. package/dist/types/components/MobileSidebar.d.ts +1 -1
  27. package/dist/types/components/MobileSidebar.d.ts.map +1 -1
  28. package/dist/types/components/PageNavigation.d.ts +1 -1
  29. package/dist/types/components/PageNavigation.d.ts.map +1 -1
  30. package/dist/types/components/SidebarNav.d.ts +1 -1
  31. package/dist/types/components/SidebarNav.d.ts.map +1 -1
  32. package/dist/types/components/TableOfContents.d.ts +1 -1
  33. package/dist/types/components/TableOfContents.d.ts.map +1 -1
  34. package/dist/types/components/ai/AIChatDialog.d.ts +1 -1
  35. package/dist/types/components/ai/AIChatDialog.d.ts.map +1 -1
  36. package/dist/types/components/ai/AISelectionTrigger.d.ts +1 -1
  37. package/dist/types/components/ai/AISelectionTrigger.d.ts.map +1 -1
  38. package/dist/types/components/ai/AISettingsPanel.d.ts +1 -1
  39. package/dist/types/components/ai/AISettingsPanel.d.ts.map +1 -1
  40. package/dist/types/components/search/SearchItem.d.ts +1 -2
  41. package/dist/types/components/search/SearchItem.d.ts.map +1 -1
  42. package/dist/types/components/ui/button.d.ts +4 -4
  43. package/dist/types/components/ui/button.d.ts.map +1 -1
  44. package/dist/types/components/ui/toast.d.ts +3 -3
  45. package/dist/types/components/ui/toast.d.ts.map +1 -1
  46. package/dist/types/external-modules.d.ts +38 -0
  47. package/dist/types/generated/shiki-bundle.d.ts +1 -0
  48. package/dist/types/generated/shiki-bundle.d.ts.map +1 -1
  49. package/dist/types/lib/ai/crypto.d.ts.map +1 -1
  50. package/dist/types/lib/config.d.ts +0 -4
  51. package/dist/types/lib/config.d.ts.map +1 -1
  52. package/dist/types/lib/export-utils.d.ts.map +1 -1
  53. package/dist/types/lib/frontmatter.d.ts +6 -0
  54. package/dist/types/lib/frontmatter.d.ts.map +1 -0
  55. package/dist/types/lib/rehype-toc.d.ts.map +1 -1
  56. package/dist/types/lib/search/search-index-plugin.d.ts.map +1 -1
  57. package/dist/types/lib/shiki-highlighter.d.ts.map +1 -1
  58. package/dist/types/mdast.d.ts +53 -0
  59. package/dist/use-toast-d9VPBjMn.js +98 -0
  60. package/dist/utils-Ct96Mtjw.js +8 -0
  61. package/package.json +23 -24
  62. package/dist/AISettingsPanel-KzfonkeY.js +0 -1171
  63. package/dist/DocsApp-DTFpyBOl.js +0 -35170
  64. package/dist/GlobalContextMenu-hGNTKw3S.js +0 -210
  65. package/dist/MdxContent-B664V_Hk.js +0 -812
  66. package/dist/MdxContent.lazy-DsQt7MZQ.js +0 -1512
  67. package/dist/SearchDialog-Cfam5kUW.js +0 -406
  68. package/dist/SearchRuntime-Dk265vam.js +0 -31
  69. package/dist/context-menu-CBGG4zJl.js +0 -140
  70. package/dist/index-ByXnCzVt.js +0 -12
@@ -1,406 +0,0 @@
1
- import { j as s, c as z, d as P, h as K, aF as V, aG as $ } from "./DocsApp-DTFpyBOl.js";
2
- import { useState as y, useRef as j, useEffect as p, useCallback as E, createContext as q, useContext as H, forwardRef as M } from "react";
3
- import { useNavigate as Q } from "react-router-dom";
4
- import R from "flexsearch";
5
- import { Search as U, X as G, FileText as X, Loader2 as J } from "lucide-react";
6
- const W = 20;
7
- class O {
8
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
- index;
10
- sections = /* @__PURE__ */ new Map();
11
- initialized = !1;
12
- constructor() {
13
- this.index = new R.Index({
14
- tokenize: "full",
15
- resolution: 9,
16
- cache: 100
17
- });
18
- }
19
- init(t) {
20
- this.clear();
21
- for (const r of t.sections)
22
- this.sections.set(r.id, r), this.index.add(r.id, r.tokens.join(" "));
23
- this.initialized = !0;
24
- }
25
- clear() {
26
- this.sections.clear(), this.index = new R.Index({
27
- tokenize: "full",
28
- resolution: 9,
29
- cache: 100
30
- }), this.initialized = !1;
31
- }
32
- search(t) {
33
- if (!this.initialized)
34
- return [];
35
- const { query: r, limit: n = W } = t, i = r.toLowerCase().trim();
36
- return i ? this.index.search(i, { limit: n }).map((c) => {
37
- const a = this.sections.get(c);
38
- return a ? {
39
- id: a.id,
40
- pageTitle: a.pageTitle,
41
- sectionTitle: a.sectionTitle,
42
- snippet: this.generateSnippet(a.content, i),
43
- url: a.url,
44
- score: 1
45
- } : null;
46
- }).filter((c) => c !== null) : [];
47
- }
48
- generateSnippet(t, r) {
49
- if (!t) return "";
50
- const n = 150, i = t.toLowerCase(), d = r.split(/\s+/).filter(Boolean);
51
- let c = 0;
52
- for (const u of d) {
53
- const f = i.indexOf(u);
54
- if (f !== -1) {
55
- c = f;
56
- break;
57
- }
58
- }
59
- const a = Math.max(0, c - 30), o = Math.min(t.length, a + n);
60
- let l = t.slice(a, o);
61
- return a > 0 && (l = "..." + l), o < t.length && (l = l + "..."), l;
62
- }
63
- isInitialized() {
64
- return this.initialized;
65
- }
66
- getSectionCount() {
67
- return this.sections.size;
68
- }
69
- }
70
- const le = new O();
71
- function Y(e, t, r = "mark") {
72
- if (!e || t.length === 0)
73
- return e;
74
- const n = e.toLowerCase(), i = [];
75
- for (const o of t) {
76
- const l = o.toLowerCase();
77
- let u = 0;
78
- for (; ; ) {
79
- const f = n.indexOf(l, u);
80
- if (f === -1) break;
81
- i.push({ start: f, end: f + o.length }), u = f + 1;
82
- }
83
- }
84
- if (i.length === 0)
85
- return e;
86
- const d = Z(i);
87
- let c = "", a = 0;
88
- for (const o of d)
89
- c += e.slice(a, o.start), c += `<${r}>`, c += e.slice(o.start, o.end), c += `</${r}>`, a = o.end;
90
- return c += e.slice(a), c;
91
- }
92
- function Z(e) {
93
- if (e.length === 0) return [];
94
- const t = [...e].sort((n, i) => n.start - i.start), r = [t[0]];
95
- for (let n = 1; n < t.length; n++) {
96
- const i = t[n], d = r[r.length - 1];
97
- i.start <= d.end ? d.end = Math.max(d.end, i.end) : r.push(i);
98
- }
99
- return r;
100
- }
101
- function ee(e, t, r = {}) {
102
- const {
103
- maxLength: n = 120,
104
- contextBefore: i = 30,
105
- contextAfter: d = 80
106
- } = r;
107
- if (!e) return "";
108
- if (t.length === 0)
109
- return e.slice(0, n) + (e.length > n ? "..." : "");
110
- const c = e.toLowerCase();
111
- let a = -1, o = "";
112
- for (const g of t) {
113
- const h = c.indexOf(g.toLowerCase());
114
- h !== -1 && (a === -1 || h < a) && (a = h, o = g);
115
- }
116
- if (a === -1)
117
- return e.slice(0, n) + (e.length > n ? "..." : "");
118
- const l = Math.max(0, a - i), u = Math.min(e.length, a + o.length + d);
119
- let f = e.slice(l, u);
120
- return l > 0 && (f = "..." + f), u < e.length && (f = f + "..."), f;
121
- }
122
- function D(e, t, r = {}) {
123
- const n = ee(e, t, r);
124
- return Y(n, t, r.tag || "mark");
125
- }
126
- function te(e) {
127
- return e.toLowerCase().split(/[\s\-_]+/).filter((t) => t.length > 0);
128
- }
129
- const B = q(null);
130
- function ne() {
131
- const e = H(B);
132
- if (!e)
133
- throw new Error("useSearch must be used within a SearchProvider");
134
- return e;
135
- }
136
- function de({
137
- children: e,
138
- lang: t = "zh-cn",
139
- enabled: r = !0,
140
- maxResults: n = 20,
141
- enableHotkeys: i = !0
142
- }) {
143
- const [d, c] = y(!1), [a, o] = y(!1), [l, u] = y(null), [f, g] = y([]), [h, I] = y(""), [v, S] = y(!1), x = j(null), b = j(null), N = j(null), L = j(!1);
144
- p(() => (x.current = new O(), () => {
145
- x.current && (x.current.clear(), x.current = null);
146
- }), []), p(() => {
147
- N.current && N.current !== t && (c(!1), N.current = null, g([]), I(""), x.current && x.current.clear());
148
- }, [t]);
149
- const k = E(async () => {
150
- if (!(d && N.current === t || L.current || !r)) {
151
- L.current = !0, o(!0), u(null);
152
- try {
153
- const m = await fetch(`/search-index-${t}.json`);
154
- if (!m.ok)
155
- throw new Error(`Failed to load search index: ${m.status}`);
156
- const w = await m.json();
157
- x.current && x.current.init(w), N.current = t, c(!0);
158
- } catch (m) {
159
- u(m instanceof Error ? m.message : "Failed to load search index");
160
- } finally {
161
- o(!1), L.current = !1;
162
- }
163
- }
164
- }, [t, d, r]), T = E(async (m) => {
165
- if (!m.trim())
166
- return g([]), [];
167
- x.current?.isInitialized() || await k();
168
- const w = {
169
- query: m,
170
- lang: t,
171
- limit: n
172
- };
173
- if (x.current) {
174
- const C = x.current.search(w);
175
- return g(C), C;
176
- }
177
- return [];
178
- }, [t, k, n]);
179
- p(() => {
180
- if (!h.trim()) {
181
- g([]);
182
- return;
183
- }
184
- return b.current && clearTimeout(b.current), b.current = setTimeout(() => {
185
- T(h);
186
- }, 150), () => {
187
- b.current && clearTimeout(b.current);
188
- };
189
- }, [h, T]), p(() => {
190
- v && !d && !L.current && k();
191
- }, [v, d, k]), p(() => {
192
- if (!i) return;
193
- const m = (w) => {
194
- (w.metaKey || w.ctrlKey) && w.key.toLowerCase() === "k" && (w.preventDefault(), S((C) => !C)), w.key === "Escape" && v && S(!1);
195
- };
196
- return document.addEventListener("keydown", m), () => document.removeEventListener("keydown", m);
197
- }, [i, v]);
198
- const A = {
199
- isLoaded: d,
200
- isLoading: a,
201
- error: l,
202
- search: T,
203
- results: f,
204
- query: h,
205
- setQuery: I,
206
- open: v,
207
- setOpen: S,
208
- loadIndex: k
209
- };
210
- return /* @__PURE__ */ s.jsx(B.Provider, { value: A, children: e });
211
- }
212
- const F = M(
213
- ({ value: e, onChange: t, onClear: r, className: n, placeholder: i, ...d }, c) => /* @__PURE__ */ s.jsxs("div", { className: "flex items-center gap-3 px-4 py-3 border-b", children: [
214
- /* @__PURE__ */ s.jsx(U, { className: "h-5 w-5 shrink-0 text-muted-foreground" }),
215
- /* @__PURE__ */ s.jsx(
216
- "input",
217
- {
218
- ref: c,
219
- type: "text",
220
- value: e,
221
- onChange: (a) => t(a.target.value),
222
- placeholder: i || "搜索文档...",
223
- className: z(
224
- "flex-1 bg-transparent text-base outline-none placeholder:text-muted-foreground",
225
- n
226
- ),
227
- ...d
228
- }
229
- ),
230
- e && r && /* @__PURE__ */ s.jsx(
231
- "button",
232
- {
233
- type: "button",
234
- onClick: r,
235
- className: "p-1 rounded hover:bg-muted transition-colors",
236
- children: /* @__PURE__ */ s.jsx(G, { className: "h-4 w-4 text-muted-foreground" })
237
- }
238
- )
239
- ] })
240
- );
241
- F.displayName = "SearchInput";
242
- const _ = M(
243
- ({ result: e, query: t, isSelected: r, onClick: n, onMouseEnter: i }, d) => {
244
- const c = te(t), a = D(
245
- e.sectionTitle,
246
- c,
247
- { maxLength: 100, contextBefore: 0, contextAfter: 0 }
248
- ), o = D(
249
- e.snippet,
250
- c,
251
- { maxLength: 150 }
252
- );
253
- return /* @__PURE__ */ s.jsxs(
254
- "div",
255
- {
256
- ref: d,
257
- onClick: n,
258
- onMouseEnter: i,
259
- className: z(
260
- "flex items-start gap-3 px-4 py-3 cursor-pointer transition-all duration-200 border-l-2 rounded-r-md mx-2",
261
- "hover:shadow-sm hover:translate-x-0.5",
262
- r ? "bg-accent/80 border-l-primary shadow-md scale-[1.02] translate-x-1" : "hover:bg-muted/50 border-l-transparent"
263
- ),
264
- children: [
265
- /* @__PURE__ */ s.jsx(X, { className: "h-4 w-4 mt-0.5 shrink-0 text-muted-foreground" }),
266
- /* @__PURE__ */ s.jsxs("div", { className: "flex-1 min-w-0", children: [
267
- /* @__PURE__ */ s.jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ s.jsx(
268
- "span",
269
- {
270
- className: "font-medium text-sm truncate",
271
- dangerouslySetInnerHTML: { __html: a }
272
- }
273
- ) }),
274
- e.pageTitle !== e.sectionTitle && /* @__PURE__ */ s.jsx("div", { className: "text-xs text-muted-foreground truncate mt-0.5", children: e.pageTitle }),
275
- o && /* @__PURE__ */ s.jsx(
276
- "div",
277
- {
278
- className: "text-xs text-muted-foreground mt-1 line-clamp-2",
279
- dangerouslySetInnerHTML: { __html: o }
280
- }
281
- )
282
- ] })
283
- ]
284
- }
285
- );
286
- }
287
- );
288
- _.displayName = "SearchItem";
289
- function re({ results: e, query: t, onSelect: r }) {
290
- const [n, i] = y(0), d = j(null), c = j(null);
291
- p(() => {
292
- i(0);
293
- }, [e]), p(() => {
294
- if (c.current && d.current) {
295
- const o = d.current, l = c.current, u = o.getBoundingClientRect(), f = l.getBoundingClientRect();
296
- f.bottom > u.bottom ? l.scrollIntoView({ block: "nearest" }) : f.top < u.top && l.scrollIntoView({ block: "nearest" });
297
- }
298
- }, [n]), p(() => {
299
- const o = (l) => {
300
- if (l.key === "ArrowDown")
301
- l.preventDefault(), i((u) => Math.min(u + 1, e.length - 1));
302
- else if (l.key === "ArrowUp")
303
- l.preventDefault(), i((u) => Math.max(u - 1, 0));
304
- else if (l.key === "Enter") {
305
- l.preventDefault();
306
- const u = e[n];
307
- u && r(u.url);
308
- }
309
- };
310
- return document.addEventListener("keydown", o), () => document.removeEventListener("keydown", o);
311
- }, [e, n, r]);
312
- const a = (o) => {
313
- r(o.url);
314
- };
315
- return /* @__PURE__ */ s.jsx("div", { ref: d, className: "py-2", children: e.map((o, l) => /* @__PURE__ */ s.jsx(
316
- _,
317
- {
318
- result: o,
319
- query: t,
320
- isSelected: l === n,
321
- ref: l === n ? c : null,
322
- onClick: () => a(o),
323
- onMouseEnter: () => i(l)
324
- },
325
- o.id
326
- )) });
327
- }
328
- function ue({ placeholder: e }) {
329
- const {
330
- open: t,
331
- setOpen: r,
332
- query: n,
333
- setQuery: i,
334
- results: d,
335
- isLoading: c,
336
- error: a,
337
- isLoaded: o
338
- } = ne(), l = Q(), u = j(null);
339
- p(() => {
340
- t && u.current && setTimeout(() => u.current?.focus(), 0);
341
- }, [t]), p(() => {
342
- t || i("");
343
- }, [t, i]);
344
- const f = (h) => {
345
- l(h), r(!1);
346
- }, g = (h) => {
347
- r(h);
348
- };
349
- return /* @__PURE__ */ s.jsx(P, { open: t, onOpenChange: g, children: /* @__PURE__ */ s.jsxs(K, { className: "overflow-hidden p-0 shadow-lg max-w-xl top-[15%] translate-y-0", showCloseButton: !1, children: [
350
- /* @__PURE__ */ s.jsx(V, { children: "搜索文档" }),
351
- /* @__PURE__ */ s.jsx($, { children: "搜索文档内容" }),
352
- /* @__PURE__ */ s.jsxs("div", { className: "flex flex-col", children: [
353
- /* @__PURE__ */ s.jsx(
354
- F,
355
- {
356
- ref: u,
357
- value: n,
358
- onChange: i,
359
- placeholder: e,
360
- onClear: () => i("")
361
- }
362
- ),
363
- /* @__PURE__ */ s.jsxs("div", { className: "max-h-[60vh] overflow-y-auto border-t", children: [
364
- c && !o && /* @__PURE__ */ s.jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ s.jsx(J, { className: "h-6 w-6 animate-spin text-muted-foreground" }) }),
365
- a && /* @__PURE__ */ s.jsx("div", { className: "px-4 py-8 text-center text-sm text-muted-foreground", children: a }),
366
- o && !c && !n && /* @__PURE__ */ s.jsx("div", { className: "px-4 py-8 text-center text-sm text-muted-foreground", children: "输入关键词搜索文档" }),
367
- o && n && d.length === 0 && !c && /* @__PURE__ */ s.jsxs("div", { className: "px-4 py-8 text-center text-sm text-muted-foreground", children: [
368
- '未找到 "',
369
- n,
370
- '" 相关结果'
371
- ] }),
372
- d.length > 0 && /* @__PURE__ */ s.jsx(re, { results: d, query: n, onSelect: f })
373
- ] }),
374
- /* @__PURE__ */ s.jsxs("div", { className: "flex items-center justify-between border-t px-4 py-2 text-xs text-muted-foreground bg-muted/30", children: [
375
- /* @__PURE__ */ s.jsxs("div", { className: "flex items-center gap-4", children: [
376
- /* @__PURE__ */ s.jsxs("span", { className: "flex items-center gap-1", children: [
377
- /* @__PURE__ */ s.jsx("kbd", { className: "px-1.5 py-0.5 rounded bg-muted border text-[10px]", children: "↵" }),
378
- "选择"
379
- ] }),
380
- /* @__PURE__ */ s.jsxs("span", { className: "flex items-center gap-1", children: [
381
- /* @__PURE__ */ s.jsx("kbd", { className: "px-1.5 py-0.5 rounded bg-muted border text-[10px]", children: "↑↓" }),
382
- "导航"
383
- ] })
384
- ] }),
385
- /* @__PURE__ */ s.jsxs("span", { className: "flex items-center gap-1", children: [
386
- /* @__PURE__ */ s.jsx("kbd", { className: "px-1.5 py-0.5 rounded bg-muted border text-[10px]", children: "esc" }),
387
- "关闭"
388
- ] })
389
- ] })
390
- ] })
391
- ] }) });
392
- }
393
- export {
394
- de as S,
395
- ue as a,
396
- O as b,
397
- F as c,
398
- _ as d,
399
- re as e,
400
- Y as f,
401
- ee as g,
402
- D as h,
403
- le as s,
404
- te as t,
405
- ne as u
406
- };
@@ -1,31 +0,0 @@
1
- import { j as s } from "./DocsApp-DTFpyBOl.js";
2
- import { useEffect as o } from "react";
3
- import { S as i, u, a as n } from "./SearchDialog-Cfam5kUW.js";
4
- function c({
5
- openSignal: e,
6
- placeholder: t
7
- }) {
8
- const { setOpen: r } = u();
9
- return o(() => {
10
- e > 0 && r(!0);
11
- }, [e, r]), /* @__PURE__ */ s.jsx(n, { placeholder: t });
12
- }
13
- function x({
14
- lang: e,
15
- maxResults: t,
16
- placeholder: r,
17
- openSignal: a
18
- }) {
19
- return /* @__PURE__ */ s.jsx(
20
- i,
21
- {
22
- lang: e,
23
- maxResults: t,
24
- enableHotkeys: !1,
25
- children: /* @__PURE__ */ s.jsx(c, { openSignal: a, placeholder: r })
26
- }
27
- );
28
- }
29
- export {
30
- x as default
31
- };
@@ -1,140 +0,0 @@
1
- import { j as o, c as d } from "./DocsApp-DTFpyBOl.js";
2
- import * as r from "react";
3
- import * as e from "@radix-ui/react-context-menu";
4
- import { ChevronRightIcon as l, CheckIcon as c, CircleIcon as m } from "lucide-react";
5
- const w = e.Root, R = e.Trigger, I = e.Group, M = e.Sub, v = e.RadioGroup, u = r.forwardRef(({ className: t, inset: a, children: s, ...n }, i) => /* @__PURE__ */ o.jsxs(
6
- e.SubTrigger,
7
- {
8
- ref: i,
9
- className: d(
10
- "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",
11
- a && "pl-8",
12
- t
13
- ),
14
- ...n,
15
- children: [
16
- s,
17
- /* @__PURE__ */ o.jsx(l, { className: "ml-auto h-4 w-4" })
18
- ]
19
- }
20
- ));
21
- u.displayName = e.SubTrigger.displayName;
22
- const p = r.forwardRef(({ className: t, ...a }, s) => /* @__PURE__ */ o.jsx(
23
- e.SubContent,
24
- {
25
- ref: s,
26
- className: d(
27
- "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
28
- t
29
- ),
30
- ...a
31
- }
32
- ));
33
- p.displayName = e.SubContent.displayName;
34
- const f = r.forwardRef(({ className: t, ...a }, s) => /* @__PURE__ */ o.jsx(e.Portal, { children: /* @__PURE__ */ o.jsx(
35
- e.Content,
36
- {
37
- ref: s,
38
- className: d(
39
- "z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
40
- t
41
- ),
42
- ...a
43
- }
44
- ) }));
45
- f.displayName = e.Content.displayName;
46
- const x = r.forwardRef(({ className: t, inset: a, ...s }, n) => /* @__PURE__ */ o.jsx(
47
- e.Item,
48
- {
49
- ref: n,
50
- className: d(
51
- "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
52
- a && "pl-8",
53
- t
54
- ),
55
- ...s
56
- }
57
- ));
58
- x.displayName = e.Item.displayName;
59
- const b = r.forwardRef(({ className: t, children: a, checked: s, ...n }, i) => /* @__PURE__ */ o.jsxs(
60
- e.CheckboxItem,
61
- {
62
- ref: i,
63
- className: d(
64
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
65
- t
66
- ),
67
- checked: s,
68
- ...n,
69
- children: [
70
- /* @__PURE__ */ o.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ o.jsx(e.ItemIndicator, { children: /* @__PURE__ */ o.jsx(c, { className: "h-4 w-4" }) }) }),
71
- a
72
- ]
73
- }
74
- ));
75
- b.displayName = e.CheckboxItem.displayName;
76
- const g = r.forwardRef(({ className: t, children: a, ...s }, n) => /* @__PURE__ */ o.jsxs(
77
- e.RadioItem,
78
- {
79
- ref: n,
80
- className: d(
81
- "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
82
- t
83
- ),
84
- ...s,
85
- children: [
86
- /* @__PURE__ */ o.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ o.jsx(e.ItemIndicator, { children: /* @__PURE__ */ o.jsx(m, { className: "h-2 w-2 fill-current" }) }) }),
87
- a
88
- ]
89
- }
90
- ));
91
- g.displayName = e.RadioItem.displayName;
92
- const h = r.forwardRef(({ className: t, inset: a, ...s }, n) => /* @__PURE__ */ o.jsx(
93
- e.Label,
94
- {
95
- ref: n,
96
- className: d(
97
- "px-2 py-1.5 text-xs font-semibold text-muted-foreground",
98
- a && "pl-8",
99
- t
100
- ),
101
- ...s
102
- }
103
- ));
104
- h.displayName = e.Label.displayName;
105
- const N = r.forwardRef(({ className: t, ...a }, s) => /* @__PURE__ */ o.jsx(
106
- e.Separator,
107
- {
108
- ref: s,
109
- className: d("-mx-1 my-1 h-px bg-muted", t),
110
- ...a
111
- }
112
- ));
113
- N.displayName = e.Separator.displayName;
114
- const y = ({
115
- className: t,
116
- ...a
117
- }) => /* @__PURE__ */ o.jsx(
118
- "span",
119
- {
120
- className: d("ml-auto text-xs tracking-widest opacity-60", t),
121
- ...a
122
- }
123
- );
124
- y.displayName = "ContextMenuShortcut";
125
- export {
126
- w as C,
127
- R as a,
128
- f as b,
129
- h as c,
130
- I as d,
131
- x as e,
132
- N as f,
133
- M as g,
134
- u as h,
135
- p as i,
136
- v as j,
137
- g as k,
138
- b as l,
139
- y as m
140
- };
@@ -1,12 +0,0 @@
1
- import { A, u as I } from "./DocsApp-DTFpyBOl.js";
2
- import { A as e, a as r, b as s } from "./AISettingsPanel-KzfonkeY.js";
3
- import { c as g, d as p } from "./AISettingsPanel-KzfonkeY.js";
4
- export {
5
- r as AIChatDialog,
6
- g as AIChatInput,
7
- p as AIChatMessage,
8
- A as AIProvider,
9
- e as AISelectionTrigger,
10
- s as AISettingsPanel,
11
- I as useAI
12
- };