ghost 6.53.0 → 6.54.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 (596) hide show
  1. package/components/ghost-storage-base-3.0.0.tgz +0 -0
  2. package/components/tryghost-adapter-base-cache-0.2.0.tgz +0 -0
  3. package/components/tryghost-adapter-base-scheduling-0.1.1.tgz +0 -0
  4. package/components/tryghost-adapter-base-sso-0.1.1.tgz +0 -0
  5. package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
  6. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  7. package/components/tryghost-i18n-0.0.0.tgz +0 -0
  8. package/components/tryghost-kg-converters-1.2.3.tgz +0 -0
  9. package/components/tryghost-kg-default-nodes-2.1.3.tgz +0 -0
  10. package/components/tryghost-kg-lexical-html-renderer-1.4.3.tgz +0 -0
  11. package/core/boot.js +9 -6
  12. package/core/built/admin/assets/Combination-CJG7Flp-.js +41 -0
  13. package/core/built/admin/assets/Growth-CSaHoSVD.js +3 -0
  14. package/core/built/admin/assets/Newsletters-C5cs6FGo.js +1 -0
  15. package/core/built/admin/assets/Overview-j4NaeUNm.js +1 -0
  16. package/core/built/admin/assets/{PolarAngleAxis-pciQ0MOy.js → PolarAngleAxis-BGjf7sBu.js} +1 -1
  17. package/core/built/admin/assets/{RadialBarChart-DWmw2PcX.js → RadialBarChart-zeFf9mBz.js} +1 -1
  18. package/core/built/admin/assets/Web-_fD935OX.js +2 -0
  19. package/core/built/admin/assets/account-migration-DLvVA5yq.js +1 -0
  20. package/core/built/admin/assets/activitypub/{account-migration-BPZG37DJ.js → account-migration-DHbZcxGM.js} +13 -13
  21. package/core/built/admin/assets/activitypub/activitypub.js +7 -7
  22. package/core/built/admin/assets/activitypub/{avatar-ZYco0ITb.js → avatar-B3DEDB1l.js} +10 -10
  23. package/core/built/admin/assets/activitypub/{avatar-flipboard-D541lc4F.js → avatar-flipboard-Cqrg0XMx.js} +3 -3
  24. package/core/built/admin/assets/activitypub/{bluesky-sharing-NOHUtHjl.js → bluesky-sharing-zfxUey_L.js} +38 -37
  25. package/core/built/admin/assets/activitypub/{chunk-KS7C4IRE-B-GOFDPZ.js → chunk-KS7C4IRE-D4HEcEwi.js} +716 -710
  26. package/core/built/admin/assets/activitypub/{content-formatters-bwrp4iEO.js → content-formatters-BpQARh28.js} +229 -181
  27. package/core/built/admin/assets/activitypub/{copy-C7m7ovHw.js → copy-D9UWIAan.js} +2 -2
  28. package/core/built/admin/assets/activitypub/{dist-B5ira32t.js → dist-Ba_QxHHl.js} +5 -5
  29. package/core/built/admin/assets/activitypub/{domain-iqE4YXwD.js → domain-CmwSZLHK.js} +33 -33
  30. package/core/built/admin/assets/activitypub/{edit-profile-B8MFYh28.js → edit-profile-CXdwNmVG.js} +46 -45
  31. package/core/built/admin/assets/activitypub/{explore-BbdKodp3.js → explore-DfbjzGM1.js} +20 -20
  32. package/core/built/admin/assets/activitypub/{feed-Cl3A5owG.js → feed-DSEBJOqf.js} +15 -15
  33. package/core/built/admin/assets/activitypub/{field-DL6WyR-c.js → field-CY7XVcx6.js} +13 -13
  34. package/core/built/admin/assets/activitypub/{hash-6G3DzwL9.js → hash-BC9Q0N4c.js} +2 -2
  35. package/core/built/admin/assets/activitypub/{inbox-YmhuBice.js → inbox-DQ4ZnC1m.js} +2 -2
  36. package/core/built/admin/assets/activitypub/inbox-DtQ0kytT.js +1221 -0
  37. package/core/built/admin/assets/activitypub/{label-DGbLjDvE.js → label-Dw96GQ7u.js} +6 -6
  38. package/core/built/admin/assets/activitypub/layout-IdVq3lRy.js +1 -0
  39. package/core/built/admin/assets/activitypub/{moderation-qnBtk1zS.js → moderation-Dg_-I-8C.js} +32 -31
  40. package/core/built/admin/assets/activitypub/{note-C7ZRoSJv.js → note-Cy1-uKMY.js} +21 -21
  41. package/core/built/admin/assets/activitypub/{notifications-DiEA4b1o.js → notifications-B_fvoLIM.js} +17 -17
  42. package/core/built/admin/assets/activitypub/{onboarding-_JVgEwgV.js → onboarding-BFDkzeR2.js} +2 -2
  43. package/core/built/admin/assets/activitypub/{onboarding-DG4zu3qM.js → onboarding-D6rcBdPe.js} +5 -5
  44. package/core/built/admin/assets/activitypub/{preferences-B3FtocnP.js → preferences-ByJseZp6.js} +1607 -1606
  45. package/core/built/admin/assets/activitypub/{profile-D8ZJfYXB.js → profile-BFtbnIjz.js} +264 -263
  46. package/core/built/admin/assets/activitypub/{reply-C1vggenw.js → reply-CpdMeAO5.js} +2 -2
  47. package/core/built/admin/assets/activitypub/{routes-BOii-V9n.js → routes-Dh3xXfce.js} +1311 -1295
  48. package/core/built/admin/assets/activitypub/{separator-1gNokN5S.js → separator-BI1FLsYM.js} +4 -4
  49. package/core/built/admin/assets/activitypub/{settings--9Sb0nbl.js → settings-DTgqJPxM.js} +14 -14
  50. package/core/built/admin/assets/activitypub/{site-fkMmqv0V.js → site-CdL9ZLqm.js} +10 -10
  51. package/core/built/admin/assets/activitypub/{step-1-QhivSMw2.js → step-1-DIDg4aHb.js} +15 -15
  52. package/core/built/admin/assets/activitypub/{step-2-pMk9YwqD.js → step-2-BfGe8BYt.js} +7 -7
  53. package/core/built/admin/assets/activitypub/{step-3-DvmVC1fo.js → step-3-mE9spAqw.js} +12 -12
  54. package/core/built/admin/assets/activitypub/{tabs-Dc0FEEYD.js → tabs-ogqwoBlb.js} +241 -237
  55. package/core/built/admin/assets/activitypub/{topic-filter-CuDyM5bD.js → topic-filter-DLHBZT93.js} +4 -4
  56. package/core/built/admin/assets/activitypub/use-activity-pub-queries-VzbN99u_.js +1957 -0
  57. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-Drx1kdAK.js → use-navigate-with-base-path-CAwXTmqH.js} +165 -175
  58. package/core/built/admin/assets/activitypub/{use-reply-chain-data-BHkCHcW5.js → use-reply-chain-data-CxonteFD.js} +8 -8
  59. package/core/built/admin/assets/activitypub/users-BLeiOTHc.js +1464 -0
  60. package/core/built/admin/assets/activitypub/{x-BHCEe-c2.js → x-C8tAnXly.js} +2 -2
  61. package/core/built/admin/assets/{audience-adiFehTD.js → audience-BKRdsFmy.js} +1 -1
  62. package/core/built/admin/assets/{automated-emails-UWM02CMr.js → automated-emails-Cn87L5Md.js} +1 -1
  63. package/core/built/admin/assets/automations-B7-y3dXt.js +1 -0
  64. package/core/built/admin/assets/automations-BP_aHamJ.js +1 -0
  65. package/core/built/admin/assets/{avatar-flipboard-Lz3F9fNT.js → avatar-flipboard-C6Kj3Awu.js} +1 -1
  66. package/core/built/admin/assets/bluesky-sharing-Bh36XPh4.js +1 -0
  67. package/core/built/admin/assets/box-BWbhXh21.js +1 -0
  68. package/core/built/admin/assets/breadcrumb-D34YWnaw.js +1 -0
  69. package/core/built/admin/assets/card-DGoDJzrn.js +1 -0
  70. package/core/built/admin/assets/{chart-ChpW-NzQ.js → chart-BuRT2Y6p.js} +14 -14
  71. package/core/built/admin/assets/chart-helpers-DbklaJw9.js +1 -0
  72. package/core/built/admin/assets/checkbox-DA4-1UiI.js +1 -0
  73. package/core/built/admin/assets/chunk.524.45e0875f41b71e46e849.js +25 -0
  74. package/core/built/admin/assets/chunk.582.51defd4b009f0de8d4d5.js +27 -0
  75. package/core/built/admin/assets/{chunk.831.0703a12e49f51cec3f3a.js → chunk.589.096f4d0bb775e5229aa9.js} +78 -85
  76. package/core/built/admin/assets/{chunk.432.c2caa0b20f03e71d1a35.js → chunk.962.b73442b07be930bb5d85.js} +2216 -3188
  77. package/core/built/admin/assets/{chunk.432.c2caa0b20f03e71d1a35.js.LICENSE.txt → chunk.962.b73442b07be930bb5d85.js.LICENSE.txt} +0 -63
  78. package/core/built/admin/assets/code-editor-view-BKBrkffZ.js +1 -0
  79. package/core/built/admin/assets/comments-CzVNIT8b.js +1 -0
  80. package/core/built/admin/assets/container-BYz2Ed39.js +1 -0
  81. package/core/built/admin/assets/data-list-16rkJYYi.js +1 -0
  82. package/core/built/admin/assets/date-range-select-B5vSsrpx.js +1 -0
  83. package/core/built/admin/assets/disabled-sources-indicator-NkOIoMue.js +1 -0
  84. package/core/built/admin/assets/{dist-CsekE4FL.js → dist-CQJY6SVY.js} +1 -1
  85. package/core/built/admin/assets/dist-DGzPJ_bO.js +4 -0
  86. package/core/built/admin/assets/{dist-BbGrW05X.js → dist-DyViJwIy.js} +1 -1
  87. package/core/built/admin/assets/dist-Ndy-PuGN.js +1 -0
  88. package/core/built/admin/assets/dist-P_ohUlTi.js +1 -0
  89. package/core/built/admin/assets/domain-B7_n5nfx.js +1 -0
  90. package/core/built/admin/assets/dropzone-DcuJEEUf.js +5 -0
  91. package/core/built/admin/assets/edit-profile-rvDGrS8J.js +1 -0
  92. package/core/built/admin/assets/editor-BCiIyFjm.js +8 -0
  93. package/core/built/admin/assets/empty-indicator-oX1u1Pkn.js +1 -0
  94. package/core/built/admin/assets/esm-CFX93H5M.js +2 -0
  95. package/core/built/admin/assets/explore-BZAZOg5X.js +1 -0
  96. package/core/built/admin/assets/feed-CFV8xDw9.js +1 -0
  97. package/core/built/admin/assets/field-BW-M2Zwp.js +1 -0
  98. package/core/built/admin/assets/{filter-sources-v39ihhhV.js → filter-sources-Fx8wiYYw.js} +1 -1
  99. package/core/built/admin/assets/filters-CGX_pf2N.js +1 -0
  100. package/core/built/admin/assets/filters-DtcXMZDU.js +1 -0
  101. package/core/built/admin/assets/framework-provider-CmtnPXIT.js +4 -0
  102. package/core/built/admin/assets/{ghost-b57f077997b739a8ae9a70772dc016cb.js → ghost-b1dce91ad3232cc259ee5fbbf9526243.js} +294 -290
  103. package/core/built/admin/assets/ghost-dark-c8d0ab7f515b2010c173e23e9b32ea8a.css +1 -0
  104. package/core/built/admin/assets/gift-link-modal-Bk8qpnMw.js +1 -0
  105. package/core/built/admin/assets/{gift-links-CY3GwiVi.js → gift-links-nBxJjZiQ.js} +1 -1
  106. package/core/built/admin/assets/growth-Ck2s3JjR.js +1 -0
  107. package/core/built/admin/assets/hooks-BApwwBE0.js +2 -0
  108. package/core/built/admin/assets/{inbox-TEISAmth.js → inbox-BRp1_aaC.js} +35 -35
  109. package/core/built/admin/assets/index-BBf502Wg.js +69 -0
  110. package/core/built/admin/assets/index-BCCZKxP2.css +1 -0
  111. package/core/built/admin/assets/inline-EMAm3okk.js +1 -0
  112. package/core/built/admin/assets/input-group-DjuYnNCd.js +1 -0
  113. package/core/built/admin/assets/{react-dom-C6aoWSfl.js → jsx-runtime-DX3WBWVO.js} +1 -1
  114. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +5 -2
  115. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +2 -2
  116. package/core/built/admin/assets/{koenig-lexical-Di7b48ED.js → koenig-lexical-CM7UFNdL.js} +2 -2
  117. package/core/built/admin/assets/kpi-card-BrGH6FsT.js +1 -0
  118. package/core/built/admin/assets/kpi-card-CIGyijjx.js +1 -0
  119. package/core/built/admin/assets/kpi-helpers-_HRRsklE.js +1 -0
  120. package/core/built/admin/assets/kpi-tabs-BSvh9eoq.js +1 -0
  121. package/core/built/admin/assets/label-BOR9XdKl.js +1 -0
  122. package/core/built/admin/assets/label-picker-BdNAWuUX.js +1 -0
  123. package/core/built/admin/assets/{labels-GbxlXWtf.js → labels-Cyayfd-e.js} +1 -1
  124. package/core/built/admin/assets/layout-Bw4GnxXp.js +1 -0
  125. package/core/built/admin/assets/limit-service-9fwD33lU.js +20 -0
  126. package/core/built/admin/assets/link-helpers-tOlxmuH5.js +1 -0
  127. package/core/built/admin/assets/list-page-B6ANtzkd.js +1 -0
  128. package/core/built/admin/assets/mailchimp-Ds_NQ04w.svg +9 -0
  129. package/core/built/admin/assets/member-custom-fields-DvFyamLu.js +1 -0
  130. package/core/built/admin/assets/member-detail-Cg2vTqvJ.js +1 -0
  131. package/core/built/admin/assets/members-DsPxYAVm.js +10 -0
  132. package/core/built/admin/assets/modals-Bf_fyvHZ.js +31 -0
  133. package/core/built/admin/assets/moderation-Dlp7M5sa.js +1 -0
  134. package/core/built/admin/assets/multi-select-combobox-CH1o8XXQ.js +1 -0
  135. package/core/built/admin/assets/newsletter-CQ5CAYUI.js +1 -0
  136. package/core/built/admin/assets/{newsletters-DZm3yLj8.js → newsletters-D1jbtV-h.js} +1 -1
  137. package/core/built/admin/assets/note-BrAZ7Z0o.js +1 -0
  138. package/core/built/admin/assets/notifications-BnbHLOPC.js +1 -0
  139. package/core/built/admin/assets/nql-lang-B7faUf8D.js +19 -0
  140. package/core/built/admin/assets/{offers-D11QtPXX.js → offers-CrY6nSRR.js} +1 -1
  141. package/core/built/admin/assets/onboarding-route-eU146kuA.js +1 -0
  142. package/core/built/admin/assets/overview-BpbaK-xu.js +1 -0
  143. package/core/built/admin/assets/page-header-C0jVxtS8.js +1 -0
  144. package/core/built/admin/assets/{pages-BnObVRrf.js → pages-BbNWFcGj.js} +1 -1
  145. package/core/built/admin/assets/pintura-CXOmq-5H.svg +15 -0
  146. package/core/built/admin/assets/post-analytics-Iw7dk1mT.js +1 -0
  147. package/core/built/admin/assets/post-analytics-header-D9pJ4iNm.js +1 -0
  148. package/core/built/admin/assets/{post-analytics-provider-DSfBCtnj.js → post-analytics-provider-BDqcfBor.js} +1 -1
  149. package/core/built/admin/assets/post-share-modal-DBfKl2GZ.js +1 -0
  150. package/core/built/admin/assets/{posts-CwH8VJvB.js → posts-EWpZIjkr.js} +1 -1
  151. package/core/built/admin/assets/preferences-D4EANGoc.js +5 -0
  152. package/core/built/admin/assets/profile-dJ44Bn_W.js +1 -0
  153. package/core/built/admin/assets/{referrers-nxR52jPI.js → referrers-BCfFYSHc.js} +1 -1
  154. package/core/built/admin/assets/router-provider-C1R4AZ2o.js +1 -0
  155. package/core/built/admin/assets/select--2uVN9_-.js +1 -0
  156. package/core/built/admin/assets/settings-Bz3RZRmE.js +1 -0
  157. package/core/built/admin/assets/settings-SD9bxIpt.js +4 -0
  158. package/core/built/admin/assets/share-modal-CkdTTMJd.js +1 -0
  159. package/core/built/admin/assets/social-urls-BvFZwYcE.js +8 -0
  160. package/core/built/admin/assets/sort-button-DZp9Y2r1.js +1 -0
  161. package/core/built/admin/assets/source-icon-CHr9qJ2Y.js +1 -0
  162. package/core/built/admin/assets/stack-xiN0eQ6Z.js +1 -0
  163. package/core/built/admin/assets/stats-DGoXZxWE.js +1 -0
  164. package/core/built/admin/assets/stats-view-D2-1L0ms.js +1 -0
  165. package/core/built/admin/assets/step-1-RdahbwyG.js +1 -0
  166. package/core/built/admin/assets/step-2-D83PeRwd.js +1 -0
  167. package/core/built/admin/assets/step-3-p_Op4wv4.js +2 -0
  168. package/core/built/admin/assets/switch-qp518gFQ.js +1 -0
  169. package/core/built/admin/assets/table-B8LgTQJZ.js +1 -0
  170. package/core/built/admin/assets/tabs-D3ZOYkM7.js +1 -0
  171. package/core/built/admin/assets/tags-B4l891z2.js +1 -0
  172. package/core/built/admin/assets/text-DwtjwGkh.js +1 -0
  173. package/core/built/admin/assets/textarea-CTlb3Uu6.js +1 -0
  174. package/core/built/admin/assets/{tiers-EghDzCKc.js → tiers-BgYLWRJv.js} +1 -1
  175. package/core/built/admin/assets/toggle-group-DNXDkAwf.js +1 -0
  176. package/core/built/admin/assets/topic-filter-DZGjEcz3.js +1 -0
  177. package/core/built/admin/assets/{use-analytics-data-0l_OHtnR.js → use-analytics-data-CaT8RirX.js} +1 -1
  178. package/core/built/admin/assets/use-filter-params-DeQ8sX4N.js +1 -0
  179. package/core/built/admin/assets/use-growth-stats-9Db2CuJe.js +1 -0
  180. package/core/built/admin/assets/{use-post-referrers-DwI31Ril.js → use-post-referrers-BV54YcQS.js} +1 -1
  181. package/core/built/admin/assets/use-reply-chain-data-DuYZGDan.js +1 -0
  182. package/core/built/admin/assets/use-simple-pagination-8fTua9Nt.js +1 -0
  183. package/core/built/admin/assets/{use-tinybird-query-DvZBBMG7.js → use-tinybird-query-Dz156HvZ.js} +1 -1
  184. package/core/built/admin/assets/{use-tinybird-token-CQtebkvU.js → use-tinybird-token-C9RUdL_n.js} +1 -1
  185. package/core/built/admin/assets/{users-Pc8IRjk9.js → users-CcSCQFcQ.js} +1 -1
  186. package/core/built/admin/assets/virtual-list-BCvP0YF-.js +1 -0
  187. package/core/built/admin/assets/web-DTZnnUGr.js +1 -0
  188. package/core/built/admin/index.html +18 -22
  189. package/core/frontend/apps/private-blogging/index.js +1 -1
  190. package/core/frontend/apps/private-blogging/lib/middleware.js +1 -1
  191. package/core/frontend/helpers/split.js +2 -1
  192. package/core/frontend/meta/asset-url.js +1 -1
  193. package/core/frontend/meta/author-image.js +1 -1
  194. package/core/frontend/meta/blog-logo.js +1 -1
  195. package/core/frontend/meta/canonical-url.js +1 -1
  196. package/core/frontend/meta/cover-image.js +1 -1
  197. package/core/frontend/meta/get-meta.js +1 -1
  198. package/core/frontend/meta/og-image.js +1 -1
  199. package/core/frontend/meta/paginated-url.js +1 -1
  200. package/core/frontend/meta/twitter-image.js +1 -1
  201. package/core/frontend/meta/url.js +1 -1
  202. package/core/frontend/services/assets-minification/admin-auth-assets.js +1 -1
  203. package/core/frontend/services/llms/handler.js +1 -1
  204. package/core/frontend/services/proxy.js +31 -2
  205. package/core/frontend/services/routing/collection-router.js +1 -1
  206. package/core/frontend/services/routing/controllers/email-post.js +1 -1
  207. package/core/frontend/services/routing/controllers/entry/markdown.js +1 -1
  208. package/core/frontend/services/routing/controllers/entry/markdown.ts +1 -1
  209. package/core/frontend/services/routing/controllers/entry.js +1 -1
  210. package/core/frontend/services/routing/controllers/entry.ts +1 -1
  211. package/core/frontend/services/routing/controllers/previews.js +6 -7
  212. package/core/frontend/services/routing/controllers/unsubscribe.js +7 -3
  213. package/core/frontend/services/routing/email-router.js +1 -1
  214. package/core/frontend/services/routing/events.js +12 -0
  215. package/core/frontend/services/routing/middleware/page-param.js +1 -1
  216. package/core/frontend/services/routing/parent-router.js +1 -1
  217. package/core/frontend/services/routing/preview-router.js +1 -1
  218. package/core/frontend/services/routing/router-manager.js +4 -8
  219. package/core/frontend/services/routing/rss-router.js +1 -1
  220. package/core/frontend/services/routing/static-pages-router.js +1 -1
  221. package/core/frontend/services/routing/static-routes-router.js +1 -1
  222. package/core/frontend/services/routing/taxonomy-router.js +1 -1
  223. package/core/frontend/services/rss/generate-feed.js +1 -1
  224. package/core/frontend/services/sitemap/base-site-map-generator.js +23 -4
  225. package/core/frontend/services/sitemap/site-map-index-generator.js +1 -1
  226. package/core/frontend/services/sitemap/site-map-manager.js +14 -8
  227. package/core/frontend/services/sitemap/utils.js +1 -1
  228. package/core/frontend/services/theme-engine/middleware/update-global-template-options.js +1 -1
  229. package/core/frontend/services/theme-engine/middleware/update-local-template-options.js +1 -1
  230. package/core/frontend/utils/images.js +1 -1
  231. package/core/frontend/web/middleware/admin-toolbar.js +1 -1
  232. package/core/frontend/web/middleware/handle-image-sizes.js +2 -2
  233. package/core/frontend/web/middleware/redirect-ghost-to-admin.js +1 -1
  234. package/core/frontend/web/routers/serve-favicon.js +1 -1
  235. package/core/frontend/web/routers/serve-public-file.js +1 -1
  236. package/core/frontend/web/site.js +5 -5
  237. package/core/server/adapters/cache/AdapterCacheMemoryTTL.js +2 -2
  238. package/core/server/adapters/cache/MemoryCache.js +2 -2
  239. package/core/server/adapters/cache/Redis.js +1 -1
  240. package/core/server/adapters/cache/index.js +1 -1
  241. package/core/server/adapters/lib/redis/AdapterCacheRedis.js +2 -2
  242. package/core/server/adapters/route-settings/FileStore.js +2 -8
  243. package/core/server/adapters/route-settings/FileStore.ts +1 -6
  244. package/core/server/adapters/route-settings/S3RouteSettingsStore.js +206 -0
  245. package/core/server/adapters/route-settings/S3RouteSettingsStore.ts +199 -0
  246. package/core/server/adapters/route-settings/utils.js +13 -0
  247. package/core/server/adapters/route-settings/utils.ts +7 -0
  248. package/core/server/adapters/scheduling/deps.d.ts +0 -2
  249. package/core/server/adapters/scheduling/error-capture.js +76 -0
  250. package/core/server/adapters/scheduling/error-capture.ts +91 -0
  251. package/core/server/adapters/scheduling/utils.js +18 -34
  252. package/core/server/adapters/scheduling/utils.ts +36 -0
  253. package/core/server/adapters/storage/LocalFilesStorage.js +1 -1
  254. package/core/server/adapters/storage/LocalImagesStorage.js +1 -1
  255. package/core/server/adapters/storage/LocalMediaStorage.js +1 -1
  256. package/core/server/adapters/storage/LocalStorageBase.js +3 -3
  257. package/core/server/adapters/storage/S3Storage.js +2 -2
  258. package/core/server/adapters/storage/S3Storage.ts +1 -1
  259. package/core/server/adapters/storage/utils.js +1 -1
  260. package/core/server/api/endpoints/authentication.js +1 -1
  261. package/core/server/api/endpoints/featurebase.js +1 -1
  262. package/core/server/api/endpoints/files.js +2 -2
  263. package/core/server/api/endpoints/images.js +2 -2
  264. package/core/server/api/endpoints/libraries.d.ts +0 -1
  265. package/core/server/api/endpoints/media.js +8 -5
  266. package/core/server/api/endpoints/member-custom-fields.js +4 -1
  267. package/core/server/api/endpoints/member-custom-fields.ts +4 -1
  268. package/core/server/api/endpoints/posts.js +17 -1
  269. package/core/server/api/endpoints/search-index-public.js +4 -3
  270. package/core/server/api/endpoints/search-index.js +5 -4
  271. package/core/server/api/endpoints/settings-public.js +1 -1
  272. package/core/server/api/endpoints/settings.js +3 -1
  273. package/core/server/api/endpoints/utils/serializers/input/utils/url.js +9 -1
  274. package/core/server/api/endpoints/utils/serializers/output/default.js +7 -0
  275. package/core/server/api/endpoints/utils/serializers/output/files.js +1 -1
  276. package/core/server/api/endpoints/utils/serializers/output/media.js +1 -1
  277. package/core/server/api/endpoints/utils/serializers/output/member-custom-fields.js +7 -4
  278. package/core/server/api/endpoints/utils/serializers/output/member-custom-fields.ts +8 -4
  279. package/core/server/api/endpoints/utils/serializers/output/members.js +16 -26
  280. package/core/server/api/endpoints/utils/serializers/output/pages.js +7 -0
  281. package/core/server/api/endpoints/utils/serializers/output/posts.js +13 -0
  282. package/core/server/api/endpoints/utils/serializers/output/utils/url.js +1 -1
  283. package/core/server/api/endpoints/utils/validators/input/members.js +2 -52
  284. package/core/server/data/db/backup.js +1 -1
  285. package/core/server/data/importer/handlers/image.js +3 -3
  286. package/core/server/data/importer/import-manager.js +6 -4
  287. package/core/server/data/importer/importers/content-file-importer.js +2 -2
  288. package/core/server/data/migrations/utils/schema.js +4 -2
  289. package/core/server/data/migrations/versions/6.54/2026-07-19-16-59-00-add-content-import-permission.js +10 -0
  290. package/core/server/data/migrations/versions/6.54/2026-07-20-13-59-21-drop-email-tracked-sent-count-from-automation-action-revisions.js +7 -0
  291. package/core/server/data/migrations/versions/6.54/2026-07-21-01-58-20-add-automation-run-steps-poller-index.js +3 -0
  292. package/core/server/data/migrations/versions/6.54/2026-07-21-21-08-15-add-automated-email-recipients-mailgun-message-id-index.js +3 -0
  293. package/core/server/data/migrations/versions/6.54/2026-07-22-10-41-08-add-click-tracking-to-automated-email-recipients.js +13 -0
  294. package/core/server/data/migrations/versions/6.54/2026-07-22-15-10-30-add-email-clicked-count-to-automation-action-revisions.js +7 -0
  295. package/core/server/data/migrations/versions/6.54/2026-07-23-10-24-18-add-automation-action-revision-to-redirects.js +9 -0
  296. package/core/server/data/schema/commands.js +37 -3
  297. package/core/server/data/schema/fixtures/fixtures.json +7 -0
  298. package/core/server/data/schema/lib/default-index-name.js +20 -0
  299. package/core/server/data/schema/schema.js +40 -17
  300. package/core/server/data/seeders/data-generator.js +4 -2
  301. package/core/server/lib/image/image-size.js +5 -7
  302. package/core/server/lib/image/image-utils.js +2 -2
  303. package/core/server/lib/image/index.js +4 -4
  304. package/core/server/lib/lexical.js +3 -3
  305. package/core/server/lib/mobiledoc.js +2 -2
  306. package/core/server/lib/validate-password.js +1 -1
  307. package/core/server/models/action.js +9 -0
  308. package/core/server/models/base/plugins/generate-slug.js +1 -1
  309. package/core/server/models/collection.js +1 -1
  310. package/core/server/models/custom-theme-setting.js +1 -1
  311. package/core/server/models/member.js +73 -0
  312. package/core/server/models/newsletter.js +1 -1
  313. package/core/server/models/post.js +19 -5
  314. package/core/server/models/posts-meta.js +1 -1
  315. package/core/server/models/redirect.js +1 -1
  316. package/core/server/models/settings.js +1 -1
  317. package/core/server/models/snippet.js +1 -1
  318. package/core/server/models/tag.js +1 -1
  319. package/core/server/models/user.js +1 -1
  320. package/core/server/models/welcome-email-automated-email.js +1 -1
  321. package/core/server/services/activitypub/activity-pub-service-wrapper.js +1 -1
  322. package/core/server/services/adapter-manager/adapter-manager.js +5 -1
  323. package/core/server/services/adapter-manager/adapter-manager.ts +7 -2
  324. package/core/server/services/adapter-manager/index.js +18 -15
  325. package/core/server/services/adapter-manager/index.ts +23 -17
  326. package/core/server/services/adapter-manager/utils.js +124 -14
  327. package/core/server/services/adapter-manager/utils.ts +130 -14
  328. package/core/server/services/api-version-compatibility/mw-version-rewrites.js +1 -1
  329. package/core/server/services/audience-feedback/index.js +1 -1
  330. package/core/server/services/auth/passwordreset.js +1 -1
  331. package/core/server/services/auth/session/express-session.js +1 -1
  332. package/core/server/services/auth/session/index.js +2 -2
  333. package/core/server/services/auth/session/session-service.js +1 -1
  334. package/core/server/services/automations/automations-api.js +2 -19
  335. package/core/server/services/automations/automations-api.ts +2 -31
  336. package/core/server/services/automations/automations-repository.ts +15 -0
  337. package/core/server/services/automations/database-automations-repository.js +30 -2
  338. package/core/server/services/automations/database-automations-repository.ts +33 -2
  339. package/core/server/services/automations/poll.js +16 -12
  340. package/core/server/services/automations/poll.ts +17 -15
  341. package/core/server/services/automations/service.js +1 -1
  342. package/core/server/services/automations/service.ts +3 -13
  343. package/core/server/services/automations/welcome-email-automation-poll.js +2 -1
  344. package/core/server/services/comments/index.js +1 -1
  345. package/core/server/services/custom-redirects/index.js +2 -2
  346. package/core/server/services/email-analytics/email-analytics-service-wrapper.js +14 -13
  347. package/core/server/services/email-analytics/email-analytics-service.js +1 -1
  348. package/core/server/services/email-analytics/events/start-email-analytics-job-event.js +11 -15
  349. package/core/server/services/email-analytics/events/start-email-analytics-job-event.ts +15 -0
  350. package/core/server/services/email-analytics/index.js +2 -3
  351. package/core/server/services/email-analytics/index.ts +1 -2
  352. package/core/server/services/email-analytics/jobs/email-analytics-job-scheduler.js +1 -6
  353. package/core/server/services/email-analytics/jobs/email-analytics-job-scheduler.ts +0 -9
  354. package/core/server/services/email-analytics/jobs/fetch-latest/index.js +1 -1
  355. package/core/server/services/email-analytics/jobs/index.js +0 -2
  356. package/core/server/services/email-service/email-service-wrapper.js +1 -1
  357. package/core/server/services/email-service/email-service.js +20 -4
  358. package/core/server/services/explore-ping/explore-ping-service.js +24 -39
  359. package/core/server/services/explore-ping/explore-ping-service.ts +198 -0
  360. package/core/server/services/explore-ping/index.js +11 -11
  361. package/core/server/services/explore-ping/index.ts +42 -0
  362. package/core/server/services/gifts/gift-reminder-scheduler.js +1 -1
  363. package/core/server/services/gifts/gift-reminder-scheduler.ts +1 -1
  364. package/core/server/services/gifts/gift-service-wrapper.js +1 -1
  365. package/core/server/services/identity-tokens/identity-token-service-wrapper.js +1 -1
  366. package/core/server/services/indexnow-ping/constants.js +30 -0
  367. package/core/server/services/indexnow-ping/constants.ts +32 -0
  368. package/core/server/services/indexnow-ping/index.js +29 -253
  369. package/core/server/services/indexnow-ping/index.ts +37 -0
  370. package/core/server/services/indexnow-ping/indexnow-ping-service.js +229 -0
  371. package/core/server/services/indexnow-ping/indexnow-ping-service.ts +319 -0
  372. package/core/server/services/invites/index.js +1 -1
  373. package/core/server/services/lib/mailgun-client.js +3 -3
  374. package/core/server/services/link-redirection/index.js +2 -2
  375. package/core/server/services/link-redirection/link-redirect-repository.js +1 -1
  376. package/core/server/services/link-redirection/link-redirect.js +12 -13
  377. package/core/server/services/link-redirection/link-redirect.ts +22 -0
  378. package/core/server/services/link-redirection/link-redirects-service.js +1 -1
  379. package/core/server/services/link-tracking/full-post-link.js +2 -2
  380. package/core/server/services/link-tracking/index.js +1 -1
  381. package/core/server/services/mail/ghost-mailer.js +1 -1
  382. package/core/server/services/mail/index.js +1 -1
  383. package/core/server/services/media-inliner/external-media-inliner.js +2 -2
  384. package/core/server/services/media-inliner/service.js +4 -3
  385. package/core/server/services/member-attribution/index.js +1 -1
  386. package/core/server/services/member-welcome-emails/service.js +1 -1
  387. package/core/server/services/members/api.js +8 -2
  388. package/core/server/services/members/csv/index.js +10 -0
  389. package/core/server/services/members/csv/index.ts +3 -0
  390. package/core/server/services/members/csv/parse.js +94 -0
  391. package/core/server/services/members/csv/parse.ts +111 -0
  392. package/core/server/services/members/csv/types.js +2 -0
  393. package/core/server/services/members/csv/types.ts +39 -0
  394. package/core/server/services/members/csv/unparse.js +69 -0
  395. package/core/server/services/members/csv/unparse.ts +79 -0
  396. package/core/server/services/members/exporter/query.js +35 -8
  397. package/core/server/services/members/importer/config.js +35 -0
  398. package/core/server/services/members/importer/config.ts +39 -0
  399. package/core/server/services/members/importer/members-csv-importer.js +31 -13
  400. package/core/server/services/members/members-api/members-api.js +4 -2
  401. package/core/server/services/members/members-api/repositories/event-repository.js +13 -2
  402. package/core/server/services/members/members-api/services/member-bread-service.js +42 -19
  403. package/core/server/services/members/middleware.js +1 -1
  404. package/core/server/services/members/service.js +15 -2
  405. package/core/server/services/members/stripe-connect.js +1 -1
  406. package/core/server/services/members-custom-fields/actions.js +3 -0
  407. package/core/server/services/members-custom-fields/actions.ts +6 -2
  408. package/core/server/services/members-custom-fields/config.js +34 -0
  409. package/core/server/services/members-custom-fields/config.ts +38 -0
  410. package/core/server/services/members-custom-fields/definitions-service.js +156 -21
  411. package/core/server/services/members-custom-fields/definitions-service.ts +170 -25
  412. package/core/server/services/members-custom-fields/index.js +16 -3
  413. package/core/server/services/members-custom-fields/index.ts +17 -3
  414. package/core/server/services/members-custom-fields/values-service.js +56 -10
  415. package/core/server/services/members-custom-fields/values-service.ts +62 -10
  416. package/core/server/services/mentions/mention-sending-service.js +22 -2
  417. package/core/server/services/mentions/service.js +21 -5
  418. package/core/server/services/newsletters/index.js +1 -1
  419. package/core/server/services/oembed/oembed-service.js +122 -33
  420. package/core/server/services/oembed/service.js +4 -2
  421. package/core/server/services/offers/service.js +1 -1
  422. package/core/server/services/post-scheduling/index.js +4 -3
  423. package/core/server/services/post-scheduling/index.ts +4 -3
  424. package/core/server/services/post-scheduling/post-scheduling.js +1 -1
  425. package/core/server/services/post-scheduling/post-scheduling.ts +1 -1
  426. package/core/server/services/posts/post-email-handler.js +13 -6
  427. package/core/server/services/posts/post-scheduling.js +1 -1
  428. package/core/server/services/posts/posts-service-instance.js +1 -1
  429. package/core/server/services/posts/posts-service.js +2 -2
  430. package/core/server/services/posts-public/service.js +1 -1
  431. package/core/server/services/public-config/site.js +1 -1
  432. package/core/server/services/recommendations/recommendation-service-wrapper.js +1 -1
  433. package/core/server/services/recommendations/service/libraries.d.ts +0 -2
  434. package/core/server/services/route-settings/dynamic-routing-service.js +2 -3
  435. package/core/server/services/route-settings/index.js +1 -1
  436. package/core/server/services/route-settings/route-settings-parser.js +134 -124
  437. package/core/server/services/route-settings/route-settings-parser.ts +160 -125
  438. package/core/server/services/route-settings/validation-errors.js +178 -0
  439. package/core/server/services/route-settings/validation-errors.ts +196 -0
  440. package/core/server/services/settings/settings-service.js +2 -2
  441. package/core/server/services/settings-helpers/index.js +1 -1
  442. package/core/server/services/slack-notifications/service.js +1 -1
  443. package/core/server/services/slack-ping/constants.js +16 -0
  444. package/core/server/services/slack-ping/constants.ts +15 -0
  445. package/core/server/services/slack-ping/index.js +26 -204
  446. package/core/server/services/slack-ping/index.ts +35 -0
  447. package/core/server/services/slack-ping/slack-ping-service.js +214 -0
  448. package/core/server/services/slack-ping/slack-ping-service.ts +296 -0
  449. package/core/server/services/staff/index.js +1 -1
  450. package/core/server/services/stats/posts-stats-service.js +1 -1
  451. package/core/server/services/stats/service.js +1 -1
  452. package/core/server/services/stripe/service.js +1 -1
  453. package/core/server/services/tags-public/service.js +1 -1
  454. package/core/server/services/themes/validate.js +1 -1
  455. package/core/server/services/update-check/index.js +1 -1
  456. package/core/server/services/url/lazy-url-service.js +66 -6
  457. package/core/server/services/url/lazy-url-service.ts +73 -6
  458. package/core/server/services/url/url-generator.js +1 -1
  459. package/core/server/services/url/url-service-facade.js +68 -3
  460. package/core/server/services/url/url-service-facade.ts +79 -4
  461. package/core/server/services/url/url-service.js +1 -1
  462. package/core/server/services/url/urls.js +1 -1
  463. package/core/server/services/webhooks/index.js +19 -2
  464. package/core/server/services/webhooks/listen.js +6 -11
  465. package/core/server/services/webhooks/payload.js +1 -3
  466. package/core/server/services/webhooks/serialize.js +16 -1
  467. package/core/server/web/admin/app.js +1 -1
  468. package/core/server/web/admin/middleware/redirect-admin-urls.js +1 -1
  469. package/core/server/web/api/endpoints/admin/routes.js +1 -0
  470. package/core/server/web/api/middleware/cors.js +1 -1
  471. package/core/server/web/api/middleware/upload.js +4 -0
  472. package/core/server/web/gift-preview/controller.js +1 -1
  473. package/core/server/web/shared/middleware/redirect-amp-urls.js +1 -1
  474. package/core/server/web/shared/middleware/uncapitalise.js +2 -2
  475. package/core/server/web/shared/middleware/url-redirects.js +1 -1
  476. package/core/shared/config/defaults.json +8 -1
  477. package/core/shared/config/overrides.json +4 -0
  478. package/core/shared/url-utils.js +19 -15
  479. package/core/shared/url-utils.ts +20 -0
  480. package/ghost.js +0 -1
  481. package/package.json +26 -31
  482. package/pnpm-lock.yaml +681 -2789
  483. package/pnpm-workspace.yaml +31 -17
  484. package/components/tryghost-adapter-base-scheduling-0.0.0.tgz +0 -0
  485. package/components/tryghost-adapter-base-sso-0.0.0.tgz +0 -0
  486. package/core/built/admin/assets/Combination--5EZGaDs.js +0 -43
  487. package/core/built/admin/assets/Growth-C0NoKcHQ.js +0 -3
  488. package/core/built/admin/assets/Newsletters-Ed8kDjdy.js +0 -1
  489. package/core/built/admin/assets/Overview-CArPgRZt.js +0 -1
  490. package/core/built/admin/assets/Web-CjjYoVM3.js +0 -2
  491. package/core/built/admin/assets/account-migration-mfa5mNI9.js +0 -1
  492. package/core/built/admin/assets/activitypub/inbox-B3rjKMTv.js +0 -1221
  493. package/core/built/admin/assets/activitypub/layout-jcurg3rU.js +0 -1
  494. package/core/built/admin/assets/activitypub/use-activity-pub-queries-yqGRcnLn.js +0 -2569
  495. package/core/built/admin/assets/activitypub/users-CfyHIsTG.js +0 -1316
  496. package/core/built/admin/assets/automations-DkUnxNdv.js +0 -1
  497. package/core/built/admin/assets/automations-vjXofmV_.js +0 -1
  498. package/core/built/admin/assets/bluesky-sharing-T-pO3RcP.js +0 -1
  499. package/core/built/admin/assets/breadcrumb-CekPYTCn.js +0 -1
  500. package/core/built/admin/assets/button--i2uMDDn.js +0 -4
  501. package/core/built/admin/assets/card-CSWz_BXq.js +0 -1
  502. package/core/built/admin/assets/chart-helpers-C_4Ka_vT.js +0 -1
  503. package/core/built/admin/assets/chunk.524.8ce2c741473e2f0929dc.js +0 -25
  504. package/core/built/admin/assets/chunk.582.453459d6228d2955408b.js +0 -27
  505. package/core/built/admin/assets/code-editor-view-BfkwQto2.js +0 -1
  506. package/core/built/admin/assets/command-K75Jzs0G.js +0 -1
  507. package/core/built/admin/assets/comments-BEIi1DH-.js +0 -1
  508. package/core/built/admin/assets/container-BNXvlcjA.js +0 -1
  509. package/core/built/admin/assets/data-list-BmK5QMab.js +0 -1
  510. package/core/built/admin/assets/date-range-select-5sKzwbt7.js +0 -1
  511. package/core/built/admin/assets/disabled-sources-indicator-L_ssJTNr.js +0 -1
  512. package/core/built/admin/assets/dist-BBIJuyPg.js +0 -1
  513. package/core/built/admin/assets/dist-BHE0dp6o.js +0 -1
  514. package/core/built/admin/assets/dist-DJ6c4_De.js +0 -1
  515. package/core/built/admin/assets/dist-DW0QXQO3.js +0 -1
  516. package/core/built/admin/assets/dist-DxFLceO5.js +0 -1
  517. package/core/built/admin/assets/dist-QcACAOAD.js +0 -1
  518. package/core/built/admin/assets/dist-duxRDcQu.js +0 -177
  519. package/core/built/admin/assets/domain-CLaPZ9Rc.js +0 -1
  520. package/core/built/admin/assets/dropzone-E0bSX4_a.js +0 -5
  521. package/core/built/admin/assets/edit-profile-DqNPKaA4.js +0 -1
  522. package/core/built/admin/assets/editor-CkLXQDRp.js +0 -8
  523. package/core/built/admin/assets/empty-indicator-BTtOlgIo.js +0 -1
  524. package/core/built/admin/assets/esm-TSfGW7nz.js +0 -2
  525. package/core/built/admin/assets/explore-BEstLxKr.js +0 -1
  526. package/core/built/admin/assets/feed-C58p2voG.js +0 -1
  527. package/core/built/admin/assets/field-BSbDUHPv.js +0 -1
  528. package/core/built/admin/assets/filters-BgYv8Gt7.js +0 -1
  529. package/core/built/admin/assets/filters-DvenFkmK.js +0 -1
  530. package/core/built/admin/assets/framework-provider-jQktxm9P.js +0 -4
  531. package/core/built/admin/assets/ghost-dark-8590dea6cd695ff90f27d262c4464538.css +0 -1
  532. package/core/built/admin/assets/gift-link-modal-BPjXkEFt.js +0 -1
  533. package/core/built/admin/assets/growth-D4JNiVTe.js +0 -1
  534. package/core/built/admin/assets/hooks-Cjxexi_I.js +0 -2
  535. package/core/built/admin/assets/index-BacwlcOy.js +0 -67
  536. package/core/built/admin/assets/index-DxRNHH0o.css +0 -1
  537. package/core/built/admin/assets/inline-C22rnPro.js +0 -1
  538. package/core/built/admin/assets/input-group-CKfrILLP.js +0 -1
  539. package/core/built/admin/assets/jsx-runtime-CtMZ-PAS.js +0 -1
  540. package/core/built/admin/assets/kpi-card-DZxQKAIb.js +0 -1
  541. package/core/built/admin/assets/kpi-card-FidQ5zg3.js +0 -1
  542. package/core/built/admin/assets/kpi-helpers-C5T8Vaf1.js +0 -1
  543. package/core/built/admin/assets/kpi-tabs-_VRK6hGV.js +0 -1
  544. package/core/built/admin/assets/label-Cza7hPgn.js +0 -1
  545. package/core/built/admin/assets/label-picker-DgC_zLaw.js +0 -1
  546. package/core/built/admin/assets/layout-BxsXnKFX.js +0 -1
  547. package/core/built/admin/assets/limit-service-CTurluJQ.js +0 -20
  548. package/core/built/admin/assets/link-helpers-C3Gqy2cz.js +0 -1
  549. package/core/built/admin/assets/list-page-BtqCnow_.js +0 -1
  550. package/core/built/admin/assets/member-custom-fields-9uXFBqSt.js +0 -1
  551. package/core/built/admin/assets/member-detail-Dq6ZDIxo.js +0 -1
  552. package/core/built/admin/assets/members-CUWD9jal.js +0 -10
  553. package/core/built/admin/assets/modals-CIdwHVga.js +0 -31
  554. package/core/built/admin/assets/moderation-DTt04UDA.js +0 -1
  555. package/core/built/admin/assets/newsletter-cC8vcc9h.js +0 -1
  556. package/core/built/admin/assets/note-DZU0IY9e.js +0 -1
  557. package/core/built/admin/assets/notifications-NoHpBHJ4.js +0 -1
  558. package/core/built/admin/assets/nql-lang-CvCSOQG3.js +0 -19
  559. package/core/built/admin/assets/onboarding-route-Deg2hNm8.js +0 -1
  560. package/core/built/admin/assets/overview-BQPt_9w3.js +0 -1
  561. package/core/built/admin/assets/page-header-D6bEqPo2.js +0 -1
  562. package/core/built/admin/assets/post-analytics-header-BPw_B2_D.js +0 -1
  563. package/core/built/admin/assets/post-analytics-kp2_--XO.js +0 -1
  564. package/core/built/admin/assets/post-share-modal-Cave3Z4W.js +0 -1
  565. package/core/built/admin/assets/preferences-C7h3j_uy.js +0 -5
  566. package/core/built/admin/assets/profile-B2x4q2oB.js +0 -1
  567. package/core/built/admin/assets/router-provider-5fsX1CYn.js +0 -1
  568. package/core/built/admin/assets/select-PhPjIBBT.js +0 -1
  569. package/core/built/admin/assets/settings-D5P9Gwgo.js +0 -6
  570. package/core/built/admin/assets/settings-zUOzQV5I.js +0 -1
  571. package/core/built/admin/assets/share-modal-EfpfbuWF.js +0 -1
  572. package/core/built/admin/assets/social-urls-DgAF08Xc.js +0 -18
  573. package/core/built/admin/assets/sort-button-WOQYJm2H.js +0 -1
  574. package/core/built/admin/assets/source-icon-hm8Cj-Gx.js +0 -1
  575. package/core/built/admin/assets/stats-CnQDb62m.js +0 -1
  576. package/core/built/admin/assets/stats-view-CCfTJgSe.js +0 -1
  577. package/core/built/admin/assets/step-1-BGlhY4DS.js +0 -1
  578. package/core/built/admin/assets/step-2-D3sDEyFH.js +0 -1
  579. package/core/built/admin/assets/step-3-CvZoUdsc.js +0 -2
  580. package/core/built/admin/assets/switch-CNjkOmwz.js +0 -1
  581. package/core/built/admin/assets/table-C5nZYPnW.js +0 -1
  582. package/core/built/admin/assets/tabs-dtOcExye.js +0 -1
  583. package/core/built/admin/assets/tags-Dhm0FB_g.js +0 -1
  584. package/core/built/admin/assets/textarea-CeKw3wmV.js +0 -1
  585. package/core/built/admin/assets/toggle-group-DfhZIMTW.js +0 -1
  586. package/core/built/admin/assets/topic-filter-Cxe1Il41.js +0 -1
  587. package/core/built/admin/assets/typeof-Ca-duI-z.js +0 -1
  588. package/core/built/admin/assets/use-filter-params-Bub6BqNy.js +0 -1
  589. package/core/built/admin/assets/use-growth-stats-BJORomv0.js +0 -1
  590. package/core/built/admin/assets/use-reply-chain-data-B89YjVoo.js +0 -1
  591. package/core/built/admin/assets/use-simple-pagination-BL2SYXKi.js +0 -1
  592. package/core/built/admin/assets/virtual-list-DNJOSK9I.js +0 -1
  593. package/core/built/admin/assets/web-BHUE3YQc.js +0 -1
  594. package/core/server/adapters/scheduling/scheduling-base.js +0 -5
  595. package/core/server/adapters/sso/SSOBase.js +0 -5
  596. package/core/server/adapters/storage/index.js +0 -17
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{s as n}from"./framework-provider-jQktxm9P.js";import{a as r}from"./hooks-Cjxexi_I.js";import{t as i}from"./jsx-runtime-CtMZ-PAS.js";import{n as a,t as o}from"./dist-DMFGvqqU.js";import{t as s}from"./currency-CQsJu8iC.js";import{c,l,m as u,t as d}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as f}from"./router-provider-5fsX1CYn.js";import{At as p,Dt as m,E as h,Et as g,Gt as _,Kt as v,Nt as ee,Ot as y,T as te,Un as ne,Z as re,Zn as ie,_t as b,at as ae,dr as oe,dt as x,en as se,gn as ce,jt as le,kt as S,ln as C,m as w,on as T,rn as E,t as D,tr as O,wn as ue,wt as k,yt as de,z as fe}from"./button--i2uMDDn.js";import{n as pe,t as me}from"./container-BNXvlcjA.js";import{n as A,t as he}from"./page-header-D6bEqPo2.js";import{n as j}from"./dist-DW0QXQO3.js";import{t as ge}from"./switch-CNjkOmwz.js";import{i as _e,n as M,o as N,s as ve,t as ye}from"./select-PhPjIBBT.js";import{a as be,i as xe,n as Se,o as Ce,r as we,t as Te}from"./breadcrumb-CekPYTCn.js";import{n as P,t as F}from"./card-CSWz_BXq.js";import{t as I}from"./empty-indicator-BTtOlgIo.js";import{t as L}from"./label-Cza7hPgn.js";import{t as Ee}from"./textarea-CeKw3wmV.js";import{n as R,o as De,t as Oe}from"./input-group-CKfrILLP.js";import{n as ke,r as z}from"./label-picker-DgC_zLaw.js";import{i as Ae}from"./users-Pc8IRjk9.js";import{Ar as B,D as je,E as Me,Hn as V,M as Ne,Mr as H,N as Pe,Nr as U,O as Fe,On as Ie,Or as W,P as Le,Pr as G,Qr as Re,T as ze,Un as Be,Ur as Ve,Xr as He,Yn as Ue,Zn as We,_ as Ge,ar as Ke,b as qe,ei as K,er as Je,f as Ye,ir as Xe,j as Ze,jr as Qe,k as $e,lr as q,nr as et,or as tt,ri as nt,rr as rt,sr as it,ti as at,v as ot,wn as st}from"./index-BacwlcOy.js";import{r as ct}from"./newsletters-DZm3yLj8.js";import{a as lt}from"./tiers-EghDzCKc.js";import{c as ut,n as dt,s as ft}from"./member-custom-fields-9uXFBqSt.js";var J=e(t(),1),Y=i();function pt({className:e,children:t,...n}){return(0,Y.jsx)(A,{className:O(`py-5`,e),"data-detail-page":`header`,gap:`lg`,...n,children:t})}function mt({className:e,children:t,...n}){return(0,Y.jsx)(A,{className:O(`min-h-0 min-w-0 grow overflow-y-auto pb-4 lg:pb-8`,e),"data-detail-page":`body`,gap:`none`,...n,children:t})}var X=Object.assign(function({className:e,children:t,...n}){return(0,Y.jsx)(A,{className:O(`h-full min-h-0 grow px-4 lg:px-6`,e),"data-detail-page":`detail-page`,gap:`none`,...n,children:t})},{Header:pt,Body:mt}),ht=new Set([`active`,`trialing`,`unpaid`,`past_due`]);function gt(e){return(e.subscriptions??[]).some(e=>ht.has(e.status))}function _t(e){return e?`Delete member + Cancel subscription`:`Delete member`}var vt=({open:e,onOpenChange:t,member:n,allowLeaveWithUnsavedChanges:r})=>{let i=f(),a=ze(),[o,s]=J.useState(!1);J.useEffect(()=>{e&&s(!1)},[e]);let c=gt(n),l=n.email||n.name||`this member`,u=async()=>{try{let e=c&&o;await a.mutateAsync({id:n.id,cancel:e}),j.success(e?`${l} was deleted and their Stripe subscription was cancelled.`:`${l} was deleted.`),t(!1),r(),i(`/members`)}catch{j.error(`Couldn’t delete the member. Please try again.`)}};return(0,Y.jsx)(W,{open:e,onOpenChange:e=>{a.isPending||t(e)},children:(0,Y.jsxs)(B,{"data-testid":`delete-member-modal`,children:[(0,Y.jsxs)(U,{children:[(0,Y.jsx)(G,{children:`Delete member account`}),(0,Y.jsxs)(Qe,{children:[`Permanently delete `,(0,Y.jsx)(`strong`,{children:l}),` from Ghost.`]})]}),c&&(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Y.jsx)(`h4`,{className:`text-sm font-medium`,children:`Also cancel subscription in Stripe`}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If disabled, the member’s premium subscription will continue`})]}),(0,Y.jsx)(ge,{"aria-label":`Also cancel subscription in Stripe`,checked:o,"data-testid":`delete-member-cancel-stripe`,disabled:a.isPending,onCheckedChange:s})]}),(0,Y.jsxs)(H,{children:[(0,Y.jsx)(D,{"data-testid":`cancel-delete-member`,disabled:a.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,Y.jsx)(D,{"data-testid":`confirm-delete-member`,disabled:a.isPending,variant:`destructive`,onClick:()=>void u(),children:a.isPending?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(V,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Deleting`})]}):_t(o&&c)})]})]})})},yt=`Disabled from member settings`,bt=({open:e,onOpenChange:t,member:r})=>{let i=n(),a=Me(),[o,s]=J.useState(!1);J.useEffect(()=>{e&&s(!1)},[e]);let c=r.name||r.email||`this member`,l=async()=>{try{await a.mutateAsync({id:r.id,reason:yt,hideComments:o})}catch{j.error(`Couldn’t disable commenting. Please try again.`);return}j.success(`Commenting has been disabled for ${c}.`),t(!1),i.invalidateQueries({queryKey:[`MembersResponseType`]})};return(0,Y.jsx)(W,{open:e,onOpenChange:e=>{a.isPending||t(e)},children:(0,Y.jsxs)(B,{"data-testid":`disable-commenting-modal`,children:[(0,Y.jsxs)(U,{children:[(0,Y.jsx)(G,{children:`Disable commenting`}),(0,Y.jsxs)(Qe,{children:[(0,Y.jsx)(`strong`,{children:c}),` won’t be able to comment in the future. You can re-enable commenting anytime.`]})]}),(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,Y.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:(0,Y.jsx)(`h4`,{className:`text-sm font-medium`,children:`Hide all previous comments`})}),(0,Y.jsx)(ge,{"aria-label":`Hide all previous comments`,checked:o,"data-testid":`disable-commenting-hide-comments`,disabled:a.isPending,onCheckedChange:s})]}),(0,Y.jsxs)(H,{children:[(0,Y.jsx)(D,{"data-testid":`cancel-disable-commenting`,disabled:a.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,Y.jsx)(D,{"data-testid":`confirm-disable-commenting`,disabled:a.isPending,onClick:()=>void l(),children:a.isPending?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(V,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Disabling`})]}):`Disable commenting`})]})]})})},xt=({open:e,onOpenChange:t,memberId:r})=>{let i=n();J.useEffect(()=>{e&&i.removeQueries({queryKey:[`MemberSigninUrlResponseType`]})},[e,i]);let{data:a,isFetching:o,isError:s}=ot(r,{enabled:e,defaultErrorHandler:!1}),c=a?.url??``,l=s||!o&&!s&&!c,[u,d]=J.useState(!1),f=J.useRef(null),p=J.useCallback(()=>{f.current!==null&&(clearTimeout(f.current),f.current=null)},[]);J.useEffect(()=>{e||(p(),d(!1))},[e,p]),J.useEffect(()=>p,[p]);let m=async()=>{try{await navigator.clipboard.writeText(c),d(!0),p(),f.current=setTimeout(()=>{d(!1),f.current=null},1e3)}catch{j.error(`Couldn’t copy the impersonation link`)}};return(0,Y.jsx)(W,{open:e,onOpenChange:t,children:(0,Y.jsxs)(B,{"data-testid":`impersonate-modal`,children:[(0,Y.jsxs)(U,{children:[(0,Y.jsx)(G,{children:`Impersonate member`}),(0,Y.jsx)(Qe,{children:`A single-use signin link that works for 24 hours. Anyone with the link can sign in as this member.`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(L,{htmlFor:`member-signin-url`,children:`Signin link`}),(0,Y.jsx)(q,{"data-testid":`member-signin-url`,id:`member-signin-url`,value:o?`Generating link…`:l?`Failed to generate link`:c,readOnly:!0})]}),(0,Y.jsxs)(H,{children:[(0,Y.jsx)(D,{variant:`outline`,onClick:()=>t(!1),children:`Close`}),(0,Y.jsx)(D,{disabled:o||l||!c,onClick:()=>void m(),children:o?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(V,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Generating link`})]}):u?`Copied`:`Copy link`})]})]})})},St=({open:e,onOpenChange:t,member:n})=>{let r=Ne(),i=n.name||n.email||`This member`,a=async()=>{try{await r.mutateAsync({id:n.id}),j.success(`${i} has been signed out from all devices.`),t(!1)}catch{j.error(`Couldn’t sign the member out. Please try again.`)}};return(0,Y.jsx)(Je,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,Y.jsxs)(rt,{"data-testid":`logout-member-modal`,children:[(0,Y.jsxs)(tt,{children:[(0,Y.jsx)(it,{children:`Sign out member from all devices?`}),(0,Y.jsxs)(Xe,{children:[(0,Y.jsx)(`strong`,{children:i}),` will be signed out of all active sessions, and will need to sign in again upon return.`]})]}),(0,Y.jsxs)(Ke,{children:[(0,Y.jsx)(et,{disabled:r.isPending,children:`Cancel`}),(0,Y.jsx)(D,{"data-testid":`confirm-logout-member`,disabled:r.isPending,variant:`destructive`,onClick:()=>void a(),children:r.isPending?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(V,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Signing out`})]}):`Sign out`})]})]})})};function Ct(e){return e.can_comment===!1}function wt(e){return Ct(e)?`Enable commenting`:`Disable commenting`}var Tt=({member:e,allowLeaveWithUnsavedChanges:t})=>{let i=n(),{data:a}=r(),[o,s]=J.useState(!1),[c,l]=J.useState(!1),[u,d]=J.useState(!1),[f,p]=J.useState(!1),m=$e(),h=Pe(),g=m.isPending||m.isSuccess&&h,_=Ct(e),v=wt(e),ee=e.name||e.email||`this member`;if(!a||!Ae(a))return null;let y=async()=>{if(!_){d(!0);return}try{await m.mutateAsync({id:e.id}),j.success(`Commenting has been enabled for ${ee}.`)}catch{j.error(`Couldn’t enable commenting. Please try again.`);return}i.invalidateQueries({queryKey:[`MembersResponseType`]})};return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(He,{children:[(0,Y.jsx)(nt,{asChild:!0,children:(0,Y.jsx)(D,{"aria-label":`Actions`,className:`size-(--control-height)`,"data-testid":`member-actions`,size:`icon`,variant:`outline`,children:(0,Y.jsx)(T,{size:16})})}),(0,Y.jsxs)(Re,{align:`end`,children:[(0,Y.jsx)(K,{"data-testid":`member-actions-impersonate`,onSelect:()=>s(!0),children:`Impersonate`}),(0,Y.jsx)(K,{"data-testid":`member-actions-logout`,onSelect:()=>l(!0),children:`Sign out of all devices`}),(0,Y.jsx)(K,{"data-testid":`member-actions-commenting`,disabled:g,onSelect:()=>void y(),children:v}),(0,Y.jsx)(at,{}),(0,Y.jsx)(K,{className:`text-destructive focus:text-destructive`,"data-testid":`member-actions-delete`,onSelect:()=>p(!0),children:`Delete member`})]})]}),(0,Y.jsx)(xt,{memberId:e.id,open:o,onOpenChange:s}),(0,Y.jsx)(St,{member:e,open:c,onOpenChange:l}),(0,Y.jsx)(bt,{member:e,open:u,onOpenChange:d}),(0,Y.jsx)(vt,{allowLeaveWithUnsavedChanges:t,member:e,open:f,onOpenChange:p})]})},Z=e(oe(),1);function Et(e){return e?/^(https?:\/\/|\/|#\/)/i.test(e):!1}var Dt=new Set([`bif`,`clp`,`djf`,`gnf`,`jpy`,`kmf`,`krw`,`mga`,`pyg`,`rwf`,`ugx`,`vnd`,`vuv`,`xaf`,`xof`,`xpf`]);function Ot(e,t){let n=Dt.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 kt(e){return e?.trim()||null}function At(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 jt(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=kt(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 ${Ot(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 Mt(e,t){if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source===`automation_action_revision`){let e=kt(t.subject);return e?`received automated email: ${e}`:`received automated email`}}return jt(e,t)}function Nt(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 Pt(e){let t=e.data.attribution;return t?.referrer_source?{name:t.referrer_source,url:t.referrer_url??null}:null}function Ft(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 It(e){if(e.type===`click_event`)return e.data.link?.to}function Lt(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 Rt(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 zt(e,t){let n=kt(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:At(e),subject:r,action:jt(e,t.hasMultipleNewsletters),actionTitle:Mt(e,t.hasMultipleNewsletters),join:`–`,object:Nt(e),source:Pt(e),info:Ft(e,t),description:It(e),url:Lt(e),route:Rt(e),timestamp:e.data.created_at}}var Bt=({iconName:e})=>{let t={className:`shrink-0 text-muted-foreground`,size:16};switch(e){case`event-signed-up`:return(0,Y.jsx)(w,{...t});case`event-logged-in`:return(0,Y.jsx)(ee,{...t});case`event-subscriptions`:return(0,Y.jsx)(C,{...t});case`event-canceled-subscription`:return(0,Y.jsx)(ce,{...t});case`event-subscribed-to-email`:return(0,Y.jsx)(S,{...t});case`event-unsubscribed-from-email`:return(0,Y.jsx)(le,{...t});case`event-opened-email`:return(0,Y.jsx)(p,{...t});case`event-received-email`:return(0,Y.jsx)(g,{...t});case`event-sent-email`:return(0,Y.jsx)(fe,{...t});case`event-email-delivery-failed`:return(0,Y.jsx)(m,{...t});case`event-email-delivery-spam`:return(0,Y.jsx)(y,{...t});case`event-email-changed`:return(0,Y.jsx)(ne,{...t});case`event-comment`:return(0,Y.jsx)(b,{...t});case`event-click`:return(0,Y.jsx)(x,{...t});case`event-more-like-this`:return(0,Y.jsx)(te,{...t});case`event-less-like-this`:return(0,Y.jsx)(h,{...t});case`event-gift`:return(0,Y.jsx)(v,{...t});default:return(0,Y.jsx)(ie,{...t})}},Vt=({memberId:e})=>(0,Y.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 →`}),Ht=`All events related to this member will be shown here.`,Ut=e=>e?e.charAt(0).toUpperCase()+e.slice(1):``;function Wt(e){if(e&&typeof e==`object`){let t=e.subject;return t?`“${t}”`:`Email`}}var Gt=({event:e})=>{if(!e.action)return null;let t=Wt(e.email),n=e.object&&(e.route||Et(e.url)),r=!n&&t,i=e.timestamp?(0,Z.default)(e.timestamp).fromNow():`—`;return(0,Y.jsxs)(`div`,{className:`flex items-start gap-3 py-3`,"data-testid":`member-activity-event`,children:[(0,Y.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-muted`,children:(0,Y.jsx)(Bt,{iconName:e.icon})}),(0,Y.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:[(0,Y.jsxs)(`div`,{className:`text-sm leading-snug`,children:[(0,Y.jsx)(`span`,{"data-testid":`member-activity-action`,children:Ut(e.action)}),e.info&&(0,Y.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,e.info,`)`]}),n&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),e.route?(0,Y.jsx)(`a`,{className:`hover:underline`,href:e.route,children:e.object}):(0,Y.jsx)(`a`,{className:`hover:underline`,href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:e.object})]}),r&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:t})]})]}),e.description&&(0,Y.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.description}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i})]})]})},Kt=({memberId:e,hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})=>{let{data:i,isLoading:a}=Ze(e??``,{limit:`5`,enabled:!!e}),o=(i?.events??[]).map(e=>zt(e,{hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})),s=new Set;return e?(0,Y.jsxs)(`section`,{className:`flex flex-col gap-3`,"data-testid":`member-activity-feed`,children:[(0,Y.jsx)(`h3`,{className:`text-base font-semibold`,children:`Activity`}),(0,Y.jsx)(F,{children:(0,Y.jsxs)(P,{className:`pt-3`,children:[a?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Y.jsx)(Be,{className:`h-10`}),(0,Y.jsx)(Be,{className:`h-10`}),(0,Y.jsx)(Be,{className:`h-10`})]}):o.length===0?(0,Y.jsx)(`p`,{className:`py-4 text-center text-sm text-muted-foreground`,"data-testid":`member-activity-empty`,children:`No activity yet`}):(0,Y.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,Y.jsx)(Gt,{event:e},n)})}),!a&&o.length>0&&(0,Y.jsx)(Vt,{memberId:e})]})})]}):(0,Y.jsxs)(`section`,{className:`flex flex-col gap-3`,"data-testid":`member-activity-feed`,children:[(0,Y.jsx)(`h3`,{className:`text-base font-semibold`,children:`Activity`}),(0,Y.jsx)(F,{children:(0,Y.jsx)(P,{className:`pt-6`,children:(0,Y.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,Y.jsx)(I,{description:Ht,title:`Activity`,children:(0,Y.jsx)(ie,{})})})})})]})},qt=[`line1`,`line2`,`city`,`state`,`postal_code`,`country`],Jt=/^[^\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 Yt(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 Xt(e){let t={};for(let n of qt){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 Jt.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=pn(t),i={id:e,name:r.name,email:r.email,note:r.note,labels:r.labels};return o(r.newsletters,n.newsletters)||(i.newsletters=r.newsletters.map(e=>({id:e}))),i}function on(e,t,n){let r=typeof n==`string`?n.trim()||void 0:Xt(n);return{id:e,custom_fields:{[t]:r??null}}}var sn={line1:`Enter a street address.`,line2:`Enter a shorter address line.`,city:`Enter a city.`,state:`Enter a shorter state.`,postal_code:`Enter a postal code.`,country:`Enter a 2-letter country code, like US.`},cn=new Set([`line1`,`city`,`postal_code`]);function ln(e,t){let n=t.code===`too_big`&&typeof t.maximum==`number`?t.maximum:void 0;if(e.type===`address`){let e=t.path[0];if(typeof e==`string`){if(n!==void 0&&cn.has(e))return`Use ${n} characters or fewer.`;if(e in sn)return sn[e]}}return n===void 0?`This text is too long to save. Shorten it a little.`:`Use ${n} characters or fewer.`}function un(e,t){let n={},r=Yt(e);for(let e of t){let t=r[e.key];if(t===void 0)continue;let i=ut[e.type];if(!i)continue;let a=i.value.safeParse(t);if(!a.success)for(let t of a.error.issues){let r=[e.key,...t.path].join(`.`);n[r]??=ln(e,t)}}return n}function dn(e){let t=e?.data,n={};for(let e of t?.errors??[])e.property?.startsWith(`custom_fields.`)&&(n[e.property.slice(14)]=e.context||e.message||`Invalid value.`);return Object.keys(n).length?n:void 0}function fn(e,t){return e.map(e=>t.get(e)??{name:e,slug:e})}function pn(e){return{name:e.name.trim(),email:e.email.trim(),note:e.note,labels:e.labels,newsletters:e.newsletters}}function mn(e,t){return!e||!!t&&o(pn(e),t)}function hn(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 gn(e){let t=hn(e);return t?t.country_code===`US`&&t.region?`${t.region}, US`:t.country||`Unknown location`:`Unknown location`}function _n(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 vn(e){let t=e?.referrer_source;return!t||t===`Created manually`?null:t}var yn={line1:`Address line 1`,line2:`Address line 2`,city:`City`,state:`State`,postal_code:`Postal code`,country:`Country`},bn=({message:e})=>e?(0,Y.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:e}):null,xn=({inputId:e,value:t,errors:n,disabled:r,onChange:i})=>(0,Y.jsx)(`div`,{className:`grid gap-x-4 gap-y-3 md:grid-cols-2`,children:qt.map(a=>{let o=`${e}-${a}`,s=n?.[a];return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(L,{htmlFor:o,children:yn[a]}),(0,Y.jsx)(q,{"aria-invalid":s?!0:void 0,disabled:r,id:o,value:t[a]??``,onChange:e=>i({...t,[a]:e.target.value})}),(0,Y.jsx)(bn,{message:s})]},a)})}),Sn=({field:e,inputId:t,value:n,errors:r,disabled:i,onChange:a})=>{let o=r?.[``];switch(ft(e).input){case`text`:return(0,Y.jsx)(q,{"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,Y.jsx)(Ee,{"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,Y.jsx)(xn,{disabled:i,errors:r,inputId:t,value:typeof n==`object`&&n?n:{},onChange:a});default:return null}},Cn=({memberId:e,field:t,initialValue:n,onClose:r})=>{let i=ft(t).input===`address`,[a,s]=J.useState(n??(i?{}:``)),[c,l]=J.useState(!1),[u,d]=J.useState(),f=je(),p=un({[t.key]:a},[t]),m={...c?p:{},...u},h=Object.fromEntries(Object.entries(m).map(([e,n])=>[e===t.key?``:e.slice(t.key.length+1),n])),g=`member-custom-field-${t.key}`,_=!o(Yt({[t.key]:a}),Yt({[t.key]:n}));return(0,Y.jsx)(W,{open:!0,onOpenChange:e=>{!e&&!f.isPending&&r()},children:(0,Y.jsxs)(B,{"data-testid":`member-custom-field-edit-modal`,onEscapeKeyDown:e=>{(_||f.isPending)&&e.preventDefault()},onInteractOutside:e=>{(_||f.isPending)&&e.preventDefault()},children:[(0,Y.jsx)(U,{children:(0,Y.jsx)(G,{children:t.name})}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[!i&&(0,Y.jsx)(L,{className:`sr-only`,htmlFor:g,children:t.name}),(0,Y.jsx)(Sn,{disabled:f.isPending,errors:h,field:t,inputId:g,value:a,onChange:e=>{d(void 0),s(e)}}),(0,Y.jsx)(bn,{message:h[``]})]}),(0,Y.jsxs)(H,{children:[(0,Y.jsx)(D,{disabled:f.isPending,variant:`outline`,onClick:r,children:`Cancel`}),(0,Y.jsx)(D,{className:`min-w-16`,disabled:f.isPending,onClick:()=>{if(!f.isPending){if(!_){r();return}if(Object.keys(p).length>0){l(!0);return}f.mutate(on(e,t.key,a),{onSuccess:()=>{j.success(`${t.name} saved`),r()},onError:e=>{let n=dn(e);d(n),n||j.error(`${t.name} couldn’t be saved`)}})}},children:f.isPending?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(V,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):`Save`})]})]})})};function wn(e){return e===void 0?null:typeof e==`string`?e:_n(e)||null}var Tn=({memberId:e,customFields:t,disabled:n})=>{let{data:r,isLoading:i}=dt(),a=r?.members_custom_fields??[],o=Yt(t),[s,c]=J.useState(null);return i||a.length===0?null:(0,Y.jsxs)(`section`,{"aria-labelledby":`member-custom-fields-heading`,className:`flex flex-col gap-3`,"data-testid":`member-custom-fields-field`,children:[(0,Y.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-custom-fields-heading`,children:`Custom fields`}),(0,Y.jsx)(F,{children:(0,Y.jsx)(P,{className:`px-6 py-4`,children:(0,Y.jsx)(`ul`,{children:a.map(e=>{let t=wn(o[e.key]);return(0,Y.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,Y.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 px-3 py-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,Y.jsxs)(`span`,{className:`min-w-0`,children:[(0,Y.jsx)(`span`,{className:`block text-sm text-muted-foreground`,children:e.name}),t?(0,Y.jsx)(`span`,{className:`block break-words select-text`,children:t}):(0,Y.jsx)(`span`,{className:`block text-muted-foreground`,children:`–`})]}),(0,Y.jsx)(ae,{"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,Y.jsx)(Cn,{field:s,initialValue:o[s.key],memberId:e,onClose:()=>c(null)},s.key)]})},En=({labels:e,disabled:t,onChange:n})=>{let r=e.map(e=>e.slug),i=J.useRef(e);i.current=e;let a=J.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=ke({selectedSlugs:r,onSelectionChange:e=>n(fn(e,a.current))});o(s.labels);let c=async e=>{let t=await s.createLabel(e);if(t){let e={name:t.name,slug:t.slug};a.current.set(t.slug,e),n([...i.current.filter(e=>e.slug!==t.slug),e])}return t};return(0,Y.jsx)(`div`,{className:t?`pointer-events-none opacity-60`:void 0,"data-testid":`member-labels-field`,...t?{inert:``}:{},children:(0,Y.jsx)(z,{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})})},Dn=({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,Y.jsxs)(`div`,{className:`grid items-stretch gap-6 md:grid-cols-2`,"data-testid":`member-detail-form`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(L,{htmlFor:`member-name`,children:`Name`}),(0,Y.jsx)(q,{disabled:n,id:`member-name`,value:e.name,onBlur:a,onChange:e=>r({name:e.target.value})})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(L,{htmlFor:`member-email`,children:`Email`}),(0,Y.jsx)(q,{"aria-invalid":!!t,disabled:n,id:`member-email`,type:`email`,value:e.email,onBlur:i,onChange:e=>r({email:e.target.value})}),t&&(0,Y.jsx)(`p`,{className:`text-sm text-destructive`,children:t})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(L,{children:`Labels`}),(0,Y.jsx)(En,{disabled:n,labels:e.labels,onChange:e=>r({labels:e})})]})]}),(0,Y.jsxs)(`div`,{className:`flex min-h-0 flex-col gap-1.5`,children:[(0,Y.jsxs)(L,{htmlFor:`member-note`,children:[`Note `,(0,Y.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(not visible to member)`})]}),(0,Y.jsxs)(Oe,{className:`flex-1`,children:[(0,Y.jsx)(De,{className:`h-full`,disabled:n,id:`member-note`,value:e.note,onChange:e=>r({note:e.target.value})}),(0,Y.jsx)(R,{align:`block-end`,className:`justify-end`,children:(0,Y.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Maximum: `,(0,Y.jsx)(`span`,{className:`font-semibold text-foreground`,children:500}),` characters. You’ve used`,` `,(0,Y.jsx)(`span`,{className:O(`font-semibold`,c),children:s})]})})]})]})]})},On=e=>Z.default.utc(e).format(`D MMM YYYY`),$=({icon:e,children:t})=>(0,Y.jsxs)(`p`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e}),(0,Y.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]}),kn=e=>e.split(` `)[0]||``,An=({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,Y.jsxs)(`aside`,{className:`flex w-full shrink-0 flex-col gap-6 lg:w-80`,"data-testid":`member-detail-sidebar`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,Y.jsx)(We,{className:`size-12 min-w-12 [&_span]:text-lg`,email:a||void 0,name:i||void 0,src:e?.avatar_image}),(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`h2`,{className:`truncate text-xl font-semibold`,children:o}),i&&a&&(0,Y.jsx)(`a`,{className:`block truncate text-muted-foreground hover:underline`,href:`mailto:${a}`,children:a}),!i&&a&&(0,Y.jsx)(`span`,{className:`block truncate text-muted-foreground`,children:a})]})]}),!s&&e&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2 text-sm`,children:[(0,Y.jsx)($,{icon:(0,Y.jsx)(k,{size:16}),children:(0,Y.jsx)(`span`,{"data-testid":`member-detail-location`,children:gn(e.geolocation)})}),(0,Y.jsx)($,{icon:(0,Y.jsx)(E,{size:16}),children:e.last_seen_at?`Last seen on ${On(e.last_seen_at)}`:`Not seen yet`}),e.can_comment===!1&&(0,Y.jsx)($,{icon:(0,Y.jsx)(de,{size:16}),children:`Comments disabled`})]}),(0,Y.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 text-sm`,children:[(0,Y.jsx)(`h3`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Signup info`}),(0,Y.jsxs)($,{icon:(0,Y.jsx)(w,{size:16}),children:[`Created — `,(0,Y.jsx)(`span`,{className:`text-foreground`,children:On(e.created_at)})]}),(()=>{let t=vn(e.attribution);return t?(0,Y.jsxs)($,{icon:(0,Y.jsx)(_,{size:16}),children:[`Source — `,(0,Y.jsx)(`span`,{className:`text-foreground`,title:t,children:t})]}):null})(),e.attribution?.title&&(0,Y.jsxs)($,{icon:(0,Y.jsx)(se,{size:16}),children:[`Page — `,Et(e.attribution.url)?(0,Y.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,Y.jsx)(`span`,{className:`truncate text-foreground`,title:e.attribution.title,children:e.attribution.title})]})]}),r&&(0,Y.jsxs)(`section`,{className:`mt-4 flex flex-col gap-3 text-sm`,"data-testid":`member-detail-engagement`,children:[(0,Y.jsx)(`h4`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Engagement`}),(e.email_count??0)===0?(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:i?`We’ll show ${kn(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,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails received`}),(0,Y.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_count})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails opened`}),(0,Y.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_opened_count??0})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`Average open rate`}),e.email_open_rate===null||e.email_open_rate===void 0?(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`This metric is calculated once a member has received 5 newsletters.`}):(0,Y.jsxs)(`p`,{className:`text-2xl font-semibold`,children:[e.email_open_rate,(0,Y.jsx)(`span`,{className:`text-base font-normal text-muted-foreground`,children:`%`})]})]})]})]})]})]})},jn=({memberId:e,emailSuppression:t,subscribedIds:n,disabled:r,onChange:i})=>{let a=e?en(t):null,o=Le(),{data:s,isLoading:c}=ct({searchParams:{filter:`status:active`,limit:`50`}}),l=s?.newsletters??[],u=Pe(),d=o.isPending||o.isSuccess&&u;return!a&&(c||l.length===0)?null:(0,Y.jsxs)(`section`,{"aria-labelledby":`member-newsletters-heading`,className:`flex flex-col gap-3`,"data-testid":`member-newsletters-field`,children:[(0,Y.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-newsletters-heading`,children:`Newsletters`}),(0,Y.jsx)(F,{children:(0,Y.jsx)(P,{className:`p-6`,children:a?(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,"data-testid":`member-suppression-banner`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,Y.jsx)(m,{className:`mt-0.5 shrink-0 text-muted-foreground`,size:20}),(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:`Email disabled`}),a.label&&(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:a.label}),(0,Y.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,Y.jsx)(D,{disabled:r||d,onClick:()=>{e&&o.mutate({id:e},{onSuccess:()=>j.success(`Email re-enabled successfully`),onError:()=>j.error(`Failed to re-enable email. Please try again.`)})},children:d?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(V,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Re-enabling email`})]}):`Re-enable email`})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`ul`,{className:`divide-y divide-border`,children:l.map(e=>{let t=n.includes(e.id);return(0,Y.jsxs)(`li`,{className:`flex items-center justify-between gap-4 py-3 first:pt-0 last:pb-0`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:e.name}),e.description&&(0,Y.jsx)(`p`,{className:`truncate text-sm text-muted-foreground`,children:e.description})]}),(0,Y.jsx)(ge,{"aria-label":`Subscribe to ${e.name}`,checked:t,"data-testid":`member-subscription-toggle`,disabled:r,onCheckedChange:()=>i(Zt(n,e.id))})]},e.id)})}),(0,Y.jsxs)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:[`If disabled, member will `,(0,Y.jsx)(`em`,{children:`not`}),` receive newsletter emails`]})]})})})]})},Mn=`complimentary`,Nn=`gift subscription`;function Pn(e){if(e.id)return`paid`;let t=e.plan?.nickname?.toLowerCase()??``;return t===Mn?`complimentary`:t===Nn?`gift`:`paid`}function Fn(e){return e===`year`?`yearly`:`monthly`}function In(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 Ln(e){return e.status===`canceled`||e.cancel_at_period_end?`Canceled`:`Active`}var Rn=e=>e?(0,Z.default)(new Date(e)).format(`D MMM YYYY`):``,zn=e=>e?(0,Z.default)(e).utc().format(`D MMM YYYY`):``;function Bn(e){let t=Pn(e);if(t===`complimentary`||t===`gift`){let t=zn(e.tier?.expiry_at);return t?`Expires ${t}`:``}let n=e.status===`canceled`&&!e.cancel_at_period_end?``:Rn(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 ${Rn(e.trial_end_at)}`:n?`Renews ${n}`:``}function Vn(e){let t=[],n=new Map;for(let r of e){if(!r.price)continue;let e=r.tier??r.price.tier;if(!e?.id)continue;let i=n.get(e.id);i||(i={tier:e,subscriptions:[]},n.set(e.id,i),t.push(i)),i.subscriptions.push(r)}return t}var Hn=[`forever`,`week`,`month`,`half-year`,`year`,`custom`];function Un(e){return Hn.includes(e)}function Wn(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 Gn=new Set([`active`,`trialing`,`unpaid`,`past_due`]),Kn=[{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`}],qn=({open:e,onOpenChange:t,member:n})=>{let{data:r,isLoading:i}=lt({searchParams:{filter:`type:paid+active:true`,limit:`all`}}),a=r?.tiers??[],[o,s]=J.useState(``),[c,l]=J.useState(`forever`),[u,d]=J.useState(``);J.useEffect(()=>{e&&(s(``),l(`forever`),d(``))},[e]);let f=Fe(),p=je(),[m,h]=J.useState(!1),g=(n.subscriptions??[]).filter(e=>Pn(e)===`paid`&&Gn.has(e.status)),_=(0,Z.default)().format(`YYYY-MM-DD`),v=!!o&&!m&&(c!==`custom`||!!u),ee=async()=>{if(v){h(!0);try{for(let e of g)await f.mutateAsync({memberId:n.id,subscriptionId:e.id,status:`canceled`});let e=Wn(c,c===`custom`?u:null),r=e?{id:o,expiry_at:e}:{id:o};await p.mutateAsync({id:n.id,...n.email?{email:n.email}:{},tiers:[r]}),j.success(`Complimentary subscription added`),t(!1)}catch{j.error(`Couldn’t add complimentary subscription`)}finally{h(!1)}}};return(0,Y.jsx)(W,{open:e,onOpenChange:e=>{m||t(e)},children:(0,Y.jsxs)(B,{"data-testid":`add-comp-modal`,children:[(0,Y.jsxs)(U,{children:[(0,Y.jsx)(G,{children:`Add complimentary subscription`}),(0,Y.jsx)(Qe,{children:`Grants this member access to a paid tier for the chosen duration. Any active paid subscription is canceled first.`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(L,{htmlFor:`comp-tier`,children:`Tier`}),(0,Y.jsxs)(ye,{value:o,onValueChange:s,children:[(0,Y.jsx)(N,{"data-testid":`comp-tier-select`,disabled:i||m,id:`comp-tier`,children:(0,Y.jsx)(ve,{placeholder:i?`Loading tiers…`:`Select a tier`})}),(0,Y.jsx)(M,{children:a.map(e=>(0,Y.jsx)(_e,{"data-tier-id":e.id,value:e.id,children:e.name},e.id))})]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(L,{htmlFor:`comp-duration`,children:`Duration`}),(0,Y.jsxs)(ye,{value:c,onValueChange:e=>{Un(e)&&l(e)},children:[(0,Y.jsx)(N,{"data-testid":`comp-duration-select`,disabled:m,id:`comp-duration`,children:(0,Y.jsx)(ve,{})}),(0,Y.jsx)(M,{children:Kn.map(e=>(0,Y.jsx)(_e,{value:e.value,children:e.label},e.value))})]})]}),c===`custom`&&(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(L,{htmlFor:`comp-custom-date`,children:`Expires on`}),(0,Y.jsx)(q,{"data-testid":`comp-custom-date`,disabled:m,id:`comp-custom-date`,min:_,type:`date`,value:u,onChange:e=>d(e.target.value)})]})]}),(0,Y.jsxs)(H,{children:[(0,Y.jsx)(D,{disabled:m,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,Y.jsx)(D,{"data-testid":`comp-add-confirm`,disabled:!v,onClick:()=>void ee(),children:m?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(V,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Adding`})]}):`Add subscription`})]})]})})},Jn=({memberId:e,subscription:t})=>{let n=Fe(),r=Pe(),i=n.isPending||n.isSuccess&&r,a=t.status===`canceled`,o=t.cancel_at_period_end,s=(r,i,a)=>{n.mutate({memberId:e,subscriptionId:t.id,cancelAtPeriodEnd:r},{onSuccess:()=>j.success(i),onError:()=>j.error(a)})};return(0,Y.jsxs)(He,{children:[(0,Y.jsx)(nt,{asChild:!0,children:(0,Y.jsx)(D,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:i,size:`sm`,variant:`outline`,children:i?(0,Y.jsx)(V,{size:`sm`}):(0,Y.jsx)(T,{})})}),(0,Y.jsxs)(Re,{align:`end`,children:[(0,Y.jsx)(K,{asChild:!0,children:(0,Y.jsx)(`a`,{href:`https://dashboard.stripe.com/customers/${t.customer.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe customer`})}),(0,Y.jsx)(at,{}),(0,Y.jsx)(K,{asChild:!0,children:(0,Y.jsx)(`a`,{href:`https://dashboard.stripe.com/subscriptions/${t.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe subscription`})}),!a&&(o?(0,Y.jsx)(K,{"data-testid":`continue-subscription`,onSelect:()=>s(!1,`Subscription continued`,`Couldn’t continue subscription`),children:`Continue subscription`}):(0,Y.jsx)(K,{className:`text-destructive focus:text-destructive`,"data-testid":`cancel-subscription`,onSelect:()=>s(!0,`Subscription canceled`,`Couldn’t cancel subscription`),children:`Cancel subscription`}))]})]})},Yn=({member:e,tierId:t})=>{let n=je(),[r,i]=J.useState(!1),a=Pe(),o=n.isPending||n.isSuccess&&a;return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(He,{children:[(0,Y.jsx)(nt,{asChild:!0,children:(0,Y.jsx)(D,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:o,size:`sm`,variant:`outline`,children:o?(0,Y.jsx)(V,{size:`sm`}):(0,Y.jsx)(T,{})})}),(0,Y.jsx)(Re,{align:`end`,children:(0,Y.jsx)(K,{className:`text-destructive focus:text-destructive`,"data-testid":`remove-complimentary`,onSelect:()=>i(!0),children:`Remove complimentary subscription`})})]}),(0,Y.jsx)(Je,{open:r,onOpenChange:e=>{n.isPending||i(e)},children:(0,Y.jsxs)(rt,{children:[(0,Y.jsxs)(tt,{children:[(0,Y.jsx)(it,{children:`Remove complimentary subscription?`}),(0,Y.jsx)(Xe,{children:`The member will lose access to this tier immediately.`})]}),(0,Y.jsxs)(Ke,{children:[(0,Y.jsx)(et,{disabled:n.isPending,children:`Cancel`}),(0,Y.jsx)(D,{"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:()=>{j.success(`Complimentary subscription removed`),i(!1)},onError:()=>j.error(`Couldn’t remove complimentary subscription`)})},children:n.isPending?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(V,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Removing`})]}):`Remove`})]})]})})]})},Xn=e=>{let t=e/100;return t.toLocaleString(void 0,t%1==0?void 0:{minimumFractionDigits:2,maximumFractionDigits:2})},Zn=({sub:e,kind:t})=>{if(t===`complimentary`||t===`gift`)return(0,Y.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=s(e.price.currency),r=Xn(e.price.amount),i=Fn(e.price.interval);return(0,Y.jsxs)(`div`,{className:`flex size-20 shrink-0 flex-col items-center justify-center rounded-lg bg-muted text-foreground`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start leading-none`,children:[(0,Y.jsx)(`span`,{className:`mt-1 text-sm font-semibold`,children:n}),(0,Y.jsx)(`span`,{className:`text-3xl font-semibold tracking-tight`,children:r})]}),(0,Y.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:i})]})},Qn=e=>e?Z.default.utc(e).format(`D MMM YYYY`):``,$n=({sub:e})=>{let t=Qn(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,Y.jsxs)(`div`,{className:`mt-3 space-y-1 border-t border-border pt-3 text-sm text-muted-foreground`,children:[t&&(0,Y.jsxs)(`p`,{children:[`Created — `,(0,Y.jsx)(`span`,{className:`text-foreground`,children:t})]}),r&&(0,Y.jsxs)(`p`,{children:[`Source — `,(0,Y.jsx)(`span`,{className:`text-foreground`,children:n})]}),i&&(0,Y.jsxs)(`p`,{children:[`Page — `,i.url?(0,Y.jsx)(`a`,{className:`text-foreground hover:underline`,href:i.url,rel:`noopener noreferrer`,target:`_blank`,children:i.title}):(0,Y.jsx)(`span`,{className:`text-foreground`,children:i.title})]})]})},er=({member:e,sub:t,showDivider:n})=>{let[r,i]=J.useState(!1),a=Pn(t),o=Ln(t),s=Bn(t),c=In(t);return(0,Y.jsxs)(`div`,{className:O(`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,Y.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-4`,children:[(0,Y.jsx)(Zn,{kind:a,sub:t}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1 pt-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`min-w-0 truncate font-semibold`,"data-testid":`member-subscription-tier`,children:t.tier?.name??`Subscription`}),(0,Y.jsx)(Ue,{"data-testid":`member-subscription-status`,variant:o===`Canceled`?`secondary`:`success`,children:o})]}),(c||s)&&(0,Y.jsxs)(`div`,{className:`mt-1 text-sm`,children:[c&&(0,Y.jsx)(`span`,{className:`font-semibold text-foreground`,children:c}),c&&s&&(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:` – `}),s&&(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:s})]}),(0,Y.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,Y.jsx)(ue,{className:O(`transition-transform`,r&&`rotate-180`),size:14})]}),r&&(0,Y.jsx)($n,{sub:t})]})]}),a===`paid`&&(0,Y.jsx)(Jn,{memberId:e.id,subscription:t}),a===`complimentary`&&t.tier?.id&&(0,Y.jsx)(Yn,{member:e,tierId:t.tier.id})]})},tr=({member:e,canAddComp:t})=>{let[n,r]=J.useState(!1);if(!e)return(0,Y.jsx)(F,{"data-testid":`member-subscriptions`,children:(0,Y.jsx)(P,{className:`pt-6`,children:(0,Y.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,Y.jsx)(I,{title:`No subscriptions`,children:(0,Y.jsx)(C,{})})})})});let i=Vn(e.subscriptions??[]),a=i.length>0,o=t&&(e.tiers?.length??0)===0,s=o?(0,Y.jsxs)(D,{"data-testid":`add-complimentary`,variant:`outline`,onClick:()=>r(!0),children:[(0,Y.jsx)(re,{className:`mr-1`,size:16}),`Add complimentary subscription`]}):null;return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(F,{"data-testid":`member-subscriptions`,children:(0,Y.jsx)(P,{className:`pt-6`,children:a?(0,Y.jsxs)(Y.Fragment,{children:[i.map(t=>(0,Y.jsxs)(`div`,{className:`flex flex-col`,children:[t.subscriptions.map((n,r)=>(0,Y.jsx)(er,{member:e,showDivider:r>0,sub:n},n.id||`${t.tier.id}-${r}`)),t.subscriptions.length>1&&(0,Y.jsxs)(`div`,{className:`pt-3 text-sm text-muted-foreground`,children:[t.subscriptions.length,` subscriptions`]})]},t.tier.id)),s&&(0,Y.jsx)(`div`,{className:`mt-4 flex justify-center border-t border-border pt-4`,children:s})]}):(0,Y.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:[(0,Y.jsx)(I,{title:`No subscriptions`,children:(0,Y.jsx)(C,{})}),s]})})}),o&&(0,Y.jsx)(qn,{member:e,open:n,onOpenChange:r})]})};function nr(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`}function rr(e){let[t,n]=J.useState(null),r=J.useRef(e);return r.current=e,J.useEffect(()=>{let e=e=>{if(!r.current||e.defaultPrevented||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0)return;let t=e.target.closest?.(`a[href^="#/"]`);!t||t.hasAttribute(`data-discover`)||(e.preventDefault(),e.stopPropagation(),n(t.getAttribute(`href`)))};return document.addEventListener(`click`,e,!0),()=>document.removeEventListener(`click`,e,!0)},[]),{blockedHref:t,isBlocked:t!==null,proceed:()=>{t&&(n(null),window.location.hash=t)},reset:()=>n(null)}}var ir=`new`,ar=({paidMembersEnabled:e,newslettersUiEnabled:t,engagementEnabled:n})=>{let{member_id:r=``}=u(),i=l(),s=f(),p=nr(i.search),m=r===ir,h=Ye(`membersCustomFields`),{data:g,isLoading:_,error:v,refetch:ee}=Ge(r,{enabled:!!r&&!m,searchParams:{include:h?`tiers,custom_fields`:`tiers`},defaultErrorHandler:!1}),y=g?.members?.[0],te=!m&&!_&&!!v,ne=!m&&!_&&!v&&!y,re=je(),ie=qe(),b=m?ie:re,{data:ae}=lt({searchParams:{filter:`type:paid+active:true`,limit:`all`},enabled:e}),oe=(ae?.tiers?.length??0)>0,{data:x}=ct({searchParams:{filter:`status:active`,limit:`50`}}),se=x!==void 0,ce=(x?.newsletters?.length??0)>1,le=(ae?.tiers?.length??0)>1,[S,C]=J.useState(void 0),w=J.useRef(void 0),T=J.useRef(void 0),E=J.useRef(!1),O=J.useRef(!1);J.useEffect(()=>{if(m){if(w.current!==ir){w.current=ir,E.current=!1;let e=Q({});T.current=e,C(e)}return}if(!y)return;let e=Q(y);if(w.current!==y.id){w.current=y.id,T.current=e,C(e);return}let t=T.current;T.current=e,C(n=>mn(n,t)?e:n)},[y,m]),J.useEffect(()=>{O.current=!1},[r]),J.useEffect(()=>{if(!m||E.current||!x?.newsletters)return;E.current=!0;let e=tn(x.newsletters);if(e.length===0)return;let t={...T.current??Q({}),newsletters:[...e].sort()};T.current=t,C(t=>t&&{...t,newsletters:[...e].sort()})},[m,x]);let ue=m?T.current:y?Q(y):void 0,k=!!S&&!!ue&&!o(pn(S),ue),de=!!S&&Qt(S.email),[fe,A]=J.useState(!1);J.useEffect(()=>{A(!1)},[y?.id,m]);let ge=S?$t(S.email,fe):null,[_e,M]=J.useState({name:``,email:``});J.useEffect(()=>{if(m){M({name:``,email:``});return}y&&M({name:y.name??``,email:y.email??``})},[y?.id,y?.name,y?.email,m]);let N=()=>{S&&M({name:S.name,email:S.email})},ve=e=>{b.isError&&b.reset(),C(t=>t&&{...t,...e})},ye=()=>{if(!(!S||!k||!de||b.isPending)){if(N(),m){ie.mutate({email:S.email.trim(),name:S.name.trim()||void 0,note:S.note.trim()||void 0,labels:S.labels.length?S.labels:void 0,newsletters:E.current?S.newsletters.map(e=>({id:e})):void 0},{onSuccess:e=>{let t=e.members?.[0];if(!t){j.error(`Member couldn’t be created`);return}O.current=!0,j.success(`Member created`),s(`/members/${t.id}`,{replace:!0})},onError:()=>{j.error(`Member couldn’t be created`)}});return}!y||w.current!==y.id||re.mutate(an(y.id,S,Q(y)),{onSuccess:e=>{let t=e.members?.[0];if(t){let e=Q(t);T.current=e,C(e)}j.success(`Member updated`)},onError:()=>{j.error(`Member couldn’t be saved`)}})}};a(b.isPending||k);let I=c(({currentLocation:e,nextLocation:t})=>!O.current&&k&&e.pathname!==t.pathname),L=rr(k),Ee=I.state===`blocked`||L.isBlocked,R=`Save`,De=`default`,Oe=!0;b.isPending?R=(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(V,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):k?(R=b.isError?`Retry`:`Save`,De=b.isError?`destructive`:`default`,Oe=!de):!m&&re.isSuccess&&(R=`Saved`);let ke=!!S&&(m||!!y),z=`Member`;return m?z=`New member`:y?z=Ve(y):ne&&(z=`Member not found`),(0,Y.jsx)(pe,{className:`size-full`,children:(0,Y.jsx)(me,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Y.jsxs)(X,{"data-testid":`member-detail`,children:[(0,Y.jsx)(X.Header,{children:(0,Y.jsxs)(he,{blurredBackground:!1,sticky:!1,children:[(0,Y.jsx)(he.Left,{children:(0,Y.jsx)(Te,{children:(0,Y.jsxs)(xe,{children:[(0,Y.jsx)(Se,{children:(0,Y.jsx)(we,{asChild:!0,children:(0,Y.jsx)(d,{"data-test-link":`members-back`,to:p,children:`Members`})})}),(0,Y.jsx)(Ce,{}),(0,Y.jsx)(Se,{children:!m&&_?(0,Y.jsx)(Be,{className:`h-4 w-40`}):(0,Y.jsx)(be,{className:`truncate`,"data-testid":`member-detail-title`,children:z})})]})})}),(m||y)&&(0,Y.jsx)(he.Actions,{children:(0,Y.jsxs)(he.ActionGroup,{children:[y&&!m&&(0,Y.jsx)(Tt,{allowLeaveWithUnsavedChanges:()=>{O.current=!0},member:y},y.id),(0,Y.jsx)(D,{className:`min-w-16`,disabled:Oe,variant:De,onClick:ye,children:R})]})})]})}),(0,Y.jsxs)(X.Body,{children:[te&&(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3`,"data-testid":`member-detail-load-error`,children:[(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`Couldn’t load this member.`}),(0,Y.jsx)(D,{variant:`outline`,onClick:()=>void ee(),children:`Retry`})]}),ne&&(0,Y.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`This member couldn’t be found.`})}),ke&&S&&(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col gap-8 lg:flex-row lg:items-start lg:gap-12`,children:[(0,Y.jsx)(An,{draftEmail:_e.email,draftName:_e.name,engagementEnabled:n,member:y}),(0,Y.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-8`,children:[(0,Y.jsx)(F,{children:(0,Y.jsx)(P,{className:`p-6`,children:(0,Y.jsx)(Dn,{disabled:b.isPending,draft:S,emailError:ge,onChange:ve,onEmailBlur:()=>{A(!0),N()},onNameBlur:N})})}),h&&y&&(0,Y.jsx)(Tn,{customFields:y.custom_fields,disabled:b.isPending,memberId:y.id}),t&&(m||y)&&(0,Y.jsx)(jn,{disabled:b.isPending,emailSuppression:y?.email_suppression,memberId:y?.id,subscribedIds:S.newsletters,onChange:e=>ve({newsletters:e})}),e&&(0,Y.jsxs)(`section`,{"aria-labelledby":`member-subscriptions-heading`,className:`flex flex-col gap-3`,children:[(0,Y.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-subscriptions-heading`,children:`Subscriptions`}),(0,Y.jsx)(tr,{canAddComp:oe,member:y})]}),(m||y&&se)&&(0,Y.jsx)(Kt,{hasMultipleNewsletters:ce,hasMultipleTiers:le,memberId:y?.id,paidMembersEnabled:e})]})]})]}),(0,Y.jsx)(Je,{open:Ee,onOpenChange:e=>{!e&&Ee&&(I.reset?.(),L.reset())},children:(0,Y.jsxs)(rt,{children:[(0,Y.jsxs)(tt,{children:[(0,Y.jsx)(it,{children:`Discard unsaved changes?`}),(0,Y.jsx)(Xe,{children:`Your changes will be lost if you leave this member.`})]}),(0,Y.jsxs)(Ke,{children:[(0,Y.jsx)(et,{children:`Keep editing`}),(0,Y.jsx)(D,{variant:`destructive`,onClick:()=>{L.isBlocked?L.proceed():I.proceed?.()},children:`Leave`})]})]})})]})})})},or=()=>{let{data:e,isLoading:t}=Ie({});if(t||!e?.settings)return(0,Y.jsx)(pe,{className:`size-full`,children:(0,Y.jsx)(me,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Y.jsx)(X,{children:(0,Y.jsx)(X.Body,{children:(0,Y.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Y.jsx)(V,{size:`lg`})})})})})});let n=st(e.settings,`editor_default_email_recipients`),r=st(e.settings,`members_signup_access`);return(0,Y.jsx)(ar,{engagementEnabled:r!==`none`&&n!==`disabled`,newslettersUiEnabled:nn(n),paidMembersEnabled:st(e.settings,`paid_members_enabled`)===!0})};export{or as default};
@@ -1,10 +0,0 @@
1
- import{o as e,t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{_ as r}from"./framework-provider-jQktxm9P.js";import{_ as i,a,g as o,l as s,p as c,v as l,y as u}from"./hooks-Cjxexi_I.js";import{t as d}from"./jsx-runtime-CtMZ-PAS.js";import{t as f}from"./nql-BsgFMd93.js";import{n as p}from"./offers-D11QtPXX.js";import{f as m,g as h,l as g}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as _}from"./router-provider-5fsX1CYn.js";import{A as v,At as y,C as b,Cn as x,Dt as S,Et as C,Fn as w,Mn as T,Nn as E,Pn as D,Rt as O,Sn as k,V as A,Yt as j,Z as M,_t as N,a as P,ar as F,c as ee,dr as I,dt as L,h as R,hn as z,k as te,ln as ne,lt as re,m as ie,on as ae,or as oe,qn as se,qt as ce,rn as le,rt as ue,s as de,sn as fe,t as B,tr as V,w as pe,y as me,z as he}from"./button--i2uMDDn.js";import{n as ge,t as _e}from"./container-BNXvlcjA.js";import{t as H}from"./page-header-D6bEqPo2.js";import{n as U}from"./dist-DW0QXQO3.js";import{n as ve}from"./filters-DvenFkmK.js";import{n as ye,o as be,r as xe,s as Se,t as Ce}from"./command-K75Jzs0G.js";import{i as we,n as Te,o as Ee,s as De,t as Oe}from"./select-PhPjIBBT.js";import{t as ke}from"./dropzone-E0bSX4_a.js";import{t as Ae}from"./empty-indicator-BTtOlgIo.js";import{i as je,n as Me,t as Ne}from"./input-group-CKfrILLP.js";import{n as Pe,r as Fe,t as Ie}from"./label-picker-DgC_zLaw.js";import{a as W,c as G,n as Le,r as K,s as Re,t as ze}from"./table-C5nZYPnW.js";import{m as Be}from"./users-Pc8IRjk9.js";import{A as Ve,An as He,Ar as Ue,C as We,Cn as Ge,Hn as Ke,Jn as qe,Li as Je,Mr as q,Nr as Ye,On as Xe,Or as Ze,Pr as Qe,Qr as $e,S as et,Xr as tt,Yn as nt,Zn as rt,b as it,dn as at,ei as ot,fn as st,fr as ct,g as lt,h as ut,hn as dt,hr as ft,jr as pt,lr as mt,m as ht,mn as gt,mr as _t,p as vt,ri as yt,ti as bt,un as xt,w as St,wn as J,x as Ct,y as wt,z as Tt}from"./index-BacwlcOy.js";import{r as Et}from"./newsletters-DZm3yLj8.js";import{C as Dt,S as Ot,_ as kt,a as At,b as jt,c as Mt,d as Nt,f as Y,g as Pt,h as Ft,i as It,l as Lt,m as Rt,n as zt,o as Bt,p as Vt,r as Ht,s as Ut,t as Wt,u as Gt,v as Kt,w as qt,x as Jt,y as Yt}from"./filters-BgYv8Gt7.js";import{t as Xt}from"./list-page-BtqCnow_.js";import{a as Zt,c as Qt,i as $t,n as en,t as tn}from"./filter-sources-v39ihhhV.js";import{i as nn,n as rn,r as an,t as on}from"./virtual-list-DNJOSK9I.js";import{t as sn}from"./get-site-timezone-HgL0jI_F.js";import{t as cn}from"./member-route-0Aa52Ntz.js";var X=e(n(),1),Z=d();function ln({open:e,memberCount:t,onOpenChange:n,onConfirm:r,isLoading:i=!1}){let[a,o]=(0,X.useState)([]),s=Pe({selectedSlugs:a,onSelectionChange:o}),c=(0,X.useCallback)(e=>{e||o([]),n(e)},[n]);return(0,Z.jsx)(Ze,{open:e,onOpenChange:c,children:(0,Z.jsxs)(Ue,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Z.jsx)(Ye,{children:(0,Z.jsxs)(Qe,{children:[`Add label to `,F(t),` `,t===1?`member`:`members`]})}),(0,Z.jsx)(Fe,{isCreating:s.isCreating,labels:s.labels,optionSource:s.optionSource,resolvedSelectedLabels:s.resolvedSelectedLabels,selectedSlugs:a,onCreate:s.createLabel,onDelete:s.deleteLabel,onEdit:s.editLabel,onToggle:s.toggleLabel}),(0,Z.jsxs)(q,{children:[(0,Z.jsx)(B,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Z.jsx)(B,{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 ${F(a.length)} labels`:`Add label`})]})]})})}function un({open:e,memberCount:t,nql:n,search:r,onOpenChange:i,onConfirm:a,isLoading:o=!1}){let[s,c]=(0,X.useState)([]),{data:l,isLoading:u}=Ct({searchParams:{...n?{filter:n}:{},...r?{search:r}:{},include:`labels`,limit:`all`,fields:`id`},enabled:e}),d=(0,X.useMemo)(()=>{let e=new Set;for(let t of l?.members||[])for(let n of t.labels||[])e.add(n.slug);return e},[l]),f=Pe({selectedSlugs:s,onSelectionChange:c}),p={...f.optionSource,options:f.optionSource.options.filter(e=>d.has(String(e.value)))},m=(0,X.useCallback)(e=>{e||c([]),i(e)},[i]),h=()=>{let e=f.labels.filter(e=>s.includes(e.slug)).map(e=>e.id);e.length>0&&a(e)};return(0,Z.jsx)(Ze,{open:e,onOpenChange:m,children:(0,Z.jsxs)(Ue,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Z.jsx)(Ye,{children:(0,Z.jsxs)(Qe,{children:[`Remove label from `,F(t),` `,t===1?`member`:`members`]})}),(0,Z.jsx)(Fe,{labels:f.labels.filter(e=>d.has(e.slug)),optionSource:{...p,isInitialLoad:p.isInitialLoad||u},resolvedSelectedLabels:f.resolvedSelectedLabels.filter(e=>d.has(e.slug)),selectedSlugs:s,onDelete:f.deleteLabel,onEdit:f.editLabel,onToggle:f.toggleLabel}),(0,Z.jsxs)(q,{children:[(0,Z.jsx)(B,{variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Z.jsx)(B,{disabled:s.length===0||o,onClick:h,children:o?`Removing...`:s.length>1?`Remove ${F(s.length)} labels`:`Remove label`})]})]})})}function dn({open:e,newsletters:t,memberCount:n,onOpenChange:r,onConfirm:i,isLoading:a=!1}){let[o,s]=(0,X.useState)(`all`),[c,l]=(0,X.useState)([]),[u,d]=(0,X.useState)(``),[f,p]=(0,X.useState)(!1),m=(0,X.useRef)(null),h=(0,X.useRef)(null);(0,X.useEffect)(()=>{e||(s(`all`),l([]),d(``),p(!1))},[e]),(0,X.useEffect)(()=>{if(!f)return;let e=e=>{m.current&&!m.current.contains(e.target)&&p(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[f]);let g=e=>{e||(s(`all`),l([]),d(``),p(!1)),r(e)},_=(0,X.useCallback)(e=>{l(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},[]),v=t.length>=2,y=()=>{i(!v||o===`all`?null:c)},b=a||v&&o===`selected`&&c.length===0,x=n===1?`member`:`members`;return(0,Z.jsx)(Ze,{open:e,onOpenChange:g,children:(0,Z.jsxs)(Ue,{className:`gap-5`,children:[(0,Z.jsx)(Ye,{children:(0,Z.jsx)(Qe,{children:`Unsubscribe members`})}),v?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{"aria-label":`Unsubscribe scope`,className:`flex flex-col gap-3`,role:`radiogroup`,children:[(0,Z.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3`,children:[(0,Z.jsx)(`input`,{checked:o===`all`,className:`mt-0.5 size-4 cursor-pointer accent-black`,name:`unsubscribe-mode`,type:`radio`,value:`all`,onChange:()=>s(`all`)}),(0,Z.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Z.jsx)(`span`,{className:`text-sm font-semibold`,children:`Unsubscribe from all newsletters`}),(0,Z.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[n.toLocaleString(),` `,x,` will be unsubscribed from`,` `,t.length,` `,t.length===1?`newsletter`:`newsletters`,`.`]})]})]}),(0,Z.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-3`,children:[(0,Z.jsx)(`input`,{checked:o===`selected`,className:`mt-0.5 size-4 cursor-pointer accent-black`,name:`unsubscribe-mode`,type:`radio`,value:`selected`,onChange:()=>s(`selected`)}),(0,Z.jsxs)(`div`,{className:`flex flex-col`,children:[(0,Z.jsx)(`span`,{className:`text-sm font-semibold`,children:`Unsubscribe from selected newsletters`}),(0,Z.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Select which newsletters to unsubscribe`,` `,n.toLocaleString(),` `,x,` from.`]})]})]})]}),o===`selected`&&(0,Z.jsxs)(`div`,{ref:m,className:`relative space-y-2`,children:[(0,Z.jsx)(`label`,{className:`text-sm font-semibold`,htmlFor:`newsletter-search`,children:`Newsletters`}),(0,Z.jsxs)(`div`,{className:`flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-md border bg-background px-3 py-1 text-sm`,onClick:()=>{h.current?.focus(),p(!0)},children:[c.map(e=>{let n=t.find(t=>t.id===e);return n?(0,Z.jsxs)(nt,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:t=>{t.stopPropagation(),_(e)},children:[n.name,(0,Z.jsx)(P,{className:`size-3`})]},e):null}),(0,Z.jsx)(`input`,{ref:h,className:`min-w-[80px] flex-1 bg-transparent py-1 text-sm outline-hidden placeholder:text-muted-foreground`,id:`newsletter-search`,placeholder:c.length===0?`Search newsletters...`:``,value:u,onChange:e=>{d(e.target.value),f||p(!0)},onFocus:()=>p(!0),onKeyDown:e=>{e.key===`Escape`&&(p(!1),h.current?.blur()),e.key===`Backspace`&&!u&&c.length>0&&_(c[c.length-1])}})]}),f&&(0,Z.jsx)(`div`,{className:`absolute top-full left-0 z-50 mt-1 w-full rounded-md border bg-white shadow-md dark:bg-gray-950`,children:(0,Z.jsx)(Ce,{shouldFilter:!1,children:(0,Z.jsxs)(Se,{className:`max-h-64 overflow-y-auto`,children:[(0,Z.jsx)(xe,{children:`No newsletters found.`}),t.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())).map(e=>(0,Z.jsxs)(be,{value:e.name,onSelect:()=>_(e.id),children:[e.name,c.includes(e.id)&&(0,Z.jsx)(ye,{})]},e.id))]})})})]})]}):(0,Z.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,Z.jsxs)(q,{children:[(0,Z.jsx)(B,{variant:`outline`,onClick:()=>g(!1),children:`Cancel`}),(0,Z.jsx)(B,{disabled:b,variant:`destructive`,onClick:y,children:a?`Unsubscribing...`:`Unsubscribe`})]})]})})}function fn({open:e,memberCount:t,onOpenChange:n,onConfirm:r,onExportBackup:i,isLoading:a=!1}){let[o,s]=(0,X.useState)(!1),c=e=>{e||s(!1),n(e)},l=async()=>{if(!(t<1||a||o))try{s(!0),await i(),r()}catch{}finally{s(!1)}};return(0,Z.jsx)(Ze,{open:e,onOpenChange:c,children:(0,Z.jsxs)(Ue,{className:`gap-5`,children:[(0,Z.jsx)(Ye,{children:(0,Z.jsx)(Qe,{children:`Delete selected members?`})}),t>0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`p`,{children:[`You're about to delete `,(0,Z.jsxs)(`strong`,{children:[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,Z.jsx)(`p`,{children:`A backup of your selection will be automatically downloaded to your device before deletion.`})]}):(0,Z.jsx)(`p`,{children:`No members are selected.`}),(0,Z.jsxs)(q,{children:[(0,Z.jsx)(B,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Z.jsx)(B,{disabled:a||o||t<1,variant:`destructive`,onClick:()=>void l(),children:a||o?`Deleting...`:`Download backup & delete members`})]})]})})}function pn({fileError:e,onClose:t,onDropAccepted:n,onDropRejected:r}){return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`mt-5 space-y-5`,children:[(0,Z.jsxs)(qe,{variant:`info`,children:[`Need some help? `,(0,Z.jsx)(`a`,{className:`font-semibold underline`,href:`https://ghost.org/help/import-members/`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`}),` about importing members or `,(0,Z.jsx)(`a`,{className:`font-semibold underline`,href:`https://static.ghost.org/v4.0.0/files/member-import-template.csv`,rel:`noopener noreferrer`,target:`_blank`,children:`download a sample CSV file`}),`.`]}),e&&(0,Z.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-red-600`,children:[(0,Z.jsx)(me,{className:`mt-0.5 size-4 shrink-0`}),(0,Z.jsx)(`p`,{children:e})]}),(0,Z.jsx)(ke,{accept:{"text/csv":[`.csv`],"application/vnd.ms-excel":[`.csv`]},"aria-label":`Select or drop a CSV file`,onDropAccepted:e=>{let t=e[0];t&&n(t)},onDropRejected:r,children:({isDragActive:e,isDragReject:t})=>(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(R,{className:`mb-2 size-6 text-grey-600`}),(0,Z.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,Z.jsx)(q,{className:`mt-5`,children:(0,Z.jsx)(B,{variant:`outline`,onClick:t,children:`Close`})})]})}var mn=[{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`}],hn={label:`Tier`,value:`import_tier`},gn=[`email`,`name`,`note`,`subscribed_to_emails`,`complimentary_plan`,`stripe_customer_id`,`labels`,`created_at`,`gift_id`];function _n({importMemberTier:e=!1}={}){return[...gn,...e?[hn.value]:[]]}function vn({importMemberTier:e=!1}={}){return[...mn,...e?[hn]:[]]}var yn=[`email`],bn=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,xn=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 Sn(e,t=30){if(!e||e.length<=t)return e;let n=[];return Object.keys(e[0]).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 Cn(e,t={}){let n=Sn(e),r={},i=_n(t);if(e.length>0)for(let t of Object.keys(e[0])){if(!r.name&&/name/i.test(t)){r.name=t;continue}!r[t]&&i.includes(t)&&!yn.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&&bn.test(n)&&(r.email=t);a+=1}return r}function wn(e){return e.replace(`Value in [members.email] cannot be blank.`,`Missing email address`).replace(`Value in [members.note] exceeds maximum length of 2000 characters.`,`Note is too long`).replace(`Value in [members.subscribed] must be one of true, false, 0 or 1.`,`Value of "Subscribed to emails" must be "true" or "false"`).replace(`Validation (isEmail) failed for email`,`Invalid email address`).replace(/No such customer:[^,]*/,`Could not find Stripe customer`)}function Tn({status:e,fileData:t,mapping:n,mappingError:r,showMappingErrors:i,membersCount:a,dataPreviewIndex:o,hasPrevRecord:s,hasNextRecord:c,fieldMappings:l,labelPicker:u,onUpdateMapping:d,onDataPreviewIndexChange:f,onStartOver:p,onUpload:m}){let h=t&&t.length>0&&n?Object.entries(t[o]||{}).map(([e,t])=>({key:e,value:t,mapTo:n.get(e)})):[];return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:`mt-5 space-y-5`,children:t===null?(0,Z.jsx)(`div`,{className:`flex items-center justify-center rounded-md border bg-muted p-10`,children:(0,Z.jsx)(Ke,{size:`md`})}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:V(`overflow-hidden rounded-md border`,i&&r&&`border-red-500`),children:(0,Z.jsx)(`div`,{className:`max-h-[400px] overflow-auto`,children:(0,Z.jsxs)(ze,{className:`table-fixed`,children:[(0,Z.jsx)(Re,{children:(0,Z.jsxs)(G,{children:[(0,Z.jsx)(W,{className:`w-1/3`,children:`Field`}),(0,Z.jsx)(W,{className:`w-1/3`,children:(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsxs)(`span`,{children:[`Sample data `,(0,Z.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(#`,F(o+1),`)`]})]}),(0,Z.jsxs)(`div`,{className:`flex items-center`,children:[(0,Z.jsx)(`button`,{"aria-label":`Show previous sample row`,className:V(`rounded p-0.5 hover:bg-muted`,!s&&`cursor-default opacity-30`),disabled:!s||e===`UPLOADING`,type:`button`,onClick:()=>f(o-1),children:(0,Z.jsx)(x,{className:`size-4`})}),(0,Z.jsx)(`button`,{"aria-label":`Show next sample row`,className:V(`rounded p-0.5 hover:bg-muted`,!c&&`cursor-default opacity-30`),disabled:!c||e===`UPLOADING`,type:`button`,onClick:()=>f(o+1),children:(0,Z.jsx)(k,{className:`size-4`})})]})]})}),(0,Z.jsx)(W,{className:`w-1/3`,children:`Import as`})]})}),(0,Z.jsx)(Le,{children:h.length>0?h.map(t=>(0,Z.jsxs)(G,{className:V(!t.mapTo&&`bg-muted`),children:[(0,Z.jsx)(K,{className:`text-sm font-medium break-all`,children:t.key}),(0,Z.jsx)(K,{className:V(`text-sm break-all`,!t.value&&`text-muted-foreground`),children:t.value||`\xA0`}),(0,Z.jsx)(K,{children:(0,Z.jsxs)(Oe,{disabled:e===`UPLOADING`,value:t.mapTo||`__not_imported__`,onValueChange:e=>{d(t.key,e===`__not_imported__`?null:e)},children:[(0,Z.jsx)(Ee,{className:V(`h-8 text-sm`,!t.mapTo&&`text-muted-foreground`),children:(0,Z.jsx)(De,{})}),(0,Z.jsxs)(Te,{children:[(0,Z.jsx)(we,{value:`__not_imported__`,children:`Not imported`}),l.map(e=>(0,Z.jsx)(we,{value:e.value,children:e.label},e.value))]})]})})]},t.key)):(0,Z.jsx)(G,{children:(0,Z.jsx)(K,{className:`text-muted-foreground`,colSpan:3,children:`No data found in the uploaded CSV.`})})})]})})}),i&&r&&(0,Z.jsx)(`p`,{className:`text-sm text-red-600`,children:r}),a>0&&(0,Z.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If an email address in your CSV matches an existing member, they will be updated with the mapped values.`}),(0,Z.jsxs)(`div`,{className:`mt-5`,children:[(0,Z.jsx)(`label`,{className:`mb-1 block text-sm font-semibold`,children:`Label these members`}),(0,Z.jsx)(Fe,{isCreating:u.isCreating,labels:u.labels,optionSource:u.optionSource,resolvedSelectedLabels:u.resolvedSelectedLabels,selectedSlugs:u.selectedSlugs,onCreate:u.createLabel,onDelete:u.deleteLabel,onEdit:u.editLabel,onToggle:u.toggleLabel})]})]})}),(0,Z.jsxs)(q,{className:`mt-5`,children:[(0,Z.jsx)(B,{disabled:e===`UPLOADING`,variant:`outline`,onClick:p,children:`Start over`}),(0,Z.jsx)(B,{disabled:e===`UPLOADING`||a===0,onClick:m,children:e===`UPLOADING`?(0,Z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(Ke,{color:`light`,size:`sm`}),`Uploading`]}):a>0?`Import ${F(a)} ${a===1?`member`:`members`}`:`Import members`})]})]})}function En({onUploadAnotherFile:e,onClose:t}){return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:`mt-5`,children:(0,Z.jsx)(`p`,{className:`text-sm`,children:`Your import is being processed, and you'll receive a confirmation email as soon as it's complete. Usually this only takes a few minutes, but larger imports may take longer.`})}),(0,Z.jsxs)(q,{className:`mt-5`,children:[(0,Z.jsx)(B,{variant:`outline`,onClick:e,children:`Upload another file`}),(0,Z.jsx)(B,{onClick:t,children:`Got it`})]})]})}var Dn=()=>({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 On({importResponse:e,onReset:t,onClose:n}){return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`mt-5 space-y-4`,children:[e.importedCount===0?(0,Z.jsxs)(`p`,{className:`text-sm`,children:[`No members were added`,e.errorCount>0?` due to the following errors:`:`.`]}):(0,Z.jsxs)(`p`,{className:`text-sm`,children:[`A total of `,(0,Z.jsx)(`strong`,{children: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,Z.jsxs)(Z.Fragment,{children:[e.importedCount>0&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`hr`,{className:`border-grey-200`}),(0,Z.jsxs)(`p`,{className:`text-sm`,children:[(0,Z.jsx)(`strong`,{children:e.errorCount.toLocaleString()}),` `,e.errorCount===1?`member was`:`members were`,` skipped due to the following errors:`]})]}),(0,Z.jsx)(`ul`,{className:`list-inside list-disc space-y-1 text-sm text-muted-foreground`,children:e.errorList.map(e=>(0,Z.jsxs)(`li`,{children:[e.message,` (`,e.count,`)`]},e.message))})]})]}),(0,Z.jsx)(q,{className:`mt-5`,children:e.errorCount>0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(B,{variant:`outline`,asChild:!0,children:(0,Z.jsx)(`a`,{download:e.errorCsvName,href:e.errorCsvUrl,children:`Download error file`})}),e.importedCount===0?(0,Z.jsx)(B,{onClick:t,children:`Try again`}):(0,Z.jsx)(B,{onClick:n,children:`View members`})]}):(0,Z.jsx)(Z.Fragment,{children:e.importedCount===0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(B,{variant:`outline`,onClick:n,children:`Close`}),(0,Z.jsx)(B,{onClick:t,children:`Try again`})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(B,{variant:`outline`,onClick:t,children:`Upload another file`}),(0,Z.jsx)(B,{onClick:n,children:`View members`})]})})})]})}function kn({errorMessage:e,showTryAgainButton:t,onTryAgain:n,onClose:r}){return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:`mt-5`,children:(0,Z.jsxs)(`div`,{className:`flex items-start gap-2 text-sm text-red-600`,children:[(0,Z.jsx)(me,{className:`mt-0.5 size-4 shrink-0`}),(0,Z.jsx)(`p`,{children:e})]})}),(0,Z.jsxs)(q,{className:`mt-5`,children:[t&&(0,Z.jsx)(B,{variant:`outline`,onClick:n,children:`Try again`}),(0,Z.jsx)(B,{onClick:r,children:`OK`})]})]})}var An=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}),I();if(N===v-1)return I(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=ee((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=ee(j),s.substring(N+1+P,N+1+P+b)===n){if(E.push(s.substring(p,N).replace(M,d)),L(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)),L(j+b),C&&(z(),m))return R();if(a&&w.length>=a)return R(!0)}return I();function F(e){w.push(e),D=p}function ee(e){var t=0;return t=e!==-1&&(e=s.substring(N+1,e))&&e.trim()===``?e.length:t}function I(e){return _||(e===void 0&&(e=s.substring(p)),E.push(e),p=v,F(E),C&&z()),R()}function L(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})})),jn=e(I(),1),Mn=e(An(),1);function Nn(e){let t=Mn.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 Pn(e){return e.length===0?``:Mn.default.unparse(e,{quotes:!0})}function Fn(e){let t=e.meta.stats.imported,n=e.meta.stats.invalid||[],r=n.length,i={},a=Pn(n.map(e=>{let t=wn(e.error);return t.split(`,`).forEach(e=>{let t=e.trim();i[t]?i[t].count+=1:i[t]={message:t,count:1}}),{...e,error:t}})),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,jn.default)().format(`YYYY-MM-DD HH:mm`)} - Errors.csv`,errorList:Object.values(i),importLabel:e.meta.import_label||void 0}}function In(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 Dn();default:return e}}function Ln({open:e,onOpenChange:t,onComplete:n,onClose:r}){let[a,s]=(0,X.useReducer)(In,void 0,Dn),c=(0,X.useRef)(null),{data:d}=Je(),{mutateAsync:f}=Ve(),p=d?.config?.labs?.importMemberTier===!0,m=(0,X.useMemo)(()=>vn({importMemberTier:p}),[p]),h=Pe({selectedSlugs:a.selectedLabelSlugs,onSelectionChange:e=>s({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}),g=(0,X.useCallback)(()=>{c.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(c.current),c.current=null):c.current&&=null},[]),_=(0,X.useCallback)(()=>{g(),s({type:`RESET`})},[g]);(0,X.useEffect)(()=>()=>{g()},[g]);let v=(0,X.useCallback)(e=>{if(!(!e&&a.status===`UPLOADING`)){if(!e){let e=a.importResponse??void 0;_(),r?.(e)}t(e)}},[r,t,_,a.importResponse,a.status]);(0,X.useEffect)(()=>{if(!a.file)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=Nn(e);if(n.length>0){let e=new xn(Cn(n,{importMemberTier:p}));s({type:`PARSE_SUCCESS`,fileData:n,mapping:e,mappingError:e.getKeyByValue(`email`)?null:`Please map "Email" to one of the fields in the CSV.`})}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(a.file),()=>{e=!0,t.readyState===FileReader.LOADING&&t.abort()}},[p,a.file]);let y=(0,X.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)},[]),b=(0,X.useCallback)(e=>{y(e)&&s({type:`SELECT_FILE`,file:e})},[y]),x=(0,X.useCallback)((e,t)=>{if(!a.mapping)return;let n=a.mapping.updateMapping(e,t),r=a.fileData&&a.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.`;s({type:`UPDATE_MAPPING`,mapping:n,mappingError:r})},[a.fileData,a.mapping]),S=(0,X.useCallback)(async()=>{if(!a.file||a.mappingError){s({type:`SET_SHOW_MAPPING_ERRORS`,showMappingErrors:!0});return}s({type:`UPLOAD_START`});let e=[];for(let t of a.selectedLabelSlugs){let n=h.labels.find(e=>e.slug===t);n&&e.push(n.name)}try{let t=await f({file:a.file,labels:e,mapping:a.mapping?.toJSON()});if(wt(t)){let e=Fn(t);g(),c.current=e.errorCsvUrl,s({type:`UPLOAD_COMPLETE`,importResponse:e}),n?.(e);return}s({type:`UPLOAD_ACCEPTED`}),n?.()}catch(e){if(e instanceof l){s({type:`UPLOAD_ERROR`,errorMessage:`The file you uploaded was larger than the maximum file size your server allows.`});return}let t=e instanceof i?e.data?.errors?.[0]:null;if(e instanceof o&&t?.code===`EMAIL_VERIFICATION_NEEDED`){s({type:`UPLOAD_ERROR`,errorMessage:t.message,errorHeader:`Woah there cowboy, that's a big list`,showTryAgainButton:!1}),n?.();return}if(e instanceof u||t?.type===`DataImportError`){s({type:`UPLOAD_ERROR`,errorMessage:t?.message||(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`})}},[a.file,a.mapping,a.mappingError,a.selectedLabelSlugs,h.labels,f,g,n]),C=a.fileData?!!a.fileData[a.dataPreviewIndex+1]:!1,w=a.dataPreviewIndex>0,T=a.fileData?.length??0,E=a.status===`MAPPING`||a.status===`UPLOADING`,D=(0,X.useMemo)(()=>{switch(a.status){case`PROCESSING`:return`Import in progress`;case`COMPLETE`:return`Import complete`;case`ERROR`:return a.errorHeader;default:return`Import members`}},[a.errorHeader,a.status]);return(0,Z.jsx)(Ze,{open:e,onOpenChange:v,children:(0,Z.jsxs)(Ue,{className:V(`gap-0`,E&&`max-w-2xl`),children:[(0,Z.jsxs)(Ye,{children:[(0,Z.jsx)(Qe,{children:D}),(0,Z.jsx)(pt,{className:`sr-only`,children:`Import members from a CSV file.`})]}),a.status===`INIT`&&(0,Z.jsx)(pn,{fileError:a.fileError,onClose:()=>v(!1),onDropAccepted:b,onDropRejected:()=>s({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(a.status===`MAPPING`||a.status===`UPLOADING`)&&(0,Z.jsx)(Tn,{dataPreviewIndex:a.dataPreviewIndex,fieldMappings:m,fileData:a.fileData,hasNextRecord:C,hasPrevRecord:w,labelPicker:h,mapping:a.mapping,mappingError:a.mappingError,membersCount:T,showMappingErrors:a.showMappingErrors,status:a.status,onDataPreviewIndexChange:e=>{s({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onStartOver:_,onUpdateMapping:x,onUpload:()=>void S()}),a.status===`PROCESSING`&&(0,Z.jsx)(En,{onClose:()=>v(!1),onUploadAnotherFile:_}),a.status===`COMPLETE`&&a.importResponse&&(0,Z.jsx)(On,{importResponse:a.importResponse,onClose:()=>v(!1),onReset:_}),a.status===`ERROR`&&(0,Z.jsx)(kn,{errorMessage:a.errorMessage,showTryAgainButton:a.showTryAgainButton,onClose:()=>v(!1),onTryAgain:_})]})})}var Rn=`count.active_stripe_customers`,zn=`${Rn}:>1`,Bn=`${Rn}:<2`,Vn=at({multipleActiveSubscriptionsBanner:at({dismissedCount:st().finite().optional().catch(void 0),dismissedAt:dt().optional().catch(void 0)}).optional().catch(void 0)});function Hn(e){return e===zn}function Un(e){if(!e)return Vn.parse({});try{let t=JSON.parse(e);return Vn.parse(t)}catch{return Vn.parse({})}}function Wn(e){return Un(e).multipleActiveSubscriptionsBanner??{}}function Gn(e,t,n){let r=Un(e),i=Wn(e);return JSON.stringify({...r,multipleActiveSubscriptionsBanner:{...i,dismissedCount:t,dismissedAt:n}})}function Kn(e,t,n){return{...e,accessibility:Gn(e.accessibility,t,n)}}var qn=[`is`,`contains`,`does-not-contain`,`starts-with`,`ends-with`],Jn=[`is`,`is-greater`,`is-less`],Q=[`is`,`is-not`],Yn=[`is-any`,`is-not-any`],Xn=[{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`}],Zn={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}},Qn={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}},$n={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:${f(t)}+feedback.score:${e.operator})`]}},er={parse(e,t){let n=Kt(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`?[zn]:t===`false`?[Bn]:null:null}},tr=Wt({name:{operators:qn,ui:{label:`Name`,type:`text`,placeholder:`Enter name...`,defaultOperator:`contains`,className:`w-48`},codec:Rt()},email:{operators:qn,ui:{label:`Email`,type:`text`,placeholder:`Enter email...`,defaultOperator:`contains`,className:`w-48`},codec:Rt()},label:{operators:Yn,ui:{label:`Label`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`labels`,label:`Labels`,include:`labels`}},codec:Vt()},subscribed:{operators:Q,ui:{label:`Newsletter subscription`,type:`select`,searchable:!1},options:[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`},{value:`email-disabled`,label:`Email disabled`}],codec:Zn},last_seen_at:{operators:Ft,ui:{label:`Last seen`,type:`date`,defaultOperator:kt},codec:Gt()},created_at:{operators:Ft,ui:{label:`Created`,type:`date`,defaultOperator:kt},codec:Gt()},signup:{operators:Q,ui:{label:`Signed up on post/page`,type:`select`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`},codec:Y({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:Qn},tier_id:{operators:Yn,ui:{label:`Membership tier`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`tiers`,label:`Tiers`,include:`tiers`}},codec:Vt()},status:{operators:Q,ui:{label:`Member status`,type:`select`,searchable:!1},options:[{value:`paid`,label:`Paid`},{value:`free`,label:`Free`},{value:`comped`,label:`Complimentary`}],codec:Y()},"subscriptions.plan_interval":{operators:Q,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:Y()},"subscriptions.status":{operators:Q,ui:{label:`Stripe subscription status`,type:`select`,searchable:!1},options:Xn,metadata:{activeColumn:{key:`subscriptions.status`,label:`Subscription status`,include:`subscriptions`}},codec:Y()},"subscriptions.start_date":{operators:Ft,ui:{label:`Paid start date`,type:`date`,defaultOperator:kt},metadata:{activeColumn:{key:`subscriptions.start_date`,label:`Paid start date`,include:`subscriptions`}},codec:Gt()},"subscriptions.current_period_end":{operators:Ft,ui:{label:`Next billing date`,type:`date`,defaultOperator:kt},metadata:{activeColumn:{key:`subscriptions.current_period_end`,label:`Next billing date`,include:`subscriptions`}},codec:Gt()},conversion:{operators:Q,ui:{label:`Subscription started on post/page`,type:`select`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`},codec:Y({quoteStrings:!0})},email_count:{operators:Jn,ui:{label:`Emails sent (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,className:`w-24`},codec:Nt()},email_opened_count:{operators:Jn,ui:{label:`Emails opened (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,className:`w-24`},codec:Nt()},email_open_rate:{operators:Jn,ui:{label:`Open rate (all time)`,type:`number`,defaultOperator:`is-greater`,min:0,max:100,suffix:`%`,className:`w-24`},codec:Nt()},"emails.post_id":{operators:Q,ui:{label:`Sent email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:Y({quoteStrings:!0})},"opened_emails.post_id":{operators:Q,ui:{label:`Opened email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:Y({quoteStrings:!0})},"clicked_links.post_id":{operators:Q,ui:{label:`Clicked email`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`},codec:Y({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:$n},offer_redemptions:{operators:Yn,ui:{label:`Offer`,type:`multiselect`,searchable:!0,className:`w-64`,defaultOperator:`is-any`},metadata:{activeColumn:{key:`offer_redemptions`,label:`Offer`}},codec:Vt({quoteStrings:!0,serializeSingletonAsScalar:!0})},[Rn]:{operators:[`is`],ui:{label:`Multiple active subscriptions`,type:`select`,searchable:!1,hideOperatorSelect:!0},options:[{value:`true`,label:`Yes`},{value:`false`,label:`No`}],codec:er}}),nr=Wt({...tr,last_seen_at:Dt(tr.last_seen_at),created_at:Dt(tr.created_at),"subscriptions.start_date":Dt(tr[`subscriptions.start_date`]),"subscriptions.current_period_end":Ot(tr[`subscriptions.current_period_end`])});function rr(){return nr}var ir=2;function ar(e){let t=new Map;for(let n of e){let e=Mt(nr,n.field,`UTC`)?.definition.metadata?.activeColumn;e&&t.set(e.key,e)}return Array.from(t.values()).slice(0,ir)}function or(e){let t=new Set([`labels`,`tiers`]);for(let n of ar(e))n.include&&t.add(n.include);return Array.from(t).join(`,`)}function sr({filters:e,nql:t,search:n}){if(!t&&!n)return;let r={include:or(e),limit:`100`,order:`created_at desc`};return t&&(r.filter=t),n&&(r.search=n),r}function cr({nql:e,search:t}){return!e&&!t?{all:!0}:{...e?{filter:e}:{},...t?{search:t}:{}}}function lr(e,t){return e?{text:jn.default.tz(e,t).format(`D MMM YYYY`),subtext:(0,jn.default)(e).fromNow()}:null}function ur(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 lr(t.current_subscription?.start_date,n);case`subscriptions.current_period_end`:return lr(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 dr(e,t){let n=new URLSearchParams({limit:`all`});e&&n.set(`filter`,e),t&&n.set(`search`,t),await s(`/members/upload/?${n}`,`members.csv`)}var fr=({hasFilterOrSearch:e,memberCount:t,nql:n,search:r,canBulkDelete:i,showMenu:a=!0,showNewMember:o=!0,onImportComplete:s})=>{let c=g(),l=_(),u=c.pathname===`/members/import`,d=c.search??``,f=c.pathname===`/members`?`${c.pathname}${d}`:`/members`,p=`#/members/new?back=${encodeURIComponent(f)}`,[m,h]=(0,X.useState)(!1),[y,x]=(0,X.useState)(!1),[C,w]=(0,X.useState)(!1),[T,E]=(0,X.useState)(!1),{data:D,isLoading:O}=Et({searchParams:{filter:`status:-archived`,limit:`50`}}),k=D?.newsletters||[],{mutateAsync:A,isPending:j}=St(),{mutate:N,isPending:P}=We(),[ee,I]=(0,X.useState)(!1),L=cr({nql:n,search:r}),z=(0,X.useCallback)(async()=>{try{await dr(n,r)}catch(e){throw U.error(`Export failed`,{description:`There was a problem downloading your member data. Please check your connection and try again.`}),e}},[n,r]),ne=(0,X.useCallback)(async e=>{try{for(let t of e)await A({...L,action:{type:`addLabel`,meta:{label:{id:t}}}});h(!1),U.success(e.length>1?`Labels added successfully`:`Label added successfully`)}catch{U.error(`Failed to add label`,{description:`There was a problem applying this label. Please try again.`})}},[A,L]),re=(0,X.useCallback)(async e=>{try{for(let t of e)await A({...L,action:{type:`removeLabel`,meta:{label:{id:t}}}});x(!1),U.success(e.length>1?`Labels removed successfully`:`Label removed successfully`)}catch{U.error(`Failed to remove label`,{description:`There was a problem removing this label. Please try again.`})}},[A,L]),ie=(0,X.useCallback)(async e=>{let t=L;if(e===null){try{await A({...t,action:{type:`unsubscribe`}}),w(!1),U.success(`Members unsubscribed successfully`)}catch{U.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}return}I(!0);try{let n=await Promise.allSettled(e.map(e=>A({...t,action:{type:`unsubscribe`,newsletter:e}}))),r=n.filter(e=>e.status===`fulfilled`).length,i=n.length;w(!1),r===i?U.success(`Unsubscribed from ${i} ${i===1?`newsletter`:`newsletters`}`):r>0?U.warning(`Unsubscribed from ${r} of ${i} newsletters`,{description:`Some newsletters could not be unsubscribed. Please try again.`}):U.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}catch{U.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}finally{I(!1)}},[A,L]),oe=(0,X.useCallback)(()=>{N(L,{onSuccess:()=>{E(!1),U.success(`Members deleted successfully`)},onError:()=>{U.error(`Failed to delete members`,{description:`There was a problem deleting these members. Please try again.`})}})},[N,L]),se=(0,X.useCallback)(async()=>{try{await dr(n,r)}catch(e){throw U.error(`Export failed`,{description:`There was a problem downloading your backup. Please check your connection and try again.`}),e}},[n,r]),ce=(0,X.useCallback)(()=>{},[]),le=(0,X.useCallback)(()=>{l(`/members/import${d}`)},[d,l]),ue=(0,X.useCallback)(e=>{s?.(e)},[s]),de=(0,X.useCallback)(e=>{if(e?.importLabel){l(cn({filter:`label:[${e.importLabel.slug}]`}),{replace:!0});return}l(`/members${d}`,{replace:!0})},[d,l]);return(0,Z.jsxs)(Z.Fragment,{children:[a&&(0,Z.jsxs)(tt,{children:[(0,Z.jsx)(yt,{asChild:!0,children:(0,Z.jsx)(B,{"data-testid":`members-actions`,variant:`outline`,children:(0,Z.jsx)(ae,{className:`size-4`})})}),(0,Z.jsxs)($e,{align:`end`,children:[(0,Z.jsxs)(ot,{onClick:le,children:[(0,Z.jsx)(R,{className:`mr-2 size-4`}),`Import members`]}),t>0&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(ot,{onClick:()=>void z(),children:[(0,Z.jsx)(fe,{className:`mr-2 size-4`}),e?`Export ${F(t)} members`:`Export all members`]}),(0,Z.jsx)(bt,{}),(0,Z.jsxs)(ot,{onClick:()=>h(!0),children:[(0,Z.jsx)(te,{className:`mr-2 size-4`}),`Add label to `,F(t),` `,t===1?`member`:`members`]}),(0,Z.jsxs)(ot,{onClick:()=>x(!0),children:[(0,Z.jsx)(v,{className:`mr-2 size-4`}),`Remove label from `,F(t),` `,t===1?`member`:`members`]}),(0,Z.jsxs)(ot,{disabled:O,onClick:()=>w(!0),children:[(0,Z.jsx)(S,{className:`mr-2 size-4`}),`Unsubscribe `,F(t),` `,t===1?`member`:`members`]}),(0,Z.jsx)(bt,{}),(0,Z.jsxs)(ot,{className:`text-destructive focus:text-destructive`,disabled:!i,onClick:()=>E(!0),children:[(0,Z.jsx)(b,{className:`mr-2 size-4`}),`Delete `,F(t),` `,t===1?`member`:`members`]})]})]})]}),o&&(0,Z.jsx)(B,{asChild:!0,children:(0,Z.jsxs)(`a`,{"aria-label":`New member`,className:`inline-flex items-center`,href:p,children:[(0,Z.jsx)(`span`,{className:`hidden sm:inline`,children:`New member`}),(0,Z.jsx)(`span`,{className:`sm:hidden`,children:(0,Z.jsx)(M,{})})]})}),(0,Z.jsx)(Ln,{open:u,onClose:de,onComplete:ue,onOpenChange:ce}),(0,Z.jsx)(ln,{isLoading:j,memberCount:t,open:m,onConfirm:e=>void ne(e),onOpenChange:h}),(0,Z.jsx)(un,{isLoading:j,memberCount:t,nql:n,open:y,search:r,onConfirm:e=>void re(e),onOpenChange:x}),(0,Z.jsx)(dn,{isLoading:j||ee,memberCount:t,newsletters:k,open:C,onConfirm:e=>void ie(e),onOpenChange:w}),(0,Z.jsx)(fn,{isLoading:P,memberCount:t,open:T,onConfirm:oe,onExportBackup:se,onOpenChange:E})]})},pr=({membershipsEnabled:e,onMemberCreated:t})=>{let{data:n,isLoading:r}=a(),{mutateAsync:i,isPending:o}=it(),s=c(),l=(0,X.useCallback)(async()=>{if(!(!n||o))try{await i({email:n.email,name:n.name}),U.success(`You've been added as a member`),await t?.()}catch(e){s(e)}},[i,n,s,o,t]);return e?(0,Z.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Z.jsx)(Ae,{actions:(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-2 sm:flex-row`,children:[(0,Z.jsx)(B,{asChild:!0,children:(0,Z.jsx)(`a`,{href:`#/members/new?back=%2Fmembers`,children:`New member`})}),(0,Z.jsx)(B,{disabled:o||r||!n,variant:`outline`,onClick:()=>void l(),children:o?`Adding...`:`Add yourself as a member`})]}),(0,Z.jsxs)(`p`,{className:`text-sm leading-tight text-pretty text-muted-foreground`,children:[`Already have members? `,(0,Z.jsx)(`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,Z.jsx)(de,{})})}):(0,Z.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Z.jsx)(Ae,{actions:(0,Z.jsx)(B,{variant:`outline`,asChild:!0,children:(0,Z.jsx)(`a`,{href:`#/settings/members`,children:`Membership settings`})}),description:`Adjust your membership settings to start adding members.`,title:`Memberships have been disabled`,children:(0,Z.jsx)(de,{})})})},mr=lt.extend({route:xt(`members`),filter:gt(dt(),dt().nullable()).refine(e=>typeof e.filter==`string`&&e.filter.length>0)}),hr=`A view with this name already exists`,gr=`Saved view could not be found for update`,_r=`Multiple saved views matched update target`,vr=`Saved view could not be found for delete`,yr=`Multiple saved views matched delete target`;function br(e){return mr.safeParse(e).success}function xr(e){let t=ut(e);return t.ok?{ok:!0,views:t.views.filter(br)}:t}function Sr(e,t){return{name:e.trim(),route:`members`,filter:{filter:t}}}function Cr(e,t,n,r){let i=Sr(t,n);if(r){let t=vt(e,r);if(t.length===0)throw Error(gr);if(t.length>1)throw Error(_r);let n=t[0];if(ht(e,i,n))throw Error(hr);return e.map((e,t)=>t===n?i:e)}if(ht(e,i))throw Error(hr);return[...e,i]}function wr(e,t){let n=vt(e,t);if(n.length===0)throw Error(vr);if(n.length>1)throw Error(yr);let r=n[0];return e.filter((e,t)=>t!==r)}var Tr=`Cannot modify saved views because shared_views is invalid`;function Er(e){return J(e?.settings??null,`shared_views`)??`[]`}function Dr(){let{data:e}=Xe(),t=c(),n=Er(e),r=(0,X.useRef)(null),i=(0,X.useMemo)(()=>xr(n),[n]);return(0,X.useEffect)(()=>{i.ok||r.current===n||(r.current=n,t(i.error,{withToast:!1}))},[t,i,n]),i.ok?i.views:[]}function Or(){let{data:e}=Xe(),{mutateAsync:t}=He(),n=c();return(0,X.useCallback)(async(r,i,a)=>{let o=ut(Er(e));if(!o.ok){let e=Error(Tr,{cause:o.error});throw n(e,{withToast:!1}),e}let s=Cr(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 kr(){let{data:e}=Xe(),{mutateAsync:t}=He(),n=c();return(0,X.useCallback)(async r=>{let i=ut(Er(e));if(!i.ok){let e=Error(Tr,{cause:i.error});throw n(e,{withToast:!1}),e}let a=wr(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 Ar(e,t){return(0,X.useMemo)(()=>!t||e.length===0?null:e.find(e=>e.filter.filter===t)??null,[e,t])}var jr=({filter:e,existingViews:t,activeView:n,onDeleted:r,onClose:i})=>{let[a,o]=(0,X.useState)(()=>n?.name??``),[s,c]=(0,X.useState)(``),[l,u]=(0,X.useState)(!1),[d,f]=(0,X.useState)(!1),[p,m]=(0,X.useState)(!1),h=Or(),g=kr(),_=!!n,v=async()=>{let r=a.trim();if(!r){c(`Please enter a name`);return}if(!_&&t.find(e=>e.name.trim().toLowerCase()===r.toLowerCase())){c(`A view with this name already exists`);return}u(!0);try{await h(r,e,n??void 0),i()}catch(e){c(e instanceof Error?e.message:`Failed to save view`)}finally{u(!1)}},y=async()=>{if(n){f(!0);try{await g(n),i(),r?.()}catch(e){c(e instanceof Error?e.message:`Failed to delete view`)}finally{f(!1)}}};return(0,Z.jsx)(_t,{align:`end`,className:`w-72`,children:(0,Z.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Z.jsx)(`h3`,{className:`text-sm font-semibold`,children:_?`Edit view`:`Save view`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Z.jsx)(mt,{placeholder:`View name`,value:a,autoFocus:!0,onChange:e=>{o(e.target.value),s&&c(``)},onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),v())}}),s&&(0,Z.jsx)(`p`,{className:`text-xs text-red-500`,children:s})]}),_?p?(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Delete view?`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(B,{size:`sm`,variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Z.jsx)(B,{disabled:d,size:`sm`,variant:`destructive`,onClick:()=>void y(),children:d?`Deleting...`:`Delete`})]})]}):(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsx)(B,{className:`text-red hover:bg-red/5 hover:text-red`,size:`sm`,variant:`ghost`,onClick:()=>m(!0),children:`Delete`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(B,{size:`sm`,variant:`outline`,onClick:i,children:`Cancel`}),(0,Z.jsx)(B,{disabled:l||!a.trim(),size:`sm`,onClick:()=>void v(),children:l?`Saving...`:`Save`})]})]}):(0,Z.jsx)(B,{className:`w-full`,disabled:l||!a.trim(),onClick:()=>void v(),children:l?`Saving...`:`Save`})]})})},Mr=({filter:e,existingViews:t,activeView:n,onDeleted:r})=>{let[i,a]=(0,X.useState)(!1),o=n?`edit:${n.name}:${n.filter.filter}`:`save:${e}`;return(0,Z.jsxs)(ct,{open:i,onOpenChange:a,children:[(0,Z.jsx)(ft,{asChild:!0,children:(0,Z.jsx)(B,{variant:`outline`,children:n?`Edit view`:`Save view`})}),i&&(0,Z.jsx)(jr,{activeView:n,existingViews:t,filter:e,onClose:()=>a(!1),onDeleted:r},o)]})},Nr={"is-any":`is any of`,"is-not-any":`is none of`,"does-not-contain":`does not contain`,...Pt,...jt,1:`More like this`,0:`Less like this`},Pr={"is-greater":`is greater than`,"is-less":`is less than`};function Fr(e){switch(e){case`name`:return X.createElement(ee,{className:`size-4`});case`email`:case`subscribed`:return X.createElement(C,{className:`size-4`});case`label`:return X.createElement(v,{className:`size-4`});case`last_seen_at`:return X.createElement(le,{className:`size-4`});case`created_at`:return X.createElement(T,{className:`size-4`});case`signup`:return X.createElement(ie,{className:`size-4`});case`tier_id`:case`subscriptions.status`:return X.createElement(ne,{className:`size-4`});case`status`:return X.createElement(z,{className:`size-4`});case`subscriptions.plan_interval`:return X.createElement(D,{className:`size-4`});case`subscriptions.start_date`:return X.createElement(E,{className:`size-4`});case`subscriptions.current_period_end`:return X.createElement(w,{className:`size-4`});case`conversion`:return X.createElement(se,{className:`size-4`});case`email_count`:case`emails.post_id`:return X.createElement(he,{className:`size-4`});case`email_opened_count`:case`opened_emails.post_id`:return X.createElement(y,{className:`size-4`});case`email_open_rate`:return X.createElement(ue,{className:`size-4`});case`clicked_links.post_id`:return X.createElement(L,{className:`size-4`});case`newsletter_feedback`:return X.createElement(N,{className:`size-4`});case`offer_redemptions`:return X.createElement(pe,{className:`size-4`});case Rn:return X.createElement(O,{className:`size-4`});default:return e.startsWith(`newsletters.`)?X.createElement(re,{className:`size-4`}):void 0}}function $(e,t){return{options:e,valueSource:t}}function Ir(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 Lr(e){return Array.isArray(e.metadata?.offerIds)?e.metadata.offerIds.filter(e=>typeof e==`string`):null}function Rr(e){let t=[],n=Ir(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 zr(e,t){let n=[],r=new Set;for(let i of t){let t=Lr(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 Br(e,t){let n=[];for(let r of e){let e=t.find(e=>e.value===r),i=e?Lr(e):null;i?n.push(...i):n.push(r)}return[...new Set(n)]}function Vr(e){return new Map(e.map(e=>[e.id,e.name]))}function Hr(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 Ur({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,siteTimezone:m=`UTC`}){return(0,X.useMemo)(()=>{let h=rr();function g(e,t={},n=Nr){let r=e.startsWith(`newsletters.`)?h[`newsletters.:slug`]:h[e];return{key:e,...r.ui,icon:Fr(e),operators:Lt(r.operators,{labels:n}),...`options`in r&&r.options?{options:r.options}:{},...t}}function _(e,t,n={}){let r=h[e],i=g(e,{defaultValue:t,...n});return Jt(r)?{...i,customRenderer:Yt(t)}:i}let v=[],y=n.filter(e=>e.status!==`archived`),b=new Set(y.map(e=>e.slug)),x=[...new Set(r)].map(e=>({slug:e,name:n.find(t=>t.slug===e)?.name??e})),S=x.filter(e=>!b.has(e.slug)),C=Rr(l),w=Vr(l),T=Qt(m),E=[g(`name`),g(`email`)];if(e&&E.push(g(`label`,{...$([],e),customRenderer:e=>X.createElement(Ie,e)})),y.length<=1){E.push(g(`subscribed`));for(let e of x)E.push(g(`newsletters.${e.slug}`,{label:e.name}))}if(E.push(_(`last_seen_at`,T),_(`created_at`,T)),d&&E.push(g(`signup`,$([],s))),v.push({group:`Basic`,fields:E}),y.length>1){let e=[g(`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 y)e.push(g(`newsletters.${t.slug}`,{label:t.name}));for(let t of S)e.push(g(`newsletters.${t.slug}`,{label:t.name}));v.push({group:`Newsletters`,fields:e})}if(a){let e=[];i&&e.push(g(`tier_id`,$([],t))),e.push(g(`status`,{options:[...h.status.options,{value:`gift`,label:`Gift subscription`}]})),u>0&&e.push(g(Rn)),e.push(g(`subscriptions.plan_interval`),g(`subscriptions.status`),_(`subscriptions.start_date`,T),_(`subscriptions.current_period_end`,T)),d&&e.push(g(`conversion`,$([],s))),l.length>0&&e.push(g(`offer_redemptions`,{options:C,customValueRenderer:e=>Hr(e,C,w)})),v.push({group:`Subscription`,fields:e})}if(o){let e=[g(`email_count`,{},Pr),g(`email_opened_count`,{},Pr)];f&&e.push(g(`email_open_rate`,{},Pr)),e.push(g(`emails.post_id`,$([],c))),f&&e.push(g(`opened_emails.post_id`,$([],c))),p&&e.push(g(`clicked_links.post_id`,$([],c))),e.push(g(`newsletter_feedback`,$([],c))),v.push({group:`Email`,fields:e})}return v},[o,c,p,f,i,e,d,u,n,l,r,a,s,m,t])}var Wr=[];function Gr(e,t){return e.map(e=>e.field===`offer_redemptions`?{...e,values:t(e.values)}:e)}var Kr=({filters:e,multipleActiveSubscriptionsCount:t,nql:n,onFiltersChange:r,savedViews:i=[],activeView:a,iconOnly:o=!1})=>{let{data:s}=p({}),{data:c}=Et({searchParams:{limit:`100`}}),{data:l}=Xe({}),u=l?.settings||[],d=J(u,`paid_members_enabled`)===!0,f=J(u,`editor_default_email_recipients`)!==`disabled`,m=J(u,`members_track_sources`)===!0,h=J(u,`email_track_opens`)===!0,g=J(u,`email_track_clicks`)===!0,_=sn(u),v=c?.newsletters||[],y=(0,X.useMemo)(()=>s?.offers??Wr,[s?.offers]),b=(0,X.useMemo)(()=>Rr(y),[y]),x=(0,X.useMemo)(()=>[...new Set(e.map(e=>e.field).filter(e=>e.startsWith(`newsletters.`)).map(e=>e.slice(12)).filter(Boolean))],[e]),S=(0,X.useMemo)(()=>Gr(e,e=>zr(e,b)),[e,b]),C=(0,X.useCallback)(e=>{r(Gr(e,e=>Br(e,b)))},[r,b]),w=en(),T=Zt(),E=$t(),{valueSource:D,hasMultipleTiers:O}=tn(),k=Ur({newsletters:v,hydratedNewsletterSlugs:x,hasMultipleTiers:O,paidMembersEnabled:d,emailFiltersEnabled:f,labelValueSource:E,tierValueSource:D,offers:y,multipleActiveSubscriptionsCount:t,postValueSource:w,emailValueSource:T,membersTrackSources:m,emailTrackOpens:h,emailTrackClicks:g,siteTimezone:_}),A=e.length>0,M=V(`bg-white dark:bg-background`,o&&!A&&`min-w-[34px] gap-0 !px-3 text-[0px] lg:min-w-0 lg:gap-1.5 lg:px-3 lg:text-base`),N=A?(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-4 sm:absolute sm:top-0 sm:right-0`,children:[(0,Z.jsxs)(B,{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,Z.jsx)(P,{className:`size-4`}),`Clear`]}),n&&(0,Z.jsx)(Mr,{activeView:a,existingViews:i,filter:n,onDeleted:()=>r([])})]}):void 0;return(0,Z.jsx)(ve,{addButtonClassName:M,addButtonIcon:A?(0,Z.jsx)(j,{}):(0,Z.jsx)(ce,{}),addButtonText:A?`Add filter`:`Filter`,allowMultiple:!0,className:`[&>button]:order-last ${A?`sm:!pr-40 [&>button]:border-none`:`w-auto`}`,clearButton:N,fields:k,filters:S,keyboardShortcut:`f`,popoverAlign:`start`,popoverContentClassName:`z-[80] w-[280px] [&_[data-slot=command-list]]:max-h-[450px]`,showClearButton:A,showSearchInput:!0,onChange:C})},qr=({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,Z.jsxs)(Ne,{className:`h-(--control-height) min-w-0 basis-full lg:w-[180px] lg:basis-auto xl:w-[240px]`,children:[(0,Z.jsx)(Me,{children:(0,Z.jsx)(A,{className:`size-4`,strokeWidth:1.75})}),(0,Z.jsx)(je,{"aria-label":r,autoFocus:n,className:`!h-[34px]`,"data-testid":i,placeholder:`Search members...`,value:e,onChange:e=>t(e.target.value)})]})},Jr=({children:e,description:t,title:n,url:r})=>(0,Z.jsx)(`a`,{className:`group/card block rounded-xl border bg-card p-6 transition-all hover:bg-table-row-hover hover:shadow-xs`,href:r,rel:`noopener noreferrer`,target:`_blank`,children:(0,Z.jsxs)(`div`,{className:`flex items-center gap-6`,children:[e,(0,Z.jsxs)(`div`,{className:`flex flex-col leading-tight`,children:[(0,Z.jsx)(`h4`,{className:`text-md font-medium tracking-normal text-pretty text-foreground`,children:n}),(0,Z.jsx)(`p`,{className:`mt-1.5 text-sm leading-tight text-pretty text-muted-foreground`,children:t})]})]})}),Yr=`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`,Xr=()=>(0,Z.jsxs)(`div`,{className:`grid w-full grid-cols-1 gap-4 lg:grid-cols-2`,children:[(0,Z.jsx)(Jr,{description:`Learn how to turn anonymous visitors into logged-in members with memberships in Ghost.`,title:`Building your audience with subscriber signups`,url:`https://ghost.org/resources/build-audience-subscriber-signups/`,children:(0,Z.jsx)(`div`,{className:V(Yr,`bg-gradient-to-tr from-[#22C55E]/20 to-[#84CC16]/20`),children:(0,Z.jsx)(ie,{className:`text-[#16A34A]`,size:20,strokeWidth:1.5})})}),(0,Z.jsx)(Jr,{description:`Starting from zero? Use this guide to find your founding audience members.`,title:`Get your first 100 email subscribers`,url:`https://ghost.org/resources/first-100-email-subscribers/`,children:(0,Z.jsx)(`div`,{className:V(Yr,`bg-gradient-to-tl from-[#A855F7]/20 to-[#EC4899]/20`),children:(0,Z.jsx)(C,{className:`text-[#DB2777]`,size:20,strokeWidth:1.5})})})]});function Zr(e,t){let n=new URLSearchParams;t&&n.set(`back`,t);let r=n.toString();return`/members/${e}${r?`?${r}`:``}`}var Qr={left:`100%`};function $r(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 ei(e){switch(e){case`paid`:return`Paid`;case`comped`:return`Complimentary`;case`gift`:return`Gift`;default:return`Free`}}function ti(e){return e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey}function ni(e,t){window.open(`#${Zr(e,t)}`,`_blank`,`noopener`)}function ri({item:e,backPath:t,onClick:n}){return(0,Z.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,Z.jsx)(rt,{className:`size-8 min-w-8`,email:e.email,name:e.name,src:e.avatar_image}),(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`a`,{className:`block min-w-0 cursor-pointer`,href:`#${Zr(e.id,t)}`,onClick:n?t=>{if(ti(t)){t.stopPropagation();return}t.preventDefault(),t.stopPropagation(),n(e.id)}:void 0,children:(0,Z.jsx)(`span`,{className:`block truncate text-md font-semibold`,children:e.name||e.email||`Anonymous`})}),e.name&&e.email&&(0,Z.jsx)(`div`,{className:`truncate text-muted-foreground`,"data-testid":`member-email`,children:e.email})]})]})}function ii({status:e,tiers:t}){let n=t?.map(e=>e.name).join(`, `);return(0,Z.jsx)(`div`,{className:`flex min-w-0 justify-start`,children:(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`div`,{className:`truncate`,children:ei(e)}),n&&(0,Z.jsx)(`div`,{className:`truncate text-sm text-muted-foreground`,children:n})]})})}function ai({emailOpenRate:e}){let t=e!=null;return(0,Z.jsx)(`div`,{className:V(`text-base`,t?`text-foreground`:`text-muted-foreground`),children:t?oe(e/100):`N/A`})}function oi({geolocation:e}){let t=$r(e);return(0,Z.jsx)(`div`,{className:V(`truncate text-base`,t.isKnown?`text-foreground`:`text-muted-foreground`),children:t.text})}function si({createdAt:e}){return(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`div`,{className:`text-base`,children:jn.default.utc(e).format(`D MMM YYYY`)}),(0,Z.jsx)(`div`,{className:`text-base text-muted-foreground`,children:jn.default.utc(e).fromNow()})]})}function ci({column:e,member:t,timezone:n}){let r=ur(e,t,n);return r?(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`div`,{className:`truncate text-base`,children:r.text}),r.subtext&&(0,Z.jsx)(`div`,{className:`truncate text-base text-muted-foreground`,children:r.subtext})]}):(0,Z.jsx)(`span`,{className:`text-base text-muted-foreground`,children:`-`})}var li=(0,X.forwardRef)(function({item:e,activeColumns:t,backPath:n,columnStyles:r,showPinnedEdge:i,showEmailOpenRate:a,timezone:o,onClick:s,...c},l){let u=t=>{if(ti(t)){ni(e.id,n);return}s(e.id)},d=t=>{t.button===1&&(t.preventDefault(),ni(e.id,n))};return(0,Z.jsxs)(G,{...c,ref:l,className:V(`group cursor-pointer`,c.className),"data-testid":`members-list-item`,onAuxClick:d,onClick:u,children:[(0,Z.jsxs)(K,{className:V(`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,Z.jsx)(ri,{backPath:n,item:e,onClick:s}),i&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] group-hover:opacity-0 lg:block`,style:{...Qr,background:`linear-gradient(to right, var(--background) 0px, color-mix(in hsl, var(--background) 78%, transparent) 6px, color-mix(in hsl, var(--background) 28%, transparent) 16px, transparent 24px)`}}),(0,Z.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] opacity-0 group-hover:opacity-100 lg:block`,style:{...Qr,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,Z.jsx)(K,{className:`hidden px-4 py-3 sm:table-cell`,style:r.status,children:(0,Z.jsx)(ii,{status:e.status,tiers:e.tiers})}),a&&(0,Z.jsx)(K,{className:`hidden px-4 py-3 lg:table-cell`,style:r.openRate,children:(0,Z.jsx)(ai,{emailOpenRate:e.email_open_rate})}),(0,Z.jsx)(K,{className:`hidden px-4 py-3 lg:table-cell`,style:r.location,children:(0,Z.jsx)(oi,{geolocation:e.geolocation})}),(0,Z.jsx)(K,{className:`hidden px-4 py-3 lg:table-cell`,style:r.created,children:(0,Z.jsx)(si,{createdAt:e.created_at})}),t.map(t=>(0,Z.jsx)(K,{className:`hidden px-4 py-3 lg:table-cell`,style:r.dynamic,children:(0,Z.jsx)(ci,{column:t,member:e,timezone:o})},t.key))]})}),ui={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)`},di=({activeColumns:e,columnStyles:t,showEmailOpenRate:n})=>(0,Z.jsxs)(`colgroup`,{children:[(0,Z.jsx)(`col`,{className:`max-sm:!w-full max-sm:!min-w-0 sm:max-lg:!w-auto sm:max-lg:!min-w-0`,style:t.member}),(0,Z.jsx)(`col`,{className:`hidden sm:table-column`,style:t.status}),n&&(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.openRate}),(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.location}),(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.created}),e.map(e=>(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.dynamic},e.key))]}),fi=({activeColumns:e,className:t,columnStyles:n,headerRef:r,memberHeaderRef:i,showEmailOpenRate:a})=>(0,Z.jsx)(Re,{ref:r,className:V(`hidden bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,t),children:(0,Z.jsxs)(G,{children:[(0,Z.jsx)(W,{ref:i,className:`sticky left-0 z-[70] bg-transparent px-4 [--members-sticky-fade-base:var(--background)]`,style:n.member,children:`Member`}),(0,Z.jsx)(W,{className:`bg-transparent px-4`,style:n.status,children:`Status`}),a&&(0,Z.jsx)(W,{className:`bg-transparent px-4`,style:n.openRate,children:`Open rate`}),(0,Z.jsx)(W,{className:`bg-transparent px-4`,style:n.location,children:`Location`}),(0,Z.jsx)(W,{className:`bg-transparent px-4`,style:n.created,children:`Created`}),e.map(e=>(0,Z.jsx)(W,{className:`bg-transparent px-4`,style:n.dynamic,children:e.label},e.key))]})}),pi=({columnStyle:e,showPinnedEdge:t})=>(0,Z.jsxs)(`div`,{className:`pointer-events-none absolute inset-y-0 left-0 z-[70] overflow-visible bg-transparent [--members-sticky-fade-base:var(--background)]`,style:e,children:[(0,Z.jsxs)(ze,{className:`w-full table-fixed border-collapse`,children:[(0,Z.jsx)(`colgroup`,{children:(0,Z.jsx)(`col`,{style:{width:`100%`}})}),(0,Z.jsx)(Re,{className:`bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,children:(0,Z.jsx)(G,{children:(0,Z.jsx)(W,{className:`bg-transparent px-4`,children:`Member`})})})]}),t&&(0,Z.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px w-[24px]`,style:ui})]}),mi={member:40,status:15,openRate:10,location:17.5,created:17.5},hi={member:320,status:180,openRate:140,location:180,created:160},gi=17.5,_i=220;function vi(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0}function yi({showEmailOpenRate:e,activeColumnCount:t}){let n=[{key:`member`,width:mi.member},{key:`status`,width:mi.status},...e?[{key:`openRate`,width:mi.openRate}]:[],{key:`location`,width:mi.location},{key:`created`,width:mi.created}],r=vi(t),i=n.reduce((e,t)=>e+t.width,0),a=100+r*gi,o=gi/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+hi[t.key],0)+r*_i,dynamicColumnWidthPercentage:o,baseColumnWidthPercentages:s,baseColumnMinWidths:{member:hi.member,status:hi.status,openRate:hi.openRate,location:hi.location,created:hi.created},dynamicColumnMinWidth:_i}}function bi(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 xi=({height:e})=>(0,Z.jsx)(`tr`,{"aria-hidden":`true`,style:{height:e},children:(0,Z.jsx)(`td`,{colSpan:999})}),Si=(0,X.forwardRef)(function(e,t){return(0,Z.jsx)(G,{ref:t,...e,"aria-hidden":`true`,children:(0,Z.jsx)(K,{className:`h-[72px] px-4 py-3`,colSpan:999,children:(0,Z.jsx)(`div`,{className:`h-full animate-pulse rounded-md bg-muted`,"data-testid":`loading-placeholder`})})})});function Ci({items:e,totalItems:t,backPath:n,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,isLoading:o,showEmailOpenRate:s=!0,activeColumns:c,timezone:l,pageHeaderRef:u,onRowClick:d}){let f=(0,X.useRef)(null),p=(0,X.useRef)(null),m=(0,X.useRef)(null),h=(0,X.useRef)(null),g=(0,X.useRef)(null),[_,v]=(0,X.useState)(0),[y,b]=(0,X.useState)(0),[x,S]=(0,X.useState)(!1),{visibleItemCount:C,canLoadMore:w,loadMore:T}=an(t),E=(0,X.useMemo)(()=>yi({showEmailOpenRate:s,activeColumnCount:c.length}),[c.length,s]),{tableStyle:D,columnStyles:O}=(0,X.useMemo)(()=>bi(E),[E]);rn({parentRef:f,isLoading:o}),(0,X.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,X.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}=nn({items:e,totalItems:C,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,parentRef:f,estimateSize:()=>72}),M=e=>{d?d(e):window.location.hash=Zr(e,n)};return(0,Z.jsxs)(`div`,{ref:f,className:`w-full min-w-0`,"data-testid":`members-list-scroll-root`,children:[(0,Z.jsx)(`div`,{className:`sticky z-[50] hidden overflow-visible bg-transparent lg:block`,style:{top:y},children:(0,Z.jsxs)(`div`,{className:`relative`,children:[(0,Z.jsx)(pi,{columnStyle:_>0?{width:_}:O.member,showPinnedEdge:x}),(0,Z.jsx)(`div`,{ref:h,className:`w-full overflow-hidden`,style:_>0?{clipPath:`inset(0 0 0 ${_}px)`}:void 0,children:(0,Z.jsxs)(ze,{"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,Z.jsx)(di,{activeColumns:c,columnStyles:O,showEmailOpenRate:s}),(0,Z.jsx)(fi,{activeColumns:c,columnStyles:O,headerRef:p,memberHeaderRef:m,showEmailOpenRate:s})]})})]})}),(0,Z.jsx)(`div`,{ref:g,className:`w-full overflow-x-auto overflow-y-visible`,children:(0,Z.jsxs)(ze,{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,Z.jsx)(di,{activeColumns:c,columnStyles:O,showEmailOpenRate:s}),(0,Z.jsx)(fi,{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,Z.jsxs)(Le,{children:[(0,Z.jsx)(xi,{height:A}),k.map(({key:t,virtualItem:r,item:i,props:a})=>r.index>e.length-1?(0,Z.jsx)(Si,{...a},t):(0,Z.jsx)(li,{...a,activeColumns:c,backPath:n,columnStyles:O,item:i,showEmailOpenRate:s,showPinnedEdge:x,timezone:l,onClick:M},t)),(0,Z.jsx)(xi,{height:j})]})]})}),w&&(0,Z.jsx)(on,{isLoading:i,onClick:T})]})}function wi({count:e,hasResolvedCount:t,nql:n,search:r}){let i=m(),{data:o}=a(),{mutateAsync:s,isPending:c}=Be(),[l,u]=(0,X.useState)(null),d=Hn(n),f=!r&&(!n||d),p=(0,X.useMemo)(()=>Wn(o?.accessibility),[o?.accessibility]),h=l??p.dismissedCount??0,g=!d,_=f&&(d||e>h);return(0,X.useEffect)(()=>{let n=p.dismissedCount;!o||l!==null||c||n===void 0||!t||e>=n||(u(e),s(Kn(o,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,o,s,t,c,l,p.dismissedAt,p.dismissedCount]),{canDismiss:g,count:e,handleDismiss:(0,X.useCallback)(()=>{if(!o||c)return;let t=l;u(e),s(Kn(o,e,new Date().toISOString())).then(()=>{u(null)}).catch(()=>{u(t),U.error(`Unable to dismiss notification. Please try again.`)})},[e,o,s,c,l]),handleViewMembers:(0,X.useCallback)(()=>{i(cn({filter:zn}))},[i]),shouldShow:_}}var Ti=({count:e,hasResolvedCount:t,nql:n,search:r})=>{let i=wi({count:e,hasResolvedCount:t,nql:n,search:r});return i.shouldShow?(0,Z.jsx)(qe,{role:`status`,variant:`warning`,...i.canDismiss?{dismissible:!0,onDismiss:i.handleDismiss}:{dismissible:!1},children:(0,Z.jsxs)(`div`,{className:`flex flex-col items-baseline gap-3 pr-8 sm:flex-row`,children:[`We found `,F(i.count),` `,i.count===1?`member`:`members`,` with more than one active paid subscription.`,` `,(0,Z.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[i.canDismiss&&(0,Z.jsx)(`button`,{className:`nowrap font-semibold !underline`,type:`button`,onClick:i.handleViewMembers,children:`View members`}),(0,Z.jsx)(`a`,{className:`nowrap font-semibold underline`,href:`https://ghost.org/help/duplicate-subscription-warning/`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]})}):null},Ei=[`subscriptions.plan_interval`,`subscriptions.status`,`subscriptions.start_date`,`subscriptions.current_period_end`,`conversion`,`offer_redemptions`,Rn];function Di(e,t){return t&&e.length===0?!1:!e.some(e=>Ei.includes(e.field))}function Oi({isFetching:e,isFetchingNextPage:t}){return e&&!t}var ki=Ht(nr,`date`);function Ai(e,t){return Mt(t,e.field,`UTC`)?.definition.operators.includes(e.operator)??!1}function ji(e){return Array.isArray(e.$and)?{operator:`$and`,children:e.$and}:Array.isArray(e.$or)?{operator:`$or`,children:e.$or}:null}function Mi(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=ji(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 Ni(e){let t=ji(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 Pi(e){let t=ji(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]}}var Fi=[Mi,Ni,Pi];function Ii(e,t){for(let t of Fi){let n=t(e);if(n)return[n]}let n=ji(e);return n?.operator===`$and`?n.children.flatMap(e=>Ii(e,t)):zt([e],nr,t)}function Li(e,t){let n=At(e??``);return n?Ut(Ii(n,t)):[]}function Ri(e){let t=At(e??``);return t?It(t,ki):!1}function zi(e,t){return Bt(e,nr,t)}function Bi(e,t,n=!t){return!!e&&n&&!t&&Ri(e)}function Vi(e,t){return e.filter(e=>Ai(e,t))}function Hi({baseSearchParams:e,filters:t,search:n,timezone:r,fields:i}){let a=new URLSearchParams(e),o=zi(Vi(t,i),r);return a.delete(`filter`),a.delete(`search`),o&&a.set(`filter`,o),n&&a.set(`search`,n),a}function Ui(e){let t=(0,X.useMemo)(()=>rr(),[]),[n,r]=h(),i=(0,X.useRef)(null),a=(0,X.useMemo)(()=>n.get(`filter`)??void 0,[n]),o=(0,X.useMemo)(()=>n.toString(),[n]),s=(0,X.useMemo)(()=>Vi(Li(a,e),t),[a,e,t]),[c,l]=(0,X.useState)(s),u=(0,X.useMemo)(()=>n.get(`search`)??``,[n]),d=(0,X.useMemo)(()=>zi(Vi(c,t),e),[c,e,t]);return(0,X.useEffect)(()=>{o!==i.current&&(l(s),i.current=o)},[o,s]),(0,X.useEffect)(()=>{if(i.current!==null&&o!==i.current)return;let a=Hi({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,X.useCallback)((a,o={})=>{let s=o.replace??!0,c=Hi({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,X.useCallback)((a,o={})=>{let s=o.replace??!0,l=Hi({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,X.useCallback)(({replace:a=!0}={})=>{let o=Hi({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,X.useCallback)(({replace:a=!0}={})=>{let o=Hi({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 Wi({enabled:e}){let{data:t}=Ct({searchParams:{filter:zn,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 Gi=250,Ki=6,qi=({emailAnalyticsEnabled:e,hasStripeEnabled:t,membershipsEnabled:n,timezone:i})=>{let a=(0,X.useRef)(null),o=(0,X.useCallback)(e=>{a.current=e?.closest(`[data-list-page="header"]`)},[]),{filters:s,nql:c,search:l,setFilters:u,setSearch:d,hasFilterOrSearch:f,clearAll:p}=Ui(i),m=g(),h=Dr(),_=Ar(h,c),[v,y]=(0,X.useState)(!1),[b,x]=(0,X.useState)(!1),[S,C]=(0,X.useState)(l),w=Tt(e=>{d(e)},Gi),{count:T,hasResolvedCount:E}=Wi({enabled:t}),D=(0,X.useMemo)(()=>ar(s),[s]),O=(0,X.useMemo)(()=>Di(s,c),[s,c]),{data:k,isError:j,isFetching:M,isFetchingNextPage:N,refetch:P,fetchNextPage:ee,hasNextPage:I}=et({searchParams:(0,X.useMemo)(()=>sr({filters:s,nql:c,search:l}),[s,c,l]),placeholderData:r}),L=Oi({isFetching:M,isFetchingNextPage:N}),R=k?.meta?.pagination?.total??0,z=s.length>0,te=v,ne=z,re=f||R>0,ie=!f&&!L&&!j&&R<Ki;(0,X.useEffect)(()=>{C(l),w.cancel()},[l,w]);let ae=e=>{C(e),w(e)};return(0,Z.jsx)(ge,{className:`size-full`,children:(0,Z.jsx)(_e,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Z.jsxs)(Xt,{"data-testid":`members-page`,children:[(0,Z.jsx)(Xt.Header,{className:`py-4 sidebar:py-5`,children:(0,Z.jsxs)(`div`,{ref:o,className:`flex flex-col gap-4 sidebar:gap-6`,children:[(0,Z.jsxs)(H,{blurredBackground:!1,sticky:!1,children:[(0,Z.jsx)(H.Left,{children:(0,Z.jsxs)(H.Title,{children:[`Members`,` `,!L&&R>0&&(0,Z.jsx)(H.Count,{className:`hidden sm:inline`,children:F(R)})]})}),(0,Z.jsx)(H.Actions,{children:(0,Z.jsxs)(H.ActionGroup,{className:`ml-auto flex-wrap justify-end sm:ml-0 sm:flex-nowrap`,children:[re&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:`hidden lg:flex`,children:(0,Z.jsx)(qr,{search:S,onSearchChange:ae})}),(0,Z.jsx)(B,{"aria-label":v?`Hide member search`:`Show member search`,className:V(`lg:hidden`,v&&`bg-secondary hover:bg-secondary`),variant:`outline`,onClick:()=>{if(v){y(!1),x(!1);return}x(!0),y(!0)},children:(0,Z.jsx)(A,{className:`size-4`})}),!z&&(0,Z.jsx)(Kr,{activeView:_,filters:s,iconOnly:!0,multipleActiveSubscriptionsCount:T,nql:c,savedViews:h,onFiltersChange:u})]}),(0,Z.jsx)(fr,{canBulkDelete:O,hasFilterOrSearch:f,memberCount:R,nql:c,search:l,showMenu:re,showNewMember:re,onImportComplete:()=>{P()}})]})})]}),re&&(ne||te)&&(0,Z.jsxs)(qt,{className:V(`flex-col gap-4 lg:flex-row lg:items-center sidebar:gap-6 lg:gap-6`,!ne&&`lg:hidden`),children:[te&&(0,Z.jsx)(`div`,{className:`w-full lg:hidden`,children:(0,Z.jsx)(qr,{ariaLabel:`Search members mobile`,autoFocus:b,search:S,onSearchChange:ae})}),ne&&(0,Z.jsx)(Kr,{activeView:_,filters:s,multipleActiveSubscriptionsCount:T,nql:c,savedViews:h,onFiltersChange:u})]}),t&&(0,Z.jsx)(Ti,{count:T,hasResolvedCount:E,nql:c,search:l})]})}),(0,Z.jsxs)(Xt.Body,{children:[L?(0,Z.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Z.jsx)(Ke,{size:`lg`})}):j?(0,Z.jsxs)(`div`,{className:`mb-16 flex flex-1 flex-col items-center justify-center`,children:[(0,Z.jsx)(`h2`,{className:`mb-2 text-xl font-medium`,children:`Error loading members`}),(0,Z.jsx)(`p`,{className:`mb-4 text-muted-foreground`,children:`Please reload the page to try again`}),(0,Z.jsx)(B,{onClick:()=>window.location.reload(),children:`Reload page`})]}):k?.members.length?(0,Z.jsx)(Ci,{activeColumns:D,backPath:`${m.pathname}${m.search}`,fetchNextPage:()=>void ee(),hasNextPage:I,isFetchingNextPage:N,isLoading:M&&!N,items:k.members,pageHeaderRef:a,showEmailOpenRate:e,timezone:i,totalItems:R}):f?(0,Z.jsx)(`div`,{className:`flex flex-1 flex-col items-center justify-center`,children:(0,Z.jsx)(Ae,{actions:(0,Z.jsx)(B,{variant:`outline`,onClick:()=>{w.cancel(),C(``),p({replace:!1})},children:`Show all members`}),title:`No matching members found.`,children:(0,Z.jsx)(de,{})})}):(0,Z.jsx)(pr,{membershipsEnabled:n,onMemberCreated:async()=>{await P()}}),ie&&(0,Z.jsx)(`div`,{className:V(k?.members.length&&`mt-8`),children:(0,Z.jsx)(Xr,{})})]})]})})})},Ji=()=>{let[e]=h(),{data:t,isLoading:n}=Xe({}),{data:r,isLoading:i}=Je(),a=Bi(e.get(`filter`)??void 0,!!t?.settings,n);if(n||i||!t?.settings||!r?.config||a)return(0,Z.jsx)(ge,{className:`size-full`,children:(0,Z.jsx)(_e,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Z.jsxs)(Xt,{children:[(0,Z.jsx)(Xt.Header,{className:`py-4 sidebar:py-6`,children:(0,Z.jsx)(H,{blurredBackground:!1,sticky:!1,children:(0,Z.jsx)(H.Left,{children:(0,Z.jsx)(H.Title,{children:`Members`})})})}),(0,Z.jsx)(Xt.Body,{children:(0,Z.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Z.jsx)(Ke,{size:`lg`})})})]})})});let o=sn(t.settings),s=J(t.settings,`members_signup_access`)!==`none`,c=r.config.emailAnalytics===!0,l=Ge(t.settings,r.config);return(0,Z.jsx)(qi,{emailAnalyticsEnabled:c,hasStripeEnabled:l,membershipsEnabled:s,timezone:o})};export{Ji as default};