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{s as r}from"./framework-provider-DqI25epG.js";import{o as i}from"./hooks-CuEZV2-q.js";import{n as a}from"./dist-Ndy-PuGN.js";import{i as o}from"./currency-Dy4Tc2R2.js";import{h as s,n as c,u as l}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as u}from"./router-provider-CJC58zTy.js";import{c as d,v as f}from"./dist-Cb5RSHSg.js";import{t as p}from"./box-By_EgGtm.js";import{t as m}from"./container-LiZf3XdY.js";import{i as h}from"./app-utils-D2Wp7ZSS.js";import{$ as g,A as _,An as v,Dn as y,Dr as b,Gt as x,It as ee,Jt as te,Kt as ne,Nn as S,Ot as C,Pt as re,Un as ie,Ut as w,Vt as ae,Wt as oe,Xt as se,Zn as T,bt as E,dt as D,g as O,hn as k,k as ce,mn as A,qt as le,t as j,vr as ue,wn as de}from"./button-BshWPHvn.js";import{a as M,i as N,o as P,r as F,s as I,t as L}from"./dialog-Db7c164G.js";import{t as R}from"./switch-C9djUIMO.js";import{a as fe,c as z,i as B,o as pe,r as me,s as V,t as he}from"./alert-dialog-wEbVxANM.js";import{t as H}from"./input-UHrKuvBT.js";import{i as ge,n as _e,o as ve,s as ye,t as be}from"./select-D_RQaXgt.js";import{t as xe}from"./skeleton-D7hwjdry.js";import{n as U}from"./loading-indicator-SFTqyYVE.js";import{a as Se,i as Ce,n as we,o as Te,r as Ee,t as De}from"./breadcrumb-CcFr_ltt.js";import{n as W,t as G}from"./card-CiiE7QfM.js";import{t as Oe}from"./empty-indicator-WB1WgT9h.js";import{t as K}from"./label-VIG969IC.js";import{n as ke,o as Ae,t as je}from"./input-group-BPAxETpQ.js";import{t as Me}from"./textarea-d9qEkMOP.js";import{i as Ne}from"./users-5msE1WMs.js";import{r as Pe}from"./newsletters-DhNigJUh.js";import{C as Fe,Hn as Ie,Kn as q,Ln as Le,Mr as Re,Qn as ze,S as Be,Tr as Ve,Wn as He,Xn as Ue,b as We,f as Ge,g as Ke,h as qe,jr as Je,m as Ye,p as Xe,s as Ze,t as Qe,v as $e,x as et,xr as tt,y as nt,zn as rt}from"./index-CDP9tIOk.js";import{t as it}from"./page-header-Cfds8pCg.js";import{t as at}from"./dirty-confirm-dialog-CmARpZQS.js";import{a as ot}from"./tiers-Nd_z4BZY.js";import{t as J}from"./detail-page-D8lx2SdP.js";import{t as st}from"./validator-Cr0sMKuW.js";import{n as ct,t as lt}from"./use-unsaved-changes-guard-DpYJcj1d.js";import{g as ut,i as dt,p as ft,s as pt,t as mt}from"./member-custom-fields-gOv6Hoh3.js";import{n as ht,r as gt}from"./label-picker-BBWykUeA.js";var Y=e(t(),1),_t=new Set([`active`,`trialing`,`unpaid`,`past_due`]);function vt(e){return(e.subscriptions??[]).some(e=>_t.has(e.status))}function yt(e){return e?`Delete member + Cancel subscription`:`Delete member`}var X=n(),bt=({open:e,onOpenChange:t,member:n,allowLeaveWithUnsavedChanges:r})=>{let i=u(),o=Ge(),[s,c]=Y.useState(!1);Y.useEffect(()=>{e&&c(!1)},[e]);let l=vt(n),d=n.email||n.name||`this member`,f=async()=>{try{let e=l&&s;await o.mutateAsync({id:n.id,cancel:e}),a.success(e?`${d} was deleted and their Stripe subscription was cancelled.`:`${d} was deleted.`),t(!1),r(),i(`/members`)}catch{a.error(`Couldn’t delete the member. Please try again.`)}};return(0,X.jsx)(L,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,X.jsxs)(F,{"data-testid":`delete-member-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(I,{children:`Delete member account`}),(0,X.jsxs)(N,{children:[`Permanently delete `,(0,X.jsx)(`strong`,{children:d}),` from Ghost.`]})]}),l&&(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium`,children:`Also cancel subscription in Stripe`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If disabled, the member’s premium subscription will continue`})]}),(0,X.jsx)(R,{"aria-label":`Also cancel subscription in Stripe`,checked:s,"data-testid":`delete-member-cancel-stripe`,disabled:o.isPending,onCheckedChange:c})]}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{"data-testid":`cancel-delete-member`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(j,{"data-testid":`confirm-delete-member`,disabled:o.isPending,variant:`destructive`,onClick:()=>void f(),children:o.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Deleting`})]}):yt(s&&l)})]})]})})},xt=`Disabled from member settings`,St=({open:e,onOpenChange:t,member:n})=>{let r=Xe(),[i,o]=Y.useState(!1);Y.useEffect(()=>{e&&o(!1)},[e]);let s=n.name||n.email||`this member`,c=async()=>{try{await r.mutateAsync({id:n.id,reason:xt,hideComments:i})}catch{a.error(`Couldn’t disable commenting. Please try again.`);return}a.success(`Commenting has been disabled for ${s}.`),t(!1)};return(0,X.jsx)(L,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(F,{"data-testid":`disable-commenting-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(I,{children:`Disable commenting`}),(0,X.jsxs)(N,{children:[(0,X.jsx)(`strong`,{children:s}),` won’t be able to comment in the future. You can re-enable commenting anytime.`]})]}),(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:(0,X.jsx)(`h4`,{className:`text-sm font-medium`,children:`Hide all previous comments`})}),(0,X.jsx)(R,{"aria-label":`Hide all previous comments`,checked:i,"data-testid":`disable-commenting-hide-comments`,disabled:r.isPending,onCheckedChange:o})]}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{"data-testid":`cancel-disable-commenting`,disabled:r.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(j,{"data-testid":`confirm-disable-commenting`,disabled:r.isPending,onClick:()=>void c(),children:r.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Disabling`})]}):`Disable commenting`})]})]})})},Ct=({open:e,onOpenChange:t,memberId:n})=>{let i=r();Y.useEffect(()=>{e&&i.removeQueries({queryKey:[`MemberSigninUrlResponseType`]})},[e,i]);let{data:o,isFetching:s,isError:c}=et(n,{enabled:e,defaultErrorHandler:!1}),l=o?.url??``,u=c||!s&&!c&&!l,[d,f]=Y.useState(!1),p=Y.useRef(null),m=Y.useCallback(()=>{p.current!==null&&(clearTimeout(p.current),p.current=null)},[]);Y.useEffect(()=>{e||(m(),f(!1))},[e,m]),Y.useEffect(()=>m,[m]);let h=async()=>{try{await navigator.clipboard.writeText(l),f(!0),m(),p.current=setTimeout(()=>{f(!1),p.current=null},1e3)}catch{a.error(`Couldn’t copy the impersonation link`)}};return(0,X.jsx)(L,{open:e,onOpenChange:t,children:(0,X.jsxs)(F,{"data-testid":`impersonate-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(I,{children:`Impersonate member`}),(0,X.jsx)(N,{children:`A single-use signin link that works for 24 hours. Anyone with the link can sign in as this member.`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`member-signin-url`,children:`Signin link`}),(0,X.jsx)(H,{"data-testid":`member-signin-url`,id:`member-signin-url`,value:s?`Generating link…`:u?`Failed to generate link`:l,readOnly:!0})]}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{variant:`outline`,onClick:()=>t(!1),children:`Close`}),(0,X.jsx)(j,{disabled:s||u||!l,onClick:()=>void h(),children:s?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Generating link`})]}):d?`Copied`:`Copy link`})]})]})})},wt=({open:e,onOpenChange:t,member:n})=>{let r=We(),i=n.name||n.email||`This member`,o=async()=>{try{await r.mutateAsync({id:n.id}),a.success(`${i} has been signed out from all devices.`),t(!1)}catch{a.error(`Couldn’t sign the member out. Please try again.`)}};return(0,X.jsx)(he,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(B,{"data-testid":`logout-member-modal`,children:[(0,X.jsxs)(V,{children:[(0,X.jsx)(z,{children:`Sign out member from all devices?`}),(0,X.jsxs)(fe,{children:[(0,X.jsx)(`strong`,{children:i}),` will be signed out of all active sessions, and will need to sign in again upon return.`]})]}),(0,X.jsxs)(pe,{children:[(0,X.jsx)(me,{disabled:r.isPending,children:`Cancel`}),(0,X.jsx)(j,{"data-testid":`confirm-logout-member`,disabled:r.isPending,variant:`destructive`,onClick:()=>void o(),children:r.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Signing out`})]}):`Sign out`})]})]})})};function Tt(e){return e.can_comment===!1}function Et(e){return Tt(e)?`Enable commenting`:`Disable commenting`}var Dt=({member:e,allowLeaveWithUnsavedChanges:t})=>{let{data:n}=i(),[r,o]=Y.useState(!1),[s,c]=Y.useState(!1),[l,u]=Y.useState(!1),[d,f]=Y.useState(!1),p=Ke(),m=Be(),h=p.isPending||p.isSuccess&&m,g=Tt(e),_=Et(e),y=e.name||e.email||`this member`;if(!n||!Ne(n))return null;let b=async()=>{if(!g){u(!0);return}try{await p.mutateAsync({id:e.id}),a.success(`Commenting has been enabled for ${y}.`)}catch{a.error(`Couldn’t enable commenting. Please try again.`)}};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(Ie,{children:[(0,X.jsx)(ze,{asChild:!0,children:(0,X.jsx)(j,{"aria-label":`Actions`,className:`size-(--control-height)`,"data-testid":`member-actions`,size:`icon`,variant:`outline`,children:(0,X.jsx)(v,{size:16})})}),(0,X.jsxs)(He,{align:`end`,children:[(0,X.jsx)(q,{"data-testid":`member-actions-impersonate`,onSelect:()=>o(!0),children:`Impersonate`}),(0,X.jsx)(q,{"data-testid":`member-actions-logout`,onSelect:()=>c(!0),children:`Sign out of all devices`}),(0,X.jsx)(q,{"data-testid":`member-actions-commenting`,disabled:h,onSelect:()=>void b(),children:_}),(0,X.jsx)(Ue,{}),(0,X.jsx)(q,{className:`text-destructive focus:text-destructive`,"data-testid":`member-actions-delete`,onSelect:()=>f(!0),children:`Delete member`})]})]}),(0,X.jsx)(Ct,{memberId:e.id,open:r,onOpenChange:o}),(0,X.jsx)(wt,{member:e,open:s,onOpenChange:c}),(0,X.jsx)(St,{member:e,open:l,onOpenChange:u}),(0,X.jsx)(bt,{allowLeaveWithUnsavedChanges:t,member:e,open:d,onOpenChange:f})]})},Z=e(f(),1);function Ot(e){return e?/^(https?:\/\/|\/|#\/)/i.test(e):!1}var kt=new Set([`bif`,`clp`,`djf`,`gnf`,`jpy`,`kmf`,`krw`,`mga`,`pyg`,`rwf`,`ugx`,`vnd`,`vuv`,`xaf`,`xof`,`xpf`]);function At(e,t){let n=kt.has(t.toLowerCase())?e:e/100,r=n%1==0;try{return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:t.toUpperCase(),minimumFractionDigits:r?0:2,maximumFractionDigits:r?0:2}).format(n)}catch{return`${n}`}}function jt(e){return e?.trim()||null}function Mt(e){let t;return e.type===`login_event`&&(t=`logged-in`),e.type===`payment_event`&&(t=`subscriptions`),e.type===`newsletter_event`&&(t=e.data.subscribed?`subscribed-to-email`:`unsubscribed-from-email`),e.type===`subscription_event`&&(t=`subscriptions`,e.data.type===`canceled`&&(t=`canceled-subscription`)),(e.type===`signup_event`||e.type===`subscription_event`&&e.data.type===`created`&&e.data.signup)&&(t=`signed-up`),e.type===`email_opened_event`&&(t=`opened-email`),(e.type===`email_sent_event`||e.type===`automated_email_sent_event`)&&(t=`sent-email`),e.type===`email_delivered_event`&&(t=`received-email`),e.type===`email_failed_event`&&(t=`email-delivery-failed`),e.type===`email_complaint_event`&&(t=`email-delivery-spam`),e.type===`comment_event`&&(t=`comment`),(e.type===`click_event`||e.type===`aggregated_click_event`)&&(t=`click`),e.type===`feedback_event`&&(t=e.data.score===1?`more-like-this`:`less-like-this`),e.type===`donation_event`&&(t=`subscriptions`),(e.type===`gift_purchase_event`||e.type===`gift_redemption_event`||e.type===`gift_ended_event`)&&(t=`gift`),e.type===`email_change_event`&&(t=`email-changed`),`event-${t}`}function Nt(e,t){if(e.type===`signup_event`||e.type===`subscription_event`&&e.data.type===`created`&&e.data.signup)return`signed up`;if(e.type===`login_event`)return`logged in`;if(e.type===`payment_event`)return`made payment`;if(e.type===`newsletter_event`){let n=e.data.newsletter,r=t&&n?.name?n.name:`newsletter`;return e.data.subscribed?`subscribed to ${r}`:`unsubscribed from ${r}`}if(e.type===`subscription_event`){let t=e.data.type;return t===`created`?`started paid subscription`:t===`canceled`?`canceled paid subscription`:t===`reactivated`?`reactivated paid subscription`:t===`expired`?`ended paid subscription`:`changed paid subscription`}if(e.type===`email_opened_event`)return`opened email`;if(e.type===`email_sent_event`)return`sent email`;if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source!==`automation_action_revision`)return`received welcome email (${(t?.slug||``).includes(`paid`)?`Paid`:`Free`})`;let n=jt(t.subject);return n?`received automated email: ${n}`:`received automated email`}if(e.type===`email_delivered_event`)return`received email`;if(e.type===`email_failed_event`)return`bounced email`;if(e.type===`email_complaint_event`)return`email flagged as spam`;if(e.type===`comment_event`)return e.data.parent?`replied to comment`:`commented`;if(e.type===`click_event`)return`clicked link in email`;if(e.type===`aggregated_click_event`){let t=e.data.count?.clicks??1;return t<=1?`clicked link in email`:`clicked ${t} links in email`}if(e.type===`feedback_event`)return e.data.score===1?`more like this`:`less like this`;if(e.type===`email_change_event`)return e.data.from_email&&e.data.to_email?`Email address changed from ${e.data.from_email} to ${e.data.to_email}`:`Email address changed`;if(e.type===`donation_event`)return`Made a one-time payment`;if(e.type===`gift_purchase_event`){let t=e.data.amount,n=e.data.currency,r=e.data.tier_name,i=e.data.duration,a=e.data.cadence;return typeof t==`number`&&n&&r&&typeof i==`number`&&a?`Purchased gift subscription for ${At(t,n)} (${r}, ${i} ${i===1?a:`${a}s`})`:`Purchased gift subscription`}if(e.type===`gift_redemption_event`)return`started gift subscription`;if(e.type===`gift_ended_event`)return`gift subscription expired`}function Pt(e,t){if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source===`automation_action_revision`){let e=jt(t.subject);return e?`received automated email: ${e}`:`received automated email`}}return Nt(e,t)}function Ft(e){if(e.type===`signup_event`||e.type===`subscription_event`||e.type===`donation_event`){let t=e.data.attribution;if(t?.title)return t.title}if(e.type===`comment_event`||e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.title)return t.title}return``}function It(e){let t=e.data.attribution;return t?.referrer_source?{name:t.referrer_source,url:t.referrer_url??null}:null}function Lt(e,t){if(e.type===`signup_event`&&t.paidMembersEnabled){let t=e.data.created_with_status;return t&&t!==`free`?null:`Free`}if(e.type===`gift_redemption_event`)return e.data.tier_name??void 0}function Rt(e){if(e.type===`click_event`)return e.data.link?.to}function zt(e){if(e.type===`comment_event`||e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.url)return t.url}if(e.type===`signup_event`||e.type===`subscription_event`||e.type===`donation_event`){let t=e.data.attribution;if(t?.url)return t.url}}function Bt(e){if(e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.id)return`#/posts/analytics/${t.id}`}if((e.type===`signup_event`||e.type===`subscription_event`)&&e.data.attribution_type===`post`&&e.data.attribution_id)return`#/posts/analytics/${e.data.attribution_id}`}function Vt(e,t){let n=jt(e.data.member?.name),r=e.data.member?n||e.data.member.email||``:e.data.name||e.data.email||``,i=e.data.member?{...e.data.member,name:n??void 0}:e.data.member;return{id:e.data.id,memberId:e.data.member_id??e.data.member?.id,member:i,emailId:e.data.email_id,email:e.data.email,icon:Mt(e),subject:r,action:Nt(e,t.hasMultipleNewsletters),actionTitle:Pt(e,t.hasMultipleNewsletters),join:`–`,object:Ft(e),source:It(e),info:Lt(e,t),description:Rt(e),url:zt(e),route:Bt(e),timestamp:e.data.created_at}}var Ht=({iconName:e})=>{let t={className:`shrink-0 text-muted-foreground`,size:16};switch(e){case`event-signed-up`:return(0,X.jsx)(O,{...t});case`event-logged-in`:return(0,X.jsx)(se,{...t});case`event-subscriptions`:return(0,X.jsx)(S,{...t});case`event-canceled-subscription`:return(0,X.jsx)(ie,{...t});case`event-subscribed-to-email`:return(0,X.jsx)(ne,{...t});case`event-unsubscribed-from-email`:return(0,X.jsx)(te,{...t});case`event-opened-email`:return(0,X.jsx)(le,{...t});case`event-received-email`:return(0,X.jsx)(w,{...t});case`event-sent-email`:return(0,X.jsx)(g,{...t});case`event-email-delivery-failed`:return(0,X.jsx)(oe,{...t});case`event-email-delivery-spam`:return(0,X.jsx)(x,{...t});case`event-email-changed`:return(0,X.jsx)(ue,{...t});case`event-comment`:return(0,X.jsx)(re,{...t});case`event-click`:return(0,X.jsx)(C,{...t});case`event-more-like-this`:return(0,X.jsx)(ce,{...t});case`event-less-like-this`:return(0,X.jsx)(_,{...t});case`event-gift`:return(0,X.jsx)(k,{...t});default:return(0,X.jsx)(b,{...t})}},Ut=({memberId:e})=>(0,X.jsx)(`a`,{className:`block pt-3 font-medium text-primary hover:underline`,"data-testid":`member-activity-view-all`,href:`#/members-activity?member=${e}`,children:`View all member activity →`}),Wt=`All events related to this member will be shown here.`,Gt=e=>e?e.charAt(0).toUpperCase()+e.slice(1):``;function Kt(e){if(e&&typeof e==`object`){let t=e.subject;return t?`“${t}”`:`Email`}}var qt=({event:e})=>{if(!e.action)return null;let t=Kt(e.email),n=e.object&&(e.route||Ot(e.url)),r=!n&&t,i=e.timestamp?(0,Z.default)(e.timestamp).fromNow():`—`;return(0,X.jsxs)(`div`,{className:`flex items-start gap-3 py-3`,"data-testid":`member-activity-event`,children:[(0,X.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-muted`,children:(0,X.jsx)(Ht,{iconName:e.icon})}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:[(0,X.jsxs)(`div`,{className:`text-sm leading-snug`,children:[(0,X.jsx)(`span`,{"data-testid":`member-activity-action`,children:Gt(e.action)}),e.info&&(0,X.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,e.info,`)`]}),n&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),e.route?(0,X.jsx)(`a`,{className:`hover:underline`,href:e.route,children:e.object}):(0,X.jsx)(`a`,{className:`hover:underline`,href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:e.object})]}),r&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:t})]})]}),e.description&&(0,X.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.description}),(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i})]})]})},Jt=({memberId:e,hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})=>{let{data:i,isLoading:a}=nt(e??``,{limit:`5`,enabled:!!e}),o=(i?.events??[]).map(e=>Vt(e,{hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})),s=new Set;return e?(0,X.jsxs)(`section`,{"aria-labelledby":`member-activity-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-activity-heading`,children:`Activity`}),(0,X.jsx)(G,{children:(0,X.jsxs)(W,{className:`pt-3`,children:[a?(0,X.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,X.jsx)(xe,{className:`h-10`}),(0,X.jsx)(xe,{className:`h-10`}),(0,X.jsx)(xe,{className:`h-10`})]}):o.length===0?(0,X.jsx)(`p`,{className:`py-4 text-center text-sm text-muted-foreground`,"data-testid":`member-activity-empty`,children:`No activity yet`}):(0,X.jsx)(`div`,{className:`divide-y divide-border`,children:o.map(e=>{let t=e.id||`${e.timestamp??`?`}-${e.icon}-${e.action}`,n=t,r=1;for(;s.has(n);)n=`${t}#${r}`,r+=1;return s.add(n),(0,X.jsx)(qt,{event:e},n)})}),!a&&o.length>0&&(0,X.jsx)(Ut,{memberId:e})]})})]}):(0,X.jsxs)(`section`,{"aria-labelledby":`member-activity-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-activity-heading`,children:`Activity`}),(0,X.jsx)(G,{children:(0,X.jsx)(W,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(Oe,{description:Wt,title:`Activity`,children:(0,X.jsx)(b,{})})})})})]})},Yt=e(st(),1),Xt=dt(`address`)??[];function Q(e){return{name:(e.name??``).trim(),email:(e.email??``).trim(),note:e.note??``,labels:(e.labels??[]).map(e=>({name:e.name,slug:e.slug})).sort((e,t)=>e.slug<t.slug?-1:+(e.slug>t.slug)),newsletters:(e.newsletters??[]).map(e=>e.id).sort()}}function Zt(e){let t={};for(let[n,r]of Object.entries(e??{}))if(typeof r==`string`&&r.trim()!==``)t[n]=r.trim();else if(typeof r==`object`&&r&&!Array.isArray(r)){let e=$t(r);e&&(t[n]=e)}return t}function Qt(e){let t={};for(let{key:n}of Xt){let r=e[n];typeof r==`string`&&(t[n]=r.trim())}return Object.values(t).some(e=>e!==``)?t:void 0}function $t(e){let t={};for(let{key:n}of Xt){let r=e[n];typeof r==`string`&&r.trim()!==``&&(t[n]=r.trim())}return Object.keys(t).length?t:void 0}function en(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t].sort()}function tn(e,t){let n=e.trim();return t!==void 0&&n===t.trim()?!0:Yt.default.isEmail(n)}function nn(e,t,n){return t?e.trim()===``?`Email is required.`:tn(e,n)?null:`Invalid email.`:null}function rn(e){if(!e?.suppressed)return null;let t=e.info;if(!t)return{label:null};let{reason:n,timestamp:r}=t,i=(0,Z.default)(new Date(r)).format(`D MMM YYYY`);switch(n){case`fail`:return{reason:n,label:`Bounced on ${i}`};case`spam`:return{reason:n,label:`Flagged as spam on ${i}`};default:return{reason:n,label:`Email disabled on ${i}`}}}function an(e){return e?e.filter(e=>e.subscribe_on_signup===!0&&e.visibility===`members`).map(e=>e.id):[]}function on(e){return 500-[...e].length}function sn(e,t,n){let r=pn(t),i={id:e,name:r.name,email:r.email,note:r.note,labels:r.labels};return ct(r.newsletters,n.newsletters)||(i.newsletters=r.newsletters.map(e=>({id:e}))),i}function cn(e){return typeof e==`string`?e.trim()||void 0:Qt(e)}function ln(e,t,n){return{id:e,custom_fields:{[t]:cn(n)??null}}}function un(e,t){let n={};for(let r of t){let t=e[r.key],i=t===void 0?void 0:cn(t);if(i===void 0)continue;let a=ut[r.type];if(!a)continue;let o=a.value.safeParse(i);if(!o.success)for(let e of o.error.issues){let t=[r.key,...e.path].join(`.`);n[t]??=e.message}}return n}function dn(e){let t=e?.data,n={};for(let e of t?.errors??[])e.property?.startsWith(`custom_fields.`)&&(n[e.property.slice(14)]=e.context||e.message||`Invalid value.`);return Object.keys(n).length?n:void 0}function fn(e,t){return e.map(e=>t.get(e)??{name:e,slug:e})}function pn(e){return{name:e.name.trim(),email:e.email.trim(),note:e.note,labels:e.labels,newsletters:e.newsletters}}function mn(e,t){return!e||!!t&&ct(pn(e),t)}var hn=({message:e})=>e?(0,X.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:e}):null,gn=({inputId:e,value:t,errors:n,disabled:r,onChange:i})=>(0,X.jsx)(`div`,{className:`grid gap-x-4 gap-y-3 md:grid-cols-2`,children:Xt.map(({key:a,label:o})=>{let s=`${e}-${a}`,c=n?.[a];return(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:s,children:o}),(0,X.jsx)(H,{"aria-invalid":c?!0:void 0,disabled:r,id:s,value:t[a]??``,onChange:e=>i({...t,[a]:e.target.value})}),(0,X.jsx)(hn,{message:c})]},a)})});function _n(e){return null}var vn=({field:e,inputId:t,value:n,errors:r,disabled:i,onChange:a})=>{let o=r?.[``],{input:s}=ft(e);switch(s){case`text`:return(0,X.jsx)(H,{"aria-invalid":o?!0:void 0,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`textarea`:return(0,X.jsx)(Me,{"aria-invalid":o?!0:void 0,className:`max-w-full resize-y`,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`address`:return(0,X.jsx)(gn,{disabled:i,errors:r,inputId:t,value:typeof n==`object`&&n?n:{},onChange:a});default:return _n(s)}},yn=({memberId:e,field:t,initialValue:n,onClose:r})=>{let i=ft(t).input===`address`,[o,s]=Y.useState(n??(i?{}:``)),[c,l]=Y.useState(!1),[u,d]=Y.useState(),f=Ye(),p=un({[t.key]:o},[t]),m={...c?p:{},...u},h=Object.fromEntries(Object.entries(m).map(([e,n])=>[e===t.key?``:e.slice(t.key.length+1),n])),g=`member-custom-field-${t.key}`,_=!ct(Zt({[t.key]:o}),Zt({[t.key]:n}));return(0,X.jsx)(L,{open:!0,onOpenChange:e=>{!e&&!f.isPending&&r()},children:(0,X.jsxs)(F,{"data-testid":`member-custom-field-edit-modal`,onEscapeKeyDown:e=>{(_||f.isPending)&&e.preventDefault()},onInteractOutside:e=>{(_||f.isPending)&&e.preventDefault()},children:[(0,X.jsx)(P,{children:(0,X.jsx)(I,{children:t.name})}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[!i&&(0,X.jsx)(K,{className:`sr-only`,htmlFor:g,children:t.name}),(0,X.jsx)(vn,{disabled:f.isPending,errors:h,field:t,inputId:g,value:o,onChange:e=>{d(void 0),s(e)}}),(0,X.jsx)(hn,{message:h[``]})]}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{disabled:f.isPending,variant:`outline`,onClick:r,children:`Cancel`}),(0,X.jsx)(j,{className:`min-w-16`,disabled:f.isPending,onClick:()=>{if(!f.isPending){if(!_){r();return}if(Object.keys(p).length>0){l(!0);return}f.mutate(ln(e,t.key,o),{onSuccess:()=>{a.success(`${t.name} saved`),r()},onError:e=>{let n=dn(e);d(n),n||a.error(`${t.name} couldn’t be saved`)}})}},children:f.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):`Save`})]})]})})},bn=({memberId:e,customFields:t,disabled:n})=>{let{data:r,isLoading:i}=pt(),a=r?.members_custom_fields??[],o=Zt(t),[s,c]=Y.useState(null);return i||a.length===0?null:(0,X.jsxs)(`section`,{"aria-labelledby":`member-custom-fields-heading`,className:`flex flex-col gap-3`,"data-testid":`member-custom-fields-field`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-custom-fields-heading`,children:`Custom fields`}),(0,X.jsx)(G,{children:(0,X.jsx)(W,{className:`px-6 py-4`,children:(0,X.jsx)(`ul`,{children:a.map(e=>{let t=mt(e.type,o[e.key])||null;return(0,X.jsx)(`li`,{className:`border-b border-border transition-colors last:border-b-0 hover:border-b-transparent [&:has(+li:hover)]:border-b-transparent`,children:(0,X.jsxs)(`button`,{"aria-label":t?`Edit ${e.name}: ${t}`:`Edit ${e.name}`,className:`group -mx-3 flex w-[calc(100%+1.5rem)] items-center justify-between gap-4 rounded-md p-3 text-left transition-colors hover:bg-table-row-hover disabled:cursor-not-allowed disabled:opacity-50`,disabled:n,type:`button`,onClick:()=>{window.getSelection()?.toString()||c(e)},children:[(0,X.jsxs)(`span`,{className:`min-w-0`,children:[(0,X.jsx)(`span`,{className:`block text-sm text-muted-foreground`,children:e.name}),t?(0,X.jsx)(`span`,{className:`block break-words select-text`,children:t}):(0,X.jsx)(`span`,{className:`block text-muted-foreground`,children:`–`})]}),(0,X.jsx)(E,{"aria-hidden":`true`,className:`shrink-0 text-muted-foreground opacity-0 transition-all group-hover:opacity-100 group-focus-visible:opacity-100`,size:16})]})},e.key)})})})}),s&&(0,X.jsx)(yn,{field:s,initialValue:o[s.key],memberId:e,onClose:()=>c(null)},s.key)]})},xn=({labels:e,disabled:t,onChange:n})=>{let r=e.map(e=>e.slug),i=Y.useRef(e);i.current=e;let a=Y.useRef(new Map),o=e=>{for(let t of e)a.current.set(t.slug,{name:t.name,slug:t.slug})};o(e);let s=ht({selectedSlugs:r,onSelectionChange:e=>n(fn(e,a.current))});o(s.labels);let c=async e=>{let t=await s.createLabel(e);if(t){let e={name:t.name,slug:t.slug};a.current.set(t.slug,e),n([...i.current.filter(e=>e.slug!==t.slug),e])}return t};return(0,X.jsx)(`div`,{className:t?`pointer-events-none opacity-60`:void 0,"data-testid":`member-labels-field`,...t?{inert:``}:{},children:(0,X.jsx)(gt,{isCreating:s.isCreating,labels:s.labels,optionSource:s.optionSource,placeholder:``,resolvedSelectedLabels:s.resolvedSelectedLabels,selectedSlugs:r,onCreate:c,onDelete:s.deleteLabel,onEdit:s.editLabel,onToggle:s.toggleLabel})})},Sn=({draft:e,emailError:t,disabled:n,onChange:r,onEmailBlur:i,onNameBlur:a})=>{let o=on(e.note),s=500-o,c=o<0?`text-destructive`:s>=500*.8?`text-state-warning`:`text-state-success`;return(0,X.jsxs)(`div`,{className:`grid items-stretch gap-6 md:grid-cols-2`,"data-testid":`member-detail-form`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`member-name`,children:`Name`}),(0,X.jsx)(H,{disabled:n,id:`member-name`,value:e.name,onBlur:a,onChange:e=>r({name:e.target.value})})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`member-email`,children:`Email`}),(0,X.jsx)(H,{"aria-invalid":!!t,disabled:n,id:`member-email`,type:`email`,value:e.email,onBlur:i,onChange:e=>r({email:e.target.value})}),t&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:t})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{children:`Labels`}),(0,X.jsx)(xn,{disabled:n,labels:e.labels,onChange:e=>r({labels:e})})]})]}),(0,X.jsxs)(`div`,{className:`flex min-h-0 flex-col gap-1.5`,children:[(0,X.jsxs)(K,{htmlFor:`member-note`,children:[`Note `,(0,X.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(not visible to member)`})]}),(0,X.jsxs)(je,{className:`flex-1`,children:[(0,X.jsx)(Ae,{className:`h-full`,disabled:n,id:`member-note`,value:e.note,onChange:e=>r({note:e.target.value})}),(0,X.jsx)(ke,{align:`block-end`,className:`justify-end`,children:(0,X.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Maximum: `,(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:500}),` `,`characters. You’ve used`,` `,(0,X.jsx)(`span`,{className:d(`font-semibold`,c),children:s})]})})]})]})]})};function Cn(e){if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function wn(e){let t=Cn(e);return t?t.country_code===`US`&&t.region?`${t.region}, US`:t.country||`Unknown location`:`Unknown location`}function Tn(e){let t=e?.referrer_source;return!t||t===`Created manually`?null:t}var En=e=>Z.default.utc(e).format(`D MMM YYYY`),$=({icon:e,children:t})=>(0,X.jsxs)(`p`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e}),(0,X.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]}),Dn=e=>e.split(` `)[0]||``,On=({member:e,draftName:t,draftEmail:n,engagementEnabled:r})=>{let i=(t??e?.name??``).trim(),a=(n??e?.email??``).trim(),o=i||a||`New member`,s=!e;return(0,X.jsxs)(`aside`,{className:`flex w-full shrink-0 flex-col gap-6 lg:w-80`,"data-testid":`member-detail-sidebar`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,X.jsx)(rt,{className:`size-12 min-w-12 [&_span]:text-lg`,email:a||void 0,name:i||void 0,src:e?.avatar_image}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`h2`,{className:`truncate text-xl font-semibold`,children:o}),i&&a&&(0,X.jsx)(`a`,{className:`block truncate text-muted-foreground hover:underline`,href:`mailto:${a}`,children:a}),!i&&a&&(0,X.jsx)(`span`,{className:`block truncate text-muted-foreground`,children:a})]})]}),!s&&e&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 text-sm`,children:[(0,X.jsx)($,{icon:(0,X.jsx)(ae,{size:16}),children:(0,X.jsx)(`span`,{"data-testid":`member-detail-location`,children:wn(e.geolocation)})}),(0,X.jsx)($,{icon:(0,X.jsx)(y,{size:16}),children:e.last_seen_at?`Last seen on ${En(e.last_seen_at)}`:`Not seen yet`}),e.can_comment===!1&&(0,X.jsx)($,{icon:(0,X.jsx)(ee,{size:16}),children:`Comments disabled`})]}),(0,X.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 text-sm`,children:[(0,X.jsx)(`h3`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Signup info`}),(0,X.jsxs)($,{icon:(0,X.jsx)(O,{size:16}),children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:En(e.created_at)})]}),(()=>{let t=Tn(e.attribution);return t?(0,X.jsxs)($,{icon:(0,X.jsx)(A,{size:16}),children:[`Source —`,` `,(0,X.jsx)(`span`,{className:`text-foreground`,title:t,children:t})]}):null})(),e.attribution?.title&&(0,X.jsxs)($,{icon:(0,X.jsx)(de,{size:16}),children:[`Page —`,` `,Ot(e.attribution.url)?(0,X.jsx)(`a`,{className:`truncate text-foreground hover:underline`,href:e.attribution.url,rel:`noopener noreferrer`,target:`_blank`,title:e.attribution.title,children:e.attribution.title}):(0,X.jsx)(`span`,{className:`truncate text-foreground`,title:e.attribution.title,children:e.attribution.title})]})]}),r&&(0,X.jsxs)(`section`,{className:`mt-4 flex flex-col gap-3 text-sm`,"data-testid":`member-detail-engagement`,children:[(0,X.jsx)(`h4`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Engagement`}),(e.email_count??0)===0?(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:i?`We’ll show ${Dn(i)}’s email stats here once they receive their first newsletter.`:`We’ll show this member’s email stats here once they receive their first newsletter.`}):(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails received`}),(0,X.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_count})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails opened`}),(0,X.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_opened_count??0})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Average open rate`}),e.email_open_rate===null||e.email_open_rate===void 0?(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`This metric is calculated once a member has received 5 newsletters.`}):(0,X.jsxs)(`p`,{className:`text-2xl font-semibold`,children:[e.email_open_rate,(0,X.jsx)(`span`,{className:`text-base font-normal text-muted-foreground`,children:`%`})]})]})]})]})]})]})},kn=({memberId:e,emailSuppression:t,subscribedIds:n,disabled:r,onChange:i})=>{let o=e?rn(t):null,s=Fe(),{data:c,isLoading:l}=Pe({searchParams:{filter:`status:active`,limit:`50`}}),u=c?.newsletters??[],d=Be(),f=s.isPending||s.isSuccess&&d;return!o&&(l||u.length===0)?null:(0,X.jsxs)(`section`,{"aria-labelledby":`member-newsletters-heading`,className:`flex flex-col gap-3`,"data-testid":`member-newsletters-field`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-newsletters-heading`,children:`Newsletters`}),(0,X.jsx)(G,{children:(0,X.jsx)(W,{className:`p-6`,children:o?(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,"data-testid":`member-suppression-banner`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,X.jsx)(oe,{className:`mt-0.5 shrink-0 text-muted-foreground`,size:20}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`font-medium`,children:`Email disabled`}),o.label&&(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:o.label}),(0,X.jsx)(`a`,{className:`text-sm text-muted-foreground hover:underline`,href:`https://ghost.org/help/disabled-emails`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]}),(0,X.jsx)(j,{disabled:r||f,onClick:()=>{e&&s.mutate({id:e},{onSuccess:()=>a.success(`Email re-enabled successfully`),onError:()=>a.error(`Failed to re-enable email. Please try again.`)})},children:f?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Re-enabling email`})]}):`Re-enable email`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`ul`,{className:`divide-y divide-border`,children:u.map(e=>{let t=n.includes(e.id);return(0,X.jsxs)(`li`,{className:`flex items-center justify-between gap-4 py-3 first:pt-0 last:pb-0`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`font-medium`,children:e.name}),e.description&&(0,X.jsx)(`p`,{className:`truncate text-sm text-muted-foreground`,children:e.description})]}),(0,X.jsx)(R,{"aria-label":`Subscribe to ${e.name}`,checked:t,"data-testid":`member-subscription-toggle`,disabled:r,onCheckedChange:()=>i(en(n,e.id))})]},e.id)})}),(0,X.jsxs)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:[`If disabled, member will `,(0,X.jsx)(`em`,{children:`not`}),` receive newsletter emails`]})]})})})]})},An=`complimentary`,jn=`gift subscription`;function Mn(e){if(e.id)return`paid`;let t=e.plan?.nickname?.toLowerCase()??``;return t===An?`complimentary`:t===jn?`gift`:`paid`}function Nn(e){return e===`year`?`yearly`:`monthly`}function Pn(e){if(e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`))return`Free trial`;let t=e.price?.nickname;return t&&t!==`Monthly`&&t!==`Yearly`?t:null}function Fn(e){return e.status===`canceled`||e.cancel_at_period_end?`Canceled`:`Active`}var In=e=>e?(0,Z.default)(new Date(e)).format(`D MMM YYYY`):``,Ln=e=>e?(0,Z.default)(e).utc().format(`D MMM YYYY`):``;function Rn(e){let t=Mn(e);if(t===`complimentary`||t===`gift`){let t=Ln(e.tier?.expiry_at);return t?`Expires ${t}`:``}let n=e.status===`canceled`&&!e.cancel_at_period_end?``:In(e.current_period_end);return e.status===`canceled`?n?`Ended ${n}`:``:e.cancel_at_period_end?n?`Has access until ${n}`:``:e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`)?`Ends ${In(e.trial_end_at)}`:n?`Renews ${n}`:``}function zn(e){let t=[],n=new Map;for(let r of e){if(!r.price)continue;let e=r.tier??r.price.tier;if(!e?.id)continue;let i=n.get(e.id);i||(i={tier:e,subscriptions:[]},n.set(e.id,i),t.push(i)),i.subscriptions.push(r)}return t}var Bn=[`forever`,`week`,`month`,`half-year`,`year`,`custom`];function Vn(e){return Bn.includes(e)}function Hn(e,t){switch(e){case`forever`:return null;case`week`:return Z.default.utc().add(7,`days`).startOf(`day`).toISOString();case`month`:return Z.default.utc().add(1,`month`).startOf(`day`).toISOString();case`half-year`:return Z.default.utc().add(6,`months`).startOf(`day`).toISOString();case`year`:return Z.default.utc().add(1,`year`).startOf(`day`).toISOString();case`custom`:return t?(0,Z.default)(t,`YYYY-MM-DD`).startOf(`day`).endOf(`day`).set(`millisecond`,0).add((0,Z.default)().utcOffset(),`minutes`).toISOString():null}}var Un=new Set([`active`,`trialing`,`unpaid`,`past_due`]),Wn=[{value:`forever`,label:`Forever`},{value:`week`,label:`1 Week`},{value:`month`,label:`1 Month`},{value:`half-year`,label:`6 Months`},{value:`year`,label:`1 Year`},{value:`custom`,label:`Custom`}],Gn=({open:e,onOpenChange:t,member:n})=>{let{data:r,isLoading:i}=ot({searchParams:{filter:`type:paid+active:true`,limit:`all`}}),o=r?.tiers??[],[s,c]=Y.useState(``),[l,u]=Y.useState(`forever`),[d,f]=Y.useState(``);Y.useEffect(()=>{e&&(c(``),u(`forever`),f(``))},[e]);let p=qe(),m=Ye(),[h,g]=Y.useState(!1),_=(n.subscriptions??[]).filter(e=>Mn(e)===`paid`&&Un.has(e.status)),v=(0,Z.default)().format(`YYYY-MM-DD`),y=!!s&&!h&&(l!==`custom`||!!d),b=async()=>{if(y){g(!0);try{for(let e of _)await p.mutateAsync({memberId:n.id,subscriptionId:e.id,status:`canceled`});let e=Hn(l,l===`custom`?d:null),r=e?{id:s,expiry_at:e}:{id:s};await m.mutateAsync({id:n.id,...n.email?{email:n.email}:{},tiers:[r]}),a.success(`Complimentary subscription added`),t(!1)}catch{a.error(`Couldn’t add complimentary subscription`)}finally{g(!1)}}};return(0,X.jsx)(L,{open:e,onOpenChange:e=>{h||t(e)},children:(0,X.jsxs)(F,{"data-testid":`add-comp-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(I,{children:`Add complimentary subscription`}),(0,X.jsx)(N,{children:`Grants this member access to a paid tier for the chosen duration. Any active paid subscription is canceled first.`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`comp-tier`,children:`Tier`}),(0,X.jsxs)(be,{value:s,onValueChange:c,children:[(0,X.jsx)(ve,{"data-testid":`comp-tier-select`,disabled:i||h,id:`comp-tier`,children:(0,X.jsx)(ye,{placeholder:i?`Loading tiers…`:`Select a tier`})}),(0,X.jsx)(_e,{children:o.map(e=>(0,X.jsx)(ge,{"data-tier-id":e.id,value:e.id,children:e.name},e.id))})]})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`comp-duration`,children:`Duration`}),(0,X.jsxs)(be,{value:l,onValueChange:e=>{Vn(e)&&u(e)},children:[(0,X.jsx)(ve,{"data-testid":`comp-duration-select`,disabled:h,id:`comp-duration`,children:(0,X.jsx)(ye,{})}),(0,X.jsx)(_e,{children:Wn.map(e=>(0,X.jsx)(ge,{value:e.value,children:e.label},e.value))})]})]}),l===`custom`&&(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`comp-custom-date`,children:`Expires on`}),(0,X.jsx)(H,{"data-testid":`comp-custom-date`,disabled:h,id:`comp-custom-date`,min:v,type:`date`,value:d,onChange:e=>f(e.target.value)})]})]}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{disabled:h,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(j,{"data-testid":`comp-add-confirm`,disabled:!y,onClick:()=>void b(),children:h?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Adding`})]}):`Add subscription`})]})]})})},Kn=({memberId:e,subscription:t})=>{let n=qe(),r=Be(),i=n.isPending||n.isSuccess&&r,o=t.status===`canceled`,s=t.cancel_at_period_end,c=(r,i,o)=>{n.mutate({memberId:e,subscriptionId:t.id,cancelAtPeriodEnd:r},{onSuccess:()=>a.success(i),onError:()=>a.error(o)})};return(0,X.jsxs)(Ie,{children:[(0,X.jsx)(ze,{asChild:!0,children:(0,X.jsx)(j,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:i,size:`sm`,variant:`outline`,children:i?(0,X.jsx)(U,{size:`sm`}):(0,X.jsx)(v,{})})}),(0,X.jsxs)(He,{align:`end`,children:[(0,X.jsx)(q,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/customers/${t.customer.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe customer`})}),(0,X.jsx)(Ue,{}),(0,X.jsx)(q,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/subscriptions/${t.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe subscription`})}),!o&&(s?(0,X.jsx)(q,{"data-testid":`continue-subscription`,onSelect:()=>c(!1,`Subscription continued`,`Couldn’t continue subscription`),children:`Continue subscription`}):(0,X.jsx)(q,{className:`text-destructive focus:text-destructive`,"data-testid":`cancel-subscription`,onSelect:()=>c(!0,`Subscription canceled`,`Couldn’t cancel subscription`),children:`Cancel subscription`}))]})]})},qn=({member:e,tierId:t})=>{let n=Ye(),[r,i]=Y.useState(!1),o=Be(),s=n.isPending||n.isSuccess&&o;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(Ie,{children:[(0,X.jsx)(ze,{asChild:!0,children:(0,X.jsx)(j,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:s,size:`sm`,variant:`outline`,children:s?(0,X.jsx)(U,{size:`sm`}):(0,X.jsx)(v,{})})}),(0,X.jsx)(He,{align:`end`,children:(0,X.jsx)(q,{className:`text-destructive focus:text-destructive`,"data-testid":`remove-complimentary`,onSelect:()=>i(!0),children:`Remove complimentary subscription`})})]}),(0,X.jsx)(he,{open:r,onOpenChange:e=>{n.isPending||i(e)},children:(0,X.jsxs)(B,{children:[(0,X.jsxs)(V,{children:[(0,X.jsx)(z,{children:`Remove complimentary subscription?`}),(0,X.jsx)(fe,{children:`The member will lose access to this tier immediately.`})]}),(0,X.jsxs)(pe,{children:[(0,X.jsx)(me,{disabled:n.isPending,children:`Cancel`}),(0,X.jsx)(j,{"data-testid":`confirm-remove-complimentary`,disabled:n.isPending,variant:`destructive`,onClick:()=>{let r=(e.tiers??[]).filter(e=>e.id!==t).map(e=>({id:e.id,expiry_at:e.expiry_at??null}));n.mutate({id:e.id,email:e.email,tiers:r},{onSuccess:()=>{a.success(`Complimentary subscription removed`),i(!1)},onError:()=>a.error(`Couldn’t remove complimentary subscription`)})},children:n.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Removing`})]}):`Remove`})]})]})})]})},Jn=e=>{let t=e/100;return t.toLocaleString(void 0,t%1==0?void 0:{minimumFractionDigits:2,maximumFractionDigits:2})},Yn=({sub:e,kind:t})=>{if(t===`complimentary`||t===`gift`)return(0,X.jsx)(`div`,{className:`flex size-20 shrink-0 items-center justify-center rounded-lg bg-muted text-center text-sm font-medium text-muted-foreground`,children:t===`complimentary`?`Comp`:`Gift`});let n=o(e.price.currency),r=Jn(e.price.amount),i=Nn(e.price.interval);return(0,X.jsxs)(`div`,{className:`flex size-20 shrink-0 flex-col items-center justify-center rounded-lg bg-muted text-foreground`,children:[(0,X.jsxs)(`div`,{className:`flex items-start leading-none`,children:[(0,X.jsx)(`span`,{className:`mt-1 text-sm font-semibold`,children:n}),(0,X.jsx)(`span`,{className:`text-3xl font-semibold tracking-tight`,children:r})]}),(0,X.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:i})]})},Xn=e=>e?Z.default.utc(e).format(`D MMM YYYY`):``,Zn=({sub:e})=>{let t=Xn(e.start_date),n=e.attribution?.referrer_source,r=n&&n!==`Unknown`,i=e.attribution?.title?{title:e.attribution.title,url:e.attribution.url??null}:null;return(0,X.jsxs)(`div`,{className:`mt-3 space-y-1 border-t border-border pt-3 text-sm text-muted-foreground`,children:[t&&(0,X.jsxs)(`p`,{children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:t})]}),r&&(0,X.jsxs)(`p`,{children:[`Source — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:n})]}),i&&(0,X.jsxs)(`p`,{children:[`Page —`,` `,i.url?(0,X.jsx)(`a`,{className:`text-foreground hover:underline`,href:i.url,rel:`noopener noreferrer`,target:`_blank`,children:i.title}):(0,X.jsx)(`span`,{className:`text-foreground`,children:i.title})]})]})},Qn=({member:e,sub:t,showDivider:n})=>{let[r,i]=Y.useState(!1),a=Mn(t),o=Fn(t),s=Rn(t),c=Pn(t);return(0,X.jsxs)(`div`,{className:d(`flex items-start justify-between gap-4 py-5 first:pt-0 last:pb-0`,n&&`border-t border-border`),"data-testid":`member-subscription`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-4`,children:[(0,X.jsx)(Yn,{kind:a,sub:t}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1 pt-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`min-w-0 truncate font-semibold`,"data-testid":`member-subscription-tier`,children:t.tier?.name??`Subscription`}),(0,X.jsx)(Le,{"data-testid":`member-subscription-status`,variant:o===`Canceled`?`secondary`:`success`,children:o})]}),(c||s)&&(0,X.jsxs)(`div`,{className:`mt-1 text-sm`,children:[c&&(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:c}),c&&s&&(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:` – `}),s&&(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:s})]}),(0,X.jsxs)(`button`,{"aria-expanded":r,className:`mt-1 inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline`,"data-testid":`member-subscription-details-toggle`,type:`button`,onClick:()=>i(e=>!e),children:[`Details`,(0,X.jsx)(T,{className:d(`transition-transform`,r&&`rotate-180`),size:14})]}),r&&(0,X.jsx)(Zn,{sub:t})]})]}),a===`paid`&&(0,X.jsx)(Kn,{memberId:e.id,subscription:t}),a===`complimentary`&&t.tier?.id&&(0,X.jsx)(qn,{member:e,tierId:t.tier.id})]})},$n=({member:e,canAddComp:t})=>{let[n,r]=Y.useState(!1);if(!e)return(0,X.jsx)(G,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(W,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(Oe,{title:`No subscriptions`,children:(0,X.jsx)(S,{})})})})});let i=zn(e.subscriptions??[]),a=i.length>0,o=t&&(e.tiers?.length??0)===0,s=o?(0,X.jsxs)(j,{"data-testid":`add-complimentary`,variant:`outline`,onClick:()=>r(!0),children:[(0,X.jsx)(D,{className:`mr-1`,size:16}),`Add complimentary subscription`]}):null;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(W,{className:`pt-6`,children:a?(0,X.jsxs)(X.Fragment,{children:[i.map(t=>(0,X.jsxs)(`div`,{className:`flex flex-col`,children:[t.subscriptions.map((n,r)=>(0,X.jsx)(Qn,{member:e,showDivider:r>0,sub:n},n.id||`${t.tier.id}-${r}`)),t.subscriptions.length>1&&(0,X.jsxs)(`div`,{className:`pt-3 text-sm text-muted-foreground`,children:[t.subscriptions.length,` subscriptions`]})]},t.tier.id)),s&&(0,X.jsx)(`div`,{className:`mt-4 flex justify-center border-t border-border pt-4`,children:s})]}):(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:[(0,X.jsx)(Oe,{title:`No subscriptions`,children:(0,X.jsx)(S,{})}),s]})})}),o&&(0,X.jsx)(Gn,{member:e,open:n,onOpenChange:r})]})};function er(e){let t=new URLSearchParams(e),n=t.get(`back`);if(n&&n.startsWith(`/members`))return n;let r=t.get(`post`);return r?`/members?post=${encodeURIComponent(r)}`:`/members`}var tr=`new`,nr=({paidMembersEnabled:e,newslettersUiEnabled:t,engagementEnabled:n})=>{let{member_id:r=``}=s(),i=l(),o=u(),d=er(i.search),f=r===tr,g=Qe(`membersCustomFields`),{data:_,isLoading:v,error:y,refetch:b}=$e(r,{enabled:!!r&&!f,searchParams:{include:g?`tiers,custom_fields`:`tiers`},defaultErrorHandler:!1}),x=_?.members?.[0],ee=!f&&!v&&!!y,te=!f&&!v&&!y&&!x,ne=Ye(),S=Ze(),C=f?S:ne,{data:re}=ot({searchParams:{filter:`type:paid+active:true`,limit:`all`},enabled:e}),ie=(re?.tiers?.length??0)>0,{data:w}=Pe({searchParams:{filter:`status:active`,limit:`50`}}),ae=w!==void 0,oe=(w?.newsletters?.length??0)>1,se=(re?.tiers?.length??0)>1,[T,E]=Y.useState(void 0),D=Y.useRef(void 0),O=Y.useRef(void 0),k=Y.useRef(!1);Y.useEffect(()=>{if(f){if(D.current!==tr){D.current=tr,k.current=!1;let e=Q({});O.current=e,E(e)}return}if(!x)return;let e=Q(x);if(D.current!==x.id){D.current=x.id,O.current=e,E(e);return}let t=O.current;O.current=e,E(n=>mn(n,t)?e:n)},[x,f]),Y.useEffect(()=>{if(!f||k.current||!w?.newsletters)return;k.current=!0;let e=an(w.newsletters);if(e.length===0)return;let t={...O.current??Q({}),newsletters:[...e].sort()};O.current=t,E(t=>t&&{...t,newsletters:[...e].sort()})},[f,w]);let ce=f?O.current:x?Q(x):void 0,A=!!T&&!!ce&&!ct(pn(T),ce),{dialogProps:le,bypassNextNavigation:ue}=lt({when:A,confirmUnloadWhen:C.isPending||A}),de=!!T&&tn(T.email,x?.email??void 0),[M,N]=Y.useState(!1);Y.useEffect(()=>{N(!1)},[x?.id,f]);let P=T?nn(T.email,M,x?.email??void 0):null,[F,I]=Y.useState({name:``,email:``});Y.useEffect(()=>{if(f){I({name:``,email:``});return}x&&I({name:x.name??``,email:x.email??``})},[x?.id,x?.name,x?.email,f]);let L=()=>{T&&I({name:T.name,email:T.email})},R=e=>{C.isError&&C.reset(),E(t=>t&&{...t,...e})},fe=()=>{if(!(!T||!A||!de||C.isPending)){if(L(),f){S.mutate({email:T.email.trim(),name:T.name.trim()||void 0,note:T.note.trim()||void 0,labels:T.labels.length?T.labels:void 0,newsletters:k.current?T.newsletters.map(e=>({id:e})):void 0},{onSuccess:e=>{let t=e.members?.[0];if(!t){a.error(`Member couldn’t be created`);return}ue(),a.success(`Member created`),o(`/members/${t.id}`,{replace:!0})},onError:()=>{a.error(`Member couldn’t be created`)}});return}!x||D.current!==x.id||ne.mutate(sn(x.id,T,Q(x)),{onSuccess:e=>{let t=e.members?.[0];if(t){let e=Q(t);O.current=e,E(e)}a.success(`Member updated`)},onError:()=>{a.error(`Member couldn’t be saved`)}})}},z=`Save`,B=`default`,pe=!0;C.isPending?z=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):A?(z=C.isError?`Retry`:`Save`,B=C.isError?`destructive`:`default`,pe=!de):!f&&ne.isSuccess&&(z=`Saved`);let me=!!T&&(f||!!x),V=`Member`;return f?V=`New member`:x?V=h(x):te&&(V=`Member not found`),(0,X.jsx)(p,{className:`size-full`,children:(0,X.jsx)(m,{className:`relative flex h-full flex-col`,size:`page`,children:(0,X.jsxs)(J,{"data-testid":`member-detail`,children:[(0,X.jsx)(J.Header,{children:(0,X.jsxs)(it,{blurredBackground:!1,sticky:!1,children:[(0,X.jsx)(it.Left,{children:(0,X.jsx)(De,{children:(0,X.jsxs)(Ce,{children:[(0,X.jsx)(we,{children:(0,X.jsx)(Ee,{asChild:!0,children:(0,X.jsx)(c,{"data-test-link":`members-back`,to:d,children:`Members`})})}),(0,X.jsx)(Te,{}),(0,X.jsx)(we,{children:!f&&v?(0,X.jsx)(xe,{className:`h-4 w-40`}):(0,X.jsx)(Se,{className:`truncate`,"data-testid":`member-detail-title`,children:V})})]})})}),(f||x)&&(0,X.jsx)(it.Actions,{children:(0,X.jsxs)(it.ActionGroup,{children:[x&&!f&&(0,X.jsx)(Dt,{allowLeaveWithUnsavedChanges:ue,member:x},x.id),(0,X.jsx)(j,{className:`min-w-16`,disabled:pe,variant:B,onClick:fe,children:z})]})})]})}),(0,X.jsxs)(J.Body,{children:[ee&&(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3`,"data-testid":`member-detail-load-error`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Couldn’t load this member.`}),(0,X.jsx)(j,{variant:`outline`,onClick:()=>void b(),children:`Retry`})]}),te&&(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`This member couldn’t be found.`})}),me&&T&&(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col gap-8 lg:flex-row lg:items-start lg:gap-12`,children:[(0,X.jsx)(On,{draftEmail:F.email,draftName:F.name,engagementEnabled:n,member:x}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-8`,children:[(0,X.jsx)(G,{children:(0,X.jsx)(W,{className:`p-6`,children:(0,X.jsx)(Sn,{disabled:C.isPending,draft:T,emailError:P,onChange:R,onEmailBlur:()=>{N(!0),L()},onNameBlur:L})})}),g&&x&&(0,X.jsx)(bn,{customFields:x.custom_fields,disabled:C.isPending,memberId:x.id}),t&&(f||x)&&(0,X.jsx)(kn,{disabled:C.isPending,emailSuppression:x?.email_suppression,memberId:x?.id,subscribedIds:T.newsletters,onChange:e=>R({newsletters:e})}),e&&(0,X.jsxs)(`section`,{"aria-labelledby":`member-subscriptions-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-subscriptions-heading`,children:`Subscriptions`}),(0,X.jsx)($n,{canAddComp:ie,member:x})]}),(f||x&&ae)&&(0,X.jsx)(Jt,{hasMultipleNewsletters:oe,hasMultipleTiers:se,memberId:x?.id,paidMembersEnabled:e})]})]})]}),(0,X.jsx)(at,{...le})]})})})},rr=()=>{let{data:e,isLoading:t}=Ve({}),n=Re(),r=Je();if(t||!e?.settings)return(0,X.jsx)(p,{className:`size-full`,children:(0,X.jsx)(m,{className:`relative flex h-full flex-col`,size:`page`,children:(0,X.jsx)(J,{children:(0,X.jsx)(J.Body,{children:(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,X.jsx)(U,{size:`lg`})})})})})});let i=tt(e.settings,`members_signup_access`);return(0,X.jsx)(nr,{engagementEnabled:i!==`none`&&r===!0,newslettersUiEnabled:r===!0,paidMembersEnabled:n===!0})};export{rr as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e({filter:e}={}){let t=new URLSearchParams;e&&t.set(`filter`,e);let n=t.toString();return n?`/members?${n}`:`/members`}export{e as t};
|
|
@@ -1,2 +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}from"./framework-provider-DqI25epG.js";import{_ as i,b as a,g as o,m as s,o as c,p as l,u,v as d,x as f}from"./hooks-CuEZV2-q.js";import{n as p}from"./dist-Ndy-PuGN.js";import{t as m}from"./build-CsiH26uS.js";import{n as h}from"./offers-9J1CSiLy.js";import{s as g}from"./config-DOMQDZGZ.js";import{_,n as v,u as y}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as b}from"./router-provider-CJC58zTy.js";import{c as x,f as S,p as C,v as w}from"./dist-Cb5RSHSg.js";import{t as T}from"./box-By_EgGtm.js";import{t as E}from"./container-LiZf3XdY.js";import{$ as D,An as O,B as k,C as A,D as j,Dn as M,Et as N,F as P,Hn as ee,I as F,Nn as I,O as L,Ot as R,Pt as z,S as te,Sr as B,Tr as ne,Ut as V,V as H,Wt as re,Xn as ie,Yn as ae,Zn as U,a as oe,ar as se,cr as ce,dt as le,g as ue,gn as de,hn as fe,jn as pe,l as me,or as he,qt as ge,sr as _e,t as W,tn as ve,tt as ye,u as be,v as xe,vn as Se,vt as Ce}from"./button-BshWPHvn.js";import{i as we,n as Te,r as Ee}from"./filters-Dmr0PoqU.js";import{a as G,i as De,o as Oe,r as ke,s as Ae,t as je}from"./dialog-Db7c164G.js";import{a as Me,i as Ne,l as Pe,n as Fe,o as Ie,r as Le,s as Re,t as ze}from"./command-DcLbSifC.js";import{i as Be,r as Ve,t as He}from"./popover-CFgqFDvC.js";import{a as Ue,c as We,i as Ge,o as Ke,r as qe,s as Je,t as Ye}from"./alert-dialog-wEbVxANM.js";import{n as Xe}from"./input-surface-BdOe4KzO.js";import{t as Ze}from"./dropzone-CaPOeDRZ.js";import{t as Qe}from"./input-UHrKuvBT.js";import{i as $e,n as et,o as tt,s as nt,t as rt}from"./select-D_RQaXgt.js";import{n as it}from"./loading-indicator-SFTqyYVE.js";import{t as at}from"./checkbox-Dwwr_3Py.js";import{t as ot}from"./empty-indicator-WB1WgT9h.js";import{a as st,i as ct,o as lt,t as ut}from"./field-LmNk7wZh.js";import{i as dt,n as ft,t as pt}from"./input-group-BPAxETpQ.js";import{a as K,c as q,n as mt,r as J,s as ht,t as gt}from"./table-CrqQtkR2.js";import{m as _t}from"./users-5msE1WMs.js";import{c as vt,d as yt,l as bt,p as xt,s as St}from"./schemas-CRsC53ls.js";import{r as Ct}from"./newsletters-DhNigJUh.js";import{Ar as wt,Dr as Tt,Hn as Et,In as Dt,Kn as Ot,Ln as kt,Mr as At,Or as jt,Qn as Mt,Tr as Nt,W as Pt,Wn as Ft,Xn as It,_ as Lt,a as Rt,br as zt,c as Bt,d as Vt,i as Ht,jr as Ut,kr as Wt,l as Gt,n as Kt,o as qt,r as Jt,s as Yt,t as Xt,u as Zt,xr as Qt,zn as $t}from"./index-CDP9tIOk.js";import{t as Y}from"./page-header-Cfds8pCg.js";import{C as en,S as tn,T as nn,_ as rn,a as an,b as on,c as sn,d as cn,f as X,g as ln,h as un,i as dn,l as fn,m as pn,n as mn,o as hn,p as gn,r as _n,s as vn,t as yn,u as bn,v as xn,w as Sn,x as Cn,y as wn}from"./filters-CV5jCb9n.js";import{n as Tn}from"./dirty-confirm-dialog-CmARpZQS.js";import{t as En}from"./get-site-timezone-HgL0jI_F.js";import{t as Dn}from"./list-page-CdsnQR9N.js";import{t as On}from"./validator-Cr0sMKuW.js";import{a as kn,i as An,n as jn,t as Mn}from"./filter-sources-4C0kF1NU.js";import{i as Nn,n as Pn,r as Fn,t as In}from"./virtual-list-D3MfPNOh.js";import{a as Ln,c as Rn,h as zn,i as Bn,l as Vn,r as Hn,s as Un,t as Wn}from"./member-custom-fields-gOv6Hoh3.js";import{n as Gn,r as Kn,t as qn}from"./label-picker-BBWykUeA.js";import{n as Jn,r as Yn,t as Xn}from"./custom-field-type-option-D0PXoSnP.js";import{t as Zn}from"./member-route-0Aa52Ntz.js";var Z=e(t(),1),Q=n();function Qn({open:e,memberCount:t,onOpenChange:n,onConfirm:r,isLoading:i=!1}){let[a,o]=(0,Z.useState)([]),s=Gn({selectedSlugs:a,onSelectionChange:o}),c=(0,Z.useCallback)(e=>{e||o([]),n(e)},[n]);return(0,Q.jsx)(je,{open:e,onOpenChange:c,children:(0,Q.jsxs)(ke,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Q.jsx)(Oe,{children:(0,Q.jsxs)(Ae,{children:[`Add label to `,S(t),` `,t===1?`member`:`members`]})}),(0,Q.jsx)(Kn,{isCreating:s.isCreating,labels:s.labels,optionSource:s.optionSource,resolvedSelectedLabels:s.resolvedSelectedLabels,selectedSlugs:a,onCreate:s.createLabel,onDelete:s.deleteLabel,onEdit:s.editLabel,onToggle:s.toggleLabel}),(0,Q.jsxs)(G,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Q.jsx)(W,{disabled:a.length===0||i,onClick:()=>{let e=s.labels.filter(e=>a.includes(e.slug)).map(e=>e.id);e.length>0&&r(e)},children:i?`Adding...`:a.length>1?`Add ${S(a.length)} labels`:`Add label`})]})]})})}function $n({open:e,memberCount:t,nql:n,search:r,onOpenChange:i,onConfirm:a,isLoading:o=!1}){let[s,c]=(0,Z.useState)([]),{data:l,isLoading:u}=Bt({searchParams:{...n?{filter:n}:{},...r?{search:r}:{},include:`labels`,limit:`all`,fields:`id`},enabled:e}),d=(0,Z.useMemo)(()=>{let e=new Set;for(let t of l?.members||[])for(let n of t.labels||[])e.add(n.slug);return e},[l]),f=Gn({selectedSlugs:s,onSelectionChange:c}),p={...f.optionSource,options:f.optionSource.options.filter(e=>d.has(String(e.value)))},m=(0,Z.useCallback)(e=>{e||c([]),i(e)},[i]),h=()=>{let e=f.labels.filter(e=>s.includes(e.slug)).map(e=>e.id);e.length>0&&a(e)};return(0,Q.jsx)(je,{open:e,onOpenChange:m,children:(0,Q.jsxs)(ke,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Q.jsx)(Oe,{children:(0,Q.jsxs)(Ae,{children:[`Remove label from `,S(t),` `,t===1?`member`:`members`]})}),(0,Q.jsx)(Kn,{labels:f.labels.filter(e=>d.has(e.slug)),optionSource:{...p,isInitialLoad:p.isInitialLoad||u},resolvedSelectedLabels:f.resolvedSelectedLabels.filter(e=>d.has(e.slug)),selectedSlugs:s,onDelete:f.deleteLabel,onEdit:f.editLabel,onToggle:f.toggleLabel}),(0,Q.jsxs)(G,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Q.jsx)(W,{disabled:s.length===0||o,onClick:h,children:o?`Removing...`:s.length>1?`Remove ${S(s.length)} labels`:`Remove label`})]})]})})}function er({open:e,newsletters:t,memberCount:n,onOpenChange:r,onConfirm:i,isLoading:a=!1}){let[o,s]=(0,Z.useState)(`all`),[c,l]=(0,Z.useState)([]),[u,d]=(0,Z.useState)(``),[f,p]=(0,Z.useState)(!1),m=(0,Z.useRef)(null),h=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{e||(s(`all`),l([]),d(``),p(!1))},[e]),(0,Z.useEffect)(()=>{if(!f)return;let e=e=>{m.current&&!m.current.contains(e.target)&&p(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[f]);let g=e=>{e||(s(`all`),l([]),d(``),p(!1)),r(e)},_=(0,Z.useCallback)(e=>{l(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},[]),v=t.length>=2,y=()=>{i(!v||o===`all`?null:c)},b=a||v&&o===`selected`&&c.length===0,x=n===1?`member`:`members`;return(0,Q.jsx)(je,{open:e,onOpenChange:g,children:(0,Q.jsxs)(ke,{className:`gap-5`,children:[(0,Q.jsx)(Oe,{children:(0,Q.jsx)(Ae,{children:`Unsubscribe members`})}),v?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{"aria-label":`Unsubscribe scope`,className:`flex flex-col gap-3`,role:`radiogroup`,children:[(0,Q.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3`,children:[(0,Q.jsx)(`input`,{checked:o===`all`,className:`mt-0.5 size-4 cursor-pointer accent-black`,name:`unsubscribe-mode`,type:`radio`,value:`all`,onChange:()=>s(`all`)}),(0,Q.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-semibold`,children:`Unsubscribe from all newsletters`}),(0,Q.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[S(n),` `,x,` will be unsubscribed from`,` `,t.length,` `,t.length===1?`newsletter`:`newsletters`,`.`]})]})]}),(0,Q.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3`,children:[(0,Q.jsx)(`input`,{checked:o===`selected`,className:`mt-0.5 size-4 cursor-pointer accent-black`,name:`unsubscribe-mode`,type:`radio`,value:`selected`,onChange:()=>s(`selected`)}),(0,Q.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-semibold`,children:`Unsubscribe from selected newsletters`}),(0,Q.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Select which newsletters to unsubscribe `,S(n),` `,x,` from.`]})]})]})]}),o===`selected`&&(0,Q.jsxs)(`div`,{ref:m,className:`relative space-y-2`,children:[(0,Q.jsx)(`label`,{className:`text-sm font-semibold`,htmlFor:`newsletter-search`,children:`Newsletters`}),(0,Q.jsxs)(`div`,{className:`flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-md border bg-background px-3 py-1 text-sm`,onClick:()=>{h.current?.focus(),p(!0)},children:[c.map(e=>{let n=t.find(t=>t.id===e);return n?(0,Q.jsxs)(kt,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:t=>{t.stopPropagation(),_(e)},children:[n.name,(0,Q.jsx)(oe,{className:`size-3`})]},e):null}),(0,Q.jsx)(`input`,{ref:h,className:`min-w-[80px] flex-1 bg-transparent py-1 text-sm outline-hidden placeholder:text-muted-foreground`,id:`newsletter-search`,placeholder:c.length===0?`Search newsletters...`:``,value:u,onChange:e=>{d(e.target.value),f||p(!0)},onFocus:()=>p(!0),onKeyDown:e=>{e.key===`Escape`&&(p(!1),h.current?.blur()),e.key===`Backspace`&&!u&&c.length>0&&_(c[c.length-1])}})]}),f&&(0,Q.jsx)(`div`,{className:`absolute top-full left-0 z-50 mt-1 w-full rounded-md border bg-white shadow-md dark:bg-gray-950`,children:(0,Q.jsx)(ze,{shouldFilter:!1,children:(0,Q.jsxs)(Re,{className:`max-h-64 overflow-y-auto`,children:[(0,Q.jsx)(Le,{children:`No newsletters found.`}),t.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())).map(e=>(0,Q.jsxs)(Ie,{value:e.name,onSelect:()=>_(e.id),children:[e.name,c.includes(e.id)&&(0,Q.jsx)(Fe,{})]},e.id))]})})})]})]}):(0,Q.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Are you sure you want to unsubscribe `,S(n),` `,x,` from all newsletters? They will no longer receive any email newsletters from you.`]}),(0,Q.jsxs)(G,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:()=>g(!1),children:`Cancel`}),(0,Q.jsx)(W,{disabled:b,variant:`destructive`,onClick:y,children:a?`Unsubscribing...`:`Unsubscribe`})]})]})})}function tr({open:e,memberCount:t,onOpenChange:n,onConfirm:r,onExportBackup:i,isLoading:a=!1}){let[o,s]=(0,Z.useState)(!1),c=e=>{e||s(!1),n(e)},l=async()=>{if(!(t<1||a||o))try{s(!0),await i(),r()}catch{}finally{s(!1)}};return(0,Q.jsx)(je,{open:e,onOpenChange:c,children:(0,Q.jsxs)(ke,{className:`gap-5`,children:[(0,Q.jsx)(Oe,{children:(0,Q.jsx)(Ae,{children:`Delete selected members?`})}),t>0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`p`,{children:[`You're about to delete`,` `,(0,Q.jsxs)(`strong`,{children:[S(t),` `,t===1?`member`:`members`]}),`. This is permanent! All Ghost data will be deleted, this will have no effect on subscriptions in Stripe.`]}),(0,Q.jsx)(`p`,{children:`A backup of your selection will be automatically downloaded to your device before deletion.`})]}):(0,Q.jsx)(`p`,{children:`No members are selected.`}),(0,Q.jsxs)(G,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Q.jsx)(W,{disabled:a||o||t<1,variant:`destructive`,onClick:()=>void l(),children:a||o?`Deleting...`:`Download backup & delete members`})]})]})})}function nr({fileError:e,onClose:t,onDropAccepted:n,onDropRejected:r}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`mt-5 space-y-5`,children:[(0,Q.jsxs)(Dt,{variant:`info`,children:[`Need some help?`,` `,(0,Q.jsx)(`a`,{className:`font-semibold underline`,href:`https://ghost.org/help/import-members/`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`}),` `,`about importing members or`,` `,(0,Q.jsx)(`a`,{className:`font-semibold underline`,href:`https://static.ghost.org/v4.0.0/files/member-import-template.csv`,rel:`noopener noreferrer`,target:`_blank`,children:`download a sample CSV file`}),`.`]}),e&&(0,Q.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-red-600`,children:[(0,Q.jsx)(A,{className:`mt-0.5 size-4 shrink-0`}),(0,Q.jsx)(`p`,{children:e})]}),(0,Q.jsx)(Ze,{accept:{"text/csv":[`.csv`],"application/vnd.ms-excel":[`.csv`]},"aria-label":`Select or drop a CSV file`,onDropAccepted:e=>{let t=e[0];t&&n(t)},onDropRejected:r,children:({isDragActive:e,isDragReject:t})=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(xe,{className:`mb-2 size-6 text-grey-600`}),(0,Q.jsx)(`span`,{className:`text-sm text-grey-700`,children:t?`The file type you uploaded is not supported`:e?`Drop CSV file to upload`:`Select or drop a CSV file`})]})})]}),(0,Q.jsx)(G,{className:`mt-5`,children:(0,Q.jsx)(W,{variant:`outline`,onClick:t,children:`Close`})})]})}var rr=e(On(),1),ir=[{label:`Email`,value:`email`},{label:`Name`,value:`name`},{label:`Note`,value:`note`},{label:`Subscribed to emails`,value:`subscribed_to_emails`},{label:`Stripe Customer ID`,value:`stripe_customer_id`},{label:`Complimentary plan`,value:`complimentary_plan`},{label:`Labels`,value:`labels`},{label:`Created at`,value:`created_at`},{label:`Gift ID`,value:`gift_id`}],ar={label:`Tier`,value:`import_tier`},or=[`email`,`name`,`note`,`subscribed_to_emails`,`complimentary_plan`,`stripe_customer_id`,`labels`,`created_at`,`gift_id`];function sr({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...or,...e?[ar.value]:[],...t.map(e=>e.value)]}function cr({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...ir,...e?[ar]:[],...t]}var lr=[`email`],ur=class e{_mapping;constructor(e){if(this._mapping={},e)for(let[t,n]of Object.entries(e))this._mapping[n]=t}get(e){return this._mapping[e]??null}toJSON(){return{...this._mapping}}getKeyByValue(e){for(let[t,n]of Object.entries(this._mapping))if(n===e)return t;return null}updateMapping(t,n){let r=new e({});if(r._mapping={...this._mapping},n)for(let e in r._mapping)r._mapping[e]===n&&(r._mapping[e]=null);return r._mapping[t]=n,r}};function dr(e){let t=new Set;for(let n of e)for(let e of Object.keys(n))e!==`__parsed_extra`&&t.add(e);return[...t]}function fr(e,t=30){if(!e||e.length<=t)return e;let n=[];return dr(e).forEach(r=>{let i=e.filter(e=>e[r]&&e[r].trim()!==``),a=[];if(i.length<=t)a=i;else{let e=Math.floor(t/3),n=e,r=t-e-n,o=i.slice(0,e),s=n>0?i.slice(-n):[],c=Math.max(0,Math.floor(i.length/2)-Math.floor(r/2)),l=i.slice(c,c+r);a=[...o,...l,...s].slice(0,t)}a.forEach((e,t)=>{n[t]||(n[t]={}),n[t][r]=e[r]})}),n}function pr(e,t={}){let n=fr(e),r={},i=sr(t);if(e.length>0)for(let t of dr(e)){if(!r.name&&/name/i.test(t)&&!zn(t)){r.name=t;continue}!r[t]&&i.includes(t)&&!lr.includes(t)&&(r[t]=t)}let a=0;for(;a<=n.length-1&&!r.email;){let e=n[a];for(let[t,n]of Object.entries(e))!r.email&&n&&rr.default.isEmail(n)&&!zn(t)&&(r.email=t);a+=1}return r}function mr(e){return e.replace(`Value in [members.email] cannot be blank.`,`Missing email address`).replace(`Value in [members.note] exceeds maximum length of 2000 characters.`,`Note is too long`).replace(`Value in [members.subscribed] must be one of true, false, 0 or 1.`,`Value of "Subscribed to emails" must be "true" or "false"`).replace(`Validation (isEmail) failed for email`,`Invalid email address`).replace(/No such customer:[\s\S]*/,`Could not find Stripe customer`)}function hr({status:e,fileData:t,mapping:n,mappingError:r,showMappingErrors:i,membersCount:a,dataPreviewIndex:o,hasPrevRecord:s,hasNextRecord:c,fieldMappings:l,labelPicker:u,onUpdateMapping:d,onDataPreviewIndexChange:f,onStartOver:p,onUpload:m}){let h=t&&t.length>0&&n?Object.entries(t[o]||{}).map(([e,t])=>({key:e,value:t,mapTo:n.get(e)})):[];return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5 flex min-h-0 flex-1 flex-col space-y-5`,children:t===null?(0,Q.jsx)(`div`,{className:`flex items-center justify-center rounded-md border bg-muted p-10`,children:(0,Q.jsx)(it,{size:`md`})}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:x(`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,i&&r&&`border-red-500`),children:(0,Q.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,Q.jsxs)(gt,{className:`table-fixed`,children:[(0,Q.jsx)(ht,{children:(0,Q.jsxs)(q,{children:[(0,Q.jsx)(K,{className:`w-1/3`,children:`Field`}),(0,Q.jsx)(K,{className:`w-1/3`,children:(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsxs)(`span`,{children:[`Sample data`,` `,(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(#`,S(o+1),`)`]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center`,children:[(0,Q.jsx)(`button`,{"aria-label":`Show previous sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!s&&`cursor-default opacity-30`),disabled:!s||e===`UPLOADING`,type:`button`,onClick:()=>f(o-1),children:(0,Q.jsx)(ie,{className:`size-4`})}),(0,Q.jsx)(`button`,{"aria-label":`Show next sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!c&&`cursor-default opacity-30`),disabled:!c||e===`UPLOADING`,type:`button`,onClick:()=>f(o+1),children:(0,Q.jsx)(ae,{className:`size-4`})})]})]})}),(0,Q.jsx)(K,{className:`w-1/3`,children:`Import as`})]})}),(0,Q.jsx)(mt,{children:h.length>0?h.map(t=>(0,Q.jsxs)(q,{className:x(!t.mapTo&&`bg-muted`),children:[(0,Q.jsx)(J,{className:`text-sm font-medium break-all`,children:t.key}),(0,Q.jsx)(J,{className:x(`text-sm break-all`,!t.value&&`text-muted-foreground`),children:t.value||`\xA0`}),(0,Q.jsx)(J,{children:(0,Q.jsxs)(rt,{disabled:e===`UPLOADING`,value:t.mapTo||`__not_imported__`,onValueChange:e=>{d(t.key,e===`__not_imported__`?null:e)},children:[(0,Q.jsx)(tt,{className:x(`h-8 text-sm`,!t.mapTo&&`text-muted-foreground`),children:(0,Q.jsx)(nt,{})}),(0,Q.jsxs)(et,{children:[(0,Q.jsx)($e,{value:`__not_imported__`,children:`Not imported`}),l.map(e=>(0,Q.jsx)($e,{value:e.value,children:e.label},e.value))]})]})})]},t.key)):(0,Q.jsx)(q,{children:(0,Q.jsx)(J,{className:`text-muted-foreground`,colSpan:3,children:`No data found in the uploaded CSV.`})})})]})})}),i&&r&&(0,Q.jsx)(`p`,{className:`text-sm text-red-600`,children:r}),a>0&&(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If an email address in your CSV matches an existing member, they will be updated with the mapped values.`}),(0,Q.jsxs)(`div`,{className:`mt-5`,children:[(0,Q.jsx)(`label`,{className:`mb-1 block text-sm font-semibold`,children:`Label these members`}),(0,Q.jsx)(Kn,{isCreating:u.isCreating,labels:u.labels,optionSource:u.optionSource,resolvedSelectedLabels:u.resolvedSelectedLabels,selectedSlugs:u.selectedSlugs,onCreate:u.createLabel,onDelete:u.deleteLabel,onEdit:u.editLabel,onToggle:u.toggleLabel})]})]})}),(0,Q.jsxs)(G,{className:`mt-5`,children:[(0,Q.jsx)(W,{disabled:e===`UPLOADING`,variant:`outline`,onClick:p,children:`Start over`}),(0,Q.jsx)(W,{disabled:e===`UPLOADING`||a===0,onClick:m,children:e===`UPLOADING`?(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(it,{color:`light`,size:`sm`}),`Uploading`]}):a>0?`Import ${S(a)} ${a===1?`member`:`members`}`:`Import members`})]})]})}function gr({onUploadAnotherFile:e,onClose:t}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5`,children:(0,Q.jsx)(`p`,{className:`text-sm`,children:`Your import is being processed, and you'll receive a confirmation email as soon as it's complete. Usually this only takes a few minutes, but larger imports may take longer.`})}),(0,Q.jsxs)(G,{className:`mt-5`,children:[(0,Q.jsx)(W,{variant:`outline`,onClick:e,children:`Upload another file`}),(0,Q.jsx)(W,{onClick:t,children:`Got it`})]})]})}var _r=()=>({status:`INIT`,file:null,fileData:null,mapping:null,selectedLabelSlugs:[],dataPreviewIndex:0,mappingError:null,showMappingErrors:!1,importResponse:null,errorMessage:null,errorHeader:`Import error`,showTryAgainButton:!0,dragOver:!1,fileError:null});function vr({importResponse:e,onReset:t,onClose:n}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`mt-5 space-y-4`,children:[e.importedCount===0?(0,Q.jsxs)(`p`,{className:`text-sm`,children:[`No members were added`,e.errorCount>0?` due to the following errors:`:`.`]}):(0,Q.jsxs)(`p`,{className:`text-sm`,children:[`A total of `,(0,Q.jsx)(`strong`,{children:S(e.importedCount)}),` `,e.importedCount===1?`person was`:`people were`,` successfully added or updated in your list of members, and now have access to your site.`]}),e.errorCount>0&&(0,Q.jsxs)(Q.Fragment,{children:[e.importedCount>0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`hr`,{className:`border-grey-200`}),(0,Q.jsxs)(`p`,{className:`text-sm`,children:[(0,Q.jsx)(`strong`,{children:S(e.errorCount)}),` `,e.errorCount===1?`member was`:`members were`,` skipped due to the following errors:`]})]}),(0,Q.jsx)(`ul`,{className:`list-inside list-disc space-y-1 text-sm text-muted-foreground`,children:e.errorList.map(e=>(0,Q.jsxs)(`li`,{children:[e.message,` (`,e.count,`)`]},e.message))})]})]}),(0,Q.jsx)(G,{className:`mt-5`,children:e.errorCount>0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(W,{variant:`outline`,asChild:!0,children:(0,Q.jsx)(`a`,{download:e.errorCsvName,href:e.errorCsvUrl,children:`Download error file`})}),e.importedCount===0?(0,Q.jsx)(W,{onClick:t,children:`Try again`}):(0,Q.jsx)(W,{onClick:n,children:`View members`})]}):(0,Q.jsx)(Q.Fragment,{children:e.importedCount===0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:n,children:`Close`}),(0,Q.jsx)(W,{onClick:t,children:`Try again`})]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:t,children:`Upload another file`}),(0,Q.jsx)(W,{onClick:n,children:`View members`})]})})})]})}function yr({errorMessage:e,showTryAgainButton:t,onTryAgain:n,onClose:r}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5`,children:(0,Q.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-red-600`,children:[(0,Q.jsx)(A,{className:`mt-0.5 size-4 shrink-0`}),(0,Q.jsx)(`p`,{children:e})]})}),(0,Q.jsxs)(G,{className:`mt-5`,children:[t&&(0,Q.jsx)(W,{variant:`outline`,onClick:n,children:`Try again`}),(0,Q.jsx)(W,{onClick:r,children:`OK`})]})]})}var br=e(w(),1),xr=e(Yn(),1);function Sr(e){let t=xr.default.parse(e,{header:!0,skipEmptyLines:!0});return!t.data||t.data.length<1?[]:t.data.map(e=>{let t={};for(let[n,r]of Object.entries(e))t[n]=typeof r==`string`?r:typeof r==`number`||typeof r==`boolean`?String(r):``;return t})}function Cr(e){return e.length===0?``:xr.default.unparse(e,{quotes:!0})}function wr(e){let t=e.meta.stats.imported,n=e.meta.stats.invalid||[],r=n.length,i={},a=Cr(n.map(e=>{let{errors:t,...n}=e,r=t.map(e=>mr(e).trim()).filter(Boolean);for(let e of r)i[e]?i[e].count+=1:i[e]={message:e,count:1};return{...n,error:r.join(`
|
|
2
|
-
`)}})),o=new Blob([a],{type:`text/csv`}),s=URL.createObjectURL(o),c=e.meta.import_label;return{importedCount:t,errorCount:r,errorCsvUrl:s,errorCsvName:c?`${c.name} - Errors.csv`:`Import ${(0,br.default)().format(`YYYY-MM-DD HH:mm`)} - Errors.csv`,errorList:Object.values(i),importLabel:e.meta.import_label||void 0}}function Tr(e,t){switch(t.type){case`SELECT_FILE`:return{...e,status:`MAPPING`,file:t.file,fileData:null,mapping:null,dataPreviewIndex:0,mappingError:null,showMappingErrors:!1,fileError:null};case`SET_FILE_ERROR`:return{...e,fileError:t.fileError};case`PARSE_SUCCESS`:return{...e,fileData:t.fileData,mapping:t.mapping,mappingError:t.mappingError};case`PARSE_FAILURE`:return{...e,fileData:[],mapping:null,mappingError:t.mappingError};case`UPDATE_MAPPING`:return{...e,mapping:t.mapping,mappingError:t.mappingError};case`SET_SELECTED_LABEL_SLUGS`:return{...e,selectedLabelSlugs:t.selectedLabelSlugs};case`SET_DATA_PREVIEW_INDEX`:return{...e,dataPreviewIndex:t.dataPreviewIndex};case`SET_SHOW_MAPPING_ERRORS`:return{...e,showMappingErrors:t.showMappingErrors};case`SET_DRAG_OVER`:return{...e,dragOver:t.dragOver};case`UPLOAD_START`:return{...e,status:`UPLOADING`,showMappingErrors:!1};case`UPLOAD_ACCEPTED`:return{...e,status:`PROCESSING`};case`UPLOAD_COMPLETE`:return{...e,status:`COMPLETE`,importResponse:t.importResponse};case`UPLOAD_ERROR`:return{...e,status:`ERROR`,errorMessage:t.errorMessage,errorHeader:t.errorHeader??`Import error`,showTryAgainButton:t.showTryAgainButton??!0};case`RESET`:return _r();default:return e}}function Er({open:e,onOpenChange:t,onComplete:n,onClose:r}){let[s,c]=(0,Z.useReducer)(Tr,void 0,_r),l=(0,Z.useRef)(null),{mutateAsync:u}=Lt(),f=Xt(`importMemberTier`),p=Xt(`membersCustomFields`),{data:m}=Un({enabled:p}),h=(0,Z.useMemo)(()=>Hn(m?.members_custom_fields??[]),[m]),g=!p||m!==void 0,_=(0,Z.useRef)({importMemberTier:f,customFieldColumns:h});_.current={importMemberTier:f,customFieldColumns:h};let v=(0,Z.useMemo)(()=>cr({importMemberTier:f,customFieldColumns:h}),[f,h]),y=Gn({selectedSlugs:s.selectedLabelSlugs,onSelectionChange:e=>c({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}),b=(0,Z.useCallback)(()=>{l.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(l.current),l.current=null):l.current&&=null},[]),S=(0,Z.useCallback)(()=>{b(),c({type:`RESET`})},[b]);(0,Z.useEffect)(()=>()=>{b()},[b]);let C=(0,Z.useCallback)(e=>{if(!(!e&&s.status===`UPLOADING`)){if(!e){let e=s.importResponse??void 0;S(),r?.(e)}t(e)}},[r,t,S,s.importResponse,s.status]);(0,Z.useEffect)(()=>{if(!s.file||!g)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=Sr(e);if(n.length>0){let e=new ur(pr(n,_.current));c({type:`PARSE_SUCCESS`,fileData:n,mapping:e,mappingError:e.getKeyByValue(`email`)?null:`Please map "Email" to one of the fields in the CSV.`})}else c({type:`PARSE_SUCCESS`,fileData:[],mapping:null,mappingError:`File is empty, nothing to import. Please select a different file.`})}catch{c({type:`PARSE_FAILURE`,mappingError:`Failed to parse this file. Please try another CSV file.`})}},t.onerror=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`Failed to read file${t.error?.message?`: ${t.error.message}`:``}`})},t.onabort=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`File read was interrupted. Please try again.`})},t.readAsText(s.file),()=>{e=!0,t.readyState===FileReader.LOADING&&t.abort()}},[s.file,g]);let w=(0,Z.useCallback)(e=>{let t=/(?:\.([^.]+))?$/.exec(e.name)?.[1];return!t||t.toLowerCase()!==`csv`?(c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`}),!1):(c({type:`SET_FILE_ERROR`,fileError:null}),!0)},[]),T=(0,Z.useCallback)(e=>{w(e)&&c({type:`SELECT_FILE`,file:e})},[w]),E=(0,Z.useCallback)((e,t)=>{if(!s.mapping)return;let n=s.mapping.updateMapping(e,t),r=s.fileData&&s.fileData.length===0?`File is empty, nothing to import. Please select a different file.`:n.getKeyByValue(`email`)?null:`Please map "Email" to one of the fields in the CSV.`;c({type:`UPDATE_MAPPING`,mapping:n,mappingError:r})},[s.fileData,s.mapping]),D=(0,Z.useCallback)(async()=>{if(!s.file||s.mappingError){c({type:`SET_SHOW_MAPPING_ERRORS`,showMappingErrors:!0});return}c({type:`UPLOAD_START`});let e=[];for(let t of s.selectedLabelSlugs){let n=y.labels.find(e=>e.slug===t);n&&e.push(n.name)}try{let t=await u({file:s.file,labels:e,mapping:s.mapping?.toJSON()});if(qt(t)){let e=wr(t);b(),l.current=e.errorCsvUrl,c({type:`UPLOAD_COMPLETE`,importResponse:e}),n?.(e);return}c({type:`UPLOAD_ACCEPTED`}),n?.()}catch(e){if(e instanceof d){c({type:`UPLOAD_ERROR`,errorMessage:`The file you uploaded was larger than the maximum file size your server allows.`});return}let t=e instanceof i?e.data?.errors?.[0]:null;if(e instanceof o&&t?.code===`EMAIL_VERIFICATION_NEEDED`){c({type:`UPLOAD_ERROR`,errorMessage:t.message,errorHeader:`Woah there cowboy, that's a big list`,showTryAgainButton:!1}),n?.();return}if(e instanceof a||t?.type===`DataImportError`){c({type:`UPLOAD_ERROR`,errorMessage:t?.message||(e instanceof Error?e.message:`An unexpected error occurred, please try again`)});return}c({type:`UPLOAD_ERROR`,errorMessage:`An unexpected error occurred, please try again`})}},[s.file,s.mapping,s.mappingError,s.selectedLabelSlugs,y.labels,u,b,n]),O=s.fileData?!!s.fileData[s.dataPreviewIndex+1]:!1,k=s.dataPreviewIndex>0,A=s.fileData?.length??0,j=s.status===`MAPPING`||s.status===`UPLOADING`,M=(0,Z.useMemo)(()=>{switch(s.status){case`PROCESSING`:return`Import in progress`;case`COMPLETE`:return`Import complete`;case`ERROR`:return s.errorHeader;default:return`Import members`}},[s.errorHeader,s.status]);return(0,Q.jsx)(je,{open:e,onOpenChange:C,children:(0,Q.jsxs)(ke,{className:x(`gap-0`,j&&`max-w-2xl`,j&&`flex max-h-[calc(100vh-16vmin)] flex-col`),children:[(0,Q.jsxs)(Oe,{children:[(0,Q.jsx)(Ae,{children:M}),(0,Q.jsx)(De,{className:`sr-only`,children:`Import members from a CSV file.`})]}),s.status===`INIT`&&(0,Q.jsx)(nr,{fileError:s.fileError,onClose:()=>C(!1),onDropAccepted:T,onDropRejected:()=>c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(s.status===`MAPPING`||s.status===`UPLOADING`)&&(0,Q.jsx)(hr,{dataPreviewIndex:s.dataPreviewIndex,fieldMappings:v,fileData:s.fileData,hasNextRecord:O,hasPrevRecord:k,labelPicker:y,mapping:s.mapping,mappingError:s.mappingError,membersCount:A,showMappingErrors:s.showMappingErrors,status:s.status,onDataPreviewIndexChange:e=>{c({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onStartOver:S,onUpdateMapping:E,onUpload:()=>void D()}),s.status===`PROCESSING`&&(0,Q.jsx)(gr,{onClose:()=>C(!1),onUploadAnotherFile:S}),s.status===`COMPLETE`&&s.importResponse&&(0,Q.jsx)(vr,{importResponse:s.importResponse,onClose:()=>C(!1),onReset:S}),s.status===`ERROR`&&(0,Q.jsx)(yr,{errorMessage:s.errorMessage,showTryAgainButton:s.showTryAgainButton,onClose:()=>C(!1),onTryAgain:S})]})})}function Dr({importMemberTier:e=!1}={}){return[...ir,...e?[ar]:[]]}function Or(e){let t=((zn(e)?e.split(`.`).slice(1,2):[e])[0]??e).replace(/[._-]+/g,` `).trim();return t.charAt(0).toUpperCase()+t.slice(1)}function kr({columnKey:e,isSaving:t,nameError:n,saveError:r,canRetry:i,onSubmit:a,onEdit:o,onCancel:s}){let[c,l]=(0,Z.useState)(()=>Or(e)),[u,d]=(0,Z.useState)(Ln[0].id),f=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{f.current?.scrollIntoView({block:`nearest`})},[]);let p=()=>a(c,u);return(0,Q.jsxs)(`div`,{ref:f,className:`scroll-mb-8 space-y-3`,"data-testid":`import-create-custom-field`,onKeyDown:e=>{if(e.key===`Escape`){e.stopPropagation(),t||s();return}e.key===`Enter`&&!t&&i&&(e.preventDefault(),p())},children:[(0,Q.jsxs)(st,{className:`flex-row flex-wrap items-start gap-3`,children:[(0,Q.jsxs)(ut,{className:`min-w-56 flex-1`,"data-invalid":!!n||void 0,children:[(0,Q.jsx)(lt,{className:`text-sm!`,htmlFor:`import-custom-field-name`,children:`Name`}),(0,Q.jsx)(Qe,{"aria-invalid":!!n||void 0,autoComplete:`off`,className:`h-8 text-sm!`,id:`import-custom-field-name`,placeholder:`Enter custom field name`,value:c,autoFocus:!0,onChange:e=>{l(e.target.value),o()}}),n&&(0,Q.jsx)(ct,{children:n})]}),(0,Q.jsxs)(ut,{className:`w-44`,children:[(0,Q.jsx)(lt,{className:`text-sm!`,children:`Type`}),(0,Q.jsxs)(rt,{value:u,onValueChange:e=>d(e),children:[(0,Q.jsx)(tt,{"aria-label":`Type`,className:`h-8 text-sm!`,children:(0,Q.jsx)(nt,{children:(0,Q.jsx)(Xn,{type:u})})}),(0,Q.jsx)(et,{children:Ln.map(e=>(0,Q.jsx)($e,{value:e.id,children:(0,Q.jsx)(Xn,{type:e.id})},e.id))})]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2 self-end pb-0.5`,children:[(0,Q.jsx)(W,{disabled:t,size:`sm`,variant:`outline`,onClick:s,children:`Cancel`}),(0,Q.jsx)(W,{disabled:t||!i,size:`sm`,onClick:p,children:t?`Saving`:`Save`})]})]}),r&&(0,Q.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:r})]})}var Ar={membership:{heading:`Membership fields`,badge:null,ariaKind:null},custom:{heading:`Custom fields`,badge:`Custom`,ariaKind:`Custom field`}},jr=Object.keys(Ar);function Mr({membershipFields:e,customFieldColumns:t}){let n=[...e.map(e=>({value:e.value,source:`membership`,fieldName:e.label,label:e.label})),...t.map(e=>({value:e.value,source:`custom`,fieldName:e.fieldName,...e.partLabel===void 0?{}:{partLabel:e.partLabel},label:e.label,type:e.type}))],r=Pr(n);return n.map(e=>({...e,contested:r.has(Nr(e))}))}function Nr(e){return e.label.trim().toLowerCase()}function Pr(e){let t=new Map;for(let n of e){let e=t.get(Nr(n))??new Set;e.add(n.source),t.set(Nr(n),e)}return new Set([...t].filter(([,e])=>e.size>1).map(([e])=>e))}var Fr={email:V,name:be,note:k,subscribed_to_emails:D,stripe_customer_id:I,complimentary_plan:L,labels:F,created_at:se,gift_id:fe,import_tier:H};function Ir(e,t){return(0,Q.jsx)(te,{className:t})}function Lr({target:e,className:t}){switch(e.source){case`membership`:return(0,Q.jsx)(Fr[e.value]??te,{className:t});case`custom`:return(0,Q.jsx)(Jn,{className:t,type:e.type});default:return Ir(e,t)}}function Rr(e,t,n){return Pe((n??[]).join(` `),t)}function zr({className:e,columnKey:t,value:n,disabled:r,invalid:i,targets:a,open:o,search:s,onOpenChange:c,onSearchChange:l,onSelect:u,onCreateField:d,triggerRef:f}){let p=(0,Z.useRef)(!1),m=a.find(e=>e.value===n),h=m?.contested?Ar[m.source].badge:null,g=m?Ar[m.source].ariaKind:null,_=e=>{c(!1),u(e)};return(0,Q.jsxs)(He,{open:o,modal:!0,onOpenChange:e=>{r||c(e)},children:[(0,Q.jsx)(Be,{asChild:!0,children:(0,Q.jsxs)(W,{ref:f,"aria-disabled":r||void 0,"aria-invalid":i||void 0,"aria-label":m?`Field for ${t}, ${m.label}${g?`, ${g}`:``}`:`Field for ${t}, not chosen`,className:x(`h-(--control-height) w-full scroll-my-8 justify-start gap-2 px-2 font-normal`,e,`hover:text-current`,Xe.invalidSelf,`aria-[invalid=true]:ring-2`,r&&`cursor-not-allowed hover:bg-transparent`),role:`combobox`,variant:`outline`,children:[(0,Q.jsxs)(`span`,{className:x(`flex shrink-0 items-center`,r&&`opacity-60`),children:[m&&(0,Q.jsx)(Lr,{className:`size-4 text-foreground`,target:m}),!m&&(0,Q.jsx)(`span`,{className:`size-4 rounded-sm border border-dashed border-border-strong`})]}),m?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`span`,{className:x(`flex min-w-0 flex-1 items-baseline text-left text-sm font-medium`,r&&`opacity-60`),children:[(0,Q.jsx)(`span`,{className:`min-w-0 shrink-[999] truncate`,children:m.fieldName}),m.partLabel&&(0,Q.jsx)(`span`,{className:`min-w-0 truncate whitespace-pre`,children:` (${m.partLabel})`})]}),h&&(0,Q.jsx)(kt,{className:x(`ms-2 shrink-0 max-md:hidden`,r&&`opacity-60`),variant:`secondary`,children:h})]}):(0,Q.jsx)(`span`,{className:x(`min-w-0 truncate text-sm text-muted-foreground`,r&&`opacity-60`),children:`Select field`}),(0,Q.jsx)(U,{className:`ms-auto size-4 shrink-0 opacity-50`})]})}),(0,Q.jsx)(Ve,{align:`start`,className:`flex max-h-(--radix-popover-content-available-height) w-(--radix-popover-trigger-width) min-w-64 flex-col p-0`,collisionPadding:16,onCloseAutoFocus:e=>{p.current&&(p.current=!1,e.preventDefault(),d())},children:(0,Q.jsxs)(ze,{className:`min-h-0`,filter:Rr,children:[(0,Q.jsx)(Me,{className:`h-(--control-height) shrink-0`,placeholder:`Search fields...`,value:s,onValueChange:l}),(0,Q.jsxs)(Re,{className:`min-h-0 flex-1`,children:[jr.map(e=>(0,Q.jsx)(Ne,{heading:Ar[e].heading,children:a.filter(t=>t.source===e).map(e=>(0,Q.jsxs)(Ie,{keywords:[e.label],value:e.value,onSelect:()=>_(e.value),children:[(0,Q.jsx)(Lr,{target:e}),(0,Q.jsx)(`span`,{className:`truncate`,children:e.label}),n===e.value&&(0,Q.jsx)(Fe,{})]},e.value))},e)),(0,Q.jsx)(Ne,{forceMount:!0,children:(0,Q.jsxs)(Ie,{className:`font-semibold text-green`,value:`Add custom field`,forceMount:!0,onSelect:()=>{p.current=!0,c(!1)},children:[(0,Q.jsx)(le,{}),(0,Q.jsx)(`span`,{children:`Add custom field`})]})})]})]})})]})}function Br(e,t,n){let r=new Set(e);return n?r.add(t):r.delete(t),r}function Vr(e){return Bn(e.type)?null:Hn([e])[0]?.value??null}function Hr({status:e,fileData:t,mapping:n,mappingError:r,showMappingErrors:c,dataPreviewIndex:u,targets:d,labelPicker:p,onUpdateMapping:m,onFieldCreated:h,onDataPreviewIndexChange:g,onStartOver:_,onColumnsChanged:v,onUpload:y}){let[b,C]=(0,Z.useState)(new Set),[w,T]=(0,Z.useState)(new Set),[E,D]=(0,Z.useState)(null),O=(0,Z.useRef)(new Map);(0,Z.useLayoutEffect)(()=>{let[e]=E?.columns??[];e&&O.current.get(e)?.scrollIntoView({block:`nearest`,behavior:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`})},[E]);let[k,A]=(0,Z.useState)(null),[j,M]=(0,Z.useState)(null),{mutateAsync:N,isPending:P}=Vn(),[ee,F]=(0,Z.useState)(null),[I,L]=(0,Z.useState)(null),[R,z]=(0,Z.useState)(!0),te=l(),B=(0,Z.useCallback)(()=>{F(null),L(null),z(!0)},[]),ne=e=>{let t=e instanceof i?e.data?.errors?.[0]:null;if(e instanceof a&&t?.property===`name`){F(f(e,`Invalid name`));return}L(f(e,e instanceof s?e.message:`Could not create the custom field, please try again.`)),z(!(e instanceof o)&&t?.type!==`NoPermissionError`),e instanceof o||te(e,{withToast:!1})},V=async(e,t,n)=>{B();let r;try{r=(await N({name:t,type:n})).members_custom_fields?.[0]}catch(e){ne(e);return}if(!r){L(`The field was created, but this column could not be mapped to it. Choose it from the list.`),z(!1),te(Error(`Custom field create returned no field`));return}let i=Vr(r);if(h(e,i),A(null),D(null),i){O.current.get(e)?.focus();return}U(e,r.name)},H=e=>!!k&&k!==e.key,re=t=>e===`UPLOADING`||P,U=(e,t)=>{B(),A(null),M({columnKey:e,search:t})},oe=e=>{B(),A(e)},se=(e,t)=>{let r=n?.getKeyByValue(t);r&&r!==e.key&&C(e=>Br(e,r,!0)),m(e.key,t)},ce=e=>!w.has(e.key)&&(!!e.mapTo||b.has(e.key)),le=(e,t)=>{D(null),v(),T(n=>Br(n,e.key,!t)),C(n=>Br(n,e.key,t&&!e.mapTo)),!t&&k===e.key&&A(null)},ue=c&&r||E?.message,de=!!ue&&!E?.columns.size,fe=t.length,pe=u>0,me=!!t[u+1],he=(0,Z.useMemo)(()=>dr(t),[t]),ge=n?he.map(e=>({key:e,value:t[u]?.[e]??``,mapTo:n.get(e)})):[],_e=Object.fromEntries(ge.map(e=>[e.key,ce(e)?e.mapTo:``])),ve=()=>{if(r)return null;if(!Object.values(_e).includes(`email`))return{message:`Please map "Email" to one of the fields in the CSV, and make sure it is selected.`,columns:new Set};let e=Object.keys(_e).filter(e=>_e[e]===null);return e.length===0?null:{message:`Choose a field for ${e.map(e=>`"${e}"`).join(`, `)}, or deselect ${e.length===1?`it`:`them`}.`,columns:new Set(e)}};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5 flex min-h-0 flex-1 flex-col space-y-5`,children:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:x(`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,de&&`border-destructive`),children:(0,Q.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,Q.jsxs)(gt,{className:`table-fixed`,children:[(0,Q.jsx)(ht,{children:(0,Q.jsxs)(q,{children:[(0,Q.jsx)(K,{className:`w-10`,children:(0,Q.jsx)(`span`,{className:`sr-only`,children:`Import this column`})}),(0,Q.jsx)(K,{className:`w-[26%]`,children:`Field`}),(0,Q.jsx)(K,{className:`w-[30%]`,children:(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsxs)(`span`,{children:[`Sample data`,` `,(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(#`,S(u+1),`)`]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center`,children:[(0,Q.jsx)(`button`,{"aria-label":`Show previous sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!pe&&`cursor-default opacity-30`),disabled:!pe||e===`UPLOADING`,type:`button`,onClick:()=>g(u-1),children:(0,Q.jsx)(ie,{className:`size-4`})}),(0,Q.jsx)(`button`,{"aria-label":`Show next sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!me&&`cursor-default opacity-30`),disabled:!me||e===`UPLOADING`,type:`button`,onClick:()=>g(u+1),children:(0,Q.jsx)(ae,{className:`size-4`})})]})]})}),(0,Q.jsx)(K,{className:`w-[38%]`,children:`Import as`})]})}),(0,Q.jsx)(mt,{children:ge.length>0?ge.map(e=>(0,Q.jsxs)(Z.Fragment,{children:[(0,Q.jsxs)(q,{className:x(`transition-opacity [&>td]:group-hover:bg-transparent`,!ce(e)&&`bg-muted/50`,H(e)&&`opacity-40`),children:[(0,Q.jsx)(J,{children:(0,Q.jsx)(at,{"aria-label":`Import ${e.key}`,checked:ce(e),disabled:re(e),onCheckedChange:t=>le(e,t===!0)})}),(0,Q.jsx)(J,{className:x(`text-sm font-medium break-all`,!ce(e)&&`text-muted-foreground`),children:e.key}),(0,Q.jsx)(J,{className:x(`text-sm break-all`,(!e.value||!ce(e))&&`text-muted-foreground`),children:e.value||`\xA0`}),(0,Q.jsx)(J,{children:(0,Q.jsx)(zr,{className:x(!ce(e)&&`invisible`),columnKey:e.key,disabled:re(e),invalid:E?.columns.has(e.key),open:j?.columnKey===e.key,search:j?.columnKey===e.key?j.search:``,targets:d,triggerRef:t=>{t?O.current.set(e.key,t):O.current.delete(e.key)},value:e.mapTo,onCreateField:()=>oe(e.key),onOpenChange:t=>t?U(e.key,``):M(null),onSearchChange:t=>M({columnKey:e.key,search:t}),onSelect:t=>{D(null),se(e,t)}})})]}),k===e.key&&(0,Q.jsx)(q,{className:`bg-transparent hover:bg-transparent`,children:(0,Q.jsx)(J,{className:`p-2`,colSpan:4,children:(0,Q.jsx)(`div`,{className:`rounded-lg border bg-surface-elevated-2 p-3 shadow-lg`,children:(0,Q.jsx)(kr,{canRetry:R,columnKey:e.key,isSaving:P,nameError:ee,saveError:I,onCancel:()=>{B(),A(null),O.current.get(e.key)?.focus()},onEdit:B,onSubmit:(t,n)=>void V(e.key,t,n)})})})})]},e.key)):(0,Q.jsx)(q,{children:(0,Q.jsx)(J,{className:`text-muted-foreground`,colSpan:4,children:`No data found in the uploaded CSV.`})})})]})})}),ue&&(0,Q.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:ue}),fe>0&&(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If an email address in your CSV matches an existing member, they will be updated with the mapped values.`}),(0,Q.jsxs)(`div`,{className:`mt-5`,children:[(0,Q.jsx)(`label`,{className:`mb-1 block text-sm font-semibold`,children:`Label these members`}),(0,Q.jsx)(Kn,{isCreating:p.isCreating,labels:p.labels,optionSource:p.optionSource,resolvedSelectedLabels:p.resolvedSelectedLabels,selectedSlugs:p.selectedSlugs,onCreate:p.createLabel,onDelete:p.deleteLabel,onEdit:p.editLabel,onToggle:p.toggleLabel})]})]})}),(0,Q.jsxs)(G,{className:`mt-5`,children:[(0,Q.jsx)(W,{disabled:e===`UPLOADING`,variant:`outline`,onClick:_,children:`Start over`}),(0,Q.jsx)(W,{disabled:e===`UPLOADING`||fe===0,onClick:()=>{let e=ve();if(e){D(e);return}y(_e)},children:e===`UPLOADING`?(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(it,{color:`light`,size:`sm`}),`Uploading`]}):fe>0?`Import ${S(fe)} ${fe===1?`member`:`members`}`:`Import members`})]})]})}function Ur({open:e,onOpenChange:t,onComplete:n,onClose:r}){let[s,c]=(0,Z.useReducer)(Tr,void 0,_r),l=(0,Z.useRef)(null),{mutateAsync:u}=Lt(),p=Xt(`importMemberTier`),{data:m,isError:h}=Un(),g=(0,Z.useMemo)(()=>Hn(m?.members_custom_fields??[]),[m]),_=m!==void 0||h,v=(0,Z.useRef)({importMemberTier:p,customFieldColumns:g});(0,Z.useLayoutEffect)(()=>{v.current={importMemberTier:p,customFieldColumns:g}},[p,g]);let y=(0,Z.useMemo)(()=>Mr({membershipFields:Dr({importMemberTier:p}),customFieldColumns:g}),[p,g]),b=Gn({selectedSlugs:s.selectedLabelSlugs,onSelectionChange:e=>{E.current=!0,c({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}}),S=(0,Z.useCallback)(()=>{l.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(l.current),l.current=null):l.current&&=null},[]),C=(0,Z.useCallback)(()=>{S(),E.current=!1,c({type:`RESET`})},[S]);(0,Z.useEffect)(()=>()=>{S()},[S]);let{confirm:w,dialogProps:T}=Tn(),E=(0,Z.useRef)(!1),D=(0,Z.useCallback)(e=>{if(!(!e&&s.status===`UPLOADING`)){if(!e){w(s.status===`MAPPING`&&E.current,()=>{let e=s.importResponse??void 0;C(),r?.(e),t(!1)});return}t(e)}},[w,r,t,C,s.importResponse,s.status]);(0,Z.useEffect)(()=>{if(!s.file||!_)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=Sr(e);if(n.length>0){let e=new ur(pr(n,v.current));c({type:`PARSE_SUCCESS`,fileData:n,mapping:e,mappingError:null})}else c({type:`PARSE_SUCCESS`,fileData:[],mapping:null,mappingError:`File is empty, nothing to import. Please select a different file.`})}catch{c({type:`PARSE_FAILURE`,mappingError:`Failed to parse this file. Please try another CSV file.`})}},t.onerror=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`Failed to read file${t.error?.message?`: ${t.error.message}`:``}`})},t.onabort=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`File read was interrupted. Please try again.`})},t.readAsText(s.file),()=>{e=!0,t.readyState===FileReader.LOADING&&t.abort()}},[s.file,_]);let O=(0,Z.useCallback)(e=>{let t=/(?:\.([^.]+))?$/.exec(e.name)?.[1];return!t||t.toLowerCase()!==`csv`?(c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`}),!1):(c({type:`SET_FILE_ERROR`,fileError:null}),!0)},[]),k=(0,Z.useCallback)(e=>{O(e)&&c({type:`SELECT_FILE`,file:e})},[O]),A=(0,Z.useCallback)((e,t)=>{if(!s.mapping)return;E.current=!0;let n=s.mapping.updateMapping(e,t),r=s.fileData&&s.fileData.length===0?`File is empty, nothing to import. Please select a different file.`:null;c({type:`UPDATE_MAPPING`,mapping:n,mappingError:r})},[s.fileData,s.mapping]),j=(0,Z.useCallback)((e,t)=>{t&&A(e,t)},[A]),M=(0,Z.useCallback)(async e=>{if(!s.file||s.mappingError){c({type:`SET_SHOW_MAPPING_ERRORS`,showMappingErrors:!0});return}c({type:`UPLOAD_START`});let t=[];for(let e of s.selectedLabelSlugs){let n=b.labels.find(t=>t.slug===e);n&&t.push(n.name)}try{let r=await u({file:s.file,labels:t,mapping:e});if(qt(r)){let e=wr(r);S(),l.current=e.errorCsvUrl,c({type:`UPLOAD_COMPLETE`,importResponse:e}),n?.(e);return}c({type:`UPLOAD_ACCEPTED`}),n?.()}catch(e){if(e instanceof d){c({type:`UPLOAD_ERROR`,errorMessage:`The file you uploaded was larger than the maximum file size your server allows.`});return}let t=e instanceof i?e.data?.errors?.[0]:null;if(e instanceof o&&t?.code===`EMAIL_VERIFICATION_NEEDED`){c({type:`UPLOAD_ERROR`,errorMessage:f(e,e.message),errorHeader:`Woah there cowboy, that's a big list`,showTryAgainButton:!1}),n?.();return}if(e instanceof a||t?.type===`DataImportError`){c({type:`UPLOAD_ERROR`,errorMessage:f(e,e instanceof Error?e.message:`An unexpected error occurred, please try again`)});return}c({type:`UPLOAD_ERROR`,errorMessage:`An unexpected error occurred, please try again`})}},[s.file,s.mappingError,s.selectedLabelSlugs,b.labels,u,S,n]),N=s.status===`MAPPING`||s.status===`UPLOADING`,P=(0,Z.useMemo)(()=>{switch(s.status){case`PROCESSING`:return`Import in progress`;case`COMPLETE`:return`Import complete`;case`ERROR`:return s.errorHeader;default:return`Import members`}},[s.errorHeader,s.status]);return(0,Q.jsxs)(je,{open:e,onOpenChange:D,children:[(0,Q.jsxs)(ke,{className:x(`gap-0`,N&&`max-w-4xl`,N&&`flex max-h-[calc(100vh-16vmin)] flex-col`),children:[(0,Q.jsxs)(Oe,{children:[(0,Q.jsx)(Ae,{children:P}),(0,Q.jsx)(De,{className:`sr-only`,children:`Import members from a CSV file.`})]}),s.status===`INIT`&&(0,Q.jsx)(nr,{fileError:s.fileError,onClose:()=>D(!1),onDropAccepted:k,onDropRejected:()=>c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(s.status===`MAPPING`||s.status===`UPLOADING`)&&s.fileData===null&&(0,Q.jsx)(`div`,{className:`flex items-center justify-center rounded-md border bg-muted p-10`,children:(0,Q.jsx)(it,{size:`md`})}),(s.status===`MAPPING`||s.status===`UPLOADING`)&&s.fileData!==null&&(0,Q.jsx)(Hr,{dataPreviewIndex:s.dataPreviewIndex,fileData:s.fileData,labelPicker:b,mapping:s.mapping,mappingError:s.mappingError,showMappingErrors:s.showMappingErrors,status:s.status,targets:y,onColumnsChanged:()=>{E.current=!0},onDataPreviewIndexChange:e=>{c({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onFieldCreated:j,onStartOver:C,onUpdateMapping:A,onUpload:e=>void M(e)}),s.status===`PROCESSING`&&(0,Q.jsx)(gr,{onClose:()=>D(!1),onUploadAnotherFile:C}),s.status===`COMPLETE`&&s.importResponse&&(0,Q.jsx)(vr,{importResponse:s.importResponse,onClose:()=>D(!1),onReset:C}),s.status===`ERROR`&&(0,Q.jsx)(yr,{errorMessage:s.errorMessage,showTryAgainButton:s.showTryAgainButton,onClose:()=>D(!1),onTryAgain:C})]}),(0,Q.jsx)(Ye,{open:T.open,onOpenChange:T.onOpenChange,children:(0,Q.jsxs)(Ge,{className:`z-[1100]`,"data-testid":`import-members-leave-guard`,overlayClassName:`z-[1100]`,onEscapeKeyDown:e=>e.stopPropagation(),children:[(0,Q.jsxs)(Je,{children:[(0,Q.jsx)(We,{children:`Leave without importing?`}),(0,Q.jsx)(Ue,{children:`The columns you have mapped will be lost.`})]}),(0,Q.jsxs)(Ke,{children:[(0,Q.jsx)(qe,{children:`Keep mapping`}),(0,Q.jsx)(W,{variant:`destructive`,onClick:T.onConfirm,children:`Leave`})]})]})})]})}function Wr(e){return Xt(`membersCustomFields`)?(0,Q.jsx)(Ur,{...e}):(0,Q.jsx)(Er,{...e})}var Gr=`count.active_stripe_customers`,Kr=`${Gr}:>1`,qr=`${Gr}:<2`,Jr=vt({multipleActiveSubscriptionsBanner:vt({dismissedCount:bt().finite().optional().catch(void 0),dismissedAt:xt().optional().catch(void 0)}).optional().catch(void 0)});function Yr(e){return e===Kr}function Xr(e){if(!e)return Jr.parse({});try{let t=JSON.parse(e);return Jr.parse(t)}catch{return Jr.parse({})}}function Zr(e){return Xr(e).multipleActiveSubscriptionsBanner??{}}function Qr(e,t,n){let r=Xr(e),i=Zr(e);return JSON.stringify({...r,multipleActiveSubscriptionsBanner:{...i,dismissedCount:t,dismissedAt:n}})}function $r(e,t,n){return{...e,accessibility:Qr(e.accessibility,t,n)}}var ei=[`is`,`contains`,`does-not-contain`,`starts-with`,`ends-with`],ti=[`is`,`is-greater`,`is-less`],$=[`is`,`is-not`],ni=[`is-any`,`is-not-any`],ri=[{value:`active`,label:`Active`},{value:`trialing`,label:`Trialing`},{value:`canceled`,label:`Canceled`},{value:`unpaid`,label:`Unpaid`},{value:`past_due`,label:`Past Due`},{value:`incomplete`,label:`Incomplete`},{value:`incomplete_expired`,label:`Incomplete - Expired`}],ii={parse(){return null},serialize(e){let t=e.values[0];return e.operator!==`is`&&e.operator!==`is-not`?null:t===`email-disabled`?e.operator===`is`?[`(email_disabled:1)`]:[`(email_disabled:0)`]:t===`subscribed`?e.operator===`is`?[`(subscribed:true+email_disabled:0)`]:[`(subscribed:false,email_disabled:1)`]:t===`unsubscribed`?e.operator===`is`?[`(subscribed:false+email_disabled:0)`]:[`(subscribed:true,email_disabled:1)`]:null}},ai={parse(){return null},serialize(e,t){let n=t.params.slug,r=e.values[0];return!n||e.operator!==`is`?null:r===`subscribed`?[`(newsletters.slug:${n}+email_disabled:0)`]:r===`unsubscribed`?[`(newsletters.slug:-${n},email_disabled:1)`]:null}},oi={parse(){return null},serialize(e){let t=e.values[0];return typeof t!=`string`||!t||e.operator!==`1`&&e.operator!==`0`?null:[`(feedback.post_id:${m(t)}+feedback.score:${e.operator})`]}},si={parse(e,t){let n=wn(e);return!n||n.field!==t.key?null:n.operator===`$gt`&&n.value===1?{field:t.key,operator:`is`,values:[`true`]}:n.operator===`$lt`&&n.value===2?{field:t.key,operator:`is`,values:[`false`]}:null},serialize(e){let t=e.values[0];return e.operator===`is`?t===`true`?[Kr]:t===`false`?[qr]:null:null}},ci=[`is-set`,`is-not-set`],li=[...$,...ei.filter(e=>!$.includes(e)),...ci],ui=`custom_fields.`,di={is:``,"is-not":`-`,contains:`~`,"does-not-contain":`-~`,"starts-with":`~^`,"ends-with":`~$`},fi={parse(){return null},serialize(e,t){let n=t.params.key,[r,i]=e.values;if(!n)return null;let a=`custom_fields.key:${m(n)}`;if(e.operator===`is-set`)return r?[`(${a}+custom_fields.path:${m(r)})`]:[a];if(e.operator===`is-not-set`)return r?[`(${a}+custom_fields.path:-${m(r)})`]:[`custom_fields.key:-${m(n)}`];let o=di[e.operator];return o===void 0||i==null||i===``?null:[`(${a}+${r?`custom_fields.value.${r}`:`custom_fields.value`}:${o}${m(String(i))})`]}},pi=yn({name:{operators:ei,ui:{label:`Name`,type:`text`,placeholder:`Enter name...`,defaultOperator:`contains`,className:`w-48`},codec:pn()},email:{operators:ei,ui:{label:`Email`,type:`text`,placeholder:`Enter email...`,defaultOperator:`contains`,className:`w-48`},codec:pn()},label:{operators:ni,ui:{label:`Label`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`labels`,label:`Labels`},columnInclude:`labels`},codec:gn()},subscribed:{operators:$,ui:{label:`Newsletter subscription`,type:`select`,searchable:!1},options:[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`},{value:`email-disabled`,label:`Email disabled`}],codec:ii},last_seen_at:{operators:ln,ui:{label:`Last seen`,type:`date`,defaultOperator:xn},codec:bn()},created_at:{operators:ln,ui:{label:`Created`,type:`date`,defaultOperator:xn},codec:bn()},signup:{operators:$,ui:{label:`Signed up on post/page`,type:`select`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`},codec:X({quoteStrings:!0})},"newsletters.:slug":{operators:[`is`],ui:{label:`Newsletter`,type:`select`,searchable:!1,hideOperatorSelect:!0},options:[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`}],codec:ai},tier_id:{operators:ni,ui:{label:`Membership tier`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`tiers`,label:`Tiers`},columnInclude:`tiers`},codec:gn()},status:{operators:$,ui:{label:`Member status`,type:`select`,searchable:!1},options:[{value:`paid`,label:`Paid`},{value:`free`,label:`Free`},{value:`comped`,label:`Complimentary`}],codec:X()},"subscriptions.plan_interval":{operators:$,ui:{label:`Billing period`,type:`select`,searchable:!1},options:[{value:`month`,label:`Monthly`},{value:`year`,label:`Yearly`}],metadata:{activeColumn:{key:`subscriptions.plan_interval`,label:`Billing period`},columnInclude:`subscriptions`},codec:X()},"subscriptions.status":{operators:$,ui:{label:`Stripe subscription status`,type:`select`,searchable:!1},options:ri,metadata:{activeColumn:{key:`subscriptions.status`,label:`Subscription status`},columnInclude:`subscriptions`},codec:X()},"subscriptions.start_date":{operators:ln,ui:{label:`Paid start date`,type:`date`,defaultOperator:xn},metadata:{activeColumn:{key:`subscriptions.start_date`,label:`Paid start date`},columnInclude:`subscriptions`},codec:bn()},"subscriptions.current_period_end":{operators:ln,ui:{label:`Next billing date`,type:`date`,defaultOperator:xn},metadata:{activeColumn:{key:`subscriptions.current_period_end`,label:`Next billing date`},columnInclude:`subscriptions`},codec:bn()},conversion:{operators:$,ui:{label:`Subscription started on post/page`,type:`select`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`},codec:X({quoteStrings:!0})},email_count:{operators:ti,ui:{label:`Emails sent (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,className:`w-24`},codec:cn()},email_opened_count:{operators:ti,ui:{label:`Emails opened (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,className:`w-24`},codec:cn()},email_open_rate:{operators:ti,ui:{label:`Open rate (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,max:100,suffix:`%`,className:`w-24`},codec:cn()},"emails.post_id":{operators:$,ui:{label:`Sent email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:X({quoteStrings:!0})},"opened_emails.post_id":{operators:$,ui:{label:`Opened email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:X({quoteStrings:!0})},"clicked_links.post_id":{operators:$,ui:{label:`Clicked email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:X({quoteStrings:!0})},newsletter_feedback:{operators:[`1`,`0`],ui:{label:`Responded with feedback`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`,defaultOperator:`1`},codec:oi},offer_redemptions:{operators:ni,ui:{label:`Offer`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`offer_redemptions`,label:`Offer`}},codec:gn({quoteStrings:!0,serializeSingletonAsScalar:!0})},[Gr]:{operators:[`is`],ui:{label:`Multiple active subscriptions`,type:`select`,searchable:!1,hideOperatorSelect:!0},options:[{value:`true`,label:`Yes`},{value:`false`,label:`No`}],codec:si},"custom_fields.:key":{operators:li,ui:{label:`Custom field`,type:`custom`,component:`custom-field`},metadata:{activeColumn:({params:e,label:t})=>t?{key:`${ui}${e.key}`,label:t}:null,columnInclude:`custom_fields`},codec:fi}}),mi=yn({...pi,last_seen_at:Sn(pi.last_seen_at),created_at:Sn(pi.created_at),"subscriptions.start_date":Sn(pi[`subscriptions.start_date`]),"subscriptions.current_period_end":en(pi[`subscriptions.current_period_end`])});function hi(){return mi}var gi=2;function _i(e,t={}){let n=new Map;for(let r of e){let e=sn(mi,r.field,`UTC`),i=e?.definition.metadata?.activeColumn;if(!i)continue;let{context:a}=e;if(typeof i!=`function`){let e=Si[i.key];e&&n.set(i.key,{...i,getValue:e});continue}let o=Ci[a.pattern]?.(a.params,t);if(!o)continue;let s=i({...a,label:o.label});s&&n.set(s.key,{...s,getValue:o.getValue})}return Array.from(n.values()).slice(0,gi)}function vi(e){let t=new Set([`labels`,`tiers`]);for(let n of e){let e=sn(mi,n.field,`UTC`)?.definition.metadata?.columnInclude;e&&t.add(e)}return Array.from(t).join(`,`)}function yi({filters:e,nql:t,search:n}){if(!t&&!n)return;let r={include:vi(e),limit:`100`,order:`created_at desc`};return t&&(r.filter=t),n&&(r.search=n),r}function bi({nql:e,search:t}){return!e&&!t?{all:!0}:{...e?{filter:e}:{},...t?{search:t}:{}}}function xi(e,t){return e?{text:br.default.tz(e,t).format(`D MMM YYYY`),subtext:(0,br.default)(e).fromNow()}:null}var Si={labels:e=>e.labels?.length?{text:e.labels.map(e=>e.name).join(`, `)}:null,tiers:e=>e.tiers?.length?{text:e.tiers.map(e=>e.name).join(`, `)}:null,"subscriptions.plan_interval":e=>{let t=e.current_subscription?.plan?.interval;return t?{text:t===`month`?`Monthly`:`Yearly`}:null},"subscriptions.status":e=>{let t=e.current_subscription?.status;return t?{text:t.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}:null},"subscriptions.start_date":(e,t)=>xi(e.current_subscription?.start_date,t),"subscriptions.current_period_end":(e,t)=>xi(e.current_subscription?.current_period_end,t),offer_redemptions:e=>{let t=e.subscriptions?.map(e=>e.offer?.name).filter(Boolean);return t?.length?{text:t.join(`, `)}:null}},Ci={"custom_fields.:key":({key:e},{customFields:t})=>{let n=t?.find(t=>t.key===e);return n?{label:n.name,getValue:e=>{let t=Wn(n.type,e.custom_fields?.[n.key]);return t?{text:t}:null}}:null}};async function wi(e,t){let n=new URLSearchParams({limit:`all`});e&&n.set(`filter`,e),t&&n.set(`search`,t),await u(`/members/upload/?${n}`,`members.csv`)}var Ti=({hasFilterOrSearch:e,memberCount:t,nql:n,search:r,canBulkDelete:i,showMenu:a=!0,showNewMember:o=!0,onImportComplete:s})=>{let c=y(),l=b(),u=c.pathname===`/members/import`,d=c.search??``,f=c.pathname===`/members`?`${c.pathname}${d}`:`/members`,m=`#/members/new?back=${encodeURIComponent(f)}`,[h,g]=(0,Z.useState)(!1),[_,v]=(0,Z.useState)(!1),[x,C]=(0,Z.useState)(!1),[w,T]=(0,Z.useState)(!1),{data:E,isLoading:D}=Ct({searchParams:{filter:`status:-archived`,limit:`50`}}),k=E?.newsletters||[],{mutateAsync:A,isPending:M}=Vt(),{mutate:N,isPending:ee}=Zt(),[I,L]=(0,Z.useState)(!1),R=bi({nql:n,search:r}),z=(0,Z.useCallback)(async()=>{try{await wi(n,r)}catch(e){throw p.error(`Export failed`,{description:`There was a problem downloading your member data. Please check your connection and try again.`}),e}},[n,r]),te=(0,Z.useCallback)(async e=>{try{for(let t of e)await A({...R,action:{type:`addLabel`,meta:{label:{id:t}}}});g(!1),p.success(e.length>1?`Labels added successfully`:`Label added successfully`)}catch{p.error(`Failed to add label`,{description:`There was a problem applying this label. Please try again.`})}},[A,R]),B=(0,Z.useCallback)(async e=>{try{for(let t of e)await A({...R,action:{type:`removeLabel`,meta:{label:{id:t}}}});v(!1),p.success(e.length>1?`Labels removed successfully`:`Label removed successfully`)}catch{p.error(`Failed to remove label`,{description:`There was a problem removing this label. Please try again.`})}},[A,R]),ne=(0,Z.useCallback)(async e=>{let t=R;if(e===null){try{await A({...t,action:{type:`unsubscribe`}}),C(!1),p.success(`Members unsubscribed successfully`)}catch{p.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}return}L(!0);try{let n=await Promise.allSettled(e.map(e=>A({...t,action:{type:`unsubscribe`,newsletter:e}}))),r=n.filter(e=>e.status===`fulfilled`).length,i=n.length;C(!1),r===i?p.success(`Unsubscribed from ${i} ${i===1?`newsletter`:`newsletters`}`):r>0?p.warning(`Unsubscribed from ${r} of ${i} newsletters`,{description:`Some newsletters could not be unsubscribed. Please try again.`}):p.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}catch{p.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}finally{L(!1)}},[A,R]),V=(0,Z.useCallback)(()=>{N(R,{onSuccess:()=>{T(!1),p.success(`Members deleted successfully`)},onError:()=>{p.error(`Failed to delete members`,{description:`There was a problem deleting these members. Please try again.`})}})},[N,R]),H=(0,Z.useCallback)(async()=>{try{await wi(n,r)}catch(e){throw p.error(`Export failed`,{description:`There was a problem downloading your backup. Please check your connection and try again.`}),e}},[n,r]),ie=(0,Z.useCallback)(()=>{},[]),ae=(0,Z.useCallback)(()=>{l(`/members/import${d}`)},[d,l]),U=(0,Z.useCallback)(e=>{s?.(e)},[s]),oe=(0,Z.useCallback)(e=>{if(e?.importLabel){l(Zn({filter:`label:[${e.importLabel.slug}]`}),{replace:!0});return}l(`/members${d}`,{replace:!0})},[d,l]);return(0,Q.jsxs)(Q.Fragment,{children:[a&&(0,Q.jsxs)(Et,{children:[(0,Q.jsx)(Mt,{asChild:!0,children:(0,Q.jsx)(W,{"data-testid":`members-actions`,variant:`outline`,children:(0,Q.jsx)(O,{className:`size-4`})})}),(0,Q.jsxs)(Ft,{align:`end`,children:[(0,Q.jsxs)(Ot,{onClick:ae,children:[(0,Q.jsx)(xe,{className:`mr-2 size-4`}),`Import members`]}),t>0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(Ot,{onClick:()=>void z(),children:[(0,Q.jsx)(pe,{className:`mr-2 size-4`}),e?`Export ${S(t)} members`:`Export all members`]}),(0,Q.jsx)(It,{}),(0,Q.jsxs)(Ot,{onClick:()=>g(!0),children:[(0,Q.jsx)(P,{className:`mr-2 size-4`}),`Add label to `,S(t),` `,t===1?`member`:`members`]}),(0,Q.jsxs)(Ot,{onClick:()=>v(!0),children:[(0,Q.jsx)(F,{className:`mr-2 size-4`}),`Remove label from `,S(t),` `,t===1?`member`:`members`]}),(0,Q.jsxs)(Ot,{disabled:D,onClick:()=>C(!0),children:[(0,Q.jsx)(re,{className:`mr-2 size-4`}),`Unsubscribe `,S(t),` `,t===1?`member`:`members`]}),(0,Q.jsx)(It,{}),(0,Q.jsxs)(Ot,{className:`text-destructive focus:text-destructive`,disabled:!i,onClick:()=>T(!0),children:[(0,Q.jsx)(j,{className:`mr-2 size-4`}),`Delete `,S(t),` `,t===1?`member`:`members`]})]})]})]}),o&&(0,Q.jsx)(W,{asChild:!0,children:(0,Q.jsxs)(`a`,{"aria-label":`New member`,className:`inline-flex items-center`,href:m,children:[(0,Q.jsx)(`span`,{className:`hidden sm:inline`,children:`New member`}),(0,Q.jsx)(`span`,{className:`sm:hidden`,children:(0,Q.jsx)(le,{})})]})}),(0,Q.jsx)(Wr,{open:u,onClose:oe,onComplete:U,onOpenChange:ie}),(0,Q.jsx)(Qn,{isLoading:M,memberCount:t,open:h,onConfirm:e=>void te(e),onOpenChange:g}),(0,Q.jsx)($n,{isLoading:M,memberCount:t,nql:n,open:_,search:r,onConfirm:e=>void B(e),onOpenChange:v}),(0,Q.jsx)(er,{isLoading:M||I,memberCount:t,newsletters:k,open:x,onConfirm:e=>void ne(e),onOpenChange:C}),(0,Q.jsx)(tr,{isLoading:ee,memberCount:t,open:w,onConfirm:V,onExportBackup:H,onOpenChange:T})]})},Ei=({membershipsEnabled:e,onMemberCreated:t})=>{let{data:n,isLoading:r}=c(),{mutateAsync:i,isPending:a}=Yt(),o=l(),s=(0,Z.useCallback)(async()=>{if(!(!n||a))try{await i({email:n.email,name:n.name}),p.success(`You've been added as a member`),await t?.()}catch(e){o(e)}},[i,n,o,a,t]);return e?(0,Q.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Q.jsx)(ot,{actions:(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-2 sm:flex-row`,children:[(0,Q.jsx)(W,{asChild:!0,children:(0,Q.jsx)(v,{to:`/members/new?back=%2Fmembers`,children:`New member`})}),(0,Q.jsx)(W,{disabled:a||r||!n,variant:`outline`,onClick:()=>void s(),children:a?`Adding...`:`Add yourself as a member`})]}),(0,Q.jsxs)(`p`,{className:`text-sm leading-tight text-pretty text-muted-foreground`,children:[`Already have members?`,` `,(0,Q.jsx)(v,{className:`font-medium text-foreground underline-offset-4 hover:underline`,to:`/members/import`,children:`Import with CSV`})]})]}),description:`Use memberships to allow your readers to sign up and subscribe to your content.`,title:`Start building your audience`,children:(0,Q.jsx)(me,{})})}):(0,Q.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Q.jsx)(ot,{actions:(0,Q.jsx)(W,{variant:`outline`,asChild:!0,children:(0,Q.jsx)(`a`,{href:`#/settings/members`,children:`Membership settings`})}),description:`Adjust your membership settings to start adding members.`,title:`Memberships have been disabled`,children:(0,Q.jsx)(me,{})})})},Di=Rt.extend({route:St(`members`),filter:yt(xt(),xt().nullable()).refine(e=>typeof e.filter==`string`&&e.filter.length>0)}),Oi=`A view with this name already exists`,ki=`Saved view could not be found for update`,Ai=`Multiple saved views matched update target`,ji=`Saved view could not be found for delete`,Mi=`Multiple saved views matched delete target`;function Ni(e){return Di.safeParse(e).success}function Pi(e){let t=Ht(e);return t.ok?{ok:!0,views:t.views.filter(Ni)}:t}function Fi(e,t){return{name:e.trim(),route:`members`,filter:{filter:t}}}function Ii(e,t,n,r){let i=Fi(t,n);if(r){let t=Kt(e,r);if(t.length===0)throw Error(ki);if(t.length>1)throw Error(Ai);let n=t[0];if(Jt(e,i,n))throw Error(Oi);return e.map((e,t)=>t===n?i:e)}if(Jt(e,i))throw Error(Oi);return[...e,i]}function Li(e,t){let n=Kt(e,t);if(n.length===0)throw Error(ji);if(n.length>1)throw Error(Mi);let r=n[0];return e.filter((e,t)=>t!==r)}var Ri=`Cannot modify saved views because shared_views is invalid`;function zi(e){return Qt(e?.settings??null,`shared_views`)??`[]`}function Bi(){let{data:e}=Nt(),t=l(),n=zi(e),r=(0,Z.useRef)(null),i=(0,Z.useMemo)(()=>Pi(n),[n]);return(0,Z.useEffect)(()=>{i.ok||r.current===n||(r.current=n,t(i.error,{withToast:!1}))},[t,i,n]),i.ok?i.views:[]}function Vi(){let{data:e}=Nt(),{mutateAsync:t}=Tt(),n=l();return(0,Z.useCallback)(async(r,i,a)=>{let o=Ht(zi(e));if(!o.ok){let e=Error(Ri,{cause:o.error});throw n(e,{withToast:!1}),e}let s=Ii(o.views,r,i,a);try{await t([{key:`shared_views`,value:JSON.stringify(s)}])}catch(e){throw n(e,{withToast:!1}),e}},[e,t,n])}function Hi(){let{data:e}=Nt(),{mutateAsync:t}=Tt(),n=l();return(0,Z.useCallback)(async r=>{let i=Ht(zi(e));if(!i.ok){let e=Error(Ri,{cause:i.error});throw n(e,{withToast:!1}),e}let a=Li(i.views,r);try{await t([{key:`shared_views`,value:JSON.stringify(a)}])}catch(e){throw n(e,{withToast:!1}),e}},[e,t,n])}function Ui(e,t){return(0,Z.useMemo)(()=>!t||e.length===0?null:e.find(e=>e.filter.filter===t)??null,[e,t])}var Wi=({filter:e,existingViews:t,activeView:n,onDeleted:r,onClose:i})=>{let[a,o]=(0,Z.useState)(()=>n?.name??``),[s,c]=(0,Z.useState)(``),[l,u]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(!1),[p,m]=(0,Z.useState)(!1),h=Vi(),g=Hi(),_=!!n,v=async()=>{let r=a.trim();if(!r){c(`Please enter a name`);return}if(!_&&t.find(e=>e.name.trim().toLowerCase()===r.toLowerCase())){c(`A view with this name already exists`);return}u(!0);try{await h(r,e,n??void 0),i()}catch(e){c(e instanceof Error?e.message:`Failed to save view`)}finally{u(!1)}},y=async()=>{if(n){f(!0);try{await g(n),i(),r?.()}catch(e){c(e instanceof Error?e.message:`Failed to delete view`)}finally{f(!1)}}};return(0,Q.jsx)(Ve,{align:`end`,className:`w-72`,children:(0,Q.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Q.jsx)(`h3`,{className:`text-sm font-semibold`,children:_?`Edit view`:`Save view`}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Q.jsx)(Qe,{placeholder:`View name`,value:a,autoFocus:!0,onChange:e=>{o(e.target.value),s&&c(``)},onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),v())}}),s&&(0,Q.jsx)(`p`,{className:`text-xs text-red-500`,children:s})]}),_?p?(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Delete view?`}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(W,{size:`sm`,variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Q.jsx)(W,{disabled:d,size:`sm`,variant:`destructive`,onClick:()=>void y(),children:d?`Deleting...`:`Delete`})]})]}):(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsx)(W,{className:`text-red hover:bg-red/5 hover:text-red`,size:`sm`,variant:`ghost`,onClick:()=>m(!0),children:`Delete`}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(W,{size:`sm`,variant:`outline`,onClick:i,children:`Cancel`}),(0,Q.jsx)(W,{disabled:l||!a.trim(),size:`sm`,onClick:()=>void v(),children:l?`Saving...`:`Save`})]})]}):(0,Q.jsx)(W,{className:`w-full`,disabled:l||!a.trim(),onClick:()=>void v(),children:l?`Saving...`:`Save`})]})})},Gi=({filter:e,existingViews:t,activeView:n,onDeleted:r})=>{let[i,a]=(0,Z.useState)(!1),o=n?`edit:${n.name}:${n.filter.filter}`:`save:${e}`;return(0,Q.jsxs)(He,{open:i,onOpenChange:a,children:[(0,Q.jsx)(Be,{asChild:!0,children:(0,Q.jsx)(W,{variant:`outline`,children:n?`Edit view`:`Save view`})}),i&&(0,Q.jsx)(Wi,{activeView:n,existingViews:t,filter:e,onClose:()=>a(!1),onDeleted:r},o)]})},Ki=({field:e,values:t,onChange:n,operator:r,onOperatorChange:i,readOnly:a})=>{let{data:o}=Rn(),s=o?.members_custom_fields??[],c=(e.key??``).slice(ui.length),l=s.find(e=>e.key===c),u=l?(Bn(l.type)??[]).map(({key:e,label:t})=>({value:e,label:t})):[],d=e.label??l?.name??`Custom field`,f=u.length>0,[p=``,m=``]=t,h=f&&p===``?ci:li;(0,Z.useEffect)(()=>{a||!i||h.includes(r)||i(`is-set`)},[a,r,h,i]);let g=!ci.includes(r),_=[{value:``,label:`Any`},...u];return(0,Q.jsxs)(Q.Fragment,{children:[f&&(0,Q.jsx)(Ee,{ariaLabel:`${d} part`,options:_,readOnly:a,testId:`custom-field-filter-subfield`,value:p,onChange:e=>n([e,m])}),i&&(0,Q.jsx)(Ee,{ariaLabel:`${d} operator`,options:fn(h),readOnly:a,testId:`custom-field-filter-operator`,value:r,onChange:i}),g&&(0,Q.jsx)(Te,{ariaLabel:`${d} value`,placeholder:`Enter value...`,readOnly:a,testId:`custom-field-filter-value`,value:m,onChange:e=>n([p,e])})]})},qi=5,Ji={"is-any":`is any of`,"is-not-any":`is none of`,"does-not-contain":`does not contain`,...rn,...Cn,1:`More like this`,0:`Less like this`},Yi={"is-greater":`is greater than`,"is-less":`is less than`};function Xi(e){switch(e){case`name`:return Z.createElement(be,{className:`size-4`});case`email`:case`subscribed`:return Z.createElement(V,{className:`size-4`});case`label`:return Z.createElement(F,{className:`size-4`});case`last_seen_at`:return Z.createElement(M,{className:`size-4`});case`created_at`:return Z.createElement(se,{className:`size-4`});case`signup`:return Z.createElement(ue,{className:`size-4`});case`tier_id`:case`subscriptions.status`:return Z.createElement(I,{className:`size-4`});case`status`:return Z.createElement(ee,{className:`size-4`});case`subscriptions.plan_interval`:return Z.createElement(_e,{className:`size-4`});case`subscriptions.start_date`:return Z.createElement(he,{className:`size-4`});case`subscriptions.current_period_end`:return Z.createElement(ce,{className:`size-4`});case`conversion`:return Z.createElement(B,{className:`size-4`});case`email_count`:case`emails.post_id`:return Z.createElement(D,{className:`size-4`});case`email_opened_count`:case`opened_emails.post_id`:return Z.createElement(ge,{className:`size-4`});case`email_open_rate`:return Z.createElement(Ce,{className:`size-4`});case`clicked_links.post_id`:return Z.createElement(R,{className:`size-4`});case`newsletter_feedback`:return Z.createElement(z,{className:`size-4`});case`offer_redemptions`:return Z.createElement(L,{className:`size-4`});case Gr:return Z.createElement(ve,{className:`size-4`});default:return e.startsWith(`newsletters.`)?Z.createElement(N,{className:`size-4`}):void 0}}function Zi(e,t){return{options:e,valueSource:t}}function Qi(e){let t=new Map,n=[],r=[];for(let t of e)t.redemption_type===`retention`&&(t.cadence===`month`?n.push(t.id):t.cadence===`year`&&r.push(t.id));return n.length>0&&t.set(`retention:month`,n),r.length>0&&t.set(`retention:year`,r),t}function $i(e){return Array.isArray(e.metadata?.offerIds)?e.metadata.offerIds.filter(e=>typeof e==`string`):null}function ea(e){let t=[],n=Qi(e);for(let n of e)n.redemption_type!==`retention`&&t.push({value:n.id,label:n.name});return n.has(`retention:month`)&&t.push({value:`retention:month`,label:`Monthly Retention`,metadata:{offerIds:n.get(`retention:month`)}}),n.has(`retention:year`)&&t.push({value:`retention:year`,label:`Yearly Retention`,metadata:{offerIds:n.get(`retention:year`)}}),t}function ta(e,t){let n=[],r=new Set;for(let i of t){let t=$i(i);t&&t.length>0&&t.every(t=>e.includes(t))&&(n.push(String(i.value)),t.forEach(e=>{r.add(e)}))}for(let t of e)r.has(t)||n.push(t);return n}function na(e,t){let n=[];for(let r of e){let e=t.find(e=>e.value===r),i=e?$i(e):null;i?n.push(...i):n.push(r)}return[...new Set(n)]}function ra(e){return new Map(e.map(e=>[e.id,e.name]))}function ia(e,t,n){let r=e.map(e=>t.find(t=>t.value===e)).filter(e=>!!e);return r.length===1?r[0].label:r.length>1?`${r.length} selected`:e.length===1?n.get(e[0])??`Select...`:e.length>1?`${e.length} selected`:`Select...`}function aa({labelValueSource:e,tierValueSource:t,newsletters:n=[],hydratedNewsletterSlugs:r=[],hasMultipleTiers:i=!1,paidMembersEnabled:a=!1,emailFiltersEnabled:o=!1,postValueSource:s,emailValueSource:c,offers:l=[],multipleActiveSubscriptionsCount:u=0,membersTrackSources:d=!1,emailTrackOpens:f=!1,emailTrackClicks:p=!1,customFieldsEnabled:m=!1,customFields:h=[],archivedCustomFields:g=[],siteTimezone:_=`UTC`}){return(0,Z.useMemo)(()=>{let v=hi();function y(e,t={},n=Ji){let r;return r=e.startsWith(`newsletters.`)?v[`newsletters.:slug`]:e.startsWith(`custom_fields.`)?v[`custom_fields.:key`]:v[e],{key:e,...r.ui,icon:Xi(e),operators:fn(r.operators,{labels:n}),...`options`in r&&r.options?{options:r.options}:{},...t}}function b(e,t,n={}){let r=v[e],i=y(e,{defaultValue:t,...n});return tn(r)?{...i,customRenderer:on(t)}:i}let x=[],S=n.filter(e=>e.status!==`archived`),C=new Set(S.map(e=>e.slug)),w=[...new Set(r)].map(e=>({slug:e,name:n.find(t=>t.slug===e)?.name??e})),T=w.filter(e=>!C.has(e.slug)),E=ea(l),D=ra(l),O=un(_),k=[y(`name`),y(`email`)];if(e&&k.push(y(`label`,{...Zi([],e),customRenderer:e=>Z.createElement(qn,e)})),S.length<=1){k.push(y(`subscribed`));for(let e of w)k.push(y(`newsletters.${e.slug}`,{label:e.name}))}if(k.push(b(`last_seen_at`,O),b(`created_at`,O)),d&&k.push(y(`signup`,Zi([],s))),x.push({group:`Basic`,fields:k}),m){let e=h.map(e=>y(`custom_fields.${e.key}`,{label:e.name,icon:Z.createElement(Jn,{type:e.type,className:`size-4`}),defaultOperator:`contains`,renderOperatorInValue:!0,customRenderer:e=>Z.createElement(Ki,e)})),t=g.map(e=>y(`custom_fields.${e.key}`,{label:e.name,icon:Z.createElement(ne,{className:`size-4`}),readOnly:!0,renderOperatorInValue:!0,customRenderer:e=>Z.createElement(Ki,e)})),n=[...e,...t];n.length>0&&x.push({group:`Custom fields`,fields:n,previewLimit:qi})}if(S.length>1){let e=[y(`subscribed`,{label:`All newsletters`,options:[{value:`subscribed`,label:`Subscribed to at least one`},{value:`unsubscribed`,label:`Unsubscribed from all`},{value:`email-disabled`,label:`Email disabled`}]})];for(let t of S)e.push(y(`newsletters.${t.slug}`,{label:t.name}));for(let t of T)e.push(y(`newsletters.${t.slug}`,{label:t.name}));x.push({group:`Newsletters`,fields:e})}if(a){let e=[];i&&e.push(y(`tier_id`,Zi([],t))),e.push(y(`status`,{options:[...v.status.options,{value:`gift`,label:`Gift subscription`}]})),u>0&&e.push(y(Gr)),e.push(y(`subscriptions.plan_interval`),y(`subscriptions.status`),b(`subscriptions.start_date`,O),b(`subscriptions.current_period_end`,O)),d&&e.push(y(`conversion`,Zi([],s))),l.length>0&&e.push(y(`offer_redemptions`,{options:E,customValueRenderer:e=>ia(e,E,D)})),x.push({group:`Subscription`,fields:e})}if(o){let e=[y(`email_count`,{},Yi),y(`email_opened_count`,{},Yi)];f&&e.push(y(`email_open_rate`,{},Yi)),e.push(y(`emails.post_id`,Zi([],c))),f&&e.push(y(`opened_emails.post_id`,Zi([],c))),p&&e.push(y(`clicked_links.post_id`,Zi([],c))),e.push(y(`newsletter_feedback`,Zi([],c))),x.push({group:`Email`,fields:e})}return x},[o,c,m,h,g,p,f,i,e,d,u,n,l,r,a,s,_,t])}var oa=[],sa=[];function ca(e,t){return e.map(e=>e.field===`offer_redemptions`?{...e,values:t(e.values)}:e)}var la=({filters:e,multipleActiveSubscriptionsCount:t,nql:n,onFiltersChange:r,savedViews:i=[],activeView:a,iconOnly:o=!1})=>{let{data:s}=h({}),{data:c}=Ct({searchParams:{limit:`100`}}),{data:l}=Nt({}),u=l?.settings||[],d=At()===!0,f=Ut()??!0,p=wt()===!0,m=Wt()===!0,g=jt()===!0,_=En(u),v=c?.newsletters||[],y=(0,Z.useMemo)(()=>s?.offers??oa,[s?.offers]),b=(0,Z.useMemo)(()=>ea(y),[y]),S=(0,Z.useMemo)(()=>[...new Set(e.map(e=>e.field).filter(e=>e.startsWith(`newsletters.`)).map(e=>e.slice(12)).filter(Boolean))],[e]),C=(0,Z.useMemo)(()=>ca(e,e=>ta(e,b)),[e,b]),w=(0,Z.useCallback)(e=>{r(ca(e,e=>na(e,b)))},[r,b]),T=jn(),E=kn(),D=An(),{valueSource:O,hasMultipleTiers:k}=Mn(),A=Xt(`membersCustomFields`),{data:j}=Un({enabled:A}),M=j?.members_custom_fields??sa,N=(0,Z.useMemo)(()=>new Set(e.map(e=>e.field).filter(e=>e.startsWith(ui)).map(e=>e.slice(ui.length)).filter(Boolean)),[e]),{data:P}=Rn({enabled:A&&N.size>0}),ee=aa({newsletters:v,hydratedNewsletterSlugs:S,hasMultipleTiers:k,paidMembersEnabled:d,emailFiltersEnabled:f,labelValueSource:D,tierValueSource:O,offers:y,multipleActiveSubscriptionsCount:t,postValueSource:T,emailValueSource:E,membersTrackSources:p,emailTrackOpens:m,emailTrackClicks:g,siteTimezone:_,customFieldsEnabled:A,customFields:M,archivedCustomFields:(0,Z.useMemo)(()=>(P?.members_custom_fields??sa).filter(e=>e.status===`archived`&&N.has(e.key)).map(e=>({key:e.key,name:e.name})),[P,N])}),F=e.length>0,I=x(`bg-white dark:bg-background`,o&&!F&&`min-w-[34px] gap-0 !px-3 text-[0px] lg:min-w-0 lg:gap-1.5 lg:px-3 lg:text-base`),L=F?(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center gap-4 sm:absolute sm:top-0 sm:right-0`,children:[(0,Q.jsxs)(W,{className:`hidden items-center gap-1 !px-0 text-sm font-normal text-muted-foreground hover:bg-transparent hover:text-foreground lg:inline-flex`,type:`button`,variant:`ghost`,onClick:()=>r([]),children:[(0,Q.jsx)(oe,{className:`size-4`}),`Clear`]}),n&&(0,Q.jsx)(Gi,{activeView:a,existingViews:i,filter:n,onDeleted:()=>r([])})]}):void 0;return(0,Q.jsx)(we,{addButtonClassName:I,addButtonIcon:F?(0,Q.jsx)(Se,{}):(0,Q.jsx)(de,{}),addButtonText:F?`Add filter`:`Filter`,allowMultiple:!0,className:`[&>button]:order-last ${F?`sm:!pr-40 [&>button]:border-none`:`w-auto`}`,clearButton:L,fields:ee,filters:C,keyboardShortcut:`f`,popoverAlign:`start`,popoverContentClassName:`z-[80] w-[280px] [&_[data-slot=command-list]]:max-h-[450px]`,showClearButton:F,showSearchInput:!0,onChange:w})},ua=({search:e,onSearchChange:t,autoFocus:n=!1,ariaLabel:r=`Search members`})=>{let i=r===`Search members mobile`?`members-mobile-search-input`:`members-search-input`;return(0,Q.jsxs)(pt,{className:`h-(--control-height) min-w-0 basis-full lg:w-[180px] lg:basis-auto xl:w-[240px]`,children:[(0,Q.jsx)(ft,{children:(0,Q.jsx)(ye,{className:`size-4`,strokeWidth:1.75})}),(0,Q.jsx)(dt,{"aria-label":r,autoFocus:n,className:`!h-[34px]`,"data-testid":i,placeholder:`Search members...`,value:e,onChange:e=>t(e.target.value)})]})},da=({children:e,description:t,title:n,url:r})=>(0,Q.jsx)(`a`,{className:`group/card block rounded-xl border bg-card p-6 transition-all hover:bg-table-row-hover hover:shadow-xs`,href:r,rel:`noopener noreferrer`,target:`_blank`,children:(0,Q.jsxs)(`div`,{className:`flex items-center gap-6`,children:[e,(0,Q.jsxs)(`div`,{className:`flex flex-col leading-tight`,children:[(0,Q.jsx)(`h4`,{className:`text-md font-medium tracking-normal text-pretty text-foreground`,children:n}),(0,Q.jsx)(`p`,{className:`mt-1.5 text-sm leading-tight text-pretty text-muted-foreground`,children:t})]})]})}),fa=`flex h-18 w-[100px] min-w-[100px] items-center justify-center rounded-md p-4 opacity-80 transition-all group-hover/card:opacity-100`,pa=()=>(0,Q.jsxs)(`div`,{className:`grid w-full grid-cols-1 gap-4 lg:grid-cols-2`,children:[(0,Q.jsx)(da,{description:`Learn how to turn anonymous visitors into logged-in members with memberships in Ghost.`,title:`Building your audience with subscriber signups`,url:`https://ghost.org/resources/build-audience-subscriber-signups/`,children:(0,Q.jsx)(`div`,{className:x(fa,`bg-gradient-to-tr from-[#22C55E]/20 to-[#84CC16]/20`),children:(0,Q.jsx)(ue,{className:`text-[#16A34A]`,size:20,strokeWidth:1.5})})}),(0,Q.jsx)(da,{description:`Starting from zero? Use this guide to find your founding audience members.`,title:`Get your first 100 email subscribers`,url:`https://ghost.org/resources/first-100-email-subscribers/`,children:(0,Q.jsx)(`div`,{className:x(fa,`bg-gradient-to-tl from-[#A855F7]/20 to-[#EC4899]/20`),children:(0,Q.jsx)(V,{className:`text-[#DB2777]`,size:20,strokeWidth:1.5})})})]});function ma(e,t){let n=new URLSearchParams;t&&n.set(`back`,t);let r=n.toString();return`/members/${e}${r?`?${r}`:``}`}var ha={left:`100%`};function ga(e){if(!e)return{text:`Unknown`,isKnown:!1};try{let t=JSON.parse(e);return t.country?t.country_code===`US`&&t.region?{text:`${t.region}, US`,isKnown:!0}:{text:t.country,isKnown:!0}:{text:`Unknown`,isKnown:!1}}catch{return{text:`Unknown`,isKnown:!1}}}function _a(e){switch(e){case`paid`:return`Paid`;case`comped`:return`Complimentary`;case`gift`:return`Gift`;default:return`Free`}}function va(e){return e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey}function ya(e,t){window.open(`#${ma(e,t)}`,`_blank`,`noopener`)}function ba({item:e,backPath:t,onClick:n}){return(0,Q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,Q.jsx)($t,{className:`size-8 min-w-8`,email:e.email,name:e.name,src:e.avatar_image}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(v,{className:`block min-w-0 cursor-pointer`,to:ma(e.id,t),onClick:n?t=>{if(va(t)){t.stopPropagation();return}t.preventDefault(),t.stopPropagation(),n(e.id)}:void 0,children:(0,Q.jsx)(`span`,{className:`block truncate text-md font-semibold`,children:e.name||e.email||`Anonymous`})}),e.name&&e.email&&(0,Q.jsx)(`div`,{className:`truncate text-muted-foreground`,"data-testid":`member-email`,children:e.email})]})]})}function xa({status:e,tiers:t}){let n=t?.map(e=>e.name).join(`, `);return(0,Q.jsx)(`div`,{className:`flex min-w-0 justify-start`,children:(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`div`,{className:`truncate`,children:_a(e)}),n&&(0,Q.jsx)(`div`,{className:`truncate text-sm text-muted-foreground`,children:n})]})})}function Sa({emailOpenRate:e}){let t=e!=null;return(0,Q.jsx)(`div`,{className:x(`text-base`,t?`text-foreground`:`text-muted-foreground`),children:t?C(e/100):`N/A`})}function Ca({geolocation:e}){let t=ga(e);return(0,Q.jsx)(`div`,{className:x(`truncate text-base`,t.isKnown?`text-foreground`:`text-muted-foreground`),children:t.text})}function wa({createdAt:e}){return(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{className:`text-base`,children:br.default.utc(e).format(`D MMM YYYY`)}),(0,Q.jsx)(`div`,{className:`text-base text-muted-foreground`,children:br.default.utc(e).fromNow()})]})}function Ta({column:e,member:t,timezone:n}){let r=e.getValue(t,n);return r?(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`div`,{className:`truncate text-base`,title:r.text,children:r.text}),r.subtext&&(0,Q.jsx)(`div`,{className:`truncate text-base text-muted-foreground`,title:r.subtext,children:r.subtext})]}):(0,Q.jsx)(`span`,{className:`text-base text-muted-foreground`,children:`-`})}var Ea=(0,Z.forwardRef)(function({item:e,activeColumns:t,backPath:n,columnStyles:r,showPinnedEdge:i,showEmailOpenRate:a,timezone:o,onClick:s,...c},l){let u=t=>{if(va(t)){ya(e.id,n);return}s(e.id)},d=t=>{t.button===1&&(t.preventDefault(),ya(e.id,n))};return(0,Q.jsxs)(q,{...c,ref:l,className:x(`group cursor-pointer`,c.className),"data-testid":`members-list-item`,onAuxClick:d,onClick:u,children:[(0,Q.jsxs)(J,{className:x(`min-w-0 bg-background px-4 py-3 group-hover:bg-[var(--members-sticky-hover-bg)] max-sm:!w-full max-sm:!min-w-0 lg:sticky lg:left-0 lg:z-20`),children:[(0,Q.jsx)(ba,{backPath:n,item:e,onClick:s}),i&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] group-hover:opacity-0 lg:block`,style:{...ha,background:`linear-gradient(to right, var(--background) 0px, color-mix(in hsl, var(--background) 78%, transparent) 6px, color-mix(in hsl, var(--background) 28%, transparent) 16px, transparent 24px)`}}),(0,Q.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] opacity-0 group-hover:opacity-100 lg:block`,style:{...ha,background:`linear-gradient(to right, var(--members-sticky-hover-bg) 0px, color-mix(in hsl, var(--members-sticky-hover-bg) 78%, transparent) 6px, color-mix(in hsl, var(--members-sticky-hover-bg) 28%, transparent) 16px, transparent 24px)`}})]})]}),(0,Q.jsx)(J,{className:`hidden px-4 py-3 sm:table-cell`,style:r.status,children:(0,Q.jsx)(xa,{status:e.status,tiers:e.tiers})}),a&&(0,Q.jsx)(J,{className:`hidden px-4 py-3 lg:table-cell`,style:r.openRate,children:(0,Q.jsx)(Sa,{emailOpenRate:e.email_open_rate})}),(0,Q.jsx)(J,{className:`hidden px-4 py-3 lg:table-cell`,style:r.location,children:(0,Q.jsx)(Ca,{geolocation:e.geolocation})}),(0,Q.jsx)(J,{className:`hidden px-4 py-3 lg:table-cell`,style:r.created,children:(0,Q.jsx)(wa,{createdAt:e.created_at})}),t.map(t=>(0,Q.jsx)(J,{className:`hidden px-4 py-3 lg:table-cell`,style:r.dynamic,children:(0,Q.jsx)(Ta,{column:t,member:e,timezone:o})},t.key))]})}),Da={left:`100%`,background:`linear-gradient(to right, var(--members-sticky-fade-base) 0px, color-mix(in hsl, var(--members-sticky-fade-base) 78%, transparent) 6px, color-mix(in hsl, var(--members-sticky-fade-base) 28%, transparent) 16px, transparent 24px)`},Oa=({activeColumns:e,columnStyles:t,showEmailOpenRate:n})=>(0,Q.jsxs)(`colgroup`,{children:[(0,Q.jsx)(`col`,{className:`max-sm:!w-full max-sm:!min-w-0 sm:max-lg:!w-auto sm:max-lg:!min-w-0`,style:t.member}),(0,Q.jsx)(`col`,{className:`hidden sm:table-column`,style:t.status}),n&&(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.openRate}),(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.location}),(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.created}),e.map(e=>(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.dynamic},e.key))]}),ka=({activeColumns:e,className:t,columnStyles:n,headerRef:r,memberHeaderRef:i,showEmailOpenRate:a})=>(0,Q.jsx)(ht,{ref:r,className:x(`hidden bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,t),children:(0,Q.jsxs)(q,{children:[(0,Q.jsx)(K,{ref:i,className:`sticky left-0 z-[70] bg-transparent px-4 [--members-sticky-fade-base:var(--background)]`,style:n.member,children:`Member`}),(0,Q.jsx)(K,{className:`bg-transparent px-4`,style:n.status,children:`Status`}),a&&(0,Q.jsx)(K,{className:`bg-transparent px-4`,style:n.openRate,children:`Open rate`}),(0,Q.jsx)(K,{className:`bg-transparent px-4`,style:n.location,children:`Location`}),(0,Q.jsx)(K,{className:`bg-transparent px-4`,style:n.created,children:`Created`}),e.map(e=>(0,Q.jsx)(K,{className:`bg-transparent px-4`,style:n.dynamic,children:e.label},e.key))]})}),Aa=({columnStyle:e,showPinnedEdge:t})=>(0,Q.jsxs)(`div`,{className:`pointer-events-none absolute inset-y-0 left-0 z-[70] overflow-visible bg-transparent [--members-sticky-fade-base:var(--background)]`,style:e,children:[(0,Q.jsxs)(gt,{className:`w-full table-fixed border-collapse`,children:[(0,Q.jsx)(`colgroup`,{children:(0,Q.jsx)(`col`,{style:{width:`100%`}})}),(0,Q.jsx)(ht,{className:`bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,children:(0,Q.jsx)(q,{children:(0,Q.jsx)(K,{className:`bg-transparent px-4`,children:`Member`})})})]}),t&&(0,Q.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px w-[24px]`,style:Da})]}),ja={member:40,status:15,openRate:10,location:17.5,created:17.5},Ma={member:320,status:180,openRate:140,location:180,created:160},Na=17.5,Pa=220;function Fa(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0}function Ia({showEmailOpenRate:e,activeColumnCount:t}){let n=[{key:`member`,width:ja.member},{key:`status`,width:ja.status},...e?[{key:`openRate`,width:ja.openRate}]:[],{key:`location`,width:ja.location},{key:`created`,width:ja.created}],r=Fa(t),i=n.reduce((e,t)=>e+t.width,0),a=100+r*Na,o=Na/a*100,s=n.reduce((e,t)=>{let n=t.width/i*100;return e[t.key]=n/a*100,e},{member:0,status:0,openRate:0,location:0,created:0});return{tableWidthPercentage:a,minTableWidth:n.reduce((e,t)=>e+Ma[t.key],0)+r*Pa,dynamicColumnWidthPercentage:o,baseColumnWidthPercentages:s,baseColumnMinWidths:{member:Ma.member,status:Ma.status,openRate:Ma.openRate,location:Ma.location,created:Ma.created},dynamicColumnMinWidth:Pa}}function La(e){let t=(e,t)=>({width:`${e}%`,minWidth:`${t}px`});return{tableStyle:{"--members-table-width":`${e.tableWidthPercentage}%`,"--members-table-min-width":`${e.minTableWidth}px`},columnStyles:{member:t(e.baseColumnWidthPercentages.member,e.baseColumnMinWidths.member),status:t(e.baseColumnWidthPercentages.status,e.baseColumnMinWidths.status),openRate:t(e.baseColumnWidthPercentages.openRate,e.baseColumnMinWidths.openRate),location:t(e.baseColumnWidthPercentages.location,e.baseColumnMinWidths.location),created:t(e.baseColumnWidthPercentages.created,e.baseColumnMinWidths.created),dynamic:t(e.dynamicColumnWidthPercentage,e.dynamicColumnMinWidth)}}}var Ra=({height:e})=>(0,Q.jsx)(`tr`,{"aria-hidden":`true`,style:{height:e},children:(0,Q.jsx)(`td`,{colSpan:999})}),za=(0,Z.forwardRef)(function(e,t){return(0,Q.jsx)(q,{ref:t,...e,"aria-hidden":`true`,children:(0,Q.jsx)(J,{className:`h-[72px] px-4 py-3`,colSpan:999,children:(0,Q.jsx)(`div`,{className:`h-full animate-pulse rounded-md bg-muted`,"data-testid":`loading-placeholder`})})})});function Ba({items:e,totalItems:t,backPath:n,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,isLoading:o,showEmailOpenRate:s=!0,activeColumns:c,timezone:l,pageHeaderRef:u,onRowClick:d}){let f=(0,Z.useRef)(null),p=(0,Z.useRef)(null),m=(0,Z.useRef)(null),h=(0,Z.useRef)(null),g=(0,Z.useRef)(null),[_,v]=(0,Z.useState)(0),[y,x]=(0,Z.useState)(0),[S,C]=(0,Z.useState)(!1),{visibleItemCount:w,canLoadMore:T,loadMore:E}=Fn(t),D=(0,Z.useMemo)(()=>Ia({showEmailOpenRate:s,activeColumnCount:c.length}),[c.length,s]),{tableStyle:O,columnStyles:k}=(0,Z.useMemo)(()=>La(D),[D]);Pn({parentRef:f,isLoading:o}),(0,Z.useEffect)(()=>{let e=g.current;if(!e)return;let t=()=>{let t=e.scrollLeft;C(t>0),h.current&&(h.current.scrollLeft=t)};return t(),e.addEventListener(`scroll`,t,{passive:!0}),window.addEventListener(`resize`,t),()=>{e.removeEventListener(`scroll`,t),window.removeEventListener(`resize`,t)}},[c.length,e.length,s]),(0,Z.useEffect)(()=>{let e=u?.current,t=p.current,n=m.current;if(!e||!t||!n){v(0),x(0);return}let r=e.style.paddingBottom,i=e.style.marginBottom,a=parseFloat(getComputedStyle(e).paddingBottom)||0,o=parseFloat(getComputedStyle(e).marginBottom)||0,s=()=>{r?e.style.setProperty(`padding-bottom`,r):e.style.removeProperty(`padding-bottom`),i?e.style.setProperty(`margin-bottom`,i):e.style.removeProperty(`margin-bottom`)},c=()=>{if(!window.matchMedia(`(min-width: 1024px)`).matches){s(),v(0),x(0);return}let r=t.getBoundingClientRect().height,i=n.getBoundingClientRect().width;e.style.setProperty(`padding-bottom`,`${a+r}px`,`important`),e.style.setProperty(`margin-bottom`,`${o-r}px`,`important`);let c=e.getBoundingClientRect().height;v(i),x(Math.max(c-r,0))};c();let l=new ResizeObserver(()=>{c()});return l.observe(e),l.observe(t),l.observe(n),window.addEventListener(`resize`,c),()=>{s(),l.disconnect(),window.removeEventListener(`resize`,c)}},[c.length,u,s]);let{visibleItems:A,spaceBefore:j,spaceAfter:M}=Nn({items:e,totalItems:w,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,parentRef:f,estimateSize:()=>72}),N=b(),P=e=>{d?d(e):N(ma(e,n))};return(0,Q.jsxs)(`div`,{ref:f,className:`w-full min-w-0`,"data-testid":`members-list-scroll-root`,children:[(0,Q.jsx)(`div`,{className:`sticky z-[50] hidden overflow-visible bg-transparent lg:block`,style:{top:y},children:(0,Q.jsxs)(`div`,{className:`relative`,children:[(0,Q.jsx)(Aa,{columnStyle:_>0?{width:_}:k.member,showPinnedEdge:S}),(0,Q.jsx)(`div`,{ref:h,className:`w-full overflow-hidden`,style:_>0?{clipPath:`inset(0 0 0 ${_}px)`}:void 0,children:(0,Q.jsxs)(gt,{"aria-hidden":`true`,className:`w-full border-collapse lg:w-[var(--members-table-width)] lg:min-w-[var(--members-table-min-width)] lg:table-fixed`,style:O,children:[(0,Q.jsx)(Oa,{activeColumns:c,columnStyles:k,showEmailOpenRate:s}),(0,Q.jsx)(ka,{activeColumns:c,columnStyles:k,headerRef:p,memberHeaderRef:m,showEmailOpenRate:s})]})})]})}),(0,Q.jsx)(`div`,{ref:g,className:`w-full overflow-x-auto overflow-y-visible`,children:(0,Q.jsxs)(gt,{className:`w-full border-collapse max-sm:table-fixed sm:max-lg:table-auto lg:w-[var(--members-table-width)] lg:min-w-[var(--members-table-min-width)] lg:table-fixed`,"data-testid":`members-list`,style:O,children:[(0,Q.jsx)(Oa,{activeColumns:c,columnStyles:k,showEmailOpenRate:s}),(0,Q.jsx)(ka,{activeColumns:c,className:`lg:h-0 lg:overflow-hidden lg:[&_th]:pointer-events-none lg:[&_th]:h-0 lg:[&_th]:border-0 lg:[&_th]:p-0 lg:[&_th]:text-[0px] lg:[&_th]:leading-none lg:[&_th]:opacity-0 lg:[&_tr]:h-0 lg:[&_tr]:border-0`,columnStyles:k,showEmailOpenRate:s}),(0,Q.jsxs)(mt,{children:[(0,Q.jsx)(Ra,{height:j}),A.map(({key:t,virtualItem:r,item:i,props:a})=>r.index>e.length-1?(0,Q.jsx)(za,{...a},t):(0,Q.jsx)(Ea,{...a,activeColumns:c,backPath:n,columnStyles:k,item:i,showEmailOpenRate:s,showPinnedEdge:S,timezone:l,onClick:P},t)),(0,Q.jsx)(Ra,{height:M})]})]})}),T&&(0,Q.jsx)(In,{isLoading:i,onClick:E})]})}function Va({count:e,hasResolvedCount:t,nql:n,search:r}){let i=b(),{data:a}=c(),{mutateAsync:o,isPending:s}=_t(),[l,u]=(0,Z.useState)(null),d=Yr(n),f=!r&&(!n||d),m=(0,Z.useMemo)(()=>Zr(a?.accessibility),[a?.accessibility]),h=l??m.dismissedCount??0,g=!d,_=f&&(d||e>h);return(0,Z.useEffect)(()=>{let n=m.dismissedCount;!a||l!==null||s||n===void 0||!t||e>=n||(u(e),o($r(a,e,m.dismissedAt??new Date().toISOString())).then(()=>{u(null)}).catch(e=>{u(null),console.log(`Unable to update multiple active subscriptions banner dismissed count`,e)}))},[e,a,o,t,s,l,m.dismissedAt,m.dismissedCount]),{canDismiss:g,count:e,handleDismiss:(0,Z.useCallback)(()=>{if(!a||s)return;let t=l;u(e),o($r(a,e,new Date().toISOString())).then(()=>{u(null)}).catch(()=>{u(t),p.error(`Unable to dismiss notification. Please try again.`)})},[e,a,o,s,l]),handleViewMembers:(0,Z.useCallback)(()=>{i(Zn({filter:Kr}))},[i]),shouldShow:_}}var Ha=({count:e,hasResolvedCount:t,nql:n,search:r})=>{let i=Va({count:e,hasResolvedCount:t,nql:n,search:r});return i.shouldShow?(0,Q.jsx)(Dt,{role:`status`,variant:`warning`,...i.canDismiss?{dismissible:!0,onDismiss:i.handleDismiss}:{dismissible:!1},children:(0,Q.jsxs)(`div`,{className:`flex flex-col items-baseline gap-3 pr-8 sm:flex-row`,children:[`We found `,S(i.count),` `,i.count===1?`member`:`members`,` with more than one active paid subscription.`,` `,(0,Q.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[i.canDismiss&&(0,Q.jsx)(`button`,{className:`nowrap font-semibold !underline`,type:`button`,onClick:i.handleViewMembers,children:`View members`}),(0,Q.jsx)(`a`,{className:`nowrap font-semibold underline`,href:`https://ghost.org/help/duplicate-subscription-warning/`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]})}):null},Ua=[`subscriptions.plan_interval`,`subscriptions.status`,`subscriptions.start_date`,`subscriptions.current_period_end`,`conversion`,`offer_redemptions`,Gr];function Wa(e,t){return t&&e.length===0?!1:!e.some(e=>Ua.includes(e.field))}function Ga({isFetching:e,isFetchingNextPage:t}){return e&&!t}var Ka=_n(mi,`date`);function qa(e,t){return sn(t,e.field,`UTC`)?.definition.operators.includes(e.operator)??!1}function Ja(e){return Array.isArray(e.$and)?{operator:`$and`,children:e.$and}:Array.isArray(e.$or)?{operator:`$or`,children:e.$or}:null}function Ya(e){if(typeof e.subscribed==`boolean`)return{field:`subscribed`,operator:`is`,values:[e.subscribed?`subscribed`:`unsubscribed`]};if(typeof e.email_disabled==`number`){if(e.email_disabled===1)return{field:`subscribed`,operator:`is`,values:[`email-disabled`]};if(e.email_disabled===0)return{field:`subscribed`,operator:`is-not`,values:[`email-disabled`]}}let t=Ja(e);if(!t||t.children.length!==2)return null;let n,r;for(let e of t.children)typeof e.subscribed==`boolean`&&(n=e.subscribed),typeof e.email_disabled==`number`&&(r=e.email_disabled);return t.operator===`$and`&&r===0&&n!==void 0?{field:`subscribed`,operator:`is`,values:[n?`subscribed`:`unsubscribed`]}:t.operator===`$or`&&r===1&&n!==void 0?{field:`subscribed`,operator:`is-not`,values:[n?`unsubscribed`:`subscribed`]}:null}function Xa(e){let t=Ja(e);if(!t||t.children.length!==2)return null;let n,r=!1,i=!1;for(let e of t.children){let t=e[`newsletters.slug`];typeof t==`string`&&(n=t,r=!1),t&&typeof t==`object`&&!Array.isArray(t)&&typeof t.$ne==`string`&&(n=t.$ne,r=!0),typeof e.email_disabled==`number`&&(i=!0)}return!n||!i?null:{field:`newsletters.${n}`,operator:`is`,values:[r?`unsubscribed`:`subscribed`]}}function Za(e){let t=Ja(e);if(!t||t.operator!==`$and`||t.children.length!==2)return null;let n,r;for(let e of t.children)typeof e[`feedback.post_id`]==`string`&&(n=e[`feedback.post_id`]),typeof e[`feedback.score`]==`number`&&(r=e[`feedback.score`]);return!n||r!==0&&r!==1?null:{field:`newsletter_feedback`,operator:String(r),values:[n]}}function Qa(e){if(!e.endsWith(`$`))return!1;let t=0;for(let n=e.length-2;n>=0&&e[n]===`\\`;--n)t+=1;return t%2==0}function $a(e,t){let n=e.source,r=n.startsWith(`^`),i=Qa(n),a,o;r&&!i?(a=`starts-with`,o=n.slice(1)):i&&!r?(a=`ends-with`,o=n.slice(0,-1)):(a=`contains`,o=n);let s=o.replace(/\\([\\.^$|?*+()[\]{}/-])/g,`$1`);return{operator:t?`does-not-contain`:a,value:s}}function eo(e){if(typeof e==`string`)return{operator:`is`,value:e};if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e;if(typeof t.$ne==`string`)return{operator:`is-not`,value:t.$ne};if(t.$regex instanceof RegExp)return $a(t.$regex,!1);if(t.$not instanceof RegExp)return $a(t.$not,!0)}return null}function to(e){let t=Ja(e);if(!t){let t=e[`custom_fields.key`];return typeof t==`string`?{field:`custom_fields.${t}`,operator:`is-set`,values:[``,``]}:t&&typeof t==`object`&&!Array.isArray(t)&&typeof t.$ne==`string`?{field:`custom_fields.${t.$ne}`,operator:`is-not-set`,values:[``,``]}:null}if(t.operator!==`$and`||t.children.length!==2)return null;let n,r,i;for(let e of t.children){typeof e[`custom_fields.key`]==`string`&&(n=e[`custom_fields.key`]);for(let t of Object.keys(e))if(t===`custom_fields.value`)r={subfield:``,raw:e[t]};else if(t.startsWith(`custom_fields.value.`))r={subfield:t.slice(20),raw:e[t]};else if(t===`custom_fields.path`){let n=e[t];typeof n==`string`?i={subfield:n,negated:!1}:n&&typeof n==`object`&&!Array.isArray(n)&&typeof n.$ne==`string`&&(i={subfield:n.$ne,negated:!0})}}if(!n)return null;if(i)return{field:`custom_fields.${n}`,operator:i.negated?`is-not-set`:`is-set`,values:[i.subfield,``]};if(!r)return null;let a=eo(r.raw);return a?{field:`custom_fields.${n}`,operator:a.operator,values:[r.subfield,a.value]}:null}var no=[Ya,Xa,Za,to];function ro(e,t){for(let t of no){let n=t(e);if(n)return[n]}let n=Ja(e);return n?.operator===`$and`?n.children.flatMap(e=>ro(e,t)):mn([e],mi,t)}function io(e,t){let n=an(e??``);return n?vn(ro(n,t)):[]}function ao(e){let t=an(e??``);return t?dn(t,Ka):!1}function oo(e,t){return hn(e,mi,t)}function so(e,t,n=!t){return!!e&&n&&!t&&ao(e)}function co(e,t){return e.filter(e=>qa(e,t))}function lo({baseSearchParams:e,filters:t,search:n,timezone:r,fields:i}){let a=new URLSearchParams(e),o=oo(co(t,i),r);return a.delete(`filter`),a.delete(`search`),o&&a.set(`filter`,o),n&&a.set(`search`,n),a}function uo(e){let t=(0,Z.useMemo)(()=>hi(),[]),[n,r]=_(),i=(0,Z.useRef)(null),a=(0,Z.useMemo)(()=>n.get(`filter`)??void 0,[n]),o=(0,Z.useMemo)(()=>n.toString(),[n]),s=(0,Z.useMemo)(()=>co(io(a,e),t),[a,e,t]),[c,l]=(0,Z.useState)(s),u=(0,Z.useMemo)(()=>n.get(`search`)??``,[n]),d=(0,Z.useMemo)(()=>oo(co(c,t),e),[c,e,t]);return(0,Z.useEffect)(()=>{o!==i.current&&(l(s),i.current=o)},[o,s]),(0,Z.useEffect)(()=>{if(i.current!==null&&o!==i.current)return;let a=lo({baseSearchParams:n,filters:c,search:u,timezone:e,fields:t}),s=a.toString();s!==o&&(i.current=s,r(a,{replace:!0}))},[o,c,u,n,r,e,t]),{filters:c,nql:d,search:u,setFilters:(0,Z.useCallback)((a,o={})=>{let s=o.replace??!0,c=lo({baseSearchParams:n,filters:a,search:u,timezone:e,fields:t});l(a),i.current=c.toString(),r(c,{replace:s})},[u,n,r,e,t]),setSearch:(0,Z.useCallback)((a,o={})=>{let s=o.replace??!0,l=lo({baseSearchParams:n,filters:c,search:a,timezone:e,fields:t});i.current=l.toString(),r(l,{replace:s})},[c,n,r,e,t]),clearFilters:(0,Z.useCallback)(({replace:a=!0}={})=>{let o=lo({baseSearchParams:n,filters:[],search:u,timezone:e,fields:t});l([]),i.current=o.toString(),r(o,{replace:a})},[u,n,r,e,t]),clearAll:(0,Z.useCallback)(({replace:a=!0}={})=>{let o=lo({baseSearchParams:n,filters:[],search:``,timezone:e,fields:t});l([]),i.current=o.toString(),r(o,{replace:a})},[n,r,e,t]),hasFilterOrSearch:!!d||u.length>0}}function fo({enabled:e}){let{data:t}=Bt({searchParams:{filter:Kr,limit:`1`,fields:`id`,order:`id`},defaultErrorHandler:!1,enabled:e,refetchOnMount:`always`,staleTime:0});return{count:t?.meta?.pagination?.total??0,hasResolvedCount:t!==void 0}}var po=250,mo=6,ho=({emailAnalyticsEnabled:e,hasStripeEnabled:t,membershipsEnabled:n,timezone:i})=>{let a=(0,Z.useRef)(null),o=(0,Z.useCallback)(e=>{a.current=e?.closest(`[data-list-page="header"]`)},[]),{filters:s,nql:c,search:l,setFilters:u,setSearch:d,hasFilterOrSearch:f,clearAll:p}=uo(i),m=y(),h=Bi(),g=Ui(h,c),[_,v]=(0,Z.useState)(!1),[b,C]=(0,Z.useState)(!1),[w,D]=(0,Z.useState)(l),O=Pt(e=>{d(e)},po),{count:k,hasResolvedCount:A}=fo({enabled:t}),j=Xt(`membersCustomFields`),M=(0,Z.useMemo)(()=>s.some(e=>e.field.startsWith(ui)),[s]),{data:N}=Rn({enabled:j&&M}),P=N?.members_custom_fields,ee=(0,Z.useMemo)(()=>_i(s,{customFields:P}),[s,P]),F=(0,Z.useMemo)(()=>Wa(s,c),[s,c]),{data:I,isError:L,isFetching:R,isFetchingNextPage:z,refetch:te,fetchNextPage:B,hasNextPage:ne}=Gt({searchParams:(0,Z.useMemo)(()=>yi({filters:s,nql:c,search:l}),[s,c,l]),placeholderData:r}),V=Ga({isFetching:R,isFetchingNextPage:z}),H=I?.meta?.pagination?.total??0,re=s.length>0,ie=_,ae=re,U=f||H>0,oe=!f&&!V&&!L&&H<mo;(0,Z.useEffect)(()=>{D(l),O.cancel()},[l,O]);let se=e=>{D(e),O(e)};return(0,Q.jsx)(T,{className:`size-full`,children:(0,Q.jsx)(E,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Q.jsxs)(Dn,{"data-testid":`members-page`,children:[(0,Q.jsx)(Dn.Header,{className:`py-4 sidebar:py-5`,children:(0,Q.jsxs)(`div`,{ref:o,className:`flex flex-col gap-4 sidebar:gap-6`,children:[(0,Q.jsxs)(Y,{blurredBackground:!1,sticky:!1,children:[(0,Q.jsx)(Y.Left,{children:(0,Q.jsxs)(Y.Title,{children:[`Members`,` `,!V&&H>0&&(0,Q.jsx)(Y.Count,{className:`hidden sm:inline`,children:S(H)})]})}),(0,Q.jsx)(Y.Actions,{children:(0,Q.jsxs)(Y.ActionGroup,{className:`ml-auto flex-wrap justify-end sm:ml-0 sm:flex-nowrap`,children:[U&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`hidden lg:flex`,children:(0,Q.jsx)(ua,{search:w,onSearchChange:se})}),(0,Q.jsx)(W,{"aria-label":_?`Hide member search`:`Show member search`,className:x(`lg:hidden`,_&&`bg-secondary hover:bg-secondary`),variant:`outline`,onClick:()=>{if(_){v(!1),C(!1);return}C(!0),v(!0)},children:(0,Q.jsx)(ye,{className:`size-4`})}),!re&&(0,Q.jsx)(la,{activeView:g,filters:s,iconOnly:!0,multipleActiveSubscriptionsCount:k,nql:c,savedViews:h,onFiltersChange:u})]}),(0,Q.jsx)(Ti,{canBulkDelete:F,hasFilterOrSearch:f,memberCount:H,nql:c,search:l,showMenu:U,showNewMember:U,onImportComplete:()=>{te()}})]})})]}),U&&(ae||ie)&&(0,Q.jsxs)(nn,{className:x(`flex-col gap-4 lg:flex-row lg:items-center sidebar:gap-6 lg:gap-6`,!ae&&`lg:hidden`),children:[ie&&(0,Q.jsx)(`div`,{className:`w-full lg:hidden`,children:(0,Q.jsx)(ua,{ariaLabel:`Search members mobile`,autoFocus:b,search:w,onSearchChange:se})}),ae&&(0,Q.jsx)(la,{activeView:g,filters:s,multipleActiveSubscriptionsCount:k,nql:c,savedViews:h,onFiltersChange:u})]}),t&&(0,Q.jsx)(Ha,{count:k,hasResolvedCount:A,nql:c,search:l})]})}),(0,Q.jsxs)(Dn.Body,{children:[V?(0,Q.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Q.jsx)(it,{size:`lg`})}):L?(0,Q.jsxs)(`div`,{className:`mb-16 flex flex-1 flex-col items-center justify-center`,children:[(0,Q.jsx)(`h2`,{className:`mb-2 text-xl font-medium`,children:`Error loading members`}),(0,Q.jsx)(`p`,{className:`mb-4 text-muted-foreground`,children:`Please reload the page to try again`}),(0,Q.jsx)(W,{onClick:()=>window.location.reload(),children:`Reload page`})]}):I?.members.length?(0,Q.jsx)(Ba,{activeColumns:ee,backPath:`${m.pathname}${m.search}`,fetchNextPage:()=>void B(),hasNextPage:ne,isFetchingNextPage:z,isLoading:R&&!z,items:I.members,pageHeaderRef:a,showEmailOpenRate:e,timezone:i,totalItems:H}):f?(0,Q.jsx)(`div`,{className:`flex flex-1 flex-col items-center justify-center`,children:(0,Q.jsx)(ot,{actions:(0,Q.jsx)(W,{variant:`outline`,onClick:()=>{O.cancel(),D(``),p({replace:!1})},children:`Show all members`}),title:`No matching members found.`,children:(0,Q.jsx)(me,{})})}):(0,Q.jsx)(Ei,{membershipsEnabled:n,onMemberCreated:async()=>{await te()}}),oe&&(0,Q.jsx)(`div`,{className:x(I?.members.length&&`mt-8`),children:(0,Q.jsx)(pa,{})})]})]})})})},go=()=>{let[e]=_(),{data:t,isLoading:n}=Nt({}),{data:r,isLoading:i}=g(),a=so(e.get(`filter`)??void 0,!!t?.settings,n);if(n||i||!t?.settings||!r?.config||a)return(0,Q.jsx)(T,{className:`size-full`,children:(0,Q.jsx)(E,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Q.jsxs)(Dn,{children:[(0,Q.jsx)(Dn.Header,{className:`py-4 sidebar:py-6`,children:(0,Q.jsx)(Y,{blurredBackground:!1,sticky:!1,children:(0,Q.jsx)(Y.Left,{children:(0,Q.jsx)(Y.Title,{children:`Members`})})})}),(0,Q.jsx)(Dn.Body,{children:(0,Q.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Q.jsx)(it,{size:`lg`})})})]})})});let o=En(t.settings),s=Qt(t.settings,`members_signup_access`)!==`none`,c=r.config.emailAnalytics===!0,l=zt(t.settings,r.config);return(0,Q.jsx)(ho,{emailAnalyticsEnabled:c,hasStripeEnabled:l,membershipsEnabled:s,timezone:o})};export{go 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{n as r}from"./dist-Ndy-PuGN.js";import{n as i}from"./heading-CRZZ2FUe.js";import{gr as a,t as o}from"./button-BshWPHvn.js";import{i as s,n as c,r as l,t as u}from"./tabs-CGisSbWq.js";import{t as d}from"./switch-C9djUIMO.js";import{t as f}from"./skeleton-D7hwjdry.js";import{t as p}from"./use-navigate-with-base-path-CK989MlC.js";import{Bt as m,Dn as h,Dt as g,Et as _,Gt as v,K as y,Kt as b,On as x,Ot as S,U as C,Yt as w,kt as T,st as E,ut as D,yt as O}from"./index-CDP9tIOk.js";import"./layout-Di5K7doM.js";import{a as k,i as A,n as j,r as M,t as N}from"./settings-B5hJKZ5C.js";var P=e(t(),1),F=n(),I=()=>{let{data:e,isLoading:t}=S(`index`),{data:n,isLoading:I}=T(`index`),L=t?[,,,,,].fill({apId:``,name:``,handle:``,avatarUrl:``}):e?.pages.flatMap(e=>e.accounts)??[],R=I?[,,,,,].fill({apId:``,name:``}):n?.pages.flatMap(e=>e.domains)??[],ee=g(`index`),z=b(`index`),[B,V]=(0,P.useState)(new Set),H=_(`index`),U=v(`index`),[W,G]=(0,P.useState)(new Set),[K,q]=(0,P.useState)(null),J=p(),{data:Y,isError:X,isLoading:Z,isSuccess:Q}=m(),$=w({onError:()=>{r.error(`Could not update sensitive media preference.`)}}),te=Y?.showSensitiveMedia??!1,ne=e=>{Q&&$.mutate({showSensitiveMedia:e})},re=e=>{V(t=>{let n=new Set([...t]);return n.add(e.apId),n}),z.mutate(e),r.success(`User unblocked`)},ie=e=>{V(t=>{let n=new Set([...t]);return n.delete(e.apId),n}),ee.mutate(e),r.success(`User blocked`)},ae=e=>{G(t=>{let n=new Set([...t]);return n.add(e.url),n}),U.mutate({url:e.url}),r.success(`Domain unblocked`)},oe=e=>{G(t=>{let n=new Set([...t]);return n.delete(e.url),n}),H.mutate({url:e.url}),r.success(`Domain blocked`)};return(0,F.jsx)(C,{children:(0,F.jsxs)(`div`,{className:`mx-auto max-w-[620px] py-[min(4vh,48px)]`,children:[(0,F.jsx)(`div`,{className:`flex items-center justify-between gap-8`,children:(0,F.jsx)(i,{children:`Moderation`})}),!X&&(0,F.jsx)(`div`,{className:`mt-6`,children:(0,F.jsxs)(A,{children:[(0,F.jsxs)(M,{children:[(0,F.jsx)(k,{children:`Show sensitive media`}),(0,F.jsx)(j,{children:`Display adult content or media marked as sensitive without a warning`})]}),(0,F.jsx)(N,{children:(0,F.jsx)(d,{"aria-label":`Show sensitive media`,checked:te,disabled:Z||!Q,onCheckedChange:ne})})]})}),(0,F.jsx)(`div`,{className:`mt-6`,children:(0,F.jsxs)(u,{defaultValue:`blocked_users`,variant:`underline`,children:[(0,F.jsxs)(l,{children:[(0,F.jsx)(s,{value:`blocked_users`,children:`Blocked users`}),(0,F.jsx)(s,{value:`blocked_domains`,children:`Blocked domains`})]}),(0,F.jsx)(c,{className:`mt-2`,value:`blocked_users`,children:!t&&L.length===0?(0,F.jsxs)(h,{children:[(0,F.jsx)(x,{children:(0,F.jsx)(a,{})}),(0,F.jsx)(`div`,{className:`mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center`,children:(0,F.jsx)(`p`,{children:`When you block someone, they won't be able to follow you or interact with your content on the social web.`})})]}):L.map((e,n)=>(0,F.jsx)(D,{actor:e,isCurrentUser:!0,children:(0,F.jsx)(`div`,{children:(0,F.jsxs)(y,{onClick:t?void 0:()=>E(e.handle,J),children:[(0,F.jsx)(O,{author:{icon:{url:e.avatarUrl},name:e.name,handle:e.handle}}),(0,F.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,F.jsx)(`span`,{className:`block truncate font-semibold text-black dark:text-white`,children:t?(0,F.jsx)(f,{className:`w-24`}):e.name}),(0,F.jsx)(`span`,{className:`block truncate text-sm text-gray-600`,children:t?(0,F.jsx)(f,{className:`w-40`}):e.handle})]}),B.has(e.apId)?(0,F.jsx)(o,{className:`ml-auto min-w-[90px] text-red hover:bg-red/5! hover:text-red-400`,variant:`outline`,onClick:t=>{t.stopPropagation(),ie(e)},children:`Block`}):t?(0,F.jsx)(`div`,{className:`ml-auto w-16`,children:(0,F.jsx)(f,{})}):(0,F.jsx)(o,{className:`ml-auto min-w-[90px]`,variant:`destructive`,onClick:t=>{t.stopPropagation(),re(e)},onMouseEnter:()=>q(e.apId),onMouseLeave:()=>q(null),children:K===e.apId?`Unblock`:`Blocked`})]})})},e.apId?e.apId:`loading-${n}`))}),(0,F.jsx)(c,{className:`mt-[11px]`,value:`blocked_domains`,children:!I&&R.length===0?(0,F.jsxs)(h,{children:[(0,F.jsx)(x,{children:(0,F.jsx)(a,{})}),(0,F.jsx)(`div`,{className:`mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center`,children:(0,F.jsx)(`p`,{children:`When you block a domain, all users from that domain won't be able to follow you or interact with your content.`})})]}):R.map((e,t)=>(0,F.jsxs)(y,{children:[(0,F.jsx)(`div`,{className:`flex min-w-0 flex-col`,children:(0,F.jsx)(`span`,{className:`block truncate font-semibold text-black dark:text-white`,children:I?(0,F.jsx)(f,{className:`w-48`}):new URL(e.url).hostname})}),W.has(e.url)?(0,F.jsx)(o,{className:`ml-auto min-w-[90px] text-red hover:bg-red/5! hover:text-red-400`,variant:`outline`,onClick:()=>oe(e),children:`Block`}):I?(0,F.jsx)(`div`,{className:`ml-auto w-16`,children:(0,F.jsx)(f,{})}):(0,F.jsx)(o,{className:`ml-auto min-w-[90px]`,variant:`destructive`,onClick:()=>ae(e),onMouseEnter:()=>q(e.url),onMouseLeave:()=>q(null),children:K===e.url?`Unblock`:`Blocked`})]},e.url?e.url:`loading-${t}`))})]})})]})})};export{I 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{p as r}from"./hooks-CuEZV2-q.js";import{x as i}from"./dist-Cb5RSHSg.js";import{t as a}from"./inline-Cw-gigDW.js";import{D as o,Zn as s,dt as c,t as l,v as u}from"./button-BshWPHvn.js";import{i as d,n as f,r as p,t as m}from"./tabs-CGisSbWq.js";import{t as h}from"./switch-C9djUIMO.js";import{t as g}from"./input-UHrKuvBT.js";import{o as _,t as v}from"./use-settings-navigation-BBzro2-V.js";import{i as y,o as b,t as x}from"./field-LmNk7wZh.js";import{i as S,n as C,t as w}from"./use-url-input-WnIqckzS.js";import{Hn as T,Kn as E,Qn as D,Sr as ee,Wn as O,br as te,t as ne}from"./index-CDP9tIOk.js";import{a as k,c as A,i as j,n as M,o as N,r as P,s as F,t as I}from"./images-C0XvUYMb.js";import{t as re}from"./validator-Cr0sMKuW.js";import{n as ie}from"./global-data-context-gAMDH9u1.js";import{t as ae}from"./use-setting-group-DQxV42-O.js";import{t as L}from"./format-url-Ju4k5CIm.js";var oe=e(re(),1),R=e(t(),1),z=[`public`,`members`,`paid`,`public_free`,`public_paid`,`public_only`,`free_members`,`none`],B=e=>!!(e&&!e.match(/^\s*$/)),V=e=>!!(B(e.label)||e.url!==`/`||B(e.icon)),H=e=>({...e,icon:e.icon||``,visibility:e.visibility||`public`,errors:{}}),U=({url:e,label:t,icon:n,visibility:r})=>({url:e.trim(),label:t.trim(),...n?.trim()?{icon:n.trim()}:{},...r&&r!==`public`?{visibility:r}:{}}),W=({items:e,setItems:t})=>{let n=C({items:(0,R.useMemo)(()=>e.map(H),[e]),setItems:(0,R.useCallback)(e=>{t(e.map(U))},[t]),blank:{url:`/`,label:``,icon:``,visibility:`public`,errors:{}},canAddNewItem:V}),r=new RegExp(/^(\/|#|[a-zA-Z0-9-]+:)/),i=e=>{let t={},n=B(e.label),i=B(e.icon);return!n&&!i&&(t.label=`You must specify a label or icon`),(!e.url||e.url.match(/\s/)||!oe.default.isURL(e.url,{require_protocol:!0})&&!e.url.match(r))&&(t.url=`You must specify a valid URL or relative path`),e.visibility&&!z.includes(e.visibility)&&(t.visibility=`You must specify a valid visibility`),t},a=(e,t)=>{let n={...e.errors};return B(t.icon)&&(n.icon=void 0,n.label=void 0),{...e,...t,errors:n}},o=(e,t)=>{let r=n.items.find(t=>t.id===e);n.updateItem(e,a(r.item,t))},s=()=>{let e=i(n.newItem);Object.values(e).some(e=>e)?n.setNewItem({...n.newItem,errors:e}):n.addItem()},c=e=>{n.removeItem(e)},l=(e,t)=>{n.moveItem(e,t)},u=(e,t)=>{if(e===`new`)n.setNewItem({...n.newItem,errors:{...n.newItem.errors,[t]:void 0}});else{let r=n.items.find(t=>t.id===e).item;n.updateItem(e,{...r,errors:{...r.errors,[t]:void 0}})}};return{items:n.items.map(({item:e,id:t})=>({...e,id:t})),updateItem:o,addItem:s,removeItem:c,moveItem:l,newItem:{...n.newItem,id:`new`},setNewItem:e=>n.setNewItem(a(n.newItem,e)),clearError:u,validate:()=>{let e=!0;if(n.items.forEach(({item:t,id:r})=>{let a=i(t);Object.values(a).some(e=>e)&&(e=!1,n.updateItem(r,{...t,errors:a}))}),V(n.newItem)){let t=i(n.newItem);Object.values(t).some(e=>e)&&(e=!1,n.setNewItem({...n.newItem,errors:t}))}return e}}},G=n(),K=({idPrefix:e,item:t,clearError:n,updateItem:r,uploadIcon:i})=>(0,G.jsx)(P,{className:`size-[38px]`,children:t.icon?(0,G.jsxs)(A,{children:[(0,G.jsx)(F,{alt:``,className:`size-[38px] rounded-lg object-contain p-2.5`,src:t.icon}),(0,G.jsx)(k,{className:`inset-0 flex items-center justify-center`,children:(0,G.jsx)(j,{"aria-label":`Remove navigation icon`,className:`size-full rounded-lg bg-black/75 p-0 text-white hover:bg-black/90 hover:text-white`,onClick:()=>{n?.(`icon`),r?.({icon:``})},children:(0,G.jsx)(o,{className:`size-4`})})})]}):(0,G.jsx)(N,{accept:{"image/*":[]},"aria-label":`Upload navigation icon`,className:`size-[38px] rounded-lg border-0 bg-muted p-0 text-muted-foreground hover:bg-muted hover:text-foreground`,id:`${e}-icon-${t.id}`,inputAriaLabel:`Upload navigation icon`,onDropAccepted:([e])=>void i?.(e).then(e=>{e&&r?.({icon:e})}),children:(0,G.jsx)(u,{"aria-hidden":`true`,className:`size-4`})})}),q={public:`Everyone`,members:`Members only`,paid:`Paid-members only`,public_free:`Public + free`,public_paid:`Public + paid`,public_only:`Public only`,free_members:`Free only`,none:`Hidden`},se=z.map(e=>({value:e,label:q[e]})),ce=[{key:`public-visitors`,label:`Public visitors`},{key:`free-members`,label:`Free members`},{key:`paid-members`,label:`Paid members`}],le={public:{"public-visitors":!0,"free-members":!0,"paid-members":!0},members:{"public-visitors":!1,"free-members":!0,"paid-members":!0},paid:{"public-visitors":!1,"free-members":!1,"paid-members":!0},public_free:{"public-visitors":!0,"free-members":!0,"paid-members":!1},public_paid:{"public-visitors":!0,"free-members":!1,"paid-members":!0},public_only:{"public-visitors":!0,"free-members":!1,"paid-members":!1},free_members:{"public-visitors":!1,"free-members":!0,"paid-members":!1},none:{"public-visitors":!1,"free-members":!1,"paid-members":!1}},ue=[`paid`,`public_paid`],de={"000":`none`,"001":`paid`,"010":`free_members`,"011":`members`,100:`public_only`,101:`public_paid`,110:`public_free`,111:`public`},fe=e=>se.some(t=>t.value===e)?e:`public`,pe=e=>q[e],me=(e,t)=>({...le[e],...t?{}:{"paid-members":!1}}),J=e=>de[[e[`public-visitors`],e[`free-members`],e[`paid-members`]].map(e=>e?`1`:`0`).join(``)],he=({idPrefix:e,item:t,clearError:n,updateItem:r,showPaidVisibility:i})=>{let a=fe(t.visibility),o=pe(a),c=`${e}-visibility-${t.id}`,l=`${c}-error`,u=me(a,i),d=e=>{n?.(`visibility`),r?.({visibility:e})},f=(e,t)=>{let n={...u,[e]:t};i||(n[`paid-members`]=n[`free-members`]);let r=J(n);!i&&ue.includes(r)||d(r)};return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`label`,{className:`sr-only`,id:c,children:`Visibility`}),(0,G.jsxs)(T,{children:[(0,G.jsx)(D,{asChild:!0,children:(0,G.jsxs)(`button`,{"aria-describedby":t.errors.visibility?l:void 0,"aria-invalid":!!t.errors.visibility,"aria-labelledby":c,className:`flex h-[38px] w-full items-center justify-between rounded-lg border-transparent bg-grey-100 px-3 text-md text-black hover:bg-grey-100 focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:outline-hidden dark:bg-grey-900 dark:text-white dark:hover:bg-grey-900`,"data-testid":`navigation-item-visibility`,type:`button`,children:[(0,G.jsx)(`span`,{className:`truncate`,children:o}),(0,G.jsx)(s,{"aria-hidden":`true`,className:`size-4 opacity-80`})]})}),(0,G.jsx)(O,{align:`end`,className:`z-[300] w-[190px] rounded-lg p-2`,sideOffset:6,children:(0,G.jsx)(`div`,{className:`flex flex-col`,children:ce.filter(e=>e.key!==`paid-members`||i).map(e=>{let t=u[e.key];return(0,G.jsxs)(E,{className:`flex cursor-pointer items-center justify-between gap-3 rounded-md px-2 py-1.5 text-sm text-grey-900 dark:text-grey-100`,onSelect:n=>{n.preventDefault(),f(e.key,!t)},children:[(0,G.jsx)(`span`,{children:e.label}),(0,G.jsx)(h,{"aria-label":e.label,checked:t,size:`sm`,onCheckedChange:t=>f(e.key,t),onClick:e=>e.stopPropagation()})]},e.key)})})})]}),t.errors.visibility&&(0,G.jsx)(`div`,{className:`mt-1 text-xs text-red`,id:l,role:`alert`,children:t.errors.visibility})]})},ge=`flex w-full items-start gap-3 [--control-height:38px]`,Y={icon:`w-[38px] shrink-0`,label:`min-w-0 flex-[0.75]`,url:`min-w-0 flex-[1.25]`,visibility:`w-[190px] shrink-0`,action:`w-10 shrink-0`},X=`pt-1`,Z=({baseUrl:e,idPrefix:t,item:n,updateItem:r,uploadIcon:o,addItem:s,clearError:c,labelPlaceholder:l,unstyled:u,textFieldClasses:d,action:f,showIcon:p,showPaidVisibility:m,showVisibility:h,className:_,...v})=>{let S=w({baseUrl:e,nullable:!0,value:n.url,onChange:e=>r?.({url:e||``})});return(0,G.jsxs)(`div`,{className:i(ge,_),"data-testid":`navigation-item-editor`,...v,children:[p&&(0,G.jsx)(`div`,{className:i(`flex flex-col`,Y.icon,`pt-1`),children:(0,G.jsx)(K,{clearError:c,idPrefix:t,item:n,updateItem:r,uploadIcon:o})}),(0,G.jsx)(`div`,{className:i(`flex`,Y.label,X),children:(0,G.jsxs)(x,{className:`grow`,"data-invalid":!!n.errors.label||void 0,children:[(0,G.jsx)(b,{className:`sr-only`,htmlFor:`navigation-label-${n.id}`,children:`Label`}),(0,G.jsx)(g,{"aria-invalid":!!n.errors.label||void 0,className:i(u&&`border-0 bg-transparent shadow-none focus-visible:ring-0`,d),id:`navigation-label-${n.id}`,placeholder:l,value:n.label,onChange:e=>r?.({label:e.target.value}),onKeyDown:e=>{r?.({label:e.target.value}),e.key===`Enter`&&(e.preventDefault(),s?.()),n.errors.label&&c?.(`label`)}}),n.errors.label&&(0,G.jsx)(y,{children:n.errors.label})]})}),(0,G.jsx)(`div`,{className:i(`flex`,Y.url,X),children:(0,G.jsxs)(x,{className:`grow`,"data-invalid":!!n.errors.url||void 0,children:[(0,G.jsx)(b,{className:`sr-only`,htmlFor:`navigation-url-${n.id}`,children:`URL`}),(0,G.jsx)(g,{"aria-invalid":!!n.errors.url||void 0,className:d,id:`navigation-url-${n.id}`,value:S.displayValue,onBlur:S.commitValue,onChange:e=>S.setDisplayValue(e.target.value),onFocus:S.handleFocus,onKeyDown:t=>{S.handleKeyDown(t);let n=L(t.target.value,e,!0);r?.({url:n.save||``})},onKeyUp:t=>{if(t.key===`Enter`){t.preventDefault();let n=L(t.target.value,e,!0);r?.({url:n.save||``}),s?.()}n.errors.url&&c?.(`url`)}}),n.errors.url&&(0,G.jsx)(y,{children:n.errors.url})]})}),h&&(0,G.jsx)(`div`,{className:i(`flex flex-col`,Y.visibility,`pt-1`),children:(0,G.jsx)(he,{clearError:c,idPrefix:t,item:n,showPaidVisibility:m,updateItem:r})}),f&&(0,G.jsx)(a,{align:`center`,className:i(`h-[calc(var(--control-height)+0.25rem)] shrink-0 pt-1`,Y.action),children:f})]})},Q=`text-xs font-semibold text-muted-foreground`,$=({baseUrl:e,idPrefix:t,navigation:n,showIcon:r,showPaidVisibility:i,showVisibility:s,uploadIcon:u})=>(0,G.jsxs)(`div`,{className:`w-full pt-2`,children:[(r||s)&&(0,G.jsxs)(`div`,{className:`-mb-1 flex w-full items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`h-7 w-4 shrink-0`}),(0,G.jsxs)(`div`,{className:`flex w-full items-start gap-3 [--control-height:38px]`,children:[r&&(0,G.jsx)(`div`,{className:`${Y.icon} ${Q}`,children:`Icon`}),(0,G.jsx)(`div`,{className:`${Y.label} ${Q}`,children:`Label`}),(0,G.jsx)(`div`,{className:`${Y.url} ${Q}`,children:`URL`}),s&&(0,G.jsx)(`div`,{className:`${Y.visibility} ${Q}`,children:`Visibility`}),(0,G.jsx)(`div`,{className:Y.action})]})]}),(0,G.jsx)(S,{dragHandleClass:`translate-y-0.5`,getDragHandleLabel:e=>`Reorder ${e.label||`navigation item`}`,items:n.items,itemSeparator:!1,renderItem:a=>(0,G.jsx)(Z,{action:(0,G.jsx)(l,{"aria-label":`Delete navigation item`,size:`icon`,type:`button`,variant:`ghost`,onClick:()=>n.removeItem(a.id),children:(0,G.jsx)(o,{})}),baseUrl:e,clearError:e=>n.clearError(a.id,e),idPrefix:t,item:a,showIcon:r,showPaidVisibility:i,showVisibility:s,updateItem:e=>n.updateItem(a.id,e),uploadIcon:u}),onMove:n.moveItem}),(0,G.jsxs)(a,{align:`start`,className:`mt-5 border-t pt-5`,gap:`md`,children:[(0,G.jsx)(a,{align:`center`,className:`h-[calc(var(--control-height)+0.5rem)] shrink-0 translate-y-0.5 pt-2`,children:(0,G.jsx)(c,{className:`size-4 text-muted-foreground`})}),(0,G.jsx)(Z,{action:(0,G.jsx)(l,{"aria-label":`Add navigation item`,"data-testid":`add-button`,size:`icon`,type:`button`,variant:`ghost`,onClick:n.addItem,children:(0,G.jsx)(c,{})}),addItem:n.addItem,baseUrl:e,className:`mt-1`,clearError:e=>n.clearError(n.newItem.id,e),"data-testid":`new-navigation-item`,idPrefix:t,item:n.newItem,labelPlaceholder:`New item label`,showIcon:r,showPaidVisibility:i,showVisibility:s,updateItem:n.setNewItem,uploadIcon:u})]})]});function _e(){let{updateRoute:e}=v(),t=r(),{mutateAsync:n}=M(),{config:i}=ie(),{localSettings:a,updateSetting:o,saveState:s,handleSave:c,siteData:l}=ae(),[u,h,g]=ee(a,[`navigation`,`secondary_navigation`,`members_signup_access`]),y=ne(`navigationIcons`),b=y,x=y&&g!==`none`,S=te(a,i),C=(0,R.useMemo)(()=>JSON.parse(u||`[]`),[u]),w=(0,R.useMemo)(()=>JSON.parse(h||`[]`),[h]),T=(0,R.useCallback)(e=>{o(`navigation`,JSON.stringify(e))},[o]),E=(0,R.useCallback)(e=>{o(`secondary_navigation`,JSON.stringify(e))},[o]),D=W({items:C,setItems:T}),O=W({items:w,setItems:E}),[k,A]=(0,R.useState)(`primary-nav`),j=async e=>{try{return I(await n({file:e}))}catch(e){let n=e;n.response?.status===415&&(n.message=`Unsupported file type`),t(n)}};return(0,G.jsx)(_,{buttonsDisabled:s===`saving`,cancelLabel:`Close`,dirty:a.some(e=>e.dirty),okLabel:s===`saving`?`Saving...`:`Save`,scrolling:!0,size:`lg`,stickyFooter:!0,testId:`navigation-modal`,title:`Navigation`,onClose:()=>{e(`navigation`)},onOk:async()=>{D.validate()&&O.validate()&&(await c(),e(`navigation`))},children:(0,G.jsx)(`div`,{className:`mt-6 mb-1`,children:(0,G.jsxs)(m,{value:k,variant:`underline`,onValueChange:A,children:[(0,G.jsxs)(p,{children:[(0,G.jsx)(d,{value:`primary-nav`,children:`Primary`}),(0,G.jsx)(d,{value:`secondary-nav`,children:`Secondary`})]}),(0,G.jsx)(f,{value:`primary-nav`,children:(0,G.jsx)($,{baseUrl:l.url,idPrefix:`primary-navigation`,navigation:D,showIcon:b,showPaidVisibility:S,showVisibility:x,uploadIcon:j})}),(0,G.jsx)(f,{value:`secondary-nav`,children:(0,G.jsx)($,{baseUrl:l.url,idPrefix:`secondary-navigation`,navigation:O,showIcon:b,showPaidVisibility:S,showVisibility:x,uploadIcon:j})})]})})})}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{i as r}from"./hooks-CuEZV2-q.js";import{n as i}from"./dist-Ndy-PuGN.js";import{i as a,r as o}from"./stats-B_YkF7bp.js";import{a as s}from"./posts-KY3aUhVV.js";import{o as c}from"./post-helpers-C5OQMBoi.js";import{h as l}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as u}from"./router-provider-CJC58zTy.js";import{_ as d,f,m as p,p as m}from"./dist-Cb5RSHSg.js";import{a as h}from"./heading-CRZZ2FUe.js";import{i as g,o as _}from"./app-utils-D2Wp7ZSS.js";import{A as v,L as y,Yn as b,bt as x,k as S,t as C,yr as w}from"./button-BshWPHvn.js";import{i as T,r as E,t as D}from"./tabs-CGisSbWq.js";import{t as ee}from"./input-UHrKuvBT.js";import{n as te}from"./skeleton-D7hwjdry.js";import{t as ne}from"./loading-indicator-SFTqyYVE.js";import{a as O,i as re,n as k,o as A,r as j,t as M}from"./card-CiiE7QfM.js";import{c as ie,l as ae,n as oe,o as se,r as ce,s as le,t as ue,u as de}from"./data-list-CupF7bjM.js";import{i as N,n as P,o as F,r as I,t as L}from"./use-simple-pagination-B2TdNX67.js";import{Bn as fe,Or as pe,Pn as R,kr as me,zn as he}from"./index-CDP9tIOk.js";import{t as ge}from"./member-route-0Aa52Ntz.js";import{a as z,i as B,n as V,r as H,t as U}from"./kpi-card-fUHZlzBX.js";import{r as _e,t as ve}from"./post-analytics-header-B-P0eFnT.js";import{n as ye}from"./post-analytics-context-D0Mw-Pmv.js";import{a as be,i as xe,n as W,o as G,r as K}from"./link-helpers-Dtq9fxQg.js";var q=r({dataType:`FeedbackResponseType`,path:e=>`/feedback/${e}/`}),J=e(t(),1),Y=(e,t)=>{let{data:n,isLoading:r,error:i}=q(e,{searchParams:{limit:`50`,...t===void 0?{}:{score:t.toString()}}});return{feedback:(0,J.useMemo)(()=>n?.feedback?n.feedback:[],[n]),isLoading:r,error:i}},X=n(),Se=({feedbackStats:e})=>{let{postId:t}=l(),n=u(),[r,i]=(0,J.useState)(`positive`),{feedback:a,isLoading:o}=Y(t||``,+(r===`positive`)),{totalPages:s,paginatedData:c,nextPage:f,previousPage:b,hasNextPage:x,hasPreviousPage:w}=L({data:a,itemsPerPage:9}),ee=o;return(0,X.jsxs)(M,{children:[(0,X.jsxs)(O,{className:`pb-5`,children:[(0,X.jsx)(A,{children:`Feedback`}),(0,X.jsx)(j,{children:`What did your readers think?`})]}),e.totalFeedback>0?(0,X.jsxs)(k,{className:`pb-3`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsx)(D,{className:`pb-3`,defaultValue:`positive`,value:r,variant:`button`,onValueChange:e=>i(e),children:(0,X.jsxs)(E,{className:`gap-1`,children:[(0,X.jsx)(T,{className:`h-7`,value:`positive`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,X.jsx)(S,{size:14,strokeWidth:1.25}),(0,X.jsx)(`span`,{className:`hidden font-medium sm:visible! sm:inline!`,children:`More like this`}),(0,X.jsx)(`span`,{className:`font-semibold tracking-tight`,children:m(e.positiveFeedback/e.totalFeedback)})]})}),(0,X.jsx)(T,{className:`h-7`,value:`negative`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,X.jsx)(v,{size:14,strokeWidth:1.25}),(0,X.jsx)(`span`,{className:`hidden font-medium sm:visible! sm:inline!`,children:`Less like this`}),(0,X.jsx)(`span`,{className:`font-semibold tracking-tight`,children:m(e.negativeFeedback/e.totalFeedback)})]})})]})}),(0,X.jsx)(h,{className:`mr-2 mb-3 lg:hidden xl:visible! xl:block!`,children:`Date`})]}),(0,X.jsx)(R,{}),ee?(0,X.jsx)(te,{className:`mt-3`,lines:3}):c&&c.length>0?(0,X.jsx)(`div`,{className:`flex w-full flex-col py-3`,children:c.map(e=>(0,X.jsxs)(`div`,{className:`flex h-10 w-full items-center justify-between gap-3 rounded-sm border-none px-2 text-sm hover:cursor-pointer hover:bg-accent`,onClick:()=>{n(`/members/${e.member.id}`)},children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 font-medium`,children:[(0,X.jsxs)(he,{className:`size-7`,children:[e.member?.avatar_image&&(0,X.jsx)(`img`,{className:`absolute aspect-square size-full`,src:e.member?.avatar_image}),(0,X.jsx)(fe,{className:`text-white`,style:{backgroundColor:`${d(g(e.member),`45`,`55`)}`},children:_(e.member)})]}),g(e.member)]}),(0,X.jsx)(`div`,{className:`whitespace-nowrap text-muted-foreground`,children:p(e.created_at)})]},e.id))}):(0,X.jsx)(`div`,{className:`flex h-full items-center justify-center py-8 text-center text-sm text-muted-foreground`,children:(0,X.jsxs)(`div`,{children:[`No `,r===`positive`?`positive`:`negative`,` feedback yet`]})})]}):(0,X.jsxs)(k,{className:`flex grow flex-col items-center justify-center text-center text-sm text-muted-foreground`,children:[(0,X.jsx)(`div`,{children:`No members have given feedback yet`}),(0,X.jsx)(`div`,{children:`When someone does, you'll see their response here.`})]}),e.totalFeedback>0&&(0,X.jsx)(re,{className:`grow-0`,children:(0,X.jsxs)(`div`,{className:`flex w-full items-center justify-between gap-3`,children:[(0,X.jsxs)(C,{variant:`outline`,onClick:()=>{let e=`(feedback.post_id:'${t}'+feedback.score:1)`,i=`(feedback.post_id:'${t}'+feedback.score:0)`,a=`${encodeURIComponent(e)}&post=${t}`,o=`${encodeURIComponent(i)}&post=${t}`;n(`/members?filter=${r===`positive`?a:o}`)},children:[`View all`,(0,X.jsx)(y,{})]}),s>1&&(0,X.jsx)(P,{className:`pb-0`,children:(0,X.jsxs)(I,{children:[(0,X.jsx)(F,{disabled:!w,onClick:b}),(0,X.jsx)(N,{disabled:!x,onClick:f})]})})]})})]})},Ce=e=>{let{data:t,isLoading:n}=s(e),{data:r,isLoading:i}=s(e,{searchParams:{include:`count.positive_feedback,count.negative_feedback`}}),c=(0,J.useMemo)(()=>t?.posts[0],[t]),l=(0,J.useMemo)(()=>r?.posts[0],[r]),u=(0,J.useMemo)(()=>c?{sent:c.email?.email_count||0,opened:c.email?.opened_count||0,clicked:c.count?.clicks||0,openedRate:c.email?.opened_count?c.email.opened_count/c.email.email_count:0,clickedRate:c.count?.clicks&&c.email?.email_count?c.count.clicks/c.email.email_count:0}:{sent:0,opened:0,clicked:0,openedRate:0,clickedRate:0},[c]),d=(0,J.useMemo)(()=>{if(!l?.count)return{positiveFeedback:0,negativeFeedback:0,totalFeedback:0};let e=l.count.positive_feedback||0,t=l.count.negative_feedback||0;return{positiveFeedback:e,negativeFeedback:t,totalFeedback:e+t}},[l]),f=(0,J.useMemo)(()=>c?.newsletter?.id,[c]),{data:p,isLoading:m}=o({searchParams:f?{newsletter_id:f}:{},enabled:!!f}),h=(0,J.useMemo)(()=>p?.stats?p.stats.map(e=>e.post_id):[],[p]),{data:g,isLoading:_}=a({searchParams:f&&h.length>0?{newsletter_id:f,post_ids:h.join(`,`)}:{},enabled:!!f&&h.length>0}),v=(0,J.useMemo)(()=>{if(!p?.stats)return;let e=p.stats,t=g?.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{...p,stats:r}},[p,g]),y=m||_,{data:b,isLoading:x,refetch:S}=be({searchParams:{filter:`post_id:'${e}'`}}),C=(0,J.useMemo)(()=>{if(!v||!v.stats)return{openRate:0,clickRate:0};let e=v.stats;if(e.length===0)return{openRate:0,clickRate:0};let t=e.reduce((e,t)=>e+(t.open_rate||0),0),n=e.reduce((e,t)=>e+(t.click_rate||0),0);return{openRate:Number((t/e.length).toFixed(2)),clickRate:Number((n/e.length).toFixed(2))}},[v]),w=(0,J.useMemo)(()=>K(b),[b]);return{post:c,stats:u,feedbackStats:d,averageStats:(0,J.useMemo)(()=>({openedRate:C.openRate,clickedRate:C.clickRate}),[C]),topLinks:w,refetchTopLinks:S,isLoading:n||i||y||x}},we=({breakpoints:e={sm:1080,md:1280,lg:1360}}={})=>{let[t,n]=(0,J.useState)(`md`);return(0,J.useEffect)(()=>{let t=()=>{let t=window.innerWidth;t<e.sm?n(`sm`):t<e.md?n(`md`):n(`lg`)};return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)},[e]),{chartSize:t,isSmall:t===`sm`,isMedium:t===`md`,isLarge:t===`lg`}},Te=()=>(0,X.jsx)(`div`,{className:`absolute top-1/2 -right-4 z-10 hidden size-8 -translate-y-1/2 items-center justify-center rounded-full border bg-background text-muted-foreground md:visible! md:flex!`,children:(0,X.jsx)(b,{className:`ml-0.5`,size:16,strokeWidth:1.5})}),Ee=({dataColor:e,value:t,avgValue:n})=>(0,X.jsxs)(`div`,{className:`absolute top-6 left-1/2 z-50 flex w-[200px] -translate-x-1/2 flex-col items-stretch gap-1.5 rounded-md bg-background px-4 py-2 text-sm opacity-0 shadow-md transition-all group-hover/block:top-3 group-hover/block:opacity-100`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`div`,{className:`size-2 rounded-full bg-chart-blue opacity-50`,style:{backgroundColor:e}}),`This newsletter`]}),(0,X.jsx)(`div`,{className:`text-right font-mono`,children:t})]}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`div`,{className:`size-2 rounded-full bg-chart-gray opacity-80`}),`Average`]}),(0,X.jsx)(`div`,{className:`text-right font-mono`,children:n})]})]}),De=()=>{let e=u(),[t,n]=(0,J.useState)(null),[r,a]=(0,J.useState)(``),o=(0,J.useRef)(null),s=(0,J.useRef)(null),{chartSize:l}=we(),d=pe(),p=me(),{post:g,isPostLoading:_,postId:v}=ye(),y=t=>e(ge({filter:t})),b=g,S=c(b);(0,J.useEffect)(()=>{!_&&!S&&e(`/posts/analytics/${v}`)},[e,v,_,S]);let{stats:T,averageStats:E,topLinks:D,isLoading:fe,refetchTopLinks:he}=Ce(v),{mutate:be}=xe(),K=(0,J.useMemo)(()=>{if(!b?.count)return{positiveFeedback:0,negativeFeedback:0,totalFeedback:0};let e=b.count.positive_feedback||0,t=b.count.negative_feedback||0;return{positiveFeedback:e,negativeFeedback:t,totalFeedback:e+t}},[b]),q=(0,J.useMemo)(()=>b?.newsletter?.feedback_enabled===!0,[b]),Y=(0,J.useMemo)(()=>K.totalFeedback>0?!0:q,[K.totalFeedback,q]),De=e=>{let t=W(D,e);t&&(n(e),a(t.link.to))},Oe=()=>{if(!t)return;let e=W(D,t);if(!e)return;let o=r.trim();if(o===``||o===e.link.to){n(null),a(``);return}be({originalUrl:e.link.originalTo,editedUrl:r,postId:v},{onSuccess:()=>{n(null),a(``),he()},onError:()=>{i.error(`Couldn’t update the link. Please try again.`)}})},{totalPages:ke,paginatedData:Ae,nextPage:je,previousPage:Me,hasNextPage:Ne,hasPreviousPage:Pe}=L({data:D,itemsPerPage:10});(0,J.useEffect)(()=>{if(t&&o.current){o.current.focus();let e=W(D,t),i=t=>{s.current&&!s.current.contains(t.target)&&r===e?.link.to&&(n(null),a(``))};return document.addEventListener(`mousedown`,i),()=>{document.removeEventListener(`mousedown`,i)}}},[t,r,D]);let Z=fe||_,Fe=[{datatype:`Sent`,value:1,fill:`url(#gradientPurple)`,color:`var(--chart-purple)`}],Ie={percentage:{label:`O`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Le=[{datatype:`Average`,value:E.openedRate,fill:`url(#gradientGray)`,color:`var(--chart-gray)`},{datatype:`This newsletter`,value:T.openedRate,fill:`url(#gradientBlue)`,color:`var(--chart-blue)`}],Re={percentage:{label:`Opened`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},ze=[{datatype:`Average`,value:E.clickedRate,fill:`url(#gradientGray)`,color:`var(--chart-gray)`},{datatype:`This newsletter`,value:T.clickedRate,fill:`url(#gradientTeal)`,color:`var(--chart-teal)`}],Be={percentage:{label:`Clicked`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Q=`grid-cols-3`,$=`aspect-[16/10] w-full max-w-[320px] sm:aspect-[2/1] md:aspect-[10/14] md:max-w-none lg:aspect-square`;return(!d||!p)&&(Q=`grid-cols-2`,$=`aspect-[16/10] w-full max-w-[320px] sm:aspect-[2/1] md:aspect-square md:max-w-none lg:aspect-[15/10]`),!d&&!p&&(Q=`grid-cols-1`,$=`aspect-square w-full sm:aspect-[16/10] md:max-w-[320px] md:max-h-[320px] lg:aspect-[12/10]`),(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ve,{currentTab:`Newsletter`}),(0,X.jsx)(_e,{children:(0,X.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 ${Y&&d&&`lg:grid-cols-2`}`,children:[(0,X.jsxs)(M,{className:Y&&d?`lg:col-span-2`:``,children:[(0,X.jsxs)(O,{className:`hidden`,children:[(0,X.jsx)(A,{children:`Newsletters`}),(0,X.jsx)(j,{children:`How did this post perform`})]}),Z?(0,X.jsx)(k,{className:`h-[25vw] p-6`,children:(0,X.jsx)(ne,{})}):(0,X.jsxs)(k,{className:`p-0`,children:[(0,X.jsxs)(`div`,{className:`grid ${Q} items-stretch border-b`,children:[(0,X.jsxs)(U,{className:`group relative isolate grow p-3 md:px-6 md:py-5`,children:[(0,X.jsx)(B,{onClick:()=>{y(`emails.post_id:${v}`)},children:`View members →`}),(0,X.jsxs)(H,{onClick:()=>{y(`emails.post_id:${v}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-purple opacity-50`}),`Sent`]}),(0,X.jsx)(V,{children:(0,X.jsx)(z,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:f(T.sent)})})]}),p&&(0,X.jsxs)(U,{className:`p-3 md:px-6 md:py-5`,children:[(0,X.jsx)(B,{onClick:()=>{y(`opened_emails.post_id:${v}`)},children:`View members →`}),(0,X.jsxs)(H,{onClick:()=>{y(`opened_emails.post_id:${v}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-blue opacity-50`}),`Opened`]}),(0,X.jsx)(V,{children:(0,X.jsx)(z,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:f(T.opened)})})]}),d&&(0,X.jsxs)(U,{className:`group relative isolate grow p-3 md:px-6 md:py-5`,children:[(0,X.jsx)(B,{onClick:()=>{y(`clicked_links.post_id:${v}`)},children:`View members →`}),(0,X.jsxs)(H,{onClick:()=>{y(`clicked_links.post_id:${v}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-teal opacity-50`}),`Clicked`]}),(0,X.jsx)(V,{children:(0,X.jsx)(z,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:f(T.clicked)})})]})]}),(0,X.jsxs)(`div`,{className:`$ mx-auto grid grid-cols-1 items-center justify-center gap-4 transition-all md:gap-0 ${Q===`grid-cols-2`&&`md:grid-cols-2`} ${Q===`grid-cols-3`&&`md:grid-cols-3`}`,children:[(0,X.jsxs)(`div`,{className:`relative border-r-0 px-6 ${(p||d)&&`md:border-r`}`,children:[(0,X.jsx)(G,{className:$,config:Ie,data:Fe,percentageLabel:`Sent`,percentageValue:m(1),size:l,tooltip:!1}),(p||d)&&(0,X.jsx)(Te,{})]}),p&&(0,X.jsxs)(`div`,{className:`group/block relative border-r-0 px-6 transition-all hover:bg-muted/25 ${d&&`md:border-r`}`,children:[(0,X.jsx)(Ee,{avgValue:m(E.openedRate),dataColor:`var(--chart-blue)`,value:m(T.openedRate)}),(0,X.jsx)(G,{className:$,config:Re,data:Le,percentageLabel:`Open rate`,percentageValue:m(T.openedRate),size:l,tooltip:!1}),d&&(0,X.jsx)(Te,{})]}),d&&(0,X.jsxs)(`div`,{className:`group/block relative px-6 transition-all hover:bg-muted/25`,children:[(0,X.jsx)(Ee,{avgValue:m(E.clickedRate),dataColor:`var(--chart-teal)`,value:m(T.clickedRate)}),(0,X.jsx)(G,{className:$,config:Be,data:ze,percentageLabel:`Click rate`,percentageValue:m(T.clickedRate),size:l,tooltip:!1})]})]})]})]}),Y&&(0,X.jsx)(Se,{feedbackStats:K}),d&&(0,X.jsxs)(M,{className:`group/datalist overflow-hidden`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,X.jsxs)(O,{className:`p-0`,children:[(0,X.jsx)(A,{children:`Newsletter clicks`}),(0,X.jsx)(j,{children:`Which links resonated with your readers`})]}),(0,X.jsx)(h,{className:`mr-2`,children:`Members`})]}),Z?(0,X.jsxs)(k,{className:`p-6 pt-0`,children:[(0,X.jsx)(R,{}),(0,X.jsx)(te,{className:`mt-6`})]}):(0,X.jsxs)(k,{className:`pb-0`,children:[(0,X.jsx)(R,{}),D.length>0?(0,X.jsx)(ue,{className:``,children:(0,X.jsx)(ce,{children:Ae?.map(e=>{let n=T.clicked>0?e.count/T.clicked:0,i=e.link.link_id,c=e.link.title,l=e.link.to,u=e.link.edited;return(0,X.jsxs)(de,{children:[t!==i&&(0,X.jsx)(oe,{style:{width:`${n?Math.round(n*100):0}%`}}),(0,X.jsx)(se,{className:`w-full`,children:t===i?(0,X.jsxs)(`div`,{ref:s,className:`flex w-full items-center gap-2`,children:[(0,X.jsx)(ee,{ref:o,className:`z-50 h-7 w-full border-border bg-background text-sm`,value:r,onChange:e=>a(e.target.value)}),(0,X.jsx)(C,{size:`sm`,onClick:Oe,children:`Update`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(C,{className:`mr-2 shrink-0 bg-background`,size:`sm`,variant:`outline`,onClick:()=>De(i),children:(0,X.jsx)(x,{})}),(0,X.jsx)(`a`,{className:`block truncate font-medium hover:underline`,href:l,rel:`noreferrer`,target:`_blank`,title:c,children:c}),u&&(0,X.jsx)(`span`,{className:`ml-1 text-gray-500`,children:`(edited)`})]})}),(0,X.jsxs)(le,{children:[(0,X.jsx)(ie,{children:f(e.count||0)}),(0,X.jsx)(ae,{children:m(n)})]})]},i)})})}):(0,X.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`You have no links in your post.`})]}),!Z&&D.length>1&&(0,X.jsx)(re,{children:(0,X.jsxs)(`div`,{className:`flex w-full items-start justify-between gap-3`,children:[(0,X.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 pl-4 text-sm text-green`,children:[(0,X.jsx)(w,{size:20,strokeWidth:1.5}),`Sent a broken link? You can update it!`]}),ke>1&&(0,X.jsx)(P,{className:`pb-0`,children:(0,X.jsxs)(I,{children:[(0,X.jsx)(F,{disabled:!Pe,onClick:Me}),(0,X.jsx)(N,{disabled:!Ne,onClick:je})]})})]})})]})]})})]})};export{De 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{g as r,p as i}from"./hooks-CuEZV2-q.js";import{n as a}from"./dist-Ndy-PuGN.js";import{t as o}from"./use-form-vRjI0Kwk.js";import{a as s,i as c,r as l}from"./config-DOMQDZGZ.js";import{h as u}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{x as d}from"./dist-Cb5RSHSg.js";import{t as f}from"./inline-Cw-gigDW.js";import{t as p}from"./stack-CIfOAAVf.js";import{i as m,o as h,r as g}from"./shade-app-F7WxOyfk-nufqw1hd.js";import{A as _,H as v,Lt as y,N as b,P as x,S,U as C,Vn as w,X as T,fn as ee,fr as E,k as te,t as ne,x as re}from"./button-BshWPHvn.js";import{i as D,n as O,r as k,t as ie}from"./tabs-CGisSbWq.js";import{t as A}from"./switch-C9djUIMO.js";import{t as j}from"./input-UHrKuvBT.js";import{i as M,n as N,o as P,s as ae,t as F}from"./select-D_RQaXgt.js";import{t as I}from"./use-settings-navigation-BBzro2-V.js";import{a as L,c as R,i as z,n as B,o as V,r as oe,s as H,t as U}from"./field-LmNk7wZh.js";import{t as se}from"./textarea-d9qEkMOP.js";import{n as W,t as G}from"./toggle-group-CtKZURJd.js";import{r as ce}from"./components-CwL6a6As-B0E0-NBJ.js";import{t as le}from"./use-limiter-TDSNiHPB.js";import{i as ue,r as de}from"./newsletters-DhNigJUh.js";import{Pn as fe,Sr as K,t as pe,xr as me}from"./index-CDP9tIOk.js";import{t as he}from"./validator-Cr0sMKuW.js";import{n as ge}from"./confirmation-context-CLFHhyyH.js";import{n as q}from"./global-data-context-gAMDH9u1.js";import{t as _e}from"./use-upgrade-route-DhRSo7at.js";import{t as ve}from"./use-setting-group-DQxV42-O.js";import{t as J}from"./color-picker-field-DywowPhF.js";import{i as ye,r as be,t as Y}from"./newsletter-emails-D5ql1rud.js";import{t as xe}from"./html-field-BegxsWpw.js";import{t as X}from"./color-utils-Dzeeuj1F.js";import{t as Se}from"./preview-modal-MlTjP8UU.js";``+new URL(`user-cover-yM4cP_Mo.jpg`,import.meta.url).href,``+new URL(`latest-posts-1-D7-ilqhR.jpg`,import.meta.url).href,``+new URL(`latest-posts-2-BPfbGB8B.jpg`,import.meta.url).href,``+new URL(`latest-posts-3-D72O3dn8.jpg`,import.meta.url).href;var Z=n(),Ce=({senderName:e,senderEmail:t,senderReplyTo:n,headerImage:r,headerIcon:i,headerTitle:a,headerSubtitle:o,showPostTitleSection:s,showExcerpt:l,titleAlignment:u,titleFontCategory:f,titleFontWeight:p,bodyFontCategory:m,authorPlaceholder:h,showCommentCta:g,showFeatureImage:v,showFeedback:b,showShareButton:x,showLatestPosts:S,showSubscriptionDetails:C,siteTitle:w,footerContent:ee,showBadge:E,backgroundColor:ne,headerBackgroundColor:re,accentColor:D,textColor:O,secondaryTextColor:k,headerTextColor:ie,secondaryHeaderTextColor:A,postTitleColor:j,sectionTitleColor:M,dividerColor:N,buttonColor:P,buttonTextColor:ae,linkColor:F,buttonCorners:I,buttonStyle:L,imageCorners:R,linkStyle:z,dividerStyle:B})=>{let V=i||a,{config:oe}=q(),H=new Date().toLocaleDateString(`default`,{year:`numeric`,month:`short`,day:`numeric`}),U=new Date().getFullYear(),se=ee?ee.replace(/<a/g,`<a target="_blank" rel="noopener noreferrer"`):``,W;W=c(oe)?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`p`,{className:`leading-normal`,children:[(0,Z.jsx)(`span`,{className:`font-semibold text-grey-900`,children:`From: `}),(0,Z.jsxs)(`span`,{children:[e,` (`,t,`)`]})]}),(0,Z.jsxs)(`p`,{className:`leading-normal`,children:[(0,Z.jsx)(`span`,{className:`font-semibold text-grey-900`,children:`Reply-to: `}),n||t]})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`p`,{className:`leading-normal`,children:[(0,Z.jsx)(`span`,{className:`font-semibold text-grey-900`,children:e}),(0,Z.jsxs)(`span`,{children:[` `,t]})]}),(0,Z.jsxs)(`p`,{className:`leading-normal`,children:[(0,Z.jsx)(`span`,{className:`font-semibold text-grey-900`,children:`To:`}),` Jamie Larson jamie@example.com`]})]});let G=`mb-5 text-pretty leading-[1.7] text-black`;return G=f===`serif`&&m===`serif`?d(G,`mb-8 font-serif text-[2.0rem] leading-tight`):f!==`serif`&&m===`serif`?d(G,`mb-8 text-[1.7rem] leading-tight tracking-tight`):f===`serif`&&m!==`serif`?d(G,`mb-8 font-serif text-[2.0rem] leading-tight`):d(G,`mb-8 text-[1.9rem] leading-tight tracking-tight`),u===`center`&&(G=d(G,`text-center`)),(0,Z.jsx)(`div`,{className:`relative flex grow flex-col`,children:(0,Z.jsx)(`div`,{className:`absolute inset-0 m-5 flex items-center justify-center`,children:(0,Z.jsxs)(`div`,{className:`mx-auto my-0 flex max-h-full w-full max-w-[700px] flex-col overflow-hidden rounded-[4px] text-black shadow-sm`,children:[(0,Z.jsx)(`div`,{className:`flex-column flex min-h-[77px] justify-center gap-1 rounded-t-sm border-b border-grey-200 bg-white px-6 text-grey-700`,children:W}),(0,Z.jsxs)(`div`,{className:`overflow-y-auto`,style:{backgroundColor:ne},children:[(0,Z.jsxs)(`div`,{className:`px-[7rem]`,style:{backgroundColor:re},children:[r&&(0,Z.jsx)(`div`,{children:(0,Z.jsx)(`img`,{alt:``,className:`mb-4 block pt-6`,src:r})}),V&&(0,Z.jsxs)(`div`,{className:`py-3`,children:[i&&(0,Z.jsx)(`img`,{alt:``,className:`mx-auto mb-2 size-10`,role:`presentation`,src:i}),a&&(0,Z.jsx)(`h4`,{className:`mb-1 text-center text-[1.6rem] leading-tight font-bold tracking-tight text-grey-900 uppercase`,style:{color:ie},children:a}),o&&(0,Z.jsx)(`h5`,{className:`mb-1 text-center text-[1.3rem] font-normal text-grey-700`,style:{color:A},children:o})]}),s&&(0,Z.jsxs)(`div`,{className:d(`flex flex-col py-8`,u===`center`?`items-center`:`items-start`),children:[(0,Z.jsx)(`h2`,{className:d(`text-4xl leading-supertight font-bold text-black`,f===`serif`&&`font-serif`,p===`normal`&&`font-normal`,p===`medium`&&`font-medium`,p===`semibold`&&`font-semibold`,p===`bold`&&`font-bold`,u===`center`?`text-center`:`text-left`,l?`mb-2`:`mb-8`),style:{color:j},children:`Your email newsletter`}),l&&(0,Z.jsx)(`p`,{className:G,style:{color:ie},children:`A subtitle to highlight key points and engage your readers.`}),(0,Z.jsxs)(`div`,{className:d(`flex w-full justify-between text-center text-md leading-none text-grey-700`,u===`center`?`flex-col gap-1`:`flex-row`),children:[(0,Z.jsxs)(`p`,{className:`pb-1 text-[1.3rem]`,style:{color:A},children:[`By `,h,(0,Z.jsx)(`span`,{className:`before:pr-1 before:pl-0.5 before:content-['•']`,children:H})]}),(0,Z.jsx)(`p`,{className:`pb-1 text-[1.3rem] underline`,style:{color:A},children:(0,Z.jsx)(`span`,{children:`View in browser`})})]})]}),v&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:d(`h-[unset] w-full max-w-[600px] bg-cover bg-no-repeat`,s?``:`pt-6`),children:(0,Z.jsx)(`img`,{alt:`Feature`,className:d(`min-h-full min-w-full shrink-0`,R===`square`&&`rounded-none`,R===`rounded`&&`rounded-md`),src:``+new URL(`user-cover-yM4cP_Mo.jpg`,import.meta.url).href})}),(0,Z.jsx)(`div`,{className:`mt-1 w-full max-w-[600px] pb-8 text-center text-[1.3rem] text-grey-700`,style:{color:A},children:`Feature image caption`})]})]}),(0,Z.jsxs)(`div`,{className:d(`px-[7rem]`,re!==`transparent`&&`pt-10`),children:[(0,Z.jsxs)(`div`,{className:d(`max-w-[600px] border-b border-grey-200 pb-[52px] leading-[27.2px] text-black`,B===`dashed`&&`border-dashed`,B===`dotted`&&`border-b-2 border-dotted`,m===`serif`?`font-serif text-[1.8rem]`:`text-[1.7rem] tracking-tight`,v||s?``:`pt-8`),style:{borderColor:N},children:[(0,Z.jsx)(`p`,{className:`mb-6`,style:{color:O},children:`This is what your content will look like when you send one of your posts as an email newsletter to your subscribers.`}),(0,Z.jsx)(`p`,{className:`mb-6`,style:{color:O},children:`Over there on the right you'll see some settings that allow you to customize the look and feel of this template – from colors and typography to layout and buttons – to make it perfectly suited to your brand.`}),(0,Z.jsx)(`p`,{className:`mb-[52px]`,style:{color:O},children:`Email templates are exceptionally finnicky to make, but we've spent a long time optimising this one to make it work beautifully across devices, email clients and content types. So, you can trust that every email you send with Ghost will look great and work well. Just like the rest of your site.`}),(0,Z.jsx)(`hr`,{className:d(`my-[52px] border-[#e0e7eb]`,B===`dashed`&&`border-dashed`,B===`dotted`&&`border-t-0 border-b-2 border-dotted`),style:{borderColor:N}}),(0,Z.jsx)(`h3`,{className:d(`mb-[13px] text-[2.6rem] leading-supertight`,f===`serif`&&`font-serif`,f===`sans_serif`&&`font-sans`,p===`normal`&&`font-normal`,p===`medium`&&`font-medium`,p===`semibold`&&`font-semibold`,p===`bold`&&`font-bold`),style:{color:M},children:`Need inspiration?`}),(0,Z.jsxs)(`p`,{className:`mb-[27px]`,style:{color:O},children:[`We've put together a`,` `,(0,Z.jsx)(`a`,{className:d(z===`underline`&&`underline`,z===`bold`&&`font-bold`),href:`https://ghost.org/help/email-design/`,rel:`noopener noreferrer`,style:{color:F||D},target:`_blank`,children:`quick guide`}),` `,`that walks through all of the available settings, along with a few examples of what's possible.`]}),(0,Z.jsx)(`a`,{className:d(`inline-block border px-[18px] py-2 font-sans text-[15px]`,I===`rounded`&&`rounded-[6px]`,I===`pill`&&`rounded-full`,I===`square`&&`rounded-none`,L===`outline`?`bg-transparent`:`border-transparent text-white`,z===`bold`?`font-bold`:`font-semibold`),href:`https://ghost.org/help/email-design/`,rel:`noopener noreferrer`,style:L===`outline`?{borderColor:P||D,color:P||D}:{backgroundColor:P||D,color:ae},target:`_blank`,children:`Learn more`})]}),(b||g||x)&&(0,Z.jsx)(`div`,{className:d(`grid gap-5 border-b border-grey-200 px-6 py-5`,B===`dashed`&&`border-dashed`,B===`dotted`&&`border-b-2 border-dotted`),style:{borderColor:N},children:(0,Z.jsxs)(`div`,{className:`grid auto-cols-fr grid-flow-col gap-4`,children:[b&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`pointer-events-none flex min-w-[120px] cursor-default flex-col items-center gap-[11px] text-center`,children:[(0,Z.jsx)(`span`,{className:`inline-flex size-[54px] items-center justify-center rounded-full border`,style:{borderColor:N,color:O},children:(0,Z.jsx)(te,{className:`size-5`})}),(0,Z.jsx)(`span`,{className:`font-sans text-[1.3rem] leading-[1.4] font-medium`,style:{color:O},children:`More like this`})]}),(0,Z.jsxs)(`div`,{className:`pointer-events-none flex min-w-[120px] cursor-default flex-col items-center gap-[11px] text-center`,children:[(0,Z.jsx)(`span`,{className:`inline-flex size-[54px] items-center justify-center rounded-full border`,style:{borderColor:N,color:O},children:(0,Z.jsx)(_,{className:`size-5`})}),(0,Z.jsx)(`span`,{className:`font-sans text-[1.3rem] leading-[1.4] font-medium`,style:{color:O},children:`Less like this`})]})]}),g&&(0,Z.jsxs)(`div`,{className:`pointer-events-none flex min-w-[120px] cursor-default flex-col items-center gap-[11px] text-center`,children:[(0,Z.jsx)(`span`,{className:`inline-flex size-[54px] items-center justify-center rounded-full border`,style:{borderColor:N,color:O},children:(0,Z.jsx)(y,{className:`size-5`})}),(0,Z.jsx)(`span`,{className:`font-sans text-[1.3rem] leading-[1.4] font-medium`,style:{color:O},children:`Comment`})]}),x&&(0,Z.jsxs)(`div`,{className:`pointer-events-none flex min-w-[120px] cursor-default flex-col items-center gap-[11px] text-center`,children:[(0,Z.jsx)(`span`,{className:`inline-flex size-[54px] items-center justify-center rounded-full border`,style:{borderColor:N,color:O},children:(0,Z.jsx)(T,{className:`size-5`})}),(0,Z.jsx)(`span`,{className:`font-sans text-[1.3rem] leading-[1.4] font-medium`,style:{color:O},children:`Share`})]})]})}),S&&(0,Z.jsxs)(`div`,{className:d(`border-b border-grey-200 py-6`,B===`dashed`&&`border-dashed`,B===`dotted`&&`border-b-2 border-dotted`),style:{borderColor:N},children:[(0,Z.jsx)(`h3`,{className:`mt-2 mb-4 pb-1 text-[1.2rem] font-semibold tracking-wide text-black uppercase`,style:{color:O},children:`Keep reading`}),(0,Z.jsxs)(`div`,{className:`flex justify-between gap-4 py-2`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h4`,{className:d(`mt-0.5 text-[1.9rem] text-black`,f===`serif`&&`font-serif`,p===`normal`&&`font-normal`,p===`medium`&&`font-medium`,p===`semibold`&&`font-semibold`,p===`bold`&&`font-bold`),style:{color:M},children:`The three latest posts published on your site`}),(0,Z.jsx)(`p`,{className:`m-0 text-base text-grey-700`,style:{color:k},children:`Posts sent as an email only will never be shown here.`})]}),(0,Z.jsx)(`div`,{className:`aspect-square h-auto w-full max-w-[100px] bg-cover bg-no-repeat`,children:(0,Z.jsx)(`img`,{alt:`Latest post`,className:d(R===`square`&&`rounded-none`,R===`rounded`&&`rounded-md`),src:``+new URL(`latest-posts-1-D7-ilqhR.jpg`,import.meta.url).href})})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between gap-4 py-2`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h4`,{className:d(`mt-0.5 text-[1.9rem] text-black`,f===`serif`&&`font-serif`,p===`normal`&&`font-normal`,p===`medium`&&`font-medium`,p===`semibold`&&`font-semibold`,p===`bold`&&`font-bold`),style:{color:M},children:`Displayed at the bottom of each newsletter`}),(0,Z.jsx)(`p`,{className:`m-0 text-base text-grey-700`,style:{color:k},children:`Giving your readers one more place to discover your stories.`})]}),(0,Z.jsx)(`div`,{className:`aspect-square h-auto w-full max-w-[100px] bg-cover bg-no-repeat`,children:(0,Z.jsx)(`img`,{alt:`Latest post`,className:d(R===`square`&&`rounded-none`,R===`rounded`&&`rounded-md`),src:``+new URL(`latest-posts-2-BPfbGB8B.jpg`,import.meta.url).href})})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between gap-4 py-2`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h4`,{className:d(`mt-0.5 text-[1.9rem] text-black`,f===`serif`&&`font-serif`,p===`normal`&&`font-normal`,p===`medium`&&`font-medium`,p===`semibold`&&`font-semibold`,p===`bold`&&`font-bold`),style:{color:M},children:`To keep your work front and center`}),(0,Z.jsx)(`p`,{className:`m-0 text-base text-grey-700`,style:{color:k},children:`Making sure that your audience stays engaged.`})]}),(0,Z.jsx)(`div`,{className:`aspect-square h-auto w-full max-w-[100px] bg-cover bg-no-repeat`,children:(0,Z.jsx)(`img`,{alt:`Latest post`,className:d(R===`square`&&`rounded-none`,R===`rounded`&&`rounded-md`),src:``+new URL(`latest-posts-3-D72O3dn8.jpg`,import.meta.url).href})})]})]}),C&&(0,Z.jsxs)(`div`,{className:d(`border-b border-grey-200 py-8`,B===`dashed`&&`border-dashed`,B===`dotted`&&`border-b-2 border-dotted`),style:{borderColor:N},children:[(0,Z.jsx)(`h4`,{className:`mb-3 text-[1.2rem] tracking-wide text-black uppercase`,style:{color:O},children:`Subscription details`}),(0,Z.jsxs)(`p`,{className:`m-0 mb-4 text-base`,style:{color:O},children:[`You are receiving this because you are a paid subscriber to `,w,`. Your subscription will renew on 17 Jul 2024.`]}),(0,Z.jsxs)(`div`,{className:`flex`,children:[(0,Z.jsxs)(`div`,{className:`shrink-0 text-base`,children:[(0,Z.jsx)(`p`,{style:{color:O},children:`Name: Jamie Larson`}),(0,Z.jsx)(`p`,{style:{color:O},children:`Email: jamie@example.com`}),(0,Z.jsx)(`p`,{style:{color:O},children:`Member since: 17 July 2023`})]}),(0,Z.jsx)(`span`,{className:d(`w-full self-end text-right text-base whitespace-nowrap`,z===`underline`&&`underline`,z===`bold`&&`font-bold`),style:{color:F||D},children:`Manage subscription`})]})]}),(0,Z.jsxs)(`div`,{className:`flex flex-col items-center pt-10`,children:[(0,Z.jsx)(`div`,{dangerouslySetInnerHTML:{__html:se||``},className:`text px-8 py-3 text-center text-[1.3rem] leading-base break-words text-grey-700 [&_a]:underline`,style:{color:k}}),(0,Z.jsxs)(`div`,{className:`px-8 pt-3 pb-14 text-center text-[1.3rem] text-grey-700`,children:[(0,Z.jsxs)(`span`,{style:{color:k},children:[w,` © `,U,` —`,` `]}),(0,Z.jsx)(`span`,{className:`pointer-events-none cursor-auto underline`,style:{color:k},children:`Unsubscribe`})]}),E&&(0,Z.jsx)(`div`,{className:`flex flex-col items-center pt-[10px] pb-[40px]`,children:(0,Z.jsxs)(`a`,{className:`pointer-events-none inline-flex cursor-auto items-center px-2 py-1 text-[1.25rem] font-semibold tracking-tight text-grey-900`,href:`https://ghost.org`,style:{color:O},children:[(0,Z.jsx)(ce,{className:`mr-[6px] size-4`}),(0,Z.jsx)(`span`,{children:`Powered by Ghost`})]})})]})]})]})]})})})},Q=e(t(),1),we=({newsletter:e})=>{let{currentUser:t,settings:n,siteData:r,config:i}=q(),[a,o,s,c,l]=K(n,[`title`,`icon`,`comments_enabled`,`support_email_address`,`default_email_address`]),u=null;e.show_header_title?u=a||null:e.show_header_name&&(u=e.name);let d=e.show_header_title&&e.show_header_name?e.name:void 0,f=e.show_comment_cta&&s!==`off`,p=e.feedback_enabled,m=e.show_share_button,h=()=>{let t=e.background_color;return/#([0-9a-f]{3}){1,2}$/i.test(t)?t:`#ffffff`},g=()=>{let t=e.header_background_color;return!t||t===`transparent`?`transparent`:/#([0-9a-f]{3}){1,2}$/i.test(t)?t:`transparent`},_=()=>{let t=e.button_color;return/#([0-9a-f]{3}){1,2}$/i.test(t||``)?t:t===null?X(h()).hex():r.accent_color},v=()=>{let t=e.button_style,n=_();if(n&&t===`fill`)return X(n).hex()},y=()=>{let t=e.link_color===void 0?`accent`:e.link_color;return t===`accent`?r.accent_color:/#([0-9a-f]{3}){1,2}$/i.test(t||``)?t:X(h()).hex()},b=()=>{let t=e.post_title_color;if(/#([0-9a-f]{3}){1,2}$/i.test(t||``))return t;if(t===`accent`)return r.accent_color;let n=g();return X(n===`transparent`?h():n).hex()},x=()=>{let t=e.section_title_color;return/#([0-9a-f]{3}){1,2}$/i.test(t||``)?t:t===`accent`?r.accent_color:X(h()).hex()},S=()=>{let t=e.divider_color;return/#([0-9a-f]{3}){1,2}$/i.test(t||``)?t:t===`accent`?r.accent_color:`#e0e7eb`},C=X(h()).hex(),w=X(h()).alpha(.5).toString(),T=g()===`transparent`?C:X(g()).hex(),ee=g()===`transparent`?w:X(g()).alpha(.5).toString(),E={backgroundColor:h(),headerBackgroundColor:g(),postTitleColor:b()||void 0,sectionTitleColor:x()||void 0,buttonColor:_()||void 0,buttonTextColor:v()||void 0,linkColor:y()||void 0,dividerColor:S()||void 0,textColor:C,secondaryTextColor:w,headerTextColor:T,secondaryHeaderTextColor:ee};return(0,Z.jsx)(Ce,{accentColor:r.accent_color,authorPlaceholder:t.name||t.email,backgroundColor:E.backgroundColor||`#ffffff`,bodyFontCategory:e.body_font_category,buttonCorners:e.button_corners||`rounded`,buttonStyle:e.button_style||`fill`,dividerStyle:e.divider_style||`solid`,footerContent:e.footer_content,headerBackgroundColor:E.headerBackgroundColor||`transparent`,headerIcon:e.show_header_icon?o:void 0,headerImage:e.header_image,headerSubtitle:d,headerTitle:u,imageCorners:e.image_corners||`square`,linkStyle:e.link_style||`underline`,senderEmail:be(e,i,l),senderName:e.sender_name||a,senderReplyTo:Y(e,i,c,l),showBadge:e.show_badge,showCommentCta:f,showExcerpt:e.show_excerpt,showFeatureImage:e.show_feature_image,showFeedback:p,showLatestPosts:e.show_latest_posts,showPostTitleSection:e.show_post_title_section,showShareButton:m,showSubscriptionDetails:e.show_subscription_details,siteTitle:a,titleAlignment:e.title_alignment,titleFontCategory:e.title_font_category,titleFontWeight:e.title_font_weight||`bold`,...E})},Te=e(he(),1),$=({label:e,value:t,options:n,onValueChange:r})=>(0,Z.jsx)(G,{"aria-label":e,type:`single`,value:t,onValueChange:e=>e&&r(e),children:n.map(e=>(0,Z.jsxs)(g,{children:[(0,Z.jsx)(h,{asChild:!0,children:(0,Z.jsx)(W,{"aria-label":e.label,disabled:e.disabled,value:e.value,children:e.icon})}),(0,Z.jsx)(m,{children:e.label})]},e.value))}),Ee=({newsletter:e,updateNewsletter:t,errors:n,clearError:r})=>{let{settings:i,config:a}=q(),[o,s]=K(i,[`default_email_address`,`support_email_address`]),[c,l]=(0,Q.useState)(Y(e,a,s,o)||``),u=be(e,a,o),d=(0,Q.useCallback)(e=>{l(e.target.value),t({sender_reply_to:e.target.value||`newsletter`})},[t,l]);return(0,Z.jsxs)(U,{"data-invalid":!!n.sender_reply_to||void 0,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-reply-to`,children:`Reply-to email`}),(0,Z.jsx)(j,{"aria-invalid":!!n.sender_reply_to||void 0,id:`newsletter-reply-to`,maxLength:191,placeholder:u||``,value:c,onBlur:()=>{let t=Y(e,a,s,o)||``;l(t)},onChange:d,onKeyDown:()=>r(`sender_reply_to`)}),n.sender_reply_to&&(0,Z.jsx)(z,{children:n.sender_reply_to})]})},De=({newsletter:e,onlyOne:t,updateNewsletter:n,validate:o,errors:s,clearError:u})=>{let{updateRoute:d}=I(),m=_e(),{mutateAsync:h}=ue(),g=le(),{settings:_,config:y,siteData:T}=q(),[te,W]=K(_,[`icon`,`default_email_address`]),[G,ce]=(0,Q.useState)(`generalSettings`),{localSettings:pe}=ve(),[he]=K(pe,[`title`]),Y=i(),{confirm:Se,showLimit:Ce}=ge(),{data:{newsletters:we}={}}=de(),Te=[`all`,`paid`].includes(me(_,`comments_enabled`)||``),De=be(e,y,W),[Oe,ke]=(0,Q.useState)(we||[]),Ae=Oe.filter(e=>e.status===`active`);(0,Q.useEffect)(()=>{ke(we||[])},[we]);let je=[{value:`serif`,label:`Elegant serif`,className:`font-serif`},{value:`sans_serif`,label:`Clean sans-serif`}],Me={sans_serif:{options:[{value:`normal`,label:`Regular`,className:`font-normal`},{value:`medium`,label:`Medium`,className:`font-medium`},{value:`semibold`,label:`Semi-bold`,className:`font-semibold`},{value:`bold`,label:`Bold`,className:`font-bold`}]},serif:{options:[{value:`normal`,label:`Regular`,className:`font-normal`},{value:`bold`,label:`Bold`,className:`font-bold`}],map:{medium:`normal`,semibold:`bold`}}},Ne=()=>e.background_color===`light`?!1:X(e.background_color).hex().toLowerCase()===`#ffffff`,Pe=async()=>{if(e.status===`active`)Se({title:`Archive newsletter`,prompt:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`mb-6`,children:[`Your newsletter `,(0,Z.jsx)(`strong`,{children:e.name}),` will no longer be visible to members or available as an option when publishing new posts.`]}),(0,Z.jsx)(`div`,{children:`Existing posts previously sent as this newsletter will remain unchanged.`})]}),okLabel:`Archive`,okVariant:`destructive`,onOk:async t=>{try{await h({...e,status:`archived`}),t?.remove(),a.success(`Newsletter archived`)}catch(e){Y(e)}}});else{try{await g?.errorIfWouldGoOverLimit(`newsletters`)}catch(e){if(e instanceof r){Ce({prompt:e.message||`Your current plan doesn't support more newsletters.`,onOk:()=>d({route:m,isExternal:!0})});return}else throw e}Se({title:`Reactivate newsletter`,prompt:(0,Z.jsxs)(Z.Fragment,{children:[`Reactivating `,(0,Z.jsx)(`strong`,{children:e.name}),` will immediately make it visible to members and re-enable it as an option when publishing new posts.`]}),okLabel:`Reactivate`,onOk:async t=>{await h({...e,status:`active`}),t?.remove(),a.success(`Newsletter reactivated`)}})}},Fe=()=>{if(!c(y))return(0,Z.jsxs)(U,{"data-invalid":!!s.sender_email||void 0,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-sender-email`,children:`Sender email address`}),(0,Z.jsx)(j,{"aria-invalid":!!s.sender_email||void 0,id:`newsletter-sender-email`,placeholder:De||``,value:e.sender_email||``,onChange:e=>n({sender_email:e.target.value}),onKeyDown:()=>u(`sender_email`)}),s.sender_email&&(0,Z.jsx)(z,{children:s.sender_email})]});if(l(y))return(0,Z.jsxs)(U,{"data-invalid":!!s.sender_email||void 0,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-sender-email`,children:`Sender email address`}),(0,Z.jsx)(j,{"aria-invalid":!!s.sender_email||void 0,id:`newsletter-sender-email`,maxLength:191,placeholder:W,value:e.sender_email||``,onChange:e=>{n({sender_email:e.target.value})},onKeyDown:()=>u(`sender_email`)}),s.sender_email&&(0,Z.jsx)(z,{children:s.sender_email})]})},Ie=Me[e.title_font_category||`sans_serif`].options,Le=[{id:`generalSettings`,title:`General`,contents:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(R,{className:`mt-8`,children:[(0,Z.jsx)(H,{className:`text-lg! font-semibold`,children:`Name and description`}),(0,Z.jsxs)(L,{children:[(0,Z.jsxs)(U,{"data-invalid":!!s.name||void 0,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-detail-name`,children:`Name`}),(0,Z.jsx)(j,{"aria-invalid":!!s.name||void 0,id:`newsletter-detail-name`,maxLength:191,placeholder:`Weekly Roundup`,value:e.name||``,onChange:e=>n({name:e.target.value}),onKeyDown:()=>u(`name`)}),s.name&&(0,Z.jsx)(z,{children:s.name})]}),(0,Z.jsxs)(U,{children:[(0,Z.jsx)(V,{htmlFor:`newsletter-description`,children:`Description`}),(0,Z.jsx)(se,{id:`newsletter-description`,maxLength:2e3,rows:2,value:e.description||``,onChange:e=>n({description:e.target.value})})]})]})]}),(0,Z.jsxs)(R,{className:`mt-8`,children:[(0,Z.jsx)(H,{className:`text-lg! font-semibold`,children:`Email info`}),(0,Z.jsxs)(L,{children:[(0,Z.jsxs)(U,{children:[(0,Z.jsx)(V,{htmlFor:`newsletter-sender-name`,children:`Sender name`}),(0,Z.jsx)(j,{id:`newsletter-sender-name`,maxLength:191,placeholder:he,value:e.sender_name||``,onChange:e=>n({sender_name:e.target.value})})]}),Fe(),(0,Z.jsx)(Ee,{clearError:u,errors:s,newsletter:e,updateNewsletter:n,validate:o})]})]}),(0,Z.jsxs)(R,{className:`mt-8`,children:[(0,Z.jsx)(H,{className:`text-lg! font-semibold`,children:`Member settings`}),(0,Z.jsx)(L,{children:(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-subscribe-on-signup`,children:`Subscribe new members on signup`}),(0,Z.jsx)(A,{checked:!!e.subscribe_on_signup,id:`newsletter-subscribe-on-signup`,onCheckedChange:e=>n({subscribe_on_signup:e})})]})})]}),(0,Z.jsx)(`div`,{className:`mt-10 mb-5`,children:e.status===`active`?!t&&(0,Z.jsx)(ne,{className:`text-destructive hover:text-destructive`,disabled:Ae.length===1,type:`button`,variant:`ghost`,onClick:()=>void Pe(),children:`Archive newsletter`}):(0,Z.jsx)(ne,{className:`text-green hover:text-green`,type:`button`,variant:`ghost`,onClick:()=>void Pe(),children:`Reactivate newsletter`})})]})},{id:`content`,title:`Content`,contents:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(R,{className:`mt-8`,children:[(0,Z.jsx)(H,{className:`text-lg! font-semibold`,children:`Header`}),(0,Z.jsxs)(L,{children:[(0,Z.jsx)(ye,{inputId:`newsletter-header-image`,value:e.header_image||``,onChange:e=>n({header_image:e||null}),onUploadError:Y}),(0,Z.jsxs)(p,{gap:`md`,children:[te&&(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-header-icon`,children:`Publication icon`}),(0,Z.jsx)(A,{checked:!!e.show_header_icon,id:`newsletter-show-header-icon`,onCheckedChange:e=>n({show_header_icon:e})})]}),(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-header-title`,children:`Publication title`}),(0,Z.jsx)(A,{checked:!!e.show_header_title,id:`newsletter-show-header-title`,onCheckedChange:e=>n({show_header_title:e})})]}),(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-header-name`,children:`Newsletter name`}),(0,Z.jsx)(A,{checked:!!e.show_header_name,id:`newsletter-show-header-name`,onCheckedChange:e=>n({show_header_name:e})})]})]})]})]}),(0,Z.jsxs)(R,{className:`mt-8`,children:[(0,Z.jsx)(H,{className:`text-lg! font-semibold`,children:`Title section`}),(0,Z.jsxs)(L,{children:[(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-post-title`,children:`Post title`}),(0,Z.jsx)(A,{checked:!!e.show_post_title_section,id:`newsletter-show-post-title`,onCheckedChange:e=>n({show_post_title_section:e})})]}),e.show_post_title_section&&(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-excerpt`,children:`Post excerpt`}),(0,Z.jsx)(A,{checked:!!e.show_excerpt,id:`newsletter-show-excerpt`,onCheckedChange:e=>n({show_excerpt:e})})]}),(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-feature-image`,children:`Feature image`}),(0,Z.jsx)(A,{checked:!!e.show_feature_image,id:`newsletter-show-feature-image`,onCheckedChange:e=>n({show_feature_image:e})})]})]})]}),(0,Z.jsxs)(R,{className:`mt-8`,children:[(0,Z.jsx)(H,{className:`text-lg! font-semibold`,children:`Footer`}),(0,Z.jsxs)(L,{children:[(0,Z.jsxs)(p,{gap:`lg`,children:[(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-feedback-enabled`,children:`Ask your readers for feedback`}),(0,Z.jsx)(A,{checked:!!e.feedback_enabled,id:`newsletter-feedback-enabled`,onCheckedChange:e=>n({feedback_enabled:e})})]}),Te&&(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-comment-cta`,children:`Add a link to your comments`}),(0,Z.jsx)(A,{checked:!!e.show_comment_cta,id:`newsletter-show-comment-cta`,onCheckedChange:e=>n({show_comment_cta:e})})]}),(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-share-button`,children:`Show share button`}),(0,Z.jsx)(A,{checked:!!e.show_share_button,id:`newsletter-show-share-button`,onCheckedChange:e=>n({show_share_button:e})})]}),(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-latest-posts`,children:`Share your latest posts`}),(0,Z.jsx)(A,{checked:!!e.show_latest_posts,id:`newsletter-show-latest-posts`,onCheckedChange:e=>n({show_latest_posts:e})})]}),(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-subscription-details`,children:`Show subscription details`}),(0,Z.jsx)(A,{checked:!!e.show_subscription_details,id:`newsletter-show-subscription-details`,onCheckedChange:e=>n({show_subscription_details:e})})]})]}),(0,Z.jsx)(xe,{hint:`Any extra information or legal text`,nodes:`MINIMAL_NODES`,placeholder:` `,title:`Email footer`,value:e.footer_content||``,onChange:e=>n({footer_content:e})})]})]}),(0,Z.jsx)(fe,{className:`mt-8`}),(0,Z.jsxs)(`div`,{className:`my-5 flex w-full items-start`,children:[(0,Z.jsx)(`span`,{children:(0,Z.jsx)(ee,{className:`mt-[-1px] mr-2 size-5 text-red`})}),(0,Z.jsx)(L,{className:`gap-8`,children:(0,Z.jsxs)(U,{orientation:`horizontal`,children:[(0,Z.jsxs)(B,{children:[(0,Z.jsx)(V,{htmlFor:`newsletter-show-badge`,children:`Promote independent publishing`}),(0,Z.jsx)(oe,{children:`Show you're a part of the indie publishing movement with a small badge in the footer`})]}),(0,Z.jsx)(A,{checked:!!e.show_badge,id:`newsletter-show-badge`,onCheckedChange:e=>n({show_badge:e})})]})})]})]})},{id:`design`,title:`Design`,contents:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(R,{className:`mt-8`,children:[(0,Z.jsx)(H,{className:`text-lg! font-semibold`,children:`Global`}),(0,Z.jsxs)(L,{children:[(0,Z.jsx)(`div`,{className:`mb-1`,children:(0,Z.jsx)(J,{direction:`rtl`,eyedropper:!0,swatches:[{hex:`#ffffff`,value:`light`,title:`White`}],title:`Background color`,value:e.background_color||`light`,onChange:e=>n({background_color:e})})}),(0,Z.jsxs)(f,{className:`w-full`,gap:`sm`,justify:`between`,children:[(0,Z.jsx)(`div`,{className:`shrink-0`,children:`Heading font`}),(0,Z.jsxs)(U,{className:`max-w-[200px]`,children:[(0,Z.jsx)(V,{className:`sr-only`,children:`Heading font`}),(0,Z.jsxs)(F,{value:e.title_font_category,onValueChange:t=>{let r=e.title_font_weight,i=r;return Me[t].options.find(e=>e.value===r)||(i=Me[t].map?.[r]||`bold`),n({title_font_category:t,title_font_weight:i})},children:[(0,Z.jsx)(P,{"aria-label":`Heading font`,children:(0,Z.jsx)(ae,{})}),(0,Z.jsx)(N,{children:je.map(e=>(0,Z.jsx)(M,{value:e.value,children:(0,Z.jsx)(`span`,{className:e.className,children:e.label})},e.value))})]})]})]}),(0,Z.jsxs)(f,{className:`w-full`,gap:`sm`,justify:`between`,children:[(0,Z.jsx)(`div`,{className:`shrink-0`,children:`Heading weight`}),(0,Z.jsxs)(U,{className:`max-w-[200px]`,children:[(0,Z.jsx)(V,{className:`sr-only`,children:`Heading weight`}),(0,Z.jsxs)(F,{value:(()=>{let t=e.title_font_category||`sans_serif`,n=e.title_font_weight,r=Me[t].map,i=r&&r[n]||n;return Ie.find(e=>e.value===i)||Ie[0]})().value,onValueChange:e=>n({title_font_weight:e}),children:[(0,Z.jsx)(P,{"aria-label":`Heading weight`,children:(0,Z.jsx)(ae,{})}),(0,Z.jsx)(N,{children:Ie.map(e=>(0,Z.jsx)(M,{value:e.value,children:(0,Z.jsx)(`span`,{className:e.className,children:e.label})},e.value))})]})]})]}),(0,Z.jsxs)(f,{className:`w-full`,gap:`sm`,justify:`between`,children:[(0,Z.jsx)(`div`,{className:`shrink-0`,children:`Body font`}),(0,Z.jsxs)(U,{className:`max-w-[200px]`,children:[(0,Z.jsx)(V,{className:`sr-only`,children:`Body font`}),(0,Z.jsxs)(F,{value:e.body_font_category,onValueChange:e=>n({body_font_category:e}),children:[(0,Z.jsx)(P,{"aria-label":`Body font`,"data-testid":`body-font-select`,children:(0,Z.jsx)(ae,{})}),(0,Z.jsx)(N,{children:je.map(e=>(0,Z.jsx)(M,{value:e.value,children:(0,Z.jsx)(`span`,{className:e.className,children:e.label})},e.value))})]})]})]})]})]}),(0,Z.jsxs)(R,{className:`mt-8`,children:[(0,Z.jsx)(H,{className:`text-lg! font-semibold`,children:`Header`}),(0,Z.jsxs)(L,{children:[(0,Z.jsx)(`div`,{className:`mb-1`,children:(0,Z.jsx)(J,{direction:`rtl`,eyedropper:!0,swatches:[{value:`transparent`,title:`Transparent`,hex:`#00000000`}],title:`Header background color`,value:e.header_background_color||`transparent`,onChange:e=>n({header_background_color:e})})}),(0,Z.jsx)(`div`,{className:`mb-1`,children:(0,Z.jsx)(J,{direction:`rtl`,eyedropper:!0,swatches:[{value:null,title:`Auto`,hex:Ne()?`#ffffff`:`#000000`},{value:`accent`,title:`Accent`,hex:T.accent_color}],title:`Post title color`,value:e.post_title_color,onChange:e=>n({post_title_color:e})})}),(0,Z.jsxs)(f,{className:`w-full`,gap:`sm`,justify:`between`,children:[(0,Z.jsx)(`div`,{children:`Title alignment`}),(0,Z.jsx)($,{label:`Title alignment`,options:[{value:`left`,label:`Left`,icon:(0,Z.jsx)(b,{className:`size-3.5!`}),disabled:!e.show_post_title_section},{value:`center`,label:`Center`,icon:(0,Z.jsx)(x,{className:`size-3.5!`}),disabled:!e.show_post_title_section}],value:e.title_alignment,onValueChange:e=>n({title_alignment:e})})]})]})]}),(0,Z.jsxs)(R,{className:`mt-8`,children:[(0,Z.jsx)(H,{className:`text-lg! font-semibold`,children:`Body`}),(0,Z.jsxs)(L,{children:[(0,Z.jsx)(`div`,{className:`mb-1`,children:(0,Z.jsx)(J,{direction:`rtl`,eyedropper:!0,swatches:[{value:null,title:`Auto`,hex:Ne()?`#ffffff`:`#000000`},{value:`accent`,title:`Accent`,hex:T.accent_color}],title:`Section title color`,value:e.section_title_color,onChange:e=>n({section_title_color:e})})}),(0,Z.jsx)(`div`,{className:`mb-1`,children:(0,Z.jsx)(J,{direction:`rtl`,eyedropper:!0,swatches:[{value:`accent`,title:`Accent`,hex:T.accent_color},{value:null,title:`Auto`,hex:Ne()?`#ffffff`:`#000000`}],title:`Button color`,value:e.button_color,onChange:e=>n({button_color:e})})}),(0,Z.jsxs)(f,{className:`w-full`,gap:`sm`,justify:`between`,children:[(0,Z.jsx)(`div`,{children:`Button style`}),(0,Z.jsx)($,{label:`Button style`,options:[{value:`fill`,label:`Fill`,icon:(0,Z.jsx)(v,{className:`size-3.5!`,fill:`currentColor`})},{value:`outline`,label:`Outline`,icon:(0,Z.jsx)(v,{className:`size-3.5!`})}],value:e.button_style||`fill`,onValueChange:e=>n({button_style:e})})]}),(0,Z.jsxs)(f,{className:`w-full`,gap:`sm`,justify:`between`,children:[(0,Z.jsx)(`div`,{children:`Button corners`}),(0,Z.jsx)($,{label:`Button corners`,options:[{value:`square`,label:`Squared`,icon:(0,Z.jsx)(C,{className:`size-3.5!`})},{value:`rounded`,label:`Rounded`,icon:(0,Z.jsx)(v,{className:`size-3.5!`})},{value:`pill`,label:`Pill`,icon:(0,Z.jsx)(w,{className:`size-3.5!`})}],value:e.button_corners||`rounded`,onValueChange:e=>n({button_corners:e})})]}),(0,Z.jsx)(`div`,{className:`mb-1`,children:(0,Z.jsx)(J,{direction:`rtl`,eyedropper:!0,swatches:[{value:`accent`,title:`Accent`,hex:T.accent_color},{value:null,title:`Auto`,hex:Ne()?`#ffffff`:`#000000`}],title:`Link color`,value:e.link_color,onChange:e=>n({link_color:e})})}),(0,Z.jsxs)(f,{className:`w-full`,gap:`sm`,justify:`between`,children:[(0,Z.jsx)(`div`,{children:`Link style`}),(0,Z.jsx)($,{label:`Link style`,options:[{value:`underline`,label:`Underline`,icon:(0,Z.jsx)(re,{className:`size-3.5!`})},{value:`regular`,label:`Regular`,icon:(0,Z.jsx)(S,{className:`size-3.5!`})},{value:`bold`,label:`Bold`,icon:(0,Z.jsx)(E,{className:`size-3.5!`})}],value:e.link_style||`underline`,onValueChange:e=>n({link_style:e})})]}),(0,Z.jsxs)(f,{className:`w-full`,gap:`sm`,justify:`between`,children:[(0,Z.jsx)(`div`,{children:`Image corners`}),(0,Z.jsx)($,{label:`Image corners`,options:[{value:`square`,label:`Squared`,icon:(0,Z.jsx)(C,{className:`size-3.5!`})},{value:`rounded`,label:`Rounded`,icon:(0,Z.jsx)(v,{className:`size-3.5!`})}],value:e.image_corners||`square`,onValueChange:e=>n({image_corners:e})})]}),(0,Z.jsx)(`div`,{className:`mb-1`,children:(0,Z.jsx)(J,{direction:`rtl`,eyedropper:!0,swatches:[{value:`light`,title:`Light`,hex:`#e0e7eb`},{value:`accent`,title:`Accent`,hex:T.accent_color}],title:`Divider color`,value:e.divider_color||`light`,onChange:e=>n({divider_color:e})})})]})]})]})}];return(0,Z.jsx)(`div`,{className:`flex flex-col`,children:(0,Z.jsx)(`div`,{className:`px-7 pt-0 pb-7`,children:(0,Z.jsxs)(ie,{value:G,variant:`underline`,onValueChange:e=>{ce(e)},children:[(0,Z.jsx)(k,{className:`sticky top-0 z-50 bg-surface-elevated-2`,children:Le.map(e=>(0,Z.jsx)(D,{value:e.id,children:e.title},e.id))}),Le.map(e=>(0,Z.jsx)(O,{value:e.id,children:e.contents},e.id))]})})})},Oe=({newsletter:e,onlyOne:t})=>{let{config:n}=q(),{mutateAsync:r}=ue(),{updateRoute:c}=I(),u=pe(`automations`)?`emails`:`newsletters`,{formState:d,saveState:f,updateForm:p,setFormState:m,handleSave:h,validate:g,errors:_,clearError:v,okProps:y}=o({initialState:e,savingDelay:500,onSave:async()=>{let{meta:{sent_email_verification:[e]=[]}={}}=await r(d),t;(e&&e===`sender_email`||e&&e===`sender_reply_to`)&&(t=(0,Z.jsx)(`div`,{children:`We‘ve sent a confirmation email to the new address.`})),t&&a.info(t)},onSaveError:i(),onValidate:()=>{let e={};return d.name||(e.name=`A name is required for your newsletter`),d.sender_email&&!Te.default.isEmail(d.sender_email)?e.sender_email=`Enter a valid email address`:d.sender_email&&l(n)&&d.sender_email.split(`@`)[1]!==s(n)&&(e.sender_email=`Email address must end with @${s(n)}`),d.sender_reply_to&&!Te.default.isEmail(d.sender_reply_to)&&![`newsletter`,`support`].includes(d.sender_reply_to)&&(e.sender_reply_to=`Enter a valid email address`),e}}),b=e=>{p(t=>({...t,...e}))};(0,Q.useEffect)(()=>{m(()=>e)},[m,e]);let x=(0,Z.jsx)(we,{newsletter:d}),S=(0,Z.jsx)(De,{clearError:v,errors:_,newsletter:d,onlyOne:t,updateNewsletter:b,validate:g});return(0,Z.jsx)(Se,{buttonsDisabled:y.disabled,cancelLabel:`Close`,dirty:f===`unsaved`,okLabel:y.label||`Save`,okVariant:y.variant,preview:x,previewBgColor:`grey`,previewToolbar:!1,sidebar:S,sidebarPadding:!1,testId:`newsletter-modal`,title:`Newsletter`,onClose:()=>c(u),onOk:async()=>{await h({fakeWhenUnchanged:!0})}})},ke=()=>{let{newsletterId:e}=u(),{data:{newsletters:t,isEnd:n}={},fetchNextPage:r}=de(),i=t?.find(({id:t})=>t===e);return(0,Q.useEffect)(()=>{!i&&!n&&r()},[r,n,i]),i?(0,Z.jsx)(Oe,{newsletter:i,onlyOne:t.length===1}):null};export{ke as default};
|