@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
package/dist/host.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The first-touch message Uplift sends on its own before a coach's first message to a client
|
|
3
|
+
* (partner API T6). Same copy as Uplift's leadIntroService, same name rules: the client's first
|
|
4
|
+
* name or "there", the coach's first name or "your coach". On WhatsApp it goes as the approved
|
|
5
|
+
* template with the same wording. Shown in the preview so a coach sees the opener before
|
|
6
|
+
* connecting anyone; nothing here is sent.
|
|
7
|
+
*/
|
|
8
|
+
export function stockIntro({ clientName, coachName }) {
|
|
9
|
+
const clientFirst = clientName.trim().split(/\s+/)[0] || "there";
|
|
10
|
+
const coachFirst = (coachName ?? "").trim().split(/\s+/)[0] || "your coach";
|
|
11
|
+
return `Hi ${clientFirst}, ${coachFirst} has added you as a coaching client. This is your dedicated coaching number. You may optionally save it as "Coach ${coachFirst}" in your contacts. Reply to begin.`;
|
|
12
|
+
}
|
|
13
|
+
export const QUIET_DAYS = 7;
|
|
14
|
+
/** Host clients the coach should look at: quiet for QUIET_DAYS or more. */
|
|
15
|
+
export function hostNeedsAttention(h, now) {
|
|
16
|
+
if (!h.lastActiveAt)
|
|
17
|
+
return false;
|
|
18
|
+
const t = Date.parse(h.lastActiveAt);
|
|
19
|
+
if (Number.isNaN(t))
|
|
20
|
+
return false;
|
|
21
|
+
return now.getTime() - t >= QUIET_DAYS * 86_400_000;
|
|
22
|
+
}
|
|
23
|
+
/** Not-connected host clients, quiet ones first, then most recently active, then name. */
|
|
24
|
+
export function hostOnlyRows(hostClients, now) {
|
|
25
|
+
return (hostClients ?? [])
|
|
26
|
+
.filter((h) => !h.upliftClientId)
|
|
27
|
+
.sort((a, b) => Number(hostNeedsAttention(b, now)) - Number(hostNeedsAttention(a, now))
|
|
28
|
+
|| (b.lastActiveAt ?? "").localeCompare(a.lastActiveAt ?? "")
|
|
29
|
+
|| a.name.localeCompare(b.name));
|
|
30
|
+
}
|
|
31
|
+
/** Selection ids for host-only rows share the list with Uplift client ids, so they carry a prefix. */
|
|
32
|
+
export const HOST_SEL = "host:";
|
|
33
|
+
export const hostSelId = (hostClientId) => `${HOST_SEL}${hostClientId}`;
|
|
34
|
+
export const isHostSel = (selectedId) => !!selectedId && selectedId.startsWith(HOST_SEL);
|
|
35
|
+
//# sourceMappingURL=host.js.map
|
package/dist/host.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AA0BA;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,UAAU,EAAE,SAAS,EAAiE;IACjH,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IACjE,MAAM,UAAU,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;IAC5E,OAAO,MAAM,WAAW,KAAK,UAAU,qHAAqH,UAAU,qCAAqC,CAAC;AAC9M,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAE5B,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAAC,CAAmC,EAAE,GAAS;IAC/E,IAAI,CAAC,CAAC,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,UAAU,GAAG,UAAU,CAAC;AACtD,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,YAAY,CAAC,WAAkD,EAAE,GAAS;IACxF,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;SAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACb,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;WACpE,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;WAC1D,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,sGAAsG;AACtG,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,YAAoB,EAAE,EAAE,CAAC,GAAG,QAAQ,GAAG,YAAY,EAAE,CAAC;AAChF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC"}
|
package/dist/icons.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export declare function IconDumbbell(): import("react").JSX.Element;
|
|
2
|
+
export declare function IconCalendar(): import("react").JSX.Element;
|
|
3
|
+
export declare function IconClock(): import("react").JSX.Element;
|
|
4
|
+
export declare function IconSend(): import("react").JSX.Element;
|
|
5
|
+
export declare function IconStar(): import("react").JSX.Element;
|
|
6
|
+
export declare function IconPlus(): import("react").JSX.Element;
|
|
7
|
+
export declare function IconSparkles(): import("react").JSX.Element;
|
|
8
|
+
export declare function IconPencil(): import("react").JSX.Element;
|
|
9
|
+
export declare function IconRefresh(): import("react").JSX.Element;
|
|
10
|
+
export declare function IconChevronDown(): import("react").JSX.Element;
|
|
11
|
+
export declare function IconChevronUp(): import("react").JSX.Element;
|
|
12
|
+
export declare function IconSearch(): import("react").JSX.Element;
|
|
13
|
+
export declare function IconX(): import("react").JSX.Element;
|
|
14
|
+
export declare function IconFile(): import("react").JSX.Element;
|
|
15
|
+
export declare function IconFilm(): import("react").JSX.Element;
|
|
16
|
+
export declare function IconMic(): import("react").JSX.Element;
|
|
17
|
+
export declare function IconLoader(): import("react").JSX.Element;
|
|
18
|
+
export declare function IconAlert(): import("react").JSX.Element;
|
|
19
|
+
export declare function IconCheck(): import("react").JSX.Element;
|
|
20
|
+
export declare function IconSliders(): import("react").JSX.Element;
|
|
21
|
+
export declare function IconSparklesLucide(): import("react").JSX.Element;
|
|
22
|
+
export declare function IconMessagesSquare(): import("react").JSX.Element;
|
|
23
|
+
export declare function IconInfo(): import("react").JSX.Element;
|
|
24
|
+
export declare function IconZap(): import("react").JSX.Element;
|
|
25
|
+
export declare function IconMaximize(): import("react").JSX.Element;
|
|
26
|
+
export declare function IconMinimize(): import("react").JSX.Element;
|
|
27
|
+
export declare function IconMessageSquare(): import("react").JSX.Element;
|
|
28
|
+
export declare function IconArrowUpRight(): import("react").JSX.Element;
|
|
29
|
+
export declare function IconActivity(): import("react").JSX.Element;
|
|
30
|
+
export declare function IconUndo(): import("react").JSX.Element;
|
|
31
|
+
export declare function IconCheckCircle(): import("react").JSX.Element;
|
|
32
|
+
export declare function IconCheckDouble(): import("react").JSX.Element;
|
|
33
|
+
export declare function IconTimer(): import("react").JSX.Element;
|
|
34
|
+
export declare function IconTarget(): import("react").JSX.Element;
|
|
35
|
+
export declare function IconBarChart(): import("react").JSX.Element;
|
|
36
|
+
export declare function IconFlame(): import("react").JSX.Element;
|
|
37
|
+
/**
|
|
38
|
+
* The Uplift logomark, traced from trainuplifted.com's wordmark (image13.png): a blue ribbon
|
|
39
|
+
* rising from the top-left with a pale teal ribbon folded over it. Brand colours, not currentColor.
|
|
40
|
+
*/
|
|
41
|
+
export declare function IconUplift({ size }: {
|
|
42
|
+
size?: number;
|
|
43
|
+
}): import("react").JSX.Element;
|
|
44
|
+
/** Icon for a host activity event by its type. Unknown types get the star. */
|
|
45
|
+
export declare function EventIcon({ type }: {
|
|
46
|
+
type: string | undefined;
|
|
47
|
+
}): import("react").JSX.Element;
|
|
48
|
+
//# sourceMappingURL=icons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.tsx"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,gCAE3B;AACD,wBAAgB,YAAY,gCAE3B;AACD,wBAAgB,SAAS,gCAExB;AACD,wBAAgB,QAAQ,gCAEvB;AACD,wBAAgB,QAAQ,gCAEvB;AAED,wBAAgB,QAAQ,gCAAiE;AACzF,wBAAgB,YAAY,gCAAwO;AACpQ,wBAAgB,UAAU,gCAA+F;AACzH,wBAAgB,WAAW,gCAAgG;AAC3H,wBAAgB,eAAe,gCAA6D;AAC5F,wBAAgB,aAAa,gCAAgE;AAC7F,wBAAgB,UAAU,gCAA+F;AACzH,wBAAgB,KAAK,gCAAqE;AAC1F,wBAAgB,QAAQ,gCAAwJ;AAChL,wBAAgB,QAAQ,gCAAwJ;AAChL,wBAAgB,OAAO,gCAAoI;AAC3J,wBAAgB,UAAU,gCAA4F;AACtH,wBAAgB,SAAS,gCAA4J;AACrL,wBAAgB,SAAS,gCAAgE;AACzF,wBAAgB,WAAW,gCAAuH;AAElJ,wBAAgB,kBAAkB,gCAAsV;AACxX,wBAAgB,kBAAkB,gCAA0K;AAC5M,wBAAgB,QAAQ,gCAAoG;AAC5H,wBAAgB,OAAO,gCAA4M;AACnO,wBAAgB,YAAY,gCAAuF;AACnH,wBAAgB,YAAY,gCAAwF;AACpH,wBAAgB,iBAAiB,gCAA8G;AAC/I,wBAAgB,gBAAgB,gCAAqE;AACrG,wBAAgB,YAAY,gCAA0E;AACtG,wBAAgB,QAAQ,gCAAoG;AAC5H,wBAAgB,eAAe,gCAAwG;AACvI,wBAAgB,eAAe,gCAAkG;AACjI,wBAAgB,SAAS,gCAAkG;AAC3H,wBAAgB,UAAU,gCAAqI;AAC/J,wBAAgB,YAAY,gCAA0E;AACtG,wBAAgB,SAAS,gCAA2M;AAEpO;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAO1D;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,+BAY/D"}
|
package/dist/icons.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const base = { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true };
|
|
3
|
+
export function IconDumbbell() {
|
|
4
|
+
return _jsx("svg", { ...base, strokeWidth: 2.2, children: _jsx("path", { d: "M6 5v14M18 5v14M3 8v8M21 8v8M6 12h12" }) });
|
|
5
|
+
}
|
|
6
|
+
export function IconCalendar() {
|
|
7
|
+
return _jsxs("svg", { ...base, children: [_jsx("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2" }), _jsx("path", { d: "M16 2v4M8 2v4M3 10h18" })] });
|
|
8
|
+
}
|
|
9
|
+
export function IconClock() {
|
|
10
|
+
return _jsxs("svg", { ...base, children: [_jsx("circle", { cx: "12", cy: "12", r: "9" }), _jsx("path", { d: "M12 7v5l3 2" })] });
|
|
11
|
+
}
|
|
12
|
+
export function IconSend() {
|
|
13
|
+
return _jsxs("svg", { ...base, children: [_jsx("path", { d: "M22 2L11 13" }), _jsx("path", { d: "M22 2l-7 20-4-9-9-4z" })] });
|
|
14
|
+
}
|
|
15
|
+
export function IconStar() {
|
|
16
|
+
return _jsx("svg", { ...base, children: _jsx("path", { d: "M12 3l2.7 5.6 6.1.9-4.4 4.3 1 6.1L12 17l-5.4 2.9 1-6.1L3.2 9.5l6.1-.9z" }) });
|
|
17
|
+
}
|
|
18
|
+
export function IconPlus() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M12 5v14M5 12h14" }) }); }
|
|
19
|
+
export function IconSparkles() { return _jsxs("svg", { ...base, children: [_jsx("path", { d: "M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z" }), _jsx("path", { d: "M19 15l.8 2.2L22 18l-2.2.8L19 21l-.8-2.2L16 18l2.2-.8z" }), _jsx("path", { d: "M5 3l.6 1.4L7 5l-1.4.6L5 7l-.6-1.4L3 5l1.4-.6z" })] }); }
|
|
20
|
+
export function IconPencil() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M17 3a2.8 2.8 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5z" }) }); }
|
|
21
|
+
export function IconRefresh() { return _jsxs("svg", { ...base, children: [_jsx("path", { d: "M21 12a9 9 0 1 1-2.6-6.4" }), _jsx("path", { d: "M21 3v6h-6" })] }); }
|
|
22
|
+
export function IconChevronDown() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M6 9l6 6 6-6" }) }); }
|
|
23
|
+
export function IconChevronUp() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M18 15l-6-6-6 6" }) }); }
|
|
24
|
+
export function IconSearch() { return _jsxs("svg", { ...base, children: [_jsx("circle", { cx: "11", cy: "11", r: "8" }), _jsx("path", { d: "m21 21-4.3-4.3" })] }); }
|
|
25
|
+
export function IconX() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M18 6L6 18M6 6l12 12" }) }); }
|
|
26
|
+
export function IconFile() { return _jsxs("svg", { ...base, children: [_jsx("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), _jsx("path", { d: "M14 2v6h6M16 13H8M16 17H8M10 9H8" })] }); }
|
|
27
|
+
export function IconFilm() { return _jsxs("svg", { ...base, children: [_jsx("rect", { x: "2", y: "2", width: "20", height: "20", rx: "2.2" }), _jsx("path", { d: "M7 2v20M17 2v20M2 12h20M2 7h5M2 17h5M17 17h5M17 7h5" })] }); }
|
|
28
|
+
export function IconMic() { return _jsxs("svg", { ...base, children: [_jsx("rect", { x: "9", y: "2", width: "6", height: "12", rx: "3" }), _jsx("path", { d: "M19 10v2a7 7 0 0 1-14 0v-2M12 19v3" })] }); }
|
|
29
|
+
export function IconLoader() { return _jsx("svg", { ...base, className: "u-spin", children: _jsx("path", { d: "M21 12a9 9 0 1 1-6.2-8.6" }) }); }
|
|
30
|
+
export function IconAlert() { return _jsxs("svg", { ...base, children: [_jsx("path", { d: "M10.3 3.9L1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z" }), _jsx("path", { d: "M12 9v4M12 17h.01" })] }); }
|
|
31
|
+
export function IconCheck() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M20 6L9 17l-5-5" }) }); }
|
|
32
|
+
export function IconSliders() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M21 4h-7M10 4H3M21 12h-9M8 12H3M21 20h-5M12 20H3M14 2v4M8 10v4M16 18v4" }) }); }
|
|
33
|
+
// Same lucide glyphs as native Uplift's bulk drafts button (Sparkles + MessagesSquare) and expand control.
|
|
34
|
+
export function IconSparklesLucide() { return _jsxs("svg", { ...base, children: [_jsx("path", { d: "M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z" }), _jsx("path", { d: "M20 3v4M22 5h-4M4 17v2M5 18H3" })] }); }
|
|
35
|
+
export function IconMessagesSquare() { return _jsxs("svg", { ...base, children: [_jsx("path", { d: "M14 9a2 2 0 0 1-2 2H6l-4 4V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2z" }), _jsx("path", { d: "M18 9h2a2 2 0 0 1 2 2v11l-4-4h-6a2 2 0 0 1-2-2v-1" })] }); }
|
|
36
|
+
export function IconInfo() { return _jsxs("svg", { ...base, children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("path", { d: "M12 16v-4M12 8h.01" })] }); }
|
|
37
|
+
export function IconZap() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z" }) }); }
|
|
38
|
+
export function IconMaximize() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7" }) }); }
|
|
39
|
+
export function IconMinimize() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M4 14h6v6M20 10h-6V4M14 10l7-7M3 21l7-7" }) }); }
|
|
40
|
+
export function IconMessageSquare() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" }) }); }
|
|
41
|
+
export function IconArrowUpRight() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M7 17L17 7M7 7h10v10" }) }); }
|
|
42
|
+
export function IconActivity() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M22 12h-4l-3 9L9 3l-3 9H2" }) }); }
|
|
43
|
+
export function IconUndo() { return _jsxs("svg", { ...base, children: [_jsx("path", { d: "M9 14L4 9l5-5" }), _jsx("path", { d: "M4 9h11a5 5 0 0 1 0 10h-3" })] }); }
|
|
44
|
+
export function IconCheckCircle() { return _jsxs("svg", { ...base, children: [_jsx("circle", { cx: "12", cy: "12", r: "9" }), _jsx("path", { d: "M8.5 12.5l2.5 2.5 4.5-5" })] }); }
|
|
45
|
+
export function IconCheckDouble() { return _jsxs("svg", { ...base, children: [_jsx("path", { d: "M2 12.5l4 4L13 9" }), _jsx("path", { d: "M9 16.5l1.5 1.5L22 7" })] }); }
|
|
46
|
+
export function IconTimer() { return _jsxs("svg", { ...base, children: [_jsx("path", { d: "M10 2h4M12 14l3-3" }), _jsx("circle", { cx: "12", cy: "14", r: "8" })] }); }
|
|
47
|
+
export function IconTarget() { return _jsxs("svg", { ...base, children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("circle", { cx: "12", cy: "12", r: "6" }), _jsx("circle", { cx: "12", cy: "12", r: "2" })] }); }
|
|
48
|
+
export function IconBarChart() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M12 20V10M18 20V4M6 20v-4" }) }); }
|
|
49
|
+
export function IconFlame() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.4-.5-2-1-3-1.1-2.2-.2-4.1 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.2.2-2.4 1-3.5.3 1.6 1.3 2.5 2.5 3z" }) }); }
|
|
50
|
+
/**
|
|
51
|
+
* The Uplift logomark, traced from trainuplifted.com's wordmark (image13.png): a blue ribbon
|
|
52
|
+
* rising from the top-left with a pale teal ribbon folded over it. Brand colours, not currentColor.
|
|
53
|
+
*/
|
|
54
|
+
export function IconUplift({ size = 16 }) {
|
|
55
|
+
return (_jsxs("svg", { viewBox: "0 0 24 24", width: size, height: size, "aria-hidden": "true", focusable: "false", children: [_jsx("path", { d: "M0 0L18.1 18.1H10.6L0 7.5Z", fill: "#4173E0" }), _jsx("path", { d: "M4.5 3.3H13.9L24 13.4V23.7L18.1 18.1Z", fill: "#BDE2D9" })] }));
|
|
56
|
+
}
|
|
57
|
+
/** Icon for a host activity event by its type. Unknown types get the star. */
|
|
58
|
+
export function EventIcon({ type }) {
|
|
59
|
+
switch (type) {
|
|
60
|
+
case "logged":
|
|
61
|
+
case "workoutLog":
|
|
62
|
+
case "setLogged":
|
|
63
|
+
case "started":
|
|
64
|
+
case "working_out": return _jsx(IconDumbbell, {});
|
|
65
|
+
case "missed":
|
|
66
|
+
case "moved": return _jsx(IconCalendar, {});
|
|
67
|
+
case "inactive": return _jsx(IconClock, {});
|
|
68
|
+
default: return _jsx(IconStar, {});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../src/icons.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export { stockIntro } from "./host.js";
|
|
2
|
+
export { SegmentEditor, type Injection, type SegmentEditorProps } from "./SegmentEditor.js";
|
|
3
|
+
export { splitIntoSegments, reconstructMessage, hueFor } from "./segments.js";
|
|
4
|
+
export { PURPOSES, hydratePurposes, purposeToDraftsInput, type Purpose } from "./purposes.js";
|
|
5
|
+
export { useProactiveOptions, type ProactiveOptionsState } from "./useProactiveOptions.js";
|
|
6
|
+
export { useLiveUpdates } from "./useLiveUpdates.js";
|
|
7
|
+
export { PROACTIVE_ICON_MAP, proactiveIcon } from "./proactiveIcons.js";
|
|
8
|
+
export { IconUplift } from "./icons.js";
|
|
9
|
+
export { previewSmsCost } from "./smsSegments.js";
|
|
10
|
+
export { AttachmentPicker, PICK_ACCEPT, type AttachmentPickerHandle, type AttachState } from "./AttachmentPicker.js";
|
|
11
|
+
export { UpliftProvider, useUplift } from "./UpliftProvider.js";
|
|
12
|
+
export type { UpliftProviderProps, UpliftContextValue } from "./UpliftProvider.js";
|
|
13
|
+
export { UpliftPanel } from "./UpliftPanel.js";
|
|
14
|
+
export type { UpliftPanelProps } from "./UpliftPanel.js";
|
|
15
|
+
export { ClientList } from "./ClientList.js";
|
|
16
|
+
export type { ClientListProps } from "./ClientList.js";
|
|
17
|
+
export { ConversationPane } from "./ConversationPane.js";
|
|
18
|
+
export type { ConversationPaneProps } from "./ConversationPane.js";
|
|
19
|
+
export { ThreadFeed, withDays } from "./ThreadFeed.js";
|
|
20
|
+
export type { ThreadFeedProps } from "./ThreadFeed.js";
|
|
21
|
+
export { AssistantGrid } from "./AssistantGrid.js";
|
|
22
|
+
export type { AssistantGridProps } from "./AssistantGrid.js";
|
|
23
|
+
export { Composer } from "./Composer.js";
|
|
24
|
+
export type { ComposerProps } from "./Composer.js";
|
|
25
|
+
export { useClients } from "./useClients.js";
|
|
26
|
+
export type { ClientsState, LoadStatus } from "./useClients.js";
|
|
27
|
+
export { useThread } from "./useThread.js";
|
|
28
|
+
export type { ThreadState } from "./useThread.js";
|
|
29
|
+
export { useDrafts } from "./useDrafts.js";
|
|
30
|
+
export type { DraftsState, DraftsStatus } from "./useDrafts.js";
|
|
31
|
+
export { useSend } from "./useSend.js";
|
|
32
|
+
export type { SendState, SendStatus } from "./useSend.js";
|
|
33
|
+
export { TONES, statusTag, needsAttention, prioritySort, sortClients, sortInbox, matchesSearch, SORT_MODES, channelLabel, firstName, initials, avatarColor } from "./labels.js";
|
|
34
|
+
export type { SortMode, InboxRow, HostRowData } from "./labels.js";
|
|
35
|
+
export type { StatusTag, TagKind } from "./labels.js";
|
|
36
|
+
export { relativeShort, dayLabel, clockLabel, dayKey, shortDate } from "./time.js";
|
|
37
|
+
export { upliftStyles, injectStyles, STYLE_ELEMENT_ID } from "./styles.js";
|
|
38
|
+
export { AddClientSheet } from "./AddClientSheet.js";
|
|
39
|
+
export { BulkGenerateSheet, BULK_GENERATE_FEATURE_TITLE } from "./BulkGenerateSheet.js";
|
|
40
|
+
export type { BulkCandidate } from "./BulkGenerateSheet.js";
|
|
41
|
+
export type { AddAttempt, AddClientSheetProps } from "./AddClientSheet.js";
|
|
42
|
+
export { OfferSheet } from "./OfferSheet.js";
|
|
43
|
+
export { useBilling, usePlanStatus, formatPlan } from "./useBilling.js";
|
|
44
|
+
export type { BillingState, CheckoutStatus, PlanStatusState } from "./useBilling.js";
|
|
45
|
+
export type { OfferSheetProps } from "./OfferSheet.js";
|
|
46
|
+
export { Sheet } from "./Sheet.js";
|
|
47
|
+
export type { SheetProps } from "./Sheet.js";
|
|
48
|
+
export { useBulkDrafts } from "./useBulkDrafts.js";
|
|
49
|
+
export type { BulkState, BulkTarget, BulkRowStatus } from "./useBulkDrafts.js";
|
|
50
|
+
export { CHANNELS, channelInfo } from "./channels.js";
|
|
51
|
+
export type { ChannelInfo } from "./channels.js";
|
|
52
|
+
export { coerceToE164, validatePhone, E164_RE, PHONE_HINT } from "./phone.js";
|
|
53
|
+
export { HostPreviewPane } from "./HostPreviewPane.js";
|
|
54
|
+
export type { HostPreviewPaneProps } from "./HostPreviewPane.js";
|
|
55
|
+
export { usePreviewDrafts } from "./usePreviewDrafts.js";
|
|
56
|
+
export { hostNeedsAttention, hostOnlyRows, hostSelId, isHostSel, QUIET_DAYS } from "./host.js";
|
|
57
|
+
export type { HostClient, HostActivityEvent, HostActivityLoader } from "./host.js";
|
|
58
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export { stockIntro } from "./host.js";
|
|
2
|
+
export { SegmentEditor } from "./SegmentEditor.js";
|
|
3
|
+
export { splitIntoSegments, reconstructMessage, hueFor } from "./segments.js";
|
|
4
|
+
export { PURPOSES, hydratePurposes, purposeToDraftsInput } from "./purposes.js";
|
|
5
|
+
export { useProactiveOptions } from "./useProactiveOptions.js";
|
|
6
|
+
export { useLiveUpdates } from "./useLiveUpdates.js";
|
|
7
|
+
export { PROACTIVE_ICON_MAP, proactiveIcon } from "./proactiveIcons.js";
|
|
8
|
+
export { IconUplift } from "./icons.js";
|
|
9
|
+
export { previewSmsCost } from "./smsSegments.js";
|
|
10
|
+
export { AttachmentPicker, PICK_ACCEPT } from "./AttachmentPicker.js";
|
|
11
|
+
export { UpliftProvider, useUplift } from "./UpliftProvider.js";
|
|
12
|
+
export { UpliftPanel } from "./UpliftPanel.js";
|
|
13
|
+
export { ClientList } from "./ClientList.js";
|
|
14
|
+
export { ConversationPane } from "./ConversationPane.js";
|
|
15
|
+
export { ThreadFeed, withDays } from "./ThreadFeed.js";
|
|
16
|
+
export { AssistantGrid } from "./AssistantGrid.js";
|
|
17
|
+
export { Composer } from "./Composer.js";
|
|
18
|
+
export { useClients } from "./useClients.js";
|
|
19
|
+
export { useThread } from "./useThread.js";
|
|
20
|
+
export { useDrafts } from "./useDrafts.js";
|
|
21
|
+
export { useSend } from "./useSend.js";
|
|
22
|
+
export { TONES, statusTag, needsAttention, prioritySort, sortClients, sortInbox, matchesSearch, SORT_MODES, channelLabel, firstName, initials, avatarColor } from "./labels.js";
|
|
23
|
+
export { relativeShort, dayLabel, clockLabel, dayKey, shortDate } from "./time.js";
|
|
24
|
+
export { upliftStyles, injectStyles, STYLE_ELEMENT_ID } from "./styles.js";
|
|
25
|
+
export { AddClientSheet } from "./AddClientSheet.js";
|
|
26
|
+
export { BulkGenerateSheet, BULK_GENERATE_FEATURE_TITLE } from "./BulkGenerateSheet.js";
|
|
27
|
+
export { OfferSheet } from "./OfferSheet.js";
|
|
28
|
+
export { useBilling, usePlanStatus, formatPlan } from "./useBilling.js";
|
|
29
|
+
export { Sheet } from "./Sheet.js";
|
|
30
|
+
export { useBulkDrafts } from "./useBulkDrafts.js";
|
|
31
|
+
export { CHANNELS, channelInfo } from "./channels.js";
|
|
32
|
+
export { coerceToE164, validatePhone, E164_RE, PHONE_HINT } from "./phone.js";
|
|
33
|
+
export { HostPreviewPane } from "./HostPreviewPane.js";
|
|
34
|
+
export { usePreviewDrafts } from "./usePreviewDrafts.js";
|
|
35
|
+
export { hostNeedsAttention, hostOnlyRows, hostSelId, isHostSel, QUIET_DAYS } from "./host.js";
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,aAAa,EAA2C,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,oBAAoB,EAAgB,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAA8B,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAiD,MAAM,uBAAuB,CAAC;AACrH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGhL,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAGxF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGxE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/labels.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Channel, Client, ClientStatus, Tone } from "@uplifted/sdk";
|
|
2
|
+
/** The four draft tones in grid order. Labels follow the v6 mock. */
|
|
3
|
+
export declare const TONES: ReadonlyArray<{
|
|
4
|
+
key: Tone;
|
|
5
|
+
label: string;
|
|
6
|
+
}>;
|
|
7
|
+
export type TagKind = "need" | "ok" | "warn" | "neutral";
|
|
8
|
+
export interface StatusTag {
|
|
9
|
+
text: string;
|
|
10
|
+
kind: TagKind;
|
|
11
|
+
}
|
|
12
|
+
/** Row tag for a client status. Active clients show their channel instead (see channelLabel). */
|
|
13
|
+
export declare function statusTag(status: ClientStatus): StatusTag | null;
|
|
14
|
+
/** D4: clients the coach should act on. Replies, quiet clients, and clients never contacted. */
|
|
15
|
+
export declare function needsAttention(client: Pick<Client, "status">): boolean;
|
|
16
|
+
/** D4 ordering: most urgent status first, then most recent contact, then name. Returns a new array. */
|
|
17
|
+
export declare function prioritySort<T extends Pick<Client, "status" | "lastContactAt" | "name">>(clients: readonly T[]): T[];
|
|
18
|
+
/** The inbox sorts, native Uplift's toolbar minus Messages/Updates (the partner API has no per-type times yet). */
|
|
19
|
+
export type SortMode = "priority" | "recent" | "alpha";
|
|
20
|
+
export declare const SORT_MODES: ReadonlyArray<{
|
|
21
|
+
id: SortMode;
|
|
22
|
+
label: string;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* One inbox row: a connected Uplift client, or a host client not connected yet. Both kinds sort
|
|
26
|
+
* together in every mode, so a quiet unconnected client sits among everyone else (nudging the coach
|
|
27
|
+
* to connect them) instead of below the list.
|
|
28
|
+
*/
|
|
29
|
+
export type InboxRow = {
|
|
30
|
+
kind: "client";
|
|
31
|
+
client: Client;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "host";
|
|
34
|
+
host: HostRowData;
|
|
35
|
+
};
|
|
36
|
+
/** The host-client fields the sort needs (host.ts HostClient). */
|
|
37
|
+
export interface HostRowData {
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
upliftClientId?: string | null;
|
|
41
|
+
lastActiveAt?: string | null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Native Uplift's sorts over the whole inbox. Priority: anything unread first, newest first; then
|
|
45
|
+
* everyone else with the longest quiet first (no activity at all counts as longest), so neglected
|
|
46
|
+
* clients surface, connected or not. Recent: newest activity first. A–Z: by name. Returns a new array.
|
|
47
|
+
*/
|
|
48
|
+
export declare function sortInbox(clients: readonly Client[], hosts: readonly HostRowData[], mode: SortMode): InboxRow[];
|
|
49
|
+
/** sortInbox for connected clients only. */
|
|
50
|
+
export declare function sortClients(clients: readonly Client[], mode: SortMode): Client[];
|
|
51
|
+
/** Name search, case-insensitive, matching anywhere in the name (native's roster search). */
|
|
52
|
+
export declare function matchesSearch(name: string, query: string): boolean;
|
|
53
|
+
export declare function channelLabel(channel: Channel): string;
|
|
54
|
+
export declare function firstName(name: string): string;
|
|
55
|
+
export declare function initials(name: string): string;
|
|
56
|
+
/** Stable colour per client id so avatars do not shuffle between renders or sessions. */
|
|
57
|
+
export declare function avatarColor(id: string): string;
|
|
58
|
+
//# sourceMappingURL=labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEzE,qEAAqE;AACrE,eAAO,MAAM,KAAK,EAAE,aAAa,CAAC;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK7D,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,iGAAiG;AACjG,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAOhE;AAED,gGAAgG;AAChG,wBAAgB,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,OAAO,CAEtE;AAID,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,eAAe,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAKpH;AAED,mHAAmH;AACnH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AACvD,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAIrE,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAChG,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAQvH;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAU/G;AAED,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAEhF;AAED,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAErD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7C;AAID,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAI9C"}
|
package/dist/labels.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** The four draft tones in grid order. Labels follow the v6 mock. */
|
|
2
|
+
export const TONES = [
|
|
3
|
+
{ key: "happy", label: "Happy" },
|
|
4
|
+
{ key: "tough", label: "Tough" },
|
|
5
|
+
{ key: "inquisitive", label: "Question" },
|
|
6
|
+
{ key: "five_words", label: "Concise" },
|
|
7
|
+
];
|
|
8
|
+
/** Row tag for a client status. Active clients show their channel instead (see channelLabel). */
|
|
9
|
+
export function statusTag(status) {
|
|
10
|
+
switch (status) {
|
|
11
|
+
case "awaiting_reply": return { text: "Needs reply", kind: "need" };
|
|
12
|
+
case "quiet": return { text: "Quiet", kind: "need" };
|
|
13
|
+
case "new": return { text: "New", kind: "neutral" };
|
|
14
|
+
case "active": return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** D4: clients the coach should act on. Replies, quiet clients, and clients never contacted. */
|
|
18
|
+
export function needsAttention(client) {
|
|
19
|
+
return client.status === "awaiting_reply" || client.status === "quiet" || client.status === "new";
|
|
20
|
+
}
|
|
21
|
+
const PRIORITY = { awaiting_reply: 0, quiet: 1, new: 2, active: 3 };
|
|
22
|
+
/** D4 ordering: most urgent status first, then most recent contact, then name. Returns a new array. */
|
|
23
|
+
export function prioritySort(clients) {
|
|
24
|
+
return [...clients].sort((a, b) => PRIORITY[a.status] - PRIORITY[b.status]
|
|
25
|
+
|| (b.lastContactAt ?? "").localeCompare(a.lastContactAt ?? "")
|
|
26
|
+
|| a.name.localeCompare(b.name));
|
|
27
|
+
}
|
|
28
|
+
export const SORT_MODES = [
|
|
29
|
+
{ id: "priority", label: "Priority" },
|
|
30
|
+
{ id: "recent", label: "Recent" },
|
|
31
|
+
{ id: "alpha", label: "A–Z" },
|
|
32
|
+
];
|
|
33
|
+
const rowName = (r) => (r.kind === "client" ? r.client.name : r.host.name);
|
|
34
|
+
/** Latest activity: Uplift's for a connected client, the host's last-active for one not connected. */
|
|
35
|
+
const rowAt = (r) => (r.kind === "client" ? r.client.lastContactAt : r.host.lastActiveAt) ?? "";
|
|
36
|
+
/** awaiting_reply is the server's word for unread client messages, so it counts even without a count. */
|
|
37
|
+
const rowUnread = (r) => r.kind === "client" && ((r.client.unreadCount ?? 0) > 0 || r.client.status === "awaiting_reply");
|
|
38
|
+
/**
|
|
39
|
+
* Native Uplift's sorts over the whole inbox. Priority: anything unread first, newest first; then
|
|
40
|
+
* everyone else with the longest quiet first (no activity at all counts as longest), so neglected
|
|
41
|
+
* clients surface, connected or not. Recent: newest activity first. A–Z: by name. Returns a new array.
|
|
42
|
+
*/
|
|
43
|
+
export function sortInbox(clients, hosts, mode) {
|
|
44
|
+
const rows = [...clients.map((client) => ({ kind: "client", client })), ...hosts.map((host) => ({ kind: "host", host }))];
|
|
45
|
+
const byRowName = (a, b) => rowName(a).localeCompare(rowName(b));
|
|
46
|
+
if (mode === "alpha")
|
|
47
|
+
return rows.sort(byRowName);
|
|
48
|
+
if (mode === "recent")
|
|
49
|
+
return rows.sort((a, b) => rowAt(b).localeCompare(rowAt(a)) || byRowName(a, b));
|
|
50
|
+
return rows.sort((a, b) => {
|
|
51
|
+
const au = rowUnread(a), bu = rowUnread(b);
|
|
52
|
+
if (au !== bu)
|
|
53
|
+
return au ? -1 : 1;
|
|
54
|
+
return (au ? rowAt(b).localeCompare(rowAt(a)) : rowAt(a).localeCompare(rowAt(b))) || byRowName(a, b);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/** sortInbox for connected clients only. */
|
|
58
|
+
export function sortClients(clients, mode) {
|
|
59
|
+
return sortInbox(clients, [], mode).map((r) => r.client);
|
|
60
|
+
}
|
|
61
|
+
/** Name search, case-insensitive, matching anywhere in the name (native's roster search). */
|
|
62
|
+
export function matchesSearch(name, query) {
|
|
63
|
+
const q = query.trim().toLowerCase();
|
|
64
|
+
return !q || name.toLowerCase().includes(q);
|
|
65
|
+
}
|
|
66
|
+
export function channelLabel(channel) {
|
|
67
|
+
return channel === "whatsapp" ? "WhatsApp" : "SMS";
|
|
68
|
+
}
|
|
69
|
+
export function firstName(name) {
|
|
70
|
+
return name.trim().split(/\s+/)[0] ?? name;
|
|
71
|
+
}
|
|
72
|
+
export function initials(name) {
|
|
73
|
+
const parts = name.trim().split(/\s+/).filter(Boolean);
|
|
74
|
+
const a = parts[0]?.[0] ?? "";
|
|
75
|
+
const b = parts.length > 1 ? parts[parts.length - 1]?.[0] ?? "" : parts[0]?.[1] ?? "";
|
|
76
|
+
return (a + b).toUpperCase() || "?";
|
|
77
|
+
}
|
|
78
|
+
const AVATAR_COLORS = ["#b45309", "#4338ca", "#047857", "#475569", "#be185d", "#0e7490", "#7c3aed", "#b91c1c"];
|
|
79
|
+
/** Stable colour per client id so avatars do not shuffle between renders or sessions. */
|
|
80
|
+
export function avatarColor(id) {
|
|
81
|
+
let h = 0;
|
|
82
|
+
for (let i = 0; i < id.length; i++)
|
|
83
|
+
h = (h * 31 + id.charCodeAt(i)) >>> 0;
|
|
84
|
+
return AVATAR_COLORS[h % AVATAR_COLORS.length] ?? AVATAR_COLORS[0];
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../src/labels.ts"],"names":[],"mappings":"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"}
|
package/dist/phone.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phone input helpers for the add-client sheet. Ported from uplift_coach
|
|
3
|
+
* client/src/utils/phone.js (coerceToE164 and the E.164 shape check). The per-country
|
|
4
|
+
* length check lives on the server (server/utils/phone.js) and comes back as a typed
|
|
5
|
+
* `invalid_request`, which the sheet shows inline, so this package carries no phone library.
|
|
6
|
+
*/
|
|
7
|
+
/** E.164: leading + and 8-15 digits, first digit not zero. Plus-addressed test numbers allowed. */
|
|
8
|
+
export declare const E164_RE: RegExp;
|
|
9
|
+
/** Best-effort E.164 coercion for common US input shapes. Unrecognised input is returned trimmed. */
|
|
10
|
+
export declare function coerceToE164(raw: string): string;
|
|
11
|
+
export declare const PHONE_HINT = "Enter a phone number with country code, e.g. +12065551234 (US) or +447911123456 (UK). US 10-digit numbers auto-format.";
|
|
12
|
+
export declare function validatePhone(phoneE164: string): {
|
|
13
|
+
valid: true;
|
|
14
|
+
} | {
|
|
15
|
+
valid: false;
|
|
16
|
+
message: string;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=phone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone.d.ts","sourceRoot":"","sources":["../src/phone.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mGAAmG;AACnG,eAAO,MAAM,OAAO,QAAgC,CAAC;AAErD,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED,eAAO,MAAM,UAAU,2HAA2H,CAAC;AAEnJ,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAEpG"}
|
package/dist/phone.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phone input helpers for the add-client sheet. Ported from uplift_coach
|
|
3
|
+
* client/src/utils/phone.js (coerceToE164 and the E.164 shape check). The per-country
|
|
4
|
+
* length check lives on the server (server/utils/phone.js) and comes back as a typed
|
|
5
|
+
* `invalid_request`, which the sheet shows inline, so this package carries no phone library.
|
|
6
|
+
*/
|
|
7
|
+
/** E.164: leading + and 8-15 digits, first digit not zero. Plus-addressed test numbers allowed. */
|
|
8
|
+
export const E164_RE = /^(\+[1-9]\d{7,14})(\+\d+)?$/;
|
|
9
|
+
/** Best-effort E.164 coercion for common US input shapes. Unrecognised input is returned trimmed. */
|
|
10
|
+
export function coerceToE164(raw) {
|
|
11
|
+
const trimmed = (raw || "").trim();
|
|
12
|
+
if (!trimmed)
|
|
13
|
+
return "";
|
|
14
|
+
if (trimmed.startsWith("+"))
|
|
15
|
+
return trimmed.replace(/[^\d+]/g, "");
|
|
16
|
+
const digits = trimmed.replace(/\D/g, "");
|
|
17
|
+
if (digits.length === 11 && digits.startsWith("1"))
|
|
18
|
+
return `+${digits}`;
|
|
19
|
+
if (digits.length === 10)
|
|
20
|
+
return `+1${digits}`;
|
|
21
|
+
return trimmed;
|
|
22
|
+
}
|
|
23
|
+
export const PHONE_HINT = "Enter a phone number with country code, e.g. +12065551234 (US) or +447911123456 (UK). US 10-digit numbers auto-format.";
|
|
24
|
+
export function validatePhone(phoneE164) {
|
|
25
|
+
return E164_RE.test(phoneE164) ? { valid: true } : { valid: false, message: PHONE_HINT };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=phone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone.js","sourceRoot":"","sources":["../src/phone.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mGAAmG;AACnG,MAAM,CAAC,MAAM,OAAO,GAAG,6BAA6B,CAAC;AAErD,qGAAqG;AACrG,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,MAAM,EAAE,CAAC;IACxE,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,MAAM,EAAE,CAAC;IAC/C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,wHAAwH,CAAC;AAEnJ,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ComponentType } from "react";
|
|
2
|
+
/** Mirrors native PROACTIVE_ICON_MAP: the server rejects any other name, and an unmapped name must never render blank. */
|
|
3
|
+
export declare const PROACTIVE_ICON_MAP: Record<string, ComponentType>;
|
|
4
|
+
export declare const PROACTIVE_ICON_NAMES: string[];
|
|
5
|
+
export declare function proactiveIcon(name: string | undefined): ComponentType;
|
|
6
|
+
//# sourceMappingURL=proactiveIcons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proactiveIcons.d.ts","sourceRoot":"","sources":["../src/proactiveIcons.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,OAAO,CAAC;AAerD,0HAA0H;AAC1H,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAmB5D,CAAC;AACF,eAAO,MAAM,oBAAoB,UAAkC,CAAC;AACpE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAErE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { IconBarChart, IconCalendar, IconDumbbell, IconFlame, IconRefresh, IconStar, IconTarget, IconTimer } from "./icons.js";
|
|
3
|
+
const base = { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true };
|
|
4
|
+
function IconClipboardList() { return _jsxs("svg", { ...base, children: [_jsx("rect", { x: "8", y: "2", width: "8", height: "4", rx: "1" }), _jsx("path", { d: "M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2M12 11h4M12 16h4M8 11h.01M8 16h.01" })] }); }
|
|
5
|
+
function IconMessageCircle() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M7.9 20A9 9 0 1 0 4 16.1L2 22z" }) }); }
|
|
6
|
+
function IconHeart() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M19 14c1.5-1.5 3-3.2 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.8 0-3 .5-4.5 2-1.5-1.5-2.7-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4 3 5.5l7 7z" }) }); }
|
|
7
|
+
function IconTrophy() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M6 9H4.5a2.5 2.5 0 0 1 0-5H6M18 9h1.5a2.5 2.5 0 0 0 0-5H18M4 22h16M10 14.7V17c0 .6-.4 1-1 1.3-1 .4-1.5 1.1-1.5 2.2V22h9v-1.5c0-1.1-.5-1.8-1.5-2.2-.6-.3-1-.7-1-1.3v-2.3M18 2H6v7a6 6 0 0 0 12 0z" }) }); }
|
|
8
|
+
function IconApple() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M12 20.9c1 0 1.6-.6 3-.6s2 .6 3 .6c2.2 0 4-4.3 4-7.5 0-2.4-1.6-4.6-4-4.6-1.6 0-2.5.8-3 .8s-1.6-.8-3-.8C9.6 8.8 7 11 7 13.4c0 3.2 2.3 7.5 5 7.5zM12 7a3 3 0 0 0 3-3 3 3 0 0 0-3 3z" }) }); }
|
|
9
|
+
function IconMoon() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9z" }) }); }
|
|
10
|
+
function IconSun() { return _jsxs("svg", { ...base, children: [_jsx("circle", { cx: "12", cy: "12", r: "4" }), _jsx("path", { d: "M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M6.3 17.7l-1.4 1.4M19.1 4.9l-1.4 1.4" })] }); }
|
|
11
|
+
function IconBell() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9M10.3 21a2 2 0 0 0 3.4 0" }) }); }
|
|
12
|
+
function IconZap() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M4 14a1 1 0 0 1-.8-1.6l9-12A1 1 0 0 1 14 1v8h6a1 1 0 0 1 .8 1.6l-9 12A1 1 0 0 1 10 22v-8z" }) }); }
|
|
13
|
+
function IconThumbsUp() { return _jsx("svg", { ...base, children: _jsx("path", { d: "M7 10v12M15 5.9l-1 4.1h5.8a2 2 0 0 1 2 2.4l-1.4 7a2 2 0 0 1-2 1.6H7V10l4.5-7a2.2 2.2 0 0 1 3.5 2.9z" }) }); }
|
|
14
|
+
/** Mirrors native PROACTIVE_ICON_MAP: the server rejects any other name, and an unmapped name must never render blank. */
|
|
15
|
+
export const PROACTIVE_ICON_MAP = {
|
|
16
|
+
"timer": IconTimer,
|
|
17
|
+
"target": IconTarget,
|
|
18
|
+
"bar-chart": IconBarChart,
|
|
19
|
+
"flame": IconFlame,
|
|
20
|
+
"calendar": IconCalendar,
|
|
21
|
+
"refresh": IconRefresh,
|
|
22
|
+
"clipboard-list": IconClipboardList,
|
|
23
|
+
"message-circle": IconMessageCircle,
|
|
24
|
+
"heart": IconHeart,
|
|
25
|
+
"trophy": IconTrophy,
|
|
26
|
+
"dumbbell": IconDumbbell,
|
|
27
|
+
"apple": IconApple,
|
|
28
|
+
"moon": IconMoon,
|
|
29
|
+
"sun": IconSun,
|
|
30
|
+
"bell": IconBell,
|
|
31
|
+
"zap": IconZap,
|
|
32
|
+
"star": IconStar,
|
|
33
|
+
"thumbs-up": IconThumbsUp,
|
|
34
|
+
};
|
|
35
|
+
export const PROACTIVE_ICON_NAMES = Object.keys(PROACTIVE_ICON_MAP);
|
|
36
|
+
export function proactiveIcon(name) {
|
|
37
|
+
return (name && PROACTIVE_ICON_MAP[name]) || IconMessageCircle;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=proactiveIcons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proactiveIcons.js","sourceRoot":"","sources":["../src/proactiveIcons.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE/H,MAAM,IAAI,GAA4B,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC3L,SAAS,iBAAiB,KAAK,OAAO,kBAAS,IAAI,aAAE,eAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,GAAG,EAAC,MAAM,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,GAAG,EAAA,eAAM,CAAC,EAAC,4GAA4G,GAAG,IAAM,CAAC,CAAC,CAAC;AACrO,SAAS,iBAAiB,KAAK,OAAO,iBAAS,IAAI,YAAE,eAAM,CAAC,EAAC,gCAAgC,GAAG,GAAM,CAAC,CAAC,CAAC;AACzG,SAAS,SAAS,KAAK,OAAO,iBAAS,IAAI,YAAE,eAAM,CAAC,EAAC,kIAAkI,GAAG,GAAM,CAAC,CAAC,CAAC;AACnM,SAAS,UAAU,KAAK,OAAO,iBAAS,IAAI,YAAE,eAAM,CAAC,EAAC,kMAAkM,GAAG,GAAM,CAAC,CAAC,CAAC;AACpQ,SAAS,SAAS,KAAK,OAAO,iBAAS,IAAI,YAAE,eAAM,CAAC,EAAC,mLAAmL,GAAG,GAAM,CAAC,CAAC,CAAC;AACpP,SAAS,QAAQ,KAAK,OAAO,iBAAS,IAAI,YAAE,eAAM,CAAC,EAAC,oCAAoC,GAAG,GAAM,CAAC,CAAC,CAAC;AACpG,SAAS,OAAO,KAAK,OAAO,kBAAS,IAAI,aAAE,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,GAAG,EAAA,eAAM,CAAC,EAAC,sGAAsG,GAAG,IAAM,CAAC,CAAC,CAAC;AACrM,SAAS,QAAQ,KAAK,OAAO,iBAAS,IAAI,YAAE,eAAM,CAAC,EAAC,mEAAmE,GAAG,GAAM,CAAC,CAAC,CAAC;AACnI,SAAS,OAAO,KAAK,OAAO,iBAAS,IAAI,YAAE,eAAM,CAAC,EAAC,2FAA2F,GAAG,GAAM,CAAC,CAAC,CAAC;AAC1J,SAAS,YAAY,KAAK,OAAO,iBAAS,IAAI,YAAE,eAAM,CAAC,EAAC,qGAAqG,GAAG,GAAM,CAAC,CAAC,CAAC;AAEzK,0HAA0H;AAC1H,MAAM,CAAC,MAAM,kBAAkB,GAAkC;IAC/D,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,YAAY;IACzB,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,iBAAiB;IACnC,gBAAgB,EAAE,iBAAiB;IACnC,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,YAAY;CAC1B,CAAC;AACF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACpE,MAAM,UAAU,aAAa,CAAC,IAAwB;IACpD,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,iBAAiB,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ComponentType } from "react";
|
|
2
|
+
import type { DraftsInput, ProactiveOption } from "@uplifted/sdk";
|
|
3
|
+
/** A proactive-message purpose for the ✨ menu, hydrated with its icon. Mirrors native's hydrateProactiveOptions. */
|
|
4
|
+
export interface Purpose {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
icon: string;
|
|
8
|
+
/** AI guidance (sent as `purpose`, mode hint). */
|
|
9
|
+
prompt: string;
|
|
10
|
+
/** Exact message to personalise (sent as `purpose` with purposeMode message). */
|
|
11
|
+
cannedText: string | null;
|
|
12
|
+
Icon: ComponentType;
|
|
13
|
+
}
|
|
14
|
+
export declare function hydratePurposes(options: ReadonlyArray<ProactiveOption> | null | undefined): Purpose[] | null;
|
|
15
|
+
/** What a picked purpose sends to a drafts endpoint: canned text as a message to personalise, else the prompt as a hint. */
|
|
16
|
+
export declare function purposeToDraftsInput(p: Purpose): DraftsInput;
|
|
17
|
+
/** Native DEFAULT_PROACTIVE_OPTIONS, used until the coach's own list arrives. */
|
|
18
|
+
export declare const PURPOSES: readonly Purpose[];
|
|
19
|
+
//# sourceMappingURL=purposes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purposes.d.ts","sourceRoot":"","sources":["../src/purposes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGlE,oHAAoH;AACpH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,EAAE,GAAG,IAAI,CAG5G;AAED,4HAA4H;AAC5H,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,GAAG,WAAW,CAE5D;AAED,iFAAiF;AACjF,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,EAOpC,CAAC"}
|