@uplifted/react 0.23.0 → 0.25.0
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/CHANGELOG.md +55 -0
- package/dist/AddClientSheet.d.ts +10 -1
- package/dist/AddClientSheet.d.ts.map +1 -1
- package/dist/AddClientSheet.js +26 -21
- package/dist/AddClientSheet.js.map +1 -1
- package/dist/AiSettingsSheet.d.ts +2 -2
- package/dist/AiSettingsSheet.d.ts.map +1 -1
- package/dist/AiSettingsSheet.js +30 -97
- package/dist/AiSettingsSheet.js.map +1 -1
- package/dist/AssistantGrid.d.ts +10 -8
- package/dist/AssistantGrid.d.ts.map +1 -1
- package/dist/AssistantGrid.js +90 -16
- package/dist/AssistantGrid.js.map +1 -1
- package/dist/BulkGenerateSheet.d.ts +13 -5
- package/dist/BulkGenerateSheet.d.ts.map +1 -1
- package/dist/BulkGenerateSheet.js +25 -11
- package/dist/BulkGenerateSheet.js.map +1 -1
- package/dist/ClientList.d.ts.map +1 -1
- package/dist/ClientList.js +8 -8
- package/dist/ClientList.js.map +1 -1
- package/dist/Composer.d.ts +4 -0
- package/dist/Composer.d.ts.map +1 -1
- package/dist/Composer.js +5 -9
- package/dist/Composer.js.map +1 -1
- package/dist/ConnectClientSheet.d.ts +26 -0
- package/dist/ConnectClientSheet.d.ts.map +1 -0
- package/dist/ConnectClientSheet.js +67 -0
- package/dist/ConnectClientSheet.js.map +1 -0
- package/dist/ConversationPane.d.ts +3 -1
- package/dist/ConversationPane.d.ts.map +1 -1
- package/dist/ConversationPane.js +30 -7
- package/dist/ConversationPane.js.map +1 -1
- package/dist/HostLinkAction.d.ts +10 -0
- package/dist/HostLinkAction.d.ts.map +1 -0
- package/dist/HostLinkAction.js +14 -0
- package/dist/HostLinkAction.js.map +1 -0
- package/dist/HostPreviewPane.d.ts +4 -2
- package/dist/HostPreviewPane.d.ts.map +1 -1
- package/dist/HostPreviewPane.js +6 -6
- package/dist/HostPreviewPane.js.map +1 -1
- package/dist/ItemActions.d.ts +7 -3
- package/dist/ItemActions.d.ts.map +1 -1
- package/dist/ItemActions.js +4 -3
- package/dist/ItemActions.js.map +1 -1
- package/dist/OfferSheet.d.ts +2 -0
- package/dist/OfferSheet.d.ts.map +1 -1
- package/dist/OfferSheet.js +3 -1
- package/dist/OfferSheet.js.map +1 -1
- package/dist/QuickSend.d.ts +3 -1
- package/dist/QuickSend.d.ts.map +1 -1
- package/dist/QuickSend.js +10 -3
- package/dist/QuickSend.js.map +1 -1
- package/dist/SegmentEditor.d.ts +11 -4
- package/dist/SegmentEditor.d.ts.map +1 -1
- package/dist/SegmentEditor.js +96 -11
- package/dist/SegmentEditor.js.map +1 -1
- package/dist/ThreadFeed.d.ts +7 -1
- package/dist/ThreadFeed.d.ts.map +1 -1
- package/dist/ThreadFeed.js +4 -4
- package/dist/ThreadFeed.js.map +1 -1
- package/dist/UpliftPanel.d.ts +10 -2
- package/dist/UpliftPanel.d.ts.map +1 -1
- package/dist/UpliftPanel.js +142 -24
- package/dist/UpliftPanel.js.map +1 -1
- package/dist/UpliftProvider.d.ts.map +1 -1
- package/dist/UpliftProvider.js +16 -2
- package/dist/UpliftProvider.js.map +1 -1
- package/dist/build-info.json +3 -3
- package/dist/channels.d.ts +2 -0
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +4 -0
- package/dist/channels.js.map +1 -1
- package/dist/draftContext.d.ts +34 -0
- package/dist/draftContext.d.ts.map +1 -0
- package/dist/draftContext.js +48 -0
- package/dist/draftContext.js.map +1 -0
- package/dist/host.d.ts +19 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js.map +1 -1
- package/dist/icons.d.ts +4 -0
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +5 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/segments.d.ts.map +1 -1
- package/dist/segments.js +2 -1
- package/dist/segments.js.map +1 -1
- package/dist/styles.d.ts +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +63 -25
- package/dist/styles.js.map +1 -1
- package/dist/usePreviewDrafts.d.ts +1 -1
- package/dist/usePreviewDrafts.d.ts.map +1 -1
- package/dist/usePreviewDrafts.js +8 -1
- package/dist/usePreviewDrafts.js.map +1 -1
- package/dist/useSend.d.ts +7 -2
- package/dist/useSend.d.ts.map +1 -1
- package/dist/useSend.js +7 -2
- package/dist/useSend.js.map +1 -1
- package/package.json +3 -3
- package/dist/ComposerExtras.d.ts +0 -15
- package/dist/ComposerExtras.d.ts.map +0 -1
- package/dist/ComposerExtras.js +0 -14
- package/dist/ComposerExtras.js.map +0 -1
package/dist/AssistantGrid.js
CHANGED
|
@@ -1,25 +1,49 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useRef, useState } from "react";
|
|
3
|
-
import { IconChevronDown, IconPencil, IconRefresh, IconSparkles } from "./icons.js";
|
|
3
|
+
import { IconCheck, IconChevronDown, IconFrown, IconHelpCircle, IconPencil, IconRefresh, IconSmile, IconSparkles, IconZap } from "./icons.js";
|
|
4
4
|
export const TONES = [
|
|
5
5
|
{ key: "happy", label: "Happy" },
|
|
6
6
|
{ key: "tough", label: "Tough" },
|
|
7
7
|
{ key: "inquisitive", label: "Question" },
|
|
8
8
|
{ key: "five_words", label: "Concise" },
|
|
9
9
|
];
|
|
10
|
-
/* Display-only cap on the text inside a cell, like native. Never affects what gets injected. */
|
|
11
|
-
const PREVIEW_MAX = 75;
|
|
12
|
-
const previewText = (t) => (t.length > PREVIEW_MAX ? `${t.slice(0, PREVIEW_MAX)}…` : t);
|
|
13
10
|
const LOADING_PHRASES = ["Generating…", "Drafting options…", "Reading context…", "Almost there…"];
|
|
11
|
+
/* Native DraftTiles (uplift_coach #630, spec #631): tone colours and icons, and the per-device
|
|
12
|
+
preferences (same localStorage keys as native, so a coach's choice carries across). */
|
|
13
|
+
const TONE_STYLE = {
|
|
14
|
+
happy: { color: "#34c759", Icon: IconSmile },
|
|
15
|
+
tough: { color: "#ff9500", Icon: IconFrown },
|
|
16
|
+
inquisitive: { color: "#007aff", Icon: IconHelpCircle },
|
|
17
|
+
five_words: { color: "#af52de", Icon: IconZap },
|
|
18
|
+
};
|
|
19
|
+
const VIEW_KEY = "uplift_draft_view"; // "tiles" | "grid"
|
|
20
|
+
const TONE_KEY = "uplift_draft_tone"; // native's canonical keys: happy | tough | inquisitive | concise
|
|
21
|
+
const toCanon = (t) => (t === "five_words" ? "concise" : t);
|
|
22
|
+
const fromCanon = (c) => (c === "concise" ? "five_words" : c === "happy" || c === "tough" || c === "inquisitive" ? c : null);
|
|
23
|
+
function readPref(key) { try {
|
|
24
|
+
return window.localStorage.getItem(key);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
} }
|
|
29
|
+
function writePref(key, value) { try {
|
|
30
|
+
window.localStorage.setItem(key, value);
|
|
31
|
+
}
|
|
32
|
+
catch { /* private mode */ } }
|
|
33
|
+
const pressed = (color) => ({ borderColor: color, background: `${color}1f`, boxShadow: "inset 0 1px 3px rgba(0,0,0,.18)" });
|
|
14
34
|
/**
|
|
15
|
-
* The
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
35
|
+
* The drafts above the editor, ported from native Uplift's DraftTiles: one row of tone tiles by
|
|
36
|
+
* default (icon + the first words of each draft), and the full 2×2 grid behind the header chevron.
|
|
37
|
+
* The view is a per-device preference. When a draft set arrives and the composer is empty, the
|
|
38
|
+
* remembered tone's draft preloads into the editor through the same onPick a click uses; it never
|
|
39
|
+
* lands over the coach's text and never twice for one set. Picking replaces the editor's draft.
|
|
40
|
+
* Tiles and cells keep radio semantics so the picked tone is announced, and arrows move it.
|
|
19
41
|
*/
|
|
20
|
-
export function AssistantGrid({ drafts, label, selected, onPick, onRegenerate, regenDisabled,
|
|
42
|
+
export function AssistantGrid({ drafts, label, selected, onPick, onRegenerate, regenDisabled, composerEmpty, clientFirstName, footnote, onNeedsPlan }) {
|
|
21
43
|
const cells = useRef([]);
|
|
22
44
|
const [phrase, setPhrase] = useState(0);
|
|
45
|
+
const [view, setView] = useState(() => (readPref(VIEW_KEY) === "grid" ? "grid" : "tiles"));
|
|
46
|
+
const [chosen, setChosen] = useState(null);
|
|
23
47
|
const loading = drafts.status === "loading";
|
|
24
48
|
useEffect(() => {
|
|
25
49
|
if (!loading) {
|
|
@@ -29,11 +53,46 @@ export function AssistantGrid({ drafts, label, selected, onPick, onRegenerate, r
|
|
|
29
53
|
const t = setInterval(() => setPhrase((p) => (p + 1) % LOADING_PHRASES.length), 1400);
|
|
30
54
|
return () => clearInterval(t);
|
|
31
55
|
}, [loading]);
|
|
56
|
+
// Preload: once per draft set, into an empty composer only.
|
|
57
|
+
const set = drafts.status === "ready" ? drafts.drafts : null;
|
|
58
|
+
const signature = set ? TONES.map((t) => `${t.key}:${set[t.key] ?? ""}`).join("\u0000") : "";
|
|
59
|
+
const preloaded = useRef(null);
|
|
60
|
+
const emptyRef = useRef(composerEmpty);
|
|
61
|
+
emptyRef.current = composerEmpty;
|
|
62
|
+
const pickRef = useRef(onPick);
|
|
63
|
+
pickRef.current = onPick;
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (!set || !signature)
|
|
66
|
+
return;
|
|
67
|
+
const remembered = fromCanon(readPref(TONE_KEY));
|
|
68
|
+
const tone = TONES.find((t) => t.key === remembered && set[t.key]) ?? TONES.find((t) => set[t.key]);
|
|
69
|
+
if (!tone)
|
|
70
|
+
return;
|
|
71
|
+
setChosen(tone.key);
|
|
72
|
+
if (preloaded.current === signature)
|
|
73
|
+
return;
|
|
74
|
+
preloaded.current = signature;
|
|
75
|
+
if (emptyRef.current)
|
|
76
|
+
pickRef.current(tone.key, set[tone.key]);
|
|
77
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
78
|
+
}, [signature]);
|
|
32
79
|
if (drafts.status === "idle")
|
|
33
80
|
return null;
|
|
34
81
|
const refused = drafts.status === "error" && drafts.error?.code === "refused";
|
|
35
82
|
const planInactive = drafts.status === "error" && drafts.error?.code === "plan_inactive";
|
|
36
83
|
const limited = drafts.retryIn !== null;
|
|
84
|
+
const current = selected ?? chosen;
|
|
85
|
+
const gridOpen = view === "grid";
|
|
86
|
+
const pick = (tone, text) => {
|
|
87
|
+
setChosen(tone);
|
|
88
|
+
writePref(TONE_KEY, toCanon(tone));
|
|
89
|
+
onPick(tone, text);
|
|
90
|
+
};
|
|
91
|
+
const toggleView = () => {
|
|
92
|
+
const next = gridOpen ? "tiles" : "grid";
|
|
93
|
+
setView(next);
|
|
94
|
+
writePref(VIEW_KEY, next);
|
|
95
|
+
};
|
|
37
96
|
const onKey = (i) => (e) => {
|
|
38
97
|
const n = TONES.length;
|
|
39
98
|
let next = null;
|
|
@@ -48,21 +107,36 @@ export function AssistantGrid({ drafts, label, selected, onPick, onRegenerate, r
|
|
|
48
107
|
btn?.focus();
|
|
49
108
|
const tone = TONES[next];
|
|
50
109
|
if (btn && tone && drafts.drafts)
|
|
51
|
-
|
|
110
|
+
pick(tone.key, drafts.drafts[tone.key]);
|
|
52
111
|
};
|
|
53
|
-
return (_jsxs("section", { className: "u-ag", "aria-label": "Drafts", children: [_jsxs("div", { className: "u-ag-h", children: [_jsxs("button", { type: "button", className: "u-ag-toggle", "aria-expanded":
|
|
112
|
+
return (_jsxs("section", { className: "u-ag", "aria-label": "Drafts", children: [_jsxs("div", { className: "u-ag-h", children: [_jsxs("button", { type: "button", className: "u-ag-toggle", "aria-expanded": gridOpen, onClick: toggleView, title: gridOpen ? "Back to the compact tone row" : "Show all four drafts in full", children: [_jsx("span", { className: "u-ag-spark", children: _jsx(IconSparkles, {}) }), _jsx("span", { className: "u-ag-label", children: label }), _jsx("span", { className: `u-ag-chev${gridOpen ? " u-ag-chev-open" : ""}`, children: _jsx(IconChevronDown, {}) })] }), limited && _jsxs("span", { className: "u-ag-by", role: "status", children: ["Try again in ", drafts.retryIn, "s"] }), _jsx("button", { type: "button", className: `u-ag-regen${loading ? " u-ag-spinning" : ""}`, "aria-label": "Regenerate drafts", title: "Regenerate drafts", disabled: loading || limited || regenDisabled, onClick: onRegenerate, children: _jsx(IconRefresh, {}) })] }), refused
|
|
54
113
|
? _jsx("p", { className: "u-ag-empty", children: "Uplift won't draft this one. Write it yourself." })
|
|
55
114
|
: planInactive
|
|
56
115
|
? (_jsxs("div", { className: "u-ag-empty", role: "status", children: [_jsx("span", { children: "Your Uplift plan isn't active, so drafts are paused." }), onNeedsPlan && _jsx("button", { type: "button", className: "u-retry", onClick: onNeedsPlan, children: "Reactivate" })] }))
|
|
57
116
|
: drafts.status === "error"
|
|
58
117
|
? (_jsxs("div", { className: "u-ag-empty", role: "status", children: [_jsxs("span", { children: ["Couldn't write drafts. ", drafts.error?.message] }), !limited && _jsx("button", { type: "button", className: "u-retry", onClick: onRegenerate, children: "Retry" })] }))
|
|
59
|
-
: (_jsx("div", { className: "u-ag-grid", role: "radiogroup", "aria-label": "Pick a draft", "aria-busy": loading, children: TONES.map((t, i) => {
|
|
118
|
+
: (_jsx("div", { className: gridOpen ? "u-ag-grid" : "u-ag-tiles", role: "radiogroup", "aria-label": "Pick a draft", "aria-busy": loading, children: TONES.map((t, i) => {
|
|
60
119
|
if (loading) {
|
|
61
|
-
return
|
|
120
|
+
return gridOpen
|
|
121
|
+
? (_jsxs("div", { className: "u-ag-cell u-ag-loading", "aria-hidden": "true", children: [_jsx("span", { className: "u-ag-shimmer" }), _jsx("span", { className: "u-ag-loading-txt", children: LOADING_PHRASES[phrase] })] }, t.key))
|
|
122
|
+
: _jsx("span", { className: "u-ag-tile-shimmer", "aria-hidden": "true" }, t.key);
|
|
62
123
|
}
|
|
63
124
|
const text = drafts.drafts?.[t.key] ?? "";
|
|
64
|
-
const checked =
|
|
65
|
-
|
|
66
|
-
|
|
125
|
+
const checked = current === t.key;
|
|
126
|
+
const { color, Icon } = TONE_STYLE[t.key];
|
|
127
|
+
const common = {
|
|
128
|
+
ref: (el) => { cells.current[i] = el; },
|
|
129
|
+
type: "button",
|
|
130
|
+
role: "radio",
|
|
131
|
+
"aria-checked": checked,
|
|
132
|
+
tabIndex: checked || (current === null && i === 0) ? 0 : -1,
|
|
133
|
+
style: checked ? pressed(color) : undefined,
|
|
134
|
+
onClick: () => pick(t.key, text),
|
|
135
|
+
onKeyDown: onKey(i),
|
|
136
|
+
};
|
|
137
|
+
return gridOpen
|
|
138
|
+
? (_jsxs("button", { ...common, className: "u-ag-cell", title: `Edit this draft — nothing sends until you press send\n\n${text}`, children: [_jsxs("span", { className: "u-ag-lab", style: { color }, children: [_jsx(Icon, {}), t.label, checked ? _jsx(IconCheck, {}) : _jsx("span", { className: "u-ag-pencil", children: _jsx(IconPencil, {}) })] }), _jsx("span", { className: "u-ag-txt", children: text || "…" })] }, t.key))
|
|
139
|
+
: (_jsxs("button", { ...common, className: "u-ag-tile", "aria-label": `${t.label}: ${text}`, title: `Edit this draft — nothing sends until you press send\n\n${text}`, children: [_jsx("span", { className: "u-ag-tile-ic", style: { color }, children: _jsx(Icon, {}) }), _jsx("span", { className: `u-ag-tile-txt${checked ? " u-ag-tile-on" : ""}`, children: text || "…" })] }, t.key));
|
|
140
|
+
}) })), footnote && !loading && _jsx("p", { className: "u-ag-foot", children: footnote }), clientFirstName ? null : null] }));
|
|
67
141
|
}
|
|
68
142
|
//# sourceMappingURL=AssistantGrid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantGrid.js","sourceRoot":"","sources":["../src/AssistantGrid.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"AssistantGrid.js","sourceRoot":"","sources":["../src/AssistantGrid.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,17 +9,25 @@ export interface BulkCandidate {
|
|
|
9
9
|
connected: boolean;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* Native Uplift's BulkGenerateModal: pick clients (all selected to start), write a
|
|
13
|
-
* one of the last eight), and generate. The sheet closes as soon as generation starts;
|
|
14
|
-
* on each row. Not-connected clients
|
|
15
|
-
*
|
|
12
|
+
* Native Uplift's BulkGenerateModal: pick clients (all connected ones selected to start), write a
|
|
13
|
+
* prompt (or reuse one of the last eight), and generate. The sheet closes as soon as generation starts;
|
|
14
|
+
* progress shows on each row. Not-connected clients start unselected; with `onConnect`, picking one
|
|
15
|
+
* connects them first (Ian, 2026-10-20), and without it they can be picked and drafted from host activity.
|
|
16
16
|
*/
|
|
17
|
-
export declare function BulkGenerateSheet({ candidates, now, onClose, onGenerate, onEditInstructions }: {
|
|
17
|
+
export declare function BulkGenerateSheet({ candidates, now, onClose, onGenerate, onEditInstructions, onConnect, initialPrompt, initialSelected }: {
|
|
18
18
|
candidates: ReadonlyArray<BulkCandidate>;
|
|
19
19
|
now: Date;
|
|
20
20
|
onClose: () => void;
|
|
21
21
|
onGenerate: (targets: BulkTarget[], prompt: string) => void;
|
|
22
22
|
/** Shown as "Edit AI instructions" when the coach can edit their AI rules. */
|
|
23
23
|
onEditInstructions?: (() => void) | undefined;
|
|
24
|
+
/** Picking a not-connected client starts connecting them, carrying what the sheet holds so far. */
|
|
25
|
+
onConnect?: ((c: BulkCandidate, state: {
|
|
26
|
+
prompt: string;
|
|
27
|
+
selected: string[];
|
|
28
|
+
}) => void) | undefined;
|
|
29
|
+
/** Restores the sheet after a connect: the prompt and the picked `kind:id` keys. */
|
|
30
|
+
initialPrompt?: string | undefined;
|
|
31
|
+
initialSelected?: ReadonlyArray<string> | undefined;
|
|
24
32
|
}): import("react").JSX.Element;
|
|
25
33
|
//# sourceMappingURL=BulkGenerateSheet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BulkGenerateSheet.d.ts","sourceRoot":"","sources":["../src/BulkGenerateSheet.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,yFAAyF;AACzF,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAE5E,mGAAmG;AACnG,MAAM,WAAW,aAAa;IAAG,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE;AAgBpH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"BulkGenerateSheet.d.ts","sourceRoot":"","sources":["../src/BulkGenerateSheet.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,yFAAyF;AACzF,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAE5E,mGAAmG;AACnG,MAAM,WAAW,aAAa;IAAG,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE;AAgBpH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAkB,EAAE,eAAe,EAAE,EAAE;IAC9I,UAAU,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACzC,GAAG,EAAE,IAAI,CAAC;IACV,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9C,mGAAmG;IACnG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACpG,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,eAAe,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;CACrD,+BA2GA"}
|
|
@@ -25,27 +25,39 @@ function saveHistory(list) {
|
|
|
25
25
|
catch { /* private mode */ }
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
|
-
* Native Uplift's BulkGenerateModal: pick clients (all selected to start), write a
|
|
29
|
-
* one of the last eight), and generate. The sheet closes as soon as generation starts;
|
|
30
|
-
* on each row. Not-connected clients
|
|
31
|
-
*
|
|
28
|
+
* Native Uplift's BulkGenerateModal: pick clients (all connected ones selected to start), write a
|
|
29
|
+
* prompt (or reuse one of the last eight), and generate. The sheet closes as soon as generation starts;
|
|
30
|
+
* progress shows on each row. Not-connected clients start unselected; with `onConnect`, picking one
|
|
31
|
+
* connects them first (Ian, 2026-10-20), and without it they can be picked and drafted from host activity.
|
|
32
32
|
*/
|
|
33
|
-
export function BulkGenerateSheet({ candidates, now, onClose, onGenerate, onEditInstructions }) {
|
|
33
|
+
export function BulkGenerateSheet({ candidates, now, onClose, onGenerate, onEditInstructions, onConnect, initialPrompt = "", initialSelected }) {
|
|
34
34
|
const keyOf = (c) => `${c.target.kind}:${c.target.id}`;
|
|
35
|
-
|
|
36
|
-
const
|
|
35
|
+
// Only connected clients can be picked straight away when the host can connect the rest.
|
|
36
|
+
const pickable = (c) => c.connected || !onConnect;
|
|
37
|
+
const [selected, setSelected] = useState(() => new Set(initialSelected ?? candidates.filter(pickable).map(keyOf)));
|
|
38
|
+
const [prompt, setPrompt] = useState(initialPrompt);
|
|
37
39
|
const [history, setHistory] = useState(loadHistory);
|
|
38
40
|
const promptRef = useRef(null);
|
|
39
41
|
// Start in the prompt, like native. Deferred: Sheet focuses its first control after this effect.
|
|
40
42
|
useEffect(() => { const t = setTimeout(() => promptRef.current?.focus(), 0); return () => clearTimeout(t); }, []);
|
|
41
43
|
const picked = useMemo(() => candidates.filter((c) => selected.has(keyOf(c))), [candidates, selected]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
42
|
-
const
|
|
44
|
+
const selectable = candidates.filter(pickable);
|
|
45
|
+
// Who can be picked leads; the ones to connect follow.
|
|
46
|
+
const shown = useMemo(() => [...candidates.filter(pickable), ...candidates.filter((c) => !pickable(c))], [candidates, onConnect]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
47
|
+
const allSelected = selectable.length > 0 && selectable.every((c) => selected.has(keyOf(c)));
|
|
43
48
|
const canGenerate = prompt.trim().length > 0 && picked.length > 0;
|
|
44
49
|
const toggle = (k) => setSelected((s) => { const n = new Set(s); if (n.has(k))
|
|
45
50
|
n.delete(k);
|
|
46
51
|
else
|
|
47
52
|
n.add(k); return n; });
|
|
48
|
-
const toggleAll = () => setSelected(allSelected ? new Set() : new Set(
|
|
53
|
+
const toggleAll = () => setSelected(allSelected ? new Set() : new Set(selectable.map(keyOf)));
|
|
54
|
+
const choose = (c) => {
|
|
55
|
+
const k = keyOf(c);
|
|
56
|
+
if (pickable(c) || selected.has(k))
|
|
57
|
+
toggle(k);
|
|
58
|
+
else
|
|
59
|
+
onConnect?.(c, { prompt, selected: [...selected] });
|
|
60
|
+
};
|
|
49
61
|
const generate = () => {
|
|
50
62
|
if (!canGenerate)
|
|
51
63
|
return;
|
|
@@ -56,10 +68,12 @@ export function BulkGenerateSheet({ candidates, now, onClose, onGenerate, onEdit
|
|
|
56
68
|
onGenerate(picked.map((c) => c.target), p);
|
|
57
69
|
onClose();
|
|
58
70
|
};
|
|
59
|
-
return (_jsxs(Sheet, { labelledBy: "u-bulk-title", onClose: onClose, children: [_jsxs("div", { className: "u-bulk-head", children: [_jsx("span", { className: "u-bulk-spark", "aria-hidden": "true", children: _jsx(IconSparkles, {}) }), _jsxs("div", { className: "u-bulk-titles", children: [_jsx("h3", { id: "u-bulk-title", children: BULK_GENERATE_FEATURE_TITLE }), _jsxs("p", { className: "u-bulk-sub", children: ["Describe what you want to say\u2014we'll suggest draft options per client.", onEditInstructions && _jsxs(_Fragment, { children: [" ", _jsx("button", { type: "button", className: "u-linkbtn", onClick: onEditInstructions, children: "Edit AI instructions" })] })] })] }), _jsx("button", { type: "button", className: "u-iconbtn", "aria-label": "Close", title: "Close", onClick: onClose, children: _jsx(IconX, {}) })] }), _jsxs("section", { className: "u-bulk-sec", "aria-labelledby": "u-bulk-to", children: [_jsxs("div", { className: "u-bulk-sechead", children: [_jsx("span", { id: "u-bulk-to", className: "u-bulk-label", children: "To" }), _jsx("button", { type: "button", className: "u-linkbtn", onClick: toggleAll, children: allSelected ? "Deselect all" : `Select all (${
|
|
71
|
+
return (_jsxs(Sheet, { labelledBy: "u-bulk-title", onClose: onClose, children: [_jsxs("div", { className: "u-bulk-head", children: [_jsx("span", { className: "u-bulk-spark", "aria-hidden": "true", children: _jsx(IconSparkles, {}) }), _jsxs("div", { className: "u-bulk-titles", children: [_jsx("h3", { id: "u-bulk-title", children: BULK_GENERATE_FEATURE_TITLE }), _jsxs("p", { className: "u-bulk-sub", children: ["Describe what you want to say\u2014we'll suggest draft options per client.", onEditInstructions && _jsxs(_Fragment, { children: [" ", _jsx("button", { type: "button", className: "u-linkbtn", onClick: onEditInstructions, children: "Edit AI instructions" })] })] })] }), _jsx("button", { type: "button", className: "u-iconbtn", "aria-label": "Close", title: "Close", onClick: onClose, children: _jsx(IconX, {}) })] }), _jsxs("section", { className: "u-bulk-sec", "aria-labelledby": "u-bulk-to", children: [_jsxs("div", { className: "u-bulk-sechead", children: [_jsx("span", { id: "u-bulk-to", className: "u-bulk-label", children: "To" }), _jsx("button", { type: "button", className: "u-linkbtn", onClick: toggleAll, children: allSelected ? "Deselect all" : `Select all (${selectable.length})` })] }), _jsxs("div", { className: "u-bulk-chips", children: [candidates.length === 0 && _jsx("span", { className: "u-bulk-empty", children: "No clients yet." }), shown.map((c) => {
|
|
60
72
|
const k = keyOf(c);
|
|
61
73
|
const on = selected.has(k);
|
|
62
|
-
return (_jsxs("button", { type: "button", className: `u-bulk-chip${on ? " u-bulk-chip-on" : ""}`, "aria-pressed": on, onClick: () =>
|
|
74
|
+
return (_jsxs("button", { type: "button", className: `u-bulk-chip${on ? " u-bulk-chip-on" : ""}`, "aria-pressed": on, onClick: () => choose(c), "aria-label": c.connected || !onConnect ? undefined : `${c.name}, not connected: connect to include`, title: c.connected ? c.name : onConnect ? `${c.name} isn't connected to Uplift yet. Pick to connect them.` : `${c.name}: not connected yet. Drafts come from their activity; sending asks you to connect them.`, children: [_jsx("span", { className: "u-bulk-av", style: { background: avatarColor(c.target.id), opacity: c.connected ? 1 : 0.7 }, "aria-hidden": "true", children: initials(c.name) }), _jsx("span", { className: "u-bulk-name", children: c.name }), !c.connected && onConnect
|
|
75
|
+
? _jsx("span", { className: "u-bulk-meta", children: "Connect" })
|
|
76
|
+
: c.lastActiveAt && _jsx("span", { className: "u-bulk-meta", children: relativeShort(c.lastActiveAt, now) })] }, k));
|
|
63
77
|
})] })] }), _jsxs("section", { className: "u-bulk-sec", children: [_jsx("div", { className: "u-bulk-sechead", children: _jsx("label", { htmlFor: "u-bulk-prompt", className: "u-bulk-label", children: "Prompt" }) }), _jsx("textarea", { id: "u-bulk-prompt", ref: promptRef, rows: 4, maxLength: PROMPT_MAX, className: "u-bulk-prompt", value: prompt, onChange: (e) => setPrompt(e.target.value), placeholder: "e.g. Check in with each client based on the time of day and their most recent update." }), history.length > 0 && (_jsxs("div", { className: "u-bulk-hist", children: [_jsx("span", { className: "u-bulk-histlabel", children: "Recent:" }), history.map((h) => (_jsx("button", { type: "button", className: "u-bulk-histbtn", title: h, onClick: () => { setPrompt(h); promptRef.current?.focus(); }, children: h.length > 48 ? `${h.slice(0, 48)}…` : h }, h)))] }))] }), _jsxs("div", { className: "u-bulk-foot", children: [_jsx("button", { type: "button", className: "u-secondary", onClick: onClose, children: "Cancel" }), _jsxs("button", { type: "button", className: "u-send u-bulk-go", disabled: !canGenerate, onClick: generate, children: [_jsx(IconSparkles, {}), "Generate for ", picked.length, " client", picked.length === 1 ? "" : "s"] })] })] }));
|
|
64
78
|
}
|
|
65
79
|
//# sourceMappingURL=BulkGenerateSheet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BulkGenerateSheet.js","sourceRoot":"","sources":["../src/BulkGenerateSheet.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,yFAAyF;AACzF,MAAM,CAAC,MAAM,2BAA2B,GAAG,gCAAgC,CAAC;AAK5E,MAAM,WAAW,GAAG,2BAA2B,CAAC;AAChD,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC;QAChE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3G,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACxB,CAAC;AACD,SAAS,WAAW,CAAC,IAAc;IACjC,IAAI,CAAC;QAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"BulkGenerateSheet.js","sourceRoot":"","sources":["../src/BulkGenerateSheet.tsx"],"names":[],"mappings":"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"}
|
package/dist/ClientList.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientList.d.ts","sourceRoot":"","sources":["../src/ClientList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAgD,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGzG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,+FAA+F;IAC/F,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,kGAAkG;IAClG,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,0HAA0H;IAC1H,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0HAA0H;IAC1H,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,0HAA0H;IAC1H,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3C,qGAAqG;IACrG,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC;IACjE,kEAAkE;IAClE,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACnE,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,0IAA0I;IAC1I,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,8EAA8E;IAC9E,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACzD,GAAG,EAAE,IAAI,CAAC;CACX;AAyBD,wBAAgB,UAAU,CAAC,CAAC,EAAE,eAAe,+
|
|
1
|
+
{"version":3,"file":"ClientList.d.ts","sourceRoot":"","sources":["../src/ClientList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAgD,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGzG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,+FAA+F;IAC/F,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,kGAAkG;IAClG,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,0HAA0H;IAC1H,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0HAA0H;IAC1H,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,0HAA0H;IAC1H,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3C,qGAAqG;IACrG,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC;IACjE,kEAAkE;IAClE,WAAW,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACnE,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,0IAA0I;IAC1I,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,8EAA8E;IAC9E,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACzD,GAAG,EAAE,IAAI,CAAC;CACX;AAyBD,wBAAgB,UAAU,CAAC,CAAC,EAAE,eAAe,+BA4D5C"}
|
package/dist/ClientList.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useRef, useState } from "react";
|
|
3
3
|
import { hostNeedsAttention } from "./host.js";
|
|
4
|
-
import { IconSearch, IconPlus, IconClock, IconLoader, IconZap, IconMessageSquare, IconMessagesSquare, IconSparklesLucide, IconArrowUpRight, IconActivity, IconAlert } from "./icons.js";
|
|
4
|
+
import { IconSearch, IconPlus, IconClock, IconLoader, IconZap, IconMessageSquare, IconMessagesSquare, IconSparklesLucide, IconArrowUpRight, IconActivity, IconAlert, IconChevronRight } from "./icons.js";
|
|
5
5
|
import { ChannelBadge } from "./ChannelBadge.js";
|
|
6
6
|
import { avatarColor, initials, statusTag, SORT_MODES } from "./labels.js";
|
|
7
7
|
import { QuickSend } from "./QuickSend.js";
|
|
@@ -19,11 +19,11 @@ function SearchBox({ value, onChange }) {
|
|
|
19
19
|
}
|
|
20
20
|
export function ClientList(p) {
|
|
21
21
|
const anyRows = p.rows.length > 0;
|
|
22
|
-
return (_jsxs("div", { className: "u-list", children: [_jsxs("div", { className: "u-toolbar", children: [_jsx(SearchBox, { value: p.search, onChange: p.onSearch }), _jsx("div", { className: "u-sortgroup", role: "group", "aria-label": "Sort clients", children: SORT_MODES.map((m) => (_jsx("button", { type: "button", "aria-pressed": p.sort === m.id, onClick: () => p.onSort(m.id), children: m.label }, m.id))) }),
|
|
22
|
+
return (_jsxs("div", { className: "u-list", children: [_jsxs("div", { className: "u-toolbar", children: [_jsx(SearchBox, { value: p.search, onChange: p.onSearch }), _jsx("div", { className: "u-sortgroup", role: "group", "aria-label": "Sort clients", children: SORT_MODES.map((m) => (_jsx("button", { type: "button", "aria-pressed": p.sort === m.id, onClick: () => p.onSort(m.id), children: m.label }, m.id))) }), !p.hostManaged && _jsx("button", { type: "button", className: "u-iconbtn u-addbtn", "aria-label": "Add client", title: "Add client", onClick: p.onAddClient, children: _jsx(IconPlus, {}) }), p.headActions && _jsx("span", { className: "u-toolbar-acts", children: p.headActions })] }), p.status === "loading" && p.rows.length === 0 && _jsx(SkeletonRows, {}), p.status === "error" && (_jsxs("div", { className: "u-state", role: "alert", children: [_jsx("h3", { children: "Couldn't load clients" }), _jsx("p", { children: p.error?.message }), _jsx("button", { type: "button", className: "u-retry", onClick: p.onRetry, children: "Retry" })] })), p.status === "ready" && p.totalCount === 0 && (_jsxs("div", { className: "u-state", children: [_jsx("h3", { children: "Your clients' activity shows up here" }), p.hostManaged
|
|
23
23
|
? _jsxs("p", { children: ["Add clients in ", p.hostName ?? "your app", " and they appear here with their workouts. Connect any of them to Uplift for check-in drafts ready to send; Uplift spots who's gone quiet and drafts the message for you."] })
|
|
24
|
-
: (_jsxs(_Fragment, { children: [_jsx("p", { children: "Add a client and their workouts appear here with check-in drafts ready to send. Uplift spots who's gone quiet and drafts the message for you." }), _jsx("button", { type: "button", className: "u-send", onClick: p.onAddClient, children: "Add a client" })] })), _jsx(ExampleStrip, {})] })), p.status === "ready" && p.totalCount > 0 && !anyRows && (_jsxs("div", { className: "u-state", children: [_jsxs("h3", { children: ["No clients match \u201C", p.search.trim(), "\u201D"] }), _jsx("button", { type: "button", className: "u-retry", onClick: () => p.onSearch(""), children: "Clear search" })] })), anyRows && (
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
: (_jsxs(_Fragment, { children: [_jsx("p", { children: "Add a client and their workouts appear here with check-in drafts ready to send. Uplift spots who's gone quiet and drafts the message for you." }), _jsx("button", { type: "button", className: "u-send", onClick: p.onAddClient, children: "Add a client" })] })), _jsx(ExampleStrip, {})] })), p.status === "ready" && p.totalCount > 0 && !anyRows && (_jsxs("div", { className: "u-state", children: [_jsxs("h3", { children: ["No clients match \u201C", p.search.trim(), "\u201D"] }), _jsx("button", { type: "button", className: "u-retry", onClick: () => p.onSearch(""), children: "Clear search" })] })), anyRows && (_jsxs("ul", { className: "u-rows", children: [p.rows.map((r) => (r.kind === "client"
|
|
25
|
+
? _jsx(Row, { client: r.client, selected: r.client.id === p.selectedId, onOpen: p.onOpen, drafts: p.drafts[r.client.id] ?? null, bulk: p.bulkStatus?.[r.client.id] ?? null, onQuickSent: p.onQuickSent, now: p.now }, r.client.id)
|
|
26
|
+
: _jsx(HostRow, { host: r.host, hostName: p.hostName ?? "your app", selected: p.selectedId === `host:${r.host.id}`, onOpen: p.onOpenHost, onConnect: p.onConnectHost, drafts: p.drafts[`host:${r.host.id}`] ?? null, bulk: p.bulkStatus?.[`host:${r.host.id}`] ?? null, now: p.now }, `host:${r.host.id}`))), p.onBulk && (_jsx("li", { className: "u-bulkrow", role: "none", children: _jsxs("button", { type: "button", className: "u-bulkbtn", onClick: p.onBulk, disabled: p.bulkDisabled, title: "AI drafts for multiple clients", children: [_jsx(IconSparklesLucide, {}), _jsx(IconMessagesSquare, {}), _jsx("span", { children: "Bulk generate" })] }) }))] }))] }));
|
|
27
27
|
}
|
|
28
28
|
/** The row preview, like native ClientRow's PreviewBody: the newest thread item with a direction icon, or the status line. */
|
|
29
29
|
function Preview({ client, now }) {
|
|
@@ -49,9 +49,9 @@ function Row({ client, selected, onOpen, drafts, bulk, onQuickSent, now }) {
|
|
|
49
49
|
// A fresh bulk draft overrides the one Uplift prepared, like native.
|
|
50
50
|
const quick = drafts ?? client.drafts ?? null;
|
|
51
51
|
const at = client.lastActivity?.at ?? client.lastContactAt;
|
|
52
|
-
return (_jsxs("li", { className: `${unread > 0 ? "u-row-unread" : ""}${client.followUpDue ? " u-row-follow" : ""}`, children: [_jsxs("button", { type: "button", className: "u-row-open", "aria-current": selected, onClick: () => onOpen(client), children: [_jsx("span", { className: "u-r-ind", "aria-hidden": unread === 0, children: unread > 1 ? _jsx("span", { className: "u-r-badge", "aria-label": `${unread} unread events`, title: `${unread} unread events`, children: unread }) : unread === 1 ? _jsx("span", { className: "u-r-dot", "aria-label": "Unread activity" }) : null }), _jsxs("span", { className: "u-av-wrap u-r-av", children: [_jsx("span", { className: "u-av", style: { background: avatarColor(client.id) }, "aria-hidden": "true", children: initials(client.name) }), _jsx(ChannelBadge, { channel: client.channel })] }), _jsxs("span", { className: "u-r-top", children: [_jsx("span", { className: `u-r-name${unread > 0 ? " u-r-name-unread" : ""}`, children: client.name }), client.followUpDue && _jsx("span", { className: "u-r-follow", title: "Follow up \u2014 you messaged over 24 hours ago with no reply", "aria-label": "Follow up \u2014 no reply in over 24 hours", children: _jsx(IconClock, {}) }), client.lastDeliveryFailure && _jsx("span", { className: "u-r-fail", title: `Message not delivered — ${client.lastDeliveryFailure.errorDesc || "delivery failed"}`, "aria-label": "Last message not delivered", children: _jsx(IconAlert, {}) }), _jsx("span", { className: "u-r-time", children: relativeShort(at, now) })] }), _jsx(Preview, { client: client, now: now }), _jsx("span", { className: "u-r-tags", children: tag && _jsx("span", { className: `u-tag u-${tag.kind}`, children: tag.text }) })] }), bulk === "pending" || (bulk === "error" && !drafts)
|
|
52
|
+
return (_jsxs("li", { className: `${unread > 0 ? "u-row-unread" : ""}${client.followUpDue ? " u-row-follow" : ""}`, children: [_jsxs("button", { type: "button", className: "u-row-open", "aria-current": selected, onClick: () => onOpen(client), children: [_jsx("span", { className: "u-r-ind", "aria-hidden": unread === 0, children: unread > 1 ? _jsx("span", { className: "u-r-badge", "aria-label": `${unread} unread events`, title: `${unread} unread events`, children: unread }) : unread === 1 ? _jsx("span", { className: "u-r-dot", "aria-label": "Unread activity" }) : null }), _jsxs("span", { className: "u-av-wrap u-r-av", children: [_jsx("span", { className: "u-av", style: { background: avatarColor(client.id) }, "aria-hidden": "true", children: initials(client.name) }), _jsx(ChannelBadge, { channel: client.channel })] }), _jsxs("span", { className: "u-r-top", children: [_jsx("span", { className: `u-r-name${unread > 0 ? " u-r-name-unread" : ""}`, children: client.name }), client.followUpDue && _jsx("span", { className: "u-r-follow", title: "Follow up \u2014 you messaged over 24 hours ago with no reply", "aria-label": "Follow up \u2014 no reply in over 24 hours", children: _jsx(IconClock, {}) }), client.lastDeliveryFailure && _jsx("span", { className: "u-r-fail", title: `Message not delivered — ${client.lastDeliveryFailure.errorDesc || "delivery failed"}`, "aria-label": "Last message not delivered", children: _jsx(IconAlert, {}) }), _jsx("span", { className: "u-r-time", children: relativeShort(at, now) }), _jsx("span", { className: "u-r-chev", "aria-hidden": "true", children: _jsx(IconChevronRight, {}) })] }), _jsx(Preview, { client: client, now: now }), _jsx("span", { className: "u-r-tags", children: tag && _jsx("span", { className: `u-tag u-${tag.kind}`, children: tag.text }) })] }), bulk === "pending" || (bulk === "error" && !drafts)
|
|
53
53
|
? _jsx(BulkChip, { status: bulk })
|
|
54
|
-
: quick && (_jsx("span", { className: "u-r-quick", onClick: (e) => e.stopPropagation(), children: _jsx(QuickSend, { client: client, drafts: quick, onSent: onQuickSent }, quick.five_words || quick.happy) }))] }));
|
|
54
|
+
: quick && (_jsx("span", { className: "u-r-quick", onClick: (e) => e.stopPropagation(), children: _jsx(QuickSend, { client: client, drafts: quick, source: drafts ? "bulk" : "reply_options", onSent: onQuickSent }, quick.five_words || quick.happy) }))] }));
|
|
55
55
|
}
|
|
56
56
|
/** D19: a host client who is not on Uplift. Opens the preview pane; never a thread. */
|
|
57
57
|
function HostRow({ host, hostName, selected, onOpen, onConnect, drafts, bulk, now }) {
|
|
@@ -60,7 +60,7 @@ function HostRow({ host, hostName, selected, onOpen, onConnect, drafts, bulk, no
|
|
|
60
60
|
const label = words.length <= 6 ? short : `${words.slice(0, 6).join(" ")}…`;
|
|
61
61
|
const quiet = hostNeedsAttention(host, now);
|
|
62
62
|
const line = host.lastActiveAt ? `Last active in ${hostName} ${relativeAgo(host.lastActiveAt, now)}` : `No ${hostName} activity yet`;
|
|
63
|
-
return (_jsxs("li", { children: [_jsxs("button", { type: "button", className: "u-row-open", "aria-current": selected, onClick: () => onOpen?.(host), children: [_jsx("span", { className: "u-av", style: { background: avatarColor(host.id), opacity: 0.7 }, "aria-hidden": "true", children: initials(host.name) }), _jsxs("span", { className: "u-r-top", children: [_jsx("span", { className: "u-r-name", children: host.name }), _jsx("span", { className: "u-r-time", children: relativeShort(host.lastActiveAt, now) })] }), _jsx("span", { className: "u-r-line", children: line })] }), _jsxs("span", { className: "u-r-tags u-r-hosttags", children: [quiet && _jsx("span", { className: "u-tag u-need", children: "Quiet" }), onConnect
|
|
63
|
+
return (_jsxs("li", { children: [_jsxs("button", { type: "button", className: "u-row-open", "aria-current": selected, onClick: () => onOpen?.(host), children: [_jsx("span", { className: "u-av", style: { background: avatarColor(host.id), opacity: 0.7 }, "aria-hidden": "true", children: initials(host.name) }), _jsxs("span", { className: "u-r-top", children: [_jsx("span", { className: "u-r-name", children: host.name }), _jsx("span", { className: "u-r-time", children: relativeShort(host.lastActiveAt, now) }), _jsx("span", { className: "u-r-chev", "aria-hidden": "true", children: _jsx(IconChevronRight, {}) })] }), _jsx("span", { className: "u-r-line", children: line })] }), _jsxs("span", { className: "u-r-tags u-r-hosttags", children: [quiet && _jsx("span", { className: "u-tag u-need", children: "Quiet" }), onConnect
|
|
64
64
|
? _jsx("button", { type: "button", className: "u-tag u-tag-connect", title: `Connect ${host.name.split(" ")[0]} to Uplift`, onClick: () => onConnect(host), children: "Not connected" })
|
|
65
65
|
: _jsx("span", { className: "u-tag", children: "Not connected" })] }), bulk === "pending" || (bulk === "error" && !drafts)
|
|
66
66
|
? _jsx(BulkChip, { status: bulk })
|
package/dist/ClientList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientList.js","sourceRoot":"","sources":["../src/ClientList.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ClientList.js","sourceRoot":"","sources":["../src/ClientList.tsx"],"names":[],"mappings":"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"}
|
package/dist/Composer.d.ts
CHANGED
|
@@ -30,6 +30,10 @@ export interface ComposerProps {
|
|
|
30
30
|
body: string;
|
|
31
31
|
attachments: Attachment[];
|
|
32
32
|
}) => void;
|
|
33
|
+
/** A worded send button, e.g. "Connect to send" for a client who isn't connected yet: its name and title. */
|
|
34
|
+
sendLabel?: string | undefined;
|
|
35
|
+
/** The word shown before the send icon on that button, e.g. "Connect". */
|
|
36
|
+
sendText?: string | undefined;
|
|
33
37
|
/** Absent for a not-connected client: nothing can be in flight. */
|
|
34
38
|
send?: SendState | undefined;
|
|
35
39
|
/** S1 free-tier wall: open the offer. */
|
package/dist/Composer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../src/Composer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAe,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../src/Composer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAe,MAAM,eAAe,CAAC;AAK3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,mFAAmF;IACnF,SAAS,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC1H,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,uCAAuC;IACvC,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,gHAAgH;IAChH,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,qFAAqF;IACrF,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACvC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,MAAM,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,UAAU,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACvE,6GAA6G;IAC7G,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,mEAAmE;IACnE,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,yCAAyC;IACzC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,eAAe,KAAK,IAAI,CAAC;IACjE,4GAA4G;IAC5G,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,sGAAsG;IACtG,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,+BAkJxC"}
|
package/dist/Composer.js
CHANGED
|
@@ -2,8 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { AssistantGrid } from "./AssistantGrid.js";
|
|
4
4
|
import { AttachmentPicker, PICK_ACCEPT } from "./AttachmentPicker.js";
|
|
5
|
-
import {
|
|
6
|
-
import { IconPlus, IconSend, IconSliders, IconSparkles } from "./icons.js";
|
|
5
|
+
import { IconPlus, IconSend, IconSliders, IconSparkles, IconX } from "./icons.js";
|
|
7
6
|
import { channelLabel, firstName } from "./labels.js";
|
|
8
7
|
import { SegmentEditor } from "./SegmentEditor.js";
|
|
9
8
|
import { previewSmsCost } from "./smsSegments.js";
|
|
@@ -18,14 +17,11 @@ export function Composer(p) {
|
|
|
18
17
|
const first = firstName(p.recipient.name);
|
|
19
18
|
const sending = p.send?.status === "sending";
|
|
20
19
|
const attachmentsOn = p.attachments ?? !!p.recipient.id;
|
|
21
|
-
const [extrasCollapsed, setExtrasCollapsed] = useState(false);
|
|
22
|
-
const [gridOpen, setGridOpen] = useState(true);
|
|
23
20
|
const [attachMenu, setAttachMenu] = useState(null);
|
|
24
21
|
const [genMenu, setGenMenu] = useState(false);
|
|
25
22
|
const [attach, setAttach] = useState({ count: 0, uploading: false, ready: 0, recording: false, errors: false });
|
|
26
23
|
const picker = useRef(null);
|
|
27
|
-
|
|
28
|
-
const generate = useCallback((purpose) => { setGenMenu(false); setExtrasCollapsed(false); setGridOpen(true); p.onGenerate(purpose); }, [p]);
|
|
24
|
+
const generate = useCallback((purpose) => { setGenMenu(false); p.onGenerate(purpose); }, [p]);
|
|
29
25
|
const hasText = p.text.trim().length > 0;
|
|
30
26
|
const showSend = hasText || attach.ready > 0 || sending;
|
|
31
27
|
// WhatsApp only carries media inside the 24-hour window; outside it Uplift refuses the whole send.
|
|
@@ -57,12 +53,12 @@ export function Composer(p) {
|
|
|
57
53
|
picker.current?.clear(); }, [p.send?.status]);
|
|
58
54
|
const pickAttachment = (accept) => { setAttachMenu(null); picker.current?.openPicker(accept); };
|
|
59
55
|
const recordVoiceNote = () => { setAttachMenu(null); picker.current?.startRecording(); };
|
|
60
|
-
return (_jsxs("div", { className:
|
|
56
|
+
return (_jsxs("div", { className: `u-composer${attachMenu || genMenu ? " u-composer-menu" : ""}`, children: [_jsx(AssistantGrid, { drafts: p.drafts, label: p.draftsLabel, footnote: p.draftsFootnote, selected: p.selectedTone, onPick: p.onPick, onRegenerate: () => generate(), regenDisabled: p.generateDisabled, composerEmpty: !hasText, clientFirstName: first, onNeedsPlan: () => p.onNeedsPlan("plan_inactive") }), attachmentsOn && (_jsxs("div", { className: "u-attach-row", style: { display: attach.count > 0 || attach.recording ? "flex" : "none" }, children: [_jsx(AttachmentPicker, { ref: picker, clientId: p.recipient.id, onChange: setAttach }), attach.count > 0 && (mediaBlocked
|
|
61
57
|
? _jsx("span", { className: "u-limits u-limits-warn", role: "status", children: mediaWaitNote(first) })
|
|
62
58
|
: _jsx("span", { className: "u-limits", children: limitsNote }))] })), smsCost && (_jsxs("span", { className: "u-sms-note", role: "status", children: ["Too long for one text \u2014 this will arrive as ", smsCost.parts, " messages (", smsCost.segments, " SMS parts).", smsCost.encoding === "UCS-2" && " Emoji and special characters more than halve how much fits in each."] })), _jsxs("div", { className: "u-c-row", children: [_jsxs("div", { className: "u-attach-wrap", children: [attachMenu && (_jsxs(_Fragment, { children: [_jsx("div", { className: "u-menu-backdrop", onClick: () => setAttachMenu(null) }), _jsx("div", { className: "u-menu u-menu-left", role: "menu", "aria-label": "Attach", children: attachMenu === "main"
|
|
63
59
|
? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", role: "menuitem", className: "u-menu-item", onClick: () => pickAttachment(PICK_ACCEPT.photo), children: "Photo" }), _jsx("button", { type: "button", role: "menuitem", className: "u-menu-item", onClick: () => pickAttachment(PICK_ACCEPT.video), children: "Video" }), _jsx("button", { type: "button", role: "menuitem", className: "u-menu-item", onClick: () => pickAttachment(PICK_ACCEPT.file), children: "File (PDF)" }), _jsx("button", { type: "button", role: "menuitem", className: "u-menu-item", onClick: () => setAttachMenu("more"), children: "More\u2026" })] }))
|
|
64
|
-
: (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", role: "menuitem", className: "u-menu-item", onClick: () => setAttachMenu("main"), children: "\u2190 Back" }), _jsx("button", { type: "button", role: "menuitem", className: "u-menu-item", onClick: recordVoiceNote, children: "Voice note" }), _jsx("button", { type: "button", role: "menuitem", className: "u-menu-item", onClick: () => pickAttachment("audio/*"), children: "Audio file" })] })) })] })), _jsx("button", { type: "button", className: "u-attach-btn", onClick: () => setAttachMenu((m) => (m ? null : "main")), disabled: !attachmentsOn || sending || attach.recording, title: attachmentsOn ? "Attach" : `Connect ${first} to attach files`, "aria-label": "Attach", "aria-expanded": !!attachMenu, children: _jsx(IconPlus, {}) })] }), _jsxs("div", { className: `u-pill${p.inject?.locked ? " u-pill-locked" : ""}`, children: [_jsx("div", { className: "u-pill-grow", children: _jsx(SegmentEditor, { ariaLabel: `Message to ${p.recipient.name}`, placeholder: "Write your message here\u2026", value: p.text, onChange: p.onText, inject: p.inject, disabled: sending, readOnly: !!p.inject?.locked }) }), showSend
|
|
65
|
-
? (
|
|
60
|
+
: (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", role: "menuitem", className: "u-menu-item", onClick: () => setAttachMenu("main"), children: "\u2190 Back" }), _jsx("button", { type: "button", role: "menuitem", className: "u-menu-item", onClick: recordVoiceNote, children: "Voice note" }), _jsx("button", { type: "button", role: "menuitem", className: "u-menu-item", onClick: () => pickAttachment("audio/*"), children: "Audio file" })] })) })] })), _jsx("button", { type: "button", className: "u-attach-btn", onClick: () => setAttachMenu((m) => (m ? null : "main")), disabled: !attachmentsOn || sending || attach.recording, title: attachmentsOn ? "Attach" : `Connect ${first} to attach files`, "aria-label": "Attach", "aria-expanded": !!attachMenu, children: _jsx(IconPlus, {}) })] }), _jsxs("div", { className: `u-pill${p.inject?.locked ? " u-pill-locked" : ""}${p.drafts.status === "loading" && !hasText ? " u-pill-gen" : ""}`, children: [_jsx("div", { className: "u-pill-grow", children: _jsx(SegmentEditor, { ariaLabel: `Message to ${p.recipient.name}`, placeholder: "Write your message here\u2026", value: p.text, onChange: p.onText, inject: p.inject, disabled: sending, readOnly: !!p.inject?.locked, onEscape: p.inject?.locked ? undefined : () => p.onText("") }) }), p.text.trim() !== "" && !p.inject?.locked && (_jsx("button", { type: "button", className: "u-clear-btn", onClick: () => p.onText(""), disabled: sending, title: "Clear (Esc)", "aria-label": "Clear message", children: _jsx(IconX, {}) })), showSend
|
|
61
|
+
? (_jsxs("button", { type: "button", className: `u-send-btn${p.sendText ? " u-send-btn-text" : ""}`, onClick: send, disabled: !canSend, "aria-busy": sending, title: p.sendLabel ?? "Send", "aria-label": p.sendLabel ?? "Send message", children: [p.sendText, _jsx(IconSend, {})] }))
|
|
66
62
|
: (_jsx("button", { type: "button", className: "u-gen-btn", onClick: () => (p.purposes ? setGenMenu((o) => !o) : generate()), disabled: p.generateDisabled, title: "Generate message", "aria-label": "Generate message", "aria-expanded": p.purposes ? genMenu : undefined, children: _jsx(IconSparkles, {}) })), genMenu && p.purposes && (_jsxs(_Fragment, { children: [_jsx("div", { className: "u-menu-backdrop", onClick: () => setGenMenu(false) }), _jsxs("div", { className: "u-menu u-menu-right", role: "menu", "aria-label": "Generate message", children: [_jsxs("div", { className: "u-menu-titlerow", children: [_jsx("span", { className: "u-menu-title", children: "Generate message" }), p.onCustomize && (_jsx("button", { type: "button", className: "u-menu-cfg", onClick: () => { setGenMenu(false); p.onCustomize?.(); }, title: "Customize these options", "aria-label": "Customize proactive options", children: _jsx(IconSliders, {}) }))] }), p.purposes.map((pu) => (_jsxs("button", { type: "button", role: "menuitem", className: "u-menu-item u-menu-purpose", onClick: () => generate(pu), title: pu.prompt, children: [_jsx(pu.Icon, {}), _jsx("span", { children: pu.label })] }, pu.id)))] })] }))] })] }), p.send?.status === "error" && p.send.error && _jsx(SendNote, { error: p.send.error, first: first, onRetry: send, onNeedsPlan: p.onNeedsPlan })] }));
|
|
67
63
|
}
|
|
68
64
|
/** D11: typed send errors, placed under the composer. The text above is never cleared. */
|