@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.
Files changed (115) hide show
  1. package/dist/{AppDownloadScreen-DQR40F0y.mjs → AppDownloadScreen-DPnbWP5G.mjs} +1 -1
  2. package/dist/{AppDownloadScreen-DQR40F0y.mjs.map → AppDownloadScreen-DPnbWP5G.mjs.map} +1 -1
  3. package/dist/{AppDownloadScreen-BXnl23_d.cjs → AppDownloadScreen-Og_iMsw5.cjs} +1 -1
  4. package/dist/{AppDownloadScreen-BXnl23_d.cjs.map → AppDownloadScreen-Og_iMsw5.cjs.map} +1 -1
  5. package/dist/{AppNavigationContext-C1-hd9Rw.cjs → AppNavigationContext-BDs1cOuG.cjs} +1 -1
  6. package/dist/{AppNavigationContext-C1-hd9Rw.cjs.map → AppNavigationContext-BDs1cOuG.cjs.map} +1 -1
  7. package/dist/{AppNavigationContext-Dvc0yoZF.mjs → AppNavigationContext-DNod9mf6.mjs} +1 -1
  8. package/dist/{AppNavigationContext-Dvc0yoZF.mjs.map → AppNavigationContext-DNod9mf6.mjs.map} +1 -1
  9. package/dist/{ContactsScreen-Cj0_VI0d.cjs → ContactsScreen-CZ2hrMqf.cjs} +6 -6
  10. package/dist/{ContactsScreen-Cj0_VI0d.cjs.map → ContactsScreen-CZ2hrMqf.cjs.map} +1 -1
  11. package/dist/{ContactsScreen-CMBERzKU.mjs → ContactsScreen-DuhDzRtI.mjs} +6 -6
  12. package/dist/{ContactsScreen-CMBERzKU.mjs.map → ContactsScreen-DuhDzRtI.mjs.map} +1 -1
  13. package/dist/{ContactsScreen-CH_P8WxC.cjs → ContactsScreen-Dv1SJNBo.cjs} +5 -5
  14. package/dist/{InfiniteScrollSentinel-DeIL8UkW.cjs → InfiniteScrollSentinel-BaPx1tjC.cjs} +1 -1
  15. package/dist/{InfiniteScrollSentinel-DeIL8UkW.cjs.map → InfiniteScrollSentinel-BaPx1tjC.cjs.map} +1 -1
  16. package/dist/{InfiniteScrollSentinel-B_clNL9Y.mjs → InfiniteScrollSentinel-D0XRJi51.mjs} +1 -1
  17. package/dist/{InfiniteScrollSentinel-B_clNL9Y.mjs.map → InfiniteScrollSentinel-D0XRJi51.mjs.map} +1 -1
  18. package/dist/{MessagingScreen-KYx6DSMx.cjs → MessagingScreen-BwI0RShj.cjs} +3 -3
  19. package/dist/{MessagingScreen-vb5P-7jP.mjs → MessagingScreen-DiSZ7fyd.mjs} +3 -3
  20. package/dist/{MessagingScreen-vb5P-7jP.mjs.map → MessagingScreen-DiSZ7fyd.mjs.map} +1 -1
  21. package/dist/{MessagingScreen-CCbgNRp1.cjs → MessagingScreen-WCeHWGlX.cjs} +5 -5
  22. package/dist/{MessagingScreen-CCbgNRp1.cjs.map → MessagingScreen-WCeHWGlX.cjs.map} +1 -1
  23. package/dist/{MySiteScreen-B_16cPgD.cjs → MySiteScreen-Bdd7a6Hy.cjs} +3 -2
  24. package/dist/MySiteScreen-CK84vXa9.mjs +301 -0
  25. package/dist/MySiteScreen-CK84vXa9.mjs.map +1 -0
  26. package/dist/MySiteScreen-zfajm9da.cjs +309 -0
  27. package/dist/MySiteScreen-zfajm9da.cjs.map +1 -0
  28. package/dist/{OrdersScreen-CQGCZLYf.cjs → OrdersScreen-BLs1xTv7.cjs} +4 -4
  29. package/dist/{OrdersScreen-BxaJw-Kq.cjs → OrdersScreen-BbS7Alby.cjs} +3 -3
  30. package/dist/{OrdersScreen-BxaJw-Kq.cjs.map → OrdersScreen-BbS7Alby.cjs.map} +1 -1
  31. package/dist/{OrdersScreen-CPKRShbP.mjs → OrdersScreen-b-ZC4_NI.mjs} +3 -3
  32. package/dist/{OrdersScreen-CPKRShbP.mjs.map → OrdersScreen-b-ZC4_NI.mjs.map} +1 -1
  33. package/dist/{PortalProductsApiProvider-BIZg_c4Y.mjs → PortalProductsApiProvider-BFdHFvog.mjs} +1 -1
  34. package/dist/{PortalProductsApiProvider-BIZg_c4Y.mjs.map → PortalProductsApiProvider-BFdHFvog.mjs.map} +1 -1
  35. package/dist/{PortalProductsApiProvider-DL8nl7To.cjs → PortalProductsApiProvider-CkS7OIGt.cjs} +1 -1
  36. package/dist/{PortalProductsApiProvider-DL8nl7To.cjs.map → PortalProductsApiProvider-CkS7OIGt.cjs.map} +1 -1
  37. package/dist/{ProfileScreen-BT0iys-q.cjs → ProfileScreen-BfvdQa0q.cjs} +114 -33
  38. package/dist/ProfileScreen-BfvdQa0q.cjs.map +1 -0
  39. package/dist/{ProfileScreen-CZAIUM2a.mjs → ProfileScreen-CRLf8oDe.mjs} +116 -35
  40. package/dist/ProfileScreen-CRLf8oDe.mjs.map +1 -0
  41. package/dist/{ProfileScreen-CKcdtroU.cjs → ProfileScreen-Za3ZIWPO.cjs} +4 -2
  42. package/dist/{SearchSort-CeJqRK2c.cjs → SearchSort-BP2ktxyN.cjs} +1 -1
  43. package/dist/{SearchSort-CeJqRK2c.cjs.map → SearchSort-BP2ktxyN.cjs.map} +1 -1
  44. package/dist/{SearchSort-CFHU38Er.mjs → SearchSort-CokMCrhy.mjs} +1 -1
  45. package/dist/{SearchSort-CFHU38Er.mjs.map → SearchSort-CokMCrhy.mjs.map} +1 -1
  46. package/dist/{ShareablesScreen-sieWBlAl.mjs → ShareablesScreen-BZZ-RT71.mjs} +8 -8
  47. package/dist/{ShareablesScreen-sieWBlAl.mjs.map → ShareablesScreen-BZZ-RT71.mjs.map} +1 -1
  48. package/dist/{ShareablesScreen-A69L0Nok.cjs → ShareablesScreen-BxOKbuuU.cjs} +20 -20
  49. package/dist/{ShareablesScreen-A69L0Nok.cjs.map → ShareablesScreen-BxOKbuuU.cjs.map} +1 -1
  50. package/dist/{ShareablesScreen-BUYG-mjj.cjs → ShareablesScreen-CsDxLODp.cjs} +7 -7
  51. package/dist/{ShopScreen-sLUTgIcQ.mjs → ShopScreen-BG1pxd2D.mjs} +4 -4
  52. package/dist/{ShopScreen-sLUTgIcQ.mjs.map → ShopScreen-BG1pxd2D.mjs.map} +1 -1
  53. package/dist/{ShopScreen-DVpCo-OV.cjs → ShopScreen-BigHJ5wE.cjs} +3 -3
  54. package/dist/{ShopScreen-Dm85_rMp.cjs → ShopScreen-S6rBaoWM.cjs} +4 -4
  55. package/dist/{ShopScreen-Dm85_rMp.cjs.map → ShopScreen-S6rBaoWM.cjs.map} +1 -1
  56. package/dist/{SubscriptionsScreen-DrDSwMXS.cjs → SubscriptionsScreen-B88_dLfE.cjs} +9 -9
  57. package/dist/{SubscriptionsScreen-DrDSwMXS.cjs.map → SubscriptionsScreen-B88_dLfE.cjs.map} +1 -1
  58. package/dist/{SubscriptionsScreen-CXM2zmF7.mjs → SubscriptionsScreen-DK9-h3Cz.mjs} +8 -8
  59. package/dist/{SubscriptionsScreen-CXM2zmF7.mjs.map → SubscriptionsScreen-DK9-h3Cz.mjs.map} +1 -1
  60. package/dist/{SubscriptionsScreen-t5wtDGfB.cjs → SubscriptionsScreen-dhnfYn4L.cjs} +5 -5
  61. package/dist/{UpgradeScreen-DUvg-WZv.cjs → UpgradeScreen-Bl9lb32K.cjs} +1 -1
  62. package/dist/{UpgradeScreen-DAKe_hiv.cjs → UpgradeScreen-C-hFDAR2.cjs} +1 -1
  63. package/dist/{UpgradeScreen-DAKe_hiv.cjs.map → UpgradeScreen-C-hFDAR2.cjs.map} +1 -1
  64. package/dist/{UpgradeScreen-DnGnWVTf.mjs → UpgradeScreen-X6j0_625.mjs} +1 -1
  65. package/dist/{UpgradeScreen-DnGnWVTf.mjs.map → UpgradeScreen-X6j0_625.mjs.map} +1 -1
  66. package/dist/{MySiteScreen-CUyJteDm.cjs → components-BKADyCYp.cjs} +42 -466
  67. package/dist/components-BKADyCYp.cjs.map +1 -0
  68. package/dist/{MySiteScreen-CN0ZDBgy.mjs → components-CjgEvBYG.mjs} +6 -470
  69. package/dist/components-CjgEvBYG.mjs.map +1 -0
  70. package/dist/{dist-PbA1vxAz.mjs → dist-BstXVe25.mjs} +1 -1
  71. package/dist/{dist-PbA1vxAz.mjs.map → dist-BstXVe25.mjs.map} +1 -1
  72. package/dist/{dist-o2cjwzIa.mjs → dist-CTLDCXCc.mjs} +2 -2
  73. package/dist/{dist-o2cjwzIa.mjs.map → dist-CTLDCXCc.mjs.map} +1 -1
  74. package/dist/{dist-BQZkLGL6.cjs → dist-DJAHGHHi.cjs} +1 -19
  75. package/dist/{dist-BQZkLGL6.cjs.map → dist-DJAHGHHi.cjs.map} +1 -1
  76. package/dist/{dist-DbRTQ2QF.cjs → dist-D_3_ZuC5.cjs} +1 -1
  77. package/dist/{dist-DbRTQ2QF.cjs.map → dist-D_3_ZuC5.cjs.map} +1 -1
  78. package/dist/{dist-myuZC8sf.cjs → dist-vhBaFZ9L.cjs} +2 -2
  79. package/dist/{dist-myuZC8sf.cjs.map → dist-vhBaFZ9L.cjs.map} +1 -1
  80. package/dist/{es-UfEBhcZD.cjs → es-B5heQ57j.cjs} +1 -1
  81. package/dist/{es-UfEBhcZD.cjs.map → es-B5heQ57j.cjs.map} +1 -1
  82. package/dist/{fluid-pay-api-adapter-eNT8m0xB.mjs → fluid-pay-api-adapter-CJ7-I8k-.mjs} +673 -381
  83. package/dist/fluid-pay-api-adapter-CJ7-I8k-.mjs.map +1 -0
  84. package/dist/{fluid-pay-api-adapter-BszgrFL6.cjs → fluid-pay-api-adapter-D63KLi5c.cjs} +700 -378
  85. package/dist/fluid-pay-api-adapter-D63KLi5c.cjs.map +1 -0
  86. package/dist/{format-CytB2M00.cjs → format-CLUjV1oR.cjs} +1 -1
  87. package/dist/{format-CytB2M00.cjs.map → format-CLUjV1oR.cjs.map} +1 -1
  88. package/dist/index.cjs +123 -172
  89. package/dist/index.cjs.map +1 -1
  90. package/dist/index.d.cts.map +1 -1
  91. package/dist/index.d.mts.map +1 -1
  92. package/dist/index.mjs +122 -171
  93. package/dist/index.mjs.map +1 -1
  94. package/dist/{order-status-badge-DHyaK6mU.cjs → order-status-badge-BKvLeVsM.cjs} +3 -3
  95. package/dist/{order-status-badge-DHyaK6mU.cjs.map → order-status-badge-BKvLeVsM.cjs.map} +1 -1
  96. package/dist/{order-status-badge-Dmo8lLnt.mjs → order-status-badge-xuJ732eH.mjs} +3 -3
  97. package/dist/{order-status-badge-Dmo8lLnt.mjs.map → order-status-badge-xuJ732eH.mjs.map} +1 -1
  98. package/dist/{query-keys-oQKvV4jp.mjs → query-keys-8SVs82aF.mjs} +1 -1
  99. package/dist/{query-keys-elu0svUd.cjs.map → query-keys-8SVs82aF.mjs.map} +1 -1
  100. package/dist/{query-keys-elu0svUd.cjs → query-keys-e9EEoWxN.cjs} +1 -1
  101. package/dist/{query-keys-oQKvV4jp.mjs.map → query-keys-e9EEoWxN.cjs.map} +1 -1
  102. package/dist/{sortable.esm-C8G00cCP.mjs → sortable.esm-C8riJ_zv.mjs} +2 -14
  103. package/dist/{sortable.esm-C8G00cCP.mjs.map → sortable.esm-C8riJ_zv.mjs.map} +1 -1
  104. package/dist/{use-account-C1X-VLY-.cjs → use-account-D6Z9hkDX.cjs} +2 -2
  105. package/dist/{use-account-C1X-VLY-.cjs.map → use-account-D6Z9hkDX.cjs.map} +1 -1
  106. package/dist/{use-account-C76sphlu.mjs → use-account-DsTz5BlS.mjs} +2 -2
  107. package/dist/{use-account-C76sphlu.mjs.map → use-account-DsTz5BlS.mjs.map} +1 -1
  108. package/package.json +18 -17
  109. package/styles/packages.css +1 -0
  110. package/dist/MySiteScreen-CN0ZDBgy.mjs.map +0 -1
  111. package/dist/MySiteScreen-CUyJteDm.cjs.map +0 -1
  112. package/dist/ProfileScreen-BT0iys-q.cjs.map +0 -1
  113. package/dist/ProfileScreen-CZAIUM2a.mjs.map +0 -1
  114. package/dist/fluid-pay-api-adapter-BszgrFL6.cjs.map +0 -1
  115. 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-BszgrFL6.cjs");
8
- const require_SubscriptionsScreen = require("./SubscriptionsScreen-DrDSwMXS.cjs");
9
- require("./SearchSort-CeJqRK2c.cjs");
10
- require("./InfiniteScrollSentinel-DeIL8UkW.cjs");
11
- require("./order-status-badge-DHyaK6mU.cjs");
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-DAKe_hiv.cjs");
3
+ const require_UpgradeScreen = require("./UpgradeScreen-C-hFDAR2.cjs");
4
4
  exports.UpgradeScreen = require_UpgradeScreen.UpgradeScreen;
5
5
  exports.upgradeScreenPropertySchema = require_UpgradeScreen.upgradeScreenPropertySchema;
@@ -133,4 +133,4 @@ Object.defineProperty(exports, "upgradeScreenPropertySchema", {
133
133
  }
134
134
  });
135
135
 
136
- //# sourceMappingURL=UpgradeScreen-DAKe_hiv.cjs.map
136
+ //# sourceMappingURL=UpgradeScreen-C-hFDAR2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeScreen-DAKe_hiv.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
+ {"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"}
@@ -126,4 +126,4 @@ function UpgradeScreen() {
126
126
  //#endregion
127
127
  export { UpgradeScreen_exports as t };
128
128
 
129
- //# sourceMappingURL=UpgradeScreen-DnGnWVTf.mjs.map
129
+ //# sourceMappingURL=UpgradeScreen-X6j0_625.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeScreen-DnGnWVTf.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
+ {"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
- const require_chunk = require("./chunk-9hOWP6kD.cjs");
1
+ require("./chunk-9hOWP6kD.cjs");
2
2
  const require_src = require("./src-uhf6Szlw.cjs");
3
- const require_ScreenHeaderContext = require("./ScreenHeaderContext-oIu5Bvhs.cjs");
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
- //#region ../../mysite/ui/src/portal/components/MySiteProfileForm.tsx
995
- function MySiteProfileForm({ onBack, onToast, onRefreshPreview, onUploadPhoto, avatarUrl, userName, userInitial }) {
996
- const { data: profile, isLoading: isProfileLoading } = require_dist$3.usePortalMySiteProfile();
997
- const updateProfileMutation = require_dist$3.usePortalUpdateProfile();
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
- function defaultToast(message, type) {
1186
- require_src.fluidToast({
1187
- title: message,
1188
- type
1189
- });
1190
- }
1191
- function MySiteMainView({ editingSection, animPhase, showEditContent, onEditSection, onBackClick }) {
1192
- const { data: profile, isLoading: isProfileLoading } = require_dist$3.usePortalMySiteProfile();
1193
- const { data: themes = [] } = require_dist$3.usePortalMySiteThemes();
1194
- const updateSettingsMutation = require_dist$3.usePortalUpdateSettings();
1195
- const [previewKey, setPreviewKey] = (0, react.useState)(0);
1196
- const refreshPreview = (0, react.useCallback)(() => setPreviewKey((k) => k + 1), []);
1197
- const [selectedThemeId, setSelectedThemeId] = (0, react.useState)(null);
1198
- const resolvedThemeId = selectedThemeId ?? profile?.theme_id ?? themes.find((t) => t.name === "Default")?.id ?? themes[0]?.id ?? null;
1199
- const themeName = themes.find((t) => t.id === resolvedThemeId)?.name ?? "Default";
1200
- const mysiteUrl = profile?.mysite_url ?? "";
1201
- const displayUrl = mysiteUrl ? mysiteUrl.replace(/^https?:\/\//, "") : "";
1202
- const views = profile?.mysite_views ?? 0;
1203
- const leads = profile?.mysite_leads ?? 0;
1204
- const handleSelectTheme = (0, react.useCallback)((theme) => {
1205
- if (theme.id === resolvedThemeId) return;
1206
- const previousThemeId = selectedThemeId;
1207
- setSelectedThemeId(theme.id);
1208
- updateSettingsMutation.mutate({ theme_id: theme.id }, {
1209
- onSuccess: () => {
1210
- defaultToast(`Theme changed to "${theme.name}"`, "success");
1211
- refreshPreview();
1212
- },
1213
- onError: () => {
1214
- setSelectedThemeId(previousThemeId);
1215
- defaultToast("Failed to update theme", "error");
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 MySiteScreen;
1031
+ return getContentClassName;
1456
1032
  }
1457
1033
  });
1458
- Object.defineProperty(exports, "mySiteScreenPropertySchema", {
1034
+ Object.defineProperty(exports, "getPreviewClassName", {
1459
1035
  enumerable: true,
1460
1036
  get: function() {
1461
- return mySiteScreenPropertySchema;
1037
+ return getPreviewClassName;
1462
1038
  }
1463
1039
  });
1464
1040
 
1465
- //# sourceMappingURL=MySiteScreen-CUyJteDm.cjs.map
1041
+ //# sourceMappingURL=components-BKADyCYp.cjs.map