ghost 6.24.0 → 6.25.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-i18n-6.24.0.tgz → tryghost-i18n-6.25.0.tgz} +0 -0
- package/components/tryghost-parse-email-address-6.25.0.tgz +0 -0
- package/core/boot.js +3 -1
- package/core/built/admin/assets/{PolarAngleAxis-7TlIQL3R.js → PolarAngleAxis-BNo3yZOE.js} +1 -1
- package/core/built/admin/assets/{_baseAssignValue-DJsCJz6y.js → _baseAssignValue-DwWJd_kU.js} +1 -1
- package/core/built/admin/assets/{a-large-small-BnBpzYwl.js → a-large-small-DzN0AB7t.js} +1 -1
- package/core/built/admin/assets/{at-sign-DC4NtDDM.js → at-sign-vqoOA4VZ.js} +1 -1
- package/core/built/admin/assets/{audience-CC5U4UxI.js → audience-CFjVlFTu.js} +1 -1
- package/core/built/admin/assets/{avatar-flipboard-_GQfQXQc.js → avatar-flipboard-DuTJ0ty5.js} +1 -1
- package/core/built/admin/assets/{bluesky-sharing-BKyzPl9y.js → bluesky-sharing-C1WkXrRJ.js} +1 -1
- package/core/built/admin/assets/{chart-BCQFlmhJ.js → chart-Bs2L1q8g.js} +1 -1
- package/core/built/admin/assets/{chunk.423.dae9a3bbe7845c3a3cfc.js → chunk.434.de8a15730373eccfeefe.js} +13 -101
- package/core/built/admin/assets/{chunk.524.b5e454aa74df4428420c.js → chunk.524.ed5714f505e821e549f3.js} +5 -5
- package/core/built/admin/assets/{chunk.582.20635869be68725e6d5c.js → chunk.582.639cecaca9e77bd7dd4f.js} +7 -7
- package/core/built/admin/assets/{chunk.123.1255d9e815f933dfdc57.js → chunk.603.5cb992da88800a9388f3.js} +8 -6
- package/core/built/admin/assets/{code-editor-view-BXnjo7qe.js → code-editor-view-DIH4grxv.js} +1 -1
- package/core/built/admin/assets/comments-gAnA10dK.js +1 -0
- package/core/built/admin/assets/{content-helpers-CQXipRWa.js → content-helpers-Cr_DHEOl.js} +1 -1
- package/core/built/admin/assets/{copy-B-MxRWPu.js → copy-w3c9zkaZ.js} +1 -1
- package/core/built/admin/assets/{data-list-B2sqn7IE.js → data-list-D-K_XfF3.js} +1 -1
- package/core/built/admin/assets/{deleted-feed-item-DQi676Dy.js → deleted-feed-item-DK47iaMV.js} +1 -1
- package/core/built/admin/assets/{dropzone-GgOCfK2j.js → dropzone-BHWXAN0m.js} +3 -3
- package/core/built/admin/assets/{edit-profile-COx5FmF9.js → edit-profile-DCyHhZgx.js} +1 -1
- package/core/built/admin/assets/{empty-indicator-Bf4Dqk72.js → empty-indicator-DjmACVr2.js} +1 -1
- package/core/built/admin/assets/{en-BkI47Ou-.js → en-Cl0b7CNW.js} +1 -1
- package/core/built/admin/assets/{feed-Dzc-8jwd.js → feed-C5AauoXf.js} +1 -1
- package/core/built/admin/assets/filters-DzSJ1ez3.js +1 -0
- package/core/built/admin/assets/{gh-chart-Ch6dYUac.js → gh-chart-xjwu2HZo.js} +1 -1
- package/core/built/admin/assets/{ghost-69e448feab2cb78aba64f7177fa4d6f0.js → ghost-78b4a517ac907213ab47708eef33bc6f.js} +423 -542
- package/core/built/admin/assets/{growth-BIBJdcm6.js → growth-DDyypj0q.js} +1 -1
- package/core/built/admin/assets/{hash-BGd7HEsT.js → hash-Bowe71Lt.js} +1 -1
- package/core/built/admin/assets/{inbox-CFzKvW3h.js → inbox-DS4qMjUb.js} +1 -1
- package/core/built/admin/assets/{index-DDJAHYHQ.js → index-4xuWCs9h.js} +1 -1
- package/core/built/admin/assets/{index-DIO8ceib.js → index-6Ag8SK_E.js} +1 -1
- package/core/built/admin/assets/{index-Dy8dCc8t.js → index-A6WmqYr6.js} +4 -4
- package/core/built/admin/assets/index-B8XuCPIT.js +1 -0
- package/core/built/admin/assets/{index-S2DGJkmz.js → index-BCvRITTU.js} +2 -2
- package/core/built/admin/assets/{index-BZyG96u1.js → index-B_XhekWb.js} +1 -1
- package/core/built/admin/assets/{index-D0gRP4Gp.js → index-C8ssgmjI.js} +1 -1
- package/core/built/admin/assets/{index-DM98UB_U.js → index-CFY2MOp4.js} +1 -1
- package/core/built/admin/assets/{index-CvX5YYEz.js → index-CVvW6Q-y.js} +1 -1
- package/core/built/admin/assets/{index-DpZazR71.js → index-CZK1A375.js} +1 -1
- package/core/built/admin/assets/{index-BYXKsmpv.js → index-CfpTfwls.js} +1 -1
- package/core/built/admin/assets/index-Chp0ODAU.css +1 -0
- package/core/built/admin/assets/{index-7NTHsKgE.js → index-DX6vaEVx.js} +1 -1
- package/core/built/admin/assets/{index-CsHjDdYB.js → index-DqlHFtZD.js} +1 -1
- package/core/built/admin/assets/{index-ZuWSQ3L6.js → index-JMWMnGGt.js} +93 -93
- package/core/built/admin/assets/{index-_WMp37yL.js → index-N61Xkr32.js} +1 -1
- package/core/built/admin/assets/{index-n5opb8tL.js → index-SDMWxO5r.js} +1 -1
- package/core/built/admin/assets/{koenig-lexical-8qAZ5o1x.js → koenig-lexical-DL3I-AcK.js} +1 -1
- package/core/built/admin/assets/{kpis-Cv75oSPY.js → kpis-Bm-hIEkf.js} +1 -1
- package/core/built/admin/assets/{label-CofMdj8x.js → label-DBwnwMrX.js} +1 -1
- package/core/built/admin/assets/{links-MSlYSad1.js → links-CnjcW0lg.js} +1 -1
- package/core/built/admin/assets/{loader-circle-CF5G2g_Z.js → loader-circle-CGDGFypO.js} +1 -1
- package/core/built/admin/assets/{lucide-react-DZiAu6PQ.js → lucide-react-BfVLf4Hw.js} +1 -1
- package/core/built/admin/assets/{main-layout-DEVUkqt_.js → main-layout-C_UH037j.js} +1 -1
- package/core/built/admin/assets/{member-route-mLKS-PsA.js → member-route-CKuE9uDU.js} +1 -1
- package/core/built/admin/assets/members-CzztojNk.js +15 -0
- package/core/built/admin/assets/{message-square-text-DESy3kSk.js → message-square-text-BDJyLbG2.js} +1 -1
- package/core/built/admin/assets/{minus-DVNwSjD6.js → minus-BM0xhFIQ.js} +1 -1
- package/core/built/admin/assets/{modals-FYjLOMaQ.js → modals-B6ZySU0x.js} +13 -13
- package/core/built/admin/assets/{moderation-u4WS46a-.js → moderation-CQMIGpv1.js} +1 -1
- package/core/built/admin/assets/{newsletter-Cj0UCg4J.js → newsletter-Dexg7vU8.js} +1 -1
- package/core/built/admin/assets/{newsletters-_UvhdBE3.js → newsletters-CT4k07rm.js} +1 -1
- package/core/built/admin/assets/{note-CRnFryTp.js → note-CiemurXq.js} +1 -1
- package/core/built/admin/assets/{overview-Cr0dGxEU.js → overview-9TwqfzGq.js} +1 -1
- package/core/built/admin/assets/{pagemenu-BqoDENpI.js → pagemenu-Dq744OgH.js} +1 -1
- package/core/built/admin/assets/{post-analytics-DIr_rDtL.js → post-analytics-CcRhLDKA.js} +1 -1
- package/core/built/admin/assets/{post-analytics-context-WA--pwK5.js → post-analytics-context-COgn3d86.js} +1 -1
- package/core/built/admin/assets/{post-analytics-header-D97SoEaV.js → post-analytics-header-DtBp2QSX.js} +1 -1
- package/core/built/admin/assets/{post-share-modal-DBxR7WCX.js → post-share-modal-BlOEKX3-.js} +1 -1
- package/core/built/admin/assets/posts/comments-C4rwkXWy.mjs +1473 -0
- package/core/built/admin/assets/posts/{dialog-67vvNv8e.mjs → dialog-Chkt119L.mjs} +3 -3
- package/core/built/admin/assets/posts/{dropdown-menu-BKZfsAPJ.mjs → dropdown-menu-CvSs_ay2.mjs} +5 -5
- package/core/built/admin/assets/posts/{empty-indicator-DTmBQa_3.mjs → empty-indicator-GyeO28CG.mjs} +2 -2
- package/core/built/admin/assets/posts/filters-BD3A2GlB.mjs +2831 -0
- package/core/built/admin/assets/posts/{get-site-timezone-D75cHSJ1.mjs → get-site-timezone-Baeue4hE.mjs} +2 -2
- package/core/built/admin/assets/posts/{growth-BqJWjpAp.mjs → growth-kmVbKjBt.mjs} +14 -14
- package/core/built/admin/assets/posts/{heading-DXxLDQ96.mjs → heading-DV_WQJh4.mjs} +2 -2
- package/core/built/admin/assets/posts/{hooks-pVotzebr.mjs → hooks-DQhsid0U.mjs} +2 -2
- package/core/built/admin/assets/posts/{index-By5yPnMZ.mjs → index-Bl1ReYmV.mjs} +10 -10
- package/core/built/admin/assets/posts/{index-DZ1HzbGS.mjs → index-CVum5OE6.mjs} +3 -3
- package/core/built/admin/assets/posts/{input-DdXe2Fjm.mjs → input-C7qFEkmt.mjs} +2 -2
- package/core/built/admin/assets/posts/{kpis-1MXZeSC9.mjs → kpis-DteuJY-D.mjs} +10 -10
- package/core/built/admin/assets/posts/{links-DGzzdzsH.mjs → links-eoZr0T0x.mjs} +4 -4
- package/core/built/admin/assets/posts/{loading-indicator-CSj2spwS.mjs → loading-indicator-Dj1SCL40.mjs} +3 -3
- package/core/built/admin/assets/posts/{main-layout-CGs25JVH.mjs → main-layout-Ct-TA0TH.mjs} +2 -2
- package/core/built/admin/assets/posts/{members-BRcED5fL.mjs → members-BY9oPKo4.mjs} +3814 -3378
- package/core/built/admin/assets/posts/{newsletter-D706LlgM.mjs → newsletter-BR1tln6E.mjs} +15 -15
- package/core/built/admin/assets/posts/{overview-5dG5ypjx.mjs → overview-j1ANMAQ2.mjs} +16 -16
- package/core/built/admin/assets/posts/{post-analytics-wvNuOa4c.mjs → post-analytics-DnG-Rolr.mjs} +6 -6
- package/core/built/admin/assets/posts/{post-analytics-context-BqnFe05q.mjs → post-analytics-context-hiKFF4yE.mjs} +5 -5
- package/core/built/admin/assets/posts/{post-analytics-header-Dsi5l6hb.mjs → post-analytics-header-OqAJ8SUL.mjs} +11 -11
- package/core/built/admin/assets/posts/{post-share-modal-DWe35McY.mjs → post-share-modal-BWfujDu2.mjs} +4 -4
- package/core/built/admin/assets/posts/posts-CS9tqSJC.mjs +37 -0
- package/core/built/admin/assets/posts/posts.js +1 -1
- package/core/built/admin/assets/posts/{reply-B4vwBMwj.mjs → reply-CX_EQh9X.mjs} +2 -2
- package/core/built/admin/assets/posts/{search-DQuB1WMm.mjs → search-BqzdnPQb.mjs} +2 -2
- package/core/built/admin/assets/posts/{select-BMPHyOdQ.mjs → select-CD5WLIrZ.mjs} +8 -8
- package/core/built/admin/assets/posts/{separator-DgZ2VF9r.mjs → separator-DFPLsWCc.mjs} +3 -3
- package/core/built/admin/assets/posts/{settings-D-wnf7Qg.mjs → settings-lnEt3Kb-.mjs} +2 -2
- package/core/built/admin/assets/posts/{sheet-SOdCzxUt.mjs → sheet-CkLfUqdH.mjs} +3 -3
- package/core/built/admin/assets/posts/{skeleton-Du7JXZ_1.mjs → skeleton-BZCi-IYy.mjs} +3 -3
- package/core/built/admin/assets/posts/{source-icon-DcBtKbCl.mjs → source-icon-C0k2hDC_.mjs} +3 -3
- package/core/built/admin/assets/posts/{stats-CeLav-Hu.mjs → stats-AHbSTqzG.mjs} +4 -4
- package/core/built/admin/assets/posts/{table-DlaJMBps.mjs → table-DMrf6wp5.mjs} +2 -2
- package/core/built/admin/assets/posts/{tabs-BQQbtw2g.mjs → tabs-BH8GNJCe.mjs} +14 -14
- package/core/built/admin/assets/posts/tags-C5VV8Gd0.mjs +398 -0
- package/core/built/admin/assets/posts/{tags-CLyaNf39.mjs → tags-DucujdYI.mjs} +2 -2
- package/core/built/admin/assets/posts/use-scroll-restoration-C7A3TpAz.mjs +517 -0
- package/core/built/admin/assets/posts/{use-infinite-virtual-scroll-B_NwiBXK.mjs → virtual-list-window-BIGoc0th.mjs} +322 -244
- package/core/built/admin/assets/posts/{web-TEVKbXSI.mjs → web-DczNailO.mjs} +18 -18
- package/core/built/admin/assets/posts-Dr3u9yOp.js +1 -0
- package/core/built/admin/assets/{referrers-J4vexZCf.js → referrers-6As_USul.js} +1 -1
- package/core/built/admin/assets/{repeat-BxOK9zhN.js → repeat-D-Ki-Cg5.js} +1 -1
- package/core/built/admin/assets/{reply-BoTN-eE0.js → reply-C4V0xZ2U.js} +1 -1
- package/core/built/admin/assets/{select-Bd1zcqox.js → select-Dt579MbD.js} +1 -1
- package/core/built/admin/assets/{settings-D72z6T_a.js → settings-BMsoTszq.js} +1 -1
- package/core/built/admin/assets/{settings-BGbGoa4s.js → settings-Ck1Hqs1x.js} +19 -19
- package/core/built/admin/assets/{sort-button-BOLTpImz.js → sort-button-Bn325H3y.js} +1 -1
- package/core/built/admin/assets/{source-icon-BqEM5MvU.js → source-icon-CNqsYZeA.js} +1 -1
- package/core/built/admin/assets/{sprout-Bf-wc2Vo.js → sprout-C9DbfYGe.js} +1 -1
- package/core/built/admin/assets/{square-Cj_bJ0HZ.js → square-CWrI0H4v.js} +1 -1
- package/core/built/admin/assets/stats/{audience-BiHYBUzT.mjs → audience-DBW5Xu1c.mjs} +3 -3
- package/core/built/admin/assets/stats/{content-helpers-CIXZiyCm.mjs → content-helpers-BR6DcWwH.mjs} +4 -4
- package/core/built/admin/assets/stats/{index-DBB8Oih1.mjs → index-BuS4r1cs.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-CkKk-p14.mjs → index-CFvGHbAV.mjs} +8 -8
- package/core/built/admin/assets/stats/{index-9zQR4gr0.mjs → index-DKS4mzS-.mjs} +3621 -3512
- package/core/built/admin/assets/stats/{index-DMSmQLxG.mjs → index-TeAxlGlY.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-DErXBfDM.mjs → index-ZjicrvMA.mjs} +5 -5
- package/core/built/admin/assets/stats/{sort-button-BqY7GFaO.mjs → sort-button-DbwzvVKL.mjs} +3 -3
- package/core/built/admin/assets/stats/{stats-BeJgKX2G.mjs → stats-BatzfgdA.mjs} +4 -4
- package/core/built/admin/assets/stats/stats.js +1 -1
- package/core/built/admin/assets/stats/{tabs-CPz357mW.mjs → tabs-B32ptD5t.mjs} +3 -3
- package/core/built/admin/assets/stats/{use-growth-stats-WMYXBQE3.mjs → use-growth-stats-DmTT2gKd.mjs} +3 -3
- package/core/built/admin/assets/{stats-DWpHtRym.js → stats-G4Ge9ETb.js} +1 -1
- package/core/built/admin/assets/stats-view-Bx3oDAIW.js +1 -0
- package/core/built/admin/assets/{step-1-Bjya9Gt0.js → step-1-y3anLU0g.js} +1 -1
- package/core/built/admin/assets/{step-2-CJ6I8JNc.js → step-2-Dr1lGnHU.js} +1 -1
- package/core/built/admin/assets/{step-3-3fs6Y2Kj.js → step-3-C_d2hvMs.js} +2 -2
- package/core/built/admin/assets/{table-B4zlzEDP.js → table-CbN_vbUx.js} +1 -1
- package/core/built/admin/assets/{tabs-mR5oJGm5.js → tabs-DFJzY5np.js} +1 -1
- package/core/built/admin/assets/tags-D5g9tXZU.js +1 -0
- package/core/built/admin/assets/{tags-CsgMtkFL.js → tags-Ddg8oG2Y.js} +1 -1
- package/core/built/admin/assets/{textarea-CQjEvapR.js → textarea-DikWsYMt.js} +1 -1
- package/core/built/admin/assets/{tiers-CQE0v797.js → tiers-B7qV_8mO.js} +1 -1
- package/core/built/admin/assets/{toggle-group-CR-Z-bJL.js → toggle-group-tXaaTD7P.js} +1 -1
- package/core/built/admin/assets/{topic-filter-_NyD55eH.js → topic-filter-bQtscKE6.js} +1 -1
- package/core/built/admin/assets/{trash-BFSLkv0z.js → trash--VS50LgS.js} +1 -1
- package/core/built/admin/assets/{upload-BTxT4v2z.js → upload-Dz-DI9rQ.js} +1 -1
- package/core/built/admin/assets/{use-growth-stats-BGymNu5O.js → use-growth-stats-DNVioFUq.js} +1 -1
- package/core/built/admin/assets/use-scroll-restoration-CxWEiCuS.js +1 -0
- package/core/built/admin/assets/{use-simple-pagination-Cq7Afp_c.js → use-simple-pagination-BA6xsVQO.js} +1 -1
- package/core/built/admin/assets/{user-plus-DMl69yKl.js → user-plus-B0tpOnLM.js} +1 -1
- package/core/built/admin/assets/{user-round-check-CVuZXUPz.js → user-round-check-caJYm0bB.js} +1 -1
- package/core/built/admin/assets/virtual-list-window-JdKgHS9L.js +4 -0
- package/core/built/admin/assets/{wallet-cards-zHR_y6Sp.js → wallet-cards-DBM65lA_.js} +1 -1
- package/core/built/admin/assets/{web-CmFHgeQw.js → web-CSXixG1S.js} +1 -1
- package/core/built/admin/index.html +7 -7
- package/core/frontend/helpers/ghost_head.js +1 -4
- package/core/server/data/migrations/versions/6.25/2026-03-26-15-47-00-insert-default-email-design-settings-row.js +42 -0
- package/core/server/data/migrations/versions/6.25/2026-03-30-20-22-25-add-email-design-setting-permissions.js +44 -0
- package/core/server/data/migrations/versions/6.25/2026-03-30-22-16-43-add-email-design-setting-id-to-automated-emails.js +8 -0
- package/core/server/data/migrations/versions/6.25/2026-03-31-13-12-10-backfill-automated-emails-email-design-setting-id.js +45 -0
- package/core/server/data/migrations/versions/6.25/2026-03-31-20-31-19-drop-nullable-on-automated-emails-email-design-setting-id.js +3 -0
- package/core/server/data/schema/fixtures/fixtures.json +35 -0
- package/core/server/data/schema/schema.js +1 -0
- package/core/server/data/seeders/importers/comment-reports-importer.js +1 -3
- package/core/server/data/seeders/importers/comments-importer.js +3 -2
- package/core/server/data/seeders/importers/email-batches-importer.js +3 -3
- package/core/server/data/seeders/importers/email-recipients-importer.js +6 -6
- package/core/server/data/seeders/importers/emails-importer.js +4 -3
- package/core/server/data/seeders/importers/members-click-events-importer.js +1 -1
- package/core/server/data/seeders/importers/members-created-events-importer.js +2 -1
- package/core/server/data/seeders/importers/members-feedback-importer.js +3 -4
- package/core/server/data/seeders/importers/members-login-events-importer.js +3 -2
- package/core/server/data/seeders/importers/members-status-events-importer.js +1 -2
- package/core/server/data/seeders/importers/members-stripe-customers-importer.js +2 -1
- package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +4 -2
- package/core/server/data/seeders/importers/members-subscribe-events-importer.js +1 -2
- package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +3 -1
- package/core/server/data/seeders/importers/offer-redemptions-importer.js +3 -3
- package/core/server/data/seeders/utils/database-date.js +26 -1
- package/core/server/models/automated-email.js +27 -0
- package/core/server/models/email-design-setting.js +27 -0
- package/core/server/services/stripe/service.js +1 -2
- package/core/server/services/webhooks/webhook-trigger.js +1 -1
- package/package.json +10 -28
- package/tsconfig.tsbuildinfo +1 -1
- package/yarn.lock +423 -107
- package/components/tryghost-parse-email-address-6.24.0.tgz +0 -0
- package/core/built/admin/assets/comments-CteqV7ZN.js +0 -1
- package/core/built/admin/assets/filters-DXXaCya7.js +0 -1
- package/core/built/admin/assets/index-QB-va_sk.css +0 -1
- package/core/built/admin/assets/index-nBUk6L1X.js +0 -1
- package/core/built/admin/assets/members-DcElgZ2t.js +0 -15
- package/core/built/admin/assets/posts/comments-Bswx2dzs.mjs +0 -1551
- package/core/built/admin/assets/posts/filters-Ds_ZaYIU.mjs +0 -2722
- package/core/built/admin/assets/posts/posts-DI5YQFp4.mjs +0 -17
- package/core/built/admin/assets/posts/tags-CjwolIiT.mjs +0 -395
- package/core/built/admin/assets/posts/use-scroll-restoration-YSR5jwQl.mjs +0 -232
- package/core/built/admin/assets/posts-CJHEP4C-.js +0 -1
- package/core/built/admin/assets/stats-view-CcyaLPwj.js +0 -1
- package/core/built/admin/assets/tags-DEFC6GpD.js +0 -1
- package/core/built/admin/assets/use-infinite-virtual-scroll-CNqGwgHd.js +0 -4
- package/core/built/admin/assets/use-scroll-restoration-BWtb0NrS.js +0 -1
- /package/core/built/admin/assets/{chunk.423.dae9a3bbe7845c3a3cfc.js.LICENSE.txt → chunk.434.de8a15730373eccfeefe.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import{j as s,z as ae,ao as Rs,c5 as Kt,r as m,ct as qt,cu as Qt,cw as Jt,cs as Xt,cM as Zt,X as ot,cv as Os,B as U,a0 as vt,ae as ct,ag as Ds,D as Ie,v as Pe,w as Te,x as Fe,ab as ge,dd as As,de as Is,df as es,e as Ke,bt as Ps,C as Ts,ce as ts,cJ as me,dg as Fs,aa as Us,dh as $s,di as Bs,W as le,b0 as zs,aP as Vs,b1 as Ws,b2 as Hs,b4 as Ne,b5 as wt,cm as ss,c3 as Ys,dj as Gs,dk as ut,dl as Ks,dm as qs,dn as Qs,cc as _t,dp as rs,dq as St,aG as Ue,a$ as dt,dr as ke,ds as as,t as Z,d6 as Js,cH as Xs,bS as Zs,cQ as er,bR as ns,aE as tr,d1 as sr,cl as jt}from"./index-JMWMnGGt.js";import{C as mt,a as ft,b as is,d as Et,e as pt,f as rr,F as ar}from"./filters-DzSJ1ez3.js";import{P as nr,T as ir}from"./tags-Ddg8oG2Y.js";import{c as ls,e as Le,b as lr,m as or,f as os,u as cr,M as ur,a as dr}from"./use-scroll-restoration-CxWEiCuS.js";import{D as mr,u as fr}from"./dropzone-BHWXAN0m.js";import{U as cs,D as pr,b as hr,N as br,T as gr,M as xr,P as yr,a as vr,S as wr,A as _r,C as Sr,c as jr,d as Er,e as Nr}from"./upload-Dz-DI9rQ.js";import{S as Cr,a as kr,b as Lr,c as Mr,f as Nt}from"./select-Dt579MbD.js";import{a as qe,b as ht,c as je,d as pe,e as us,f as de}from"./table-CbN_vbUx.js";import{u as ds}from"./newsletters-CT4k07rm.js";import{U as Rr,M as Or}from"./user-plus-B0tpOnLM.js";import{a as Dr,E as Ar,F as Ir,c as Pr}from"./loader-circle-CGDGFypO.js";import{g as ms}from"./get-site-timezone-BDBAcjmq.js";import{u as Tr}from"./tiers-B7qV_8mO.js";import{b as Fr}from"./posts-Dr3u9yOp.js";import{H as Qe,u as Ur,a as $r,L as Br}from"./virtual-list-window-JdKgHS9L.js";import{M as zr}from"./main-layout-C_UH037j.js";import{E as Ct}from"./empty-indicator-DjmACVr2.js";import{r as Vr}from"./index-DX6vaEVx.js";import"./index-6Ag8SK_E.js";function Wr({className:e,...t}){return s.jsx("div",{className:ae("group/input-group dark:bg-input/30 border-transparent bg-gray-150 dark:bg-gray-900 relative flex w-full items-center rounded-md border outline-hidden transition-[color,box-shadow]","h-9 has-[>textarea]:h-auto","has-[>[data-align=inline-start]]:[&>input]:pl-2","has-[>[data-align=inline-end]]:[&>input]:pr-2","has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3","has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3","has-[[data-slot=input-group-control]:focus-visible]:outline-hidden has-[[data-slot=input-group-control]:focus-visible]:bg-transparent has-[[data-slot=input-group-control]:focus-visible]:border-green has-[[data-slot=input-group-control]:focus-visible]:shadow-[0_0_0_2px_rgba(48,207,67,.25)]","has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",e),"data-slot":"input-group",role:"group",...t})}const Hr=Rs("flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--input-group-radius)-5px)] [&>svg:not([class*='size-'])]:size-4",{variants:{align:{"inline-start":"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]","inline-end":"order-last pr-3 has-[>button]:mr-[-0.4rem] has-[>kbd]:mr-[-0.35rem]","block-start":"order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5 [.border-b]:pb-3","block-end":"order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5 [.border-t]:pt-3"}},defaultVariants:{align:"inline-start"}});function Yr({className:e,align:t="inline-start",...a}){return s.jsx("div",{className:ae(Hr({align:t}),e),"data-align":t,"data-slot":"input-group-addon",role:"group",onClick:r=>{var n;if(r.target.closest("button"))return;const i=(n=r.currentTarget.closest('[data-slot="input-group"]'))==null?void 0:n.querySelector('[data-slot="input-group-control"]');i?.focus()},...a})}function Gr({className:e,...t}){return s.jsx(Kt,{className:ae("flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 focus-visible:outline-hidden focus-visible:shadow-none dark:bg-transparent",e),"data-slot":"input-group-control",...t})}function fs(e,t){const[a,r]=m.useState(""),n=e??a,i=m.useCallback(u=>{r(u),t?.(u)},[t]);return{search:n,handleSearchChange:i}}const Kr=({label:e,onSave:t,onCancel:a,onDelete:r,isDuplicateName:n})=>{const[i,u]=m.useState(e.name),[d,c]=m.useState(!1),[f,v]=m.useState(""),[j,C]=m.useState(!1),[k,L]=m.useState(!1),w=m.useRef(null),x=j||k;m.useEffect(()=>{w.current?.focus(),w.current?.select()},[]);const A=b=>{const y=b.trim();return y?n?.(y,e.id)?"A label with this name already exists":"":"Name is required"},P=async()=>{const b=A(i);if(b){v(b);return}C(!0);try{await t(e.id,i.trim()),a()}catch{C(!1)}},N=b=>{b.key==="Enter"?(b.preventDefault(),P()):b.key==="Escape"&&(b.preventDefault(),x||a())},g=async()=>{L(!0);try{await r(e.id)}catch{L(!1),c(!1)}};return s.jsxs("div",{className:"flex flex-col gap-2 py-1.5","data-edit-row":!0,children:[s.jsx("input",{ref:w,className:"h-7 w-full rounded border border-border bg-background px-2 text-sm outline-hidden focus:ring-1 focus:ring-ring disabled:opacity-50",disabled:x,type:"text",value:i,onChange:b=>{u(b.target.value),v("")},onKeyDown:N}),f&&s.jsx("span",{className:"text-xs text-destructive",children:f}),d?s.jsxs("div",{className:"flex items-center gap-1 text-sm",children:[s.jsx("span",{className:"flex-1 font-semibold",children:"Delete label?"}),s.jsx(U,{className:"h-6 px-2 text-xs",disabled:x,size:"sm",variant:"outline",onClick:()=>c(!1),children:"Cancel"}),s.jsx(U,{className:"h-6 px-2 text-xs",disabled:x,size:"sm",variant:"destructive",onClick:g,children:k?"Deleting...":"Delete"})]}):s.jsxs("div",{className:"flex items-center",children:[s.jsx(U,{className:"h-6 gap-1 px-1.5 text-xs text-red hover:bg-red/5 hover:text-red",disabled:x,size:"sm",variant:"ghost",onClick:()=>c(!0),children:"Delete"}),s.jsxs("div",{className:"ml-auto flex gap-1",children:[s.jsx(U,{className:"h-6 px-2 text-xs",disabled:x,size:"sm",variant:"outline",onClick:a,children:"Cancel"}),s.jsx(U,{className:"h-6 px-2 text-xs",disabled:x,size:"sm",onClick:P,children:j?"Saving...":"Save"})]})]})]})},qr=({label:e,isSelected:t,showEdit:a,onToggle:r,onEditClick:n})=>s.jsxs(pt,{className:"group",value:e.slug,onSelect:()=>r(e.slug),children:[s.jsx("span",{className:"flex-1 truncate",children:e.name}),a?s.jsxs("button",{"aria-label":`Edit label ${e.name}`,className:"relative ml-1 flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground",type:"button",onClick:i=>{i.stopPropagation(),i.preventDefault(),n()},children:[t&&s.jsx(vt,{className:"absolute size-3 text-primary transition-opacity duration-150 group-hover:opacity-0"}),s.jsx(nr,{className:"absolute size-3 translate-x-2 opacity-0 transition-all duration-150 ease-out group-hover:translate-x-0 group-hover:opacity-100"})]}):t&&s.jsx(vt,{className:"size-4 shrink-0 text-primary"})]}),ps=({labels:e,selectedSlugs:t,search:a,onToggle:r,onEdit:n,onDelete:i,isDuplicateName:u,canCreateFromSearch:d,onCreate:c,isCreating:f,onSearchClear:v})=>{const[j,C]=m.useState(null),k=a.trim().toLowerCase(),L=k?e.filter(g=>g.name.toLowerCase().includes(k)):e,w=!!c&&a.trim()&&d?.(a),x=!!n,A=async()=>{if(c){const g=await c(a.trim());g&&r(g.slug),v?.()}},P=async(g,b)=>{n&&await n(g,b)},N=async g=>{i&&(await i(g),C(null))};return s.jsxs(s.Fragment,{children:[!w&&L.length===0&&s.jsx(is,{children:"No labels found"}),L.length>0&&s.jsx(Et,{className:"[&_[cmdk-group-heading]]:hidden",children:L.map(g=>j===g.id?s.jsx(Kr,{isDuplicateName:u,label:g,onCancel:()=>C(null),onDelete:N,onSave:P},g.id):s.jsx(qr,{isSelected:t.includes(g.slug),label:g,showEdit:x,onEditClick:()=>C(g.id),onToggle:r},g.id))}),w&&s.jsx(Et,{className:"[&_[cmdk-group-heading]]:hidden",children:s.jsxs(pt,{disabled:f,onSelect:A,children:[s.jsx(Os,{className:"size-4"}),f?"Creating...":`Create "${a.trim()}"`]})})]})},hs=({labels:e,onToggle:t})=>s.jsx(s.Fragment,{children:e.map(a=>s.jsxs(Zt,{className:"cursor-pointer gap-1 pr-1",variant:"outline",onClick:r=>{r.stopPropagation(),t(a.slug)},children:[a.name,s.jsx(ot,{className:"size-3"})]},a.id))}),Xe=({labels:e,selectedSlugs:t,resolvedSelectedLabels:a,isLoading:r,onToggle:n,searchValue:i,onSearchChange:u,canCreateFromSearch:d,onCreate:c,isCreating:f,onEdit:v,onDelete:j,isDuplicateName:C,inline:k=!1,align:L="start"})=>{const w=a||t.map(x=>e.find(A=>A.slug===x)).filter(x=>!!x);return k?s.jsx(Qr,{align:L,canCreateFromSearch:d,isCreating:f,isDuplicateName:C,isLoading:r,labels:e,searchValue:i,selectedLabels:w,selectedSlugs:t,onCreate:c,onDelete:j,onEdit:v,onSearchChange:u,onToggle:n}):s.jsx(Xr,{canCreateFromSearch:d,isCreating:f,isDuplicateName:C,isLoading:r,labels:e,searchValue:i,selectedLabels:w,selectedSlugs:t,onCreate:c,onDelete:j,onEdit:v,onSearchChange:u,onToggle:n})},Qr=({labels:e,selectedLabels:t,selectedSlugs:a,onToggle:r,isLoading:n,align:i="start",searchValue:u,onSearchChange:d,canCreateFromSearch:c,onCreate:f,isCreating:v,onEdit:j,onDelete:C,isDuplicateName:k})=>{const L=m.useRef(null),[w,x]=m.useState(0),A=m.useCallback(()=>{const N=L.current,g=N?.parentElement;if(N&&g){const b=N.getBoundingClientRect(),y=g.getBoundingClientRect();x(Math.round(y.left-b.left))}},[]),P=t.length===0?"Select...":t.length===1?t[0].name:`${t.length} labels`;return s.jsxs(qt,{onOpenChange:N=>{N&&A()},children:[s.jsx(Qt,{asChild:!0,children:s.jsx("button",{ref:L,className:"flex size-full items-center truncate text-left text-sm",type:"button",children:P})}),s.jsx(Jt,{align:i,alignOffset:w,className:"w-64 p-0",children:n?s.jsx("div",{className:"flex items-center justify-center py-6 text-sm text-muted-foreground",children:"Loading labels..."}):s.jsx(Jr,{canCreateFromSearch:c,isCreating:v,isDuplicateName:k,labels:e,searchValue:u,selectedLabels:t,selectedSlugs:a,onCreate:f,onDelete:C,onEdit:j,onSearchChange:d,onToggle:r})})]})},Jr=({selectedLabels:e,searchValue:t,onSearchChange:a,...r})=>{const{search:n,handleSearchChange:i}=fs(t,a);return s.jsxs(mt,{shouldFilter:!1,children:[e.length>0&&s.jsx("div",{className:"flex flex-wrap gap-1.5 border-b px-3 py-2",children:s.jsx(hs,{labels:e,onToggle:r.onToggle})}),s.jsxs("div",{className:"flex items-center border-b px-3",children:[s.jsx(Xt,{className:"mr-2 size-4 shrink-0 opacity-50"}),s.jsx("input",{className:"flex h-9 w-full bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground",placeholder:"Search labels...",value:n,onChange:u=>i(u.target.value)})]}),s.jsx(ft,{className:"max-h-64 overflow-y-auto",children:s.jsx(ps,{...r,search:n,onSearchClear:()=>i("")})})]})},Xr=({labels:e,selectedLabels:t,selectedSlugs:a,onToggle:r,isLoading:n,searchValue:i,onSearchChange:u,canCreateFromSearch:d,onCreate:c,isCreating:f,onEdit:v,onDelete:j,isDuplicateName:C})=>{const[k,L]=m.useState(!1),{search:w,handleSearchChange:x}=fs(i,u),A=m.useRef(null),P=m.useRef(null);m.useEffect(()=>{if(!k)return;const g=b=>{P.current&&!P.current.contains(b.target)&&L(!1)};return document.addEventListener("pointerdown",g),()=>document.removeEventListener("pointerdown",g)},[k]);const N=g=>{g.key==="Backspace"&&!w&&a.length>0&&r(a[a.length-1]),g.key==="Escape"&&(L(!1),A.current?.blur())};return s.jsxs("div",{ref:P,className:"relative",children:[s.jsxs("div",{className:"flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-md border border-transparent bg-gray-150 px-3 py-1 text-sm transition-colors focus-within:border-green focus-within:bg-transparent focus-within:shadow-[0_0_0_2px_rgba(48,207,67,.25)] dark:bg-gray-900",role:"combobox",onClick:()=>{A.current?.focus(),L(!0)},children:[s.jsx(hs,{labels:t,onToggle:r}),s.jsx("input",{ref:A,className:"min-w-[80px] flex-1 bg-transparent text-sm outline-hidden placeholder:text-muted-foreground",placeholder:t.length===0?"Search labels...":"",value:w,onChange:g=>{x(g.target.value),k||L(!0)},onFocus:()=>L(!0),onKeyDown:N})]}),k&&s.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:n?s.jsx("div",{className:"flex items-center justify-center py-6 text-sm text-muted-foreground",children:"Loading labels..."}):s.jsx(mt,{shouldFilter:!1,children:s.jsx(ft,{className:"max-h-64 overflow-y-auto",children:s.jsx(ps,{canCreateFromSearch:d,isCreating:f,isDuplicateName:C,labels:e,search:w,selectedSlugs:a,onCreate:c,onDelete:j,onEdit:v,onSearchClear:()=>x(""),onToggle:r})})})})]})},Ze="LabelsResponseType",Zr=Ds({dataType:Ze,path:"/labels/",defaultNextPageParams:(e,t)=>{var a;if((a=e.meta)!=null&&a.pagination.next)return{...t,page:e.meta.pagination.next.toString()}},returnData:e=>{const{pages:t}=e,a=t.flatMap(n=>n.labels),r=t[t.length-1].meta;return{labels:a,meta:r,isEnd:r?r.pagination.pages===r.pagination.page:!0}}}),ea=ct({method:"POST",path:()=>"/labels/",body:e=>({labels:[e]}),invalidateQueries:{dataType:Ze}}),ta=ct({method:"PUT",path:e=>`/labels/${e.id}/`,body:e=>({labels:[e]}),invalidateQueries:{dataType:Ze}}),sa=ct({method:"DELETE",path:e=>`/labels/${e}/`,invalidateQueries:{dataType:Ze}}),ra=()=>{};function aa(e){return function(){const r=e.useRemoteSource({enabled:!0}).useInitialBrowse(),[n,i]=m.useState(null);m.useEffect(()=>{n!==null||!r.pagination||i(r.pagination.total<=e.pageLimit||r.pagination.next===null?"local":"remote")},[n,r.pagination]);const u=e.useLocalSource(r,{enabled:n==="local"}),d=e.useRemoteSource({enabled:n==="remote"}),c=f=>{const v=u.useOptions(f),j=d.useOptions(f);return n===null?{options:[],isInitialLoad:r.isLoading,isSearching:!1,isLoadingMore:!1,hasMore:!1,loadMore:ra}:n==="remote"?j:v};return{id:e.id,useOptions:c}}}const bs="100";function lt(e){return{value:e.slug,label:e.name,metadata:{id:e.id}}}function na(e,t){const{enabled:a=!0}=t;return{id:"posts.labels.local",useOptions:({query:n,selectedValues:i})=>{const u=(e.items||[]).map(lt),d=i.map(c=>{const f=e.items?.find(v=>v.slug===c);return f?lt(f):{value:c,label:c}});return a?{options:or(d,os(u,n)),isInitialLoad:e.isLoading&&u.length===0,isSearching:!1,isLoadingMore:!1,hasMore:!1,loadMore:()=>{}}:{options:[],isInitialLoad:!1,isSearching:!1,isLoadingMore:!1,hasMore:!1,loadMore:()=>{}}}}}const ia=ls({id:"posts.labels.remote",buildBrowseSearchParams:e=>({limit:bs,order:"name asc",...e?{filter:`name:~${Le(e)}`}:{}}),buildHydrateFilter:e=>lr("slug",e),buildHydrateSearchParams:e=>({filter:e,order:"name asc"}),selectItems:e=>e?.labels,useQuery:({enabled:e,searchParams:t})=>Zr({enabled:e,keepPreviousData:!0,searchParams:t}),toOption:lt,debounceMs:250}),la=aa({id:"posts.labels.hybrid",pageLimit:Number(bs),useLocalSource:na,useRemoteSource:ia});function gs(){return la()}function et({selectedSlugs:e,onSelectionChange:t,valueSource:a}){const r=gs(),n=a??r,[i,u]=m.useState(""),d=n.useOptions({query:i,selectedValues:e}),c=m.useMemo(()=>d.options.flatMap(g=>g.metadata?.id?[{id:String(g.metadata.id),name:g.label,slug:String(g.value),created_at:"",updated_at:""}]:[]),[d.options]),{mutateAsync:f,isLoading:v}=ea(),{mutateAsync:j}=ta(),{mutateAsync:C}=sa(),k=m.useRef(e);k.current=e;const L=m.useCallback(g=>{const b=k.current;b.includes(g)?t(b.filter(y=>y!==g)):t([...b,g])},[t]),w=m.useCallback((g,b)=>{const y=g.trim().toLowerCase();return c.some(h=>h.name.toLowerCase()===y&&h.id!==b)},[c]),x=m.useCallback(g=>{const b=g.trim();return b?!w(b):!1},[w]),A=m.useCallback(async g=>{const b=g.trim();return!b||w(b)?void 0:(await f({name:b}))?.labels?.[0]},[f,w]),P=m.useCallback(async(g,b)=>{const y=b.trim();if(!y||w(y,g))return;const h=c.find(p=>p.id===g),l=(await j({id:g,name:y}))?.labels?.[0];if(h&&l&&h.slug!==l.slug){const p=k.current;p.includes(h.slug)&&t(p.map(E=>E===h.slug?l.slug:E))}},[j,w,c,t]),N=m.useCallback(async g=>{const b=c.find(y=>y.id===g);if(await C(g),b){const y=k.current;y.includes(b.slug)&&t(y.filter(h=>h!==b.slug))}},[C,c,t]);return{labels:c,selectedSlugs:e,resolvedSelectedLabels:e.map(g=>c.find(b=>b.slug===g)).filter(g=>!!g),isLoading:d.isInitialLoad,searchValue:i,onSearchChange:u,toggleLabel:L,createLabel:A,editLabel:P,deleteLabel:N,isDuplicateName:w,canCreateFromSearch:x,isCreating:v}}const oa=({field:e,values:t,onChange:a})=>{const r=et({selectedSlugs:t,onSelectionChange:a,valueSource:e.valueSource});return s.jsx(Xe,{isDuplicateName:r.isDuplicateName,isLoading:r.isLoading,labels:r.labels,resolvedSelectedLabels:r.resolvedSelectedLabels,searchValue:r.searchValue,selectedSlugs:r.selectedSlugs,inline:!0,onCreate:r.createLabel,onDelete:r.deleteLabel,onEdit:r.editLabel,onSearchChange:r.onSearchChange,onToggle:r.toggleLabel})};function ca({open:e,memberCount:t,onOpenChange:a,onConfirm:r,isLoading:n=!1}){const[i,u]=m.useState([]),d=et({selectedSlugs:i,onSelectionChange:u}),c=m.useCallback(v=>{v||u([]),a(v)},[a]),f=()=>{const v=d.labels.filter(j=>i.includes(j.slug)).map(j=>j.id);v.length>0&&r(v)};return s.jsx(Ie,{open:e,onOpenChange:c,children:s.jsxs(Pe,{className:"gap-5",onOpenAutoFocus:v=>v.preventDefault(),children:[s.jsx(Te,{children:s.jsxs(Fe,{children:["Add label to ",t.toLocaleString()," ",t===1?"member":"members"]})}),s.jsx(Xe,{canCreateFromSearch:d.canCreateFromSearch,isCreating:d.isCreating,isDuplicateName:d.isDuplicateName,isLoading:d.isLoading,labels:d.labels,resolvedSelectedLabels:d.resolvedSelectedLabels,searchValue:d.searchValue,selectedSlugs:i,onCreate:d.createLabel,onDelete:d.deleteLabel,onEdit:d.editLabel,onSearchChange:d.onSearchChange,onToggle:d.toggleLabel}),s.jsxs(ge,{children:[s.jsx(U,{variant:"outline",onClick:()=>c(!1),children:"Cancel"}),s.jsx(U,{disabled:i.length===0||n,onClick:f,children:n?"Adding...":i.length>1?`Add ${i.length} labels`:"Add label"})]})]})})}function ua({open:e,memberCount:t,nql:a,search:r,onOpenChange:n,onConfirm:i,isLoading:u=!1}){const[d,c]=m.useState([]),{data:f,isLoading:v}=As({searchParams:{...a?{filter:a}:{},...r?{search:r}:{},include:"labels",limit:"all",fields:"id"},enabled:e}),j=m.useMemo(()=>{const x=new Set;for(const A of f?.members||[])for(const P of A.labels||[])x.add(P.slug);return x},[f]),C=et({selectedSlugs:d,onSelectionChange:c}),k=m.useMemo(()=>C.labels.filter(x=>j.has(x.slug)),[C.labels,j]),L=m.useCallback(x=>{x||c([]),n(x)},[n]),w=()=>{const x=C.labels.filter(A=>d.includes(A.slug)).map(A=>A.id);x.length>0&&i(x)};return s.jsx(Ie,{open:e,onOpenChange:L,children:s.jsxs(Pe,{className:"gap-5",onOpenAutoFocus:x=>x.preventDefault(),children:[s.jsx(Te,{children:s.jsxs(Fe,{children:["Remove label from ",t.toLocaleString()," ",t===1?"member":"members"]})}),s.jsx(Xe,{isDuplicateName:C.isDuplicateName,isLoading:C.isLoading||v,labels:k,resolvedSelectedLabels:C.resolvedSelectedLabels.filter(x=>j.has(x.slug)),searchValue:C.searchValue,selectedSlugs:d,onDelete:C.deleteLabel,onEdit:C.editLabel,onSearchChange:C.onSearchChange,onToggle:C.toggleLabel}),s.jsxs(ge,{children:[s.jsx(U,{variant:"outline",onClick:()=>L(!1),children:"Cancel"}),s.jsx(U,{disabled:d.length===0||u,onClick:w,children:u?"Removing...":d.length>1?`Remove ${d.length} labels`:"Remove label"})]})]})})}function da({open:e,newsletters:t,memberCount:a,onOpenChange:r,onConfirm:n,isLoading:i=!1}){const[u,d]=m.useState("all"),[c,f]=m.useState([]),[v,j]=m.useState(""),[C,k]=m.useState(!1),L=m.useRef(null),w=m.useRef(null);m.useEffect(()=>{e||(d("all"),f([]),j(""),k(!1))},[e]),m.useEffect(()=>{if(!C)return;const y=h=>{L.current&&!L.current.contains(h.target)&&k(!1)};return document.addEventListener("pointerdown",y),()=>document.removeEventListener("pointerdown",y)},[C]);const x=y=>{y||(d("all"),f([]),j(""),k(!1)),r(y)},A=m.useCallback(y=>{f(h=>h.includes(y)?h.filter(o=>o!==y):[...h,y])},[]),P=t.length>=2,N=()=>{n(!P||u==="all"?null:c)},g=i||P&&u==="selected"&&c.length===0,b=a===1?"member":"members";return s.jsx(Ie,{open:e,onOpenChange:x,children:s.jsxs(Pe,{className:"gap-5",children:[s.jsx(Te,{children:s.jsx(Fe,{children:"Unsubscribe members"})}),P?s.jsxs(s.Fragment,{children:[s.jsxs("div",{"aria-label":"Unsubscribe scope",className:"flex flex-col gap-3",role:"radiogroup",children:[s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{checked:u==="all",className:"mt-0.5 size-4 cursor-pointer accent-black",name:"unsubscribe-mode",type:"radio",value:"all",onChange:()=>d("all")}),s.jsxs("div",{className:"flex flex-col",children:[s.jsx("span",{className:"text-sm font-semibold",children:"Unsubscribe from all newsletters"}),s.jsxs("span",{className:"text-sm text-muted-foreground",children:[a.toLocaleString()," ",b," will be unsubscribed from"," ",t.length," ",t.length===1?"newsletter":"newsletters","."]})]})]}),s.jsxs("label",{className:"flex cursor-pointer items-start gap-3",children:[s.jsx("input",{checked:u==="selected",className:"mt-0.5 size-4 cursor-pointer accent-black",name:"unsubscribe-mode",type:"radio",value:"selected",onChange:()=>d("selected")}),s.jsxs("div",{className:"flex flex-col",children:[s.jsx("span",{className:"text-sm font-semibold",children:"Unsubscribe from selected newsletters"}),s.jsxs("span",{className:"text-sm text-muted-foreground",children:["Select which newsletters to unsubscribe"," ",a.toLocaleString()," ",b," from."]})]})]})]}),u==="selected"&&s.jsxs("div",{ref:L,className:"relative space-y-2",children:[s.jsx("label",{className:"text-sm font-semibold",htmlFor:"newsletter-search",children:"Newsletters"}),s.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:()=>{w.current?.focus(),k(!0)},children:[c.map(y=>{const h=t.find(o=>o.id===y);return h?s.jsxs(Zt,{className:"cursor-pointer gap-1 pr-1",variant:"outline",onClick:o=>{o.stopPropagation(),A(y)},children:[h.name,s.jsx(ot,{className:"size-3"})]},y):null}),s.jsx("input",{ref:w,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:v,onChange:y=>{j(y.target.value),C||k(!0)},onFocus:()=>k(!0),onKeyDown:y=>{y.key==="Escape"&&(k(!1),w.current?.blur()),y.key==="Backspace"&&!v&&c.length>0&&A(c[c.length-1])}})]}),C&&s.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:s.jsx(mt,{shouldFilter:!1,children:s.jsxs(ft,{className:"max-h-64 overflow-y-auto",children:[s.jsx(is,{children:"No newsletters found."}),t.filter(y=>y.name.toLowerCase().includes(v.toLowerCase())).map(y=>s.jsxs(pt,{value:y.name,onSelect:()=>A(y.id),children:[y.name,c.includes(y.id)&&s.jsx(rr,{})]},y.id))]})})})]})]}):s.jsxs("p",{className:"text-sm text-muted-foreground",children:["Are you sure you want to unsubscribe"," ",a.toLocaleString()," ",b," from all newsletters? They will no longer receive any email newsletters from you."]}),s.jsxs(ge,{children:[s.jsx(U,{variant:"outline",onClick:()=>x(!1),children:"Cancel"}),s.jsx(U,{disabled:g,variant:"destructive",onClick:N,children:i?"Unsubscribing...":"Unsubscribe"})]})]})})}function ma({open:e,memberCount:t,onOpenChange:a,onConfirm:r,onExportBackup:n,isLoading:i=!1}){const[u,d]=m.useState(!1),c=v=>{v||d(!1),a(v)},f=async()=>{if(!(t<1||i||u))try{d(!0),await n(),r()}catch{}finally{d(!1)}};return s.jsx(Ie,{open:e,onOpenChange:c,children:s.jsxs(Pe,{className:"gap-5",children:[s.jsx(Te,{children:s.jsx(Fe,{children:"Delete selected members?"})}),s.jsx("div",{className:"text-sm",children:t>0?s.jsxs(s.Fragment,{children:[s.jsxs("p",{children:["You're about to delete ",s.jsxs("strong",{children:[t.toLocaleString()," ",t===1?"member":"members"]}),". This is permanent! All Ghost data will be deleted, this will have no effect on subscriptions in Stripe."]}),s.jsx("p",{className:"mt-4",children:"A backup of your selection will be automatically downloaded to your device before deletion."})]}):s.jsx("p",{children:"No members are selected."})}),s.jsxs(ge,{children:[s.jsx(U,{variant:"outline",onClick:()=>c(!1),children:"Cancel"}),s.jsx(U,{disabled:i||u||t<1,variant:"destructive",onClick:f,children:i||u?"Deleting...":"Download backup & delete members"})]})]})})}function fa({fileError:e,onClose:t,onDropAccepted:a,onDropRejected:r}){return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"mt-5 space-y-5",children:[s.jsxs(Is,{variant:"info",children:["Need some help? ",s.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 ",s.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&&s.jsxs("div",{className:"flex items-start gap-2 text-sm text-red-600",children:[s.jsx(es,{className:"mt-0.5 size-4 shrink-0"}),s.jsx("p",{children:e})]}),s.jsx(mr,{accept:{"text/csv":[".csv"],"application/vnd.ms-excel":[".csv"]},"aria-label":"Select or drop a CSV file",onDropAccepted:n=>{const i=n[0];i&&a(i)},onDropRejected:r,children:({isDragActive:n,isDragReject:i})=>s.jsxs(s.Fragment,{children:[s.jsx(cs,{className:"mb-2 size-6 text-grey-600"}),s.jsx("span",{className:"text-sm text-grey-700",children:i?"The file type you uploaded is not supported":n?"Drop CSV file to upload":"Select or drop a CSV file"})]})})]}),s.jsx(ge,{className:"mt-5",children:s.jsx(U,{variant:"outline",onClick:t,children:"Close"})})]})}const pa=[{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"}],ha=["email","name","note","subscribed_to_emails","complimentary_plan","stripe_customer_id","labels","created_at"],ba=["email"],ga=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;class bt{_mapping;constructor(t){if(this._mapping={},t)for(const[a,r]of Object.entries(t))this._mapping[r]=a}get(t){return this._mapping[t]??null}toJSON(){return{...this._mapping}}getKeyByValue(t){for(const[a,r]of Object.entries(this._mapping))if(r===t)return a;return null}updateMapping(t,a){const r=new bt({});if(r._mapping={...this._mapping},a)for(const n in r._mapping)r._mapping[n]===a&&(r._mapping[n]=null);return r._mapping[t]=a,r}}function xa(e,t=30){if(!e||e.length<=t)return e;const a=[];return Object.keys(e[0]).forEach(n=>{const i=e.filter(d=>d[n]&&d[n].trim()!=="");let u=[];if(i.length<=t)u=i;else{const d=Math.floor(t/3),c=d,f=t-d-c,v=i.slice(0,d),j=c>0?i.slice(-c):[],C=Math.max(0,Math.floor(i.length/2)-Math.floor(f/2)),k=i.slice(C,C+f);u=[...v,...k,...j].slice(0,t)}u.forEach((d,c)=>{a[c]||(a[c]={}),a[c][n]=d[n]})}),a}function ya(e){const t=xa(e),a={};if(e.length>0)for(const n of Object.keys(e[0])){if(!a.name&&/name/i.test(n)){a.name=n;continue}!a[n]&&ha.includes(n)&&!ba.includes(n)&&(a[n]=n)}let r=0;for(;r<=t.length-1&&!a.email;){const n=t[r];for(const[i,u]of Object.entries(n))!a.email&&u&&ga.test(u)&&(a.email=i);r+=1}return a}function va(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:[^,]*/,"Could not find Stripe customer")}function wa({status:e,fileData:t,mapping:a,mappingError:r,showMappingErrors:n,membersCount:i,dataPreviewIndex:u,hasPrevRecord:d,hasNextRecord:c,labelPicker:f,onUpdateMapping:v,onDataPreviewIndexChange:j,onStartOver:C,onUpload:k}){const L=t&&t.length>0&&a?Object.entries(t[u]||{}).map(([w,x])=>({key:w,value:x,mapTo:a.get(w)})):[];return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"mt-5 space-y-5",children:t===null?s.jsx("div",{className:"flex items-center justify-center rounded-md border bg-muted p-10",children:s.jsx(Ke,{size:"md"})}):s.jsxs(s.Fragment,{children:[s.jsx("div",{className:ae("overflow-hidden rounded-md border",n&&r&&"border-red-500"),children:s.jsx("div",{className:"max-h-[400px] overflow-auto",children:s.jsxs(qe,{className:"table-fixed",children:[s.jsx(ht,{children:s.jsxs(je,{children:[s.jsx(pe,{className:"w-1/3",children:"Field"}),s.jsx(pe,{className:"w-1/3",children:s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsxs("span",{children:["Sample data ",s.jsxs("span",{className:"text-muted-foreground",children:["(#",(u+1).toLocaleString(),")"]})]}),s.jsxs("div",{className:"flex items-center",children:[s.jsx("button",{"aria-label":"Show previous sample row",className:ae("rounded p-0.5 hover:bg-muted",!d&&"cursor-default opacity-30"),disabled:!d||e==="UPLOADING",type:"button",onClick:()=>j(u-1),children:s.jsx(Ps,{className:"size-4"})}),s.jsx("button",{"aria-label":"Show next sample row",className:ae("rounded p-0.5 hover:bg-muted",!c&&"cursor-default opacity-30"),disabled:!c||e==="UPLOADING",type:"button",onClick:()=>j(u+1),children:s.jsx(Ts,{className:"size-4"})})]})]})}),s.jsx(pe,{className:"w-1/3",children:"Import as"})]})}),s.jsx(us,{children:L.length>0?L.map(w=>s.jsxs(je,{className:ae(!w.mapTo&&"bg-muted"),children:[s.jsx(de,{className:"text-sm font-medium break-all",children:w.key}),s.jsx(de,{className:ae("break-all text-sm",!w.value&&"text-muted-foreground"),children:w.value||" "}),s.jsx(de,{children:s.jsxs(Cr,{disabled:e==="UPLOADING",value:w.mapTo||"__not_imported__",onValueChange:x=>{v(w.key,x==="__not_imported__"?null:x)},children:[s.jsx(kr,{className:ae("h-8 text-sm",!w.mapTo&&"text-muted-foreground"),children:s.jsx(Lr,{})}),s.jsxs(Mr,{children:[s.jsx(Nt,{value:"__not_imported__",children:"Not imported"}),pa.map(x=>s.jsx(Nt,{value:x.value,children:x.label},x.value))]})]})})]},w.key)):s.jsx(je,{children:s.jsx(de,{className:"text-muted-foreground",colSpan:3,children:"No data found in the uploaded CSV."})})})]})})}),n&&r&&s.jsx("p",{className:"text-sm text-red-600",children:r}),i>0&&s.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."}),s.jsxs("div",{className:"mt-5",children:[s.jsx("label",{className:"mb-1 block text-sm font-semibold",children:"Label these members"}),s.jsx(Xe,{canCreateFromSearch:f.canCreateFromSearch,isCreating:f.isCreating,isDuplicateName:f.isDuplicateName,isLoading:f.isLoading,labels:f.labels,resolvedSelectedLabels:f.resolvedSelectedLabels,searchValue:f.searchValue,selectedSlugs:f.selectedSlugs,onCreate:f.createLabel,onDelete:f.deleteLabel,onEdit:f.editLabel,onSearchChange:f.onSearchChange,onToggle:f.toggleLabel})]})]})}),s.jsxs(ge,{className:"mt-5",children:[s.jsx(U,{disabled:e==="UPLOADING",variant:"outline",onClick:C,children:"Start over"}),s.jsx(U,{disabled:e==="UPLOADING"||i===0,onClick:k,children:e==="UPLOADING"?s.jsxs("span",{className:"flex items-center gap-2",children:[s.jsx(Ke,{color:"light",size:"sm"}),"Uploading"]}):i>0?`Import ${i.toLocaleString()} ${i===1?"member":"members"}`:"Import members"})]})]})}function _a({onUploadAnotherFile:e,onClose:t}){return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"mt-5",children:s.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."})}),s.jsxs(ge,{className:"mt-5",children:[s.jsx(U,{variant:"outline",onClick:e,children:"Upload another file"}),s.jsx(U,{onClick:t,children:"Got it"})]})]})}function Sa({importResponse:e,onReset:t,onClose:a}){return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"mt-5 space-y-4",children:[e.importedCount===0?s.jsxs("p",{className:"text-sm",children:["No members were added",e.errorCount>0?" due to the following errors:":"."]}):s.jsxs("p",{className:"text-sm",children:["A total of ",s.jsx("strong",{children:e.importedCount.toLocaleString()})," ",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&&s.jsxs(s.Fragment,{children:[e.importedCount>0&&s.jsxs(s.Fragment,{children:[s.jsx("hr",{className:"border-grey-200"}),s.jsxs("p",{className:"text-sm",children:[s.jsx("strong",{children:e.errorCount.toLocaleString()})," ",e.errorCount===1?"member was":"members were"," skipped due to the following errors:"]})]}),s.jsx("ul",{className:"list-inside list-disc space-y-1 text-sm text-muted-foreground",children:e.errorList.map(r=>s.jsxs("li",{children:[r.message," (",r.count,")"]},r.message))})]})]}),s.jsx(ge,{className:"mt-5",children:e.errorCount>0?s.jsxs(s.Fragment,{children:[s.jsx(U,{variant:"outline",asChild:!0,children:s.jsx("a",{download:e.errorCsvName,href:e.errorCsvUrl,children:"Download error file"})}),e.importedCount===0?s.jsx(U,{onClick:t,children:"Try again"}):s.jsx(U,{onClick:a,children:"View members"})]}):s.jsx(s.Fragment,{children:e.importedCount===0?s.jsxs(s.Fragment,{children:[s.jsx(U,{variant:"outline",onClick:a,children:"Close"}),s.jsx(U,{onClick:t,children:"Try again"})]}):s.jsxs(s.Fragment,{children:[s.jsx(U,{variant:"outline",onClick:t,children:"Upload another file"}),s.jsx(U,{onClick:a,children:"View members"})]})})})]})}function ja({errorMessage:e,showTryAgainButton:t,onTryAgain:a,onClose:r}){return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"mt-5",children:s.jsxs("div",{className:"flex items-start gap-2 text-sm text-red-600",children:[s.jsx(es,{className:"mt-0.5 size-4 shrink-0"}),s.jsx("p",{children:e})]})}),s.jsxs(ge,{className:"mt-5",children:[t&&s.jsx(U,{variant:"outline",onClick:a,children:"Try again"}),s.jsx(U,{onClick:r,children:"OK"})]})]})}var Ye={exports:{}};/* @license
|
|
2
|
+
Papa Parse
|
|
3
|
+
v5.3.2
|
|
4
|
+
https://github.com/mholt/PapaParse
|
|
5
|
+
License: MIT
|
|
6
|
+
*/var Ea=Ye.exports,kt;function Na(){return kt||(kt=1,(function(e,t){(function(a,r){e.exports=r()})(Ea,function a(){var r=typeof self<"u"?self:typeof window<"u"?window:r!==void 0?r:{},n=!r.document&&!!r.postMessage,i=n&&/blob:/i.test((r.location||{}).protocol),u={},d=0,c={parse:function(o,l){var p=(l=l||{}).dynamicTyping||!1;if(h(p)&&(l.dynamicTypingFunction=p,p={}),l.dynamicTyping=p,l.transform=!!h(l.transform)&&l.transform,l.worker&&c.WORKERS_SUPPORTED){var E=(function(){if(!c.WORKERS_SUPPORTED)return!1;var I=(G=r.URL||r.webkitURL||null,_=a.toString(),c.BLOB_URL||(c.BLOB_URL=G.createObjectURL(new Blob(["(",_,")();"],{type:"text/javascript"})))),T=new r.Worker(I),G,_;return T.onmessage=P,T.id=d++,u[T.id]=T})();return E.userStep=l.step,E.userChunk=l.chunk,E.userComplete=l.complete,E.userError=l.error,l.step=h(l.step),l.chunk=h(l.chunk),l.complete=h(l.complete),l.error=h(l.error),delete l.worker,void E.postMessage({input:o,config:l,workerId:E.id})}var M=null;return c.NODE_STREAM_INPUT,typeof o=="string"?M=l.download?new j(l):new k(l):o.readable===!0&&h(o.read)&&h(o.on)?M=new L(l):(r.File&&o instanceof File||o instanceof Object)&&(M=new C(l)),M.stream(o)},unparse:function(o,l){var p=!1,E=!0,M=",",I=`\r
|
|
7
|
+
`,T='"',G=T+T,_=!1,S=null,B=!1;(function(){if(typeof l=="object"){if(typeof l.delimiter!="string"||c.BAD_DELIMITERS.filter(function(R){return l.delimiter.indexOf(R)!==-1}).length||(M=l.delimiter),(typeof l.quotes=="boolean"||typeof l.quotes=="function"||Array.isArray(l.quotes))&&(p=l.quotes),typeof l.skipEmptyLines!="boolean"&&typeof l.skipEmptyLines!="string"||(_=l.skipEmptyLines),typeof l.newline=="string"&&(I=l.newline),typeof l.quoteChar=="string"&&(T=l.quoteChar),typeof l.header=="boolean"&&(E=l.header),Array.isArray(l.columns)){if(l.columns.length===0)throw new Error("Option columns is empty");S=l.columns}l.escapeChar!==void 0&&(G=l.escapeChar+T),(typeof l.escapeFormulae=="boolean"||l.escapeFormulae instanceof RegExp)&&(B=l.escapeFormulae instanceof RegExp?l.escapeFormulae:/^[=+\-@\t\r].*$/)}})();var O=new RegExp(x(T),"g");if(typeof o=="string"&&(o=JSON.parse(o)),Array.isArray(o)){if(!o.length||Array.isArray(o[0]))return te(null,o,_);if(typeof o[0]=="object")return te(S||Object.keys(o[0]),o,_)}else if(typeof o=="object")return typeof o.data=="string"&&(o.data=JSON.parse(o.data)),Array.isArray(o.data)&&(o.fields||(o.fields=o.meta&&o.meta.fields||S),o.fields||(o.fields=Array.isArray(o.data[0])?o.fields:typeof o.data[0]=="object"?Object.keys(o.data[0]):[]),Array.isArray(o.data[0])||typeof o.data[0]=="object"||(o.data=[o.data])),te(o.fields||[],o.data||[],_);throw new Error("Unable to serialize unrecognized input");function te(R,V,J){var H="";typeof R=="string"&&(R=JSON.parse(R)),typeof V=="string"&&(V=JSON.parse(V));var se=Array.isArray(R)&&0<R.length,ee=!Array.isArray(V[0]);if(se&&E){for(var re=0;re<R.length;re++)0<re&&(H+=M),H+=q(R[re],re);0<V.length&&(H+=I)}for(var D=0;D<V.length;D++){var W=se?R.length:V[D].length,Y=!1,X=se?Object.keys(V[D]).length===0:V[D].length===0;if(J&&!se&&(Y=J==="greedy"?V[D].join("").trim()==="":V[D].length===1&&V[D][0].length===0),J==="greedy"&&se){for(var $=[],z=0;z<W;z++){var Q=ee?R[z]:z;$.push(V[D][Q])}Y=$.join("").trim()===""}if(!Y){for(var F=0;F<W;F++){0<F&&!X&&(H+=M);var xe=se&&ee?R[F]:F;H+=q(V[D][xe],F)}D<V.length-1&&(!J||0<W&&!X)&&(H+=I)}}return H}function q(R,V){if(R==null)return"";if(R.constructor===Date)return JSON.stringify(R).slice(1,25);var J=!1;B&&typeof R=="string"&&B.test(R)&&(R="'"+R,J=!0);var H=R.toString().replace(O,G);return(J=J||p===!0||typeof p=="function"&&p(R,V)||Array.isArray(p)&&p[V]||(function(se,ee){for(var re=0;re<ee.length;re++)if(-1<se.indexOf(ee[re]))return!0;return!1})(H,c.BAD_DELIMITERS)||-1<H.indexOf(M)||H.charAt(0)===" "||H.charAt(H.length-1)===" ")?T+H+T:H}}};if(c.RECORD_SEP="",c.UNIT_SEP="",c.BYTE_ORDER_MARK="\uFEFF",c.BAD_DELIMITERS=["\r",`
|
|
8
|
+
`,'"',c.BYTE_ORDER_MARK],c.WORKERS_SUPPORTED=!n&&!!r.Worker,c.NODE_STREAM_INPUT=1,c.LocalChunkSize=10485760,c.RemoteChunkSize=5242880,c.DefaultDelimiter=",",c.Parser=A,c.ParserHandle=w,c.NetworkStreamer=j,c.FileStreamer=C,c.StringStreamer=k,c.ReadableStreamStreamer=L,r.jQuery){var f=r.jQuery;f.fn.parse=function(o){var l=o.config||{},p=[];return this.each(function(I){if(!(f(this).prop("tagName").toUpperCase()==="INPUT"&&f(this).attr("type").toLowerCase()==="file"&&r.FileReader)||!this.files||this.files.length===0)return!0;for(var T=0;T<this.files.length;T++)p.push({file:this.files[T],inputElem:this,instanceConfig:f.extend({},l)})}),E(),this;function E(){if(p.length!==0){var I,T,G,_,S=p[0];if(h(o.before)){var B=o.before(S.file,S.inputElem);if(typeof B=="object"){if(B.action==="abort")return I="AbortError",T=S.file,G=S.inputElem,_=B.reason,void(h(o.error)&&o.error({name:I},T,G,_));if(B.action==="skip")return void M();typeof B.config=="object"&&(S.instanceConfig=f.extend(S.instanceConfig,B.config))}else if(B==="skip")return void M()}var O=S.instanceConfig.complete;S.instanceConfig.complete=function(te){h(O)&&O(te,S.file,S.inputElem),M()},c.parse(S.file,S.instanceConfig)}else h(o.complete)&&o.complete()}function M(){p.splice(0,1),E()}}}function v(o){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},(function(l){var p=b(l);p.chunkSize=parseInt(p.chunkSize),l.step||l.chunk||(p.chunkSize=null),this._handle=new w(p),(this._handle.streamer=this)._config=p}).call(this,o),this.parseChunk=function(l,p){if(this.isFirstChunk&&h(this._config.beforeFirstChunk)){var E=this._config.beforeFirstChunk(l);E!==void 0&&(l=E)}this.isFirstChunk=!1,this._halted=!1;var M=this._partialLine+l;this._partialLine="";var I=this._handle.parse(M,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var T=I.meta.cursor;this._finished||(this._partialLine=M.substring(T-this._baseIndex),this._baseIndex=T),I&&I.data&&(this._rowCount+=I.data.length);var G=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(i)r.postMessage({results:I,workerId:c.WORKER_ID,finished:G});else if(h(this._config.chunk)&&!p){if(this._config.chunk(I,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);I=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(I.data),this._completeResults.errors=this._completeResults.errors.concat(I.errors),this._completeResults.meta=I.meta),this._completed||!G||!h(this._config.complete)||I&&I.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),G||I&&I.meta.paused||this._nextChunk(),I}this._halted=!0},this._sendError=function(l){h(this._config.error)?this._config.error(l):i&&this._config.error&&r.postMessage({workerId:c.WORKER_ID,error:l,finished:!1})}}function j(o){var l;(o=o||{}).chunkSize||(o.chunkSize=c.RemoteChunkSize),v.call(this,o),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(p){this._input=p,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(l=new XMLHttpRequest,this._config.withCredentials&&(l.withCredentials=this._config.withCredentials),n||(l.onload=y(this._chunkLoaded,this),l.onerror=y(this._chunkError,this)),l.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var p=this._config.downloadRequestHeaders;for(var E in p)l.setRequestHeader(E,p[E])}if(this._config.chunkSize){var M=this._start+this._config.chunkSize-1;l.setRequestHeader("Range","bytes="+this._start+"-"+M)}try{l.send(this._config.downloadRequestBody)}catch(I){this._chunkError(I.message)}n&&l.status===0&&this._chunkError()}},this._chunkLoaded=function(){l.readyState===4&&(l.status<200||400<=l.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:l.responseText.length,this._finished=!this._config.chunkSize||this._start>=(function(p){var E=p.getResponseHeader("Content-Range");return E===null?-1:parseInt(E.substring(E.lastIndexOf("/")+1))})(l),this.parseChunk(l.responseText)))},this._chunkError=function(p){var E=l.statusText||p;this._sendError(new Error(E))}}function C(o){var l,p;(o=o||{}).chunkSize||(o.chunkSize=c.LocalChunkSize),v.call(this,o);var E=typeof FileReader<"u";this.stream=function(M){this._input=M,p=M.slice||M.webkitSlice||M.mozSlice,E?((l=new FileReader).onload=y(this._chunkLoaded,this),l.onerror=y(this._chunkError,this)):l=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var M=this._input;if(this._config.chunkSize){var I=Math.min(this._start+this._config.chunkSize,this._input.size);M=p.call(M,this._start,I)}var T=l.readAsText(M,this._config.encoding);E||this._chunkLoaded({target:{result:T}})},this._chunkLoaded=function(M){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(M.target.result)},this._chunkError=function(){this._sendError(l.error)}}function k(o){var l;v.call(this,o=o||{}),this.stream=function(p){return l=p,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var p,E=this._config.chunkSize;return E?(p=l.substring(0,E),l=l.substring(E)):(p=l,l=""),this._finished=!l,this.parseChunk(p)}}}function L(o){v.call(this,o=o||{});var l=[],p=!0,E=!1;this.pause=function(){v.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){v.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(M){this._input=M,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){E&&l.length===1&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),l.length?this.parseChunk(l.shift()):p=!0},this._streamData=y(function(M){try{l.push(typeof M=="string"?M:M.toString(this._config.encoding)),p&&(p=!1,this._checkIsFinished(),this.parseChunk(l.shift()))}catch(I){this._streamError(I)}},this),this._streamError=y(function(M){this._streamCleanUp(),this._sendError(M)},this),this._streamEnd=y(function(){this._streamCleanUp(),E=!0,this._streamData("")},this),this._streamCleanUp=y(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function w(o){var l,p,E,M=Math.pow(2,53),I=-M,T=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,G=/^(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))$/,_=this,S=0,B=0,O=!1,te=!1,q=[],R={data:[],errors:[],meta:{}};if(h(o.step)){var V=o.step;o.step=function(D){if(R=D,se())H();else{if(H(),R.data.length===0)return;S+=D.data.length,o.preview&&S>o.preview?p.abort():(R.data=R.data[0],V(R,_))}}}function J(D){return o.skipEmptyLines==="greedy"?D.join("").trim()==="":D.length===1&&D[0].length===0}function H(){return R&&E&&(re("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+c.DefaultDelimiter+"'"),E=!1),o.skipEmptyLines&&(R.data=R.data.filter(function(D){return!J(D)})),se()&&(function(){if(!R)return;function D(Y,X){h(o.transformHeader)&&(Y=o.transformHeader(Y,X)),q.push(Y)}if(Array.isArray(R.data[0])){for(var W=0;se()&&W<R.data.length;W++)R.data[W].forEach(D);R.data.splice(0,1)}else R.data.forEach(D)})(),(function(){if(!R||!o.header&&!o.dynamicTyping&&!o.transform)return R;function D(Y,X){var $,z=o.header?{}:[];for($=0;$<Y.length;$++){var Q=$,F=Y[$];o.header&&(Q=$>=q.length?"__parsed_extra":q[$]),o.transform&&(F=o.transform(F,Q)),F=ee(Q,F),Q==="__parsed_extra"?(z[Q]=z[Q]||[],z[Q].push(F)):z[Q]=F}return o.header&&($>q.length?re("FieldMismatch","TooManyFields","Too many fields: expected "+q.length+" fields but parsed "+$,B+X):$<q.length&&re("FieldMismatch","TooFewFields","Too few fields: expected "+q.length+" fields but parsed "+$,B+X)),z}var W=1;return!R.data.length||Array.isArray(R.data[0])?(R.data=R.data.map(D),W=R.data.length):R.data=D(R.data,0),o.header&&R.meta&&(R.meta.fields=q),B+=W,R})()}function se(){return o.header&&q.length===0}function ee(D,W){return Y=D,o.dynamicTypingFunction&&o.dynamicTyping[Y]===void 0&&(o.dynamicTyping[Y]=o.dynamicTypingFunction(Y)),(o.dynamicTyping[Y]||o.dynamicTyping)===!0?W==="true"||W==="TRUE"||W!=="false"&&W!=="FALSE"&&((function(X){if(T.test(X)){var $=parseFloat(X);if(I<$&&$<M)return!0}return!1})(W)?parseFloat(W):G.test(W)?new Date(W):W===""?null:W):W;var Y}function re(D,W,Y,X){var $={type:D,code:W,message:Y};X!==void 0&&($.row=X),R.errors.push($)}this.parse=function(D,W,Y){var X=o.quoteChar||'"';if(o.newline||(o.newline=(function(Q,F){Q=Q.substring(0,1048576);var xe=new RegExp(x(F)+"([^]*?)"+x(F),"gm"),ue=(Q=Q.replace(xe,"")).split("\r"),oe=Q.split(`
|
|
9
|
+
`),ye=1<oe.length&&oe[0].length<ue[0].length;if(ue.length===1||ye)return`
|
|
10
|
+
`;for(var fe=0,ce=0;ce<ue.length;ce++)ue[ce][0]===`
|
|
11
|
+
`&&fe++;return fe>=ue.length/2?`\r
|
|
12
|
+
`:"\r"})(D,X)),E=!1,o.delimiter)h(o.delimiter)&&(o.delimiter=o.delimiter(D),R.meta.delimiter=o.delimiter);else{var $=(function(Q,F,xe,ue,oe){var ye,fe,ce,ne;oe=oe||[","," ","|",";",c.RECORD_SEP,c.UNIT_SEP];for(var ve=0;ve<oe.length;ve++){var ie=oe[ve],Ee=0,he=0,yt=0;ce=void 0;for(var Me=new A({comments:ue,delimiter:ie,newline:F,preview:10}).parse(Q),Be=0;Be<Me.data.length;Be++)if(xe&&J(Me.data[Be]))yt++;else{var Re=Me.data[Be].length;he+=Re,ce!==void 0?0<Re&&(Ee+=Math.abs(Re-ce),ce=Re):ce=Re}0<Me.data.length&&(he/=Me.data.length-yt),(fe===void 0||Ee<=fe)&&(ne===void 0||ne<he)&&1.99<he&&(fe=Ee,ye=ie,ne=he)}return{successful:!!(o.delimiter=ye),bestDelimiter:ye}})(D,o.newline,o.skipEmptyLines,o.comments,o.delimitersToGuess);$.successful?o.delimiter=$.bestDelimiter:(E=!0,o.delimiter=c.DefaultDelimiter),R.meta.delimiter=o.delimiter}var z=b(o);return o.preview&&o.header&&z.preview++,l=D,p=new A(z),R=p.parse(l,W,Y),H(),O?{meta:{paused:!0}}:R||{meta:{paused:!1}}},this.paused=function(){return O},this.pause=function(){O=!0,p.abort(),l=h(o.chunk)?"":l.substring(p.getCharIndex())},this.resume=function(){_.streamer._halted?(O=!1,_.streamer.parseChunk(l,!0)):setTimeout(_.resume,3)},this.aborted=function(){return te},this.abort=function(){te=!0,p.abort(),R.meta.aborted=!0,h(o.complete)&&o.complete(R),l=""}}function x(o){return o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function A(o){var l,p=(o=o||{}).delimiter,E=o.newline,M=o.comments,I=o.step,T=o.preview,G=o.fastMode,_=l=o.quoteChar===void 0||o.quoteChar===null?'"':o.quoteChar;if(o.escapeChar!==void 0&&(_=o.escapeChar),(typeof p!="string"||-1<c.BAD_DELIMITERS.indexOf(p))&&(p=","),M===p)throw new Error("Comment character same as delimiter");M===!0?M="#":(typeof M!="string"||-1<c.BAD_DELIMITERS.indexOf(M))&&(M=!1),E!==`
|
|
13
|
+
`&&E!=="\r"&&E!==`\r
|
|
14
|
+
`&&(E=`
|
|
15
|
+
`);var S=0,B=!1;this.parse=function(O,te,q){if(typeof O!="string")throw new Error("Input must be a string");var R=O.length,V=p.length,J=E.length,H=M.length,se=h(I),ee=[],re=[],D=[],W=S=0;if(!O)return ne();if(G||G!==!1&&O.indexOf(l)===-1){for(var Y=O.split(E),X=0;X<Y.length;X++){if(D=Y[X],S+=D.length,X!==Y.length-1)S+=E.length;else if(q)return ne();if(!M||D.substring(0,H)!==M){if(se){if(ee=[],oe(D.split(p)),ve(),B)return ne()}else oe(D.split(p));if(T&&T<=X)return ee=ee.slice(0,T),ne(!0)}}return ne()}for(var $=O.indexOf(p,S),z=O.indexOf(E,S),Q=new RegExp(x(_)+x(l),"g"),F=O.indexOf(l,S);;)if(O[S]!==l)if(M&&D.length===0&&O.substring(S,S+H)===M){if(z===-1)return ne();S=z+J,z=O.indexOf(E,S),$=O.indexOf(p,S)}else if($!==-1&&($<z||z===-1))D.push(O.substring(S,$)),S=$+V,$=O.indexOf(p,S);else{if(z===-1)break;if(D.push(O.substring(S,z)),ce(z+J),se&&(ve(),B))return ne();if(T&&ee.length>=T)return ne(!0)}else for(F=S,S++;;){if((F=O.indexOf(l,F+1))===-1)return q||re.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:ee.length,index:S}),fe();if(F===R-1)return fe(O.substring(S,F).replace(Q,l));if(l!==_||O[F+1]!==_){if(l===_||F===0||O[F-1]!==_){$!==-1&&$<F+1&&($=O.indexOf(p,F+1)),z!==-1&&z<F+1&&(z=O.indexOf(E,F+1));var xe=ye(z===-1?$:Math.min($,z));if(O.substr(F+1+xe,V)===p){D.push(O.substring(S,F).replace(Q,l)),O[S=F+1+xe+V]!==l&&(F=O.indexOf(l,S)),$=O.indexOf(p,S),z=O.indexOf(E,S);break}var ue=ye(z);if(O.substring(F+1+ue,F+1+ue+J)===E){if(D.push(O.substring(S,F).replace(Q,l)),ce(F+1+ue+J),$=O.indexOf(p,S),F=O.indexOf(l,S),se&&(ve(),B))return ne();if(T&&ee.length>=T)return ne(!0);break}re.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:ee.length,index:S}),F++}}else F++}return fe();function oe(ie){ee.push(ie),W=S}function ye(ie){var Ee=0;if(ie!==-1){var he=O.substring(F+1,ie);he&&he.trim()===""&&(Ee=he.length)}return Ee}function fe(ie){return q||(ie===void 0&&(ie=O.substring(S)),D.push(ie),S=R,oe(D),se&&ve()),ne()}function ce(ie){S=ie,oe(D),D=[],z=O.indexOf(E,S)}function ne(ie){return{data:ee,errors:re,meta:{delimiter:p,linebreak:E,aborted:B,truncated:!!ie,cursor:W+(te||0)}}}function ve(){I(ne()),ee=[],re=[]}},this.abort=function(){B=!0},this.getCharIndex=function(){return S}}function P(o){var l=o.data,p=u[l.workerId],E=!1;if(l.error)p.userError(l.error,l.file);else if(l.results&&l.results.data){var M={abort:function(){E=!0,N(l.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:g,resume:g};if(h(p.userStep)){for(var I=0;I<l.results.data.length&&(p.userStep({data:l.results.data[I],errors:l.results.errors,meta:l.results.meta},M),!E);I++);delete l.results}else h(p.userChunk)&&(p.userChunk(l.results,M,l.file),delete l.results)}l.finished&&!E&&N(l.workerId,l.results)}function N(o,l){var p=u[o];h(p.userComplete)&&p.userComplete(l),p.terminate(),delete u[o]}function g(){throw new Error("Not implemented.")}function b(o){if(typeof o!="object"||o===null)return o;var l=Array.isArray(o)?[]:{};for(var p in o)l[p]=b(o[p]);return l}function y(o,l){return function(){o.apply(l,arguments)}}function h(o){return typeof o=="function"}return i&&(r.onmessage=function(o){var l=o.data;if(c.WORKER_ID===void 0&&l&&(c.WORKER_ID=l.workerId),typeof l.input=="string")r.postMessage({workerId:c.WORKER_ID,results:c.parse(l.input,l.config),finished:!0});else if(r.File&&l.input instanceof File||l.input instanceof Object){var p=c.parse(l.input,l.config);p&&r.postMessage({workerId:c.WORKER_ID,results:p,finished:!0})}}),(j.prototype=Object.create(v.prototype)).constructor=j,(C.prototype=Object.create(v.prototype)).constructor=C,(k.prototype=Object.create(k.prototype)).constructor=k,(L.prototype=Object.create(v.prototype)).constructor=L,c})})(Ye)),Ye.exports}var Ca=Na();const xs=ts(Ca);function ka(e){const t=xs.parse(e,{header:!0,skipEmptyLines:!0});return!t.data||t.data.length<1?[]:t.data.map(a=>{const r={};for(const[n,i]of Object.entries(a))r[n]=typeof i=="string"?i:i==null?"":String(i);return r})}function La(e){return e.length===0?"":xs.unparse(e,{quotes:!0})}function Ma(e){const t=e.meta.stats.imported,a=e.meta.stats.invalid||[],r=a.length,n={},i=a.map(j=>{const C=va(j.error);return C.split(",").forEach(k=>{const L=k.trim();n[L]?n[L].count+=1:n[L]={message:L,count:1}}),{...j,error:C}}),u=La(i),d=new Blob([u],{type:"text/csv"}),c=URL.createObjectURL(d),f=e.meta.import_label,v=f?`${f.name} - Errors.csv`:`Import ${me().format("YYYY-MM-DD HH:mm")} - Errors.csv`;return{importedCount:t,errorCount:r,errorCsvUrl:c,errorCsvName:v,errorList:Object.values(n)}}const ys=()=>({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 Ra(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 ys();default:return e}}function Oa({open:e,onOpenChange:t,onComplete:a}){const[r,n]=m.useReducer(Ra,void 0,ys),i=m.useRef(null),u=et({selectedSlugs:r.selectedLabelSlugs,onSelectionChange:N=>n({type:"SET_SELECTED_LABEL_SLUGS",selectedLabelSlugs:N})}),d=m.useCallback(()=>{i.current&&(URL.revokeObjectURL(i.current),i.current=null)},[]),c=m.useCallback(()=>{d(),n({type:"RESET"})},[d]);m.useEffect(()=>()=>{d()},[d]);const f=m.useCallback(N=>{!N&&r.status==="UPLOADING"||(N||c(),t(N))},[t,c,r.status]);m.useEffect(()=>{if(!r.file)return;let N=!1;const g=new FileReader;return g.onload=b=>{if(!N)try{const y=b.target?.result,h=ka(y);if(h.length>0){const o=ya(h),l=new bt(o);n({type:"PARSE_SUCCESS",fileData:h,mapping:l,mappingError:l.getKeyByValue("email")?null:'Please map "Email" to one of the fields in the CSV.'})}else n({type:"PARSE_SUCCESS",fileData:[],mapping:null,mappingError:"File is empty, nothing to import. Please select a different file."})}catch{n({type:"PARSE_FAILURE",mappingError:"Failed to parse this file. Please try another CSV file."})}},g.onerror=()=>{N||n({type:"PARSE_FAILURE",mappingError:`Failed to read file${g.error?.message?`: ${g.error.message}`:""}`})},g.onabort=()=>{N||n({type:"PARSE_FAILURE",mappingError:"File read was interrupted. Please try again."})},g.readAsText(r.file),()=>{N=!0,g.readyState===FileReader.LOADING&&g.abort()}},[r.file]);const v=m.useCallback(N=>{const b=/(?:\.([^.]+))?$/.exec(N.name)?.[1];return!b||b.toLowerCase()!=="csv"?(n({type:"SET_FILE_ERROR",fileError:"The file type you uploaded is not supported"}),!1):(n({type:"SET_FILE_ERROR",fileError:null}),!0)},[]),j=m.useCallback(N=>{v(N)&&n({type:"SELECT_FILE",file:N})},[v]),C=m.useCallback((N,g)=>{if(!r.mapping)return;const b=r.mapping.updateMapping(N,g),y=r.fileData&&r.fileData.length===0?"File is empty, nothing to import. Please select a different file.":b.getKeyByValue("email")?null:'Please map "Email" to one of the fields in the CSV.';n({type:"UPDATE_MAPPING",mapping:b,mappingError:y})},[r.fileData,r.mapping]),k=m.useCallback(async()=>{if(!r.file||r.mappingError){n({type:"SET_SHOW_MAPPING_ERRORS",showMappingErrors:!0});return}n({type:"UPLOAD_START"});const N=new FormData;N.append("membersfile",r.file);for(const g of r.selectedLabelSlugs){const b=u.labels.find(y=>y.slug===g);b&&N.append("labels",b.name)}if(r.mapping){const g=r.mapping.toJSON();for(const[b,y]of Object.entries(g))y&&N.append(`mapping[${b}]`,y)}try{const{apiRoot:g}=Fs(),b=await fetch(`${g}/members/upload/`,{method:"POST",body:N,credentials:"include",mode:"cors",headers:{"app-pragma":"no-cache"}});if(b.status===202){n({type:"UPLOAD_ACCEPTED"}),a?.();return}if(b.status===413){n({type:"UPLOAD_ERROR",errorMessage:"The file you uploaded was larger than the maximum file size your server allows."});return}if(!b.ok){const l=(await b.json())?.errors?.[0];if(l?.type==="HostLimitError"&&l?.code==="EMAIL_VERIFICATION_NEEDED"){n({type:"UPLOAD_ERROR",errorMessage:l.message,errorHeader:"Woah there cowboy, that's a big list",showTryAgainButton:!1}),a?.();return}if(l?.type==="DataImportError"||l?.type==="ValidationError"){n({type:"UPLOAD_ERROR",errorMessage:l.message});return}n({type:"UPLOAD_ERROR",errorMessage:"An unexpected error occurred, please try again"});return}const y=await b.json(),h=Ma(y);d(),i.current=h.errorCsvUrl,n({type:"UPLOAD_COMPLETE",importResponse:h}),a?.()}catch{n({type:"UPLOAD_ERROR",errorMessage:"An unexpected error occurred, please try again"})}},[r.file,r.mapping,r.mappingError,r.selectedLabelSlugs,u.labels,d,a]),L=r.fileData?!!r.fileData[r.dataPreviewIndex+1]:!1,w=r.dataPreviewIndex>0,x=r.fileData?.length??0,A=r.status==="MAPPING"||r.status==="UPLOADING",P=m.useMemo(()=>{switch(r.status){case"PROCESSING":return"Import in progress";case"COMPLETE":return"Import complete";case"ERROR":return r.errorHeader;default:return"Import members"}},[r.errorHeader,r.status]);return s.jsx(Ie,{open:e,onOpenChange:f,children:s.jsxs(Pe,{className:ae("gap-0",A&&"max-w-2xl"),children:[s.jsxs(Te,{children:[s.jsx(Fe,{children:P}),s.jsx(Us,{className:"sr-only",children:"Import members from a CSV file."})]}),r.status==="INIT"&&s.jsx(fa,{fileError:r.fileError,onClose:()=>f(!1),onDropAccepted:j,onDropRejected:()=>n({type:"SET_FILE_ERROR",fileError:"The file type you uploaded is not supported"})}),(r.status==="MAPPING"||r.status==="UPLOADING")&&s.jsx(wa,{dataPreviewIndex:r.dataPreviewIndex,fileData:r.fileData,hasNextRecord:L,hasPrevRecord:w,labelPicker:u,mapping:r.mapping,mappingError:r.mappingError,membersCount:x,showMappingErrors:r.showMappingErrors,status:r.status,onDataPreviewIndexChange:N=>{n({type:"SET_DATA_PREVIEW_INDEX",dataPreviewIndex:N})},onStartOver:c,onUpdateMapping:C,onUpload:k}),r.status==="PROCESSING"&&s.jsx(_a,{onClose:()=>f(!1),onUploadAnotherFile:c}),r.status==="COMPLETE"&&r.importResponse&&s.jsx(Sa,{importResponse:r.importResponse,onClose:()=>f(!1),onReset:c}),r.status==="ERROR"&&s.jsx(ja,{errorMessage:r.errorMessage,showTryAgainButton:r.showTryAgainButton,onClose:()=>f(!1),onTryAgain:c})]})})}function Da(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&!(e instanceof RegExp)}function Aa(e){const t=Object.keys(e);if(t.length!==1)return;const[a]=t;if(!a.startsWith("$"))return a}function tt(e){const t=Aa(e);if(!t)return;const a=e[t];if(Da(a)){const r=Object.entries(a);if(r.length!==1)return;const[n,i]=r[0];return{field:t,operator:n,value:i}}return{field:t,operator:"$eq",value:a}}const Ia={$eq:"is",$ne:"is-not"},Pa={$eq:"is",$gt:"is-greater",$gte:"is-or-greater",$lt:"is-less",$lte:"is-or-less"},Ta={contains:"~","does-not-contain":"-~","starts-with":"~^","does-not-start-with":"-~^","ends-with":"~$","does-not-end-with":"-~$"},Fa={is:"","is-greater":">","is-or-greater":">=","is-less":"<","is-or-less":"<="},Ua={"is-any":"","is-not-any":"-"},$a=/^[A-Za-z0-9_.-]+$/;function Se(e,t){return e?.field??t}function Ba(e){return e.map(t=>String(t)).sort((t,a)=>t.localeCompare(a))}function Je(e,t){return typeof e=="string"?t?.quoteStrings||e.startsWith("-")||!$a.test(e)?Le(e):e:String(e)}function Lt(e,t=!1){const a=e.source,r=a.startsWith("^"),n=a.endsWith("$");return r&&n?t?"does-not-contain":"contains":r?t?"does-not-start-with":"starts-with":n?t?"does-not-end-with":"ends-with":t?"does-not-contain":"contains"}function Mt(e){let t=e.source;return t.startsWith("^")&&(t=t.slice(1)),t.endsWith("$")&&(t=t.slice(0,-1)),t.replace(/\\([\\.^$|?*+()[\]{}\/-])/g,"$1")}function we(e){return{parse(t,a){const r=tt(t),n=Se(e,a.key);if(!r||r.field!==n)return null;const i=Ia[r.operator];return i?{field:a.key,operator:i,values:[r.value]}:null},serialize(t,a){const r=t.values[0],n=Se(e,a.key);return r==null||r===""?null:t.operator==="is"?[`${n}:${Je(r,e)}`]:t.operator==="is-not"?[`${n}:-${Je(r,e)}`]:null}}}function Rt(e){return{parse(t,a){const r=tt(t),n=Se(e,a.key);return!r||r.field!==n?null:r.operator==="$eq"&&typeof r.value=="string"?{field:a.key,operator:"is",values:[r.value]}:r.operator==="$regex"&&r.value instanceof RegExp?{field:a.key,operator:Lt(r.value),values:[Mt(r.value)]}:r.operator==="$not"&&r.value instanceof RegExp?{field:a.key,operator:Lt(r.value,!0),values:[Mt(r.value)]}:null},serialize(t,a){const r=t.values[0],n=Se(e,a.key);if(typeof r!="string"||r==="")return null;if(t.operator==="is")return[`${n}:${Le(r)}`];const i=Ta[t.operator];return i?[`${n}:${i}${Le(r)}`]:null}}}function st(e){return{parse(t,a){const r=tt(t),n=Se(e,a.key);return!r||r.field!==n?null:r.operator==="$in"&&Array.isArray(r.value)?{field:a.key,operator:"is-any",values:r.value}:r.operator==="$nin"&&Array.isArray(r.value)?{field:a.key,operator:"is-not-any",values:r.value}:r.operator==="$eq"?{field:a.key,operator:"is-any",values:[r.value]}:r.operator==="$ne"?{field:a.key,operator:"is-not-any",values:[r.value]}:null},serialize(t,a){const r=Se(e,a.key);if(!t.values.length)return null;const n=Ua[t.operator];if(n===void 0)return null;const i=Ba(t.values);return e?.serializeSingletonAsScalar&&i.length===1?[`${r}:${n}${Je(i[0],e)}`]:[`${r}:${n}[${i.map(u=>Je(u,e)).join(",")}]`]}}}function rt(e){return{parse(t,a){const r=tt(t),n=Se(e,a.key);if(!r||r.field!==n||typeof r.value!="number")return null;const i=Pa[r.operator];return i?{field:a.key,operator:i,values:[r.value]}:null},serialize(t,a){const r=t.values[0],n=Se(e,a.key),i=typeof r=="string"?r.trim()===""?NaN:Number(r):r;if(typeof i!="number"||Number.isNaN(i))return null;const u=Fa[t.operator];return u===void 0?null:[`${n}:${u}${i}`]}}}function za(e,t){const a=me.tz(e,"YYYY-MM-DD",t).startOf("day").utc().toISOString(),r=me.tz(e,"YYYY-MM-DD",t).endOf("day").utc().toISOString();return{start:a,end:r}}const Ot=["is","contains","does-not-contain","starts-with","ends-with"],ze=["is-less","is-or-less","is-greater","is-or-greater"],at=["is","is-greater","is-less"],be=["is","is-not"],nt=["is-any","is-not-any"],Va=[{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"}];function Wa(e,t){if(typeof e!="string"||!e)return null;const a=me.utc(e,["YYYY-MM-DD HH:mm:ss.SSS","YYYY-MM-DD HH:mm:ss"],!0);if(a.isValid())return a.tz(t).format("YYYY-MM-DD");const r=me.tz(e,me.ISO_8601,!0,t);return r.isValid()?r.format("YYYY-MM-DD"):null}const Ve={parse(e,t){const a=Object.entries(e)[0];if(!a||a[0]!==t.key||typeof a[1]!="object"||a[1]===null)return null;const[r,n]=Object.entries(a[1])[0]??[],i=Wa(n,t.timezone);if(!i)return null;switch(r){case"$lt":return{field:t.key,operator:"is-less",values:[i]};case"$lte":return{field:t.key,operator:"is-or-less",values:[i]};case"$gt":return{field:t.key,operator:"is-greater",values:[i]};case"$gte":return{field:t.key,operator:"is-or-greater",values:[i]};default:return null}},serialize(e,t){const a=e.values[0];if(typeof a!="string"||!a)return null;const{start:r,end:n}=za(a,t.timezone);switch(e.operator){case"is-less":return[`${t.key}:<'${r}'`];case"is-or-less":return[`${t.key}:<='${n}'`];case"is-greater":return[`${t.key}:>'${n}'`];case"is-or-greater":return[`${t.key}:>='${r}'`];default:return null}}},Ha={parse(){return null},serialize(e){const 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}},Ya={parse(){return null},serialize(e,t){const a=t.params.slug,r=e.values[0];return!a||e.operator!=="is"?null:r==="subscribed"?[`(newsletters.slug:${a}+email_disabled:0)`]:r==="unsubscribed"?[`(newsletters.slug:-${a},email_disabled:1)`]:null}},Ga={parse(){return null},serialize(e){const t=e.values[0];return typeof t!="string"||!t||e.operator!=="1"&&e.operator!=="0"?null:[`(feedback.post_id:${Le(t)}+feedback.score:${e.operator})`]}},Ae={name:{operators:Ot,ui:{label:"Name",type:"text",placeholder:"Enter name...",defaultOperator:"contains",className:"w-48"},codec:Rt()},email:{operators:Ot,ui:{label:"Email",type:"text",placeholder:"Enter email...",defaultOperator:"contains",className:"w-64"},codec:Rt()},label:{operators:nt,ui:{label:"Label",type:"multiselect",searchable:!0,className:"w-64",defaultOperator:"is-any"},metadata:{activeColumn:{key:"labels",label:"Labels",include:"labels"}},codec:st()},subscribed:{operators:be,ui:{label:"Newsletter subscription",type:"select",searchable:!1},options:[{value:"subscribed",label:"Subscribed"},{value:"unsubscribed",label:"Unsubscribed"},{value:"email-disabled",label:"Email disabled"}],codec:Ha},last_seen_at:{operators:ze,ui:{label:"Last seen",type:"date",defaultOperator:"is-or-less",className:"w-40"},codec:Ve},created_at:{operators:ze,ui:{label:"Created",type:"date",defaultOperator:"is-or-less",className:"w-40"},codec:Ve},signup:{operators:be,ui:{label:"Signed up on post/page",type:"select",searchable:!0,placeholder:"Select a post or page...",className:"w-64"},codec:we({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:Ya},tier_id:{operators:nt,ui:{label:"Membership tier",type:"multiselect",searchable:!0,className:"w-64",defaultOperator:"is-any"},metadata:{activeColumn:{key:"tiers",label:"Tiers",include:"tiers"}},codec:st()},status:{operators:be,ui:{label:"Member status",type:"select",searchable:!1},options:[{value:"paid",label:"Paid"},{value:"free",label:"Free"},{value:"comped",label:"Complimentary"}],codec:we()},"subscriptions.plan_interval":{operators:be,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",include:"subscriptions"}},codec:we()},"subscriptions.status":{operators:be,ui:{label:"Stripe subscription status",type:"select",searchable:!1},options:Va,metadata:{activeColumn:{key:"subscriptions.status",label:"Subscription status",include:"subscriptions"}},codec:we()},"subscriptions.start_date":{operators:ze,ui:{label:"Paid start date",type:"date",defaultOperator:"is-or-less",className:"w-40"},metadata:{activeColumn:{key:"subscriptions.start_date",label:"Paid start date",include:"subscriptions"}},codec:Ve},"subscriptions.current_period_end":{operators:ze,ui:{label:"Next billing date",type:"date",defaultOperator:"is-or-less",className:"w-40"},metadata:{activeColumn:{key:"subscriptions.current_period_end",label:"Next billing date",include:"subscriptions"}},codec:Ve},conversion:{operators:be,ui:{label:"Subscription started on post/page",type:"select",searchable:!0,placeholder:"Select a post or page...",className:"w-64"},codec:we({quoteStrings:!0})},email_count:{operators:at,ui:{label:"Emails sent (all time)",type:"number",defaultOperator:"is",defaultValue:0,min:0,className:"w-24"},codec:rt()},email_opened_count:{operators:at,ui:{label:"Emails opened (all time)",type:"number",defaultOperator:"is",defaultValue:0,min:0,className:"w-24"},codec:rt()},email_open_rate:{operators:at,ui:{label:"Open rate (all time)",type:"number",defaultOperator:"is",defaultValue:0,min:0,max:100,suffix:"%",className:"w-24"},codec:rt()},"emails.post_id":{operators:be,ui:{label:"Sent email",type:"select",searchable:!0,placeholder:"Select an email...",className:"w-64"},codec:we({quoteStrings:!0})},"opened_emails.post_id":{operators:be,ui:{label:"Opened email",type:"select",searchable:!0,placeholder:"Select an email...",className:"w-64"},codec:we({quoteStrings:!0})},"clicked_links.post_id":{operators:be,ui:{label:"Clicked email",type:"select",searchable:!0,placeholder:"Select an email...",className:"w-64"},codec:we({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:Ga},offer_redemptions:{operators:nt,ui:{label:"Offer",type:"multiselect",searchable:!0,className:"w-64",defaultOperator:"is-any"},metadata:{activeColumn:{key:"offer_redemptions",label:"Offer"}},codec:st({quoteStrings:!0,serializeSingletonAsScalar:!0})}};function Ka(e,t){const a=e.split("."),r=t.split(".");if(a.length!==r.length)return null;const n={};for(let i=0;i<a.length;i+=1){const u=a[i],d=r[i];if(u.startsWith(":")){n[u.slice(1)]=d;continue}if(u!==d)return null}return n}function gt(e,t,a){const r=e[t];if(r)return{definition:r,context:{key:t,pattern:t,params:{},timezone:a}};for(const[n,i]of Object.entries(e))if(i.parseKeys?.includes(t))return{definition:i,context:{key:n,pattern:n,params:{},timezone:a}};for(const[n,i]of Object.entries(e)){if(!n.includes(":"))continue;const u=Ka(n,t);if(u)return{definition:i,context:{key:t,pattern:n,params:u,timezone:a}}}}const qa=2,Dt=new Set(["active","trialing","unpaid","past_due"]);function vs(e){const t=new Map;for(const a of e){const r=gt(Ae,a.field,"UTC")?.definition.metadata?.activeColumn;r&&t.set(r.key,r)}return Array.from(t.values()).slice(0,qa)}function Qa(e){const t=new Set(["labels","tiers"]);for(const a of vs(e))a.include&&t.add(a.include);return Array.from(t).join(",")}function Ja({filters:e,nql:t,search:a}){if(!t&&!a)return;const r={include:Qa(e),limit:"100",order:"created_at desc"};return t&&(r.filter=t),a&&(r.search=a),r}function Xa({nql:e,search:t}){return!e&&!t?{all:!0}:{...e?{filter:e}:{},...t?{search:t}:{}}}function We(e){if(!e?.length)return null;const t=e.filter(r=>r.id);return t.length?[...t].sort((r,n)=>{const i=Dt.has(r.status),u=Dt.has(n.status);if(i&&!u)return-1;if(!i&&u)return 1;const d=new Date(r.current_period_end).getTime(),c=new Date(n.current_period_end).getTime();return Number.isNaN(d)&&Number.isNaN(c)?0:Number.isNaN(d)?1:Number.isNaN(c)?-1:c-d})[0]:null}function At(e,t){return e?{text:me.tz(e,t).format("D MMM YYYY"),subtext:me(e).fromNow()}:null}function Za(e,t,a){switch(e.key){case"labels":return t.labels?.length?{text:t.labels.map(r=>r.name).join(", ")}:null;case"tiers":return t.tiers?.length?{text:t.tiers.map(r=>r.name).join(", ")}:null;case"subscriptions.plan_interval":{const r=We(t.subscriptions)?.plan?.interval;return r?{text:r==="month"?"Monthly":"Yearly"}:null}case"subscriptions.status":{const r=We(t.subscriptions)?.status;return r?{text:r.split("_").map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join(" ")}:null}case"subscriptions.start_date":return At(We(t.subscriptions)?.start_date,a);case"subscriptions.current_period_end":return At(We(t.subscriptions)?.current_period_end,a);case"offer_redemptions":{const r=t.subscriptions?.map(n=>n.offer?.name).filter(Boolean);return r?.length?{text:r.join(", ")}:null}default:return null}}async function It(e,t){const a=new URLSearchParams({limit:"all"});e&&a.set("filter",e),t&&a.set("search",t);const r=new Date().toJSON().substring(0,10);await Gs(`/members/upload/?${a}`,`members.${r}.csv`)}const en=({hasFilterOrSearch:e,memberCount:t,nql:a,search:r,canBulkDelete:n,onImportComplete:i})=>{const[u,d]=m.useState(!1),[c,f]=m.useState(!1),[v,j]=m.useState(!1),[C,k]=m.useState(!1),[L,w]=m.useState(!1),{data:x,isLoading:A}=ds({searchParams:{filter:"status:-archived",limit:"50"}}),P=x?.newsletters||[],{mutateAsync:N,isLoading:g}=$s(),{mutate:b,isLoading:y}=Bs(),[h,o]=m.useState(!1),l=Xa({nql:a,search:r}),p=m.useCallback(async()=>{try{await It(a,r)}catch(_){throw le.error("Export failed",{description:"There was a problem downloading your member data. Please check your connection and try again."}),_}},[a,r]),E=m.useCallback(async _=>{try{for(const S of _)await N({...l,action:{type:"addLabel",meta:{label:{id:S}}}});f(!1),le.success(_.length>1?"Labels added successfully":"Label added successfully")}catch{le.error("Failed to add label",{description:"There was a problem applying this label. Please try again."})}},[N,l]),M=m.useCallback(async _=>{try{for(const S of _)await N({...l,action:{type:"removeLabel",meta:{label:{id:S}}}});j(!1),le.success(_.length>1?"Labels removed successfully":"Label removed successfully")}catch{le.error("Failed to remove label",{description:"There was a problem removing this label. Please try again."})}},[N,l]),I=m.useCallback(async _=>{const S=l;if(_===null){try{await N({...S,action:{type:"unsubscribe"}}),k(!1),le.success("Members unsubscribed successfully")}catch{le.error("Failed to unsubscribe members",{description:"There was a problem unsubscribing these members. Please try again."})}return}o(!0);try{const B=await Promise.allSettled(_.map(q=>N({...S,action:{type:"unsubscribe",newsletter:q}}))),O=B.filter(q=>q.status==="fulfilled").length,te=B.length;k(!1),O===te?le.success(`Unsubscribed from ${te} ${te===1?"newsletter":"newsletters"}`):O>0?le.warning(`Unsubscribed from ${O} of ${te} newsletters`,{description:"Some newsletters could not be unsubscribed. Please try again."}):le.error("Failed to unsubscribe members",{description:"There was a problem unsubscribing these members. Please try again."})}catch{le.error("Failed to unsubscribe members",{description:"There was a problem unsubscribing these members. Please try again."})}finally{o(!1)}},[N,l]),T=m.useCallback(()=>{b(l,{onSuccess:()=>{w(!1),le.success("Members deleted successfully")},onError:()=>{le.error("Failed to delete members",{description:"There was a problem deleting these members. Please try again."})}})},[b,l]),G=m.useCallback(async()=>{try{await It(a,r)}catch(_){throw le.error("Export failed",{description:"There was a problem downloading your backup. Please check your connection and try again."}),_}},[a,r]);return s.jsxs(s.Fragment,{children:[s.jsxs(zs,{children:[s.jsx(Vs,{asChild:!0,children:s.jsx(U,{"data-testid":"members-actions",variant:"outline",children:s.jsx(Ws,{className:"size-4"})})}),s.jsxs(Hs,{align:"end",children:[s.jsxs(Ne,{onClick:()=>d(!0),children:[s.jsx(cs,{className:"mr-2 size-4"}),"Import members"]}),t>0&&s.jsxs(s.Fragment,{children:[s.jsxs(Ne,{onClick:p,children:[s.jsx(pr,{className:"mr-2 size-4"}),e?`Export ${t.toLocaleString()} members`:"Export all members"]}),s.jsx(wt,{}),s.jsxs(Ne,{onClick:()=>f(!0),children:[s.jsx(ir,{className:"mr-2 size-4"}),"Add label to ",t.toLocaleString()," ",t===1?"member":"members"]}),s.jsxs(Ne,{onClick:()=>j(!0),children:[s.jsx(ss,{className:"mr-2 size-4"}),"Remove label from ",t.toLocaleString()," ",t===1?"member":"members"]}),s.jsxs(Ne,{disabled:A,onClick:()=>k(!0),children:[s.jsx(hr,{className:"mr-2 size-4"}),"Unsubscribe ",t.toLocaleString()," ",t===1?"member":"members"]}),s.jsx(wt,{}),s.jsxs(Ne,{className:"text-destructive focus:text-destructive",disabled:!n,onClick:()=>w(!0),children:[s.jsx(Ys,{className:"mr-2 size-4"}),"Delete ",t.toLocaleString()," ",t===1?"member":"members"]})]})]})]}),s.jsx(U,{asChild:!0,children:s.jsx("a",{className:"font-bold",href:"#/members/new",children:"New member"})}),s.jsx(Oa,{open:u,onComplete:i,onOpenChange:d}),s.jsx(ca,{isLoading:g,memberCount:t,open:c,onConfirm:E,onOpenChange:f}),s.jsx(ua,{isLoading:g,memberCount:t,nql:a,open:v,search:r,onConfirm:M,onOpenChange:j}),s.jsx(da,{isLoading:g||h,memberCount:t,newsletters:P,open:C,onConfirm:I,onOpenChange:k}),s.jsx(ma,{isLoading:y,memberCount:t,open:L,onConfirm:T,onExportBackup:G,onOpenChange:w})]})},ws=({children:e,className:t,...a})=>s.jsx("section",{className:ae("size-full grow min-w-0 flex flex-col gap-6 p-4 lg:p-8",t),...a,children:e}),tn=Ks.extend({route:Qs("members"),filter:qs(_t(),_t().nullable()).refine(e=>typeof e.filter=="string"&&e.filter.length>0)}),Pt="A view with this name already exists",sn="Saved view could not be found for update",rn="Multiple saved views matched update target",an="Saved view could not be found for delete",nn="Multiple saved views matched delete target";function ln(e){return tn.safeParse(e).success}function on(e){const t=ut(e);return t.ok?{ok:!0,views:t.views.filter(ln)}:t}function cn(e,t){return{name:e.trim(),route:"members",filter:{filter:t}}}function un(e,t,a,r){const n=cn(t,a);if(r){const i=rs(e,r);if(i.length===0)throw new Error(sn);if(i.length>1)throw new Error(rn);const u=i[0];if(St(e,n,u))throw new Error(Pt);return e.map((d,c)=>c===u?n:d)}if(St(e,n))throw new Error(Pt);return[...e,n]}function dn(e,t){const a=rs(e,t);if(a.length===0)throw new Error(an);if(a.length>1)throw new Error(nn);const r=a[0];return e.filter((n,i)=>i!==r)}const _s="Cannot modify saved views because shared_views is invalid";function xt(e){return ke(e?.settings??null,"shared_views")??"[]"}function mn(){const{data:e}=Ue(),t=dt(),a=xt(e),r=m.useRef(null),n=m.useMemo(()=>on(a),[a]);return m.useEffect(()=>{n.ok||r.current===a||(r.current=a,t(n.error,{withToast:!1}))},[t,n,a]),n.ok?n.views:[]}function fn(){const{data:e}=Ue(),{mutateAsync:t}=as(),a=dt();return m.useCallback(async(r,n,i)=>{const u=ut(xt(e));if(!u.ok){const c=new Error(_s,{cause:u.error});throw a(c,{withToast:!1}),c}const d=un(u.views,r,n,i);try{await t([{key:"shared_views",value:JSON.stringify(d)}])}catch(c){throw a(c,{withToast:!1}),c}},[e,t,a])}function pn(){const{data:e}=Ue(),{mutateAsync:t}=as(),a=dt();return m.useCallback(async r=>{const n=ut(xt(e));if(!n.ok){const u=new Error(_s,{cause:n.error});throw a(u,{withToast:!1}),u}const i=dn(n.views,r);try{await t([{key:"shared_views",value:JSON.stringify(i)}])}catch(u){throw a(u,{withToast:!1}),u}},[e,t,a])}function hn(e,t){return m.useMemo(()=>!t||e.length===0?null:e.find(a=>a.filter.filter===t)??null,[e,t])}const bn=({filter:e,existingViews:t,activeView:a,onDeleted:r,onClose:n})=>{const[i,u]=m.useState(()=>a?.name??""),[d,c]=m.useState(""),[f,v]=m.useState(!1),[j,C]=m.useState(!1),[k,L]=m.useState(!1),w=fn(),x=pn(),A=!!a,P=async()=>{const b=i.trim();if(!b){c("Please enter a name");return}if(!A&&t.find(h=>h.name.trim().toLowerCase()===b.toLowerCase())){c("A view with this name already exists");return}v(!0);try{await w(b,e,a??void 0),n()}catch(y){c(y instanceof Error?y.message:"Failed to save view")}finally{v(!1)}},N=async()=>{if(a){C(!0);try{await x(a),n(),r?.()}catch(b){c(b instanceof Error?b.message:"Failed to delete view")}finally{C(!1)}}},g=b=>{b.key==="Enter"&&(b.preventDefault(),P())};return s.jsx(Jt,{align:"end",className:"w-72",children:s.jsxs("div",{className:"flex flex-col gap-3",children:[s.jsx("h3",{className:"text-sm font-semibold",children:A?"Edit view":"Save view"}),s.jsxs("div",{className:"flex flex-col gap-1.5",children:[s.jsx(Kt,{placeholder:"View name",value:i,autoFocus:!0,onChange:b=>{u(b.target.value),d&&c("")},onKeyDown:g}),d&&s.jsx("p",{className:"text-xs text-red-500",children:d})]}),A?k?s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx("span",{className:"text-sm text-muted-foreground",children:"Delete view?"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(U,{size:"sm",variant:"outline",onClick:()=>L(!1),children:"Cancel"}),s.jsx(U,{disabled:j,size:"sm",variant:"destructive",onClick:()=>void N(),children:j?"Deleting...":"Delete"})]})]}):s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(U,{className:"text-red hover:bg-red/5 hover:text-red",size:"sm",variant:"ghost",onClick:()=>L(!0),children:"Delete"}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(U,{size:"sm",variant:"outline",onClick:n,children:"Cancel"}),s.jsx(U,{disabled:f||!i.trim(),size:"sm",onClick:()=>void P(),children:f?"Saving...":"Save"})]})]}):s.jsx(U,{className:"w-full",disabled:f||!i.trim(),onClick:()=>void P(),children:f?"Saving...":"Save"})]})})},gn=({filter:e,existingViews:t,activeView:a,onDeleted:r})=>{const[n,i]=m.useState(!1),u=a?`edit:${a.name}:${a.filter.filter}`:`save:${e}`;return s.jsxs(qt,{open:n,onOpenChange:i,children:[s.jsx(Qt,{asChild:!0,children:s.jsx(U,{variant:"outline",children:a?"Edit view":"Save view"})}),n&&s.jsx(bn,{activeView:a,existingViews:t,filter:e,onClose:()=>i(!1),onDeleted:r},u)]})};function xn(e,t={}){const a=t.labels||{};return e.map(r=>({value:r,label:a[r]??r.replaceAll("-"," ")}))}const yn={"is-any":"is any of","is-not-any":"is none of","does-not-contain":"does not contain","is-less":"before","is-or-less":"on or before","is-greater":"after","is-or-greater":"on or after",1:"More like this",0:"Less like this"},it={"is-greater":"is greater than","is-less":"is less than"};function vn(e){switch(e){case"name":return Z.createElement(Zs,{className:"size-4"});case"email":case"subscribed":return Z.createElement(Or,{className:"size-4"});case"label":return Z.createElement(ss,{className:"size-4"});case"last_seen_at":return Z.createElement(Ar,{className:"size-4"});case"created_at":return Z.createElement(Dr,{className:"size-4"});case"signup":return Z.createElement(Rr,{className:"size-4"});case"tier_id":case"subscriptions.status":return Z.createElement(Xs,{className:"size-4"});case"status":return Z.createElement(Nr,{className:"size-4"});case"subscriptions.plan_interval":return Z.createElement(Er,{className:"size-4"});case"subscriptions.start_date":return Z.createElement(jr,{className:"size-4"});case"subscriptions.current_period_end":return Z.createElement(Sr,{className:"size-4"});case"conversion":return Z.createElement(_r,{className:"size-4"});case"email_count":case"emails.post_id":return Z.createElement(wr,{className:"size-4"});case"email_opened_count":case"opened_emails.post_id":return Z.createElement(vr,{className:"size-4"});case"email_open_rate":return Z.createElement(yr,{className:"size-4"});case"clicked_links.post_id":return Z.createElement(xr,{className:"size-4"});case"newsletter_feedback":return Z.createElement(Js,{className:"size-4"});case"offer_redemptions":return Z.createElement(gr,{className:"size-4"});default:return e.startsWith("newsletters.")?Z.createElement(br,{className:"size-4"}):void 0}}function K(e,t={},a=yn){const r=e.startsWith("newsletters.")?Ae["newsletters.:slug"]:Ae[e];return{key:e,...r.ui,icon:vn(e),operators:xn(r.operators,{labels:a}),..."options"in r&&r.options?{options:r.options}:{},...t}}function He(e,t){return K(e,{defaultValue:t})}function _e(e,t){return{options:e,valueSource:t}}function wn(e){const t=new Map,a=[],r=[];for(const n of e)n.redemption_type==="retention"&&(n.cadence==="month"?a.push(n.id):n.cadence==="year"&&r.push(n.id));return a.length>0&&t.set("retention:month",a),r.length>0&&t.set("retention:year",r),t}function Ss(e){return Array.isArray(e.metadata?.offerIds)?e.metadata.offerIds.filter(t=>typeof t=="string"):null}function js(e){const t=[],a=wn(e);for(const r of e)r.redemption_type!=="retention"&&t.push({value:r.id,label:r.name});return a.has("retention:month")&&t.push({value:"retention:month",label:"Monthly Retention",metadata:{offerIds:a.get("retention:month")}}),a.has("retention:year")&&t.push({value:"retention:year",label:"Yearly Retention",metadata:{offerIds:a.get("retention:year")}}),t}function _n(e,t){const a=[],r=new Set;for(const n of t){const i=Ss(n);i&&i.length>0&&i.every(u=>e.includes(u))&&(a.push(String(n.value)),i.forEach(u=>{r.add(u)}))}for(const n of e)r.has(n)||a.push(n);return a}function Sn(e,t){const a=[];for(const r of e){const n=t.find(u=>u.value===r),i=n?Ss(n):null;i?a.push(...i):a.push(r)}return[...new Set(a)]}function jn(e){return new Map(e.map(t=>[t.id,t.name]))}function En(e,t,a){const r=e.map(n=>t.find(i=>i.value===n)).filter(n=>!!n);return r.length===1?r[0].label:r.length>1?`${r.length} selected`:e.length===1?a.get(e[0])??"Select...":e.length>1?`${e.length} selected`:"Select..."}function Nn({labelValueSource:e,tierValueSource:t,newsletters:a=[],hydratedNewsletterSlugs:r=[],hasMultipleTiers:n=!1,paidMembersEnabled:i=!1,emailFiltersEnabled:u=!1,postValueSource:d,emailValueSource:c,offers:f=[],membersTrackSources:v=!1,emailTrackOpens:j=!1,emailTrackClicks:C=!1,siteTimezone:k="UTC"}){return m.useMemo(()=>{const L=[],w=a.filter(h=>h.status!=="archived"),x=new Set(w.map(h=>h.slug)),A=[...new Set(r)].map(h=>{const o=a.find(l=>l.slug===h);return{slug:h,name:o?.name??h}}),P=A.filter(h=>!x.has(h.slug)),N=js(f),g=jn(f),b=me.tz(k).format("YYYY-MM-DD"),y=[K("name"),K("email")];if(e&&y.push(K("label",{..._e([],e),customRenderer:h=>Z.createElement(oa,h)})),w.length<=1){y.push(K("subscribed"));for(const h of A)y.push(K(`newsletters.${h.slug}`,{label:h.name}))}if(y.push(He("last_seen_at",b),He("created_at",b)),v&&y.push(K("signup",_e([],d))),L.push({group:"Basic",fields:y}),w.length>1){const h=[K("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(const o of w)h.push(K(`newsletters.${o.slug}`,{label:o.name}));for(const o of P)h.push(K(`newsletters.${o.slug}`,{label:o.name}));L.push({group:"Newsletters",fields:h})}if(i){const h=[];n&&h.push(K("tier_id",_e([],t))),h.push(K("status"),K("subscriptions.plan_interval"),K("subscriptions.status"),He("subscriptions.start_date",b),He("subscriptions.current_period_end",b)),v&&h.push(K("conversion",_e([],d))),f.length>0&&h.push(K("offer_redemptions",{options:N,customValueRenderer:o=>En(o,N,g)})),L.push({group:"Subscription",fields:h})}if(u){const h=[K("email_count",{},it),K("email_opened_count",{},it)];j&&h.push(K("email_open_rate",{},it)),h.push(K("emails.post_id",_e([],c))),j&&h.push(K("opened_emails.post_id",_e([],c))),C&&h.push(K("clicked_links.post_id",_e([],c))),h.push(K("newsletter_feedback",_e([],c))),L.push({group:"Email",fields:h})}return L},[u,c,C,j,n,e,v,a,f,r,i,d,k,t])}const Tt="(status:published,status:sent)+newsletter_id:-null";function Cn(e){return e?`${Tt}+title:~${Le(e)}`:Tt}function kn(e){return{value:e.id,label:e.title}}const Ln=ls({id:"posts.email.remote",buildBrowseSearchParams:e=>({filter:Cn(e),limit:"25",fields:"id,title",order:"published_at DESC"}),buildHydrateSearchParams:e=>({fields:"id,title",filter:e}),selectItems:e=>e?.posts,useQuery:({enabled:e,searchParams:t})=>Fr({enabled:e,keepPreviousData:!0,searchParams:t}),toOption:kn});function Mn(){return Ln()}const Ft=()=>{};function Rn(e){return function(a={}){const{enabled:r=!0}=a,n=({query:i})=>{const u=e.useItems({enabled:r}),d=(u.data||[]).map(e.toOption),c=e.filterOptions?e.filterOptions(d,i):os(d,i);return r?{options:c,isInitialLoad:u.isLoading&&d.length===0,isSearching:!1,isLoadingMore:!1,hasMore:!1,loadMore:Ft}:{options:[],isInitialLoad:!1,isSearching:!1,isLoadingMore:!1,hasMore:!1,loadMore:Ft}};return{id:e.id,useOptions:n}}}function On(e=[]){return Rn({id:"posts.tiers.local",useItems:()=>({data:e,isLoading:!1}),toOption:a=>a})()}const Dn=[];function Ut(e,t){return e.map(a=>a.field!=="offer_redemptions"?a:{...a,values:t(a.values)})}const $t=({filters:e,nql:t,onFiltersChange:a,savedViews:r=[],activeView:n})=>{const{data:i}=Tr({searchParams:{limit:"100"}}),{data:u}=fr({}),{data:d}=ds({searchParams:{limit:"100"}}),{data:c}=Ue({}),f=c?.settings||[],v=ke(f,"paid_members_enabled")===!0,j=ke(f,"editor_default_email_recipients")!=="disabled",C=ke(f,"members_track_sources")===!0,k=ke(f,"email_track_opens")===!0,L=ke(f,"email_track_clicks")===!0,w=ms(f),x=i?.tiers||[],A=d?.newsletters||[],P=m.useMemo(()=>u?.offers??Dn,[u?.offers]),N=x.filter(_=>_.type==="paid"&&_.active),g=N.length>1,b=m.useMemo(()=>js(P),[P]),y=m.useMemo(()=>[...new Set(e.map(_=>_.field).filter(_=>_.startsWith("newsletters.")).map(_=>_.slice(12)).filter(Boolean))],[e]),h=m.useMemo(()=>Ut(e,_=>_n(_,b)),[e,b]),o=m.useCallback(_=>{a(Ut(_,S=>Sn(S,b)))},[a,b]),l=cr(),p=Mn(),E=gs(),M=On(N.map(_=>({value:_.id,label:_.name}))),I=Nn({newsletters:A,hydratedNewsletterSlugs:y,hasMultipleTiers:g,paidMembersEnabled:v,emailFiltersEnabled:j,labelValueSource:E,tierValueSource:M,offers:P,postValueSource:l,emailValueSource:p,membersTrackSources:C,emailTrackOpens:k,emailTrackClicks:L,siteTimezone:w}),T=e.length>0,G=T?s.jsxs("div",{className:"flex shrink-0 items-center gap-2 sm:absolute sm:top-0 sm:right-0",children:[s.jsxs("button",{className:"flex items-center gap-1 text-sm font-normal text-muted-foreground hover:text-foreground",type:"button",onClick:()=>a([]),children:[s.jsx(ot,{className:"size-4"}),"Clear"]}),t&&s.jsx(gn,{activeView:n,existingViews:r,filter:t,onDeleted:()=>a([])})]}):void 0;return s.jsx(ar,{addButtonIcon:T?s.jsx(Ir,{}):s.jsx(Pr,{}),addButtonText:T?"Add filter":"Filter",allowMultiple:!0,className:`[&>button]:order-last ${T?"sm:!pr-40 [&>button]:border-none":"w-auto"}`,clearButton:G,fields:I,filters:h,keyboardShortcut:"f",popoverAlign:"start",popoverContentClassName:"w-[280px] translate-x-[-32px] [&_[data-slot=command-list]]:max-h-[450px]",showClearButton:T,showSearchInput:!0,onChange:o})},Es=Z.forwardRef(function({children:t,totalMembers:a,isLoading:r},n){return s.jsxs(Qe,{ref:n,className:"relative pb-6! md:sticky",variant:"inline-nav",children:[s.jsxs(Qe.Title,{children:["Members"," ",!r&&s.jsx("span",{className:"font-normal text-muted-foreground",children:a.toLocaleString()})]}),t]})}),An=250,In=({search:e,onSearchChange:t})=>{const[a,r]=m.useState(e),[n]=er(a,An),i=m.useRef(e);return m.useEffect(()=>{i.current=e,r(e)},[e]),m.useEffect(()=>{n!==i.current&&t(n)},[n,t]),s.jsxs(Wr,{className:"min-w-0 basis-full sm:w-[240px] sm:basis-auto",children:[s.jsx(Yr,{children:s.jsx(Xt,{className:"size-4",strokeWidth:1.75})}),s.jsx(Gr,{"aria-label":"Search members",placeholder:"Search members...",value:a,onChange:u=>r(u.target.value)})]})},Ns=({children:e})=>s.jsx(zr,{children:s.jsx("div",{className:"grid w-full min-w-0 grow",children:s.jsx("div",{className:"flex h-full min-w-0 flex-col","data-testid":"members-page",children:e})})}),Bt={left:"100%"};function Pn(e){if(!e)return{text:"Unknown",isKnown:!1};try{const 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 Tn(e){switch(e){case"paid":return"Paid";case"comped":return"Complimentary";default:return"Free"}}function Cs(e){return e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey}function zt(e){window.open(`#/members/${e}`,"_blank","noopener")}function Fn({item:e,onClick:t}){return s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(ur,{avatarImage:e.avatar_image,className:"size-10 min-w-10 md:size-10 md:min-w-10",memberEmail:e.email,memberId:e.id,memberName:e.name}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("a",{className:"cursor-pointer",href:`#/members/${e.id}`,onClick:t?a=>{if(Cs(a)){a.stopPropagation();return}a.preventDefault(),a.stopPropagation(),t(e.id)}:void 0,children:s.jsx("span",{className:"block truncate font-medium",children:e.name||e.email||"Anonymous"})}),e.name&&e.email&&s.jsx("div",{className:"truncate text-sm text-muted-foreground","data-testid":"member-email",children:e.email})]})]})}function Un({status:e,tiers:t}){const a=t?.map(r=>r.name).join(", ");return s.jsx("div",{className:"flex min-w-0 justify-end lg:justify-start",children:s.jsxs("div",{className:"min-w-0",children:[s.jsx("div",{className:"truncate text-sm",children:Tn(e)}),a&&s.jsx("div",{className:"truncate text-xs text-muted-foreground",children:a})]})})}function $n({emailOpenRate:e}){const t=e!=null;return s.jsx("div",{className:ae("text-sm",t?"text-foreground":"text-muted-foreground"),children:t?`${Math.round(e)}%`:"N/A"})}function Bn({geolocation:e}){const t=Pn(e);return s.jsx("div",{className:ae("truncate text-sm",t.isKnown?"text-foreground":"text-muted-foreground"),children:t.text})}function zn({createdAt:e}){return s.jsxs("div",{children:[s.jsx("div",{className:"text-sm",children:me.utc(e).format("D MMM YYYY")}),s.jsx("div",{className:"text-xs text-muted-foreground",children:me.utc(e).fromNow()})]})}function Vn({column:e,member:t,timezone:a}){const r=Za(e,t,a);return r?s.jsxs("div",{className:"min-w-0",children:[s.jsx("div",{className:"truncate text-sm",children:r.text}),r.subtext&&s.jsx("div",{className:"truncate text-xs text-muted-foreground",children:r.subtext})]}):s.jsx("span",{className:"text-sm text-muted-foreground",children:"-"})}function Wn({item:e,activeColumns:t,columnStyles:a,showPinnedEdge:r,showEmailOpenRate:n,timezone:i,onClick:u,...d}){const c={...a.member,"--members-sticky-hover-bg":"color-mix(in hsl, var(--muted) 50%, var(--background))"},f=j=>{if(Cs(j)){zt(e.id);return}u(e.id)},v=j=>{j.button===1&&(j.preventDefault(),zt(e.id))};return s.jsxs(je,{...d,className:ae("group cursor-pointer",d.className),"data-testid":"members-list-item",onAuxClick:v,onClick:f,children:[s.jsxs(de,{className:ae("sticky left-0 z-20 bg-background px-4 py-3 group-hover:bg-[var(--members-sticky-hover-bg)]"),style:c,children:[s.jsx(Fn,{item:e,onClick:u}),r&&s.jsxs(s.Fragment,{children:[s.jsx("div",{"aria-hidden":"true",className:"pointer-events-none absolute inset-y-px w-[24px] group-hover:opacity-0",style:{...Bt,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)"}}),s.jsx("div",{"aria-hidden":"true",className:"pointer-events-none absolute inset-y-px w-[24px] opacity-0 group-hover:opacity-100",style:{...Bt,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)"}})]})]}),s.jsx(de,{className:"px-4 py-3",style:a.status,children:s.jsx(Un,{status:e.status,tiers:e.tiers})}),n&&s.jsx(de,{className:"hidden px-4 py-3 lg:table-cell",style:a.openRate,children:s.jsx($n,{emailOpenRate:e.email_open_rate})}),s.jsx(de,{className:"hidden px-4 py-3 lg:table-cell",style:a.location,children:s.jsx(Bn,{geolocation:e.geolocation})}),s.jsx(de,{className:"hidden px-4 py-3 lg:table-cell",style:a.created,children:s.jsx(zn,{createdAt:e.created_at})}),t.map(j=>s.jsx(de,{className:"hidden px-4 py-3 lg:table-cell",style:a.dynamic,children:s.jsx(Vn,{column:j,member:e,timezone:i})},j.key))]})}const Hn={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)"},Vt=({activeColumns:e,columnStyles:t,showEmailOpenRate:a})=>s.jsxs("colgroup",{children:[s.jsx("col",{style:t.member}),s.jsx("col",{style:t.status}),a&&s.jsx("col",{style:t.openRate}),s.jsx("col",{style:t.location}),s.jsx("col",{style:t.created}),e.map(r=>s.jsx("col",{style:t.dynamic},r.key))]}),Wt=({activeColumns:e,className:t,columnStyles:a,headerRef:r,memberHeaderRef:n,showEmailOpenRate:i})=>s.jsx(ht,{ref:r,className:ae("hidden bg-transparent lg:table-header-group",t),children:s.jsxs(je,{children:[s.jsx(pe,{ref:n,className:"sticky left-0 z-[70] bg-transparent px-4 py-3 [--members-sticky-fade-base:var(--background)]",style:a.member,children:"Member"}),s.jsx(pe,{className:"bg-transparent px-4 py-3",style:a.status,children:"Status"}),i&&s.jsx(pe,{className:"bg-transparent px-4 py-3",style:a.openRate,children:"Open rate"}),s.jsx(pe,{className:"bg-transparent px-4 py-3",style:a.location,children:"Location"}),s.jsx(pe,{className:"bg-transparent px-4 py-3",style:a.created,children:"Created"}),e.map(u=>s.jsx(pe,{className:"bg-transparent px-4 py-3",style:a.dynamic,children:u.label},u.key))]})}),Yn=({columnStyle:e,showPinnedEdge:t})=>s.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:[s.jsxs(qe,{className:"w-full table-fixed border-collapse",children:[s.jsx("colgroup",{children:s.jsx("col",{style:{width:"100%"}})}),s.jsx(ht,{className:"bg-transparent lg:table-header-group",children:s.jsx(je,{children:s.jsx(pe,{className:"bg-transparent px-4 py-3",children:"Member"})})})]}),t&&s.jsx("div",{"aria-hidden":"true",className:"pointer-events-none absolute inset-y-px w-[24px]",style:Hn})]}),Oe={member:40,status:15,openRate:10,location:17.5,created:17.5},Ce={member:320,status:180,openRate:140,location:180,created:160},Ht=17.5,Yt=220;function Gn(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0}function Kn({showEmailOpenRate:e,activeColumnCount:t}){const a=[{key:"member",width:Oe.member},{key:"status",width:Oe.status},...e?[{key:"openRate",width:Oe.openRate}]:[],{key:"location",width:Oe.location},{key:"created",width:Oe.created}],r=Gn(t),n=a.reduce((f,v)=>f+v.width,0),i=100+r*Ht,u=Ht/i*100,d=a.reduce((f,v)=>{const j=v.width/n*100;return f[v.key]=j/i*100,f},{member:0,status:0,openRate:0,location:0,created:0}),c=a.reduce((f,v)=>f+Ce[v.key],0)+r*Yt;return{tableWidthPercentage:i,minTableWidth:c,dynamicColumnWidthPercentage:u,baseColumnWidthPercentages:d,baseColumnMinWidths:{member:Ce.member,status:Ce.status,openRate:Ce.openRate,location:Ce.location,created:Ce.created},dynamicColumnMinWidth:Yt}}function qn(e){const t=(a,r)=>({width:`${a}%`,minWidth:`${r}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)}}}const Gt=({height:e})=>s.jsx("tr",{"aria-hidden":"true",style:{height:e},children:s.jsx("td",{colSpan:999})}),Qn=m.forwardRef(function(t,a){return s.jsx(je,{ref:a,...t,"aria-hidden":"true",children:s.jsx(de,{className:"h-[72px] px-4 py-3",colSpan:999,children:s.jsx("div",{className:"h-full animate-pulse rounded-md bg-muted","data-testid":"loading-placeholder"})})})});function Jn({items:e,totalItems:t,hasNextPage:a,isFetchingNextPage:r,fetchNextPage:n,isLoading:i,showEmailOpenRate:u=!0,activeColumns:d,timezone:c,pageHeaderRef:f,onRowClick:v}){const j=m.useRef(null),C=m.useRef(null),k=m.useRef(null),L=m.useRef(null),w=m.useRef(null),[x,A]=m.useState(0),[P,N]=m.useState(0),[g,b]=m.useState(!1),{visibleItemCount:y,canLoadMore:h,loadMore:o}=Ur(t),l=m.useMemo(()=>Kn({showEmailOpenRate:u,activeColumnCount:d.length}),[d.length,u]),{tableStyle:p,columnStyles:E}=m.useMemo(()=>qn(l),[l]);dr({parentRef:j,isLoading:i}),m.useEffect(()=>{const _=w.current;if(!_)return;const S=()=>{const B=_.scrollLeft;b(B>0),L.current&&(L.current.scrollLeft=B)};return S(),_.addEventListener("scroll",S,{passive:!0}),window.addEventListener("resize",S),()=>{_.removeEventListener("scroll",S),window.removeEventListener("resize",S)}},[d.length,e.length,u]),m.useEffect(()=>{const _=f?.current,S=C.current,B=k.current;if(!_||!S||!B){A(0),N(0);return}const O=_.style.paddingBottom,te=_.style.marginBottom,q=parseFloat(getComputedStyle(_).paddingBottom)||0,R=parseFloat(getComputedStyle(_).marginBottom)||0,V=()=>{const H=S.getBoundingClientRect().height,se=B.getBoundingClientRect().width;_.style.setProperty("padding-bottom",`${q+H}px`,"important"),_.style.setProperty("margin-bottom",`${R-H}px`,"important");const ee=_.getBoundingClientRect().height;A(se),N(Math.max(ee-H,0))};V();const J=new ResizeObserver(()=>{V()});return J.observe(_),J.observe(S),J.observe(B),window.addEventListener("resize",V),()=>{O?_.style.setProperty("padding-bottom",O):_.style.removeProperty("padding-bottom"),te?_.style.setProperty("margin-bottom",te):_.style.removeProperty("margin-bottom"),J.disconnect(),window.removeEventListener("resize",V)}},[d.length,f,u]);const{visibleItems:M,spaceBefore:I,spaceAfter:T}=$r({items:e,totalItems:y,hasNextPage:a,isFetchingNextPage:r,fetchNextPage:n,parentRef:j,estimateSize:()=>72}),G=_=>{v?v(_):window.location.hash=`/members/${_}`};return s.jsxs("div",{ref:j,className:"w-full min-w-0","data-testid":"members-list-scroll-root",children:[s.jsx("div",{className:"sticky z-[60] hidden overflow-visible bg-transparent lg:block",style:{top:P},children:s.jsxs("div",{className:"relative",children:[s.jsx(Yn,{columnStyle:x>0?{width:x}:E.member,showPinnedEdge:g}),s.jsx("div",{ref:L,className:"w-full overflow-hidden",style:x>0?{clipPath:`inset(0 0 0 ${x}px)`}:void 0,children:s.jsxs(qe,{"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:p,children:[s.jsx(Vt,{activeColumns:d,columnStyles:E,showEmailOpenRate:u}),s.jsx(Wt,{activeColumns:d,columnStyles:E,headerRef:C,memberHeaderRef:k,showEmailOpenRate:u})]})})]})}),s.jsx("div",{ref:w,className:"w-full overflow-x-auto overflow-y-visible",children:s.jsxs(qe,{className:"w-full border-collapse lg:w-[var(--members-table-width)] lg:min-w-[var(--members-table-min-width)] lg:table-fixed","data-testid":"members-list",style:p,children:[s.jsx(Vt,{activeColumns:d,columnStyles:E,showEmailOpenRate:u}),s.jsx(Wt,{activeColumns:d,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:E,showEmailOpenRate:u}),s.jsxs(us,{children:[s.jsx(Gt,{height:I}),M.map(({key:_,virtualItem:S,item:B,props:O})=>S.index>e.length-1?s.jsx(Qn,{...O},_):s.jsx(Wn,{...O,activeColumns:d,columnStyles:E,item:B,showEmailOpenRate:u,showPinnedEdge:g,timezone:c,onClick:G},_)),s.jsx(Gt,{height:T})]})]})}),h&&s.jsx(Br,{isLoading:r,onClick:o})]})}const Xn=["subscriptions.plan_interval","subscriptions.status","subscriptions.start_date","subscriptions.current_period_end","conversion","offer_redemptions"];function Zn(e,t){return t&&e.length===0?!1:!e.some(a=>Xn.includes(a.field))}function ei({isFetching:e,isFetchingNextPage:t}){return e&&!t}var ti=Vr();const si=ts(ti);function ks(e){if(e)try{return si.parse(e)}catch{return}}function ri(e){return e.map((t,a)=>({...t,id:`${t.field}:${a+1}`}))}function ai(e,t,a){return e.flatMap(r=>{const n=Object.keys(r);if(n.length!==1||n[0].startsWith("$"))return[];const i=gt(t,n[0],a);if(i){const u=i.definition.codec.parse(r,i.context);if(u)return[u]}return[]})}function ni(e){return[...e].sort((t,a)=>t.localeCompare(a))}function ii(e,t,a){const r=e.flatMap(n=>{const i=gt(t,n.field,a);return i?i.definition.codec.serialize(n,i.context)??[]:[]});if(r.length)return ni(r).join("+")}const li=new Set(["last_seen_at","created_at","subscriptions.start_date","subscriptions.current_period_end"]);function $e(e){return Array.isArray(e.$and)?{operator:"$and",children:e.$and}:Array.isArray(e.$or)?{operator:"$or",children:e.$or}:null}function oi(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"]}}const t=$e(e);if(!t||t.children.length!==2)return null;let a,r;for(const n of t.children)typeof n.subscribed=="boolean"&&(a=n.subscribed),typeof n.email_disabled=="number"&&(r=n.email_disabled);return t.operator==="$and"&&r===0&&a!==void 0?{field:"subscribed",operator:"is",values:[a?"subscribed":"unsubscribed"]}:t.operator==="$or"&&r===1&&a!==void 0?{field:"subscribed",operator:"is-not",values:[a?"unsubscribed":"subscribed"]}:null}function ci(e){const t=$e(e);if(!t||t.children.length!==2)return null;let a,r;for(const n of t.children){const i=n["newsletters.slug"];typeof i=="string"&&(a=i),i&&typeof i=="object"&&!Array.isArray(i)&&typeof i.$ne=="string"&&(a=i.$ne),typeof n.email_disabled=="number"&&(r=n.email_disabled)}return a?t.operator==="$and"&&r===0?{field:`newsletters.${a}`,operator:"is",values:["subscribed"]}:t.operator==="$or"&&r===1?{field:`newsletters.${a}`,operator:"is",values:["unsubscribed"]}:null:null}function ui(e){const t=$e(e);if(!t||t.operator!=="$and"||t.children.length!==2)return null;let a,r;for(const n of t.children)typeof n["feedback.post_id"]=="string"&&(a=n["feedback.post_id"]),typeof n["feedback.score"]=="number"&&(r=n["feedback.score"]);return!a||r!==0&&r!==1?null:{field:"newsletter_feedback",operator:String(r),values:[a]}}const di=[oi,ci,ui];function Ge(e){if(Object.keys(e).some(a=>li.has(a)))return!0;const t=$e(e);return t?t.children.some(a=>Ge(a)):Object.values(e).some(a=>Array.isArray(a)?a.some(r=>r!==null&&typeof r=="object"&&Ge(r)):a!==null&&typeof a=="object"&&Ge(a))}function Ls(e,t){for(const r of di){const n=r(e);if(n)return[n]}const a=$e(e);return a?.operator==="$and"?a.children.flatMap(r=>Ls(r,t)):ai([e],Ae,t)}function mi(e,t){const a=ks(e??"");return a?ri(Ls(a,t)):[]}function fi(e){const t=ks(e??"");return t?Ge(t):!1}function Ms(e,t){return ii(e,Ae,t)}function pi(e,t,a=!t){return!!e&&a&&!t&&fi(e)}function De({baseSearchParams:e,filters:t,search:a,timezone:r}){const n=new URLSearchParams(e),i=Ms(t,r);return n.delete("filter"),n.delete("search"),i&&n.set("filter",i),a&&n.set("search",a),n}function hi(e){const[t,a]=ns(),r=m.useRef(null),n=m.useMemo(()=>t.get("filter")??void 0,[t]),i=m.useMemo(()=>t.toString(),[t]),u=m.useMemo(()=>mi(n,e),[n,e]),[d,c]=m.useState(u),f=m.useMemo(()=>t.get("search")??"",[t]),v=m.useMemo(()=>Ms(d,e),[d,e]);m.useEffect(()=>{i!==r.current&&(c(u),r.current=i)},[i,u]),m.useEffect(()=>{if(r.current!==null&&i!==r.current)return;const w=De({baseSearchParams:t,filters:d,search:f,timezone:e}),x=w.toString();x!==i&&(r.current=x,a(w,{replace:!0}))},[i,d,f,t,a,e]);const j=m.useCallback((w,x={})=>{const A=x.replace??!0,P=De({baseSearchParams:t,filters:w,search:f,timezone:e});c(w),r.current=P.toString(),a(P,{replace:A})},[f,t,a,e]),C=m.useCallback((w,x={})=>{const A=x.replace??!0,P=De({baseSearchParams:t,filters:d,search:w,timezone:e});r.current=P.toString(),a(P,{replace:A})},[d,t,a,e]),k=m.useCallback(({replace:w=!0}={})=>{const x=De({baseSearchParams:t,filters:[],search:f,timezone:e});c([]),r.current=x.toString(),a(x,{replace:w})},[f,t,a,e]),L=m.useCallback(({replace:w=!0}={})=>{const x=De({baseSearchParams:t,filters:[],search:"",timezone:e});c([]),r.current=x.toString(),a(x,{replace:w})},[t,a,e]);return{filters:d,nql:v,search:f,setFilters:j,setSearch:C,clearFilters:k,clearAll:L,hasFilterOrSearch:!!v||f.length>0}}const bi=({timezone:e})=>{const t=m.useRef(null),{filters:a,nql:r,search:n,setFilters:i,setSearch:u,hasFilterOrSearch:d,clearAll:c}=hi(e),{data:f}=tr(),v=mn(),j=hn(v,r),C=f?.config?.emailAnalytics===!0,k=m.useMemo(()=>vs(a),[a]),L=m.useMemo(()=>Zn(a,r),[a,r]),w=m.useMemo(()=>Ja({filters:a,nql:r,search:n}),[a,r,n]),{data:x,isError:A,isFetching:P,isFetchingNextPage:N,refetch:g,fetchNextPage:b,hasNextPage:y}=sr({searchParams:w,keepPreviousData:!0}),h=ei({isFetching:P,isFetchingNextPage:N}),o=x?.meta?.pagination?.total??0,l=a.length>0,p=ae("flex flex-row",!l&&"items-center gap-2",l&&"col-span-full row-start-4 pt-5");return s.jsxs(Ns,{children:[s.jsxs(Es,{ref:t,isLoading:h,totalMembers:o,children:[s.jsx(Qe.Actions,{children:s.jsxs(Qe.ActionGroup,{className:"ml-auto flex-wrap justify-end sm:ml-0 sm:flex-nowrap",children:[s.jsx(In,{search:n,onSearchChange:u}),!l&&s.jsx($t,{activeView:j,filters:a,nql:r,savedViews:v,onFiltersChange:i}),s.jsx(en,{canBulkDelete:L,hasFilterOrSearch:d,memberCount:o,nql:r,search:n,onImportComplete:()=>{g()}})]})}),l&&s.jsx("div",{className:p,children:s.jsx($t,{activeView:j,filters:a,nql:r,savedViews:v,onFiltersChange:i})})]}),s.jsx(ws,{children:h?s.jsx("div",{className:"flex h-full items-center justify-center",children:s.jsx(Ke,{size:"lg"})}):A?s.jsxs("div",{className:"mb-16 flex h-full flex-col items-center justify-center",children:[s.jsx("h2",{className:"mb-2 text-xl font-medium",children:"Error loading members"}),s.jsx("p",{className:"mb-4 text-muted-foreground",children:"Please reload the page to try again"}),s.jsx(U,{onClick:()=>window.location.reload(),children:"Reload page"})]}):x?.members.length?s.jsx(Jn,{activeColumns:k,fetchNextPage:b,hasNextPage:y,isFetchingNextPage:N,isLoading:P&&!N,items:x.members,pageHeaderRef:t,showEmailOpenRate:C,timezone:e,totalItems:o}):s.jsx("div",{className:"flex h-full flex-col items-center justify-center",children:d?s.jsxs(s.Fragment,{children:[s.jsx(Ct,{title:"No matching members found.",children:s.jsx(jt,{})}),s.jsx(U,{className:"mt-4",variant:"outline",onClick:()=>c({replace:!1}),children:"Show all members"})]}):s.jsx(Ct,{title:"No members yet",children:s.jsx(jt,{})})})})]})},Pi=()=>{const[e]=ns(),{data:t,isLoading:a}=Ue({}),r=e.get("filter")??void 0;if(pi(r,!!t,a))return s.jsxs(Ns,{children:[s.jsx(Es,{isLoading:!0,totalMembers:0}),s.jsx(ws,{children:s.jsx("div",{className:"flex h-full items-center justify-center",children:s.jsx(Ke,{size:"lg"})})})]});const i=ms(t?.settings??[]);return s.jsx(bi,{timezone:i})};export{Pi as default};
|