@fluid-app/portal-sdk 0.1.340 → 0.1.341
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/{AddressAutocompleteInput-4OS-oYis.mjs → AddressAutocompleteInput-BQ7HCDqS.mjs} +17 -17
- package/dist/AddressAutocompleteInput-BQ7HCDqS.mjs.map +1 -0
- package/dist/{AddressAutocompleteInput-CZITNL-n.cjs → AddressAutocompleteInput-C0ns8N-l.cjs} +17 -17
- package/dist/AddressAutocompleteInput-C0ns8N-l.cjs.map +1 -0
- package/dist/{AppDownloadScreen-BYjlFEVq.cjs → AppDownloadScreen-DqqUBpS-.cjs} +5 -5
- package/dist/AppDownloadScreen-DqqUBpS-.cjs.map +1 -0
- package/dist/{AppDownloadScreen-BkPXQ6HD.mjs → AppDownloadScreen-ZUoc8X2D.mjs} +5 -5
- package/dist/AppDownloadScreen-ZUoc8X2D.mjs.map +1 -0
- package/dist/{CardWidget-Jv6HiiK-.cjs → CardWidget--S5FBquC.cjs} +2 -2
- package/dist/{CardWidget-Jv6HiiK-.cjs.map → CardWidget--S5FBquC.cjs.map} +1 -1
- package/dist/{CardWidget-C9UbLrzZ.mjs → CardWidget-ChfurL_z.mjs} +2 -2
- package/dist/{CardWidget-C9UbLrzZ.mjs.map → CardWidget-ChfurL_z.mjs.map} +1 -1
- package/dist/{CardWidget-Wj7aNAAe.cjs → CardWidget-DsfLoyup.cjs} +2 -2
- package/dist/{ContactsScreen-BDOyYGyR.cjs → ContactsScreen-B3Ena0O7.cjs} +2 -2
- package/dist/{ContactsScreen-6x_Y2HBg.cjs → ContactsScreen-CiegGc50.cjs} +18 -18
- package/dist/ContactsScreen-CiegGc50.cjs.map +1 -0
- package/dist/{ContactsScreen-CU5_SYVK.mjs → ContactsScreen-Cwyt5qIf.mjs} +18 -18
- package/dist/ContactsScreen-Cwyt5qIf.mjs.map +1 -0
- package/dist/{ContainerWidget-B0WqVKej.mjs → ContainerWidget-BHWPtBmF.mjs} +2 -2
- package/dist/{ContainerWidget-B0WqVKej.mjs.map → ContainerWidget-BHWPtBmF.mjs.map} +1 -1
- package/dist/{ContainerWidget-BJys0vji.cjs → ContainerWidget-Cf_D4TAi.cjs} +2 -2
- package/dist/{ContainerWidget-BJys0vji.cjs.map → ContainerWidget-Cf_D4TAi.cjs.map} +1 -1
- package/dist/{ContainerWidget-BPoDy9wl.cjs → ContainerWidget-CyDVJu83.cjs} +3 -3
- package/dist/{EmbedWidget-BjLKHqCD.cjs → EmbedWidget-B1gWxgsn.cjs} +2 -2
- package/dist/EmbedWidget-B1gWxgsn.cjs.map +1 -0
- package/dist/{EmbedWidget-DwYcDOSr.mjs → EmbedWidget-JVbp9wAL.mjs} +2 -2
- package/dist/EmbedWidget-JVbp9wAL.mjs.map +1 -0
- package/dist/{FluidProvider-CYgSHMUd.cjs → FluidProvider-BFU7ermL.cjs} +23 -23
- package/dist/{FluidProvider-CYgSHMUd.cjs.map → FluidProvider-BFU7ermL.cjs.map} +1 -1
- package/dist/{FluidProvider-rLNjrHI9.mjs → FluidProvider-BqJ-t2bW.mjs} +23 -23
- package/dist/{FluidProvider-rLNjrHI9.mjs.map → FluidProvider-BqJ-t2bW.mjs.map} +1 -1
- package/dist/{LayoutWidget-COFyne-B.cjs → LayoutWidget-3G-w-YLz.cjs} +2 -2
- package/dist/{LayoutWidget-_f70Meea.cjs → LayoutWidget-CG-dWz_c.cjs} +2 -2
- package/dist/{LayoutWidget-_f70Meea.cjs.map → LayoutWidget-CG-dWz_c.cjs.map} +1 -1
- package/dist/{LayoutWidget-CUG5HXPH.mjs → LayoutWidget-CrZG6Ipw.mjs} +2 -2
- package/dist/{LayoutWidget-CUG5HXPH.mjs.map → LayoutWidget-CrZG6Ipw.mjs.map} +1 -1
- package/dist/{MessagingScreen-CKPKnmdA.cjs → MessagingScreen-7BBNidBx.cjs} +15 -15
- package/dist/{MessagingScreen-DEKQhSxk.mjs → MessagingScreen-BIWRCS3T.mjs} +15 -15
- package/dist/{MessagingScreen-C_VnN2yj.cjs → MessagingScreen-D_wVko-i.cjs} +2 -2
- package/dist/{MessagingScreen-C_VnN2yj.cjs.map → MessagingScreen-D_wVko-i.cjs.map} +1 -1
- package/dist/{MessagingScreen-Bn1jNjdF.mjs → MessagingScreen-ZwSPp6zu.mjs} +2 -2
- package/dist/{MessagingScreen-Bn1jNjdF.mjs.map → MessagingScreen-ZwSPp6zu.mjs.map} +1 -1
- package/dist/{MySiteScreen-BLI39L5d.cjs → MySiteScreen-17KRkcj7.cjs} +29 -29
- package/dist/MySiteScreen-17KRkcj7.cjs.map +1 -0
- package/dist/{MySiteScreen-h7lBk3gC.cjs → MySiteScreen-BdBnDI6s.cjs} +1 -1
- package/dist/{MySiteScreen-B5jblKuW.mjs → MySiteScreen-BlTSt7a0.mjs} +29 -29
- package/dist/MySiteScreen-BlTSt7a0.mjs.map +1 -0
- package/dist/{MySiteWidget-CAj-6hXM.cjs → MySiteWidget-23lGcDO1.cjs} +3 -3
- package/dist/MySiteWidget-23lGcDO1.cjs.map +1 -0
- package/dist/{MySiteWidget-D0ZQpY-e.mjs → MySiteWidget-BXO8rmnf.mjs} +3 -3
- package/dist/{MySiteWidget-D0ZQpY-e.mjs.map → MySiteWidget-BXO8rmnf.mjs.map} +1 -1
- package/dist/{NestedWidget-D1iDgWh8.cjs → NestedWidget-CZGOZbpZ.cjs} +5 -5
- package/dist/NestedWidget-CZGOZbpZ.cjs.map +1 -0
- package/dist/{NestedWidget-BISpn0HM.cjs → NestedWidget-Cv8h-u5K.cjs} +1 -1
- package/dist/{NestedWidget-DPC6Y52o.mjs → NestedWidget-DuNuNaeT.mjs} +5 -5
- package/dist/NestedWidget-DuNuNaeT.mjs.map +1 -0
- package/dist/{OrdersScreen-BOu-b93J.mjs → OrdersScreen-BkUvISL0.mjs} +15 -15
- package/dist/{OrdersScreen-BX3Tp0W6.mjs → OrdersScreen-DgriwQBo.mjs} +4 -4
- package/dist/OrdersScreen-DgriwQBo.mjs.map +1 -0
- package/dist/{OrdersScreen-C0-X_pGG.cjs → OrdersScreen-TGNvFpjj.cjs} +4 -4
- package/dist/OrdersScreen-TGNvFpjj.cjs.map +1 -0
- package/dist/{OrdersScreen-CyT1TpjL.cjs → OrdersScreen-t1EwXPZx.cjs} +15 -15
- package/dist/{ProfileScreen-B1OMNJrQ.mjs → ProfileScreen-Bw8W8nxK.mjs} +4 -4
- package/dist/{ProfileScreen-B1OMNJrQ.mjs.map → ProfileScreen-Bw8W8nxK.mjs.map} +1 -1
- package/dist/{ProfileScreen-DEYfahoM.mjs → ProfileScreen-CArZ7TAm.mjs} +16 -16
- package/dist/{ProfileScreen-Dshb7RM2.cjs → ProfileScreen-CP5ijd_t.cjs} +4 -4
- package/dist/{ProfileScreen-Dshb7RM2.cjs.map → ProfileScreen-CP5ijd_t.cjs.map} +1 -1
- package/dist/{ProfileScreen-BRbz69S3.cjs → ProfileScreen-DXlKK4gO.cjs} +16 -16
- package/dist/{RecentActivityWidget-CVQpo1jC.mjs → RecentActivityWidget-ClgOlTXl.mjs} +3 -3
- package/dist/RecentActivityWidget-ClgOlTXl.mjs.map +1 -0
- package/dist/{RecentActivityWidget-DnGybdc3.cjs → RecentActivityWidget-DZGKRR5x.cjs} +3 -3
- package/dist/RecentActivityWidget-DZGKRR5x.cjs.map +1 -0
- package/dist/{ScreenRenderer-BYiZunHL.cjs → ScreenRenderer-CLDJUinO.cjs} +2 -2
- package/dist/{ScreenRenderer-BYiZunHL.cjs.map → ScreenRenderer-CLDJUinO.cjs.map} +1 -1
- package/dist/{ScreenRenderer-1ZCNOyIb.mjs → ScreenRenderer-TobkTBMC.mjs} +2 -2
- package/dist/{ScreenRenderer-1ZCNOyIb.mjs.map → ScreenRenderer-TobkTBMC.mjs.map} +1 -1
- package/dist/{SearchSort-K0-ffUoD.cjs → SearchSort-CDuQPacI.cjs} +2 -2
- package/dist/{SearchSort-K0-ffUoD.cjs.map → SearchSort-CDuQPacI.cjs.map} +1 -1
- package/dist/{SearchSort-CObUt78n.mjs → SearchSort-CMUL0qt3.mjs} +2 -2
- package/dist/{SearchSort-CObUt78n.mjs.map → SearchSort-CMUL0qt3.mjs.map} +1 -1
- package/dist/{ShareablesScreen-aafzr3Vs.mjs → ShareablesScreen-B6Qs0xXn.mjs} +116 -116
- package/dist/ShareablesScreen-B6Qs0xXn.mjs.map +1 -0
- package/dist/{ShareablesScreen-COVW0ikb.cjs → ShareablesScreen-BAOW6RIK.cjs} +116 -116
- package/dist/ShareablesScreen-BAOW6RIK.cjs.map +1 -0
- package/dist/{ShareablesScreen-CNAem5rt.mjs → ShareablesScreen-C3K5ed-X.mjs} +2 -2
- package/dist/{ShareablesScreen-BZv1NXJV.cjs → ShareablesScreen-C3juoUMG.cjs} +2 -2
- package/dist/{ShopScreen-fcy9uJ3Z.cjs → ShopScreen-BjuLPVrk.cjs} +13 -13
- package/dist/ShopScreen-BjuLPVrk.cjs.map +1 -0
- package/dist/{ShopScreen-Bhn_bZ8O.mjs → ShopScreen-CtqHSaUW.mjs} +15 -15
- package/dist/{ShopScreen-CaEKFEGZ.cjs → ShopScreen-CwGh-q7J.cjs} +15 -15
- package/dist/{ShopScreen-dvruZcuz.mjs → ShopScreen-DNJ4Geoq.mjs} +13 -13
- package/dist/ShopScreen-DNJ4Geoq.mjs.map +1 -0
- package/dist/{ShopWidget-BZ48BUxp.cjs → ShopWidget-BAi2p8DP.cjs} +8 -8
- package/dist/ShopWidget-BAi2p8DP.cjs.map +1 -0
- package/dist/{ShopWidget-ZmhMoVmK.mjs → ShopWidget-D9-DhKP4.mjs} +8 -8
- package/dist/ShopWidget-D9-DhKP4.mjs.map +1 -0
- package/dist/{ShopWidget-DmlseAqM.cjs → ShopWidget-_T-ycRq1.cjs} +2 -2
- package/dist/{SubscriptionsScreen-BYQrZ2aR.mjs → SubscriptionsScreen-B55dK8Qb.mjs} +16 -16
- package/dist/{SubscriptionsScreen-CfxeuHVV.mjs → SubscriptionsScreen-CVKyyzbR.mjs} +23 -23
- package/dist/SubscriptionsScreen-CVKyyzbR.mjs.map +1 -0
- package/dist/{SubscriptionsScreen-Bupuf-0D.cjs → SubscriptionsScreen-Dz1PGO2z.cjs} +23 -23
- package/dist/SubscriptionsScreen-Dz1PGO2z.cjs.map +1 -0
- package/dist/{SubscriptionsScreen-BoSpOiOm.cjs → SubscriptionsScreen-TAXj2UXa.cjs} +16 -16
- package/dist/{TableWidget-Dyq8JXbd.cjs → TableWidget-C4F1IEKt.cjs} +1 -1
- package/dist/{TableWidget-fbsVsyqZ.mjs → TableWidget-CpHI9CGQ.mjs} +3 -3
- package/dist/TableWidget-CpHI9CGQ.mjs.map +1 -0
- package/dist/{TableWidget-wQkzw7Jg.cjs → TableWidget-RK0B52qT.cjs} +3 -3
- package/dist/TableWidget-RK0B52qT.cjs.map +1 -0
- package/dist/{ToDoWidget-BPh5ZLCT.cjs → ToDoWidget-B1uzfuI5.cjs} +2 -2
- package/dist/{ToDoWidget-1_JCx9X7.mjs → ToDoWidget-BaWksZpJ.mjs} +5 -5
- package/dist/{ToDoWidget-1_JCx9X7.mjs.map → ToDoWidget-BaWksZpJ.mjs.map} +1 -1
- package/dist/{ToDoWidget-1ZaXZTi4.cjs → ToDoWidget-C03kvBE-.cjs} +5 -5
- package/dist/{ToDoWidget-1ZaXZTi4.cjs.map → ToDoWidget-C03kvBE-.cjs.map} +1 -1
- package/dist/index.cjs +50 -50
- 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 +50 -50
- package/dist/index.mjs.map +1 -1
- package/dist/{task-composer-form-2z5Qk6US.cjs → task-composer-form-BEZGTBBZ.cjs} +2 -2
- package/dist/{task-composer-form-2z5Qk6US.cjs.map → task-composer-form-BEZGTBBZ.cjs.map} +1 -1
- package/dist/{task-composer-form-B3eR9kfb.mjs → task-composer-form-D_Pbl6qk.mjs} +2 -2
- package/dist/{task-composer-form-B3eR9kfb.mjs.map → task-composer-form-D_Pbl6qk.mjs.map} +1 -1
- package/package.json +15 -15
- package/dist/AddressAutocompleteInput-4OS-oYis.mjs.map +0 -1
- package/dist/AddressAutocompleteInput-CZITNL-n.cjs.map +0 -1
- package/dist/AppDownloadScreen-BYjlFEVq.cjs.map +0 -1
- package/dist/AppDownloadScreen-BkPXQ6HD.mjs.map +0 -1
- package/dist/ContactsScreen-6x_Y2HBg.cjs.map +0 -1
- package/dist/ContactsScreen-CU5_SYVK.mjs.map +0 -1
- package/dist/EmbedWidget-BjLKHqCD.cjs.map +0 -1
- package/dist/EmbedWidget-DwYcDOSr.mjs.map +0 -1
- package/dist/MySiteScreen-B5jblKuW.mjs.map +0 -1
- package/dist/MySiteScreen-BLI39L5d.cjs.map +0 -1
- package/dist/MySiteWidget-CAj-6hXM.cjs.map +0 -1
- package/dist/NestedWidget-D1iDgWh8.cjs.map +0 -1
- package/dist/NestedWidget-DPC6Y52o.mjs.map +0 -1
- package/dist/OrdersScreen-BX3Tp0W6.mjs.map +0 -1
- package/dist/OrdersScreen-C0-X_pGG.cjs.map +0 -1
- package/dist/RecentActivityWidget-CVQpo1jC.mjs.map +0 -1
- package/dist/RecentActivityWidget-DnGybdc3.cjs.map +0 -1
- package/dist/ShareablesScreen-COVW0ikb.cjs.map +0 -1
- package/dist/ShareablesScreen-aafzr3Vs.mjs.map +0 -1
- package/dist/ShopScreen-dvruZcuz.mjs.map +0 -1
- package/dist/ShopScreen-fcy9uJ3Z.cjs.map +0 -1
- package/dist/ShopWidget-BZ48BUxp.cjs.map +0 -1
- package/dist/ShopWidget-ZmhMoVmK.mjs.map +0 -1
- package/dist/SubscriptionsScreen-Bupuf-0D.cjs.map +0 -1
- package/dist/SubscriptionsScreen-CfxeuHVV.mjs.map +0 -1
- package/dist/TableWidget-fbsVsyqZ.mjs.map +0 -1
- package/dist/TableWidget-wQkzw7Jg.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppDownloadScreen-DqqUBpS-.cjs","names":["createTranslationContext","ExternalLink","AppDownloadScreen","createDomainTranslations","createStaticDictAdapter","useActiveLocale","useDomainDict","useStore","AppDownloadScreenUI"],"sources":["../../app-download-ui/src/translation-api-context.ts","../../app-download-ui/src/components/AppStoreButtons.tsx","../../app-download-ui/src/components/QrCodeSection.tsx","../../app-download-ui/src/components/ImageSection.tsx","../../app-download-ui/src/lib/cn.ts","../../app-download-ui/src/components/AppDownloadScreen.tsx","../../app-download-ui/src/translation-dictionary.ts","../../app-download-ui/src/translation-adapter.ts","../src/providers/AppDownloadTranslationBridge.tsx","../src/screens/AppDownloadScreen.tsx"],"sourcesContent":["import { createTranslationContext } from \"@fluid-app/i18n/translation-api-context-factory\";\nimport type { AppDownloadDict } from \"./translation-dictionary\";\n\nconst { Provider, useTranslation } =\n createTranslationContext<AppDownloadDict>(\"AppDownload\");\n\nexport const AppDownloadTranslationProvider = Provider;\nexport const useAppDownloadTranslation = useTranslation;\n","import { ExternalLink } from \"lucide-react\";\nimport { useAppDownloadTranslation } from \"../translation-api-context\";\n\nexport interface AppStoreButtonsProps {\n appstoreUrl: string;\n playstoreUrl?: string;\n}\n\nfunction AppleIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 384 512\"\n fill=\"currentColor\"\n className=\"size-5\"\n >\n <path d=\"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-62.1 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\" />\n </svg>\n );\n}\n\nfunction GooglePlayIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n fill=\"currentColor\"\n className=\"size-5\"\n >\n <path d=\"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\" />\n </svg>\n );\n}\n\nexport function AppStoreButtons({\n appstoreUrl,\n playstoreUrl,\n}: AppStoreButtonsProps) {\n const { t } = useAppDownloadTranslation();\n\n return (\n <div\n className={`grid gap-4 ${playstoreUrl ? \"grid-cols-1 sm:grid-cols-2\" : \"grid-cols-1\"}`}\n >\n <a\n href={appstoreUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <AppleIcon />\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"open_app_store\")}\n </div>\n </div>\n <div className=\"flex items-start\">\n <ExternalLink className=\"size-4\" />\n </div>\n </div>\n </a>\n\n {playstoreUrl && (\n <a\n href={playstoreUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <GooglePlayIcon />\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"open_play_store\")}\n </div>\n </div>\n <div className=\"flex items-start\">\n <ExternalLink className=\"size-4\" />\n </div>\n </div>\n </a>\n )}\n </div>\n );\n}\n","import { useAppDownloadTranslation } from \"../translation-api-context\";\n\nexport interface QrCodeSectionProps {\n companyId: number;\n}\n\nexport function QrCodeSection({ companyId }: QrCodeSectionProps) {\n const { t } = useAppDownloadTranslation();\n const redirectUrl = `https://api.fluid.app/mobile_app_download/${companyId}`;\n const qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(redirectUrl)}`;\n\n return (\n <a\n href={redirectUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex items-end justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"scan_to_download\")}\n </div>\n </div>\n <div className=\"flex\">\n <img\n src={qrCodeUrl}\n alt={t(\"qr_code_alt\")}\n className=\"size-16\"\n loading=\"lazy\"\n />\n </div>\n </div>\n </a>\n );\n}\n","import { useAppDownloadTranslation } from \"../translation-api-context\";\n\nconst DEFAULT_IMAGE =\n \"https://assets.fluid.app/fluid-admin/images/we-commerce/iphone_product.png\";\n\nconst DEFAULT_LOGO =\n \"https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png\";\n\nexport interface ImageSectionProps {\n logoUrl?: string | null;\n screenshotUrl?: string | null;\n appName?: string;\n}\n\nexport function ImageSection({\n logoUrl,\n screenshotUrl,\n appName,\n}: ImageSectionProps) {\n const { t } = useAppDownloadTranslation();\n\n return (\n <div className=\"flex flex-col overflow-hidden\">\n <div className=\"-mb-px flex flex-1 flex-col\">\n <div className=\"flex h-20 px-3 pt-8\">\n <img\n src={logoUrl || DEFAULT_LOGO}\n alt={appName ?? t(\"default_app_name\")}\n width={150}\n height={150}\n className=\"object-contain\"\n />\n </div>\n <div\n className={\n screenshotUrl\n ? \"mt-8 flex flex-1 items-end justify-start\"\n : \"-ml-20 flex flex-1 items-end justify-start\"\n }\n >\n <img\n src={screenshotUrl || DEFAULT_IMAGE}\n alt={t(\"mobile_app_screenshot_alt\")}\n width={480}\n height={500}\n className=\"h-full w-auto object-cover\"\n />\n </div>\n </div>\n </div>\n );\n}\n","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 { AppStoreButtons } from \"./AppStoreButtons\";\nimport { QrCodeSection } from \"./QrCodeSection\";\nimport { ImageSection } from \"./ImageSection\";\nimport { cn } from \"../lib/cn\";\nimport { useAppDownloadTranslation } from \"../translation-api-context\";\n\nconst DEFAULT_APPSTORE_URL =\n \"https://apps.apple.com/app/wecommerce/id1564463740\";\nconst DEFAULT_PLAYSTORE_URL =\n \"https://play.google.com/store/apps/details?id=com.fluid.crm\";\n\nexport interface AppDownloadScreenProps {\n companyId: number;\n appstoreUrl?: string | null;\n playstoreUrl?: string | null;\n logoUrl?: string | null;\n screenshotUrl?: string | null;\n appName?: string;\n className?: string;\n}\n\nexport function AppDownloadScreen({\n companyId,\n appstoreUrl,\n playstoreUrl,\n logoUrl,\n screenshotUrl,\n appName,\n className,\n}: AppDownloadScreenProps) {\n const { t } = useAppDownloadTranslation();\n const resolvedAppstoreUrl = appstoreUrl?.trim() || DEFAULT_APPSTORE_URL;\n const resolvedPlaystoreUrl = playstoreUrl?.trim() || DEFAULT_PLAYSTORE_URL;\n\n return (\n <div\n className={cn(\"flex h-full items-center justify-center p-4\", className)}\n >\n <div className=\"bg-muted relative mx-4 w-full max-w-6xl overflow-hidden rounded-xl px-6 shadow-xl\">\n <div className=\"grid h-150 w-full grid-cols-1 lg:grid-cols-2\">\n {/* Left side - Images */}\n <ImageSection\n logoUrl={logoUrl}\n screenshotUrl={screenshotUrl}\n appName={appName}\n />\n\n {/* Right side - Content */}\n <div className=\"space-y-2 pt-8 pb-8\">\n <h1 className=\"mt-12 text-left text-[32px] leading-tight font-black text-gray-900\">\n {t(\"heading_line_1\")}\n </h1>\n <h1 className=\"-mt-2 text-left text-[32px] leading-tight font-black text-gray-900\">\n {t(\"heading_line_2\")}\n </h1>\n <p className=\"-mt-1 text-left text-[14px] leading-relaxed text-gray-600\">\n {t(\"description\")}\n </p>\n\n <h3 className=\"mt-16 text-left text-[12px] font-bold text-gray-900\">\n {t(\"download_the_app\")}\n </h3>\n\n <AppStoreButtons\n appstoreUrl={resolvedAppstoreUrl}\n playstoreUrl={resolvedPlaystoreUrl}\n />\n\n <QrCodeSection companyId={companyId} />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","export const appDownloadEn = {\n heading_line_1: \"EVERYTHING YOU NEED\",\n heading_line_2: \"AT YOUR FINGERTIPS\",\n description:\n \"Everything you need at your fingertips. Run your business from one place while on the go. Share, message, sell, and manage from the mobile app.\",\n download_the_app: \"Download the App\",\n open_app_store: \"Open App Store\",\n open_play_store: \"Open Play Store\",\n scan_to_download: \"Scan to Download\",\n qr_code_alt: \"QR code for mobile app download\",\n mobile_app_screenshot_alt: \"Mobile app interface\",\n default_app_name: \"App\",\n} as const satisfies Record<string, string>;\n\nexport type AppDownloadDict = typeof appDownloadEn;\n","import {\n createDomainTranslations,\n type DomainTranslations,\n} from \"@fluid-app/i18n/translations\";\nimport { createStaticDictAdapter } from \"@fluid-app/i18n/static-dict-adapter\";\nimport type { TranslationApi } from \"@fluid-app/i18n/translation-api\";\nimport { appDownloadEn, type AppDownloadDict } from \"./translation-dictionary\";\n\nexport const appDownloadDomain: DomainTranslations<AppDownloadDict> =\n createDomainTranslations<AppDownloadDict>({\n fallback: appDownloadEn,\n loaders: {\n de: () =>\n import(\"./locale/de.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n el: () =>\n import(\"./locale/el.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n es: () =>\n import(\"./locale/es.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n fr: () =>\n import(\"./locale/fr.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n he: () =>\n import(\"./locale/he.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n hu: () =>\n import(\"./locale/hu.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n id: () =>\n import(\"./locale/id.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n it: () =>\n import(\"./locale/it.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ja: () =>\n import(\"./locale/ja.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ko: () =>\n import(\"./locale/ko.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n nl: () =>\n import(\"./locale/nl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n pl: () =>\n import(\"./locale/pl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n pt: () =>\n import(\"./locale/pt.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ro: () =>\n import(\"./locale/ro.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ru: () =>\n import(\"./locale/ru.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n th: () =>\n import(\"./locale/th.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n tl: () =>\n import(\"./locale/tl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n tr: () =>\n import(\"./locale/tr.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n zh_CN: () =>\n import(\"./locale/zh_CN.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n zh_TW: () =>\n import(\"./locale/zh_TW.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n },\n });\n\nexport function createAppDownloadTranslationAdapter(\n locale: string,\n dict: AppDownloadDict,\n): TranslationApi<AppDownloadDict> {\n return createStaticDictAdapter(locale, dict);\n}\n","import { useMemo, type ReactNode } from \"react\";\nimport { useActiveLocale } from \"@fluid-app/i18n/locale-context\";\nimport { useDomainDict } from \"@fluid-app/i18n/use-domain-dict\";\nimport {\n appDownloadDomain,\n createAppDownloadTranslationAdapter,\n} from \"@fluid-app/portal-app-download-ui/translation-adapter\";\nimport { AppDownloadTranslationProvider } from \"@fluid-app/portal-app-download-ui/translation-api-context\";\n\nexport function AppDownloadTranslationBridge({\n children,\n}: {\n children: ReactNode;\n}): React.JSX.Element {\n const { locale } = useActiveLocale();\n const dict = useDomainDict(appDownloadDomain, locale);\n const api = useMemo(\n () => createAppDownloadTranslationAdapter(locale, dict),\n [locale, dict],\n );\n return (\n <AppDownloadTranslationProvider value={api}>\n {children}\n </AppDownloadTranslationProvider>\n );\n}\n","import type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { AppDownloadScreen as AppDownloadScreenUI } from \"@fluid-app/portal-app-download-ui\";\nimport { useStore } from \"../hooks/use-store\";\nimport { AppDownloadTranslationBridge } from \"../providers/AppDownloadTranslationBridge\";\n\nexport const appDownloadScreenPropertySchema = {\n widgetType: \"AppDownloadScreen\",\n displayName: \"App Download Screen\",\n fields: [],\n} as const satisfies WidgetPropertySchema;\n\nexport function AppDownloadScreen(): React.JSX.Element {\n const { data: store } = useStore();\n\n return (\n <AppDownloadTranslationBridge>\n <AppDownloadScreenUI\n companyId={store?.id ?? 0}\n appstoreUrl={store?.appstore_url ?? undefined}\n playstoreUrl={store?.playstore_url ?? undefined}\n logoUrl={store?.logo_url ?? undefined}\n />\n </AppDownloadTranslationBridge>\n );\n}\n"],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ function AppStoreButtons({ appstoreUrl, playstoreUrl }) {
|
|
|
39
39
|
href: appstoreUrl,
|
|
40
40
|
target: "_blank",
|
|
41
41
|
rel: "noopener noreferrer",
|
|
42
|
-
className: "block cursor-pointer rounded-sm border bg-white
|
|
42
|
+
className: "block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50",
|
|
43
43
|
children: /* @__PURE__ */ jsxs("div", {
|
|
44
44
|
className: "flex justify-between",
|
|
45
45
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -57,7 +57,7 @@ function AppStoreButtons({ appstoreUrl, playstoreUrl }) {
|
|
|
57
57
|
href: playstoreUrl,
|
|
58
58
|
target: "_blank",
|
|
59
59
|
rel: "noopener noreferrer",
|
|
60
|
-
className: "block cursor-pointer rounded-sm border bg-white
|
|
60
|
+
className: "block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50",
|
|
61
61
|
children: /* @__PURE__ */ jsxs("div", {
|
|
62
62
|
className: "flex justify-between",
|
|
63
63
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
@@ -84,7 +84,7 @@ function QrCodeSection({ companyId }) {
|
|
|
84
84
|
href: redirectUrl,
|
|
85
85
|
target: "_blank",
|
|
86
86
|
rel: "noopener noreferrer",
|
|
87
|
-
className: "block cursor-pointer rounded-sm border bg-white
|
|
87
|
+
className: "block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50",
|
|
88
88
|
children: /* @__PURE__ */ jsxs("div", {
|
|
89
89
|
className: "flex items-end justify-between",
|
|
90
90
|
children: [/* @__PURE__ */ jsx("div", {
|
|
@@ -98,7 +98,7 @@ function QrCodeSection({ companyId }) {
|
|
|
98
98
|
children: /* @__PURE__ */ jsx("img", {
|
|
99
99
|
src: qrCodeUrl,
|
|
100
100
|
alt: t("qr_code_alt"),
|
|
101
|
-
className: "
|
|
101
|
+
className: "size-16",
|
|
102
102
|
loading: "lazy"
|
|
103
103
|
})
|
|
104
104
|
})]
|
|
@@ -264,4 +264,4 @@ function AppDownloadScreen() {
|
|
|
264
264
|
//#endregion
|
|
265
265
|
export { AppDownloadScreen_exports as t };
|
|
266
266
|
|
|
267
|
-
//# sourceMappingURL=AppDownloadScreen-
|
|
267
|
+
//# sourceMappingURL=AppDownloadScreen-ZUoc8X2D.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppDownloadScreen-ZUoc8X2D.mjs","names":["AppDownloadScreen","AppDownloadScreenUI"],"sources":["../../app-download-ui/src/translation-api-context.ts","../../app-download-ui/src/components/AppStoreButtons.tsx","../../app-download-ui/src/components/QrCodeSection.tsx","../../app-download-ui/src/components/ImageSection.tsx","../../app-download-ui/src/lib/cn.ts","../../app-download-ui/src/components/AppDownloadScreen.tsx","../../app-download-ui/src/translation-dictionary.ts","../../app-download-ui/src/translation-adapter.ts","../src/providers/AppDownloadTranslationBridge.tsx","../src/screens/AppDownloadScreen.tsx"],"sourcesContent":["import { createTranslationContext } from \"@fluid-app/i18n/translation-api-context-factory\";\nimport type { AppDownloadDict } from \"./translation-dictionary\";\n\nconst { Provider, useTranslation } =\n createTranslationContext<AppDownloadDict>(\"AppDownload\");\n\nexport const AppDownloadTranslationProvider = Provider;\nexport const useAppDownloadTranslation = useTranslation;\n","import { ExternalLink } from \"lucide-react\";\nimport { useAppDownloadTranslation } from \"../translation-api-context\";\n\nexport interface AppStoreButtonsProps {\n appstoreUrl: string;\n playstoreUrl?: string;\n}\n\nfunction AppleIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 384 512\"\n fill=\"currentColor\"\n className=\"size-5\"\n >\n <path d=\"M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-62.1 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z\" />\n </svg>\n );\n}\n\nfunction GooglePlayIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n fill=\"currentColor\"\n className=\"size-5\"\n >\n <path d=\"M325.3 234.3L104.6 13l280.8 161.2-60.1 60.1zM47 0C34 6.8 25.3 19.2 25.3 35.3v441.3c0 16.1 8.7 28.5 21.7 35.3l256.6-256L47 0zm425.2 225.6l-58.9-34.1-65.7 64.5 65.7 64.5 60.1-34.1c18-14.3 18-46.5-1.2-60.8zM104.6 499l280.8-161.2-60.1-60.1L104.6 499z\" />\n </svg>\n );\n}\n\nexport function AppStoreButtons({\n appstoreUrl,\n playstoreUrl,\n}: AppStoreButtonsProps) {\n const { t } = useAppDownloadTranslation();\n\n return (\n <div\n className={`grid gap-4 ${playstoreUrl ? \"grid-cols-1 sm:grid-cols-2\" : \"grid-cols-1\"}`}\n >\n <a\n href={appstoreUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <AppleIcon />\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"open_app_store\")}\n </div>\n </div>\n <div className=\"flex items-start\">\n <ExternalLink className=\"size-4\" />\n </div>\n </div>\n </a>\n\n {playstoreUrl && (\n <a\n href={playstoreUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <GooglePlayIcon />\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"open_play_store\")}\n </div>\n </div>\n <div className=\"flex items-start\">\n <ExternalLink className=\"size-4\" />\n </div>\n </div>\n </a>\n )}\n </div>\n );\n}\n","import { useAppDownloadTranslation } from \"../translation-api-context\";\n\nexport interface QrCodeSectionProps {\n companyId: number;\n}\n\nexport function QrCodeSection({ companyId }: QrCodeSectionProps) {\n const { t } = useAppDownloadTranslation();\n const redirectUrl = `https://api.fluid.app/mobile_app_download/${companyId}`;\n const qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(redirectUrl)}`;\n\n return (\n <a\n href={redirectUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"block cursor-pointer rounded-sm border bg-white p-4 text-gray-900 transition-colors hover:bg-gray-50\"\n >\n <div className=\"flex items-end justify-between\">\n <div className=\"flex flex-col items-baseline\">\n <div className=\"mt-1 text-left text-xs font-semibold\">\n {t(\"scan_to_download\")}\n </div>\n </div>\n <div className=\"flex\">\n <img\n src={qrCodeUrl}\n alt={t(\"qr_code_alt\")}\n className=\"size-16\"\n loading=\"lazy\"\n />\n </div>\n </div>\n </a>\n );\n}\n","import { useAppDownloadTranslation } from \"../translation-api-context\";\n\nconst DEFAULT_IMAGE =\n \"https://assets.fluid.app/fluid-admin/images/we-commerce/iphone_product.png\";\n\nconst DEFAULT_LOGO =\n \"https://assets.fluid.app/fluid-admin/images/we-commerce/we-commerce.png\";\n\nexport interface ImageSectionProps {\n logoUrl?: string | null;\n screenshotUrl?: string | null;\n appName?: string;\n}\n\nexport function ImageSection({\n logoUrl,\n screenshotUrl,\n appName,\n}: ImageSectionProps) {\n const { t } = useAppDownloadTranslation();\n\n return (\n <div className=\"flex flex-col overflow-hidden\">\n <div className=\"-mb-px flex flex-1 flex-col\">\n <div className=\"flex h-20 px-3 pt-8\">\n <img\n src={logoUrl || DEFAULT_LOGO}\n alt={appName ?? t(\"default_app_name\")}\n width={150}\n height={150}\n className=\"object-contain\"\n />\n </div>\n <div\n className={\n screenshotUrl\n ? \"mt-8 flex flex-1 items-end justify-start\"\n : \"-ml-20 flex flex-1 items-end justify-start\"\n }\n >\n <img\n src={screenshotUrl || DEFAULT_IMAGE}\n alt={t(\"mobile_app_screenshot_alt\")}\n width={480}\n height={500}\n className=\"h-full w-auto object-cover\"\n />\n </div>\n </div>\n </div>\n );\n}\n","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 { AppStoreButtons } from \"./AppStoreButtons\";\nimport { QrCodeSection } from \"./QrCodeSection\";\nimport { ImageSection } from \"./ImageSection\";\nimport { cn } from \"../lib/cn\";\nimport { useAppDownloadTranslation } from \"../translation-api-context\";\n\nconst DEFAULT_APPSTORE_URL =\n \"https://apps.apple.com/app/wecommerce/id1564463740\";\nconst DEFAULT_PLAYSTORE_URL =\n \"https://play.google.com/store/apps/details?id=com.fluid.crm\";\n\nexport interface AppDownloadScreenProps {\n companyId: number;\n appstoreUrl?: string | null;\n playstoreUrl?: string | null;\n logoUrl?: string | null;\n screenshotUrl?: string | null;\n appName?: string;\n className?: string;\n}\n\nexport function AppDownloadScreen({\n companyId,\n appstoreUrl,\n playstoreUrl,\n logoUrl,\n screenshotUrl,\n appName,\n className,\n}: AppDownloadScreenProps) {\n const { t } = useAppDownloadTranslation();\n const resolvedAppstoreUrl = appstoreUrl?.trim() || DEFAULT_APPSTORE_URL;\n const resolvedPlaystoreUrl = playstoreUrl?.trim() || DEFAULT_PLAYSTORE_URL;\n\n return (\n <div\n className={cn(\"flex h-full items-center justify-center p-4\", className)}\n >\n <div className=\"bg-muted relative mx-4 w-full max-w-6xl overflow-hidden rounded-xl px-6 shadow-xl\">\n <div className=\"grid h-150 w-full grid-cols-1 lg:grid-cols-2\">\n {/* Left side - Images */}\n <ImageSection\n logoUrl={logoUrl}\n screenshotUrl={screenshotUrl}\n appName={appName}\n />\n\n {/* Right side - Content */}\n <div className=\"space-y-2 pt-8 pb-8\">\n <h1 className=\"mt-12 text-left text-[32px] leading-tight font-black text-gray-900\">\n {t(\"heading_line_1\")}\n </h1>\n <h1 className=\"-mt-2 text-left text-[32px] leading-tight font-black text-gray-900\">\n {t(\"heading_line_2\")}\n </h1>\n <p className=\"-mt-1 text-left text-[14px] leading-relaxed text-gray-600\">\n {t(\"description\")}\n </p>\n\n <h3 className=\"mt-16 text-left text-[12px] font-bold text-gray-900\">\n {t(\"download_the_app\")}\n </h3>\n\n <AppStoreButtons\n appstoreUrl={resolvedAppstoreUrl}\n playstoreUrl={resolvedPlaystoreUrl}\n />\n\n <QrCodeSection companyId={companyId} />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","export const appDownloadEn = {\n heading_line_1: \"EVERYTHING YOU NEED\",\n heading_line_2: \"AT YOUR FINGERTIPS\",\n description:\n \"Everything you need at your fingertips. Run your business from one place while on the go. Share, message, sell, and manage from the mobile app.\",\n download_the_app: \"Download the App\",\n open_app_store: \"Open App Store\",\n open_play_store: \"Open Play Store\",\n scan_to_download: \"Scan to Download\",\n qr_code_alt: \"QR code for mobile app download\",\n mobile_app_screenshot_alt: \"Mobile app interface\",\n default_app_name: \"App\",\n} as const satisfies Record<string, string>;\n\nexport type AppDownloadDict = typeof appDownloadEn;\n","import {\n createDomainTranslations,\n type DomainTranslations,\n} from \"@fluid-app/i18n/translations\";\nimport { createStaticDictAdapter } from \"@fluid-app/i18n/static-dict-adapter\";\nimport type { TranslationApi } from \"@fluid-app/i18n/translation-api\";\nimport { appDownloadEn, type AppDownloadDict } from \"./translation-dictionary\";\n\nexport const appDownloadDomain: DomainTranslations<AppDownloadDict> =\n createDomainTranslations<AppDownloadDict>({\n fallback: appDownloadEn,\n loaders: {\n de: () =>\n import(\"./locale/de.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n el: () =>\n import(\"./locale/el.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n es: () =>\n import(\"./locale/es.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n fr: () =>\n import(\"./locale/fr.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n he: () =>\n import(\"./locale/he.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n hu: () =>\n import(\"./locale/hu.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n id: () =>\n import(\"./locale/id.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n it: () =>\n import(\"./locale/it.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ja: () =>\n import(\"./locale/ja.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ko: () =>\n import(\"./locale/ko.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n nl: () =>\n import(\"./locale/nl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n pl: () =>\n import(\"./locale/pl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n pt: () =>\n import(\"./locale/pt.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ro: () =>\n import(\"./locale/ro.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n ru: () =>\n import(\"./locale/ru.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n th: () =>\n import(\"./locale/th.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n tl: () =>\n import(\"./locale/tl.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n tr: () =>\n import(\"./locale/tr.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n zh_CN: () =>\n import(\"./locale/zh_CN.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n zh_TW: () =>\n import(\"./locale/zh_TW.json\").then(\n (m) => m.default as Partial<AppDownloadDict>,\n ),\n },\n });\n\nexport function createAppDownloadTranslationAdapter(\n locale: string,\n dict: AppDownloadDict,\n): TranslationApi<AppDownloadDict> {\n return createStaticDictAdapter(locale, dict);\n}\n","import { useMemo, type ReactNode } from \"react\";\nimport { useActiveLocale } from \"@fluid-app/i18n/locale-context\";\nimport { useDomainDict } from \"@fluid-app/i18n/use-domain-dict\";\nimport {\n appDownloadDomain,\n createAppDownloadTranslationAdapter,\n} from \"@fluid-app/portal-app-download-ui/translation-adapter\";\nimport { AppDownloadTranslationProvider } from \"@fluid-app/portal-app-download-ui/translation-api-context\";\n\nexport function AppDownloadTranslationBridge({\n children,\n}: {\n children: ReactNode;\n}): React.JSX.Element {\n const { locale } = useActiveLocale();\n const dict = useDomainDict(appDownloadDomain, locale);\n const api = useMemo(\n () => createAppDownloadTranslationAdapter(locale, dict),\n [locale, dict],\n );\n return (\n <AppDownloadTranslationProvider value={api}>\n {children}\n </AppDownloadTranslationProvider>\n );\n}\n","import type { WidgetPropertySchema } from \"../registries/property-schema-types\";\nimport { AppDownloadScreen as AppDownloadScreenUI } from \"@fluid-app/portal-app-download-ui\";\nimport { useStore } from \"../hooks/use-store\";\nimport { AppDownloadTranslationBridge } from \"../providers/AppDownloadTranslationBridge\";\n\nexport const appDownloadScreenPropertySchema = {\n widgetType: \"AppDownloadScreen\",\n displayName: \"App Download Screen\",\n fields: [],\n} as const satisfies WidgetPropertySchema;\n\nexport function AppDownloadScreen(): React.JSX.Element {\n const { data: store } = useStore();\n\n return (\n <AppDownloadTranslationBridge>\n <AppDownloadScreenUI\n companyId={store?.id ?? 0}\n appstoreUrl={store?.appstore_url ?? undefined}\n playstoreUrl={store?.playstore_url ?? undefined}\n logoUrl={store?.logo_url ?? undefined}\n />\n </AppDownloadTranslationBridge>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
|
-
const require_ScreenRenderer = require("./ScreenRenderer-
|
|
2
|
+
const require_ScreenRenderer = require("./ScreenRenderer-CLDJUinO.cjs");
|
|
3
3
|
const require_registries = require("./registries-CpUM406S.cjs");
|
|
4
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
5
|
//#region ../widgets/src/widgets/CardWidget.tsx
|
|
@@ -194,4 +194,4 @@ Object.defineProperty(exports, "cardWidgetPropertySchema", {
|
|
|
194
194
|
}
|
|
195
195
|
});
|
|
196
196
|
|
|
197
|
-
//# sourceMappingURL=CardWidget
|
|
197
|
+
//# sourceMappingURL=CardWidget--S5FBquC.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardWidget-Jv6HiiK-.cjs","names":["useRegistry","ScreenRenderer","useScreenRenderer","DefaultScreenRenderer","gapValues","borderWidthClasses","borderColorClasses","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField","getBorderWidthField","getBorderColorField","getGapField"],"sources":["../../widgets/src/widgets/CardWidget.tsx"],"sourcesContent":["import { ScreenRenderer as DefaultScreenRenderer } from \"../core/ScreenRenderer\";\nimport { useRegistry } from \"../contexts/RegistryContext\";\nimport { useScreenRenderer } from \"../contexts/ScreenRendererContext\";\nimport type {\n WidgetSchema,\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n PaddingOptions,\n GapOptions,\n ColorOptions,\n FontSizeOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type React from \"react\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getGapField,\n getPaddingField,\n gapValues,\n borderWidthClasses,\n borderColorClasses,\n} from \"../core/fields\";\n\nconst DEFAULT_BACKGROUND: BackgroundValue = {\n type: \"solid\",\n color: \"background\",\n};\nconst DEFAULT_CHILDREN: (WidgetSchema | null)[] = [];\n\ntype CardWidgetProps = {\n // Header\n headerEnabled?: boolean;\n title?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n headerBackground?: ColorOptions;\n\n // Footer\n footerEnabled?: boolean;\n footerContent?: string;\n footerColor?: ColorOptions;\n footerBackground?: ColorOptions;\n\n // Styling\n background?: BackgroundValue;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n /** @deprecated Use borderWidth instead */\n borderEnabled?: boolean;\n gapSize?: GapOptions;\n\n // Container props (children = other widgets)\n children?: (WidgetSchema | null)[];\n\n // Styling\n className?: string;\n};\n\nexport function CardWidget({\n // Header\n headerEnabled = true,\n title = \"Card Title\",\n titleFontSize = \"lg\",\n titleColor = \"foreground\",\n headerBackground = \"transparent\",\n\n // Footer\n footerEnabled = false,\n footerContent = \"\",\n footerColor = \"muted\",\n footerBackground = \"transparent\",\n\n // Styling\n background = DEFAULT_BACKGROUND,\n padding = 6,\n borderRadius = \"xl\",\n borderWidth = \"thin\",\n borderColor = \"muted\",\n borderEnabled,\n gapSize = \"md\",\n\n // Container\n children = DEFAULT_CHILDREN,\n\n className = \"\",\n}: CardWidgetProps): React.JSX.Element {\n // Get registry from context if not provided as prop\n const contextRegistry = useRegistry();\n\n // Use ScreenRenderer from context, fall back to local\n const ContextScreenRenderer = useScreenRenderer();\n const ScreenRenderer = ContextScreenRenderer ?? DefaultScreenRenderer;\n\n // Extract background values\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n const gapSizeValue = gapSize ? gapValues[gapSize] : 4;\n\n // Backwards compatibility: if legacy borderEnabled prop exists, map it\n const effectiveBorderWidth = borderEnabled === false ? \"none\" : borderWidth;\n\n const cardClasses = [\n \"flex flex-col gap-6\",\n `bg-${backgroundColor}`,\n `p-${padding}`,\n `rounded-${borderRadius}`,\n borderWidthClasses[effectiveBorderWidth],\n effectiveBorderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const containerStyle: React.CSSProperties = {\n backgroundImage,\n };\n\n // Filter out null children\n const validChildren = children.filter(\n (child): child is WidgetSchema => child !== null,\n );\n\n return (\n <div data-slot=\"card\" className={cardClasses} style={containerStyle}>\n {headerEnabled && (title || headerBackground !== \"transparent\") && (\n <div\n data-slot=\"card-header\"\n className={\n headerBackground !== \"transparent\"\n ? `bg-${headerBackground} -mx-${padding} -mt-${padding} px-${padding} py-${padding} rounded-t-${borderRadius}`\n : undefined\n }\n >\n {title && (\n <div\n data-slot=\"card-title\"\n className={`text-${titleFontSize} text-${titleColor} font-header leading-none font-semibold`}\n >\n {title}\n </div>\n )}\n </div>\n )}\n\n <div data-slot=\"card-content\" className=\"@container flex-1\">\n {contextRegistry ? (\n <ScreenRenderer\n screen={validChildren}\n registry={contextRegistry}\n className={`flex flex-col gap-${gapSizeValue}`}\n />\n ) : (\n <div className={`flex flex-col gap-${gapSizeValue}`} />\n )}\n </div>\n\n {footerEnabled && footerContent && (\n <div\n data-slot=\"card-footer\"\n className={[\n `text-sm text-${footerColor} flex items-center`,\n footerBackground !== \"transparent\"\n ? `bg-${footerBackground} -mx-${padding} -mb-${padding} px-${padding} py-${padding} rounded-b-${borderRadius}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {footerContent}\n </div>\n )}\n </div>\n );\n}\n\nexport const cardWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"CardWidget\",\n displayName: \"Card\",\n fields: [\n // Header\n {\n key: \"headerEnabled\",\n label: \"Show Header\",\n type: \"boolean\",\n description: \"Toggle header visibility\",\n defaultValue: true,\n group: \"Header\",\n },\n {\n key: \"title\",\n label: \"Title\",\n type: \"text\",\n description: \"Card title text\",\n defaultValue: \"Card Title\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the title\",\n defaultValue: \"lg\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the title\",\n defaultValue: \"foreground\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n getColorField({\n key: \"headerBackground\",\n label: \"Header Background\",\n description: \"Background color for the header\",\n defaultValue: \"transparent\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n\n // Footer\n {\n key: \"footerEnabled\",\n label: \"Show Footer\",\n type: \"boolean\",\n description: \"Toggle footer visibility\",\n defaultValue: false,\n group: \"Footer\",\n },\n {\n key: \"footerContent\",\n label: \"Footer Text\",\n type: \"text\",\n description: \"Footer content text\",\n defaultValue: \"\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n },\n getColorField({\n key: \"footerColor\",\n label: \"Footer Color\",\n description: \"Color for the footer text\",\n defaultValue: \"muted\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n }),\n getColorField({\n key: \"footerBackground\",\n label: \"Footer Background\",\n description: \"Background color for the footer\",\n defaultValue: \"transparent\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n }),\n\n // Design\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the card\",\n defaultValue: \"background\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Card padding\",\n defaultValue: 6,\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Card border radius\",\n defaultValue: \"xl\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Card border width\",\n defaultValue: \"thin\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Card border color\",\n defaultValue: \"muted\",\n group: \"Design\",\n }),\n getGapField({\n key: \"gapSize\",\n label: \"Gap\",\n description: \"Gap between child widgets\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n ],\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CardWidget--S5FBquC.cjs","names":["useRegistry","ScreenRenderer","useScreenRenderer","DefaultScreenRenderer","gapValues","borderWidthClasses","borderColorClasses","getFontSizeField","getColorField","getPaddingField","getBorderRadiusField","getBorderWidthField","getBorderColorField","getGapField"],"sources":["../../widgets/src/widgets/CardWidget.tsx"],"sourcesContent":["import { ScreenRenderer as DefaultScreenRenderer } from \"../core/ScreenRenderer\";\nimport { useRegistry } from \"../contexts/RegistryContext\";\nimport { useScreenRenderer } from \"../contexts/ScreenRendererContext\";\nimport type {\n WidgetSchema,\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n PaddingOptions,\n GapOptions,\n ColorOptions,\n FontSizeOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type React from \"react\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getGapField,\n getPaddingField,\n gapValues,\n borderWidthClasses,\n borderColorClasses,\n} from \"../core/fields\";\n\nconst DEFAULT_BACKGROUND: BackgroundValue = {\n type: \"solid\",\n color: \"background\",\n};\nconst DEFAULT_CHILDREN: (WidgetSchema | null)[] = [];\n\ntype CardWidgetProps = {\n // Header\n headerEnabled?: boolean;\n title?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n headerBackground?: ColorOptions;\n\n // Footer\n footerEnabled?: boolean;\n footerContent?: string;\n footerColor?: ColorOptions;\n footerBackground?: ColorOptions;\n\n // Styling\n background?: BackgroundValue;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n /** @deprecated Use borderWidth instead */\n borderEnabled?: boolean;\n gapSize?: GapOptions;\n\n // Container props (children = other widgets)\n children?: (WidgetSchema | null)[];\n\n // Styling\n className?: string;\n};\n\nexport function CardWidget({\n // Header\n headerEnabled = true,\n title = \"Card Title\",\n titleFontSize = \"lg\",\n titleColor = \"foreground\",\n headerBackground = \"transparent\",\n\n // Footer\n footerEnabled = false,\n footerContent = \"\",\n footerColor = \"muted\",\n footerBackground = \"transparent\",\n\n // Styling\n background = DEFAULT_BACKGROUND,\n padding = 6,\n borderRadius = \"xl\",\n borderWidth = \"thin\",\n borderColor = \"muted\",\n borderEnabled,\n gapSize = \"md\",\n\n // Container\n children = DEFAULT_CHILDREN,\n\n className = \"\",\n}: CardWidgetProps): React.JSX.Element {\n // Get registry from context if not provided as prop\n const contextRegistry = useRegistry();\n\n // Use ScreenRenderer from context, fall back to local\n const ContextScreenRenderer = useScreenRenderer();\n const ScreenRenderer = ContextScreenRenderer ?? DefaultScreenRenderer;\n\n // Extract background values\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n const gapSizeValue = gapSize ? gapValues[gapSize] : 4;\n\n // Backwards compatibility: if legacy borderEnabled prop exists, map it\n const effectiveBorderWidth = borderEnabled === false ? \"none\" : borderWidth;\n\n const cardClasses = [\n \"flex flex-col gap-6\",\n `bg-${backgroundColor}`,\n `p-${padding}`,\n `rounded-${borderRadius}`,\n borderWidthClasses[effectiveBorderWidth],\n effectiveBorderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const containerStyle: React.CSSProperties = {\n backgroundImage,\n };\n\n // Filter out null children\n const validChildren = children.filter(\n (child): child is WidgetSchema => child !== null,\n );\n\n return (\n <div data-slot=\"card\" className={cardClasses} style={containerStyle}>\n {headerEnabled && (title || headerBackground !== \"transparent\") && (\n <div\n data-slot=\"card-header\"\n className={\n headerBackground !== \"transparent\"\n ? `bg-${headerBackground} -mx-${padding} -mt-${padding} px-${padding} py-${padding} rounded-t-${borderRadius}`\n : undefined\n }\n >\n {title && (\n <div\n data-slot=\"card-title\"\n className={`text-${titleFontSize} text-${titleColor} font-header leading-none font-semibold`}\n >\n {title}\n </div>\n )}\n </div>\n )}\n\n <div data-slot=\"card-content\" className=\"@container flex-1\">\n {contextRegistry ? (\n <ScreenRenderer\n screen={validChildren}\n registry={contextRegistry}\n className={`flex flex-col gap-${gapSizeValue}`}\n />\n ) : (\n <div className={`flex flex-col gap-${gapSizeValue}`} />\n )}\n </div>\n\n {footerEnabled && footerContent && (\n <div\n data-slot=\"card-footer\"\n className={[\n `text-sm text-${footerColor} flex items-center`,\n footerBackground !== \"transparent\"\n ? `bg-${footerBackground} -mx-${padding} -mb-${padding} px-${padding} py-${padding} rounded-b-${borderRadius}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {footerContent}\n </div>\n )}\n </div>\n );\n}\n\nexport const cardWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"CardWidget\",\n displayName: \"Card\",\n fields: [\n // Header\n {\n key: \"headerEnabled\",\n label: \"Show Header\",\n type: \"boolean\",\n description: \"Toggle header visibility\",\n defaultValue: true,\n group: \"Header\",\n },\n {\n key: \"title\",\n label: \"Title\",\n type: \"text\",\n description: \"Card title text\",\n defaultValue: \"Card Title\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the title\",\n defaultValue: \"lg\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the title\",\n defaultValue: \"foreground\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n getColorField({\n key: \"headerBackground\",\n label: \"Header Background\",\n description: \"Background color for the header\",\n defaultValue: \"transparent\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n\n // Footer\n {\n key: \"footerEnabled\",\n label: \"Show Footer\",\n type: \"boolean\",\n description: \"Toggle footer visibility\",\n defaultValue: false,\n group: \"Footer\",\n },\n {\n key: \"footerContent\",\n label: \"Footer Text\",\n type: \"text\",\n description: \"Footer content text\",\n defaultValue: \"\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n },\n getColorField({\n key: \"footerColor\",\n label: \"Footer Color\",\n description: \"Color for the footer text\",\n defaultValue: \"muted\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n }),\n getColorField({\n key: \"footerBackground\",\n label: \"Footer Background\",\n description: \"Background color for the footer\",\n defaultValue: \"transparent\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n }),\n\n // Design\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the card\",\n defaultValue: \"background\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Card padding\",\n defaultValue: 6,\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Card border radius\",\n defaultValue: \"xl\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Card border width\",\n defaultValue: \"thin\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Card border color\",\n defaultValue: \"muted\",\n group: \"Design\",\n }),\n getGapField({\n key: \"gapSize\",\n label: \"Gap\",\n description: \"Gap between child widgets\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n ],\n};\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { vt as __exportAll } from "./PortalTenantClientProvider-BmRtQAbi.mjs";
|
|
2
|
-
import { c as useScreenRenderer, t as ScreenRenderer, u as useRegistry } from "./ScreenRenderer-
|
|
2
|
+
import { c as useScreenRenderer, t as ScreenRenderer, u as useRegistry } from "./ScreenRenderer-TobkTBMC.mjs";
|
|
3
3
|
import { f as getGapField, i as getBorderColorField, l as getColorField, m as getPaddingField, n as borderWidthClasses, o as getBorderRadiusField, r as gapValues, s as getBorderWidthField, t as borderColorClasses, u as getFontSizeField } from "./registries-59Barbhg.mjs";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region ../widgets/src/widgets/CardWidget.tsx
|
|
@@ -187,4 +187,4 @@ const cardWidgetPropertySchema = {
|
|
|
187
187
|
//#endregion
|
|
188
188
|
export { CardWidget_exports as n, cardWidgetPropertySchema as r, CardWidget as t };
|
|
189
189
|
|
|
190
|
-
//# sourceMappingURL=CardWidget-
|
|
190
|
+
//# sourceMappingURL=CardWidget-ChfurL_z.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardWidget-C9UbLrzZ.mjs","names":["ScreenRenderer","DefaultScreenRenderer"],"sources":["../../widgets/src/widgets/CardWidget.tsx"],"sourcesContent":["import { ScreenRenderer as DefaultScreenRenderer } from \"../core/ScreenRenderer\";\nimport { useRegistry } from \"../contexts/RegistryContext\";\nimport { useScreenRenderer } from \"../contexts/ScreenRendererContext\";\nimport type {\n WidgetSchema,\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n PaddingOptions,\n GapOptions,\n ColorOptions,\n FontSizeOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type React from \"react\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getGapField,\n getPaddingField,\n gapValues,\n borderWidthClasses,\n borderColorClasses,\n} from \"../core/fields\";\n\nconst DEFAULT_BACKGROUND: BackgroundValue = {\n type: \"solid\",\n color: \"background\",\n};\nconst DEFAULT_CHILDREN: (WidgetSchema | null)[] = [];\n\ntype CardWidgetProps = {\n // Header\n headerEnabled?: boolean;\n title?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n headerBackground?: ColorOptions;\n\n // Footer\n footerEnabled?: boolean;\n footerContent?: string;\n footerColor?: ColorOptions;\n footerBackground?: ColorOptions;\n\n // Styling\n background?: BackgroundValue;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n /** @deprecated Use borderWidth instead */\n borderEnabled?: boolean;\n gapSize?: GapOptions;\n\n // Container props (children = other widgets)\n children?: (WidgetSchema | null)[];\n\n // Styling\n className?: string;\n};\n\nexport function CardWidget({\n // Header\n headerEnabled = true,\n title = \"Card Title\",\n titleFontSize = \"lg\",\n titleColor = \"foreground\",\n headerBackground = \"transparent\",\n\n // Footer\n footerEnabled = false,\n footerContent = \"\",\n footerColor = \"muted\",\n footerBackground = \"transparent\",\n\n // Styling\n background = DEFAULT_BACKGROUND,\n padding = 6,\n borderRadius = \"xl\",\n borderWidth = \"thin\",\n borderColor = \"muted\",\n borderEnabled,\n gapSize = \"md\",\n\n // Container\n children = DEFAULT_CHILDREN,\n\n className = \"\",\n}: CardWidgetProps): React.JSX.Element {\n // Get registry from context if not provided as prop\n const contextRegistry = useRegistry();\n\n // Use ScreenRenderer from context, fall back to local\n const ContextScreenRenderer = useScreenRenderer();\n const ScreenRenderer = ContextScreenRenderer ?? DefaultScreenRenderer;\n\n // Extract background values\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n const gapSizeValue = gapSize ? gapValues[gapSize] : 4;\n\n // Backwards compatibility: if legacy borderEnabled prop exists, map it\n const effectiveBorderWidth = borderEnabled === false ? \"none\" : borderWidth;\n\n const cardClasses = [\n \"flex flex-col gap-6\",\n `bg-${backgroundColor}`,\n `p-${padding}`,\n `rounded-${borderRadius}`,\n borderWidthClasses[effectiveBorderWidth],\n effectiveBorderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const containerStyle: React.CSSProperties = {\n backgroundImage,\n };\n\n // Filter out null children\n const validChildren = children.filter(\n (child): child is WidgetSchema => child !== null,\n );\n\n return (\n <div data-slot=\"card\" className={cardClasses} style={containerStyle}>\n {headerEnabled && (title || headerBackground !== \"transparent\") && (\n <div\n data-slot=\"card-header\"\n className={\n headerBackground !== \"transparent\"\n ? `bg-${headerBackground} -mx-${padding} -mt-${padding} px-${padding} py-${padding} rounded-t-${borderRadius}`\n : undefined\n }\n >\n {title && (\n <div\n data-slot=\"card-title\"\n className={`text-${titleFontSize} text-${titleColor} font-header leading-none font-semibold`}\n >\n {title}\n </div>\n )}\n </div>\n )}\n\n <div data-slot=\"card-content\" className=\"@container flex-1\">\n {contextRegistry ? (\n <ScreenRenderer\n screen={validChildren}\n registry={contextRegistry}\n className={`flex flex-col gap-${gapSizeValue}`}\n />\n ) : (\n <div className={`flex flex-col gap-${gapSizeValue}`} />\n )}\n </div>\n\n {footerEnabled && footerContent && (\n <div\n data-slot=\"card-footer\"\n className={[\n `text-sm text-${footerColor} flex items-center`,\n footerBackground !== \"transparent\"\n ? `bg-${footerBackground} -mx-${padding} -mb-${padding} px-${padding} py-${padding} rounded-b-${borderRadius}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {footerContent}\n </div>\n )}\n </div>\n );\n}\n\nexport const cardWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"CardWidget\",\n displayName: \"Card\",\n fields: [\n // Header\n {\n key: \"headerEnabled\",\n label: \"Show Header\",\n type: \"boolean\",\n description: \"Toggle header visibility\",\n defaultValue: true,\n group: \"Header\",\n },\n {\n key: \"title\",\n label: \"Title\",\n type: \"text\",\n description: \"Card title text\",\n defaultValue: \"Card Title\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the title\",\n defaultValue: \"lg\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the title\",\n defaultValue: \"foreground\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n getColorField({\n key: \"headerBackground\",\n label: \"Header Background\",\n description: \"Background color for the header\",\n defaultValue: \"transparent\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n\n // Footer\n {\n key: \"footerEnabled\",\n label: \"Show Footer\",\n type: \"boolean\",\n description: \"Toggle footer visibility\",\n defaultValue: false,\n group: \"Footer\",\n },\n {\n key: \"footerContent\",\n label: \"Footer Text\",\n type: \"text\",\n description: \"Footer content text\",\n defaultValue: \"\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n },\n getColorField({\n key: \"footerColor\",\n label: \"Footer Color\",\n description: \"Color for the footer text\",\n defaultValue: \"muted\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n }),\n getColorField({\n key: \"footerBackground\",\n label: \"Footer Background\",\n description: \"Background color for the footer\",\n defaultValue: \"transparent\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n }),\n\n // Design\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the card\",\n defaultValue: \"background\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Card padding\",\n defaultValue: 6,\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Card border radius\",\n defaultValue: \"xl\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Card border width\",\n defaultValue: \"thin\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Card border color\",\n defaultValue: \"muted\",\n group: \"Design\",\n }),\n getGapField({\n key: \"gapSize\",\n label: \"Gap\",\n description: \"Gap between child widgets\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n ],\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CardWidget-ChfurL_z.mjs","names":["ScreenRenderer","DefaultScreenRenderer"],"sources":["../../widgets/src/widgets/CardWidget.tsx"],"sourcesContent":["import { ScreenRenderer as DefaultScreenRenderer } from \"../core/ScreenRenderer\";\nimport { useRegistry } from \"../contexts/RegistryContext\";\nimport { useScreenRenderer } from \"../contexts/ScreenRendererContext\";\nimport type {\n WidgetSchema,\n BackgroundValue,\n BorderRadiusOptions,\n BorderWidthOptions,\n PaddingOptions,\n GapOptions,\n ColorOptions,\n FontSizeOptions,\n} from \"@fluid-app/portal-core/types\";\nimport type React from \"react\";\nimport type { WidgetPropertySchema } from \"@fluid-app/portal-core/registries\";\nimport {\n getBorderRadiusField,\n getBorderWidthField,\n getBorderColorField,\n getColorField,\n getFontSizeField,\n getGapField,\n getPaddingField,\n gapValues,\n borderWidthClasses,\n borderColorClasses,\n} from \"../core/fields\";\n\nconst DEFAULT_BACKGROUND: BackgroundValue = {\n type: \"solid\",\n color: \"background\",\n};\nconst DEFAULT_CHILDREN: (WidgetSchema | null)[] = [];\n\ntype CardWidgetProps = {\n // Header\n headerEnabled?: boolean;\n title?: string;\n titleFontSize?: FontSizeOptions;\n titleColor?: ColorOptions;\n headerBackground?: ColorOptions;\n\n // Footer\n footerEnabled?: boolean;\n footerContent?: string;\n footerColor?: ColorOptions;\n footerBackground?: ColorOptions;\n\n // Styling\n background?: BackgroundValue;\n padding?: PaddingOptions;\n borderRadius?: BorderRadiusOptions;\n borderWidth?: BorderWidthOptions;\n borderColor?: ColorOptions;\n /** @deprecated Use borderWidth instead */\n borderEnabled?: boolean;\n gapSize?: GapOptions;\n\n // Container props (children = other widgets)\n children?: (WidgetSchema | null)[];\n\n // Styling\n className?: string;\n};\n\nexport function CardWidget({\n // Header\n headerEnabled = true,\n title = \"Card Title\",\n titleFontSize = \"lg\",\n titleColor = \"foreground\",\n headerBackground = \"transparent\",\n\n // Footer\n footerEnabled = false,\n footerContent = \"\",\n footerColor = \"muted\",\n footerBackground = \"transparent\",\n\n // Styling\n background = DEFAULT_BACKGROUND,\n padding = 6,\n borderRadius = \"xl\",\n borderWidth = \"thin\",\n borderColor = \"muted\",\n borderEnabled,\n gapSize = \"md\",\n\n // Container\n children = DEFAULT_CHILDREN,\n\n className = \"\",\n}: CardWidgetProps): React.JSX.Element {\n // Get registry from context if not provided as prop\n const contextRegistry = useRegistry();\n\n // Use ScreenRenderer from context, fall back to local\n const ContextScreenRenderer = useScreenRenderer();\n const ScreenRenderer = ContextScreenRenderer ?? DefaultScreenRenderer;\n\n // Extract background values\n const backgroundColor = background.color || \"background\";\n const backgroundImage =\n (background.resource?.image_url || background.resource?.imageUrl) &&\n background.type === \"image\"\n ? `url(${background.resource.image_url || background.resource.imageUrl})`\n : \"none\";\n\n const gapSizeValue = gapSize ? gapValues[gapSize] : 4;\n\n // Backwards compatibility: if legacy borderEnabled prop exists, map it\n const effectiveBorderWidth = borderEnabled === false ? \"none\" : borderWidth;\n\n const cardClasses = [\n \"flex flex-col gap-6\",\n `bg-${backgroundColor}`,\n `p-${padding}`,\n `rounded-${borderRadius}`,\n borderWidthClasses[effectiveBorderWidth],\n effectiveBorderWidth !== \"none\" ? borderColorClasses[borderColor] : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const containerStyle: React.CSSProperties = {\n backgroundImage,\n };\n\n // Filter out null children\n const validChildren = children.filter(\n (child): child is WidgetSchema => child !== null,\n );\n\n return (\n <div data-slot=\"card\" className={cardClasses} style={containerStyle}>\n {headerEnabled && (title || headerBackground !== \"transparent\") && (\n <div\n data-slot=\"card-header\"\n className={\n headerBackground !== \"transparent\"\n ? `bg-${headerBackground} -mx-${padding} -mt-${padding} px-${padding} py-${padding} rounded-t-${borderRadius}`\n : undefined\n }\n >\n {title && (\n <div\n data-slot=\"card-title\"\n className={`text-${titleFontSize} text-${titleColor} font-header leading-none font-semibold`}\n >\n {title}\n </div>\n )}\n </div>\n )}\n\n <div data-slot=\"card-content\" className=\"@container flex-1\">\n {contextRegistry ? (\n <ScreenRenderer\n screen={validChildren}\n registry={contextRegistry}\n className={`flex flex-col gap-${gapSizeValue}`}\n />\n ) : (\n <div className={`flex flex-col gap-${gapSizeValue}`} />\n )}\n </div>\n\n {footerEnabled && footerContent && (\n <div\n data-slot=\"card-footer\"\n className={[\n `text-sm text-${footerColor} flex items-center`,\n footerBackground !== \"transparent\"\n ? `bg-${footerBackground} -mx-${padding} -mb-${padding} px-${padding} py-${padding} rounded-b-${borderRadius}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n >\n {footerContent}\n </div>\n )}\n </div>\n );\n}\n\nexport const cardWidgetPropertySchema: WidgetPropertySchema = {\n widgetType: \"CardWidget\",\n displayName: \"Card\",\n fields: [\n // Header\n {\n key: \"headerEnabled\",\n label: \"Show Header\",\n type: \"boolean\",\n description: \"Toggle header visibility\",\n defaultValue: true,\n group: \"Header\",\n },\n {\n key: \"title\",\n label: \"Title\",\n type: \"text\",\n description: \"Card title text\",\n defaultValue: \"Card Title\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n },\n getFontSizeField({\n key: \"titleFontSize\",\n label: \"Title Font Size\",\n description: \"Font size for the title\",\n defaultValue: \"lg\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n getColorField({\n key: \"titleColor\",\n label: \"Title Color\",\n description: \"Color for the title\",\n defaultValue: \"foreground\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n getColorField({\n key: \"headerBackground\",\n label: \"Header Background\",\n description: \"Background color for the header\",\n defaultValue: \"transparent\",\n group: \"Header\",\n requiresKeyToBeTrue: \"headerEnabled\",\n }),\n\n // Footer\n {\n key: \"footerEnabled\",\n label: \"Show Footer\",\n type: \"boolean\",\n description: \"Toggle footer visibility\",\n defaultValue: false,\n group: \"Footer\",\n },\n {\n key: \"footerContent\",\n label: \"Footer Text\",\n type: \"text\",\n description: \"Footer content text\",\n defaultValue: \"\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n },\n getColorField({\n key: \"footerColor\",\n label: \"Footer Color\",\n description: \"Color for the footer text\",\n defaultValue: \"muted\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n }),\n getColorField({\n key: \"footerBackground\",\n label: \"Footer Background\",\n description: \"Background color for the footer\",\n defaultValue: \"transparent\",\n group: \"Footer\",\n requiresKeyToBeTrue: \"footerEnabled\",\n }),\n\n // Design\n {\n type: \"background\",\n key: \"background\",\n label: \"Background\",\n description: \"Background for the card\",\n defaultValue: \"background\",\n group: \"Design\",\n },\n getPaddingField({\n key: \"padding\",\n label: \"Padding\",\n description: \"Card padding\",\n defaultValue: 6,\n group: \"Design\",\n }),\n getBorderRadiusField({\n key: \"borderRadius\",\n label: \"Border Radius\",\n description: \"Card border radius\",\n defaultValue: \"xl\",\n group: \"Design\",\n }),\n getBorderWidthField({\n key: \"borderWidth\",\n label: \"Border Width\",\n description: \"Card border width\",\n defaultValue: \"thin\",\n group: \"Design\",\n }),\n getBorderColorField({\n key: \"borderColor\",\n label: \"Border Color\",\n description: \"Card border color\",\n defaultValue: \"muted\",\n group: \"Design\",\n }),\n getGapField({\n key: \"gapSize\",\n label: \"Gap\",\n description: \"Gap between child widgets\",\n defaultValue: \"md\",\n group: \"Design\",\n }),\n ],\n};\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
|
-
require("./ScreenRenderer-
|
|
2
|
+
require("./ScreenRenderer-CLDJUinO.cjs");
|
|
3
3
|
require("./registry-context-DJ5xiVnt.cjs");
|
|
4
4
|
require("./registries-CpUM406S.cjs");
|
|
5
5
|
require("./fields-C8gY9GlT.cjs");
|
|
6
|
-
const require_CardWidget = require("./CardWidget
|
|
6
|
+
const require_CardWidget = require("./CardWidget--S5FBquC.cjs");
|
|
7
7
|
exports.cardWidgetPropertySchema = require_CardWidget.cardWidgetPropertySchema;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
require("./chunk-9hOWP6kD.cjs");
|
|
2
2
|
require("./countries-api-context-G-NW4BoH.cjs");
|
|
3
|
-
require("./task-composer-form-
|
|
3
|
+
require("./task-composer-form-BEZGTBBZ.cjs");
|
|
4
4
|
require("./translation-api-context-factory-BSRK6Z50.cjs");
|
|
5
5
|
require("./src-Cx7UyT_c.cjs");
|
|
6
6
|
require("./ScreenHeaderContext-DWDN0-mb.cjs");
|
|
7
7
|
require("./Combobox-Dfa0Hn-Q.cjs");
|
|
8
8
|
require("./dist-BPZPs7SF.cjs");
|
|
9
|
-
const require_ContactsScreen = require("./ContactsScreen-
|
|
9
|
+
const require_ContactsScreen = require("./ContactsScreen-CiegGc50.cjs");
|
|
10
10
|
require("./dist-C-U7FKrp.cjs");
|
|
11
11
|
exports.ContactsScreen = require_ContactsScreen.ContactsScreen;
|
|
12
12
|
exports.contactsScreenPropertySchema = require_ContactsScreen.contactsScreenPropertySchema;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-9hOWP6kD.cjs");
|
|
2
2
|
const require_countries_api_context = require("./countries-api-context-G-NW4BoH.cjs");
|
|
3
|
-
const require_task_composer_form = require("./task-composer-form-
|
|
3
|
+
const require_task_composer_form = require("./task-composer-form-BEZGTBBZ.cjs");
|
|
4
4
|
const require_src = require("./src-Cx7UyT_c.cjs");
|
|
5
5
|
const require_ScreenHeaderContext = require("./ScreenHeaderContext-DWDN0-mb.cjs");
|
|
6
6
|
const require_query_keys = require("./query-keys-BpEJqQUB.cjs");
|
|
@@ -345,7 +345,7 @@ function SidebarSkeleton() {
|
|
|
345
345
|
3,
|
|
346
346
|
4
|
|
347
347
|
].map((i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
348
|
-
className: "flex items-center gap-3 rounded-xl
|
|
348
|
+
className: "flex items-center gap-3 rounded-xl p-3",
|
|
349
349
|
"aria-hidden": "true",
|
|
350
350
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "bg-muted size-12 shrink-0 animate-pulse rounded-xl" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
351
351
|
className: "flex-1 space-y-2",
|
|
@@ -403,7 +403,7 @@ const ContactDetailsForm = ({ className, countries = DEFAULT_COUNTRIES, renderAv
|
|
|
403
403
|
children: [renderAvatarPicker && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
404
404
|
className: "flex flex-col items-center gap-3",
|
|
405
405
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
406
|
-
className: "border-border bg-background relative
|
|
406
|
+
className: "border-border bg-background relative size-20 shrink-0 overflow-hidden rounded-full border-2",
|
|
407
407
|
children: avatarUrl ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
408
408
|
src: avatarUrl,
|
|
409
409
|
alt: "",
|
|
@@ -1287,28 +1287,28 @@ function NoteTaskEditor({ titlePlaceholder = "New Note", bodyPlaceholder = "Star
|
|
|
1287
1287
|
onClick: () => editor?.chain().focus().setTextAlign("left").run(),
|
|
1288
1288
|
className: require_src.cn(buttonBase, editor?.isActive({ textAlign: "left" }) ? buttonActive : buttonInactive),
|
|
1289
1289
|
title: "Align left",
|
|
1290
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlignLeft, { className: "
|
|
1290
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlignLeft, { className: "size-3.5" })
|
|
1291
1291
|
}),
|
|
1292
1292
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1293
1293
|
type: "button",
|
|
1294
1294
|
onClick: () => editor?.chain().focus().setTextAlign("center").run(),
|
|
1295
1295
|
className: require_src.cn(buttonBase, editor?.isActive({ textAlign: "center" }) ? buttonActive : buttonInactive),
|
|
1296
1296
|
title: "Align center",
|
|
1297
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlignCenter, { className: "
|
|
1297
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlignCenter, { className: "size-3.5" })
|
|
1298
1298
|
}),
|
|
1299
1299
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1300
1300
|
type: "button",
|
|
1301
1301
|
onClick: () => editor?.chain().focus().setTextAlign("right").run(),
|
|
1302
1302
|
className: require_src.cn(buttonBase, editor?.isActive({ textAlign: "right" }) ? buttonActive : buttonInactive),
|
|
1303
1303
|
title: "Align right",
|
|
1304
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlignRight, { className: "
|
|
1304
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlignRight, { className: "size-3.5" })
|
|
1305
1305
|
}),
|
|
1306
1306
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1307
1307
|
type: "button",
|
|
1308
1308
|
onClick: () => editor?.chain().focus().setTextAlign("justify").run(),
|
|
1309
1309
|
className: require_src.cn(buttonBase, editor?.isActive({ textAlign: "justify" }) ? buttonActive : buttonInactive),
|
|
1310
1310
|
title: "Justify",
|
|
1311
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlignJustify, { className: "
|
|
1311
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlignJustify, { className: "size-3.5" })
|
|
1312
1312
|
}),
|
|
1313
1313
|
toolbarSeparator,
|
|
1314
1314
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
@@ -1316,19 +1316,19 @@ function NoteTaskEditor({ titlePlaceholder = "New Note", bodyPlaceholder = "Star
|
|
|
1316
1316
|
onClick: () => editor?.chain().focus().toggleBulletList().run(),
|
|
1317
1317
|
className: require_src.cn(buttonBase, editor?.isActive("bulletList") ? buttonActive : buttonInactive),
|
|
1318
1318
|
title: "Bullet list",
|
|
1319
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.List, { className: "
|
|
1319
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.List, { className: "size-3.5" })
|
|
1320
1320
|
}),
|
|
1321
1321
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1322
1322
|
type: "button",
|
|
1323
1323
|
onClick: () => editor?.chain().focus().toggleOrderedList().run(),
|
|
1324
1324
|
className: require_src.cn(buttonBase, editor?.isActive("orderedList") ? buttonActive : buttonInactive),
|
|
1325
1325
|
title: "Ordered list",
|
|
1326
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ListOrdered, { className: "
|
|
1326
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ListOrdered, { className: "size-3.5" })
|
|
1327
1327
|
}),
|
|
1328
1328
|
showDueDate && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [toolbarSeparator, dueDate ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1329
1329
|
className: "bg-primary/10 flex items-center gap-1 rounded px-2 py-1",
|
|
1330
1330
|
children: [
|
|
1331
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Calendar, { className: "text-primary
|
|
1331
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Calendar, { className: "text-primary size-3.5" }),
|
|
1332
1332
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1333
1333
|
className: "text-primary text-xs font-medium",
|
|
1334
1334
|
children: formatDateForDisplay(dueDate)
|
|
@@ -1338,18 +1338,18 @@ function NoteTaskEditor({ titlePlaceholder = "New Note", bodyPlaceholder = "Star
|
|
|
1338
1338
|
onClick: () => setDueDate(void 0),
|
|
1339
1339
|
className: "text-primary/60 hover:text-primary ml-1",
|
|
1340
1340
|
title: "Remove due date",
|
|
1341
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.X, { className: "
|
|
1341
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.X, { className: "size-3" })
|
|
1342
1342
|
})
|
|
1343
1343
|
]
|
|
1344
1344
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
1345
1345
|
type: "button",
|
|
1346
1346
|
onClick: () => dateInputRef.current?.showPicker(),
|
|
1347
1347
|
className: "text-muted-foreground hover:bg-muted hover:text-foreground flex h-7 cursor-pointer items-center gap-1 rounded px-2 text-xs font-medium transition-colors",
|
|
1348
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Calendar, { className: "
|
|
1348
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Calendar, { className: "size-3.5" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Due date" })]
|
|
1349
1349
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
1350
1350
|
ref: dateInputRef,
|
|
1351
1351
|
type: "date",
|
|
1352
|
-
className: "invisible absolute
|
|
1352
|
+
className: "invisible absolute size-0",
|
|
1353
1353
|
onChange: (e) => {
|
|
1354
1354
|
if (e.target.value) setDueDate((/* @__PURE__ */ new Date(e.target.value + "T00:00:00")).toISOString());
|
|
1355
1355
|
}
|
|
@@ -1454,7 +1454,7 @@ function NoteTaskModal({ open, onOpenChange, mode, type, initialTitle = "", init
|
|
|
1454
1454
|
children: dueDate ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1455
1455
|
className: "bg-primary/10 inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5",
|
|
1456
1456
|
children: [
|
|
1457
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Calendar, { className: "text-primary
|
|
1457
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Calendar, { className: "text-primary size-3.5" }),
|
|
1458
1458
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
1459
1459
|
className: "text-primary text-sm font-medium",
|
|
1460
1460
|
children: ["Due ", formatDateForDisplay(dueDate)]
|
|
@@ -1464,7 +1464,7 @@ function NoteTaskModal({ open, onOpenChange, mode, type, initialTitle = "", init
|
|
|
1464
1464
|
onClick: () => setDueDate(void 0),
|
|
1465
1465
|
className: "text-primary/60 hover:text-primary ml-1",
|
|
1466
1466
|
title: "Remove due date",
|
|
1467
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.X, { className: "
|
|
1467
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.X, { className: "size-3" })
|
|
1468
1468
|
})
|
|
1469
1469
|
]
|
|
1470
1470
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -1473,11 +1473,11 @@ function NoteTaskModal({ open, onOpenChange, mode, type, initialTitle = "", init
|
|
|
1473
1473
|
type: "button",
|
|
1474
1474
|
onClick: () => dateInputRef.current?.showPicker(),
|
|
1475
1475
|
className: "text-muted-foreground hover:text-foreground hover:bg-muted inline-flex cursor-pointer items-center gap-1.5 rounded-md px-2.5 py-1.5 text-sm font-medium transition-colors",
|
|
1476
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Calendar, { className: "
|
|
1476
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Calendar, { className: "size-3.5" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Add due date" })]
|
|
1477
1477
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
1478
1478
|
ref: dateInputRef,
|
|
1479
1479
|
type: "date",
|
|
1480
|
-
className: "invisible absolute
|
|
1480
|
+
className: "invisible absolute size-0",
|
|
1481
1481
|
onChange: (e) => {
|
|
1482
1482
|
if (e.target.value) setDueDate((/* @__PURE__ */ new Date(e.target.value + "T00:00:00")).toISOString());
|
|
1483
1483
|
}
|
|
@@ -2540,4 +2540,4 @@ Object.defineProperty(exports, "contactsScreenPropertySchema", {
|
|
|
2540
2540
|
}
|
|
2541
2541
|
});
|
|
2542
2542
|
|
|
2543
|
-
//# sourceMappingURL=ContactsScreen-
|
|
2543
|
+
//# sourceMappingURL=ContactsScreen-CiegGc50.cjs.map
|