@fluid-app/portal-sdk 0.1.244 → 0.1.246
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/{AppDownloadScreen-DQR40F0y.mjs → AppDownloadScreen-DPnbWP5G.mjs} +1 -1
- package/dist/{AppDownloadScreen-DQR40F0y.mjs.map → AppDownloadScreen-DPnbWP5G.mjs.map} +1 -1
- package/dist/{AppDownloadScreen-BXnl23_d.cjs → AppDownloadScreen-Og_iMsw5.cjs} +1 -1
- package/dist/{AppDownloadScreen-BXnl23_d.cjs.map → AppDownloadScreen-Og_iMsw5.cjs.map} +1 -1
- package/dist/{AppNavigationContext-C1-hd9Rw.cjs → AppNavigationContext-BDs1cOuG.cjs} +1 -1
- package/dist/{AppNavigationContext-C1-hd9Rw.cjs.map → AppNavigationContext-BDs1cOuG.cjs.map} +1 -1
- package/dist/{AppNavigationContext-Dvc0yoZF.mjs → AppNavigationContext-DNod9mf6.mjs} +1 -1
- package/dist/{AppNavigationContext-Dvc0yoZF.mjs.map → AppNavigationContext-DNod9mf6.mjs.map} +1 -1
- package/dist/{ContactsScreen-Cj0_VI0d.cjs → ContactsScreen-CZ2hrMqf.cjs} +6 -6
- package/dist/{ContactsScreen-Cj0_VI0d.cjs.map → ContactsScreen-CZ2hrMqf.cjs.map} +1 -1
- package/dist/{ContactsScreen-CMBERzKU.mjs → ContactsScreen-DuhDzRtI.mjs} +6 -6
- package/dist/{ContactsScreen-CMBERzKU.mjs.map → ContactsScreen-DuhDzRtI.mjs.map} +1 -1
- package/dist/{ContactsScreen-CH_P8WxC.cjs → ContactsScreen-Dv1SJNBo.cjs} +5 -5
- package/dist/{InfiniteScrollSentinel-DeIL8UkW.cjs → InfiniteScrollSentinel-BaPx1tjC.cjs} +1 -1
- package/dist/{InfiniteScrollSentinel-DeIL8UkW.cjs.map → InfiniteScrollSentinel-BaPx1tjC.cjs.map} +1 -1
- package/dist/{InfiniteScrollSentinel-B_clNL9Y.mjs → InfiniteScrollSentinel-D0XRJi51.mjs} +1 -1
- package/dist/{InfiniteScrollSentinel-B_clNL9Y.mjs.map → InfiniteScrollSentinel-D0XRJi51.mjs.map} +1 -1
- package/dist/{MessagingScreen-KYx6DSMx.cjs → MessagingScreen-BwI0RShj.cjs} +3 -3
- package/dist/{MessagingScreen-vb5P-7jP.mjs → MessagingScreen-DiSZ7fyd.mjs} +3 -3
- package/dist/{MessagingScreen-vb5P-7jP.mjs.map → MessagingScreen-DiSZ7fyd.mjs.map} +1 -1
- package/dist/{MessagingScreen-CCbgNRp1.cjs → MessagingScreen-WCeHWGlX.cjs} +5 -5
- package/dist/{MessagingScreen-CCbgNRp1.cjs.map → MessagingScreen-WCeHWGlX.cjs.map} +1 -1
- package/dist/{MySiteScreen-B_16cPgD.cjs → MySiteScreen-Bdd7a6Hy.cjs} +3 -2
- package/dist/MySiteScreen-CK84vXa9.mjs +301 -0
- package/dist/MySiteScreen-CK84vXa9.mjs.map +1 -0
- package/dist/MySiteScreen-zfajm9da.cjs +309 -0
- package/dist/MySiteScreen-zfajm9da.cjs.map +1 -0
- package/dist/{OrdersScreen-CQGCZLYf.cjs → OrdersScreen-BLs1xTv7.cjs} +4 -4
- package/dist/{OrdersScreen-BxaJw-Kq.cjs → OrdersScreen-BbS7Alby.cjs} +3 -3
- package/dist/{OrdersScreen-BxaJw-Kq.cjs.map → OrdersScreen-BbS7Alby.cjs.map} +1 -1
- package/dist/{OrdersScreen-CPKRShbP.mjs → OrdersScreen-b-ZC4_NI.mjs} +3 -3
- package/dist/{OrdersScreen-CPKRShbP.mjs.map → OrdersScreen-b-ZC4_NI.mjs.map} +1 -1
- package/dist/{PortalProductsApiProvider-BIZg_c4Y.mjs → PortalProductsApiProvider-BFdHFvog.mjs} +1 -1
- package/dist/{PortalProductsApiProvider-BIZg_c4Y.mjs.map → PortalProductsApiProvider-BFdHFvog.mjs.map} +1 -1
- package/dist/{PortalProductsApiProvider-DL8nl7To.cjs → PortalProductsApiProvider-CkS7OIGt.cjs} +1 -1
- package/dist/{PortalProductsApiProvider-DL8nl7To.cjs.map → PortalProductsApiProvider-CkS7OIGt.cjs.map} +1 -1
- package/dist/{ProfileScreen-BT0iys-q.cjs → ProfileScreen-BfvdQa0q.cjs} +114 -33
- package/dist/ProfileScreen-BfvdQa0q.cjs.map +1 -0
- package/dist/{ProfileScreen-CZAIUM2a.mjs → ProfileScreen-CRLf8oDe.mjs} +116 -35
- package/dist/ProfileScreen-CRLf8oDe.mjs.map +1 -0
- package/dist/{ProfileScreen-CKcdtroU.cjs → ProfileScreen-Za3ZIWPO.cjs} +4 -2
- package/dist/{SearchSort-CeJqRK2c.cjs → SearchSort-BP2ktxyN.cjs} +1 -1
- package/dist/{SearchSort-CeJqRK2c.cjs.map → SearchSort-BP2ktxyN.cjs.map} +1 -1
- package/dist/{SearchSort-CFHU38Er.mjs → SearchSort-CokMCrhy.mjs} +1 -1
- package/dist/{SearchSort-CFHU38Er.mjs.map → SearchSort-CokMCrhy.mjs.map} +1 -1
- package/dist/{ShareablesScreen-sieWBlAl.mjs → ShareablesScreen-BZZ-RT71.mjs} +8 -8
- package/dist/{ShareablesScreen-sieWBlAl.mjs.map → ShareablesScreen-BZZ-RT71.mjs.map} +1 -1
- package/dist/{ShareablesScreen-A69L0Nok.cjs → ShareablesScreen-BxOKbuuU.cjs} +20 -20
- package/dist/{ShareablesScreen-A69L0Nok.cjs.map → ShareablesScreen-BxOKbuuU.cjs.map} +1 -1
- package/dist/{ShareablesScreen-BUYG-mjj.cjs → ShareablesScreen-CsDxLODp.cjs} +7 -7
- package/dist/{ShopScreen-sLUTgIcQ.mjs → ShopScreen-BG1pxd2D.mjs} +4 -4
- package/dist/{ShopScreen-sLUTgIcQ.mjs.map → ShopScreen-BG1pxd2D.mjs.map} +1 -1
- package/dist/{ShopScreen-DVpCo-OV.cjs → ShopScreen-BigHJ5wE.cjs} +3 -3
- package/dist/{ShopScreen-Dm85_rMp.cjs → ShopScreen-S6rBaoWM.cjs} +4 -4
- package/dist/{ShopScreen-Dm85_rMp.cjs.map → ShopScreen-S6rBaoWM.cjs.map} +1 -1
- package/dist/{SubscriptionsScreen-DrDSwMXS.cjs → SubscriptionsScreen-B88_dLfE.cjs} +9 -9
- package/dist/{SubscriptionsScreen-DrDSwMXS.cjs.map → SubscriptionsScreen-B88_dLfE.cjs.map} +1 -1
- package/dist/{SubscriptionsScreen-CXM2zmF7.mjs → SubscriptionsScreen-DK9-h3Cz.mjs} +8 -8
- package/dist/{SubscriptionsScreen-CXM2zmF7.mjs.map → SubscriptionsScreen-DK9-h3Cz.mjs.map} +1 -1
- package/dist/{SubscriptionsScreen-t5wtDGfB.cjs → SubscriptionsScreen-dhnfYn4L.cjs} +5 -5
- package/dist/{UpgradeScreen-DUvg-WZv.cjs → UpgradeScreen-Bl9lb32K.cjs} +1 -1
- package/dist/{UpgradeScreen-DAKe_hiv.cjs → UpgradeScreen-C-hFDAR2.cjs} +1 -1
- package/dist/{UpgradeScreen-DAKe_hiv.cjs.map → UpgradeScreen-C-hFDAR2.cjs.map} +1 -1
- package/dist/{UpgradeScreen-DnGnWVTf.mjs → UpgradeScreen-X6j0_625.mjs} +1 -1
- package/dist/{UpgradeScreen-DnGnWVTf.mjs.map → UpgradeScreen-X6j0_625.mjs.map} +1 -1
- package/dist/{MySiteScreen-CUyJteDm.cjs → components-BKADyCYp.cjs} +42 -466
- package/dist/components-BKADyCYp.cjs.map +1 -0
- package/dist/{MySiteScreen-CN0ZDBgy.mjs → components-CjgEvBYG.mjs} +6 -470
- package/dist/components-CjgEvBYG.mjs.map +1 -0
- package/dist/{dist-PbA1vxAz.mjs → dist-BstXVe25.mjs} +1 -1
- package/dist/{dist-PbA1vxAz.mjs.map → dist-BstXVe25.mjs.map} +1 -1
- package/dist/{dist-o2cjwzIa.mjs → dist-CTLDCXCc.mjs} +2 -2
- package/dist/{dist-o2cjwzIa.mjs.map → dist-CTLDCXCc.mjs.map} +1 -1
- package/dist/{dist-BQZkLGL6.cjs → dist-DJAHGHHi.cjs} +1 -19
- package/dist/{dist-BQZkLGL6.cjs.map → dist-DJAHGHHi.cjs.map} +1 -1
- package/dist/{dist-DbRTQ2QF.cjs → dist-D_3_ZuC5.cjs} +1 -1
- package/dist/{dist-DbRTQ2QF.cjs.map → dist-D_3_ZuC5.cjs.map} +1 -1
- package/dist/{dist-myuZC8sf.cjs → dist-vhBaFZ9L.cjs} +2 -2
- package/dist/{dist-myuZC8sf.cjs.map → dist-vhBaFZ9L.cjs.map} +1 -1
- package/dist/{es-UfEBhcZD.cjs → es-B5heQ57j.cjs} +1 -1
- package/dist/{es-UfEBhcZD.cjs.map → es-B5heQ57j.cjs.map} +1 -1
- package/dist/{fluid-pay-api-adapter-eNT8m0xB.mjs → fluid-pay-api-adapter-CJ7-I8k-.mjs} +673 -381
- package/dist/fluid-pay-api-adapter-CJ7-I8k-.mjs.map +1 -0
- package/dist/{fluid-pay-api-adapter-BszgrFL6.cjs → fluid-pay-api-adapter-D63KLi5c.cjs} +700 -378
- package/dist/fluid-pay-api-adapter-D63KLi5c.cjs.map +1 -0
- package/dist/{format-CytB2M00.cjs → format-CLUjV1oR.cjs} +1 -1
- package/dist/{format-CytB2M00.cjs.map → format-CLUjV1oR.cjs.map} +1 -1
- package/dist/index.cjs +123 -172
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +122 -171
- package/dist/index.mjs.map +1 -1
- package/dist/{order-status-badge-DHyaK6mU.cjs → order-status-badge-BKvLeVsM.cjs} +3 -3
- package/dist/{order-status-badge-DHyaK6mU.cjs.map → order-status-badge-BKvLeVsM.cjs.map} +1 -1
- package/dist/{order-status-badge-Dmo8lLnt.mjs → order-status-badge-xuJ732eH.mjs} +3 -3
- package/dist/{order-status-badge-Dmo8lLnt.mjs.map → order-status-badge-xuJ732eH.mjs.map} +1 -1
- package/dist/{query-keys-oQKvV4jp.mjs → query-keys-8SVs82aF.mjs} +1 -1
- package/dist/{query-keys-elu0svUd.cjs.map → query-keys-8SVs82aF.mjs.map} +1 -1
- package/dist/{query-keys-elu0svUd.cjs → query-keys-e9EEoWxN.cjs} +1 -1
- package/dist/{query-keys-oQKvV4jp.mjs.map → query-keys-e9EEoWxN.cjs.map} +1 -1
- package/dist/{sortable.esm-C8G00cCP.mjs → sortable.esm-C8riJ_zv.mjs} +2 -14
- package/dist/{sortable.esm-C8G00cCP.mjs.map → sortable.esm-C8riJ_zv.mjs.map} +1 -1
- package/dist/{use-account-C1X-VLY-.cjs → use-account-D6Z9hkDX.cjs} +2 -2
- package/dist/{use-account-C1X-VLY-.cjs.map → use-account-D6Z9hkDX.cjs.map} +1 -1
- package/dist/{use-account-C76sphlu.mjs → use-account-DsTz5BlS.mjs} +2 -2
- package/dist/{use-account-C76sphlu.mjs.map → use-account-DsTz5BlS.mjs.map} +1 -1
- package/package.json +18 -17
- package/styles/packages.css +1 -0
- package/dist/MySiteScreen-CN0ZDBgy.mjs.map +0 -1
- package/dist/MySiteScreen-CUyJteDm.cjs.map +0 -1
- package/dist/ProfileScreen-BT0iys-q.cjs.map +0 -1
- package/dist/ProfileScreen-CZAIUM2a.mjs.map +0 -1
- package/dist/fluid-pay-api-adapter-BszgrFL6.cjs.map +0 -1
- package/dist/fluid-pay-api-adapter-eNT8m0xB.mjs.map +0 -1
|
@@ -4,10 +4,10 @@ require("./pay-api-context-_o5ZEXYt.cjs");
|
|
|
4
4
|
require("./countries-api-context-C0C0K9gJ.cjs");
|
|
5
5
|
require("./src-uhf6Szlw.cjs");
|
|
6
6
|
require("./ScreenHeaderContext-oIu5Bvhs.cjs");
|
|
7
|
-
require("./fluid-pay-api-adapter-
|
|
8
|
-
const require_SubscriptionsScreen = require("./SubscriptionsScreen-
|
|
9
|
-
require("./SearchSort-
|
|
10
|
-
require("./InfiniteScrollSentinel-
|
|
11
|
-
require("./order-status-badge-
|
|
7
|
+
require("./fluid-pay-api-adapter-D63KLi5c.cjs");
|
|
8
|
+
const require_SubscriptionsScreen = require("./SubscriptionsScreen-B88_dLfE.cjs");
|
|
9
|
+
require("./SearchSort-BP2ktxyN.cjs");
|
|
10
|
+
require("./InfiniteScrollSentinel-BaPx1tjC.cjs");
|
|
11
|
+
require("./order-status-badge-BKvLeVsM.cjs");
|
|
12
12
|
exports.SubscriptionsScreen = require_SubscriptionsScreen.SubscriptionsScreen;
|
|
13
13
|
exports.subscriptionsScreenPropertySchema = require_SubscriptionsScreen.subscriptionsScreenPropertySchema;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
2
|
require("./src-uhf6Szlw.cjs");
|
|
3
|
-
const require_UpgradeScreen = require("./UpgradeScreen-
|
|
3
|
+
const require_UpgradeScreen = require("./UpgradeScreen-C-hFDAR2.cjs");
|
|
4
4
|
exports.UpgradeScreen = require_UpgradeScreen.UpgradeScreen;
|
|
5
5
|
exports.upgradeScreenPropertySchema = require_UpgradeScreen.upgradeScreenPropertySchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpgradeScreen-
|
|
1
|
+
{"version":3,"file":"UpgradeScreen-C-hFDAR2.cjs","names":["Sparkles","Phone","MessagesSquare","CalendarMinus","MessageSquareHeart","Card","CardHeader","CardTitle","CardDescription","Button"],"sources":["../../pro-upgrade-ui/src/lib/cn.ts","../../pro-upgrade-ui/src/components/PortalProUpgradeScreen.tsx","../src/screens/UpgradeScreen.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import {\n Sparkles,\n Phone,\n MessagesSquare,\n CalendarMinus,\n MessageSquareHeart,\n type LucideIcon,\n} from \"lucide-react\";\nimport {\n Button,\n Card,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@fluid-app/ui-primitives\";\nimport { cn } from \"../lib/cn\";\n\nexport interface PortalProUpgradeScreenProps {\n onJoinWaitlist: () => void;\n waitlistLoading?: boolean;\n className?: string;\n}\n\ninterface Feature {\n icon: LucideIcon;\n title: string;\n description: string;\n}\n\nconst FEATURES: Feature[] = [\n {\n icon: Sparkles,\n title: \"Generative AI\",\n description: \"Get quick drafts and creative messaging help.\",\n },\n {\n icon: Phone,\n title: \"Business phone number\",\n description: \"Look professional with a dedicated client line.\",\n },\n {\n icon: MessagesSquare,\n title: \"Mass Messaging\",\n description: \"Save time by messaging multiple clients at once.\",\n },\n {\n icon: CalendarMinus,\n title: \"Scheduled messages\",\n description: \"Plan ahead and schedule messages easily.\",\n },\n {\n icon: MessageSquareHeart,\n title: \"Unified messaging\",\n description: \"Combine email, SMS, and internal messages.\",\n },\n];\n\nfunction FeatureCard({ icon: Icon, title, description }: Feature) {\n return (\n <Card className=\"bg-background text-foreground h-auto gap-0 border-none py-4\">\n <CardHeader className=\"gap-3 px-4\">\n <Icon className=\"size-6\" strokeWidth={1.5} />\n <CardTitle className=\"text-sm font-bold\">{title}</CardTitle>\n <CardDescription className=\"text-xs\">{description}</CardDescription>\n </CardHeader>\n </Card>\n );\n}\n\nexport function PortalProUpgradeScreen({\n onJoinWaitlist,\n waitlistLoading = false,\n className,\n}: PortalProUpgradeScreenProps) {\n return (\n <div\n className={cn(\n \"relative flex h-full w-full flex-col overflow-hidden md:flex-row\",\n className,\n )}\n >\n {/* Pastel gradient background */}\n <div className=\"pointer-events-none absolute inset-0 rounded-xl bg-linear-[33deg,rgba(8,148,255,0.2)_4.5%,rgba(201,89,221,0.2)_24.5%,rgba(255,46,84,0.2)_54.6%,rgba(255,144,4,0.2)_69.2%,rgba(255,255,255,0.2)_76.4%] blur-[125px]\" />\n\n {/* Hero collage - absolute, behind everything, fades right and bottom */}\n <img\n src=\"https://ik.imagekit.io/fluid/980191006/images/HW87RR/hero-collage_O6DCdkFib.png\"\n alt=\"People using the app with push notifications\"\n className=\"pointer-events-none absolute top-0 left-0 h-full w-full mask-b-from-20% mask-b-to-30% object-contain object-left-top md:w-4/5 md:mask-r-from-50% md:mask-r-to-70% md:mask-b-from-60% md:mask-b-to-80%\"\n />\n\n {/* Left Section - Logo & CTA */}\n <div className=\"relative flex w-full shrink-0 flex-col items-center justify-end px-8 pt-40 md:w-1/2 md:pt-0 md:pb-10\">\n <div className=\"flex flex-col items-center gap-4\">\n <img\n src=\"https://ik.imagekit.io/fluid/980191006/images/ZYT78J/co-founder-badge_NcorZNlUY.png\"\n alt=\"Coming Soon - Co-Founder\"\n className=\"h-auto w-120 object-contain\"\n />\n {/* TODO: This is currently hidden until we actually have a way to waitlist someone */}\n <Button\n className=\"hidden w-full md:w-auto\"\n size=\"xl\"\n onClick={onJoinWaitlist}\n disabled={waitlistLoading}\n >\n {waitlistLoading ? \"Joining...\" : \"Join Waitlist\"}\n </Button>\n </div>\n </div>\n\n {/* Right Section - Content */}\n <div className=\"relative flex min-w-0 flex-1 flex-col gap-6 overflow-y-auto px-8 pt-8 md:pt-16 md:pr-5 md:pb-5 md:pl-10\">\n <div className=\"flex shrink-0 flex-col gap-2.5\">\n <h1 className=\"text-3xl leading-tight font-semibold tracking-tight text-black md:text-5xl\">\n It's like having an\n <br />\n assistant in your pocket\n </h1>\n <p className=\"text-sm leading-5 font-medium text-black\">\n Upgrade your business\n </p>\n </div>\n <div className=\"flex flex-col gap-4 pb-4\">\n {FEATURES.map((feature) => (\n <FeatureCard key={feature.title} {...feature} />\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { PortalProUpgradeScreen } from \"@fluid-app/portal-pro-upgrade-ui\";\n\nexport const upgradeScreenPropertySchema = {\n widgetType: \"UpgradeScreen\",\n displayName: \"Upgrade Screen\",\n fields: [],\n} as const satisfies WidgetPropertySchema;\n\nexport function UpgradeScreen(): React.JSX.Element {\n return (\n <PortalProUpgradeScreen\n onJoinWaitlist={() => {\n // TODO: Wire up to waitlist API\n }}\n />\n );\n}\n"],"mappings":";;;;;;;AAGA,SAAgB,GAAG,GAAG,QAAsB;AAC1C,SAAA,GAAA,eAAA,UAAA,GAAA,KAAA,MAAoB,OAAO,CAAC;;;;ACyB9B,MAAM,WAAsB;CAC1B;EACE,MAAMA,aAAAA;EACN,OAAO;EACP,aAAa;EACd;CACD;EACE,MAAMC,aAAAA;EACN,OAAO;EACP,aAAa;EACd;CACD;EACE,MAAMC,aAAAA;EACN,OAAO;EACP,aAAa;EACd;CACD;EACE,MAAMC,aAAAA;EACN,OAAO;EACP,aAAa;EACd;CACD;EACE,MAAMC,aAAAA;EACN,OAAO;EACP,aAAa;EACd;CACF;AAED,SAAS,YAAY,EAAE,MAAM,MAAM,OAAO,eAAwB;AAChE,QACE,iBAAA,GAAA,kBAAA,KAACC,YAAAA,MAAD;EAAM,WAAU;YACd,iBAAA,GAAA,kBAAA,MAACC,YAAAA,YAAD;GAAY,WAAU;aAAtB;IACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;KAAM,WAAU;KAAS,aAAa;KAAO,CAAA;IAC7C,iBAAA,GAAA,kBAAA,KAACC,YAAAA,WAAD;KAAW,WAAU;eAAqB;KAAkB,CAAA;IAC5D,iBAAA,GAAA,kBAAA,KAACC,YAAAA,iBAAD;KAAiB,WAAU;eAAW;KAA8B,CAAA;IACzD;;EACR,CAAA;;AAIX,SAAgB,uBAAuB,EACrC,gBACA,kBAAkB,OAClB,aAC8B;AAC9B,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,WAAW,GACT,oEACA,UACD;YAJH;GAOE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,sNAAuN,CAAA;GAGtO,iBAAA,GAAA,kBAAA,KAAC,OAAD;IACE,KAAI;IACJ,KAAI;IACJ,WAAU;IACV,CAAA;GAGF,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;cACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;KAAK,WAAU;eAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;MACE,KAAI;MACJ,KAAI;MACJ,WAAU;MACV,CAAA,EAEF,iBAAA,GAAA,kBAAA,KAACC,YAAAA,QAAD;MACE,WAAU;MACV,MAAK;MACL,SAAS;MACT,UAAU;gBAET,kBAAkB,eAAe;MAC3B,CAAA,CACL;;IACF,CAAA;GAGN,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;KAAK,WAAU;eAAf,CACE,iBAAA,GAAA,kBAAA,MAAC,MAAD;MAAI,WAAU;gBAAd;OAA2F;OAEzF,iBAAA,GAAA,kBAAA,KAAC,MAAD,EAAM,CAAA;;OAEH;SACL,iBAAA,GAAA,kBAAA,KAAC,KAAD;MAAG,WAAU;gBAA2C;MAEpD,CAAA,CACA;QACN,iBAAA,GAAA,kBAAA,KAAC,OAAD;KAAK,WAAU;eACZ,SAAS,KAAK,YACb,iBAAA,GAAA,kBAAA,KAAC,aAAD,EAAiC,GAAI,SAAW,EAA9B,QAAQ,MAAsB,CAChD;KACE,CAAA,CACF;;GACF;;;;;AC9HV,MAAa,8BAA8B;CACzC,YAAY;CACZ,aAAa;CACb,QAAQ,EAAE;CACX;AAED,SAAgB,gBAAmC;AACjD,QACE,iBAAA,GAAA,kBAAA,KAAC,wBAAD,EACE,sBAAsB,IAGtB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpgradeScreen-
|
|
1
|
+
{"version":3,"file":"UpgradeScreen-X6j0_625.mjs","names":[],"sources":["../../pro-upgrade-ui/src/lib/cn.ts","../../pro-upgrade-ui/src/components/PortalProUpgradeScreen.tsx","../src/screens/UpgradeScreen.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import {\n Sparkles,\n Phone,\n MessagesSquare,\n CalendarMinus,\n MessageSquareHeart,\n type LucideIcon,\n} from \"lucide-react\";\nimport {\n Button,\n Card,\n CardDescription,\n CardHeader,\n CardTitle,\n} from \"@fluid-app/ui-primitives\";\nimport { cn } from \"../lib/cn\";\n\nexport interface PortalProUpgradeScreenProps {\n onJoinWaitlist: () => void;\n waitlistLoading?: boolean;\n className?: string;\n}\n\ninterface Feature {\n icon: LucideIcon;\n title: string;\n description: string;\n}\n\nconst FEATURES: Feature[] = [\n {\n icon: Sparkles,\n title: \"Generative AI\",\n description: \"Get quick drafts and creative messaging help.\",\n },\n {\n icon: Phone,\n title: \"Business phone number\",\n description: \"Look professional with a dedicated client line.\",\n },\n {\n icon: MessagesSquare,\n title: \"Mass Messaging\",\n description: \"Save time by messaging multiple clients at once.\",\n },\n {\n icon: CalendarMinus,\n title: \"Scheduled messages\",\n description: \"Plan ahead and schedule messages easily.\",\n },\n {\n icon: MessageSquareHeart,\n title: \"Unified messaging\",\n description: \"Combine email, SMS, and internal messages.\",\n },\n];\n\nfunction FeatureCard({ icon: Icon, title, description }: Feature) {\n return (\n <Card className=\"bg-background text-foreground h-auto gap-0 border-none py-4\">\n <CardHeader className=\"gap-3 px-4\">\n <Icon className=\"size-6\" strokeWidth={1.5} />\n <CardTitle className=\"text-sm font-bold\">{title}</CardTitle>\n <CardDescription className=\"text-xs\">{description}</CardDescription>\n </CardHeader>\n </Card>\n );\n}\n\nexport function PortalProUpgradeScreen({\n onJoinWaitlist,\n waitlistLoading = false,\n className,\n}: PortalProUpgradeScreenProps) {\n return (\n <div\n className={cn(\n \"relative flex h-full w-full flex-col overflow-hidden md:flex-row\",\n className,\n )}\n >\n {/* Pastel gradient background */}\n <div className=\"pointer-events-none absolute inset-0 rounded-xl bg-linear-[33deg,rgba(8,148,255,0.2)_4.5%,rgba(201,89,221,0.2)_24.5%,rgba(255,46,84,0.2)_54.6%,rgba(255,144,4,0.2)_69.2%,rgba(255,255,255,0.2)_76.4%] blur-[125px]\" />\n\n {/* Hero collage - absolute, behind everything, fades right and bottom */}\n <img\n src=\"https://ik.imagekit.io/fluid/980191006/images/HW87RR/hero-collage_O6DCdkFib.png\"\n alt=\"People using the app with push notifications\"\n className=\"pointer-events-none absolute top-0 left-0 h-full w-full mask-b-from-20% mask-b-to-30% object-contain object-left-top md:w-4/5 md:mask-r-from-50% md:mask-r-to-70% md:mask-b-from-60% md:mask-b-to-80%\"\n />\n\n {/* Left Section - Logo & CTA */}\n <div className=\"relative flex w-full shrink-0 flex-col items-center justify-end px-8 pt-40 md:w-1/2 md:pt-0 md:pb-10\">\n <div className=\"flex flex-col items-center gap-4\">\n <img\n src=\"https://ik.imagekit.io/fluid/980191006/images/ZYT78J/co-founder-badge_NcorZNlUY.png\"\n alt=\"Coming Soon - Co-Founder\"\n className=\"h-auto w-120 object-contain\"\n />\n {/* TODO: This is currently hidden until we actually have a way to waitlist someone */}\n <Button\n className=\"hidden w-full md:w-auto\"\n size=\"xl\"\n onClick={onJoinWaitlist}\n disabled={waitlistLoading}\n >\n {waitlistLoading ? \"Joining...\" : \"Join Waitlist\"}\n </Button>\n </div>\n </div>\n\n {/* Right Section - Content */}\n <div className=\"relative flex min-w-0 flex-1 flex-col gap-6 overflow-y-auto px-8 pt-8 md:pt-16 md:pr-5 md:pb-5 md:pl-10\">\n <div className=\"flex shrink-0 flex-col gap-2.5\">\n <h1 className=\"text-3xl leading-tight font-semibold tracking-tight text-black md:text-5xl\">\n It's like having an\n <br />\n assistant in your pocket\n </h1>\n <p className=\"text-sm leading-5 font-medium text-black\">\n Upgrade your business\n </p>\n </div>\n <div className=\"flex flex-col gap-4 pb-4\">\n {FEATURES.map((feature) => (\n <FeatureCard key={feature.title} {...feature} />\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { PortalProUpgradeScreen } from \"@fluid-app/portal-pro-upgrade-ui\";\n\nexport const upgradeScreenPropertySchema = {\n widgetType: \"UpgradeScreen\",\n displayName: \"Upgrade Screen\",\n fields: [],\n} as const satisfies WidgetPropertySchema;\n\nexport function UpgradeScreen(): React.JSX.Element {\n return (\n <PortalProUpgradeScreen\n onJoinWaitlist={() => {\n // TODO: Wire up to waitlist API\n }}\n />\n );\n}\n"],"mappings":";;;;;;;AAGA,SAAgB,GAAG,GAAG,QAAsB;AAC1C,QAAO,QAAQ,KAAK,OAAO,CAAC;;;;ACyB9B,MAAM,WAAsB;CAC1B;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACd;CACD;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACd;CACD;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACd;CACD;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACd;CACD;EACE,MAAM;EACN,OAAO;EACP,aAAa;EACd;CACF;AAED,SAAS,YAAY,EAAE,MAAM,MAAM,OAAO,eAAwB;AAChE,QACE,oBAAC,MAAD;EAAM,WAAU;YACd,qBAAC,YAAD;GAAY,WAAU;aAAtB;IACE,oBAAC,MAAD;KAAM,WAAU;KAAS,aAAa;KAAO,CAAA;IAC7C,oBAAC,WAAD;KAAW,WAAU;eAAqB;KAAkB,CAAA;IAC5D,oBAAC,iBAAD;KAAiB,WAAU;eAAW;KAA8B,CAAA;IACzD;;EACR,CAAA;;AAIX,SAAgB,uBAAuB,EACrC,gBACA,kBAAkB,OAClB,aAC8B;AAC9B,QACE,qBAAC,OAAD;EACE,WAAW,GACT,oEACA,UACD;YAJH;GAOE,oBAAC,OAAD,EAAK,WAAU,sNAAuN,CAAA;GAGtO,oBAAC,OAAD;IACE,KAAI;IACJ,KAAI;IACJ,WAAU;IACV,CAAA;GAGF,oBAAC,OAAD;IAAK,WAAU;cACb,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,OAAD;MACE,KAAI;MACJ,KAAI;MACJ,WAAU;MACV,CAAA,EAEF,oBAAC,QAAD;MACE,WAAU;MACV,MAAK;MACL,SAAS;MACT,UAAU;gBAET,kBAAkB,eAAe;MAC3B,CAAA,CACL;;IACF,CAAA;GAGN,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,qBAAC,MAAD;MAAI,WAAU;gBAAd;OAA2F;OAEzF,oBAAC,MAAD,EAAM,CAAA;;OAEH;SACL,oBAAC,KAAD;MAAG,WAAU;gBAA2C;MAEpD,CAAA,CACA;QACN,oBAAC,OAAD;KAAK,WAAU;eACZ,SAAS,KAAK,YACb,oBAAC,aAAD,EAAiC,GAAI,SAAW,EAA9B,QAAQ,MAAsB,CAChD;KACE,CAAA,CACF;;GACF;;;;;;;;;AC9HV,MAAa,8BAA8B;CACzC,YAAY;CACZ,aAAa;CACb,QAAQ,EAAE;CACX;AAED,SAAgB,gBAAmC;AACjD,QACE,oBAAC,wBAAD,EACE,sBAAsB,IAGtB,CAAA"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
require("./chunk-9hOWP6kD.cjs");
|
|
2
2
|
const require_src = require("./src-uhf6Szlw.cjs");
|
|
3
|
-
const
|
|
4
|
-
const require_dist$3 = require("./dist-BQZkLGL6.cjs");
|
|
3
|
+
const require_dist$3 = require("./dist-DJAHGHHi.cjs");
|
|
5
4
|
let react = require("react");
|
|
6
|
-
react = require_chunk.__toESM(react);
|
|
7
5
|
require("@tanstack/react-query");
|
|
8
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
7
|
let lucide_react = require("lucide-react");
|
|
@@ -991,475 +989,53 @@ function PortalFavoritesEditor({ onBack, onRefreshPreview, onToast }) {
|
|
|
991
989
|
] });
|
|
992
990
|
}
|
|
993
991
|
//#endregion
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
const [formState, setFormState] = (0, react.useState)(() => ({ bio: "" }));
|
|
999
|
-
const profileSyncedRef = (0, react.useRef)(false);
|
|
1000
|
-
(0, react.useEffect)(() => {
|
|
1001
|
-
if (profile && !profileSyncedRef.current) {
|
|
1002
|
-
profileSyncedRef.current = true;
|
|
1003
|
-
setFormState({ bio: profile.bio ?? "" });
|
|
1004
|
-
}
|
|
1005
|
-
}, [profile]);
|
|
1006
|
-
const isDirty = formState.bio.trim() !== (profile?.bio ?? "");
|
|
1007
|
-
const handleFieldChange = (0, react.useCallback)((field, value) => {
|
|
1008
|
-
setFormState((s) => ({
|
|
1009
|
-
...s,
|
|
1010
|
-
[field]: value
|
|
1011
|
-
}));
|
|
1012
|
-
}, []);
|
|
1013
|
-
const handleSave = (0, react.useCallback)(() => {
|
|
1014
|
-
const trimmedBio = formState.bio.trim();
|
|
1015
|
-
updateProfileMutation.mutate({ bio: trimmedBio }, {
|
|
1016
|
-
onSuccess: () => {
|
|
1017
|
-
profileSyncedRef.current = false;
|
|
1018
|
-
onToast?.("Profile updated successfully", "success");
|
|
1019
|
-
onRefreshPreview?.();
|
|
1020
|
-
},
|
|
1021
|
-
onError: () => {
|
|
1022
|
-
onToast?.("Failed to update profile", "error");
|
|
1023
|
-
}
|
|
1024
|
-
});
|
|
1025
|
-
}, [
|
|
1026
|
-
formState,
|
|
1027
|
-
updateProfileMutation,
|
|
1028
|
-
onToast,
|
|
1029
|
-
onRefreshPreview
|
|
1030
|
-
]);
|
|
1031
|
-
const fileInputRef = (0, react.useRef)(null);
|
|
1032
|
-
const [isUploadingPhoto, setIsUploadingPhoto] = (0, react.useState)(false);
|
|
1033
|
-
const [previewUrl, setPreviewUrl] = (0, react.useState)(null);
|
|
1034
|
-
(0, react.useEffect)(() => {
|
|
1035
|
-
return () => {
|
|
1036
|
-
if (previewUrl) URL.revokeObjectURL(previewUrl);
|
|
1037
|
-
};
|
|
1038
|
-
}, [previewUrl]);
|
|
1039
|
-
const handleFileSelected = (0, react.useCallback)(async (e) => {
|
|
1040
|
-
const file = e.target.files?.[0];
|
|
1041
|
-
if (!file || !onUploadPhoto) return;
|
|
1042
|
-
if (!file.type.startsWith("image/")) {
|
|
1043
|
-
onToast?.("Please select an image file", "error");
|
|
1044
|
-
return;
|
|
1045
|
-
}
|
|
1046
|
-
setPreviewUrl(URL.createObjectURL(file));
|
|
1047
|
-
setIsUploadingPhoto(true);
|
|
1048
|
-
try {
|
|
1049
|
-
const imageUrl = await onUploadPhoto(file);
|
|
1050
|
-
updateProfileMutation.mutate({ avatar_url: imageUrl }, {
|
|
1051
|
-
onSuccess: () => {
|
|
1052
|
-
setPreviewUrl(null);
|
|
1053
|
-
onToast?.("Profile photo updated", "success");
|
|
1054
|
-
onRefreshPreview?.();
|
|
1055
|
-
},
|
|
1056
|
-
onError: () => {
|
|
1057
|
-
setPreviewUrl(null);
|
|
1058
|
-
onToast?.("Failed to save profile photo", "error");
|
|
1059
|
-
}
|
|
1060
|
-
});
|
|
1061
|
-
} catch {
|
|
1062
|
-
setPreviewUrl(null);
|
|
1063
|
-
onToast?.("Failed to upload photo", "error");
|
|
1064
|
-
} finally {
|
|
1065
|
-
setIsUploadingPhoto(false);
|
|
1066
|
-
if (fileInputRef.current) fileInputRef.current.value = "";
|
|
1067
|
-
}
|
|
1068
|
-
}, [
|
|
1069
|
-
onUploadPhoto,
|
|
1070
|
-
updateProfileMutation,
|
|
1071
|
-
onToast,
|
|
1072
|
-
onRefreshPreview
|
|
1073
|
-
]);
|
|
1074
|
-
if (isProfileLoading) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1075
|
-
className: "flex h-full items-center justify-center",
|
|
1076
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1077
|
-
className: "text-muted-foreground animate-pulse",
|
|
1078
|
-
children: "Loading..."
|
|
1079
|
-
})
|
|
1080
|
-
});
|
|
1081
|
-
const displayAvatarUrl = previewUrl || avatarUrl || profile?.avatar_url;
|
|
1082
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1083
|
-
className: "space-y-4 p-4 sm:space-y-6 sm:p-6",
|
|
1084
|
-
children: [
|
|
1085
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1086
|
-
className: "flex items-center gap-3",
|
|
1087
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1088
|
-
type: "button",
|
|
1089
|
-
onClick: onBack,
|
|
1090
|
-
className: "text-muted-foreground hover:bg-muted hover:text-foreground flex h-10 w-10 items-center justify-center rounded-full transition-colors",
|
|
1091
|
-
"aria-label": "Go back",
|
|
1092
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ArrowLeft, { className: "h-5 w-5" })
|
|
1093
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", {
|
|
1094
|
-
className: "text-foreground text-xl font-bold sm:text-2xl",
|
|
1095
|
-
children: "Profile"
|
|
1096
|
-
})]
|
|
1097
|
-
}),
|
|
1098
|
-
onUploadPhoto && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Card, {
|
|
1099
|
-
className: "p-4 sm:p-6",
|
|
1100
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
1101
|
-
ref: fileInputRef,
|
|
1102
|
-
type: "file",
|
|
1103
|
-
accept: "image/*",
|
|
1104
|
-
className: "hidden",
|
|
1105
|
-
onChange: handleFileSelected
|
|
1106
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1107
|
-
className: "flex flex-col items-center gap-3 sm:flex-row sm:gap-4",
|
|
1108
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1109
|
-
className: "relative h-[120px] w-[120px] shrink-0 overflow-hidden rounded-full bg-gray-200",
|
|
1110
|
-
children: [displayAvatarUrl ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
1111
|
-
src: displayAvatarUrl,
|
|
1112
|
-
alt: userName || "Profile",
|
|
1113
|
-
className: "h-full w-full object-cover"
|
|
1114
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1115
|
-
className: "bg-background text-foreground flex h-full w-full items-center justify-center text-xl font-semibold",
|
|
1116
|
-
children: userInitial || "U"
|
|
1117
|
-
}), isUploadingPhoto && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1118
|
-
className: "absolute inset-0 flex items-center justify-center rounded-full bg-black/40",
|
|
1119
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "border-t-primary h-6 w-6 animate-spin rounded-full border-2 border-white" })
|
|
1120
|
-
})]
|
|
1121
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Button, {
|
|
1122
|
-
variant: "secondary",
|
|
1123
|
-
size: "sm",
|
|
1124
|
-
onClick: () => fileInputRef.current?.click(),
|
|
1125
|
-
disabled: isUploadingPhoto,
|
|
1126
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Camera, { className: "mr-1 h-4 w-4" }), isUploadingPhoto ? "Uploading..." : "Change Photo"]
|
|
1127
|
-
})]
|
|
1128
|
-
})]
|
|
1129
|
-
}),
|
|
1130
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Card, {
|
|
1131
|
-
className: "h-auto gap-0 py-0 shadow-none",
|
|
1132
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.CardContent, {
|
|
1133
|
-
className: "space-y-4 p-4 sm:p-6",
|
|
1134
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1135
|
-
className: "space-y-2",
|
|
1136
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Label, {
|
|
1137
|
-
htmlFor: "profile-bio",
|
|
1138
|
-
children: "Bio"
|
|
1139
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Textarea, {
|
|
1140
|
-
id: "profile-bio",
|
|
1141
|
-
rows: 4,
|
|
1142
|
-
value: formState.bio,
|
|
1143
|
-
onChange: (e) => handleFieldChange("bio", e.target.value),
|
|
1144
|
-
placeholder: "Tell people a little about yourself..."
|
|
1145
|
-
})]
|
|
1146
|
-
})
|
|
1147
|
-
})
|
|
1148
|
-
}),
|
|
1149
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1150
|
-
className: "flex justify-end",
|
|
1151
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Button, {
|
|
1152
|
-
onClick: handleSave,
|
|
1153
|
-
disabled: !isDirty || updateProfileMutation.isPending,
|
|
1154
|
-
className: "w-full sm:w-auto",
|
|
1155
|
-
children: updateProfileMutation.isPending ? "Saving..." : "Save Changes"
|
|
1156
|
-
})
|
|
1157
|
-
})
|
|
1158
|
-
]
|
|
1159
|
-
});
|
|
1160
|
-
}
|
|
1161
|
-
//#endregion
|
|
1162
|
-
//#region src/screens/MySiteScreen/MySiteMainView.tsx
|
|
1163
|
-
const navigationItems = [
|
|
1164
|
-
{
|
|
1165
|
-
label: "Profile",
|
|
1166
|
-
key: "profile",
|
|
1167
|
-
icon: lucide_react.User
|
|
1168
|
-
},
|
|
1169
|
-
{
|
|
1170
|
-
label: "Theme",
|
|
1171
|
-
key: "theme",
|
|
1172
|
-
icon: lucide_react.Palette
|
|
1173
|
-
},
|
|
1174
|
-
{
|
|
1175
|
-
label: "MySite Content",
|
|
1176
|
-
key: "content",
|
|
1177
|
-
icon: lucide_react.LayoutGrid
|
|
1178
|
-
},
|
|
1179
|
-
{
|
|
1180
|
-
label: "Buttons",
|
|
1181
|
-
key: "buttons",
|
|
1182
|
-
icon: lucide_react.Link2
|
|
992
|
+
Object.defineProperty(exports, "MySiteLinkCard", {
|
|
993
|
+
enumerable: true,
|
|
994
|
+
get: function() {
|
|
995
|
+
return MySiteLinkCard;
|
|
1183
996
|
}
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
}
|
|
1190
|
-
}
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
}
|
|
1217
|
-
});
|
|
1218
|
-
}, [
|
|
1219
|
-
resolvedThemeId,
|
|
1220
|
-
selectedThemeId,
|
|
1221
|
-
updateSettingsMutation,
|
|
1222
|
-
refreshPreview
|
|
1223
|
-
]);
|
|
1224
|
-
const handleUpdateSlug = (0, react.useCallback)(async (slug) => {
|
|
1225
|
-
await new Promise((resolve, reject) => {
|
|
1226
|
-
updateSettingsMutation.mutate({ slug }, {
|
|
1227
|
-
onSuccess: () => resolve(),
|
|
1228
|
-
onError: () => reject(/* @__PURE__ */ new Error("Failed"))
|
|
1229
|
-
});
|
|
1230
|
-
});
|
|
1231
|
-
}, [updateSettingsMutation]);
|
|
1232
|
-
const handlePreview = (0, react.useCallback)(() => {
|
|
1233
|
-
if (mysiteUrl) window.open(`${mysiteUrl}?preview=true`, "_blank");
|
|
1234
|
-
}, [mysiteUrl]);
|
|
1235
|
-
const sectionLabel = (0, react.useMemo)(() => {
|
|
1236
|
-
if (editingSection === "theme") return "Theme";
|
|
1237
|
-
if (editingSection === "buttons") return "Buttons";
|
|
1238
|
-
if (editingSection === "content") return "MySite Content";
|
|
1239
|
-
if (editingSection === "profile") return "Profile";
|
|
1240
|
-
return "";
|
|
1241
|
-
}, [editingSection]);
|
|
1242
|
-
if (isProfileLoading) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1243
|
-
className: "flex h-full flex-col overflow-y-auto px-2 py-6 2xl:flex-row 2xl:overflow-hidden",
|
|
1244
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1245
|
-
className: "w-full px-4 2xl:w-2/3 2xl:shrink-0",
|
|
1246
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1247
|
-
className: "flex flex-col gap-5",
|
|
1248
|
-
children: [
|
|
1249
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "bg-muted h-7 w-32 animate-pulse rounded-md" }),
|
|
1250
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "bg-muted h-20 w-full animate-pulse rounded-lg" }),
|
|
1251
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "bg-muted h-16 w-full animate-pulse rounded-lg" }),
|
|
1252
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "bg-muted h-40 w-full animate-pulse rounded-lg" })
|
|
1253
|
-
]
|
|
1254
|
-
})
|
|
1255
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1256
|
-
className: "w-full shrink-0 overflow-y-hidden px-4 pt-5 2xl:w-1/3 2xl:pt-0",
|
|
1257
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1258
|
-
className: "bg-muted flex h-full flex-col items-center gap-4 rounded-xl p-5",
|
|
1259
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1260
|
-
className: "flex w-full items-center justify-between",
|
|
1261
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1262
|
-
className: "space-y-1",
|
|
1263
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "bg-background/50 h-3 w-24 animate-pulse rounded" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "bg-background/50 h-4 w-28 animate-pulse rounded" })]
|
|
1264
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "bg-background/50 h-8 w-20 animate-pulse rounded-md" })]
|
|
1265
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "bg-background/50 h-[490px] w-[260px] animate-pulse rounded-[36px] sm:h-[600px] sm:w-[320px]" })]
|
|
1266
|
-
})
|
|
1267
|
-
})]
|
|
1268
|
-
});
|
|
1269
|
-
const contentAnimClassName = getContentClassName(animPhase);
|
|
1270
|
-
const previewAnimClassName = getPreviewClassName(animPhase);
|
|
1271
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1272
|
-
className: "flex h-full flex-col overflow-y-auto px-2 py-6 2xl:flex-row 2xl:overflow-hidden",
|
|
1273
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1274
|
-
className: `w-full px-4 2xl:w-2/3 2xl:shrink-0 ${contentAnimClassName}`,
|
|
1275
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1276
|
-
className: "flex min-w-0 flex-col gap-5 2xl:h-full 2xl:overflow-y-auto",
|
|
1277
|
-
children: showEditContent && editingSection === "theme" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MySiteThemeEditor, {
|
|
1278
|
-
themes,
|
|
1279
|
-
selectedThemeId: resolvedThemeId,
|
|
1280
|
-
onSelectTheme: handleSelectTheme,
|
|
1281
|
-
isPending: updateSettingsMutation.isPending,
|
|
1282
|
-
onBack: onBackClick
|
|
1283
|
-
}) : showEditContent && editingSection === "buttons" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PortalButtonsEditor, {
|
|
1284
|
-
onBack: onBackClick,
|
|
1285
|
-
onRefreshPreview: refreshPreview,
|
|
1286
|
-
onToast: defaultToast
|
|
1287
|
-
}) : showEditContent && editingSection === "content" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PortalFavoritesEditor, {
|
|
1288
|
-
onBack: onBackClick,
|
|
1289
|
-
onRefreshPreview: refreshPreview,
|
|
1290
|
-
onToast: defaultToast
|
|
1291
|
-
}) : showEditContent && editingSection === "profile" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MySiteProfileForm, {
|
|
1292
|
-
onBack: onBackClick,
|
|
1293
|
-
onRefreshPreview: refreshPreview,
|
|
1294
|
-
onToast: defaultToast
|
|
1295
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
1296
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1297
|
-
className: "flex items-center gap-2",
|
|
1298
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", {
|
|
1299
|
-
className: "text-foreground text-xl font-bold",
|
|
1300
|
-
children: "MySite"
|
|
1301
|
-
}), animPhase !== "idle" && sectionLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronRight, { className: "text-muted-foreground h-4 w-4" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1302
|
-
className: "text-foreground text-xl font-bold",
|
|
1303
|
-
children: sectionLabel
|
|
1304
|
-
})] })]
|
|
1305
|
-
}),
|
|
1306
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MySiteVisitorDetailsCard, {
|
|
1307
|
-
views,
|
|
1308
|
-
leads
|
|
1309
|
-
}),
|
|
1310
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MySiteLinkCard, {
|
|
1311
|
-
mysiteUrl,
|
|
1312
|
-
displayUrl,
|
|
1313
|
-
onUpdateSlug: handleUpdateSlug,
|
|
1314
|
-
onToast: defaultToast
|
|
1315
|
-
}),
|
|
1316
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1317
|
-
className: "border-border bg-card divide-border divide-y overflow-hidden rounded-lg border",
|
|
1318
|
-
children: navigationItems.map((item) => {
|
|
1319
|
-
const Icon = item.icon;
|
|
1320
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
1321
|
-
type: "button",
|
|
1322
|
-
onClick: () => onEditSection(item.key),
|
|
1323
|
-
className: "group hover:bg-muted flex w-full items-center gap-2.5 px-3 py-2.5 transition-colors text-left cursor-pointer",
|
|
1324
|
-
children: [
|
|
1325
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1326
|
-
className: "bg-muted text-foreground flex h-7 w-7 shrink-0 items-center justify-center rounded-full",
|
|
1327
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, { className: "h-3.5 w-3.5" })
|
|
1328
|
-
}),
|
|
1329
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1330
|
-
className: "text-foreground flex-1 text-sm font-medium",
|
|
1331
|
-
children: item.label
|
|
1332
|
-
}),
|
|
1333
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronRight, { className: "text-muted-foreground h-3 w-3 shrink-0 transition-transform group-hover:translate-x-0.5" })
|
|
1334
|
-
]
|
|
1335
|
-
}, item.label);
|
|
1336
|
-
})
|
|
1337
|
-
})
|
|
1338
|
-
] })
|
|
1339
|
-
})
|
|
1340
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1341
|
-
className: `w-full shrink-0 overflow-y-hidden px-4 pt-5 2xl:w-1/3 2xl:pt-0 ${previewAnimClassName}`,
|
|
1342
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MySitePhonePreview, {
|
|
1343
|
-
mysiteUrl,
|
|
1344
|
-
themeName,
|
|
1345
|
-
previewKey,
|
|
1346
|
-
isUpdating: updateSettingsMutation.isPending,
|
|
1347
|
-
onPreview: handlePreview
|
|
1348
|
-
})
|
|
1349
|
-
})]
|
|
1350
|
-
});
|
|
1351
|
-
}
|
|
1352
|
-
//#endregion
|
|
1353
|
-
//#region src/screens/MySiteScreen/use-mysite-editing-section.ts
|
|
1354
|
-
function useMySiteEditingSection() {
|
|
1355
|
-
const [animPhase, setAnimPhase] = (0, react.useState)("idle");
|
|
1356
|
-
const [editingSection, setEditingSection] = (0, react.useState)(null);
|
|
1357
|
-
const timeoutsRef = (0, react.useRef)([]);
|
|
1358
|
-
(0, react.useEffect)(() => {
|
|
1359
|
-
const ref = timeoutsRef;
|
|
1360
|
-
return () => ref.current.forEach(clearTimeout);
|
|
1361
|
-
}, []);
|
|
1362
|
-
const cancelScheduled = (0, react.useCallback)(() => {
|
|
1363
|
-
timeoutsRef.current.forEach(clearTimeout);
|
|
1364
|
-
timeoutsRef.current = [];
|
|
1365
|
-
}, []);
|
|
1366
|
-
const schedule = (0, react.useCallback)((phase, delay) => {
|
|
1367
|
-
const id = setTimeout(() => setAnimPhase(phase), delay);
|
|
1368
|
-
timeoutsRef.current.push(id);
|
|
1369
|
-
}, []);
|
|
1370
|
-
return {
|
|
1371
|
-
editingSection,
|
|
1372
|
-
animPhase,
|
|
1373
|
-
showEditContent: [
|
|
1374
|
-
"slide",
|
|
1375
|
-
"fade-in",
|
|
1376
|
-
"editing",
|
|
1377
|
-
"exit-fade-out",
|
|
1378
|
-
"exit-slide"
|
|
1379
|
-
].includes(animPhase),
|
|
1380
|
-
handleEditSection: (0, react.useCallback)((section) => {
|
|
1381
|
-
cancelScheduled();
|
|
1382
|
-
setEditingSection(section);
|
|
1383
|
-
setAnimPhase("fade-out");
|
|
1384
|
-
schedule("slide", 300);
|
|
1385
|
-
schedule("fade-in", 800);
|
|
1386
|
-
schedule("editing", 1100);
|
|
1387
|
-
}, [cancelScheduled, schedule]),
|
|
1388
|
-
handleBackClick: (0, react.useCallback)(() => {
|
|
1389
|
-
cancelScheduled();
|
|
1390
|
-
setAnimPhase("exit-fade-out");
|
|
1391
|
-
schedule("exit-slide", 300);
|
|
1392
|
-
schedule("exit-fade-in", 800);
|
|
1393
|
-
const id = setTimeout(() => {
|
|
1394
|
-
setAnimPhase("idle");
|
|
1395
|
-
setEditingSection(null);
|
|
1396
|
-
}, 1100);
|
|
1397
|
-
timeoutsRef.current.push(id);
|
|
1398
|
-
}, [cancelScheduled, schedule])
|
|
1399
|
-
};
|
|
1400
|
-
}
|
|
1401
|
-
//#endregion
|
|
1402
|
-
//#region src/screens/MySiteScreen/index.tsx
|
|
1403
|
-
function MySiteScreen({ background, textColor, accentColor, padding, borderRadius, ...divProps }) {
|
|
1404
|
-
const { editingSection, animPhase, showEditContent, handleEditSection, handleBackClick } = useMySiteEditingSection();
|
|
1405
|
-
const sectionLabel = (0, react.useMemo)(() => {
|
|
1406
|
-
if (editingSection === "theme") return "Theme";
|
|
1407
|
-
if (editingSection === "buttons") return "Buttons";
|
|
1408
|
-
if (editingSection === "content") return "MySite Content";
|
|
1409
|
-
if (editingSection === "profile") return "Profile";
|
|
1410
|
-
return null;
|
|
1411
|
-
}, [editingSection]);
|
|
1412
|
-
const handleRootCrumbClick = (0, react.useCallback)((e) => {
|
|
1413
|
-
e.preventDefault();
|
|
1414
|
-
if (editingSection !== null) handleBackClick();
|
|
1415
|
-
}, [editingSection, handleBackClick]);
|
|
1416
|
-
require_ScreenHeaderContext.useScreenHeaderBreadcrumbs((0, react.useMemo)(() => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Breadcrumb, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.BreadcrumbList, {
|
|
1417
|
-
className: "text-lg",
|
|
1418
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbItem, { children: sectionLabel ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbLink, {
|
|
1419
|
-
href: "#",
|
|
1420
|
-
onClick: handleRootCrumbClick,
|
|
1421
|
-
children: "My Site"
|
|
1422
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbPage, {
|
|
1423
|
-
className: "font-semibold",
|
|
1424
|
-
children: "My Site"
|
|
1425
|
-
}) }), sectionLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbSeparator, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbItem, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.BreadcrumbPage, {
|
|
1426
|
-
className: "font-semibold",
|
|
1427
|
-
children: sectionLabel
|
|
1428
|
-
}) })] })]
|
|
1429
|
-
}) }), [sectionLabel, handleRootCrumbClick]));
|
|
1430
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1431
|
-
...divProps,
|
|
1432
|
-
className: `h-full ${divProps.className ?? ""}`,
|
|
1433
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MySiteMainView, {
|
|
1434
|
-
editingSection,
|
|
1435
|
-
animPhase,
|
|
1436
|
-
showEditContent,
|
|
1437
|
-
onEditSection: handleEditSection,
|
|
1438
|
-
onBackClick: handleBackClick
|
|
1439
|
-
})
|
|
1440
|
-
});
|
|
1441
|
-
}
|
|
1442
|
-
const mySiteScreenPropertySchema = {
|
|
1443
|
-
widgetType: "MySiteScreen",
|
|
1444
|
-
displayName: "My Site Screen",
|
|
1445
|
-
tabsConfig: [{
|
|
1446
|
-
id: "styling",
|
|
1447
|
-
label: "Styling"
|
|
1448
|
-
}],
|
|
1449
|
-
fields: []
|
|
1450
|
-
};
|
|
1451
|
-
//#endregion
|
|
1452
|
-
Object.defineProperty(exports, "MySiteScreen", {
|
|
997
|
+
});
|
|
998
|
+
Object.defineProperty(exports, "MySitePhonePreview", {
|
|
999
|
+
enumerable: true,
|
|
1000
|
+
get: function() {
|
|
1001
|
+
return MySitePhonePreview;
|
|
1002
|
+
}
|
|
1003
|
+
});
|
|
1004
|
+
Object.defineProperty(exports, "MySiteThemeEditor", {
|
|
1005
|
+
enumerable: true,
|
|
1006
|
+
get: function() {
|
|
1007
|
+
return MySiteThemeEditor;
|
|
1008
|
+
}
|
|
1009
|
+
});
|
|
1010
|
+
Object.defineProperty(exports, "MySiteVisitorDetailsCard", {
|
|
1011
|
+
enumerable: true,
|
|
1012
|
+
get: function() {
|
|
1013
|
+
return MySiteVisitorDetailsCard;
|
|
1014
|
+
}
|
|
1015
|
+
});
|
|
1016
|
+
Object.defineProperty(exports, "PortalButtonsEditor", {
|
|
1017
|
+
enumerable: true,
|
|
1018
|
+
get: function() {
|
|
1019
|
+
return PortalButtonsEditor;
|
|
1020
|
+
}
|
|
1021
|
+
});
|
|
1022
|
+
Object.defineProperty(exports, "PortalFavoritesEditor", {
|
|
1023
|
+
enumerable: true,
|
|
1024
|
+
get: function() {
|
|
1025
|
+
return PortalFavoritesEditor;
|
|
1026
|
+
}
|
|
1027
|
+
});
|
|
1028
|
+
Object.defineProperty(exports, "getContentClassName", {
|
|
1453
1029
|
enumerable: true,
|
|
1454
1030
|
get: function() {
|
|
1455
|
-
return
|
|
1031
|
+
return getContentClassName;
|
|
1456
1032
|
}
|
|
1457
1033
|
});
|
|
1458
|
-
Object.defineProperty(exports, "
|
|
1034
|
+
Object.defineProperty(exports, "getPreviewClassName", {
|
|
1459
1035
|
enumerable: true,
|
|
1460
1036
|
get: function() {
|
|
1461
|
-
return
|
|
1037
|
+
return getPreviewClassName;
|
|
1462
1038
|
}
|
|
1463
1039
|
});
|
|
1464
1040
|
|
|
1465
|
-
//# sourceMappingURL=
|
|
1041
|
+
//# sourceMappingURL=components-BKADyCYp.cjs.map
|