ghost 6.60.0 → 6.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
- package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
- package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
- package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
- package/core/boot.js +13 -4
- package/core/built/admin/assets/{Combination-gnJO3vIw.js → Combination-5fYEzgbs.js} +1 -1
- package/core/built/admin/assets/{PolarAngleAxis-C4qtHy1B.js → PolarAngleAxis-pkMyqz8g.js} +1 -1
- package/core/built/admin/assets/{RadialBarChart-Bh09Stsj.js → RadialBarChart-JAKoS4KT.js} +1 -1
- package/core/built/admin/assets/{about-BgpmhCuM.js → about-Bve7IJS2.js} +1 -1
- package/core/built/admin/assets/{account-migration-8qTEI1i1.js → account-migration-DRhAehfw.js} +1 -1
- package/core/built/admin/assets/{action-list-lGzZLHc8.js → action-list-C4v0-du8.js} +1 -1
- package/core/built/admin/assets/activitypub/{account-migration-DMHuPnJn.js → account-migration-C-aej4x_.js} +7 -7
- package/core/built/admin/assets/activitypub/activitypub.js +3 -4
- package/core/built/admin/assets/activitypub/{avatar-DhTo5D1B.js → avatar-DLPL3Abs.js} +59 -68
- package/core/built/admin/assets/activitypub/{avatar-flipboard-DnVgbEfa.js → avatar-flipboard-C9iDY-QV.js} +2 -2
- package/core/built/admin/assets/activitypub/{bluesky-sharing-BT4zAlW7.js → bluesky-sharing-BXkA5mqV.js} +8 -8
- package/core/built/admin/assets/activitypub/{content-formatters-BeDZ-DIa.js → content-formatters-CHcyMFk4.js} +17 -17
- package/core/built/admin/assets/activitypub/{copy-8sqxUuNd.js → copy-DIAOQoCZ.js} +2 -2
- package/core/built/admin/assets/activitypub/{domain-xQDDu1CS.js → domain-B3ihkPde.js} +8 -8
- package/core/built/admin/assets/activitypub/{edit-profile-BXdF_r2G.js → edit-profile-DsZM3rTX.js} +5 -5
- package/core/built/admin/assets/activitypub/{explore-CMt7gKlL.js → explore-BodNrZgR.js} +8 -8
- package/core/built/admin/assets/activitypub/{feed-Bwqdddp_.js → feed-PwH1iJ84.js} +9 -9
- package/core/built/admin/assets/activitypub/{field-4co_8FVg.js → field-D06-kmOJ.js} +3 -3
- package/core/built/admin/assets/activitypub/{hash-DwakMs4X.js → hash-Bm3WxYN4.js} +2 -2
- package/core/built/admin/assets/activitypub/{inbox-DQ5CwLma.js → inbox-BluD2ucT.js} +16 -16
- package/core/built/admin/assets/activitypub/{inbox-ckD4wo_r.js → inbox-d8oJRTf4.js} +2 -2
- package/core/built/admin/assets/activitypub/{label-B72sfvEU.js → label-FHSh6ZAw.js} +3 -3
- package/core/built/admin/assets/activitypub/layout-Cq4NG0Xr.js +1 -0
- package/core/built/admin/assets/activitypub/{moderation-KCCO7L2J.js → moderation-D1Yapsod.js} +9 -9
- package/core/built/admin/assets/activitypub/{note-BX_Bz5A0.js → note-C5zjqq5C.js} +8 -8
- package/core/built/admin/assets/activitypub/{notifications-BQOYGvRv.js → notifications-B9p8eCHD.js} +9 -9
- package/core/built/admin/assets/activitypub/{preferences-6h43G9_q.js → preferences-BCqUdC3v.js} +9 -9
- package/core/built/admin/assets/activitypub/{profile-BMN9VVZ2.js → profile-BRCWoFem.js} +178 -178
- package/core/built/admin/assets/activitypub/{reply-ZNo04xsO.js → reply-DYK5vVqb.js} +2 -2
- package/core/built/admin/assets/activitypub/{routes-3B9mUQ7i.js → routes-BSXT992i.js} +81 -84
- package/core/built/admin/assets/activitypub/{separator-D9taVCCa.js → separator-BbQqTm-p.js} +3 -3
- package/core/built/admin/assets/activitypub/{settings-71gCm3SO.js → settings-DQDkr06X.js} +6 -6
- package/core/built/admin/assets/activitypub/{step-1-BsGGnBuT.js → step-1-B-YfsVeO.js} +5 -5
- package/core/built/admin/assets/activitypub/{step-2-teosIS0k.js → step-2-DtPQzlTH.js} +6 -6
- package/core/built/admin/assets/activitypub/{step-3-BjD5TokC.js → step-3-D6BFMXL_.js} +10 -10
- package/core/built/admin/assets/activitypub/{tabs-Cvwl1wXU.js → tabs-GpNecvfB.js} +6 -6
- package/core/built/admin/assets/activitypub/{topic-filter-C3LZJc2X.js → topic-filter-BPDeQQys.js} +3 -3
- package/core/built/admin/assets/activitypub/{use-activity-pub-queries-Dp9f0gov.js → use-activity-pub-queries-BoVOxXkV.js} +2 -2
- package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-C4RI0sa9.js → use-navigate-with-base-path-Bmk5h4lW.js} +220 -220
- package/core/built/admin/assets/activitypub/{use-reply-chain-data-C2oNDMUH.js → use-reply-chain-data-wVBX7swM.js} +5 -5
- package/core/built/admin/assets/activitypub/{x-Dxm6pV9X.js → x-DbQZOLiI.js} +2 -2
- package/core/built/admin/assets/{add-integration-modal--YpTq3c0.js → add-integration-modal-BC0jExDZ.js} +1 -1
- package/core/built/admin/assets/{add-newsletter-modal-C8Ix2hol.js → add-newsletter-modal-DchTkA7l.js} +1 -1
- package/core/built/admin/assets/{add-recommendation-modal-CScuNFz4.js → add-recommendation-modal-DMvaJZKp.js} +1 -1
- package/core/built/admin/assets/alert-dialog-QhXzdHfc.js +1 -0
- package/core/built/admin/assets/{analytics-Cnji45H5.js → analytics-No1DDY3A.js} +1 -1
- package/core/built/admin/assets/{announcement-bar-modal-BTHiy1ZO.js → announcement-bar-modal-DM3cYOpo.js} +1 -1
- package/core/built/admin/assets/{api-keys-Boy5pLbD.js → api-keys-BLm2NDBh.js} +1 -1
- package/core/built/admin/assets/audience-9mwU5TW6.js +1 -0
- package/core/built/admin/assets/{automations-BWpRCZ_f.js → automations-DpUNUdcZ.js} +1 -1
- package/core/built/admin/assets/{bluesky-sharing-DHOpQxff.js → bluesky-sharing-Cjrv_f62.js} +1 -1
- package/core/built/admin/assets/{box-By_EgGtm.js → box-CdfQAP_F.js} +1 -1
- package/core/built/admin/assets/{brand-icon-09YqFZjV.js → brand-icon-CrIGOA3Z.js} +1 -1
- package/core/built/admin/assets/{breadcrumb-CcFr_ltt.js → breadcrumb-DLiqCyFc.js} +1 -1
- package/core/built/admin/assets/{button-BshWPHvn.js → button-B2jcu6bk.js} +1 -1
- package/core/built/admin/assets/{card-CiiE7QfM.js → card--VNbfgo3.js} +1 -1
- package/core/built/admin/assets/{chart-BnXyfH11.js → chart-BrhA41Zi.js} +1 -1
- package/core/built/admin/assets/chart-helpers-Fo3bUL3K.js +1 -0
- package/core/built/admin/assets/{checkbox-Dwwr_3Py.js → checkbox-BfKktMph.js} +1 -1
- package/core/built/admin/assets/{chunk.524.91ecb33e6afc3bd8949b.js → chunk.524.60ca4692d91c6022042f.js} +4 -4
- package/core/built/admin/assets/{chunk.582.512549909741883f960c.js → chunk.582.525c7617c2d9e94c940a.js} +6 -6
- package/core/built/admin/assets/{chunk.16.f76a6314082d813d67e0.js → chunk.896.435fe0637944d4a69810.js} +3 -3
- package/core/built/admin/assets/{code-editor-view-BwIdPy_k.js → code-editor-view-CYVu4EW6.js} +1 -1
- package/core/built/admin/assets/{code-editor-view-CtkF82Fv.js → code-editor-view-DCQJxsfU.js} +1 -1
- package/core/built/admin/assets/{color-picker-Bmo1r9Fc.js → color-picker-BTY_NdEm.js} +1 -1
- package/core/built/admin/assets/{color-picker-field-DywowPhF.js → color-picker-field-CPlkzOH0.js} +1 -1
- package/core/built/admin/assets/{combobox-C4QCh6Yw.js → combobox-DrMtv_4P.js} +1 -1
- package/core/built/admin/assets/command-ZdgYJpoI.js +1 -0
- package/core/built/admin/assets/comments-kidj60-h.js +1 -0
- package/core/built/admin/assets/{confirmation-context-CLFHhyyH.js → confirmation-context-BhbmQQEl.js} +1 -1
- package/core/built/admin/assets/{container-LiZf3XdY.js → container-BuQG1wuP.js} +1 -1
- package/core/built/admin/assets/{content-api-modal-BtpNI92-.js → content-api-modal-CyQEC3fr.js} +1 -1
- package/core/built/admin/assets/{copy-field-CglgRZyG.js → copy-field-B3M1s78L.js} +1 -1
- package/core/built/admin/assets/{custom-field-type-option-D0PXoSnP.js → custom-field-type-option-CsGIZk1J.js} +1 -1
- package/core/built/admin/assets/{custom-integration-modal-DCIHKN33.js → custom-integration-modal-BY37O_9X.js} +1 -1
- package/core/built/admin/assets/{data-list-CupF7bjM.js → data-list-CA2jYGPq.js} +1 -1
- package/core/built/admin/assets/{date-range-select-JPwM0yUj.js → date-range-select-DD2RKkgB.js} +1 -1
- package/core/built/admin/assets/design-and-theme-modal-DUSKM4uC.js +22 -0
- package/core/built/admin/assets/{detail-page-D8lx2SdP.js → detail-page-Dnv-CdR1.js} +1 -1
- package/core/built/admin/assets/dialog-B44iRwlc.js +1 -0
- package/core/built/admin/assets/{dirty-confirm-dialog-CmARpZQS.js → dirty-confirm-dialog-BxgQgQ6H.js} +1 -1
- package/core/built/admin/assets/{disabled-sources-indicator-BTJ2ClQu.js → disabled-sources-indicator-Cvy47bE2.js} +1 -1
- package/core/built/admin/assets/{dist-DzcfoDJ3.js → dist-8YJUlf3B.js} +1 -1
- package/core/built/admin/assets/{dist-Cb5RSHSg.js → dist-B3keLvjj.js} +1 -1
- package/core/built/admin/assets/{dist-QLZuGq7o2.js → dist-Cy8tfrp_.js} +1 -1
- package/core/built/admin/assets/{dist-BT_Z-eCn.js → dist-Dgt2cr6a.js} +1 -1
- package/core/built/admin/assets/{domain-D0SAtc-T.js → domain-Ca6KhoQt.js} +1 -1
- package/core/built/admin/assets/{dropzone-CaPOeDRZ.js → dropzone-Bb-5zQTk.js} +1 -1
- package/core/built/admin/assets/edit-profile-BdupLlus.js +1 -0
- package/core/built/admin/assets/{editor-COXn4Atu.js → editor-BP883Lpn.js} +3 -3
- package/core/built/admin/assets/{embed-signup-form-modal-BFTPf04i.js → embed-signup-form-modal-DeBMLxlL.js} +1 -1
- package/core/built/admin/assets/{empty-indicator-WB1WgT9h.js → empty-indicator-D9QdpuNX.js} +1 -1
- package/core/built/admin/assets/{explore-BsNYrubV.js → explore-FB-CimXw.js} +1 -1
- package/core/built/admin/assets/{feed-8RR1O1bK.js → feed-C1GxsmI2.js} +1 -1
- package/core/built/admin/assets/{field-LmNk7wZh.js → field-Cj8lmDOo.js} +1 -1
- package/core/built/admin/assets/{filter-sources-4C0kF1NU.js → filter-sources-D5n5bFA2.js} +1 -1
- package/core/built/admin/assets/{filters-CV5jCb9n.js → filters-DJEzkMUK.js} +1 -1
- package/core/built/admin/assets/{filters-Dmr0PoqU.js → filters-MZXvdH5D.js} +1 -1
- package/core/built/admin/assets/{first-promoter-modal-OCzSaL3B.js → first-promoter-modal-CGTGLCr5.js} +1 -1
- package/core/built/admin/assets/{ghost-403cb39badad3df411fc0ba27d220047.js → ghost-3894eedcc6968f658578c0abfe942aab.js} +2 -2
- package/core/built/admin/assets/{gift-link-modal-0mzjn5oF.js → gift-link-modal-B6v0tnRN.js} +1 -1
- package/core/built/admin/assets/{grid-CUciBfjf.js → grid-Dj29PY05.js} +1 -1
- package/core/built/admin/assets/growth-BGAJD1rs.js +3 -0
- package/core/built/admin/assets/growth-D6mhcx3q.js +1 -0
- package/core/built/admin/assets/{heading-CRZZ2FUe.js → heading-Dh5SFVjL.js} +1 -1
- package/core/built/admin/assets/history-modal-iKwUY3XR.js +1 -0
- package/core/built/admin/assets/html-field-C8qVGGC1.js +1 -0
- package/core/built/admin/assets/{images-C0XvUYMb.js → images-h8VZEQ9k.js} +1 -1
- package/core/built/admin/assets/{inbox-DZXDUt4s.js → inbox-BYd1M06Q.js} +13 -13
- package/core/built/admin/assets/index-DjQe-e5s.js +4 -0
- package/core/built/admin/assets/{index.es-BMUCj9TR.js → index.es-VihPwfeH.js} +1 -1
- package/core/built/admin/assets/{inline-Cw-gigDW.js → inline-BWSs_VzR.js} +1 -1
- package/core/built/admin/assets/{input-UHrKuvBT.js → input--W-rCTrX.js} +1 -1
- package/core/built/admin/assets/{input-group-BPAxETpQ.js → input-group-D8sCXRF5.js} +1 -1
- package/core/built/admin/assets/{input-surface-BdOe4KzO.js → input-surface-BsrIZeSF.js} +1 -1
- package/core/built/admin/assets/{integration-header-B4DyXV06.js → integration-header-Bm6IDb1A.js} +1 -1
- package/core/built/admin/assets/{invite-user-modal-BrAkxEO3.js → invite-user-modal-MdImLCaJ.js} +1 -1
- package/core/built/admin/assets/{koenig-lexical-60O_8aiO.js → koenig-lexical-_-IsVI7E.js} +1 -1
- package/core/built/admin/assets/koenig-loader-DYZpm6El.js +2 -0
- package/core/built/admin/assets/{kpi-card-fUHZlzBX.js → kpi-card-DW_2y3ug.js} +1 -1
- package/core/built/admin/assets/kpi-card-DZQk_0W8.js +1 -0
- package/core/built/admin/assets/kpi-helpers-PueTKuA6.js +1 -0
- package/core/built/admin/assets/kpi-tabs-CojDs-Qz.js +1 -0
- package/core/built/admin/assets/{label-VIG969IC.js → label-DjbT91GM.js} +1 -1
- package/core/built/admin/assets/{label-picker-BBWykUeA.js → label-picker-cB51xl1r.js} +1 -1
- package/core/built/admin/assets/layout-c_B_1hax.js +1 -0
- package/core/built/admin/assets/{link-helpers-Dtq9fxQg.js → link-helpers-MVDdnFCY.js} +1 -1
- package/core/built/admin/assets/{list-page-CdsnQR9N.js → list-page-BucXJ0hi.js} +1 -1
- package/core/built/admin/assets/{loading-indicator-SFTqyYVE.js → loading-indicator-BpFWTVgh.js} +1 -1
- package/core/built/admin/assets/{member-custom-fields-gOv6Hoh3.js → member-custom-fields-qs0dIkxM.js} +1 -1
- package/core/built/admin/assets/member-detail-B6uec2a6.js +1 -0
- package/core/built/admin/assets/members-BQF3CqhI.js +2 -0
- package/core/built/admin/assets/{modal-page-BMTzFHVO.js → modal-page-xCivTMvI.js} +1 -1
- package/core/built/admin/assets/{moderation-DzzPLDyl.js → moderation-DY4wF1Q3.js} +1 -1
- package/core/built/admin/assets/{multi-select-combobox-CGohnsxJ.js → multi-select-combobox-B6LiRzDO.js} +1 -1
- package/core/built/admin/assets/navigation-modal-DX-gNF3X.js +1 -0
- package/core/built/admin/assets/newsletter-CyQA7m3m.js +1 -0
- package/core/built/admin/assets/{newsletter-detail-modal-DQU3r4g2.js → newsletter-detail-modal-BDrptuxn.js} +1 -1
- package/core/built/admin/assets/{newsletter-emails-D5ql1rud.js → newsletter-emails-CFeLlt4z.js} +1 -1
- package/core/built/admin/assets/newsletters-DXuNmC42.js +1 -0
- package/core/built/admin/assets/{note-i8k6pjaw.js → note-Cgo2LCJ6.js} +1 -1
- package/core/built/admin/assets/notifications-BC50AMku.js +1 -0
- package/core/built/admin/assets/{offers-container-modal-BWfjSdyg.js → offers-container-modal-DWycIMzT.js} +1 -1
- package/core/built/admin/assets/{onboarding-route-Cu_ROWPn.js → onboarding-route-Dmc4IPm3.js} +1 -1
- package/core/built/admin/assets/overview-CVbFtn-k.js +1 -0
- package/core/built/admin/assets/overview-YKj7SZaK.js +1 -0
- package/core/built/admin/assets/{page-header-Cfds8pCg.js → page-header-BR_nbIPp.js} +1 -1
- package/core/built/admin/assets/{pintura-modal-TDTrJ89x.js → pintura-modal-BR9hEvS8.js} +1 -1
- package/core/built/admin/assets/popover-CCy0h5rq.js +1 -0
- package/core/built/admin/assets/{portal-frame-DjBF-uy2.js → portal-frame-dc4XKr0e.js} +1 -1
- package/core/built/admin/assets/portal-modal-BvvdF_B9.js +1 -0
- package/core/built/admin/assets/{post-analytics-Buz1COoY.js → post-analytics-DX470WRG.js} +1 -1
- package/core/built/admin/assets/{post-analytics-header-B-P0eFnT.js → post-analytics-header-CXpJmdDv.js} +1 -1
- package/core/built/admin/assets/{post-analytics-provider-Cu3jNeFh.js → post-analytics-provider-CLfKGWZy.js} +1 -1
- package/core/built/admin/assets/{post-share-modal-P1_M6o-H.js → post-share-modal-Cl0NXRJr.js} +1 -1
- package/core/built/admin/assets/{preferences-Cq1aOiLy.js → preferences-DO0UUWFp.js} +2 -2
- package/core/built/admin/assets/{preview-chrome-BOVO6_PE.js → preview-chrome-BljUBlOk.js} +1 -1
- package/core/built/admin/assets/{preview-modal-MlTjP8UU.js → preview-modal-C-BL-F9k.js} +1 -1
- package/core/built/admin/assets/profile-CxT-0l4d.js +1 -0
- package/core/built/admin/assets/radio-group-Bgz60i81.js +1 -0
- package/core/built/admin/assets/{router-provider-CJC58zTy.js → router-provider-B0gZyiGJ.js} +1 -1
- package/core/built/admin/assets/{schemas-CRsC53ls.js → schemas-4UPic-oD.js} +2 -2
- package/core/built/admin/assets/select-DuDUFdPq.js +1 -0
- package/core/built/admin/assets/{settings-B5hJKZ5C.js → settings-BjCii7BM.js} +1 -1
- package/core/built/admin/assets/settings-b8kNzZSQ.js +4 -0
- package/core/built/admin/assets/{settings-breadcrumbs-sLDNedBW.js → settings-breadcrumbs-CyP_9zTo.js} +1 -1
- package/core/built/admin/assets/{shade-app-F7WxOyfk-nufqw1hd.js → shade-app-CcS3f8MZ-vwURazk8.js} +2 -2
- package/core/built/admin/assets/{share-modal-CLBfj377.js → share-modal-BV70mr9k.js} +1 -1
- package/core/built/admin/assets/{skeleton-D7hwjdry.js → skeleton-Ce9GgUpf.js} +1 -1
- package/core/built/admin/assets/{slack-modal-Bt9I_tEo.js → slack-modal-Be2_KK-z.js} +1 -1
- package/core/built/admin/assets/sort-button-Cc-Z96sA.js +1 -0
- package/core/built/admin/assets/{source-icon-BPsD5ees.js → source-icon-v6PUnmyM.js} +1 -1
- package/core/built/admin/assets/{stack-CIfOAAVf.js → stack-B2eszIiq.js} +1 -1
- package/core/built/admin/assets/{stats-B_YkF7bp.js → stats-C4reGh9O.js} +1 -1
- package/core/built/admin/assets/{stats-view-BOCp9RG8.js → stats-view-DP9pQ62k.js} +1 -1
- package/core/built/admin/assets/{step-1-CMta6YFO.js → step-1-DSRp2vBj.js} +1 -1
- package/core/built/admin/assets/{step-2-BG04nh5q.js → step-2-COqv2g0u.js} +1 -1
- package/core/built/admin/assets/{step-3-ZnMaVIPj.js → step-3-6W1NMVQc.js} +2 -2
- package/core/built/admin/assets/{stripe-button-DDoUKN5a.js → stripe-button-D2K42Uty.js} +1 -1
- package/core/built/admin/assets/{stripe-connect-modal-BeSukI8q.js → stripe-connect-modal-Z-UT_BGc.js} +1 -1
- package/core/built/admin/assets/{switch-C9djUIMO.js → switch-CI4gLWqb.js} +1 -1
- package/core/built/admin/assets/{table-CrqQtkR2.js → table-B2pIKjVh.js} +1 -1
- package/core/built/admin/assets/{tabs-CGisSbWq.js → tabs-SaW_UT-Q.js} +1 -1
- package/core/built/admin/assets/tag-detail-Dc0nTOtU.js +2 -0
- package/core/built/admin/assets/tags-BLaXBwnb.js +1 -0
- package/core/built/admin/assets/testimonials-modal-sFwRnNLh.js +1 -0
- package/core/built/admin/assets/{text-DU9Hv33_.js → text-BQDSDsKs.js} +1 -1
- package/core/built/admin/assets/{textarea-d9qEkMOP.js → textarea-DJ1Q5V39.js} +1 -1
- package/core/built/admin/assets/{tier-detail-modal-CxRwgTPR.js → tier-detail-modal-BCFpWwUS.js} +1 -1
- package/core/built/admin/assets/{toggle-group-CtKZURJd.js → toggle-group-EM9WpESu.js} +1 -1
- package/core/built/admin/assets/{topic-filter-D8JT8Tq1.js → topic-filter-DY4gNHn2.js} +1 -1
- package/core/built/admin/assets/{transistor-modal-6PUf0idx.js → transistor-modal-CpyPG-MH.js} +1 -1
- package/core/built/admin/assets/trend-badge-ByMkuAuH.js +1 -0
- package/core/built/admin/assets/{unsplash-modal-BPuDBPja.js → unsplash-modal-Cv2Q6GtY.js} +1 -1
- package/core/built/admin/assets/{use-analytics-data--opuzwcz.js → use-analytics-data-CHvjMYuT.js} +1 -1
- package/core/built/admin/assets/use-check-theme-limit-error-Qv4SVXqw.js +2 -0
- package/core/built/admin/assets/use-filter-params-CAvfDvf1.js +1 -0
- package/core/built/admin/assets/use-growth-stats-D6mZXGhK.js +1 -0
- package/core/built/admin/assets/{use-limiter-TDSNiHPB.js → use-limiter-cwJvsNBo.js} +1 -1
- package/core/built/admin/assets/{use-navigate-with-base-path-CK989MlC.js → use-navigate-with-base-path-BHPA228f.js} +1 -1
- package/core/built/admin/assets/{use-pintura-config-CnCGrDFk.js → use-pintura-config-CzTfnufz.js} +1 -1
- package/core/built/admin/assets/{use-pintura-editor-ntphvtUd.js → use-pintura-editor-BDBXWUYq.js} +1 -1
- package/core/built/admin/assets/{use-post-referrers-CbXLFIex.js → use-post-referrers-DbY-mzci.js} +1 -1
- package/core/built/admin/assets/{use-reply-chain-data-JYFKSO83.js → use-reply-chain-data-BeQwz8oF.js} +1 -1
- package/core/built/admin/assets/{use-router-history-entry-BwfQS2mq.js → use-router-history-entry-Bg6BhBQQ.js} +1 -1
- package/core/built/admin/assets/{use-setting-group-DQxV42-O.js → use-setting-group-VM7FQwMY.js} +1 -1
- package/core/built/admin/assets/{use-settings-navigation-BBzro2-V.js → use-settings-navigation-BbrSUVcf.js} +1 -1
- package/core/built/admin/assets/{use-simple-pagination-B2TdNX67.js → use-simple-pagination-Dum6Irbs.js} +1 -1
- package/core/built/admin/assets/{use-staff-users-QrR9voeC.js → use-staff-users-cZg4ugOF.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-query-D2Aeoty5.js → use-tinybird-query-B1IMyAcv.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-token-DBuwMmln.js → use-tinybird-token-Bow0Zwn8.js} +1 -1
- package/core/built/admin/assets/{use-unsaved-changes-guard-DpYJcj1d.js → use-unsaved-changes-guard-BAy0RANR.js} +1 -1
- package/core/built/admin/assets/{use-url-input-WnIqckzS.js → use-url-input-Df5QzNa7.js} +1 -1
- package/core/built/admin/assets/user-detail-modal-yipSoQfv.js +1 -0
- package/core/built/admin/assets/{virtual-list-D3MfPNOh.js → virtual-list-DEx8WgiO.js} +1 -1
- package/core/built/admin/assets/web-CKcXAu86.js +1 -0
- package/core/built/admin/assets/web-DR4TqM3E.js +2 -0
- package/core/built/admin/assets/{zapier-modal-BO6PS_Vd.js → zapier-modal-Cw3BTBUu.js} +1 -1
- package/core/built/admin/index.html +24 -25
- package/core/frontend/services/rendering/renderer.js +15 -0
- package/core/server/adapters/storage/LocalStorageBase.js +8 -5
- package/core/server/api/endpoints/db.js +19 -5
- package/core/server/api/endpoints/index.js +4 -0
- package/core/server/api/endpoints/member-custom-fields.js +4 -14
- package/core/server/api/endpoints/posts.js +1 -0
- package/core/server/api/endpoints/tiers-checkout-config.js +59 -0
- package/core/server/api/endpoints/utils/serializers/output/config.js +1 -0
- package/core/server/api/endpoints/utils/serializers/output/index.js +4 -0
- package/core/server/api/endpoints/utils/serializers/output/tiers-checkout-config.js +12 -0
- package/core/server/data/exporter/table-lists.js +3 -0
- package/core/server/data/importer/content-files.js +57 -0
- package/core/server/data/importer/handlers/image.js +2 -2
- package/core/server/data/importer/import-archive.js +131 -0
- package/core/server/data/importer/import-manager.js +18 -180
- package/core/server/data/importer/importers/content-file-importer.js +66 -4
- package/core/server/data/migrations/versions/6.61/2026-08-19-14-30-20-add-written-by-to-members-custom-field-values.js +42 -0
- package/core/server/data/migrations/versions/6.61/2026-08-19-14-38-53-add-members-custom-field-bindings-table.js +26 -0
- package/core/server/data/migrations/versions/6.61/2026-08-19-14-48-06-add-tier-checkout-field-tables.js +35 -0
- package/core/server/data/schema/schema.js +90 -0
- package/core/server/data/seeders/importers/automation-action-revisions-importer.js +3 -3
- package/core/server/data/seeders/importers/automation-actions-importer.js +3 -3
- package/core/server/data/seeders/importers/automation-run-steps-importer.js +3 -3
- package/core/server/data/seeders/importers/automation-runs-importer.js +5 -5
- package/core/server/data/seeders/importers/automations-importer.js +3 -3
- package/core/server/data/seeders/importers/comment-reports-importer.js +1 -1
- package/core/server/data/seeders/importers/comments-importer.js +1 -1
- package/core/server/data/seeders/importers/email-batches-importer.js +1 -1
- package/core/server/data/seeders/importers/email-recipients-importer.js +1 -1
- package/core/server/data/seeders/importers/emails-importer.js +1 -1
- package/core/server/data/seeders/importers/labels-importer.js +1 -1
- package/core/server/data/seeders/importers/members-click-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-created-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-feedback-importer.js +1 -1
- package/core/server/data/seeders/importers/members-importer.js +1 -1
- package/core/server/data/seeders/importers/members-login-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-products-importer.js +1 -1
- package/core/server/data/seeders/importers/members-status-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-stripe-customers-importer.js +1 -1
- package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +1 -1
- package/core/server/data/seeders/importers/members-subscribe-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +1 -1
- package/core/server/data/seeders/importers/offer-redemptions-importer.js +1 -1
- package/core/server/data/seeders/importers/offers-importer.js +1 -1
- package/core/server/data/seeders/importers/posts-importer.js +1 -1
- package/core/server/data/seeders/importers/table-importer.js +2 -2
- package/core/server/data/seeders/importers/tags-importer.js +1 -1
- package/core/server/data/seeders/importers/users-importer.js +1 -1
- package/core/server/data/seeders/importers/web-mentions-importer.js +1 -1
- package/core/server/data/seeders/utils/random.js +3 -3
- package/core/server/ghost-server.js +3 -2
- package/core/server/lib/db-types/boolean.js +18 -0
- package/core/server/lib/promise-pool.js +31 -0
- package/core/server/services/automations/database-automations-repository.js +26 -26
- package/core/server/services/automations/poll.js +1 -0
- package/core/server/services/content-import/import/assets.js +74 -0
- package/core/server/services/content-import/import/importer.js +57 -14
- package/core/server/services/content-import/import/post-data.js +1 -0
- package/core/server/services/content-import/import/post-repository.js +78 -0
- package/core/server/services/content-import/import/relations.js +149 -0
- package/core/server/services/content-import/import/row.js +11 -0
- package/core/server/services/content-import/import/schema.js +29 -0
- package/core/server/services/content-import/import/source.js +125 -0
- package/core/server/services/content-import/index.js +6 -28
- package/core/server/services/email-analytics/email-analytics-service.js +8 -1
- package/core/server/services/email-analytics/lib/queries.js +7 -1
- package/core/server/services/gift-links/schema.js +3 -3
- package/core/server/services/gifts/CONTEXT.md +1 -1
- package/core/server/services/gifts/constants.js +1 -1
- package/core/server/services/gifts/gift-bookshelf-repository.js +2 -2
- package/core/server/services/gifts/gift-delivery-bookshelf-repository.js +18 -9
- package/core/server/services/gifts/gift-delivery-schema.js +5 -5
- package/core/server/services/gifts/gift-delivery-service.js +4 -0
- package/core/server/services/gifts/gift-schema.js +10 -10
- package/core/server/services/gifts/gift-service.js +4 -2
- package/core/server/services/jobs-service/register-job-handlers.js +5 -5
- package/core/server/services/lib/mailgun-client.js +44 -8
- package/core/server/services/media-inliner/external-media-inliner-job.js +12 -0
- package/core/server/services/media-inliner/external-media-inliner.js +103 -29
- package/core/server/services/media-inliner/service.js +13 -41
- package/core/server/services/media-inliner/types.js +2 -0
- package/core/server/services/members/import-export/export/exporter.js +4 -6
- package/core/server/services/members/import-export/import/importer.js +21 -5
- package/core/server/services/members/import-export/import/stripe-utils.js +6 -1
- package/core/server/services/members/import-export/index.js +6 -1
- package/core/server/services/members/members-api/members-api.js +5 -0
- package/core/server/services/members/members-api/services/member-bread-service.js +19 -1
- package/core/server/services/members/members-api/services/payments-service.js +47 -1
- package/core/server/services/members-custom-fields/actions.js +27 -1
- package/core/server/services/members-custom-fields/bindings-service.js +119 -0
- package/core/server/services/members-custom-fields/definitions-service.js +104 -13
- package/core/server/services/members-custom-fields/index.js +11 -4
- package/core/server/services/members-custom-fields/queries.js +5 -0
- package/core/server/services/members-custom-fields/schema.js +37 -6
- package/core/server/services/members-custom-fields/values-service.js +15 -3
- package/core/server/services/public-config/config.js +7 -0
- package/core/server/services/stripe/services/checkout/allowed-countries.js +267 -0
- package/core/server/services/stripe/services/checkout/completed-session.js +68 -0
- package/core/server/services/stripe/services/checkout/field-ports.js +34 -0
- package/core/server/services/stripe/services/checkout/session-options.js +97 -0
- package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +49 -0
- package/core/server/services/stripe/stripe-api.js +29 -0
- package/core/server/services/stripe/stripe-service.js +7 -0
- package/core/server/services/tier-checkout-config/codec.js +95 -0
- package/core/server/services/tier-checkout-config/destinations.js +17 -0
- package/core/server/services/tier-checkout-config/index.js +26 -0
- package/core/server/services/tier-checkout-config/models.js +57 -0
- package/core/server/services/tier-checkout-config/queries.js +80 -0
- package/core/server/services/tier-checkout-config/schema.js +33 -0
- package/core/server/services/tier-checkout-config/serializers.js +122 -0
- package/core/server/services/tier-checkout-config/service.js +303 -0
- package/core/server/services/tiers/service.js +21 -0
- package/core/server/web/api/endpoints/admin/routes.js +24 -13
- package/core/server/web/api/middleware/upload.js +2 -2
- package/core/server/web/parent/app.js +5 -0
- package/core/server/web/parent/middleware/filter-query-parameters.js +94 -0
- package/core/server/web/parent/middleware/index.js +1 -0
- package/core/server/web/query-parameter-policy/index.js +9 -0
- package/core/server/web/query-parameter-policy/policy.json +58 -0
- package/core/server/web/query-parameter-policy/schema.js +38 -0
- package/core/shared/config/defaults.json +3 -0
- package/core/shared/config/env/config.testing-mysql.json +3 -0
- package/core/shared/config/env/config.testing.json +3 -0
- package/core/shared/config/overrides.json +4 -2
- package/core/shared/labs.js +5 -14
- package/package.json +12 -13
- package/pnpm-lock.yaml +44 -46
- package/pnpm-workspace.yaml +6 -6
- package/tsconfig.json +2 -3
- package/core/built/admin/assets/activitypub/layout-CXajhRsL.js +0 -1
- package/core/built/admin/assets/alert-dialog-wEbVxANM.js +0 -1
- package/core/built/admin/assets/app-utils-D2Wp7ZSS.js +0 -1
- package/core/built/admin/assets/audience-DTLMXAFH.js +0 -1
- package/core/built/admin/assets/chart-helpers-B3OqQ6Ez.js +0 -1
- package/core/built/admin/assets/command-DcLbSifC.js +0 -1
- package/core/built/admin/assets/comments-Bxy_3WyE.js +0 -1
- package/core/built/admin/assets/design-and-theme-modal-CZ-PkW7o.js +0 -23
- package/core/built/admin/assets/dialog-Db7c164G.js +0 -1
- package/core/built/admin/assets/edit-profile-By7v5XW5.js +0 -1
- package/core/built/admin/assets/growth-55vWlGT_.js +0 -1
- package/core/built/admin/assets/growth-DA5AluYw.js +0 -3
- package/core/built/admin/assets/history-modal-G1s5hHz7.js +0 -1
- package/core/built/admin/assets/html-field-BegxsWpw.js +0 -1
- package/core/built/admin/assets/index-CDP9tIOk.js +0 -4
- package/core/built/admin/assets/koenig-loader-DwVY_V-H.js +0 -1
- package/core/built/admin/assets/kpi-card-LERqWBoY.js +0 -1
- package/core/built/admin/assets/kpi-helpers-DB3ouhYF.js +0 -1
- package/core/built/admin/assets/kpi-tabs-BGvtMD8S.js +0 -1
- package/core/built/admin/assets/layout-Di5K7doM.js +0 -1
- package/core/built/admin/assets/member-detail-D7mZDDp3.js +0 -1
- package/core/built/admin/assets/member-route-0Aa52Ntz.js +0 -1
- package/core/built/admin/assets/members-DvZG9t69.js +0 -2
- package/core/built/admin/assets/navigation-modal-CI8Bx5vn.js +0 -1
- package/core/built/admin/assets/newsletter-Bg3cq5U-.js +0 -1
- package/core/built/admin/assets/newsletters-DMDfZbMS.js +0 -1
- package/core/built/admin/assets/notifications-psA_2Ph4.js +0 -1
- package/core/built/admin/assets/overview-C-6xOLaf.js +0 -1
- package/core/built/admin/assets/overview-DaLhpRrC.js +0 -1
- package/core/built/admin/assets/popover-CFgqFDvC.js +0 -1
- package/core/built/admin/assets/portal-modal-Cf0pBAk8.js +0 -1
- package/core/built/admin/assets/profile-D6dHYf2o.js +0 -1
- package/core/built/admin/assets/radio-group-CjtmsCPl.js +0 -1
- package/core/built/admin/assets/select-D_RQaXgt.js +0 -1
- package/core/built/admin/assets/settings-DIo_F-MF.js +0 -4
- package/core/built/admin/assets/sort-button-DMBXF7tP.js +0 -1
- package/core/built/admin/assets/tag-detail-2a3BfzTW.js +0 -2
- package/core/built/admin/assets/tags-Dp2_8UzL.js +0 -1
- package/core/built/admin/assets/testimonials-modal-C9nrypNo.js +0 -1
- package/core/built/admin/assets/use-check-theme-limit-error-C9-QhGdV.js +0 -1
- package/core/built/admin/assets/use-filter-params-CSpAvgD2.js +0 -1
- package/core/built/admin/assets/use-growth-stats-BOmoPDHJ.js +0 -1
- package/core/built/admin/assets/user-detail-modal-59mBJqxN.js +0 -1
- package/core/built/admin/assets/web-DUuX7nE2.js +0 -2
- package/core/built/admin/assets/web-N8ucs2aG.js +0 -1
- /package/core/server/lib/{db-date.js → db-types/date.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{i as r,o as i}from"./framework-provider-DqI25epG.js";import{In as a}from"./index-CDP9tIOk.js";var o=e(t(),1),s=n(),c=class extends o.Component{state={hasError:!1};constructor(e){super(e)}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){i(n=>{n.setTag(`adminx_settings_component`,t.componentStack),r(e)}),console.error(e),console.error(`In component:`,t.componentStack)}render(){return this.state.hasError?(0,s.jsxs)(a,{className:`border border-state-danger/40 bg-state-danger/10 text-destructive`,role:`alert`,size:`sm`,variant:`destructive`,children:[`An error occurred loading `,this.props.name,`. Please refresh and try again.`]}):this.props.children}},l=function(e){let t=`pending`,n,r,i=e().then(e=>{t=`success`,n=e},e=>{t=`error`,r=e});return{read:()=>{switch(t){case`pending`:throw i;case`error`:throw r instanceof Error?r:Error(String(r));default:return n}}}};export{c as n,l as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{c as n}from"./dist-Cb5RSHSg.js";import{a as r,o as i}from"./chart-helpers-B3OqQ6Ez.js";e();var a=t(),o=({children:e,className:t,...r})=>(0,a.jsx)(`div`,{className:n(`flex flex-col items-start gap-4 border-r border-border px-6 py-5 transition-all last:border-none`,t),...r,children:e}),s=({children:e,className:t,color:r,...i})=>(0,a.jsxs)(`div`,{className:n(`flex h-[22px] items-center gap-1.5 text-base font-medium text-muted-foreground [&_svg]:size-4`,t),...i,children:[r&&(0,a.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:r}}),e]}),c=({value:e,diffDirection:t,diffValue:n,diffTooltip:o})=>{let s=null;return t&&t!==`hidden`&&(s=t===`empty`?(0,a.jsx)(`div`,{className:`flex h-[22px] items-center px-1.5 text-xs leading-none font-medium`,"data-testid":`kpi-card-header-diff`,children:n}):(0,a.jsx)(r,{"data-testid":`kpi-card-header-diff`,direction:t,tooltip:o,value:n??``})),(0,a.jsx)(i,{trailing:s,value:e,valueTestId:`kpi-card-header-value`})};export{s as n,c as r,o as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{i as r,n as i,t as a}from"./source-icon-BPsD5ees.js";import{d as o,f as s,p as c}from"./dist-Cb5RSHSg.js";import{a as l}from"./heading-CRZZ2FUe.js";import{L as u,t as d,xr as f}from"./button-BshWPHvn.js";import{n as p}from"./chart-helpers-B3OqQ6Ez.js";import{n as m}from"./skeleton-D7hwjdry.js";import{a as h,i as g,n as _,o as v,r as y,t as b}from"./card-CiiE7QfM.js";import{a as x,c as S,i as C,l as w,n as T,o as E,r as D,s as O,t as k,u as A}from"./data-list-CupF7bjM.js";import{Cn as j,En as M,Sn as N,Tn as P,wn as F,xn as I}from"./index-CDP9tIOk.js";import{n as L}from"./post-analytics-context-D0Mw-Pmv.js";var R=e(t(),1),z=n(),B=`https://www.google.com/s2/favicons?domain=ghost.org&sz=64`,V=({dataTableHeader:e,data:t,defaultSourceIconUrl:n=B,onSourceClick:r})=>(0,z.jsxs)(k,{children:[e&&(0,z.jsxs)(x,{children:[(0,z.jsx)(C,{children:`Source`}),(0,z.jsx)(C,{children:`Visitors`})]}),(0,z.jsx)(D,{children:t?.map(e=>{let t=!!r,i=e.source?e.source.toLowerCase().replace(/[^a-z0-9]/g,`-`):`direct`;return(0,z.jsxs)(A,{className:`group/row ${t?`cursor-pointer`:``}`,"data-testid":`source-row-${i}`,onClick:t?()=>r(e.source):void 0,children:[(0,z.jsx)(T,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,z.jsx)(E,{className:`group-hover/datalist:max-w-[calc(100%-140px)]`,children:(0,z.jsx)(`div`,{className:`flex items-center space-x-4 overflow-hidden`,children:(0,z.jsx)(`div`,{className:`truncate font-medium`,children:e.linkUrl&&!r?(0,z.jsxs)(`a`,{className:`group/link flex items-center gap-2`,href:e.linkUrl,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{className:`group-hover/link:underline`,children:e.displayName})]}):(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{children:e.displayName})]})})})}),(0,z.jsxs)(O,{children:[(0,z.jsx)(S,{children:s(e.visits)}),(0,z.jsx)(w,{children:c(e.percentage||0)})]})]},e.source)})})]}),H=({data:e,range:t=30,totalVisitors:n=0,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s=B,tableOnly:c=!1,topSourcesLimit:x=10,onSourceClick:S})=>{let{isPostLoading:C}=L(),w=R.useMemo(()=>r({data:e,mode:`visits`,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s}),[e,a,o,s]),T=R.useMemo(()=>i({processedData:w,totalVisitors:n,mode:`visits`}),[w,n]),E=T.slice(0,x),D=`Top sources`,O=`How readers found this post ${t&&` ${p(t)}`}`;if(c){let e=T.slice(0,x),n=T.length>x;return(0,z.jsxs)(`div`,{children:[(0,z.jsx)(V,{data:e,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:S}),n&&(0,z.jsx)(`div`,{className:`mt-4`,children:(0,z.jsxs)(I,{children:[(0,z.jsx)(M,{asChild:!0,children:(0,z.jsxs)(d,{className:`w-full`,size:`sm`,variant:`outline`,children:[`View all (`,T.length,`) `,(0,z.jsx)(f,{size:14})]})}),(0,z.jsxs)(N,{className:`overflow-y-auto pt-0 sm:max-w-[480px]`,children:[(0,z.jsxs)(F,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(P,{children:D}),(0,z.jsx)(j,{children:O})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:T,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:S})})]})]})})]})}return(0,z.jsxs)(b,{className:`group/datalist`,"data-testid":`top-sources-card`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,z.jsxs)(h,{className:`p-0`,children:[(0,z.jsx)(v,{children:D}),(0,z.jsx)(y,{children:O})]}),(0,z.jsx)(l,{className:`mr-2`,children:`Visitors`})]}),(0,z.jsxs)(_,{className:`overflow-hidden`,children:[(0,z.jsx)(`div`,{className:`h-[1px] w-full bg-border`}),C?(0,z.jsx)(m,{lines:5}):E.length>0?(0,z.jsx)(V,{data:E,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:S}):(0,z.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`No sources data available.`})]}),T.length>10&&(0,z.jsx)(g,{children:(0,z.jsxs)(I,{children:[(0,z.jsx)(M,{asChild:!0,children:(0,z.jsxs)(d,{variant:`outline`,children:[`View all `,(0,z.jsx)(u,{})]})}),(0,z.jsxs)(N,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,z.jsxs)(F,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(P,{children:D}),(0,z.jsx)(j,{children:O})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:T,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:S})})]})]})})]})},U={visits:{dataKey:`visits`,label:`Visitors`,color:`var(--chart-blue)`,formatter:s},views:{dataKey:`pageviews`,label:`Pageviews`,color:`var(--chart-teal)`,formatter:s},"bounce-rate":{dataKey:`bounce_rate`,label:`Bounce rate`,color:`var(--chart-purple)`,formatter:c},duration:{dataKey:`avg_session_sec`,label:`Time on page`,color:`var(--chart-orange)`,formatter:o}},W=e=>{if(!e?.length)return{visits:`0`,views:`0`,bounceRate:`0%`,duration:`0s`};let t=e=>{let t=Number(e);return isNaN(t)?0:t},n=e.reduce((e,n)=>e+t(n.visits),0),r=e.reduce((e,n)=>e+t(n.pageviews),0),i=r=>n===0?0:e.reduce((e,i)=>e+t(i[r])*t(i.visits)/n,0),a=i(`bounce_rate`),l=i(`avg_session_sec`);return{visits:s(n),views:s(r),bounceRate:c(a),duration:o(l)}};export{U as n,H as r,W as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r}from"./dist-Cb5RSHSg.js";import{r as i,t as a}from"./button-BshWPHvn.js";import{a as o,o as s}from"./chart-helpers-B3OqQ6Ez.js";import{i as c}from"./tabs-CGisSbWq.js";var l=e(t(),1),u=n(),d=({children:e,...t})=>(0,u.jsx)(c,{className:`h-auto`,...t,children:e}),f=({color:e,icon:t,label:n,value:a,diffDirection:c,diffValue:l,className:d,"data-testid":f})=>{let p=t?i[t]:null,m=(0,u.jsxs)(`span`,{className:`flex items-center gap-1.5 transition-all group-hover:text-foreground`,"data-type":`value`,children:[e&&(0,u.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:e}}),p&&(0,u.jsx)(p,{size:16,strokeWidth:1.5}),n]}),h=c&&c!==`hidden`?(0,u.jsx)(o,{className:`mt-0.5`,"data-testid":f?`${f}-diff`:void 0,direction:c,value:l??``}):null;return(0,u.jsx)(s,{className:r(`group`,d),label:m,size:`lg`,trailing:h,value:a,valueTestId:f})},p=l.forwardRef(({variant:e=`dropdown`,className:t,...n},i)=>(0,u.jsx)(a,{ref:i,className:r(`h-auto w-full rounded-none border-x-0 border-t-0 bg-transparent py-5 focus-visible:ring-0`,t),variant:e,...n}));p.displayName=`KpiDropdownButton`;export{d as n,f as r,p as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./index-CDP9tIOk.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{s as r}from"./framework-provider-DqI25epG.js";import{o as i}from"./hooks-CuEZV2-q.js";import{n as a}from"./dist-Ndy-PuGN.js";import{i as o}from"./currency-Dy4Tc2R2.js";import{h as s,n as c,u as l}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as u}from"./router-provider-CJC58zTy.js";import{c as d,v as f}from"./dist-Cb5RSHSg.js";import{t as p}from"./box-By_EgGtm.js";import{t as m}from"./container-LiZf3XdY.js";import{i as h}from"./app-utils-D2Wp7ZSS.js";import{$ as g,A as _,An as v,Dn as y,Dr as b,Gt as x,It as ee,Jt as te,Kt as ne,Nn as S,Ot as C,Pt as re,Un as ie,Ut as w,Vt as ae,Wt as oe,Xt as se,Zn as T,bt as E,dt as D,g as O,hn as k,k as ce,mn as A,qt as le,t as j,vr as ue,wn as de}from"./button-BshWPHvn.js";import{a as M,i as N,o as P,r as F,s as I,t as L}from"./dialog-Db7c164G.js";import{t as R}from"./switch-C9djUIMO.js";import{a as fe,c as z,i as B,o as pe,r as me,s as V,t as he}from"./alert-dialog-wEbVxANM.js";import{t as H}from"./input-UHrKuvBT.js";import{i as ge,n as _e,o as ve,s as ye,t as be}from"./select-D_RQaXgt.js";import{t as xe}from"./skeleton-D7hwjdry.js";import{n as U}from"./loading-indicator-SFTqyYVE.js";import{a as Se,i as Ce,n as we,o as Te,r as Ee,t as De}from"./breadcrumb-CcFr_ltt.js";import{n as W,t as G}from"./card-CiiE7QfM.js";import{t as Oe}from"./empty-indicator-WB1WgT9h.js";import{t as K}from"./label-VIG969IC.js";import{n as ke,o as Ae,t as je}from"./input-group-BPAxETpQ.js";import{t as Me}from"./textarea-d9qEkMOP.js";import{i as Ne}from"./users-5msE1WMs.js";import{r as Pe}from"./newsletters-DhNigJUh.js";import{C as Fe,Hn as Ie,Kn as q,Ln as Le,Mr as Re,Qn as ze,S as Be,Tr as Ve,Wn as He,Xn as Ue,b as We,f as Ge,g as Ke,h as qe,jr as Je,m as Ye,p as Xe,s as Ze,t as Qe,v as $e,x as et,xr as tt,y as nt,zn as rt}from"./index-CDP9tIOk.js";import{t as it}from"./page-header-Cfds8pCg.js";import{t as at}from"./dirty-confirm-dialog-CmARpZQS.js";import{a as ot}from"./tiers-Nd_z4BZY.js";import{t as J}from"./detail-page-D8lx2SdP.js";import{t as st}from"./validator-Cr0sMKuW.js";import{n as ct,t as lt}from"./use-unsaved-changes-guard-DpYJcj1d.js";import{g as ut,i as dt,p as ft,s as pt,t as mt}from"./member-custom-fields-gOv6Hoh3.js";import{n as ht,r as gt}from"./label-picker-BBWykUeA.js";var Y=e(t(),1),_t=new Set([`active`,`trialing`,`unpaid`,`past_due`]);function vt(e){return(e.subscriptions??[]).some(e=>_t.has(e.status))}function yt(e){return e?`Delete member + Cancel subscription`:`Delete member`}var X=n(),bt=({open:e,onOpenChange:t,member:n,allowLeaveWithUnsavedChanges:r})=>{let i=u(),o=Ge(),[s,c]=Y.useState(!1);Y.useEffect(()=>{e&&c(!1)},[e]);let l=vt(n),d=n.email||n.name||`this member`,f=async()=>{try{let e=l&&s;await o.mutateAsync({id:n.id,cancel:e}),a.success(e?`${d} was deleted and their Stripe subscription was cancelled.`:`${d} was deleted.`),t(!1),r(),i(`/members`)}catch{a.error(`Couldn’t delete the member. Please try again.`)}};return(0,X.jsx)(L,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,X.jsxs)(F,{"data-testid":`delete-member-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(I,{children:`Delete member account`}),(0,X.jsxs)(N,{children:[`Permanently delete `,(0,X.jsx)(`strong`,{children:d}),` from Ghost.`]})]}),l&&(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium`,children:`Also cancel subscription in Stripe`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If disabled, the member’s premium subscription will continue`})]}),(0,X.jsx)(R,{"aria-label":`Also cancel subscription in Stripe`,checked:s,"data-testid":`delete-member-cancel-stripe`,disabled:o.isPending,onCheckedChange:c})]}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{"data-testid":`cancel-delete-member`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(j,{"data-testid":`confirm-delete-member`,disabled:o.isPending,variant:`destructive`,onClick:()=>void f(),children:o.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Deleting`})]}):yt(s&&l)})]})]})})},xt=`Disabled from member settings`,St=({open:e,onOpenChange:t,member:n})=>{let r=Xe(),[i,o]=Y.useState(!1);Y.useEffect(()=>{e&&o(!1)},[e]);let s=n.name||n.email||`this member`,c=async()=>{try{await r.mutateAsync({id:n.id,reason:xt,hideComments:i})}catch{a.error(`Couldn’t disable commenting. Please try again.`);return}a.success(`Commenting has been disabled for ${s}.`),t(!1)};return(0,X.jsx)(L,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(F,{"data-testid":`disable-commenting-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(I,{children:`Disable commenting`}),(0,X.jsxs)(N,{children:[(0,X.jsx)(`strong`,{children:s}),` won’t be able to comment in the future. You can re-enable commenting anytime.`]})]}),(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:(0,X.jsx)(`h4`,{className:`text-sm font-medium`,children:`Hide all previous comments`})}),(0,X.jsx)(R,{"aria-label":`Hide all previous comments`,checked:i,"data-testid":`disable-commenting-hide-comments`,disabled:r.isPending,onCheckedChange:o})]}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{"data-testid":`cancel-disable-commenting`,disabled:r.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(j,{"data-testid":`confirm-disable-commenting`,disabled:r.isPending,onClick:()=>void c(),children:r.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Disabling`})]}):`Disable commenting`})]})]})})},Ct=({open:e,onOpenChange:t,memberId:n})=>{let i=r();Y.useEffect(()=>{e&&i.removeQueries({queryKey:[`MemberSigninUrlResponseType`]})},[e,i]);let{data:o,isFetching:s,isError:c}=et(n,{enabled:e,defaultErrorHandler:!1}),l=o?.url??``,u=c||!s&&!c&&!l,[d,f]=Y.useState(!1),p=Y.useRef(null),m=Y.useCallback(()=>{p.current!==null&&(clearTimeout(p.current),p.current=null)},[]);Y.useEffect(()=>{e||(m(),f(!1))},[e,m]),Y.useEffect(()=>m,[m]);let h=async()=>{try{await navigator.clipboard.writeText(l),f(!0),m(),p.current=setTimeout(()=>{f(!1),p.current=null},1e3)}catch{a.error(`Couldn’t copy the impersonation link`)}};return(0,X.jsx)(L,{open:e,onOpenChange:t,children:(0,X.jsxs)(F,{"data-testid":`impersonate-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(I,{children:`Impersonate member`}),(0,X.jsx)(N,{children:`A single-use signin link that works for 24 hours. Anyone with the link can sign in as this member.`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`member-signin-url`,children:`Signin link`}),(0,X.jsx)(H,{"data-testid":`member-signin-url`,id:`member-signin-url`,value:s?`Generating link…`:u?`Failed to generate link`:l,readOnly:!0})]}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{variant:`outline`,onClick:()=>t(!1),children:`Close`}),(0,X.jsx)(j,{disabled:s||u||!l,onClick:()=>void h(),children:s?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Generating link`})]}):d?`Copied`:`Copy link`})]})]})})},wt=({open:e,onOpenChange:t,member:n})=>{let r=We(),i=n.name||n.email||`This member`,o=async()=>{try{await r.mutateAsync({id:n.id}),a.success(`${i} has been signed out from all devices.`),t(!1)}catch{a.error(`Couldn’t sign the member out. Please try again.`)}};return(0,X.jsx)(he,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(B,{"data-testid":`logout-member-modal`,children:[(0,X.jsxs)(V,{children:[(0,X.jsx)(z,{children:`Sign out member from all devices?`}),(0,X.jsxs)(fe,{children:[(0,X.jsx)(`strong`,{children:i}),` will be signed out of all active sessions, and will need to sign in again upon return.`]})]}),(0,X.jsxs)(pe,{children:[(0,X.jsx)(me,{disabled:r.isPending,children:`Cancel`}),(0,X.jsx)(j,{"data-testid":`confirm-logout-member`,disabled:r.isPending,variant:`destructive`,onClick:()=>void o(),children:r.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Signing out`})]}):`Sign out`})]})]})})};function Tt(e){return e.can_comment===!1}function Et(e){return Tt(e)?`Enable commenting`:`Disable commenting`}var Dt=({member:e,allowLeaveWithUnsavedChanges:t})=>{let{data:n}=i(),[r,o]=Y.useState(!1),[s,c]=Y.useState(!1),[l,u]=Y.useState(!1),[d,f]=Y.useState(!1),p=Ke(),m=Be(),h=p.isPending||p.isSuccess&&m,g=Tt(e),_=Et(e),y=e.name||e.email||`this member`;if(!n||!Ne(n))return null;let b=async()=>{if(!g){u(!0);return}try{await p.mutateAsync({id:e.id}),a.success(`Commenting has been enabled for ${y}.`)}catch{a.error(`Couldn’t enable commenting. Please try again.`)}};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(Ie,{children:[(0,X.jsx)(ze,{asChild:!0,children:(0,X.jsx)(j,{"aria-label":`Actions`,className:`size-(--control-height)`,"data-testid":`member-actions`,size:`icon`,variant:`outline`,children:(0,X.jsx)(v,{size:16})})}),(0,X.jsxs)(He,{align:`end`,children:[(0,X.jsx)(q,{"data-testid":`member-actions-impersonate`,onSelect:()=>o(!0),children:`Impersonate`}),(0,X.jsx)(q,{"data-testid":`member-actions-logout`,onSelect:()=>c(!0),children:`Sign out of all devices`}),(0,X.jsx)(q,{"data-testid":`member-actions-commenting`,disabled:h,onSelect:()=>void b(),children:_}),(0,X.jsx)(Ue,{}),(0,X.jsx)(q,{className:`text-destructive focus:text-destructive`,"data-testid":`member-actions-delete`,onSelect:()=>f(!0),children:`Delete member`})]})]}),(0,X.jsx)(Ct,{memberId:e.id,open:r,onOpenChange:o}),(0,X.jsx)(wt,{member:e,open:s,onOpenChange:c}),(0,X.jsx)(St,{member:e,open:l,onOpenChange:u}),(0,X.jsx)(bt,{allowLeaveWithUnsavedChanges:t,member:e,open:d,onOpenChange:f})]})},Z=e(f(),1);function Ot(e){return e?/^(https?:\/\/|\/|#\/)/i.test(e):!1}var kt=new Set([`bif`,`clp`,`djf`,`gnf`,`jpy`,`kmf`,`krw`,`mga`,`pyg`,`rwf`,`ugx`,`vnd`,`vuv`,`xaf`,`xof`,`xpf`]);function At(e,t){let n=kt.has(t.toLowerCase())?e:e/100,r=n%1==0;try{return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:t.toUpperCase(),minimumFractionDigits:r?0:2,maximumFractionDigits:r?0:2}).format(n)}catch{return`${n}`}}function jt(e){return e?.trim()||null}function Mt(e){let t;return e.type===`login_event`&&(t=`logged-in`),e.type===`payment_event`&&(t=`subscriptions`),e.type===`newsletter_event`&&(t=e.data.subscribed?`subscribed-to-email`:`unsubscribed-from-email`),e.type===`subscription_event`&&(t=`subscriptions`,e.data.type===`canceled`&&(t=`canceled-subscription`)),(e.type===`signup_event`||e.type===`subscription_event`&&e.data.type===`created`&&e.data.signup)&&(t=`signed-up`),e.type===`email_opened_event`&&(t=`opened-email`),(e.type===`email_sent_event`||e.type===`automated_email_sent_event`)&&(t=`sent-email`),e.type===`email_delivered_event`&&(t=`received-email`),e.type===`email_failed_event`&&(t=`email-delivery-failed`),e.type===`email_complaint_event`&&(t=`email-delivery-spam`),e.type===`comment_event`&&(t=`comment`),(e.type===`click_event`||e.type===`aggregated_click_event`)&&(t=`click`),e.type===`feedback_event`&&(t=e.data.score===1?`more-like-this`:`less-like-this`),e.type===`donation_event`&&(t=`subscriptions`),(e.type===`gift_purchase_event`||e.type===`gift_redemption_event`||e.type===`gift_ended_event`)&&(t=`gift`),e.type===`email_change_event`&&(t=`email-changed`),`event-${t}`}function Nt(e,t){if(e.type===`signup_event`||e.type===`subscription_event`&&e.data.type===`created`&&e.data.signup)return`signed up`;if(e.type===`login_event`)return`logged in`;if(e.type===`payment_event`)return`made payment`;if(e.type===`newsletter_event`){let n=e.data.newsletter,r=t&&n?.name?n.name:`newsletter`;return e.data.subscribed?`subscribed to ${r}`:`unsubscribed from ${r}`}if(e.type===`subscription_event`){let t=e.data.type;return t===`created`?`started paid subscription`:t===`canceled`?`canceled paid subscription`:t===`reactivated`?`reactivated paid subscription`:t===`expired`?`ended paid subscription`:`changed paid subscription`}if(e.type===`email_opened_event`)return`opened email`;if(e.type===`email_sent_event`)return`sent email`;if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source!==`automation_action_revision`)return`received welcome email (${(t?.slug||``).includes(`paid`)?`Paid`:`Free`})`;let n=jt(t.subject);return n?`received automated email: ${n}`:`received automated email`}if(e.type===`email_delivered_event`)return`received email`;if(e.type===`email_failed_event`)return`bounced email`;if(e.type===`email_complaint_event`)return`email flagged as spam`;if(e.type===`comment_event`)return e.data.parent?`replied to comment`:`commented`;if(e.type===`click_event`)return`clicked link in email`;if(e.type===`aggregated_click_event`){let t=e.data.count?.clicks??1;return t<=1?`clicked link in email`:`clicked ${t} links in email`}if(e.type===`feedback_event`)return e.data.score===1?`more like this`:`less like this`;if(e.type===`email_change_event`)return e.data.from_email&&e.data.to_email?`Email address changed from ${e.data.from_email} to ${e.data.to_email}`:`Email address changed`;if(e.type===`donation_event`)return`Made a one-time payment`;if(e.type===`gift_purchase_event`){let t=e.data.amount,n=e.data.currency,r=e.data.tier_name,i=e.data.duration,a=e.data.cadence;return typeof t==`number`&&n&&r&&typeof i==`number`&&a?`Purchased gift subscription for ${At(t,n)} (${r}, ${i} ${i===1?a:`${a}s`})`:`Purchased gift subscription`}if(e.type===`gift_redemption_event`)return`started gift subscription`;if(e.type===`gift_ended_event`)return`gift subscription expired`}function Pt(e,t){if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source===`automation_action_revision`){let e=jt(t.subject);return e?`received automated email: ${e}`:`received automated email`}}return Nt(e,t)}function Ft(e){if(e.type===`signup_event`||e.type===`subscription_event`||e.type===`donation_event`){let t=e.data.attribution;if(t?.title)return t.title}if(e.type===`comment_event`||e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.title)return t.title}return``}function It(e){let t=e.data.attribution;return t?.referrer_source?{name:t.referrer_source,url:t.referrer_url??null}:null}function Lt(e,t){if(e.type===`signup_event`&&t.paidMembersEnabled){let t=e.data.created_with_status;return t&&t!==`free`?null:`Free`}if(e.type===`gift_redemption_event`)return e.data.tier_name??void 0}function Rt(e){if(e.type===`click_event`)return e.data.link?.to}function zt(e){if(e.type===`comment_event`||e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.url)return t.url}if(e.type===`signup_event`||e.type===`subscription_event`||e.type===`donation_event`){let t=e.data.attribution;if(t?.url)return t.url}}function Bt(e){if(e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.id)return`#/posts/analytics/${t.id}`}if((e.type===`signup_event`||e.type===`subscription_event`)&&e.data.attribution_type===`post`&&e.data.attribution_id)return`#/posts/analytics/${e.data.attribution_id}`}function Vt(e,t){let n=jt(e.data.member?.name),r=e.data.member?n||e.data.member.email||``:e.data.name||e.data.email||``,i=e.data.member?{...e.data.member,name:n??void 0}:e.data.member;return{id:e.data.id,memberId:e.data.member_id??e.data.member?.id,member:i,emailId:e.data.email_id,email:e.data.email,icon:Mt(e),subject:r,action:Nt(e,t.hasMultipleNewsletters),actionTitle:Pt(e,t.hasMultipleNewsletters),join:`–`,object:Ft(e),source:It(e),info:Lt(e,t),description:Rt(e),url:zt(e),route:Bt(e),timestamp:e.data.created_at}}var Ht=({iconName:e})=>{let t={className:`shrink-0 text-muted-foreground`,size:16};switch(e){case`event-signed-up`:return(0,X.jsx)(O,{...t});case`event-logged-in`:return(0,X.jsx)(se,{...t});case`event-subscriptions`:return(0,X.jsx)(S,{...t});case`event-canceled-subscription`:return(0,X.jsx)(ie,{...t});case`event-subscribed-to-email`:return(0,X.jsx)(ne,{...t});case`event-unsubscribed-from-email`:return(0,X.jsx)(te,{...t});case`event-opened-email`:return(0,X.jsx)(le,{...t});case`event-received-email`:return(0,X.jsx)(w,{...t});case`event-sent-email`:return(0,X.jsx)(g,{...t});case`event-email-delivery-failed`:return(0,X.jsx)(oe,{...t});case`event-email-delivery-spam`:return(0,X.jsx)(x,{...t});case`event-email-changed`:return(0,X.jsx)(ue,{...t});case`event-comment`:return(0,X.jsx)(re,{...t});case`event-click`:return(0,X.jsx)(C,{...t});case`event-more-like-this`:return(0,X.jsx)(ce,{...t});case`event-less-like-this`:return(0,X.jsx)(_,{...t});case`event-gift`:return(0,X.jsx)(k,{...t});default:return(0,X.jsx)(b,{...t})}},Ut=({memberId:e})=>(0,X.jsx)(`a`,{className:`block pt-3 font-medium text-primary hover:underline`,"data-testid":`member-activity-view-all`,href:`#/members-activity?member=${e}`,children:`View all member activity →`}),Wt=`All events related to this member will be shown here.`,Gt=e=>e?e.charAt(0).toUpperCase()+e.slice(1):``;function Kt(e){if(e&&typeof e==`object`){let t=e.subject;return t?`“${t}”`:`Email`}}var qt=({event:e})=>{if(!e.action)return null;let t=Kt(e.email),n=e.object&&(e.route||Ot(e.url)),r=!n&&t,i=e.timestamp?(0,Z.default)(e.timestamp).fromNow():`—`;return(0,X.jsxs)(`div`,{className:`flex items-start gap-3 py-3`,"data-testid":`member-activity-event`,children:[(0,X.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-muted`,children:(0,X.jsx)(Ht,{iconName:e.icon})}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:[(0,X.jsxs)(`div`,{className:`text-sm leading-snug`,children:[(0,X.jsx)(`span`,{"data-testid":`member-activity-action`,children:Gt(e.action)}),e.info&&(0,X.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,e.info,`)`]}),n&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),e.route?(0,X.jsx)(`a`,{className:`hover:underline`,href:e.route,children:e.object}):(0,X.jsx)(`a`,{className:`hover:underline`,href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:e.object})]}),r&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:t})]})]}),e.description&&(0,X.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.description}),(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i})]})]})},Jt=({memberId:e,hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})=>{let{data:i,isLoading:a}=nt(e??``,{limit:`5`,enabled:!!e}),o=(i?.events??[]).map(e=>Vt(e,{hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})),s=new Set;return e?(0,X.jsxs)(`section`,{"aria-labelledby":`member-activity-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-activity-heading`,children:`Activity`}),(0,X.jsx)(G,{children:(0,X.jsxs)(W,{className:`pt-3`,children:[a?(0,X.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,X.jsx)(xe,{className:`h-10`}),(0,X.jsx)(xe,{className:`h-10`}),(0,X.jsx)(xe,{className:`h-10`})]}):o.length===0?(0,X.jsx)(`p`,{className:`py-4 text-center text-sm text-muted-foreground`,"data-testid":`member-activity-empty`,children:`No activity yet`}):(0,X.jsx)(`div`,{className:`divide-y divide-border`,children:o.map(e=>{let t=e.id||`${e.timestamp??`?`}-${e.icon}-${e.action}`,n=t,r=1;for(;s.has(n);)n=`${t}#${r}`,r+=1;return s.add(n),(0,X.jsx)(qt,{event:e},n)})}),!a&&o.length>0&&(0,X.jsx)(Ut,{memberId:e})]})})]}):(0,X.jsxs)(`section`,{"aria-labelledby":`member-activity-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-activity-heading`,children:`Activity`}),(0,X.jsx)(G,{children:(0,X.jsx)(W,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(Oe,{description:Wt,title:`Activity`,children:(0,X.jsx)(b,{})})})})})]})},Yt=e(st(),1),Xt=dt(`address`)??[];function Q(e){return{name:(e.name??``).trim(),email:(e.email??``).trim(),note:e.note??``,labels:(e.labels??[]).map(e=>({name:e.name,slug:e.slug})).sort((e,t)=>e.slug<t.slug?-1:+(e.slug>t.slug)),newsletters:(e.newsletters??[]).map(e=>e.id).sort()}}function Zt(e){let t={};for(let[n,r]of Object.entries(e??{}))if(typeof r==`string`&&r.trim()!==``)t[n]=r.trim();else if(typeof r==`object`&&r&&!Array.isArray(r)){let e=$t(r);e&&(t[n]=e)}return t}function Qt(e){let t={};for(let{key:n}of Xt){let r=e[n];typeof r==`string`&&(t[n]=r.trim())}return Object.values(t).some(e=>e!==``)?t:void 0}function $t(e){let t={};for(let{key:n}of Xt){let r=e[n];typeof r==`string`&&r.trim()!==``&&(t[n]=r.trim())}return Object.keys(t).length?t:void 0}function en(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t].sort()}function tn(e,t){let n=e.trim();return t!==void 0&&n===t.trim()?!0:Yt.default.isEmail(n)}function nn(e,t,n){return t?e.trim()===``?`Email is required.`:tn(e,n)?null:`Invalid email.`:null}function rn(e){if(!e?.suppressed)return null;let t=e.info;if(!t)return{label:null};let{reason:n,timestamp:r}=t,i=(0,Z.default)(new Date(r)).format(`D MMM YYYY`);switch(n){case`fail`:return{reason:n,label:`Bounced on ${i}`};case`spam`:return{reason:n,label:`Flagged as spam on ${i}`};default:return{reason:n,label:`Email disabled on ${i}`}}}function an(e){return e?e.filter(e=>e.subscribe_on_signup===!0&&e.visibility===`members`).map(e=>e.id):[]}function on(e){return 500-[...e].length}function sn(e,t,n){let r=pn(t),i={id:e,name:r.name,email:r.email,note:r.note,labels:r.labels};return ct(r.newsletters,n.newsletters)||(i.newsletters=r.newsletters.map(e=>({id:e}))),i}function cn(e){return typeof e==`string`?e.trim()||void 0:Qt(e)}function ln(e,t,n){return{id:e,custom_fields:{[t]:cn(n)??null}}}function un(e,t){let n={};for(let r of t){let t=e[r.key],i=t===void 0?void 0:cn(t);if(i===void 0)continue;let a=ut[r.type];if(!a)continue;let o=a.value.safeParse(i);if(!o.success)for(let e of o.error.issues){let t=[r.key,...e.path].join(`.`);n[t]??=e.message}}return n}function dn(e){let t=e?.data,n={};for(let e of t?.errors??[])e.property?.startsWith(`custom_fields.`)&&(n[e.property.slice(14)]=e.context||e.message||`Invalid value.`);return Object.keys(n).length?n:void 0}function fn(e,t){return e.map(e=>t.get(e)??{name:e,slug:e})}function pn(e){return{name:e.name.trim(),email:e.email.trim(),note:e.note,labels:e.labels,newsletters:e.newsletters}}function mn(e,t){return!e||!!t&&ct(pn(e),t)}var hn=({message:e})=>e?(0,X.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:e}):null,gn=({inputId:e,value:t,errors:n,disabled:r,onChange:i})=>(0,X.jsx)(`div`,{className:`grid gap-x-4 gap-y-3 md:grid-cols-2`,children:Xt.map(({key:a,label:o})=>{let s=`${e}-${a}`,c=n?.[a];return(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:s,children:o}),(0,X.jsx)(H,{"aria-invalid":c?!0:void 0,disabled:r,id:s,value:t[a]??``,onChange:e=>i({...t,[a]:e.target.value})}),(0,X.jsx)(hn,{message:c})]},a)})});function _n(e){return null}var vn=({field:e,inputId:t,value:n,errors:r,disabled:i,onChange:a})=>{let o=r?.[``],{input:s}=ft(e);switch(s){case`text`:return(0,X.jsx)(H,{"aria-invalid":o?!0:void 0,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`textarea`:return(0,X.jsx)(Me,{"aria-invalid":o?!0:void 0,className:`max-w-full resize-y`,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`address`:return(0,X.jsx)(gn,{disabled:i,errors:r,inputId:t,value:typeof n==`object`&&n?n:{},onChange:a});default:return _n(s)}},yn=({memberId:e,field:t,initialValue:n,onClose:r})=>{let i=ft(t).input===`address`,[o,s]=Y.useState(n??(i?{}:``)),[c,l]=Y.useState(!1),[u,d]=Y.useState(),f=Ye(),p=un({[t.key]:o},[t]),m={...c?p:{},...u},h=Object.fromEntries(Object.entries(m).map(([e,n])=>[e===t.key?``:e.slice(t.key.length+1),n])),g=`member-custom-field-${t.key}`,_=!ct(Zt({[t.key]:o}),Zt({[t.key]:n}));return(0,X.jsx)(L,{open:!0,onOpenChange:e=>{!e&&!f.isPending&&r()},children:(0,X.jsxs)(F,{"data-testid":`member-custom-field-edit-modal`,onEscapeKeyDown:e=>{(_||f.isPending)&&e.preventDefault()},onInteractOutside:e=>{(_||f.isPending)&&e.preventDefault()},children:[(0,X.jsx)(P,{children:(0,X.jsx)(I,{children:t.name})}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[!i&&(0,X.jsx)(K,{className:`sr-only`,htmlFor:g,children:t.name}),(0,X.jsx)(vn,{disabled:f.isPending,errors:h,field:t,inputId:g,value:o,onChange:e=>{d(void 0),s(e)}}),(0,X.jsx)(hn,{message:h[``]})]}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{disabled:f.isPending,variant:`outline`,onClick:r,children:`Cancel`}),(0,X.jsx)(j,{className:`min-w-16`,disabled:f.isPending,onClick:()=>{if(!f.isPending){if(!_){r();return}if(Object.keys(p).length>0){l(!0);return}f.mutate(ln(e,t.key,o),{onSuccess:()=>{a.success(`${t.name} saved`),r()},onError:e=>{let n=dn(e);d(n),n||a.error(`${t.name} couldn’t be saved`)}})}},children:f.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):`Save`})]})]})})},bn=({memberId:e,customFields:t,disabled:n})=>{let{data:r,isLoading:i}=pt(),a=r?.members_custom_fields??[],o=Zt(t),[s,c]=Y.useState(null);return i||a.length===0?null:(0,X.jsxs)(`section`,{"aria-labelledby":`member-custom-fields-heading`,className:`flex flex-col gap-3`,"data-testid":`member-custom-fields-field`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-custom-fields-heading`,children:`Custom fields`}),(0,X.jsx)(G,{children:(0,X.jsx)(W,{className:`px-6 py-4`,children:(0,X.jsx)(`ul`,{children:a.map(e=>{let t=mt(e.type,o[e.key])||null;return(0,X.jsx)(`li`,{className:`border-b border-border transition-colors last:border-b-0 hover:border-b-transparent [&:has(+li:hover)]:border-b-transparent`,children:(0,X.jsxs)(`button`,{"aria-label":t?`Edit ${e.name}: ${t}`:`Edit ${e.name}`,className:`group -mx-3 flex w-[calc(100%+1.5rem)] items-center justify-between gap-4 rounded-md p-3 text-left transition-colors hover:bg-table-row-hover disabled:cursor-not-allowed disabled:opacity-50`,disabled:n,type:`button`,onClick:()=>{window.getSelection()?.toString()||c(e)},children:[(0,X.jsxs)(`span`,{className:`min-w-0`,children:[(0,X.jsx)(`span`,{className:`block text-sm text-muted-foreground`,children:e.name}),t?(0,X.jsx)(`span`,{className:`block break-words select-text`,children:t}):(0,X.jsx)(`span`,{className:`block text-muted-foreground`,children:`–`})]}),(0,X.jsx)(E,{"aria-hidden":`true`,className:`shrink-0 text-muted-foreground opacity-0 transition-all group-hover:opacity-100 group-focus-visible:opacity-100`,size:16})]})},e.key)})})})}),s&&(0,X.jsx)(yn,{field:s,initialValue:o[s.key],memberId:e,onClose:()=>c(null)},s.key)]})},xn=({labels:e,disabled:t,onChange:n})=>{let r=e.map(e=>e.slug),i=Y.useRef(e);i.current=e;let a=Y.useRef(new Map),o=e=>{for(let t of e)a.current.set(t.slug,{name:t.name,slug:t.slug})};o(e);let s=ht({selectedSlugs:r,onSelectionChange:e=>n(fn(e,a.current))});o(s.labels);let c=async e=>{let t=await s.createLabel(e);if(t){let e={name:t.name,slug:t.slug};a.current.set(t.slug,e),n([...i.current.filter(e=>e.slug!==t.slug),e])}return t};return(0,X.jsx)(`div`,{className:t?`pointer-events-none opacity-60`:void 0,"data-testid":`member-labels-field`,...t?{inert:``}:{},children:(0,X.jsx)(gt,{isCreating:s.isCreating,labels:s.labels,optionSource:s.optionSource,placeholder:``,resolvedSelectedLabels:s.resolvedSelectedLabels,selectedSlugs:r,onCreate:c,onDelete:s.deleteLabel,onEdit:s.editLabel,onToggle:s.toggleLabel})})},Sn=({draft:e,emailError:t,disabled:n,onChange:r,onEmailBlur:i,onNameBlur:a})=>{let o=on(e.note),s=500-o,c=o<0?`text-destructive`:s>=500*.8?`text-state-warning`:`text-state-success`;return(0,X.jsxs)(`div`,{className:`grid items-stretch gap-6 md:grid-cols-2`,"data-testid":`member-detail-form`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`member-name`,children:`Name`}),(0,X.jsx)(H,{disabled:n,id:`member-name`,value:e.name,onBlur:a,onChange:e=>r({name:e.target.value})})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`member-email`,children:`Email`}),(0,X.jsx)(H,{"aria-invalid":!!t,disabled:n,id:`member-email`,type:`email`,value:e.email,onBlur:i,onChange:e=>r({email:e.target.value})}),t&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:t})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{children:`Labels`}),(0,X.jsx)(xn,{disabled:n,labels:e.labels,onChange:e=>r({labels:e})})]})]}),(0,X.jsxs)(`div`,{className:`flex min-h-0 flex-col gap-1.5`,children:[(0,X.jsxs)(K,{htmlFor:`member-note`,children:[`Note `,(0,X.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(not visible to member)`})]}),(0,X.jsxs)(je,{className:`flex-1`,children:[(0,X.jsx)(Ae,{className:`h-full`,disabled:n,id:`member-note`,value:e.note,onChange:e=>r({note:e.target.value})}),(0,X.jsx)(ke,{align:`block-end`,className:`justify-end`,children:(0,X.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Maximum: `,(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:500}),` `,`characters. You’ve used`,` `,(0,X.jsx)(`span`,{className:d(`font-semibold`,c),children:s})]})})]})]})]})};function Cn(e){if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function wn(e){let t=Cn(e);return t?t.country_code===`US`&&t.region?`${t.region}, US`:t.country||`Unknown location`:`Unknown location`}function Tn(e){let t=e?.referrer_source;return!t||t===`Created manually`?null:t}var En=e=>Z.default.utc(e).format(`D MMM YYYY`),$=({icon:e,children:t})=>(0,X.jsxs)(`p`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e}),(0,X.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]}),Dn=e=>e.split(` `)[0]||``,On=({member:e,draftName:t,draftEmail:n,engagementEnabled:r})=>{let i=(t??e?.name??``).trim(),a=(n??e?.email??``).trim(),o=i||a||`New member`,s=!e;return(0,X.jsxs)(`aside`,{className:`flex w-full shrink-0 flex-col gap-6 lg:w-80`,"data-testid":`member-detail-sidebar`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,X.jsx)(rt,{className:`size-12 min-w-12 [&_span]:text-lg`,email:a||void 0,name:i||void 0,src:e?.avatar_image}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`h2`,{className:`truncate text-xl font-semibold`,children:o}),i&&a&&(0,X.jsx)(`a`,{className:`block truncate text-muted-foreground hover:underline`,href:`mailto:${a}`,children:a}),!i&&a&&(0,X.jsx)(`span`,{className:`block truncate text-muted-foreground`,children:a})]})]}),!s&&e&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 text-sm`,children:[(0,X.jsx)($,{icon:(0,X.jsx)(ae,{size:16}),children:(0,X.jsx)(`span`,{"data-testid":`member-detail-location`,children:wn(e.geolocation)})}),(0,X.jsx)($,{icon:(0,X.jsx)(y,{size:16}),children:e.last_seen_at?`Last seen on ${En(e.last_seen_at)}`:`Not seen yet`}),e.can_comment===!1&&(0,X.jsx)($,{icon:(0,X.jsx)(ee,{size:16}),children:`Comments disabled`})]}),(0,X.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 text-sm`,children:[(0,X.jsx)(`h3`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Signup info`}),(0,X.jsxs)($,{icon:(0,X.jsx)(O,{size:16}),children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:En(e.created_at)})]}),(()=>{let t=Tn(e.attribution);return t?(0,X.jsxs)($,{icon:(0,X.jsx)(A,{size:16}),children:[`Source —`,` `,(0,X.jsx)(`span`,{className:`text-foreground`,title:t,children:t})]}):null})(),e.attribution?.title&&(0,X.jsxs)($,{icon:(0,X.jsx)(de,{size:16}),children:[`Page —`,` `,Ot(e.attribution.url)?(0,X.jsx)(`a`,{className:`truncate text-foreground hover:underline`,href:e.attribution.url,rel:`noopener noreferrer`,target:`_blank`,title:e.attribution.title,children:e.attribution.title}):(0,X.jsx)(`span`,{className:`truncate text-foreground`,title:e.attribution.title,children:e.attribution.title})]})]}),r&&(0,X.jsxs)(`section`,{className:`mt-4 flex flex-col gap-3 text-sm`,"data-testid":`member-detail-engagement`,children:[(0,X.jsx)(`h4`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Engagement`}),(e.email_count??0)===0?(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:i?`We’ll show ${Dn(i)}’s email stats here once they receive their first newsletter.`:`We’ll show this member’s email stats here once they receive their first newsletter.`}):(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails received`}),(0,X.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_count})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails opened`}),(0,X.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_opened_count??0})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Average open rate`}),e.email_open_rate===null||e.email_open_rate===void 0?(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`This metric is calculated once a member has received 5 newsletters.`}):(0,X.jsxs)(`p`,{className:`text-2xl font-semibold`,children:[e.email_open_rate,(0,X.jsx)(`span`,{className:`text-base font-normal text-muted-foreground`,children:`%`})]})]})]})]})]})]})},kn=({memberId:e,emailSuppression:t,subscribedIds:n,disabled:r,onChange:i})=>{let o=e?rn(t):null,s=Fe(),{data:c,isLoading:l}=Pe({searchParams:{filter:`status:active`,limit:`50`}}),u=c?.newsletters??[],d=Be(),f=s.isPending||s.isSuccess&&d;return!o&&(l||u.length===0)?null:(0,X.jsxs)(`section`,{"aria-labelledby":`member-newsletters-heading`,className:`flex flex-col gap-3`,"data-testid":`member-newsletters-field`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-newsletters-heading`,children:`Newsletters`}),(0,X.jsx)(G,{children:(0,X.jsx)(W,{className:`p-6`,children:o?(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,"data-testid":`member-suppression-banner`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,X.jsx)(oe,{className:`mt-0.5 shrink-0 text-muted-foreground`,size:20}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`font-medium`,children:`Email disabled`}),o.label&&(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:o.label}),(0,X.jsx)(`a`,{className:`text-sm text-muted-foreground hover:underline`,href:`https://ghost.org/help/disabled-emails`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]}),(0,X.jsx)(j,{disabled:r||f,onClick:()=>{e&&s.mutate({id:e},{onSuccess:()=>a.success(`Email re-enabled successfully`),onError:()=>a.error(`Failed to re-enable email. Please try again.`)})},children:f?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Re-enabling email`})]}):`Re-enable email`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`ul`,{className:`divide-y divide-border`,children:u.map(e=>{let t=n.includes(e.id);return(0,X.jsxs)(`li`,{className:`flex items-center justify-between gap-4 py-3 first:pt-0 last:pb-0`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`font-medium`,children:e.name}),e.description&&(0,X.jsx)(`p`,{className:`truncate text-sm text-muted-foreground`,children:e.description})]}),(0,X.jsx)(R,{"aria-label":`Subscribe to ${e.name}`,checked:t,"data-testid":`member-subscription-toggle`,disabled:r,onCheckedChange:()=>i(en(n,e.id))})]},e.id)})}),(0,X.jsxs)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:[`If disabled, member will `,(0,X.jsx)(`em`,{children:`not`}),` receive newsletter emails`]})]})})})]})},An=`complimentary`,jn=`gift subscription`;function Mn(e){if(e.id)return`paid`;let t=e.plan?.nickname?.toLowerCase()??``;return t===An?`complimentary`:t===jn?`gift`:`paid`}function Nn(e){return e===`year`?`yearly`:`monthly`}function Pn(e){if(e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`))return`Free trial`;let t=e.price?.nickname;return t&&t!==`Monthly`&&t!==`Yearly`?t:null}function Fn(e){return e.status===`canceled`||e.cancel_at_period_end?`Canceled`:`Active`}var In=e=>e?(0,Z.default)(new Date(e)).format(`D MMM YYYY`):``,Ln=e=>e?(0,Z.default)(e).utc().format(`D MMM YYYY`):``;function Rn(e){let t=Mn(e);if(t===`complimentary`||t===`gift`){let t=Ln(e.tier?.expiry_at);return t?`Expires ${t}`:``}let n=e.status===`canceled`&&!e.cancel_at_period_end?``:In(e.current_period_end);return e.status===`canceled`?n?`Ended ${n}`:``:e.cancel_at_period_end?n?`Has access until ${n}`:``:e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`)?`Ends ${In(e.trial_end_at)}`:n?`Renews ${n}`:``}function zn(e){let t=[],n=new Map;for(let r of e){if(!r.price)continue;let e=r.tier??r.price.tier;if(!e?.id)continue;let i=n.get(e.id);i||(i={tier:e,subscriptions:[]},n.set(e.id,i),t.push(i)),i.subscriptions.push(r)}return t}var Bn=[`forever`,`week`,`month`,`half-year`,`year`,`custom`];function Vn(e){return Bn.includes(e)}function Hn(e,t){switch(e){case`forever`:return null;case`week`:return Z.default.utc().add(7,`days`).startOf(`day`).toISOString();case`month`:return Z.default.utc().add(1,`month`).startOf(`day`).toISOString();case`half-year`:return Z.default.utc().add(6,`months`).startOf(`day`).toISOString();case`year`:return Z.default.utc().add(1,`year`).startOf(`day`).toISOString();case`custom`:return t?(0,Z.default)(t,`YYYY-MM-DD`).startOf(`day`).endOf(`day`).set(`millisecond`,0).add((0,Z.default)().utcOffset(),`minutes`).toISOString():null}}var Un=new Set([`active`,`trialing`,`unpaid`,`past_due`]),Wn=[{value:`forever`,label:`Forever`},{value:`week`,label:`1 Week`},{value:`month`,label:`1 Month`},{value:`half-year`,label:`6 Months`},{value:`year`,label:`1 Year`},{value:`custom`,label:`Custom`}],Gn=({open:e,onOpenChange:t,member:n})=>{let{data:r,isLoading:i}=ot({searchParams:{filter:`type:paid+active:true`,limit:`all`}}),o=r?.tiers??[],[s,c]=Y.useState(``),[l,u]=Y.useState(`forever`),[d,f]=Y.useState(``);Y.useEffect(()=>{e&&(c(``),u(`forever`),f(``))},[e]);let p=qe(),m=Ye(),[h,g]=Y.useState(!1),_=(n.subscriptions??[]).filter(e=>Mn(e)===`paid`&&Un.has(e.status)),v=(0,Z.default)().format(`YYYY-MM-DD`),y=!!s&&!h&&(l!==`custom`||!!d),b=async()=>{if(y){g(!0);try{for(let e of _)await p.mutateAsync({memberId:n.id,subscriptionId:e.id,status:`canceled`});let e=Hn(l,l===`custom`?d:null),r=e?{id:s,expiry_at:e}:{id:s};await m.mutateAsync({id:n.id,...n.email?{email:n.email}:{},tiers:[r]}),a.success(`Complimentary subscription added`),t(!1)}catch{a.error(`Couldn’t add complimentary subscription`)}finally{g(!1)}}};return(0,X.jsx)(L,{open:e,onOpenChange:e=>{h||t(e)},children:(0,X.jsxs)(F,{"data-testid":`add-comp-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(I,{children:`Add complimentary subscription`}),(0,X.jsx)(N,{children:`Grants this member access to a paid tier for the chosen duration. Any active paid subscription is canceled first.`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`comp-tier`,children:`Tier`}),(0,X.jsxs)(be,{value:s,onValueChange:c,children:[(0,X.jsx)(ve,{"data-testid":`comp-tier-select`,disabled:i||h,id:`comp-tier`,children:(0,X.jsx)(ye,{placeholder:i?`Loading tiers…`:`Select a tier`})}),(0,X.jsx)(_e,{children:o.map(e=>(0,X.jsx)(ge,{"data-tier-id":e.id,value:e.id,children:e.name},e.id))})]})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`comp-duration`,children:`Duration`}),(0,X.jsxs)(be,{value:l,onValueChange:e=>{Vn(e)&&u(e)},children:[(0,X.jsx)(ve,{"data-testid":`comp-duration-select`,disabled:h,id:`comp-duration`,children:(0,X.jsx)(ye,{})}),(0,X.jsx)(_e,{children:Wn.map(e=>(0,X.jsx)(ge,{value:e.value,children:e.label},e.value))})]})]}),l===`custom`&&(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(K,{htmlFor:`comp-custom-date`,children:`Expires on`}),(0,X.jsx)(H,{"data-testid":`comp-custom-date`,disabled:h,id:`comp-custom-date`,min:v,type:`date`,value:d,onChange:e=>f(e.target.value)})]})]}),(0,X.jsxs)(M,{children:[(0,X.jsx)(j,{disabled:h,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(j,{"data-testid":`comp-add-confirm`,disabled:!y,onClick:()=>void b(),children:h?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Adding`})]}):`Add subscription`})]})]})})},Kn=({memberId:e,subscription:t})=>{let n=qe(),r=Be(),i=n.isPending||n.isSuccess&&r,o=t.status===`canceled`,s=t.cancel_at_period_end,c=(r,i,o)=>{n.mutate({memberId:e,subscriptionId:t.id,cancelAtPeriodEnd:r},{onSuccess:()=>a.success(i),onError:()=>a.error(o)})};return(0,X.jsxs)(Ie,{children:[(0,X.jsx)(ze,{asChild:!0,children:(0,X.jsx)(j,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:i,size:`sm`,variant:`outline`,children:i?(0,X.jsx)(U,{size:`sm`}):(0,X.jsx)(v,{})})}),(0,X.jsxs)(He,{align:`end`,children:[(0,X.jsx)(q,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/customers/${t.customer.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe customer`})}),(0,X.jsx)(Ue,{}),(0,X.jsx)(q,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/subscriptions/${t.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe subscription`})}),!o&&(s?(0,X.jsx)(q,{"data-testid":`continue-subscription`,onSelect:()=>c(!1,`Subscription continued`,`Couldn’t continue subscription`),children:`Continue subscription`}):(0,X.jsx)(q,{className:`text-destructive focus:text-destructive`,"data-testid":`cancel-subscription`,onSelect:()=>c(!0,`Subscription canceled`,`Couldn’t cancel subscription`),children:`Cancel subscription`}))]})]})},qn=({member:e,tierId:t})=>{let n=Ye(),[r,i]=Y.useState(!1),o=Be(),s=n.isPending||n.isSuccess&&o;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(Ie,{children:[(0,X.jsx)(ze,{asChild:!0,children:(0,X.jsx)(j,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:s,size:`sm`,variant:`outline`,children:s?(0,X.jsx)(U,{size:`sm`}):(0,X.jsx)(v,{})})}),(0,X.jsx)(He,{align:`end`,children:(0,X.jsx)(q,{className:`text-destructive focus:text-destructive`,"data-testid":`remove-complimentary`,onSelect:()=>i(!0),children:`Remove complimentary subscription`})})]}),(0,X.jsx)(he,{open:r,onOpenChange:e=>{n.isPending||i(e)},children:(0,X.jsxs)(B,{children:[(0,X.jsxs)(V,{children:[(0,X.jsx)(z,{children:`Remove complimentary subscription?`}),(0,X.jsx)(fe,{children:`The member will lose access to this tier immediately.`})]}),(0,X.jsxs)(pe,{children:[(0,X.jsx)(me,{disabled:n.isPending,children:`Cancel`}),(0,X.jsx)(j,{"data-testid":`confirm-remove-complimentary`,disabled:n.isPending,variant:`destructive`,onClick:()=>{let r=(e.tiers??[]).filter(e=>e.id!==t).map(e=>({id:e.id,expiry_at:e.expiry_at??null}));n.mutate({id:e.id,email:e.email,tiers:r},{onSuccess:()=>{a.success(`Complimentary subscription removed`),i(!1)},onError:()=>a.error(`Couldn’t remove complimentary subscription`)})},children:n.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Removing`})]}):`Remove`})]})]})})]})},Jn=e=>{let t=e/100;return t.toLocaleString(void 0,t%1==0?void 0:{minimumFractionDigits:2,maximumFractionDigits:2})},Yn=({sub:e,kind:t})=>{if(t===`complimentary`||t===`gift`)return(0,X.jsx)(`div`,{className:`flex size-20 shrink-0 items-center justify-center rounded-lg bg-muted text-center text-sm font-medium text-muted-foreground`,children:t===`complimentary`?`Comp`:`Gift`});let n=o(e.price.currency),r=Jn(e.price.amount),i=Nn(e.price.interval);return(0,X.jsxs)(`div`,{className:`flex size-20 shrink-0 flex-col items-center justify-center rounded-lg bg-muted text-foreground`,children:[(0,X.jsxs)(`div`,{className:`flex items-start leading-none`,children:[(0,X.jsx)(`span`,{className:`mt-1 text-sm font-semibold`,children:n}),(0,X.jsx)(`span`,{className:`text-3xl font-semibold tracking-tight`,children:r})]}),(0,X.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:i})]})},Xn=e=>e?Z.default.utc(e).format(`D MMM YYYY`):``,Zn=({sub:e})=>{let t=Xn(e.start_date),n=e.attribution?.referrer_source,r=n&&n!==`Unknown`,i=e.attribution?.title?{title:e.attribution.title,url:e.attribution.url??null}:null;return(0,X.jsxs)(`div`,{className:`mt-3 space-y-1 border-t border-border pt-3 text-sm text-muted-foreground`,children:[t&&(0,X.jsxs)(`p`,{children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:t})]}),r&&(0,X.jsxs)(`p`,{children:[`Source — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:n})]}),i&&(0,X.jsxs)(`p`,{children:[`Page —`,` `,i.url?(0,X.jsx)(`a`,{className:`text-foreground hover:underline`,href:i.url,rel:`noopener noreferrer`,target:`_blank`,children:i.title}):(0,X.jsx)(`span`,{className:`text-foreground`,children:i.title})]})]})},Qn=({member:e,sub:t,showDivider:n})=>{let[r,i]=Y.useState(!1),a=Mn(t),o=Fn(t),s=Rn(t),c=Pn(t);return(0,X.jsxs)(`div`,{className:d(`flex items-start justify-between gap-4 py-5 first:pt-0 last:pb-0`,n&&`border-t border-border`),"data-testid":`member-subscription`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-4`,children:[(0,X.jsx)(Yn,{kind:a,sub:t}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1 pt-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`min-w-0 truncate font-semibold`,"data-testid":`member-subscription-tier`,children:t.tier?.name??`Subscription`}),(0,X.jsx)(Le,{"data-testid":`member-subscription-status`,variant:o===`Canceled`?`secondary`:`success`,children:o})]}),(c||s)&&(0,X.jsxs)(`div`,{className:`mt-1 text-sm`,children:[c&&(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:c}),c&&s&&(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:` – `}),s&&(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:s})]}),(0,X.jsxs)(`button`,{"aria-expanded":r,className:`mt-1 inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline`,"data-testid":`member-subscription-details-toggle`,type:`button`,onClick:()=>i(e=>!e),children:[`Details`,(0,X.jsx)(T,{className:d(`transition-transform`,r&&`rotate-180`),size:14})]}),r&&(0,X.jsx)(Zn,{sub:t})]})]}),a===`paid`&&(0,X.jsx)(Kn,{memberId:e.id,subscription:t}),a===`complimentary`&&t.tier?.id&&(0,X.jsx)(qn,{member:e,tierId:t.tier.id})]})},$n=({member:e,canAddComp:t})=>{let[n,r]=Y.useState(!1);if(!e)return(0,X.jsx)(G,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(W,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(Oe,{title:`No subscriptions`,children:(0,X.jsx)(S,{})})})})});let i=zn(e.subscriptions??[]),a=i.length>0,o=t&&(e.tiers?.length??0)===0,s=o?(0,X.jsxs)(j,{"data-testid":`add-complimentary`,variant:`outline`,onClick:()=>r(!0),children:[(0,X.jsx)(D,{className:`mr-1`,size:16}),`Add complimentary subscription`]}):null;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(W,{className:`pt-6`,children:a?(0,X.jsxs)(X.Fragment,{children:[i.map(t=>(0,X.jsxs)(`div`,{className:`flex flex-col`,children:[t.subscriptions.map((n,r)=>(0,X.jsx)(Qn,{member:e,showDivider:r>0,sub:n},n.id||`${t.tier.id}-${r}`)),t.subscriptions.length>1&&(0,X.jsxs)(`div`,{className:`pt-3 text-sm text-muted-foreground`,children:[t.subscriptions.length,` subscriptions`]})]},t.tier.id)),s&&(0,X.jsx)(`div`,{className:`mt-4 flex justify-center border-t border-border pt-4`,children:s})]}):(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:[(0,X.jsx)(Oe,{title:`No subscriptions`,children:(0,X.jsx)(S,{})}),s]})})}),o&&(0,X.jsx)(Gn,{member:e,open:n,onOpenChange:r})]})};function er(e){let t=new URLSearchParams(e),n=t.get(`back`);if(n&&n.startsWith(`/members`))return n;let r=t.get(`post`);return r?`/members?post=${encodeURIComponent(r)}`:`/members`}var tr=`new`,nr=({paidMembersEnabled:e,newslettersUiEnabled:t,engagementEnabled:n})=>{let{member_id:r=``}=s(),i=l(),o=u(),d=er(i.search),f=r===tr,g=Qe(`membersCustomFields`),{data:_,isLoading:v,error:y,refetch:b}=$e(r,{enabled:!!r&&!f,searchParams:{include:g?`tiers,custom_fields`:`tiers`},defaultErrorHandler:!1}),x=_?.members?.[0],ee=!f&&!v&&!!y,te=!f&&!v&&!y&&!x,ne=Ye(),S=Ze(),C=f?S:ne,{data:re}=ot({searchParams:{filter:`type:paid+active:true`,limit:`all`},enabled:e}),ie=(re?.tiers?.length??0)>0,{data:w}=Pe({searchParams:{filter:`status:active`,limit:`50`}}),ae=w!==void 0,oe=(w?.newsletters?.length??0)>1,se=(re?.tiers?.length??0)>1,[T,E]=Y.useState(void 0),D=Y.useRef(void 0),O=Y.useRef(void 0),k=Y.useRef(!1);Y.useEffect(()=>{if(f){if(D.current!==tr){D.current=tr,k.current=!1;let e=Q({});O.current=e,E(e)}return}if(!x)return;let e=Q(x);if(D.current!==x.id){D.current=x.id,O.current=e,E(e);return}let t=O.current;O.current=e,E(n=>mn(n,t)?e:n)},[x,f]),Y.useEffect(()=>{if(!f||k.current||!w?.newsletters)return;k.current=!0;let e=an(w.newsletters);if(e.length===0)return;let t={...O.current??Q({}),newsletters:[...e].sort()};O.current=t,E(t=>t&&{...t,newsletters:[...e].sort()})},[f,w]);let ce=f?O.current:x?Q(x):void 0,A=!!T&&!!ce&&!ct(pn(T),ce),{dialogProps:le,bypassNextNavigation:ue}=lt({when:A,confirmUnloadWhen:C.isPending||A}),de=!!T&&tn(T.email,x?.email??void 0),[M,N]=Y.useState(!1);Y.useEffect(()=>{N(!1)},[x?.id,f]);let P=T?nn(T.email,M,x?.email??void 0):null,[F,I]=Y.useState({name:``,email:``});Y.useEffect(()=>{if(f){I({name:``,email:``});return}x&&I({name:x.name??``,email:x.email??``})},[x?.id,x?.name,x?.email,f]);let L=()=>{T&&I({name:T.name,email:T.email})},R=e=>{C.isError&&C.reset(),E(t=>t&&{...t,...e})},fe=()=>{if(!(!T||!A||!de||C.isPending)){if(L(),f){S.mutate({email:T.email.trim(),name:T.name.trim()||void 0,note:T.note.trim()||void 0,labels:T.labels.length?T.labels:void 0,newsletters:k.current?T.newsletters.map(e=>({id:e})):void 0},{onSuccess:e=>{let t=e.members?.[0];if(!t){a.error(`Member couldn’t be created`);return}ue(),a.success(`Member created`),o(`/members/${t.id}`,{replace:!0})},onError:()=>{a.error(`Member couldn’t be created`)}});return}!x||D.current!==x.id||ne.mutate(sn(x.id,T,Q(x)),{onSuccess:e=>{let t=e.members?.[0];if(t){let e=Q(t);O.current=e,E(e)}a.success(`Member updated`)},onError:()=>{a.error(`Member couldn’t be saved`)}})}},z=`Save`,B=`default`,pe=!0;C.isPending?z=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):A?(z=C.isError?`Retry`:`Save`,B=C.isError?`destructive`:`default`,pe=!de):!f&&ne.isSuccess&&(z=`Saved`);let me=!!T&&(f||!!x),V=`Member`;return f?V=`New member`:x?V=h(x):te&&(V=`Member not found`),(0,X.jsx)(p,{className:`size-full`,children:(0,X.jsx)(m,{className:`relative flex h-full flex-col`,size:`page`,children:(0,X.jsxs)(J,{"data-testid":`member-detail`,children:[(0,X.jsx)(J.Header,{children:(0,X.jsxs)(it,{blurredBackground:!1,sticky:!1,children:[(0,X.jsx)(it.Left,{children:(0,X.jsx)(De,{children:(0,X.jsxs)(Ce,{children:[(0,X.jsx)(we,{children:(0,X.jsx)(Ee,{asChild:!0,children:(0,X.jsx)(c,{"data-test-link":`members-back`,to:d,children:`Members`})})}),(0,X.jsx)(Te,{}),(0,X.jsx)(we,{children:!f&&v?(0,X.jsx)(xe,{className:`h-4 w-40`}):(0,X.jsx)(Se,{className:`truncate`,"data-testid":`member-detail-title`,children:V})})]})})}),(f||x)&&(0,X.jsx)(it.Actions,{children:(0,X.jsxs)(it.ActionGroup,{children:[x&&!f&&(0,X.jsx)(Dt,{allowLeaveWithUnsavedChanges:ue,member:x},x.id),(0,X.jsx)(j,{className:`min-w-16`,disabled:pe,variant:B,onClick:fe,children:z})]})})]})}),(0,X.jsxs)(J.Body,{children:[ee&&(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3`,"data-testid":`member-detail-load-error`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Couldn’t load this member.`}),(0,X.jsx)(j,{variant:`outline`,onClick:()=>void b(),children:`Retry`})]}),te&&(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`This member couldn’t be found.`})}),me&&T&&(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col gap-8 lg:flex-row lg:items-start lg:gap-12`,children:[(0,X.jsx)(On,{draftEmail:F.email,draftName:F.name,engagementEnabled:n,member:x}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-8`,children:[(0,X.jsx)(G,{children:(0,X.jsx)(W,{className:`p-6`,children:(0,X.jsx)(Sn,{disabled:C.isPending,draft:T,emailError:P,onChange:R,onEmailBlur:()=>{N(!0),L()},onNameBlur:L})})}),g&&x&&(0,X.jsx)(bn,{customFields:x.custom_fields,disabled:C.isPending,memberId:x.id}),t&&(f||x)&&(0,X.jsx)(kn,{disabled:C.isPending,emailSuppression:x?.email_suppression,memberId:x?.id,subscribedIds:T.newsletters,onChange:e=>R({newsletters:e})}),e&&(0,X.jsxs)(`section`,{"aria-labelledby":`member-subscriptions-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-subscriptions-heading`,children:`Subscriptions`}),(0,X.jsx)($n,{canAddComp:ie,member:x})]}),(f||x&&ae)&&(0,X.jsx)(Jt,{hasMultipleNewsletters:oe,hasMultipleTiers:se,memberId:x?.id,paidMembersEnabled:e})]})]})]}),(0,X.jsx)(at,{...le})]})})})},rr=()=>{let{data:e,isLoading:t}=Ve({}),n=Re(),r=Je();if(t||!e?.settings)return(0,X.jsx)(p,{className:`size-full`,children:(0,X.jsx)(m,{className:`relative flex h-full flex-col`,size:`page`,children:(0,X.jsx)(J,{children:(0,X.jsx)(J.Body,{children:(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,X.jsx)(U,{size:`lg`})})})})})});let i=tt(e.settings,`members_signup_access`);return(0,X.jsx)(nr,{engagementEnabled:i!==`none`&&r===!0,newslettersUiEnabled:r===!0,paidMembersEnabled:n===!0})};export{rr as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e({filter:e}={}){let t=new URLSearchParams;e&&t.set(`filter`,e);let n=t.toString();return n?`/members?${n}`:`/members`}export{e as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{_ as r}from"./framework-provider-DqI25epG.js";import{_ as i,b as a,g as o,m as s,o as c,p as l,u,v as d,x as f}from"./hooks-CuEZV2-q.js";import{n as p}from"./dist-Ndy-PuGN.js";import{t as m}from"./build-CsiH26uS.js";import{n as h}from"./offers-9J1CSiLy.js";import{s as g}from"./config-DOMQDZGZ.js";import{_,n as v,u as y}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as b}from"./router-provider-CJC58zTy.js";import{c as x,f as S,p as C,v as w}from"./dist-Cb5RSHSg.js";import{t as T}from"./box-By_EgGtm.js";import{t as E}from"./container-LiZf3XdY.js";import{$ as D,An as O,B as k,C as A,D as j,Dn as M,Et as N,F as P,Hn as ee,I as F,Nn as I,O as L,Ot as R,Pt as z,S as te,Sr as B,Tr as ne,Ut as V,V as H,Wt as re,Xn as ie,Yn as ae,Zn as U,a as oe,ar as se,cr as ce,dt as le,g as ue,gn as de,hn as fe,jn as pe,l as me,or as he,qt as ge,sr as _e,t as W,tn as ve,tt as ye,u as be,v as xe,vn as Se,vt as Ce}from"./button-BshWPHvn.js";import{i as we,n as Te,r as Ee}from"./filters-Dmr0PoqU.js";import{a as G,i as De,o as Oe,r as ke,s as Ae,t as je}from"./dialog-Db7c164G.js";import{a as Me,i as Ne,l as Pe,n as Fe,o as Ie,r as Le,s as Re,t as ze}from"./command-DcLbSifC.js";import{i as Be,r as Ve,t as He}from"./popover-CFgqFDvC.js";import{a as Ue,c as We,i as Ge,o as Ke,r as qe,s as Je,t as Ye}from"./alert-dialog-wEbVxANM.js";import{n as Xe}from"./input-surface-BdOe4KzO.js";import{t as Ze}from"./dropzone-CaPOeDRZ.js";import{t as Qe}from"./input-UHrKuvBT.js";import{i as $e,n as et,o as tt,s as nt,t as rt}from"./select-D_RQaXgt.js";import{n as it}from"./loading-indicator-SFTqyYVE.js";import{t as at}from"./checkbox-Dwwr_3Py.js";import{t as ot}from"./empty-indicator-WB1WgT9h.js";import{a as st,i as ct,o as lt,t as ut}from"./field-LmNk7wZh.js";import{i as dt,n as ft,t as pt}from"./input-group-BPAxETpQ.js";import{a as K,c as q,n as mt,r as J,s as ht,t as gt}from"./table-CrqQtkR2.js";import{m as _t}from"./users-5msE1WMs.js";import{c as vt,d as yt,l as bt,p as xt,s as St}from"./schemas-CRsC53ls.js";import{r as Ct}from"./newsletters-DhNigJUh.js";import{Ar as wt,Dr as Tt,Hn as Et,In as Dt,Kn as Ot,Ln as kt,Mr as At,Or as jt,Qn as Mt,Tr as Nt,W as Pt,Wn as Ft,Xn as It,_ as Lt,a as Rt,br as zt,c as Bt,d as Vt,i as Ht,jr as Ut,kr as Wt,l as Gt,n as Kt,o as qt,r as Jt,s as Yt,t as Xt,u as Zt,xr as Qt,zn as $t}from"./index-CDP9tIOk.js";import{t as Y}from"./page-header-Cfds8pCg.js";import{C as en,S as tn,T as nn,_ as rn,a as an,b as on,c as sn,d as cn,f as X,g as ln,h as un,i as dn,l as fn,m as pn,n as mn,o as hn,p as gn,r as _n,s as vn,t as yn,u as bn,v as xn,w as Sn,x as Cn,y as wn}from"./filters-CV5jCb9n.js";import{n as Tn}from"./dirty-confirm-dialog-CmARpZQS.js";import{t as En}from"./get-site-timezone-HgL0jI_F.js";import{t as Dn}from"./list-page-CdsnQR9N.js";import{t as On}from"./validator-Cr0sMKuW.js";import{a as kn,i as An,n as jn,t as Mn}from"./filter-sources-4C0kF1NU.js";import{i as Nn,n as Pn,r as Fn,t as In}from"./virtual-list-D3MfPNOh.js";import{a as Ln,c as Rn,h as zn,i as Bn,l as Vn,r as Hn,s as Un,t as Wn}from"./member-custom-fields-gOv6Hoh3.js";import{n as Gn,r as Kn,t as qn}from"./label-picker-BBWykUeA.js";import{n as Jn,r as Yn,t as Xn}from"./custom-field-type-option-D0PXoSnP.js";import{t as Zn}from"./member-route-0Aa52Ntz.js";var Z=e(t(),1),Q=n();function Qn({open:e,memberCount:t,onOpenChange:n,onConfirm:r,isLoading:i=!1}){let[a,o]=(0,Z.useState)([]),s=Gn({selectedSlugs:a,onSelectionChange:o}),c=(0,Z.useCallback)(e=>{e||o([]),n(e)},[n]);return(0,Q.jsx)(je,{open:e,onOpenChange:c,children:(0,Q.jsxs)(ke,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Q.jsx)(Oe,{children:(0,Q.jsxs)(Ae,{children:[`Add label to `,S(t),` `,t===1?`member`:`members`]})}),(0,Q.jsx)(Kn,{isCreating:s.isCreating,labels:s.labels,optionSource:s.optionSource,resolvedSelectedLabels:s.resolvedSelectedLabels,selectedSlugs:a,onCreate:s.createLabel,onDelete:s.deleteLabel,onEdit:s.editLabel,onToggle:s.toggleLabel}),(0,Q.jsxs)(G,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Q.jsx)(W,{disabled:a.length===0||i,onClick:()=>{let e=s.labels.filter(e=>a.includes(e.slug)).map(e=>e.id);e.length>0&&r(e)},children:i?`Adding...`:a.length>1?`Add ${S(a.length)} labels`:`Add label`})]})]})})}function $n({open:e,memberCount:t,nql:n,search:r,onOpenChange:i,onConfirm:a,isLoading:o=!1}){let[s,c]=(0,Z.useState)([]),{data:l,isLoading:u}=Bt({searchParams:{...n?{filter:n}:{},...r?{search:r}:{},include:`labels`,limit:`all`,fields:`id`},enabled:e}),d=(0,Z.useMemo)(()=>{let e=new Set;for(let t of l?.members||[])for(let n of t.labels||[])e.add(n.slug);return e},[l]),f=Gn({selectedSlugs:s,onSelectionChange:c}),p={...f.optionSource,options:f.optionSource.options.filter(e=>d.has(String(e.value)))},m=(0,Z.useCallback)(e=>{e||c([]),i(e)},[i]),h=()=>{let e=f.labels.filter(e=>s.includes(e.slug)).map(e=>e.id);e.length>0&&a(e)};return(0,Q.jsx)(je,{open:e,onOpenChange:m,children:(0,Q.jsxs)(ke,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Q.jsx)(Oe,{children:(0,Q.jsxs)(Ae,{children:[`Remove label from `,S(t),` `,t===1?`member`:`members`]})}),(0,Q.jsx)(Kn,{labels:f.labels.filter(e=>d.has(e.slug)),optionSource:{...p,isInitialLoad:p.isInitialLoad||u},resolvedSelectedLabels:f.resolvedSelectedLabels.filter(e=>d.has(e.slug)),selectedSlugs:s,onDelete:f.deleteLabel,onEdit:f.editLabel,onToggle:f.toggleLabel}),(0,Q.jsxs)(G,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Q.jsx)(W,{disabled:s.length===0||o,onClick:h,children:o?`Removing...`:s.length>1?`Remove ${S(s.length)} labels`:`Remove label`})]})]})})}function er({open:e,newsletters:t,memberCount:n,onOpenChange:r,onConfirm:i,isLoading:a=!1}){let[o,s]=(0,Z.useState)(`all`),[c,l]=(0,Z.useState)([]),[u,d]=(0,Z.useState)(``),[f,p]=(0,Z.useState)(!1),m=(0,Z.useRef)(null),h=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{e||(s(`all`),l([]),d(``),p(!1))},[e]),(0,Z.useEffect)(()=>{if(!f)return;let e=e=>{m.current&&!m.current.contains(e.target)&&p(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[f]);let g=e=>{e||(s(`all`),l([]),d(``),p(!1)),r(e)},_=(0,Z.useCallback)(e=>{l(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},[]),v=t.length>=2,y=()=>{i(!v||o===`all`?null:c)},b=a||v&&o===`selected`&&c.length===0,x=n===1?`member`:`members`;return(0,Q.jsx)(je,{open:e,onOpenChange:g,children:(0,Q.jsxs)(ke,{className:`gap-5`,children:[(0,Q.jsx)(Oe,{children:(0,Q.jsx)(Ae,{children:`Unsubscribe members`})}),v?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{"aria-label":`Unsubscribe scope`,className:`flex flex-col gap-3`,role:`radiogroup`,children:[(0,Q.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3`,children:[(0,Q.jsx)(`input`,{checked:o===`all`,className:`mt-0.5 size-4 cursor-pointer accent-black`,name:`unsubscribe-mode`,type:`radio`,value:`all`,onChange:()=>s(`all`)}),(0,Q.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-semibold`,children:`Unsubscribe from all newsletters`}),(0,Q.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[S(n),` `,x,` will be unsubscribed from`,` `,t.length,` `,t.length===1?`newsletter`:`newsletters`,`.`]})]})]}),(0,Q.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3`,children:[(0,Q.jsx)(`input`,{checked:o===`selected`,className:`mt-0.5 size-4 cursor-pointer accent-black`,name:`unsubscribe-mode`,type:`radio`,value:`selected`,onChange:()=>s(`selected`)}),(0,Q.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-semibold`,children:`Unsubscribe from selected newsletters`}),(0,Q.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Select which newsletters to unsubscribe `,S(n),` `,x,` from.`]})]})]})]}),o===`selected`&&(0,Q.jsxs)(`div`,{ref:m,className:`relative space-y-2`,children:[(0,Q.jsx)(`label`,{className:`text-sm font-semibold`,htmlFor:`newsletter-search`,children:`Newsletters`}),(0,Q.jsxs)(`div`,{className:`flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-md border bg-background px-3 py-1 text-sm`,onClick:()=>{h.current?.focus(),p(!0)},children:[c.map(e=>{let n=t.find(t=>t.id===e);return n?(0,Q.jsxs)(kt,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:t=>{t.stopPropagation(),_(e)},children:[n.name,(0,Q.jsx)(oe,{className:`size-3`})]},e):null}),(0,Q.jsx)(`input`,{ref:h,className:`min-w-[80px] flex-1 bg-transparent py-1 text-sm outline-hidden placeholder:text-muted-foreground`,id:`newsletter-search`,placeholder:c.length===0?`Search newsletters...`:``,value:u,onChange:e=>{d(e.target.value),f||p(!0)},onFocus:()=>p(!0),onKeyDown:e=>{e.key===`Escape`&&(p(!1),h.current?.blur()),e.key===`Backspace`&&!u&&c.length>0&&_(c[c.length-1])}})]}),f&&(0,Q.jsx)(`div`,{className:`absolute top-full left-0 z-50 mt-1 w-full rounded-md border bg-white shadow-md dark:bg-gray-950`,children:(0,Q.jsx)(ze,{shouldFilter:!1,children:(0,Q.jsxs)(Re,{className:`max-h-64 overflow-y-auto`,children:[(0,Q.jsx)(Le,{children:`No newsletters found.`}),t.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())).map(e=>(0,Q.jsxs)(Ie,{value:e.name,onSelect:()=>_(e.id),children:[e.name,c.includes(e.id)&&(0,Q.jsx)(Fe,{})]},e.id))]})})})]})]}):(0,Q.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Are you sure you want to unsubscribe `,S(n),` `,x,` from all newsletters? They will no longer receive any email newsletters from you.`]}),(0,Q.jsxs)(G,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:()=>g(!1),children:`Cancel`}),(0,Q.jsx)(W,{disabled:b,variant:`destructive`,onClick:y,children:a?`Unsubscribing...`:`Unsubscribe`})]})]})})}function tr({open:e,memberCount:t,onOpenChange:n,onConfirm:r,onExportBackup:i,isLoading:a=!1}){let[o,s]=(0,Z.useState)(!1),c=e=>{e||s(!1),n(e)},l=async()=>{if(!(t<1||a||o))try{s(!0),await i(),r()}catch{}finally{s(!1)}};return(0,Q.jsx)(je,{open:e,onOpenChange:c,children:(0,Q.jsxs)(ke,{className:`gap-5`,children:[(0,Q.jsx)(Oe,{children:(0,Q.jsx)(Ae,{children:`Delete selected members?`})}),t>0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`p`,{children:[`You're about to delete`,` `,(0,Q.jsxs)(`strong`,{children:[S(t),` `,t===1?`member`:`members`]}),`. This is permanent! All Ghost data will be deleted, this will have no effect on subscriptions in Stripe.`]}),(0,Q.jsx)(`p`,{children:`A backup of your selection will be automatically downloaded to your device before deletion.`})]}):(0,Q.jsx)(`p`,{children:`No members are selected.`}),(0,Q.jsxs)(G,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Q.jsx)(W,{disabled:a||o||t<1,variant:`destructive`,onClick:()=>void l(),children:a||o?`Deleting...`:`Download backup & delete members`})]})]})})}function nr({fileError:e,onClose:t,onDropAccepted:n,onDropRejected:r}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`mt-5 space-y-5`,children:[(0,Q.jsxs)(Dt,{variant:`info`,children:[`Need some help?`,` `,(0,Q.jsx)(`a`,{className:`font-semibold underline`,href:`https://ghost.org/help/import-members/`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`}),` `,`about importing members or`,` `,(0,Q.jsx)(`a`,{className:`font-semibold underline`,href:`https://static.ghost.org/v4.0.0/files/member-import-template.csv`,rel:`noopener noreferrer`,target:`_blank`,children:`download a sample CSV file`}),`.`]}),e&&(0,Q.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-red-600`,children:[(0,Q.jsx)(A,{className:`mt-0.5 size-4 shrink-0`}),(0,Q.jsx)(`p`,{children:e})]}),(0,Q.jsx)(Ze,{accept:{"text/csv":[`.csv`],"application/vnd.ms-excel":[`.csv`]},"aria-label":`Select or drop a CSV file`,onDropAccepted:e=>{let t=e[0];t&&n(t)},onDropRejected:r,children:({isDragActive:e,isDragReject:t})=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(xe,{className:`mb-2 size-6 text-grey-600`}),(0,Q.jsx)(`span`,{className:`text-sm text-grey-700`,children:t?`The file type you uploaded is not supported`:e?`Drop CSV file to upload`:`Select or drop a CSV file`})]})})]}),(0,Q.jsx)(G,{className:`mt-5`,children:(0,Q.jsx)(W,{variant:`outline`,onClick:t,children:`Close`})})]})}var rr=e(On(),1),ir=[{label:`Email`,value:`email`},{label:`Name`,value:`name`},{label:`Note`,value:`note`},{label:`Subscribed to emails`,value:`subscribed_to_emails`},{label:`Stripe Customer ID`,value:`stripe_customer_id`},{label:`Complimentary plan`,value:`complimentary_plan`},{label:`Labels`,value:`labels`},{label:`Created at`,value:`created_at`},{label:`Gift ID`,value:`gift_id`}],ar={label:`Tier`,value:`import_tier`},or=[`email`,`name`,`note`,`subscribed_to_emails`,`complimentary_plan`,`stripe_customer_id`,`labels`,`created_at`,`gift_id`];function sr({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...or,...e?[ar.value]:[],...t.map(e=>e.value)]}function cr({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...ir,...e?[ar]:[],...t]}var lr=[`email`],ur=class e{_mapping;constructor(e){if(this._mapping={},e)for(let[t,n]of Object.entries(e))this._mapping[n]=t}get(e){return this._mapping[e]??null}toJSON(){return{...this._mapping}}getKeyByValue(e){for(let[t,n]of Object.entries(this._mapping))if(n===e)return t;return null}updateMapping(t,n){let r=new e({});if(r._mapping={...this._mapping},n)for(let e in r._mapping)r._mapping[e]===n&&(r._mapping[e]=null);return r._mapping[t]=n,r}};function dr(e){let t=new Set;for(let n of e)for(let e of Object.keys(n))e!==`__parsed_extra`&&t.add(e);return[...t]}function fr(e,t=30){if(!e||e.length<=t)return e;let n=[];return dr(e).forEach(r=>{let i=e.filter(e=>e[r]&&e[r].trim()!==``),a=[];if(i.length<=t)a=i;else{let e=Math.floor(t/3),n=e,r=t-e-n,o=i.slice(0,e),s=n>0?i.slice(-n):[],c=Math.max(0,Math.floor(i.length/2)-Math.floor(r/2)),l=i.slice(c,c+r);a=[...o,...l,...s].slice(0,t)}a.forEach((e,t)=>{n[t]||(n[t]={}),n[t][r]=e[r]})}),n}function pr(e,t={}){let n=fr(e),r={},i=sr(t);if(e.length>0)for(let t of dr(e)){if(!r.name&&/name/i.test(t)&&!zn(t)){r.name=t;continue}!r[t]&&i.includes(t)&&!lr.includes(t)&&(r[t]=t)}let a=0;for(;a<=n.length-1&&!r.email;){let e=n[a];for(let[t,n]of Object.entries(e))!r.email&&n&&rr.default.isEmail(n)&&!zn(t)&&(r.email=t);a+=1}return r}function mr(e){return e.replace(`Value in [members.email] cannot be blank.`,`Missing email address`).replace(`Value in [members.note] exceeds maximum length of 2000 characters.`,`Note is too long`).replace(`Value in [members.subscribed] must be one of true, false, 0 or 1.`,`Value of "Subscribed to emails" must be "true" or "false"`).replace(`Validation (isEmail) failed for email`,`Invalid email address`).replace(/No such customer:[\s\S]*/,`Could not find Stripe customer`)}function hr({status:e,fileData:t,mapping:n,mappingError:r,showMappingErrors:i,membersCount:a,dataPreviewIndex:o,hasPrevRecord:s,hasNextRecord:c,fieldMappings:l,labelPicker:u,onUpdateMapping:d,onDataPreviewIndexChange:f,onStartOver:p,onUpload:m}){let h=t&&t.length>0&&n?Object.entries(t[o]||{}).map(([e,t])=>({key:e,value:t,mapTo:n.get(e)})):[];return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5 flex min-h-0 flex-1 flex-col space-y-5`,children:t===null?(0,Q.jsx)(`div`,{className:`flex items-center justify-center rounded-md border bg-muted p-10`,children:(0,Q.jsx)(it,{size:`md`})}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:x(`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,i&&r&&`border-red-500`),children:(0,Q.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,Q.jsxs)(gt,{className:`table-fixed`,children:[(0,Q.jsx)(ht,{children:(0,Q.jsxs)(q,{children:[(0,Q.jsx)(K,{className:`w-1/3`,children:`Field`}),(0,Q.jsx)(K,{className:`w-1/3`,children:(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsxs)(`span`,{children:[`Sample data`,` `,(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(#`,S(o+1),`)`]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center`,children:[(0,Q.jsx)(`button`,{"aria-label":`Show previous sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!s&&`cursor-default opacity-30`),disabled:!s||e===`UPLOADING`,type:`button`,onClick:()=>f(o-1),children:(0,Q.jsx)(ie,{className:`size-4`})}),(0,Q.jsx)(`button`,{"aria-label":`Show next sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!c&&`cursor-default opacity-30`),disabled:!c||e===`UPLOADING`,type:`button`,onClick:()=>f(o+1),children:(0,Q.jsx)(ae,{className:`size-4`})})]})]})}),(0,Q.jsx)(K,{className:`w-1/3`,children:`Import as`})]})}),(0,Q.jsx)(mt,{children:h.length>0?h.map(t=>(0,Q.jsxs)(q,{className:x(!t.mapTo&&`bg-muted`),children:[(0,Q.jsx)(J,{className:`text-sm font-medium break-all`,children:t.key}),(0,Q.jsx)(J,{className:x(`text-sm break-all`,!t.value&&`text-muted-foreground`),children:t.value||`\xA0`}),(0,Q.jsx)(J,{children:(0,Q.jsxs)(rt,{disabled:e===`UPLOADING`,value:t.mapTo||`__not_imported__`,onValueChange:e=>{d(t.key,e===`__not_imported__`?null:e)},children:[(0,Q.jsx)(tt,{className:x(`h-8 text-sm`,!t.mapTo&&`text-muted-foreground`),children:(0,Q.jsx)(nt,{})}),(0,Q.jsxs)(et,{children:[(0,Q.jsx)($e,{value:`__not_imported__`,children:`Not imported`}),l.map(e=>(0,Q.jsx)($e,{value:e.value,children:e.label},e.value))]})]})})]},t.key)):(0,Q.jsx)(q,{children:(0,Q.jsx)(J,{className:`text-muted-foreground`,colSpan:3,children:`No data found in the uploaded CSV.`})})})]})})}),i&&r&&(0,Q.jsx)(`p`,{className:`text-sm text-red-600`,children:r}),a>0&&(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If an email address in your CSV matches an existing member, they will be updated with the mapped values.`}),(0,Q.jsxs)(`div`,{className:`mt-5`,children:[(0,Q.jsx)(`label`,{className:`mb-1 block text-sm font-semibold`,children:`Label these members`}),(0,Q.jsx)(Kn,{isCreating:u.isCreating,labels:u.labels,optionSource:u.optionSource,resolvedSelectedLabels:u.resolvedSelectedLabels,selectedSlugs:u.selectedSlugs,onCreate:u.createLabel,onDelete:u.deleteLabel,onEdit:u.editLabel,onToggle:u.toggleLabel})]})]})}),(0,Q.jsxs)(G,{className:`mt-5`,children:[(0,Q.jsx)(W,{disabled:e===`UPLOADING`,variant:`outline`,onClick:p,children:`Start over`}),(0,Q.jsx)(W,{disabled:e===`UPLOADING`||a===0,onClick:m,children:e===`UPLOADING`?(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(it,{color:`light`,size:`sm`}),`Uploading`]}):a>0?`Import ${S(a)} ${a===1?`member`:`members`}`:`Import members`})]})]})}function gr({onUploadAnotherFile:e,onClose:t}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5`,children:(0,Q.jsx)(`p`,{className:`text-sm`,children:`Your import is being processed, and you'll receive a confirmation email as soon as it's complete. Usually this only takes a few minutes, but larger imports may take longer.`})}),(0,Q.jsxs)(G,{className:`mt-5`,children:[(0,Q.jsx)(W,{variant:`outline`,onClick:e,children:`Upload another file`}),(0,Q.jsx)(W,{onClick:t,children:`Got it`})]})]})}var _r=()=>({status:`INIT`,file:null,fileData:null,mapping:null,selectedLabelSlugs:[],dataPreviewIndex:0,mappingError:null,showMappingErrors:!1,importResponse:null,errorMessage:null,errorHeader:`Import error`,showTryAgainButton:!0,dragOver:!1,fileError:null});function vr({importResponse:e,onReset:t,onClose:n}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`mt-5 space-y-4`,children:[e.importedCount===0?(0,Q.jsxs)(`p`,{className:`text-sm`,children:[`No members were added`,e.errorCount>0?` due to the following errors:`:`.`]}):(0,Q.jsxs)(`p`,{className:`text-sm`,children:[`A total of `,(0,Q.jsx)(`strong`,{children:S(e.importedCount)}),` `,e.importedCount===1?`person was`:`people were`,` successfully added or updated in your list of members, and now have access to your site.`]}),e.errorCount>0&&(0,Q.jsxs)(Q.Fragment,{children:[e.importedCount>0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`hr`,{className:`border-grey-200`}),(0,Q.jsxs)(`p`,{className:`text-sm`,children:[(0,Q.jsx)(`strong`,{children:S(e.errorCount)}),` `,e.errorCount===1?`member was`:`members were`,` skipped due to the following errors:`]})]}),(0,Q.jsx)(`ul`,{className:`list-inside list-disc space-y-1 text-sm text-muted-foreground`,children:e.errorList.map(e=>(0,Q.jsxs)(`li`,{children:[e.message,` (`,e.count,`)`]},e.message))})]})]}),(0,Q.jsx)(G,{className:`mt-5`,children:e.errorCount>0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(W,{variant:`outline`,asChild:!0,children:(0,Q.jsx)(`a`,{download:e.errorCsvName,href:e.errorCsvUrl,children:`Download error file`})}),e.importedCount===0?(0,Q.jsx)(W,{onClick:t,children:`Try again`}):(0,Q.jsx)(W,{onClick:n,children:`View members`})]}):(0,Q.jsx)(Q.Fragment,{children:e.importedCount===0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:n,children:`Close`}),(0,Q.jsx)(W,{onClick:t,children:`Try again`})]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(W,{variant:`outline`,onClick:t,children:`Upload another file`}),(0,Q.jsx)(W,{onClick:n,children:`View members`})]})})})]})}function yr({errorMessage:e,showTryAgainButton:t,onTryAgain:n,onClose:r}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5`,children:(0,Q.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-red-600`,children:[(0,Q.jsx)(A,{className:`mt-0.5 size-4 shrink-0`}),(0,Q.jsx)(`p`,{children:e})]})}),(0,Q.jsxs)(G,{className:`mt-5`,children:[t&&(0,Q.jsx)(W,{variant:`outline`,onClick:n,children:`Try again`}),(0,Q.jsx)(W,{onClick:r,children:`OK`})]})]})}var br=e(w(),1),xr=e(Yn(),1);function Sr(e){let t=xr.default.parse(e,{header:!0,skipEmptyLines:!0});return!t.data||t.data.length<1?[]:t.data.map(e=>{let t={};for(let[n,r]of Object.entries(e))t[n]=typeof r==`string`?r:typeof r==`number`||typeof r==`boolean`?String(r):``;return t})}function Cr(e){return e.length===0?``:xr.default.unparse(e,{quotes:!0})}function wr(e){let t=e.meta.stats.imported,n=e.meta.stats.invalid||[],r=n.length,i={},a=Cr(n.map(e=>{let{errors:t,...n}=e,r=t.map(e=>mr(e).trim()).filter(Boolean);for(let e of r)i[e]?i[e].count+=1:i[e]={message:e,count:1};return{...n,error:r.join(`
|
|
2
|
-
`)}})),o=new Blob([a],{type:`text/csv`}),s=URL.createObjectURL(o),c=e.meta.import_label;return{importedCount:t,errorCount:r,errorCsvUrl:s,errorCsvName:c?`${c.name} - Errors.csv`:`Import ${(0,br.default)().format(`YYYY-MM-DD HH:mm`)} - Errors.csv`,errorList:Object.values(i),importLabel:e.meta.import_label||void 0}}function Tr(e,t){switch(t.type){case`SELECT_FILE`:return{...e,status:`MAPPING`,file:t.file,fileData:null,mapping:null,dataPreviewIndex:0,mappingError:null,showMappingErrors:!1,fileError:null};case`SET_FILE_ERROR`:return{...e,fileError:t.fileError};case`PARSE_SUCCESS`:return{...e,fileData:t.fileData,mapping:t.mapping,mappingError:t.mappingError};case`PARSE_FAILURE`:return{...e,fileData:[],mapping:null,mappingError:t.mappingError};case`UPDATE_MAPPING`:return{...e,mapping:t.mapping,mappingError:t.mappingError};case`SET_SELECTED_LABEL_SLUGS`:return{...e,selectedLabelSlugs:t.selectedLabelSlugs};case`SET_DATA_PREVIEW_INDEX`:return{...e,dataPreviewIndex:t.dataPreviewIndex};case`SET_SHOW_MAPPING_ERRORS`:return{...e,showMappingErrors:t.showMappingErrors};case`SET_DRAG_OVER`:return{...e,dragOver:t.dragOver};case`UPLOAD_START`:return{...e,status:`UPLOADING`,showMappingErrors:!1};case`UPLOAD_ACCEPTED`:return{...e,status:`PROCESSING`};case`UPLOAD_COMPLETE`:return{...e,status:`COMPLETE`,importResponse:t.importResponse};case`UPLOAD_ERROR`:return{...e,status:`ERROR`,errorMessage:t.errorMessage,errorHeader:t.errorHeader??`Import error`,showTryAgainButton:t.showTryAgainButton??!0};case`RESET`:return _r();default:return e}}function Er({open:e,onOpenChange:t,onComplete:n,onClose:r}){let[s,c]=(0,Z.useReducer)(Tr,void 0,_r),l=(0,Z.useRef)(null),{mutateAsync:u}=Lt(),f=Xt(`importMemberTier`),p=Xt(`membersCustomFields`),{data:m}=Un({enabled:p}),h=(0,Z.useMemo)(()=>Hn(m?.members_custom_fields??[]),[m]),g=!p||m!==void 0,_=(0,Z.useRef)({importMemberTier:f,customFieldColumns:h});_.current={importMemberTier:f,customFieldColumns:h};let v=(0,Z.useMemo)(()=>cr({importMemberTier:f,customFieldColumns:h}),[f,h]),y=Gn({selectedSlugs:s.selectedLabelSlugs,onSelectionChange:e=>c({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}),b=(0,Z.useCallback)(()=>{l.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(l.current),l.current=null):l.current&&=null},[]),S=(0,Z.useCallback)(()=>{b(),c({type:`RESET`})},[b]);(0,Z.useEffect)(()=>()=>{b()},[b]);let C=(0,Z.useCallback)(e=>{if(!(!e&&s.status===`UPLOADING`)){if(!e){let e=s.importResponse??void 0;S(),r?.(e)}t(e)}},[r,t,S,s.importResponse,s.status]);(0,Z.useEffect)(()=>{if(!s.file||!g)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=Sr(e);if(n.length>0){let e=new ur(pr(n,_.current));c({type:`PARSE_SUCCESS`,fileData:n,mapping:e,mappingError:e.getKeyByValue(`email`)?null:`Please map "Email" to one of the fields in the CSV.`})}else c({type:`PARSE_SUCCESS`,fileData:[],mapping:null,mappingError:`File is empty, nothing to import. Please select a different file.`})}catch{c({type:`PARSE_FAILURE`,mappingError:`Failed to parse this file. Please try another CSV file.`})}},t.onerror=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`Failed to read file${t.error?.message?`: ${t.error.message}`:``}`})},t.onabort=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`File read was interrupted. Please try again.`})},t.readAsText(s.file),()=>{e=!0,t.readyState===FileReader.LOADING&&t.abort()}},[s.file,g]);let w=(0,Z.useCallback)(e=>{let t=/(?:\.([^.]+))?$/.exec(e.name)?.[1];return!t||t.toLowerCase()!==`csv`?(c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`}),!1):(c({type:`SET_FILE_ERROR`,fileError:null}),!0)},[]),T=(0,Z.useCallback)(e=>{w(e)&&c({type:`SELECT_FILE`,file:e})},[w]),E=(0,Z.useCallback)((e,t)=>{if(!s.mapping)return;let n=s.mapping.updateMapping(e,t),r=s.fileData&&s.fileData.length===0?`File is empty, nothing to import. Please select a different file.`:n.getKeyByValue(`email`)?null:`Please map "Email" to one of the fields in the CSV.`;c({type:`UPDATE_MAPPING`,mapping:n,mappingError:r})},[s.fileData,s.mapping]),D=(0,Z.useCallback)(async()=>{if(!s.file||s.mappingError){c({type:`SET_SHOW_MAPPING_ERRORS`,showMappingErrors:!0});return}c({type:`UPLOAD_START`});let e=[];for(let t of s.selectedLabelSlugs){let n=y.labels.find(e=>e.slug===t);n&&e.push(n.name)}try{let t=await u({file:s.file,labels:e,mapping:s.mapping?.toJSON()});if(qt(t)){let e=wr(t);b(),l.current=e.errorCsvUrl,c({type:`UPLOAD_COMPLETE`,importResponse:e}),n?.(e);return}c({type:`UPLOAD_ACCEPTED`}),n?.()}catch(e){if(e instanceof d){c({type:`UPLOAD_ERROR`,errorMessage:`The file you uploaded was larger than the maximum file size your server allows.`});return}let t=e instanceof i?e.data?.errors?.[0]:null;if(e instanceof o&&t?.code===`EMAIL_VERIFICATION_NEEDED`){c({type:`UPLOAD_ERROR`,errorMessage:t.message,errorHeader:`Woah there cowboy, that's a big list`,showTryAgainButton:!1}),n?.();return}if(e instanceof a||t?.type===`DataImportError`){c({type:`UPLOAD_ERROR`,errorMessage:t?.message||(e instanceof Error?e.message:`An unexpected error occurred, please try again`)});return}c({type:`UPLOAD_ERROR`,errorMessage:`An unexpected error occurred, please try again`})}},[s.file,s.mapping,s.mappingError,s.selectedLabelSlugs,y.labels,u,b,n]),O=s.fileData?!!s.fileData[s.dataPreviewIndex+1]:!1,k=s.dataPreviewIndex>0,A=s.fileData?.length??0,j=s.status===`MAPPING`||s.status===`UPLOADING`,M=(0,Z.useMemo)(()=>{switch(s.status){case`PROCESSING`:return`Import in progress`;case`COMPLETE`:return`Import complete`;case`ERROR`:return s.errorHeader;default:return`Import members`}},[s.errorHeader,s.status]);return(0,Q.jsx)(je,{open:e,onOpenChange:C,children:(0,Q.jsxs)(ke,{className:x(`gap-0`,j&&`max-w-2xl`,j&&`flex max-h-[calc(100vh-16vmin)] flex-col`),children:[(0,Q.jsxs)(Oe,{children:[(0,Q.jsx)(Ae,{children:M}),(0,Q.jsx)(De,{className:`sr-only`,children:`Import members from a CSV file.`})]}),s.status===`INIT`&&(0,Q.jsx)(nr,{fileError:s.fileError,onClose:()=>C(!1),onDropAccepted:T,onDropRejected:()=>c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(s.status===`MAPPING`||s.status===`UPLOADING`)&&(0,Q.jsx)(hr,{dataPreviewIndex:s.dataPreviewIndex,fieldMappings:v,fileData:s.fileData,hasNextRecord:O,hasPrevRecord:k,labelPicker:y,mapping:s.mapping,mappingError:s.mappingError,membersCount:A,showMappingErrors:s.showMappingErrors,status:s.status,onDataPreviewIndexChange:e=>{c({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onStartOver:S,onUpdateMapping:E,onUpload:()=>void D()}),s.status===`PROCESSING`&&(0,Q.jsx)(gr,{onClose:()=>C(!1),onUploadAnotherFile:S}),s.status===`COMPLETE`&&s.importResponse&&(0,Q.jsx)(vr,{importResponse:s.importResponse,onClose:()=>C(!1),onReset:S}),s.status===`ERROR`&&(0,Q.jsx)(yr,{errorMessage:s.errorMessage,showTryAgainButton:s.showTryAgainButton,onClose:()=>C(!1),onTryAgain:S})]})})}function Dr({importMemberTier:e=!1}={}){return[...ir,...e?[ar]:[]]}function Or(e){let t=((zn(e)?e.split(`.`).slice(1,2):[e])[0]??e).replace(/[._-]+/g,` `).trim();return t.charAt(0).toUpperCase()+t.slice(1)}function kr({columnKey:e,isSaving:t,nameError:n,saveError:r,canRetry:i,onSubmit:a,onEdit:o,onCancel:s}){let[c,l]=(0,Z.useState)(()=>Or(e)),[u,d]=(0,Z.useState)(Ln[0].id),f=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{f.current?.scrollIntoView({block:`nearest`})},[]);let p=()=>a(c,u);return(0,Q.jsxs)(`div`,{ref:f,className:`scroll-mb-8 space-y-3`,"data-testid":`import-create-custom-field`,onKeyDown:e=>{if(e.key===`Escape`){e.stopPropagation(),t||s();return}e.key===`Enter`&&!t&&i&&(e.preventDefault(),p())},children:[(0,Q.jsxs)(st,{className:`flex-row flex-wrap items-start gap-3`,children:[(0,Q.jsxs)(ut,{className:`min-w-56 flex-1`,"data-invalid":!!n||void 0,children:[(0,Q.jsx)(lt,{className:`text-sm!`,htmlFor:`import-custom-field-name`,children:`Name`}),(0,Q.jsx)(Qe,{"aria-invalid":!!n||void 0,autoComplete:`off`,className:`h-8 text-sm!`,id:`import-custom-field-name`,placeholder:`Enter custom field name`,value:c,autoFocus:!0,onChange:e=>{l(e.target.value),o()}}),n&&(0,Q.jsx)(ct,{children:n})]}),(0,Q.jsxs)(ut,{className:`w-44`,children:[(0,Q.jsx)(lt,{className:`text-sm!`,children:`Type`}),(0,Q.jsxs)(rt,{value:u,onValueChange:e=>d(e),children:[(0,Q.jsx)(tt,{"aria-label":`Type`,className:`h-8 text-sm!`,children:(0,Q.jsx)(nt,{children:(0,Q.jsx)(Xn,{type:u})})}),(0,Q.jsx)(et,{children:Ln.map(e=>(0,Q.jsx)($e,{value:e.id,children:(0,Q.jsx)(Xn,{type:e.id})},e.id))})]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2 self-end pb-0.5`,children:[(0,Q.jsx)(W,{disabled:t,size:`sm`,variant:`outline`,onClick:s,children:`Cancel`}),(0,Q.jsx)(W,{disabled:t||!i,size:`sm`,onClick:p,children:t?`Saving`:`Save`})]})]}),r&&(0,Q.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:r})]})}var Ar={membership:{heading:`Membership fields`,badge:null,ariaKind:null},custom:{heading:`Custom fields`,badge:`Custom`,ariaKind:`Custom field`}},jr=Object.keys(Ar);function Mr({membershipFields:e,customFieldColumns:t}){let n=[...e.map(e=>({value:e.value,source:`membership`,fieldName:e.label,label:e.label})),...t.map(e=>({value:e.value,source:`custom`,fieldName:e.fieldName,...e.partLabel===void 0?{}:{partLabel:e.partLabel},label:e.label,type:e.type}))],r=Pr(n);return n.map(e=>({...e,contested:r.has(Nr(e))}))}function Nr(e){return e.label.trim().toLowerCase()}function Pr(e){let t=new Map;for(let n of e){let e=t.get(Nr(n))??new Set;e.add(n.source),t.set(Nr(n),e)}return new Set([...t].filter(([,e])=>e.size>1).map(([e])=>e))}var Fr={email:V,name:be,note:k,subscribed_to_emails:D,stripe_customer_id:I,complimentary_plan:L,labels:F,created_at:se,gift_id:fe,import_tier:H};function Ir(e,t){return(0,Q.jsx)(te,{className:t})}function Lr({target:e,className:t}){switch(e.source){case`membership`:return(0,Q.jsx)(Fr[e.value]??te,{className:t});case`custom`:return(0,Q.jsx)(Jn,{className:t,type:e.type});default:return Ir(e,t)}}function Rr(e,t,n){return Pe((n??[]).join(` `),t)}function zr({className:e,columnKey:t,value:n,disabled:r,invalid:i,targets:a,open:o,search:s,onOpenChange:c,onSearchChange:l,onSelect:u,onCreateField:d,triggerRef:f}){let p=(0,Z.useRef)(!1),m=a.find(e=>e.value===n),h=m?.contested?Ar[m.source].badge:null,g=m?Ar[m.source].ariaKind:null,_=e=>{c(!1),u(e)};return(0,Q.jsxs)(He,{open:o,modal:!0,onOpenChange:e=>{r||c(e)},children:[(0,Q.jsx)(Be,{asChild:!0,children:(0,Q.jsxs)(W,{ref:f,"aria-disabled":r||void 0,"aria-invalid":i||void 0,"aria-label":m?`Field for ${t}, ${m.label}${g?`, ${g}`:``}`:`Field for ${t}, not chosen`,className:x(`h-(--control-height) w-full scroll-my-8 justify-start gap-2 px-2 font-normal`,e,`hover:text-current`,Xe.invalidSelf,`aria-[invalid=true]:ring-2`,r&&`cursor-not-allowed hover:bg-transparent`),role:`combobox`,variant:`outline`,children:[(0,Q.jsxs)(`span`,{className:x(`flex shrink-0 items-center`,r&&`opacity-60`),children:[m&&(0,Q.jsx)(Lr,{className:`size-4 text-foreground`,target:m}),!m&&(0,Q.jsx)(`span`,{className:`size-4 rounded-sm border border-dashed border-border-strong`})]}),m?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`span`,{className:x(`flex min-w-0 flex-1 items-baseline text-left text-sm font-medium`,r&&`opacity-60`),children:[(0,Q.jsx)(`span`,{className:`min-w-0 shrink-[999] truncate`,children:m.fieldName}),m.partLabel&&(0,Q.jsx)(`span`,{className:`min-w-0 truncate whitespace-pre`,children:` (${m.partLabel})`})]}),h&&(0,Q.jsx)(kt,{className:x(`ms-2 shrink-0 max-md:hidden`,r&&`opacity-60`),variant:`secondary`,children:h})]}):(0,Q.jsx)(`span`,{className:x(`min-w-0 truncate text-sm text-muted-foreground`,r&&`opacity-60`),children:`Select field`}),(0,Q.jsx)(U,{className:`ms-auto size-4 shrink-0 opacity-50`})]})}),(0,Q.jsx)(Ve,{align:`start`,className:`flex max-h-(--radix-popover-content-available-height) w-(--radix-popover-trigger-width) min-w-64 flex-col p-0`,collisionPadding:16,onCloseAutoFocus:e=>{p.current&&(p.current=!1,e.preventDefault(),d())},children:(0,Q.jsxs)(ze,{className:`min-h-0`,filter:Rr,children:[(0,Q.jsx)(Me,{className:`h-(--control-height) shrink-0`,placeholder:`Search fields...`,value:s,onValueChange:l}),(0,Q.jsxs)(Re,{className:`min-h-0 flex-1`,children:[jr.map(e=>(0,Q.jsx)(Ne,{heading:Ar[e].heading,children:a.filter(t=>t.source===e).map(e=>(0,Q.jsxs)(Ie,{keywords:[e.label],value:e.value,onSelect:()=>_(e.value),children:[(0,Q.jsx)(Lr,{target:e}),(0,Q.jsx)(`span`,{className:`truncate`,children:e.label}),n===e.value&&(0,Q.jsx)(Fe,{})]},e.value))},e)),(0,Q.jsx)(Ne,{forceMount:!0,children:(0,Q.jsxs)(Ie,{className:`font-semibold text-green`,value:`Add custom field`,forceMount:!0,onSelect:()=>{p.current=!0,c(!1)},children:[(0,Q.jsx)(le,{}),(0,Q.jsx)(`span`,{children:`Add custom field`})]})})]})]})})]})}function Br(e,t,n){let r=new Set(e);return n?r.add(t):r.delete(t),r}function Vr(e){return Bn(e.type)?null:Hn([e])[0]?.value??null}function Hr({status:e,fileData:t,mapping:n,mappingError:r,showMappingErrors:c,dataPreviewIndex:u,targets:d,labelPicker:p,onUpdateMapping:m,onFieldCreated:h,onDataPreviewIndexChange:g,onStartOver:_,onColumnsChanged:v,onUpload:y}){let[b,C]=(0,Z.useState)(new Set),[w,T]=(0,Z.useState)(new Set),[E,D]=(0,Z.useState)(null),O=(0,Z.useRef)(new Map);(0,Z.useLayoutEffect)(()=>{let[e]=E?.columns??[];e&&O.current.get(e)?.scrollIntoView({block:`nearest`,behavior:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`})},[E]);let[k,A]=(0,Z.useState)(null),[j,M]=(0,Z.useState)(null),{mutateAsync:N,isPending:P}=Vn(),[ee,F]=(0,Z.useState)(null),[I,L]=(0,Z.useState)(null),[R,z]=(0,Z.useState)(!0),te=l(),B=(0,Z.useCallback)(()=>{F(null),L(null),z(!0)},[]),ne=e=>{let t=e instanceof i?e.data?.errors?.[0]:null;if(e instanceof a&&t?.property===`name`){F(f(e,`Invalid name`));return}L(f(e,e instanceof s?e.message:`Could not create the custom field, please try again.`)),z(!(e instanceof o)&&t?.type!==`NoPermissionError`),e instanceof o||te(e,{withToast:!1})},V=async(e,t,n)=>{B();let r;try{r=(await N({name:t,type:n})).members_custom_fields?.[0]}catch(e){ne(e);return}if(!r){L(`The field was created, but this column could not be mapped to it. Choose it from the list.`),z(!1),te(Error(`Custom field create returned no field`));return}let i=Vr(r);if(h(e,i),A(null),D(null),i){O.current.get(e)?.focus();return}U(e,r.name)},H=e=>!!k&&k!==e.key,re=t=>e===`UPLOADING`||P,U=(e,t)=>{B(),A(null),M({columnKey:e,search:t})},oe=e=>{B(),A(e)},se=(e,t)=>{let r=n?.getKeyByValue(t);r&&r!==e.key&&C(e=>Br(e,r,!0)),m(e.key,t)},ce=e=>!w.has(e.key)&&(!!e.mapTo||b.has(e.key)),le=(e,t)=>{D(null),v(),T(n=>Br(n,e.key,!t)),C(n=>Br(n,e.key,t&&!e.mapTo)),!t&&k===e.key&&A(null)},ue=c&&r||E?.message,de=!!ue&&!E?.columns.size,fe=t.length,pe=u>0,me=!!t[u+1],he=(0,Z.useMemo)(()=>dr(t),[t]),ge=n?he.map(e=>({key:e,value:t[u]?.[e]??``,mapTo:n.get(e)})):[],_e=Object.fromEntries(ge.map(e=>[e.key,ce(e)?e.mapTo:``])),ve=()=>{if(r)return null;if(!Object.values(_e).includes(`email`))return{message:`Please map "Email" to one of the fields in the CSV, and make sure it is selected.`,columns:new Set};let e=Object.keys(_e).filter(e=>_e[e]===null);return e.length===0?null:{message:`Choose a field for ${e.map(e=>`"${e}"`).join(`, `)}, or deselect ${e.length===1?`it`:`them`}.`,columns:new Set(e)}};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5 flex min-h-0 flex-1 flex-col space-y-5`,children:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:x(`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,de&&`border-destructive`),children:(0,Q.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,Q.jsxs)(gt,{className:`table-fixed`,children:[(0,Q.jsx)(ht,{children:(0,Q.jsxs)(q,{children:[(0,Q.jsx)(K,{className:`w-10`,children:(0,Q.jsx)(`span`,{className:`sr-only`,children:`Import this column`})}),(0,Q.jsx)(K,{className:`w-[26%]`,children:`Field`}),(0,Q.jsx)(K,{className:`w-[30%]`,children:(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsxs)(`span`,{children:[`Sample data`,` `,(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(#`,S(u+1),`)`]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center`,children:[(0,Q.jsx)(`button`,{"aria-label":`Show previous sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!pe&&`cursor-default opacity-30`),disabled:!pe||e===`UPLOADING`,type:`button`,onClick:()=>g(u-1),children:(0,Q.jsx)(ie,{className:`size-4`})}),(0,Q.jsx)(`button`,{"aria-label":`Show next sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!me&&`cursor-default opacity-30`),disabled:!me||e===`UPLOADING`,type:`button`,onClick:()=>g(u+1),children:(0,Q.jsx)(ae,{className:`size-4`})})]})]})}),(0,Q.jsx)(K,{className:`w-[38%]`,children:`Import as`})]})}),(0,Q.jsx)(mt,{children:ge.length>0?ge.map(e=>(0,Q.jsxs)(Z.Fragment,{children:[(0,Q.jsxs)(q,{className:x(`transition-opacity [&>td]:group-hover:bg-transparent`,!ce(e)&&`bg-muted/50`,H(e)&&`opacity-40`),children:[(0,Q.jsx)(J,{children:(0,Q.jsx)(at,{"aria-label":`Import ${e.key}`,checked:ce(e),disabled:re(e),onCheckedChange:t=>le(e,t===!0)})}),(0,Q.jsx)(J,{className:x(`text-sm font-medium break-all`,!ce(e)&&`text-muted-foreground`),children:e.key}),(0,Q.jsx)(J,{className:x(`text-sm break-all`,(!e.value||!ce(e))&&`text-muted-foreground`),children:e.value||`\xA0`}),(0,Q.jsx)(J,{children:(0,Q.jsx)(zr,{className:x(!ce(e)&&`invisible`),columnKey:e.key,disabled:re(e),invalid:E?.columns.has(e.key),open:j?.columnKey===e.key,search:j?.columnKey===e.key?j.search:``,targets:d,triggerRef:t=>{t?O.current.set(e.key,t):O.current.delete(e.key)},value:e.mapTo,onCreateField:()=>oe(e.key),onOpenChange:t=>t?U(e.key,``):M(null),onSearchChange:t=>M({columnKey:e.key,search:t}),onSelect:t=>{D(null),se(e,t)}})})]}),k===e.key&&(0,Q.jsx)(q,{className:`bg-transparent hover:bg-transparent`,children:(0,Q.jsx)(J,{className:`p-2`,colSpan:4,children:(0,Q.jsx)(`div`,{className:`rounded-lg border bg-surface-elevated-2 p-3 shadow-lg`,children:(0,Q.jsx)(kr,{canRetry:R,columnKey:e.key,isSaving:P,nameError:ee,saveError:I,onCancel:()=>{B(),A(null),O.current.get(e.key)?.focus()},onEdit:B,onSubmit:(t,n)=>void V(e.key,t,n)})})})})]},e.key)):(0,Q.jsx)(q,{children:(0,Q.jsx)(J,{className:`text-muted-foreground`,colSpan:4,children:`No data found in the uploaded CSV.`})})})]})})}),ue&&(0,Q.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:ue}),fe>0&&(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If an email address in your CSV matches an existing member, they will be updated with the mapped values.`}),(0,Q.jsxs)(`div`,{className:`mt-5`,children:[(0,Q.jsx)(`label`,{className:`mb-1 block text-sm font-semibold`,children:`Label these members`}),(0,Q.jsx)(Kn,{isCreating:p.isCreating,labels:p.labels,optionSource:p.optionSource,resolvedSelectedLabels:p.resolvedSelectedLabels,selectedSlugs:p.selectedSlugs,onCreate:p.createLabel,onDelete:p.deleteLabel,onEdit:p.editLabel,onToggle:p.toggleLabel})]})]})}),(0,Q.jsxs)(G,{className:`mt-5`,children:[(0,Q.jsx)(W,{disabled:e===`UPLOADING`,variant:`outline`,onClick:_,children:`Start over`}),(0,Q.jsx)(W,{disabled:e===`UPLOADING`||fe===0,onClick:()=>{let e=ve();if(e){D(e);return}y(_e)},children:e===`UPLOADING`?(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(it,{color:`light`,size:`sm`}),`Uploading`]}):fe>0?`Import ${S(fe)} ${fe===1?`member`:`members`}`:`Import members`})]})]})}function Ur({open:e,onOpenChange:t,onComplete:n,onClose:r}){let[s,c]=(0,Z.useReducer)(Tr,void 0,_r),l=(0,Z.useRef)(null),{mutateAsync:u}=Lt(),p=Xt(`importMemberTier`),{data:m,isError:h}=Un(),g=(0,Z.useMemo)(()=>Hn(m?.members_custom_fields??[]),[m]),_=m!==void 0||h,v=(0,Z.useRef)({importMemberTier:p,customFieldColumns:g});(0,Z.useLayoutEffect)(()=>{v.current={importMemberTier:p,customFieldColumns:g}},[p,g]);let y=(0,Z.useMemo)(()=>Mr({membershipFields:Dr({importMemberTier:p}),customFieldColumns:g}),[p,g]),b=Gn({selectedSlugs:s.selectedLabelSlugs,onSelectionChange:e=>{E.current=!0,c({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}}),S=(0,Z.useCallback)(()=>{l.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(l.current),l.current=null):l.current&&=null},[]),C=(0,Z.useCallback)(()=>{S(),E.current=!1,c({type:`RESET`})},[S]);(0,Z.useEffect)(()=>()=>{S()},[S]);let{confirm:w,dialogProps:T}=Tn(),E=(0,Z.useRef)(!1),D=(0,Z.useCallback)(e=>{if(!(!e&&s.status===`UPLOADING`)){if(!e){w(s.status===`MAPPING`&&E.current,()=>{let e=s.importResponse??void 0;C(),r?.(e),t(!1)});return}t(e)}},[w,r,t,C,s.importResponse,s.status]);(0,Z.useEffect)(()=>{if(!s.file||!_)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=Sr(e);if(n.length>0){let e=new ur(pr(n,v.current));c({type:`PARSE_SUCCESS`,fileData:n,mapping:e,mappingError:null})}else c({type:`PARSE_SUCCESS`,fileData:[],mapping:null,mappingError:`File is empty, nothing to import. Please select a different file.`})}catch{c({type:`PARSE_FAILURE`,mappingError:`Failed to parse this file. Please try another CSV file.`})}},t.onerror=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`Failed to read file${t.error?.message?`: ${t.error.message}`:``}`})},t.onabort=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`File read was interrupted. Please try again.`})},t.readAsText(s.file),()=>{e=!0,t.readyState===FileReader.LOADING&&t.abort()}},[s.file,_]);let O=(0,Z.useCallback)(e=>{let t=/(?:\.([^.]+))?$/.exec(e.name)?.[1];return!t||t.toLowerCase()!==`csv`?(c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`}),!1):(c({type:`SET_FILE_ERROR`,fileError:null}),!0)},[]),k=(0,Z.useCallback)(e=>{O(e)&&c({type:`SELECT_FILE`,file:e})},[O]),A=(0,Z.useCallback)((e,t)=>{if(!s.mapping)return;E.current=!0;let n=s.mapping.updateMapping(e,t),r=s.fileData&&s.fileData.length===0?`File is empty, nothing to import. Please select a different file.`:null;c({type:`UPDATE_MAPPING`,mapping:n,mappingError:r})},[s.fileData,s.mapping]),j=(0,Z.useCallback)((e,t)=>{t&&A(e,t)},[A]),M=(0,Z.useCallback)(async e=>{if(!s.file||s.mappingError){c({type:`SET_SHOW_MAPPING_ERRORS`,showMappingErrors:!0});return}c({type:`UPLOAD_START`});let t=[];for(let e of s.selectedLabelSlugs){let n=b.labels.find(t=>t.slug===e);n&&t.push(n.name)}try{let r=await u({file:s.file,labels:t,mapping:e});if(qt(r)){let e=wr(r);S(),l.current=e.errorCsvUrl,c({type:`UPLOAD_COMPLETE`,importResponse:e}),n?.(e);return}c({type:`UPLOAD_ACCEPTED`}),n?.()}catch(e){if(e instanceof d){c({type:`UPLOAD_ERROR`,errorMessage:`The file you uploaded was larger than the maximum file size your server allows.`});return}let t=e instanceof i?e.data?.errors?.[0]:null;if(e instanceof o&&t?.code===`EMAIL_VERIFICATION_NEEDED`){c({type:`UPLOAD_ERROR`,errorMessage:f(e,e.message),errorHeader:`Woah there cowboy, that's a big list`,showTryAgainButton:!1}),n?.();return}if(e instanceof a||t?.type===`DataImportError`){c({type:`UPLOAD_ERROR`,errorMessage:f(e,e instanceof Error?e.message:`An unexpected error occurred, please try again`)});return}c({type:`UPLOAD_ERROR`,errorMessage:`An unexpected error occurred, please try again`})}},[s.file,s.mappingError,s.selectedLabelSlugs,b.labels,u,S,n]),N=s.status===`MAPPING`||s.status===`UPLOADING`,P=(0,Z.useMemo)(()=>{switch(s.status){case`PROCESSING`:return`Import in progress`;case`COMPLETE`:return`Import complete`;case`ERROR`:return s.errorHeader;default:return`Import members`}},[s.errorHeader,s.status]);return(0,Q.jsxs)(je,{open:e,onOpenChange:D,children:[(0,Q.jsxs)(ke,{className:x(`gap-0`,N&&`max-w-4xl`,N&&`flex max-h-[calc(100vh-16vmin)] flex-col`),children:[(0,Q.jsxs)(Oe,{children:[(0,Q.jsx)(Ae,{children:P}),(0,Q.jsx)(De,{className:`sr-only`,children:`Import members from a CSV file.`})]}),s.status===`INIT`&&(0,Q.jsx)(nr,{fileError:s.fileError,onClose:()=>D(!1),onDropAccepted:k,onDropRejected:()=>c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(s.status===`MAPPING`||s.status===`UPLOADING`)&&s.fileData===null&&(0,Q.jsx)(`div`,{className:`flex items-center justify-center rounded-md border bg-muted p-10`,children:(0,Q.jsx)(it,{size:`md`})}),(s.status===`MAPPING`||s.status===`UPLOADING`)&&s.fileData!==null&&(0,Q.jsx)(Hr,{dataPreviewIndex:s.dataPreviewIndex,fileData:s.fileData,labelPicker:b,mapping:s.mapping,mappingError:s.mappingError,showMappingErrors:s.showMappingErrors,status:s.status,targets:y,onColumnsChanged:()=>{E.current=!0},onDataPreviewIndexChange:e=>{c({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onFieldCreated:j,onStartOver:C,onUpdateMapping:A,onUpload:e=>void M(e)}),s.status===`PROCESSING`&&(0,Q.jsx)(gr,{onClose:()=>D(!1),onUploadAnotherFile:C}),s.status===`COMPLETE`&&s.importResponse&&(0,Q.jsx)(vr,{importResponse:s.importResponse,onClose:()=>D(!1),onReset:C}),s.status===`ERROR`&&(0,Q.jsx)(yr,{errorMessage:s.errorMessage,showTryAgainButton:s.showTryAgainButton,onClose:()=>D(!1),onTryAgain:C})]}),(0,Q.jsx)(Ye,{open:T.open,onOpenChange:T.onOpenChange,children:(0,Q.jsxs)(Ge,{className:`z-[1100]`,"data-testid":`import-members-leave-guard`,overlayClassName:`z-[1100]`,onEscapeKeyDown:e=>e.stopPropagation(),children:[(0,Q.jsxs)(Je,{children:[(0,Q.jsx)(We,{children:`Leave without importing?`}),(0,Q.jsx)(Ue,{children:`The columns you have mapped will be lost.`})]}),(0,Q.jsxs)(Ke,{children:[(0,Q.jsx)(qe,{children:`Keep mapping`}),(0,Q.jsx)(W,{variant:`destructive`,onClick:T.onConfirm,children:`Leave`})]})]})})]})}function Wr(e){return Xt(`membersCustomFields`)?(0,Q.jsx)(Ur,{...e}):(0,Q.jsx)(Er,{...e})}var Gr=`count.active_stripe_customers`,Kr=`${Gr}:>1`,qr=`${Gr}:<2`,Jr=vt({multipleActiveSubscriptionsBanner:vt({dismissedCount:bt().finite().optional().catch(void 0),dismissedAt:xt().optional().catch(void 0)}).optional().catch(void 0)});function Yr(e){return e===Kr}function Xr(e){if(!e)return Jr.parse({});try{let t=JSON.parse(e);return Jr.parse(t)}catch{return Jr.parse({})}}function Zr(e){return Xr(e).multipleActiveSubscriptionsBanner??{}}function Qr(e,t,n){let r=Xr(e),i=Zr(e);return JSON.stringify({...r,multipleActiveSubscriptionsBanner:{...i,dismissedCount:t,dismissedAt:n}})}function $r(e,t,n){return{...e,accessibility:Qr(e.accessibility,t,n)}}var ei=[`is`,`contains`,`does-not-contain`,`starts-with`,`ends-with`],ti=[`is`,`is-greater`,`is-less`],$=[`is`,`is-not`],ni=[`is-any`,`is-not-any`],ri=[{value:`active`,label:`Active`},{value:`trialing`,label:`Trialing`},{value:`canceled`,label:`Canceled`},{value:`unpaid`,label:`Unpaid`},{value:`past_due`,label:`Past Due`},{value:`incomplete`,label:`Incomplete`},{value:`incomplete_expired`,label:`Incomplete - Expired`}],ii={parse(){return null},serialize(e){let t=e.values[0];return e.operator!==`is`&&e.operator!==`is-not`?null:t===`email-disabled`?e.operator===`is`?[`(email_disabled:1)`]:[`(email_disabled:0)`]:t===`subscribed`?e.operator===`is`?[`(subscribed:true+email_disabled:0)`]:[`(subscribed:false,email_disabled:1)`]:t===`unsubscribed`?e.operator===`is`?[`(subscribed:false+email_disabled:0)`]:[`(subscribed:true,email_disabled:1)`]:null}},ai={parse(){return null},serialize(e,t){let n=t.params.slug,r=e.values[0];return!n||e.operator!==`is`?null:r===`subscribed`?[`(newsletters.slug:${n}+email_disabled:0)`]:r===`unsubscribed`?[`(newsletters.slug:-${n},email_disabled:1)`]:null}},oi={parse(){return null},serialize(e){let t=e.values[0];return typeof t!=`string`||!t||e.operator!==`1`&&e.operator!==`0`?null:[`(feedback.post_id:${m(t)}+feedback.score:${e.operator})`]}},si={parse(e,t){let n=wn(e);return!n||n.field!==t.key?null:n.operator===`$gt`&&n.value===1?{field:t.key,operator:`is`,values:[`true`]}:n.operator===`$lt`&&n.value===2?{field:t.key,operator:`is`,values:[`false`]}:null},serialize(e){let t=e.values[0];return e.operator===`is`?t===`true`?[Kr]:t===`false`?[qr]:null:null}},ci=[`is-set`,`is-not-set`],li=[...$,...ei.filter(e=>!$.includes(e)),...ci],ui=`custom_fields.`,di={is:``,"is-not":`-`,contains:`~`,"does-not-contain":`-~`,"starts-with":`~^`,"ends-with":`~$`},fi={parse(){return null},serialize(e,t){let n=t.params.key,[r,i]=e.values;if(!n)return null;let a=`custom_fields.key:${m(n)}`;if(e.operator===`is-set`)return r?[`(${a}+custom_fields.path:${m(r)})`]:[a];if(e.operator===`is-not-set`)return r?[`(${a}+custom_fields.path:-${m(r)})`]:[`custom_fields.key:-${m(n)}`];let o=di[e.operator];return o===void 0||i==null||i===``?null:[`(${a}+${r?`custom_fields.value.${r}`:`custom_fields.value`}:${o}${m(String(i))})`]}},pi=yn({name:{operators:ei,ui:{label:`Name`,type:`text`,placeholder:`Enter name...`,defaultOperator:`contains`,className:`w-48`},codec:pn()},email:{operators:ei,ui:{label:`Email`,type:`text`,placeholder:`Enter email...`,defaultOperator:`contains`,className:`w-48`},codec:pn()},label:{operators:ni,ui:{label:`Label`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`labels`,label:`Labels`},columnInclude:`labels`},codec:gn()},subscribed:{operators:$,ui:{label:`Newsletter subscription`,type:`select`,searchable:!1},options:[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`},{value:`email-disabled`,label:`Email disabled`}],codec:ii},last_seen_at:{operators:ln,ui:{label:`Last seen`,type:`date`,defaultOperator:xn},codec:bn()},created_at:{operators:ln,ui:{label:`Created`,type:`date`,defaultOperator:xn},codec:bn()},signup:{operators:$,ui:{label:`Signed up on post/page`,type:`select`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`},codec:X({quoteStrings:!0})},"newsletters.:slug":{operators:[`is`],ui:{label:`Newsletter`,type:`select`,searchable:!1,hideOperatorSelect:!0},options:[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`}],codec:ai},tier_id:{operators:ni,ui:{label:`Membership tier`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`tiers`,label:`Tiers`},columnInclude:`tiers`},codec:gn()},status:{operators:$,ui:{label:`Member status`,type:`select`,searchable:!1},options:[{value:`paid`,label:`Paid`},{value:`free`,label:`Free`},{value:`comped`,label:`Complimentary`}],codec:X()},"subscriptions.plan_interval":{operators:$,ui:{label:`Billing period`,type:`select`,searchable:!1},options:[{value:`month`,label:`Monthly`},{value:`year`,label:`Yearly`}],metadata:{activeColumn:{key:`subscriptions.plan_interval`,label:`Billing period`},columnInclude:`subscriptions`},codec:X()},"subscriptions.status":{operators:$,ui:{label:`Stripe subscription status`,type:`select`,searchable:!1},options:ri,metadata:{activeColumn:{key:`subscriptions.status`,label:`Subscription status`},columnInclude:`subscriptions`},codec:X()},"subscriptions.start_date":{operators:ln,ui:{label:`Paid start date`,type:`date`,defaultOperator:xn},metadata:{activeColumn:{key:`subscriptions.start_date`,label:`Paid start date`},columnInclude:`subscriptions`},codec:bn()},"subscriptions.current_period_end":{operators:ln,ui:{label:`Next billing date`,type:`date`,defaultOperator:xn},metadata:{activeColumn:{key:`subscriptions.current_period_end`,label:`Next billing date`},columnInclude:`subscriptions`},codec:bn()},conversion:{operators:$,ui:{label:`Subscription started on post/page`,type:`select`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`},codec:X({quoteStrings:!0})},email_count:{operators:ti,ui:{label:`Emails sent (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,className:`w-24`},codec:cn()},email_opened_count:{operators:ti,ui:{label:`Emails opened (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,className:`w-24`},codec:cn()},email_open_rate:{operators:ti,ui:{label:`Open rate (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,max:100,suffix:`%`,className:`w-24`},codec:cn()},"emails.post_id":{operators:$,ui:{label:`Sent email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:X({quoteStrings:!0})},"opened_emails.post_id":{operators:$,ui:{label:`Opened email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:X({quoteStrings:!0})},"clicked_links.post_id":{operators:$,ui:{label:`Clicked email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:X({quoteStrings:!0})},newsletter_feedback:{operators:[`1`,`0`],ui:{label:`Responded with feedback`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`,defaultOperator:`1`},codec:oi},offer_redemptions:{operators:ni,ui:{label:`Offer`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`offer_redemptions`,label:`Offer`}},codec:gn({quoteStrings:!0,serializeSingletonAsScalar:!0})},[Gr]:{operators:[`is`],ui:{label:`Multiple active subscriptions`,type:`select`,searchable:!1,hideOperatorSelect:!0},options:[{value:`true`,label:`Yes`},{value:`false`,label:`No`}],codec:si},"custom_fields.:key":{operators:li,ui:{label:`Custom field`,type:`custom`,component:`custom-field`},metadata:{activeColumn:({params:e,label:t})=>t?{key:`${ui}${e.key}`,label:t}:null,columnInclude:`custom_fields`},codec:fi}}),mi=yn({...pi,last_seen_at:Sn(pi.last_seen_at),created_at:Sn(pi.created_at),"subscriptions.start_date":Sn(pi[`subscriptions.start_date`]),"subscriptions.current_period_end":en(pi[`subscriptions.current_period_end`])});function hi(){return mi}var gi=2;function _i(e,t={}){let n=new Map;for(let r of e){let e=sn(mi,r.field,`UTC`),i=e?.definition.metadata?.activeColumn;if(!i)continue;let{context:a}=e;if(typeof i!=`function`){let e=Si[i.key];e&&n.set(i.key,{...i,getValue:e});continue}let o=Ci[a.pattern]?.(a.params,t);if(!o)continue;let s=i({...a,label:o.label});s&&n.set(s.key,{...s,getValue:o.getValue})}return Array.from(n.values()).slice(0,gi)}function vi(e){let t=new Set([`labels`,`tiers`]);for(let n of e){let e=sn(mi,n.field,`UTC`)?.definition.metadata?.columnInclude;e&&t.add(e)}return Array.from(t).join(`,`)}function yi({filters:e,nql:t,search:n}){if(!t&&!n)return;let r={include:vi(e),limit:`100`,order:`created_at desc`};return t&&(r.filter=t),n&&(r.search=n),r}function bi({nql:e,search:t}){return!e&&!t?{all:!0}:{...e?{filter:e}:{},...t?{search:t}:{}}}function xi(e,t){return e?{text:br.default.tz(e,t).format(`D MMM YYYY`),subtext:(0,br.default)(e).fromNow()}:null}var Si={labels:e=>e.labels?.length?{text:e.labels.map(e=>e.name).join(`, `)}:null,tiers:e=>e.tiers?.length?{text:e.tiers.map(e=>e.name).join(`, `)}:null,"subscriptions.plan_interval":e=>{let t=e.current_subscription?.plan?.interval;return t?{text:t===`month`?`Monthly`:`Yearly`}:null},"subscriptions.status":e=>{let t=e.current_subscription?.status;return t?{text:t.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}:null},"subscriptions.start_date":(e,t)=>xi(e.current_subscription?.start_date,t),"subscriptions.current_period_end":(e,t)=>xi(e.current_subscription?.current_period_end,t),offer_redemptions:e=>{let t=e.subscriptions?.map(e=>e.offer?.name).filter(Boolean);return t?.length?{text:t.join(`, `)}:null}},Ci={"custom_fields.:key":({key:e},{customFields:t})=>{let n=t?.find(t=>t.key===e);return n?{label:n.name,getValue:e=>{let t=Wn(n.type,e.custom_fields?.[n.key]);return t?{text:t}:null}}:null}};async function wi(e,t){let n=new URLSearchParams({limit:`all`});e&&n.set(`filter`,e),t&&n.set(`search`,t),await u(`/members/upload/?${n}`,`members.csv`)}var Ti=({hasFilterOrSearch:e,memberCount:t,nql:n,search:r,canBulkDelete:i,showMenu:a=!0,showNewMember:o=!0,onImportComplete:s})=>{let c=y(),l=b(),u=c.pathname===`/members/import`,d=c.search??``,f=c.pathname===`/members`?`${c.pathname}${d}`:`/members`,m=`#/members/new?back=${encodeURIComponent(f)}`,[h,g]=(0,Z.useState)(!1),[_,v]=(0,Z.useState)(!1),[x,C]=(0,Z.useState)(!1),[w,T]=(0,Z.useState)(!1),{data:E,isLoading:D}=Ct({searchParams:{filter:`status:-archived`,limit:`50`}}),k=E?.newsletters||[],{mutateAsync:A,isPending:M}=Vt(),{mutate:N,isPending:ee}=Zt(),[I,L]=(0,Z.useState)(!1),R=bi({nql:n,search:r}),z=(0,Z.useCallback)(async()=>{try{await wi(n,r)}catch(e){throw p.error(`Export failed`,{description:`There was a problem downloading your member data. Please check your connection and try again.`}),e}},[n,r]),te=(0,Z.useCallback)(async e=>{try{for(let t of e)await A({...R,action:{type:`addLabel`,meta:{label:{id:t}}}});g(!1),p.success(e.length>1?`Labels added successfully`:`Label added successfully`)}catch{p.error(`Failed to add label`,{description:`There was a problem applying this label. Please try again.`})}},[A,R]),B=(0,Z.useCallback)(async e=>{try{for(let t of e)await A({...R,action:{type:`removeLabel`,meta:{label:{id:t}}}});v(!1),p.success(e.length>1?`Labels removed successfully`:`Label removed successfully`)}catch{p.error(`Failed to remove label`,{description:`There was a problem removing this label. Please try again.`})}},[A,R]),ne=(0,Z.useCallback)(async e=>{let t=R;if(e===null){try{await A({...t,action:{type:`unsubscribe`}}),C(!1),p.success(`Members unsubscribed successfully`)}catch{p.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}return}L(!0);try{let n=await Promise.allSettled(e.map(e=>A({...t,action:{type:`unsubscribe`,newsletter:e}}))),r=n.filter(e=>e.status===`fulfilled`).length,i=n.length;C(!1),r===i?p.success(`Unsubscribed from ${i} ${i===1?`newsletter`:`newsletters`}`):r>0?p.warning(`Unsubscribed from ${r} of ${i} newsletters`,{description:`Some newsletters could not be unsubscribed. Please try again.`}):p.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}catch{p.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}finally{L(!1)}},[A,R]),V=(0,Z.useCallback)(()=>{N(R,{onSuccess:()=>{T(!1),p.success(`Members deleted successfully`)},onError:()=>{p.error(`Failed to delete members`,{description:`There was a problem deleting these members. Please try again.`})}})},[N,R]),H=(0,Z.useCallback)(async()=>{try{await wi(n,r)}catch(e){throw p.error(`Export failed`,{description:`There was a problem downloading your backup. Please check your connection and try again.`}),e}},[n,r]),ie=(0,Z.useCallback)(()=>{},[]),ae=(0,Z.useCallback)(()=>{l(`/members/import${d}`)},[d,l]),U=(0,Z.useCallback)(e=>{s?.(e)},[s]),oe=(0,Z.useCallback)(e=>{if(e?.importLabel){l(Zn({filter:`label:[${e.importLabel.slug}]`}),{replace:!0});return}l(`/members${d}`,{replace:!0})},[d,l]);return(0,Q.jsxs)(Q.Fragment,{children:[a&&(0,Q.jsxs)(Et,{children:[(0,Q.jsx)(Mt,{asChild:!0,children:(0,Q.jsx)(W,{"data-testid":`members-actions`,variant:`outline`,children:(0,Q.jsx)(O,{className:`size-4`})})}),(0,Q.jsxs)(Ft,{align:`end`,children:[(0,Q.jsxs)(Ot,{onClick:ae,children:[(0,Q.jsx)(xe,{className:`mr-2 size-4`}),`Import members`]}),t>0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(Ot,{onClick:()=>void z(),children:[(0,Q.jsx)(pe,{className:`mr-2 size-4`}),e?`Export ${S(t)} members`:`Export all members`]}),(0,Q.jsx)(It,{}),(0,Q.jsxs)(Ot,{onClick:()=>g(!0),children:[(0,Q.jsx)(P,{className:`mr-2 size-4`}),`Add label to `,S(t),` `,t===1?`member`:`members`]}),(0,Q.jsxs)(Ot,{onClick:()=>v(!0),children:[(0,Q.jsx)(F,{className:`mr-2 size-4`}),`Remove label from `,S(t),` `,t===1?`member`:`members`]}),(0,Q.jsxs)(Ot,{disabled:D,onClick:()=>C(!0),children:[(0,Q.jsx)(re,{className:`mr-2 size-4`}),`Unsubscribe `,S(t),` `,t===1?`member`:`members`]}),(0,Q.jsx)(It,{}),(0,Q.jsxs)(Ot,{className:`text-destructive focus:text-destructive`,disabled:!i,onClick:()=>T(!0),children:[(0,Q.jsx)(j,{className:`mr-2 size-4`}),`Delete `,S(t),` `,t===1?`member`:`members`]})]})]})]}),o&&(0,Q.jsx)(W,{asChild:!0,children:(0,Q.jsxs)(`a`,{"aria-label":`New member`,className:`inline-flex items-center`,href:m,children:[(0,Q.jsx)(`span`,{className:`hidden sm:inline`,children:`New member`}),(0,Q.jsx)(`span`,{className:`sm:hidden`,children:(0,Q.jsx)(le,{})})]})}),(0,Q.jsx)(Wr,{open:u,onClose:oe,onComplete:U,onOpenChange:ie}),(0,Q.jsx)(Qn,{isLoading:M,memberCount:t,open:h,onConfirm:e=>void te(e),onOpenChange:g}),(0,Q.jsx)($n,{isLoading:M,memberCount:t,nql:n,open:_,search:r,onConfirm:e=>void B(e),onOpenChange:v}),(0,Q.jsx)(er,{isLoading:M||I,memberCount:t,newsletters:k,open:x,onConfirm:e=>void ne(e),onOpenChange:C}),(0,Q.jsx)(tr,{isLoading:ee,memberCount:t,open:w,onConfirm:V,onExportBackup:H,onOpenChange:T})]})},Ei=({membershipsEnabled:e,onMemberCreated:t})=>{let{data:n,isLoading:r}=c(),{mutateAsync:i,isPending:a}=Yt(),o=l(),s=(0,Z.useCallback)(async()=>{if(!(!n||a))try{await i({email:n.email,name:n.name}),p.success(`You've been added as a member`),await t?.()}catch(e){o(e)}},[i,n,o,a,t]);return e?(0,Q.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Q.jsx)(ot,{actions:(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-2 sm:flex-row`,children:[(0,Q.jsx)(W,{asChild:!0,children:(0,Q.jsx)(v,{to:`/members/new?back=%2Fmembers`,children:`New member`})}),(0,Q.jsx)(W,{disabled:a||r||!n,variant:`outline`,onClick:()=>void s(),children:a?`Adding...`:`Add yourself as a member`})]}),(0,Q.jsxs)(`p`,{className:`text-sm leading-tight text-pretty text-muted-foreground`,children:[`Already have members?`,` `,(0,Q.jsx)(v,{className:`font-medium text-foreground underline-offset-4 hover:underline`,to:`/members/import`,children:`Import with CSV`})]})]}),description:`Use memberships to allow your readers to sign up and subscribe to your content.`,title:`Start building your audience`,children:(0,Q.jsx)(me,{})})}):(0,Q.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Q.jsx)(ot,{actions:(0,Q.jsx)(W,{variant:`outline`,asChild:!0,children:(0,Q.jsx)(`a`,{href:`#/settings/members`,children:`Membership settings`})}),description:`Adjust your membership settings to start adding members.`,title:`Memberships have been disabled`,children:(0,Q.jsx)(me,{})})})},Di=Rt.extend({route:St(`members`),filter:yt(xt(),xt().nullable()).refine(e=>typeof e.filter==`string`&&e.filter.length>0)}),Oi=`A view with this name already exists`,ki=`Saved view could not be found for update`,Ai=`Multiple saved views matched update target`,ji=`Saved view could not be found for delete`,Mi=`Multiple saved views matched delete target`;function Ni(e){return Di.safeParse(e).success}function Pi(e){let t=Ht(e);return t.ok?{ok:!0,views:t.views.filter(Ni)}:t}function Fi(e,t){return{name:e.trim(),route:`members`,filter:{filter:t}}}function Ii(e,t,n,r){let i=Fi(t,n);if(r){let t=Kt(e,r);if(t.length===0)throw Error(ki);if(t.length>1)throw Error(Ai);let n=t[0];if(Jt(e,i,n))throw Error(Oi);return e.map((e,t)=>t===n?i:e)}if(Jt(e,i))throw Error(Oi);return[...e,i]}function Li(e,t){let n=Kt(e,t);if(n.length===0)throw Error(ji);if(n.length>1)throw Error(Mi);let r=n[0];return e.filter((e,t)=>t!==r)}var Ri=`Cannot modify saved views because shared_views is invalid`;function zi(e){return Qt(e?.settings??null,`shared_views`)??`[]`}function Bi(){let{data:e}=Nt(),t=l(),n=zi(e),r=(0,Z.useRef)(null),i=(0,Z.useMemo)(()=>Pi(n),[n]);return(0,Z.useEffect)(()=>{i.ok||r.current===n||(r.current=n,t(i.error,{withToast:!1}))},[t,i,n]),i.ok?i.views:[]}function Vi(){let{data:e}=Nt(),{mutateAsync:t}=Tt(),n=l();return(0,Z.useCallback)(async(r,i,a)=>{let o=Ht(zi(e));if(!o.ok){let e=Error(Ri,{cause:o.error});throw n(e,{withToast:!1}),e}let s=Ii(o.views,r,i,a);try{await t([{key:`shared_views`,value:JSON.stringify(s)}])}catch(e){throw n(e,{withToast:!1}),e}},[e,t,n])}function Hi(){let{data:e}=Nt(),{mutateAsync:t}=Tt(),n=l();return(0,Z.useCallback)(async r=>{let i=Ht(zi(e));if(!i.ok){let e=Error(Ri,{cause:i.error});throw n(e,{withToast:!1}),e}let a=Li(i.views,r);try{await t([{key:`shared_views`,value:JSON.stringify(a)}])}catch(e){throw n(e,{withToast:!1}),e}},[e,t,n])}function Ui(e,t){return(0,Z.useMemo)(()=>!t||e.length===0?null:e.find(e=>e.filter.filter===t)??null,[e,t])}var Wi=({filter:e,existingViews:t,activeView:n,onDeleted:r,onClose:i})=>{let[a,o]=(0,Z.useState)(()=>n?.name??``),[s,c]=(0,Z.useState)(``),[l,u]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(!1),[p,m]=(0,Z.useState)(!1),h=Vi(),g=Hi(),_=!!n,v=async()=>{let r=a.trim();if(!r){c(`Please enter a name`);return}if(!_&&t.find(e=>e.name.trim().toLowerCase()===r.toLowerCase())){c(`A view with this name already exists`);return}u(!0);try{await h(r,e,n??void 0),i()}catch(e){c(e instanceof Error?e.message:`Failed to save view`)}finally{u(!1)}},y=async()=>{if(n){f(!0);try{await g(n),i(),r?.()}catch(e){c(e instanceof Error?e.message:`Failed to delete view`)}finally{f(!1)}}};return(0,Q.jsx)(Ve,{align:`end`,className:`w-72`,children:(0,Q.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Q.jsx)(`h3`,{className:`text-sm font-semibold`,children:_?`Edit view`:`Save view`}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Q.jsx)(Qe,{placeholder:`View name`,value:a,autoFocus:!0,onChange:e=>{o(e.target.value),s&&c(``)},onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),v())}}),s&&(0,Q.jsx)(`p`,{className:`text-xs text-red-500`,children:s})]}),_?p?(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Delete view?`}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(W,{size:`sm`,variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Q.jsx)(W,{disabled:d,size:`sm`,variant:`destructive`,onClick:()=>void y(),children:d?`Deleting...`:`Delete`})]})]}):(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsx)(W,{className:`text-red hover:bg-red/5 hover:text-red`,size:`sm`,variant:`ghost`,onClick:()=>m(!0),children:`Delete`}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(W,{size:`sm`,variant:`outline`,onClick:i,children:`Cancel`}),(0,Q.jsx)(W,{disabled:l||!a.trim(),size:`sm`,onClick:()=>void v(),children:l?`Saving...`:`Save`})]})]}):(0,Q.jsx)(W,{className:`w-full`,disabled:l||!a.trim(),onClick:()=>void v(),children:l?`Saving...`:`Save`})]})})},Gi=({filter:e,existingViews:t,activeView:n,onDeleted:r})=>{let[i,a]=(0,Z.useState)(!1),o=n?`edit:${n.name}:${n.filter.filter}`:`save:${e}`;return(0,Q.jsxs)(He,{open:i,onOpenChange:a,children:[(0,Q.jsx)(Be,{asChild:!0,children:(0,Q.jsx)(W,{variant:`outline`,children:n?`Edit view`:`Save view`})}),i&&(0,Q.jsx)(Wi,{activeView:n,existingViews:t,filter:e,onClose:()=>a(!1),onDeleted:r},o)]})},Ki=({field:e,values:t,onChange:n,operator:r,onOperatorChange:i,readOnly:a})=>{let{data:o}=Rn(),s=o?.members_custom_fields??[],c=(e.key??``).slice(ui.length),l=s.find(e=>e.key===c),u=l?(Bn(l.type)??[]).map(({key:e,label:t})=>({value:e,label:t})):[],d=e.label??l?.name??`Custom field`,f=u.length>0,[p=``,m=``]=t,h=f&&p===``?ci:li;(0,Z.useEffect)(()=>{a||!i||h.includes(r)||i(`is-set`)},[a,r,h,i]);let g=!ci.includes(r),_=[{value:``,label:`Any`},...u];return(0,Q.jsxs)(Q.Fragment,{children:[f&&(0,Q.jsx)(Ee,{ariaLabel:`${d} part`,options:_,readOnly:a,testId:`custom-field-filter-subfield`,value:p,onChange:e=>n([e,m])}),i&&(0,Q.jsx)(Ee,{ariaLabel:`${d} operator`,options:fn(h),readOnly:a,testId:`custom-field-filter-operator`,value:r,onChange:i}),g&&(0,Q.jsx)(Te,{ariaLabel:`${d} value`,placeholder:`Enter value...`,readOnly:a,testId:`custom-field-filter-value`,value:m,onChange:e=>n([p,e])})]})},qi=5,Ji={"is-any":`is any of`,"is-not-any":`is none of`,"does-not-contain":`does not contain`,...rn,...Cn,1:`More like this`,0:`Less like this`},Yi={"is-greater":`is greater than`,"is-less":`is less than`};function Xi(e){switch(e){case`name`:return Z.createElement(be,{className:`size-4`});case`email`:case`subscribed`:return Z.createElement(V,{className:`size-4`});case`label`:return Z.createElement(F,{className:`size-4`});case`last_seen_at`:return Z.createElement(M,{className:`size-4`});case`created_at`:return Z.createElement(se,{className:`size-4`});case`signup`:return Z.createElement(ue,{className:`size-4`});case`tier_id`:case`subscriptions.status`:return Z.createElement(I,{className:`size-4`});case`status`:return Z.createElement(ee,{className:`size-4`});case`subscriptions.plan_interval`:return Z.createElement(_e,{className:`size-4`});case`subscriptions.start_date`:return Z.createElement(he,{className:`size-4`});case`subscriptions.current_period_end`:return Z.createElement(ce,{className:`size-4`});case`conversion`:return Z.createElement(B,{className:`size-4`});case`email_count`:case`emails.post_id`:return Z.createElement(D,{className:`size-4`});case`email_opened_count`:case`opened_emails.post_id`:return Z.createElement(ge,{className:`size-4`});case`email_open_rate`:return Z.createElement(Ce,{className:`size-4`});case`clicked_links.post_id`:return Z.createElement(R,{className:`size-4`});case`newsletter_feedback`:return Z.createElement(z,{className:`size-4`});case`offer_redemptions`:return Z.createElement(L,{className:`size-4`});case Gr:return Z.createElement(ve,{className:`size-4`});default:return e.startsWith(`newsletters.`)?Z.createElement(N,{className:`size-4`}):void 0}}function Zi(e,t){return{options:e,valueSource:t}}function Qi(e){let t=new Map,n=[],r=[];for(let t of e)t.redemption_type===`retention`&&(t.cadence===`month`?n.push(t.id):t.cadence===`year`&&r.push(t.id));return n.length>0&&t.set(`retention:month`,n),r.length>0&&t.set(`retention:year`,r),t}function $i(e){return Array.isArray(e.metadata?.offerIds)?e.metadata.offerIds.filter(e=>typeof e==`string`):null}function ea(e){let t=[],n=Qi(e);for(let n of e)n.redemption_type!==`retention`&&t.push({value:n.id,label:n.name});return n.has(`retention:month`)&&t.push({value:`retention:month`,label:`Monthly Retention`,metadata:{offerIds:n.get(`retention:month`)}}),n.has(`retention:year`)&&t.push({value:`retention:year`,label:`Yearly Retention`,metadata:{offerIds:n.get(`retention:year`)}}),t}function ta(e,t){let n=[],r=new Set;for(let i of t){let t=$i(i);t&&t.length>0&&t.every(t=>e.includes(t))&&(n.push(String(i.value)),t.forEach(e=>{r.add(e)}))}for(let t of e)r.has(t)||n.push(t);return n}function na(e,t){let n=[];for(let r of e){let e=t.find(e=>e.value===r),i=e?$i(e):null;i?n.push(...i):n.push(r)}return[...new Set(n)]}function ra(e){return new Map(e.map(e=>[e.id,e.name]))}function ia(e,t,n){let r=e.map(e=>t.find(t=>t.value===e)).filter(e=>!!e);return r.length===1?r[0].label:r.length>1?`${r.length} selected`:e.length===1?n.get(e[0])??`Select...`:e.length>1?`${e.length} selected`:`Select...`}function aa({labelValueSource:e,tierValueSource:t,newsletters:n=[],hydratedNewsletterSlugs:r=[],hasMultipleTiers:i=!1,paidMembersEnabled:a=!1,emailFiltersEnabled:o=!1,postValueSource:s,emailValueSource:c,offers:l=[],multipleActiveSubscriptionsCount:u=0,membersTrackSources:d=!1,emailTrackOpens:f=!1,emailTrackClicks:p=!1,customFieldsEnabled:m=!1,customFields:h=[],archivedCustomFields:g=[],siteTimezone:_=`UTC`}){return(0,Z.useMemo)(()=>{let v=hi();function y(e,t={},n=Ji){let r;return r=e.startsWith(`newsletters.`)?v[`newsletters.:slug`]:e.startsWith(`custom_fields.`)?v[`custom_fields.:key`]:v[e],{key:e,...r.ui,icon:Xi(e),operators:fn(r.operators,{labels:n}),...`options`in r&&r.options?{options:r.options}:{},...t}}function b(e,t,n={}){let r=v[e],i=y(e,{defaultValue:t,...n});return tn(r)?{...i,customRenderer:on(t)}:i}let x=[],S=n.filter(e=>e.status!==`archived`),C=new Set(S.map(e=>e.slug)),w=[...new Set(r)].map(e=>({slug:e,name:n.find(t=>t.slug===e)?.name??e})),T=w.filter(e=>!C.has(e.slug)),E=ea(l),D=ra(l),O=un(_),k=[y(`name`),y(`email`)];if(e&&k.push(y(`label`,{...Zi([],e),customRenderer:e=>Z.createElement(qn,e)})),S.length<=1){k.push(y(`subscribed`));for(let e of w)k.push(y(`newsletters.${e.slug}`,{label:e.name}))}if(k.push(b(`last_seen_at`,O),b(`created_at`,O)),d&&k.push(y(`signup`,Zi([],s))),x.push({group:`Basic`,fields:k}),m){let e=h.map(e=>y(`custom_fields.${e.key}`,{label:e.name,icon:Z.createElement(Jn,{type:e.type,className:`size-4`}),defaultOperator:`contains`,renderOperatorInValue:!0,customRenderer:e=>Z.createElement(Ki,e)})),t=g.map(e=>y(`custom_fields.${e.key}`,{label:e.name,icon:Z.createElement(ne,{className:`size-4`}),readOnly:!0,renderOperatorInValue:!0,customRenderer:e=>Z.createElement(Ki,e)})),n=[...e,...t];n.length>0&&x.push({group:`Custom fields`,fields:n,previewLimit:qi})}if(S.length>1){let e=[y(`subscribed`,{label:`All newsletters`,options:[{value:`subscribed`,label:`Subscribed to at least one`},{value:`unsubscribed`,label:`Unsubscribed from all`},{value:`email-disabled`,label:`Email disabled`}]})];for(let t of S)e.push(y(`newsletters.${t.slug}`,{label:t.name}));for(let t of T)e.push(y(`newsletters.${t.slug}`,{label:t.name}));x.push({group:`Newsletters`,fields:e})}if(a){let e=[];i&&e.push(y(`tier_id`,Zi([],t))),e.push(y(`status`,{options:[...v.status.options,{value:`gift`,label:`Gift subscription`}]})),u>0&&e.push(y(Gr)),e.push(y(`subscriptions.plan_interval`),y(`subscriptions.status`),b(`subscriptions.start_date`,O),b(`subscriptions.current_period_end`,O)),d&&e.push(y(`conversion`,Zi([],s))),l.length>0&&e.push(y(`offer_redemptions`,{options:E,customValueRenderer:e=>ia(e,E,D)})),x.push({group:`Subscription`,fields:e})}if(o){let e=[y(`email_count`,{},Yi),y(`email_opened_count`,{},Yi)];f&&e.push(y(`email_open_rate`,{},Yi)),e.push(y(`emails.post_id`,Zi([],c))),f&&e.push(y(`opened_emails.post_id`,Zi([],c))),p&&e.push(y(`clicked_links.post_id`,Zi([],c))),e.push(y(`newsletter_feedback`,Zi([],c))),x.push({group:`Email`,fields:e})}return x},[o,c,m,h,g,p,f,i,e,d,u,n,l,r,a,s,_,t])}var oa=[],sa=[];function ca(e,t){return e.map(e=>e.field===`offer_redemptions`?{...e,values:t(e.values)}:e)}var la=({filters:e,multipleActiveSubscriptionsCount:t,nql:n,onFiltersChange:r,savedViews:i=[],activeView:a,iconOnly:o=!1})=>{let{data:s}=h({}),{data:c}=Ct({searchParams:{limit:`100`}}),{data:l}=Nt({}),u=l?.settings||[],d=At()===!0,f=Ut()??!0,p=wt()===!0,m=Wt()===!0,g=jt()===!0,_=En(u),v=c?.newsletters||[],y=(0,Z.useMemo)(()=>s?.offers??oa,[s?.offers]),b=(0,Z.useMemo)(()=>ea(y),[y]),S=(0,Z.useMemo)(()=>[...new Set(e.map(e=>e.field).filter(e=>e.startsWith(`newsletters.`)).map(e=>e.slice(12)).filter(Boolean))],[e]),C=(0,Z.useMemo)(()=>ca(e,e=>ta(e,b)),[e,b]),w=(0,Z.useCallback)(e=>{r(ca(e,e=>na(e,b)))},[r,b]),T=jn(),E=kn(),D=An(),{valueSource:O,hasMultipleTiers:k}=Mn(),A=Xt(`membersCustomFields`),{data:j}=Un({enabled:A}),M=j?.members_custom_fields??sa,N=(0,Z.useMemo)(()=>new Set(e.map(e=>e.field).filter(e=>e.startsWith(ui)).map(e=>e.slice(ui.length)).filter(Boolean)),[e]),{data:P}=Rn({enabled:A&&N.size>0}),ee=aa({newsletters:v,hydratedNewsletterSlugs:S,hasMultipleTiers:k,paidMembersEnabled:d,emailFiltersEnabled:f,labelValueSource:D,tierValueSource:O,offers:y,multipleActiveSubscriptionsCount:t,postValueSource:T,emailValueSource:E,membersTrackSources:p,emailTrackOpens:m,emailTrackClicks:g,siteTimezone:_,customFieldsEnabled:A,customFields:M,archivedCustomFields:(0,Z.useMemo)(()=>(P?.members_custom_fields??sa).filter(e=>e.status===`archived`&&N.has(e.key)).map(e=>({key:e.key,name:e.name})),[P,N])}),F=e.length>0,I=x(`bg-white dark:bg-background`,o&&!F&&`min-w-[34px] gap-0 !px-3 text-[0px] lg:min-w-0 lg:gap-1.5 lg:px-3 lg:text-base`),L=F?(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center gap-4 sm:absolute sm:top-0 sm:right-0`,children:[(0,Q.jsxs)(W,{className:`hidden items-center gap-1 !px-0 text-sm font-normal text-muted-foreground hover:bg-transparent hover:text-foreground lg:inline-flex`,type:`button`,variant:`ghost`,onClick:()=>r([]),children:[(0,Q.jsx)(oe,{className:`size-4`}),`Clear`]}),n&&(0,Q.jsx)(Gi,{activeView:a,existingViews:i,filter:n,onDeleted:()=>r([])})]}):void 0;return(0,Q.jsx)(we,{addButtonClassName:I,addButtonIcon:F?(0,Q.jsx)(Se,{}):(0,Q.jsx)(de,{}),addButtonText:F?`Add filter`:`Filter`,allowMultiple:!0,className:`[&>button]:order-last ${F?`sm:!pr-40 [&>button]:border-none`:`w-auto`}`,clearButton:L,fields:ee,filters:C,keyboardShortcut:`f`,popoverAlign:`start`,popoverContentClassName:`z-[80] w-[280px] [&_[data-slot=command-list]]:max-h-[450px]`,showClearButton:F,showSearchInput:!0,onChange:w})},ua=({search:e,onSearchChange:t,autoFocus:n=!1,ariaLabel:r=`Search members`})=>{let i=r===`Search members mobile`?`members-mobile-search-input`:`members-search-input`;return(0,Q.jsxs)(pt,{className:`h-(--control-height) min-w-0 basis-full lg:w-[180px] lg:basis-auto xl:w-[240px]`,children:[(0,Q.jsx)(ft,{children:(0,Q.jsx)(ye,{className:`size-4`,strokeWidth:1.75})}),(0,Q.jsx)(dt,{"aria-label":r,autoFocus:n,className:`!h-[34px]`,"data-testid":i,placeholder:`Search members...`,value:e,onChange:e=>t(e.target.value)})]})},da=({children:e,description:t,title:n,url:r})=>(0,Q.jsx)(`a`,{className:`group/card block rounded-xl border bg-card p-6 transition-all hover:bg-table-row-hover hover:shadow-xs`,href:r,rel:`noopener noreferrer`,target:`_blank`,children:(0,Q.jsxs)(`div`,{className:`flex items-center gap-6`,children:[e,(0,Q.jsxs)(`div`,{className:`flex flex-col leading-tight`,children:[(0,Q.jsx)(`h4`,{className:`text-md font-medium tracking-normal text-pretty text-foreground`,children:n}),(0,Q.jsx)(`p`,{className:`mt-1.5 text-sm leading-tight text-pretty text-muted-foreground`,children:t})]})]})}),fa=`flex h-18 w-[100px] min-w-[100px] items-center justify-center rounded-md p-4 opacity-80 transition-all group-hover/card:opacity-100`,pa=()=>(0,Q.jsxs)(`div`,{className:`grid w-full grid-cols-1 gap-4 lg:grid-cols-2`,children:[(0,Q.jsx)(da,{description:`Learn how to turn anonymous visitors into logged-in members with memberships in Ghost.`,title:`Building your audience with subscriber signups`,url:`https://ghost.org/resources/build-audience-subscriber-signups/`,children:(0,Q.jsx)(`div`,{className:x(fa,`bg-gradient-to-tr from-[#22C55E]/20 to-[#84CC16]/20`),children:(0,Q.jsx)(ue,{className:`text-[#16A34A]`,size:20,strokeWidth:1.5})})}),(0,Q.jsx)(da,{description:`Starting from zero? Use this guide to find your founding audience members.`,title:`Get your first 100 email subscribers`,url:`https://ghost.org/resources/first-100-email-subscribers/`,children:(0,Q.jsx)(`div`,{className:x(fa,`bg-gradient-to-tl from-[#A855F7]/20 to-[#EC4899]/20`),children:(0,Q.jsx)(V,{className:`text-[#DB2777]`,size:20,strokeWidth:1.5})})})]});function ma(e,t){let n=new URLSearchParams;t&&n.set(`back`,t);let r=n.toString();return`/members/${e}${r?`?${r}`:``}`}var ha={left:`100%`};function ga(e){if(!e)return{text:`Unknown`,isKnown:!1};try{let t=JSON.parse(e);return t.country?t.country_code===`US`&&t.region?{text:`${t.region}, US`,isKnown:!0}:{text:t.country,isKnown:!0}:{text:`Unknown`,isKnown:!1}}catch{return{text:`Unknown`,isKnown:!1}}}function _a(e){switch(e){case`paid`:return`Paid`;case`comped`:return`Complimentary`;case`gift`:return`Gift`;default:return`Free`}}function va(e){return e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey}function ya(e,t){window.open(`#${ma(e,t)}`,`_blank`,`noopener`)}function ba({item:e,backPath:t,onClick:n}){return(0,Q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,Q.jsx)($t,{className:`size-8 min-w-8`,email:e.email,name:e.name,src:e.avatar_image}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(v,{className:`block min-w-0 cursor-pointer`,to:ma(e.id,t),onClick:n?t=>{if(va(t)){t.stopPropagation();return}t.preventDefault(),t.stopPropagation(),n(e.id)}:void 0,children:(0,Q.jsx)(`span`,{className:`block truncate text-md font-semibold`,children:e.name||e.email||`Anonymous`})}),e.name&&e.email&&(0,Q.jsx)(`div`,{className:`truncate text-muted-foreground`,"data-testid":`member-email`,children:e.email})]})]})}function xa({status:e,tiers:t}){let n=t?.map(e=>e.name).join(`, `);return(0,Q.jsx)(`div`,{className:`flex min-w-0 justify-start`,children:(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`div`,{className:`truncate`,children:_a(e)}),n&&(0,Q.jsx)(`div`,{className:`truncate text-sm text-muted-foreground`,children:n})]})})}function Sa({emailOpenRate:e}){let t=e!=null;return(0,Q.jsx)(`div`,{className:x(`text-base`,t?`text-foreground`:`text-muted-foreground`),children:t?C(e/100):`N/A`})}function Ca({geolocation:e}){let t=ga(e);return(0,Q.jsx)(`div`,{className:x(`truncate text-base`,t.isKnown?`text-foreground`:`text-muted-foreground`),children:t.text})}function wa({createdAt:e}){return(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{className:`text-base`,children:br.default.utc(e).format(`D MMM YYYY`)}),(0,Q.jsx)(`div`,{className:`text-base text-muted-foreground`,children:br.default.utc(e).fromNow()})]})}function Ta({column:e,member:t,timezone:n}){let r=e.getValue(t,n);return r?(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`div`,{className:`truncate text-base`,title:r.text,children:r.text}),r.subtext&&(0,Q.jsx)(`div`,{className:`truncate text-base text-muted-foreground`,title:r.subtext,children:r.subtext})]}):(0,Q.jsx)(`span`,{className:`text-base text-muted-foreground`,children:`-`})}var Ea=(0,Z.forwardRef)(function({item:e,activeColumns:t,backPath:n,columnStyles:r,showPinnedEdge:i,showEmailOpenRate:a,timezone:o,onClick:s,...c},l){let u=t=>{if(va(t)){ya(e.id,n);return}s(e.id)},d=t=>{t.button===1&&(t.preventDefault(),ya(e.id,n))};return(0,Q.jsxs)(q,{...c,ref:l,className:x(`group cursor-pointer`,c.className),"data-testid":`members-list-item`,onAuxClick:d,onClick:u,children:[(0,Q.jsxs)(J,{className:x(`min-w-0 bg-background px-4 py-3 group-hover:bg-[var(--members-sticky-hover-bg)] max-sm:!w-full max-sm:!min-w-0 lg:sticky lg:left-0 lg:z-20`),children:[(0,Q.jsx)(ba,{backPath:n,item:e,onClick:s}),i&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] group-hover:opacity-0 lg:block`,style:{...ha,background:`linear-gradient(to right, var(--background) 0px, color-mix(in hsl, var(--background) 78%, transparent) 6px, color-mix(in hsl, var(--background) 28%, transparent) 16px, transparent 24px)`}}),(0,Q.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] opacity-0 group-hover:opacity-100 lg:block`,style:{...ha,background:`linear-gradient(to right, var(--members-sticky-hover-bg) 0px, color-mix(in hsl, var(--members-sticky-hover-bg) 78%, transparent) 6px, color-mix(in hsl, var(--members-sticky-hover-bg) 28%, transparent) 16px, transparent 24px)`}})]})]}),(0,Q.jsx)(J,{className:`hidden px-4 py-3 sm:table-cell`,style:r.status,children:(0,Q.jsx)(xa,{status:e.status,tiers:e.tiers})}),a&&(0,Q.jsx)(J,{className:`hidden px-4 py-3 lg:table-cell`,style:r.openRate,children:(0,Q.jsx)(Sa,{emailOpenRate:e.email_open_rate})}),(0,Q.jsx)(J,{className:`hidden px-4 py-3 lg:table-cell`,style:r.location,children:(0,Q.jsx)(Ca,{geolocation:e.geolocation})}),(0,Q.jsx)(J,{className:`hidden px-4 py-3 lg:table-cell`,style:r.created,children:(0,Q.jsx)(wa,{createdAt:e.created_at})}),t.map(t=>(0,Q.jsx)(J,{className:`hidden px-4 py-3 lg:table-cell`,style:r.dynamic,children:(0,Q.jsx)(Ta,{column:t,member:e,timezone:o})},t.key))]})}),Da={left:`100%`,background:`linear-gradient(to right, var(--members-sticky-fade-base) 0px, color-mix(in hsl, var(--members-sticky-fade-base) 78%, transparent) 6px, color-mix(in hsl, var(--members-sticky-fade-base) 28%, transparent) 16px, transparent 24px)`},Oa=({activeColumns:e,columnStyles:t,showEmailOpenRate:n})=>(0,Q.jsxs)(`colgroup`,{children:[(0,Q.jsx)(`col`,{className:`max-sm:!w-full max-sm:!min-w-0 sm:max-lg:!w-auto sm:max-lg:!min-w-0`,style:t.member}),(0,Q.jsx)(`col`,{className:`hidden sm:table-column`,style:t.status}),n&&(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.openRate}),(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.location}),(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.created}),e.map(e=>(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.dynamic},e.key))]}),ka=({activeColumns:e,className:t,columnStyles:n,headerRef:r,memberHeaderRef:i,showEmailOpenRate:a})=>(0,Q.jsx)(ht,{ref:r,className:x(`hidden bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,t),children:(0,Q.jsxs)(q,{children:[(0,Q.jsx)(K,{ref:i,className:`sticky left-0 z-[70] bg-transparent px-4 [--members-sticky-fade-base:var(--background)]`,style:n.member,children:`Member`}),(0,Q.jsx)(K,{className:`bg-transparent px-4`,style:n.status,children:`Status`}),a&&(0,Q.jsx)(K,{className:`bg-transparent px-4`,style:n.openRate,children:`Open rate`}),(0,Q.jsx)(K,{className:`bg-transparent px-4`,style:n.location,children:`Location`}),(0,Q.jsx)(K,{className:`bg-transparent px-4`,style:n.created,children:`Created`}),e.map(e=>(0,Q.jsx)(K,{className:`bg-transparent px-4`,style:n.dynamic,children:e.label},e.key))]})}),Aa=({columnStyle:e,showPinnedEdge:t})=>(0,Q.jsxs)(`div`,{className:`pointer-events-none absolute inset-y-0 left-0 z-[70] overflow-visible bg-transparent [--members-sticky-fade-base:var(--background)]`,style:e,children:[(0,Q.jsxs)(gt,{className:`w-full table-fixed border-collapse`,children:[(0,Q.jsx)(`colgroup`,{children:(0,Q.jsx)(`col`,{style:{width:`100%`}})}),(0,Q.jsx)(ht,{className:`bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,children:(0,Q.jsx)(q,{children:(0,Q.jsx)(K,{className:`bg-transparent px-4`,children:`Member`})})})]}),t&&(0,Q.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px w-[24px]`,style:Da})]}),ja={member:40,status:15,openRate:10,location:17.5,created:17.5},Ma={member:320,status:180,openRate:140,location:180,created:160},Na=17.5,Pa=220;function Fa(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0}function Ia({showEmailOpenRate:e,activeColumnCount:t}){let n=[{key:`member`,width:ja.member},{key:`status`,width:ja.status},...e?[{key:`openRate`,width:ja.openRate}]:[],{key:`location`,width:ja.location},{key:`created`,width:ja.created}],r=Fa(t),i=n.reduce((e,t)=>e+t.width,0),a=100+r*Na,o=Na/a*100,s=n.reduce((e,t)=>{let n=t.width/i*100;return e[t.key]=n/a*100,e},{member:0,status:0,openRate:0,location:0,created:0});return{tableWidthPercentage:a,minTableWidth:n.reduce((e,t)=>e+Ma[t.key],0)+r*Pa,dynamicColumnWidthPercentage:o,baseColumnWidthPercentages:s,baseColumnMinWidths:{member:Ma.member,status:Ma.status,openRate:Ma.openRate,location:Ma.location,created:Ma.created},dynamicColumnMinWidth:Pa}}function La(e){let t=(e,t)=>({width:`${e}%`,minWidth:`${t}px`});return{tableStyle:{"--members-table-width":`${e.tableWidthPercentage}%`,"--members-table-min-width":`${e.minTableWidth}px`},columnStyles:{member:t(e.baseColumnWidthPercentages.member,e.baseColumnMinWidths.member),status:t(e.baseColumnWidthPercentages.status,e.baseColumnMinWidths.status),openRate:t(e.baseColumnWidthPercentages.openRate,e.baseColumnMinWidths.openRate),location:t(e.baseColumnWidthPercentages.location,e.baseColumnMinWidths.location),created:t(e.baseColumnWidthPercentages.created,e.baseColumnMinWidths.created),dynamic:t(e.dynamicColumnWidthPercentage,e.dynamicColumnMinWidth)}}}var Ra=({height:e})=>(0,Q.jsx)(`tr`,{"aria-hidden":`true`,style:{height:e},children:(0,Q.jsx)(`td`,{colSpan:999})}),za=(0,Z.forwardRef)(function(e,t){return(0,Q.jsx)(q,{ref:t,...e,"aria-hidden":`true`,children:(0,Q.jsx)(J,{className:`h-[72px] px-4 py-3`,colSpan:999,children:(0,Q.jsx)(`div`,{className:`h-full animate-pulse rounded-md bg-muted`,"data-testid":`loading-placeholder`})})})});function Ba({items:e,totalItems:t,backPath:n,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,isLoading:o,showEmailOpenRate:s=!0,activeColumns:c,timezone:l,pageHeaderRef:u,onRowClick:d}){let f=(0,Z.useRef)(null),p=(0,Z.useRef)(null),m=(0,Z.useRef)(null),h=(0,Z.useRef)(null),g=(0,Z.useRef)(null),[_,v]=(0,Z.useState)(0),[y,x]=(0,Z.useState)(0),[S,C]=(0,Z.useState)(!1),{visibleItemCount:w,canLoadMore:T,loadMore:E}=Fn(t),D=(0,Z.useMemo)(()=>Ia({showEmailOpenRate:s,activeColumnCount:c.length}),[c.length,s]),{tableStyle:O,columnStyles:k}=(0,Z.useMemo)(()=>La(D),[D]);Pn({parentRef:f,isLoading:o}),(0,Z.useEffect)(()=>{let e=g.current;if(!e)return;let t=()=>{let t=e.scrollLeft;C(t>0),h.current&&(h.current.scrollLeft=t)};return t(),e.addEventListener(`scroll`,t,{passive:!0}),window.addEventListener(`resize`,t),()=>{e.removeEventListener(`scroll`,t),window.removeEventListener(`resize`,t)}},[c.length,e.length,s]),(0,Z.useEffect)(()=>{let e=u?.current,t=p.current,n=m.current;if(!e||!t||!n){v(0),x(0);return}let r=e.style.paddingBottom,i=e.style.marginBottom,a=parseFloat(getComputedStyle(e).paddingBottom)||0,o=parseFloat(getComputedStyle(e).marginBottom)||0,s=()=>{r?e.style.setProperty(`padding-bottom`,r):e.style.removeProperty(`padding-bottom`),i?e.style.setProperty(`margin-bottom`,i):e.style.removeProperty(`margin-bottom`)},c=()=>{if(!window.matchMedia(`(min-width: 1024px)`).matches){s(),v(0),x(0);return}let r=t.getBoundingClientRect().height,i=n.getBoundingClientRect().width;e.style.setProperty(`padding-bottom`,`${a+r}px`,`important`),e.style.setProperty(`margin-bottom`,`${o-r}px`,`important`);let c=e.getBoundingClientRect().height;v(i),x(Math.max(c-r,0))};c();let l=new ResizeObserver(()=>{c()});return l.observe(e),l.observe(t),l.observe(n),window.addEventListener(`resize`,c),()=>{s(),l.disconnect(),window.removeEventListener(`resize`,c)}},[c.length,u,s]);let{visibleItems:A,spaceBefore:j,spaceAfter:M}=Nn({items:e,totalItems:w,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,parentRef:f,estimateSize:()=>72}),N=b(),P=e=>{d?d(e):N(ma(e,n))};return(0,Q.jsxs)(`div`,{ref:f,className:`w-full min-w-0`,"data-testid":`members-list-scroll-root`,children:[(0,Q.jsx)(`div`,{className:`sticky z-[50] hidden overflow-visible bg-transparent lg:block`,style:{top:y},children:(0,Q.jsxs)(`div`,{className:`relative`,children:[(0,Q.jsx)(Aa,{columnStyle:_>0?{width:_}:k.member,showPinnedEdge:S}),(0,Q.jsx)(`div`,{ref:h,className:`w-full overflow-hidden`,style:_>0?{clipPath:`inset(0 0 0 ${_}px)`}:void 0,children:(0,Q.jsxs)(gt,{"aria-hidden":`true`,className:`w-full border-collapse lg:w-[var(--members-table-width)] lg:min-w-[var(--members-table-min-width)] lg:table-fixed`,style:O,children:[(0,Q.jsx)(Oa,{activeColumns:c,columnStyles:k,showEmailOpenRate:s}),(0,Q.jsx)(ka,{activeColumns:c,columnStyles:k,headerRef:p,memberHeaderRef:m,showEmailOpenRate:s})]})})]})}),(0,Q.jsx)(`div`,{ref:g,className:`w-full overflow-x-auto overflow-y-visible`,children:(0,Q.jsxs)(gt,{className:`w-full border-collapse max-sm:table-fixed sm:max-lg:table-auto lg:w-[var(--members-table-width)] lg:min-w-[var(--members-table-min-width)] lg:table-fixed`,"data-testid":`members-list`,style:O,children:[(0,Q.jsx)(Oa,{activeColumns:c,columnStyles:k,showEmailOpenRate:s}),(0,Q.jsx)(ka,{activeColumns:c,className:`lg:h-0 lg:overflow-hidden lg:[&_th]:pointer-events-none lg:[&_th]:h-0 lg:[&_th]:border-0 lg:[&_th]:p-0 lg:[&_th]:text-[0px] lg:[&_th]:leading-none lg:[&_th]:opacity-0 lg:[&_tr]:h-0 lg:[&_tr]:border-0`,columnStyles:k,showEmailOpenRate:s}),(0,Q.jsxs)(mt,{children:[(0,Q.jsx)(Ra,{height:j}),A.map(({key:t,virtualItem:r,item:i,props:a})=>r.index>e.length-1?(0,Q.jsx)(za,{...a},t):(0,Q.jsx)(Ea,{...a,activeColumns:c,backPath:n,columnStyles:k,item:i,showEmailOpenRate:s,showPinnedEdge:S,timezone:l,onClick:P},t)),(0,Q.jsx)(Ra,{height:M})]})]})}),T&&(0,Q.jsx)(In,{isLoading:i,onClick:E})]})}function Va({count:e,hasResolvedCount:t,nql:n,search:r}){let i=b(),{data:a}=c(),{mutateAsync:o,isPending:s}=_t(),[l,u]=(0,Z.useState)(null),d=Yr(n),f=!r&&(!n||d),m=(0,Z.useMemo)(()=>Zr(a?.accessibility),[a?.accessibility]),h=l??m.dismissedCount??0,g=!d,_=f&&(d||e>h);return(0,Z.useEffect)(()=>{let n=m.dismissedCount;!a||l!==null||s||n===void 0||!t||e>=n||(u(e),o($r(a,e,m.dismissedAt??new Date().toISOString())).then(()=>{u(null)}).catch(e=>{u(null),console.log(`Unable to update multiple active subscriptions banner dismissed count`,e)}))},[e,a,o,t,s,l,m.dismissedAt,m.dismissedCount]),{canDismiss:g,count:e,handleDismiss:(0,Z.useCallback)(()=>{if(!a||s)return;let t=l;u(e),o($r(a,e,new Date().toISOString())).then(()=>{u(null)}).catch(()=>{u(t),p.error(`Unable to dismiss notification. Please try again.`)})},[e,a,o,s,l]),handleViewMembers:(0,Z.useCallback)(()=>{i(Zn({filter:Kr}))},[i]),shouldShow:_}}var Ha=({count:e,hasResolvedCount:t,nql:n,search:r})=>{let i=Va({count:e,hasResolvedCount:t,nql:n,search:r});return i.shouldShow?(0,Q.jsx)(Dt,{role:`status`,variant:`warning`,...i.canDismiss?{dismissible:!0,onDismiss:i.handleDismiss}:{dismissible:!1},children:(0,Q.jsxs)(`div`,{className:`flex flex-col items-baseline gap-3 pr-8 sm:flex-row`,children:[`We found `,S(i.count),` `,i.count===1?`member`:`members`,` with more than one active paid subscription.`,` `,(0,Q.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[i.canDismiss&&(0,Q.jsx)(`button`,{className:`nowrap font-semibold !underline`,type:`button`,onClick:i.handleViewMembers,children:`View members`}),(0,Q.jsx)(`a`,{className:`nowrap font-semibold underline`,href:`https://ghost.org/help/duplicate-subscription-warning/`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]})}):null},Ua=[`subscriptions.plan_interval`,`subscriptions.status`,`subscriptions.start_date`,`subscriptions.current_period_end`,`conversion`,`offer_redemptions`,Gr];function Wa(e,t){return t&&e.length===0?!1:!e.some(e=>Ua.includes(e.field))}function Ga({isFetching:e,isFetchingNextPage:t}){return e&&!t}var Ka=_n(mi,`date`);function qa(e,t){return sn(t,e.field,`UTC`)?.definition.operators.includes(e.operator)??!1}function Ja(e){return Array.isArray(e.$and)?{operator:`$and`,children:e.$and}:Array.isArray(e.$or)?{operator:`$or`,children:e.$or}:null}function Ya(e){if(typeof e.subscribed==`boolean`)return{field:`subscribed`,operator:`is`,values:[e.subscribed?`subscribed`:`unsubscribed`]};if(typeof e.email_disabled==`number`){if(e.email_disabled===1)return{field:`subscribed`,operator:`is`,values:[`email-disabled`]};if(e.email_disabled===0)return{field:`subscribed`,operator:`is-not`,values:[`email-disabled`]}}let t=Ja(e);if(!t||t.children.length!==2)return null;let n,r;for(let e of t.children)typeof e.subscribed==`boolean`&&(n=e.subscribed),typeof e.email_disabled==`number`&&(r=e.email_disabled);return t.operator===`$and`&&r===0&&n!==void 0?{field:`subscribed`,operator:`is`,values:[n?`subscribed`:`unsubscribed`]}:t.operator===`$or`&&r===1&&n!==void 0?{field:`subscribed`,operator:`is-not`,values:[n?`unsubscribed`:`subscribed`]}:null}function Xa(e){let t=Ja(e);if(!t||t.children.length!==2)return null;let n,r=!1,i=!1;for(let e of t.children){let t=e[`newsletters.slug`];typeof t==`string`&&(n=t,r=!1),t&&typeof t==`object`&&!Array.isArray(t)&&typeof t.$ne==`string`&&(n=t.$ne,r=!0),typeof e.email_disabled==`number`&&(i=!0)}return!n||!i?null:{field:`newsletters.${n}`,operator:`is`,values:[r?`unsubscribed`:`subscribed`]}}function Za(e){let t=Ja(e);if(!t||t.operator!==`$and`||t.children.length!==2)return null;let n,r;for(let e of t.children)typeof e[`feedback.post_id`]==`string`&&(n=e[`feedback.post_id`]),typeof e[`feedback.score`]==`number`&&(r=e[`feedback.score`]);return!n||r!==0&&r!==1?null:{field:`newsletter_feedback`,operator:String(r),values:[n]}}function Qa(e){if(!e.endsWith(`$`))return!1;let t=0;for(let n=e.length-2;n>=0&&e[n]===`\\`;--n)t+=1;return t%2==0}function $a(e,t){let n=e.source,r=n.startsWith(`^`),i=Qa(n),a,o;r&&!i?(a=`starts-with`,o=n.slice(1)):i&&!r?(a=`ends-with`,o=n.slice(0,-1)):(a=`contains`,o=n);let s=o.replace(/\\([\\.^$|?*+()[\]{}/-])/g,`$1`);return{operator:t?`does-not-contain`:a,value:s}}function eo(e){if(typeof e==`string`)return{operator:`is`,value:e};if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e;if(typeof t.$ne==`string`)return{operator:`is-not`,value:t.$ne};if(t.$regex instanceof RegExp)return $a(t.$regex,!1);if(t.$not instanceof RegExp)return $a(t.$not,!0)}return null}function to(e){let t=Ja(e);if(!t){let t=e[`custom_fields.key`];return typeof t==`string`?{field:`custom_fields.${t}`,operator:`is-set`,values:[``,``]}:t&&typeof t==`object`&&!Array.isArray(t)&&typeof t.$ne==`string`?{field:`custom_fields.${t.$ne}`,operator:`is-not-set`,values:[``,``]}:null}if(t.operator!==`$and`||t.children.length!==2)return null;let n,r,i;for(let e of t.children){typeof e[`custom_fields.key`]==`string`&&(n=e[`custom_fields.key`]);for(let t of Object.keys(e))if(t===`custom_fields.value`)r={subfield:``,raw:e[t]};else if(t.startsWith(`custom_fields.value.`))r={subfield:t.slice(20),raw:e[t]};else if(t===`custom_fields.path`){let n=e[t];typeof n==`string`?i={subfield:n,negated:!1}:n&&typeof n==`object`&&!Array.isArray(n)&&typeof n.$ne==`string`&&(i={subfield:n.$ne,negated:!0})}}if(!n)return null;if(i)return{field:`custom_fields.${n}`,operator:i.negated?`is-not-set`:`is-set`,values:[i.subfield,``]};if(!r)return null;let a=eo(r.raw);return a?{field:`custom_fields.${n}`,operator:a.operator,values:[r.subfield,a.value]}:null}var no=[Ya,Xa,Za,to];function ro(e,t){for(let t of no){let n=t(e);if(n)return[n]}let n=Ja(e);return n?.operator===`$and`?n.children.flatMap(e=>ro(e,t)):mn([e],mi,t)}function io(e,t){let n=an(e??``);return n?vn(ro(n,t)):[]}function ao(e){let t=an(e??``);return t?dn(t,Ka):!1}function oo(e,t){return hn(e,mi,t)}function so(e,t,n=!t){return!!e&&n&&!t&&ao(e)}function co(e,t){return e.filter(e=>qa(e,t))}function lo({baseSearchParams:e,filters:t,search:n,timezone:r,fields:i}){let a=new URLSearchParams(e),o=oo(co(t,i),r);return a.delete(`filter`),a.delete(`search`),o&&a.set(`filter`,o),n&&a.set(`search`,n),a}function uo(e){let t=(0,Z.useMemo)(()=>hi(),[]),[n,r]=_(),i=(0,Z.useRef)(null),a=(0,Z.useMemo)(()=>n.get(`filter`)??void 0,[n]),o=(0,Z.useMemo)(()=>n.toString(),[n]),s=(0,Z.useMemo)(()=>co(io(a,e),t),[a,e,t]),[c,l]=(0,Z.useState)(s),u=(0,Z.useMemo)(()=>n.get(`search`)??``,[n]),d=(0,Z.useMemo)(()=>oo(co(c,t),e),[c,e,t]);return(0,Z.useEffect)(()=>{o!==i.current&&(l(s),i.current=o)},[o,s]),(0,Z.useEffect)(()=>{if(i.current!==null&&o!==i.current)return;let a=lo({baseSearchParams:n,filters:c,search:u,timezone:e,fields:t}),s=a.toString();s!==o&&(i.current=s,r(a,{replace:!0}))},[o,c,u,n,r,e,t]),{filters:c,nql:d,search:u,setFilters:(0,Z.useCallback)((a,o={})=>{let s=o.replace??!0,c=lo({baseSearchParams:n,filters:a,search:u,timezone:e,fields:t});l(a),i.current=c.toString(),r(c,{replace:s})},[u,n,r,e,t]),setSearch:(0,Z.useCallback)((a,o={})=>{let s=o.replace??!0,l=lo({baseSearchParams:n,filters:c,search:a,timezone:e,fields:t});i.current=l.toString(),r(l,{replace:s})},[c,n,r,e,t]),clearFilters:(0,Z.useCallback)(({replace:a=!0}={})=>{let o=lo({baseSearchParams:n,filters:[],search:u,timezone:e,fields:t});l([]),i.current=o.toString(),r(o,{replace:a})},[u,n,r,e,t]),clearAll:(0,Z.useCallback)(({replace:a=!0}={})=>{let o=lo({baseSearchParams:n,filters:[],search:``,timezone:e,fields:t});l([]),i.current=o.toString(),r(o,{replace:a})},[n,r,e,t]),hasFilterOrSearch:!!d||u.length>0}}function fo({enabled:e}){let{data:t}=Bt({searchParams:{filter:Kr,limit:`1`,fields:`id`,order:`id`},defaultErrorHandler:!1,enabled:e,refetchOnMount:`always`,staleTime:0});return{count:t?.meta?.pagination?.total??0,hasResolvedCount:t!==void 0}}var po=250,mo=6,ho=({emailAnalyticsEnabled:e,hasStripeEnabled:t,membershipsEnabled:n,timezone:i})=>{let a=(0,Z.useRef)(null),o=(0,Z.useCallback)(e=>{a.current=e?.closest(`[data-list-page="header"]`)},[]),{filters:s,nql:c,search:l,setFilters:u,setSearch:d,hasFilterOrSearch:f,clearAll:p}=uo(i),m=y(),h=Bi(),g=Ui(h,c),[_,v]=(0,Z.useState)(!1),[b,C]=(0,Z.useState)(!1),[w,D]=(0,Z.useState)(l),O=Pt(e=>{d(e)},po),{count:k,hasResolvedCount:A}=fo({enabled:t}),j=Xt(`membersCustomFields`),M=(0,Z.useMemo)(()=>s.some(e=>e.field.startsWith(ui)),[s]),{data:N}=Rn({enabled:j&&M}),P=N?.members_custom_fields,ee=(0,Z.useMemo)(()=>_i(s,{customFields:P}),[s,P]),F=(0,Z.useMemo)(()=>Wa(s,c),[s,c]),{data:I,isError:L,isFetching:R,isFetchingNextPage:z,refetch:te,fetchNextPage:B,hasNextPage:ne}=Gt({searchParams:(0,Z.useMemo)(()=>yi({filters:s,nql:c,search:l}),[s,c,l]),placeholderData:r}),V=Ga({isFetching:R,isFetchingNextPage:z}),H=I?.meta?.pagination?.total??0,re=s.length>0,ie=_,ae=re,U=f||H>0,oe=!f&&!V&&!L&&H<mo;(0,Z.useEffect)(()=>{D(l),O.cancel()},[l,O]);let se=e=>{D(e),O(e)};return(0,Q.jsx)(T,{className:`size-full`,children:(0,Q.jsx)(E,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Q.jsxs)(Dn,{"data-testid":`members-page`,children:[(0,Q.jsx)(Dn.Header,{className:`py-4 sidebar:py-5`,children:(0,Q.jsxs)(`div`,{ref:o,className:`flex flex-col gap-4 sidebar:gap-6`,children:[(0,Q.jsxs)(Y,{blurredBackground:!1,sticky:!1,children:[(0,Q.jsx)(Y.Left,{children:(0,Q.jsxs)(Y.Title,{children:[`Members`,` `,!V&&H>0&&(0,Q.jsx)(Y.Count,{className:`hidden sm:inline`,children:S(H)})]})}),(0,Q.jsx)(Y.Actions,{children:(0,Q.jsxs)(Y.ActionGroup,{className:`ml-auto flex-wrap justify-end sm:ml-0 sm:flex-nowrap`,children:[U&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`hidden lg:flex`,children:(0,Q.jsx)(ua,{search:w,onSearchChange:se})}),(0,Q.jsx)(W,{"aria-label":_?`Hide member search`:`Show member search`,className:x(`lg:hidden`,_&&`bg-secondary hover:bg-secondary`),variant:`outline`,onClick:()=>{if(_){v(!1),C(!1);return}C(!0),v(!0)},children:(0,Q.jsx)(ye,{className:`size-4`})}),!re&&(0,Q.jsx)(la,{activeView:g,filters:s,iconOnly:!0,multipleActiveSubscriptionsCount:k,nql:c,savedViews:h,onFiltersChange:u})]}),(0,Q.jsx)(Ti,{canBulkDelete:F,hasFilterOrSearch:f,memberCount:H,nql:c,search:l,showMenu:U,showNewMember:U,onImportComplete:()=>{te()}})]})})]}),U&&(ae||ie)&&(0,Q.jsxs)(nn,{className:x(`flex-col gap-4 lg:flex-row lg:items-center sidebar:gap-6 lg:gap-6`,!ae&&`lg:hidden`),children:[ie&&(0,Q.jsx)(`div`,{className:`w-full lg:hidden`,children:(0,Q.jsx)(ua,{ariaLabel:`Search members mobile`,autoFocus:b,search:w,onSearchChange:se})}),ae&&(0,Q.jsx)(la,{activeView:g,filters:s,multipleActiveSubscriptionsCount:k,nql:c,savedViews:h,onFiltersChange:u})]}),t&&(0,Q.jsx)(Ha,{count:k,hasResolvedCount:A,nql:c,search:l})]})}),(0,Q.jsxs)(Dn.Body,{children:[V?(0,Q.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Q.jsx)(it,{size:`lg`})}):L?(0,Q.jsxs)(`div`,{className:`mb-16 flex flex-1 flex-col items-center justify-center`,children:[(0,Q.jsx)(`h2`,{className:`mb-2 text-xl font-medium`,children:`Error loading members`}),(0,Q.jsx)(`p`,{className:`mb-4 text-muted-foreground`,children:`Please reload the page to try again`}),(0,Q.jsx)(W,{onClick:()=>window.location.reload(),children:`Reload page`})]}):I?.members.length?(0,Q.jsx)(Ba,{activeColumns:ee,backPath:`${m.pathname}${m.search}`,fetchNextPage:()=>void B(),hasNextPage:ne,isFetchingNextPage:z,isLoading:R&&!z,items:I.members,pageHeaderRef:a,showEmailOpenRate:e,timezone:i,totalItems:H}):f?(0,Q.jsx)(`div`,{className:`flex flex-1 flex-col items-center justify-center`,children:(0,Q.jsx)(ot,{actions:(0,Q.jsx)(W,{variant:`outline`,onClick:()=>{O.cancel(),D(``),p({replace:!1})},children:`Show all members`}),title:`No matching members found.`,children:(0,Q.jsx)(me,{})})}):(0,Q.jsx)(Ei,{membershipsEnabled:n,onMemberCreated:async()=>{await te()}}),oe&&(0,Q.jsx)(`div`,{className:x(I?.members.length&&`mt-8`),children:(0,Q.jsx)(pa,{})})]})]})})})},go=()=>{let[e]=_(),{data:t,isLoading:n}=Nt({}),{data:r,isLoading:i}=g(),a=so(e.get(`filter`)??void 0,!!t?.settings,n);if(n||i||!t?.settings||!r?.config||a)return(0,Q.jsx)(T,{className:`size-full`,children:(0,Q.jsx)(E,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Q.jsxs)(Dn,{children:[(0,Q.jsx)(Dn.Header,{className:`py-4 sidebar:py-6`,children:(0,Q.jsx)(Y,{blurredBackground:!1,sticky:!1,children:(0,Q.jsx)(Y.Left,{children:(0,Q.jsx)(Y.Title,{children:`Members`})})})}),(0,Q.jsx)(Dn.Body,{children:(0,Q.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Q.jsx)(it,{size:`lg`})})})]})})});let o=En(t.settings),s=Qt(t.settings,`members_signup_access`)!==`none`,c=r.config.emailAnalytics===!0,l=zt(t.settings,r.config);return(0,Q.jsx)(ho,{emailAnalyticsEnabled:c,hasStripeEnabled:l,membershipsEnabled:s,timezone:o})};export{go as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{p as r}from"./hooks-CuEZV2-q.js";import{x as i}from"./dist-Cb5RSHSg.js";import{t as a}from"./inline-Cw-gigDW.js";import{D as o,Zn as s,dt as c,t as l,v as u}from"./button-BshWPHvn.js";import{i as d,n as f,r as p,t as m}from"./tabs-CGisSbWq.js";import{t as h}from"./switch-C9djUIMO.js";import{t as g}from"./input-UHrKuvBT.js";import{o as _,t as v}from"./use-settings-navigation-BBzro2-V.js";import{i as y,o as b,t as x}from"./field-LmNk7wZh.js";import{i as S,n as C,t as w}from"./use-url-input-WnIqckzS.js";import{Hn as T,Kn as E,Qn as D,Sr as ee,Wn as O,br as te,t as ne}from"./index-CDP9tIOk.js";import{a as k,c as A,i as j,n as M,o as N,r as P,s as F,t as I}from"./images-C0XvUYMb.js";import{t as re}from"./validator-Cr0sMKuW.js";import{n as ie}from"./global-data-context-gAMDH9u1.js";import{t as ae}from"./use-setting-group-DQxV42-O.js";import{t as L}from"./format-url-Ju4k5CIm.js";var oe=e(re(),1),R=e(t(),1),z=[`public`,`members`,`paid`,`public_free`,`public_paid`,`public_only`,`free_members`,`none`],B=e=>!!(e&&!e.match(/^\s*$/)),V=e=>!!(B(e.label)||e.url!==`/`||B(e.icon)),H=e=>({...e,icon:e.icon||``,visibility:e.visibility||`public`,errors:{}}),U=({url:e,label:t,icon:n,visibility:r})=>({url:e.trim(),label:t.trim(),...n?.trim()?{icon:n.trim()}:{},...r&&r!==`public`?{visibility:r}:{}}),W=({items:e,setItems:t})=>{let n=C({items:(0,R.useMemo)(()=>e.map(H),[e]),setItems:(0,R.useCallback)(e=>{t(e.map(U))},[t]),blank:{url:`/`,label:``,icon:``,visibility:`public`,errors:{}},canAddNewItem:V}),r=new RegExp(/^(\/|#|[a-zA-Z0-9-]+:)/),i=e=>{let t={},n=B(e.label),i=B(e.icon);return!n&&!i&&(t.label=`You must specify a label or icon`),(!e.url||e.url.match(/\s/)||!oe.default.isURL(e.url,{require_protocol:!0})&&!e.url.match(r))&&(t.url=`You must specify a valid URL or relative path`),e.visibility&&!z.includes(e.visibility)&&(t.visibility=`You must specify a valid visibility`),t},a=(e,t)=>{let n={...e.errors};return B(t.icon)&&(n.icon=void 0,n.label=void 0),{...e,...t,errors:n}},o=(e,t)=>{let r=n.items.find(t=>t.id===e);n.updateItem(e,a(r.item,t))},s=()=>{let e=i(n.newItem);Object.values(e).some(e=>e)?n.setNewItem({...n.newItem,errors:e}):n.addItem()},c=e=>{n.removeItem(e)},l=(e,t)=>{n.moveItem(e,t)},u=(e,t)=>{if(e===`new`)n.setNewItem({...n.newItem,errors:{...n.newItem.errors,[t]:void 0}});else{let r=n.items.find(t=>t.id===e).item;n.updateItem(e,{...r,errors:{...r.errors,[t]:void 0}})}};return{items:n.items.map(({item:e,id:t})=>({...e,id:t})),updateItem:o,addItem:s,removeItem:c,moveItem:l,newItem:{...n.newItem,id:`new`},setNewItem:e=>n.setNewItem(a(n.newItem,e)),clearError:u,validate:()=>{let e=!0;if(n.items.forEach(({item:t,id:r})=>{let a=i(t);Object.values(a).some(e=>e)&&(e=!1,n.updateItem(r,{...t,errors:a}))}),V(n.newItem)){let t=i(n.newItem);Object.values(t).some(e=>e)&&(e=!1,n.setNewItem({...n.newItem,errors:t}))}return e}}},G=n(),K=({idPrefix:e,item:t,clearError:n,updateItem:r,uploadIcon:i})=>(0,G.jsx)(P,{className:`size-[38px]`,children:t.icon?(0,G.jsxs)(A,{children:[(0,G.jsx)(F,{alt:``,className:`size-[38px] rounded-lg object-contain p-2.5`,src:t.icon}),(0,G.jsx)(k,{className:`inset-0 flex items-center justify-center`,children:(0,G.jsx)(j,{"aria-label":`Remove navigation icon`,className:`size-full rounded-lg bg-black/75 p-0 text-white hover:bg-black/90 hover:text-white`,onClick:()=>{n?.(`icon`),r?.({icon:``})},children:(0,G.jsx)(o,{className:`size-4`})})})]}):(0,G.jsx)(N,{accept:{"image/*":[]},"aria-label":`Upload navigation icon`,className:`size-[38px] rounded-lg border-0 bg-muted p-0 text-muted-foreground hover:bg-muted hover:text-foreground`,id:`${e}-icon-${t.id}`,inputAriaLabel:`Upload navigation icon`,onDropAccepted:([e])=>void i?.(e).then(e=>{e&&r?.({icon:e})}),children:(0,G.jsx)(u,{"aria-hidden":`true`,className:`size-4`})})}),q={public:`Everyone`,members:`Members only`,paid:`Paid-members only`,public_free:`Public + free`,public_paid:`Public + paid`,public_only:`Public only`,free_members:`Free only`,none:`Hidden`},se=z.map(e=>({value:e,label:q[e]})),ce=[{key:`public-visitors`,label:`Public visitors`},{key:`free-members`,label:`Free members`},{key:`paid-members`,label:`Paid members`}],le={public:{"public-visitors":!0,"free-members":!0,"paid-members":!0},members:{"public-visitors":!1,"free-members":!0,"paid-members":!0},paid:{"public-visitors":!1,"free-members":!1,"paid-members":!0},public_free:{"public-visitors":!0,"free-members":!0,"paid-members":!1},public_paid:{"public-visitors":!0,"free-members":!1,"paid-members":!0},public_only:{"public-visitors":!0,"free-members":!1,"paid-members":!1},free_members:{"public-visitors":!1,"free-members":!0,"paid-members":!1},none:{"public-visitors":!1,"free-members":!1,"paid-members":!1}},ue=[`paid`,`public_paid`],de={"000":`none`,"001":`paid`,"010":`free_members`,"011":`members`,100:`public_only`,101:`public_paid`,110:`public_free`,111:`public`},fe=e=>se.some(t=>t.value===e)?e:`public`,pe=e=>q[e],me=(e,t)=>({...le[e],...t?{}:{"paid-members":!1}}),J=e=>de[[e[`public-visitors`],e[`free-members`],e[`paid-members`]].map(e=>e?`1`:`0`).join(``)],he=({idPrefix:e,item:t,clearError:n,updateItem:r,showPaidVisibility:i})=>{let a=fe(t.visibility),o=pe(a),c=`${e}-visibility-${t.id}`,l=`${c}-error`,u=me(a,i),d=e=>{n?.(`visibility`),r?.({visibility:e})},f=(e,t)=>{let n={...u,[e]:t};i||(n[`paid-members`]=n[`free-members`]);let r=J(n);!i&&ue.includes(r)||d(r)};return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`label`,{className:`sr-only`,id:c,children:`Visibility`}),(0,G.jsxs)(T,{children:[(0,G.jsx)(D,{asChild:!0,children:(0,G.jsxs)(`button`,{"aria-describedby":t.errors.visibility?l:void 0,"aria-invalid":!!t.errors.visibility,"aria-labelledby":c,className:`flex h-[38px] w-full items-center justify-between rounded-lg border-transparent bg-grey-100 px-3 text-md text-black hover:bg-grey-100 focus-visible:ring-2 focus-visible:ring-focus-ring focus-visible:outline-hidden dark:bg-grey-900 dark:text-white dark:hover:bg-grey-900`,"data-testid":`navigation-item-visibility`,type:`button`,children:[(0,G.jsx)(`span`,{className:`truncate`,children:o}),(0,G.jsx)(s,{"aria-hidden":`true`,className:`size-4 opacity-80`})]})}),(0,G.jsx)(O,{align:`end`,className:`z-[300] w-[190px] rounded-lg p-2`,sideOffset:6,children:(0,G.jsx)(`div`,{className:`flex flex-col`,children:ce.filter(e=>e.key!==`paid-members`||i).map(e=>{let t=u[e.key];return(0,G.jsxs)(E,{className:`flex cursor-pointer items-center justify-between gap-3 rounded-md px-2 py-1.5 text-sm text-grey-900 dark:text-grey-100`,onSelect:n=>{n.preventDefault(),f(e.key,!t)},children:[(0,G.jsx)(`span`,{children:e.label}),(0,G.jsx)(h,{"aria-label":e.label,checked:t,size:`sm`,onCheckedChange:t=>f(e.key,t),onClick:e=>e.stopPropagation()})]},e.key)})})})]}),t.errors.visibility&&(0,G.jsx)(`div`,{className:`mt-1 text-xs text-red`,id:l,role:`alert`,children:t.errors.visibility})]})},ge=`flex w-full items-start gap-3 [--control-height:38px]`,Y={icon:`w-[38px] shrink-0`,label:`min-w-0 flex-[0.75]`,url:`min-w-0 flex-[1.25]`,visibility:`w-[190px] shrink-0`,action:`w-10 shrink-0`},X=`pt-1`,Z=({baseUrl:e,idPrefix:t,item:n,updateItem:r,uploadIcon:o,addItem:s,clearError:c,labelPlaceholder:l,unstyled:u,textFieldClasses:d,action:f,showIcon:p,showPaidVisibility:m,showVisibility:h,className:_,...v})=>{let S=w({baseUrl:e,nullable:!0,value:n.url,onChange:e=>r?.({url:e||``})});return(0,G.jsxs)(`div`,{className:i(ge,_),"data-testid":`navigation-item-editor`,...v,children:[p&&(0,G.jsx)(`div`,{className:i(`flex flex-col`,Y.icon,`pt-1`),children:(0,G.jsx)(K,{clearError:c,idPrefix:t,item:n,updateItem:r,uploadIcon:o})}),(0,G.jsx)(`div`,{className:i(`flex`,Y.label,X),children:(0,G.jsxs)(x,{className:`grow`,"data-invalid":!!n.errors.label||void 0,children:[(0,G.jsx)(b,{className:`sr-only`,htmlFor:`navigation-label-${n.id}`,children:`Label`}),(0,G.jsx)(g,{"aria-invalid":!!n.errors.label||void 0,className:i(u&&`border-0 bg-transparent shadow-none focus-visible:ring-0`,d),id:`navigation-label-${n.id}`,placeholder:l,value:n.label,onChange:e=>r?.({label:e.target.value}),onKeyDown:e=>{r?.({label:e.target.value}),e.key===`Enter`&&(e.preventDefault(),s?.()),n.errors.label&&c?.(`label`)}}),n.errors.label&&(0,G.jsx)(y,{children:n.errors.label})]})}),(0,G.jsx)(`div`,{className:i(`flex`,Y.url,X),children:(0,G.jsxs)(x,{className:`grow`,"data-invalid":!!n.errors.url||void 0,children:[(0,G.jsx)(b,{className:`sr-only`,htmlFor:`navigation-url-${n.id}`,children:`URL`}),(0,G.jsx)(g,{"aria-invalid":!!n.errors.url||void 0,className:d,id:`navigation-url-${n.id}`,value:S.displayValue,onBlur:S.commitValue,onChange:e=>S.setDisplayValue(e.target.value),onFocus:S.handleFocus,onKeyDown:t=>{S.handleKeyDown(t);let n=L(t.target.value,e,!0);r?.({url:n.save||``})},onKeyUp:t=>{if(t.key===`Enter`){t.preventDefault();let n=L(t.target.value,e,!0);r?.({url:n.save||``}),s?.()}n.errors.url&&c?.(`url`)}}),n.errors.url&&(0,G.jsx)(y,{children:n.errors.url})]})}),h&&(0,G.jsx)(`div`,{className:i(`flex flex-col`,Y.visibility,`pt-1`),children:(0,G.jsx)(he,{clearError:c,idPrefix:t,item:n,showPaidVisibility:m,updateItem:r})}),f&&(0,G.jsx)(a,{align:`center`,className:i(`h-[calc(var(--control-height)+0.25rem)] shrink-0 pt-1`,Y.action),children:f})]})},Q=`text-xs font-semibold text-muted-foreground`,$=({baseUrl:e,idPrefix:t,navigation:n,showIcon:r,showPaidVisibility:i,showVisibility:s,uploadIcon:u})=>(0,G.jsxs)(`div`,{className:`w-full pt-2`,children:[(r||s)&&(0,G.jsxs)(`div`,{className:`-mb-1 flex w-full items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`h-7 w-4 shrink-0`}),(0,G.jsxs)(`div`,{className:`flex w-full items-start gap-3 [--control-height:38px]`,children:[r&&(0,G.jsx)(`div`,{className:`${Y.icon} ${Q}`,children:`Icon`}),(0,G.jsx)(`div`,{className:`${Y.label} ${Q}`,children:`Label`}),(0,G.jsx)(`div`,{className:`${Y.url} ${Q}`,children:`URL`}),s&&(0,G.jsx)(`div`,{className:`${Y.visibility} ${Q}`,children:`Visibility`}),(0,G.jsx)(`div`,{className:Y.action})]})]}),(0,G.jsx)(S,{dragHandleClass:`translate-y-0.5`,getDragHandleLabel:e=>`Reorder ${e.label||`navigation item`}`,items:n.items,itemSeparator:!1,renderItem:a=>(0,G.jsx)(Z,{action:(0,G.jsx)(l,{"aria-label":`Delete navigation item`,size:`icon`,type:`button`,variant:`ghost`,onClick:()=>n.removeItem(a.id),children:(0,G.jsx)(o,{})}),baseUrl:e,clearError:e=>n.clearError(a.id,e),idPrefix:t,item:a,showIcon:r,showPaidVisibility:i,showVisibility:s,updateItem:e=>n.updateItem(a.id,e),uploadIcon:u}),onMove:n.moveItem}),(0,G.jsxs)(a,{align:`start`,className:`mt-5 border-t pt-5`,gap:`md`,children:[(0,G.jsx)(a,{align:`center`,className:`h-[calc(var(--control-height)+0.5rem)] shrink-0 translate-y-0.5 pt-2`,children:(0,G.jsx)(c,{className:`size-4 text-muted-foreground`})}),(0,G.jsx)(Z,{action:(0,G.jsx)(l,{"aria-label":`Add navigation item`,"data-testid":`add-button`,size:`icon`,type:`button`,variant:`ghost`,onClick:n.addItem,children:(0,G.jsx)(c,{})}),addItem:n.addItem,baseUrl:e,className:`mt-1`,clearError:e=>n.clearError(n.newItem.id,e),"data-testid":`new-navigation-item`,idPrefix:t,item:n.newItem,labelPlaceholder:`New item label`,showIcon:r,showPaidVisibility:i,showVisibility:s,updateItem:n.setNewItem,uploadIcon:u})]})]});function _e(){let{updateRoute:e}=v(),t=r(),{mutateAsync:n}=M(),{config:i}=ie(),{localSettings:a,updateSetting:o,saveState:s,handleSave:c,siteData:l}=ae(),[u,h,g]=ee(a,[`navigation`,`secondary_navigation`,`members_signup_access`]),y=ne(`navigationIcons`),b=y,x=y&&g!==`none`,S=te(a,i),C=(0,R.useMemo)(()=>JSON.parse(u||`[]`),[u]),w=(0,R.useMemo)(()=>JSON.parse(h||`[]`),[h]),T=(0,R.useCallback)(e=>{o(`navigation`,JSON.stringify(e))},[o]),E=(0,R.useCallback)(e=>{o(`secondary_navigation`,JSON.stringify(e))},[o]),D=W({items:C,setItems:T}),O=W({items:w,setItems:E}),[k,A]=(0,R.useState)(`primary-nav`),j=async e=>{try{return I(await n({file:e}))}catch(e){let n=e;n.response?.status===415&&(n.message=`Unsupported file type`),t(n)}};return(0,G.jsx)(_,{buttonsDisabled:s===`saving`,cancelLabel:`Close`,dirty:a.some(e=>e.dirty),okLabel:s===`saving`?`Saving...`:`Save`,scrolling:!0,size:`lg`,stickyFooter:!0,testId:`navigation-modal`,title:`Navigation`,onClose:()=>{e(`navigation`)},onOk:async()=>{D.validate()&&O.validate()&&(await c(),e(`navigation`))},children:(0,G.jsx)(`div`,{className:`mt-6 mb-1`,children:(0,G.jsxs)(m,{value:k,variant:`underline`,onValueChange:A,children:[(0,G.jsxs)(p,{children:[(0,G.jsx)(d,{value:`primary-nav`,children:`Primary`}),(0,G.jsx)(d,{value:`secondary-nav`,children:`Secondary`})]}),(0,G.jsx)(f,{value:`primary-nav`,children:(0,G.jsx)($,{baseUrl:l.url,idPrefix:`primary-navigation`,navigation:D,showIcon:b,showPaidVisibility:S,showVisibility:x,uploadIcon:j})}),(0,G.jsx)(f,{value:`secondary-nav`,children:(0,G.jsx)($,{baseUrl:l.url,idPrefix:`secondary-navigation`,navigation:O,showIcon:b,showPaidVisibility:S,showVisibility:x,uploadIcon:j})})]})})})}export{_e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{i as r}from"./hooks-CuEZV2-q.js";import{n as i}from"./dist-Ndy-PuGN.js";import{i as a,r as o}from"./stats-B_YkF7bp.js";import{a as s}from"./posts-KY3aUhVV.js";import{o as c}from"./post-helpers-C5OQMBoi.js";import{h as l}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as u}from"./router-provider-CJC58zTy.js";import{_ as d,f,m as p,p as m}from"./dist-Cb5RSHSg.js";import{a as h}from"./heading-CRZZ2FUe.js";import{i as g,o as _}from"./app-utils-D2Wp7ZSS.js";import{A as v,L as y,Yn as b,bt as x,k as S,t as C,yr as w}from"./button-BshWPHvn.js";import{i as T,r as E,t as D}from"./tabs-CGisSbWq.js";import{t as ee}from"./input-UHrKuvBT.js";import{n as te}from"./skeleton-D7hwjdry.js";import{t as ne}from"./loading-indicator-SFTqyYVE.js";import{a as O,i as re,n as k,o as A,r as j,t as M}from"./card-CiiE7QfM.js";import{c as ie,l as ae,n as oe,o as se,r as ce,s as le,t as ue,u as de}from"./data-list-CupF7bjM.js";import{i as N,n as P,o as F,r as I,t as L}from"./use-simple-pagination-B2TdNX67.js";import{Bn as fe,Or as pe,Pn as R,kr as me,zn as he}from"./index-CDP9tIOk.js";import{t as ge}from"./member-route-0Aa52Ntz.js";import{a as z,i as B,n as V,r as H,t as U}from"./kpi-card-fUHZlzBX.js";import{r as _e,t as ve}from"./post-analytics-header-B-P0eFnT.js";import{n as ye}from"./post-analytics-context-D0Mw-Pmv.js";import{a as be,i as xe,n as W,o as G,r as K}from"./link-helpers-Dtq9fxQg.js";var q=r({dataType:`FeedbackResponseType`,path:e=>`/feedback/${e}/`}),J=e(t(),1),Y=(e,t)=>{let{data:n,isLoading:r,error:i}=q(e,{searchParams:{limit:`50`,...t===void 0?{}:{score:t.toString()}}});return{feedback:(0,J.useMemo)(()=>n?.feedback?n.feedback:[],[n]),isLoading:r,error:i}},X=n(),Se=({feedbackStats:e})=>{let{postId:t}=l(),n=u(),[r,i]=(0,J.useState)(`positive`),{feedback:a,isLoading:o}=Y(t||``,+(r===`positive`)),{totalPages:s,paginatedData:c,nextPage:f,previousPage:b,hasNextPage:x,hasPreviousPage:w}=L({data:a,itemsPerPage:9}),ee=o;return(0,X.jsxs)(M,{children:[(0,X.jsxs)(O,{className:`pb-5`,children:[(0,X.jsx)(A,{children:`Feedback`}),(0,X.jsx)(j,{children:`What did your readers think?`})]}),e.totalFeedback>0?(0,X.jsxs)(k,{className:`pb-3`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsx)(D,{className:`pb-3`,defaultValue:`positive`,value:r,variant:`button`,onValueChange:e=>i(e),children:(0,X.jsxs)(E,{className:`gap-1`,children:[(0,X.jsx)(T,{className:`h-7`,value:`positive`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,X.jsx)(S,{size:14,strokeWidth:1.25}),(0,X.jsx)(`span`,{className:`hidden font-medium sm:visible! sm:inline!`,children:`More like this`}),(0,X.jsx)(`span`,{className:`font-semibold tracking-tight`,children:m(e.positiveFeedback/e.totalFeedback)})]})}),(0,X.jsx)(T,{className:`h-7`,value:`negative`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,X.jsx)(v,{size:14,strokeWidth:1.25}),(0,X.jsx)(`span`,{className:`hidden font-medium sm:visible! sm:inline!`,children:`Less like this`}),(0,X.jsx)(`span`,{className:`font-semibold tracking-tight`,children:m(e.negativeFeedback/e.totalFeedback)})]})})]})}),(0,X.jsx)(h,{className:`mr-2 mb-3 lg:hidden xl:visible! xl:block!`,children:`Date`})]}),(0,X.jsx)(R,{}),ee?(0,X.jsx)(te,{className:`mt-3`,lines:3}):c&&c.length>0?(0,X.jsx)(`div`,{className:`flex w-full flex-col py-3`,children:c.map(e=>(0,X.jsxs)(`div`,{className:`flex h-10 w-full items-center justify-between gap-3 rounded-sm border-none px-2 text-sm hover:cursor-pointer hover:bg-accent`,onClick:()=>{n(`/members/${e.member.id}`)},children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 font-medium`,children:[(0,X.jsxs)(he,{className:`size-7`,children:[e.member?.avatar_image&&(0,X.jsx)(`img`,{className:`absolute aspect-square size-full`,src:e.member?.avatar_image}),(0,X.jsx)(fe,{className:`text-white`,style:{backgroundColor:`${d(g(e.member),`45`,`55`)}`},children:_(e.member)})]}),g(e.member)]}),(0,X.jsx)(`div`,{className:`whitespace-nowrap text-muted-foreground`,children:p(e.created_at)})]},e.id))}):(0,X.jsx)(`div`,{className:`flex h-full items-center justify-center py-8 text-center text-sm text-muted-foreground`,children:(0,X.jsxs)(`div`,{children:[`No `,r===`positive`?`positive`:`negative`,` feedback yet`]})})]}):(0,X.jsxs)(k,{className:`flex grow flex-col items-center justify-center text-center text-sm text-muted-foreground`,children:[(0,X.jsx)(`div`,{children:`No members have given feedback yet`}),(0,X.jsx)(`div`,{children:`When someone does, you'll see their response here.`})]}),e.totalFeedback>0&&(0,X.jsx)(re,{className:`grow-0`,children:(0,X.jsxs)(`div`,{className:`flex w-full items-center justify-between gap-3`,children:[(0,X.jsxs)(C,{variant:`outline`,onClick:()=>{let e=`(feedback.post_id:'${t}'+feedback.score:1)`,i=`(feedback.post_id:'${t}'+feedback.score:0)`,a=`${encodeURIComponent(e)}&post=${t}`,o=`${encodeURIComponent(i)}&post=${t}`;n(`/members?filter=${r===`positive`?a:o}`)},children:[`View all`,(0,X.jsx)(y,{})]}),s>1&&(0,X.jsx)(P,{className:`pb-0`,children:(0,X.jsxs)(I,{children:[(0,X.jsx)(F,{disabled:!w,onClick:b}),(0,X.jsx)(N,{disabled:!x,onClick:f})]})})]})})]})},Ce=e=>{let{data:t,isLoading:n}=s(e),{data:r,isLoading:i}=s(e,{searchParams:{include:`count.positive_feedback,count.negative_feedback`}}),c=(0,J.useMemo)(()=>t?.posts[0],[t]),l=(0,J.useMemo)(()=>r?.posts[0],[r]),u=(0,J.useMemo)(()=>c?{sent:c.email?.email_count||0,opened:c.email?.opened_count||0,clicked:c.count?.clicks||0,openedRate:c.email?.opened_count?c.email.opened_count/c.email.email_count:0,clickedRate:c.count?.clicks&&c.email?.email_count?c.count.clicks/c.email.email_count:0}:{sent:0,opened:0,clicked:0,openedRate:0,clickedRate:0},[c]),d=(0,J.useMemo)(()=>{if(!l?.count)return{positiveFeedback:0,negativeFeedback:0,totalFeedback:0};let e=l.count.positive_feedback||0,t=l.count.negative_feedback||0;return{positiveFeedback:e,negativeFeedback:t,totalFeedback:e+t}},[l]),f=(0,J.useMemo)(()=>c?.newsletter?.id,[c]),{data:p,isLoading:m}=o({searchParams:f?{newsletter_id:f}:{},enabled:!!f}),h=(0,J.useMemo)(()=>p?.stats?p.stats.map(e=>e.post_id):[],[p]),{data:g,isLoading:_}=a({searchParams:f&&h.length>0?{newsletter_id:f,post_ids:h.join(`,`)}:{},enabled:!!f&&h.length>0}),v=(0,J.useMemo)(()=>{if(!p?.stats)return;let e=p.stats,t=g?.stats||[],n=new Map;t.forEach(e=>{n.set(e.post_id,e)});let r=e.map(e=>{let t=n.get(e.post_id);return{...e,total_clicks:t?.total_clicks||0,click_rate:t?.click_rate||0}});return{...p,stats:r}},[p,g]),y=m||_,{data:b,isLoading:x,refetch:S}=be({searchParams:{filter:`post_id:'${e}'`}}),C=(0,J.useMemo)(()=>{if(!v||!v.stats)return{openRate:0,clickRate:0};let e=v.stats;if(e.length===0)return{openRate:0,clickRate:0};let t=e.reduce((e,t)=>e+(t.open_rate||0),0),n=e.reduce((e,t)=>e+(t.click_rate||0),0);return{openRate:Number((t/e.length).toFixed(2)),clickRate:Number((n/e.length).toFixed(2))}},[v]),w=(0,J.useMemo)(()=>K(b),[b]);return{post:c,stats:u,feedbackStats:d,averageStats:(0,J.useMemo)(()=>({openedRate:C.openRate,clickedRate:C.clickRate}),[C]),topLinks:w,refetchTopLinks:S,isLoading:n||i||y||x}},we=({breakpoints:e={sm:1080,md:1280,lg:1360}}={})=>{let[t,n]=(0,J.useState)(`md`);return(0,J.useEffect)(()=>{let t=()=>{let t=window.innerWidth;t<e.sm?n(`sm`):t<e.md?n(`md`):n(`lg`)};return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)},[e]),{chartSize:t,isSmall:t===`sm`,isMedium:t===`md`,isLarge:t===`lg`}},Te=()=>(0,X.jsx)(`div`,{className:`absolute top-1/2 -right-4 z-10 hidden size-8 -translate-y-1/2 items-center justify-center rounded-full border bg-background text-muted-foreground md:visible! md:flex!`,children:(0,X.jsx)(b,{className:`ml-0.5`,size:16,strokeWidth:1.5})}),Ee=({dataColor:e,value:t,avgValue:n})=>(0,X.jsxs)(`div`,{className:`absolute top-6 left-1/2 z-50 flex w-[200px] -translate-x-1/2 flex-col items-stretch gap-1.5 rounded-md bg-background px-4 py-2 text-sm opacity-0 shadow-md transition-all group-hover/block:top-3 group-hover/block:opacity-100`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`div`,{className:`size-2 rounded-full bg-chart-blue opacity-50`,style:{backgroundColor:e}}),`This newsletter`]}),(0,X.jsx)(`div`,{className:`text-right font-mono`,children:t})]}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`div`,{className:`size-2 rounded-full bg-chart-gray opacity-80`}),`Average`]}),(0,X.jsx)(`div`,{className:`text-right font-mono`,children:n})]})]}),De=()=>{let e=u(),[t,n]=(0,J.useState)(null),[r,a]=(0,J.useState)(``),o=(0,J.useRef)(null),s=(0,J.useRef)(null),{chartSize:l}=we(),d=pe(),p=me(),{post:g,isPostLoading:_,postId:v}=ye(),y=t=>e(ge({filter:t})),b=g,S=c(b);(0,J.useEffect)(()=>{!_&&!S&&e(`/posts/analytics/${v}`)},[e,v,_,S]);let{stats:T,averageStats:E,topLinks:D,isLoading:fe,refetchTopLinks:he}=Ce(v),{mutate:be}=xe(),K=(0,J.useMemo)(()=>{if(!b?.count)return{positiveFeedback:0,negativeFeedback:0,totalFeedback:0};let e=b.count.positive_feedback||0,t=b.count.negative_feedback||0;return{positiveFeedback:e,negativeFeedback:t,totalFeedback:e+t}},[b]),q=(0,J.useMemo)(()=>b?.newsletter?.feedback_enabled===!0,[b]),Y=(0,J.useMemo)(()=>K.totalFeedback>0?!0:q,[K.totalFeedback,q]),De=e=>{let t=W(D,e);t&&(n(e),a(t.link.to))},Oe=()=>{if(!t)return;let e=W(D,t);if(!e)return;let o=r.trim();if(o===``||o===e.link.to){n(null),a(``);return}be({originalUrl:e.link.originalTo,editedUrl:r,postId:v},{onSuccess:()=>{n(null),a(``),he()},onError:()=>{i.error(`Couldn’t update the link. Please try again.`)}})},{totalPages:ke,paginatedData:Ae,nextPage:je,previousPage:Me,hasNextPage:Ne,hasPreviousPage:Pe}=L({data:D,itemsPerPage:10});(0,J.useEffect)(()=>{if(t&&o.current){o.current.focus();let e=W(D,t),i=t=>{s.current&&!s.current.contains(t.target)&&r===e?.link.to&&(n(null),a(``))};return document.addEventListener(`mousedown`,i),()=>{document.removeEventListener(`mousedown`,i)}}},[t,r,D]);let Z=fe||_,Fe=[{datatype:`Sent`,value:1,fill:`url(#gradientPurple)`,color:`var(--chart-purple)`}],Ie={percentage:{label:`O`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Le=[{datatype:`Average`,value:E.openedRate,fill:`url(#gradientGray)`,color:`var(--chart-gray)`},{datatype:`This newsletter`,value:T.openedRate,fill:`url(#gradientBlue)`,color:`var(--chart-blue)`}],Re={percentage:{label:`Opened`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},ze=[{datatype:`Average`,value:E.clickedRate,fill:`url(#gradientGray)`,color:`var(--chart-gray)`},{datatype:`This newsletter`,value:T.clickedRate,fill:`url(#gradientTeal)`,color:`var(--chart-teal)`}],Be={percentage:{label:`Clicked`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Q=`grid-cols-3`,$=`aspect-[16/10] w-full max-w-[320px] sm:aspect-[2/1] md:aspect-[10/14] md:max-w-none lg:aspect-square`;return(!d||!p)&&(Q=`grid-cols-2`,$=`aspect-[16/10] w-full max-w-[320px] sm:aspect-[2/1] md:aspect-square md:max-w-none lg:aspect-[15/10]`),!d&&!p&&(Q=`grid-cols-1`,$=`aspect-square w-full sm:aspect-[16/10] md:max-w-[320px] md:max-h-[320px] lg:aspect-[12/10]`),(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ve,{currentTab:`Newsletter`}),(0,X.jsx)(_e,{children:(0,X.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 ${Y&&d&&`lg:grid-cols-2`}`,children:[(0,X.jsxs)(M,{className:Y&&d?`lg:col-span-2`:``,children:[(0,X.jsxs)(O,{className:`hidden`,children:[(0,X.jsx)(A,{children:`Newsletters`}),(0,X.jsx)(j,{children:`How did this post perform`})]}),Z?(0,X.jsx)(k,{className:`h-[25vw] p-6`,children:(0,X.jsx)(ne,{})}):(0,X.jsxs)(k,{className:`p-0`,children:[(0,X.jsxs)(`div`,{className:`grid ${Q} items-stretch border-b`,children:[(0,X.jsxs)(U,{className:`group relative isolate grow p-3 md:px-6 md:py-5`,children:[(0,X.jsx)(B,{onClick:()=>{y(`emails.post_id:${v}`)},children:`View members →`}),(0,X.jsxs)(H,{onClick:()=>{y(`emails.post_id:${v}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-purple opacity-50`}),`Sent`]}),(0,X.jsx)(V,{children:(0,X.jsx)(z,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:f(T.sent)})})]}),p&&(0,X.jsxs)(U,{className:`p-3 md:px-6 md:py-5`,children:[(0,X.jsx)(B,{onClick:()=>{y(`opened_emails.post_id:${v}`)},children:`View members →`}),(0,X.jsxs)(H,{onClick:()=>{y(`opened_emails.post_id:${v}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-blue opacity-50`}),`Opened`]}),(0,X.jsx)(V,{children:(0,X.jsx)(z,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:f(T.opened)})})]}),d&&(0,X.jsxs)(U,{className:`group relative isolate grow p-3 md:px-6 md:py-5`,children:[(0,X.jsx)(B,{onClick:()=>{y(`clicked_links.post_id:${v}`)},children:`View members →`}),(0,X.jsxs)(H,{onClick:()=>{y(`clicked_links.post_id:${v}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-teal opacity-50`}),`Clicked`]}),(0,X.jsx)(V,{children:(0,X.jsx)(z,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:f(T.clicked)})})]})]}),(0,X.jsxs)(`div`,{className:`$ mx-auto grid grid-cols-1 items-center justify-center gap-4 transition-all md:gap-0 ${Q===`grid-cols-2`&&`md:grid-cols-2`} ${Q===`grid-cols-3`&&`md:grid-cols-3`}`,children:[(0,X.jsxs)(`div`,{className:`relative border-r-0 px-6 ${(p||d)&&`md:border-r`}`,children:[(0,X.jsx)(G,{className:$,config:Ie,data:Fe,percentageLabel:`Sent`,percentageValue:m(1),size:l,tooltip:!1}),(p||d)&&(0,X.jsx)(Te,{})]}),p&&(0,X.jsxs)(`div`,{className:`group/block relative border-r-0 px-6 transition-all hover:bg-muted/25 ${d&&`md:border-r`}`,children:[(0,X.jsx)(Ee,{avgValue:m(E.openedRate),dataColor:`var(--chart-blue)`,value:m(T.openedRate)}),(0,X.jsx)(G,{className:$,config:Re,data:Le,percentageLabel:`Open rate`,percentageValue:m(T.openedRate),size:l,tooltip:!1}),d&&(0,X.jsx)(Te,{})]}),d&&(0,X.jsxs)(`div`,{className:`group/block relative px-6 transition-all hover:bg-muted/25`,children:[(0,X.jsx)(Ee,{avgValue:m(E.clickedRate),dataColor:`var(--chart-teal)`,value:m(T.clickedRate)}),(0,X.jsx)(G,{className:$,config:Be,data:ze,percentageLabel:`Click rate`,percentageValue:m(T.clickedRate),size:l,tooltip:!1})]})]})]})]}),Y&&(0,X.jsx)(Se,{feedbackStats:K}),d&&(0,X.jsxs)(M,{className:`group/datalist overflow-hidden`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,X.jsxs)(O,{className:`p-0`,children:[(0,X.jsx)(A,{children:`Newsletter clicks`}),(0,X.jsx)(j,{children:`Which links resonated with your readers`})]}),(0,X.jsx)(h,{className:`mr-2`,children:`Members`})]}),Z?(0,X.jsxs)(k,{className:`p-6 pt-0`,children:[(0,X.jsx)(R,{}),(0,X.jsx)(te,{className:`mt-6`})]}):(0,X.jsxs)(k,{className:`pb-0`,children:[(0,X.jsx)(R,{}),D.length>0?(0,X.jsx)(ue,{className:``,children:(0,X.jsx)(ce,{children:Ae?.map(e=>{let n=T.clicked>0?e.count/T.clicked:0,i=e.link.link_id,c=e.link.title,l=e.link.to,u=e.link.edited;return(0,X.jsxs)(de,{children:[t!==i&&(0,X.jsx)(oe,{style:{width:`${n?Math.round(n*100):0}%`}}),(0,X.jsx)(se,{className:`w-full`,children:t===i?(0,X.jsxs)(`div`,{ref:s,className:`flex w-full items-center gap-2`,children:[(0,X.jsx)(ee,{ref:o,className:`z-50 h-7 w-full border-border bg-background text-sm`,value:r,onChange:e=>a(e.target.value)}),(0,X.jsx)(C,{size:`sm`,onClick:Oe,children:`Update`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(C,{className:`mr-2 shrink-0 bg-background`,size:`sm`,variant:`outline`,onClick:()=>De(i),children:(0,X.jsx)(x,{})}),(0,X.jsx)(`a`,{className:`block truncate font-medium hover:underline`,href:l,rel:`noreferrer`,target:`_blank`,title:c,children:c}),u&&(0,X.jsx)(`span`,{className:`ml-1 text-gray-500`,children:`(edited)`})]})}),(0,X.jsxs)(le,{children:[(0,X.jsx)(ie,{children:f(e.count||0)}),(0,X.jsx)(ae,{children:m(n)})]})]},i)})})}):(0,X.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`You have no links in your post.`})]}),!Z&&D.length>1&&(0,X.jsx)(re,{children:(0,X.jsxs)(`div`,{className:`flex w-full items-start justify-between gap-3`,children:[(0,X.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 pl-4 text-sm text-green`,children:[(0,X.jsx)(w,{size:20,strokeWidth:1.5}),`Sent a broken link? You can update it!`]}),ke>1&&(0,X.jsx)(P,{className:`pb-0`,children:(0,X.jsxs)(I,{children:[(0,X.jsx)(F,{disabled:!Pe,onClick:Me}),(0,X.jsx)(N,{disabled:!Ne,onClick:je})]})})]})})]})]})})]})};export{De as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r,g as i,i as a,r as o}from"./stats-B_YkF7bp.js";import{_ as s}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as c,t as l}from"./router-provider-CJC58zTy.js";import{f as u,l as d,p as f}from"./dist-Cb5RSHSg.js";import{a as p,s as m,t as h}from"./app-utils-D2Wp7ZSS.js";import{Ht as g,Ut as _,t as v}from"./button-BshWPHvn.js";import{g as y,n as b,o as x,r as ee}from"./chart-BnXyfH11.js";import{c as te,i as ne,l as re,n as S,s as ie,t as ae,u as oe}from"./chart-helpers-B3OqQ6Ez.js";import{n as se,t as C}from"./sort-button-DMBXF7tP.js";import{r as ce,t as le}from"./tabs-CGisSbWq.js";import{a as w,i as T,n as E,o as D,r as O,s as k,t as A}from"./select-D_RQaXgt.js";import{n as j}from"./skeleton-D7hwjdry.js";import{t as M}from"./loading-indicator-SFTqyYVE.js";import{a as N,n as P,o as F,r as I,t as L}from"./card-CiiE7QfM.js";import{t as R}from"./empty-indicator-WB1WgT9h.js";import{a as z,c as B,n as ue,r as V,s as de,t as fe}from"./table-CrqQtkR2.js";import{r as pe}from"./newsletters-DhNigJUh.js";import{Hn as me,Kn as H,Or as U,Qn as he,Wn as ge,jr as _e,kr as W,z as G}from"./index-CDP9tIOk.js";import{i as ve,n as ye,r as be,t as xe}from"./stats-view-BOCp9RG8.js";import{n as K,r as q,t as Se}from"./kpi-tabs-BGvtMD8S.js";import{t as Ce}from"./use-analytics-data--opuzwcz.js";import{t as we}from"./get-site-timezone-HgL0jI_F.js";var J=e(t(),1),Y=n(),Te=({active:e,payload:t})=>{if(!e||!t?.length)return null;let n=t[0].payload,r=typeof n.send_date==`string`?n.send_date:n.send_date.toISOString().split(`T`)[0];return(0,Y.jsxs)(`div`,{className:`max-w-[240px] min-w-[220px] rounded-lg border bg-background px-3 py-2 shadow-lg`,children:[(0,Y.jsxs)(`div`,{className:`mb-2 flex w-full flex-col border-b pb-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm leading-tight font-semibold`,children:n.post_title}),(0,Y.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Sent on `,d(r)]})]}),(0,Y.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Sent`}),(0,Y.jsx)(`div`,{className:`ml-2 w-full text-right font-mono`,children:u(n.sent_to)})]}),(0,Y.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Opens`}),(0,Y.jsxs)(`div`,{className:`ml-2 w-full text-right font-mono`,children:[(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[u(n.total_opens),` / `]}),f(n.open_rate)]})]}),(0,Y.jsxs)(`div`,{className:`mb-1 flex w-full justify-between`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Clicks`}),(0,Y.jsxs)(`div`,{className:`ml-2 w-full text-right font-mono`,children:[(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[u(n.total_clicks),` / `]}),f(n.click_rate)]})]})]})},Ee=({subscribersData:e,avgsData:t,totals:n,isLoading:r,isAvgsLoading:i,initialTab:a=`total-subscribers`})=>{let[o,l]=(0,J.useState)(a),[d,p]=(0,J.useState)(!1),{range:m}=G(),g=c(),[v]=s(),C=U(),w=W(),{totalSubscribers:T,avgOpenRate:E,avgClickRate:D}=n,O=(0,J.useMemo)(()=>{if(!e||e.length===0)return[];let t=[];return t=ne(e,m,`value`,`exact`),t.map(e=>({...e,formattedValue:u(e.value),label:`Total Subscribers`}))},[e,m]),k=(0,J.useMemo)(()=>ae(m,e||[]),[e,m]),A=(0,J.useMemo)(()=>{if(!O||O.length<=1)return{direction:`same`,value:`0%`};let e=O[0]?.value??0,t=O[O.length-1]?.value??0,n=`same`;t>e?n=`up`:t<e&&(n=`down`);let r;if(e===0)r=t===0?`0%`:`+100%`;else{let n=(t-e)/e*100,i=Math.round(n*10)/10;r=`${n>=0?`+`:``}${i}%`}return{direction:n,value:r}},[O]);(0,J.useEffect)(()=>{l(a)},[a]);let j=e=>{l(e);let t=new URLSearchParams(v);t.set(`tab`,e),g(`?${t.toString()}`,{replace:!0})},N={open_rate:{label:`Open rate`}},P=(0,J.useMemo)(()=>({"total-subscribers":{color:`var(--chart-darkblue)`,datakey:`value`},"avg-open-rate":{color:`var(--chart-blue)`,datakey:`open_rate`},"avg-click-rate":{color:`var(--chart-teal)`,datakey:`click_rate`}}),[]),{barDomain:F,barTicks:I}=(0,J.useMemo)(()=>{if(!t||t.length===0||o===`total-subscribers`)return{barDomain:[0,1],barTicks:[0,1]};let e=P[o]?.datakey;if(!e)return{barDomain:[0,1],barTicks:[0,1]};let n=t.map(t=>t[e]).filter(e=>typeof e==`number`);if(n.length===0)return{barDomain:[0,1],barTicks:[0,1]};let r=o===`avg-open-rate`?E:D,i=Math.max(Math.max(...n),r),a;return a=i<.01?.01:i<.1?(Math.floor(i*100)+1)/100:(Math.floor(i*10)+1)/10,{barDomain:[0,a],barTicks:[0,a]}},[t,o,P,E,D]);if(r)return(0,Y.jsx)(`div`,{className:`-mb-6 flex h-[calc(16vw+132px)] w-full items-start justify-center`,children:(0,Y.jsx)(M,{})});let L=`grid-cols-3`;(!C||!w)&&(L=`grid-cols-2`),!C&&!w&&(L=`grid-cols-1`);let z=o===`avg-open-rate`&&E>F[0]&&E<F[1]||o===`avg-click-rate`&&D>F[0]&&D<F[1],B=o===`avg-open-rate`?E:D;return(0,Y.jsxs)(le,{defaultValue:a,variant:`kpis`,children:[(0,Y.jsxs)(ce,{className:`-mx-6 hidden grid-cols-3 md:visible! md:grid! ${L}`,children:[(0,Y.jsx)(K,{className:`${!w&&!C&&`cursor-auto after:hidden`}`,value:`total-subscribers`,onClick:()=>{j(`total-subscribers`)},children:(0,Y.jsx)(q,{color:P[`total-subscribers`].color,"data-testid":`total-subscribers-value`,diffDirection:A.direction,diffValue:A.value,label:`Total subscribers`,value:u(T)})}),w&&(0,Y.jsx)(K,{value:`avg-open-rate`,onClick:()=>{j(`avg-open-rate`)},children:(0,Y.jsx)(q,{className:i?`opacity-50`:``,color:P[`avg-open-rate`].color,label:`Avg. open rate`,value:f(E)})}),C&&(0,Y.jsx)(K,{value:`avg-click-rate`,onClick:()=>{j(`avg-click-rate`)},children:(0,Y.jsx)(q,{className:i?`opacity-50`:``,color:P[`avg-click-rate`].color,label:`Avg. click rate`,value:f(D)})})]}),(0,Y.jsxs)(me,{children:[(0,Y.jsx)(he,{className:`md:hidden`,asChild:!0,children:(0,Y.jsxs)(Se,{children:[o===`total-subscribers`&&(0,Y.jsx)(q,{color:P[`total-subscribers`].color,label:`Total subscribers`,value:u(T)}),o===`avg-open-rate`&&w&&(0,Y.jsx)(q,{className:i?`opacity-50`:``,color:P[`avg-open-rate`].color,label:`Avg. open rate`,value:f(E)}),o===`avg-click-rate`&&C&&(0,Y.jsx)(q,{className:i?`opacity-50`:``,color:P[`avg-click-rate`].color,label:`Avg. click rate`,value:f(D)})]})}),(0,Y.jsxs)(ge,{align:`end`,className:`w-56`,children:[(0,Y.jsx)(H,{onClick:()=>j(`total-subscribers`),children:`Total subscribers`}),w&&(0,Y.jsx)(H,{onClick:()=>j(`avg-open-rate`),children:`Avg. open rate`}),C&&(0,Y.jsx)(H,{onClick:()=>j(`avg-click-rate`),children:`Avg. click rate`})]})]}),(0,Y.jsxs)(`div`,{className:`my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:[o===`total-subscribers`&&(0,Y.jsx)(ie,{className:`-mb-3 h-[16vw] max-h-[320px] min-h-[180px] w-full`,color:P[`total-subscribers`].color,data:O,id:`mrr`,range:k}),(o===`avg-open-rate`&&w||o===`avg-click-rate`&&C)&&(0,Y.jsx)(Y.Fragment,{children:i?(0,Y.jsx)(`div`,{className:`h-[320px] w-full items-center justify-center`,children:(0,Y.jsx)(M,{})}):t&&t.length>0?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(b,{className:`aspect-auto h-[200px] w-full md:h-[220px] xl:h-[320px]`,config:N,children:(0,Y.jsxs)(se,{className:d?`cursor-pointer!`:``,data:t,margin:{top:20},onClick:e=>{let t=(e.activePayload?.[0])?.payload?.post_id;t&&g(`/posts/analytics/${t}`)},onMouseLeave:()=>p(!1),onMouseMove:e=>{let t=(e.activePayload?.[0])?.payload?.post_id;p(!!t)},children:[(0,Y.jsx)(`defs`,{children:(0,Y.jsxs)(`linearGradient`,{id:`barGradient`,x1:`0`,x2:`0`,y1:`0`,y2:`1`,children:[(0,Y.jsx)(`stop`,{offset:`0%`,stopColor:P[o].color,stopOpacity:.8}),(0,Y.jsx)(`stop`,{offset:`100%`,stopColor:P[o].color,stopOpacity:.6})]})}),(0,Y.jsx)(oe,{horizontal:!0,stroke:`var(--border)`,vertical:!1}),(0,Y.jsx)(re,{axisLine:{stroke:`var(--border)`,strokeWidth:1},dataKey:`post_id`,interval:0,stroke:`var(--border)`,tickFormatter:()=>``,tickLine:!1,tickMargin:10}),(0,Y.jsx)(te,{axisLine:!1,domain:F,tickFormatter:e=>f(e),tickLine:!1,ticks:I,width:h(I,e=>f(e))}),(0,Y.jsx)(ee,{content:(0,Y.jsx)(Te,{}),cursor:!1,isAnimationActive:!1,position:{y:10}}),z&&(0,Y.jsx)(x,{label:{value:`${f(B)}`,position:`left`,offset:8,fill:`var(--muted-foreground)`},opacity:.5,stroke:`var(--muted-foreground)`,strokeDasharray:`4 4`,y:B}),(0,Y.jsx)(y,{activeBar:{fillOpacity:1},dataKey:P[o].datakey,fill:`url(#barGradient)`,fillOpacity:.6,isAnimationActive:!1,maxBarSize:32,minPointSize:3,radius:4})]})}),(0,Y.jsxs)(`div`,{className:`-mt-4 text-center text-sm text-muted-foreground`,children:[`Newsletters `,o===`avg-open-rate`?`opens`:`clicks`,` in this period`]})]}):(0,Y.jsx)(R,{className:`size-full py-20`,title:`No newsletters ${S(m)}`,children:(0,Y.jsx)(_,{strokeWidth:1.5})})})]})]})},De=({newsletters:e})=>{let{selectedNewsletterId:t,setSelectedNewsletterId:n}=G(),r=(0,J.useMemo)(()=>e?.filter(e=>e.status===`active`)||[],[e]);return(0,J.useEffect)(()=>{if(r.length>0&&!t){let e=r.find(e=>e.sort_order===0);n(e?e.id:r[0].id)}},[r,t,n]),r.length<=1?null:(0,Y.jsxs)(A,{value:t||``,onValueChange:e=>{n(e)},children:[(0,Y.jsxs)(D,{className:`w-auto`,children:[(0,Y.jsx)(g,{className:`mr-2`,size:16,strokeWidth:1.5}),(0,Y.jsx)(k,{placeholder:`Select a newsletter`})]}),(0,Y.jsx)(E,{align:`end`,children:(0,Y.jsxs)(O,{children:[(0,Y.jsx)(w,{children:`Newsletters`}),r.map(e=>(0,Y.jsx)(T,{value:e.id,children:e.name},e.id))]})})]})},Oe=(e,t,n=!0)=>{let i=e??30,{startDate:a,endDate:o}=(0,J.useMemo)(()=>m(i),[i]),s=r({searchParams:(0,J.useMemo)(()=>{let e={date_from:p(a),date_to:p(o)};return t&&(e.newsletter_id=t),e},[a,o,t]),enabled:n});return n?s:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:s.refetch}},ke=(e,t,n,r=!0)=>{let i=e??30,a=t??`date desc`,{startDate:s,endDate:c}=(0,J.useMemo)(()=>m(i),[i]),l=o({searchParams:(0,J.useMemo)(()=>{let e={date_from:p(s),date_to:p(c),order:a};return n&&(e.newsletter_id=n),e},[s,c,a,n]),enabled:r});return r?l:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:l.refetch}},Ae=(e,t=[],n=!0)=>{let r=a({searchParams:(0,J.useMemo)(()=>{let n={};return e&&(n.newsletter_id=e),t.length>0&&(n.post_ids=t.join(`,`)),n},[e,t]),enabled:n});return n?r:{data:void 0,isLoading:!1,error:null,isError:!1,refetch:r.refetch}},X=(e,t,n,r=!0)=>{let i=ke(e,t,n,r),a=(0,J.useMemo)(()=>i.data?.stats?i.data.stats.map(e=>e.post_id):[],[i.data]),o=Ae(n,a,r&&a.length>0);return{data:(0,J.useMemo)(()=>{if(!i.data?.stats)return;let e=i.data.stats,t=o.data?.stats||[],n=new Map;t.forEach(e=>{n.set(e.post_id,e)});let r=e.map(e=>{let t=n.get(e.post_id);return{...e,total_clicks:t?.total_clicks||0,click_rate:t?.click_rate||0}});return{...i.data,stats:r}},[i.data,o.data]),isLoading:i.isLoading,isClicksLoading:o.isLoading,error:i.error||o.error,isError:i.isError||o.isError,refetch:()=>{i.refetch(),o.refetch()}}},Z=J.memo(({range:e,selectedNewsletterId:t,shouldFetchStats:n,sortBy:r})=>{let i=c(),{settings:a}=Ce(),o=we(a),{data:s,isLoading:l,isClicksLoading:p}=X(e,r,t||void 0,!!n),m=U(),h=W(),g=(0,J.useMemo)(()=>s?.stats||[],[s]),y=h&&m?5:h||m?4:3,b=(0,J.useMemo)(()=>(0,Y.jsx)(Y.Fragment,{children:(0,Y.jsx)(B,{className:`last:border-none [&>td]:py-2.5`,children:(0,Y.jsx)(V,{className:`font-medium`,colSpan:y,children:(0,Y.jsx)(j,{className:`mt-5`})})})}),[y]),x=(0,J.useMemo)(()=>g.length>0?(0,Y.jsx)(Y.Fragment,{children:g.map(e=>(0,Y.jsxs)(B,{className:`last:border-none [&>td]:py-2.5`,children:[(0,Y.jsx)(V,{className:`font-medium`,children:(0,Y.jsx)(`div`,{className:`group/link inline-flex items-center gap-2`,children:e.post_id?(0,Y.jsx)(v,{className:`h-auto p-0 text-left whitespace-normal hover:underline!`,title:`View post analytics`,variant:`link`,onClick:()=>{i(`/posts/analytics/${e.post_id}/`)},children:e.post_title}):(0,Y.jsx)(Y.Fragment,{children:e.post_title})})}),(0,Y.jsx)(V,{className:`text-sm whitespace-nowrap`,children:d(e.send_date,o)}),(0,Y.jsx)(V,{className:`text-right font-mono text-sm`,children:u(e.sent_to)}),h&&(0,Y.jsxs)(V,{className:`text-right font-mono text-sm`,children:[(0,Y.jsx)(`span`,{className:`group-hover:hidden`,children:f(e.open_rate)}),(0,Y.jsx)(`span`,{className:`hidden group-hover:visible! group-hover:block!`,children:u(e.total_opens)})]}),m&&(0,Y.jsx)(V,{className:`text-right font-mono text-sm`,children:p?(0,Y.jsx)(`span`,{className:`inline-block h-4 w-8 animate-pulse rounded bg-gray-200`}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`group-hover:hidden`,children:f(e.click_rate)}),(0,Y.jsx)(`span`,{className:`hidden group-hover:visible! group-hover:block!`,children:u(e.total_clicks)})]})})]},e.post_id))}):(0,Y.jsx)(B,{className:`border-none hover:bg-transparent`,children:(0,Y.jsx)(V,{className:`text-center group-hover:bg-transparent!`,colSpan:y,children:(0,Y.jsx)(R,{className:`size-full py-20`,title:`No newsletters ${S(e)}`,children:(0,Y.jsx)(_,{strokeWidth:1.5})})})}),[g,p,i,m,h,e,o]);return l||!s?b:x});Z.displayName=`NewsletterTableRows`;var Q=J.memo(({sortBy:e,setSortBy:t,range:n})=>{let r=(0,J.useMemo)(()=>(0,Y.jsxs)(N,{children:[(0,Y.jsx)(F,{children:`Top newsletters`}),(0,Y.jsxs)(I,{children:[` Your best performing newsletters `,S(n)]})]}),[n]),i=U(),a=W();return(0,Y.jsx)(de,{children:(0,Y.jsxs)(B,{children:[(0,Y.jsx)(z,{className:`min-w-[320px]`,variant:`cardhead`,children:r}),(0,Y.jsx)(z,{className:`w-[65px]`,children:(0,Y.jsx)(C,{activeSortBy:e,setSortBy:t,sortBy:`date desc`,children:`Date`})}),(0,Y.jsx)(z,{className:`w-[90px] text-right`,children:(0,Y.jsx)(C,{activeSortBy:e,setSortBy:t,sortBy:`sent_to desc`,children:`Sent`})}),a&&(0,Y.jsx)(z,{className:`w-[90px] text-right`,children:(0,Y.jsx)(C,{activeSortBy:e,setSortBy:t,sortBy:`open_rate desc`,children:`Opens`})}),i&&(0,Y.jsx)(z,{className:`w-[90px] text-right`,children:(0,Y.jsx)(C,{activeSortBy:e,setSortBy:t,sortBy:`click_rate desc`,children:`Clicks`})})]})})});Q.displayName=`NewsletterTableHeader`;var $=J.memo(({range:e,selectedNewsletterId:t,shouldFetchStats:n})=>{let[r,i]=(0,J.useState)(`open_rate desc`);return(0,Y.jsx)(L,{className:`w-full max-w-[calc(100vw-64px)] overflow-x-auto sidebar:max-w-[calc(100vw-64px-280px)]`,"data-testid":`top-newsletters-card`,children:(0,Y.jsx)(P,{children:(0,Y.jsxs)(fe,{children:[(0,Y.jsx)(Q,{range:e,setSortBy:i,sortBy:r}),(0,Y.jsx)(ue,{children:(0,Y.jsx)(Z,{range:e,selectedNewsletterId:t,shouldFetchStats:n,sortBy:r})})]})})})});$.displayName=`TopNewslettersTable`;var je=()=>{let{range:e,selectedNewsletterId:t}=G(),[n]=s(),r=_e(),a=n.get(`tab`)||`total-subscribers`,{data:o,isLoading:c}=pe({searchParams:{limit:`50`}}),u=!c&&o&&o.newsletters.length>0&&!!t,{data:d,isLoading:f}=Oe(e,t||void 0,u||!1),{data:p,isLoading:h,isClicksLoading:g}=X(e,`date asc`,t||void 0,u||!1),_=(0,J.useMemo)(()=>!o?.newsletters||!t?null:o.newsletters.find(e=>e.id===t)||null,[o,t]),v=(0,J.useMemo)(()=>{let e=_?.count?.active_members||d?.stats?.[0]?.total||0,t=0,n=0;if(p?.stats&&p.stats.length>0){let e=p.stats,r=e.reduce((e,t)=>e+(t.open_rate||0),0),i=e.reduce((e,t)=>e+(t.click_rate||0),0);t=r/e.length,n=i/e.length}return{totalSubscribers:e,avgOpenRate:t,avgClickRate:n}},[_,d,p]),y=(0,J.useMemo)(()=>{if(!d?.stats?.[0]?.values||d.stats[0].values.length===0){let{startDate:t,endDate:n}=m(e),r=[],i=t.clone().toDate(),a=n.toDate();for(;i<=a;)r.push({date:i.toISOString().split(`T`)[0],value:0}),i.setDate(i.getDate()+1);return r}let t=d.stats[0].values;if(t.length===1){let n=t[0],r=new Date,i=e,a=new Date(r.getTime()-i*24*60*60*1e3);return[{...n,date:a.toISOString().split(`T`)[0]},{...n,date:r.toISOString().split(`T`)[0]}]}return t},[d,e]),b=(0,J.useMemo)(()=>p?.stats?p.stats.map(e=>({post_id:e.post_id,post_title:e.post_title,send_date:e.send_date,sent_to:e.sent_to,total_opens:e.total_opens,open_rate:e.open_rate,total_clicks:e.total_clicks||0,click_rate:e.click_rate||0})):[],[p]),x=f||g||h;return r===!1?(0,Y.jsx)(l,{to:`/analytics`}):(0,Y.jsxs)(ye,{children:[(0,Y.jsx)(be,{children:(0,Y.jsxs)(i,{children:[(0,Y.jsx)(De,{newsletters:o?.newsletters}),(0,Y.jsx)(ve,{})]})}),(0,Y.jsx)(xe,{isLoading:!1,loadingComponent:(0,Y.jsx)(Y.Fragment,{}),children:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(L,{"data-testid":`newsletters-card`,children:(0,Y.jsx)(P,{children:(0,Y.jsx)(Ee,{avgsData:b,initialTab:a,isAvgsLoading:!1,isLoading:x,subscribersData:y,totals:v})})}),(0,Y.jsx)($,{range:e,selectedNewsletterId:t,shouldFetchStats:!!u})]})})]})};export{je as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{f as r}from"./dist-Cb5RSHSg.js";import{Zn as i,at as a,fn as o,h as s,mr as c,st as l,t as u,vr as d}from"./button-BshWPHvn.js";import{t as f}from"./skeleton-D7hwjdry.js";import{n as p}from"./loading-indicator-SFTqyYVE.js";import{t as m}from"./use-navigate-with-base-path-CK989MlC.js";import{$ as h,B as g,H as _,Lt as v,U as y,V as b,_t as x,at as S,en as C,gt as w,it as T,lt as E,nt as D,ot as O,st as k,ut as A,vt as j,yt as M}from"./index-CDP9tIOk.js";import"./layout-Di5K7doM.js";var N=e(t(),1),P=n(),F=({notificationType:e,size:t=`lg`,className:n})=>{let r,i=``,c=`white`,u=t===`sm`?13:20,f=t===`sm`?2:1.5;switch(e){case`follow`:r=(0,P.jsx)(s,{className:`-mt-0.5 -mr-0.5 ${t===`sm`&&`size-[11px]`}`,color:c,size:u,strokeWidth:f}),i=`bg-blue-600`;break;case`like`:r=(0,P.jsx)(o,{className:`${t===`sm`?`size-[11px]`:`mt-px size-5`}`,color:c,strokeWidth:f}),i=`bg-pink-600`;break;case`reply`:r=(0,P.jsx)(a,{className:`mr-px mb-px`,color:c,size:u,strokeWidth:f}),i=`bg-purple-600`;break;case`repost`:r=(0,P.jsx)(l,{color:c,size:u,strokeWidth:f}),i=`bg-green-500`;break;case`mention`:r=(0,P.jsx)(d,{className:`${t===`sm`?`size-[12px]`:`size-5`}`,color:c,size:u,strokeWidth:f}),i=`bg-orange-500`;break}return(0,P.jsx)(`div`,{className:`flex ${t===`sm`?`size-5`:`size-9`} items-center justify-center rounded-full ${i} ${n&&n}`,children:r})},I=N.createContext(void 0),L=({isGrouped:e,centerAlign:t,children:n,onClick:r,url:i,className:a})=>(0,P.jsx)(I.Provider,{value:{onClick:r,url:i},children:(0,P.jsx)(`div`,{className:`group relative -mx-4 -my-px ${e?`grid`:`flex`} ${t?`items-center`:`items-start`} break-anywhere cursor-pointer grid-cols-[auto_1fr] gap-x-4 gap-y-2.5 rounded-lg px-4 py-5 text-left hover:bg-gray-100 ${a}`,role:`button`,onClick:r,children:n})});L.Icon=({size:e=`lg`,type:t})=>(0,P.jsx)(`div`,{className:`col-start-1 row-start-1`,children:(0,P.jsx)(F,{notificationType:t,size:e})}),L.Avatars=({children:e})=>(0,P.jsx)(`div`,{className:`col-start-2 row-start-1 flex gap-2`,children:e}),L.Content=({children:e})=>(0,P.jsx)(`div`,{className:`col-start-2 row-start-2 -mt-0.5 grow overflow-hidden`,children:e});var R=()=>(0,P.jsx)(`div`,{className:`h-px w-full bg-gray-200 dark:bg-gray-950`});function z(e){let t=1440*60*1e3,n=new Date(e).getTime();return(Math.floor(n/t)*t).toString()}function B(e){let t={},n=null,r=0;return e.forEach(e=>{e.type!==n&&(r+=1,n=e.type);let i=``,a=`_${z(e.createdAt)}`,o=`_seq${r}`;switch(e.type){case`like`:e.post?.id&&(i=`like_${e.post.id}${a}${o}`);break;case`reply`:i=`reply_${e.id}`;break;case`repost`:e.post?.id&&(i=`repost_${e.post.id}${a}${o}`);break;case`follow`:i=`follow_${a}${o}`;break;case`mention`:i=`mention_${e.id}`;break}t[i]||(t[i]={id:e.id,type:e.type,actors:[],post:e.post,inReplyTo:e.inReplyTo,createdAt:e.createdAt}),t[i].actors.find(t=>t.id===e.actor.id)||t[i].actors.push(e.actor)}),Object.values(t)}var V=({group:e})=>{let[t,...n]=e.actors,i=n.length>0,a=n.length,o=m(),s=(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(A,{actor:t,align:`center`,isCurrentUser:!1,children:(0,P.jsx)(`span`,{className:`cursor-pointer font-semibold hover:underline text-black dark:text-white`,onClick:e=>{e?.stopPropagation(),t.handle&&k(t.handle,o)},children:t.name})}),i&&` and ${r(a)} ${a>1?`others`:`other`}`]});switch(e.type){case`follow`:return(0,P.jsxs)(P.Fragment,{children:[s,` followed you`]});case`like`:return(0,P.jsxs)(P.Fragment,{children:[s,` liked your `,e.post?.type===`article`?`post`:`note`]});case`repost`:return(0,P.jsxs)(P.Fragment,{children:[s,` reposted your `,e.post?.type===`article`?`post`:`note`]});case`reply`:if(e.inReplyTo&&typeof e.inReplyTo!=`string`)return s;break;case`mention`:return s}return(0,P.jsx)(P.Fragment,{})},H=({content:e,className:t,stripTags:n=[]})=>{let r=(0,N.useRef)(null),i=m();return(0,N.useEffect)(()=>{let e=r.current;if(!e)return;let t=e=>{let t=e.target.closest(`a[data-profile]`);if(t){let n=t.getAttribute(`data-profile`)?.trim();/^@([\w.-]+)@([\w-]+\.[\w.-]+[a-zA-Z])$/.test(n||``)&&n&&(e.preventDefault(),e.stopPropagation(),k(n,i))}};return e.addEventListener(`click`,t),()=>{e.removeEventListener(`click`,t)}},[i,e]),(0,P.jsx)(`div`,{dangerouslySetInnerHTML:{__html:w(x(e||``,n))},ref:r,className:t})},U=({post:e,variant:t})=>{let n=e?.attachments??[],r=n.length>0,{contentWarning:i,shouldHideContentWarning:a,shouldHideSensitiveMedia:o,revealSensitiveMedia:s,revealContentWarning:c}=S({contentWarning:e?.contentWarning,sensitive:e?.sensitive,hasMedia:r,resetKey:e?.id});return e?a&&i?t===`inline`?(0,P.jsxs)(`button`,{className:`mt-0.5 block max-w-full truncate text-left text-sm text-gray-700 hover:text-black dark:text-gray-600 dark:hover:text-white`,type:`button`,onClick:c,children:[(0,P.jsx)(`span`,{className:`font-semibold`,children:`Content warning:`}),` `,i,` `,(0,P.jsx)(`span`,{className:`font-semibold`,children:`Show`})]}):(0,P.jsx)(h,{className:`mt-2.5`,label:i,size:`compact`,onReveal:c}):t===`inline`?(0,P.jsxs)(`div`,{className:`ap-note-content mt-0.5 line-clamp-1 text-sm text-pretty text-gray-700 dark:text-gray-600`,children:[e.type===`article`&&e.title&&(0,P.jsxs)(P.Fragment,{children:[e.title,` — `]}),(0,P.jsx)(`span`,{dangerouslySetInnerHTML:{__html:w(x(e.content||``))}})]}):(0,P.jsxs)(`div`,{className:`mt-2.5 rounded-md bg-gray-100 px-5 py-[14px] group-hover:bg-gray-200 dark:bg-gray-950/30 group-hover:dark:bg-black/40`,children:[(0,P.jsx)(H,{className:`ap-note-content text-pretty`,content:e.content||``,stripTags:[`a`]}),r&&(0,P.jsxs)(`div`,{className:`relative mt-2.5 aspect-square w-[calc(20%-6.4px)] min-w-[96px] overflow-hidden rounded-md [&_img]:absolute [&_img]:inset-0 [&_img]:mt-0 [&_img]:size-full [&_img]:max-h-none [&_img]:max-w-none [&_img]:object-cover [&>.attachment-gallery]:absolute [&>.attachment-gallery]:inset-0 [&>.attachment-gallery]:mt-0 [&>.attachment-gallery]:grid [&>.attachment-gallery]:size-full`,children:[T({type:`Note`,attachment:n}),o&&(0,P.jsx)(D,{showLabel:!1,size:`compact`,isLayered:!0,onReveal:s})]})]}):null},W=()=>{let[e,t]=N.useState({}),n=m(),a=e=>{t(t=>({...t,[e]:!t[e]}))},o=()=>{},{data:s,error:l,fetchNextPage:d,hasNextPage:h,isFetchingNextPage:x,isLoading:S}=v(`index`),w=s?.pages.flatMap(e=>B(e.notifications))??Array(10).fill({actors:[{}]}),T=(0,N.useRef)(null),D=(0,N.useRef)(null);(0,N.useEffect)(()=>(T.current&&T.current.disconnect(),T.current=new IntersectionObserver(e=>{e[0].isIntersecting&&h&&!x&&d()}),D.current&&T.current.observe(D.current),()=>{T.current&&T.current.disconnect()}),[h,x,d]);let A=(e,t)=>{switch(e.type){case`like`:e.post&&n(`/${e.post.type===`article`?`reader`:`notes`}/${encodeURIComponent(e.post.id)}`);break;case`reply`:e.post&&e.inReplyTo&&n(`/notes/${encodeURIComponent(e.post.id)}`);break;case`repost`:e.post&&n(`/${e.post.type===`article`?`reader`:`notes`}/${encodeURIComponent(e.post.id)}`);break;case`follow`:e.actors.length>1?a(e.id||`${e.type}_${t}`):e.actors[0]?.handle&&k(e.actors[0].handle,n);break;case`mention`:e.post&&n(`/notes/${encodeURIComponent(e.post.id)}`);break}};return l&&C(l)?(0,P.jsx)(g,{errorCode:l.code,statusCode:l.statusCode}):(0,P.jsx)(y,{children:(0,P.jsxs)(`div`,{className:`z-0 flex w-full flex-col items-center`,children:[S===!1&&w.length===0&&(0,P.jsxs)(_,{children:[(0,P.jsx)(b,{children:(0,P.jsx)(c,{})}),`Quiet for now, but not for long! When someone likes, boosts, or replies to you, you'll find it here.`]}),w.length>0&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`div`,{className:`my-8 flex w-full max-w-[620px] flex-col max-md:mt-5`,children:w.map((t,s)=>(0,P.jsxs)(N.Fragment,{children:[(0,P.jsxs)(L,{centerAlign:t.actors.length<2&&t.type===`follow`,className:`hover:bg-gray-100 dark:hover:bg-gray-950`,isGrouped:t.actors.length>1,onClick:()=>A(t,s),children:[S?(0,P.jsx)(f,{className:`rounded-full`,containerClassName:`flex h-10 w-10`}):t.actors.length>1?(0,P.jsx)(L.Icon,{type:t.type}):(0,P.jsxs)(`div`,{className:`relative`,children:[(0,P.jsx)(M,{author:{icon:{url:t.actors[0].avatarUrl||``},name:t.actors[0].name,handle:t.actors[0].handle},size:`notification`},t.actors[0].id),(0,P.jsx)(F,{className:`absolute -right-1 -bottom-1 z-10 border-2 border-white dark:border-black`,notificationType:t.type,size:`sm`})]}),t.actors.length>1&&(0,P.jsx)(L.Avatars,{children:(0,P.jsxs)(`div`,{className:`flex w-full flex-col`,children:[(0,P.jsxs)(`div`,{className:`relative flex w-fit items-center pl-2`,children:[!e[t.id||`${t.type}_${s}`]&&t.actors.slice(0,5).map(e=>(0,P.jsx)(M,{author:{icon:{url:e.avatarUrl||``},name:e.name,handle:e.handle},className:`-ml-2 bg-[#F3F3F3]! outline-2 outline-white group-hover:bg-[#EDEEF0]! group-hover:outline-gray-100 dark:outline-black group-hover:dark:outline-gray-950`,size:`notification`},e.id)),t.actors.length>5&&!e[t.id||`${t.type}_${s}`]&&(0,P.jsx)(`div`,{className:`absolute right-[28px] z-10 flex size-9 items-center justify-center rounded-full bg-black/50 text-base font-semibold tracking-tightest text-white`,children:`+${r(t.actors.length-5)}`}),t.actors.length>1&&(0,P.jsxs)(u,{className:`group flex items-center gap-0.5 text-gray-700 hover:bg-transparent hover:text-black dark:text-gray-600 dark:hover:text-white ${e[t.id||`${t.type}_${s}`]?`ml-[-20px]`:`ml-0 w-[28px]`}`,variant:`ghost`,onClick:e=>{e?.stopPropagation(),a(t.id||`${t.type}_${s}`)},children:[(0,P.jsx)(i,{className:`${e[t.id||`${t.type}_${s}`]?`rotate-180`:``}`,size:20,strokeWidth:1.5}),e[t.id||`${t.type}_${s}`]?`Hide`:(0,P.jsx)(`span`,{className:`sr-only`,children:`Show all`})]})]}),(0,P.jsx)(`div`,{className:`overflow-hidden transition-all duration-300 ease-in-out ${e[t.id||`${t.type}_${s}`]?`mb-2 max-h-[1384px] opacity-100`:`max-h-0 opacity-0`}`,children:e[t.id||`${t.type}_${s}`]&&t.actors.length>1&&(0,P.jsx)(`div`,{className:`flex flex-col gap-2 pt-2`,children:t.actors.map(e=>(0,P.jsxs)(`div`,{className:`group/item break-anywhere flex items-center justify-between gap-4`,onClick:t=>{t?.stopPropagation(),e.handle&&k(e.handle,n)},children:[(0,P.jsxs)(`div`,{className:`flex min-w-0 items-center`,children:[(0,P.jsx)(M,{author:{icon:{url:e.avatarUrl||``},name:e.name,handle:e.handle},size:`xs`}),(0,P.jsx)(`span`,{className:`ml-2 line-clamp-1 text-base font-semibold group-hover/item:underline dark:text-white`,children:e.name}),(0,P.jsx)(`span`,{className:`ml-1 line-clamp-1 text-base text-gray-700 dark:text-gray-600`,children:e.handle})]}),t.type===`follow`&&!e.followedByMe&&e.handle&&(0,P.jsx)(j,{following:!1,handle:e.handle,variant:`link`})]},e.id))})})]})}),(0,P.jsxs)(L.Content,{children:[(0,P.jsx)(`div`,{children:S?(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(f,{}),(0,P.jsx)(f,{className:`w-full max-w-60`})]}):(0,P.jsxs)(`div`,{className:`flex justify-between`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,P.jsx)(`span`,{className:`truncate`,children:(0,P.jsx)(V,{group:t})}),t.actors.length<2&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`span`,{className:`mt-px text-[8px] text-gray-700 dark:text-gray-600`,children:`•`}),(0,P.jsx)(`span`,{className:`mt-0.5 text-sm text-gray-700 dark:text-gray-600`,children:O(t,!1)})]})]}),t.actors.length===1&&(t.type===`follow`||t.type===`reply`||t.type===`mention`)&&!t.actors[0].followedByMe&&t.actors[0].handle&&(0,P.jsx)(j,{following:!1,handle:t.actors[0].handle,variant:`link`})]})}),(t.type===`reply`&&t.inReplyTo||t.type===`mention`||t.type===`like`&&!t.post?.name&&t.post?.content||t.type===`repost`&&!t.post?.name&&t.post?.content)&&(0,P.jsx)(U,{post:t.post,variant:t.type!==`reply`&&t.type!==`mention`?`inline`:`quoted`}),(t.type===`reply`&&t.post||t.type===`mention`)&&(0,P.jsx)(`div`,{className:`mt-1.5`,children:(0,P.jsx)(E,{actor:{...t.actors[0],icon:{url:t.actors[0].avatarUrl||``},id:t.actors[0].url,preferredUsername:t.actors[0].handle?.replace(/^@([^@]+)@.*$/,`$1`)||`unknown`},buttonClassName:`hover:bg-gray-200`,commentCount:t.post.replyCount||0,layout:`notification`,likeCount:t.post.likeCount||0,object:{...t.post,liked:t.post.likedByMe,reposted:t.post.repostedByMe},repostCount:t.post.repostCount||0,onLikeClick:o})})]})]}),s<w.length-1&&(0,P.jsx)(`div`,{className:`pl-[52px]`,children:(0,P.jsx)(R,{})})]},t.id||`${t.type}_${s}`))}),(0,P.jsx)(`div`,{ref:D,className:`h-1`}),x&&(0,P.jsx)(`div`,{className:`-mt-4 mb-8 flex flex-col items-center justify-center gap-4 text-center`,children:(0,P.jsx)(p,{size:`md`})})]})]})})};export{W as default};
|