@burdenoff/fe-libs 2026.1029.11 → 2026.1030.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/connections/ConnectionDetailsTab.d.ts +4 -1
- package/dist/connections/ConnectionDetailsTab.js +18 -15
- package/dist/connections/ConnectionDialog.d.ts +8 -2
- package/dist/connections/ConnectionDialog.js +18 -17
- package/dist/connections/ConnectionDialogPanel.d.ts +3 -1
- package/dist/connections/ConnectionDialogPanel.js +141 -135
- package/dist/connections/ShareConnectionDialog.d.ts +23 -0
- package/dist/connections/ShareConnectionDialog.js +146 -0
- package/dist/connections/SharePanels.d.ts +32 -0
- package/dist/connections/SharePanels.js +158 -0
- package/dist/connections/VisibilityChoice.d.ts +12 -0
- package/dist/connections/VisibilityChoice.js +60 -0
- package/dist/connections/api.d.ts +12 -1
- package/dist/connections/api.js +1 -1
- package/dist/connections/connectionFlow.d.ts +6 -1
- package/dist/connections/connectionFlow.js +1 -1
- package/dist/connections/index.d.ts +4 -1
- package/dist/connections/sharingApi.d.ts +28 -0
- package/dist/connections/sharingApi.js +215 -0
- package/dist/connections/types.d.ts +31 -0
- package/dist/connections/useConnectionSharingDraft.d.ts +40 -0
- package/dist/connections/useConnectionSharingDraft.js +93 -0
- package/dist/connections.js +12 -9
- package/dist/shared/assistant/i18nManifest.d.ts +18 -0
- package/dist/shared/assistant/i18nManifest.js +18 -0
- package/dist/shared/assistant/index.d.ts +4 -0
- package/dist/shared/assistant/ui/AIAssistantPanel.d.ts +9 -1
- package/dist/shared/assistant/ui/AIAssistantPanel.js +194 -174
- package/dist/shared/assistant/ui/AssistantChatArea.d.ts +33 -0
- package/dist/shared/assistant/ui/AssistantChatArea.js +1463 -1397
- package/dist/shared/assistant/ui/AssistantLanguageMenu.d.ts +9 -1
- package/dist/shared/assistant/ui/AssistantLanguageMenu.js +22 -22
- package/dist/shared/assistant/ui/AssistantOverlay.d.ts +16 -2
- package/dist/shared/assistant/ui/AssistantOverlay.js +219 -200
- package/dist/shared/assistant/ui/assistantOverlayState.d.ts +16 -2
- package/dist/shared/assistant/ui/assistantOverlayState.js +57 -40
- package/dist/shared/assistant/ui/compact/AssistantConversationMenu.js +53 -52
- package/dist/shared/assistant/ui/compact/AssistantDiscardDraftDialog.js +3 -4
- package/dist/shared/assistant/ui/compact/AssistantLanguagePill.d.ts +29 -0
- package/dist/shared/assistant/ui/compact/AssistantLanguagePill.js +98 -0
- package/dist/shared/assistant/ui/compact/AssistantVoiceReady.d.ts +31 -0
- package/dist/shared/assistant/ui/compact/AssistantVoiceReady.js +41 -0
- package/dist/shared/assistant/ui/compact/AssistantWaitingChangeRow.d.ts +6 -0
- package/dist/shared/assistant/ui/compact/AssistantWaitingChangeRow.js +5 -5
- package/dist/shared/assistant/ui/compact/AssistantWindowHeader.d.ts +22 -5
- package/dist/shared/assistant/ui/compact/AssistantWindowHeader.js +45 -31
- package/dist/shared/assistant/ui/compact/windowView.d.ts +50 -0
- package/dist/shared/assistant/ui/compact/windowView.js +31 -0
- package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts +6 -0
- package/dist/shared/assistant/ui/composer/AssistantComposer.js +90 -89
- package/dist/shared/assistant/ui/composer/AssistantModeMenu.d.ts +6 -0
- package/dist/shared/assistant/ui/composer/AssistantModeMenu.js +83 -83
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts +31 -0
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +270 -166
- package/dist/shared/assistant/ui/voice/VoiceStage.d.ts +8 -0
- package/dist/shared/assistant/ui/voice/VoiceStage.js +10 -10
- package/dist/shared/assistant/voice/voiceStartedCue.d.ts +11 -0
- package/dist/shared/assistant/voice/voiceStartedCue.js +7 -0
- package/dist/shared-assistant.js +266 -262
- package/dist/ui/modal-shell.d.ts +6 -1
- package/dist/ui/modal-shell.js +7 -6
- package/package.json +1 -1
|
@@ -2,8 +2,8 @@ import { useAssistantTr as e } from "../../i18n.js";
|
|
|
2
2
|
import { ShieldAlert as t } from "lucide-react";
|
|
3
3
|
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
4
4
|
//#region src/shared/assistant/ui/compact/AssistantWaitingChangeRow.tsx
|
|
5
|
-
var i = ({ count: i, onReview: a }) => {
|
|
6
|
-
let
|
|
5
|
+
var i = ({ count: i, onReview: a, opensFull: o = !1 }) => {
|
|
6
|
+
let s = e();
|
|
7
7
|
return /* @__PURE__ */ r("div", {
|
|
8
8
|
className: "mb-2 flex min-h-11 items-center gap-2 rounded-xl border border-status-warning bg-status-warning/10 px-3 py-1",
|
|
9
9
|
"data-testid": "assistant-waiting-change",
|
|
@@ -17,15 +17,15 @@ var i = ({ count: i, onReview: a }) => {
|
|
|
17
17
|
"aria-live": "polite",
|
|
18
18
|
className: "min-w-0 flex-1 text-sm text-text-primary",
|
|
19
19
|
"data-testid": "assistant-waiting-change-status",
|
|
20
|
-
children:
|
|
20
|
+
children: s("waitingChange.status", "{{count}} change(s) waiting for your approval", { count: i })
|
|
21
21
|
}),
|
|
22
22
|
/* @__PURE__ */ n("button", {
|
|
23
23
|
type: "button",
|
|
24
24
|
onClick: a,
|
|
25
25
|
className: "min-h-9 shrink-0 rounded-button px-3 text-sm font-medium text-action-primary-bg transition-colors hover:bg-bg-sunken focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
|
|
26
|
-
"aria-label": o("waitingChange.reviewLabel", "Review the change waiting for your approval"),
|
|
26
|
+
"aria-label": o ? void 0 : s("waitingChange.reviewLabel", "Review the change waiting for your approval"),
|
|
27
27
|
"data-testid": "assistant-waiting-change-review",
|
|
28
|
-
children: o("waitingChange.review", "Review")
|
|
28
|
+
children: o ? s("waitingChange.reviewInFull", "Review in full assistant") : s("waitingChange.review", "Review")
|
|
29
29
|
})
|
|
30
30
|
]
|
|
31
31
|
});
|
|
@@ -1,19 +1,36 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
|
+
import { AssistantWindowView } from '../assistantOverlayState';
|
|
2
3
|
export interface AssistantWindowHeaderProps {
|
|
4
|
+
/** The view the window shows. */
|
|
5
|
+
view: AssistantWindowView;
|
|
6
|
+
/** Chat or Voice was chosen. Presentation only: a live voice conversation carries on. */
|
|
7
|
+
onSelectView: (view: AssistantWindowView) => void;
|
|
8
|
+
/** A voice conversation is live: Minimize ends it, and the language waits. */
|
|
9
|
+
voiceLive: boolean;
|
|
3
10
|
/** Switch the same instance to the full assistant. Nothing is re-sent. */
|
|
4
11
|
onOpenFull: () => void;
|
|
5
12
|
/** Hide the window and keep everything in it (CW-M). */
|
|
6
13
|
onMinimize: () => void;
|
|
7
14
|
}
|
|
8
15
|
/**
|
|
9
|
-
* The Quick assistant window's
|
|
10
|
-
*
|
|
16
|
+
* The Quick assistant window's header strip (BOFF-10178 Slice 3, BOFF-10180
|
|
17
|
+
* Slice 5):
|
|
18
|
+
*
|
|
19
|
+
* `[Chat | Voice] [文A English ▾] ………… [Open full assistant] [Minimize]`
|
|
20
|
+
*
|
|
21
|
+
* Four controls, 40 px each (C2). The pilot name is the panel's accessible name,
|
|
22
|
+
* so the strip spends its width on the controls.
|
|
23
|
+
*
|
|
24
|
+
* ★ The view toggle is a two-option segmented control with `aria-pressed`: each
|
|
25
|
+
* option names the view it SHOWS, and the one showing is pressed. It is
|
|
26
|
+
* presentation only: it starts nothing and ends nothing.
|
|
11
27
|
*
|
|
12
28
|
* ★ No Close (CW-M): the window is hidden, never closed, so a draft, its
|
|
13
29
|
* attachments and the conversation stay exactly where they are. Closing is the
|
|
14
|
-
* full panel's.
|
|
30
|
+
* full panel's. While voice is live Minimize says it ENDS voice (VD): the hidden
|
|
31
|
+
* window keeps everything but the microphone, and nothing listens in the
|
|
32
|
+
* background.
|
|
15
33
|
*
|
|
16
|
-
* ★
|
|
17
|
-
* words.
|
|
34
|
+
* ★ Every control keeps one NAME (WCAG 2.5.3): the tooltip is the same words.
|
|
18
35
|
*/
|
|
19
36
|
export declare const AssistantWindowHeader: FC<AssistantWindowHeaderProps>;
|
|
@@ -1,48 +1,62 @@
|
|
|
1
1
|
import { useAssistantTr as e } from "../../i18n.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { AssistantLanguagePill as t } from "./AssistantLanguagePill.js";
|
|
3
|
+
import { AudioLines as n, MessageSquare as r, Minus as i, PanelRight as a } from "lucide-react";
|
|
4
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
4
5
|
//#region src/shared/assistant/ui/compact/AssistantWindowHeader.tsx
|
|
5
|
-
var
|
|
6
|
-
let
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
var c = "flex size-10 shrink-0 items-center justify-center rounded-button transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", l = "text-text-secondary hover:bg-bg-sunken hover:text-text-primary", u = ({ view: u, onSelectView: d, voiceLive: f, onOpenFull: p, onMinimize: m }) => {
|
|
7
|
+
let h = e(), g = h("window.openFull", "Open full assistant"), _ = f ? h("window.minimizeEndsVoice", "Minimize (ends voice)") : h("window.minimize", "Minimize"), v = h("window.viewChat", "Chat"), y = h("window.viewVoice", "Voice"), b = (e, t, n) => {
|
|
8
|
+
let r = u === e;
|
|
9
|
+
return /* @__PURE__ */ o("button", {
|
|
10
|
+
type: "button",
|
|
11
|
+
onClick: () => d(e),
|
|
12
|
+
className: `flex size-10 shrink-0 items-center justify-center rounded-full transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] ${r ? "bg-[var(--color-accent-soft)] text-action-primary-bg" : "text-text-secondary hover:bg-bg-sunken hover:text-text-primary"}`,
|
|
13
|
+
"aria-pressed": r,
|
|
14
|
+
"aria-label": t,
|
|
15
|
+
title: t,
|
|
16
|
+
"data-testid": `assistant-window-view-${e}`,
|
|
17
|
+
children: n
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
return /* @__PURE__ */ s("div", {
|
|
21
|
+
className: "flex min-h-14 items-center gap-1 border-b border-border-default px-2 py-2",
|
|
9
22
|
"data-testid": "assistant-window-header",
|
|
10
23
|
"data-presentation": "compact",
|
|
11
24
|
"data-surface": "window",
|
|
12
25
|
children: [
|
|
13
|
-
/* @__PURE__ */
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}), /* @__PURE__ */
|
|
22
|
-
className: "
|
|
23
|
-
|
|
24
|
-
})]
|
|
26
|
+
/* @__PURE__ */ s("div", {
|
|
27
|
+
role: "group",
|
|
28
|
+
"aria-label": h("window.view", "View"),
|
|
29
|
+
className: "flex shrink-0 items-center rounded-full border border-border-default",
|
|
30
|
+
"data-testid": "assistant-window-view",
|
|
31
|
+
children: [b("chat", v, /* @__PURE__ */ o(r, {
|
|
32
|
+
className: "size-5",
|
|
33
|
+
"aria-hidden": "true"
|
|
34
|
+
})), b("voice", y, /* @__PURE__ */ o(n, {
|
|
35
|
+
className: "size-5",
|
|
36
|
+
"aria-hidden": "true"
|
|
37
|
+
}))]
|
|
25
38
|
}),
|
|
26
|
-
/* @__PURE__ */
|
|
39
|
+
/* @__PURE__ */ o(t, { voiceLive: f }),
|
|
40
|
+
/* @__PURE__ */ o("button", {
|
|
27
41
|
type: "button",
|
|
28
|
-
onClick:
|
|
29
|
-
className: `${
|
|
30
|
-
"aria-label":
|
|
31
|
-
title:
|
|
42
|
+
onClick: () => p(),
|
|
43
|
+
className: `${c} ${l}`,
|
|
44
|
+
"aria-label": g,
|
|
45
|
+
title: g,
|
|
32
46
|
"data-testid": "assistant-open-full",
|
|
33
|
-
children: /* @__PURE__ */
|
|
47
|
+
children: /* @__PURE__ */ o(a, {
|
|
34
48
|
className: "size-5",
|
|
35
49
|
"aria-hidden": "true"
|
|
36
50
|
})
|
|
37
51
|
}),
|
|
38
|
-
/* @__PURE__ */
|
|
52
|
+
/* @__PURE__ */ o("button", {
|
|
39
53
|
type: "button",
|
|
40
|
-
onClick:
|
|
41
|
-
className: `${
|
|
42
|
-
"aria-label":
|
|
43
|
-
title:
|
|
54
|
+
onClick: m,
|
|
55
|
+
className: `${c} ${l}`,
|
|
56
|
+
"aria-label": _,
|
|
57
|
+
title: _,
|
|
44
58
|
"data-testid": "assistant-minimize",
|
|
45
|
-
children: /* @__PURE__ */ i
|
|
59
|
+
children: /* @__PURE__ */ o(i, {
|
|
46
60
|
className: "size-5",
|
|
47
61
|
"aria-hidden": "true"
|
|
48
62
|
})
|
|
@@ -51,4 +65,4 @@ var o = "flex size-10 shrink-0 items-center justify-center rounded-button transi
|
|
|
51
65
|
});
|
|
52
66
|
};
|
|
53
67
|
//#endregion
|
|
54
|
-
export {
|
|
68
|
+
export { u as AssistantWindowHeader };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { isAssistantWindowView, AssistantWindowView } from '../assistantOverlayState';
|
|
2
|
+
export { isAssistantWindowView, type AssistantWindowView };
|
|
3
|
+
/**
|
|
4
|
+
* CW-V: the view the window shows.
|
|
5
|
+
*
|
|
6
|
+
* - Not live: the LAST USED view; the first time (nothing stored) Voice where
|
|
7
|
+
* voice is available here, else Chat.
|
|
8
|
+
* - Live: the voice view, which is where a conversation that has just started is
|
|
9
|
+
* (starting it from the Chat view moves the window to it), unless the person
|
|
10
|
+
* stepped to Chat since. That step is NOT the last-used view: it lasts as long
|
|
11
|
+
* as the conversation does.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveWindowView(input: {
|
|
14
|
+
/** The last-used view the overlay remembers, or null when none was ever chosen. */
|
|
15
|
+
stored: AssistantWindowView | null;
|
|
16
|
+
/** Voice can start here (speech works and the mode takes it). */
|
|
17
|
+
voiceAvailable: boolean;
|
|
18
|
+
/** A voice session is live. */
|
|
19
|
+
voiceLive: boolean;
|
|
20
|
+
/** The view the person chose during the live conversation. */
|
|
21
|
+
liveView: AssistantWindowView;
|
|
22
|
+
}): AssistantWindowView;
|
|
23
|
+
/** What the chat area tells the panel about voice in the window. */
|
|
24
|
+
export interface WindowVoiceState {
|
|
25
|
+
/** Voice can start here: `voiceSession.available` and the active mode takes it. */
|
|
26
|
+
available: boolean;
|
|
27
|
+
/** A session is live. */
|
|
28
|
+
live: boolean;
|
|
29
|
+
}
|
|
30
|
+
/** Until the chat area reports: not available, not live. */
|
|
31
|
+
export declare const WINDOW_VOICE_IDLE: WindowVoiceState;
|
|
32
|
+
/**
|
|
33
|
+
* The window's view and how a person changes it. A choice made while voice is
|
|
34
|
+
* live is the live conversation's alone; any other choice is remembered
|
|
35
|
+
* (`onRemember`, the overlay's storage). Each new conversation starts on Voice.
|
|
36
|
+
*
|
|
37
|
+
* ★ The state is adjusted DURING render, conditional on the flag it follows, so
|
|
38
|
+
* no frame shows the wrong view.
|
|
39
|
+
*/
|
|
40
|
+
export declare function useAssistantWindowView(args: {
|
|
41
|
+
stored: AssistantWindowView | null;
|
|
42
|
+
onRemember: ((view: AssistantWindowView) => void) | undefined;
|
|
43
|
+
voice: WindowVoiceState;
|
|
44
|
+
}): {
|
|
45
|
+
view: AssistantWindowView;
|
|
46
|
+
/** The person chose a view in the header. */
|
|
47
|
+
select: (view: AssistantWindowView) => void;
|
|
48
|
+
/** The view is where the person IS now (Continue in chat): remembered, never a live-only choice. */
|
|
49
|
+
remember: (view: AssistantWindowView) => void;
|
|
50
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import "../assistantOverlayState.js";
|
|
2
|
+
import { useCallback as e, useState as t } from "react";
|
|
3
|
+
//#region src/shared/assistant/ui/compact/windowView.ts
|
|
4
|
+
function n(e) {
|
|
5
|
+
return e.voiceLive ? e.liveView : e.stored ?? (e.voiceAvailable ? "voice" : "chat");
|
|
6
|
+
}
|
|
7
|
+
var r = {
|
|
8
|
+
available: !1,
|
|
9
|
+
live: !1
|
|
10
|
+
};
|
|
11
|
+
function i(r) {
|
|
12
|
+
let { stored: i, onRemember: a, voice: o } = r, [s, c] = t("voice"), [l, u] = t(null), [d, f] = t(o.live);
|
|
13
|
+
d !== o.live && (f(o.live), o.live && c("voice"));
|
|
14
|
+
let p = n({
|
|
15
|
+
stored: l ?? i,
|
|
16
|
+
voiceAvailable: o.available,
|
|
17
|
+
voiceLive: o.live,
|
|
18
|
+
liveView: s
|
|
19
|
+
}), m = o.live, h = e((e) => {
|
|
20
|
+
u(e), a?.(e);
|
|
21
|
+
}, [a]);
|
|
22
|
+
return {
|
|
23
|
+
view: p,
|
|
24
|
+
select: e((e) => {
|
|
25
|
+
m ? c(e) : h(e);
|
|
26
|
+
}, [m, h]),
|
|
27
|
+
remember: h
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { r as WINDOW_VOICE_IDLE, n as resolveWindowView, i as useAssistantWindowView };
|
|
@@ -115,6 +115,12 @@ interface Props {
|
|
|
115
115
|
* "change waiting" row. Classic never draws it.
|
|
116
116
|
*/
|
|
117
117
|
aboveCard?: ReactNode;
|
|
118
|
+
/**
|
|
119
|
+
* BOFF-10180 (compact only): show the mode as a read-only label, not a menu. The
|
|
120
|
+
* Quick assistant window names the mode it is in and leaves changing it to the
|
|
121
|
+
* full panel (DESIGN §3.3). Absent: the Mode menu.
|
|
122
|
+
*/
|
|
123
|
+
modeReadOnly?: boolean;
|
|
118
124
|
}
|
|
119
125
|
/** A local draft snapshot; no files are uploaded by observing it. */
|
|
120
126
|
export interface AssistantComposerDraft {
|