@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.
Files changed (221) hide show
  1. package/dist/AddClientSheet.d.ts +39 -0
  2. package/dist/AddClientSheet.d.ts.map +1 -0
  3. package/dist/AddClientSheet.js +108 -0
  4. package/dist/AddClientSheet.js.map +1 -0
  5. package/dist/AiSettingsSheet.d.ts +20 -0
  6. package/dist/AiSettingsSheet.d.ts.map +1 -0
  7. package/dist/AiSettingsSheet.js +274 -0
  8. package/dist/AiSettingsSheet.js.map +1 -0
  9. package/dist/AssistantGrid.d.ts +30 -0
  10. package/dist/AssistantGrid.d.ts.map +1 -0
  11. package/dist/AssistantGrid.js +68 -0
  12. package/dist/AssistantGrid.js.map +1 -0
  13. package/dist/AttachmentPicker.d.ts +38 -0
  14. package/dist/AttachmentPicker.d.ts.map +1 -0
  15. package/dist/AttachmentPicker.js +173 -0
  16. package/dist/AttachmentPicker.js.map +1 -0
  17. package/dist/BulkGenerateSheet.d.ts +25 -0
  18. package/dist/BulkGenerateSheet.d.ts.map +1 -0
  19. package/dist/BulkGenerateSheet.js +65 -0
  20. package/dist/BulkGenerateSheet.js.map +1 -0
  21. package/dist/ChannelBadge.d.ts +16 -0
  22. package/dist/ChannelBadge.d.ts.map +1 -0
  23. package/dist/ChannelBadge.js +19 -0
  24. package/dist/ChannelBadge.js.map +1 -0
  25. package/dist/ChannelExplainer.d.ts +17 -0
  26. package/dist/ChannelExplainer.d.ts.map +1 -0
  27. package/dist/ChannelExplainer.js +25 -0
  28. package/dist/ChannelExplainer.js.map +1 -0
  29. package/dist/ClientList.d.ts +43 -0
  30. package/dist/ClientList.d.ts.map +1 -0
  31. package/dist/ClientList.js +76 -0
  32. package/dist/ClientList.js.map +1 -0
  33. package/dist/ClosedWindowBanner.d.ts +12 -0
  34. package/dist/ClosedWindowBanner.d.ts.map +1 -0
  35. package/dist/ClosedWindowBanner.js +15 -0
  36. package/dist/ClosedWindowBanner.js.map +1 -0
  37. package/dist/Composer.d.ts +49 -0
  38. package/dist/Composer.d.ts.map +1 -0
  39. package/dist/Composer.js +99 -0
  40. package/dist/Composer.js.map +1 -0
  41. package/dist/ComposerExtras.d.ts +15 -0
  42. package/dist/ComposerExtras.d.ts.map +1 -0
  43. package/dist/ComposerExtras.js +14 -0
  44. package/dist/ComposerExtras.js.map +1 -0
  45. package/dist/ConversationPane.d.ts +33 -0
  46. package/dist/ConversationPane.d.ts.map +1 -0
  47. package/dist/ConversationPane.js +126 -0
  48. package/dist/ConversationPane.js.map +1 -0
  49. package/dist/DeliveryReceipt.d.ts +7 -0
  50. package/dist/DeliveryReceipt.d.ts.map +1 -0
  51. package/dist/DeliveryReceipt.js +13 -0
  52. package/dist/DeliveryReceipt.js.map +1 -0
  53. package/dist/DraftGrid.d.ts +17 -0
  54. package/dist/DraftGrid.d.ts.map +1 -0
  55. package/dist/DraftGrid.js +43 -0
  56. package/dist/DraftGrid.js.map +1 -0
  57. package/dist/HostPreviewPane.d.ts +37 -0
  58. package/dist/HostPreviewPane.d.ts.map +1 -0
  59. package/dist/HostPreviewPane.js +106 -0
  60. package/dist/HostPreviewPane.js.map +1 -0
  61. package/dist/InlineDrafts.d.ts +14 -0
  62. package/dist/InlineDrafts.d.ts.map +1 -0
  63. package/dist/InlineDrafts.js +19 -0
  64. package/dist/InlineDrafts.js.map +1 -0
  65. package/dist/ItemActions.d.ts +23 -0
  66. package/dist/ItemActions.d.ts.map +1 -0
  67. package/dist/ItemActions.js +83 -0
  68. package/dist/ItemActions.js.map +1 -0
  69. package/dist/MediaAttachment.d.ts +7 -0
  70. package/dist/MediaAttachment.d.ts.map +1 -0
  71. package/dist/MediaAttachment.js +37 -0
  72. package/dist/MediaAttachment.js.map +1 -0
  73. package/dist/OfferSheet.d.ts +32 -0
  74. package/dist/OfferSheet.d.ts.map +1 -0
  75. package/dist/OfferSheet.js +84 -0
  76. package/dist/OfferSheet.js.map +1 -0
  77. package/dist/ProactiveOptionsSheet.d.ts +14 -0
  78. package/dist/ProactiveOptionsSheet.d.ts.map +1 -0
  79. package/dist/ProactiveOptionsSheet.js +58 -0
  80. package/dist/ProactiveOptionsSheet.js.map +1 -0
  81. package/dist/QuickSend.d.ts +15 -0
  82. package/dist/QuickSend.d.ts.map +1 -0
  83. package/dist/QuickSend.js +90 -0
  84. package/dist/QuickSend.js.map +1 -0
  85. package/dist/SegmentEditor.d.ts +25 -0
  86. package/dist/SegmentEditor.d.ts.map +1 -0
  87. package/dist/SegmentEditor.js +95 -0
  88. package/dist/SegmentEditor.js.map +1 -0
  89. package/dist/Sheet.d.ts +13 -0
  90. package/dist/Sheet.d.ts.map +1 -0
  91. package/dist/Sheet.js +64 -0
  92. package/dist/Sheet.js.map +1 -0
  93. package/dist/ThreadFeed.d.ts +27 -0
  94. package/dist/ThreadFeed.d.ts.map +1 -0
  95. package/dist/ThreadFeed.js +42 -0
  96. package/dist/ThreadFeed.js.map +1 -0
  97. package/dist/UpliftPanel.d.ts +40 -0
  98. package/dist/UpliftPanel.d.ts.map +1 -0
  99. package/dist/UpliftPanel.js +219 -0
  100. package/dist/UpliftPanel.js.map +1 -0
  101. package/dist/UpliftProvider.d.ts +15 -0
  102. package/dist/UpliftProvider.d.ts.map +1 -0
  103. package/dist/UpliftProvider.js +19 -0
  104. package/dist/UpliftProvider.js.map +1 -0
  105. package/dist/WaitingTemplateGhost.d.ts +12 -0
  106. package/dist/WaitingTemplateGhost.d.ts.map +1 -0
  107. package/dist/WaitingTemplateGhost.js +16 -0
  108. package/dist/WaitingTemplateGhost.js.map +1 -0
  109. package/dist/channels.d.ts +22 -0
  110. package/dist/channels.d.ts.map +1 -0
  111. package/dist/channels.js +31 -0
  112. package/dist/channels.js.map +1 -0
  113. package/dist/errors.d.ts +6 -0
  114. package/dist/errors.d.ts.map +1 -0
  115. package/dist/errors.js +20 -0
  116. package/dist/errors.js.map +1 -0
  117. package/dist/host.d.ts +45 -0
  118. package/dist/host.d.ts.map +1 -0
  119. package/dist/host.js +35 -0
  120. package/dist/host.js.map +1 -0
  121. package/dist/icons.d.ts +48 -0
  122. package/dist/icons.d.ts.map +1 -0
  123. package/dist/icons.js +71 -0
  124. package/dist/icons.js.map +1 -0
  125. package/dist/index.d.ts +58 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +36 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/labels.d.ts +58 -0
  130. package/dist/labels.d.ts.map +1 -0
  131. package/dist/labels.js +86 -0
  132. package/dist/labels.js.map +1 -0
  133. package/dist/phone.d.ts +18 -0
  134. package/dist/phone.d.ts.map +1 -0
  135. package/dist/phone.js +27 -0
  136. package/dist/phone.js.map +1 -0
  137. package/dist/proactiveIcons.d.ts +6 -0
  138. package/dist/proactiveIcons.d.ts.map +1 -0
  139. package/dist/proactiveIcons.js +39 -0
  140. package/dist/proactiveIcons.js.map +1 -0
  141. package/dist/purposes.d.ts +19 -0
  142. package/dist/purposes.d.ts.map +1 -0
  143. package/dist/purposes.js +20 -0
  144. package/dist/purposes.js.map +1 -0
  145. package/dist/segments.d.ts +29 -0
  146. package/dist/segments.d.ts.map +1 -0
  147. package/dist/segments.js +75 -0
  148. package/dist/segments.js.map +1 -0
  149. package/dist/smsSegments.d.ts +28 -0
  150. package/dist/smsSegments.d.ts.map +1 -0
  151. package/dist/smsSegments.js +100 -0
  152. package/dist/smsSegments.js.map +1 -0
  153. package/dist/styles.d.ts +15 -0
  154. package/dist/styles.d.ts.map +1 -0
  155. package/dist/styles.js +545 -0
  156. package/dist/styles.js.map +1 -0
  157. package/dist/time.d.ts +14 -0
  158. package/dist/time.d.ts.map +1 -0
  159. package/dist/time.js +80 -0
  160. package/dist/time.js.map +1 -0
  161. package/dist/useAiSettings.d.ts +11 -0
  162. package/dist/useAiSettings.d.ts.map +1 -0
  163. package/dist/useAiSettings.js +21 -0
  164. package/dist/useAiSettings.js.map +1 -0
  165. package/dist/useBilling.d.ts +40 -0
  166. package/dist/useBilling.d.ts.map +1 -0
  167. package/dist/useBilling.js +155 -0
  168. package/dist/useBilling.js.map +1 -0
  169. package/dist/useBulkDrafts.d.ts +41 -0
  170. package/dist/useBulkDrafts.d.ts.map +1 -0
  171. package/dist/useBulkDrafts.js +112 -0
  172. package/dist/useBulkDrafts.js.map +1 -0
  173. package/dist/useClients.d.ts +16 -0
  174. package/dist/useClients.d.ts.map +1 -0
  175. package/dist/useClients.js +22 -0
  176. package/dist/useClients.js.map +1 -0
  177. package/dist/useDeliveryStatus.d.ts +7 -0
  178. package/dist/useDeliveryStatus.d.ts.map +1 -0
  179. package/dist/useDeliveryStatus.js +39 -0
  180. package/dist/useDeliveryStatus.js.map +1 -0
  181. package/dist/useDrafts.d.ts +19 -0
  182. package/dist/useDrafts.d.ts.map +1 -0
  183. package/dist/useDrafts.js +60 -0
  184. package/dist/useDrafts.js.map +1 -0
  185. package/dist/useInstructions.d.ts +9 -0
  186. package/dist/useInstructions.d.ts.map +1 -0
  187. package/dist/useInstructions.js +20 -0
  188. package/dist/useInstructions.js.map +1 -0
  189. package/dist/useLiveUpdates.d.ts +9 -0
  190. package/dist/useLiveUpdates.d.ts.map +1 -0
  191. package/dist/useLiveUpdates.js +48 -0
  192. package/dist/useLiveUpdates.js.map +1 -0
  193. package/dist/usePolling.d.ts +6 -0
  194. package/dist/usePolling.d.ts.map +1 -0
  195. package/dist/usePolling.js +31 -0
  196. package/dist/usePolling.js.map +1 -0
  197. package/dist/usePreviewDrafts.d.ts +15 -0
  198. package/dist/usePreviewDrafts.d.ts.map +1 -0
  199. package/dist/usePreviewDrafts.js +77 -0
  200. package/dist/usePreviewDrafts.js.map +1 -0
  201. package/dist/useProactiveOptions.d.ts +15 -0
  202. package/dist/useProactiveOptions.d.ts.map +1 -0
  203. package/dist/useProactiveOptions.js +39 -0
  204. package/dist/useProactiveOptions.js.map +1 -0
  205. package/dist/useSend.d.ts +16 -0
  206. package/dist/useSend.d.ts.map +1 -0
  207. package/dist/useSend.js +50 -0
  208. package/dist/useSend.js.map +1 -0
  209. package/dist/useStickToBottom.d.ts +12 -0
  210. package/dist/useStickToBottom.d.ts.map +1 -0
  211. package/dist/useStickToBottom.js +71 -0
  212. package/dist/useStickToBottom.js.map +1 -0
  213. package/dist/useThread.d.ts +26 -0
  214. package/dist/useThread.d.ts.map +1 -0
  215. package/dist/useThread.js +76 -0
  216. package/dist/useThread.js.map +1 -0
  217. package/dist/useWhatsAppWindow.d.ts +8 -0
  218. package/dist/useWhatsAppWindow.d.ts.map +1 -0
  219. package/dist/useWhatsAppWindow.js +22 -0
  220. package/dist/useWhatsAppWindow.js.map +1 -0
  221. 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"}