@burdenoff/fe-libs 2026.1004.4 → 2026.1004.6
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/ContextSwitcher.d.ts.map +1 -1
- package/dist/chrome/ContextSwitcher.js +73 -50
- package/dist/chrome/GlobalSearch.d.ts.map +1 -1
- package/dist/chrome/GlobalSearch.js +76 -72
- package/dist/chrome/LanguageSwitcher.d.ts.map +1 -1
- package/dist/chrome/LanguageSwitcher.js +61 -40
- package/dist/chrome/NotificationCenter.d.ts.map +1 -1
- package/dist/chrome/NotificationCenter.js +71 -68
- package/dist/chrome/ProfileSwitcher.d.ts.map +1 -1
- package/dist/chrome/ProfileSwitcher.js +87 -81
- package/dist/chrome/SideNavigation.d.ts.map +1 -1
- package/dist/chrome/SideNavigation.js +120 -76
- package/dist/shared/assistant/appControls/copy.d.ts +12 -0
- package/dist/shared/assistant/appControls/copy.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/copy.js +98 -0
- package/dist/shared/assistant/appControls/grammar.d.ts +102 -0
- package/dist/shared/assistant/appControls/grammar.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/grammar.js +236 -0
- package/dist/shared/assistant/appControls/languages.d.ts +6 -0
- package/dist/shared/assistant/appControls/languages.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/languages.js +52 -0
- package/dist/shared/assistant/appControls/names.d.ts +22 -0
- package/dist/shared/assistant/appControls/names.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/names.js +29 -0
- package/dist/shared/assistant/appControls/pageAdapters.d.ts +59 -0
- package/dist/shared/assistant/appControls/pageAdapters.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/pageAdapters.js +87 -0
- package/dist/shared/assistant/appControls/plan.d.ts +148 -0
- package/dist/shared/assistant/appControls/plan.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/plan.js +511 -0
- package/dist/shared/assistant/appControls/registry.d.ts +9 -0
- package/dist/shared/assistant/appControls/registry.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/registry.js +38 -0
- package/dist/shared/assistant/appControls/snapshot.d.ts +42 -0
- package/dist/shared/assistant/appControls/snapshot.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/snapshot.js +40 -0
- package/dist/shared/assistant/appControls/text.d.ts +7 -0
- package/dist/shared/assistant/appControls/text.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/text.js +6 -0
- package/dist/shared/assistant/appControls/types.d.ts +183 -0
- package/dist/shared/assistant/appControls/types.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/types.js +25 -0
- package/dist/shared/assistant/appControls/useAssistantControl.d.ts +24 -0
- package/dist/shared/assistant/appControls/useAssistantControl.d.ts.map +1 -0
- package/dist/shared/assistant/appControls/useAssistantControl.js +13 -0
- package/dist/shared/assistant/conversation.d.ts +12 -1
- package/dist/shared/assistant/conversation.d.ts.map +1 -1
- package/dist/shared/assistant/history/historyMapping.d.ts.map +1 -1
- package/dist/shared/assistant/history/historyMapping.js +130 -114
- package/dist/shared/assistant/i18nManifest.d.ts +74 -0
- package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
- package/dist/shared/assistant/i18nManifest.js +86 -12
- package/dist/shared/assistant/index.d.ts +16 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/localUiCommandCopy.d.ts +7 -0
- package/dist/shared/assistant/localUiCommandCopy.d.ts.map +1 -1
- package/dist/shared/assistant/localUiCommandCopy.js +1 -1
- package/dist/shared/assistant/localUiCommands.d.ts +16 -0
- package/dist/shared/assistant/localUiCommands.d.ts.map +1 -1
- package/dist/shared/assistant/localUiCommands.js +92 -84
- package/dist/shared/assistant/store.d.ts +10 -0
- package/dist/shared/assistant/store.d.ts.map +1 -1
- package/dist/shared/assistant/store.js +52 -44
- package/dist/shared/assistant/ui/AIAssistantPanel.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AIAssistantPanel.js +57 -49
- package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantChatArea.js +1085 -1016
- package/dist/shared/assistant/ui/AssistantControlConfirmDialog.d.ts +38 -0
- package/dist/shared/assistant/ui/AssistantControlConfirmDialog.d.ts.map +1 -0
- package/dist/shared/assistant/ui/AssistantControlConfirmDialog.js +65 -0
- package/dist/shared/assistant/ui/AssistantMoreMenu.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMoreMenu.js +58 -56
- package/dist/shared/assistant/ui/AssistantSpeechProvider.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantSpeechProvider.js +106 -105
- package/dist/shared/assistant/ui/composer/AssistantVoiceGraceSelector.d.ts +20 -0
- package/dist/shared/assistant/ui/composer/AssistantVoiceGraceSelector.d.ts.map +1 -0
- package/dist/shared/assistant/ui/composer/AssistantVoiceGraceSelector.js +39 -0
- package/dist/shared/assistant/ui/controlConfirmDialog.d.ts +30 -0
- package/dist/shared/assistant/ui/controlConfirmDialog.d.ts.map +1 -0
- package/dist/shared/assistant/ui/controlConfirmDialog.js +46 -0
- package/dist/shared/assistant/ui/useVoiceSession.d.ts +35 -2
- package/dist/shared/assistant/ui/useVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/useVoiceSession.js +232 -171
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts +15 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +173 -150
- package/dist/shared/assistant/voice/handsFree.d.ts +160 -0
- package/dist/shared/assistant/voice/handsFree.d.ts.map +1 -0
- package/dist/shared/assistant/voice/handsFree.js +104 -0
- package/dist/shared/assistant/voice/supersededTurns.d.ts +29 -0
- package/dist/shared/assistant/voice/supersededTurns.d.ts.map +1 -0
- package/dist/shared/assistant/voice/supersededTurns.js +17 -0
- package/dist/shared/assistant/voice/useVoiceInput.d.ts +7 -0
- package/dist/shared/assistant/voice/useVoiceInput.d.ts.map +1 -1
- package/dist/shared/assistant/voice/useVoiceInput.js +13 -10
- package/dist/shared/assistant/voice/voiceSession.d.ts +64 -20
- package/dist/shared/assistant/voice/voiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/voice/voiceSession.js +120 -67
- package/dist/shared/components/KeyboardHelpDialogWrapper.d.ts.map +1 -1
- package/dist/shared/components/KeyboardHelpDialogWrapper.js +11 -9
- package/dist/shared/providers/shell/GlobalUiProvider.d.ts +2 -0
- package/dist/shared/providers/shell/GlobalUiProvider.d.ts.map +1 -1
- package/dist/shared/providers/shell/GlobalUiProvider.js +4 -1
- package/dist/shared-assistant.js +219 -203
- package/package.json +1 -1
|
@@ -1,46 +1,90 @@
|
|
|
1
1
|
import { Tooltip as e, TooltipContent as t, TooltipProvider as n, TooltipTrigger as r } from "../ui/tooltip.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
2
|
+
import { useAssistantControl as i } from "../shared/assistant/appControls/useAssistantControl.js";
|
|
3
|
+
import { useShellLabel as a } from "../shared/providers/shell/useShellLabel.js";
|
|
4
|
+
import "./sideNavigation/navVisibility.js";
|
|
5
|
+
import { NavItemRenderer as o } from "./sideNavigation/NavItemRenderer.js";
|
|
6
|
+
import { SidebarHeader as s } from "./sideNavigation/SidebarHeader.js";
|
|
7
|
+
import { MobileActionsBar as c } from "./sideNavigation/MobileActionsBar.js";
|
|
8
|
+
import { useSideNavigationState as l } from "./sideNavigation/useSideNavigationState.js";
|
|
9
|
+
import { useMemo as u, useRef as d } from "react";
|
|
10
|
+
import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
9
11
|
//#region src/chrome/SideNavigation.tsx
|
|
10
|
-
var
|
|
11
|
-
let
|
|
12
|
-
items:
|
|
13
|
-
currentPath:
|
|
14
|
-
collapsed:
|
|
15
|
-
onToggleCollapse:
|
|
16
|
-
navRef:
|
|
17
|
-
}),
|
|
18
|
-
|
|
12
|
+
var h = ({ items: h, currentPath: g, collapsed: _ = !1, onItemClick: v, onToggleCollapse: y, collapseLabel: b, header: x, footer: S, mobileActions: C, groupOrder: w, groupLabels: T, maxDepth: E = 4, contextSearchParams: D }) => {
|
|
13
|
+
let O = d(null), { expandedItems: k, toggleExpand: A, collapseAll: j } = l({
|
|
14
|
+
items: h,
|
|
15
|
+
currentPath: g,
|
|
16
|
+
collapsed: _,
|
|
17
|
+
onToggleCollapse: y,
|
|
18
|
+
navRef: O
|
|
19
|
+
}), M = d({
|
|
20
|
+
items: h,
|
|
21
|
+
collapsed: _,
|
|
22
|
+
onToggleCollapse: y,
|
|
23
|
+
expandedItems: k,
|
|
24
|
+
toggleExpand: A
|
|
25
|
+
});
|
|
26
|
+
M.current = {
|
|
27
|
+
items: h,
|
|
28
|
+
collapsed: _,
|
|
29
|
+
onToggleCollapse: y,
|
|
30
|
+
expandedItems: k,
|
|
31
|
+
toggleExpand: A
|
|
32
|
+
};
|
|
33
|
+
let N = y !== void 0;
|
|
34
|
+
i("sidebar", u(() => N ? {
|
|
35
|
+
collapsed: () => M.current.collapsed,
|
|
36
|
+
setCollapsed: (e) => {
|
|
37
|
+
let t = M.current;
|
|
38
|
+
return t.collapsed === e ? { status: "already" } : (t.onToggleCollapse?.(), { status: "done" });
|
|
39
|
+
},
|
|
40
|
+
entries: () => {
|
|
41
|
+
let e = M.current;
|
|
42
|
+
if (e.collapsed) return [];
|
|
43
|
+
let t = [], n = (r) => {
|
|
44
|
+
for (let i of r) {
|
|
45
|
+
if (i.visible === !1 || i.id.startsWith("__nav_more__:")) continue;
|
|
46
|
+
let r = i.children?.filter((e) => e.visible !== !1) ?? [];
|
|
47
|
+
r.length > 0 && (t.push({
|
|
48
|
+
id: i.id,
|
|
49
|
+
label: i.label,
|
|
50
|
+
expanded: e.expandedItems.has(i.id)
|
|
51
|
+
}), n(r));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return n(e.items), t;
|
|
55
|
+
},
|
|
56
|
+
setExpanded: (e, t) => {
|
|
57
|
+
let n = M.current;
|
|
58
|
+
return n.expandedItems.has(e) === t ? { status: "already" } : (n.toggleExpand(e), { status: "done" });
|
|
59
|
+
}
|
|
60
|
+
} : null, [N]));
|
|
61
|
+
let P = a(), F = b ?? P("nav.collapse", "Collapse"), I = P("nav.expand", "Expand"), L = h.filter((e) => e.visible !== !1), R = (() => {
|
|
62
|
+
if (_) return [{
|
|
19
63
|
id: "__all__",
|
|
20
64
|
label: null,
|
|
21
|
-
items:
|
|
65
|
+
items: L
|
|
22
66
|
}];
|
|
23
67
|
let e = /* @__PURE__ */ new Map();
|
|
24
|
-
for (let t of
|
|
68
|
+
for (let t of L) {
|
|
25
69
|
let n = t.group ?? "__default__", r = e.get(n);
|
|
26
70
|
r ? r.push(t) : e.set(n, [t]);
|
|
27
71
|
}
|
|
28
|
-
return [...
|
|
72
|
+
return [...w ?? [], ...Array.from(e.keys()).filter((e) => !(w ?? []).includes(e))].filter((t) => (e.get(t)?.length ?? 0) > 0).map((t) => ({
|
|
29
73
|
id: t,
|
|
30
|
-
label: t === "__default__" ? null :
|
|
74
|
+
label: t === "__default__" ? null : T?.[t] ?? t,
|
|
31
75
|
items: e.get(t) ?? []
|
|
32
76
|
}));
|
|
33
77
|
})();
|
|
34
|
-
return /* @__PURE__ */ f
|
|
78
|
+
return /* @__PURE__ */ m(f, { children: [!_ && /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("div", {
|
|
35
79
|
className: "fixed inset-0 bg-bg-overlay z-[109] md:hidden",
|
|
36
80
|
"aria-hidden": "true"
|
|
37
|
-
}), /* @__PURE__ */
|
|
81
|
+
}), /* @__PURE__ */ p("button", {
|
|
38
82
|
type: "button",
|
|
39
83
|
className: "fixed inset-y-0 right-0 left-64 z-[112] md:hidden cursor-pointer",
|
|
40
|
-
onClick:
|
|
84
|
+
onClick: y,
|
|
41
85
|
"aria-label": "Close sidebar"
|
|
42
|
-
})] }), /* @__PURE__ */
|
|
43
|
-
ref:
|
|
86
|
+
})] }), /* @__PURE__ */ m("aside", {
|
|
87
|
+
ref: O,
|
|
44
88
|
className: `
|
|
45
89
|
bg-bg-canvas supports-[backdrop-filter]:bg-[var(--color-surface-glass)] supports-[backdrop-filter]:backdrop-blur-[var(--blur-glass)]
|
|
46
90
|
border-r border-border-seam
|
|
@@ -51,28 +95,28 @@ var p = ({ items: p, currentPath: m, collapsed: h = !1, onItemClick: g, onToggle
|
|
|
51
95
|
z-[110] md:z-auto
|
|
52
96
|
md:h-full
|
|
53
97
|
overflow-x-hidden
|
|
54
|
-
${
|
|
98
|
+
${_ ? "-translate-x-full md:translate-x-0" : "translate-x-0"}
|
|
55
99
|
w-64 md:w-auto
|
|
56
|
-
${
|
|
100
|
+
${_ ? "md:w-16" : "md:w-64"}
|
|
57
101
|
`,
|
|
58
102
|
style: {
|
|
59
103
|
paddingTop: "env(safe-area-inset-top)",
|
|
60
104
|
paddingBottom: "env(safe-area-inset-bottom)"
|
|
61
105
|
},
|
|
62
106
|
children: [
|
|
63
|
-
!
|
|
107
|
+
!_ && y && /* @__PURE__ */ p("div", {
|
|
64
108
|
className: "md:hidden flex justify-end px-2 pt-2",
|
|
65
|
-
children: /* @__PURE__ */
|
|
109
|
+
children: /* @__PURE__ */ p("button", {
|
|
66
110
|
type: "button",
|
|
67
|
-
onClick:
|
|
111
|
+
onClick: y,
|
|
68
112
|
className: "p-2 rounded-button hover:bg-bg-sunken text-text-secondary hover:text-text-primary transition-colors",
|
|
69
113
|
"aria-label": "Close sidebar",
|
|
70
|
-
children: /* @__PURE__ */
|
|
114
|
+
children: /* @__PURE__ */ p("svg", {
|
|
71
115
|
className: "size-5",
|
|
72
116
|
fill: "none",
|
|
73
117
|
stroke: "currentColor",
|
|
74
118
|
viewBox: "0 0 24 24",
|
|
75
|
-
children: /* @__PURE__ */
|
|
119
|
+
children: /* @__PURE__ */ p("path", {
|
|
76
120
|
strokeLinecap: "round",
|
|
77
121
|
strokeLinejoin: "round",
|
|
78
122
|
strokeWidth: 2,
|
|
@@ -81,62 +125,62 @@ var p = ({ items: p, currentPath: m, collapsed: h = !1, onItemClick: g, onToggle
|
|
|
81
125
|
})
|
|
82
126
|
})
|
|
83
127
|
}),
|
|
84
|
-
(
|
|
85
|
-
header:
|
|
86
|
-
collapsed:
|
|
87
|
-
expandedCount:
|
|
88
|
-
onCollapseAll:
|
|
89
|
-
onToggleCollapse:
|
|
90
|
-
collapseLabel:
|
|
91
|
-
expandLabel:
|
|
128
|
+
(x || y) && /* @__PURE__ */ p(s, {
|
|
129
|
+
header: x,
|
|
130
|
+
collapsed: _,
|
|
131
|
+
expandedCount: k.size,
|
|
132
|
+
onCollapseAll: j,
|
|
133
|
+
onToggleCollapse: y,
|
|
134
|
+
collapseLabel: F,
|
|
135
|
+
expandLabel: I
|
|
92
136
|
}),
|
|
93
|
-
/* @__PURE__ */
|
|
137
|
+
/* @__PURE__ */ p("nav", {
|
|
94
138
|
className: "scrollbar-slim scrollbar-hover-only flex-1 min-h-0 py-card-padding overflow-y-auto overflow-x-hidden",
|
|
95
|
-
children: /* @__PURE__ */
|
|
139
|
+
children: /* @__PURE__ */ p(n, {
|
|
96
140
|
delayDuration: 300,
|
|
97
|
-
children: /* @__PURE__ */
|
|
141
|
+
children: /* @__PURE__ */ p("ul", {
|
|
98
142
|
className: "space-y-list-gap",
|
|
99
|
-
children:
|
|
143
|
+
children: R.map((n, i) => /* @__PURE__ */ m("li", {
|
|
100
144
|
className: "list-none",
|
|
101
145
|
children: [
|
|
102
|
-
i > 0 && !
|
|
103
|
-
n.label && !
|
|
146
|
+
i > 0 && !_ && /* @__PURE__ */ p("div", { className: "my-2 border-t border-border-subtle" }),
|
|
147
|
+
n.label && !_ && /* @__PURE__ */ p("p", {
|
|
104
148
|
className: "px-3 pb-1.5 pt-0.5 text-[11px] font-medium uppercase tracking-wider text-text-muted",
|
|
105
149
|
children: n.label
|
|
106
150
|
}),
|
|
107
|
-
/* @__PURE__ */
|
|
151
|
+
/* @__PURE__ */ p("ul", {
|
|
108
152
|
className: "space-y-list-gap",
|
|
109
|
-
children: n.items.map((n) =>
|
|
153
|
+
children: n.items.map((n) => _ ? /* @__PURE__ */ m(e, { children: [/* @__PURE__ */ p(r, {
|
|
110
154
|
asChild: !0,
|
|
111
|
-
children: /* @__PURE__ */
|
|
155
|
+
children: /* @__PURE__ */ p(o, {
|
|
112
156
|
item: n,
|
|
113
157
|
depth: 0,
|
|
114
|
-
maxDepth:
|
|
115
|
-
currentPath:
|
|
116
|
-
expandedItems:
|
|
117
|
-
toggleExpand:
|
|
118
|
-
onItemClick:
|
|
119
|
-
onToggleCollapse:
|
|
120
|
-
collapsed:
|
|
121
|
-
contextSearchParams:
|
|
158
|
+
maxDepth: E,
|
|
159
|
+
currentPath: g,
|
|
160
|
+
expandedItems: k,
|
|
161
|
+
toggleExpand: A,
|
|
162
|
+
onItemClick: v,
|
|
163
|
+
onToggleCollapse: y,
|
|
164
|
+
collapsed: _,
|
|
165
|
+
contextSearchParams: D
|
|
122
166
|
})
|
|
123
|
-
}), /* @__PURE__ */
|
|
167
|
+
}), /* @__PURE__ */ m(t, {
|
|
124
168
|
side: "right",
|
|
125
|
-
children: [/* @__PURE__ */
|
|
169
|
+
children: [/* @__PURE__ */ p("p", { children: n.label }), n.badge !== void 0 && n.badge > 0 && /* @__PURE__ */ p("span", {
|
|
126
170
|
className: "ml-2 text-xs bg-status-error-bg-subtle text-status-error-text px-2 py-0.5 rounded-full",
|
|
127
171
|
children: n.badge
|
|
128
172
|
})]
|
|
129
|
-
})] }, n.id) : /* @__PURE__ */
|
|
173
|
+
})] }, n.id) : /* @__PURE__ */ p(o, {
|
|
130
174
|
item: n,
|
|
131
175
|
depth: 0,
|
|
132
|
-
maxDepth:
|
|
133
|
-
currentPath:
|
|
134
|
-
expandedItems:
|
|
135
|
-
toggleExpand:
|
|
136
|
-
onItemClick:
|
|
137
|
-
onToggleCollapse:
|
|
138
|
-
collapsed:
|
|
139
|
-
contextSearchParams:
|
|
176
|
+
maxDepth: E,
|
|
177
|
+
currentPath: g,
|
|
178
|
+
expandedItems: k,
|
|
179
|
+
toggleExpand: A,
|
|
180
|
+
onItemClick: v,
|
|
181
|
+
onToggleCollapse: y,
|
|
182
|
+
collapsed: _,
|
|
183
|
+
contextSearchParams: D
|
|
140
184
|
}, n.id))
|
|
141
185
|
})
|
|
142
186
|
]
|
|
@@ -144,17 +188,17 @@ var p = ({ items: p, currentPath: m, collapsed: h = !1, onItemClick: g, onToggle
|
|
|
144
188
|
})
|
|
145
189
|
})
|
|
146
190
|
}),
|
|
147
|
-
|
|
148
|
-
className: `py-card-padding border-t border-border-subtle ${
|
|
149
|
-
children:
|
|
191
|
+
S && /* @__PURE__ */ p("div", {
|
|
192
|
+
className: `py-card-padding border-t border-border-subtle ${_ ? "md:px-2" : "px-card-padding"}`,
|
|
193
|
+
children: S
|
|
150
194
|
}),
|
|
151
|
-
|
|
152
|
-
actions:
|
|
153
|
-
collapsed:
|
|
154
|
-
onToggleCollapse:
|
|
195
|
+
C && C.length > 0 && /* @__PURE__ */ p(c, {
|
|
196
|
+
actions: C,
|
|
197
|
+
collapsed: _,
|
|
198
|
+
onToggleCollapse: y
|
|
155
199
|
})
|
|
156
200
|
]
|
|
157
201
|
})] });
|
|
158
202
|
};
|
|
159
203
|
//#endregion
|
|
160
|
-
export {
|
|
204
|
+
export { h as SideNavigation };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AssistantTr } from '../i18n';
|
|
2
|
+
import { LocalCommandCopy } from '../localUiCommandCopy';
|
|
3
|
+
import { ConfirmPrompt, ControlReply } from './plan';
|
|
4
|
+
export declare function appControlCopy(tr: AssistantTr, reply: ControlReply): LocalCommandCopy;
|
|
5
|
+
/** The confirmation dialog's words for a stronger-confirmation control. */
|
|
6
|
+
export interface ConfirmDialogCopy {
|
|
7
|
+
title: string;
|
|
8
|
+
body: string;
|
|
9
|
+
confirm: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function confirmDialogCopy(tr: AssistantTr, prompt: ConfirmPrompt): ConfirmDialogCopy;
|
|
12
|
+
//# sourceMappingURL=copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/appControls/copy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAEV,aAAa,EACb,YAAY,EAEb,MAAM,QAAQ,CAAC;AAuFhB,wBAAgB,cAAc,CAC5B,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,YAAY,GAClB,gBAAgB,CAsdlB;AAED,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,aAAa,GACpB,iBAAiB,CAqBnB"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { interpolate as e } from "../../providers/shell/interpolate.js";
|
|
2
|
+
import { markdownText as t } from "../localUiCommandCopy.js";
|
|
3
|
+
//#region src/shared/assistant/appControls/copy.ts
|
|
4
|
+
var n = (t, n) => e(t, n);
|
|
5
|
+
function r(e, t) {
|
|
6
|
+
let n = e.every(([e, t]) => e !== t);
|
|
7
|
+
return {
|
|
8
|
+
text: t(e.map(([e, t]) => n ? e : t)),
|
|
9
|
+
translated: n
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
var i = (e) => e.map(t).join(", "), a = (e, t) => {
|
|
13
|
+
switch (t) {
|
|
14
|
+
case "notifications": return [e("appControl.opened.notifications", "Opened your notifications."), "Opened your notifications."];
|
|
15
|
+
case "help": return [e("appControl.opened.help", "Opened help and keyboard shortcuts."), "Opened help and keyboard shortcuts."];
|
|
16
|
+
case "context": return [e("appControl.opened.context", "Opened the workspace switcher."), "Opened the workspace switcher."];
|
|
17
|
+
case "history": return [e("appControl.opened.history", "Opened your conversation history."), "Opened your conversation history."];
|
|
18
|
+
case "transcript": return [e("appControl.opened.transcript", "Opened the voice transcript."), "Opened the voice transcript."];
|
|
19
|
+
case "preview": return [e("appControl.opened.preview", "Opened the AI preview."), "Opened the AI preview."];
|
|
20
|
+
case "conversation": return [e("appControl.opened.conversation", "Started a new conversation."), "Started a new conversation."];
|
|
21
|
+
}
|
|
22
|
+
}, o = (e, t) => {
|
|
23
|
+
switch (t) {
|
|
24
|
+
case "tab": return [e("appControl.what.tab", "tab"), "tab"];
|
|
25
|
+
case "filter": return [e("appControl.what.filter", "filter option"), "filter option"];
|
|
26
|
+
case "menu": return [e("appControl.what.menu", "menu"), "menu"];
|
|
27
|
+
case "workspace": return [e("appControl.what.workspace", "workspace"), "workspace"];
|
|
28
|
+
case "column": return [e("appControl.what.column", "column"), "column"];
|
|
29
|
+
case "form": return [e("appControl.what.form", "form"), "form"];
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
function s(e, s) {
|
|
33
|
+
switch (s.code) {
|
|
34
|
+
case "opened": return r([a(e, s.what)], ([e]) => e ?? "");
|
|
35
|
+
case "search-opened": return s.query === null ? r([[e("appControl.searchOpened", "Opened search."), "Opened search."]], ([e]) => e ?? "") : r([[e("appControl.searchOpenedFor", "Opened search for “{{query}}”."), "Opened search for “{{query}}”."]], ([e]) => n(e ?? "", { query: t(s.query ?? "") }));
|
|
36
|
+
case "sidebar": return r(s.already ? [s.collapsed ? [e("appControl.sidebarAlreadyCollapsed", "The sidebar is already collapsed."), "The sidebar is already collapsed."] : [e("appControl.sidebarAlreadyExpanded", "The sidebar is already expanded."), "The sidebar is already expanded."]] : [s.collapsed ? [e("appControl.sidebarCollapsed", "Collapsed the sidebar."), "Collapsed the sidebar."] : [e("appControl.sidebarExpanded", "Expanded the sidebar."), "Expanded the sidebar."]], ([e]) => e ?? "");
|
|
37
|
+
case "sidebar-entry": return r([s.already ? s.expanded ? [e("appControl.entryAlreadyExpanded", "{{name}} is already expanded."), "{{name}} is already expanded."] : [e("appControl.entryAlreadyCollapsed", "{{name}} is already collapsed."), "{{name}} is already collapsed."] : s.expanded ? [e("appControl.entryExpanded", "Expanded {{name}}."), "Expanded {{name}}."] : [e("appControl.entryCollapsed", "Collapsed {{name}}."), "Collapsed {{name}}."]], ([e]) => n(e ?? "", { name: t(s.name) }));
|
|
38
|
+
case "language": return s.already ? r([[e("appControl.languageAlready", "The app is already in {{language}}."), "The app is already in {{language}}."]], ([e]) => n(e ?? "", { language: t(s.label) })) : r([[e("appControl.languageSet", "The app language is now {{language}}. Assistant replies and voice keep their own settings."), "The app language is now {{language}}. Assistant replies and voice keep their own settings."]], ([e]) => n(e ?? "", { language: t(s.label) }));
|
|
39
|
+
case "language-not-offered": return r([[e("appControl.languageNotOffered", "{{language}} isn't one of the languages this app offers."), "{{language}} isn't one of the languages this app offers."]], ([e]) => n(e ?? "", { language: s.label }));
|
|
40
|
+
case "workspace-confirm": return r([[e("appControl.workspaceConfirm", "Switch to {{name}}? Nothing changes until you choose Switch on screen."), "Switch to {{name}}? Nothing changes until you choose Switch on screen."]], ([e]) => n(e ?? "", { name: t(s.name) }));
|
|
41
|
+
case "workspace-switched": return r([[e("appControl.workspaceSwitched", "Switching to {{name}}."), "Switching to {{name}}."]], ([e]) => n(e ?? "", { name: t(s.name) }));
|
|
42
|
+
case "workspace-already": return r([[e("appControl.workspaceAlready", "You're already in {{name}}."), "You're already in {{name}}."]], ([e]) => n(e ?? "", { name: t(s.name) }));
|
|
43
|
+
case "workspace-none": return r([[e("appControl.workspaceNone", "There is no other workspace to switch to."), "There is no other workspace to switch to."]], ([e]) => e ?? "");
|
|
44
|
+
case "logout-confirm": return r([[e("appControl.logoutConfirm", "Log out of your account? Nothing changes until you choose Log out on screen."), "Log out of your account? Nothing changes until you choose Log out on screen."]], ([e]) => e ?? "");
|
|
45
|
+
case "logout-done": return r([[e("appControl.logoutDone", "Logging you out."), "Logging you out."]], ([e]) => e ?? "");
|
|
46
|
+
case "tab": return r([s.already ? [e("appControl.tabAlready", "You're already on the {{name}} tab."), "You're already on the {{name}} tab."] : [e("appControl.tabOpened", "Opened the {{name}} tab."), "Opened the {{name}} tab."]], ([e]) => n(e ?? "", { name: t(s.name) }));
|
|
47
|
+
case "filter-set": return r([s.already ? [e("appControl.filterAlready", "{{filter}}: {{option}} is already on."), "{{filter}}: {{option}} is already on."] : [e("appControl.filterSet", "Filtered by {{filter}}: {{option}}."), "Filtered by {{filter}}: {{option}}."]], ([e]) => n(e ?? "", {
|
|
48
|
+
filter: t(s.filter),
|
|
49
|
+
option: t(s.option)
|
|
50
|
+
}));
|
|
51
|
+
case "filter-cleared": return s.filter === null ? r([[e("appControl.filtersCleared", "Cleared the filters."), "Cleared the filters."]], ([e]) => e ?? "") : r([[e("appControl.filterCleared", "Cleared the {{filter}} filter."), "Cleared the {{filter}} filter."]], ([e]) => n(e ?? "", { filter: t(s.filter ?? "") }));
|
|
52
|
+
case "sorted": {
|
|
53
|
+
let i = s.direction === "asc" ? [e("appControl.directionAsc", "ascending"), "ascending"] : [e("appControl.directionDesc", "descending"), "descending"];
|
|
54
|
+
return r([s.already ? [e("appControl.sortedAlready", "{{page}} is already sorted by {{field}}, {{direction}}."), "{{page}} is already sorted by {{field}}, {{direction}}."] : [e("appControl.sorted", "Sorted {{page}} by {{field}}, {{direction}}."), "Sorted {{page}} by {{field}}, {{direction}}."], i], ([e, r]) => n(e ?? "", {
|
|
55
|
+
page: t(s.page),
|
|
56
|
+
field: t(s.field),
|
|
57
|
+
direction: r ?? ""
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
case "sort-needs-field": return r([[e("appControl.sortNeedsField", "Say which column to sort by."), "Say which column to sort by."]], ([e]) => e ?? "");
|
|
61
|
+
case "searched": return r([[e("appControl.searched", "Searched {{page}} for “{{query}}”."), "Searched {{page}} for “{{query}}”."]], ([e]) => n(e ?? "", {
|
|
62
|
+
page: t(s.page),
|
|
63
|
+
query: t(s.query)
|
|
64
|
+
}));
|
|
65
|
+
case "search-cleared": return r([[e("appControl.searchCleared", "Cleared the search."), "Cleared the search."]], ([e]) => e ?? "");
|
|
66
|
+
case "form-opened": return r([[e("appControl.formOpened", "Opened {{name}}. Nothing is saved until you submit it."), "Opened {{name}}. Nothing is saved until you submit it."]], ([e]) => n(e ?? "", { name: t(s.name) }));
|
|
67
|
+
case "not-found": return r([s.what === "tab" ? [e("appControl.notFound.tab", "There's no tab called “{{name}}” on {{page}}. Tabs: {{options}}."), "There's no tab called “{{name}}” on {{page}}. Tabs: {{options}}."] : s.what === "filter" ? [e("appControl.notFound.filter", "{{page}} has no filter option called “{{name}}”. Filters: {{options}}."), "{{page}} has no filter option called “{{name}}”. Filters: {{options}}."] : s.what === "filter-option" ? [e("appControl.notFound.filterOption", "The {{filter}} filter has no option called “{{name}}”. Options: {{options}}."), "The {{filter}} filter has no option called “{{name}}”. Options: {{options}}."] : s.what === "sort" ? [e("appControl.notFound.sort", "{{page}} can't be sorted by “{{name}}”. Columns: {{options}}."), "{{page}} can't be sorted by “{{name}}”. Columns: {{options}}."] : s.what === "form" ? [e("appControl.notFound.form", "There's no “{{name}}” form to open on {{page}}. Available: {{options}}."), "There's no “{{name}}” form to open on {{page}}. Available: {{options}}."] : [e("appControl.notFound.workspace", "I couldn't find a workspace called “{{name}}”. You can switch to: {{options}}."), "I couldn't find a workspace called “{{name}}”. You can switch to: {{options}}."]], ([e]) => n(e ?? "", {
|
|
68
|
+
page: t(s.page),
|
|
69
|
+
name: t(s.name),
|
|
70
|
+
options: i(s.options),
|
|
71
|
+
filter: t(s.filter ?? "")
|
|
72
|
+
}));
|
|
73
|
+
case "ambiguous": return r([[e("appControl.ambiguous", "More than one {{what}} matches “{{name}}”: {{options}}. Say which one."), "More than one {{what}} matches “{{name}}”: {{options}}. Say which one."], o(e, s.what)], ([e, r]) => n(e ?? "", {
|
|
74
|
+
what: r ?? "",
|
|
75
|
+
name: t(s.name),
|
|
76
|
+
options: i(s.options)
|
|
77
|
+
}));
|
|
78
|
+
case "filter-choose": return r([[e("appControl.filterChoose", "Which {{filter}}? Options: {{options}}."), "Which {{filter}}? Options: {{options}}."]], ([e]) => n(e ?? "", {
|
|
79
|
+
filter: t(s.filter),
|
|
80
|
+
options: i(s.options)
|
|
81
|
+
}));
|
|
82
|
+
case "failed": return r([[e("appControl.failed", "That didn't work. Nothing was changed."), "That didn't work. Nothing was changed."]], ([e]) => e ?? "");
|
|
83
|
+
case "blocked": return s.reason === "voice-session" ? r([[e("appControl.blockedVoice", "I can't open that while the voice screen is up. End the voice session, or use the button in the assistant's header."), "I can't open that while the voice screen is up. End the voice session, or use the button in the assistant's header."]], ([e]) => e ?? "") : r([[e("appControl.blockedPermission", "That isn't available to you here."), "That isn't available to you here."]], ([e]) => e ?? "");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function c(e, t) {
|
|
87
|
+
return t.kind === "logout" ? {
|
|
88
|
+
title: e("appControl.dialog.logoutTitle", "Log out?"),
|
|
89
|
+
body: e("appControl.dialog.logoutBody", "You'll be signed out of this account on this device."),
|
|
90
|
+
confirm: e("appControl.dialog.logoutConfirm", "Log out")
|
|
91
|
+
} : {
|
|
92
|
+
title: e("appControl.dialog.workspaceTitle", "Switch workspace?"),
|
|
93
|
+
body: n(e("appControl.dialog.workspaceBody", "You'll switch to {{name}}. The page may reload."), { name: t.name }),
|
|
94
|
+
confirm: e("appControl.dialog.workspaceConfirm", "Switch")
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//#endregion
|
|
98
|
+
export { s as appControlCopy, c as confirmDialogCopy };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ControlSnapshot } from './snapshot';
|
|
2
|
+
import { SortDirection, UiLanguageCode } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* ★ BOFF-8060: the grammar of the app-wide controls.
|
|
5
|
+
*
|
|
6
|
+
* Strict on purpose, for the same reason `localUiCommands` is: a miss costs
|
|
7
|
+
* only latency (the sentence goes to the model as before), but a false match
|
|
8
|
+
* operates the app on a sentence that meant something else. So:
|
|
9
|
+
*
|
|
10
|
+
* - the WHOLE utterance must be the command ("open notifications and mark them
|
|
11
|
+
* read" falls through);
|
|
12
|
+
* - a control is matched only when something REGISTERED it — no handler, no
|
|
13
|
+
* match, the model answers as it always did;
|
|
14
|
+
* - names (a tab, a filter option, a sidebar menu, a workspace) are the
|
|
15
|
+
* product's own labels, never guessed: a name that is not there is answered
|
|
16
|
+
* "there is no tab called …" by the plan, not by a model;
|
|
17
|
+
* - English only (the caller decides). A bare "yes"/"ok" never matches;
|
|
18
|
+
* - NOTHING here can match "submit", "save", "create", "delete", "approve" or
|
|
19
|
+
* "confirm": opening a form is UI navigation, filling it is draft
|
|
20
|
+
* preparation and submitting it is a business write with its own
|
|
21
|
+
* confirmation. The grammar has no rule for the last two, so no sentence can
|
|
22
|
+
* reach them through this door.
|
|
23
|
+
*
|
|
24
|
+
* `weak`: the sentence is also how a page is asked for ("open notifications"
|
|
25
|
+
* could be the sidebar's Notifications page). A weak match yields to a page the
|
|
26
|
+
* sidebar names; an explicit one ("open the notification bell") does not.
|
|
27
|
+
*/
|
|
28
|
+
export type AppControlRequest = {
|
|
29
|
+
control: "header.notifications";
|
|
30
|
+
} | {
|
|
31
|
+
control: "header.search";
|
|
32
|
+
query: string | null;
|
|
33
|
+
} | {
|
|
34
|
+
control: "header.help";
|
|
35
|
+
} | {
|
|
36
|
+
control: "header.context";
|
|
37
|
+
} | {
|
|
38
|
+
control: "header.workspace";
|
|
39
|
+
target: string;
|
|
40
|
+
} | {
|
|
41
|
+
control: "account.logout";
|
|
42
|
+
} | {
|
|
43
|
+
control: "sidebar";
|
|
44
|
+
collapsed: boolean;
|
|
45
|
+
} | {
|
|
46
|
+
control: "sidebar.entry";
|
|
47
|
+
name: string;
|
|
48
|
+
expanded: boolean;
|
|
49
|
+
} | {
|
|
50
|
+
control: "language";
|
|
51
|
+
code: UiLanguageCode;
|
|
52
|
+
} | {
|
|
53
|
+
control: "assistant.history";
|
|
54
|
+
} | {
|
|
55
|
+
control: "assistant.transcript";
|
|
56
|
+
} | {
|
|
57
|
+
control: "assistant.preview";
|
|
58
|
+
} | {
|
|
59
|
+
control: "assistant.conversation.new";
|
|
60
|
+
} | {
|
|
61
|
+
control: "page.tab";
|
|
62
|
+
name: string;
|
|
63
|
+
} | {
|
|
64
|
+
control: "page.filter";
|
|
65
|
+
filter: string | null;
|
|
66
|
+
option: string;
|
|
67
|
+
} | {
|
|
68
|
+
control: "page.filter.clear";
|
|
69
|
+
filter: string | null;
|
|
70
|
+
} | {
|
|
71
|
+
control: "page.sort";
|
|
72
|
+
field: string | null;
|
|
73
|
+
direction: SortDirection | null;
|
|
74
|
+
} | {
|
|
75
|
+
control: "page.search";
|
|
76
|
+
query: string;
|
|
77
|
+
} | {
|
|
78
|
+
control: "page.search.clear";
|
|
79
|
+
} | {
|
|
80
|
+
control: "page.open";
|
|
81
|
+
name: string;
|
|
82
|
+
};
|
|
83
|
+
export interface AppControlMatch {
|
|
84
|
+
request: AppControlRequest;
|
|
85
|
+
weak: boolean;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The person's own words for a query the grammar found in the CANONICAL text,
|
|
89
|
+
* with their case and inner punctuation ("O'Brien", "a@b.com"). Found by
|
|
90
|
+
* aligning the canonical words in the original, last match first (the query is
|
|
91
|
+
* the tail of the sentence); the canonical text itself when it cannot be.
|
|
92
|
+
*/
|
|
93
|
+
export declare function queryAsSaid(original: string, canonicalQuery: string): string;
|
|
94
|
+
/**
|
|
95
|
+
* The control this whole utterance is, or null to leave it to the next rule
|
|
96
|
+
* (and, in the end, the model).
|
|
97
|
+
*
|
|
98
|
+
* `utterance` is `normaliseUtterance(text)`; `original` is the text as typed or
|
|
99
|
+
* transcribed — queries keep the person's own case and punctuation.
|
|
100
|
+
*/
|
|
101
|
+
export declare function matchAppControl(utterance: string, original: string, snapshot: ControlSnapshot): AppControlMatch | null;
|
|
102
|
+
//# sourceMappingURL=grammar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grammar.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/appControls/grammar.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,MAAM,iBAAiB,GACzB;IAAE,OAAO,EAAE,sBAAsB,CAAA;CAAE,GACnC;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClD;IAAE,OAAO,EAAE,aAAa,CAAA;CAAE,GAC1B;IAAE,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC7B;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAC7B;IAAE,OAAO,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAC1C;IAAE,OAAO,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC7D;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,GAC7C;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,GAChC;IAAE,OAAO,EAAE,sBAAsB,CAAA;CAAE,GACnC;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,GAChC;IAAE,OAAO,EAAE,4BAA4B,CAAA;CAAE,GACzC;IAAE,OAAO,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,OAAO,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACvD;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAAA;CAAE,GAC/E;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,OAAO,EAAE,mBAAmB,CAAA;CAAE,GAChC;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;CACf;AAYD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAW5E;AAiJD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,eAAe,GACxB,eAAe,GAAG,IAAI,CA0LxB"}
|