ghost 6.60.0 → 6.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (613) hide show
  1. package/components/ghost-storage-base-3.0.0.tgz +0 -0
  2. package/components/tryghost-adapter-base-cache-0.2.0.tgz +0 -0
  3. package/components/tryghost-adapter-base-jobs-0.0.0.tgz +0 -0
  4. package/components/tryghost-adapter-base-redirects-0.0.0.tgz +0 -0
  5. package/components/tryghost-adapter-base-route-settings-0.0.0.tgz +0 -0
  6. package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
  7. package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
  8. package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
  9. package/components/tryghost-checkout-0.0.0.tgz +0 -0
  10. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  11. package/components/tryghost-i18n-0.0.0.tgz +0 -0
  12. package/components/tryghost-kg-card-factory-5.2.4.tgz +0 -0
  13. package/components/tryghost-kg-clean-basic-html-4.3.4.tgz +0 -0
  14. package/components/tryghost-kg-converters-1.2.5.tgz +0 -0
  15. package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
  16. package/components/tryghost-kg-default-nodes-2.2.1.tgz +0 -0
  17. package/components/tryghost-kg-default-transforms-1.3.4.tgz +0 -0
  18. package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
  19. package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
  20. package/components/tryghost-kg-markdown-html-renderer-7.2.4.tgz +0 -0
  21. package/components/tryghost-kg-utils-1.1.4.tgz +0 -0
  22. package/components/tryghost-nql-string-0.0.0.tgz +0 -0
  23. package/components/tryghost-parse-email-address-0.0.0.tgz +0 -0
  24. package/content/settings/README.md +1 -1
  25. package/content/themes/casper/.gitignore +28 -0
  26. package/content/themes/casper/assets/built/casper.js +1 -1
  27. package/content/themes/casper/assets/built/screen.css +1 -1
  28. package/content/themes/casper/assets/css/screen.css +2 -1
  29. package/content/themes/casper/assets/js/lightbox.js +63 -46
  30. package/content/themes/casper/package.json +6 -6
  31. package/content/themes/casper/page.hbs +1 -0
  32. package/content/themes/casper/post.hbs +1 -0
  33. package/content/themes/source/.gitignore +28 -0
  34. package/content/themes/source/assets/built/screen.css +1 -1
  35. package/content/themes/source/assets/built/source.js +1 -1
  36. package/content/themes/source/assets/css/screen.css +2 -1
  37. package/content/themes/source/assets/js/lightbox.js +62 -45
  38. package/content/themes/source/assets/js/main.js +2 -2
  39. package/content/themes/source/package.json +4 -4
  40. package/content/themes/source/partials/feature-image.hbs +1 -0
  41. package/core/boot.js +62 -21
  42. package/core/built/admin/assets/Combination-B0l4MKVh.js +41 -0
  43. package/core/built/admin/assets/InterVariable-DiVDrmQJ.woff2 +0 -0
  44. package/core/built/admin/assets/InterVariable-Italic-FCBEiFp6.woff2 +0 -0
  45. package/core/built/admin/assets/{PolarAngleAxis-C4qtHy1B.js → PolarAngleAxis-pkMyqz8g.js} +1 -1
  46. package/core/built/admin/assets/{RadialBarChart-Bh09Stsj.js → RadialBarChart-JAKoS4KT.js} +1 -1
  47. package/core/built/admin/assets/{about-BgpmhCuM.js → about-Dyae_UT6.js} +1 -1
  48. package/core/built/admin/assets/account-migration-CESa0mnX.js +1 -0
  49. package/core/built/admin/assets/{action-list-lGzZLHc8.js → action-list-C4v0-du8.js} +1 -1
  50. package/core/built/admin/assets/activitypub/{account-migration-DMHuPnJn.js → account-migration-By69CgCp.js} +16 -16
  51. package/core/built/admin/assets/activitypub/activitypub.js +9 -10
  52. package/core/built/admin/assets/activitypub/{avatar-DhTo5D1B.js → avatar-DLPL3Abs.js} +59 -68
  53. package/core/built/admin/assets/activitypub/{avatar-flipboard-DnVgbEfa.js → avatar-flipboard-C9iDY-QV.js} +2 -2
  54. package/core/built/admin/assets/activitypub/{bluesky-sharing-BT4zAlW7.js → bluesky-sharing-BJcPMrDd.js} +37 -37
  55. package/core/built/admin/assets/activitypub/{content-formatters-BeDZ-DIa.js → content-formatters-3rTHg3mp.js} +18 -18
  56. package/core/built/admin/assets/activitypub/{copy-8sqxUuNd.js → copy-DIAOQoCZ.js} +2 -2
  57. package/core/built/admin/assets/activitypub/{domain-xQDDu1CS.js → domain-DUR4xSkV.js} +121 -121
  58. package/core/built/admin/assets/activitypub/{edit-profile-BXdF_r2G.js → edit-profile-BqtfzxCp.js} +40 -40
  59. package/core/built/admin/assets/activitypub/{explore-CMt7gKlL.js → explore-BxuJd-J4.js} +27 -27
  60. package/core/built/admin/assets/activitypub/{feed-Bwqdddp_.js → feed-BM1TcksA.js} +51 -51
  61. package/core/built/admin/assets/activitypub/{field-4co_8FVg.js → field-Dn7HHx2-.js} +3 -3
  62. package/core/built/admin/assets/activitypub/{hash-DwakMs4X.js → hash-Bm3WxYN4.js} +2 -2
  63. package/core/built/admin/assets/activitypub/inbox-CCjkuow2.js +1284 -0
  64. package/core/built/admin/assets/activitypub/{inbox-ckD4wo_r.js → inbox-d8oJRTf4.js} +2 -2
  65. package/core/built/admin/assets/activitypub/label-1AA_s9Fa.js +16 -0
  66. package/core/built/admin/assets/activitypub/layout-2-0bw6HN.js +1 -0
  67. package/core/built/admin/assets/activitypub/{moderation-KCCO7L2J.js → moderation-CnmxEB8w.js} +91 -91
  68. package/core/built/admin/assets/activitypub/{note-BX_Bz5A0.js → note-ZKc_Bnba.js} +24 -24
  69. package/core/built/admin/assets/activitypub/{notifications-BQOYGvRv.js → notifications-CB2tJZau.js} +51 -51
  70. package/core/built/admin/assets/activitypub/{onboarding-CNelD_uF.js → onboarding-BsJ9E5qf.js} +2 -2
  71. package/core/built/admin/assets/activitypub/{onboarding-mat5Hrl0.js → onboarding-CSUJJIlh.js} +2 -2
  72. package/core/built/admin/assets/activitypub/{preferences-6h43G9_q.js → preferences-0-JZnUkI.js} +1519 -1519
  73. package/core/built/admin/assets/activitypub/{profile-BMN9VVZ2.js → profile-C35cFIhM.js} +256 -256
  74. package/core/built/admin/assets/activitypub/{reply-ZNo04xsO.js → reply-DYK5vVqb.js} +2 -2
  75. package/core/built/admin/assets/activitypub/{routes-3B9mUQ7i.js → routes-BD4vscyc.js} +796 -790
  76. package/core/built/admin/assets/activitypub/{separator-D9taVCCa.js → separator-BbQqTm-p.js} +3 -3
  77. package/core/built/admin/assets/activitypub/settings-BsMROdqh.js +315 -0
  78. package/core/built/admin/assets/activitypub/{site-DHoMupSB.js → site-O0RL9YCN.js} +2 -2
  79. package/core/built/admin/assets/activitypub/{step-1-BsGGnBuT.js → step-1-BMSx7c_X.js} +6 -6
  80. package/core/built/admin/assets/activitypub/{step-2-teosIS0k.js → step-2-DtPQzlTH.js} +6 -6
  81. package/core/built/admin/assets/activitypub/{step-3-BjD5TokC.js → step-3-CLlOZTyt.js} +11 -11
  82. package/core/built/admin/assets/activitypub/{tabs-Cvwl1wXU.js → tabs-Dxk-b9M-.js} +306 -306
  83. package/core/built/admin/assets/activitypub/{topic-filter-C3LZJc2X.js → topic-filter-5yZH6tId.js} +3 -3
  84. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-Dp9f0gov.js → use-activity-pub-queries-CV50qe03.js} +3 -3
  85. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-C4RI0sa9.js → use-navigate-with-base-path-Bmk5h4lW.js} +220 -220
  86. package/core/built/admin/assets/activitypub/{use-reply-chain-data-C2oNDMUH.js → use-reply-chain-data-Cbvzgjzd.js} +30 -30
  87. package/core/built/admin/assets/activitypub/{users-CoX6FT_K.js → users-BjcoP_HC.js} +7 -5
  88. package/core/built/admin/assets/activitypub/{x-Dxm6pV9X.js → x-DbQZOLiI.js} +2 -2
  89. package/core/built/admin/assets/add-integration-modal-BlF6rs_f.js +1 -0
  90. package/core/built/admin/assets/add-newsletter-modal-CglVQqah.js +1 -0
  91. package/core/built/admin/assets/add-recommendation-modal-wz7BsuaG.js +1 -0
  92. package/core/built/admin/assets/analytics-C4HE1gBg.js +1 -0
  93. package/core/built/admin/assets/{announcement-bar-modal-BTHiy1ZO.js → announcement-bar-modal-Ci4zz8jO.js} +1 -1
  94. package/core/built/admin/assets/{api-keys-Boy5pLbD.js → api-keys-Ck-Yteiv.js} +1 -1
  95. package/core/built/admin/assets/audience-CtbA54Sn.js +1 -0
  96. package/core/built/admin/assets/{automated-emails-te1D5kq-.js → automated-emails-D5VVMND9.js} +1 -1
  97. package/core/built/admin/assets/automations-CzKt5fb8.js +1 -0
  98. package/core/built/admin/assets/bluesky-sharing-BEtJ_gL_.js +1 -0
  99. package/core/built/admin/assets/{box-By_EgGtm.js → box-CdfQAP_F.js} +1 -1
  100. package/core/built/admin/assets/{brand-icon-09YqFZjV.js → brand-icon-CrIGOA3Z.js} +1 -1
  101. package/core/built/admin/assets/{breadcrumb-CcFr_ltt.js → breadcrumb-zUrZrBtW.js} +1 -1
  102. package/core/built/admin/assets/{button-BshWPHvn.js → button-eNMKQWXr.js} +1 -1
  103. package/core/built/admin/assets/{card-CiiE7QfM.js → card--VNbfgo3.js} +1 -1
  104. package/core/built/admin/assets/{chart-BnXyfH11.js → chart-BrhA41Zi.js} +1 -1
  105. package/core/built/admin/assets/chart-helpers-CfBKt0vT.js +1 -0
  106. package/core/built/admin/assets/{checkbox-Dwwr_3Py.js → checkbox-CgOn_tKW.js} +1 -1
  107. package/core/built/admin/assets/{chunk.524.91ecb33e6afc3bd8949b.js → chunk.524.a697dee88db67fdf6021.js} +4 -4
  108. package/core/built/admin/assets/{chunk.582.512549909741883f960c.js → chunk.582.5ed5d124cfca9c259b9c.js} +6 -6
  109. package/core/built/admin/assets/{chunk.16.f76a6314082d813d67e0.js → chunk.598.7e056fabb47ce7dbd73f.js} +14 -14
  110. package/core/built/admin/assets/{code-editor-view-BwIdPy_k.js → code-editor-view-BYNoAoNV.js} +1 -1
  111. package/core/built/admin/assets/{code-editor-view-CtkF82Fv.js → code-editor-view-K2wI-I5f.js} +1 -1
  112. package/core/built/admin/assets/color-picker-Ddw80xX6.js +3 -0
  113. package/core/built/admin/assets/color-picker-field-D9nUhvA7.js +1 -0
  114. package/core/built/admin/assets/combobox-w9j8PPQT.js +1 -0
  115. package/core/built/admin/assets/command-BfpHORBv.js +1 -0
  116. package/core/built/admin/assets/comments-BLmCmyCs.js +1 -0
  117. package/core/built/admin/assets/confirmation-context-CBM8G0Vj.js +1 -0
  118. package/core/built/admin/assets/{container-LiZf3XdY.js → container-BuQG1wuP.js} +1 -1
  119. package/core/built/admin/assets/{content-api-modal-BtpNI92-.js → content-api-modal-TXRz3U7S.js} +1 -1
  120. package/core/built/admin/assets/context-menu-_QMdd3kp.js +1 -0
  121. package/core/built/admin/assets/{copy-field-CglgRZyG.js → copy-field-6N01S07E.js} +1 -1
  122. package/core/built/admin/assets/create-ghost-browse-value-source-qIBymvvf.js +1 -0
  123. package/core/built/admin/assets/custom-field-type-option-BddFlJFa.js +1 -0
  124. package/core/built/admin/assets/custom-integration-modal-DmNquxUV.js +1 -0
  125. package/core/built/admin/assets/{data-list-CupF7bjM.js → data-list-CA2jYGPq.js} +1 -1
  126. package/core/built/admin/assets/{date-range-select-JPwM0yUj.js → date-range-select-uvz_DtPh.js} +1 -1
  127. package/core/built/admin/assets/design-and-theme-modal-BSmo12Op.js +2 -0
  128. package/core/built/admin/assets/{detail-page-D8lx2SdP.js → detail-page-Dnv-CdR1.js} +1 -1
  129. package/core/built/admin/assets/dirty-confirm-dialog-BZ1iytEd.js +1 -0
  130. package/core/built/admin/assets/{disabled-sources-indicator-BTJ2ClQu.js → disabled-sources-indicator-DMRrxsiJ.js} +1 -1
  131. package/core/built/admin/assets/{dist-DzcfoDJ3.js → dist-8YJUlf3B.js} +1 -1
  132. package/core/built/admin/assets/{dist-Cb5RSHSg.js → dist-B3keLvjj.js} +1 -1
  133. package/core/built/admin/assets/dist-Dcsslyo72.js +1 -0
  134. package/core/built/admin/assets/{dist-BT_Z-eCn.js → dist-Dgt2cr6a.js} +1 -1
  135. package/core/built/admin/assets/domain-BNYrt0aD.js +1 -0
  136. package/core/built/admin/assets/dropzone-D7nFdAe5.js +5 -0
  137. package/core/built/admin/assets/edit-profile-C5Asm4LA.js +1 -0
  138. package/core/built/admin/assets/editor-REokrzci.js +8 -0
  139. package/core/built/admin/assets/{embed-signup-form-modal-BFTPf04i.js → embed-signup-form-modal-Ds6mPEi5.js} +1 -1
  140. package/core/built/admin/assets/{empty-indicator-WB1WgT9h.js → empty-indicator-D9QdpuNX.js} +1 -1
  141. package/core/built/admin/assets/en-B1jX3WMs.js +1 -0
  142. package/core/built/admin/assets/explore-UY10Egsp.js +1 -0
  143. package/core/built/admin/assets/feature-image-placeholder-D1iF_8bc.js +1 -0
  144. package/core/built/admin/assets/feed-81C8mJWR.js +1 -0
  145. package/core/built/admin/assets/{field-LmNk7wZh.js → field-Dihp5p18.js} +1 -1
  146. package/core/built/admin/assets/filter-bar-Da1qxybu.js +1 -0
  147. package/core/built/admin/assets/filter-sources-BO9xUPj7.js +1 -0
  148. package/core/built/admin/assets/filters-CRUWecfY.js +1 -0
  149. package/core/built/admin/assets/filters-DirqNXjH.js +1 -0
  150. package/core/built/admin/assets/first-promoter-modal-CT6MxYZb.js +1 -0
  151. package/core/built/admin/assets/{ghost-c8807202a07c20030acb719ee0114815.css → ghost-8eabfc1ece81b03cf7b90780d31487e8.css} +1 -1
  152. package/core/built/admin/assets/{ghost-403cb39badad3df411fc0ba27d220047.js → ghost-c2848508292937415f20f5a830eea59e.js} +31 -28
  153. package/core/built/admin/assets/{ghost-dark-fbf1e384aaef3ae315e540f0eb7373a7.css → ghost-dark-a7bebe2c561f55369dcf29f4c820f7ff.css} +1 -1
  154. package/core/built/admin/assets/gift-link-modal-CQVAye17.js +1 -0
  155. package/core/built/admin/assets/{grid-CUciBfjf.js → grid-Dj29PY05.js} +1 -1
  156. package/core/built/admin/assets/growth-BWIu-6xj.js +3 -0
  157. package/core/built/admin/assets/growth-DU29oxeA.js +1 -0
  158. package/core/built/admin/assets/{heading-CRZZ2FUe.js → heading-Dh5SFVjL.js} +1 -1
  159. package/core/built/admin/assets/history-modal-CFd1Hvx6.js +1 -0
  160. package/core/built/admin/assets/html-field-CJBCLTvv.js +1 -0
  161. package/core/built/admin/assets/{images-C0XvUYMb.js → images-scfkWZiK.js} +1 -1
  162. package/core/built/admin/assets/{inbox-DZXDUt4s.js → inbox-Mcp4DXZN.js} +14 -14
  163. package/core/built/admin/assets/index-6MkPdCtr.js +4 -0
  164. package/core/built/admin/assets/index-Bn7QhcZu.css +2 -0
  165. package/core/built/admin/assets/index.es-CNnuNH0d.js +1 -0
  166. package/core/built/admin/assets/{inline-Cw-gigDW.js → inline-BWSs_VzR.js} +1 -1
  167. package/core/built/admin/assets/{input-group-BPAxETpQ.js → input-group-CMhe2DvY.js} +1 -1
  168. package/core/built/admin/assets/{input-surface-BdOe4KzO.js → input-surface-BsrIZeSF.js} +1 -1
  169. package/core/built/admin/assets/{integration-header-B4DyXV06.js → integration-header-Bm6IDb1A.js} +1 -1
  170. package/core/built/admin/assets/invite-user-modal-DfheMXs0.js +1 -0
  171. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +14 -14
  172. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +3 -3
  173. package/core/built/admin/assets/koenig-lexical/style.css +1 -1
  174. package/core/built/admin/assets/{koenig-lexical-60O_8aiO.js → koenig-lexical-DBSqAuiI.js} +3 -3
  175. package/core/built/admin/assets/koenig-loader-aFQNlJlD.js +2 -0
  176. package/core/built/admin/assets/kpi-card-DBRMfGOW.js +1 -0
  177. package/core/built/admin/assets/{kpi-card-fUHZlzBX.js → kpi-card-DFafD1qq.js} +1 -1
  178. package/core/built/admin/assets/kpi-helpers-Cv8i8hns.js +1 -0
  179. package/core/built/admin/assets/kpi-tabs-BJItvLYm.js +1 -0
  180. package/core/built/admin/assets/{label-VIG969IC.js → label-BnSCvffu.js} +1 -1
  181. package/core/built/admin/assets/label-picker-KVoo91sh.js +1 -0
  182. package/core/built/admin/assets/layout-Bjv2Ll-5.js +1 -0
  183. package/core/built/admin/assets/{link-helpers-Dtq9fxQg.js → link-helpers-MVDdnFCY.js} +1 -1
  184. package/core/built/admin/assets/{list-page-CdsnQR9N.js → list-page-BucXJ0hi.js} +1 -1
  185. package/core/built/admin/assets/member-custom-fields-DDQV6QeG.js +1 -0
  186. package/core/built/admin/assets/member-detail-CdJF6Agw.js +1 -0
  187. package/core/built/admin/assets/members-DjQbq9Z2.js +4 -0
  188. package/core/built/admin/assets/{modal-page-BMTzFHVO.js → modal-page-xCivTMvI.js} +1 -1
  189. package/core/built/admin/assets/moderation-AgCIEso4.js +1 -0
  190. package/core/built/admin/assets/{multi-select-combobox-CGohnsxJ.js → multi-select-combobox-BcITkUVr.js} +1 -1
  191. package/core/built/admin/assets/navigation-modal-BkT7b1M2.js +1 -0
  192. package/core/built/admin/assets/newsletter-BMMAuvgq.js +1 -0
  193. package/core/built/admin/assets/newsletter-detail-modal-0SCJ7Zpm.js +1 -0
  194. package/core/built/admin/assets/{newsletter-emails-D5ql1rud.js → newsletter-emails-DKzwafuh.js} +1 -1
  195. package/core/built/admin/assets/newsletters-BRBb_uQC.js +1 -0
  196. package/core/built/admin/assets/note-DyGHtS9a.js +1 -0
  197. package/core/built/admin/assets/notifications-ZgWniKna.js +1 -0
  198. package/core/built/admin/assets/nql-BLpCn7qX.js +21 -0
  199. package/core/built/admin/assets/offers-container-modal-B-E8TIWr.js +1 -0
  200. package/core/built/admin/assets/{onboarding-B4YhlZ0i.js → onboarding-CzIsre-d.js} +1 -1
  201. package/core/built/admin/assets/onboarding-qg8Akovm.js +1 -0
  202. package/core/built/admin/assets/{onboarding-route-Cu_ROWPn.js → onboarding-route-CaavZulg.js} +1 -1
  203. package/core/built/admin/assets/overview-BW8GLeYi.js +1 -0
  204. package/core/built/admin/assets/overview-BkXZNzaZ.js +1 -0
  205. package/core/built/admin/assets/{page-header-Cfds8pCg.js → page-header-De0VzKBi.js} +1 -1
  206. package/core/built/admin/assets/pagemenu-B5KKCpbA.js +1 -0
  207. package/core/built/admin/assets/pages-jgaFm69d.js +1 -0
  208. package/core/built/admin/assets/pages-route-CIUAQxtY.js +1 -0
  209. package/core/built/admin/assets/papaparse.min-cQwnxGCG.js +10 -0
  210. package/core/built/admin/assets/{pintura-modal-TDTrJ89x.js → pintura-modal-BZ2J9w3n.js} +1 -1
  211. package/core/built/admin/assets/portal-frame-B6Hr9wHc.js +1 -0
  212. package/core/built/admin/assets/portal-modal-D4ceei3t.js +1 -0
  213. package/core/built/admin/assets/post-analytics-header-BYCsT0GP.js +1 -0
  214. package/core/built/admin/assets/post-analytics-ot7f6pih.js +1 -0
  215. package/core/built/admin/assets/{post-analytics-provider-Cu3jNeFh.js → post-analytics-provider-Bo1gmYaP.js} +1 -1
  216. package/core/built/admin/assets/{post-share-modal-P1_M6o-H.js → post-share-modal-C-PaYZ_e.js} +1 -1
  217. package/core/built/admin/assets/posts-DuGazgTb.js +1 -0
  218. package/core/built/admin/assets/posts-list-screen-CBGGgjjj.js +2 -0
  219. package/core/built/admin/assets/posts-route-D6xmS7Vf.js +1 -0
  220. package/core/built/admin/assets/preferences-C5YJLp74.js +5 -0
  221. package/core/built/admin/assets/{preview-chrome-BOVO6_PE.js → preview-chrome-BljUBlOk.js} +1 -1
  222. package/core/built/admin/assets/{preview-modal-MlTjP8UU.js → preview-modal-BfeFqi5y.js} +1 -1
  223. package/core/built/admin/assets/profile-B8mx2yAu.js +1 -0
  224. package/core/built/admin/assets/{radio-group-CjtmsCPl.js → radio-group-DczlLKOn.js} +1 -1
  225. package/core/built/admin/assets/{router-provider-CJC58zTy.js → router-provider-B0gZyiGJ.js} +1 -1
  226. package/core/built/admin/assets/{schemas-CRsC53ls.js → schemas-DppqmpeJ.js} +2 -2
  227. package/core/built/admin/assets/select-cb0t_TAJ.js +1 -0
  228. package/core/built/admin/assets/settings-DZqxR0Da.js +1 -0
  229. package/core/built/admin/assets/settings-DvfTNdHQ.js +4 -0
  230. package/core/built/admin/assets/{settings-breadcrumbs-sLDNedBW.js → settings-breadcrumbs-DLzbRRSt.js} +1 -1
  231. package/core/built/admin/assets/{shade-app-F7WxOyfk-nufqw1hd.js → shade-app-CcS3f8MZ-vwURazk8.js} +2 -2
  232. package/core/built/admin/assets/share-modal-D2-Bz1_I.js +1 -0
  233. package/core/built/admin/assets/{skeleton-D7hwjdry.js → skeleton-Ce9GgUpf.js} +1 -1
  234. package/core/built/admin/assets/slack-modal-DYDTUria.js +1 -0
  235. package/core/built/admin/assets/sort-button-VVeQjjbu.js +1 -0
  236. package/core/built/admin/assets/{source-icon-BPsD5ees.js → source-icon-Ck5_5Kgq.js} +1 -1
  237. package/core/built/admin/assets/{stack-CIfOAAVf.js → stack-B2eszIiq.js} +1 -1
  238. package/core/built/admin/assets/stats-Rjmk5owg.js +1 -0
  239. package/core/built/admin/assets/stats-view-BGGmkmgv.js +1 -0
  240. package/core/built/admin/assets/{step-1-CMta6YFO.js → step-1-CsaBjeN4.js} +1 -1
  241. package/core/built/admin/assets/{step-2-BG04nh5q.js → step-2-D2vnxOOM.js} +1 -1
  242. package/core/built/admin/assets/{step-3-ZnMaVIPj.js → step-3-wBoLdGEb.js} +2 -2
  243. package/core/built/admin/assets/{stripe-button-DDoUKN5a.js → stripe-button-CDgLz0S0.js} +1 -1
  244. package/core/built/admin/assets/stripe-connect-modal-CSjMJetP.js +1 -0
  245. package/core/built/admin/assets/{switch-C9djUIMO.js → switch-CI4gLWqb.js} +1 -1
  246. package/core/built/admin/assets/{table-CrqQtkR2.js → table-Do6iQ83Q.js} +1 -1
  247. package/core/built/admin/assets/{tabs-CGisSbWq.js → tabs-D2yWLMp_.js} +1 -1
  248. package/core/built/admin/assets/tag-detail-BhXlOsCa.js +2 -0
  249. package/core/built/admin/assets/tags-ldukRApe.js +1 -0
  250. package/core/built/admin/assets/testimonials-modal-CtnZBJKl.js +1 -0
  251. package/core/built/admin/assets/{text-DU9Hv33_.js → text-BQDSDsKs.js} +1 -1
  252. package/core/built/admin/assets/{textarea-d9qEkMOP.js → textarea-DJ1Q5V39.js} +1 -1
  253. package/core/built/admin/assets/tier-detail-modal-BOs8e_G8.js +1 -0
  254. package/core/built/admin/assets/{toggle-group-CtKZURJd.js → toggle-group-ByUJsxwD.js} +1 -1
  255. package/core/built/admin/assets/{topic-filter-D8JT8Tq1.js → topic-filter-BgC3g5_v.js} +1 -1
  256. package/core/built/admin/assets/{transistor-modal-6PUf0idx.js → transistor-modal-Drr0SNfo.js} +1 -1
  257. package/core/built/admin/assets/trend-badge-6ye93YAW.js +1 -0
  258. package/core/built/admin/assets/{unsplash-modal-BPuDBPja.js → unsplash-modal-p6AoQoWp.js} +1 -1
  259. package/core/built/admin/assets/{use-analytics-data--opuzwcz.js → use-analytics-data-CWCMAESo.js} +1 -1
  260. package/core/built/admin/assets/use-check-theme-limit-error-B8bjF-gO.css +1 -0
  261. package/core/built/admin/assets/use-check-theme-limit-error-Cw3WQHy8.js +2 -0
  262. package/core/built/admin/assets/use-filter-params-BIni9taJ.js +1 -0
  263. package/core/built/admin/assets/use-growth-stats-DCVG3s9w.js +1 -0
  264. package/core/built/admin/assets/{use-limiter-TDSNiHPB.js → use-limiter-D2WRRx0H.js} +1 -1
  265. package/core/built/admin/assets/{use-navigate-with-base-path-CK989MlC.js → use-navigate-with-base-path-BHPA228f.js} +1 -1
  266. package/core/built/admin/assets/{use-pintura-config-CnCGrDFk.js → use-pintura-config-h-J0Lvta.js} +1 -1
  267. package/core/built/admin/assets/{use-pintura-editor-ntphvtUd.js → use-pintura-editor-BfN1UwzH.js} +1 -1
  268. package/core/built/admin/assets/use-post-referrers-Czg47m8s.js +1 -0
  269. package/core/built/admin/assets/use-reply-chain-data-ns0caK8k.js +1 -0
  270. package/core/built/admin/assets/{use-router-history-entry-BwfQS2mq.js → use-router-history-entry-uldn7zJO.js} +1 -1
  271. package/core/built/admin/assets/{use-setting-group-DQxV42-O.js → use-setting-group-DpcuCUDg.js} +1 -1
  272. package/core/built/admin/assets/use-settings-navigation-CZjGrhsp.js +1 -0
  273. package/core/built/admin/assets/{use-simple-pagination-B2TdNX67.js → use-simple-pagination-DzJWobPR.js} +1 -1
  274. package/core/built/admin/assets/{use-staff-users-QrR9voeC.js → use-staff-users-Csipb-O0.js} +1 -1
  275. package/core/built/admin/assets/use-tinybird-query-CSnGXzZh.js +1 -0
  276. package/core/built/admin/assets/use-tinybird-token-DTOKRR7e.js +1 -0
  277. package/core/built/admin/assets/{use-unsaved-changes-guard-DpYJcj1d.js → use-unsaved-changes-guard-CBzs-KPi.js} +1 -1
  278. package/core/built/admin/assets/{use-url-input-WnIqckzS.js → use-url-input-DFr8lCbS.js} +1 -1
  279. package/core/built/admin/assets/user-detail-modal-B_iUClI6.js +1 -0
  280. package/core/built/admin/assets/users-Cg-OeGzC.js +1 -0
  281. package/core/built/admin/assets/{virtual-list-D3MfPNOh.js → virtual-list-BW-padMe.js} +1 -1
  282. package/core/built/admin/assets/web-C1v33ehA.js +2 -0
  283. package/core/built/admin/assets/web-C4BKzn2T.js +1 -0
  284. package/core/built/admin/assets/{zapier-modal-BO6PS_Vd.js → zapier-modal-BBFfI6Ml.js} +1 -1
  285. package/core/built/admin/index.html +24 -30
  286. package/core/frontend/apps/private-blogging/lib/views/private.hbs +44 -43
  287. package/core/frontend/helpers/cancel_link.js +2 -2
  288. package/core/frontend/helpers/pagination.js +2 -2
  289. package/core/frontend/helpers/social_accounts.js +2 -2
  290. package/core/frontend/public/ghost.css +1 -1
  291. package/core/frontend/public/ghost.min.css +1 -1
  292. package/core/frontend/services/rendering/renderer.js +15 -0
  293. package/core/frontend/services/sitemap/user-map-generator.js +9 -2
  294. package/core/server/adapters/storage/LocalStorageBase.js +8 -5
  295. package/core/server/api/endpoints/db.js +19 -5
  296. package/core/server/api/endpoints/index.js +6 -2
  297. package/core/server/api/endpoints/mail.js +1 -1
  298. package/core/server/api/endpoints/member-metafields.js +89 -0
  299. package/core/server/api/endpoints/members.js +4 -4
  300. package/core/server/api/endpoints/posts.js +4 -3
  301. package/core/server/api/endpoints/tiers-checkout-config.js +59 -0
  302. package/core/server/api/endpoints/utils/serializers/input/members.js +4 -7
  303. package/core/server/api/endpoints/utils/serializers/output/config.js +1 -0
  304. package/core/server/api/endpoints/utils/serializers/output/index.js +6 -2
  305. package/core/server/api/endpoints/utils/serializers/output/{member-custom-fields.js → member-metafields.js} +2 -4
  306. package/core/server/api/endpoints/utils/serializers/output/members.js +2 -4
  307. package/core/server/api/endpoints/utils/serializers/output/tiers-checkout-config.js +12 -0
  308. package/core/server/api/endpoints/utils/validators/input/invitations.js +0 -5
  309. package/core/server/api/endpoints/utils/validators/input/pages.js +1 -1
  310. package/core/server/api/endpoints/utils/validators/input/posts.js +1 -1
  311. package/core/server/data/exporter/table-lists.js +3 -0
  312. package/core/server/data/importer/content-files.js +57 -0
  313. package/core/server/data/importer/handlers/image.js +2 -2
  314. package/core/server/data/importer/import-archive.js +131 -0
  315. package/core/server/data/importer/import-manager.js +18 -180
  316. package/core/server/data/importer/importers/content-file-importer.js +66 -4
  317. package/core/server/data/importer/importers/data/data-importer.js +3 -3
  318. package/core/server/data/migrations/utils/migrations.js +1 -1
  319. package/core/server/data/migrations/versions/6.61/2026-08-19-14-30-20-add-written-by-to-members-custom-field-values.js +42 -0
  320. package/core/server/data/migrations/versions/6.61/2026-08-19-14-38-53-add-members-custom-field-bindings-table.js +26 -0
  321. package/core/server/data/migrations/versions/6.61/2026-08-19-14-48-06-add-tier-checkout-field-tables.js +35 -0
  322. package/core/server/data/schema/schema.js +90 -0
  323. package/core/server/data/seeders/importers/automation-action-revisions-importer.js +3 -3
  324. package/core/server/data/seeders/importers/automation-actions-importer.js +3 -3
  325. package/core/server/data/seeders/importers/automation-run-steps-importer.js +3 -3
  326. package/core/server/data/seeders/importers/automation-runs-importer.js +5 -5
  327. package/core/server/data/seeders/importers/automations-importer.js +3 -3
  328. package/core/server/data/seeders/importers/comment-reports-importer.js +1 -1
  329. package/core/server/data/seeders/importers/comments-importer.js +1 -1
  330. package/core/server/data/seeders/importers/email-batches-importer.js +1 -1
  331. package/core/server/data/seeders/importers/email-recipients-importer.js +1 -1
  332. package/core/server/data/seeders/importers/emails-importer.js +1 -1
  333. package/core/server/data/seeders/importers/labels-importer.js +1 -1
  334. package/core/server/data/seeders/importers/members-click-events-importer.js +1 -1
  335. package/core/server/data/seeders/importers/members-created-events-importer.js +1 -1
  336. package/core/server/data/seeders/importers/members-feedback-importer.js +1 -1
  337. package/core/server/data/seeders/importers/members-importer.js +1 -1
  338. package/core/server/data/seeders/importers/members-login-events-importer.js +1 -1
  339. package/core/server/data/seeders/importers/members-products-importer.js +1 -1
  340. package/core/server/data/seeders/importers/members-status-events-importer.js +1 -1
  341. package/core/server/data/seeders/importers/members-stripe-customers-importer.js +1 -1
  342. package/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js +1 -1
  343. package/core/server/data/seeders/importers/members-subscribe-events-importer.js +1 -1
  344. package/core/server/data/seeders/importers/members-subscription-created-events-importer.js +1 -1
  345. package/core/server/data/seeders/importers/offer-redemptions-importer.js +1 -1
  346. package/core/server/data/seeders/importers/offers-importer.js +1 -1
  347. package/core/server/data/seeders/importers/posts-importer.js +1 -1
  348. package/core/server/data/seeders/importers/table-importer.js +2 -2
  349. package/core/server/data/seeders/importers/tags-importer.js +1 -1
  350. package/core/server/data/seeders/importers/users-importer.js +1 -1
  351. package/core/server/data/seeders/importers/web-mentions-importer.js +1 -1
  352. package/core/server/data/seeders/utils/random.js +3 -3
  353. package/core/server/ghost-server.js +3 -2
  354. package/core/server/lib/db-types/boolean.js +18 -0
  355. package/core/server/lib/image/image-size.js +24 -0
  356. package/core/server/lib/package-json/parse.js +2 -2
  357. package/core/server/lib/promise-pool.js +31 -0
  358. package/core/server/models/member.js +6 -17
  359. package/core/server/models/post.js +2 -2
  360. package/core/server/models/relations/authors.js +2 -16
  361. package/core/server/models/user.js +9 -2
  362. package/core/server/services/auth/passwordreset.js +13 -0
  363. package/core/server/services/automations/database-automations-repository.js +26 -26
  364. package/core/server/services/automations/poll.js +1 -0
  365. package/core/server/services/comments/comments-controller.js +30 -9
  366. package/core/server/services/comments/comments-service.js +55 -5
  367. package/core/server/services/content-import/csv/formula.js +12 -0
  368. package/core/server/services/content-import/csv/index.js +6 -1
  369. package/core/server/services/content-import/csv/parse.js +27 -6
  370. package/core/server/services/content-import/csv/serialize.js +13 -0
  371. package/core/server/services/content-import/import/assets.js +74 -0
  372. package/core/server/services/content-import/import/completion-email.js +164 -0
  373. package/core/server/services/content-import/import/errors-file.js +36 -0
  374. package/core/server/services/content-import/import/importer.js +204 -54
  375. package/core/server/services/content-import/import/local-media-url.js +63 -0
  376. package/core/server/services/content-import/import/media.js +254 -0
  377. package/core/server/services/content-import/import/post-data.js +1 -1
  378. package/core/server/services/content-import/import/post-link.js +11 -0
  379. package/core/server/services/content-import/import/post-repository.js +100 -0
  380. package/core/server/services/content-import/import/reader.js +9 -2
  381. package/core/server/services/content-import/import/relations.js +149 -0
  382. package/core/server/services/content-import/import/report.js +34 -0
  383. package/core/server/services/content-import/import/row.js +11 -2
  384. package/core/server/services/content-import/import/schema.js +30 -0
  385. package/core/server/services/content-import/import/source.js +125 -0
  386. package/core/server/services/content-import/import/staged-file.js +29 -0
  387. package/core/server/services/content-import/import/store.js +25 -2
  388. package/core/server/services/content-import/index.js +58 -34
  389. package/core/server/services/content-import/jobs/content-csv-import-job.js +20 -0
  390. package/core/server/services/custom-redirects/redirect-config-parser.js +2 -2
  391. package/core/server/services/custom-redirects/redirects-service.js +1 -1
  392. package/core/server/services/custom-redirects/validation.js +1 -1
  393. package/core/server/services/email-address/email-address-parser.js +30 -38
  394. package/core/server/services/email-address/email-address-service.js +37 -4
  395. package/core/server/services/email-analytics/email-analytics-service.js +8 -1
  396. package/core/server/services/email-analytics/index.js +2 -7
  397. package/core/server/services/email-analytics/lib/queries.js +7 -1
  398. package/core/server/services/email-service/batch-sending-service.js +0 -4
  399. package/core/server/services/email-service/email-renderer.js +14 -4
  400. package/core/server/services/email-service/email-service-wrapper.js +0 -9
  401. package/core/server/services/email-service/mailgun-email-provider.js +20 -9
  402. package/core/server/services/gift-links/schema.js +3 -3
  403. package/core/server/services/gifts/CONTEXT.md +1 -1
  404. package/core/server/services/gifts/constants.js +1 -1
  405. package/core/server/services/gifts/email-templates/gift-delivery.hbs +3 -3
  406. package/core/server/services/gifts/gift-bookshelf-repository.js +2 -2
  407. package/core/server/services/gifts/gift-delivery-bookshelf-repository.js +18 -9
  408. package/core/server/services/gifts/gift-delivery-schema.js +5 -5
  409. package/core/server/services/gifts/gift-delivery-service.js +4 -0
  410. package/core/server/services/gifts/gift-email-service.js +0 -1
  411. package/core/server/services/gifts/gift-schema.js +10 -10
  412. package/core/server/services/gifts/gift-service.js +4 -2
  413. package/core/server/services/gifts/index.js +3 -3
  414. package/core/server/services/gifts/jobs/index.js +4 -4
  415. package/core/server/services/indexnow-ping/indexnow-ping-service.js +2 -2
  416. package/core/server/services/invitations/accept.js +4 -2
  417. package/core/server/services/jobs/job-service.js +0 -9
  418. package/core/server/services/jobs-service/register-job-handlers.js +25 -15
  419. package/core/server/services/lib/mailgun-client.js +44 -8
  420. package/core/server/services/mail/ghost-mailer.js +4 -4
  421. package/core/server/services/media-inliner/external-media-inliner-job.js +12 -0
  422. package/core/server/services/media-inliner/external-media-inliner.js +103 -29
  423. package/core/server/services/media-inliner/service.js +13 -41
  424. package/core/server/services/media-inliner/types.js +2 -0
  425. package/core/server/services/member-welcome-emails/service.js +7 -7
  426. package/core/server/services/members/api.js +1 -0
  427. package/core/server/services/members/import-export/csv/parse.js +0 -7
  428. package/core/server/services/members/import-export/export/exporter.js +4 -6
  429. package/core/server/services/members/import-export/import/completion-email.js +2 -5
  430. package/core/server/services/members/import-export/import/importer.js +21 -5
  431. package/core/server/services/members/import-export/import/row.js +0 -3
  432. package/core/server/services/members/import-export/import/stripe-utils.js +6 -1
  433. package/core/server/services/members/import-export/index.js +10 -12
  434. package/core/server/services/members/jobs/clean-expired-comped-job.js +7 -0
  435. package/core/server/services/members/jobs/clean-expired-comped-task.js +145 -0
  436. package/core/server/services/members/jobs/index.js +48 -24
  437. package/core/server/services/members/members-api/controllers/member-controller.js +11 -0
  438. package/core/server/services/members/members-api/controllers/router-controller.js +3 -6
  439. package/core/server/services/members/members-api/members-api.js +9 -6
  440. package/core/server/services/members/members-api/repositories/event-repository.js +0 -4
  441. package/core/server/services/members/members-api/services/member-bread-service.js +53 -63
  442. package/core/server/services/members/members-api/services/payments-service.js +47 -1
  443. package/core/server/services/members/service.js +1 -5
  444. package/core/server/services/members-custom-fields/actions.js +27 -1
  445. package/core/server/services/members-custom-fields/bindings-service.js +120 -0
  446. package/core/server/services/members-custom-fields/codec.js +3 -4
  447. package/core/server/services/members-custom-fields/definitions-service.js +165 -22
  448. package/core/server/services/members-custom-fields/filter.js +75 -93
  449. package/core/server/services/members-custom-fields/index.js +11 -4
  450. package/core/server/services/members-custom-fields/key.js +2 -1
  451. package/core/server/services/members-custom-fields/models.js +1 -1
  452. package/core/server/services/members-custom-fields/queries.js +5 -0
  453. package/core/server/services/members-custom-fields/schema.js +37 -6
  454. package/core/server/services/members-custom-fields/serializers.js +3 -5
  455. package/core/server/services/members-custom-fields/values-service.js +65 -31
  456. package/core/server/services/mentions/mention-controller.js +23 -21
  457. package/core/server/services/mentions/process-webmention-job.js +16 -0
  458. package/core/server/services/mentions/service.js +8 -4
  459. package/core/server/services/public-config/config.js +7 -0
  460. package/core/server/services/route-settings/validation-errors.js +1 -1
  461. package/core/server/services/route-settings/yaml-parser.js +1 -1
  462. package/core/server/services/settings/settings-service.js +1 -8
  463. package/core/server/services/settings-helpers/settings-helpers.js +4 -6
  464. package/core/server/services/slack-ping/slack-ping-service.js +1 -1
  465. package/core/server/services/staff/staff-service-emails.js +2 -2
  466. package/core/server/services/stripe/config.js +14 -8
  467. package/core/server/services/stripe/service.js +10 -1
  468. package/core/server/services/stripe/services/checkout/completed-session.js +68 -0
  469. package/core/server/services/stripe/services/checkout/session-options.js +100 -0
  470. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +71 -1
  471. package/core/server/services/stripe/stripe-api.js +31 -0
  472. package/core/server/services/stripe/stripe-service.js +26 -9
  473. package/core/server/services/stripe/webhook-controller.js +10 -0
  474. package/core/server/services/tier-checkout-config/codec.js +99 -0
  475. package/core/server/services/tier-checkout-config/index.js +26 -0
  476. package/core/server/services/tier-checkout-config/models.js +63 -0
  477. package/core/server/services/tier-checkout-config/queries.js +80 -0
  478. package/core/server/services/tier-checkout-config/schema.js +33 -0
  479. package/core/server/services/tier-checkout-config/serializers.js +128 -0
  480. package/core/server/services/tier-checkout-config/service.js +304 -0
  481. package/core/server/services/tiers/service.js +21 -0
  482. package/core/server/services/update-check/index.js +13 -13
  483. package/core/server/services/update-check/jobs/update-check-job.js +7 -0
  484. package/core/server/services/update-check/update-check-service.js +2 -2
  485. package/core/server/web/admin/controller.js +1 -1
  486. package/core/server/web/api/endpoints/admin/routes.js +34 -20
  487. package/core/server/web/api/middleware/upload.js +2 -2
  488. package/core/server/web/parent/app.js +5 -0
  489. package/core/server/web/parent/middleware/filter-query-parameters.js +94 -0
  490. package/core/server/web/parent/middleware/index.js +1 -0
  491. package/core/server/web/query-parameter-policy/index.js +9 -0
  492. package/core/server/web/query-parameter-policy/policy.json +58 -0
  493. package/core/server/web/query-parameter-policy/schema.js +38 -0
  494. package/core/shared/config/defaults.json +3 -0
  495. package/core/shared/config/env/config.testing-mysql.json +4 -1
  496. package/core/shared/config/env/config.testing.json +3 -0
  497. package/core/shared/config/overrides.json +4 -2
  498. package/core/shared/labs.js +9 -15
  499. package/package.json +25 -25
  500. package/pnpm-lock.yaml +741 -108
  501. package/pnpm-workspace.yaml +12 -9
  502. package/tsconfig.json +2 -3
  503. package/components/tryghost-kg-default-nodes-2.2.0.tgz +0 -0
  504. package/core/built/admin/assets/Combination-gnJO3vIw.js +0 -41
  505. package/core/built/admin/assets/account-migration-8qTEI1i1.js +0 -1
  506. package/core/built/admin/assets/activitypub/inbox-DQ5CwLma.js +0 -1284
  507. package/core/built/admin/assets/activitypub/label-B72sfvEU.js +0 -16
  508. package/core/built/admin/assets/activitypub/layout-CXajhRsL.js +0 -1
  509. package/core/built/admin/assets/activitypub/settings-71gCm3SO.js +0 -315
  510. package/core/built/admin/assets/add-integration-modal--YpTq3c0.js +0 -1
  511. package/core/built/admin/assets/add-newsletter-modal-C8Ix2hol.js +0 -1
  512. package/core/built/admin/assets/add-recommendation-modal-CScuNFz4.js +0 -1
  513. package/core/built/admin/assets/alert-dialog-wEbVxANM.js +0 -1
  514. package/core/built/admin/assets/analytics-Cnji45H5.js +0 -1
  515. package/core/built/admin/assets/app-utils-D2Wp7ZSS.js +0 -1
  516. package/core/built/admin/assets/audience-DTLMXAFH.js +0 -1
  517. package/core/built/admin/assets/automations-BWpRCZ_f.js +0 -1
  518. package/core/built/admin/assets/bluesky-sharing-DHOpQxff.js +0 -1
  519. package/core/built/admin/assets/chart-helpers-B3OqQ6Ez.js +0 -1
  520. package/core/built/admin/assets/color-picker-Bmo1r9Fc.js +0 -3
  521. package/core/built/admin/assets/color-picker-field-DywowPhF.js +0 -1
  522. package/core/built/admin/assets/combobox-C4QCh6Yw.js +0 -1
  523. package/core/built/admin/assets/command-DcLbSifC.js +0 -1
  524. package/core/built/admin/assets/comments-Bxy_3WyE.js +0 -1
  525. package/core/built/admin/assets/confirmation-context-CLFHhyyH.js +0 -1
  526. package/core/built/admin/assets/custom-field-type-option-D0PXoSnP.js +0 -10
  527. package/core/built/admin/assets/custom-integration-modal-DCIHKN33.js +0 -1
  528. package/core/built/admin/assets/design-and-theme-modal-CZ-PkW7o.js +0 -23
  529. package/core/built/admin/assets/dialog-Db7c164G.js +0 -1
  530. package/core/built/admin/assets/dirty-confirm-dialog-CmARpZQS.js +0 -1
  531. package/core/built/admin/assets/dist-QLZuGq7o2.js +0 -1
  532. package/core/built/admin/assets/domain-D0SAtc-T.js +0 -1
  533. package/core/built/admin/assets/dropzone-CaPOeDRZ.js +0 -5
  534. package/core/built/admin/assets/edit-profile-By7v5XW5.js +0 -1
  535. package/core/built/admin/assets/editor-COXn4Atu.js +0 -8
  536. package/core/built/admin/assets/explore-BsNYrubV.js +0 -1
  537. package/core/built/admin/assets/feed-8RR1O1bK.js +0 -1
  538. package/core/built/admin/assets/filter-sources-4C0kF1NU.js +0 -1
  539. package/core/built/admin/assets/filters-CV5jCb9n.js +0 -1
  540. package/core/built/admin/assets/filters-Dmr0PoqU.js +0 -1
  541. package/core/built/admin/assets/first-promoter-modal-OCzSaL3B.js +0 -1
  542. package/core/built/admin/assets/gift-link-modal-0mzjn5oF.js +0 -1
  543. package/core/built/admin/assets/growth-55vWlGT_.js +0 -1
  544. package/core/built/admin/assets/growth-DA5AluYw.js +0 -3
  545. package/core/built/admin/assets/history-modal-G1s5hHz7.js +0 -1
  546. package/core/built/admin/assets/html-field-BegxsWpw.js +0 -1
  547. package/core/built/admin/assets/index-CDP9tIOk.js +0 -4
  548. package/core/built/admin/assets/index-Dqf2x-ry.css +0 -1
  549. package/core/built/admin/assets/index.es-BMUCj9TR.js +0 -1
  550. package/core/built/admin/assets/input-UHrKuvBT.js +0 -1
  551. package/core/built/admin/assets/invite-user-modal-BrAkxEO3.js +0 -1
  552. package/core/built/admin/assets/koenig-loader-DwVY_V-H.js +0 -1
  553. package/core/built/admin/assets/kpi-card-LERqWBoY.js +0 -1
  554. package/core/built/admin/assets/kpi-helpers-DB3ouhYF.js +0 -1
  555. package/core/built/admin/assets/kpi-tabs-BGvtMD8S.js +0 -1
  556. package/core/built/admin/assets/label-picker-BBWykUeA.js +0 -1
  557. package/core/built/admin/assets/layout-Di5K7doM.js +0 -1
  558. package/core/built/admin/assets/loading-indicator-SFTqyYVE.js +0 -1
  559. package/core/built/admin/assets/member-custom-fields-gOv6Hoh3.js +0 -1
  560. package/core/built/admin/assets/member-detail-D7mZDDp3.js +0 -1
  561. package/core/built/admin/assets/member-route-0Aa52Ntz.js +0 -1
  562. package/core/built/admin/assets/members-DvZG9t69.js +0 -2
  563. package/core/built/admin/assets/moderation-DzzPLDyl.js +0 -1
  564. package/core/built/admin/assets/navigation-modal-CI8Bx5vn.js +0 -1
  565. package/core/built/admin/assets/newsletter-Bg3cq5U-.js +0 -1
  566. package/core/built/admin/assets/newsletter-detail-modal-DQU3r4g2.js +0 -1
  567. package/core/built/admin/assets/newsletters-DMDfZbMS.js +0 -1
  568. package/core/built/admin/assets/note-i8k6pjaw.js +0 -1
  569. package/core/built/admin/assets/notifications-psA_2Ph4.js +0 -1
  570. package/core/built/admin/assets/offers-container-modal-BWfjSdyg.js +0 -1
  571. package/core/built/admin/assets/onboarding-DGQuV7Ew.js +0 -1
  572. package/core/built/admin/assets/overview-C-6xOLaf.js +0 -1
  573. package/core/built/admin/assets/overview-DaLhpRrC.js +0 -1
  574. package/core/built/admin/assets/pages-B6vr9F_D.js +0 -1
  575. package/core/built/admin/assets/popover-CFgqFDvC.js +0 -1
  576. package/core/built/admin/assets/portal-frame-DjBF-uy2.js +0 -1
  577. package/core/built/admin/assets/portal-modal-Cf0pBAk8.js +0 -1
  578. package/core/built/admin/assets/post-analytics-Buz1COoY.js +0 -1
  579. package/core/built/admin/assets/post-analytics-header-B-P0eFnT.js +0 -1
  580. package/core/built/admin/assets/posts-KY3aUhVV.js +0 -1
  581. package/core/built/admin/assets/preferences-Cq1aOiLy.js +0 -5
  582. package/core/built/admin/assets/profile-D6dHYf2o.js +0 -1
  583. package/core/built/admin/assets/select-D_RQaXgt.js +0 -1
  584. package/core/built/admin/assets/settings-B5hJKZ5C.js +0 -1
  585. package/core/built/admin/assets/settings-DIo_F-MF.js +0 -4
  586. package/core/built/admin/assets/share-modal-CLBfj377.js +0 -1
  587. package/core/built/admin/assets/shim-ClF_m5ux.js +0 -1
  588. package/core/built/admin/assets/slack-modal-Bt9I_tEo.js +0 -1
  589. package/core/built/admin/assets/sort-button-DMBXF7tP.js +0 -1
  590. package/core/built/admin/assets/stats-B_YkF7bp.js +0 -1
  591. package/core/built/admin/assets/stats-view-BOCp9RG8.js +0 -1
  592. package/core/built/admin/assets/stripe-connect-modal-BeSukI8q.js +0 -1
  593. package/core/built/admin/assets/tag-detail-2a3BfzTW.js +0 -2
  594. package/core/built/admin/assets/tags-Dp2_8UzL.js +0 -1
  595. package/core/built/admin/assets/testimonials-modal-C9nrypNo.js +0 -1
  596. package/core/built/admin/assets/tier-detail-modal-CxRwgTPR.js +0 -1
  597. package/core/built/admin/assets/use-check-theme-limit-error-C9-QhGdV.js +0 -1
  598. package/core/built/admin/assets/use-filter-params-CSpAvgD2.js +0 -1
  599. package/core/built/admin/assets/use-growth-stats-BOmoPDHJ.js +0 -1
  600. package/core/built/admin/assets/use-post-referrers-CbXLFIex.js +0 -1
  601. package/core/built/admin/assets/use-reply-chain-data-JYFKSO83.js +0 -1
  602. package/core/built/admin/assets/use-settings-navigation-BBzro2-V.js +0 -1
  603. package/core/built/admin/assets/use-tinybird-query-D2Aeoty5.js +0 -39
  604. package/core/built/admin/assets/use-tinybird-token-DBuwMmln.js +0 -1
  605. package/core/built/admin/assets/user-detail-modal-59mBJqxN.js +0 -1
  606. package/core/built/admin/assets/users-5msE1WMs.js +0 -1
  607. package/core/built/admin/assets/web-DUuX7nE2.js +0 -2
  608. package/core/built/admin/assets/web-N8ucs2aG.js +0 -1
  609. package/core/server/api/endpoints/member-custom-fields.js +0 -100
  610. package/core/server/services/jobs/worker-model-event-bridge.js +0 -149
  611. package/core/server/services/members/jobs/clean-expired-comped.js +0 -132
  612. package/core/server/services/update-check/run-update-check.js +0 -63
  613. /package/core/server/lib/{db-date.js → db-types/date.js} +0 -0
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./koenig-lexical-DBSqAuiI.js","./rolldown-runtime-DAXXjFlN.js","./react-Bb3IsNbi.js","./jsx-runtime-DX3WBWVO.js","./preload-helper-DYl5dUZ5.js","./index-6MkPdCtr.js","./framework-provider-DqI25epG.js","./hooks-CuEZV2-q.js","./dist-Ndy-PuGN.js","./config-DOMQDZGZ.js","./chunk-KS7C4IRE-DCsL4i4D.js","./router-provider-B0gZyiGJ.js","./dist-B3keLvjj.js","./text-BQDSDsKs.js","./heading-Dh5SFVjL.js","./lazy-component-COKiVB72.js","./shade-app-CcS3f8MZ-vwURazk8.js","./dist-8YJUlf3B.js","./overlay-escape-C7XYQuvP.js","./button-eNMKQWXr.js","./dist-Dgt2cr6a.js","./Combination-B0l4MKVh.js","./dist-Dcsslyo72.js","./input-surface-BsrIZeSF.js","./skeleton-Ce9GgUpf.js","./use-navigate-with-base-path-BHPA228f.js","./onboarding-CzIsre-d.js","./users-Cg-OeGzC.js","./update-queries-C4CnvJaW.js","./onboarding-qg8Akovm.js","./schemas-DppqmpeJ.js","./index-Bn7QhcZu.css"])))=>i.map(i=>d[i]);
2
+ 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,o as i}from"./framework-provider-DqI25epG.js";import{t as a}from"./preload-helper-DYl5dUZ5.js";import{Gn as o}from"./index-6MkPdCtr.js";var s=e(t(),1),c=n(),l=class extends s.Component{state={hasError:!1};constructor(e){super(e)}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){i(n=>{n.setTag(`adminx_settings_component`,t.componentStack),r(e)}),console.error(e),console.error(`In component:`,t.componentStack)}render(){return this.state.hasError?(0,c.jsxs)(o,{className:`border border-state-danger/40 bg-state-danger/10 text-destructive`,role:`alert`,size:`sm`,variant:`destructive`,children:[`An error occurred loading `,this.props.name,`. Please refresh and try again.`]}):this.props.children}};async function u(){return await a(()=>import(`./koenig-lexical-DBSqAuiI.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]),import.meta.url)}var d=function(){let e=`pending`,t,n,r=u().then(n=>{e=`success`,t=n},t=>{e=`error`,n=t});return{read:()=>{switch(e){case`pending`:throw r;case`error`:throw n instanceof Error?n:Error(String(n));default:return t}}}};export{l as n,d as t};
@@ -0,0 +1 @@
1
+ import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{l as n}from"./dist-B3keLvjj.js";import{n as r,t as i}from"./trend-badge-6ye93YAW.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)(i,{"data-testid":`kpi-card-header-diff`,direction:t,tooltip:o,value:n??``})),(0,a.jsx)(r,{trailing:s,value:e,valueTestId:`kpi-card-header-value`})};export{s as n,c as r,o 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{t as r}from"./button-BshWPHvn.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{l as n}from"./dist-B3keLvjj.js";import{t as r}from"./button-eNMKQWXr.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};
@@ -0,0 +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-Ck5_5Kgq.js";import{h as o,m as s,p as c}from"./dist-B3keLvjj.js";import{a as l}from"./heading-Dh5SFVjL.js";import{L as u,Tr as d,t as f}from"./button-eNMKQWXr.js";import{n as p}from"./skeleton-Ce9GgUpf.js";import{a as m,i as h,n as g,o as _,r as v,t as y}from"./card--VNbfgo3.js";import{a as b,c as x,i as S,l as C,n as w,o as T,r as E,s as D,t as O,u as k}from"./data-list-CA2jYGPq.js";import{An as A,Fn as j,Mn as M,Nn as N,Pn as P,jn as F}from"./index-6MkPdCtr.js";import{i as I}from"./chart-helpers-CfBKt0vT.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)(O,{children:[e&&(0,z.jsxs)(b,{children:[(0,z.jsx)(S,{children:`Source`}),(0,z.jsx)(S,{children:`Visitors`})]}),(0,z.jsx)(E,{children:t?.map(e=>{let t=!!r,i=e.source?e.source.toLowerCase().replace(/[^a-z0-9]/g,`-`):`direct`;return(0,z.jsxs)(k,{className:`group/row ${t?`cursor-pointer`:``}`,"data-testid":`source-row-${i}`,onClick:t?()=>r(e.source):void 0,children:[(0,z.jsx)(w,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,z.jsx)(T,{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)(D,{children:[(0,z.jsx)(x,{children:s(e.visits)}),(0,z.jsx)(C,{children:o(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:b=10,onSourceClick:x})=>{let{isPostLoading:S}=L(),C=R.useMemo(()=>r({data:e,mode:`visits`,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s}),[e,a,o,s]),w=R.useMemo(()=>i({processedData:C,totalVisitors:n,mode:`visits`}),[C,n]),T=w.slice(0,b),E=`Top sources`,D=`How readers found this post ${t&&` ${I(t)}`}`;if(c){let e=w.slice(0,b),n=w.length>b;return(0,z.jsxs)(`div`,{children:[(0,z.jsx)(V,{data:e,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:x}),n&&(0,z.jsx)(`div`,{className:`mt-4`,children:(0,z.jsxs)(A,{children:[(0,z.jsx)(j,{asChild:!0,children:(0,z.jsxs)(f,{className:`w-full`,size:`sm`,variant:`outline`,children:[`View all (`,w.length,`) `,(0,z.jsx)(d,{size:14})]})}),(0,z.jsxs)(F,{className:`overflow-y-auto pt-0 sm:max-w-[480px]`,children:[(0,z.jsxs)(N,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(P,{children:E}),(0,z.jsx)(M,{children:D})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:w,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:x})})]})]})})]})}return(0,z.jsxs)(y,{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)(m,{className:`p-0`,children:[(0,z.jsx)(_,{children:E}),(0,z.jsx)(v,{children:D})]}),(0,z.jsx)(l,{className:`mr-2`,children:`Visitors`})]}),(0,z.jsxs)(g,{className:`overflow-hidden`,children:[(0,z.jsx)(`div`,{className:`h-[1px] w-full bg-border`}),S?(0,z.jsx)(p,{lines:5}):T.length>0?(0,z.jsx)(V,{data:T,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:x}):(0,z.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`No sources data available.`})]}),w.length>10&&(0,z.jsx)(h,{children:(0,z.jsxs)(A,{children:[(0,z.jsx)(j,{asChild:!0,children:(0,z.jsxs)(f,{variant:`outline`,children:[`View all `,(0,z.jsx)(u,{})]})}),(0,z.jsxs)(F,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,z.jsxs)(N,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(P,{children:E}),(0,z.jsx)(M,{children:D})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:w,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:x})})]})]})})]})},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:o},duration:{dataKey:`avg_session_sec`,label:`Time on page`,color:`var(--chart-orange)`,formatter:c}},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:o(a),duration:c(l)}};export{U as n,H as r,W as t};
@@ -0,0 +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{l as r}from"./dist-B3keLvjj.js";import{r as i,t as a}from"./button-eNMKQWXr.js";import{n as o,t as s}from"./trend-badge-6ye93YAW.js";import{i as c}from"./tabs-D2yWLMp_.js";var l=e(t(),1),u=n(),d=({children:e,...t})=>(0,u.jsx)(c,{className:`h-auto`,...t,children:e}),f=({color:e,icon:t,label:n,value:a,diffDirection:c,diffValue:l,className:d,"data-testid":f})=>{let p=t?i[t]:null,m=(0,u.jsxs)(`span`,{className:`flex items-center gap-1.5 transition-all group-hover:text-foreground`,"data-type":`value`,children:[e&&(0,u.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:e}}),p&&(0,u.jsx)(p,{size:16,strokeWidth:1.5}),n]}),h=c&&c!==`hidden`?(0,u.jsx)(s,{className:`mt-0.5`,"data-testid":f?`${f}-diff`:void 0,direction:c,value:l??``}):null;return(0,u.jsx)(o,{className:r(`group`,d),label:m,size:`lg`,trailing:h,value:a,valueTestId:f})},p=l.forwardRef(({variant:e=`dropdown`,className:t,...n},i)=>(0,u.jsx)(a,{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}));p.displayName=`KpiDropdownButton`;export{d as n,f as r,p 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{Fn as a}from"./index-CDP9tIOk.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{l as r,o as i}from"./dist-B3keLvjj.js";import{Wn as a}from"./index-6MkPdCtr.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};
@@ -0,0 +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{m as r,p as i,x as a}from"./hooks-CuEZV2-q.js";import{a as o,bt as s,er as c,ft as l,t as u}from"./button-eNMKQWXr.js";import{i as d,o as f,r as p,s as m,t as h}from"./command-BfpHORBv.js";import{t as g}from"./multi-select-combobox-BcITkUVr.js";import{Kn as _,dr as v,fr as y,lr as b}from"./index-6MkPdCtr.js";import{i as x}from"./filter-sources-BO9xUPj7.js";import{a as S,i as C,n as w,o as T,r as E}from"./labels-CH3Kn8RV.js";import{c as D,l as O}from"./member-custom-fields-DDQV6QeG.js";var k=e=>D({...e,defaultErrorHandler:!1}),A=e=>O({...e,defaultErrorHandler:!1}),j=e(t(),1),M=n(),N=({label:e,onSave:t,onCancel:n,onDelete:r})=>{let[i,o]=(0,j.useState)(e.name),[s,c]=(0,j.useState)(!1),[l,d]=(0,j.useState)(``),[f,p]=(0,j.useState)(!1),[m,h]=(0,j.useState)(!1),g=(0,j.useRef)(null),_=f||m;(0,j.useEffect)(()=>{g.current?.focus(),g.current?.select()},[]);let v=async()=>{if(!i.trim()){d(`Name is required`);return}p(!0);try{await t(e.id,i.trim()),n()}catch(e){d(a(e,`Failed to save label, please try again.`)),p(!1)}},y=e=>{e.key===`Enter`?(e.preventDefault(),v()):e.key===`Escape`&&(e.preventDefault(),_||n())},b=async()=>{h(!0);try{await r(e.id)}catch{h(!1),c(!1)}};return(0,M.jsxs)(`div`,{className:`flex flex-col gap-2 py-1.5`,"data-edit-row":!0,children:[(0,M.jsx)(`input`,{ref:g,className:`h-7 w-full rounded border border-border bg-background px-2 text-sm outline-hidden focus:ring-1 focus:ring-ring disabled:opacity-50`,disabled:_,type:`text`,value:i,onChange:e=>{o(e.target.value),d(``)},onKeyDown:y}),l&&(0,M.jsx)(`span`,{className:`text-xs text-destructive`,children:l}),s?(0,M.jsxs)(`div`,{className:`flex items-center gap-1 text-sm`,children:[(0,M.jsx)(`span`,{className:`flex-1 font-semibold`,children:`Delete label?`}),(0,M.jsx)(u,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,M.jsx)(u,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`destructive`,onClick:()=>void b(),children:m?`Deleting...`:`Delete`})]}):(0,M.jsxs)(`div`,{className:`flex items-center`,children:[(0,M.jsx)(u,{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,M.jsxs)(`div`,{className:`ml-auto flex gap-1`,children:[(0,M.jsx)(u,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:n,children:`Cancel`}),(0,M.jsx)(u,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,onClick:()=>void v(),children:f?`Saving...`:`Save`})]})]})]})};function P(e,t){let n=t.trim().toLowerCase();return n?!e.some(e=>e.name.toLowerCase()===n):!1}var F=256,I=120,L=6,R=16,z=({label:e,isSelected:t,showEdit:n,onToggle:r,onEditClick:i})=>(0,M.jsxs)(f,{className:`group`,value:e.slug,onSelect:()=>r(e.slug),children:[(0,M.jsx)(`span`,{className:`flex-1 truncate`,children:e.name}),n?(0,M.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,M.jsx)(c,{className:`absolute size-3 text-primary transition-opacity duration-150 group-hover:opacity-0`}),(0,M.jsx)(s,{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,M.jsx)(c,{className:`size-4 shrink-0 text-primary`})]}),B=({labels:e,selectedSlugs:t,search:n,onToggle:r,onEdit:i,onDelete:a,onCreate:o,isCreating:s,onSearchClear:c})=>{let[u,m]=(0,j.useState)(null),h=n.trim().toLowerCase(),g=h?e.filter(e=>e.name.toLowerCase().includes(h)):e,_=!!o&&P(e,n),v=!!i,y=async()=>{if(o)try{await o(n.trim())&&c?.()}catch{}},b=async(e,t)=>{i&&await i(e,t)},x=async e=>{a&&(await a(e),m(null))};return(0,M.jsxs)(M.Fragment,{children:[!_&&g.length===0&&(0,M.jsx)(p,{children:`No labels found`}),g.length>0&&(0,M.jsx)(d,{className:`[&_[cmdk-group-heading]]:hidden`,children:g.map(e=>u===e.id?(0,M.jsx)(N,{label:e,onCancel:()=>m(null),onDelete:x,onSave:b},e.id):(0,M.jsx)(z,{isSelected:t.includes(e.slug),label:e,showEdit:v,onEditClick:()=>m(e.id),onToggle:r},e.id))}),_&&(0,M.jsx)(d,{className:`[&_[cmdk-group-heading]]:hidden`,children:(0,M.jsxs)(f,{disabled:s,onSelect:()=>void y(),children:[(0,M.jsx)(l,{className:`size-4`}),s?`Creating...`:`Create "${n.trim()}"`]})})]})},V=({labels:e,onToggle:t})=>(0,M.jsx)(M.Fragment,{children:e.map(e=>(0,M.jsxs)(_,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:n=>{n.stopPropagation(),t(e.slug)},children:[e.name,(0,M.jsx)(o,{className:`size-3`})]},e.id))}),H=({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,M.jsx)(U,{isCreating:o,labels:e,optionSource:t,placeholder:l,selectedLabels:u,selectedSlugs:n,onCreate:a,onDelete:c,onEdit:s,onToggle:i})},U=({labels:e,optionSource:t,selectedLabels:n,selectedSlugs:r,onToggle:i,onCreate:a,isCreating:o,onEdit:s,onDelete:c,placeholder:l=`Search labels...`})=>{let[u,d]=(0,j.useState)(!1),[f,p]=(0,j.useState)(``),g=(0,j.useRef)(null),_=(0,j.useRef)(null),[v,y]=(0,j.useState)(F);(0,j.useLayoutEffect)(()=>{if(!u||!_.current)return;let e=window.innerHeight-_.current.getBoundingClientRect().bottom-L-R;y(Math.max(I,Math.min(F,e)))},[u,r.length]);let b=(0,j.useCallback)(e=>{p(e),t.onSearchChange?.(e)},[t]);return(0,j.useEffect)(()=>{if(!u)return;let e=e=>{_.current&&!_.current.contains(e.target)&&d(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[u]),(0,M.jsxs)(`div`,{ref:_,className:`relative`,children:[(0,M.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(),d(!0)},children:[(0,M.jsx)(V,{labels:n,onToggle:i}),(0,M.jsx)(`input`,{ref:g,className:`min-w-[80px] flex-1 bg-transparent text-control outline-hidden placeholder:text-muted-foreground`,placeholder:n.length===0?l:``,value:f,onChange:e=>{b(e.target.value),u||d(!0)},onFocus:()=>d(!0),onKeyDown:e=>{e.key===`Backspace`&&!f&&r.length>0&&i(r[r.length-1]),e.key===`Escape`&&(d(!1),g.current?.blur())}})]}),u&&(0,M.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,M.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,M.jsx)(h,{shouldFilter:!1,children:(0,M.jsx)(m,{className:`overflow-y-auto`,style:{maxHeight:v},children:(0,M.jsx)(B,{isCreating:o,labels:e,search:f,selectedSlugs:r,onCreate:a,onDelete:c,onEdit:s,onSearchClear:()=>b(``),onToggle:i})})})})]})};function W({selectedSlugs:e,onSelectionChange:t,valueSource:n}){let a=x(),o=n??a,[s,c]=(0,j.useState)(``),l=o.useOptions({query:s,selectedValues:e}),u=(0,j.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,j.useState)(!1),{mutateAsync:h}=C(),{mutateAsync:g}=E(),_=S(),v=T(),y=i(),b=(0,j.useRef)(e);b.current=e;let D=(0,j.useCallback)(e=>{let n=b.current;n.includes(e)?t(n.filter(t=>t!==e)):t([...n,e])},[t]),O=(0,j.useCallback)(e=>{let n=b.current;n.includes(e)||t([...n,e])},[t]),k=(0,j.useCallback)(async e=>{let t=e.trim();if(t){m(!0);try{let e=(await f({name:t}))?.labels?.[0];return e&&O(e.slug),e}catch(e){if(e instanceof r&&e.response?.status===422){let e;try{e=await _(t)}catch{}if(e)return v(),O(e.slug),e}throw y(e),e}finally{m(!1)}}},[f,_,y,v,O]),A=(0,j.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,j.useCallback)(async e=>{let n=u.find(t=>t.id===e);try{await g(e)}catch(e){if(e instanceof r&&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:D,createLabel:k,editLabel:A,deleteLabel:M,isCreating:p}}var G=({field:e,values:t,onChange:n})=>{let r=W({selectedSlugs:t,onSelectionChange:n,valueSource:e.valueSource}),i=(0,j.useRef)(null),[a,o]=(0,j.useState)(0),d=(0,j.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))}},[]),p=`Select...`;r.resolvedSelectedLabels.length===1?p=r.resolvedSelectedLabels[0].name:r.resolvedSelectedLabels.length>1&&(p=`${r.resolvedSelectedLabels.length} labels`);let[m,h]=(0,j.useState)(null),_=(0,j.useCallback)(({option:e,isSelected:t,onSelect:n})=>{let i=e.metadata?.id,a=typeof i==`string`||typeof i==`number`?String(i):``;return m===a&&!t?(0,M.jsx)(N,{label:{id:a,name:e.label,slug:String(e.value),created_at:``,updated_at:``},onCancel:()=>h(null),onDelete:async e=>{await r.deleteLabel(e),h(null)},onSave:async(e,t)=>{await r.editLabel(e,t),h(null)}},a):(0,M.jsxs)(f,{className:`group`,value:e.label,onSelect:n,children:[(0,M.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),t?(0,M.jsx)(c,{className:`size-3 shrink-0 text-primary`}):(0,M.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(),h(a)},children:(0,M.jsx)(s,{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))},[m,r]),x=(0,j.useCallback)(({searchInput:e,clearSearch:t})=>P(r.labels,e)?(0,M.jsx)(`div`,{className:`border-t p-1`,children:(0,M.jsxs)(u,{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,M.jsx)(l,{className:`size-4`}),r.isCreating?`Creating...`:`Create "${e.trim()}"`]})}):null,[r]);return(0,M.jsxs)(b,{onOpenChange:e=>{e?d():r.optionSource.onSearchChange?.(``)},children:[(0,M.jsx)(y,{asChild:!0,children:(0,M.jsx)(`button`,{ref:i,className:`flex size-full items-center truncate text-left text-sm`,type:`button`,children:p})}),(0,M.jsx)(v,{align:`start`,alignOffset:a,className:`w-64 p-0`,children:r.optionSource.isInitialLoad?(0,M.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,M.jsx)(g,{footer:x,i18n:{searchPlaceholder:`Search labels...`,noResultsFound:`No labels found`},optionSource:r.optionSource,renderItem:_,values:t,onChange:n})})]})};export{A as a,k as i,W as n,H as r,G as t};
@@ -0,0 +1 @@
1
+ import"./index-6MkPdCtr.js";
@@ -1 +1 @@
1
- import{t as e}from"./jsx-runtime-DX3WBWVO.js";import{n as t,r as n}from"./hooks-CuEZV2-q.js";import{t as r}from"./build-CsiH26uS.js";import{c as i,p as a}from"./dist-Cb5RSHSg.js";import{S as o,i as s,n as c,r as l,x as u}from"./chart-BnXyfH11.js";import{n as d,t as f}from"./PolarAngleAxis-C4qtHy1B.js";import{n as p,t as m}from"./RadialBarChart-Bh09Stsj.js";var h=e(),g=({config:e,data:t,percentageValue:n,percentageLabel:r,className:g,tooltip:_=!0,size:v=`responsive`})=>{let y=e=>{if(typeof e==`number`)return e;if(typeof e==`string`){let t=Number(e);return Number.isFinite(t)?t:0}return 0},b=(()=>{switch(v){case`sm`:return{barWidth:28,innerRadiusStart:t.length>1?42:56,fontSize:{percentage:`1.2rem`,label:`0.8rem`}};case`md`:return{barWidth:36,innerRadiusStart:t.length>1?60:72,fontSize:{percentage:`1.4rem`,label:`0.9rem`}};case`lg`:return{barWidth:46,innerRadiusStart:t.length>1?72:94,fontSize:{percentage:`1.6rem`,label:`1rem`}};default:return{barWidth:46,innerRadiusStart:t.length>1?72:94,fontSize:{percentage:`1.6rem`,label:`1rem`}}}})(),x={innerRadius:b.innerRadiusStart,outerRadius:b.innerRadiusStart+b.barWidth,startAngle:90,endAngle:-270};return(0,h.jsx)(c,{className:i(`mx-auto`,g),config:e,children:(0,h.jsxs)(m,{data:t,endAngle:x.endAngle,innerRadius:x.innerRadius,outerRadius:x.outerRadius,startAngle:x.startAngle,children:[(0,h.jsxs)(`defs`,{children:[(0,h.jsxs)(`radialGradient`,{cx:`30%`,cy:`30%`,id:`gradientPurple`,r:`70%`,children:[(0,h.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-purple)`,stopOpacity:.5}),(0,h.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-purple)`,stopOpacity:1})]}),(0,h.jsxs)(`radialGradient`,{cx:`30%`,cy:`30%`,id:`gradientBlue`,r:`70%`,children:[(0,h.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-blue)`,stopOpacity:.5}),(0,h.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-blue)`,stopOpacity:1})]}),(0,h.jsxs)(`radialGradient`,{cx:`30%`,cy:`30%`,id:`gradientTeal`,r:`70%`,children:[(0,h.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-teal)`,stopOpacity:.5}),(0,h.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-teal)`,stopOpacity:1})]}),(0,h.jsxs)(`radialGradient`,{cx:`30%`,cy:`30%`,id:`gradientGray`,r:`70%`,children:[(0,h.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-gray)`,stopOpacity:.5}),(0,h.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-gray)`,stopOpacity:1})]})]}),(0,h.jsx)(f,{angleAxisId:0,domain:[0,1],tick:!1,type:`number`}),(0,h.jsx)(p,{cornerRadius:10,dataKey:`value`,minPointSize:-2,background:!0,children:t.length>1&&(0,h.jsx)(u,{className:`fill-foreground opacity-60`,dataKey:`datatype`,fontSize:11,position:`insideStart`})}),(0,h.jsx)(d,{axisLine:!1,tick:!1,tickLine:!1,children:(0,h.jsx)(o,{content:({viewBox:e})=>{if(e&&`cx`in e&&`cy`in e)return(0,h.jsxs)(`text`,{dominantBaseline:`middle`,textAnchor:`middle`,x:e.cx,y:e.cy,children:[n&&(0,h.jsx)(`tspan`,{className:`fill-foreground text-[1.6rem] font-semibold tracking-tight`,x:e.cx,y:(e.cy||0)-6,children:n}),r&&(0,h.jsx)(`tspan`,{className:`fill-muted-foreground font-medium`,x:e.cx,y:(e.cy||0)+14,children:r})]})}})}),_&&(0,h.jsx)(l,{content:(0,h.jsx)(s,{formatter:(e,t,n)=>{let r=n.payload;return(0,h.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,h.jsx)(`div`,{className:`size-2 rounded-full opacity-50`,style:{backgroundColor:r?.color}}),(0,h.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:r?.datatype}),(0,h.jsx)(`div`,{className:`ml-3 font-mono text-xs`,children:a(y(e))})]})},nameKey:`datatype`,hideLabel:!0}),cursor:!1,isAnimationActive:!1})]})})},_=n({dataType:`LinkResponseType`,path:`/links/`}),v=t({method:`PUT`,path:()=>`/links/bulk/`,body:({editedUrl:e})=>({bulk:{action:`updateLink`,meta:{link:{to:e}}}}),searchParams:({originalUrl:e,postId:t})=>({filter:`post_id:${r(t)}+to:${r(e)}`})}),y=(e,t=!1)=>{try{let n=[`ref`,`attribution_id`,`attribution_type`],r=new URL(e);for(let e of n)r.searchParams.delete(e);return t?(r.host+(r.pathname===`/`&&!r.search?``:r.pathname)+(r.search?r.search:``)+(r.hash?r.hash:``)).replace(/^www\./,``):r.toString()}catch{return e}},b=(e,t)=>e.find(e=>e.link.link_id===t),x=e=>{let t=(e?.links.map(e=>({link:e.link,count:e.count?.clicks||0}))||[]).map(e=>({...e,link:{...e.link,originalTo:e.link.to,to:y(e.link.to,!1),title:y(e.link.to,!0)}})).reduce((e,t)=>(e[t.link.title]?(e[t.link.title].count||(e[t.link.title].count=0),e[t.link.title].count+=t.count??0):e[t.link.title]=t,e),{});return Object.values(t).sort((e,t)=>{let n=e.count||0;return(t.count||0)-n})};export{_ as a,v as i,b as n,g as o,x as r,y as t};
1
+ import{t as e}from"./jsx-runtime-DX3WBWVO.js";import{n as t,r as n}from"./hooks-CuEZV2-q.js";import{t as r}from"./build-CsiH26uS.js";import{h as i,l as a}from"./dist-B3keLvjj.js";import{S as o,i as s,n as c,r as l,x as u}from"./chart-BrhA41Zi.js";import{n as d,t as f}from"./PolarAngleAxis-pkMyqz8g.js";import{n as p,t as m}from"./RadialBarChart-JAKoS4KT.js";var h=e(),g=({config:e,data:t,percentageValue:n,percentageLabel:r,className:g,tooltip:_=!0,size:v=`responsive`})=>{let y=e=>{if(typeof e==`number`)return e;if(typeof e==`string`){let t=Number(e);return Number.isFinite(t)?t:0}return 0},b=(()=>{switch(v){case`sm`:return{barWidth:28,innerRadiusStart:t.length>1?42:56,fontSize:{percentage:`1.2rem`,label:`0.8rem`}};case`md`:return{barWidth:36,innerRadiusStart:t.length>1?60:72,fontSize:{percentage:`1.4rem`,label:`0.9rem`}};case`lg`:return{barWidth:46,innerRadiusStart:t.length>1?72:94,fontSize:{percentage:`1.6rem`,label:`1rem`}};default:return{barWidth:46,innerRadiusStart:t.length>1?72:94,fontSize:{percentage:`1.6rem`,label:`1rem`}}}})(),x={innerRadius:b.innerRadiusStart,outerRadius:b.innerRadiusStart+b.barWidth,startAngle:90,endAngle:-270};return(0,h.jsx)(c,{className:a(`mx-auto`,g),config:e,children:(0,h.jsxs)(m,{data:t,endAngle:x.endAngle,innerRadius:x.innerRadius,outerRadius:x.outerRadius,startAngle:x.startAngle,children:[(0,h.jsxs)(`defs`,{children:[(0,h.jsxs)(`radialGradient`,{cx:`30%`,cy:`30%`,id:`gradientPurple`,r:`70%`,children:[(0,h.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-purple)`,stopOpacity:.5}),(0,h.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-purple)`,stopOpacity:1})]}),(0,h.jsxs)(`radialGradient`,{cx:`30%`,cy:`30%`,id:`gradientBlue`,r:`70%`,children:[(0,h.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-blue)`,stopOpacity:.5}),(0,h.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-blue)`,stopOpacity:1})]}),(0,h.jsxs)(`radialGradient`,{cx:`30%`,cy:`30%`,id:`gradientTeal`,r:`70%`,children:[(0,h.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-teal)`,stopOpacity:.5}),(0,h.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-teal)`,stopOpacity:1})]}),(0,h.jsxs)(`radialGradient`,{cx:`30%`,cy:`30%`,id:`gradientGray`,r:`70%`,children:[(0,h.jsx)(`stop`,{offset:`0%`,stopColor:`var(--chart-gray)`,stopOpacity:.5}),(0,h.jsx)(`stop`,{offset:`100%`,stopColor:`var(--chart-gray)`,stopOpacity:1})]})]}),(0,h.jsx)(f,{angleAxisId:0,domain:[0,1],tick:!1,type:`number`}),(0,h.jsx)(p,{cornerRadius:10,dataKey:`value`,minPointSize:-2,background:!0,children:t.length>1&&(0,h.jsx)(u,{className:`fill-foreground opacity-60`,dataKey:`datatype`,fontSize:11,position:`insideStart`})}),(0,h.jsx)(d,{axisLine:!1,tick:!1,tickLine:!1,children:(0,h.jsx)(o,{content:({viewBox:e})=>{if(e&&`cx`in e&&`cy`in e)return(0,h.jsxs)(`text`,{dominantBaseline:`middle`,textAnchor:`middle`,x:e.cx,y:e.cy,children:[n&&(0,h.jsx)(`tspan`,{className:`fill-foreground text-[1.6rem] font-semibold tracking-tight`,x:e.cx,y:(e.cy||0)-6,children:n}),r&&(0,h.jsx)(`tspan`,{className:`fill-muted-foreground font-medium`,x:e.cx,y:(e.cy||0)+14,children:r})]})}})}),_&&(0,h.jsx)(l,{content:(0,h.jsx)(s,{formatter:(e,t,n)=>{let r=n.payload;return(0,h.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,h.jsx)(`div`,{className:`size-2 rounded-full opacity-50`,style:{backgroundColor:r?.color}}),(0,h.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:r?.datatype}),(0,h.jsx)(`div`,{className:`ml-3 font-mono text-xs`,children:i(y(e))})]})},nameKey:`datatype`,hideLabel:!0}),cursor:!1,isAnimationActive:!1})]})})},_=n({dataType:`LinkResponseType`,path:`/links/`}),v=t({method:`PUT`,path:()=>`/links/bulk/`,body:({editedUrl:e})=>({bulk:{action:`updateLink`,meta:{link:{to:e}}}}),searchParams:({originalUrl:e,postId:t})=>({filter:`post_id:${r(t)}+to:${r(e)}`})}),y=(e,t=!1)=>{try{let n=[`ref`,`attribution_id`,`attribution_type`],r=new URL(e);for(let e of n)r.searchParams.delete(e);return t?(r.host+(r.pathname===`/`&&!r.search?``:r.pathname)+(r.search?r.search:``)+(r.hash?r.hash:``)).replace(/^www\./,``):r.toString()}catch{return e}},b=(e,t)=>e.find(e=>e.link.link_id===t),x=e=>{let t=(e?.links.map(e=>({link:e.link,count:e.count?.clicks||0}))||[]).map(e=>({...e,link:{...e.link,originalTo:e.link.to,to:y(e.link.to,!1),title:y(e.link.to,!0)}})).reduce((e,t)=>(e[t.link.title]?(e[t.link.title].count||(e[t.link.title].count=0),e[t.link.title].count+=t.count??0):e[t.link.title]=t,e),{});return Object.values(t).sort((e,t)=>{let n=e.count||0;return(t.count||0)-n})};export{_ as a,v as i,b as n,g as o,x as r,y 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{t as r}from"./stack-CIfOAAVf.js";e();var i=t();function a({className:e,children:t,...a}){return(0,i.jsx)(r,{className:n(`-mx-4 px-4 lg:-mx-5 lg:px-5`,`sticky top-0 z-50`,`bg-gradient-to-b from-background via-background/70 to-background/70 backdrop-blur-md dark:bg-black`,`py-5`,e),"data-list-page":`header`,gap:`lg`,...a,children:t})}function o({className:e,children:t,...a}){return(0,i.jsx)(r,{className:n(`min-h-0 min-w-0 grow pb-4 lg:pb-8`,e),"data-list-page":`body`,gap:`none`,...a,children:t})}var s=Object.assign(function({className:e,children:t,...a}){return(0,i.jsx)(r,{className:n(`h-full min-h-0 grow px-4 lg:px-6`,e),"data-list-page":`list-page`,gap:`none`,...a,children:t})},{Header:a,Body:o});export{s as t};
1
+ import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{l as n}from"./dist-B3keLvjj.js";import{t as r}from"./stack-B2eszIiq.js";e();var i=t();function a({className:e,children:t,...a}){return(0,i.jsx)(r,{className:n(`-mx-4 px-4 lg:-mx-5 lg:px-5`,`sticky top-0 z-50`,`bg-gradient-to-b from-background via-background/70 to-background/70 backdrop-blur-md dark:bg-black`,`py-5`,e),"data-list-page":`header`,gap:`lg`,...a,children:t})}function o({className:e,children:t,...a}){return(0,i.jsx)(r,{className:n(`min-h-0 min-w-0 grow pb-4 lg:pb-8`,e),"data-list-page":`body`,gap:`none`,...a,children:t})}var s=Object.assign(function({className:e,children:t,...a}){return(0,i.jsx)(r,{className:n(`h-full min-h-0 grow px-4 lg:px-6`,e),"data-list-page":`list-page`,gap:`none`,...a,children:t})},{Header:a,Body:o});export{s as t};
@@ -0,0 +1 @@
1
+ import{n as e,r as t}from"./hooks-CuEZV2-q.js";import{d as n,f as r,m as i,o as a,t as o}from"./schemas-DppqmpeJ.js";var s=[`short_text`,`long_text`,`address`];o(s);var c=65535,l=e=>new TextEncoder().encode(e).length,u=()=>r({error:`Enter text.`}).trim(),d=()=>u().refine(e=>l(e)<=c,{error:`This text is too long to save. Shorten it a little.`}),f={short_text:u().max(255,{error:`Use 255 characters or fewer.`}),postal_code:u().max(32,{error:`Use 32 characters or fewer.`}),country_code:u().regex(/^[A-Za-z]{2}$/,{error:`Enter a 2-letter country code, like US.`}).toUpperCase()};Object.keys(f);var p=e=>({type:e,schema:f[e]}),m=e=>u().pipe(i([a(``),e])).optional();function h(e){return e}function g(e,{error:t}){return{kind:`record`,value:n(Object.fromEntries(Object.entries(e).map(([e,t])=>[e,m(t.schema)]))).refine(e=>Object.values(e).some(e=>typeof e==`string`),{error:t}),fields:e}}var _=h({short_text:{kind:`text`,value:f.short_text},long_text:{kind:`text`,value:d()},address:g({line1:p(`short_text`),line2:p(`short_text`),city:p(`short_text`),state:p(`short_text`),postal_code:p(`postal_code`),country:p(`country_code`)},{error:`Enter at least one part of the address.`})});_.address.value;function v(e){let t=_[e];return t?.fields?Object.keys(t.fields):null}function y(e){let t=_[e];return t?.fields?Object.fromEntries(Object.entries(t.fields).map(([e,t])=>[e,t.type])):null}var b=`metafields`,x=/^[a-z0-9_]+$/;function S({namespace:e,key:t,partPath:n}){let r=`${e}.${t}`;return n?`${r}.${n}`:r}function C(e){let[t,n,...r]=e.split(`.`);return t===void 0||n===void 0||![t,n,...r].every(e=>x.test(e))?null:{namespace:t,key:n,partPath:r.length>0?r.join(`.`):null}}var w=`${b}.`;function T(e){return S({namespace:e.namespace,key:e.key,partPath:null})}function E(e){let t=`${w}${T(e)}`,n=v(e.type);return n?n.map(e=>({column:`${t}.${e}`,subField:e})):[{column:t,subField:null}]}function D(e){return e===`metafields`||e.startsWith(w)}var O={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`}}},k=e=>O[e]?.subFields??{},A=s.map(e=>({id:e,...O[e]})),j=e=>A.find(t=>t.id===e)||A[0],M=e=>j(e.type),N=e=>e.flatMap(e=>{let t=k(e.type);return E({namespace:e.namespace,key:e.key,type:e.type}).map(({column:n,subField:r})=>{let i=r===null?void 0:t[r];return{value:n,fieldName:e.name,...i===void 0?{}:{partLabel:i},label:i===void 0?e.name:`${e.name} (${i})`,type:e.type}})}),P=e=>{let t=v(e),n=y(e);if(!t||!n)return null;let r=k(e);return t.map(e=>({key:e,label:r[e],type:n[e]}))},F=e=>typeof e==`object`&&!!e&&!Array.isArray(e),I={address:[[`state`,`postal_code`]]};function L(e){let t=v(e);if(!t)return[];let n=new Map;(I[e]??[]).forEach((e,t)=>{e.forEach(e=>n.set(e,t))});let r=[],i;for(let e of t){let t=n.get(e);if(t!==void 0&&t===i){r[r.length-1].push(e);continue}r.push([e]),i=t}return r}var R=Object.fromEntries(s.map(e=>[e,L(e)])),z=(e,t)=>v(e)===null?typeof t==`string`?t:``:F(t)?(R[e]??[]).map(e=>e.map(e=>t[e]).filter(e=>typeof e==`string`&&e!==``).join(` `)).filter(Boolean).join(`, `):``,B=e=>_[e].kind,V=`MemberCustomFieldsResponseType`,H=V,U=t({dataType:V,path:`/members/metafields/custom/`,returnData:e=>e.members_metafields}),W=e=>U({...e,searchParams:{filter:`status:[active,archived]`}}),G=e({method:`POST`,path:()=>`/members/metafields/custom/`,body:e=>({members_metafields:[e]}),invalidateQueries:{dataType:V},updateQueries:{dataType:V,emberUpdateType:`skip`,update:(e,t)=>{let n=t;if(!n?.members_metafields)return t;let r=e.members_metafields.filter(e=>!n.members_metafields.some(t=>t.key===e.key));return{...n,members_metafields:[...n.members_metafields,...r]}}}}),K=e({method:`PUT`,path:e=>`/members/metafields/custom/${e.key}/`,body:({key:e,...t})=>({members_metafields:[t]}),invalidateQueries:{dataType:V}}),q=e({method:`PUT`,path:()=>`/members/metafields/custom/`,body:e=>({members_metafields:e.map(({key:e})=>({key:e}))}),updateQueries:{dataType:V,emberUpdateType:`skip`,update:(e,t)=>{let n=t;if(!n?.members_metafields)return t;let r=e.members_metafields.map(({key:e})=>e);return{...n,members_metafields:J(r,n.members_metafields)}}}}),J=(e,t)=>{let n=new Map(e.map((e,t)=>[e,t]));return[...t].sort((e,t)=>(n.get(e.key)??1/0)-(n.get(t.key)??1/0))},Y=e({method:`DELETE`,path:e=>`/members/metafields/custom/${e}/`,invalidateQueries:{dataType:V}});export{S as _,P as a,U as c,Y as d,K as f,D as g,j as h,B as i,W as l,M as m,J as n,A as o,q as p,N as r,H as s,z as t,G as u,C as v,_ as y};
@@ -0,0 +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}from"./framework-provider-DqI25epG.js";import{o as i}from"./hooks-CuEZV2-q.js";import{n as a}from"./dist-Ndy-PuGN.js";import{i as o}from"./currency-Dy4Tc2R2.js";import{h as s,n as c,u as l}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as u}from"./router-provider-B0gZyiGJ.js";import{l as d,x as f}from"./dist-B3keLvjj.js";import{t as p}from"./box-CdfQAP_F.js";import{t as m}from"./container-BuQG1wuP.js";import{$n as h,A as g,En as _,Fn as v,Ft as y,Gn as ee,Gt as b,Ht as te,Jt as ne,Kt as x,Lt as re,Mn as S,Wt as C,Yt as ie,Zt as ae,_n as oe,et as w,ft as T,g as E,gn as D,jr as O,k as se,kn as k,kt as ce,qt as le,t as A,xr as ue,xt as de}from"./button-eNMKQWXr.js";import{t as j}from"./switch-CI4gLWqb.js";import{i as fe,n as M,o as N,s as P,t as pe}from"./select-cb0t_TAJ.js";import{t as me}from"./skeleton-Ce9GgUpf.js";import{a as he,i as ge,n as _e,o as ve,r as ye,t as be}from"./breadcrumb-zUrZrBtW.js";import{n as F,t as I}from"./card--VNbfgo3.js";import{t as xe}from"./empty-indicator-D9QdpuNX.js";import{t as L}from"./label-BnSCvffu.js";import{n as Se,o as Ce,t as we}from"./input-group-CMhe2DvY.js";import{t as R}from"./textarea-DJ1Q5V39.js";import{i as Te}from"./users-Cg-OeGzC.js";import{r as Ee}from"./newsletters-DhNigJUh.js";import{$n as z,Cr as De,Jn as Oe,Kn as ke,N as Ae,Qn as B,Tr as V,_ as je,_r as H,a as Me,ar as Ne,b as U,d as Pe,di as Fe,ei as Ie,er as Le,f as Re,g as ze,gr as Be,hr as W,ii as Ve,ir as He,j as Ue,jr as We,kr as Ge,m as Ke,nr as qe,or as Je,p as Ye,pr as G,rr as Xe,sr as Ze,u as Qe,ui as $e,v as et,vr as K,x as tt,xr as nt,y as rt,yr as q}from"./index-6MkPdCtr.js";import{t as it}from"./page-header-De0VzKBi.js";import{t as at}from"./dirty-confirm-dialog-BZ1iytEd.js";import{a as ot}from"./tiers-Nd_z4BZY.js";import{t as J}from"./detail-page-Dnv-CdR1.js";import{t as st}from"./validator-Cr0sMKuW.js";import{n as ct,t as lt}from"./use-unsaved-changes-guard-CBzs-KPi.js";import{a as ut,m as dt,t as ft,y as pt}from"./member-custom-fields-DDQV6QeG.js";import{i as mt,n as ht,r as gt}from"./label-picker-KVoo91sh.js";var Y=e(t(),1),_t=new Set([`active`,`trialing`,`unpaid`,`past_due`]);function vt(e){return(e.subscriptions??[]).some(e=>_t.has(e.status))}function yt(e){return e?`Delete member + Cancel subscription`:`Delete member`}var X=n(),bt=({open:e,onOpenChange:t,member:n,allowLeaveWithUnsavedChanges:r})=>{let i=u(),o=Qe(),[s,c]=Y.useState(!1);Y.useEffect(()=>{e&&c(!1)},[e]);let l=vt(n),d=n.email||n.name||`this member`,f=async()=>{try{let e=l&&s;await o.mutateAsync({id:n.id,cancel:e}),a.success(e?`${d} was deleted and their Stripe subscription was cancelled.`:`${d} was deleted.`),t(!1),r(),i(`/members`)}catch{a.error(`Couldn’t delete the member. Please try again.`)}};return(0,X.jsx)(G,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,X.jsxs)(W,{"data-testid":`delete-member-modal`,children:[(0,X.jsxs)(K,{children:[(0,X.jsx)(q,{children:`Delete member account`}),(0,X.jsxs)(Be,{children:[`Permanently delete `,(0,X.jsx)(`strong`,{children:d}),` 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)(j,{"aria-label":`Also cancel subscription in Stripe`,checked:s,"data-testid":`delete-member-cancel-stripe`,disabled:o.isPending,onCheckedChange:c})]}),(0,X.jsxs)(H,{children:[(0,X.jsx)(A,{"data-testid":`cancel-delete-member`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(A,{"data-testid":`confirm-delete-member`,disabled:o.isPending,variant:`destructive`,onClick:()=>void f(),children:o.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Deleting`})]}):yt(s&&l)})]})]})})},xt=`Disabled from member settings`,St=({open:e,onOpenChange:t,member:n})=>{let r=Pe(),[i,o]=Y.useState(!1);Y.useEffect(()=>{e&&o(!1)},[e]);let s=n.name||n.email||`this member`,c=async()=>{try{await r.mutateAsync({id:n.id,reason:xt,hideComments:i})}catch{a.error(`Couldn’t disable commenting. Please try again.`);return}a.success(`Commenting has been disabled for ${s}.`),t(!1)};return(0,X.jsx)(G,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(W,{"data-testid":`disable-commenting-modal`,children:[(0,X.jsxs)(K,{children:[(0,X.jsx)(q,{children:`Disable commenting`}),(0,X.jsxs)(Be,{children:[(0,X.jsx)(`strong`,{children:s}),` 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)(j,{"aria-label":`Hide all previous comments`,checked:i,"data-testid":`disable-commenting-hide-comments`,disabled:r.isPending,onCheckedChange:o})]}),(0,X.jsxs)(H,{children:[(0,X.jsx)(A,{"data-testid":`cancel-disable-commenting`,disabled:r.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(A,{"data-testid":`confirm-disable-commenting`,disabled:r.isPending,onClick:()=>void c(),children:r.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Disabling`})]}):`Disable commenting`})]})]})})},Ct=({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}=rt(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)(G,{open:e,onOpenChange:t,children:(0,X.jsxs)(W,{"data-testid":`impersonate-modal`,children:[(0,X.jsxs)(K,{children:[(0,X.jsx)(q,{children:`Impersonate member`}),(0,X.jsx)(Be,{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)(L,{htmlFor:`member-signin-url`,children:`Signin link`}),(0,X.jsx)(z,{"data-testid":`member-signin-url`,id:`member-signin-url`,value:s?`Generating link…`:u?`Failed to generate link`:l,readOnly:!0})]}),(0,X.jsxs)(H,{children:[(0,X.jsx)(A,{variant:`outline`,onClick:()=>t(!1),children:`Close`}),(0,X.jsx)(A,{disabled:s||u||!l,onClick:()=>void h(),children:s?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Generating link`})]}):d?`Copied`:`Copy link`})]})]})})},wt=({open:e,onOpenChange:t,member:n})=>{let r=et(),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)(Le,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,X.jsxs)(Xe,{"data-testid":`logout-member-modal`,children:[(0,X.jsxs)(Je,{children:[(0,X.jsx)(Ze,{children:`Sign out member from all devices?`}),(0,X.jsxs)(He,{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)(Ne,{children:[(0,X.jsx)(qe,{disabled:r.isPending,children:`Cancel`}),(0,X.jsx)(A,{"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)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Signing out`})]}):`Sign out`})]})]})})};function Tt(e){return e.can_comment===!1}function Et(e){return Tt(e)?`Enable commenting`:`Disable commenting`}var Dt=({member:e,allowLeaveWithUnsavedChanges:t})=>{let{data:n}=i(),[r,o]=Y.useState(!1),[s,c]=Y.useState(!1),[l,u]=Y.useState(!1),[d,f]=Y.useState(!1),p=Ke(),m=U(),h=p.isPending||p.isSuccess&&m,g=Tt(e),_=Et(e),v=e.name||e.email||`this member`;if(!n||!Te(n))return null;let y=async()=>{if(!g){u(!0);return}try{await p.mutateAsync({id:e.id}),a.success(`Commenting has been enabled for ${v}.`)}catch{a.error(`Couldn’t enable commenting. Please try again.`)}};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(nt,{children:[(0,X.jsx)(We,{asChild:!0,children:(0,X.jsx)(A,{"aria-label":`Actions`,className:`size-(--control-height)`,"data-testid":`member-actions`,size:`icon`,variant:`outline`,children:(0,X.jsx)(S,{size:16})})}),(0,X.jsxs)(De,{align:`end`,children:[(0,X.jsx)(V,{"data-testid":`member-actions-impersonate`,onSelect:()=>o(!0),children:`Impersonate`}),(0,X.jsx)(V,{"data-testid":`member-actions-logout`,onSelect:()=>c(!0),children:`Sign out of all devices`}),(0,X.jsx)(V,{"data-testid":`member-actions-commenting`,disabled:h,onSelect:()=>void y(),children:_}),(0,X.jsx)(Ge,{}),(0,X.jsx)(V,{className:`text-destructive focus:text-destructive`,"data-testid":`member-actions-delete`,onSelect:()=>f(!0),children:`Delete member`})]})]}),(0,X.jsx)(Ct,{memberId:e.id,open:r,onOpenChange:o}),(0,X.jsx)(wt,{member:e,open:s,onOpenChange:c}),(0,X.jsx)(St,{member:e,open:l,onOpenChange:u}),(0,X.jsx)(bt,{allowLeaveWithUnsavedChanges:t,member:e,open:d,onOpenChange:f})]})},Z=e(f(),1);function Ot(e){return e?/^(https?:\/\/|\/|#\/)/i.test(e):!1}var kt=new Set([`bif`,`clp`,`djf`,`gnf`,`jpy`,`kmf`,`krw`,`mga`,`pyg`,`rwf`,`ugx`,`vnd`,`vuv`,`xaf`,`xof`,`xpf`]);function At(e,t){let n=kt.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 jt(e){return e?.trim()||null}function Mt(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 Nt(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=jt(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 ${At(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 Pt(e,t){if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source===`automation_action_revision`){let e=jt(t.subject);return e?`received automated email: ${e}`:`received automated email`}}return Nt(e,t)}function Ft(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 It(e){let t=e.data.attribution;return t?.referrer_source?{name:t.referrer_source,url:t.referrer_url??null}:null}function Lt(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 Rt(e){if(e.type===`click_event`)return e.data.link?.to}function zt(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 Bt(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 Vt(e,t){let n=jt(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:Mt(e),subject:r,action:Nt(e,t.hasMultipleNewsletters),actionTitle:Pt(e,t.hasMultipleNewsletters),join:`–`,object:Ft(e),source:It(e),info:Lt(e,t),description:Rt(e),url:zt(e),route:Bt(e),timestamp:e.data.created_at}}var Ht=({iconName:e})=>{let t={className:`shrink-0 text-muted-foreground`,size:16};switch(e){case`event-signed-up`:return(0,X.jsx)(E,{...t});case`event-logged-in`:return(0,X.jsx)(ae,{...t});case`event-subscriptions`:return(0,X.jsx)(v,{...t});case`event-canceled-subscription`:return(0,X.jsx)(ee,{...t});case`event-subscribed-to-email`:return(0,X.jsx)(le,{...t});case`event-unsubscribed-from-email`:return(0,X.jsx)(ie,{...t});case`event-opened-email`:return(0,X.jsx)(ne,{...t});case`event-received-email`:return(0,X.jsx)(C,{...t});case`event-sent-email`:return(0,X.jsx)(w,{...t});case`event-email-delivery-failed`:return(0,X.jsx)(b,{...t});case`event-email-delivery-spam`:return(0,X.jsx)(x,{...t});case`event-email-changed`:return(0,X.jsx)(ue,{...t});case`event-comment`:return(0,X.jsx)(y,{...t});case`event-click`:return(0,X.jsx)(ce,{...t});case`event-more-like-this`:return(0,X.jsx)(se,{...t});case`event-less-like-this`:return(0,X.jsx)(g,{...t});case`event-gift`:return(0,X.jsx)(oe,{...t});default:return(0,X.jsx)(O,{...t})}},Ut=({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 →`}),Wt=`All events related to this member will be shown here.`,Gt=e=>e?e.charAt(0).toUpperCase()+e.slice(1):``;function Kt(e){if(e&&typeof e==`object`){let t=e.subject;return t?`“${t}”`:`Email`}}var qt=({event:e})=>{if(!e.action)return null;let t=Kt(e.email),n=e.object&&(e.route||Ot(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)(Ht,{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:Gt(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})]})]})},Jt=({memberId:e,hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})=>{let{data:i,isLoading:a}=je(e??``,{limit:`5`,enabled:!!e}),o=(i?.events??[]).map(e=>Vt(e,{hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})),s=new Set;return e?(0,X.jsxs)(`section`,{"aria-labelledby":`member-activity-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-activity-heading`,children:`Activity`}),(0,X.jsx)(I,{children:(0,X.jsxs)(F,{className:`pt-3`,children:[a?(0,X.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,X.jsx)(me,{className:`h-10`}),(0,X.jsx)(me,{className:`h-10`}),(0,X.jsx)(me,{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)(qt,{event:e},n)})}),!a&&o.length>0&&(0,X.jsx)(Ut,{memberId:e})]})})]}):(0,X.jsxs)(`section`,{"aria-labelledby":`member-activity-heading`,className:`flex flex-col gap-3`,children:[(0,X.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-activity-heading`,children:`Activity`}),(0,X.jsx)(I,{children:(0,X.jsx)(F,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(xe,{description:Wt,title:`Activity`,children:(0,X.jsx)(O,{})})})})})]})},Yt=e(st(),1),Xt=ut(`address`)??[];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 Zt(e){let t={};for(let[n,r]of Object.entries(e??{}))for(let[e,i]of Object.entries(r??{}))t[`${n}.${e}`]=i;let n={};for(let[e,r]of Object.entries(t))if(typeof r==`string`&&r.trim()!==``)n[e]=r.trim();else if(typeof r==`object`&&r&&!Array.isArray(r)){let t=$t(r);t&&(n[e]=t)}return n}function Qt(e){let t={};for(let{key:n}of Xt){let r=e[n];typeof r==`string`&&(t[n]=r.trim())}return Object.values(t).some(e=>e!==``)?t:void 0}function $t(e){let t={};for(let{key:n}of Xt){let r=e[n];typeof r==`string`&&r.trim()!==``&&(t[n]=r.trim())}return Object.keys(t).length?t:void 0}function en(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t].sort()}function tn(e,t){let n=e.trim();return t!==void 0&&n===t.trim()?!0:Yt.default.isEmail(n)}function nn(e,t,n){return t?e.trim()===``?`Email is required.`:tn(e,n)?null:`Invalid email.`:null}function rn(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 an(e){return e?e.filter(e=>e.subscribe_on_signup===!0&&e.visibility===`members`).map(e=>e.id):[]}function on(e){return 500-[...e].length}function sn(e,t,n){let r=pn(t),i={id:e,name:r.name,email:r.email,note:r.note,labels:r.labels};return ct(r.newsletters,n.newsletters)||(i.newsletters=r.newsletters.map(e=>({id:e}))),i}function cn(e){return typeof e==`string`?e.trim()||void 0:Qt(e)}function ln(e,t,n){return{id:e,metafields:{[t.namespace]:{[t.key]:cn(n)??null}}}}function un(e,t){let n={};for(let r of t){let t=e[r.key],i=t===void 0?void 0:cn(t);if(i===void 0)continue;let a=pt[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 dn(e){let t=e?.data,n={};for(let e of t?.errors??[])e.property?.startsWith(`metafields.`)&&(n[e.property.slice(11)]=e.context||e.message||`Invalid value.`);return Object.keys(n).length?n:void 0}function fn(e,t){return e.map(e=>t.get(e)??{name:e,slug:e})}function pn(e){return{name:e.name.trim(),email:e.email.trim(),note:e.note,labels:e.labels,newsletters:e.newsletters}}function mn(e,t){return!e||!!t&&ct(pn(e),t)}var hn=({message:e})=>e?(0,X.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:e}):null,gn=({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:Xt.map(({key:a,label:o})=>{let s=`${e}-${a}`,c=n?.[a];return(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,X.jsx)(L,{htmlFor:s,children:o}),(0,X.jsx)(z,{"aria-invalid":c?!0:void 0,disabled:r,id:s,value:t[a]??``,onChange:e=>i({...t,[a]:e.target.value})}),(0,X.jsx)(hn,{message:c})]},a)})});function _n(e){return null}var vn=({field:e,inputId:t,value:n,errors:r,disabled:i,onChange:a})=>{let o=r?.[``],{input:s}=dt(e);switch(s){case`text`:return(0,X.jsx)(z,{"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)(R,{"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)(gn,{disabled:i,errors:r,inputId:t,value:typeof n==`object`&&n?n:{},onChange:a});default:return _n(s)}},yn=({memberId:e,field:t,initialValue:n,onClose:r})=>{let i=dt(t).input===`address`,[o,s]=Y.useState(n??(i?{}:``)),[c,l]=Y.useState(!1),[u,d]=Y.useState(),f=Re(),p=un({[t.key]:o},[t]),m={...c?p:{},...u},h=Object.fromEntries(Object.entries(m).map(([e,n])=>[e===`${t.namespace}.${t.key}`?``:e.slice(`${t.namespace}.${t.key}`.length+1),n])),g=`member-custom-field-${t.key}`,_=!ct(Zt({[t.namespace]:{[t.key]:o}}),Zt({[t.namespace]:{[t.key]:n}}));return(0,X.jsx)(G,{open:!0,onOpenChange:e=>{!e&&!f.isPending&&r()},children:(0,X.jsxs)(W,{"data-testid":`member-custom-field-edit-modal`,onEscapeKeyDown:e=>{(_||f.isPending)&&e.preventDefault()},onInteractOutside:e=>{(_||f.isPending)&&e.preventDefault()},children:[(0,X.jsx)(K,{children:(0,X.jsx)(q,{children:t.name})}),(0,X.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[!i&&(0,X.jsx)(L,{className:`sr-only`,htmlFor:g,children:t.name}),(0,X.jsx)(vn,{disabled:f.isPending,errors:h,field:t,inputId:g,value:o,onChange:e=>{d(void 0),s(e)}}),(0,X.jsx)(hn,{message:h[``]})]}),(0,X.jsxs)(H,{children:[(0,X.jsx)(A,{disabled:f.isPending,variant:`outline`,onClick:r,children:`Cancel`}),(0,X.jsx)(A,{className:`min-w-16`,disabled:f.isPending,onClick:()=>{if(!f.isPending){if(!_){r();return}if(Object.keys(p).length>0){l(!0);return}f.mutate(ln(e,t,o),{onSuccess:()=>{a.success(`${t.name} saved`),r()},onError:e=>{let n=dn(e);d(n),n||a.error(`${t.name} couldn’t be saved`)}})}},children:f.isPending?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):`Save`})]})]})})},bn=({memberId:e,metafields:t,disabled:n})=>{let{data:r,isLoading:i}=mt(),a=r??[],o=Zt(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)(I,{children:(0,X.jsx)(F,{className:`px-6 py-4`,children:(0,X.jsx)(`ul`,{children:a.map(e=>{let t=ft(e.type,o[`${e.namespace}.${e.key}`])||null;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)(de,{"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)(yn,{field:s,initialValue:o[`${s.namespace}.${s.key}`],memberId:e,onClose:()=>c(null)},s.key)]})},xn=({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=ht({selectedSlugs:r,onSelectionChange:e=>n(fn(e,a.current))});o(s.labels);let c=async e=>{let t=await s.createLabel(e);if(t){let e={name:t.name,slug:t.slug};a.current.set(t.slug,e),n([...i.current.filter(e=>e.slug!==t.slug),e])}return t};return(0,X.jsx)(`div`,{className:t?`pointer-events-none opacity-60`:void 0,"data-testid":`member-labels-field`,...t?{inert:``}:{},children:(0,X.jsx)(gt,{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})})},Sn=({draft:e,emailError:t,disabled:n,onChange:r,onEmailBlur:i,onNameBlur:a})=>{let o=on(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)(L,{htmlFor:`member-name`,children:`Name`}),(0,X.jsx)(z,{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)(L,{htmlFor:`member-email`,children:`Email`}),(0,X.jsx)(z,{"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)(L,{children:`Labels`}),(0,X.jsx)(xn,{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)(L,{htmlFor:`member-note`,children:[`Note `,(0,X.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(not visible to member)`})]}),(0,X.jsxs)(we,{className:`flex-1`,children:[(0,X.jsx)(Ce,{className:`h-full`,disabled:n,id:`member-note`,value:e.note,onChange:e=>r({note:e.target.value})}),(0,X.jsx)(Se,{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:d(`font-semibold`,c),children:s})]})})]})]})]})};function Cn(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 wn(e){let t=Cn(e);return t?t.country_code===`US`&&t.region?`${t.region}, US`:t.country||`Unknown location`:`Unknown location`}function Tn(e){let t=e?.referrer_source;return!t||t===`Created manually`?null:t}var 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)(Oe,{className:`size-12 min-w-12 [&_span]:text-lg`,...Ae({name:i,email:a}),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)(te,{size:16}),children:(0,X.jsx)(`span`,{"data-testid":`member-detail-location`,children:wn(e.geolocation)})}),(0,X.jsx)($,{icon:(0,X.jsx)(k,{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)(re,{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)(E,{size:16}),children:[`Created — `,(0,X.jsx)(`span`,{className:`text-foreground`,children:En(e.created_at)})]}),(()=>{let t=Tn(e.attribution);return t?(0,X.jsxs)($,{icon:(0,X.jsx)(D,{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)(_,{size:16}),children:[`Page —`,` `,Ot(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?rn(t):null,s=tt(),{data:c,isLoading:l}=Ee({searchParams:{filter:`status:active`,limit:`50`}}),u=c?.newsletters??[],d=U(),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)(I,{children:(0,X.jsx)(F,{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)(b,{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)(A,{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)(B,{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)(j,{"aria-label":`Subscribe to ${e.name}`,checked:t,"data-testid":`member-subscription-toggle`,disabled:r,onCheckedChange:()=>i(en(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}=ot({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=Ye(),m=Re(),[h,g]=Y.useState(!1),_=(n.subscriptions??[]).filter(e=>Mn(e)===`paid`&&Un.has(e.status)),v=(0,Z.default)().format(`YYYY-MM-DD`),y=!!s&&!h&&(l!==`custom`||!!d),ee=async()=>{if(y){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)(G,{open:e,onOpenChange:e=>{h||t(e)},children:(0,X.jsxs)(W,{"data-testid":`add-comp-modal`,children:[(0,X.jsxs)(K,{children:[(0,X.jsx)(q,{children:`Add complimentary subscription`}),(0,X.jsx)(Be,{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)(L,{htmlFor:`comp-tier`,children:`Tier`}),(0,X.jsxs)(pe,{value:s,onValueChange:c,children:[(0,X.jsx)(N,{"data-testid":`comp-tier-select`,disabled:i||h,id:`comp-tier`,children:(0,X.jsx)(P,{placeholder:i?`Loading tiers…`:`Select a tier`})}),(0,X.jsx)(M,{children:o.map(e=>(0,X.jsx)(fe,{"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)(L,{htmlFor:`comp-duration`,children:`Duration`}),(0,X.jsxs)(pe,{value:l,onValueChange:e=>{Vn(e)&&u(e)},children:[(0,X.jsx)(N,{"data-testid":`comp-duration-select`,disabled:h,id:`comp-duration`,children:(0,X.jsx)(P,{})}),(0,X.jsx)(M,{children:Wn.map(e=>(0,X.jsx)(fe,{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)(L,{htmlFor:`comp-custom-date`,children:`Expires on`}),(0,X.jsx)(z,{"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)(H,{children:[(0,X.jsx)(A,{disabled:h,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,X.jsx)(A,{"data-testid":`comp-add-confirm`,disabled:!y,onClick:()=>void ee(),children:h?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Adding`})]}):`Add subscription`})]})]})})},Kn=({memberId:e,subscription:t})=>{let n=Ye(),r=U(),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)(nt,{children:[(0,X.jsx)(We,{asChild:!0,children:(0,X.jsx)(A,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:i,size:`sm`,variant:`outline`,children:i?(0,X.jsx)(B,{size:`sm`}):(0,X.jsx)(S,{})})}),(0,X.jsxs)(De,{align:`end`,children:[(0,X.jsx)(V,{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)(Ge,{}),(0,X.jsx)(V,{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)(V,{"data-testid":`continue-subscription`,onSelect:()=>c(!1,`Subscription continued`,`Couldn’t continue subscription`),children:`Continue subscription`}):(0,X.jsx)(V,{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=Re(),[r,i]=Y.useState(!1),o=U(),s=n.isPending||n.isSuccess&&o;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(nt,{children:[(0,X.jsx)(We,{asChild:!0,children:(0,X.jsx)(A,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:s,size:`sm`,variant:`outline`,children:s?(0,X.jsx)(B,{size:`sm`}):(0,X.jsx)(S,{})})}),(0,X.jsx)(De,{align:`end`,children:(0,X.jsx)(V,{className:`text-destructive focus:text-destructive`,"data-testid":`remove-complimentary`,onSelect:()=>i(!0),children:`Remove complimentary subscription`})})]}),(0,X.jsx)(Le,{open:r,onOpenChange:e=>{n.isPending||i(e)},children:(0,X.jsxs)(Xe,{children:[(0,X.jsxs)(Je,{children:[(0,X.jsx)(Ze,{children:`Remove complimentary subscription?`}),(0,X.jsx)(He,{children:`The member will lose access to this tier immediately.`})]}),(0,X.jsxs)(Ne,{children:[(0,X.jsx)(qe,{disabled:n.isPending,children:`Cancel`}),(0,X.jsx)(A,{"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)(B,{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=o(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 —`,` `,Ot(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:d(`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)(ke,{"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)(h,{className:d(`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)(I,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(F,{className:`pt-6`,children:(0,X.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,X.jsx)(xe,{title:`No subscriptions`,children:(0,X.jsx)(v,{})})})})});let i=zn(e.subscriptions??[]),a=i.length>0,o=t&&(e.tiers?.length??0)===0,s=o?(0,X.jsxs)(A,{"data-testid":`add-complimentary`,variant:`outline`,onClick:()=>r(!0),children:[(0,X.jsx)(T,{className:`mr-1`,size:16}),`Add complimentary subscription`]}):null;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(I,{"data-testid":`member-subscriptions`,children:(0,X.jsx)(F,{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)(xe,{title:`No subscriptions`,children:(0,X.jsx)(v,{})}),s]})})}),o&&(0,X.jsx)(Gn,{member:e,open:n,onOpenChange:r})]})};function er(e){let t=new URLSearchParams(e),n=t.get(`back`);if(n&&n.startsWith(`/members`))return n;let r=t.get(`post`);return r?`/members?post=${encodeURIComponent(r)}`:`/members`}var tr=`new`,nr=({paidMembersEnabled:e,newslettersUiEnabled:t,engagementEnabled:n})=>{let{member_id:r=``}=s(),i=l(),o=u(),d=er(i.search),f=r===tr,{data:h,isLoading:g,error:_,refetch:v}=ze(r,{enabled:!!r&&!f,searchParams:{include:`tiers`},defaultErrorHandler:!1}),y=h?.members?.[0],ee=!f&&!g&&!!_,b=!f&&!g&&!_&&!y,te=Re(),ne=Me(),x=f?ne:te,{data:re}=ot({searchParams:{filter:`type:paid+active:true`,limit:`all`},enabled:e}),S=(re?.tiers?.length??0)>0,{data:C}=Ee({searchParams:{filter:`status:active`,limit:`50`}}),ie=C!==void 0,ae=(C?.newsletters?.length??0)>1,oe=(re?.tiers?.length??0)>1,[w,T]=Y.useState(void 0),E=Y.useRef(void 0),D=Y.useRef(void 0),O=Y.useRef(!1);Y.useEffect(()=>{if(f){if(E.current!==tr){E.current=tr,O.current=!1;let e=Q({});D.current=e,T(e)}return}if(!y)return;let e=Q(y);if(E.current!==y.id){E.current=y.id,D.current=e,T(e);return}let t=D.current;D.current=e,T(n=>mn(n,t)?e:n)},[y,f]),Y.useEffect(()=>{if(!f||O.current||!C?.newsletters)return;O.current=!0;let e=an(C.newsletters);if(e.length===0)return;let t={...D.current??Q({}),newsletters:[...e].sort()};D.current=t,T(t=>t&&{...t,newsletters:[...e].sort()})},[f,C]);let se=f?D.current:y?Q(y):void 0,k=!!w&&!!se&&!ct(pn(w),se),{dialogProps:ce,bypassNextNavigation:le}=lt({when:k,confirmUnloadWhen:x.isPending||k}),ue=!!w&&tn(w.email,y?.email??void 0),[de,j]=Y.useState(!1);Y.useEffect(()=>{j(!1)},[y?.id,f]);let fe=w?nn(w.email,de,y?.email??void 0):null,[M,N]=Y.useState({name:``,email:``});Y.useEffect(()=>{if(f){N({name:``,email:``});return}y&&N({name:y.name??``,email:y.email??``})},[y?.id,y?.name,y?.email,f]);let P=()=>{w&&N({name:w.name,email:w.email})},pe=e=>{x.isError&&x.reset(),T(t=>t&&{...t,...e})},xe=()=>{if(!(!w||!k||!ue||x.isPending)){if(P(),f){ne.mutate({email:w.email.trim(),name:w.name.trim()||void 0,note:w.note.trim()||void 0,labels:w.labels.length?w.labels:void 0,newsletters:O.current?w.newsletters.map(e=>({id:e})):void 0},{onSuccess:e=>{let t=e.members?.[0];if(!t){a.error(`Member couldn’t be created`);return}le(),a.success(`Member created`),o(`/members/${t.id}`,{replace:!0})},onError:()=>{a.error(`Member couldn’t be created`)}});return}!y||E.current!==y.id||te.mutate(sn(y.id,w,Q(y)),{onSuccess:e=>{let t=e.members?.[0];if(t){let e=Q(t);D.current=e,T(e)}a.success(`Member updated`)},onError:()=>{a.error(`Member couldn’t be saved`)}})}},L=`Save`,Se=`default`,Ce=!0;x.isPending?L=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(B,{size:`sm`}),(0,X.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):k?(L=x.isError?`Retry`:`Save`,Se=x.isError?`destructive`:`default`,Ce=!ue):!f&&te.isSuccess&&(L=`Saved`);let we=!!w&&(f||!!y),R=`Member`;return f?R=`New member`:y?R=Ue(y):b&&(R=`Member not found`),(0,X.jsx)(p,{className:`size-full`,children:(0,X.jsx)(m,{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)(be,{children:(0,X.jsxs)(ge,{children:[(0,X.jsx)(_e,{children:(0,X.jsx)(ye,{asChild:!0,children:(0,X.jsx)(c,{"data-test-link":`members-back`,to:d,children:`Members`})})}),(0,X.jsx)(ve,{}),(0,X.jsx)(_e,{children:!f&&g?(0,X.jsx)(me,{className:`h-4 w-40`}):(0,X.jsx)(he,{className:`truncate`,"data-testid":`member-detail-title`,children:R})})]})})}),(f||y)&&(0,X.jsx)(it.Actions,{children:(0,X.jsxs)(it.ActionGroup,{children:[y&&!f&&(0,X.jsx)(Dt,{allowLeaveWithUnsavedChanges:le,member:y},y.id),(0,X.jsx)(A,{className:`min-w-16`,disabled:Ce,variant:Se,onClick:xe,children:L})]})})]})}),(0,X.jsxs)(J.Body,{children:[ee&&(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)(A,{variant:`outline`,onClick:()=>void v(),children:`Retry`})]}),b&&(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.`})}),we&&w&&(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:M.email,draftName:M.name,engagementEnabled:n,member:y}),(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-8`,children:[(0,X.jsx)(I,{children:(0,X.jsx)(F,{className:`p-6`,children:(0,X.jsx)(Sn,{disabled:x.isPending,draft:w,emailError:fe,onChange:pe,onEmailBlur:()=>{j(!0),P()},onNameBlur:P})})}),y&&(0,X.jsx)(bn,{disabled:x.isPending,memberId:y.id,metafields:y.metafields}),t&&(f||y)&&(0,X.jsx)(kn,{disabled:x.isPending,emailSuppression:y?.email_suppression,memberId:y?.id,subscribedIds:w.newsletters,onChange:e=>pe({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:S,member:y})]}),(f||y&&ie)&&(0,X.jsx)(Jt,{hasMultipleNewsletters:ae,hasMultipleTiers:oe,memberId:y?.id,paidMembersEnabled:e})]})]})]}),(0,X.jsx)(at,{...ce})]})})})},rr=()=>{let{data:e,isLoading:t}=Ve({}),n=Fe(),r=$e();if(t||!e?.settings)return(0,X.jsx)(p,{className:`size-full`,children:(0,X.jsx)(m,{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)(B,{size:`lg`})})})})})});let i=Ie(e.settings,`members_signup_access`);return(0,X.jsx)(nr,{engagementEnabled:i!==`none`&&r===!0,newslettersUiEnabled:r===!0,paidMembersEnabled:n===!0})};export{rr as default};
@@ -0,0 +1,4 @@
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{_ as r}from"./framework-provider-DqI25epG.js";import{_ as i,b as a,g as o,m as s,o as c,p as l,u,v as d,x as f}from"./hooks-CuEZV2-q.js";import{n as p}from"./dist-Ndy-PuGN.js";import{t as m}from"./build-CsiH26uS.js";import{n as h}from"./offers-9J1CSiLy.js";import{s as g}from"./config-DOMQDZGZ.js";import{_,n as v,u as y}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{a as b}from"./router-provider-B0gZyiGJ.js";import{h as x,l as S,m as C,x as w}from"./dist-B3keLvjj.js";import{t as T}from"./box-CdfQAP_F.js";import{t as E}from"./container-BuQG1wuP.js";import{$n as D,B as O,C as k,D as A,F as j,Fn as M,Gt as N,I as P,Mn as ee,Nn as F,O as I,Qn as te,S as ne,V as L,Wt as R,Zn as re,_n as ie,a as z,bn as B,et as ae,ft as oe,g as se,kr as V,l as ce,nt as le,sr as ue,t as H,u as U,v as de,vn as fe}from"./button-eNMKQWXr.js";import{i as pe,n as me,r as he}from"./filters-CRUWecfY.js";import{a as ge,i as _e,l as ve,n as ye,o as be,r as xe,s as Se,t as Ce}from"./command-BfpHORBv.js";import{n as we}from"./input-surface-BsrIZeSF.js";import{t as Te}from"./dropzone-D7nFdAe5.js";import{i as Ee,n as De,o as Oe,s as ke,t as Ae}from"./select-cb0t_TAJ.js";import{t as je}from"./checkbox-CgOn_tKW.js";import{t as Me}from"./empty-indicator-D9QdpuNX.js";import{a as Ne,i as Pe,o as Fe,t as Ie}from"./field-Dihp5p18.js";import{i as Le,n as Re,t as ze}from"./input-group-CMhe2DvY.js";import{a as W,c as G,n as Be,r as K,s as Ve,t as He}from"./table-Do6iQ83Q.js";import{m as Ue}from"./users-Cg-OeGzC.js";import{c as We,f as q,h as Ge,l as Ke,m as qe,n as Je,o as Ye,s as Xe,u as Ze}from"./schemas-DppqmpeJ.js";import{r as Qe}from"./newsletters-DhNigJUh.js";import{$n as $e,$r as et,A as tt,Cr as nt,D as rt,E as it,Gn as at,Jn as ot,Kn as st,N as ct,P as lt,Qn as ut,Tr as dt,_r as J,a as ft,ar as pt,c as mt,ci as ht,di as gt,dr as _t,ei as vt,er as yt,fr as bt,gr as xt,gt as St,h as Ct,hr as wt,i as Tt,ii as Et,ir as Dt,jr as Ot,k as kt,kr as At,l as jt,li as Mt,lr as Nt,nr as Pt,o as Ft,oi as It,or as Lt,pr as Rt,rr as zt,s as Bt,si as Vt,sr as Ht,t as Ut,ui as Wt,vr as Gt,xr as Kt,yr as qt}from"./index-6MkPdCtr.js";import{t as Y}from"./page-header-De0VzKBi.js";import{t as Jt}from"./filter-bar-Da1qxybu.js";import{n as Yt}from"./dirty-confirm-dialog-BZ1iytEd.js";import{t as Xt}from"./get-site-timezone-HgL0jI_F.js";import{t as Zt}from"./list-page-BucXJ0hi.js";import{t as Qt}from"./validator-Cr0sMKuW.js";import{A as $t,C as en,D as tn,E as nn,O as rn,S as an,T as on,_ as sn,a as cn,b as ln,c as un,d as dn,f as fn,g as pn,h as mn,i as hn,j as gn,k as _n,l as vn,m as yn,n as bn,o as xn,p as Sn,r as Cn,s as wn,t as Tn,u as En,v as Dn,w as On,x as kn}from"./filters-DirqNXjH.js";import{a as An,i as jn,n as Mn,t as Nn}from"./filter-sources-BO9xUPj7.js";import{i as Pn,n as Fn,r as In,t as Ln}from"./virtual-list-BW-padMe.js";import{_ as Rn,a as zn,g as Bn,i as Vn,o as Hn,r as Un,t as Wn,u as Gn,v as Kn}from"./member-custom-fields-DDQV6QeG.js";import{a as qn,i as Jn,n as Yn,r as Xn,t as Zn}from"./label-picker-KVoo91sh.js";import{t as Qn}from"./papaparse.min-cQwnxGCG.js";import{n as $n,t as er}from"./custom-field-type-option-BddFlJFa.js";var X=e(t(),1),Z=n();function tr({open:e,memberCount:t,onOpenChange:n,onConfirm:r,isLoading:i=!1}){let[a,o]=(0,X.useState)([]),s=Yn({selectedSlugs:a,onSelectionChange:o}),c=(0,X.useCallback)(e=>{e||o([]),n(e)},[n]);return(0,Z.jsx)(Rt,{open:e,onOpenChange:c,children:(0,Z.jsxs)(wt,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Z.jsx)(Gt,{children:(0,Z.jsxs)(qt,{children:[`Add label to `,C(t),` `,t===1?`member`:`members`]})}),(0,Z.jsx)(Xn,{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)(J,{children:[(0,Z.jsx)(H,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Z.jsx)(H,{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 ${C(a.length)} labels`:`Add label`})]})]})})}function nr({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}=Ft({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=Yn({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)(Rt,{open:e,onOpenChange:m,children:(0,Z.jsxs)(wt,{className:`gap-5`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Z.jsx)(Gt,{children:(0,Z.jsxs)(qt,{children:[`Remove label from `,C(t),` `,t===1?`member`:`members`]})}),(0,Z.jsx)(Xn,{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)(J,{children:[(0,Z.jsx)(H,{variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Z.jsx)(H,{disabled:s.length===0||o,onClick:h,children:o?`Removing...`:s.length>1?`Remove ${C(s.length)} labels`:`Remove label`})]})]})})}function rr({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)(Rt,{open:e,onOpenChange:g,children:(0,Z.jsxs)(wt,{className:`gap-5`,children:[(0,Z.jsx)(Gt,{children:(0,Z.jsx)(qt,{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:[C(n),` `,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 `,C(n),` `,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)(st,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:t=>{t.stopPropagation(),_(e)},children:[n.name,(0,Z.jsx)(z,{className:`size-3`})]},e):null}),(0,Z.jsx)(`input`,{ref:h,className:`min-w-[80px] flex-1 bg-transparent py-1 text-sm outline-hidden placeholder:text-muted-foreground`,id:`newsletter-search`,placeholder:c.length===0?`Search newsletters...`:``,value:u,onChange:e=>{d(e.target.value),f||p(!0)},onFocus:()=>p(!0),onKeyDown:e=>{e.key===`Escape`&&(p(!1),h.current?.blur()),e.key===`Backspace`&&!u&&c.length>0&&_(c[c.length-1])}})]}),f&&(0,Z.jsx)(`div`,{className:`absolute top-full left-0 z-50 mt-1 w-full rounded-md border bg-white shadow-md dark:bg-gray-950`,children:(0,Z.jsx)(Ce,{shouldFilter:!1,children:(0,Z.jsxs)(Se,{className:`max-h-64 overflow-y-auto`,children:[(0,Z.jsx)(xe,{children:`No newsletters found.`}),t.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())).map(e=>(0,Z.jsxs)(be,{value:e.name,onSelect:()=>_(e.id),children:[e.name,c.includes(e.id)&&(0,Z.jsx)(ye,{})]},e.id))]})})})]})]}):(0,Z.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Are you sure you want to unsubscribe `,C(n),` `,x,` from all newsletters? They will no longer receive any email newsletters from you.`]}),(0,Z.jsxs)(J,{children:[(0,Z.jsx)(H,{variant:`outline`,onClick:()=>g(!1),children:`Cancel`}),(0,Z.jsx)(H,{disabled:b,variant:`destructive`,onClick:y,children:a?`Unsubscribing...`:`Unsubscribe`})]})]})})}function ir({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)(Rt,{open:e,onOpenChange:c,children:(0,Z.jsxs)(wt,{className:`gap-5`,children:[(0,Z.jsx)(Gt,{children:(0,Z.jsx)(qt,{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:[C(t),` `,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)(J,{children:[(0,Z.jsx)(H,{variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,Z.jsx)(H,{disabled:a||o||t<1,variant:`destructive`,onClick:()=>void l(),children:a||o?`Deleting...`:`Download backup & delete members`})]})]})})}function ar({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)(at,{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)(k,{className:`mt-0.5 size-4 shrink-0`}),(0,Z.jsx)(`p`,{children:e})]}),(0,Z.jsx)(Te,{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)(de,{className:`mb-2 size-6 text-gray-600`}),(0,Z.jsx)(`span`,{className:`text-sm text-gray-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)(J,{className:`mt-5`,children:(0,Z.jsx)(H,{variant:`outline`,onClick:t,children:`Close`})})]})}var or=e(Qt(),1),sr=[{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`}],cr={label:`Tier`,value:`import_tier`},lr=[`email`,`name`,`note`,`subscribed_to_emails`,`complimentary_plan`,`stripe_customer_id`,`labels`,`created_at`,`gift_id`];function ur({importMemberTier:e=!1,customFieldColumns:t=[]}={}){return[...lr,...e?[cr.value]:[],...t.map(e=>e.value)]}function dr({importMemberTier:e=!1}={}){return[...sr,...e?[cr]:[]]}var fr=[`email`],pr=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 mr(e){let t=new Set;for(let n of e)for(let e of Object.keys(n))e!==`__parsed_extra`&&t.add(e);return[...t]}function hr(e,t=30){if(!e||e.length<=t)return e;let n=[];return mr(e).forEach(r=>{let i=e.filter(e=>e[r]&&e[r].trim()!==``),a=[];if(i.length<=t)a=i;else{let e=Math.floor(t/3),n=e,r=t-e-n,o=i.slice(0,e),s=n>0?i.slice(-n):[],c=Math.max(0,Math.floor(i.length/2)-Math.floor(r/2)),l=i.slice(c,c+r);a=[...o,...l,...s].slice(0,t)}a.forEach((e,t)=>{n[t]||(n[t]={}),n[t][r]=e[r]})}),n}function gr(e,t={}){let n=hr(e),r={},i=ur(t);if(e.length>0)for(let t of mr(e)){if(!r.name&&/name/i.test(t)&&!Bn(t)){r.name=t;continue}!r[t]&&i.includes(t)&&!fr.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&&or.default.isEmail(n)&&!Bn(t)&&(r.email=t);a+=1}return r}function _r(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 vr({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 flex min-h-0 flex-1 flex-col 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)(ut,{size:`md`})}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:S(`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,i&&r&&`border-red-500`),children:(0,Z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,Z.jsxs)(He,{className:`table-fixed`,children:[(0,Z.jsx)(Ve,{children:(0,Z.jsxs)(G,{children:[(0,Z.jsx)(W,{className:`w-1/3`,children:`Field`}),(0,Z.jsx)(W,{className:`w-1/3`,children:(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsxs)(`span`,{children:[`Sample data`,` `,(0,Z.jsxs)(`span`,{className:`text-muted-foreground`,children:[`(#`,C(o+1),`)`]})]}),(0,Z.jsxs)(`div`,{className:`flex items-center`,children:[(0,Z.jsx)(`button`,{"aria-label":`Show previous sample row`,className:S(`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)(te,{className:`size-4`})}),(0,Z.jsx)(`button`,{"aria-label":`Show next sample row`,className:S(`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)(re,{className:`size-4`})})]})]})}),(0,Z.jsx)(W,{className:`w-1/3`,children:`Import as`})]})}),(0,Z.jsx)(Be,{children:h.length>0?h.map(t=>(0,Z.jsxs)(G,{className:S(!t.mapTo&&`bg-muted`),children:[(0,Z.jsx)(K,{className:`text-sm font-medium break-all`,children:t.key}),(0,Z.jsx)(K,{className:S(`text-sm break-all`,!t.value&&`text-muted-foreground`),children:t.value||`\xA0`}),(0,Z.jsx)(K,{children:(0,Z.jsxs)(Ae,{disabled:e===`UPLOADING`,value:t.mapTo||`__not_imported__`,onValueChange:e=>{d(t.key,e===`__not_imported__`?null:e)},children:[(0,Z.jsx)(Oe,{className:S(`h-8 text-sm`,!t.mapTo&&`text-muted-foreground`),children:(0,Z.jsx)(ke,{})}),(0,Z.jsxs)(De,{children:[(0,Z.jsx)(Ee,{value:`__not_imported__`,children:`Not imported`}),l.map(e=>(0,Z.jsx)(Ee,{value:e.value,children:e.label},e.value))]})]})})]},t.key)):(0,Z.jsx)(G,{children:(0,Z.jsx)(K,{className:`text-muted-foreground`,colSpan:3,children:`No data found in the uploaded CSV.`})})})]})})}),i&&r&&(0,Z.jsx)(`p`,{className:`text-sm text-red-600`,children:r}),a>0&&(0,Z.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If an email address in your CSV matches an existing member, they will be updated with the mapped values.`}),(0,Z.jsxs)(`div`,{className:`mt-5`,children:[(0,Z.jsx)(`label`,{className:`mb-1 block text-sm font-semibold`,children:`Label these members`}),(0,Z.jsx)(Xn,{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)(J,{className:`mt-5`,children:[(0,Z.jsx)(H,{disabled:e===`UPLOADING`,variant:`outline`,onClick:p,children:`Start over`}),(0,Z.jsx)(H,{disabled:e===`UPLOADING`||a===0,onClick:m,children:e===`UPLOADING`?(0,Z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(ut,{color:`light`,size:`sm`}),`Uploading`]}):a>0?`Import ${C(a)} ${a===1?`member`:`members`}`:`Import members`})]})]})}function yr({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)(J,{className:`mt-5`,children:[(0,Z.jsx)(H,{variant:`outline`,onClick:e,children:`Upload another file`}),(0,Z.jsx)(H,{onClick:t,children:`Got it`})]})]})}var br=()=>({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 xr({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:C(e.importedCount)}),` `,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-gray-200`}),(0,Z.jsxs)(`p`,{className:`text-sm`,children:[(0,Z.jsx)(`strong`,{children:C(e.errorCount)}),` `,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)(J,{className:`mt-5`,children:e.errorCount>0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(H,{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)(H,{onClick:t,children:`Try again`}):(0,Z.jsx)(H,{onClick:n,children:`View members`})]}):(0,Z.jsx)(Z.Fragment,{children:e.importedCount===0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(H,{variant:`outline`,onClick:n,children:`Close`}),(0,Z.jsx)(H,{onClick:t,children:`Try again`})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(H,{variant:`outline`,onClick:t,children:`Upload another file`}),(0,Z.jsx)(H,{onClick:n,children:`View members`})]})})})]})}function Sr({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)(k,{className:`mt-0.5 size-4 shrink-0`}),(0,Z.jsx)(`p`,{children:e})]})}),(0,Z.jsxs)(J,{className:`mt-5`,children:[t&&(0,Z.jsx)(H,{variant:`outline`,onClick:n,children:`Try again`}),(0,Z.jsx)(H,{onClick:r,children:`OK`})]})]})}var Cr=e(w(),1),wr=e(Qn(),1);function Tr(e){let t=wr.default.parse(e,{header:!0,skipEmptyLines:!0});return!t.data||t.data.length<1?[]:t.data.map(e=>{let t={};for(let[n,r]of Object.entries(e))t[n]=typeof r==`string`?r:typeof r==`number`||typeof r==`boolean`?String(r):``;return t})}var Er=qe([q(),Ke({name:q()})]),Dr=Ke({error:q().catch(``)}).catchall(Ge());function Or(e){return typeof e==`string`?e:Array.isArray(e)?e.map(e=>{let t=Er.safeParse(e);return t.success?typeof t.data==`string`?t.data:t.data.name:``}).filter(Boolean).join(`,`):``}function Q(e){return typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):``}function kr(e){let t={email:Q(e.email),name:Q(e.name),note:Q(e.note),...e.subscribed===void 0?{}:{subscribed_to_emails:Q(e.subscribed)},...e.complimentary_plan===void 0?{}:{complimentary_plan:Q(e.complimentary_plan)},stripe_customer_id:Q(e.stripe_customer_id),created_at:Q(e.created_at),labels:Or(e.labels)};e.newsletters!==void 0&&(t.newsletters=Or(e.newsletters));for(let[n,r]of Object.entries(e))Bn(n)&&(t[n]=Q(r));return t.gift_id=Q(e.gift_id),t.error=Q(e.error),t}function Ar(e){if(e.length===0)return``;let t=e.map(e=>kr(Dr.parse(e))),n=[];for(let e of t)for(let t of Object.keys(e))t!==`error`&&!n.includes(t)&&n.push(t);return n.push(`error`),wr.default.unparse(t,{quotes:!0,escapeFormulae:!0,columns:n})}var jr=Ke({errors:Je(q()).catch([])}).catchall(Ge());function Mr(e){let t=e.meta.stats.imported,n=Array.isArray(e.meta.stats.invalid)?e.meta.stats.invalid:[],r=n.length,i={},a=Ar(n.map(e=>{let t=jr.safeParse(e),{errors:n,...r}=t.success?t.data:{errors:[]},a=n.map(e=>_r(e).trim()).filter(Boolean);for(let e of a)i[e]?i[e].count+=1:i[e]={message:e,count:1};return{...r,error:a.join(`
2
+ `)}})),o=new Blob([a],{type:`text/csv`}),s=URL.createObjectURL(o),c=e.meta.import_label;return{importedCount:t,errorCount:r,errorCsvUrl:s,errorCsvName:c?`${c.name} - Errors.csv`:`Import ${(0,Cr.default)().format(`YYYY-MM-DD HH:mm`)} - Errors.csv`,errorList:Object.values(i),importLabel:e.meta.import_label||void 0}}function Nr(e,t){switch(t.type){case`SELECT_FILE`:return{...e,status:`MAPPING`,file:t.file,fileData:null,mapping:null,dataPreviewIndex:0,mappingError:null,showMappingErrors:!1,fileError:null};case`SET_FILE_ERROR`:return{...e,fileError:t.fileError};case`PARSE_SUCCESS`:return{...e,fileData:t.fileData,mapping:t.mapping,mappingError:t.mappingError};case`PARSE_FAILURE`:return{...e,fileData:[],mapping:null,mappingError:t.mappingError};case`UPDATE_MAPPING`:return{...e,mapping:t.mapping,mappingError:t.mappingError};case`SET_SELECTED_LABEL_SLUGS`:return{...e,selectedLabelSlugs:t.selectedLabelSlugs};case`SET_DATA_PREVIEW_INDEX`:return{...e,dataPreviewIndex:t.dataPreviewIndex};case`SET_SHOW_MAPPING_ERRORS`:return{...e,showMappingErrors:t.showMappingErrors};case`SET_DRAG_OVER`:return{...e,dragOver:t.dragOver};case`UPLOAD_START`:return{...e,status:`UPLOADING`,showMappingErrors:!1};case`UPLOAD_ACCEPTED`:return{...e,status:`PROCESSING`};case`UPLOAD_COMPLETE`:return{...e,status:`COMPLETE`,importResponse:t.importResponse};case`UPLOAD_ERROR`:return{...e,status:`ERROR`,errorMessage:t.errorMessage,errorHeader:t.errorHeader??`Import error`,showTryAgainButton:t.showTryAgainButton??!0};case`RESET`:return br();default:return e}}function Pr({open:e,onOpenChange:t,onComplete:n,onClose:r}){let[s,c]=(0,X.useReducer)(Nr,void 0,br),l=(0,X.useRef)(null),{mutateAsync:u}=Ct(),f=Ut(`importMemberTier`),p=(0,X.useRef)({importMemberTier:f});p.current={importMemberTier:f};let m=(0,X.useMemo)(()=>dr({importMemberTier:f}),[f]),h=Yn({selectedSlugs:s.selectedLabelSlugs,onSelectionChange:e=>c({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}),g=(0,X.useCallback)(()=>{l.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(l.current),l.current=null):l.current&&=null},[]),_=(0,X.useCallback)(()=>{g(),c({type:`RESET`})},[g]);(0,X.useEffect)(()=>()=>{g()},[g]);let v=(0,X.useCallback)(e=>{if(!(!e&&s.status===`UPLOADING`)){if(!e){let e=s.importResponse??void 0;_(),r?.(e)}t(e)}},[r,t,_,s.importResponse,s.status]);(0,X.useEffect)(()=>{if(!s.file)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=Tr(e);if(n.length>0){let e=new pr(gr(n,p.current));c({type:`PARSE_SUCCESS`,fileData:n,mapping:e,mappingError:e.getKeyByValue(`email`)?null:`Please map "Email" to one of the fields in the CSV.`})}else c({type:`PARSE_SUCCESS`,fileData:[],mapping:null,mappingError:`File is empty, nothing to import. Please select a different file.`})}catch{c({type:`PARSE_FAILURE`,mappingError:`Failed to parse this file. Please try another CSV file.`})}},t.onerror=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`Failed to read file${t.error?.message?`: ${t.error.message}`:``}`})},t.onabort=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`File read was interrupted. Please try again.`})},t.readAsText(s.file),()=>{e=!0,t.readyState===FileReader.LOADING&&t.abort()}},[s.file]);let y=(0,X.useCallback)(e=>{let t=/(?:\.([^.]+))?$/.exec(e.name)?.[1];return!t||t.toLowerCase()!==`csv`?(c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`}),!1):(c({type:`SET_FILE_ERROR`,fileError:null}),!0)},[]),b=(0,X.useCallback)(e=>{y(e)&&c({type:`SELECT_FILE`,file:e})},[y]),x=(0,X.useCallback)((e,t)=>{if(!s.mapping)return;let n=s.mapping.updateMapping(e,t),r=s.fileData&&s.fileData.length===0?`File is empty, nothing to import. Please select a different file.`:n.getKeyByValue(`email`)?null:`Please map "Email" to one of the fields in the CSV.`;c({type:`UPDATE_MAPPING`,mapping:n,mappingError:r})},[s.fileData,s.mapping]),C=(0,X.useCallback)(async()=>{if(!s.file||s.mappingError){c({type:`SET_SHOW_MAPPING_ERRORS`,showMappingErrors:!0});return}c({type:`UPLOAD_START`});let e=[];for(let t of s.selectedLabelSlugs){let n=h.labels.find(e=>e.slug===t);n&&e.push(n.name)}try{let t=await u({file:s.file,labels:e,mapping:s.mapping?.toJSON()});if(Tt(t)){let e=Mr(t);g(),l.current=e.errorCsvUrl,c({type:`UPLOAD_COMPLETE`,importResponse:e}),n?.(e);return}c({type:`UPLOAD_ACCEPTED`}),n?.()}catch(e){if(e instanceof d){c({type:`UPLOAD_ERROR`,errorMessage:`The file you uploaded was larger than the maximum file size your server allows.`});return}let t=e instanceof i?e.data?.errors?.[0]:null;if(e instanceof o&&t?.code===`EMAIL_VERIFICATION_NEEDED`){c({type:`UPLOAD_ERROR`,errorMessage:t.message,errorHeader:`Woah there cowboy, that's a big list`,showTryAgainButton:!1}),n?.();return}if(e instanceof a||t?.type===`DataImportError`){c({type:`UPLOAD_ERROR`,errorMessage:t?.message||(e instanceof Error?e.message:`An unexpected error occurred, please try again`)});return}c({type:`UPLOAD_ERROR`,errorMessage:`An unexpected error occurred, please try again`})}},[s.file,s.mapping,s.mappingError,s.selectedLabelSlugs,h.labels,u,g,n]),w=s.fileData?!!s.fileData[s.dataPreviewIndex+1]:!1,T=s.dataPreviewIndex>0,E=s.fileData?.length??0,D=s.status===`MAPPING`||s.status===`UPLOADING`,O=(0,X.useMemo)(()=>{switch(s.status){case`PROCESSING`:return`Import in progress`;case`COMPLETE`:return`Import complete`;case`ERROR`:return s.errorHeader;default:return`Import members`}},[s.errorHeader,s.status]);return(0,Z.jsx)(Rt,{open:e,onOpenChange:v,children:(0,Z.jsxs)(wt,{className:S(`gap-0`,D&&`max-w-2xl`,D&&`flex max-h-[calc(100vh-16vmin)] flex-col`),children:[(0,Z.jsxs)(Gt,{children:[(0,Z.jsx)(qt,{children:O}),(0,Z.jsx)(xt,{className:`sr-only`,children:`Import members from a CSV file.`})]}),s.status===`INIT`&&(0,Z.jsx)(ar,{fileError:s.fileError,onClose:()=>v(!1),onDropAccepted:b,onDropRejected:()=>c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(s.status===`MAPPING`||s.status===`UPLOADING`)&&(0,Z.jsx)(vr,{dataPreviewIndex:s.dataPreviewIndex,fieldMappings:m,fileData:s.fileData,hasNextRecord:w,hasPrevRecord:T,labelPicker:h,mapping:s.mapping,mappingError:s.mappingError,membersCount:E,showMappingErrors:s.showMappingErrors,status:s.status,onDataPreviewIndexChange:e=>{c({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onStartOver:_,onUpdateMapping:x,onUpload:()=>void C()}),s.status===`PROCESSING`&&(0,Z.jsx)(yr,{onClose:()=>v(!1),onUploadAnotherFile:_}),s.status===`COMPLETE`&&s.importResponse&&(0,Z.jsx)(xr,{importResponse:s.importResponse,onClose:()=>v(!1),onReset:_}),s.status===`ERROR`&&(0,Z.jsx)(Sr,{errorMessage:s.errorMessage,showTryAgainButton:s.showTryAgainButton,onClose:()=>v(!1),onTryAgain:_})]})})}function Fr(e){let t=((Bn(e)?e.split(`.`)[2]:e)??e).replace(/[._-]+/g,` `).trim();return t.charAt(0).toUpperCase()+t.slice(1)}function Ir({columnKey:e,isSaving:t,nameError:n,saveError:r,canRetry:i,onSubmit:a,onEdit:o,onCancel:s}){let[c,l]=(0,X.useState)(()=>Fr(e)),[u,d]=(0,X.useState)(Hn[0].id),f=(0,X.useRef)(null);(0,X.useEffect)(()=>{f.current?.scrollIntoView({block:`nearest`})},[]);let p=()=>a(c,u);return(0,Z.jsxs)(`div`,{ref:f,className:`scroll-mb-8 space-y-3`,"data-testid":`import-create-custom-field`,onKeyDown:e=>{if(e.key===`Escape`){e.stopPropagation(),t||s();return}e.key===`Enter`&&!t&&i&&(e.preventDefault(),p())},children:[(0,Z.jsxs)(Ne,{className:`flex-row flex-wrap items-start gap-3`,children:[(0,Z.jsxs)(Ie,{className:`min-w-56 flex-1`,"data-invalid":!!n||void 0,children:[(0,Z.jsx)(Fe,{className:`text-sm!`,htmlFor:`import-custom-field-name`,children:`Name`}),(0,Z.jsx)($e,{"aria-invalid":!!n||void 0,autoComplete:`off`,className:`h-8 text-sm!`,id:`import-custom-field-name`,placeholder:`Enter custom field name`,value:c,autoFocus:!0,onChange:e=>{l(e.target.value),o()}}),n&&(0,Z.jsx)(Pe,{children:n})]}),(0,Z.jsxs)(Ie,{className:`w-44`,children:[(0,Z.jsx)(Fe,{className:`text-sm!`,children:`Type`}),(0,Z.jsxs)(Ae,{value:u,onValueChange:e=>d(e),children:[(0,Z.jsx)(Oe,{"aria-label":`Type`,className:`h-8 text-sm!`,children:(0,Z.jsx)(ke,{children:(0,Z.jsx)(er,{type:u})})}),(0,Z.jsx)(De,{children:Hn.map(e=>(0,Z.jsx)(Ee,{value:e.id,children:(0,Z.jsx)(er,{type:e.id})},e.id))})]})]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 self-end pb-0.5`,children:[(0,Z.jsx)(H,{disabled:t,size:`sm`,variant:`outline`,onClick:s,children:`Cancel`}),(0,Z.jsx)(H,{disabled:t||!i,size:`sm`,onClick:p,children:t?`Saving`:`Save`})]})]}),r&&(0,Z.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:r})]})}var Lr={membership:{heading:`Membership fields`,badge:null,ariaKind:null},custom:{heading:`Custom fields`,badge:`Custom`,ariaKind:`Custom field`}},Rr=Object.keys(Lr);function zr({membershipFields:e,customFieldColumns:t}){let n=[...e.map(e=>({value:e.value,source:`membership`,fieldName:e.label,label:e.label})),...t.map(e=>({value:e.value,source:`custom`,fieldName:e.fieldName,...e.partLabel===void 0?{}:{partLabel:e.partLabel},label:e.label,type:e.type}))],r=Vr(n),i=n.map(e=>({...e,badge:r.has(Br(e))?Lr[e.source].badge:null,ariaKind:Lr[e.source].ariaKind}));return Rr.map(e=>({source:e,heading:Lr[e].heading,targets:i.filter(t=>t.source===e)})).filter(e=>e.targets.length>0)}function Br(e){return e.label.trim().toLowerCase()}function Vr(e){let t=new Map;for(let n of e){let e=t.get(Br(n))??new Set;e.add(n.source),t.set(Br(n),e)}return new Set([...t].filter(([,e])=>e.size>1).map(([e])=>e))}var Hr={email:R,name:U,note:O,subscribed_to_emails:ae,stripe_customer_id:M,complimentary_plan:I,labels:P,created_at:ue,gift_id:ie,import_tier:L};function Ur(e,t){return(0,Z.jsx)(ne,{className:t})}function Wr({target:e,className:t}){switch(e.source){case`membership`:return(0,Z.jsx)(Hr[e.value]??ne,{className:t});case`custom`:return(0,Z.jsx)($n,{className:t,type:e.type});default:return Ur(e,t)}}function Gr(e,t,n){return ve((n??[]).join(` `),t)}function Kr({className:e,columnKey:t,value:n,disabled:r,invalid:i,targetGroups:a,canCreateField:o,open:s,search:c,onOpenChange:l,onSearchChange:u,onSelect:d,onCreateField:f,triggerRef:p}){let m=(0,X.useRef)(!1),h=a.flatMap(e=>e.targets).find(e=>e.value===n),g=h?.badge??null,_=h?.ariaKind??null,v=e=>{l(!1),d(e)};return(0,Z.jsxs)(Nt,{open:s,modal:!0,onOpenChange:e=>{r||l(e)},children:[(0,Z.jsx)(bt,{asChild:!0,children:(0,Z.jsxs)(H,{ref:p,"aria-disabled":r||void 0,"aria-invalid":i||void 0,"aria-label":h?`Field for ${t}, ${h.label}${_?`, ${_}`:``}`:`Field for ${t}, not chosen`,className:S(`h-(--control-height) w-full scroll-my-8 justify-start gap-2 px-2 font-normal`,e,`hover:text-current`,we.invalidSelf,`aria-[invalid=true]:ring-2`,r&&`cursor-not-allowed hover:bg-transparent`),role:`combobox`,variant:`outline`,children:[(0,Z.jsxs)(`span`,{className:S(`flex shrink-0 items-center`,r&&`opacity-60`),children:[h&&(0,Z.jsx)(Wr,{className:`size-4 text-foreground`,target:h}),!h&&(0,Z.jsx)(`span`,{className:`size-4 rounded-sm border border-dashed border-border-strong`})]}),h?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`span`,{className:S(`flex min-w-0 flex-1 items-baseline text-left text-sm font-medium`,r&&`opacity-60`),children:[(0,Z.jsx)(`span`,{className:`min-w-0 shrink-[999] truncate`,children:h.fieldName}),h.partLabel&&(0,Z.jsx)(`span`,{className:`min-w-0 truncate whitespace-pre`,children:` (${h.partLabel})`})]}),g&&(0,Z.jsx)(st,{className:S(`ms-2 shrink-0 max-md:hidden`,r&&`opacity-60`),variant:`secondary`,children:g})]}):(0,Z.jsx)(`span`,{className:S(`min-w-0 truncate text-sm text-muted-foreground`,r&&`opacity-60`),children:`Select field`}),(0,Z.jsx)(D,{className:`ms-auto size-4 shrink-0 opacity-50`})]})}),(0,Z.jsx)(_t,{align:`start`,className:`flex max-h-(--radix-popover-content-available-height) w-(--radix-popover-trigger-width) min-w-64 flex-col p-0`,collisionPadding:16,onCloseAutoFocus:e=>{m.current&&(m.current=!1,e.preventDefault(),f())},children:(0,Z.jsxs)(Ce,{className:`min-h-0`,filter:Gr,children:[(0,Z.jsx)(ge,{className:`h-(--control-height) shrink-0`,placeholder:`Search fields...`,value:c,onValueChange:u}),(0,Z.jsxs)(Se,{className:`min-h-0 flex-1`,children:[a.map(e=>(0,Z.jsx)(_e,{heading:e.heading,children:e.targets.map(e=>(0,Z.jsxs)(be,{keywords:[e.label],value:e.value,onSelect:()=>v(e.value),children:[(0,Z.jsx)(Wr,{target:e}),(0,Z.jsx)(`span`,{className:`truncate`,children:e.label}),n===e.value&&(0,Z.jsx)(ye,{})]},e.value))},e.source)),o?(0,Z.jsx)(_e,{forceMount:!0,children:(0,Z.jsxs)(be,{className:`font-semibold text-green`,value:`Add custom field`,forceMount:!0,onSelect:()=>{m.current=!0,l(!1)},children:[(0,Z.jsx)(oe,{}),(0,Z.jsx)(`span`,{children:`Add custom field`})]})}):(0,Z.jsx)(xe,{children:`No fields found.`})]})]})})]})}function qr(e,t,n){let r=new Set(e);return n?r.add(t):r.delete(t),r}function Jr(e){return zn(e.type)?null:Un([e])[0]?.value??null}function Yr({status:e,fileData:t,mapping:n,mappingError:r,showMappingErrors:c,dataPreviewIndex:u,targetGroups:d,canCreateCustomFields:p,labelPicker:m,onUpdateMapping:h,onFieldCreated:g,onDataPreviewIndexChange:_,onStartOver:v,onColumnsChanged:y,onUpload:b}){let[x,w]=(0,X.useState)(new Set),[T,E]=(0,X.useState)(new Set),[D,O]=(0,X.useState)(null),k=(0,X.useRef)(new Map);(0,X.useLayoutEffect)(()=>{let[e]=D?.columns??[];e&&k.current.get(e)?.scrollIntoView({block:`nearest`,behavior:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`})},[D]);let[A,j]=(0,X.useState)(null),[M,N]=(0,X.useState)(null),{mutateAsync:P,isPending:ee}=Gn(),[F,I]=(0,X.useState)(null),[ne,L]=(0,X.useState)(null),[R,ie]=(0,X.useState)(!0),z=l(),B=(0,X.useCallback)(()=>{I(null),L(null),ie(!0)},[]),ae=e=>{let t=e instanceof i?e.data?.errors?.[0]:null;if(e instanceof a&&t?.property===`name`){I(f(e,`Invalid name`));return}L(f(e,e instanceof s?e.message:`Could not create the custom field, please try again.`)),ie(!(e instanceof o)&&t?.type!==`NoPermissionError`),e instanceof o||z(e,{withToast:!1})},oe=async(e,t,n)=>{B();let r;try{r=(await P({name:t,type:n})).members_metafields?.[0]}catch(e){ae(e);return}if(!r){L(`The field was created, but this column could not be mapped to it. Choose it from the list.`),ie(!1),z(Error(`Custom field create returned no field`));return}let i=Jr(r);if(g(e,i),j(null),O(null),i){k.current.get(e)?.focus();return}ce(e,r.name)},se=e=>!!A&&A!==e.key,V=t=>e===`UPLOADING`||ee,ce=(e,t)=>{B(),j(null),N({columnKey:e,search:t})},le=e=>{B(),j(e)},ue=(e,t)=>{let r=n?.getKeyByValue(t);r&&r!==e.key&&w(e=>qr(e,r,!0)),h(e.key,t)},U=e=>!T.has(e.key)&&(!!e.mapTo||x.has(e.key)),de=(e,t)=>{O(null),y(),E(n=>qr(n,e.key,!t)),w(n=>qr(n,e.key,t&&!e.mapTo)),!t&&A===e.key&&j(null)},fe=c&&r||D?.message,pe=!!fe&&!D?.columns.size,me=t.length,he=u>0,ge=!!t[u+1],_e=(0,X.useMemo)(()=>mr(t),[t]),ve=n?_e.map(e=>({key:e,value:t[u]?.[e]??``,mapTo:n.get(e)})):[],ye=Object.fromEntries(ve.map(e=>[e.key,U(e)?e.mapTo:``])),be=()=>{if(r)return null;if(!Object.values(ye).includes(`email`))return{message:`Please map "Email" to one of the fields in the CSV, and make sure it is selected.`,columns:new Set};let e=Object.keys(ye).filter(e=>ye[e]===null);return e.length===0?null:{message:`Choose a field for ${e.map(e=>`"${e}"`).join(`, `)}, or deselect ${e.length===1?`it`:`them`}.`,columns:new Set(e)}};return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:`mt-5 flex min-h-0 flex-1 flex-col space-y-5`,children:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:S(`flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border`,pe&&`border-destructive`),children:(0,Z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,Z.jsxs)(He,{className:`table-fixed`,children:[(0,Z.jsx)(Ve,{children:(0,Z.jsxs)(G,{children:[(0,Z.jsx)(W,{className:`w-10`,children:(0,Z.jsx)(`span`,{className:`sr-only`,children:`Import this column`})}),(0,Z.jsx)(W,{className:`w-[26%]`,children:`Field`}),(0,Z.jsx)(W,{className:`w-[30%]`,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:[`(#`,C(u+1),`)`]})]}),(0,Z.jsxs)(`div`,{className:`flex items-center`,children:[(0,Z.jsx)(`button`,{"aria-label":`Show previous sample row`,className:S(`rounded p-0.5 hover:bg-muted`,!he&&`cursor-default opacity-30`),disabled:!he||e===`UPLOADING`,type:`button`,onClick:()=>_(u-1),children:(0,Z.jsx)(te,{className:`size-4`})}),(0,Z.jsx)(`button`,{"aria-label":`Show next sample row`,className:S(`rounded p-0.5 hover:bg-muted`,!ge&&`cursor-default opacity-30`),disabled:!ge||e===`UPLOADING`,type:`button`,onClick:()=>_(u+1),children:(0,Z.jsx)(re,{className:`size-4`})})]})]})}),(0,Z.jsx)(W,{className:`w-[38%]`,children:`Import as`})]})}),(0,Z.jsx)(Be,{children:ve.length>0?ve.map(e=>(0,Z.jsxs)(X.Fragment,{children:[(0,Z.jsxs)(G,{className:S(`transition-opacity [&>td]:group-hover:bg-transparent`,!U(e)&&`bg-muted/50`,se(e)&&`opacity-40`),children:[(0,Z.jsx)(K,{children:(0,Z.jsx)(je,{"aria-label":`Import ${e.key}`,checked:U(e),disabled:V(e),onCheckedChange:t=>de(e,t===!0)})}),(0,Z.jsx)(K,{className:S(`text-sm font-medium break-all`,!U(e)&&`text-muted-foreground`),children:e.key}),(0,Z.jsx)(K,{className:S(`text-sm break-all`,(!e.value||!U(e))&&`text-muted-foreground`),children:e.value||`\xA0`}),(0,Z.jsx)(K,{children:(0,Z.jsx)(Kr,{canCreateField:p,className:S(!U(e)&&`invisible`),columnKey:e.key,disabled:V(e),invalid:D?.columns.has(e.key),open:M?.columnKey===e.key,search:M?.columnKey===e.key?M.search:``,targetGroups:d,triggerRef:t=>{t?k.current.set(e.key,t):k.current.delete(e.key)},value:e.mapTo,onCreateField:()=>le(e.key),onOpenChange:t=>t?ce(e.key,``):N(null),onSearchChange:t=>N({columnKey:e.key,search:t}),onSelect:t=>{O(null),ue(e,t)}})})]}),A===e.key&&(0,Z.jsx)(G,{className:`bg-transparent hover:bg-transparent`,children:(0,Z.jsx)(K,{className:`p-2`,colSpan:4,children:(0,Z.jsx)(`div`,{className:`rounded-lg border bg-surface-elevated-2 p-3 shadow-lg`,children:(0,Z.jsx)(Ir,{canRetry:R,columnKey:e.key,isSaving:ee,nameError:F,saveError:ne,onCancel:()=>{B(),j(null),k.current.get(e.key)?.focus()},onEdit:B,onSubmit:(t,n)=>void oe(e.key,t,n)})})})})]},e.key)):(0,Z.jsx)(G,{children:(0,Z.jsx)(K,{className:`text-muted-foreground`,colSpan:4,children:`No data found in the uploaded CSV.`})})})]})})}),fe&&(0,Z.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:fe}),me>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)(Xn,{isCreating:m.isCreating,labels:m.labels,optionSource:m.optionSource,resolvedSelectedLabels:m.resolvedSelectedLabels,selectedSlugs:m.selectedSlugs,onCreate:m.createLabel,onDelete:m.deleteLabel,onEdit:m.editLabel,onToggle:m.toggleLabel})]})]})}),(0,Z.jsxs)(J,{className:`mt-5`,children:[(0,Z.jsx)(H,{disabled:e===`UPLOADING`,variant:`outline`,onClick:v,children:`Start over`}),(0,Z.jsx)(H,{disabled:e===`UPLOADING`||me===0,onClick:()=>{let e=be();if(e){O(e);return}b(ye)},children:e===`UPLOADING`?(0,Z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(ut,{color:`light`,size:`sm`}),`Uploading`]}):me>0?`Import ${C(me)} ${me===1?`member`:`members`}`:`Import members`})]})]})}function Xr({open:e,onOpenChange:t,onComplete:n,onClose:r}){let[s,c]=(0,X.useReducer)(Nr,void 0,br),l=(0,X.useRef)(null),{mutateAsync:u}=Ct(),p=Ut(`importMemberTier`),m=Ut(`membersCustomFields`),{data:h,isError:g}=Jn(),_=(0,X.useMemo)(()=>Un(h??[]),[h]),v=h!==void 0||g,y=(0,X.useRef)({importMemberTier:p,customFieldColumns:_});(0,X.useLayoutEffect)(()=>{y.current={importMemberTier:p,customFieldColumns:_}},[p,_]);let b=(0,X.useMemo)(()=>zr({membershipFields:dr({importMemberTier:p}),customFieldColumns:_}),[p,_]),x=Yn({selectedSlugs:s.selectedLabelSlugs,onSelectionChange:e=>{D.current=!0,c({type:`SET_SELECTED_LABEL_SLUGS`,selectedLabelSlugs:e})}}),C=(0,X.useCallback)(()=>{l.current&&typeof URL.revokeObjectURL==`function`?(URL.revokeObjectURL(l.current),l.current=null):l.current&&=null},[]),w=(0,X.useCallback)(()=>{C(),D.current=!1,c({type:`RESET`})},[C]);(0,X.useEffect)(()=>()=>{C()},[C]);let{confirm:T,dialogProps:E}=Yt(),D=(0,X.useRef)(!1),O=(0,X.useCallback)(e=>{if(!(!e&&s.status===`UPLOADING`)){if(!e){T(s.status===`MAPPING`&&D.current,()=>{let e=s.importResponse??void 0;w(),r?.(e),t(!1)});return}t(e)}},[T,r,t,w,s.importResponse,s.status]);(0,X.useEffect)(()=>{if(!s.file||!v)return;let e=!1,t=new FileReader;return t.onload=t=>{if(!e)try{let e=t.target?.result,n=Tr(e);if(n.length>0){let e=new pr(gr(n,y.current));c({type:`PARSE_SUCCESS`,fileData:n,mapping:e,mappingError:null})}else c({type:`PARSE_SUCCESS`,fileData:[],mapping:null,mappingError:`File is empty, nothing to import. Please select a different file.`})}catch{c({type:`PARSE_FAILURE`,mappingError:`Failed to parse this file. Please try another CSV file.`})}},t.onerror=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`Failed to read file${t.error?.message?`: ${t.error.message}`:``}`})},t.onabort=()=>{e||c({type:`PARSE_FAILURE`,mappingError:`File read was interrupted. Please try again.`})},t.readAsText(s.file),()=>{e=!0,t.readyState===FileReader.LOADING&&t.abort()}},[s.file,v]);let k=(0,X.useCallback)(e=>{let t=/(?:\.([^.]+))?$/.exec(e.name)?.[1];return!t||t.toLowerCase()!==`csv`?(c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`}),!1):(c({type:`SET_FILE_ERROR`,fileError:null}),!0)},[]),A=(0,X.useCallback)(e=>{k(e)&&c({type:`SELECT_FILE`,file:e})},[k]),j=(0,X.useCallback)((e,t)=>{if(!s.mapping)return;D.current=!0;let n=s.mapping.updateMapping(e,t),r=s.fileData&&s.fileData.length===0?`File is empty, nothing to import. Please select a different file.`:null;c({type:`UPDATE_MAPPING`,mapping:n,mappingError:r})},[s.fileData,s.mapping]),M=(0,X.useCallback)((e,t)=>{t&&j(e,t)},[j]),N=(0,X.useCallback)(async e=>{if(!s.file||s.mappingError){c({type:`SET_SHOW_MAPPING_ERRORS`,showMappingErrors:!0});return}c({type:`UPLOAD_START`});let t=[];for(let e of s.selectedLabelSlugs){let n=x.labels.find(t=>t.slug===e);n&&t.push(n.name)}try{let r=await u({file:s.file,labels:t,mapping:e});if(Tt(r)){let e=Mr(r);C(),l.current=e.errorCsvUrl,c({type:`UPLOAD_COMPLETE`,importResponse:e}),n?.(e);return}c({type:`UPLOAD_ACCEPTED`}),n?.()}catch(e){if(e instanceof d){c({type:`UPLOAD_ERROR`,errorMessage:`The file you uploaded was larger than the maximum file size your server allows.`});return}let t=e instanceof i?e.data?.errors?.[0]:null;if(e instanceof o&&t?.code===`EMAIL_VERIFICATION_NEEDED`){c({type:`UPLOAD_ERROR`,errorMessage:f(e,e.message),errorHeader:`Woah there cowboy, that's a big list`,showTryAgainButton:!1}),n?.();return}if(e instanceof a||t?.type===`DataImportError`){c({type:`UPLOAD_ERROR`,errorMessage:f(e,e instanceof Error?e.message:`An unexpected error occurred, please try again`)});return}c({type:`UPLOAD_ERROR`,errorMessage:`An unexpected error occurred, please try again`})}},[s.file,s.mappingError,s.selectedLabelSlugs,x.labels,u,C,n]),P=s.status===`MAPPING`||s.status===`UPLOADING`,ee=(0,X.useMemo)(()=>{switch(s.status){case`PROCESSING`:return`Import in progress`;case`COMPLETE`:return`Import complete`;case`ERROR`:return s.errorHeader;default:return`Import members`}},[s.errorHeader,s.status]);return(0,Z.jsxs)(Rt,{open:e,onOpenChange:O,children:[(0,Z.jsxs)(wt,{className:S(`gap-0`,P&&`max-w-4xl`,P&&`flex max-h-[calc(100vh-16vmin)] flex-col`),children:[(0,Z.jsxs)(Gt,{children:[(0,Z.jsx)(qt,{children:ee}),(0,Z.jsx)(xt,{className:`sr-only`,children:`Import members from a CSV file.`})]}),s.status===`INIT`&&(0,Z.jsx)(ar,{fileError:s.fileError,onClose:()=>O(!1),onDropAccepted:A,onDropRejected:()=>c({type:`SET_FILE_ERROR`,fileError:`The file type you uploaded is not supported`})}),(s.status===`MAPPING`||s.status===`UPLOADING`)&&s.fileData===null&&(0,Z.jsx)(`div`,{className:`flex items-center justify-center rounded-md border bg-muted p-10`,children:(0,Z.jsx)(ut,{size:`md`})}),(s.status===`MAPPING`||s.status===`UPLOADING`)&&s.fileData!==null&&(0,Z.jsx)(Yr,{canCreateCustomFields:m,dataPreviewIndex:s.dataPreviewIndex,fileData:s.fileData,labelPicker:x,mapping:s.mapping,mappingError:s.mappingError,showMappingErrors:s.showMappingErrors,status:s.status,targetGroups:b,onColumnsChanged:()=>{D.current=!0},onDataPreviewIndexChange:e=>{c({type:`SET_DATA_PREVIEW_INDEX`,dataPreviewIndex:e})},onFieldCreated:M,onStartOver:w,onUpdateMapping:j,onUpload:e=>void N(e)}),s.status===`PROCESSING`&&(0,Z.jsx)(yr,{onClose:()=>O(!1),onUploadAnotherFile:w}),s.status===`COMPLETE`&&s.importResponse&&(0,Z.jsx)(xr,{importResponse:s.importResponse,onClose:()=>O(!1),onReset:w}),s.status===`ERROR`&&(0,Z.jsx)(Sr,{errorMessage:s.errorMessage,showTryAgainButton:s.showTryAgainButton,onClose:()=>O(!1),onTryAgain:w})]}),(0,Z.jsx)(yt,{open:E.open,onOpenChange:E.onOpenChange,children:(0,Z.jsxs)(zt,{className:`z-[1100]`,"data-testid":`import-members-leave-guard`,overlayClassName:`z-[1100]`,onEscapeKeyDown:e=>e.stopPropagation(),children:[(0,Z.jsxs)(Lt,{children:[(0,Z.jsx)(Ht,{children:`Leave without importing?`}),(0,Z.jsx)(Dt,{children:`The columns you have mapped will be lost.`})]}),(0,Z.jsxs)(pt,{children:[(0,Z.jsx)(Pt,{children:`Keep mapping`}),(0,Z.jsx)(H,{variant:`destructive`,onClick:E.onConfirm,children:`Leave`})]})]})})]})}function Zr(e){return Ut(`membersImportRedesign`)?(0,Z.jsx)(Xr,{...e}):(0,Z.jsx)(Pr,{...e})}var Qr=`metafields`,$r=`${Qr}.key`,ei=`${Qr}.value`,ti=`metafields.`;function $(e){return`${ti}${e.namespace}.${e.key}`}function ni(e){if(!e.startsWith(`metafields.`))return null;let[t,n,...r]=e.slice(11).split(`.`);return!t||!n||r.length>0?null:{namespace:t,key:n}}function ri(e,t){return Rn({namespace:e.namespace,key:e.key,partPath:t||null})}function ii(e){let t=typeof e==`string`?Kn(e):null;return t?{namespace:t.namespace,key:t.key,subfield:t.partPath??``}:null}var ai=On;function oi(e){return`${$r}:${m(e)}`}function si(e){let[t,n]=e;return{subfield:typeof t==`string`?t:``,value:n}}function ci(e,t){return e||(t.namespace&&t.key?{namespace:t.namespace,key:t.key}:null)}function li(e){return{presenceOperators:ai,address(t,n){let r=ci(e,n.params),{subfield:i,value:a}=si(t.values);return r?{valueKey:ei,companions:[oi(ri(r,i))],values:[a]}:null},addressPresence(t,n){let r=ci(e,n.params),{subfield:i}=si(t.values);if(!r)return null;let a=ri(r,i);return t.operator===`is-set`?[oi(a)]:[`${$r}:-${m(a)}`]},match(){return null},matchCompound(t){let n=t=>e===void 0||t.namespace===e.namespace&&t.key===e.key,r=nn(t,`$and`);if(!r){let e=ii(t[$r]);if(e)return n(e)?{kind:`predicate`,predicate:{field:$(e),operator:`is-set`,values:[e.subfield,``]}}:null;let r=ii(tn(t[$r]));return r&&n(r)?{kind:`predicate`,predicate:{field:$(r),operator:`is-not-set`,values:[r.subfield,``]}}:null}if(r.length!==2)return null;let i,a,o=!1;for(let e of r){let t=ii(e[$r]);t&&(i=t),ei in e&&(a=e[ei],o=!0)}if(!i||!o||!n(i))return null;let s=rn(a);return s?{kind:`value`,field:$(i),leadingValues:[i.subfield],comparator:s}:null}}}var ui=`newsletters.`,di=`newsletters.slug`,fi=`email_disabled`,pi=[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`}];function mi(e){return{operators:[`is`],serialize({operator:t,values:n},r){let i=e??r.params.slug,a=n[0];return!i||t!==`is`?null:a===`subscribed`?{join:`and`,fragments:[{expression:i},{key:fi,expression:`0`}]}:a===`unsubscribed`?{join:`or`,fragments:[{expression:`-${i}`},{key:fi,expression:`1`}]}:null},parse(){return null}}}function hi(e){return{address(t,n){return e??n.params.slug?{valueKey:di,values:t.values}:null},match(){return null},matchCompound(e){for(let t of[`and`,`or`]){let n=nn(e,t===`and`?`$and`:`$or`);if(!n||n.length!==2)continue;let r,i=!1,a;for(let e of n){let t=e[di];typeof t==`string`&&(r=t,i=!1);let n=tn(t);n!==null&&(r=n,i=!0),typeof e[fi]==`number`&&(a=e[fi])}let o=!i&&t===`and`&&a===0;if(!(!r||!o&&!(i&&t===`or`&&a===1)))return{kind:`predicate`,predicate:{field:`${ui}${r}`,operator:`is`,values:[o?`subscribed`:`unsubscribed`]}}}return null}}}function gi(e){return cn({key:`${ui}${e.slug}`,icon:`newspaper`,semantics:mi(e.slug),addressing:hi(e.slug),operators:[`is`],options:pi,ui:{label:e.name,type:`select`,searchable:!1,hideOperatorSelect:!0}})}function _i(e){return{resolved:e!==void 0,claims:[di],fields:(e??[]).map(gi)}}var vi=cn({key:`${ui}:slug`,icon:`newspaper`,semantics:mi(),addressing:hi(),operators:[`is`],options:pi,ui:{label:`Newsletter`,type:`select`,searchable:!1,hideOperatorSelect:!0}}),yi=`email_disabled`;function bi(e,t){return e.clauses.find(e=>e.key===t)}function xi(){return{operators:[`is`,`is-not`],serialize({operator:e,values:t}){let n=t[0],r=e===`is`;if(e!==`is`&&e!==`is-not`)return null;if(n===`email-disabled`)return{fragments:[{key:yi,expression:r?`1`:`0`}]};if(n!==`subscribed`&&n!==`unsubscribed`)return null;let i=n===`subscribed`;return r?{join:`and`,fragments:[{expression:String(i)},{key:yi,expression:`0`}]}:{join:`or`,fragments:[{expression:String(!i)},{key:yi,expression:`1`}]}},parse(){return null},parseClauses(e){let t=bi(e,yi),n=bi(e,`subscribed`);return t&&!n&&e.clauses.length===1?t.value===1?{operator:`is`,values:[`email-disabled`]}:t.value===0?{operator:`is-not`,values:[`email-disabled`]}:null:!n||typeof n.value!=`boolean`?null:!t&&e.clauses.length===1?{operator:`is`,values:[n.value?`subscribed`:`unsubscribed`]}:!t||e.clauses.length!==2?null:e.join===`and`&&t.value===0?{operator:`is`,values:[n.value?`subscribed`:`unsubscribed`]}:e.join===`or`&&t.value===1?{operator:`is-not`,values:[n.value?`unsubscribed`:`subscribed`]}:null}}}function Si(){return{operators:[`1`,`0`],serialize({operator:e,values:t}){let n=t[0];return typeof n!=`string`||!n?null:{join:`and`,fragments:[{expression:m(n)},{key:`feedback.score`,expression:e}]}},parse(){return null},parseClauses(e){let t=bi(e,`feedback.post_id`),n=bi(e,`feedback.score`);return e.clauses.length!==2||e.join!==`and`||!t||!n||typeof t.value!=`string`||n.value!==0&&n.value!==1?null:{operator:n.value===1?`1`:`0`,values:[t.value]}}}}var Ci=`count.active_stripe_customers`,wi=`${Ci}:>1`;`${Ci}`;var Ti=Xe({multipleActiveSubscriptionsBanner:Xe({dismissedCount:We().finite().optional().catch(void 0),dismissedAt:q().optional().catch(void 0)}).optional().catch(void 0)});function Ei(e){return e===wi}function Di(e){if(!e)return Ti.parse({});try{let t=JSON.parse(e);return Ti.parse(t)}catch{return Ti.parse({})}}function Oi(e){return Di(e).multipleActiveSubscriptionsBanner??{}}function ki(e,t,n){let r=Di(e),i=Oi(e);return JSON.stringify({...r,multipleActiveSubscriptionsBanner:{...i,dismissedCount:t,dismissedAt:n}})}function Ai(e,t,n){return{...e,accessibility:ki(e.accessibility,t,n)}}var ji=[{key:`name`,icon:`person`,type:`text`,ui:{label:`Name`,placeholder:`Enter name...`,className:`w-48`}},{key:`email`,icon:`mail`,type:`text`,ui:{label:`Email`,placeholder:`Enter email...`,className:`w-48`}},{key:`label`,icon:`tag`,type:`set`,ui:{label:`Label`,searchable:!0,className:`w-64`},metadata:{activeColumn:{key:`labels`,label:`Labels`},columnInclude:`labels`}},cn({key:`subscribed`,icon:`mail`,semantics:xi(),operators:sn.scalar.operators,ui:{label:`Newsletter subscription`,type:`select`,searchable:!1},options:[{value:`subscribed`,label:`Subscribed`},{value:`unsubscribed`,label:`Unsubscribed`},{value:`email-disabled`,label:`Email disabled`}]}),{key:`last_seen_at`,icon:`eye`,type:`timestamp`,operators:kn,ui:{label:`Last seen`}},{key:`created_at`,icon:`calendar`,type:`timestamp`,operators:kn,ui:{label:`Created`}},{key:`signup`,icon:`person-plus`,type:`scalar`,valueConfig:{quoteStrings:!0},ui:{label:`Signed up on post/page`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`}},{key:`tier_id`,icon:`card`,type:`set`,ui:{label:`Membership tier`,searchable:!0,className:`w-64`},metadata:{activeColumn:{key:`tiers`,label:`Tiers`},columnInclude:`tiers`}},{key:`status`,icon:`person-circle`,type:`scalar`,ui:{label:`Member status`,searchable:!1},options:[{value:`paid`,label:`Paid`},{value:`free`,label:`Free`},{value:`comped`,label:`Complimentary`}]},{key:`subscriptions.plan_interval`,icon:`calendar-clock`,type:`scalar`,ui:{label:`Billing period`,searchable:!1},options:[{value:`month`,label:`Monthly`},{value:`year`,label:`Yearly`}],metadata:{activeColumn:{key:`subscriptions.plan_interval`,label:`Billing period`},columnInclude:`subscriptions`}},{key:`subscriptions.status`,icon:`card`,type:`scalar`,ui:{label:`Stripe subscription status`,searchable:!1},options:[{value:`active`,label:`Active`},{value:`trialing`,label:`Trialing`},{value:`canceled`,label:`Canceled`},{value:`unpaid`,label:`Unpaid`},{value:`past_due`,label:`Past Due`},{value:`incomplete`,label:`Incomplete`},{value:`incomplete_expired`,label:`Incomplete - Expired`}],metadata:{activeColumn:{key:`subscriptions.status`,label:`Subscription status`},columnInclude:`subscriptions`}},{key:`subscriptions.start_date`,icon:`calendar-start`,type:`timestamp`,operators:kn,ui:{label:`Paid start date`},metadata:{activeColumn:{key:`subscriptions.start_date`,label:`Paid start date`},columnInclude:`subscriptions`}},{key:`subscriptions.current_period_end`,icon:`calendar-end`,type:`timestamp`,operators:ln,ui:{label:`Next billing date`},metadata:{activeColumn:{key:`subscriptions.current_period_end`,label:`Next billing date`},columnInclude:`subscriptions`}},{key:`conversion`,icon:`arrows`,type:`scalar`,valueConfig:{quoteStrings:!0},ui:{label:`Subscription started on post/page`,searchable:!0,placeholder:`Select a post or page...`,className:`w-64`}},{key:`email_count`,icon:`send`,type:`number`,ui:{label:`Emails sent (all time)`,defaultOperator:`is-greater`,min:0,className:`w-24`}},{key:`email_opened_count`,icon:`mail-open`,type:`number`,ui:{label:`Emails opened (all time)`,defaultOperator:`is-greater`,min:0,className:`w-24`}},{key:`email_open_rate`,icon:`percent`,type:`number`,ui:{label:`Open rate (all time)`,defaultOperator:`is-greater`,min:0,max:100,suffix:`%`,className:`w-24`}},{key:`emails.post_id`,icon:`send`,type:`scalar`,valueConfig:{quoteStrings:!0},ui:{label:`Sent email`,searchable:!0,placeholder:`Select an email...`,className:`w-64`}},{key:`opened_emails.post_id`,icon:`mail-open`,type:`scalar`,valueConfig:{quoteStrings:!0},ui:{label:`Opened email`,searchable:!0,placeholder:`Select an email...`,className:`w-64`}},{key:`clicked_links.post_id`,icon:`click`,type:`scalar`,valueConfig:{quoteStrings:!0},ui:{label:`Clicked email`,searchable:!0,placeholder:`Select an email...`,className:`w-64`}},cn({key:`newsletter_feedback`,icon:`message`,semantics:Si(),addressing:en({field:`feedback.post_id`}),operators:[`1`,`0`],ui:{label:`Responded with feedback`,type:`select`,searchable:!0,placeholder:`Select an email...`,className:`w-64`,defaultOperator:`1`}}),{key:`offer_redemptions`,icon:`ticket`,type:`set`,valueConfig:{quoteStrings:!0,serializeSingletonAsScalar:!0},ui:{label:`Offer`,searchable:!0,className:`w-64`},metadata:{activeColumn:{key:`offer_redemptions`,label:`Offer`}}},{key:Ci,icon:`layers`,type:`count`,valueConfig:{threshold:1,absentForm:`below`},ui:{label:`Multiple active subscriptions`,type:`select`,searchable:!1,hideOperatorSelect:!0},options:[{value:`true`,label:`Yes`},{value:`false`,label:`No`}]}],Mi=[...sn.text.operators,...ai],Ni={key:`metafields.:namespace.:key`,icon:`text`,type:`text`,addressing:li(),operators:Mi,ui:{label:`Custom field`,type:`custom`},metadata:{activeColumn:({params:e,label:t})=>t&&e.namespace&&e.key?{key:$({namespace:e.namespace,key:e.key}),label:t}:null,columnInclude:`metafields`}},Pi=[...ji,vi,Ni],Fi=bn(Pi),Ii=2;function Li(e,t={}){let n=new Map;for(let r of e){let e=yn(Fi,r.field,`UTC`),i=e?.definition.metadata?.activeColumn;if(!i)continue;let{context:a}=e;if(typeof i!=`function`){let e=Hi[i.key];e&&n.set(i.key,{...i,getValue:e});continue}let o=Ui[a.pattern]?.(a.params,t);if(!o)continue;let s=i({...a,label:o.label});s&&n.set(s.key,{...s,getValue:o.getValue})}return Array.from(n.values()).slice(0,Ii)}function Ri(e){let t=new Set([`labels`,`tiers`]);for(let n of e){let e=yn(Fi,n.field,`UTC`)?.definition.metadata?.columnInclude;e&&t.add(e)}return Array.from(t).join(`,`)}function zi({filters:e,nql:t,search:n}){if(!t&&!n)return;let r={include:Ri(e),limit:`100`,order:`created_at desc`};return t&&(r.filter=t),n&&(r.search=n),r}function Bi({nql:e,search:t}){return!e&&!t?{all:!0}:{...e?{filter:e}:{},...t?{search:t}:{}}}function Vi(e,t){return e?{text:Cr.default.tz(e,t).format(`D MMM YYYY`),subtext:(0,Cr.default)(e).fromNow()}:null}var Hi={labels:e=>e.labels?.length?{text:e.labels.map(e=>e.name).join(`, `)}:null,tiers:e=>e.tiers?.length?{text:e.tiers.map(e=>e.name).join(`, `)}:null,"subscriptions.plan_interval":e=>{let t=e.current_subscription?.plan?.interval;return t?{text:t===`month`?`Monthly`:`Yearly`}:null},"subscriptions.status":e=>{let t=e.current_subscription?.status;return t?{text:t.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}:null},"subscriptions.start_date":(e,t)=>Vi(e.current_subscription?.start_date,t),"subscriptions.current_period_end":(e,t)=>Vi(e.current_subscription?.current_period_end,t),offer_redemptions:e=>{let t=e.subscriptions?.map(e=>e.offer?.name).filter(Boolean);return t?.length?{text:t.join(`, `)}:null}},Ui={"metafields.:namespace.:key":({namespace:e,key:t},{customFields:n})=>{let r=n?.find(n=>n.namespace===e&&n.key===t);return r?{label:r.name,getValue:e=>{let t=Wn(r.type,e.metafields?.[r.namespace]?.[r.key]);return t?{text:t}:null}}:null}};async function Wi(e,t){let n=new URLSearchParams({limit:`all`});e&&n.set(`filter`,e),t&&n.set(`search`,t),await u(`/members/upload/?${n}`,`members.csv`)}var Gi=({hasFilterOrSearch:e,memberCount:t,nql:n,search:r,canBulkDelete:i,showMenu:a=!0,showNewMember:o=!0,onImportComplete:s})=>{let c=y(),l=b(),u=c.pathname===`/members/import`,d=c.search??``,f=c.pathname===`/members`?`${c.pathname}${d}`:`/members`,m=`#/members/new?back=${encodeURIComponent(f)}`,[h,g]=(0,X.useState)(!1),[_,v]=(0,X.useState)(!1),[x,S]=(0,X.useState)(!1),[w,T]=(0,X.useState)(!1),{data:E,isLoading:D}=Qe({searchParams:{filter:`status:-archived`,limit:`50`}}),O=E?.newsletters||[],{mutateAsync:k,isPending:M}=jt(),{mutate:I,isPending:te}=mt(),[ne,L]=(0,X.useState)(!1),R=Bi({nql:n,search:r}),re=(0,X.useCallback)(async()=>{try{await Wi(n,r)}catch(e){throw p.error(`Export failed`,{description:`There was a problem downloading your member data. Please check your connection and try again.`}),e}},[n,r]),ie=(0,X.useCallback)(async e=>{try{for(let t of e)await k({...R,action:{type:`addLabel`,meta:{label:{id:t}}}});g(!1),p.success(e.length>1?`Labels added successfully`:`Label added successfully`)}catch{p.error(`Failed to add label`,{description:`There was a problem applying this label. Please try again.`})}},[k,R]),z=(0,X.useCallback)(async e=>{try{for(let t of e)await k({...R,action:{type:`removeLabel`,meta:{label:{id:t}}}});v(!1),p.success(e.length>1?`Labels removed successfully`:`Label removed successfully`)}catch{p.error(`Failed to remove label`,{description:`There was a problem removing this label. Please try again.`})}},[k,R]),B=(0,X.useCallback)(async e=>{let t=R;if(e===null){try{await k({...t,action:{type:`unsubscribe`}}),S(!1),p.success(`Members unsubscribed successfully`)}catch{p.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}return}L(!0);try{let n=await Promise.allSettled(e.map(e=>k({...t,action:{type:`unsubscribe`,newsletter:e}}))),r=n.filter(e=>e.status===`fulfilled`).length,i=n.length;S(!1),r===i?p.success(`Unsubscribed from ${i} ${i===1?`newsletter`:`newsletters`}`):r>0?p.warning(`Unsubscribed from ${r} of ${i} newsletters`,{description:`Some newsletters could not be unsubscribed. Please try again.`}):p.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}catch{p.error(`Failed to unsubscribe members`,{description:`There was a problem unsubscribing these members. Please try again.`})}finally{L(!1)}},[k,R]),ae=(0,X.useCallback)(()=>{I(R,{onSuccess:()=>{T(!1),p.success(`Members deleted successfully`)},onError:()=>{p.error(`Failed to delete members`,{description:`There was a problem deleting these members. Please try again.`})}})},[I,R]),se=(0,X.useCallback)(async()=>{try{await Wi(n,r)}catch(e){throw p.error(`Export failed`,{description:`There was a problem downloading your backup. Please check your connection and try again.`}),e}},[n,r]),V=(0,X.useCallback)(()=>{},[]),ce=(0,X.useCallback)(()=>{l(`/members/import${d}`)},[d,l]),le=(0,X.useCallback)(e=>{s?.(e)},[s]),ue=(0,X.useCallback)(e=>{if(e?.importLabel){l(lt({filter:`label:[${e.importLabel.slug}]`}),{replace:!0});return}l(`/members${d}`,{replace:!0})},[d,l]);return(0,Z.jsxs)(Z.Fragment,{children:[a&&(0,Z.jsxs)(Kt,{children:[(0,Z.jsx)(Ot,{asChild:!0,children:(0,Z.jsx)(H,{"data-testid":`members-actions`,variant:`outline`,children:(0,Z.jsx)(ee,{className:`size-4`})})}),(0,Z.jsxs)(nt,{align:`end`,children:[(0,Z.jsxs)(dt,{onClick:ce,children:[(0,Z.jsx)(de,{className:`mr-2 size-4`}),`Import members`]}),t>0&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(dt,{onClick:()=>void re(),children:[(0,Z.jsx)(F,{className:`mr-2 size-4`}),e?`Export ${C(t)} members`:`Export all members`]}),(0,Z.jsx)(At,{}),(0,Z.jsxs)(dt,{onClick:()=>g(!0),children:[(0,Z.jsx)(j,{className:`mr-2 size-4`}),`Add label to `,C(t),` `,t===1?`member`:`members`]}),(0,Z.jsxs)(dt,{onClick:()=>v(!0),children:[(0,Z.jsx)(P,{className:`mr-2 size-4`}),`Remove label from `,C(t),` `,t===1?`member`:`members`]}),(0,Z.jsxs)(dt,{disabled:D,onClick:()=>S(!0),children:[(0,Z.jsx)(N,{className:`mr-2 size-4`}),`Unsubscribe `,C(t),` `,t===1?`member`:`members`]}),(0,Z.jsx)(At,{}),(0,Z.jsxs)(dt,{className:`text-destructive focus:text-destructive`,disabled:!i,onClick:()=>T(!0),children:[(0,Z.jsx)(A,{className:`mr-2 size-4`}),`Delete `,C(t),` `,t===1?`member`:`members`]})]})]})]}),o&&(0,Z.jsx)(H,{asChild:!0,children:(0,Z.jsxs)(`a`,{"aria-label":`New member`,className:`inline-flex items-center`,href:m,children:[(0,Z.jsx)(`span`,{className:`hidden sm:inline`,children:`New member`}),(0,Z.jsx)(`span`,{className:`sm:hidden`,children:(0,Z.jsx)(oe,{})})]})}),(0,Z.jsx)(Zr,{open:u,onClose:ue,onComplete:le,onOpenChange:V}),(0,Z.jsx)(tr,{isLoading:M,memberCount:t,open:h,onConfirm:e=>void ie(e),onOpenChange:g}),(0,Z.jsx)(nr,{isLoading:M,memberCount:t,nql:n,open:_,search:r,onConfirm:e=>void z(e),onOpenChange:v}),(0,Z.jsx)(rr,{isLoading:M||ne,memberCount:t,newsletters:O,open:x,onConfirm:e=>void B(e),onOpenChange:S}),(0,Z.jsx)(ir,{isLoading:te,memberCount:t,open:w,onConfirm:ae,onExportBackup:se,onOpenChange:T})]})},Ki=({membershipsEnabled:e,onMemberCreated:t})=>{let{data:n,isLoading:r}=c(),{mutateAsync:i,isPending:a}=ft(),o=l(),s=(0,X.useCallback)(async()=>{if(!(!n||a))try{await i({email:n.email,name:n.name}),p.success(`You've been added as a member`),await t?.()}catch(e){o(e)}},[i,n,o,a,t]);return e?(0,Z.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Z.jsx)(Me,{actions:(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-2 sm:flex-row`,children:[(0,Z.jsx)(H,{asChild:!0,children:(0,Z.jsx)(v,{to:`/members/new?back=%2Fmembers`,children:`New member`})}),(0,Z.jsx)(H,{disabled:a||r||!n,variant:`outline`,onClick:()=>void s(),children:a?`Adding...`:`Add yourself as a member`})]}),(0,Z.jsxs)(`p`,{className:`text-sm leading-tight text-pretty text-muted-foreground`,children:[`Already have members?`,` `,(0,Z.jsx)(v,{className:`font-medium text-foreground underline-offset-4 hover:underline`,to:`/members/import`,children:`Import with CSV`})]})]}),description:`Use memberships to allow your readers to sign up and subscribe to your content.`,title:`Start building your audience`,children:(0,Z.jsx)(ce,{})})}):(0,Z.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center px-4`,children:(0,Z.jsx)(Me,{actions:(0,Z.jsx)(H,{variant:`outline`,asChild:!0,children:(0,Z.jsx)(`a`,{href:`#/settings/members`,children:`Membership settings`})}),description:`Adjust your membership settings to start adding members.`,title:`Memberships have been disabled`,children:(0,Z.jsx)(ce,{})})})},qi=tt.extend({route:Ye(`members`),filter:Ze(q(),q().nullable()).refine(e=>typeof e.filter==`string`&&e.filter.length>0)}),Ji=`A view with this name already exists`,Yi=`Saved view could not be found for update`,Xi=`Multiple saved views matched update target`,Zi=`Saved view could not be found for delete`,Qi=`Multiple saved views matched delete target`;function $i(e){return qi.safeParse(e).success}function ea(e){let t=kt(e);return t.ok?{ok:!0,views:t.views.filter($i)}:t}function ta(e,t){return{name:e.trim(),route:`members`,filter:{filter:t}}}function na(e,t,n,r){let i=ta(t,n);if(r){let t=it(e,r);if(t.length===0)throw Error(Yi);if(t.length>1)throw Error(Xi);let n=t[0];if(rt(e,i,n))throw Error(Ji);return e.map((e,t)=>t===n?i:e)}if(rt(e,i))throw Error(Ji);return[...e,i]}function ra(e,t){let n=it(e,t);if(n.length===0)throw Error(Zi);if(n.length>1)throw Error(Qi);let r=n[0];return e.filter((e,t)=>t!==r)}var ia=`Cannot modify saved views because shared_views is invalid`;function aa(e){return vt(e?.settings??null,`shared_views`)??`[]`}function oa(){let{data:e}=Et(),t=l(),n=aa(e),r=(0,X.useRef)(null),i=(0,X.useMemo)(()=>ea(n),[n]);return(0,X.useEffect)(()=>{i.ok||r.current===n||(r.current=n,t(i.error,{withToast:!1}))},[t,i,n]),i.ok?i.views:[]}function sa(){let{data:e}=Et(),{mutateAsync:t}=It(),n=l();return(0,X.useCallback)(async(r,i,a)=>{let o=kt(aa(e));if(!o.ok){let e=Error(ia,{cause:o.error});throw n(e,{withToast:!1}),e}let s=na(o.views,r,i,a);try{await t([{key:`shared_views`,value:JSON.stringify(s)}])}catch(e){throw n(e,{withToast:!1}),e}},[e,t,n])}function ca(){let{data:e}=Et(),{mutateAsync:t}=It(),n=l();return(0,X.useCallback)(async r=>{let i=kt(aa(e));if(!i.ok){let e=Error(ia,{cause:i.error});throw n(e,{withToast:!1}),e}let a=ra(i.views,r);try{await t([{key:`shared_views`,value:JSON.stringify(a)}])}catch(e){throw n(e,{withToast:!1}),e}},[e,t,n])}function la(e,t){return(0,X.useMemo)(()=>!t||e.length===0?null:e.find(e=>e.filter.filter===t)??null,[e,t])}var ua=({filter:e,existingViews:t,activeView:n,onDeleted:r,onClose:i})=>{let[a,o]=(0,X.useState)(()=>n?.name??``),[s,c]=(0,X.useState)(``),[l,u]=(0,X.useState)(!1),[d,f]=(0,X.useState)(!1),[p,m]=(0,X.useState)(!1),h=sa(),g=ca(),_=!!n,v=async()=>{let r=a.trim();if(!r){c(`Please enter a name`);return}if(!_&&t.find(e=>e.name.trim().toLowerCase()===r.toLowerCase())){c(`A view with this name already exists`);return}u(!0);try{await h(r,e,n??void 0),i()}catch(e){c(e instanceof Error?e.message:`Failed to save view`)}finally{u(!1)}},y=async()=>{if(n){f(!0);try{await g(n),i(),r?.()}catch(e){c(e instanceof Error?e.message:`Failed to delete view`)}finally{f(!1)}}};return(0,Z.jsx)(_t,{align:`end`,className:`w-72`,children:(0,Z.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Z.jsx)(`h3`,{className:`text-sm font-semibold`,children:_?`Edit view`:`Save view`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Z.jsx)($e,{placeholder:`View name`,value:a,autoFocus:!0,onChange:e=>{o(e.target.value),s&&c(``)},onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),v())}}),s&&(0,Z.jsx)(`p`,{className:`text-xs text-red-500`,children:s})]}),_?p?(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Delete view?`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>m(!1),children:`Cancel`}),(0,Z.jsx)(H,{disabled:d,size:`sm`,variant:`destructive`,onClick:()=>void y(),children:d?`Deleting...`:`Delete`})]})]}):(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsx)(H,{className:`text-red hover:bg-red/5 hover:text-red`,size:`sm`,variant:`ghost`,onClick:()=>m(!0),children:`Delete`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(H,{size:`sm`,variant:`outline`,onClick:i,children:`Cancel`}),(0,Z.jsx)(H,{disabled:l||!a.trim(),size:`sm`,onClick:()=>void v(),children:l?`Saving...`:`Save`})]})]}):(0,Z.jsx)(H,{className:`w-full`,disabled:l||!a.trim(),onClick:()=>void v(),children:l?`Saving...`:`Save`})]})})},da=({filter:e,existingViews:t,activeView:n,onDeleted:r})=>{let[i,a]=(0,X.useState)(!1),o=n?`edit:${n.name}:${n.filter.filter}`:`save:${e}`;return(0,Z.jsxs)(Nt,{open:i,onOpenChange:a,children:[(0,Z.jsx)(bt,{asChild:!0,children:(0,Z.jsx)(H,{variant:`outline`,children:n?`Edit view`:`Save view`})}),i&&(0,Z.jsx)(ua,{activeView:n,existingViews:t,filter:e,onClose:()=>a(!1),onDeleted:r},o)]})},fa=Dn(ai);function pa(e,t){let n=e.operators?.length?e.operators:fa,r=t?n.filter(e=>on(ai,e.value)):n,i=r.map(e=>e.value);return{options:r,ids:i,fallback:e.defaultOperator&&i.includes(e.defaultOperator)?e.defaultOperator:i[0]??`is-set`}}var ma=({field:e,values:t,onChange:n,operator:r,onOperatorChange:i,readOnly:a})=>{let{data:o}=qn(),s=o??[],c=ni(e.key??``)?.key??``,l=s.find(e=>e.key===c),u=l?(zn(l.type)??[]).map(({key:e,label:t})=>({value:e,label:t})):[],d=e.label??l?.name??`Custom field`,f=u.length>0,[p=``,m=``]=t,{options:h,ids:g,fallback:_}=pa(e,f&&p===``);(0,X.useEffect)(()=>{a||!i||g.includes(r)||i(_)},[a,r,g,_,i]);let v=!on(ai,r),y=[{value:``,label:`Any`},...u];return(0,Z.jsxs)(Z.Fragment,{children:[f&&(0,Z.jsx)(he,{ariaLabel:`${d} part`,options:y,readOnly:a,testId:`custom-field-filter-subfield`,value:p,onChange:e=>n([e,m])}),i&&(0,Z.jsx)(he,{ariaLabel:`${d} operator`,options:h,readOnly:a,testId:`custom-field-filter-operator`,value:r,onChange:i}),v&&(0,Z.jsx)(me,{ariaLabel:`${d} value`,placeholder:`Enter value...`,readOnly:a,testId:`custom-field-filter-value`,value:m,onChange:e=>n([p,e])})]})},ha={text:`text`,date:`plain_date`,number:`number`},ga={short_text:`text`,postal_code:`text`,country_code:`text`};function _a(e){let t=[...new Set((zn(e)??[]).map(e=>ga[e.type]))];if(t.length>1)throw Error(`The parts of '${e}' filter as different types (${t.join(`, `)}), but the filter engine reads a composite with a single semantics. Build per-part dispatch into the codec before mapping a part type away from its siblings.`);return t[0]??`text`}var va=ti;function ya(e){let t=Vn(e.type);return{key:$(e),icon:`text`,type:t===`record`?_a(e.type):ha[t],addressing:li(e),ui:{label:e.name,type:`custom`,...t===`record`?{defaultOperator:`is-set`}:{}}}}function ba(e){return{resolved:e!==void 0,claims:[va],fields:(e??[]).map(ya)}}function xa({newsletters:e,customFields:t}={}){return[{resolved:!0,fields:Pi},_i(e),ba(t)]}function Sa(e={}){return!e.newsletters&&!e.customFields?Fi:Cn(xa(e))}function Ca(e,t={}){return hn(e,xa(t))}var wa=[`name`,`email`,`label`,`subscribed`,`last_seen_at`,`created_at`,`signup`],Ta=[`tier_id`,`status`,Ci,`subscriptions.plan_interval`,`subscriptions.status`,`subscriptions.start_date`,`subscriptions.current_period_end`,`conversion`,`offer_redemptions`],Ea=[`email_count`,`email_opened_count`,`email_open_rate`,`emails.post_id`,`opened_emails.post_id`,`clicked_links.post_id`,`newsletter_feedback`],Da=[],Oa=[],ka=[],Aa=[],ja=[],Ma=5,Na={"is-any":`is any of`,"is-not-any":`is none of`,"does-not-contain":`does not contain`,...$t,1:`More like this`,0:`Less like this`};function Pa(e,t){return{options:e,valueSource:t}}function Fa(e){let t=new Map,n=[],r=[];for(let t of e)t.redemption_type===`retention`&&(t.cadence===`month`?n.push(t.id):t.cadence===`year`&&r.push(t.id));return n.length>0&&t.set(`retention:month`,n),r.length>0&&t.set(`retention:year`,r),t}function Ia(e){return Array.isArray(e.metadata?.offerIds)?e.metadata.offerIds.filter(e=>typeof e==`string`):null}function La(e){let t=[],n=Fa(e);for(let n of e)n.redemption_type!==`retention`&&t.push({value:n.id,label:n.name});return n.has(`retention:month`)&&t.push({value:`retention:month`,label:`Monthly Retention`,metadata:{offerIds:n.get(`retention:month`)}}),n.has(`retention:year`)&&t.push({value:`retention:year`,label:`Yearly Retention`,metadata:{offerIds:n.get(`retention:year`)}}),t}function Ra(e,t){let n=[],r=new Set;for(let i of t){let t=Ia(i);t&&t.length>0&&t.every(t=>e.includes(t))&&(n.push(String(i.value)),t.forEach(e=>{r.add(e)}))}for(let t of e)r.has(t)||n.push(t);return n}function za(e,t){let n=[];for(let r of e){let e=t.find(e=>e.value===r),i=e?Ia(e):null;i?n.push(...i):n.push(r)}return[...new Set(n)]}function Ba(e){return new Map(e.map(e=>[e.id,e.name]))}function Va(e,t,n){let r=e.map(e=>t.find(t=>t.value===e)).filter(e=>!!e);return r.length===1?r[0].label:r.length>1?`${r.length} selected`:e.length===1?n.get(e[0])??`Select...`:e.length>1?`${e.length} selected`:`Select...`}function Ha({labelValueSource:e,tierValueSource:t,newsletters:n=Da,hydratedNewsletterSlugs:r=Oa,hasMultipleTiers:i=!1,paidMembersEnabled:a=!1,emailFiltersEnabled:o=!1,postValueSource:s,emailValueSource:c,offers:l=ka,multipleActiveSubscriptionsCount:u=0,membersTrackSources:d=!1,emailTrackOpens:f=!1,emailTrackClicks:p=!1,customFields:m=Aa,archivedCustomFields:h=ja,siteTimezone:g=`UTC`}){let _=(0,X.useMemo)(()=>Sa({newsletters:[...n,...r.filter(e=>!n.some(t=>t.slug===e)).map(e=>({slug:e,name:e}))],customFields:[...m,...h.map(e=>({...e,type:`short_text`}))]}),[n,r,m,h]);return(0,X.useMemo)(()=>{function v(e,t={},n=Na){let r=pn(e,`newsletters`)?_[`newsletters.:slug`]:pn(e,`metafields.`)?_[`metafields.:namespace.:key`]:void 0,i=_[e]??r;return{key:e,...i.ui,icon:Tn[i.ui.icon],operators:Dn(i.operators,{labels:{...n,...i.operatorLabels}}),...`options`in i&&i.options?{options:i.options}:{},...t}}function y(e,t,n={}){let r=_[e],i=v(e,{defaultValue:t,...n});return gn(r)?{...i,customRenderer:_n(t)}:i}let b=[],x=n.filter(e=>e.status!==`archived`),S=new Set(x.map(e=>e.slug)),C=[...new Set(r)].map(e=>({slug:e,name:n.find(t=>t.slug===e)?.name??e})),w=C.filter(e=>!S.has(e.slug)),T=La(l),E=Ba(l),D=an(g),O=x.length<=1,k={label:!!e,subscribed:O,signup:d},A=wa.filter(e=>k[e]??!0).flatMap(t=>{switch(t){case`label`:return[v(t,{...Pa([],e),customRenderer:e=>X.createElement(Zn,e)})];case`subscribed`:return[v(t),...C.map(e=>v(`newsletters.${e.slug}`,{label:e.name}))];case`last_seen_at`:case`created_at`:return[y(t,D)];case`signup`:return[v(t,Pa([],s))];default:return[v(t)]}});b.push({group:`Basic`,fields:A});let j=m.map(e=>v($(e),{label:e.name,icon:X.createElement($n,{type:e.type,className:`size-4`}),renderOperatorInValue:!0,customRenderer:e=>X.createElement(ma,e)})),M=h.map(e=>v($(e),{label:e.name,icon:X.createElement(V,{className:`size-4`}),readOnly:!0,renderOperatorInValue:!0,customRenderer:e=>X.createElement(ma,e)})),N=[...j,...M];if(N.length>0&&b.push({group:`Custom fields`,fields:N,previewLimit:Ma}),x.length>1){let e=[v(`subscribed`,{label:`All newsletters`,options:[{value:`subscribed`,label:`Subscribed to at least one`},{value:`unsubscribed`,label:`Unsubscribed from all`},{value:`email-disabled`,label:`Email disabled`}]})];for(let t of x)e.push(v(`newsletters.${t.slug}`,{label:t.name}));for(let t of w)e.push(v(`newsletters.${t.slug}`,{label:t.name}));b.push({group:`Newsletters`,fields:e})}if(a){let e={tier_id:i,[Ci]:u>0,conversion:d,offer_redemptions:l.length>0},n=Ta.filter(t=>e[t]??!0).map(e=>{switch(e){case`tier_id`:return v(e,Pa([],t));case`status`:return v(e,{options:[..._.status?.options??[],{value:`gift`,label:`Gift subscription`}]});case`subscriptions.start_date`:case`subscriptions.current_period_end`:return y(e,D);case`conversion`:return v(e,Pa([],s));case`offer_redemptions`:return v(e,{options:T,customValueRenderer:e=>Va(e,T,E)});default:return v(e)}});b.push({group:`Subscription`,fields:n})}if(o){let e={email_open_rate:f,"opened_emails.post_id":f,"clicked_links.post_id":p},t=new Set([`email_count`,`email_opened_count`,`email_open_rate`]),n=Ea.filter(t=>e[t]??!0).map(e=>t.has(e)?v(e):v(e,Pa([],c)));b.push({group:`Email`,fields:n})}return b},[_,o,c,p,f,i,e,d,u,n,l,r,a,s,g,t])}var Ua=[],Wa=[],Ga=[],Ka=[];function qa(e,t){let n=[...new Set(e.map(e=>e.field).map(e=>mn(e,t)).filter(e=>e!==null))].sort().join(`
3
+ `);return(0,X.useMemo)(()=>n?n.split(`
4
+ `):Ka,[n])}function Ja(e,t){return e.map(e=>e.field===`offer_redemptions`?{...e,values:t(e.values)}:e)}var Ya=({filters:e,multipleActiveSubscriptionsCount:t,nql:n,onFiltersChange:r,savedViews:i=[],activeView:a,iconOnly:o=!1})=>{let{data:s}=h({}),{data:c}=Qe({searchParams:{limit:`100`}}),{data:l}=Et({}),u=l?.settings||[],d=gt()===!0,f=Wt()??!0,p=Mt()===!0,m=ht()===!0,g=Vt()===!0,_=Xt(u),v=c?.newsletters??Ga,y=(0,X.useMemo)(()=>s?.offers??Ua,[s?.offers]),b=(0,X.useMemo)(()=>La(y),[y]),x=qa(e,`newsletters.`),C=(0,X.useMemo)(()=>Ja(e,e=>Ra(e,b)),[e,b]),w=(0,X.useCallback)(e=>{r(Ja(e,e=>za(e,b)))},[r,b]),T=Mn(),E=An(),D=jn(),{valueSource:O,hasMultipleTiers:k}=Nn(),{data:A}=qn(),j=A??Wa,M=(0,X.useMemo)(()=>j.filter(e=>e.status===`active`),[j]),N=qa(e,ti),P=(0,X.useMemo)(()=>new Set(N),[N]),ee=Ha({newsletters:v,hydratedNewsletterSlugs:x,hasMultipleTiers:k,paidMembersEnabled:d,emailFiltersEnabled:f,labelValueSource:D,tierValueSource:O,offers:y,multipleActiveSubscriptionsCount:t,postValueSource:T,emailValueSource:E,membersTrackSources:p,emailTrackOpens:m,emailTrackClicks:g,siteTimezone:_,customFields:M,archivedCustomFields:(0,X.useMemo)(()=>j.filter(e=>e.status===`archived`&&P.has(`${e.namespace}.${e.key}`)).map(e=>({namespace:e.namespace,key:e.key,name:e.name})),[j,P])}),F=e.length>0,I=S(`bg-white dark:bg-background`,o&&!F&&`min-w-[34px] gap-0 !px-3 text-[0px] lg:min-w-0 lg:gap-1.5 lg:px-3 lg:text-base`),te=F?(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-4 sm:absolute sm:top-0 sm:right-0`,children:[(0,Z.jsxs)(H,{className:`hidden items-center gap-1 !px-0 text-sm font-normal text-muted-foreground hover:bg-transparent hover:text-foreground lg:inline-flex`,type:`button`,variant:`ghost`,onClick:()=>r([]),children:[(0,Z.jsx)(z,{className:`size-4`}),`Clear`]}),n&&(0,Z.jsx)(da,{activeView:a,existingViews:i,filter:n,onDeleted:()=>r([])})]}):void 0;return(0,Z.jsx)(pe,{addButtonClassName:I,addButtonIcon:F?(0,Z.jsx)(B,{}):(0,Z.jsx)(fe,{}),addButtonText:F?`Add filter`:`Filter`,allowMultiple:!0,className:`[&>button]:order-last ${F?`sm:!pr-40 [&>button]:border-none`:`w-auto`}`,clearButton:te,fields:ee,filters:C,keyboardShortcut:`f`,popoverAlign:`start`,popoverContentClassName:`z-[80] w-[280px] [&_[data-slot=command-list]]:max-h-[450px]`,showClearButton:F,showSearchInput:!0,onChange:w})},Xa=({search:e,onSearchChange:t,autoFocus:n=!1,ariaLabel:r=`Search members`})=>{let i=r===`Search members mobile`?`members-mobile-search-input`:`members-search-input`;return(0,Z.jsxs)(ze,{className:`h-(--control-height) min-w-0 basis-full lg:w-[180px] lg:basis-auto xl:w-[240px]`,children:[(0,Z.jsx)(Re,{children:(0,Z.jsx)(le,{className:`size-4`,strokeWidth:1.75})}),(0,Z.jsx)(Le,{"aria-label":r,autoFocus:n,className:`!h-[34px]`,"data-testid":i,placeholder:`Search members...`,value:e,onChange:e=>t(e.target.value)})]})},Za=({children:e,description:t,title:n,url:r})=>(0,Z.jsx)(`a`,{className:`group/card block rounded-xl border bg-card p-6 transition-all hover:bg-table-row-hover hover:shadow-xs`,href:r,rel:`noopener noreferrer`,target:`_blank`,children:(0,Z.jsxs)(`div`,{className:`flex items-center gap-6`,children:[e,(0,Z.jsxs)(`div`,{className:`flex flex-col leading-tight`,children:[(0,Z.jsx)(`h4`,{className:`text-md font-medium tracking-normal text-pretty text-foreground`,children:n}),(0,Z.jsx)(`p`,{className:`mt-1.5 text-sm leading-tight text-pretty text-muted-foreground`,children:t})]})]})}),Qa=`flex h-18 w-[100px] min-w-[100px] items-center justify-center rounded-md p-4 opacity-80 transition-all group-hover/card:opacity-100`,$a=()=>(0,Z.jsxs)(`div`,{className:`grid w-full grid-cols-1 gap-4 lg:grid-cols-2`,children:[(0,Z.jsx)(Za,{description:`Learn how to turn anonymous visitors into logged-in members with memberships in Ghost.`,title:`Building your audience with subscriber signups`,url:`https://ghost.org/resources/build-audience-subscriber-signups/`,children:(0,Z.jsx)(`div`,{className:S(Qa,`bg-gradient-to-tr from-[#22C55E]/20 to-[#84CC16]/20`),children:(0,Z.jsx)(se,{className:`text-[#16A34A]`,size:20,strokeWidth:1.5})})}),(0,Z.jsx)(Za,{description:`Starting from zero? Use this guide to find your founding audience members.`,title:`Get your first 100 email subscribers`,url:`https://ghost.org/resources/first-100-email-subscribers/`,children:(0,Z.jsx)(`div`,{className:S(Qa,`bg-gradient-to-tl from-[#A855F7]/20 to-[#EC4899]/20`),children:(0,Z.jsx)(R,{className:`text-[#DB2777]`,size:20,strokeWidth:1.5})})})]});function eo(e,t){let n=new URLSearchParams;t&&n.set(`back`,t);let r=n.toString();return`/members/${e}${r?`?${r}`:``}`}var to={left:`100%`};function no(e){if(!e)return{text:`Unknown`,isKnown:!1};try{let t=JSON.parse(e);return t.country?t.country_code===`US`&&t.region?{text:`${t.region}, US`,isKnown:!0}:{text:t.country,isKnown:!0}:{text:`Unknown`,isKnown:!1}}catch{return{text:`Unknown`,isKnown:!1}}}function ro(e){switch(e){case`paid`:return`Paid`;case`comped`:return`Complimentary`;case`gift`:return`Gift`;default:return`Free`}}function io(e){return e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey}function ao(e,t){window.open(`#${eo(e,t)}`,`_blank`,`noopener`)}function oo({item:e,backPath:t,onClick:n}){return(0,Z.jsxs)(`div`,{className:`flex min-w-0 items-center gap-3`,children:[(0,Z.jsx)(ot,{className:`size-8 min-w-8`,...ct(e),src:e.avatar_image}),(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(v,{className:`block min-w-0 cursor-pointer`,to:eo(e.id,t),onClick:n?t=>{if(io(t)){t.stopPropagation();return}t.preventDefault(),t.stopPropagation(),n(e.id)}:void 0,children:(0,Z.jsx)(`span`,{className:`block truncate text-md font-semibold`,children:e.name||e.email||`Anonymous`})}),e.name&&e.email&&(0,Z.jsx)(`div`,{className:`truncate text-muted-foreground`,"data-testid":`member-email`,children:e.email})]})]})}function so({status:e,tiers:t}){let n=t?.map(e=>e.name).join(`, `);return(0,Z.jsx)(`div`,{className:`flex min-w-0 justify-start`,children:(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`div`,{className:`truncate`,children:ro(e)}),n&&(0,Z.jsx)(`div`,{className:`truncate text-sm text-muted-foreground`,children:n})]})})}function co({emailOpenRate:e}){let t=e!=null;return(0,Z.jsx)(`div`,{className:S(`text-base`,t?`text-foreground`:`text-muted-foreground`),children:t?x(e/100):`N/A`})}function lo({geolocation:e}){let t=no(e);return(0,Z.jsx)(`div`,{className:S(`truncate text-base`,t.isKnown?`text-foreground`:`text-muted-foreground`),children:t.text})}function uo({createdAt:e}){return(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`div`,{className:`text-base`,children:Cr.default.utc(e).format(`D MMM YYYY`)}),(0,Z.jsx)(`div`,{className:`text-base text-muted-foreground`,children:Cr.default.utc(e).fromNow()})]})}function fo({column:e,member:t,timezone:n}){let r=e.getValue(t,n);return r?(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsx)(`div`,{className:`truncate text-base`,title:r.text,children:r.text}),r.subtext&&(0,Z.jsx)(`div`,{className:`truncate text-base text-muted-foreground`,title:r.subtext,children:r.subtext})]}):(0,Z.jsx)(`span`,{className:`text-base text-muted-foreground`,children:`-`})}var po=(0,X.forwardRef)(function({item:e,activeColumns:t,backPath:n,columnStyles:r,showPinnedEdge:i,showEmailOpenRate:a,timezone:o,onClick:s,...c},l){let u=t=>{if(io(t)){ao(e.id,n);return}s(e.id)},d=t=>{t.button===1&&(t.preventDefault(),ao(e.id,n))};return(0,Z.jsxs)(G,{...c,ref:l,className:S(`group cursor-pointer`,c.className),"data-testid":`members-list-item`,onAuxClick:d,onClick:u,children:[(0,Z.jsxs)(K,{className:S(`min-w-0 bg-background px-4 py-3 group-hover:bg-table-row-hover max-sm:!w-full max-sm:!min-w-0 lg:sticky lg:left-0 lg:z-20`),children:[(0,Z.jsx)(oo,{backPath:n,item:e,onClick:s}),i&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] group-hover:opacity-0 lg:block`,style:{...to,background:`linear-gradient(to right, var(--background) 0px, color-mix(in hsl, var(--background) 78%, transparent) 6px, color-mix(in hsl, var(--background) 28%, transparent) 16px, transparent 24px)`}}),(0,Z.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px hidden w-[24px] opacity-0 group-hover:opacity-100 lg:block`,style:{...to,background:`linear-gradient(to right, var(--table-row-hover) 0px, color-mix(in hsl, var(--table-row-hover) 78%, transparent) 6px, color-mix(in hsl, var(--table-row-hover) 28%, transparent) 16px, transparent 24px)`}})]})]}),(0,Z.jsx)(K,{className:`hidden px-4 py-3 sm:table-cell`,style:r.status,children:(0,Z.jsx)(so,{status:e.status,tiers:e.tiers})}),a&&(0,Z.jsx)(K,{className:`hidden px-4 py-3 lg:table-cell`,style:r.openRate,children:(0,Z.jsx)(co,{emailOpenRate:e.email_open_rate})}),(0,Z.jsx)(K,{className:`hidden px-4 py-3 lg:table-cell`,style:r.location,children:(0,Z.jsx)(lo,{geolocation:e.geolocation})}),(0,Z.jsx)(K,{className:`hidden px-4 py-3 lg:table-cell`,style:r.created,children:(0,Z.jsx)(uo,{createdAt:e.created_at})}),t.map(t=>(0,Z.jsx)(K,{className:`hidden px-4 py-3 lg:table-cell`,style:r.dynamic,children:(0,Z.jsx)(fo,{column:t,member:e,timezone:o})},t.key))]})}),mo={left:`100%`,background:`linear-gradient(to right, var(--members-sticky-fade-base) 0px, color-mix(in hsl, var(--members-sticky-fade-base) 78%, transparent) 6px, color-mix(in hsl, var(--members-sticky-fade-base) 28%, transparent) 16px, transparent 24px)`},ho=({activeColumns:e,columnStyles:t,showEmailOpenRate:n})=>(0,Z.jsxs)(`colgroup`,{children:[(0,Z.jsx)(`col`,{className:`max-sm:!w-full max-sm:!min-w-0 sm:max-lg:!w-auto sm:max-lg:!min-w-0`,style:t.member}),(0,Z.jsx)(`col`,{className:`hidden sm:table-column`,style:t.status}),n&&(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.openRate}),(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.location}),(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.created}),e.map(e=>(0,Z.jsx)(`col`,{className:`hidden lg:table-column`,style:t.dynamic},e.key))]}),go=({activeColumns:e,className:t,columnStyles:n,headerRef:r,memberHeaderRef:i,showEmailOpenRate:a})=>(0,Z.jsx)(Ve,{ref:r,className:S(`hidden bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,t),children:(0,Z.jsxs)(G,{children:[(0,Z.jsx)(W,{ref:i,className:`sticky left-0 z-[70] bg-transparent px-4 [--members-sticky-fade-base:var(--background)]`,style:n.member,children:`Member`}),(0,Z.jsx)(W,{className:`bg-transparent px-4`,style:n.status,children:`Status`}),a&&(0,Z.jsx)(W,{className:`bg-transparent px-4`,style:n.openRate,children:`Open rate`}),(0,Z.jsx)(W,{className:`bg-transparent px-4`,style:n.location,children:`Location`}),(0,Z.jsx)(W,{className:`bg-transparent px-4`,style:n.created,children:`Created`}),e.map(e=>(0,Z.jsx)(W,{className:`bg-transparent px-4`,style:n.dynamic,children:e.label},e.key))]})}),_o=({columnStyle:e,showPinnedEdge:t})=>(0,Z.jsxs)(`div`,{className:`pointer-events-none absolute inset-y-0 left-0 z-[70] overflow-visible bg-transparent [--members-sticky-fade-base:var(--background)]`,style:e,children:[(0,Z.jsxs)(He,{className:`w-full table-fixed border-collapse`,children:[(0,Z.jsx)(`colgroup`,{children:(0,Z.jsx)(`col`,{style:{width:`100%`}})}),(0,Z.jsx)(Ve,{className:`bg-transparent lg:table-header-group [&_th]:whitespace-nowrap`,children:(0,Z.jsx)(G,{children:(0,Z.jsx)(W,{className:`bg-transparent px-4`,children:`Member`})})})]}),t&&(0,Z.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-y-px w-[24px]`,style:mo})]}),vo={member:40,status:15,openRate:10,location:17.5,created:17.5},yo={member:320,status:180,openRate:140,location:180,created:160},bo=17.5,xo=220;function So(e){return Number.isFinite(e)?Math.max(0,Math.floor(e)):0}function Co({showEmailOpenRate:e,activeColumnCount:t}){let n=[{key:`member`,width:vo.member},{key:`status`,width:vo.status},...e?[{key:`openRate`,width:vo.openRate}]:[],{key:`location`,width:vo.location},{key:`created`,width:vo.created}],r=So(t),i=n.reduce((e,t)=>e+t.width,0),a=100+r*bo,o=bo/a*100,s=n.reduce((e,t)=>{let n=t.width/i*100;return e[t.key]=n/a*100,e},{member:0,status:0,openRate:0,location:0,created:0});return{tableWidthPercentage:a,minTableWidth:n.reduce((e,t)=>e+yo[t.key],0)+r*xo,dynamicColumnWidthPercentage:o,baseColumnWidthPercentages:s,baseColumnMinWidths:{member:yo.member,status:yo.status,openRate:yo.openRate,location:yo.location,created:yo.created},dynamicColumnMinWidth:xo}}function wo(e){let t=(e,t)=>({width:`${e}%`,minWidth:`${t}px`});return{tableStyle:{"--members-table-width":`${e.tableWidthPercentage}%`,"--members-table-min-width":`${e.minTableWidth}px`},columnStyles:{member:t(e.baseColumnWidthPercentages.member,e.baseColumnMinWidths.member),status:t(e.baseColumnWidthPercentages.status,e.baseColumnMinWidths.status),openRate:t(e.baseColumnWidthPercentages.openRate,e.baseColumnMinWidths.openRate),location:t(e.baseColumnWidthPercentages.location,e.baseColumnMinWidths.location),created:t(e.baseColumnWidthPercentages.created,e.baseColumnMinWidths.created),dynamic:t(e.dynamicColumnWidthPercentage,e.dynamicColumnMinWidth)}}}var To=({height:e})=>(0,Z.jsx)(`tr`,{"aria-hidden":`true`,style:{height:e},children:(0,Z.jsx)(`td`,{colSpan:999})}),Eo=(0,X.forwardRef)(function(e,t){return(0,Z.jsx)(G,{ref:t,...e,"aria-hidden":`true`,children:(0,Z.jsx)(K,{className:`h-[72px] px-4 py-3`,colSpan:999,children:(0,Z.jsx)(`div`,{className:`h-full animate-pulse rounded-md bg-muted`,"data-testid":`loading-placeholder`})})})});function Do({items:e,totalItems:t,backPath:n,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,isLoading:o,showEmailOpenRate:s=!0,activeColumns:c,timezone:l,pageHeaderRef:u,onRowClick:d}){let f=(0,X.useRef)(null),p=(0,X.useRef)(null),m=(0,X.useRef)(null),h=(0,X.useRef)(null),g=(0,X.useRef)(null),[_,v]=(0,X.useState)(0),[y,x]=(0,X.useState)(0),[S,C]=(0,X.useState)(!1),{visibleItemCount:w,canLoadMore:T,loadMore:E}=In(t),D=(0,X.useMemo)(()=>Co({showEmailOpenRate:s,activeColumnCount:c.length}),[c.length,s]),{tableStyle:O,columnStyles:k}=(0,X.useMemo)(()=>wo(D),[D]);Fn({parentRef:f,isLoading:o}),(0,X.useEffect)(()=>{let e=g.current;if(!e)return;let t=()=>{let t=e.scrollLeft;C(t>0),h.current&&(h.current.scrollLeft=t)};return t(),e.addEventListener(`scroll`,t,{passive:!0}),window.addEventListener(`resize`,t),()=>{e.removeEventListener(`scroll`,t),window.removeEventListener(`resize`,t)}},[c.length,e.length,s]),(0,X.useEffect)(()=>{let e=u?.current,t=p.current,n=m.current;if(!e||!t||!n){v(0),x(0);return}let r=e.style.paddingBottom,i=e.style.marginBottom,a=parseFloat(getComputedStyle(e).paddingBottom)||0,o=parseFloat(getComputedStyle(e).marginBottom)||0,s=()=>{r?e.style.setProperty(`padding-bottom`,r):e.style.removeProperty(`padding-bottom`),i?e.style.setProperty(`margin-bottom`,i):e.style.removeProperty(`margin-bottom`)},c=()=>{if(!window.matchMedia(`(min-width: 1024px)`).matches){s(),v(0),x(0);return}let r=t.getBoundingClientRect().height,i=n.getBoundingClientRect().width;e.style.setProperty(`padding-bottom`,`${a+r}px`,`important`),e.style.setProperty(`margin-bottom`,`${o-r}px`,`important`);let c=e.getBoundingClientRect().height;v(i),x(Math.max(c-r,0))};c();let l=new ResizeObserver(()=>{c()});return l.observe(e),l.observe(t),l.observe(n),window.addEventListener(`resize`,c),()=>{s(),l.disconnect(),window.removeEventListener(`resize`,c)}},[c.length,u,s]);let{visibleItems:A,spaceBefore:j,spaceAfter:M}=Pn({items:e,totalItems:w,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:a,parentRef:f,estimateSize:()=>72}),N=b(),P=e=>{d?d(e):N(eo(e,n))};return(0,Z.jsxs)(`div`,{ref:f,className:`w-full min-w-0`,"data-testid":`members-list-scroll-root`,children:[(0,Z.jsx)(`div`,{className:`sticky z-[50] hidden overflow-visible bg-transparent lg:block`,style:{top:y},children:(0,Z.jsxs)(`div`,{className:`relative`,children:[(0,Z.jsx)(_o,{columnStyle:_>0?{width:_}:k.member,showPinnedEdge:S}),(0,Z.jsx)(`div`,{ref:h,className:`w-full overflow-hidden`,style:_>0?{clipPath:`inset(0 0 0 ${_}px)`}:void 0,children:(0,Z.jsxs)(He,{"aria-hidden":`true`,className:`w-full border-collapse lg:w-[var(--members-table-width)] lg:min-w-[var(--members-table-min-width)] lg:table-fixed`,style:O,children:[(0,Z.jsx)(ho,{activeColumns:c,columnStyles:k,showEmailOpenRate:s}),(0,Z.jsx)(go,{activeColumns:c,columnStyles:k,headerRef:p,memberHeaderRef:m,showEmailOpenRate:s})]})})]})}),(0,Z.jsx)(`div`,{ref:g,className:`w-full overflow-x-auto overflow-y-visible`,children:(0,Z.jsxs)(He,{className:`w-full border-collapse max-sm:table-fixed sm:max-lg:table-auto lg:w-[var(--members-table-width)] lg:min-w-[var(--members-table-min-width)] lg:table-fixed`,"data-testid":`members-list`,style:O,children:[(0,Z.jsx)(ho,{activeColumns:c,columnStyles:k,showEmailOpenRate:s}),(0,Z.jsx)(go,{activeColumns:c,className:`lg:h-0 lg:overflow-hidden lg:[&_th]:pointer-events-none lg:[&_th]:h-0 lg:[&_th]:border-0 lg:[&_th]:p-0 lg:[&_th]:text-[0px] lg:[&_th]:leading-none lg:[&_th]:opacity-0 lg:[&_tr]:h-0 lg:[&_tr]:border-0`,columnStyles:k,showEmailOpenRate:s}),(0,Z.jsxs)(Be,{children:[(0,Z.jsx)(To,{height:j}),A.map(({key:t,virtualItem:r,item:i,props:a})=>r.index>e.length-1?(0,Z.jsx)(Eo,{...a},t):(0,Z.jsx)(po,{...a,activeColumns:c,backPath:n,columnStyles:k,item:i,showEmailOpenRate:s,showPinnedEdge:S,timezone:l,onClick:P},t)),(0,Z.jsx)(To,{height:M})]})]})}),T&&(0,Z.jsx)(Ln,{isLoading:i,onClick:E})]})}function Oo({count:e,hasResolvedCount:t,nql:n,search:r}){let i=b(),{data:a}=c(),{mutateAsync:o,isPending:s}=Ue(),[l,u]=(0,X.useState)(null),d=Ei(n),f=!r&&(!n||d),m=(0,X.useMemo)(()=>Oi(a?.accessibility),[a?.accessibility]),h=l??m.dismissedCount??0,g=!d,_=f&&(d||e>h);return(0,X.useEffect)(()=>{let n=m.dismissedCount;!a||l!==null||s||n===void 0||!t||e>=n||(u(e),o(Ai(a,e,m.dismissedAt??new Date().toISOString())).then(()=>{u(null)}).catch(e=>{u(null),console.log(`Unable to update multiple active subscriptions banner dismissed count`,e)}))},[e,a,o,t,s,l,m.dismissedAt,m.dismissedCount]),{canDismiss:g,count:e,handleDismiss:(0,X.useCallback)(()=>{if(!a||s)return;let t=l;u(e),o(Ai(a,e,new Date().toISOString())).then(()=>{u(null)}).catch(()=>{u(t),p.error(`Unable to dismiss notification. Please try again.`)})},[e,a,o,s,l]),handleViewMembers:(0,X.useCallback)(()=>{i(lt({filter:wi}))},[i]),shouldShow:_}}var ko=({count:e,hasResolvedCount:t,nql:n,search:r})=>{let i=Oo({count:e,hasResolvedCount:t,nql:n,search:r});return i.shouldShow?(0,Z.jsx)(at,{role:`status`,variant:`warning`,...i.canDismiss?{dismissible:!0,onDismiss:i.handleDismiss}:{dismissible:!1},children:(0,Z.jsxs)(`div`,{className:`flex flex-col items-baseline gap-3 pr-8 sm:flex-row`,children:[`We found `,C(i.count),` `,i.count===1?`member`:`members`,` with more than one active paid subscription.`,` `,(0,Z.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[i.canDismiss&&(0,Z.jsx)(`button`,{className:`nowrap font-semibold !underline`,type:`button`,onClick:i.handleViewMembers,children:`View members`}),(0,Z.jsx)(`a`,{className:`nowrap font-semibold underline`,href:`https://ghost.org/help/duplicate-subscription-warning/`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]})}):null},Ao=[`subscriptions.plan_interval`,`subscriptions.status`,`subscriptions.start_date`,`subscriptions.current_period_end`,`conversion`,`offer_redemptions`,Ci];function jo(e,t){return t&&e.length===0?!1:!e.some(e=>Ao.includes(e.field))}function Mo({isFetching:e,isFetchingNextPage:t}){return e&&!t}var No=wn(Fi,`date`);function Po(e,t=Fi){return vn(e,t)}function Fo(e,t,n=Fi){let r=En(e??``);return r?Sn(dn(r,n,t)):[]}function Io(e){let t=En(e??``);return t?un(t,No):!1}function Lo(e,t,n=Fi){return fn(e,n,t)}function Ro(e,{hasResolvedSettings:t,isLoadingSettings:n=!t,newsletters:r,customFields:i}){return e?n&&!t&&Io(e)||!Ca(e,{newsletters:r,customFields:i}):!1}function zo(e,t){return e.filter(e=>Po(e,t))}function Bo({baseSearchParams:e,filters:t,search:n,timezone:r,fields:i}){let a=new URLSearchParams(e),o=Lo(zo(t,i),r,i);return a.delete(`filter`),a.delete(`search`),o&&a.set(`filter`,o),n&&a.set(`search`,n),a}function Vo(e,t,n){let r=(0,X.useMemo)(()=>Sa({newsletters:t,customFields:n}),[t,n]),[i,a]=_(),o=(0,X.useRef)(null),s=(0,X.useMemo)(()=>i.get(`filter`)??void 0,[i]),c=(0,X.useMemo)(()=>i.toString(),[i]),l=(0,X.useMemo)(()=>zo(Fo(s,e,r),r),[s,e,r]),[u,d]=(0,X.useState)(l),f=(0,X.useMemo)(()=>i.get(`search`)??``,[i]),p=(0,X.useMemo)(()=>Lo(zo(u,r),e,r),[u,e,r]);return(0,X.useEffect)(()=>{c!==o.current&&(d(l),o.current=c)},[c,l]),(0,X.useEffect)(()=>{if(o.current!==null&&c!==o.current)return;let t=Bo({baseSearchParams:i,filters:u,search:f,timezone:e,fields:r}),n=t.toString();n!==c&&(o.current=n,a(t,{replace:!0}))},[c,u,f,i,a,e,r]),{filters:u,nql:p,search:f,setFilters:(0,X.useCallback)((t,n={})=>{let s=n.replace??!0,c=Bo({baseSearchParams:i,filters:t,search:f,timezone:e,fields:r});d(t),o.current=c.toString(),a(c,{replace:s})},[f,i,a,e,r]),setSearch:(0,X.useCallback)((t,n={})=>{let s=n.replace??!0,c=Bo({baseSearchParams:i,filters:u,search:t,timezone:e,fields:r});o.current=c.toString(),a(c,{replace:s})},[u,i,a,e,r]),clearFilters:(0,X.useCallback)(({replace:t=!0}={})=>{let n=Bo({baseSearchParams:i,filters:[],search:f,timezone:e,fields:r});d([]),o.current=n.toString(),a(n,{replace:t})},[f,i,a,e,r]),clearAll:(0,X.useCallback)(({replace:t=!0}={})=>{let n=Bo({baseSearchParams:i,filters:[],search:``,timezone:e,fields:r});d([]),o.current=n.toString(),a(n,{replace:t})},[i,a,e,r]),hasFilterOrSearch:!!p||f.length>0}}var Ho=`newsletters`,Uo=[],Wo=[];function Go(e){let t=xn(e,Ho),{data:n,isError:r}=Qe({searchParams:{limit:`100`},enabled:t}),{data:i,isError:a}=qn();return{newsletters:!t||r?Uo:n?.newsletters,customFields:a?Wo:i}}function Ko({enabled:e}){let{data:t}=Ft({searchParams:{filter:wi,limit:`1`,fields:`id`,order:`id`},defaultErrorHandler:!1,enabled:e,refetchOnMount:`always`,staleTime:0});return{count:t?.meta?.pagination?.total??0,hasResolvedCount:t!==void 0}}var qo=250,Jo=6,Yo=({emailAnalyticsEnabled:e,hasStripeEnabled:t,membershipsEnabled:n,timezone:i})=>{let a=(0,X.useRef)(null),o=(0,X.useCallback)(e=>{a.current=e?.closest(`[data-list-page="header"]`)},[]),[s]=_(),{newsletters:c,customFields:l}=Go(s.get(`filter`)??void 0),{filters:u,nql:d,search:f,setFilters:p,setSearch:m,hasFilterOrSearch:h,clearAll:g}=Vo(i,c,l),v=y(),b=oa(),x=la(b,d),[w,D]=(0,X.useState)(!1),[O,k]=(0,X.useState)(!1),[A,j]=(0,X.useState)(f),M=St(e=>{m(e)},qo),{count:N,hasResolvedCount:P}=Ko({enabled:t}),ee=(0,X.useMemo)(()=>Li(u,{customFields:l}),[u,l]),F=(0,X.useMemo)(()=>jo(u,d),[u,d]),{data:I,isError:te,isFetching:ne,isFetchingNextPage:L,refetch:R,fetchNextPage:re,hasNextPage:ie}=Bt({searchParams:(0,X.useMemo)(()=>zi({filters:u,nql:d,search:f}),[u,d,f]),placeholderData:r}),z=Mo({isFetching:ne,isFetchingNextPage:L}),B=I?.meta?.pagination?.total??0,ae=u.length>0,oe=w,se=ae,V=h||B>0,ue=!h&&!z&&!te&&B<Jo;(0,X.useEffect)(()=>{j(f),M.cancel()},[f,M]);let U=e=>{j(e),M(e)};return(0,Z.jsx)(T,{className:`size-full`,children:(0,Z.jsx)(E,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Z.jsxs)(Zt,{"data-testid":`members-page`,children:[(0,Z.jsx)(Zt.Header,{className:`py-4 sidebar:py-5`,children:(0,Z.jsxs)(`div`,{ref:o,className:`flex flex-col gap-4 sidebar:gap-6`,children:[(0,Z.jsxs)(Y,{blurredBackground:!1,sticky:!1,children:[(0,Z.jsx)(Y.Left,{children:(0,Z.jsxs)(Y.Title,{children:[`Members`,` `,!z&&B>0&&(0,Z.jsx)(Y.Count,{className:`hidden sm:inline`,children:C(B)})]})}),(0,Z.jsx)(Y.Actions,{children:(0,Z.jsxs)(Y.ActionGroup,{className:`ml-auto flex-wrap justify-end sm:ml-0 sm:flex-nowrap`,children:[V&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{className:`hidden lg:flex`,children:(0,Z.jsx)(Xa,{search:A,onSearchChange:U})}),(0,Z.jsx)(H,{"aria-label":w?`Hide member search`:`Show member search`,className:S(`lg:hidden`,w&&`bg-secondary hover:bg-secondary`),variant:`outline`,onClick:()=>{if(w){D(!1),k(!1);return}k(!0),D(!0)},children:(0,Z.jsx)(le,{className:`size-4`})}),!ae&&(0,Z.jsx)(Ya,{activeView:x,filters:u,iconOnly:!0,multipleActiveSubscriptionsCount:N,nql:d,savedViews:b,onFiltersChange:p})]}),(0,Z.jsx)(Gi,{canBulkDelete:F,hasFilterOrSearch:h,memberCount:B,nql:d,search:f,showMenu:V,showNewMember:V,onImportComplete:()=>{R()}})]})})]}),V&&(se||oe)&&(0,Z.jsxs)(Jt,{className:S(`flex-col gap-4 lg:flex-row lg:items-center sidebar:gap-6 lg:gap-6`,!se&&`lg:hidden`),children:[oe&&(0,Z.jsx)(`div`,{className:`w-full lg:hidden`,children:(0,Z.jsx)(Xa,{ariaLabel:`Search members mobile`,autoFocus:O,search:A,onSearchChange:U})}),se&&(0,Z.jsx)(Ya,{activeView:x,filters:u,multipleActiveSubscriptionsCount:N,nql:d,savedViews:b,onFiltersChange:p})]}),t&&(0,Z.jsx)(ko,{count:N,hasResolvedCount:P,nql:d,search:f})]})}),(0,Z.jsxs)(Zt.Body,{children:[z?(0,Z.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Z.jsx)(ut,{size:`lg`})}):te?(0,Z.jsxs)(`div`,{className:`mb-16 flex flex-1 flex-col items-center justify-center`,children:[(0,Z.jsx)(`h2`,{className:`mb-2 text-xl font-medium`,children:`Error loading members`}),(0,Z.jsx)(`p`,{className:`mb-4 text-muted-foreground`,children:`Please reload the page to try again`}),(0,Z.jsx)(H,{onClick:()=>window.location.reload(),children:`Reload page`})]}):I?.members.length?(0,Z.jsx)(Do,{activeColumns:ee,backPath:`${v.pathname}${v.search}`,fetchNextPage:()=>void re(),hasNextPage:ie,isFetchingNextPage:L,isLoading:ne&&!L,items:I.members,pageHeaderRef:a,showEmailOpenRate:e,timezone:i,totalItems:B}):h?(0,Z.jsx)(`div`,{className:`flex flex-1 flex-col items-center justify-center`,children:(0,Z.jsx)(Me,{actions:(0,Z.jsx)(H,{variant:`outline`,onClick:()=>{M.cancel(),j(``),g({replace:!1})},children:`Show all members`}),title:`No matching members found.`,children:(0,Z.jsx)(ce,{})})}):(0,Z.jsx)(Ki,{membershipsEnabled:n,onMemberCreated:async()=>{await R()}}),ue&&(0,Z.jsx)(`div`,{className:S(I?.members.length&&`mt-8`),children:(0,Z.jsx)($a,{})})]})]})})})},Xo=()=>{let[e]=_(),{data:t,isLoading:n}=Et({}),{data:r,isLoading:i}=g(),a=e.get(`filter`)??void 0,o=!!t?.settings,{newsletters:s,customFields:c}=Go(a),l=Ro(a,{hasResolvedSettings:o,isLoadingSettings:n,newsletters:s,customFields:c});if(n||i||!t?.settings||!r?.config||l)return(0,Z.jsx)(T,{className:`size-full`,children:(0,Z.jsx)(E,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Z.jsxs)(Zt,{children:[(0,Z.jsx)(Zt.Header,{className:`py-4 sidebar:py-6`,children:(0,Z.jsx)(Y,{blurredBackground:!1,sticky:!1,children:(0,Z.jsx)(Y.Left,{children:(0,Z.jsx)(Y.Title,{children:`Members`})})})}),(0,Z.jsx)(Zt.Body,{children:(0,Z.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Z.jsx)(ut,{size:`lg`})})})]})})});let u=Xt(t.settings),d=vt(t.settings,`members_signup_access`)!==`none`,f=r.config.emailAnalytics===!0,p=et(t.settings,r.config);return(0,Z.jsx)(Yo,{emailAnalyticsEnabled:f,hasStripeEnabled:p,membershipsEnabled:d,timezone:u})};export{Xo as default};
@@ -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{t as i}from"./box-By_EgGtm.js";import{t as a}from"./text-DU9Hv33_.js";var o=e(t(),1),s=n(),c=o.forwardRef(function({className:e,...t},n){return(0,s.jsx)(a,{ref:n,as:`h1`,className:r(`mb-8 text-4xl`,e),"data-modal-page":`title`,leading:`supertight`,weight:`bold`,...t})});c.displayName=`ModalPage.Title`;var l=o.forwardRef(function({className:e,...t},n){return(0,s.jsx)(i,{ref:n,className:r(`w-full p-[8vmin] pt-5`,e),"data-modal-page":`root`,...t})});l.displayName=`ModalPage`;var u=Object.assign(l,{Title:c});export{u 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{l as r}from"./dist-B3keLvjj.js";import{t as i}from"./box-CdfQAP_F.js";import{t as a}from"./text-BQDSDsKs.js";var o=e(t(),1),s=n(),c=o.forwardRef(function({className:e,...t},n){return(0,s.jsx)(a,{ref:n,as:`h1`,className:r(`mb-8 text-4xl`,e),"data-modal-page":`title`,leading:`supertight`,weight:`bold`,...t})});c.displayName=`ModalPage.Title`;var l=o.forwardRef(function({className:e,...t},n){return(0,s.jsx)(i,{ref:n,className:r(`w-full p-[8vmin] pt-5`,e),"data-modal-page":`root`,...t})});l.displayName=`ModalPage`;var u=Object.assign(l,{Title:c});export{u as t};
@@ -0,0 +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{n as r}from"./dist-Ndy-PuGN.js";import{n as i}from"./heading-Dh5SFVjL.js";import{t as a,yr as o}from"./button-eNMKQWXr.js";import{i as s,n as c,r as l,t as u}from"./tabs-D2yWLMp_.js";import{t as d}from"./switch-CI4gLWqb.js";import{t as f}from"./skeleton-Ce9GgUpf.js";import{t as p}from"./use-navigate-with-base-path-BHPA228f.js";import{$t as m,Gt as h,In as g,It as _,Ln as v,Nt as y,Qt as b,_n as x,en as S,fn as C,ht as w,tn as T,vn as E,vt as D,xn as O}from"./index-6MkPdCtr.js";import"./layout-Bjv2Ll-5.js";import{a as k,i as A,n as j,r as M,t as N}from"./settings-DZqxR0Da.js";var P=e(t(),1),F=n(),I=()=>{let{data:e,isLoading:t}=S(`index`),{data:n,isLoading:I}=T(`index`),L=t?[,,,,,].fill({apId:``,name:``,handle:``,avatarUrl:``}):e?.pages.flatMap(e=>e.accounts)??[],R=I?[,,,,,].fill({apId:``,name:``}):n?.pages.flatMap(e=>e.domains)??[],ee=m(`index`),z=E(`index`),[B,V]=(0,P.useState)(new Set),H=b(`index`),U=x(`index`),[W,G]=(0,P.useState)(new Set),[K,q]=(0,P.useState)(null),J=p(),{data:Y,isError:X,isLoading:Z,isSuccess:Q}=C(),$=O({onError:()=>{r.error(`Could not update sensitive media preference.`)}}),te=Y?.showSensitiveMedia??!1,ne=e=>{Q&&$.mutate({showSensitiveMedia:e})},re=e=>{V(t=>{let n=new Set([...t]);return n.add(e.apId),n}),z.mutate(e),r.success(`User unblocked`)},ie=e=>{V(t=>{let n=new Set([...t]);return n.delete(e.apId),n}),ee.mutate(e),r.success(`User blocked`)},ae=e=>{G(t=>{let n=new Set([...t]);return n.add(e.url),n}),U.mutate({url:e.url}),r.success(`Domain unblocked`)},oe=e=>{G(t=>{let n=new Set([...t]);return n.delete(e.url),n}),H.mutate({url:e.url}),r.success(`Domain blocked`)};return(0,F.jsx)(w,{children:(0,F.jsxs)(`div`,{className:`mx-auto max-w-[620px] py-[min(4vh,48px)]`,children:[(0,F.jsx)(`div`,{className:`flex items-center justify-between gap-8`,children:(0,F.jsx)(i,{children:`Moderation`})}),!X&&(0,F.jsx)(`div`,{className:`mt-6`,children:(0,F.jsxs)(A,{children:[(0,F.jsxs)(M,{children:[(0,F.jsx)(k,{children:`Show sensitive media`}),(0,F.jsx)(j,{children:`Display adult content or media marked as sensitive without a warning`})]}),(0,F.jsx)(N,{children:(0,F.jsx)(d,{"aria-label":`Show sensitive media`,checked:te,disabled:Z||!Q,onCheckedChange:ne})})]})}),(0,F.jsx)(`div`,{className:`mt-6`,children:(0,F.jsxs)(u,{defaultValue:`blocked_users`,variant:`underline`,children:[(0,F.jsxs)(l,{children:[(0,F.jsx)(s,{value:`blocked_users`,children:`Blocked users`}),(0,F.jsx)(s,{value:`blocked_domains`,children:`Blocked domains`})]}),(0,F.jsx)(c,{className:`mt-2`,value:`blocked_users`,children:!t&&L.length===0?(0,F.jsxs)(g,{children:[(0,F.jsx)(v,{children:(0,F.jsx)(o,{})}),(0,F.jsx)(`div`,{className:`mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center`,children:(0,F.jsx)(`p`,{children:`When you block someone, they won't be able to follow you or interact with your content on the social web.`})})]}):L.map((e,n)=>(0,F.jsx)(_,{actor:e,isCurrentUser:!0,children:(0,F.jsx)(`div`,{children:(0,F.jsxs)(D,{onClick:t?void 0:()=>y(e.handle,J),children:[(0,F.jsx)(h,{author:{icon:{url:e.avatarUrl},name:e.name,handle:e.handle}}),(0,F.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,F.jsx)(`span`,{className:`block truncate font-semibold text-black dark:text-white`,children:t?(0,F.jsx)(f,{className:`w-24`}):e.name}),(0,F.jsx)(`span`,{className:`block truncate text-sm text-gray-600`,children:t?(0,F.jsx)(f,{className:`w-40`}):e.handle})]}),B.has(e.apId)?(0,F.jsx)(a,{className:`ml-auto min-w-[90px] text-red hover:bg-red/5! hover:text-red-400`,variant:`outline`,onClick:t=>{t.stopPropagation(),ie(e)},children:`Block`}):t?(0,F.jsx)(`div`,{className:`ml-auto w-16`,children:(0,F.jsx)(f,{})}):(0,F.jsx)(a,{className:`ml-auto min-w-[90px]`,variant:`destructive`,onClick:t=>{t.stopPropagation(),re(e)},onMouseEnter:()=>q(e.apId),onMouseLeave:()=>q(null),children:K===e.apId?`Unblock`:`Blocked`})]})})},e.apId?e.apId:`loading-${n}`))}),(0,F.jsx)(c,{className:`mt-[11px]`,value:`blocked_domains`,children:!I&&R.length===0?(0,F.jsxs)(g,{children:[(0,F.jsx)(v,{children:(0,F.jsx)(o,{})}),(0,F.jsx)(`div`,{className:`mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center`,children:(0,F.jsx)(`p`,{children:`When you block a domain, all users from that domain won't be able to follow you or interact with your content.`})})]}):R.map((e,t)=>(0,F.jsxs)(D,{children:[(0,F.jsx)(`div`,{className:`flex min-w-0 flex-col`,children:(0,F.jsx)(`span`,{className:`block truncate font-semibold text-black dark:text-white`,children:I?(0,F.jsx)(f,{className:`w-48`}):new URL(e.url).hostname})}),W.has(e.url)?(0,F.jsx)(a,{className:`ml-auto min-w-[90px] text-red hover:bg-red/5! hover:text-red-400`,variant:`outline`,onClick:()=>oe(e),children:`Block`}):I?(0,F.jsx)(`div`,{className:`ml-auto w-16`,children:(0,F.jsx)(f,{})}):(0,F.jsx)(a,{className:`ml-auto min-w-[90px]`,variant:`destructive`,onClick:()=>ae(e),onMouseEnter:()=>q(e.url),onMouseLeave:()=>q(null),children:K===e.url?`Unblock`:`Blocked`})]},e.url?e.url:`loading-${t}`))})]})})]})})};export{I as default};
@@ -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{Qn as i,Qt as a}from"./button-BshWPHvn.js";import{a as o,c as s,i as c,o as l,r as u,s as d,t as f}from"./command-DcLbSifC.js";var p=e(t(),1),m=n(),h={searchPlaceholder:`Search...`,noResultsFound:`No results found.`,loading:`Loading...`,loadMore:`Load more`};function g(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.label.toLowerCase().includes(n)||e.detail?.toLowerCase().includes(n)):e}function _(e,t,n,r,i,a,o){if(e)return{...e,shouldClientFilter:o??e.shouldClientFilter};let s=!!t,c=t?.useOptions({query:r,selectedValues:i});return{options:s?c?.options??[]:n??[],isInitialLoad:s?c?.isInitialLoad??!1:a&&(n?.length??0)===0,isSearching:s?c?.isSearching??!1:a&&(n?.length??0)>0,hasMore:s?c?.hasMore??!1:!1,isLoadingMore:s?c?.isLoadingMore??!1:!1,loadMore:s?c?.loadMore??(()=>{}):()=>{},shouldClientFilter:o??!s}}function v({optionSource:e,options:t,values:n,onChange:v,valueSource:y,searchable:b=!0,isLoading:x=!1,maxSelections:S,isMultiSelect:C=!0,onClose:w,autoCloseOnSelect:T=!1,className:E,searchInputClassName:D,shouldFilter:O,onSearchChange:k,i18n:A,renderItem:ee,groupBy:j,header:M,footer:N}){let P=(0,p.useMemo)(()=>({...h,...A}),[A]),[F,I]=(0,p.useState)(``),L=(0,p.useCallback)(t=>{I(t),e?.onSearchChange?.(t),k?.(t)},[k,e]),R=_(e,y,t,F,n,x,O),z=R.options,[B,V]=(0,p.useState)([]),H=(0,p.useMemo)(()=>z.filter(e=>n.includes(e.value)),[z,n]);(0,p.useEffect)(()=>{if(n.length===0){V([]);return}H.length>0&&V(e=>{let t=[];for(let r of n){let n=H.find(e=>e.value===r)??e.find(e=>e.value===r);n&&t.push(n)}return t})},[H,n]);let U=(0,p.useMemo)(()=>n.length===0?[]:B.length>0?B:H,[B,n.length,H]),W=(0,p.useMemo)(()=>g(U,F),[F,U]),G=(0,p.useMemo)(()=>z.filter(e=>!n.includes(e.value)),[z,n]),K=(0,p.useMemo)(()=>{let e=new Map;for(let t of G){let n=j?.(t),r=typeof n==`string`?n:n?.key,i=typeof n==`string`?n:n?.label,a=e.get(r);e.set(r,{label:i,options:[...a?.options??[],t]})}return[...e.entries()].map(([e,t])=>({key:e,...t}))},[j,G]),q=(0,p.useCallback)(e=>{v(n.filter(t=>t!==e.value))},[v,n]),J=e=>{v([]),w?.()},Y=e=>{let t=[...n,e.value];S&&t.length>S||(v(t),T&&w?.())},X=e=>{v([e.value]),w?.()},Z=C?q:J,Q=C?Y:X,te=(0,p.useCallback)(()=>L(``),[L]),ne=(e,t)=>{if(t)return;let n=e.detail?` - ${e.detail}`:``;return e.label+n},$=ee??(({option:e,isSelected:t,onSelect:n})=>(0,m.jsxs)(l,{className:`group flex items-center gap-2`,value:ne(e,t),onSelect:n,children:[e.icon,(0,m.jsxs)(`div`,{className:`flex flex-col overflow-hidden`,children:[(0,m.jsx)(`span`,{className:`truncate text-accent-foreground`,title:e.label,children:e.label}),e.detail&&(0,m.jsx)(`span`,{className:`truncate text-sm text-muted-foreground`,title:e.detail,children:e.detail})]}),(0,m.jsx)(i,{className:r(`ms-auto text-primary`,!t&&`opacity-0`)})]},String(e.value)));return(0,m.jsx)(`div`,{className:r(`w-full`,E),children:(0,m.jsxs)(f,{shouldFilter:R.shouldClientFilter,children:[M?.({selectedOptions:U,onDeselect:q}),b&&(0,m.jsxs)(`div`,{className:`relative`,children:[(0,m.jsx)(o,{className:r(`h-(--control-height) pr-8`,D),placeholder:P.searchPlaceholder,value:F,onValueChange:L}),R.isSearching&&(0,m.jsx)(a,{className:`pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 animate-spin text-muted-foreground`})]}),(0,m.jsxs)(d,{className:`outline-hidden`,children:[R.isInitialLoad?(0,m.jsxs)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:[(0,m.jsx)(a,{className:`mr-2 size-4 animate-spin`}),P.loading]}):(0,m.jsx)(u,{children:P.noResultsFound}),W.length>0&&(0,m.jsx)(c,{heading:P.selectedHeading,children:W.map(e=>$({option:e,isSelected:!0,onSelect:()=>Z(e)}))}),G.length>0&&(0,m.jsxs)(m.Fragment,{children:[W.length>0&&(0,m.jsx)(s,{}),K.map(e=>(0,m.jsx)(c,{heading:e.label,children:e.options.map(e=>$({option:e,isSelected:!1,onSelect:()=>Q(e)}))},e.key===void 0?`ungrouped`:`group:${e.key}`))]}),R.hasMore&&(0,m.jsxs)(m.Fragment,{children:[(W.length>0||G.length>0)&&(0,m.jsx)(s,{}),(0,m.jsx)(`div`,{className:`p-1.5`,children:(0,m.jsxs)(`button`,{className:`flex w-full items-center justify-center rounded-xs px-2 py-1.5 text-sm text-muted-foreground hover:bg-accent hover:text-accent-foreground disabled:opacity-50`,disabled:R.isLoadingMore,type:`button`,onClick:R.loadMore,children:[R.isLoadingMore&&(0,m.jsx)(a,{className:`mr-2 size-4 animate-spin`}),R.isLoadingMore?P.loading:P.loadMore]})})]})]}),N?.({searchInput:F,clearSearch:te})]})})}export{v 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{l as r}from"./dist-B3keLvjj.js";import{$t as i,er as a}from"./button-eNMKQWXr.js";import{a as o,c as s,i as c,o as l,r as u,s as d,t as f}from"./command-BfpHORBv.js";var p=e(t(),1),m=n(),h={searchPlaceholder:`Search...`,noResultsFound:`No results found.`,loading:`Loading...`,loadMore:`Load more`};function g(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.label.toLowerCase().includes(n)||e.detail?.toLowerCase().includes(n)):e}function _(e,t,n,r,i,a,o){if(e)return{...e,shouldClientFilter:o??e.shouldClientFilter};let s=!!t,c=t?.useOptions({query:r,selectedValues:i});return{options:s?c?.options??[]:n??[],isInitialLoad:s?c?.isInitialLoad??!1:a&&(n?.length??0)===0,isSearching:s?c?.isSearching??!1:a&&(n?.length??0)>0,hasMore:s?c?.hasMore??!1:!1,isLoadingMore:s?c?.isLoadingMore??!1:!1,loadMore:s?c?.loadMore??(()=>{}):()=>{},shouldClientFilter:o??!s}}function v({optionSource:e,options:t,values:n,onChange:v,valueSource:y,searchable:b=!0,isLoading:x=!1,maxSelections:S,isMultiSelect:C=!0,onClose:w,autoCloseOnSelect:T=!1,className:E,searchInputClassName:D,shouldFilter:O,onSearchChange:k,i18n:A,renderItem:ee,groupBy:j,header:M,footer:N}){let P=(0,p.useMemo)(()=>({...h,...A}),[A]),[F,I]=(0,p.useState)(``),L=(0,p.useCallback)(t=>{I(t),e?.onSearchChange?.(t),k?.(t)},[k,e]),R=_(e,y,t,F,n,x,O),z=R.options,[B,V]=(0,p.useState)([]),H=(0,p.useMemo)(()=>z.filter(e=>n.includes(e.value)),[z,n]);(0,p.useEffect)(()=>{if(n.length===0){V([]);return}H.length>0&&V(e=>{let t=[];for(let r of n){let n=H.find(e=>e.value===r)??e.find(e=>e.value===r);n&&t.push(n)}return t})},[H,n]);let U=(0,p.useMemo)(()=>n.length===0?[]:B.length>0?B:H,[B,n.length,H]),W=(0,p.useMemo)(()=>g(U,F),[F,U]),G=(0,p.useMemo)(()=>z.filter(e=>!n.includes(e.value)),[z,n]),K=(0,p.useMemo)(()=>{let e=new Map;for(let t of G){let n=j?.(t),r=typeof n==`string`?n:n?.key,i=typeof n==`string`?n:n?.label,a=e.get(r);e.set(r,{label:i,options:[...a?.options??[],t]})}return[...e.entries()].map(([e,t])=>({key:e,...t}))},[j,G]),q=(0,p.useCallback)(e=>{v(n.filter(t=>t!==e.value))},[v,n]),J=e=>{v([]),w?.()},Y=e=>{let t=[...n,e.value];S&&t.length>S||(v(t),T&&w?.())},X=e=>{v([e.value]),w?.()},Z=C?q:J,Q=C?Y:X,te=(0,p.useCallback)(()=>L(``),[L]),ne=(e,t)=>{if(t)return;let n=e.detail?` - ${e.detail}`:``;return e.label+n},$=ee??(({option:e,isSelected:t,onSelect:n})=>(0,m.jsxs)(l,{className:`group flex items-center gap-2`,value:ne(e,t),onSelect:n,children:[e.icon,(0,m.jsxs)(`div`,{className:`flex flex-col overflow-hidden`,children:[(0,m.jsx)(`span`,{className:`truncate text-accent-foreground`,title:e.label,children:e.label}),e.detail&&(0,m.jsx)(`span`,{className:`truncate text-sm text-muted-foreground`,title:e.detail,children:e.detail})]}),(0,m.jsx)(a,{className:r(`ms-auto text-primary`,!t&&`opacity-0`)})]},String(e.value)));return(0,m.jsx)(`div`,{className:r(`w-full`,E),children:(0,m.jsxs)(f,{shouldFilter:R.shouldClientFilter,children:[M?.({selectedOptions:U,onDeselect:q}),b&&(0,m.jsxs)(`div`,{className:`relative`,children:[(0,m.jsx)(o,{className:r(`h-(--control-height) pr-8`,D),placeholder:P.searchPlaceholder,value:F,onValueChange:L}),R.isSearching&&(0,m.jsx)(i,{className:`pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 animate-spin text-muted-foreground`})]}),(0,m.jsxs)(d,{className:`outline-hidden`,children:[R.isInitialLoad?(0,m.jsxs)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:[(0,m.jsx)(i,{className:`mr-2 size-4 animate-spin`}),P.loading]}):(0,m.jsx)(u,{children:P.noResultsFound}),W.length>0&&(0,m.jsx)(c,{heading:P.selectedHeading,children:W.map(e=>$({option:e,isSelected:!0,onSelect:()=>Z(e)}))}),G.length>0&&(0,m.jsxs)(m.Fragment,{children:[W.length>0&&(0,m.jsx)(s,{}),K.map(e=>(0,m.jsx)(c,{heading:e.label,children:e.options.map(e=>$({option:e,isSelected:!1,onSelect:()=>Q(e)}))},e.key===void 0?`ungrouped`:`group:${e.key}`))]}),R.hasMore&&(0,m.jsxs)(m.Fragment,{children:[(W.length>0||G.length>0)&&(0,m.jsx)(s,{}),(0,m.jsx)(`div`,{className:`p-1.5`,children:(0,m.jsxs)(`button`,{className:`flex w-full items-center justify-center rounded-xs px-2 py-1.5 text-sm text-muted-foreground hover:bg-accent hover:text-accent-foreground disabled:opacity-50`,disabled:R.isLoadingMore,type:`button`,onClick:R.loadMore,children:[R.isLoadingMore&&(0,m.jsx)(i,{className:`mr-2 size-4 animate-spin`}),R.isLoadingMore?P.loading:P.loadMore]})})]})]}),N?.({searchInput:F,clearSearch:te})]})})}export{v as t};