ghost 6.57.0 → 6.57.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/components/tryghost-adapter-base-scheduling-0.2.1.tgz +0 -0
  2. package/components/tryghost-kg-converters-1.2.4.tgz +0 -0
  3. package/components/tryghost-kg-default-cards-10.3.4.tgz +0 -0
  4. package/components/tryghost-kg-default-nodes-2.1.5.tgz +0 -0
  5. package/components/tryghost-kg-default-transforms-1.3.3.tgz +0 -0
  6. package/components/tryghost-kg-html-to-lexical-1.3.3.tgz +0 -0
  7. package/components/tryghost-kg-lexical-html-renderer-1.4.3.tgz +0 -0
  8. package/core/built/admin/assets/{about-C7O-AgRZ.js → about-BNojRaxf.js} +1 -1
  9. package/core/built/admin/assets/{account-migration-Cv_ol1ko.js → account-migration-DMS8JsM-.js} +1 -1
  10. package/core/built/admin/assets/{add-integration-modal-m9Dv6f77.js → add-integration-modal-DU9ghGLS.js} +1 -1
  11. package/core/built/admin/assets/{add-newsletter-modal-CPSVZL2H.js → add-newsletter-modal-DFxuQrYu.js} +1 -1
  12. package/core/built/admin/assets/{add-recommendation-modal-Ci9Z5yat.js → add-recommendation-modal-D-3LOrdd.js} +1 -1
  13. package/core/built/admin/assets/{analytics-DqSCVV8U.js → analytics-DTIMRhWw.js} +1 -1
  14. package/core/built/admin/assets/{announcement-bar-modal-DU3avV7d.js → announcement-bar-modal-DGCcezB6.js} +1 -1
  15. package/core/built/admin/assets/{api-keys-BK0LylyK.js → api-keys-Dx4NeNpK.js} +1 -1
  16. package/core/built/admin/assets/{audience-DTJtXXWY.js → audience-DkknNqhZ.js} +1 -1
  17. package/core/built/admin/assets/{automations-dtQ_MRZ7.js → automations-DvSU7QhW.js} +1 -1
  18. package/core/built/admin/assets/{bluesky-sharing-B8Es3AuV.js → bluesky-sharing-yZ9A_jL8.js} +1 -1
  19. package/core/built/admin/assets/{breadcrumb-tg5zL--z.js → breadcrumb-CjOH7LCU.js} +1 -1
  20. package/core/built/admin/assets/{chart-helpers-CZElTGYL.js → chart-helpers-DGxvWnBT.js} +1 -1
  21. package/core/built/admin/assets/{checkbox-Cyo-x7mC.js → checkbox-BSUcnNq_.js} +1 -1
  22. package/core/built/admin/assets/{chunk.873.b8fc05a8ab877fb819ed.js → chunk.424.4a27628efdade15c2dab.js} +3 -3
  23. package/core/built/admin/assets/chunk.524.dce1c51e0bc30fb2718e.js +25 -0
  24. package/core/built/admin/assets/{chunk.211.6f7328d63c41536451b3.js → chunk.571.40f093ed6d883993714e.js} +5 -5
  25. package/core/built/admin/assets/chunk.582.3a430d5c6a744fd475b6.js +27 -0
  26. package/core/built/admin/assets/{code-editor-view-Dq1rQ4tS.js → code-editor-view-BcyKABrG.js} +1 -1
  27. package/core/built/admin/assets/{color-picker-field-BonBgxhU.js → color-picker-field-8NoSnhNI.js} +1 -1
  28. package/core/built/admin/assets/{color-utils-BsrwXuDz.js → color-utils-Dzeeuj1F.js} +1 -1
  29. package/core/built/admin/assets/{combobox-uX5r_paI.js → combobox-5rdgDrDV.js} +1 -1
  30. package/core/built/admin/assets/{command-DxwBO2pF.js → command-BOYMbZa_.js} +1 -1
  31. package/core/built/admin/assets/{comments-Dn-RO-nU.js → comments-BhNM5CYl.js} +1 -1
  32. package/core/built/admin/assets/{confirmation-modal-B6D6mk6R.js → confirmation-modal-CYD7x3UQ.js} +1 -1
  33. package/core/built/admin/assets/{content-api-modal-BxQ-7T6u.js → content-api-modal-BtW4Z1-1.js} +1 -1
  34. package/core/built/admin/assets/{copy-field-BAxL4Zqn.js → copy-field-CEp_XieW.js} +1 -1
  35. package/core/built/admin/assets/{custom-integration-modal---d_l7lc.js → custom-integration-modal-bk3lNEuQ.js} +1 -1
  36. package/core/built/admin/assets/{date-range-select-PB2n1HZf.js → date-range-select-B3Ij1Rqg.js} +1 -1
  37. package/core/built/admin/assets/{debounce-Dg2fW5Rg.js → debounce-Cx5B_9OI.js} +1 -1
  38. package/core/built/admin/assets/{design-and-theme-modal-DYRT207a.js → design-and-theme-modal-B2xYKS1I.js} +3 -3
  39. package/core/built/admin/assets/{dirty-confirm-dialog-BnDJ39ao.js → dirty-confirm-dialog-YE9L21gY.js} +1 -1
  40. package/core/built/admin/assets/{disabled-sources-indicator-iMHrkyV3.js → disabled-sources-indicator-uIzbWL7K.js} +1 -1
  41. package/core/built/admin/assets/{dist-D5vhMdXf.js → dist-ARN6XTcR.js} +1 -1
  42. package/core/built/admin/assets/{dist-cFzKLG7y.js → dist-Bg8bSvLA.js} +1 -1
  43. package/core/built/admin/assets/{dist-WeOIvSYM.js → dist-CsvXCJSe.js} +1 -1
  44. package/core/built/admin/assets/{domain-BR8FIdjD.js → domain-DzrOAPY8.js} +1 -1
  45. package/core/built/admin/assets/{dropzone-hNxmUvwD.js → dropzone-CzhP33wa.js} +1 -1
  46. package/core/built/admin/assets/{edit-profile-CENrkY0l.js → edit-profile-oufs4R4n.js} +1 -1
  47. package/core/built/admin/assets/{editor-B18D0lm8.js → editor-BBKrunMK.js} +3 -3
  48. package/core/built/admin/assets/{embed-signup-form-modal-BsCYUMvQ.js → embed-signup-form-modal-Ch3s6lqA.js} +1 -1
  49. package/core/built/admin/assets/{explore-BmrnljWw.js → explore-CA-R01Br.js} +1 -1
  50. package/core/built/admin/assets/{feed-Dy4li6i8.js → feed-ClC8_Gld.js} +1 -1
  51. package/core/built/admin/assets/{field-Dh_lwk13.js → field-B3OPenbP.js} +1 -1
  52. package/core/built/admin/assets/{filter-sources-D2zDuJH5.js → filter-sources-CiPLnG9A.js} +1 -1
  53. package/core/built/admin/assets/{filters-3JBQcNtJ.js → filters-Bz0HsRie.js} +1 -1
  54. package/core/built/admin/assets/{filters-CFt_BDe4.js → filters-yFvybRMe.js} +1 -1
  55. package/core/built/admin/assets/{first-promoter-modal-D6Rjxugw.js → first-promoter-modal-BC0UpYCD.js} +1 -1
  56. package/core/built/admin/assets/{gift-link-modal-zMtlJhLQ.js → gift-link-modal-BKRuqo-k.js} +1 -1
  57. package/core/built/admin/assets/{global-data-provider-B949LDXJ.js → global-data-provider-RzW6Bnlf.js} +1 -1
  58. package/core/built/admin/assets/{growth-CFws67_i.js → growth-ClNAldfL.js} +1 -1
  59. package/core/built/admin/assets/{growth-C38Xtp8D.js → growth-Dz8OSG06.js} +1 -1
  60. package/core/built/admin/assets/{history-modal-ILAOkbxH.js → history-modal-DIVuQ5Ct.js} +1 -1
  61. package/core/built/admin/assets/{html-field-9a9Id_2q.js → html-field-CVZ2sMxw.js} +1 -1
  62. package/core/built/admin/assets/{images-CrQKVc9Q.js → images-Ok8FFJ3A.js} +1 -1
  63. package/core/built/admin/assets/{inbox-BrSRzyvz.js → inbox-CMUVI6qb.js} +1 -1
  64. package/core/built/admin/assets/{index-BHy2DZX-.js → index-DUXM0NlS.js} +2 -2
  65. package/core/built/admin/assets/{input-group-6vEPvX9S.js → input-group-2XU-iuh_.js} +1 -1
  66. package/core/built/admin/assets/{invite-user-modal-5xDCEw90.js → invite-user-modal-DrZ7xxrZ.js} +1 -1
  67. package/core/built/admin/assets/{koenig-editor-base-BWLEB9Vf.js → koenig-editor-base-BPj4S760.js} +1 -1
  68. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +9254 -9251
  69. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +124 -124
  70. package/core/built/admin/assets/{koenig-lexical-Cj62r_y9.js → koenig-lexical-Cdjv-m3_.js} +98 -98
  71. package/core/built/admin/assets/{kpi-card-IHDo8Q56.js → kpi-card-J8Mj1sDX.js} +1 -1
  72. package/core/built/admin/assets/{kpi-card-DOUnkZcN.js → kpi-card-awos0BMH.js} +1 -1
  73. package/core/built/admin/assets/{kpi-helpers-CjUdECAK.js → kpi-helpers-SEhvH-8E.js} +1 -1
  74. package/core/built/admin/assets/{kpi-tabs-X3DkOYbI.js → kpi-tabs-R6BjsKhd.js} +1 -1
  75. package/core/built/admin/assets/{label-Dq6QaOuS.js → label-BMC3dzLI.js} +1 -1
  76. package/core/built/admin/assets/{label-picker-8YlhS2U3.js → label-picker-Bnlru5tO.js} +1 -1
  77. package/core/built/admin/assets/layout-yR9rlvEw.js +1 -0
  78. package/core/built/admin/assets/{limit-modal-BRPsit_B.js → limit-modal-COmLevuY.js} +1 -1
  79. package/core/built/admin/assets/{member-custom-fields-CmvsuuV_.js → member-custom-fields-BvFKEpxJ.js} +1 -1
  80. package/core/built/admin/assets/{member-detail-DCvRrkmJ.js → member-detail-CWdPAe3p.js} +1 -1
  81. package/core/built/admin/assets/{members-DxbSKngD.js → members-Bnt0ih2R.js} +1 -1
  82. package/core/built/admin/assets/{moderation-Da5lhhWh.js → moderation-mPjYHgZW.js} +1 -1
  83. package/core/built/admin/assets/{multi-select-combobox-CYdkH7KQ.js → multi-select-combobox-CsoyHAiX.js} +1 -1
  84. package/core/built/admin/assets/{navigation-modal-BIoTwtMy.js → navigation-modal-D_c0badj.js} +1 -1
  85. package/core/built/admin/assets/{newsletter-BptlVoJm.js → newsletter-DR49NyGS.js} +1 -1
  86. package/core/built/admin/assets/{newsletter-detail-modal-BIvxqE0N.js → newsletter-detail-modal-B45pL1pb.js} +1 -1
  87. package/core/built/admin/assets/{newsletter-emails-Bf8IZLsP.js → newsletter-emails-B-OLfrvr.js} +1 -1
  88. package/core/built/admin/assets/{newsletters-BgrIZk0V.js → newsletters-DGs5BaKH.js} +1 -1
  89. package/core/built/admin/assets/{note-DYcLOmDb.js → note-CSVsUKBm.js} +1 -1
  90. package/core/built/admin/assets/{notifications-B2SPFIV9.js → notifications-DV9FRtDw.js} +1 -1
  91. package/core/built/admin/assets/{offers-container-modal-BZnZITMw.js → offers-container-modal-B0hFS8nk.js} +1 -1
  92. package/core/built/admin/assets/{onboarding-route-DgdfxkQh.js → onboarding-route--jL5KLPD.js} +1 -1
  93. package/core/built/admin/assets/{overview-Dt2_mR6U.js → overview-B-ZPNqMo.js} +1 -1
  94. package/core/built/admin/assets/{overview-BYQJXSog.js → overview-D96iwoJi.js} +1 -1
  95. package/core/built/admin/assets/{page-header-CpmxJj5B.js → page-header-DAvDYKO9.js} +1 -1
  96. package/core/built/admin/assets/{pintura-modal-B4MuBuuO.js → pintura-modal-jiUCxX0Q.js} +1 -1
  97. package/core/built/admin/assets/{portal-frame-BF0NBIji.js → portal-frame-D4D4nEO6.js} +1 -1
  98. package/core/built/admin/assets/{portal-modal-DMVbm0oy.js → portal-modal-BLFdYeDH.js} +1 -1
  99. package/core/built/admin/assets/{post-analytics-CXWBOGyP.js → post-analytics-BhAtiFJp.js} +1 -1
  100. package/core/built/admin/assets/{post-analytics-header-ChzjXVPt.js → post-analytics-header-DK27VjJm.js} +1 -1
  101. package/core/built/admin/assets/{post-analytics-provider-Cgw4U_fw.js → post-analytics-provider-DGg0FUqs.js} +1 -1
  102. package/core/built/admin/assets/{post-share-modal-B9Vmk_XM.js → post-share-modal-DtFAC132.js} +1 -1
  103. package/core/built/admin/assets/{preferences-BfzJmnsd.js → preferences-CuWLISHa.js} +1 -1
  104. package/core/built/admin/assets/{preview-modal-Dw_HtD6S.js → preview-modal-DctYx20m.js} +1 -1
  105. package/core/built/admin/assets/{profile-BT5vtv9b.js → profile-BsKYYtuL.js} +1 -1
  106. package/core/built/admin/assets/{radio-group-I7ou7PoJ.js → radio-group-CI5_Kf_d.js} +1 -1
  107. package/core/built/admin/assets/{select-D9oU1IoM.js → select-CkXqNJDJ.js} +1 -1
  108. package/core/built/admin/assets/settings-B4vM-rgV.js +4 -0
  109. package/core/built/admin/assets/{settings-CpvHWix7.js → settings-ZCj-W56o.js} +1 -1
  110. package/core/built/admin/assets/{settings-breadcrumbs-K0USP2nw.js → settings-breadcrumbs-DIq31FwA.js} +1 -1
  111. package/core/built/admin/assets/{share-modal-ClIyPzc5.js → share-modal-BNj14g79.js} +1 -1
  112. package/core/built/admin/assets/{slack-modal-1XXqOfiw.js → slack-modal-C6SpMQ-q.js} +1 -1
  113. package/core/built/admin/assets/{sort-button-CdBsm40v.js → sort-button-B-k54ow2.js} +1 -1
  114. package/core/built/admin/assets/{source-icon-CEYmVLXR.js → source-icon-Cej3sZM6.js} +1 -1
  115. package/core/built/admin/assets/{stats-D8nZCTy5.js → stats-B2KW8E2y.js} +1 -1
  116. package/core/built/admin/assets/{stats-view-CugFVf0g.js → stats-view-CVzU2-p5.js} +1 -1
  117. package/core/built/admin/assets/{step-1-DOYjrORn.js → step-1-Dbn1iIMU.js} +1 -1
  118. package/core/built/admin/assets/{step-2-vA6RsarH.js → step-2-BahnSuN6.js} +1 -1
  119. package/core/built/admin/assets/{step-3-BtIBxMId.js → step-3-CW04e2ZJ.js} +1 -1
  120. package/core/built/admin/assets/{stripe-button-UFP4QRXd.js → stripe-button-BkBZqaGG.js} +1 -1
  121. package/core/built/admin/assets/{stripe-connect-modal-C_L3uM6n.js → stripe-connect-modal-CYDDrSJm.js} +1 -1
  122. package/core/built/admin/assets/{table-TMCgCQK7.js → table-BtLcEi1M.js} +1 -1
  123. package/core/built/admin/assets/{tabs-Dd6oOKbv.js → tabs-BaWRfg8j.js} +1 -1
  124. package/core/built/admin/assets/{tag-detail-D3l-UJPR.js → tag-detail-CmqiC32L.js} +1 -1
  125. package/core/built/admin/assets/{tags-WdKQGWR8.js → tags-BbygUvNB.js} +1 -1
  126. package/core/built/admin/assets/{testimonials-modal-CqWp-xXJ.js → testimonials-modal--bdzppyh.js} +1 -1
  127. package/core/built/admin/assets/{tier-detail-modal-BkcR2u0A.js → tier-detail-modal-BZmAsIy4.js} +1 -1
  128. package/core/built/admin/assets/{toggle-group-Guorw93z.js → toggle-group-CVl-Xigr.js} +1 -1
  129. package/core/built/admin/assets/{topic-filter-CbgoWIHn.js → topic-filter-BoRHRbL1.js} +1 -1
  130. package/core/built/admin/assets/{transistor-modal-DuNnnpal.js → transistor-modal-CBPDqEGy.js} +1 -1
  131. package/core/built/admin/assets/{unsplash-modal-y2bVwTHH.js → unsplash-modal-CixoRAO2.js} +1 -1
  132. package/core/built/admin/assets/{use-analytics-data-B-b4wNSC.js → use-analytics-data-BiWvcf1u.js} +1 -1
  133. package/core/built/admin/assets/{use-check-theme-limit-error-m09J38Mq.js → use-check-theme-limit-error-B14lZukR.js} +1 -1
  134. package/core/built/admin/assets/use-feature-flag-BmJoc5WN.js +1 -0
  135. package/core/built/admin/assets/{use-filter-params-BnbBDc7T.js → use-filter-params-ChoV72Hw.js} +1 -1
  136. package/core/built/admin/assets/{use-growth-stats-DPU5rt3W.js → use-growth-stats-Dom8xVzo.js} +1 -1
  137. package/core/built/admin/assets/{use-limiter-BkN3E4gw.js → use-limiter-Dwg8ivgQ.js} +1 -1
  138. package/core/built/admin/assets/{use-pintura-config-C_z8HTG2.js → use-pintura-config-Bj4QmiVk.js} +1 -1
  139. package/core/built/admin/assets/{use-pintura-editor-DNgbkhGp.js → use-pintura-editor-DvrslmPE.js} +1 -1
  140. package/core/built/admin/assets/{use-post-referrers-C2mXyrp-.js → use-post-referrers-pxIHTXFs.js} +1 -1
  141. package/core/built/admin/assets/{use-reply-chain-data-DaK8q2qQ.js → use-reply-chain-data-CmFe0N6F.js} +1 -1
  142. package/core/built/admin/assets/{use-setting-group-YlYcoNyP.js → use-setting-group-Cmp_sy-d.js} +1 -1
  143. package/core/built/admin/assets/{use-settings-navigation-Bf1g1rEh.js → use-settings-navigation-BmROPrls.js} +1 -1
  144. package/core/built/admin/assets/{use-simple-pagination-D9ckKo5-.js → use-simple-pagination-D5rL3YwO.js} +1 -1
  145. package/core/built/admin/assets/{use-tinybird-query-GSa32hVw.js → use-tinybird-query-DP2dMaq7.js} +1 -1
  146. package/core/built/admin/assets/{use-tinybird-token-CKLOZFsw.js → use-tinybird-token-DrK_skPQ.js} +1 -1
  147. package/core/built/admin/assets/{use-url-input-z-p0Kewm.js → use-url-input-ChrUZBFf.js} +1 -1
  148. package/core/built/admin/assets/{user-detail-modal-BMxOA4Sv.js → user-detail-modal-XODpOqNC.js} +1 -1
  149. package/core/built/admin/assets/{virtual-list-RHeEL05L.js → virtual-list-Dnoafqbk.js} +1 -1
  150. package/core/built/admin/assets/{web-xJtcwMy4.js → web-D71mjB2r.js} +1 -1
  151. package/core/built/admin/assets/{web-Bw2QMO5u.js → web-z71lA1Y3.js} +1 -1
  152. package/core/built/admin/assets/{zapier-modal-BP2f4-vY.js → zapier-modal-Bp507Um7.js} +1 -1
  153. package/core/built/admin/index.html +5 -5
  154. package/core/frontend/web/middleware/admin-toolbar.js +1 -1
  155. package/core/frontend/web/middleware/serve-indexnow-key.js +1 -7
  156. package/core/server/api/endpoints/index.js +2 -2
  157. package/core/server/api/endpoints/themes.js +6 -1
  158. package/core/server/models/base/plugins/overrides.js +7 -5
  159. package/core/server/services/adapter-manager/adapter-paths.js +16 -12
  160. package/core/server/services/adapter-manager/adapter-paths.ts +17 -12
  161. package/core/server/services/audience-feedback/audience-feedback-controller.js +10 -1
  162. package/core/server/services/audience-feedback/feedback-repository.js +4 -1
  163. package/core/server/services/auth/session/session-service.js +18 -3
  164. package/core/server/services/automations/database-automations-repository.js +5 -5
  165. package/core/server/services/automations/database-automations-repository.ts +12 -12
  166. package/core/server/services/automations/database-date.js +52 -3
  167. package/core/server/services/automations/database-date.ts +23 -2
  168. package/core/server/services/email-analytics/email-analytics-service-wrapper.js +1 -1
  169. package/core/server/services/email-analytics/email-analytics-service.js +3 -2
  170. package/core/server/services/email-analytics/index.js +2 -3
  171. package/core/server/services/email-analytics/index.ts +1 -2
  172. package/core/server/services/email-analytics/lib/queries.js +91 -124
  173. package/core/server/services/email-analytics/lib/queries.ts +341 -0
  174. package/core/server/services/indexnow-ping/index.js +0 -2
  175. package/core/server/services/indexnow-ping/index.ts +0 -2
  176. package/core/server/services/indexnow-ping/indexnow-ping-service.js +5 -7
  177. package/core/server/services/indexnow-ping/indexnow-ping-service.ts +7 -13
  178. package/core/server/services/members/members-api/repositories/member-repository.js +51 -0
  179. package/core/server/services/slack-notifications/slack-notifications.js +2 -2
  180. package/core/server/services/slack-ping/index.js +1 -1
  181. package/core/server/services/slack-ping/index.ts +1 -1
  182. package/core/server/services/slack-ping/slack-ping-service.js +1 -0
  183. package/core/server/services/slack-ping/slack-ping-service.ts +1 -0
  184. package/core/server/services/stats/members-stats-service.js +0 -7
  185. package/core/server/services/themes/storage.js +19 -2
  186. package/core/server/services/webhooks/serialize.js +10 -1
  187. package/core/server/web/api/endpoints/admin/routes.js +2 -2
  188. package/core/shared/custom-theme-settings-cache/custom-theme-settings-bread-service.js +4 -0
  189. package/core/shared/custom-theme-settings-cache/custom-theme-settings-service.js +39 -0
  190. package/core/shared/labs.js +1 -1
  191. package/package.json +11 -11
  192. package/pnpm-lock.yaml +41 -41
  193. package/pnpm-workspace.yaml +18 -18
  194. package/components/tryghost-adapter-base-scheduling-0.2.0.tgz +0 -0
  195. package/components/tryghost-kg-converters-1.2.3.tgz +0 -0
  196. package/components/tryghost-kg-default-cards-10.3.3.tgz +0 -0
  197. package/components/tryghost-kg-default-nodes-2.1.4.tgz +0 -0
  198. package/core/built/admin/assets/chunk.524.cd5498dd4e195f679266.js +0 -25
  199. package/core/built/admin/assets/chunk.582.6f92ec1f03734bf2ea3f.js +0 -27
  200. package/core/built/admin/assets/layout-TMj4P-vv.js +0 -1
  201. package/core/built/admin/assets/settings-CfZFbyu_.js +0 -4
  202. package/core/built/admin/assets/use-feature-flag-ud0Qz8vt.js +0 -1
  203. package/core/server/services/email-analytics/jobs/update-member-email-analytics/index.js +0 -14
  204. /package/core/built/admin/assets/{chunk.211.6f7328d63c41536451b3.js.LICENSE.txt → chunk.571.40f093ed6d883993714e.js.LICENSE.txt} +0 -0
  205. /package/core/server/api/endpoints/{gift-reminders.js → gifts.js} +0 -0
@@ -1 +1 @@
1
- import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{c as n}from"./dist-Cb5RSHSg.js";import{Pr as r}from"./index-BHy2DZX-.js";e();var i=t(),a=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`flex flex-col`,t),...r,children:e}),o=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`flex h-[22px] items-center gap-1.5 text-base font-medium transition-all [&_svg]:size-4`,t,r.onClick&&`hover:cursor-pointer hover:text-black dark:hover:text-white`),...r,children:e}),s=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`mt-0.5 text-[26px] leading-none font-semibold tracking-tighter text-foreground`,t),...r,children:e}),c=({children:e,className:t,...a})=>(0,i.jsx)(r,{className:n(`absolute top-4 right-4 z-50 hidden translate-x-10 text-black opacity-0 transition-all duration-200 group-hover:translate-x-0 group-hover:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100 md:visible! md:block! dark:text-white/80 dark:hover:text-white`,t),size:`sm`,variant:`outline`,...a,children:e}),l=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`group relative isolate flex flex-col items-start gap-2 border-r border-border px-6 py-5 text-muted-foreground transition-all last:border-none`,r.onClick?`cursor-pointer hover:bg-accent/50 hover:text-foreground`:`cursor-auto`,t),...r,children:e});export{s as a,c as i,a as n,o as r,l as t};
1
+ import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{c as n}from"./dist-Cb5RSHSg.js";import{Pr as r}from"./index-DUXM0NlS.js";e();var i=t(),a=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`flex flex-col`,t),...r,children:e}),o=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`flex h-[22px] items-center gap-1.5 text-base font-medium transition-all [&_svg]:size-4`,t,r.onClick&&`hover:cursor-pointer hover:text-black dark:hover:text-white`),...r,children:e}),s=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`mt-0.5 text-[26px] leading-none font-semibold tracking-tighter text-foreground`,t),...r,children:e}),c=({children:e,className:t,...a})=>(0,i.jsx)(r,{className:n(`absolute top-4 right-4 z-50 hidden translate-x-10 text-black opacity-0 transition-all duration-200 group-hover:translate-x-0 group-hover:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100 md:visible! md:block! dark:text-white/80 dark:hover:text-white`,t),size:`sm`,variant:`outline`,...a,children:e}),l=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`group relative isolate flex flex-col items-start gap-2 border-r border-border px-6 py-5 text-muted-foreground transition-all last:border-none`,r.onClick?`cursor-pointer hover:bg-accent/50 hover:text-foreground`:`cursor-auto`,t),...r,children:e});export{s as a,c as i,a as n,o as r,l as t};
@@ -1 +1 @@
1
- import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{c as n}from"./dist-Cb5RSHSg.js";import{o as r,s as i}from"./chart-helpers-CZElTGYL.js";e();var a=t(),o=({children:e,className:t,...r})=>(0,a.jsx)(`div`,{className:n(`flex flex-col items-start gap-4 border-r border-border px-6 py-5 transition-all last:border-none`,t),...r,children:e}),s=({children:e,className:t,color:r,...i})=>(0,a.jsxs)(`div`,{className:n(`flex h-[22px] items-center gap-1.5 text-base font-medium text-muted-foreground [&_svg]:size-4`,t),...i,children:[r&&(0,a.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:r}}),e]}),c=({value:e,diffDirection:t,diffValue:n,diffTooltip:o})=>{let s=null;return t&&t!==`hidden`&&(s=t===`empty`?(0,a.jsx)(`div`,{className:`flex h-[22px] items-center px-1.5 text-xs leading-none font-medium`,"data-testid":`kpi-card-header-diff`,children:n}):(0,a.jsx)(r,{"data-testid":`kpi-card-header-diff`,direction:t,tooltip:o,value:n??``})),(0,a.jsx)(i,{trailing:s,value:e,valueTestId:`kpi-card-header-value`})};export{s as n,c as r,o as t};
1
+ import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{c as n}from"./dist-Cb5RSHSg.js";import{o as r,s as i}from"./chart-helpers-DGxvWnBT.js";e();var a=t(),o=({children:e,className:t,...r})=>(0,a.jsx)(`div`,{className:n(`flex flex-col items-start gap-4 border-r border-border px-6 py-5 transition-all last:border-none`,t),...r,children:e}),s=({children:e,className:t,color:r,...i})=>(0,a.jsxs)(`div`,{className:n(`flex h-[22px] items-center gap-1.5 text-base font-medium text-muted-foreground [&_svg]:size-4`,t),...i,children:[r&&(0,a.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:r}}),e]}),c=({value:e,diffDirection:t,diffValue:n,diffTooltip:o})=>{let s=null;return t&&t!==`hidden`&&(s=t===`empty`?(0,a.jsx)(`div`,{className:`flex h-[22px] items-center px-1.5 text-xs leading-none font-medium`,"data-testid":`kpi-card-header-diff`,children:n}):(0,a.jsx)(r,{"data-testid":`kpi-card-header-diff`,direction:t,tooltip:o,value:n??``})),(0,a.jsx)(i,{trailing:s,value:e,valueTestId:`kpi-card-header-value`})};export{s as n,c as r,o as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{i as r,n as i,t as a}from"./source-icon-CEYmVLXR.js";import{d as o,f as s,p as c}from"./dist-Cb5RSHSg.js";import{n as l}from"./chart-helpers-CZElTGYL.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./card-aUHX0hyR.js";import{a as g,c as _,i as v,l as y,n as b,o as x,r as S,s as C,t as w,u as T}from"./data-list-CupF7bjM.js";import{Bn as E,Hn as D,Ln as O,Pr as k,Ps as A,Rn as j,Vn as M,aa as N,sr as P,ws as F,zn as I}from"./index-BHy2DZX-.js";import{n as L}from"./post-analytics-context-D0Mw-Pmv.js";var R=e(t(),1),z=n(),B=`https://www.google.com/s2/favicons?domain=ghost.org&sz=64`,V=({dataTableHeader:e,data:t,defaultSourceIconUrl:n=B,onSourceClick:r})=>(0,z.jsxs)(w,{children:[e&&(0,z.jsxs)(g,{children:[(0,z.jsx)(v,{children:`Source`}),(0,z.jsx)(v,{children:`Visitors`})]}),(0,z.jsx)(S,{children:t?.map(e=>{let t=!!r,i=e.source?e.source.toLowerCase().replace(/[^a-z0-9]/g,`-`):`direct`;return(0,z.jsxs)(T,{className:`group/row ${t?`cursor-pointer`:``}`,"data-testid":`source-row-${i}`,onClick:t?()=>r(e.source):void 0,children:[(0,z.jsx)(b,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,z.jsx)(x,{className:`group-hover/datalist:max-w-[calc(100%-140px)]`,children:(0,z.jsx)(`div`,{className:`flex items-center space-x-4 overflow-hidden`,children:(0,z.jsx)(`div`,{className:`truncate font-medium`,children:e.linkUrl&&!r?(0,z.jsxs)(`a`,{className:`group/link flex items-center gap-2`,href:e.linkUrl,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{className:`group-hover/link:underline`,children:e.displayName})]}):(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{children:e.displayName})]})})})}),(0,z.jsxs)(C,{children:[(0,z.jsx)(_,{children:s(e.visits)}),(0,z.jsx)(y,{children:c(e.percentage||0)})]})]},e.source)})})]}),H=({data:e,range:t=30,totalVisitors:n=0,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s=B,tableOnly:c=!1,topSourcesLimit:g=10,onSourceClick:_})=>{let{isPostLoading:v}=L(),y=R.useMemo(()=>r({data:e,mode:`visits`,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s}),[e,a,o,s]),b=R.useMemo(()=>i({processedData:y,totalVisitors:n,mode:`visits`}),[y,n]),x=b.slice(0,g),S=`Top sources`,C=`How readers found this post ${t&&` ${l(t)}`}`;if(c){let e=b.slice(0,g),n=b.length>g;return(0,z.jsxs)(`div`,{children:[(0,z.jsx)(V,{data:e,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:_}),n&&(0,z.jsx)(`div`,{className:`mt-4`,children:(0,z.jsxs)(O,{children:[(0,z.jsx)(D,{asChild:!0,children:(0,z.jsxs)(k,{className:`w-full`,size:`sm`,variant:`outline`,children:[`View all (`,b.length,`) `,(0,z.jsx)(F,{size:14})]})}),(0,z.jsxs)(j,{className:`overflow-y-auto pt-0 sm:max-w-[480px]`,children:[(0,z.jsxs)(E,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(M,{children:S}),(0,z.jsx)(I,{children:C})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:b,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:_})})]})]})})]})}return(0,z.jsxs)(h,{className:`group/datalist`,"data-testid":`top-sources-card`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,z.jsxs)(u,{className:`p-0`,children:[(0,z.jsx)(p,{children:S}),(0,z.jsx)(m,{children:C})]}),(0,z.jsx)(A,{className:`mr-2`,children:`Visitors`})]}),(0,z.jsxs)(f,{className:`overflow-hidden`,children:[(0,z.jsx)(`div`,{className:`h-[1px] w-full bg-border`}),v?(0,z.jsx)(P,{lines:5}):x.length>0?(0,z.jsx)(V,{data:x,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:_}):(0,z.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`No sources data available.`})]}),b.length>10&&(0,z.jsx)(d,{children:(0,z.jsxs)(O,{children:[(0,z.jsx)(D,{asChild:!0,children:(0,z.jsxs)(k,{variant:`outline`,children:[`View all `,(0,z.jsx)(N,{})]})}),(0,z.jsxs)(j,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,z.jsxs)(E,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(M,{children:S}),(0,z.jsx)(I,{children:C})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:b,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:_})})]})]})})]})},U={visits:{dataKey:`visits`,label:`Visitors`,color:`var(--chart-blue)`,formatter:s},views:{dataKey:`pageviews`,label:`Pageviews`,color:`var(--chart-teal)`,formatter:s},"bounce-rate":{dataKey:`bounce_rate`,label:`Bounce rate`,color:`var(--chart-purple)`,formatter:c},duration:{dataKey:`avg_session_sec`,label:`Time on page`,color:`var(--chart-orange)`,formatter:o}},W=e=>{if(!e?.length)return{visits:`0`,views:`0`,bounceRate:`0%`,duration:`0s`};let t=e=>{let t=Number(e);return isNaN(t)?0:t},n=e.reduce((e,n)=>e+t(n.visits),0),r=e.reduce((e,n)=>e+t(n.pageviews),0),i=r=>n===0?0:e.reduce((e,i)=>e+t(i[r])*t(i.visits)/n,0),a=i(`bounce_rate`),l=i(`avg_session_sec`);return{visits:s(n),views:s(r),bounceRate:c(a),duration:o(l)}};export{U as n,H as r,W as t};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{i as r,n as i,t as a}from"./source-icon-Cej3sZM6.js";import{d as o,f as s,p as c}from"./dist-Cb5RSHSg.js";import{n as l}from"./chart-helpers-DGxvWnBT.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./card-aUHX0hyR.js";import{a as g,c as _,i as v,l as y,n as b,o as x,r as S,s as C,t as w,u as T}from"./data-list-CupF7bjM.js";import{Bn as E,Hn as D,Ln as O,Pr as k,Ps as A,Rn as j,Vn as M,aa as N,sr as P,ws as F,zn as I}from"./index-DUXM0NlS.js";import{n as L}from"./post-analytics-context-D0Mw-Pmv.js";var R=e(t(),1),z=n(),B=`https://www.google.com/s2/favicons?domain=ghost.org&sz=64`,V=({dataTableHeader:e,data:t,defaultSourceIconUrl:n=B,onSourceClick:r})=>(0,z.jsxs)(w,{children:[e&&(0,z.jsxs)(g,{children:[(0,z.jsx)(v,{children:`Source`}),(0,z.jsx)(v,{children:`Visitors`})]}),(0,z.jsx)(S,{children:t?.map(e=>{let t=!!r,i=e.source?e.source.toLowerCase().replace(/[^a-z0-9]/g,`-`):`direct`;return(0,z.jsxs)(T,{className:`group/row ${t?`cursor-pointer`:``}`,"data-testid":`source-row-${i}`,onClick:t?()=>r(e.source):void 0,children:[(0,z.jsx)(b,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,z.jsx)(x,{className:`group-hover/datalist:max-w-[calc(100%-140px)]`,children:(0,z.jsx)(`div`,{className:`flex items-center space-x-4 overflow-hidden`,children:(0,z.jsx)(`div`,{className:`truncate font-medium`,children:e.linkUrl&&!r?(0,z.jsxs)(`a`,{className:`group/link flex items-center gap-2`,href:e.linkUrl,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{className:`group-hover/link:underline`,children:e.displayName})]}):(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{children:e.displayName})]})})})}),(0,z.jsxs)(C,{children:[(0,z.jsx)(_,{children:s(e.visits)}),(0,z.jsx)(y,{children:c(e.percentage||0)})]})]},e.source)})})]}),H=({data:e,range:t=30,totalVisitors:n=0,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s=B,tableOnly:c=!1,topSourcesLimit:g=10,onSourceClick:_})=>{let{isPostLoading:v}=L(),y=R.useMemo(()=>r({data:e,mode:`visits`,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s}),[e,a,o,s]),b=R.useMemo(()=>i({processedData:y,totalVisitors:n,mode:`visits`}),[y,n]),x=b.slice(0,g),S=`Top sources`,C=`How readers found this post ${t&&` ${l(t)}`}`;if(c){let e=b.slice(0,g),n=b.length>g;return(0,z.jsxs)(`div`,{children:[(0,z.jsx)(V,{data:e,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:_}),n&&(0,z.jsx)(`div`,{className:`mt-4`,children:(0,z.jsxs)(O,{children:[(0,z.jsx)(D,{asChild:!0,children:(0,z.jsxs)(k,{className:`w-full`,size:`sm`,variant:`outline`,children:[`View all (`,b.length,`) `,(0,z.jsx)(F,{size:14})]})}),(0,z.jsxs)(j,{className:`overflow-y-auto pt-0 sm:max-w-[480px]`,children:[(0,z.jsxs)(E,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(M,{children:S}),(0,z.jsx)(I,{children:C})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:b,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:_})})]})]})})]})}return(0,z.jsxs)(h,{className:`group/datalist`,"data-testid":`top-sources-card`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,z.jsxs)(u,{className:`p-0`,children:[(0,z.jsx)(p,{children:S}),(0,z.jsx)(m,{children:C})]}),(0,z.jsx)(A,{className:`mr-2`,children:`Visitors`})]}),(0,z.jsxs)(f,{className:`overflow-hidden`,children:[(0,z.jsx)(`div`,{className:`h-[1px] w-full bg-border`}),v?(0,z.jsx)(P,{lines:5}):x.length>0?(0,z.jsx)(V,{data:x,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:_}):(0,z.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`No sources data available.`})]}),b.length>10&&(0,z.jsx)(d,{children:(0,z.jsxs)(O,{children:[(0,z.jsx)(D,{asChild:!0,children:(0,z.jsxs)(k,{variant:`outline`,children:[`View all `,(0,z.jsx)(N,{})]})}),(0,z.jsxs)(j,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,z.jsxs)(E,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(M,{children:S}),(0,z.jsx)(I,{children:C})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:b,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:_})})]})]})})]})},U={visits:{dataKey:`visits`,label:`Visitors`,color:`var(--chart-blue)`,formatter:s},views:{dataKey:`pageviews`,label:`Pageviews`,color:`var(--chart-teal)`,formatter:s},"bounce-rate":{dataKey:`bounce_rate`,label:`Bounce rate`,color:`var(--chart-purple)`,formatter:c},duration:{dataKey:`avg_session_sec`,label:`Time on page`,color:`var(--chart-orange)`,formatter:o}},W=e=>{if(!e?.length)return{visits:`0`,views:`0`,bounceRate:`0%`,duration:`0s`};let t=e=>{let t=Number(e);return isNaN(t)?0:t},n=e.reduce((e,n)=>e+t(n.visits),0),r=e.reduce((e,n)=>e+t(n.pageviews),0),i=r=>n===0?0:e.reduce((e,i)=>e+t(i[r])*t(i.visits)/n,0),a=i(`bounce_rate`),l=i(`avg_session_sec`);return{visits:s(n),views:s(r),bounceRate:c(a),duration:o(l)}};export{U as n,H as r,W as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r}from"./dist-Cb5RSHSg.js";import{o as i,s as a}from"./chart-helpers-CZElTGYL.js";import{i as o,n as s,r as c,t as l}from"./tabs-Dd6oOKbv.js";import{Ei as u,Pr as d}from"./index-BHy2DZX-.js";var f=e(t(),1),p=n(),m=f.forwardRef(({...e},t)=>(0,p.jsx)(l,{ref:t,variant:`kpis`,...e}));m.displayName=`KpiTabs`;var h=f.forwardRef((e,t)=>(0,p.jsx)(c,{ref:t,...e}));h.displayName=`KpiTabsList`;var g=f.forwardRef((e,t)=>(0,p.jsx)(s,{ref:t,...e}));g.displayName=`KpiTabsContent`;var _=({children:e,...t})=>(0,p.jsx)(o,{className:`h-auto`,...t,children:e}),v=({color:e,icon:t,label:n,value:o,diffDirection:s,diffValue:c,className:l,"data-testid":d})=>{let f=t?u[t]:null,m=(0,p.jsxs)(`span`,{className:`flex items-center gap-1.5 transition-all group-hover:text-foreground`,"data-type":`value`,children:[e&&(0,p.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:e}}),f&&(0,p.jsx)(f,{size:16,strokeWidth:1.5}),n]}),h=s&&s!==`hidden`?(0,p.jsx)(i,{className:`mt-0.5`,"data-testid":d?`${d}-diff`:void 0,direction:s,value:c??``}):null;return(0,p.jsx)(a,{className:r(`group`,l),label:m,size:`lg`,trailing:h,value:o,valueTestId:d})},y=f.forwardRef(({variant:e=`dropdown`,className:t,...n},i)=>(0,p.jsx)(d,{ref:i,className:r(`h-auto w-full rounded-none border-x-0 border-t-0 bg-transparent py-5 focus-visible:ring-0`,t),variant:e,...n}));y.displayName=`KpiDropdownButton`;export{_ as n,v as r,y as t};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r}from"./dist-Cb5RSHSg.js";import{o as i,s as a}from"./chart-helpers-DGxvWnBT.js";import{i as o,n as s,r as c,t as l}from"./tabs-BaWRfg8j.js";import{Ei as u,Pr as d}from"./index-DUXM0NlS.js";var f=e(t(),1),p=n(),m=f.forwardRef(({...e},t)=>(0,p.jsx)(l,{ref:t,variant:`kpis`,...e}));m.displayName=`KpiTabs`;var h=f.forwardRef((e,t)=>(0,p.jsx)(c,{ref:t,...e}));h.displayName=`KpiTabsList`;var g=f.forwardRef((e,t)=>(0,p.jsx)(s,{ref:t,...e}));g.displayName=`KpiTabsContent`;var _=({children:e,...t})=>(0,p.jsx)(o,{className:`h-auto`,...t,children:e}),v=({color:e,icon:t,label:n,value:o,diffDirection:s,diffValue:c,className:l,"data-testid":d})=>{let f=t?u[t]:null,m=(0,p.jsxs)(`span`,{className:`flex items-center gap-1.5 transition-all group-hover:text-foreground`,"data-type":`value`,children:[e&&(0,p.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:e}}),f&&(0,p.jsx)(f,{size:16,strokeWidth:1.5}),n]}),h=s&&s!==`hidden`?(0,p.jsx)(i,{className:`mt-0.5`,"data-testid":d?`${d}-diff`:void 0,direction:s,value:c??``}):null;return(0,p.jsx)(a,{className:r(`group`,l),label:m,size:`lg`,trailing:h,value:o,valueTestId:d})},y=f.forwardRef(({variant:e=`dropdown`,className:t,...n},i)=>(0,p.jsx)(d,{ref:i,className:r(`h-auto w-full rounded-none border-x-0 border-t-0 bg-transparent py-5 focus-visible:ring-0`,t),variant:e,...n}));y.displayName=`KpiDropdownButton`;export{_ as n,v as r,y as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r,o as i}from"./dist-Cb5RSHSg.js";import{Zn as a}from"./index-BHy2DZX-.js";var o=e(t(),1),s=n(),c=i(`text-control leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70`),l=o.forwardRef(({className:e,...t},n)=>(0,s.jsx)(a,{ref:n,className:r(c(),e),...t}));l.displayName=a.displayName;export{l as t};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r,o as i}from"./dist-Cb5RSHSg.js";import{Zn as a}from"./index-DUXM0NlS.js";var o=e(t(),1),s=n(),c=i(`text-control leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70`),l=o.forwardRef(({className:e,...t},n)=>(0,s.jsx)(a,{ref:n,className:r(c(),e),...t}));l.displayName=a.displayName;export{l as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{S as r,h as i,m as a}from"./hooks-D6EE7BIt.js";import{i as o,o as s,r as c,s as l,t as u}from"./command-DxwBO2pF.js";import{t as d}from"./multi-select-combobox-CYdkH7KQ.js";import{$n as f,Da as p,Oi as m,Pa as h,Pr as g,br as _,rs as v,vr as y,xr as b}from"./index-BHy2DZX-.js";import{i as x}from"./filter-sources-D2zDuJH5.js";import{a as S,i as C,n as w,o as T,r as E}from"./labels-DAPjKPy2.js";var D=e(t(),1),O=n(),k=({label:e,onSave:t,onCancel:n,onDelete:i})=>{let[a,o]=(0,D.useState)(e.name),[s,c]=(0,D.useState)(!1),[l,u]=(0,D.useState)(``),[d,f]=(0,D.useState)(!1),[p,m]=(0,D.useState)(!1),h=(0,D.useRef)(null),_=d||p;(0,D.useEffect)(()=>{h.current?.focus(),h.current?.select()},[]);let v=async()=>{if(!a.trim()){u(`Name is required`);return}f(!0);try{await t(e.id,a.trim()),n()}catch(e){u(r(e,`Failed to save label, please try again.`)),f(!1)}},y=e=>{e.key===`Enter`?(e.preventDefault(),v()):e.key===`Escape`&&(e.preventDefault(),_||n())},b=async()=>{m(!0);try{await i(e.id)}catch{m(!1),c(!1)}};return(0,O.jsxs)(`div`,{className:`flex flex-col gap-2 py-1.5`,"data-edit-row":!0,children:[(0,O.jsx)(`input`,{ref:h,className:`h-7 w-full rounded border border-border bg-background px-2 text-sm outline-hidden focus:ring-1 focus:ring-ring disabled:opacity-50`,disabled:_,type:`text`,value:a,onChange:e=>{o(e.target.value),u(``)},onKeyDown:y}),l&&(0,O.jsx)(`span`,{className:`text-xs text-destructive`,children:l}),s?(0,O.jsxs)(`div`,{className:`flex items-center gap-1 text-sm`,children:[(0,O.jsx)(`span`,{className:`flex-1 font-semibold`,children:`Delete label?`}),(0,O.jsx)(g,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,O.jsx)(g,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`destructive`,onClick:()=>void b(),children:p?`Deleting...`:`Delete`})]}):(0,O.jsxs)(`div`,{className:`flex items-center`,children:[(0,O.jsx)(g,{className:`h-6 gap-1 px-1.5 text-xs text-red hover:bg-red/5 hover:text-red`,disabled:_,size:`sm`,variant:`ghost`,onClick:()=>c(!0),children:`Delete`}),(0,O.jsxs)(`div`,{className:`ml-auto flex gap-1`,children:[(0,O.jsx)(g,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:n,children:`Cancel`}),(0,O.jsx)(g,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,onClick:()=>void v(),children:d?`Saving...`:`Save`})]})]})]})};function A(e,t){let n=t.trim().toLowerCase();return n?!e.some(e=>e.name.toLowerCase()===n):!1}var j=({label:e,isSelected:t,showEdit:n,onToggle:r,onEditClick:i})=>(0,O.jsxs)(s,{className:`group`,value:e.slug,onSelect:()=>r(e.slug),children:[(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.name}),n?(0,O.jsxs)(`button`,{"aria-label":`Edit label ${e.name}`,className:`relative ml-1 flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground`,type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),i()},children:[t&&(0,O.jsx)(v,{className:`absolute size-3 text-primary transition-opacity duration-150 group-hover:opacity-0`}),(0,O.jsx)(h,{className:`absolute size-3 translate-x-2 opacity-0 transition-all duration-150 ease-out group-hover:translate-x-0 group-hover:opacity-100`})]}):t&&(0,O.jsx)(v,{className:`size-4 shrink-0 text-primary`})]}),M=({labels:e,selectedSlugs:t,search:n,onToggle:r,onEdit:i,onDelete:a,onCreate:l,isCreating:u,onSearchClear:d})=>{let[f,m]=(0,D.useState)(null),h=n.trim().toLowerCase(),g=h?e.filter(e=>e.name.toLowerCase().includes(h)):e,_=!!l&&A(e,n),v=!!i,y=async()=>{if(l)try{await l(n.trim())&&d?.()}catch{}},b=async(e,t)=>{i&&await i(e,t)},x=async e=>{a&&(await a(e),m(null))};return(0,O.jsxs)(O.Fragment,{children:[!_&&g.length===0&&(0,O.jsx)(c,{children:`No labels found`}),g.length>0&&(0,O.jsx)(o,{className:`[&_[cmdk-group-heading]]:hidden`,children:g.map(e=>f===e.id?(0,O.jsx)(k,{label:e,onCancel:()=>m(null),onDelete:x,onSave:b},e.id):(0,O.jsx)(j,{isSelected:t.includes(e.slug),label:e,showEdit:v,onEditClick:()=>m(e.id),onToggle:r},e.id))}),_&&(0,O.jsx)(o,{className:`[&_[cmdk-group-heading]]:hidden`,children:(0,O.jsxs)(s,{disabled:u,onSelect:()=>void y(),children:[(0,O.jsx)(p,{className:`size-4`}),u?`Creating...`:`Create "${n.trim()}"`]})})]})},N=({labels:e,onToggle:t})=>(0,O.jsx)(O.Fragment,{children:e.map(e=>(0,O.jsxs)(f,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:n=>{n.stopPropagation(),t(e.slug)},children:[e.name,(0,O.jsx)(m,{className:`size-3`})]},e.id))}),P=({labels:e,optionSource:t,selectedSlugs:n,resolvedSelectedLabels:r,onToggle:i,onCreate:a,isCreating:o,onEdit:s,onDelete:c,placeholder:l})=>{let u=r||n.map(t=>e.find(e=>e.slug===t)).filter(e=>!!e);return(0,O.jsx)(F,{isCreating:o,labels:e,optionSource:t,placeholder:l,selectedLabels:u,selectedSlugs:n,onCreate:a,onDelete:c,onEdit:s,onToggle:i})},F=({labels:e,optionSource:t,selectedLabels:n,selectedSlugs:r,onToggle:i,onCreate:a,isCreating:o,onEdit:s,onDelete:c,placeholder:d=`Search labels...`})=>{let[f,p]=(0,D.useState)(!1),[m,h]=(0,D.useState)(``),g=(0,D.useRef)(null),_=(0,D.useRef)(null),v=(0,D.useCallback)(e=>{h(e),t.onSearchChange?.(e)},[t]);return(0,D.useEffect)(()=>{if(!f)return;let e=e=>{_.current&&!_.current.contains(e.target)&&p(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[f]),(0,O.jsxs)(`div`,{ref:_,className:`relative`,children:[(0,O.jsxs)(`div`,{className:`flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-md border border-control-border bg-surface-elevated px-3 py-1 text-control transition-colors focus-within:border-focus-ring focus-within:ring-2 focus-within:ring-focus-ring/25 dark:bg-transparent`,role:`combobox`,onClick:()=>{g.current?.focus(),p(!0)},children:[(0,O.jsx)(N,{labels:n,onToggle:i}),(0,O.jsx)(`input`,{ref:g,className:`min-w-[80px] flex-1 bg-transparent text-control outline-hidden placeholder:text-muted-foreground`,placeholder:n.length===0?d:``,value:m,onChange:e=>{v(e.target.value),f||p(!0)},onFocus:()=>p(!0),onKeyDown:e=>{e.key===`Backspace`&&!m&&r.length>0&&i(r[r.length-1]),e.key===`Escape`&&(p(!1),g.current?.blur())}})]}),f&&(0,O.jsx)(`div`,{className:`absolute top-full left-0 z-50 mt-1 w-full rounded-md border bg-white shadow-md dark:bg-gray-950`,children:t.isInitialLoad?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,O.jsx)(u,{shouldFilter:!1,children:(0,O.jsx)(l,{className:`max-h-64 overflow-y-auto`,children:(0,O.jsx)(M,{isCreating:o,labels:e,search:m,selectedSlugs:r,onCreate:a,onDelete:c,onEdit:s,onSearchClear:()=>v(``),onToggle:i})})})})]})};function I({selectedSlugs:e,onSelectionChange:t,valueSource:n}){let r=x(),o=n??r,[s,c]=(0,D.useState)(``),l=o.useOptions({query:s,selectedValues:e}),u=(0,D.useMemo)(()=>l.options.flatMap(e=>{let t=e.metadata?.id;return typeof t!=`string`&&typeof t!=`number`?[]:[{id:String(t),name:e.label,slug:String(e.value),created_at:``,updated_at:``}]}),[l.options]),d={...l,shouldClientFilter:!1,onSearchChange:c},{mutateAsync:f}=w(),[p,m]=(0,D.useState)(!1),{mutateAsync:h}=C(),{mutateAsync:g}=E(),_=S(),v=T(),y=a(),b=(0,D.useRef)(e);b.current=e;let O=(0,D.useCallback)(e=>{let n=b.current;n.includes(e)?t(n.filter(t=>t!==e)):t([...n,e])},[t]),k=(0,D.useCallback)(e=>{let n=b.current;n.includes(e)||t([...n,e])},[t]),A=(0,D.useCallback)(async e=>{let t=e.trim();if(t){m(!0);try{let e=(await f({name:t}))?.labels?.[0];return e&&k(e.slug),e}catch(e){if(e instanceof i&&e.response?.status===422){let e;try{e=await _(t)}catch{}if(e)return v(),k(e.slug),e}throw y(e),e}finally{m(!1)}}},[f,_,y,v,k]),j=(0,D.useCallback)(async(e,n)=>{let r=n.trim();if(!r)return;let i=u.find(t=>t.id===e),a=(await h({id:e,name:r}))?.labels?.[0];if(i&&a&&i.slug!==a.slug){let e=b.current;e.includes(i.slug)&&t(e.map(e=>e===i.slug?a.slug:e))}},[h,u,t]),M=(0,D.useCallback)(async e=>{let n=u.find(t=>t.id===e);try{await g(e)}catch(e){if(e instanceof i&&e.response?.status===404)v();else throw y(e),e}if(n){let e=b.current;e.includes(n.slug)&&t(e.filter(e=>e!==n.slug))}},[g,y,v,u,t]);return{labels:u,optionSource:d,selectedSlugs:e,resolvedSelectedLabels:e.map(e=>u.find(t=>t.slug===e)).filter(e=>!!e),toggleLabel:O,createLabel:A,editLabel:j,deleteLabel:M,isCreating:p}}var L=({field:e,values:t,onChange:n})=>{let r=I({selectedSlugs:t,onSelectionChange:n,valueSource:e.valueSource}),i=(0,D.useRef)(null),[a,o]=(0,D.useState)(0),c=(0,D.useCallback)(()=>{let e=i.current,t=e?.parentElement;if(e&&t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();o(Math.round(r.left-n.left))}},[]),l=`Select...`;r.resolvedSelectedLabels.length===1?l=r.resolvedSelectedLabels[0].name:r.resolvedSelectedLabels.length>1&&(l=`${r.resolvedSelectedLabels.length} labels`);let[u,f]=(0,D.useState)(null),m=(0,D.useCallback)(({option:e,isSelected:t,onSelect:n})=>{let i=e.metadata?.id,a=typeof i==`string`||typeof i==`number`?String(i):``;return u===a&&!t?(0,O.jsx)(k,{label:{id:a,name:e.label,slug:String(e.value),created_at:``,updated_at:``},onCancel:()=>f(null),onDelete:async e=>{await r.deleteLabel(e),f(null)},onSave:async(e,t)=>{await r.editLabel(e,t),f(null)}},a):(0,O.jsxs)(s,{className:`group`,value:e.label,onSelect:n,children:[(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),t?(0,O.jsx)(v,{className:`size-3 shrink-0 text-primary`}):(0,O.jsx)(`button`,{"aria-label":`Edit label ${e.label}`,className:`relative ml-1 flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground`,type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),f(a)},children:(0,O.jsx)(h,{className:`absolute size-3 translate-x-2 opacity-0 transition-all duration-150 ease-out group-hover:translate-x-0 group-hover:opacity-100`})})]},String(e.value))},[u,r]),x=(0,D.useCallback)(({searchInput:e,clearSearch:t})=>A(r.labels,e)?(0,O.jsx)(`div`,{className:`border-t p-1`,children:(0,O.jsxs)(g,{className:`h-8 w-full justify-start gap-2 px-2 text-sm font-normal`,disabled:r.isCreating,variant:`ghost`,onClick:()=>void(async()=>{try{await r.createLabel(e.trim())&&t()}catch{}})(),children:[(0,O.jsx)(p,{className:`size-4`}),r.isCreating?`Creating...`:`Create "${e.trim()}"`]})}):null,[r]);return(0,O.jsxs)(y,{onOpenChange:e=>{e?c():r.optionSource.onSearchChange?.(``)},children:[(0,O.jsx)(b,{asChild:!0,children:(0,O.jsx)(`button`,{ref:i,className:`flex size-full items-center truncate text-left text-sm`,type:`button`,children:l})}),(0,O.jsx)(_,{align:`start`,alignOffset:a,className:`w-64 p-0`,children:r.optionSource.isInitialLoad?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,O.jsx)(d,{footer:x,i18n:{searchPlaceholder:`Search labels...`,noResultsFound:`No labels found`},optionSource:r.optionSource,renderItem:m,values:t,onChange:n})})]})};export{I as n,P as r,L as t};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{S as r,h as i,m as a}from"./hooks-D6EE7BIt.js";import{i as o,o as s,r as c,s as l,t as u}from"./command-BOYMbZa_.js";import{t as d}from"./multi-select-combobox-CsoyHAiX.js";import{$n as f,Da as p,Oi as m,Pa as h,Pr as g,br as _,rs as v,vr as y,xr as b}from"./index-DUXM0NlS.js";import{i as x}from"./filter-sources-CiPLnG9A.js";import{a as S,i as C,n as w,o as T,r as E}from"./labels-DAPjKPy2.js";var D=e(t(),1),O=n(),k=({label:e,onSave:t,onCancel:n,onDelete:i})=>{let[a,o]=(0,D.useState)(e.name),[s,c]=(0,D.useState)(!1),[l,u]=(0,D.useState)(``),[d,f]=(0,D.useState)(!1),[p,m]=(0,D.useState)(!1),h=(0,D.useRef)(null),_=d||p;(0,D.useEffect)(()=>{h.current?.focus(),h.current?.select()},[]);let v=async()=>{if(!a.trim()){u(`Name is required`);return}f(!0);try{await t(e.id,a.trim()),n()}catch(e){u(r(e,`Failed to save label, please try again.`)),f(!1)}},y=e=>{e.key===`Enter`?(e.preventDefault(),v()):e.key===`Escape`&&(e.preventDefault(),_||n())},b=async()=>{m(!0);try{await i(e.id)}catch{m(!1),c(!1)}};return(0,O.jsxs)(`div`,{className:`flex flex-col gap-2 py-1.5`,"data-edit-row":!0,children:[(0,O.jsx)(`input`,{ref:h,className:`h-7 w-full rounded border border-border bg-background px-2 text-sm outline-hidden focus:ring-1 focus:ring-ring disabled:opacity-50`,disabled:_,type:`text`,value:a,onChange:e=>{o(e.target.value),u(``)},onKeyDown:y}),l&&(0,O.jsx)(`span`,{className:`text-xs text-destructive`,children:l}),s?(0,O.jsxs)(`div`,{className:`flex items-center gap-1 text-sm`,children:[(0,O.jsx)(`span`,{className:`flex-1 font-semibold`,children:`Delete label?`}),(0,O.jsx)(g,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,O.jsx)(g,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`destructive`,onClick:()=>void b(),children:p?`Deleting...`:`Delete`})]}):(0,O.jsxs)(`div`,{className:`flex items-center`,children:[(0,O.jsx)(g,{className:`h-6 gap-1 px-1.5 text-xs text-red hover:bg-red/5 hover:text-red`,disabled:_,size:`sm`,variant:`ghost`,onClick:()=>c(!0),children:`Delete`}),(0,O.jsxs)(`div`,{className:`ml-auto flex gap-1`,children:[(0,O.jsx)(g,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:n,children:`Cancel`}),(0,O.jsx)(g,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,onClick:()=>void v(),children:d?`Saving...`:`Save`})]})]})]})};function A(e,t){let n=t.trim().toLowerCase();return n?!e.some(e=>e.name.toLowerCase()===n):!1}var j=({label:e,isSelected:t,showEdit:n,onToggle:r,onEditClick:i})=>(0,O.jsxs)(s,{className:`group`,value:e.slug,onSelect:()=>r(e.slug),children:[(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.name}),n?(0,O.jsxs)(`button`,{"aria-label":`Edit label ${e.name}`,className:`relative ml-1 flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground`,type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),i()},children:[t&&(0,O.jsx)(v,{className:`absolute size-3 text-primary transition-opacity duration-150 group-hover:opacity-0`}),(0,O.jsx)(h,{className:`absolute size-3 translate-x-2 opacity-0 transition-all duration-150 ease-out group-hover:translate-x-0 group-hover:opacity-100`})]}):t&&(0,O.jsx)(v,{className:`size-4 shrink-0 text-primary`})]}),M=({labels:e,selectedSlugs:t,search:n,onToggle:r,onEdit:i,onDelete:a,onCreate:l,isCreating:u,onSearchClear:d})=>{let[f,m]=(0,D.useState)(null),h=n.trim().toLowerCase(),g=h?e.filter(e=>e.name.toLowerCase().includes(h)):e,_=!!l&&A(e,n),v=!!i,y=async()=>{if(l)try{await l(n.trim())&&d?.()}catch{}},b=async(e,t)=>{i&&await i(e,t)},x=async e=>{a&&(await a(e),m(null))};return(0,O.jsxs)(O.Fragment,{children:[!_&&g.length===0&&(0,O.jsx)(c,{children:`No labels found`}),g.length>0&&(0,O.jsx)(o,{className:`[&_[cmdk-group-heading]]:hidden`,children:g.map(e=>f===e.id?(0,O.jsx)(k,{label:e,onCancel:()=>m(null),onDelete:x,onSave:b},e.id):(0,O.jsx)(j,{isSelected:t.includes(e.slug),label:e,showEdit:v,onEditClick:()=>m(e.id),onToggle:r},e.id))}),_&&(0,O.jsx)(o,{className:`[&_[cmdk-group-heading]]:hidden`,children:(0,O.jsxs)(s,{disabled:u,onSelect:()=>void y(),children:[(0,O.jsx)(p,{className:`size-4`}),u?`Creating...`:`Create "${n.trim()}"`]})})]})},N=({labels:e,onToggle:t})=>(0,O.jsx)(O.Fragment,{children:e.map(e=>(0,O.jsxs)(f,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:n=>{n.stopPropagation(),t(e.slug)},children:[e.name,(0,O.jsx)(m,{className:`size-3`})]},e.id))}),P=({labels:e,optionSource:t,selectedSlugs:n,resolvedSelectedLabels:r,onToggle:i,onCreate:a,isCreating:o,onEdit:s,onDelete:c,placeholder:l})=>{let u=r||n.map(t=>e.find(e=>e.slug===t)).filter(e=>!!e);return(0,O.jsx)(F,{isCreating:o,labels:e,optionSource:t,placeholder:l,selectedLabels:u,selectedSlugs:n,onCreate:a,onDelete:c,onEdit:s,onToggle:i})},F=({labels:e,optionSource:t,selectedLabels:n,selectedSlugs:r,onToggle:i,onCreate:a,isCreating:o,onEdit:s,onDelete:c,placeholder:d=`Search labels...`})=>{let[f,p]=(0,D.useState)(!1),[m,h]=(0,D.useState)(``),g=(0,D.useRef)(null),_=(0,D.useRef)(null),v=(0,D.useCallback)(e=>{h(e),t.onSearchChange?.(e)},[t]);return(0,D.useEffect)(()=>{if(!f)return;let e=e=>{_.current&&!_.current.contains(e.target)&&p(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[f]),(0,O.jsxs)(`div`,{ref:_,className:`relative`,children:[(0,O.jsxs)(`div`,{className:`flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-md border border-control-border bg-surface-elevated px-3 py-1 text-control transition-colors focus-within:border-focus-ring focus-within:ring-2 focus-within:ring-focus-ring/25 dark:bg-transparent`,role:`combobox`,onClick:()=>{g.current?.focus(),p(!0)},children:[(0,O.jsx)(N,{labels:n,onToggle:i}),(0,O.jsx)(`input`,{ref:g,className:`min-w-[80px] flex-1 bg-transparent text-control outline-hidden placeholder:text-muted-foreground`,placeholder:n.length===0?d:``,value:m,onChange:e=>{v(e.target.value),f||p(!0)},onFocus:()=>p(!0),onKeyDown:e=>{e.key===`Backspace`&&!m&&r.length>0&&i(r[r.length-1]),e.key===`Escape`&&(p(!1),g.current?.blur())}})]}),f&&(0,O.jsx)(`div`,{className:`absolute top-full left-0 z-50 mt-1 w-full rounded-md border bg-white shadow-md dark:bg-gray-950`,children:t.isInitialLoad?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,O.jsx)(u,{shouldFilter:!1,children:(0,O.jsx)(l,{className:`max-h-64 overflow-y-auto`,children:(0,O.jsx)(M,{isCreating:o,labels:e,search:m,selectedSlugs:r,onCreate:a,onDelete:c,onEdit:s,onSearchClear:()=>v(``),onToggle:i})})})})]})};function I({selectedSlugs:e,onSelectionChange:t,valueSource:n}){let r=x(),o=n??r,[s,c]=(0,D.useState)(``),l=o.useOptions({query:s,selectedValues:e}),u=(0,D.useMemo)(()=>l.options.flatMap(e=>{let t=e.metadata?.id;return typeof t!=`string`&&typeof t!=`number`?[]:[{id:String(t),name:e.label,slug:String(e.value),created_at:``,updated_at:``}]}),[l.options]),d={...l,shouldClientFilter:!1,onSearchChange:c},{mutateAsync:f}=w(),[p,m]=(0,D.useState)(!1),{mutateAsync:h}=C(),{mutateAsync:g}=E(),_=S(),v=T(),y=a(),b=(0,D.useRef)(e);b.current=e;let O=(0,D.useCallback)(e=>{let n=b.current;n.includes(e)?t(n.filter(t=>t!==e)):t([...n,e])},[t]),k=(0,D.useCallback)(e=>{let n=b.current;n.includes(e)||t([...n,e])},[t]),A=(0,D.useCallback)(async e=>{let t=e.trim();if(t){m(!0);try{let e=(await f({name:t}))?.labels?.[0];return e&&k(e.slug),e}catch(e){if(e instanceof i&&e.response?.status===422){let e;try{e=await _(t)}catch{}if(e)return v(),k(e.slug),e}throw y(e),e}finally{m(!1)}}},[f,_,y,v,k]),j=(0,D.useCallback)(async(e,n)=>{let r=n.trim();if(!r)return;let i=u.find(t=>t.id===e),a=(await h({id:e,name:r}))?.labels?.[0];if(i&&a&&i.slug!==a.slug){let e=b.current;e.includes(i.slug)&&t(e.map(e=>e===i.slug?a.slug:e))}},[h,u,t]),M=(0,D.useCallback)(async e=>{let n=u.find(t=>t.id===e);try{await g(e)}catch(e){if(e instanceof i&&e.response?.status===404)v();else throw y(e),e}if(n){let e=b.current;e.includes(n.slug)&&t(e.filter(e=>e!==n.slug))}},[g,y,v,u,t]);return{labels:u,optionSource:d,selectedSlugs:e,resolvedSelectedLabels:e.map(e=>u.find(t=>t.slug===e)).filter(e=>!!e),toggleLabel:O,createLabel:A,editLabel:j,deleteLabel:M,isCreating:p}}var L=({field:e,values:t,onChange:n})=>{let r=I({selectedSlugs:t,onSelectionChange:n,valueSource:e.valueSource}),i=(0,D.useRef)(null),[a,o]=(0,D.useState)(0),c=(0,D.useCallback)(()=>{let e=i.current,t=e?.parentElement;if(e&&t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();o(Math.round(r.left-n.left))}},[]),l=`Select...`;r.resolvedSelectedLabels.length===1?l=r.resolvedSelectedLabels[0].name:r.resolvedSelectedLabels.length>1&&(l=`${r.resolvedSelectedLabels.length} labels`);let[u,f]=(0,D.useState)(null),m=(0,D.useCallback)(({option:e,isSelected:t,onSelect:n})=>{let i=e.metadata?.id,a=typeof i==`string`||typeof i==`number`?String(i):``;return u===a&&!t?(0,O.jsx)(k,{label:{id:a,name:e.label,slug:String(e.value),created_at:``,updated_at:``},onCancel:()=>f(null),onDelete:async e=>{await r.deleteLabel(e),f(null)},onSave:async(e,t)=>{await r.editLabel(e,t),f(null)}},a):(0,O.jsxs)(s,{className:`group`,value:e.label,onSelect:n,children:[(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),t?(0,O.jsx)(v,{className:`size-3 shrink-0 text-primary`}):(0,O.jsx)(`button`,{"aria-label":`Edit label ${e.label}`,className:`relative ml-1 flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground`,type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),f(a)},children:(0,O.jsx)(h,{className:`absolute size-3 translate-x-2 opacity-0 transition-all duration-150 ease-out group-hover:translate-x-0 group-hover:opacity-100`})})]},String(e.value))},[u,r]),x=(0,D.useCallback)(({searchInput:e,clearSearch:t})=>A(r.labels,e)?(0,O.jsx)(`div`,{className:`border-t p-1`,children:(0,O.jsxs)(g,{className:`h-8 w-full justify-start gap-2 px-2 text-sm font-normal`,disabled:r.isCreating,variant:`ghost`,onClick:()=>void(async()=>{try{await r.createLabel(e.trim())&&t()}catch{}})(),children:[(0,O.jsx)(p,{className:`size-4`}),r.isCreating?`Creating...`:`Create "${e.trim()}"`]})}):null,[r]);return(0,O.jsxs)(y,{onOpenChange:e=>{e?c():r.optionSource.onSearchChange?.(``)},children:[(0,O.jsx)(b,{asChild:!0,children:(0,O.jsx)(`button`,{ref:i,className:`flex size-full items-center truncate text-left text-sm`,type:`button`,children:l})}),(0,O.jsx)(_,{align:`start`,alignOffset:a,className:`w-64 p-0`,children:r.optionSource.isInitialLoad?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,O.jsx)(d,{footer:x,i18n:{searchPlaceholder:`Search labels...`,noResultsFound:`No labels found`},optionSource:r.optionSource,renderItem:m,values:t,onChange:n})})]})};export{I as n,P as r,L as t};
@@ -0,0 +1 @@
1
+ import"./index-DUXM0NlS.js";
@@ -1 +1 @@
1
- import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{s as n}from"./use-settings-navigation-Bf1g1rEh.js";import{t as r}from"./confirmation-modal-B6D6mk6R.js";e();var i=t(),a=n.create(({title:e=`Upgrade your plan`,prompt:t,okLabel:n=`Upgrade`,formSheet:a=!1,onOk:o})=>(0,i.jsx)(r,{formSheet:a,okLabel:n,prompt:(0,i.jsx)(`div`,{className:`w-full`,children:typeof t==`string`&&t.includes(`<`)?(0,i.jsx)(`div`,{dangerouslySetInnerHTML:{__html:t}}):t}),testId:`limit-modal`,title:e,onOk:o}));export{a as t};
1
+ import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{s as n}from"./use-settings-navigation-BmROPrls.js";import{t as r}from"./confirmation-modal-CYD7x3UQ.js";e();var i=t(),a=n.create(({title:e=`Upgrade your plan`,prompt:t,okLabel:n=`Upgrade`,formSheet:a=!1,onOk:o})=>(0,i.jsx)(r,{formSheet:a,okLabel:n,prompt:(0,i.jsx)(`div`,{className:`w-full`,children:typeof t==`string`&&t.includes(`<`)?(0,i.jsx)(`div`,{dangerouslySetInnerHTML:{__html:t}}):t}),testId:`limit-modal`,title:e,onOk:o}));export{a as t};
@@ -1 +1 @@
1
- import{i as e,n as t,r as n}from"./hooks-D6EE7BIt.js";import{_n as r,dn as i,gn as a,ln as o,un as s,vn as c}from"./index-BHy2DZX-.js";var l=[`short_text`,`long_text`,`address`];s(l);var u=65535,d=e=>new TextEncoder().encode(e).length,f=()=>r({error:`Enter text.`}).trim(),p=()=>f().max(255,{error:`Use 255 characters or fewer.`}),m=()=>f().refine(e=>d(e)<=u,{error:`This text is too long to save. Shorten it a little.`}),h=()=>f().max(32,{error:`Use 32 characters or fewer.`}),g=()=>f().regex(/^[A-Za-z]{2}$/,{error:`Enter a 2-letter country code, like US.`}).toUpperCase(),_=e=>f().pipe(c([i(``),e])).optional();function v(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t instanceof o?{value:t}:t]))}function y(e,{error:t}){return{value:a(Object.fromEntries(Object.entries(e).map(([e,t])=>[e,_(t)]))).refine(e=>Object.values(e).some(e=>typeof e==`string`),{error:t}),fields:e}}var b=v({short_text:p(),long_text:m(),address:y({line1:p(),line2:p(),city:p(),state:p(),postal_code:h(),country:g()},{error:`Enter at least one part of the address.`})});b.address.value;function x(e){let{fields:t}=b[e];return t?Object.keys(t):null}var S=`.`,C=`custom_fields`;function w(e){let t=`${C}${S}${e.key}`,n=x(e.type);return n?n.map(e=>`${t}${S}${e}`):[t]}function T(e){return e===C||e.startsWith(`${C}${S}`)}var E={short_text:{label:`Short text`,input:`text`},long_text:{label:`Long text`,input:`textarea`},address:{label:`Address`,input:`address`,subFields:{line1:`Address line 1`,line2:`Address line 2`,city:`City`,state:`State`,postal_code:`Postal code`,country:`Country`}}},D=l.map(e=>({id:e,...E[e]})),O=e=>D.find(t=>t.id===e)||D[0],k=e=>O(e.type),A=e=>e.flatMap(e=>{let t=w({key:e.key,type:e.type});return t.map(n=>{if(t.length===1)return{label:e.name,value:n};let r=n.slice(n.lastIndexOf(`.`)+1),i=O(e.type).subFields?.[r]??r;return{label:`${e.name} (${i})`,value:n}})}),j=`MemberCustomFieldsResponseType`,M=n({dataType:j,path:`/members/custom_fields/`}),N=e=>M({...e,searchParams:{filter:`status:[active,archived]`}});e({dataType:j,path:e=>`/members/custom_fields/${e}/`});var P=t({method:`POST`,path:()=>`/members/custom_fields/`,body:e=>({members_custom_fields:[e]}),invalidateQueries:{dataType:j}}),F=t({method:`PUT`,path:e=>`/members/custom_fields/${e.key}/`,body:({key:e,...t})=>({members_custom_fields:[t]}),invalidateQueries:{dataType:j}}),I=t({method:`DELETE`,path:e=>`/members/custom_fields/${e}/`,invalidateQueries:{dataType:j}});export{P as a,k as c,b as d,N as i,O as l,D as n,I as o,M as r,F as s,A as t,T as u};
1
+ import{i as e,n as t,r as n}from"./hooks-D6EE7BIt.js";import{_n as r,dn as i,gn as a,ln as o,un as s,vn as c}from"./index-DUXM0NlS.js";var l=[`short_text`,`long_text`,`address`];s(l);var u=65535,d=e=>new TextEncoder().encode(e).length,f=()=>r({error:`Enter text.`}).trim(),p=()=>f().max(255,{error:`Use 255 characters or fewer.`}),m=()=>f().refine(e=>d(e)<=u,{error:`This text is too long to save. Shorten it a little.`}),h=()=>f().max(32,{error:`Use 32 characters or fewer.`}),g=()=>f().regex(/^[A-Za-z]{2}$/,{error:`Enter a 2-letter country code, like US.`}).toUpperCase(),_=e=>f().pipe(c([i(``),e])).optional();function v(e){return Object.fromEntries(Object.entries(e).map(([e,t])=>[e,t instanceof o?{value:t}:t]))}function y(e,{error:t}){return{value:a(Object.fromEntries(Object.entries(e).map(([e,t])=>[e,_(t)]))).refine(e=>Object.values(e).some(e=>typeof e==`string`),{error:t}),fields:e}}var b=v({short_text:p(),long_text:m(),address:y({line1:p(),line2:p(),city:p(),state:p(),postal_code:h(),country:g()},{error:`Enter at least one part of the address.`})});b.address.value;function x(e){let{fields:t}=b[e];return t?Object.keys(t):null}var S=`.`,C=`custom_fields`;function w(e){let t=`${C}${S}${e.key}`,n=x(e.type);return n?n.map(e=>`${t}${S}${e}`):[t]}function T(e){return e===C||e.startsWith(`${C}${S}`)}var E={short_text:{label:`Short text`,input:`text`},long_text:{label:`Long text`,input:`textarea`},address:{label:`Address`,input:`address`,subFields:{line1:`Address line 1`,line2:`Address line 2`,city:`City`,state:`State`,postal_code:`Postal code`,country:`Country`}}},D=l.map(e=>({id:e,...E[e]})),O=e=>D.find(t=>t.id===e)||D[0],k=e=>O(e.type),A=e=>e.flatMap(e=>{let t=w({key:e.key,type:e.type});return t.map(n=>{if(t.length===1)return{label:e.name,value:n};let r=n.slice(n.lastIndexOf(`.`)+1),i=O(e.type).subFields?.[r]??r;return{label:`${e.name} (${i})`,value:n}})}),j=`MemberCustomFieldsResponseType`,M=n({dataType:j,path:`/members/custom_fields/`}),N=e=>M({...e,searchParams:{filter:`status:[active,archived]`}});e({dataType:j,path:e=>`/members/custom_fields/${e}/`});var P=t({method:`POST`,path:()=>`/members/custom_fields/`,body:e=>({members_custom_fields:[e]}),invalidateQueries:{dataType:j}}),F=t({method:`PUT`,path:e=>`/members/custom_fields/${e.key}/`,body:({key:e,...t})=>({members_custom_fields:[t]}),invalidateQueries:{dataType:j}}),I=t({method:`DELETE`,path:e=>`/members/custom_fields/${e}/`,invalidateQueries:{dataType:j}});export{P as a,k as c,b as d,N as i,O as l,D as n,I as o,M as r,F as s,A as t,T as u};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{o as r}from"./framework-provider-CmtnPXIT.js";import{o as i}from"./hooks-D6EE7BIt.js";import{n as a}from"./dist-Ndy-PuGN.js";import{n as o,t as s}from"./dist-DMFGvqqU.js";import{t as c}from"./currency-CQsJu8iC.js";import{c as l,l as u,m as d,t as f}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as p}from"./router-provider-DSQfprxH.js";import{c as m,v as h}from"./dist-Cb5RSHSg.js";import{t as g}from"./box-By_EgGtm.js";import{t as _}from"./container-LiZf3XdY.js";import{t as v}from"./switch-CE2NuMn-.js";import{i as ee,n as y,o as b,s as te,t as x}from"./select-D9oU1IoM.js";import{a as ne,i as re,n as ie,o as ae,r as oe,t as se}from"./breadcrumb-tg5zL--z.js";import{n as S,t as C}from"./card-aUHX0hyR.js";import{t as ce}from"./empty-indicator-WB1WgT9h.js";import{t as w}from"./label-Dq6QaOuS.js";import{n as le,o as ue,t as T}from"./input-group-6vEPvX9S.js";import{t as de}from"./textarea-d9qEkMOP.js";import{i as fe}from"./users-B6hIds6n.js";import{$a as E,$n as pe,$r as D,A as me,Ba as O,Bo as k,Co as A,D as j,Da as M,Dn as N,Dr as P,Er as F,F as I,Fa as he,I as ge,Ka as _e,Lo as L,N as ve,O as ye,Or as R,Os as be,P as xe,Po as z,Pr as B,Qi as Se,Ri as V,S as Ce,So as we,Sr as H,Tr as U,Ur as Te,Wa as W,Yo as Ee,Yr as De,Za as Oe,Zi as ke,Zr as Ae,ai as je,ao as Me,ar as G,b as Ne,cr as K,dr as Pe,eo as Fe,fr as Ie,ga as Le,gr as Re,hr as ze,io as Be,j as Ve,jn as He,jo as Ue,k as We,lr as Ge,m as Ke,mr as qe,no as Je,ns as Ye,or as Xe,pr as Ze,ri as Qe,ro as $e,to as et,tr as tt,wr as q,xs as nt,y as rt}from"./index-BHy2DZX-.js";import{t as it}from"./page-header-CpmxJj5B.js";import{a as at}from"./tiers-Da6kxHQP.js";import{r as ot}from"./newsletters-Du0lzskS.js";import{n as J,t as st}from"./use-hash-link-navigation-guard-B9j6HIrV.js";import{c as ct,d as lt,l as ut,r as dt}from"./member-custom-fields-CmvsuuV_.js";import{n as ft,r as pt}from"./label-picker-8YlhS2U3.js";var Y=e(t(),1),mt=new Set([`active`,`trialing`,`unpaid`,`past_due`]);function ht(e){return(e.subscriptions??[]).some(e=>mt.has(e.status))}function gt(e){return e?`Delete member + Cancel subscription`:`Delete member`}var X=n(),_t=({open:e,onOpenChange:t,member:n,allowLeaveWithUnsavedChanges:r})=>{let i=p(),o=j(),[s,c]=Y.useState(!1);Y.useEffect(()=>{e&&c(!1)},[e]);let l=ht(n),u=n.email||n.name||`this member`,d=async()=>{try{let e=l&&s;await o.mutateAsync({id:n.id,cancel:e}),a.success(e?`${u} was deleted and their Stripe subscription was cancelled.`:`${u} was deleted.`),t(!1),r(),i(`/members`)}catch{a.error(`Couldn’t delete the member. Please try again.`)}};return(0,X.jsx)(H,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,X.jsxs)(q,{"data-testid":`delete-member-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(R,{children:`Delete member account`}),(0,X.jsxs)(U,{children:[`Permanently delete `,(0,X.jsx)(`strong`,{children:u}),` from Ghost.`]})]}),l&&(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium`,children:`Also cancel subscription in Stripe`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If disabled, the member’s premium subscription will continue`})]}),(0,X.jsx)(v,{"aria-label":`Also cancel subscription in Stripe`,checked:s,"data-testid":`delete-member-cancel-stripe`,disabled:o.isPending,onCheckedChange:c})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{"data-testid":`cancel-delete-member`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(B,{"data-testid":`confirm-delete-member`,disabled:o.isPending,variant:`destructive`,onClick:()=>void d(),children:o.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Deleting`})]}):gt(s&&l)})]})]})})},vt=`Disabled from member settings`,yt=({open:e,onOpenChange:t,member:n})=>{let i=r(),o=ye(),[s,c]=Y.useState(!1);Y.useEffect(()=>{e&&c(!1)},[e]);let l=n.name||n.email||`this member`,u=async()=>{try{await o.mutateAsync({id:n.id,reason:vt,hideComments:s})}catch{a.error(`Couldn’t disable commenting. Please try again.`);return}a.success(`Commenting has been disabled for ${l}.`),t(!1),i.invalidateQueries({queryKey:[`MembersResponseType`]})};return(0,X.jsx)(H,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,X.jsxs)(q,{"data-testid":`disable-commenting-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(R,{children:`Disable commenting`}),(0,X.jsxs)(U,{children:[(0,X.jsx)(`strong`,{children:l}),` won’t be able to comment in the future. You can re-enable commenting anytime.`]})]}),(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:(0,X.jsx)(`h4`,{className:`text-sm font-medium`,children:`Hide all previous comments`})}),(0,X.jsx)(v,{"aria-label":`Hide all previous comments`,checked:s,"data-testid":`disable-commenting-hide-comments`,disabled:o.isPending,onCheckedChange:c})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{"data-testid":`cancel-disable-commenting`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(B,{"data-testid":`confirm-disable-commenting`,disabled:o.isPending,onClick:()=>void u(),children:o.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Disabling`})]}):`Disable commenting`})]})]})})},bt=({open:e,onOpenChange:t,memberId:n})=>{let i=r();Y.useEffect(()=>{e&&i.removeQueries({queryKey:[`MemberSigninUrlResponseType`]})},[e,i]);let{data:o,isFetching:s,isError:c}=Ne(n,{enabled:e,defaultErrorHandler:!1}),l=o?.url??``,u=c||!s&&!c&&!l,[d,f]=Y.useState(!1),p=Y.useRef(null),m=Y.useCallback(()=>{p.current!==null&&(clearTimeout(p.current),p.current=null)},[]);Y.useEffect(()=>{e||(m(),f(!1))},[e,m]),Y.useEffect(()=>m,[m]);let h=async()=>{try{await navigator.clipboard.writeText(l),f(!0),m(),p.current=setTimeout(()=>{f(!1),p.current=null},1e3)}catch{a.error(`Couldn’t copy the impersonation link`)}};return(0,X.jsx)(H,{open:e,onOpenChange:t,children:(0,X.jsxs)(q,{"data-testid":`impersonate-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(R,{children:`Impersonate member`}),(0,X.jsx)(U,{children:`A single-use signin link that works for 24 hours. Anyone with the link can sign in as this member.`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`member-signin-url`,children:`Signin link`}),(0,X.jsx)(K,{"data-testid":`member-signin-url`,id:`member-signin-url`,value:s?`Generating link…`:u?`Failed to generate link`:l,readOnly:!0})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{variant:`outline`,onClick:()=>t(!1),children:`Close`}),(0,X.jsx)(B,{disabled:s||u||!l,onClick:()=>void h(),children:s?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Generating link`})]}):d?`Copied`:`Copy link`})]})]})})},xt=({open:e,onOpenChange:t,member:n})=>{let r=xe(),i=n.name||n.email||`This member`,o=async()=>{try{await r.mutateAsync({id:n.id}),a.success(`${i} has been signed out from all devices.`),t(!1)}catch{a.error(`Couldn’t sign the member out. Please try again.`)}};return(0,X.jsx)(Ge,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(Ie,{"data-testid":`logout-member-modal`,children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(Re,{children:`Sign out member from all devices?`}),(0,X.jsxs)(Ze,{children:[(0,X.jsx)(`strong`,{children:i}),` will be signed out of all active sessions, and will need to sign in again upon return.`]})]}),(0,X.jsxs)(qe,{children:[(0,X.jsx)(Pe,{disabled:r.isPending,children:`Cancel`}),(0,X.jsx)(B,{"data-testid":`confirm-logout-member`,disabled:r.isPending,variant:`destructive`,onClick:()=>void o(),children:r.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Signing out`})]}):`Sign out`})]})]})})};function St(e){return e.can_comment===!1}function Ct(e){return St(e)?`Enable commenting`:`Disable commenting`}var wt=({member:e,allowLeaveWithUnsavedChanges:t})=>{let n=r(),{data:o}=i(),[s,c]=Y.useState(!1),[l,u]=Y.useState(!1),[d,f]=Y.useState(!1),[p,m]=Y.useState(!1),h=Ve(),g=I(),_=h.isPending||h.isSuccess&&g,v=St(e),ee=Ct(e),y=e.name||e.email||`this member`;if(!o||!fe(o))return null;let b=async()=>{if(!v){f(!0);return}try{await h.mutateAsync({id:e.id}),a.success(`Commenting has been enabled for ${y}.`)}catch{a.error(`Couldn’t enable commenting. Please try again.`);return}n.invalidateQueries({queryKey:[`MembersResponseType`]})};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(De,{children:[(0,X.jsx)(je,{asChild:!0,children:(0,X.jsx)(B,{"aria-label":`Actions`,className:`size-(--control-height)`,"data-testid":`member-actions`,size:`icon`,variant:`outline`,children:(0,X.jsx)(L,{size:16})})}),(0,X.jsxs)(Ae,{align:`end`,children:[(0,X.jsx)(D,{"data-testid":`member-actions-impersonate`,onSelect:()=>c(!0),children:`Impersonate`}),(0,X.jsx)(D,{"data-testid":`member-actions-logout`,onSelect:()=>u(!0),children:`Sign out of all devices`}),(0,X.jsx)(D,{"data-testid":`member-actions-commenting`,disabled:_,onSelect:()=>void b(),children:ee}),(0,X.jsx)(Qe,{}),(0,X.jsx)(D,{className:`text-destructive focus:text-destructive`,"data-testid":`member-actions-delete`,onSelect:()=>m(!0),children:`Delete member`})]})]}),(0,X.jsx)(bt,{memberId:e.id,open:s,onOpenChange:c}),(0,X.jsx)(xt,{member:e,open:l,onOpenChange:u}),(0,X.jsx)(yt,{member:e,open:d,onOpenChange:f}),(0,X.jsx)(_t,{allowLeaveWithUnsavedChanges:t,member:e,open:p,onOpenChange:m})]})},Z=e(h(),1);function Tt(e){return e?/^(https?:\/\/|\/|#\/)/i.test(e):!1}var Et=new Set([`bif`,`clp`,`djf`,`gnf`,`jpy`,`kmf`,`krw`,`mga`,`pyg`,`rwf`,`ugx`,`vnd`,`vuv`,`xaf`,`xof`,`xpf`]);function Dt(e,t){let n=Et.has(t.toLowerCase())?e:e/100,r=n%1==0;try{return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:t.toUpperCase(),minimumFractionDigits:r?0:2,maximumFractionDigits:r?0:2}).format(n)}catch{return`${n}`}}function Ot(e){return e?.trim()||null}function kt(e){let t;return e.type===`login_event`&&(t=`logged-in`),e.type===`payment_event`&&(t=`subscriptions`),e.type===`newsletter_event`&&(t=e.data.subscribed?`subscribed-to-email`:`unsubscribed-from-email`),e.type===`subscription_event`&&(t=`subscriptions`,e.data.type===`canceled`&&(t=`canceled-subscription`)),(e.type===`signup_event`||e.type===`subscription_event`&&e.data.type===`created`&&e.data.signup)&&(t=`signed-up`),e.type===`email_opened_event`&&(t=`opened-email`),(e.type===`email_sent_event`||e.type===`automated_email_sent_event`)&&(t=`sent-email`),e.type===`email_delivered_event`&&(t=`received-email`),e.type===`email_failed_event`&&(t=`email-delivery-failed`),e.type===`email_complaint_event`&&(t=`email-delivery-spam`),e.type===`comment_event`&&(t=`comment`),(e.type===`click_event`||e.type===`aggregated_click_event`)&&(t=`click`),e.type===`feedback_event`&&(t=e.data.score===1?`more-like-this`:`less-like-this`),e.type===`donation_event`&&(t=`subscriptions`),(e.type===`gift_purchase_event`||e.type===`gift_redemption_event`||e.type===`gift_ended_event`)&&(t=`gift`),e.type===`email_change_event`&&(t=`email-changed`),`event-${t}`}function At(e,t){if(e.type===`signup_event`||e.type===`subscription_event`&&e.data.type===`created`&&e.data.signup)return`signed up`;if(e.type===`login_event`)return`logged in`;if(e.type===`payment_event`)return`made payment`;if(e.type===`newsletter_event`){let n=e.data.newsletter,r=t&&n?.name?n.name:`newsletter`;return e.data.subscribed?`subscribed to ${r}`:`unsubscribed from ${r}`}if(e.type===`subscription_event`){let t=e.data.type;return t===`created`?`started paid subscription`:t===`canceled`?`canceled paid subscription`:t===`reactivated`?`reactivated paid subscription`:t===`expired`?`ended paid subscription`:`changed paid subscription`}if(e.type===`email_opened_event`)return`opened email`;if(e.type===`email_sent_event`)return`sent email`;if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source!==`automation_action_revision`)return`received welcome email (${(t?.slug||``).includes(`paid`)?`Paid`:`Free`})`;let n=Ot(t.subject);return n?`received automated email: ${n}`:`received automated email`}if(e.type===`email_delivered_event`)return`received email`;if(e.type===`email_failed_event`)return`bounced email`;if(e.type===`email_complaint_event`)return`email flagged as spam`;if(e.type===`comment_event`)return e.data.parent?`replied to comment`:`commented`;if(e.type===`click_event`)return`clicked link in email`;if(e.type===`aggregated_click_event`){let t=e.data.count?.clicks??1;return t<=1?`clicked link in email`:`clicked ${t} links in email`}if(e.type===`feedback_event`)return e.data.score===1?`more like this`:`less like this`;if(e.type===`email_change_event`)return e.data.from_email&&e.data.to_email?`Email address changed from ${e.data.from_email} to ${e.data.to_email}`:`Email address changed`;if(e.type===`donation_event`)return`Made a one-time payment`;if(e.type===`gift_purchase_event`){let t=e.data.amount,n=e.data.currency,r=e.data.tier_name,i=e.data.duration,a=e.data.cadence;return typeof t==`number`&&n&&r&&typeof i==`number`&&a?`Purchased gift subscription for ${Dt(t,n)} (${r}, ${i} ${i===1?a:`${a}s`})`:`Purchased gift subscription`}if(e.type===`gift_redemption_event`)return`started gift subscription`;if(e.type===`gift_ended_event`)return`gift subscription expired`}function jt(e,t){if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source===`automation_action_revision`){let e=Ot(t.subject);return e?`received automated email: ${e}`:`received automated email`}}return At(e,t)}function Mt(e){if(e.type===`signup_event`||e.type===`subscription_event`||e.type===`donation_event`){let t=e.data.attribution;if(t?.title)return t.title}if(e.type===`comment_event`||e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.title)return t.title}return``}function Nt(e){let t=e.data.attribution;return t?.referrer_source?{name:t.referrer_source,url:t.referrer_url??null}:null}function Pt(e,t){if(e.type===`signup_event`&&t.paidMembersEnabled){let t=e.data.created_with_status;return t&&t!==`free`?null:`Free`}if(e.type===`gift_redemption_event`)return e.data.tier_name??void 0}function Ft(e){if(e.type===`click_event`)return e.data.link?.to}function It(e){if(e.type===`comment_event`||e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.url)return t.url}if(e.type===`signup_event`||e.type===`subscription_event`||e.type===`donation_event`){let t=e.data.attribution;if(t?.url)return t.url}}function Lt(e){if(e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.id)return`#/posts/analytics/${t.id}`}if((e.type===`signup_event`||e.type===`subscription_event`)&&e.data.attribution_type===`post`&&e.data.attribution_id)return`#/posts/analytics/${e.data.attribution_id}`}function Rt(e,t){let n=Ot(e.data.member?.name),r=e.data.member?n||e.data.member.email||``:e.data.name||e.data.email||``,i=e.data.member?{...e.data.member,name:n??void 0}:e.data.member;return{id:e.data.id,memberId:e.data.member_id??e.data.member?.id,member:i,emailId:e.data.email_id,email:e.data.email,icon:kt(e),subject:r,action:At(e,t.hasMultipleNewsletters),actionTitle:jt(e,t.hasMultipleNewsletters),join:`–`,object:Mt(e),source:Nt(e),info:Pt(e,t),description:Ft(e),url:It(e),route:Lt(e),timestamp:e.data.created_at}}var zt=({iconName:e})=>{let t={className:`shrink-0 text-muted-foreground`,size:16};switch(e){case`event-signed-up`:return(0,X.jsx)(V,{...t});case`event-logged-in`:return(0,X.jsx)(Me,{...t});case`event-subscriptions`:return(0,X.jsx)(k,{...t});case`event-canceled-subscription`:return(0,X.jsx)(Ee,{...t});case`event-subscribed-to-email`:return(0,X.jsx)(Je,{...t});case`event-unsubscribed-from-email`:return(0,X.jsx)(Be,{...t});case`event-opened-email`:return(0,X.jsx)($e,{...t});case`event-received-email`:return(0,X.jsx)(E,{...t});case`event-sent-email`:return(0,X.jsx)(Le,{...t});case`event-email-delivery-failed`:return(0,X.jsx)(Fe,{...t});case`event-email-delivery-spam`:return(0,X.jsx)(et,{...t});case`event-email-changed`:return(0,X.jsx)(nt,{...t});case`event-comment`:return(0,X.jsx)(W,{...t});case`event-click`:return(0,X.jsx)(O,{...t});case`event-more-like-this`:return(0,X.jsx)(ke,{...t});case`event-less-like-this`:return(0,X.jsx)(Se,{...t});case`event-gift`:return(0,X.jsx)(A,{...t});default:return(0,X.jsx)(be,{...t})}},Bt=({memberId:e})=>(0,X.jsx)(`a`,{className:`block pt-3 font-medium text-primary hover:underline`,"data-testid":`member-activity-view-all`,href:`#/members-activity?member=${e}`,children:`View all member activity →`}),Vt=`All events related to this member will be shown here.`,Ht=e=>e?e.charAt(0).toUpperCase()+e.slice(1):``;function Ut(e){if(e&&typeof e==`object`){let t=e.subject;return t?`“${t}”`:`Email`}}var Wt=({event:e})=>{if(!e.action)return null;let t=Ut(e.email),n=e.object&&(e.route||Tt(e.url)),r=!n&&t,i=e.timestamp?(0,Z.default)(e.timestamp).fromNow():`—`;return(0,X.jsxs)(`div`,{className:`flex items-start gap-3 py-3`,"data-testid":`member-activity-event`,children:[(0,X.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-muted`,children:(0,X.jsx)(zt,{iconName:e.icon})}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:[(0,X.jsxs)(`div`,{className:`text-sm leading-snug`,children:[(0,X.jsx)(`span`,{"data-testid":`member-activity-action`,children:Ht(e.action)}),e.info&&(0,X.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,e.info,`)`]}),n&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),e.route?(0,X.jsx)(`a`,{className:`hover:underline`,href:e.route,children:e.object}):(0,X.jsx)(`a`,{className:`hover:underline`,href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:e.object})]}),r&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:t})]})]}),e.description&&(0,X.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.description}),(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i})]})]})},Gt=({memberId:e,hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})=>{let{data:i,isLoading:a}=ve(e??``,{limit:`5`,enabled:!!e}),o=(i?.events??[]).map(e=>Rt(e,{hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})),s=new Set;return e?(0,X.jsxs)(`section`,{className:`flex flex-col gap-3`,"data-testid":`member-activity-feed`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,children:`Activity`}),(0,X.jsx)(C,{children:(0,X.jsxs)(S,{className:`pt-3`,children:[a?(0,X.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,X.jsx)(Xe,{className:`h-10`}),(0,X.jsx)(Xe,{className:`h-10`}),(0,X.jsx)(Xe,{className:`h-10`})]}):o.length===0?(0,X.jsx)(`p`,{className:`py-4 text-center text-sm text-muted-foreground`,"data-testid":`member-activity-empty`,children:`No activity yet`}):(0,X.jsx)(`div`,{className:`divide-y divide-border`,children:o.map(e=>{let t=e.id||`${e.timestamp??`?`}-${e.icon}-${e.action}`,n=t,r=1;for(;s.has(n);)n=`${t}#${r}`,r+=1;return s.add(n),(0,X.jsx)(Wt,{event:e},n)})}),!a&&o.length>0&&(0,X.jsx)(Bt,{memberId:e})]})})]}):(0,X.jsxs)(`section`,{className:`flex flex-col gap-3`,"data-testid":`member-activity-feed`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,children:`Activity`}),(0,X.jsx)(C,{children:(0,X.jsx)(S,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(ce,{description:Vt,title:`Activity`,children:(0,X.jsx)(be,{})})})})})]})},Kt=[`line1`,`line2`,`city`,`state`,`postal_code`,`country`],qt=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function Q(e){return{name:(e.name??``).trim(),email:(e.email??``).trim(),note:e.note??``,labels:(e.labels??[]).map(e=>({name:e.name,slug:e.slug})).sort((e,t)=>e.slug<t.slug?-1:+(e.slug>t.slug)),newsletters:(e.newsletters??[]).map(e=>e.id).sort()}}function Jt(e){let t={};for(let[n,r]of Object.entries(e??{}))if(typeof r==`string`&&r.trim()!==``)t[n]=r.trim();else if(typeof r==`object`&&r&&!Array.isArray(r)){let e=Xt(r);e&&(t[n]=e)}return t}function Yt(e){let t={};for(let n of Kt){let r=e[n];typeof r==`string`&&(t[n]=r.trim())}return Object.values(t).some(e=>e!==``)?t:void 0}function Xt(e){let t={};for(let n of Kt){let r=e[n];typeof r==`string`&&r.trim()!==``&&(t[n]=r.trim())}return Object.keys(t).length?t:void 0}function Zt(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t].sort()}function Qt(e){return qt.test(e.trim())}function $t(e,t){return t?e.trim()===``?`Email is required.`:Qt(e)?null:`Invalid email.`:null}function en(e){if(!e?.suppressed)return null;let t=e.info;if(!t)return{label:null};let{reason:n,timestamp:r}=t,i=(0,Z.default)(new Date(r)).format(`D MMM YYYY`);switch(n){case`fail`:return{reason:n,label:`Bounced on ${i}`};case`spam`:return{reason:n,label:`Flagged as spam on ${i}`};default:return{reason:n,label:`Email disabled on ${i}`}}}function tn(e){return e?e.filter(e=>e.subscribe_on_signup===!0&&e.visibility===`members`).map(e=>e.id):[]}function nn(e){return e!==`disabled`}function rn(e){return 500-[...e].length}function an(e,t,n){let r=dn(t),i={id:e,name:r.name,email:r.email,note:r.note,labels:r.labels};return s(r.newsletters,n.newsletters)||(i.newsletters=r.newsletters.map(e=>({id:e}))),i}function on(e){return typeof e==`string`?e.trim()||void 0:Yt(e)}function sn(e,t,n){return{id:e,custom_fields:{[t]:on(n)??null}}}function cn(e,t){let n={};for(let r of t){let t=e[r.key],i=t===void 0?void 0:on(t);if(i===void 0)continue;let a=lt[r.type];if(!a)continue;let o=a.value.safeParse(i);if(!o.success)for(let e of o.error.issues){let t=[r.key,...e.path].join(`.`);n[t]??=e.message}}return n}function ln(e){let t=e?.data,n={};for(let e of t?.errors??[])e.property?.startsWith(`custom_fields.`)&&(n[e.property.slice(14)]=e.context||e.message||`Invalid value.`);return Object.keys(n).length?n:void 0}function un(e,t){return e.map(e=>t.get(e)??{name:e,slug:e})}function dn(e){return{name:e.name.trim(),email:e.email.trim(),note:e.note,labels:e.labels,newsletters:e.newsletters}}function fn(e,t){return!e||!!t&&s(dn(e),t)}function pn(e){if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function mn(e){let t=pn(e);return t?t.country_code===`US`&&t.region?`${t.region}, US`:t.country||`Unknown location`:`Unknown location`}function hn(e){let t=[e.state,e.postal_code].filter(Boolean).join(` `);return[e.line1,e.line2,e.city,t,e.country].filter(Boolean).join(`, `)}function gn(e){let t=e?.referrer_source;return!t||t===`Created manually`?null:t}var _n=ut(`address`).subFields??{},vn=({message:e})=>e?(0,X.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:e}):null,yn=({inputId:e,value:t,errors:n,disabled:r,onChange:i})=>(0,X.jsx)(`div`,{className:`grid gap-x-4 gap-y-3 md:grid-cols-2`,children:Kt.map(a=>{let o=`${e}-${a}`,s=n?.[a];return(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:o,children:_n[a]??a}),(0,X.jsx)(K,{"aria-invalid":s?!0:void 0,disabled:r,id:o,value:t[a]??``,onChange:e=>i({...t,[a]:e.target.value})}),(0,X.jsx)(vn,{message:s})]},a)})}),bn=({field:e,inputId:t,value:n,errors:r,disabled:i,onChange:a})=>{let o=r?.[``];switch(ct(e).input){case`text`:return(0,X.jsx)(K,{"aria-invalid":o?!0:void 0,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`textarea`:return(0,X.jsx)(de,{"aria-invalid":o?!0:void 0,className:`max-w-full resize-y`,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`address`:return(0,X.jsx)(yn,{disabled:i,errors:r,inputId:t,value:typeof n==`object`&&n?n:{},onChange:a});default:return null}},xn=({memberId:e,field:t,initialValue:n,onClose:r})=>{let i=ct(t).input===`address`,[o,c]=Y.useState(n??(i?{}:``)),[l,u]=Y.useState(!1),[d,f]=Y.useState(),p=We(),m=cn({[t.key]:o},[t]),h={...l?m:{},...d},g=Object.fromEntries(Object.entries(h).map(([e,n])=>[e===t.key?``:e.slice(t.key.length+1),n])),_=`member-custom-field-${t.key}`,v=!s(Jt({[t.key]:o}),Jt({[t.key]:n}));return(0,X.jsx)(H,{open:!0,onOpenChange:e=>{!e&&!p.isPending&&r()},children:(0,X.jsxs)(q,{"data-testid":`member-custom-field-edit-modal`,onEscapeKeyDown:e=>{(v||p.isPending)&&e.preventDefault()},onInteractOutside:e=>{(v||p.isPending)&&e.preventDefault()},children:[(0,X.jsx)(P,{children:(0,X.jsx)(R,{children:t.name})}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[!i&&(0,X.jsx)(w,{className:`sr-only`,htmlFor:_,children:t.name}),(0,X.jsx)(bn,{disabled:p.isPending,errors:g,field:t,inputId:_,value:o,onChange:e=>{f(void 0),c(e)}}),(0,X.jsx)(vn,{message:g[``]})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{disabled:p.isPending,variant:`outline`,onClick:r,children:`Cancel`}),(0,X.jsx)(B,{className:`min-w-16`,disabled:p.isPending,onClick:()=>{if(!p.isPending){if(!v){r();return}if(Object.keys(m).length>0){u(!0);return}p.mutate(sn(e,t.key,o),{onSuccess:()=>{a.success(`${t.name} saved`),r()},onError:e=>{let n=ln(e);f(n),n||a.error(`${t.name} couldn’t be saved`)}})}},children:p.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):`Save`})]})]})})};function Sn(e){return e===void 0?null:typeof e==`string`?e:hn(e)||null}var Cn=({memberId:e,customFields:t,disabled:n})=>{let{data:r,isLoading:i}=dt(),a=r?.members_custom_fields??[],o=Jt(t),[s,c]=Y.useState(null);return i||a.length===0?null:(0,X.jsxs)(`section`,{"aria-labelledby":`member-custom-fields-heading`,className:`flex flex-col gap-3`,"data-testid":`member-custom-fields-field`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-custom-fields-heading`,children:`Custom fields`}),(0,X.jsx)(C,{children:(0,X.jsx)(S,{className:`px-6 py-4`,children:(0,X.jsx)(`ul`,{children:a.map(e=>{let t=Sn(o[e.key]);return(0,X.jsx)(`li`,{className:`border-b border-border transition-colors last:border-b-0 hover:border-b-transparent [&:has(+li:hover)]:border-b-transparent`,children:(0,X.jsxs)(`button`,{"aria-label":t?`Edit ${e.name}: ${t}`:`Edit ${e.name}`,className:`group -mx-3 flex w-[calc(100%+1.5rem)] items-center justify-between gap-4 rounded-md p-3 text-left transition-colors hover:bg-table-row-hover disabled:cursor-not-allowed disabled:opacity-50`,disabled:n,type:`button`,onClick:()=>{window.getSelection()?.toString()||c(e)},children:[(0,X.jsxs)(`span`,{className:`min-w-0`,children:[(0,X.jsx)(`span`,{className:`block text-sm text-muted-foreground`,children:e.name}),t?(0,X.jsx)(`span`,{className:`block break-words select-text`,children:t}):(0,X.jsx)(`span`,{className:`block text-muted-foreground`,children:`–`})]}),(0,X.jsx)(he,{"aria-hidden":`true`,className:`shrink-0 text-muted-foreground opacity-0 transition-all group-hover:opacity-100 group-focus-visible:opacity-100`,size:16})]})},e.key)})})})}),s&&(0,X.jsx)(xn,{field:s,initialValue:o[s.key],memberId:e,onClose:()=>c(null)},s.key)]})},wn=({labels:e,disabled:t,onChange:n})=>{let r=e.map(e=>e.slug),i=Y.useRef(e);i.current=e;let a=Y.useRef(new Map),o=e=>{for(let t of e)a.current.set(t.slug,{name:t.name,slug:t.slug})};o(e);let s=ft({selectedSlugs:r,onSelectionChange:e=>n(un(e,a.current))});o(s.labels);let c=async e=>{let t=await s.createLabel(e);if(t){let e={name:t.name,slug:t.slug};a.current.set(t.slug,e),n([...i.current.filter(e=>e.slug!==t.slug),e])}return t};return(0,X.jsx)(`div`,{className:t?`pointer-events-none opacity-60`:void 0,"data-testid":`member-labels-field`,...t?{inert:``}:{},children:(0,X.jsx)(pt,{isCreating:s.isCreating,labels:s.labels,optionSource:s.optionSource,placeholder:``,resolvedSelectedLabels:s.resolvedSelectedLabels,selectedSlugs:r,onCreate:c,onDelete:s.deleteLabel,onEdit:s.editLabel,onToggle:s.toggleLabel})})},Tn=({draft:e,emailError:t,disabled:n,onChange:r,onEmailBlur:i,onNameBlur:a})=>{let o=rn(e.note),s=500-o,c=o<0?`text-destructive`:s>=500*.8?`text-state-warning`:`text-state-success`;return(0,X.jsxs)(`div`,{className:`grid items-stretch gap-6 md:grid-cols-2`,"data-testid":`member-detail-form`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`member-name`,children:`Name`}),(0,X.jsx)(K,{disabled:n,id:`member-name`,value:e.name,onBlur:a,onChange:e=>r({name:e.target.value})})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`member-email`,children:`Email`}),(0,X.jsx)(K,{"aria-invalid":!!t,disabled:n,id:`member-email`,type:`email`,value:e.email,onBlur:i,onChange:e=>r({email:e.target.value})}),t&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:t})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{children:`Labels`}),(0,X.jsx)(wn,{disabled:n,labels:e.labels,onChange:e=>r({labels:e})})]})]}),(0,X.jsxs)(`div`,{className:`flex min-h-0 flex-col gap-1.5`,children:[(0,X.jsxs)(w,{htmlFor:`member-note`,children:[`Note `,(0,X.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(not visible to member)`})]}),(0,X.jsxs)(T,{className:`flex-1`,children:[(0,X.jsx)(ue,{className:`h-full`,disabled:n,id:`member-note`,value:e.note,onChange:e=>r({note:e.target.value})}),(0,X.jsx)(le,{align:`block-end`,className:`justify-end`,children:(0,X.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Maximum: `,(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:500}),` characters. You’ve used`,` `,(0,X.jsx)(`span`,{className:m(`font-semibold`,c),children:s})]})})]})]})]})},En=e=>Z.default.utc(e).format(`D MMM YYYY`),$=({icon:e,children:t})=>(0,X.jsxs)(`p`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e}),(0,X.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]}),Dn=e=>e.split(` `)[0]||``,On=({member:e,draftName:t,draftEmail:n,engagementEnabled:r})=>{let i=(t??e?.name??``).trim(),a=(n??e?.email??``).trim(),o=i||a||`New member`,s=!e;return(0,X.jsxs)(`aside`,{className:`flex w-full shrink-0 flex-col gap-6 lg:w-80`,"data-testid":`member-detail-sidebar`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,X.jsx)(tt,{className:`size-12 min-w-12 [&_span]:text-lg`,email:a||void 0,name:i||void 0,src:e?.avatar_image}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`h2`,{className:`truncate text-xl font-semibold`,children:o}),i&&a&&(0,X.jsx)(`a`,{className:`block truncate text-muted-foreground hover:underline`,href:`mailto:${a}`,children:a}),!i&&a&&(0,X.jsx)(`span`,{className:`block truncate text-muted-foreground`,children:a})]})]}),!s&&e&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 text-sm`,children:[(0,X.jsx)($,{icon:(0,X.jsx)(Oe,{size:16}),children:(0,X.jsx)(`span`,{"data-testid":`member-detail-location`,children:mn(e.geolocation)})}),(0,X.jsx)($,{icon:(0,X.jsx)(z,{size:16}),children:e.last_seen_at?`Last seen on ${En(e.last_seen_at)}`:`Not seen yet`}),e.can_comment===!1&&(0,X.jsx)($,{icon:(0,X.jsx)(_e,{size:16}),children:`Comments disabled`})]}),(0,X.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 text-sm`,children:[(0,X.jsx)(`h3`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Signup info`}),(0,X.jsxs)($,{icon:(0,X.jsx)(V,{size:16}),children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:En(e.created_at)})]}),(()=>{let t=gn(e.attribution);return t?(0,X.jsxs)($,{icon:(0,X.jsx)(we,{size:16}),children:[`Source — `,(0,X.jsx)(`span`,{className:`text-foreground`,title:t,children:t})]}):null})(),e.attribution?.title&&(0,X.jsxs)($,{icon:(0,X.jsx)(Ue,{size:16}),children:[`Page — `,Tt(e.attribution.url)?(0,X.jsx)(`a`,{className:`truncate text-foreground hover:underline`,href:e.attribution.url,rel:`noopener noreferrer`,target:`_blank`,title:e.attribution.title,children:e.attribution.title}):(0,X.jsx)(`span`,{className:`truncate text-foreground`,title:e.attribution.title,children:e.attribution.title})]})]}),r&&(0,X.jsxs)(`section`,{className:`mt-4 flex flex-col gap-3 text-sm`,"data-testid":`member-detail-engagement`,children:[(0,X.jsx)(`h4`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Engagement`}),(e.email_count??0)===0?(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:i?`We’ll show ${Dn(i)}’s email stats here once they receive their first newsletter.`:`We’ll show this member’s email stats here once they receive their first newsletter.`}):(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails received`}),(0,X.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_count})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails opened`}),(0,X.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_opened_count??0})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Average open rate`}),e.email_open_rate===null||e.email_open_rate===void 0?(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`This metric is calculated once a member has received 5 newsletters.`}):(0,X.jsxs)(`p`,{className:`text-2xl font-semibold`,children:[e.email_open_rate,(0,X.jsx)(`span`,{className:`text-base font-normal text-muted-foreground`,children:`%`})]})]})]})]})]})]})},kn=({memberId:e,emailSuppression:t,subscribedIds:n,disabled:r,onChange:i})=>{let o=e?en(t):null,s=ge(),{data:c,isLoading:l}=ot({searchParams:{filter:`status:active`,limit:`50`}}),u=c?.newsletters??[],d=I(),f=s.isPending||s.isSuccess&&d;return!o&&(l||u.length===0)?null:(0,X.jsxs)(`section`,{"aria-labelledby":`member-newsletters-heading`,className:`flex flex-col gap-3`,"data-testid":`member-newsletters-field`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-newsletters-heading`,children:`Newsletters`}),(0,X.jsx)(C,{children:(0,X.jsx)(S,{className:`p-6`,children:o?(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,"data-testid":`member-suppression-banner`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,X.jsx)(Fe,{className:`mt-0.5 shrink-0 text-muted-foreground`,size:20}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`font-medium`,children:`Email disabled`}),o.label&&(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:o.label}),(0,X.jsx)(`a`,{className:`text-sm text-muted-foreground hover:underline`,href:`https://ghost.org/help/disabled-emails`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]}),(0,X.jsx)(B,{disabled:r||f,onClick:()=>{e&&s.mutate({id:e},{onSuccess:()=>a.success(`Email re-enabled successfully`),onError:()=>a.error(`Failed to re-enable email. Please try again.`)})},children:f?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Re-enabling email`})]}):`Re-enable email`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`ul`,{className:`divide-y divide-border`,children:u.map(e=>{let t=n.includes(e.id);return(0,X.jsxs)(`li`,{className:`flex items-center justify-between gap-4 py-3 first:pt-0 last:pb-0`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`font-medium`,children:e.name}),e.description&&(0,X.jsx)(`p`,{className:`truncate text-sm text-muted-foreground`,children:e.description})]}),(0,X.jsx)(v,{"aria-label":`Subscribe to ${e.name}`,checked:t,"data-testid":`member-subscription-toggle`,disabled:r,onCheckedChange:()=>i(Zt(n,e.id))})]},e.id)})}),(0,X.jsxs)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:[`If disabled, member will `,(0,X.jsx)(`em`,{children:`not`}),` receive newsletter emails`]})]})})})]})},An=`complimentary`,jn=`gift subscription`;function Mn(e){if(e.id)return`paid`;let t=e.plan?.nickname?.toLowerCase()??``;return t===An?`complimentary`:t===jn?`gift`:`paid`}function Nn(e){return e===`year`?`yearly`:`monthly`}function Pn(e){if(e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`))return`Free trial`;let t=e.price?.nickname;return t&&t!==`Monthly`&&t!==`Yearly`?t:null}function Fn(e){return e.status===`canceled`||e.cancel_at_period_end?`Canceled`:`Active`}var In=e=>e?(0,Z.default)(new Date(e)).format(`D MMM YYYY`):``,Ln=e=>e?(0,Z.default)(e).utc().format(`D MMM YYYY`):``;function Rn(e){let t=Mn(e);if(t===`complimentary`||t===`gift`){let t=Ln(e.tier?.expiry_at);return t?`Expires ${t}`:``}let n=e.status===`canceled`&&!e.cancel_at_period_end?``:In(e.current_period_end);return e.status===`canceled`?n?`Ended ${n}`:``:e.cancel_at_period_end?n?`Has access until ${n}`:``:e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`)?`Ends ${In(e.trial_end_at)}`:n?`Renews ${n}`:``}function zn(e){let t=[],n=new Map;for(let r of e){if(!r.price)continue;let e=r.tier??r.price.tier;if(!e?.id)continue;let i=n.get(e.id);i||(i={tier:e,subscriptions:[]},n.set(e.id,i),t.push(i)),i.subscriptions.push(r)}return t}var Bn=[`forever`,`week`,`month`,`half-year`,`year`,`custom`];function Vn(e){return Bn.includes(e)}function Hn(e,t){switch(e){case`forever`:return null;case`week`:return Z.default.utc().add(7,`days`).startOf(`day`).toISOString();case`month`:return Z.default.utc().add(1,`month`).startOf(`day`).toISOString();case`half-year`:return Z.default.utc().add(6,`months`).startOf(`day`).toISOString();case`year`:return Z.default.utc().add(1,`year`).startOf(`day`).toISOString();case`custom`:return t?(0,Z.default)(t,`YYYY-MM-DD`).startOf(`day`).endOf(`day`).set(`millisecond`,0).add((0,Z.default)().utcOffset(),`minutes`).toISOString():null}}var Un=new Set([`active`,`trialing`,`unpaid`,`past_due`]),Wn=[{value:`forever`,label:`Forever`},{value:`week`,label:`1 Week`},{value:`month`,label:`1 Month`},{value:`half-year`,label:`6 Months`},{value:`year`,label:`1 Year`},{value:`custom`,label:`Custom`}],Gn=({open:e,onOpenChange:t,member:n})=>{let{data:r,isLoading:i}=at({searchParams:{filter:`type:paid+active:true`,limit:`all`}}),o=r?.tiers??[],[s,c]=Y.useState(``),[l,u]=Y.useState(`forever`),[d,f]=Y.useState(``);Y.useEffect(()=>{e&&(c(``),u(`forever`),f(``))},[e]);let p=me(),m=We(),[h,g]=Y.useState(!1),_=(n.subscriptions??[]).filter(e=>Mn(e)===`paid`&&Un.has(e.status)),v=(0,Z.default)().format(`YYYY-MM-DD`),ne=!!s&&!h&&(l!==`custom`||!!d),re=async()=>{if(ne){g(!0);try{for(let e of _)await p.mutateAsync({memberId:n.id,subscriptionId:e.id,status:`canceled`});let e=Hn(l,l===`custom`?d:null),r=e?{id:s,expiry_at:e}:{id:s};await m.mutateAsync({id:n.id,...n.email?{email:n.email}:{},tiers:[r]}),a.success(`Complimentary subscription added`),t(!1)}catch{a.error(`Couldn’t add complimentary subscription`)}finally{g(!1)}}};return(0,X.jsx)(H,{open:e,onOpenChange:e=>{h||t(e)},children:(0,X.jsxs)(q,{"data-testid":`add-comp-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(R,{children:`Add complimentary subscription`}),(0,X.jsx)(U,{children:`Grants this member access to a paid tier for the chosen duration. Any active paid subscription is canceled first.`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`comp-tier`,children:`Tier`}),(0,X.jsxs)(x,{value:s,onValueChange:c,children:[(0,X.jsx)(b,{"data-testid":`comp-tier-select`,disabled:i||h,id:`comp-tier`,children:(0,X.jsx)(te,{placeholder:i?`Loading tiers…`:`Select a tier`})}),(0,X.jsx)(y,{children:o.map(e=>(0,X.jsx)(ee,{"data-tier-id":e.id,value:e.id,children:e.name},e.id))})]})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`comp-duration`,children:`Duration`}),(0,X.jsxs)(x,{value:l,onValueChange:e=>{Vn(e)&&u(e)},children:[(0,X.jsx)(b,{"data-testid":`comp-duration-select`,disabled:h,id:`comp-duration`,children:(0,X.jsx)(te,{})}),(0,X.jsx)(y,{children:Wn.map(e=>(0,X.jsx)(ee,{value:e.value,children:e.label},e.value))})]})]}),l===`custom`&&(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`comp-custom-date`,children:`Expires on`}),(0,X.jsx)(K,{"data-testid":`comp-custom-date`,disabled:h,id:`comp-custom-date`,min:v,type:`date`,value:d,onChange:e=>f(e.target.value)})]})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{disabled:h,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(B,{"data-testid":`comp-add-confirm`,disabled:!ne,onClick:()=>void re(),children:h?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Adding`})]}):`Add subscription`})]})]})})},Kn=({memberId:e,subscription:t})=>{let n=me(),r=I(),i=n.isPending||n.isSuccess&&r,o=t.status===`canceled`,s=t.cancel_at_period_end,c=(r,i,o)=>{n.mutate({memberId:e,subscriptionId:t.id,cancelAtPeriodEnd:r},{onSuccess:()=>a.success(i),onError:()=>a.error(o)})};return(0,X.jsxs)(De,{children:[(0,X.jsx)(je,{asChild:!0,children:(0,X.jsx)(B,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:i,size:`sm`,variant:`outline`,children:i?(0,X.jsx)(G,{size:`sm`}):(0,X.jsx)(L,{})})}),(0,X.jsxs)(Ae,{align:`end`,children:[(0,X.jsx)(D,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/customers/${t.customer.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe customer`})}),(0,X.jsx)(Qe,{}),(0,X.jsx)(D,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/subscriptions/${t.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe subscription`})}),!o&&(s?(0,X.jsx)(D,{"data-testid":`continue-subscription`,onSelect:()=>c(!1,`Subscription continued`,`Couldn’t continue subscription`),children:`Continue subscription`}):(0,X.jsx)(D,{className:`text-destructive focus:text-destructive`,"data-testid":`cancel-subscription`,onSelect:()=>c(!0,`Subscription canceled`,`Couldn’t cancel subscription`),children:`Cancel subscription`}))]})]})},qn=({member:e,tierId:t})=>{let n=We(),[r,i]=Y.useState(!1),o=I(),s=n.isPending||n.isSuccess&&o;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(De,{children:[(0,X.jsx)(je,{asChild:!0,children:(0,X.jsx)(B,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:s,size:`sm`,variant:`outline`,children:s?(0,X.jsx)(G,{size:`sm`}):(0,X.jsx)(L,{})})}),(0,X.jsx)(Ae,{align:`end`,children:(0,X.jsx)(D,{className:`text-destructive focus:text-destructive`,"data-testid":`remove-complimentary`,onSelect:()=>i(!0),children:`Remove complimentary subscription`})})]}),(0,X.jsx)(Ge,{open:r,onOpenChange:e=>{n.isPending||i(e)},children:(0,X.jsxs)(Ie,{children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(Re,{children:`Remove complimentary subscription?`}),(0,X.jsx)(Ze,{children:`The member will lose access to this tier immediately.`})]}),(0,X.jsxs)(qe,{children:[(0,X.jsx)(Pe,{disabled:n.isPending,children:`Cancel`}),(0,X.jsx)(B,{"data-testid":`confirm-remove-complimentary`,disabled:n.isPending,variant:`destructive`,onClick:()=>{let r=(e.tiers??[]).filter(e=>e.id!==t).map(e=>({id:e.id,expiry_at:e.expiry_at??null}));n.mutate({id:e.id,email:e.email,tiers:r},{onSuccess:()=>{a.success(`Complimentary subscription removed`),i(!1)},onError:()=>a.error(`Couldn’t remove complimentary subscription`)})},children:n.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Removing`})]}):`Remove`})]})]})})]})},Jn=e=>{let t=e/100;return t.toLocaleString(void 0,t%1==0?void 0:{minimumFractionDigits:2,maximumFractionDigits:2})},Yn=({sub:e,kind:t})=>{if(t===`complimentary`||t===`gift`)return(0,X.jsx)(`div`,{className:`flex size-20 shrink-0 items-center justify-center rounded-lg bg-muted text-center text-sm font-medium text-muted-foreground`,children:t===`complimentary`?`Comp`:`Gift`});let n=c(e.price.currency),r=Jn(e.price.amount),i=Nn(e.price.interval);return(0,X.jsxs)(`div`,{className:`flex size-20 shrink-0 flex-col items-center justify-center rounded-lg bg-muted text-foreground`,children:[(0,X.jsxs)(`div`,{className:`flex items-start leading-none`,children:[(0,X.jsx)(`span`,{className:`mt-1 text-sm font-semibold`,children:n}),(0,X.jsx)(`span`,{className:`text-3xl font-semibold tracking-tight`,children:r})]}),(0,X.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:i})]})},Xn=e=>e?Z.default.utc(e).format(`D MMM YYYY`):``,Zn=({sub:e})=>{let t=Xn(e.start_date),n=e.attribution?.referrer_source,r=n&&n!==`Unknown`,i=e.attribution?.title?{title:e.attribution.title,url:e.attribution.url??null}:null;return(0,X.jsxs)(`div`,{className:`mt-3 space-y-1 border-t border-border pt-3 text-sm text-muted-foreground`,children:[t&&(0,X.jsxs)(`p`,{children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:t})]}),r&&(0,X.jsxs)(`p`,{children:[`Source — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:n})]}),i&&(0,X.jsxs)(`p`,{children:[`Page — `,i.url?(0,X.jsx)(`a`,{className:`text-foreground hover:underline`,href:i.url,rel:`noopener noreferrer`,target:`_blank`,children:i.title}):(0,X.jsx)(`span`,{className:`text-foreground`,children:i.title})]})]})},Qn=({member:e,sub:t,showDivider:n})=>{let[r,i]=Y.useState(!1),a=Mn(t),o=Fn(t),s=Rn(t),c=Pn(t);return(0,X.jsxs)(`div`,{className:m(`flex items-start justify-between gap-4 py-5 first:pt-0 last:pb-0`,n&&`border-t border-border`),"data-testid":`member-subscription`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-4`,children:[(0,X.jsx)(Yn,{kind:a,sub:t}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1 pt-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`min-w-0 truncate font-semibold`,"data-testid":`member-subscription-tier`,children:t.tier?.name??`Subscription`}),(0,X.jsx)(pe,{"data-testid":`member-subscription-status`,variant:o===`Canceled`?`secondary`:`success`,children:o})]}),(c||s)&&(0,X.jsxs)(`div`,{className:`mt-1 text-sm`,children:[c&&(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:c}),c&&s&&(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:` – `}),s&&(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:s})]}),(0,X.jsxs)(`button`,{"aria-expanded":r,className:`mt-1 inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline`,"data-testid":`member-subscription-details-toggle`,type:`button`,onClick:()=>i(e=>!e),children:[`Details`,(0,X.jsx)(Ye,{className:m(`transition-transform`,r&&`rotate-180`),size:14})]}),r&&(0,X.jsx)(Zn,{sub:t})]})]}),a===`paid`&&(0,X.jsx)(Kn,{memberId:e.id,subscription:t}),a===`complimentary`&&t.tier?.id&&(0,X.jsx)(qn,{member:e,tierId:t.tier.id})]})},$n=({member:e,canAddComp:t})=>{let[n,r]=Y.useState(!1);if(!e)return(0,X.jsx)(C,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(S,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(ce,{title:`No subscriptions`,children:(0,X.jsx)(k,{})})})})});let i=zn(e.subscriptions??[]),a=i.length>0,o=t&&(e.tiers?.length??0)===0,s=o?(0,X.jsxs)(B,{"data-testid":`add-complimentary`,variant:`outline`,onClick:()=>r(!0),children:[(0,X.jsx)(M,{className:`mr-1`,size:16}),`Add complimentary subscription`]}):null;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(C,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(S,{className:`pt-6`,children:a?(0,X.jsxs)(X.Fragment,{children:[i.map(t=>(0,X.jsxs)(`div`,{className:`flex flex-col`,children:[t.subscriptions.map((n,r)=>(0,X.jsx)(Qn,{member:e,showDivider:r>0,sub:n},n.id||`${t.tier.id}-${r}`)),t.subscriptions.length>1&&(0,X.jsxs)(`div`,{className:`pt-3 text-sm text-muted-foreground`,children:[t.subscriptions.length,` subscriptions`]})]},t.tier.id)),s&&(0,X.jsx)(`div`,{className:`mt-4 flex justify-center border-t border-border pt-4`,children:s})]}):(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:[(0,X.jsx)(ce,{title:`No subscriptions`,children:(0,X.jsx)(k,{})}),s]})})}),o&&(0,X.jsx)(Gn,{member:e,open:n,onOpenChange:r})]})};function er(e){let t=new URLSearchParams(e),n=t.get(`back`);if(n&&n.startsWith(`/members`))return n;let r=t.get(`post`);return r?`/members?post=${encodeURIComponent(r)}`:`/members`}var tr=`new`,nr=({paidMembersEnabled:e,newslettersUiEnabled:t,engagementEnabled:n})=>{let{member_id:r=``}=d(),i=u(),c=p(),m=er(i.search),h=r===tr,v=Ke(`membersCustomFields`),{data:ee,isLoading:y,error:b,refetch:te}=rt(r,{enabled:!!r&&!h,searchParams:{include:v?`tiers,custom_fields`:`tiers`},defaultErrorHandler:!1}),x=ee?.members?.[0],ce=!h&&!y&&!!b,w=!h&&!y&&!b&&!x,le=We(),ue=Ce(),T=h?ue:le,{data:de}=at({searchParams:{filter:`type:paid+active:true`,limit:`all`},enabled:e}),fe=(de?.tiers?.length??0)>0,{data:E}=ot({searchParams:{filter:`status:active`,limit:`50`}}),pe=E!==void 0,D=(E?.newsletters?.length??0)>1,me=(de?.tiers?.length??0)>1,[O,k]=Y.useState(void 0),A=Y.useRef(void 0),j=Y.useRef(void 0),M=Y.useRef(!1),N=Y.useRef(!1);Y.useEffect(()=>{if(h){if(A.current!==tr){A.current=tr,M.current=!1;let e=Q({});j.current=e,k(e)}return}if(!x)return;let e=Q(x);if(A.current!==x.id){A.current=x.id,j.current=e,k(e);return}let t=j.current;j.current=e,k(n=>fn(n,t)?e:n)},[x,h]),Y.useEffect(()=>{N.current=!1},[r]),Y.useEffect(()=>{if(!h||M.current||!E?.newsletters)return;M.current=!0;let e=tn(E.newsletters);if(e.length===0)return;let t={...j.current??Q({}),newsletters:[...e].sort()};j.current=t,k(t=>t&&{...t,newsletters:[...e].sort()})},[h,E]);let P=h?j.current:x?Q(x):void 0,F=!!O&&!!P&&!s(dn(O),P),I=!!O&&Qt(O.email),[he,ge]=Y.useState(!1);Y.useEffect(()=>{ge(!1)},[x?.id,h]);let _e=O?$t(O.email,he):null,[L,ve]=Y.useState({name:``,email:``});Y.useEffect(()=>{if(h){ve({name:``,email:``});return}x&&ve({name:x.name??``,email:x.email??``})},[x?.id,x?.name,x?.email,h]);let ye=()=>{O&&ve({name:O.name,email:O.email})},R=e=>{T.isError&&T.reset(),k(t=>t&&{...t,...e})},be=()=>{if(!(!O||!F||!I||T.isPending)){if(ye(),h){ue.mutate({email:O.email.trim(),name:O.name.trim()||void 0,note:O.note.trim()||void 0,labels:O.labels.length?O.labels:void 0,newsletters:M.current?O.newsletters.map(e=>({id:e})):void 0},{onSuccess:e=>{let t=e.members?.[0];if(!t){a.error(`Member couldn’t be created`);return}N.current=!0,a.success(`Member created`),c(`/members/${t.id}`,{replace:!0})},onError:()=>{a.error(`Member couldn’t be created`)}});return}!x||A.current!==x.id||le.mutate(an(x.id,O,Q(x)),{onSuccess:e=>{let t=e.members?.[0];if(t){let e=Q(t);j.current=e,k(e)}a.success(`Member updated`)},onError:()=>{a.error(`Member couldn’t be saved`)}})}};o(T.isPending||F);let xe=l(({currentLocation:e,nextLocation:t})=>!N.current&&F&&e.pathname!==t.pathname),z=st(F),Se=xe.state===`blocked`||z.isBlocked,V=`Save`,we=`default`,H=!0;T.isPending?V=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):F?(V=T.isError?`Retry`:`Save`,we=T.isError?`destructive`:`default`,H=!I):!h&&le.isSuccess&&(V=`Saved`);let U=!!O&&(h||!!x),W=`Member`;return h?W=`New member`:x?W=Te(x):w&&(W=`Member not found`),(0,X.jsx)(g,{className:`size-full`,children:(0,X.jsx)(_,{className:`relative flex h-full flex-col`,size:`page`,children:(0,X.jsxs)(J,{"data-testid":`member-detail`,children:[(0,X.jsx)(J.Header,{children:(0,X.jsxs)(it,{blurredBackground:!1,sticky:!1,children:[(0,X.jsx)(it.Left,{children:(0,X.jsx)(se,{children:(0,X.jsxs)(re,{children:[(0,X.jsx)(ie,{children:(0,X.jsx)(oe,{asChild:!0,children:(0,X.jsx)(f,{"data-test-link":`members-back`,to:m,children:`Members`})})}),(0,X.jsx)(ae,{}),(0,X.jsx)(ie,{children:!h&&y?(0,X.jsx)(Xe,{className:`h-4 w-40`}):(0,X.jsx)(ne,{className:`truncate`,"data-testid":`member-detail-title`,children:W})})]})})}),(h||x)&&(0,X.jsx)(it.Actions,{children:(0,X.jsxs)(it.ActionGroup,{children:[x&&!h&&(0,X.jsx)(wt,{allowLeaveWithUnsavedChanges:()=>{N.current=!0},member:x},x.id),(0,X.jsx)(B,{className:`min-w-16`,disabled:H,variant:we,onClick:be,children:V})]})})]})}),(0,X.jsxs)(J.Body,{children:[ce&&(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3`,"data-testid":`member-detail-load-error`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Couldn’t load this member.`}),(0,X.jsx)(B,{variant:`outline`,onClick:()=>void te(),children:`Retry`})]}),w&&(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`This member couldn’t be found.`})}),U&&O&&(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col gap-8 lg:flex-row lg:items-start lg:gap-12`,children:[(0,X.jsx)(On,{draftEmail:L.email,draftName:L.name,engagementEnabled:n,member:x}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-8`,children:[(0,X.jsx)(C,{children:(0,X.jsx)(S,{className:`p-6`,children:(0,X.jsx)(Tn,{disabled:T.isPending,draft:O,emailError:_e,onChange:R,onEmailBlur:()=>{ge(!0),ye()},onNameBlur:ye})})}),v&&x&&(0,X.jsx)(Cn,{customFields:x.custom_fields,disabled:T.isPending,memberId:x.id}),t&&(h||x)&&(0,X.jsx)(kn,{disabled:T.isPending,emailSuppression:x?.email_suppression,memberId:x?.id,subscribedIds:O.newsletters,onChange:e=>R({newsletters:e})}),e&&(0,X.jsxs)(`section`,{"aria-labelledby":`member-subscriptions-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-subscriptions-heading`,children:`Subscriptions`}),(0,X.jsx)($n,{canAddComp:fe,member:x})]}),(h||x&&pe)&&(0,X.jsx)(Gt,{hasMultipleNewsletters:D,hasMultipleTiers:me,memberId:x?.id,paidMembersEnabled:e})]})]})]}),(0,X.jsx)(Ge,{open:Se,onOpenChange:e=>{!e&&Se&&(xe.reset?.(),z.reset())},children:(0,X.jsxs)(Ie,{children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(Re,{children:`Discard unsaved changes?`}),(0,X.jsx)(Ze,{children:`Your changes will be lost if you leave this member.`})]}),(0,X.jsxs)(qe,{children:[(0,X.jsx)(Pe,{children:`Keep editing`}),(0,X.jsx)(B,{variant:`destructive`,onClick:()=>{z.isBlocked?z.proceed():xe.proceed?.()},children:`Leave`})]})]})})]})})})},rr=()=>{let{data:e,isLoading:t}=He({});if(t||!e?.settings)return(0,X.jsx)(g,{className:`size-full`,children:(0,X.jsx)(_,{className:`relative flex h-full flex-col`,size:`page`,children:(0,X.jsx)(J,{children:(0,X.jsx)(J.Body,{children:(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,X.jsx)(G,{size:`lg`})})})})})});let n=N(e.settings,`editor_default_email_recipients`),r=N(e.settings,`members_signup_access`);return(0,X.jsx)(nr,{engagementEnabled:r!==`none`&&n!==`disabled`,newslettersUiEnabled:nn(n),paidMembersEnabled:N(e.settings,`paid_members_enabled`)===!0})};export{rr as default};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{o as r}from"./framework-provider-CmtnPXIT.js";import{o as i}from"./hooks-D6EE7BIt.js";import{n as a}from"./dist-Ndy-PuGN.js";import{n as o,t as s}from"./dist-DMFGvqqU.js";import{t as c}from"./currency-CQsJu8iC.js";import{c as l,l as u,m as d,t as f}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as p}from"./router-provider-DSQfprxH.js";import{c as m,v as h}from"./dist-Cb5RSHSg.js";import{t as g}from"./box-By_EgGtm.js";import{t as _}from"./container-LiZf3XdY.js";import{t as v}from"./switch-CE2NuMn-.js";import{i as ee,n as y,o as b,s as te,t as x}from"./select-CkXqNJDJ.js";import{a as ne,i as re,n as ie,o as ae,r as oe,t as se}from"./breadcrumb-CjOH7LCU.js";import{n as S,t as C}from"./card-aUHX0hyR.js";import{t as ce}from"./empty-indicator-WB1WgT9h.js";import{t as w}from"./label-BMC3dzLI.js";import{n as le,o as ue,t as T}from"./input-group-2XU-iuh_.js";import{t as de}from"./textarea-d9qEkMOP.js";import{i as fe}from"./users-B6hIds6n.js";import{$a as E,$n as pe,$r as D,A as me,Ba as O,Bo as k,Co as A,D as j,Da as M,Dn as N,Dr as P,Er as F,F as I,Fa as he,I as ge,Ka as _e,Lo as L,N as ve,O as ye,Or as R,Os as be,P as xe,Po as z,Pr as B,Qi as Se,Ri as V,S as Ce,So as we,Sr as H,Tr as U,Ur as Te,Wa as W,Yo as Ee,Yr as De,Za as Oe,Zi as ke,Zr as Ae,ai as je,ao as Me,ar as G,b as Ne,cr as K,dr as Pe,eo as Fe,fr as Ie,ga as Le,gr as Re,hr as ze,io as Be,j as Ve,jn as He,jo as Ue,k as We,lr as Ge,m as Ke,mr as qe,no as Je,ns as Ye,or as Xe,pr as Ze,ri as Qe,ro as $e,to as et,tr as tt,wr as q,xs as nt,y as rt}from"./index-DUXM0NlS.js";import{t as it}from"./page-header-DAvDYKO9.js";import{a as at}from"./tiers-Da6kxHQP.js";import{r as ot}from"./newsletters-Du0lzskS.js";import{n as J,t as st}from"./use-hash-link-navigation-guard-B9j6HIrV.js";import{c as ct,d as lt,l as ut,r as dt}from"./member-custom-fields-BvFKEpxJ.js";import{n as ft,r as pt}from"./label-picker-Bnlru5tO.js";var Y=e(t(),1),mt=new Set([`active`,`trialing`,`unpaid`,`past_due`]);function ht(e){return(e.subscriptions??[]).some(e=>mt.has(e.status))}function gt(e){return e?`Delete member + Cancel subscription`:`Delete member`}var X=n(),_t=({open:e,onOpenChange:t,member:n,allowLeaveWithUnsavedChanges:r})=>{let i=p(),o=j(),[s,c]=Y.useState(!1);Y.useEffect(()=>{e&&c(!1)},[e]);let l=ht(n),u=n.email||n.name||`this member`,d=async()=>{try{let e=l&&s;await o.mutateAsync({id:n.id,cancel:e}),a.success(e?`${u} was deleted and their Stripe subscription was cancelled.`:`${u} was deleted.`),t(!1),r(),i(`/members`)}catch{a.error(`Couldn’t delete the member. Please try again.`)}};return(0,X.jsx)(H,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,X.jsxs)(q,{"data-testid":`delete-member-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(R,{children:`Delete member account`}),(0,X.jsxs)(U,{children:[`Permanently delete `,(0,X.jsx)(`strong`,{children:u}),` from Ghost.`]})]}),l&&(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium`,children:`Also cancel subscription in Stripe`}),(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If disabled, the member’s premium subscription will continue`})]}),(0,X.jsx)(v,{"aria-label":`Also cancel subscription in Stripe`,checked:s,"data-testid":`delete-member-cancel-stripe`,disabled:o.isPending,onCheckedChange:c})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{"data-testid":`cancel-delete-member`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(B,{"data-testid":`confirm-delete-member`,disabled:o.isPending,variant:`destructive`,onClick:()=>void d(),children:o.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Deleting`})]}):gt(s&&l)})]})]})})},vt=`Disabled from member settings`,yt=({open:e,onOpenChange:t,member:n})=>{let i=r(),o=ye(),[s,c]=Y.useState(!1);Y.useEffect(()=>{e&&c(!1)},[e]);let l=n.name||n.email||`this member`,u=async()=>{try{await o.mutateAsync({id:n.id,reason:vt,hideComments:s})}catch{a.error(`Couldn’t disable commenting. Please try again.`);return}a.success(`Commenting has been disabled for ${l}.`),t(!1),i.invalidateQueries({queryKey:[`MembersResponseType`]})};return(0,X.jsx)(H,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,X.jsxs)(q,{"data-testid":`disable-commenting-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(R,{children:`Disable commenting`}),(0,X.jsxs)(U,{children:[(0,X.jsx)(`strong`,{children:l}),` won’t be able to comment in the future. You can re-enable commenting anytime.`]})]}),(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:(0,X.jsx)(`h4`,{className:`text-sm font-medium`,children:`Hide all previous comments`})}),(0,X.jsx)(v,{"aria-label":`Hide all previous comments`,checked:s,"data-testid":`disable-commenting-hide-comments`,disabled:o.isPending,onCheckedChange:c})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{"data-testid":`cancel-disable-commenting`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(B,{"data-testid":`confirm-disable-commenting`,disabled:o.isPending,onClick:()=>void u(),children:o.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Disabling`})]}):`Disable commenting`})]})]})})},bt=({open:e,onOpenChange:t,memberId:n})=>{let i=r();Y.useEffect(()=>{e&&i.removeQueries({queryKey:[`MemberSigninUrlResponseType`]})},[e,i]);let{data:o,isFetching:s,isError:c}=Ne(n,{enabled:e,defaultErrorHandler:!1}),l=o?.url??``,u=c||!s&&!c&&!l,[d,f]=Y.useState(!1),p=Y.useRef(null),m=Y.useCallback(()=>{p.current!==null&&(clearTimeout(p.current),p.current=null)},[]);Y.useEffect(()=>{e||(m(),f(!1))},[e,m]),Y.useEffect(()=>m,[m]);let h=async()=>{try{await navigator.clipboard.writeText(l),f(!0),m(),p.current=setTimeout(()=>{f(!1),p.current=null},1e3)}catch{a.error(`Couldn’t copy the impersonation link`)}};return(0,X.jsx)(H,{open:e,onOpenChange:t,children:(0,X.jsxs)(q,{"data-testid":`impersonate-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(R,{children:`Impersonate member`}),(0,X.jsx)(U,{children:`A single-use signin link that works for 24 hours. Anyone with the link can sign in as this member.`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`member-signin-url`,children:`Signin link`}),(0,X.jsx)(K,{"data-testid":`member-signin-url`,id:`member-signin-url`,value:s?`Generating link…`:u?`Failed to generate link`:l,readOnly:!0})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{variant:`outline`,onClick:()=>t(!1),children:`Close`}),(0,X.jsx)(B,{disabled:s||u||!l,onClick:()=>void h(),children:s?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Generating link`})]}):d?`Copied`:`Copy link`})]})]})})},xt=({open:e,onOpenChange:t,member:n})=>{let r=xe(),i=n.name||n.email||`This member`,o=async()=>{try{await r.mutateAsync({id:n.id}),a.success(`${i} has been signed out from all devices.`),t(!1)}catch{a.error(`Couldn’t sign the member out. Please try again.`)}};return(0,X.jsx)(Ge,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(Ie,{"data-testid":`logout-member-modal`,children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(Re,{children:`Sign out member from all devices?`}),(0,X.jsxs)(Ze,{children:[(0,X.jsx)(`strong`,{children:i}),` will be signed out of all active sessions, and will need to sign in again upon return.`]})]}),(0,X.jsxs)(qe,{children:[(0,X.jsx)(Pe,{disabled:r.isPending,children:`Cancel`}),(0,X.jsx)(B,{"data-testid":`confirm-logout-member`,disabled:r.isPending,variant:`destructive`,onClick:()=>void o(),children:r.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Signing out`})]}):`Sign out`})]})]})})};function St(e){return e.can_comment===!1}function Ct(e){return St(e)?`Enable commenting`:`Disable commenting`}var wt=({member:e,allowLeaveWithUnsavedChanges:t})=>{let n=r(),{data:o}=i(),[s,c]=Y.useState(!1),[l,u]=Y.useState(!1),[d,f]=Y.useState(!1),[p,m]=Y.useState(!1),h=Ve(),g=I(),_=h.isPending||h.isSuccess&&g,v=St(e),ee=Ct(e),y=e.name||e.email||`this member`;if(!o||!fe(o))return null;let b=async()=>{if(!v){f(!0);return}try{await h.mutateAsync({id:e.id}),a.success(`Commenting has been enabled for ${y}.`)}catch{a.error(`Couldn’t enable commenting. Please try again.`);return}n.invalidateQueries({queryKey:[`MembersResponseType`]})};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(De,{children:[(0,X.jsx)(je,{asChild:!0,children:(0,X.jsx)(B,{"aria-label":`Actions`,className:`size-(--control-height)`,"data-testid":`member-actions`,size:`icon`,variant:`outline`,children:(0,X.jsx)(L,{size:16})})}),(0,X.jsxs)(Ae,{align:`end`,children:[(0,X.jsx)(D,{"data-testid":`member-actions-impersonate`,onSelect:()=>c(!0),children:`Impersonate`}),(0,X.jsx)(D,{"data-testid":`member-actions-logout`,onSelect:()=>u(!0),children:`Sign out of all devices`}),(0,X.jsx)(D,{"data-testid":`member-actions-commenting`,disabled:_,onSelect:()=>void b(),children:ee}),(0,X.jsx)(Qe,{}),(0,X.jsx)(D,{className:`text-destructive focus:text-destructive`,"data-testid":`member-actions-delete`,onSelect:()=>m(!0),children:`Delete member`})]})]}),(0,X.jsx)(bt,{memberId:e.id,open:s,onOpenChange:c}),(0,X.jsx)(xt,{member:e,open:l,onOpenChange:u}),(0,X.jsx)(yt,{member:e,open:d,onOpenChange:f}),(0,X.jsx)(_t,{allowLeaveWithUnsavedChanges:t,member:e,open:p,onOpenChange:m})]})},Z=e(h(),1);function Tt(e){return e?/^(https?:\/\/|\/|#\/)/i.test(e):!1}var Et=new Set([`bif`,`clp`,`djf`,`gnf`,`jpy`,`kmf`,`krw`,`mga`,`pyg`,`rwf`,`ugx`,`vnd`,`vuv`,`xaf`,`xof`,`xpf`]);function Dt(e,t){let n=Et.has(t.toLowerCase())?e:e/100,r=n%1==0;try{return new Intl.NumberFormat(`en-US`,{style:`currency`,currency:t.toUpperCase(),minimumFractionDigits:r?0:2,maximumFractionDigits:r?0:2}).format(n)}catch{return`${n}`}}function Ot(e){return e?.trim()||null}function kt(e){let t;return e.type===`login_event`&&(t=`logged-in`),e.type===`payment_event`&&(t=`subscriptions`),e.type===`newsletter_event`&&(t=e.data.subscribed?`subscribed-to-email`:`unsubscribed-from-email`),e.type===`subscription_event`&&(t=`subscriptions`,e.data.type===`canceled`&&(t=`canceled-subscription`)),(e.type===`signup_event`||e.type===`subscription_event`&&e.data.type===`created`&&e.data.signup)&&(t=`signed-up`),e.type===`email_opened_event`&&(t=`opened-email`),(e.type===`email_sent_event`||e.type===`automated_email_sent_event`)&&(t=`sent-email`),e.type===`email_delivered_event`&&(t=`received-email`),e.type===`email_failed_event`&&(t=`email-delivery-failed`),e.type===`email_complaint_event`&&(t=`email-delivery-spam`),e.type===`comment_event`&&(t=`comment`),(e.type===`click_event`||e.type===`aggregated_click_event`)&&(t=`click`),e.type===`feedback_event`&&(t=e.data.score===1?`more-like-this`:`less-like-this`),e.type===`donation_event`&&(t=`subscriptions`),(e.type===`gift_purchase_event`||e.type===`gift_redemption_event`||e.type===`gift_ended_event`)&&(t=`gift`),e.type===`email_change_event`&&(t=`email-changed`),`event-${t}`}function At(e,t){if(e.type===`signup_event`||e.type===`subscription_event`&&e.data.type===`created`&&e.data.signup)return`signed up`;if(e.type===`login_event`)return`logged in`;if(e.type===`payment_event`)return`made payment`;if(e.type===`newsletter_event`){let n=e.data.newsletter,r=t&&n?.name?n.name:`newsletter`;return e.data.subscribed?`subscribed to ${r}`:`unsubscribed from ${r}`}if(e.type===`subscription_event`){let t=e.data.type;return t===`created`?`started paid subscription`:t===`canceled`?`canceled paid subscription`:t===`reactivated`?`reactivated paid subscription`:t===`expired`?`ended paid subscription`:`changed paid subscription`}if(e.type===`email_opened_event`)return`opened email`;if(e.type===`email_sent_event`)return`sent email`;if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source!==`automation_action_revision`)return`received welcome email (${(t?.slug||``).includes(`paid`)?`Paid`:`Free`})`;let n=Ot(t.subject);return n?`received automated email: ${n}`:`received automated email`}if(e.type===`email_delivered_event`)return`received email`;if(e.type===`email_failed_event`)return`bounced email`;if(e.type===`email_complaint_event`)return`email flagged as spam`;if(e.type===`comment_event`)return e.data.parent?`replied to comment`:`commented`;if(e.type===`click_event`)return`clicked link in email`;if(e.type===`aggregated_click_event`){let t=e.data.count?.clicks??1;return t<=1?`clicked link in email`:`clicked ${t} links in email`}if(e.type===`feedback_event`)return e.data.score===1?`more like this`:`less like this`;if(e.type===`email_change_event`)return e.data.from_email&&e.data.to_email?`Email address changed from ${e.data.from_email} to ${e.data.to_email}`:`Email address changed`;if(e.type===`donation_event`)return`Made a one-time payment`;if(e.type===`gift_purchase_event`){let t=e.data.amount,n=e.data.currency,r=e.data.tier_name,i=e.data.duration,a=e.data.cadence;return typeof t==`number`&&n&&r&&typeof i==`number`&&a?`Purchased gift subscription for ${Dt(t,n)} (${r}, ${i} ${i===1?a:`${a}s`})`:`Purchased gift subscription`}if(e.type===`gift_redemption_event`)return`started gift subscription`;if(e.type===`gift_ended_event`)return`gift subscription expired`}function jt(e,t){if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source===`automation_action_revision`){let e=Ot(t.subject);return e?`received automated email: ${e}`:`received automated email`}}return At(e,t)}function Mt(e){if(e.type===`signup_event`||e.type===`subscription_event`||e.type===`donation_event`){let t=e.data.attribution;if(t?.title)return t.title}if(e.type===`comment_event`||e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.title)return t.title}return``}function Nt(e){let t=e.data.attribution;return t?.referrer_source?{name:t.referrer_source,url:t.referrer_url??null}:null}function Pt(e,t){if(e.type===`signup_event`&&t.paidMembersEnabled){let t=e.data.created_with_status;return t&&t!==`free`?null:`Free`}if(e.type===`gift_redemption_event`)return e.data.tier_name??void 0}function Ft(e){if(e.type===`click_event`)return e.data.link?.to}function It(e){if(e.type===`comment_event`||e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.url)return t.url}if(e.type===`signup_event`||e.type===`subscription_event`||e.type===`donation_event`){let t=e.data.attribution;if(t?.url)return t.url}}function Lt(e){if(e.type===`click_event`||e.type===`feedback_event`){let t=e.data.post;if(t?.id)return`#/posts/analytics/${t.id}`}if((e.type===`signup_event`||e.type===`subscription_event`)&&e.data.attribution_type===`post`&&e.data.attribution_id)return`#/posts/analytics/${e.data.attribution_id}`}function Rt(e,t){let n=Ot(e.data.member?.name),r=e.data.member?n||e.data.member.email||``:e.data.name||e.data.email||``,i=e.data.member?{...e.data.member,name:n??void 0}:e.data.member;return{id:e.data.id,memberId:e.data.member_id??e.data.member?.id,member:i,emailId:e.data.email_id,email:e.data.email,icon:kt(e),subject:r,action:At(e,t.hasMultipleNewsletters),actionTitle:jt(e,t.hasMultipleNewsletters),join:`–`,object:Mt(e),source:Nt(e),info:Pt(e,t),description:Ft(e),url:It(e),route:Lt(e),timestamp:e.data.created_at}}var zt=({iconName:e})=>{let t={className:`shrink-0 text-muted-foreground`,size:16};switch(e){case`event-signed-up`:return(0,X.jsx)(V,{...t});case`event-logged-in`:return(0,X.jsx)(Me,{...t});case`event-subscriptions`:return(0,X.jsx)(k,{...t});case`event-canceled-subscription`:return(0,X.jsx)(Ee,{...t});case`event-subscribed-to-email`:return(0,X.jsx)(Je,{...t});case`event-unsubscribed-from-email`:return(0,X.jsx)(Be,{...t});case`event-opened-email`:return(0,X.jsx)($e,{...t});case`event-received-email`:return(0,X.jsx)(E,{...t});case`event-sent-email`:return(0,X.jsx)(Le,{...t});case`event-email-delivery-failed`:return(0,X.jsx)(Fe,{...t});case`event-email-delivery-spam`:return(0,X.jsx)(et,{...t});case`event-email-changed`:return(0,X.jsx)(nt,{...t});case`event-comment`:return(0,X.jsx)(W,{...t});case`event-click`:return(0,X.jsx)(O,{...t});case`event-more-like-this`:return(0,X.jsx)(ke,{...t});case`event-less-like-this`:return(0,X.jsx)(Se,{...t});case`event-gift`:return(0,X.jsx)(A,{...t});default:return(0,X.jsx)(be,{...t})}},Bt=({memberId:e})=>(0,X.jsx)(`a`,{className:`block pt-3 font-medium text-primary hover:underline`,"data-testid":`member-activity-view-all`,href:`#/members-activity?member=${e}`,children:`View all member activity →`}),Vt=`All events related to this member will be shown here.`,Ht=e=>e?e.charAt(0).toUpperCase()+e.slice(1):``;function Ut(e){if(e&&typeof e==`object`){let t=e.subject;return t?`“${t}”`:`Email`}}var Wt=({event:e})=>{if(!e.action)return null;let t=Ut(e.email),n=e.object&&(e.route||Tt(e.url)),r=!n&&t,i=e.timestamp?(0,Z.default)(e.timestamp).fromNow():`—`;return(0,X.jsxs)(`div`,{className:`flex items-start gap-3 py-3`,"data-testid":`member-activity-event`,children:[(0,X.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-muted`,children:(0,X.jsx)(zt,{iconName:e.icon})}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:[(0,X.jsxs)(`div`,{className:`text-sm leading-snug`,children:[(0,X.jsx)(`span`,{"data-testid":`member-activity-action`,children:Ht(e.action)}),e.info&&(0,X.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,e.info,`)`]}),n&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),e.route?(0,X.jsx)(`a`,{className:`hover:underline`,href:e.route,children:e.object}):(0,X.jsx)(`a`,{className:`hover:underline`,href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:e.object})]}),r&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:t})]})]}),e.description&&(0,X.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.description}),(0,X.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i})]})]})},Gt=({memberId:e,hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})=>{let{data:i,isLoading:a}=ve(e??``,{limit:`5`,enabled:!!e}),o=(i?.events??[]).map(e=>Rt(e,{hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})),s=new Set;return e?(0,X.jsxs)(`section`,{className:`flex flex-col gap-3`,"data-testid":`member-activity-feed`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,children:`Activity`}),(0,X.jsx)(C,{children:(0,X.jsxs)(S,{className:`pt-3`,children:[a?(0,X.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,X.jsx)(Xe,{className:`h-10`}),(0,X.jsx)(Xe,{className:`h-10`}),(0,X.jsx)(Xe,{className:`h-10`})]}):o.length===0?(0,X.jsx)(`p`,{className:`py-4 text-center text-sm text-muted-foreground`,"data-testid":`member-activity-empty`,children:`No activity yet`}):(0,X.jsx)(`div`,{className:`divide-y divide-border`,children:o.map(e=>{let t=e.id||`${e.timestamp??`?`}-${e.icon}-${e.action}`,n=t,r=1;for(;s.has(n);)n=`${t}#${r}`,r+=1;return s.add(n),(0,X.jsx)(Wt,{event:e},n)})}),!a&&o.length>0&&(0,X.jsx)(Bt,{memberId:e})]})})]}):(0,X.jsxs)(`section`,{className:`flex flex-col gap-3`,"data-testid":`member-activity-feed`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,children:`Activity`}),(0,X.jsx)(C,{children:(0,X.jsx)(S,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(ce,{description:Vt,title:`Activity`,children:(0,X.jsx)(be,{})})})})})]})},Kt=[`line1`,`line2`,`city`,`state`,`postal_code`,`country`],qt=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function Q(e){return{name:(e.name??``).trim(),email:(e.email??``).trim(),note:e.note??``,labels:(e.labels??[]).map(e=>({name:e.name,slug:e.slug})).sort((e,t)=>e.slug<t.slug?-1:+(e.slug>t.slug)),newsletters:(e.newsletters??[]).map(e=>e.id).sort()}}function Jt(e){let t={};for(let[n,r]of Object.entries(e??{}))if(typeof r==`string`&&r.trim()!==``)t[n]=r.trim();else if(typeof r==`object`&&r&&!Array.isArray(r)){let e=Xt(r);e&&(t[n]=e)}return t}function Yt(e){let t={};for(let n of Kt){let r=e[n];typeof r==`string`&&(t[n]=r.trim())}return Object.values(t).some(e=>e!==``)?t:void 0}function Xt(e){let t={};for(let n of Kt){let r=e[n];typeof r==`string`&&r.trim()!==``&&(t[n]=r.trim())}return Object.keys(t).length?t:void 0}function Zt(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t].sort()}function Qt(e){return qt.test(e.trim())}function $t(e,t){return t?e.trim()===``?`Email is required.`:Qt(e)?null:`Invalid email.`:null}function en(e){if(!e?.suppressed)return null;let t=e.info;if(!t)return{label:null};let{reason:n,timestamp:r}=t,i=(0,Z.default)(new Date(r)).format(`D MMM YYYY`);switch(n){case`fail`:return{reason:n,label:`Bounced on ${i}`};case`spam`:return{reason:n,label:`Flagged as spam on ${i}`};default:return{reason:n,label:`Email disabled on ${i}`}}}function tn(e){return e?e.filter(e=>e.subscribe_on_signup===!0&&e.visibility===`members`).map(e=>e.id):[]}function nn(e){return e!==`disabled`}function rn(e){return 500-[...e].length}function an(e,t,n){let r=dn(t),i={id:e,name:r.name,email:r.email,note:r.note,labels:r.labels};return s(r.newsletters,n.newsletters)||(i.newsletters=r.newsletters.map(e=>({id:e}))),i}function on(e){return typeof e==`string`?e.trim()||void 0:Yt(e)}function sn(e,t,n){return{id:e,custom_fields:{[t]:on(n)??null}}}function cn(e,t){let n={};for(let r of t){let t=e[r.key],i=t===void 0?void 0:on(t);if(i===void 0)continue;let a=lt[r.type];if(!a)continue;let o=a.value.safeParse(i);if(!o.success)for(let e of o.error.issues){let t=[r.key,...e.path].join(`.`);n[t]??=e.message}}return n}function ln(e){let t=e?.data,n={};for(let e of t?.errors??[])e.property?.startsWith(`custom_fields.`)&&(n[e.property.slice(14)]=e.context||e.message||`Invalid value.`);return Object.keys(n).length?n:void 0}function un(e,t){return e.map(e=>t.get(e)??{name:e,slug:e})}function dn(e){return{name:e.name.trim(),email:e.email.trim(),note:e.note,labels:e.labels,newsletters:e.newsletters}}function fn(e,t){return!e||!!t&&s(dn(e),t)}function pn(e){if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function mn(e){let t=pn(e);return t?t.country_code===`US`&&t.region?`${t.region}, US`:t.country||`Unknown location`:`Unknown location`}function hn(e){let t=[e.state,e.postal_code].filter(Boolean).join(` `);return[e.line1,e.line2,e.city,t,e.country].filter(Boolean).join(`, `)}function gn(e){let t=e?.referrer_source;return!t||t===`Created manually`?null:t}var _n=ut(`address`).subFields??{},vn=({message:e})=>e?(0,X.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:e}):null,yn=({inputId:e,value:t,errors:n,disabled:r,onChange:i})=>(0,X.jsx)(`div`,{className:`grid gap-x-4 gap-y-3 md:grid-cols-2`,children:Kt.map(a=>{let o=`${e}-${a}`,s=n?.[a];return(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:o,children:_n[a]??a}),(0,X.jsx)(K,{"aria-invalid":s?!0:void 0,disabled:r,id:o,value:t[a]??``,onChange:e=>i({...t,[a]:e.target.value})}),(0,X.jsx)(vn,{message:s})]},a)})}),bn=({field:e,inputId:t,value:n,errors:r,disabled:i,onChange:a})=>{let o=r?.[``];switch(ct(e).input){case`text`:return(0,X.jsx)(K,{"aria-invalid":o?!0:void 0,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`textarea`:return(0,X.jsx)(de,{"aria-invalid":o?!0:void 0,className:`max-w-full resize-y`,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`address`:return(0,X.jsx)(yn,{disabled:i,errors:r,inputId:t,value:typeof n==`object`&&n?n:{},onChange:a});default:return null}},xn=({memberId:e,field:t,initialValue:n,onClose:r})=>{let i=ct(t).input===`address`,[o,c]=Y.useState(n??(i?{}:``)),[l,u]=Y.useState(!1),[d,f]=Y.useState(),p=We(),m=cn({[t.key]:o},[t]),h={...l?m:{},...d},g=Object.fromEntries(Object.entries(h).map(([e,n])=>[e===t.key?``:e.slice(t.key.length+1),n])),_=`member-custom-field-${t.key}`,v=!s(Jt({[t.key]:o}),Jt({[t.key]:n}));return(0,X.jsx)(H,{open:!0,onOpenChange:e=>{!e&&!p.isPending&&r()},children:(0,X.jsxs)(q,{"data-testid":`member-custom-field-edit-modal`,onEscapeKeyDown:e=>{(v||p.isPending)&&e.preventDefault()},onInteractOutside:e=>{(v||p.isPending)&&e.preventDefault()},children:[(0,X.jsx)(P,{children:(0,X.jsx)(R,{children:t.name})}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[!i&&(0,X.jsx)(w,{className:`sr-only`,htmlFor:_,children:t.name}),(0,X.jsx)(bn,{disabled:p.isPending,errors:g,field:t,inputId:_,value:o,onChange:e=>{f(void 0),c(e)}}),(0,X.jsx)(vn,{message:g[``]})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{disabled:p.isPending,variant:`outline`,onClick:r,children:`Cancel`}),(0,X.jsx)(B,{className:`min-w-16`,disabled:p.isPending,onClick:()=>{if(!p.isPending){if(!v){r();return}if(Object.keys(m).length>0){u(!0);return}p.mutate(sn(e,t.key,o),{onSuccess:()=>{a.success(`${t.name} saved`),r()},onError:e=>{let n=ln(e);f(n),n||a.error(`${t.name} couldn’t be saved`)}})}},children:p.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):`Save`})]})]})})};function Sn(e){return e===void 0?null:typeof e==`string`?e:hn(e)||null}var Cn=({memberId:e,customFields:t,disabled:n})=>{let{data:r,isLoading:i}=dt(),a=r?.members_custom_fields??[],o=Jt(t),[s,c]=Y.useState(null);return i||a.length===0?null:(0,X.jsxs)(`section`,{"aria-labelledby":`member-custom-fields-heading`,className:`flex flex-col gap-3`,"data-testid":`member-custom-fields-field`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-custom-fields-heading`,children:`Custom fields`}),(0,X.jsx)(C,{children:(0,X.jsx)(S,{className:`px-6 py-4`,children:(0,X.jsx)(`ul`,{children:a.map(e=>{let t=Sn(o[e.key]);return(0,X.jsx)(`li`,{className:`border-b border-border transition-colors last:border-b-0 hover:border-b-transparent [&:has(+li:hover)]:border-b-transparent`,children:(0,X.jsxs)(`button`,{"aria-label":t?`Edit ${e.name}: ${t}`:`Edit ${e.name}`,className:`group -mx-3 flex w-[calc(100%+1.5rem)] items-center justify-between gap-4 rounded-md p-3 text-left transition-colors hover:bg-table-row-hover disabled:cursor-not-allowed disabled:opacity-50`,disabled:n,type:`button`,onClick:()=>{window.getSelection()?.toString()||c(e)},children:[(0,X.jsxs)(`span`,{className:`min-w-0`,children:[(0,X.jsx)(`span`,{className:`block text-sm text-muted-foreground`,children:e.name}),t?(0,X.jsx)(`span`,{className:`block break-words select-text`,children:t}):(0,X.jsx)(`span`,{className:`block text-muted-foreground`,children:`–`})]}),(0,X.jsx)(he,{"aria-hidden":`true`,className:`shrink-0 text-muted-foreground opacity-0 transition-all group-hover:opacity-100 group-focus-visible:opacity-100`,size:16})]})},e.key)})})})}),s&&(0,X.jsx)(xn,{field:s,initialValue:o[s.key],memberId:e,onClose:()=>c(null)},s.key)]})},wn=({labels:e,disabled:t,onChange:n})=>{let r=e.map(e=>e.slug),i=Y.useRef(e);i.current=e;let a=Y.useRef(new Map),o=e=>{for(let t of e)a.current.set(t.slug,{name:t.name,slug:t.slug})};o(e);let s=ft({selectedSlugs:r,onSelectionChange:e=>n(un(e,a.current))});o(s.labels);let c=async e=>{let t=await s.createLabel(e);if(t){let e={name:t.name,slug:t.slug};a.current.set(t.slug,e),n([...i.current.filter(e=>e.slug!==t.slug),e])}return t};return(0,X.jsx)(`div`,{className:t?`pointer-events-none opacity-60`:void 0,"data-testid":`member-labels-field`,...t?{inert:``}:{},children:(0,X.jsx)(pt,{isCreating:s.isCreating,labels:s.labels,optionSource:s.optionSource,placeholder:``,resolvedSelectedLabels:s.resolvedSelectedLabels,selectedSlugs:r,onCreate:c,onDelete:s.deleteLabel,onEdit:s.editLabel,onToggle:s.toggleLabel})})},Tn=({draft:e,emailError:t,disabled:n,onChange:r,onEmailBlur:i,onNameBlur:a})=>{let o=rn(e.note),s=500-o,c=o<0?`text-destructive`:s>=500*.8?`text-state-warning`:`text-state-success`;return(0,X.jsxs)(`div`,{className:`grid items-stretch gap-6 md:grid-cols-2`,"data-testid":`member-detail-form`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`member-name`,children:`Name`}),(0,X.jsx)(K,{disabled:n,id:`member-name`,value:e.name,onBlur:a,onChange:e=>r({name:e.target.value})})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`member-email`,children:`Email`}),(0,X.jsx)(K,{"aria-invalid":!!t,disabled:n,id:`member-email`,type:`email`,value:e.email,onBlur:i,onChange:e=>r({email:e.target.value})}),t&&(0,X.jsx)(`p`,{className:`text-sm text-destructive`,children:t})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{children:`Labels`}),(0,X.jsx)(wn,{disabled:n,labels:e.labels,onChange:e=>r({labels:e})})]})]}),(0,X.jsxs)(`div`,{className:`flex min-h-0 flex-col gap-1.5`,children:[(0,X.jsxs)(w,{htmlFor:`member-note`,children:[`Note `,(0,X.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(not visible to member)`})]}),(0,X.jsxs)(T,{className:`flex-1`,children:[(0,X.jsx)(ue,{className:`h-full`,disabled:n,id:`member-note`,value:e.note,onChange:e=>r({note:e.target.value})}),(0,X.jsx)(le,{align:`block-end`,className:`justify-end`,children:(0,X.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Maximum: `,(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:500}),` characters. You’ve used`,` `,(0,X.jsx)(`span`,{className:m(`font-semibold`,c),children:s})]})})]})]})]})},En=e=>Z.default.utc(e).format(`D MMM YYYY`),$=({icon:e,children:t})=>(0,X.jsxs)(`p`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e}),(0,X.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]}),Dn=e=>e.split(` `)[0]||``,On=({member:e,draftName:t,draftEmail:n,engagementEnabled:r})=>{let i=(t??e?.name??``).trim(),a=(n??e?.email??``).trim(),o=i||a||`New member`,s=!e;return(0,X.jsxs)(`aside`,{className:`flex w-full shrink-0 flex-col gap-6 lg:w-80`,"data-testid":`member-detail-sidebar`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,X.jsx)(tt,{className:`size-12 min-w-12 [&_span]:text-lg`,email:a||void 0,name:i||void 0,src:e?.avatar_image}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`h2`,{className:`truncate text-xl font-semibold`,children:o}),i&&a&&(0,X.jsx)(`a`,{className:`block truncate text-muted-foreground hover:underline`,href:`mailto:${a}`,children:a}),!i&&a&&(0,X.jsx)(`span`,{className:`block truncate text-muted-foreground`,children:a})]})]}),!s&&e&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-2 text-sm`,children:[(0,X.jsx)($,{icon:(0,X.jsx)(Oe,{size:16}),children:(0,X.jsx)(`span`,{"data-testid":`member-detail-location`,children:mn(e.geolocation)})}),(0,X.jsx)($,{icon:(0,X.jsx)(z,{size:16}),children:e.last_seen_at?`Last seen on ${En(e.last_seen_at)}`:`Not seen yet`}),e.can_comment===!1&&(0,X.jsx)($,{icon:(0,X.jsx)(_e,{size:16}),children:`Comments disabled`})]}),(0,X.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 text-sm`,children:[(0,X.jsx)(`h3`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Signup info`}),(0,X.jsxs)($,{icon:(0,X.jsx)(V,{size:16}),children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:En(e.created_at)})]}),(()=>{let t=gn(e.attribution);return t?(0,X.jsxs)($,{icon:(0,X.jsx)(we,{size:16}),children:[`Source — `,(0,X.jsx)(`span`,{className:`text-foreground`,title:t,children:t})]}):null})(),e.attribution?.title&&(0,X.jsxs)($,{icon:(0,X.jsx)(Ue,{size:16}),children:[`Page — `,Tt(e.attribution.url)?(0,X.jsx)(`a`,{className:`truncate text-foreground hover:underline`,href:e.attribution.url,rel:`noopener noreferrer`,target:`_blank`,title:e.attribution.title,children:e.attribution.title}):(0,X.jsx)(`span`,{className:`truncate text-foreground`,title:e.attribution.title,children:e.attribution.title})]})]}),r&&(0,X.jsxs)(`section`,{className:`mt-4 flex flex-col gap-3 text-sm`,"data-testid":`member-detail-engagement`,children:[(0,X.jsx)(`h4`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Engagement`}),(e.email_count??0)===0?(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:i?`We’ll show ${Dn(i)}’s email stats here once they receive their first newsletter.`:`We’ll show this member’s email stats here once they receive their first newsletter.`}):(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails received`}),(0,X.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_count})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails opened`}),(0,X.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_opened_count??0})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Average open rate`}),e.email_open_rate===null||e.email_open_rate===void 0?(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`This metric is calculated once a member has received 5 newsletters.`}):(0,X.jsxs)(`p`,{className:`text-2xl font-semibold`,children:[e.email_open_rate,(0,X.jsx)(`span`,{className:`text-base font-normal text-muted-foreground`,children:`%`})]})]})]})]})]})]})},kn=({memberId:e,emailSuppression:t,subscribedIds:n,disabled:r,onChange:i})=>{let o=e?en(t):null,s=ge(),{data:c,isLoading:l}=ot({searchParams:{filter:`status:active`,limit:`50`}}),u=c?.newsletters??[],d=I(),f=s.isPending||s.isSuccess&&d;return!o&&(l||u.length===0)?null:(0,X.jsxs)(`section`,{"aria-labelledby":`member-newsletters-heading`,className:`flex flex-col gap-3`,"data-testid":`member-newsletters-field`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-newsletters-heading`,children:`Newsletters`}),(0,X.jsx)(C,{children:(0,X.jsx)(S,{className:`p-6`,children:o?(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,"data-testid":`member-suppression-banner`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,X.jsx)(Fe,{className:`mt-0.5 shrink-0 text-muted-foreground`,size:20}),(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`font-medium`,children:`Email disabled`}),o.label&&(0,X.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:o.label}),(0,X.jsx)(`a`,{className:`text-sm text-muted-foreground hover:underline`,href:`https://ghost.org/help/disabled-emails`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]}),(0,X.jsx)(B,{disabled:r||f,onClick:()=>{e&&s.mutate({id:e},{onSuccess:()=>a.success(`Email re-enabled successfully`),onError:()=>a.error(`Failed to re-enable email. Please try again.`)})},children:f?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Re-enabling email`})]}):`Re-enable email`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`ul`,{className:`divide-y divide-border`,children:u.map(e=>{let t=n.includes(e.id);return(0,X.jsxs)(`li`,{className:`flex items-center justify-between gap-4 py-3 first:pt-0 last:pb-0`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`font-medium`,children:e.name}),e.description&&(0,X.jsx)(`p`,{className:`truncate text-sm text-muted-foreground`,children:e.description})]}),(0,X.jsx)(v,{"aria-label":`Subscribe to ${e.name}`,checked:t,"data-testid":`member-subscription-toggle`,disabled:r,onCheckedChange:()=>i(Zt(n,e.id))})]},e.id)})}),(0,X.jsxs)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:[`If disabled, member will `,(0,X.jsx)(`em`,{children:`not`}),` receive newsletter emails`]})]})})})]})},An=`complimentary`,jn=`gift subscription`;function Mn(e){if(e.id)return`paid`;let t=e.plan?.nickname?.toLowerCase()??``;return t===An?`complimentary`:t===jn?`gift`:`paid`}function Nn(e){return e===`year`?`yearly`:`monthly`}function Pn(e){if(e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`))return`Free trial`;let t=e.price?.nickname;return t&&t!==`Monthly`&&t!==`Yearly`?t:null}function Fn(e){return e.status===`canceled`||e.cancel_at_period_end?`Canceled`:`Active`}var In=e=>e?(0,Z.default)(new Date(e)).format(`D MMM YYYY`):``,Ln=e=>e?(0,Z.default)(e).utc().format(`D MMM YYYY`):``;function Rn(e){let t=Mn(e);if(t===`complimentary`||t===`gift`){let t=Ln(e.tier?.expiry_at);return t?`Expires ${t}`:``}let n=e.status===`canceled`&&!e.cancel_at_period_end?``:In(e.current_period_end);return e.status===`canceled`?n?`Ended ${n}`:``:e.cancel_at_period_end?n?`Has access until ${n}`:``:e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`)?`Ends ${In(e.trial_end_at)}`:n?`Renews ${n}`:``}function zn(e){let t=[],n=new Map;for(let r of e){if(!r.price)continue;let e=r.tier??r.price.tier;if(!e?.id)continue;let i=n.get(e.id);i||(i={tier:e,subscriptions:[]},n.set(e.id,i),t.push(i)),i.subscriptions.push(r)}return t}var Bn=[`forever`,`week`,`month`,`half-year`,`year`,`custom`];function Vn(e){return Bn.includes(e)}function Hn(e,t){switch(e){case`forever`:return null;case`week`:return Z.default.utc().add(7,`days`).startOf(`day`).toISOString();case`month`:return Z.default.utc().add(1,`month`).startOf(`day`).toISOString();case`half-year`:return Z.default.utc().add(6,`months`).startOf(`day`).toISOString();case`year`:return Z.default.utc().add(1,`year`).startOf(`day`).toISOString();case`custom`:return t?(0,Z.default)(t,`YYYY-MM-DD`).startOf(`day`).endOf(`day`).set(`millisecond`,0).add((0,Z.default)().utcOffset(),`minutes`).toISOString():null}}var Un=new Set([`active`,`trialing`,`unpaid`,`past_due`]),Wn=[{value:`forever`,label:`Forever`},{value:`week`,label:`1 Week`},{value:`month`,label:`1 Month`},{value:`half-year`,label:`6 Months`},{value:`year`,label:`1 Year`},{value:`custom`,label:`Custom`}],Gn=({open:e,onOpenChange:t,member:n})=>{let{data:r,isLoading:i}=at({searchParams:{filter:`type:paid+active:true`,limit:`all`}}),o=r?.tiers??[],[s,c]=Y.useState(``),[l,u]=Y.useState(`forever`),[d,f]=Y.useState(``);Y.useEffect(()=>{e&&(c(``),u(`forever`),f(``))},[e]);let p=me(),m=We(),[h,g]=Y.useState(!1),_=(n.subscriptions??[]).filter(e=>Mn(e)===`paid`&&Un.has(e.status)),v=(0,Z.default)().format(`YYYY-MM-DD`),ne=!!s&&!h&&(l!==`custom`||!!d),re=async()=>{if(ne){g(!0);try{for(let e of _)await p.mutateAsync({memberId:n.id,subscriptionId:e.id,status:`canceled`});let e=Hn(l,l===`custom`?d:null),r=e?{id:s,expiry_at:e}:{id:s};await m.mutateAsync({id:n.id,...n.email?{email:n.email}:{},tiers:[r]}),a.success(`Complimentary subscription added`),t(!1)}catch{a.error(`Couldn’t add complimentary subscription`)}finally{g(!1)}}};return(0,X.jsx)(H,{open:e,onOpenChange:e=>{h||t(e)},children:(0,X.jsxs)(q,{"data-testid":`add-comp-modal`,children:[(0,X.jsxs)(P,{children:[(0,X.jsx)(R,{children:`Add complimentary subscription`}),(0,X.jsx)(U,{children:`Grants this member access to a paid tier for the chosen duration. Any active paid subscription is canceled first.`})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`comp-tier`,children:`Tier`}),(0,X.jsxs)(x,{value:s,onValueChange:c,children:[(0,X.jsx)(b,{"data-testid":`comp-tier-select`,disabled:i||h,id:`comp-tier`,children:(0,X.jsx)(te,{placeholder:i?`Loading tiers…`:`Select a tier`})}),(0,X.jsx)(y,{children:o.map(e=>(0,X.jsx)(ee,{"data-tier-id":e.id,value:e.id,children:e.name},e.id))})]})]}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`comp-duration`,children:`Duration`}),(0,X.jsxs)(x,{value:l,onValueChange:e=>{Vn(e)&&u(e)},children:[(0,X.jsx)(b,{"data-testid":`comp-duration-select`,disabled:h,id:`comp-duration`,children:(0,X.jsx)(te,{})}),(0,X.jsx)(y,{children:Wn.map(e=>(0,X.jsx)(ee,{value:e.value,children:e.label},e.value))})]})]}),l===`custom`&&(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(w,{htmlFor:`comp-custom-date`,children:`Expires on`}),(0,X.jsx)(K,{"data-testid":`comp-custom-date`,disabled:h,id:`comp-custom-date`,min:v,type:`date`,value:d,onChange:e=>f(e.target.value)})]})]}),(0,X.jsxs)(F,{children:[(0,X.jsx)(B,{disabled:h,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(B,{"data-testid":`comp-add-confirm`,disabled:!ne,onClick:()=>void re(),children:h?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Adding`})]}):`Add subscription`})]})]})})},Kn=({memberId:e,subscription:t})=>{let n=me(),r=I(),i=n.isPending||n.isSuccess&&r,o=t.status===`canceled`,s=t.cancel_at_period_end,c=(r,i,o)=>{n.mutate({memberId:e,subscriptionId:t.id,cancelAtPeriodEnd:r},{onSuccess:()=>a.success(i),onError:()=>a.error(o)})};return(0,X.jsxs)(De,{children:[(0,X.jsx)(je,{asChild:!0,children:(0,X.jsx)(B,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:i,size:`sm`,variant:`outline`,children:i?(0,X.jsx)(G,{size:`sm`}):(0,X.jsx)(L,{})})}),(0,X.jsxs)(Ae,{align:`end`,children:[(0,X.jsx)(D,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/customers/${t.customer.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe customer`})}),(0,X.jsx)(Qe,{}),(0,X.jsx)(D,{asChild:!0,children:(0,X.jsx)(`a`,{href:`https://dashboard.stripe.com/subscriptions/${t.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe subscription`})}),!o&&(s?(0,X.jsx)(D,{"data-testid":`continue-subscription`,onSelect:()=>c(!1,`Subscription continued`,`Couldn’t continue subscription`),children:`Continue subscription`}):(0,X.jsx)(D,{className:`text-destructive focus:text-destructive`,"data-testid":`cancel-subscription`,onSelect:()=>c(!0,`Subscription canceled`,`Couldn’t cancel subscription`),children:`Cancel subscription`}))]})]})},qn=({member:e,tierId:t})=>{let n=We(),[r,i]=Y.useState(!1),o=I(),s=n.isPending||n.isSuccess&&o;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(De,{children:[(0,X.jsx)(je,{asChild:!0,children:(0,X.jsx)(B,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:s,size:`sm`,variant:`outline`,children:s?(0,X.jsx)(G,{size:`sm`}):(0,X.jsx)(L,{})})}),(0,X.jsx)(Ae,{align:`end`,children:(0,X.jsx)(D,{className:`text-destructive focus:text-destructive`,"data-testid":`remove-complimentary`,onSelect:()=>i(!0),children:`Remove complimentary subscription`})})]}),(0,X.jsx)(Ge,{open:r,onOpenChange:e=>{n.isPending||i(e)},children:(0,X.jsxs)(Ie,{children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(Re,{children:`Remove complimentary subscription?`}),(0,X.jsx)(Ze,{children:`The member will lose access to this tier immediately.`})]}),(0,X.jsxs)(qe,{children:[(0,X.jsx)(Pe,{disabled:n.isPending,children:`Cancel`}),(0,X.jsx)(B,{"data-testid":`confirm-remove-complimentary`,disabled:n.isPending,variant:`destructive`,onClick:()=>{let r=(e.tiers??[]).filter(e=>e.id!==t).map(e=>({id:e.id,expiry_at:e.expiry_at??null}));n.mutate({id:e.id,email:e.email,tiers:r},{onSuccess:()=>{a.success(`Complimentary subscription removed`),i(!1)},onError:()=>a.error(`Couldn’t remove complimentary subscription`)})},children:n.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Removing`})]}):`Remove`})]})]})})]})},Jn=e=>{let t=e/100;return t.toLocaleString(void 0,t%1==0?void 0:{minimumFractionDigits:2,maximumFractionDigits:2})},Yn=({sub:e,kind:t})=>{if(t===`complimentary`||t===`gift`)return(0,X.jsx)(`div`,{className:`flex size-20 shrink-0 items-center justify-center rounded-lg bg-muted text-center text-sm font-medium text-muted-foreground`,children:t===`complimentary`?`Comp`:`Gift`});let n=c(e.price.currency),r=Jn(e.price.amount),i=Nn(e.price.interval);return(0,X.jsxs)(`div`,{className:`flex size-20 shrink-0 flex-col items-center justify-center rounded-lg bg-muted text-foreground`,children:[(0,X.jsxs)(`div`,{className:`flex items-start leading-none`,children:[(0,X.jsx)(`span`,{className:`mt-1 text-sm font-semibold`,children:n}),(0,X.jsx)(`span`,{className:`text-3xl font-semibold tracking-tight`,children:r})]}),(0,X.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:i})]})},Xn=e=>e?Z.default.utc(e).format(`D MMM YYYY`):``,Zn=({sub:e})=>{let t=Xn(e.start_date),n=e.attribution?.referrer_source,r=n&&n!==`Unknown`,i=e.attribution?.title?{title:e.attribution.title,url:e.attribution.url??null}:null;return(0,X.jsxs)(`div`,{className:`mt-3 space-y-1 border-t border-border pt-3 text-sm text-muted-foreground`,children:[t&&(0,X.jsxs)(`p`,{children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:t})]}),r&&(0,X.jsxs)(`p`,{children:[`Source — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:n})]}),i&&(0,X.jsxs)(`p`,{children:[`Page — `,i.url?(0,X.jsx)(`a`,{className:`text-foreground hover:underline`,href:i.url,rel:`noopener noreferrer`,target:`_blank`,children:i.title}):(0,X.jsx)(`span`,{className:`text-foreground`,children:i.title})]})]})},Qn=({member:e,sub:t,showDivider:n})=>{let[r,i]=Y.useState(!1),a=Mn(t),o=Fn(t),s=Rn(t),c=Pn(t);return(0,X.jsxs)(`div`,{className:m(`flex items-start justify-between gap-4 py-5 first:pt-0 last:pb-0`,n&&`border-t border-border`),"data-testid":`member-subscription`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-4`,children:[(0,X.jsx)(Yn,{kind:a,sub:t}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1 pt-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`min-w-0 truncate font-semibold`,"data-testid":`member-subscription-tier`,children:t.tier?.name??`Subscription`}),(0,X.jsx)(pe,{"data-testid":`member-subscription-status`,variant:o===`Canceled`?`secondary`:`success`,children:o})]}),(c||s)&&(0,X.jsxs)(`div`,{className:`mt-1 text-sm`,children:[c&&(0,X.jsx)(`span`,{className:`font-semibold text-foreground`,children:c}),c&&s&&(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:` – `}),s&&(0,X.jsx)(`span`,{className:`text-muted-foreground`,children:s})]}),(0,X.jsxs)(`button`,{"aria-expanded":r,className:`mt-1 inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline`,"data-testid":`member-subscription-details-toggle`,type:`button`,onClick:()=>i(e=>!e),children:[`Details`,(0,X.jsx)(Ye,{className:m(`transition-transform`,r&&`rotate-180`),size:14})]}),r&&(0,X.jsx)(Zn,{sub:t})]})]}),a===`paid`&&(0,X.jsx)(Kn,{memberId:e.id,subscription:t}),a===`complimentary`&&t.tier?.id&&(0,X.jsx)(qn,{member:e,tierId:t.tier.id})]})},$n=({member:e,canAddComp:t})=>{let[n,r]=Y.useState(!1);if(!e)return(0,X.jsx)(C,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(S,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(ce,{title:`No subscriptions`,children:(0,X.jsx)(k,{})})})})});let i=zn(e.subscriptions??[]),a=i.length>0,o=t&&(e.tiers?.length??0)===0,s=o?(0,X.jsxs)(B,{"data-testid":`add-complimentary`,variant:`outline`,onClick:()=>r(!0),children:[(0,X.jsx)(M,{className:`mr-1`,size:16}),`Add complimentary subscription`]}):null;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(C,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(S,{className:`pt-6`,children:a?(0,X.jsxs)(X.Fragment,{children:[i.map(t=>(0,X.jsxs)(`div`,{className:`flex flex-col`,children:[t.subscriptions.map((n,r)=>(0,X.jsx)(Qn,{member:e,showDivider:r>0,sub:n},n.id||`${t.tier.id}-${r}`)),t.subscriptions.length>1&&(0,X.jsxs)(`div`,{className:`pt-3 text-sm text-muted-foreground`,children:[t.subscriptions.length,` subscriptions`]})]},t.tier.id)),s&&(0,X.jsx)(`div`,{className:`mt-4 flex justify-center border-t border-border pt-4`,children:s})]}):(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:[(0,X.jsx)(ce,{title:`No subscriptions`,children:(0,X.jsx)(k,{})}),s]})})}),o&&(0,X.jsx)(Gn,{member:e,open:n,onOpenChange:r})]})};function er(e){let t=new URLSearchParams(e),n=t.get(`back`);if(n&&n.startsWith(`/members`))return n;let r=t.get(`post`);return r?`/members?post=${encodeURIComponent(r)}`:`/members`}var tr=`new`,nr=({paidMembersEnabled:e,newslettersUiEnabled:t,engagementEnabled:n})=>{let{member_id:r=``}=d(),i=u(),c=p(),m=er(i.search),h=r===tr,v=Ke(`membersCustomFields`),{data:ee,isLoading:y,error:b,refetch:te}=rt(r,{enabled:!!r&&!h,searchParams:{include:v?`tiers,custom_fields`:`tiers`},defaultErrorHandler:!1}),x=ee?.members?.[0],ce=!h&&!y&&!!b,w=!h&&!y&&!b&&!x,le=We(),ue=Ce(),T=h?ue:le,{data:de}=at({searchParams:{filter:`type:paid+active:true`,limit:`all`},enabled:e}),fe=(de?.tiers?.length??0)>0,{data:E}=ot({searchParams:{filter:`status:active`,limit:`50`}}),pe=E!==void 0,D=(E?.newsletters?.length??0)>1,me=(de?.tiers?.length??0)>1,[O,k]=Y.useState(void 0),A=Y.useRef(void 0),j=Y.useRef(void 0),M=Y.useRef(!1),N=Y.useRef(!1);Y.useEffect(()=>{if(h){if(A.current!==tr){A.current=tr,M.current=!1;let e=Q({});j.current=e,k(e)}return}if(!x)return;let e=Q(x);if(A.current!==x.id){A.current=x.id,j.current=e,k(e);return}let t=j.current;j.current=e,k(n=>fn(n,t)?e:n)},[x,h]),Y.useEffect(()=>{N.current=!1},[r]),Y.useEffect(()=>{if(!h||M.current||!E?.newsletters)return;M.current=!0;let e=tn(E.newsletters);if(e.length===0)return;let t={...j.current??Q({}),newsletters:[...e].sort()};j.current=t,k(t=>t&&{...t,newsletters:[...e].sort()})},[h,E]);let P=h?j.current:x?Q(x):void 0,F=!!O&&!!P&&!s(dn(O),P),I=!!O&&Qt(O.email),[he,ge]=Y.useState(!1);Y.useEffect(()=>{ge(!1)},[x?.id,h]);let _e=O?$t(O.email,he):null,[L,ve]=Y.useState({name:``,email:``});Y.useEffect(()=>{if(h){ve({name:``,email:``});return}x&&ve({name:x.name??``,email:x.email??``})},[x?.id,x?.name,x?.email,h]);let ye=()=>{O&&ve({name:O.name,email:O.email})},R=e=>{T.isError&&T.reset(),k(t=>t&&{...t,...e})},be=()=>{if(!(!O||!F||!I||T.isPending)){if(ye(),h){ue.mutate({email:O.email.trim(),name:O.name.trim()||void 0,note:O.note.trim()||void 0,labels:O.labels.length?O.labels:void 0,newsletters:M.current?O.newsletters.map(e=>({id:e})):void 0},{onSuccess:e=>{let t=e.members?.[0];if(!t){a.error(`Member couldn’t be created`);return}N.current=!0,a.success(`Member created`),c(`/members/${t.id}`,{replace:!0})},onError:()=>{a.error(`Member couldn’t be created`)}});return}!x||A.current!==x.id||le.mutate(an(x.id,O,Q(x)),{onSuccess:e=>{let t=e.members?.[0];if(t){let e=Q(t);j.current=e,k(e)}a.success(`Member updated`)},onError:()=>{a.error(`Member couldn’t be saved`)}})}};o(T.isPending||F);let xe=l(({currentLocation:e,nextLocation:t})=>!N.current&&F&&e.pathname!==t.pathname),z=st(F),Se=xe.state===`blocked`||z.isBlocked,V=`Save`,we=`default`,H=!0;T.isPending?V=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(G,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):F?(V=T.isError?`Retry`:`Save`,we=T.isError?`destructive`:`default`,H=!I):!h&&le.isSuccess&&(V=`Saved`);let U=!!O&&(h||!!x),W=`Member`;return h?W=`New member`:x?W=Te(x):w&&(W=`Member not found`),(0,X.jsx)(g,{className:`size-full`,children:(0,X.jsx)(_,{className:`relative flex h-full flex-col`,size:`page`,children:(0,X.jsxs)(J,{"data-testid":`member-detail`,children:[(0,X.jsx)(J.Header,{children:(0,X.jsxs)(it,{blurredBackground:!1,sticky:!1,children:[(0,X.jsx)(it.Left,{children:(0,X.jsx)(se,{children:(0,X.jsxs)(re,{children:[(0,X.jsx)(ie,{children:(0,X.jsx)(oe,{asChild:!0,children:(0,X.jsx)(f,{"data-test-link":`members-back`,to:m,children:`Members`})})}),(0,X.jsx)(ae,{}),(0,X.jsx)(ie,{children:!h&&y?(0,X.jsx)(Xe,{className:`h-4 w-40`}):(0,X.jsx)(ne,{className:`truncate`,"data-testid":`member-detail-title`,children:W})})]})})}),(h||x)&&(0,X.jsx)(it.Actions,{children:(0,X.jsxs)(it.ActionGroup,{children:[x&&!h&&(0,X.jsx)(wt,{allowLeaveWithUnsavedChanges:()=>{N.current=!0},member:x},x.id),(0,X.jsx)(B,{className:`min-w-16`,disabled:H,variant:we,onClick:be,children:V})]})})]})}),(0,X.jsxs)(J.Body,{children:[ce&&(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3`,"data-testid":`member-detail-load-error`,children:[(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`Couldn’t load this member.`}),(0,X.jsx)(B,{variant:`outline`,onClick:()=>void te(),children:`Retry`})]}),w&&(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,X.jsx)(`p`,{className:`text-muted-foreground`,children:`This member couldn’t be found.`})}),U&&O&&(0,X.jsxs)(`div`,{className:`flex flex-1 flex-col gap-8 lg:flex-row lg:items-start lg:gap-12`,children:[(0,X.jsx)(On,{draftEmail:L.email,draftName:L.name,engagementEnabled:n,member:x}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-8`,children:[(0,X.jsx)(C,{children:(0,X.jsx)(S,{className:`p-6`,children:(0,X.jsx)(Tn,{disabled:T.isPending,draft:O,emailError:_e,onChange:R,onEmailBlur:()=>{ge(!0),ye()},onNameBlur:ye})})}),v&&x&&(0,X.jsx)(Cn,{customFields:x.custom_fields,disabled:T.isPending,memberId:x.id}),t&&(h||x)&&(0,X.jsx)(kn,{disabled:T.isPending,emailSuppression:x?.email_suppression,memberId:x?.id,subscribedIds:O.newsletters,onChange:e=>R({newsletters:e})}),e&&(0,X.jsxs)(`section`,{"aria-labelledby":`member-subscriptions-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-subscriptions-heading`,children:`Subscriptions`}),(0,X.jsx)($n,{canAddComp:fe,member:x})]}),(h||x&&pe)&&(0,X.jsx)(Gt,{hasMultipleNewsletters:D,hasMultipleTiers:me,memberId:x?.id,paidMembersEnabled:e})]})]})]}),(0,X.jsx)(Ge,{open:Se,onOpenChange:e=>{!e&&Se&&(xe.reset?.(),z.reset())},children:(0,X.jsxs)(Ie,{children:[(0,X.jsxs)(ze,{children:[(0,X.jsx)(Re,{children:`Discard unsaved changes?`}),(0,X.jsx)(Ze,{children:`Your changes will be lost if you leave this member.`})]}),(0,X.jsxs)(qe,{children:[(0,X.jsx)(Pe,{children:`Keep editing`}),(0,X.jsx)(B,{variant:`destructive`,onClick:()=>{z.isBlocked?z.proceed():xe.proceed?.()},children:`Leave`})]})]})})]})})})},rr=()=>{let{data:e,isLoading:t}=He({});if(t||!e?.settings)return(0,X.jsx)(g,{className:`size-full`,children:(0,X.jsx)(_,{className:`relative flex h-full flex-col`,size:`page`,children:(0,X.jsx)(J,{children:(0,X.jsx)(J.Body,{children:(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,X.jsx)(G,{size:`lg`})})})})})});let n=N(e.settings,`editor_default_email_recipients`),r=N(e.settings,`members_signup_access`);return(0,X.jsx)(nr,{engagementEnabled:r!==`none`&&n!==`disabled`,newslettersUiEnabled:nn(n),paidMembersEnabled:N(e.settings,`paid_members_enabled`)===!0})};export{rr as default};
@@ -1,4 +1,4 @@
1
- import{o as e,t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{t as r}from"./jsx-runtime-DX3WBWVO.js";import{g as i}from"./framework-provider-CmtnPXIT.js";import{_ as a,m as o,o as s,u as c,v as l,x as u,y as d}from"./hooks-D6EE7BIt.js";import{n as f}from"./dist-Ndy-PuGN.js";import{t as p}from"./build-CsiH26uS.js";import{n as m}from"./offers-Um6ab71O.js";import{f as h,g,l as _}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as v}from"./router-provider-DSQfprxH.js";import{c as y,f as b,p as x,v as S}from"./dist-Cb5RSHSg.js";import{t as C}from"./box-By_EgGtm.js";import{t as w}from"./container-LiZf3XdY.js";import{n as T}from"./filters-3JBQcNtJ.js";import{n as E,o as D,r as O,s as k,t as A}from"./command-DxwBO2pF.js";import{t as j}from"./dropzone-hNxmUvwD.js";import{i as M,n as N,o as P,s as F,t as I}from"./select-D9oU1IoM.js";import{t as L}from"./empty-indicator-WB1WgT9h.js";import{i as ee,n as R,t as z}from"./input-group-6vEPvX9S.js";import{a as B,c as V,n as te,r as H,s as U,t as W}from"./table-TMCgCQK7.js";import{m as ne}from"./users-B6hIds6n.js";import{$a as re,$n as ie,$r as ae,Ba as oe,Bi as se,Bo as ce,Bs as le,C as ue,Da as de,Dn as G,Dr as fe,E as pe,En as me,Eo as he,Er as K,Gi as ge,Jo as _e,Lo as ve,M as ye,Mi as be,Na as xe,Ni as Se,Nn as Ce,Oi as we,Or as Te,Po as Ee,Pr as q,Qn as De,Ra as Oe,Ri as ke,Ro as Ae,S as je,Sr as Me,T as Ne,Tr as Pe,Ts as Fe,V as Ie,Wa as Le,Xi as Re,Yi as ze,Yr as Be,Zr as Ve,_ as He,_a as Ue,_n as We,ai as Ge,ar as Ke,br as qe,cr as Je,dn as Ye,ds as Xe,eo as Ze,es as Qe,fn as $e,fs as et,g as tt,ga as nt,h as rt,hn as it,ia as at,jn as ot,m as st,pn as ct,ps as lt,ra as ut,ri as dt,ro as ft,tr as pt,ts as mt,uo as ht,us as gt,v as _t,vr as vt,w as yt,wo as bt,wr as xt,x as St,xr as Ct}from"./index-BHy2DZX-.js";import{t as J}from"./page-header-CpmxJj5B.js";import{C as wt,S as Tt,T as Et,_ as Dt,a as Ot,b as kt,c as At,d as jt,f as Y,g as Mt,h as Nt,i as Pt,l as Ft,m as It,n as Lt,o as Rt,p as zt,r as Bt,s as Vt,t as Ht,u as Ut,v as Wt,w as Gt,x as Kt,y as qt}from"./filters-CFt_BDe4.js";import{r as Jt}from"./newsletters-Du0lzskS.js";import{t as Yt}from"./list-page-CdsnQR9N.js";import{a as Xt,i as Zt,n as Qt,t as $t}from"./filter-sources-D2zDuJH5.js";import{i as en,n as tn,r as nn,t as rn}from"./virtual-list-RHeEL05L.js";import{t as an}from"./get-site-timezone-HgL0jI_F.js";import{r as on,t as sn,u as cn}from"./member-custom-fields-CmvsuuV_.js";import{n as ln,r as un,t as dn}from"./label-picker-8YlhS2U3.js";import{t as fn}from"./member-route-0Aa52Ntz.js";var X=e(n(),1),Z=r();function pn({open:e,memberCount:t,onOpenChange:n,onConfirm:r,isLoading:i=!1}){let[a,o]=(0,X.useState)([]),s=ln({selectedSlugs:a,onSelectionChange:o}),c=(0,X.useCallback)(e=>{e||o([]),n(e)},[n]);return(0,Z.jsx)(Me,{open:e,onOpenChange:c,children:(0,Z.jsxs)(xt,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Z.jsx)(fe,{children:(0,Z.jsxs)(Te,{children:[`Add label to `,b(t),` `,t===1?`member`:`members`]})}),(0,Z.jsx)(un,{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)(K,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Z.jsx)(q,{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 ${b(a.length)} labels`:`Add label`})]})]})})}function mn({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}=ue({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=ln({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)(Me,{open:e,onOpenChange:m,children:(0,Z.jsxs)(xt,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Z.jsx)(fe,{children:(0,Z.jsxs)(Te,{children:[`Remove label from `,b(t),` `,t===1?`member`:`members`]})}),(0,Z.jsx)(un,{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)(K,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Z.jsx)(q,{disabled:s.length===0||o,onClick:h,children:o?`Removing...`:s.length>1?`Remove ${b(s.length)} labels`:`Remove label`})]})]})})}function hn({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)(Me,{open:e,onOpenChange:g,children:(0,Z.jsxs)(xt,{className:`gap-5`,children:[(0,Z.jsx)(fe,{children:(0,Z.jsx)(Te,{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)(ie,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:t=>{t.stopPropagation(),_(e)},children:[n.name,(0,Z.jsx)(we,{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)(A,{shouldFilter:!1,children:(0,Z.jsxs)(k,{className:`max-h-64 overflow-y-auto`,children:[(0,Z.jsx)(O,{children:`No newsletters found.`}),t.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())).map(e=>(0,Z.jsxs)(D,{value:e.name,onSelect:()=>_(e.id),children:[e.name,c.includes(e.id)&&(0,Z.jsx)(E,{})]},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)(K,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:()=>g(!1),children:`Cancel`}),(0,Z.jsx)(q,{disabled:b,variant:`destructive`,onClick:y,children:a?`Unsubscribing...`:`Unsubscribe`})]})]})})}function gn({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)(Me,{open:e,onOpenChange:c,children:(0,Z.jsxs)(xt,{className:`gap-5`,children:[(0,Z.jsx)(fe,{children:(0,Z.jsx)(Te,{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)(K,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Z.jsx)(q,{disabled:a||o||t<1,variant:`destructive`,onClick:()=>void l(),children:a||o?`Deleting...`:`Download backup & delete members`})]})]})})}function _n({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)(De,{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)(ge,{className:`mt-0.5 size-4 shrink-0`}),(0,Z.jsx)(`p`,{children:e})]}),(0,Z.jsx)(j,{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)(se,{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)(K,{className:`mt-5`,children:(0,Z.jsx)(q,{variant:`outline`,onClick:t,children:`Close`})})]})}var vn=[{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`}],yn={label:`Tier`,value:`import_tier`},bn=[`email`,`name`,`note`,`subscribed_to_emails`,`complimentary_plan`,`stripe_customer_id`,`labels`,`created_at`,`gift_id`];function xn({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...bn,...e?[yn.value]:[],...t.map(e=>e.value)]}function Sn({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...vn,...e?[yn]:[],...t]}var Cn=[`email`],wn=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,Tn=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 En(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 Dn(e,t={}){let n=En(e),r={},i=xn(t);if(e.length>0)for(let t of Object.keys(e[0])){if(!r.name&&/name/i.test(t)&&!cn(t)){r.name=t;continue}!r[t]&&i.includes(t)&&!Cn.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&&wn.test(n)&&!cn(t)&&(r.email=t);a+=1}return r}function On(e){return e.replace(`Value in [members.email] cannot be blank.`,`Missing email address`).replace(`Value in [members.note] exceeds maximum length of 2000 characters.`,`Note is too long`).replace(`Value in [members.subscribed] must be one of true, false, 0 or 1.`,`Value of "Subscribed to emails" must be "true" or "false"`).replace(`Validation (isEmail) failed for email`,`Invalid email address`).replace(/No such customer:[\s\S]*/,`Could not find Stripe customer`)}function kn({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:y(`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)(W,{className:`table-fixed`,children:[(0,Z.jsx)(U,{children:(0,Z.jsxs)(V,{children:[(0,Z.jsx)(B,{className:`w-1/3`,children:`Field`}),(0,Z.jsx)(B,{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:[`(#`,b(o+1),`)`]})]}),(0,Z.jsxs)(`div`,{className:`flex items-center`,children:[(0,Z.jsx)(`button`,{"aria-label":`Show previous sample row`,className:y(`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)(mt,{className:`size-4`})}),(0,Z.jsx)(`button`,{"aria-label":`Show next sample row`,className:y(`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)(Qe,{className:`size-4`})})]})]})}),(0,Z.jsx)(B,{className:`w-1/3`,children:`Import as`})]})}),(0,Z.jsx)(te,{children:h.length>0?h.map(t=>(0,Z.jsxs)(V,{className:y(!t.mapTo&&`bg-muted`),children:[(0,Z.jsx)(H,{className:`text-sm font-medium break-all`,children:t.key}),(0,Z.jsx)(H,{className:y(`text-sm break-all`,!t.value&&`text-muted-foreground`),children:t.value||`\xA0`}),(0,Z.jsx)(H,{children:(0,Z.jsxs)(I,{disabled:e===`UPLOADING`,value:t.mapTo||`__not_imported__`,onValueChange:e=>{d(t.key,e===`__not_imported__`?null:e)},children:[(0,Z.jsx)(P,{className:y(`h-8 text-sm`,!t.mapTo&&`text-muted-foreground`),children:(0,Z.jsx)(F,{})}),(0,Z.jsxs)(N,{children:[(0,Z.jsx)(M,{value:`__not_imported__`,children:`Not imported`}),l.map(e=>(0,Z.jsx)(M,{value:e.value,children:e.label},e.value))]})]})})]},t.key)):(0,Z.jsx)(V,{children:(0,Z.jsx)(H,{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)(un,{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)(K,{className:`mt-5`,children:[(0,Z.jsx)(q,{disabled:e===`UPLOADING`,variant:`outline`,onClick:p,children:`Start over`}),(0,Z.jsx)(q,{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 ${b(a)} ${a===1?`member`:`members`}`:`Import members`})]})]})}function An({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)(K,{className:`mt-5`,children:[(0,Z.jsx)(q,{variant:`outline`,onClick:e,children:`Upload another file`}),(0,Z.jsx)(q,{onClick:t,children:`Got it`})]})]})}var jn=()=>({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 Mn({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)(K,{className:`mt-5`,children:e.errorCount>0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(q,{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)(q,{onClick:t,children:`Try again`}):(0,Z.jsx)(q,{onClick:n,children:`View members`})]}):(0,Z.jsx)(Z.Fragment,{children:e.importedCount===0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:n,children:`Close`}),(0,Z.jsx)(q,{onClick:t,children:`Try again`})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:t,children:`Upload another file`}),(0,Z.jsx)(q,{onClick:n,children:`View members`})]})})})]})}function Nn({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)(ge,{className:`mt-0.5 size-4 shrink-0`}),(0,Z.jsx)(`p`,{children:e})]})}),(0,Z.jsxs)(K,{className:`mt-5`,children:[t&&(0,Z.jsx)(q,{variant:`outline`,onClick:n,children:`Try again`}),(0,Z.jsx)(q,{onClick:r,children:`OK`})]})]})}var Pn=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(`
1
+ import{o as e,t}from"./rolldown-runtime-DAXXjFlN.js";import{t as n}from"./react-Bb3IsNbi.js";import{t as r}from"./jsx-runtime-DX3WBWVO.js";import{g as i}from"./framework-provider-CmtnPXIT.js";import{_ as a,m as o,o as s,u as c,v as l,x as u,y as d}from"./hooks-D6EE7BIt.js";import{n as f}from"./dist-Ndy-PuGN.js";import{t as p}from"./build-CsiH26uS.js";import{n as m}from"./offers-Um6ab71O.js";import{f as h,g,l as _}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as v}from"./router-provider-DSQfprxH.js";import{c as y,f as b,p as x,v as S}from"./dist-Cb5RSHSg.js";import{t as C}from"./box-By_EgGtm.js";import{t as w}from"./container-LiZf3XdY.js";import{n as T}from"./filters-Bz0HsRie.js";import{n as E,o as D,r as O,s as k,t as A}from"./command-BOYMbZa_.js";import{t as j}from"./dropzone-CzhP33wa.js";import{i as M,n as N,o as P,s as F,t as I}from"./select-CkXqNJDJ.js";import{t as L}from"./empty-indicator-WB1WgT9h.js";import{i as ee,n as R,t as z}from"./input-group-2XU-iuh_.js";import{a as B,c as V,n as te,r as H,s as U,t as W}from"./table-BtLcEi1M.js";import{m as ne}from"./users-B6hIds6n.js";import{$a as re,$n as ie,$r as ae,Ba as oe,Bi as se,Bo as ce,Bs as le,C as ue,Da as de,Dn as G,Dr as fe,E as pe,En as me,Eo as he,Er as K,Gi as ge,Jo as _e,Lo as ve,M as ye,Mi as be,Na as xe,Ni as Se,Nn as Ce,Oi as we,Or as Te,Po as Ee,Pr as q,Qn as De,Ra as Oe,Ri as ke,Ro as Ae,S as je,Sr as Me,T as Ne,Tr as Pe,Ts as Fe,V as Ie,Wa as Le,Xi as Re,Yi as ze,Yr as Be,Zr as Ve,_ as He,_a as Ue,_n as We,ai as Ge,ar as Ke,br as qe,cr as Je,dn as Ye,ds as Xe,eo as Ze,es as Qe,fn as $e,fs as et,g as tt,ga as nt,h as rt,hn as it,ia as at,jn as ot,m as st,pn as ct,ps as lt,ra as ut,ri as dt,ro as ft,tr as pt,ts as mt,uo as ht,us as gt,v as _t,vr as vt,w as yt,wo as bt,wr as xt,x as St,xr as Ct}from"./index-DUXM0NlS.js";import{t as J}from"./page-header-DAvDYKO9.js";import{C as wt,S as Tt,T as Et,_ as Dt,a as Ot,b as kt,c as At,d as jt,f as Y,g as Mt,h as Nt,i as Pt,l as Ft,m as It,n as Lt,o as Rt,p as zt,r as Bt,s as Vt,t as Ht,u as Ut,v as Wt,w as Gt,x as Kt,y as qt}from"./filters-yFvybRMe.js";import{r as Jt}from"./newsletters-Du0lzskS.js";import{t as Yt}from"./list-page-CdsnQR9N.js";import{a as Xt,i as Zt,n as Qt,t as $t}from"./filter-sources-CiPLnG9A.js";import{i as en,n as tn,r as nn,t as rn}from"./virtual-list-Dnoafqbk.js";import{t as an}from"./get-site-timezone-HgL0jI_F.js";import{r as on,t as sn,u as cn}from"./member-custom-fields-BvFKEpxJ.js";import{n as ln,r as un,t as dn}from"./label-picker-Bnlru5tO.js";import{t as fn}from"./member-route-0Aa52Ntz.js";var X=e(n(),1),Z=r();function pn({open:e,memberCount:t,onOpenChange:n,onConfirm:r,isLoading:i=!1}){let[a,o]=(0,X.useState)([]),s=ln({selectedSlugs:a,onSelectionChange:o}),c=(0,X.useCallback)(e=>{e||o([]),n(e)},[n]);return(0,Z.jsx)(Me,{open:e,onOpenChange:c,children:(0,Z.jsxs)(xt,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Z.jsx)(fe,{children:(0,Z.jsxs)(Te,{children:[`Add label to `,b(t),` `,t===1?`member`:`members`]})}),(0,Z.jsx)(un,{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)(K,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Z.jsx)(q,{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 ${b(a.length)} labels`:`Add label`})]})]})})}function mn({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}=ue({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=ln({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)(Me,{open:e,onOpenChange:m,children:(0,Z.jsxs)(xt,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Z.jsx)(fe,{children:(0,Z.jsxs)(Te,{children:[`Remove label from `,b(t),` `,t===1?`member`:`members`]})}),(0,Z.jsx)(un,{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)(K,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Z.jsx)(q,{disabled:s.length===0||o,onClick:h,children:o?`Removing...`:s.length>1?`Remove ${b(s.length)} labels`:`Remove label`})]})]})})}function hn({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)(Me,{open:e,onOpenChange:g,children:(0,Z.jsxs)(xt,{className:`gap-5`,children:[(0,Z.jsx)(fe,{children:(0,Z.jsx)(Te,{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)(ie,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:t=>{t.stopPropagation(),_(e)},children:[n.name,(0,Z.jsx)(we,{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)(A,{shouldFilter:!1,children:(0,Z.jsxs)(k,{className:`max-h-64 overflow-y-auto`,children:[(0,Z.jsx)(O,{children:`No newsletters found.`}),t.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())).map(e=>(0,Z.jsxs)(D,{value:e.name,onSelect:()=>_(e.id),children:[e.name,c.includes(e.id)&&(0,Z.jsx)(E,{})]},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)(K,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:()=>g(!1),children:`Cancel`}),(0,Z.jsx)(q,{disabled:b,variant:`destructive`,onClick:y,children:a?`Unsubscribing...`:`Unsubscribe`})]})]})})}function gn({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)(Me,{open:e,onOpenChange:c,children:(0,Z.jsxs)(xt,{className:`gap-5`,children:[(0,Z.jsx)(fe,{children:(0,Z.jsx)(Te,{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)(K,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Z.jsx)(q,{disabled:a||o||t<1,variant:`destructive`,onClick:()=>void l(),children:a||o?`Deleting...`:`Download backup & delete members`})]})]})})}function _n({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)(De,{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)(ge,{className:`mt-0.5 size-4 shrink-0`}),(0,Z.jsx)(`p`,{children:e})]}),(0,Z.jsx)(j,{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)(se,{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)(K,{className:`mt-5`,children:(0,Z.jsx)(q,{variant:`outline`,onClick:t,children:`Close`})})]})}var vn=[{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`}],yn={label:`Tier`,value:`import_tier`},bn=[`email`,`name`,`note`,`subscribed_to_emails`,`complimentary_plan`,`stripe_customer_id`,`labels`,`created_at`,`gift_id`];function xn({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...bn,...e?[yn.value]:[],...t.map(e=>e.value)]}function Sn({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...vn,...e?[yn]:[],...t]}var Cn=[`email`],wn=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,Tn=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 En(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 Dn(e,t={}){let n=En(e),r={},i=xn(t);if(e.length>0)for(let t of Object.keys(e[0])){if(!r.name&&/name/i.test(t)&&!cn(t)){r.name=t;continue}!r[t]&&i.includes(t)&&!Cn.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&&wn.test(n)&&!cn(t)&&(r.email=t);a+=1}return r}function On(e){return e.replace(`Value in [members.email] cannot be blank.`,`Missing email address`).replace(`Value in [members.note] exceeds maximum length of 2000 characters.`,`Note is too long`).replace(`Value in [members.subscribed] must be one of true, false, 0 or 1.`,`Value of "Subscribed to emails" must be "true" or "false"`).replace(`Validation (isEmail) failed for email`,`Invalid email address`).replace(/No such customer:[\s\S]*/,`Could not find Stripe customer`)}function kn({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:y(`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)(W,{className:`table-fixed`,children:[(0,Z.jsx)(U,{children:(0,Z.jsxs)(V,{children:[(0,Z.jsx)(B,{className:`w-1/3`,children:`Field`}),(0,Z.jsx)(B,{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:[`(#`,b(o+1),`)`]})]}),(0,Z.jsxs)(`div`,{className:`flex items-center`,children:[(0,Z.jsx)(`button`,{"aria-label":`Show previous sample row`,className:y(`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)(mt,{className:`size-4`})}),(0,Z.jsx)(`button`,{"aria-label":`Show next sample row`,className:y(`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)(Qe,{className:`size-4`})})]})]})}),(0,Z.jsx)(B,{className:`w-1/3`,children:`Import as`})]})}),(0,Z.jsx)(te,{children:h.length>0?h.map(t=>(0,Z.jsxs)(V,{className:y(!t.mapTo&&`bg-muted`),children:[(0,Z.jsx)(H,{className:`text-sm font-medium break-all`,children:t.key}),(0,Z.jsx)(H,{className:y(`text-sm break-all`,!t.value&&`text-muted-foreground`),children:t.value||`\xA0`}),(0,Z.jsx)(H,{children:(0,Z.jsxs)(I,{disabled:e===`UPLOADING`,value:t.mapTo||`__not_imported__`,onValueChange:e=>{d(t.key,e===`__not_imported__`?null:e)},children:[(0,Z.jsx)(P,{className:y(`h-8 text-sm`,!t.mapTo&&`text-muted-foreground`),children:(0,Z.jsx)(F,{})}),(0,Z.jsxs)(N,{children:[(0,Z.jsx)(M,{value:`__not_imported__`,children:`Not imported`}),l.map(e=>(0,Z.jsx)(M,{value:e.value,children:e.label},e.value))]})]})})]},t.key)):(0,Z.jsx)(V,{children:(0,Z.jsx)(H,{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)(un,{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)(K,{className:`mt-5`,children:[(0,Z.jsx)(q,{disabled:e===`UPLOADING`,variant:`outline`,onClick:p,children:`Start over`}),(0,Z.jsx)(q,{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 ${b(a)} ${a===1?`member`:`members`}`:`Import members`})]})]})}function An({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)(K,{className:`mt-5`,children:[(0,Z.jsx)(q,{variant:`outline`,onClick:e,children:`Upload another file`}),(0,Z.jsx)(q,{onClick:t,children:`Got it`})]})]})}var jn=()=>({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 Mn({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)(K,{className:`mt-5`,children:e.errorCount>0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(q,{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)(q,{onClick:t,children:`Try again`}):(0,Z.jsx)(q,{onClick:n,children:`View members`})]}):(0,Z.jsx)(Z.Fragment,{children:e.importedCount===0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:n,children:`Close`}),(0,Z.jsx)(q,{onClick:t,children:`Try again`})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(q,{variant:`outline`,onClick:t,children:`Upload another file`}),(0,Z.jsx)(q,{onClick:n,children:`View members`})]})})})]})}function Nn({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)(ge,{className:`mt-0.5 size-4 shrink-0`}),(0,Z.jsx)(`p`,{children:e})]})}),(0,Z.jsxs)(K,{className:`mt-5`,children:[t&&(0,Z.jsx)(q,{variant:`outline`,onClick:n,children:`Try again`}),(0,Z.jsx)(q,{onClick:r,children:`OK`})]})]})}var Pn=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
2
  `),e=1<t.length&&t[0].length<n[0].length;if(n.length===1||e)return`
3
3
  `;for(var r=0,i=0;i<n.length;i++)n[i][0]===`
4
4
  `&&r++;return r>=n.length/2?`\r