ghost 6.64.0 → 6.65.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/bin/create-migration.js +15 -0
- package/components/tryghost-adapter-base-scheduling-0.2.4.tgz +0 -0
- package/components/tryghost-api-framework-0.0.0.tgz +0 -0
- package/components/tryghost-i18n-0.0.0.tgz +0 -0
- package/components/tryghost-kg-default-cards-10.3.6.tgz +0 -0
- package/components/tryghost-kg-lexical-html-renderer-1.5.1.tgz +0 -0
- package/components/tryghost-metafield-types-0.0.0.tgz +0 -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 +15 -2
- package/content/themes/casper/assets/js/init.js +37 -9
- package/content/themes/casper/package.json +8 -8
- 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 +14 -1
- package/content/themes/source/assets/js/main.js +24 -4
- package/content/themes/source/package.json +7 -7
- package/core/boot.js +22 -16
- package/core/bridge.js +1 -1
- package/core/built/admin/assets/Combination-DQ6f9A5P.js +41 -0
- package/core/built/admin/assets/{PolarAngleAxis-a81ieQUO.js → PolarAngleAxis-BBaU7PRV.js} +1 -1
- package/core/built/admin/assets/RadialBarChart-Bp20JPnA.js +1 -0
- package/core/built/admin/assets/{about-39CAfroa.js → about-Dp43j18M.js} +1 -1
- package/core/built/admin/assets/accordion-h62UzFhj.js +1 -0
- package/core/built/admin/assets/account-migration-CBTbtX6Q.js +1 -0
- package/core/built/admin/assets/action-list-DC9QpX-l.js +1 -0
- package/core/built/admin/assets/activitypub/{account-migration-KA6Jjf9L.js → account-migration-B1DUZS4Q.js} +8 -8
- package/core/built/admin/assets/activitypub/activitypub.js +24 -11
- package/core/built/admin/assets/activitypub/avatar-CRGud8yf.js +153 -0
- package/core/built/admin/assets/activitypub/{avatar-flipboard-csQaNeYK.js → avatar-flipboard-BZNFAXfm.js} +3 -3
- package/core/built/admin/assets/activitypub/{bluesky-sharing-C7nTDMvw.js → bluesky-sharing-Cg_v-LwS.js} +30 -31
- package/core/built/admin/assets/activitypub/{chunk-KS7C4IRE-Ck3O4oo2.js → chunk-KS7C4IRE-CTUL98Lc.js} +2498 -1885
- package/core/built/admin/assets/activitypub/{content-formatters-CLcjaBwV.js → content-formatters-D7GWP7nH.js} +23 -24
- package/core/built/admin/assets/activitypub/{copy-DcOh8kXw.js → copy-CgzTvoeR.js} +2 -2
- package/core/built/admin/assets/activitypub/{domain-fZ-X8i4-.js → domain-C3G_nkHU.js} +46 -46
- package/core/built/admin/assets/activitypub/{edit-profile-BqMLQV88.js → edit-profile-C8cCY-AK.js} +927 -928
- package/core/built/admin/assets/activitypub/{explore-B4yPoP8E.js → explore-NlDT4inq.js} +11 -11
- package/core/built/admin/assets/activitypub/{feed-BRC_mvAe.js → feed-DF22jCTV.js} +10 -10
- package/core/built/admin/assets/activitypub/{field-COacNgOt.js → field-95-iuTte.js} +4 -4
- package/core/built/admin/assets/activitypub/{hash-C7u-irQQ.js → hash-R7LMLnhY.js} +2 -2
- package/core/built/admin/assets/activitypub/{inbox-CbTTdDQ3.js → inbox-DUJUiV6x.js} +2 -2
- package/core/built/admin/assets/activitypub/{inbox-BW-yvUoN.js → inbox-DerExBzA.js} +416 -414
- package/core/built/admin/assets/activitypub/{label-kPMmYI7l.js → label-EwCn1QYc.js} +4 -4
- package/core/built/admin/assets/activitypub/layout-Dy6NnW1G.js +1 -0
- package/core/built/admin/assets/activitypub/{moderation-CuidJzc0.js → moderation-BSkfiVYo.js} +73 -75
- package/core/built/admin/assets/activitypub/{note-CAMRRSqD.js → note-DOnAJTXK.js} +9 -9
- package/core/built/admin/assets/activitypub/{notifications-BmNlXGgp.js → notifications-DZc6XTjG.js} +27 -27
- package/core/built/admin/assets/activitypub/{onboarding-Dmun9jr_.js → onboarding-8vEIwYTH.js} +3 -3
- package/core/built/admin/assets/activitypub/{onboarding-Bqg7fh_L.js → onboarding-DYVqbNmp.js} +2 -2
- package/core/built/admin/assets/activitypub/{preferences--oH19wf9.js → preferences-DDok6F2N.js} +1418 -1390
- package/core/built/admin/assets/activitypub/{profile-DH_tQx2D.js → profile-DjVa2hUk.js} +254 -255
- package/core/built/admin/assets/activitypub/{reply-Cap9PxSH.js → reply-DtXBpHxu.js} +2 -2
- package/core/built/admin/assets/activitypub/routes-Cw302e1c.js +4946 -0
- package/core/built/admin/assets/activitypub/{separator-CAxxu8VV.js → separator-FpRpVDd3.js} +8 -9
- package/core/built/admin/assets/activitypub/settings-yK-puALn.js +314 -0
- package/core/built/admin/assets/activitypub/{site-BYps63oh.js → site-CHw0R2PA.js} +2 -2
- package/core/built/admin/assets/activitypub/{step-1-CKjR2KAm.js → step-1-737bnvxk.js} +7 -7
- package/core/built/admin/assets/activitypub/{step-2-B6PKfOUQ.js → step-2-DBaIsAsM.js} +7 -7
- package/core/built/admin/assets/activitypub/{step-3-C-qBbcUo.js → step-3-BBmy9m9V.js} +23 -23
- package/core/built/admin/assets/activitypub/tabs-LQ2xirdm.js +1101 -0
- package/core/built/admin/assets/activitypub/{topic-filter-DsUOuu0k.js → topic-filter-75Nu0CKj.js} +4 -4
- package/core/built/admin/assets/activitypub/{use-activity-pub-queries-CX9snsLs.js → use-activity-pub-queries-CYI2QJMs.js} +58 -58
- package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-DsJTGDSS.js → use-navigate-with-base-path-B4jZ8hyg.js} +3924 -1403
- package/core/built/admin/assets/activitypub/{use-reply-chain-data-AJi9zkzm.js → use-reply-chain-data-BHmFxc3U.js} +6 -6
- package/core/built/admin/assets/activitypub/users-CSjOwpT9.js +886 -0
- package/core/built/admin/assets/activitypub/{x-DR8AT3-4.js → x-B9ptWCds.js} +2 -2
- package/core/built/admin/assets/{add-integration-modal-B12oRifD.js → add-integration-modal-BwePhq95.js} +1 -1
- package/core/built/admin/assets/add-newsletter-modal-Zv0I7Msm.js +1 -0
- package/core/built/admin/assets/{add-recommendation-modal-CJf92edY.js → add-recommendation-modal-cdLv0wHy.js} +1 -1
- package/core/built/admin/assets/analytics-DY8_SaP7.js +1 -0
- package/core/built/admin/assets/announcement-bar-modal-C-2yWwag.js +1 -0
- package/core/built/admin/assets/api-keys-BHKATUqQ.js +1 -0
- package/core/built/admin/assets/{audience-6GXevic-.js → audience-wRcSN0jV.js} +1 -1
- package/core/built/admin/assets/{automated-emails-DJQ4uNZo.js → automated-emails-CzUa3v4d.js} +1 -1
- package/core/built/admin/assets/automations-DupSsSOr.js +1 -0
- package/core/built/admin/assets/badge-CI1Z0xyG.js +1 -0
- package/core/built/admin/assets/bluesky-sharing-B8PC1SBj.js +1 -0
- package/core/built/admin/assets/box-LUuYRT-1.js +1 -0
- package/core/built/admin/assets/brand-icon-CrmbX86T.js +1 -0
- package/core/built/admin/assets/breadcrumb-DDDpzLyo.js +1 -0
- package/core/built/admin/assets/button-D414TI3B.js +1 -0
- package/core/built/admin/assets/calendar-Cp_opo3i.js +1 -0
- package/core/built/admin/assets/card-C2dfd5u0.js +1 -0
- package/core/built/admin/assets/chart-B_UNLXse.js +63 -0
- package/core/built/admin/assets/chart-helpers-Czu_9QpJ.js +1 -0
- package/core/built/admin/assets/checkbox-CFFqf0Nh.js +1 -0
- package/core/built/admin/assets/{chunk.368.22ce1b732c0b40abd3f1.js → chunk.201.6961b57ed7a281ac193e.js} +23 -19
- package/core/built/admin/assets/chunk.524.0b850e72ec49a0fa3882.js +25 -0
- package/core/built/admin/assets/chunk.582.db2ae9e968256e8d58ac.js +27 -0
- package/core/built/admin/assets/code-editor-view-Bd_nnHKk.js +1 -0
- package/core/built/admin/assets/code-editor-view-BeU3Yf9M.js +1 -0
- package/core/built/admin/assets/color-picker-Bzm1V7qg.js +3 -0
- package/core/built/admin/assets/color-picker-field-DP0moHz9.js +1 -0
- package/core/built/admin/assets/combobox-6_ruuTuj.js +1 -0
- package/core/built/admin/assets/command-B5wfm6pd.js +1 -0
- package/core/built/admin/assets/comments-BB26dUSl.js +1 -0
- package/core/built/admin/assets/confirmation-context-znVJD4pX.js +1 -0
- package/core/built/admin/assets/container-CHHif8km.js +1 -0
- package/core/built/admin/assets/{content-api-modal-0ZjuLcQ8.js → content-api-modal-DOHwl0yZ.js} +1 -1
- package/core/built/admin/assets/context-menu-BpY46Dlb.js +1 -0
- package/core/built/admin/assets/copy-field-DRBx6Ady.js +1 -0
- package/core/built/admin/assets/create-ghost-browse-value-source-eIXo5Qws.js +1 -0
- package/core/built/admin/assets/custom-field-type-option-DrSlETOI.js +1 -0
- package/core/built/admin/assets/custom-integration-modal-Dgo425Ec.js +1 -0
- package/core/built/admin/assets/data-list-DM8yqpXi.js +1 -0
- package/core/built/admin/assets/date-range-select-DdC23c13.js +1 -0
- package/core/built/admin/assets/design-and-theme-modal-CbSu9IT4.js +2 -0
- package/core/built/admin/assets/detail-page-CN4NdhpV.js +1 -0
- package/core/built/admin/assets/dirty-confirm-dialog-BT_Vq9TD.js +1 -0
- package/core/built/admin/assets/{disabled-sources-indicator-CLZhMv8J.js → disabled-sources-indicator-C5xtW0Q2.js} +1 -1
- package/core/built/admin/assets/dist-B40T-RCQ.js +1 -0
- package/core/built/admin/assets/dist-CrlaEoaK.js +1 -0
- package/core/built/admin/assets/domain-BPReCZa8.js +1 -0
- package/core/built/admin/assets/dropzone-B2auMkf2.js +5 -0
- package/core/built/admin/assets/edit-profile-B7XTBzKe.js +1 -0
- package/core/built/admin/assets/editor-BcaC9dqm.js +8 -0
- package/core/built/admin/assets/editor-screen-FuMpItC8.js +27 -0
- package/core/built/admin/assets/email-sending-status-provider-9d81o1C2.js +1 -0
- package/core/built/admin/assets/embed-signup-form-modal-CbVbMsxl.js +8 -0
- package/core/built/admin/assets/empty-indicator-CSQts7GV.js +1 -0
- package/core/built/admin/assets/explore-DbSXFTJN.js +1 -0
- package/core/built/admin/assets/feature-image-placeholder-DFXA4vfJ.js +1 -0
- package/core/built/admin/assets/feed-W7RlF-Gp.js +1 -0
- package/core/built/admin/assets/field-BXEh3ptU.js +1 -0
- package/core/built/admin/assets/filter-sources-DHK2IoCk.js +1 -0
- package/core/built/admin/assets/filters-0SYNTqyQ.js +1 -0
- package/core/built/admin/assets/filters-DTtZKQyq.js +1 -0
- package/core/built/admin/assets/{first-promoter-modal-wr73Dldc.js → first-promoter-modal-DcoN_OXu.js} +1 -1
- package/core/built/admin/assets/{ghost-a1e6e172c6917e8ef8fa6b0007756d9b.js → ghost-25495154132af7305cb7b646fd83f48f.js} +562 -514
- package/core/built/admin/assets/gift-link-modal-BX-Q1TOk.js +1 -0
- package/core/built/admin/assets/grid-BEUIDQX7.js +1 -0
- package/core/built/admin/assets/growth-G6PLO4aF.js +1 -0
- package/core/built/admin/assets/growth-tkD-fBOY.js +3 -0
- package/core/built/admin/assets/heading-ih-fOVqF.js +1 -0
- package/core/built/admin/assets/history-modal-Ca-gStoq.js +1 -0
- package/core/built/admin/assets/html-field-B3CrKV9Y.js +1 -0
- package/core/built/admin/assets/images-H-BIm8OQ.js +1 -0
- package/core/built/admin/assets/{inbox-DgSZ6w2p.js → inbox-DBbDVMPz.js} +14 -14
- package/core/built/admin/assets/index-DOF2jDq0.js +4 -0
- package/core/built/admin/assets/index-JrrNchW1.css +2 -0
- package/core/built/admin/assets/input-group-CvH-3d3F.js +1 -0
- package/core/built/admin/assets/input-surface-CL23Mlh8.js +1 -0
- package/core/built/admin/assets/integration-header-C7GXGis_.js +1 -0
- package/core/built/admin/assets/invite-user-modal-EJ2_6RpV.js +1 -0
- package/core/built/admin/assets/isPlainObject-BzzgUf1E.js +1 -0
- package/core/built/admin/assets/{koenig-lexical-CXVgQFUk.js → koenig-lexical-Dkwee5FG.js} +1 -1
- package/core/built/admin/assets/koenig-loader-BzXCXHoA.js +2 -0
- package/core/built/admin/assets/kpi-card-iCDUTgOR.js +1 -0
- package/core/built/admin/assets/kpi-card-jTnpLKGr.js +1 -0
- package/core/built/admin/assets/kpi-helpers-Criu0YAf.js +1 -0
- package/core/built/admin/assets/kpi-tabs-DbOmmyOo.js +1 -0
- package/core/built/admin/assets/label-Du0yqMqL.js +1 -0
- package/core/built/admin/assets/label-picker-Bq1XXr1D.js +1 -0
- package/core/built/admin/assets/{labels-KMkFoRG6.js → labels-0x2NfLtC.js} +1 -1
- package/core/built/admin/assets/layout-Ckwzsnsu.js +1 -0
- package/core/built/admin/assets/lib-CCz2mjm8.js +2 -0
- package/core/built/admin/assets/link-helpers-o9GgBTni.js +1 -0
- package/core/built/admin/assets/{links-FwNCVyVe.js → links-Ctujreuh.js} +1 -1
- package/core/built/admin/assets/list-page-CH_wnDC3.js +1 -0
- package/core/built/admin/assets/member-activity-CsAh6MxK.js +1 -0
- package/core/built/admin/assets/member-activity-feed-0ytsQbtY.js +1 -0
- package/core/built/admin/assets/member-custom-fields-CTFGnnYv.js +1 -0
- package/core/built/admin/assets/member-detail-QU3vB1ML.js +1 -0
- package/core/built/admin/assets/members-CtMVO_AB.js +4 -0
- package/core/built/admin/assets/modal-page-8Ipfl51B.js +1 -0
- package/core/built/admin/assets/moderation-B8VtA-W0.js +1 -0
- package/core/built/admin/assets/multi-select-combobox-_9wEYmGv.js +1 -0
- package/core/built/admin/assets/navigation-modal-CGcjJvkc.js +1 -0
- package/core/built/admin/assets/newsletter-BpHjjqmq.js +1 -0
- package/core/built/admin/assets/newsletter-detail-modal-DzTbGOyo.js +1 -0
- package/core/built/admin/assets/newsletter-emails-BMKH4Osp.js +1 -0
- package/core/built/admin/assets/newsletters-BxC84_cL.js +1 -0
- package/core/built/admin/assets/note-BPtEzzZS.js +1 -0
- package/core/built/admin/assets/notifications-ng3ulEdp.js +1 -0
- package/core/built/admin/assets/offers-container-modal-CwqnRa3T.js +1 -0
- package/core/built/admin/assets/onboarding-route-CplZzd7F.js +1 -0
- package/core/built/admin/assets/overview-B0yD9OoX.js +1 -0
- package/core/built/admin/assets/overview-C4eJzQqi.js +1 -0
- package/core/built/admin/assets/page-header-CdCpekG9.js +1 -0
- package/core/built/admin/assets/pagemenu-CKQD9hoP.js +1 -0
- package/core/built/admin/assets/pages-route-CKsnxIvw.js +1 -0
- package/core/built/admin/assets/{pintura-modal-BljM7hf8.js → pintura-modal-C5jzeyGk.js} +1 -1
- package/core/built/admin/assets/portal-frame-DYo0bh0E.js +1 -0
- package/core/built/admin/assets/portal-modal-C0d8xjKa.js +1 -0
- package/core/built/admin/assets/post-analytics-C5C7IyAm.js +1 -0
- package/core/built/admin/assets/post-analytics-header-DKWHwoK2.js +1 -0
- package/core/built/admin/assets/{post-analytics-provider-CgreZDjS.js → post-analytics-provider-BqCPPxmW.js} +1 -1
- package/core/built/admin/assets/post-share-modal-wxmqbAv_.js +1 -0
- package/core/built/admin/assets/posts-list-screen-B978ZO0R.js +2 -0
- package/core/built/admin/assets/posts-route-CDqxKazl.js +1 -0
- package/core/built/admin/assets/preferences-CnejTRc4.js +5 -0
- package/core/built/admin/assets/preview-chrome-C7yZWVLZ.js +1 -0
- package/core/built/admin/assets/preview-modal-CFUxUGHp.js +1 -0
- package/core/built/admin/assets/profile-ClRGiOqA.js +1 -0
- package/core/built/admin/assets/radio-group-CTmLo0h9.js +1 -0
- package/core/built/admin/assets/router-provider-DDZvgS3V.js +1 -0
- package/core/built/admin/assets/select-D_4xWFYv.js +1 -0
- package/core/built/admin/assets/settings-BRl7-7a9.js +1 -0
- package/core/built/admin/assets/settings-BoQcPa-y.js +4 -0
- package/core/built/admin/assets/settings-breadcrumbs-C9Yxl81q.js +1 -0
- package/core/built/admin/assets/{dist-BXHrDV19.js → shade-scope-Cccj-c7I-D0XwkdKQ.js} +5 -3
- package/core/built/admin/assets/share-modal-DBqZobuR.js +1 -0
- package/core/built/admin/assets/simple-pagination-D5t_ox6x.js +1 -0
- package/core/built/admin/assets/skeleton-CPcTiTSX.js +1 -0
- package/core/built/admin/assets/{slack-modal-D7W_fNON.js → slack-modal-BF9ex8cd.js} +1 -1
- package/core/built/admin/assets/sort-button-C0EXGjnS.js +1 -0
- package/core/built/admin/assets/{source-icon-CQboPZQ3.js → source-icon-BzzftCQ2.js} +1 -1
- package/core/built/admin/assets/stats-view-CzpGoHzF.js +1 -0
- package/core/built/admin/assets/{step-1-BKhjy0PV.js → step-1-CBUYUPPF.js} +1 -1
- package/core/built/admin/assets/{step-2-PxA1OM7R.js → step-2-CEIXUwQa.js} +1 -1
- package/core/built/admin/assets/{step-3-BJbAiq16.js → step-3-C1HA5i1N.js} +2 -2
- package/core/built/admin/assets/stripe-button-DMFsLs80.js +1 -0
- package/core/built/admin/assets/stripe-connect-modal-CEvxCUTv.js +1 -0
- package/core/built/admin/assets/switch-DoOJF2yg.js +1 -0
- package/core/built/admin/assets/table-BDYbUHJz.js +1 -0
- package/core/built/admin/assets/tabs-BZyz4ZCH.js +1 -0
- package/core/built/admin/assets/tag-detail-CFzaz_9E.js +2 -0
- package/core/built/admin/assets/tag-picker-BKUCZuRc.js +1 -0
- package/core/built/admin/assets/tags-Bs1FiD7m.js +1 -0
- package/core/built/admin/assets/{testimonials-modal-Dkt6ODLW.js → testimonials-modal-CVm0_7E-.js} +1 -1
- package/core/built/admin/assets/text-BLI0C8Mc.js +1 -0
- package/core/built/admin/assets/textarea-C5qolByg.js +1 -0
- package/core/built/admin/assets/tier-detail-modal-Cmwzi-e7.js +1 -0
- package/core/built/admin/assets/toggle-group-BTL1QsWY.js +1 -0
- package/core/built/admin/assets/{topic-filter-DVOe3D-b.js → topic-filter-BMjhquv7.js} +1 -1
- package/core/built/admin/assets/transistor-modal-hMv53jF8.js +1 -0
- package/core/built/admin/assets/trend-badge-1w_HEzkG.js +1 -0
- package/core/built/admin/assets/{unsplash-modal-DXt7Brum.js → unsplash-modal-jzC8lEB2.js} +1 -1
- package/core/built/admin/assets/use-analytics-data-B3lGOxsC.js +1 -0
- package/core/built/admin/assets/use-availability-DnKqOyqd.js +1 -0
- package/core/built/admin/assets/{use-check-theme-limit-error-JD-J5aaZ.js → use-check-theme-limit-error-C1tc2P4N.js} +2 -2
- package/core/built/admin/assets/use-filter-params-DU-aiaTb.js +1 -0
- package/core/built/admin/assets/{use-filterable-api-CEMSAYPg.js → use-filterable-api-CxCrnPxG.js} +1 -1
- package/core/built/admin/assets/use-growth-stats-E13rMQUE.js +1 -0
- package/core/built/admin/assets/use-limiter-DlL7au90.js +19 -0
- package/core/built/admin/assets/{use-navigate-with-base-path-88EQpw2k.js → use-navigate-with-base-path-BzgNwMAx.js} +1 -1
- package/core/built/admin/assets/{use-pintura-config-BmU45Ruy.js → use-pintura-config-CtEV1JQY.js} +1 -1
- package/core/built/admin/assets/{use-pintura-editor-Bz2bZ4iT.js → use-pintura-editor-CaxE64kD.js} +1 -1
- package/core/built/admin/assets/use-reply-chain-data-BST2OgCM.js +1 -0
- package/core/built/admin/assets/use-sending-eta-DR9ueMH8.js +1 -0
- package/core/built/admin/assets/use-setting-group-ldtX1Vsk.js +1 -0
- package/core/built/admin/assets/use-settings-navigation-CzGU4sus.js +1 -0
- package/core/built/admin/assets/use-staff-users-DoeXaPsb.js +1 -0
- package/core/built/admin/assets/use-tinybird-query-BaBNCaj0.js +1 -0
- package/core/built/admin/assets/{use-tinybird-token-Lk1RSn0t.js → use-tinybird-token-CnZ19NDf.js} +1 -1
- package/core/built/admin/assets/{use-url-input-DpmbDppC.js → use-url-input-C5KHJw79.js} +1 -1
- package/core/built/admin/assets/user-detail-modal-Dm0KfPeR.js +1 -0
- package/core/built/admin/assets/{vendor-2dd263291938d407802568d3357ec69e.js → vendor-97e91ff8dd1457c668f9ef103ee1a77b.js} +2748 -2977
- package/core/built/admin/assets/virtual-list-tAuPUICw.js +1 -0
- package/core/built/admin/assets/web-BQlKcW2x.js +2 -0
- package/core/built/admin/assets/web-NTT5DkEz.js +1 -0
- package/core/built/admin/assets/{zapier-modal-BafLUO4R.js → zapier-modal-DsHG9Oev.js} +1 -1
- package/core/built/admin/index.html +22 -24
- package/core/frontend/apps/private-blogging/index.js +2 -2
- package/core/frontend/apps/private-blogging/lib/middleware.js +1 -1
- package/core/frontend/apps/private-blogging/lib/router.js +1 -1
- package/core/frontend/helpers/cancel_link.js +3 -3
- package/core/frontend/helpers/content.js +2 -2
- package/core/frontend/helpers/content_api_url.js +1 -1
- package/core/frontend/helpers/date.js +1 -1
- package/core/frontend/helpers/foreach.js +5 -5
- package/core/frontend/helpers/get.js +7 -4
- package/core/frontend/helpers/ghost_head.js +2 -2
- package/core/frontend/helpers/has.js +1 -3
- package/core/frontend/helpers/link.js +7 -7
- package/core/frontend/helpers/link_class.js +2 -2
- package/core/frontend/helpers/navigation.js +1 -2
- package/core/frontend/helpers/recommendations.js +5 -6
- package/core/frontend/helpers/tiers.js +1 -1
- package/core/frontend/helpers/total_members.js +1 -1
- package/core/frontend/helpers/total_paid_members.js +1 -1
- package/core/frontend/meta/author-url.js +1 -1
- package/core/frontend/meta/modified-date.js +1 -1
- package/core/frontend/meta/published-date.js +1 -1
- package/core/frontend/meta/schema.js +3 -8
- package/core/frontend/meta/structured-data.js +1 -2
- package/core/frontend/services/assets-minification/minifier.js +1 -1
- package/core/frontend/services/data/entry-lookup.js +1 -1
- package/core/frontend/services/data/fetch-data.js +2 -2
- package/core/frontend/services/rendering/format-response.js +1 -1
- package/core/frontend/services/rendering/renderer.js +3 -0
- package/core/frontend/services/rendering/templates.js +1 -1
- package/core/frontend/services/routing/controllers/static.js +1 -1
- package/core/frontend/services/routing/parent-router.js +1 -1
- package/core/frontend/services/routing/registry.js +1 -1
- package/core/frontend/services/sitemap/base-site-map-generator.js +68 -97
- package/core/frontend/services/sitemap/site-map-index-generator.js +16 -21
- package/core/frontend/services/sitemap/site-map-manager.js +82 -43
- package/core/frontend/services/sitemap/sitemap-xml.js +72 -0
- package/core/frontend/services/theme-engine/handlebars/utils.js +8 -8
- package/core/frontend/services/theme-engine/i18n/i18n.js +4 -5
- package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +1 -1
- package/core/frontend/services/theme-engine/preview.js +1 -1
- package/core/frontend/utils/member-count.js +2 -2
- package/core/frontend/web/routers/serve-public-file.js +1 -1
- package/core/server/adapters/scheduling/README.md +4 -0
- package/core/server/adapters/scheduling/get-scheduler-idempotency-key.js +21 -0
- package/core/server/adapters/storage/LocalStorageBase.js +2 -1
- package/core/server/api/endpoints/automated-emails.js +8 -2
- package/core/server/api/endpoints/db.js +1 -1
- package/core/server/api/endpoints/emails.js +3 -3
- package/core/server/api/endpoints/mail.js +1 -1
- package/core/server/api/endpoints/member-signin-urls.js +1 -1
- package/core/server/api/endpoints/members.js +3 -3
- package/core/server/api/endpoints/oembed.js +1 -1
- package/core/server/api/endpoints/posts.js +1 -1
- package/core/server/api/endpoints/settings.js +2 -2
- package/core/server/api/endpoints/themes.js +5 -5
- package/core/server/api/endpoints/utils/serializers/input/pages.js +2 -2
- package/core/server/api/endpoints/utils/serializers/input/posts.js +2 -2
- package/core/server/api/endpoints/utils/serializers/input/tags.js +1 -1
- package/core/server/api/endpoints/utils/serializers/input/utils/slug-filter-order.js +4 -4
- package/core/server/api/endpoints/utils/serializers/output/mappers/comments.js +8 -5
- package/core/server/api/endpoints/utils/serializers/output/mappers/posts.js +1 -1
- package/core/server/api/endpoints/utils/serializers/output/pages.js +4 -4
- package/core/server/api/endpoints/utils/serializers/output/posts.js +4 -4
- package/core/server/api/endpoints/utils/serializers/output/search-index.js +11 -11
- package/core/server/api/endpoints/utils/serializers/output/settings.js +1 -1
- package/core/server/api/endpoints/utils/serializers/output/utils/extra-attrs.js +3 -3
- package/core/server/api/endpoints/utils/validators/input/automated_emails.js +23 -33
- package/core/server/api/endpoints/utils/validators/input/settings.js +3 -3
- package/core/server/data/exporter/exporter.js +1 -2
- package/core/server/data/exporter/table-lists.js +1 -0
- package/core/server/data/importer/handlers/image.js +1 -2
- package/core/server/data/importer/handlers/json.js +1 -3
- package/core/server/data/importer/handlers/markdown.js +4 -8
- package/core/server/data/importer/import-manager.js +1 -1
- package/core/server/data/importer/importers/content-file-importer.js +4 -8
- package/core/server/data/importer/importers/data/base.js +10 -10
- package/core/server/data/importer/importers/data/custom-theme-settings-importer.js +1 -1
- package/core/server/data/importer/importers/data/data-importer.js +3 -4
- package/core/server/data/importer/importers/data/posts-importer.js +10 -10
- package/core/server/data/importer/importers/data/products-importer.js +3 -3
- package/core/server/data/importer/importers/data/settings-importer.js +2 -2
- package/core/server/data/importer/importers/data/stripe-prices-importer.js +1 -1
- package/core/server/data/importer/importers/data/stripe-products-importer.js +1 -1
- package/core/server/data/importer/importers/data/tags-importer.js +1 -1
- package/core/server/data/importer/importers/data/users-importer.js +2 -2
- package/core/server/data/importer/importers/json-to-html.js +12 -9
- package/core/server/data/migrations/versions/5.0/2022-05-11-13-12-rename-settings.js +1 -1
- package/core/server/data/migrations/versions/6.65/2026-09-16-15-35-26-add-members-metafield-change-events.js +17 -0
- package/core/server/data/schema/fixtures/fixture-manager.js +3 -3
- package/core/server/data/schema/index.js +1 -1
- package/core/server/data/schema/schema.js +26 -0
- package/core/server/data/schema/validator.js +96 -123
- package/core/server/data/seeders/importers/email-recipients-importer.js +2 -2
- package/core/server/data/seeders/importers/members-login-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-newsletters-importer.js +1 -1
- package/core/server/data/seeders/importers/members-paid-subscription-events-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 +2 -2
- package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +1 -1
- package/core/server/data/tinybird/pipes/mv_hits.pipe +25 -20
- package/core/server/data/tinybird/scripts/docker-analytics-manager.js +2 -2
- package/core/server/ghost-server.js +1 -19
- package/core/server/lib/image/image-size.js +1 -3
- package/core/server/lib/request-external.js +53 -117
- package/core/server/models/base/plugins/actions.js +2 -3
- package/core/server/models/base/plugins/crud.js +1 -2
- package/core/server/models/base/plugins/events.js +4 -4
- package/core/server/models/base/plugins/raw-knex.js +3 -3
- package/core/server/models/base/plugins/sanitize.js +1 -1
- package/core/server/models/benefit.js +1 -1
- package/core/server/models/collection.js +1 -1
- package/core/server/models/comment.js +3 -3
- package/core/server/models/invite.js +2 -5
- package/core/server/models/label.js +3 -6
- package/core/server/models/member.js +7 -10
- package/core/server/models/newsletter.js +1 -1
- package/core/server/models/permission.js +3 -6
- package/core/server/models/post.js +20 -23
- package/core/server/models/product.js +4 -1
- package/core/server/models/relations/authors.js +9 -12
- package/core/server/models/role.js +2 -5
- package/core/server/models/settings.js +3 -3
- package/core/server/models/tag.js +2 -5
- package/core/server/models/user.js +8 -10
- package/core/server/models/webhook.js +2 -4
- package/core/server/notify.js +2 -2
- package/core/server/services/adapter-manager/utils.js +6 -1
- package/core/server/services/api-version-compatibility/legacy-api-path-match.js +2 -2
- package/core/server/services/auth/api-key/admin.js +2 -2
- package/core/server/services/auth/api-key/content.js +1 -1
- package/core/server/services/auth/passwordreset.js +1 -1
- package/core/server/services/auth/setup.js +1 -3
- package/core/server/services/automations/README.md +19 -0
- package/core/server/services/automations/poll.js +3 -1
- package/core/server/services/automations/service.js +2 -2
- package/core/server/services/automations/welcome-email-automation-poll.js +199 -293
- package/core/server/services/comments/comments-controller.js +9 -30
- package/core/server/services/comments/comments-service-email-renderer.js +1 -1
- package/core/server/services/comments/comments-service-emails.js +1 -1
- package/core/server/services/comments/comments-service.js +27 -58
- package/core/server/services/comments/comments-stats-service.js +1 -1
- package/core/server/services/content-import/import/staged-file.js +9 -9
- package/core/server/services/content-import/index.js +1 -1
- package/core/server/services/custom-redirects/validation.js +1 -1
- package/core/server/services/email-analytics/email-analytics-service-wrapper.js +23 -55
- package/core/server/services/email-analytics/index.js +35 -19
- package/core/server/services/email-analytics/jobs/email-analytics-job-scheduler.js +31 -60
- package/core/server/services/email-service/README.md +35 -0
- package/core/server/services/email-service/batch-sending-service.js +13 -14
- package/core/server/services/email-service/email-renderer.js +50 -14
- package/core/server/services/email-service/email-service-wrapper.js +3 -2
- package/core/server/services/email-service/email-service.js +33 -8
- package/core/server/services/email-service/email-templates/partials/feedback-button.hbs +2 -1
- package/core/server/services/email-service/email-templates/partials/styles.hbs +0 -6
- package/core/server/services/email-service/email-templates/template.hbs +1 -1
- package/core/server/services/email-service/jobs/send-email-job.js +12 -0
- package/core/server/services/email-service/mailgun-email-provider.js +7 -2
- package/core/server/services/email-service/sending-service.js +1 -1
- package/core/server/services/gifts/gift-service.js +12 -3
- package/core/server/services/gifts/index.js +0 -2
- package/core/server/services/gifts/jobs/index.js +12 -24
- package/core/server/services/gifts/jobs/send-gift-reminders-job.js +6 -46
- package/core/server/services/invitations/accept.js +2 -2
- package/core/server/services/jobs/job-service.js +0 -28
- package/core/server/services/jobs-service/jobs-service.js +5 -0
- package/core/server/services/jobs-service/register-job-handlers.js +17 -1
- package/core/server/services/lib/mailgun-client.js +16 -1
- package/core/server/services/lib/mailgun-recipient-message-id.js +49 -0
- package/core/server/services/limits.js +1 -1
- package/core/server/services/mail/ghost-mailer.js +1 -1
- package/core/server/services/member-attribution/member-attribution-service.js +1 -1
- package/core/server/services/member-attribution/referrer-translator.js +1 -1
- package/core/server/services/members/account-service.js +3 -3
- package/core/server/services/members/api.js +1 -1
- package/core/server/services/members/import-export/import/importer.js +25 -16
- package/core/server/services/members/import-export/import/spool.js +11 -15
- package/core/server/services/members/import-export/index.js +6 -4
- package/core/server/services/members/jobs/index.js +1 -1
- package/core/server/services/members/jobs/members-import-job.js +18 -0
- package/core/server/services/members/member-avatar.js +18 -0
- package/core/server/services/members/members-api/controllers/member-controller.js +2 -2
- package/core/server/services/members/members-api/members-api.js +4 -4
- package/core/server/services/members/members-api/repositories/event-repository.js +36 -1
- package/core/server/services/members/members-api/repositories/member-repository.js +55 -17
- package/core/server/services/members/members-api/repositories/product-repository.js +1 -1
- package/core/server/services/members/members-api/services/member-bread-service.js +4 -7
- package/core/server/services/members/service.js +7 -2
- package/core/server/services/members/stats/members-stats.js +2 -2
- package/core/server/services/members-events/event-storage.js +2 -2
- package/core/server/services/members-metafields/actions.js +23 -2
- package/core/server/services/members-metafields/bindings-service.js +5 -5
- package/core/server/services/members-metafields/definitions-service.js +2 -7
- package/core/server/services/members-metafields/index.js +2 -1
- package/core/server/services/members-metafields/queries.js +7 -1
- package/core/server/services/members-metafields/schema.js +49 -1
- package/core/server/services/members-metafields/values-service.js +112 -10
- package/core/server/services/mentions/mention-sending-service.js +2 -2
- package/core/server/services/mentions/mention.js +3 -4
- package/core/server/services/mentions/mentions-api.js +4 -1
- package/core/server/services/mentions-jobs/job-service.js +0 -28
- package/core/server/services/milestones/milestones-service.js +1 -1
- package/core/server/services/newsletters/newsletters-service.js +1 -1
- package/core/server/services/notifications/notifications.js +3 -3
- package/core/server/services/oembed/oembed-service.js +79 -3
- package/core/server/services/permissions/can-this.js +1 -2
- package/core/server/services/post-scheduling/post-scheduling.js +8 -1
- package/core/server/services/posts/post-scheduling.js +7 -0
- package/core/server/services/settings/settings-bread-service.js +3 -3
- package/core/server/services/settings/settings-utils.js +1 -1
- package/core/server/services/settings-helpers/settings-helpers.js +1 -1
- package/core/server/services/staff/staff-service-emails.js +9 -9
- package/core/server/services/stats/posts-stats-service.js +10 -10
- package/core/server/services/stats/referrers-stats-service.js +1 -1
- package/core/server/services/stats/subscription-stats-service.js +3 -3
- package/core/server/services/stats/utils/tinybird.js +8 -1
- package/core/server/services/stripe/stripe-api.js +3 -3
- package/core/server/services/stripe/stripe-migrations.js +6 -6
- package/core/server/services/themes/storage.js +21 -26
- package/core/server/services/themes/theme-storage.js +2 -2
- package/core/server/services/tiers/tier.js +15 -15
- package/core/server/services/tinybird-sync/index.js +3 -0
- package/core/server/services/tinybird-sync/tinybird-sync-service.js +7 -2
- package/core/server/services/update-check/update-check-service.js +3 -3
- package/core/server/services/webhooks/serialize.js +1 -1
- package/core/server/web/api/app.js +0 -5
- package/core/server/web/api/middleware/upload.js +29 -2
- package/core/server/web/parent/middleware/index.js +1 -1
- package/core/server/web/parent/middleware/log-request.js +5 -0
- package/core/server/web/parent/middleware/queue-request.js +104 -59
- package/core/server/web/shared/middleware/api/spam-prevention.js +2 -2
- package/core/shared/config/defaults.json +6 -1
- package/core/shared/custom-theme-settings-cache/custom-theme-settings-service.js +1 -1
- package/core/shared/labs.js +3 -2
- package/core/shared/settings-cache/cache-manager.js +1 -1
- package/nodemon.json +1 -1
- package/package.json +6 -7
- package/pnpm-lock.yaml +126 -728
- package/pnpm-workspace.yaml +4 -7
- package/tsconfig.json +1 -1
- package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
- package/core/built/admin/assets/Combination-DWfJPcz9.js +0 -41
- package/core/built/admin/assets/RadialBarChart-CHRBhiBN.js +0 -1
- package/core/built/admin/assets/_baseAssignValue-DcPokYW8.js +0 -1
- package/core/built/admin/assets/accordion-CJmRaqK7.js +0 -1
- package/core/built/admin/assets/account-migration-DYf7skbb.js +0 -1
- package/core/built/admin/assets/action-list-Crnh-_UI.js +0 -1
- package/core/built/admin/assets/activitypub/avatar-DVJF5bxP.js +0 -261
- package/core/built/admin/assets/activitypub/layout-BL4_jtuV.js +0 -1
- package/core/built/admin/assets/activitypub/routes-DdyY9uFF.js +0 -7181
- package/core/built/admin/assets/activitypub/settings-B6EEcVkW.js +0 -315
- package/core/built/admin/assets/activitypub/tabs-DLhZtVde.js +0 -1083
- package/core/built/admin/assets/activitypub/users-inweyKL5.js +0 -1499
- package/core/built/admin/assets/add-newsletter-modal-CTvXiIqY.js +0 -1
- package/core/built/admin/assets/analytics-PHR1Fggi.js +0 -1
- package/core/built/admin/assets/announcement-bar-modal-Bql0CXdp.js +0 -1
- package/core/built/admin/assets/api-keys-CubH-7_H.js +0 -1
- package/core/built/admin/assets/automations-DcZSLFDU.js +0 -1
- package/core/built/admin/assets/badge-qP06OT7C.js +0 -1
- package/core/built/admin/assets/bluesky-sharing-CJw4d4Mf.js +0 -1
- package/core/built/admin/assets/box-CZ_LSVSy.js +0 -1
- package/core/built/admin/assets/brand-icon-D3ffDYaC.js +0 -1
- package/core/built/admin/assets/breadcrumb-Chn1Ip_q.js +0 -1
- package/core/built/admin/assets/button-DvIh2Bq-.js +0 -1
- package/core/built/admin/assets/calendar-1QGoStFM.js +0 -1
- package/core/built/admin/assets/card-FHQ4D10L.js +0 -1
- package/core/built/admin/assets/chart-helpers-CNpA7re_.js +0 -1
- package/core/built/admin/assets/chart-jVz9Nf9t.js +0 -63
- package/core/built/admin/assets/checkbox-DKht9xMl.js +0 -1
- package/core/built/admin/assets/chunk.524.cc9be98e44890cedc8c8.js +0 -25
- package/core/built/admin/assets/chunk.582.e6fe742b3217207b11a6.js +0 -27
- package/core/built/admin/assets/code-editor-view-BLQIV85-.js +0 -1
- package/core/built/admin/assets/code-editor-view-Cg5eJxcr.js +0 -1
- package/core/built/admin/assets/color-picker-DQoghc0t.js +0 -3
- package/core/built/admin/assets/color-picker-field-BbeK5RRs.js +0 -1
- package/core/built/admin/assets/combobox-weO4FBbv.js +0 -1
- package/core/built/admin/assets/command-DlLrCm9V.js +0 -1
- package/core/built/admin/assets/comments-BjTitLmP.js +0 -1
- package/core/built/admin/assets/confirmation-context-IyqoXVk-.js +0 -1
- package/core/built/admin/assets/container-DAimjOF_.js +0 -1
- package/core/built/admin/assets/context-menu-BtioYFrg.js +0 -1
- package/core/built/admin/assets/copy-field-C6ujqJlP.js +0 -1
- package/core/built/admin/assets/create-ghost-browse-value-source-DAZMWZNq.js +0 -1
- package/core/built/admin/assets/custom-integration-modal-Dm8QI_J4.js +0 -1
- package/core/built/admin/assets/data-list-C0CKkeWW.js +0 -1
- package/core/built/admin/assets/date-range-select-DrjHQdgz.js +0 -1
- package/core/built/admin/assets/design-and-theme-modal-CXVOzBWu.js +0 -2
- package/core/built/admin/assets/detail-page-QpLIL-EO.js +0 -1
- package/core/built/admin/assets/dirty-confirm-dialog-DWwxREGh.js +0 -1
- package/core/built/admin/assets/dist-Bf-HQtVL.js +0 -1
- package/core/built/admin/assets/dist-CUwte9v_.js +0 -1
- package/core/built/admin/assets/dist-FEQQAwTe.js +0 -1
- package/core/built/admin/assets/domain-DBrBic6q.js +0 -1
- package/core/built/admin/assets/dropzone-D61QVcEY.js +0 -5
- package/core/built/admin/assets/edit-profile-jCqJBxqw.js +0 -1
- package/core/built/admin/assets/editor-8Fm4UBEd.js +0 -8
- package/core/built/admin/assets/editor-screen-BSX_uC2B.js +0 -27
- package/core/built/admin/assets/email-sending-status-provider-DnNhlIvt.js +0 -1
- package/core/built/admin/assets/embed-signup-form-modal-DqtBs1WE.js +0 -8
- package/core/built/admin/assets/empty-indicator-L4Ql5Db7.js +0 -1
- package/core/built/admin/assets/en-Cx75dJv5.js +0 -1
- package/core/built/admin/assets/explore-DXhDCtKw.js +0 -1
- package/core/built/admin/assets/feature-image-placeholder-e2q6TcH6.js +0 -1
- package/core/built/admin/assets/feed-mmt4noNL.js +0 -1
- package/core/built/admin/assets/field-p7KnP98B.js +0 -1
- package/core/built/admin/assets/filter-bar-CiIKBg3D.js +0 -1
- package/core/built/admin/assets/filter-sources-I-dRaQxl.js +0 -1
- package/core/built/admin/assets/filters-1injvyxJ.js +0 -1
- package/core/built/admin/assets/filters-DnpO6GWX.js +0 -1
- package/core/built/admin/assets/gift-link-modal-C3H7YFXO.js +0 -1
- package/core/built/admin/assets/grid-5vplBYri.js +0 -1
- package/core/built/admin/assets/growth-B1og1kQp.js +0 -1
- package/core/built/admin/assets/growth-Bf6OHZlK.js +0 -3
- package/core/built/admin/assets/heading-BB21QAbb.js +0 -1
- package/core/built/admin/assets/history-modal-t_qEnxPx.js +0 -1
- package/core/built/admin/assets/html-field-COLQbV4r.js +0 -1
- package/core/built/admin/assets/images-4mvoc3lB.js +0 -1
- package/core/built/admin/assets/index-B3HZU2i8.css +0 -2
- package/core/built/admin/assets/index-DDd-zhNL.js +0 -4
- package/core/built/admin/assets/inline-B8H6NzIw.js +0 -1
- package/core/built/admin/assets/input-group-CLIN2ykI.js +0 -1
- package/core/built/admin/assets/input-surface-wSO5CRy5.js +0 -1
- package/core/built/admin/assets/integration-header-CKGrXNVP.js +0 -1
- package/core/built/admin/assets/invite-user-modal-BaN2mdhI.js +0 -1
- package/core/built/admin/assets/koenig-loader-B1XPPY5C.js +0 -2
- package/core/built/admin/assets/kpi-card-CRLPVlFW.js +0 -1
- package/core/built/admin/assets/kpi-card-CRPbW8NZ.js +0 -1
- package/core/built/admin/assets/kpi-helpers-D7zT96bp.js +0 -1
- package/core/built/admin/assets/kpi-tabs-DE_yh9Go.js +0 -1
- package/core/built/admin/assets/label-CgeBxy4o.js +0 -1
- package/core/built/admin/assets/label-picker-DGDp4Vwr.js +0 -1
- package/core/built/admin/assets/layout-DWnOMly4.js +0 -1
- package/core/built/admin/assets/lib-_QYaUU89.js +0 -2
- package/core/built/admin/assets/link-helpers-8J7ixADV.js +0 -1
- package/core/built/admin/assets/list-page-DLMP0PxC.js +0 -1
- package/core/built/admin/assets/member-activity-ClMWFyvN.js +0 -1
- package/core/built/admin/assets/member-activity-feed-BQY5Rwaj.js +0 -1
- package/core/built/admin/assets/member-custom-fields-Dd_ie1zG.js +0 -1
- package/core/built/admin/assets/member-detail-DjwkGVne.js +0 -1
- package/core/built/admin/assets/members--N9lhk1N.js +0 -4
- package/core/built/admin/assets/modal-page-Dz-9TP4E.js +0 -1
- package/core/built/admin/assets/moderation-DfYBKq9s.js +0 -1
- package/core/built/admin/assets/multi-select-combobox-BcBEzUW_.js +0 -1
- package/core/built/admin/assets/navigation-modal-Cd-scywg.js +0 -1
- package/core/built/admin/assets/newsletter-detail-modal-CFRY6vg_.js +0 -1
- package/core/built/admin/assets/newsletter-emails-4ntck1AC.js +0 -1
- package/core/built/admin/assets/newsletter-o6eCJtab.js +0 -1
- package/core/built/admin/assets/newsletters-Bmlv0edG.js +0 -1
- package/core/built/admin/assets/note-CWs3LF-0.js +0 -1
- package/core/built/admin/assets/notifications-BjSvTJqh.js +0 -1
- package/core/built/admin/assets/offers-container-modal-Bc9A196w.js +0 -1
- package/core/built/admin/assets/onboarding-route-Di1LJYEE.js +0 -1
- package/core/built/admin/assets/overview-DE7NHZQN.js +0 -1
- package/core/built/admin/assets/overview-DEF-ZY6x.js +0 -1
- package/core/built/admin/assets/page-header-B-G_g42C.js +0 -1
- package/core/built/admin/assets/pagemenu-CnkTDO71.js +0 -1
- package/core/built/admin/assets/pages-route-VT7r7YhG.js +0 -1
- package/core/built/admin/assets/portal-frame-D9V8iq5x.js +0 -1
- package/core/built/admin/assets/portal-modal-B5OOR9ZD.js +0 -1
- package/core/built/admin/assets/post-analytics-header-J0WciLx6.js +0 -1
- package/core/built/admin/assets/post-analytics-rGb-PgD-.js +0 -1
- package/core/built/admin/assets/post-share-modal-D0BbTo4W.js +0 -1
- package/core/built/admin/assets/posts-list-screen-CO5jAWoU.js +0 -2
- package/core/built/admin/assets/posts-route-DV-CXWK9.js +0 -1
- package/core/built/admin/assets/preferences-Tac29oG6.js +0 -5
- package/core/built/admin/assets/preview-chrome-C2lQgZBZ.js +0 -1
- package/core/built/admin/assets/preview-modal-CjRbBr8U.js +0 -1
- package/core/built/admin/assets/profile-yiM1f_Og.js +0 -1
- package/core/built/admin/assets/radio-group-CKROWsw4.js +0 -1
- package/core/built/admin/assets/router-provider-CU87qxXw.js +0 -1
- package/core/built/admin/assets/select-CKaC4ggu.js +0 -1
- package/core/built/admin/assets/settings-81kxUa28.js +0 -1
- package/core/built/admin/assets/settings-BVXFqBVK.js +0 -4
- package/core/built/admin/assets/settings-breadcrumbs-czGRx-iu.js +0 -1
- package/core/built/admin/assets/shade-app-CcS3f8MZ-D5BnfHck.js +0 -3
- package/core/built/admin/assets/share-modal-BL-16PiB.js +0 -1
- package/core/built/admin/assets/skeleton-DwCva0-b.js +0 -1
- package/core/built/admin/assets/sort-button-Dquc83jY.js +0 -1
- package/core/built/admin/assets/stack-BURz77VS.js +0 -1
- package/core/built/admin/assets/stats-view-NDja_g96.js +0 -1
- package/core/built/admin/assets/stripe-button-C3cfCAou.js +0 -1
- package/core/built/admin/assets/stripe-connect-modal-FyE3Ey2c.js +0 -1
- package/core/built/admin/assets/switch-zfUUy9Jh.js +0 -1
- package/core/built/admin/assets/table-dE4GTIRT.js +0 -1
- package/core/built/admin/assets/tabs-B3XK93sR.js +0 -1
- package/core/built/admin/assets/tag-detail-D4P-tZdM.js +0 -2
- package/core/built/admin/assets/tag-picker-BNSZ6Qxw.js +0 -1
- package/core/built/admin/assets/tags-BsZcaJ6h.js +0 -1
- package/core/built/admin/assets/text-DC-ot6u2.js +0 -1
- package/core/built/admin/assets/textarea-B4FffFmE.js +0 -1
- package/core/built/admin/assets/tier-detail-modal-a77Z2VMH.js +0 -1
- package/core/built/admin/assets/toggle-group-D2p4okmJ.js +0 -1
- package/core/built/admin/assets/transistor-modal-C8RMkhOD.js +0 -1
- package/core/built/admin/assets/trend-badge-B9v7kMF8.js +0 -1
- package/core/built/admin/assets/types-uYQ1HgqL.js +0 -1
- package/core/built/admin/assets/use-analytics-data-ChHqiZXv.js +0 -1
- package/core/built/admin/assets/use-availability-hPdeG76y.js +0 -1
- package/core/built/admin/assets/use-filter-params-BSFigDIn.js +0 -1
- package/core/built/admin/assets/use-growth-stats-CqqdnESN.js +0 -1
- package/core/built/admin/assets/use-limiter-DBGjYqu7.js +0 -19
- package/core/built/admin/assets/use-reply-chain-data-DmD2yX5D.js +0 -1
- package/core/built/admin/assets/use-sending-eta-CQeG6OP_.js +0 -1
- package/core/built/admin/assets/use-setting-group-Dza6bQ7W.js +0 -1
- package/core/built/admin/assets/use-settings-navigation-BIjI5mL3.js +0 -1
- package/core/built/admin/assets/use-simple-pagination-DwVxe-Lo.js +0 -1
- package/core/built/admin/assets/use-staff-users-i_Mq9OGR.js +0 -1
- package/core/built/admin/assets/use-tinybird-query-DXoF74NM.js +0 -1
- package/core/built/admin/assets/user-detail-modal-BU4QCHE7.js +0 -1
- package/core/built/admin/assets/virtual-list-DScLNuU8.js +0 -1
- package/core/built/admin/assets/web-BZS-t4H0.js +0 -1
- package/core/built/admin/assets/web-DxAUxnK3.js +0 -2
- package/core/frontend/services/sitemap/utils.js +0 -17
- package/core/server/services/automations/get-scheduler-idempotency-key.js +0 -13
- package/core/server/web/api/testmode/index.js +0 -1
- package/core/server/web/api/testmode/jobs/cpu-hog.js +0 -15
- package/core/server/web/api/testmode/jobs/graceful-job.js +0 -50
- package/core/server/web/api/testmode/jobs/say-hello.js +0 -17
- package/core/server/web/api/testmode/routes.js +0 -120
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e,t}from"./react-BXwhMTuc.js";import{m as n}from"./hooks-DYfTEQLk.js";import{t as r}from"./jsx-runtime-BlNNh7jY.js";import{s as i}from"./config-BPljH6wF.js";import{i as a,r as o}from"./currency-Dy4Tc2R2.js";import{_ as s,n as c}from"./chunk-KS7C4IRE-DhOcHQOU.js";import{G as l,H as u,J as d,L as f}from"./shade-scope-Cccj-c7I-D0XwkdKQ.js";import{t as p}from"./box-LUuYRT-1.js";import{t as ee}from"./container-CHHif8km.js";import{t as te}from"./grid-BEUIDQX7.js";import{r as ne}from"./newsletters-Dz77m__5.js";import{Fr as m,Y as h,an as g,nr as _,qt as v,t as y,tn as b}from"./button-D414TI3B.js";import{a as x,o as S,r as C,s as w,t as T}from"./command-B5wfm6pd.js";import{a as re,i as ie,n as E,o as ae,r as oe,t as se}from"./breadcrumb-DDDpzLyo.js";import{t as D}from"./empty-indicator-CSQts7GV.js";import{t as O}from"./input-group-CvH-3d3F.js";import{t as k}from"./preview-chrome-C7yZWVLZ.js";import{a as A,c as j,n as ce,r as M,s as le,t as ue}from"./table-BDYbUHJz.js";import{n as N,t as P}from"./toggle-group-BTL1QsWY.js";import{$n as de,$r as F,Bn as I,En as L,Hn as R,Hr as fe,Jn as z,Ln as B,Mr as pe,Qn as me,Qr as V,Rn as he,Si as ge,Sn as H,Wn as _e,Xr as ve,cr as ye,d as U,er as be,or as xe,p as W,q as Se,r as Ce,vi as we,yi as Te}from"./index-DOF2jDq0.js";import{t as G}from"./page-header-CdCpekG9.js";import{a as Ee}from"./tiers-6mPzCXlM.js";import{t as K}from"./list-page-CH_wnDC3.js";import{t as De}from"./email-previews-Bs-JDhIw.js";import{t as Oe}from"./clean-tracked-url-dkN05vOf.js";import{a as ke,c as q,i as Ae,l as je,o as Me,r as Ne,s as Pe,t as Fe}from"./member-activity-feed-0ytsQbtY.js";var J=e(t(),1),Y={minimumFractionDigits:0,maximumFractionDigits:2};function X(e,t){if(!(typeof e!=`number`||!Number.isFinite(e)||typeof t!=`string`||!/^[a-z]{3}$/i.test(t)))return{value:o(e),symbol:a(t)}}function Ie(e,t){let n=X(e.data.mrr_delta,e.data.currency);if(!n||n.value===0)return;let r=`${n.symbol}${u(Math.abs(n.value),Y)}`;return e.data.type===`created`?`${t.hasMultipleTiers&&typeof e.data.tierName==`string`&&e.data.tierName.trim()?e.data.tierName:`Paid`} ${n.value<0?`-`:``}${r}/month`:`MRR ${n.value>0?`+`:`-`}${r}`}function Le(e){let t=X(e.data.amount,e.data.currency),{tier_name:n,duration:r,cadence:i}=e.data;if(!t||typeof n!=`string`||!n.trim()||typeof r!=`number`||!Number.isInteger(r)||r<=0||typeof i!=`string`||!i.trim())return`Purchased gift subscription`;let a=`${t.symbol}${u(t.value,Y)}`,o=r===1?i:`${i}s`;return`Purchased gift subscription for ${a} (${n}, ${u(r)} ${o})`}function Re(e,t){let n=je(e.type===`gift_purchase_event`?{...e,data:{...e.data,amount:void 0}}:e,t);if(e.type===`subscription_event`&&(n.info=Ie(e,t)),e.type===`donation_event`){let t=X(e.data.amount,e.data.currency);n.info=t?`${t.symbol}${u(t.value,Y)}`:void 0}return e.type===`gift_purchase_event`&&(n.action=Le(e),n.actionTitle=n.action),e.type===`click_event`&&(n.description=typeof n.description==`string`?Oe(n.description,!0):void 0),n}function Z(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function Q(e){return typeof e==`string`?e:void 0}function ze(e){let t=Z(e),n=Z(t?.email),r=[t,n].find(e=>Q(e?.html)&&typeof e?.subject==`string`),i=Z(t?.newsletter)??Z(n?.newsletter),a=Q(t?.post_id)||Q(n?.post_id)||(typeof t?.title==`string`?Q(t.id):void 0);return{stored:r?{html:Q(r.html),subject:Q(r.subject)}:void 0,postId:a,newsletter:i?{sender_name:Q(i.sender_name),sender_email:Q(i.sender_email)}:void 0}}function Be(e,t,n){let r=n?.hostSettings?.managedEmail;return r?.enabled&&(!r.sendingDomain||e?.split(`@`)[1]!==r.sendingDomain)?t||``:e||t||``}function Ve(e){let t=new DOMParser().parseFromString(e,`text/html`);t.querySelectorAll(`a, area`).forEach(e=>{e.removeAttribute(`href`),e.removeAttribute(`target`)}),t.querySelectorAll(`base, meta[http-equiv], form`).forEach(e=>e.remove());let n=t.createElement(`style`);return n.textContent=`html { scrollbar-width: none; } html::-webkit-scrollbar { display: none; }`,t.head.append(n),`<!DOCTYPE html>${t.documentElement.outerHTML}`}var $=r();function He({email:e,onClose:t}){let[n,r]=(0,J.useState)(`desktop`),[a]=(0,J.useState)(()=>window.document.activeElement),o=ze(e),s=!o.stored&&!!o.postId,c=De(o.postId??``,{enabled:s}),l=ne({enabled:!o.newsletter,searchParams:{filter:`status:active`,limit:`1`}}),u=ge(),d=i(),[p,ee]=Te(u.data?.settings??[],[`title`,`default_email_address`]),m=o.newsletter??l.data?.newsletters[0],_=m?.sender_name||p,b=Be(m?.sender_email??void 0,ee,d.data?.config),x=o.stored??(s&&!c.isError?c.data?.email_previews[0]:void 0),S=(0,J.useMemo)(()=>x?Ve(x.html):void 0,[x?.html]),C=u.isError||d.isError||!o.newsletter&&l.isError,w=u.isLoading||d.isLoading||!o.newsletter&&l.isLoading,T=s&&c.isLoading;return(0,$.jsx)(R,{open:!0,onOpenChange:e=>{e||t()},children:(0,$.jsxs)(_e,{"aria-describedby":void 0,className:`top-0 left-0 h-dvh w-full max-w-none translate-0 grid-rows-[auto_1fr] gap-0 rounded-none border-0 p-0 shadow-none sm:rounded-none`,"data-testid":`activity-email-preview`,onCloseAutoFocus:e=>{a instanceof HTMLElement&&a.isConnected&&(e.preventDefault(),a.focus())},onInteractOutside:e=>e.preventDefault(),children:[(0,$.jsxs)(te,{align:`center`,className:`border-b border-border-default p-4`,columns:3,gap:`md`,children:[(0,$.jsx)(z,{children:`Email preview`}),(0,$.jsxs)(P,{className:`justify-self-center`,type:`single`,value:n,onValueChange:e=>{(e===`desktop`||e===`mobile`)&&r(e)},children:[(0,$.jsx)(N,{"aria-label":`Desktop`,value:`desktop`,children:(0,$.jsx)(g,{})}),(0,$.jsx)(N,{"aria-label":`Mobile`,value:`mobile`,children:(0,$.jsx)(h,{})})]}),(0,$.jsx)(y,{className:`justify-self-end`,onClick:t,children:`Close`})]}),(0,$.jsx)(F,{align:`start`,className:`min-h-0 overflow-auto bg-muted p-3 sm:p-6`,gap:`none`,justify:`center`,children:(0,$.jsx)(k,{className:f(`max-w-full shrink-0`,n===`desktop`?`max-w-[740px] px-0 [&>div]:rounded-2xl [&>div]:shadow-2xl`:`shadow-2xl`),"data-device":n,device:n,children:(0,$.jsxs)(V,{className:`size-full bg-background`,gap:`none`,children:[(0,$.jsxs)(V,{className:`border-b border-border-default p-4 text-[13px]`,gap:`xs`,children:[(0,$.jsx)(`p`,{className:`font-semibold break-words`,children:x?.subject}),(0,$.jsxs)(`p`,{children:[(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:`From: `}),w?`Loading sender…`:C?`Sender unavailable`:(0,$.jsxs)($.Fragment,{children:[_,b&&` <${b}>`]})]}),(0,$.jsxs)(`p`,{children:[(0,$.jsx)(`span`,{className:`text-muted-foreground`,children:`To: `}),`Jamie Larson <jamie@example.com>`]}),C&&(0,$.jsxs)(F,{gap:`sm`,children:[(0,$.jsx)(`p`,{role:`alert`,children:`Couldn’t load sender details.`}),(0,$.jsx)(y,{size:`sm`,variant:`outline`,onClick:()=>{u.refetch(),d.refetch(),o.newsletter||l.refetch()},children:`Retry sender details`})]})]}),T?(0,$.jsx)(F,{"aria-label":`Loading email preview`,className:`grow`,gap:`none`,justify:`center`,role:`status`,children:(0,$.jsx)(L,{size:`md`})}):x?(0,$.jsx)(`iframe`,{className:`min-h-0 grow border-0`,sandbox:``,srcDoc:S,title:`Email content`}):(0,$.jsx)(D,{actions:s?(0,$.jsx)(y,{variant:`outline`,onClick:()=>void c.refetch(),children:`Retry`}):void 0,className:`grow justify-center`,description:s?`The email preview could not be loaded.`:`The original email content is no longer available.`,role:`alert`,title:`Couldn’t load the email preview`,children:(0,$.jsx)(v,{})})]})})})]})})}function Ue({onSelect:e}){let[t,n]=(0,J.useState)(!1),r=(0,J.useRef)(null),[i,a]=(0,J.useState)(``),[o]=Se(i,300),{data:s,isFetching:c,isError:l,refetch:u}=pe({enabled:t&&!!o.trim(),searchParams:{search:o,limit:`20`},defaultErrorHandler:!1}),d=c||i!==o;return(0,$.jsx)(T,{className:`h-auto w-60 max-w-full min-w-0 overflow-visible`,shouldFilter:!1,children:(0,$.jsxs)(B,{open:t&&!!i.trim(),onOpenChange:n,children:[(0,$.jsx)(he,{asChild:!0,children:(0,$.jsx)(p,{ref:r,children:(0,$.jsx)(O,{className:`[&_[cmdk-input-wrapper]]:w-full [&_[cmdk-input-wrapper]]:border-0`,children:(0,$.jsx)(x,{"aria-expanded":t&&!!i.trim(),"aria-label":`Search members`,className:`h-(--control-height) min-w-0 py-0`,"data-slot":`input-group-control`,placeholder:`Search members...`,value:i,onClick:()=>n(!!i.trim()),onFocus:()=>n(!!i.trim()),onValueChange:e=>{a(e),n(!!e.trim())}})})})}),(0,$.jsx)(I,{align:`end`,className:`w-(--radix-popover-trigger-width) max-w-[calc(100vw-2rem)] p-0`,onCloseAutoFocus:e=>e.preventDefault(),onInteractOutside:e=>{r.current?.contains(e.target)&&e.preventDefault()},onOpenAutoFocus:e=>e.preventDefault(),children:(0,$.jsx)(w,{children:d?(0,$.jsx)(F,{"aria-label":`Loading members`,className:`p-4`,justify:`center`,role:`status`,children:(0,$.jsx)(L,{size:`sm`})}):l?(0,$.jsxs)(V,{className:`p-4`,gap:`sm`,children:[(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,role:`alert`,children:`Couldn’t load members`}),(0,$.jsx)(y,{variant:`outline`,onClick:()=>void u(),children:`Retry`})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(C,{children:`No members found`}),s?.members.map(t=>(0,$.jsxs)(S,{value:t.id,onSelect:()=>{e(t.id),n(!1),a(``)},children:[(0,$.jsx)(H,{...W(t),src:t.avatar_image}),(0,$.jsxs)(V,{className:`min-w-0`,gap:`none`,children:[(0,$.jsx)(`span`,{className:`truncate font-medium`,title:U(t),children:U(t)}),t.name?.trim()&&(0,$.jsx)(`span`,{className:`truncate text-sm text-muted-foreground`,title:t.email,children:t.email})]})]},t.id))]})})})]})})}var We=e(d(),1);function Ge(e){if(!e||typeof e!=`object`)return;let t=`subject`in e?e.subject:void 0;return typeof t==`string`&&t.trim()?t:`email`in e&&e.email&&typeof e.email==`object`?Ge(e.email):`Email`}function Ke({event:e,memberHref:t,hideMember:n,onPreview:r}){let i=typeof e.subject==`string`&&e.subject?e.subject:`Unknown member`,a=(0,$.jsxs)(F,{gap:`md`,children:[(0,$.jsx)(H,{...W(e.member),className:`[&_span]:text-[13px]`,src:e.member?.avatar_image}),(0,$.jsxs)(V,{className:`min-w-0`,gap:`none`,children:[(0,$.jsx)(`span`,{className:f(`truncate font-medium`,t&&`group-hover/member:underline`),children:i}),e.member?.name&&(0,$.jsx)(`span`,{className:`truncate text-muted-foreground`,children:e.member.email})]})]}),o=q(e.route)?e.route:q(e.url)?e.url:void 0,s=!!e.object&&!!o,l=!s&&Ge(e.email),u=e.action?e.action[0].toUpperCase()+e.action.slice(1):`Unknown activity`,d=e.timestamp?(0,We.default)(e.timestamp).local():void 0;return(0,$.jsxs)(j,{children:[!n&&(0,$.jsx)(M,{className:`group/member w-1/3 max-w-72 min-w-40 py-4`,children:t?(0,$.jsx)(c,{className:`block hover:no-underline`,to:t,children:a}):a}),(0,$.jsx)(M,{className:`min-w-48 py-4`,children:(0,$.jsxs)(F,{gap:`md`,children:[(0,$.jsx)(F,{className:`size-8 shrink-0 rounded-full bg-muted`,gap:`none`,justify:`center`,children:(0,$.jsx)(Fe,{iconName:e.icon})}),(0,$.jsxs)(V,{className:`min-w-0`,gap:`xs`,children:[(0,$.jsxs)(`p`,{className:`leading-relaxed`,children:[(0,$.jsx)(`span`,{title:e.actionTitle,children:u}),e.info&&(0,$.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,e.info,`)`]}),s&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),o.startsWith(`#/`)?(0,$.jsx)(Ce,{className:`font-medium hover:underline`,to:o.slice(1),children:e.object}):(0,$.jsx)(`a`,{className:`font-medium hover:underline`,href:o,rel:`noopener noreferrer`,target:`_blank`,children:e.object})]}),l&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),(0,$.jsx)(`button`,{className:`cursor-pointer text-left font-medium hover:underline`,type:`button`,onClick:()=>r(e.email),children:l})]})]}),e.description&&(0,$.jsx)(`p`,{className:`break-all text-muted-foreground`,title:e.description,children:e.description})]})]})}),(0,$.jsx)(M,{className:`w-40 py-4 text-left whitespace-nowrap text-muted-foreground`,children:d?.isValid()?(0,$.jsx)(`time`,{dateTime:d.toISOString(),children:d.format(`DD MMM YYYY HH:mm`)}):`—`})]})}function qe(){let[e,t]=s(),r=e.get(`member`)||void 0,i=e.get(`excludedEvents`),[a,o]=(0,J.useState)(null),d=(0,J.useRef)(null),{settingsQuery:f,settings:te,activitySettings:h}=Ne(),g=we(te,`paid_members_enabled`)??!1,v=fe(r??``,{enabled:!!r,defaultErrorHandler:!1}),x=v.data?.members[0],S=!!r&&(v.error instanceof n&&v.error.response?.status===404||v.isSuccess&&!x),C=!!r&&v.isError&&!S,w=ne({searchParams:{filter:`status:active`,limit:`1`}}),T=Ee({searchParams:{filter:`type:paid+active:true`,limit:`all`},enabled:g}),O=ve({...Ae({settings:h,memberId:r,excluded:i}),enabled:!!f.data&&!f.isError&&(!r||!!x),defaultErrorHandler:!1}),k=O.data?.events??[],M=ke(h,r),N=Me(i),P=M.filter(({event:e})=>!N.includes(e)),I=P.length===M.length?`All events`:P.length===1?P[0].name:P.length===0?`No events selected`:`${u(P.length)} events`,R=f.isLoading||!!r&&v.isLoading||O.isLoading,z=(n,r)=>{let i=new URLSearchParams(e);r?i.set(n,r):i.delete(n),t(i)};(0,J.useEffect)(()=>{let e=d.current;if(!e||!O.hasNextPage||O.isFetching||O.isError)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&O.fetchNextPage()},{root:l(e),rootMargin:`250px`});return t.observe(e),()=>t.disconnect()},[O.hasNextPage,O.isFetching,O.isError,O.fetchNextPage]);let B=!!r||N.length>0;return(0,$.jsxs)(p,{className:`size-full`,children:[(0,$.jsx)(ee,{className:`relative h-full`,size:`page`,children:(0,$.jsxs)(K,{"data-testid":`member-activity-page`,children:[(0,$.jsx)(K.Header,{children:(0,$.jsxs)(G,{blurredBackground:!1,sticky:!1,children:[(0,$.jsx)(G.Left,{children:r?(0,$.jsx)(se,{children:(0,$.jsxs)(ie,{children:[(0,$.jsx)(E,{children:(0,$.jsx)(oe,{asChild:!0,children:(0,$.jsx)(c,{to:`/members-activity`,children:`Member activity`})})}),(0,$.jsx)(ae,{}),(0,$.jsx)(E,{children:(0,$.jsx)(re,{className:`truncate`,children:x?U(x):`Member`})})]})}):(0,$.jsx)(G.Title,{children:`Member activity`})}),(0,$.jsx)(G.Actions,{className:`max-w-full min-w-0`,children:(0,$.jsxs)(F,{className:`max-w-full min-w-0`,gap:`md`,wrap:!0,children:[!r&&(0,$.jsx)(Ue,{onSelect:e=>z(`member`,e)}),(0,$.jsxs)(me,{children:[(0,$.jsx)(ye,{asChild:!0,children:(0,$.jsxs)(y,{"aria-label":`Filter events`,variant:`outline`,children:[(0,$.jsx)(b,{className:`size-4`}),I,(0,$.jsx)(_,{className:`size-4 opacity-50`})]})}),(0,$.jsx)(be,{align:`end`,className:`max-h-[70vh] w-64 max-w-[calc(100vw-2rem)] overflow-y-auto`,children:M.map((e,t)=>(0,$.jsxs)(J.Fragment,{children:[t>0&&e.group!==M[t-1].group&&(0,$.jsx)(xe,{}),(0,$.jsxs)(de,{checked:!N.includes(e.event),className:`gap-2 pr-8 pl-2 [&>span:first-child]:right-2 [&>span:first-child]:left-auto`,onCheckedChange:()=>z(`excludedEvents`,Pe(e.event,i)),onSelect:e=>e.preventDefault(),children:[(0,$.jsx)(Fe,{iconName:e.icon}),e.name]})]},e.event))})]})]})})]})}),(0,$.jsxs)(K.Body,{children:[x&&(0,$.jsxs)(F,{className:`py-6`,gap:`lg`,children:[(0,$.jsx)(H,{...W(x),className:`size-12 min-w-12 [&_span]:text-lg`,src:x.avatar_image}),(0,$.jsxs)(V,{className:`min-w-0`,gap:`none`,children:[(0,$.jsx)(`h2`,{className:`truncate text-xl font-semibold`,children:U(x)}),x.name?.trim()&&(0,$.jsx)(`p`,{className:`truncate text-muted-foreground`,children:x.email}),(0,$.jsx)(c,{className:`mt-0.5 text-sm font-medium hover:underline`,to:`/members/${encodeURIComponent(x.id)}`,children:`View member profile →`})]})]}),f.isError?(0,$.jsx)(D,{actions:(0,$.jsx)(y,{variant:`outline`,onClick:()=>void f.refetch(),children:`Retry`}),role:`alert`,title:`Couldn’t load activity settings`}):S?(0,$.jsx)(D,{actions:(0,$.jsx)(y,{variant:`outline`,onClick:()=>z(`member`),children:`Clear member`}),description:`This member may have been deleted.`,role:`alert`,title:`Member not found`}):C?(0,$.jsx)(D,{actions:(0,$.jsx)(y,{variant:`outline`,onClick:()=>void v.refetch(),children:`Retry`}),role:`alert`,title:`Couldn’t load member`}):R?(0,$.jsx)(F,{"aria-label":`Loading member activity`,className:`grow py-10`,justify:`center`,role:`status`,children:(0,$.jsx)(L,{size:`lg`})}):(0,$.jsxs)($.Fragment,{children:[k.length>0?(0,$.jsx)(p,{className:`shrink-0 overflow-x-auto`,children:(0,$.jsxs)(ue,{"aria-label":`Member activity`,className:`text-[13px]`,children:[(0,$.jsx)(le,{children:(0,$.jsxs)(j,{children:[!r&&(0,$.jsx)(A,{className:`text-[13px]`,scope:`col`,children:`Member`}),(0,$.jsx)(A,{className:`text-[13px]`,scope:`col`,children:`Event`}),(0,$.jsx)(A,{className:`text-[13px]`,scope:`col`,children:`Time`})]})}),(0,$.jsx)(ce,{children:k.map((t,n)=>{let i=Re(t,{hasMultipleNewsletters:w.isError||(w.data?.meta?.pagination.total??0)>1,hasMultipleTiers:(T.data?.tiers.length??0)>1,paidMembersEnabled:g}),a=new URLSearchParams(e);return i.member?.id&&a.set(`member`,i.member.id),(0,$.jsx)(Ke,{event:i,hideMember:!!r,memberHref:i.member?.id?`/members-activity?${a}`:void 0,onPreview:o},`${t.type}:${i.id??n}`)})})]})}):!O.isError&&(0,$.jsx)(D,{actions:B?(0,$.jsx)(y,{variant:`outline`,asChild:!0,children:(0,$.jsx)(c,{to:`/members-activity`,children:`Show all activity`})}):void 0,className:`grow`,title:B?`No activities match the current filter`:`No member activity yet`,children:(0,$.jsx)(m,{})}),O.isError&&(0,$.jsx)(D,{actions:(0,$.jsx)(y,{variant:`outline`,onClick:()=>void(O.isFetchNextPageError?O.fetchNextPage():O.refetch()),children:`Retry`}),role:`alert`,title:k.length?`Couldn’t load more activity`:`Couldn’t load member activity`}),O.isFetchingNextPage&&(0,$.jsx)(F,{"aria-label":`Loading more activity`,className:`py-6`,justify:`center`,role:`status`,children:(0,$.jsx)(L,{size:`md`})}),(0,$.jsx)(p,{ref:d,className:`h-px`})]})]})]})}),!!a&&(0,$.jsx)(He,{email:a,onClose:()=>o(null)})]})}export{qe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e,t}from"./react-BXwhMTuc.js";import{t as n}from"./jsx-runtime-BlNNh7jY.js";import{J as r,c as i}from"./shade-scope-Cccj-c7I-D0XwkdKQ.js";import{A as a,At as o,Fr as s,Gt as c,It as l,Jn as u,Jt as d,Kt as f,Qt as ee,Rn as te,Tr as ne,Xt as p,Yt as m,_ as h,et as g,g as re,k as _,qt as v,t as y,yn as b}from"./button-D414TI3B.js";import{t as x}from"./skeleton-CPcTiTSX.js";import{n as S,t as C}from"./card-C2dfd5u0.js";import{t as ie}from"./empty-indicator-CSQts7GV.js";import{Si as ae,Ur as w,vi as T}from"./index-DOF2jDq0.js";import{r as E,t as D}from"./use-availability-DnKqOyqd.js";t();var O=e(r(),1),k=new Set([`bif`,`clp`,`djf`,`gnf`,`jpy`,`kmf`,`krw`,`mga`,`pyg`,`rwf`,`ugx`,`vnd`,`vuv`,`xaf`,`xof`,`xpf`]);function A(e,t){let n=k.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 j(e){return e?.trim()||null}function M(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`),e.type===`metafield_change_event`&&(t=`metafields-changed`),`event-${t}`}var N=3;function P(e){return e.type===`metafield_change_event`}var F={admin:`in Admin`,admin_api:`through the Admin API`,import:`from an import`,checkout:`at checkout`,portal:`in Portal`};function I(e){let t=e.data.metafields.map(({name:e})=>e),n=`custom fields`;if(t.length>N){let e=t.length-N;n=`${t.slice(0,N).join(`, `)} and ${e} more ${e===1?`field`:`fields`}`}else t.length>0&&(n=t.length===1?t[0]:`${t.slice(0,-1).join(`, `)} and ${t.at(-1)}`);let{source:r}=e.data,i=E(r)?F[r]:void 0;return i?`updated ${n} ${i}`:`updated ${n}`}function L(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=j(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(P(e))return I(e);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 ${A(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 R(e,t){if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source===`automation_action_revision`){let e=j(t.subject);return e?`received automated email: ${e}`:`received automated email`}}return L(e,t)}function z(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 B(e){let t=e.data.attribution;return t?.referrer_source?{name:t.referrer_source,url:t.referrer_url??null}:null}function V(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 H(e){if(e.type===`click_event`)return e.data.link?.to}function oe(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 U(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 W(e,t){let n=j(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:M(e),subject:r,action:L(e,t.hasMultipleNewsletters),actionTitle:R(e,t.hasMultipleNewsletters),join:`–`,object:z(e),source:B(e),info:V(e,t),description:H(e),url:oe(e),route:U(e),timestamp:e.data.created_at}}function G(e){return e?/^(https?:\/\/|\/|#\/)/i.test(e):!1}var K=[`email_sent_event`,`email_delivered_event`,`email_opened_event`,`email_failed_event`,`email_complaint_event`],q=[{event:`signup_event`,name:`Signups`,group:`auth`,icon:`event-signed-up`},{event:`login_event`,name:`Logins`,group:`auth`,icon:`event-logged-in`},{event:`subscription_event`,name:`Paid subscriptions`,group:`payments`,icon:`event-subscriptions`},{event:`payment_event`,name:`Payments`,group:`payments`,icon:`event-subscriptions`},{event:`newsletter_event`,name:`Email subscriptions`,group:`emails`,icon:`event-subscribed-to-email`},{event:`email_opened_event`,name:`Email opened`,group:`emails`,icon:`event-opened-email`},{event:`email_delivered_event`,name:`Email received`,group:`emails`,icon:`event-received-email`},{event:`email_complaint_event`,name:`Email flagged as spam`,group:`emails`,icon:`event-email-delivery-spam`},{event:`email_failed_event`,name:`Email bounced`,group:`emails`,icon:`event-email-delivery-failed`},{event:`email_change_event`,name:`Email address changed`,group:`emails`,icon:`event-email-changed`},{event:`automated_email_sent_event`,name:`Welcome email received`,group:`emails`,icon:`event-sent-email`},{event:`metafield_change_event`,name:`Custom fields updated`,group:`others`,icon:`event-metafields-changed`},{event:`feedback_event`,name:`Feedback`,group:`others`,icon:`event-more-like-this`}];function J(e){return[...new Set((e??``).split(`,`).filter(e=>/^[a-z_]+$/.test(e)))]}function Y(e,t){let n=[`aggregated_click_event`];return(!t||e.editorDefaultEmailRecipients===`disabled`)&&n.push(...K),e.editorDefaultEmailRecipients===`disabled`&&n.push(`newsletter_event`),e.customFieldsAvailable||n.push(`metafield_change_event`),n}function se(e,t){let n=[...q];e.commentsEnabled!==`off`&&n.push({event:`comment_event`,name:`Comments`,group:`others`,icon:`event-comment`}),e.emailTrackClicks&&n.push({event:`click_event`,name:`Clicked link in email`,group:`others`,icon:`event-click`});let r=new Set(Y(e,t));return n.filter(({event:e})=>!r.has(e))}function ce(e,t){let n=new Set(J(t)),r=e===`subscription_event`?[e,`gift_redemption_event`,`gift_ended_event`]:e===`payment_event`?[e,`donation_event`,`gift_purchase_event`]:[e],i=n.has(e);for(let e of r)i?n.delete(e):n.add(e);return[...n].join(`,`)}function X({settings:e,memberId:t,excluded:n}){let r=new Set([...J(n),...Y(e,t)]);return r.has(`email_complaint_event`)&&r.add(`email_complained_event`),e.commentsEnabled===`off`&&r.add(`comment_event`),{memberId:t,excludedEvents:[...r]}}function Z(){let e=ae({defaultErrorHandler:!1}),t=e.data?.settings??[],n=D();return{settingsQuery:e,settings:t,activitySettings:{editorDefaultEmailRecipients:T(t,`editor_default_email_recipients`)??void 0,commentsEnabled:T(t,`comments_enabled`)??void 0,emailTrackClicks:T(t,`email_track_clicks`)??void 0,customFieldsAvailable:n}}}var Q=n(),$=({iconName:e})=>{let t={className:`shrink-0 text-muted-foreground`,size:16};switch(e){case`event-signed-up`:return(0,Q.jsx)(re,{...t});case`event-logged-in`:return(0,Q.jsx)(ee,{...t});case`event-subscriptions`:return(0,Q.jsx)(te,{...t});case`event-canceled-subscription`:return(0,Q.jsx)(u,{...t});case`event-subscribed-to-email`:return(0,Q.jsx)(d,{...t});case`event-unsubscribed-from-email`:return(0,Q.jsx)(p,{...t});case`event-opened-email`:return(0,Q.jsx)(m,{...t});case`event-received-email`:return(0,Q.jsx)(c,{...t});case`event-sent-email`:return(0,Q.jsx)(g,{...t});case`event-email-delivery-failed`:return(0,Q.jsx)(f,{...t});case`event-email-delivery-spam`:return(0,Q.jsx)(v,{...t});case`event-email-changed`:return(0,Q.jsx)(ne,{...t});case`event-metafields-changed`:return(0,Q.jsx)(h,{...t});case`event-comment`:return(0,Q.jsx)(l,{...t});case`event-click`:return(0,Q.jsx)(o,{...t});case`event-more-like-this`:return(0,Q.jsx)(_,{...t});case`event-less-like-this`:return(0,Q.jsx)(a,{...t});case`event-gift`:return(0,Q.jsx)(b,{...t});default:return(0,Q.jsx)(s,{...t})}},le=({memberId:e})=>{let{isAdmin7:t}=i(),n=(0,Q.jsx)(`a`,{className:t?void 0:`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 →`});return t?(0,Q.jsx)(y,{className:`mt-3`,variant:`ghost`,asChild:!0,children:n}):n},ue=`All events related to this member will be shown here.`,de=e=>e?e.charAt(0).toUpperCase()+e.slice(1):``;function fe(e){if(e&&typeof e==`object`){let t=e.subject;return t?`“${t}”`:`Email`}}var pe=({event:e})=>{if(!e.action)return null;let t=fe(e.email),n=e.object&&(e.route||G(e.url)),r=!n&&t,i=e.timestamp?(0,O.default)(e.timestamp).fromNow():`—`;return(0,Q.jsxs)(`div`,{className:`flex items-start gap-3 py-3`,"data-testid":`member-activity-event`,children:[(0,Q.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-muted`,children:(0,Q.jsx)($,{iconName:e.icon})}),(0,Q.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:[(0,Q.jsxs)(`div`,{className:`text-sm leading-snug`,children:[(0,Q.jsx)(`span`,{"data-testid":`member-activity-action`,children:de(e.action)}),e.info&&(0,Q.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,e.info,`)`]}),n&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),e.route?(0,Q.jsx)(`a`,{className:`hover:underline`,href:e.route,children:e.object}):(0,Q.jsx)(`a`,{className:`hover:underline`,href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:e.object})]}),r&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:t})]})]}),e.description&&(0,Q.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.description}),(0,Q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i})]})]})},me=({memberId:e,hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})=>{let{settingsQuery:i,activitySettings:a}=Z(),{excludedEvents:o}=X({settings:a,memberId:e,excluded:null}),{data:c,isLoading:l}=w(e??``,{limit:`5`,enabled:!!e&&!i.isLoading,excludedEvents:o}),u=i.isLoading||l,d=(c?.events??[]).map(e=>W(e,{hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})),f=new Set;return e?(0,Q.jsxs)(`section`,{"aria-labelledby":`member-activity-heading`,className:`flex flex-col gap-3`,children:[(0,Q.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-activity-heading`,children:`Activity`}),(0,Q.jsx)(C,{children:(0,Q.jsxs)(S,{className:`pt-3`,children:[u?(0,Q.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Q.jsx)(x,{className:`h-10`}),(0,Q.jsx)(x,{className:`h-10`}),(0,Q.jsx)(x,{className:`h-10`})]}):d.length===0?(0,Q.jsx)(`p`,{className:`py-4 text-center text-sm text-muted-foreground`,"data-testid":`member-activity-empty`,children:`No activity yet`}):(0,Q.jsx)(`div`,{className:`divide-y divide-border`,children:d.map(e=>{let t=e.id||`${e.timestamp??`?`}-${e.icon}-${e.action}`,n=t,r=1;for(;f.has(n);)n=`${t}#${r}`,r+=1;return f.add(n),(0,Q.jsx)(pe,{event:e},n)})}),!u&&d.length>0&&(0,Q.jsx)(le,{memberId:e})]})})]}):(0,Q.jsxs)(`section`,{"aria-labelledby":`member-activity-heading`,className:`flex flex-col gap-3`,children:[(0,Q.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-activity-heading`,children:`Activity`}),(0,Q.jsx)(C,{children:(0,Q.jsx)(S,{className:`pt-6`,children:(0,Q.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,Q.jsx)(ie,{description:ue,title:`Activity`,children:(0,Q.jsx)(s,{})})})})})]})};export{se as a,G as c,X as i,W as l,me as n,J as o,Z as r,ce as s,$ as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,r as t}from"./hooks-DYfTEQLk.js";import{a as n,i as r,n as i,o as a}from"./use-availability-DnKqOyqd.js";var o=`AC.AD.AE.AF.AG.AI.AL.AM.AO.AQ.AR.AS.AT.AU.AW.AX.AZ.BA.BB.BD.BE.BF.BG.BH.BI.BJ.BL.BM.BN.BO.BQ.BR.BS.BT.BV.BW.BY.BZ.CA.CC.CD.CF.CG.CH.CI.CK.CL.CM.CN.CO.CR.CU.CV.CW.CX.CY.CZ.DE.DJ.DK.DM.DO.DZ.EC.EE.EG.EH.ER.ES.ET.FI.FJ.FK.FM.FO.FR.GA.GB.GD.GE.GF.GG.GH.GI.GL.GM.GN.GP.GQ.GR.GS.GT.GU.GW.GY.HK.HM.HN.HR.HT.HU.ID.IE.IL.IM.IN.IO.IQ.IR.IS.IT.JE.JM.JO.JP.KE.KG.KH.KI.KM.KN.KP.KR.KW.KY.KZ.LA.LB.LC.LI.LK.LR.LS.LT.LU.LV.LY.MA.MC.MD.ME.MF.MG.MH.MK.ML.MM.MN.MO.MP.MQ.MR.MS.MT.MU.MV.MW.MX.MY.MZ.NA.NC.NE.NF.NG.NI.NL.NO.NP.NR.NU.NZ.OM.PA.PE.PF.PG.PH.PK.PL.PM.PN.PR.PS.PT.PW.PY.QA.RE.RO.RS.RU.RW.SA.SB.SC.SD.SE.SG.SH.SI.SJ.SK.SL.SM.SN.SO.SR.SS.ST.SV.SX.SY.SZ.TA.TC.TD.TF.TG.TH.TJ.TK.TL.TM.TN.TO.TR.TT.TV.TW.TZ.UA.UG.UM.US.UY.UZ.VA.VC.VE.VG.VI.VN.VU.WF.WS.XK.YE.YT.ZA.ZM.ZW`.split(`.`),s=new Intl.DisplayNames([`en`],{type:`region`}),c=e=>{try{return s.of(e.toUpperCase())??e}catch{return e}},l;function u(e){l??=o.map(e=>({value:e,label:c(e)})).sort((e,t)=>e.label.localeCompare(t.label,`en`));let t=l,n=(typeof e==`string`?[e]:e??[]).filter((e,n,r)=>e&&r.indexOf(e)===n&&!t.some(t=>t.value===e));return n.length===0?l:[...l,...n.map(e=>({value:e,label:c(e)}))]}var d=`metafields`,f=/^[a-z0-9_]+$/;function p({namespace:e,key:t,partPath:n}){let r=`${e}.${t}`;return n?`${r}.${n}`:r}function m(e){let[t,n,...r]=e.split(`.`);return t===void 0||n===void 0||![t,n,...r].every(e=>f.test(e))?null:{namespace:t,key:n,partPath:r.length>0?r.join(`.`):null}}var h=`${d}.`;function g(e){return p({namespace:e.namespace,key:e.key,partPath:null})}function _(e){let t=`${h}${g(e)}`,n=a(e.type);return n?n.map(e=>({column:`${t}.${e}`,subField:e})):[{column:t,subField:null}]}function v(e){return e===`metafields`||e.startsWith(h)}var y={short_text:{label:`Short text`,input:`text`},long_text:{label:`Long text`,input:`textarea`},address:{label:`Address`,input:`address`,subFields:{line1:`Address line 1`,line2:`Address line 2`,city:`City`,state:`State`,postal_code:`Postal code`,country:`Country`}}},b=e=>y[e]?.subFields??{},x=r.map(e=>({id:e,...y[e]})),S=e=>x.find(t=>t.id===e)||x[0],C=e=>S(e.type),w=e=>e.flatMap(e=>{let t=b(e.type);return _({namespace:e.namespace,key:e.key,type:e.type}).map(({column:n,subField:r})=>{let i=r===null?void 0:t[r];return{value:n,fieldName:e.name,...i===void 0?{}:{partLabel:i},label:i===void 0?e.name:`${e.name} (${i})`,type:e.type}})}),T=e=>{let t=a(e),r=n(e);if(!t||!r)return null;let i=b(e);return t.map(e=>({key:e,label:i[e],type:r[e]}))},E=e=>typeof e==`object`&&!!e&&!Array.isArray(e),D={address:[[`state`,`postal_code`]]};function O(e){let t=a(e);if(!t)return[];let n=new Map;(D[e]??[]).forEach((e,t)=>{e.forEach(e=>n.set(e,t))});let r=[],i;for(let e of t){let t=n.get(e);if(t!==void 0&&t===i){r[r.length-1].push(e);continue}r.push([e]),i=t}return r}var k=Object.fromEntries(r.map(e=>[e,O(e)])),A=(e,t)=>{if(a(e)===null)return typeof t==`string`?t:``;if(!E(t))return``;let r=n(e)??{},i=e=>{let n=t[e];return r[e]===`country_code`&&typeof n==`string`?c(n):n};return(k[e]??[]).map(e=>e.map(i).filter(e=>typeof e==`string`&&e!==``).join(` `)).filter(Boolean).join(`, `)},j=e=>i[e].kind,M=`MemberCustomFieldsResponseType`,N=M,P=t({dataType:M,path:`/members/metafields/custom/`,returnData:e=>e.members_metafields}),F=e=>P({...e,searchParams:{filter:`status:[active,archived]`}}),I=e({method:`POST`,path:()=>`/members/metafields/custom/`,body:e=>({members_metafields:[e]}),invalidateQueries:{dataType:M},updateQueries:{dataType:M,emberUpdateType:`skip`,update:(e,t)=>{let n=t;if(!n?.members_metafields)return t;let r=e.members_metafields.filter(e=>!n.members_metafields.some(t=>t.key===e.key));return{...n,members_metafields:[...n.members_metafields,...r]}}}}),L=e({method:`PUT`,path:e=>`/members/metafields/custom/${e.key}/`,body:({key:e,...t})=>({members_metafields:[t]}),invalidateQueries:{dataType:M}}),R=e({method:`PUT`,path:()=>`/members/metafields/custom/`,body:e=>({members_metafields:e.map(({key:e})=>({key:e}))}),updateQueries:{dataType:M,emberUpdateType:`skip`,update:(e,t)=>{let n=t;if(!n?.members_metafields)return t;let r=e.members_metafields.map(({key:e})=>e);return{...n,members_metafields:z(r,n.members_metafields)}}}}),z=(e,t)=>{let n=new Map(e.map((e,t)=>[e,t]));return[...t].sort((e,t)=>(n.get(e.key)??1/0)-(n.get(t.key)??1/0))},B=e({method:`DELETE`,path:e=>`/members/metafields/custom/${e}/`,invalidateQueries:{dataType:M}});export{p as _,T as a,u as b,P as c,B as d,L as f,v as g,S as h,j as i,F as l,C as m,z as n,x as o,R as p,w as r,N as s,A as t,I as u,m as v,c as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e,t}from"./react-BXwhMTuc.js";import{s as n}from"./framework-provider-DB-svAju.js";import{o as r}from"./hooks-DYfTEQLk.js";import{t as i}from"./jsx-runtime-BlNNh7jY.js";import{n as a}from"./dist-DziNzWI2.js";import{i as o}from"./currency-Dy4Tc2R2.js";import{h as s,n as c,u as l}from"./chunk-KS7C4IRE-DhOcHQOU.js";import{a as u}from"./router-provider-DDZvgS3V.js";import{J as d,L as f,c as p}from"./shade-scope-Cccj-c7I-D0XwkdKQ.js";import{t as m}from"./box-LUuYRT-1.js";import{t as h}from"./container-CHHif8km.js";import{i as g}from"./users-C60_hpn6.js";import{r as _}from"./newsletters-Dz77m__5.js";import{Bt as ee,D as te,Kt as v,On as ne,Pn as y,Qt as b,Rn as x,Rt as S,Ut as re,Zt as ie,ft as C,g as ae,jn as oe,nr as se,t as w,vn as T,xt as E,zt as D}from"./button-D414TI3B.js";import{i as O,n as k,o as A,s as j,t as ce}from"./select-D_4xWFYv.js";import{t as le}from"./multi-select-combobox-_9wEYmGv.js";import{t as M}from"./switch-DoOJF2yg.js";import{t as ue}from"./skeleton-CPcTiTSX.js";import{t as de}from"./badge-CI1Z0xyG.js";import{a as fe,i as pe,n as me,o as he,r as ge,t as _e}from"./breadcrumb-DDDpzLyo.js";import{n as N,t as P}from"./card-C2dfd5u0.js";import{i as ve,n as ye,r as be,t as xe}from"./combobox-6_ruuTuj.js";import{t as F}from"./empty-indicator-CSQts7GV.js";import{t as I}from"./label-Du0yqMqL.js";import{n as Se,o as L,t as Ce}from"./input-group-CvH-3d3F.js";import{t as we}from"./textarea-C5qolByg.js";import{An as Te,Br as R,Dn as z,En as B,Fn as Ee,Gn as De,Gr as Oe,Hn as V,Hr as ke,Ir as Ae,Jn as H,Jr as je,Kn as U,Kr as Me,Lr as Ne,Mn as Pe,Nn as Fe,Oi as Ie,On as Le,Pn as Re,Qn as ze,Rr as Be,Si as Ve,Sn as He,Wn as W,Yr as Ue,cr as We,d as Ge,er as Ke,jn as qe,jr as Je,ki as Ye,nr as G,or as Xe,p as Ze,qn as K,vi as Qe,zr as $e}from"./index-DOF2jDq0.js";import{t as q}from"./page-header-CdCpekG9.js";import{t as et}from"./dirty-confirm-dialog-BT_Vq9TD.js";import{a as tt}from"./tiers-6mPzCXlM.js";import{t as J}from"./detail-page-CN4NdhpV.js";import{t as nt}from"./validator-DlFQP70j.js";import{n as rt,t as it}from"./use-unsaved-changes-guard-CKVPWz_F.js";import{n as at}from"./use-availability-DnKqOyqd.js";import{c as ot,n as st}from"./member-activity-feed-0ytsQbtY.js";import{a as ct,b as lt,m as ut,t as dt,y as ft}from"./member-custom-fields-CTFGnnYv.js";import{i as pt,n as mt,r as ht}from"./label-picker-Bq1XXr1D.js";var Y=e(t(),1),gt=new Set([`active`,`trialing`,`unpaid`,`past_due`]);function _t(e){return(e.subscriptions??[]).some(e=>gt.has(e.status))}function vt(e){return e?`Delete member + Cancel subscription`:`Delete member`}var X=i(),yt=({open:e,onOpenChange:t,member:n,allowLeaveWithUnsavedChanges:r})=>{let i=u(),o=Ae(),[s,c]=Y.useState(!1);Y.useEffect(()=>{e&&c(!1)},[e]);let l=_t(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)(V,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,X.jsxs)(W,{"data-testid":`delete-member-modal`,children:[(0,X.jsxs)(K,{children:[(0,X.jsx)(H,{children:`Delete member account`}),(0,X.jsxs)(De,{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)(M,{"aria-label":`Also cancel subscription in Stripe`,checked:s,"data-testid":`delete-member-cancel-stripe`,disabled:o.isPending,onCheckedChange:c})]}),(0,X.jsxs)(U,{children:[(0,X.jsx)(w,{"data-testid":`cancel-delete-member`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(w,{"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)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Deleting`})]}):vt(s&&l)})]})]})})},bt=`Disabled from member settings`,xt=({open:e,onOpenChange:t,member:n})=>{let r=Ne(),[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:bt,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)(V,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(W,{"data-testid":`disable-commenting-modal`,children:[(0,X.jsxs)(K,{children:[(0,X.jsx)(H,{children:`Disable commenting`}),(0,X.jsxs)(De,{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)(M,{"aria-label":`Hide all previous comments`,checked:i,"data-testid":`disable-commenting-hide-comments`,disabled:r.isPending,onCheckedChange:o})]}),(0,X.jsxs)(U,{children:[(0,X.jsx)(w,{"data-testid":`cancel-disable-commenting`,disabled:r.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(w,{"data-testid":`confirm-disable-commenting`,disabled:r.isPending,onClick:()=>void c(),children:r.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Disabling`})]}):`Disable commenting`})]})]})})},St=({open:e,onOpenChange:t,memberId:r})=>{let i=n();Y.useEffect(()=>{e&&i.removeQueries({queryKey:[`MemberSigninUrlResponseType`]})},[e,i]);let{data:o,isFetching:s,isError:c}=Me(r,{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)(V,{open:e,onOpenChange:t,children:(0,X.jsxs)(W,{"data-testid":`impersonate-modal`,children:[(0,X.jsxs)(K,{children:[(0,X.jsx)(H,{children:`Impersonate member`}),(0,X.jsx)(De,{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)(I,{htmlFor:`member-signin-url`,children:`Signin link`}),(0,X.jsx)(z,{"data-testid":`member-signin-url`,id:`member-signin-url`,value:s?`Generating link…`:u?`Failed to generate link`:l,readOnly:!0})]}),(0,X.jsxs)(U,{children:[(0,X.jsx)(w,{variant:`outline`,onClick:()=>t(!1),children:`Close`}),(0,X.jsx)(w,{disabled:s||u||!l,onClick:()=>void h(),children:s?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Generating link`})]}):d?`Copied`:`Copy link`})]})]})})},Ct=({open:e,onOpenChange:t,member:n})=>{let r=Oe(),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)(Le,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(qe,{"data-testid":`logout-member-modal`,children:[(0,X.jsxs)(Re,{children:[(0,X.jsx)(Ee,{children:`Sign out member from all devices?`}),(0,X.jsxs)(Pe,{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)(Fe,{children:[(0,X.jsx)(Te,{disabled:r.isPending,children:`Cancel`}),(0,X.jsx)(w,{"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)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Signing out`})]}):`Sign out`})]})]})})};function wt(e){return e.can_comment===!1}function Tt(e){return wt(e)?`Enable commenting`:`Disable commenting`}var Et=({member:e,allowLeaveWithUnsavedChanges:t})=>{let{isAdmin7:n}=p(),{data:i}=r(),[o,s]=Y.useState(!1),[c,l]=Y.useState(!1),[u,d]=Y.useState(!1),[f,m]=Y.useState(!1),h=R(),_=je(),v=h.isPending||h.isSuccess&&_,ne=wt(e),x=Tt(e),S=e.name||e.email||`this member`;if(!i||!g(i))return null;let re=async()=>{if(!ne){d(!0);return}try{await h.mutateAsync({id:e.id}),a.success(`Commenting has been enabled for ${S}.`)}catch{a.error(`Couldn’t enable commenting. Please try again.`)}};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(We,{asChild:!0,children:(0,X.jsx)(w,{"aria-label":`Actions`,className:`size-(--control-height)`,"data-testid":`member-actions`,size:`icon`,variant:`subtle`,children:(0,X.jsx)(y,{size:16})})}),(0,X.jsxs)(Ke,{align:`end`,children:[(0,X.jsxs)(G,{"data-testid":`member-actions-impersonate`,onSelect:()=>s(!0),children:[n&&(0,X.jsx)(b,{"aria-hidden":`true`}),`Impersonate`]}),(0,X.jsxs)(G,{"data-testid":`member-actions-logout`,onSelect:()=>l(!0),children:[n&&(0,X.jsx)(ie,{"aria-hidden":`true`}),`Sign out of all devices`]}),(0,X.jsxs)(G,{"data-testid":`member-actions-commenting`,disabled:v,onSelect:()=>void re(),children:[n&&(ne?(0,X.jsx)(D,{"aria-hidden":`true`}):(0,X.jsx)(ee,{"aria-hidden":`true`})),x]}),(0,X.jsx)(Xe,{}),(0,X.jsxs)(G,{className:`text-destructive focus:text-destructive`,"data-testid":`member-actions-delete`,onSelect:()=>m(!0),children:[n&&(0,X.jsx)(te,{"aria-hidden":`true`}),`Delete member`]})]})]}),(0,X.jsx)(St,{memberId:e.id,open:o,onOpenChange:s}),(0,X.jsx)(Ct,{member:e,open:c,onOpenChange:l}),(0,X.jsx)(xt,{member:e,open:u,onOpenChange:d}),(0,X.jsx)(yt,{allowLeaveWithUnsavedChanges:t,member:e,open:f,onOpenChange:m})]})},Z=e(d(),1),Dt=e(nt(),1),Ot=ct(`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 kt(e){let t={};for(let[n,r]of Object.entries(e??{}))for(let[e,i]of Object.entries(r??{}))t[`${n}.${e}`]=i;let n={};for(let[e,r]of Object.entries(t))if(typeof r==`string`&&r.trim()!==``)n[e]=r.trim();else if(typeof r==`object`&&r&&!Array.isArray(r)){let t=jt(r);t&&(n[e]=t)}return n}function At(e){let t={};for(let{key:n}of Ot){let r=e[n];typeof r==`string`&&(t[n]=r.trim())}return Object.values(t).some(e=>e!==``)?t:void 0}function jt(e){let t={};for(let{key:n}of Ot){let r=e[n];typeof r==`string`&&r.trim()!==``&&(t[n]=r.trim())}return Object.keys(t).length?t:void 0}function Mt(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t].sort()}function Nt(e,t){let n=e.trim();return t!==void 0&&n===t.trim()?!0:Dt.default.isEmail(n)}function Pt(e,t,n){return t?e.trim()===``?`Email is required.`:Nt(e,n)?null:`Invalid email.`:null}function Ft(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 It(e){return e?e.filter(e=>e.subscribe_on_signup===!0&&e.visibility===`members`).map(e=>e.id):[]}function Lt(e){return 500-[...e].length}function Rt(e,t,n){let r=Wt(t),i={id:e,name:r.name,email:r.email,note:r.note,labels:r.labels};return rt(r.newsletters,n.newsletters)||(i.newsletters=r.newsletters.map(e=>({id:e}))),i}function zt(e){return typeof e==`string`?e.trim()||void 0:At(e)}function Bt(e,t,n){return{id:e,metafields:{[t.namespace]:{[t.key]:zt(n)??null}}}}function Vt(e,t){let n={};for(let r of t){let t=e[r.key],i=t===void 0?void 0:zt(t);if(i===void 0)continue;let a=at[r.type];if(!a)continue;let o=a.value.safeParse(i);if(!o.success)for(let e of o.error.issues){let t=[r.namespace,r.key,...e.path].join(`.`);n[t]??=e.message}}return n}function Ht(e){let t=e?.data,n={};for(let e of t?.errors??[])e.property?.startsWith(`metafields.`)&&(n[e.property.slice(11)]=e.context||e.message||`Invalid value.`);return Object.keys(n).length?n:void 0}function Ut(e,t){return e.map(e=>t.get(e)??{name:e,slug:e})}function Wt(e){return{name:e.name.trim(),email:e.email.trim(),note:e.note,labels:e.labels,newsletters:e.newsletters}}function Gt(e,t){return!e||!!t&&rt(Wt(e),t)}var Kt=({message:e})=>e?(0,X.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:e}):null,qt=({id:e,label:t,value:n,invalid:r,disabled:i,onChange:a})=>{let[o,s]=Y.useState(!1);return(0,X.jsxs)(xe,{open:o,modal:!0,onOpenChange:s,children:[(0,X.jsx)(be,{"aria-invalid":r||void 0,"aria-label":t,disabled:i,id:e,children:(0,X.jsx)(ve,{placeholder:!n,children:n?ft(n):`Select...`})}),(0,X.jsx)(ye,{children:(0,X.jsx)(le,{i18n:{searchPlaceholder:`Search countries...`},isMultiSelect:!1,options:lt(n),values:n?[n]:[],autoCloseOnSelect:!0,onChange:e=>a(e[0]??``),onClose:()=>s(!1)})})]})},Jt=({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:Ot.map(({key:a,label:o,type:s})=>{let c=`${e}-${a}`,l=n?.[a];return(0,X.jsxs)(`div`,{className:f(`flex flex-col gap-1.5`,(a===`line1`||a===`line2`)&&`md:col-span-2`),children:[(0,X.jsx)(I,{htmlFor:c,children:o}),s===`country_code`?(0,X.jsx)(qt,{disabled:r,id:c,invalid:!!l,label:o,value:t[a],onChange:e=>i({...t,[a]:e})}):(0,X.jsx)(z,{"aria-invalid":l?!0:void 0,disabled:r,id:c,value:t[a]??``,onChange:e=>i({...t,[a]:e.target.value})}),(0,X.jsx)(Kt,{message:l})]},a)})});function Yt(e){return null}var Xt=({field:e,inputId:t,value:n,errors:r,disabled:i,onChange:a})=>{let o=r?.[``],{input:s}=ut(e);switch(s){case`text`:return(0,X.jsx)(z,{"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)(we,{"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)(Jt,{disabled:i,errors:r,inputId:t,value:typeof n==`object`&&n?n:{},onChange:a});default:return Yt(s)}},Zt=({memberId:e,field:t,initialValue:n,onClose:r})=>{let i=ut(t).input===`address`,[o,s]=Y.useState(n??(i?{}:``)),[c,l]=Y.useState(!1),[u,d]=Y.useState(),f=Be(),p=Vt({[t.key]:o},[t]),m={...c?p:{},...u},h=Object.fromEntries(Object.entries(m).map(([e,n])=>[e===`${t.namespace}.${t.key}`?``:e.slice(`${t.namespace}.${t.key}`.length+1),n])),g=`member-custom-field-${t.key}`,_=!rt(kt({[t.namespace]:{[t.key]:o}}),kt({[t.namespace]:{[t.key]:n}}));return(0,X.jsx)(V,{open:!0,onOpenChange:e=>{!e&&!f.isPending&&r()},children:(0,X.jsxs)(W,{"data-testid":`member-custom-field-edit-modal`,onEscapeKeyDown:e=>{(_||f.isPending)&&e.preventDefault()},onInteractOutside:e=>{(_||f.isPending)&&e.preventDefault()},children:[(0,X.jsx)(K,{children:(0,X.jsx)(H,{children:t.name})}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[!i&&(0,X.jsx)(I,{className:`sr-only`,htmlFor:g,children:t.name}),(0,X.jsx)(Xt,{disabled:f.isPending,errors:h,field:t,inputId:g,value:o,onChange:e=>{d(void 0),s(e)}}),(0,X.jsx)(Kt,{message:h[``]})]}),(0,X.jsxs)(U,{children:[(0,X.jsx)(w,{disabled:f.isPending,variant:`outline`,onClick:r,children:`Cancel`}),(0,X.jsx)(w,{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(Bt(e,t,o),{onSuccess:()=>{a.success(`${t.name} saved`),r()},onError:e=>{let n=Ht(e);d(n),n||a.error(`${t.name} couldn’t be saved`)}})}},children:f.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):`Save`})]})]})})},Qt=({memberId:e,metafields:t,disabled:n})=>{let{data:r,isLoading:i}=pt(),a=r??[],o=kt(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)(P,{children:(0,X.jsx)(N,{className:`px-6 py-4`,children:(0,X.jsx)(`ul`,{children:a.map(e=>{let t=dt(e.type,o[`${e.namespace}.${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)(Zt,{field:s,initialValue:o[`${s.namespace}.${s.key}`],memberId:e,onClose:()=>c(null)},s.key)]})},$t=({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=mt({selectedSlugs:r,onSelectionChange:e=>n(Ut(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)(ht,{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})})},en=({draft:e,emailError:t,disabled:n,onChange:r,onEmailBlur:i,onNameBlur:a})=>{let o=Lt(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)(I,{htmlFor:`member-name`,children:`Name`}),(0,X.jsx)(z,{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)(I,{htmlFor:`member-email`,children:`Email`}),(0,X.jsx)(z,{"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)(I,{children:`Labels`}),(0,X.jsx)($t,{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)(I,{htmlFor:`member-note`,children:[`Note `,(0,X.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(not visible to member)`})]}),(0,X.jsxs)(Ce,{className:`flex-1`,children:[(0,X.jsx)(L,{className:`h-full`,disabled:n,id:`member-note`,value:e.note,onChange:e=>r({note:e.target.value})}),(0,X.jsx)(Se,{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:f(`font-semibold`,c),children:s})]})})]})]})]})};function tn(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 nn(e){let t=tn(e);return t?t.country_code===`US`&&t.region?`${t.region}, US`:t.country||`Unknown location`:`Unknown location`}function rn(e){let t=e?.referrer_source;return!t||t===`Created manually`?null:t}var an=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})]}),on=e=>e.split(` `)[0]||``,sn=({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)(He,{className:`size-12 min-w-12 [&_span]:text-lg`,...Ze({name:i,email:a}),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)(re,{size:16}),children:(0,X.jsx)(`span`,{"data-testid":`member-detail-location`,children:nn(e.geolocation)})}),(0,X.jsx)($,{icon:(0,X.jsx)(oe,{size:16}),children:e.last_seen_at?`Last seen on ${an(e.last_seen_at)}`:`Not seen yet`}),e.can_comment===!1&&(0,X.jsx)($,{icon:(0,X.jsx)(S,{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)(ae,{size:16}),children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:an(e.created_at)})]}),(()=>{let t=rn(e.attribution);return t?(0,X.jsxs)($,{icon:(0,X.jsx)(T,{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)(ne,{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 ${on(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:`%`})]})]})]})]})]})]})},cn=({memberId:e,emailSuppression:t,subscribedIds:n,disabled:r,onChange:i})=>{let o=e?Ft(t):null,s=Ue(),{data:c,isLoading:l}=_({searchParams:{filter:`status:active`,limit:`50`}}),u=c?.newsletters??[],d=je(),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)(P,{children:(0,X.jsx)(N,{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)(v,{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)(w,{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)(B,{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)(M,{"aria-label":`Subscribe to ${e.name}`,checked:t,"data-testid":`member-subscription-toggle`,disabled:r,onCheckedChange:()=>i(Mt(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`]})]})})})]})},ln=`complimentary`,un=`gift subscription`;function dn(e){if(e.id)return`paid`;let t=e.plan?.nickname?.toLowerCase()??``;return t===ln?`complimentary`:t===un?`gift`:`paid`}function fn(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 mn(e){return e.status===`canceled`||e.cancel_at_period_end?`Canceled`:`Active`}var hn=e=>e?(0,Z.default)(new Date(e)).format(`D MMM YYYY`):``,gn=e=>e?(0,Z.default)(e).utc().format(`D MMM YYYY`):``;function _n(e){let t=dn(e);if(t===`complimentary`||t===`gift`){let t=gn(e.tier?.expiry_at);return t?`Expires ${t}`:``}let n=e.status===`canceled`&&!e.cancel_at_period_end?``:hn(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 ${hn(e.trial_end_at)}`:n?`Renews ${n}`:``}function vn(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 yn=[`forever`,`week`,`month`,`half-year`,`year`,`custom`];function bn(e){return yn.includes(e)}function xn(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 Sn=new Set([`active`,`trialing`,`unpaid`,`past_due`]),Cn=[{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`}],wn=({open:e,onOpenChange:t,member:n})=>{let{data:r,isLoading:i}=tt({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=$e(),m=Be(),[h,g]=Y.useState(!1),_=(n.subscriptions??[]).filter(e=>dn(e)===`paid`&&Sn.has(e.status)),ee=(0,Z.default)().format(`YYYY-MM-DD`),te=!!s&&!h&&(l!==`custom`||!!d),v=async()=>{if(te){g(!0);try{for(let e of _)await p.mutateAsync({memberId:n.id,subscriptionId:e.id,status:`canceled`});let e=xn(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)(V,{open:e,onOpenChange:e=>{h||t(e)},children:(0,X.jsxs)(W,{"data-testid":`add-comp-modal`,children:[(0,X.jsxs)(K,{children:[(0,X.jsx)(H,{children:`Add complimentary subscription`}),(0,X.jsx)(De,{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)(I,{htmlFor:`comp-tier`,children:`Tier`}),(0,X.jsxs)(ce,{value:s,onValueChange:c,children:[(0,X.jsx)(A,{"data-testid":`comp-tier-select`,disabled:i||h,id:`comp-tier`,children:(0,X.jsx)(j,{placeholder:i?`Loading tiers…`:`Select a tier`})}),(0,X.jsx)(k,{children:o.map(e=>(0,X.jsx)(O,{"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)(I,{htmlFor:`comp-duration`,children:`Duration`}),(0,X.jsxs)(ce,{value:l,onValueChange:e=>{bn(e)&&u(e)},children:[(0,X.jsx)(A,{"data-testid":`comp-duration-select`,disabled:h,id:`comp-duration`,children:(0,X.jsx)(j,{})}),(0,X.jsx)(k,{children:Cn.map(e=>(0,X.jsx)(O,{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)(I,{htmlFor:`comp-custom-date`,children:`Expires on`}),(0,X.jsx)(z,{"data-testid":`comp-custom-date`,disabled:h,id:`comp-custom-date`,min:ee,type:`date`,value:d,onChange:e=>f(e.target.value)})]})]}),(0,X.jsxs)(U,{children:[(0,X.jsx)(w,{disabled:h,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(w,{"data-testid":`comp-add-confirm`,disabled:!te,onClick:()=>void v(),children:h?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Adding`})]}):`Add subscription`})]})]})})},Tn=({memberId:e,subscription:t})=>{let{isAdmin7:n}=p(),r=$e(),i=je(),o=r.isPending||r.isSuccess&&i,s=t.status===`canceled`,c=t.cancel_at_period_end,l=(n,i,o)=>{r.mutate({memberId:e,subscriptionId:t.id,cancelAtPeriodEnd:n},{onSuccess:()=>a.success(i),onError:()=>a.error(o)})};return(0,X.jsxs)(ze,{children:[(0,X.jsx)(We,{asChild:!0,children:(0,X.jsx)(w,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:o,size:n?`icon`:`sm`,variant:`subtle`,children:o?(0,X.jsx)(B,{size:`sm`}):(0,X.jsx)(y,{})})}),(0,X.jsxs)(Ke,{align:`end`,children:[(0,X.jsx)(G,{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)(Xe,{}),(0,X.jsx)(G,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/subscriptions/${t.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe subscription`})}),!s&&(c?(0,X.jsx)(G,{"data-testid":`continue-subscription`,onSelect:()=>l(!1,`Subscription continued`,`Couldn’t continue subscription`),children:`Continue subscription`}):(0,X.jsx)(G,{className:`text-destructive focus:text-destructive`,"data-testid":`cancel-subscription`,onSelect:()=>l(!0,`Subscription canceled`,`Couldn’t cancel subscription`),children:`Cancel subscription`}))]})]})},En=({member:e,tierId:t})=>{let{isAdmin7:n}=p(),r=Be(),[i,o]=Y.useState(!1),s=je(),c=r.isPending||r.isSuccess&&s;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(We,{asChild:!0,children:(0,X.jsx)(w,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:c,size:n?`icon`:`sm`,variant:`subtle`,children:c?(0,X.jsx)(B,{size:`sm`}):(0,X.jsx)(y,{})})}),(0,X.jsx)(Ke,{align:`end`,children:(0,X.jsx)(G,{className:`text-destructive focus:text-destructive`,"data-testid":`remove-complimentary`,onSelect:()=>o(!0),children:`Remove complimentary subscription`})})]}),(0,X.jsx)(Le,{open:i,onOpenChange:e=>{r.isPending||o(e)},children:(0,X.jsxs)(qe,{children:[(0,X.jsxs)(Re,{children:[(0,X.jsx)(Ee,{children:`Remove complimentary subscription?`}),(0,X.jsx)(Pe,{children:`The member will lose access to this tier immediately.`})]}),(0,X.jsxs)(Fe,{children:[(0,X.jsx)(Te,{disabled:r.isPending,children:`Cancel`}),(0,X.jsx)(w,{"data-testid":`confirm-remove-complimentary`,disabled:r.isPending,variant:`destructive`,onClick:()=>{let n=(e.tiers??[]).filter(e=>e.id!==t).map(e=>({id:e.id,expiry_at:e.expiry_at??null}));r.mutate({id:e.id,email:e.email,tiers:n},{onSuccess:()=>{a.success(`Complimentary subscription removed`),o(!1)},onError:()=>a.error(`Couldn’t remove complimentary subscription`)})},children:r.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Removing`})]}):`Remove`})]})]})})]})},Dn=e=>{let t=e/100;return t.toLocaleString(void 0,t%1==0?void 0:{minimumFractionDigits:2,maximumFractionDigits:2})},On=({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=Dn(e.price.amount),i=fn(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})]})},kn=e=>e?Z.default.utc(e).format(`D MMM YYYY`):``,An=({sub:e})=>{let t=kn(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 —`,` `,ot(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})]})]})},jn=({member:e,sub:t,showDivider:n})=>{let[r,i]=Y.useState(!1),a=dn(t),o=mn(t),s=_n(t),c=pn(t);return(0,X.jsxs)(`div`,{className:f(`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)(On,{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)(de,{"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)(se,{className:f(`transition-transform`,r&&`rotate-180`),size:14})]}),r&&(0,X.jsx)(An,{sub:t})]})]}),a===`paid`&&(0,X.jsx)(Tn,{memberId:e.id,subscription:t}),a===`complimentary`&&t.tier?.id&&(0,X.jsx)(En,{member:e,tierId:t.tier.id})]})},Mn=({member:e,canAddComp:t})=>{let[n,r]=Y.useState(!1);if(!e)return(0,X.jsx)(P,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(N,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(F,{title:`No subscriptions`,children:(0,X.jsx)(x,{})})})})});let i=vn(e.subscriptions??[]),a=i.length>0,o=t&&(e.tiers?.length??0)===0,s=o?(0,X.jsxs)(w,{"data-testid":`add-complimentary`,variant:`outline`,onClick:()=>r(!0),children:[(0,X.jsx)(C,{className:`mr-1`,size:16}),`Add complimentary subscription`]}):null;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(P,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(N,{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)(jn,{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)(F,{title:`No subscriptions`,children:(0,X.jsx)(x,{})}),s]})})}),o&&(0,X.jsx)(wn,{member:e,open:n,onOpenChange:r})]})};function Nn(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 Pn=`new`,Fn=({paidMembersEnabled:e,newslettersUiEnabled:t,engagementEnabled:n})=>{let{member_id:r=``}=s(),i=l(),o=u(),d=Nn(i.search),f=r===Pn,{data:p,isLoading:g,error:ee,refetch:te}=ke(r,{enabled:!!r&&!f,searchParams:{include:`tiers`},defaultErrorHandler:!1}),v=p?.members?.[0],ne=!f&&!g&&!!ee,y=!f&&!g&&!ee&&!v,b=Be(),x=Je(),S=f?x:b,{data:re}=tt({searchParams:{filter:`type:paid+active:true`,limit:`all`},enabled:e}),ie=(re?.tiers?.length??0)>0,{data:C}=_({searchParams:{filter:`status:active`,limit:`50`}}),ae=C!==void 0,oe=(C?.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!==Pn){D.current=Pn,k.current=!1;let e=Q({});O.current=e,E(e)}return}if(!v)return;let e=Q(v);if(D.current!==v.id){D.current=v.id,O.current=e,E(e);return}let t=O.current;O.current=e,E(n=>Gt(n,t)?e:n)},[v,f]),Y.useEffect(()=>{if(!f||k.current||!C?.newsletters)return;k.current=!0;let e=It(C.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,C]);let A=f?O.current:v?Q(v):void 0,j=!!T&&!!A&&!rt(Wt(T),A),{dialogProps:ce,bypassNextNavigation:le}=it({when:j,confirmUnloadWhen:S.isPending||j}),M=!!T&&Nt(T.email,v?.email??void 0),[de,ve]=Y.useState(!1);Y.useEffect(()=>{ve(!1)},[v?.id,f]);let ye=T?Pt(T.email,de,v?.email??void 0):null,[be,xe]=Y.useState({name:``,email:``});Y.useEffect(()=>{if(f){xe({name:``,email:``});return}v&&xe({name:v.name??``,email:v.email??``})},[v?.id,v?.name,v?.email,f]);let F=()=>{T&&xe({name:T.name,email:T.email})},I=e=>{S.isError&&S.reset(),E(t=>t&&{...t,...e})},Se=()=>{if(!(!T||!j||!M||S.isPending)){if(F(),f){x.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}le(),a.success(`Member created`),o(`/members/${t.id}`,{replace:!0})},onError:()=>{a.error(`Member couldn’t be created`)}});return}!v||D.current!==v.id||b.mutate(Rt(v.id,T,Q(v)),{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`)}})}},L=`Save`,Ce=`default`,we=!0;S.isPending?L=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):j?(L=S.isError?`Retry`:`Save`,Ce=S.isError?`destructive`:`default`,we=!M):!f&&b.isSuccess&&(L=`Saved`);let Te=!!T&&(f||!!v),R=`Member`;return f?R=`New member`:v?R=Ge(v):y&&(R=`Member not found`),(0,X.jsx)(m,{className:`size-full`,children:(0,X.jsx)(h,{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)(q,{blurredBackground:!1,sticky:!1,children:[(0,X.jsx)(q.Left,{children:(0,X.jsx)(_e,{children:(0,X.jsxs)(pe,{children:[(0,X.jsx)(me,{children:(0,X.jsx)(ge,{asChild:!0,children:(0,X.jsx)(c,{"data-test-link":`members-back`,to:d,children:`Members`})})}),(0,X.jsx)(he,{}),(0,X.jsx)(me,{children:!f&&g?(0,X.jsx)(ue,{className:`h-4 w-40`}):(0,X.jsx)(fe,{className:`truncate`,"data-testid":`member-detail-title`,children:R})})]})})}),(f||v)&&(0,X.jsx)(q.Actions,{children:(0,X.jsxs)(q.ActionGroup,{children:[v&&!f&&(0,X.jsx)(Et,{allowLeaveWithUnsavedChanges:le,member:v},v.id),(0,X.jsx)(q.ActionGroup.Primary,{children:(0,X.jsx)(w,{className:`min-w-16`,disabled:we,variant:Ce,onClick:Se,children:L})})]})})]})}),(0,X.jsxs)(J.Body,{children:[ne&&(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)(w,{variant:`outline`,onClick:()=>void te(),children:`Retry`})]}),y&&(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.`})}),Te&&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)(sn,{draftEmail:be.email,draftName:be.name,engagementEnabled:n,member:v}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-8`,children:[(0,X.jsx)(P,{children:(0,X.jsx)(N,{className:`p-6`,children:(0,X.jsx)(en,{disabled:S.isPending,draft:T,emailError:ye,onChange:I,onEmailBlur:()=>{ve(!0),F()},onNameBlur:F})})}),v&&(0,X.jsx)(Qt,{disabled:S.isPending,memberId:v.id,metafields:v.metafields}),t&&(f||v)&&(0,X.jsx)(cn,{disabled:S.isPending,emailSuppression:v?.email_suppression,memberId:v?.id,subscribedIds:T.newsletters,onChange:e=>I({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)(Mn,{canAddComp:ie,member:v})]}),(f||v&&ae)&&(0,X.jsx)(st,{hasMultipleNewsletters:oe,hasMultipleTiers:se,memberId:v?.id,paidMembersEnabled:e})]})]})]}),(0,X.jsx)(et,{...ce})]})})})},In=()=>{let{data:e,isLoading:t}=Ve({}),n=Ye(),r=Ie();if(t||!e?.settings)return(0,X.jsx)(m,{className:`size-full`,children:(0,X.jsx)(h,{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)(B,{size:`lg`})})})})})});let i=Qe(e.settings,`members_signup_access`);return(0,X.jsx)(Fn,{engagementEnabled:i!==`none`&&r===!0,newslettersUiEnabled:r===!0,paidMembersEnabled:n===!0})};export{In as default};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{s as e,t}from"./react-BXwhMTuc.js";import{_ as n}from"./framework-provider-DB-svAju.js";import{E as r,T as i,_ as a,g as o,m as s,o as c,p as l,u,y as d}from"./hooks-DYfTEQLk.js";import{t as f}from"./jsx-runtime-BlNNh7jY.js";import{n as p}from"./dist-DziNzWI2.js";import{n as m}from"./offers-ByWSK0rR.js";import{s as h}from"./config-BPljH6wF.js";import{_ as g,n as _,u as v}from"./chunk-KS7C4IRE-DhOcHQOU.js";import{a as y}from"./router-provider-DDZvgS3V.js";import{H as b,J as x,L as S,U as C,c as w}from"./shade-scope-Cccj-c7I-D0XwkdKQ.js";import{t as T}from"./box-LUuYRT-1.js";import{t as E}from"./container-CHHif8km.js";import{m as D}from"./users-C60_hpn6.js";import{_ as O,c as k,d as A,f as j,g as M,l as N,m as P,r as F,u as ee}from"./schemas-BoYdB6YU.js";import{r as te}from"./newsletters-Dz77m__5.js";import{B as I,C as L,D as ne,F as R,Fn as re,Gt as z,I as ie,Kt as ae,Nr as oe,O as B,Pn as se,Rn as ce,S as le,V,a as ue,er as de,et as H,ft as fe,g as U,l as pe,nr as me,nt as he,t as W,tr as ge,u as _e,ur as ve,v as ye,yn as be}from"./button-D414TI3B.js";import{n as xe}from"./input-surface-CL23Mlh8.js";import{i as Se,n as Ce,o as we,s as Te,t as Ee}from"./select-D_4xWFYv.js";import{a as De,i as Oe,l as ke,n as Ae,o as je,r as Me,s as Ne,t as Pe}from"./command-B5wfm6pd.js";import{t as Fe}from"./dropzone-B2auMkf2.js";import{t as Ie}from"./badge-CI1Z0xyG.js";import{t as Le}from"./checkbox-CFFqf0Nh.js";import{t as Re}from"./empty-indicator-CSQts7GV.js";import{a as ze,i as Be,o as Ve,t as He}from"./field-BXEh3ptU.js";import{i as Ue,n as We,t as Ge}from"./input-group-CvH-3d3F.js";import{a as G,c as K,n as Ke,r as q,s as qe,t as Je}from"./table-BDYbUHJz.js";import{An as Ye,Bn as Xe,Di as Ze,Dn as Qe,Ei as $e,En as et,Fn as tt,Fr as nt,Gn as rt,Hn as it,Jn as at,K as ot,Kn as J,Ln as st,Mn as ct,Mr as lt,Nn as ut,Nr as dt,Oi as ft,On as pt,Pn as mt,Pr as ht,Qn as gt,Si as _t,Sn as vt,Ti as yt,Vn as bt,Vr as xt,Wn as St,Zr as Ct,_i as wt,cr as Tt,er as Et,gi as Dt,jn as Ot,jr as kt,ki as At,kr as jt,l as Mt,m as Nt,nr as Pt,o as Ft,or as It,p as Lt,qn as Rt,s as zt,u as Bt,vi as Vt,wi as Ht,xn as Ut}from"./index-DOF2jDq0.js";import{t as Y}from"./page-header-CdCpekG9.js";import{a as Wt,i as Gt,n as Kt,r as qt,s as Jt}from"./filters-DTtZKQyq.js";import{n as Yt}from"./dirty-confirm-dialog-BT_Vq9TD.js";import{t as Xt}from"./get-site-timezone-HgL0jI_F.js";import{t as Zt}from"./list-page-CH_wnDC3.js";import{t as Qt}from"./validator-DlFQP70j.js";import{A as $t,C as en,D as tn,E as nn,M as rn,N as an,O as on,S as sn,T as cn,_ as ln,a as un,b as dn,c as fn,d as pn,f as mn,g as hn,h as gn,i as _n,j as vn,k as yn,l as bn,m as xn,n as Sn,o as Cn,p as wn,r as Tn,s as En,t as Dn,u as On,v as kn,w as An,x as jn}from"./filters-0SYNTqyQ.js";import{a as Mn,i as Nn,n as Pn,t as Fn}from"./filter-sources-DHK2IoCk.js";import{i as In,n as Ln,r as Rn,t as zn}from"./virtual-list-tAuPUICw.js";import{t as Bn}from"./use-availability-DnKqOyqd.js";import{_ as Vn,a as Hn,b as Un,g as Wn,i as Gn,o as Kn,r as qn,t as Jn,u as Yn,v as Xn}from"./member-custom-fields-CTFGnnYv.js";import{a as Zn,i as Qn,n as $n,r as er,t as tr}from"./label-picker-Bq1XXr1D.js";import{t as nr}from"./papaparse.min-BlhnCUXn.js";import{n as rr,t as ir}from"./custom-field-type-option-DrSlETOI.js";var X=e(t(),1),Z=f();function ar({open:e,memberCount:t,onOpenChange:n,onConfirm:r,isLoading:i=!1}){let[a,o]=(0,X.useState)([]),s=$n({selectedSlugs:a,onSelectionChange:o}),c=(0,X.useCallback)(e=>{e||o([]),n(e)},[n]);return(0,Z.jsx)(it,{open:e,onOpenChange:c,children:(0,Z.jsxs)(St,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Z.jsx)(Rt,{children:(0,Z.jsxs)(at,{children:[`Add label to `,b(t),` `,t===1?`member`:`members`]})}),(0,Z.jsx)(er,{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,Z.jsxs)(J,{children:[(0,Z.jsx)(W,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Z.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 ${b(a.length)} labels`:`Add label`})]})]})})}function or({open:e,memberCount:t,nql:n,search:r,onOpenChange:i,onConfirm:a,isLoading:o=!1}){let[s,c]=(0,X.useState)([]),{data:l,isLoading:u}=lt({searchParams:{...n?{filter:n}:{},...r?{search:r}:{},include:`labels`,limit:`all`,fields:`id`},enabled:e}),d=(0,X.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=$n({selectedSlugs:s,onSelectionChange:c}),p={...f.optionSource,options:f.optionSource.options.filter(e=>d.has(String(e.value)))},m=(0,X.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,Z.jsx)(it,{open:e,onOpenChange:m,children:(0,Z.jsxs)(St,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Z.jsx)(Rt,{children:(0,Z.jsxs)(at,{children:[`Remove label from `,b(t),` `,t===1?`member`:`members`]})}),(0,Z.jsx)(er,{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,Z.jsxs)(J,{children:[(0,Z.jsx)(W,{variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Z.jsx)(W,{disabled:s.length===0||o,onClick:h,children:o?`Removing...`:s.length>1?`Remove ${b(s.length)} labels`:`Remove label`})]})]})})}function sr({open:e,newsletters:t,memberCount:n,onOpenChange:r,onConfirm:i,isLoading:a=!1}){let[o,s]=(0,X.useState)(`all`),[c,l]=(0,X.useState)([]),[u,d]=(0,X.useState)(``),[f,p]=(0,X.useState)(!1),m=(0,X.useRef)(null),h=(0,X.useRef)(null);(0,X.useEffect)(()=>{e||(s(`all`),l([]),d(``),p(!1))},[e]),(0,X.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,X.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)},x=a||v&&o===`selected`&&c.length===0,S=n===1?`member`:`members`;return(0,Z.jsx)(it,{open:e,onOpenChange:g,children:(0,Z.jsxs)(St,{className:`gap-5`,children:[(0,Z.jsx)(Rt,{children:(0,Z.jsx)(at,{children:`Unsubscribe members`})}),v?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{"aria-label":`Unsubscribe scope`,className:`flex flex-col gap-3`,role:`radiogroup`,children:[(0,Z.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3`,children:[(0,Z.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,Z.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Z.jsx)(`span`,{className:`text-sm font-semibold`,children:`Unsubscribe from all newsletters`}),(0,Z.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[b(n),` `,S,` will be unsubscribed from`,` `,t.length,` `,t.length===1?`newsletter`:`newsletters`,`.`]})]})]}),(0,Z.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3`,children:[(0,Z.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,Z.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Z.jsx)(`span`,{className:`text-sm font-semibold`,children:`Unsubscribe from selected newsletters`}),(0,Z.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Select which newsletters to unsubscribe `,b(n),` `,S,` from.`]})]})]})]}),o===`selected`&&(0,Z.jsxs)(`div`,{ref:m,className:`relative space-y-2`,children:[(0,Z.jsx)(`label`,{className:`text-sm font-semibold`,htmlFor:`newsletter-search`,children:`Newsletters`}),(0,Z.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,Z.jsxs)(Ie,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:t=>{t.stopPropagation(),_(e)},children:[n.name,(0,Z.jsx)(ue,{className:`size-3`})]},e):null}),(0,Z.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,Z.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,Z.jsx)(Pe,{shouldFilter:!1,children:(0,Z.jsxs)(Ne,{className:`max-h-64 overflow-y-auto`,children:[(0,Z.jsx)(Me,{children:`No newsletters found.`}),t.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())).map(e=>(0,Z.jsxs)(je,{value:e.name,onSelect:()=>_(e.id),children:[e.name,c.includes(e.id)&&(0,Z.jsx)(Ae,{})]},e.id))]})})})]})]}):(0,Z.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Are you sure you want to unsubscribe `,b(n),` `,S,` from all newsletters? They will no longer receive any email newsletters from you.`]}),(0,Z.jsxs)(J,{children:[(0,Z.jsx)(W,{variant:`outline`,onClick:()=>g(!1),children:`Cancel`}),(0,Z.jsx)(W,{disabled:x,variant:`destructive`,onClick:y,children:a?`Unsubscribing...`:`Unsubscribe`})]})]})})}function cr({open:e,memberCount:t,onOpenChange:n,onConfirm:r,onExportBackup:i,isLoading:a=!1}){let[o,s]=(0,X.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,Z.jsx)(it,{open:e,onOpenChange:c,children:(0,Z.jsxs)(St,{className:`gap-5`,children:[(0,Z.jsx)(Rt,{children:(0,Z.jsx)(at,{children:`Delete selected members?`})}),t>0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`p`,{children:[`You're about to delete`,` `,(0,Z.jsxs)(`strong`,{children:[b(t),` `,t===1?`member`:`members`]}),`. This is permanent! All Ghost data will be deleted, this will have no effect on subscriptions in Stripe.`]}),(0,Z.jsx)(`p`,{children:`A backup of your selection will be automatically downloaded to your device before deletion.`})]}):(0,Z.jsx)(`p`,{children:`No members are selected.`}),(0,Z.jsxs)(J,{children:[(0,Z.jsx)(W,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Z.jsx)(W,{disabled:a||o||t<1,variant:`destructive`,onClick:()=>void l(),children:a||o?`Deleting...`:`Download backup & delete members`})]})]})})}function lr({fileError:e,onClose:t,onDropAccepted:n,onDropRejected:r}){return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`mt-5 space-y-5`,children:[(0,Z.jsxs)(Ut,{variant:`info`,children:[`Need some help?`,` `,(0,Z.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,Z.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,Z.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-red-600`,children:[(0,Z.jsx)(L,{className:`mt-0.5 size-4 shrink-0`}),(0,Z.jsx)(`p`,{children:e})]}),(0,Z.jsx)(Fe,{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,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(ye,{className:`mb-2 size-6 text-gray-600`}),(0,Z.jsx)(`span`,{className:`text-sm text-gray-700`,children:t?`The file type you uploaded is not supported`:e?`Drop CSV file to upload`:`Select or drop a CSV file`})]})})]}),(0,Z.jsx)(J,{className:`mt-5`,children:(0,Z.jsx)(W,{variant:`outline`,onClick:t,children:`Close`})})]})}var ur=e(Qt(),1),dr=[{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`}],fr={label:`Tier`,value:`import_tier`},pr=[`email`,`name`,`note`,`subscribed_to_emails`,`complimentary_plan`,`stripe_customer_id`,`labels`,`created_at`,`gift_id`];function mr({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...pr,...e?[fr.value]:[],...t.map(e=>e.value)]}function hr({importMemberTier:e=!1}={}){return[...dr,...e?[fr]:[]]}var gr=[`email`],_r=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 vr(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 yr(e,t=30){if(!e||e.length<=t)return e;let n=[];return vr(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 br(e,t={}){let n=yr(e),r={},i=mr(t);if(e.length>0)for(let t of vr(e)){if(!r.name&&/name/i.test(t)&&!Wn(t)){r.name=t;continue}!r[t]&&i.includes(t)&&!gr.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&&ur.default.isEmail(n)&&!Wn(t)&&(r.email=t);a+=1}return r}function xr(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 Sr({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,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:`mt-5 flex min-h-0 flex-1 flex-col space-y-5`,children:t===null?(0,Z.jsx)(`div`,{className:`flex items-center justify-center rounded-md border bg-muted p-10`,children:(0,Z.jsx)(et,{size:`md`})}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:S(`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,i&&r&&`border-red-500`),children:(0,Z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,Z.jsxs)(Je,{className:`table-fixed`,children:[(0,Z.jsx)(qe,{children:(0,Z.jsxs)(K,{children:[(0,Z.jsx)(G,{className:`w-1/3`,children:`Field`}),(0,Z.jsx)(G,{className:`w-1/3`,children:(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsxs)(`span`,{children:[`Sample data`,` `,(0,Z.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(#`,b(o+1),`)`]})]}),(0,Z.jsxs)(`div`,{className:`flex items-center`,children:[(0,Z.jsx)(`button`,{"aria-label":`Show previous sample row`,className:S(`rounded p-0.5 hover:bg-muted`,!s&&`cursor-default opacity-30`),disabled:!s||e===`UPLOADING`,type:`button`,onClick:()=>f(o-1),children:(0,Z.jsx)(ge,{className:`size-4`})}),(0,Z.jsx)(`button`,{"aria-label":`Show next sample row`,className:S(`rounded p-0.5 hover:bg-muted`,!c&&`cursor-default opacity-30`),disabled:!c||e===`UPLOADING`,type:`button`,onClick:()=>f(o+1),children:(0,Z.jsx)(de,{className:`size-4`})})]})]})}),(0,Z.jsx)(G,{className:`w-1/3`,children:`Import as`})]})}),(0,Z.jsx)(Ke,{children:h.length>0?h.map(t=>(0,Z.jsxs)(K,{className:S(!t.mapTo&&`bg-muted`),children:[(0,Z.jsx)(q,{className:`text-sm font-medium break-all`,children:t.key}),(0,Z.jsx)(q,{className:S(`text-sm break-all`,!t.value&&`text-muted-foreground`),children:t.value||`\xA0`}),(0,Z.jsx)(q,{children:(0,Z.jsxs)(Ee,{disabled:e===`UPLOADING`,value:t.mapTo||`__not_imported__`,onValueChange:e=>{d(t.key,e===`__not_imported__`?null:e)},children:[(0,Z.jsx)(we,{className:S(`h-8 text-sm`,!t.mapTo&&`text-muted-foreground`),children:(0,Z.jsx)(Te,{})}),(0,Z.jsxs)(Ce,{children:[(0,Z.jsx)(Se,{value:`__not_imported__`,children:`Not imported`}),l.map(e=>(0,Z.jsx)(Se,{value:e.value,children:e.label},e.value))]})]})})]},t.key)):(0,Z.jsx)(K,{children:(0,Z.jsx)(q,{className:`text-muted-foreground`,colSpan:3,children:`No data found in the uploaded CSV.`})})})]})})}),i&&r&&(0,Z.jsx)(`p`,{className:`text-sm text-red-600`,children:r}),a>0&&(0,Z.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,Z.jsxs)(`div`,{className:`mt-5`,children:[(0,Z.jsx)(`label`,{className:`mb-1 block text-sm font-semibold`,children:`Label these members`}),(0,Z.jsx)(er,{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,Z.jsxs)(J,{className:`mt-5`,children:[(0,Z.jsx)(W,{disabled:e===`UPLOADING`,variant:`outline`,onClick:p,children:`Start over`}),(0,Z.jsx)(W,{disabled:e===`UPLOADING`||a===0,onClick:m,children:e===`UPLOADING`?(0,Z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(et,{color:`light`,size:`sm`}),`Uploading`]}):a>0?`Import ${b(a)} ${a===1?`member`:`members`}`:`Import members`})]})]})}function Cr({onUploadAnotherFile:e,onClose:t}){return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:`mt-5`,children:(0,Z.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,Z.jsxs)(J,{className:`mt-5`,children:[(0,Z.jsx)(W,{variant:`outline`,onClick:e,children:`Upload another file`}),(0,Z.jsx)(W,{onClick:t,children:`Got it`})]})]})}var wr=()=>({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 Tr({importResponse:e,onReset:t,onClose:n}){return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`mt-5 space-y-4`,children:[e.importedCount===0?(0,Z.jsxs)(`p`,{className:`text-sm`,children:[`No members were added`,e.errorCount>0?` due to the following errors:`:`.`]}):(0,Z.jsxs)(`p`,{className:`text-sm`,children:[`A total of `,(0,Z.jsx)(`strong`,{children:b(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,Z.jsxs)(Z.Fragment,{children:[e.importedCount>0&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`hr`,{className:`border-gray-200`}),(0,Z.jsxs)(`p`,{className:`text-sm`,children:[(0,Z.jsx)(`strong`,{children:b(e.errorCount)}),` `,e.errorCount===1?`member was`:`members were`,` skipped due to the following errors:`]})]}),(0,Z.jsx)(`ul`,{className:`list-inside list-disc space-y-1 text-sm text-muted-foreground`,children:e.errorList.map(e=>(0,Z.jsxs)(`li`,{children:[e.message,` (`,e.count,`)`]},e.message))})]})]}),(0,Z.jsx)(J,{className:`mt-5`,children:e.errorCount>0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(W,{variant:`outline`,asChild:!0,children:(0,Z.jsx)(`a`,{download:e.errorCsvName,href:e.errorCsvUrl,children:`Download error file`})}),e.importedCount===0?(0,Z.jsx)(W,{onClick:t,children:`Try again`}):(0,Z.jsx)(W,{onClick:n,children:`View members`})]}):(0,Z.jsx)(Z.Fragment,{children:e.importedCount===0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(W,{variant:`outline`,onClick:n,children:`Close`}),(0,Z.jsx)(W,{onClick:t,children:`Try again`})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(W,{variant:`outline`,onClick:t,children:`Upload another file`}),(0,Z.jsx)(W,{onClick:n,children:`View members`})]})})})]})}function Er({errorMessage:e,showTryAgainButton:t,onTryAgain:n,onClose:r}){return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:`mt-5`,children:(0,Z.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-red-600`,children:[(0,Z.jsx)(L,{className:`mt-0.5 size-4 shrink-0`}),(0,Z.jsx)(`p`,{children:e})]})}),(0,Z.jsxs)(J,{className:`mt-5`,children:[t&&(0,Z.jsx)(W,{variant:`outline`,onClick:n,children:`Try again`}),(0,Z.jsx)(W,{onClick:r,children:`OK`})]})]})}var Dr=e(x(),1),Or=e(nr(),1);function kr(e){let t=Or.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})}var Ar=M([P(),A({name:P()})]),jr=A({error:P().catch(``)}).catchall(O());function Mr(e){return typeof e==`string`?e:Array.isArray(e)?e.map(e=>{let t=Ar.safeParse(e);return t.success?typeof t.data==`string`?t.data:t.data.name:``}).filter(Boolean).join(`,`):``}function Q(e){return typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):``}function Nr(e){let t={email:Q(e.email),name:Q(e.name),note:Q(e.note),...e.subscribed===void 0?{}:{subscribed_to_emails:Q(e.subscribed)},...e.complimentary_plan===void 0?{}:{complimentary_plan:Q(e.complimentary_plan)},stripe_customer_id:Q(e.stripe_customer_id),created_at:Q(e.created_at),labels:Mr(e.labels)};e.newsletters!==void 0&&(t.newsletters=Mr(e.newsletters));for(let[n,r]of Object.entries(e))Wn(n)&&(t[n]=Q(r));return t.gift_id=Q(e.gift_id),t.error=Q(e.error),t}function Pr(e){if(e.length===0)return``;let t=e.map(e=>Nr(jr.parse(e))),n=[];for(let e of t)for(let t of Object.keys(e))t!==`error`&&!n.includes(t)&&n.push(t);return n.push(`error`),Or.default.unparse(t,{quotes:!0,escapeFormulae:!0,columns:n})}var Fr=A({errors:F(P()).catch([])}).catchall(O());function Ir(e){let t=e.meta.stats.imported,n=Array.isArray(e.meta.stats.invalid)?e.meta.stats.invalid:[],r=n.length,i={},a=Pr(n.map(e=>{let t=Fr.safeParse(e),{errors:n,...r}=t.success?t.data:{errors:[]},a=n.map(e=>xr(e).trim()).filter(Boolean);for(let e of a)i[e]?i[e].count+=1:i[e]={message:e,count:1};return{...r,error:a.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,Dr.default)().format(`YYYY-MM-DD HH:mm`)} - Errors.csv`,errorList:Object.values(i),importLabel:e.meta.import_label||void 0}}function Lr(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 wr();default:return e}}function Rr({open:e,onOpenChange:t,onComplete:n,onClose:r}){let[s,c]=(0,X.useReducer)(Lr,void 0,wr),l=(0,X.useRef)(null),{mutateAsync:u}=xt(),f=Ct(`importMemberTier`),p=(0,X.useRef)({importMemberTier:f});p.current={importMemberTier:f};let m=(0,X.useMemo)(()=>hr({importMemberTier:f}),[f]),h=$n({selectedSlugs:s.selectedLabelSlugs,onSelectionChange:e=>c({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}),g=(0,X.useCallback)(()=>{l.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(l.current),l.current=null):l.current&&=null},[]),_=(0,X.useCallback)(()=>{g(),c({type:`RESET`})},[g]);(0,X.useEffect)(()=>()=>{g()},[g]);let v=(0,X.useCallback)(e=>{if(!(!e&&s.status===`UPLOADING`)){if(!e){let e=s.importResponse??void 0;_(),r?.(e)}t(e)}},[r,t,_,s.importResponse,s.status]);(0,X.useEffect)(()=>{if(!s.file)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=kr(e);if(n.length>0){let e=new _r(br(n,p.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]);let y=(0,X.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)},[]),b=(0,X.useCallback)(e=>{y(e)&&c({type:`SELECT_FILE`,file:e})},[y]),x=(0,X.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]),C=(0,X.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=h.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(jt(t)){let e=Ir(t);g(),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 a?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 i||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,h.labels,u,g,n]),w=s.fileData?!!s.fileData[s.dataPreviewIndex+1]:!1,T=s.dataPreviewIndex>0,E=s.fileData?.length??0,D=s.status===`MAPPING`||s.status===`UPLOADING`,O=(0,X.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,Z.jsx)(it,{open:e,onOpenChange:v,children:(0,Z.jsxs)(St,{className:S(`gap-0`,D&&`max-w-2xl`,D&&`flex max-h-[calc(100vh-16vmin)] flex-col`),children:[(0,Z.jsxs)(Rt,{children:[(0,Z.jsx)(at,{children:O}),(0,Z.jsx)(rt,{className:`sr-only`,children:`Import members from a CSV file.`})]}),s.status===`INIT`&&(0,Z.jsx)(lr,{fileError:s.fileError,onClose:()=>v(!1),onDropAccepted:b,onDropRejected:()=>c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(s.status===`MAPPING`||s.status===`UPLOADING`)&&(0,Z.jsx)(Sr,{dataPreviewIndex:s.dataPreviewIndex,fieldMappings:m,fileData:s.fileData,hasNextRecord:w,hasPrevRecord:T,labelPicker:h,mapping:s.mapping,mappingError:s.mappingError,membersCount:E,showMappingErrors:s.showMappingErrors,status:s.status,onDataPreviewIndexChange:e=>{c({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onStartOver:_,onUpdateMapping:x,onUpload:()=>void C()}),s.status===`PROCESSING`&&(0,Z.jsx)(Cr,{onClose:()=>v(!1),onUploadAnotherFile:_}),s.status===`COMPLETE`&&s.importResponse&&(0,Z.jsx)(Tr,{importResponse:s.importResponse,onClose:()=>v(!1),onReset:_}),s.status===`ERROR`&&(0,Z.jsx)(Er,{errorMessage:s.errorMessage,showTryAgainButton:s.showTryAgainButton,onClose:()=>v(!1),onTryAgain:_})]})})}function zr(e){let t=((Wn(e)?e.split(`.`)[2]:e)??e).replace(/[._-]+/g,` `).trim();return t.charAt(0).toUpperCase()+t.slice(1)}function Br({columnKey:e,isSaving:t,nameError:n,saveError:r,canRetry:i,onSubmit:a,onEdit:o,onCancel:s}){let[c,l]=(0,X.useState)(()=>zr(e)),[u,d]=(0,X.useState)(Kn[0].id),f=(0,X.useRef)(null);(0,X.useEffect)(()=>{f.current?.scrollIntoView({block:`nearest`})},[]);let p=()=>a(c,u);return(0,Z.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,Z.jsxs)(ze,{className:`flex-row flex-wrap items-start gap-3`,children:[(0,Z.jsxs)(He,{className:`min-w-56 flex-1`,"data-invalid":!!n||void 0,children:[(0,Z.jsx)(Ve,{className:`text-sm!`,htmlFor:`import-custom-field-name`,children:`Name`}),(0,Z.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,Z.jsx)(Be,{children:n})]}),(0,Z.jsxs)(He,{className:`w-44`,children:[(0,Z.jsx)(Ve,{className:`text-sm!`,children:`Type`}),(0,Z.jsxs)(Ee,{value:u,onValueChange:e=>d(e),children:[(0,Z.jsx)(we,{"aria-label":`Type`,className:`h-8 text-sm!`,children:(0,Z.jsx)(Te,{children:(0,Z.jsx)(ir,{type:u})})}),(0,Z.jsx)(Ce,{children:Kn.map(e=>(0,Z.jsx)(Se,{value:e.id,children:(0,Z.jsx)(ir,{type:e.id})},e.id))})]})]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 self-end pb-0.5`,children:[(0,Z.jsx)(W,{disabled:t,size:`sm`,variant:`outline`,onClick:s,children:`Cancel`}),(0,Z.jsx)(W,{disabled:t||!i,size:`sm`,onClick:p,children:t?`Saving`:`Save`})]})]}),r&&(0,Z.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:r})]})}var Vr={membership:{heading:`Membership fields`,badge:null,ariaKind:null},custom:{heading:`Custom fields`,badge:`Custom`,ariaKind:`Custom field`}},Hr=Object.keys(Vr);function Ur({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=Gr(n),i=n.map(e=>({...e,badge:r.has(Wr(e))?Vr[e.source].badge:null,ariaKind:Vr[e.source].ariaKind}));return Hr.map(e=>({source:e,heading:Vr[e].heading,targets:i.filter(t=>t.source===e)})).filter(e=>e.targets.length>0)}function Wr(e){return e.label.trim().toLowerCase()}function Gr(e){let t=new Map;for(let n of e){let e=t.get(Wr(n))??new Set;e.add(n.source),t.set(Wr(n),e)}return new Set([...t].filter(([,e])=>e.size>1).map(([e])=>e))}var Kr={email:z,name:_e,note:I,subscribed_to_emails:H,stripe_customer_id:ce,complimentary_plan:B,labels:ie,created_at:ve,gift_id:be,import_tier:V};function qr(e,t){return(0,Z.jsx)(le,{className:t})}function Jr({target:e,className:t}){switch(e.source){case`membership`:return(0,Z.jsx)(Kr[e.value]??le,{className:t});case`custom`:return(0,Z.jsx)(rr,{className:t,type:e.type});default:return qr(e,t)}}function Yr(e,t,n){return ke((n??[]).join(` `),t)}function Xr({className:e,columnKey:t,value:n,disabled:r,invalid:i,targetGroups:a,canCreateField:o,open:s,search:c,onOpenChange:l,onSearchChange:u,onSelect:d,onCreateField:f,triggerRef:p}){let m=(0,X.useRef)(!1),h=a.flatMap(e=>e.targets).find(e=>e.value===n),g=h?.badge??null,_=h?.ariaKind??null,v=e=>{l(!1),d(e)};return(0,Z.jsxs)(st,{open:s,modal:!0,onOpenChange:e=>{r||l(e)},children:[(0,Z.jsx)(bt,{asChild:!0,children:(0,Z.jsxs)(W,{ref:p,"aria-disabled":r||void 0,"aria-invalid":i||void 0,"aria-label":h?`Field for ${t}, ${h.label}${_?`, ${_}`:``}`:`Field for ${t}, not chosen`,className:S(`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,Z.jsxs)(`span`,{className:S(`flex shrink-0 items-center`,r&&`opacity-60`),children:[h&&(0,Z.jsx)(Jr,{className:`size-4 text-foreground`,target:h}),!h&&(0,Z.jsx)(`span`,{className:`size-4 rounded-sm border border-dashed border-border-strong`})]}),h?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`span`,{className:S(`flex min-w-0 flex-1 items-baseline text-left text-sm font-medium`,r&&`opacity-60`),children:[(0,Z.jsx)(`span`,{className:`min-w-0 shrink-[999] truncate`,children:h.fieldName}),h.partLabel&&(0,Z.jsx)(`span`,{className:`min-w-0 truncate whitespace-pre`,children:` (${h.partLabel})`})]}),g&&(0,Z.jsx)(Ie,{className:S(`ms-2 shrink-0 max-md:hidden`,r&&`opacity-60`),variant:`secondary`,children:g})]}):(0,Z.jsx)(`span`,{className:S(`min-w-0 truncate text-sm text-muted-foreground`,r&&`opacity-60`),children:`Select field`}),(0,Z.jsx)(me,{className:`ms-auto size-4 shrink-0 opacity-50`})]})}),(0,Z.jsx)(Xe,{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=>{m.current&&(m.current=!1,e.preventDefault(),f())},children:(0,Z.jsxs)(Pe,{className:`min-h-0`,filter:Yr,children:[(0,Z.jsx)(De,{className:`h-(--control-height) shrink-0`,placeholder:`Search fields...`,value:c,onValueChange:u}),(0,Z.jsxs)(Ne,{className:`min-h-0 flex-1`,children:[a.map(e=>(0,Z.jsx)(Oe,{heading:e.heading,children:e.targets.map(e=>(0,Z.jsxs)(je,{keywords:[e.label],value:e.value,onSelect:()=>v(e.value),children:[(0,Z.jsx)(Jr,{target:e}),(0,Z.jsx)(`span`,{className:`truncate`,children:e.label}),n===e.value&&(0,Z.jsx)(Ae,{})]},e.value))},e.source)),o?(0,Z.jsx)(Oe,{forceMount:!0,children:(0,Z.jsxs)(je,{className:`font-semibold text-green`,value:`Add custom field`,forceMount:!0,onSelect:()=>{m.current=!0,l(!1)},children:[(0,Z.jsx)(fe,{}),(0,Z.jsx)(`span`,{children:`Add custom field`})]})}):(0,Z.jsx)(Me,{children:`No fields found.`})]})]})})]})}function Zr(e,t,n){let r=new Set(e);return n?r.add(t):r.delete(t),r}function Qr(e){return Hn(e.type)?null:qn([e])[0]?.value??null}function $r({status:e,fileData:t,mapping:n,mappingError:c,showMappingErrors:u,dataPreviewIndex:d,targetGroups:f,canCreateCustomFields:p,labelPicker:m,onUpdateMapping:h,onFieldCreated:g,onDataPreviewIndexChange:_,onStartOver:v,onColumnsChanged:y,onUpload:x}){let[C,w]=(0,X.useState)(new Set),[T,E]=(0,X.useState)(new Set),[D,O]=(0,X.useState)(null),k=(0,X.useRef)(new Map);(0,X.useLayoutEffect)(()=>{let[e]=D?.columns??[];e&&k.current.get(e)?.scrollIntoView({block:`nearest`,behavior:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`})},[D]);let[A,j]=(0,X.useState)(null),[M,N]=(0,X.useState)(null),{mutateAsync:P,isPending:F}=Yn(),[ee,te]=(0,X.useState)(null),[I,L]=(0,X.useState)(null),[ne,R]=(0,X.useState)(!0),re=l(),z=(0,X.useCallback)(()=>{te(null),L(null),R(!0)},[]),ie=e=>{let t=e instanceof a?e.data?.errors?.[0]:null;if(e instanceof i&&t?.property===`name`){te(r(e,`Invalid name`));return}L(r(e,e instanceof s?e.message:`Could not create the custom field, please try again.`)),R(!(e instanceof o)&&t?.type!==`NoPermissionError`),e instanceof o||re(e,{withToast:!1})},ae=async(e,t,n)=>{z();let r;try{r=(await P({name:t,type:n,access:{member:`none`}})).members_metafields?.[0]}catch(e){ie(e);return}if(!r){L(`The field was created, but this column could not be mapped to it. Choose it from the list.`),R(!1),re(Error(`Custom field create returned no field`));return}let i=Qr(r);if(g(e,i),j(null),O(null),i){k.current.get(e)?.focus();return}se(e,r.name)},oe=e=>!!A&&A!==e.key,B=t=>e===`UPLOADING`||F,se=(e,t)=>{z(),j(null),N({columnKey:e,search:t})},ce=e=>{z(),j(e)},le=(e,t)=>{let r=n?.getKeyByValue(t);r&&r!==e.key&&w(e=>Zr(e,r,!0)),h(e.key,t)},V=e=>!T.has(e.key)&&(!!e.mapTo||C.has(e.key)),ue=(e,t)=>{O(null),y(),E(n=>Zr(n,e.key,!t)),w(n=>Zr(n,e.key,t&&!e.mapTo)),!t&&A===e.key&&j(null)},H=u&&c||D?.message,fe=!!H&&!D?.columns.size,U=t.length,pe=d>0,me=!!t[d+1],he=(0,X.useMemo)(()=>vr(t),[t]),_e=n?he.map(e=>({key:e,value:t[d]?.[e]??``,mapTo:n.get(e)})):[],ve=Object.fromEntries(_e.map(e=>[e.key,V(e)?e.mapTo:``])),ye=()=>{if(c)return null;if(!Object.values(ve).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(ve).filter(e=>ve[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,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:`mt-5 flex min-h-0 flex-1 flex-col space-y-5`,children:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:S(`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,fe&&`border-destructive`),children:(0,Z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,Z.jsxs)(Je,{className:`table-fixed`,children:[(0,Z.jsx)(qe,{children:(0,Z.jsxs)(K,{children:[(0,Z.jsx)(G,{className:`w-10`,children:(0,Z.jsx)(`span`,{className:`sr-only`,children:`Import this column`})}),(0,Z.jsx)(G,{className:`w-[26%]`,children:`Field`}),(0,Z.jsx)(G,{className:`w-[30%]`,children:(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsxs)(`span`,{children:[`Sample data`,` `,(0,Z.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(#`,b(d+1),`)`]})]}),(0,Z.jsxs)(`div`,{className:`flex items-center`,children:[(0,Z.jsx)(`button`,{"aria-label":`Show previous sample row`,className:S(`rounded p-0.5 hover:bg-muted`,!pe&&`cursor-default opacity-30`),disabled:!pe||e===`UPLOADING`,type:`button`,onClick:()=>_(d-1),children:(0,Z.jsx)(ge,{className:`size-4`})}),(0,Z.jsx)(`button`,{"aria-label":`Show next sample row`,className:S(`rounded p-0.5 hover:bg-muted`,!me&&`cursor-default opacity-30`),disabled:!me||e===`UPLOADING`,type:`button`,onClick:()=>_(d+1),children:(0,Z.jsx)(de,{className:`size-4`})})]})]})}),(0,Z.jsx)(G,{className:`w-[38%]`,children:`Import as`})]})}),(0,Z.jsx)(Ke,{children:_e.length>0?_e.map(e=>(0,Z.jsxs)(X.Fragment,{children:[(0,Z.jsxs)(K,{className:S(`transition-opacity [&>td]:group-hover:bg-transparent`,!V(e)&&`bg-muted/50`,oe(e)&&`opacity-40`),children:[(0,Z.jsx)(q,{children:(0,Z.jsx)(Le,{"aria-label":`Import ${e.key}`,checked:V(e),disabled:B(e),onCheckedChange:t=>ue(e,t===!0)})}),(0,Z.jsx)(q,{className:S(`text-sm font-medium break-all`,!V(e)&&`text-muted-foreground`),children:e.key}),(0,Z.jsx)(q,{className:S(`text-sm break-all`,(!e.value||!V(e))&&`text-muted-foreground`),children:e.value||`\xA0`}),(0,Z.jsx)(q,{children:(0,Z.jsx)(Xr,{canCreateField:p,className:S(!V(e)&&`invisible`),columnKey:e.key,disabled:B(e),invalid:D?.columns.has(e.key),open:M?.columnKey===e.key,search:M?.columnKey===e.key?M.search:``,targetGroups:f,triggerRef:t=>{t?k.current.set(e.key,t):k.current.delete(e.key)},value:e.mapTo,onCreateField:()=>ce(e.key),onOpenChange:t=>t?se(e.key,``):N(null),onSearchChange:t=>N({columnKey:e.key,search:t}),onSelect:t=>{O(null),le(e,t)}})})]}),A===e.key&&(0,Z.jsx)(K,{className:`bg-transparent hover:bg-transparent`,children:(0,Z.jsx)(q,{className:`p-2`,colSpan:4,children:(0,Z.jsx)(`div`,{className:`rounded-lg border bg-surface-elevated-2 p-3 shadow-lg`,children:(0,Z.jsx)(Br,{canRetry:ne,columnKey:e.key,isSaving:F,nameError:ee,saveError:I,onCancel:()=>{z(),j(null),k.current.get(e.key)?.focus()},onEdit:z,onSubmit:(t,n)=>void ae(e.key,t,n)})})})})]},e.key)):(0,Z.jsx)(K,{children:(0,Z.jsx)(q,{className:`text-muted-foreground`,colSpan:4,children:`No data found in the uploaded CSV.`})})})]})})}),H&&(0,Z.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:H}),U>0&&(0,Z.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,Z.jsxs)(`div`,{className:`mt-5`,children:[(0,Z.jsx)(`label`,{className:`mb-1 block text-sm font-semibold`,children:`Label these members`}),(0,Z.jsx)(er,{isCreating:m.isCreating,labels:m.labels,optionSource:m.optionSource,resolvedSelectedLabels:m.resolvedSelectedLabels,selectedSlugs:m.selectedSlugs,onCreate:m.createLabel,onDelete:m.deleteLabel,onEdit:m.editLabel,onToggle:m.toggleLabel})]})]})}),(0,Z.jsxs)(J,{className:`mt-5`,children:[(0,Z.jsx)(W,{disabled:e===`UPLOADING`,variant:`outline`,onClick:v,children:`Start over`}),(0,Z.jsx)(W,{disabled:e===`UPLOADING`||U===0,onClick:()=>{let e=ye();if(e){O(e);return}x(ve)},children:e===`UPLOADING`?(0,Z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(et,{color:`light`,size:`sm`}),`Uploading`]}):U>0?`Import ${b(U)} ${U===1?`member`:`members`}`:`Import members`})]})]})}function ei({open:e,onOpenChange:t,onComplete:n,onClose:s}){let[c,l]=(0,X.useReducer)(Lr,void 0,wr),u=(0,X.useRef)(null),{mutateAsync:f}=xt(),p=Ct(`importMemberTier`),m=Bn(),{data:h,isError:g}=Qn(),_=(0,X.useMemo)(()=>qn(h??[]),[h]),v=h!==void 0||g,y=(0,X.useRef)({importMemberTier:p,customFieldColumns:_});(0,X.useLayoutEffect)(()=>{y.current={importMemberTier:p,customFieldColumns:_}},[p,_]);let b=(0,X.useMemo)(()=>Ur({membershipFields:hr({importMemberTier:p}),customFieldColumns:_}),[p,_]),x=$n({selectedSlugs:c.selectedLabelSlugs,onSelectionChange:e=>{D.current=!0,l({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}}),C=(0,X.useCallback)(()=>{u.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(u.current),u.current=null):u.current&&=null},[]),w=(0,X.useCallback)(()=>{C(),D.current=!1,l({type:`RESET`})},[C]);(0,X.useEffect)(()=>()=>{C()},[C]);let{confirm:T,dialogProps:E}=Yt(),D=(0,X.useRef)(!1),O=(0,X.useCallback)(e=>{if(!(!e&&c.status===`UPLOADING`)){if(!e){T(c.status===`MAPPING`&&D.current,()=>{let e=c.importResponse??void 0;w(),s?.(e),t(!1)});return}t(e)}},[T,s,t,w,c.importResponse,c.status]);(0,X.useEffect)(()=>{if(!c.file||!v)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=kr(e);if(n.length>0){let e=new _r(br(n,y.current));l({type:`PARSE_SUCCESS`,fileData:n,mapping:e,mappingError:null})}else l({type:`PARSE_SUCCESS`,fileData:[],mapping:null,mappingError:`File is empty, nothing to import. Please select a different file.`})}catch{l({type:`PARSE_FAILURE`,mappingError:`Failed to parse this file. Please try another CSV file.`})}},t.onerror=()=>{e||l({type:`PARSE_FAILURE`,mappingError:`Failed to read file${t.error?.message?`: ${t.error.message}`:``}`})},t.onabort=()=>{e||l({type:`PARSE_FAILURE`,mappingError:`File read was interrupted. Please try again.`})},t.readAsText(c.file),()=>{e=!0,t.readyState===FileReader.LOADING&&t.abort()}},[c.file,v]);let k=(0,X.useCallback)(e=>{let t=/(?:\.([^.]+))?$/.exec(e.name)?.[1];return!t||t.toLowerCase()!==`csv`?(l({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`}),!1):(l({type:`SET_FILE_ERROR`,fileError:null}),!0)},[]),A=(0,X.useCallback)(e=>{k(e)&&l({type:`SELECT_FILE`,file:e})},[k]),j=(0,X.useCallback)((e,t)=>{if(!c.mapping)return;D.current=!0;let n=c.mapping.updateMapping(e,t),r=c.fileData&&c.fileData.length===0?`File is empty, nothing to import. Please select a different file.`:null;l({type:`UPDATE_MAPPING`,mapping:n,mappingError:r})},[c.fileData,c.mapping]),M=(0,X.useCallback)((e,t)=>{t&&j(e,t)},[j]),N=(0,X.useCallback)(async e=>{if(!c.file||c.mappingError){l({type:`SET_SHOW_MAPPING_ERRORS`,showMappingErrors:!0});return}l({type:`UPLOAD_START`});let t=[];for(let e of c.selectedLabelSlugs){let n=x.labels.find(t=>t.slug===e);n&&t.push(n.name)}try{let r=await f({file:c.file,labels:t,mapping:e});if(jt(r)){let e=Ir(r);C(),u.current=e.errorCsvUrl,l({type:`UPLOAD_COMPLETE`,importResponse:e}),n?.(e);return}l({type:`UPLOAD_ACCEPTED`}),n?.()}catch(e){if(e instanceof d){l({type:`UPLOAD_ERROR`,errorMessage:`The file you uploaded was larger than the maximum file size your server allows.`});return}let t=e instanceof a?e.data?.errors?.[0]:null;if(e instanceof o&&t?.code===`EMAIL_VERIFICATION_NEEDED`){l({type:`UPLOAD_ERROR`,errorMessage:r(e,e.message),errorHeader:`Woah there cowboy, that's a big list`,showTryAgainButton:!1}),n?.();return}if(e instanceof i||t?.type===`DataImportError`){l({type:`UPLOAD_ERROR`,errorMessage:r(e,e instanceof Error?e.message:`An unexpected error occurred, please try again`)});return}l({type:`UPLOAD_ERROR`,errorMessage:`An unexpected error occurred, please try again`})}},[c.file,c.mappingError,c.selectedLabelSlugs,x.labels,f,C,n]),P=c.status===`MAPPING`||c.status===`UPLOADING`,F=(0,X.useMemo)(()=>{switch(c.status){case`PROCESSING`:return`Import in progress`;case`COMPLETE`:return`Import complete`;case`ERROR`:return c.errorHeader;default:return`Import members`}},[c.errorHeader,c.status]);return(0,Z.jsxs)(it,{open:e,onOpenChange:O,children:[(0,Z.jsxs)(St,{className:S(`gap-0`,P&&`max-w-4xl`,P&&`flex max-h-[calc(100vh-16vmin)] flex-col`),children:[(0,Z.jsxs)(Rt,{children:[(0,Z.jsx)(at,{children:F}),(0,Z.jsx)(rt,{className:`sr-only`,children:`Import members from a CSV file.`})]}),c.status===`INIT`&&(0,Z.jsx)(lr,{fileError:c.fileError,onClose:()=>O(!1),onDropAccepted:A,onDropRejected:()=>l({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(c.status===`MAPPING`||c.status===`UPLOADING`)&&c.fileData===null&&(0,Z.jsx)(`div`,{className:`flex items-center justify-center rounded-md border bg-muted p-10`,children:(0,Z.jsx)(et,{size:`md`})}),(c.status===`MAPPING`||c.status===`UPLOADING`)&&c.fileData!==null&&(0,Z.jsx)($r,{canCreateCustomFields:m,dataPreviewIndex:c.dataPreviewIndex,fileData:c.fileData,labelPicker:x,mapping:c.mapping,mappingError:c.mappingError,showMappingErrors:c.showMappingErrors,status:c.status,targetGroups:b,onColumnsChanged:()=>{D.current=!0},onDataPreviewIndexChange:e=>{l({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onFieldCreated:M,onStartOver:w,onUpdateMapping:j,onUpload:e=>void N(e)}),c.status===`PROCESSING`&&(0,Z.jsx)(Cr,{onClose:()=>O(!1),onUploadAnotherFile:w}),c.status===`COMPLETE`&&c.importResponse&&(0,Z.jsx)(Tr,{importResponse:c.importResponse,onClose:()=>O(!1),onReset:w}),c.status===`ERROR`&&(0,Z.jsx)(Er,{errorMessage:c.errorMessage,showTryAgainButton:c.showTryAgainButton,onClose:()=>O(!1),onTryAgain:w})]}),(0,Z.jsx)(pt,{open:E.open,onOpenChange:E.onOpenChange,children:(0,Z.jsxs)(Ot,{className:`z-[1100]`,"data-testid":`import-members-leave-guard`,overlayClassName:`z-[1100]`,onEscapeKeyDown:e=>e.stopPropagation(),children:[(0,Z.jsxs)(mt,{children:[(0,Z.jsx)(tt,{children:`Leave without importing?`}),(0,Z.jsx)(ct,{children:`The columns you have mapped will be lost.`})]}),(0,Z.jsxs)(ut,{children:[(0,Z.jsx)(Ye,{children:`Keep mapping`}),(0,Z.jsx)(W,{variant:`destructive`,onClick:E.onConfirm,children:`Leave`})]})]})})]})}function ti(e){return Ct(`membersImportRedesign`)?(0,Z.jsx)(ei,{...e}):(0,Z.jsx)(Rr,{...e})}var ni=`metafields`,ri=`${ni}.key`,ii=`${ni}.value`,ai=`metafields.`;function $(e){return`${ai}${e.namespace}.${e.key}`}function oi(e){if(!e.startsWith(`metafields.`))return null;let[t,n,...r]=e.slice(11).split(`.`);return!t||!n||r.length>0?null:{namespace:t,key:n}}function si(e,t){return Vn({namespace:e.namespace,key:e.key,partPath:t||null})}function ci(e){let t=typeof e==`string`?Xn(e):null;return t?{namespace:t.namespace,key:t.key,subfield:t.partPath??``}:null}var li=nn;function ui(e){return`${ri}:${Dt(e)}`}function di(e){let[t,...n]=e;return{subfield:typeof t==`string`?t:``,rest:n.filter(e=>e!==``)}}function fi(e,t){return e||(t.namespace&&t.key?{namespace:t.namespace,key:t.key}:null)}function pi(e){return{presenceOperators:li,address(t,n){let r=fi(e,n.params),{subfield:i,rest:a}=di(t.values);return r?{valueKey:ii,companions:[ui(si(r,i))],values:a}:null},addressPresence(t,n){let r=fi(e,n.params),{subfield:i}=di(t.values);if(!r)return null;let a=si(r,i);return t.operator===`is-set`?[ui(a)]:[`${ri}:-${Dt(a)}`]},match(){return null},matchCompound(t){let n=t=>e===void 0||t.namespace===e.namespace&&t.key===e.key,r=on(t,`$and`);if(!r){let e=ci(t[ri]);if(e)return n(e)?{kind:`predicate`,predicate:{field:$(e),operator:`is-set`,values:[e.subfield,``]}}:null;let r=ci(yn(t[ri]));return r&&n(r)?{kind:`predicate`,predicate:{field:$(r),operator:`is-not-set`,values:[r.subfield,``]}}:null}if(r.length!==2)return null;let i,a,o=!1;for(let e of r){let t=ci(e[ri]);t&&(i=t),ii in e&&(a=e[ii],o=!0)}if(!i||!o||!n(i))return null;let s=$t(a);return s?{kind:`value`,field:$(i),leadingValues:[i.subfield],comparator:s}:null}}}var mi={text:`text`,date:`plain_date`,number:`number`},hi={short_text:`text`,postal_code:`text`,country_code:`set`},gi=[`text`,`set`],_i={text:()=>An(),set:()=>en({quoteStrings:!0})};function vi(e,t){let n=Hn(e)?.find(e=>e.key===t);return n?hi[n.type]:void 0}function yi(e){let t=new Set((Hn(e)??[]).map(e=>hi[e.type]));return gi.filter(e=>t.has(e))}function bi(e){let t=gi.filter(t=>e.includes(t)).map(e=>_i[e]());return{operators:t.flatMap(e=>e.operators),serialize(e,n){let r=t.find(t=>tn(t.operators,e.operator));return r?r.serialize(e,n):null},parse(e,n){for(let r of t){if(r!==t[0]&&!Array.isArray(e.value))continue;let i=r.parse(e,n);if(i)return i}return null}}}function xi(e){return[...gi.filter(t=>e.includes(t)).flatMap(e=>ln[e].operators),...li]}var Si=ai;function Ci(e){let t=Gn(e.type);return t===`record`?un({key:$(e),icon:`text`,semantics:bi(yi(e.type)),operators:xi(yi(e.type)),addressing:pi(e),ui:{label:e.name,type:`custom`,defaultOperator:`is-set`}}):{key:$(e),icon:`text`,type:mi[t],addressing:pi(e),ui:{label:e.name,type:`custom`}}}function wi(e){return{resolved:e!==void 0,claims:[Si],fields:(e??[]).map(Ci)}}var Ti=`newsletters.`,Ei=`newsletters.slug`,Di=`email_disabled`,Oi=[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`}];function ki(e){return{operators:[`is`],serialize({operator:t,values:n},r){let i=e??r.params.slug,a=n[0];return!i||t!==`is`?null:a===`subscribed`?{join:`and`,fragments:[{expression:i},{key:Di,expression:`0`}]}:a===`unsubscribed`?{join:`or`,fragments:[{expression:`-${i}`},{key:Di,expression:`1`}]}:null},parse(){return null}}}function Ai(e){return{address(t,n){return e??n.params.slug?{valueKey:Ei,values:t.values}:null},match(){return null},matchCompound(e){for(let t of[`and`,`or`]){let n=on(e,t===`and`?`$and`:`$or`);if(!n||n.length!==2)continue;let r,i=!1,a;for(let e of n){let t=e[Ei];typeof t==`string`&&(r=t,i=!1);let n=yn(t);n!==null&&(r=n,i=!0),typeof e[Di]==`number`&&(a=e[Di])}let o=!i&&t===`and`&&a===0;if(!(!r||!o&&!(i&&t===`or`&&a===1)))return{kind:`predicate`,predicate:{field:`${Ti}${r}`,operator:`is`,values:[o?`subscribed`:`unsubscribed`]}}}return null}}}function ji(e){return un({key:`${Ti}${e.slug}`,icon:`newspaper`,semantics:ki(e.slug),addressing:Ai(e.slug),operators:[`is`],options:Oi,ui:{label:e.name,type:`select`,searchable:!1,hideOperatorSelect:!0}})}function Mi(e){return{resolved:e!==void 0,claims:[Ei],fields:(e??[]).map(ji)}}var Ni=un({key:`${Ti}:slug`,icon:`newspaper`,semantics:ki(),addressing:Ai(),operators:[`is`],options:Oi,ui:{label:`Newsletter`,type:`select`,searchable:!1,hideOperatorSelect:!0}}),Pi=`email_disabled`;function Fi(e,t){return e.clauses.find(e=>e.key===t)}function Ii(){return{operators:[`is`,`is-not`],serialize({operator:e,values:t}){let n=t[0],r=e===`is`;if(e!==`is`&&e!==`is-not`)return null;if(n===`email-disabled`)return{fragments:[{key:Pi,expression:r?`1`:`0`}]};if(n!==`subscribed`&&n!==`unsubscribed`)return null;let i=n===`subscribed`;return r?{join:`and`,fragments:[{expression:String(i)},{key:Pi,expression:`0`}]}:{join:`or`,fragments:[{expression:String(!i)},{key:Pi,expression:`1`}]}},parse(){return null},parseClauses(e){let t=Fi(e,Pi),n=Fi(e,`subscribed`);return t&&!n&&e.clauses.length===1?t.value===1?{operator:`is`,values:[`email-disabled`]}:t.value===0?{operator:`is-not`,values:[`email-disabled`]}:null:!n||typeof n.value!=`boolean`?null:!t&&e.clauses.length===1?{operator:`is`,values:[n.value?`subscribed`:`unsubscribed`]}:!t||e.clauses.length!==2?null:e.join===`and`&&t.value===0?{operator:`is`,values:[n.value?`subscribed`:`unsubscribed`]}:e.join===`or`&&t.value===1?{operator:`is-not`,values:[n.value?`unsubscribed`:`subscribed`]}:null}}}function Li(){return{operators:[`1`,`0`],serialize({operator:e,values:t}){let n=t[0];return typeof n!=`string`||!n?null:{join:`and`,fragments:[{expression:Dt(n)},{key:`feedback.score`,expression:e}]}},parse(){return null},parseClauses(e){let t=Fi(e,`feedback.post_id`),n=Fi(e,`feedback.score`);return e.clauses.length!==2||e.join!==`and`||!t||!n||typeof t.value!=`string`||n.value!==0&&n.value!==1?null:{operator:n.value===1?`1`:`0`,values:[t.value]}}}}var Ri=`count.active_stripe_customers`,zi=`${Ri}:>1`;`${Ri}`;var Bi=N({multipleActiveSubscriptionsBanner:N({dismissedCount:ee().finite().optional().catch(void 0),dismissedAt:P().optional().catch(void 0)}).optional().catch(void 0)});function Vi(e){return e===zi}function Hi(e){if(!e)return Bi.parse({});try{let t=JSON.parse(e);return Bi.parse(t)}catch{return Bi.parse({})}}function Ui(e){return Hi(e).multipleActiveSubscriptionsBanner??{}}function Wi(e,t,n){let r=Hi(e),i=Ui(e);return JSON.stringify({...r,multipleActiveSubscriptionsBanner:{...i,dismissedCount:t,dismissedAt:n}})}function Gi(e,t,n){return{...e,accessibility:Wi(e.accessibility,t,n)}}var Ki=[{key:`name`,icon:`person`,type:`text`,ui:{label:`Name`,placeholder:`Enter name...`,className:`w-48`}},{key:`email`,icon:`mail`,type:`text`,ui:{label:`Email`,placeholder:`Enter email...`,className:`w-48`}},{key:`label`,icon:`tag`,type:`set`,ui:{label:`Label`,searchable:!0,className:`w-64`},metadata:{activeColumn:{key:`labels`,label:`Labels`},columnInclude:`labels`}},un({key:`subscribed`,icon:`mail`,semantics:Ii(),operators:ln.scalar.operators,ui:{label:`Newsletter subscription`,type:`select`,searchable:!1},options:[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`},{value:`email-disabled`,label:`Email disabled`}]}),{key:`last_seen_at`,icon:`eye`,type:`timestamp`,operators:jn,ui:{label:`Last seen`}},{key:`created_at`,icon:`calendar`,type:`timestamp`,operators:jn,ui:{label:`Created`}},{key:`signup`,icon:`person-plus`,type:`scalar`,valueConfig:{quoteStrings:!0},ui:{label:`Signed up on post/page`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`}},{key:`tier_id`,icon:`card`,type:`set`,ui:{label:`Membership tier`,searchable:!0,className:`w-64`},metadata:{activeColumn:{key:`tiers`,label:`Tiers`},columnInclude:`tiers`}},{key:`status`,icon:`person-circle`,type:`scalar`,ui:{label:`Member status`,searchable:!1},options:[{value:`paid`,label:`Paid`},{value:`free`,label:`Free`},{value:`comped`,label:`Complimentary`}]},{key:`subscriptions.plan_interval`,icon:`calendar-clock`,type:`scalar`,ui:{label:`Billing period`,searchable:!1},options:[{value:`month`,label:`Monthly`},{value:`year`,label:`Yearly`}],metadata:{activeColumn:{key:`subscriptions.plan_interval`,label:`Billing period`},columnInclude:`subscriptions`}},{key:`subscriptions.status`,icon:`card`,type:`scalar`,ui:{label:`Stripe subscription status`,searchable:!1},options:[{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`}],metadata:{activeColumn:{key:`subscriptions.status`,label:`Subscription status`},columnInclude:`subscriptions`}},{key:`subscriptions.start_date`,icon:`calendar-start`,type:`timestamp`,operators:jn,ui:{label:`Paid start date`},metadata:{activeColumn:{key:`subscriptions.start_date`,label:`Paid start date`},columnInclude:`subscriptions`}},{key:`subscriptions.current_period_end`,icon:`calendar-end`,type:`timestamp`,operators:dn,ui:{label:`Next billing date`},metadata:{activeColumn:{key:`subscriptions.current_period_end`,label:`Next billing date`},columnInclude:`subscriptions`}},{key:`conversion`,icon:`arrows`,type:`scalar`,valueConfig:{quoteStrings:!0},ui:{label:`Subscription started on post/page`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`}},{key:`email_count`,icon:`send`,type:`number`,ui:{label:`Emails sent (all time)`,defaultOperator:`is-greater`,min:0,className:`w-24`}},{key:`email_opened_count`,icon:`mail-open`,type:`number`,ui:{label:`Emails opened (all time)`,defaultOperator:`is-greater`,min:0,className:`w-24`}},{key:`email_open_rate`,icon:`percent`,type:`number`,ui:{label:`Open rate (all time)`,defaultOperator:`is-greater`,min:0,max:100,suffix:`%`,className:`w-24`}},{key:`emails.post_id`,icon:`send`,type:`scalar`,valueConfig:{quoteStrings:!0},ui:{label:`Sent email`,searchable:!0,placeholder:`Select an email...`,className:`w-64`}},{key:`opened_emails.post_id`,icon:`mail-open`,type:`scalar`,valueConfig:{quoteStrings:!0},ui:{label:`Opened email`,searchable:!0,placeholder:`Select an email...`,className:`w-64`}},{key:`clicked_links.post_id`,icon:`click`,type:`scalar`,valueConfig:{quoteStrings:!0},ui:{label:`Clicked email`,searchable:!0,placeholder:`Select an email...`,className:`w-64`}},un({key:`newsletter_feedback`,icon:`message`,semantics:Li(),addressing:cn({field:`feedback.post_id`}),operators:[`1`,`0`],ui:{label:`Responded with feedback`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`,defaultOperator:`1`}}),{key:`offer_redemptions`,icon:`ticket`,type:`set`,valueConfig:{quoteStrings:!0,serializeSingletonAsScalar:!0},ui:{label:`Offer`,searchable:!0,className:`w-64`},metadata:{activeColumn:{key:`offer_redemptions`,label:`Offer`}}},{key:Ri,icon:`layers`,type:`count`,valueConfig:{threshold:1,absentForm:`below`},ui:{label:`Multiple active subscriptions`,type:`select`,searchable:!1,hideOperatorSelect:!0},options:[{value:`true`,label:`Yes`},{value:`false`,label:`No`}]}],qi=[`text`,`set`],Ji=un({key:`metafields.:namespace.:key`,icon:`text`,semantics:bi(qi),addressing:pi(),operators:xi(qi),ui:{label:`Custom field`,type:`custom`},metadata:{activeColumn:({params:e,label:t})=>t&&e.namespace&&e.key?{key:$({namespace:e.namespace,key:e.key}),label:t}:null,columnInclude:`metafields`}}),Yi=[...Ki,Ni,Ji],Xi=Sn(Yi),Zi=2;function Qi(e,t={}){let n=new Map;for(let r of e){let e=xn(Xi,r.field,`UTC`),i=e?.definition.metadata?.activeColumn;if(!i)continue;let{context:a}=e;if(typeof i!=`function`){let e=ra[i.key];e&&n.set(i.key,{...i,getValue:e});continue}let o=ia[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,Zi)}function $i(e){let t=new Set([`labels`,`tiers`]);for(let n of e){let e=xn(Xi,n.field,`UTC`)?.definition.metadata?.columnInclude;e&&t.add(e)}return Array.from(t).join(`,`)}function ea({filters:e,nql:t,search:n}){if(!t&&!n)return;let r={include:$i(e),limit:`100`,order:`created_at desc`};return t&&(r.filter=t),n&&(r.search=n),r}function ta({nql:e,search:t}){return!e&&!t?{all:!0}:{...e?{filter:e}:{},...t?{search:t}:{}}}function na(e,t){return e?{text:Dr.default.tz(e,t).format(`D MMM YYYY`),subtext:(0,Dr.default)(e).fromNow()}:null}var ra={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)=>na(e.current_subscription?.start_date,t),"subscriptions.current_period_end":(e,t)=>na(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}},ia={"metafields.:namespace.:key":({namespace:e,key:t},{customFields:n})=>{let r=n?.find(n=>n.namespace===e&&n.key===t);return r?{label:r.name,getValue:e=>{let t=Jn(r.type,e.metafields?.[r.namespace]?.[r.key]);return t?{text:t}:null}}:null}};async function aa(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 oa=({children:e,hasFilterOrSearch:t,memberCount:n,nql:r,search:i,canBulkDelete:a,showMenu:o=!0,showNewMember:s=!0,onImportComplete:c})=>{let{isAdmin7:l}=w(),u=v(),d=y(),f=u.pathname===`/members/import`,m=u.search??``,h=u.pathname===`/members`?`${u.pathname}${m}`:`/members`,g=`#/members/new?back=${encodeURIComponent(h)}`,[_,x]=(0,X.useState)(!1),[S,C]=(0,X.useState)(!1),[T,E]=(0,X.useState)(!1),[D,O]=(0,X.useState)(!1),{data:k,isLoading:A}=te({searchParams:{filter:`status:-archived`,limit:`50`}}),j=k?.newsletters||[],{mutateAsync:M,isPending:N}=nt(),{mutate:P,isPending:F}=ht(),[ee,I]=(0,X.useState)(!1),L=ta({nql:r,search:i}),z=(0,X.useCallback)(async()=>{try{await aa(r,i)}catch(e){throw p.error(`Export failed`,{description:`There was a problem downloading your member data. Please check your connection and try again.`}),e}},[r,i]),oe=(0,X.useCallback)(async e=>{try{for(let t of e)await M({...L,action:{type:`addLabel`,meta:{label:{id:t}}}});x(!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.`})}},[M,L]),B=(0,X.useCallback)(async e=>{try{for(let t of e)await M({...L,action:{type:`removeLabel`,meta:{label:{id:t}}}});C(!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.`})}},[M,L]),ce=(0,X.useCallback)(async e=>{let t=L;if(e===null){try{await M({...t,action:{type:`unsubscribe`}}),E(!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}I(!0);try{let n=await Promise.allSettled(e.map(e=>M({...t,action:{type:`unsubscribe`,newsletter:e}}))),r=n.filter(e=>e.status===`fulfilled`).length,i=n.length;E(!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{I(!1)}},[M,L]),le=(0,X.useCallback)(()=>{P(L,{onSuccess:()=>{O(!1),p.success(`Members deleted successfully`)},onError:()=>{p.error(`Failed to delete members`,{description:`There was a problem deleting these members. Please try again.`})}})},[P,L]),V=(0,X.useCallback)(async()=>{try{await aa(r,i)}catch(e){throw p.error(`Export failed`,{description:`There was a problem downloading your backup. Please check your connection and try again.`}),e}},[r,i]),ue=(0,X.useCallback)(()=>{},[]),de=(0,X.useCallback)(()=>{d(`/members/import${m}`)},[m,d]),H=(0,X.useCallback)(e=>{c?.(e)},[c]),U=(0,X.useCallback)(e=>{if(e?.importLabel){d(Nt({filter:`label:[${e.importLabel.slug}]`}),{replace:!0});return}d(`/members${m}`,{replace:!0})},[m,d]);return(0,Z.jsxs)(Z.Fragment,{children:[o&&(0,Z.jsx)(Z.Fragment,{children:(0,Z.jsxs)(gt,{children:[(0,Z.jsx)(Tt,{asChild:!0,children:(0,Z.jsx)(Y.Action,{"data-testid":`members-actions`,label:`More member actions`,iconOnly:!0,children:(0,Z.jsx)(se,{className:`size-4`})})}),(0,Z.jsxs)(Et,{align:`end`,children:[(0,Z.jsxs)(Pt,{onClick:de,children:[(0,Z.jsx)(ye,{className:`mr-2 size-4`}),`Import members`]}),n>0&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(Pt,{onClick:()=>void z(),children:[(0,Z.jsx)(re,{className:`mr-2 size-4`}),t?`Export ${b(n)} members`:`Export all members`]}),(0,Z.jsx)(It,{}),(0,Z.jsxs)(Pt,{onClick:()=>x(!0),children:[(0,Z.jsx)(R,{className:`mr-2 size-4`}),`Add label to `,b(n),` `,n===1?`member`:`members`]}),(0,Z.jsxs)(Pt,{onClick:()=>C(!0),children:[(0,Z.jsx)(ie,{className:`mr-2 size-4`}),`Remove label from `,b(n),` `,n===1?`member`:`members`]}),(0,Z.jsxs)(Pt,{disabled:A,onClick:()=>E(!0),children:[(0,Z.jsx)(ae,{className:`mr-2 size-4`}),`Unsubscribe `,b(n),` `,n===1?`member`:`members`]}),(0,Z.jsx)(It,{}),(0,Z.jsxs)(Pt,{className:`text-destructive focus:text-destructive`,disabled:!a,onClick:()=>O(!0),children:[(0,Z.jsx)(ne,{className:`mr-2 size-4`}),`Delete `,b(n),` `,n===1?`member`:`members`]})]})]})]})}),e,s&&(0,Z.jsx)(Y.ActionGroup.Primary,{children:(0,Z.jsx)(Y.Action,{fallbackVariant:`default`,label:`New member`,asChild:!0,primary:!0,children:(0,Z.jsxs)(`a`,{"aria-label":`New member`,className:`inline-flex items-center data-[control-shape=pill]:w-(--control-height) max-sm:data-[control-shape=pill]:px-0 sm:data-[control-shape=pill]:w-auto`,href:g,children:[(0,Z.jsx)(fe,{className:l?`stroke-2!`:`sm:hidden`}),(0,Z.jsx)(`span`,{className:`hidden sm:inline`,children:`New member`})]})})}),(0,Z.jsx)(ti,{open:f,onClose:U,onComplete:H,onOpenChange:ue}),(0,Z.jsx)(ar,{isLoading:N,memberCount:n,open:_,onConfirm:e=>void oe(e),onOpenChange:x}),(0,Z.jsx)(or,{isLoading:N,memberCount:n,nql:r,open:S,search:i,onConfirm:e=>void B(e),onOpenChange:C}),(0,Z.jsx)(sr,{isLoading:N||ee,memberCount:n,newsletters:j,open:T,onConfirm:e=>void ce(e),onOpenChange:E}),(0,Z.jsx)(cr,{isLoading:F,memberCount:n,open:D,onConfirm:le,onExportBackup:V,onOpenChange:O})]})},sa=({membershipsEnabled:e,onMemberCreated:t})=>{let{data:n,isLoading:r}=c(),{mutateAsync:i,isPending:a}=kt(),o=l(),s=(0,X.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,Z.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Z.jsx)(Re,{actions:(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-2 sm:flex-row`,children:[(0,Z.jsx)(W,{asChild:!0,children:(0,Z.jsx)(_,{to:`/members/new?back=%2Fmembers`,children:`New member`})}),(0,Z.jsx)(W,{disabled:a||r||!n,variant:`outline`,onClick:()=>void s(),children:a?`Adding...`:`Add yourself as a member`})]}),(0,Z.jsxs)(`p`,{className:`text-sm leading-tight text-pretty text-muted-foreground`,children:[`Already have members?`,` `,(0,Z.jsx)(_,{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,Z.jsx)(pe,{})})}):(0,Z.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Z.jsx)(Re,{actions:(0,Z.jsx)(W,{variant:`outline`,asChild:!0,children:(0,Z.jsx)(`a`,{href:`#/settings/members`,children:`Membership settings`})}),description:`Adjust your membership settings to start adding members.`,title:`Memberships have been disabled`,children:(0,Z.jsx)(pe,{})})})},ca=Bt.extend({route:k(`members`),filter:j(P(),P().nullable()).refine(e=>typeof e.filter==`string`&&e.filter.length>0)}),la=`A view with this name already exists`,ua=`Saved view could not be found for update`,da=`Multiple saved views matched update target`,fa=`Saved view could not be found for delete`,pa=`Multiple saved views matched delete target`;function ma(e){return ca.safeParse(e).success}function ha(e){let t=Mt(e);return t.ok?{ok:!0,views:t.views.filter(ma)}:t}function ga(e,t){return{name:e.trim(),route:`members`,filter:{filter:t}}}function _a(e,t,n,r){let i=ga(t,n);if(r){let t=Ft(e,r);if(t.length===0)throw Error(ua);if(t.length>1)throw Error(da);let n=t[0];if(zt(e,i,n))throw Error(la);return e.map((e,t)=>t===n?i:e)}if(zt(e,i))throw Error(la);return[...e,i]}function va(e,t){let n=Ft(e,t);if(n.length===0)throw Error(fa);if(n.length>1)throw Error(pa);let r=n[0];return e.filter((e,t)=>t!==r)}var ya=`Cannot modify saved views because shared_views is invalid`;function ba(e){return Vt(e?.settings??null,`shared_views`)??`[]`}function xa(){let{data:e}=_t(),t=l(),n=ba(e),r=(0,X.useRef)(null),i=(0,X.useMemo)(()=>ha(n),[n]);return(0,X.useEffect)(()=>{i.ok||r.current===n||(r.current=n,t(i.error,{withToast:!1}))},[t,i,n]),i.ok?i.views:[]}function Sa(){let{data:e}=_t(),{mutateAsync:t}=Ht(),n=l();return(0,X.useCallback)(async(r,i,a)=>{let o=Mt(ba(e));if(!o.ok){let e=Error(ya,{cause:o.error});throw n(e,{withToast:!1}),e}let s=_a(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 Ca(){let{data:e}=_t(),{mutateAsync:t}=Ht(),n=l();return(0,X.useCallback)(async r=>{let i=Mt(ba(e));if(!i.ok){let e=Error(ya,{cause:i.error});throw n(e,{withToast:!1}),e}let a=va(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 wa(e,t){return(0,X.useMemo)(()=>!t||e.length===0?null:e.find(e=>e.filter.filter===t)??null,[e,t])}var Ta=({filter:e,existingViews:t,activeView:n,onDeleted:r,onClose:i})=>{let[a,o]=(0,X.useState)(()=>n?.name??``),[s,c]=(0,X.useState)(``),[l,u]=(0,X.useState)(!1),[d,f]=(0,X.useState)(!1),[p,m]=(0,X.useState)(!1),h=Sa(),g=Ca(),_=!!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,Z.jsx)(Xe,{align:`end`,className:`w-72`,children:(0,Z.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Z.jsx)(`h3`,{className:`text-sm font-semibold`,children:_?`Edit view`:`Save view`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Z.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,Z.jsx)(`p`,{className:`text-xs text-red-500`,children:s})]}),_?p?(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Delete view?`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(W,{size:`sm`,variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Z.jsx)(W,{disabled:d,size:`sm`,variant:`destructive`,onClick:()=>void y(),children:d?`Deleting...`:`Delete`})]})]}):(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsx)(W,{className:`text-red hover:bg-red/5 hover:text-red`,size:`sm`,variant:`ghost`,onClick:()=>m(!0),children:`Delete`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(W,{size:`sm`,variant:`outline`,onClick:i,children:`Cancel`}),(0,Z.jsx)(W,{disabled:l||!a.trim(),size:`sm`,onClick:()=>void v(),children:l?`Saving...`:`Save`})]})]}):(0,Z.jsx)(W,{className:`w-full`,disabled:l||!a.trim(),onClick:()=>void v(),children:l?`Saving...`:`Save`})]})})},Ea=({filter:e,existingViews:t,activeView:n,onDeleted:r})=>{let[i,a]=(0,X.useState)(!1),o=n?`edit:${n.name}:${n.filter.filter}`:`save:${e}`;return(0,Z.jsxs)(st,{open:i,onOpenChange:a,children:[(0,Z.jsx)(bt,{asChild:!0,children:(0,Z.jsx)(Jt.Action,{variant:`outline`,children:n?`Edit view`:`Save view`})}),i&&(0,Z.jsx)(Ta,{activeView:n,existingViews:t,filter:e,onClose:()=>a(!1),onDeleted:r},o)]})},Da=kn(li);function Oa(e,t){let n=e.operators?.length?e.operators:Da,r=t===`whole`?li:t?[...ln[t].operators,...li]:null,i=r?n.filter(e=>tn(r,e.value)):n,a=i.map(e=>e.value);return{options:i,ids:a,fallback:a[0]??`is-set`}}var ka=({field:e,values:t,onChange:n,operator:r,onOperatorChange:i,readOnly:a})=>{let{data:o}=Zn(),s=o??[],c=oi(e.key??``)?.key??``,l=s.find(e=>e.key===c),u=l?(Hn(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=l?vi(l.type,p):void 0,g=f?h??`whole`:null,{options:_,ids:v,fallback:y}=Oa(e,g);(0,X.useEffect)(()=>{a||!i||v.includes(r)||i(y)},[a,r,v,y,i]);let b=!tn(li,r),x=[{value:``,label:`Any`},...u],S=(0,X.useMemo)(()=>t.slice(1).filter(e=>e!==``),[t]);return(0,Z.jsxs)(Z.Fragment,{children:[f&&(0,Z.jsx)(Gt,{ariaLabel:`${d} part`,options:x,readOnly:a,testId:`custom-field-filter-subfield`,value:p,onChange:e=>{n(l&&vi(l.type,e)===h?[e,...m]:[e])}}),i&&(0,Z.jsx)(Gt,{ariaLabel:`${d} operator`,options:_,readOnly:a,testId:`custom-field-filter-operator`,value:r,onChange:i}),b&&g===`set`&&(0,Z.jsx)(qt,{ariaLabel:`${d} value`,options:Un(S),placeholder:`Select countries...`,readOnly:a,searchPlaceholder:`Search countries...`,testId:`custom-field-filter-value`,values:S,onChange:e=>n([p,...e])}),b&&g!==`set`&&(0,Z.jsx)(Kt,{ariaLabel:`${d} value`,placeholder:`Enter value...`,readOnly:a,testId:`custom-field-filter-value`,value:m[0]??``,onChange:e=>n([p,e])})]})};function Aa({newsletters:e,customFields:t}={}){return[{resolved:!0,fields:Yi},Mi(e),wi(t)]}function ja(e={}){return!e.newsletters&&!e.customFields?Xi:Tn(Aa(e))}function Ma(e,t={}){return _n(e,Aa(t))}var Na=[`name`,`email`,`label`,`subscribed`,`last_seen_at`,`created_at`,`signup`],Pa=[`tier_id`,`status`,Ri,`subscriptions.plan_interval`,`subscriptions.status`,`subscriptions.start_date`,`subscriptions.current_period_end`,`conversion`,`offer_redemptions`],Fa=[`email_count`,`email_opened_count`,`email_open_rate`,`emails.post_id`,`opened_emails.post_id`,`clicked_links.post_id`,`newsletter_feedback`],Ia=[],La=[],Ra=[],za=[],Ba=[],Va=5,Ha={"is-any":`is any of`,"is-not-any":`is none of`,"does-not-contain":`does not contain`,...rn,1:`More like this`,0:`Less like this`};function Ua(e,t){return{options:e,valueSource:t}}function Wa(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 Ga(e){return Array.isArray(e.metadata?.offerIds)?e.metadata.offerIds.filter(e=>typeof e==`string`):null}function Ka(e){let t=[],n=Wa(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 qa(e,t){let n=[],r=new Set;for(let i of t){let t=Ga(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 Ja(e,t){let n=[];for(let r of e){let e=t.find(e=>e.value===r),i=e?Ga(e):null;i?n.push(...i):n.push(r)}return[...new Set(n)]}function Ya(e){return new Map(e.map(e=>[e.id,e.name]))}function Xa(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 Za({labelValueSource:e,tierValueSource:t,newsletters:n=Ia,hydratedNewsletterSlugs:r=La,hasMultipleTiers:i=!1,paidMembersEnabled:a=!1,emailFiltersEnabled:o=!1,postValueSource:s,emailValueSource:c,offers:l=Ra,multipleActiveSubscriptionsCount:u=0,membersTrackSources:d=!1,emailTrackOpens:f=!1,emailTrackClicks:p=!1,customFields:m=za,archivedCustomFields:h=Ba,siteTimezone:g=`UTC`}){let _=(0,X.useMemo)(()=>ja({newsletters:[...n,...r.filter(e=>!n.some(t=>t.slug===e)).map(e=>({slug:e,name:e}))],customFields:[...m,...h]}),[n,r,m,h]);return(0,X.useMemo)(()=>{function v(e,t={},n=Ha){let r=hn(e,`newsletters`)?_[`newsletters.:slug`]:hn(e,`metafields.`)?_[`metafields.:namespace.:key`]:void 0,i=_[e]??r;return{key:e,...i.ui,icon:Dn[i.ui.icon],operators:kn(i.operators,{labels:{...n,...i.operatorLabels}}),...`options`in i&&i.options?{options:i.options}:{},...t}}function y(e,t,n={}){let r=_[e],i=v(e,{defaultValue:t,...n});return an(r)?{...i,customRenderer:vn(t)}:i}let b=[],x=n.filter(e=>e.status!==`archived`),S=new Set(x.map(e=>e.slug)),C=[...new Set(r)].map(e=>({slug:e,name:n.find(t=>t.slug===e)?.name??e})),w=C.filter(e=>!S.has(e.slug)),T=Ka(l),E=Ya(l),D=sn(g),O=x.length<=1,k={label:!!e,subscribed:O,signup:d},A=Na.filter(e=>k[e]??!0).flatMap(t=>{switch(t){case`label`:return[v(t,{...Ua([],e),customRenderer:e=>X.createElement(tr,e)})];case`subscribed`:return[v(t),...C.map(e=>v(`newsletters.${e.slug}`,{label:e.name}))];case`last_seen_at`:case`created_at`:return[y(t,D)];case`signup`:return[v(t,Ua([],s))];default:return[v(t)]}});b.push({group:`Basic`,fields:A});let j=m.map(e=>v($(e),{label:e.name,icon:X.createElement(rr,{type:e.type,className:`size-4`}),renderOperatorInValue:!0,customRenderer:e=>X.createElement(ka,e)})),M=h.map(e=>v($(e),{label:e.name,icon:X.createElement(oe,{className:`size-4`}),readOnly:!0,renderOperatorInValue:!0,customRenderer:e=>X.createElement(ka,e)})),N=[...j,...M];if(N.length>0&&b.push({group:`Custom fields`,fields:N,previewLimit:Va}),x.length>1){let e=[v(`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 x)e.push(v(`newsletters.${t.slug}`,{label:t.name}));for(let t of w)e.push(v(`newsletters.${t.slug}`,{label:t.name}));b.push({group:`Newsletters`,fields:e})}if(a){let e={tier_id:i,[Ri]:u>0,conversion:d,offer_redemptions:l.length>0},n=Pa.filter(t=>e[t]??!0).map(e=>{switch(e){case`tier_id`:return v(e,Ua([],t));case`status`:return v(e,{options:[..._.status?.options??[],{value:`gift`,label:`Gift subscription`}]});case`subscriptions.start_date`:case`subscriptions.current_period_end`:return y(e,D);case`conversion`:return v(e,Ua([],s));case`offer_redemptions`:return v(e,{options:T,customValueRenderer:e=>Xa(e,T,E)});default:return v(e)}});b.push({group:`Subscription`,fields:n})}if(o){let e={email_open_rate:f,"opened_emails.post_id":f,"clicked_links.post_id":p},t=new Set([`email_count`,`email_opened_count`,`email_open_rate`]),n=Fa.filter(t=>e[t]??!0).map(e=>t.has(e)?v(e):v(e,Ua([],c)));b.push({group:`Email`,fields:n})}return b},[_,o,c,p,f,i,e,d,u,n,l,r,a,s,g,t])}var Qa=[],$a=[],eo=[],to=[];function no(e,t){let n=[...new Set(e.map(e=>e.field).map(e=>gn(e,t)).filter(e=>e!==null))].sort().join(`
|
|
3
|
+
`);return(0,X.useMemo)(()=>n?n.split(`
|
|
4
|
+
`):to,[n])}function ro(e,t){return e.map(e=>e.field===`offer_redemptions`?{...e,values:t(e.values)}:e)}var io=({filters:e,multipleActiveSubscriptionsCount:t,nql:n,onFiltersChange:r,savedViews:i=[],activeView:a,iconOnly:o=!1})=>{let{data:s}=m({}),{data:c}=te({searchParams:{limit:`100`}}),{data:l}=_t({}),u=l?.settings||[],d=At()===!0,f=ft()??!0,p=Ze()===!0,h=$e()===!0,g=yt()===!0,_=Xt(u),v=c?.newsletters??eo,y=(0,X.useMemo)(()=>s?.offers??Qa,[s?.offers]),b=(0,X.useMemo)(()=>Ka(y),[y]),x=no(e,`newsletters.`),C=(0,X.useMemo)(()=>ro(e,e=>qa(e,b)),[e,b]),T=(0,X.useCallback)(e=>{r(ro(e,e=>Ja(e,b)))},[r,b]),E=Pn(),D=Mn(),O=Nn(),{valueSource:k,hasMultipleTiers:A}=Fn(),{data:j}=Zn(),M=j??$a,N=(0,X.useMemo)(()=>M.filter(e=>e.status===`active`),[M]),P=no(e,ai),F=(0,X.useMemo)(()=>new Set(P),[P]),ee=Za({newsletters:v,hydratedNewsletterSlugs:x,hasMultipleTiers:A,paidMembersEnabled:d,emailFiltersEnabled:f,labelValueSource:O,tierValueSource:k,offers:y,multipleActiveSubscriptionsCount:t,postValueSource:E,emailValueSource:D,membersTrackSources:p,emailTrackOpens:h,emailTrackClicks:g,siteTimezone:_,customFields:N,archivedCustomFields:(0,X.useMemo)(()=>M.filter(e=>e.status===`archived`&&F.has(`${e.namespace}.${e.key}`)).map(e=>({namespace:e.namespace,key:e.key,name:e.name,type:e.type})),[M,F])}),I=e.length>0,{isAdmin7:L}=w(),ne=Ct(`postsListReact`),R=!L&&!ne,re=I?(0,Z.jsxs)(Jt.Actions,{className:S(R&&`gap-4`),"data-testid":`members-filter-actions`,gap:R?void 0:`sm`,children:[(0,Z.jsxs)(Jt.Action,{className:S(`hidden items-center lg:inline-flex`,!L&&`text-muted-foreground hover:text-foreground`,R&&`gap-1 !px-0 text-sm font-normal hover:bg-transparent`),type:`button`,variant:!L&&ne?`outline`:`ghost`,onClick:()=>r([]),children:[R&&(0,Z.jsx)(ue,{className:`size-4`}),`Clear`]}),n&&(0,Z.jsx)(Ea,{activeView:a,existingViews:i,filter:n,onDeleted:()=>r([])})]}):void 0;return(0,Z.jsx)(Wt,{addButton:(0,Z.jsx)(Wt.Trigger,{collapseLabel:o,fallbackClassName:`bg-background`,fallbackStyle:ne?`list`:`funnel`}),allowMultiple:!0,className:S(`[&>button]:order-last`,I?`sm:!pr-40`:`w-auto`),clearButton:re,fields:ee,filters:C,keyboardShortcut:`f`,popoverAlign:`start`,popoverContentClassName:`z-[80] w-[280px] [&_[data-slot=command-list]]:max-h-[450px]`,showClearButton:I,showSearchInput:!0,onChange:T})},ao=({search:e,onSearchChange:t,autoFocus:n=!1,collapsible:r=!1,ariaLabel:i=`Search members`})=>{let{controlShape:a,isAdmin7:o}=w(),[s,c]=(0,X.useState)(!1),l=(0,X.useRef)(!1),u=!r||s||e.length>0,d=i===`Search members mobile`?`members-mobile-search-input`:`members-search-input`,f=(0,Z.jsxs)(Ge,{className:S(`h-(--control-height) min-w-0`,r?`w-full`:`basis-full lg:w-[180px] lg:basis-auto xl:w-[240px]`),shape:a,variant:o?`secondary`:`default`,children:[(0,Z.jsx)(We,{children:(0,Z.jsx)(he,{className:`size-4`,strokeWidth:r?2:1.75})}),(0,Z.jsx)(Ue,{"aria-label":i,autoFocus:n||r&&s,className:`!h-[34px] min-w-0`,"data-testid":d,placeholder:`Search members...`,value:e,onBlur:()=>{r&&!e&&c(!1)},onChange:e=>t(e.target.value),onFocus:()=>{r&&c(!0)},onKeyDown:t=>{r&&t.key===`Escape`&&!e&&(t.preventDefault(),t.stopPropagation(),l.current=!0,c(!1))}})]});return r?(0,Z.jsx)(T,{className:S(`shrink-0 transition-[width] duration-(--duration-base) motion-reduce:transition-none`,u?`w-[160px] sm:w-[180px] xl:w-[240px]`:`w-(--control-height)`),children:u?f:(0,Z.jsx)(Y.Action,{ref:e=>{e&&l.current&&(e.focus(),l.current=!1)},label:`Search members`,type:`button`,iconOnly:!0,onClick:()=>c(!0),children:(0,Z.jsx)(he,{className:`size-4 stroke-2!`})})}):f},oo=({children:e,description:t,title:n,url:r})=>(0,Z.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,Z.jsxs)(`div`,{className:`flex items-center gap-6`,children:[e,(0,Z.jsxs)(`div`,{className:`flex flex-col leading-tight`,children:[(0,Z.jsx)(`h4`,{className:`text-md font-medium tracking-normal text-pretty text-foreground`,children:n}),(0,Z.jsx)(`p`,{className:`mt-1.5 text-sm leading-tight text-pretty text-muted-foreground`,children:t})]})]})}),so=`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`,co=()=>(0,Z.jsxs)(`div`,{className:`grid w-full grid-cols-1 gap-4 lg:grid-cols-2`,children:[(0,Z.jsx)(oo,{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,Z.jsx)(`div`,{className:S(so,`bg-gradient-to-tr from-[#22C55E]/20 to-[#84CC16]/20`),children:(0,Z.jsx)(U,{className:`text-[#16A34A]`,size:20,strokeWidth:1.5})})}),(0,Z.jsx)(oo,{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,Z.jsx)(`div`,{className:S(so,`bg-gradient-to-tl from-[#A855F7]/20 to-[#EC4899]/20`),children:(0,Z.jsx)(z,{className:`text-[#DB2777]`,size:20,strokeWidth:1.5})})})]});function lo(e,t){let n=new URLSearchParams;t&&n.set(`back`,t);let r=n.toString();return`/members/${e}${r?`?${r}`:``}`}var uo={left:`100%`};function fo(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 po(e){switch(e){case`paid`:return`Paid`;case`comped`:return`Complimentary`;case`gift`:return`Gift`;default:return`Free`}}function mo(e){return e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey}function ho(e,t){window.open(`#${lo(e,t)}`,`_blank`,`noopener`)}function go({item:e,backPath:t,onClick:n}){return(0,Z.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,Z.jsx)(vt,{className:`size-8 min-w-8`,...Lt(e),src:e.avatar_image}),(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(_,{className:`block min-w-0 cursor-pointer`,to:lo(e.id,t),onClick:n?t=>{if(mo(t)){t.stopPropagation();return}t.preventDefault(),t.stopPropagation(),n(e.id)}:void 0,children:(0,Z.jsx)(`span`,{className:`block truncate text-md font-semibold`,children:e.name||e.email||`Anonymous`})}),e.name&&e.email&&(0,Z.jsx)(`div`,{className:`truncate text-muted-foreground`,"data-testid":`member-email`,children:e.email})]})]})}function _o({status:e,tiers:t}){let n=t?.map(e=>e.name).join(`, `);return(0,Z.jsx)(`div`,{className:`flex min-w-0 justify-start`,children:(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`div`,{className:`truncate`,children:po(e)}),n&&(0,Z.jsx)(`div`,{className:`truncate text-sm text-muted-foreground`,children:n})]})})}function vo({emailOpenRate:e}){let t=e!=null;return(0,Z.jsx)(`div`,{className:S(`text-base`,t?`text-foreground`:`text-muted-foreground`),children:t?C(e/100):`N/A`})}function yo({geolocation:e}){let t=fo(e);return(0,Z.jsx)(`div`,{className:S(`truncate text-base`,t.isKnown?`text-foreground`:`text-muted-foreground`),children:t.text})}function bo({createdAt:e}){return(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`div`,{className:`text-base`,children:Dr.default.utc(e).format(`D MMM YYYY`)}),(0,Z.jsx)(`div`,{className:`text-base text-muted-foreground`,children:Dr.default.utc(e).fromNow()})]})}function xo({column:e,member:t,timezone:n}){let r=e.getValue(t,n);return r?(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`div`,{className:`truncate text-base`,title:r.text,children:r.text}),r.subtext&&(0,Z.jsx)(`div`,{className:`truncate text-base text-muted-foreground`,title:r.subtext,children:r.subtext})]}):(0,Z.jsx)(`span`,{className:`text-base text-muted-foreground`,children:`-`})}var So=(0,X.forwardRef)(function({item:e,activeColumns:t,backPath:n,columnStyles:r,showPinnedEdge:i,showEmailOpenRate:a,timezone:o,onClick:s,...c},l){let u=t=>{if(mo(t)){ho(e.id,n);return}s(e.id)},d=t=>{t.button===1&&(t.preventDefault(),ho(e.id,n))};return(0,Z.jsxs)(K,{...c,ref:l,className:S(`group cursor-pointer`,c.className),"data-testid":`members-list-item`,onAuxClick:d,onClick:u,children:[(0,Z.jsxs)(q,{className:S(`min-w-0 bg-background px-4 py-3 group-hover:bg-table-row-hover max-sm:!w-full max-sm:!min-w-0 lg:sticky lg:left-0 lg:z-20`),children:[(0,Z.jsx)(go,{backPath:n,item:e,onClick:s}),i&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] group-hover:opacity-0 lg:block`,style:{...uo,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,Z.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:{...uo,background:`linear-gradient(to right, var(--table-row-hover) 0px, color-mix(in hsl, var(--table-row-hover) 78%, transparent) 6px, color-mix(in hsl, var(--table-row-hover) 28%, transparent) 16px, transparent 24px)`}})]})]}),(0,Z.jsx)(q,{className:`hidden px-4 py-3 sm:table-cell`,style:r.status,children:(0,Z.jsx)(_o,{status:e.status,tiers:e.tiers})}),a&&(0,Z.jsx)(q,{className:`hidden px-4 py-3 lg:table-cell`,style:r.openRate,children:(0,Z.jsx)(vo,{emailOpenRate:e.email_open_rate})}),(0,Z.jsx)(q,{className:`hidden px-4 py-3 lg:table-cell`,style:r.location,children:(0,Z.jsx)(yo,{geolocation:e.geolocation})}),(0,Z.jsx)(q,{className:`hidden px-4 py-3 lg:table-cell`,style:r.created,children:(0,Z.jsx)(bo,{createdAt:e.created_at})}),t.map(t=>(0,Z.jsx)(q,{className:`hidden px-4 py-3 lg:table-cell`,style:r.dynamic,children:(0,Z.jsx)(xo,{column:t,member:e,timezone:o})},t.key))]})}),Co={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)`},wo=({activeColumns:e,columnStyles:t,showEmailOpenRate:n})=>(0,Z.jsxs)(`colgroup`,{children:[(0,Z.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,Z.jsx)(`col`,{className:`hidden sm:table-column`,style:t.status}),n&&(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.openRate}),(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.location}),(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.created}),e.map(e=>(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.dynamic},e.key))]}),To=({activeColumns:e,className:t,columnStyles:n,headerRef:r,memberHeaderRef:i,showEmailOpenRate:a})=>(0,Z.jsx)(qe,{ref:r,className:S(`hidden bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,t),children:(0,Z.jsxs)(K,{children:[(0,Z.jsx)(G,{ref:i,className:`sticky left-0 z-[70] bg-transparent px-4 [--members-sticky-fade-base:var(--background)]`,style:n.member,children:`Member`}),(0,Z.jsx)(G,{className:`bg-transparent px-4`,style:n.status,children:`Status`}),a&&(0,Z.jsx)(G,{className:`bg-transparent px-4`,style:n.openRate,children:`Open rate`}),(0,Z.jsx)(G,{className:`bg-transparent px-4`,style:n.location,children:`Location`}),(0,Z.jsx)(G,{className:`bg-transparent px-4`,style:n.created,children:`Created`}),e.map(e=>(0,Z.jsx)(G,{className:`bg-transparent px-4`,style:n.dynamic,children:e.label},e.key))]})}),Eo=({columnStyle:e,showPinnedEdge:t})=>(0,Z.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,Z.jsxs)(Je,{className:`w-full table-fixed border-collapse`,children:[(0,Z.jsx)(`colgroup`,{children:(0,Z.jsx)(`col`,{style:{width:`100%`}})}),(0,Z.jsx)(qe,{className:`bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,children:(0,Z.jsx)(K,{children:(0,Z.jsx)(G,{className:`bg-transparent px-4`,children:`Member`})})})]}),t&&(0,Z.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px w-[24px]`,style:Co})]}),Do={member:40,status:15,openRate:10,location:17.5,created:17.5},Oo={member:320,status:180,openRate:140,location:180,created:160},ko=17.5,Ao=220;function jo(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0}function Mo({showEmailOpenRate:e,activeColumnCount:t}){let n=[{key:`member`,width:Do.member},{key:`status`,width:Do.status},...e?[{key:`openRate`,width:Do.openRate}]:[],{key:`location`,width:Do.location},{key:`created`,width:Do.created}],r=jo(t),i=n.reduce((e,t)=>e+t.width,0),a=100+r*ko,o=ko/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+Oo[t.key],0)+r*Ao,dynamicColumnWidthPercentage:o,baseColumnWidthPercentages:s,baseColumnMinWidths:{member:Oo.member,status:Oo.status,openRate:Oo.openRate,location:Oo.location,created:Oo.created},dynamicColumnMinWidth:Ao}}function No(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 Po=({height:e})=>(0,Z.jsx)(`tr`,{"aria-hidden":`true`,style:{height:e},children:(0,Z.jsx)(`td`,{colSpan:999})}),Fo=(0,X.forwardRef)(function(e,t){return(0,Z.jsx)(K,{ref:t,...e,"aria-hidden":`true`,children:(0,Z.jsx)(q,{className:`h-[72px] px-4 py-3`,colSpan:999,children:(0,Z.jsx)(`div`,{className:`h-full animate-pulse rounded-md bg-muted`,"data-testid":`loading-placeholder`})})})});function Io({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,X.useRef)(null),p=(0,X.useRef)(null),m=(0,X.useRef)(null),h=(0,X.useRef)(null),g=(0,X.useRef)(null),[_,v]=(0,X.useState)(0),[b,x]=(0,X.useState)(0),[S,C]=(0,X.useState)(!1),{visibleItemCount:w,canLoadMore:T,loadMore:E}=Rn(t),D=(0,X.useMemo)(()=>Mo({showEmailOpenRate:s,activeColumnCount:c.length}),[c.length,s]),{tableStyle:O,columnStyles:k}=(0,X.useMemo)(()=>No(D),[D]);Ln({parentRef:f,isLoading:o}),(0,X.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,X.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}=In({items:e,totalItems:w,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,parentRef:f,estimateSize:()=>72}),N=y(),P=e=>{d?d(e):N(lo(e,n))};return(0,Z.jsxs)(`div`,{ref:f,className:`w-full min-w-0`,"data-testid":`members-list-scroll-root`,children:[(0,Z.jsx)(`div`,{className:`sticky z-[50] hidden overflow-visible bg-transparent lg:block`,style:{top:b},children:(0,Z.jsxs)(`div`,{className:`relative`,children:[(0,Z.jsx)(Eo,{columnStyle:_>0?{width:_}:k.member,showPinnedEdge:S}),(0,Z.jsx)(`div`,{ref:h,className:`w-full overflow-hidden`,style:_>0?{clipPath:`inset(0 0 0 ${_}px)`}:void 0,children:(0,Z.jsxs)(Je,{"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,Z.jsx)(wo,{activeColumns:c,columnStyles:k,showEmailOpenRate:s}),(0,Z.jsx)(To,{activeColumns:c,columnStyles:k,headerRef:p,memberHeaderRef:m,showEmailOpenRate:s})]})})]})}),(0,Z.jsx)(`div`,{ref:g,className:`w-full overflow-x-auto overflow-y-visible`,children:(0,Z.jsxs)(Je,{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,Z.jsx)(wo,{activeColumns:c,columnStyles:k,showEmailOpenRate:s}),(0,Z.jsx)(To,{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,Z.jsxs)(Ke,{children:[(0,Z.jsx)(Po,{height:j}),A.map(({key:t,virtualItem:r,item:i,props:a})=>r.index>e.length-1?(0,Z.jsx)(Fo,{...a},t):(0,Z.jsx)(So,{...a,activeColumns:c,backPath:n,columnStyles:k,item:i,showEmailOpenRate:s,showPinnedEdge:S,timezone:l,onClick:P},t)),(0,Z.jsx)(Po,{height:M})]})]})}),T&&(0,Z.jsx)(zn,{isLoading:i,onClick:E})]})}function Lo({count:e,hasResolvedCount:t,nql:n,search:r}){let i=y(),{data:a}=c(),{mutateAsync:o,isPending:s}=D(),[l,u]=(0,X.useState)(null),d=Vi(n),f=!r&&(!n||d),m=(0,X.useMemo)(()=>Ui(a?.accessibility),[a?.accessibility]),h=l??m.dismissedCount??0,g=!d,_=f&&(d||e>h);return(0,X.useEffect)(()=>{let n=m.dismissedCount;!a||l!==null||s||n===void 0||!t||e>=n||(u(e),o(Gi(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,X.useCallback)(()=>{if(!a||s)return;let t=l;u(e),o(Gi(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,X.useCallback)(()=>{i(Nt({filter:zi}))},[i]),shouldShow:_}}var Ro=({count:e,hasResolvedCount:t,nql:n,search:r})=>{let i=Lo({count:e,hasResolvedCount:t,nql:n,search:r});return i.shouldShow?(0,Z.jsx)(Ut,{role:`status`,variant:`warning`,...i.canDismiss?{dismissible:!0,onDismiss:i.handleDismiss}:{dismissible:!1},children:(0,Z.jsxs)(`div`,{className:`flex flex-col items-baseline gap-3 pr-8 sm:flex-row`,children:[`We found `,b(i.count),` `,i.count===1?`member`:`members`,` with more than one active paid subscription.`,` `,(0,Z.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[i.canDismiss&&(0,Z.jsx)(`button`,{className:`nowrap font-semibold !underline`,type:`button`,onClick:i.handleViewMembers,children:`View members`}),(0,Z.jsx)(`a`,{className:`nowrap font-semibold underline`,href:`https://ghost.org/help/duplicate-subscription-warning/`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]})}):null},zo=[`subscriptions.plan_interval`,`subscriptions.status`,`subscriptions.start_date`,`subscriptions.current_period_end`,`conversion`,`offer_redemptions`,Ri];function Bo(e,t){return t&&e.length===0?!1:!e.some(e=>zo.includes(e.field))}function Vo({isFetching:e,isFetchingNextPage:t}){return e&&!t}var Ho=En(Xi,`date`);function Uo(e,t=Xi){return bn(e,t)}function Wo(e,t,n=Xi){let r=On(e??``);return r?wn(pn(r,n,t)):[]}function Go(e){let t=On(e??``);return t?fn(t,Ho):!1}function Ko(e,t,n=Xi){return mn(e,n,t)}function qo(e,{hasResolvedSettings:t,isLoadingSettings:n=!t,newsletters:r,customFields:i}){return e?n&&!t&&Go(e)||!Ma(e,{newsletters:r,customFields:i}):!1}function Jo(e,t){return e.filter(e=>Uo(e,t))}function Yo({baseSearchParams:e,filters:t,search:n,timezone:r,fields:i}){let a=new URLSearchParams(e),o=Ko(Jo(t,i),r,i);return a.delete(`filter`),a.delete(`search`),o&&a.set(`filter`,o),n&&a.set(`search`,n),a}function Xo(e,t,n){let r=(0,X.useMemo)(()=>ja({newsletters:t,customFields:n}),[t,n]),[i,a]=g(),o=(0,X.useRef)(null),s=(0,X.useRef)(!1),c=(0,X.useMemo)(()=>i.get(`filter`)??void 0,[i]),l=(0,X.useMemo)(()=>i.toString(),[i]),u=(0,X.useMemo)(()=>Jo(Wo(c,e,r),r),[c,e,r]),[d,f]=(0,X.useState)(u),p=(0,X.useMemo)(()=>i.get(`search`)??``,[i]),m=(0,X.useMemo)(()=>Ko(Jo(d,r),e,r),[d,e,r]);return(0,X.useEffect)(()=>{l!==o.current&&(s.current=o.current!==null,f(u),o.current=l)},[l,u]),(0,X.useEffect)(()=>{if(s.current){s.current=!1;return}if(o.current!==null&&l!==o.current)return;let t=Yo({baseSearchParams:i,filters:d,search:p,timezone:e,fields:r}),n=t.toString();n!==l&&(o.current=n,a(t,{replace:!0}))},[l,d,p,i,a,e,r]),{filters:d,nql:m,search:p,setFilters:(0,X.useCallback)((t,n={})=>{let s=n.replace??!0,c=Yo({baseSearchParams:i,filters:t,search:p,timezone:e,fields:r});f(t),o.current=c.toString(),a(c,{replace:s})},[p,i,a,e,r]),setSearch:(0,X.useCallback)((t,n={})=>{let s=n.replace??!0,c=Yo({baseSearchParams:i,filters:d,search:t,timezone:e,fields:r});o.current=c.toString(),a(c,{replace:s})},[d,i,a,e,r]),clearFilters:(0,X.useCallback)(({replace:t=!0}={})=>{let n=Yo({baseSearchParams:i,filters:[],search:p,timezone:e,fields:r});f([]),o.current=n.toString(),a(n,{replace:t})},[p,i,a,e,r]),clearAll:(0,X.useCallback)(({replace:t=!0}={})=>{let n=Yo({baseSearchParams:i,filters:[],search:``,timezone:e,fields:r});f([]),o.current=n.toString(),a(n,{replace:t})},[i,a,e,r]),hasFilterOrSearch:!!m||p.length>0}}var Zo=`newsletters`,Qo=[],$o=[];function es(e){let t=Cn(e,Zo),{data:n,isError:r}=te({searchParams:{limit:`100`},enabled:t}),{data:i,isError:a}=Zn();return{newsletters:!t||r?Qo:n?.newsletters,customFields:a?$o:i}}function ts({enabled:e}){let{data:t}=lt({searchParams:{filter:zi,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 ns=250,rs=6,is=({emailAnalyticsEnabled:e,hasStripeEnabled:t,membershipsEnabled:r,timezone:i})=>{let{isAdmin7:a}=w(),o=(0,X.useRef)(null),s=(0,X.useCallback)(e=>{o.current=e?.closest(`[data-list-page="header"]`)},[]),[c]=g(),{newsletters:l,customFields:u}=es(c.get(`filter`)??void 0),{filters:d,nql:f,search:p,setFilters:m,setSearch:h,hasFilterOrSearch:_,clearAll:y}=Xo(i,l,u),x=v(),C=xa(),D=wa(C,f),[O,k]=(0,X.useState)(a&&p.length>0),[A,j]=(0,X.useState)(!1),[M,N]=(0,X.useState)(p),P=ot(e=>{h(e)},ns),{count:F,hasResolvedCount:ee}=ts({enabled:t}),te=(0,X.useMemo)(()=>Qi(d,{customFields:u}),[d,u]),I=(0,X.useMemo)(()=>Bo(d,f),[d,f]),{data:L,isError:ne,isFetching:R,isFetchingNextPage:re,refetch:z,fetchNextPage:ie,hasNextPage:ae}=dt({searchParams:(0,X.useMemo)(()=>ea({filters:d,nql:f,search:p}),[d,f,p]),placeholderData:n}),oe=Vo({isFetching:R,isFetchingNextPage:re}),B=L?.meta?.pagination?.total??0,se=d.length>0,ce=O,le=se,V=_||B>0,ue=!_&&!oe&&!ne&&B<rs;(0,X.useEffect)(()=>{N(p),P.cancel(),a&&p&&k(!0)},[p,P,a]);let de=e=>{N(e),P(e)},H=()=>{if(O){k(!1),j(!1);return}j(!0),k(!0)},fe=()=>{P.cancel(),N(``),y({replace:!1})},U=V&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(T,{className:`hidden lg:flex`,children:(0,Z.jsx)(ao,{collapsible:a,search:M,onSearchChange:de})}),a?(0,Z.jsx)(Y.Action,{"aria-expanded":O,className:`lg:hidden`,label:O?`Hide member search`:`Show member search`,iconOnly:!0,onClick:H,children:(0,Z.jsx)(he,{})}):(0,Z.jsx)(W,{"aria-label":O?`Hide member search`:`Show member search`,className:S(`lg:hidden`,O&&`bg-secondary hover:bg-secondary`),variant:`outline`,onClick:H,children:(0,Z.jsx)(he,{className:`size-4`})})]}),me=V&&!se&&(0,Z.jsx)(io,{activeView:D,filters:d,iconOnly:!a,multipleActiveSubscriptionsCount:F,nql:f,savedViews:C,onFiltersChange:m}),ge=V&&ce&&(0,Z.jsx)(T,{className:`w-full lg:hidden`,children:(0,Z.jsx)(ao,{ariaLabel:`Search members mobile`,autoFocus:A,search:M,onSearchChange:de})});return(0,Z.jsx)(T,{className:`size-full`,children:(0,Z.jsx)(E,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Z.jsxs)(Zt,{"data-testid":`members-page`,children:[(0,Z.jsx)(Zt.Header,{className:`py-4 sidebar:py-5`,children:(0,Z.jsxs)(`div`,{ref:s,className:`flex flex-col gap-4 sidebar:gap-6`,children:[(0,Z.jsxs)(Y,{blurredBackground:!1,sticky:!1,children:[(0,Z.jsx)(Y.Left,{children:(0,Z.jsxs)(Y.Title,{children:[`Members`,` `,!oe&&B>0&&(0,Z.jsx)(Y.Count,{className:`hidden sm:inline`,children:b(B)})]})}),(0,Z.jsx)(Y.Actions,{children:(0,Z.jsxs)(Y.ActionGroup,{className:`ml-auto flex-wrap justify-end sm:ml-0 sm:flex-nowrap`,children:[U,!a&&me,(0,Z.jsx)(oa,{canBulkDelete:I,hasFilterOrSearch:_,memberCount:B,nql:f,search:p,showMenu:V,showNewMember:V,onImportComplete:()=>{z()},children:a&&me})]})})]}),a&&ge,V&&(le||!a&&ce)&&(0,Z.jsxs)(Jt,{className:S(`flex-col gap-4 lg:flex-row lg:items-center sidebar:gap-6 lg:gap-6`,!le&&`lg:hidden`),children:[!a&&ge,le&&(0,Z.jsx)(io,{activeView:D,filters:d,multipleActiveSubscriptionsCount:F,nql:f,savedViews:C,onFiltersChange:m})]}),t&&(0,Z.jsx)(Ro,{count:F,hasResolvedCount:ee,nql:f,search:p})]})}),(0,Z.jsxs)(Zt.Body,{children:[oe?(0,Z.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Z.jsx)(et,{size:`lg`})}):ne?(0,Z.jsxs)(`div`,{className:`mb-16 flex flex-1 flex-col items-center justify-center`,children:[(0,Z.jsx)(`h2`,{className:`mb-2 text-xl font-medium`,children:`Error loading members`}),(0,Z.jsx)(`p`,{className:`mb-4 text-muted-foreground`,children:`Please reload the page to try again`}),(0,Z.jsx)(W,{onClick:()=>window.location.reload(),children:`Reload page`})]}):L?.members.length?(0,Z.jsx)(Io,{activeColumns:te,backPath:`${x.pathname}${x.search}`,fetchNextPage:()=>void ie(),hasNextPage:ae,isFetchingNextPage:re,isLoading:R&&!re,items:L.members,pageHeaderRef:o,showEmailOpenRate:e,timezone:i,totalItems:B}):_?(0,Z.jsx)(`div`,{className:`flex flex-1 flex-col items-center justify-center`,children:(0,Z.jsx)(Re,{actions:(0,Z.jsx)(W,{variant:`outline`,onClick:fe,children:`Show all members`}),title:`No matching members found.`,children:(0,Z.jsx)(pe,{})})}):(0,Z.jsx)(sa,{membershipsEnabled:r,onMemberCreated:async()=>{await z()}}),ue&&(0,Z.jsx)(`div`,{className:S(L?.members.length&&`mt-8`),children:(0,Z.jsx)(co,{})})]})]})})})},as=()=>{let[e]=g(),{data:t,isLoading:n}=_t({}),{data:r,isLoading:i}=h(),a=e.get(`filter`)??void 0,o=!!t?.settings,{newsletters:s,customFields:c}=es(a),l=qo(a,{hasResolvedSettings:o,isLoadingSettings:n,newsletters:s,customFields:c});if(n||i||!t?.settings||!r?.config||l)return(0,Z.jsx)(T,{className:`size-full`,children:(0,Z.jsx)(E,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Z.jsxs)(Zt,{children:[(0,Z.jsx)(Zt.Header,{className:`py-4 sidebar:py-6`,children:(0,Z.jsx)(Y,{blurredBackground:!1,sticky:!1,children:(0,Z.jsx)(Y.Left,{children:(0,Z.jsx)(Y.Title,{children:`Members`})})})}),(0,Z.jsx)(Zt.Body,{children:(0,Z.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Z.jsx)(et,{size:`lg`})})})]})})});let u=Xt(t.settings),d=Vt(t.settings,`members_signup_access`)!==`none`,f=r.config.emailAnalytics===!0,p=wt(t.settings,r.config);return(0,Z.jsx)(is,{emailAnalyticsEnabled:f,hasStripeEnabled:p,membershipsEnabled:d,timezone:u})};export{as as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e,t}from"./react-BXwhMTuc.js";import{t as n}from"./jsx-runtime-BlNNh7jY.js";import{L as r}from"./shade-scope-Cccj-c7I-D0XwkdKQ.js";import{t as i}from"./box-LUuYRT-1.js";import{t as a}from"./text-BLI0C8Mc.js";var o=e(t(),1),s=n(),c=o.forwardRef(function({className:e,...t},n){return(0,s.jsx)(a,{ref:n,as:`h1`,className:r(`mb-8 text-4xl`,e),"data-modal-page":`title`,leading:`supertight`,weight:`bold`,...t})});c.displayName=`ModalPage.Title`;var l=o.forwardRef(function({className:e,...t},n){return(0,s.jsx)(i,{ref:n,className:r(`w-full p-[8vmin] pt-5`,e),"data-modal-page":`root`,...t})});l.displayName=`ModalPage`;var u=Object.assign(l,{Title:c});export{u as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e,t}from"./react-BXwhMTuc.js";import{t as n}from"./jsx-runtime-BlNNh7jY.js";import{n as r}from"./dist-DziNzWI2.js";import{n as i}from"./heading-ih-fOVqF.js";import{Cr as a,t as o}from"./button-D414TI3B.js";import{i as s,n as c,r as l,t as u}from"./tabs-BZyz4ZCH.js";import{t as d}from"./switch-DoOJF2yg.js";import{t as f}from"./skeleton-CPcTiTSX.js";import{t as p}from"./use-navigate-with-base-path-BzgNwMAx.js";import{At as m,G as h,J as g,Jt as _,Mt as v,Qt as y,St as b,Ut as x,Yt as S,ft as C,jt as w,kt as T,lt as E,mn as D,pn as O}from"./index-DOF2jDq0.js";import"./layout-Ckwzsnsu.js";import{a as k,i as A,n as j,r as M,t as N}from"./settings-BRl7-7a9.js";var P=e(t(),1),F=n(),I=()=>{let{data:e,isLoading:t}=w(`index`),{data:n,isLoading:I}=v(`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=m(`index`),z=S(`index`),[B,V]=(0,P.useState)(new Set),H=T(`index`),U=_(`index`),[W,G]=(0,P.useState)(new Set),[K,q]=(0,P.useState)(null),J=p(),{data:Y,isError:X,isLoading:Z,isSuccess:Q}=x(),$=y({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)(h,{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)(O,{children:[(0,F.jsx)(D,{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)(C,{actor:e,isCurrentUser:!0,children:(0,F.jsx)(`div`,{children:(0,F.jsxs)(g,{onClick:t?void 0:()=>E(e.handle,J),children:[(0,F.jsx)(b,{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)(O,{children:[(0,F.jsx)(D,{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)(g,{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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e,t}from"./react-BXwhMTuc.js";import{t as n}from"./jsx-runtime-BlNNh7jY.js";import{L as r}from"./shade-scope-Cccj-c7I-D0XwkdKQ.js";import{en as i,rr as a}from"./button-D414TI3B.js";import{a as o,c as s,i as c,o as l,r as u,s as d,t as f}from"./command-B5wfm6pd.js";var p=e(t(),1),m=n(),h={searchPlaceholder:`Search...`,noResultsFound:`No results found.`,loading:`Loading...`,loadMore:`Load more`};function g(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.label.toLowerCase().includes(n)||e.detail?.toLowerCase().includes(n)):e}function _(e,t,n,r,i,a,o){if(e)return{...e,shouldClientFilter:o??e.shouldClientFilter};let s=!!t,c=t?.useOptions({query:r,selectedValues:i});return{options:s?c?.options??[]:n??[],isInitialLoad:s?c?.isInitialLoad??!1:a&&(n?.length??0)===0,isSearching:s?c?.isSearching??!1:a&&(n?.length??0)>0,hasMore:s?c?.hasMore??!1:!1,isLoadingMore:s?c?.isLoadingMore??!1:!1,loadMore:s?c?.loadMore??(()=>{}):()=>{},shouldClientFilter:o??!s}}function v({optionSource:e,options:t,values:n,onChange:v,valueSource:y,searchable:b=!0,isLoading:x=!1,maxSelections:S,isMultiSelect:C=!0,onClose:w,autoCloseOnSelect:T=!1,className:E,searchInputClassName:D,shouldFilter:O,onSearchChange:k,i18n:A,renderItem:ee,groupBy:j,header:M,footer:N}){let P=(0,p.useMemo)(()=>({...h,...A}),[A]),[F,I]=(0,p.useState)(``),L=(0,p.useCallback)(t=>{I(t),e?.onSearchChange?.(t),k?.(t)},[k,e]),R=_(e,y,t,F,n,x,O),z=R.options,[B,V]=(0,p.useState)([]),H=(0,p.useMemo)(()=>z.filter(e=>n.includes(e.value)),[z,n]);(0,p.useEffect)(()=>{if(n.length===0){V([]);return}H.length>0&&V(e=>{let t=[];for(let r of n){let n=H.find(e=>e.value===r)??e.find(e=>e.value===r);n&&t.push(n)}return t})},[H,n]);let U=(0,p.useMemo)(()=>n.length===0?[]:B.length>0?B:H,[B,n.length,H]),W=(0,p.useMemo)(()=>g(U,F),[F,U]),G=(0,p.useMemo)(()=>z.filter(e=>!n.includes(e.value)),[z,n]),K=(0,p.useMemo)(()=>{let e=new Map;for(let t of G){let n=j?.(t),r=typeof n==`string`?n:n?.key,i=typeof n==`string`?n:n?.label,a=e.get(r);e.set(r,{label:i,options:[...a?.options??[],t]})}return[...e.entries()].map(([e,t])=>({key:e,...t}))},[j,G]),q=(0,p.useCallback)(e=>{v(n.filter(t=>t!==e.value))},[v,n]),J=e=>{v([]),w?.()},Y=e=>{let t=[...n,e.value];S&&t.length>S||(v(t),T&&w?.())},X=e=>{v([e.value]),w?.()},Z=C?q:J,Q=C?Y:X,te=(0,p.useCallback)(()=>L(``),[L]),ne=e=>{let t=e.detail?` - ${e.detail}`:``;return e.label+t},$=ee??(({option:e,isSelected:t,onSelect:n})=>(0,m.jsxs)(l,{className:`group flex items-center gap-2`,value:ne(e),onSelect:n,children:[e.icon,(0,m.jsxs)(`div`,{className:`flex flex-col overflow-hidden`,children:[(0,m.jsx)(`span`,{className:`truncate text-accent-foreground`,title:e.label,children:e.label}),e.detail&&(0,m.jsx)(`span`,{className:`truncate text-sm text-muted-foreground`,title:e.detail,children:e.detail})]}),(0,m.jsx)(a,{className:r(`ms-auto text-primary`,!t&&`opacity-0`)})]},String(e.value)));return(0,m.jsx)(`div`,{className:r(`w-full`,E),children:(0,m.jsxs)(f,{shouldFilter:R.shouldClientFilter,children:[M?.({selectedOptions:U,onDeselect:q}),b&&(0,m.jsxs)(`div`,{className:`relative`,children:[(0,m.jsx)(o,{className:r(`h-(--control-height) pr-8`,D),placeholder:P.searchPlaceholder,value:F,onValueChange:L}),R.isSearching&&(0,m.jsx)(i,{className:`pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 animate-spin text-muted-foreground`})]}),(0,m.jsxs)(d,{className:`outline-hidden`,children:[R.isInitialLoad?(0,m.jsxs)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:[(0,m.jsx)(i,{className:`mr-2 size-4 animate-spin`}),P.loading]}):(0,m.jsx)(u,{children:P.noResultsFound}),W.length>0&&(0,m.jsx)(c,{heading:P.selectedHeading,children:W.map(e=>$({option:e,isSelected:!0,onSelect:()=>Z(e)}))}),G.length>0&&(0,m.jsxs)(m.Fragment,{children:[W.length>0&&(0,m.jsx)(s,{}),K.map(e=>(0,m.jsx)(c,{heading:e.label,children:e.options.map(e=>$({option:e,isSelected:!1,onSelect:()=>Q(e)}))},e.key===void 0?`ungrouped`:`group:${e.key}`))]}),R.hasMore&&(0,m.jsxs)(m.Fragment,{children:[(W.length>0||G.length>0)&&(0,m.jsx)(s,{}),(0,m.jsx)(`div`,{className:`p-1.5`,children:(0,m.jsxs)(`button`,{className:`flex w-full items-center justify-center rounded-menu-item px-2 py-1.5 text-sm text-muted-foreground hover:bg-accent hover:text-accent-foreground disabled:opacity-50`,disabled:R.isLoadingMore,type:`button`,onClick:R.loadMore,children:[R.isLoadingMore&&(0,m.jsx)(i,{className:`mr-2 size-4 animate-spin`}),R.isLoadingMore?P.loading:P.loadMore]})})]})]}),N?.({searchInput:F,clearSearch:te})]})})}export{v as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e,t}from"./react-BXwhMTuc.js";import{p as n}from"./hooks-DYfTEQLk.js";import{t as r}from"./jsx-runtime-BlNNh7jY.js";import{Z as i}from"./shade-scope-Cccj-c7I-D0XwkdKQ.js";import{D as a,ft as o,nr as s,t as c,v as l}from"./button-D414TI3B.js";import{i as u,n as d,r as f,t as p}from"./tabs-BZyz4ZCH.js";import{t as m}from"./switch-DoOJF2yg.js";import{o as h,t as g}from"./use-settings-navigation-CzGU4sus.js";import{i as _,o as v,t as y}from"./field-BXEh3ptU.js";import{i as b,n as x,t as S}from"./use-url-input-C5KHJw79.js";import{$r as C,Dn as w,Qn as T,Zr as E,_i as D,cr as O,er as k,nr as A,yi as j}from"./index-DOF2jDq0.js";import{a as M,c as N,i as P,n as ee,o as F,r as I,s as L,t as te}from"./images-H-BIm8OQ.js";import{t as ne}from"./validator-DlFQP70j.js";import{n as re}from"./global-data-context-3MItMry2.js";import{t as ie}from"./use-setting-group-ldtX1Vsk.js";import{t as R}from"./format-url-Ju4k5CIm.js";var ae=e(ne(),1),z=e(t(),1),B=[`public`,`members`,`paid`,`public_free`,`public_paid`,`public_only`,`free_members`,`none`],V=e=>!!(e&&!e.match(/^\s*$/)),H=e=>!!(V(e.label)||e.url!==`/`||V(e.icon)),U=e=>({...e,icon:e.icon||``,visibility:e.visibility||`public`,errors:{}}),W=({url:e,label:t,icon:n,visibility:r})=>({url:e.trim(),label:t.trim(),...n?.trim()?{icon:n.trim()}:{},...r&&r!==`public`?{visibility:r}:{}}),G=({items:e,setItems:t})=>{let n=x({items:(0,z.useMemo)(()=>e.map(U),[e]),setItems:(0,z.useCallback)(e=>{t(e.map(W))},[t]),blank:{url:`/`,label:``,icon:``,visibility:`public`,errors:{}},canAddNewItem:H}),r=new RegExp(/^(\/|#|[a-zA-Z0-9-]+:)/),i=e=>{let t={},n=V(e.label),i=V(e.icon);return!n&&!i&&(t.label=`You must specify a label or icon`),(!e.url||e.url.match(/\s/)||!ae.default.isURL(e.url,{require_protocol:!0})&&!e.url.match(r))&&(t.url=`You must specify a valid URL or relative path`),e.visibility&&!B.includes(e.visibility)&&(t.visibility=`You must specify a valid visibility`),t},a=(e,t)=>{let n={...e.errors};return V(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}))}),H(n.newItem)){let t=i(n.newItem);Object.values(t).some(e=>e)&&(e=!1,n.setNewItem({...n.newItem,errors:t}))}return e}}},K=r(),q=({idPrefix:e,item:t,clearError:n,updateItem:r,uploadIcon:i})=>(0,K.jsx)(I,{className:`size-[38px]`,children:t.icon?(0,K.jsxs)(N,{children:[(0,K.jsx)(L,{alt:``,className:`size-[38px] rounded-lg object-contain p-2.5`,src:t.icon}),(0,K.jsx)(M,{className:`inset-0 flex items-center justify-center`,children:(0,K.jsx)(P,{"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,K.jsx)(a,{className:`size-4`})})})]}):(0,K.jsx)(F,{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,K.jsx)(l,{"aria-hidden":`true`,className:`size-4`})})}),J={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`},oe=B.map(e=>({value:e,label:J[e]})),se=[{key:`public-visitors`,label:`Public visitors`},{key:`free-members`,label:`Free members`},{key:`paid-members`,label:`Paid members`}],ce={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}},le=[`paid`,`public_paid`],ue={"000":`none`,"001":`paid`,"010":`free_members`,"011":`members`,100:`public_only`,101:`public_paid`,110:`public_free`,111:`public`},de=e=>oe.some(t=>t.value===e)?e:`public`,fe=e=>J[e],pe=(e,t)=>({...ce[e],...t?{}:{"paid-members":!1}}),me=e=>ue[[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=de(t.visibility),o=fe(a),c=`${e}-visibility-${t.id}`,l=`${c}-error`,u=pe(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=me(n);!i&&le.includes(r)||d(r)};return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`label`,{className:`sr-only`,id:c,children:`Visibility`}),(0,K.jsxs)(T,{children:[(0,K.jsx)(O,{asChild:!0,children:(0,K.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-gray-100 px-3 text-md text-black hover:bg-gray-100 focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:outline-hidden dark:bg-gray-900 dark:text-white dark:hover:bg-gray-900`,"data-testid":`navigation-item-visibility`,type:`button`,children:[(0,K.jsx)(`span`,{className:`truncate`,children:o}),(0,K.jsx)(s,{"aria-hidden":`true`,className:`size-4 opacity-80`})]})}),(0,K.jsx)(k,{align:`end`,className:`z-[300] w-[190px] rounded-lg p-2`,sideOffset:6,children:(0,K.jsx)(`div`,{className:`flex flex-col`,children:se.filter(e=>e.key!==`paid-members`||i).map(e=>{let t=u[e.key];return(0,K.jsxs)(A,{className:`flex cursor-pointer items-center justify-between gap-3 rounded-md px-2 py-1.5 text-sm text-gray-900 dark:text-gray-100`,onSelect:n=>{n.preventDefault(),f(e.key,!t)},children:[(0,K.jsx)(`span`,{children:e.label}),(0,K.jsx)(m,{"aria-label":e.label,checked:t,size:`sm`,onCheckedChange:t=>f(e.key,t),onClick:e=>e.stopPropagation()})]},e.key)})})})]}),t.errors.visibility&&(0,K.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:a,addItem:o,clearError:s,labelPlaceholder:c,unstyled:l,textFieldClasses:u,action:d,showIcon:f,showPaidVisibility:p,showVisibility:m,className:h,...g})=>{let b=S({baseUrl:e,nullable:!0,value:n.url,onChange:e=>r?.({url:e||``})});return(0,K.jsxs)(`div`,{className:i(ge,h),"data-testid":`navigation-item-editor`,...g,children:[f&&(0,K.jsx)(`div`,{className:i(`flex flex-col`,Y.icon,`pt-1`),children:(0,K.jsx)(q,{clearError:s,idPrefix:t,item:n,updateItem:r,uploadIcon:a})}),(0,K.jsx)(`div`,{className:i(`flex`,Y.label,X),children:(0,K.jsxs)(y,{className:`grow`,"data-invalid":!!n.errors.label||void 0,children:[(0,K.jsx)(v,{className:`sr-only`,htmlFor:`navigation-label-${n.id}`,children:`Label`}),(0,K.jsx)(w,{"aria-invalid":!!n.errors.label||void 0,className:i(l&&`border-0 bg-transparent shadow-none focus-visible:ring-0`,u),id:`navigation-label-${n.id}`,placeholder:c,value:n.label,onChange:e=>r?.({label:e.target.value}),onKeyDown:e=>{r?.({label:e.target.value}),e.key===`Enter`&&(e.preventDefault(),o?.()),n.errors.label&&s?.(`label`)}}),n.errors.label&&(0,K.jsx)(_,{children:n.errors.label})]})}),(0,K.jsx)(`div`,{className:i(`flex`,Y.url,X),children:(0,K.jsxs)(y,{className:`grow`,"data-invalid":!!n.errors.url||void 0,children:[(0,K.jsx)(v,{className:`sr-only`,htmlFor:`navigation-url-${n.id}`,children:`URL`}),(0,K.jsx)(w,{"aria-invalid":!!n.errors.url||void 0,className:u,id:`navigation-url-${n.id}`,value:b.displayValue,onBlur:b.commitValue,onChange:e=>b.setDisplayValue(e.target.value),onFocus:b.handleFocus,onKeyDown:t=>{b.handleKeyDown(t);let n=R(t.target.value,e,!0);r?.({url:n.save||``})},onKeyUp:t=>{if(t.key===`Enter`){t.preventDefault();let n=R(t.target.value,e,!0);r?.({url:n.save||``}),o?.()}n.errors.url&&s?.(`url`)}}),n.errors.url&&(0,K.jsx)(_,{children:n.errors.url})]})}),m&&(0,K.jsx)(`div`,{className:i(`flex flex-col`,Y.visibility,`pt-1`),children:(0,K.jsx)(he,{clearError:s,idPrefix:t,item:n,showPaidVisibility:p,updateItem:r})}),d&&(0,K.jsx)(C,{align:`center`,className:i(`h-[calc(var(--control-height)+0.25rem)] shrink-0 pt-1`,Y.action),children:d})]})},Q=`text-xs font-semibold text-muted-foreground`,$=({baseUrl:e,idPrefix:t,navigation:n,showIcon:r,showPaidVisibility:i,showVisibility:s,uploadIcon:l})=>(0,K.jsxs)(`div`,{className:`w-full pt-2`,children:[(r||s)&&(0,K.jsxs)(`div`,{className:`-mb-1 flex w-full items-center gap-3`,children:[(0,K.jsx)(`div`,{className:`h-7 w-4 shrink-0`}),(0,K.jsxs)(`div`,{className:`flex w-full items-start gap-3 [--control-height:38px]`,children:[r&&(0,K.jsx)(`div`,{className:`${Y.icon} ${Q}`,children:`Icon`}),(0,K.jsx)(`div`,{className:`${Y.label} ${Q}`,children:`Label`}),(0,K.jsx)(`div`,{className:`${Y.url} ${Q}`,children:`URL`}),s&&(0,K.jsx)(`div`,{className:`${Y.visibility} ${Q}`,children:`Visibility`}),(0,K.jsx)(`div`,{className:Y.action})]})]}),(0,K.jsx)(b,{dragHandleClass:`translate-y-0.5`,getDragHandleLabel:e=>`Reorder ${e.label||`navigation item`}`,items:n.items,itemSeparator:!1,renderItem:o=>(0,K.jsx)(Z,{action:(0,K.jsx)(c,{"aria-label":`Delete navigation item`,size:`icon`,type:`button`,variant:`ghost`,onClick:()=>n.removeItem(o.id),children:(0,K.jsx)(a,{})}),baseUrl:e,clearError:e=>n.clearError(o.id,e),idPrefix:t,item:o,showIcon:r,showPaidVisibility:i,showVisibility:s,updateItem:e=>n.updateItem(o.id,e),uploadIcon:l}),onMove:n.moveItem}),(0,K.jsxs)(C,{align:`start`,className:`mt-5 border-t pt-5`,gap:`md`,children:[(0,K.jsx)(C,{align:`center`,className:`h-[calc(var(--control-height)+0.5rem)] shrink-0 translate-y-0.5 pt-2`,children:(0,K.jsx)(o,{className:`size-4 text-muted-foreground`})}),(0,K.jsx)(Z,{action:(0,K.jsx)(c,{"aria-label":`Add navigation item`,"data-testid":`add-button`,size:`icon`,type:`button`,variant:`ghost`,onClick:n.addItem,children:(0,K.jsx)(o,{})}),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:l})]})]});function _e(){let{updateRoute:e}=g(),t=n(),{mutateAsync:r}=ee(),{config:i}=re(),{localSettings:a,updateSetting:o,saveState:s,handleSave:c,siteData:l}=ie(),[m,_,v]=j(a,[`navigation`,`secondary_navigation`,`members_signup_access`]),y=E(`navigationIcons`),b=y,x=y&&v!==`none`,S=D(a,i),C=(0,z.useMemo)(()=>JSON.parse(m||`[]`),[m]),w=(0,z.useMemo)(()=>JSON.parse(_||`[]`),[_]),T=(0,z.useCallback)(e=>{o(`navigation`,JSON.stringify(e))},[o]),O=(0,z.useCallback)(e=>{o(`secondary_navigation`,JSON.stringify(e))},[o]),k=G({items:C,setItems:T}),A=G({items:w,setItems:O}),[M,N]=(0,z.useState)(`primary-nav`),P=async e=>{try{return te(await r({file:e}))}catch(e){let n=e;n.response?.status===415&&(n.message=`Unsupported file type`),t(n)}};return(0,K.jsx)(h,{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()=>{k.validate()&&A.validate()&&(await c(),e(`navigation`))},children:(0,K.jsx)(`div`,{className:`mt-6 mb-1`,children:(0,K.jsxs)(p,{value:M,variant:`underline`,onValueChange:N,children:[(0,K.jsxs)(f,{children:[(0,K.jsx)(u,{value:`primary-nav`,children:`Primary`}),(0,K.jsx)(u,{value:`secondary-nav`,children:`Secondary`})]}),(0,K.jsx)(d,{value:`primary-nav`,children:(0,K.jsx)($,{baseUrl:l.url,idPrefix:`primary-navigation`,navigation:k,showIcon:b,showPaidVisibility:S,showVisibility:x,uploadIcon:P})}),(0,K.jsx)(d,{value:`secondary-nav`,children:(0,K.jsx)($,{baseUrl:l.url,idPrefix:`secondary-navigation`,navigation:A,showIcon:b,showPaidVisibility:S,showVisibility:x,uploadIcon:P})})]})})})}export{_e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e,t}from"./react-BXwhMTuc.js";import{t as n}from"./jsx-runtime-BlNNh7jY.js";import{n as r}from"./dist-DziNzWI2.js";import{f as i}from"./posts-tcoO3iRG.js";import{h as a}from"./chunk-KS7C4IRE-DhOcHQOU.js";import{a as o}from"./router-provider-DDZvgS3V.js";import{H as s,L as c,U as l,W as u,c as d,q as f}from"./shade-scope-Cccj-c7I-D0XwkdKQ.js";import{a as p}from"./heading-ih-fOVqF.js";import{a as m,n as h,o as g,r as _,t as v}from"./simple-pagination-D5t_ox6x.js";import{A as y,Er as b,L as x,er as S,k as C,t as w,xt as ee}from"./button-D414TI3B.js";import{i as te,r as T,t as E}from"./tabs-BZyz4ZCH.js";import{n as ne}from"./skeleton-CPcTiTSX.js";import{a as re,i as ie,n as D,o as O,r as k,t as A}from"./card-C2dfd5u0.js";import{c as j,l as ae,n as oe,o as se,r as ce,s as le,t as ue,u as de}from"./data-list-DM8yqpXi.js";import{Cn as fe,Dn as pe,Ei as me,Sn as M,Ti as he,Tn as ge,d as N,f as P,m as _e,yn as F}from"./index-DOF2jDq0.js";import{a as I,o as L}from"./stats-Cvp8Ep5m.js";import{n as ve}from"./email-sending-status-context-C76KYL1V.js";import{n as R}from"./feedback-BTPBQLT5.js";import{n as ye,r as z}from"./links-Ctujreuh.js";import{n as be}from"./post-analytics-context-bt2YTBAC.js";import{a as B,i as V,n as H,r as U,t as W}from"./kpi-card-iCDUTgOR.js";import{r as xe,t as Se}from"./post-analytics-header-DKWHwoK2.js";import{i as G,n as K,r as q,t as J}from"./link-helpers-o9GgBTni.js";var Y=e(t(),1),Ce=(e,t)=>{let{data:n,isLoading:r,error:i}=R(e,{searchParams:{limit:`50`,...t===void 0?{}:{score:t.toString()}}});return{feedback:(0,Y.useMemo)(()=>n?.feedback?n.feedback:[],[n]),isLoading:r,error:i}},X=n(),we=({feedbackStats:e})=>{let{isAdmin7:t}=d(),{postId:n}=a(),r=o(),{isNewsletterDataHidden:i}=ve(),[s,c]=(0,Y.useState)(`positive`),{feedback:b,isLoading:S}=Ce(n||``,+(s===`positive`)),{totalPages:ee,paginatedData:j,nextPage:ae,previousPage:oe,hasNextPage:se,hasPreviousPage:ce}=g({data:b,itemsPerPage:9}),le=S;return(0,X.jsxs)(A,{children:[(0,X.jsxs)(re,{className:`pb-5`,children:[(0,X.jsx)(O,{children:`Feedback`}),(0,X.jsx)(k,{children:`What did your readers think?`})]}),i?(0,X.jsx)(D,{className:`pb-3`,children:(0,X.jsx)(G,{description:`Once the first responses are recorded, they'll show here`,title:`No feedback data available`})}):e.totalFeedback>0?(0,X.jsx)(D,{className:`pb-3`,children:(0,X.jsxs)(G,{description:`Once the first responses are recorded, they'll show here`,title:`No feedback data available`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsx)(E,{className:`pb-3`,defaultValue:`positive`,value:s,variant:t?`button-sm`:`button`,onValueChange:e=>c(e),children:(0,X.jsxs)(T,{className:`gap-1`,children:[(0,X.jsx)(te,{className:`h-7`,value:`positive`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,X.jsx)(C,{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:l(e.positiveFeedback/e.totalFeedback)})]})}),(0,X.jsx)(te,{className:`h-7`,value:`negative`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,X.jsx)(y,{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:l(e.negativeFeedback/e.totalFeedback)})]})})]})}),(0,X.jsx)(p,{className:`mr-2 mb-3 lg:hidden xl:visible! xl:block!`,children:`Date`})]}),(0,X.jsx)(F,{}),le?(0,X.jsx)(ne,{className:`mt-3`,lines:3}):j&&j.length>0?(0,X.jsx)(`div`,{className:`flex w-full flex-col py-3`,children:j.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:()=>{r(`/members/${e.member.id}`)},children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 font-medium`,children:[(0,X.jsxs)(M,{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:`${f(N(e.member),`45`,`55`)}`},children:P(e.member)})]}),N(e.member)]}),(0,X.jsx)(`div`,{className:`whitespace-nowrap text-muted-foreground`,children:u(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 `,s===`positive`?`positive`:`negative`,` feedback yet`]})})]})}):(0,X.jsxs)(D,{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&&!i&&(0,X.jsx)(ie,{className:`grow-0`,children:(0,X.jsxs)(`div`,{className:`flex w-full items-center justify-between gap-3`,children:[(0,X.jsxs)(w,{variant:`subtle`,onClick:()=>{let e=`(feedback.post_id:'${n}'+feedback.score:1)`,t=`(feedback.post_id:'${n}'+feedback.score:0)`,i=`${encodeURIComponent(e)}&post=${n}`,a=`${encodeURIComponent(t)}&post=${n}`;r(`/members?filter=${s===`positive`?i:a}`)},children:[`View all`,(0,X.jsx)(x,{})]}),ee>1&&(0,X.jsx)(v,{className:`pb-0`,children:(0,X.jsxs)(h,{children:[(0,X.jsx)(m,{disabled:!ce,onClick:oe}),(0,X.jsx)(_,{disabled:!se,onClick:ae})]})})]})})]})},Te=e=>{let{data:t,isLoading:n}=i(e),{data:r,isLoading:a}=i(e,{searchParams:{include:`count.positive_feedback,count.negative_feedback`}}),o=(0,Y.useMemo)(()=>t?.posts[0],[t]),s=(0,Y.useMemo)(()=>r?.posts[0],[r]),c=(0,Y.useMemo)(()=>o?{sent:o.email?.email_count||0,opened:o.email?.opened_count||0,clicked:o.count?.clicks||0,openedRate:o.email?.opened_count?o.email.opened_count/o.email.email_count:0,clickedRate:o.count?.clicks&&o.email?.email_count?o.count.clicks/o.email.email_count:0}:{sent:0,opened:0,clicked:0,openedRate:0,clickedRate:0},[o]),l=(0,Y.useMemo)(()=>{if(!s?.count)return{positiveFeedback:0,negativeFeedback:0,totalFeedback:0};let e=s.count.positive_feedback||0,t=s.count.negative_feedback||0;return{positiveFeedback:e,negativeFeedback:t,totalFeedback:e+t}},[s]),u=(0,Y.useMemo)(()=>o?.newsletter?.id,[o]),{data:d,isLoading:f}=I({searchParams:u?{newsletter_id:u}:{},enabled:!!u}),p=(0,Y.useMemo)(()=>d?.stats?d.stats.map(e=>e.post_id):[],[d]),{data:m,isLoading:h}=L({searchParams:u&&p.length>0?{newsletter_id:u,post_ids:p.join(`,`)}:{},enabled:!!u&&p.length>0}),g=(0,Y.useMemo)(()=>{if(!d?.stats)return;let e=d.stats,t=m?.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{...d,stats:r}},[d,m]),_=f||h,{data:v,isLoading:y,refetch:b}=z({searchParams:{filter:`post_id:'${e}'`}}),x=(0,Y.useMemo)(()=>{if(!g||!g.stats)return{openRate:0,clickRate:0};let e=g.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))}},[g]),S=(0,Y.useMemo)(()=>K(v),[v]);return{post:o,stats:c,feedbackStats:l,averageStats:(0,Y.useMemo)(()=>({openedRate:x.openRate,clickedRate:x.clickRate}),[x]),topLinks:S,refetchTopLinks:b,isLoading:n||a||_||y}},Ee=({breakpoints:e={sm:1080,md:1280,lg:1360}}={})=>{let[t,n]=(0,Y.useState)(`md`);return(0,Y.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`}},De=()=>(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)(S,{className:`ml-0.5`,size:16,strokeWidth:1.5})}),Oe=({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})]})]}),ke=()=>{let{isAdmin7:e}=d(),t=o(),[n,i]=(0,Y.useState)(null),[a,u]=(0,Y.useState)(``),f=(0,Y.useRef)(null),y=(0,Y.useRef)(null),{chartSize:x}=Ee(),S=he(),C=me(),{hasNewsletterAnalytics:te,isNewsletterDataHidden:T,isStatusLoading:E}=ve(),{post:fe,isPostLoading:M,postId:N}=be(),P=e=>t(_e({filter:e})),I=fe,L=te;(0,Y.useEffect)(()=>{!M&&!E&&!L&&t(`/posts/analytics/${N}`)},[t,N,M,E,L]);let{stats:R,averageStats:z,topLinks:K,isLoading:Ce,refetchTopLinks:ke}=Te(N),{mutate:Ae}=ye(),Z=(0,Y.useMemo)(()=>{if(!I?.count)return{positiveFeedback:0,negativeFeedback:0,totalFeedback:0};let e=I.count.positive_feedback||0,t=I.count.negative_feedback||0;return{positiveFeedback:e,negativeFeedback:t,totalFeedback:e+t}},[I]),je=(0,Y.useMemo)(()=>I?.newsletter?.feedback_enabled===!0,[I]),Me=(0,Y.useMemo)(()=>Z.totalFeedback>0?!0:je,[Z.totalFeedback,je]),Ne=e=>{let t=J(K,e);t&&(i(e),u(t.link.to))},Pe=()=>{if(!n)return;let e=J(K,n);if(!e)return;let t=a.trim();if(t===``||t===e.link.to){i(null),u(``);return}Ae({originalUrl:e.link.originalTo,editedUrl:a,postId:N},{onSuccess:()=>{i(null),u(``),ke()},onError:()=>{r.error(`Couldn’t update the link. Please try again.`)}})},{totalPages:Fe,paginatedData:Ie,nextPage:Le,previousPage:Re,hasNextPage:ze,hasPreviousPage:Be}=g({data:K,itemsPerPage:10});(0,Y.useEffect)(()=>{if(n&&f.current){f.current.focus();let e=J(K,n),t=t=>{y.current&&!y.current.contains(t.target)&&a===e?.link.to&&(i(null),u(``))};return document.addEventListener(`mousedown`,t),()=>{document.removeEventListener(`mousedown`,t)}}},[n,a,K]);let Ve=Ce||M||E,He=S&&!T,Ue=(0,X.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`–`}),We=[{datatype:`Sent`,value:1,fill:`url(#gradientPurple)`,color:`var(--chart-purple)`}],Ge={percentage:{label:`O`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Ke=[{datatype:`Average`,value:z.openedRate,fill:`url(#gradientGray)`,color:`var(--chart-gray)`},{datatype:`This newsletter`,value:R.openedRate,fill:`url(#gradientBlue)`,color:`var(--chart-blue)`}],qe={percentage:{label:`Opened`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Je=[{datatype:`Average`,value:z.clickedRate,fill:`url(#gradientGray)`,color:`var(--chart-gray)`},{datatype:`This newsletter`,value:R.clickedRate,fill:`url(#gradientTeal)`,color:`var(--chart-teal)`}],Ye={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(!S||!C)&&(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]`),!S&&!C&&(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)(Se,{currentTab:`Newsletter`}),(0,X.jsx)(xe,{children:(0,X.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 ${Me&&He&&`lg:grid-cols-2`}`,children:[(0,X.jsxs)(A,{className:Me&&He?`lg:col-span-2`:``,children:[(0,X.jsxs)(re,{className:`hidden`,children:[(0,X.jsx)(O,{children:`Newsletters`}),(0,X.jsx)(k,{children:`How did this post perform`})]}),Ve&&!T?(0,X.jsx)(D,{className:`h-[25vw] p-6`,children:(0,X.jsx)(ge,{})}):(0,X.jsxs)(D,{className:`p-0`,children:[(0,X.jsxs)(`div`,{className:`grid ${Q} items-stretch border-b ${T?`pointer-events-none opacity-40`:``}`,children:[(0,X.jsxs)(W,{className:`group relative isolate grow p-3 md:px-6 md:py-5`,children:[!T&&(0,X.jsx)(V,{onClick:()=>{P(`emails.post_id:${N}`)},children:`View members →`}),(0,X.jsxs)(U,{onClick:()=>{P(`emails.post_id:${N}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-purple opacity-50`}),`Sent`]}),(0,X.jsx)(H,{children:(0,X.jsx)(B,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:T?Ue:s(R.sent)})})]}),C&&(0,X.jsxs)(W,{className:`p-3 md:px-6 md:py-5`,children:[!T&&(0,X.jsx)(V,{onClick:()=>{P(`opened_emails.post_id:${N}`)},children:`View members →`}),(0,X.jsxs)(U,{onClick:()=>{P(`opened_emails.post_id:${N}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-blue opacity-50`}),`Opened`]}),(0,X.jsx)(H,{children:(0,X.jsx)(B,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:T?Ue:s(R.opened)})})]}),S&&(0,X.jsxs)(W,{className:`group relative isolate grow p-3 md:px-6 md:py-5`,children:[!T&&(0,X.jsx)(V,{onClick:()=>{P(`clicked_links.post_id:${N}`)},children:`View members →`}),(0,X.jsxs)(U,{onClick:()=>{P(`clicked_links.post_id:${N}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-teal opacity-50`}),`Clicked`]}),(0,X.jsx)(H,{children:(0,X.jsx)(B,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:T?Ue:s(R.clicked)})})]})]}),(0,X.jsx)(G,{description:`Sends, opens and clicks will appear once every email has been sent`,title:`Your newsletter is being sent`,children:(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 ${(C||S)&&`md:border-r`}`,children:[(0,X.jsx)(q,{className:$,config:Ge,data:We,percentageLabel:`Sent`,percentageValue:l(1),size:x,tooltip:!1}),(C||S)&&(0,X.jsx)(De,{})]}),C&&(0,X.jsxs)(`div`,{className:`group/block relative border-r-0 px-6 transition-all hover:bg-muted/25 ${S&&`md:border-r`}`,children:[(0,X.jsx)(Oe,{avgValue:l(z.openedRate),dataColor:`var(--chart-blue)`,value:l(R.openedRate)}),(0,X.jsx)(q,{className:$,config:qe,data:Ke,percentageLabel:`Open rate`,percentageValue:l(R.openedRate),size:x,tooltip:!1}),S&&(0,X.jsx)(De,{})]}),S&&(0,X.jsxs)(`div`,{className:`group/block relative px-6 transition-all hover:bg-muted/25`,children:[(0,X.jsx)(Oe,{avgValue:l(z.clickedRate),dataColor:`var(--chart-teal)`,value:l(R.clickedRate)}),(0,X.jsx)(q,{className:$,config:Ye,data:Je,percentageLabel:`Click rate`,percentageValue:l(R.clickedRate),size:x,tooltip:!1})]})]})})]})]}),Me&&(0,X.jsx)(we,{feedbackStats:Z}),He&&(0,X.jsxs)(A,{className:`group/datalist overflow-hidden`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,X.jsxs)(re,{className:`p-0`,children:[(0,X.jsx)(O,{children:`Newsletter clicks`}),(0,X.jsx)(k,{children:`Which links resonated with your readers`})]}),(0,X.jsx)(p,{className:`mr-2`,children:`Members`})]}),Ve?(0,X.jsxs)(D,{className:`p-6 pt-0`,children:[(0,X.jsx)(F,{}),(0,X.jsx)(ne,{className:`mt-6`})]}):(0,X.jsxs)(D,{className:`pb-0`,children:[(0,X.jsx)(F,{}),K.length>0?(0,X.jsx)(ue,{className:``,children:(0,X.jsx)(ce,{children:Ie?.map(t=>{let r=R.clicked>0?t.count/R.clicked:0,i=t.link.link_id,o=t.link.title,d=t.link.to,p=t.link.edited;return(0,X.jsxs)(de,{children:[n!==i&&(0,X.jsx)(oe,{style:{width:`${r?Math.round(r*100):0}%`}}),(0,X.jsx)(se,{className:`w-full`,children:n===i?(0,X.jsxs)(`div`,{ref:y,className:`flex w-full items-center gap-2`,children:[(0,X.jsx)(pe,{ref:f,className:`z-50 h-7 w-full border-border bg-background text-sm`,value:a,onChange:e=>u(e.target.value)}),(0,X.jsx)(w,{size:`sm`,onClick:Pe,children:`Update`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(w,{"aria-label":`Edit link`,className:c(`mr-2 shrink-0`,!e&&`bg-background`),size:e?`icon-sm`:`sm`,title:e?`Edit link`:void 0,variant:`subtle`,onClick:()=>Ne(i),children:(0,X.jsx)(ee,{})}),(0,X.jsx)(`a`,{className:`block truncate font-medium hover:underline`,href:d,rel:`noreferrer`,target:`_blank`,title:o,children:o}),p&&(0,X.jsx)(`span`,{className:`ml-1 text-gray-500`,children:`(edited)`})]})}),(0,X.jsxs)(le,{children:[(0,X.jsx)(j,{children:s(t.count||0)}),(0,X.jsx)(ae,{children:l(r)})]})]},i)})})}):(0,X.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`You have no links in your post.`})]}),!Ve&&K.length>1&&(0,X.jsx)(ie,{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)(b,{size:20,strokeWidth:1.5}),`Sent a broken link? You can update it!`]}),Fe>1&&(0,X.jsx)(v,{className:`pb-0`,children:(0,X.jsxs)(h,{children:[(0,X.jsx)(m,{disabled:!Be,onClick:Re}),(0,X.jsx)(_,{disabled:!ze,onClick:Le})]})})]})})]})]})})]})};export{ke as default};
|