ghost 6.58.0 → 6.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. package/components/tryghost-adapter-base-scheduling-0.2.2.tgz +0 -0
  2. package/components/tryghost-adapter-base-sso-0.1.2.tgz +0 -0
  3. package/components/tryghost-i18n-0.0.0.tgz +0 -0
  4. package/components/tryghost-kg-default-nodes-2.2.0.tgz +0 -0
  5. package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
  6. package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
  7. package/content/themes/casper/.github/workflows/test.yml +11 -1
  8. package/content/themes/casper/AGENTS.md +25 -0
  9. package/content/themes/casper/assets/built/screen.css +1 -1
  10. package/content/themes/casper/assets/css/screen.css +15 -1
  11. package/content/themes/casper/gulpfile.js +3 -0
  12. package/content/themes/casper/package.json +8 -8
  13. package/content/themes/source/.gitattributes +5 -0
  14. package/content/themes/source/.github/workflows/test.yml +39 -0
  15. package/content/themes/source/AGENTS.md +25 -0
  16. package/content/themes/source/README.md +33 -4
  17. package/content/themes/source/assets/built/screen.css +1 -1
  18. package/content/themes/source/assets/css/screen.css +15 -0
  19. package/content/themes/source/gulpfile.js +6 -3
  20. package/content/themes/source/package.json +13 -10
  21. package/content/themes/source/pnpm-workspace.yaml +3 -0
  22. package/core/boot.js +11 -4
  23. package/core/built/admin/assets/Combination-BCm9FL4o.js +41 -0
  24. package/core/built/admin/assets/about-BdSCpjXG.js +1 -0
  25. package/core/built/admin/assets/account-migration-BpKAqo8k.js +1 -0
  26. package/core/built/admin/assets/activitypub/{account-migration-BpDeIF3G.js → account-migration-DVnYS1XG.js} +8 -8
  27. package/core/built/admin/assets/activitypub/activitypub.js +2 -2
  28. package/core/built/admin/assets/activitypub/{bluesky-sharing-aPMtrS3L.js → bluesky-sharing-DLVeE9ii.js} +31 -31
  29. package/core/built/admin/assets/activitypub/{content-formatters-BORfuA9G.js → content-formatters-DCsVic-t.js} +2 -2
  30. package/core/built/admin/assets/activitypub/{dist-ByFmDSNP2.js → dist-ByFmDSNP.js} +1 -1
  31. package/core/built/admin/assets/activitypub/{domain-CPdiB27_.js → domain-rrvDLfnK.js} +8 -8
  32. package/core/built/admin/assets/activitypub/{edit-profile-BY2PawIe.js → edit-profile-VT-piVxq.js} +23 -23
  33. package/core/built/admin/assets/activitypub/{explore-Sp9bgAwq.js → explore-DZg3m48P.js} +14 -14
  34. package/core/built/admin/assets/activitypub/{feed-BjtF4ohL.js → feed-BJqQvDMI.js} +41 -41
  35. package/core/built/admin/assets/activitypub/{field-BDOYVTg6.js → field-BezS4-1J.js} +2 -2
  36. package/core/built/admin/assets/activitypub/inbox-Uf0GVrI_.js +1284 -0
  37. package/core/built/admin/assets/activitypub/{label-1jhN-qhD.js → label-CZ6if4zK.js} +2 -2
  38. package/core/built/admin/assets/activitypub/layout-DNuYT4Gu.js +1 -0
  39. package/core/built/admin/assets/activitypub/moderation-CP6mDVky.js +340 -0
  40. package/core/built/admin/assets/activitypub/{note-nr_m_5yb.js → note-BlFkye2g.js} +16 -16
  41. package/core/built/admin/assets/activitypub/{notifications-BdcyivbT.js → notifications-GGTrGEdu.js} +163 -126
  42. package/core/built/admin/assets/activitypub/{preferences-CNqy1x9C.js → preferences-CjZXrZqr.js} +1550 -1551
  43. package/core/built/admin/assets/activitypub/{profile-DlY4rhbO.js → profile-CcXYxydm.js} +248 -248
  44. package/core/built/admin/assets/activitypub/{routes-CEHdEZzS.js → routes-nHCKlZl-.js} +1971 -1747
  45. package/core/built/admin/assets/activitypub/settings-pDzybcb3.js +315 -0
  46. package/core/built/admin/assets/activitypub/{site-CtBUCPBz.js → site-BZF0F8LN.js} +101 -101
  47. package/core/built/admin/assets/activitypub/{step-1-D9jGWyAy.js → step-1-C-Ns1Tfg.js} +3 -3
  48. package/core/built/admin/assets/activitypub/{step-3-KpUqpGWi.js → step-3-rDMNGmLg.js} +8 -8
  49. package/core/built/admin/assets/activitypub/{tabs-DvlsxTCI.js → tabs-CDjh3_Jp.js} +198 -198
  50. package/core/built/admin/assets/activitypub/{topic-filter-CIN1E2jg.js → topic-filter-CmTc8hpN.js} +2 -2
  51. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-CATFd6YV.js → use-activity-pub-queries-DUDEdSdR.js} +286 -243
  52. package/core/built/admin/assets/activitypub/{use-reply-chain-data-DJ0vhA8V.js → use-reply-chain-data-TunGtmJl.js} +14 -14
  53. package/core/built/admin/assets/add-integration-modal-CXRQi1x0.js +1 -0
  54. package/core/built/admin/assets/add-newsletter-modal-t447KRYz.js +1 -0
  55. package/core/built/admin/assets/add-recommendation-modal-D882MdnR.js +1 -0
  56. package/core/built/admin/assets/{analytics-BC2oR8ay.js → analytics-Dj-WlzPf.js} +1 -1
  57. package/core/built/admin/assets/announcement-bar-modal-CwHKKw-a.js +1 -0
  58. package/core/built/admin/assets/api-keys-Boy5pLbD.js +1 -0
  59. package/core/built/admin/assets/audience-Cc40y7zQ.js +1 -0
  60. package/core/built/admin/assets/automations-DNLK5Udr.js +1 -0
  61. package/core/built/admin/assets/bluesky-sharing-Cm4aFaOl.js +1 -0
  62. package/core/built/admin/assets/breadcrumb-CcFr_ltt.js +1 -0
  63. package/core/built/admin/assets/button-BshWPHvn.js +1 -0
  64. package/core/built/admin/assets/chart-helpers-BsbzoWhK.js +1 -0
  65. package/core/built/admin/assets/{checkbox-LmClhqcS.js → checkbox-1G6KfK2q.js} +1 -1
  66. package/core/built/admin/assets/chunk-KS7C4IRE-DCsL4i4D.js +4 -0
  67. package/core/built/admin/assets/{chunk.408.1a258af360eb8d905508.js → chunk.301.5673a0caf7c49bb00212.js} +3 -3
  68. package/core/built/admin/assets/{chunk.524.4c693c3a00ac91df34fa.js → chunk.524.86db0d945468c852374b.js} +4 -4
  69. package/core/built/admin/assets/{chunk.582.20b600e329e58d12d7c2.js → chunk.582.c2f6216d3c4af303e236.js} +6 -6
  70. package/core/built/admin/assets/{code-editor-view-DqTOUnbM.js → code-editor-view-BVjtWyst.js} +1 -1
  71. package/core/built/admin/assets/{code-editor-view-bA0lfxUL.js → code-editor-view-y_zVfmCa.js} +1 -1
  72. package/core/built/admin/assets/color-picker-XEMPgNJE.js +3 -0
  73. package/core/built/admin/assets/{color-picker-field-Cv9GOJQZ.js → color-picker-field-BhplXcy5.js} +1 -1
  74. package/core/built/admin/assets/combobox-CRMJrvcQ.js +1 -0
  75. package/core/built/admin/assets/command-151T2eRx.js +1 -0
  76. package/core/built/admin/assets/comments-Bjbl9toF.js +1 -0
  77. package/core/built/admin/assets/confirmation-context-QmFxSjWy.js +1 -0
  78. package/core/built/admin/assets/{content-api-modal-BOFWRUkC.js → content-api-modal-CpeABXne.js} +1 -1
  79. package/core/built/admin/assets/{copy-field-8biQvNMD.js → copy-field-CglgRZyG.js} +1 -1
  80. package/core/built/admin/assets/custom-field-type-option-DSyJw4T4.js +1 -0
  81. package/core/built/admin/assets/custom-integration-modal-DWB9bRVp.js +1 -0
  82. package/core/built/admin/assets/date-range-select-kaKtab5O.js +1 -0
  83. package/core/built/admin/assets/design-and-theme-modal-86s2AaZ-.js +23 -0
  84. package/core/built/admin/assets/dirty-confirm-dialog-CTFdXXy7.js +1 -0
  85. package/core/built/admin/assets/disabled-sources-indicator-BFyCxUOx.js +1 -0
  86. package/core/built/admin/assets/dist-C1-Oy3Db.js +1 -0
  87. package/core/built/admin/assets/dist-CJJqYPep.js +1 -0
  88. package/core/built/admin/assets/dist-CNlMj7ML.js +1 -0
  89. package/core/built/admin/assets/dist-Kll2twSG.js +1 -0
  90. package/core/built/admin/assets/domain-BOoMvBG3.js +1 -0
  91. package/core/built/admin/assets/{dropzone-B21Entqz.js → dropzone-B6KWzsrb.js} +2 -2
  92. package/core/built/admin/assets/edit-profile-BagrYOrN.js +1 -0
  93. package/core/built/admin/assets/editor-AaJjqbpk.js +8 -0
  94. package/core/built/admin/assets/embed-signup-form-modal-B8L95KwR.js +8 -0
  95. package/core/built/admin/assets/explore-xbykZTlO.js +1 -0
  96. package/core/built/admin/assets/feed-BAHSipWv.js +1 -0
  97. package/core/built/admin/assets/{field-BQqLTgHM.js → field-kJYZ2T3C.js} +1 -1
  98. package/core/built/admin/assets/{filter-sources-FgqoUIL7.js → filter-sources-QeqFGNRB.js} +1 -1
  99. package/core/built/admin/assets/{filters-D0uIMD8n.js → filters-By5KQeV6.js} +1 -1
  100. package/core/built/admin/assets/filters-DtYpAkDd.js +1 -0
  101. package/core/built/admin/assets/first-promoter-modal-8A02oyjA.js +1 -0
  102. package/core/built/admin/assets/{ghost-ba408063a5922b458b4a8f216cf23251.js → ghost-f110822e67868c9fdf9a6c23754b2559.js} +9 -8
  103. package/core/built/admin/assets/gift-link-modal-DbYCyuhF.js +1 -0
  104. package/core/built/admin/assets/global-data-context-gAMDH9u1.js +1 -0
  105. package/core/built/admin/assets/growth-BSOxJGey.js +3 -0
  106. package/core/built/admin/assets/growth-BZTjURq5.js +1 -0
  107. package/core/built/admin/assets/history-modal-CCgWtlZE.js +1 -0
  108. package/core/built/admin/assets/html-field-BQC7XyLA.js +1 -0
  109. package/core/built/admin/assets/iframe-buffering-DnOlWTD4.js +1 -0
  110. package/core/built/admin/assets/{images-3cQgwfTD.js → images-D5UKr2SG.js} +1 -1
  111. package/core/built/admin/assets/{inbox-Dz_JblyJ.js → inbox-DvN15_YH.js} +45 -39
  112. package/core/built/admin/assets/index-BJz9Zlsc.js +67 -0
  113. package/core/built/admin/assets/index-Dg8cdR8E.css +1 -0
  114. package/core/built/admin/assets/{input-group-DpogNUIt.js → input-group-BPAxETpQ.js} +1 -1
  115. package/core/built/admin/assets/invite-user-modal-jcUaaNkW.js +1 -0
  116. package/core/built/admin/assets/{koenig-lexical-2KuqRwZI.js → koenig-lexical-CfXTYeli.js} +1 -1
  117. package/core/built/admin/assets/koenig-loader-DktFM3Uh.js +1 -0
  118. package/core/built/admin/assets/{kpi-card-Ck3tT2Wg.js → kpi-card-fUHZlzBX.js} +1 -1
  119. package/core/built/admin/assets/{kpi-card-DDIxptaS.js → kpi-card-o0urVtNL.js} +1 -1
  120. package/core/built/admin/assets/kpi-helpers-2FTF4a3-.js +1 -0
  121. package/core/built/admin/assets/kpi-tabs-B8-_k2dQ.js +1 -0
  122. package/core/built/admin/assets/{label-DodDsMzn.js → label-CiRS3i_f.js} +1 -1
  123. package/core/built/admin/assets/label-picker-ao7tuPaK.js +1 -0
  124. package/core/built/admin/assets/layout-DC6QGDaw.js +1 -0
  125. package/core/built/admin/assets/member-custom-fields-BW756-EV.js +1 -0
  126. package/core/built/admin/assets/member-detail-CGGgUTSl.js +1 -0
  127. package/core/built/admin/assets/members-ZcPthwG0.js +11 -0
  128. package/core/built/admin/assets/moderation-24bElWs3.js +1 -0
  129. package/core/built/admin/assets/multi-select-combobox-CZPrgz-Z.js +1 -0
  130. package/core/built/admin/assets/navigation-modal-BiTP4U_J.js +1 -0
  131. package/core/built/admin/assets/newsletter-B3Ihwizp.js +1 -0
  132. package/core/built/admin/assets/newsletter-detail-modal-CYsu4qhl.js +1 -0
  133. package/core/built/admin/assets/newsletter-emails-CDPR4-SP.js +1 -0
  134. package/core/built/admin/assets/newsletters-bJiYLJWl.js +1 -0
  135. package/core/built/admin/assets/note-7f6urVVA.js +1 -0
  136. package/core/built/admin/assets/notifications-rosQCyXH.js +1 -0
  137. package/core/built/admin/assets/offers-container-modal-J2j6NpDL.js +1 -0
  138. package/core/built/admin/assets/onboarding-route-DTjcThKl.js +1 -0
  139. package/core/built/admin/assets/overview-BxvWzGaf.js +1 -0
  140. package/core/built/admin/assets/overview-D6JG0hkZ.js +1 -0
  141. package/core/built/admin/assets/{page-header-VLPJfj_d.js → page-header-l7vXmLIw.js} +1 -1
  142. package/core/built/admin/assets/pintura-modal-BGHmudVB.js +1 -0
  143. package/core/built/admin/assets/portal-frame-DVc4VHX_.js +1 -0
  144. package/core/built/admin/assets/portal-modal-BCOcdiRi.js +1 -0
  145. package/core/built/admin/assets/{post-analytics-Gv81eN_g.js → post-analytics-CTSZMK6I.js} +1 -1
  146. package/core/built/admin/assets/post-analytics-header-Dt4RQGq0.js +1 -0
  147. package/core/built/admin/assets/{post-analytics-provider-O2YjZMhN.js → post-analytics-provider-C4ydiboO.js} +1 -1
  148. package/core/built/admin/assets/post-share-modal-DjH_a_1L.js +1 -0
  149. package/core/built/admin/assets/preferences-BLo6VJUS.js +5 -0
  150. package/core/built/admin/assets/preview-modal-BOgjgsJL.js +1 -0
  151. package/core/built/admin/assets/profile-DG6iCdRH.js +1 -0
  152. package/core/built/admin/assets/radio-group-ChHD4EQJ.js +1 -0
  153. package/core/built/admin/assets/router-provider-Bexg1t-V.js +1 -0
  154. package/core/built/admin/assets/select-ChxknEcT.js +1 -0
  155. package/core/built/admin/assets/settings-B0VDAhgV.js +1 -0
  156. package/core/built/admin/assets/settings-Dwo3CeAD.js +4 -0
  157. package/core/built/admin/assets/settings-breadcrumbs-sLDNedBW.js +1 -0
  158. package/core/built/admin/assets/share-modal-BDb2nacg.js +1 -0
  159. package/core/built/admin/assets/skeleton-D7hwjdry.js +1 -0
  160. package/core/built/admin/assets/slack-modal-CwNAD69x.js +1 -0
  161. package/core/built/admin/assets/sort-button-DhqpxkrO.js +1 -0
  162. package/core/built/admin/assets/source-icon-BPsD5ees.js +1 -0
  163. package/core/built/admin/assets/stats-WdDJ8c_1.js +1 -0
  164. package/core/built/admin/assets/stats-view-J3PI2eT_.js +1 -0
  165. package/core/built/admin/assets/step-1-2q1SjerQ.js +1 -0
  166. package/core/built/admin/assets/step-2-D5mJB3Uu.js +1 -0
  167. package/core/built/admin/assets/step-3-BpAuYTGZ.js +2 -0
  168. package/core/built/admin/assets/{stripe-button-Bh4p6Wud.js → stripe-button-DDoUKN5a.js} +1 -1
  169. package/core/built/admin/assets/stripe-connect-modal-pMdF3t4S.js +1 -0
  170. package/core/built/admin/assets/switch-B_1yU3Aw.js +1 -0
  171. package/core/built/admin/assets/{table-DghJxZMH.js → table-CrqQtkR2.js} +1 -1
  172. package/core/built/admin/assets/tabs-BhzVdh5p.js +1 -0
  173. package/core/built/admin/assets/tag-detail-CwJhI4qg.js +2 -0
  174. package/core/built/admin/assets/tags-CvJ0PgrB.js +1 -0
  175. package/core/built/admin/assets/testimonials-modal-CV82IAnI.js +1 -0
  176. package/core/built/admin/assets/tier-detail-modal-pLzCOfeg.js +1 -0
  177. package/core/built/admin/assets/toggle-group-BW_T4yn6.js +1 -0
  178. package/core/built/admin/assets/topic-filter-DkXjDejV.js +1 -0
  179. package/core/built/admin/assets/transistor-modal-TMRvHZ6B.js +1 -0
  180. package/core/built/admin/assets/unsplash-modal-CV92RdPw.js +1 -0
  181. package/core/built/admin/assets/{use-analytics-data-IxJcSjc9.js → use-analytics-data-BM_uV9SU.js} +1 -1
  182. package/core/built/admin/assets/use-check-theme-limit-error-DkBnXMSY.js +1 -0
  183. package/core/built/admin/assets/use-confirm-unload-SzlkOIpm.js +1 -0
  184. package/core/built/admin/assets/use-feature-flag-cahOlMva.js +1 -0
  185. package/core/built/admin/assets/use-filter-params-BX5qf0Cg.js +1 -0
  186. package/core/built/admin/assets/{use-growth-stats-1NW-8eEZ.js → use-growth-stats-D0LlWBe6.js} +1 -1
  187. package/core/built/admin/assets/{use-hash-link-navigation-guard-B9j6HIrV.js → use-hash-link-navigation-guard-B_Y3FhYH.js} +1 -1
  188. package/core/built/admin/assets/use-limiter-D3DHSoAj.js +2 -0
  189. package/core/built/admin/assets/{use-pintura-config-BjFChXV1.js → use-pintura-config-D63Xu0SG.js} +1 -1
  190. package/core/built/admin/assets/use-pintura-editor-Z51aFnC8.js +1 -0
  191. package/core/built/admin/assets/{use-post-referrers-Dp1BnTAK.js → use-post-referrers-Cvymr3gt.js} +1 -1
  192. package/core/built/admin/assets/use-query-params-BfzuqbcD.js +1 -0
  193. package/core/built/admin/assets/use-reply-chain-data-Dc18Ujqo.js +1 -0
  194. package/core/built/admin/assets/use-setting-group-DYRIzqC0.js +1 -0
  195. package/core/built/admin/assets/use-settings-navigation-aDSLtmEl.js +1 -0
  196. package/core/built/admin/assets/{use-simple-pagination-DsEGSJhe.js → use-simple-pagination-B2TdNX67.js} +1 -1
  197. package/core/built/admin/assets/{use-tinybird-query-Ci_DiPkX.js → use-tinybird-query-BvQIVuRc.js} +1 -1
  198. package/core/built/admin/assets/{use-tinybird-token-CsUwc722.js → use-tinybird-token-COQTPIwL.js} +1 -1
  199. package/core/built/admin/assets/use-upgrade-route-BZf1g59m.js +1 -0
  200. package/core/built/admin/assets/{use-url-input-BEZJpVgN.js → use-url-input-PcqZadXa.js} +1 -1
  201. package/core/built/admin/assets/user-detail-modal-DeO3SAZq.js +1 -0
  202. package/core/built/admin/assets/{virtual-list-D5ugXyZY.js → virtual-list-D3MfPNOh.js} +1 -1
  203. package/core/built/admin/assets/web-CDdyG7z1.js +2 -0
  204. package/core/built/admin/assets/web-CwQ8_QUc.js +1 -0
  205. package/core/built/admin/assets/zapier-modal-a7t75iNI.js +1 -0
  206. package/core/built/admin/index.html +15 -12
  207. package/core/frontend/apps/private-blogging/lib/helpers/input_password.js +2 -1
  208. package/core/frontend/helpers/body_class.js +2 -1
  209. package/core/frontend/helpers/cancel_link.js +2 -1
  210. package/core/frontend/helpers/color_to_rgba.js +2 -1
  211. package/core/frontend/helpers/content_api_key.js +2 -1
  212. package/core/frontend/helpers/content_api_url.js +2 -1
  213. package/core/frontend/helpers/contrast_text_color.js +2 -1
  214. package/core/frontend/helpers/facebook_url.js +2 -1
  215. package/core/frontend/helpers/ghost_foot.js +2 -1
  216. package/core/frontend/helpers/ghost_head.js +2 -1
  217. package/core/frontend/helpers/has.js +4 -2
  218. package/core/frontend/helpers/link_class.js +2 -1
  219. package/core/frontend/helpers/meta_description.js +2 -1
  220. package/core/frontend/helpers/meta_title.js +2 -1
  221. package/core/frontend/helpers/navigation.js +113 -22
  222. package/core/frontend/helpers/page_url.js +2 -1
  223. package/core/frontend/helpers/post_class.js +2 -1
  224. package/core/frontend/helpers/reading_time.js +2 -1
  225. package/core/frontend/helpers/social_accounts.js +2 -1
  226. package/core/frontend/helpers/social_url.js +2 -1
  227. package/core/frontend/helpers/total_members.js +2 -1
  228. package/core/frontend/helpers/total_paid_members.js +2 -1
  229. package/core/frontend/helpers/tpl/navigation.hbs +1 -1
  230. package/core/frontend/helpers/twitter_url.js +2 -1
  231. package/core/frontend/public/cards.manifest.json +1 -1
  232. package/core/server/api/endpoints/posts.js +7 -4
  233. package/core/server/api/endpoints/utils/permissions.js +2 -1
  234. package/core/server/api/endpoints/utils/validators/input/settings.js +83 -1
  235. package/core/server/data/exporter/table-lists.js +1 -0
  236. package/core/server/data/importer/handlers/json.js +2 -1
  237. package/core/server/data/migrations/versions/5.19/2022-09-02-20-52-backfill-new-product-columns.js +2 -1
  238. package/core/server/data/migrations/versions/5.21/2022-10-26-04-50-member-subscription-created-batch-id.js +4 -2
  239. package/core/server/data/migrations/versions/5.22/2022-10-31-12-03-backfill-new-product-columns.js +2 -1
  240. package/core/server/data/migrations/versions/6.58/2026-08-11-21-22-48-rename-email-batches-provider-id.js +1 -1
  241. package/core/server/data/migrations/versions/6.59/2026-08-18-17-06-46-add-gift-delivery-fields-to-gifts.js +26 -0
  242. package/core/server/data/migrations/versions/6.59/2026-08-18-17-07-01-add-gift-deliveries.js +20 -0
  243. package/core/server/data/schema/commands.js +48 -24
  244. package/core/server/data/schema/schema.js +28 -7
  245. package/core/server/data/seeders/importers/automation-action-revisions-importer.js +3 -36
  246. package/core/server/data/seeders/importers/automation-actions-importer.js +5 -41
  247. package/core/server/data/seeders/importers/automation-run-steps-importer.js +3 -36
  248. package/core/server/data/seeders/importers/automation-runs-importer.js +7 -42
  249. package/core/server/data/seeders/importers/automations-importer.js +3 -36
  250. package/core/server/data/seeders/importers/comment-reports-importer.js +5 -5
  251. package/core/server/data/seeders/importers/comments-importer.js +5 -5
  252. package/core/server/data/seeders/importers/email-batches-importer.js +5 -4
  253. package/core/server/data/seeders/importers/email-recipients-importer.js +12 -20
  254. package/core/server/data/seeders/importers/emails-importer.js +6 -6
  255. package/core/server/data/seeders/importers/labels-importer.js +3 -3
  256. package/core/server/data/seeders/importers/members-click-events-importer.js +5 -5
  257. package/core/server/data/seeders/importers/members-created-events-importer.js +13 -12
  258. package/core/server/data/seeders/importers/members-feedback-importer.js +7 -7
  259. package/core/server/data/seeders/importers/members-importer.js +4 -4
  260. package/core/server/data/seeders/importers/members-login-events-importer.js +3 -3
  261. package/core/server/data/seeders/importers/members-products-importer.js +2 -2
  262. package/core/server/data/seeders/importers/members-status-events-importer.js +4 -3
  263. package/core/server/data/seeders/importers/members-stripe-customers-importer.js +2 -2
  264. package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +7 -7
  265. package/core/server/data/seeders/importers/members-subscribe-events-importer.js +3 -3
  266. package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +3 -3
  267. package/core/server/data/seeders/importers/offer-redemptions-importer.js +7 -7
  268. package/core/server/data/seeders/importers/offers-importer.js +3 -3
  269. package/core/server/data/seeders/importers/posts-importer.js +4 -4
  270. package/core/server/data/seeders/importers/table-importer.js +2 -35
  271. package/core/server/data/seeders/importers/tags-importer.js +2 -2
  272. package/core/server/data/seeders/importers/users-importer.js +2 -2
  273. package/core/server/data/seeders/importers/web-mentions-importer.js +2 -2
  274. package/core/server/data/seeders/utils/random.js +7 -0
  275. package/core/server/ghost-server.js +19 -5
  276. package/core/server/lib/db-date.js +72 -3
  277. package/core/server/models/gift-delivery.js +23 -0
  278. package/core/server/models/gift.js +9 -0
  279. package/core/server/models/index.js +3 -2
  280. package/core/server/models/settings.js +43 -4
  281. package/core/server/services/automations/database-automations-repository.js +38 -31
  282. package/core/server/services/automations/poll.js +1 -1
  283. package/core/server/services/content-import/csv/index.js +8 -0
  284. package/core/server/services/content-import/csv/parse.js +60 -0
  285. package/core/server/services/content-import/import/importer.js +222 -0
  286. package/core/server/services/content-import/import/post-data.js +52 -0
  287. package/core/server/services/content-import/import/reader.js +15 -0
  288. package/core/server/services/content-import/import/row.js +50 -0
  289. package/core/server/services/content-import/import/store.js +71 -0
  290. package/core/server/services/content-import/index.js +67 -0
  291. package/core/server/services/email-analytics/automation-email-analytics-batch-processor.js +1 -1
  292. package/core/server/services/email-analytics/index.js +3 -1
  293. package/core/server/services/email-analytics/jobs/index.js +2 -2
  294. package/core/server/services/email-service/email-service-wrapper.js +1 -1
  295. package/core/server/services/email-suppression-list/email-suppression-list.js +4 -2
  296. package/core/server/services/gifts/CONTEXT.md +27 -3
  297. package/core/server/services/gifts/README.md +8 -4
  298. package/core/server/services/gifts/constants.js +2 -1
  299. package/core/server/services/gifts/email-templates/gift-delivery.hbs +20 -0
  300. package/core/server/services/gifts/email-templates/gift-delivery.js +39 -0
  301. package/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs +2 -2
  302. package/core/server/services/gifts/email-templates/gift-purchase-confirmation.js +19 -4
  303. package/core/server/services/gifts/events/send-gift-delivery-event.js +15 -0
  304. package/core/server/services/gifts/gift-bookshelf-repository.js +23 -3
  305. package/core/server/services/gifts/gift-checkout-adapter.js +5 -3
  306. package/core/server/services/gifts/gift-codec.js +8 -0
  307. package/core/server/services/gifts/gift-delivery-bookshelf-repository.js +107 -0
  308. package/core/server/services/gifts/gift-delivery-codec.js +12 -0
  309. package/core/server/services/gifts/gift-delivery-schema.js +15 -0
  310. package/core/server/services/gifts/gift-delivery-service.js +209 -0
  311. package/core/server/services/gifts/gift-email-renderer.js +13 -1
  312. package/core/server/services/gifts/gift-email-service.js +97 -17
  313. package/core/server/services/gifts/gift-schema.js +10 -6
  314. package/core/server/services/gifts/gift-service.js +259 -34
  315. package/core/server/services/gifts/gift.js +59 -5
  316. package/core/server/services/gifts/index.js +69 -3
  317. package/core/server/services/lib/mailgun-client.js +5 -2
  318. package/core/server/services/mail/ghost-mailer.js +9 -1
  319. package/core/server/services/member-welcome-emails/service.js +6 -1
  320. package/core/server/services/members/members-api/controllers/router-controller.js +26 -8
  321. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +100 -12
  322. package/core/server/services/stripe/stripe-api.js +3 -2
  323. package/core/server/services/stripe/webhook-controller.js +6 -3
  324. package/core/server/services/stripe/webhook-manager.js +2 -0
  325. package/core/shared/labs.js +1 -0
  326. package/package.json +9 -8
  327. package/pnpm-lock.yaml +26 -11
  328. package/pnpm-workspace.yaml +5 -6
  329. package/content/themes/source/yarn.lock +0 -6232
  330. package/core/built/admin/assets/Combination-BDvCdg1t.js +0 -41
  331. package/core/built/admin/assets/about-B_BvSyLF.js +0 -1
  332. package/core/built/admin/assets/account-migration-oJUGxnzT.js +0 -1
  333. package/core/built/admin/assets/activitypub/dist-Dqggkccr.js +0 -215
  334. package/core/built/admin/assets/activitypub/inbox-z1o2j1Tb.js +0 -1221
  335. package/core/built/admin/assets/activitypub/layout-BRMezuty.js +0 -1
  336. package/core/built/admin/assets/activitypub/moderation-CZudJi8N.js +0 -160
  337. package/core/built/admin/assets/activitypub/settings-CrSV1cux.js +0 -107
  338. package/core/built/admin/assets/add-integration-modal-BW23PDYs.js +0 -1
  339. package/core/built/admin/assets/add-newsletter-modal-M0ls8BKO.js +0 -1
  340. package/core/built/admin/assets/add-recommendation-modal-B0NeBMzl.js +0 -1
  341. package/core/built/admin/assets/announcement-bar-modal-pXBqjQE_.js +0 -1
  342. package/core/built/admin/assets/api-keys-Df6uv1dT.js +0 -1
  343. package/core/built/admin/assets/audience-BY8od8If.js +0 -1
  344. package/core/built/admin/assets/automations-DCs6Wady.js +0 -1
  345. package/core/built/admin/assets/bluesky-sharing-D0P42Cws.js +0 -1
  346. package/core/built/admin/assets/breadcrumb-MTj_cKLb.js +0 -1
  347. package/core/built/admin/assets/chart-helpers-DcO3k_vA.js +0 -1
  348. package/core/built/admin/assets/chunk-KS7C4IRE-DG9HTHQ3.js +0 -4
  349. package/core/built/admin/assets/color-picker-CBlJMv3y.js +0 -3
  350. package/core/built/admin/assets/combobox-BbPJzjCp.js +0 -1
  351. package/core/built/admin/assets/command-BrhXIlDr.js +0 -1
  352. package/core/built/admin/assets/comments-Cu4rD1aJ.js +0 -1
  353. package/core/built/admin/assets/confirmation-provider-BEdrnHns.js +0 -1
  354. package/core/built/admin/assets/custom-field-type-option-CNhAgHbJ.js +0 -1
  355. package/core/built/admin/assets/custom-integration-modal-CrGOI8IB.js +0 -1
  356. package/core/built/admin/assets/date-range-select-Bsh4gIek.js +0 -1
  357. package/core/built/admin/assets/design-and-theme-modal-DWZguwWX.js +0 -23
  358. package/core/built/admin/assets/dirty-confirm-dialog-DmdMpgyN.js +0 -1
  359. package/core/built/admin/assets/disabled-sources-indicator-BLnmyWgt.js +0 -1
  360. package/core/built/admin/assets/dist-DMFGvqqU.js +0 -1
  361. package/core/built/admin/assets/dist-DlCyLrOC.js +0 -1
  362. package/core/built/admin/assets/dist-j1xxxnY8.js +0 -1
  363. package/core/built/admin/assets/domain-Dp9TRrFp.js +0 -1
  364. package/core/built/admin/assets/edit-profile-DG6lpMsr.js +0 -1
  365. package/core/built/admin/assets/editor-CPQOrhrn.js +0 -8
  366. package/core/built/admin/assets/embed-signup-form-modal-CgWniDha.js +0 -9
  367. package/core/built/admin/assets/explore-C3rzONJv.js +0 -1
  368. package/core/built/admin/assets/feed-DpUwS1cU.js +0 -1
  369. package/core/built/admin/assets/filters-DZJT29GW.js +0 -1
  370. package/core/built/admin/assets/first-promoter-modal-DJhQQheG.js +0 -1
  371. package/core/built/admin/assets/gift-link-modal-sdFLjND9.js +0 -1
  372. package/core/built/admin/assets/global-data-provider-CixmTX00.js +0 -1
  373. package/core/built/admin/assets/growth-0YYkBEeS.js +0 -1
  374. package/core/built/admin/assets/growth-DpjAPeQT.js +0 -3
  375. package/core/built/admin/assets/history-modal-BWJ4-cJ0.js +0 -1
  376. package/core/built/admin/assets/html-field-C-oa5DEl.js +0 -1
  377. package/core/built/admin/assets/iframe-buffering-Ba9sDpi2.js +0 -1
  378. package/core/built/admin/assets/index-BOJzlYiz.js +0 -67
  379. package/core/built/admin/assets/index-Bid6LAyc.css +0 -1
  380. package/core/built/admin/assets/invite-user-modal-DCiQSiuD.js +0 -1
  381. package/core/built/admin/assets/koenig-editor-base-BApy8Q7C.js +0 -1
  382. package/core/built/admin/assets/kpi-helpers-ssbuy-hD.js +0 -1
  383. package/core/built/admin/assets/kpi-tabs-BqoIM6bI.js +0 -1
  384. package/core/built/admin/assets/label-picker-Cvvbmzb5.js +0 -1
  385. package/core/built/admin/assets/layout-DkkGyev2.js +0 -1
  386. package/core/built/admin/assets/member-custom-fields-CvGcpaiW.js +0 -1
  387. package/core/built/admin/assets/member-detail-CMCMZ47_.js +0 -1
  388. package/core/built/admin/assets/members-sRl6fNfq.js +0 -11
  389. package/core/built/admin/assets/moderation-KhKwGqI1.js +0 -1
  390. package/core/built/admin/assets/multi-select-combobox-nhCff0_K.js +0 -1
  391. package/core/built/admin/assets/navigation-modal-MDJExWDJ.js +0 -1
  392. package/core/built/admin/assets/newsletter-BIBHumfV.js +0 -1
  393. package/core/built/admin/assets/newsletter-detail-modal-CfjBMH3v.js +0 -1
  394. package/core/built/admin/assets/newsletter-emails-ClDL-7dA.js +0 -1
  395. package/core/built/admin/assets/newsletters-CBe-IPzK.js +0 -1
  396. package/core/built/admin/assets/note-HnNUOt4d.js +0 -1
  397. package/core/built/admin/assets/notifications-Cj5e-258.js +0 -1
  398. package/core/built/admin/assets/offers-container-modal-BHwHtixC.js +0 -1
  399. package/core/built/admin/assets/onboarding-route-D_4jp7Nq.js +0 -1
  400. package/core/built/admin/assets/overview-CezDdg-F.js +0 -1
  401. package/core/built/admin/assets/overview-D5mM51Lj.js +0 -1
  402. package/core/built/admin/assets/pintura-modal-BXXJ8Iaa.js +0 -1
  403. package/core/built/admin/assets/portal-frame-BLCvF8f-.js +0 -1
  404. package/core/built/admin/assets/portal-modal-DN80tAcy.js +0 -1
  405. package/core/built/admin/assets/post-analytics-header-_ydSY8qO.js +0 -1
  406. package/core/built/admin/assets/post-share-modal-CzYak_a5.js +0 -1
  407. package/core/built/admin/assets/preferences-gneLb6LV.js +0 -5
  408. package/core/built/admin/assets/preview-modal-Bkq-tgVm.js +0 -1
  409. package/core/built/admin/assets/profile-CzXmCNTC.js +0 -1
  410. package/core/built/admin/assets/radio-group-Dsq5ZEbV.js +0 -1
  411. package/core/built/admin/assets/router-provider-CkB_ArLF.js +0 -1
  412. package/core/built/admin/assets/select-xuZAuDyS.js +0 -1
  413. package/core/built/admin/assets/settings-Ct8pabhr.js +0 -1
  414. package/core/built/admin/assets/settings-KSWWQanQ.js +0 -4
  415. package/core/built/admin/assets/settings-breadcrumbs-DbPGu-Tu.js +0 -1
  416. package/core/built/admin/assets/share-modal-CdiUx9WM.js +0 -1
  417. package/core/built/admin/assets/slack-modal-BP--Z3jE.js +0 -1
  418. package/core/built/admin/assets/sort-button-CjfKdlsL.js +0 -1
  419. package/core/built/admin/assets/source-icon-DHj1h6Ts.js +0 -1
  420. package/core/built/admin/assets/stats-C615kulJ.js +0 -1
  421. package/core/built/admin/assets/stats-view-BSMRdYiN.js +0 -1
  422. package/core/built/admin/assets/step-1-pSdGYtIF.js +0 -1
  423. package/core/built/admin/assets/step-2-T9Uy4eBD.js +0 -1
  424. package/core/built/admin/assets/step-3-D4uXe_XG.js +0 -2
  425. package/core/built/admin/assets/stripe-connect-modal-C2vTvepi.js +0 -1
  426. package/core/built/admin/assets/switch-CE2NuMn-.js +0 -1
  427. package/core/built/admin/assets/tabs-l9c7FjzI.js +0 -1
  428. package/core/built/admin/assets/tag-detail-DBw_M2-p.js +0 -2
  429. package/core/built/admin/assets/tags-DoWsAG6l.js +0 -1
  430. package/core/built/admin/assets/testimonials-modal-BZKePE2T.js +0 -1
  431. package/core/built/admin/assets/tier-detail-modal-D65pVWsN.js +0 -1
  432. package/core/built/admin/assets/toggle-group-uJnl42w3.js +0 -1
  433. package/core/built/admin/assets/topic-filter-BM7hz0kW.js +0 -1
  434. package/core/built/admin/assets/transistor-modal-VZOGN3od.js +0 -1
  435. package/core/built/admin/assets/unsplash-modal-CKGfACxF.js +0 -1
  436. package/core/built/admin/assets/use-check-theme-limit-error-CGp3CGT5.js +0 -1
  437. package/core/built/admin/assets/use-feature-flag-CSq2Lwzt.js +0 -1
  438. package/core/built/admin/assets/use-filter-params-0hcJJuEJ.js +0 -1
  439. package/core/built/admin/assets/use-limiter-ffwpsZPp.js +0 -2
  440. package/core/built/admin/assets/use-pintura-editor-Cb41oJyL.js +0 -1
  441. package/core/built/admin/assets/use-query-params-DHhhu8wi.js +0 -1
  442. package/core/built/admin/assets/use-reply-chain-data-C0ZUTkfk.js +0 -1
  443. package/core/built/admin/assets/use-setting-group-Bx8M6FL2.js +0 -1
  444. package/core/built/admin/assets/use-settings-navigation-BOZcat_V.js +0 -1
  445. package/core/built/admin/assets/use-upgrade-route-B3_DUiuT.js +0 -1
  446. package/core/built/admin/assets/user-detail-modal-595z1N5r.js +0 -1
  447. package/core/built/admin/assets/web-CAta3lRE.js +0 -1
  448. package/core/built/admin/assets/web-Ds9_wWJK.js +0 -2
  449. package/core/built/admin/assets/zapier-modal-CcfDZY53.js +0 -1
  450. package/core/server/data/seeders/utils/database-date.js +0 -28
  451. package/core/server/services/automations/database-date.js +0 -59
  452. /package/core/built/admin/assets/{dist-CqO2lWS02.js → dist-CqO2lWS0.js} +0 -0
  453. /package/core/server/services/{automations → lib}/mailgun-message-id.js +0 -0
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{h as r,m as i,x as a}from"./hooks-CJepWnbB.js";import{n as o}from"./dist-Ndy-PuGN.js";import{t as s}from"./stack-CIfOAAVf.js";import{o as c,t as l}from"./use-settings-navigation-BOZcat_V.js";import{c as u,i as d,n as f,o as p,r as m,s as h,t as g}from"./field-BQqLTgHM.js";import{n as _,t as v}from"./radio-group-Dsq5ZEbV.js";import{f as y}from"./users-DmGMPfw7.js";import{cr as b}from"./index-BOJzlYiz.js";import{t as x}from"./validator-Cr0sMKuW.js";import{a as S,i as C,n as w,o as T,t as E}from"./use-limiter-ffwpsZPp.js";import{n as D}from"./global-data-provider-CixmTX00.js";var O=e(x(),1),k=e(t(),1),A=n(),j=`USER_ALREADY_REGISTERED`,M=`A user with that email address already exists.`;function N(){let e=C(),t=C({searchParams:{limit:`100`,permissions:`assign`}}),n=w(),{updateRoute:x}=l(),{config:N}=D(),P=N.labs.superEditors,[F,I]=(0,k.useState)(``),[L,R]=(0,k.useState)(``),[z,B]=(0,k.useState)(`contributor`),[V,H]=(0,k.useState)({}),{data:{users:U}={}}=y(),{data:{invites:W}={}}=T(),{mutateAsync:G}=S(),K=i();if((0,k.useEffect)(()=>{L===`saved`&&setTimeout(()=>{R(``)},2e3)},[L]),(0,k.useEffect)(()=>{z!==`contributor`&&n?.isLimited(`staff`)?n.errorIfWouldGoOverLimit(`staff`).then(()=>{H(e=>({...e,role:void 0}))}).catch(e=>{if(e instanceof E){H(t=>({...t,role:e.message}));return}else throw e}):H(e=>({...e,role:void 0}))},[n,z]),!e.data?.roles||!t.data?.roles)return null;let q=e.data.roles,J=t.data.roles,Y=`Send invitation`;L===`saving`?Y=`Sending...`:L===`saved`?Y=`Invite sent!`:L===`error`&&(Y=`Retry`);let X=async()=>{if(L!==`saving`){if(!O.default.isEmail(F)){H({email:`Please enter a valid email address.`});return}if(U?.some(({email:e})=>e===F)){H({email:M});return}if(W?.some(({email:e})=>e===F)){H({email:`A user with that email address was already invited.`});return}if(!V.role){R(`saving`);try{await G({email:F,roleId:q.find(({name:e})=>e.toLowerCase()===z.toLowerCase()).id}),R(`saved`),o.success(`Invitation sent`,{description:`${F}`}),x(`staff?tab=invited`)}catch(e){if((e instanceof a?e.data?.errors[0]:void 0)?.code===j){R(``),H({email:M});return}R(`error`);let t=(0,A.jsxs)(`span`,{children:[`If the problem persists, `,(0,A.jsxs)(`a`,{href:`https://ghost.org/contact`,children:[(0,A.jsx)(`u`,{children:`contact support`}),`.`]}),`.`]});e instanceof r&&e.data?.errors?.[0]?.type===`EmailError`&&(t=(0,A.jsx)(`span`,{children:`Check your Mailgun configuration.`})),o.error(`Failed to send invitation`,{description:t}),K(e,{withToast:!1});return}}}},Z=[{hint:`Can create and edit their own posts, but cannot publish. An Editor needs to approve and publish for them.`,label:`Contributor`,value:`contributor`},{hint:`A trusted user who can create, edit and publish their own posts, but can’t modify others.`,label:`Author`,value:`author`},{hint:`Can invite and manage other Authors and Contributors, as well as edit and publish any posts on the site.`,label:`Editor`,value:`editor`},{hint:`Trusted staff user who should be able to manage all content and users, as well as site settings and options.`,label:`Administrator`,value:`administrator`}];P&&(Z[2]={hint:`Can invite and manage other Authors and Contributors, as well as edit and publish any posts on the site. Can manage members and moderate comments.`,label:`Editor (beta mode)`,value:`super editor`});let Q=Z.filter(e=>J.some(t=>t.name===e.label||t.name===`Super Editor`&&e.label===`Editor (beta mode)`));return V.email&&(Y=`Retry`),(0,A.jsx)(c,{cancelLabel:`Close`,okLabel:Y,okVariant:L===`error`||V.email?`destructive`:`default`,testId:`invite-user-modal`,title:`Invite a new staff user`,width:540,onClose:()=>{x(`staff`)},onOk:X,children:(0,A.jsxs)(s,{className:`py-4`,gap:`xl`,children:[(0,A.jsx)(`p`,{children:`Send an invitation for a new person to create a staff account on your site, and select a role that matches what you’d like them to be able to do.`}),(0,A.jsxs)(g,{"data-invalid":!!V.email||void 0,children:[(0,A.jsx)(p,{htmlFor:`invite-email`,children:`Email address`}),(0,A.jsx)(b,{"aria-invalid":!!V.email||void 0,autoComplete:`off`,id:`invite-email`,placeholder:`jamie@example.com`,value:F,"data-1p-ignore":!0,onChange:e=>I(e.target.value),onKeyDown:()=>H(e=>({...e,email:void 0}))}),V.email&&(0,A.jsx)(d,{children:V.email})]}),(0,A.jsxs)(u,{children:[(0,A.jsx)(h,{id:`invite-role-legend`,variant:`label`,children:`Role`}),(0,A.jsx)(v,{"aria-describedby":V.role?`invite-role-error`:void 0,"aria-invalid":!!V.role||void 0,"aria-labelledby":`invite-role-legend`,name:`role`,value:z,onValueChange:e=>B(e),children:Q.map(e=>{let t=`invite-role-${e.value.replace(/\s+/g,`-`)}`;return(0,A.jsxs)(g,{className:`has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-0`,orientation:`horizontal`,children:[(0,A.jsx)(_,{id:t,value:e.value}),(0,A.jsxs)(f,{children:[(0,A.jsx)(p,{htmlFor:t,children:e.label}),(0,A.jsx)(m,{children:e.hint})]})]},e.value)})}),(0,A.jsx)(d,{id:`invite-role-error`,children:V.role})]})]})})}export{N as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{a as r,r as i}from"./framework-provider-CFLwK5uS.js";import{r as a}from"./shade-app-B3heOAfz-BhQXxNkT.js";import{Qn as o}from"./index-BOJzlYiz.js";var s=e(t(),1),c=n(),l=class extends s.Component{state={hasError:!1};constructor(e){super(e)}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){r(n=>{n.setTag(`adminx_settings_component`,t.componentStack),i(e)}),console.error(e),console.error(`In component:`,t.componentStack)}render(){return this.state.hasError?(0,c.jsxs)(o,{className:`border border-state-danger/40 bg-state-danger/10 text-destructive`,role:`alert`,size:`sm`,variant:`destructive`,children:[`An error occurred loading `,this.props.name,`. Please refresh and try again.`]}):this.props.children}},u=(e,t)=>function(n){return(0,c.jsx)(l,{name:t,children:(0,c.jsx)(e,{...n})})},d=function(e){let t=`pending`,n,r=e().then(e=>{t=`success`,n=e},e=>{t=`error`,n=e});return{read:()=>{switch(t){case`pending`:throw r;case`error`:throw n;default:return n}}}},f=({editor:e,onBlur:t,placeholder:n,nodes:r,emojiPicker:o=!0,darkMode:l=!1,singleParagraph:u=!1,children:d,initialEditorState:f,onChange:p,fileUploader:m,cardConfig:h,registerAPI:g})=>{let _=(0,s.useCallback)(e=>{try{i({error:e,tags:{lexical:!0},contexts:{koenig:{version:window[`@tryghost/koenig-lexical`]?.version}}})}catch(e){console.error(e)}console.error(e)},[]),{setFocusState:v}=a(),y=()=>{t&&t(),v(!1)},b=()=>{v(!0)},x=(0,s.useMemo)(()=>new Proxy({},{get:(t,n)=>e.read()[n]}),[e]),S={DEFAULT_NODES:x.DEFAULT_TRANSFORMERS,BASIC_NODES:x.BASIC_TRANSFORMERS,MINIMAL_NODES:x.MINIMAL_TRANSFORMERS,EMAIL_NODES:x.EMAIL_TRANSFORMERS,EMAIL_EDITOR_NODES:x.EMAIL_TRANSFORMERS},C=r||`DEFAULT_NODES`;return(0,c.jsx)(x.KoenigComposer,{cardConfig:h,darkMode:l,fileUploader:m,initialEditorState:f,nodes:x[C],onError:_,children:(0,c.jsxs)(x.KoenigComposableEditor,{className:`koenig-lexical koenig-lexical-editor-input`,isSnippetsEnabled:!1,markdownTransformers:S[C],placeholderClassName:`koenig-lexical-editor-input-placeholder line-clamp-1`,placeholderText:n,registerAPI:g,singleParagraph:u,onBlur:y,onChange:p,onFocus:b,children:[d(x),o?(0,c.jsx)(x.EmojiPickerPlugin,{}):null]})})},p=({className:e,children:t,initialEditorState:n,onChange:r,inheritFontStyles:i=!0,loadingFallback:o,...u})=>{let{fetchKoenigLexical:p,darkMode:m}=a(),h=(0,s.useMemo)(()=>{if(!p)throw Error(`Koenig Lexical loader is not available`);return d(p)},[p]);return(0,c.jsx)(`div`,{className:e||`w-full`,children:(0,c.jsx)(`div`,{className:`koenig-react-editor w-full ${i?`[&_*]:font-inherit! [&_*]:[font-size:inherit]!`:``}`,children:(0,c.jsx)(l,{name:`editor`,children:(0,c.jsx)(s.Suspense,{fallback:o||(0,c.jsx)(`p`,{className:`koenig-react-editor-loading`,children:`Loading editor...`}),children:(0,c.jsx)(f,{...u,darkMode:m,editor:h,initialEditorState:n,onChange:r,children:t})})})})})};export{u as i,d as n,l as r,p as t};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{i as r,n as i,t as a}from"./source-icon-DHj1h6Ts.js";import{d as o,f as s,p as c}from"./dist-Cb5RSHSg.js";import{n as l}from"./chart-helpers-DcO3k_vA.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./card-CiiE7QfM.js";import{a as g,c as _,i as v,l as y,n as b,o as x,r as S,s as C,t as w,u as T}from"./data-list-CupF7bjM.js";import{Bn as E,Ds as D,Hn as O,Ln as k,Pr as A,Rn as j,Rs as M,Vn as N,aa as P,sr as F,zn as I}from"./index-BOJzlYiz.js";import{n as L}from"./post-analytics-context-D0Mw-Pmv.js";var R=e(t(),1),z=n(),B=`https://www.google.com/s2/favicons?domain=ghost.org&sz=64`,V=({dataTableHeader:e,data:t,defaultSourceIconUrl:n=B,onSourceClick:r})=>(0,z.jsxs)(w,{children:[e&&(0,z.jsxs)(g,{children:[(0,z.jsx)(v,{children:`Source`}),(0,z.jsx)(v,{children:`Visitors`})]}),(0,z.jsx)(S,{children:t?.map(e=>{let t=!!r,i=e.source?e.source.toLowerCase().replace(/[^a-z0-9]/g,`-`):`direct`;return(0,z.jsxs)(T,{className:`group/row ${t?`cursor-pointer`:``}`,"data-testid":`source-row-${i}`,onClick:t?()=>r(e.source):void 0,children:[(0,z.jsx)(b,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,z.jsx)(x,{className:`group-hover/datalist:max-w-[calc(100%-140px)]`,children:(0,z.jsx)(`div`,{className:`flex items-center space-x-4 overflow-hidden`,children:(0,z.jsx)(`div`,{className:`truncate font-medium`,children:e.linkUrl&&!r?(0,z.jsxs)(`a`,{className:`group/link flex items-center gap-2`,href:e.linkUrl,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{className:`group-hover/link:underline`,children:e.displayName})]}):(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{children:e.displayName})]})})})}),(0,z.jsxs)(C,{children:[(0,z.jsx)(_,{children:s(e.visits)}),(0,z.jsx)(y,{children:c(e.percentage||0)})]})]},e.source)})})]}),H=({data:e,range:t=30,totalVisitors:n=0,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s=B,tableOnly:c=!1,topSourcesLimit:g=10,onSourceClick:_})=>{let{isPostLoading:v}=L(),y=R.useMemo(()=>r({data:e,mode:`visits`,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s}),[e,a,o,s]),b=R.useMemo(()=>i({processedData:y,totalVisitors:n,mode:`visits`}),[y,n]),x=b.slice(0,g),S=`Top sources`,C=`How readers found this post ${t&&` ${l(t)}`}`;if(c){let e=b.slice(0,g),n=b.length>g;return(0,z.jsxs)(`div`,{children:[(0,z.jsx)(V,{data:e,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:_}),n&&(0,z.jsx)(`div`,{className:`mt-4`,children:(0,z.jsxs)(k,{children:[(0,z.jsx)(O,{asChild:!0,children:(0,z.jsxs)(A,{className:`w-full`,size:`sm`,variant:`outline`,children:[`View all (`,b.length,`) `,(0,z.jsx)(D,{size:14})]})}),(0,z.jsxs)(j,{className:`overflow-y-auto pt-0 sm:max-w-[480px]`,children:[(0,z.jsxs)(E,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(N,{children:S}),(0,z.jsx)(I,{children:C})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:b,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:_})})]})]})})]})}return(0,z.jsxs)(h,{className:`group/datalist`,"data-testid":`top-sources-card`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,z.jsxs)(u,{className:`p-0`,children:[(0,z.jsx)(p,{children:S}),(0,z.jsx)(m,{children:C})]}),(0,z.jsx)(M,{className:`mr-2`,children:`Visitors`})]}),(0,z.jsxs)(f,{className:`overflow-hidden`,children:[(0,z.jsx)(`div`,{className:`h-[1px] w-full bg-border`}),v?(0,z.jsx)(F,{lines:5}):x.length>0?(0,z.jsx)(V,{data:x,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:_}):(0,z.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`No sources data available.`})]}),b.length>10&&(0,z.jsx)(d,{children:(0,z.jsxs)(k,{children:[(0,z.jsx)(O,{asChild:!0,children:(0,z.jsxs)(A,{variant:`outline`,children:[`View all `,(0,z.jsx)(P,{})]})}),(0,z.jsxs)(j,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,z.jsxs)(E,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(N,{children:S}),(0,z.jsx)(I,{children:C})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:b,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:_})})]})]})})]})},U={visits:{dataKey:`visits`,label:`Visitors`,color:`var(--chart-blue)`,formatter:s},views:{dataKey:`pageviews`,label:`Pageviews`,color:`var(--chart-teal)`,formatter:s},"bounce-rate":{dataKey:`bounce_rate`,label:`Bounce rate`,color:`var(--chart-purple)`,formatter:c},duration:{dataKey:`avg_session_sec`,label:`Time on page`,color:`var(--chart-orange)`,formatter:o}},W=e=>{if(!e?.length)return{visits:`0`,views:`0`,bounceRate:`0%`,duration:`0s`};let t=e=>{let t=Number(e);return isNaN(t)?0:t},n=e.reduce((e,n)=>e+t(n.visits),0),r=e.reduce((e,n)=>e+t(n.pageviews),0),i=r=>n===0?0:e.reduce((e,i)=>e+t(i[r])*t(i.visits)/n,0),a=i(`bounce_rate`),l=i(`avg_session_sec`);return{visits:s(n),views:s(r),bounceRate:c(a),duration:o(l)}};export{U as n,H as r,W as t};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r}from"./dist-Cb5RSHSg.js";import{o as i,s as a}from"./chart-helpers-DcO3k_vA.js";import{i as o,n as s,r as c,t as l}from"./tabs-l9c7FjzI.js";import{Ei as u,Pr as d}from"./index-BOJzlYiz.js";var f=e(t(),1),p=n(),m=f.forwardRef(({...e},t)=>(0,p.jsx)(l,{ref:t,variant:`kpis`,...e}));m.displayName=`KpiTabs`;var h=f.forwardRef((e,t)=>(0,p.jsx)(c,{ref:t,...e}));h.displayName=`KpiTabsList`;var g=f.forwardRef((e,t)=>(0,p.jsx)(s,{ref:t,...e}));g.displayName=`KpiTabsContent`;var _=({children:e,...t})=>(0,p.jsx)(o,{className:`h-auto`,...t,children:e}),v=({color:e,icon:t,label:n,value:o,diffDirection:s,diffValue:c,className:l,"data-testid":d})=>{let f=t?u[t]:null,m=(0,p.jsxs)(`span`,{className:`flex items-center gap-1.5 transition-all group-hover:text-foreground`,"data-type":`value`,children:[e&&(0,p.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:e}}),f&&(0,p.jsx)(f,{size:16,strokeWidth:1.5}),n]}),h=s&&s!==`hidden`?(0,p.jsx)(i,{className:`mt-0.5`,"data-testid":d?`${d}-diff`:void 0,direction:s,value:c??``}):null;return(0,p.jsx)(a,{className:r(`group`,l),label:m,size:`lg`,trailing:h,value:o,valueTestId:d})},y=f.forwardRef(({variant:e=`dropdown`,className:t,...n},i)=>(0,p.jsx)(d,{ref:i,className:r(`h-auto w-full rounded-none border-x-0 border-t-0 bg-transparent py-5 focus-visible:ring-0`,t),variant:e,...n}));y.displayName=`KpiDropdownButton`;export{_ as n,v as r,y as t};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{S as r,h as i,m as a}from"./hooks-CJepWnbB.js";import{i as o,o as s,r as c,s as l,t as u}from"./command-BrhXIlDr.js";import{t as d}from"./multi-select-combobox-nhCff0_K.js";import{$n as f,Ia as p,Oi as m,Pr as h,br as g,ka as _,os as v,vr as y,xr as b}from"./index-BOJzlYiz.js";import{i as x}from"./filter-sources-FgqoUIL7.js";import{a as S,i as C,n as w,o as T,r as E}from"./labels-DqvSR6JF.js";var D=e(t(),1),O=n(),k=({label:e,onSave:t,onCancel:n,onDelete:i})=>{let[a,o]=(0,D.useState)(e.name),[s,c]=(0,D.useState)(!1),[l,u]=(0,D.useState)(``),[d,f]=(0,D.useState)(!1),[p,m]=(0,D.useState)(!1),g=(0,D.useRef)(null),_=d||p;(0,D.useEffect)(()=>{g.current?.focus(),g.current?.select()},[]);let v=async()=>{if(!a.trim()){u(`Name is required`);return}f(!0);try{await t(e.id,a.trim()),n()}catch(e){u(r(e,`Failed to save label, please try again.`)),f(!1)}},y=e=>{e.key===`Enter`?(e.preventDefault(),v()):e.key===`Escape`&&(e.preventDefault(),_||n())},b=async()=>{m(!0);try{await i(e.id)}catch{m(!1),c(!1)}};return(0,O.jsxs)(`div`,{className:`flex flex-col gap-2 py-1.5`,"data-edit-row":!0,children:[(0,O.jsx)(`input`,{ref:g,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:_,type:`text`,value:a,onChange:e=>{o(e.target.value),u(``)},onKeyDown:y}),l&&(0,O.jsx)(`span`,{className:`text-xs text-destructive`,children:l}),s?(0,O.jsxs)(`div`,{className:`flex items-center gap-1 text-sm`,children:[(0,O.jsx)(`span`,{className:`flex-1 font-semibold`,children:`Delete label?`}),(0,O.jsx)(h,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,O.jsx)(h,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`destructive`,onClick:()=>void b(),children:p?`Deleting...`:`Delete`})]}):(0,O.jsxs)(`div`,{className:`flex items-center`,children:[(0,O.jsx)(h,{className:`h-6 gap-1 px-1.5 text-xs text-red hover:bg-red/5 hover:text-red`,disabled:_,size:`sm`,variant:`ghost`,onClick:()=>c(!0),children:`Delete`}),(0,O.jsxs)(`div`,{className:`ml-auto flex gap-1`,children:[(0,O.jsx)(h,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:n,children:`Cancel`}),(0,O.jsx)(h,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,onClick:()=>void v(),children:d?`Saving...`:`Save`})]})]})]})};function A(e,t){let n=t.trim().toLowerCase();return n?!e.some(e=>e.name.toLowerCase()===n):!1}var j=256,M=120,N=6,P=16,F=({label:e,isSelected:t,showEdit:n,onToggle:r,onEditClick:i})=>(0,O.jsxs)(s,{className:`group`,value:e.slug,onSelect:()=>r(e.slug),children:[(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.name}),n?(0,O.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:e=>{e.stopPropagation(),e.preventDefault(),i()},children:[t&&(0,O.jsx)(v,{className:`absolute size-3 text-primary transition-opacity duration-150 group-hover:opacity-0`}),(0,O.jsx)(p,{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&&(0,O.jsx)(v,{className:`size-4 shrink-0 text-primary`})]}),I=({labels:e,selectedSlugs:t,search:n,onToggle:r,onEdit:i,onDelete:a,onCreate:l,isCreating:u,onSearchClear:d})=>{let[f,p]=(0,D.useState)(null),m=n.trim().toLowerCase(),h=m?e.filter(e=>e.name.toLowerCase().includes(m)):e,g=!!l&&A(e,n),v=!!i,y=async()=>{if(l)try{await l(n.trim())&&d?.()}catch{}},b=async(e,t)=>{i&&await i(e,t)},x=async e=>{a&&(await a(e),p(null))};return(0,O.jsxs)(O.Fragment,{children:[!g&&h.length===0&&(0,O.jsx)(c,{children:`No labels found`}),h.length>0&&(0,O.jsx)(o,{className:`[&_[cmdk-group-heading]]:hidden`,children:h.map(e=>f===e.id?(0,O.jsx)(k,{label:e,onCancel:()=>p(null),onDelete:x,onSave:b},e.id):(0,O.jsx)(F,{isSelected:t.includes(e.slug),label:e,showEdit:v,onEditClick:()=>p(e.id),onToggle:r},e.id))}),g&&(0,O.jsx)(o,{className:`[&_[cmdk-group-heading]]:hidden`,children:(0,O.jsxs)(s,{disabled:u,onSelect:()=>void y(),children:[(0,O.jsx)(_,{className:`size-4`}),u?`Creating...`:`Create "${n.trim()}"`]})})]})},L=({labels:e,onToggle:t})=>(0,O.jsx)(O.Fragment,{children:e.map(e=>(0,O.jsxs)(f,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:n=>{n.stopPropagation(),t(e.slug)},children:[e.name,(0,O.jsx)(m,{className:`size-3`})]},e.id))}),R=({labels:e,optionSource:t,selectedSlugs:n,resolvedSelectedLabels:r,onToggle:i,onCreate:a,isCreating:o,onEdit:s,onDelete:c,placeholder:l})=>{let u=r||n.map(t=>e.find(e=>e.slug===t)).filter(e=>!!e);return(0,O.jsx)(z,{isCreating:o,labels:e,optionSource:t,placeholder:l,selectedLabels:u,selectedSlugs:n,onCreate:a,onDelete:c,onEdit:s,onToggle:i})},z=({labels:e,optionSource:t,selectedLabels:n,selectedSlugs:r,onToggle:i,onCreate:a,isCreating:o,onEdit:s,onDelete:c,placeholder:d=`Search labels...`})=>{let[f,p]=(0,D.useState)(!1),[m,h]=(0,D.useState)(``),g=(0,D.useRef)(null),_=(0,D.useRef)(null),[v,y]=(0,D.useState)(j);(0,D.useLayoutEffect)(()=>{if(!f||!_.current)return;let e=window.innerHeight-_.current.getBoundingClientRect().bottom-N-P;y(Math.max(M,Math.min(j,e)))},[f,r.length]);let b=(0,D.useCallback)(e=>{h(e),t.onSearchChange?.(e)},[t]);return(0,D.useEffect)(()=>{if(!f)return;let e=e=>{_.current&&!_.current.contains(e.target)&&p(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[f]),(0,O.jsxs)(`div`,{ref:_,className:`relative`,children:[(0,O.jsxs)(`div`,{className:`flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-md border border-control-border bg-surface-elevated px-3 py-1 text-control transition-colors focus-within:border-focus-ring focus-within:ring-2 focus-within:ring-focus-ring/25 dark:bg-transparent`,role:`combobox`,onClick:()=>{g.current?.focus(),p(!0)},children:[(0,O.jsx)(L,{labels:n,onToggle:i}),(0,O.jsx)(`input`,{ref:g,className:`min-w-[80px] flex-1 bg-transparent text-control outline-hidden placeholder:text-muted-foreground`,placeholder:n.length===0?d:``,value:m,onChange:e=>{b(e.target.value),f||p(!0)},onFocus:()=>p(!0),onKeyDown:e=>{e.key===`Backspace`&&!m&&r.length>0&&i(r[r.length-1]),e.key===`Escape`&&(p(!1),g.current?.blur())}})]}),f&&(0,O.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:t.isInitialLoad?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,O.jsx)(u,{shouldFilter:!1,children:(0,O.jsx)(l,{className:`overflow-y-auto`,style:{maxHeight:v},children:(0,O.jsx)(I,{isCreating:o,labels:e,search:m,selectedSlugs:r,onCreate:a,onDelete:c,onEdit:s,onSearchClear:()=>b(``),onToggle:i})})})})]})};function B({selectedSlugs:e,onSelectionChange:t,valueSource:n}){let r=x(),o=n??r,[s,c]=(0,D.useState)(``),l=o.useOptions({query:s,selectedValues:e}),u=(0,D.useMemo)(()=>l.options.flatMap(e=>{let t=e.metadata?.id;return typeof t!=`string`&&typeof t!=`number`?[]:[{id:String(t),name:e.label,slug:String(e.value),created_at:``,updated_at:``}]}),[l.options]),d={...l,shouldClientFilter:!1,onSearchChange:c},{mutateAsync:f}=w(),[p,m]=(0,D.useState)(!1),{mutateAsync:h}=C(),{mutateAsync:g}=E(),_=S(),v=T(),y=a(),b=(0,D.useRef)(e);b.current=e;let O=(0,D.useCallback)(e=>{let n=b.current;n.includes(e)?t(n.filter(t=>t!==e)):t([...n,e])},[t]),k=(0,D.useCallback)(e=>{let n=b.current;n.includes(e)||t([...n,e])},[t]),A=(0,D.useCallback)(async e=>{let t=e.trim();if(t){m(!0);try{let e=(await f({name:t}))?.labels?.[0];return e&&k(e.slug),e}catch(e){if(e instanceof i&&e.response?.status===422){let e;try{e=await _(t)}catch{}if(e)return v(),k(e.slug),e}throw y(e),e}finally{m(!1)}}},[f,_,y,v,k]),j=(0,D.useCallback)(async(e,n)=>{let r=n.trim();if(!r)return;let i=u.find(t=>t.id===e),a=(await h({id:e,name:r}))?.labels?.[0];if(i&&a&&i.slug!==a.slug){let e=b.current;e.includes(i.slug)&&t(e.map(e=>e===i.slug?a.slug:e))}},[h,u,t]),M=(0,D.useCallback)(async e=>{let n=u.find(t=>t.id===e);try{await g(e)}catch(e){if(e instanceof i&&e.response?.status===404)v();else throw y(e),e}if(n){let e=b.current;e.includes(n.slug)&&t(e.filter(e=>e!==n.slug))}},[g,y,v,u,t]);return{labels:u,optionSource:d,selectedSlugs:e,resolvedSelectedLabels:e.map(e=>u.find(t=>t.slug===e)).filter(e=>!!e),toggleLabel:O,createLabel:A,editLabel:j,deleteLabel:M,isCreating:p}}var V=({field:e,values:t,onChange:n})=>{let r=B({selectedSlugs:t,onSelectionChange:n,valueSource:e.valueSource}),i=(0,D.useRef)(null),[a,o]=(0,D.useState)(0),c=(0,D.useCallback)(()=>{let e=i.current,t=e?.parentElement;if(e&&t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();o(Math.round(r.left-n.left))}},[]),l=`Select...`;r.resolvedSelectedLabels.length===1?l=r.resolvedSelectedLabels[0].name:r.resolvedSelectedLabels.length>1&&(l=`${r.resolvedSelectedLabels.length} labels`);let[u,f]=(0,D.useState)(null),m=(0,D.useCallback)(({option:e,isSelected:t,onSelect:n})=>{let i=e.metadata?.id,a=typeof i==`string`||typeof i==`number`?String(i):``;return u===a&&!t?(0,O.jsx)(k,{label:{id:a,name:e.label,slug:String(e.value),created_at:``,updated_at:``},onCancel:()=>f(null),onDelete:async e=>{await r.deleteLabel(e),f(null)},onSave:async(e,t)=>{await r.editLabel(e,t),f(null)}},a):(0,O.jsxs)(s,{className:`group`,value:e.label,onSelect:n,children:[(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),t?(0,O.jsx)(v,{className:`size-3 shrink-0 text-primary`}):(0,O.jsx)(`button`,{"aria-label":`Edit label ${e.label}`,className:`relative ml-1 flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground`,type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),f(a)},children:(0,O.jsx)(p,{className:`absolute size-3 translate-x-2 opacity-0 transition-all duration-150 ease-out group-hover:translate-x-0 group-hover:opacity-100`})})]},String(e.value))},[u,r]),x=(0,D.useCallback)(({searchInput:e,clearSearch:t})=>A(r.labels,e)?(0,O.jsx)(`div`,{className:`border-t p-1`,children:(0,O.jsxs)(h,{className:`h-8 w-full justify-start gap-2 px-2 text-sm font-normal`,disabled:r.isCreating,variant:`ghost`,onClick:()=>void(async()=>{try{await r.createLabel(e.trim())&&t()}catch{}})(),children:[(0,O.jsx)(_,{className:`size-4`}),r.isCreating?`Creating...`:`Create "${e.trim()}"`]})}):null,[r]);return(0,O.jsxs)(y,{onOpenChange:e=>{e?c():r.optionSource.onSearchChange?.(``)},children:[(0,O.jsx)(b,{asChild:!0,children:(0,O.jsx)(`button`,{ref:i,className:`flex size-full items-center truncate text-left text-sm`,type:`button`,children:l})}),(0,O.jsx)(g,{align:`start`,alignOffset:a,className:`w-64 p-0`,children:r.optionSource.isInitialLoad?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,O.jsx)(d,{footer:x,i18n:{searchPlaceholder:`Search labels...`,noResultsFound:`No labels found`},optionSource:r.optionSource,renderItem:m,values:t,onChange:n})})]})};export{B as n,R as r,V as t};
@@ -1 +0,0 @@
1
- import"./index-BOJzlYiz.js";
@@ -1 +0,0 @@
1
- import{i as e,n as t,r as n}from"./hooks-CJepWnbB.js";import{_n as r,dn as i,gn as a,ln as o,un as s,vn as c}from"./index-BOJzlYiz.js";var l=[`short_text`,`long_text`,`address`];s(l);var u=65535,d=e=>new TextEncoder().encode(e).length,f=()=>r({error:`Enter text.`}).trim(),p=()=>f().max(255,{error:`Use 255 characters or fewer.`}),m=()=>f().refine(e=>d(e)<=u,{error:`This text is too long to save. Shorten it a little.`}),h=()=>f().max(32,{error:`Use 32 characters or fewer.`}),g=()=>f().regex(/^[A-Za-z]{2}$/,{error:`Enter a 2-letter country code, like US.`}).toUpperCase(),_=e=>f().pipe(c([i(``),e])).optional();function v(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t instanceof o?{value:t}:t]))}function y(e,{error:t}){return{value:a(Object.fromEntries(Object.entries(e).map(([e,t])=>[e,_(t)]))).refine(e=>Object.values(e).some(e=>typeof e==`string`),{error:t}),fields:e}}var b=v({short_text:p(),long_text:m(),address:y({line1:p(),line2:p(),city:p(),state:p(),postal_code:h(),country:g()},{error:`Enter at least one part of the address.`})});b.address.value;function x(e){let t=b[e];return t?.fields?Object.keys(t.fields):null}var S=`.`,C=`custom_fields`;function w(e){let t=`${C}${S}${e.key}`,n=x(e.type);return n?n.map(e=>({column:`${t}${S}${e}`,subField:e})):[{column:t,subField:null}]}function T(e){return e===C||e.startsWith(`${C}${S}`)}var E={short_text:{label:`Short text`,input:`text`},long_text:{label:`Long text`,input:`textarea`},address:{label:`Address`,input:`address`,subFields:{line1:`Address line 1`,line2:`Address line 2`,city:`City`,state:`State`,postal_code:`Postal code`,country:`Country`}}},D=e=>E[e]?.subFields??{},O=l.map(e=>({id:e,...E[e]})),k=e=>O.find(t=>t.id===e)||O[0],A=e=>k(e.type),j=e=>e.flatMap(e=>{let t=D(e.type);return w({key:e.key,type:e.type}).map(({column:n,subField:r})=>({label:r===null?e.name:`${e.name} (${t[r]})`,value:n,type:e.type}))}),M=e=>{let t=x(e);if(!t)return null;let n=D(e);return t.map(e=>({key:e,label:n[e]}))},N=`MemberCustomFieldsResponseType`,P=N,F=n({dataType:N,path:`/members/custom_fields/`}),I=e=>F({...e,searchParams:{filter:`status:[active,archived]`}});e({dataType:N,path:e=>`/members/custom_fields/${e}/`});var L=t({method:`POST`,path:()=>`/members/custom_fields/`,body:e=>({members_custom_fields:[e]}),invalidateQueries:{dataType:N},updateQueries:{dataType:N,emberUpdateType:`skip`,update:(e,t)=>{let n=t;if(!n?.members_custom_fields)return t;let r=e.members_custom_fields.filter(e=>!n.members_custom_fields.some(t=>t.key===e.key));return{...n,members_custom_fields:[...n.members_custom_fields,...r]}}}}),R=t({method:`PUT`,path:e=>`/members/custom_fields/${e.key}/`,body:({key:e,...t})=>({members_custom_fields:[t]}),invalidateQueries:{dataType:N}}),z=t({method:`PUT`,path:()=>`/members/custom_fields/`,body:e=>({members_custom_fields:e.map(({key:e})=>({key:e}))}),updateQueries:{dataType:N,emberUpdateType:`skip`,update:(e,t)=>{let n=t;if(!n?.members_custom_fields)return t;let r=e.members_custom_fields.map(({key:e})=>e);return{...n,members_custom_fields:B(r,n.members_custom_fields)}}}}),B=(e,t)=>{let n=new Map(e.map((e,t)=>[e,t]));return[...t].sort((e,t)=>(n.get(e.key)??1/0)-(n.get(t.key)??1/0))},V=t({method:`DELETE`,path:e=>`/members/custom_fields/${e}/`,invalidateQueries:{dataType:N}});export{P as a,L as c,z as d,A as f,b as h,O as i,V as l,T as m,j as n,F as o,k as p,M as r,I as s,B as t,R as u};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{o as r}from"./framework-provider-CFLwK5uS.js";import{o as i}from"./hooks-CJepWnbB.js";import{n as a}from"./dist-Ndy-PuGN.js";import{n as o,t as s}from"./dist-DMFGvqqU.js";import{t as c}from"./currency-CQsJu8iC.js";import{c as l,l as u,m as d,t as f}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as p}from"./router-provider-CkB_ArLF.js";import{c as m,v as h}from"./dist-Cb5RSHSg.js";import{t as g}from"./box-By_EgGtm.js";import{t as _}from"./container-LiZf3XdY.js";import{t as v}from"./switch-CE2NuMn-.js";import{i as y,n as b,o as x,s as ee,t as S}from"./select-xuZAuDyS.js";import{a as te,i as ne,n as re,o as ie,r as ae,t as oe}from"./breadcrumb-MTj_cKLb.js";import{n as C,t as w}from"./card-CiiE7QfM.js";import{t as se}from"./empty-indicator-WB1WgT9h.js";import{t as T}from"./label-DodDsMzn.js";import{n as ce,o as le,t as E}from"./input-group-DpogNUIt.js";import{t as ue}from"./textarea-d9qEkMOP.js";import{i as de}from"./users-DmGMPfw7.js";import{$n as D,$r as O,A as fe,Bo as pe,D as k,Dn as A,Dr as j,Eo as M,Er as N,F as P,I as me,La as F,Lo as he,Ms as ge,N as _e,O as ve,Or as I,P as ye,Po as be,Pr as L,Qi as xe,Qo as Se,Ri as R,S as Ce,Sr as z,To as we,Tr as B,Ua as Te,Uo as V,Ur as Ee,Ya as De,Yr as H,Zi as Oe,Zr as ke,ai as Ae,ao as je,ar as U,as as Me,b as Ne,co as Pe,cr as W,dr as Fe,eo as Ie,fr as Le,gr as Re,hr as ze,io as Be,j as Ve,jn as He,k as G,ka as Ue,lr as We,m as Ge,mr as Ke,no as qe,oo as Je,or as K,pr as Ye,qa as Xe,ri as Ze,ro as Qe,so as $e,tr as et,va as tt,wr as q,ws as nt,y as rt}from"./index-BOJzlYiz.js";import{t as it}from"./page-header-VLPJfj_d.js";import{a as at}from"./tiers-8iTFjJWg.js";import{r as ot}from"./newsletters-ILsexy-5.js";import{n as J,t as st}from"./use-hash-link-navigation-guard-B9j6HIrV.js";import{f as ct,h as lt,o as ut,r as dt}from"./member-custom-fields-CvGcpaiW.js";import{n as ft,r as pt}from"./label-picker-Cvvbmzb5.js";var Y=e(t(),1),mt=new Set([`active`,`trialing`,`unpaid`,`past_due`]);function ht(e){return(e.subscriptions??[]).some(e=>mt.has(e.status))}function gt(e){return e?`Delete member + Cancel subscription`:`Delete member`}var X=n(),_t=({open:e,onOpenChange:t,member:n,allowLeaveWithUnsavedChanges:r})=>{let i=p(),o=k(),[s,c]=Y.useState(!1);Y.useEffect(()=>{e&&c(!1)},[e]);let l=ht(n),u=n.email||n.name||`this member`,d=async()=>{try{let e=l&&s;await o.mutateAsync({id:n.id,cancel:e}),a.success(e?`${u} was deleted and their Stripe subscription was cancelled.`:`${u} was deleted.`),t(!1),r(),i(`/members`)}catch{a.error(`Couldn’t delete the member. Please try again.`)}};return(0,X.jsx)(z,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,X.jsxs)(q,{"data-testid":`delete-member-modal`,children:[(0,X.jsxs)(j,{children:[(0,X.jsx)(I,{children:`Delete member account`}),(0,X.jsxs)(B,{children:[`Permanently delete `,(0,X.jsx)(`strong`,{children:u}),` from Ghost.`]})]}),l&&(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium`,children:`Also cancel subscription in Stripe`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If disabled, the member’s premium subscription will continue`})]}),(0,X.jsx)(v,{"aria-label":`Also cancel subscription in Stripe`,checked:s,"data-testid":`delete-member-cancel-stripe`,disabled:o.isPending,onCheckedChange:c})]}),(0,X.jsxs)(N,{children:[(0,X.jsx)(L,{"data-testid":`cancel-delete-member`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(L,{"data-testid":`confirm-delete-member`,disabled:o.isPending,variant:`destructive`,onClick:()=>void d(),children:o.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Deleting`})]}):gt(s&&l)})]})]})})},vt=`Disabled from member settings`,yt=({open:e,onOpenChange:t,member:n})=>{let i=r(),o=ve(),[s,c]=Y.useState(!1);Y.useEffect(()=>{e&&c(!1)},[e]);let l=n.name||n.email||`this member`,u=async()=>{try{await o.mutateAsync({id:n.id,reason:vt,hideComments:s})}catch{a.error(`Couldn’t disable commenting. Please try again.`);return}a.success(`Commenting has been disabled for ${l}.`),t(!1),i.invalidateQueries({queryKey:[`MembersResponseType`]})};return(0,X.jsx)(z,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,X.jsxs)(q,{"data-testid":`disable-commenting-modal`,children:[(0,X.jsxs)(j,{children:[(0,X.jsx)(I,{children:`Disable commenting`}),(0,X.jsxs)(B,{children:[(0,X.jsx)(`strong`,{children:l}),` won’t be able to comment in the future. You can re-enable commenting anytime.`]})]}),(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:(0,X.jsx)(`h4`,{className:`text-sm font-medium`,children:`Hide all previous comments`})}),(0,X.jsx)(v,{"aria-label":`Hide all previous comments`,checked:s,"data-testid":`disable-commenting-hide-comments`,disabled:o.isPending,onCheckedChange:c})]}),(0,X.jsxs)(N,{children:[(0,X.jsx)(L,{"data-testid":`cancel-disable-commenting`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(L,{"data-testid":`confirm-disable-commenting`,disabled:o.isPending,onClick:()=>void u(),children:o.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Disabling`})]}):`Disable commenting`})]})]})})},bt=({open:e,onOpenChange:t,memberId:n})=>{let i=r();Y.useEffect(()=>{e&&i.removeQueries({queryKey:[`MemberSigninUrlResponseType`]})},[e,i]);let{data:o,isFetching:s,isError:c}=Ne(n,{enabled:e,defaultErrorHandler:!1}),l=o?.url??``,u=c||!s&&!c&&!l,[d,f]=Y.useState(!1),p=Y.useRef(null),m=Y.useCallback(()=>{p.current!==null&&(clearTimeout(p.current),p.current=null)},[]);Y.useEffect(()=>{e||(m(),f(!1))},[e,m]),Y.useEffect(()=>m,[m]);let h=async()=>{try{await navigator.clipboard.writeText(l),f(!0),m(),p.current=setTimeout(()=>{f(!1),p.current=null},1e3)}catch{a.error(`Couldn’t copy the impersonation link`)}};return(0,X.jsx)(z,{open:e,onOpenChange:t,children:(0,X.jsxs)(q,{"data-testid":`impersonate-modal`,children:[(0,X.jsxs)(j,{children:[(0,X.jsx)(I,{children:`Impersonate member`}),(0,X.jsx)(B,{children:`A single-use signin link that works for 24 hours. Anyone with the link can sign in as this member.`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(T,{htmlFor:`member-signin-url`,children:`Signin link`}),(0,X.jsx)(W,{"data-testid":`member-signin-url`,id:`member-signin-url`,value:s?`Generating link…`:u?`Failed to generate link`:l,readOnly:!0})]}),(0,X.jsxs)(N,{children:[(0,X.jsx)(L,{variant:`outline`,onClick:()=>t(!1),children:`Close`}),(0,X.jsx)(L,{disabled:s||u||!l,onClick:()=>void h(),children:s?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Generating link`})]}):d?`Copied`:`Copy link`})]})]})})},xt=({open:e,onOpenChange:t,member:n})=>{let r=ye(),i=n.name||n.email||`This member`,o=async()=>{try{await r.mutateAsync({id:n.id}),a.success(`${i} has been signed out from all devices.`),t(!1)}catch{a.error(`Couldn’t sign the member out. Please try again.`)}};return(0,X.jsx)(We,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(Le,{"data-testid":`logout-member-modal`,children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(Re,{children:`Sign out member from all devices?`}),(0,X.jsxs)(Ye,{children:[(0,X.jsx)(`strong`,{children:i}),` will be signed out of all active sessions, and will need to sign in again upon return.`]})]}),(0,X.jsxs)(Ke,{children:[(0,X.jsx)(Fe,{disabled:r.isPending,children:`Cancel`}),(0,X.jsx)(L,{"data-testid":`confirm-logout-member`,disabled:r.isPending,variant:`destructive`,onClick:()=>void o(),children:r.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Signing out`})]}):`Sign out`})]})]})})};function St(e){return e.can_comment===!1}function Ct(e){return St(e)?`Enable commenting`:`Disable commenting`}var wt=({member:e,allowLeaveWithUnsavedChanges:t})=>{let n=r(),{data:o}=i(),[s,c]=Y.useState(!1),[l,u]=Y.useState(!1),[d,f]=Y.useState(!1),[p,m]=Y.useState(!1),h=Ve(),g=P(),_=h.isPending||h.isSuccess&&g,v=St(e),y=Ct(e),b=e.name||e.email||`this member`;if(!o||!de(o))return null;let x=async()=>{if(!v){f(!0);return}try{await h.mutateAsync({id:e.id}),a.success(`Commenting has been enabled for ${b}.`)}catch{a.error(`Couldn’t enable commenting. Please try again.`);return}n.invalidateQueries({queryKey:[`MembersResponseType`]})};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(H,{children:[(0,X.jsx)(Ae,{asChild:!0,children:(0,X.jsx)(L,{"aria-label":`Actions`,className:`size-(--control-height)`,"data-testid":`member-actions`,size:`icon`,variant:`outline`,children:(0,X.jsx)(pe,{size:16})})}),(0,X.jsxs)(ke,{align:`end`,children:[(0,X.jsx)(O,{"data-testid":`member-actions-impersonate`,onSelect:()=>c(!0),children:`Impersonate`}),(0,X.jsx)(O,{"data-testid":`member-actions-logout`,onSelect:()=>u(!0),children:`Sign out of all devices`}),(0,X.jsx)(O,{"data-testid":`member-actions-commenting`,disabled:_,onSelect:()=>void x(),children:y}),(0,X.jsx)(Ze,{}),(0,X.jsx)(O,{className:`text-destructive focus:text-destructive`,"data-testid":`member-actions-delete`,onSelect:()=>m(!0),children:`Delete member`})]})]}),(0,X.jsx)(bt,{memberId:e.id,open:s,onOpenChange:c}),(0,X.jsx)(xt,{member:e,open:l,onOpenChange:u}),(0,X.jsx)(yt,{member:e,open:d,onOpenChange:f}),(0,X.jsx)(_t,{allowLeaveWithUnsavedChanges:t,member:e,open:p,onOpenChange:m})]})},Z=e(h(),1);function Tt(e){return e?/^(https?:\/\/|\/|#\/)/i.test(e):!1}var Et=new Set([`bif`,`clp`,`djf`,`gnf`,`jpy`,`kmf`,`krw`,`mga`,`pyg`,`rwf`,`ugx`,`vnd`,`vuv`,`xaf`,`xof`,`xpf`]);function Dt(e,t){let n=Et.has(t.toLowerCase())?e:e/100,r=n%1==0;try{return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:t.toUpperCase(),minimumFractionDigits:r?0:2,maximumFractionDigits:r?0:2}).format(n)}catch{return`${n}`}}function Ot(e){return e?.trim()||null}function kt(e){let t;return e.type===`login_event`&&(t=`logged-in`),e.type===`payment_event`&&(t=`subscriptions`),e.type===`newsletter_event`&&(t=e.data.subscribed?`subscribed-to-email`:`unsubscribed-from-email`),e.type===`subscription_event`&&(t=`subscriptions`,e.data.type===`canceled`&&(t=`canceled-subscription`)),(e.type===`signup_event`||e.type===`subscription_event`&&e.data.type===`created`&&e.data.signup)&&(t=`signed-up`),e.type===`email_opened_event`&&(t=`opened-email`),(e.type===`email_sent_event`||e.type===`automated_email_sent_event`)&&(t=`sent-email`),e.type===`email_delivered_event`&&(t=`received-email`),e.type===`email_failed_event`&&(t=`email-delivery-failed`),e.type===`email_complaint_event`&&(t=`email-delivery-spam`),e.type===`comment_event`&&(t=`comment`),(e.type===`click_event`||e.type===`aggregated_click_event`)&&(t=`click`),e.type===`feedback_event`&&(t=e.data.score===1?`more-like-this`:`less-like-this`),e.type===`donation_event`&&(t=`subscriptions`),(e.type===`gift_purchase_event`||e.type===`gift_redemption_event`||e.type===`gift_ended_event`)&&(t=`gift`),e.type===`email_change_event`&&(t=`email-changed`),`event-${t}`}function At(e,t){if(e.type===`signup_event`||e.type===`subscription_event`&&e.data.type===`created`&&e.data.signup)return`signed up`;if(e.type===`login_event`)return`logged in`;if(e.type===`payment_event`)return`made payment`;if(e.type===`newsletter_event`){let n=e.data.newsletter,r=t&&n?.name?n.name:`newsletter`;return e.data.subscribed?`subscribed to ${r}`:`unsubscribed from ${r}`}if(e.type===`subscription_event`){let t=e.data.type;return t===`created`?`started paid subscription`:t===`canceled`?`canceled paid subscription`:t===`reactivated`?`reactivated paid subscription`:t===`expired`?`ended paid subscription`:`changed paid subscription`}if(e.type===`email_opened_event`)return`opened email`;if(e.type===`email_sent_event`)return`sent email`;if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source!==`automation_action_revision`)return`received welcome email (${(t?.slug||``).includes(`paid`)?`Paid`:`Free`})`;let n=Ot(t.subject);return n?`received automated email: ${n}`:`received automated email`}if(e.type===`email_delivered_event`)return`received email`;if(e.type===`email_failed_event`)return`bounced email`;if(e.type===`email_complaint_event`)return`email flagged as spam`;if(e.type===`comment_event`)return e.data.parent?`replied to comment`:`commented`;if(e.type===`click_event`)return`clicked link in email`;if(e.type===`aggregated_click_event`){let t=e.data.count?.clicks??1;return t<=1?`clicked link in email`:`clicked ${t} links in email`}if(e.type===`feedback_event`)return e.data.score===1?`more like this`:`less like this`;if(e.type===`email_change_event`)return e.data.from_email&&e.data.to_email?`Email address changed from ${e.data.from_email} to ${e.data.to_email}`:`Email address changed`;if(e.type===`donation_event`)return`Made a one-time payment`;if(e.type===`gift_purchase_event`){let t=e.data.amount,n=e.data.currency,r=e.data.tier_name,i=e.data.duration,a=e.data.cadence;return typeof t==`number`&&n&&r&&typeof i==`number`&&a?`Purchased gift subscription for ${Dt(t,n)} (${r}, ${i} ${i===1?a:`${a}s`})`:`Purchased gift subscription`}if(e.type===`gift_redemption_event`)return`started gift subscription`;if(e.type===`gift_ended_event`)return`gift subscription expired`}function jt(e,t){if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source===`automation_action_revision`){let e=Ot(t.subject);return e?`received automated email: ${e}`:`received automated email`}}return At(e,t)}function Mt(e){if(e.type===`signup_event`||e.type===`subscription_event`||e.type===`donation_event`){let t=e.data.attribution;if(t?.title)return t.title}if(e.type===`comment_event`||e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.title)return t.title}return``}function Nt(e){let t=e.data.attribution;return t?.referrer_source?{name:t.referrer_source,url:t.referrer_url??null}:null}function Pt(e,t){if(e.type===`signup_event`&&t.paidMembersEnabled){let t=e.data.created_with_status;return t&&t!==`free`?null:`Free`}if(e.type===`gift_redemption_event`)return e.data.tier_name??void 0}function Ft(e){if(e.type===`click_event`)return e.data.link?.to}function It(e){if(e.type===`comment_event`||e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.url)return t.url}if(e.type===`signup_event`||e.type===`subscription_event`||e.type===`donation_event`){let t=e.data.attribution;if(t?.url)return t.url}}function Lt(e){if(e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.id)return`#/posts/analytics/${t.id}`}if((e.type===`signup_event`||e.type===`subscription_event`)&&e.data.attribution_type===`post`&&e.data.attribution_id)return`#/posts/analytics/${e.data.attribution_id}`}function Rt(e,t){let n=Ot(e.data.member?.name),r=e.data.member?n||e.data.member.email||``:e.data.name||e.data.email||``,i=e.data.member?{...e.data.member,name:n??void 0}:e.data.member;return{id:e.data.id,memberId:e.data.member_id??e.data.member?.id,member:i,emailId:e.data.email_id,email:e.data.email,icon:kt(e),subject:r,action:At(e,t.hasMultipleNewsletters),actionTitle:jt(e,t.hasMultipleNewsletters),join:`–`,object:Mt(e),source:Nt(e),info:Pt(e,t),description:Ft(e),url:It(e),route:Lt(e),timestamp:e.data.created_at}}var zt=({iconName:e})=>{let t={className:`shrink-0 text-muted-foreground`,size:16};switch(e){case`event-signed-up`:return(0,X.jsx)(R,{...t});case`event-logged-in`:return(0,X.jsx)(Pe,{...t});case`event-subscriptions`:return(0,X.jsx)(V,{...t});case`event-canceled-subscription`:return(0,X.jsx)(Se,{...t});case`event-subscribed-to-email`:return(0,X.jsx)(je,{...t});case`event-unsubscribed-from-email`:return(0,X.jsx)($e,{...t});case`event-opened-email`:return(0,X.jsx)(Je,{...t});case`event-received-email`:return(0,X.jsx)(qe,{...t});case`event-sent-email`:return(0,X.jsx)(tt,{...t});case`event-email-delivery-failed`:return(0,X.jsx)(Qe,{...t});case`event-email-delivery-spam`:return(0,X.jsx)(Be,{...t});case`event-email-changed`:return(0,X.jsx)(nt,{...t});case`event-comment`:return(0,X.jsx)(Xe,{...t});case`event-click`:return(0,X.jsx)(Te,{...t});case`event-more-like-this`:return(0,X.jsx)(Oe,{...t});case`event-less-like-this`:return(0,X.jsx)(xe,{...t});case`event-gift`:return(0,X.jsx)(M,{...t});default:return(0,X.jsx)(ge,{...t})}},Bt=({memberId:e})=>(0,X.jsx)(`a`,{className:`block pt-3 font-medium text-primary hover:underline`,"data-testid":`member-activity-view-all`,href:`#/members-activity?member=${e}`,children:`View all member activity →`}),Vt=`All events related to this member will be shown here.`,Ht=e=>e?e.charAt(0).toUpperCase()+e.slice(1):``;function Ut(e){if(e&&typeof e==`object`){let t=e.subject;return t?`“${t}”`:`Email`}}var Wt=({event:e})=>{if(!e.action)return null;let t=Ut(e.email),n=e.object&&(e.route||Tt(e.url)),r=!n&&t,i=e.timestamp?(0,Z.default)(e.timestamp).fromNow():`—`;return(0,X.jsxs)(`div`,{className:`flex items-start gap-3 py-3`,"data-testid":`member-activity-event`,children:[(0,X.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-muted`,children:(0,X.jsx)(zt,{iconName:e.icon})}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:[(0,X.jsxs)(`div`,{className:`text-sm leading-snug`,children:[(0,X.jsx)(`span`,{"data-testid":`member-activity-action`,children:Ht(e.action)}),e.info&&(0,X.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,e.info,`)`]}),n&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),e.route?(0,X.jsx)(`a`,{className:`hover:underline`,href:e.route,children:e.object}):(0,X.jsx)(`a`,{className:`hover:underline`,href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:e.object})]}),r&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:t})]})]}),e.description&&(0,X.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.description}),(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i})]})]})},Gt=({memberId:e,hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})=>{let{data:i,isLoading:a}=_e(e??``,{limit:`5`,enabled:!!e}),o=(i?.events??[]).map(e=>Rt(e,{hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})),s=new Set;return e?(0,X.jsxs)(`section`,{"aria-labelledby":`member-activity-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-activity-heading`,children:`Activity`}),(0,X.jsx)(w,{children:(0,X.jsxs)(C,{className:`pt-3`,children:[a?(0,X.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,X.jsx)(K,{className:`h-10`}),(0,X.jsx)(K,{className:`h-10`}),(0,X.jsx)(K,{className:`h-10`})]}):o.length===0?(0,X.jsx)(`p`,{className:`py-4 text-center text-sm text-muted-foreground`,"data-testid":`member-activity-empty`,children:`No activity yet`}):(0,X.jsx)(`div`,{className:`divide-y divide-border`,children:o.map(e=>{let t=e.id||`${e.timestamp??`?`}-${e.icon}-${e.action}`,n=t,r=1;for(;s.has(n);)n=`${t}#${r}`,r+=1;return s.add(n),(0,X.jsx)(Wt,{event:e},n)})}),!a&&o.length>0&&(0,X.jsx)(Bt,{memberId:e})]})})]}):(0,X.jsxs)(`section`,{"aria-labelledby":`member-activity-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-activity-heading`,children:`Activity`}),(0,X.jsx)(w,{children:(0,X.jsx)(C,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(se,{description:Vt,title:`Activity`,children:(0,X.jsx)(ge,{})})})})})]})},Kt=dt(`address`)??[],qt=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function Q(e){return{name:(e.name??``).trim(),email:(e.email??``).trim(),note:e.note??``,labels:(e.labels??[]).map(e=>({name:e.name,slug:e.slug})).sort((e,t)=>e.slug<t.slug?-1:+(e.slug>t.slug)),newsletters:(e.newsletters??[]).map(e=>e.id).sort()}}function Jt(e){let t={};for(let[n,r]of Object.entries(e??{}))if(typeof r==`string`&&r.trim()!==``)t[n]=r.trim();else if(typeof r==`object`&&r&&!Array.isArray(r)){let e=Xt(r);e&&(t[n]=e)}return t}function Yt(e){let t={};for(let{key:n}of Kt){let r=e[n];typeof r==`string`&&(t[n]=r.trim())}return Object.values(t).some(e=>e!==``)?t:void 0}function Xt(e){let t={};for(let{key:n}of Kt){let r=e[n];typeof r==`string`&&r.trim()!==``&&(t[n]=r.trim())}return Object.keys(t).length?t:void 0}function Zt(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t].sort()}function Qt(e){return qt.test(e.trim())}function $t(e,t){return t?e.trim()===``?`Email is required.`:Qt(e)?null:`Invalid email.`:null}function en(e){if(!e?.suppressed)return null;let t=e.info;if(!t)return{label:null};let{reason:n,timestamp:r}=t,i=(0,Z.default)(new Date(r)).format(`D MMM YYYY`);switch(n){case`fail`:return{reason:n,label:`Bounced on ${i}`};case`spam`:return{reason:n,label:`Flagged as spam on ${i}`};default:return{reason:n,label:`Email disabled on ${i}`}}}function tn(e){return e?e.filter(e=>e.subscribe_on_signup===!0&&e.visibility===`members`).map(e=>e.id):[]}function nn(e){return e!==`disabled`}function rn(e){return 500-[...e].length}function an(e,t,n){let r=dn(t),i={id:e,name:r.name,email:r.email,note:r.note,labels:r.labels};return s(r.newsletters,n.newsletters)||(i.newsletters=r.newsletters.map(e=>({id:e}))),i}function on(e){return typeof e==`string`?e.trim()||void 0:Yt(e)}function sn(e,t,n){return{id:e,custom_fields:{[t]:on(n)??null}}}function cn(e,t){let n={};for(let r of t){let t=e[r.key],i=t===void 0?void 0:on(t);if(i===void 0)continue;let a=lt[r.type];if(!a)continue;let o=a.value.safeParse(i);if(!o.success)for(let e of o.error.issues){let t=[r.key,...e.path].join(`.`);n[t]??=e.message}}return n}function ln(e){let t=e?.data,n={};for(let e of t?.errors??[])e.property?.startsWith(`custom_fields.`)&&(n[e.property.slice(14)]=e.context||e.message||`Invalid value.`);return Object.keys(n).length?n:void 0}function un(e,t){return e.map(e=>t.get(e)??{name:e,slug:e})}function dn(e){return{name:e.name.trim(),email:e.email.trim(),note:e.note,labels:e.labels,newsletters:e.newsletters}}function fn(e,t){return!e||!!t&&s(dn(e),t)}function pn(e){if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function mn(e){let t=pn(e);return t?t.country_code===`US`&&t.region?`${t.region}, US`:t.country||`Unknown location`:`Unknown location`}function hn(e){let t=[e.state,e.postal_code].filter(Boolean).join(` `);return[e.line1,e.line2,e.city,t,e.country].filter(Boolean).join(`, `)}function gn(e){let t=e?.referrer_source;return!t||t===`Created manually`?null:t}var _n=({message:e})=>e?(0,X.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:e}):null,vn=({inputId:e,value:t,errors:n,disabled:r,onChange:i})=>(0,X.jsx)(`div`,{className:`grid gap-x-4 gap-y-3 md:grid-cols-2`,children:Kt.map(({key:a,label:o})=>{let s=`${e}-${a}`,c=n?.[a];return(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(T,{htmlFor:s,children:o}),(0,X.jsx)(W,{"aria-invalid":c?!0:void 0,disabled:r,id:s,value:t[a]??``,onChange:e=>i({...t,[a]:e.target.value})}),(0,X.jsx)(_n,{message:c})]},a)})});function yn(e){return null}var bn=({field:e,inputId:t,value:n,errors:r,disabled:i,onChange:a})=>{let o=r?.[``],{input:s}=ct(e);switch(s){case`text`:return(0,X.jsx)(W,{"aria-invalid":o?!0:void 0,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`textarea`:return(0,X.jsx)(ue,{"aria-invalid":o?!0:void 0,className:`max-w-full resize-y`,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`address`:return(0,X.jsx)(vn,{disabled:i,errors:r,inputId:t,value:typeof n==`object`&&n?n:{},onChange:a});default:return yn(s)}},xn=({memberId:e,field:t,initialValue:n,onClose:r})=>{let i=ct(t).input===`address`,[o,c]=Y.useState(n??(i?{}:``)),[l,u]=Y.useState(!1),[d,f]=Y.useState(),p=G(),m=cn({[t.key]:o},[t]),h={...l?m:{},...d},g=Object.fromEntries(Object.entries(h).map(([e,n])=>[e===t.key?``:e.slice(t.key.length+1),n])),_=`member-custom-field-${t.key}`,v=!s(Jt({[t.key]:o}),Jt({[t.key]:n}));return(0,X.jsx)(z,{open:!0,onOpenChange:e=>{!e&&!p.isPending&&r()},children:(0,X.jsxs)(q,{"data-testid":`member-custom-field-edit-modal`,onEscapeKeyDown:e=>{(v||p.isPending)&&e.preventDefault()},onInteractOutside:e=>{(v||p.isPending)&&e.preventDefault()},children:[(0,X.jsx)(j,{children:(0,X.jsx)(I,{children:t.name})}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[!i&&(0,X.jsx)(T,{className:`sr-only`,htmlFor:_,children:t.name}),(0,X.jsx)(bn,{disabled:p.isPending,errors:g,field:t,inputId:_,value:o,onChange:e=>{f(void 0),c(e)}}),(0,X.jsx)(_n,{message:g[``]})]}),(0,X.jsxs)(N,{children:[(0,X.jsx)(L,{disabled:p.isPending,variant:`outline`,onClick:r,children:`Cancel`}),(0,X.jsx)(L,{className:`min-w-16`,disabled:p.isPending,onClick:()=>{if(!p.isPending){if(!v){r();return}if(Object.keys(m).length>0){u(!0);return}p.mutate(sn(e,t.key,o),{onSuccess:()=>{a.success(`${t.name} saved`),r()},onError:e=>{let n=ln(e);f(n),n||a.error(`${t.name} couldn’t be saved`)}})}},children:p.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):`Save`})]})]})})};function Sn(e){return e===void 0?null:typeof e==`string`?e:hn(e)||null}var Cn=({memberId:e,customFields:t,disabled:n})=>{let{data:r,isLoading:i}=ut(),a=r?.members_custom_fields??[],o=Jt(t),[s,c]=Y.useState(null);return i||a.length===0?null:(0,X.jsxs)(`section`,{"aria-labelledby":`member-custom-fields-heading`,className:`flex flex-col gap-3`,"data-testid":`member-custom-fields-field`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-custom-fields-heading`,children:`Custom fields`}),(0,X.jsx)(w,{children:(0,X.jsx)(C,{className:`px-6 py-4`,children:(0,X.jsx)(`ul`,{children:a.map(e=>{let t=Sn(o[e.key]);return(0,X.jsx)(`li`,{className:`border-b border-border transition-colors last:border-b-0 hover:border-b-transparent [&:has(+li:hover)]:border-b-transparent`,children:(0,X.jsxs)(`button`,{"aria-label":t?`Edit ${e.name}: ${t}`:`Edit ${e.name}`,className:`group -mx-3 flex w-[calc(100%+1.5rem)] items-center justify-between gap-4 rounded-md p-3 text-left transition-colors hover:bg-table-row-hover disabled:cursor-not-allowed disabled:opacity-50`,disabled:n,type:`button`,onClick:()=>{window.getSelection()?.toString()||c(e)},children:[(0,X.jsxs)(`span`,{className:`min-w-0`,children:[(0,X.jsx)(`span`,{className:`block text-sm text-muted-foreground`,children:e.name}),t?(0,X.jsx)(`span`,{className:`block break-words select-text`,children:t}):(0,X.jsx)(`span`,{className:`block text-muted-foreground`,children:`–`})]}),(0,X.jsx)(F,{"aria-hidden":`true`,className:`shrink-0 text-muted-foreground opacity-0 transition-all group-hover:opacity-100 group-focus-visible:opacity-100`,size:16})]})},e.key)})})})}),s&&(0,X.jsx)(xn,{field:s,initialValue:o[s.key],memberId:e,onClose:()=>c(null)},s.key)]})},wn=({labels:e,disabled:t,onChange:n})=>{let r=e.map(e=>e.slug),i=Y.useRef(e);i.current=e;let a=Y.useRef(new Map),o=e=>{for(let t of e)a.current.set(t.slug,{name:t.name,slug:t.slug})};o(e);let s=ft({selectedSlugs:r,onSelectionChange:e=>n(un(e,a.current))});o(s.labels);let c=async e=>{let t=await s.createLabel(e);if(t){let e={name:t.name,slug:t.slug};a.current.set(t.slug,e),n([...i.current.filter(e=>e.slug!==t.slug),e])}return t};return(0,X.jsx)(`div`,{className:t?`pointer-events-none opacity-60`:void 0,"data-testid":`member-labels-field`,...t?{inert:``}:{},children:(0,X.jsx)(pt,{isCreating:s.isCreating,labels:s.labels,optionSource:s.optionSource,placeholder:``,resolvedSelectedLabels:s.resolvedSelectedLabels,selectedSlugs:r,onCreate:c,onDelete:s.deleteLabel,onEdit:s.editLabel,onToggle:s.toggleLabel})})},Tn=({draft:e,emailError:t,disabled:n,onChange:r,onEmailBlur:i,onNameBlur:a})=>{let o=rn(e.note),s=500-o,c=o<0?`text-destructive`:s>=500*.8?`text-state-warning`:`text-state-success`;return(0,X.jsxs)(`div`,{className:`grid items-stretch gap-6 md:grid-cols-2`,"data-testid":`member-detail-form`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(T,{htmlFor:`member-name`,children:`Name`}),(0,X.jsx)(W,{disabled:n,id:`member-name`,value:e.name,onBlur:a,onChange:e=>r({name:e.target.value})})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(T,{htmlFor:`member-email`,children:`Email`}),(0,X.jsx)(W,{"aria-invalid":!!t,disabled:n,id:`member-email`,type:`email`,value:e.email,onBlur:i,onChange:e=>r({email:e.target.value})}),t&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:t})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(T,{children:`Labels`}),(0,X.jsx)(wn,{disabled:n,labels:e.labels,onChange:e=>r({labels:e})})]})]}),(0,X.jsxs)(`div`,{className:`flex min-h-0 flex-col gap-1.5`,children:[(0,X.jsxs)(T,{htmlFor:`member-note`,children:[`Note `,(0,X.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(not visible to member)`})]}),(0,X.jsxs)(E,{className:`flex-1`,children:[(0,X.jsx)(le,{className:`h-full`,disabled:n,id:`member-note`,value:e.note,onChange:e=>r({note:e.target.value})}),(0,X.jsx)(ce,{align:`block-end`,className:`justify-end`,children:(0,X.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Maximum: `,(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:500}),` characters. You’ve used`,` `,(0,X.jsx)(`span`,{className:m(`font-semibold`,c),children:s})]})})]})]})]})},En=e=>Z.default.utc(e).format(`D MMM YYYY`),$=({icon:e,children:t})=>(0,X.jsxs)(`p`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e}),(0,X.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]}),Dn=e=>e.split(` `)[0]||``,On=({member:e,draftName:t,draftEmail:n,engagementEnabled:r})=>{let i=(t??e?.name??``).trim(),a=(n??e?.email??``).trim(),o=i||a||`New member`,s=!e;return(0,X.jsxs)(`aside`,{className:`flex w-full shrink-0 flex-col gap-6 lg:w-80`,"data-testid":`member-detail-sidebar`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,X.jsx)(et,{className:`size-12 min-w-12 [&_span]:text-lg`,email:a||void 0,name:i||void 0,src:e?.avatar_image}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`h2`,{className:`truncate text-xl font-semibold`,children:o}),i&&a&&(0,X.jsx)(`a`,{className:`block truncate text-muted-foreground hover:underline`,href:`mailto:${a}`,children:a}),!i&&a&&(0,X.jsx)(`span`,{className:`block truncate text-muted-foreground`,children:a})]})]}),!s&&e&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 text-sm`,children:[(0,X.jsx)($,{icon:(0,X.jsx)(Ie,{size:16}),children:(0,X.jsx)(`span`,{"data-testid":`member-detail-location`,children:mn(e.geolocation)})}),(0,X.jsx)($,{icon:(0,X.jsx)(he,{size:16}),children:e.last_seen_at?`Last seen on ${En(e.last_seen_at)}`:`Not seen yet`}),e.can_comment===!1&&(0,X.jsx)($,{icon:(0,X.jsx)(De,{size:16}),children:`Comments disabled`})]}),(0,X.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 text-sm`,children:[(0,X.jsx)(`h3`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Signup info`}),(0,X.jsxs)($,{icon:(0,X.jsx)(R,{size:16}),children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:En(e.created_at)})]}),(()=>{let t=gn(e.attribution);return t?(0,X.jsxs)($,{icon:(0,X.jsx)(we,{size:16}),children:[`Source — `,(0,X.jsx)(`span`,{className:`text-foreground`,title:t,children:t})]}):null})(),e.attribution?.title&&(0,X.jsxs)($,{icon:(0,X.jsx)(be,{size:16}),children:[`Page — `,Tt(e.attribution.url)?(0,X.jsx)(`a`,{className:`truncate text-foreground hover:underline`,href:e.attribution.url,rel:`noopener noreferrer`,target:`_blank`,title:e.attribution.title,children:e.attribution.title}):(0,X.jsx)(`span`,{className:`truncate text-foreground`,title:e.attribution.title,children:e.attribution.title})]})]}),r&&(0,X.jsxs)(`section`,{className:`mt-4 flex flex-col gap-3 text-sm`,"data-testid":`member-detail-engagement`,children:[(0,X.jsx)(`h4`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Engagement`}),(e.email_count??0)===0?(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:i?`We’ll show ${Dn(i)}’s email stats here once they receive their first newsletter.`:`We’ll show this member’s email stats here once they receive their first newsletter.`}):(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails received`}),(0,X.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_count})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails opened`}),(0,X.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_opened_count??0})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Average open rate`}),e.email_open_rate===null||e.email_open_rate===void 0?(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`This metric is calculated once a member has received 5 newsletters.`}):(0,X.jsxs)(`p`,{className:`text-2xl font-semibold`,children:[e.email_open_rate,(0,X.jsx)(`span`,{className:`text-base font-normal text-muted-foreground`,children:`%`})]})]})]})]})]})]})},kn=({memberId:e,emailSuppression:t,subscribedIds:n,disabled:r,onChange:i})=>{let o=e?en(t):null,s=me(),{data:c,isLoading:l}=ot({searchParams:{filter:`status:active`,limit:`50`}}),u=c?.newsletters??[],d=P(),f=s.isPending||s.isSuccess&&d;return!o&&(l||u.length===0)?null:(0,X.jsxs)(`section`,{"aria-labelledby":`member-newsletters-heading`,className:`flex flex-col gap-3`,"data-testid":`member-newsletters-field`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-newsletters-heading`,children:`Newsletters`}),(0,X.jsx)(w,{children:(0,X.jsx)(C,{className:`p-6`,children:o?(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,"data-testid":`member-suppression-banner`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,X.jsx)(Qe,{className:`mt-0.5 shrink-0 text-muted-foreground`,size:20}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`font-medium`,children:`Email disabled`}),o.label&&(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:o.label}),(0,X.jsx)(`a`,{className:`text-sm text-muted-foreground hover:underline`,href:`https://ghost.org/help/disabled-emails`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]}),(0,X.jsx)(L,{disabled:r||f,onClick:()=>{e&&s.mutate({id:e},{onSuccess:()=>a.success(`Email re-enabled successfully`),onError:()=>a.error(`Failed to re-enable email. Please try again.`)})},children:f?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Re-enabling email`})]}):`Re-enable email`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`ul`,{className:`divide-y divide-border`,children:u.map(e=>{let t=n.includes(e.id);return(0,X.jsxs)(`li`,{className:`flex items-center justify-between gap-4 py-3 first:pt-0 last:pb-0`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`font-medium`,children:e.name}),e.description&&(0,X.jsx)(`p`,{className:`truncate text-sm text-muted-foreground`,children:e.description})]}),(0,X.jsx)(v,{"aria-label":`Subscribe to ${e.name}`,checked:t,"data-testid":`member-subscription-toggle`,disabled:r,onCheckedChange:()=>i(Zt(n,e.id))})]},e.id)})}),(0,X.jsxs)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:[`If disabled, member will `,(0,X.jsx)(`em`,{children:`not`}),` receive newsletter emails`]})]})})})]})},An=`complimentary`,jn=`gift subscription`;function Mn(e){if(e.id)return`paid`;let t=e.plan?.nickname?.toLowerCase()??``;return t===An?`complimentary`:t===jn?`gift`:`paid`}function Nn(e){return e===`year`?`yearly`:`monthly`}function Pn(e){if(e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`))return`Free trial`;let t=e.price?.nickname;return t&&t!==`Monthly`&&t!==`Yearly`?t:null}function Fn(e){return e.status===`canceled`||e.cancel_at_period_end?`Canceled`:`Active`}var In=e=>e?(0,Z.default)(new Date(e)).format(`D MMM YYYY`):``,Ln=e=>e?(0,Z.default)(e).utc().format(`D MMM YYYY`):``;function Rn(e){let t=Mn(e);if(t===`complimentary`||t===`gift`){let t=Ln(e.tier?.expiry_at);return t?`Expires ${t}`:``}let n=e.status===`canceled`&&!e.cancel_at_period_end?``:In(e.current_period_end);return e.status===`canceled`?n?`Ended ${n}`:``:e.cancel_at_period_end?n?`Has access until ${n}`:``:e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`)?`Ends ${In(e.trial_end_at)}`:n?`Renews ${n}`:``}function zn(e){let t=[],n=new Map;for(let r of e){if(!r.price)continue;let e=r.tier??r.price.tier;if(!e?.id)continue;let i=n.get(e.id);i||(i={tier:e,subscriptions:[]},n.set(e.id,i),t.push(i)),i.subscriptions.push(r)}return t}var Bn=[`forever`,`week`,`month`,`half-year`,`year`,`custom`];function Vn(e){return Bn.includes(e)}function Hn(e,t){switch(e){case`forever`:return null;case`week`:return Z.default.utc().add(7,`days`).startOf(`day`).toISOString();case`month`:return Z.default.utc().add(1,`month`).startOf(`day`).toISOString();case`half-year`:return Z.default.utc().add(6,`months`).startOf(`day`).toISOString();case`year`:return Z.default.utc().add(1,`year`).startOf(`day`).toISOString();case`custom`:return t?(0,Z.default)(t,`YYYY-MM-DD`).startOf(`day`).endOf(`day`).set(`millisecond`,0).add((0,Z.default)().utcOffset(),`minutes`).toISOString():null}}var Un=new Set([`active`,`trialing`,`unpaid`,`past_due`]),Wn=[{value:`forever`,label:`Forever`},{value:`week`,label:`1 Week`},{value:`month`,label:`1 Month`},{value:`half-year`,label:`6 Months`},{value:`year`,label:`1 Year`},{value:`custom`,label:`Custom`}],Gn=({open:e,onOpenChange:t,member:n})=>{let{data:r,isLoading:i}=at({searchParams:{filter:`type:paid+active:true`,limit:`all`}}),o=r?.tiers??[],[s,c]=Y.useState(``),[l,u]=Y.useState(`forever`),[d,f]=Y.useState(``);Y.useEffect(()=>{e&&(c(``),u(`forever`),f(``))},[e]);let p=fe(),m=G(),[h,g]=Y.useState(!1),_=(n.subscriptions??[]).filter(e=>Mn(e)===`paid`&&Un.has(e.status)),v=(0,Z.default)().format(`YYYY-MM-DD`),te=!!s&&!h&&(l!==`custom`||!!d),ne=async()=>{if(te){g(!0);try{for(let e of _)await p.mutateAsync({memberId:n.id,subscriptionId:e.id,status:`canceled`});let e=Hn(l,l===`custom`?d:null),r=e?{id:s,expiry_at:e}:{id:s};await m.mutateAsync({id:n.id,...n.email?{email:n.email}:{},tiers:[r]}),a.success(`Complimentary subscription added`),t(!1)}catch{a.error(`Couldn’t add complimentary subscription`)}finally{g(!1)}}};return(0,X.jsx)(z,{open:e,onOpenChange:e=>{h||t(e)},children:(0,X.jsxs)(q,{"data-testid":`add-comp-modal`,children:[(0,X.jsxs)(j,{children:[(0,X.jsx)(I,{children:`Add complimentary subscription`}),(0,X.jsx)(B,{children:`Grants this member access to a paid tier for the chosen duration. Any active paid subscription is canceled first.`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(T,{htmlFor:`comp-tier`,children:`Tier`}),(0,X.jsxs)(S,{value:s,onValueChange:c,children:[(0,X.jsx)(x,{"data-testid":`comp-tier-select`,disabled:i||h,id:`comp-tier`,children:(0,X.jsx)(ee,{placeholder:i?`Loading tiers…`:`Select a tier`})}),(0,X.jsx)(b,{children:o.map(e=>(0,X.jsx)(y,{"data-tier-id":e.id,value:e.id,children:e.name},e.id))})]})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(T,{htmlFor:`comp-duration`,children:`Duration`}),(0,X.jsxs)(S,{value:l,onValueChange:e=>{Vn(e)&&u(e)},children:[(0,X.jsx)(x,{"data-testid":`comp-duration-select`,disabled:h,id:`comp-duration`,children:(0,X.jsx)(ee,{})}),(0,X.jsx)(b,{children:Wn.map(e=>(0,X.jsx)(y,{value:e.value,children:e.label},e.value))})]})]}),l===`custom`&&(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(T,{htmlFor:`comp-custom-date`,children:`Expires on`}),(0,X.jsx)(W,{"data-testid":`comp-custom-date`,disabled:h,id:`comp-custom-date`,min:v,type:`date`,value:d,onChange:e=>f(e.target.value)})]})]}),(0,X.jsxs)(N,{children:[(0,X.jsx)(L,{disabled:h,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(L,{"data-testid":`comp-add-confirm`,disabled:!te,onClick:()=>void ne(),children:h?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Adding`})]}):`Add subscription`})]})]})})},Kn=({memberId:e,subscription:t})=>{let n=fe(),r=P(),i=n.isPending||n.isSuccess&&r,o=t.status===`canceled`,s=t.cancel_at_period_end,c=(r,i,o)=>{n.mutate({memberId:e,subscriptionId:t.id,cancelAtPeriodEnd:r},{onSuccess:()=>a.success(i),onError:()=>a.error(o)})};return(0,X.jsxs)(H,{children:[(0,X.jsx)(Ae,{asChild:!0,children:(0,X.jsx)(L,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:i,size:`sm`,variant:`outline`,children:i?(0,X.jsx)(U,{size:`sm`}):(0,X.jsx)(pe,{})})}),(0,X.jsxs)(ke,{align:`end`,children:[(0,X.jsx)(O,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/customers/${t.customer.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe customer`})}),(0,X.jsx)(Ze,{}),(0,X.jsx)(O,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/subscriptions/${t.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe subscription`})}),!o&&(s?(0,X.jsx)(O,{"data-testid":`continue-subscription`,onSelect:()=>c(!1,`Subscription continued`,`Couldn’t continue subscription`),children:`Continue subscription`}):(0,X.jsx)(O,{className:`text-destructive focus:text-destructive`,"data-testid":`cancel-subscription`,onSelect:()=>c(!0,`Subscription canceled`,`Couldn’t cancel subscription`),children:`Cancel subscription`}))]})]})},qn=({member:e,tierId:t})=>{let n=G(),[r,i]=Y.useState(!1),o=P(),s=n.isPending||n.isSuccess&&o;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(H,{children:[(0,X.jsx)(Ae,{asChild:!0,children:(0,X.jsx)(L,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:s,size:`sm`,variant:`outline`,children:s?(0,X.jsx)(U,{size:`sm`}):(0,X.jsx)(pe,{})})}),(0,X.jsx)(ke,{align:`end`,children:(0,X.jsx)(O,{className:`text-destructive focus:text-destructive`,"data-testid":`remove-complimentary`,onSelect:()=>i(!0),children:`Remove complimentary subscription`})})]}),(0,X.jsx)(We,{open:r,onOpenChange:e=>{n.isPending||i(e)},children:(0,X.jsxs)(Le,{children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(Re,{children:`Remove complimentary subscription?`}),(0,X.jsx)(Ye,{children:`The member will lose access to this tier immediately.`})]}),(0,X.jsxs)(Ke,{children:[(0,X.jsx)(Fe,{disabled:n.isPending,children:`Cancel`}),(0,X.jsx)(L,{"data-testid":`confirm-remove-complimentary`,disabled:n.isPending,variant:`destructive`,onClick:()=>{let r=(e.tiers??[]).filter(e=>e.id!==t).map(e=>({id:e.id,expiry_at:e.expiry_at??null}));n.mutate({id:e.id,email:e.email,tiers:r},{onSuccess:()=>{a.success(`Complimentary subscription removed`),i(!1)},onError:()=>a.error(`Couldn’t remove complimentary subscription`)})},children:n.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Removing`})]}):`Remove`})]})]})})]})},Jn=e=>{let t=e/100;return t.toLocaleString(void 0,t%1==0?void 0:{minimumFractionDigits:2,maximumFractionDigits:2})},Yn=({sub:e,kind:t})=>{if(t===`complimentary`||t===`gift`)return(0,X.jsx)(`div`,{className:`flex size-20 shrink-0 items-center justify-center rounded-lg bg-muted text-center text-sm font-medium text-muted-foreground`,children:t===`complimentary`?`Comp`:`Gift`});let n=c(e.price.currency),r=Jn(e.price.amount),i=Nn(e.price.interval);return(0,X.jsxs)(`div`,{className:`flex size-20 shrink-0 flex-col items-center justify-center rounded-lg bg-muted text-foreground`,children:[(0,X.jsxs)(`div`,{className:`flex items-start leading-none`,children:[(0,X.jsx)(`span`,{className:`mt-1 text-sm font-semibold`,children:n}),(0,X.jsx)(`span`,{className:`text-3xl font-semibold tracking-tight`,children:r})]}),(0,X.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:i})]})},Xn=e=>e?Z.default.utc(e).format(`D MMM YYYY`):``,Zn=({sub:e})=>{let t=Xn(e.start_date),n=e.attribution?.referrer_source,r=n&&n!==`Unknown`,i=e.attribution?.title?{title:e.attribution.title,url:e.attribution.url??null}:null;return(0,X.jsxs)(`div`,{className:`mt-3 space-y-1 border-t border-border pt-3 text-sm text-muted-foreground`,children:[t&&(0,X.jsxs)(`p`,{children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:t})]}),r&&(0,X.jsxs)(`p`,{children:[`Source — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:n})]}),i&&(0,X.jsxs)(`p`,{children:[`Page — `,i.url?(0,X.jsx)(`a`,{className:`text-foreground hover:underline`,href:i.url,rel:`noopener noreferrer`,target:`_blank`,children:i.title}):(0,X.jsx)(`span`,{className:`text-foreground`,children:i.title})]})]})},Qn=({member:e,sub:t,showDivider:n})=>{let[r,i]=Y.useState(!1),a=Mn(t),o=Fn(t),s=Rn(t),c=Pn(t);return(0,X.jsxs)(`div`,{className:m(`flex items-start justify-between gap-4 py-5 first:pt-0 last:pb-0`,n&&`border-t border-border`),"data-testid":`member-subscription`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-4`,children:[(0,X.jsx)(Yn,{kind:a,sub:t}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1 pt-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`min-w-0 truncate font-semibold`,"data-testid":`member-subscription-tier`,children:t.tier?.name??`Subscription`}),(0,X.jsx)(D,{"data-testid":`member-subscription-status`,variant:o===`Canceled`?`secondary`:`success`,children:o})]}),(c||s)&&(0,X.jsxs)(`div`,{className:`mt-1 text-sm`,children:[c&&(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:c}),c&&s&&(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:` – `}),s&&(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:s})]}),(0,X.jsxs)(`button`,{"aria-expanded":r,className:`mt-1 inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline`,"data-testid":`member-subscription-details-toggle`,type:`button`,onClick:()=>i(e=>!e),children:[`Details`,(0,X.jsx)(Me,{className:m(`transition-transform`,r&&`rotate-180`),size:14})]}),r&&(0,X.jsx)(Zn,{sub:t})]})]}),a===`paid`&&(0,X.jsx)(Kn,{memberId:e.id,subscription:t}),a===`complimentary`&&t.tier?.id&&(0,X.jsx)(qn,{member:e,tierId:t.tier.id})]})},$n=({member:e,canAddComp:t})=>{let[n,r]=Y.useState(!1);if(!e)return(0,X.jsx)(w,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(C,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(se,{title:`No subscriptions`,children:(0,X.jsx)(V,{})})})})});let i=zn(e.subscriptions??[]),a=i.length>0,o=t&&(e.tiers?.length??0)===0,s=o?(0,X.jsxs)(L,{"data-testid":`add-complimentary`,variant:`outline`,onClick:()=>r(!0),children:[(0,X.jsx)(Ue,{className:`mr-1`,size:16}),`Add complimentary subscription`]}):null;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(w,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(C,{className:`pt-6`,children:a?(0,X.jsxs)(X.Fragment,{children:[i.map(t=>(0,X.jsxs)(`div`,{className:`flex flex-col`,children:[t.subscriptions.map((n,r)=>(0,X.jsx)(Qn,{member:e,showDivider:r>0,sub:n},n.id||`${t.tier.id}-${r}`)),t.subscriptions.length>1&&(0,X.jsxs)(`div`,{className:`pt-3 text-sm text-muted-foreground`,children:[t.subscriptions.length,` subscriptions`]})]},t.tier.id)),s&&(0,X.jsx)(`div`,{className:`mt-4 flex justify-center border-t border-border pt-4`,children:s})]}):(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:[(0,X.jsx)(se,{title:`No subscriptions`,children:(0,X.jsx)(V,{})}),s]})})}),o&&(0,X.jsx)(Gn,{member:e,open:n,onOpenChange:r})]})};function er(e){let t=new URLSearchParams(e),n=t.get(`back`);if(n&&n.startsWith(`/members`))return n;let r=t.get(`post`);return r?`/members?post=${encodeURIComponent(r)}`:`/members`}var tr=`new`,nr=({paidMembersEnabled:e,newslettersUiEnabled:t,engagementEnabled:n})=>{let{member_id:r=``}=d(),i=u(),c=p(),m=er(i.search),h=r===tr,v=Ge(`membersCustomFields`),{data:y,isLoading:b,error:x,refetch:ee}=rt(r,{enabled:!!r&&!h,searchParams:{include:v?`tiers,custom_fields`:`tiers`},defaultErrorHandler:!1}),S=y?.members?.[0],se=!h&&!b&&!!x,T=!h&&!b&&!x&&!S,ce=G(),le=Ce(),E=h?le:ce,{data:ue}=at({searchParams:{filter:`type:paid+active:true`,limit:`all`},enabled:e}),de=(ue?.tiers?.length??0)>0,{data:D}=ot({searchParams:{filter:`status:active`,limit:`50`}}),O=D!==void 0,fe=(D?.newsletters?.length??0)>1,pe=(ue?.tiers?.length??0)>1,[k,A]=Y.useState(void 0),j=Y.useRef(void 0),M=Y.useRef(void 0),N=Y.useRef(!1),P=Y.useRef(!1);Y.useEffect(()=>{if(h){if(j.current!==tr){j.current=tr,N.current=!1;let e=Q({});M.current=e,A(e)}return}if(!S)return;let e=Q(S);if(j.current!==S.id){j.current=S.id,M.current=e,A(e);return}let t=M.current;M.current=e,A(n=>fn(n,t)?e:n)},[S,h]),Y.useEffect(()=>{P.current=!1},[r]),Y.useEffect(()=>{if(!h||N.current||!D?.newsletters)return;N.current=!0;let e=tn(D.newsletters);if(e.length===0)return;let t={...M.current??Q({}),newsletters:[...e].sort()};M.current=t,A(t=>t&&{...t,newsletters:[...e].sort()})},[h,D]);let me=h?M.current:S?Q(S):void 0,F=!!k&&!!me&&!s(dn(k),me),he=!!k&&Qt(k.email),[ge,_e]=Y.useState(!1);Y.useEffect(()=>{_e(!1)},[S?.id,h]);let ve=k?$t(k.email,ge):null,[I,ye]=Y.useState({name:``,email:``});Y.useEffect(()=>{if(h){ye({name:``,email:``});return}S&&ye({name:S.name??``,email:S.email??``})},[S?.id,S?.name,S?.email,h]);let be=()=>{k&&ye({name:k.name,email:k.email})},xe=e=>{E.isError&&E.reset(),A(t=>t&&{...t,...e})},Se=()=>{if(!(!k||!F||!he||E.isPending)){if(be(),h){le.mutate({email:k.email.trim(),name:k.name.trim()||void 0,note:k.note.trim()||void 0,labels:k.labels.length?k.labels:void 0,newsletters:N.current?k.newsletters.map(e=>({id:e})):void 0},{onSuccess:e=>{let t=e.members?.[0];if(!t){a.error(`Member couldn’t be created`);return}P.current=!0,a.success(`Member created`),c(`/members/${t.id}`,{replace:!0})},onError:()=>{a.error(`Member couldn’t be created`)}});return}!S||j.current!==S.id||ce.mutate(an(S.id,k,Q(S)),{onSuccess:e=>{let t=e.members?.[0];if(t){let e=Q(t);M.current=e,A(e)}a.success(`Member updated`)},onError:()=>{a.error(`Member couldn’t be saved`)}})}};o(E.isPending||F);let R=l(({currentLocation:e,nextLocation:t})=>!P.current&&F&&e.pathname!==t.pathname),z=st(F),we=R.state===`blocked`||z.isBlocked,B=`Save`,Te=`default`,V=!0;E.isPending?B=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(U,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):F?(B=E.isError?`Retry`:`Save`,Te=E.isError?`destructive`:`default`,V=!he):!h&&ce.isSuccess&&(B=`Saved`);let De=!!k&&(h||!!S),H=`Member`;return h?H=`New member`:S?H=Ee(S):T&&(H=`Member not found`),(0,X.jsx)(g,{className:`size-full`,children:(0,X.jsx)(_,{className:`relative flex h-full flex-col`,size:`page`,children:(0,X.jsxs)(J,{"data-testid":`member-detail`,children:[(0,X.jsx)(J.Header,{children:(0,X.jsxs)(it,{blurredBackground:!1,sticky:!1,children:[(0,X.jsx)(it.Left,{children:(0,X.jsx)(oe,{children:(0,X.jsxs)(ne,{children:[(0,X.jsx)(re,{children:(0,X.jsx)(ae,{asChild:!0,children:(0,X.jsx)(f,{"data-test-link":`members-back`,to:m,children:`Members`})})}),(0,X.jsx)(ie,{}),(0,X.jsx)(re,{children:!h&&b?(0,X.jsx)(K,{className:`h-4 w-40`}):(0,X.jsx)(te,{className:`truncate`,"data-testid":`member-detail-title`,children:H})})]})})}),(h||S)&&(0,X.jsx)(it.Actions,{children:(0,X.jsxs)(it.ActionGroup,{children:[S&&!h&&(0,X.jsx)(wt,{allowLeaveWithUnsavedChanges:()=>{P.current=!0},member:S},S.id),(0,X.jsx)(L,{className:`min-w-16`,disabled:V,variant:Te,onClick:Se,children:B})]})})]})}),(0,X.jsxs)(J.Body,{children:[se&&(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3`,"data-testid":`member-detail-load-error`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Couldn’t load this member.`}),(0,X.jsx)(L,{variant:`outline`,onClick:()=>void ee(),children:`Retry`})]}),T&&(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`This member couldn’t be found.`})}),De&&k&&(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col gap-8 lg:flex-row lg:items-start lg:gap-12`,children:[(0,X.jsx)(On,{draftEmail:I.email,draftName:I.name,engagementEnabled:n,member:S}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-8`,children:[(0,X.jsx)(w,{children:(0,X.jsx)(C,{className:`p-6`,children:(0,X.jsx)(Tn,{disabled:E.isPending,draft:k,emailError:ve,onChange:xe,onEmailBlur:()=>{_e(!0),be()},onNameBlur:be})})}),v&&S&&(0,X.jsx)(Cn,{customFields:S.custom_fields,disabled:E.isPending,memberId:S.id}),t&&(h||S)&&(0,X.jsx)(kn,{disabled:E.isPending,emailSuppression:S?.email_suppression,memberId:S?.id,subscribedIds:k.newsletters,onChange:e=>xe({newsletters:e})}),e&&(0,X.jsxs)(`section`,{"aria-labelledby":`member-subscriptions-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-subscriptions-heading`,children:`Subscriptions`}),(0,X.jsx)($n,{canAddComp:de,member:S})]}),(h||S&&O)&&(0,X.jsx)(Gt,{hasMultipleNewsletters:fe,hasMultipleTiers:pe,memberId:S?.id,paidMembersEnabled:e})]})]})]}),(0,X.jsx)(We,{open:we,onOpenChange:e=>{!e&&we&&(R.reset?.(),z.reset())},children:(0,X.jsxs)(Le,{children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(Re,{children:`Discard unsaved changes?`}),(0,X.jsx)(Ye,{children:`Your changes will be lost if you leave this member.`})]}),(0,X.jsxs)(Ke,{children:[(0,X.jsx)(Fe,{children:`Keep editing`}),(0,X.jsx)(L,{variant:`destructive`,onClick:()=>{z.isBlocked?z.proceed():R.proceed?.()},children:`Leave`})]})]})})]})})})},rr=()=>{let{data:e,isLoading:t}=He({});if(t||!e?.settings)return(0,X.jsx)(g,{className:`size-full`,children:(0,X.jsx)(_,{className:`relative flex h-full flex-col`,size:`page`,children:(0,X.jsx)(J,{children:(0,X.jsx)(J.Body,{children:(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,X.jsx)(U,{size:`lg`})})})})})});let n=A(e.settings,`editor_default_email_recipients`),r=A(e.settings,`members_signup_access`);return(0,X.jsx)(nr,{engagementEnabled:r!==`none`&&n!==`disabled`,newslettersUiEnabled:nn(n),paidMembersEnabled:A(e.settings,`paid_members_enabled`)===!0})};export{rr as default};
@@ -1,11 +0,0 @@
1
- import{o as e,t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{t as r}from"./jsx-runtime-DX3WBWVO.js";import{g as i}from"./framework-provider-CFLwK5uS.js";import{S as a,_ as o,h as s,m as c,o as l,u,v as d,x as f,y as p}from"./hooks-CJepWnbB.js";import{n as m}from"./dist-Ndy-PuGN.js";import{t as h}from"./build-CsiH26uS.js";import{n as g}from"./offers-DMxebaoK.js";import{f as _,g as v,l as y}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as b}from"./router-provider-CkB_ArLF.js";import{c as x,f as S,p as C,v as w}from"./dist-Cb5RSHSg.js";import{t as T}from"./box-By_EgGtm.js";import{t as E}from"./container-LiZf3XdY.js";import{i as D,n as O,r as k}from"./filters-DZJT29GW.js";import{a as A,i as j,l as M,n as N,o as P,r as F,s as I,t as L}from"./command-BrhXIlDr.js";import{n as ee}from"./input-surface-BdOe4KzO.js";import{t as R}from"./dropzone-B21Entqz.js";import{i as z,n as B,o as te,s as V,t as ne}from"./select-xuZAuDyS.js";import{t as re}from"./checkbox-LmClhqcS.js";import{t as ie}from"./empty-indicator-WB1WgT9h.js";import{a as ae,i as oe,o as se,t as ce}from"./field-BQqLTgHM.js";import{i as le,n as ue,t as de}from"./input-group-DpogNUIt.js";import{a as H,c as U,n as fe,r as W,s as pe,t as me}from"./table-DghJxZMH.js";import{m as he}from"./users-DmGMPfw7.js";import{$n as ge,$r as G,Bi as _e,Bo as ve,C as ye,Dn as K,Do as be,Dr as xe,E as Se,En as Ce,Eo as we,Er as q,Fa as Te,Gi as Ee,Ks as De,Lo as Oe,M as ke,Mi as Ae,Ni as je,Nn as Me,Oi as Ne,Or as Pe,Os as Fe,Pr as J,Qn as Ie,Ri as Le,S as Re,Sr as ze,T as Be,Tr as Ve,Ua as He,Uo as Ue,V as We,Va as Ge,Vo as Ke,Wi as qe,Xi as Je,Yi as Ye,Yr as Xe,Zo as Ze,Zr as Qe,_ as $e,_n as et,ai as tt,ar as nt,as as rt,br as it,ca as at,cr as ot,dn as st,dr as ct,fn as lt,fr as ut,g as dt,gr as ft,gs as pt,h as mt,hn as ht,hr as gt,hs as _t,ia as vt,is as yt,jn as bt,js as xt,ka as St,ko as Ct,lr as wt,m as Tt,mr as Et,ms as Dt,no as Ot,oo as kt,pn as At,po as jt,pr as Mt,ps as Nt,qa as Pt,ra as Ft,ri as It,ro as Lt,rs as Rt,sa as zt,tr as Bt,v as Vt,va as Ht,vr as Ut,w as Wt,wr as Gt,x as Kt,xr as qt,ya as Jt}from"./index-BOJzlYiz.js";import{t as Y}from"./page-header-VLPJfj_d.js";import{C as Yt,S as Xt,T as Zt,_ as Qt,a as $t,b as en,c as tn,d as nn,f as X,g as rn,h as an,i as on,l as sn,m as cn,n as ln,o as un,p as dn,r as fn,s as pn,t as mn,u as hn,v as gn,w as _n,x as vn,y as yn}from"./filters-D0uIMD8n.js";import{n as bn}from"./dirty-confirm-dialog-DmdMpgyN.js";import{r as xn}from"./newsletters-ILsexy-5.js";import{t as Sn}from"./list-page-CdsnQR9N.js";import{a as Cn,i as wn,n as Tn,t as En}from"./filter-sources-FgqoUIL7.js";import{i as Dn,n as On,r as kn,t as An}from"./virtual-list-D5ugXyZY.js";import{t as jn}from"./get-site-timezone-HgL0jI_F.js";import{c as Mn,i as Nn,m as Pn,n as Fn,o as In,r as Ln,s as Rn}from"./member-custom-fields-CvGcpaiW.js";import{n as zn,r as Bn,t as Vn}from"./label-picker-Cvvbmzb5.js";import{n as Hn,t as Un}from"./custom-field-type-option-CNhAgHbJ.js";import{t as Wn}from"./member-route-0Aa52Ntz.js";var Z=e(n(),1),Q=r();function Gn({open:e,memberCount:t,onOpenChange:n,onConfirm:r,isLoading:i=!1}){let[a,o]=(0,Z.useState)([]),s=zn({selectedSlugs:a,onSelectionChange:o}),c=(0,Z.useCallback)(e=>{e||o([]),n(e)},[n]);return(0,Q.jsx)(ze,{open:e,onOpenChange:c,children:(0,Q.jsxs)(Gt,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Q.jsx)(xe,{children:(0,Q.jsxs)(Pe,{children:[`Add label to `,S(t),` `,t===1?`member`:`members`]})}),(0,Q.jsx)(Bn,{isCreating:s.isCreating,labels:s.labels,optionSource:s.optionSource,resolvedSelectedLabels:s.resolvedSelectedLabels,selectedSlugs:a,onCreate:s.createLabel,onDelete:s.deleteLabel,onEdit:s.editLabel,onToggle:s.toggleLabel}),(0,Q.jsxs)(q,{children:[(0,Q.jsx)(J,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Q.jsx)(J,{disabled:a.length===0||i,onClick:()=>{let e=s.labels.filter(e=>a.includes(e.slug)).map(e=>e.id);e.length>0&&r(e)},children:i?`Adding...`:a.length>1?`Add ${S(a.length)} labels`:`Add label`})]})]})})}function Kn({open:e,memberCount:t,nql:n,search:r,onOpenChange:i,onConfirm:a,isLoading:o=!1}){let[s,c]=(0,Z.useState)([]),{data:l,isLoading:u}=ye({searchParams:{...n?{filter:n}:{},...r?{search:r}:{},include:`labels`,limit:`all`,fields:`id`},enabled:e}),d=(0,Z.useMemo)(()=>{let e=new Set;for(let t of l?.members||[])for(let n of t.labels||[])e.add(n.slug);return e},[l]),f=zn({selectedSlugs:s,onSelectionChange:c}),p={...f.optionSource,options:f.optionSource.options.filter(e=>d.has(String(e.value)))},m=(0,Z.useCallback)(e=>{e||c([]),i(e)},[i]),h=()=>{let e=f.labels.filter(e=>s.includes(e.slug)).map(e=>e.id);e.length>0&&a(e)};return(0,Q.jsx)(ze,{open:e,onOpenChange:m,children:(0,Q.jsxs)(Gt,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Q.jsx)(xe,{children:(0,Q.jsxs)(Pe,{children:[`Remove label from `,S(t),` `,t===1?`member`:`members`]})}),(0,Q.jsx)(Bn,{labels:f.labels.filter(e=>d.has(e.slug)),optionSource:{...p,isInitialLoad:p.isInitialLoad||u},resolvedSelectedLabels:f.resolvedSelectedLabels.filter(e=>d.has(e.slug)),selectedSlugs:s,onDelete:f.deleteLabel,onEdit:f.editLabel,onToggle:f.toggleLabel}),(0,Q.jsxs)(q,{children:[(0,Q.jsx)(J,{variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Q.jsx)(J,{disabled:s.length===0||o,onClick:h,children:o?`Removing...`:s.length>1?`Remove ${S(s.length)} labels`:`Remove label`})]})]})})}function qn({open:e,newsletters:t,memberCount:n,onOpenChange:r,onConfirm:i,isLoading:a=!1}){let[o,s]=(0,Z.useState)(`all`),[c,l]=(0,Z.useState)([]),[u,d]=(0,Z.useState)(``),[f,p]=(0,Z.useState)(!1),m=(0,Z.useRef)(null),h=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{e||(s(`all`),l([]),d(``),p(!1))},[e]),(0,Z.useEffect)(()=>{if(!f)return;let e=e=>{m.current&&!m.current.contains(e.target)&&p(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[f]);let g=e=>{e||(s(`all`),l([]),d(``),p(!1)),r(e)},_=(0,Z.useCallback)(e=>{l(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},[]),v=t.length>=2,y=()=>{i(!v||o===`all`?null:c)},b=a||v&&o===`selected`&&c.length===0,x=n===1?`member`:`members`;return(0,Q.jsx)(ze,{open:e,onOpenChange:g,children:(0,Q.jsxs)(Gt,{className:`gap-5`,children:[(0,Q.jsx)(xe,{children:(0,Q.jsx)(Pe,{children:`Unsubscribe members`})}),v?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{"aria-label":`Unsubscribe scope`,className:`flex flex-col gap-3`,role:`radiogroup`,children:[(0,Q.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3`,children:[(0,Q.jsx)(`input`,{checked:o===`all`,className:`mt-0.5 size-4 cursor-pointer accent-black`,name:`unsubscribe-mode`,type:`radio`,value:`all`,onChange:()=>s(`all`)}),(0,Q.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-semibold`,children:`Unsubscribe from all newsletters`}),(0,Q.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[n.toLocaleString(),` `,x,` will be unsubscribed from`,` `,t.length,` `,t.length===1?`newsletter`:`newsletters`,`.`]})]})]}),(0,Q.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3`,children:[(0,Q.jsx)(`input`,{checked:o===`selected`,className:`mt-0.5 size-4 cursor-pointer accent-black`,name:`unsubscribe-mode`,type:`radio`,value:`selected`,onChange:()=>s(`selected`)}),(0,Q.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Q.jsx)(`span`,{className:`text-sm font-semibold`,children:`Unsubscribe from selected newsletters`}),(0,Q.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Select which newsletters to unsubscribe`,` `,n.toLocaleString(),` `,x,` from.`]})]})]})]}),o===`selected`&&(0,Q.jsxs)(`div`,{ref:m,className:`relative space-y-2`,children:[(0,Q.jsx)(`label`,{className:`text-sm font-semibold`,htmlFor:`newsletter-search`,children:`Newsletters`}),(0,Q.jsxs)(`div`,{className:`flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-md border bg-background px-3 py-1 text-sm`,onClick:()=>{h.current?.focus(),p(!0)},children:[c.map(e=>{let n=t.find(t=>t.id===e);return n?(0,Q.jsxs)(ge,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:t=>{t.stopPropagation(),_(e)},children:[n.name,(0,Q.jsx)(Ne,{className:`size-3`})]},e):null}),(0,Q.jsx)(`input`,{ref:h,className:`min-w-[80px] flex-1 bg-transparent py-1 text-sm outline-hidden placeholder:text-muted-foreground`,id:`newsletter-search`,placeholder:c.length===0?`Search newsletters...`:``,value:u,onChange:e=>{d(e.target.value),f||p(!0)},onFocus:()=>p(!0),onKeyDown:e=>{e.key===`Escape`&&(p(!1),h.current?.blur()),e.key===`Backspace`&&!u&&c.length>0&&_(c[c.length-1])}})]}),f&&(0,Q.jsx)(`div`,{className:`absolute top-full left-0 z-50 mt-1 w-full rounded-md border bg-white shadow-md dark:bg-gray-950`,children:(0,Q.jsx)(L,{shouldFilter:!1,children:(0,Q.jsxs)(I,{className:`max-h-64 overflow-y-auto`,children:[(0,Q.jsx)(F,{children:`No newsletters found.`}),t.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())).map(e=>(0,Q.jsxs)(P,{value:e.name,onSelect:()=>_(e.id),children:[e.name,c.includes(e.id)&&(0,Q.jsx)(N,{})]},e.id))]})})})]})]}):(0,Q.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Are you sure you want to unsubscribe`,` `,n.toLocaleString(),` `,x,` from all newsletters? They will no longer receive any email newsletters from you.`]}),(0,Q.jsxs)(q,{children:[(0,Q.jsx)(J,{variant:`outline`,onClick:()=>g(!1),children:`Cancel`}),(0,Q.jsx)(J,{disabled:b,variant:`destructive`,onClick:y,children:a?`Unsubscribing...`:`Unsubscribe`})]})]})})}function Jn({open:e,memberCount:t,onOpenChange:n,onConfirm:r,onExportBackup:i,isLoading:a=!1}){let[o,s]=(0,Z.useState)(!1),c=e=>{e||s(!1),n(e)},l=async()=>{if(!(t<1||a||o))try{s(!0),await i(),r()}catch{}finally{s(!1)}};return(0,Q.jsx)(ze,{open:e,onOpenChange:c,children:(0,Q.jsxs)(Gt,{className:`gap-5`,children:[(0,Q.jsx)(xe,{children:(0,Q.jsx)(Pe,{children:`Delete selected members?`})}),t>0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`p`,{children:[`You're about to delete `,(0,Q.jsxs)(`strong`,{children:[t.toLocaleString(),` `,t===1?`member`:`members`]}),`. This is permanent! All Ghost data will be deleted, this will have no effect on subscriptions in Stripe.`]}),(0,Q.jsx)(`p`,{children:`A backup of your selection will be automatically downloaded to your device before deletion.`})]}):(0,Q.jsx)(`p`,{children:`No members are selected.`}),(0,Q.jsxs)(q,{children:[(0,Q.jsx)(J,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Q.jsx)(J,{disabled:a||o||t<1,variant:`destructive`,onClick:()=>void l(),children:a||o?`Deleting...`:`Download backup & delete members`})]})]})})}function Yn({fileError:e,onClose:t,onDropAccepted:n,onDropRejected:r}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`mt-5 space-y-5`,children:[(0,Q.jsxs)(Ie,{variant:`info`,children:[`Need some help? `,(0,Q.jsx)(`a`,{className:`font-semibold underline`,href:`https://ghost.org/help/import-members/`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`}),` about importing members or `,(0,Q.jsx)(`a`,{className:`font-semibold underline`,href:`https://static.ghost.org/v4.0.0/files/member-import-template.csv`,rel:`noopener noreferrer`,target:`_blank`,children:`download a sample CSV file`}),`.`]}),e&&(0,Q.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-red-600`,children:[(0,Q.jsx)(Ee,{className:`mt-0.5 size-4 shrink-0`}),(0,Q.jsx)(`p`,{children:e})]}),(0,Q.jsx)(R,{accept:{"text/csv":[`.csv`],"application/vnd.ms-excel":[`.csv`]},"aria-label":`Select or drop a CSV file`,onDropAccepted:e=>{let t=e[0];t&&n(t)},onDropRejected:r,children:({isDragActive:e,isDragReject:t})=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(_e,{className:`mb-2 size-6 text-grey-600`}),(0,Q.jsx)(`span`,{className:`text-sm text-grey-700`,children:t?`The file type you uploaded is not supported`:e?`Drop CSV file to upload`:`Select or drop a CSV file`})]})})]}),(0,Q.jsx)(q,{className:`mt-5`,children:(0,Q.jsx)(J,{variant:`outline`,onClick:t,children:`Close`})})]})}var Xn=[{label:`Email`,value:`email`},{label:`Name`,value:`name`},{label:`Note`,value:`note`},{label:`Subscribed to emails`,value:`subscribed_to_emails`},{label:`Stripe Customer ID`,value:`stripe_customer_id`},{label:`Complimentary plan`,value:`complimentary_plan`},{label:`Labels`,value:`labels`},{label:`Created at`,value:`created_at`},{label:`Gift ID`,value:`gift_id`}],Zn={label:`Tier`,value:`import_tier`},Qn=[`email`,`name`,`note`,`subscribed_to_emails`,`complimentary_plan`,`stripe_customer_id`,`labels`,`created_at`,`gift_id`];function $n({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...Qn,...e?[Zn.value]:[],...t.map(e=>e.value)]}function er({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...Xn,...e?[Zn]:[],...t]}var tr=[`email`],nr=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,rr=class e{_mapping;constructor(e){if(this._mapping={},e)for(let[t,n]of Object.entries(e))this._mapping[n]=t}get(e){return this._mapping[e]??null}toJSON(){return{...this._mapping}}getKeyByValue(e){for(let[t,n]of Object.entries(this._mapping))if(n===e)return t;return null}updateMapping(t,n){let r=new e({});if(r._mapping={...this._mapping},n)for(let e in r._mapping)r._mapping[e]===n&&(r._mapping[e]=null);return r._mapping[t]=n,r}};function ir(e){let t=new Set;for(let n of e)for(let e of Object.keys(n))e!==`__parsed_extra`&&t.add(e);return[...t]}function ar(e,t=30){if(!e||e.length<=t)return e;let n=[];return ir(e).forEach(r=>{let i=e.filter(e=>e[r]&&e[r].trim()!==``),a=[];if(i.length<=t)a=i;else{let e=Math.floor(t/3),n=e,r=t-e-n,o=i.slice(0,e),s=n>0?i.slice(-n):[],c=Math.max(0,Math.floor(i.length/2)-Math.floor(r/2)),l=i.slice(c,c+r);a=[...o,...l,...s].slice(0,t)}a.forEach((e,t)=>{n[t]||(n[t]={}),n[t][r]=e[r]})}),n}function or(e,t={}){let n=ar(e),r={},i=$n(t);if(e.length>0)for(let t of ir(e)){if(!r.name&&/name/i.test(t)&&!Pn(t)){r.name=t;continue}!r[t]&&i.includes(t)&&!tr.includes(t)&&(r[t]=t)}let a=0;for(;a<=n.length-1&&!r.email;){let e=n[a];for(let[t,n]of Object.entries(e))!r.email&&n&&nr.test(n)&&!Pn(t)&&(r.email=t);a+=1}return r}function sr(e){return e.replace(`Value in [members.email] cannot be blank.`,`Missing email address`).replace(`Value in [members.note] exceeds maximum length of 2000 characters.`,`Note is too long`).replace(`Value in [members.subscribed] must be one of true, false, 0 or 1.`,`Value of "Subscribed to emails" must be "true" or "false"`).replace(`Validation (isEmail) failed for email`,`Invalid email address`).replace(/No such customer:[\s\S]*/,`Could not find Stripe customer`)}function cr({status:e,fileData:t,mapping:n,mappingError:r,showMappingErrors:i,membersCount:a,dataPreviewIndex:o,hasPrevRecord:s,hasNextRecord:c,fieldMappings:l,labelPicker:u,onUpdateMapping:d,onDataPreviewIndexChange:f,onStartOver:p,onUpload:m}){let h=t&&t.length>0&&n?Object.entries(t[o]||{}).map(([e,t])=>({key:e,value:t,mapTo:n.get(e)})):[];return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5 flex min-h-0 flex-1 flex-col space-y-5`,children:t===null?(0,Q.jsx)(`div`,{className:`flex items-center justify-center rounded-md border bg-muted p-10`,children:(0,Q.jsx)(nt,{size:`md`})}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:x(`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,i&&r&&`border-red-500`),children:(0,Q.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,Q.jsxs)(me,{className:`table-fixed`,children:[(0,Q.jsx)(pe,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(H,{className:`w-1/3`,children:`Field`}),(0,Q.jsx)(H,{className:`w-1/3`,children:(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsxs)(`span`,{children:[`Sample data `,(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(#`,S(o+1),`)`]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center`,children:[(0,Q.jsx)(`button`,{"aria-label":`Show previous sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!s&&`cursor-default opacity-30`),disabled:!s||e===`UPLOADING`,type:`button`,onClick:()=>f(o-1),children:(0,Q.jsx)(yt,{className:`size-4`})}),(0,Q.jsx)(`button`,{"aria-label":`Show next sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!c&&`cursor-default opacity-30`),disabled:!c||e===`UPLOADING`,type:`button`,onClick:()=>f(o+1),children:(0,Q.jsx)(Rt,{className:`size-4`})})]})]})}),(0,Q.jsx)(H,{className:`w-1/3`,children:`Import as`})]})}),(0,Q.jsx)(fe,{children:h.length>0?h.map(t=>(0,Q.jsxs)(U,{className:x(!t.mapTo&&`bg-muted`),children:[(0,Q.jsx)(W,{className:`text-sm font-medium break-all`,children:t.key}),(0,Q.jsx)(W,{className:x(`text-sm break-all`,!t.value&&`text-muted-foreground`),children:t.value||`\xA0`}),(0,Q.jsx)(W,{children:(0,Q.jsxs)(ne,{disabled:e===`UPLOADING`,value:t.mapTo||`__not_imported__`,onValueChange:e=>{d(t.key,e===`__not_imported__`?null:e)},children:[(0,Q.jsx)(te,{className:x(`h-8 text-sm`,!t.mapTo&&`text-muted-foreground`),children:(0,Q.jsx)(V,{})}),(0,Q.jsxs)(B,{children:[(0,Q.jsx)(z,{value:`__not_imported__`,children:`Not imported`}),l.map(e=>(0,Q.jsx)(z,{value:e.value,children:e.label},e.value))]})]})})]},t.key)):(0,Q.jsx)(U,{children:(0,Q.jsx)(W,{className:`text-muted-foreground`,colSpan:3,children:`No data found in the uploaded CSV.`})})})]})})}),i&&r&&(0,Q.jsx)(`p`,{className:`text-sm text-red-600`,children:r}),a>0&&(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If an email address in your CSV matches an existing member, they will be updated with the mapped values.`}),(0,Q.jsxs)(`div`,{className:`mt-5`,children:[(0,Q.jsx)(`label`,{className:`mb-1 block text-sm font-semibold`,children:`Label these members`}),(0,Q.jsx)(Bn,{isCreating:u.isCreating,labels:u.labels,optionSource:u.optionSource,resolvedSelectedLabels:u.resolvedSelectedLabels,selectedSlugs:u.selectedSlugs,onCreate:u.createLabel,onDelete:u.deleteLabel,onEdit:u.editLabel,onToggle:u.toggleLabel})]})]})}),(0,Q.jsxs)(q,{className:`mt-5`,children:[(0,Q.jsx)(J,{disabled:e===`UPLOADING`,variant:`outline`,onClick:p,children:`Start over`}),(0,Q.jsx)(J,{disabled:e===`UPLOADING`||a===0,onClick:m,children:e===`UPLOADING`?(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(nt,{color:`light`,size:`sm`}),`Uploading`]}):a>0?`Import ${S(a)} ${a===1?`member`:`members`}`:`Import members`})]})]})}function lr({onUploadAnotherFile:e,onClose:t}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5`,children:(0,Q.jsx)(`p`,{className:`text-sm`,children:`Your import is being processed, and you'll receive a confirmation email as soon as it's complete. Usually this only takes a few minutes, but larger imports may take longer.`})}),(0,Q.jsxs)(q,{className:`mt-5`,children:[(0,Q.jsx)(J,{variant:`outline`,onClick:e,children:`Upload another file`}),(0,Q.jsx)(J,{onClick:t,children:`Got it`})]})]})}var ur=()=>({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 dr({importResponse:e,onReset:t,onClose:n}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`mt-5 space-y-4`,children:[e.importedCount===0?(0,Q.jsxs)(`p`,{className:`text-sm`,children:[`No members were added`,e.errorCount>0?` due to the following errors:`:`.`]}):(0,Q.jsxs)(`p`,{className:`text-sm`,children:[`A total of `,(0,Q.jsx)(`strong`,{children: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&&(0,Q.jsxs)(Q.Fragment,{children:[e.importedCount>0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`hr`,{className:`border-grey-200`}),(0,Q.jsxs)(`p`,{className:`text-sm`,children:[(0,Q.jsx)(`strong`,{children:e.errorCount.toLocaleString()}),` `,e.errorCount===1?`member was`:`members were`,` skipped due to the following errors:`]})]}),(0,Q.jsx)(`ul`,{className:`list-inside list-disc space-y-1 text-sm text-muted-foreground`,children:e.errorList.map(e=>(0,Q.jsxs)(`li`,{children:[e.message,` (`,e.count,`)`]},e.message))})]})]}),(0,Q.jsx)(q,{className:`mt-5`,children:e.errorCount>0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(J,{variant:`outline`,asChild:!0,children:(0,Q.jsx)(`a`,{download:e.errorCsvName,href:e.errorCsvUrl,children:`Download error file`})}),e.importedCount===0?(0,Q.jsx)(J,{onClick:t,children:`Try again`}):(0,Q.jsx)(J,{onClick:n,children:`View members`})]}):(0,Q.jsx)(Q.Fragment,{children:e.importedCount===0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(J,{variant:`outline`,onClick:n,children:`Close`}),(0,Q.jsx)(J,{onClick:t,children:`Try again`})]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(J,{variant:`outline`,onClick:t,children:`Upload another file`}),(0,Q.jsx)(J,{onClick:n,children:`View members`})]})})})]})}function fr({errorMessage:e,showTryAgainButton:t,onTryAgain:n,onClose:r}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5`,children:(0,Q.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-red-600`,children:[(0,Q.jsx)(Ee,{className:`mt-0.5 size-4 shrink-0`}),(0,Q.jsx)(`p`,{children:e})]})}),(0,Q.jsxs)(q,{className:`mt-5`,children:[t&&(0,Q.jsx)(J,{variant:`outline`,onClick:n,children:`Try again`}),(0,Q.jsx)(J,{onClick:r,children:`OK`})]})]})}var pr=t(((e,t)=>{((n,r)=>{typeof define==`function`&&define.amd?define([],r):typeof t==`object`&&e!==void 0?t.exports=r():n.Papa=r()})(e,function e(){var t=typeof self<`u`?self:typeof window<`u`?window:t===void 0?{}:t,n,r=!t.document&&!!t.postMessage,i=t.IS_PAPA_WORKER||!1,a={},o=0,s={};function c(e){return e.charCodeAt(0)===65279?e.slice(1):e}function l(e){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(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null),this._handle=new m(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(e,n){var r=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0<r){let t=this._config.newline;t||=(a=this._config.quoteChar||`"`,this._handle.guessLineEndings(e,a)),e=[...e.split(t).slice(r)].join(t)}this.isFirstChunk&&S(this._config.beforeFirstChunk)&&(a=this._config.beforeFirstChunk(e))!==void 0&&(e=a),this.isFirstChunk=!1,this._halted=!1;var r=this._partialLine+e,a=(this._partialLine=``,this._handle.parse(r,this._baseIndex,!this._finished));if(!this._handle.paused()&&!this._handle.aborted()){if(e=a.meta.cursor,r=(this._finished||(this._partialLine=r.substring(e-this._baseIndex),this._baseIndex=e),a&&a.data&&(this._rowCount+=a.data.length),this._finished||this._config.preview&&this._rowCount>=this._config.preview),i)t.postMessage({results:a,workerId:s.WORKER_ID,finished:r});else if(S(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=a=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!r||!S(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),r||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){S(this._config.error)?this._config.error(e):i&&this._config.error&&t.postMessage({workerId:s.WORKER_ID,error:e,finished:!1})}}function u(e){var t;(e||={}).chunkSize||(e.chunkSize=s.RemoteChunkSize),l.call(this,e),this._nextChunk=r?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),r||(t.onload=x(this._chunkLoaded,this),t.onerror=x(this._chunkError,this)),t.open(this._config.downloadRequestBody?`POST`:`GET`,this._input,!r),this._config.downloadRequestHeaders){var e,n=this._config.downloadRequestHeaders;for(e in n)t.setRequestHeader(e,n[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,t.setRequestHeader(`Range`,`bytes=`+this._start+`-`+i));try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}r&&t.status===0&&this._chunkError()}},this._chunkLoaded=function(){t.readyState===4&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize||t.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>(e=e.getResponseHeader(`Content-Range`))===null?-1:parseInt(e.substring(e.lastIndexOf(`/`)+1)))(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){e=t.statusText||e,this._sendError(Error(e))}}function d(e){(e||={}).chunkSize||(e.chunkSize=s.LocalChunkSize),l.call(this,e);var t,n,r=typeof FileReader<`u`;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=x(this._chunkLoaded,this),t.onerror=x(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input,i=(this._config.chunkSize&&(i=Math.min(this._start+this._config.chunkSize,this._input.size),e=n.call(e,this._start,i)),t.readAsText(e,this._config.encoding));r||this._chunkLoaded({target:{result:i}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function f(e){var t;l.call(this,e||={}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){var e,n;if(!this._finished)return e=this._config.chunkSize,t=e?(n=t.substring(0,e),t.substring(e)):(n=t,``),this._finished=!t,this.parseChunk(n)}}function p(e){l.call(this,e||={});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(`data`,this._streamData),this._input.on(`end`,this._streamEnd),this._input.on(`error`,this._streamError)},this._checkIsFinished=function(){r&&t.length===1&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=x(function(e){try{t.push(typeof e==`string`?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=x(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=x(function(){this._streamCleanUp(),r=!0,this._streamData(``)},this),this._streamCleanUp=x(function(){this._input.removeListener(`data`,this._streamData),this._input.removeListener(`end`,this._streamEnd),this._input.removeListener(`error`,this._streamError)},this)}function m(e){var t,n,r,i,a=2**53,o=-a,l=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,u=/^((\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)))$/,d=this,f=0,p=0,m=!1,_=!1,v=[],y={data:[],errors:[],meta:{}};function x(t){return e.skipEmptyLines===`greedy`?t.join(``).trim()===``:t.length===1&&t[0].length===0}function C(){if(y&&r&&(T(`Delimiter`,`UndetectableDelimiter`,`Unable to auto-detect delimiting character; defaulted to '`+s.DefaultDelimiter+`'`),r=!1),e.skipEmptyLines&&(y.data=y.data.filter(function(e){return!x(e)})),w()){if(y)if(Array.isArray(y.data[0])){for(var t=0;w()&&t<y.data.length;t++)y.data[t].forEach(n);y.data.splice(0,1)}else y.data.forEach(n);function n(t,n){t=c(t),S(e.transformHeader)&&(t=e.transformHeader(t,n)),v.push(t)}}function n(t,n){for(var r=e.header?{}:[],i=0;i<t.length;i++){var s=i,c=t[i],c=((t,n)=>(t=>(e.dynamicTypingFunction&&e.dynamicTyping[t]===void 0&&(e.dynamicTyping[t]=e.dynamicTypingFunction(t)),!0===(e.dynamicTyping[t]||e.dynamicTyping)))(t)?n===`true`||n===`TRUE`||n!==`false`&&n!==`FALSE`&&((e=>{if(l.test(e)&&(e=parseFloat(e),o<e&&e<a))return 1})(n)?parseFloat(n):u.test(n)?new Date(n):n===``?null:n):n)(s=e.header?i>=v.length?`__parsed_extra`:v[i]:s,c=e.transform?e.transform(c,s):c);s===`__parsed_extra`?(r[s]=r[s]||[],r[s].push(c)):r[s]=c}return e.header&&(i>v.length?T(`FieldMismatch`,`TooManyFields`,`Too many fields: expected `+v.length+` fields but parsed `+i,p+n):i<v.length&&T(`FieldMismatch`,`TooFewFields`,`Too few fields: expected `+v.length+` fields but parsed `+i,p+n)),r}var i;y&&(e.header||e.dynamicTyping||e.transform)&&(i=1,!y.data.length||Array.isArray(y.data[0])?(y.data=y.data.map(n),i=y.data.length):y.data=n(y.data,0),e.header&&y.meta&&(y.meta.fields=v),p+=i)}function w(){return e.header&&v.length===0}function T(e,t,n,r){e={type:e,code:t,message:n},r!==void 0&&(e.row=r),y.errors.push(e)}S(e.step)&&(i=e.step,e.step=function(t){y=t,w()?C():(C(),y.data.length!==0&&(f+=t.data.length,e.preview&&f>e.preview?n.abort():(y.data=y.data[0],i(y,d))))}),this.parse=function(i,a,o){var c=e.quoteChar||`"`,c=(e.newline||=this.guessLineEndings(i,c),r=!1,e.delimiter?S(e.delimiter)&&(e.delimiter=e.delimiter(i),y.meta.delimiter=e.delimiter):((c=((t,n,r,i,a)=>{var o,c,l,u;a||=[`,`,` `,`|`,`;`,s.RECORD_SEP,s.UNIT_SEP];for(var d=0;d<a.length;d++){for(var f,p=a[d],m=0,h=0,_=0,v=(l=void 0,new g({comments:i,delimiter:p,newline:n,preview:10}).parse(t)),y=0;y<v.data.length;y++)r&&x(v.data[y])?_++:(f=v.data[y].length,h+=f,l===void 0?l=f:0<f&&(m+=Math.abs(f-l),l=f));0<v.data.length&&(h/=v.data.length-_),(c===void 0||m<=c)&&(u===void 0||u<h)&&1.99<h&&(c=m,o=p,u=h)}return{successful:!!(e.delimiter=o),bestDelimiter:o}})(i,e.newline,e.skipEmptyLines,e.comments,e.delimitersToGuess)).successful?e.delimiter=c.bestDelimiter:(r=!0,e.delimiter=s.DefaultDelimiter),y.meta.delimiter=e.delimiter),b(e));return e.preview&&e.header&&c.preview++,t=i,n=new g(c),y=n.parse(t,a,o),C(),m?{meta:{paused:!0}}:y||{meta:{paused:!1}}},this.paused=function(){return m},this.pause=function(){m=!0,n.abort(),t=S(e.chunk)?``:t.substring(n.getCharIndex())},this.resume=function(){d.streamer._halted?(m=!1,d.streamer.parseChunk(t,!0)):setTimeout(d.resume,3)},this.aborted=function(){return _},this.abort=function(){_=!0,n.abort(),y.meta.aborted=!0,S(e.complete)&&e.complete(y),t=``},this.guessLineEndings=function(e,t){e=e.substring(0,1048576);var t=RegExp(h(t)+`([^]*?)`+h(t),`gm`),n=(e=e.replace(t,``)).split(`\r`),t=e.split(`
2
- `),e=1<t.length&&t[0].length<n[0].length;if(n.length===1||e)return`
3
- `;for(var r=0,i=0;i<n.length;i++)n[i][0]===`
4
- `&&r++;return r>=n.length/2?`\r
5
- `:`\r`}}function h(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function g(e){var t=(e||={}).delimiter,n=e.newline,r=e.comments,i=e.step,a=e.preview,o=e.fastMode,l=null,u=!1,d=e.quoteChar==null?`"`:e.quoteChar,f=d;if(e.escapeChar!==void 0&&(f=e.escapeChar),(typeof t!=`string`||-1<s.BAD_DELIMITERS.indexOf(t))&&(t=`,`),r===t)throw Error(`Comment character same as delimiter`);!0===r?r=`#`:(typeof r!=`string`||-1<s.BAD_DELIMITERS.indexOf(r))&&(r=!1),n!==`
6
- `&&n!==`\r`&&n!==`\r
7
- `&&(n=`
8
- `);var p=0,m=!1;this.parse=function(s,g,_){if(typeof s!=`string`)throw Error(`Input must be a string`);var v=s.length,y=t.length,b=n.length,x=r.length,C=S(i),w=[],T=[],E=[],D=p=0;if(!s)return R();if(o||!1!==o&&s.indexOf(d)===-1){for(var O=s.split(n),k=0;k<O.length;k++){if(E=O[k],p+=E.length,k!==O.length-1)p+=n.length;else if(_)return R();if(!r||E.substring(0,x)!==r){if(C){if(w=[],F(E.split(t)),z(),m)return R()}else F(E.split(t));if(a&&a<=k)return w=w.slice(0,a),R(!0)}}return R()}for(var A=s.indexOf(t,p),j=s.indexOf(n,p),M=new RegExp(h(f)+h(d),`g`),N=s.indexOf(d,p);;)if(s[p]===d)for(N=p,p++;;){if((N=s.indexOf(d,N+1))===-1)return _||T.push({type:`Quotes`,code:`MissingQuotes`,message:`Quoted field unterminated`,row:w.length,index:p}),L();if(N===v-1)return L(s.substring(p,N).replace(M,d));if(d===f&&s[N+1]===f)N++;else if(d===f||N===0||s[N-1]!==f){A!==-1&&A<N+1&&(A=s.indexOf(t,N+1));var P=I((j=j!==-1&&j<N+1?s.indexOf(n,N+1):j)===-1?A:Math.min(A,j));if(s.substr(N+1+P,y)===t){E.push(s.substring(p,N).replace(M,d)),s[p=N+1+P+y]!==d&&(N=s.indexOf(d,p)),A=s.indexOf(t,p),j=s.indexOf(n,p);break}if(P=I(j),s.substring(N+1+P,N+1+P+b)===n){if(E.push(s.substring(p,N).replace(M,d)),ee(N+1+P+b),A=s.indexOf(t,p),N=s.indexOf(d,p),C&&(z(),m))return R();if(a&&w.length>=a)return R(!0);break}T.push({type:`Quotes`,code:`InvalidQuotes`,message:`Trailing quote on quoted field is malformed`,row:w.length,index:p}),N++}}else if(r&&E.length===0&&s.substring(p,p+x)===r){if(j===-1)return R();p=j+b,j=s.indexOf(n,p),A=s.indexOf(t,p)}else if(A!==-1&&(A<j||j===-1))E.push(s.substring(p,A)),p=A+y,A=s.indexOf(t,p);else{if(j===-1)break;if(E.push(s.substring(p,j)),ee(j+b),C&&(z(),m))return R();if(a&&w.length>=a)return R(!0)}return L();function F(e){w.push(e),D=p}function I(e){var t=0;return t=e!==-1&&(e=s.substring(N+1,e))&&e.trim()===``?e.length:t}function L(e){return _||(e===void 0&&(e=s.substring(p)),E.push(e),p=v,F(E),C&&z()),R()}function ee(e){p=e,F(E),E=[],j=s.indexOf(n,p)}function R(r){if(e.header&&!g&&w.length&&!u){var i=w[0],a=Object.create(null),o=new Set(i);let t=!1;for(let n=0;n<i.length;n++){let r=c(i[n]);if(a[r=S(e.transformHeader)?e.transformHeader(r,n):r]){let e,s=a[r];for(;e=r+`_`+s,s++,o.has(e););o.add(e),i[n]=e,a[r]++,t=!0,(l=l===null?{}:l)[e]=r}else a[r]=1,i[n]=r;o.add(r)}t&&console.warn(`Duplicate headers found and renamed.`),u=!0}return{data:w,errors:T,meta:{delimiter:t,linebreak:n,aborted:m,truncated:!!r,cursor:D+(g||0),renamedHeaders:l}}}function z(){i(R()),w=[],T=[]}},this.abort=function(){m=!0},this.getCharIndex=function(){return p}}function _(e){var t=e.data,n=a[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var i={abort:function(){r=!0,v(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:y,resume:y};if(S(n.userStep)){for(var o=0;o<t.results.data.length&&(n.userStep({data:t.results.data[o],errors:t.results.errors,meta:t.results.meta},i),!r);o++);delete t.results}else S(n.userChunk)&&(n.userChunk(t.results,i,t.file),delete t.results)}t.finished&&!r&&v(t.workerId,t.results)}function v(e,t){var n=a[e];S(n.userComplete)&&n.userComplete(t),n.terminate(),delete a[e]}function y(){throw Error(`Not implemented.`)}function b(e){if(typeof e!=`object`||!e)return e;var t,n=Array.isArray(e)?[]:{};for(t in e)n[t]=b(e[t]);return n}function x(e,t){return function(){e.apply(t,arguments)}}function S(e){return typeof e==`function`}return s.parse=function(n,r){var i=(r||={}).dynamicTyping||!1;if(S(i)&&(r.dynamicTypingFunction=i,i={}),r.dynamicTyping=i,r.transform=!!S(r.transform)&&r.transform,!r.worker||!s.WORKERS_SUPPORTED)return i=null,s.NODE_STREAM_INPUT,typeof n==`string`?(n=c(n),i=new(r.download?u:f)(r)):!0===n.readable&&S(n.read)&&S(n.on)?i=new p(r):(t.File&&n instanceof File||n instanceof Object)&&(i=new d(r)),i.stream(n);(i=(()=>{var n;return!!s.WORKERS_SUPPORTED&&(n=(()=>{var n=t.URL||t.webkitURL||null,r=e.toString();return s.BLOB_URL||=n.createObjectURL(new Blob([`var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; `,`(`,r,`)();`],{type:`text/javascript`}))})(),(n=new t.Worker(n)).onmessage=_,n.id=o++,a[n.id]=n)})()).userStep=r.step,i.userChunk=r.chunk,i.userComplete=r.complete,i.userError=r.error,r.step=S(r.step),r.chunk=S(r.chunk),r.complete=S(r.complete),r.error=S(r.error),delete r.worker,i.postMessage({input:n,config:r,workerId:i.id})},s.unparse=function(e,t){var n=!1,r=!0,i=`,`,a=`\r
9
- `,o=`"`,c=o+o,l=!1,u=null,d=!1,f=((()=>{if(typeof t==`object`){if(typeof t.delimiter!=`string`||s.BAD_DELIMITERS.filter(function(e){return t.delimiter.indexOf(e)!==-1}).length||(i=t.delimiter),typeof t.quotes!=`boolean`&&typeof t.quotes!=`function`&&!Array.isArray(t.quotes)||(n=t.quotes),typeof t.skipEmptyLines!=`boolean`&&typeof t.skipEmptyLines!=`string`||(l=t.skipEmptyLines),typeof t.newline==`string`&&(a=t.newline),typeof t.quoteChar==`string`&&(o=t.quoteChar,c=o+o),typeof t.header==`boolean`&&(r=t.header),Array.isArray(t.columns)){if(t.columns.length===0)throw Error(`Option columns is empty`);u=t.columns}t.escapeChar!==void 0&&(c=t.escapeChar+o),t.escapeFormulae instanceof RegExp?d=t.escapeFormulae:typeof t.escapeFormulae==`boolean`&&t.escapeFormulae&&(d=/^[=+\-@\t\r].*$/)}})(),new RegExp(h(o),`g`));if(typeof e==`string`&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return p(null,e,l);if(typeof e[0]==`object`)return p(u||Object.keys(e[0]),e,l)}else if(typeof e==`object`)return typeof e.data==`string`&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||=e.meta&&e.meta.fields||u,e.fields||=Array.isArray(e.data[0])?e.fields:typeof e.data[0]==`object`?Object.keys(e.data[0]):[],Array.isArray(e.data[0])||typeof e.data[0]==`object`||(e.data=[e.data])),p(e.fields||[],e.data||[],l);throw Error(`Unable to serialize unrecognized input`);function p(e,t,n){var o=``,s=(typeof e==`string`&&(e=JSON.parse(e)),typeof t==`string`&&(t=JSON.parse(t)),Array.isArray(e)&&0<e.length),c=!Array.isArray(t[0]);if(s&&r){for(var l=0;l<e.length;l++)0<l&&(o+=i),o+=m(e[l],l);0<t.length&&(o+=a)}for(var u=0;u<t.length;u++){var d=(s?e:t[u]).length,f=!1,p=s?Object.keys(t[u]).length===0:t[u].length===0;if(n&&!s&&(f=n===`greedy`?t[u].join(``).trim()===``:t[u].length===1&&t[u][0].length===0),n===`greedy`&&s){for(var h=[],g=0;g<d;g++){var _=c?e[g]:g;h.push(t[u][_])}f=h.join(``).trim()===``}if(!f){for(var v=0;v<d;v++){0<v&&!p&&(o+=i);var y=s&&c?e[v]:v;o+=m(t[u][y],v)}u<t.length-1&&(!n||0<d&&!p)&&(o+=a)}}return o}function m(e,t){var r,a,l;return e==null?``:e.constructor===Date?JSON.stringify(e).slice(1,25):(l=!1,d&&typeof e==`string`&&d.test(e)&&(e=`'`+e,l=!0),a=(r=e.toString()).replace(f,c),(l=l||!0===n||typeof n==`function`&&n(e,t)||Array.isArray(n)&&n[t]||((e,t)=>{for(var n=0;n<t.length;n++)if(-1<e.indexOf(t[n]))return!0;return!1})(a,s.BAD_DELIMITERS)||-1<a.indexOf(i)||-1<r.indexOf(o)||a.charAt(0)===` `||a.charAt(a.length-1)===` `)?o+a+o:a)}},s.RECORD_SEP=``,s.UNIT_SEP=``,s.BYTE_ORDER_MARK=``,s.BAD_DELIMITERS=[`\r`,`
10
- `,`"`,s.BYTE_ORDER_MARK],s.WORKERS_SUPPORTED=!r&&!!t.Worker,s.NODE_STREAM_INPUT=1,s.LocalChunkSize=10485760,s.RemoteChunkSize=5242880,s.DefaultDelimiter=`,`,s.Parser=g,s.ParserHandle=m,s.NetworkStreamer=u,s.FileStreamer=d,s.StringStreamer=f,s.ReadableStreamStreamer=p,t.jQuery&&((n=t.jQuery).fn.parse=function(e){var r=e.config||{},i=[];return this.each(function(e){if(!(n(this).prop(`tagName`).toUpperCase()===`INPUT`&&n(this).attr(`type`).toLowerCase()===`file`&&t.FileReader)||!this.files||this.files.length===0)return!0;for(var a=0;a<this.files.length;a++)i.push({file:this.files[a],inputElem:this,instanceConfig:n.extend({},r)})}),a(),this;function a(){if(i.length===0)S(e.complete)&&e.complete();else{var t,r,a,c,l=i[0];if(S(e.before)){var u=e.before(l.file,l.inputElem);if(typeof u==`object`){if(u.action===`abort`)return t=`AbortError`,r=l.file,a=l.inputElem,c=u.reason,void(S(e.error)&&e.error({name:t},r,a,c));if(u.action===`skip`)return void o();typeof u.config==`object`&&(l.instanceConfig=n.extend(l.instanceConfig,u.config))}else if(u===`skip`)return void o()}var d=l.instanceConfig.complete;l.instanceConfig.complete=function(e){S(d)&&d(e,l.file,l.inputElem),o()},s.parse(l.file,l.instanceConfig)}}function o(){i.splice(0,1),a()}}),i&&(t.onmessage=function(e){e=e.data,s.WORKER_ID===void 0&&e&&(s.WORKER_ID=e.workerId),typeof e.input==`string`?t.postMessage({workerId:s.WORKER_ID,results:s.parse(e.input,e.config),finished:!0}):(t.File&&e.input instanceof File||e.input instanceof Object)&&(e=s.parse(e.input,e.config))&&t.postMessage({workerId:s.WORKER_ID,results:e,finished:!0})}),(u.prototype=Object.create(l.prototype)).constructor=u,(d.prototype=Object.create(l.prototype)).constructor=d,(f.prototype=Object.create(f.prototype)).constructor=f,(p.prototype=Object.create(l.prototype)).constructor=p,s})})),mr=e(w(),1),hr=e(pr(),1);function gr(e){let t=hr.default.parse(e,{header:!0,skipEmptyLines:!0});return!t.data||t.data.length<1?[]:t.data.map(e=>{let t={};for(let[n,r]of Object.entries(e))t[n]=typeof r==`string`?r:typeof r==`number`||typeof r==`boolean`?String(r):``;return t})}function _r(e){return e.length===0?``:hr.default.unparse(e,{quotes:!0})}function vr(e){let t=e.meta.stats.imported,n=e.meta.stats.invalid||[],r=n.length,i={},a=_r(n.map(e=>{let{errors:t,...n}=e,r=t.map(e=>sr(e).trim()).filter(Boolean);for(let e of r)i[e]?i[e].count+=1:i[e]={message:e,count:1};return{...n,error:r.join(`
11
- `)}})),o=new Blob([a],{type:`text/csv`}),s=URL.createObjectURL(o),c=e.meta.import_label;return{importedCount:t,errorCount:r,errorCsvUrl:s,errorCsvName:c?`${c.name} - Errors.csv`:`Import ${(0,mr.default)().format(`YYYY-MM-DD HH:mm`)} - Errors.csv`,errorList:Object.values(i),importLabel:e.meta.import_label||void 0}}function yr(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 ur();default:return e}}function br({open:e,onOpenChange:t,onComplete:n,onClose:r}){let[i,a]=(0,Z.useReducer)(yr,void 0,ur),s=(0,Z.useRef)(null),{mutateAsync:c}=ke(),l=Tt(`importMemberTier`),u=Tt(`membersCustomFields`),{data:m}=In({enabled:u}),h=(0,Z.useMemo)(()=>Fn(m?.members_custom_fields??[]),[m]),g=!u||m!==void 0,_=(0,Z.useRef)({importMemberTier:l,customFieldColumns:h});_.current={importMemberTier:l,customFieldColumns:h};let v=(0,Z.useMemo)(()=>er({importMemberTier:l,customFieldColumns:h}),[l,h]),y=zn({selectedSlugs:i.selectedLabelSlugs,onSelectionChange:e=>a({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}),b=(0,Z.useCallback)(()=>{s.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(s.current),s.current=null):s.current&&=null},[]),S=(0,Z.useCallback)(()=>{b(),a({type:`RESET`})},[b]);(0,Z.useEffect)(()=>()=>{b()},[b]);let C=(0,Z.useCallback)(e=>{if(!(!e&&i.status===`UPLOADING`)){if(!e){let e=i.importResponse??void 0;S(),r?.(e)}t(e)}},[r,t,S,i.importResponse,i.status]);(0,Z.useEffect)(()=>{if(!i.file||!g)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=gr(e);if(n.length>0){let e=new rr(or(n,_.current));a({type:`PARSE_SUCCESS`,fileData:n,mapping:e,mappingError:e.getKeyByValue(`email`)?null:`Please map "Email" to one of the fields in the CSV.`})}else a({type:`PARSE_SUCCESS`,fileData:[],mapping:null,mappingError:`File is empty, nothing to import. Please select a different file.`})}catch{a({type:`PARSE_FAILURE`,mappingError:`Failed to parse this file. Please try another CSV file.`})}},t.onerror=()=>{e||a({type:`PARSE_FAILURE`,mappingError:`Failed to read file${t.error?.message?`: ${t.error.message}`:``}`})},t.onabort=()=>{e||a({type:`PARSE_FAILURE`,mappingError:`File read was interrupted. Please try again.`})},t.readAsText(i.file),()=>{e=!0,t.readyState===FileReader.LOADING&&t.abort()}},[i.file,g]);let w=(0,Z.useCallback)(e=>{let t=/(?:\.([^.]+))?$/.exec(e.name)?.[1];return!t||t.toLowerCase()!==`csv`?(a({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`}),!1):(a({type:`SET_FILE_ERROR`,fileError:null}),!0)},[]),T=(0,Z.useCallback)(e=>{w(e)&&a({type:`SELECT_FILE`,file:e})},[w]),E=(0,Z.useCallback)((e,t)=>{if(!i.mapping)return;let n=i.mapping.updateMapping(e,t),r=i.fileData&&i.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.`;a({type:`UPDATE_MAPPING`,mapping:n,mappingError:r})},[i.fileData,i.mapping]),D=(0,Z.useCallback)(async()=>{if(!i.file||i.mappingError){a({type:`SET_SHOW_MAPPING_ERRORS`,showMappingErrors:!0});return}a({type:`UPLOAD_START`});let e=[];for(let t of i.selectedLabelSlugs){let n=y.labels.find(e=>e.slug===t);n&&e.push(n.name)}try{let t=await c({file:i.file,labels:e,mapping:i.mapping?.toJSON()});if(Kt(t)){let e=vr(t);b(),s.current=e.errorCsvUrl,a({type:`UPLOAD_COMPLETE`,importResponse:e}),n?.(e);return}a({type:`UPLOAD_ACCEPTED`}),n?.()}catch(e){if(e instanceof p){a({type:`UPLOAD_ERROR`,errorMessage:`The file you uploaded was larger than the maximum file size your server allows.`});return}let t=e instanceof d?e.data?.errors?.[0]:null;if(e instanceof o&&t?.code===`EMAIL_VERIFICATION_NEEDED`){a({type:`UPLOAD_ERROR`,errorMessage:t.message,errorHeader:`Woah there cowboy, that's a big list`,showTryAgainButton:!1}),n?.();return}if(e instanceof f||t?.type===`DataImportError`){a({type:`UPLOAD_ERROR`,errorMessage:t?.message||(e instanceof Error?e.message:`An unexpected error occurred, please try again`)});return}a({type:`UPLOAD_ERROR`,errorMessage:`An unexpected error occurred, please try again`})}},[i.file,i.mapping,i.mappingError,i.selectedLabelSlugs,y.labels,c,b,n]),O=i.fileData?!!i.fileData[i.dataPreviewIndex+1]:!1,k=i.dataPreviewIndex>0,A=i.fileData?.length??0,j=i.status===`MAPPING`||i.status===`UPLOADING`,M=(0,Z.useMemo)(()=>{switch(i.status){case`PROCESSING`:return`Import in progress`;case`COMPLETE`:return`Import complete`;case`ERROR`:return i.errorHeader;default:return`Import members`}},[i.errorHeader,i.status]);return(0,Q.jsx)(ze,{open:e,onOpenChange:C,children:(0,Q.jsxs)(Gt,{className:x(`gap-0`,j&&`max-w-2xl`,j&&`flex max-h-[calc(100vh-16vmin)] flex-col`),children:[(0,Q.jsxs)(xe,{children:[(0,Q.jsx)(Pe,{children:M}),(0,Q.jsx)(Ve,{className:`sr-only`,children:`Import members from a CSV file.`})]}),i.status===`INIT`&&(0,Q.jsx)(Yn,{fileError:i.fileError,onClose:()=>C(!1),onDropAccepted:T,onDropRejected:()=>a({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(i.status===`MAPPING`||i.status===`UPLOADING`)&&(0,Q.jsx)(cr,{dataPreviewIndex:i.dataPreviewIndex,fieldMappings:v,fileData:i.fileData,hasNextRecord:O,hasPrevRecord:k,labelPicker:y,mapping:i.mapping,mappingError:i.mappingError,membersCount:A,showMappingErrors:i.showMappingErrors,status:i.status,onDataPreviewIndexChange:e=>{a({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onStartOver:S,onUpdateMapping:E,onUpload:()=>void D()}),i.status===`PROCESSING`&&(0,Q.jsx)(lr,{onClose:()=>C(!1),onUploadAnotherFile:S}),i.status===`COMPLETE`&&i.importResponse&&(0,Q.jsx)(dr,{importResponse:i.importResponse,onClose:()=>C(!1),onReset:S}),i.status===`ERROR`&&(0,Q.jsx)(fr,{errorMessage:i.errorMessage,showTryAgainButton:i.showTryAgainButton,onClose:()=>C(!1),onTryAgain:S})]})})}function xr({importMemberTier:e=!1}={}){return[...Xn,...e?[Zn]:[]]}function Sr(e){let t=((Pn(e)?e.split(`.`).slice(1,2):[e])[0]??e).replace(/[._-]+/g,` `).trim();return t.charAt(0).toUpperCase()+t.slice(1)}function Cr({columnKey:e,isSaving:t,nameError:n,saveError:r,canRetry:i,onSubmit:a,onEdit:o,onCancel:s}){let[c,l]=(0,Z.useState)(()=>Sr(e)),[u,d]=(0,Z.useState)(Nn[0].id),f=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{f.current?.scrollIntoView({block:`nearest`})},[]);let p=()=>a(c,u);return(0,Q.jsxs)(`div`,{ref:f,className:`scroll-mb-8 space-y-3`,"data-testid":`import-create-custom-field`,onKeyDown:e=>{if(e.key===`Escape`){e.stopPropagation(),t||s();return}e.key===`Enter`&&!t&&i&&(e.preventDefault(),p())},children:[(0,Q.jsxs)(ae,{className:`flex-row flex-wrap items-start gap-3`,children:[(0,Q.jsxs)(ce,{className:`min-w-56 flex-1`,"data-invalid":!!n||void 0,children:[(0,Q.jsx)(se,{className:`text-sm!`,htmlFor:`import-custom-field-name`,children:`Name`}),(0,Q.jsx)(ot,{"aria-invalid":!!n||void 0,autoComplete:`off`,className:`h-8 text-sm!`,id:`import-custom-field-name`,placeholder:`Enter custom field name`,value:c,autoFocus:!0,onChange:e=>{l(e.target.value),o()}}),n&&(0,Q.jsx)(oe,{children:n})]}),(0,Q.jsxs)(ce,{className:`w-44`,children:[(0,Q.jsx)(se,{className:`text-sm!`,children:`Type`}),(0,Q.jsxs)(ne,{value:u,onValueChange:e=>d(e),children:[(0,Q.jsx)(te,{"aria-label":`Type`,className:`h-8 text-sm!`,children:(0,Q.jsx)(V,{children:(0,Q.jsx)(Un,{type:u})})}),(0,Q.jsx)(B,{children:Nn.map(e=>(0,Q.jsx)(z,{value:e.id,children:(0,Q.jsx)(Un,{type:e.id})},e.id))})]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2 self-end pb-0.5`,children:[(0,Q.jsx)(J,{disabled:t,size:`sm`,variant:`outline`,onClick:s,children:`Cancel`}),(0,Q.jsx)(J,{disabled:t||!i,size:`sm`,onClick:p,children:t?`Saving`:`Save`})]})]}),r&&(0,Q.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:r})]})}var wr=`Membership field`,Tr=`Custom field`,Er=`Custom`,Dr={email:Ot,name:je,note:zt,subscribed_to_emails:Ht,stripe_customer_id:Ue,complimentary_plan:Je,labels:vt,created_at:Nt,gift_id:we,import_tier:at};function Or(e){let t=/^(.*) (\([^()]*\))$/.exec(e);return t?[t[1],t[2]]:[e,``]}function kr(e,t){return e.trim().toLowerCase()===t.trim().toLowerCase()}function Ar(e,t,n){return M((n??[]).join(` `),t)}function jr({value:e,className:t}){return(0,Q.jsx)(Dr[e]??qe,{className:t})}function Mr({className:e,columnKey:t,value:n,disabled:r,invalid:i,fieldMappings:a,customFieldMappings:o,open:s,search:c,onOpenChange:l,onSearchChange:u,onSelect:d,onCreateField:f,triggerRef:p}){let m=(0,Z.useRef)(!1),h=o.find(e=>e.value===n),g=a.find(e=>e.value===n),_=h??g,[v,y]=Or(_?.label??``),b=h!==void 0&&a.some(e=>kr(e.label,h.label)),S=e=>{l(!1),d(e)};return(0,Q.jsxs)(Ut,{open:s,modal:!0,onOpenChange:e=>{r||l(e)},children:[(0,Q.jsx)(qt,{asChild:!0,children:(0,Q.jsxs)(J,{ref:p,"aria-disabled":r||void 0,"aria-invalid":i||void 0,"aria-label":_?`Field for ${t}, ${_.label}${h?`, ${Tr}`:``}`:`Field for ${t}, not chosen`,className:x(`h-(--control-height) w-full scroll-my-8 justify-start gap-2 px-2 font-normal`,e,`hover:text-current`,ee.invalidSelf,`aria-[invalid=true]:ring-2`,r&&`cursor-not-allowed hover:bg-transparent`),role:`combobox`,variant:`outline`,children:[(0,Q.jsxs)(`span`,{className:x(`flex shrink-0 items-center`,r&&`opacity-60`),children:[h&&(0,Q.jsx)(Hn,{className:`size-4 text-foreground`,type:h.type}),g&&(0,Q.jsx)(jr,{className:`size-4 text-foreground`,value:g.value}),!_&&(0,Q.jsx)(`span`,{className:`size-4 rounded-sm border border-dashed border-border-strong`})]}),_?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`span`,{className:x(`flex min-w-0 flex-1 items-baseline text-left text-sm font-medium`,r&&`opacity-60`),children:[(0,Q.jsx)(`span`,{className:`min-w-0 shrink-[999] truncate`,children:v}),y&&(0,Q.jsx)(`span`,{className:`min-w-0 truncate whitespace-pre`,children:` ${y}`})]}),b&&(0,Q.jsx)(ge,{className:x(`ms-2 shrink-0 max-md:hidden`,r&&`opacity-60`),variant:`secondary`,children:Er})]}):(0,Q.jsx)(`span`,{className:x(`min-w-0 truncate text-sm text-muted-foreground`,r&&`opacity-60`),children:`Select field`}),(0,Q.jsx)(rt,{className:`ms-auto size-4 shrink-0 opacity-50`})]})}),(0,Q.jsx)(it,{align:`start`,className:`flex max-h-(--radix-popover-content-available-height) w-(--radix-popover-trigger-width) min-w-64 flex-col p-0`,collisionPadding:16,onCloseAutoFocus:e=>{m.current&&(m.current=!1,e.preventDefault(),f())},children:(0,Q.jsxs)(L,{className:`min-h-0`,filter:Ar,children:[(0,Q.jsx)(A,{className:`h-(--control-height) shrink-0`,placeholder:`Search fields...`,value:c,onValueChange:u}),(0,Q.jsxs)(I,{className:`min-h-0 flex-1`,children:[(0,Q.jsx)(j,{heading:`${wr}s`,children:a.map(e=>(0,Q.jsxs)(P,{keywords:[e.label],value:e.value,onSelect:()=>S(e.value),children:[(0,Q.jsx)(jr,{value:e.value}),(0,Q.jsx)(`span`,{className:`truncate`,children:e.label}),n===e.value&&(0,Q.jsx)(N,{})]},e.value))}),(0,Q.jsx)(j,{heading:`${Tr}s`,children:o.map(e=>(0,Q.jsxs)(P,{keywords:[e.label],value:e.value,onSelect:()=>S(e.value),children:[(0,Q.jsx)(Hn,{type:e.type}),(0,Q.jsx)(`span`,{className:`truncate`,children:e.label}),n===e.value&&(0,Q.jsx)(N,{})]},e.value))}),(0,Q.jsx)(j,{forceMount:!0,children:(0,Q.jsxs)(P,{className:`font-semibold text-green`,value:`Add custom field`,forceMount:!0,onSelect:()=>{m.current=!0,l(!1)},children:[(0,Q.jsx)(St,{}),(0,Q.jsx)(`span`,{children:`Add custom field`})]})})]})]})})]})}function Nr(e,t,n){let r=new Set(e);return n?r.add(t):r.delete(t),r}function Pr(e){return Ln(e.type)?null:Fn([e])[0]?.value??null}function Fr({status:e,fileData:t,mapping:n,mappingError:r,showMappingErrors:i,dataPreviewIndex:l,fieldMappings:u,customFieldMappings:p,labelPicker:m,onUpdateMapping:h,onFieldCreated:g,onDataPreviewIndexChange:_,onStartOver:v,onColumnsChanged:y,onUpload:b}){let[C,w]=(0,Z.useState)(new Set),[T,E]=(0,Z.useState)(new Set),[D,O]=(0,Z.useState)(null),k=(0,Z.useRef)(new Map);(0,Z.useLayoutEffect)(()=>{let[e]=D?.columns??[];e&&k.current.get(e)?.scrollIntoView({block:`nearest`,behavior:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`})},[D]);let[A,j]=(0,Z.useState)(null),[M,N]=(0,Z.useState)(null),{mutateAsync:P,isPending:F}=Mn(),[I,L]=(0,Z.useState)(null),[ee,R]=(0,Z.useState)(null),[z,B]=(0,Z.useState)(!0),te=c(),V=(0,Z.useCallback)(()=>{L(null),R(null),B(!0)},[]),ne=e=>{let t=e instanceof d?e.data?.errors?.[0]:null;if(e instanceof f&&t?.property===`name`){L(a(e,`Invalid name`));return}R(a(e,e instanceof s?e.message:`Could not create the custom field, please try again.`)),B(!(e instanceof o)&&t?.type!==`NoPermissionError`),e instanceof o||te(e,{withToast:!1})},ie=async(e,t,n)=>{V();let r;try{r=(await P({name:t,type:n})).members_custom_fields?.[0]}catch(e){ne(e);return}if(!r){R(`The field was created, but this column could not be mapped to it. Choose it from the list.`),B(!1),te(Error(`Custom field create returned no field`));return}let i=Pr(r);if(g(e,i),j(null),O(null),i){k.current.get(e)?.focus();return}se(e,r.name)},ae=e=>!!A&&A!==e.key,oe=t=>e===`UPLOADING`||F,se=(e,t)=>{V(),j(null),N({columnKey:e,search:t})},ce=e=>{V(),j(e)},le=(e,t)=>{let r=n?.getKeyByValue(t);r&&r!==e.key&&w(e=>Nr(e,r,!0)),h(e.key,t)},ue=e=>!T.has(e.key)&&(!!e.mapTo||C.has(e.key)),de=(e,t)=>{O(null),y(),E(n=>Nr(n,e.key,!t)),w(n=>Nr(n,e.key,t&&!e.mapTo)),!t&&A===e.key&&j(null)},he=i&&r||D?.message,ge=!!he&&!D?.columns.size,G=t.length,_e=l>0,ve=!!t[l+1],ye=(0,Z.useMemo)(()=>ir(t),[t]),K=n?ye.map(e=>({key:e,value:t[l]?.[e]??``,mapTo:n.get(e)})):[],be=Object.fromEntries(K.map(e=>[e.key,ue(e)?e.mapTo:``])),xe=()=>{if(r)return null;if(!Object.values(be).includes(`email`))return{message:`Please map "Email" to one of the fields in the CSV, and make sure it is selected.`,columns:new Set};let e=Object.keys(be).filter(e=>be[e]===null);return e.length===0?null:{message:`Choose a field for ${e.map(e=>`"${e}"`).join(`, `)}, or deselect ${e.length===1?`it`:`them`}.`,columns:new Set(e)}};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`mt-5 flex min-h-0 flex-1 flex-col space-y-5`,children:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:x(`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,ge&&`border-destructive`),children:(0,Q.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,Q.jsxs)(me,{className:`table-fixed`,children:[(0,Q.jsx)(pe,{children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(H,{className:`w-10`,children:(0,Q.jsx)(`span`,{className:`sr-only`,children:`Import this column`})}),(0,Q.jsx)(H,{className:`w-[26%]`,children:`Field`}),(0,Q.jsx)(H,{className:`w-[30%]`,children:(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsxs)(`span`,{children:[`Sample data `,(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(#`,S(l+1),`)`]})]}),(0,Q.jsxs)(`div`,{className:`flex items-center`,children:[(0,Q.jsx)(`button`,{"aria-label":`Show previous sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!_e&&`cursor-default opacity-30`),disabled:!_e||e===`UPLOADING`,type:`button`,onClick:()=>_(l-1),children:(0,Q.jsx)(yt,{className:`size-4`})}),(0,Q.jsx)(`button`,{"aria-label":`Show next sample row`,className:x(`rounded p-0.5 hover:bg-muted`,!ve&&`cursor-default opacity-30`),disabled:!ve||e===`UPLOADING`,type:`button`,onClick:()=>_(l+1),children:(0,Q.jsx)(Rt,{className:`size-4`})})]})]})}),(0,Q.jsx)(H,{className:`w-[38%]`,children:`Import as`})]})}),(0,Q.jsx)(fe,{children:K.length>0?K.map(e=>(0,Q.jsxs)(Z.Fragment,{children:[(0,Q.jsxs)(U,{className:x(`transition-opacity [&>td]:group-hover:bg-transparent`,!ue(e)&&`bg-muted/50`,ae(e)&&`opacity-40`),children:[(0,Q.jsx)(W,{children:(0,Q.jsx)(re,{"aria-label":`Import ${e.key}`,checked:ue(e),disabled:oe(e),onCheckedChange:t=>de(e,t===!0)})}),(0,Q.jsx)(W,{className:x(`text-sm font-medium break-all`,!ue(e)&&`text-muted-foreground`),children:e.key}),(0,Q.jsx)(W,{className:x(`text-sm break-all`,(!e.value||!ue(e))&&`text-muted-foreground`),children:e.value||`\xA0`}),(0,Q.jsx)(W,{children:(0,Q.jsx)(Mr,{className:x(!ue(e)&&`invisible`),columnKey:e.key,customFieldMappings:p,disabled:oe(e),fieldMappings:u,invalid:D?.columns.has(e.key),open:M?.columnKey===e.key,search:M?.columnKey===e.key?M.search:``,triggerRef:t=>{t?k.current.set(e.key,t):k.current.delete(e.key)},value:e.mapTo,onCreateField:()=>ce(e.key),onOpenChange:t=>t?se(e.key,``):N(null),onSearchChange:t=>N({columnKey:e.key,search:t}),onSelect:t=>{O(null),le(e,t)}})})]}),A===e.key&&(0,Q.jsx)(U,{className:`bg-transparent hover:bg-transparent`,children:(0,Q.jsx)(W,{className:`p-2`,colSpan:4,children:(0,Q.jsx)(`div`,{className:`rounded-lg border bg-surface-elevated-2 p-3 shadow-lg`,children:(0,Q.jsx)(Cr,{canRetry:z,columnKey:e.key,isSaving:F,nameError:I,saveError:ee,onCancel:()=>{V(),j(null),k.current.get(e.key)?.focus()},onEdit:V,onSubmit:(t,n)=>void ie(e.key,t,n)})})})})]},e.key)):(0,Q.jsx)(U,{children:(0,Q.jsx)(W,{className:`text-muted-foreground`,colSpan:4,children:`No data found in the uploaded CSV.`})})})]})})}),he&&(0,Q.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:he}),G>0&&(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If an email address in your CSV matches an existing member, they will be updated with the mapped values.`}),(0,Q.jsxs)(`div`,{className:`mt-5`,children:[(0,Q.jsx)(`label`,{className:`mb-1 block text-sm font-semibold`,children:`Label these members`}),(0,Q.jsx)(Bn,{isCreating:m.isCreating,labels:m.labels,optionSource:m.optionSource,resolvedSelectedLabels:m.resolvedSelectedLabels,selectedSlugs:m.selectedSlugs,onCreate:m.createLabel,onDelete:m.deleteLabel,onEdit:m.editLabel,onToggle:m.toggleLabel})]})]})}),(0,Q.jsxs)(q,{className:`mt-5`,children:[(0,Q.jsx)(J,{disabled:e===`UPLOADING`,variant:`outline`,onClick:v,children:`Start over`}),(0,Q.jsx)(J,{disabled:e===`UPLOADING`||G===0,onClick:()=>{let e=xe();if(e){O(e);return}b(be)},children:e===`UPLOADING`?(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(nt,{color:`light`,size:`sm`}),`Uploading`]}):G>0?`Import ${S(G)} ${G===1?`member`:`members`}`:`Import members`})]})]})}function Ir({open:e,onOpenChange:t,onComplete:n,onClose:r}){let[i,s]=(0,Z.useReducer)(yr,void 0,ur),c=(0,Z.useRef)(null),{mutateAsync:l}=ke(),u=Tt(`importMemberTier`),{data:m,isError:h}=In(),g=(0,Z.useMemo)(()=>Fn(m?.members_custom_fields??[]),[m]),_=m!==void 0||h,v=(0,Z.useRef)({importMemberTier:u,customFieldColumns:g});(0,Z.useLayoutEffect)(()=>{v.current={importMemberTier:u,customFieldColumns:g}},[u,g]);let y=(0,Z.useMemo)(()=>xr({importMemberTier:u}),[u]),b=zn({selectedSlugs:i.selectedLabelSlugs,onSelectionChange:e=>{D(!0),s({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}}),S=(0,Z.useCallback)(()=>{c.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(c.current),c.current=null):c.current&&=null},[]),C=(0,Z.useCallback)(()=>{S(),D(!1),s({type:`RESET`})},[S]);(0,Z.useEffect)(()=>()=>{S()},[S]);let{confirm:w,dialogProps:T}=bn(),[E,D]=(0,Z.useState)(!1),O=(0,Z.useCallback)(e=>{if(!(!e&&i.status===`UPLOADING`)){if(!e){w(i.status===`MAPPING`&&E,()=>{let e=i.importResponse??void 0;C(),r?.(e),t(!1)});return}t(e)}},[w,E,r,t,C,i.importResponse,i.status]);(0,Z.useEffect)(()=>{if(!i.file||!_)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=gr(e);if(n.length>0){let e=new rr(or(n,v.current));s({type:`PARSE_SUCCESS`,fileData:n,mapping:e,mappingError:null})}else s({type:`PARSE_SUCCESS`,fileData:[],mapping:null,mappingError:`File is empty, nothing to import. Please select a different file.`})}catch{s({type:`PARSE_FAILURE`,mappingError:`Failed to parse this file. Please try another CSV file.`})}},t.onerror=()=>{e||s({type:`PARSE_FAILURE`,mappingError:`Failed to read file${t.error?.message?`: ${t.error.message}`:``}`})},t.onabort=()=>{e||s({type:`PARSE_FAILURE`,mappingError:`File read was interrupted. Please try again.`})},t.readAsText(i.file),()=>{e=!0,t.readyState===FileReader.LOADING&&t.abort()}},[i.file,_]);let k=(0,Z.useCallback)(e=>{let t=/(?:\.([^.]+))?$/.exec(e.name)?.[1];return!t||t.toLowerCase()!==`csv`?(s({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`}),!1):(s({type:`SET_FILE_ERROR`,fileError:null}),!0)},[]),A=(0,Z.useCallback)(e=>{k(e)&&s({type:`SELECT_FILE`,file:e})},[k]),j=(0,Z.useCallback)((e,t)=>{if(!i.mapping)return;D(!0);let n=i.mapping.updateMapping(e,t),r=i.fileData&&i.fileData.length===0?`File is empty, nothing to import. Please select a different file.`:null;s({type:`UPDATE_MAPPING`,mapping:n,mappingError:r})},[i.fileData,i.mapping]),M=(0,Z.useCallback)((e,t)=>{t&&j(e,t)},[j]),N=(0,Z.useCallback)(async e=>{if(!i.file||i.mappingError){s({type:`SET_SHOW_MAPPING_ERRORS`,showMappingErrors:!0});return}s({type:`UPLOAD_START`});let t=[];for(let e of i.selectedLabelSlugs){let n=b.labels.find(t=>t.slug===e);n&&t.push(n.name)}try{let r=await l({file:i.file,labels:t,mapping:e});if(Kt(r)){let e=vr(r);S(),c.current=e.errorCsvUrl,s({type:`UPLOAD_COMPLETE`,importResponse:e}),n?.(e);return}s({type:`UPLOAD_ACCEPTED`}),n?.()}catch(e){if(e instanceof p){s({type:`UPLOAD_ERROR`,errorMessage:`The file you uploaded was larger than the maximum file size your server allows.`});return}let t=e instanceof d?e.data?.errors?.[0]:null;if(e instanceof o&&t?.code===`EMAIL_VERIFICATION_NEEDED`){s({type:`UPLOAD_ERROR`,errorMessage:a(e,e.message),errorHeader:`Woah there cowboy, that's a big list`,showTryAgainButton:!1}),n?.();return}if(e instanceof f||t?.type===`DataImportError`){s({type:`UPLOAD_ERROR`,errorMessage:a(e,e instanceof Error?e.message:`An unexpected error occurred, please try again`)});return}s({type:`UPLOAD_ERROR`,errorMessage:`An unexpected error occurred, please try again`})}},[i.file,i.mappingError,i.selectedLabelSlugs,b.labels,l,S,n]),P=i.status===`MAPPING`||i.status===`UPLOADING`,F=(0,Z.useMemo)(()=>{switch(i.status){case`PROCESSING`:return`Import in progress`;case`COMPLETE`:return`Import complete`;case`ERROR`:return i.errorHeader;default:return`Import members`}},[i.errorHeader,i.status]);return(0,Q.jsxs)(ze,{open:e,onOpenChange:O,children:[(0,Q.jsxs)(Gt,{className:x(`gap-0`,P&&`max-w-4xl`,P&&`flex max-h-[calc(100vh-16vmin)] flex-col`),children:[(0,Q.jsxs)(xe,{children:[(0,Q.jsx)(Pe,{children:F}),(0,Q.jsx)(Ve,{className:`sr-only`,children:`Import members from a CSV file.`})]}),i.status===`INIT`&&(0,Q.jsx)(Yn,{fileError:i.fileError,onClose:()=>O(!1),onDropAccepted:A,onDropRejected:()=>s({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(i.status===`MAPPING`||i.status===`UPLOADING`)&&i.fileData===null&&(0,Q.jsx)(`div`,{className:`flex items-center justify-center rounded-md border bg-muted p-10`,children:(0,Q.jsx)(nt,{size:`md`})}),(i.status===`MAPPING`||i.status===`UPLOADING`)&&i.fileData!==null&&(0,Q.jsx)(Fr,{customFieldMappings:g,dataPreviewIndex:i.dataPreviewIndex,fieldMappings:y,fileData:i.fileData,labelPicker:b,mapping:i.mapping,mappingError:i.mappingError,showMappingErrors:i.showMappingErrors,status:i.status,onColumnsChanged:()=>D(!0),onDataPreviewIndexChange:e=>{s({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onFieldCreated:M,onStartOver:C,onUpdateMapping:j,onUpload:e=>void N(e)}),i.status===`PROCESSING`&&(0,Q.jsx)(lr,{onClose:()=>O(!1),onUploadAnotherFile:C}),i.status===`COMPLETE`&&i.importResponse&&(0,Q.jsx)(dr,{importResponse:i.importResponse,onClose:()=>O(!1),onReset:C}),i.status===`ERROR`&&(0,Q.jsx)(fr,{errorMessage:i.errorMessage,showTryAgainButton:i.showTryAgainButton,onClose:()=>O(!1),onTryAgain:C})]}),(0,Q.jsx)(wt,{open:T.open,onOpenChange:T.onOpenChange,children:(0,Q.jsxs)(ut,{className:`z-[1100]`,"data-testid":`import-members-leave-guard`,overlayClassName:`z-[1100]`,onEscapeKeyDown:e=>e.stopPropagation(),children:[(0,Q.jsxs)(gt,{children:[(0,Q.jsx)(ft,{children:`Leave without importing?`}),(0,Q.jsx)(Mt,{children:`The columns you have mapped will be lost.`})]}),(0,Q.jsxs)(Et,{children:[(0,Q.jsx)(ct,{children:`Keep mapping`}),(0,Q.jsx)(J,{variant:`destructive`,onClick:T.onConfirm,children:`Leave`})]})]})})]})}function Lr(e){return Tt(`membersCustomFields`)?(0,Q.jsx)(Ir,{...e}):(0,Q.jsx)(br,{...e})}var Rr=`count.active_stripe_customers`,zr=`${Rr}:>1`,Br=`${Rr}:<2`,Vr=lt({multipleActiveSubscriptionsBanner:lt({dismissedCount:At().finite().optional().catch(void 0),dismissedAt:et().optional().catch(void 0)}).optional().catch(void 0)});function Hr(e){return e===zr}function Ur(e){if(!e)return Vr.parse({});try{let t=JSON.parse(e);return Vr.parse(t)}catch{return Vr.parse({})}}function Wr(e){return Ur(e).multipleActiveSubscriptionsBanner??{}}function Gr(e,t,n){let r=Ur(e),i=Wr(e);return JSON.stringify({...r,multipleActiveSubscriptionsBanner:{...i,dismissedCount:t,dismissedAt:n}})}function Kr(e,t,n){return{...e,accessibility:Gr(e.accessibility,t,n)}}var qr=[`is`,`contains`,`does-not-contain`,`starts-with`,`ends-with`],Jr=[`is`,`is-greater`,`is-less`],$=[`is`,`is-not`],Yr=[`is-any`,`is-not-any`],Xr=[{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`}],Zr={parse(){return null},serialize(e){let t=e.values[0];return e.operator!==`is`&&e.operator!==`is-not`?null:t===`email-disabled`?e.operator===`is`?[`(email_disabled:1)`]:[`(email_disabled:0)`]:t===`subscribed`?e.operator===`is`?[`(subscribed:true+email_disabled:0)`]:[`(subscribed:false,email_disabled:1)`]:t===`unsubscribed`?e.operator===`is`?[`(subscribed:false+email_disabled:0)`]:[`(subscribed:true,email_disabled:1)`]:null}},Qr={parse(){return null},serialize(e,t){let n=t.params.slug,r=e.values[0];return!n||e.operator!==`is`?null:r===`subscribed`?[`(newsletters.slug:${n}+email_disabled:0)`]:r===`unsubscribed`?[`(newsletters.slug:-${n},email_disabled:1)`]:null}},$r={parse(){return null},serialize(e){let t=e.values[0];return typeof t!=`string`||!t||e.operator!==`1`&&e.operator!==`0`?null:[`(feedback.post_id:${h(t)}+feedback.score:${e.operator})`]}},ei={parse(e,t){let n=yn(e);return!n||n.field!==t.key?null:n.operator===`$gt`&&n.value===1?{field:t.key,operator:`is`,values:[`true`]}:n.operator===`$lt`&&n.value===2?{field:t.key,operator:`is`,values:[`false`]}:null},serialize(e){let t=e.values[0];return e.operator===`is`?t===`true`?[zr]:t===`false`?[Br]:null:null}},ti=[`is-set`,`is-not-set`],ni=[...$,...qr.filter(e=>!$.includes(e)),...ti],ri={is:``,"is-not":`-`,contains:`~`,"does-not-contain":`-~`,"starts-with":`~^`,"ends-with":`~$`},ii={parse(){return null},serialize(e,t){let n=t.params.key,[r,i]=e.values;if(!n)return null;let a=`custom_fields.key:${h(n)}`;if(e.operator===`is-set`)return r?[`(${a}+custom_fields.path:${h(r)})`]:[a];if(e.operator===`is-not-set`)return r?[`(${a}+custom_fields.path:-${h(r)})`]:[`custom_fields.key:-${h(n)}`];let o=ri[e.operator];return o===void 0||i==null||i===``?null:[`(${a}+${r?`custom_fields.value.${r}`:`custom_fields.value`}:${o}${h(String(i))})`]}},ai=mn({name:{operators:qr,ui:{label:`Name`,type:`text`,placeholder:`Enter name...`,defaultOperator:`contains`,className:`w-48`},codec:cn()},email:{operators:qr,ui:{label:`Email`,type:`text`,placeholder:`Enter email...`,defaultOperator:`contains`,className:`w-48`},codec:cn()},label:{operators:Yr,ui:{label:`Label`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`labels`,label:`Labels`,include:`labels`}},codec:dn()},subscribed:{operators:$,ui:{label:`Newsletter subscription`,type:`select`,searchable:!1},options:[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`},{value:`email-disabled`,label:`Email disabled`}],codec:Zr},last_seen_at:{operators:rn,ui:{label:`Last seen`,type:`date`,defaultOperator:gn},codec:hn()},created_at:{operators:rn,ui:{label:`Created`,type:`date`,defaultOperator:gn},codec:hn()},signup:{operators:$,ui:{label:`Signed up on post/page`,type:`select`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`},codec:X({quoteStrings:!0})},"newsletters.:slug":{operators:[`is`],ui:{label:`Newsletter`,type:`select`,searchable:!1,hideOperatorSelect:!0},options:[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`}],codec:Qr},tier_id:{operators:Yr,ui:{label:`Membership tier`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`tiers`,label:`Tiers`,include:`tiers`}},codec:dn()},status:{operators:$,ui:{label:`Member status`,type:`select`,searchable:!1},options:[{value:`paid`,label:`Paid`},{value:`free`,label:`Free`},{value:`comped`,label:`Complimentary`}],codec:X()},"subscriptions.plan_interval":{operators:$,ui:{label:`Billing period`,type:`select`,searchable:!1},options:[{value:`month`,label:`Monthly`},{value:`year`,label:`Yearly`}],metadata:{activeColumn:{key:`subscriptions.plan_interval`,label:`Billing period`,include:`subscriptions`}},codec:X()},"subscriptions.status":{operators:$,ui:{label:`Stripe subscription status`,type:`select`,searchable:!1},options:Xr,metadata:{activeColumn:{key:`subscriptions.status`,label:`Subscription status`,include:`subscriptions`}},codec:X()},"subscriptions.start_date":{operators:rn,ui:{label:`Paid start date`,type:`date`,defaultOperator:gn},metadata:{activeColumn:{key:`subscriptions.start_date`,label:`Paid start date`,include:`subscriptions`}},codec:hn()},"subscriptions.current_period_end":{operators:rn,ui:{label:`Next billing date`,type:`date`,defaultOperator:gn},metadata:{activeColumn:{key:`subscriptions.current_period_end`,label:`Next billing date`,include:`subscriptions`}},codec:hn()},conversion:{operators:$,ui:{label:`Subscription started on post/page`,type:`select`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`},codec:X({quoteStrings:!0})},email_count:{operators:Jr,ui:{label:`Emails sent (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,className:`w-24`},codec:nn()},email_opened_count:{operators:Jr,ui:{label:`Emails opened (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,className:`w-24`},codec:nn()},email_open_rate:{operators:Jr,ui:{label:`Open rate (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,max:100,suffix:`%`,className:`w-24`},codec:nn()},"emails.post_id":{operators:$,ui:{label:`Sent email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:X({quoteStrings:!0})},"opened_emails.post_id":{operators:$,ui:{label:`Opened email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:X({quoteStrings:!0})},"clicked_links.post_id":{operators:$,ui:{label:`Clicked email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:X({quoteStrings:!0})},newsletter_feedback:{operators:[`1`,`0`],ui:{label:`Responded with feedback`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`,defaultOperator:`1`},codec:$r},offer_redemptions:{operators:Yr,ui:{label:`Offer`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`offer_redemptions`,label:`Offer`}},codec:dn({quoteStrings:!0,serializeSingletonAsScalar:!0})},[Rr]:{operators:[`is`],ui:{label:`Multiple active subscriptions`,type:`select`,searchable:!1,hideOperatorSelect:!0},options:[{value:`true`,label:`Yes`},{value:`false`,label:`No`}],codec:ei},"custom_field.:key":{operators:ni,ui:{label:`Custom field`,type:`custom`,component:`custom-field`},codec:ii}}),oi=mn({...ai,last_seen_at:_n(ai.last_seen_at),created_at:_n(ai.created_at),"subscriptions.start_date":_n(ai[`subscriptions.start_date`]),"subscriptions.current_period_end":Yt(ai[`subscriptions.current_period_end`])});function si(){return oi}var ci=2;function li(e){let t=new Map;for(let n of e){let e=tn(oi,n.field,`UTC`)?.definition.metadata?.activeColumn;e&&t.set(e.key,e)}return Array.from(t.values()).slice(0,ci)}function ui(e){let t=new Set([`labels`,`tiers`]);for(let n of li(e))n.include&&t.add(n.include);return Array.from(t).join(`,`)}function di({filters:e,nql:t,search:n}){if(!t&&!n)return;let r={include:ui(e),limit:`100`,order:`created_at desc`};return t&&(r.filter=t),n&&(r.search=n),r}function fi({nql:e,search:t}){return!e&&!t?{all:!0}:{...e?{filter:e}:{},...t?{search:t}:{}}}function pi(e,t){return e?{text:mr.default.tz(e,t).format(`D MMM YYYY`),subtext:(0,mr.default)(e).fromNow()}:null}function mi(e,t,n){switch(e.key){case`labels`:return t.labels?.length?{text:t.labels.map(e=>e.name).join(`, `)}:null;case`tiers`:return t.tiers?.length?{text:t.tiers.map(e=>e.name).join(`, `)}:null;case`subscriptions.plan_interval`:{let e=t.current_subscription?.plan?.interval;return e?{text:e===`month`?`Monthly`:`Yearly`}:null}case`subscriptions.status`:{let e=t.current_subscription?.status;return e?{text:e.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}:null}case`subscriptions.start_date`:return pi(t.current_subscription?.start_date,n);case`subscriptions.current_period_end`:return pi(t.current_subscription?.current_period_end,n);case`offer_redemptions`:{let e=t.subscriptions?.map(e=>e.offer?.name).filter(Boolean);return e?.length?{text:e.join(`, `)}:null}default:return null}}async function hi(e,t){let n=new URLSearchParams({limit:`all`});e&&n.set(`filter`,e),t&&n.set(`search`,t),await u(`/members/upload/?${n}`,`members.csv`)}var gi=({hasFilterOrSearch:e,memberCount:t,nql:n,search:r,canBulkDelete:i,showMenu:a=!0,showNewMember:o=!0,onImportComplete:s})=>{let c=y(),l=b(),u=c.pathname===`/members/import`,d=c.search??``,f=c.pathname===`/members`?`${c.pathname}${d}`:`/members`,p=`#/members/new?back=${encodeURIComponent(f)}`,[h,g]=(0,Z.useState)(!1),[_,v]=(0,Z.useState)(!1),[x,C]=(0,Z.useState)(!1),[w,T]=(0,Z.useState)(!1),{data:E,isLoading:D}=xn({searchParams:{filter:`status:-archived`,limit:`50`}}),O=E?.newsletters||[],{mutateAsync:k,isPending:A}=Se(),{mutate:j,isPending:M}=Be(),[N,P]=(0,Z.useState)(!1),F=fi({nql:n,search:r}),I=(0,Z.useCallback)(async()=>{try{await hi(n,r)}catch(e){throw m.error(`Export failed`,{description:`There was a problem downloading your member data. Please check your connection and try again.`}),e}},[n,r]),L=(0,Z.useCallback)(async e=>{try{for(let t of e)await k({...F,action:{type:`addLabel`,meta:{label:{id:t}}}});g(!1),m.success(e.length>1?`Labels added successfully`:`Label added successfully`)}catch{m.error(`Failed to add label`,{description:`There was a problem applying this label. Please try again.`})}},[k,F]),ee=(0,Z.useCallback)(async e=>{try{for(let t of e)await k({...F,action:{type:`removeLabel`,meta:{label:{id:t}}}});v(!1),m.success(e.length>1?`Labels removed successfully`:`Label removed successfully`)}catch{m.error(`Failed to remove label`,{description:`There was a problem removing this label. Please try again.`})}},[k,F]),R=(0,Z.useCallback)(async e=>{let t=F;if(e===null){try{await k({...t,action:{type:`unsubscribe`}}),C(!1),m.success(`Members unsubscribed successfully`)}catch{m.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}return}P(!0);try{let n=await Promise.allSettled(e.map(e=>k({...t,action:{type:`unsubscribe`,newsletter:e}}))),r=n.filter(e=>e.status===`fulfilled`).length,i=n.length;C(!1),r===i?m.success(`Unsubscribed from ${i} ${i===1?`newsletter`:`newsletters`}`):r>0?m.warning(`Unsubscribed from ${r} of ${i} newsletters`,{description:`Some newsletters could not be unsubscribed. Please try again.`}):m.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}catch{m.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}finally{P(!1)}},[k,F]),z=(0,Z.useCallback)(()=>{j(F,{onSuccess:()=>{T(!1),m.success(`Members deleted successfully`)},onError:()=>{m.error(`Failed to delete members`,{description:`There was a problem deleting these members. Please try again.`})}})},[j,F]),B=(0,Z.useCallback)(async()=>{try{await hi(n,r)}catch(e){throw m.error(`Export failed`,{description:`There was a problem downloading your backup. Please check your connection and try again.`}),e}},[n,r]),te=(0,Z.useCallback)(()=>{},[]),V=(0,Z.useCallback)(()=>{l(`/members/import${d}`)},[d,l]),ne=(0,Z.useCallback)(e=>{s?.(e)},[s]),re=(0,Z.useCallback)(e=>{if(e?.importLabel){l(Wn({filter:`label:[${e.importLabel.slug}]`}),{replace:!0});return}l(`/members${d}`,{replace:!0})},[d,l]);return(0,Q.jsxs)(Q.Fragment,{children:[a&&(0,Q.jsxs)(Xe,{children:[(0,Q.jsx)(tt,{asChild:!0,children:(0,Q.jsx)(J,{"data-testid":`members-actions`,variant:`outline`,children:(0,Q.jsx)(ve,{className:`size-4`})})}),(0,Q.jsxs)(Qe,{align:`end`,children:[(0,Q.jsxs)(G,{onClick:V,children:[(0,Q.jsx)(_e,{className:`mr-2 size-4`}),`Import members`]}),t>0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(G,{onClick:()=>void I(),children:[(0,Q.jsx)(Ke,{className:`mr-2 size-4`}),e?`Export ${S(t)} members`:`Export all members`]}),(0,Q.jsx)(It,{}),(0,Q.jsxs)(G,{onClick:()=>g(!0),children:[(0,Q.jsx)(Ft,{className:`mr-2 size-4`}),`Add label to `,S(t),` `,t===1?`member`:`members`]}),(0,Q.jsxs)(G,{onClick:()=>v(!0),children:[(0,Q.jsx)(vt,{className:`mr-2 size-4`}),`Remove label from `,S(t),` `,t===1?`member`:`members`]}),(0,Q.jsxs)(G,{disabled:D,onClick:()=>C(!0),children:[(0,Q.jsx)(Lt,{className:`mr-2 size-4`}),`Unsubscribe `,S(t),` `,t===1?`member`:`members`]}),(0,Q.jsx)(It,{}),(0,Q.jsxs)(G,{className:`text-destructive focus:text-destructive`,disabled:!i,onClick:()=>T(!0),children:[(0,Q.jsx)(Ye,{className:`mr-2 size-4`}),`Delete `,S(t),` `,t===1?`member`:`members`]})]})]})]}),o&&(0,Q.jsx)(J,{asChild:!0,children:(0,Q.jsxs)(`a`,{"aria-label":`New member`,className:`inline-flex items-center`,href:p,children:[(0,Q.jsx)(`span`,{className:`hidden sm:inline`,children:`New member`}),(0,Q.jsx)(`span`,{className:`sm:hidden`,children:(0,Q.jsx)(St,{})})]})}),(0,Q.jsx)(Lr,{open:u,onClose:re,onComplete:ne,onOpenChange:te}),(0,Q.jsx)(Gn,{isLoading:A,memberCount:t,open:h,onConfirm:e=>void L(e),onOpenChange:g}),(0,Q.jsx)(Kn,{isLoading:A,memberCount:t,nql:n,open:_,search:r,onConfirm:e=>void ee(e),onOpenChange:v}),(0,Q.jsx)(qn,{isLoading:A||N,memberCount:t,newsletters:O,open:x,onConfirm:e=>void R(e),onOpenChange:C}),(0,Q.jsx)(Jn,{isLoading:M,memberCount:t,open:w,onConfirm:z,onExportBackup:B,onOpenChange:T})]})},_i=({membershipsEnabled:e,onMemberCreated:t})=>{let{data:n,isLoading:r}=l(),{mutateAsync:i,isPending:a}=Re(),o=c(),s=(0,Z.useCallback)(async()=>{if(!(!n||a))try{await i({email:n.email,name:n.name}),m.success(`You've been added as a member`),await t?.()}catch(e){o(e)}},[i,n,o,a,t]);return e?(0,Q.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Q.jsx)(ie,{actions:(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col items-center gap-2 sm:flex-row`,children:[(0,Q.jsx)(J,{asChild:!0,children:(0,Q.jsx)(`a`,{href:`#/members/new?back=%2Fmembers`,children:`New member`})}),(0,Q.jsx)(J,{disabled:a||r||!n,variant:`outline`,onClick:()=>void s(),children:a?`Adding...`:`Add yourself as a member`})]}),(0,Q.jsxs)(`p`,{className:`text-sm leading-tight text-pretty text-muted-foreground`,children:[`Already have members? `,(0,Q.jsx)(`a`,{className:`font-medium text-foreground underline-offset-4 hover:underline`,href:`#/members/import`,children:`Import with CSV`})]})]}),description:`Use memberships to allow your readers to sign up and subscribe to your content.`,title:`Start building your audience`,children:(0,Q.jsx)(Ae,{})})}):(0,Q.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Q.jsx)(ie,{actions:(0,Q.jsx)(J,{variant:`outline`,asChild:!0,children:(0,Q.jsx)(`a`,{href:`#/settings/members`,children:`Membership settings`})}),description:`Adjust your membership settings to start adding members.`,title:`Memberships have been disabled`,children:(0,Q.jsx)(Ae,{})})})},vi=Vt.extend({route:st(`members`),filter:ht(et(),et().nullable()).refine(e=>typeof e.filter==`string`&&e.filter.length>0)}),yi=`A view with this name already exists`,bi=`Saved view could not be found for update`,xi=`Multiple saved views matched update target`,Si=`Saved view could not be found for delete`,Ci=`Multiple saved views matched delete target`;function wi(e){return vi.safeParse(e).success}function Ti(e){let t=$e(e);return t.ok?{ok:!0,views:t.views.filter(wi)}:t}function Ei(e,t){return{name:e.trim(),route:`members`,filter:{filter:t}}}function Di(e,t,n,r){let i=Ei(t,n);if(r){let t=mt(e,r);if(t.length===0)throw Error(bi);if(t.length>1)throw Error(xi);let n=t[0];if(dt(e,i,n))throw Error(yi);return e.map((e,t)=>t===n?i:e)}if(dt(e,i))throw Error(yi);return[...e,i]}function Oi(e,t){let n=mt(e,t);if(n.length===0)throw Error(Si);if(n.length>1)throw Error(Ci);let r=n[0];return e.filter((e,t)=>t!==r)}var ki=`Cannot modify saved views because shared_views is invalid`;function Ai(e){return K(e?.settings??null,`shared_views`)??`[]`}function ji(){let{data:e}=bt(),t=c(),n=Ai(e),r=(0,Z.useRef)(null),i=(0,Z.useMemo)(()=>Ti(n),[n]);return(0,Z.useEffect)(()=>{i.ok||r.current===n||(r.current=n,t(i.error,{withToast:!1}))},[t,i,n]),i.ok?i.views:[]}function Mi(){let{data:e}=bt(),{mutateAsync:t}=Me(),n=c();return(0,Z.useCallback)(async(r,i,a)=>{let o=$e(Ai(e));if(!o.ok){let e=Error(ki,{cause:o.error});throw n(e,{withToast:!1}),e}let s=Di(o.views,r,i,a);try{await t([{key:`shared_views`,value:JSON.stringify(s)}])}catch(e){throw n(e,{withToast:!1}),e}},[e,t,n])}function Ni(){let{data:e}=bt(),{mutateAsync:t}=Me(),n=c();return(0,Z.useCallback)(async r=>{let i=$e(Ai(e));if(!i.ok){let e=Error(ki,{cause:i.error});throw n(e,{withToast:!1}),e}let a=Oi(i.views,r);try{await t([{key:`shared_views`,value:JSON.stringify(a)}])}catch(e){throw n(e,{withToast:!1}),e}},[e,t,n])}function Pi(e,t){return(0,Z.useMemo)(()=>!t||e.length===0?null:e.find(e=>e.filter.filter===t)??null,[e,t])}var Fi=({filter:e,existingViews:t,activeView:n,onDeleted:r,onClose:i})=>{let[a,o]=(0,Z.useState)(()=>n?.name??``),[s,c]=(0,Z.useState)(``),[l,u]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(!1),[p,m]=(0,Z.useState)(!1),h=Mi(),g=Ni(),_=!!n,v=async()=>{let r=a.trim();if(!r){c(`Please enter a name`);return}if(!_&&t.find(e=>e.name.trim().toLowerCase()===r.toLowerCase())){c(`A view with this name already exists`);return}u(!0);try{await h(r,e,n??void 0),i()}catch(e){c(e instanceof Error?e.message:`Failed to save view`)}finally{u(!1)}},y=async()=>{if(n){f(!0);try{await g(n),i(),r?.()}catch(e){c(e instanceof Error?e.message:`Failed to delete view`)}finally{f(!1)}}};return(0,Q.jsx)(it,{align:`end`,className:`w-72`,children:(0,Q.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Q.jsx)(`h3`,{className:`text-sm font-semibold`,children:_?`Edit view`:`Save view`}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Q.jsx)(ot,{placeholder:`View name`,value:a,autoFocus:!0,onChange:e=>{o(e.target.value),s&&c(``)},onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),v())}}),s&&(0,Q.jsx)(`p`,{className:`text-xs text-red-500`,children:s})]}),_?p?(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Delete view?`}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(J,{size:`sm`,variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Q.jsx)(J,{disabled:d,size:`sm`,variant:`destructive`,onClick:()=>void y(),children:d?`Deleting...`:`Delete`})]})]}):(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsx)(J,{className:`text-red hover:bg-red/5 hover:text-red`,size:`sm`,variant:`ghost`,onClick:()=>m(!0),children:`Delete`}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(J,{size:`sm`,variant:`outline`,onClick:i,children:`Cancel`}),(0,Q.jsx)(J,{disabled:l||!a.trim(),size:`sm`,onClick:()=>void v(),children:l?`Saving...`:`Save`})]})]}):(0,Q.jsx)(J,{className:`w-full`,disabled:l||!a.trim(),onClick:()=>void v(),children:l?`Saving...`:`Save`})]})})},Ii=({filter:e,existingViews:t,activeView:n,onDeleted:r})=>{let[i,a]=(0,Z.useState)(!1),o=n?`edit:${n.name}:${n.filter.filter}`:`save:${e}`;return(0,Q.jsxs)(Ut,{open:i,onOpenChange:a,children:[(0,Q.jsx)(qt,{asChild:!0,children:(0,Q.jsx)(J,{variant:`outline`,children:n?`Edit view`:`Save view`})}),i&&(0,Q.jsx)(Fi,{activeView:n,existingViews:t,filter:e,onClose:()=>a(!1),onDeleted:r},o)]})},Li=({field:e,values:t,onChange:n,operator:r,onOperatorChange:i,readOnly:a})=>{let{data:o}=Rn(),s=o?.members_custom_fields??[],c=(e.key??``).slice(13),l=s.find(e=>e.key===c),u=l?(Ln(l.type)??[]).map(({key:e,label:t})=>({value:e,label:t})):[],d=e.label??l?.name??`Custom field`,f=u.length>0,[p=``,m=``]=t,h=f&&p===``?ti:ni;(0,Z.useEffect)(()=>{a||!i||h.includes(r)||i(`is-set`)},[a,r,h,i]);let g=!ti.includes(r),_=[{value:``,label:`Any`},...u];return(0,Q.jsxs)(Q.Fragment,{children:[f&&(0,Q.jsx)(k,{ariaLabel:`${d} part`,options:_,readOnly:a,testId:`custom-field-filter-subfield`,value:p,onChange:e=>n([e,m])}),i&&(0,Q.jsx)(k,{ariaLabel:`${d} operator`,options:sn(h),readOnly:a,testId:`custom-field-filter-operator`,value:r,onChange:i}),g&&(0,Q.jsx)(O,{ariaLabel:`${d} value`,placeholder:`Enter value...`,readOnly:a,testId:`custom-field-filter-value`,value:m,onChange:e=>n([p,e])})]})},Ri=5,zi={"is-any":`is any of`,"is-not-any":`is none of`,"does-not-contain":`does not contain`,...Qt,...vn,1:`More like this`,0:`Less like this`},Bi={"is-greater":`is greater than`,"is-less":`is less than`};function Vi(e){switch(e){case`name`:return Z.createElement(je,{className:`size-4`});case`email`:case`subscribed`:return Z.createElement(Ot,{className:`size-4`});case`label`:return Z.createElement(vt,{className:`size-4`});case`last_seen_at`:return Z.createElement(Oe,{className:`size-4`});case`created_at`:return Z.createElement(Nt,{className:`size-4`});case`signup`:return Z.createElement(Le,{className:`size-4`});case`tier_id`:case`subscriptions.status`:return Z.createElement(Ue,{className:`size-4`});case`status`:return Z.createElement(Ze,{className:`size-4`});case`subscriptions.plan_interval`:return Z.createElement(_t,{className:`size-4`});case`subscriptions.start_date`:return Z.createElement(Dt,{className:`size-4`});case`subscriptions.current_period_end`:return Z.createElement(pt,{className:`size-4`});case`conversion`:return Z.createElement(Fe,{className:`size-4`});case`email_count`:case`emails.post_id`:return Z.createElement(Ht,{className:`size-4`});case`email_opened_count`:case`opened_emails.post_id`:return Z.createElement(kt,{className:`size-4`});case`email_open_rate`:return Z.createElement(Te,{className:`size-4`});case`clicked_links.post_id`:return Z.createElement(He,{className:`size-4`});case`newsletter_feedback`:return Z.createElement(Pt,{className:`size-4`});case`offer_redemptions`:return Z.createElement(Je,{className:`size-4`});case Rr:return Z.createElement(jt,{className:`size-4`});default:return e.startsWith(`newsletters.`)?Z.createElement(Ge,{className:`size-4`}):void 0}}function Hi(e,t){return{options:e,valueSource:t}}function Ui(e){let t=new Map,n=[],r=[];for(let t of e)t.redemption_type===`retention`&&(t.cadence===`month`?n.push(t.id):t.cadence===`year`&&r.push(t.id));return n.length>0&&t.set(`retention:month`,n),r.length>0&&t.set(`retention:year`,r),t}function Wi(e){return Array.isArray(e.metadata?.offerIds)?e.metadata.offerIds.filter(e=>typeof e==`string`):null}function Gi(e){let t=[],n=Ui(e);for(let n of e)n.redemption_type!==`retention`&&t.push({value:n.id,label:n.name});return n.has(`retention:month`)&&t.push({value:`retention:month`,label:`Monthly Retention`,metadata:{offerIds:n.get(`retention:month`)}}),n.has(`retention:year`)&&t.push({value:`retention:year`,label:`Yearly Retention`,metadata:{offerIds:n.get(`retention:year`)}}),t}function Ki(e,t){let n=[],r=new Set;for(let i of t){let t=Wi(i);t&&t.length>0&&t.every(t=>e.includes(t))&&(n.push(String(i.value)),t.forEach(e=>{r.add(e)}))}for(let t of e)r.has(t)||n.push(t);return n}function qi(e,t){let n=[];for(let r of e){let e=t.find(e=>e.value===r),i=e?Wi(e):null;i?n.push(...i):n.push(r)}return[...new Set(n)]}function Ji(e){return new Map(e.map(e=>[e.id,e.name]))}function Yi(e,t,n){let r=e.map(e=>t.find(t=>t.value===e)).filter(e=>!!e);return r.length===1?r[0].label:r.length>1?`${r.length} selected`:e.length===1?n.get(e[0])??`Select...`:e.length>1?`${e.length} selected`:`Select...`}function Xi({labelValueSource:e,tierValueSource:t,newsletters:n=[],hydratedNewsletterSlugs:r=[],hasMultipleTiers:i=!1,paidMembersEnabled:a=!1,emailFiltersEnabled:o=!1,postValueSource:s,emailValueSource:c,offers:l=[],multipleActiveSubscriptionsCount:u=0,membersTrackSources:d=!1,emailTrackOpens:f=!1,emailTrackClicks:p=!1,customFieldsEnabled:m=!1,customFields:h=[],archivedCustomFields:g=[],siteTimezone:_=`UTC`}){return(0,Z.useMemo)(()=>{let v=si();function y(e,t={},n=zi){let r;return r=e.startsWith(`newsletters.`)?v[`newsletters.:slug`]:e.startsWith(`custom_field.`)?v[`custom_field.:key`]:v[e],{key:e,...r.ui,icon:Vi(e),operators:sn(r.operators,{labels:n}),...`options`in r&&r.options?{options:r.options}:{},...t}}function b(e,t,n={}){let r=v[e],i=y(e,{defaultValue:t,...n});return Xt(r)?{...i,customRenderer:en(t)}:i}let x=[],S=n.filter(e=>e.status!==`archived`),C=new Set(S.map(e=>e.slug)),w=[...new Set(r)].map(e=>({slug:e,name:n.find(t=>t.slug===e)?.name??e})),T=w.filter(e=>!C.has(e.slug)),E=Gi(l),D=Ji(l),O=an(_),k=[y(`name`),y(`email`)];if(e&&k.push(y(`label`,{...Hi([],e),customRenderer:e=>Z.createElement(Vn,e)})),S.length<=1){k.push(y(`subscribed`));for(let e of w)k.push(y(`newsletters.${e.slug}`,{label:e.name}))}if(k.push(b(`last_seen_at`,O),b(`created_at`,O)),d&&k.push(y(`signup`,Hi([],s))),x.push({group:`Basic`,fields:k}),m){let e=h.map(e=>y(`custom_field.${e.key}`,{label:e.name,icon:Z.createElement(Hn,{type:e.type,className:`size-4`}),defaultOperator:`contains`,renderOperatorInValue:!0,customRenderer:e=>Z.createElement(Li,e)})),t=g.map(e=>y(`custom_field.${e.key}`,{label:e.name,icon:Z.createElement(xt,{className:`size-4`}),readOnly:!0,renderOperatorInValue:!0,customRenderer:e=>Z.createElement(Li,e)})),n=[...e,...t];n.length>0&&x.push({group:`Custom fields`,fields:n,previewLimit:Ri})}if(S.length>1){let e=[y(`subscribed`,{label:`All newsletters`,options:[{value:`subscribed`,label:`Subscribed to at least one`},{value:`unsubscribed`,label:`Unsubscribed from all`},{value:`email-disabled`,label:`Email disabled`}]})];for(let t of S)e.push(y(`newsletters.${t.slug}`,{label:t.name}));for(let t of T)e.push(y(`newsletters.${t.slug}`,{label:t.name}));x.push({group:`Newsletters`,fields:e})}if(a){let e=[];i&&e.push(y(`tier_id`,Hi([],t))),e.push(y(`status`,{options:[...v.status.options,{value:`gift`,label:`Gift subscription`}]})),u>0&&e.push(y(Rr)),e.push(y(`subscriptions.plan_interval`),y(`subscriptions.status`),b(`subscriptions.start_date`,O),b(`subscriptions.current_period_end`,O)),d&&e.push(y(`conversion`,Hi([],s))),l.length>0&&e.push(y(`offer_redemptions`,{options:E,customValueRenderer:e=>Yi(e,E,D)})),x.push({group:`Subscription`,fields:e})}if(o){let e=[y(`email_count`,{},Bi),y(`email_opened_count`,{},Bi)];f&&e.push(y(`email_open_rate`,{},Bi)),e.push(y(`emails.post_id`,Hi([],c))),f&&e.push(y(`opened_emails.post_id`,Hi([],c))),p&&e.push(y(`clicked_links.post_id`,Hi([],c))),e.push(y(`newsletter_feedback`,Hi([],c))),x.push({group:`Email`,fields:e})}return x},[o,c,m,h,g,p,f,i,e,d,u,n,l,r,a,s,_,t])}var Zi=[],Qi=[];function $i(e,t){return e.map(e=>e.field===`offer_redemptions`?{...e,values:t(e.values)}:e)}var ea=({filters:e,multipleActiveSubscriptionsCount:t,nql:n,onFiltersChange:r,savedViews:i=[],activeView:a,iconOnly:o=!1})=>{let{data:s}=g({}),{data:c}=xn({searchParams:{limit:`100`}}),{data:l}=bt({}),u=l?.settings||[],d=K(u,`paid_members_enabled`)===!0,f=K(u,`editor_default_email_recipients`)!==`disabled`,p=K(u,`members_track_sources`)===!0,m=K(u,`email_track_opens`)===!0,h=K(u,`email_track_clicks`)===!0,_=jn(u),v=c?.newsletters||[],y=(0,Z.useMemo)(()=>s?.offers??Zi,[s?.offers]),b=(0,Z.useMemo)(()=>Gi(y),[y]),S=(0,Z.useMemo)(()=>[...new Set(e.map(e=>e.field).filter(e=>e.startsWith(`newsletters.`)).map(e=>e.slice(12)).filter(Boolean))],[e]),C=(0,Z.useMemo)(()=>$i(e,e=>Ki(e,b)),[e,b]),w=(0,Z.useCallback)(e=>{r($i(e,e=>qi(e,b)))},[r,b]),T=Tn(),E=Cn(),O=wn(),{valueSource:k,hasMultipleTiers:A}=En(),j=Tt(`membersCustomFields`),{data:M}=In({enabled:j}),N=M?.members_custom_fields??Qi,P=(0,Z.useMemo)(()=>new Set(e.map(e=>e.field).filter(e=>e.startsWith(`custom_field.`)).map(e=>e.slice(13)).filter(Boolean)),[e]),{data:F}=Rn({enabled:j&&P.size>0}),I=Xi({newsletters:v,hydratedNewsletterSlugs:S,hasMultipleTiers:A,paidMembersEnabled:d,emailFiltersEnabled:f,labelValueSource:O,tierValueSource:k,offers:y,multipleActiveSubscriptionsCount:t,postValueSource:T,emailValueSource:E,membersTrackSources:p,emailTrackOpens:m,emailTrackClicks:h,siteTimezone:_,customFieldsEnabled:j,customFields:N,archivedCustomFields:(0,Z.useMemo)(()=>(F?.members_custom_fields??Qi).filter(e=>e.status===`archived`&&P.has(e.key)).map(e=>({key:e.key,name:e.name})),[F,P])}),L=e.length>0,ee=x(`bg-white dark:bg-background`,o&&!L&&`min-w-[34px] gap-0 !px-3 text-[0px] lg:min-w-0 lg:gap-1.5 lg:px-3 lg:text-base`),R=L?(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center gap-4 sm:absolute sm:top-0 sm:right-0`,children:[(0,Q.jsxs)(J,{className:`hidden items-center gap-1 !px-0 text-sm font-normal text-muted-foreground hover:bg-transparent hover:text-foreground lg:inline-flex`,type:`button`,variant:`ghost`,onClick:()=>r([]),children:[(0,Q.jsx)(Ne,{className:`size-4`}),`Clear`]}),n&&(0,Q.jsx)(Ii,{activeView:a,existingViews:i,filter:n,onDeleted:()=>r([])})]}):void 0;return(0,Q.jsx)(D,{addButtonClassName:ee,addButtonIcon:L?(0,Q.jsx)(Ct,{}):(0,Q.jsx)(be,{}),addButtonText:L?`Add filter`:`Filter`,allowMultiple:!0,className:`[&>button]:order-last ${L?`sm:!pr-40 [&>button]:border-none`:`w-auto`}`,clearButton:R,fields:I,filters:C,keyboardShortcut:`f`,popoverAlign:`start`,popoverContentClassName:`z-[80] w-[280px] [&_[data-slot=command-list]]:max-h-[450px]`,showClearButton:L,showSearchInput:!0,onChange:w})},ta=({search:e,onSearchChange:t,autoFocus:n=!1,ariaLabel:r=`Search members`})=>{let i=r===`Search members mobile`?`members-mobile-search-input`:`members-search-input`;return(0,Q.jsxs)(de,{className:`h-(--control-height) min-w-0 basis-full lg:w-[180px] lg:basis-auto xl:w-[240px]`,children:[(0,Q.jsx)(ue,{children:(0,Q.jsx)(Jt,{className:`size-4`,strokeWidth:1.75})}),(0,Q.jsx)(le,{"aria-label":r,autoFocus:n,className:`!h-[34px]`,"data-testid":i,placeholder:`Search members...`,value:e,onChange:e=>t(e.target.value)})]})},na=({children:e,description:t,title:n,url:r})=>(0,Q.jsx)(`a`,{className:`group/card block rounded-xl border bg-card p-6 transition-all hover:bg-table-row-hover hover:shadow-xs`,href:r,rel:`noopener noreferrer`,target:`_blank`,children:(0,Q.jsxs)(`div`,{className:`flex items-center gap-6`,children:[e,(0,Q.jsxs)(`div`,{className:`flex flex-col leading-tight`,children:[(0,Q.jsx)(`h4`,{className:`text-md font-medium tracking-normal text-pretty text-foreground`,children:n}),(0,Q.jsx)(`p`,{className:`mt-1.5 text-sm leading-tight text-pretty text-muted-foreground`,children:t})]})]})}),ra=`flex h-18 w-[100px] min-w-[100px] items-center justify-center rounded-md p-4 opacity-80 transition-all group-hover/card:opacity-100`,ia=()=>(0,Q.jsxs)(`div`,{className:`grid w-full grid-cols-1 gap-4 lg:grid-cols-2`,children:[(0,Q.jsx)(na,{description:`Learn how to turn anonymous visitors into logged-in members with memberships in Ghost.`,title:`Building your audience with subscriber signups`,url:`https://ghost.org/resources/build-audience-subscriber-signups/`,children:(0,Q.jsx)(`div`,{className:x(ra,`bg-gradient-to-tr from-[#22C55E]/20 to-[#84CC16]/20`),children:(0,Q.jsx)(Le,{className:`text-[#16A34A]`,size:20,strokeWidth:1.5})})}),(0,Q.jsx)(na,{description:`Starting from zero? Use this guide to find your founding audience members.`,title:`Get your first 100 email subscribers`,url:`https://ghost.org/resources/first-100-email-subscribers/`,children:(0,Q.jsx)(`div`,{className:x(ra,`bg-gradient-to-tl from-[#A855F7]/20 to-[#EC4899]/20`),children:(0,Q.jsx)(Ot,{className:`text-[#DB2777]`,size:20,strokeWidth:1.5})})})]});function aa(e,t){let n=new URLSearchParams;t&&n.set(`back`,t);let r=n.toString();return`/members/${e}${r?`?${r}`:``}`}var oa={left:`100%`};function sa(e){if(!e)return{text:`Unknown`,isKnown:!1};try{let t=JSON.parse(e);return t.country?t.country_code===`US`&&t.region?{text:`${t.region}, US`,isKnown:!0}:{text:t.country,isKnown:!0}:{text:`Unknown`,isKnown:!1}}catch{return{text:`Unknown`,isKnown:!1}}}function ca(e){switch(e){case`paid`:return`Paid`;case`comped`:return`Complimentary`;case`gift`:return`Gift`;default:return`Free`}}function la(e){return e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey}function ua(e,t){window.open(`#${aa(e,t)}`,`_blank`,`noopener`)}function da({item:e,backPath:t,onClick:n}){return(0,Q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,Q.jsx)(Bt,{className:`size-8 min-w-8`,email:e.email,name:e.name,src:e.avatar_image}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`a`,{className:`block min-w-0 cursor-pointer`,href:`#${aa(e.id,t)}`,onClick:n?t=>{if(la(t)){t.stopPropagation();return}t.preventDefault(),t.stopPropagation(),n(e.id)}:void 0,children:(0,Q.jsx)(`span`,{className:`block truncate text-md font-semibold`,children:e.name||e.email||`Anonymous`})}),e.name&&e.email&&(0,Q.jsx)(`div`,{className:`truncate text-muted-foreground`,"data-testid":`member-email`,children:e.email})]})]})}function fa({status:e,tiers:t}){let n=t?.map(e=>e.name).join(`, `);return(0,Q.jsx)(`div`,{className:`flex min-w-0 justify-start`,children:(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`div`,{className:`truncate`,children:ca(e)}),n&&(0,Q.jsx)(`div`,{className:`truncate text-sm text-muted-foreground`,children:n})]})})}function pa({emailOpenRate:e}){let t=e!=null;return(0,Q.jsx)(`div`,{className:x(`text-base`,t?`text-foreground`:`text-muted-foreground`),children:t?C(e/100):`N/A`})}function ma({geolocation:e}){let t=sa(e);return(0,Q.jsx)(`div`,{className:x(`truncate text-base`,t.isKnown?`text-foreground`:`text-muted-foreground`),children:t.text})}function ha({createdAt:e}){return(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{className:`text-base`,children:mr.default.utc(e).format(`D MMM YYYY`)}),(0,Q.jsx)(`div`,{className:`text-base text-muted-foreground`,children:mr.default.utc(e).fromNow()})]})}function ga({column:e,member:t,timezone:n}){let r=mi(e,t,n);return r?(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsx)(`div`,{className:`truncate text-base`,children:r.text}),r.subtext&&(0,Q.jsx)(`div`,{className:`truncate text-base text-muted-foreground`,children:r.subtext})]}):(0,Q.jsx)(`span`,{className:`text-base text-muted-foreground`,children:`-`})}var _a=(0,Z.forwardRef)(function({item:e,activeColumns:t,backPath:n,columnStyles:r,showPinnedEdge:i,showEmailOpenRate:a,timezone:o,onClick:s,...c},l){let u=t=>{if(la(t)){ua(e.id,n);return}s(e.id)},d=t=>{t.button===1&&(t.preventDefault(),ua(e.id,n))};return(0,Q.jsxs)(U,{...c,ref:l,className:x(`group cursor-pointer`,c.className),"data-testid":`members-list-item`,onAuxClick:d,onClick:u,children:[(0,Q.jsxs)(W,{className:x(`min-w-0 bg-background px-4 py-3 group-hover:bg-[var(--members-sticky-hover-bg)] max-sm:!w-full max-sm:!min-w-0 lg:sticky lg:left-0 lg:z-20`),children:[(0,Q.jsx)(da,{backPath:n,item:e,onClick:s}),i&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] group-hover:opacity-0 lg:block`,style:{...oa,background:`linear-gradient(to right, var(--background) 0px, color-mix(in hsl, var(--background) 78%, transparent) 6px, color-mix(in hsl, var(--background) 28%, transparent) 16px, transparent 24px)`}}),(0,Q.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] opacity-0 group-hover:opacity-100 lg:block`,style:{...oa,background:`linear-gradient(to right, var(--members-sticky-hover-bg) 0px, color-mix(in hsl, var(--members-sticky-hover-bg) 78%, transparent) 6px, color-mix(in hsl, var(--members-sticky-hover-bg) 28%, transparent) 16px, transparent 24px)`}})]})]}),(0,Q.jsx)(W,{className:`hidden px-4 py-3 sm:table-cell`,style:r.status,children:(0,Q.jsx)(fa,{status:e.status,tiers:e.tiers})}),a&&(0,Q.jsx)(W,{className:`hidden px-4 py-3 lg:table-cell`,style:r.openRate,children:(0,Q.jsx)(pa,{emailOpenRate:e.email_open_rate})}),(0,Q.jsx)(W,{className:`hidden px-4 py-3 lg:table-cell`,style:r.location,children:(0,Q.jsx)(ma,{geolocation:e.geolocation})}),(0,Q.jsx)(W,{className:`hidden px-4 py-3 lg:table-cell`,style:r.created,children:(0,Q.jsx)(ha,{createdAt:e.created_at})}),t.map(t=>(0,Q.jsx)(W,{className:`hidden px-4 py-3 lg:table-cell`,style:r.dynamic,children:(0,Q.jsx)(ga,{column:t,member:e,timezone:o})},t.key))]})}),va={left:`100%`,background:`linear-gradient(to right, var(--members-sticky-fade-base) 0px, color-mix(in hsl, var(--members-sticky-fade-base) 78%, transparent) 6px, color-mix(in hsl, var(--members-sticky-fade-base) 28%, transparent) 16px, transparent 24px)`},ya=({activeColumns:e,columnStyles:t,showEmailOpenRate:n})=>(0,Q.jsxs)(`colgroup`,{children:[(0,Q.jsx)(`col`,{className:`max-sm:!w-full max-sm:!min-w-0 sm:max-lg:!w-auto sm:max-lg:!min-w-0`,style:t.member}),(0,Q.jsx)(`col`,{className:`hidden sm:table-column`,style:t.status}),n&&(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.openRate}),(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.location}),(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.created}),e.map(e=>(0,Q.jsx)(`col`,{className:`hidden lg:table-column`,style:t.dynamic},e.key))]}),ba=({activeColumns:e,className:t,columnStyles:n,headerRef:r,memberHeaderRef:i,showEmailOpenRate:a})=>(0,Q.jsx)(pe,{ref:r,className:x(`hidden bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,t),children:(0,Q.jsxs)(U,{children:[(0,Q.jsx)(H,{ref:i,className:`sticky left-0 z-[70] bg-transparent px-4 [--members-sticky-fade-base:var(--background)]`,style:n.member,children:`Member`}),(0,Q.jsx)(H,{className:`bg-transparent px-4`,style:n.status,children:`Status`}),a&&(0,Q.jsx)(H,{className:`bg-transparent px-4`,style:n.openRate,children:`Open rate`}),(0,Q.jsx)(H,{className:`bg-transparent px-4`,style:n.location,children:`Location`}),(0,Q.jsx)(H,{className:`bg-transparent px-4`,style:n.created,children:`Created`}),e.map(e=>(0,Q.jsx)(H,{className:`bg-transparent px-4`,style:n.dynamic,children:e.label},e.key))]})}),xa=({columnStyle:e,showPinnedEdge:t})=>(0,Q.jsxs)(`div`,{className:`pointer-events-none absolute inset-y-0 left-0 z-[70] overflow-visible bg-transparent [--members-sticky-fade-base:var(--background)]`,style:e,children:[(0,Q.jsxs)(me,{className:`w-full table-fixed border-collapse`,children:[(0,Q.jsx)(`colgroup`,{children:(0,Q.jsx)(`col`,{style:{width:`100%`}})}),(0,Q.jsx)(pe,{className:`bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,children:(0,Q.jsx)(U,{children:(0,Q.jsx)(H,{className:`bg-transparent px-4`,children:`Member`})})})]}),t&&(0,Q.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px w-[24px]`,style:va})]}),Sa={member:40,status:15,openRate:10,location:17.5,created:17.5},Ca={member:320,status:180,openRate:140,location:180,created:160},wa=17.5,Ta=220;function Ea(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0}function Da({showEmailOpenRate:e,activeColumnCount:t}){let n=[{key:`member`,width:Sa.member},{key:`status`,width:Sa.status},...e?[{key:`openRate`,width:Sa.openRate}]:[],{key:`location`,width:Sa.location},{key:`created`,width:Sa.created}],r=Ea(t),i=n.reduce((e,t)=>e+t.width,0),a=100+r*wa,o=wa/a*100,s=n.reduce((e,t)=>{let n=t.width/i*100;return e[t.key]=n/a*100,e},{member:0,status:0,openRate:0,location:0,created:0});return{tableWidthPercentage:a,minTableWidth:n.reduce((e,t)=>e+Ca[t.key],0)+r*Ta,dynamicColumnWidthPercentage:o,baseColumnWidthPercentages:s,baseColumnMinWidths:{member:Ca.member,status:Ca.status,openRate:Ca.openRate,location:Ca.location,created:Ca.created},dynamicColumnMinWidth:Ta}}function Oa(e){let t=(e,t)=>({width:`${e}%`,minWidth:`${t}px`});return{tableStyle:{"--members-table-width":`${e.tableWidthPercentage}%`,"--members-table-min-width":`${e.minTableWidth}px`},columnStyles:{member:t(e.baseColumnWidthPercentages.member,e.baseColumnMinWidths.member),status:t(e.baseColumnWidthPercentages.status,e.baseColumnMinWidths.status),openRate:t(e.baseColumnWidthPercentages.openRate,e.baseColumnMinWidths.openRate),location:t(e.baseColumnWidthPercentages.location,e.baseColumnMinWidths.location),created:t(e.baseColumnWidthPercentages.created,e.baseColumnMinWidths.created),dynamic:t(e.dynamicColumnWidthPercentage,e.dynamicColumnMinWidth)}}}var ka=({height:e})=>(0,Q.jsx)(`tr`,{"aria-hidden":`true`,style:{height:e},children:(0,Q.jsx)(`td`,{colSpan:999})}),Aa=(0,Z.forwardRef)(function(e,t){return(0,Q.jsx)(U,{ref:t,...e,"aria-hidden":`true`,children:(0,Q.jsx)(W,{className:`h-[72px] px-4 py-3`,colSpan:999,children:(0,Q.jsx)(`div`,{className:`h-full animate-pulse rounded-md bg-muted`,"data-testid":`loading-placeholder`})})})});function ja({items:e,totalItems:t,backPath:n,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,isLoading:o,showEmailOpenRate:s=!0,activeColumns:c,timezone:l,pageHeaderRef:u,onRowClick:d}){let f=(0,Z.useRef)(null),p=(0,Z.useRef)(null),m=(0,Z.useRef)(null),h=(0,Z.useRef)(null),g=(0,Z.useRef)(null),[_,v]=(0,Z.useState)(0),[y,b]=(0,Z.useState)(0),[x,S]=(0,Z.useState)(!1),{visibleItemCount:C,canLoadMore:w,loadMore:T}=kn(t),E=(0,Z.useMemo)(()=>Da({showEmailOpenRate:s,activeColumnCount:c.length}),[c.length,s]),{tableStyle:D,columnStyles:O}=(0,Z.useMemo)(()=>Oa(E),[E]);On({parentRef:f,isLoading:o}),(0,Z.useEffect)(()=>{let e=g.current;if(!e)return;let t=()=>{let t=e.scrollLeft;S(t>0),h.current&&(h.current.scrollLeft=t)};return t(),e.addEventListener(`scroll`,t,{passive:!0}),window.addEventListener(`resize`,t),()=>{e.removeEventListener(`scroll`,t),window.removeEventListener(`resize`,t)}},[c.length,e.length,s]),(0,Z.useEffect)(()=>{let e=u?.current,t=p.current,n=m.current;if(!e||!t||!n){v(0),b(0);return}let r=e.style.paddingBottom,i=e.style.marginBottom,a=parseFloat(getComputedStyle(e).paddingBottom)||0,o=parseFloat(getComputedStyle(e).marginBottom)||0,s=()=>{r?e.style.setProperty(`padding-bottom`,r):e.style.removeProperty(`padding-bottom`),i?e.style.setProperty(`margin-bottom`,i):e.style.removeProperty(`margin-bottom`)},c=()=>{if(!window.matchMedia(`(min-width: 1024px)`).matches){s(),v(0),b(0);return}let r=t.getBoundingClientRect().height,i=n.getBoundingClientRect().width;e.style.setProperty(`padding-bottom`,`${a+r}px`,`important`),e.style.setProperty(`margin-bottom`,`${o-r}px`,`important`);let c=e.getBoundingClientRect().height;v(i),b(Math.max(c-r,0))};c();let l=new ResizeObserver(()=>{c()});return l.observe(e),l.observe(t),l.observe(n),window.addEventListener(`resize`,c),()=>{s(),l.disconnect(),window.removeEventListener(`resize`,c)}},[c.length,u,s]);let{visibleItems:k,spaceBefore:A,spaceAfter:j}=Dn({items:e,totalItems:C,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,parentRef:f,estimateSize:()=>72}),M=e=>{d?d(e):window.location.hash=aa(e,n)};return(0,Q.jsxs)(`div`,{ref:f,className:`w-full min-w-0`,"data-testid":`members-list-scroll-root`,children:[(0,Q.jsx)(`div`,{className:`sticky z-[50] hidden overflow-visible bg-transparent lg:block`,style:{top:y},children:(0,Q.jsxs)(`div`,{className:`relative`,children:[(0,Q.jsx)(xa,{columnStyle:_>0?{width:_}:O.member,showPinnedEdge:x}),(0,Q.jsx)(`div`,{ref:h,className:`w-full overflow-hidden`,style:_>0?{clipPath:`inset(0 0 0 ${_}px)`}:void 0,children:(0,Q.jsxs)(me,{"aria-hidden":`true`,className:`w-full border-collapse lg:w-[var(--members-table-width)] lg:min-w-[var(--members-table-min-width)] lg:table-fixed`,style:D,children:[(0,Q.jsx)(ya,{activeColumns:c,columnStyles:O,showEmailOpenRate:s}),(0,Q.jsx)(ba,{activeColumns:c,columnStyles:O,headerRef:p,memberHeaderRef:m,showEmailOpenRate:s})]})})]})}),(0,Q.jsx)(`div`,{ref:g,className:`w-full overflow-x-auto overflow-y-visible`,children:(0,Q.jsxs)(me,{className:`w-full border-collapse max-sm:table-fixed sm:max-lg:table-auto lg:w-[var(--members-table-width)] lg:min-w-[var(--members-table-min-width)] lg:table-fixed`,"data-testid":`members-list`,style:D,children:[(0,Q.jsx)(ya,{activeColumns:c,columnStyles:O,showEmailOpenRate:s}),(0,Q.jsx)(ba,{activeColumns:c,className:`lg:h-0 lg:overflow-hidden lg:[&_th]:pointer-events-none lg:[&_th]:h-0 lg:[&_th]:border-0 lg:[&_th]:p-0 lg:[&_th]:text-[0px] lg:[&_th]:leading-none lg:[&_th]:opacity-0 lg:[&_tr]:h-0 lg:[&_tr]:border-0`,columnStyles:O,showEmailOpenRate:s}),(0,Q.jsxs)(fe,{children:[(0,Q.jsx)(ka,{height:A}),k.map(({key:t,virtualItem:r,item:i,props:a})=>r.index>e.length-1?(0,Q.jsx)(Aa,{...a},t):(0,Q.jsx)(_a,{...a,activeColumns:c,backPath:n,columnStyles:O,item:i,showEmailOpenRate:s,showPinnedEdge:x,timezone:l,onClick:M},t)),(0,Q.jsx)(ka,{height:j})]})]})}),w&&(0,Q.jsx)(An,{isLoading:i,onClick:T})]})}function Ma({count:e,hasResolvedCount:t,nql:n,search:r}){let i=_(),{data:a}=l(),{mutateAsync:o,isPending:s}=he(),[c,u]=(0,Z.useState)(null),d=Hr(n),f=!r&&(!n||d),p=(0,Z.useMemo)(()=>Wr(a?.accessibility),[a?.accessibility]),h=c??p.dismissedCount??0,g=!d,v=f&&(d||e>h);return(0,Z.useEffect)(()=>{let n=p.dismissedCount;!a||c!==null||s||n===void 0||!t||e>=n||(u(e),o(Kr(a,e,p.dismissedAt??new Date().toISOString())).then(()=>{u(null)}).catch(e=>{u(null),console.log(`Unable to update multiple active subscriptions banner dismissed count`,e)}))},[e,a,o,t,s,c,p.dismissedAt,p.dismissedCount]),{canDismiss:g,count:e,handleDismiss:(0,Z.useCallback)(()=>{if(!a||s)return;let t=c;u(e),o(Kr(a,e,new Date().toISOString())).then(()=>{u(null)}).catch(()=>{u(t),m.error(`Unable to dismiss notification. Please try again.`)})},[e,a,o,s,c]),handleViewMembers:(0,Z.useCallback)(()=>{i(Wn({filter:zr}))},[i]),shouldShow:v}}var Na=({count:e,hasResolvedCount:t,nql:n,search:r})=>{let i=Ma({count:e,hasResolvedCount:t,nql:n,search:r});return i.shouldShow?(0,Q.jsx)(Ie,{role:`status`,variant:`warning`,...i.canDismiss?{dismissible:!0,onDismiss:i.handleDismiss}:{dismissible:!1},children:(0,Q.jsxs)(`div`,{className:`flex flex-col items-baseline gap-3 pr-8 sm:flex-row`,children:[`We found `,S(i.count),` `,i.count===1?`member`:`members`,` with more than one active paid subscription.`,` `,(0,Q.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[i.canDismiss&&(0,Q.jsx)(`button`,{className:`nowrap font-semibold !underline`,type:`button`,onClick:i.handleViewMembers,children:`View members`}),(0,Q.jsx)(`a`,{className:`nowrap font-semibold underline`,href:`https://ghost.org/help/duplicate-subscription-warning/`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]})}):null},Pa=[`subscriptions.plan_interval`,`subscriptions.status`,`subscriptions.start_date`,`subscriptions.current_period_end`,`conversion`,`offer_redemptions`,Rr];function Fa(e,t){return t&&e.length===0?!1:!e.some(e=>Pa.includes(e.field))}function Ia({isFetching:e,isFetchingNextPage:t}){return e&&!t}var La=fn(oi,`date`);function Ra(e,t){return tn(t,e.field,`UTC`)?.definition.operators.includes(e.operator)??!1}function za(e){return Array.isArray(e.$and)?{operator:`$and`,children:e.$and}:Array.isArray(e.$or)?{operator:`$or`,children:e.$or}:null}function Ba(e){if(typeof e.subscribed==`boolean`)return{field:`subscribed`,operator:`is`,values:[e.subscribed?`subscribed`:`unsubscribed`]};if(typeof e.email_disabled==`number`){if(e.email_disabled===1)return{field:`subscribed`,operator:`is`,values:[`email-disabled`]};if(e.email_disabled===0)return{field:`subscribed`,operator:`is-not`,values:[`email-disabled`]}}let t=za(e);if(!t||t.children.length!==2)return null;let n,r;for(let e of t.children)typeof e.subscribed==`boolean`&&(n=e.subscribed),typeof e.email_disabled==`number`&&(r=e.email_disabled);return t.operator===`$and`&&r===0&&n!==void 0?{field:`subscribed`,operator:`is`,values:[n?`subscribed`:`unsubscribed`]}:t.operator===`$or`&&r===1&&n!==void 0?{field:`subscribed`,operator:`is-not`,values:[n?`unsubscribed`:`subscribed`]}:null}function Va(e){let t=za(e);if(!t||t.children.length!==2)return null;let n,r;for(let e of t.children){let t=e[`newsletters.slug`];typeof t==`string`&&(n=t),t&&typeof t==`object`&&!Array.isArray(t)&&typeof t.$ne==`string`&&(n=t.$ne),typeof e.email_disabled==`number`&&(r=e.email_disabled)}return n?t.operator===`$and`&&r===0?{field:`newsletters.${n}`,operator:`is`,values:[`subscribed`]}:t.operator===`$or`&&r===1?{field:`newsletters.${n}`,operator:`is`,values:[`unsubscribed`]}:null:null}function Ha(e){let t=za(e);if(!t||t.operator!==`$and`||t.children.length!==2)return null;let n,r;for(let e of t.children)typeof e[`feedback.post_id`]==`string`&&(n=e[`feedback.post_id`]),typeof e[`feedback.score`]==`number`&&(r=e[`feedback.score`]);return!n||r!==0&&r!==1?null:{field:`newsletter_feedback`,operator:String(r),values:[n]}}function Ua(e){if(!e.endsWith(`$`))return!1;let t=0;for(let n=e.length-2;n>=0&&e[n]===`\\`;--n)t+=1;return t%2==0}function Wa(e,t){let n=e.source,r=n.startsWith(`^`),i=Ua(n),a,o;r&&!i?(a=`starts-with`,o=n.slice(1)):i&&!r?(a=`ends-with`,o=n.slice(0,-1)):(a=`contains`,o=n);let s=o.replace(/\\([\\.^$|?*+()[\]{}/-])/g,`$1`);return{operator:t?`does-not-contain`:a,value:s}}function Ga(e){if(typeof e==`string`)return{operator:`is`,value:e};if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e;if(typeof t.$ne==`string`)return{operator:`is-not`,value:t.$ne};if(t.$regex instanceof RegExp)return Wa(t.$regex,!1);if(t.$not instanceof RegExp)return Wa(t.$not,!0)}return null}function Ka(e){let t=za(e);if(!t){let t=e[`custom_fields.key`];return typeof t==`string`?{field:`custom_field.${t}`,operator:`is-set`,values:[``,``]}:t&&typeof t==`object`&&!Array.isArray(t)&&typeof t.$ne==`string`?{field:`custom_field.${t.$ne}`,operator:`is-not-set`,values:[``,``]}:null}if(t.operator!==`$and`||t.children.length!==2)return null;let n,r,i;for(let e of t.children){typeof e[`custom_fields.key`]==`string`&&(n=e[`custom_fields.key`]);for(let t of Object.keys(e))if(t===`custom_fields.value`)r={subfield:``,raw:e[t]};else if(t.startsWith(`custom_fields.value.`))r={subfield:t.slice(20),raw:e[t]};else if(t===`custom_fields.path`){let n=e[t];typeof n==`string`?i={subfield:n,negated:!1}:n&&typeof n==`object`&&!Array.isArray(n)&&typeof n.$ne==`string`&&(i={subfield:n.$ne,negated:!0})}}if(!n)return null;if(i)return{field:`custom_field.${n}`,operator:i.negated?`is-not-set`:`is-set`,values:[i.subfield,``]};if(!r)return null;let a=Ga(r.raw);return a?{field:`custom_field.${n}`,operator:a.operator,values:[r.subfield,a.value]}:null}var qa=[Ba,Va,Ha,Ka];function Ja(e,t){for(let t of qa){let n=t(e);if(n)return[n]}let n=za(e);return n?.operator===`$and`?n.children.flatMap(e=>Ja(e,t)):ln([e],oi,t)}function Ya(e,t){let n=$t(e??``);return n?pn(Ja(n,t)):[]}function Xa(e){let t=$t(e??``);return t?on(t,La):!1}function Za(e,t){return un(e,oi,t)}function Qa(e,t,n=!t){return!!e&&n&&!t&&Xa(e)}function $a(e,t){return e.filter(e=>Ra(e,t))}function eo({baseSearchParams:e,filters:t,search:n,timezone:r,fields:i}){let a=new URLSearchParams(e),o=Za($a(t,i),r);return a.delete(`filter`),a.delete(`search`),o&&a.set(`filter`,o),n&&a.set(`search`,n),a}function to(e){let t=(0,Z.useMemo)(()=>si(),[]),[n,r]=v(),i=(0,Z.useRef)(null),a=(0,Z.useMemo)(()=>n.get(`filter`)??void 0,[n]),o=(0,Z.useMemo)(()=>n.toString(),[n]),s=(0,Z.useMemo)(()=>$a(Ya(a,e),t),[a,e,t]),[c,l]=(0,Z.useState)(s),u=(0,Z.useMemo)(()=>n.get(`search`)??``,[n]),d=(0,Z.useMemo)(()=>Za($a(c,t),e),[c,e,t]);return(0,Z.useEffect)(()=>{o!==i.current&&(l(s),i.current=o)},[o,s]),(0,Z.useEffect)(()=>{if(i.current!==null&&o!==i.current)return;let a=eo({baseSearchParams:n,filters:c,search:u,timezone:e,fields:t}),s=a.toString();s!==o&&(i.current=s,r(a,{replace:!0}))},[o,c,u,n,r,e,t]),{filters:c,nql:d,search:u,setFilters:(0,Z.useCallback)((a,o={})=>{let s=o.replace??!0,c=eo({baseSearchParams:n,filters:a,search:u,timezone:e,fields:t});l(a),i.current=c.toString(),r(c,{replace:s})},[u,n,r,e,t]),setSearch:(0,Z.useCallback)((a,o={})=>{let s=o.replace??!0,l=eo({baseSearchParams:n,filters:c,search:a,timezone:e,fields:t});i.current=l.toString(),r(l,{replace:s})},[c,n,r,e,t]),clearFilters:(0,Z.useCallback)(({replace:a=!0}={})=>{let o=eo({baseSearchParams:n,filters:[],search:u,timezone:e,fields:t});l([]),i.current=o.toString(),r(o,{replace:a})},[u,n,r,e,t]),clearAll:(0,Z.useCallback)(({replace:a=!0}={})=>{let o=eo({baseSearchParams:n,filters:[],search:``,timezone:e,fields:t});l([]),i.current=o.toString(),r(o,{replace:a})},[n,r,e,t]),hasFilterOrSearch:!!d||u.length>0}}function no({enabled:e}){let{data:t}=ye({searchParams:{filter:zr,limit:`1`,fields:`id`,order:`id`},defaultErrorHandler:!1,enabled:e,refetchOnMount:`always`,staleTime:0});return{count:t?.meta?.pagination?.total??0,hasResolvedCount:t!==void 0}}var ro=250,io=6,ao=({emailAnalyticsEnabled:e,hasStripeEnabled:t,membershipsEnabled:n,timezone:r})=>{let a=(0,Z.useRef)(null),o=(0,Z.useCallback)(e=>{a.current=e?.closest(`[data-list-page="header"]`)},[]),{filters:s,nql:c,search:l,setFilters:u,setSearch:d,hasFilterOrSearch:f,clearAll:p}=to(r),m=y(),h=ji(),g=Pi(h,c),[_,v]=(0,Z.useState)(!1),[b,C]=(0,Z.useState)(!1),[w,D]=(0,Z.useState)(l),O=We(e=>{d(e)},ro),{count:k,hasResolvedCount:A}=no({enabled:t}),j=(0,Z.useMemo)(()=>li(s),[s]),M=(0,Z.useMemo)(()=>Fa(s,c),[s,c]),{data:N,isError:P,isFetching:F,isFetchingNextPage:I,refetch:L,fetchNextPage:ee,hasNextPage:R}=Wt({searchParams:(0,Z.useMemo)(()=>di({filters:s,nql:c,search:l}),[s,c,l]),placeholderData:i}),z=Ia({isFetching:F,isFetchingNextPage:I}),B=N?.meta?.pagination?.total??0,te=s.length>0,V=_,ne=te,re=f||B>0,ae=!f&&!z&&!P&&B<io;(0,Z.useEffect)(()=>{D(l),O.cancel()},[l,O]);let oe=e=>{D(e),O(e)};return(0,Q.jsx)(T,{className:`size-full`,children:(0,Q.jsx)(E,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Q.jsxs)(Sn,{"data-testid":`members-page`,children:[(0,Q.jsx)(Sn.Header,{className:`py-4 sidebar:py-5`,children:(0,Q.jsxs)(`div`,{ref:o,className:`flex flex-col gap-4 sidebar:gap-6`,children:[(0,Q.jsxs)(Y,{blurredBackground:!1,sticky:!1,children:[(0,Q.jsx)(Y.Left,{children:(0,Q.jsxs)(Y.Title,{children:[`Members`,` `,!z&&B>0&&(0,Q.jsx)(Y.Count,{className:`hidden sm:inline`,children:S(B)})]})}),(0,Q.jsx)(Y.Actions,{children:(0,Q.jsxs)(Y.ActionGroup,{className:`ml-auto flex-wrap justify-end sm:ml-0 sm:flex-nowrap`,children:[re&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`hidden lg:flex`,children:(0,Q.jsx)(ta,{search:w,onSearchChange:oe})}),(0,Q.jsx)(J,{"aria-label":_?`Hide member search`:`Show member search`,className:x(`lg:hidden`,_&&`bg-secondary hover:bg-secondary`),variant:`outline`,onClick:()=>{if(_){v(!1),C(!1);return}C(!0),v(!0)},children:(0,Q.jsx)(Jt,{className:`size-4`})}),!te&&(0,Q.jsx)(ea,{activeView:g,filters:s,iconOnly:!0,multipleActiveSubscriptionsCount:k,nql:c,savedViews:h,onFiltersChange:u})]}),(0,Q.jsx)(gi,{canBulkDelete:M,hasFilterOrSearch:f,memberCount:B,nql:c,search:l,showMenu:re,showNewMember:re,onImportComplete:()=>{L()}})]})})]}),re&&(ne||V)&&(0,Q.jsxs)(Zt,{className:x(`flex-col gap-4 lg:flex-row lg:items-center sidebar:gap-6 lg:gap-6`,!ne&&`lg:hidden`),children:[V&&(0,Q.jsx)(`div`,{className:`w-full lg:hidden`,children:(0,Q.jsx)(ta,{ariaLabel:`Search members mobile`,autoFocus:b,search:w,onSearchChange:oe})}),ne&&(0,Q.jsx)(ea,{activeView:g,filters:s,multipleActiveSubscriptionsCount:k,nql:c,savedViews:h,onFiltersChange:u})]}),t&&(0,Q.jsx)(Na,{count:k,hasResolvedCount:A,nql:c,search:l})]})}),(0,Q.jsxs)(Sn.Body,{children:[z?(0,Q.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Q.jsx)(nt,{size:`lg`})}):P?(0,Q.jsxs)(`div`,{className:`mb-16 flex flex-1 flex-col items-center justify-center`,children:[(0,Q.jsx)(`h2`,{className:`mb-2 text-xl font-medium`,children:`Error loading members`}),(0,Q.jsx)(`p`,{className:`mb-4 text-muted-foreground`,children:`Please reload the page to try again`}),(0,Q.jsx)(J,{onClick:()=>window.location.reload(),children:`Reload page`})]}):N?.members.length?(0,Q.jsx)(ja,{activeColumns:j,backPath:`${m.pathname}${m.search}`,fetchNextPage:()=>void ee(),hasNextPage:R,isFetchingNextPage:I,isLoading:F&&!I,items:N.members,pageHeaderRef:a,showEmailOpenRate:e,timezone:r,totalItems:B}):f?(0,Q.jsx)(`div`,{className:`flex flex-1 flex-col items-center justify-center`,children:(0,Q.jsx)(ie,{actions:(0,Q.jsx)(J,{variant:`outline`,onClick:()=>{O.cancel(),D(``),p({replace:!1})},children:`Show all members`}),title:`No matching members found.`,children:(0,Q.jsx)(Ae,{})})}):(0,Q.jsx)(_i,{membershipsEnabled:n,onMemberCreated:async()=>{await L()}}),ae&&(0,Q.jsx)(`div`,{className:x(N?.members.length&&`mt-8`),children:(0,Q.jsx)(ia,{})})]})]})})})},oo=()=>{let[e]=v(),{data:t,isLoading:n}=bt({}),{data:r,isLoading:i}=De(),a=Qa(e.get(`filter`)??void 0,!!t?.settings,n);if(n||i||!t?.settings||!r?.config||a)return(0,Q.jsx)(T,{className:`size-full`,children:(0,Q.jsx)(E,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Q.jsxs)(Sn,{children:[(0,Q.jsx)(Sn.Header,{className:`py-4 sidebar:py-6`,children:(0,Q.jsx)(Y,{blurredBackground:!1,sticky:!1,children:(0,Q.jsx)(Y.Left,{children:(0,Q.jsx)(Y.Title,{children:`Members`})})})}),(0,Q.jsx)(Sn.Body,{children:(0,Q.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Q.jsx)(nt,{size:`lg`})})})]})})});let o=jn(t.settings),s=K(t.settings,`members_signup_access`)!==`none`,c=r.config.emailAnalytics===!0,l=Ce(t.settings,r.config);return(0,Q.jsx)(ao,{emailAnalyticsEnabled:c,hasStripeEnabled:l,membershipsEnabled:s,timezone:o})};export{oo as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{n as r}from"./dist-Ndy-PuGN.js";import{i,n as a,r as o,t as s}from"./tabs-l9c7FjzI.js";import{B as c,Fs as l,Jt as u,Lt as d,Pr as f,Rt as p,Ss as m,St as h,U as g,Un as _,Wn as v,bt as y,et as b,ft as x,or as S,rt as C,xt as w,yt as T}from"./index-BOJzlYiz.js";import"./layout-DkkGyev2.js";var E=e(t(),1),D=n(),O=()=>{let{data:e,isLoading:t}=w(`index`),{data:n,isLoading:O}=h(`index`),k=t?[,,,,,].fill({apId:``,name:``,handle:``,avatarUrl:``}):e?.pages.flatMap(e=>e.accounts)??[],A=O?[,,,,,].fill({apId:``,name:``}):n?.pages.flatMap(e=>e.domains)??[],j=y(`index`),M=p(`index`),[N,P]=(0,E.useState)(new Set),F=T(`index`),I=d(`index`),[L,R]=(0,E.useState)(new Set),[z,B]=(0,E.useState)(null),V=u(),H=e=>{P(t=>{let n=new Set([...t]);return n.add(e.apId),n}),M.mutate(e),r.success(`User unblocked`)},U=e=>{P(t=>{let n=new Set([...t]);return n.delete(e.apId),n}),j.mutate(e),r.success(`User blocked`)},W=e=>{R(t=>{let n=new Set([...t]);return n.add(e.url),n}),I.mutate({url:e.url}),r.success(`Domain unblocked`)},G=e=>{R(t=>{let n=new Set([...t]);return n.delete(e.url),n}),F.mutate({url:e.url}),r.success(`Domain blocked`)};return(0,D.jsx)(c,{children:(0,D.jsxs)(`div`,{className:`mx-auto max-w-[620px] py-[min(4vh,48px)]`,children:[(0,D.jsx)(`div`,{className:`flex items-center justify-between gap-8`,children:(0,D.jsx)(l,{children:`Moderation`})}),(0,D.jsx)(`div`,{className:`mt-6`,children:(0,D.jsxs)(s,{defaultValue:`blocked_users`,variant:`underline`,children:[(0,D.jsxs)(o,{children:[(0,D.jsx)(i,{value:`blocked_users`,children:`Blocked users`}),(0,D.jsx)(i,{value:`blocked_domains`,children:`Blocked domains`})]}),(0,D.jsx)(a,{className:`mt-2`,value:`blocked_users`,children:!t&&k.length===0?(0,D.jsxs)(_,{children:[(0,D.jsx)(v,{children:(0,D.jsx)(m,{})}),(0,D.jsx)(`div`,{className:`mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center`,children:(0,D.jsx)(`p`,{children:`When you block someone, they won't be able to follow you or interact with your content on the social web.`})})]}):k.map((e,n)=>(0,D.jsx)(C,{actor:e,isCurrentUser:!0,children:(0,D.jsx)(`div`,{children:(0,D.jsxs)(g,{onClick:t?void 0:()=>b(e.handle,V),children:[(0,D.jsx)(x,{author:{icon:{url:e.avatarUrl},name:e.name,handle:e.handle}}),(0,D.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,D.jsx)(`span`,{className:`block truncate font-semibold text-black dark:text-white`,children:t?(0,D.jsx)(S,{className:`w-24`}):e.name}),(0,D.jsx)(`span`,{className:`block truncate text-sm text-gray-600`,children:t?(0,D.jsx)(S,{className:`w-40`}):e.handle})]}),N.has(e.apId)?(0,D.jsx)(f,{className:`ml-auto min-w-[90px] text-red hover:bg-red/5! hover:text-red-400`,variant:`outline`,onClick:t=>{t.stopPropagation(),U(e)},children:`Block`}):t?(0,D.jsx)(`div`,{className:`ml-auto w-16`,children:(0,D.jsx)(S,{})}):(0,D.jsx)(f,{className:`ml-auto min-w-[90px]`,variant:`destructive`,onClick:t=>{t.stopPropagation(),H(e)},onMouseEnter:()=>B(e.apId),onMouseLeave:()=>B(null),children:z===e.apId?`Unblock`:`Blocked`})]})})},e.apId?e.apId:`loading-${n}`))}),(0,D.jsx)(a,{className:`mt-[11px]`,value:`blocked_domains`,children:!O&&A.length===0?(0,D.jsxs)(_,{children:[(0,D.jsx)(v,{children:(0,D.jsx)(m,{})}),(0,D.jsx)(`div`,{className:`mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center`,children:(0,D.jsx)(`p`,{children:`When you block a domain, all users from that domain won't be able to follow you or interact with your content.`})})]}):A.map((e,t)=>(0,D.jsxs)(g,{children:[(0,D.jsx)(`div`,{className:`flex min-w-0 flex-col`,children:(0,D.jsx)(`span`,{className:`block truncate font-semibold text-black dark:text-white`,children:O?(0,D.jsx)(S,{className:`w-48`}):new URL(e.url).hostname})}),L.has(e.url)?(0,D.jsx)(f,{className:`ml-auto min-w-[90px] text-red hover:bg-red/5! hover:text-red-400`,variant:`outline`,onClick:()=>G(e),children:`Block`}):O?(0,D.jsx)(`div`,{className:`ml-auto w-16`,children:(0,D.jsx)(S,{})}):(0,D.jsx)(f,{className:`ml-auto min-w-[90px]`,variant:`destructive`,onClick:()=>W(e),onMouseEnter:()=>B(e.url),onMouseLeave:()=>B(null),children:z===e.url?`Unblock`:`Blocked`})]},e.url?e.url:`loading-${t}`))})]})})]})})};export{O as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r}from"./dist-Cb5RSHSg.js";import{a as i,c as a,i as o,o as s,r as c,s as ee,t as l}from"./command-BrhXIlDr.js";import{os as u,uo as d}from"./index-BOJzlYiz.js";var f=e(t(),1),p=n(),m={searchPlaceholder:`Search...`,noResultsFound:`No results found.`,loading:`Loading...`,loadMore:`Load more`};function h(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.label.toLowerCase().includes(n)||e.detail?.toLowerCase().includes(n)):e}function g(e,t,n,r,i,a,o){if(e)return{...e,shouldClientFilter:o??e.shouldClientFilter};let s=!!t,c=t?.useOptions({query:r,selectedValues:i});return{options:s?c?.options??[]:n??[],isInitialLoad:s?c?.isInitialLoad??!1:a&&(n?.length??0)===0,isSearching:s?c?.isSearching??!1:a&&(n?.length??0)>0,hasMore:s?c?.hasMore??!1:!1,isLoadingMore:s?c?.isLoadingMore??!1:!1,loadMore:s?c?.loadMore??(()=>{}):()=>{},shouldClientFilter:o??!s}}function _({optionSource:e,options:t,values:n,onChange:_,valueSource:v,searchable:y=!0,isLoading:b=!1,maxSelections:x,isMultiSelect:S=!0,onClose:C,autoCloseOnSelect:w=!1,className:T,searchInputClassName:E,shouldFilter:D,onSearchChange:O,i18n:k,renderItem:A,groupBy:j,header:M,footer:N}){let P=(0,f.useMemo)(()=>({...m,...k}),[k]),[F,I]=(0,f.useState)(``),L=(0,f.useCallback)(t=>{I(t),e?.onSearchChange?.(t),O?.(t)},[O,e]),R=g(e,v,t,F,n,b,D),z=R.options,[B,V]=(0,f.useState)([]),H=(0,f.useMemo)(()=>z.filter(e=>n.includes(e.value)),[z,n]);(0,f.useEffect)(()=>{if(n.length===0){V([]);return}H.length>0&&V(e=>{let t=[];for(let r of n){let n=H.find(e=>e.value===r)??e.find(e=>e.value===r);n&&t.push(n)}return t})},[H,n]);let U=(0,f.useMemo)(()=>n.length===0?[]:B.length>0?B:H,[B,n.length,H]),W=(0,f.useMemo)(()=>h(U,F),[F,U]),G=(0,f.useMemo)(()=>z.filter(e=>!n.includes(e.value)),[z,n]),K=(0,f.useMemo)(()=>{let e=new Map;for(let t of G){let n=j?.(t),r=typeof n==`string`?n:n?.key,i=typeof n==`string`?n:n?.label,a=e.get(r);e.set(r,{label:i,options:[...a?.options??[],t]})}return[...e.entries()].map(([e,t])=>({key:e,...t}))},[j,G]),q=(0,f.useCallback)(e=>{_(n.filter(t=>t!==e.value))},[_,n]),J=e=>{_([]),C?.()},Y=e=>{let t=[...n,e.value];x&&t.length>x||(_(t),w&&C?.())},X=e=>{_([e.value]),C?.()},Z=S?q:J,Q=S?Y:X,te=(0,f.useCallback)(()=>L(``),[L]),ne=(e,t)=>{if(t)return;let n=e.detail?` - ${e.detail}`:``;return e.label+n},$=A??(({option:e,isSelected:t,onSelect:n})=>(0,p.jsxs)(s,{className:`group flex items-center gap-2`,value:ne(e,t),onSelect:n,children:[e.icon,(0,p.jsxs)(`div`,{className:`flex flex-col overflow-hidden`,children:[(0,p.jsx)(`span`,{className:`truncate text-accent-foreground`,title:e.label,children:e.label}),e.detail&&(0,p.jsx)(`span`,{className:`truncate text-sm text-muted-foreground`,title:e.detail,children:e.detail})]}),(0,p.jsx)(u,{className:r(`ms-auto text-primary`,!t&&`opacity-0`)})]},String(e.value)));return(0,p.jsx)(`div`,{className:r(`w-full`,T),children:(0,p.jsxs)(l,{shouldFilter:R.shouldClientFilter,children:[M?.({selectedOptions:U,onDeselect:q}),y&&(0,p.jsxs)(`div`,{className:`relative`,children:[(0,p.jsx)(i,{className:r(`h-(--control-height) pr-8`,E),placeholder:P.searchPlaceholder,value:F,onValueChange:L}),R.isSearching&&(0,p.jsx)(d,{className:`pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 animate-spin text-muted-foreground`})]}),(0,p.jsxs)(ee,{className:`outline-hidden`,children:[R.isInitialLoad?(0,p.jsxs)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:[(0,p.jsx)(d,{className:`mr-2 size-4 animate-spin`}),P.loading]}):(0,p.jsx)(c,{children:P.noResultsFound}),W.length>0&&(0,p.jsx)(o,{heading:P.selectedHeading,children:W.map(e=>$({option:e,isSelected:!0,onSelect:()=>Z(e)}))}),G.length>0&&(0,p.jsxs)(p.Fragment,{children:[W.length>0&&(0,p.jsx)(a,{}),K.map(e=>(0,p.jsx)(o,{heading:e.label,children:e.options.map(e=>$({option:e,isSelected:!1,onSelect:()=>Q(e)}))},e.key===void 0?`ungrouped`:`group:${e.key}`))]}),R.hasMore&&(0,p.jsxs)(p.Fragment,{children:[(W.length>0||G.length>0)&&(0,p.jsx)(a,{}),(0,p.jsx)(`div`,{className:`p-1.5`,children:(0,p.jsxs)(`button`,{className:`flex w-full items-center justify-center rounded-xs px-2 py-1.5 text-sm text-muted-foreground hover:bg-accent hover:text-accent-foreground disabled:opacity-50`,disabled:R.isLoadingMore,type:`button`,onClick:R.loadMore,children:[R.isLoadingMore&&(0,p.jsx)(d,{className:`mr-2 size-4 animate-spin`}),R.isLoadingMore?P.loading:P.loadMore]})})]})]}),N?.({searchInput:F,clearSearch:te})]})})}export{_ as t};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{x as r}from"./dist-Cb5RSHSg.js";import{t as i}from"./inline-Cw-gigDW.js";import{i as a,n as o,r as s,t as c}from"./tabs-l9c7FjzI.js";import{o as l,t as u}from"./use-settings-navigation-BOZcat_V.js";import{i as d,o as f,t as p}from"./field-BQqLTgHM.js";import{i as m,n as h,t as g}from"./use-url-input-BEZJpVgN.js";import{On as _,Pr as v,Yi as y,cr as b,ka as x}from"./index-BOJzlYiz.js";import{t as S}from"./validator-Cr0sMKuW.js";import{t as C}from"./use-setting-group-Bx8M6FL2.js";import{t as w}from"./format-url-C-t8G6Qd.js";var T=e(S(),1),E=e(t(),1),D=e=>!!(e.label&&!e.label.match(/^\s*$/)||e.url!==`/`),O=({items:e,setItems:t})=>{let n=h({items:(0,E.useMemo)(()=>e.map(e=>({...e,errors:{}})),[e]),setItems:(0,E.useCallback)(e=>{t(e.map(({url:e,label:t})=>({url:e,label:t})))},[t]),blank:{url:`/`,label:``,errors:{}},canAddNewItem:D}),r=new RegExp(/^(\/|#|[a-zA-Z0-9-]+:)/),i=e=>{let t={};return(!e.label||e.label.match(/^\s*$/))&&(t.label=`You must specify a label`),(!e.url||e.url.match(/\s/)||!T.default.isURL(e.url,{require_protocol:!0})&&!e.url.match(r))&&(t.url=`You must specify a valid URL or relative path`),t},a=(e,t)=>{let r=n.items.find(t=>t.id===e);n.updateItem(e,{...r.item,...t})},o=()=>{let e=i(n.newItem);Object.values(e).some(e=>e)?n.setNewItem({...n.newItem,errors:e}):n.addItem()},s=e=>{n.removeItem(e)},c=(e,t)=>{n.moveItem(e,t)},l=(e,t)=>{if(e===`new`)n.setNewItem({...n.newItem,errors:{...n.newItem.errors,[t]:void 0}});else{let r=n.items.find(t=>t.id===e).item;n.updateItem(e,{...r,errors:{...r.errors,[t]:void 0}})}};return{items:n.items.map(({item:e,id:t})=>({...e,id:t})),updateItem:a,addItem:o,removeItem:s,moveItem:c,newItem:{...n.newItem,id:`new`},setNewItem:e=>n.setNewItem({...n.newItem,...e}),clearError:l,validate:()=>{let e=!0;if(n.items.forEach(({item:t,id:r})=>{let a=i(t);Object.values(a).some(e=>e)&&(e=!1,n.updateItem(r,{...t,errors:a}))}),D(n.newItem)){let t=i(n.newItem);Object.values(t).some(e=>e)&&(e=!1,n.setNewItem({...n.newItem,errors:t}))}return e}}},k=n(),A=({baseUrl:e,item:t,updateItem:n,addItem:a,clearError:o,labelPlaceholder:s,unstyled:c,textFieldClasses:l,action:u,className:m,...h})=>{let _=g({baseUrl:e,nullable:!0,value:t.url,onChange:e=>n?.({url:e||``})});return(0,k.jsxs)(`div`,{className:r(`flex w-full items-start gap-3`,m),"data-testid":`navigation-item-editor`,...h,children:[(0,k.jsx)(`div`,{className:`flex flex-1 pt-1`,children:(0,k.jsxs)(p,{className:`grow`,"data-invalid":!!t.errors.label||void 0,children:[(0,k.jsx)(f,{className:`sr-only`,htmlFor:`navigation-label-${t.id}`,children:`Label`}),(0,k.jsx)(b,{"aria-invalid":!!t.errors.label||void 0,className:r(c&&`border-0 bg-transparent shadow-none focus-visible:ring-0`,l),id:`navigation-label-${t.id}`,placeholder:s,value:t.label,onChange:e=>n?.({label:e.target.value}),onKeyDown:e=>{n?.({label:e.target.value}),e.key===`Enter`&&(e.preventDefault(),a?.()),t.errors.label&&o?.(`label`)}}),t.errors.label&&(0,k.jsx)(d,{children:t.errors.label})]})}),(0,k.jsxs)(p,{className:`flex-1 pt-1`,"data-invalid":!!t.errors.url||void 0,children:[(0,k.jsx)(f,{className:`sr-only`,htmlFor:`navigation-url-${t.id}`,children:`URL`}),(0,k.jsx)(b,{"aria-invalid":!!t.errors.url||void 0,className:l,id:`navigation-url-${t.id}`,value:_.displayValue,onBlur:_.commitValue,onChange:e=>_.setDisplayValue(e.target.value),onFocus:_.handleFocus,onKeyDown:t=>{_.handleKeyDown(t);let r=w(t.target.value,e,!0);n?.({url:r.save||``})},onKeyUp:r=>{if(r.key===`Enter`){r.preventDefault();let t=w(r.target.value,e,!0);n?.({url:t.save||``}),a?.()}t.errors.url&&o?.(`url`)}}),t.errors.url&&(0,k.jsx)(d,{children:t.errors.url})]}),u&&(0,k.jsx)(i,{align:`center`,className:`h-[calc(var(--control-height)+0.25rem)] shrink-0 translate-y-px pt-1`,children:u})]})},j=({baseUrl:e,navigation:t})=>(0,k.jsxs)(`div`,{className:`w-full pt-2`,children:[(0,k.jsx)(m,{dragHandleClass:`translate-y-0.5`,getDragHandleLabel:e=>`Reorder ${e.label||`navigation item`}`,items:t.items,itemSeparator:!1,renderItem:n=>(0,k.jsx)(A,{action:(0,k.jsx)(v,{"aria-label":`Delete navigation item`,size:`icon`,type:`button`,variant:`ghost`,onClick:()=>t.removeItem(n.id),children:(0,k.jsx)(y,{})}),baseUrl:e,clearError:e=>t.clearError(n.id,e),item:n,updateItem:e=>t.updateItem(n.id,e)}),onMove:t.moveItem}),(0,k.jsxs)(i,{align:`start`,gap:`md`,children:[(0,k.jsx)(i,{align:`center`,className:`h-[calc(var(--control-height)+0.5rem)] shrink-0 translate-y-0.5 pt-2`,children:(0,k.jsx)(x,{className:`size-4 text-muted-foreground`})}),(0,k.jsx)(A,{action:(0,k.jsx)(v,{"aria-label":`Add navigation item`,"data-testid":`add-button`,size:`icon`,type:`button`,variant:`ghost`,onClick:t.addItem,children:(0,k.jsx)(x,{})}),addItem:t.addItem,baseUrl:e,className:`mt-1`,clearError:e=>t.clearError(t.newItem.id,e),"data-testid":`new-navigation-item`,item:t.newItem,labelPlaceholder:`New item label`,updateItem:t.setNewItem})]})]});function M(){let{updateRoute:e}=u(),{localSettings:t,updateSetting:n,saveState:r,handleSave:i,siteData:d}=C(),[f,p]=_(t,[`navigation`,`secondary_navigation`]),m=(0,E.useMemo)(()=>JSON.parse(f||`[]`),[f]),h=(0,E.useMemo)(()=>JSON.parse(p||`[]`),[p]),g=(0,E.useCallback)(e=>{n(`navigation`,JSON.stringify(e))},[n]),v=(0,E.useCallback)(e=>{n(`secondary_navigation`,JSON.stringify(e))},[n]),y=O({items:m,setItems:g}),b=O({items:h,setItems:v}),[x,S]=(0,E.useState)(`primary-nav`);return(0,k.jsx)(l,{buttonsDisabled:r===`saving`,cancelLabel:`Close`,dirty:t.some(e=>e.dirty),okLabel:r===`saving`?`Saving...`:`Save`,scrolling:!0,size:`lg`,stickyFooter:!0,testId:`navigation-modal`,title:`Navigation`,onClose:()=>{e(`navigation`)},onOk:async()=>{y.validate()&&b.validate()&&(await i(),e(`navigation`))},children:(0,k.jsx)(`div`,{className:`mt-6 mb-1`,children:(0,k.jsxs)(c,{value:x,variant:`underline`,onValueChange:S,children:[(0,k.jsxs)(s,{children:[(0,k.jsx)(a,{value:`primary-nav`,children:`Primary`}),(0,k.jsx)(a,{value:`secondary-nav`,children:`Secondary`})]}),(0,k.jsx)(o,{value:`primary-nav`,children:(0,k.jsx)(j,{baseUrl:d.url,navigation:y})}),(0,k.jsx)(o,{value:`secondary-nav`,children:(0,k.jsx)(j,{baseUrl:d.url,navigation:b})})]})})})}export{M as default};