@burdenoff/fe-libs 2026.928.1 → 2026.928.2
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/chrome/SideNavigation.d.ts.map +1 -1
- package/dist/chrome/SideNavigation.js +71 -68
- package/dist/chrome/sideNavigation/sideNavEscape.d.ts +41 -0
- package/dist/chrome/sideNavigation/sideNavEscape.d.ts.map +1 -0
- package/dist/chrome/sideNavigation/sideNavEscape.js +8 -0
- package/dist/chrome/sideNavigation/useSideNavigationState.d.ts +8 -1
- package/dist/chrome/sideNavigation/useSideNavigationState.d.ts.map +1 -1
- package/dist/chrome/sideNavigation/useSideNavigationState.js +35 -23
- package/dist/shared/assistant/ui/AIAssistantPanel.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AIAssistantPanel.js +82 -79
- package/dist/shared/assistant/ui/AssistantOverlay.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantOverlay.js +86 -84
- package/dist/shared/assistant/ui/assistantOverlayState.d.ts +31 -8
- package/dist/shared/assistant/ui/assistantOverlayState.d.ts.map +1 -1
- package/dist/shared/assistant/ui/assistantOverlayState.js +22 -16
- package/dist/shared/assistant/ui/panelOverlays.d.ts +31 -0
- package/dist/shared/assistant/ui/panelOverlays.d.ts.map +1 -1
- package/dist/shared/assistant/ui/panelOverlays.js +11 -8
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +78 -74
- package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.js +40 -39
- package/dist/shared/assistant/ui/voice/voiceSessionEscape.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/voiceSessionEscape.js +7 -10
- package/dist/shared/assistant/useAssistantKeyboardShortcuts.d.ts +3 -1
- package/dist/shared/assistant/useAssistantKeyboardShortcuts.d.ts.map +1 -1
- package/dist/shared/assistant/useAssistantKeyboardShortcuts.js +25 -25
- package/dist/shared/hooks/index.d.ts +1 -0
- package/dist/shared/hooks/index.d.ts.map +1 -1
- package/dist/shared/hooks/useReturnFocus.d.ts +56 -0
- package/dist/shared/hooks/useReturnFocus.d.ts.map +1 -0
- package/dist/shared/hooks/useReturnFocus.js +41 -0
- package/dist/shared/providers/AppShellProvider.d.ts +12 -1
- package/dist/shared/providers/AppShellProvider.d.ts.map +1 -1
- package/dist/shared/providers/AppShellProvider.js +175 -161
- package/dist/shared-assistant.js +76 -76
- package/dist/shared-hooks.js +34 -33
- package/dist/shared.js +89 -88
- package/dist/ui/modal-shell.d.ts.map +1 -1
- package/dist/ui/modal-shell.js +23 -13
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideNavigation.d.ts","sourceRoot":"","sources":["../../src/chrome/SideNavigation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"SideNavigation.d.ts","sourceRoot":"","sources":["../../src/chrome/SideNavigation.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAMtD,YAAY,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kCAAkC;IAClC,KAAK,EAAE,OAAO,EAAE,CAAC;IAEjB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IAEpB,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,yBAAyB;IACzB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpC,8BAA8B;IAC9B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAE9B,4BAA4B;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB,sEAAsE;IACtE,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEnC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,eAAe,CAAC;CACvC;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CA0NlD,CAAC"}
|
|
@@ -4,40 +4,43 @@ import { NavItemRenderer as a } from "./sideNavigation/NavItemRenderer.js";
|
|
|
4
4
|
import { SidebarHeader as o } from "./sideNavigation/SidebarHeader.js";
|
|
5
5
|
import { MobileActionsBar as s } from "./sideNavigation/MobileActionsBar.js";
|
|
6
6
|
import { useSideNavigationState as c } from "./sideNavigation/useSideNavigationState.js";
|
|
7
|
-
import {
|
|
7
|
+
import { useRef as l } from "react";
|
|
8
|
+
import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
8
9
|
//#region src/chrome/SideNavigation.tsx
|
|
9
|
-
var
|
|
10
|
-
let { expandedItems:
|
|
11
|
-
items:
|
|
12
|
-
currentPath:
|
|
13
|
-
collapsed:
|
|
14
|
-
onToggleCollapse:
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
var p = ({ items: p, currentPath: m, collapsed: h = !1, onItemClick: g, onToggleCollapse: _, collapseLabel: v, header: y, footer: b, mobileActions: x, groupOrder: S, groupLabels: C, maxDepth: w = 4, contextSearchParams: T }) => {
|
|
11
|
+
let E = l(null), { expandedItems: D, toggleExpand: O, collapseAll: k } = c({
|
|
12
|
+
items: p,
|
|
13
|
+
currentPath: m,
|
|
14
|
+
collapsed: h,
|
|
15
|
+
onToggleCollapse: _,
|
|
16
|
+
navRef: E
|
|
17
|
+
}), A = i(), j = v ?? A("nav.collapse", "Collapse"), M = A("nav.expand", "Expand"), N = p.filter((e) => e.visible !== !1), P = (() => {
|
|
18
|
+
if (h) return [{
|
|
17
19
|
id: "__all__",
|
|
18
20
|
label: null,
|
|
19
|
-
items:
|
|
21
|
+
items: N
|
|
20
22
|
}];
|
|
21
23
|
let e = /* @__PURE__ */ new Map();
|
|
22
|
-
for (let t of
|
|
24
|
+
for (let t of N) {
|
|
23
25
|
let n = t.group ?? "__default__", r = e.get(n);
|
|
24
26
|
r ? r.push(t) : e.set(n, [t]);
|
|
25
27
|
}
|
|
26
|
-
return [...
|
|
28
|
+
return [...S ?? [], ...Array.from(e.keys()).filter((e) => !(S ?? []).includes(e))].filter((t) => (e.get(t)?.length ?? 0) > 0).map((t) => ({
|
|
27
29
|
id: t,
|
|
28
|
-
label: t === "__default__" ? null :
|
|
30
|
+
label: t === "__default__" ? null : C?.[t] ?? t,
|
|
29
31
|
items: e.get(t) ?? []
|
|
30
32
|
}));
|
|
31
33
|
})();
|
|
32
|
-
return /* @__PURE__ */
|
|
34
|
+
return /* @__PURE__ */ f(u, { children: [!h && /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d("div", {
|
|
33
35
|
className: "fixed inset-0 bg-bg-overlay z-[109] md:hidden",
|
|
34
36
|
"aria-hidden": "true"
|
|
35
|
-
}), /* @__PURE__ */
|
|
37
|
+
}), /* @__PURE__ */ d("button", {
|
|
36
38
|
type: "button",
|
|
37
39
|
className: "fixed inset-y-0 right-0 left-64 z-[112] md:hidden cursor-pointer",
|
|
38
|
-
onClick:
|
|
40
|
+
onClick: _,
|
|
39
41
|
"aria-label": "Close sidebar"
|
|
40
|
-
})] }), /* @__PURE__ */
|
|
42
|
+
})] }), /* @__PURE__ */ f("aside", {
|
|
43
|
+
ref: E,
|
|
41
44
|
className: `
|
|
42
45
|
bg-bg-canvas supports-[backdrop-filter]:bg-[var(--color-surface-glass)] supports-[backdrop-filter]:backdrop-blur-[var(--blur-glass)]
|
|
43
46
|
border-r border-border-seam
|
|
@@ -48,28 +51,28 @@ var f = ({ items: f, currentPath: p, collapsed: m = !1, onItemClick: h, onToggle
|
|
|
48
51
|
z-[110] md:z-auto
|
|
49
52
|
md:h-full
|
|
50
53
|
overflow-x-hidden
|
|
51
|
-
${
|
|
54
|
+
${h ? "-translate-x-full md:translate-x-0" : "translate-x-0"}
|
|
52
55
|
w-64 md:w-auto
|
|
53
|
-
${
|
|
56
|
+
${h ? "md:w-16" : "md:w-64"}
|
|
54
57
|
`,
|
|
55
58
|
style: {
|
|
56
59
|
paddingTop: "env(safe-area-inset-top)",
|
|
57
60
|
paddingBottom: "env(safe-area-inset-bottom)"
|
|
58
61
|
},
|
|
59
62
|
children: [
|
|
60
|
-
!
|
|
63
|
+
!h && _ && /* @__PURE__ */ d("div", {
|
|
61
64
|
className: "md:hidden flex justify-end px-2 pt-2",
|
|
62
|
-
children: /* @__PURE__ */
|
|
65
|
+
children: /* @__PURE__ */ d("button", {
|
|
63
66
|
type: "button",
|
|
64
|
-
onClick:
|
|
67
|
+
onClick: _,
|
|
65
68
|
className: "p-2 rounded-button hover:bg-bg-sunken text-text-secondary hover:text-text-primary transition-colors",
|
|
66
69
|
"aria-label": "Close sidebar",
|
|
67
|
-
children: /* @__PURE__ */
|
|
70
|
+
children: /* @__PURE__ */ d("svg", {
|
|
68
71
|
className: "size-5",
|
|
69
72
|
fill: "none",
|
|
70
73
|
stroke: "currentColor",
|
|
71
74
|
viewBox: "0 0 24 24",
|
|
72
|
-
children: /* @__PURE__ */
|
|
75
|
+
children: /* @__PURE__ */ d("path", {
|
|
73
76
|
strokeLinecap: "round",
|
|
74
77
|
strokeLinejoin: "round",
|
|
75
78
|
strokeWidth: 2,
|
|
@@ -78,62 +81,62 @@ var f = ({ items: f, currentPath: p, collapsed: m = !1, onItemClick: h, onToggle
|
|
|
78
81
|
})
|
|
79
82
|
})
|
|
80
83
|
}),
|
|
81
|
-
(
|
|
82
|
-
header:
|
|
83
|
-
collapsed:
|
|
84
|
-
expandedCount:
|
|
85
|
-
onCollapseAll:
|
|
86
|
-
onToggleCollapse:
|
|
87
|
-
collapseLabel:
|
|
88
|
-
expandLabel:
|
|
84
|
+
(y || _) && /* @__PURE__ */ d(o, {
|
|
85
|
+
header: y,
|
|
86
|
+
collapsed: h,
|
|
87
|
+
expandedCount: D.size,
|
|
88
|
+
onCollapseAll: k,
|
|
89
|
+
onToggleCollapse: _,
|
|
90
|
+
collapseLabel: j,
|
|
91
|
+
expandLabel: M
|
|
89
92
|
}),
|
|
90
|
-
/* @__PURE__ */
|
|
93
|
+
/* @__PURE__ */ d("nav", {
|
|
91
94
|
className: "scrollbar-slim scrollbar-hover-only flex-1 min-h-0 py-card-padding overflow-y-auto overflow-x-hidden",
|
|
92
|
-
children: /* @__PURE__ */
|
|
95
|
+
children: /* @__PURE__ */ d(n, {
|
|
93
96
|
delayDuration: 300,
|
|
94
|
-
children: /* @__PURE__ */
|
|
97
|
+
children: /* @__PURE__ */ d("ul", {
|
|
95
98
|
className: "space-y-list-gap",
|
|
96
|
-
children:
|
|
99
|
+
children: P.map((n, i) => /* @__PURE__ */ f("li", {
|
|
97
100
|
className: "list-none",
|
|
98
101
|
children: [
|
|
99
|
-
i > 0 && !
|
|
100
|
-
n.label && !
|
|
102
|
+
i > 0 && !h && /* @__PURE__ */ d("div", { className: "my-2 border-t border-border-subtle" }),
|
|
103
|
+
n.label && !h && /* @__PURE__ */ d("p", {
|
|
101
104
|
className: "px-3 pb-1.5 pt-0.5 text-[11px] font-medium uppercase tracking-wider text-text-muted",
|
|
102
105
|
children: n.label
|
|
103
106
|
}),
|
|
104
|
-
/* @__PURE__ */
|
|
107
|
+
/* @__PURE__ */ d("ul", {
|
|
105
108
|
className: "space-y-list-gap",
|
|
106
|
-
children: n.items.map((n) =>
|
|
109
|
+
children: n.items.map((n) => h ? /* @__PURE__ */ f(e, { children: [/* @__PURE__ */ d(r, {
|
|
107
110
|
asChild: !0,
|
|
108
|
-
children: /* @__PURE__ */
|
|
111
|
+
children: /* @__PURE__ */ d(a, {
|
|
109
112
|
item: n,
|
|
110
113
|
depth: 0,
|
|
111
|
-
maxDepth:
|
|
112
|
-
currentPath:
|
|
113
|
-
expandedItems:
|
|
114
|
-
toggleExpand:
|
|
115
|
-
onItemClick:
|
|
116
|
-
onToggleCollapse:
|
|
117
|
-
collapsed:
|
|
118
|
-
contextSearchParams:
|
|
114
|
+
maxDepth: w,
|
|
115
|
+
currentPath: m,
|
|
116
|
+
expandedItems: D,
|
|
117
|
+
toggleExpand: O,
|
|
118
|
+
onItemClick: g,
|
|
119
|
+
onToggleCollapse: _,
|
|
120
|
+
collapsed: h,
|
|
121
|
+
contextSearchParams: T
|
|
119
122
|
})
|
|
120
|
-
}), /* @__PURE__ */
|
|
123
|
+
}), /* @__PURE__ */ f(t, {
|
|
121
124
|
side: "right",
|
|
122
|
-
children: [/* @__PURE__ */
|
|
125
|
+
children: [/* @__PURE__ */ d("p", { children: n.label }), n.badge !== void 0 && n.badge > 0 && /* @__PURE__ */ d("span", {
|
|
123
126
|
className: "ml-2 text-xs bg-status-error-bg-subtle text-status-error-text px-2 py-0.5 rounded-full",
|
|
124
127
|
children: n.badge
|
|
125
128
|
})]
|
|
126
|
-
})] }, n.id) : /* @__PURE__ */
|
|
129
|
+
})] }, n.id) : /* @__PURE__ */ d(a, {
|
|
127
130
|
item: n,
|
|
128
131
|
depth: 0,
|
|
129
|
-
maxDepth:
|
|
130
|
-
currentPath:
|
|
131
|
-
expandedItems:
|
|
132
|
-
toggleExpand:
|
|
133
|
-
onItemClick:
|
|
134
|
-
onToggleCollapse:
|
|
135
|
-
collapsed:
|
|
136
|
-
contextSearchParams:
|
|
132
|
+
maxDepth: w,
|
|
133
|
+
currentPath: m,
|
|
134
|
+
expandedItems: D,
|
|
135
|
+
toggleExpand: O,
|
|
136
|
+
onItemClick: g,
|
|
137
|
+
onToggleCollapse: _,
|
|
138
|
+
collapsed: h,
|
|
139
|
+
contextSearchParams: T
|
|
137
140
|
}, n.id))
|
|
138
141
|
})
|
|
139
142
|
]
|
|
@@ -141,17 +144,17 @@ var f = ({ items: f, currentPath: p, collapsed: m = !1, onItemClick: h, onToggle
|
|
|
141
144
|
})
|
|
142
145
|
})
|
|
143
146
|
}),
|
|
144
|
-
|
|
145
|
-
className: `py-card-padding border-t border-border-subtle ${
|
|
146
|
-
children:
|
|
147
|
+
b && /* @__PURE__ */ d("div", {
|
|
148
|
+
className: `py-card-padding border-t border-border-subtle ${h ? "md:px-2" : "px-card-padding"}`,
|
|
149
|
+
children: b
|
|
147
150
|
}),
|
|
148
|
-
|
|
149
|
-
actions:
|
|
150
|
-
collapsed:
|
|
151
|
-
onToggleCollapse:
|
|
151
|
+
x && x.length > 0 && /* @__PURE__ */ d(s, {
|
|
152
|
+
actions: x,
|
|
153
|
+
collapsed: h,
|
|
154
|
+
onToggleCollapse: _
|
|
152
155
|
})
|
|
153
156
|
]
|
|
154
157
|
})] });
|
|
155
158
|
};
|
|
156
159
|
//#endregion
|
|
157
|
-
export {
|
|
160
|
+
export { p as SideNavigation };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whose Escape is it: the side nav's, or someone else's? (BOFF-8073)
|
|
3
|
+
*
|
|
4
|
+
* The expanded side nav used to collapse on ANY Escape that reached `window`
|
|
5
|
+
* unclaimed. With focus on the page body, the Escape that ended a voice
|
|
6
|
+
* session also collapsed the nav (VibeControls prod, 2026-09-28): one key,
|
|
7
|
+
* two things closed, and one of them was not even in front of the person.
|
|
8
|
+
*
|
|
9
|
+
* Escape is "back out of the thing I am in". The nav is that thing only when:
|
|
10
|
+
*
|
|
11
|
+
* - focus is inside it: the person is working the nav with the keyboard; or
|
|
12
|
+
* - it is an open OVERLAY: below `md` the expanded nav is a drawer over the
|
|
13
|
+
* page, with a backdrop, and Escape dismissing a drawer is the expected
|
|
14
|
+
* gesture wherever focus happens to be.
|
|
15
|
+
*
|
|
16
|
+
* It is never a global fallback, and a key another handler already took
|
|
17
|
+
* (`defaultPrevented`, as Radix sets when it closes a dialog or popover) is
|
|
18
|
+
* never the nav's.
|
|
19
|
+
*
|
|
20
|
+
* Kept DOM-free so it can be tested without rendering.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Below this viewport width the expanded nav is an overlay drawer: the same
|
|
24
|
+
* `md` breakpoint its classes switch on (`fixed … md:relative`, the
|
|
25
|
+
* `md:hidden` backdrop), and the one `useSideNavigationState` already
|
|
26
|
+
* collapses on when the window shrinks.
|
|
27
|
+
*/
|
|
28
|
+
export declare const SIDE_NAV_OVERLAY_MAX_WIDTH_PX = 768;
|
|
29
|
+
/** Is the expanded nav an overlay drawer at this viewport width? */
|
|
30
|
+
export declare function sideNavIsOverlay(viewportWidth: number): boolean;
|
|
31
|
+
export type SideNavEscapeAction = 'collapse' | 'ignore';
|
|
32
|
+
/** What the side nav does with a key press. */
|
|
33
|
+
export declare function sideNavEscapeAction(input: {
|
|
34
|
+
key: string;
|
|
35
|
+
/** The key's `defaultPrevented`: an earlier handler already took it. */
|
|
36
|
+
alreadyHandled: boolean;
|
|
37
|
+
collapsed: boolean;
|
|
38
|
+
focusInsideNav: boolean;
|
|
39
|
+
navIsOverlay: boolean;
|
|
40
|
+
}): SideNavEscapeAction;
|
|
41
|
+
//# sourceMappingURL=sideNavEscape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sideNavEscape.d.ts","sourceRoot":"","sources":["../../../src/chrome/sideNavigation/sideNavEscape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAExD,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,wEAAwE;IACxE,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB,GAAG,mBAAmB,CAKtB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
function e(e) {
|
|
2
|
+
return e < 768;
|
|
3
|
+
}
|
|
4
|
+
function t(e) {
|
|
5
|
+
return e.key !== "Escape" || e.collapsed || e.alreadyHandled ? "ignore" : e.focusInsideNav || e.navIsOverlay ? "collapse" : "ignore";
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { t as sideNavEscapeAction, e as sideNavIsOverlay };
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
1
2
|
import { NavItem } from './types';
|
|
2
3
|
interface UseSideNavigationStateArgs {
|
|
3
4
|
items: NavItem[];
|
|
4
5
|
currentPath: string;
|
|
5
6
|
collapsed: boolean;
|
|
6
7
|
onToggleCollapse?: () => void;
|
|
8
|
+
/**
|
|
9
|
+
* The nav's root element. Escape collapses the nav only when focus is inside
|
|
10
|
+
* it, or when it is an open overlay (BOFF-8073). Without it, only the
|
|
11
|
+
* overlay case applies.
|
|
12
|
+
*/
|
|
13
|
+
navRef?: RefObject<HTMLElement | null>;
|
|
7
14
|
}
|
|
8
15
|
interface UseSideNavigationStateResult {
|
|
9
16
|
expandedItems: Set<string>;
|
|
10
17
|
toggleExpand: (id: string) => void;
|
|
11
18
|
collapseAll: () => void;
|
|
12
19
|
}
|
|
13
|
-
export declare function useSideNavigationState({ items, currentPath, collapsed, onToggleCollapse, }: UseSideNavigationStateArgs): UseSideNavigationStateResult;
|
|
20
|
+
export declare function useSideNavigationState({ items, currentPath, collapsed, onToggleCollapse, navRef, }: UseSideNavigationStateArgs): UseSideNavigationStateResult;
|
|
14
21
|
export {};
|
|
15
22
|
//# sourceMappingURL=useSideNavigationState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSideNavigationState.d.ts","sourceRoot":"","sources":["../../../src/chrome/sideNavigation/useSideNavigationState.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useSideNavigationState.d.ts","sourceRoot":"","sources":["../../../src/chrome/sideNavigation/useSideNavigationState.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAKvC,UAAU,0BAA0B;IAClC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACxC;AAED,UAAU,4BAA4B;IACpC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,MAAM,GACP,EAAE,0BAA0B,GAAG,4BAA4B,CAgG3D"}
|
|
@@ -1,46 +1,58 @@
|
|
|
1
1
|
import { NAV_MORE_ID_PREFIX as e } from "./navVisibility.js";
|
|
2
2
|
import { findAncestorIds as t } from "./helpers.js";
|
|
3
|
-
import {
|
|
3
|
+
import { sideNavEscapeAction as n, sideNavIsOverlay as r } from "./sideNavEscape.js";
|
|
4
|
+
import { useCallback as i, useEffect as a, useRef as o, useState as s } from "react";
|
|
4
5
|
//#region src/chrome/sideNavigation/useSideNavigationState.ts
|
|
5
|
-
function
|
|
6
|
-
let [
|
|
7
|
-
return
|
|
8
|
-
|
|
9
|
-
}, [
|
|
10
|
-
let n = new Set([...t(
|
|
11
|
-
n.size > 0 &&
|
|
6
|
+
function c({ items: c, currentPath: l, collapsed: u, onToggleCollapse: d, navRef: f }) {
|
|
7
|
+
let [p, m] = s(/* @__PURE__ */ new Set()), h = o(u);
|
|
8
|
+
return a(() => {
|
|
9
|
+
h.current = u;
|
|
10
|
+
}, [u]), a(() => {
|
|
11
|
+
let n = new Set([...t(c, l)].filter((t) => !t.startsWith(e)));
|
|
12
|
+
n.size > 0 && m((e) => {
|
|
12
13
|
let t = new Set(e), r = !1;
|
|
13
14
|
return n.forEach((e) => {
|
|
14
15
|
t.has(e) || (t.add(e), r = !0);
|
|
15
16
|
}), r ? t : e;
|
|
16
17
|
});
|
|
17
|
-
}, [
|
|
18
|
-
if (typeof window > "u" || !
|
|
19
|
-
let e = window.innerWidth
|
|
20
|
-
let t = window.innerWidth
|
|
21
|
-
t && (!e || !
|
|
18
|
+
}, [l, c]), a(() => {
|
|
19
|
+
if (typeof window > "u" || !d) return;
|
|
20
|
+
let e = r(window.innerWidth), t = () => {
|
|
21
|
+
let t = r(window.innerWidth);
|
|
22
|
+
t && (!e || !h.current) && d(), e = t;
|
|
22
23
|
};
|
|
23
24
|
return t(), window.addEventListener("resize", t), () => {
|
|
24
25
|
window.removeEventListener("resize", t);
|
|
25
26
|
};
|
|
26
|
-
}, [
|
|
27
|
-
if (
|
|
27
|
+
}, [d]), a(() => {
|
|
28
|
+
if (u || !d) return;
|
|
28
29
|
let e = (e) => {
|
|
29
|
-
|
|
30
|
+
let t = f?.current ?? null, i = document.activeElement;
|
|
31
|
+
n({
|
|
32
|
+
key: e.key,
|
|
33
|
+
alreadyHandled: e.defaultPrevented,
|
|
34
|
+
collapsed: !1,
|
|
35
|
+
focusInsideNav: !!(t && i && t.contains(i)),
|
|
36
|
+
navIsOverlay: r(window.innerWidth)
|
|
37
|
+
}) === "collapse" && (e.preventDefault(), d());
|
|
30
38
|
};
|
|
31
39
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
32
|
-
}, [
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
}, [
|
|
41
|
+
u,
|
|
42
|
+
d,
|
|
43
|
+
f
|
|
44
|
+
]), {
|
|
45
|
+
expandedItems: p,
|
|
46
|
+
toggleExpand: i((e) => {
|
|
47
|
+
m((t) => {
|
|
36
48
|
let n = new Set(t);
|
|
37
49
|
return n.has(e) ? n.delete(e) : n.add(e), n;
|
|
38
50
|
});
|
|
39
51
|
}, []),
|
|
40
|
-
collapseAll:
|
|
41
|
-
|
|
52
|
+
collapseAll: i(() => {
|
|
53
|
+
m(/* @__PURE__ */ new Set());
|
|
42
54
|
}, [])
|
|
43
55
|
};
|
|
44
56
|
}
|
|
45
57
|
//#endregion
|
|
46
|
-
export {
|
|
58
|
+
export { c as useSideNavigationState };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIAssistantPanel.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AIAssistantPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAU,KAAK,EAAE,EAAY,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAIvE,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAkBrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"AIAssistantPanel.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AIAssistantPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAU,KAAK,EAAE,EAAY,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAIvE,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAkBrC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAKnE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG;IAC/C,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;;;OASG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,0BAA0B,CAAC;IACrC;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAkPtD,CAAC"}
|
|
@@ -1,97 +1,100 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
1
|
+
import { useReturnFocus as e } from "../../hooks/useReturnFocus.js";
|
|
2
|
+
import { useAssistantPageLabel as t } from "../product.js";
|
|
3
|
+
import { useAssistantTr as n } from "../i18n.js";
|
|
4
|
+
import { AssistantNavigateProvider as r } from "./AssistantMarkdownRenderer.js";
|
|
5
|
+
import { useAssistantStore as i } from "../store.js";
|
|
6
|
+
import { AssistantSpeechProvider as a } from "./AssistantSpeechProvider.js";
|
|
7
|
+
import { AssistantConnectSourceProvider as o } from "./composer/connectSource.js";
|
|
8
|
+
import { ASSISTANT_OVERLAY_ATTR as s, ASSISTANT_PANEL_ATTR as c, activePanelOverlay as l, escapeDismisses as u, nextPanelOverlays as d } from "./panelOverlays.js";
|
|
9
|
+
import { AssistantPreviewProvider as f } from "../preview/context.js";
|
|
10
|
+
import { useAssistantPreviewBridge as p } from "../preview/useAssistantPreviewBridge.js";
|
|
11
|
+
import { panelOwnedPreviewBridge as m, useHostedAssistantPreviewBridge as h } from "../preview/bridgeHostContext.js";
|
|
12
|
+
import { AssistantPreviewOverlay as g } from "../preview/AssistantPreviewOverlay.js";
|
|
13
|
+
import { AssistantHeader as _ } from "./AssistantHeader.js";
|
|
14
|
+
import { AssistantConversationList as v } from "./AssistantConversationList.js";
|
|
15
|
+
import { useAssistantServerHistory as y } from "../history/useAssistantServerHistory.js";
|
|
16
|
+
import { useFilesServiceWarmup as b } from "../../../storage/warmFilesService.js";
|
|
17
|
+
import { useAssistantHeartbeat as x } from "../useAssistantHeartbeat.js";
|
|
18
|
+
import { useAssistantKeyboardShortcuts as S } from "../useAssistantKeyboardShortcuts.js";
|
|
19
|
+
import { AssistantChatArea as C } from "./AssistantChatArea.js";
|
|
20
|
+
import { useRef as w, useState as T } from "react";
|
|
21
|
+
import { jsx as E, jsxs as D } from "react/jsx-runtime";
|
|
21
22
|
//#region src/shared/assistant/ui/AIAssistantPanel.tsx
|
|
22
|
-
var
|
|
23
|
-
let
|
|
24
|
-
|
|
25
|
-
let [
|
|
26
|
-
|
|
27
|
-
let
|
|
28
|
-
|
|
29
|
-
let
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
23
|
+
var O = ({ onClose: O, visible: k, docked: A, onToggleDock: j, writeAccess: M, onNavigate: N, connectSourceHref: P, onConnectSource: F, preview: I, serverHistory: L = !1 }) => {
|
|
24
|
+
let R = n();
|
|
25
|
+
y(L);
|
|
26
|
+
let [z, B] = T(!1);
|
|
27
|
+
z && !I && B(!1);
|
|
28
|
+
let V = z && !!I;
|
|
29
|
+
p(m(I, h()));
|
|
30
|
+
let H = w(null);
|
|
31
|
+
e(H);
|
|
32
|
+
let { conversations: U, activeConversationId: W, conversationListOpen: G, setConversationListOpen: K, createConversation: q } = i(), J = G || V, Y = l({
|
|
33
|
+
historyOpen: G,
|
|
34
|
+
previewOpen: V
|
|
35
|
+
}), X = (e) => {
|
|
36
|
+
let t = d({
|
|
37
|
+
historyOpen: G,
|
|
38
|
+
previewOpen: V
|
|
36
39
|
}, e);
|
|
37
|
-
|
|
38
|
-
},
|
|
39
|
-
|
|
40
|
-
let
|
|
41
|
-
return
|
|
42
|
-
panelRef:
|
|
40
|
+
K(t.historyOpen), B(t.previewOpen);
|
|
41
|
+
}, Z = U.find((e) => e.id === W);
|
|
42
|
+
x(Z?.backendSessionId ?? null, Z?.mode ?? null, k ?? !0), b(k ?? !0);
|
|
43
|
+
let Q = t(k !== !1);
|
|
44
|
+
return S({
|
|
45
|
+
panelRef: H,
|
|
43
46
|
onClose: () => {
|
|
44
|
-
if (
|
|
45
|
-
historyOpen:
|
|
46
|
-
previewOpen:
|
|
47
|
+
if (u({
|
|
48
|
+
historyOpen: G,
|
|
49
|
+
previewOpen: V
|
|
47
50
|
}) === "overlay") {
|
|
48
|
-
|
|
51
|
+
K(!1), B(!1);
|
|
49
52
|
return;
|
|
50
53
|
}
|
|
51
|
-
|
|
54
|
+
O();
|
|
52
55
|
}
|
|
53
|
-
}), /* @__PURE__ */
|
|
54
|
-
visible:
|
|
55
|
-
children: /* @__PURE__ */
|
|
56
|
-
value:
|
|
57
|
-
children: /* @__PURE__ */
|
|
58
|
-
value:
|
|
59
|
-
children: /* @__PURE__ */
|
|
60
|
-
value:
|
|
61
|
-
onOpen:
|
|
62
|
-
children: /* @__PURE__ */
|
|
63
|
-
ref:
|
|
56
|
+
}), /* @__PURE__ */ E(a, {
|
|
57
|
+
visible: k ?? !0,
|
|
58
|
+
children: /* @__PURE__ */ E(f, {
|
|
59
|
+
value: I,
|
|
60
|
+
children: /* @__PURE__ */ E(r, {
|
|
61
|
+
value: N,
|
|
62
|
+
children: /* @__PURE__ */ E(o, {
|
|
63
|
+
value: P,
|
|
64
|
+
onOpen: F,
|
|
65
|
+
children: /* @__PURE__ */ D("div", {
|
|
66
|
+
ref: H,
|
|
64
67
|
className: "relative flex h-full w-full flex-col bg-bg-surface",
|
|
65
68
|
role: "complementary",
|
|
66
|
-
"aria-label":
|
|
69
|
+
"aria-label": R("panel.ariaLabel", "AI Assistant"),
|
|
67
70
|
"data-testid": "ai-assistant-panel",
|
|
68
|
-
[
|
|
69
|
-
...
|
|
71
|
+
[c]: "",
|
|
72
|
+
...Y ? { [s]: Y } : {},
|
|
70
73
|
tabIndex: -1,
|
|
71
74
|
children: [
|
|
72
|
-
/* @__PURE__ */
|
|
75
|
+
/* @__PURE__ */ E("div", {
|
|
73
76
|
className: "contents",
|
|
74
|
-
inert:
|
|
75
|
-
children: /* @__PURE__ */
|
|
76
|
-
contextLabel:
|
|
77
|
-
onNewConversation: () =>
|
|
78
|
-
onOpenHistory: () =>
|
|
79
|
-
historyOpen:
|
|
80
|
-
onTogglePreview: () =>
|
|
81
|
-
previewOpen:
|
|
82
|
-
onClose:
|
|
83
|
-
docked:
|
|
84
|
-
onToggleDock:
|
|
77
|
+
inert: J || void 0,
|
|
78
|
+
children: /* @__PURE__ */ E(_, {
|
|
79
|
+
contextLabel: Q,
|
|
80
|
+
onNewConversation: () => q(),
|
|
81
|
+
onOpenHistory: () => X("history"),
|
|
82
|
+
historyOpen: G,
|
|
83
|
+
onTogglePreview: () => X("preview"),
|
|
84
|
+
previewOpen: V,
|
|
85
|
+
onClose: O,
|
|
86
|
+
docked: A,
|
|
87
|
+
onToggleDock: j
|
|
85
88
|
})
|
|
86
89
|
}),
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
/* @__PURE__ */
|
|
90
|
+
G && /* @__PURE__ */ E(v, {}),
|
|
91
|
+
V && /* @__PURE__ */ E(g, { onClose: () => B(!1) }),
|
|
92
|
+
/* @__PURE__ */ E("div", {
|
|
90
93
|
className: "contents",
|
|
91
|
-
inert:
|
|
92
|
-
children: /* @__PURE__ */
|
|
93
|
-
visible:
|
|
94
|
-
writeAccess:
|
|
94
|
+
inert: J || void 0,
|
|
95
|
+
children: /* @__PURE__ */ E(C, {
|
|
96
|
+
visible: k ?? !0,
|
|
97
|
+
writeAccess: M
|
|
95
98
|
})
|
|
96
99
|
})
|
|
97
100
|
]
|
|
@@ -102,4 +105,4 @@ var D = ({ onClose: D, visible: O, docked: k, onToggleDock: A, writeAccess: j, o
|
|
|
102
105
|
});
|
|
103
106
|
};
|
|
104
107
|
//#endregion
|
|
105
|
-
export {
|
|
108
|
+
export { O as AIAssistantPanel };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantOverlay.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantOverlay.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAUL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAK1C,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,
|
|
1
|
+
{"version":3,"file":"AssistantOverlay.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantOverlay.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAUL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAK1C,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAoBL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,oBAAoB,CAAC;CAC5B;AAID,uEAAuE;AACvE,wBAAgB,yBAAyB,IAAI,4BAA4B,GAAG,IAAI,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GACnD,IAAI,CAaN;AAID,MAAM,WAAW,6BAA6B;IAC5C;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KACtD,CAAC;IACF,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,SAAS,EACT,KAAK,EACL,QAAQ,GACT,EAAE,6BAA6B,2CAkE/B;AAED,mDAAmD;AACnD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,0BAA0B,CAAC,CAAC;IAC3E;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAC;IAC/D;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAOD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,kDAI5D"}
|