ghost 6.24.0 → 6.25.1
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.25.1.tgz +0 -0
- package/components/tryghost-parse-email-address-6.25.1.tgz +0 -0
- package/core/boot.js +3 -1
- package/core/built/admin/assets/{PolarAngleAxis-7TlIQL3R.js → PolarAngleAxis-C6ZeSpZB.js} +1 -1
- package/core/built/admin/assets/{_baseAssignValue-DJsCJz6y.js → _baseAssignValue-BKAl5FrV.js} +1 -1
- package/core/built/admin/assets/{a-large-small-BnBpzYwl.js → a-large-small-B_ulQCIs.js} +1 -1
- package/core/built/admin/assets/admin-x-settings/admin-x-settings.js +1 -1
- package/core/built/admin/assets/admin-x-settings/{code-editor-view-De3K_osj.mjs → code-editor-view-CBYT1gA1.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-bGxDzD13.mjs → index-CN5CixaU.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-5D8KqsFU.mjs → index-CPQODntW.mjs} +2 -2
- package/core/built/admin/assets/admin-x-settings/{index-BIUDn7ot.mjs → index-CgTfOd7g.mjs} +9 -9
- package/core/built/admin/assets/admin-x-settings/{modals-DuokUyAH.mjs → modals-_y-6HROx.mjs} +2 -2
- package/core/built/admin/assets/{at-sign-DC4NtDDM.js → at-sign-B8xWKM0y.js} +1 -1
- package/core/built/admin/assets/{audience-CC5U4UxI.js → audience-CBOR--z9.js} +1 -1
- package/core/built/admin/assets/{avatar-flipboard-_GQfQXQc.js → avatar-flipboard-IipGb_wZ.js} +1 -1
- package/core/built/admin/assets/{bluesky-sharing-BKyzPl9y.js → bluesky-sharing-CkI1QuAm.js} +1 -1
- package/core/built/admin/assets/{chart-BCQFlmhJ.js → chart-_slUcr-K.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.5b9b463506a16221fc91.js} +6 -6
- package/core/built/admin/assets/{chunk.582.20635869be68725e6d5c.js → chunk.582.d8eae1661d753befaefd.js} +7 -7
- package/core/built/admin/assets/{chunk.123.1255d9e815f933dfdc57.js → chunk.630.3dbb0231a2d871126a80.js} +8 -6
- package/core/built/admin/assets/{code-editor-view-BXnjo7qe.js → code-editor-view-BWMqr2JV.js} +1 -1
- package/core/built/admin/assets/comments-BeoA0nfK.js +1 -0
- package/core/built/admin/assets/{content-helpers-CQXipRWa.js → content-helpers-CmTGdEmL.js} +1 -1
- package/core/built/admin/assets/{copy-B-MxRWPu.js → copy-CDHcAPJw.js} +1 -1
- package/core/built/admin/assets/{data-list-B2sqn7IE.js → data-list-Crb1ffbp.js} +1 -1
- package/core/built/admin/assets/{deleted-feed-item-DQi676Dy.js → deleted-feed-item-DBW0zJQg.js} +1 -1
- package/core/built/admin/assets/{dropzone-GgOCfK2j.js → dropzone-B9JUsQlW.js} +3 -3
- package/core/built/admin/assets/{edit-profile-COx5FmF9.js → edit-profile-Dz-IhetN.js} +1 -1
- package/core/built/admin/assets/{empty-indicator-Bf4Dqk72.js → empty-indicator-2QGnEbtY.js} +1 -1
- package/core/built/admin/assets/{en-BkI47Ou-.js → en-BRQS1Z8j.js} +1 -1
- package/core/built/admin/assets/{feed-Dzc-8jwd.js → feed-T3kW9UJA.js} +1 -1
- package/core/built/admin/assets/filters-ChOMQQZW.js +1 -0
- package/core/built/admin/assets/{gh-chart-Ch6dYUac.js → gh-chart-fuWw60Ka.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-D9sCnmon.js} +1 -1
- package/core/built/admin/assets/{hash-BGd7HEsT.js → hash-CI1pQ1UC.js} +1 -1
- package/core/built/admin/assets/header-OevT95FI.js +1 -0
- package/core/built/admin/assets/{inbox-CFzKvW3h.js → inbox-DYY8-M1K.js} +1 -1
- package/core/built/admin/assets/{index-Dy8dCc8t.js → index-8CZdLQzu.js} +4 -4
- package/core/built/admin/assets/{index-DIO8ceib.js → index-BDAOs7pI.js} +1 -1
- package/core/built/admin/assets/{index-BZyG96u1.js → index-BEEgMX-_.js} +1 -1
- package/core/built/admin/assets/index-BbveDn8H.css +1 -0
- package/core/built/admin/assets/{index-BYXKsmpv.js → index-C-Cpbee5.js} +1 -1
- package/core/built/admin/assets/{index-DDJAHYHQ.js → index-CCF2RKxR.js} +12 -12
- package/core/built/admin/assets/{index-ZuWSQ3L6.js → index-CEnfjH5h.js} +93 -93
- package/core/built/admin/assets/{index-_WMp37yL.js → index-CcFVbffG.js} +1 -1
- package/core/built/admin/assets/{index-DpZazR71.js → index-CyMlhfZJ.js} +1 -1
- package/core/built/admin/assets/{index-DM98UB_U.js → index-DBZYUfjO.js} +1 -1
- package/core/built/admin/assets/{index-D0gRP4Gp.js → index-DJa3pLmx.js} +1 -1
- package/core/built/admin/assets/{index-n5opb8tL.js → index-DVqmhe-L.js} +1 -1
- package/core/built/admin/assets/{index-S2DGJkmz.js → index-DW5aEj6O.js} +2 -2
- package/core/built/admin/assets/{index-CvX5YYEz.js → index-DcFgRUSN.js} +1 -1
- package/core/built/admin/assets/{index-7NTHsKgE.js → index-DjgsxHeB.js} +1 -1
- package/core/built/admin/assets/index-mqQc8MVd.js +1 -0
- package/core/built/admin/assets/{index-CsHjDdYB.js → index-qQZsxgFE.js} +1 -1
- package/core/built/admin/assets/{koenig-lexical-8qAZ5o1x.js → koenig-lexical-CsbE6fpi.js} +1 -1
- package/core/built/admin/assets/kpis-Dw04ruBN.js +1 -0
- package/core/built/admin/assets/{label-CofMdj8x.js → label-tBvn89sm.js} +1 -1
- package/core/built/admin/assets/{links-MSlYSad1.js → links-Do4jcjIh.js} +1 -1
- package/core/built/admin/assets/{loader-circle-CF5G2g_Z.js → loader-circle-C8exRUku.js} +4 -4
- package/core/built/admin/assets/{lucide-react-DZiAu6PQ.js → lucide-react-4VO5Dwow.js} +1 -1
- package/core/built/admin/assets/{main-layout-DEVUkqt_.js → main-layout-BAqXRgAx.js} +1 -1
- package/core/built/admin/assets/{member-route-mLKS-PsA.js → member-route-D4n-RbQd.js} +1 -1
- package/core/built/admin/assets/members-DRLgwCgJ.js +15 -0
- package/core/built/admin/assets/{message-square-text-DESy3kSk.js → message-square-text-CC_1bY-Q.js} +5 -5
- package/core/built/admin/assets/{minus-DVNwSjD6.js → minus-DSyx9DCe.js} +1 -1
- package/core/built/admin/assets/{modals-FYjLOMaQ.js → modals-AryZr_DA.js} +13 -13
- package/core/built/admin/assets/{moderation-u4WS46a-.js → moderation-DwKm9LO-.js} +1 -1
- package/core/built/admin/assets/{newsletter-Cj0UCg4J.js → newsletter-C0rydPGS.js} +1 -1
- package/core/built/admin/assets/{newsletters-_UvhdBE3.js → newsletters-DKdmxfDG.js} +1 -1
- package/core/built/admin/assets/{note-CRnFryTp.js → note-996Zos9G.js} +1 -1
- package/core/built/admin/assets/{overview-Cr0dGxEU.js → overview-r17hlWAB.js} +1 -1
- package/core/built/admin/assets/{pagemenu-BqoDENpI.js → pagemenu-DzpB1AkZ.js} +17 -17
- package/core/built/admin/assets/{post-analytics-DIr_rDtL.js → post-analytics-AwufPVFE.js} +1 -1
- package/core/built/admin/assets/{post-analytics-context-WA--pwK5.js → post-analytics-context-GFe0lMc-.js} +1 -1
- package/core/built/admin/assets/{post-analytics-header-D97SoEaV.js → post-analytics-header-DmGyNvP9.js} +1 -1
- package/core/built/admin/assets/{post-share-modal-DBxR7WCX.js → post-share-modal-CTpdCS2X.js} +1 -1
- package/core/built/admin/assets/posts/{comments-Bswx2dzs.mjs → comments-Cvt31uBs.mjs} +597 -674
- package/core/built/admin/assets/posts/{dialog-67vvNv8e.mjs → dialog-DaViJlnd.mjs} +3 -3
- package/core/built/admin/assets/posts/{dropdown-menu-BKZfsAPJ.mjs → dropdown-menu-B4KGMiRI.mjs} +5 -5
- package/core/built/admin/assets/posts/{empty-indicator-DTmBQa_3.mjs → empty-indicator-BaD6pCXM.mjs} +2 -2
- package/core/built/admin/assets/posts/filters-BsCI4RJg.mjs +2835 -0
- package/core/built/admin/assets/posts/{get-site-timezone-D75cHSJ1.mjs → get-site-timezone-Bo-iI2bI.mjs} +2 -2
- package/core/built/admin/assets/posts/{growth-BqJWjpAp.mjs → growth-BJxIDp2o.mjs} +14 -14
- package/core/built/admin/assets/posts/header-7zhnErbb.mjs +100 -0
- package/core/built/admin/assets/posts/{heading-DXxLDQ96.mjs → heading-BCDx_eVF.mjs} +2 -2
- package/core/built/admin/assets/posts/{hooks-pVotzebr.mjs → hooks-DQL2O_El.mjs} +2 -2
- package/core/built/admin/assets/posts/{index-DZ1HzbGS.mjs → index-0mEgtljt.mjs} +3 -3
- package/core/built/admin/assets/posts/{index-By5yPnMZ.mjs → index-BTzJVQ6S.mjs} +10 -10
- package/core/built/admin/assets/posts/{input-DdXe2Fjm.mjs → input-DaHXv92f.mjs} +2 -2
- package/core/built/admin/assets/posts/{kpis-1MXZeSC9.mjs → kpis-GRsx6fPV.mjs} +10 -10
- package/core/built/admin/assets/posts/{links-DGzzdzsH.mjs → links-B1q_pqE9.mjs} +4 -4
- package/core/built/admin/assets/posts/{loading-indicator-CSj2spwS.mjs → loading-indicator-DiYqXomj.mjs} +3 -3
- package/core/built/admin/assets/posts/{main-layout-CGs25JVH.mjs → main-layout-DeqPTJTe.mjs} +2 -2
- package/core/built/admin/assets/posts/{members-BRcED5fL.mjs → members-LABk5yI5.mjs} +4102 -3442
- package/core/built/admin/assets/posts/{newsletter-D706LlgM.mjs → newsletter-C_nbHBaP.mjs} +15 -15
- package/core/built/admin/assets/posts/{overview-5dG5ypjx.mjs → overview-AJnKv4Ze.mjs} +16 -16
- package/core/built/admin/assets/posts/{post-analytics-wvNuOa4c.mjs → post-analytics-b_CKsePp.mjs} +6 -6
- package/core/built/admin/assets/posts/{post-analytics-context-BqnFe05q.mjs → post-analytics-context-D6jtpxxm.mjs} +5 -5
- package/core/built/admin/assets/posts/{post-analytics-header-Dsi5l6hb.mjs → post-analytics-header-R5UF_tF0.mjs} +11 -11
- package/core/built/admin/assets/posts/{post-share-modal-DWe35McY.mjs → post-share-modal-y4BEOajk.mjs} +4 -4
- package/core/built/admin/assets/posts/posts-C2hNrf1c.mjs +37 -0
- package/core/built/admin/assets/posts/posts.js +1 -1
- package/core/built/admin/assets/posts/{reply-B4vwBMwj.mjs → reply-2Uvi3Kxb.mjs} +2 -2
- package/core/built/admin/assets/posts/{search-DQuB1WMm.mjs → search-se7meOnL.mjs} +2 -2
- package/core/built/admin/assets/posts/{select-BMPHyOdQ.mjs → select-DpUpauFg.mjs} +8 -8
- package/core/built/admin/assets/posts/{separator-DgZ2VF9r.mjs → separator-CdBM46dw.mjs} +3 -3
- package/core/built/admin/assets/posts/{settings-D-wnf7Qg.mjs → settings-Chhj9xKP.mjs} +2 -2
- package/core/built/admin/assets/posts/{sheet-SOdCzxUt.mjs → sheet--k3SiDko.mjs} +3 -3
- package/core/built/admin/assets/posts/{skeleton-Du7JXZ_1.mjs → skeleton-CUSLSLoY.mjs} +3 -3
- package/core/built/admin/assets/posts/{source-icon-DcBtKbCl.mjs → source-icon-BjYUIoXN.mjs} +3 -3
- package/core/built/admin/assets/posts/{stats-CeLav-Hu.mjs → stats-BRdXKaxM.mjs} +4 -4
- package/core/built/admin/assets/posts/{table-DlaJMBps.mjs → table-Bgi_UcfL.mjs} +2 -2
- package/core/built/admin/assets/posts/{tabs-BQQbtw2g.mjs → tabs-DT8Bh72E.mjs} +14 -14
- package/core/built/admin/assets/posts/tags-BCFLnZYl.mjs +399 -0
- package/core/built/admin/assets/posts/{tags-CLyaNf39.mjs → tags-Kv2q0o3p.mjs} +2 -2
- package/core/built/admin/assets/posts/use-scroll-restoration-CLAUAal3.mjs +517 -0
- package/core/built/admin/assets/posts/{use-infinite-virtual-scroll-B_NwiBXK.mjs → virtual-list-window-CQDEqNBL.mjs} +246 -262
- package/core/built/admin/assets/posts/{web-TEVKbXSI.mjs → web-CqN0MQU6.mjs} +18 -18
- package/core/built/admin/assets/posts-GvXDuhVG.js +1 -0
- package/core/built/admin/assets/{referrers-J4vexZCf.js → referrers-Bd9pW-WX.js} +1 -1
- package/core/built/admin/assets/{repeat-BxOK9zhN.js → repeat-y6HlMgGO.js} +2 -2
- package/core/built/admin/assets/{reply-BoTN-eE0.js → reply-Cc8ryI5v.js} +2 -2
- package/core/built/admin/assets/{select-Bd1zcqox.js → select-CGr_5qad.js} +1 -1
- package/core/built/admin/assets/{settings-D72z6T_a.js → settings-BPsfSgg3.js} +1 -1
- package/core/built/admin/assets/{settings-BGbGoa4s.js → settings-BTd0Adha.js} +19 -19
- package/core/built/admin/assets/{sort-button-BOLTpImz.js → sort-button-k76_5HR2.js} +1 -1
- package/core/built/admin/assets/{source-icon-BqEM5MvU.js → source-icon-DMt0UskC.js} +1 -1
- package/core/built/admin/assets/{sprout-Bf-wc2Vo.js → sprout-Td9eaOoY.js} +2 -2
- package/core/built/admin/assets/{square-Cj_bJ0HZ.js → square-Df8vEYlG.js} +1 -1
- package/core/built/admin/assets/stats/{audience-BiHYBUzT.mjs → audience-DMTObpL8.mjs} +3 -3
- package/core/built/admin/assets/stats/{content-helpers-CIXZiyCm.mjs → content-helpers-ReMp9KJN.mjs} +4 -4
- package/core/built/admin/assets/stats/{index-CkKk-p14.mjs → index-6L-yLKFX.mjs} +8 -8
- package/core/built/admin/assets/stats/{index-DBB8Oih1.mjs → index-CIUyjeP-.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-9zQR4gr0.mjs → index-CMSDpQm3.mjs} +3626 -3513
- package/core/built/admin/assets/stats/{index-DErXBfDM.mjs → index-Ca-_KJzy.mjs} +5 -5
- package/core/built/admin/assets/stats/{index-DMSmQLxG.mjs → index-CfO5yPSP.mjs} +5 -5
- package/core/built/admin/assets/stats/{sort-button-BqY7GFaO.mjs → sort-button-BB_M2CdZ.mjs} +3 -3
- package/core/built/admin/assets/stats/{stats-BeJgKX2G.mjs → stats-B2nnuLeU.mjs} +4 -4
- package/core/built/admin/assets/stats/stats.js +1 -1
- package/core/built/admin/assets/stats/{tabs-CPz357mW.mjs → tabs-DjJG-d3O.mjs} +3 -3
- package/core/built/admin/assets/stats/{use-growth-stats-WMYXBQE3.mjs → use-growth-stats-BMT5M7l6.mjs} +3 -3
- package/core/built/admin/assets/{stats-DWpHtRym.js → stats-Bs9ZbmXX.js} +1 -1
- package/core/built/admin/assets/stats-view-BWoPuaLz.js +1 -0
- package/core/built/admin/assets/{step-1-Bjya9Gt0.js → step-1-BUvsuCs0.js} +1 -1
- package/core/built/admin/assets/{step-2-CJ6I8JNc.js → step-2-DI9ekXls.js} +1 -1
- package/core/built/admin/assets/{step-3-3fs6Y2Kj.js → step-3-DzT_XhaS.js} +2 -2
- package/core/built/admin/assets/{table-B4zlzEDP.js → table-BKqaEGAm.js} +1 -1
- package/core/built/admin/assets/{tabs-mR5oJGm5.js → tabs-G6Ql8vbf.js} +1 -1
- package/core/built/admin/assets/tags-BHm-dlBs.js +1 -0
- package/core/built/admin/assets/{tags-CsgMtkFL.js → tags-_taMP0sJ.js} +1 -1
- package/core/built/admin/assets/{textarea-CQjEvapR.js → textarea-DcVuGYYq.js} +1 -1
- package/core/built/admin/assets/{tiers-CQE0v797.js → tiers-kv-xBoqQ.js} +1 -1
- package/core/built/admin/assets/{toggle-group-CR-Z-bJL.js → toggle-group-DsatLdt7.js} +1 -1
- package/core/built/admin/assets/{topic-filter-_NyD55eH.js → topic-filter-DkJyIuAf.js} +1 -1
- package/core/built/admin/assets/{trash-BFSLkv0z.js → trash-BeZZgbn-.js} +1 -1
- package/core/built/admin/assets/{upload-BTxT4v2z.js → upload-BG7KNIn7.js} +4 -4
- package/core/built/admin/assets/{use-growth-stats-BGymNu5O.js → use-growth-stats-CNGdl44N.js} +1 -1
- package/core/built/admin/assets/use-scroll-restoration-CQ3w0W98.js +1 -0
- package/core/built/admin/assets/{use-simple-pagination-Cq7Afp_c.js → use-simple-pagination-BeIJ_5Vv.js} +1 -1
- package/core/built/admin/assets/{user-plus-DMl69yKl.js → user-plus-CMxR50-Y.js} +1 -1
- package/core/built/admin/assets/{user-round-check-CVuZXUPz.js → user-round-check-2nhPmqP3.js} +1 -1
- package/core/built/admin/assets/virtual-list-window-Uq8oKYVG.js +4 -0
- package/core/built/admin/assets/{wallet-cards-zHR_y6Sp.js → wallet-cards-CJcVzH0D.js} +1 -1
- package/core/built/admin/assets/{web-CmFHgeQw.js → web-BPwTFKrc.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/members/service.js +0 -22
- package/core/server/services/stripe/service.js +1 -2
- package/core/server/services/verification/verification-webhook-service.js +2 -2
- package/core/server/services/verification/verification-webhook-service.ts +2 -2
- package/core/server/services/verification-trigger.js +34 -69
- package/core/server/services/webhooks/webhook-trigger.js +1 -1
- package/core/shared/labs.js +2 -2
- package/package.json +10 -28
- package/tsconfig.tsbuildinfo +1 -1
- package/yarn.lock +423 -107
- package/components/tryghost-i18n-6.24.0.tgz +0 -0
- 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/kpis-Cv75oSPY.js +0 -1
- package/core/built/admin/assets/members-DcElgZ2t.js +0 -15
- 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/shared/config/env/config.testing-browser.json +0 -98
- /package/core/built/admin/assets/{chunk.423.dae9a3bbe7845c3a3cfc.js.LICENSE.txt → chunk.434.de8a15730373eccfeefe.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as t,bG as F,t as u,b as g,bH as T,r as j,bC as z,bD as E,L as S,E as M,c as P,bI as U,S as w,A as $,B as L,bu as B,m as C,h as v,d as W,n as _,bJ as D,bK as H,e as O,P as q}from"./index-ZuWSQ3L6.js";import{A as G}from"./at-sign-DC4NtDDM.js";import{R as V,U as K}from"./user-round-check-CVuZXUPz.js";import{R as J}from"./reply-BoTN-eE0.js";const I=({notificationType:a,size:l="lg",className:i})=>{let r,s="";const n="white",c=l==="sm"?13:20,o=l==="sm"?2:1.5;switch(a){case"follow":r=t.jsx(K,{className:`-mt-0.5 -mr-0.5 ${l==="sm"&&"size-[11px]"}`,color:n,size:c,strokeWidth:o}),s="bg-blue-600";break;case"like":r=t.jsx(F,{className:`${l==="sm"?"size-[11px]":"mt-px size-5"}`,color:n,strokeWidth:o}),s="bg-pink-600";break;case"reply":r=t.jsx(J,{className:"mr-px mb-px",color:n,size:c,strokeWidth:o}),s="bg-purple-600";break;case"repost":r=t.jsx(V,{color:n,size:c,strokeWidth:o}),s="bg-green-500";break;case"mention":r=t.jsx(G,{className:`${l==="sm"?"size-[12px]":"size-5"}`,color:n,size:c,strokeWidth:o}),s="bg-orange-500";break}return t.jsx("div",{className:`flex ${l==="sm"?"size-5":"size-9"} items-center justify-center rounded-full ${s} ${i&&i}`,children:r})},Q=u.createContext(void 0),h=({isGrouped:a,centerAlign:l,children:i,onClick:r,url:s,className:n})=>t.jsx(Q.Provider,{value:{onClick:r,url:s},children:t.jsx("div",{className:`group relative -mx-4 -my-px ${a?"grid":"flex"} ${l?"items-center":"items-start"} break-anywhere cursor-pointer grid-cols-[auto_1fr] gap-x-4 gap-y-2.5 rounded-lg px-4 py-5 text-left hover:bg-gray-75 ${n}`,role:"button",onClick:r,children:i})}),Z=({size:a="lg",type:l})=>t.jsx("div",{className:"col-start-1 row-start-1",children:t.jsx(I,{notificationType:l,size:a})}),X=({children:a})=>t.jsx("div",{className:"col-start-2 row-start-1 flex gap-2",children:a}),Y=({children:a})=>t.jsx("div",{className:"col-start-2 row-start-2 -mt-0.5 grow overflow-hidden",children:a});h.Icon=Z;h.Avatars=X;h.Content=Y;const ee=()=>t.jsx("div",{className:"h-px w-full bg-gray-150 dark:bg-gray-950"});function te(a){const r=new Date(a).getTime();return(Math.floor(r/864e5)*864e5).toString()}function se(a){const l={};let i=null,r=0;return a.forEach(s=>{s.type!==i&&(r+=1,i=s.type);let n="";const c=`_${te(s.createdAt)}`,o=`_seq${r}`;switch(s.type){case"like":s.post?.id&&(n=`like_${s.post.id}${c}${o}`);break;case"reply":n=`reply_${s.id}`;break;case"repost":s.post?.id&&(n=`repost_${s.post.id}${c}${o}`);break;case"follow":n=`follow_${c}${o}`;break;case"mention":n=`mention_${s.id}`;break}l[n]||(l[n]={id:s.id,type:s.type,actors:[],post:s.post,inReplyTo:s.inReplyTo,createdAt:s.createdAt}),l[n].actors.find(f=>f.id===s.actor.id)||l[n].actors.push(s.actor)}),Object.values(l)}const ae=({group:a})=>{const[l,...i]=a.actors,r=i.length>0,s="cursor-pointer font-semibold hover:underline text-black dark:text-white",n=g(),c=t.jsxs(t.Fragment,{children:[t.jsx(q,{actor:l,align:"center",isCurrentUser:!1,children:t.jsx("span",{className:s,onClick:o=>{o?.stopPropagation(),v(l.handle,n)},children:l.name})}),r&&` and ${i.length} ${i.length>1?"others":"other"}`]});switch(a.type){case"follow":return t.jsxs(t.Fragment,{children:[c," followed you"]});case"like":return t.jsxs(t.Fragment,{children:[c," liked your ",a.post?.type==="article"?"post":"note"]});case"repost":return t.jsxs(t.Fragment,{children:[c," reposted your ",a.post?.type==="article"?"post":"note"]});case"reply":if(a.inReplyTo&&typeof a.inReplyTo!="string")return c;break;case"mention":return c}return t.jsx(t.Fragment,{})},ne=({content:a,className:l,stripTags:i=[]})=>{const r=j.useRef(null),s=g();return j.useEffect(()=>{const n=r.current;if(!n)return;const c=o=>{const y=o.target.closest("a[data-profile]");if(y){const x=y.getAttribute("data-profile")?.trim();/^@([\w.-]+)@([\w-]+\.[\w.-]+[a-zA-Z])$/.test(x||"")&&x&&(o.preventDefault(),o.stopPropagation(),v(x,s))}};return n.addEventListener("click",c),()=>{n.removeEventListener("click",c)}},[s,a]),t.jsx("div",{dangerouslySetInnerHTML:{__html:_(a||"",i)},ref:r,className:l})},ce=()=>{const[a,l]=u.useState({}),i=g(),r=e=>{l(d=>({...d,[e]:!d[e]}))},s=()=>{},n=5,{data:c,error:o,fetchNextPage:f,hasNextPage:y,isFetchingNextPage:x,isLoading:b}=T("index"),k=c?.pages.flatMap(e=>se(e.notifications))??Array(10).fill({actors:[{}]}),p=j.useRef(null),N=j.useRef(null);j.useEffect(()=>(p.current&&p.current.disconnect(),p.current=new IntersectionObserver(e=>{e[0].isIntersecting&&y&&!x&&f()}),N.current&&p.current.observe(N.current),()=>{p.current&&p.current.disconnect()}),[y,x,f]);const R=(e,d)=>{switch(e.type){case"like":e.post&&i(`/${e.post.type==="article"?"reader":"notes"}/${encodeURIComponent(e.post.id)}`);break;case"reply":e.post&&e.inReplyTo&&i(`/notes/${encodeURIComponent(e.post.id)}`);break;case"repost":e.post&&i(`/${e.post.type==="article"?"reader":"notes"}/${encodeURIComponent(e.post.id)}`);break;case"follow":e.actors.length>1?r(e.id||`${e.type}_${d}`):v(e.actors[0].handle,i);break;case"mention":e.post&&i(`/notes/${encodeURIComponent(e.post.id)}`);break}};return o&&z(o)?t.jsx(E,{errorCode:o.code,statusCode:o.statusCode}):t.jsx(S,{children:t.jsxs("div",{className:"z-0 flex w-full flex-col items-center",children:[b===!1&&k.length===0&&t.jsxs(M,{children:[t.jsx(P,{children:t.jsx(U,{})}),"Quiet for now, but not for long! When someone likes, boosts, or replies to you, you'll find it here."]}),k.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"my-8 flex w-full max-w-[620px] flex-col max-md:mt-5",children:k.map((e,d)=>t.jsxs(u.Fragment,{children:[t.jsxs(h,{centerAlign:e.actors.length<2&&e.type==="follow",className:"hover:bg-gray-75 dark:hover:bg-gray-950",isGrouped:e.actors.length>1,onClick:()=>R(e,d),children:[b?t.jsx(w,{className:"rounded-full",containerClassName:"flex h-10 w-10"}):e.actors.length>1?t.jsx(h.Icon,{type:e.type}):t.jsxs("div",{className:"relative",children:[t.jsx($,{author:{icon:{url:e.actors[0].avatarUrl||""},name:e.actors[0].name,handle:e.actors[0].handle},size:"notification"},e.actors[0].id),t.jsx(I,{className:"absolute -right-1 -bottom-1 z-10 border-2 border-white dark:border-black",notificationType:e.type,size:"sm"})]}),e.actors.length>1&&t.jsx(h.Avatars,{children:t.jsxs("div",{className:"flex w-full flex-col",children:[t.jsxs("div",{className:"relative flex items-center pl-2",children:[!a[e.id||`${e.type}_${d}`]&&e.actors.slice(0,n).map(m=>t.jsx($,{author:{icon:{url:m.avatarUrl||""},name:m.name,handle:m.handle},className:"-ml-2 bg-[#F3F3F3]! outline outline-2 outline-white group-hover:bg-[#EDEEF0]! group-hover:outline-gray-75 dark:outline-black group-hover:dark:outline-gray-950",size:"notification"},m.id)),e.actors.length>n&&!a[e.id||`${e.type}_${d}`]&&t.jsx("div",{className:"absolute right-[28px] z-10 flex size-9 items-center justify-center rounded-full bg-black/50 text-base font-semibold tracking-tightest text-white",children:`+${e.actors.length-n}`}),e.actors.length>1&&t.jsxs(L,{className:`group flex items-center gap-0.5 text-gray-700 hover:bg-transparent hover:text-black dark:text-gray-600 dark:hover:text-white ${a[e.id||`${e.type}_${d}`]?"ml-[-20px]":"ml-0 w-[28px]"}`,variant:"ghost",onClick:m=>{m?.stopPropagation(),r(e.id||`${e.type}_${d}`)},children:[t.jsx(B,{className:`${a[e.id||`${e.type}_${d}`]?"rotate-180":""}`,size:20,strokeWidth:1.5}),a[e.id||`${e.type}_${d}`]?"Hide":t.jsx("span",{className:"sr-only",children:"Show all"})]})]}),t.jsx("div",{className:`overflow-hidden transition-all duration-300 ease-in-out ${a[e.id||`${e.type}_${d}`]?"mb-2 max-h-[1384px] opacity-100":"max-h-0 opacity-0"}`,children:a[e.id||`${e.type}_${d}`]&&e.actors.length>1&&t.jsx("div",{className:"flex flex-col gap-2 pt-2",children:e.actors.map(m=>t.jsxs("div",{className:"group/item break-anywhere flex items-center justify-between gap-4",onClick:A=>{A?.stopPropagation(),v(m.handle,i)},children:[t.jsxs("div",{className:"flex min-w-0 items-center",children:[t.jsx($,{author:{icon:{url:m.avatarUrl||""},name:m.name,handle:m.handle},size:"xs"}),t.jsx("span",{className:"ml-2 line-clamp-1 text-base font-semibold group-hover/item:underline dark:text-white",children:m.name}),t.jsx("span",{className:"ml-1 line-clamp-1 text-base text-gray-700 dark:text-gray-600",children:m.handle})]}),e.type==="follow"&&!m.followedByMe&&t.jsx(C,{following:!1,handle:m.handle,variant:"link"})]},m.id))})})]})}),t.jsxs(h.Content,{children:[t.jsx("div",{children:b?t.jsxs(t.Fragment,{children:[t.jsx(w,{}),t.jsx(w,{className:"w-full max-w-60"})]}):t.jsxs("div",{className:"flex justify-between",children:[t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"truncate",children:t.jsx(ae,{group:e})}),e.actors.length<2&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"mt-px text-[8px] text-gray-700 dark:text-gray-600",children:"•"}),t.jsx("span",{className:"mt-0.5 text-sm text-gray-700 dark:text-gray-600",children:W(e,!1)})]})]}),e.actors.length===1&&(e.type==="follow"||e.type==="reply"||e.type==="mention")&&!e.actors[0].followedByMe&&t.jsx(C,{following:!1,handle:e.actors[0].handle,variant:"link"})]})}),(e.type==="reply"&&e.inReplyTo||e.type==="mention"||e.type==="like"&&!e.post?.name&&e.post?.content||e.type==="repost"&&!e.post?.name&&e.post?.content)&&(e.type!=="reply"&&e.type!=="mention"?t.jsxs("div",{className:"ap-note-content mt-0.5 line-clamp-1 text-sm text-pretty text-gray-700 dark:text-gray-600",children:[e.post?.type==="article"&&e.post?.title&&t.jsxs(t.Fragment,{children:[e.post.title," — "]}),t.jsx("span",{dangerouslySetInnerHTML:{__html:_(e.post?.content||"")}})]}):t.jsx(t.Fragment,{children:t.jsxs("div",{className:"mt-2.5 rounded-md bg-gray-100 px-5 py-[14px] group-hover:bg-gray-200 dark:bg-gray-925/30 group-hover:dark:bg-black/40",children:[t.jsx(ne,{className:"ap-note-content text-pretty",content:e.post?.content||"",stripTags:["a"]}),e.post&&e.post.attachments&&e.post.attachments.length>0&&t.jsx("div",{className:"notification-attachments mb-1 [&_.attachment-gallery]:flex [&_.attachment-gallery]:flex-wrap [&_img]:aspect-square [&_img]:max-w-[calc(20%-6.4px)]",children:D({...e.post,type:"Note",attachment:e.post.attachments})})]})})),(e.type==="reply"&&e.post||e.type==="mention")&&t.jsx("div",{className:"mt-1.5",children:t.jsx(H,{actor:{...e.actors[0],icon:{url:e.actors[0].avatarUrl||""},id:e.actors[0].url,preferredUsername:e.actors[0].handle?.replace(/^@([^@]+)@.*$/,"$1")||"unknown"},buttonClassName:"hover:bg-gray-200",commentCount:e.post.replyCount||0,layout:"notification",likeCount:e.post.likeCount||0,object:{...e.post,liked:e.post.likedByMe,reposted:e.post.repostedByMe},repostCount:e.post.repostCount||0,onLikeClick:s})})]})]}),d<k.length-1&&t.jsx("div",{className:"pl-[52px]",children:t.jsx(ee,{})})]},e.id||`${e.type}_${d}`))}),t.jsx("div",{ref:N,className:"h-1"}),x&&t.jsx("div",{className:"-mt-4 mb-8 flex flex-col items-center justify-center gap-4 text-center",children:t.jsx(O,{size:"md"})})]})]})})};export{ce as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as N,j as s,bO as w,bP as T,B as y,bQ as D,bR as C,bS as L,bT as S,a_ as E,bU as $,am as h,al as g,bV as H,bW as I,r as O,b2 as G,b5 as q,aU as U,b7 as W,b9 as V}from"./index-ZuWSQ3L6.js";import{S as k}from"./source-icon-BqEM5MvU.js";import{p as F,e as Q}from"./source-utils-B1S3ZHA2.js";import{C as P,a as J,b as X,h as Y,c as R,i as Z}from"./pagemenu-BqoDENpI.js";import{D as ss,h as es,i as K,a as as,b as ts,c as rs,d as is,e as ls,f as ns,g as cs}from"./data-list-B2sqn7IE.js";import{S as os,u as ds}from"./post-analytics-context-WA--pwK5.js";import{A as ms}from"./lucide-react-DZiAu6PQ.js";import{a as us}from"./wallet-cards-zHR_y6Sp.js";import{G as hs}from"./gh-chart-Ch6dYUac.js";import{T as xs,a as ps,K as _,d as x,e as vs}from"./tabs-mR5oJGm5.js";const js=i=>{const a=Object.values(os).find(l=>l.value===i);return a?["Last 7 days","Last 30 days","Last 90 days","Last 12 months"].includes(a.name)?`in the ${a.name.toLowerCase()}`:a.name==="All time"?"(all time)":a.name.toLowerCase():""},M="https://www.google.com/s2/favicons?domain=ghost.org&sz=64",p=({dataTableHeader:i,data:a,defaultSourceIconUrl:l=M,onSourceClick:o})=>s.jsxs(ss,{children:[i&&s.jsxs(es,{children:[s.jsx(K,{children:"Source"}),s.jsx(K,{children:"Visitors"})]}),s.jsx(as,{children:a?.map(e=>{const r=!!o,c=e.source?e.source.toLowerCase().replace(/[^a-z0-9]/g,"-"):"direct";return s.jsxs(ts,{className:`group/row ${r?"cursor-pointer":""}`,"data-testid":`source-row-${c}`,onClick:r?()=>o(e.source):void 0,children:[s.jsx(rs,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),s.jsx(is,{className:"group-hover/datalist:max-w-[calc(100%-140px)]",children:s.jsx("div",{className:"flex items-center space-x-4 overflow-hidden",children:s.jsx("div",{className:"truncate font-medium",children:e.linkUrl&&!o?s.jsxs("a",{className:"group/link flex items-center gap-2",href:e.linkUrl,rel:"noreferrer",target:"_blank",children:[s.jsx(k,{defaultSourceIconUrl:l,displayName:e.displayName,iconSrc:e.iconSrc}),s.jsx("span",{className:"group-hover/link:underline",children:e.displayName})]}):s.jsxs("span",{className:"flex items-center gap-2",children:[s.jsx(k,{defaultSourceIconUrl:l,displayName:e.displayName,iconSrc:e.iconSrc}),s.jsx("span",{children:e.displayName})]})})})}),s.jsxs(ls,{children:[s.jsx(ns,{children:h(e.visits)}),s.jsx(cs,{children:g(e.percentage||0)})]})]},e.source)})})]}),Vs=({data:i,range:a=30,totalVisitors:l=0,siteUrl:o,siteIcon:e,defaultSourceIconUrl:r=M,tableOnly:c=!1,topSourcesLimit:n=10,onSourceClick:t})=>{const{isPostLoading:m}=ds(),u=N.useMemo(()=>F({data:i,mode:"visits",siteUrl:o,siteIcon:e,defaultSourceIconUrl:r}),[i,o,e,r]),d=N.useMemo(()=>Q({processedData:u,totalVisitors:l,mode:"visits"}),[u,l]),f=d.slice(0,n),v="Top sources",j=`How readers found this post ${a&&` ${js(a)}`}`;if(c){const z=d.slice(0,n),B=d.length>n;return s.jsxs("div",{children:[s.jsx(p,{data:z,dataTableHeader:!1,defaultSourceIconUrl:r,range:a,onSourceClick:t}),B&&s.jsx("div",{className:"mt-4",children:s.jsxs(w,{children:[s.jsx(T,{asChild:!0,children:s.jsxs(y,{className:"w-full",size:"sm",variant:"outline",children:["View all (",d.length,") ",s.jsx(ms,{size:14})]})}),s.jsxs(D,{className:"overflow-y-auto pt-0 sm:max-w-[600px]",children:[s.jsxs(C,{className:"sticky top-0 z-40 -mx-6 bg-background/60 p-6 backdrop-blur",children:[s.jsx(L,{children:v}),s.jsx(S,{children:j})]}),s.jsx("div",{className:"group/datalist",children:s.jsx(p,{data:d,dataTableHeader:!0,defaultSourceIconUrl:r,range:a,onSourceClick:t})})]})]})})]})}const A=m;return s.jsxs(P,{className:"group/datalist","data-testid":"top-sources-card",children:[s.jsxs("div",{className:"flex items-center justify-between p-6",children:[s.jsxs(J,{className:"p-0",children:[s.jsx(X,{children:v}),s.jsx(Y,{children:j})]}),s.jsx(E,{className:"mr-2",children:"Visitors"})]}),s.jsxs(R,{className:"overflow-hidden",children:[s.jsx("div",{className:"h-[1px] w-full bg-border"}),A?s.jsx($,{lines:5}):f.length>0?s.jsx(p,{data:f,dataTableHeader:!1,defaultSourceIconUrl:r,range:a,onSourceClick:t}):s.jsx("div",{className:"py-20 text-center text-sm text-gray-700",children:"No sources data available."})]}),d.length>10&&s.jsx(Z,{children:s.jsxs(w,{children:[s.jsx(T,{asChild:!0,children:s.jsxs(y,{variant:"outline",children:["View all ",s.jsx(us,{})]})}),s.jsxs(D,{className:"overflow-y-auto pt-0 sm:max-w-[600px]",children:[s.jsxs(C,{className:"sticky top-0 z-40 -mx-6 bg-background/60 p-6 backdrop-blur",children:[s.jsx(L,{children:v}),s.jsx(S,{children:j})]}),s.jsx("div",{className:"group/datalist",children:s.jsx(p,{data:d,dataTableHeader:!0,defaultSourceIconUrl:r,range:a,onSourceClick:t})})]})]})})]})},bs=i=>{if(!i?.length)return{visits:"0",views:"0",bounceRate:"0%",duration:"0s"};const a=n=>{const t=Number(n);return isNaN(t)?0:t},l=i.reduce((n,t)=>n+a(t.visits),0),o=i.reduce((n,t)=>n+a(t.pageviews),0),e=n=>l===0?0:i.reduce((t,m)=>{const u=a(m[n]),d=a(m.visits);return t+u*d/l},0),r=e("bounce_rate"),c=e("avg_session_sec");return{visits:h(l),views:h(o),bounceRate:g(r),duration:H(c)}},b={visits:{dataKey:"visits",label:"Visitors",color:"var(--chart-blue)",formatter:h},views:{dataKey:"pageviews",label:"Pageviews",color:"var(--chart-teal)",formatter:h},"bounce-rate":{dataKey:"bounce_rate",label:"Bounce rate",color:"var(--chart-purple)",formatter:g},duration:{dataKey:"avg_session_sec",label:"Time on page",color:"var(--chart-orange)",formatter:H}},ks=({data:i,range:a})=>{const[l]=I(),o=l.get("tab")||"visits",[e,r]=O.useState(o),c=b[e],n=G(i||[],a,c.dataKey,"sum")?.map(m=>{const u=Number(m[c.dataKey]);return{date:String(m.date),value:u,formattedValue:c.formatter(u),label:c.label}}),t=bs(i);return s.jsx(P,{children:s.jsx(R,{children:s.jsxs(xs,{defaultValue:e,variant:"kpis",children:[s.jsxs(ps,{className:"-mx-6 hidden grid-cols-2 md:visible! md:grid!",children:[s.jsx(_,{value:"visits",onClick:()=>{r("visits")},children:s.jsx(x,{color:b.visits.color,label:"Unique visitors",value:t.visits})}),s.jsx(_,{value:"views",onClick:()=>{r("views")},children:s.jsx(x,{color:b.views.color,label:"Total views",value:t.views})})]}),s.jsxs(q,{children:[s.jsx(U,{className:"md:hidden",asChild:!0,children:s.jsxs(vs,{children:[e==="visits"&&s.jsx(x,{color:"var(--chart-blue)",label:"Unique visitors",value:t.visits}),e==="views"&&s.jsx(x,{color:"var(--chart-teal)",label:"Total views",value:t.views})]})}),s.jsxs(W,{align:"end",className:"w-56",children:[s.jsx(V,{onClick:()=>r("visits"),children:"Unique visitors"}),s.jsx(V,{onClick:()=>r("views"),children:"Total views"})]})]}),s.jsx("div",{className:"my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500",children:s.jsx(hs,{className:"-mb-3 aspect-auto h-[16vw] max-h-[320px] min-h-[180px] w-full",color:c.color,data:n,id:c.dataKey,range:a,showHours:!0,syncId:"overview-charts"})})]})})})};export{b as K,Vs as S,ks as a,js as b,bs as g};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import{j as s,z as le,ao as xs,c9 as Pt,r as d,cw as Ft,cx as Ut,cz as $t,cv as zt,cM as Bt,X as at,cy as ys,B as U,a0 as ht,ad as Vt,ae as nt,D as Me,v as Ae,w as Te,x as Ie,ab as ge,d1 as vs,de as ws,df as Yt,e as He,by as _s,C as js,ci as Gt,cJ as fe,dg as Ss,aa as Es,dh as Ns,di as Cs,W as ie,b5 as ks,aU as Rs,b6 as Ls,b7 as Ds,b9 as Se,ba as bt,cq as Ht,c7 as Os,dj as Ms,dk as it,dl as As,dm as Ts,dn as Is,cg as gt,dp as Kt,dq as xt,aG as Pe,b4 as lt,dr as Ne,ds as Wt,t as X,d7 as Ps,cH as Fs,aL as Us,d0 as $s,bW as qt,aE as zs,dt as Bs,cp as yt}from"./index-ZuWSQ3L6.js";import{C as ot,a as ct,b as Jt,d as vt,e as ut,f as Vs,F as Ys}from"./filters-DXXaCya7.js";import{P as Gs,T as Hs}from"./tags-CsgMtkFL.js";import{D as Ks,u as Ws}from"./dropzone-GgOCfK2j.js";import{U as Qt,D as qs,b as Js,N as Qs,T as Xs,M as Zs,P as er,a as tr,S as sr,A as rr,C as ar,c as nr,d as ir,e as lr}from"./upload-BTxT4v2z.js";import{S as or,a as cr,b as ur,c as dr,f as wt}from"./select-Bd1zcqox.js";import{a as Xt,b as Zt,c as Ce,d as be,e as es,f as de}from"./table-B4zlzEDP.js";import{u as ts}from"./newsletters-_UvhdBE3.js";import{U as fr,M as pr}from"./user-plus-DMl69yKl.js";import{a as mr,E as hr,F as br,c as gr}from"./loader-circle-CF5G2g_Z.js";import{g as ss}from"./get-site-timezone-BDBAcjmq.js";import{u as xr}from"./tiers-CQE0v797.js";import{u as yr}from"./posts-CJHEP4C-.js";import{H as Ke,u as vr}from"./use-infinite-virtual-scroll-CNqGwgHd.js";import{M as wr,u as _r}from"./use-scroll-restoration-BWtb0NrS.js";import{E as _t}from"./empty-indicator-Bf4Dqk72.js";import{r as jr}from"./index-7NTHsKgE.js";import"./index-DIO8ceib.js";function Sr({className:e,...t}){return s.jsx("div",{className:le("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 Er=xs("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 Nr({className:e,align:t="inline-start",...a}){return s.jsx("div",{className:le(Er({align:t}),e),"data-align":t,"data-slot":"input-group-addon",role:"group",onClick:r=>{var n;if(r.target.closest("button"))return;const l=(n=r.currentTarget.closest('[data-slot="input-group"]'))==null?void 0:n.querySelector('[data-slot="input-group-control"]');l?.focus()},...a})}function Cr({className:e,...t}){return s.jsx(Pt,{className:le("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})}const kr=({label:e,onSave:t,onCancel:a,onDelete:r,isDuplicateName:n})=>{const[l,u]=d.useState(e.name),[f,c]=d.useState(!1),[h,g]=d.useState(""),[v,w]=d.useState(!1),[S,k]=d.useState(!1),x=d.useRef(null),p=v||S;d.useEffect(()=>{x.current?.focus(),x.current?.select()},[]);const E=N=>{const C=N.trim();return C?n?.(C,e.id)?"A label with this name already exists":"":"Name is required"},L=async()=>{const N=E(l);if(N){g(N);return}w(!0);try{await t(e.id,l.trim()),a()}catch{w(!1)}},b=N=>{N.key==="Enter"?(N.preventDefault(),L()):N.key==="Escape"&&(N.preventDefault(),p||a())},P=async()=>{k(!0);try{await r(e.id)}catch{k(!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:x,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:p,type:"text",value:l,onChange:N=>{u(N.target.value),g("")},onKeyDown:b}),h&&s.jsx("span",{className:"text-xs text-destructive",children:h}),f?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:p,size:"sm",variant:"outline",onClick:()=>c(!1),children:"Cancel"}),s.jsx(U,{className:"h-6 px-2 text-xs",disabled:p,size:"sm",variant:"destructive",onClick:P,children:S?"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:p,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:p,size:"sm",variant:"outline",onClick:a,children:"Cancel"}),s.jsx(U,{className:"h-6 px-2 text-xs",disabled:p,size:"sm",onClick:L,children:v?"Saving...":"Save"})]})]})]})},Rr=({label:e,isSelected:t,showEdit:a,onToggle:r,onEditClick:n})=>s.jsxs(ut,{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:l=>{l.stopPropagation(),l.preventDefault(),n()},children:[t&&s.jsx(ht,{className:"absolute size-3 text-primary transition-opacity duration-150 group-hover:opacity-0"}),s.jsx(Gs,{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(ht,{className:"size-4 shrink-0 text-primary"})]}),rs=({labels:e,selectedSlugs:t,search:a,onToggle:r,onEdit:n,onDelete:l,isDuplicateName:u,canCreateFromSearch:f,onCreate:c,isCreating:h,onSearchClear:g})=>{const[v,w]=d.useState(null),S=e.filter(b=>b.name.toLowerCase().includes(a.toLowerCase())),k=!!c&&a.trim()&&f?.(a),x=!!n,p=async()=>{if(c){const b=await c(a.trim());b&&r(b.slug),g?.()}},E=async(b,P)=>{n&&await n(b,P)},L=async b=>{l&&(await l(b),w(null))};return s.jsxs(s.Fragment,{children:[!k&&S.length===0&&s.jsx(Jt,{children:"No labels found"}),S.length>0&&s.jsx(vt,{className:"[&_[cmdk-group-heading]]:hidden",children:S.map(b=>v===b.id?s.jsx(kr,{isDuplicateName:u,label:b,onCancel:()=>w(null),onDelete:L,onSave:E},b.id):s.jsx(Rr,{isSelected:t.includes(b.slug),label:b,showEdit:x,onEditClick:()=>w(b.id),onToggle:r},b.id))}),k&&s.jsx(vt,{className:"[&_[cmdk-group-heading]]:hidden",children:s.jsxs(ut,{disabled:h,onSelect:p,children:[s.jsx(ys,{className:"size-4"}),h?"Creating...":`Create "${a.trim()}"`]})})]})},as=({labels:e,onToggle:t})=>s.jsx(s.Fragment,{children:e.map(a=>s.jsxs(Bt,{className:"cursor-pointer gap-1 pr-1",variant:"outline",onClick:r=>{r.stopPropagation(),t(a.slug)},children:[a.name,s.jsx(at,{className:"size-3"})]},a.id))}),qe=({labels:e,selectedSlugs:t,isLoading:a,onToggle:r,canCreateFromSearch:n,onCreate:l,isCreating:u,onEdit:f,onDelete:c,isDuplicateName:h,inline:g=!1,align:v="start"})=>{const w=t.map(S=>e.find(k=>k.slug===S)).filter(S=>!!S);return g?s.jsx(Lr,{align:v,canCreateFromSearch:n,isCreating:u,isDuplicateName:h,isLoading:a,labels:e,selectedLabels:w,selectedSlugs:t,onCreate:l,onDelete:c,onEdit:f,onToggle:r}):s.jsx(Or,{canCreateFromSearch:n,isCreating:u,isDuplicateName:h,isLoading:a,labels:e,selectedLabels:w,selectedSlugs:t,onCreate:l,onDelete:c,onEdit:f,onToggle:r})},Lr=({labels:e,selectedLabels:t,selectedSlugs:a,onToggle:r,isLoading:n,align:l="start",canCreateFromSearch:u,onCreate:f,isCreating:c,onEdit:h,onDelete:g,isDuplicateName:v})=>{const w=d.useRef(null),[S,k]=d.useState(0),x=d.useCallback(()=>{const E=w.current,L=E?.parentElement;if(E&&L){const b=E.getBoundingClientRect(),P=L.getBoundingClientRect();k(Math.round(P.left-b.left))}},[]),p=t.length===0?"Select...":t.length===1?t[0].name:`${t.length} labels`;return s.jsxs(Ft,{onOpenChange:E=>{E&&x()},children:[s.jsx(Ut,{asChild:!0,children:s.jsx("button",{ref:w,className:"flex size-full items-center truncate text-left text-sm",type:"button",children:p})}),s.jsx($t,{align:l,alignOffset:S,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(Dr,{canCreateFromSearch:u,isCreating:c,isDuplicateName:v,labels:e,selectedLabels:t,selectedSlugs:a,onCreate:f,onDelete:g,onEdit:h,onToggle:r})})]})},Dr=({selectedLabels:e,...t})=>{const[a,r]=d.useState("");return s.jsxs(ot,{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(as,{labels:e,onToggle:t.onToggle})}),s.jsxs("div",{className:"flex items-center border-b px-3",children:[s.jsx(zt,{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:a,onChange:n=>r(n.target.value)})]}),s.jsx(ct,{className:"max-h-64 overflow-y-auto",children:s.jsx(rs,{...t,search:a,onSearchClear:()=>r("")})})]})},Or=({labels:e,selectedLabels:t,selectedSlugs:a,onToggle:r,isLoading:n,canCreateFromSearch:l,onCreate:u,isCreating:f,onEdit:c,onDelete:h,isDuplicateName:g})=>{const[v,w]=d.useState(!1),[S,k]=d.useState(""),x=d.useRef(null),p=d.useRef(null);d.useEffect(()=>{if(!v)return;const L=b=>{p.current&&!p.current.contains(b.target)&&w(!1)};return document.addEventListener("pointerdown",L),()=>document.removeEventListener("pointerdown",L)},[v]);const E=L=>{L.key==="Backspace"&&!S&&a.length>0&&r(a[a.length-1]),L.key==="Escape"&&(w(!1),x.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:()=>{x.current?.focus(),w(!0)},children:[s.jsx(as,{labels:t,onToggle:r}),s.jsx("input",{ref:x,className:"min-w-[80px] flex-1 bg-transparent text-sm outline-hidden placeholder:text-muted-foreground",placeholder:t.length===0?"Search labels...":"",value:S,onChange:L=>{k(L.target.value),v||w(!0)},onFocus:()=>w(!0),onKeyDown:E})]}),v&&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(ot,{shouldFilter:!1,children:s.jsx(ct,{className:"max-h-64 overflow-y-auto",children:s.jsx(rs,{canCreateFromSearch:l,isCreating:f,isDuplicateName:g,labels:e,search:S,selectedSlugs:a,onCreate:u,onDelete:h,onEdit:c,onSearchClear:()=>k(""),onToggle:r})})})})]})},Je="LabelsResponseType",ns=Vt({dataType:Je,path:"/labels/"}),Mr=nt({method:"POST",path:()=>"/labels/",body:e=>({labels:[e]}),updateQueries:{dataType:Je,emberUpdateType:"createOrUpdate",update:(e,t)=>{const a=t;return a&&{...a,labels:a.labels.concat(e.labels)}}}}),Ar=nt({method:"PUT",path:e=>`/labels/${e.id}/`,body:e=>({labels:[e]}),updateQueries:{dataType:Je,emberUpdateType:"createOrUpdate",update:(e,t)=>{const a=t;return a&&{...a,labels:a.labels.map(r=>e.labels.find(({id:n})=>n===r.id)||r)}}}}),Tr=nt({method:"DELETE",path:e=>`/labels/${e}/`,updateQueries:{dataType:Je,emberUpdateType:"delete",update:(e,t,a)=>{const r=t;return r&&{...r,labels:r.labels.filter(n=>n.id!==a)}}}});function Qe({selectedSlugs:e,onSelectionChange:t}){const{data:a,isLoading:r}=ns({searchParams:{limit:"100"}}),n=d.useMemo(()=>a?.labels||[],[a]),{mutateAsync:l,isLoading:u}=Mr(),{mutateAsync:f}=Ar(),{mutateAsync:c}=Tr(),h=d.useRef(e);h.current=e;const g=d.useCallback(p=>{const E=h.current;E.includes(p)?t(E.filter(L=>L!==p)):t([...E,p])},[t]),v=d.useCallback((p,E)=>{const L=p.trim().toLowerCase();return n.some(b=>b.name.toLowerCase()===L&&b.id!==E)},[n]),w=d.useCallback(p=>{const E=p.trim();return E?!v(E):!1},[v]),S=d.useCallback(async p=>{const E=p.trim();return!E||v(E)?void 0:(await l({name:E}))?.labels?.[0]},[l,v]),k=d.useCallback(async(p,E)=>{const L=E.trim();if(!L||v(L,p))return;const b=n.find(C=>C.id===p),N=(await f({id:p,name:L}))?.labels?.[0];if(b&&N&&b.slug!==N.slug){const C=h.current;C.includes(b.slug)&&t(C.map(D=>D===b.slug?N.slug:D))}},[f,v,n,t]),x=d.useCallback(async p=>{const E=n.find(L=>L.id===p);if(await c(p),E){const L=h.current;L.includes(E.slug)&&t(L.filter(b=>b!==E.slug))}},[c,n,t]);return{labels:n,selectedSlugs:e,isLoading:r,toggleLabel:g,createLabel:S,editLabel:k,deleteLabel:x,isDuplicateName:v,canCreateFromSearch:w,isCreating:u}}const Ir=({values:e,onChange:t})=>{const a=Qe({selectedSlugs:e,onSelectionChange:t});return s.jsx(qe,{isDuplicateName:a.isDuplicateName,labels:a.labels,selectedSlugs:a.selectedSlugs,inline:!0,onDelete:a.deleteLabel,onEdit:a.editLabel,onToggle:a.toggleLabel})};function Pr({open:e,memberCount:t,onOpenChange:a,onConfirm:r,isLoading:n=!1}){const[l,u]=d.useState([]),f=Qe({selectedSlugs:l,onSelectionChange:u}),c=d.useCallback(g=>{g||u([]),a(g)},[a]),h=()=>{const g=f.labels.filter(v=>l.includes(v.slug)).map(v=>v.id);g.length>0&&r(g)};return s.jsx(Me,{open:e,onOpenChange:c,children:s.jsxs(Ae,{className:"gap-5",onOpenAutoFocus:g=>g.preventDefault(),children:[s.jsx(Te,{children:s.jsxs(Ie,{children:["Add label to ",t.toLocaleString()," ",t===1?"member":"members"]})}),s.jsx(qe,{canCreateFromSearch:f.canCreateFromSearch,isCreating:f.isCreating,isDuplicateName:f.isDuplicateName,isLoading:f.isLoading,labels:f.labels,selectedSlugs:f.selectedSlugs,onCreate:f.createLabel,onDelete:f.deleteLabel,onEdit:f.editLabel,onToggle:f.toggleLabel}),s.jsxs(ge,{children:[s.jsx(U,{variant:"outline",onClick:()=>c(!1),children:"Cancel"}),s.jsx(U,{disabled:l.length===0||n,onClick:h,children:n?"Adding...":l.length>1?`Add ${l.length} labels`:"Add label"})]})]})})}function Fr({open:e,memberCount:t,nql:a,search:r,onOpenChange:n,onConfirm:l,isLoading:u=!1}){const[f,c]=d.useState([]),{data:h,isLoading:g}=vs({searchParams:{...a?{filter:a}:{},...r?{search:r}:{},include:"labels",limit:"all",fields:"id"},enabled:e}),v=d.useMemo(()=>{const p=new Set;for(const E of h?.members||[])for(const L of E.labels||[])p.add(L.slug);return p},[h]),w=Qe({selectedSlugs:f,onSelectionChange:c}),S=d.useMemo(()=>w.labels.filter(p=>v.has(p.slug)),[w.labels,v]),k=d.useCallback(p=>{p||c([]),n(p)},[n]),x=()=>{const p=w.labels.filter(E=>f.includes(E.slug)).map(E=>E.id);p.length>0&&l(p)};return s.jsx(Me,{open:e,onOpenChange:k,children:s.jsxs(Ae,{className:"gap-5",onOpenAutoFocus:p=>p.preventDefault(),children:[s.jsx(Te,{children:s.jsxs(Ie,{children:["Remove label from ",t.toLocaleString()," ",t===1?"member":"members"]})}),s.jsx(qe,{isDuplicateName:w.isDuplicateName,isLoading:w.isLoading||g,labels:S,selectedSlugs:w.selectedSlugs,onDelete:w.deleteLabel,onEdit:w.editLabel,onToggle:w.toggleLabel}),s.jsxs(ge,{children:[s.jsx(U,{variant:"outline",onClick:()=>k(!1),children:"Cancel"}),s.jsx(U,{disabled:f.length===0||u,onClick:x,children:u?"Removing...":f.length>1?`Remove ${f.length} labels`:"Remove label"})]})]})})}function Ur({open:e,newsletters:t,memberCount:a,onOpenChange:r,onConfirm:n,isLoading:l=!1}){const[u,f]=d.useState("all"),[c,h]=d.useState([]),[g,v]=d.useState(""),[w,S]=d.useState(!1),k=d.useRef(null),x=d.useRef(null);d.useEffect(()=>{e||(f("all"),h([]),v(""),S(!1))},[e]),d.useEffect(()=>{if(!w)return;const C=D=>{k.current&&!k.current.contains(D.target)&&S(!1)};return document.addEventListener("pointerdown",C),()=>document.removeEventListener("pointerdown",C)},[w]);const p=C=>{C||(f("all"),h([]),v(""),S(!1)),r(C)},E=d.useCallback(C=>{h(D=>D.includes(C)?D.filter(o=>o!==C):[...D,C])},[]),L=t.length>=2,b=()=>{n(!L||u==="all"?null:c)},P=l||L&&u==="selected"&&c.length===0,N=a===1?"member":"members";return s.jsx(Me,{open:e,onOpenChange:p,children:s.jsxs(Ae,{className:"gap-5",children:[s.jsx(Te,{children:s.jsx(Ie,{children:"Unsubscribe members"})}),L?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:()=>f("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()," ",N," 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:()=>f("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()," ",N," from."]})]})]})]}),u==="selected"&&s.jsxs("div",{ref:k,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:()=>{x.current?.focus(),S(!0)},children:[c.map(C=>{const D=t.find(o=>o.id===C);return D?s.jsxs(Bt,{className:"cursor-pointer gap-1 pr-1",variant:"outline",onClick:o=>{o.stopPropagation(),E(C)},children:[D.name,s.jsx(at,{className:"size-3"})]},C):null}),s.jsx("input",{ref:x,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:g,onChange:C=>{v(C.target.value),w||S(!0)},onFocus:()=>S(!0),onKeyDown:C=>{C.key==="Escape"&&(S(!1),x.current?.blur()),C.key==="Backspace"&&!g&&c.length>0&&E(c[c.length-1])}})]}),w&&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(ot,{shouldFilter:!1,children:s.jsxs(ct,{className:"max-h-64 overflow-y-auto",children:[s.jsx(Jt,{children:"No newsletters found."}),t.filter(C=>C.name.toLowerCase().includes(g.toLowerCase())).map(C=>s.jsxs(ut,{value:C.name,onSelect:()=>E(C.id),children:[C.name,c.includes(C.id)&&s.jsx(Vs,{})]},C.id))]})})})]})]}):s.jsxs("p",{className:"text-sm text-muted-foreground",children:["Are you sure you want to unsubscribe"," ",a.toLocaleString()," ",N," from all newsletters? They will no longer receive any email newsletters from you."]}),s.jsxs(ge,{children:[s.jsx(U,{variant:"outline",onClick:()=>p(!1),children:"Cancel"}),s.jsx(U,{disabled:P,variant:"destructive",onClick:b,children:l?"Unsubscribing...":"Unsubscribe"})]})]})})}function $r({open:e,memberCount:t,onOpenChange:a,onConfirm:r,onExportBackup:n,isLoading:l=!1}){const[u,f]=d.useState(!1),c=g=>{g||f(!1),a(g)},h=async()=>{if(!(t<1||l||u))try{f(!0),await n(),r()}catch{}finally{f(!1)}};return s.jsx(Me,{open:e,onOpenChange:c,children:s.jsxs(Ae,{className:"gap-5",children:[s.jsx(Te,{children:s.jsx(Ie,{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:l||u||t<1,variant:"destructive",onClick:h,children:l||u?"Deleting...":"Download backup & delete members"})]})]})})}function zr({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(ws,{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(Yt,{className:"mt-0.5 size-4 shrink-0"}),s.jsx("p",{children:e})]}),s.jsx(Ks,{accept:{"text/csv":[".csv"],"application/vnd.ms-excel":[".csv"]},"aria-label":"Select or drop a CSV file",onDropAccepted:n=>{const l=n[0];l&&a(l)},onDropRejected:r,children:({isDragActive:n,isDragReject:l})=>s.jsxs(s.Fragment,{children:[s.jsx(Qt,{className:"mb-2 size-6 text-grey-600"}),s.jsx("span",{className:"text-sm text-grey-700",children:l?"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 Br=[{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"}],Vr=["email","name","note","subscribed_to_emails","complimentary_plan","stripe_customer_id","labels","created_at"],Yr=["email"],Gr=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;class dt{_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 dt({});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 Hr(e,t=30){if(!e||e.length<=t)return e;const a=[];return Object.keys(e[0]).forEach(n=>{const l=e.filter(f=>f[n]&&f[n].trim()!=="");let u=[];if(l.length<=t)u=l;else{const f=Math.floor(t/3),c=f,h=t-f-c,g=l.slice(0,f),v=c>0?l.slice(-c):[],w=Math.max(0,Math.floor(l.length/2)-Math.floor(h/2)),S=l.slice(w,w+h);u=[...g,...S,...v].slice(0,t)}u.forEach((f,c)=>{a[c]||(a[c]={}),a[c][n]=f[n]})}),a}function Kr(e){const t=Hr(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]&&Vr.includes(n)&&!Yr.includes(n)&&(a[n]=n)}let r=0;for(;r<=t.length-1&&!a.email;){const n=t[r];for(const[l,u]of Object.entries(n))!a.email&&u&&Gr.test(u)&&(a.email=l);r+=1}return a}function Wr(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 qr({status:e,fileData:t,mapping:a,mappingError:r,showMappingErrors:n,membersCount:l,dataPreviewIndex:u,hasPrevRecord:f,hasNextRecord:c,labelPicker:h,onUpdateMapping:g,onDataPreviewIndexChange:v,onStartOver:w,onUpload:S}){const k=t&&t.length>0&&a?Object.entries(t[u]||{}).map(([x,p])=>({key:x,value:p,mapTo:a.get(x)})):[];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(He,{size:"md"})}):s.jsxs(s.Fragment,{children:[s.jsx("div",{className:le("overflow-hidden rounded-md border",n&&r&&"border-red-500"),children:s.jsx("div",{className:"max-h-[400px] overflow-auto",children:s.jsxs(Xt,{className:"table-fixed",children:[s.jsx(Zt,{children:s.jsxs(Ce,{children:[s.jsx(be,{className:"w-1/3",children:"Field"}),s.jsx(be,{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:le("rounded p-0.5 hover:bg-muted",!f&&"cursor-default opacity-30"),disabled:!f||e==="UPLOADING",type:"button",onClick:()=>v(u-1),children:s.jsx(_s,{className:"size-4"})}),s.jsx("button",{"aria-label":"Show next sample row",className:le("rounded p-0.5 hover:bg-muted",!c&&"cursor-default opacity-30"),disabled:!c||e==="UPLOADING",type:"button",onClick:()=>v(u+1),children:s.jsx(js,{className:"size-4"})})]})]})}),s.jsx(be,{className:"w-1/3",children:"Import as"})]})}),s.jsx(es,{children:k.length>0?k.map(x=>s.jsxs(Ce,{className:le(!x.mapTo&&"bg-muted"),children:[s.jsx(de,{className:"text-sm font-medium break-all",children:x.key}),s.jsx(de,{className:le("break-all text-sm",!x.value&&"text-muted-foreground"),children:x.value||" "}),s.jsx(de,{children:s.jsxs(or,{disabled:e==="UPLOADING",value:x.mapTo||"__not_imported__",onValueChange:p=>{g(x.key,p==="__not_imported__"?null:p)},children:[s.jsx(cr,{className:le("h-8 text-sm",!x.mapTo&&"text-muted-foreground"),children:s.jsx(ur,{})}),s.jsxs(dr,{children:[s.jsx(wt,{value:"__not_imported__",children:"Not imported"}),Br.map(p=>s.jsx(wt,{value:p.value,children:p.label},p.value))]})]})})]},x.key)):s.jsx(Ce,{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}),l>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(qe,{canCreateFromSearch:h.canCreateFromSearch,isCreating:h.isCreating,isDuplicateName:h.isDuplicateName,isLoading:h.isLoading,labels:h.labels,selectedSlugs:h.selectedSlugs,onCreate:h.createLabel,onDelete:h.deleteLabel,onEdit:h.editLabel,onToggle:h.toggleLabel})]})]})}),s.jsxs(ge,{className:"mt-5",children:[s.jsx(U,{disabled:e==="UPLOADING",variant:"outline",onClick:w,children:"Start over"}),s.jsx(U,{disabled:e==="UPLOADING"||l===0,onClick:S,children:e==="UPLOADING"?s.jsxs("span",{className:"flex items-center gap-2",children:[s.jsx(He,{color:"light",size:"sm"}),"Uploading"]}):l>0?`Import ${l.toLocaleString()} ${l===1?"member":"members"}`:"Import members"})]})]})}function Jr({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 Qr({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 Xr({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(Yt,{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 Zr=Ye.exports,jt;function ea(){return jt||(jt=1,(function(e,t){(function(a,r){e.exports=r()})(Zr,function a(){var r=typeof self<"u"?self:typeof window<"u"?window:r!==void 0?r:{},n=!r.document&&!!r.postMessage,l=n&&/blob:/i.test((r.location||{}).protocol),u={},f=0,c={parse:function(o,i){var m=(i=i||{}).dynamicTyping||!1;if(D(m)&&(i.dynamicTypingFunction=m,m={}),i.dynamicTyping=m,i.transform=!!D(i.transform)&&i.transform,i.worker&&c.WORKERS_SUPPORTED){var _=(function(){if(!c.WORKERS_SUPPORTED)return!1;var y=(H=r.URL||r.webkitURL||null,M=a.toString(),c.BLOB_URL||(c.BLOB_URL=H.createObjectURL(new Blob(["(",M,")();"],{type:"text/javascript"})))),A=new r.Worker(y),H,M;return A.onmessage=L,A.id=f++,u[A.id]=A})();return _.userStep=i.step,_.userChunk=i.chunk,_.userComplete=i.complete,_.userError=i.error,i.step=D(i.step),i.chunk=D(i.chunk),i.complete=D(i.complete),i.error=D(i.error),delete i.worker,void _.postMessage({input:o,config:i,workerId:_.id})}var j=null;return c.NODE_STREAM_INPUT,typeof o=="string"?j=i.download?new v(i):new S(i):o.readable===!0&&D(o.read)&&D(o.on)?j=new k(i):(r.File&&o instanceof File||o instanceof Object)&&(j=new w(i)),j.stream(o)},unparse:function(o,i){var m=!1,_=!0,j=",",y=`\r
|
|
7
|
-
`,A='"',H=A+A,M=!1,R=null,V=!1;(function(){if(typeof i=="object"){if(typeof i.delimiter!="string"||c.BAD_DELIMITERS.filter(function(O){return i.delimiter.indexOf(O)!==-1}).length||(j=i.delimiter),(typeof i.quotes=="boolean"||typeof i.quotes=="function"||Array.isArray(i.quotes))&&(m=i.quotes),typeof i.skipEmptyLines!="boolean"&&typeof i.skipEmptyLines!="string"||(M=i.skipEmptyLines),typeof i.newline=="string"&&(y=i.newline),typeof i.quoteChar=="string"&&(A=i.quoteChar),typeof i.header=="boolean"&&(_=i.header),Array.isArray(i.columns)){if(i.columns.length===0)throw new Error("Option columns is empty");R=i.columns}i.escapeChar!==void 0&&(H=i.escapeChar+A),(typeof i.escapeFormulae=="boolean"||i.escapeFormulae instanceof RegExp)&&(V=i.escapeFormulae instanceof RegExp?i.escapeFormulae:/^[=+\-@\t\r].*$/)}})();var I=new RegExp(p(A),"g");if(typeof o=="string"&&(o=JSON.parse(o)),Array.isArray(o)){if(!o.length||Array.isArray(o[0]))return ae(null,o,M);if(typeof o[0]=="object")return ae(R||Object.keys(o[0]),o,M)}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||R),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])),ae(o.fields||[],o.data||[],M);throw new Error("Unable to serialize unrecognized input");function ae(O,Y,se){var W="";typeof O=="string"&&(O=JSON.parse(O)),typeof Y=="string"&&(Y=JSON.parse(Y));var te=Array.isArray(O)&&0<O.length,Z=!Array.isArray(Y[0]);if(te&&_){for(var ee=0;ee<O.length;ee++)0<ee&&(W+=j),W+=Q(O[ee],ee);0<Y.length&&(W+=y)}for(var T=0;T<Y.length;T++){var B=te?O.length:Y[T].length,G=!1,J=te?Object.keys(Y[T]).length===0:Y[T].length===0;if(se&&!te&&(G=se==="greedy"?Y[T].join("").trim()==="":Y[T].length===1&&Y[T][0].length===0),se==="greedy"&&te){for(var $=[],z=0;z<B;z++){var q=Z?O[z]:z;$.push(Y[T][q])}G=$.join("").trim()===""}if(!G){for(var F=0;F<B;F++){0<F&&!J&&(W+=j);var xe=te&&Z?O[F]:F;W+=Q(Y[T][xe],F)}T<Y.length-1&&(!se||0<B&&!J)&&(W+=y)}}return W}function Q(O,Y){if(O==null)return"";if(O.constructor===Date)return JSON.stringify(O).slice(1,25);var se=!1;V&&typeof O=="string"&&V.test(O)&&(O="'"+O,se=!0);var W=O.toString().replace(I,H);return(se=se||m===!0||typeof m=="function"&&m(O,Y)||Array.isArray(m)&&m[Y]||(function(te,Z){for(var ee=0;ee<Z.length;ee++)if(-1<te.indexOf(Z[ee]))return!0;return!1})(W,c.BAD_DELIMITERS)||-1<W.indexOf(j)||W.charAt(0)===" "||W.charAt(W.length-1)===" ")?A+W+A:W}}};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=E,c.ParserHandle=x,c.NetworkStreamer=v,c.FileStreamer=w,c.StringStreamer=S,c.ReadableStreamStreamer=k,r.jQuery){var h=r.jQuery;h.fn.parse=function(o){var i=o.config||{},m=[];return this.each(function(y){if(!(h(this).prop("tagName").toUpperCase()==="INPUT"&&h(this).attr("type").toLowerCase()==="file"&&r.FileReader)||!this.files||this.files.length===0)return!0;for(var A=0;A<this.files.length;A++)m.push({file:this.files[A],inputElem:this,instanceConfig:h.extend({},i)})}),_(),this;function _(){if(m.length!==0){var y,A,H,M,R=m[0];if(D(o.before)){var V=o.before(R.file,R.inputElem);if(typeof V=="object"){if(V.action==="abort")return y="AbortError",A=R.file,H=R.inputElem,M=V.reason,void(D(o.error)&&o.error({name:y},A,H,M));if(V.action==="skip")return void j();typeof V.config=="object"&&(R.instanceConfig=h.extend(R.instanceConfig,V.config))}else if(V==="skip")return void j()}var I=R.instanceConfig.complete;R.instanceConfig.complete=function(ae){D(I)&&I(ae,R.file,R.inputElem),j()},c.parse(R.file,R.instanceConfig)}else D(o.complete)&&o.complete()}function j(){m.splice(0,1),_()}}}function g(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(i){var m=N(i);m.chunkSize=parseInt(m.chunkSize),i.step||i.chunk||(m.chunkSize=null),this._handle=new x(m),(this._handle.streamer=this)._config=m}).call(this,o),this.parseChunk=function(i,m){if(this.isFirstChunk&&D(this._config.beforeFirstChunk)){var _=this._config.beforeFirstChunk(i);_!==void 0&&(i=_)}this.isFirstChunk=!1,this._halted=!1;var j=this._partialLine+i;this._partialLine="";var y=this._handle.parse(j,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var A=y.meta.cursor;this._finished||(this._partialLine=j.substring(A-this._baseIndex),this._baseIndex=A),y&&y.data&&(this._rowCount+=y.data.length);var H=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(l)r.postMessage({results:y,workerId:c.WORKER_ID,finished:H});else if(D(this._config.chunk)&&!m){if(this._config.chunk(y,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);y=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(y.data),this._completeResults.errors=this._completeResults.errors.concat(y.errors),this._completeResults.meta=y.meta),this._completed||!H||!D(this._config.complete)||y&&y.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),H||y&&y.meta.paused||this._nextChunk(),y}this._halted=!0},this._sendError=function(i){D(this._config.error)?this._config.error(i):l&&this._config.error&&r.postMessage({workerId:c.WORKER_ID,error:i,finished:!1})}}function v(o){var i;(o=o||{}).chunkSize||(o.chunkSize=c.RemoteChunkSize),g.call(this,o),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(m){this._input=m,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(i=new XMLHttpRequest,this._config.withCredentials&&(i.withCredentials=this._config.withCredentials),n||(i.onload=C(this._chunkLoaded,this),i.onerror=C(this._chunkError,this)),i.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var m=this._config.downloadRequestHeaders;for(var _ in m)i.setRequestHeader(_,m[_])}if(this._config.chunkSize){var j=this._start+this._config.chunkSize-1;i.setRequestHeader("Range","bytes="+this._start+"-"+j)}try{i.send(this._config.downloadRequestBody)}catch(y){this._chunkError(y.message)}n&&i.status===0&&this._chunkError()}},this._chunkLoaded=function(){i.readyState===4&&(i.status<200||400<=i.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:i.responseText.length,this._finished=!this._config.chunkSize||this._start>=(function(m){var _=m.getResponseHeader("Content-Range");return _===null?-1:parseInt(_.substring(_.lastIndexOf("/")+1))})(i),this.parseChunk(i.responseText)))},this._chunkError=function(m){var _=i.statusText||m;this._sendError(new Error(_))}}function w(o){var i,m;(o=o||{}).chunkSize||(o.chunkSize=c.LocalChunkSize),g.call(this,o);var _=typeof FileReader<"u";this.stream=function(j){this._input=j,m=j.slice||j.webkitSlice||j.mozSlice,_?((i=new FileReader).onload=C(this._chunkLoaded,this),i.onerror=C(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var j=this._input;if(this._config.chunkSize){var y=Math.min(this._start+this._config.chunkSize,this._input.size);j=m.call(j,this._start,y)}var A=i.readAsText(j,this._config.encoding);_||this._chunkLoaded({target:{result:A}})},this._chunkLoaded=function(j){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(j.target.result)},this._chunkError=function(){this._sendError(i.error)}}function S(o){var i;g.call(this,o=o||{}),this.stream=function(m){return i=m,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var m,_=this._config.chunkSize;return _?(m=i.substring(0,_),i=i.substring(_)):(m=i,i=""),this._finished=!i,this.parseChunk(m)}}}function k(o){g.call(this,o=o||{});var i=[],m=!0,_=!1;this.pause=function(){g.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){g.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(j){this._input=j,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){_&&i.length===1&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),i.length?this.parseChunk(i.shift()):m=!0},this._streamData=C(function(j){try{i.push(typeof j=="string"?j:j.toString(this._config.encoding)),m&&(m=!1,this._checkIsFinished(),this.parseChunk(i.shift()))}catch(y){this._streamError(y)}},this),this._streamError=C(function(j){this._streamCleanUp(),this._sendError(j)},this),this._streamEnd=C(function(){this._streamCleanUp(),_=!0,this._streamData("")},this),this._streamCleanUp=C(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function x(o){var i,m,_,j=Math.pow(2,53),y=-j,A=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,H=/^(\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))$/,M=this,R=0,V=0,I=!1,ae=!1,Q=[],O={data:[],errors:[],meta:{}};if(D(o.step)){var Y=o.step;o.step=function(T){if(O=T,te())W();else{if(W(),O.data.length===0)return;R+=T.data.length,o.preview&&R>o.preview?m.abort():(O.data=O.data[0],Y(O,M))}}}function se(T){return o.skipEmptyLines==="greedy"?T.join("").trim()==="":T.length===1&&T[0].length===0}function W(){return O&&_&&(ee("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+c.DefaultDelimiter+"'"),_=!1),o.skipEmptyLines&&(O.data=O.data.filter(function(T){return!se(T)})),te()&&(function(){if(!O)return;function T(G,J){D(o.transformHeader)&&(G=o.transformHeader(G,J)),Q.push(G)}if(Array.isArray(O.data[0])){for(var B=0;te()&&B<O.data.length;B++)O.data[B].forEach(T);O.data.splice(0,1)}else O.data.forEach(T)})(),(function(){if(!O||!o.header&&!o.dynamicTyping&&!o.transform)return O;function T(G,J){var $,z=o.header?{}:[];for($=0;$<G.length;$++){var q=$,F=G[$];o.header&&(q=$>=Q.length?"__parsed_extra":Q[$]),o.transform&&(F=o.transform(F,q)),F=Z(q,F),q==="__parsed_extra"?(z[q]=z[q]||[],z[q].push(F)):z[q]=F}return o.header&&($>Q.length?ee("FieldMismatch","TooManyFields","Too many fields: expected "+Q.length+" fields but parsed "+$,V+J):$<Q.length&&ee("FieldMismatch","TooFewFields","Too few fields: expected "+Q.length+" fields but parsed "+$,V+J)),z}var B=1;return!O.data.length||Array.isArray(O.data[0])?(O.data=O.data.map(T),B=O.data.length):O.data=T(O.data,0),o.header&&O.meta&&(O.meta.fields=Q),V+=B,O})()}function te(){return o.header&&Q.length===0}function Z(T,B){return G=T,o.dynamicTypingFunction&&o.dynamicTyping[G]===void 0&&(o.dynamicTyping[G]=o.dynamicTypingFunction(G)),(o.dynamicTyping[G]||o.dynamicTyping)===!0?B==="true"||B==="TRUE"||B!=="false"&&B!=="FALSE"&&((function(J){if(A.test(J)){var $=parseFloat(J);if(y<$&&$<j)return!0}return!1})(B)?parseFloat(B):H.test(B)?new Date(B):B===""?null:B):B;var G}function ee(T,B,G,J){var $={type:T,code:B,message:G};J!==void 0&&($.row=J),O.errors.push($)}this.parse=function(T,B,G){var J=o.quoteChar||'"';if(o.newline||(o.newline=(function(q,F){q=q.substring(0,1048576);var xe=new RegExp(p(F)+"([^]*?)"+p(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 pe=0,ce=0;ce<ue.length;ce++)ue[ce][0]===`
|
|
11
|
-
`&&pe++;return pe>=ue.length/2?`\r
|
|
12
|
-
`:"\r"})(T,J)),_=!1,o.delimiter)D(o.delimiter)&&(o.delimiter=o.delimiter(T),O.meta.delimiter=o.delimiter);else{var $=(function(q,F,xe,ue,oe){var ye,pe,ce,re;oe=oe||[","," ","|",";",c.RECORD_SEP,c.UNIT_SEP];for(var ve=0;ve<oe.length;ve++){var ne=oe[ve],je=0,me=0,mt=0;ce=void 0;for(var ke=new E({comments:ue,delimiter:ne,newline:F,preview:10}).parse(q),Ue=0;Ue<ke.data.length;Ue++)if(xe&&se(ke.data[Ue]))mt++;else{var Re=ke.data[Ue].length;me+=Re,ce!==void 0?0<Re&&(je+=Math.abs(Re-ce),ce=Re):ce=Re}0<ke.data.length&&(me/=ke.data.length-mt),(pe===void 0||je<=pe)&&(re===void 0||re<me)&&1.99<me&&(pe=je,ye=ne,re=me)}return{successful:!!(o.delimiter=ye),bestDelimiter:ye}})(T,o.newline,o.skipEmptyLines,o.comments,o.delimitersToGuess);$.successful?o.delimiter=$.bestDelimiter:(_=!0,o.delimiter=c.DefaultDelimiter),O.meta.delimiter=o.delimiter}var z=N(o);return o.preview&&o.header&&z.preview++,i=T,m=new E(z),O=m.parse(i,B,G),W(),I?{meta:{paused:!0}}:O||{meta:{paused:!1}}},this.paused=function(){return I},this.pause=function(){I=!0,m.abort(),i=D(o.chunk)?"":i.substring(m.getCharIndex())},this.resume=function(){M.streamer._halted?(I=!1,M.streamer.parseChunk(i,!0)):setTimeout(M.resume,3)},this.aborted=function(){return ae},this.abort=function(){ae=!0,m.abort(),O.meta.aborted=!0,D(o.complete)&&o.complete(O),i=""}}function p(o){return o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function E(o){var i,m=(o=o||{}).delimiter,_=o.newline,j=o.comments,y=o.step,A=o.preview,H=o.fastMode,M=i=o.quoteChar===void 0||o.quoteChar===null?'"':o.quoteChar;if(o.escapeChar!==void 0&&(M=o.escapeChar),(typeof m!="string"||-1<c.BAD_DELIMITERS.indexOf(m))&&(m=","),j===m)throw new Error("Comment character same as delimiter");j===!0?j="#":(typeof j!="string"||-1<c.BAD_DELIMITERS.indexOf(j))&&(j=!1),_!==`
|
|
13
|
-
`&&_!=="\r"&&_!==`\r
|
|
14
|
-
`&&(_=`
|
|
15
|
-
`);var R=0,V=!1;this.parse=function(I,ae,Q){if(typeof I!="string")throw new Error("Input must be a string");var O=I.length,Y=m.length,se=_.length,W=j.length,te=D(y),Z=[],ee=[],T=[],B=R=0;if(!I)return re();if(H||H!==!1&&I.indexOf(i)===-1){for(var G=I.split(_),J=0;J<G.length;J++){if(T=G[J],R+=T.length,J!==G.length-1)R+=_.length;else if(Q)return re();if(!j||T.substring(0,W)!==j){if(te){if(Z=[],oe(T.split(m)),ve(),V)return re()}else oe(T.split(m));if(A&&A<=J)return Z=Z.slice(0,A),re(!0)}}return re()}for(var $=I.indexOf(m,R),z=I.indexOf(_,R),q=new RegExp(p(M)+p(i),"g"),F=I.indexOf(i,R);;)if(I[R]!==i)if(j&&T.length===0&&I.substring(R,R+W)===j){if(z===-1)return re();R=z+se,z=I.indexOf(_,R),$=I.indexOf(m,R)}else if($!==-1&&($<z||z===-1))T.push(I.substring(R,$)),R=$+Y,$=I.indexOf(m,R);else{if(z===-1)break;if(T.push(I.substring(R,z)),ce(z+se),te&&(ve(),V))return re();if(A&&Z.length>=A)return re(!0)}else for(F=R,R++;;){if((F=I.indexOf(i,F+1))===-1)return Q||ee.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:Z.length,index:R}),pe();if(F===O-1)return pe(I.substring(R,F).replace(q,i));if(i!==M||I[F+1]!==M){if(i===M||F===0||I[F-1]!==M){$!==-1&&$<F+1&&($=I.indexOf(m,F+1)),z!==-1&&z<F+1&&(z=I.indexOf(_,F+1));var xe=ye(z===-1?$:Math.min($,z));if(I.substr(F+1+xe,Y)===m){T.push(I.substring(R,F).replace(q,i)),I[R=F+1+xe+Y]!==i&&(F=I.indexOf(i,R)),$=I.indexOf(m,R),z=I.indexOf(_,R);break}var ue=ye(z);if(I.substring(F+1+ue,F+1+ue+se)===_){if(T.push(I.substring(R,F).replace(q,i)),ce(F+1+ue+se),$=I.indexOf(m,R),F=I.indexOf(i,R),te&&(ve(),V))return re();if(A&&Z.length>=A)return re(!0);break}ee.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:Z.length,index:R}),F++}}else F++}return pe();function oe(ne){Z.push(ne),B=R}function ye(ne){var je=0;if(ne!==-1){var me=I.substring(F+1,ne);me&&me.trim()===""&&(je=me.length)}return je}function pe(ne){return Q||(ne===void 0&&(ne=I.substring(R)),T.push(ne),R=O,oe(T),te&&ve()),re()}function ce(ne){R=ne,oe(T),T=[],z=I.indexOf(_,R)}function re(ne){return{data:Z,errors:ee,meta:{delimiter:m,linebreak:_,aborted:V,truncated:!!ne,cursor:B+(ae||0)}}}function ve(){y(re()),Z=[],ee=[]}},this.abort=function(){V=!0},this.getCharIndex=function(){return R}}function L(o){var i=o.data,m=u[i.workerId],_=!1;if(i.error)m.userError(i.error,i.file);else if(i.results&&i.results.data){var j={abort:function(){_=!0,b(i.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:P,resume:P};if(D(m.userStep)){for(var y=0;y<i.results.data.length&&(m.userStep({data:i.results.data[y],errors:i.results.errors,meta:i.results.meta},j),!_);y++);delete i.results}else D(m.userChunk)&&(m.userChunk(i.results,j,i.file),delete i.results)}i.finished&&!_&&b(i.workerId,i.results)}function b(o,i){var m=u[o];D(m.userComplete)&&m.userComplete(i),m.terminate(),delete u[o]}function P(){throw new Error("Not implemented.")}function N(o){if(typeof o!="object"||o===null)return o;var i=Array.isArray(o)?[]:{};for(var m in o)i[m]=N(o[m]);return i}function C(o,i){return function(){o.apply(i,arguments)}}function D(o){return typeof o=="function"}return l&&(r.onmessage=function(o){var i=o.data;if(c.WORKER_ID===void 0&&i&&(c.WORKER_ID=i.workerId),typeof i.input=="string")r.postMessage({workerId:c.WORKER_ID,results:c.parse(i.input,i.config),finished:!0});else if(r.File&&i.input instanceof File||i.input instanceof Object){var m=c.parse(i.input,i.config);m&&r.postMessage({workerId:c.WORKER_ID,results:m,finished:!0})}}),(v.prototype=Object.create(g.prototype)).constructor=v,(w.prototype=Object.create(g.prototype)).constructor=w,(S.prototype=Object.create(S.prototype)).constructor=S,(k.prototype=Object.create(g.prototype)).constructor=k,c})})(Ye)),Ye.exports}var ta=ea();const is=Gt(ta);function sa(e){const t=is.parse(e,{header:!0,skipEmptyLines:!0});return!t.data||t.data.length<1?[]:t.data.map(a=>{const r={};for(const[n,l]of Object.entries(a))r[n]=typeof l=="string"?l:l==null?"":String(l);return r})}function ra(e){return e.length===0?"":is.unparse(e,{quotes:!0})}function aa(e){const t=e.meta.stats.imported,a=e.meta.stats.invalid||[],r=a.length,n={},l=a.map(v=>{const w=Wr(v.error);return w.split(",").forEach(S=>{const k=S.trim();n[k]?n[k].count+=1:n[k]={message:k,count:1}}),{...v,error:w}}),u=ra(l),f=new Blob([u],{type:"text/csv"}),c=URL.createObjectURL(f),h=e.meta.import_label,g=h?`${h.name} - Errors.csv`:`Import ${fe().format("YYYY-MM-DD HH:mm")} - Errors.csv`;return{importedCount:t,errorCount:r,errorCsvUrl:c,errorCsvName:g,errorList:Object.values(n)}}const ls=()=>({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 na(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 ls();default:return e}}function ia({open:e,onOpenChange:t,onComplete:a}){const[r,n]=d.useReducer(na,void 0,ls),l=d.useRef(null),u=Qe({selectedSlugs:r.selectedLabelSlugs,onSelectionChange:b=>n({type:"SET_SELECTED_LABEL_SLUGS",selectedLabelSlugs:b})}),f=d.useCallback(()=>{l.current&&(URL.revokeObjectURL(l.current),l.current=null)},[]),c=d.useCallback(()=>{f(),n({type:"RESET"})},[f]);d.useEffect(()=>()=>{f()},[f]);const h=d.useCallback(b=>{!b&&r.status==="UPLOADING"||(b||c(),t(b))},[t,c,r.status]);d.useEffect(()=>{if(!r.file)return;let b=!1;const P=new FileReader;return P.onload=N=>{if(!b)try{const C=N.target?.result,D=sa(C);if(D.length>0){const o=Kr(D),i=new dt(o);n({type:"PARSE_SUCCESS",fileData:D,mapping:i,mappingError:i.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."})}},P.onerror=()=>{b||n({type:"PARSE_FAILURE",mappingError:`Failed to read file${P.error?.message?`: ${P.error.message}`:""}`})},P.onabort=()=>{b||n({type:"PARSE_FAILURE",mappingError:"File read was interrupted. Please try again."})},P.readAsText(r.file),()=>{b=!0,P.readyState===FileReader.LOADING&&P.abort()}},[r.file]);const g=d.useCallback(b=>{const N=/(?:\.([^.]+))?$/.exec(b.name)?.[1];return!N||N.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)},[]),v=d.useCallback(b=>{g(b)&&n({type:"SELECT_FILE",file:b})},[g]),w=d.useCallback((b,P)=>{if(!r.mapping)return;const N=r.mapping.updateMapping(b,P),C=r.fileData&&r.fileData.length===0?"File is empty, nothing to import. Please select a different file.":N.getKeyByValue("email")?null:'Please map "Email" to one of the fields in the CSV.';n({type:"UPDATE_MAPPING",mapping:N,mappingError:C})},[r.fileData,r.mapping]),S=d.useCallback(async()=>{if(!r.file||r.mappingError){n({type:"SET_SHOW_MAPPING_ERRORS",showMappingErrors:!0});return}n({type:"UPLOAD_START"});const b=new FormData;b.append("membersfile",r.file);for(const P of r.selectedLabelSlugs){const N=u.labels.find(C=>C.slug===P);N&&b.append("labels",N.name)}if(r.mapping){const P=r.mapping.toJSON();for(const[N,C]of Object.entries(P))C&&b.append(`mapping[${N}]`,C)}try{const{apiRoot:P}=Ss(),N=await fetch(`${P}/members/upload/`,{method:"POST",body:b,credentials:"include",mode:"cors",headers:{"app-pragma":"no-cache"}});if(N.status===202){n({type:"UPLOAD_ACCEPTED"}),a?.();return}if(N.status===413){n({type:"UPLOAD_ERROR",errorMessage:"The file you uploaded was larger than the maximum file size your server allows."});return}if(!N.ok){const i=(await N.json())?.errors?.[0];if(i?.type==="HostLimitError"&&i?.code==="EMAIL_VERIFICATION_NEEDED"){n({type:"UPLOAD_ERROR",errorMessage:i.message,errorHeader:"Woah there cowboy, that's a big list",showTryAgainButton:!1}),a?.();return}if(i?.type==="DataImportError"||i?.type==="ValidationError"){n({type:"UPLOAD_ERROR",errorMessage:i.message});return}n({type:"UPLOAD_ERROR",errorMessage:"An unexpected error occurred, please try again"});return}const C=await N.json(),D=aa(C);f(),l.current=D.errorCsvUrl,n({type:"UPLOAD_COMPLETE",importResponse:D}),a?.()}catch{n({type:"UPLOAD_ERROR",errorMessage:"An unexpected error occurred, please try again"})}},[r.file,r.mapping,r.mappingError,r.selectedLabelSlugs,u.labels,f,a]),k=r.fileData?!!r.fileData[r.dataPreviewIndex+1]:!1,x=r.dataPreviewIndex>0,p=r.fileData?.length??0,E=r.status==="MAPPING"||r.status==="UPLOADING",L=d.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(Me,{open:e,onOpenChange:h,children:s.jsxs(Ae,{className:le("gap-0",E&&"max-w-2xl"),children:[s.jsxs(Te,{children:[s.jsx(Ie,{children:L}),s.jsx(Es,{className:"sr-only",children:"Import members from a CSV file."})]}),r.status==="INIT"&&s.jsx(zr,{fileError:r.fileError,onClose:()=>h(!1),onDropAccepted:v,onDropRejected:()=>n({type:"SET_FILE_ERROR",fileError:"The file type you uploaded is not supported"})}),(r.status==="MAPPING"||r.status==="UPLOADING")&&s.jsx(qr,{dataPreviewIndex:r.dataPreviewIndex,fileData:r.fileData,hasNextRecord:k,hasPrevRecord:x,labelPicker:u,mapping:r.mapping,mappingError:r.mappingError,membersCount:p,showMappingErrors:r.showMappingErrors,status:r.status,onDataPreviewIndexChange:b=>{n({type:"SET_DATA_PREVIEW_INDEX",dataPreviewIndex:b})},onStartOver:c,onUpdateMapping:w,onUpload:S}),r.status==="PROCESSING"&&s.jsx(Jr,{onClose:()=>h(!1),onUploadAnotherFile:c}),r.status==="COMPLETE"&&r.importResponse&&s.jsx(Qr,{importResponse:r.importResponse,onClose:()=>h(!1),onReset:c}),r.status==="ERROR"&&s.jsx(Xr,{errorMessage:r.errorMessage,showTryAgainButton:r.showTryAgainButton,onClose:()=>h(!1),onTryAgain:c})]})})}function De(e){return`'${e.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function la(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&!(e instanceof RegExp)}function oa(e){const t=Object.keys(e);if(t.length!==1)return;const[a]=t;if(!a.startsWith("$"))return a}function Xe(e){const t=oa(e);if(!t)return;const a=e[t];if(la(a)){const r=Object.entries(a);if(r.length!==1)return;const[n,l]=r[0];return{field:t,operator:n,value:l}}return{field:t,operator:"$eq",value:a}}const ca={$eq:"is",$ne:"is-not"},ua={$eq:"is",$gt:"is-greater",$gte:"is-or-greater",$lt:"is-less",$lte:"is-or-less"},da={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":"<="},pa={"is-any":"","is-not-any":"-"},ma=/^[A-Za-z0-9_.-]+$/;function _e(e,t){return e?.field??t}function ha(e){return e.map(t=>String(t)).sort((t,a)=>t.localeCompare(a))}function We(e,t){return typeof e=="string"?t?.quoteStrings||e.startsWith("-")||!ma.test(e)?De(e):e:String(e)}function St(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 Et(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=Xe(t),n=_e(e,a.key);if(!r||r.field!==n)return null;const l=ca[r.operator];return l?{field:a.key,operator:l,values:[r.value]}:null},serialize(t,a){const r=t.values[0],n=_e(e,a.key);return r==null||r===""?null:t.operator==="is"?[`${n}:${We(r,e)}`]:t.operator==="is-not"?[`${n}:-${We(r,e)}`]:null}}}function Nt(e){return{parse(t,a){const r=Xe(t),n=_e(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:St(r.value),values:[Et(r.value)]}:r.operator==="$not"&&r.value instanceof RegExp?{field:a.key,operator:St(r.value,!0),values:[Et(r.value)]}:null},serialize(t,a){const r=t.values[0],n=_e(e,a.key);if(typeof r!="string"||r==="")return null;if(t.operator==="is")return[`${n}:${De(r)}`];const l=da[t.operator];return l?[`${n}:${l}${De(r)}`]:null}}}function Ze(e){return{parse(t,a){const r=Xe(t),n=_e(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=_e(e,a.key);if(!t.values.length)return null;const n=pa[t.operator];if(n===void 0)return null;const l=ha(t.values);return e?.serializeSingletonAsScalar&&l.length===1?[`${r}:${n}${We(l[0],e)}`]:[`${r}:${n}[${l.map(u=>We(u,e)).join(",")}]`]}}}function et(e){return{parse(t,a){const r=Xe(t),n=_e(e,a.key);if(!r||r.field!==n||typeof r.value!="number")return null;const l=ua[r.operator];return l?{field:a.key,operator:l,values:[r.value]}:null},serialize(t,a){const r=t.values[0],n=_e(e,a.key),l=typeof r=="string"?r.trim()===""?NaN:Number(r):r;if(typeof l!="number"||Number.isNaN(l))return null;const u=fa[t.operator];return u===void 0?null:[`${n}:${u}${l}`]}}}function ba(e,t){const a=fe.tz(e,"YYYY-MM-DD",t).startOf("day").utc().toISOString(),r=fe.tz(e,"YYYY-MM-DD",t).endOf("day").utc().toISOString();return{start:a,end:r}}const Ct=["is","contains","does-not-contain","starts-with","ends-with"],$e=["is-less","is-or-less","is-greater","is-or-greater"],tt=["is","is-greater","is-less"],he=["is","is-not"],st=["is-any","is-not-any"],ga=[{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 xa(e,t){if(typeof e!="string"||!e)return null;const a=fe.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=fe.tz(e,fe.ISO_8601,!0,t);return r.isValid()?r.format("YYYY-MM-DD"):null}const ze={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]??[],l=xa(n,t.timezone);if(!l)return null;switch(r){case"$lt":return{field:t.key,operator:"is-less",values:[l]};case"$lte":return{field:t.key,operator:"is-or-less",values:[l]};case"$gt":return{field:t.key,operator:"is-greater",values:[l]};case"$gte":return{field:t.key,operator:"is-or-greater",values:[l]};default:return null}},serialize(e,t){const a=e.values[0];if(typeof a!="string"||!a)return null;const{start:r,end:n}=ba(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}}},ya={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}},va={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}},wa={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:${De(t)}+feedback.score:${e.operator})`]}},Oe={name:{operators:Ct,ui:{label:"Name",type:"text",placeholder:"Enter name...",defaultOperator:"contains",className:"w-48"},codec:Nt()},email:{operators:Ct,ui:{label:"Email",type:"text",placeholder:"Enter email...",defaultOperator:"contains",className:"w-64"},codec:Nt()},label:{operators:st,ui:{label:"Label",type:"multiselect",searchable:!0,className:"w-64",defaultOperator:"is-any"},metadata:{activeColumn:{key:"labels",label:"Labels",include:"labels"}},codec:Ze()},subscribed:{operators:he,ui:{label:"Newsletter subscription",type:"select",searchable:!1},options:[{value:"subscribed",label:"Subscribed"},{value:"unsubscribed",label:"Unsubscribed"},{value:"email-disabled",label:"Email disabled"}],codec:ya},last_seen_at:{operators:$e,ui:{label:"Last seen",type:"date",defaultOperator:"is-or-less",className:"w-40"},codec:ze},created_at:{operators:$e,ui:{label:"Created",type:"date",defaultOperator:"is-or-less",className:"w-40"},codec:ze},signup:{operators:he,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:va},tier_id:{operators:st,ui:{label:"Membership tier",type:"multiselect",searchable:!0,className:"w-64",defaultOperator:"is-any"},metadata:{activeColumn:{key:"tiers",label:"Tiers",include:"tiers"}},codec:Ze()},status:{operators:he,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:he,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:he,ui:{label:"Stripe subscription status",type:"select",searchable:!1},options:ga,metadata:{activeColumn:{key:"subscriptions.status",label:"Subscription status",include:"subscriptions"}},codec:we()},"subscriptions.start_date":{operators:$e,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:ze},"subscriptions.current_period_end":{operators:$e,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:ze},conversion:{operators:he,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:tt,ui:{label:"Emails sent (all time)",type:"number",defaultOperator:"is",defaultValue:0,min:0,className:"w-24"},codec:et()},email_opened_count:{operators:tt,ui:{label:"Emails opened (all time)",type:"number",defaultOperator:"is",defaultValue:0,min:0,className:"w-24"},codec:et()},email_open_rate:{operators:tt,ui:{label:"Open rate (all time)",type:"number",defaultOperator:"is",defaultValue:0,min:0,max:100,suffix:"%",className:"w-24"},codec:et()},"emails.post_id":{operators:he,ui:{label:"Sent email",type:"select",searchable:!0,placeholder:"Select an email...",className:"w-64"},codec:we({quoteStrings:!0})},"opened_emails.post_id":{operators:he,ui:{label:"Opened email",type:"select",searchable:!0,placeholder:"Select an email...",className:"w-64"},codec:we({quoteStrings:!0})},"clicked_links.post_id":{operators:he,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:wa},offer_redemptions:{operators:st,ui:{label:"Offer",type:"multiselect",searchable:!0,className:"w-64",defaultOperator:"is-any"},metadata:{activeColumn:{key:"offer_redemptions",label:"Offer"}},codec:Ze({quoteStrings:!0,serializeSingletonAsScalar:!0})}};function _a(e,t){const a=e.split("."),r=t.split(".");if(a.length!==r.length)return null;const n={};for(let l=0;l<a.length;l+=1){const u=a[l],f=r[l];if(u.startsWith(":")){n[u.slice(1)]=f;continue}if(u!==f)return null}return n}function ft(e,t,a){const r=e[t];if(r)return{definition:r,context:{key:t,pattern:t,params:{},timezone:a}};for(const[n,l]of Object.entries(e))if(l.parseKeys?.includes(t))return{definition:l,context:{key:n,pattern:n,params:{},timezone:a}};for(const[n,l]of Object.entries(e)){if(!n.includes(":"))continue;const u=_a(n,t);if(u)return{definition:l,context:{key:t,pattern:n,params:u,timezone:a}}}}const ja=2,kt=new Set(["active","trialing","unpaid","past_due"]);function os(e){const t=new Map;for(const a of e){const r=ft(Oe,a.field,"UTC")?.definition.metadata?.activeColumn;r&&t.set(r.key,r)}return Array.from(t.values()).slice(0,ja)}function Sa(e){const t=new Set(["labels","tiers"]);for(const a of os(e))a.include&&t.add(a.include);return Array.from(t).join(",")}function Ea({filters:e,nql:t,search:a}){if(!t&&!a)return;const r={include:Sa(e),limit:"50",order:"created_at desc"};return t&&(r.filter=t),a&&(r.search=a),r}function Na({nql:e,search:t}){return!e&&!t?{all:!0}:{...e?{filter:e}:{},...t?{search:t}:{}}}function Be(e){if(!e?.length)return null;const t=e.filter(r=>r.id);return t.length?[...t].sort((r,n)=>{const l=kt.has(r.status),u=kt.has(n.status);if(l&&!u)return-1;if(!l&&u)return 1;const f=new Date(r.current_period_end).getTime(),c=new Date(n.current_period_end).getTime();return Number.isNaN(f)&&Number.isNaN(c)?0:Number.isNaN(f)?1:Number.isNaN(c)?-1:c-f})[0]:null}function Rt(e,t){return e?{text:fe.tz(e,t).format("D MMM YYYY"),subtext:fe(e).fromNow()}:null}function Ca(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=Be(t.subscriptions)?.plan?.interval;return r?{text:r==="month"?"Monthly":"Yearly"}:null}case"subscriptions.status":{const r=Be(t.subscriptions)?.status;return r?{text:r.split("_").map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join(" ")}:null}case"subscriptions.start_date":return Rt(Be(t.subscriptions)?.start_date,a);case"subscriptions.current_period_end":return Rt(Be(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 Lt(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 Ms(`/members/upload/?${a}`,`members.${r}.csv`)}const ka=({hasFilterOrSearch:e,memberCount:t,nql:a,search:r,canBulkDelete:n,onImportComplete:l})=>{const[u,f]=d.useState(!1),[c,h]=d.useState(!1),[g,v]=d.useState(!1),[w,S]=d.useState(!1),[k,x]=d.useState(!1),{data:p,isLoading:E}=ts({searchParams:{filter:"status:-archived",limit:"50"}}),L=p?.newsletters||[],{mutateAsync:b,isLoading:P}=Ns(),{mutate:N,isLoading:C}=Cs(),[D,o]=d.useState(!1),i=Na({nql:a,search:r}),m=d.useCallback(async()=>{try{await Lt(a,r)}catch(M){throw ie.error("Export failed",{description:"There was a problem downloading your member data. Please check your connection and try again."}),M}},[a,r]),_=d.useCallback(async M=>{try{for(const R of M)await b({...i,action:{type:"addLabel",meta:{label:{id:R}}}});h(!1),ie.success(M.length>1?"Labels added successfully":"Label added successfully")}catch{ie.error("Failed to add label",{description:"There was a problem applying this label. Please try again."})}},[b,i]),j=d.useCallback(async M=>{try{for(const R of M)await b({...i,action:{type:"removeLabel",meta:{label:{id:R}}}});v(!1),ie.success(M.length>1?"Labels removed successfully":"Label removed successfully")}catch{ie.error("Failed to remove label",{description:"There was a problem removing this label. Please try again."})}},[b,i]),y=d.useCallback(async M=>{const R=i;if(M===null){try{await b({...R,action:{type:"unsubscribe"}}),S(!1),ie.success("Members unsubscribed successfully")}catch{ie.error("Failed to unsubscribe members",{description:"There was a problem unsubscribing these members. Please try again."})}return}o(!0);try{const V=await Promise.allSettled(M.map(Q=>b({...R,action:{type:"unsubscribe",newsletter:Q}}))),I=V.filter(Q=>Q.status==="fulfilled").length,ae=V.length;S(!1),I===ae?ie.success(`Unsubscribed from ${ae} ${ae===1?"newsletter":"newsletters"}`):I>0?ie.warning(`Unsubscribed from ${I} of ${ae} newsletters`,{description:"Some newsletters could not be unsubscribed. Please try again."}):ie.error("Failed to unsubscribe members",{description:"There was a problem unsubscribing these members. Please try again."})}catch{ie.error("Failed to unsubscribe members",{description:"There was a problem unsubscribing these members. Please try again."})}finally{o(!1)}},[b,i]),A=d.useCallback(()=>{N(i,{onSuccess:()=>{x(!1),ie.success("Members deleted successfully")},onError:()=>{ie.error("Failed to delete members",{description:"There was a problem deleting these members. Please try again."})}})},[N,i]),H=d.useCallback(async()=>{try{await Lt(a,r)}catch(M){throw ie.error("Export failed",{description:"There was a problem downloading your backup. Please check your connection and try again."}),M}},[a,r]);return s.jsxs(s.Fragment,{children:[s.jsxs(ks,{children:[s.jsx(Rs,{asChild:!0,children:s.jsx(U,{"data-testid":"members-actions",variant:"outline",children:s.jsx(Ls,{className:"size-4"})})}),s.jsxs(Ds,{align:"end",children:[s.jsxs(Se,{onClick:()=>f(!0),children:[s.jsx(Qt,{className:"mr-2 size-4"}),"Import members"]}),t>0&&s.jsxs(s.Fragment,{children:[s.jsxs(Se,{onClick:m,children:[s.jsx(qs,{className:"mr-2 size-4"}),e?`Export ${t.toLocaleString()} members`:"Export all members"]}),s.jsx(bt,{}),s.jsxs(Se,{onClick:()=>h(!0),children:[s.jsx(Hs,{className:"mr-2 size-4"}),"Add label to ",t.toLocaleString()," ",t===1?"member":"members"]}),s.jsxs(Se,{onClick:()=>v(!0),children:[s.jsx(Ht,{className:"mr-2 size-4"}),"Remove label from ",t.toLocaleString()," ",t===1?"member":"members"]}),s.jsxs(Se,{disabled:E,onClick:()=>S(!0),children:[s.jsx(Js,{className:"mr-2 size-4"}),"Unsubscribe ",t.toLocaleString()," ",t===1?"member":"members"]}),s.jsx(bt,{}),s.jsxs(Se,{className:"text-destructive focus:text-destructive",disabled:!n,onClick:()=>x(!0),children:[s.jsx(Os,{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(ia,{open:u,onComplete:l,onOpenChange:f}),s.jsx(Pr,{isLoading:P,memberCount:t,open:c,onConfirm:_,onOpenChange:h}),s.jsx(Fr,{isLoading:P,memberCount:t,nql:a,open:g,search:r,onConfirm:j,onOpenChange:v}),s.jsx(Ur,{isLoading:P||D,memberCount:t,newsletters:L,open:w,onConfirm:y,onOpenChange:S}),s.jsx($r,{isLoading:C,memberCount:t,open:k,onConfirm:A,onExportBackup:H,onOpenChange:x})]})},cs=({children:e,className:t,...a})=>s.jsx("section",{className:le("flex gap-6 flex-col p-4 lg:p-8 size-full grow",t),...a,children:e}),Ra=As.extend({route:Is("members"),filter:Ts(gt(),gt().nullable()).refine(e=>typeof e.filter=="string"&&e.filter.length>0)}),Dt="A view with this name already exists",La="Saved view could not be found for update",Da="Multiple saved views matched update target",Oa="Saved view could not be found for delete",Ma="Multiple saved views matched delete target";function Aa(e){return Ra.safeParse(e).success}function Ta(e){const t=it(e);return t.ok?{ok:!0,views:t.views.filter(Aa)}:t}function Ia(e,t){return{name:e.trim(),route:"members",filter:{filter:t}}}function Pa(e,t,a,r){const n=Ia(t,a);if(r){const l=Kt(e,r);if(l.length===0)throw new Error(La);if(l.length>1)throw new Error(Da);const u=l[0];if(xt(e,n,u))throw new Error(Dt);return e.map((f,c)=>c===u?n:f)}if(xt(e,n))throw new Error(Dt);return[...e,n]}function Fa(e,t){const a=Kt(e,t);if(a.length===0)throw new Error(Oa);if(a.length>1)throw new Error(Ma);const r=a[0];return e.filter((n,l)=>l!==r)}const us="Cannot modify saved views because shared_views is invalid";function pt(e){return Ne(e?.settings??null,"shared_views")??"[]"}function Ua(){const{data:e}=Pe(),t=lt(),a=pt(e),r=d.useRef(null),n=d.useMemo(()=>Ta(a),[a]);return d.useEffect(()=>{n.ok||r.current===a||(r.current=a,t(n.error,{withToast:!1}))},[t,n,a]),n.ok?n.views:[]}function $a(){const{data:e}=Pe(),{mutateAsync:t}=Wt(),a=lt();return d.useCallback(async(r,n,l)=>{const u=it(pt(e));if(!u.ok){const c=new Error(us,{cause:u.error});throw a(c,{withToast:!1}),c}const f=Pa(u.views,r,n,l);try{await t([{key:"shared_views",value:JSON.stringify(f)}])}catch(c){throw a(c,{withToast:!1}),c}},[e,t,a])}function za(){const{data:e}=Pe(),{mutateAsync:t}=Wt(),a=lt();return d.useCallback(async r=>{const n=it(pt(e));if(!n.ok){const u=new Error(us,{cause:n.error});throw a(u,{withToast:!1}),u}const l=Fa(n.views,r);try{await t([{key:"shared_views",value:JSON.stringify(l)}])}catch(u){throw a(u,{withToast:!1}),u}},[e,t,a])}function Ba(e,t){return d.useMemo(()=>!t||e.length===0?null:e.find(a=>a.filter.filter===t)??null,[e,t])}const Va=({filter:e,existingViews:t,activeView:a,onDeleted:r,onClose:n})=>{const[l,u]=d.useState(()=>a?.name??""),[f,c]=d.useState(""),[h,g]=d.useState(!1),[v,w]=d.useState(!1),[S,k]=d.useState(!1),x=$a(),p=za(),E=!!a,L=async()=>{const N=l.trim();if(!N){c("Please enter a name");return}if(!E&&t.find(D=>D.name.trim().toLowerCase()===N.toLowerCase())){c("A view with this name already exists");return}g(!0);try{await x(N,e,a??void 0),n()}catch(C){c(C instanceof Error?C.message:"Failed to save view")}finally{g(!1)}},b=async()=>{if(a){w(!0);try{await p(a),n(),r?.()}catch(N){c(N instanceof Error?N.message:"Failed to delete view")}finally{w(!1)}}},P=N=>{N.key==="Enter"&&(N.preventDefault(),L())};return s.jsx($t,{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:E?"Edit view":"Save view"}),s.jsxs("div",{className:"flex flex-col gap-1.5",children:[s.jsx(Pt,{placeholder:"View name",value:l,autoFocus:!0,onChange:N=>{u(N.target.value),f&&c("")},onKeyDown:P}),f&&s.jsx("p",{className:"text-xs text-red-500",children:f})]}),E?S?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:()=>k(!1),children:"Cancel"}),s.jsx(U,{disabled:v,size:"sm",variant:"destructive",onClick:()=>void b(),children:v?"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:()=>k(!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:h||!l.trim(),size:"sm",onClick:()=>void L(),children:h?"Saving...":"Save"})]})]}):s.jsx(U,{className:"w-full",disabled:h||!l.trim(),onClick:()=>void L(),children:h?"Saving...":"Save"})]})})},Ya=({filter:e,existingViews:t,activeView:a,onDeleted:r})=>{const[n,l]=d.useState(!1),u=a?`edit:${a.name}:${a.filter.filter}`:`save:${e}`;return s.jsxs(Ft,{open:n,onOpenChange:l,children:[s.jsx(Ut,{asChild:!0,children:s.jsx(U,{variant:"outline",children:a?"Edit view":"Save view"})}),n&&s.jsx(Va,{activeView:a,existingViews:t,filter:e,onClose:()=>l(!1),onDeleted:r},u)]})};function Ga(e,t={}){const a=t.labels||{};return e.map(r=>({value:r,label:a[r]??r.replaceAll("-"," ")}))}const Ha={"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"},rt={"is-greater":"is greater than","is-less":"is less than"};function Ka(e){switch(e){case"name":return X.createElement(Us,{className:"size-4"});case"email":case"subscribed":return X.createElement(pr,{className:"size-4"});case"label":return X.createElement(Ht,{className:"size-4"});case"last_seen_at":return X.createElement(hr,{className:"size-4"});case"created_at":return X.createElement(mr,{className:"size-4"});case"signup":return X.createElement(fr,{className:"size-4"});case"tier_id":case"subscriptions.status":return X.createElement(Fs,{className:"size-4"});case"status":return X.createElement(lr,{className:"size-4"});case"subscriptions.plan_interval":return X.createElement(ir,{className:"size-4"});case"subscriptions.start_date":return X.createElement(nr,{className:"size-4"});case"subscriptions.current_period_end":return X.createElement(ar,{className:"size-4"});case"conversion":return X.createElement(rr,{className:"size-4"});case"email_count":case"emails.post_id":return X.createElement(sr,{className:"size-4"});case"email_opened_count":case"opened_emails.post_id":return X.createElement(tr,{className:"size-4"});case"email_open_rate":return X.createElement(er,{className:"size-4"});case"clicked_links.post_id":return X.createElement(Zs,{className:"size-4"});case"newsletter_feedback":return X.createElement(Ps,{className:"size-4"});case"offer_redemptions":return X.createElement(Xs,{className:"size-4"});default:return e.startsWith("newsletters.")?X.createElement(Qs,{className:"size-4"}):void 0}}function K(e,t={},a=Ha){const r=e.startsWith("newsletters.")?Oe["newsletters.:slug"]:Oe[e];return{key:e,...r.ui,icon:Ka(e),operators:Ga(r.operators,{labels:a}),..."options"in r&&r.options?{options:r.options}:{},...t}}function Ve(e,t){return K(e,{defaultValue:t})}function Ee(e,t,a,r){return{options:e,onSearchChange:t,searchValue:a,isLoading:e.length===0&&r}}function Wa(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 ds(e){return Array.isArray(e.metadata?.offerIds)?e.metadata.offerIds.filter(t=>typeof t=="string"):null}function fs(e){const t=[],a=Wa(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 qa(e,t){const a=[],r=new Set;for(const n of t){const l=ds(n);l&&l.length>0&&l.every(u=>e.includes(u))&&(a.push(String(n.value)),l.forEach(u=>{r.add(u)}))}for(const n of e)r.has(n)||a.push(n);return a}function Ja(e,t){const a=[];for(const r of e){const n=t.find(u=>u.value===r),l=n?ds(n):null;l?a.push(...l):a.push(r)}return[...new Set(a)]}function Qa(e){return new Map(e.map(t=>[t.id,t.name]))}function Xa(e,t,a){const r=e.map(n=>t.find(l=>l.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 Za({labelsOptions:e=[],tiersOptions:t=[],newsletters:a=[],hydratedNewsletterSlugs:r=[],hasMultipleTiers:n=!1,paidMembersEnabled:l=!1,emailFiltersEnabled:u=!1,postResourceOptions:f=[],onPostResourceSearchChange:c,postResourceSearchValue:h,postResourceLoading:g=!1,emailResourceOptions:v=[],onEmailResourceSearchChange:w,emailResourceSearchValue:S,emailResourceLoading:k=!1,offers:x=[],membersTrackSources:p=!1,emailTrackOpens:E=!1,emailTrackClicks:L=!1,siteTimezone:b="UTC"}){return d.useMemo(()=>{const P=[],N=a.filter(y=>y.status!=="archived"),C=new Set(N.map(y=>y.slug)),D=[...new Set(r)].map(y=>{const A=a.find(H=>H.slug===y);return{slug:y,name:A?.name??y}}),o=D.filter(y=>!C.has(y.slug)),i=fs(x),m=Qa(x),_=fe.tz(b).format("YYYY-MM-DD"),j=[K("name"),K("email")];if(e.length>0&&j.push(K("label",{type:"select",options:e,customRenderer:y=>X.createElement(Ir,y)})),N.length<=1){j.push(K("subscribed"));for(const y of D)j.push(K(`newsletters.${y.slug}`,{label:y.name}))}if(j.push(Ve("last_seen_at",_),Ve("created_at",_)),p&&j.push(K("signup",Ee(f,c,h,g))),P.push({group:"Basic",fields:j}),N.length>1){const y=[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 A of N)y.push(K(`newsletters.${A.slug}`,{label:A.name}));for(const A of o)y.push(K(`newsletters.${A.slug}`,{label:A.name}));P.push({group:"Newsletters",fields:y})}if(l){const y=[];n&&y.push(K("tier_id",{options:t})),y.push(K("status"),K("subscriptions.plan_interval"),K("subscriptions.status"),Ve("subscriptions.start_date",_),Ve("subscriptions.current_period_end",_)),p&&y.push(K("conversion",Ee(f,c,h,g))),x.length>0&&y.push(K("offer_redemptions",{options:i,customValueRenderer:A=>Xa(A,i,m)})),P.push({group:"Subscription",fields:y})}if(u){const y=[K("email_count",{},rt),K("email_opened_count",{},rt)];E&&y.push(K("email_open_rate",{},rt)),y.push(K("emails.post_id",Ee(v,w,S,k))),E&&y.push(K("opened_emails.post_id",Ee(v,w,S,k))),L&&y.push(K("clicked_links.post_id",Ee(v,w,S,k))),y.push(K("newsletter_feedback",Ee(v,w,S,k))),P.push({group:"Email",fields:y})}return P},[u,k,v,S,L,E,n,e,p,a,x,r,w,c,l,g,f,h,b,t])}function Ot(e,t){return t?`${e}+title:~${De(t)}`:e}const en="PagesResponseType",tn=Vt({dataType:en,path:"/pages/"});function Mt(e){const[t,a]=d.useState(""),r=e==="post",n=Ot(r?"status:published":"(status:published,status:sent)+newsletter_id:-null",t),{data:l,isLoading:u}=yr({searchParams:{filter:n,limit:"25",fields:"id,title",order:"published_at DESC"}}),{data:f,isLoading:c}=tn({searchParams:{filter:Ot("status:published",t),limit:"25",fields:"id,title",order:"published_at DESC"},enabled:r}),h=d.useMemo(()=>{const v=l?.posts||[];if(!r)return v.map(k=>({value:k.id,label:k.title}));const w=f?.pages||[],S=[];for(const k of v)S.push({value:k.id,label:k.title});for(const k of w)S.push({value:k.id,label:k.title,detail:"Page"});return S},[l,f,r]),g=d.useCallback(v=>{a(v)},[]);return{options:h,isLoading:u||r&&c,searchValue:t,onSearchChange:g}}const sn=[];function At(e,t){return e.map(a=>a.field!=="offer_redemptions"?a:{...a,values:t(a.values)})}const Tt=({filters:e,nql:t,onFiltersChange:a,savedViews:r=[],activeView:n})=>{const{data:l}=ns({searchParams:{limit:"100"}}),{data:u}=xr({searchParams:{limit:"100"}}),{data:f}=Ws({}),{data:c}=ts({searchParams:{limit:"100"}}),{data:h}=Pe({}),g=h?.settings||[],v=Ne(g,"paid_members_enabled")===!0,w=Ne(g,"editor_default_email_recipients")!=="disabled",S=Ne(g,"members_track_sources")===!0,k=Ne(g,"email_track_opens")===!0,x=Ne(g,"email_track_clicks")===!0,p=ss(g),E=l?.labels||[],L=u?.tiers||[],b=c?.newsletters||[],P=d.useMemo(()=>f?.offers??sn,[f?.offers]),N=L.filter(M=>M.type==="paid"&&M.active),C=N.length>1,D=d.useMemo(()=>fs(P),[P]),o=d.useMemo(()=>[...new Set(e.map(M=>M.field).filter(M=>M.startsWith("newsletters.")).map(M=>M.slice(12)).filter(Boolean))],[e]),i=d.useMemo(()=>At(e,M=>qa(M,D)),[e,D]),m=d.useCallback(M=>{a(At(M,R=>Ja(R,D)))},[a,D]),_=Mt("post"),j=Mt("email"),y=Za({newsletters:b,hydratedNewsletterSlugs:o,hasMultipleTiers:C,paidMembersEnabled:v,emailFiltersEnabled:w,labelsOptions:E.map(M=>({value:M.slug,label:M.name})),tiersOptions:N.map(M=>({value:M.id,label:M.name})),offers:P,postResourceOptions:_.options,onPostResourceSearchChange:_.onSearchChange,postResourceSearchValue:_.searchValue,postResourceLoading:_.isLoading,emailResourceOptions:j.options,onEmailResourceSearchChange:j.onSearchChange,emailResourceSearchValue:j.searchValue,emailResourceLoading:j.isLoading,membersTrackSources:S,emailTrackOpens:k,emailTrackClicks:x,siteTimezone:p}),A=e.length>0,H=A?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(at,{className:"size-4"}),"Clear"]}),t&&s.jsx(Ya,{activeView:n,existingViews:r,filter:t,onDeleted:()=>a([])})]}):void 0;return s.jsx(Ys,{addButtonIcon:A?s.jsx(br,{}):s.jsx(gr,{}),addButtonText:A?"Add filter":"Filter",allowMultiple:!0,className:`[&>button]:order-last ${A?"sm:!pr-40 [&>button]:border-none":"w-auto"}`,clearButton:H,fields:y,filters:i,keyboardShortcut:"f",popoverAlign:"start",popoverContentClassName:"w-[280px] translate-x-[-32px] [&_[data-slot=command-list]]:max-h-[450px]",showClearButton:A,showSearchInput:!0,onChange:m})},ps=({children:e,totalMembers:t,isLoading:a})=>s.jsxs(Ke,{className:"relative pb-6! md:sticky",variant:"inline-nav",children:[s.jsxs(Ke.Title,{children:["Members"," ",!a&&s.jsx("span",{className:"font-normal text-muted-foreground",children:t.toLocaleString()})]}),e]}),rn=250,an=({search:e,onSearchChange:t})=>{const[a,r]=d.useState(e),[n]=$s(a,rn),l=d.useRef(e);return d.useEffect(()=>{l.current=e,r(e)},[e]),d.useEffect(()=>{n!==l.current&&t(n)},[n,t]),s.jsxs(Sr,{className:"min-w-0 basis-full sm:w-[240px] sm:basis-auto",children:[s.jsx(Nr,{children:s.jsx(zt,{className:"size-4",strokeWidth:1.75})}),s.jsx(Cr,{"aria-label":"Search members",placeholder:"Search members...",value:a,onChange:u=>r(u.target.value)})]})},ms=({children:e})=>s.jsx("div",{className:"size-full",children:s.jsx("div",{className:"relative flex size-full flex-col",children:s.jsx("div",{className:"grid w-full grow",children:s.jsx("div",{className:"flex h-full flex-col","data-testid":"members-page",children:e})})})});function nn(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 ln(e){switch(e){case"paid":return"Paid";case"comped":return"Complimentary";default:return"Free"}}function on({item:e,onClick:t}){return s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx(wr,{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 before:absolute before:top-0 before:left-0 before:z-10 before:h-full before:w-[calc(100vw-300px-64px)]",href:`#/members/${e.id}`,onClick:t?a=>{a.button!==0||a.metaKey||a.ctrlKey||a.shiftKey||a.altKey||(a.preventDefault(),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 cn({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:ln(e)}),a&&s.jsx("div",{className:"truncate text-xs text-muted-foreground",children:a})]})})}function un({emailOpenRate:e}){const t=e!=null;return s.jsx("div",{className:le("text-sm",t?"text-foreground":"text-muted-foreground"),children:t?`${Math.round(e)}%`:"N/A"})}function dn({geolocation:e}){const t=nn(e);return s.jsx("div",{className:le("truncate text-sm",t.isKnown?"text-foreground":"text-muted-foreground"),children:t.text})}function fn({createdAt:e}){return s.jsxs("div",{children:[s.jsx("div",{className:"text-sm",children:fe.utc(e).format("D MMM YYYY")}),s.jsx("div",{className:"text-xs text-muted-foreground",children:fe.utc(e).fromNow()})]})}function pn({column:e,member:t,timezone:a}){const r=Ca(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 mn({item:e,activeColumns:t,showEmailOpenRate:a,timezone:r,onClick:n,...l}){return s.jsxs(Ce,{...l,"data-testid":"members-list-item",children:[s.jsx(de,{className:"px-4 py-3",children:s.jsx(on,{item:e,onClick:n})}),s.jsx(de,{className:"px-4 py-3",children:s.jsx(cn,{status:e.status,tiers:e.tiers})}),a&&s.jsx(de,{className:"hidden px-4 py-3 lg:table-cell",children:s.jsx(un,{emailOpenRate:e.email_open_rate})}),s.jsx(de,{className:"hidden px-4 py-3 lg:table-cell",children:s.jsx(dn,{geolocation:e.geolocation})}),s.jsx(de,{className:"hidden px-4 py-3 lg:table-cell",children:s.jsx(fn,{createdAt:e.created_at})}),t.map(u=>s.jsx(de,{className:"hidden px-4 py-3 lg:table-cell",children:s.jsx(pn,{column:u,member:e,timezone:r})},u.key))]})}const It=({height:e})=>s.jsx("tr",{"aria-hidden":"true",style:{height:e},children:s.jsx("td",{colSpan:999})}),hn=d.forwardRef(function(t,a){return s.jsx(Ce,{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 bn({items:e,totalItems:t,hasNextPage:a,isFetchingNextPage:r,fetchNextPage:n,isLoading:l,showEmailOpenRate:u=!0,activeColumns:f,timezone:c,onRowClick:h}){const g=d.useRef(null);_r({parentRef:g,isLoading:l});const{visibleItems:v,spaceBefore:w,spaceAfter:S}=vr({items:e,totalItems:t,hasNextPage:a,isFetchingNextPage:r,fetchNextPage:n,parentRef:g,estimateSize:()=>72}),k=x=>{h?h(x):window.location.hash=`/members/${x}`};return s.jsx("div",{ref:g,className:"h-[calc(100%+32px)] w-full overflow-auto lg:-mx-8 lg:-mb-8 lg:w-auto lg:max-w-[calc(100vw-300px)]",children:s.jsxs(Xt,{className:"w-full border-collapse lg:ml-8 lg:w-auto lg:max-w-[calc(100vw-300px-64px)] lg:table-fixed","data-testid":"members-list",children:[s.jsxs("colgroup",{className:"hidden lg:table-column-group",children:[s.jsx("col",{className:"w-full min-w-[360px]"}),s.jsx("col",{className:"w-[50%] min-w-[160px]"}),u&&s.jsx("col",{className:"w-[50%] min-w-[110px]"}),s.jsx("col",{className:"w-[50%] min-w-[150px]"}),s.jsx("col",{className:"w-[50%] min-w-[120px]"}),f.map(x=>s.jsx("col",{className:"w-[50%] min-w-[250px]"},x.key))]}),s.jsx(Zt,{className:"sticky top-0 z-10 hidden border-b bg-background lg:table-header-group",children:s.jsxs(Ce,{children:[s.jsx(be,{className:"px-4 py-3",children:"Member"}),s.jsx(be,{className:"px-4 py-3",children:"Status"}),u&&s.jsx(be,{className:"px-4 py-3",children:"Open rate"}),s.jsx(be,{className:"px-4 py-3",children:"Location"}),s.jsx(be,{className:"px-4 py-3",children:"Created"}),f.map(x=>s.jsx(be,{className:"px-4 py-3",children:x.label},x.key))]})}),s.jsxs(es,{children:[s.jsx(It,{height:w}),v.map(({key:x,virtualItem:p,item:E,props:L})=>p.index>e.length-1?s.jsx(hn,{...L},x):s.jsx(mn,{...L,activeColumns:f,item:E,showEmailOpenRate:u,timezone:c,onClick:k},x)),s.jsx(It,{height:S})]})]})})}const gn=["subscriptions.plan_interval","subscriptions.status","subscriptions.start_date","subscriptions.current_period_end","conversion","offer_redemptions"];function xn(e,t){return t&&e.length===0?!1:!e.some(a=>gn.includes(a.field))}function yn({isFetching:e,isFetchingNextPage:t}){return e&&!t}var vn=jr();const wn=Gt(vn);function hs(e){if(e)try{return wn.parse(e)}catch{return}}function _n(e){return e.map((t,a)=>({...t,id:`${t.field}:${a+1}`}))}function jn(e,t,a){return e.flatMap(r=>{const n=Object.keys(r);if(n.length!==1||n[0].startsWith("$"))return[];const l=ft(t,n[0],a);if(l){const u=l.definition.codec.parse(r,l.context);if(u)return[u]}return[]})}function Sn(e){return[...e].sort((t,a)=>t.localeCompare(a))}function En(e,t,a){const r=e.flatMap(n=>{const l=ft(t,n.field,a);return l?l.definition.codec.serialize(n,l.context)??[]:[]});if(r.length)return Sn(r).join("+")}const Nn=new Set(["last_seen_at","created_at","subscriptions.start_date","subscriptions.current_period_end"]);function Fe(e){return Array.isArray(e.$and)?{operator:"$and",children:e.$and}:Array.isArray(e.$or)?{operator:"$or",children:e.$or}:null}function Cn(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=Fe(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 kn(e){const t=Fe(e);if(!t||t.children.length!==2)return null;let a,r;for(const n of t.children){const l=n["newsletters.slug"];typeof l=="string"&&(a=l),l&&typeof l=="object"&&!Array.isArray(l)&&typeof l.$ne=="string"&&(a=l.$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 Rn(e){const t=Fe(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 Ln=[Cn,kn,Rn];function Ge(e){if(Object.keys(e).some(a=>Nn.has(a)))return!0;const t=Fe(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 bs(e,t){for(const r of Ln){const n=r(e);if(n)return[n]}const a=Fe(e);return a?.operator==="$and"?a.children.flatMap(r=>bs(r,t)):jn([e],Oe,t)}function Dn(e,t){const a=hs(e??"");return a?_n(bs(a,t)):[]}function On(e){const t=hs(e??"");return t?Ge(t):!1}function gs(e,t){return En(e,Oe,t)}function Mn(e,t,a=!t){return!!e&&a&&!t&&On(e)}function Le({baseSearchParams:e,filters:t,search:a,timezone:r}){const n=new URLSearchParams(e),l=gs(t,r);return n.delete("filter"),n.delete("search"),l&&n.set("filter",l),a&&n.set("search",a),n}function An(e){const[t,a]=qt(),r=d.useRef(null),n=d.useMemo(()=>t.get("filter")??void 0,[t]),l=d.useMemo(()=>t.toString(),[t]),u=d.useMemo(()=>Dn(n,e),[n,e]),[f,c]=d.useState(u),h=d.useMemo(()=>t.get("search")??"",[t]),g=d.useMemo(()=>gs(f,e),[f,e]);d.useEffect(()=>{l!==r.current&&(c(u),r.current=l)},[l,u]),d.useEffect(()=>{if(r.current!==null&&l!==r.current)return;const x=Le({baseSearchParams:t,filters:f,search:h,timezone:e}),p=x.toString();p!==l&&(r.current=p,a(x,{replace:!0}))},[l,f,h,t,a,e]);const v=d.useCallback((x,p={})=>{const E=p.replace??!0,L=Le({baseSearchParams:t,filters:x,search:h,timezone:e});c(x),r.current=L.toString(),a(L,{replace:E})},[h,t,a,e]),w=d.useCallback((x,p={})=>{const E=p.replace??!0,L=Le({baseSearchParams:t,filters:f,search:x,timezone:e});r.current=L.toString(),a(L,{replace:E})},[f,t,a,e]),S=d.useCallback(({replace:x=!0}={})=>{const p=Le({baseSearchParams:t,filters:[],search:h,timezone:e});c([]),r.current=p.toString(),a(p,{replace:x})},[h,t,a,e]),k=d.useCallback(({replace:x=!0}={})=>{const p=Le({baseSearchParams:t,filters:[],search:"",timezone:e});c([]),r.current=p.toString(),a(p,{replace:x})},[t,a,e]);return{filters:f,nql:g,search:h,setFilters:v,setSearch:w,clearFilters:S,clearAll:k,hasFilterOrSearch:!!g||h.length>0}}const Tn=({timezone:e})=>{const{filters:t,nql:a,search:r,setFilters:n,setSearch:l,hasFilterOrSearch:u,clearAll:f}=An(e),{data:c}=zs(),h=Ua(),g=Ba(h,a),v=c?.config?.emailAnalytics===!0,w=d.useMemo(()=>os(t),[t]),S=d.useMemo(()=>xn(t,a),[t,a]),k=d.useMemo(()=>Ea({filters:t,nql:a,search:r}),[t,a,r]),{data:x,isError:p,isFetching:E,isFetchingNextPage:L,refetch:b,fetchNextPage:P,hasNextPage:N}=Bs({searchParams:k,keepPreviousData:!0}),C=yn({isFetching:E,isFetchingNextPage:L}),D=x?.meta?.pagination?.total??0,o=t.length>0,i=le("flex flex-row",!o&&"items-center gap-2",o&&"col-span-full row-start-4 pt-5");return s.jsxs(ms,{children:[s.jsxs(ps,{isLoading:C,totalMembers:D,children:[s.jsx(Ke.Actions,{children:s.jsxs(Ke.ActionGroup,{className:"ml-auto flex-wrap justify-end sm:ml-0 sm:flex-nowrap",children:[s.jsx(an,{search:r,onSearchChange:l}),!o&&s.jsx(Tt,{activeView:g,filters:t,nql:a,savedViews:h,onFiltersChange:n}),s.jsx(ka,{canBulkDelete:S,hasFilterOrSearch:u,memberCount:D,nql:a,search:r,onImportComplete:()=>{b()}})]})}),o&&s.jsx("div",{className:i,children:s.jsx(Tt,{activeView:g,filters:t,nql:a,savedViews:h,onFiltersChange:n})})]}),s.jsx(cs,{children:C?s.jsx("div",{className:"flex h-full items-center justify-center",children:s.jsx(He,{size:"lg"})}):p?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(bn,{activeColumns:w,fetchNextPage:P,hasNextPage:N,isFetchingNextPage:L,isLoading:E&&!L,items:x.members,showEmailOpenRate:v,timezone:e,totalItems:D}):s.jsx("div",{className:"flex h-full flex-col items-center justify-center",children:u?s.jsxs(s.Fragment,{children:[s.jsx(_t,{title:"No matching members found.",children:s.jsx(yt,{})}),s.jsx(U,{className:"mt-4",variant:"outline",onClick:()=>f({replace:!1}),children:"Show all members"})]}):s.jsx(_t,{title:"No members yet",children:s.jsx(yt,{})})})})]})},ei=()=>{const[e]=qt(),{data:t,isLoading:a}=Pe({}),r=e.get("filter")??void 0;if(Mn(r,!!t,a))return s.jsxs(ms,{children:[s.jsx(ps,{isLoading:!0,totalMembers:0}),s.jsx(cs,{children:s.jsx("div",{className:"flex h-full items-center justify-center",children:s.jsx(He,{size:"lg"})})})]});const l=ss(t?.settings??[]);return s.jsx(Tn,{timezone:l})};export{ei as default};
|