@uplifted/react 0.22.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AddClientSheet.d.ts +39 -0
- package/dist/AddClientSheet.d.ts.map +1 -0
- package/dist/AddClientSheet.js +108 -0
- package/dist/AddClientSheet.js.map +1 -0
- package/dist/AiSettingsSheet.d.ts +20 -0
- package/dist/AiSettingsSheet.d.ts.map +1 -0
- package/dist/AiSettingsSheet.js +274 -0
- package/dist/AiSettingsSheet.js.map +1 -0
- package/dist/AssistantGrid.d.ts +30 -0
- package/dist/AssistantGrid.d.ts.map +1 -0
- package/dist/AssistantGrid.js +68 -0
- package/dist/AssistantGrid.js.map +1 -0
- package/dist/AttachmentPicker.d.ts +38 -0
- package/dist/AttachmentPicker.d.ts.map +1 -0
- package/dist/AttachmentPicker.js +173 -0
- package/dist/AttachmentPicker.js.map +1 -0
- package/dist/BulkGenerateSheet.d.ts +25 -0
- package/dist/BulkGenerateSheet.d.ts.map +1 -0
- package/dist/BulkGenerateSheet.js +65 -0
- package/dist/BulkGenerateSheet.js.map +1 -0
- package/dist/ChannelBadge.d.ts +16 -0
- package/dist/ChannelBadge.d.ts.map +1 -0
- package/dist/ChannelBadge.js +19 -0
- package/dist/ChannelBadge.js.map +1 -0
- package/dist/ChannelExplainer.d.ts +17 -0
- package/dist/ChannelExplainer.d.ts.map +1 -0
- package/dist/ChannelExplainer.js +25 -0
- package/dist/ChannelExplainer.js.map +1 -0
- package/dist/ClientList.d.ts +43 -0
- package/dist/ClientList.d.ts.map +1 -0
- package/dist/ClientList.js +76 -0
- package/dist/ClientList.js.map +1 -0
- package/dist/ClosedWindowBanner.d.ts +12 -0
- package/dist/ClosedWindowBanner.d.ts.map +1 -0
- package/dist/ClosedWindowBanner.js +15 -0
- package/dist/ClosedWindowBanner.js.map +1 -0
- package/dist/Composer.d.ts +49 -0
- package/dist/Composer.d.ts.map +1 -0
- package/dist/Composer.js +99 -0
- package/dist/Composer.js.map +1 -0
- package/dist/ComposerExtras.d.ts +15 -0
- package/dist/ComposerExtras.d.ts.map +1 -0
- package/dist/ComposerExtras.js +14 -0
- package/dist/ComposerExtras.js.map +1 -0
- package/dist/ConversationPane.d.ts +33 -0
- package/dist/ConversationPane.d.ts.map +1 -0
- package/dist/ConversationPane.js +126 -0
- package/dist/ConversationPane.js.map +1 -0
- package/dist/DeliveryReceipt.d.ts +7 -0
- package/dist/DeliveryReceipt.d.ts.map +1 -0
- package/dist/DeliveryReceipt.js +13 -0
- package/dist/DeliveryReceipt.js.map +1 -0
- package/dist/DraftGrid.d.ts +17 -0
- package/dist/DraftGrid.d.ts.map +1 -0
- package/dist/DraftGrid.js +43 -0
- package/dist/DraftGrid.js.map +1 -0
- package/dist/HostPreviewPane.d.ts +37 -0
- package/dist/HostPreviewPane.d.ts.map +1 -0
- package/dist/HostPreviewPane.js +106 -0
- package/dist/HostPreviewPane.js.map +1 -0
- package/dist/InlineDrafts.d.ts +14 -0
- package/dist/InlineDrafts.d.ts.map +1 -0
- package/dist/InlineDrafts.js +19 -0
- package/dist/InlineDrafts.js.map +1 -0
- package/dist/ItemActions.d.ts +23 -0
- package/dist/ItemActions.d.ts.map +1 -0
- package/dist/ItemActions.js +83 -0
- package/dist/ItemActions.js.map +1 -0
- package/dist/MediaAttachment.d.ts +7 -0
- package/dist/MediaAttachment.d.ts.map +1 -0
- package/dist/MediaAttachment.js +37 -0
- package/dist/MediaAttachment.js.map +1 -0
- package/dist/OfferSheet.d.ts +32 -0
- package/dist/OfferSheet.d.ts.map +1 -0
- package/dist/OfferSheet.js +84 -0
- package/dist/OfferSheet.js.map +1 -0
- package/dist/ProactiveOptionsSheet.d.ts +14 -0
- package/dist/ProactiveOptionsSheet.d.ts.map +1 -0
- package/dist/ProactiveOptionsSheet.js +58 -0
- package/dist/ProactiveOptionsSheet.js.map +1 -0
- package/dist/QuickSend.d.ts +15 -0
- package/dist/QuickSend.d.ts.map +1 -0
- package/dist/QuickSend.js +90 -0
- package/dist/QuickSend.js.map +1 -0
- package/dist/SegmentEditor.d.ts +25 -0
- package/dist/SegmentEditor.d.ts.map +1 -0
- package/dist/SegmentEditor.js +95 -0
- package/dist/SegmentEditor.js.map +1 -0
- package/dist/Sheet.d.ts +13 -0
- package/dist/Sheet.d.ts.map +1 -0
- package/dist/Sheet.js +64 -0
- package/dist/Sheet.js.map +1 -0
- package/dist/ThreadFeed.d.ts +27 -0
- package/dist/ThreadFeed.d.ts.map +1 -0
- package/dist/ThreadFeed.js +42 -0
- package/dist/ThreadFeed.js.map +1 -0
- package/dist/UpliftPanel.d.ts +40 -0
- package/dist/UpliftPanel.d.ts.map +1 -0
- package/dist/UpliftPanel.js +219 -0
- package/dist/UpliftPanel.js.map +1 -0
- package/dist/UpliftProvider.d.ts +15 -0
- package/dist/UpliftProvider.d.ts.map +1 -0
- package/dist/UpliftProvider.js +19 -0
- package/dist/UpliftProvider.js.map +1 -0
- package/dist/WaitingTemplateGhost.d.ts +12 -0
- package/dist/WaitingTemplateGhost.d.ts.map +1 -0
- package/dist/WaitingTemplateGhost.js +16 -0
- package/dist/WaitingTemplateGhost.js.map +1 -0
- package/dist/channels.d.ts +22 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +31 -0
- package/dist/channels.js.map +1 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +20 -0
- package/dist/errors.js.map +1 -0
- package/dist/host.d.ts +45 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +35 -0
- package/dist/host.js.map +1 -0
- package/dist/icons.d.ts +48 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +71 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/labels.d.ts +58 -0
- package/dist/labels.d.ts.map +1 -0
- package/dist/labels.js +86 -0
- package/dist/labels.js.map +1 -0
- package/dist/phone.d.ts +18 -0
- package/dist/phone.d.ts.map +1 -0
- package/dist/phone.js +27 -0
- package/dist/phone.js.map +1 -0
- package/dist/proactiveIcons.d.ts +6 -0
- package/dist/proactiveIcons.d.ts.map +1 -0
- package/dist/proactiveIcons.js +39 -0
- package/dist/proactiveIcons.js.map +1 -0
- package/dist/purposes.d.ts +19 -0
- package/dist/purposes.d.ts.map +1 -0
- package/dist/purposes.js +20 -0
- package/dist/purposes.js.map +1 -0
- package/dist/segments.d.ts +29 -0
- package/dist/segments.d.ts.map +1 -0
- package/dist/segments.js +75 -0
- package/dist/segments.js.map +1 -0
- package/dist/smsSegments.d.ts +28 -0
- package/dist/smsSegments.d.ts.map +1 -0
- package/dist/smsSegments.js +100 -0
- package/dist/smsSegments.js.map +1 -0
- package/dist/styles.d.ts +15 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +545 -0
- package/dist/styles.js.map +1 -0
- package/dist/time.d.ts +14 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +80 -0
- package/dist/time.js.map +1 -0
- package/dist/useAiSettings.d.ts +11 -0
- package/dist/useAiSettings.d.ts.map +1 -0
- package/dist/useAiSettings.js +21 -0
- package/dist/useAiSettings.js.map +1 -0
- package/dist/useBilling.d.ts +40 -0
- package/dist/useBilling.d.ts.map +1 -0
- package/dist/useBilling.js +155 -0
- package/dist/useBilling.js.map +1 -0
- package/dist/useBulkDrafts.d.ts +41 -0
- package/dist/useBulkDrafts.d.ts.map +1 -0
- package/dist/useBulkDrafts.js +112 -0
- package/dist/useBulkDrafts.js.map +1 -0
- package/dist/useClients.d.ts +16 -0
- package/dist/useClients.d.ts.map +1 -0
- package/dist/useClients.js +22 -0
- package/dist/useClients.js.map +1 -0
- package/dist/useDeliveryStatus.d.ts +7 -0
- package/dist/useDeliveryStatus.d.ts.map +1 -0
- package/dist/useDeliveryStatus.js +39 -0
- package/dist/useDeliveryStatus.js.map +1 -0
- package/dist/useDrafts.d.ts +19 -0
- package/dist/useDrafts.d.ts.map +1 -0
- package/dist/useDrafts.js +60 -0
- package/dist/useDrafts.js.map +1 -0
- package/dist/useInstructions.d.ts +9 -0
- package/dist/useInstructions.d.ts.map +1 -0
- package/dist/useInstructions.js +20 -0
- package/dist/useInstructions.js.map +1 -0
- package/dist/useLiveUpdates.d.ts +9 -0
- package/dist/useLiveUpdates.d.ts.map +1 -0
- package/dist/useLiveUpdates.js +48 -0
- package/dist/useLiveUpdates.js.map +1 -0
- package/dist/usePolling.d.ts +6 -0
- package/dist/usePolling.d.ts.map +1 -0
- package/dist/usePolling.js +31 -0
- package/dist/usePolling.js.map +1 -0
- package/dist/usePreviewDrafts.d.ts +15 -0
- package/dist/usePreviewDrafts.d.ts.map +1 -0
- package/dist/usePreviewDrafts.js +77 -0
- package/dist/usePreviewDrafts.js.map +1 -0
- package/dist/useProactiveOptions.d.ts +15 -0
- package/dist/useProactiveOptions.d.ts.map +1 -0
- package/dist/useProactiveOptions.js +39 -0
- package/dist/useProactiveOptions.js.map +1 -0
- package/dist/useSend.d.ts +16 -0
- package/dist/useSend.d.ts.map +1 -0
- package/dist/useSend.js +50 -0
- package/dist/useSend.js.map +1 -0
- package/dist/useStickToBottom.d.ts +12 -0
- package/dist/useStickToBottom.d.ts.map +1 -0
- package/dist/useStickToBottom.js +71 -0
- package/dist/useStickToBottom.js.map +1 -0
- package/dist/useThread.d.ts +26 -0
- package/dist/useThread.d.ts.map +1 -0
- package/dist/useThread.js +76 -0
- package/dist/useThread.js.map +1 -0
- package/dist/useWhatsAppWindow.d.ts +8 -0
- package/dist/useWhatsAppWindow.d.ts.map +1 -0
- package/dist/useWhatsAppWindow.js +22 -0
- package/dist/useWhatsAppWindow.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Channel, Client } from "@uplifted/sdk";
|
|
2
|
+
export interface AddClientSheetProps {
|
|
3
|
+
onClose: () => void;
|
|
4
|
+
onAdded: (client: Client) => void;
|
|
5
|
+
/** S1: the add hit the plan wall. `attempt` is the add as entered, which the panel completes once the coach has paid. */
|
|
6
|
+
onNeedsPlan: (ctx: {
|
|
7
|
+
reason: "client_limit" | "plan_inactive";
|
|
8
|
+
attempt: AddAttempt;
|
|
9
|
+
}) => void;
|
|
10
|
+
/** Channels whose rules this coach has already confirmed (D6/D9). */
|
|
11
|
+
acknowledged: ReadonlySet<Channel>;
|
|
12
|
+
onAcknowledge: (channel: Channel) => void;
|
|
13
|
+
/** Reopened after an upgrade whose automatic add failed: the entered values and why it failed. */
|
|
14
|
+
prefill?: (Partial<AddAttempt> & {
|
|
15
|
+
error?: string;
|
|
16
|
+
}) | undefined;
|
|
17
|
+
/** The host's clients, so the coach can say which one this is. Fills the name and links the ids.
|
|
18
|
+
* Passing it makes the host the owner of the client list: only one of these can be added. */
|
|
19
|
+
hostClients?: ReadonlyArray<{
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
}> | undefined;
|
|
23
|
+
/** The coach's Uplift clients, so a taken number can name whose it is. */
|
|
24
|
+
existing?: ReadonlyArray<{
|
|
25
|
+
name: string;
|
|
26
|
+
phone: string;
|
|
27
|
+
}> | undefined;
|
|
28
|
+
hostName: string;
|
|
29
|
+
}
|
|
30
|
+
/** An add the coach submitted: what the panel retries after an upgrade. */
|
|
31
|
+
export interface AddAttempt {
|
|
32
|
+
name: string;
|
|
33
|
+
phone: string;
|
|
34
|
+
channel: Channel;
|
|
35
|
+
hostClientId?: string;
|
|
36
|
+
}
|
|
37
|
+
/** D6: add a client to Uplift with a required phone and an explicitly confirmed channel. */
|
|
38
|
+
export declare function AddClientSheet({ onClose, onAdded, onNeedsPlan, acknowledged, onAcknowledge, prefill, hostClients, existing, hostName }: AddClientSheetProps): import("react").JSX.Element;
|
|
39
|
+
//# sourceMappingURL=AddClientSheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddClientSheet.d.ts","sourceRoot":"","sources":["../src/AddClientSheet.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAQrD,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,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE;AAEpG,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,+BAwH3J"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Sheet } from "./Sheet.js";
|
|
4
|
+
import { ChannelExplainer, ChannelInfoButton } from "./ChannelExplainer.js";
|
|
5
|
+
import { CHANNELS, channelInfo } from "./channels.js";
|
|
6
|
+
import { asUpliftError } from "./errors.js";
|
|
7
|
+
import { coerceToE164, PHONE_HINT, validatePhone } from "./phone.js";
|
|
8
|
+
import { useUplift } from "./UpliftProvider.js";
|
|
9
|
+
/** D6: add a client to Uplift with a required phone and an explicitly confirmed channel. */
|
|
10
|
+
export function AddClientSheet({ onClose, onAdded, onNeedsPlan, acknowledged, onAcknowledge, prefill, hostClients, existing, hostName }) {
|
|
11
|
+
const { client } = useUplift();
|
|
12
|
+
const [name, setName] = useState(prefill?.name ?? "");
|
|
13
|
+
const [hostClientId, setHostClientId] = useState(prefill?.hostClientId ?? "");
|
|
14
|
+
const [phone, setPhone] = useState(prefill?.phone ?? "");
|
|
15
|
+
const [channel, setChannel] = useState(prefill?.channel ?? "sms");
|
|
16
|
+
const [ticked, setTicked] = useState(false);
|
|
17
|
+
const [nameErr, setNameErr] = useState(null);
|
|
18
|
+
const [phoneErr, setPhoneErr] = useState(null);
|
|
19
|
+
const [formErr, setFormErr] = useState(prefill?.error ?? null);
|
|
20
|
+
const [saving, setSaving] = useState(false);
|
|
21
|
+
const [explain, setExplain] = useState(null);
|
|
22
|
+
const info = channelInfo(channel);
|
|
23
|
+
const needsTick = !acknowledged.has(channel);
|
|
24
|
+
const pickChannel = (c) => { setChannel(c); setTicked(false); setFormErr(null); };
|
|
25
|
+
const submit = async (e) => {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
if (saving)
|
|
28
|
+
return;
|
|
29
|
+
const n = name.trim();
|
|
30
|
+
const p = coerceToE164(phone);
|
|
31
|
+
setPhone(p);
|
|
32
|
+
let ok = true;
|
|
33
|
+
if (!n) {
|
|
34
|
+
setNameErr("Enter the client's name");
|
|
35
|
+
ok = false;
|
|
36
|
+
}
|
|
37
|
+
else
|
|
38
|
+
setNameErr(null);
|
|
39
|
+
const v = validatePhone(p);
|
|
40
|
+
if (!v.valid) {
|
|
41
|
+
setPhoneErr(v.message);
|
|
42
|
+
ok = false;
|
|
43
|
+
}
|
|
44
|
+
// Uplift texts from US carrier-registered numbers: SMS elsewhere fails silently, so stop it here.
|
|
45
|
+
else if (channel === "sms" && !p.startsWith("+1")) {
|
|
46
|
+
setPhoneErr("SMS only reaches US and Canada numbers. Choose WhatsApp for this client.");
|
|
47
|
+
ok = false;
|
|
48
|
+
}
|
|
49
|
+
else
|
|
50
|
+
setPhoneErr(null);
|
|
51
|
+
if (needsTick && !ticked) {
|
|
52
|
+
setFormErr(`Confirm the ${info.label} rules to continue.`);
|
|
53
|
+
ok = false;
|
|
54
|
+
}
|
|
55
|
+
if (hostClients && !hostClientId) {
|
|
56
|
+
setFormErr(`Choose which ${hostName} client this is.`);
|
|
57
|
+
ok = false;
|
|
58
|
+
}
|
|
59
|
+
if (!ok)
|
|
60
|
+
return;
|
|
61
|
+
setSaving(true);
|
|
62
|
+
setFormErr(null);
|
|
63
|
+
try {
|
|
64
|
+
const added = await client.addClient(hostClientId ? { name: n, phone: p, channel, hostClientId } : { name: n, phone: p, channel });
|
|
65
|
+
if (needsTick)
|
|
66
|
+
onAcknowledge(channel);
|
|
67
|
+
onAdded(added);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
const ue = asUpliftError(err);
|
|
71
|
+
switch (ue.code) {
|
|
72
|
+
case "subscription_required":
|
|
73
|
+
case "plan_inactive":
|
|
74
|
+
// The coach confirmed the channel rules to get here; remember that, then let the panel finish the add after upgrading.
|
|
75
|
+
if (needsTick)
|
|
76
|
+
onAcknowledge(channel);
|
|
77
|
+
onNeedsPlan({ reason: ue.code === "plan_inactive" ? "plan_inactive" : "client_limit", attempt: { name: n, phone: p, channel, ...(hostClientId ? { hostClientId } : {}) } });
|
|
78
|
+
break;
|
|
79
|
+
case "conflict": {
|
|
80
|
+
// A taken number (Uplift's own conflict) names the coach's client who has it, else another
|
|
81
|
+
// coach. Anything else (the host saying this client is already connected) is the host's words.
|
|
82
|
+
const field = ue.details?.field;
|
|
83
|
+
if ((field && field !== "phone") || (!field && /linked|connected/i.test(ue.message)))
|
|
84
|
+
setFormErr(ue.message || "This client is already connected.");
|
|
85
|
+
else {
|
|
86
|
+
const own = existing?.find((c) => c.phone === p);
|
|
87
|
+
setPhoneErr(own ? `${own.name} already has this number in Uplift.` : "Already works with another Uplift coach. Contact support.");
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
case "invalid_request":
|
|
92
|
+
setPhoneErr(ue.message || PHONE_HINT);
|
|
93
|
+
break;
|
|
94
|
+
default: setFormErr(ue.message || "Couldn't add this client. Try again.");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
setSaving(false);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
return (_jsxs(Sheet, { labelledBy: "u-add-title", onClose: onClose, children: [_jsxs("form", { onSubmit: (e) => { void submit(e); }, noValidate: true, children: [_jsx("p", { className: "u-eyebrow", children: "Add to Uplift" }), _jsx("h3", { id: "u-add-title", children: "Add a client" }), _jsx("p", { className: "u-lede", children: "Uplift messages this client from its own number by the channel you pick. Replies come back to this panel." }), hostClients && (_jsxs("div", { className: "u-field", children: [_jsxs("label", { htmlFor: "u-add-host", children: [hostName, " client"] }), _jsxs("select", { id: "u-add-host", value: hostClientId, onChange: (e) => { const id = e.target.value; setHostClientId(id); const hc = hostClients.find((h) => h.id === id); if (hc) {
|
|
102
|
+
setName(hc.name);
|
|
103
|
+
setNameErr(null);
|
|
104
|
+
} }, children: [!hostClientId && _jsx("option", { value: "", disabled: true, children: "Choose a client" }), hostClients.map((h) => _jsx("option", { value: h.id, children: h.name }, h.id))] }), _jsxs("span", { className: "u-hint", children: ["Linking a ", hostName, " client puts their workouts in this thread."] })] })), _jsxs("div", { className: "u-field", children: [_jsx("label", { htmlFor: "u-add-name", children: "Name" }), _jsx("input", { id: "u-add-name", value: name, onChange: (e) => setName(e.target.value), autoComplete: "off", "aria-invalid": !!nameErr, "aria-describedby": nameErr ? "u-add-name-err" : undefined }), nameErr && _jsx("span", { className: "u-err", id: "u-add-name-err", role: "alert", children: nameErr })] }), _jsxs("div", { className: "u-field", children: [_jsx("label", { htmlFor: "u-add-phone", children: "Phone" }), _jsx("input", { id: "u-add-phone", value: phone, onChange: (e) => setPhone(e.target.value), onBlur: () => setPhone(coerceToE164(phone)), inputMode: "tel", autoComplete: "off", placeholder: "+1 206 555 1234", "aria-invalid": !!phoneErr, "aria-describedby": phoneErr ? "u-add-phone-err" : "u-add-phone-hint" }), phoneErr ? _jsx("span", { className: "u-err", id: "u-add-phone-err", role: "alert", children: phoneErr }) : _jsx("span", { className: "u-hint", id: "u-add-phone-hint", children: "With country code. US 10-digit numbers auto-format." })] }), _jsxs("div", { className: "u-field", children: [_jsx("span", { id: "u-add-chan-label", children: "Channel" }), _jsx("div", { className: "u-chanpick", role: "radiogroup", "aria-labelledby": "u-add-chan-label", children: CHANNELS.map((c) => (_jsxs("button", { type: "button", role: "radio", "aria-checked": channel === c.key, onClick: () => pickChannel(c.key), children: [_jsx("b", { children: c.label }), _jsx("small", { children: c.sublabel })] }, c.key))) })] }), _jsxs("div", { className: "u-chanbox", "aria-live": "polite", children: [_jsxs("h4", { className: "u-cx-h4", children: [info.title, _jsx(ChannelInfoButton, { channel: channel, label: info.label, onOpen: setExplain })] }), info.rules.map((r) => _jsxs("p", { children: [_jsxs("b", { children: [r.title, "."] }), " ", r.text] }, r.title)), needsTick
|
|
105
|
+
? _jsxs("label", { className: "u-tick", children: [_jsx("input", { type: "checkbox", checked: ticked, onChange: (e) => setTicked(e.target.checked) }), " ", _jsx("span", { children: info.confirmLabel })] })
|
|
106
|
+
: _jsx("p", { className: "u-hint", children: "You've confirmed these rules before." })] }), formErr && _jsx("div", { className: "u-note u-note-err", role: "alert", children: formErr }), _jsxs("div", { className: "u-actions", children: [_jsx("button", { type: "button", className: "u-secondary", onClick: onClose, children: "Cancel" }), _jsx("span", { className: "u-sp" }), _jsx("button", { type: "submit", className: "u-send", disabled: saving, "aria-busy": saving, children: saving ? "Adding…" : "Add client" })] })] }), explain && _jsx(ChannelExplainer, { channel: explain, onClose: () => setExplain(null) })] }));
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=AddClientSheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddClientSheet.js","sourceRoot":"","sources":["../src/AddClientSheet.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { InstructionsState } from "./useInstructions.js";
|
|
2
|
+
import type { ProactiveOptionsState } from "./useProactiveOptions.js";
|
|
3
|
+
type Tab = "style" | "answers" | "phase" | "domain" | "proactive";
|
|
4
|
+
/**
|
|
5
|
+
* The coach's AI settings, a port of native Settings › AI Config: Style (philosophy, custom
|
|
6
|
+
* instructions, message examples with the voice scenarios), Canned Answers, Phase Goal, Domain and
|
|
7
|
+
* Proactive. Same stores and plan locks as native, so edits show in Uplift too. Generate from
|
|
8
|
+
* content and native-only settings (branding, widget, phone line) are not here.
|
|
9
|
+
*/
|
|
10
|
+
export declare function AiSettingsSheet({ instructions, proactive, hostName, onClose, onUpgrade, initialTab }: {
|
|
11
|
+
instructions: InstructionsState;
|
|
12
|
+
proactive: ProactiveOptionsState;
|
|
13
|
+
hostName: string;
|
|
14
|
+
onClose: () => void;
|
|
15
|
+
/** Partner hosts: Enterprise settings come with the paid plan (partner_enterprise); opens the offer. */
|
|
16
|
+
onUpgrade?: (() => void) | undefined;
|
|
17
|
+
initialTab?: Tab;
|
|
18
|
+
}): import("react").JSX.Element;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=AiSettingsSheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AiSettingsSheet.d.ts","sourceRoot":"","sources":["../src/AiSettingsSheet.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAKtE,KAAK,GAAG,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAsBlE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,UAAoB,EAAE,EAAE;IAC/G,YAAY,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,qBAAqB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IACzG,wGAAwG;IACxG,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,EAAE,GAAG,CAAC;CAClB,+BAqCA"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { IconCheck, IconPencil, IconSparkles, IconX } from "./icons.js";
|
|
4
|
+
import { ProactiveOptionsEditor } from "./ProactiveOptionsSheet.js";
|
|
5
|
+
import { Sheet } from "./Sheet.js";
|
|
6
|
+
import { useAiSettings } from "./useAiSettings.js";
|
|
7
|
+
import { useUplift } from "./UpliftProvider.js";
|
|
8
|
+
import { usePlanStatus } from "./useBilling.js";
|
|
9
|
+
import { shortDate } from "./time.js";
|
|
10
|
+
const TABS = [
|
|
11
|
+
{ id: "style", label: "Style" },
|
|
12
|
+
{ id: "answers", label: "Canned Answers" },
|
|
13
|
+
{ id: "phase", label: "Phase Goal" },
|
|
14
|
+
{ id: "domain", label: "Domain" },
|
|
15
|
+
{ id: "proactive", label: "Proactive" },
|
|
16
|
+
];
|
|
17
|
+
/** Native client/src/constants/instructionSurfaces.js, verbatim. */
|
|
18
|
+
const GLOBAL_SURFACE = { key: "all", label: "Every draft", hint: "Applied to every draft, everywhere. Put your universal rules here.", placeholder: "e.g. Use British spelling. Never give medical advice." };
|
|
19
|
+
const PER_SURFACES = [
|
|
20
|
+
{ key: "message", label: "Replies to a message", hint: "When you draft a reply to something a client sent you.", placeholder: "e.g. Answer their question first, then encourage." },
|
|
21
|
+
{ key: "update", label: "Responses to logged activity", hint: "When a client logs a workout, habit, or measurement and you draft a response.", placeholder: "e.g. Always call out the specific number they hit." },
|
|
22
|
+
{ key: "aggregate", label: "Batched activity", hint: "When several updates arrive at once and are drafted together.", placeholder: "e.g. Acknowledge the streak, not every single item." },
|
|
23
|
+
{ key: "bulk", label: "Bulk messages", hint: "When you bulk-generate a message to many clients at once.", placeholder: "e.g. Keep it personal even at scale — no obvious mail-merge." },
|
|
24
|
+
{ key: "proactive", label: "Proactive check-ins", hint: "Starter drafts for reaching out when a client has gone quiet.", placeholder: "e.g. Lead with curiosity, never guilt." },
|
|
25
|
+
];
|
|
26
|
+
const EXAMPLES_WARN_AT = 20;
|
|
27
|
+
const errText = (e) => e?.message || "Couldn't save";
|
|
28
|
+
/**
|
|
29
|
+
* The coach's AI settings, a port of native Settings › AI Config: Style (philosophy, custom
|
|
30
|
+
* instructions, message examples with the voice scenarios), Canned Answers, Phase Goal, Domain and
|
|
31
|
+
* Proactive. Same stores and plan locks as native, so edits show in Uplift too. Generate from
|
|
32
|
+
* content and native-only settings (branding, widget, phone line) are not here.
|
|
33
|
+
*/
|
|
34
|
+
export function AiSettingsSheet({ instructions, proactive, hostName, onClose, onUpgrade, initialTab = "style" }) {
|
|
35
|
+
const settings = useAiSettings();
|
|
36
|
+
const [tab, setTab] = useState(initialTab);
|
|
37
|
+
const d = settings.data;
|
|
38
|
+
return (_jsxs(Sheet, { labelledBy: "u-ai-title", onClose: onClose, children: [_jsxs("div", { className: "u-ai-head", children: [_jsxs("div", { children: [_jsx("p", { className: "u-eyebrow", children: "Settings" }), _jsx("h3", { id: "u-ai-title", children: "AI settings" })] }), _jsx("button", { type: "button", className: "u-iconbtn", "aria-label": "Close", onClick: onClose, children: _jsx(IconX, {}) })] }), _jsxs("div", { className: "u-ai-disclaimer", role: "note", children: [_jsx(IconSparkles, {}), _jsxs("p", { children: [_jsx("strong", { children: "These settings shape the AI, they don\u2019t control it." }), " AI is non-deterministic: the same settings can produce different drafts, and it won\u2019t follow every instruction perfectly every time. Use these to steer it toward your voice \u2014 then always read a draft before you send it. Nothing is ever sent automatically."] })] }), onUpgrade && _jsx(PlanRow, { onUpgrade: onUpgrade }), _jsx("div", { className: "u-ai-tabs", role: "tablist", "aria-label": "AI settings sections", children: TABS.map((t) => (_jsx("button", { type: "button", role: "tab", "aria-selected": tab === t.id, className: `u-ai-tab${tab === t.id ? " u-ai-tab-on" : ""}`, onClick: () => setTab(t.id), children: t.label }, t.id))) }), _jsx("div", { className: "u-ai-body", role: "tabpanel", children: tab === "proactive"
|
|
39
|
+
? _jsx(ProactiveOptionsEditor, { state: proactive })
|
|
40
|
+
: settings.error
|
|
41
|
+
? _jsxs("div", { className: "u-note u-note-err", role: "alert", children: ["Couldn't load your AI settings. ", settings.error.message, " ", _jsx("button", { type: "button", className: "u-linkbtn", onClick: settings.reload, children: "Retry" })] })
|
|
42
|
+
: !d
|
|
43
|
+
? _jsx("p", { className: "u-po-help", children: "Loading\u2026" })
|
|
44
|
+
: tab === "style"
|
|
45
|
+
? _jsx(StyleTab, { data: d, settings: settings, instructions: instructions })
|
|
46
|
+
: tab === "answers"
|
|
47
|
+
? (d.entitlements.cannedAnswers ? _jsx(CannedAnswersTab, { data: d, settings: settings }) : _jsx(Locked, { plan: "Enterprise", what: "Canned answers", onUpgrade: onUpgrade }))
|
|
48
|
+
: tab === "phase"
|
|
49
|
+
? (d.entitlements.phaseGoals ? _jsx(PhaseGoalTab, { data: d, settings: settings, hostName: hostName }) : _jsx(Locked, { plan: "Enterprise", what: "Phase goals", onUpgrade: onUpgrade }))
|
|
50
|
+
: _jsx(DomainTab, { data: d, settings: settings }) })] }));
|
|
51
|
+
}
|
|
52
|
+
/** Partner coaches: which plan they are on, its renewal or end date, and the Stripe portal. */
|
|
53
|
+
function PlanRow({ onUpgrade }) {
|
|
54
|
+
const { coach, opening, error, manage } = usePlanStatus();
|
|
55
|
+
if (!coach)
|
|
56
|
+
return null;
|
|
57
|
+
const paid = coach.subscription === "active";
|
|
58
|
+
const b = coach.billing;
|
|
59
|
+
const when = b?.cancelsAt ? `ends ${shortDate(new Date(b.cancelsAt))}` : b?.renewsAt ? `renews ${shortDate(new Date(b.renewsAt))}` : null;
|
|
60
|
+
return (_jsxs("div", { className: "u-ai-plan", role: "group", "aria-label": "Your plan", children: [_jsxs("span", { children: [_jsx("b", { children: paid ? "Paid plan" : coach.subscription === "inactive" ? "Plan inactive" : "Free plan" }), paid && when ? ` · ${when}` : ""] }), _jsx("span", { className: "u-sp" }), b && _jsx("button", { type: "button", className: "u-linkbtn", onClick: manage, disabled: opening, "aria-busy": opening, children: opening ? "Opening…" : "Manage billing" }), !paid && _jsx("button", { type: "button", className: "u-linkbtn", onClick: onUpgrade, children: coach.subscription === "inactive" ? "Reactivate" : "Upgrade" }), error && _jsx("span", { className: "u-ai-err", role: "alert", children: error })] }));
|
|
61
|
+
}
|
|
62
|
+
function Locked({ plan, what, onUpgrade }) {
|
|
63
|
+
if (onUpgrade) {
|
|
64
|
+
return (_jsxs("div", { className: "u-ai-locked", children: [_jsxs("strong", { children: [what, ": included with the paid plan"] }), _jsx("p", { children: "Upgrade to unlock this, along with unlimited clients." }), _jsx("button", { type: "button", className: "u-send", onClick: onUpgrade, children: "See the plan" })] }));
|
|
65
|
+
}
|
|
66
|
+
return (_jsxs("div", { className: "u-ai-locked", children: [_jsxs("strong", { children: [what, ": available on ", plan, " and above"] }), _jsx("p", { children: "Upgrade your plan to unlock this feature." })] }));
|
|
67
|
+
}
|
|
68
|
+
function SaveRow({ label, saving, status, disabled, onSave }) {
|
|
69
|
+
return (_jsxs("div", { className: "u-po-actions", children: [_jsx("button", { type: "button", className: "u-send", onClick: onSave, disabled: saving || disabled, "aria-busy": saving, children: saving ? "Saving…" : label }), status && _jsx("span", { className: status.ok ? "u-ai-ok" : "u-ia-ai-err", role: "status", children: status.msg })] }));
|
|
70
|
+
}
|
|
71
|
+
function useSaver() {
|
|
72
|
+
const [saving, setSaving] = useState(false);
|
|
73
|
+
const [status, setStatus] = useState(null);
|
|
74
|
+
const run = async (fn) => {
|
|
75
|
+
setSaving(true);
|
|
76
|
+
setStatus(null);
|
|
77
|
+
try {
|
|
78
|
+
await fn();
|
|
79
|
+
setStatus({ ok: true, msg: "Saved" });
|
|
80
|
+
setTimeout(() => setStatus(null), 2000);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
setStatus({ ok: false, msg: errText(e) });
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
setSaving(false);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
return { saving, status, run };
|
|
90
|
+
}
|
|
91
|
+
// ---------- Style ----------
|
|
92
|
+
function StyleTab({ data, settings, instructions }) {
|
|
93
|
+
return (_jsxs(_Fragment, { children: [_jsxs("section", { className: "u-ai-sec", children: [_jsx("h4", { children: "Coaching Philosophy" }), data.entitlements.philosophy ? _jsx(PhilosophyEditor, { data: data, settings: settings }) : _jsx(Locked, { plan: "Starter", what: "Coaching philosophy" })] }), _jsxs("section", { className: "u-ai-sec", children: [_jsx("h4", { children: "Custom Instructions" }), data.entitlements.instructions ? _jsx(InstructionsEditor, { data: data, settings: settings, instructions: instructions }) : _jsx(Locked, { plan: "Starter", what: "Custom instructions" })] }), _jsxs("section", { className: "u-ai-sec", children: [_jsx("h4", { children: "Message Examples" }), data.entitlements.messageExamples ? _jsx(ExamplesEditor, { data: data, settings: settings }) : _jsx(Locked, { plan: "Starter", what: "Message examples" })] })] }));
|
|
94
|
+
}
|
|
95
|
+
function PhilosophyEditor({ data, settings }) {
|
|
96
|
+
const { client } = useUplift();
|
|
97
|
+
const [text, setText] = useState(data.philosophy);
|
|
98
|
+
const s = useSaver();
|
|
99
|
+
return (_jsxs(_Fragment, { children: [_jsx("textarea", { id: "u-ai-philosophy", "aria-label": "Coaching philosophy", className: "u-ai-area", rows: 8, value: text, placeholder: "Describe how you coach \u2014 your voice, priorities, boundaries, and the feeling you want clients to have when you message them.", onChange: (e) => setText(e.target.value) }), _jsxs("span", { className: "u-ia-ai-count", children: [text.length.toLocaleString(), " chars"] }), _jsx(SaveRow, { label: "Save philosophy", saving: s.saving, status: s.status, disabled: text === data.philosophy, onSave: () => void s.run(async () => { await client.savePhilosophy(text); settings.patch((d) => ({ ...d, philosophy: text })); }) })] }));
|
|
100
|
+
}
|
|
101
|
+
function InstructionsEditor({ data, settings, instructions }) {
|
|
102
|
+
const [map, setMap] = useState(() => ({ ...data.instructions.values }));
|
|
103
|
+
const s = useSaver();
|
|
104
|
+
const max = data.instructions.maxLength;
|
|
105
|
+
const field = (f) => {
|
|
106
|
+
const value = map[f.key] ?? "";
|
|
107
|
+
const id = `u-ai-${f.key}`;
|
|
108
|
+
return (_jsxs("div", { className: "u-ai-field", children: [_jsxs("div", { className: "u-ai-labelrow", children: [_jsx("label", { htmlFor: id, children: f.label }), _jsxs("span", { className: "u-ia-ai-count", children: [value.length, "/", max] })] }), _jsx("p", { className: "u-ia-ai-hint", children: f.hint }), _jsx("textarea", { id: id, className: "u-ai-area", rows: f.key === "all" ? 3 : 2, value: value, maxLength: max, placeholder: f.placeholder, onChange: (e) => setMap((m) => ({ ...m, [f.key]: e.target.value })) })] }, f.key));
|
|
109
|
+
};
|
|
110
|
+
const save = () => s.run(async () => {
|
|
111
|
+
// Saved one surface at a time (merged server side); only what changed. Goes through the shared
|
|
112
|
+
// instructions state so Config AI on the cards sees the new rules at once.
|
|
113
|
+
for (const f of [GLOBAL_SURFACE, ...PER_SURFACES]) {
|
|
114
|
+
const next = (map[f.key] ?? "").trim();
|
|
115
|
+
if (next !== (data.instructions.values[f.key] ?? "").trim())
|
|
116
|
+
await instructions.save(f.key, next);
|
|
117
|
+
}
|
|
118
|
+
settings.patch((d) => ({ ...d, instructions: { ...d.instructions, values: { ...d.instructions.values, ...map } } }));
|
|
119
|
+
});
|
|
120
|
+
return (_jsxs(_Fragment, { children: [_jsx("p", { className: "u-ia-ai-hint", children: "Rules the AI applies to the drafts it writes. The top box applies to every draft; the others add to it for that specific kind. Keep them short and specific \u2014 they sit alongside your formatting rules and can\u2019t override message length or make a draft use a client\u2019s name." }), field(GLOBAL_SURFACE), _jsx("p", { className: "u-ai-sub", children: "Per-surface (added to the global rules above)" }), PER_SURFACES.map(field), _jsx(SaveRow, { label: "Save instructions", saving: s.saving, status: s.status, onSave: () => void save() })] }));
|
|
121
|
+
}
|
|
122
|
+
function ExamplesEditor({ data, settings }) {
|
|
123
|
+
const { client } = useUplift();
|
|
124
|
+
const items = data.messageExamples;
|
|
125
|
+
const [form, setForm] = useState(null);
|
|
126
|
+
const [confirmDel, setConfirmDel] = useState(null);
|
|
127
|
+
const [error, setError] = useState(null);
|
|
128
|
+
const scenarioLabel = (key) => data.voiceScenarios.find((v) => v.key === key)?.label ?? key;
|
|
129
|
+
const saveForm = async () => {
|
|
130
|
+
if (!form)
|
|
131
|
+
return;
|
|
132
|
+
setError(null);
|
|
133
|
+
const inputs = form.inputs.split("\n").map((l) => l.trim()).filter(Boolean);
|
|
134
|
+
try {
|
|
135
|
+
if (form.id) {
|
|
136
|
+
const u = await client.updateMessageExample(form.id, { inputs, response: form.response, source: "manual" });
|
|
137
|
+
settings.patch((d) => ({ ...d, messageExamples: d.messageExamples.map((e) => (e.id === form.id ? { ...e, ...u, source: "manual" } : e)) }));
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
const created = await client.createMessageExample({ inputs, response: form.response });
|
|
141
|
+
settings.patch((d) => ({ ...d, messageExamples: [created, ...d.messageExamples] }));
|
|
142
|
+
}
|
|
143
|
+
setForm(null);
|
|
144
|
+
}
|
|
145
|
+
catch (e) {
|
|
146
|
+
setError(errText(e));
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
const remove = async (id) => {
|
|
150
|
+
setError(null);
|
|
151
|
+
try {
|
|
152
|
+
await client.deleteMessageExample(id);
|
|
153
|
+
settings.patch((d) => ({ ...d, messageExamples: d.messageExamples.filter((e) => e.id !== id) }));
|
|
154
|
+
}
|
|
155
|
+
catch (e) {
|
|
156
|
+
setError(errText(e));
|
|
157
|
+
}
|
|
158
|
+
setConfirmDel(null);
|
|
159
|
+
};
|
|
160
|
+
const canSubmit = form && form.response.trim() && (form.scenario || form.inputs.split("\n").some((l) => l.trim()));
|
|
161
|
+
return (_jsxs(_Fragment, { children: [_jsx(VoiceGuide, { data: data, settings: settings }), _jsx("hr", { className: "u-ai-hr" }), items.length >= EXAMPLES_WARN_AT && _jsxs("div", { className: "u-ia-ai-note", children: ["You have ", items.length, " style examples. The AI gets the most value from a tight, high-quality set. Consider deleting older or less representative ones to keep drafts sharp."] }), error && _jsx("div", { className: "u-note u-note-err", role: "alert", children: error }), form
|
|
162
|
+
? (_jsxs("div", { className: "u-ai-form", children: [_jsx("label", { htmlFor: "u-ex-inputs", children: form.scenario ? `Client inputs (optional — this answers "${scenarioLabel(form.scenario)}")` : "Client inputs (one per line)" }), _jsx("textarea", { id: "u-ex-inputs", className: "u-ai-area", rows: 3, placeholder: "I had a bad day\nI skipped the gym\nfeeling defeated", value: form.inputs, onChange: (e) => setForm({ ...form, inputs: e.target.value }) }), _jsx("label", { htmlFor: "u-ex-response", children: "Your response" }), _jsx("textarea", { id: "u-ex-response", className: "u-ai-area", rows: 3, placeholder: "How you'd reply, in your voice.", value: form.response, onChange: (e) => setForm({ ...form, response: e.target.value }) }), _jsxs("div", { className: "u-po-actions", children: [_jsx("button", { type: "button", className: "u-send", disabled: !canSubmit, onClick: () => void saveForm(), children: form.id ? "Update" : "Create" }), _jsx("button", { type: "button", className: "u-gen", onClick: () => setForm(null), children: "Cancel" })] })] }))
|
|
163
|
+
: _jsx("button", { type: "button", className: "u-po-add", onClick: () => setForm({ id: null, inputs: "", response: "" }), children: "+ Add example" }), items.length === 0
|
|
164
|
+
? _jsx("p", { className: "u-ia-ai-hint", children: "No message examples yet." })
|
|
165
|
+
: (_jsx("ul", { className: "u-ai-list", children: items.map((e) => (_jsxs("li", { children: [_jsxs("div", { className: "u-ai-item-head", children: [_jsx("strong", { children: e.scenario ? scenarioLabel(e.scenario) : "Inputs" }), e.source === "auto" && _jsx("span", { className: "u-tag", children: "auto-captured" }), e.source === "generated" && _jsx("span", { className: "u-tag", children: "AI-drafted" }), _jsx("span", { className: "u-sp" }), _jsx("button", { type: "button", className: "u-po-iconbtn", "aria-label": "Edit", title: "Edit", onClick: () => setForm({ id: e.id, inputs: e.inputs.join("\n"), response: e.response, ...(e.scenario ? { scenario: e.scenario } : {}) }), children: _jsx(IconPencil, {}) }), confirmDel === e.id
|
|
166
|
+
? _jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "u-linkbtn", onClick: () => void remove(e.id), children: "Delete" }), _jsx("button", { type: "button", className: "u-linkbtn", onClick: () => setConfirmDel(null), children: "Keep" })] })
|
|
167
|
+
: _jsx("button", { type: "button", className: "u-po-iconbtn u-po-remove", "aria-label": "Delete", title: "Delete", onClick: () => setConfirmDel(e.id), children: _jsx(IconX, {}) })] }), e.inputs.length > 0 && _jsx("div", { className: "u-ai-tags", children: e.inputs.map((i, k) => _jsx("span", { className: "u-tag", children: i }, k)) }), e.source === "auto" && e.generated
|
|
168
|
+
? _jsxs(_Fragment, { children: [_jsx("p", { className: "u-ai-k", children: "AI generated" }), _jsx("p", { className: "u-ai-v", children: e.generated }), _jsx("p", { className: "u-ai-k", children: "Trainer sent instead" }), _jsx("p", { className: "u-ai-v", children: e.response })] })
|
|
169
|
+
: _jsxs(_Fragment, { children: [_jsx("p", { className: "u-ai-k", children: "You reply" }), _jsx("p", { className: "u-ai-v", children: e.response })] })] }, e.id))) }))] }));
|
|
170
|
+
}
|
|
171
|
+
/** Native VoiceScenarioGuide: how the coach replies in each of the twelve common moments. */
|
|
172
|
+
function VoiceGuide({ data, settings }) {
|
|
173
|
+
const { client } = useUplift();
|
|
174
|
+
const [open, setOpen] = useState(null);
|
|
175
|
+
const [text, setText] = useState("");
|
|
176
|
+
const [saving, setSaving] = useState(false);
|
|
177
|
+
const [error, setError] = useState(null);
|
|
178
|
+
// Newest example per scenario wins (the list is newest first).
|
|
179
|
+
const byScenario = new Map();
|
|
180
|
+
for (const e of data.messageExamples)
|
|
181
|
+
if (e.scenario && !byScenario.has(e.scenario))
|
|
182
|
+
byScenario.set(e.scenario, e);
|
|
183
|
+
const filled = data.voiceScenarios.filter((v) => byScenario.get(v.key)?.response).length;
|
|
184
|
+
const drafted = data.voiceScenarios.filter((v) => byScenario.get(v.key)?.source === "generated").length;
|
|
185
|
+
const save = async (key) => {
|
|
186
|
+
setSaving(true);
|
|
187
|
+
setError(null);
|
|
188
|
+
try {
|
|
189
|
+
const cur = byScenario.get(key);
|
|
190
|
+
if (cur) {
|
|
191
|
+
const u = await client.updateMessageExample(cur.id, { response: text, source: "manual" });
|
|
192
|
+
settings.patch((d) => ({ ...d, messageExamples: d.messageExamples.map((e) => (e.id === cur.id ? { ...e, ...u, source: "manual" } : e)) }));
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
const created = await client.createMessageExample({ inputs: [], response: text, scenario: key });
|
|
196
|
+
settings.patch((d) => ({ ...d, messageExamples: [created, ...d.messageExamples] }));
|
|
197
|
+
}
|
|
198
|
+
setOpen(null);
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
setError(errText(e));
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
setSaving(false);
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
return (_jsxs("div", { className: "u-ai-voice", children: [_jsx("strong", { children: "Your voice, situation by situation" }), _jsx("p", { className: "u-ia-ai-hint", children: "How you'd reply in each of these moments. Edit any of them to match how you actually text \u2014 the closer these are to your real words, the closer the drafts get." }), _jsxs("p", { className: "u-ia-ai-count", children: [filled, " of ", data.voiceScenarios.length, " filled", drafted ? ` · ${drafted} AI-drafted` : ""] }), error && _jsx("div", { className: "u-note u-note-err", role: "alert", children: error }), _jsx("ul", { className: "u-ai-list", children: data.voiceScenarios.map((v) => {
|
|
208
|
+
const ex = byScenario.get(v.key);
|
|
209
|
+
const isOpen = open === v.key;
|
|
210
|
+
return (_jsxs("li", { children: [_jsxs("div", { className: "u-ai-item-head", children: [ex?.response && _jsx("span", { className: "u-ai-check", "aria-label": "Filled", children: _jsx(IconCheck, {}) }), _jsx("strong", { children: v.label }), ex?.source === "generated" && _jsx("span", { className: "u-tag", children: "AI-drafted" }), _jsx("span", { className: "u-sp" }), !isOpen && _jsx("button", { type: "button", className: "u-linkbtn", onClick: () => { setOpen(v.key); setText(ex?.response ?? ""); }, children: !ex ? "Write it" : ex.source === "generated" ? "Make it yours" : "Edit" })] }), isOpen
|
|
211
|
+
? (_jsxs(_Fragment, { children: [_jsx("p", { className: "u-ia-ai-hint", children: v.hint }), _jsx("textarea", { "aria-label": v.label, className: "u-ai-area", rows: 3, placeholder: "Type it the way you'd actually send it\u2026", value: text, onChange: (e) => setText(e.target.value) }), _jsxs("div", { className: "u-po-actions", children: [_jsx("button", { type: "button", className: "u-send", disabled: saving || !text.trim(), onClick: () => void save(v.key), children: saving ? "Saving…" : "Save" }), _jsx("button", { type: "button", className: "u-gen", onClick: () => setOpen(null), children: "Cancel" })] })] }))
|
|
212
|
+
: _jsx("p", { className: ex?.response ? "u-ai-v" : "u-ia-ai-hint", children: ex?.response || v.hint })] }, v.key));
|
|
213
|
+
}) })] }));
|
|
214
|
+
}
|
|
215
|
+
// ---------- Canned Answers ----------
|
|
216
|
+
function CannedAnswersTab({ data, settings }) {
|
|
217
|
+
const { client } = useUplift();
|
|
218
|
+
const [form, setForm] = useState(null);
|
|
219
|
+
const [confirmDel, setConfirmDel] = useState(null);
|
|
220
|
+
const [error, setError] = useState(null);
|
|
221
|
+
const save = async () => {
|
|
222
|
+
if (!form)
|
|
223
|
+
return;
|
|
224
|
+
setError(null);
|
|
225
|
+
try {
|
|
226
|
+
if (form.id) {
|
|
227
|
+
const u = await client.updateCannedAnswer(form.id, { questionDescription: form.q.trim(), cannedResponse: form.a.trim() });
|
|
228
|
+
settings.patch((d) => ({ ...d, cannedAnswers: d.cannedAnswers.map((x) => (x.id === form.id ? { ...x, ...u } : x)) }));
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
const created = await client.createCannedAnswer({ questionDescription: form.q.trim(), cannedResponse: form.a.trim() });
|
|
232
|
+
settings.patch((d) => ({ ...d, cannedAnswers: [created, ...d.cannedAnswers] }));
|
|
233
|
+
}
|
|
234
|
+
setForm(null);
|
|
235
|
+
}
|
|
236
|
+
catch (e) {
|
|
237
|
+
setError(errText(e));
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
const remove = async (id) => {
|
|
241
|
+
setError(null);
|
|
242
|
+
try {
|
|
243
|
+
await client.deleteCannedAnswer(id);
|
|
244
|
+
settings.patch((d) => ({ ...d, cannedAnswers: d.cannedAnswers.filter((x) => x.id !== id) }));
|
|
245
|
+
}
|
|
246
|
+
catch (e) {
|
|
247
|
+
setError(errText(e));
|
|
248
|
+
}
|
|
249
|
+
setConfirmDel(null);
|
|
250
|
+
};
|
|
251
|
+
return (_jsxs("section", { className: "u-ai-sec", children: [_jsx("h4", { children: "Canned Answers" }), error && _jsx("div", { className: "u-note u-note-err", role: "alert", children: error }), form
|
|
252
|
+
? (_jsxs("div", { className: "u-ai-form", children: [_jsx("label", { htmlFor: "u-ca-q", children: "When the client\u2026" }), _jsx("textarea", { id: "u-ca-q", className: "u-ai-area", rows: 2, placeholder: "Describes the situation / question from the client.", value: form.q, onChange: (e) => setForm({ ...form, q: e.target.value }) }), _jsx("label", { htmlFor: "u-ca-a", children: "Respond with\u2026" }), _jsx("textarea", { id: "u-ca-a", className: "u-ai-area", rows: 3, placeholder: "Your canned reply.", value: form.a, onChange: (e) => setForm({ ...form, a: e.target.value }) }), _jsxs("div", { className: "u-po-actions", children: [_jsx("button", { type: "button", className: "u-send", disabled: !form.q.trim() || !form.a.trim(), onClick: () => void save(), children: form.id ? "Update" : "Create" }), _jsx("button", { type: "button", className: "u-gen", onClick: () => setForm(null), children: "Cancel" })] })] }))
|
|
253
|
+
: _jsx("button", { type: "button", className: "u-po-add", onClick: () => setForm({ id: null, q: "", a: "" }), children: "+ Add canned answer" }), data.cannedAnswers.length === 0
|
|
254
|
+
? _jsx("p", { className: "u-ia-ai-hint", children: "No canned answers yet." })
|
|
255
|
+
: (_jsx("ul", { className: "u-ai-list", children: data.cannedAnswers.map((c) => (_jsxs("li", { children: [_jsxs("div", { className: "u-ai-item-head", children: [_jsx("span", { className: "u-sp" }), _jsx("button", { type: "button", className: "u-po-iconbtn", "aria-label": "Edit", title: "Edit", onClick: () => setForm({ id: c.id, q: c.questionDescription, a: c.cannedResponse }), children: _jsx(IconPencil, {}) }), confirmDel === c.id
|
|
256
|
+
? _jsxs(_Fragment, { children: [_jsx("button", { type: "button", className: "u-linkbtn", onClick: () => void remove(c.id), children: "Delete" }), _jsx("button", { type: "button", className: "u-linkbtn", onClick: () => setConfirmDel(null), children: "Keep" })] })
|
|
257
|
+
: _jsx("button", { type: "button", className: "u-po-iconbtn u-po-remove", "aria-label": "Delete", title: "Delete", onClick: () => setConfirmDel(c.id), children: _jsx(IconX, {}) })] }), _jsx("p", { className: "u-ai-k", children: "When\u2026" }), _jsx("p", { className: "u-ai-v", children: c.questionDescription }), _jsx("p", { className: "u-ai-k", children: "Respond with\u2026" }), _jsx("p", { className: "u-ai-v", children: c.cannedResponse })] }, c.id))) }))] }));
|
|
258
|
+
}
|
|
259
|
+
// ---------- Phase Goal ----------
|
|
260
|
+
function PhaseGoalTab({ data, settings, hostName }) {
|
|
261
|
+
const { client } = useUplift();
|
|
262
|
+
const [text, setText] = useState(data.phaseGoal.content);
|
|
263
|
+
const s = useSaver();
|
|
264
|
+
return (_jsxs("section", { className: "u-ai-sec", children: [_jsx("h4", { children: "Phase Goal" }), _jsxs("p", { className: "u-ia-ai-hint", children: ["Give the AI a strategic mandate for this phase. The mandate is a north star \u2014 the AI applies it with judgment and never overrides empathy or context. Your ", hostName, " clients are all in the Clients phase."] }), _jsx("label", { htmlFor: "u-ai-phase", className: "u-ai-labelrow", children: "Clients" }), _jsx("p", { className: "u-ia-ai-hint", children: "Active members and challenge participants. Goal: retention through genuine connection." }), _jsx("textarea", { id: "u-ai-phase", className: "u-ai-area", rows: 8, value: text, placeholder: "Enter a strategic mandate for Clients.", onChange: (e) => setText(e.target.value) }), _jsxs("div", { className: "u-po-actions", children: [_jsx("button", { type: "button", className: "u-send", disabled: s.saving || text === data.phaseGoal.content, onClick: () => void s.run(async () => { await client.savePhaseGoal(text); settings.patch((d) => ({ ...d, phaseGoal: { ...d.phaseGoal, content: text.trim(), isDefault: false } })); }), children: s.saving ? "Saving…" : "Save" }), text !== data.phaseGoal.default && _jsx("button", { type: "button", className: "u-gen", onClick: () => setText(data.phaseGoal.default), children: "Use the built-in goal" }), s.status && _jsx("span", { className: s.status.ok ? "u-ai-ok" : "u-ia-ai-err", role: "status", children: s.status.msg })] })] }));
|
|
265
|
+
}
|
|
266
|
+
// ---------- Domain ----------
|
|
267
|
+
function DomainTab({ data, settings }) {
|
|
268
|
+
const { client } = useUplift();
|
|
269
|
+
const [v, setV] = useState(data.domain);
|
|
270
|
+
const s = useSaver();
|
|
271
|
+
const input = (key, label, placeholder, max) => (_jsxs("div", { className: "u-ai-field", children: [_jsx("label", { htmlFor: `u-dom-${key}`, className: "u-ai-labelrow", children: label }), _jsx("input", { id: `u-dom-${key}`, className: "u-ai-input", value: v[key], maxLength: max, placeholder: placeholder, onChange: (e) => setV({ ...v, [key]: e.target.value }) })] }));
|
|
272
|
+
return (_jsxs(_Fragment, { children: [_jsxs("section", { className: "u-ai-sec", children: [_jsx("h4", { children: "Identity" }), _jsx("p", { className: "u-ia-ai-hint", children: "How should the AI refer to you and your clients?" }), input("role", "Your role", "e.g. personal trainer, physical therapist", 80), input("clientNoun", "Client noun (singular)", "client / patient / member", 40), input("clientNounPlural", "Client noun (plural)", "clients / patients / members", 40), input("sessionNoun", "Session noun", "session / appointment / class", 40)] }), _jsxs("section", { className: "u-ai-sec", children: [_jsx("h4", { children: "Domain Context" }), _jsx("p", { className: "u-ia-ai-hint", children: "Describe your practice. Uplift uses this when it drafts the first message to a client." }), _jsx("textarea", { id: "u-dom-context", "aria-label": "Domain context", className: "u-ai-area", rows: 5, maxLength: 4000, value: v.domainContext, placeholder: "e.g. I run a post-surgical rehab PT practice. Patients are recovering from injuries and need accountability around their home exercise programs...", onChange: (e) => setV({ ...v, domainContext: e.target.value }) })] }), _jsx(SaveRow, { label: "Save Domain Settings", saving: s.saving, status: s.status, onSave: () => void s.run(async () => { await client.saveDomain(v); settings.patch((d) => ({ ...d, domain: { ...v } })); }) })] }));
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=AiSettingsSheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AiSettingsSheet.js","sourceRoot":"","sources":["../src/AiSettingsSheet.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Tone } from "@uplifted/sdk";
|
|
2
|
+
import type { DraftsState } from "./useDrafts.js";
|
|
3
|
+
export declare const TONES: ReadonlyArray<{
|
|
4
|
+
key: Tone;
|
|
5
|
+
label: string;
|
|
6
|
+
}>;
|
|
7
|
+
export interface AssistantGridProps {
|
|
8
|
+
drafts: DraftsState;
|
|
9
|
+
/** "Reply drafts", "Check In options", "Preview drafts"… */
|
|
10
|
+
label: string;
|
|
11
|
+
selected: Tone | null;
|
|
12
|
+
onPick: (tone: Tone, text: string) => void;
|
|
13
|
+
onRegenerate: () => void;
|
|
14
|
+
regenDisabled?: boolean | undefined;
|
|
15
|
+
open: boolean;
|
|
16
|
+
onToggle: () => void;
|
|
17
|
+
clientFirstName: string;
|
|
18
|
+
/** Small line under the grid (the preview pane's "from activity only" note). */
|
|
19
|
+
footnote?: string | undefined;
|
|
20
|
+
/** Opens the plan offer when drafting is refused because the coach's plan lapsed (plan_inactive). */
|
|
21
|
+
onNeedsPlan?: (() => void) | undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The draft grid above the editor, a port of native Uplift's ComposerAssistant: a sparkle header
|
|
25
|
+
* that collapses the 2×2 grid, a regenerate control, shimmer cells with cycling copy while the
|
|
26
|
+
* engine writes, and cells labelled with a pencil because clicking one edits, never sends.
|
|
27
|
+
* Cells keep radio semantics so the picked tone is announced.
|
|
28
|
+
*/
|
|
29
|
+
export declare function AssistantGrid({ drafts, label, selected, onPick, onRegenerate, regenDisabled, open, onToggle, clientFirstName, footnote, onNeedsPlan }: AssistantGridProps): import("react").JSX.Element | null;
|
|
30
|
+
//# sourceMappingURL=AssistantGrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssistantGrid.d.ts","sourceRoot":"","sources":["../src/AssistantGrid.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,eAAO,MAAM,KAAK,EAAE,aAAa,CAAC;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK7D,CAAC;AAOF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,qGAAqG;IACrG,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CACxC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,kBAAkB,sCA+FzK"}
|