@uplifted/react 0.24.0 → 0.26.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 +43 -0
- package/dist/AddClientSheet.d.ts +4 -4
- package/dist/AddClientSheet.d.ts.map +1 -1
- package/dist/AddClientSheet.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/ChannelBadge.d.ts +5 -1
- package/dist/ChannelBadge.d.ts.map +1 -1
- package/dist/ChannelBadge.js +8 -4
- package/dist/ChannelBadge.js.map +1 -1
- package/dist/ChannelControl.d.ts +24 -0
- package/dist/ChannelControl.d.ts.map +1 -0
- package/dist/ChannelControl.js +96 -0
- package/dist/ChannelControl.js.map +1 -0
- package/dist/ChannelExplainer.d.ts +1 -1
- package/dist/ChannelExplainer.d.ts.map +1 -1
- package/dist/ClientChat.d.ts +37 -0
- package/dist/ClientChat.d.ts.map +1 -0
- package/dist/ClientChat.js +365 -0
- package/dist/ClientChat.js.map +1 -0
- package/dist/ClientList.js +3 -3
- package/dist/ClientList.js.map +1 -1
- package/dist/Composer.d.ts +4 -2
- package/dist/Composer.d.ts.map +1 -1
- package/dist/Composer.js +10 -11
- package/dist/Composer.js.map +1 -1
- package/dist/ConnectClientSheet.d.ts +5 -3
- package/dist/ConnectClientSheet.d.ts.map +1 -1
- package/dist/ConnectClientSheet.js +2 -2
- package/dist/ConnectClientSheet.js.map +1 -1
- package/dist/ConversationPane.d.ts +5 -1
- package/dist/ConversationPane.d.ts.map +1 -1
- package/dist/ConversationPane.js +5 -3
- package/dist/ConversationPane.js.map +1 -1
- package/dist/HostPreviewPane.d.ts.map +1 -1
- package/dist/HostPreviewPane.js +2 -1
- package/dist/HostPreviewPane.js.map +1 -1
- package/dist/SegmentEditor.d.ts +1 -1
- package/dist/SegmentEditor.d.ts.map +1 -1
- package/dist/SegmentEditor.js +4 -3
- package/dist/SegmentEditor.js.map +1 -1
- package/dist/ThreadFeed.d.ts.map +1 -1
- package/dist/ThreadFeed.js +3 -2
- package/dist/ThreadFeed.js.map +1 -1
- package/dist/UpliftPanel.d.ts +7 -1
- package/dist/UpliftPanel.d.ts.map +1 -1
- package/dist/UpliftPanel.js +43 -8
- package/dist/UpliftPanel.js.map +1 -1
- package/dist/build-info.json +3 -3
- package/dist/channels.d.ts +1 -1
- package/dist/channels.d.ts.map +1 -1
- package/dist/chatStrings.d.ts +56 -0
- package/dist/chatStrings.d.ts.map +1 -0
- package/dist/chatStrings.js +50 -0
- package/dist/chatStrings.js.map +1 -0
- package/dist/icons.d.ts +2 -0
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +2 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/labels.js +1 -1
- package/dist/labels.js.map +1 -1
- package/dist/styles.d.ts +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +108 -16
- package/dist/styles.js.map +1 -1
- package/dist/useChatUnread.d.ts +8 -0
- package/dist/useChatUnread.d.ts.map +1 -0
- package/dist/useChatUnread.js +63 -0
- package/dist/useChatUnread.js.map +1 -0
- package/dist/useClientChat.d.ts +57 -0
- package/dist/useClientChat.d.ts.map +1 -0
- package/dist/useClientChat.js +360 -0
- package/dist/useClientChat.js.map +1 -0
- package/dist/useStickToBottom.d.ts +2 -0
- package/dist/useStickToBottom.d.ts.map +1 -1
- package/dist/useStickToBottom.js +5 -1
- package/dist/useStickToBottom.js.map +1 -1
- package/dist/useThread.d.ts +3 -1
- package/dist/useThread.d.ts.map +1 -1
- package/dist/useThread.js +4 -1
- package/dist/useThread.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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,49 @@
|
|
|
2
2
|
|
|
3
3
|
Newest first. Every version is published by CI. `dist/build-info.json` in the package, and the annotated git tag `@uplifted/react@<version>`, record the source commit, build command and tarball integrity.
|
|
4
4
|
|
|
5
|
+
## 0.26.0 (2026-10-21)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* change a client's channel and connect by app chat (web chat, coach side)
|
|
11
|
+
* ClientChat and ChatClient (web chat, client side)
|
|
12
|
+
* **react:** <ClientChat> lets your clients message their coach in your app
|
|
13
|
+
* **react:** change a client's channel from the conversation header, and connect by app chat
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Fixes
|
|
17
|
+
|
|
18
|
+
* **react:** the thread feed no longer passes isPinned and scrollToBottom to the DOM
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Dependencies
|
|
22
|
+
|
|
23
|
+
* The following workspace dependencies were updated
|
|
24
|
+
* devDependencies
|
|
25
|
+
* @uplifted/sdk bumped from 0.11.0 to 0.12.0
|
|
26
|
+
* peerDependencies
|
|
27
|
+
* @uplifted/sdk bumped from ^0.11.0 to ^0.12.0
|
|
28
|
+
|
|
29
|
+
## 0.25.0 (2026-10-20)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
* **react:** a not-connected client's send button reads "Connect" with the send icon
|
|
35
|
+
* **react:** at phone width a client row shows a chevron after its time, since tapping it opens the conversation
|
|
36
|
+
* **react:** Bulk generate starts with only connected clients picked; picking a not-connected one connects them first
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
### Fixes
|
|
40
|
+
|
|
41
|
+
* **react:** a preloaded draft is labelled "Click to edit, it trains the AI!" with a sparkle, instead of "Suggested draft · click to edit"
|
|
42
|
+
* **react:** Bulk generate stays pinned at the bottom of the client list, in larger text
|
|
43
|
+
* **react:** composer menus aren't clipped when the host makes the composer scroll
|
|
44
|
+
* **react:** draft label, Bulk generate (pinned row, connect-first picks), phone chevron, Connect button, unclipped menu, one drafts chevron
|
|
45
|
+
* **react:** drop the composer's hide-drafts chevron; the drafts row keeps its own
|
|
46
|
+
* **react:** the preloaded draft's label reads "Click to edit to teach Uplift your voice."
|
|
47
|
+
|
|
5
48
|
## 0.24.0 (2026-10-20)
|
|
6
49
|
|
|
7
50
|
|
package/dist/AddClientSheet.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Channel, Client, UpliftError } from "@uplifted/sdk";
|
|
1
|
+
import type { Channel, PhoneChannel, Client, UpliftError } from "@uplifted/sdk";
|
|
2
2
|
export interface AddClientSheetProps {
|
|
3
3
|
onClose: () => void;
|
|
4
4
|
onAdded: (client: Client) => void;
|
|
@@ -24,7 +24,7 @@ export interface AddClientSheetProps {
|
|
|
24
24
|
existing?: ReadonlyArray<{
|
|
25
25
|
id?: string;
|
|
26
26
|
name: string;
|
|
27
|
-
phone: string;
|
|
27
|
+
phone: string | null;
|
|
28
28
|
}> | undefined;
|
|
29
29
|
hostName: string;
|
|
30
30
|
}
|
|
@@ -32,14 +32,14 @@ export interface AddClientSheetProps {
|
|
|
32
32
|
export interface AddAttempt {
|
|
33
33
|
name: string;
|
|
34
34
|
phone: string;
|
|
35
|
-
channel:
|
|
35
|
+
channel: PhoneChannel;
|
|
36
36
|
hostClientId?: string;
|
|
37
37
|
}
|
|
38
38
|
/** Why Uplift refused an add, worded for the phone field or the form. Plan refusals are the caller's. */
|
|
39
39
|
export declare function describeAddError(ue: UpliftError, phone: string, existing?: ReadonlyArray<{
|
|
40
40
|
id?: string;
|
|
41
41
|
name: string;
|
|
42
|
-
phone: string;
|
|
42
|
+
phone: string | null;
|
|
43
43
|
}>): {
|
|
44
44
|
phone?: string;
|
|
45
45
|
form?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddClientSheet.d.ts","sourceRoot":"","sources":["../src/AddClientSheet.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"AddClientSheet.d.ts","sourceRoot":"","sources":["../src/AddClientSheet.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQhF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,yHAAyH;IACzH,WAAW,EAAE,CAAC,GAAG,EAAE;QAAE,MAAM,EAAE,cAAc,GAAG,eAAe,CAAC;QAAC,OAAO,EAAE,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC;IAC9F,qEAAqE;IACrE,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,kGAAkG;IAClG,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;IACjE;kGAC8F;IAC9F,WAAW,CAAC,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;IACtE,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;IAC1F,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE;AAEzG,yGAAyG;AACzG,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBjL;AAED,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,mBAAmB,+BAgH3J"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddClientSheet.js","sourceRoot":"","sources":["../src/AddClientSheet.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAuBhD,yGAAyG;AACzG,MAAM,UAAU,gBAAgB,CAAC,EAAe,EAAE,KAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"AddClientSheet.js","sourceRoot":"","sources":["../src/AddClientSheet.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/ChannelBadge.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ import type { Channel } from "@uplifted/sdk";
|
|
|
2
2
|
/**
|
|
3
3
|
* Corner badge on a client's avatar showing the channel they message through, ported from
|
|
4
4
|
* the native Uplift app's channel badge: WhatsApp green with the official glyph,
|
|
5
|
-
* SMS a speech bubble on the highlight colour
|
|
5
|
+
* SMS a speech bubble on the highlight colour, app chat a phone in the text colour. A missing channel is
|
|
6
|
+
* SMS, the platform default.
|
|
6
7
|
*/
|
|
7
8
|
export declare function WhatsAppGlyph({ size }: {
|
|
8
9
|
size?: number;
|
|
@@ -10,6 +11,9 @@ export declare function WhatsAppGlyph({ size }: {
|
|
|
10
11
|
export declare function SmsGlyph({ size }: {
|
|
11
12
|
size?: number;
|
|
12
13
|
}): import("react").JSX.Element;
|
|
14
|
+
export declare function AppGlyph({ size }: {
|
|
15
|
+
size?: number;
|
|
16
|
+
}): import("react").JSX.Element;
|
|
13
17
|
export declare function ChannelBadge({ channel }: {
|
|
14
18
|
channel: Channel | null | undefined;
|
|
15
19
|
}): import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelBadge.d.ts","sourceRoot":"","sources":["../src/ChannelBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C
|
|
1
|
+
{"version":3,"file":"ChannelBadge.d.ts","sourceRoot":"","sources":["../src/ChannelBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAM7D;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAMxD;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAMxD;AAED,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,+BAQhF"}
|
package/dist/ChannelBadge.js
CHANGED
|
@@ -3,7 +3,8 @@ import { channelLabel } from "./labels.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* Corner badge on a client's avatar showing the channel they message through, ported from
|
|
5
5
|
* the native Uplift app's channel badge: WhatsApp green with the official glyph,
|
|
6
|
-
* SMS a speech bubble on the highlight colour
|
|
6
|
+
* SMS a speech bubble on the highlight colour, app chat a phone in the text colour. A missing channel is
|
|
7
|
+
* SMS, the platform default.
|
|
7
8
|
*/
|
|
8
9
|
export function WhatsAppGlyph({ size = 10 }) {
|
|
9
10
|
return (_jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.297-.347.446-.52.149-.174.198-.298.297-.497.1-.198.05-.371-.025-.52-.074-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413Z" }) }));
|
|
@@ -11,9 +12,12 @@ export function WhatsAppGlyph({ size = 10 }) {
|
|
|
11
12
|
export function SmsGlyph({ size = 10 }) {
|
|
12
13
|
return (_jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { d: "M12 2C6.48 2 2 5.94 2 10.8c0 2.8 1.5 5.29 3.83 6.9-.14 1.13-.6 2.4-1.62 3.5-.2.22-.03.58.27.55 2.05-.2 3.66-1.05 4.79-1.93.87.21 1.79.33 2.73.33 5.52 0 10-3.94 10-8.8S17.52 2 12 2Z" }) }));
|
|
13
14
|
}
|
|
15
|
+
export function AppGlyph({ size = 10 }) {
|
|
16
|
+
return (_jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { d: "M7 1h10a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H7a3 3 0 0 1-3-3V4a3 3 0 0 1 3-3Zm0 3v14h10V4H7Zm5 15.2a1.2 1.2 0 1 0 0 2.4 1.2 1.2 0 0 0 0-2.4Z" }) }));
|
|
17
|
+
}
|
|
14
18
|
export function ChannelBadge({ channel }) {
|
|
15
|
-
const
|
|
16
|
-
const label = channelLabel(
|
|
17
|
-
return (_jsx("span", { className: `u-chan-badge ${
|
|
19
|
+
const ch = channel === "whatsapp" || channel === "webchat" ? channel : "sms";
|
|
20
|
+
const label = channelLabel(ch);
|
|
21
|
+
return (_jsx("span", { className: `u-chan-badge ${ch === "whatsapp" ? "u-chan-wa" : ch === "webchat" ? "u-chan-app" : "u-chan-sms"}`, title: `Messages via ${label}`, "aria-label": `Channel: ${label}`, role: "img", children: ch === "whatsapp" ? _jsx(WhatsAppGlyph, {}) : ch === "webchat" ? _jsx(AppGlyph, {}) : _jsx(SmsGlyph, {}) }));
|
|
18
22
|
}
|
|
19
23
|
//# sourceMappingURL=ChannelBadge.js.map
|
package/dist/ChannelBadge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelBadge.js","sourceRoot":"","sources":["../src/ChannelBadge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"ChannelBadge.js","sourceRoot":"","sources":["../src/ChannelBadge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,IAAI,GAAG,EAAE,EAAqB;IAC5D,OAAO,CACL,cAAK,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,iBAAa,MAAM,YACxF,eAAM,CAAC,EAAC,ylCAAylC,GAAG,GAChmC,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,GAAG,EAAE,EAAqB;IACvD,OAAO,CACL,cAAK,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,iBAAa,MAAM,YACxF,eAAM,CAAC,EAAC,sLAAsL,GAAG,GAC7L,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,GAAG,EAAE,EAAqB;IACvD,OAAO,CACL,cAAK,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,cAAc,iBAAa,MAAM,YACxF,eAAM,CAAC,EAAC,wIAAwI,GAAG,GAC/I,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,OAAO,EAA2C;IAC/E,MAAM,EAAE,GAAY,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACtF,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO,CACL,eAAM,SAAS,EAAE,gBAAgB,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,gBAAgB,KAAK,EAAE,gBAAc,YAAY,KAAK,EAAE,EAAE,IAAI,EAAC,KAAK,YAC7L,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,KAAC,aAAa,KAAG,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,KAAC,QAAQ,KAAG,CAAC,CAAC,CAAC,KAAC,QAAQ,KAAG,GAClF,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ChatReachability, Client } from "@uplifted/sdk";
|
|
2
|
+
export interface ChannelControlProps {
|
|
3
|
+
client: Client;
|
|
4
|
+
/** From the thread: whether a web chat client can be reached. */
|
|
5
|
+
reachability: ChatReachability | null;
|
|
6
|
+
/** The host shows <ClientChat> to its clients, so App chat is offered. A client already on it always sees it. */
|
|
7
|
+
appChat: boolean;
|
|
8
|
+
/** The switch is saved; the client now has this channel. */
|
|
9
|
+
onSwitched: (client: Client) => void;
|
|
10
|
+
announce: (text: string) => void;
|
|
11
|
+
/** A line for under the header: the reminder after a move, or why it failed. Null clears it. */
|
|
12
|
+
onNote: (note: {
|
|
13
|
+
text: string;
|
|
14
|
+
err?: boolean;
|
|
15
|
+
} | null) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Design 7D: the channel in the conversation header is a control. SMS and WhatsApp need a phone, so a
|
|
19
|
+
* phone-less client sees them disabled with "Add a phone number first". A web chat client shows whether
|
|
20
|
+
* they can be reached. Leaving web chat while they have unread messages asks first. Uplift tells the
|
|
21
|
+
* client nothing about a move, so the panel reminds the coach to.
|
|
22
|
+
*/
|
|
23
|
+
export declare function ChannelControl({ client, reachability, appChat, onSwitched, announce, onNote: setNote }: ChannelControlProps): import("react").JSX.Element;
|
|
24
|
+
//# sourceMappingURL=ChannelControl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelControl.d.ts","sourceRoot":"","sources":["../src/ChannelControl.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,gBAAgB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAOvE,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,iHAAiH;IACjH,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,gGAAgG;IAChG,MAAM,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAC;CAChE;AAWD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,mBAAmB,+BAqH3H"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useId, useRef, useState } from "react";
|
|
3
|
+
import { asUpliftError } from "./errors.js";
|
|
4
|
+
import { IconChevronDown } from "./icons.js";
|
|
5
|
+
import { channelLabel, firstName } from "./labels.js";
|
|
6
|
+
import { Sheet } from "./Sheet.js";
|
|
7
|
+
import { useUplift } from "./UpliftProvider.js";
|
|
8
|
+
const REACH = {
|
|
9
|
+
notifications_on: { text: "Notifications on", kind: "ok", title: "They get a notification for each message" },
|
|
10
|
+
notifications_off: { text: "Notifications off", kind: "warn", title: "They see messages the next time they open the app" },
|
|
11
|
+
never_opened: { text: "Never opened", kind: "warn", title: "They haven't opened the chat yet, so they won't see messages until they do" },
|
|
12
|
+
};
|
|
13
|
+
/** What the move is called in the confirm sheet: "Switching to text hides the chat input for them". */
|
|
14
|
+
const moveName = (c) => (c === "sms" ? "text" : channelLabel(c));
|
|
15
|
+
/**
|
|
16
|
+
* Design 7D: the channel in the conversation header is a control. SMS and WhatsApp need a phone, so a
|
|
17
|
+
* phone-less client sees them disabled with "Add a phone number first". A web chat client shows whether
|
|
18
|
+
* they can be reached. Leaving web chat while they have unread messages asks first. Uplift tells the
|
|
19
|
+
* client nothing about a move, so the panel reminds the coach to.
|
|
20
|
+
*/
|
|
21
|
+
export function ChannelControl({ client, reachability, appChat, onSwitched, announce, onNote: setNote }) {
|
|
22
|
+
const { client: api } = useUplift();
|
|
23
|
+
const [open, setOpen] = useState(false);
|
|
24
|
+
const [busy, setBusy] = useState(false);
|
|
25
|
+
const [confirm, setConfirm] = useState(null);
|
|
26
|
+
const box = useRef(null);
|
|
27
|
+
const button = useRef(null);
|
|
28
|
+
const menuId = useId();
|
|
29
|
+
const first = firstName(client.name);
|
|
30
|
+
const options = appChat || client.channel === "webchat" ? ["sms", "whatsapp", "webchat"] : ["sms", "whatsapp"];
|
|
31
|
+
// Closes on a click or tap anywhere else, and on Escape (focus goes back to the button).
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (!open)
|
|
34
|
+
return;
|
|
35
|
+
const away = (e) => { if (!box.current?.contains(e.target))
|
|
36
|
+
setOpen(false); };
|
|
37
|
+
const key = (e) => { if (e.key === "Escape") {
|
|
38
|
+
e.stopPropagation();
|
|
39
|
+
setOpen(false);
|
|
40
|
+
button.current?.focus();
|
|
41
|
+
} };
|
|
42
|
+
document.addEventListener("pointerdown", away);
|
|
43
|
+
document.addEventListener("keydown", key, true);
|
|
44
|
+
return () => { document.removeEventListener("pointerdown", away); document.removeEventListener("keydown", key, true); };
|
|
45
|
+
}, [open]);
|
|
46
|
+
// Opening moves focus to the current channel's item.
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (open)
|
|
49
|
+
box.current?.querySelector('[role="menuitemradio"][aria-checked="true"]')?.focus();
|
|
50
|
+
}, [open]);
|
|
51
|
+
const switchTo = async (channel, confirmed = false) => {
|
|
52
|
+
setOpen(false);
|
|
53
|
+
if (channel === client.channel)
|
|
54
|
+
return;
|
|
55
|
+
setBusy(true);
|
|
56
|
+
setNote(null);
|
|
57
|
+
try {
|
|
58
|
+
const res = await api.switchChannel(client.id, channel, confirmed ? { confirm: true } : {});
|
|
59
|
+
setConfirm(null);
|
|
60
|
+
onSwitched({ ...client, channel: res.channel });
|
|
61
|
+
const msg = `${first} now gets messages by ${channelLabel(res.channel)}. Uplift doesn't tell ${first}, so let them know.`;
|
|
62
|
+
setNote({ text: msg });
|
|
63
|
+
announce(msg);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
const ue = asUpliftError(err);
|
|
67
|
+
const reason = ue.details?.reason;
|
|
68
|
+
if (ue.code === "conflict" && reason === "unread_messages") {
|
|
69
|
+
setConfirm({ channel, unread: Number(ue.details?.unread) || 0 });
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
setConfirm(null);
|
|
73
|
+
setNote({ text: reason === "phone_required" ? "Add a phone number first" : ue.message || "Couldn't change the channel. Try again.", err: true });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
setBusy(false);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const onMenuKey = (e) => {
|
|
81
|
+
if (e.key !== "ArrowDown" && e.key !== "ArrowUp" && e.key !== "Home" && e.key !== "End")
|
|
82
|
+
return;
|
|
83
|
+
e.preventDefault();
|
|
84
|
+
const items = Array.from(box.current?.querySelectorAll('[role="menuitemradio"]') ?? []);
|
|
85
|
+
const i = items.indexOf(document.activeElement);
|
|
86
|
+
const next = e.key === "Home" ? 0 : e.key === "End" ? items.length - 1 : (i + (e.key === "ArrowDown" ? 1 : -1) + items.length) % items.length;
|
|
87
|
+
items[next]?.focus();
|
|
88
|
+
};
|
|
89
|
+
const reach = client.channel === "webchat" && reachability ? REACH[reachability] : null;
|
|
90
|
+
return (_jsxs(_Fragment, { children: [_jsxs("span", { className: "u-chan-ctl", ref: box, children: [_jsxs("button", { ref: button, type: "button", className: "u-chan-pick", "aria-haspopup": "menu", "aria-expanded": open, "aria-controls": open ? menuId : undefined, "aria-label": `Channel: ${channelLabel(client.channel)}. Change channel`, disabled: busy, "aria-busy": busy, onClick: () => setOpen((o) => !o), children: [channelLabel(client.channel), _jsx(IconChevronDown, {})] }), reach && _jsx("span", { className: `u-tag u-${reach.kind} u-chan-reach`, title: reach.title, children: reach.text }), open && (_jsx("span", { className: "u-chan-menu", role: "menu", id: menuId, "aria-label": "Channel", onKeyDown: onMenuKey, children: options.map((c) => {
|
|
91
|
+
const needsPhone = c !== "webchat" && !client.phone;
|
|
92
|
+
return (_jsxs("button", { type: "button", role: "menuitemradio", "aria-checked": client.channel === c, "aria-disabled": needsPhone || undefined, tabIndex: -1, className: "u-chan-item", onClick: () => { if (!needsPhone)
|
|
93
|
+
void switchTo(c); }, children: [_jsx("span", { children: channelLabel(c) }), needsPhone && _jsx("small", { children: "Add a phone number first" })] }, c));
|
|
94
|
+
}) }))] }), confirm && (_jsxs(Sheet, { labelledBy: "u-chan-confirm-title", onClose: () => setConfirm(null), children: [_jsxs("h3", { id: "u-chan-confirm-title", children: ["Switch ", first, " to ", channelLabel(confirm.channel), "?"] }), _jsxs("p", { className: "u-lede", children: [client.name, " has ", confirm.unread, " unread message", confirm.unread === 1 ? "" : "s", " in the app. Switching to ", moveName(confirm.channel), " hides the chat input for them. Switch anyway?"] }), _jsxs("div", { className: "u-actions", children: [_jsx("button", { type: "button", className: "u-secondary", onClick: () => setConfirm(null), children: "Cancel" }), _jsx("span", { className: "u-sp" }), _jsx("button", { type: "button", className: "u-send", disabled: busy, "aria-busy": busy, onClick: () => { void switchTo(confirm.channel, true); }, children: busy ? "Switching…" : "Switch anyway" })] })] }))] }));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=ChannelControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelControl.js","sourceRoot":"","sources":["../src/ChannelControl.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Channel } from "@uplifted/sdk";
|
|
1
|
+
import type { PhoneChannel as Channel } from "@uplifted/sdk";
|
|
2
2
|
/**
|
|
3
3
|
* How a channel works, a port of native Uplift's ChannelDisclaimerModal: WhatsApp's 24-hour window
|
|
4
4
|
* with phone mockups of both sides in both states, and SMS's US/Canada and media limits.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelExplainer.d.ts","sourceRoot":"","sources":["../src/ChannelExplainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ChannelExplainer.d.ts","sourceRoot":"","sources":["../src/ChannelExplainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAoC7D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,+BA6C/F;AAED,oDAAoD;AACpD,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,+BAM9H"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ChatClient, type ChatError, type ChatMessage, type ChatOutboxStore, type ChatPass } from "@uplifted/sdk";
|
|
2
|
+
import { type ChatStrings } from "./chatStrings.js";
|
|
3
|
+
export interface ClientChatProps {
|
|
4
|
+
/** A ChatClient you made. Or pass `baseUrl` and `getPass` and the chat makes one. */
|
|
5
|
+
client?: ChatClient;
|
|
6
|
+
/** Uplift origin, e.g. https://platform.trainuplifted.com. */
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
/** Returns a chat pass from your server. Called again with `{ refresh: true }` when it needs a new one. */
|
|
9
|
+
getPass?: (opts: {
|
|
10
|
+
refresh: boolean;
|
|
11
|
+
}) => ChatPass | Promise<ChatPass>;
|
|
12
|
+
/** Where unsent messages wait. Default: IndexedDB, so they survive a reload. */
|
|
13
|
+
outbox?: ChatOutboxStore;
|
|
14
|
+
/** "full" shows the coach's name (and a back chevron when `onBack` is set); "none" when your app owns the bar. */
|
|
15
|
+
header?: "full" | "none";
|
|
16
|
+
onBack?: () => void;
|
|
17
|
+
/** Replace any phrase. */
|
|
18
|
+
strings?: Partial<ChatStrings>;
|
|
19
|
+
/** BCP 47 locale for dates. Default: the browser's. */
|
|
20
|
+
locale?: string;
|
|
21
|
+
/** Pad the composer for the home indicator. Turn off when your layout already does. Default true. */
|
|
22
|
+
safeArea?: boolean;
|
|
23
|
+
/** Coach messages the client has not seen. Use it for your tab badge or `navigator.setAppBadge`. */
|
|
24
|
+
onUnreadChange?: (count: number) => void;
|
|
25
|
+
/** Called for each new coach message that arrives while the chat is open. */
|
|
26
|
+
onNewMessage?: (message: ChatMessage) => void;
|
|
27
|
+
/** The pass was refused and a fresh one did not help: sign the client in again. */
|
|
28
|
+
onAuthError?: (error: ChatError) => void;
|
|
29
|
+
className?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A client's chat with their coach, for the host's client app. Fills the box the host gives it:
|
|
33
|
+
* header (optional), the thread (the only scroller), and the composer pinned at the bottom.
|
|
34
|
+
* Colours come from `--u-*` tokens and the font from the host (see docs/react.md).
|
|
35
|
+
*/
|
|
36
|
+
export declare function ClientChat(props: ClientChatProps): import("react").JSX.Element;
|
|
37
|
+
//# sourceMappingURL=ClientChat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientChat.d.ts","sourceRoot":"","sources":["../src/ClientChat.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAwC,KAAK,SAAS,EAAe,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrK,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMjE,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2GAA2G;IAC3G,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvE,gFAAgF;IAChF,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,kHAAkH;IAClH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qGAAqG;IACrG,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oGAAoG;IACpG,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,mFAAmF;IACnF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,+BAoEhD"}
|