ghost 6.60.0 → 6.62.0
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/components/ghost-storage-base-3.0.0.tgz +0 -0
- package/components/tryghost-adapter-base-cache-0.2.0.tgz +0 -0
- package/components/tryghost-adapter-base-jobs-0.0.0.tgz +0 -0
- package/components/tryghost-adapter-base-redirects-0.0.0.tgz +0 -0
- package/components/tryghost-adapter-base-route-settings-0.0.0.tgz +0 -0
- package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
- package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
- package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
- package/components/tryghost-checkout-0.0.0.tgz +0 -0
- package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
- package/components/tryghost-i18n-0.0.0.tgz +0 -0
- package/components/tryghost-kg-card-factory-5.2.4.tgz +0 -0
- package/components/tryghost-kg-clean-basic-html-4.3.4.tgz +0 -0
- package/components/tryghost-kg-converters-1.2.5.tgz +0 -0
- package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
- package/components/tryghost-kg-default-nodes-2.2.1.tgz +0 -0
- package/components/tryghost-kg-default-transforms-1.3.4.tgz +0 -0
- package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
- package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
- package/components/tryghost-kg-markdown-html-renderer-7.2.4.tgz +0 -0
- package/components/tryghost-kg-utils-1.1.4.tgz +0 -0
- package/components/tryghost-nql-string-0.0.0.tgz +0 -0
- package/components/tryghost-parse-email-address-0.0.0.tgz +0 -0
- package/content/settings/README.md +1 -1
- package/content/themes/casper/.gitignore +28 -0
- package/content/themes/casper/assets/built/casper.js +1 -1
- package/content/themes/casper/assets/built/screen.css +1 -1
- package/content/themes/casper/assets/css/screen.css +2 -1
- package/content/themes/casper/assets/js/lightbox.js +63 -46
- package/content/themes/casper/package.json +6 -6
- package/content/themes/casper/page.hbs +1 -0
- package/content/themes/casper/post.hbs +1 -0
- package/content/themes/source/.gitignore +28 -0
- package/content/themes/source/assets/built/screen.css +1 -1
- package/content/themes/source/assets/built/source.js +1 -1
- package/content/themes/source/assets/css/screen.css +2 -1
- package/content/themes/source/assets/js/lightbox.js +62 -45
- package/content/themes/source/assets/js/main.js +2 -2
- package/content/themes/source/package.json +4 -4
- package/content/themes/source/partials/feature-image.hbs +1 -0
- package/core/boot.js +62 -21
- package/core/built/admin/assets/Combination-B0l4MKVh.js +41 -0
- package/core/built/admin/assets/InterVariable-DiVDrmQJ.woff2 +0 -0
- package/core/built/admin/assets/InterVariable-Italic-FCBEiFp6.woff2 +0 -0
- package/core/built/admin/assets/{PolarAngleAxis-C4qtHy1B.js → PolarAngleAxis-pkMyqz8g.js} +1 -1
- package/core/built/admin/assets/{RadialBarChart-Bh09Stsj.js → RadialBarChart-JAKoS4KT.js} +1 -1
- package/core/built/admin/assets/{about-BgpmhCuM.js → about-Dyae_UT6.js} +1 -1
- package/core/built/admin/assets/account-migration-CESa0mnX.js +1 -0
- package/core/built/admin/assets/{action-list-lGzZLHc8.js → action-list-C4v0-du8.js} +1 -1
- package/core/built/admin/assets/activitypub/{account-migration-DMHuPnJn.js → account-migration-By69CgCp.js} +16 -16
- package/core/built/admin/assets/activitypub/activitypub.js +9 -10
- package/core/built/admin/assets/activitypub/{avatar-DhTo5D1B.js → avatar-DLPL3Abs.js} +59 -68
- package/core/built/admin/assets/activitypub/{avatar-flipboard-DnVgbEfa.js → avatar-flipboard-C9iDY-QV.js} +2 -2
- package/core/built/admin/assets/activitypub/{bluesky-sharing-BT4zAlW7.js → bluesky-sharing-BJcPMrDd.js} +37 -37
- package/core/built/admin/assets/activitypub/{content-formatters-BeDZ-DIa.js → content-formatters-3rTHg3mp.js} +18 -18
- package/core/built/admin/assets/activitypub/{copy-8sqxUuNd.js → copy-DIAOQoCZ.js} +2 -2
- package/core/built/admin/assets/activitypub/{domain-xQDDu1CS.js → domain-DUR4xSkV.js} +121 -121
- package/core/built/admin/assets/activitypub/{edit-profile-BXdF_r2G.js → edit-profile-BqtfzxCp.js} +40 -40
- package/core/built/admin/assets/activitypub/{explore-CMt7gKlL.js → explore-BxuJd-J4.js} +27 -27
- package/core/built/admin/assets/activitypub/{feed-Bwqdddp_.js → feed-BM1TcksA.js} +51 -51
- package/core/built/admin/assets/activitypub/{field-4co_8FVg.js → field-Dn7HHx2-.js} +3 -3
- package/core/built/admin/assets/activitypub/{hash-DwakMs4X.js → hash-Bm3WxYN4.js} +2 -2
- package/core/built/admin/assets/activitypub/inbox-CCjkuow2.js +1284 -0
- package/core/built/admin/assets/activitypub/{inbox-ckD4wo_r.js → inbox-d8oJRTf4.js} +2 -2
- package/core/built/admin/assets/activitypub/label-1AA_s9Fa.js +16 -0
- package/core/built/admin/assets/activitypub/layout-2-0bw6HN.js +1 -0
- package/core/built/admin/assets/activitypub/{moderation-KCCO7L2J.js → moderation-CnmxEB8w.js} +91 -91
- package/core/built/admin/assets/activitypub/{note-BX_Bz5A0.js → note-ZKc_Bnba.js} +24 -24
- package/core/built/admin/assets/activitypub/{notifications-BQOYGvRv.js → notifications-CB2tJZau.js} +51 -51
- package/core/built/admin/assets/activitypub/{onboarding-CNelD_uF.js → onboarding-BsJ9E5qf.js} +2 -2
- package/core/built/admin/assets/activitypub/{onboarding-mat5Hrl0.js → onboarding-CSUJJIlh.js} +2 -2
- package/core/built/admin/assets/activitypub/{preferences-6h43G9_q.js → preferences-0-JZnUkI.js} +1519 -1519
- package/core/built/admin/assets/activitypub/{profile-BMN9VVZ2.js → profile-C35cFIhM.js} +256 -256
- package/core/built/admin/assets/activitypub/{reply-ZNo04xsO.js → reply-DYK5vVqb.js} +2 -2
- package/core/built/admin/assets/activitypub/{routes-3B9mUQ7i.js → routes-BD4vscyc.js} +796 -790
- package/core/built/admin/assets/activitypub/{separator-D9taVCCa.js → separator-BbQqTm-p.js} +3 -3
- package/core/built/admin/assets/activitypub/settings-BsMROdqh.js +315 -0
- package/core/built/admin/assets/activitypub/{site-DHoMupSB.js → site-O0RL9YCN.js} +2 -2
- package/core/built/admin/assets/activitypub/{step-1-BsGGnBuT.js → step-1-BMSx7c_X.js} +6 -6
- package/core/built/admin/assets/activitypub/{step-2-teosIS0k.js → step-2-DtPQzlTH.js} +6 -6
- package/core/built/admin/assets/activitypub/{step-3-BjD5TokC.js → step-3-CLlOZTyt.js} +11 -11
- package/core/built/admin/assets/activitypub/{tabs-Cvwl1wXU.js → tabs-Dxk-b9M-.js} +306 -306
- package/core/built/admin/assets/activitypub/{topic-filter-C3LZJc2X.js → topic-filter-5yZH6tId.js} +3 -3
- package/core/built/admin/assets/activitypub/{use-activity-pub-queries-Dp9f0gov.js → use-activity-pub-queries-CV50qe03.js} +3 -3
- package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-C4RI0sa9.js → use-navigate-with-base-path-Bmk5h4lW.js} +220 -220
- package/core/built/admin/assets/activitypub/{use-reply-chain-data-C2oNDMUH.js → use-reply-chain-data-Cbvzgjzd.js} +30 -30
- package/core/built/admin/assets/activitypub/{users-CoX6FT_K.js → users-BjcoP_HC.js} +7 -5
- package/core/built/admin/assets/activitypub/{x-Dxm6pV9X.js → x-DbQZOLiI.js} +2 -2
- package/core/built/admin/assets/add-integration-modal-BlF6rs_f.js +1 -0
- package/core/built/admin/assets/add-newsletter-modal-CglVQqah.js +1 -0
- package/core/built/admin/assets/add-recommendation-modal-wz7BsuaG.js +1 -0
- package/core/built/admin/assets/analytics-C4HE1gBg.js +1 -0
- package/core/built/admin/assets/{announcement-bar-modal-BTHiy1ZO.js → announcement-bar-modal-Ci4zz8jO.js} +1 -1
- package/core/built/admin/assets/{api-keys-Boy5pLbD.js → api-keys-Ck-Yteiv.js} +1 -1
- package/core/built/admin/assets/audience-CtbA54Sn.js +1 -0
- package/core/built/admin/assets/{automated-emails-te1D5kq-.js → automated-emails-D5VVMND9.js} +1 -1
- package/core/built/admin/assets/automations-CzKt5fb8.js +1 -0
- package/core/built/admin/assets/bluesky-sharing-BEtJ_gL_.js +1 -0
- package/core/built/admin/assets/{box-By_EgGtm.js → box-CdfQAP_F.js} +1 -1
- package/core/built/admin/assets/{brand-icon-09YqFZjV.js → brand-icon-CrIGOA3Z.js} +1 -1
- package/core/built/admin/assets/{breadcrumb-CcFr_ltt.js → breadcrumb-zUrZrBtW.js} +1 -1
- package/core/built/admin/assets/{button-BshWPHvn.js → button-eNMKQWXr.js} +1 -1
- package/core/built/admin/assets/{card-CiiE7QfM.js → card--VNbfgo3.js} +1 -1
- package/core/built/admin/assets/{chart-BnXyfH11.js → chart-BrhA41Zi.js} +1 -1
- package/core/built/admin/assets/chart-helpers-CfBKt0vT.js +1 -0
- package/core/built/admin/assets/{checkbox-Dwwr_3Py.js → checkbox-CgOn_tKW.js} +1 -1
- package/core/built/admin/assets/{chunk.524.91ecb33e6afc3bd8949b.js → chunk.524.a697dee88db67fdf6021.js} +4 -4
- package/core/built/admin/assets/{chunk.582.512549909741883f960c.js → chunk.582.5ed5d124cfca9c259b9c.js} +6 -6
- package/core/built/admin/assets/{chunk.16.f76a6314082d813d67e0.js → chunk.598.7e056fabb47ce7dbd73f.js} +14 -14
- package/core/built/admin/assets/{code-editor-view-BwIdPy_k.js → code-editor-view-BYNoAoNV.js} +1 -1
- package/core/built/admin/assets/{code-editor-view-CtkF82Fv.js → code-editor-view-K2wI-I5f.js} +1 -1
- package/core/built/admin/assets/color-picker-Ddw80xX6.js +3 -0
- package/core/built/admin/assets/color-picker-field-D9nUhvA7.js +1 -0
- package/core/built/admin/assets/combobox-w9j8PPQT.js +1 -0
- package/core/built/admin/assets/command-BfpHORBv.js +1 -0
- package/core/built/admin/assets/comments-BLmCmyCs.js +1 -0
- package/core/built/admin/assets/confirmation-context-CBM8G0Vj.js +1 -0
- package/core/built/admin/assets/{container-LiZf3XdY.js → container-BuQG1wuP.js} +1 -1
- package/core/built/admin/assets/{content-api-modal-BtpNI92-.js → content-api-modal-TXRz3U7S.js} +1 -1
- package/core/built/admin/assets/context-menu-_QMdd3kp.js +1 -0
- package/core/built/admin/assets/{copy-field-CglgRZyG.js → copy-field-6N01S07E.js} +1 -1
- package/core/built/admin/assets/create-ghost-browse-value-source-qIBymvvf.js +1 -0
- package/core/built/admin/assets/custom-field-type-option-BddFlJFa.js +1 -0
- package/core/built/admin/assets/custom-integration-modal-DmNquxUV.js +1 -0
- package/core/built/admin/assets/{data-list-CupF7bjM.js → data-list-CA2jYGPq.js} +1 -1
- package/core/built/admin/assets/{date-range-select-JPwM0yUj.js → date-range-select-uvz_DtPh.js} +1 -1
- package/core/built/admin/assets/design-and-theme-modal-BSmo12Op.js +2 -0
- package/core/built/admin/assets/{detail-page-D8lx2SdP.js → detail-page-Dnv-CdR1.js} +1 -1
- package/core/built/admin/assets/dirty-confirm-dialog-BZ1iytEd.js +1 -0
- package/core/built/admin/assets/{disabled-sources-indicator-BTJ2ClQu.js → disabled-sources-indicator-DMRrxsiJ.js} +1 -1
- package/core/built/admin/assets/{dist-DzcfoDJ3.js → dist-8YJUlf3B.js} +1 -1
- package/core/built/admin/assets/{dist-Cb5RSHSg.js → dist-B3keLvjj.js} +1 -1
- package/core/built/admin/assets/dist-Dcsslyo72.js +1 -0
- package/core/built/admin/assets/{dist-BT_Z-eCn.js → dist-Dgt2cr6a.js} +1 -1
- package/core/built/admin/assets/domain-BNYrt0aD.js +1 -0
- package/core/built/admin/assets/dropzone-D7nFdAe5.js +5 -0
- package/core/built/admin/assets/edit-profile-C5Asm4LA.js +1 -0
- package/core/built/admin/assets/editor-REokrzci.js +8 -0
- package/core/built/admin/assets/{embed-signup-form-modal-BFTPf04i.js → embed-signup-form-modal-Ds6mPEi5.js} +1 -1
- package/core/built/admin/assets/{empty-indicator-WB1WgT9h.js → empty-indicator-D9QdpuNX.js} +1 -1
- package/core/built/admin/assets/en-B1jX3WMs.js +1 -0
- package/core/built/admin/assets/explore-UY10Egsp.js +1 -0
- package/core/built/admin/assets/feature-image-placeholder-D1iF_8bc.js +1 -0
- package/core/built/admin/assets/feed-81C8mJWR.js +1 -0
- package/core/built/admin/assets/{field-LmNk7wZh.js → field-Dihp5p18.js} +1 -1
- package/core/built/admin/assets/filter-bar-Da1qxybu.js +1 -0
- package/core/built/admin/assets/filter-sources-BO9xUPj7.js +1 -0
- package/core/built/admin/assets/filters-CRUWecfY.js +1 -0
- package/core/built/admin/assets/filters-DirqNXjH.js +1 -0
- package/core/built/admin/assets/first-promoter-modal-CT6MxYZb.js +1 -0
- package/core/built/admin/assets/{ghost-c8807202a07c20030acb719ee0114815.css → ghost-8eabfc1ece81b03cf7b90780d31487e8.css} +1 -1
- package/core/built/admin/assets/{ghost-403cb39badad3df411fc0ba27d220047.js → ghost-c2848508292937415f20f5a830eea59e.js} +31 -28
- package/core/built/admin/assets/{ghost-dark-fbf1e384aaef3ae315e540f0eb7373a7.css → ghost-dark-a7bebe2c561f55369dcf29f4c820f7ff.css} +1 -1
- package/core/built/admin/assets/gift-link-modal-CQVAye17.js +1 -0
- package/core/built/admin/assets/{grid-CUciBfjf.js → grid-Dj29PY05.js} +1 -1
- package/core/built/admin/assets/growth-BWIu-6xj.js +3 -0
- package/core/built/admin/assets/growth-DU29oxeA.js +1 -0
- package/core/built/admin/assets/{heading-CRZZ2FUe.js → heading-Dh5SFVjL.js} +1 -1
- package/core/built/admin/assets/history-modal-CFd1Hvx6.js +1 -0
- package/core/built/admin/assets/html-field-CJBCLTvv.js +1 -0
- package/core/built/admin/assets/{images-C0XvUYMb.js → images-scfkWZiK.js} +1 -1
- package/core/built/admin/assets/{inbox-DZXDUt4s.js → inbox-Mcp4DXZN.js} +14 -14
- package/core/built/admin/assets/index-6MkPdCtr.js +4 -0
- package/core/built/admin/assets/index-Bn7QhcZu.css +2 -0
- package/core/built/admin/assets/index.es-CNnuNH0d.js +1 -0
- package/core/built/admin/assets/{inline-Cw-gigDW.js → inline-BWSs_VzR.js} +1 -1
- package/core/built/admin/assets/{input-group-BPAxETpQ.js → input-group-CMhe2DvY.js} +1 -1
- package/core/built/admin/assets/{input-surface-BdOe4KzO.js → input-surface-BsrIZeSF.js} +1 -1
- package/core/built/admin/assets/{integration-header-B4DyXV06.js → integration-header-Bm6IDb1A.js} +1 -1
- package/core/built/admin/assets/invite-user-modal-DfheMXs0.js +1 -0
- package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +14 -14
- package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +3 -3
- package/core/built/admin/assets/koenig-lexical/style.css +1 -1
- package/core/built/admin/assets/{koenig-lexical-60O_8aiO.js → koenig-lexical-DBSqAuiI.js} +3 -3
- package/core/built/admin/assets/koenig-loader-aFQNlJlD.js +2 -0
- package/core/built/admin/assets/kpi-card-DBRMfGOW.js +1 -0
- package/core/built/admin/assets/{kpi-card-fUHZlzBX.js → kpi-card-DFafD1qq.js} +1 -1
- package/core/built/admin/assets/kpi-helpers-Cv8i8hns.js +1 -0
- package/core/built/admin/assets/kpi-tabs-BJItvLYm.js +1 -0
- package/core/built/admin/assets/{label-VIG969IC.js → label-BnSCvffu.js} +1 -1
- package/core/built/admin/assets/label-picker-KVoo91sh.js +1 -0
- package/core/built/admin/assets/layout-Bjv2Ll-5.js +1 -0
- package/core/built/admin/assets/{link-helpers-Dtq9fxQg.js → link-helpers-MVDdnFCY.js} +1 -1
- package/core/built/admin/assets/{list-page-CdsnQR9N.js → list-page-BucXJ0hi.js} +1 -1
- package/core/built/admin/assets/member-custom-fields-DDQV6QeG.js +1 -0
- package/core/built/admin/assets/member-detail-CdJF6Agw.js +1 -0
- package/core/built/admin/assets/members-DjQbq9Z2.js +4 -0
- package/core/built/admin/assets/{modal-page-BMTzFHVO.js → modal-page-xCivTMvI.js} +1 -1
- package/core/built/admin/assets/moderation-AgCIEso4.js +1 -0
- package/core/built/admin/assets/{multi-select-combobox-CGohnsxJ.js → multi-select-combobox-BcITkUVr.js} +1 -1
- package/core/built/admin/assets/navigation-modal-BkT7b1M2.js +1 -0
- package/core/built/admin/assets/newsletter-BMMAuvgq.js +1 -0
- package/core/built/admin/assets/newsletter-detail-modal-0SCJ7Zpm.js +1 -0
- package/core/built/admin/assets/{newsletter-emails-D5ql1rud.js → newsletter-emails-DKzwafuh.js} +1 -1
- package/core/built/admin/assets/newsletters-BRBb_uQC.js +1 -0
- package/core/built/admin/assets/note-DyGHtS9a.js +1 -0
- package/core/built/admin/assets/notifications-ZgWniKna.js +1 -0
- package/core/built/admin/assets/nql-BLpCn7qX.js +21 -0
- package/core/built/admin/assets/offers-container-modal-B-E8TIWr.js +1 -0
- package/core/built/admin/assets/{onboarding-B4YhlZ0i.js → onboarding-CzIsre-d.js} +1 -1
- package/core/built/admin/assets/onboarding-qg8Akovm.js +1 -0
- package/core/built/admin/assets/{onboarding-route-Cu_ROWPn.js → onboarding-route-CaavZulg.js} +1 -1
- package/core/built/admin/assets/overview-BW8GLeYi.js +1 -0
- package/core/built/admin/assets/overview-BkXZNzaZ.js +1 -0
- package/core/built/admin/assets/{page-header-Cfds8pCg.js → page-header-De0VzKBi.js} +1 -1
- package/core/built/admin/assets/pagemenu-B5KKCpbA.js +1 -0
- package/core/built/admin/assets/pages-jgaFm69d.js +1 -0
- package/core/built/admin/assets/pages-route-CIUAQxtY.js +1 -0
- package/core/built/admin/assets/papaparse.min-cQwnxGCG.js +10 -0
- package/core/built/admin/assets/{pintura-modal-TDTrJ89x.js → pintura-modal-BZ2J9w3n.js} +1 -1
- package/core/built/admin/assets/portal-frame-B6Hr9wHc.js +1 -0
- package/core/built/admin/assets/portal-modal-D4ceei3t.js +1 -0
- package/core/built/admin/assets/post-analytics-header-BYCsT0GP.js +1 -0
- package/core/built/admin/assets/post-analytics-ot7f6pih.js +1 -0
- package/core/built/admin/assets/{post-analytics-provider-Cu3jNeFh.js → post-analytics-provider-Bo1gmYaP.js} +1 -1
- package/core/built/admin/assets/{post-share-modal-P1_M6o-H.js → post-share-modal-C-PaYZ_e.js} +1 -1
- package/core/built/admin/assets/posts-DuGazgTb.js +1 -0
- package/core/built/admin/assets/posts-list-screen-CBGGgjjj.js +2 -0
- package/core/built/admin/assets/posts-route-D6xmS7Vf.js +1 -0
- package/core/built/admin/assets/preferences-C5YJLp74.js +5 -0
- package/core/built/admin/assets/{preview-chrome-BOVO6_PE.js → preview-chrome-BljUBlOk.js} +1 -1
- package/core/built/admin/assets/{preview-modal-MlTjP8UU.js → preview-modal-BfeFqi5y.js} +1 -1
- package/core/built/admin/assets/profile-B8mx2yAu.js +1 -0
- package/core/built/admin/assets/{radio-group-CjtmsCPl.js → radio-group-DczlLKOn.js} +1 -1
- package/core/built/admin/assets/{router-provider-CJC58zTy.js → router-provider-B0gZyiGJ.js} +1 -1
- package/core/built/admin/assets/{schemas-CRsC53ls.js → schemas-DppqmpeJ.js} +2 -2
- package/core/built/admin/assets/select-cb0t_TAJ.js +1 -0
- package/core/built/admin/assets/settings-DZqxR0Da.js +1 -0
- package/core/built/admin/assets/settings-DvfTNdHQ.js +4 -0
- package/core/built/admin/assets/{settings-breadcrumbs-sLDNedBW.js → settings-breadcrumbs-DLzbRRSt.js} +1 -1
- package/core/built/admin/assets/{shade-app-F7WxOyfk-nufqw1hd.js → shade-app-CcS3f8MZ-vwURazk8.js} +2 -2
- package/core/built/admin/assets/share-modal-D2-Bz1_I.js +1 -0
- package/core/built/admin/assets/{skeleton-D7hwjdry.js → skeleton-Ce9GgUpf.js} +1 -1
- package/core/built/admin/assets/slack-modal-DYDTUria.js +1 -0
- package/core/built/admin/assets/sort-button-VVeQjjbu.js +1 -0
- package/core/built/admin/assets/{source-icon-BPsD5ees.js → source-icon-Ck5_5Kgq.js} +1 -1
- package/core/built/admin/assets/{stack-CIfOAAVf.js → stack-B2eszIiq.js} +1 -1
- package/core/built/admin/assets/stats-Rjmk5owg.js +1 -0
- package/core/built/admin/assets/stats-view-BGGmkmgv.js +1 -0
- package/core/built/admin/assets/{step-1-CMta6YFO.js → step-1-CsaBjeN4.js} +1 -1
- package/core/built/admin/assets/{step-2-BG04nh5q.js → step-2-D2vnxOOM.js} +1 -1
- package/core/built/admin/assets/{step-3-ZnMaVIPj.js → step-3-wBoLdGEb.js} +2 -2
- package/core/built/admin/assets/{stripe-button-DDoUKN5a.js → stripe-button-CDgLz0S0.js} +1 -1
- package/core/built/admin/assets/stripe-connect-modal-CSjMJetP.js +1 -0
- package/core/built/admin/assets/{switch-C9djUIMO.js → switch-CI4gLWqb.js} +1 -1
- package/core/built/admin/assets/{table-CrqQtkR2.js → table-Do6iQ83Q.js} +1 -1
- package/core/built/admin/assets/{tabs-CGisSbWq.js → tabs-D2yWLMp_.js} +1 -1
- package/core/built/admin/assets/tag-detail-BhXlOsCa.js +2 -0
- package/core/built/admin/assets/tags-ldukRApe.js +1 -0
- package/core/built/admin/assets/testimonials-modal-CtnZBJKl.js +1 -0
- package/core/built/admin/assets/{text-DU9Hv33_.js → text-BQDSDsKs.js} +1 -1
- package/core/built/admin/assets/{textarea-d9qEkMOP.js → textarea-DJ1Q5V39.js} +1 -1
- package/core/built/admin/assets/tier-detail-modal-BOs8e_G8.js +1 -0
- package/core/built/admin/assets/{toggle-group-CtKZURJd.js → toggle-group-ByUJsxwD.js} +1 -1
- package/core/built/admin/assets/{topic-filter-D8JT8Tq1.js → topic-filter-BgC3g5_v.js} +1 -1
- package/core/built/admin/assets/{transistor-modal-6PUf0idx.js → transistor-modal-Drr0SNfo.js} +1 -1
- package/core/built/admin/assets/trend-badge-6ye93YAW.js +1 -0
- package/core/built/admin/assets/{unsplash-modal-BPuDBPja.js → unsplash-modal-p6AoQoWp.js} +1 -1
- package/core/built/admin/assets/{use-analytics-data--opuzwcz.js → use-analytics-data-CWCMAESo.js} +1 -1
- package/core/built/admin/assets/use-check-theme-limit-error-B8bjF-gO.css +1 -0
- package/core/built/admin/assets/use-check-theme-limit-error-Cw3WQHy8.js +2 -0
- package/core/built/admin/assets/use-filter-params-BIni9taJ.js +1 -0
- package/core/built/admin/assets/use-growth-stats-DCVG3s9w.js +1 -0
- package/core/built/admin/assets/{use-limiter-TDSNiHPB.js → use-limiter-D2WRRx0H.js} +1 -1
- package/core/built/admin/assets/{use-navigate-with-base-path-CK989MlC.js → use-navigate-with-base-path-BHPA228f.js} +1 -1
- package/core/built/admin/assets/{use-pintura-config-CnCGrDFk.js → use-pintura-config-h-J0Lvta.js} +1 -1
- package/core/built/admin/assets/{use-pintura-editor-ntphvtUd.js → use-pintura-editor-BfN1UwzH.js} +1 -1
- package/core/built/admin/assets/use-post-referrers-Czg47m8s.js +1 -0
- package/core/built/admin/assets/use-reply-chain-data-ns0caK8k.js +1 -0
- package/core/built/admin/assets/{use-router-history-entry-BwfQS2mq.js → use-router-history-entry-uldn7zJO.js} +1 -1
- package/core/built/admin/assets/{use-setting-group-DQxV42-O.js → use-setting-group-DpcuCUDg.js} +1 -1
- package/core/built/admin/assets/use-settings-navigation-CZjGrhsp.js +1 -0
- package/core/built/admin/assets/{use-simple-pagination-B2TdNX67.js → use-simple-pagination-DzJWobPR.js} +1 -1
- package/core/built/admin/assets/{use-staff-users-QrR9voeC.js → use-staff-users-Csipb-O0.js} +1 -1
- package/core/built/admin/assets/use-tinybird-query-CSnGXzZh.js +1 -0
- package/core/built/admin/assets/use-tinybird-token-DTOKRR7e.js +1 -0
- package/core/built/admin/assets/{use-unsaved-changes-guard-DpYJcj1d.js → use-unsaved-changes-guard-CBzs-KPi.js} +1 -1
- package/core/built/admin/assets/{use-url-input-WnIqckzS.js → use-url-input-DFr8lCbS.js} +1 -1
- package/core/built/admin/assets/user-detail-modal-B_iUClI6.js +1 -0
- package/core/built/admin/assets/users-Cg-OeGzC.js +1 -0
- package/core/built/admin/assets/{virtual-list-D3MfPNOh.js → virtual-list-BW-padMe.js} +1 -1
- package/core/built/admin/assets/web-C1v33ehA.js +2 -0
- package/core/built/admin/assets/web-C4BKzn2T.js +1 -0
- package/core/built/admin/assets/{zapier-modal-BO6PS_Vd.js → zapier-modal-BBFfI6Ml.js} +1 -1
- package/core/built/admin/index.html +24 -30
- package/core/frontend/apps/private-blogging/lib/views/private.hbs +44 -43
- package/core/frontend/helpers/cancel_link.js +2 -2
- package/core/frontend/helpers/pagination.js +2 -2
- package/core/frontend/helpers/social_accounts.js +2 -2
- package/core/frontend/public/ghost.css +1 -1
- package/core/frontend/public/ghost.min.css +1 -1
- package/core/frontend/services/rendering/renderer.js +15 -0
- package/core/frontend/services/sitemap/user-map-generator.js +9 -2
- package/core/server/adapters/storage/LocalStorageBase.js +8 -5
- package/core/server/api/endpoints/db.js +19 -5
- package/core/server/api/endpoints/index.js +6 -2
- package/core/server/api/endpoints/mail.js +1 -1
- package/core/server/api/endpoints/member-metafields.js +89 -0
- package/core/server/api/endpoints/members.js +4 -4
- package/core/server/api/endpoints/posts.js +4 -3
- package/core/server/api/endpoints/tiers-checkout-config.js +59 -0
- package/core/server/api/endpoints/utils/serializers/input/members.js +4 -7
- package/core/server/api/endpoints/utils/serializers/output/config.js +1 -0
- package/core/server/api/endpoints/utils/serializers/output/index.js +6 -2
- package/core/server/api/endpoints/utils/serializers/output/{member-custom-fields.js → member-metafields.js} +2 -4
- package/core/server/api/endpoints/utils/serializers/output/members.js +2 -4
- package/core/server/api/endpoints/utils/serializers/output/tiers-checkout-config.js +12 -0
- package/core/server/api/endpoints/utils/validators/input/invitations.js +0 -5
- package/core/server/api/endpoints/utils/validators/input/pages.js +1 -1
- package/core/server/api/endpoints/utils/validators/input/posts.js +1 -1
- package/core/server/data/exporter/table-lists.js +3 -0
- package/core/server/data/importer/content-files.js +57 -0
- package/core/server/data/importer/handlers/image.js +2 -2
- package/core/server/data/importer/import-archive.js +131 -0
- package/core/server/data/importer/import-manager.js +18 -180
- package/core/server/data/importer/importers/content-file-importer.js +66 -4
- package/core/server/data/importer/importers/data/data-importer.js +3 -3
- package/core/server/data/migrations/utils/migrations.js +1 -1
- package/core/server/data/migrations/versions/6.61/2026-08-19-14-30-20-add-written-by-to-members-custom-field-values.js +42 -0
- package/core/server/data/migrations/versions/6.61/2026-08-19-14-38-53-add-members-custom-field-bindings-table.js +26 -0
- package/core/server/data/migrations/versions/6.61/2026-08-19-14-48-06-add-tier-checkout-field-tables.js +35 -0
- package/core/server/data/schema/schema.js +90 -0
- package/core/server/data/seeders/importers/automation-action-revisions-importer.js +3 -3
- package/core/server/data/seeders/importers/automation-actions-importer.js +3 -3
- package/core/server/data/seeders/importers/automation-run-steps-importer.js +3 -3
- package/core/server/data/seeders/importers/automation-runs-importer.js +5 -5
- package/core/server/data/seeders/importers/automations-importer.js +3 -3
- package/core/server/data/seeders/importers/comment-reports-importer.js +1 -1
- package/core/server/data/seeders/importers/comments-importer.js +1 -1
- package/core/server/data/seeders/importers/email-batches-importer.js +1 -1
- package/core/server/data/seeders/importers/email-recipients-importer.js +1 -1
- package/core/server/data/seeders/importers/emails-importer.js +1 -1
- package/core/server/data/seeders/importers/labels-importer.js +1 -1
- package/core/server/data/seeders/importers/members-click-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-created-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-feedback-importer.js +1 -1
- package/core/server/data/seeders/importers/members-importer.js +1 -1
- package/core/server/data/seeders/importers/members-login-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-products-importer.js +1 -1
- package/core/server/data/seeders/importers/members-status-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-stripe-customers-importer.js +1 -1
- package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +1 -1
- package/core/server/data/seeders/importers/members-subscribe-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +1 -1
- package/core/server/data/seeders/importers/offer-redemptions-importer.js +1 -1
- package/core/server/data/seeders/importers/offers-importer.js +1 -1
- package/core/server/data/seeders/importers/posts-importer.js +1 -1
- package/core/server/data/seeders/importers/table-importer.js +2 -2
- package/core/server/data/seeders/importers/tags-importer.js +1 -1
- package/core/server/data/seeders/importers/users-importer.js +1 -1
- package/core/server/data/seeders/importers/web-mentions-importer.js +1 -1
- package/core/server/data/seeders/utils/random.js +3 -3
- package/core/server/ghost-server.js +3 -2
- package/core/server/lib/db-types/boolean.js +18 -0
- package/core/server/lib/image/image-size.js +24 -0
- package/core/server/lib/package-json/parse.js +2 -2
- package/core/server/lib/promise-pool.js +31 -0
- package/core/server/models/member.js +6 -17
- package/core/server/models/post.js +2 -2
- package/core/server/models/relations/authors.js +2 -16
- package/core/server/models/user.js +9 -2
- package/core/server/services/auth/passwordreset.js +13 -0
- package/core/server/services/automations/database-automations-repository.js +26 -26
- package/core/server/services/automations/poll.js +1 -0
- package/core/server/services/comments/comments-controller.js +30 -9
- package/core/server/services/comments/comments-service.js +55 -5
- package/core/server/services/content-import/csv/formula.js +12 -0
- package/core/server/services/content-import/csv/index.js +6 -1
- package/core/server/services/content-import/csv/parse.js +27 -6
- package/core/server/services/content-import/csv/serialize.js +13 -0
- package/core/server/services/content-import/import/assets.js +74 -0
- package/core/server/services/content-import/import/completion-email.js +164 -0
- package/core/server/services/content-import/import/errors-file.js +36 -0
- package/core/server/services/content-import/import/importer.js +204 -54
- package/core/server/services/content-import/import/local-media-url.js +63 -0
- package/core/server/services/content-import/import/media.js +254 -0
- package/core/server/services/content-import/import/post-data.js +1 -1
- package/core/server/services/content-import/import/post-link.js +11 -0
- package/core/server/services/content-import/import/post-repository.js +100 -0
- package/core/server/services/content-import/import/reader.js +9 -2
- package/core/server/services/content-import/import/relations.js +149 -0
- package/core/server/services/content-import/import/report.js +34 -0
- package/core/server/services/content-import/import/row.js +11 -2
- package/core/server/services/content-import/import/schema.js +30 -0
- package/core/server/services/content-import/import/source.js +125 -0
- package/core/server/services/content-import/import/staged-file.js +29 -0
- package/core/server/services/content-import/import/store.js +25 -2
- package/core/server/services/content-import/index.js +58 -34
- package/core/server/services/content-import/jobs/content-csv-import-job.js +20 -0
- package/core/server/services/custom-redirects/redirect-config-parser.js +2 -2
- package/core/server/services/custom-redirects/redirects-service.js +1 -1
- package/core/server/services/custom-redirects/validation.js +1 -1
- package/core/server/services/email-address/email-address-parser.js +30 -38
- package/core/server/services/email-address/email-address-service.js +37 -4
- package/core/server/services/email-analytics/email-analytics-service.js +8 -1
- package/core/server/services/email-analytics/index.js +2 -7
- package/core/server/services/email-analytics/lib/queries.js +7 -1
- package/core/server/services/email-service/batch-sending-service.js +0 -4
- package/core/server/services/email-service/email-renderer.js +14 -4
- package/core/server/services/email-service/email-service-wrapper.js +0 -9
- package/core/server/services/email-service/mailgun-email-provider.js +20 -9
- package/core/server/services/gift-links/schema.js +3 -3
- package/core/server/services/gifts/CONTEXT.md +1 -1
- package/core/server/services/gifts/constants.js +1 -1
- package/core/server/services/gifts/email-templates/gift-delivery.hbs +3 -3
- package/core/server/services/gifts/gift-bookshelf-repository.js +2 -2
- package/core/server/services/gifts/gift-delivery-bookshelf-repository.js +18 -9
- package/core/server/services/gifts/gift-delivery-schema.js +5 -5
- package/core/server/services/gifts/gift-delivery-service.js +4 -0
- package/core/server/services/gifts/gift-email-service.js +0 -1
- package/core/server/services/gifts/gift-schema.js +10 -10
- package/core/server/services/gifts/gift-service.js +4 -2
- package/core/server/services/gifts/index.js +3 -3
- package/core/server/services/gifts/jobs/index.js +4 -4
- package/core/server/services/indexnow-ping/indexnow-ping-service.js +2 -2
- package/core/server/services/invitations/accept.js +4 -2
- package/core/server/services/jobs/job-service.js +0 -9
- package/core/server/services/jobs-service/register-job-handlers.js +25 -15
- package/core/server/services/lib/mailgun-client.js +44 -8
- package/core/server/services/mail/ghost-mailer.js +4 -4
- package/core/server/services/media-inliner/external-media-inliner-job.js +12 -0
- package/core/server/services/media-inliner/external-media-inliner.js +103 -29
- package/core/server/services/media-inliner/service.js +13 -41
- package/core/server/services/media-inliner/types.js +2 -0
- package/core/server/services/member-welcome-emails/service.js +7 -7
- package/core/server/services/members/api.js +1 -0
- package/core/server/services/members/import-export/csv/parse.js +0 -7
- package/core/server/services/members/import-export/export/exporter.js +4 -6
- package/core/server/services/members/import-export/import/completion-email.js +2 -5
- package/core/server/services/members/import-export/import/importer.js +21 -5
- package/core/server/services/members/import-export/import/row.js +0 -3
- package/core/server/services/members/import-export/import/stripe-utils.js +6 -1
- package/core/server/services/members/import-export/index.js +10 -12
- package/core/server/services/members/jobs/clean-expired-comped-job.js +7 -0
- package/core/server/services/members/jobs/clean-expired-comped-task.js +145 -0
- package/core/server/services/members/jobs/index.js +48 -24
- package/core/server/services/members/members-api/controllers/member-controller.js +11 -0
- package/core/server/services/members/members-api/controllers/router-controller.js +3 -6
- package/core/server/services/members/members-api/members-api.js +9 -6
- package/core/server/services/members/members-api/repositories/event-repository.js +0 -4
- package/core/server/services/members/members-api/services/member-bread-service.js +53 -63
- package/core/server/services/members/members-api/services/payments-service.js +47 -1
- package/core/server/services/members/service.js +1 -5
- package/core/server/services/members-custom-fields/actions.js +27 -1
- package/core/server/services/members-custom-fields/bindings-service.js +120 -0
- package/core/server/services/members-custom-fields/codec.js +3 -4
- package/core/server/services/members-custom-fields/definitions-service.js +165 -22
- package/core/server/services/members-custom-fields/filter.js +75 -93
- package/core/server/services/members-custom-fields/index.js +11 -4
- package/core/server/services/members-custom-fields/key.js +2 -1
- package/core/server/services/members-custom-fields/models.js +1 -1
- package/core/server/services/members-custom-fields/queries.js +5 -0
- package/core/server/services/members-custom-fields/schema.js +37 -6
- package/core/server/services/members-custom-fields/serializers.js +3 -5
- package/core/server/services/members-custom-fields/values-service.js +65 -31
- package/core/server/services/mentions/mention-controller.js +23 -21
- package/core/server/services/mentions/process-webmention-job.js +16 -0
- package/core/server/services/mentions/service.js +8 -4
- package/core/server/services/public-config/config.js +7 -0
- package/core/server/services/route-settings/validation-errors.js +1 -1
- package/core/server/services/route-settings/yaml-parser.js +1 -1
- package/core/server/services/settings/settings-service.js +1 -8
- package/core/server/services/settings-helpers/settings-helpers.js +4 -6
- package/core/server/services/slack-ping/slack-ping-service.js +1 -1
- package/core/server/services/staff/staff-service-emails.js +2 -2
- package/core/server/services/stripe/config.js +14 -8
- package/core/server/services/stripe/service.js +10 -1
- package/core/server/services/stripe/services/checkout/completed-session.js +68 -0
- package/core/server/services/stripe/services/checkout/session-options.js +100 -0
- package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +71 -1
- package/core/server/services/stripe/stripe-api.js +31 -0
- package/core/server/services/stripe/stripe-service.js +26 -9
- package/core/server/services/stripe/webhook-controller.js +10 -0
- package/core/server/services/tier-checkout-config/codec.js +99 -0
- package/core/server/services/tier-checkout-config/index.js +26 -0
- package/core/server/services/tier-checkout-config/models.js +63 -0
- package/core/server/services/tier-checkout-config/queries.js +80 -0
- package/core/server/services/tier-checkout-config/schema.js +33 -0
- package/core/server/services/tier-checkout-config/serializers.js +128 -0
- package/core/server/services/tier-checkout-config/service.js +304 -0
- package/core/server/services/tiers/service.js +21 -0
- package/core/server/services/update-check/index.js +13 -13
- package/core/server/services/update-check/jobs/update-check-job.js +7 -0
- package/core/server/services/update-check/update-check-service.js +2 -2
- package/core/server/web/admin/controller.js +1 -1
- package/core/server/web/api/endpoints/admin/routes.js +34 -20
- package/core/server/web/api/middleware/upload.js +2 -2
- package/core/server/web/parent/app.js +5 -0
- package/core/server/web/parent/middleware/filter-query-parameters.js +94 -0
- package/core/server/web/parent/middleware/index.js +1 -0
- package/core/server/web/query-parameter-policy/index.js +9 -0
- package/core/server/web/query-parameter-policy/policy.json +58 -0
- package/core/server/web/query-parameter-policy/schema.js +38 -0
- package/core/shared/config/defaults.json +3 -0
- package/core/shared/config/env/config.testing-mysql.json +4 -1
- package/core/shared/config/env/config.testing.json +3 -0
- package/core/shared/config/overrides.json +4 -2
- package/core/shared/labs.js +9 -15
- package/package.json +25 -25
- package/pnpm-lock.yaml +741 -108
- package/pnpm-workspace.yaml +12 -9
- package/tsconfig.json +2 -3
- package/components/tryghost-kg-default-nodes-2.2.0.tgz +0 -0
- package/core/built/admin/assets/Combination-gnJO3vIw.js +0 -41
- package/core/built/admin/assets/account-migration-8qTEI1i1.js +0 -1
- package/core/built/admin/assets/activitypub/inbox-DQ5CwLma.js +0 -1284
- package/core/built/admin/assets/activitypub/label-B72sfvEU.js +0 -16
- package/core/built/admin/assets/activitypub/layout-CXajhRsL.js +0 -1
- package/core/built/admin/assets/activitypub/settings-71gCm3SO.js +0 -315
- package/core/built/admin/assets/add-integration-modal--YpTq3c0.js +0 -1
- package/core/built/admin/assets/add-newsletter-modal-C8Ix2hol.js +0 -1
- package/core/built/admin/assets/add-recommendation-modal-CScuNFz4.js +0 -1
- package/core/built/admin/assets/alert-dialog-wEbVxANM.js +0 -1
- package/core/built/admin/assets/analytics-Cnji45H5.js +0 -1
- package/core/built/admin/assets/app-utils-D2Wp7ZSS.js +0 -1
- package/core/built/admin/assets/audience-DTLMXAFH.js +0 -1
- package/core/built/admin/assets/automations-BWpRCZ_f.js +0 -1
- package/core/built/admin/assets/bluesky-sharing-DHOpQxff.js +0 -1
- package/core/built/admin/assets/chart-helpers-B3OqQ6Ez.js +0 -1
- package/core/built/admin/assets/color-picker-Bmo1r9Fc.js +0 -3
- package/core/built/admin/assets/color-picker-field-DywowPhF.js +0 -1
- package/core/built/admin/assets/combobox-C4QCh6Yw.js +0 -1
- package/core/built/admin/assets/command-DcLbSifC.js +0 -1
- package/core/built/admin/assets/comments-Bxy_3WyE.js +0 -1
- package/core/built/admin/assets/confirmation-context-CLFHhyyH.js +0 -1
- package/core/built/admin/assets/custom-field-type-option-D0PXoSnP.js +0 -10
- package/core/built/admin/assets/custom-integration-modal-DCIHKN33.js +0 -1
- package/core/built/admin/assets/design-and-theme-modal-CZ-PkW7o.js +0 -23
- package/core/built/admin/assets/dialog-Db7c164G.js +0 -1
- package/core/built/admin/assets/dirty-confirm-dialog-CmARpZQS.js +0 -1
- package/core/built/admin/assets/dist-QLZuGq7o2.js +0 -1
- package/core/built/admin/assets/domain-D0SAtc-T.js +0 -1
- package/core/built/admin/assets/dropzone-CaPOeDRZ.js +0 -5
- package/core/built/admin/assets/edit-profile-By7v5XW5.js +0 -1
- package/core/built/admin/assets/editor-COXn4Atu.js +0 -8
- package/core/built/admin/assets/explore-BsNYrubV.js +0 -1
- package/core/built/admin/assets/feed-8RR1O1bK.js +0 -1
- package/core/built/admin/assets/filter-sources-4C0kF1NU.js +0 -1
- package/core/built/admin/assets/filters-CV5jCb9n.js +0 -1
- package/core/built/admin/assets/filters-Dmr0PoqU.js +0 -1
- package/core/built/admin/assets/first-promoter-modal-OCzSaL3B.js +0 -1
- package/core/built/admin/assets/gift-link-modal-0mzjn5oF.js +0 -1
- package/core/built/admin/assets/growth-55vWlGT_.js +0 -1
- package/core/built/admin/assets/growth-DA5AluYw.js +0 -3
- package/core/built/admin/assets/history-modal-G1s5hHz7.js +0 -1
- package/core/built/admin/assets/html-field-BegxsWpw.js +0 -1
- package/core/built/admin/assets/index-CDP9tIOk.js +0 -4
- package/core/built/admin/assets/index-Dqf2x-ry.css +0 -1
- package/core/built/admin/assets/index.es-BMUCj9TR.js +0 -1
- package/core/built/admin/assets/input-UHrKuvBT.js +0 -1
- package/core/built/admin/assets/invite-user-modal-BrAkxEO3.js +0 -1
- package/core/built/admin/assets/koenig-loader-DwVY_V-H.js +0 -1
- package/core/built/admin/assets/kpi-card-LERqWBoY.js +0 -1
- package/core/built/admin/assets/kpi-helpers-DB3ouhYF.js +0 -1
- package/core/built/admin/assets/kpi-tabs-BGvtMD8S.js +0 -1
- package/core/built/admin/assets/label-picker-BBWykUeA.js +0 -1
- package/core/built/admin/assets/layout-Di5K7doM.js +0 -1
- package/core/built/admin/assets/loading-indicator-SFTqyYVE.js +0 -1
- package/core/built/admin/assets/member-custom-fields-gOv6Hoh3.js +0 -1
- package/core/built/admin/assets/member-detail-D7mZDDp3.js +0 -1
- package/core/built/admin/assets/member-route-0Aa52Ntz.js +0 -1
- package/core/built/admin/assets/members-DvZG9t69.js +0 -2
- package/core/built/admin/assets/moderation-DzzPLDyl.js +0 -1
- package/core/built/admin/assets/navigation-modal-CI8Bx5vn.js +0 -1
- package/core/built/admin/assets/newsletter-Bg3cq5U-.js +0 -1
- package/core/built/admin/assets/newsletter-detail-modal-DQU3r4g2.js +0 -1
- package/core/built/admin/assets/newsletters-DMDfZbMS.js +0 -1
- package/core/built/admin/assets/note-i8k6pjaw.js +0 -1
- package/core/built/admin/assets/notifications-psA_2Ph4.js +0 -1
- package/core/built/admin/assets/offers-container-modal-BWfjSdyg.js +0 -1
- package/core/built/admin/assets/onboarding-DGQuV7Ew.js +0 -1
- package/core/built/admin/assets/overview-C-6xOLaf.js +0 -1
- package/core/built/admin/assets/overview-DaLhpRrC.js +0 -1
- package/core/built/admin/assets/pages-B6vr9F_D.js +0 -1
- package/core/built/admin/assets/popover-CFgqFDvC.js +0 -1
- package/core/built/admin/assets/portal-frame-DjBF-uy2.js +0 -1
- package/core/built/admin/assets/portal-modal-Cf0pBAk8.js +0 -1
- package/core/built/admin/assets/post-analytics-Buz1COoY.js +0 -1
- package/core/built/admin/assets/post-analytics-header-B-P0eFnT.js +0 -1
- package/core/built/admin/assets/posts-KY3aUhVV.js +0 -1
- package/core/built/admin/assets/preferences-Cq1aOiLy.js +0 -5
- package/core/built/admin/assets/profile-D6dHYf2o.js +0 -1
- package/core/built/admin/assets/select-D_RQaXgt.js +0 -1
- package/core/built/admin/assets/settings-B5hJKZ5C.js +0 -1
- package/core/built/admin/assets/settings-DIo_F-MF.js +0 -4
- package/core/built/admin/assets/share-modal-CLBfj377.js +0 -1
- package/core/built/admin/assets/shim-ClF_m5ux.js +0 -1
- package/core/built/admin/assets/slack-modal-Bt9I_tEo.js +0 -1
- package/core/built/admin/assets/sort-button-DMBXF7tP.js +0 -1
- package/core/built/admin/assets/stats-B_YkF7bp.js +0 -1
- package/core/built/admin/assets/stats-view-BOCp9RG8.js +0 -1
- package/core/built/admin/assets/stripe-connect-modal-BeSukI8q.js +0 -1
- package/core/built/admin/assets/tag-detail-2a3BfzTW.js +0 -2
- package/core/built/admin/assets/tags-Dp2_8UzL.js +0 -1
- package/core/built/admin/assets/testimonials-modal-C9nrypNo.js +0 -1
- package/core/built/admin/assets/tier-detail-modal-CxRwgTPR.js +0 -1
- package/core/built/admin/assets/use-check-theme-limit-error-C9-QhGdV.js +0 -1
- package/core/built/admin/assets/use-filter-params-CSpAvgD2.js +0 -1
- package/core/built/admin/assets/use-growth-stats-BOmoPDHJ.js +0 -1
- package/core/built/admin/assets/use-post-referrers-CbXLFIex.js +0 -1
- package/core/built/admin/assets/use-reply-chain-data-JYFKSO83.js +0 -1
- package/core/built/admin/assets/use-settings-navigation-BBzro2-V.js +0 -1
- package/core/built/admin/assets/use-tinybird-query-D2Aeoty5.js +0 -39
- package/core/built/admin/assets/use-tinybird-token-DBuwMmln.js +0 -1
- package/core/built/admin/assets/user-detail-modal-59mBJqxN.js +0 -1
- package/core/built/admin/assets/users-5msE1WMs.js +0 -1
- package/core/built/admin/assets/web-DUuX7nE2.js +0 -2
- package/core/built/admin/assets/web-N8ucs2aG.js +0 -1
- package/core/server/api/endpoints/member-custom-fields.js +0 -100
- package/core/server/services/jobs/worker-model-event-bridge.js +0 -149
- package/core/server/services/members/jobs/clean-expired-comped.js +0 -132
- package/core/server/services/update-check/run-update-check.js +0 -63
- /package/core/server/lib/{db-date.js → db-types/date.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r,g as i,i as a,r as o}from"./stats-B_YkF7bp.js";import{_ as s}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as c,t as l}from"./router-provider-CJC58zTy.js";import{f as u,l as d,p as f}from"./dist-Cb5RSHSg.js";import{a as p,s as m,t as h}from"./app-utils-D2Wp7ZSS.js";import{Ht as g,Ut as _,t as v}from"./button-BshWPHvn.js";import{g as y,n as b,o as x,r as ee}from"./chart-BnXyfH11.js";import{c as te,i as ne,l as re,n as S,s as ie,t as ae,u as oe}from"./chart-helpers-B3OqQ6Ez.js";import{n as se,t as C}from"./sort-button-DMBXF7tP.js";import{r as ce,t as le}from"./tabs-CGisSbWq.js";import{a as w,i as T,n as E,o as D,r as O,s as k,t as A}from"./select-D_RQaXgt.js";import{n as j}from"./skeleton-D7hwjdry.js";import{t as M}from"./loading-indicator-SFTqyYVE.js";import{a as N,n as P,o as F,r as I,t as L}from"./card-CiiE7QfM.js";import{t as R}from"./empty-indicator-WB1WgT9h.js";import{a as z,c as B,n as ue,r as V,s as de,t as fe}from"./table-CrqQtkR2.js";import{r as pe}from"./newsletters-DhNigJUh.js";import{Hn as me,Kn as H,Or as U,Qn as he,Wn as ge,jr as _e,kr as W,z as G}from"./index-CDP9tIOk.js";import{i as ve,n as ye,r as be,t as xe}from"./stats-view-BOCp9RG8.js";import{n as K,r as q,t as Se}from"./kpi-tabs-BGvtMD8S.js";import{t as Ce}from"./use-analytics-data--opuzwcz.js";import{t as we}from"./get-site-timezone-HgL0jI_F.js";var J=e(t(),1),Y=n(),Te=({active:e,payload:t})=>{if(!e||!t?.length)return null;let n=t[0].payload,r=typeof n.send_date==`string`?n.send_date:n.send_date.toISOString().split(`T`)[0];return(0,Y.jsxs)(`div`,{className:`max-w-[240px] min-w-[220px] rounded-lg border bg-background px-3 py-2 shadow-lg`,children:[(0,Y.jsxs)(`div`,{className:`mb-2 flex w-full flex-col border-b pb-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm leading-tight font-semibold`,children:n.post_title}),(0,Y.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Sent on `,d(r)]})]}),(0,Y.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Sent`}),(0,Y.jsx)(`div`,{className:`ml-2 w-full text-right font-mono`,children:u(n.sent_to)})]}),(0,Y.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Opens`}),(0,Y.jsxs)(`div`,{className:`ml-2 w-full text-right font-mono`,children:[(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[u(n.total_opens),` / `]}),f(n.open_rate)]})]}),(0,Y.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Clicks`}),(0,Y.jsxs)(`div`,{className:`ml-2 w-full text-right font-mono`,children:[(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[u(n.total_clicks),` / `]}),f(n.click_rate)]})]})]})},Ee=({subscribersData:e,avgsData:t,totals:n,isLoading:r,isAvgsLoading:i,initialTab:a=`total-subscribers`})=>{let[o,l]=(0,J.useState)(a),[d,p]=(0,J.useState)(!1),{range:m}=G(),g=c(),[v]=s(),C=U(),w=W(),{totalSubscribers:T,avgOpenRate:E,avgClickRate:D}=n,O=(0,J.useMemo)(()=>{if(!e||e.length===0)return[];let t=[];return t=ne(e,m,`value`,`exact`),t.map(e=>({...e,formattedValue:u(e.value),label:`Total Subscribers`}))},[e,m]),k=(0,J.useMemo)(()=>ae(m,e||[]),[e,m]),A=(0,J.useMemo)(()=>{if(!O||O.length<=1)return{direction:`same`,value:`0%`};let e=O[0]?.value??0,t=O[O.length-1]?.value??0,n=`same`;t>e?n=`up`:t<e&&(n=`down`);let r;if(e===0)r=t===0?`0%`:`+100%`;else{let n=(t-e)/e*100,i=Math.round(n*10)/10;r=`${n>=0?`+`:``}${i}%`}return{direction:n,value:r}},[O]);(0,J.useEffect)(()=>{l(a)},[a]);let j=e=>{l(e);let t=new URLSearchParams(v);t.set(`tab`,e),g(`?${t.toString()}`,{replace:!0})},N={open_rate:{label:`Open rate`}},P=(0,J.useMemo)(()=>({"total-subscribers":{color:`var(--chart-darkblue)`,datakey:`value`},"avg-open-rate":{color:`var(--chart-blue)`,datakey:`open_rate`},"avg-click-rate":{color:`var(--chart-teal)`,datakey:`click_rate`}}),[]),{barDomain:F,barTicks:I}=(0,J.useMemo)(()=>{if(!t||t.length===0||o===`total-subscribers`)return{barDomain:[0,1],barTicks:[0,1]};let e=P[o]?.datakey;if(!e)return{barDomain:[0,1],barTicks:[0,1]};let n=t.map(t=>t[e]).filter(e=>typeof e==`number`);if(n.length===0)return{barDomain:[0,1],barTicks:[0,1]};let r=o===`avg-open-rate`?E:D,i=Math.max(Math.max(...n),r),a;return a=i<.01?.01:i<.1?(Math.floor(i*100)+1)/100:(Math.floor(i*10)+1)/10,{barDomain:[0,a],barTicks:[0,a]}},[t,o,P,E,D]);if(r)return(0,Y.jsx)(`div`,{className:`-mb-6 flex h-[calc(16vw+132px)] w-full items-start justify-center`,children:(0,Y.jsx)(M,{})});let L=`grid-cols-3`;(!C||!w)&&(L=`grid-cols-2`),!C&&!w&&(L=`grid-cols-1`);let z=o===`avg-open-rate`&&E>F[0]&&E<F[1]||o===`avg-click-rate`&&D>F[0]&&D<F[1],B=o===`avg-open-rate`?E:D;return(0,Y.jsxs)(le,{defaultValue:a,variant:`kpis`,children:[(0,Y.jsxs)(ce,{className:`-mx-6 hidden grid-cols-3 md:visible! md:grid! ${L}`,children:[(0,Y.jsx)(K,{className:`${!w&&!C&&`cursor-auto after:hidden`}`,value:`total-subscribers`,onClick:()=>{j(`total-subscribers`)},children:(0,Y.jsx)(q,{color:P[`total-subscribers`].color,"data-testid":`total-subscribers-value`,diffDirection:A.direction,diffValue:A.value,label:`Total subscribers`,value:u(T)})}),w&&(0,Y.jsx)(K,{value:`avg-open-rate`,onClick:()=>{j(`avg-open-rate`)},children:(0,Y.jsx)(q,{className:i?`opacity-50`:``,color:P[`avg-open-rate`].color,label:`Avg. open rate`,value:f(E)})}),C&&(0,Y.jsx)(K,{value:`avg-click-rate`,onClick:()=>{j(`avg-click-rate`)},children:(0,Y.jsx)(q,{className:i?`opacity-50`:``,color:P[`avg-click-rate`].color,label:`Avg. click rate`,value:f(D)})})]}),(0,Y.jsxs)(me,{children:[(0,Y.jsx)(he,{className:`md:hidden`,asChild:!0,children:(0,Y.jsxs)(Se,{children:[o===`total-subscribers`&&(0,Y.jsx)(q,{color:P[`total-subscribers`].color,label:`Total subscribers`,value:u(T)}),o===`avg-open-rate`&&w&&(0,Y.jsx)(q,{className:i?`opacity-50`:``,color:P[`avg-open-rate`].color,label:`Avg. open rate`,value:f(E)}),o===`avg-click-rate`&&C&&(0,Y.jsx)(q,{className:i?`opacity-50`:``,color:P[`avg-click-rate`].color,label:`Avg. click rate`,value:f(D)})]})}),(0,Y.jsxs)(ge,{align:`end`,className:`w-56`,children:[(0,Y.jsx)(H,{onClick:()=>j(`total-subscribers`),children:`Total subscribers`}),w&&(0,Y.jsx)(H,{onClick:()=>j(`avg-open-rate`),children:`Avg. open rate`}),C&&(0,Y.jsx)(H,{onClick:()=>j(`avg-click-rate`),children:`Avg. click rate`})]})]}),(0,Y.jsxs)(`div`,{className:`my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:[o===`total-subscribers`&&(0,Y.jsx)(ie,{className:`-mb-3 h-[16vw] max-h-[320px] min-h-[180px] w-full`,color:P[`total-subscribers`].color,data:O,id:`mrr`,range:k}),(o===`avg-open-rate`&&w||o===`avg-click-rate`&&C)&&(0,Y.jsx)(Y.Fragment,{children:i?(0,Y.jsx)(`div`,{className:`h-[320px] w-full items-center justify-center`,children:(0,Y.jsx)(M,{})}):t&&t.length>0?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(b,{className:`aspect-auto h-[200px] w-full md:h-[220px] xl:h-[320px]`,config:N,children:(0,Y.jsxs)(se,{className:d?`cursor-pointer!`:``,data:t,margin:{top:20},onClick:e=>{let t=(e.activePayload?.[0])?.payload?.post_id;t&&g(`/posts/analytics/${t}`)},onMouseLeave:()=>p(!1),onMouseMove:e=>{let t=(e.activePayload?.[0])?.payload?.post_id;p(!!t)},children:[(0,Y.jsx)(`defs`,{children:(0,Y.jsxs)(`linearGradient`,{id:`barGradient`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,Y.jsx)(`stop`,{offset:`0%`,stopColor:P[o].color,stopOpacity:.8}),(0,Y.jsx)(`stop`,{offset:`100%`,stopColor:P[o].color,stopOpacity:.6})]})}),(0,Y.jsx)(oe,{horizontal:!0,stroke:`var(--border)`,vertical:!1}),(0,Y.jsx)(re,{axisLine:{stroke:`var(--border)`,strokeWidth:1},dataKey:`post_id`,interval:0,stroke:`var(--border)`,tickFormatter:()=>``,tickLine:!1,tickMargin:10}),(0,Y.jsx)(te,{axisLine:!1,domain:F,tickFormatter:e=>f(e),tickLine:!1,ticks:I,width:h(I,e=>f(e))}),(0,Y.jsx)(ee,{content:(0,Y.jsx)(Te,{}),cursor:!1,isAnimationActive:!1,position:{y:10}}),z&&(0,Y.jsx)(x,{label:{value:`${f(B)}`,position:`left`,offset:8,fill:`var(--muted-foreground)`},opacity:.5,stroke:`var(--muted-foreground)`,strokeDasharray:`4 4`,y:B}),(0,Y.jsx)(y,{activeBar:{fillOpacity:1},dataKey:P[o].datakey,fill:`url(#barGradient)`,fillOpacity:.6,isAnimationActive:!1,maxBarSize:32,minPointSize:3,radius:4})]})}),(0,Y.jsxs)(`div`,{className:`-mt-4 text-center text-sm text-muted-foreground`,children:[`Newsletters `,o===`avg-open-rate`?`opens`:`clicks`,` in this period`]})]}):(0,Y.jsx)(R,{className:`size-full py-20`,title:`No newsletters ${S(m)}`,children:(0,Y.jsx)(_,{strokeWidth:1.5})})})]})]})},De=({newsletters:e})=>{let{selectedNewsletterId:t,setSelectedNewsletterId:n}=G(),r=(0,J.useMemo)(()=>e?.filter(e=>e.status===`active`)||[],[e]);return(0,J.useEffect)(()=>{if(r.length>0&&!t){let e=r.find(e=>e.sort_order===0);n(e?e.id:r[0].id)}},[r,t,n]),r.length<=1?null:(0,Y.jsxs)(A,{value:t||``,onValueChange:e=>{n(e)},children:[(0,Y.jsxs)(D,{className:`w-auto`,children:[(0,Y.jsx)(g,{className:`mr-2`,size:16,strokeWidth:1.5}),(0,Y.jsx)(k,{placeholder:`Select a newsletter`})]}),(0,Y.jsx)(E,{align:`end`,children:(0,Y.jsxs)(O,{children:[(0,Y.jsx)(w,{children:`Newsletters`}),r.map(e=>(0,Y.jsx)(T,{value:e.id,children:e.name},e.id))]})})]})},Oe=(e,t,n=!0)=>{let i=e??30,{startDate:a,endDate:o}=(0,J.useMemo)(()=>m(i),[i]),s=r({searchParams:(0,J.useMemo)(()=>{let e={date_from:p(a),date_to:p(o)};return t&&(e.newsletter_id=t),e},[a,o,t]),enabled:n});return n?s:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:s.refetch}},ke=(e,t,n,r=!0)=>{let i=e??30,a=t??`date desc`,{startDate:s,endDate:c}=(0,J.useMemo)(()=>m(i),[i]),l=o({searchParams:(0,J.useMemo)(()=>{let e={date_from:p(s),date_to:p(c),order:a};return n&&(e.newsletter_id=n),e},[s,c,a,n]),enabled:r});return r?l:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:l.refetch}},Ae=(e,t=[],n=!0)=>{let r=a({searchParams:(0,J.useMemo)(()=>{let n={};return e&&(n.newsletter_id=e),t.length>0&&(n.post_ids=t.join(`,`)),n},[e,t]),enabled:n});return n?r:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:r.refetch}},X=(e,t,n,r=!0)=>{let i=ke(e,t,n,r),a=(0,J.useMemo)(()=>i.data?.stats?i.data.stats.map(e=>e.post_id):[],[i.data]),o=Ae(n,a,r&&a.length>0);return{data:(0,J.useMemo)(()=>{if(!i.data?.stats)return;let e=i.data.stats,t=o.data?.stats||[],n=new Map;t.forEach(e=>{n.set(e.post_id,e)});let r=e.map(e=>{let t=n.get(e.post_id);return{...e,total_clicks:t?.total_clicks||0,click_rate:t?.click_rate||0}});return{...i.data,stats:r}},[i.data,o.data]),isLoading:i.isLoading,isClicksLoading:o.isLoading,error:i.error||o.error,isError:i.isError||o.isError,refetch:()=>{i.refetch(),o.refetch()}}},Z=J.memo(({range:e,selectedNewsletterId:t,shouldFetchStats:n,sortBy:r})=>{let i=c(),{settings:a}=Ce(),o=we(a),{data:s,isLoading:l,isClicksLoading:p}=X(e,r,t||void 0,!!n),m=U(),h=W(),g=(0,J.useMemo)(()=>s?.stats||[],[s]),y=h&&m?5:h||m?4:3,b=(0,J.useMemo)(()=>(0,Y.jsx)(Y.Fragment,{children:(0,Y.jsx)(B,{className:`last:border-none [&>td]:py-2.5`,children:(0,Y.jsx)(V,{className:`font-medium`,colSpan:y,children:(0,Y.jsx)(j,{className:`mt-5`})})})}),[y]),x=(0,J.useMemo)(()=>g.length>0?(0,Y.jsx)(Y.Fragment,{children:g.map(e=>(0,Y.jsxs)(B,{className:`last:border-none [&>td]:py-2.5`,children:[(0,Y.jsx)(V,{className:`font-medium`,children:(0,Y.jsx)(`div`,{className:`group/link inline-flex items-center gap-2`,children:e.post_id?(0,Y.jsx)(v,{className:`h-auto p-0 text-left whitespace-normal hover:underline!`,title:`View post analytics`,variant:`link`,onClick:()=>{i(`/posts/analytics/${e.post_id}/`)},children:e.post_title}):(0,Y.jsx)(Y.Fragment,{children:e.post_title})})}),(0,Y.jsx)(V,{className:`text-sm whitespace-nowrap`,children:d(e.send_date,o)}),(0,Y.jsx)(V,{className:`text-right font-mono text-sm`,children:u(e.sent_to)}),h&&(0,Y.jsxs)(V,{className:`text-right font-mono text-sm`,children:[(0,Y.jsx)(`span`,{className:`group-hover:hidden`,children:f(e.open_rate)}),(0,Y.jsx)(`span`,{className:`hidden group-hover:visible! group-hover:block!`,children:u(e.total_opens)})]}),m&&(0,Y.jsx)(V,{className:`text-right font-mono text-sm`,children:p?(0,Y.jsx)(`span`,{className:`inline-block h-4 w-8 animate-pulse rounded bg-gray-200`}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`group-hover:hidden`,children:f(e.click_rate)}),(0,Y.jsx)(`span`,{className:`hidden group-hover:visible! group-hover:block!`,children:u(e.total_clicks)})]})})]},e.post_id))}):(0,Y.jsx)(B,{className:`border-none hover:bg-transparent`,children:(0,Y.jsx)(V,{className:`text-center group-hover:bg-transparent!`,colSpan:y,children:(0,Y.jsx)(R,{className:`size-full py-20`,title:`No newsletters ${S(e)}`,children:(0,Y.jsx)(_,{strokeWidth:1.5})})})}),[g,p,i,m,h,e,o]);return l||!s?b:x});Z.displayName=`NewsletterTableRows`;var Q=J.memo(({sortBy:e,setSortBy:t,range:n})=>{let r=(0,J.useMemo)(()=>(0,Y.jsxs)(N,{children:[(0,Y.jsx)(F,{children:`Top newsletters`}),(0,Y.jsxs)(I,{children:[` Your best performing newsletters `,S(n)]})]}),[n]),i=U(),a=W();return(0,Y.jsx)(de,{children:(0,Y.jsxs)(B,{children:[(0,Y.jsx)(z,{className:`min-w-[320px]`,variant:`cardhead`,children:r}),(0,Y.jsx)(z,{className:`w-[65px]`,children:(0,Y.jsx)(C,{activeSortBy:e,setSortBy:t,sortBy:`date desc`,children:`Date`})}),(0,Y.jsx)(z,{className:`w-[90px] text-right`,children:(0,Y.jsx)(C,{activeSortBy:e,setSortBy:t,sortBy:`sent_to desc`,children:`Sent`})}),a&&(0,Y.jsx)(z,{className:`w-[90px] text-right`,children:(0,Y.jsx)(C,{activeSortBy:e,setSortBy:t,sortBy:`open_rate desc`,children:`Opens`})}),i&&(0,Y.jsx)(z,{className:`w-[90px] text-right`,children:(0,Y.jsx)(C,{activeSortBy:e,setSortBy:t,sortBy:`click_rate desc`,children:`Clicks`})})]})})});Q.displayName=`NewsletterTableHeader`;var $=J.memo(({range:e,selectedNewsletterId:t,shouldFetchStats:n})=>{let[r,i]=(0,J.useState)(`open_rate desc`);return(0,Y.jsx)(L,{className:`w-full max-w-[calc(100vw-64px)] overflow-x-auto sidebar:max-w-[calc(100vw-64px-280px)]`,"data-testid":`top-newsletters-card`,children:(0,Y.jsx)(P,{children:(0,Y.jsxs)(fe,{children:[(0,Y.jsx)(Q,{range:e,setSortBy:i,sortBy:r}),(0,Y.jsx)(ue,{children:(0,Y.jsx)(Z,{range:e,selectedNewsletterId:t,shouldFetchStats:n,sortBy:r})})]})})})});$.displayName=`TopNewslettersTable`;var je=()=>{let{range:e,selectedNewsletterId:t}=G(),[n]=s(),r=_e(),a=n.get(`tab`)||`total-subscribers`,{data:o,isLoading:c}=pe({searchParams:{limit:`50`}}),u=!c&&o&&o.newsletters.length>0&&!!t,{data:d,isLoading:f}=Oe(e,t||void 0,u||!1),{data:p,isLoading:h,isClicksLoading:g}=X(e,`date asc`,t||void 0,u||!1),_=(0,J.useMemo)(()=>!o?.newsletters||!t?null:o.newsletters.find(e=>e.id===t)||null,[o,t]),v=(0,J.useMemo)(()=>{let e=_?.count?.active_members||d?.stats?.[0]?.total||0,t=0,n=0;if(p?.stats&&p.stats.length>0){let e=p.stats,r=e.reduce((e,t)=>e+(t.open_rate||0),0),i=e.reduce((e,t)=>e+(t.click_rate||0),0);t=r/e.length,n=i/e.length}return{totalSubscribers:e,avgOpenRate:t,avgClickRate:n}},[_,d,p]),y=(0,J.useMemo)(()=>{if(!d?.stats?.[0]?.values||d.stats[0].values.length===0){let{startDate:t,endDate:n}=m(e),r=[],i=t.clone().toDate(),a=n.toDate();for(;i<=a;)r.push({date:i.toISOString().split(`T`)[0],value:0}),i.setDate(i.getDate()+1);return r}let t=d.stats[0].values;if(t.length===1){let n=t[0],r=new Date,i=e,a=new Date(r.getTime()-i*24*60*60*1e3);return[{...n,date:a.toISOString().split(`T`)[0]},{...n,date:r.toISOString().split(`T`)[0]}]}return t},[d,e]),b=(0,J.useMemo)(()=>p?.stats?p.stats.map(e=>({post_id:e.post_id,post_title:e.post_title,send_date:e.send_date,sent_to:e.sent_to,total_opens:e.total_opens,open_rate:e.open_rate,total_clicks:e.total_clicks||0,click_rate:e.click_rate||0})):[],[p]),x=f||g||h;return r===!1?(0,Y.jsx)(l,{to:`/analytics`}):(0,Y.jsxs)(ye,{children:[(0,Y.jsx)(be,{children:(0,Y.jsxs)(i,{children:[(0,Y.jsx)(De,{newsletters:o?.newsletters}),(0,Y.jsx)(ve,{})]})}),(0,Y.jsx)(xe,{isLoading:!1,loadingComponent:(0,Y.jsx)(Y.Fragment,{}),children:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(L,{"data-testid":`newsletters-card`,children:(0,Y.jsx)(P,{children:(0,Y.jsx)(Ee,{avgsData:b,initialTab:a,isAvgsLoading:!1,isLoading:x,subscribersData:y,totals:v})})}),(0,Y.jsx)($,{range:e,selectedNewsletterId:t,shouldFetchStats:!!u})]})})]})};export{je as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{h as r}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{s as i}from"./router-provider-CJC58zTy.js";import{pn as a}from"./button-BshWPHvn.js";import{t as o}from"./skeleton-D7hwjdry.js";import{n as s}from"./loading-indicator-SFTqyYVE.js";import{t as c}from"./use-navigate-with-base-path-CK989MlC.js";import{$t as l,H as u,U as d,V as f,et as p,ot as m,st as h,tn as g,ut as _,yt as v}from"./index-CDP9tIOk.js";import{i as y,n as b,r as x,t as S}from"./use-reply-chain-data-JYFKSO83.js";var C=e(t(),1),w=n(),T=()=>(0,w.jsx)(`div`,{className:`h-px w-full bg-gray-200 dark:bg-gray-950`}),E=()=>{let{postId:e}=r(),{canGoBack:t}=i(),[n,E]=(0,C.useState)(new Set),[D,O]=(0,C.useState)(new Set),[k,A]=(0,C.useState)(new Set),[j,M]=(0,C.useState)(!1),N=(0,C.useRef)(null),P=(0,C.useRef)(null),F=(0,C.useRef)(null),I=(0,C.useRef)(null),L=c(),{threadParents:R,post:z,processedReplies:B,isLoading:V,loadMoreChildren:H,loadMoreChildReplies:U,hasMoreChildren:W,hasMoreChildReplies:G}=S(decodeURIComponent(e??``),{includeAncestors:!0}),K=z?.object,q=K?.replyCount??0,[J,Y]=(0,C.useState)(!1);if((0,C.useEffect)(()=>{P.current&&R.length>0&&!J&&(P.current.scrollIntoView({behavior:`instant`,block:`start`}),Y(!0))},[R,J]),(0,C.useEffect)(()=>{F.current&&F.current.disconnect();let e=document.querySelector(`[data-scrollable-container]`);if(e)return F.current=new IntersectionObserver(async e=>{if(e[0].isIntersecting&&W&&!j){M(!0);try{await H()}catch(e){console.error(`Failed to load more top-level replies:`,e)}finally{M(!1)}}},{root:e,rootMargin:`200px`}),I.current&&F.current.observe(I.current),()=>{F.current&&F.current.disconnect()}},[W,j,H]),V)return(0,w.jsx)(d,{children:(0,w.jsxs)(`div`,{className:`mx-auto flex max-w-[620px] flex-col items-center gap-3 pt-9 lg:px-8`,children:[(0,w.jsxs)(`div`,{className:`flex w-full items-center gap-3`,children:[(0,w.jsx)(o,{className:`size-10 rounded-full`}),(0,w.jsxs)(`div`,{className:`grow pt-1`,children:[(0,w.jsx)(o,{className:`w-24`}),(0,w.jsx)(o,{className:`w-3/5`})]})]}),(0,w.jsxs)(`div`,{className:`mb-7 w-full`,children:[(0,w.jsx)(o,{}),(0,w.jsx)(o,{className:`w-4/5`}),(0,w.jsx)(o,{})]}),(0,w.jsx)(T,{}),(0,w.jsxs)(`div`,{className:`flex w-full items-center gap-3 py-3`,children:[(0,w.jsx)(o,{className:`block size-full`,containerClassName:`size-10 rounded-full overflow-hidden`}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(o,{className:`w-52`}),(0,w.jsx)(o,{className:`w-28`})]})]}),(0,w.jsx)(T,{})]})});if(!z)return(0,w.jsx)(d,{children:(0,w.jsx)(`div`,{className:`mx-auto mt-4 flex w-full max-w-[620px] flex-col items-center`,children:(0,w.jsxs)(u,{children:[(0,w.jsx)(f,{children:(0,w.jsx)(a,{})}),(0,w.jsx)(`div`,{children:`Error loading note.`})]})})});function X(){}function Z(e){E(t=>{let n=new Set(t);return n.has(e)?n.delete(e):(n.add(e),O(t=>{let n=new Set(t);return n.add(e),n})),n})}async function Q(e,t){if(!k.has(e)){A(t=>new Set(t).add(e));try{U&&await U(t)}catch(e){console.error(`Failed to load more replies for chain:`,e)}finally{A(t=>{let n=new Set(t);return n.delete(e),n})}}}return(0,w.jsx)(d,{children:(0,w.jsx)(`div`,{className:`mx-auto flex h-full max-w-[620px] flex-col`,children:(0,w.jsx)(`div`,{className:`relative flex-1`,children:(0,w.jsx)(`div`,{className:`grow overflow-y-auto`,children:(0,w.jsxs)(`div`,{className:`mx-auto px-8 pt-5 pb-10 max-lg:px-0`,children:[!R.length&&(0,w.jsx)(_,{actor:z.actor,isCurrentUser:z.object.authored,children:(0,w.jsxs)(`div`,{className:`col-[2/3] mx-auto flex w-full cursor-pointer items-center gap-3 ${t?`pt-10 max-md:pt-5`:`pt-5`}`,children:[(0,w.jsx)(`div`,{className:`relative z-10`,children:(0,w.jsx)(v,{author:z.actor,showFollowButton:!z.object.authored&&!z.actor.followedByMe})}),(0,w.jsxs)(`div`,{className:`relative z-10 flex w-full min-w-0 cursor-pointer flex-col overflow-visible text-[1.5rem]`,onClick:e=>{h(z.actor,L,e)},children:[(0,w.jsx)(`div`,{className:`flex w-full`,children:(0,w.jsx)(`span`,{className:`min-w-0 truncate font-semibold whitespace-nowrap hover:underline`,children:z.actor.name})}),(0,w.jsxs)(`div`,{className:`flex w-full`,children:[(0,w.jsx)(`span`,{className:`truncate text-gray-700 after:mx-1 after:font-normal after:text-gray-700 after:content-["·"]`,children:g(z.actor)}),(0,w.jsx)(`span`,{className:`text-gray-700`,children:m(K,!K.authored)})]})]})]})}),R.map(e=>e.object.type===`Tombstone`?(0,w.jsx)(x,{last:!1}):(0,w.jsx)(p,{actor:e.actor,allowDelete:!1,commentCount:e.object.replyCount??0,last:!1,layout:`reply`,likeCount:e.object.likeCount??0,object:e.object,repostCount:e.object.repostCount??0,type:`Note`,onClick:()=>{L(`/${e.object.type===`Article`?`reader`:`notes`}/${encodeURIComponent(e.object.id)}`)}})),(0,w.jsx)(`div`,{ref:P,className:`${t?`scroll-mt-[12px]`:`scroll-mt-[124px]`}`,children:(0,w.jsxs)(`div`,{className:`${R.length>0&&`min-h-[calc(100vh-52px)]`}`,children:[(0,w.jsx)(p,{actor:z.actor,allowDelete:!1,commentCount:q,last:!0,layout:`modal`,likeCount:K.likeCount??0,object:K,repostCount:K.repostCount,showHeader:R.length>0,showStats:!0,type:`Note`}),(0,w.jsx)(y,{object:K}),(0,w.jsx)(T,{}),(0,w.jsxs)(`div`,{ref:N,children:[B.map((e,t)=>{let r=t===B.length-1,i=e.mainReply.id,a=n.has(i),o=D.has(i),s=k.has(i),c=e.chain.length>0;return(0,w.jsxs)(C.Fragment,{children:[(0,w.jsx)(p,{actor:e.mainReply.actor,allowDelete:e.mainReply.object.authored,commentCount:e.mainReply.object.replyCount??0,isChainParent:c,isPending:l(e.mainReply.id),last:!c,layout:`reply`,likeCount:e.mainReply.object.likeCount??0,object:e.mainReply.object,parentId:K.id,repostCount:e.mainReply.object.repostCount??0,type:`Note`,onClick:()=>{L(`/notes/${encodeURIComponent(e.mainReply.id)}`)},onDelete:X}),c&&e.chain[0]&&(0,w.jsx)(p,{actor:e.chain[0].actor,allowDelete:e.chain[0].object.authored,commentCount:e.chain[0].object.replyCount??0,isChainContinuation:!0,isPending:l(e.chain[0].id),last:e.chain.length===1,layout:`reply`,likeCount:e.chain[0].object.likeCount??0,object:e.chain[0].object,parentId:K.id,repostCount:e.chain[0].object.repostCount??0,type:`Note`,onClick:()=>{L(`/notes/${encodeURIComponent(e.chain[0].id)}`)},onDelete:X},e.chain[0].id),c&&a&&e.chain.slice(1).map((n,r)=>{let i=r===e.chain.slice(1).length-1,a=G&&G(t),o=i&&a;return(0,w.jsx)(p,{actor:n.actor,allowDelete:n.object.authored,commentCount:n.object.replyCount??0,isChainContinuation:!0,isPending:l(n.id),last:i&&!o,layout:`reply`,likeCount:n.object.likeCount??0,object:n.object,parentId:K.id,repostCount:n.object.repostCount??0,type:`Note`,onClick:()=>{L(`/notes/${encodeURIComponent(n.id)}`)},onDelete:X},n.id)}),c&&e.chain.length>1&&!a&&(0,w.jsx)(b,{variant:`expand`,onClick:()=>Z(i)}),c&&a&&o&&G&&G(t)&&(0,w.jsx)(b,{loading:s,variant:`loadMore`,onClick:()=>Q(i,t)}),!r&&(0,w.jsx)(T,{})]},e.mainReply.id)}),j&&(0,w.jsx)(`div`,{className:`flex flex-col items-center justify-center text-center`,children:(0,w.jsx)(s,{size:`md`})})]}),W&&(0,w.jsx)(`div`,{ref:I,className:`h-1`})]})})]})})})})})};export{E as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{f as r}from"./dist-Cb5RSHSg.js";import{Zn as i,at as a,fn as o,h as s,mr as c,st as l,t as u,vr as d}from"./button-BshWPHvn.js";import{t as f}from"./skeleton-D7hwjdry.js";import{n as p}from"./loading-indicator-SFTqyYVE.js";import{t as m}from"./use-navigate-with-base-path-CK989MlC.js";import{$ as h,B as g,H as _,Lt as v,U as y,V as b,_t as x,at as S,en as C,gt as w,it as T,lt as E,nt as D,ot as O,st as k,ut as A,vt as j,yt as M}from"./index-CDP9tIOk.js";import"./layout-Di5K7doM.js";var N=e(t(),1),P=n(),F=({notificationType:e,size:t=`lg`,className:n})=>{let r,i=``,c=`white`,u=t===`sm`?13:20,f=t===`sm`?2:1.5;switch(e){case`follow`:r=(0,P.jsx)(s,{className:`-mt-0.5 -mr-0.5 ${t===`sm`&&`size-[11px]`}`,color:c,size:u,strokeWidth:f}),i=`bg-blue-600`;break;case`like`:r=(0,P.jsx)(o,{className:`${t===`sm`?`size-[11px]`:`mt-px size-5`}`,color:c,strokeWidth:f}),i=`bg-pink-600`;break;case`reply`:r=(0,P.jsx)(a,{className:`mr-px mb-px`,color:c,size:u,strokeWidth:f}),i=`bg-purple-600`;break;case`repost`:r=(0,P.jsx)(l,{color:c,size:u,strokeWidth:f}),i=`bg-green-500`;break;case`mention`:r=(0,P.jsx)(d,{className:`${t===`sm`?`size-[12px]`:`size-5`}`,color:c,size:u,strokeWidth:f}),i=`bg-orange-500`;break}return(0,P.jsx)(`div`,{className:`flex ${t===`sm`?`size-5`:`size-9`} items-center justify-center rounded-full ${i} ${n&&n}`,children:r})},I=N.createContext(void 0),L=({isGrouped:e,centerAlign:t,children:n,onClick:r,url:i,className:a})=>(0,P.jsx)(I.Provider,{value:{onClick:r,url:i},children:(0,P.jsx)(`div`,{className:`group relative -mx-4 -my-px ${e?`grid`:`flex`} ${t?`items-center`:`items-start`} break-anywhere cursor-pointer grid-cols-[auto_1fr] gap-x-4 gap-y-2.5 rounded-lg px-4 py-5 text-left hover:bg-gray-100 ${a}`,role:`button`,onClick:r,children:n})});L.Icon=({size:e=`lg`,type:t})=>(0,P.jsx)(`div`,{className:`col-start-1 row-start-1`,children:(0,P.jsx)(F,{notificationType:t,size:e})}),L.Avatars=({children:e})=>(0,P.jsx)(`div`,{className:`col-start-2 row-start-1 flex gap-2`,children:e}),L.Content=({children:e})=>(0,P.jsx)(`div`,{className:`col-start-2 row-start-2 -mt-0.5 grow overflow-hidden`,children:e});var R=()=>(0,P.jsx)(`div`,{className:`h-px w-full bg-gray-200 dark:bg-gray-950`});function z(e){let t=1440*60*1e3,n=new Date(e).getTime();return(Math.floor(n/t)*t).toString()}function B(e){let t={},n=null,r=0;return e.forEach(e=>{e.type!==n&&(r+=1,n=e.type);let i=``,a=`_${z(e.createdAt)}`,o=`_seq${r}`;switch(e.type){case`like`:e.post?.id&&(i=`like_${e.post.id}${a}${o}`);break;case`reply`:i=`reply_${e.id}`;break;case`repost`:e.post?.id&&(i=`repost_${e.post.id}${a}${o}`);break;case`follow`:i=`follow_${a}${o}`;break;case`mention`:i=`mention_${e.id}`;break}t[i]||(t[i]={id:e.id,type:e.type,actors:[],post:e.post,inReplyTo:e.inReplyTo,createdAt:e.createdAt}),t[i].actors.find(t=>t.id===e.actor.id)||t[i].actors.push(e.actor)}),Object.values(t)}var V=({group:e})=>{let[t,...n]=e.actors,i=n.length>0,a=n.length,o=m(),s=(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(A,{actor:t,align:`center`,isCurrentUser:!1,children:(0,P.jsx)(`span`,{className:`cursor-pointer font-semibold hover:underline text-black dark:text-white`,onClick:e=>{e?.stopPropagation(),t.handle&&k(t.handle,o)},children:t.name})}),i&&` and ${r(a)} ${a>1?`others`:`other`}`]});switch(e.type){case`follow`:return(0,P.jsxs)(P.Fragment,{children:[s,` followed you`]});case`like`:return(0,P.jsxs)(P.Fragment,{children:[s,` liked your `,e.post?.type===`article`?`post`:`note`]});case`repost`:return(0,P.jsxs)(P.Fragment,{children:[s,` reposted your `,e.post?.type===`article`?`post`:`note`]});case`reply`:if(e.inReplyTo&&typeof e.inReplyTo!=`string`)return s;break;case`mention`:return s}return(0,P.jsx)(P.Fragment,{})},H=({content:e,className:t,stripTags:n=[]})=>{let r=(0,N.useRef)(null),i=m();return(0,N.useEffect)(()=>{let e=r.current;if(!e)return;let t=e=>{let t=e.target.closest(`a[data-profile]`);if(t){let n=t.getAttribute(`data-profile`)?.trim();/^@([\w.-]+)@([\w-]+\.[\w.-]+[a-zA-Z])$/.test(n||``)&&n&&(e.preventDefault(),e.stopPropagation(),k(n,i))}};return e.addEventListener(`click`,t),()=>{e.removeEventListener(`click`,t)}},[i,e]),(0,P.jsx)(`div`,{dangerouslySetInnerHTML:{__html:w(x(e||``,n))},ref:r,className:t})},U=({post:e,variant:t})=>{let n=e?.attachments??[],r=n.length>0,{contentWarning:i,shouldHideContentWarning:a,shouldHideSensitiveMedia:o,revealSensitiveMedia:s,revealContentWarning:c}=S({contentWarning:e?.contentWarning,sensitive:e?.sensitive,hasMedia:r,resetKey:e?.id});return e?a&&i?t===`inline`?(0,P.jsxs)(`button`,{className:`mt-0.5 block max-w-full truncate text-left text-sm text-gray-700 hover:text-black dark:text-gray-600 dark:hover:text-white`,type:`button`,onClick:c,children:[(0,P.jsx)(`span`,{className:`font-semibold`,children:`Content warning:`}),` `,i,` `,(0,P.jsx)(`span`,{className:`font-semibold`,children:`Show`})]}):(0,P.jsx)(h,{className:`mt-2.5`,label:i,size:`compact`,onReveal:c}):t===`inline`?(0,P.jsxs)(`div`,{className:`ap-note-content mt-0.5 line-clamp-1 text-sm text-pretty text-gray-700 dark:text-gray-600`,children:[e.type===`article`&&e.title&&(0,P.jsxs)(P.Fragment,{children:[e.title,` — `]}),(0,P.jsx)(`span`,{dangerouslySetInnerHTML:{__html:w(x(e.content||``))}})]}):(0,P.jsxs)(`div`,{className:`mt-2.5 rounded-md bg-gray-100 px-5 py-[14px] group-hover:bg-gray-200 dark:bg-gray-950/30 group-hover:dark:bg-black/40`,children:[(0,P.jsx)(H,{className:`ap-note-content text-pretty`,content:e.content||``,stripTags:[`a`]}),r&&(0,P.jsxs)(`div`,{className:`relative mt-2.5 aspect-square w-[calc(20%-6.4px)] min-w-[96px] overflow-hidden rounded-md [&_img]:absolute [&_img]:inset-0 [&_img]:mt-0 [&_img]:size-full [&_img]:max-h-none [&_img]:max-w-none [&_img]:object-cover [&>.attachment-gallery]:absolute [&>.attachment-gallery]:inset-0 [&>.attachment-gallery]:mt-0 [&>.attachment-gallery]:grid [&>.attachment-gallery]:size-full`,children:[T({type:`Note`,attachment:n}),o&&(0,P.jsx)(D,{showLabel:!1,size:`compact`,isLayered:!0,onReveal:s})]})]}):null},W=()=>{let[e,t]=N.useState({}),n=m(),a=e=>{t(t=>({...t,[e]:!t[e]}))},o=()=>{},{data:s,error:l,fetchNextPage:d,hasNextPage:h,isFetchingNextPage:x,isLoading:S}=v(`index`),w=s?.pages.flatMap(e=>B(e.notifications))??Array(10).fill({actors:[{}]}),T=(0,N.useRef)(null),D=(0,N.useRef)(null);(0,N.useEffect)(()=>(T.current&&T.current.disconnect(),T.current=new IntersectionObserver(e=>{e[0].isIntersecting&&h&&!x&&d()}),D.current&&T.current.observe(D.current),()=>{T.current&&T.current.disconnect()}),[h,x,d]);let A=(e,t)=>{switch(e.type){case`like`:e.post&&n(`/${e.post.type===`article`?`reader`:`notes`}/${encodeURIComponent(e.post.id)}`);break;case`reply`:e.post&&e.inReplyTo&&n(`/notes/${encodeURIComponent(e.post.id)}`);break;case`repost`:e.post&&n(`/${e.post.type===`article`?`reader`:`notes`}/${encodeURIComponent(e.post.id)}`);break;case`follow`:e.actors.length>1?a(e.id||`${e.type}_${t}`):e.actors[0]?.handle&&k(e.actors[0].handle,n);break;case`mention`:e.post&&n(`/notes/${encodeURIComponent(e.post.id)}`);break}};return l&&C(l)?(0,P.jsx)(g,{errorCode:l.code,statusCode:l.statusCode}):(0,P.jsx)(y,{children:(0,P.jsxs)(`div`,{className:`z-0 flex w-full flex-col items-center`,children:[S===!1&&w.length===0&&(0,P.jsxs)(_,{children:[(0,P.jsx)(b,{children:(0,P.jsx)(c,{})}),`Quiet for now, but not for long! When someone likes, boosts, or replies to you, you'll find it here.`]}),w.length>0&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`div`,{className:`my-8 flex w-full max-w-[620px] flex-col max-md:mt-5`,children:w.map((t,s)=>(0,P.jsxs)(N.Fragment,{children:[(0,P.jsxs)(L,{centerAlign:t.actors.length<2&&t.type===`follow`,className:`hover:bg-gray-100 dark:hover:bg-gray-950`,isGrouped:t.actors.length>1,onClick:()=>A(t,s),children:[S?(0,P.jsx)(f,{className:`rounded-full`,containerClassName:`flex h-10 w-10`}):t.actors.length>1?(0,P.jsx)(L.Icon,{type:t.type}):(0,P.jsxs)(`div`,{className:`relative`,children:[(0,P.jsx)(M,{author:{icon:{url:t.actors[0].avatarUrl||``},name:t.actors[0].name,handle:t.actors[0].handle},size:`notification`},t.actors[0].id),(0,P.jsx)(F,{className:`absolute -right-1 -bottom-1 z-10 border-2 border-white dark:border-black`,notificationType:t.type,size:`sm`})]}),t.actors.length>1&&(0,P.jsx)(L.Avatars,{children:(0,P.jsxs)(`div`,{className:`flex w-full flex-col`,children:[(0,P.jsxs)(`div`,{className:`relative flex w-fit items-center pl-2`,children:[!e[t.id||`${t.type}_${s}`]&&t.actors.slice(0,5).map(e=>(0,P.jsx)(M,{author:{icon:{url:e.avatarUrl||``},name:e.name,handle:e.handle},className:`-ml-2 bg-[#F3F3F3]! outline-2 outline-white group-hover:bg-[#EDEEF0]! group-hover:outline-gray-100 dark:outline-black group-hover:dark:outline-gray-950`,size:`notification`},e.id)),t.actors.length>5&&!e[t.id||`${t.type}_${s}`]&&(0,P.jsx)(`div`,{className:`absolute right-[28px] z-10 flex size-9 items-center justify-center rounded-full bg-black/50 text-base font-semibold tracking-tightest text-white`,children:`+${r(t.actors.length-5)}`}),t.actors.length>1&&(0,P.jsxs)(u,{className:`group flex items-center gap-0.5 text-gray-700 hover:bg-transparent hover:text-black dark:text-gray-600 dark:hover:text-white ${e[t.id||`${t.type}_${s}`]?`ml-[-20px]`:`ml-0 w-[28px]`}`,variant:`ghost`,onClick:e=>{e?.stopPropagation(),a(t.id||`${t.type}_${s}`)},children:[(0,P.jsx)(i,{className:`${e[t.id||`${t.type}_${s}`]?`rotate-180`:``}`,size:20,strokeWidth:1.5}),e[t.id||`${t.type}_${s}`]?`Hide`:(0,P.jsx)(`span`,{className:`sr-only`,children:`Show all`})]})]}),(0,P.jsx)(`div`,{className:`overflow-hidden transition-all duration-300 ease-in-out ${e[t.id||`${t.type}_${s}`]?`mb-2 max-h-[1384px] opacity-100`:`max-h-0 opacity-0`}`,children:e[t.id||`${t.type}_${s}`]&&t.actors.length>1&&(0,P.jsx)(`div`,{className:`flex flex-col gap-2 pt-2`,children:t.actors.map(e=>(0,P.jsxs)(`div`,{className:`group/item break-anywhere flex items-center justify-between gap-4`,onClick:t=>{t?.stopPropagation(),e.handle&&k(e.handle,n)},children:[(0,P.jsxs)(`div`,{className:`flex min-w-0 items-center`,children:[(0,P.jsx)(M,{author:{icon:{url:e.avatarUrl||``},name:e.name,handle:e.handle},size:`xs`}),(0,P.jsx)(`span`,{className:`ml-2 line-clamp-1 text-base font-semibold group-hover/item:underline dark:text-white`,children:e.name}),(0,P.jsx)(`span`,{className:`ml-1 line-clamp-1 text-base text-gray-700 dark:text-gray-600`,children:e.handle})]}),t.type===`follow`&&!e.followedByMe&&e.handle&&(0,P.jsx)(j,{following:!1,handle:e.handle,variant:`link`})]},e.id))})})]})}),(0,P.jsxs)(L.Content,{children:[(0,P.jsx)(`div`,{children:S?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(f,{}),(0,P.jsx)(f,{className:`w-full max-w-60`})]}):(0,P.jsxs)(`div`,{className:`flex justify-between`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,P.jsx)(`span`,{className:`truncate`,children:(0,P.jsx)(V,{group:t})}),t.actors.length<2&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`span`,{className:`mt-px text-[8px] text-gray-700 dark:text-gray-600`,children:`•`}),(0,P.jsx)(`span`,{className:`mt-0.5 text-sm text-gray-700 dark:text-gray-600`,children:O(t,!1)})]})]}),t.actors.length===1&&(t.type===`follow`||t.type===`reply`||t.type===`mention`)&&!t.actors[0].followedByMe&&t.actors[0].handle&&(0,P.jsx)(j,{following:!1,handle:t.actors[0].handle,variant:`link`})]})}),(t.type===`reply`&&t.inReplyTo||t.type===`mention`||t.type===`like`&&!t.post?.name&&t.post?.content||t.type===`repost`&&!t.post?.name&&t.post?.content)&&(0,P.jsx)(U,{post:t.post,variant:t.type!==`reply`&&t.type!==`mention`?`inline`:`quoted`}),(t.type===`reply`&&t.post||t.type===`mention`)&&(0,P.jsx)(`div`,{className:`mt-1.5`,children:(0,P.jsx)(E,{actor:{...t.actors[0],icon:{url:t.actors[0].avatarUrl||``},id:t.actors[0].url,preferredUsername:t.actors[0].handle?.replace(/^@([^@]+)@.*$/,`$1`)||`unknown`},buttonClassName:`hover:bg-gray-200`,commentCount:t.post.replyCount||0,layout:`notification`,likeCount:t.post.likeCount||0,object:{...t.post,liked:t.post.likedByMe,reposted:t.post.repostedByMe},repostCount:t.post.repostCount||0,onLikeClick:o})})]})]}),s<w.length-1&&(0,P.jsx)(`div`,{className:`pl-[52px]`,children:(0,P.jsx)(R,{})})]},t.id||`${t.type}_${s}`))}),(0,P.jsx)(`div`,{ref:D,className:`h-1`}),x&&(0,P.jsx)(`div`,{className:`-mt-4 mb-8 flex flex-col items-center justify-center gap-4 text-center`,children:(0,P.jsx)(p,{size:`md`})})]})]})})};export{W as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{_ as r,f as i,p as a}from"./hooks-CuEZV2-q.js";import{n as o}from"./dist-Ndy-PuGN.js";import{t as s}from"./use-form-vRjI0Kwk.js";import{a as c,i as l,n as u,r as d,t as f}from"./offers-9J1CSiLy.js";import{i as p,r as m}from"./currency-Dy4Tc2R2.js";import{f as h}from"./dist-Cb5RSHSg.js";import{t as g}from"./inline-Cw-gigDW.js";import{t as _}from"./stack-CIfOAAVf.js";import{$t as v,_r as y,t as b,wr as x,yr as S}from"./button-BshWPHvn.js";import{t as C}from"./switch-C9djUIMO.js";import{t as w}from"./input-UHrKuvBT.js";import{i as T,n as E,o as D,s as O,t as k}from"./select-D_RQaXgt.js";import{o as A,t as j}from"./use-settings-navigation-BBzro2-V.js";import{a as M,i as N,n as P,o as F,r as I,t as L}from"./field-LmNk7wZh.js";import{a as R,i as z,n as B,r as V,t as H}from"./input-group-BPAxETpQ.js";import{n as ee,t as te}from"./radio-group-CjtmsCPl.js";import{a as U,c as W,n as G,r as K,s as q,t as ne}from"./table-CrqQtkR2.js";import{t as re}from"./textarea-d9qEkMOP.js";import{Hn as ie,Jn as ae,Kn as oe,Ln as J,Qn as se,Un as ce,Wn as le,Xn as ue,Yn as de,qn as fe,vn as pe}from"./index-CDP9tIOk.js";import{a as me,r as he}from"./tiers-Nd_z4BZY.js";import{n as ge}from"./confirmation-context-CLFHhyyH.js";import{n as Y}from"./global-data-context-gAMDH9u1.js";import{t as _e}from"./brand-icon-09YqFZjV.js";import{o as ve,r as ye}from"./zapier-modal-BO6PS_Vd.js";import{t as be}from"./preview-modal-MlTjP8UU.js";import{t as xe}from"./portal-frame-DjBF-uy2.js";import{t as Se}from"./settings-breadcrumbs-sLDNedBW.js";var Ce=(e,t)=>{let{disableBackground:n=!1,name:r,code:i,displayTitle:a=``,displayDescription:o=``,type:s,cadence:c,amount:l=0,duration:u,durationInMonths:d,currency:f=`usd`,status:p,tierId:m,redemptionType:h=`signup`}=e;t=t.replace(/\/$/,``);let g=new URLSearchParams;return g.append(`disableBackground`,`false`),g.append(`name`,encodeURIComponent(r)),g.append(`code`,encodeURIComponent(i)),g.append(`display_title`,encodeURIComponent(a)),g.append(`display_description`,encodeURIComponent(o)),g.append(`type`,encodeURIComponent(s)),g.append(`cadence`,encodeURIComponent(c)),g.append(`amount`,encodeURIComponent(l)),g.append(`duration`,encodeURIComponent(u)),g.append(`duration_in_months`,encodeURIComponent(d)),g.append(`currency`,encodeURIComponent(f)),g.append(`status`,encodeURIComponent(p)),g.append(`tier_id`,encodeURIComponent(m)),g.append(`redemption_type`,encodeURIComponent(h)),n&&g.append(`disableBackground`,`true`),g.append(`admin_toolbar`,`0`),`${t}/?v=modal-portal-offer#/portal/preview/offer?${g.toString()}`},we=e=>{let t=[];return e.forEach(e=>{t.push({label:`${e.name} - Monthly`,value:`${e.id}-month-${e.currency}`}),t.push({label:`${e.name} - Yearly`,value:`${e.id}-year-${e.currency}`})}),t},X=e(t(),1),Z=n();function Te(e){return e.toString().toLowerCase().trim().replace(/\s+/g,`-`).replace(/[^\w-]+/g,``).replace(/--+/g,`-`)}var Ee=191,De=e=>{let{fixedAmount:t=0,percentAmount:n=0,trialAmount:r=0,amount:i=0}=e;switch(e.type){case`fixed`:return t*100;case`percent`:return n;case`trial`:return r;default:return i}},Oe=({tierOptions:e,handleTierChange:t,selectedTier:n,typeOptions:r,durationOptions:i,handleTypeChange:a,handleDurationChange:o,overrides:s,handleAmountTypeChange:c,handleNameInput:l,handleTextAreaInput:u,handleDisplayTitleInput:d,handleDurationInMonthsInput:f,handleAmountInput:p,handleCodeInput:m,clearError:g,errors:_,testId:v,handleTrialAmountInput:y,amountOptions:x})=>{let S=s.cadence===`year`,C=S?i.filter(e=>e.value!==`repeating`):i,[A,j]=(0,X.useState)(0),V=A>40?`text-red`:`text-green`,{siteData:U}=Y(),[W,G]=(0,X.useState)(!1),K=pe(U),q=`${K}${s.code.value}`,ne=async()=>{await navigator.clipboard.writeText(q),G(!0),setTimeout(()=>G(!1),2e3)};return(0,Z.jsx)(`div`,{className:`pt-7`,"data-testid":v,children:(0,Z.jsxs)(M,{className:`mb-10 gap-8`,children:[(0,Z.jsxs)(`section`,{children:[(0,Z.jsx)(`h2`,{className:`mb-4 text-lg`,children:`General`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Z.jsxs)(L,{"data-invalid":!!_.name||void 0,children:[(0,Z.jsx)(F,{htmlFor:`offer-name`,children:`Offer name`}),(0,Z.jsx)(w,{"aria-invalid":!!_.name||void 0,id:`offer-name`,maxLength:40,placeholder:`Black Friday`,onChange:e=>{l(e),j(e.target.value.length)},onKeyDown:()=>g(`name`)}),_.name?(0,Z.jsx)(N,{children:_.name}):(0,Z.jsx)(I,{children:(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`Visible to members on Stripe Checkout page`}),(0,Z.jsxs)(`strong`,{children:[(0,Z.jsx)(`span`,{className:V,children:h(A)}),` /`,` `,h(40)]})]})})]}),(0,Z.jsxs)(L,{"data-invalid":!!_.displayTitle||void 0,children:[(0,Z.jsx)(F,{htmlFor:`offer-display-title`,children:`Display title`}),(0,Z.jsx)(w,{"aria-invalid":!!_.displayTitle||void 0,id:`offer-display-title`,maxLength:Ee,placeholder:`Black Friday Special`,value:s.displayTitle.value,onChange:e=>{d(e)},onKeyDown:()=>g(`displayTitle`)}),_.displayTitle&&(0,Z.jsx)(N,{children:_.displayTitle})]}),(0,Z.jsxs)(L,{children:[(0,Z.jsx)(F,{htmlFor:`offer-display-description`,children:`Display description`}),(0,Z.jsx)(re,{id:`offer-display-description`,maxLength:Ee,placeholder:`Take advantage of this limited-time offer.`,value:s.displayDescription,onChange:e=>{u(e)}})]})]})]}),(0,Z.jsxs)(`section`,{className:`mt-4`,children:[(0,Z.jsx)(`h2`,{className:`mb-4 text-lg`,children:`Details`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Z.jsx)(te,{"aria-label":`Offer type`,className:`rounded-md border border-border-default p-4`,value:s.type===`trial`?`trial`:`percent`,onValueChange:a,children:r.map(e=>{let t=`offer-type-${e.value}`;return(0,Z.jsxs)(L,{orientation:`horizontal`,children:[(0,Z.jsx)(ee,{id:t,value:e.value}),(0,Z.jsxs)(P,{children:[(0,Z.jsx)(F,{className:`cursor-pointer`,htmlFor:t,children:e.title}),(0,Z.jsx)(I,{children:e.description})]})]},e.value)})}),(0,Z.jsxs)(L,{children:[(0,Z.jsx)(F,{children:`Tier — Cadence`}),(0,Z.jsxs)(k,{value:n.value,onValueChange:n=>{let r=e.find(e=>e.value===n);r&&t(r)},children:[(0,Z.jsx)(D,{"aria-label":`Tier — Cadence`,"data-testid":`tier-cadence-select-offers`,children:(0,Z.jsx)(O,{})}),(0,Z.jsx)(E,{children:e.map(e=>(0,Z.jsx)(T,{value:e.value,children:e.label},e.value))})]})]}),s.type!==`trial`&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(L,{"data-invalid":!!_.amount||void 0,children:[(0,Z.jsx)(F,{htmlFor:`offer-amount`,children:`Amount off`}),(0,Z.jsxs)(H,{"data-invalid":!!_.amount||void 0,children:[(0,Z.jsx)(z,{id:`offer-amount`,type:`number`,value:s.type===`fixed`?s.fixedAmount===0?``:s.fixedAmount?.toString():s.percentAmount===0?``:s.percentAmount?.toString(),onChange:e=>{p(e)},onKeyDown:()=>g(`amount`)}),(0,Z.jsx)(B,{align:`inline-end`,children:(0,Z.jsxs)(k,{value:s.type===`percent`?x[0].value:x[1].value,onValueChange:c,children:[(0,Z.jsx)(D,{"aria-label":`Amount type`,className:`h-7 w-20 border-0 bg-transparent px-2 shadow-none focus-visible:ring-0`,"data-testid":`amount-type-select-offers`,children:(0,Z.jsx)(O,{})}),(0,Z.jsx)(E,{align:`end`,children:x.map(e=>(0,Z.jsx)(T,{value:e.value,children:e.label},e.value))})]})})]}),_.amount&&(0,Z.jsx)(N,{children:_.amount})]}),(0,Z.jsxs)(L,{children:[(0,Z.jsx)(F,{children:`Duration`}),(0,Z.jsxs)(k,{value:s.duration,onValueChange:e=>{g(`durationInMonths`),o(e)},children:[(0,Z.jsx)(D,{"aria-label":`Duration`,"data-testid":`duration-select-offers`,children:(0,Z.jsx)(O,{})}),(0,Z.jsx)(E,{children:C.map(e=>(0,Z.jsx)(T,{value:e.value,children:e.label},e.value))})]})]}),s.duration===`repeating`&&!S&&(0,Z.jsx)(`div`,{className:`-mt-4`,children:(0,Z.jsxs)(L,{"data-invalid":!!_.durationInMonths||void 0,children:[(0,Z.jsxs)(H,{"data-invalid":!!_.durationInMonths||void 0,children:[(0,Z.jsx)(z,{"aria-invalid":!!_.durationInMonths||void 0,"data-testid":`duration-months-input`,type:`number`,value:s.durationInMonths===0?``:String(s.durationInMonths),onChange:e=>{f(e)},onKeyDown:()=>g(`durationInMonths`)}),(0,Z.jsx)(B,{align:`inline-end`,children:(0,Z.jsx)(R,{children:s.durationInMonths===1?`month`:`months`})})]}),_.durationInMonths&&(0,Z.jsx)(N,{children:_.durationInMonths})]})})]}),s.type===`trial`&&(0,Z.jsxs)(L,{"data-invalid":!!_.amount||void 0,children:[(0,Z.jsx)(F,{htmlFor:`trial-duration`,children:`Trial duration`}),(0,Z.jsx)(w,{"aria-invalid":!!_.amount||void 0,id:`trial-duration`,type:`number`,value:s.trialAmount?.toString(),onChange:e=>{y(e)},onKeyDown:()=>g(`amount`)}),_.amount&&(0,Z.jsx)(N,{children:_.amount})]}),(0,Z.jsxs)(L,{"data-invalid":!!_.code||void 0,children:[(0,Z.jsx)(F,{htmlFor:`offer-code`,children:`Offer code`}),(0,Z.jsx)(w,{"aria-invalid":!!_.code||void 0,id:`offer-code`,placeholder:`black-friday`,value:s.code.value,onChange:e=>{m(e)},onKeyDown:()=>g(`code`)}),_.code?(0,Z.jsx)(N,{children:_.code}):s.code.value!==``&&(0,Z.jsx)(I,{children:(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsxs)(`div`,{children:[K,(0,Z.jsx)(`span`,{className:`font-bold`,children:s.code.value})]}),(0,Z.jsx)(b,{className:`h-auto p-0 text-sm text-green hover:text-green`,size:`sm`,type:`button`,variant:`link`,onClick:()=>void ne(),children:W?`Copied`:`Copy`})]})})]})]})]})]})})},Q=e=>{let[t,n,r]=e.split(`-`);if(!t||!n||!r)throw Error(`Invalid input format. Expected format is: id-period-currency`);return{id:t,period:n,currency:r}},ke=()=>{let{siteData:e}=Y(),t=[{title:`Discount`,description:`Offer a special reduced price`,value:`percent`},{title:`Free trial`,description:`Give free access for a limited time`,value:`trial`}],n=[{value:`once`,label:`First-payment`},{value:`repeating`,label:`Multiple-months`},{value:`forever`,label:`Forever`}],[i,a]=(0,X.useState)(``),{updateRoute:c}=j(),{data:{tiers:l}={}}=me(),d=he(l||[]),p=we(d),{mutateAsync:m}=f(),[h,g]=(0,X.useState)({tier:p[0]||{},dataset:{id:p[0]?.value?Q(p[0]?.value).id:``,period:p[0]?.value?Q(p[0]?.value).period:``,currency:p[0]?.value?Q(p[0]?.value).currency:``}}),{data:{offers:_=[]}={}}=u(),{formState:v,updateForm:y,handleSave:b,saveState:x,okProps:S,validate:C,errors:w,clearError:T}=s({initialState:{disableBackground:!1,name:``,code:{isDirty:!1,value:``},displayTitle:{isDirty:!1,value:``},displayDescription:``,type:`percent`,cadence:h?.dataset?.period||``,amount:0,duration:`once`,durationInMonths:1,currency:h?.dataset?.currency||`USD`,status:`active`,tierId:h?.dataset?.id||``,trialAmount:7,fixedAmount:0,percentAmount:0},onSave:async()=>{let e=v.type===`trial`?`trial`:v.duration,t={name:v.name,code:v.code.value,display_title:v.displayTitle.value,display_description:v.displayDescription,cadence:v.cadence,amount:De(v)||0,duration:e,...e===`repeating`?{duration_in_months:v.durationInMonths}:{},currency:v.currency,status:v.status,redemption_type:`signup`,tier:{id:v.tierId},type:v.type,currency_restriction:!1},n=await m(t);n&&n.offers&&n.offers.length>0&&c(`offers/success/${n.offers[0].id}`)},onSaveError:()=>{},onValidate:()=>{let e={};return!v.name&&v.name.length===0&&(e.name=`Name is required`),!v.code.value&&v.code.value.length===0&&(e.code=`Code is required`),!v.displayTitle.value&&v.displayTitle.value.length===0&&(e.displayTitle=`Display title is required`),v.type===`percent`&&v.percentAmount===0&&(e.amount=`Enter an amount greater than 0.`),v.type===`percent`&&(v.percentAmount<1||v.percentAmount>100)&&(e.amount=`Enter an amount between 1 and 100%.`),(v.type===`fixed`&&v.fixedAmount===0||v.type===`fixed`&&v.fixedAmount<1)&&(e.amount=`Enter an amount greater than 0.`),v.type===`trial`&&v.trialAmount===0&&(e.amount=`Enter an amount greater than 0.`),v.type===`trial`&&v.trialAmount<1&&(e.amount=`Free trial must be at least 1 day.`),v.type!==`trial`&&v.duration===`repeating`&&(!Number.isInteger(v.durationInMonths)||v.durationInMonths<1)&&(e.durationInMonths=`Enter a whole number of months (1 or more).`),e},savingDelay:500}),E=[{value:`percent`,label:`%`},{value:`fixed`,label:v.currency}],D=e=>{let t=Q(e.value),n=t.period===`year`;g({tier:e,dataset:t}),y(e=>({...e,cadence:t.period,currency:t.currency,tierId:t.id,duration:n&&e.duration===`repeating`?`once`:e.duration})),n&&T(`durationInMonths`)},O=e=>{e===`trial`&&(T(`amount`),T(`durationInMonths`)),y(t=>({...t,type:e}))},k=e=>{y(t=>({...t,type:e===`percent`?`percent`:`fixed`}))},A=e=>{let t=e.target;v.type===`fixed`?y(e=>({...e,fixedAmount:Number(t.value)})):v.type===`percent`?y(e=>({...e,percentAmount:Number(t.value)})):y(e=>({...e,amount:Number(t.value)}))},M=e=>{let t=e.target,n=Number(t.value);y(e=>({...e,durationInMonths:Number.isNaN(n)?0:n}))},N=e=>{let t=e.target.value;y(e=>{let n={...e};return n.name=t,e.code.isDirty||(T(`code`),n.code={...e.code,value:Te(t)}),e.displayTitle.isDirty||(T(`displayTitle`),n.displayTitle={...e.displayTitle,value:t}),n})},P=e=>{let t=e.target;y(e=>({...e,displayTitle:{...e.displayTitle,isDirty:!0,value:t.value}}))},F=e=>{let t=e.target;y(e=>({...e,displayDescription:t.value}))},I=e=>{let t=e.target;y(e=>({...e,trialAmount:Number(t.value)}))},L=e=>{y(t=>({...t,duration:e}))},R=e=>{let t=e.target;y(e=>({...e,code:{...e.code,isDirty:!0,value:t.value}}))},z=()=>{_.length>0?c(`offers/edit`):c(`offers`)},B=(0,X.useMemo)(()=>({name:v.name||``,code:v.code.value||``,displayTitle:v.displayTitle.value||``,displayDescription:v.displayDescription||``,type:v.type||`percent`,cadence:v.cadence||`month`,amount:De(v)||0,duration:v.type===`trial`?`trial`:v.duration||`once`,durationInMonths:v.durationInMonths||0,currency:v.currency||`USD`,status:v.status||`active`,tierId:v.tierId||d[0]?.id,redemptionType:`signup`}),[v,d]);(0,X.useEffect)(()=>{let t=Ce(B,e.url);a(t)},[v,e.url,v.type,B]);let V=(0,Z.jsx)(Oe,{amountOptions:E,clearError:T,durationOptions:n,errors:w,handleAmountInput:A,handleAmountTypeChange:k,handleCodeInput:R,handleDisplayTitleInput:P,handleDurationChange:L,handleDurationInMonthsInput:M,handleNameInput:N,handleTextAreaInput:F,handleTierChange:D,handleTrialAmountInput:I,handleTypeChange:O,overrides:v,selectedTier:h.tier,testId:`add-offer-sidebar`,tierOptions:p,typeOptions:t,validate:C}),H=(0,Z.jsx)(xe,{href:i||``,portalParent:`offers`});return(0,Z.jsx)(be,{backDropClick:!1,cancelLabel:`Cancel`,dirty:x===`unsaved`,height:`full`,okLabel:`Publish`,okVariant:S.variant,preview:H,previewToolbar:!1,sidebar:V,size:`lg`,testId:`add-offer-modal`,title:`Offer`,width:1140,onCancel:z,onClose:()=>{c(`offers`)},onOk:async()=>{if(C(),!Object.values(w).every(e=>!e)){o.dismiss(),o.info(`Can't save offer`,{description:`Make sure you filled all required fields`});return}try{if(await b({force:!0}))return}catch(e){let t;e instanceof r&&e.data&&e.data.errors[0]&&(t=e.data.errors[0].context||e.data.errors[0].message),o.dismiss(),t&&o.error(`Can't save offer`,{description:t||`Please try again later`})}}})},Ae=e=>new Date(e).toLocaleDateString(`default`,{year:`numeric`,month:`short`,day:`2-digit`}),je=e=>{let t=`${i().adminRoot}#/members`,n=`offer_redemptions:[${e.join(`,`)}]`;return`${t}?filter=${encodeURIComponent(n)}`},Me=e=>je([e]),Ne=({amount:e,duration:t})=>e===100&&t===`repeating`,Pe=(e,t)=>`Retention ${e} (${t})`,Fe=({amount:e,duration:t,durationInMonths:n})=>Ne({amount:e,duration:t})?`${n} ${n===1?`month`:`months`} free`:t===`once`?`${e}% off once`:t===`repeating`?`${e}% off for ${n} mo`:`${e}% off forever`,Ie=(e,t)=>{let n=t.trim(),r=Fe(e),i=Pe(r,n);if(i.length<=40)return i;let a=i.length-40,o=Math.max(3,n.length-a);return Pe(r,n.slice(0,o))},Le=e=>e===`month`?`monthly`:`yearly`,Re=e=>e===`once`?`First payment`:e===`repeating`?`Repeating`:`Forever`,ze=(e,t,n,r,i)=>{let a=``,o=n===`month`?i?.monthly_price??0:i?.yearly_price??0,s=o,c=e=>parseFloat(e.toFixed(2)),l=e=>h(c(m(e)),{maximumFractionDigits:2}),u=p(r)+l(o);switch(e){case`percent`:a=`${h(t)}% off`,s=o-o*t/100;break;case`fixed`:a=`${l(t)} ${r} off`,s=o-t;break;case`trial`:a=`${h(t)} days free`,u=``;break;default:break}s<0&&(s=0);let d=p(r)+l(s);return{discountOffer:a,originalPriceWithCurrency:u,updatedPriceWithCurrency:d}};function Be(e){return new Date(e).toLocaleDateString(`default`,{year:`numeric`,month:`short`,day:`2-digit`})}var Ve=({clearError:e,errors:t,offer:n,updateOffer:r})=>{let{siteData:i}=Y(),[s,c]=(0,X.useState)(!1),u=a(),{confirm:d}=ge(),{mutateAsync:f}=l(),[p,m]=(0,X.useState)(n?.name.length||0),g=p>40?`text-red`:`text-green`,{updateRoute:_}=j();(0,X.useEffect)(()=>{n?.name&&m(n?.name.length)},[n?.name]);let v=pe(i),y=`${v}${n?.code}`,x=async()=>{await navigator.clipboard.writeText(y),c(!0),setTimeout(()=>c(!1),2e3)},S=()=>{n?.status===`active`?d({title:`Archive offer`,prompt:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`p`,{children:`New members will no longer be able to subscribe using this offer.`}),(0,Z.jsxs)(`p`,{children:[`All members that previously redeemed `,(0,Z.jsx)(`strong`,{children:n?.name}),` will remain unchanged.`]})]}),okLabel:`Archive`,okVariant:`destructive`,onOk:async e=>{try{await f({...n,status:`archived`}),e?.remove(),o.success(`Offer archived`),_(`offers/edit`)}catch(e){u(e)}}}):d({title:`Reactivate offer`,prompt:(0,Z.jsx)(Z.Fragment,{children:(0,Z.jsxs)(`p`,{children:[`Reactivating `,(0,Z.jsx)(`strong`,{children:n?.name}),` will allow new members to subscribe using this offer. Existing members will remain unchanged.`]})}),okLabel:`Reactivate`,onOk:async e=>{try{await f({...n,status:`active`}),e?.remove(),o.success(`Offer reactivated`),_(`offers/edit`)}catch(e){u(e)}}})};return(0,Z.jsxs)(`div`,{className:`flex grow flex-col pt-2`,children:[(0,Z.jsxs)(M,{className:`mb-10 grow gap-8`,children:[(0,Z.jsx)(`section`,{children:(0,Z.jsxs)(`div`,{className:`flex flex-col gap-5 rounded-md border border-grey-300 p-4 pb-3.5 dark:border-grey-800`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Z.jsx)(`span`,{className:`text-sm leading-none font-semibold text-grey-700`,children:`Created on`}),(0,Z.jsx)(`span`,{children:Be(n?.created_at?n.created_at:``)})]}),(0,Z.jsxs)(`div`,{className:`flex items-end justify-between`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Z.jsx)(`span`,{className:`text-sm leading-none font-semibold text-grey-700`,children:`Performance`}),(0,Z.jsxs)(`span`,{children:[h(n?.redemption_count||0),` `,n?.redemption_count===1?`redemption`:`redemptions`]})]}),n?.redemption_count>0&&n?.last_redeemed?(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Z.jsx)(`span`,{className:`text-sm leading-none font-semibold text-grey-700`,children:`Last redemption`}),(0,Z.jsx)(`span`,{children:Be(n?.last_redeemed)})]}):null]}),n?.redemption_count>0?(0,Z.jsx)(`a`,{className:`font-semibold text-green`,href:Me(n?.id),children:`See members →`}):null]})]})}),(0,Z.jsxs)(`section`,{className:`mt-2`,children:[(0,Z.jsx)(`h2`,{className:`mb-4 text-lg`,children:`General`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Z.jsxs)(L,{"data-invalid":!!t.name||void 0,children:[(0,Z.jsx)(F,{htmlFor:`offer-name`,children:`Offer name`}),(0,Z.jsx)(w,{"aria-invalid":!!t.name||void 0,id:`offer-name`,maxLength:40,placeholder:`Black Friday`,value:n?.name??``,onChange:e=>{m(e.target.value.length),r({name:e.target.value})},onKeyDown:()=>e(`name`)}),t.name?(0,Z.jsx)(N,{children:t.name}):(0,Z.jsx)(I,{children:(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`Visible to members on Stripe Checkout page`}),(0,Z.jsxs)(`strong`,{children:[(0,Z.jsx)(`span`,{className:g,children:h(p)}),` /`,` `,h(40)]})]})})]}),(0,Z.jsxs)(L,{className:`group`,"data-invalid":!!t.code||void 0,children:[(0,Z.jsx)(F,{htmlFor:`offer-code`,children:`Offer code`}),(0,Z.jsxs)(H,{"data-invalid":!!t.code||void 0,children:[(0,Z.jsx)(z,{"aria-invalid":!!t.code||void 0,id:`offer-code`,placeholder:`black-friday`,value:n?.code??``,onChange:e=>r({code:e.target.value}),onKeyDown:()=>e(`code`)}),n?.code!==``&&(0,Z.jsx)(B,{align:`inline-end`,children:(0,Z.jsx)(V,{onClick:()=>void x(),children:s?`Copied!`:`Copy link`})})]}),t.code?(0,Z.jsx)(N,{children:t.code}):n?.code!==``&&(0,Z.jsxs)(I,{className:`truncate`,children:[v,(0,Z.jsx)(`span`,{className:`font-bold text-foreground`,children:n?.code})]})]}),(0,Z.jsxs)(L,{"data-invalid":!!t.displayTitle||void 0,children:[(0,Z.jsx)(F,{htmlFor:`offer-display-title`,children:`Display title`}),(0,Z.jsx)(w,{"aria-invalid":!!t.displayTitle||void 0,id:`offer-display-title`,placeholder:`Black Friday Special`,value:n?.display_title??``,onChange:e=>r({display_title:e.target.value}),onKeyDown:()=>e(`displayTitle`)}),t.displayTitle&&(0,Z.jsx)(N,{children:t.displayTitle})]}),(0,Z.jsxs)(L,{children:[(0,Z.jsx)(F,{htmlFor:`offer-display-description`,children:`Display description`}),(0,Z.jsx)(re,{id:`offer-display-description`,placeholder:`Take advantage of this limited-time offer.`,value:n?.display_description??``,onChange:e=>r({display_description:e.target.value})})]})]})]})]}),(0,Z.jsx)(`div`,{className:`mb-2`,children:n?.status===`active`?(0,Z.jsx)(b,{className:`h-auto p-0 text-destructive hover:text-destructive`,type:`button`,variant:`link`,onClick:S,children:`Archive offer`}):(0,Z.jsx)(b,{className:`h-auto p-0 text-green hover:text-green`,type:`button`,variant:`link`,onClick:S,children:`Reactivate offer`})})]})},He=({id:e})=>{let{siteData:t}=Y(),{updateRoute:n}=j(),i=a(),{mutateAsync:c}=l(),[u,f]=(0,X.useState)(``),{data:{offers:p=[]}={}}=d(e||``),{formState:m,saveState:h,updateForm:g,setFormState:_,handleSave:v,validate:y,errors:b,clearError:x,okProps:S}=s({initialState:p[0],savingDelay:500,onSave:async()=>{await c(m)},onSaveError:i,onValidate:()=>{let e={};return m?.name||(e.name=`Name is required`),m?.display_title||(e.displayTitle=`Display title is required`),m?.code||(e.code=`Please enter a code`),e}});(0,X.useEffect)(()=>{_(()=>p[0])},[_,p]);let C=(0,Z.jsx)(Ve,{clearError:x,errors:b,offer:m,updateOffer:e=>{g(t=>({...t,...e}))},validate:y});(0,X.useEffect)(()=>{let e=Ce({name:m?.name||``,code:m?.code||``,displayTitle:m?.display_title||``,displayDescription:m?.display_description||``,type:m?.type||``,cadence:m?.cadence||``,amount:m?.amount,duration:m?.duration||``,durationInMonths:m?.duration_in_months||0,currency:m?.currency||``,status:m?.status||``,tierId:m?.tier?.id||``,redemptionType:`signup`},t.url);f(e)},[m,t]);let w=(0,Z.jsx)(xe,{href:u||``,portalParent:`offers`}),T=()=>{n(`offers/edit`)};return p?(0,Z.jsx)(be,{backDropClick:!1,cancelLabel:`Cancel`,dirty:h===`unsaved`,height:`full`,okLabel:S.label||`Save`,okVariant:S.variant,preview:w,previewToolbarBreadcrumbs:(0,Z.jsx)(Se,{current:m?.name||`Offer`,label:`Offers`,onBack:T}),sidebar:C,size:`lg`,testId:`offer-update-modal`,title:`Offer`,width:1140,onCancel:T,onClose:()=>{n(`offers`)},onOk:async()=>{try{if(await v({force:!0}))return}catch(e){let t;e instanceof r&&e.data&&e.data.errors[0]&&(t=e.data.errors[0].context||e.data.errors[0].message),o.dismiss(),t&&o.error(`Can't save offer`,{description:`Please try again later`})}}}):null},Ue=[{title:`Percentage discount`,description:`Offer a special reduced price`,value:`percent`},{title:`Free month(s)`,description:`Give free access for a limited time`,value:`free_months`}],We=[{value:`once`,label:`First-payment`},{value:`repeating`,label:`Multiple-months`},{value:`forever`,label:`Forever`}],Ge=191,Ke=99,qe=`Enter a whole number of months between 1 and ${Ke}.`,Je=e=>Math.max(1,Number.isFinite(e)?Math.trunc(e):0),Ye=({type:e,percentAmount:t,freeMonths:n,lastPercentAmount:r,lastFreeMonths:i})=>e===`free_months`?n>0?n:i:t>0?t:r,Xe=(e=`monthly`)=>({enabled:!1,displayTitle:``,displayDescription:``,type:e===`yearly`?`percent`:`free_months`,percentAmount:20,duration:`once`,durationInMonths:1,freeMonths:1}),Ze=e=>e.type===`percent`&&e.amount===100&&e.duration===`repeating`,Qe=(e,t=`monthly`)=>{let n=Xe(t);if(!e)return n;let r=Ze(e),i=e.type===`percent`&&!r,a=e.duration===`repeating`&&e.duration_in_months?e.duration_in_months:n.durationInMonths;return{enabled:e.status===`active`,displayTitle:e.display_title||``,displayDescription:e.display_description||``,type:r?`free_months`:`percent`,percentAmount:i?e.amount:n.percentAmount,duration:i?e.duration:n.duration,durationInMonths:a,freeMonths:r&&e.duration_in_months||n.freeMonths}},$e=({formState:e,lastPercentAmount:t,lastFreeMonths:n})=>{let r=Ye({type:e.type,percentAmount:e.percentAmount,freeMonths:e.freeMonths,lastPercentAmount:t,lastFreeMonths:n});if(e.type===`free_months`)return{type:`percent`,amount:100,duration:`repeating`,durationInMonths:Je(r)};let i=e.duration;return{type:`percent`,amount:r,duration:i,durationInMonths:i===`repeating`?Je(e.durationInMonths):0}},et=e=>{if(!e)return null;let t=e.duration_in_months??0;return{type:`percent`,amount:e.amount,duration:e.duration,durationInMonths:t}},tt=e=>e?`${e.type}:${e.amount}:${e.duration}:${e.durationInMonths}`:``,nt=e=>Number.isInteger(e)&&e>0&&e<=Ke,rt=(e,t)=>e.displayTitle!==t.displayTitle||e.displayDescription!==t.displayDescription||e.type!==t.type||e.percentAmount!==t.percentAmount||e.duration!==t.duration||e.durationInMonths!==t.durationInMonths||e.freeMonths!==t.freeMonths,it=({formState:e,updateForm:t,clearError:n,errors:r,cadence:i,lastRedeemed:a,membersFilterUrl:o,redemptions:s})=>{let c=i===`yearly`?We.filter(e=>e.value!==`repeating`):We;return(0,Z.jsx)(`div`,{className:`flex grow flex-col pt-2`,children:(0,Z.jsxs)(M,{className:`mb-10 grow gap-8`,children:[(0,Z.jsx)(`section`,{children:(0,Z.jsx)(`div`,{className:`flex flex-col gap-5 rounded-md border border-grey-300 p-4 pb-3.5 dark:border-grey-800`,children:(0,Z.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:(0,Z.jsxs)(`div`,{className:`flex items-end justify-between`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Z.jsx)(`span`,{className:`text-sm leading-none font-semibold text-grey-700`,children:`Performance`}),(0,Z.jsxs)(`span`,{children:[h(s),` `,s===1?`redemption`:`redemptions`]})]}),s>0&&a?(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Z.jsx)(`span`,{className:`text-sm leading-none font-semibold text-grey-700`,children:`Last redemption`}),(0,Z.jsx)(`span`,{children:Ae(a)})]}):null]}),s>0&&o?(0,Z.jsx)(`a`,{className:`font-semibold text-green`,href:o,children:`See members →`}):null]})})})}),(0,Z.jsx)(`section`,{className:`mt-2`,children:(0,Z.jsxs)(L,{orientation:`horizontal`,children:[(0,Z.jsxs)(P,{children:[(0,Z.jsxs)(F,{htmlFor:`${i}-retention-enabled`,children:[`Enable `,i,` retention`]}),(0,Z.jsx)(I,{children:i===`monthly`?`Applied to monthly plans`:`Applied to annual plans`})]}),(0,Z.jsx)(C,{checked:e.enabled,id:`${i}-retention-enabled`,onCheckedChange:e=>t(t=>({...t,enabled:e}))})]})}),e.enabled&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`section`,{className:`mt-2`,children:[(0,Z.jsx)(`h2`,{className:`mb-4 text-lg`,children:`General`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Z.jsxs)(L,{children:[(0,Z.jsx)(F,{htmlFor:`retention-display-title`,children:`Display title`}),(0,Z.jsx)(w,{id:`retention-display-title`,maxLength:Ge,placeholder:`Before you go`,value:e.displayTitle,onChange:e=>{t(t=>({...t,displayTitle:e.target.value}))}})]}),(0,Z.jsxs)(L,{children:[(0,Z.jsx)(F,{htmlFor:`retention-display-description`,children:`Display description`}),(0,Z.jsx)(re,{id:`retention-display-description`,maxLength:Ge,placeholder:`We'd hate to see you leave. How about a special offer to stay?`,value:e.displayDescription,onChange:e=>{t(t=>({...t,displayDescription:e.target.value}))}})]})]})]}),(0,Z.jsxs)(`section`,{className:`mt-4`,children:[(0,Z.jsx)(`h2`,{className:`mb-4 text-lg`,children:`Details`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[i===`monthly`&&(0,Z.jsx)(te,{"aria-label":`${i} retention offer type`,className:`rounded-md border border-border-default p-4`,value:e.type,onValueChange:e=>{n(`amount`),n(`durationInMonths`),t(t=>({...t,type:e}))},children:Ue.map(e=>{let t=`${i}-retention-type-${e.value}`;return(0,Z.jsxs)(L,{orientation:`horizontal`,children:[(0,Z.jsx)(ee,{id:t,value:e.value}),(0,Z.jsxs)(P,{children:[(0,Z.jsx)(F,{className:`cursor-pointer`,htmlFor:t,children:e.title}),(0,Z.jsx)(I,{children:e.description})]})]},e.value)})}),e.type===`percent`&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(L,{"data-invalid":!!r.amount||void 0,children:[(0,Z.jsx)(F,{htmlFor:`retention-amount`,children:`Amount off`}),(0,Z.jsxs)(H,{"data-invalid":!!r.amount||void 0,children:[(0,Z.jsx)(z,{"aria-invalid":!!r.amount||void 0,id:`retention-amount`,type:`number`,value:e.percentAmount===0?``:String(e.percentAmount),onChange:e=>{let n=Number(e.target.value),r=Number.isNaN(n)?0:n;t(e=>({...e,percentAmount:r}))},onKeyDown:()=>n(`amount`)}),(0,Z.jsx)(B,{align:`inline-end`,children:(0,Z.jsx)(R,{children:`%`})})]}),r.amount&&(0,Z.jsx)(N,{children:r.amount})]}),(0,Z.jsxs)(L,{children:[(0,Z.jsx)(F,{children:`Duration`}),(0,Z.jsxs)(k,{value:e.duration,onValueChange:e=>{n(`durationInMonths`),t(t=>({...t,duration:e}))},children:[(0,Z.jsx)(D,{"aria-label":`Duration`,children:(0,Z.jsx)(O,{})}),(0,Z.jsx)(E,{children:c.map(e=>(0,Z.jsx)(T,{value:e.value,children:e.label},e.value))})]})]}),e.duration===`repeating`&&(0,Z.jsx)(`div`,{className:`-mt-4`,children:(0,Z.jsxs)(L,{"data-invalid":!!r.durationInMonths||void 0,children:[(0,Z.jsxs)(H,{"data-invalid":!!r.durationInMonths||void 0,children:[(0,Z.jsx)(z,{"aria-invalid":!!r.durationInMonths||void 0,"data-testid":`duration-months-input`,type:`number`,value:e.durationInMonths===0?``:String(e.durationInMonths),onChange:e=>{let n=Number(e.target.value);t(e=>({...e,durationInMonths:Number.isNaN(n)?0:n}))},onKeyDown:()=>n(`durationInMonths`)}),(0,Z.jsx)(B,{align:`inline-end`,children:(0,Z.jsx)(R,{children:e.durationInMonths===1?`month`:`months`})})]}),r.durationInMonths&&(0,Z.jsx)(N,{children:r.durationInMonths})]})})]}),e.type===`free_months`&&(0,Z.jsxs)(L,{"data-invalid":!!r.amount||void 0,children:[(0,Z.jsx)(F,{htmlFor:`retention-free-months`,children:`Free months`}),(0,Z.jsxs)(H,{"data-invalid":!!r.amount||void 0,children:[(0,Z.jsx)(z,{"aria-invalid":!!r.amount||void 0,id:`retention-free-months`,type:`number`,value:e.freeMonths===0?``:String(e.freeMonths),onChange:e=>{let n=Number(e.target.value);t(e=>({...e,freeMonths:Number.isNaN(n)?0:n}))},onKeyDown:()=>n(`amount`)}),(0,Z.jsx)(B,{align:`inline-end`,children:(0,Z.jsx)(R,{children:e.freeMonths===1?`month`:`months`})})]}),r.amount&&(0,Z.jsx)(N,{children:r.amount})]})]})]})]})]})})},at=({cadence:e})=>{let{updateRoute:t}=j(),{siteData:n}=Y(),{data:{tiers:i=[]}={}}=me(),{data:{offers:a=[]}={},isFetched:d,isFetching:p}=u(),{mutateAsync:m}=f(),{mutateAsync:h}=l(),g=c(),[_,v]=(0,X.useState)(``),y=e===`monthly`?`Monthly retention`:`Yearly retention`,b=e===`monthly`?`month`:`year`,x=he(i||[]),S=(0,X.useMemo)(()=>a.filter(e=>e.redemption_type===`retention`&&e.cadence===b).sort((e,t)=>{let n=e.created_at?new Date(e.created_at).getTime():0;return(t.created_at?new Date(t.created_at).getTime():0)-n}),[a,b]),C=(0,X.useMemo)(()=>S.find(e=>e.status===`active`)||null,[S]),w=S[0]||null,T=C||w,E=(0,X.useMemo)(()=>S.reduce((e,t)=>e+(t.redemption_count||0),0),[S]),D=(0,X.useMemo)(()=>S.map(e=>e.id),[S]),O=(0,X.useMemo)(()=>S.map(e=>e.last_redeemed).filter(e=>!!e).sort((e,t)=>new Date(t).getTime()-new Date(e).getTime())[0]||null,[S]),k=(0,X.useMemo)(()=>E===0||D.length===0?null:je(D),[D,E]),[A,M]=(0,X.useState)(20),[N,P]=(0,X.useState)(1),[F,I]=(0,X.useState)(null),{formState:L,setFormState:R,updateForm:z,handleSave:B,saveState:V,okProps:H,errors:ee,clearError:te}=s({initialState:Xe(e),savingDelay:500,onSave:async()=>{let t=!1,n=$e({formState:L,lastPercentAmount:A,lastFreeMonths:N}),r=tt(et(T))!==tt(n),i=L.enabled?`active`:`archived`,a=L.displayTitle||``,o=L.displayDescription||``,s=T?a!==(T.display_title||``)||o!==(T.display_description||``):a!==``||o!==``,c=Xe(e),l=!L.enabled&&!T&&rt(L,c),u=async e=>{let r=crypto.getRandomValues(new Uint32Array(1))[0].toString(16).padStart(8,`0`),i=Ie(n,r);await m({name:i,code:r,display_title:a,display_description:o,cadence:b,amount:n.amount,duration:n.duration,duration_in_months:n.duration===`repeating`?n.durationInMonths:null,currency:null,status:e,redemption_type:`retention`,tier:null,type:n.type,currency_restriction:!1}),t=!0},d=async()=>{t&&await g()};if(!(!T&&!L.enabled&&!l)){if(r){!L.enabled&&C&&(await h({...C,status:`archived`}),t=!0),await u(i),await d();return}if(T){let e=T.status!==i;(s||e)&&(await h({...T,display_title:a,display_description:o,status:i}),t=!0),await d();return}(L.enabled||l)&&await u(i),await d()}},onSaveError:e=>{let t=`Please try again later`;e instanceof r&&e.data&&e.data.errors[0]&&(t=e.data.errors[0].context||e.data.errors[0].message||t),o.dismiss(),o.error(`Failed to save offer`,{description:t})},onValidate:()=>{let e={};return L.enabled?(L.type===`percent`&&((L.percentAmount<1||L.percentAmount>100)&&(e.amount=`Enter an amount between 1 and 100%.`),L.duration===`repeating`&&!nt(L.durationInMonths)&&(e.durationInMonths=qe)),L.type===`free_months`&&(nt(L.freeMonths)||(e.amount=qe)),e):e}}),U=`${e}:${T?.id||`none`}`;(0,X.useEffect)(()=>{!d||p||V===`unsaved`||F===U||(R(()=>Qe(T,e)),I(U))},[e,U,T,d,F,p,V,R]),(0,X.useEffect)(()=>{L.percentAmount>0&&M(L.percentAmount)},[L.percentAmount]),(0,X.useEffect)(()=>{L.freeMonths>0&&P(L.freeMonths)},[L.freeMonths]);let W=()=>{t(`offers/edit`)},G=(0,Z.jsx)(it,{cadence:e,clearError:te,errors:ee,formState:L,lastRedeemed:O,membersFilterUrl:k,redemptions:E,updateForm:z}),K=async()=>{try{await B({force:!0})&&W()}catch{}},q=(0,X.useMemo)(()=>{let t=$e({formState:L,lastPercentAmount:A,lastFreeMonths:N}),n=x.find(e=>b===`month`?e.monthly_price:e.yearly_price);return{enabled:L.enabled,name:`${e} retention`,code:`${e}-retention`,displayTitle:L.displayTitle||``,displayDescription:L.displayDescription||``,type:t.type,cadence:b,amount:t.amount,duration:t.duration,durationInMonths:t.durationInMonths,currency:``,status:`active`,tierId:n?.id||``,redemptionType:`retention`}},[x,e,L,N,A,b]);(0,X.useEffect)(()=>{if(!n.url){v(``);return}let e=Ce(q,n.url);v(e)},[q,n.url]);let ne=(0,Z.jsx)(xe,{href:_||``,portalParent:`offers`});return(0,Z.jsx)(be,{backDropClick:!1,cancelLabel:`Cancel`,dirty:V===`unsaved`,height:`full`,okLabel:H.label||`Save`,okVariant:H.variant,preview:ne,previewToolbarBreadcrumbs:(0,Z.jsx)(Se,{current:y,label:`Offers`,onBack:W}),sidebar:G,size:`lg`,testId:`retention-offer-modal`,title:`Offer`,width:1140,onCancel:W,onClose:()=>t(`offers`),onOk:K})},ot=({id:e})=>{let{updateRoute:t}=j(),{data:{offers:n=[]}={}}=d(e||``),[r,i]=(0,X.useState)(),[a,o]=(0,X.useState)(``),{siteData:s}=Y();(0,X.useEffect)(()=>{if(n.length>0){let e=n[0],t=`${pe(s)}${e?.code}`;o(t),i(e)}},[n,s]);let[c,l]=(0,X.useState)(!1),u=()=>{let e=``;switch(r?.type){case`percent`:e=r?.amount+`% discount`;break;case`fixed`:e=h(m(r?.amount),{maximumFractionDigits:2})+` `+r?.currency+` discount`;break;case`trial`:e=r?.amount+` days free trial`;break;default:break}return`${encodeURIComponent(r?.name||``)} — Check out ${encodeURIComponent(e)} on:`},f=async()=>{await navigator.clipboard.writeText(a),l(!0),setTimeout(()=>l(!1),2e3)};return(0,Z.jsx)(A,{animate:!1,backDropClick:!1,footer:!1,height:`full`,size:`lg`,testId:`offer-success-modal`,topRightContent:`close`,width:1140,onClose:()=>{t(`offers`)},children:(0,Z.jsxs)(`div`,{className:`-mt-6 flex h-full flex-col items-center justify-center text-center`,children:[(0,Z.jsx)(Se,{className:`absolute top-5 left-6`,current:r?.name||``,label:`Offers`,onBack:()=>t(`offers/edit`)}),(0,Z.jsx)(y,{className:`-mt-4 size-10 text-grey-700`}),(0,Z.jsx)(`h1`,{className:`mt-6 text-4xl`,children:`Your new offer is live!`}),(0,Z.jsx)(`p`,{className:`mt-3 max-w-[510px] text-[1.6rem]`,children:`You can share the link anywhere. In your newsletter, social media, a podcast, or in-person. It all just works.`}),(0,Z.jsxs)(`div`,{className:`mt-8 flex w-full max-w-md flex-col gap-8`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col-reverse gap-2`,children:[(0,Z.jsx)(w,{name:`offer-url`,type:`url`,value:a,disabled:!0}),(0,Z.jsx)(b,{className:`w-full`,type:`button`,onClick:()=>void f(),children:c?`Copied!`:`Copy link`})]}),(0,Z.jsx)(`div`,{className:`flex items-center gap-4 text-sm font-medium before:h-px before:grow before:bg-grey-300 before:content-[""] after:h-px after:grow after:bg-grey-300 after:content-[""] dark:before:bg-grey-800 dark:after:bg-grey-800`,children:`OR`}),(0,Z.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Z.jsx)(b,{"aria-label":`Share on X`,className:`h-8 flex-1`,size:`sm`,type:`button`,variant:`outline`,onClick:()=>{window.open(`https://twitter.com/intent/tweet?url=${encodeURI(a)}&text=${u()}`,`_blank`)},children:(0,Z.jsx)(_e,{className:`size-3.5!`,name:`twitter-x`})}),(0,Z.jsx)(b,{"aria-label":`Share on Facebook`,className:`h-8 flex-1`,size:`sm`,type:`button`,variant:`outline`,onClick:()=>{window.open(`https://www.facebook.com/sharer/sharer.php?u=${encodeURI(a)}`,`_blank`)},children:(0,Z.jsx)(_e,{className:`size-3.5!`,name:`facebook`})}),(0,Z.jsx)(b,{"aria-label":`Share on LinkedIn`,className:`h-8 flex-1`,size:`sm`,type:`button`,variant:`outline`,onClick:()=>{window.open(`http://www.linkedin.com/shareArticle?mini=true&url=${encodeURI(a)}&title=${u()}`,`_blank`)},children:(0,Z.jsx)(_e,{className:`size-3.5!`,name:`linkedin`})})]})]})]})})},st=(e,t)=>e.find(e=>e.redemption_type===`retention`&&e.cadence===t&&e.status===`active`)||null,ct=(e,t)=>e.reduce((e,n)=>n.redemption_type!==`retention`||n.cadence!==t?e:e+(n.redemption_count||0),0),lt=(e,t)=>e.filter(e=>e.redemption_type===`retention`&&e.cadence===t).map(e=>e.id),ut=(e,t)=>{let n=e.filter(e=>e.redemption_type===`retention`&&e.cadence===t&&e.created_at).map(e=>new Date(e.created_at).getTime()).filter(e=>!Number.isNaN(e));return n.length===0?null:new Date(Math.max(...n)).toISOString()},dt=e=>e.type===`percent`&&e.amount===100&&e.duration===`repeating`,ft=e=>{if(!e)return null;if(dt(e)){let t=e.duration_in_months||0,n=t===1?`month`:`months`;return`${h(t)} ${n} free`}return e.type===`percent`?`${h(e.amount)}% OFF`:null},pt=e=>{if(!e)return null;if(dt(e))return``;if(e.duration===`once`)return`First payment`;if(e.duration===`repeating`&&e.duration_in_months){let t=e.duration_in_months===1?`month`:`months`;return`For ${h(e.duration_in_months)} ${t}`}return e.duration===`forever`?`Forever`:null},mt=e=>{let t=st(e,`month`),n=st(e,`year`),r=lt(e,`month`),i=lt(e,`year`),a=ct(e,`month`),o=ct(e,`year`);return[{id:`monthly`,name:`Monthly retention`,description:`Applied to monthly plans`,terms:ft(t),termsDetail:pt(t),redemptionOfferIds:r,redemptions:a,status:t?`active`:`inactive`,createdAt:ut(e,`month`)},{id:`yearly`,name:`Yearly retention`,description:`Applied to annual plans`,terms:ft(n),termsDetail:pt(n),redemptionOfferIds:i,redemptions:o,status:n?`active`:`inactive`,createdAt:ut(e,`year`)}]},ht=({showArchived:e,setShowArchived:t,sortOption:n,sortDirection:r,onSortChange:i,onDirectionChange:a})=>(0,Z.jsxs)(ie,{children:[(0,Z.jsx)(se,{asChild:!0,children:(0,Z.jsx)(b,{"aria-label":`Filter options`,className:`text-muted-foreground hover:text-foreground`,size:`icon`,type:`button`,variant:`ghost`,children:(0,Z.jsx)(v,{size:16,strokeWidth:1.5})})}),(0,Z.jsxs)(le,{align:`end`,className:`z-[9999] min-w-[200px] normal-case`,children:[(0,Z.jsx)(fe,{className:`text-xs tracking-wide text-muted-foreground uppercase`,children:`Sort by`}),(0,Z.jsxs)(ae,{value:n,onValueChange:i,children:[(0,Z.jsx)(de,{value:`date-added`,children:`Date added`}),(0,Z.jsx)(de,{value:`name`,children:`Name`}),(0,Z.jsx)(de,{value:`redemptions`,children:`Redemptions`})]}),(0,Z.jsxs)(oe,{onSelect:a,children:[r===`asc`?(0,Z.jsx)(S,{className:`size-3`}):(0,Z.jsx)(x,{className:`size-3`}),r===`asc`?`Ascending`:`Descending`]}),(0,Z.jsx)(ue,{}),(0,Z.jsx)(ce,{checked:e,onCheckedChange:e=>t(!!e),children:`Show archived`})]})]}),gt=({offer:e,onClick:t})=>{let n=e.redemptions>0&&e.redemptionOfferIds.length>0?je(e.redemptionOfferIds):void 0;return(0,Z.jsxs)(W,{"data-testid":`retention-offer-item`,children:[(0,Z.jsx)(K,{className:`sticky left-0 z-10 bg-background p-0`,children:(0,Z.jsx)(`button`,{className:`block w-full cursor-pointer p-5 text-left`,type:`button`,onClick:t,children:(0,Z.jsxs)(_,{gap:`none`,children:[(0,Z.jsx)(`span`,{className:`font-semibold`,children:e.name}),(0,Z.jsx)(`span`,{className:`text-muted-foreground`,children:e.description})]})})}),(0,Z.jsx)(K,{className:`p-0 whitespace-nowrap`,children:(0,Z.jsx)(`button`,{className:`block w-full cursor-pointer p-5 text-left`,type:`button`,onClick:t,children:e.terms?(0,Z.jsxs)(_,{gap:`none`,children:[(0,Z.jsx)(`span`,{className:`text-sm font-medium uppercase`,children:e.terms}),(0,Z.jsx)(`span`,{className:`text-muted-foreground`,children:e.termsDetail})]}):(0,Z.jsx)(`span`,{className:`text-muted-foreground`,children:`–`})})}),(0,Z.jsx)(K,{className:`p-0 whitespace-nowrap`,children:(0,Z.jsx)(`button`,{className:`block w-full cursor-pointer p-5 text-left`,type:`button`,onClick:t,children:(0,Z.jsx)(`span`,{className:`text-muted-foreground`,children:`–`})})}),(0,Z.jsx)(K,{className:`p-0 whitespace-nowrap`,children:n?(0,Z.jsx)(`a`,{className:`block cursor-pointer p-5 hover:underline`,"data-testid":`retention-redemptions-link-${e.id}`,href:n,children:h(e.redemptions)}):(0,Z.jsx)(`button`,{className:`block w-full cursor-pointer p-5 text-left`,"data-testid":`retention-redemptions-link-${e.id}`,type:`button`,onClick:t,children:h(e.redemptions)})}),(0,Z.jsx)(K,{className:`p-0 whitespace-nowrap`,children:(0,Z.jsx)(`button`,{className:`block w-full cursor-pointer p-5 text-left`,type:`button`,onClick:t,children:e.status===`active`?(0,Z.jsx)(J,{className:`rounded-full uppercase`,variant:`success`,children:`Active`}):(0,Z.jsx)(J,{className:`rounded-full uppercase`,variant:`secondary`,children:`Inactive`})})})]})},_t=({archived:e,offer:t,tier:n,onClick:r})=>{let{discountOffer:i,originalPriceWithCurrency:a,updatedPriceWithCurrency:o}=ze(t.type,t.amount,t.cadence,t.currency||`USD`,n);return(0,Z.jsxs)(W,{className:e?`opacity-60`:void 0,"data-testid":`offer-item`,children:[(0,Z.jsx)(K,{className:`sticky left-0 z-10 bg-background p-0`,children:(0,Z.jsx)(`button`,{className:`block w-full cursor-pointer p-5 text-left`,type:`button`,onClick:r,children:(0,Z.jsxs)(_,{gap:`none`,children:[(0,Z.jsx)(`span`,{className:`font-semibold`,children:t.name}),(0,Z.jsxs)(`span`,{className:`text-muted-foreground`,children:[n.name,` `,Le(t.cadence)]})]})})}),(0,Z.jsx)(K,{className:`p-0 whitespace-nowrap`,children:(0,Z.jsx)(`button`,{className:`block w-full cursor-pointer p-5 text-left`,type:`button`,onClick:r,children:(0,Z.jsxs)(_,{gap:`none`,children:[(0,Z.jsx)(`span`,{className:`text-sm font-medium uppercase`,children:i}),(0,Z.jsx)(`span`,{className:`text-muted-foreground`,children:t.type===`trial`?`Trial period`:Re(t.duration)})]})})}),(0,Z.jsx)(K,{className:`p-0 whitespace-nowrap`,children:(0,Z.jsxs)(`button`,{className:`block w-full cursor-pointer p-5 text-left`,type:`button`,onClick:r,children:[(0,Z.jsx)(`span`,{className:`font-medium`,children:o}),` `,t.type===`trial`?null:(0,Z.jsx)(`span`,{className:`relative text-sm text-muted-foreground before:absolute before:-inset-x-0.5 before:top-1/2 before:rotate-[-20deg] before:border-t before:content-[""]`,children:a})]})}),(0,Z.jsx)(K,{className:`p-0 whitespace-nowrap`,children:t.redemption_count>0&&t.id?(0,Z.jsx)(`a`,{className:`block cursor-pointer p-5 hover:underline`,href:Me(t.id),children:h(t.redemption_count)}):(0,Z.jsx)(`button`,{className:`block w-full cursor-pointer p-5 text-left`,type:`button`,onClick:r,children:h(t.redemption_count)})}),(0,Z.jsx)(K,{className:`p-0 whitespace-nowrap`,children:(0,Z.jsx)(`button`,{className:`block w-full cursor-pointer p-5 text-left`,type:`button`,onClick:r,children:e?(0,Z.jsx)(J,{className:`rounded-full uppercase`,variant:`secondary`,children:`Archived`}):(0,Z.jsx)(J,{className:`rounded-full uppercase`,variant:`success`,children:`Active`})})})]})},$=e=>e.offer.name,vt=e=>e.kind===`retention`?e.offer.redemptions:e.offer.redemption_count,yt=e=>e.kind===`retention`?e.offer.createdAt:e.offer.created_at||null,bt=(e,t,n)=>{let r=n===`desc`?-1:1;return[...e].sort((e,n)=>{let i;switch(t){case`name`:i=$(e).localeCompare($(n));break;case`redemptions`:i=vt(e)-vt(n);break;default:{let t=yt(e),r=yt(n);if(!t&&!r)i=0;else if(!t)return 1;else if(r)i=new Date(t).getTime()-new Date(r).getTime();else return-1;break}}return(i||$(e).localeCompare($(n)))*r})},xt=()=>{let{updateRoute:e}=j(),{data:{offers:t=[]}={}}=u(),{data:{tiers:n}={}}=me(),r=t.filter(e=>e.redemption_type===`signup`),i=mt(t),{sortingState:a,setSortingState:s}=ve(),c=a?.find(e=>e.type===`offers`),{offersShowArchived:l,setOffersShowArchived:d}=ye(),f=c?.option||`date-added`,p=c?.direction||`desc`,m=t=>{t&&e(`offers/edit/${t}`)},h=t=>{e(`offers/edit/retention/${t}`)},v=he(n||[]),y=r.filter(e=>{let t=n?.find(t=>t.id===e?.tier?.id),r=e.status===`active`&&t&&t.active===!0,i=e.status===`archived`||t&&t.active===!1;return!!(r||l&&i)}),x=bt([...i.map(e=>({kind:`retention`,offer:e})),...y.map(e=>({kind:`signup`,offer:e}))],f,p),S=e=>{s?.([{type:`offers`,option:e,direction:p}])},C=()=>{s?.([{type:`offers`,option:f,direction:p===`asc`?`desc`:`asc`}])},w=e=>{let t=n?.find(t=>t.id===e?.tier?.id);return e.status===`archived`||t?.active===!1};return(0,Z.jsx)(A,{animate:!1,backDropClick:!1,cancelLabel:``,footer:!1,height:`full`,size:`lg`,testId:`offers-modal`,title:`Offers`,topRightContent:(0,Z.jsxs)(g,{gap:`md`,children:[(0,Z.jsx)(b,{type:`button`,variant:`outline`,onClick:()=>{e(`offers`)},children:`Close`}),(0,Z.jsx)(b,{type:`button`,onClick:()=>{v.length===0?o.info(`You must have an active tier to create an offer.`):e(`offers/new`)},children:`New offer`})]}),width:1140,onClose:()=>{e(`offers`)},children:(0,Z.jsx)(_,{className:`h-full pt-8`,children:(0,Z.jsx)(`div`,{className:`overflow-x-auto`,children:(0,Z.jsxs)(ne,{className:`m-0 min-w-[900px]`,children:[(0,Z.jsxs)(`colgroup`,{children:[(0,Z.jsx)(`col`,{className:`w-[25%]`}),(0,Z.jsx)(`col`,{className:`w-[200px]`}),(0,Z.jsx)(`col`,{className:`w-[200px]`}),(0,Z.jsx)(`col`,{className:`w-[200px]`}),(0,Z.jsx)(`col`,{className:`w-[220px]`})]}),(0,Z.jsx)(q,{children:(0,Z.jsxs)(W,{children:[(0,Z.jsx)(U,{className:`sticky left-0 z-10 h-auto bg-background p-0 pb-2.5 pl-5 uppercase`,children:`Name`}),(0,Z.jsx)(U,{className:`h-auto p-0 pb-2.5 pl-5 uppercase`,children:`Terms`}),(0,Z.jsx)(U,{className:`h-auto p-0 pb-2.5 pl-5 uppercase`,children:`Price`}),(0,Z.jsx)(U,{className:`h-auto p-0 pb-2.5 pl-5 uppercase`,children:`Redemptions`}),(0,Z.jsx)(U,{className:`h-auto p-0 px-5 pb-2.5 uppercase`,children:(0,Z.jsxs)(g,{align:`center`,justify:`between`,children:[`Status`,(0,Z.jsx)(ht,{setShowArchived:d,showArchived:l,sortDirection:p,sortOption:f,onDirectionChange:C,onSortChange:S})]})})]})}),(0,Z.jsx)(G,{"data-testid":`offers-table-body`,children:x.map(e=>{if(e.kind===`retention`)return(0,Z.jsx)(gt,{offer:e.offer,onClick:()=>h(e.offer.id)},`retention-${e.offer.id}`);let t=e.offer,r=n?.find(e=>e.id===t?.tier?.id);if(!r)return null;let i=w(t);return(0,Z.jsx)(_t,{archived:i,offer:t,tier:r,onClick:()=>m(t.id)},`signup-${t.id}`)})})]})})})})},St=`offers/edit/retention/`,Ct=e=>{let t=e.slice(22).replace(/\/+$/,``);return t===`monthly`||t===`yearly`?t:null},wt=({route:e})=>{if(e===`offers/new`)return(0,Z.jsx)(ke,{});if(e===`offers/edit/retention`||e.startsWith(St)){let t=e.startsWith(St)?Ct(e):null;return t?(0,Z.jsx)(at,{cadence:t}):(0,Z.jsx)(xt,{})}else if(e.startsWith(`offers/edit/`)&&e.length>12){let t=e.split(`/`).pop();return(0,Z.jsx)(He,{id:t||``})}else if(e.startsWith(`offers/success/`)&&e.length>15){let t=e.split(`/`).pop();return(0,Z.jsx)(ot,{id:t||``})}else if(e===`offers/edit`||e===`offers/edit/`)return(0,Z.jsx)(xt,{})},Tt=()=>{let{route:e}=j();return(0,Z.jsx)(wt,{route:e})};export{Tt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-DAXXjFlN.js";import{n as t,t as n}from"./onboarding-B4YhlZ0i.js";var r=e({default:()=>n,useOnboardingStatus:()=>t});export{r as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./use-tinybird-query-D2Aeoty5.js";import{i,o as a}from"./post-helpers-C5OQMBoi.js";import{h as o}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as s}from"./router-provider-CJC58zTy.js";import{f as c,p as l}from"./dist-Cb5RSHSg.js";import{a as u}from"./heading-CRZZ2FUe.js";import{a as d,c as f,n as p,s as m}from"./app-utils-D2Wp7ZSS.js";import{K as h,Ut as g,en as ee,hn as te,mn as _,t as v}from"./button-BshWPHvn.js";import{i as ne,s as re,t as ie}from"./chart-helpers-B3OqQ6Ez.js";import{t as ae}from"./skeleton-D7hwjdry.js";import{t as y}from"./loading-indicator-SFTqyYVE.js";import{a as b,n as x,o as S,t as C}from"./card-CiiE7QfM.js";import{c as w,l as oe,n as T,o as E,r as D,s as O,t as k,u as A}from"./data-list-CupF7bjM.js";import{t as j}from"./empty-indicator-WB1WgT9h.js";import{Ar as se,Fr as ce,I as le,Mr as ue,Or as de,Pn as M,kr as fe}from"./index-CDP9tIOk.js";import{t as pe}from"./disabled-sources-indicator-BTJ2ClQu.js";import{n as N,r as P,t as F}from"./kpi-card-LERqWBoY.js";import{t as I}from"./use-analytics-data--opuzwcz.js";import{a as L,n as R,r as z,t as B}from"./kpi-card-fUHZlzBX.js";import{n as me,r as he,t as ge}from"./post-analytics-header-B-P0eFnT.js";import{t as _e}from"./gift-links-DLDS7ljO.js";import{r as ve,t as ye}from"./gift-link-modal-0mzjn5oF.js";import{n as be}from"./post-analytics-context-D0Mw-Pmv.js";import{t as xe}from"./use-post-referrers-CbXLFIex.js";import{a as V,o as H,r as U,t as W}from"./link-helpers-Dtq9fxQg.js";import{n as Se,r as G}from"./kpi-helpers-DB3ouhYF.js";var K=e(t(),1),q=n(),Ce=({post:e,isNewsletterStatsLoading:t,isWebShown:n})=>{let{postId:r}=o(),i=s(),a=(0,K.useMemo)(()=>{let t=e.email?.opened_count||0,n=e.email?.email_count||0,r=e.count?.clicks||0;return{opened:t,clicked:r,openedRate:n>0?t/n:0,clickedRate:n>0?r/n:0,sent:n}},[e]),{data:d}=V({searchParams:{filter:`post_id:'${r}'`}}),f=(0,K.useMemo)(()=>U(d),[d]),p=[{datatype:`Clicked`,value:a.clickedRate,fill:`url(#gradientTeal)`,color:`var(--chart-teal)`},{datatype:`Opened`,value:a.openedRate,fill:`url(#gradientBlue)`,color:`var(--chart-blue)`}],m={percentage:{label:`Opened`},Average:{label:`Clicked`},"This newsletter":{label:`Opened`}},h=e.email_only||!n;return(0,q.jsxs)(C,{className:`group/datalist overflow-hidden ${h&&`col-span-2`}`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(b,{children:(0,q.jsxs)(S,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(g,{size:16,strokeWidth:1.5}),`Newsletter performance`]})}),(0,q.jsx)(v,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-300 group-hover/datalist:translate-x-0 group-hover/datalist:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>{i(`/posts/analytics/${r}/newsletter`)},children:`View more`})]}),t?(0,q.jsx)(x,{children:(0,q.jsx)(`div`,{className:`mx-auto flex min-h-[250px] items-center justify-center xl:size-full`,children:(0,q.jsx)(y,{})})}):(0,q.jsxs)(x,{className:`${h&&`grid grid-cols-2`}`,children:[(0,q.jsxs)(`div`,{className:`${h&&`border-r pr-6`}`,children:[(0,q.jsxs)(`div`,{className:`grid grid-cols-2 gap-6`,children:[(0,q.jsx)(F,{className:`group relative flex grow flex-row items-start justify-between gap-5 border-none px-0 pt-0`,children:(0,q.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,q.jsx)(N,{color:`var(--chart-blue)`,children:`Open rate`}),(0,q.jsx)(P,{value:l(a.openedRate)})]})}),(0,q.jsx)(F,{className:`group relative flex grow flex-row items-start justify-between gap-5 border-none px-0 pt-0`,children:(0,q.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,q.jsx)(N,{color:`var(--chart-teal)`,children:`Click rate`}),(0,q.jsx)(P,{value:l(a.clickedRate)})]})})]}),!h&&(0,q.jsx)(M,{}),(0,q.jsx)(`div`,{className:`mx-auto my-6 h-[240px]`,children:(0,q.jsx)(H,{className:`pointer-events-none aspect-square h-[240px]`,config:m,data:p,tooltip:!1})})]}),(0,q.jsxs)(`div`,{className:`${h&&`pl-6`}`,children:[!h&&(0,q.jsx)(M,{}),(0,q.jsxs)(`div`,{className:h?``:`pt-3`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 ${h?`pb-3`:`py-3`}`,children:[(0,q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Top clicked links in this email`}),(0,q.jsx)(u,{children:`Members`})]}),f.length>0?(0,q.jsx)(k,{className:``,children:(0,q.jsx)(D,{children:f.slice(0,h?10:5).map(e=>{let t=a.clicked>0?e.count/a.clicked:0;return(0,q.jsxs)(A,{children:[(0,q.jsx)(T,{style:{width:`${t?Math.round(t*100):0}%`}}),(0,q.jsx)(E,{children:(0,q.jsxs)(`div`,{className:`flex items-center space-x-2 overflow-hidden`,children:[(0,q.jsx)(ee,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),(0,q.jsx)(`a`,{className:`block truncate font-medium hover:underline`,href:e.link.to,rel:`noreferrer`,target:`_blank`,title:e.link.to,children:W(e.link.to,!0)})]})}),(0,q.jsxs)(O,{children:[(0,q.jsx)(w,{children:c(e.count||0)}),(0,q.jsx)(oe,{children:l(t)})]})]},e.link.link_id)})})}):(0,q.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`You have no links in your post.`})]})]})]})]})},we=({chartData:e,range:t,isLoading:n,visitors:r,sourcesData:i,isNewsletterShown:a=!0})=>{let{postId:l}=o(),d=s(),{site:f}=I(),p=f.url,m=f.icon,h=(0,K.useMemo)(()=>i?i.reduce((e,t)=>e+Number(t.visits||0),0):0,[i]);return(0,q.jsx)(q.Fragment,{children:(0,q.jsxs)(C,{className:`group/datalist overflow-hidden ${!a&&`col-span-2`}`,"data-testid":`web-performance`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(b,{children:(0,q.jsxs)(S,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(_,{size:16,strokeWidth:1.5}),`Web performance`]})}),(0,q.jsx)(v,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-300 group-hover/datalist:translate-x-0 group-hover/datalist:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>{d(`/posts/analytics/${l}/web`)},children:`View more`})]}),(0,q.jsxs)(x,{children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(F,{className:`group relative flex grow flex-row items-start justify-between gap-5 border-none px-0 pt-0`,"data-testid":`unique-visitors`,children:(0,q.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,q.jsx)(N,{color:`var(--chart-blue)`,children:`Unique visitors`}),(0,q.jsx)(P,{value:c(r)})]})}),(0,q.jsx)(M,{}),(0,q.jsx)(`div`,{className:`max-h-[288px] py-6 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:n?(0,q.jsx)(`div`,{className:`flex h-[16vw] min-h-[240px] items-center justify-center`,children:(0,q.jsx)(y,{})}):(0,q.jsx)(re,{className:`aspect-auto h-[240px] w-full`,color:`var(--chart-blue)`,data:e||[],id:`visitors`,range:t,syncId:`overview-charts`})})]}),a&&(0,q.jsxs)(`div`,{className:a?`border-t pt-3`:`-mt-3`,children:[(0,q.jsx)(`div`,{children:(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-3`,children:[(0,q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`How readers found this post`}),(0,q.jsx)(u,{children:`Visitors`})]})}),i&&i.length>0?(0,q.jsx)(G,{data:i,range:t,siteIcon:m,siteUrl:p,tableOnly:!0,topSourcesLimit:5,totalVisitors:h}):(0,q.jsx)(j,{className:`h-full py-10`,description:`Once someone visits this post, sources will show here`,title:`No visitors since you published this post`,children:(0,q.jsx)(_,{strokeWidth:1.5})})]})]})]})})},J=()=>{let e=s(),{statsConfig:t,isLoading:n}=I(),{post:o,isPostLoading:l,postId:u}=be(),{totals:g,isLoading:ee,currencySymbol:_}=xe(u),re=de(),w=fe(),oe=se(),T=ue(),E=ce(),D=me(o),{token:O,isLoading:k,error:A}=_e(u,{enabled:D}),{usage:j,loading:M,error:N}=ve({postUuid:o?.uuid,token:O,tokenLoading:k,tokenError:A,enabled:D}),[P,F]=(0,K.useState)(!1),V=(0,K.useMemo)(()=>o?.published_at?f(o.published_at):le.allTime.value,[o?.published_at]),{startDate:H,endDate:U,timezone:W}=m(V),G=(0,K.useMemo)(()=>{let e={site_uuid:t?.id||``,date_from:d(H),date_to:d(U),timezone:W,post_uuid:``};return!l&&o?.uuid?{...e,post_uuid:o.uuid}:e},[l,o,t?.id,H,U,W]),{data:J,loading:Te}=r({endpoint:`api_kpis`,statsConfig:t,params:G}),Ee=(0,K.useMemo)(()=>J?.length?J.reduce((e,t)=>{let n=Number(t.visits);return e+(isNaN(n)?0:n)},0):0,[J]),Y=Se.visits,De=ie(V,J||[],{fieldName:Y.dataKey}),Oe=ne(J||[],V,Y.dataKey,`sum`)?.map(e=>{let t=Number(e[Y.dataKey]);return{date:String(e.date),value:t,formattedValue:Y.formatter(t),label:Y.label}}),{data:ke,loading:Ae}=r({endpoint:`api_top_sources`,statsConfig:t,params:G}),je=n||ee||l||Te,Me=l||n||Te,X=a(o)&&w&&re,Z=!o?.email_only&&E,Q=oe,$=!!(D&&o&&E);return(0,K.useEffect)(()=>{!l&&o&&i(o)&&!E&&Q&&e(`/posts/analytics/${u}/growth`,{replace:!0})},[l,o,E,e,u,Q]),l?(0,q.jsx)(y,{}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(ge,{currentTab:`Overview`}),(0,q.jsx)(he,{children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-6 lg:grid lg:grid-cols-2`,children:[Z&&(0,q.jsx)(we,{chartData:Oe,isLoading:Me||je||Ae,isNewsletterShown:X,range:De,sourcesData:ke,visitors:Ee}),X&&(0,q.jsx)(Ce,{isNewsletterStatsLoading:l,isWebShown:Z,post:o}),(Q||$)&&(0,q.jsxs)(`div`,{className:`col-span-2 flex flex-col gap-6 lg:grid lg:grid-cols-3`,children:[Q&&(0,q.jsxs)(C,{className:`group overflow-hidden p-0 ${$?`lg:col-span-2`:`lg:col-span-3`}`,"data-testid":`growth`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(b,{children:(0,q.jsxs)(S,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(h,{size:16,strokeWidth:1.5}),`Growth`]})}),(0,q.jsx)(v,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-200 group-hover:translate-x-0 group-hover:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>{e(`/posts/analytics/${u}/growth`)},children:`View more`})]}),(0,q.jsx)(x,{className:`flex flex-col gap-6 px-0 md:grid md:grid-cols-3 md:items-stretch md:gap-0`,children:je?Array.from({length:3},(e,t)=>(0,q.jsxs)(`div`,{className:`h-[98px] gap-1 border-r px-6 py-5 last:border-r-0`,children:[(0,q.jsx)(ae,{className:`w-2/3`}),(0,q.jsx)(ae,{className:`h-7 w-12`})]},t)):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(B,{className:`grow gap-1 py-0`,children:[(0,q.jsx)(z,{children:`Free members`}),(0,q.jsx)(R,{children:(0,q.jsx)(L,{className:`text-[2.2rem]`,children:c(g?.free_members||0)})})]}),T&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(B,{className:`grow gap-1 py-0`,children:[(0,q.jsx)(z,{children:`Paid members`}),(0,q.jsx)(R,{children:(0,q.jsx)(L,{className:`text-[2.2rem]`,children:c(g?.paid_members||0)})})]}),(0,q.jsxs)(B,{className:`grow gap-1 py-0`,children:[(0,q.jsx)(z,{children:`MRR impact`}),(0,q.jsx)(R,{children:(0,q.jsxs)(L,{className:`text-[2.2rem]`,children:[_,c(p(g?.mrr||0))]})})]})]})]})})]}),$&&(0,q.jsxs)(C,{className:`group/datalist overflow-hidden ${Q?`lg:col-span-1`:`lg:col-span-3`}`,"data-testid":`gift-link-card`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(b,{children:(0,q.jsxs)(S,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(te,{size:16,strokeWidth:1.5}),`Gift link`]})}),(0,q.jsx)(v,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-300 group-hover/datalist:translate-x-0 group-hover/datalist:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>F(!0),children:`Share`})]}),!M&&!N&&(0,q.jsxs)(x,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Visitors`}),(0,q.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold`,"data-testid":`gift-link-card-visitors`,children:c(j?.visits??0)})]})]})]}),!Z&&!X&&!Q&&!$&&(0,q.jsx)(pe,{className:`col-span-2 py-20`})]})}),$&&(0,q.jsx)(ye,{open:P,postId:u,source:`gift-link-card`,onOpenChange:F},u)]})};export{J as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./use-tinybird-query-D2Aeoty5.js";import{f as i,g as a,s as o}from"./stats-B_YkF7bp.js";import{t as s}from"./posts-KY3aUhVV.js";import{o as c}from"./config-DOMQDZGZ.js";import{t as l}from"./analytics-53FOa2wq.js";import{a as u,t as d}from"./post-helpers-C5OQMBoi.js";import{a as f}from"./router-provider-CJC58zTy.js";import{c as p,f as m,l as h,p as g,s as _}from"./dist-Cb5RSHSg.js";import{r as v}from"./heading-CRZZ2FUe.js";import{a as y,n as b,s as x}from"./app-utils-D2Wp7ZSS.js";import{$ as S,$n as C,Dt as w,Nn as T,Ot as E,Y as ee,bt as D,g as O,ir as te,ln as ne,mn as k,nr as re,qt as A,r as ie,t as j,u as ae,wn as oe}from"./button-BshWPHvn.js";import{i as M,n as N,s as P,t as F}from"./chart-helpers-B3OqQ6Ez.js";import{n as se,t as I}from"./skeleton-D7hwjdry.js";import{t as ce}from"./loading-indicator-SFTqyYVE.js";import{a as L,n as R,o as z,r as B,s as le,t as V}from"./card-CiiE7QfM.js";import{t as H}from"./empty-indicator-WB1WgT9h.js";import{t as ue}from"./use-host-limits-DZtR08oa.js";import{A as de,Ar as U,Fr as W,I as G,Mr as K,Or as q,T as fe,kr as pe,z as J}from"./index-CDP9tIOk.js";import{i as me,n as he,r as ge,t as _e}from"./stats-view-BOCp9RG8.js";import{t as ve}from"./use-growth-stats-BOmoPDHJ.js";import{n as ye,r as be,t as xe}from"./kpi-card-LERqWBoY.js";import{t as Y}from"./use-analytics-data--opuzwcz.js";import{n as Se}from"./audience-DTLMXAFH.js";import{n as Ce}from"./url-helpers-DcQbx-Xg.js";import{t as we}from"./get-site-timezone-HgL0jI_F.js";import{t as Te}from"./post-share-modal-P1_M6o-H.js";var X=e(t(),1),Ee=()=>{let{data:{posts:[e]}={posts:[]},isLoading:t}=s({searchParams:{filter:`status:[published,sent]`,order:`published_at DESC`,limit:`1`,include:`authors,email,count.clicks`}}),n=e,{data:r,isLoading:i}=o(n?.id||``,{enabled:!!n?.id});return{data:(0,X.useMemo)(()=>{if(!n)return null;let e=r?.stats?.[0]||{id:n.id,recipient_count:null,opened_count:null,open_rate:null,member_delta:0,free_members:0,paid_members:0,visitors:0};return{id:n.id,uuid:n.uuid,title:n.title||``,slug:n.slug||``,feature_image:n.feature_image||null,published_at:n.published_at||``,url:n.url||``,excerpt:n.excerpt||``,email_only:n.email_only||!1,status:n.status,email:n.email,count:n.count,authors:n.authors||[],recipient_count:e.recipient_count,opened_count:e.opened_count,open_rate:e.open_rate,member_delta:e.member_delta,free_members:e.free_members,paid_members:e.paid_members,visitors:e.visitors,click_rate:null}},[n,r]),isLoading:t||!!n?.id&&i}},Z=n(),De=e=>e.email_only?`Sent`:e.email?`Published and sent`:`Published`,Oe=({latestPostStats:e,isLoading:t})=>{let n=f(),[r,i]=(0,X.useState)(!1),{site:a,settings:o}=Y(),s=q(),c=pe(),u=W(),_=U()??!1;(0,X.useEffect)(()=>{r&&l(`Share Modal Opened`,{giftLinkShown:!1,source:`stats-overview`})},[r]);let v=a.title||String(o.find(e=>e.key===`title`)?.value||`Ghost Site`),y=we(o),b=e?d(e,{membersTrackSources:_}):null,x=`group mr-2 flex flex-col gap-1.5 hover:cursor-pointer`,S=!!e?.email,C=Ce({postId:e?.id,hasEmailData:S,analytics:{webAnalytics:u,membersTrackSources:_}}),w=C.startsWith(`/editor/`),T=fe(C);return(0,Z.jsxs)(V,{className:`group/card`,"data-testid":`latest-post`,children:[(0,Z.jsxs)(L,{children:[(0,Z.jsx)(z,{className:`flex items-baseline justify-between leading-snug font-medium text-muted-foreground`,children:`Latest post performance`}),(0,Z.jsx)(B,{className:`hidden`,children:`How your last post did`})]}),(0,Z.jsxs)(R,{className:`flex flex-col gap-6 px-0 lg:flex-row xl:grid xl:grid-cols-3`,children:[t&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`flex w-full items-center gap-6 px-6 xl:col-span-2`,children:[(0,Z.jsx)(`div`,{className:`w-full max-w-[232px] grow`,children:(0,Z.jsx)(I,{className:`aspect-[16/10] rounded-md`})}),(0,Z.jsxs)(`div`,{className:`w-full grow`,children:[(0,Z.jsx)(I,{className:`w-full max-w-[420px]`}),(0,Z.jsx)(I,{className:`w-1/2`})]})]}),(0,Z.jsx)(`div`,{className:`flex flex-col items-stretch gap-2 px-6`,children:(0,Z.jsxs)(`div`,{className:`grid grid-cols-2 gap-5`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(I,{className:`w-3/4`}),(0,Z.jsx)(I,{className:`h-10 w-1/3`})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(I,{className:`w-3/4`}),(0,Z.jsx)(I,{className:`h-10 w-1/3`})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(I,{className:`w-3/4`}),(0,Z.jsx)(I,{className:`h-10 w-1/3`})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(I,{className:`w-3/4`}),(0,Z.jsx)(I,{className:`h-10 w-1/3`})]})]})})]}),!t&&e&&b?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`flex flex-col gap-6 px-6 transition-all md:flex-row md:items-start xl:col-span-2`,children:[e.feature_image&&(0,Z.jsx)(`div`,{className:`aspect-[16/10] w-full min-w-[100px] rounded-sm bg-cover bg-center sm:max-w-[170px] lg:max-w-[170px] xl:max-w-[232px]`,style:{backgroundImage:`url(${e.feature_image})`}}),(0,Z.jsxs)(`div`,{className:`flex grow flex-col items-start justify-center self-stretch`,children:[(0,Z.jsx)(`div`,{className:`text-md leading-tighter font-semibold tracking-tight hover:cursor-pointer hover:opacity-75`,onClick:()=>{!t&&e&&n(C,{crossApp:T})},children:e.title}),(0,Z.jsxs)(`div`,{className:`mt-1 text-muted-foreground`,children:[e.authors&&e.authors.length>0&&(0,Z.jsxs)(`div`,{children:[`By `,e.authors.map(e=>e.name).join(`, `),` –`,` `,h(e.published_at,y)]}),(0,Z.jsx)(`div`,{className:`mt-0.5`,children:De(e)})]}),(0,Z.jsxs)(`div`,{className:`mt-6 flex items-center gap-2`,children:[!e.email_only&&(0,Z.jsx)(Te,{author:e.authors?.map(e=>e.name).join(`, `)||``,description:``,faviconURL:a.icon||``,featureImageURL:e.feature_image||``,open:r,postExcerpt:e.excerpt||``,postTitle:e.title,postURL:e.url||``,siteTitle:v,onClose:()=>i(!1),onOpenChange:i,children:(0,Z.jsxs)(j,{onClick:()=>i(!0),children:[(0,Z.jsx)(ee,{}),` Share post`]})}),(0,Z.jsx)(j,{className:e.email_only?`w-full`:``,variant:`outline`,onClick:()=>{n(C,{crossApp:T})},children:w?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(D,{}),(0,Z.jsx)(`span`,{className:`hidden md:visible! md:block!`,children:`Edit post`})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(re,{}),(0,Z.jsx)(`span`,{className:`hidden md:visible! md:block!`,children:e.email_only?`Post analytics`:`Analytics`})]})})]})]})]}),(0,Z.jsx)(`div`,{className:`-ml-4 flex w-full flex-col items-stretch gap-2 pr-6 xl:h-full xl:max-w-none`,children:(0,Z.jsxs)(`div`,{className:`grid grid-cols-2 gap-6 pl-10 lg:border-l xl:h-full`,children:[b.showWebMetrics&&u&&(0,Z.jsxs)(`div`,{className:x,"data-testid":`latest-post-visitors`,onClick:()=>{n(`/posts/analytics/${e.id}/web`)},children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-muted-foreground transition-all group-hover:text-foreground`,children:[(0,Z.jsx)(k,{size:16,strokeWidth:1.25}),(0,Z.jsx)(`span`,{className:`hidden md:visible! md:block!`,children:`Visitors`})]}),(0,Z.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold tracking-tighter`,children:m(e.visitors)})]}),b.showMemberGrowth&&(0,Z.jsxs)(`div`,{className:p(x,b.showEmailMetrics&&(!b.showWebMetrics||!u)&&`col-[1/2] row-[2/3]`),"data-testid":`latest-post-members`,onClick:()=>{n(`/posts/analytics/${e.id}/growth`)},children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-muted-foreground transition-all group-hover:text-foreground`,children:[(0,Z.jsx)(O,{size:16,strokeWidth:1.25}),(0,Z.jsx)(`span`,{className:`hidden md:visible! md:block!`,children:`Members`})]}),(0,Z.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold tracking-tighter`,children:e.member_delta?(0,Z.jsxs)(Z.Fragment,{children:[`+`,m(e.member_delta)]}):0})]}),b.showEmailMetrics&&e.email&&(0,Z.jsxs)(Z.Fragment,{children:[c&&(0,Z.jsxs)(`div`,{className:x,onClick:()=>{n(`/posts/analytics/${e.id}/newsletter`)},children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-muted-foreground transition-all group-hover:text-foreground`,children:[(0,Z.jsx)(A,{size:16,strokeWidth:1.25}),(0,Z.jsx)(`span`,{className:`hidden whitespace-nowrap md:visible! md:block!`,children:`Opens`})]}),(0,Z.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold tracking-tighter`,children:e.email.email_count?g((e.email.opened_count||0)/e.email.email_count):`0%`})]}),s&&(0,Z.jsxs)(`div`,{className:x,onClick:()=>{n(`/posts/analytics/${e.id}/newsletter`)},children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-muted-foreground transition-all group-hover:text-foreground`,children:[(0,Z.jsx)(E,{size:16,strokeWidth:1.25}),(0,Z.jsx)(`span`,{className:`hidden whitespace-nowrap md:visible! md:block!`,children:`Clicks`})]}),(0,Z.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold tracking-tighter`,children:e.email.email_count&&e.count?.clicks?g((e.count.clicks||0)/e.email.email_count):`0%`})]})]})]})})]}):!t&&(0,Z.jsx)(H,{actions:(0,Z.jsx)(j,{variant:`secondary`,onClick:()=>{n(`/editor/post`,{crossApp:!0})},children:`New post`}),className:`w-full pb-10 xl:col-span-3`,description:`Once it's live, you can track performance here`,title:`Publish your first post`,children:(0,Z.jsx)(oe,{strokeWidth:1.5})})]})]})},Q=({title:e,iconName:t,description:n,color:r,diffDirection:i,diffValue:a,formattedValue:o,trendingFromValue:s,children:c,onClick:l})=>{let{range:u}=J(),d=t&&ie[t],f=X.useMemo(()=>{if(!i||i===`empty`||u===G.allTime.value||!a)return``;let e=i===`up`?`up`:i===`down`?`down`:`at`,t=N(u).replace(`in the `,``).replace(/^\(|\)$/g,``);return i===`same`?(0,Z.jsxs)(`span`,{children:[`You're trending at the same level as`,` `,(0,Z.jsx)(`span`,{className:`font-semibold`,children:o}),` compared to the`,` `,(0,Z.jsx)(`span`,{className:`font-semibold`,children:t})]}):(0,Z.jsxs)(`span`,{children:[`You're trending`,` `,(0,Z.jsxs)(`span`,{className:`font-semibold`,children:[e,` `,a]}),` `,`from `,(0,Z.jsx)(`span`,{className:`font-semibold`,children:s}),` compared to the`,` `,t]})},[i,a,s,o,u]);return(0,Z.jsxs)(V,{className:`group`,"data-testid":e,children:[(0,Z.jsxs)(L,{className:`hidden`,children:[(0,Z.jsx)(z,{children:e}),(0,Z.jsx)(B,{children:n})]}),(0,Z.jsxs)(xe,{className:`relative flex grow flex-row items-start justify-between gap-5 border-none pb-2 xl:pb-4`,children:[(0,Z.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,Z.jsxs)(ye,{className:l&&`transition-all group-hover:text-foreground`,children:[r&&(0,Z.jsx)(`span`,{className:`inline-block size-2 rounded-full opacity-50`,style:{backgroundColor:r}}),d&&(0,Z.jsx)(d,{size:16,strokeWidth:1.5}),e]}),(0,Z.jsx)(be,{diffDirection:u===G.allTime.value?`hidden`:i,diffTooltip:f,diffValue:a,value:o})]}),l&&(0,Z.jsx)(j,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-200 group-hover:translate-x-0 group-hover:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:l,children:`View more`})]}),(0,Z.jsx)(R,{children:c})]})},ke=({kpiValues:e,visitorsChartData:t,visitorsChartRange:n,visitorsYRange:r,growthTotals:i,membersChartData:a,mrrChartData:o,growthChartRange:s,currencySymbol:l,isLoading:u})=>{let d=f(),p=W(),h=K(),g=ue(),{config:_}=Y(),v=g?.limitAnalytics?.disabled===!0,y=`-mb-3 h-[10vw] max-h-[200px] min-h-[100px] hover:cursor-pointer!`;if(u)return(0,Z.jsx)(le,{className:`flex h-[calc(10vw+116px)] max-h-[416px] min-h-20 items-center justify-center hover:cursor-pointer!`,children:(0,Z.jsx)(ce,{})});let x=p,S=v&&!x,w=h,T=[x,S,!0,w].filter(Boolean).length,E=`lg:grid-cols-3`;return T===2?E=`lg:grid-cols-2`:T===1&&(E=`lg:grid-cols-1`),(0,Z.jsxs)(`div`,{className:`flex flex-col lg:grid ${E} gap-6`,children:[x&&!S&&(0,Z.jsx)(Q,{description:`Number of individual people who visited your website`,diffDirection:`empty`,formattedValue:e.visits,iconName:`Globe`,linkto:`/analytics/web/`,title:`Unique visitors`,onClick:()=>{d(`/analytics/web/`)},children:(0,Z.jsx)(P,{className:y,color:`var(--chart-blue)`,data:t,id:`visitors`,range:n,showHorizontalLines:!0,showYAxisValues:!1,syncId:`overview-charts`,yAxisRange:r})}),S&&(0,Z.jsxs)(V,{children:[(0,Z.jsxs)(L,{className:`hidden`,children:[(0,Z.jsx)(z,{children:`Unlock web analytics`}),(0,Z.jsx)(B,{children:`Get the full picture of what's working with detailed, cookie-free traffic analytics.`})]}),(0,Z.jsx)(R,{className:`flex h-full items-center justify-center p-6`,children:(0,Z.jsx)(H,{actions:(0,Z.jsx)(j,{variant:`outline`,onClick:()=>d(c(_),{crossApp:!0}),children:`Upgrade now`}),className:`py-10`,description:`Get the full picture of what's working with detailed, cookie-free traffic analytics.`,title:`Unlock web analytics`,children:(0,Z.jsx)(C,{})})})]}),(0,Z.jsx)(Q,{description:`How number of members of your publication changed over time`,diffDirection:i.directions.total,diffValue:i.percentChanges.total,formattedValue:m(i.totalMembers),iconName:`User`,linkto:`/analytics/growth/`,title:`Members`,trendingFromValue:`${m(a[0]?.value??0)}`,onClick:()=>{d(`/analytics/growth/?tab=total-members`)},children:(0,Z.jsx)(P,{className:y,color:`var(--chart-darkblue)`,data:a,id:`members`,range:s,showHorizontalLines:!0,showYAxisValues:!1,syncId:`overview-charts`})}),w&&(0,Z.jsx)(Q,{description:`Monthly recurring revenue changes over time`,diffDirection:i.directions.mrr,diffValue:i.percentChanges.mrr,formattedValue:`${l}${m(b(i.mrr))}`,iconName:`Coins`,linkto:`/analytics/growth/`,title:`MRR`,trendingFromValue:`${l}${m(o[0]?.value??0)}`,onClick:()=>{d(`/analytics/growth/?tab=mrr`)},children:(0,Z.jsx)(P,{className:y,color:`var(--chart-teal)`,data:o,id:`mrr`,range:s,showHorizontalLines:!0,showYAxisValues:!1,syncId:`overview-charts`})})]})},Ae=({className:e})=>(0,Z.jsx)(`div`,{className:p(`flex flex-col items-center justify-center gap-1 rounded-sm bg-muted p-6 dark:bg-surface-elevated-2`,e),children:(0,Z.jsx)(ne,{className:`text-muted-foreground/50`,size:18,strokeWidth:1.5})}),$=({className:e,metrics:t,title:n})=>(0,Z.jsx)(Z.Fragment,{children:(0,Z.jsxs)(`div`,{className:p(`pointer-events-none absolute bottom-[calc(100%+2px)] left-1/2 z-50 min-w-[160px] -translate-x-1/2 rounded-md bg-background p-3 text-sm opacity-0 shadow-md transition-all group-hover/tooltip:bottom-[calc(100%+12px)] group-hover/tooltip:opacity-100`,e),children:[(0,Z.jsx)(`div`,{className:`mb-1.5 border-b pr-10 pb-1.5 font-medium whitespace-nowrap text-muted-foreground`,children:n}),(0,Z.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:t?.map(e=>(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-5`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-1.5 whitespace-nowrap`,children:[e.icon,e.label]}),(0,Z.jsx)(`span`,{className:`font-mono`,children:e.metric})]},e.label))})]})}),je=({topPostsData:e,isLoading:t})=>{let n=f(),{range:r}=J(),{settings:i}=Y(),a=K(),o=we(i),s=W(),c=U()??!1,l=q()??!1,d=pe()??!1,p=`flex items-center justify-end gap-1 rounded-md px-2 py-1 font-mono text-gray-800 hover:bg-muted-foreground/10 group-hover:text-foreground`;return(0,Z.jsxs)(V,{className:`group/card w-full lg:col-span-2`,"data-testid":`top-posts-card`,children:[(0,Z.jsxs)(L,{children:[(0,Z.jsxs)(z,{className:`flex items-baseline justify-between leading-snug font-medium text-muted-foreground`,children:[`Top posts `,N(r)]}),(0,Z.jsx)(B,{className:`hidden`,children:`Most viewed posts in this period`})]}),(0,Z.jsx)(R,{children:t?(0,Z.jsx)(se,{className:`mt-6`}):(0,Z.jsxs)(Z.Fragment,{children:[e?.stats?.map(e=>(0,Z.jsxs)(`div`,{className:`group relative flex w-full items-start justify-between gap-5 border-t border-border/50 py-4 before:absolute before:-inset-x-4 before:inset-y-0 before:z-0 before:hidden before:rounded-md before:bg-table-row-hover before:content-[""] first:border-border! hover:cursor-pointer hover:border-transparent hover:before:block md:items-center [&+div]:hover:border-transparent`,children:[(0,Z.jsxs)(`div`,{className:`z-10 flex min-w-[160px] grow items-start gap-4 md:items-center lg:min-w-[320px]`,onClick:()=>{let t=Ce({postId:e.post_id,hasEmailData:e.sent_count!==null,analytics:{webAnalytics:s,membersTrackSources:c}});n(t,{crossApp:t.startsWith(`/editor/`)})},children:[e.feature_image?(0,Z.jsx)(`div`,{className:`hidden aspect-[16/10] w-[80px] shrink-0 rounded-sm bg-cover bg-center sm:visible! sm:block! lg:w-[100px]`,style:{backgroundImage:`url(${e.feature_image})`}}):(0,Z.jsx)(Ae,{className:`hidden aspect-[16/10] w-[80px] shrink-0 group-hover:bg-muted-foreground/10 sm:visible! sm:flex! lg:w-[100px]`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Z.jsx)(`span`,{className:`line-clamp-2 text-md font-semibold`,children:e.title}),(0,Z.jsxs)(`span`,{className:`text text-muted-foreground`,children:[`By `,e.authors,` –`,` `,h(e.published_at,o)]}),(0,Z.jsx)(`span`,{className:`text text-muted-foreground`,children:u(e)})]})]}),(0,Z.jsxs)(`div`,{className:`z-10 flex flex-col items-end justify-center gap-0.5 text-sm md:flex-row md:items-center md:justify-end md:gap-3`,children:[s&&(0,Z.jsxs)(`div`,{className:`group/tooltip relative flex w-[66px] lg:w-[92px]`,"data-testid":`statistics-visitors`,onClick:t=>{t.stopPropagation(),n(`/posts/analytics/${e.post_id}/web`)},children:[(0,Z.jsx)($,{metrics:[{icon:(0,Z.jsx)(k,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Unique visitors`,metric:m(e.views)}],title:`Web traffic`}),(0,Z.jsxs)(`div`,{className:p,children:[(0,Z.jsx)(k,{className:`text-muted-foreground group-hover:text-foreground`,size:16,strokeWidth:1.5}),_(e.views)]})]}),e.sent_count!==null&&(0,Z.jsxs)(`div`,{className:`group/tooltip relative flex w-[66px] lg:w-[92px]`,onClick:t=>{t.stopPropagation(),n(`/posts/analytics/${e.post_id}/newsletter`)},children:[(0,Z.jsx)($,{className:`${c?``:`right-0 left-auto translate-x-0`}`,metrics:[{icon:(0,Z.jsx)(S,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Sent`,metric:m(e.sent_count||0)},...d?[{icon:(0,Z.jsx)(A,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Opens`,metric:m(e.opened_count||0)}]:[],...l?[{icon:(0,Z.jsx)(w,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Clicks`,metric:m(e.clicked_count||0)}]:[]],title:`Newsletter performance`}),(0,Z.jsx)(`div`,{className:p,children:d?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(A,{className:`text-muted-foreground group-hover:text-foreground`,size:16,strokeWidth:1.5}),e.open_rate?`${Math.round(e.open_rate)}%`:`0%`]}):l?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(w,{className:`text-muted-foreground group-hover:text-foreground`,size:16,strokeWidth:1.5}),e.click_rate?`${Math.round(e.click_rate)}%`:`0%`]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(S,{className:`text-muted-foreground group-hover:text-foreground`,size:16,strokeWidth:1.5}),_(e.sent_count||0)]})})]}),c&&(0,Z.jsxs)(`div`,{className:`group/tooltip relative flex w-[66px] lg:w-[92px]`,"data-testid":`statistics-members`,onClick:t=>{t.stopPropagation(),n(`/posts/analytics/${e.post_id}/growth`)},children:[(0,Z.jsx)($,{className:`right-0 left-auto translate-x-0`,metrics:[{icon:(0,Z.jsx)(ae,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Free`,metric:e.free_members>0?`+${m(e.free_members)}`:`0`},...a?[{icon:(0,Z.jsx)(T,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),label:`Paid`,metric:e.paid_members>0?`+${m(e.paid_members)}`:`0`}]:[]],title:`New members`}),(0,Z.jsxs)(`div`,{className:p,children:[(0,Z.jsx)(O,{className:`text-muted-foreground group-hover:text-foreground`,size:16,strokeWidth:1.5}),e.members>0?`+${m(e.members)}`:`0`]})]})]})]},e.post_id)),(!e?.stats||e.stats.length===0)&&(0,Z.jsx)(H,{className:`w-full pb-10`,title:`No posts ${N(r)}`,children:(0,Z.jsx)(oe,{strokeWidth:1.5})})]})})]})},Me=({className:e,title:t,description:n,url:r,children:i})=>(0,Z.jsx)(`a`,{className:p(`group/card block rounded-xl border bg-card p-6 transition-all hover:bg-table-row-hover hover:shadow-xs`,e),href:r,rel:`noreferrer`,target:`_blank`,children:(0,Z.jsxs)(`div`,{className:`flex items-center gap-6`,children:[i,(0,Z.jsxs)(`div`,{className:`flex flex-col gap-0.5 leading-tight`,children:[(0,Z.jsx)(`span`,{className:`text-base font-semibold`,children:t}),(0,Z.jsx)(`span`,{className:`text-sm font-normal text-gray-700`,children:n})]})]})}),Ne=()=>{let e=K(),{range:t}=J(),{statsConfig:n,isLoading:o}=Y(),{startDate:s,endDate:c,timezone:l}=x(t),{isLoading:u,chartData:d,totals:f,currencySymbol:p}=ve(t),{data:h,isLoading:g}=Ee(),{data:_,isLoading:S}=i({searchParams:{date_from:y(s),date_to:y(c),limit:`5`,timezone:l}}),{data:C,loading:w}=r({endpoint:`api_kpis`,statsConfig:n,params:{site_uuid:n?.id||``,date_from:y(s),date_to:y(c),timezone:l,member_status:Se(de)}}),T=(0,X.useMemo)(()=>M(C||[],t,`visits`,`sum`)?.map(e=>{let t=Number(e.visits),n=isNaN(t)?0:t;return{date:String(e.date),value:n,formattedValue:m(n),label:`Visitors`}}),[C,t]),E=(0,X.useMemo)(()=>F(t,C||[],{fieldName:`visits`}),[C,t]),ee=(0,X.useMemo)(()=>{let e=[0,1];if(!T||T.length===0)return e;let t=T.map(e=>e.value).filter(e=>e>=0);return t.length===0?e:[0,Math.max(...t)||e[1]]},[T]),D=(0,X.useMemo)(()=>F(t,d||[]),[d,t]),O=(0,X.useMemo)(()=>{if(!d||d.length===0)return[];let e=[];return e=M(d,t,`value`,`exact`),e.map(e=>({date:e.date,value:e.free+e.paid,formattedValue:m(e.free+e.paid),label:`Members`}))},[d,t]),ne=(0,X.useMemo)(()=>{if(!e||!d||d.length===0)return[];let n=[];return n=M(d,t,`mrr`,`exact`),n.map(e=>({date:e.date,value:b(e.mrr),formattedValue:`${p}${m(b(e.mrr))}`,label:`MRR`}))},[d,t,p,e]),re=(0,X.useMemo)(()=>C?.length?{visits:m(C.reduce((e,t)=>{let n=Number(t.visits);return e+(isNaN(n)?0:n)},0))}:{visits:`0`},[C]);return(0,Z.jsxs)(he,{children:[(0,Z.jsx)(ge,{children:(0,Z.jsx)(a,{children:(0,Z.jsx)(me,{excludeRanges:[`today`]})})}),(0,Z.jsxs)(_e,{isLoading:o,loadingComponent:(0,Z.jsx)(Z.Fragment,{}),children:[(0,Z.jsx)(ke,{currencySymbol:p,growthChartRange:D,growthTotals:f,isLoading:w||u,kpiValues:re,membersChartData:O,mrrChartData:ne,visitorsChartData:T,visitorsChartRange:E,visitorsYRange:ee}),(0,Z.jsx)(Oe,{isLoading:g,latestPostStats:h}),(0,Z.jsx)(je,{isLoading:S,topPostsData:_}),(0,Z.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 lg:grid-cols-2`,children:[(0,Z.jsx)(v,{className:`mt-4 -mb-4 lg:col-span-2`,children:`Grow your audience`}),(0,Z.jsx)(Me,{description:`Find out how to review the performance of your content and get the most out of post analytics in Ghost.`,title:`Understanding analytics in Ghost`,url:`https://ghost.org/help/native-analytics`,children:(0,Z.jsx)(`div`,{className:`flex h-18 w-[100px] min-w-[100px] items-center justify-center rounded-md bg-gradient-to-tr from-[#14B8FF]/20 to-[#00BBA7]/20 p-4 opacity-80 transition-all group-hover/card:opacity-100`,children:(0,Z.jsx)(te,{className:`text-[#00BBA7]`,size:20,strokeWidth:1.5})})}),(0,Z.jsx)(Me,{description:`Use these content distribution tactics to get more people to discover your work and increase engagement.`,title:`How to get your content seen online`,url:`https://ghost.org/resources/content-distribution/`,children:(0,Z.jsx)(`div`,{className:`flex h-18 w-[100px] min-w-[100px] items-center justify-center rounded-md bg-gradient-to-tl from-[#FDC700]/20 to-[#FF2056]/20 p-4 opacity-80 transition-all group-hover/card:opacity-100`,children:(0,Z.jsx)(k,{className:`text-[#FE9A00]`,size:20,strokeWidth:1.5})})})]})]})]})};export{Ne as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e,t}from"./hooks-CuEZV2-q.js";var n=`PagesResponseType`,r=e({dataType:n,path:`/pages/`}),i=t({dataType:n,path:`/pages/`,defaultNextPageParams:(e,t)=>{if(e.meta?.pagination.next)return{...t,page:e.meta.pagination.next.toString()}},returnData:e=>{let{pages:t}=e,n=t.flatMap(e=>e.pages),r=t[t.length-1].meta;return{pages:n,meta:r,isEnd:r?r.pagination.pages===r.pagination.page:!0}}});export{i as n,r as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{i as r,n as i,r as a,t as o}from"./Combination-gnJO3vIw.js";import{a as s,c,n as l}from"./dist-Cb5RSHSg.js";import{d as u,f as d,g as f,h as p,l as m,m as h,p as g,t as _,u as v,v as y,x as b,y as ee}from"./shade-app-F7WxOyfk-nufqw1hd.js";import{a as x,r as S}from"./dist-DzcfoDJ3.js";import{t as C}from"./overlay-escape-C7XYQuvP.js";var w=e(t(),1),T=n(),E=`Popover`,[D,te]=x(E,[f]),O=f(),[k,A]=D(E),j=e=>{let{__scopePopover:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!1}=e,s=O(t),c=w.useRef(null),[l,u]=w.useState(!1),[d,f]=m({prop:r,defaultProp:i??!1,onChange:a,caller:E});return(0,T.jsx)(p,{...s,children:(0,T.jsx)(k,{scope:t,contentId:y(),triggerRef:c,open:d,onOpenChange:f,onOpenToggle:w.useCallback(()=>f(e=>!e),[f]),hasCustomAnchor:l,onCustomAnchorAdd:w.useCallback(()=>u(!0),[]),onCustomAnchorRemove:w.useCallback(()=>u(!1),[]),modal:o,children:n})})};j.displayName=E;var M=`PopoverAnchor`,N=w.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=A(M,n),a=O(n),{onCustomAnchorAdd:o,onCustomAnchorRemove:s}=i;return w.useEffect(()=>(o(),()=>s()),[o,s]),(0,T.jsx)(d,{...a,...r,ref:t})});N.displayName=M;var P=`PopoverTrigger`,F=w.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=A(P,n),a=O(n),o=s(t,i.triggerRef),c=(0,T.jsx)(S.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":Y(i.open),...r,ref:o,onClick:b(e.onClick,i.onOpenToggle)});return i.hasCustomAnchor?c:(0,T.jsx)(d,{asChild:!0,...a,children:c})});F.displayName=P;var I=`PopoverPortal`,[ne,L]=D(I,{forceMount:void 0}),R=e=>{let{__scopePopover:t,forceMount:n,children:r,container:i}=e,a=A(I,t);return(0,T.jsx)(ne,{scope:t,forceMount:n,children:(0,T.jsx)(v,{present:n||a.open,children:(0,T.jsx)(u,{asChild:!0,container:i,children:r})})})};R.displayName=I;var z=`PopoverContent`,B=w.forwardRef((e,t)=>{let n=L(z,e.__scopePopover),{forceMount:r=n.forceMount,...i}=e,a=A(z,e.__scopePopover);return(0,T.jsx)(v,{present:r||a.open,children:a.modal?(0,T.jsx)(H,{...i,ref:t}):(0,T.jsx)(U,{...i,ref:t})})});B.displayName=z;var V=l(`PopoverContent.RemoveScroll`),H=w.forwardRef((e,t)=>{let n=A(z,e.__scopePopover),r=w.useRef(null),a=s(t,r),c=w.useRef(!1);return w.useEffect(()=>{let e=r.current;if(e)return i(e)},[]),(0,T.jsx)(o,{as:V,allowPinchZoom:!0,children:(0,T.jsx)(W,{...e,ref:a,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:b(e.onCloseAutoFocus,e=>{e.preventDefault(),c.current||n.triggerRef.current?.focus()}),onPointerDownOutside:b(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;c.current=r},{checkForDefaultPrevented:!1}),onFocusOutside:b(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1})})})}),U=w.forwardRef((e,t)=>{let n=A(z,e.__scopePopover),r=w.useRef(!1),i=w.useRef(!1);return(0,T.jsx)(W,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),W=w.forwardRef((e,t)=>{let{__scopePopover:n,trapFocus:i,onOpenAutoFocus:o,onCloseAutoFocus:s,disableOutsidePointerEvents:c,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,...p}=e,m=A(z,n),g=O(n);return r(),(0,T.jsx)(a,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:o,onUnmountAutoFocus:s,children:(0,T.jsx)(ee,{asChild:!0,disableOutsidePointerEvents:c,onInteractOutside:f,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onDismiss:()=>m.onOpenChange(!1),deferPointerDownOutside:!0,children:(0,T.jsx)(h,{"data-state":Y(m.open),role:`dialog`,id:m.contentId,...g,...p,ref:t,style:{...p.style,"--radix-popover-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-popover-content-available-width":`var(--radix-popper-available-width)`,"--radix-popover-content-available-height":`var(--radix-popper-available-height)`,"--radix-popover-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-popover-trigger-height":`var(--radix-popper-anchor-height)`}})})})}),G=`PopoverClose`,K=w.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=A(G,n);return(0,T.jsx)(S.button,{type:`button`,...r,ref:t,onClick:b(e.onClick,()=>i.onOpenChange(!1))})});K.displayName=G;var q=`PopoverArrow`,J=w.forwardRef((e,t)=>{let{__scopePopover:n,...r}=e,i=O(n);return(0,T.jsx)(g,{...i,...r,ref:t})});J.displayName=q;function Y(e){return e?`open`:`closed`}var X=j,Z=F,re=R,Q=B,ie=K,ae=X,oe=Z,se=ie,$=w.forwardRef(({className:e,align:t=`center`,onEscapeKeyDown:n,sideOffset:r=4,...i},a)=>(0,T.jsx)(re,{children:(0,T.jsx)(`div`,{className:_,children:(0,T.jsx)(Q,{ref:a,align:t,className:c(`z-50 origin-(--radix-popover-content-transform-origin) rounded-md border border-border/60 bg-surface-elevated-2 p-5 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-border/30`,e),sideOffset:r,onEscapeKeyDown:e=>C(e,n),...i})})}));$.displayName=Q.displayName;export{oe as i,se as n,$ as r,ae as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./inline-Cw-gigDW.js";import{n as i}from"./loading-indicator-SFTqyYVE.js";var a=e(t(),1),o=n(),s=({href:e,onDestroyed:t,selectedTab:n,portalParent:s})=>{n||=`signup`;let c=(0,a.useRef)(null),[l,u]=(0,a.useState)(!1),[d,f]=(0,a.useState)(!0),p=(0,a.useCallback)(()=>{setTimeout(()=>{c.current&&f(!1)},300)},[c]);if((0,a.useEffect)(()=>{let n=t=>{e&&new URL(t.origin).origin===new URL(e).origin&&t.data?.type===`portal-preview-ready`&&p()};return window.addEventListener(`message`,n,!0),()=>{window.removeEventListener(`message`,n,!0),t?.()}},[e,t,p,l]),!e)return null;let m=`mt-[-7%] flex h-screen items-center justify-center`,h=`hidden`;return s===`preview`?(m=`pointer-events-none absolute inset-0 z-50`,h=`invisible`):s===`offers`&&(m=`absolute inset-0 z-50`,h=`invisible`),(0,o.jsxs)(o.Fragment,{children:[d&&(0,o.jsx)(r,{align:`center`,className:m,justify:`center`,children:(0,o.jsx)(i,{size:`lg`})}),(0,o.jsx)(`iframe`,{ref:c,className:!d&&l?``:h,"data-testid":`portal-preview`,height:`100%`,src:e,title:`Portal Preview`,width:`100%`,onLoad:()=>{u(!0)}})]})};export{s as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{n as r,p as i}from"./hooks-CuEZV2-q.js";import{t as a}from"./use-form-vRjI0Kwk.js";import{f as o}from"./dist-Cb5RSHSg.js";import{t as s}from"./grid-CUciBfjf.js";import{t as c}from"./inline-Cw-gigDW.js";import{t as l}from"./stack-CIfOAAVf.js";import{t as u}from"./text-DU9Hv33_.js";import{s as d}from"./shade-app-F7WxOyfk-nufqw1hd.js";import{D as f,t as p,v as m}from"./button-BshWPHvn.js";import{i as h,n as g,r as _,t as v}from"./tabs-CGisSbWq.js";import{t as y}from"./switch-C9djUIMO.js";import{t as b}from"./input-UHrKuvBT.js";import{i as x,n as S,o as C,s as w,t as T}from"./select-D_RQaXgt.js";import{t as E}from"./use-settings-navigation-BBzro2-V.js";import{t as D}from"./checkbox-Dwwr_3Py.js";import{a as O,i as k,n as A,o as j,r as M,t as N}from"./copy-field-CglgRZyG.js";import{a as P,c as F,i as I,n as L,o as R,r as z,s as B,t as V}from"./field-LmNk7wZh.js";import{n as ee,t as te}from"./toggle-group-CtKZURJd.js";import{Dr as ne,Mr as re,Pn as ie,Sr as H,_n as ae,br as U,gn as W,t as oe,vn as se,xr as G}from"./index-CDP9tIOk.js";import{a as ce,c as le,i as ue,n as de,o as fe,r as pe,s as me,t as he}from"./images-C0XvUYMb.js";import{a as K,o as ge,r as q}from"./tiers-Nd_z4BZY.js";import{t as _e}from"./modal-page-BMTzFHVO.js";import{t as ve}from"./validator-Cr0sMKuW.js";import{n as ye}from"./confirmation-context-CLFHhyyH.js";import{n as J}from"./global-data-context-gAMDH9u1.js";import{t as be}from"./brand-icon-09YqFZjV.js";import{t as xe}from"./html-field-BegxsWpw.js";import{t as Se}from"./preview-modal-MlTjP8UU.js";import{t as Ce}from"./portal-frame-DjBF-uy2.js";import{t as we}from"./use-query-params-BfzuqbcD.js";var Y=e(t(),1),X=n(),Te=({localSettings:e,settingKey:t,updateSetting:n})=>{if(!oe(`giftSubCustomization`)||!e.some(e=>e.key===t))return null;let r=t.replaceAll(`_`,`-`);return(0,X.jsxs)(V,{orientation:`horizontal`,children:[(0,X.jsx)(R,{htmlFor:r,children:`Display option to purchase gift`}),(0,X.jsx)(y,{checked:!!G(e,t),id:r,onCheckedChange:e=>n(t,e)})]})},Ee=({localSettings:e,updateSetting:t})=>{let[n,r,i,a,o,s]=H(e,[`transistor`,`transistor_portal_enabled`,`transistor_portal_heading`,`transistor_portal_description`,`transistor_portal_button_text`,`transistor_portal_url_template`]);if(n!==!0)return null;let c=r===!0;return(0,X.jsxs)(l,{gap:`xl`,children:[(0,X.jsx)(ie,{}),(0,X.jsxs)(l,{gap:`md`,children:[(0,X.jsx)(u,{as:`h5`,className:`md:text-lg`,leading:`supertight`,weight:`bold`,children:`Transistor`}),(0,X.jsxs)(V,{orientation:`horizontal`,children:[(0,X.jsxs)(L,{children:[(0,X.jsx)(R,{htmlFor:`transistor-portal-enabled`,children:`Enable Transistor integration`}),(0,X.jsx)(z,{children:`Show a section on the account page for members to access private podcasts`})]}),(0,X.jsx)(y,{checked:c,id:`transistor-portal-enabled`,onCheckedChange:e=>t(`transistor_portal_enabled`,e)})]})]}),c&&(0,X.jsxs)(P,{className:`gap-6`,children:[(0,X.jsxs)(V,{children:[(0,X.jsx)(R,{htmlFor:`transistor-heading`,children:`Heading`}),(0,X.jsx)(b,{id:`transistor-heading`,placeholder:`Podcasts`,value:i,onChange:e=>t(`transistor_portal_heading`,e.target.value)}),(0,X.jsx)(z,{children:`The heading displayed above the Transistor section`})]}),(0,X.jsxs)(V,{children:[(0,X.jsx)(R,{htmlFor:`transistor-description`,children:`Description`}),(0,X.jsx)(b,{id:`transistor-description`,placeholder:`Access your RSS feeds`,value:a,onChange:e=>t(`transistor_portal_description`,e.target.value)}),(0,X.jsx)(z,{children:`A short description of what members can do`})]}),(0,X.jsxs)(V,{children:[(0,X.jsx)(R,{htmlFor:`transistor-button-text`,children:`Button text`}),(0,X.jsx)(b,{id:`transistor-button-text`,placeholder:`Manage`,value:o,onChange:e=>t(`transistor_portal_button_text`,e.target.value)}),(0,X.jsx)(z,{children:`The text displayed on the button`})]}),(0,X.jsxs)(V,{children:[(0,X.jsx)(R,{htmlFor:`transistor-url-template`,children:`URL template`}),(0,X.jsx)(b,{id:`transistor-url-template`,placeholder:`https://partner.transistor.fm/ghost/{memberUuid}`,value:s,onChange:e=>t(`transistor_portal_url_template`,e.target.value)}),(0,X.jsxs)(z,{children:[`Use `,`{memberUuid}`,` as a placeholder for the member ID`]})]})]})]})},De=e(ve(),1),Oe=({localSettings:e,updateSetting:t,errors:n,setError:r})=>{let{siteData:i,settings:a,config:o}=J(),[s,c]=H(a,[`members_support_address`,`support_email_address`]),l=c?.toString()||W(s?.toString()||``,i,o),u=ae(i,o),[d,f]=(0,Y.useState)(l);return(0,Y.useEffect)(()=>{f(l)},[l]),(0,X.jsx)(`div`,{className:`mt-7`,children:(0,X.jsxs)(P,{className:`mb-10 gap-8`,children:[(0,X.jsx)(Te,{localSettings:e,settingKey:`portal_account_gift_promotion`,updateSetting:t}),(0,X.jsxs)(V,{"data-invalid":!!n.members_support_address||void 0,children:[(0,X.jsx)(R,{htmlFor:`members-support-address`,children:`Support email address`}),(0,X.jsx)(b,{"aria-invalid":!!n.members_support_address||void 0,id:`members-support-address`,value:d,onBlur:e=>{let n=e.target.value;n?De.default.isEmail(n)?r(`members_support_address`,``):r(`members_support_address`,`Enter a valid email address`):r(`members_support_address`,`Enter an email address`);let a=u&&n===`noreply@${u}`?`noreply`:n;t(`members_support_address`,a),f(W(a,i,o))},onChange:e=>f(e.target.value)}),n.members_support_address&&(0,X.jsx)(I,{children:n.members_support_address})]}),(0,X.jsx)(Ee,{localSettings:e,updateSetting:t})]})})},Z=[{icon:`portal-icon-1`,label:`Portal icon 1`,value:`icon-1`},{icon:`portal-icon-2`,label:`Portal icon 2`,value:`icon-2`},{icon:`portal-icon-3`,label:`Portal icon 3`,value:`icon-3`},{icon:`portal-icon-4`,label:`Portal icon 4`,value:`icon-4`},{icon:`portal-icon-5`,label:`Portal icon 5`,value:`icon-5`}],ke=({localSettings:e,updateSetting:t})=>{let{mutateAsync:n}=de(),r=i(),[a,o,c,d]=H(e,[`portal_button`,`portal_button_style`,`portal_button_icon`,`portal_button_signup_text`]),h=c||Z[0].value,[g,_]=(0,Y.useState)(Z.map(({value:e})=>e).includes(h)?void 0:h),v=async e=>{try{let r=he(await n({file:e}));t(`portal_button_icon`,r),_(r)}catch(e){let t=e;t.response.status===415&&(t.message=`Unsupported file type`),r(t)}};return(0,X.jsx)(`div`,{className:`mt-7`,children:(0,X.jsxs)(P,{className:`mb-10 gap-8`,children:[(0,X.jsxs)(V,{orientation:`horizontal`,children:[(0,X.jsx)(R,{htmlFor:`show-portal-button`,children:`Show portal button`}),(0,X.jsx)(y,{checked:!!a,id:`show-portal-button`,onCheckedChange:e=>t(`portal_button`,e)})]}),a&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(V,{children:[(0,X.jsx)(R,{children:`Button style`}),(0,X.jsxs)(T,{value:o,onValueChange:e=>t(`portal_button_style`,e),children:[(0,X.jsx)(C,{"aria-label":`Button style`,children:(0,X.jsx)(w,{})}),(0,X.jsx)(S,{children:[{value:`icon-and-text`,label:`Icon and text`},{value:`icon-only`,label:`Icon only`},{value:`text-only`,label:`Text only`}].map(e=>(0,X.jsx)(x,{value:e.value,children:e.label},e.value))})]})]}),o?.toString()?.includes(`icon`)&&(0,X.jsxs)(l,{gap:`sm`,children:[(0,X.jsx)(u,{as:`h6`,className:`text-base`,weight:`semibold`,children:`Icon`}),(0,X.jsxs)(s,{className:`w-full gap-px rounded-(--input-group-radius) bg-muted p-0.5`,columns:6,gap:`none`,children:[(0,X.jsx)(te,{"aria-label":`Portal button icon`,className:`contents border-0! bg-transparent! p-0`,type:`single`,value:h,onValueChange:e=>e&&t(`portal_button_icon`,e),children:Z.map(e=>(0,X.jsx)(ee,{"aria-label":e.label,className:`group h-[46px] w-full min-w-0 rounded-[calc(var(--radius-md)+1px)] p-3`,value:e.value,children:(0,X.jsx)(be,{className:`size-[18px] opacity-70 transition-opacity group-hover:opacity-100 group-data-[state=on]:opacity-100`,name:e.icon})},e.value))}),(0,X.jsx)(pe,{className:`h-[46px] w-full min-w-0 overflow-visible rounded-[calc(var(--radius-md)+1px)] ${h===g?`bg-background shadow-sm`:``}`,children:g?(0,X.jsxs)(le,{className:`overflow-visible`,children:[(0,X.jsx)(me,{className:`rounded-md`,src:g}),(0,X.jsx)(p,{"aria-label":`Use uploaded Portal icon`,"aria-pressed":h===g,className:`absolute inset-0 z-10 size-full rounded-md bg-transparent hover:bg-transparent`,size:`icon`,type:`button`,variant:`ghost`,onClick:()=>t(`portal_button_icon`,g)}),(0,X.jsx)(ce,{className:`-top-2 -right-2 z-20 opacity-100`,children:(0,X.jsx)(ue,{"aria-label":`Delete uploaded Portal icon`,className:`size-6 rounded-full p-0`,onClick:()=>{h===g&&t(`portal_button_icon`,null),_(void 0)},children:(0,X.jsx)(f,{})})})]}):(0,X.jsx)(fe,{accept:{"image/*":[]},"aria-label":`Upload Portal icon`,className:`size-full rounded-[calc(var(--radius-md)+1px)] border-0 bg-transparent p-0 hover:bg-surface-elevated`,inputAriaLabel:`Upload Portal icon`,onDropAccepted:e=>void v(e[0]),children:(0,X.jsx)(m,{className:`size-5`})})})]})]}),o?.toString()?.includes(`text`)&&(0,X.jsxs)(V,{children:[(0,X.jsx)(R,{htmlFor:`portal-signup-button-text`,children:`Signup button text`}),(0,X.jsx)(b,{id:`portal-signup-button-text`,value:d,onChange:e=>t(`portal_button_signup_text`,e.target.value)})]})]})]})})},Q=({name:e,value:t})=>(0,X.jsxs)(N,{className:`lg:flex-row lg:items-center lg:gap-5`,value:t,children:[(0,X.jsx)(O,{className:`shrink-0 whitespace-nowrap lg:w-[180px]`,children:e}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{}),(0,X.jsx)(A,{children:(0,X.jsx)(k,{})})]})]}),Ae=()=>{let[e,t]=(0,Y.useState)(!1),[n,r]=(0,Y.useState)(``),{siteData:i}=J(),{data:{tiers:a}={}}=K(),o=q(a||[]),s=re();(0,Y.useEffect)(()=>{o?.length&&!n&&r(o[0].id)},[o,n]);let d=o?.map(e=>({label:e.name,value:e.id})),f=se(i);return(0,X.jsx)(_e,{className:`max-w-[920px] text-base text-foreground`,children:(0,X.jsxs)(l,{gap:`2xl`,children:[(0,X.jsxs)(l,{gap:`xs`,children:[(0,X.jsx)(_e.Title,{className:`mb-0`,children:`Links`}),(0,X.jsxs)(u,{children:[`Use these `,e?`data attributes`:`links`,` in your theme to show pages of Portal.`]})]}),(0,X.jsx)(`section`,{children:(0,X.jsxs)(l,{gap:`lg`,children:[(0,X.jsxs)(c,{as:`header`,className:`border-b border-border pb-2`,justify:`between`,children:[(0,X.jsx)(u,{as:`h2`,size:`xl`,weight:`semibold`,children:`Generic`}),(0,X.jsx)(v,{value:e?`data-attributes`:`links`,variant:`segmented-sm`,onValueChange:e=>t(e===`data-attributes`),children:(0,X.jsxs)(_,{"aria-label":`Portal link format`,children:[(0,X.jsx)(h,{value:`links`,children:`Links`}),(0,X.jsx)(h,{value:`data-attributes`,children:`Data attributes`})]})})]}),(0,X.jsxs)(l,{gap:`md`,children:[(0,X.jsx)(Q,{name:`Default`,value:e?`data-portal`:`${f}#/portal`}),(0,X.jsx)(Q,{name:`Sign in`,value:e?`data-portal="signin"`:`${f}#/portal/signin`}),(0,X.jsx)(Q,{name:`Sign up`,value:e?`data-portal="signup"`:`${f}#/portal/signup`}),s&&(0,X.jsx)(Q,{name:`Gift subscriptions`,value:e?`data-portal="gift"`:`${f}#/portal/gift`})]})]})}),(0,X.jsx)(`section`,{children:(0,X.jsxs)(l,{gap:`lg`,children:[(0,X.jsx)(u,{as:`h2`,className:`border-b border-border pb-2`,size:`xl`,weight:`semibold`,children:`Tiers`}),(0,X.jsxs)(l,{gap:`md`,children:[(0,X.jsxs)(V,{className:`lg:flex-row lg:items-center lg:justify-between lg:gap-5 [&>*]:w-auto`,children:[(0,X.jsx)(R,{className:`shrink-0 whitespace-nowrap lg:w-[180px]`,children:`Tier`}),(0,X.jsxs)(T,{value:n,onValueChange:r,children:[(0,X.jsx)(C,{"aria-label":`Tier`,className:`w-fit`,children:(0,X.jsx)(w,{})}),(0,X.jsx)(S,{children:d.map(e=>(0,X.jsx)(x,{value:e.value,children:e.label},e.value))})]})]}),(0,X.jsx)(Q,{name:`Signup / Monthly`,value:e?`data-portal="signup/${n}/monthly"`:`${f}#/portal/signup/${n}/monthly`}),(0,X.jsx)(Q,{name:`Signup / Yearly`,value:e?`data-portal="signup/${n}/yearly"`:`${f}#/portal/signup/${n}/yearly`}),(0,X.jsx)(Q,{name:`Signup / Free`,value:e?`data-portal="signup/free"`:`${f}#/portal/signup/free`})]})]})}),(0,X.jsx)(`section`,{children:(0,X.jsxs)(l,{gap:`lg`,children:[(0,X.jsx)(u,{as:`h2`,className:`border-b border-border pb-2`,size:`xl`,weight:`semibold`,children:`Account`}),(0,X.jsxs)(l,{gap:`md`,children:[(0,X.jsx)(Q,{name:`Account`,value:e?`data-portal="account"`:`${f}#/portal/account`}),(0,X.jsx)(Q,{name:`Account / Plans`,value:e?`data-portal="account/plans"`:`${f}#/portal/account/plans`}),(0,X.jsx)(Q,{name:`Account / Profile`,value:e?`data-portal="account/profile"`:`${f}#/portal/account/profile`}),(0,X.jsx)(Q,{name:`Account / Newsletters`,value:e?`data-portal="account/newsletters"`:`${f}#/portal/account/newsletters`}),(0,X.jsx)(Q,{name:`Account / Newsletter help`,value:e?`data-portal="account/newsletters/help"`:`${f}#/portal/account/newsletters/help`})]})]})})]})})},je=({settings:e,config:t,tiers:n,siteData:r,selectedTab:i,previewTheme:a})=>{if(!r?.url)return null;let o=n.filter(e=>e.visibility===`public`&&e.type===`paid`).map(e=>e.id),s=r.url.replace(/\/$/,``),c=JSON.parse(G(e,`portal_plans`)||``),l=new URLSearchParams;l.append(`button`,G(e,`portal_button`)?`true`:`false`),l.append(`name`,G(e,`portal_name`)?`true`:`false`),l.append(`signupGiftPromotion`,G(e,`portal_signup_gift_promotion`)?`true`:`false`),l.append(`accountGiftPromotion`,G(e,`portal_account_gift_promotion`)?`true`:`false`),l.append(`isFree`,c.includes(`free`)?`true`:`false`),l.append(`isMonthly`,U(e,t)&&c.includes(`monthly`)?`true`:`false`),l.append(`isYearly`,U(e,t)&&c.includes(`yearly`)?`true`:`false`),l.append(`page`,i===`account`?`accountHome`:`signup`),l.append(`previewTheme`,a),l.append(`buttonIcon`,encodeURIComponent(G(e,`portal_button_icon`)||`icon-1`)),l.append(`signupButtonText`,encodeURIComponent(G(e,`portal_button_signup_text`)||``)),l.append(`membersSignupAccess`,G(e,`members_signup_access`)||`all`),l.append(`allowSelfSignup`,G(e,`allow_self_signup`)||`false`),l.append(`signupTermsHtml`,G(e,`portal_signup_terms_html`)||``),l.append(`signupCheckboxRequired`,G(e,`portal_signup_checkbox_required`)?`true`:`false`),l.append(`portalProducts`,o.join(`,`));let u=G(e,`portal_default_plan`);u&&l.append(`portalDefaultPlan`,u),c&&c.length&&l.append(`portalPrices`,encodeURIComponent(c.join(`,`)));let d=G(e,`accent_color`);d!=null&&l.append(`accentColor`,encodeURIComponent(d));let f=G(e,`portal_button_style`);return f&&l.append(`buttonStyle`,encodeURIComponent(f)),l.append(`disableBackground`,`false`),G(e,`transistor`)&&l.append(`transistorPortalSettings`,JSON.stringify({enabled:G(e,`transistor_portal_enabled`),heading:G(e,`transistor_portal_heading`)||`Podcasts`,description:G(e,`transistor_portal_description`)||`Access your RSS feeds`,button_text:G(e,`transistor_portal_button_text`)||`Manage`,url_template:G(e,`transistor_portal_url_template`)||`https://partner.transistor.fm/ghost/{memberUuid}`})),l.append(`admin_toolbar`,`0`),`${s}/?v=modal-portal-settings#/portal/preview?${l.toString()}`},Me=({darkMode:e,selectedTab:t=`signup`,localSettings:n,localTiers:r})=>{let{siteData:i,config:a}=J(),o=je({settings:n,tiers:r,selectedTab:t,previewTheme:e?`dark`:`light`,siteData:i,config:a}),s=(0,X.jsx)(X.Fragment,{});switch(t){case`account`:s=(0,X.jsx)(X.Fragment,{children:(0,X.jsx)(Ce,{href:o||``,portalParent:`preview`,selectedTab:t})});break;case`links`:s=(0,X.jsx)(Ae,{});break;default:s=(0,X.jsx)(X.Fragment,{children:(0,X.jsx)(Ce,{href:o||``,portalParent:`preview`,selectedTab:t})});break}return s},Ne=({localSettings:e,updateSetting:t,localTiers:n,updateTier:r,errors:i,setError:a})=>{let{config:s}=J(),[c,l,u,d,f,p]=H(e,[`members_signup_access`,`portal_name`,`portal_signup_terms_html`,`portal_signup_checkbox_required`,`portal_plans`,`portal_default_plan`]),m=JSON.parse(f?.toString()||`[]`),h=(0,Y.useMemo)(()=>{let e=document.createElement(`div`);return e.innerHTML=u?.toString()||``,e.innerText.length},[u]),g=(0,Y.useCallback)((e,t)=>{a(e,t)},[]);(0,Y.useEffect)(()=>{h>115?g(`portal_signup_terms_html`,`Signup notice is too long`):g(`portal_signup_terms_html`,void 0)},[h,g]);let _=e=>{let n=m.indexOf(e);n===-1?m.push(e):m.splice(n,1),t(`portal_plans`,JSON.stringify(m)),p===`yearly`?!m.includes(`yearly`)&&m.includes(`monthly`)&&t(`portal_default_plan`,`monthly`):p===`monthly`&&(m.includes(`monthly`)||t(`portal_default_plan`,`yearly`))},v=c===`all`||c===`paid`,b=c===`all`,E=U(e,s),O=[];n&&n.forEach(e=>{e.type===`free`&&b&&O.push({checked:m.includes(`free`),disabled:!v,label:e.name,value:`free`,testId:`free-tier-checkbox`,onChange:n=>{m.includes(`free`)&&!n&&m.splice(m.indexOf(`free`),1),!m.includes(`free`)&&n&&m.push(`free`),t(`portal_plans`,JSON.stringify(m)),r({...e,visibility:n?`public`:`none`})}})});let k=q(n)||[],A=[{value:`yearly`,label:`Yearly`},{value:`monthly`,label:`Monthly`}];E&&k.length>0&&k.forEach(e=>{O.push({checked:e.visibility===`public`,label:e.name,value:e.id,onChange:t=>r({...e,visibility:t?`public`:`none`})})});let j=E&&k.length>0&&k.some(e=>e.visibility===`public`);return(0,X.jsx)(`div`,{className:`mt-7`,children:(0,X.jsxs)(P,{className:`mb-10 gap-8`,children:[(0,X.jsxs)(V,{"data-disabled":!v||void 0,orientation:`horizontal`,children:[(0,X.jsx)(R,{htmlFor:`portal-display-name`,children:`Display name in signup form`}),(0,X.jsx)(y,{checked:!!l,disabled:!v,id:`portal-display-name`,onCheckedChange:e=>t(`portal_name`,e)})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{variant:`label`,children:`Available tiers`}),(0,X.jsx)(P,{"data-slot":`checkbox-group`,children:O.map(e=>(0,X.jsxs)(V,{"data-disabled":e.disabled||void 0,orientation:`horizontal`,children:[(0,X.jsx)(D,{checked:e.checked,"data-testid":e.testId,disabled:e.disabled,id:`portal-tier-${e.value}`,onCheckedChange:t=>e.onChange(t===!0)}),(0,X.jsx)(R,{htmlFor:`portal-tier-${e.value}`,children:e.label})]},e.value))})]}),j&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{variant:`label`,children:`Available prices`}),(0,X.jsx)(P,{"data-slot":`checkbox-group`,children:[`monthly`,`yearly`].map(e=>(0,X.jsxs)(V,{"data-disabled":!v||void 0,orientation:`horizontal`,children:[(0,X.jsx)(D,{checked:m.includes(e),disabled:!v,id:`portal-plan-${e}`,onCheckedChange:()=>_(e)}),(0,X.jsx)(R,{className:`capitalize`,htmlFor:`portal-plan-${e}`,children:e})]},e))})]}),m.includes(`yearly`)&&m.includes(`monthly`)&&(0,X.jsxs)(V,{children:[(0,X.jsx)(R,{children:`Default price at signup`}),(0,X.jsxs)(T,{value:typeof p==`string`?p:``,onValueChange:e=>t(`portal_default_plan`,e),children:[(0,X.jsx)(C,{"aria-label":`Default price at signup`,children:(0,X.jsx)(w,{})}),(0,X.jsx)(S,{children:A.map(e=>(0,X.jsx)(x,{value:e.value,children:e.label},e.value))})]})]})]}),(0,X.jsx)(xe,{error:!!i.portal_signup_terms_html,hint:i.portal_signup_terms_html||(0,X.jsxs)(X.Fragment,{children:[`Recommended: `,(0,X.jsx)(`strong`,{children:o(115)}),` characters. You've used`,` `,(0,X.jsx)(`strong`,{className:`text-green`,children:o(h)})]}),nodes:`MINIMAL_NODES`,placeholder:`By signing up, I agree to receive emails from ...`,title:`Display notice at signup`,value:u?.toString(),onChange:e=>t(`portal_signup_terms_html`,e)}),u?.toString()&&(0,X.jsxs)(V,{"data-disabled":!v||void 0,orientation:`horizontal`,children:[(0,X.jsx)(R,{htmlFor:`portal-require-agreement`,children:`Require agreement`}),(0,X.jsx)(y,{checked:!!d,disabled:!v,id:`portal-require-agreement`,onCheckedChange:e=>t(`portal_signup_checkbox_required`,e)})]}),(0,X.jsx)(Te,{localSettings:e,settingKey:`portal_signup_gift_promotion`,updateSetting:t})]})})},Pe=r({path:()=>`/settings/verifications`,method:`PUT`,body:({token:e})=>({token:e}),updateQueries:{dataType:`SettingsResponseType`,emberUpdateType:`createOrUpdate`,update:e=>({...e,settings:e.settings})}}),Fe={signupOptions:`signup`,lookAndFeel:`signup`,accountPage:`account`},$=`border-b-2 border-transparent after:hidden data-[state=active]:border-foreground`,Ie=({localSettings:e,updateSetting:t,localTiers:n,updateTier:r,errors:i,setError:a,selectedTab:o,onTabChange:s})=>(0,X.jsx)(`div`,{className:`pt-4`,children:(0,X.jsxs)(v,{value:o,variant:`underline`,onValueChange:e=>s(e),children:[(0,X.jsxs)(_,{children:[(0,X.jsx)(h,{className:$,value:`signupOptions`,children:`Signup options`}),(0,X.jsx)(h,{className:$,value:`lookAndFeel`,children:`Look & feel`}),(0,X.jsx)(h,{className:$,value:`accountPage`,children:`Account page`})]}),(0,X.jsx)(g,{value:`signupOptions`,children:(0,X.jsx)(Ne,{errors:i,localSettings:e,localTiers:n,setError:a,updateSetting:t,updateTier:r})}),(0,X.jsx)(g,{value:`lookAndFeel`,children:(0,X.jsx)(ke,{localSettings:e,updateSetting:t})}),(0,X.jsx)(g,{value:`accountPage`,children:(0,X.jsx)(Oe,{errors:i,localSettings:e,setError:a,updateSetting:t})})]})}),Le=()=>{let{updateRoute:e}=E(),{darkMode:t}=d(),[n,r]=(0,Y.useState)(`signup`),[o,s]=(0,Y.useState)(`signupOptions`),c=i(),{confirm:l}=ye(),{settings:u,siteData:f,config:p}=J(),{mutateAsync:m}=ne(),{data:{tiers:g}={}}=K(),{mutateAsync:y}=ge(),{mutateAsync:b}=Pe(),{getParam:x}=we(),S=x(`verifyEmail`);(0,Y.useEffect)(()=>{S&&(async({token:e})=>{try{let{settings:t}=await b({token:e}),[n]=H(t,[`members_support_address`]);l({title:`Support address verified`,prompt:(0,X.jsxs)(X.Fragment,{children:[`Your support email address has been changed to `,(0,X.jsx)(`strong`,{children:n}),`.`]}),okLabel:`Close`,cancelLabel:``,onOk:e=>e?.remove()})}catch(e){let t=`There was an error verifying your email address. Please try again.`;e instanceof Error&&e.message===`Token expired`&&(t=`Verification link has expired.`),l({title:`Error verifying support address`,prompt:t,okLabel:`Close`,cancelLabel:``,onOk:e=>e?.remove()}),c(e,{withToast:!1})}})({token:S})},[l,c,S,b]);let{formState:C,setFormState:w,saveState:T,handleSave:D,updateForm:O,okProps:k}=a({initialState:{settings:u,tiers:g||[]},savingDelay:500,onSave:async()=>{await Promise.all(C.tiers.filter(({dirty:e})=>e).map(e=>y(e))),w(e=>({...e,tiers:C.tiers.map(e=>({...e,dirty:!1}))}));let e=C.settings.filter(e=>e.dirty);if(!e.length)return;let{meta:t,settings:n}=await m(e);if(w(e=>({...e,settings:C.settings.map(e=>({...e,dirty:!1}))})),t?.sent_email_verification){let e=C.settings.find(e=>e.key===`members_support_address`)?.value,t=n.find(e=>e.key===`support_email_address`)?.value||W(n.find(e=>e.key===`members_support_address`)?.value?.toString()||`noreply`,f,p);l({title:`Confirm email address`,prompt:(0,X.jsxs)(X.Fragment,{children:[`We've sent a confirmation email to `,(0,X.jsx)(`strong`,{children:e}),`. Until verified, your support email address will remain `,t,`.`]}),okLabel:`Close`,cancelLabel:``,onOk:e=>e?.remove()})}},onSaveError:c});(0,Y.useEffect)(()=>{!C.tiers.length&&g?.length&&w(e=>({...e,tiers:g}))},[g,C.tiers,w]);let[A,j]=(0,Y.useState)({}),M=(e,t)=>{O(n=>({...n,settings:n.settings.map(n=>n.key===e?{...n,value:t,dirty:!0}:n)}))},N=(e,t)=>{j(n=>({...n,[e]:t}))},P=e=>{O(t=>({...t,tiers:t.tiers.map(t=>t.id===e.id?{...e,dirty:!0}:t)}))},F=e=>{r(e),e===`account`?s(`accountPage`):e===`signup`&&o===`accountPage`&&s(`signupOptions`)},I=(0,X.jsx)(Ie,{errors:A,localSettings:C.settings,localTiers:C.tiers,selectedTab:o,setError:N,updateSetting:M,updateTier:P,onTabChange:e=>{s(e),r(Fe[e])}}),L=(0,X.jsx)(Me,{darkMode:t,localSettings:C.settings,localTiers:C.tiers,selectedTab:n}),R=(0,X.jsx)(v,{value:n,variant:`button`,onValueChange:e=>F(e),children:(0,X.jsxs)(_,{children:[(0,X.jsx)(h,{value:`signup`,children:`Signup`}),(0,X.jsx)(h,{value:`account`,children:`Account page`}),(0,X.jsx)(h,{value:`links`,children:`Links`})]})});return(0,X.jsx)(Se,{buttonsDisabled:k.disabled,cancelLabel:`Close`,dirty:T===`unsaved`,okLabel:k.label||`Save`,okVariant:k.variant,preview:L,previewBgColor:n===`links`?`white`:`greygradient`,previewToolbarTabs:R,sidebar:I,testId:`portal-modal`,title:`Portal`,onClose:()=>{e(`portal`)},onOk:async()=>{Object.values(A).filter(Boolean).length||await D({force:!0})}})};export{Le as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./posts-KY3aUhVV.js";import{t as i}from"./analytics-53FOa2wq.js";import{i as a}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{f as o}from"./dist-Cb5RSHSg.js";import{t as s}from"./box-By_EgGtm.js";import{t as c}from"./container-LiZf3XdY.js";import{t as l}from"./use-analytics-data--opuzwcz.js";import{t as u}from"./post-share-modal-P1_M6o-H.js";var d=e(t(),1),f=n(),p=({children:e})=>(0,f.jsx)(s,{className:`size-full`,children:(0,f.jsx)(c,{className:`relative flex h-full flex-col`,size:`page`,children:(0,f.jsx)(`div`,{className:`grid w-full grow`,children:(0,f.jsx)(`div`,{className:`flex h-full flex-col px-8`,children:e})})})}),m=()=>{let[e,t]=(0,d.useState)(!1),[n,i]=(0,d.useState)(null),[a,s]=(0,d.useState)(null),{site:c}=l(),{data:u}=r({searchParams:n?{filter:`id:${n.id}`,include:`authors,newsletter,email`}:{},enabled:!!n}),{data:f}=r({searchParams:{filter:`status:[published,sent]`,limit:`1`,fields:`id`},enabled:!!n}),p=u?.posts?.[0],m=e=>`${o(e)} subscriber${e===1?``:`s`}`,h=e=>new Date(e).toLocaleTimeString(`en-US`,{hour:`2-digit`,minute:`2-digit`,hour12:!1}),g=e=>e?.map(e=>e.name).join(`, `)||``,_=(0,d.useMemo)(()=>{if(!p)return null;let n=!!a,r=()=>{let e=[];if(p.email_only?e.push(`Your email was sent to`):p.email?.email_count?e.push(`Your post was published on your site and sent to`):e.push(`Your post was published on your site`),p.email?.email_count){let t=m(p.email.email_count);e.push(` `),e.push(d.createElement(`strong`,{key:`subscriber-count`},t)),p.newsletter?.name&&(e.push(` of `),e.push(d.createElement(`strong`,{key:`newsletter-name`},p.newsletter.name))),e.push(`,`)}if(p.published_at){let t=new Date(p.published_at);t.toDateString()===new Date().toDateString()?(e.push(` `),e.push(d.createElement(`strong`,{key:`today`},`today`))):(e.push(` on `),e.push(d.createElement(`strong`,{key:`date`},t.toLocaleDateString(`en-US`,{month:`long`,day:`numeric`})))),e.push(` at `),e.push(d.createElement(`strong`,{key:`time`},h(p.published_at)))}return e.push(`.`),d.createElement(`span`,{},...e)},l=()=>{t(!1),i(null),s(null)};return{open:e,onOpenChange:e=>{e||l()},emailOnly:p.email_only,postURL:p.url||``,primaryTitle:`Boom! It's out there.`,secondaryTitle:n&&a?`That's ${o(a)} post${a===1?``:`s`} published.`:`Spread the word!`,description:r(),featureImageURL:p.feature_image||``,postTitle:p.title||``,postExcerpt:p.excerpt||``,faviconURL:c?.icon||``,siteTitle:c?.title||``,author:g(p.authors),onClose:l}},[p,e,a,c?.title]);return(0,d.useEffect)(()=>{let e=()=>{try{let e=localStorage.getItem(`ghost-last-published-post`);if(e){let n=JSON.parse(e);i(n),t(!0),localStorage.removeItem(`ghost-last-published-post`)}}catch{}};e();let n=setTimeout(e,100);return()=>clearTimeout(n)},[]),(0,d.useEffect)(()=>{f?.meta?.pagination?.total&&s(f.meta.pagination.total)},[f]),{isModalOpen:e,post:p,postCount:a,showPostCount:!!a,closeModal:()=>{t(!1),i(null),s(null)},modalProps:_}},h=()=>{let{isModalOpen:e,modalProps:t}=m(),n=e&&!!t;return(0,d.useEffect)(()=>{n&&i(`Share Modal Opened`,{giftLinkShown:!1,source:`publish-flow`})},[n]),(0,f.jsxs)(p,{children:[(0,f.jsx)(a,{}),e&&t&&(0,f.jsx)(u,{...t})]})};export{h as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{o as r,p as ee}from"./hooks-CuEZV2-q.js";import{h as i,m as a,p as te,v as ne}from"./stats-B_YkF7bp.js";import{r as re}from"./posts-KY3aUhVV.js";import{t as o}from"./analytics-53FOa2wq.js";import{i as s,n as c,o as l,r as u}from"./post-helpers-C5OQMBoi.js";import{a as ie}from"./router-provider-CJC58zTy.js";import{c as d,f as ae,l as f,u as p}from"./dist-Cb5RSHSg.js";import{t as oe}from"./heading-CRZZ2FUe.js";import{An as se,E as ce,Y as le,bt as ue,kn as de,t as m}from"./button-BshWPHvn.js";import{a as fe,c as pe,i as me,n as he,o as ge,r as _e,s as ve,t as h}from"./alert-dialog-wEbVxANM.js";import{a as g,i as _,n as v,o as y,r as b,t as x}from"./breadcrumb-CcFr_ltt.js";import{r as S}from"./users-5msE1WMs.js";import{Ar as C,Fr as w,Gn as T,Hn as E,Kn as D,Qn as O,Wn as k,Xn as A}from"./index-CDP9tIOk.js";import{t as j}from"./use-analytics-data--opuzwcz.js";import{t as M}from"./get-site-timezone-HgL0jI_F.js";import{t as N}from"./post-share-modal-P1_M6o-H.js";import{i as P,t as ye}from"./gift-link-modal-0mzjn5oF.js";import{n as be}from"./post-analytics-context-D0Mw-Pmv.js";var F=e(t(),1),I=n(),L=(0,F.forwardRef)(({children:e,className:t,...n},r)=>(0,I.jsx)(`section`,{ref:r,className:d(`flex size-full grow flex-col gap-6 py-8`,t),...n,children:e}));L.displayName=`PostAnalyticsContent`;var R=e=>{let{data:t}=r();return!e||!t?!1:e.status===`published`&&!!e.visibility&&e.visibility!==`public`&&S(t)},z=({currentTab:e,children:t})=>{let n=ie(),r=w(),d=C(),{mutateAsync:S}=re(),L=ee(),[z,B]=(0,F.useState)(!1),[V,H]=(0,F.useState)(!1),[xe,U]=(0,F.useState)(!1),{settings:Se,site:W,statsConfig:Ce}=j(),{post:G,isPostLoading:K,postId:q}=be(),J=R(G),Y=M(Se),X=(0,F.useRef)(!1);(0,F.useEffect)(()=>{if(!V){X.current=!1;return}X.current||(X.current=!0,o(`Share Modal Opened`,{giftLinkShown:J,source:`post-analytics`}))},[V,J]);let{activeVisitors:Z,isLoading:Q}=ne({postUuid:G?.uuid,statsConfig:Ce,enabled:r}),$=(0,F.useMemo)(()=>{if(!G)return[];let e=[];return s(G)&&!r||(e.push(`Overview`),!G.email_only&&r&&e.push(`Web`)),l(G)&&e.push(`Newsletter`),d&&e.push(`Growth`),e},[G,r,d]),we=()=>{G&&B(!0)},Te=async()=>{if(G)try{await S(q),B(!1),n(`/posts/`,{crossApp:!0})}catch(e){L(e)}};return(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`header`,{className:`z-50 -mx-8 bg-white/70 backdrop-blur-md dark:bg-background`,children:(0,I.jsx)(`div`,{className:`relative flex min-h-[102px] w-full items-start justify-between gap-5 px-8 pt-8 pb-0`,"data-header":`header`,children:(0,I.jsxs)(`div`,{className:`flex w-full flex-col gap-6`,children:[(0,I.jsxs)(`div`,{className:`flex w-full flex-col justify-between md:flex-row md:items-center`,children:[(0,I.jsx)(x,{children:(0,I.jsxs)(_,{children:[(0,I.jsx)(v,{children:(0,I.jsx)(b,{asChild:!0,children:(0,I.jsx)(`button`,{className:`cursor-pointer rounded-sm focus-visible:ring-1 focus-visible:ring-focus-ring focus-visible:outline-hidden`,type:`button`,onClick:()=>n(`/analytics/`),children:`Analytics`})})}),(0,I.jsx)(y,{}),(0,I.jsx)(v,{children:(0,I.jsx)(g,{children:`Post analytics`})})]})}),(0,I.jsxs)(`div`,{className:`flex w-full items-center gap-2 md:w-auto`,children:[r&&!G?.email_only&&(0,I.jsx)(`div`,{className:`mr-3 flex grow items-center gap-2 md:grow-0`,children:(0,I.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,title:`Active readers in the last 5 minutes · Updates every 60 seconds`,children:[(0,I.jsxs)(`span`,{children:[Q?``:ae(Z),` reading now`]}),(0,I.jsx)(`div`,{className:`size-2 rounded-full ${Q?`animate-pulse bg-muted`:Z?`bg-green-500`:`border border-muted-foreground`}`})]})}),!K&&(0,I.jsxs)(I.Fragment,{children:[!G?.email_only&&(0,I.jsx)(N,{author:G?.authors?.[0]?.name||``,canShareAsGift:J,description:``,faviconURL:W?.icon||``,featureImageURL:G?.feature_image,giftAccessLabel:P(G?.visibility),open:V,postExcerpt:G?.excerpt||``,postTitle:G?.title,postURL:G?.url,siteTitle:W?.title||``,onClose:()=>H(!1),onOpenChange:H,onShareAsGift:()=>{H(!1),U(!0)},children:(0,I.jsxs)(m,{variant:`outline`,onClick:()=>H(!0),children:[(0,I.jsx)(le,{}),` Share`]})}),(0,I.jsxs)(E,{children:[(0,I.jsx)(O,{asChild:!0,children:(0,I.jsx)(m,{variant:`outline`,children:(0,I.jsx)(se,{})})}),(0,I.jsxs)(k,{align:`end`,children:[(0,I.jsxs)(T,{children:[(0,I.jsx)(D,{asChild:!0,children:(0,I.jsxs)(`a`,{href:G?.url,rel:`noopener noreferrer`,target:`_blank`,children:[(0,I.jsx)(de,{}),`View in browser`]})}),(0,I.jsxs)(D,{onClick:()=>{n(`/editor/post/${q}`,{crossApp:!0})},children:[(0,I.jsx)(ue,{}),`Edit post`]})]}),(0,I.jsx)(A,{}),(0,I.jsx)(T,{children:(0,I.jsxs)(D,{className:`text-destructive focus:text-destructive`,onClick:we,children:[(0,I.jsx)(ce,{}),`Delete post`]})})]})]})]})]})]}),!K&&(0,I.jsxs)(`div`,{className:`flex items-start gap-6 md:items-center`,children:[G?.feature_image&&(0,I.jsx)(`div`,{className:`aspect-[16/10] w-full max-w-[100px] rounded-md bg-cover bg-center md:max-w-[132px]`,style:{backgroundImage:`url(${G.feature_image})`}}),(0,I.jsxs)(`div`,{children:[(0,I.jsx)(oe,{className:`-ml-px max-w-[920px] indent-0 !text-xl md:leading-[1.2em]`,"data-header":`header-title`,children:G?.title}),G?.published_at&&(0,I.jsxs)(`div`,{className:`mt-0.5 flex items-center justify-start leading-[1.65em] text-muted-foreground`,children:[c(G)&&`Sent on ${f(G.published_at,Y)} at ${p(G.published_at,Y)}`,s(G)&&`Published on your site on ${f(G.published_at,Y)} at ${p(G.published_at,Y)}`,u(G)&&`Published and sent on ${f(G.published_at,Y)} at ${p(G.published_at,Y)}`]})]})]})]})})}),(0,I.jsxs)(i,{className:`sticky top-0 z-50 -mb-8 transform-gpu flex-col items-start gap-y-0 border-none bg-white/70 py-8 backdrop-blur-md lg:flex-row lg:items-center dark:bg-background`,children:[!K&&(0,I.jsxs)(te,{className:`min-h-[34px]`,defaultValue:e,responsive:!0,children:[$.includes(`Overview`)&&(0,I.jsx)(a,{value:`Overview`,onClick:()=>{n(`/posts/analytics/${q}`)},children:`Overview`}),$.includes(`Web`)&&(0,I.jsx)(a,{value:`Web`,onClick:()=>{n(`/posts/analytics/${q}/web`)},children:`Web traffic`}),$.includes(`Newsletter`)&&(0,I.jsx)(a,{value:`Newsletter`,onClick:()=>{n(`/posts/analytics/${q}/newsletter`)},children:`Newsletter`}),$.includes(`Growth`)&&(0,I.jsx)(a,{value:`Growth`,onClick:()=>{n(`/posts/analytics/${q}/growth`)},children:`Growth`})]}),t]}),J&&q&&(0,I.jsx)(ye,{open:xe,postId:q,source:`share-modal`,onOpenChange:U},q),(0,I.jsx)(h,{open:z,onOpenChange:B,children:(0,I.jsxs)(me,{children:[(0,I.jsxs)(ve,{children:[(0,I.jsx)(pe,{children:`Are you sure you want to delete this post?`}),(0,I.jsxs)(fe,{children:[`You're about to delete "`,(0,I.jsx)(`strong`,{children:G?.title}),`". This is permanent! We warned you, k?`]})]}),(0,I.jsxs)(ge,{children:[(0,I.jsx)(_e,{children:`Cancel`}),(0,I.jsx)(he,{className:`bg-red-600 text-white hover:bg-red-700`,onClick:()=>void Te(),children:`Delete`})]})]})})]})};export{R as n,L as r,z as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,n as t,r as n,t as r}from"./hooks-CuEZV2-q.js";var i=`PostsResponseType`,a=n({dataType:i,path:`/posts/`}),o=r({dataType:i,path:`/posts/`,defaultNextPageParams:(e,t)=>{if(e.meta?.pagination.next)return{...t,page:e.meta.pagination.next.toString()}},returnData:e=>{let{pages:t}=e,n=t.flatMap(e=>e.posts),r=t[t.length-1].meta;return{posts:n,meta:r,isEnd:r?r.pagination.pages===r.pagination.page:!0}}}),s=e({dataType:i,path:e=>`/posts/${e}/`}),c=t({method:`DELETE`,path:e=>`/posts/${e}/`}),l=t({method:`POST`,retry:!1,path:()=>`/posts/upload/`,body:({file:e,mapping:t})=>{let n=new FormData;n.append(`postsfile`,e);for(let[e,r]of Object.entries(t))n.append(`mapping[${e}]`,r);return n}});export{s as a,l as i,o as n,c as r,a as t};
|