ghost 6.55.0 → 6.56.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 (280) hide show
  1. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  2. package/components/tryghost-kg-default-cards-10.3.3.tgz +0 -0
  3. package/components/tryghost-kg-default-nodes-2.1.4.tgz +0 -0
  4. package/components/tryghost-kg-default-transforms-1.3.3.tgz +0 -0
  5. package/components/tryghost-kg-html-to-lexical-1.3.3.tgz +0 -0
  6. package/components/tryghost-kg-lexical-html-renderer-1.4.3.tgz +0 -0
  7. package/components/tryghost-nql-string-0.0.0.tgz +0 -0
  8. package/core/built/admin/assets/{Combination-CJG7Flp-.js → Combination-BCm9FL4o.js} +1 -1
  9. package/core/built/admin/assets/{PolarAngleAxis-BGjf7sBu.js → PolarAngleAxis-C4qtHy1B.js} +1 -1
  10. package/core/built/admin/assets/{RadialBarChart-zeFf9mBz.js → RadialBarChart-Bh09Stsj.js} +1 -1
  11. package/core/built/admin/assets/{account-migration-sjHLx5dy.js → account-migration-D3O_yVck.js} +1 -1
  12. package/core/built/admin/assets/activitypub/{account-migration-DoYXtnZ8.js → account-migration-D8FbP-Z-.js} +7 -7
  13. package/core/built/admin/assets/activitypub/activitypub.js +6 -6
  14. package/core/built/admin/assets/activitypub/{avatar-B3DEDB1l.js → avatar-11EA1VSs.js} +2 -2
  15. package/core/built/admin/assets/activitypub/{avatar-flipboard-Cqrg0XMx.js → avatar-flipboard-jfbLG-xe.js} +2 -2
  16. package/core/built/admin/assets/activitypub/{bluesky-sharing-Bxeh6MKW.js → bluesky-sharing-f1jTQe2P.js} +16 -16
  17. package/core/built/admin/assets/activitypub/{content-formatters-BpQARh28.js → content-formatters-nmTOPY9M.js} +3 -3
  18. package/core/built/admin/assets/activitypub/{copy-D9UWIAan.js → copy-BCwo9ep3.js} +2 -2
  19. package/core/built/admin/assets/activitypub/{dist-D8sFfdpC.js → dist-BEfX-0aW.js} +12 -12
  20. package/core/built/admin/assets/activitypub/{domain-CWueFW6q.js → domain-AaDlZlrA.js} +9 -9
  21. package/core/built/admin/assets/activitypub/{edit-profile-BGxPU7N5.js → edit-profile-DPi8Tl5M.js} +945 -945
  22. package/core/built/admin/assets/activitypub/{explore-DBK-u0Ch.js → explore-CxTzjILQ.js} +8 -8
  23. package/core/built/admin/assets/activitypub/{feed-Bcir5RQZ.js → feed-DPv5x2MX.js} +33 -33
  24. package/core/built/admin/assets/activitypub/{field-BV-CIT3d.js → field-DbgA8lat.js} +3 -3
  25. package/core/built/admin/assets/activitypub/{hash-BC9Q0N4c.js → hash-BWuZoYkA.js} +2 -2
  26. package/core/built/admin/assets/activitypub/{inbox-DQ4ZnC1m.js → inbox-35VDQ2K2.js} +2 -2
  27. package/core/built/admin/assets/activitypub/{inbox-yC0nfvzl.js → inbox-DSrF_i1O.js} +85 -85
  28. package/core/built/admin/assets/activitypub/{label-DTRS9TDk.js → label-CPjFBbo7.js} +3 -3
  29. package/core/built/admin/assets/activitypub/layout-CTgrezN7.js +1 -0
  30. package/core/built/admin/assets/activitypub/{moderation-Dwl9t0pb.js → moderation-BkDC1XVZ.js} +11 -11
  31. package/core/built/admin/assets/activitypub/{note-B-zKsZ7r.js → note-xEyH4xT-.js} +7 -7
  32. package/core/built/admin/assets/activitypub/{notifications-DjJZD54t.js → notifications-DClaL3ui.js} +9 -9
  33. package/core/built/admin/assets/activitypub/{preferences-CoU8vs6d.js → preferences-DpnOa-4Z.js} +20 -20
  34. package/core/built/admin/assets/activitypub/{profile-BAsaJekx.js → profile-Dvi9mz-6.js} +237 -237
  35. package/core/built/admin/assets/activitypub/{reply-CpdMeAO5.js → reply-Cs9ySd6Z.js} +2 -2
  36. package/core/built/admin/assets/activitypub/{routes-CLH3OVTP.js → routes-DFBeTnfn.js} +1139 -1150
  37. package/core/built/admin/assets/activitypub/{separator-BI1FLsYM.js → separator-C5u_VjzY.js} +3 -3
  38. package/core/built/admin/assets/activitypub/{settings-DA6pNJ-Q.js → settings-CV2fFu6D.js} +13 -13
  39. package/core/built/admin/assets/activitypub/{site-CQD42Pw5.js → site-_TgDd_EM.js} +81 -81
  40. package/core/built/admin/assets/activitypub/{step-1-DIDg4aHb.js → step-1-BfnNL2oF.js} +5 -5
  41. package/core/built/admin/assets/activitypub/{step-2-BfGe8BYt.js → step-2-DLndZkO-.js} +6 -6
  42. package/core/built/admin/assets/activitypub/{step-3-mE9spAqw.js → step-3-A-PZTtRE.js} +10 -10
  43. package/core/built/admin/assets/activitypub/{tabs-Cg0saow1.js → tabs-BUbz7tea.js} +317 -315
  44. package/core/built/admin/assets/activitypub/{topic-filter-DLHBZT93.js → topic-filter-BdX_xYYT.js} +3 -3
  45. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-VzbN99u_.js → use-activity-pub-queries-EwuRemHh.js} +2 -2
  46. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-CAwXTmqH.js → use-navigate-with-base-path-cy4ACBc4.js} +92 -90
  47. package/core/built/admin/assets/activitypub/{use-reply-chain-data-Br4aOWOh.js → use-reply-chain-data-CyFcGfan.js} +5 -5
  48. package/core/built/admin/assets/activitypub/{x-C8tAnXly.js → x-7zk8mV2p.js} +2 -2
  49. package/core/built/admin/assets/{audience-DjEWNhp3.js → audience-CkBb2LlO.js} +1 -1
  50. package/core/built/admin/assets/{automated-emails-DRy7qY-J.js → automated-emails-6t2bIRWf.js} +1 -1
  51. package/core/built/admin/assets/{automations-Bx3VcFIL.js → automations-cMllU545.js} +1 -1
  52. package/core/built/admin/assets/{bluesky-sharing-ClMd0-Ft.js → bluesky-sharing-DPGpyD-G.js} +1 -1
  53. package/core/built/admin/assets/{box-BWbhXh21.js → box-By_EgGtm.js} +1 -1
  54. package/core/built/admin/assets/{breadcrumb-BD0U2ygg.js → breadcrumb-DIfcF5ow.js} +1 -1
  55. package/core/built/admin/assets/build-CsiH26uS.js +1 -0
  56. package/core/built/admin/assets/{card-DGoDJzrn.js → card-aUHX0hyR.js} +1 -1
  57. package/core/built/admin/assets/{chart-BuRT2Y6p.js → chart-BnXyfH11.js} +1 -1
  58. package/core/built/admin/assets/{chart-helpers-fjQKRVyY.js → chart-helpers-DV0FkdcD.js} +1 -1
  59. package/core/built/admin/assets/{checkbox-CWa28lgO.js → checkbox-BIl077a0.js} +1 -1
  60. package/core/built/admin/assets/{chunk.481.6c7395a49484bb4583aa.js → chunk.332.05991a101d67f732dec3.js} +43 -42
  61. package/core/built/admin/assets/chunk.524.87b52f4fada529df2c4c.js +25 -0
  62. package/core/built/admin/assets/chunk.582.340bcca873e806cbd4bb.js +27 -0
  63. package/core/built/admin/assets/{code-editor-view-CCr0rBWS.js → code-editor-view-C0aWNwdl.js} +1 -1
  64. package/core/built/admin/assets/comments-qwhIjH3c.js +1 -0
  65. package/core/built/admin/assets/{container-BYz2Ed39.js → container-LiZf3XdY.js} +1 -1
  66. package/core/built/admin/assets/{data-list-16rkJYYi.js → data-list-CupF7bjM.js} +1 -1
  67. package/core/built/admin/assets/{date-range-select-BFp58EMk.js → date-range-select-dXc-GsVe.js} +1 -1
  68. package/core/built/admin/assets/{disabled-sources-indicator-CUxMfiPa.js → disabled-sources-indicator-DYAXW-6V.js} +1 -1
  69. package/core/built/admin/assets/dist-BUKmD51u.js +1 -0
  70. package/core/built/admin/assets/{dist-2Tnz2Yfq.js → dist-CNlMj7ML.js} +1 -1
  71. package/core/built/admin/assets/{dist-DGzPJ_bO.js → dist-Cb5RSHSg.js} +1 -1
  72. package/core/built/admin/assets/{dist-P_ohUlTi.js → dist-CqO2lWS0.js} +1 -1
  73. package/core/built/admin/assets/domain-B5ogXUBa.js +1 -0
  74. package/core/built/admin/assets/{dropzone-DlK-K2DQ.js → dropzone-BnFG7dDP.js} +1 -1
  75. package/core/built/admin/assets/{edit-profile-BKT-REJw.js → edit-profile-B07jCZy9.js} +1 -1
  76. package/core/built/admin/assets/editor-DDYSOXGN.js +8 -0
  77. package/core/built/admin/assets/{empty-indicator-oX1u1Pkn.js → empty-indicator-WB1WgT9h.js} +1 -1
  78. package/core/built/admin/assets/{explore-ClUpJZOp.js → explore-Ca1y8HW_.js} +1 -1
  79. package/core/built/admin/assets/{feed-DF92dUMP.js → feed-x4iFMBP4.js} +1 -1
  80. package/core/built/admin/assets/{field-Do7lieBA.js → field-ChCAabZg.js} +1 -1
  81. package/core/built/admin/assets/filter-sources-LdtH1e-T.js +1 -0
  82. package/core/built/admin/assets/filters-CLehPo_D.js +1 -0
  83. package/core/built/admin/assets/filters-CjVKRP8U.js +1 -0
  84. package/core/built/admin/assets/{ghost-c4057474943effc568c5659ccc4909d7.js → ghost-7f01131115186d1af84ead76e79646dd.js} +149 -129
  85. package/core/built/admin/assets/{ghost-a9c788f6f0b1ea6cf0f14ca4b13f4496.css → ghost-d38c30b866e59f2e06a357b5eb844fe5.css} +1 -1
  86. package/core/built/admin/assets/{ghost-dark-db36d795d21c61426837df40af270966.css → ghost-dark-1bffd5099ba7a749303133efacf8480b.css} +1 -1
  87. package/core/built/admin/assets/{gift-link-modal-f9VIMNDv.js → gift-link-modal-Buqh2vXh.js} +1 -1
  88. package/core/built/admin/assets/{growth-B3I6gNLm.js → growth-DajOBdN0.js} +1 -1
  89. package/core/built/admin/assets/{growth-CVw1My4S.js → growth-Dy2UOSay.js} +2 -2
  90. package/core/built/admin/assets/{inbox-CFBSu4Ed.js → inbox-BUOLDoji.js} +12 -12
  91. package/core/built/admin/assets/index-08n05-rc.js +67 -0
  92. package/core/built/admin/assets/index-DgUzgFvS.css +1 -0
  93. package/core/built/admin/assets/{inline-EMAm3okk.js → inline-Cw-gigDW.js} +1 -1
  94. package/core/built/admin/assets/input-group-uSK3XT7b.js +1 -0
  95. package/core/built/admin/assets/{input-surface-BpAjZXY5.js → input-surface-BdOe4KzO.js} +1 -1
  96. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +9535 -9527
  97. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +124 -124
  98. package/core/built/admin/assets/{koenig-lexical-f8vHRYvz.js → koenig-lexical-BFc4yFed.js} +86 -86
  99. package/core/built/admin/assets/{kpi-card-DSap9rAy.js → kpi-card-BN-E6WYX.js} +1 -1
  100. package/core/built/admin/assets/{kpi-card-DU0rn9Cj.js → kpi-card-CCt-qeWD.js} +1 -1
  101. package/core/built/admin/assets/{kpi-helpers-Dz33AV6h.js → kpi-helpers-DlxTbTs4.js} +1 -1
  102. package/core/built/admin/assets/{kpi-tabs-BtTTrKvJ.js → kpi-tabs-BlcUttpn.js} +1 -1
  103. package/core/built/admin/assets/{label-DS8Mi6G5.js → label-AVrxwmsz.js} +1 -1
  104. package/core/built/admin/assets/{label-picker-1DvSuLA1.js → label-picker-DVnpu_IF.js} +1 -1
  105. package/core/built/admin/assets/labels-DAIqKed7.js +1 -0
  106. package/core/built/admin/assets/layout-B0YLh7R9.js +1 -0
  107. package/core/built/admin/assets/link-helpers-D9LsDOkG.js +1 -0
  108. package/core/built/admin/assets/{list-page-B6ANtzkd.js → list-page-CdsnQR9N.js} +1 -1
  109. package/core/built/admin/assets/member-custom-fields-C8NpZYza.js +1 -0
  110. package/core/built/admin/assets/member-detail-CIVAdKXf.js +1 -0
  111. package/core/built/admin/assets/{members-CQpVFJu4.js → members-oLPiSkXD.js} +2 -2
  112. package/core/built/admin/assets/modals-CB7v-k3T.js +31 -0
  113. package/core/built/admin/assets/{moderation-DySbgyUS.js → moderation-CQ3urTFE.js} +1 -1
  114. package/core/built/admin/assets/newsletter-rbeDX9Wk.js +1 -0
  115. package/core/built/admin/assets/newsletters-vt3Ni1Ov.js +1 -0
  116. package/core/built/admin/assets/{note-C8kxrz6w.js → note-Dk877BTv.js} +1 -1
  117. package/core/built/admin/assets/{notifications-CgtSfX7t.js → notifications-CPlLjPxO.js} +1 -1
  118. package/core/built/admin/assets/{onboarding-route-4qtziA9d.js → onboarding-route-DdStOtjy.js} +1 -1
  119. package/core/built/admin/assets/{overview-Bf2sbznq.js → overview--4V-kx9c.js} +1 -1
  120. package/core/built/admin/assets/overview-DSLv30oz.js +1 -0
  121. package/core/built/admin/assets/{page-header-B3Wb9Jqv.js → page-header-pp4dWmOS.js} +1 -1
  122. package/core/built/admin/assets/{post-analytics-We-ko5Cb.js → post-analytics-BMJrI81R.js} +1 -1
  123. package/core/built/admin/assets/post-analytics-header-pU2m9ZuV.js +1 -0
  124. package/core/built/admin/assets/{post-analytics-provider-B6UynTGb.js → post-analytics-provider-Btml5vJI.js} +1 -1
  125. package/core/built/admin/assets/{post-share-modal-DFfO93_0.js → post-share-modal-AcUZkbfL.js} +1 -1
  126. package/core/built/admin/assets/preferences-Ru4CRPHC.js +5 -0
  127. package/core/built/admin/assets/profile-BNb1oj7D.js +1 -0
  128. package/core/built/admin/assets/{router-provider-C1R4AZ2o.js → router-provider-BmEZf6c6.js} +1 -1
  129. package/core/built/admin/assets/select-B0HteHrp.js +1 -0
  130. package/core/built/admin/assets/settings-B1C9Q3wo.js +4 -0
  131. package/core/built/admin/assets/{settings-WXNeWyU1.js → settings-BGgk7oCI.js} +1 -1
  132. package/core/built/admin/assets/{shade-app-B3heOAfz-CGXQwWeO.js → shade-app-B3heOAfz-BhQXxNkT.js} +1 -1
  133. package/core/built/admin/assets/{share-modal-DsgW3wbg.js → share-modal-BeuydaBf.js} +1 -1
  134. package/core/built/admin/assets/social-urls-DA2lXrhW.js +8 -0
  135. package/core/built/admin/assets/{sort-button-Bb_FCl7e.js → sort-button-Df4t2AL8.js} +1 -1
  136. package/core/built/admin/assets/{source-icon-BeaRxUn9.js → source-icon-ajoaKb41.js} +1 -1
  137. package/core/built/admin/assets/{stack-xiN0eQ6Z.js → stack-CIfOAAVf.js} +1 -1
  138. package/core/built/admin/assets/{stats-Bjj_kmJ1.js → stats-C_lfxZAw.js} +1 -1
  139. package/core/built/admin/assets/{stats-view-BxPbW6K1.js → stats-view-Cxot1iD8.js} +1 -1
  140. package/core/built/admin/assets/{step-1-B1e3-1F8.js → step-1-ogAA4lDr.js} +1 -1
  141. package/core/built/admin/assets/{step-2-C5WaeBJo.js → step-2-C5Xini-7.js} +1 -1
  142. package/core/built/admin/assets/{step-3-B46iVPwu.js → step-3-CZv1FV81.js} +2 -2
  143. package/core/built/admin/assets/{switch-z5Y6Uzt6.js → switch-CyQcwMAv.js} +1 -1
  144. package/core/built/admin/assets/{table-CB-4_HBJ.js → table-DFj1wiYv.js} +1 -1
  145. package/core/built/admin/assets/{tabs-CCEgKYzq.js → tabs-D4y1gqUd.js} +1 -1
  146. package/core/built/admin/assets/{tags-Cg2VJGmG.js → tags-Dmft-Y4O.js} +1 -1
  147. package/core/built/admin/assets/{text-DwtjwGkh.js → text-DU9Hv33_.js} +1 -1
  148. package/core/built/admin/assets/textarea-d9qEkMOP.js +1 -0
  149. package/core/built/admin/assets/{toggle-group-b3IlxvhV.js → toggle-group-R2QMFvXW.js} +1 -1
  150. package/core/built/admin/assets/{topic-filter-DAFT87tQ.js → topic-filter-DGDxDalo.js} +1 -1
  151. package/core/built/admin/assets/{use-analytics-data-S0FTd43s.js → use-analytics-data-C76v4LIp.js} +1 -1
  152. package/core/built/admin/assets/use-filter-params-WrdhAISv.js +1 -0
  153. package/core/built/admin/assets/{use-growth-stats-CIaiHOVb.js → use-growth-stats-aNXJOmQr.js} +1 -1
  154. package/core/built/admin/assets/{use-post-referrers-Cq2vBPrA.js → use-post-referrers-CG0SZioj.js} +1 -1
  155. package/core/built/admin/assets/{use-reply-chain-data-DBDRtGu-.js → use-reply-chain-data-RLdPKRmS.js} +1 -1
  156. package/core/built/admin/assets/{use-simple-pagination-CjYNxdwe.js → use-simple-pagination-DgcF69KI.js} +1 -1
  157. package/core/built/admin/assets/{use-tinybird-query-falHAtuK.js → use-tinybird-query-C1R_Kbmy.js} +1 -1
  158. package/core/built/admin/assets/{use-tinybird-token-D7-8ND1y.js → use-tinybird-token-C9fPjVM_.js} +1 -1
  159. package/core/built/admin/assets/{virtual-list-CvnC9zF2.js → virtual-list-BmTUzeoF.js} +1 -1
  160. package/core/built/admin/assets/{web-B_5GZRvH.js → web-BqW0b0_C.js} +1 -1
  161. package/core/built/admin/assets/web-Cy5GKMWM.js +2 -0
  162. package/core/built/admin/index.html +16 -16
  163. package/core/frontend/services/data/fetch-data.js +10 -5
  164. package/core/frontend/services/routing/api-adapter.js +115 -0
  165. package/core/frontend/services/routing/api-adapter.ts +157 -0
  166. package/core/frontend/services/routing/collection-router.js +5 -3
  167. package/core/frontend/services/routing/controllers/index.js +1 -1
  168. package/core/frontend/services/routing/controllers/rss.js +26 -31
  169. package/core/frontend/services/routing/controllers/rss.ts +66 -0
  170. package/core/frontend/services/routing/controllers/static.js +8 -7
  171. package/core/frontend/services/routing/parent-router.js +17 -4
  172. package/core/frontend/services/routing/permalink-adapter.js +26 -0
  173. package/core/frontend/services/routing/permalink-adapter.ts +23 -0
  174. package/core/frontend/services/routing/registry.js +59 -33
  175. package/core/frontend/services/routing/router-manager.js +9 -13
  176. package/core/frontend/services/routing/static-routes-router.js +4 -4
  177. package/core/frontend/services/routing/taxonomy-router.js +6 -2
  178. package/core/server/data/migrations/versions/6.56/2026-08-03-19-27-51-add-automation-run-step-id-to-automated-email-recipients.js +8 -0
  179. package/core/server/data/migrations/versions/6.56/2026-08-04-14-42-39-restrict-notification-add-permission-to-administrators.js +12 -0
  180. package/core/server/data/schema/fixtures/fixtures.json +2 -2
  181. package/core/server/data/schema/schema.js +1 -0
  182. package/core/server/models/post.js +10 -1
  183. package/core/server/services/automations/automations-repository.ts +3 -1
  184. package/core/server/services/automations/database-automations-repository.js +33 -14
  185. package/core/server/services/automations/database-automations-repository.ts +41 -15
  186. package/core/server/services/automations/get-scheduler-idempotency-key.js +13 -0
  187. package/core/server/services/automations/get-scheduler-idempotency-key.ts +8 -0
  188. package/core/server/services/automations/poll.js +3 -1
  189. package/core/server/services/automations/poll.ts +4 -1
  190. package/core/server/services/automations/service.js +5 -1
  191. package/core/server/services/automations/service.ts +5 -1
  192. package/core/server/services/gift-links/CONTEXT.md +9 -0
  193. package/core/server/services/gifts/CONTEXT.md +55 -0
  194. package/core/server/services/gifts/README.md +28 -0
  195. package/core/server/services/gifts/gift-bookshelf-repository.js +65 -45
  196. package/core/server/services/gifts/gift-bookshelf-repository.ts +203 -74
  197. package/core/server/services/gifts/gift-checkout-adapter.js +59 -0
  198. package/core/server/services/gifts/gift-checkout-offer.js +74 -0
  199. package/core/server/services/gifts/gift-checkout-offer.ts +127 -0
  200. package/core/server/services/gifts/gift-codec.js +63 -0
  201. package/core/server/services/gifts/gift-codec.ts +62 -0
  202. package/core/server/services/gifts/gift-controller.js +6 -31
  203. package/core/server/services/gifts/gift-controller.ts +6 -69
  204. package/core/server/services/gifts/gift-email-service.ts +3 -2
  205. package/core/server/services/gifts/gift-schema.js +34 -0
  206. package/core/server/services/gifts/gift-schema.ts +39 -0
  207. package/core/server/services/gifts/gift-service-wrapper.js +13 -11
  208. package/core/server/services/gifts/gift-service.js +265 -52
  209. package/core/server/services/gifts/gift-service.ts +431 -97
  210. package/core/server/services/gifts/gift.ts +16 -39
  211. package/core/server/services/link-tracking/link-click-repository.js +6 -1
  212. package/core/server/services/link-tracking/link-click-tracking-service.js +12 -3
  213. package/core/server/services/member-welcome-emails/member-welcome-email-renderer.js +4 -3
  214. package/core/server/services/member-welcome-emails/service.js +7 -3
  215. package/core/server/services/members/api.js +1 -2
  216. package/core/server/services/members/import-export/import/importer.ts +3 -2
  217. package/core/server/services/members/import-export/index.js +10 -2
  218. package/core/server/services/members/import-export/index.ts +14 -4
  219. package/core/server/services/members/members-api/controllers/router-controller.js +38 -36
  220. package/core/server/services/members/members-api/members-api.js +13 -7
  221. package/core/server/services/members/members-api/repositories/event-repository.js +4 -94
  222. package/core/server/services/members/members-api/services/member-bread-service.js +3 -3
  223. package/core/server/services/members/members-api/services/payments-service.js +6 -68
  224. package/core/server/services/members-custom-fields/schema.js +8 -1
  225. package/core/server/services/members-custom-fields/schema.ts +8 -0
  226. package/core/server/services/members-custom-fields/values-service.js +118 -2
  227. package/core/server/services/members-custom-fields/values-service.ts +134 -4
  228. package/core/server/services/oembed/oembed-service.js +44 -3
  229. package/core/server/services/posts/posts-service.js +11 -0
  230. package/core/server/services/route-settings/dynamic-routing-service.js +1 -3
  231. package/core/server/services/route-settings/route-settings-parser.js +25 -25
  232. package/core/server/services/route-settings/route-settings-parser.ts +27 -27
  233. package/core/server/services/route-settings/validation-errors.js +68 -4
  234. package/core/server/services/route-settings/validation-errors.ts +79 -4
  235. package/core/server/services/stats/posts-stats-service.js +27 -23
  236. package/core/server/services/stripe/services/webhook/charge-refunded-event-service.js +1 -1
  237. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +16 -4
  238. package/core/server/services/stripe/stripe-api.js +10 -0
  239. package/core/server/web/gift-preview/controller.js +10 -25
  240. package/core/shared/labs.js +2 -2
  241. package/package.json +10 -9
  242. package/pnpm-lock.yaml +28 -18
  243. package/pnpm-workspace.yaml +5 -4
  244. package/components/tryghost-kg-default-nodes-2.1.3.tgz +0 -0
  245. package/core/built/admin/assets/activitypub/layout-qx-bUL1k.js +0 -1
  246. package/core/built/admin/assets/chunk.524.cffd399783a519e404a9.js +0 -25
  247. package/core/built/admin/assets/chunk.582.eebf0d0b2d202bb746a5.js +0 -27
  248. package/core/built/admin/assets/comments-DyUSMUdj.js +0 -1
  249. package/core/built/admin/assets/dist-CjY-f5Z1.js +0 -1
  250. package/core/built/admin/assets/domain-C0bV2UV8.js +0 -1
  251. package/core/built/admin/assets/editor-Dp865O-4.js +0 -8
  252. package/core/built/admin/assets/filter-sources-BV2rnpfA.js +0 -1
  253. package/core/built/admin/assets/filters-CUXJ2Nm9.js +0 -1
  254. package/core/built/admin/assets/filters-DfbIWc_l.js +0 -1
  255. package/core/built/admin/assets/index-9Cw8z3rA.css +0 -1
  256. package/core/built/admin/assets/index-BGG7NckO.js +0 -67
  257. package/core/built/admin/assets/input-group-BSgG_lVw.js +0 -1
  258. package/core/built/admin/assets/labels-CDSUt4J_.js +0 -1
  259. package/core/built/admin/assets/layout-yQEi2qDM.js +0 -1
  260. package/core/built/admin/assets/link-helpers-7EYqvvHs.js +0 -1
  261. package/core/built/admin/assets/member-custom-fields-yOMHyAg9.js +0 -1
  262. package/core/built/admin/assets/member-detail-BAq7gDaa.js +0 -1
  263. package/core/built/admin/assets/modals-ReORvWnu.js +0 -31
  264. package/core/built/admin/assets/newsletter-CJQvtHqN.js +0 -1
  265. package/core/built/admin/assets/newsletters-B3QQXfGT.js +0 -1
  266. package/core/built/admin/assets/nql-BsgFMd93.js +0 -1
  267. package/core/built/admin/assets/overview-CBfePxcr.js +0 -1
  268. package/core/built/admin/assets/post-analytics-header-Bmc9su6q.js +0 -1
  269. package/core/built/admin/assets/preferences-DJPfHEGu.js +0 -5
  270. package/core/built/admin/assets/profile-DqBQp-gT.js +0 -1
  271. package/core/built/admin/assets/select-C5_xEt5b.js +0 -1
  272. package/core/built/admin/assets/settings-BwiVIXau.js +0 -4
  273. package/core/built/admin/assets/social-urls-BQPFEk1_.js +0 -8
  274. package/core/built/admin/assets/textarea-Bjccvh_E.js +0 -1
  275. package/core/built/admin/assets/use-filter-params-Gpoq2E1L.js +0 -1
  276. package/core/built/admin/assets/web-jFYWCKDn.js +0 -2
  277. package/core/server/services/gifts/gift-repository.js +0 -2
  278. package/core/server/services/gifts/gift-repository.ts +0 -29
  279. package/core/server/services/route-settings/activation-bridge.js +0 -174
  280. package/core/server/services/route-settings/activation-bridge.ts +0 -250
@@ -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-DGzPJ_bO.js";import{o as r,s as i}from"./chart-helpers-fjQKRVyY.js";e();var a=t(),o=({children:e,className:t,...r})=>(0,a.jsx)(`div`,{className:n(`flex flex-col items-start gap-4 border-r border-border px-6 py-5 transition-all last:border-none`,t),...r,children:e}),s=({children:e,className:t,color:r,...i})=>(0,a.jsxs)(`div`,{className:n(`flex h-[22px] items-center gap-1.5 text-base font-medium text-muted-foreground [&_svg]:size-4`,t),...i,children:[r&&(0,a.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:r}}),e]}),c=({value:e,diffDirection:t,diffValue:n,diffTooltip:o})=>{let s=null;return t&&t!==`hidden`&&(s=t===`empty`?(0,a.jsx)(`div`,{className:`flex h-[22px] items-center px-1.5 text-xs leading-none font-medium`,"data-testid":`kpi-card-header-diff`,children:n}):(0,a.jsx)(r,{"data-testid":`kpi-card-header-diff`,direction:t,tooltip:o,value:n??``})),(0,a.jsx)(i,{trailing:s,value:e,valueTestId:`kpi-card-header-value`})};export{s as n,c as r,o as t};
1
+ import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{c as n}from"./dist-Cb5RSHSg.js";import{o as r,s as i}from"./chart-helpers-DV0FkdcD.js";e();var a=t(),o=({children:e,className:t,...r})=>(0,a.jsx)(`div`,{className:n(`flex flex-col items-start gap-4 border-r border-border px-6 py-5 transition-all last:border-none`,t),...r,children:e}),s=({children:e,className:t,color:r,...i})=>(0,a.jsxs)(`div`,{className:n(`flex h-[22px] items-center gap-1.5 text-base font-medium text-muted-foreground [&_svg]:size-4`,t),...i,children:[r&&(0,a.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:r}}),e]}),c=({value:e,diffDirection:t,diffValue:n,diffTooltip:o})=>{let s=null;return t&&t!==`hidden`&&(s=t===`empty`?(0,a.jsx)(`div`,{className:`flex h-[22px] items-center px-1.5 text-xs leading-none font-medium`,"data-testid":`kpi-card-header-diff`,children:n}):(0,a.jsx)(r,{"data-testid":`kpi-card-header-diff`,direction:t,tooltip:o,value:n??``})),(0,a.jsx)(i,{trailing:s,value:e,valueTestId:`kpi-card-header-value`})};export{s as n,c as r,o as t};
@@ -1 +1 @@
1
- import"./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-DGzPJ_bO.js";import{Ir as r}from"./index-BGG7NckO.js";e();var i=t(),a=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`flex flex-col`,t),...r,children:e}),o=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`flex h-[22px] items-center gap-1.5 text-base font-medium transition-all [&_svg]:size-4`,t,r.onClick&&`hover:cursor-pointer hover:text-black dark:hover:text-white`),...r,children:e}),s=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`mt-0.5 text-[26px] leading-none font-semibold tracking-tighter text-foreground`,t),...r,children:e}),c=({children:e,className:t,...a})=>(0,i.jsx)(r,{className:n(`absolute top-4 right-4 z-50 hidden translate-x-10 text-black opacity-0 transition-all duration-200 group-hover:translate-x-0 group-hover:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100 md:visible! md:block! dark:text-white/80 dark:hover:text-white`,t),size:`sm`,variant:`outline`,...a,children:e}),l=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`group relative isolate flex flex-col items-start gap-2 border-r border-border px-6 py-5 text-muted-foreground transition-all last:border-none`,r.onClick?`cursor-pointer hover:bg-accent/50 hover:text-foreground`:`cursor-auto`,t),...r,children:e});export{s as a,c as i,a as n,o as r,l as t};
1
+ import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{c as n}from"./dist-Cb5RSHSg.js";import{Ir as r}from"./index-08n05-rc.js";e();var i=t(),a=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`flex flex-col`,t),...r,children:e}),o=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`flex h-[22px] items-center gap-1.5 text-base font-medium transition-all [&_svg]:size-4`,t,r.onClick&&`hover:cursor-pointer hover:text-black dark:hover:text-white`),...r,children:e}),s=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`mt-0.5 text-[26px] leading-none font-semibold tracking-tighter text-foreground`,t),...r,children:e}),c=({children:e,className:t,...a})=>(0,i.jsx)(r,{className:n(`absolute top-4 right-4 z-50 hidden translate-x-10 text-black opacity-0 transition-all duration-200 group-hover:translate-x-0 group-hover:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100 md:visible! md:block! dark:text-white/80 dark:hover:text-white`,t),size:`sm`,variant:`outline`,...a,children:e}),l=({children:e,className:t,...r})=>(0,i.jsx)(`div`,{className:n(`group relative isolate flex flex-col items-start gap-2 border-r border-border px-6 py-5 text-muted-foreground transition-all last:border-none`,r.onClick?`cursor-pointer hover:bg-accent/50 hover:text-foreground`:`cursor-auto`,t),...r,children:e});export{s as a,c as i,a as n,o as r,l as t};
@@ -1 +1 @@
1
- import{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-BeaRxUn9.js";import{d as o,f as s,p as c}from"./dist-DGzPJ_bO.js";import{n as l}from"./chart-helpers-fjQKRVyY.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./card-DGoDJzrn.js";import{a as g,c as _,i as v,l as y,n as b,o as x,r as S,s as C,t as w,u as T}from"./data-list-16rkJYYi.js";import{Bn as E,Fn as D,In as O,Ir as k,Ln as A,Ps as j,Rn as M,aa as N,ar as P,ws as F,zn as I}from"./index-BGG7NckO.js";import{n as L}from"./post-analytics-context-D0Mw-Pmv.js";var R=e(t(),1),z=n(),B=`https://www.google.com/s2/favicons?domain=ghost.org&sz=64`,V=({dataTableHeader:e,data:t,defaultSourceIconUrl:n=B,onSourceClick:r})=>(0,z.jsxs)(w,{children:[e&&(0,z.jsxs)(g,{children:[(0,z.jsx)(v,{children:`Source`}),(0,z.jsx)(v,{children:`Visitors`})]}),(0,z.jsx)(S,{children:t?.map(e=>{let t=!!r,i=e.source?e.source.toLowerCase().replace(/[^a-z0-9]/g,`-`):`direct`;return(0,z.jsxs)(T,{className:`group/row ${t?`cursor-pointer`:``}`,"data-testid":`source-row-${i}`,onClick:t?()=>r(e.source):void 0,children:[(0,z.jsx)(b,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,z.jsx)(x,{className:`group-hover/datalist:max-w-[calc(100%-140px)]`,children:(0,z.jsx)(`div`,{className:`flex items-center space-x-4 overflow-hidden`,children:(0,z.jsx)(`div`,{className:`truncate font-medium`,children:e.linkUrl&&!r?(0,z.jsxs)(`a`,{className:`group/link flex items-center gap-2`,href:e.linkUrl,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{className:`group-hover/link:underline`,children:e.displayName})]}):(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{children:e.displayName})]})})})}),(0,z.jsxs)(C,{children:[(0,z.jsx)(_,{children:s(e.visits)}),(0,z.jsx)(y,{children:c(e.percentage||0)})]})]},e.source)})})]}),H=({data:e,range:t=30,totalVisitors:n=0,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s=B,tableOnly:c=!1,topSourcesLimit:g=10,onSourceClick:_})=>{let{isPostLoading:v}=L(),y=R.useMemo(()=>r({data:e,mode:`visits`,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s}),[e,a,o,s]),b=R.useMemo(()=>i({processedData:y,totalVisitors:n,mode:`visits`}),[y,n]),x=b.slice(0,g),S=`Top sources`,C=`How readers found this post ${t&&` ${l(t)}`}`;if(c){let e=b.slice(0,g),n=b.length>g;return(0,z.jsxs)(`div`,{children:[(0,z.jsx)(V,{data:e,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:_}),n&&(0,z.jsx)(`div`,{className:`mt-4`,children:(0,z.jsxs)(D,{children:[(0,z.jsx)(E,{asChild:!0,children:(0,z.jsxs)(k,{className:`w-full`,size:`sm`,variant:`outline`,children:[`View all (`,b.length,`) `,(0,z.jsx)(F,{size:14})]})}),(0,z.jsxs)(O,{className:`overflow-y-auto pt-0 sm:max-w-[480px]`,children:[(0,z.jsxs)(M,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(I,{children:S}),(0,z.jsx)(A,{children:C})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:b,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:_})})]})]})})]})}return(0,z.jsxs)(h,{className:`group/datalist`,"data-testid":`top-sources-card`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,z.jsxs)(u,{className:`p-0`,children:[(0,z.jsx)(p,{children:S}),(0,z.jsx)(m,{children:C})]}),(0,z.jsx)(j,{className:`mr-2`,children:`Visitors`})]}),(0,z.jsxs)(f,{className:`overflow-hidden`,children:[(0,z.jsx)(`div`,{className:`h-[1px] w-full bg-border`}),v?(0,z.jsx)(P,{lines:5}):x.length>0?(0,z.jsx)(V,{data:x,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:_}):(0,z.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`No sources data available.`})]}),b.length>10&&(0,z.jsx)(d,{children:(0,z.jsxs)(D,{children:[(0,z.jsx)(E,{asChild:!0,children:(0,z.jsxs)(k,{variant:`outline`,children:[`View all `,(0,z.jsx)(N,{})]})}),(0,z.jsxs)(O,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,z.jsxs)(M,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(I,{children:S}),(0,z.jsx)(A,{children:C})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:b,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:_})})]})]})})]})},U={visits:{dataKey:`visits`,label:`Visitors`,color:`var(--chart-blue)`,formatter:s},views:{dataKey:`pageviews`,label:`Pageviews`,color:`var(--chart-teal)`,formatter:s},"bounce-rate":{dataKey:`bounce_rate`,label:`Bounce rate`,color:`var(--chart-purple)`,formatter:c},duration:{dataKey:`avg_session_sec`,label:`Time on page`,color:`var(--chart-orange)`,formatter:o}},W=e=>{if(!e?.length)return{visits:`0`,views:`0`,bounceRate:`0%`,duration:`0s`};let t=e=>{let t=Number(e);return isNaN(t)?0:t},n=e.reduce((e,n)=>e+t(n.visits),0),r=e.reduce((e,n)=>e+t(n.pageviews),0),i=r=>n===0?0:e.reduce((e,i)=>e+t(i[r])*t(i.visits)/n,0),a=i(`bounce_rate`),l=i(`avg_session_sec`);return{visits:s(n),views:s(r),bounceRate:c(a),duration:o(l)}};export{U as n,H as r,W as t};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{i as r,n as i,t as a}from"./source-icon-ajoaKb41.js";import{d as o,f as s,p as c}from"./dist-Cb5RSHSg.js";import{n as l}from"./chart-helpers-DV0FkdcD.js";import{a as u,i as d,n as f,o as p,r as m,t as h}from"./card-aUHX0hyR.js";import{a as g,c as _,i as v,l as y,n as b,o as x,r as S,s as C,t as w,u as T}from"./data-list-CupF7bjM.js";import{Bn as E,Fn as D,Fs as O,In as k,Ir as A,Ln as j,Rn as M,Ts as N,ar as P,oa as F,zn as I}from"./index-08n05-rc.js";import{n as L}from"./post-analytics-context-D0Mw-Pmv.js";var R=e(t(),1),z=n(),B=`https://www.google.com/s2/favicons?domain=ghost.org&sz=64`,V=({dataTableHeader:e,data:t,defaultSourceIconUrl:n=B,onSourceClick:r})=>(0,z.jsxs)(w,{children:[e&&(0,z.jsxs)(g,{children:[(0,z.jsx)(v,{children:`Source`}),(0,z.jsx)(v,{children:`Visitors`})]}),(0,z.jsx)(S,{children:t?.map(e=>{let t=!!r,i=e.source?e.source.toLowerCase().replace(/[^a-z0-9]/g,`-`):`direct`;return(0,z.jsxs)(T,{className:`group/row ${t?`cursor-pointer`:``}`,"data-testid":`source-row-${i}`,onClick:t?()=>r(e.source):void 0,children:[(0,z.jsx)(b,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,z.jsx)(x,{className:`group-hover/datalist:max-w-[calc(100%-140px)]`,children:(0,z.jsx)(`div`,{className:`flex items-center space-x-4 overflow-hidden`,children:(0,z.jsx)(`div`,{className:`truncate font-medium`,children:e.linkUrl&&!r?(0,z.jsxs)(`a`,{className:`group/link flex items-center gap-2`,href:e.linkUrl,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{className:`group-hover/link:underline`,children:e.displayName})]}):(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(a,{defaultSourceIconUrl:n,displayName:e.displayName,iconSrc:e.iconSrc}),(0,z.jsx)(`span`,{children:e.displayName})]})})})}),(0,z.jsxs)(C,{children:[(0,z.jsx)(_,{children:s(e.visits)}),(0,z.jsx)(y,{children:c(e.percentage||0)})]})]},e.source)})})]}),H=({data:e,range:t=30,totalVisitors:n=0,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s=B,tableOnly:c=!1,topSourcesLimit:g=10,onSourceClick:_})=>{let{isPostLoading:v}=L(),y=R.useMemo(()=>r({data:e,mode:`visits`,siteUrl:a,siteIcon:o,defaultSourceIconUrl:s}),[e,a,o,s]),b=R.useMemo(()=>i({processedData:y,totalVisitors:n,mode:`visits`}),[y,n]),x=b.slice(0,g),S=`Top sources`,C=`How readers found this post ${t&&` ${l(t)}`}`;if(c){let e=b.slice(0,g),n=b.length>g;return(0,z.jsxs)(`div`,{children:[(0,z.jsx)(V,{data:e,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:_}),n&&(0,z.jsx)(`div`,{className:`mt-4`,children:(0,z.jsxs)(D,{children:[(0,z.jsx)(E,{asChild:!0,children:(0,z.jsxs)(A,{className:`w-full`,size:`sm`,variant:`outline`,children:[`View all (`,b.length,`) `,(0,z.jsx)(N,{size:14})]})}),(0,z.jsxs)(k,{className:`overflow-y-auto pt-0 sm:max-w-[480px]`,children:[(0,z.jsxs)(M,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(I,{children:S}),(0,z.jsx)(j,{children:C})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:b,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:_})})]})]})})]})}return(0,z.jsxs)(h,{className:`group/datalist`,"data-testid":`top-sources-card`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,z.jsxs)(u,{className:`p-0`,children:[(0,z.jsx)(p,{children:S}),(0,z.jsx)(m,{children:C})]}),(0,z.jsx)(O,{className:`mr-2`,children:`Visitors`})]}),(0,z.jsxs)(f,{className:`overflow-hidden`,children:[(0,z.jsx)(`div`,{className:`h-[1px] w-full bg-border`}),v?(0,z.jsx)(P,{lines:5}):x.length>0?(0,z.jsx)(V,{data:x,dataTableHeader:!1,defaultSourceIconUrl:s,range:t,onSourceClick:_}):(0,z.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`No sources data available.`})]}),b.length>10&&(0,z.jsx)(d,{children:(0,z.jsxs)(D,{children:[(0,z.jsx)(E,{asChild:!0,children:(0,z.jsxs)(A,{variant:`outline`,children:[`View all `,(0,z.jsx)(F,{})]})}),(0,z.jsxs)(k,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,z.jsxs)(M,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,z.jsx)(I,{children:S}),(0,z.jsx)(j,{children:C})]}),(0,z.jsx)(`div`,{className:`group/datalist`,children:(0,z.jsx)(V,{data:b,dataTableHeader:!0,defaultSourceIconUrl:s,range:t,onSourceClick:_})})]})]})})]})},U={visits:{dataKey:`visits`,label:`Visitors`,color:`var(--chart-blue)`,formatter:s},views:{dataKey:`pageviews`,label:`Pageviews`,color:`var(--chart-teal)`,formatter:s},"bounce-rate":{dataKey:`bounce_rate`,label:`Bounce rate`,color:`var(--chart-purple)`,formatter:c},duration:{dataKey:`avg_session_sec`,label:`Time on page`,color:`var(--chart-orange)`,formatter:o}},W=e=>{if(!e?.length)return{visits:`0`,views:`0`,bounceRate:`0%`,duration:`0s`};let t=e=>{let t=Number(e);return isNaN(t)?0:t},n=e.reduce((e,n)=>e+t(n.visits),0),r=e.reduce((e,n)=>e+t(n.pageviews),0),i=r=>n===0?0:e.reduce((e,i)=>e+t(i[r])*t(i.visits)/n,0),a=i(`bounce_rate`),l=i(`avg_session_sec`);return{visits:s(n),views:s(r),bounceRate:c(a),duration:o(l)}};export{U as n,H as r,W as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r}from"./dist-DGzPJ_bO.js";import{o as i,s as a}from"./chart-helpers-fjQKRVyY.js";import{i as o,n as s,r as c,t as l}from"./tabs-CCEgKYzq.js";import{Di as u,Ir as d}from"./index-BGG7NckO.js";var f=e(t(),1),p=n(),m=f.forwardRef(({...e},t)=>(0,p.jsx)(l,{ref:t,variant:`kpis`,...e}));m.displayName=`KpiTabs`;var h=f.forwardRef((e,t)=>(0,p.jsx)(c,{ref:t,...e}));h.displayName=`KpiTabsList`;var g=f.forwardRef((e,t)=>(0,p.jsx)(s,{ref:t,...e}));g.displayName=`KpiTabsContent`;var _=({children:e,...t})=>(0,p.jsx)(o,{className:`h-auto`,...t,children:e}),v=({color:e,icon:t,label:n,value:o,diffDirection:s,diffValue:c,className:l,"data-testid":d})=>{let f=t?u[t]:null,m=(0,p.jsxs)(`span`,{className:`flex items-center gap-1.5 transition-all group-hover:text-foreground`,"data-type":`value`,children:[e&&(0,p.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:e}}),f&&(0,p.jsx)(f,{size:16,strokeWidth:1.5}),n]}),h=s&&s!==`hidden`?(0,p.jsx)(i,{className:`mt-0.5`,"data-testid":d?`${d}-diff`:void 0,direction:s,value:c??``}):null;return(0,p.jsx)(a,{className:r(`group`,l),label:m,size:`lg`,trailing:h,value:o,valueTestId:d})},y=f.forwardRef(({variant:e=`dropdown`,className:t,...n},i)=>(0,p.jsx)(d,{ref:i,className:r(`h-auto w-full rounded-none border-x-0 border-t-0 bg-transparent py-5 focus-visible:ring-0`,t),variant:e,...n}));y.displayName=`KpiDropdownButton`;export{_ as n,v as r,y as t};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r}from"./dist-Cb5RSHSg.js";import{o as i,s as a}from"./chart-helpers-DV0FkdcD.js";import{i as o,n as s,r as c,t as l}from"./tabs-D4y1gqUd.js";import{Di as u,Ir as d}from"./index-08n05-rc.js";var f=e(t(),1),p=n(),m=f.forwardRef(({...e},t)=>(0,p.jsx)(l,{ref:t,variant:`kpis`,...e}));m.displayName=`KpiTabs`;var h=f.forwardRef((e,t)=>(0,p.jsx)(c,{ref:t,...e}));h.displayName=`KpiTabsList`;var g=f.forwardRef((e,t)=>(0,p.jsx)(s,{ref:t,...e}));g.displayName=`KpiTabsContent`;var _=({children:e,...t})=>(0,p.jsx)(o,{className:`h-auto`,...t,children:e}),v=({color:e,icon:t,label:n,value:o,diffDirection:s,diffValue:c,className:l,"data-testid":d})=>{let f=t?u[t]:null,m=(0,p.jsxs)(`span`,{className:`flex items-center gap-1.5 transition-all group-hover:text-foreground`,"data-type":`value`,children:[e&&(0,p.jsx)(`div`,{className:`ml-1 size-2 rounded-full opacity-50`,style:{backgroundColor:e}}),f&&(0,p.jsx)(f,{size:16,strokeWidth:1.5}),n]}),h=s&&s!==`hidden`?(0,p.jsx)(i,{className:`mt-0.5`,"data-testid":d?`${d}-diff`:void 0,direction:s,value:c??``}):null;return(0,p.jsx)(a,{className:r(`group`,l),label:m,size:`lg`,trailing:h,value:o,valueTestId:d})},y=f.forwardRef(({variant:e=`dropdown`,className:t,...n},i)=>(0,p.jsx)(d,{ref:i,className:r(`h-auto w-full rounded-none border-x-0 border-t-0 bg-transparent py-5 focus-visible:ring-0`,t),variant:e,...n}));y.displayName=`KpiDropdownButton`;export{_ as n,v as r,y as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r,o as i}from"./dist-DGzPJ_bO.js";import{Yn as a}from"./index-BGG7NckO.js";var o=e(t(),1),s=n(),c=i(`text-control leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70`),l=o.forwardRef(({className:e,...t},n)=>(0,s.jsx)(a,{ref:n,className:r(c(),e),...t}));l.displayName=a.displayName;export{l as t};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r,o as i}from"./dist-Cb5RSHSg.js";import{Yn as a}from"./index-08n05-rc.js";var o=e(t(),1),s=n(),c=i(`text-control leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70`),l=o.forwardRef(({className:e,...t},n)=>(0,s.jsx)(a,{ref:n,className:r(c(),e),...t}));l.displayName=a.displayName;export{l as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{h as r,m as i,x as a}from"./hooks-CixO01lL.js";import{a as o,c as s,i as c,n as l,s as u}from"./switch-z5Y6Uzt6.js";import{f as d}from"./member-custom-fields-yOMHyAg9.js";import{Da as f,Ir as p,Pa as m,Zn as h,gr as g,ki as _,rs as v,vr as y,yr as b}from"./index-BGG7NckO.js";import{a as x,i as S,n as C,o as w,r as T}from"./labels-CDSUt4J_.js";import{i as E}from"./filter-sources-BV2rnpfA.js";var D=e(t(),1),O=n(),k=({label:e,onSave:t,onCancel:n,onDelete:r})=>{let[i,o]=(0,D.useState)(e.name),[s,c]=(0,D.useState)(!1),[l,u]=(0,D.useState)(``),[d,f]=(0,D.useState)(!1),[m,h]=(0,D.useState)(!1),g=(0,D.useRef)(null),_=d||m;(0,D.useEffect)(()=>{g.current?.focus(),g.current?.select()},[]);let v=async()=>{if(!i.trim()){u(`Name is required`);return}f(!0);try{await t(e.id,i.trim()),n()}catch(e){u(a(e,`Failed to save label, please try again.`)),f(!1)}},y=e=>{e.key===`Enter`?(e.preventDefault(),v()):e.key===`Escape`&&(e.preventDefault(),_||n())},b=async()=>{h(!0);try{await r(e.id)}catch{h(!1),c(!1)}};return(0,O.jsxs)(`div`,{className:`flex flex-col gap-2 py-1.5`,"data-edit-row":!0,children:[(0,O.jsx)(`input`,{ref:g,className:`h-7 w-full rounded border border-border bg-background px-2 text-sm outline-hidden focus:ring-1 focus:ring-ring disabled:opacity-50`,disabled:_,type:`text`,value:i,onChange:e=>{o(e.target.value),u(``)},onKeyDown:y}),l&&(0,O.jsx)(`span`,{className:`text-xs text-destructive`,children:l}),s?(0,O.jsxs)(`div`,{className:`flex items-center gap-1 text-sm`,children:[(0,O.jsx)(`span`,{className:`flex-1 font-semibold`,children:`Delete label?`}),(0,O.jsx)(p,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,O.jsx)(p,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`destructive`,onClick:()=>void b(),children:m?`Deleting...`:`Delete`})]}):(0,O.jsxs)(`div`,{className:`flex items-center`,children:[(0,O.jsx)(p,{className:`h-6 gap-1 px-1.5 text-xs text-red hover:bg-red/5 hover:text-red`,disabled:_,size:`sm`,variant:`ghost`,onClick:()=>c(!0),children:`Delete`}),(0,O.jsxs)(`div`,{className:`ml-auto flex gap-1`,children:[(0,O.jsx)(p,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:n,children:`Cancel`}),(0,O.jsx)(p,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,onClick:()=>void v(),children:d?`Saving...`:`Save`})]})]})]})};function A(e,t){let n=t.trim().toLowerCase();return n?!e.some(e=>e.name.toLowerCase()===n):!1}var j=({label:e,isSelected:t,showEdit:n,onToggle:r,onEditClick:i})=>(0,O.jsxs)(u,{className:`group`,value:e.slug,onSelect:()=>r(e.slug),children:[(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.name}),n?(0,O.jsxs)(`button`,{"aria-label":`Edit label ${e.name}`,className:`relative ml-1 flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground`,type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),i()},children:[t&&(0,O.jsx)(v,{className:`absolute size-3 text-primary transition-opacity duration-150 group-hover:opacity-0`}),(0,O.jsx)(m,{className:`absolute size-3 translate-x-2 opacity-0 transition-all duration-150 ease-out group-hover:translate-x-0 group-hover:opacity-100`})]}):t&&(0,O.jsx)(v,{className:`size-4 shrink-0 text-primary`})]}),M=({labels:e,selectedSlugs:t,search:n,onToggle:r,onEdit:i,onDelete:a,onCreate:s,isCreating:l,onSearchClear:d})=>{let[p,m]=(0,D.useState)(null),h=n.trim().toLowerCase(),g=h?e.filter(e=>e.name.toLowerCase().includes(h)):e,_=!!s&&A(e,n),v=!!i,y=async()=>{if(s)try{await s(n.trim())&&d?.()}catch{}},b=async(e,t)=>{i&&await i(e,t)},x=async e=>{a&&(await a(e),m(null))};return(0,O.jsxs)(O.Fragment,{children:[!_&&g.length===0&&(0,O.jsx)(c,{children:`No labels found`}),g.length>0&&(0,O.jsx)(o,{className:`[&_[cmdk-group-heading]]:hidden`,children:g.map(e=>p===e.id?(0,O.jsx)(k,{label:e,onCancel:()=>m(null),onDelete:x,onSave:b},e.id):(0,O.jsx)(j,{isSelected:t.includes(e.slug),label:e,showEdit:v,onEditClick:()=>m(e.id),onToggle:r},e.id))}),_&&(0,O.jsx)(o,{className:`[&_[cmdk-group-heading]]:hidden`,children:(0,O.jsxs)(u,{disabled:l,onSelect:()=>void y(),children:[(0,O.jsx)(f,{className:`size-4`}),l?`Creating...`:`Create "${n.trim()}"`]})})]})},N=({labels:e,onToggle:t})=>(0,O.jsx)(O.Fragment,{children:e.map(e=>(0,O.jsxs)(h,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:n=>{n.stopPropagation(),t(e.slug)},children:[e.name,(0,O.jsx)(_,{className:`size-3`})]},e.id))}),P=({labels:e,optionSource:t,selectedSlugs:n,resolvedSelectedLabels:r,onToggle:i,onCreate:a,isCreating:o,onEdit:s,onDelete:c,placeholder:l})=>{let u=r||n.map(t=>e.find(e=>e.slug===t)).filter(e=>!!e);return(0,O.jsx)(F,{isCreating:o,labels:e,optionSource:t,placeholder:l,selectedLabels:u,selectedSlugs:n,onCreate:a,onDelete:c,onEdit:s,onToggle:i})},F=({labels:e,optionSource:t,selectedLabels:n,selectedSlugs:r,onToggle:i,onCreate:a,isCreating:o,onEdit:c,onDelete:u,placeholder:d=`Search labels...`})=>{let[f,p]=(0,D.useState)(!1),[m,h]=(0,D.useState)(``),g=(0,D.useRef)(null),_=(0,D.useRef)(null),v=(0,D.useCallback)(e=>{h(e),t.onSearchChange?.(e)},[t]);return(0,D.useEffect)(()=>{if(!f)return;let e=e=>{_.current&&!_.current.contains(e.target)&&p(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[f]),(0,O.jsxs)(`div`,{ref:_,className:`relative`,children:[(0,O.jsxs)(`div`,{className:`flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-md border border-control-border bg-surface-elevated px-3 py-1 text-control transition-colors focus-within:border-focus-ring focus-within:ring-2 focus-within:ring-focus-ring/25 dark:bg-transparent`,role:`combobox`,onClick:()=>{g.current?.focus(),p(!0)},children:[(0,O.jsx)(N,{labels:n,onToggle:i}),(0,O.jsx)(`input`,{ref:g,className:`min-w-[80px] flex-1 bg-transparent text-control outline-hidden placeholder:text-muted-foreground`,placeholder:n.length===0?d:``,value:m,onChange:e=>{v(e.target.value),f||p(!0)},onFocus:()=>p(!0),onKeyDown:e=>{e.key===`Backspace`&&!m&&r.length>0&&i(r[r.length-1]),e.key===`Escape`&&(p(!1),g.current?.blur())}})]}),f&&(0,O.jsx)(`div`,{className:`absolute top-full left-0 z-50 mt-1 w-full rounded-md border bg-white shadow-md dark:bg-gray-950`,children:t.isInitialLoad?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,O.jsx)(l,{shouldFilter:!1,children:(0,O.jsx)(s,{className:`max-h-64 overflow-y-auto`,children:(0,O.jsx)(M,{isCreating:o,labels:e,search:m,selectedSlugs:r,onCreate:a,onDelete:u,onEdit:c,onSearchClear:()=>v(``),onToggle:i})})})})]})};function I({selectedSlugs:e,onSelectionChange:t,valueSource:n}){let a=E(),o=n??a,[s,c]=(0,D.useState)(``),l=o.useOptions({query:s,selectedValues:e}),u=(0,D.useMemo)(()=>l.options.flatMap(e=>{let t=e.metadata?.id;return typeof t!=`string`&&typeof t!=`number`?[]:[{id:String(t),name:e.label,slug:String(e.value),created_at:``,updated_at:``}]}),[l.options]),d={...l,shouldClientFilter:!1,onSearchChange:c},{mutateAsync:f}=C(),[p,m]=(0,D.useState)(!1),{mutateAsync:h}=S(),{mutateAsync:g}=T(),_=x(),v=w(),y=i(),b=(0,D.useRef)(e);b.current=e;let O=(0,D.useCallback)(e=>{let n=b.current;n.includes(e)?t(n.filter(t=>t!==e)):t([...n,e])},[t]),k=(0,D.useCallback)(e=>{let n=b.current;n.includes(e)||t([...n,e])},[t]),A=(0,D.useCallback)(async e=>{let t=e.trim();if(t){m(!0);try{let e=(await f({name:t}))?.labels?.[0];return e&&k(e.slug),e}catch(e){if(e instanceof r&&e.response?.status===422){let e;try{e=await _(t)}catch{}if(e)return v(),k(e.slug),e}throw y(e),e}finally{m(!1)}}},[f,_,y,v,k]),j=(0,D.useCallback)(async(e,n)=>{let r=n.trim();if(!r)return;let i=u.find(t=>t.id===e),a=(await h({id:e,name:r}))?.labels?.[0];if(i&&a&&i.slug!==a.slug){let e=b.current;e.includes(i.slug)&&t(e.map(e=>e===i.slug?a.slug:e))}},[h,u,t]),M=(0,D.useCallback)(async e=>{let n=u.find(t=>t.id===e);try{await g(e)}catch(e){if(e instanceof 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:O,createLabel:A,editLabel:j,deleteLabel:M,isCreating:p}}var L=({field:e,values:t,onChange:n})=>{let r=I({selectedSlugs:t,onSelectionChange:n,valueSource:e.valueSource}),i=(0,D.useRef)(null),[a,o]=(0,D.useState)(0),s=(0,D.useCallback)(()=>{let e=i.current,t=e?.parentElement;if(e&&t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();o(Math.round(r.left-n.left))}},[]),c=`Select...`;r.resolvedSelectedLabels.length===1?c=r.resolvedSelectedLabels[0].name:r.resolvedSelectedLabels.length>1&&(c=`${r.resolvedSelectedLabels.length} labels`);let[l,h]=(0,D.useState)(null),_=(0,D.useCallback)(({option:e,isSelected:t,onSelect:n})=>{let i=e.metadata?.id,a=typeof i==`string`||typeof i==`number`?String(i):``;return l===a&&!t?(0,O.jsx)(k,{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,O.jsxs)(u,{className:`group`,value:e.label,onSelect:n,children:[(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),t?(0,O.jsx)(v,{className:`size-3 shrink-0 text-primary`}):(0,O.jsx)(`button`,{"aria-label":`Edit label ${e.label}`,className:`relative ml-1 flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground`,type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),h(a)},children:(0,O.jsx)(m,{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))},[l,r]),x=(0,D.useCallback)(({searchInput:e,clearSearch:t})=>A(r.labels,e)?(0,O.jsx)(`div`,{className:`border-t p-1`,children:(0,O.jsxs)(p,{className:`h-8 w-full justify-start gap-2 px-2 text-sm font-normal`,disabled:r.isCreating,variant:`ghost`,onClick:()=>void(async()=>{try{await r.createLabel(e.trim())&&t()}catch{}})(),children:[(0,O.jsx)(f,{className:`size-4`}),r.isCreating?`Creating...`:`Create "${e.trim()}"`]})}):null,[r]);return(0,O.jsxs)(g,{onOpenChange:e=>{e?s():r.optionSource.onSearchChange?.(``)},children:[(0,O.jsx)(b,{asChild:!0,children:(0,O.jsx)(`button`,{ref:i,className:`flex size-full items-center truncate text-left text-sm`,type:`button`,children:c})}),(0,O.jsx)(y,{align:`start`,alignOffset:a,className:`w-64 p-0`,children:r.optionSource.isInitialLoad?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,O.jsx)(d,{footer:x,i18n:{searchPlaceholder:`Search labels...`,noResultsFound:`No labels found`},optionSource:r.optionSource,renderItem:_,values:t,onChange:n})})]})};export{I as n,P as r,L as t};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{h as r,m as i,x as a}from"./hooks-CixO01lL.js";import{a as o,c as s,i as c,n as l,s as u}from"./switch-CyQcwMAv.js";import{f as d}from"./member-custom-fields-C8NpZYza.js";import{Fa as f,Ir as p,Oa as m,Zn as h,gr as g,is as _,ki as v,vr as y,yr as b}from"./index-08n05-rc.js";import{a as x,i as S,n as C,o as w,r as T}from"./labels-DAIqKed7.js";import{i as E}from"./filter-sources-LdtH1e-T.js";var D=e(t(),1),O=n(),k=({label:e,onSave:t,onCancel:n,onDelete:r})=>{let[i,o]=(0,D.useState)(e.name),[s,c]=(0,D.useState)(!1),[l,u]=(0,D.useState)(``),[d,f]=(0,D.useState)(!1),[m,h]=(0,D.useState)(!1),g=(0,D.useRef)(null),_=d||m;(0,D.useEffect)(()=>{g.current?.focus(),g.current?.select()},[]);let v=async()=>{if(!i.trim()){u(`Name is required`);return}f(!0);try{await t(e.id,i.trim()),n()}catch(e){u(a(e,`Failed to save label, please try again.`)),f(!1)}},y=e=>{e.key===`Enter`?(e.preventDefault(),v()):e.key===`Escape`&&(e.preventDefault(),_||n())},b=async()=>{h(!0);try{await r(e.id)}catch{h(!1),c(!1)}};return(0,O.jsxs)(`div`,{className:`flex flex-col gap-2 py-1.5`,"data-edit-row":!0,children:[(0,O.jsx)(`input`,{ref:g,className:`h-7 w-full rounded border border-border bg-background px-2 text-sm outline-hidden focus:ring-1 focus:ring-ring disabled:opacity-50`,disabled:_,type:`text`,value:i,onChange:e=>{o(e.target.value),u(``)},onKeyDown:y}),l&&(0,O.jsx)(`span`,{className:`text-xs text-destructive`,children:l}),s?(0,O.jsxs)(`div`,{className:`flex items-center gap-1 text-sm`,children:[(0,O.jsx)(`span`,{className:`flex-1 font-semibold`,children:`Delete label?`}),(0,O.jsx)(p,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:()=>c(!1),children:`Cancel`}),(0,O.jsx)(p,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`destructive`,onClick:()=>void b(),children:m?`Deleting...`:`Delete`})]}):(0,O.jsxs)(`div`,{className:`flex items-center`,children:[(0,O.jsx)(p,{className:`h-6 gap-1 px-1.5 text-xs text-red hover:bg-red/5 hover:text-red`,disabled:_,size:`sm`,variant:`ghost`,onClick:()=>c(!0),children:`Delete`}),(0,O.jsxs)(`div`,{className:`ml-auto flex gap-1`,children:[(0,O.jsx)(p,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,variant:`outline`,onClick:n,children:`Cancel`}),(0,O.jsx)(p,{className:`h-6 px-2 text-xs`,disabled:_,size:`sm`,onClick:()=>void v(),children:d?`Saving...`:`Save`})]})]})]})};function A(e,t){let n=t.trim().toLowerCase();return n?!e.some(e=>e.name.toLowerCase()===n):!1}var j=({label:e,isSelected:t,showEdit:n,onToggle:r,onEditClick:i})=>(0,O.jsxs)(u,{className:`group`,value:e.slug,onSelect:()=>r(e.slug),children:[(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.name}),n?(0,O.jsxs)(`button`,{"aria-label":`Edit label ${e.name}`,className:`relative ml-1 flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground`,type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),i()},children:[t&&(0,O.jsx)(_,{className:`absolute size-3 text-primary transition-opacity duration-150 group-hover:opacity-0`}),(0,O.jsx)(f,{className:`absolute size-3 translate-x-2 opacity-0 transition-all duration-150 ease-out group-hover:translate-x-0 group-hover:opacity-100`})]}):t&&(0,O.jsx)(_,{className:`size-4 shrink-0 text-primary`})]}),M=({labels:e,selectedSlugs:t,search:n,onToggle:r,onEdit:i,onDelete:a,onCreate:s,isCreating:l,onSearchClear:d})=>{let[f,p]=(0,D.useState)(null),h=n.trim().toLowerCase(),g=h?e.filter(e=>e.name.toLowerCase().includes(h)):e,_=!!s&&A(e,n),v=!!i,y=async()=>{if(s)try{await s(n.trim())&&d?.()}catch{}},b=async(e,t)=>{i&&await i(e,t)},x=async e=>{a&&(await a(e),p(null))};return(0,O.jsxs)(O.Fragment,{children:[!_&&g.length===0&&(0,O.jsx)(c,{children:`No labels found`}),g.length>0&&(0,O.jsx)(o,{className:`[&_[cmdk-group-heading]]:hidden`,children:g.map(e=>f===e.id?(0,O.jsx)(k,{label:e,onCancel:()=>p(null),onDelete:x,onSave:b},e.id):(0,O.jsx)(j,{isSelected:t.includes(e.slug),label:e,showEdit:v,onEditClick:()=>p(e.id),onToggle:r},e.id))}),_&&(0,O.jsx)(o,{className:`[&_[cmdk-group-heading]]:hidden`,children:(0,O.jsxs)(u,{disabled:l,onSelect:()=>void y(),children:[(0,O.jsx)(m,{className:`size-4`}),l?`Creating...`:`Create "${n.trim()}"`]})})]})},N=({labels:e,onToggle:t})=>(0,O.jsx)(O.Fragment,{children:e.map(e=>(0,O.jsxs)(h,{className:`cursor-pointer gap-1 pr-1`,variant:`outline`,onClick:n=>{n.stopPropagation(),t(e.slug)},children:[e.name,(0,O.jsx)(v,{className:`size-3`})]},e.id))}),P=({labels:e,optionSource:t,selectedSlugs:n,resolvedSelectedLabels:r,onToggle:i,onCreate:a,isCreating:o,onEdit:s,onDelete:c,placeholder:l})=>{let u=r||n.map(t=>e.find(e=>e.slug===t)).filter(e=>!!e);return(0,O.jsx)(F,{isCreating:o,labels:e,optionSource:t,placeholder:l,selectedLabels:u,selectedSlugs:n,onCreate:a,onDelete:c,onEdit:s,onToggle:i})},F=({labels:e,optionSource:t,selectedLabels:n,selectedSlugs:r,onToggle:i,onCreate:a,isCreating:o,onEdit:c,onDelete:u,placeholder:d=`Search labels...`})=>{let[f,p]=(0,D.useState)(!1),[m,h]=(0,D.useState)(``),g=(0,D.useRef)(null),_=(0,D.useRef)(null),v=(0,D.useCallback)(e=>{h(e),t.onSearchChange?.(e)},[t]);return(0,D.useEffect)(()=>{if(!f)return;let e=e=>{_.current&&!_.current.contains(e.target)&&p(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[f]),(0,O.jsxs)(`div`,{ref:_,className:`relative`,children:[(0,O.jsxs)(`div`,{className:`flex min-h-9 w-full cursor-text flex-wrap items-center gap-1.5 rounded-md border border-control-border bg-surface-elevated px-3 py-1 text-control transition-colors focus-within:border-focus-ring focus-within:ring-2 focus-within:ring-focus-ring/25 dark:bg-transparent`,role:`combobox`,onClick:()=>{g.current?.focus(),p(!0)},children:[(0,O.jsx)(N,{labels:n,onToggle:i}),(0,O.jsx)(`input`,{ref:g,className:`min-w-[80px] flex-1 bg-transparent text-control outline-hidden placeholder:text-muted-foreground`,placeholder:n.length===0?d:``,value:m,onChange:e=>{v(e.target.value),f||p(!0)},onFocus:()=>p(!0),onKeyDown:e=>{e.key===`Backspace`&&!m&&r.length>0&&i(r[r.length-1]),e.key===`Escape`&&(p(!1),g.current?.blur())}})]}),f&&(0,O.jsx)(`div`,{className:`absolute top-full left-0 z-50 mt-1 w-full rounded-md border bg-white shadow-md dark:bg-gray-950`,children:t.isInitialLoad?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,O.jsx)(l,{shouldFilter:!1,children:(0,O.jsx)(s,{className:`max-h-64 overflow-y-auto`,children:(0,O.jsx)(M,{isCreating:o,labels:e,search:m,selectedSlugs:r,onCreate:a,onDelete:u,onEdit:c,onSearchClear:()=>v(``),onToggle:i})})})})]})};function I({selectedSlugs:e,onSelectionChange:t,valueSource:n}){let a=E(),o=n??a,[s,c]=(0,D.useState)(``),l=o.useOptions({query:s,selectedValues:e}),u=(0,D.useMemo)(()=>l.options.flatMap(e=>{let t=e.metadata?.id;return typeof t!=`string`&&typeof t!=`number`?[]:[{id:String(t),name:e.label,slug:String(e.value),created_at:``,updated_at:``}]}),[l.options]),d={...l,shouldClientFilter:!1,onSearchChange:c},{mutateAsync:f}=C(),[p,m]=(0,D.useState)(!1),{mutateAsync:h}=S(),{mutateAsync:g}=T(),_=x(),v=w(),y=i(),b=(0,D.useRef)(e);b.current=e;let O=(0,D.useCallback)(e=>{let n=b.current;n.includes(e)?t(n.filter(t=>t!==e)):t([...n,e])},[t]),k=(0,D.useCallback)(e=>{let n=b.current;n.includes(e)||t([...n,e])},[t]),A=(0,D.useCallback)(async e=>{let t=e.trim();if(t){m(!0);try{let e=(await f({name:t}))?.labels?.[0];return e&&k(e.slug),e}catch(e){if(e instanceof r&&e.response?.status===422){let e;try{e=await _(t)}catch{}if(e)return v(),k(e.slug),e}throw y(e),e}finally{m(!1)}}},[f,_,y,v,k]),j=(0,D.useCallback)(async(e,n)=>{let r=n.trim();if(!r)return;let i=u.find(t=>t.id===e),a=(await h({id:e,name:r}))?.labels?.[0];if(i&&a&&i.slug!==a.slug){let e=b.current;e.includes(i.slug)&&t(e.map(e=>e===i.slug?a.slug:e))}},[h,u,t]),M=(0,D.useCallback)(async e=>{let n=u.find(t=>t.id===e);try{await g(e)}catch(e){if(e instanceof 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:O,createLabel:A,editLabel:j,deleteLabel:M,isCreating:p}}var L=({field:e,values:t,onChange:n})=>{let r=I({selectedSlugs:t,onSelectionChange:n,valueSource:e.valueSource}),i=(0,D.useRef)(null),[a,o]=(0,D.useState)(0),s=(0,D.useCallback)(()=>{let e=i.current,t=e?.parentElement;if(e&&t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();o(Math.round(r.left-n.left))}},[]),c=`Select...`;r.resolvedSelectedLabels.length===1?c=r.resolvedSelectedLabels[0].name:r.resolvedSelectedLabels.length>1&&(c=`${r.resolvedSelectedLabels.length} labels`);let[l,h]=(0,D.useState)(null),v=(0,D.useCallback)(({option:e,isSelected:t,onSelect:n})=>{let i=e.metadata?.id,a=typeof i==`string`||typeof i==`number`?String(i):``;return l===a&&!t?(0,O.jsx)(k,{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,O.jsxs)(u,{className:`group`,value:e.label,onSelect:n,children:[(0,O.jsx)(`span`,{className:`flex-1 truncate`,children:e.label}),t?(0,O.jsx)(_,{className:`size-3 shrink-0 text-primary`}):(0,O.jsx)(`button`,{"aria-label":`Edit label ${e.label}`,className:`relative ml-1 flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:text-foreground`,type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),h(a)},children:(0,O.jsx)(f,{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))},[l,r]),x=(0,D.useCallback)(({searchInput:e,clearSearch:t})=>A(r.labels,e)?(0,O.jsx)(`div`,{className:`border-t p-1`,children:(0,O.jsxs)(p,{className:`h-8 w-full justify-start gap-2 px-2 text-sm font-normal`,disabled:r.isCreating,variant:`ghost`,onClick:()=>void(async()=>{try{await r.createLabel(e.trim())&&t()}catch{}})(),children:[(0,O.jsx)(m,{className:`size-4`}),r.isCreating?`Creating...`:`Create "${e.trim()}"`]})}):null,[r]);return(0,O.jsxs)(g,{onOpenChange:e=>{e?s():r.optionSource.onSearchChange?.(``)},children:[(0,O.jsx)(b,{asChild:!0,children:(0,O.jsx)(`button`,{ref:i,className:`flex size-full items-center truncate text-left text-sm`,type:`button`,children:c})}),(0,O.jsx)(y,{align:`start`,alignOffset:a,className:`w-64 p-0`,children:r.optionSource.isInitialLoad?(0,O.jsx)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:`Loading labels...`}):(0,O.jsx)(d,{footer:x,i18n:{searchPlaceholder:`Search labels...`,noResultsFound:`No labels found`},optionSource:r.optionSource,renderItem:v,values:t,onChange:n})})]})};export{I as n,P 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{o as n}from"./framework-provider-CmtnPXIT.js";import{c as r,i,l as a,n as o,r as s,t as c}from"./hooks-CixO01lL.js";import{t as l}from"./build-CsiH26uS.js";var u=e(t(),1),d=`LabelsResponseType`;s({dataType:d,path:`/labels/`});var f=c({dataType:d,path:`/labels/`,defaultNextPageParams:(e,t)=>{if(e.meta?.pagination.next)return{...t,page:e.meta.pagination.next.toString()}},returnData:e=>{let{pages:t}=e,n=t.flatMap(e=>e.labels),r=t[t.length-1].meta;return{labels:n,meta:r,isEnd:r?r.pagination.pages===r.pagination.page:!0}}});i({dataType:d,path:e=>`/labels/slug/${e}/`});var p=o({method:`POST`,path:()=>`/labels/`,body:e=>({labels:[e]}),invalidateQueries:{dataType:d}}),m=()=>{let e=a();return(0,u.useCallback)(async t=>(await e(r(`/labels/`,{filter:`name:${l(t)}`,limit:`1`}))).labels?.[0],[e])},h=()=>{let e=n();return(0,u.useCallback)(()=>{e.invalidateQueries({queryKey:[d]})},[e])},g=o({method:`PUT`,path:e=>`/labels/${e.id}/`,body:e=>({labels:[e]}),invalidateQueries:{dataType:d}}),_=o({method:`DELETE`,path:e=>`/labels/${e}/`,invalidateQueries:{dataType:d}});export{m as a,g as i,p as n,h as o,_ as r,f as t};
@@ -0,0 +1 @@
1
+ import"./index-08n05-rc.js";
@@ -0,0 +1 @@
1
+ import{t as e}from"./jsx-runtime-DX3WBWVO.js";import{n as t,r as n}from"./hooks-CixO01lL.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 +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-DGzPJ_bO.js";import{t as r}from"./stack-xiN0eQ6Z.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{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};
@@ -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,r as a}from"./hooks-CixO01lL.js";import{c as o}from"./dist-Cb5RSHSg.js";import{a as s,c,i as l,l as u,n as d,o as f,s as p}from"./switch-CyQcwMAv.js";import{co as m,gn as h,is as g,ln as _,mn as v,un as y}from"./index-08n05-rc.js";var b=e(t(),1),x=n(),S={searchPlaceholder:`Search...`,noResultsFound:`No results found.`,loading:`Loading...`,loadMore:`Load more`};function C(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.label.toLowerCase().includes(n)||e.detail?.toLowerCase().includes(n)):e}function w(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 T({optionSource:e,options:t,values:n,onChange:r,valueSource:i,searchable:a=!0,isLoading:h=!1,maxSelections:_,isMultiSelect:v=!0,onClose:y,autoCloseOnSelect:T=!1,className:E,searchInputClassName:D,shouldFilter:O,onSearchChange:k,i18n:A,renderItem:j,groupBy:M,header:N,footer:P}){let F=(0,b.useMemo)(()=>({...S,...A}),[A]),[I,L]=(0,b.useState)(``),R=(0,b.useCallback)(t=>{L(t),e?.onSearchChange?.(t),k?.(t)},[k,e]),z=w(e,i,t,I,n,h,O),B=z.options,[V,H]=(0,b.useState)([]),U=(0,b.useMemo)(()=>B.filter(e=>n.includes(e.value)),[B,n]);(0,b.useEffect)(()=>{if(n.length===0){H([]);return}U.length>0&&H(e=>{let t=[];for(let r of n){let n=U.find(e=>e.value===r)??e.find(e=>e.value===r);n&&t.push(n)}return t})},[U,n]);let W=(0,b.useMemo)(()=>n.length===0?[]:V.length>0?V:U,[V,n.length,U]),G=(0,b.useMemo)(()=>C(W,I),[I,W]),K=(0,b.useMemo)(()=>B.filter(e=>!n.includes(e.value)),[B,n]),q=(0,b.useMemo)(()=>{let e=new Map;for(let t of K){let n=M?.(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}))},[M,K]),J=(0,b.useCallback)(e=>{r(n.filter(t=>t!==e.value))},[r,n]),Y=e=>{r([]),y?.()},X=e=>{let t=[...n,e.value];_&&t.length>_||(r(t),T&&y?.())},Z=e=>{r([e.value]),y?.()},Q=v?J:Y,ee=v?X:Z,te=(0,b.useCallback)(()=>R(``),[R]),ne=(e,t)=>{if(t)return;let n=e.detail?` - ${e.detail}`:``;return e.label+n},$=j??(({option:e,isSelected:t,onSelect:n})=>(0,x.jsxs)(p,{className:`group flex items-center gap-2`,value:ne(e,t),onSelect:n,children:[e.icon,(0,x.jsxs)(`div`,{className:`flex flex-col overflow-hidden`,children:[(0,x.jsx)(`span`,{className:`truncate text-accent-foreground`,title:e.label,children:e.label}),e.detail&&(0,x.jsx)(`span`,{className:`truncate text-sm text-muted-foreground`,title:e.detail,children:e.detail})]}),(0,x.jsx)(g,{className:o(`ms-auto text-primary`,!t&&`opacity-0`)})]},String(e.value)));return(0,x.jsx)(`div`,{className:o(`w-full`,E),children:(0,x.jsxs)(d,{shouldFilter:z.shouldClientFilter,children:[N?.({selectedOptions:W,onDeselect:J}),a&&(0,x.jsxs)(`div`,{className:`relative`,children:[(0,x.jsx)(f,{className:o(`h-(--control-height) pr-8`,D),placeholder:F.searchPlaceholder,value:I,onValueChange:R}),z.isSearching&&(0,x.jsx)(m,{className:`pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 animate-spin text-muted-foreground`})]}),(0,x.jsxs)(c,{className:`outline-hidden`,children:[z.isInitialLoad?(0,x.jsxs)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:[(0,x.jsx)(m,{className:`mr-2 size-4 animate-spin`}),F.loading]}):(0,x.jsx)(l,{children:F.noResultsFound}),G.length>0&&(0,x.jsx)(s,{heading:F.selectedHeading,children:G.map(e=>$({option:e,isSelected:!0,onSelect:()=>Q(e)}))}),K.length>0&&(0,x.jsxs)(x.Fragment,{children:[G.length>0&&(0,x.jsx)(u,{}),q.map(e=>(0,x.jsx)(s,{heading:e.label,children:e.options.map(e=>$({option:e,isSelected:!1,onSelect:()=>ee(e)}))},e.key===void 0?`ungrouped`:`group:${e.key}`))]}),z.hasMore&&(0,x.jsxs)(x.Fragment,{children:[(G.length>0||K.length>0)&&(0,x.jsx)(u,{}),(0,x.jsx)(`div`,{className:`p-1.5`,children:(0,x.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:z.isLoadingMore,type:`button`,onClick:z.loadMore,children:[z.isLoadingMore&&(0,x.jsx)(m,{className:`mr-2 size-4 animate-spin`}),z.isLoadingMore?F.loading:F.loadMore]})})]})]}),P?.({searchInput:I,clearSearch:te})]})})}var E=[`short_text`,`long_text`,`address`];y(E);var D=65535,O=e=>new TextEncoder().encode(e).length,k=v({line1:h().trim().max(255).optional(),line2:h().trim().max(255).optional(),city:h().trim().max(255).optional(),state:h().trim().max(255).optional(),postal_code:h().trim().max(32).optional(),country:h().trim().regex(/^[A-Za-z]{2}$/).toUpperCase().optional()}).refine(e=>Object.values(e).some(e=>typeof e==`string`&&e!==``),{message:`An address must have at least one part filled in.`}),A={short_text:{storageType:`text`,value:h().max(255)},long_text:{storageType:`text`,value:h().refine(e=>O(e)<=D,{message:`Value must be at most ${D} bytes.`})},address:{storageType:`json`,value:k}};function j(e){let{value:t}=A[e];return t instanceof _?Object.keys(t.shape):null}var M=`.`,N=`custom_fields`;function P(e){let t=`${N}${M}${e.key}`,n=j(e.type);return n?n.map(e=>`${t}${M}${e}`):[t]}function F(e){return e===N||e.startsWith(`${N}${M}`)}var I={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`}}},L=E.map(e=>({id:e,...I[e]})),R=e=>L.find(t=>t.id===e)||L[0],z=e=>R(e.type),B=e=>e.flatMap(e=>{let t=P({key:e.key,type:e.type});return t.map(n=>{if(t.length===1)return{label:e.name,value:n};let r=n.slice(n.lastIndexOf(`.`)+1),i=R(e.type).subFields?.[r]??r;return{label:`${e.name} (${i})`,value:n}})}),V=`MemberCustomFieldsResponseType`,H=a({dataType:V,path:`/members/custom_fields/`}),U=e=>H({...e,searchParams:{filter:`status:[active,archived]`}});r({dataType:V,path:e=>`/members/custom_fields/${e}/`});var W=i({method:`POST`,path:()=>`/members/custom_fields/`,body:e=>({members_custom_fields:[e]}),invalidateQueries:{dataType:V}}),G=i({method:`PUT`,path:e=>`/members/custom_fields/${e.key}/`,body:({key:e,...t})=>({members_custom_fields:[t]}),invalidateQueries:{dataType:V}}),K=i({method:`DELETE`,path:e=>`/members/custom_fields/${e}/`,invalidateQueries:{dataType:V}});export{W as a,z as c,A as d,T as f,U as i,R as l,L as n,K as o,H as r,G as s,B as t,F as u};
@@ -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{o as r}from"./framework-provider-CmtnPXIT.js";import{o as i}from"./hooks-CixO01lL.js";import{n as a}from"./dist-Ndy-PuGN.js";import{n as o,t as s}from"./dist-DMFGvqqU.js";import{t as c}from"./currency-CQsJu8iC.js";import{c as l,l as u,m as d,t as f}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as p}from"./router-provider-BmEZf6c6.js";import{c as m,v as h}from"./dist-Cb5RSHSg.js";import{t as g}from"./box-By_EgGtm.js";import{t as _}from"./container-LiZf3XdY.js";import{t as v}from"./stack-CIfOAAVf.js";import{t as y}from"./switch-CyQcwMAv.js";import{i as b,n as x,o as ee,s as S,t as te}from"./select-B0HteHrp.js";import{a as ne,i as re,n as ie,o as ae,r as oe,t as se}from"./breadcrumb-DIfcF5ow.js";import{n as C,t as w}from"./card-aUHX0hyR.js";import{t as T}from"./empty-indicator-WB1WgT9h.js";import{t as E}from"./label-AVrxwmsz.js";import{n as ce,o as D,t as le}from"./input-group-uSK3XT7b.js";import{c as ue,d as O,l as de,r as fe}from"./member-custom-fields-C8NpZYza.js";import{t as pe}from"./textarea-d9qEkMOP.js";import{i as k}from"./users-Dkv8NQZe.js";import{$i as A,$n as j,A as M,Ar as N,Co as P,D as me,Dr as F,Er as I,F as L,Fo as he,Ga as ge,I as _e,Ia as ve,Ir as R,Jr as z,Mo as ye,N as be,O as xe,Oa as B,Or as V,P as H,Qa as Se,Qi as Ce,Qr as U,Ro as W,S as we,Ss as Te,Tn as Ee,Va as De,Vo as Oe,Vr as ke,Xo as Ae,Xr as je,Zn as Me,_a as Ne,ao as Pe,b as Fe,dr as Ie,eo as Le,fr as Re,ii as ze,io as Be,ir as Ve,j as He,k as Ue,kn as We,kr as Ge,ks as Ke,lr as qe,m as Je,mr as Ye,ni as Xe,no as Ze,oo as Qe,or as G,pr as $e,qa as et,ro as tt,rr as K,rs as nt,sr as rt,to as it,ur as at,wo as ot,wr as q,y as st,zi as ct}from"./index-08n05-rc.js";import{t as lt}from"./page-header-pp4dWmOS.js";import{r as ut}from"./newsletters-BXJbJgA-.js";import{a as dt}from"./tiers-DYsa4DCo.js";import{n as ft,r as pt}from"./label-picker-DVnpu_IF.js";var J=e(t(),1),Y=n();function mt({className:e,children:t,...n}){return(0,Y.jsx)(v,{className:m(`py-5`,e),"data-detail-page":`header`,gap:`lg`,...n,children:t})}function ht({className:e,children:t,...n}){return(0,Y.jsx)(v,{className:m(`min-h-0 min-w-0 grow overflow-y-auto pb-4 lg:pb-8`,e),"data-detail-page":`body`,gap:`none`,...n,children:t})}var X=Object.assign(function({className:e,children:t,...n}){return(0,Y.jsx)(v,{className:m(`h-full min-h-0 grow px-4 lg:px-6`,e),"data-detail-page":`detail-page`,gap:`none`,...n,children:t})},{Header:mt,Body:ht}),gt=new Set([`active`,`trialing`,`unpaid`,`past_due`]);function _t(e){return(e.subscriptions??[]).some(e=>gt.has(e.status))}function vt(e){return e?`Delete member + Cancel subscription`:`Delete member`}var yt=({open:e,onOpenChange:t,member:n,allowLeaveWithUnsavedChanges:r})=>{let i=p(),o=me(),[s,c]=J.useState(!1);J.useEffect(()=>{e&&c(!1)},[e]);let l=_t(n),u=n.email||n.name||`this member`,d=async()=>{try{let e=l&&s;await o.mutateAsync({id:n.id,cancel:e}),a.success(e?`${u} was deleted and their Stripe subscription was cancelled.`:`${u} was deleted.`),t(!1),r(),i(`/members`)}catch{a.error(`Couldn’t delete the member. Please try again.`)}};return(0,Y.jsx)(q,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,Y.jsxs)(I,{"data-testid":`delete-member-modal`,children:[(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(N,{children:`Delete member account`}),(0,Y.jsxs)(F,{children:[`Permanently delete `,(0,Y.jsx)(`strong`,{children:u}),` from Ghost.`]})]}),l&&(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Y.jsx)(`h4`,{className:`text-sm font-medium`,children:`Also cancel subscription in Stripe`}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`If disabled, the member’s premium subscription will continue`})]}),(0,Y.jsx)(y,{"aria-label":`Also cancel subscription in Stripe`,checked:s,"data-testid":`delete-member-cancel-stripe`,disabled:o.isPending,onCheckedChange:c})]}),(0,Y.jsxs)(V,{children:[(0,Y.jsx)(R,{"data-testid":`cancel-delete-member`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,Y.jsx)(R,{"data-testid":`confirm-delete-member`,disabled:o.isPending,variant:`destructive`,onClick:()=>void d(),children:o.isPending?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Deleting`})]}):vt(s&&l)})]})]})})},bt=`Disabled from member settings`,xt=({open:e,onOpenChange:t,member:n})=>{let i=r(),o=xe(),[s,c]=J.useState(!1);J.useEffect(()=>{e&&c(!1)},[e]);let l=n.name||n.email||`this member`,u=async()=>{try{await o.mutateAsync({id:n.id,reason:bt,hideComments:s})}catch{a.error(`Couldn’t disable commenting. Please try again.`);return}a.success(`Commenting has been disabled for ${l}.`),t(!1),i.invalidateQueries({queryKey:[`MembersResponseType`]})};return(0,Y.jsx)(q,{open:e,onOpenChange:e=>{o.isPending||t(e)},children:(0,Y.jsxs)(I,{"data-testid":`disable-commenting-modal`,children:[(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(N,{children:`Disable commenting`}),(0,Y.jsxs)(F,{children:[(0,Y.jsx)(`strong`,{children:l}),` won’t be able to comment in the future. You can re-enable commenting anytime.`]})]}),(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,Y.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:(0,Y.jsx)(`h4`,{className:`text-sm font-medium`,children:`Hide all previous comments`})}),(0,Y.jsx)(y,{"aria-label":`Hide all previous comments`,checked:s,"data-testid":`disable-commenting-hide-comments`,disabled:o.isPending,onCheckedChange:c})]}),(0,Y.jsxs)(V,{children:[(0,Y.jsx)(R,{"data-testid":`cancel-disable-commenting`,disabled:o.isPending,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,Y.jsx)(R,{"data-testid":`confirm-disable-commenting`,disabled:o.isPending,onClick:()=>void u(),children:o.isPending?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Disabling`})]}):`Disable commenting`})]})]})})},St=({open:e,onOpenChange:t,memberId:n})=>{let i=r();J.useEffect(()=>{e&&i.removeQueries({queryKey:[`MemberSigninUrlResponseType`]})},[e,i]);let{data:o,isFetching:s,isError:c}=Fe(n,{enabled:e,defaultErrorHandler:!1}),l=o?.url??``,u=c||!s&&!c&&!l,[d,f]=J.useState(!1),p=J.useRef(null),m=J.useCallback(()=>{p.current!==null&&(clearTimeout(p.current),p.current=null)},[]);J.useEffect(()=>{e||(m(),f(!1))},[e,m]),J.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,Y.jsx)(q,{open:e,onOpenChange:t,children:(0,Y.jsxs)(I,{"data-testid":`impersonate-modal`,children:[(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(N,{children:`Impersonate member`}),(0,Y.jsx)(F,{children:`A single-use signin link that works for 24 hours. Anyone with the link can sign in as this member.`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(E,{htmlFor:`member-signin-url`,children:`Signin link`}),(0,Y.jsx)(G,{"data-testid":`member-signin-url`,id:`member-signin-url`,value:s?`Generating link…`:u?`Failed to generate link`:l,readOnly:!0})]}),(0,Y.jsxs)(V,{children:[(0,Y.jsx)(R,{variant:`outline`,onClick:()=>t(!1),children:`Close`}),(0,Y.jsx)(R,{disabled:s||u||!l,onClick:()=>void h(),children:s?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Generating link`})]}):d?`Copied`:`Copy link`})]})]})})},Ct=({open:e,onOpenChange:t,member:n})=>{let r=H(),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,Y.jsx)(rt,{open:e,onOpenChange:e=>{r.isPending||t(e)},children:(0,Y.jsxs)(at,{"data-testid":`logout-member-modal`,children:[(0,Y.jsxs)($e,{children:[(0,Y.jsx)(Ye,{children:`Sign out member from all devices?`}),(0,Y.jsxs)(Ie,{children:[(0,Y.jsx)(`strong`,{children:i}),` will be signed out of all active sessions, and will need to sign in again upon return.`]})]}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(qe,{disabled:r.isPending,children:`Cancel`}),(0,Y.jsx)(R,{"data-testid":`confirm-logout-member`,disabled:r.isPending,variant:`destructive`,onClick:()=>void o(),children:r.isPending?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Signing out`})]}):`Sign out`})]})]})})};function wt(e){return e.can_comment===!1}function Tt(e){return wt(e)?`Enable commenting`:`Disable commenting`}var Et=({member:e,allowLeaveWithUnsavedChanges:t})=>{let n=r(),{data:o}=i(),[s,c]=J.useState(!1),[l,u]=J.useState(!1),[d,f]=J.useState(!1),[p,m]=J.useState(!1),h=He(),g=L(),_=h.isPending||h.isSuccess&&g,v=wt(e),y=Tt(e),b=e.name||e.email||`this member`;if(!o||!k(o))return null;let x=async()=>{if(!v){f(!0);return}try{await h.mutateAsync({id:e.id}),a.success(`Commenting has been enabled for ${b}.`)}catch{a.error(`Couldn’t enable commenting. Please try again.`);return}n.invalidateQueries({queryKey:[`MembersResponseType`]})};return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(z,{children:[(0,Y.jsx)(ze,{asChild:!0,children:(0,Y.jsx)(R,{"aria-label":`Actions`,className:`size-(--control-height)`,"data-testid":`member-actions`,size:`icon`,variant:`outline`,children:(0,Y.jsx)(W,{size:16})})}),(0,Y.jsxs)(je,{align:`end`,children:[(0,Y.jsx)(U,{"data-testid":`member-actions-impersonate`,onSelect:()=>c(!0),children:`Impersonate`}),(0,Y.jsx)(U,{"data-testid":`member-actions-logout`,onSelect:()=>u(!0),children:`Sign out of all devices`}),(0,Y.jsx)(U,{"data-testid":`member-actions-commenting`,disabled:_,onSelect:()=>void x(),children:y}),(0,Y.jsx)(Xe,{}),(0,Y.jsx)(U,{className:`text-destructive focus:text-destructive`,"data-testid":`member-actions-delete`,onSelect:()=>m(!0),children:`Delete member`})]})]}),(0,Y.jsx)(St,{memberId:e.id,open:s,onOpenChange:c}),(0,Y.jsx)(Ct,{member:e,open:l,onOpenChange:u}),(0,Y.jsx)(xt,{member:e,open:d,onOpenChange:f}),(0,Y.jsx)(yt,{allowLeaveWithUnsavedChanges:t,member:e,open:p,onOpenChange:m})]})},Z=e(h(),1);function Dt(e){return e?/^(https?:\/\/|\/|#\/)/i.test(e):!1}var Ot=new Set([`bif`,`clp`,`djf`,`gnf`,`jpy`,`kmf`,`krw`,`mga`,`pyg`,`rwf`,`ugx`,`vnd`,`vuv`,`xaf`,`xof`,`xpf`]);function kt(e,t){let n=Ot.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 At(e){return e?.trim()||null}function jt(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 Mt(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=At(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 ${kt(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 Nt(e,t){if(e.type===`automated_email_sent_event`){let t=e.data.automatedEmail;if(t?.source===`automation_action_revision`){let e=At(t.subject);return e?`received automated email: ${e}`:`received automated email`}}return Mt(e,t)}function Pt(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 Ft(e){let t=e.data.attribution;return t?.referrer_source?{name:t.referrer_source,url:t.referrer_url??null}:null}function It(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 Lt(e){if(e.type===`click_event`)return e.data.link?.to}function Rt(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 zt(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 Bt(e,t){let n=At(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:jt(e),subject:r,action:Mt(e,t.hasMultipleNewsletters),actionTitle:Nt(e,t.hasMultipleNewsletters),join:`–`,object:Pt(e),source:Ft(e),info:It(e,t),description:Lt(e),url:Rt(e),route:zt(e),timestamp:e.data.created_at}}var Vt=({iconName:e})=>{let t={className:`shrink-0 text-muted-foreground`,size:16};switch(e){case`event-signed-up`:return(0,Y.jsx)(ct,{...t});case`event-logged-in`:return(0,Y.jsx)(Qe,{...t});case`event-subscriptions`:return(0,Y.jsx)(Oe,{...t});case`event-canceled-subscription`:return(0,Y.jsx)(Ae,{...t});case`event-subscribed-to-email`:return(0,Y.jsx)(tt,{...t});case`event-unsubscribed-from-email`:return(0,Y.jsx)(Pe,{...t});case`event-opened-email`:return(0,Y.jsx)(Be,{...t});case`event-received-email`:return(0,Y.jsx)(Le,{...t});case`event-sent-email`:return(0,Y.jsx)(Ne,{...t});case`event-email-delivery-failed`:return(0,Y.jsx)(it,{...t});case`event-email-delivery-spam`:return(0,Y.jsx)(Ze,{...t});case`event-email-changed`:return(0,Y.jsx)(Te,{...t});case`event-comment`:return(0,Y.jsx)(ge,{...t});case`event-click`:return(0,Y.jsx)(De,{...t});case`event-more-like-this`:return(0,Y.jsx)(Ce,{...t});case`event-less-like-this`:return(0,Y.jsx)(A,{...t});case`event-gift`:return(0,Y.jsx)(ot,{...t});default:return(0,Y.jsx)(Ke,{...t})}},Ht=({memberId:e})=>(0,Y.jsx)(`a`,{className:`block pt-3 font-medium text-primary hover:underline`,"data-testid":`member-activity-view-all`,href:`#/members-activity?member=${e}`,children:`View all member activity →`}),Ut=`All events related to this member will be shown here.`,Wt=e=>e?e.charAt(0).toUpperCase()+e.slice(1):``;function Gt(e){if(e&&typeof e==`object`){let t=e.subject;return t?`“${t}”`:`Email`}}var Kt=({event:e})=>{if(!e.action)return null;let t=Gt(e.email),n=e.object&&(e.route||Dt(e.url)),r=!n&&t,i=e.timestamp?(0,Z.default)(e.timestamp).fromNow():`—`;return(0,Y.jsxs)(`div`,{className:`flex items-start gap-3 py-3`,"data-testid":`member-activity-event`,children:[(0,Y.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-muted`,children:(0,Y.jsx)(Vt,{iconName:e.icon})}),(0,Y.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:[(0,Y.jsxs)(`div`,{className:`text-sm leading-snug`,children:[(0,Y.jsx)(`span`,{"data-testid":`member-activity-action`,children:Wt(e.action)}),e.info&&(0,Y.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,e.info,`)`]}),n&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),e.route?(0,Y.jsx)(`a`,{className:`hover:underline`,href:e.route,children:e.object}):(0,Y.jsx)(`a`,{className:`hover:underline`,href:e.url,rel:`noopener noreferrer`,target:`_blank`,children:e.object})]}),r&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`mx-1 text-muted-foreground`,children:e.join}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:t})]})]}),e.description&&(0,Y.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.description}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i})]})]})},qt=({memberId:e,hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})=>{let{data:i,isLoading:a}=be(e??``,{limit:`5`,enabled:!!e}),o=(i?.events??[]).map(e=>Bt(e,{hasMultipleNewsletters:t,hasMultipleTiers:n,paidMembersEnabled:r})),s=new Set;return e?(0,Y.jsxs)(`section`,{className:`flex flex-col gap-3`,"data-testid":`member-activity-feed`,children:[(0,Y.jsx)(`h3`,{className:`text-base font-semibold`,children:`Activity`}),(0,Y.jsx)(w,{children:(0,Y.jsxs)(C,{className:`pt-3`,children:[a?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Y.jsx)(Ve,{className:`h-10`}),(0,Y.jsx)(Ve,{className:`h-10`}),(0,Y.jsx)(Ve,{className:`h-10`})]}):o.length===0?(0,Y.jsx)(`p`,{className:`py-4 text-center text-sm text-muted-foreground`,"data-testid":`member-activity-empty`,children:`No activity yet`}):(0,Y.jsx)(`div`,{className:`divide-y divide-border`,children:o.map(e=>{let t=e.id||`${e.timestamp??`?`}-${e.icon}-${e.action}`,n=t,r=1;for(;s.has(n);)n=`${t}#${r}`,r+=1;return s.add(n),(0,Y.jsx)(Kt,{event:e},n)})}),!a&&o.length>0&&(0,Y.jsx)(Ht,{memberId:e})]})})]}):(0,Y.jsxs)(`section`,{className:`flex flex-col gap-3`,"data-testid":`member-activity-feed`,children:[(0,Y.jsx)(`h3`,{className:`text-base font-semibold`,children:`Activity`}),(0,Y.jsx)(w,{children:(0,Y.jsx)(C,{className:`pt-6`,children:(0,Y.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,Y.jsx)(T,{description:Ut,title:`Activity`,children:(0,Y.jsx)(Ke,{})})})})})]})},Jt=[`line1`,`line2`,`city`,`state`,`postal_code`,`country`],Yt=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function Q(e){return{name:(e.name??``).trim(),email:(e.email??``).trim(),note:e.note??``,labels:(e.labels??[]).map(e=>({name:e.name,slug:e.slug})).sort((e,t)=>e.slug<t.slug?-1:+(e.slug>t.slug)),newsletters:(e.newsletters??[]).map(e=>e.id).sort()}}function Xt(e){let t={};for(let[n,r]of Object.entries(e??{}))if(typeof r==`string`&&r.trim()!==``)t[n]=r.trim();else if(typeof r==`object`&&r&&!Array.isArray(r)){let e=Zt(r);e&&(t[n]=e)}return t}function Zt(e){let t={};for(let n of Jt){let r=e[n];typeof r==`string`&&r.trim()!==``&&(t[n]=r.trim())}return Object.keys(t).length?t:void 0}function Qt(e,t){return e.includes(t)?e.filter(e=>e!==t):[...e,t].sort()}function $t(e){return Yt.test(e.trim())}function en(e,t){return t?e.trim()===``?`Email is required.`:$t(e)?null:`Invalid email.`:null}function tn(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 nn(e){return e?e.filter(e=>e.subscribe_on_signup===!0&&e.visibility===`members`).map(e=>e.id):[]}function rn(e){return e!==`disabled`}function an(e){return 500-[...e].length}function on(e,t,n){let r=pn(t),i={id:e,name:r.name,email:r.email,note:r.note,labels:r.labels};return s(r.newsletters,n.newsletters)||(i.newsletters=r.newsletters.map(e=>({id:e}))),i}function sn(e,t,n){let r=typeof n==`string`?n.trim()||void 0:Zt(n);return{id:e,custom_fields:{[t]:r??null}}}var cn=`Enter a 2-letter country code, like US.`;function ln(e,t){if(e.type===`address`&&t.path[0]===`country`)return cn;if(e.type===`address`&&t.path.length===0)return`Enter at least one part of the address.`;let n=t.code===`too_big`&&typeof t.maximum==`number`?t.maximum:void 0;return n===void 0?`This text is too long to save. Shorten it a little.`:`Use ${n} characters or fewer.`}function un(e,t){let n={},r=Xt(e);for(let e of t){let t=r[e.key];if(t===void 0)continue;let i=O[e.type];if(!i)continue;let a=i.value.safeParse(t);if(!a.success)for(let t of a.error.issues){let r=[e.key,...t.path].join(`.`);n[r]??=ln(e,t)}}return n}function dn(e){let t=e?.data,n={};for(let e of t?.errors??[])e.property?.startsWith(`custom_fields.`)&&(n[e.property.slice(14)]=e.context||e.message||`Invalid value.`);return Object.keys(n).length?n:void 0}function fn(e,t){return e.map(e=>t.get(e)??{name:e,slug:e})}function pn(e){return{name:e.name.trim(),email:e.email.trim(),note:e.note,labels:e.labels,newsletters:e.newsletters}}function mn(e,t){return!e||!!t&&s(pn(e),t)}function hn(e){if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function gn(e){let t=hn(e);return t?t.country_code===`US`&&t.region?`${t.region}, US`:t.country||`Unknown location`:`Unknown location`}function _n(e){let t=[e.state,e.postal_code].filter(Boolean).join(` `);return[e.line1,e.line2,e.city,t,e.country].filter(Boolean).join(`, `)}function vn(e){let t=e?.referrer_source;return!t||t===`Created manually`?null:t}var yn=de(`address`).subFields??{},bn=({message:e})=>e?(0,Y.jsx)(`p`,{className:`text-sm text-destructive`,role:`alert`,children:e}):null,xn=({inputId:e,value:t,errors:n,disabled:r,onChange:i})=>(0,Y.jsx)(`div`,{className:`grid gap-x-4 gap-y-3 md:grid-cols-2`,children:Jt.map(a=>{let o=`${e}-${a}`,s=n?.[a];return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(E,{htmlFor:o,children:yn[a]??a}),(0,Y.jsx)(G,{"aria-invalid":s?!0:void 0,disabled:r,id:o,value:t[a]??``,onChange:e=>i({...t,[a]:e.target.value})}),(0,Y.jsx)(bn,{message:s})]},a)})}),Sn=({field:e,inputId:t,value:n,errors:r,disabled:i,onChange:a})=>{let o=r?.[``];switch(ue(e).input){case`text`:return(0,Y.jsx)(G,{"aria-invalid":o?!0:void 0,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`textarea`:return(0,Y.jsx)(pe,{"aria-invalid":o?!0:void 0,className:`max-w-full resize-y`,disabled:i,id:t,value:typeof n==`string`?n:``,onChange:e=>a(e.target.value)});case`address`:return(0,Y.jsx)(xn,{disabled:i,errors:r,inputId:t,value:typeof n==`object`&&n?n:{},onChange:a});default:return null}},Cn=({memberId:e,field:t,initialValue:n,onClose:r})=>{let i=ue(t).input===`address`,[o,c]=J.useState(n??(i?{}:``)),[l,u]=J.useState(!1),[d,f]=J.useState(),p=Ue(),m=un({[t.key]:o},[t]),h={...l?m:{},...d},g=Object.fromEntries(Object.entries(h).map(([e,n])=>[e===t.key?``:e.slice(t.key.length+1),n])),_=`member-custom-field-${t.key}`,v=!s(Xt({[t.key]:o}),Xt({[t.key]:n}));return(0,Y.jsx)(q,{open:!0,onOpenChange:e=>{!e&&!p.isPending&&r()},children:(0,Y.jsxs)(I,{"data-testid":`member-custom-field-edit-modal`,onEscapeKeyDown:e=>{(v||p.isPending)&&e.preventDefault()},onInteractOutside:e=>{(v||p.isPending)&&e.preventDefault()},children:[(0,Y.jsx)(Ge,{children:(0,Y.jsx)(N,{children:t.name})}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[!i&&(0,Y.jsx)(E,{className:`sr-only`,htmlFor:_,children:t.name}),(0,Y.jsx)(Sn,{disabled:p.isPending,errors:g,field:t,inputId:_,value:o,onChange:e=>{f(void 0),c(e)}}),(0,Y.jsx)(bn,{message:g[``]})]}),(0,Y.jsxs)(V,{children:[(0,Y.jsx)(R,{disabled:p.isPending,variant:`outline`,onClick:r,children:`Cancel`}),(0,Y.jsx)(R,{className:`min-w-16`,disabled:p.isPending,onClick:()=>{if(!p.isPending){if(!v){r();return}if(Object.keys(m).length>0){u(!0);return}p.mutate(sn(e,t.key,o),{onSuccess:()=>{a.success(`${t.name} saved`),r()},onError:e=>{let n=dn(e);f(n),n||a.error(`${t.name} couldn’t be saved`)}})}},children:p.isPending?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):`Save`})]})]})})};function wn(e){return e===void 0?null:typeof e==`string`?e:_n(e)||null}var Tn=({memberId:e,customFields:t,disabled:n})=>{let{data:r,isLoading:i}=fe(),a=r?.members_custom_fields??[],o=Xt(t),[s,c]=J.useState(null);return i||a.length===0?null:(0,Y.jsxs)(`section`,{"aria-labelledby":`member-custom-fields-heading`,className:`flex flex-col gap-3`,"data-testid":`member-custom-fields-field`,children:[(0,Y.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-custom-fields-heading`,children:`Custom fields`}),(0,Y.jsx)(w,{children:(0,Y.jsx)(C,{className:`px-6 py-4`,children:(0,Y.jsx)(`ul`,{children:a.map(e=>{let t=wn(o[e.key]);return(0,Y.jsx)(`li`,{className:`border-b border-border transition-colors last:border-b-0 hover:border-b-transparent [&:has(+li:hover)]:border-b-transparent`,children:(0,Y.jsxs)(`button`,{"aria-label":t?`Edit ${e.name}: ${t}`:`Edit ${e.name}`,className:`group -mx-3 flex w-[calc(100%+1.5rem)] items-center justify-between gap-4 rounded-md 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,Y.jsxs)(`span`,{className:`min-w-0`,children:[(0,Y.jsx)(`span`,{className:`block text-sm text-muted-foreground`,children:e.name}),t?(0,Y.jsx)(`span`,{className:`block break-words select-text`,children:t}):(0,Y.jsx)(`span`,{className:`block text-muted-foreground`,children:`–`})]}),(0,Y.jsx)(ve,{"aria-hidden":`true`,className:`shrink-0 text-muted-foreground opacity-0 transition-all group-hover:opacity-100 group-focus-visible:opacity-100`,size:16})]})},e.key)})})})}),s&&(0,Y.jsx)(Cn,{field:s,initialValue:o[s.key],memberId:e,onClose:()=>c(null)},s.key)]})},En=({labels:e,disabled:t,onChange:n})=>{let r=e.map(e=>e.slug),i=J.useRef(e);i.current=e;let a=J.useRef(new Map),o=e=>{for(let t of e)a.current.set(t.slug,{name:t.name,slug:t.slug})};o(e);let s=ft({selectedSlugs:r,onSelectionChange:e=>n(fn(e,a.current))});o(s.labels);let c=async e=>{let t=await s.createLabel(e);if(t){let e={name:t.name,slug:t.slug};a.current.set(t.slug,e),n([...i.current.filter(e=>e.slug!==t.slug),e])}return t};return(0,Y.jsx)(`div`,{className:t?`pointer-events-none opacity-60`:void 0,"data-testid":`member-labels-field`,...t?{inert:``}:{},children:(0,Y.jsx)(pt,{isCreating:s.isCreating,labels:s.labels,optionSource:s.optionSource,placeholder:``,resolvedSelectedLabels:s.resolvedSelectedLabels,selectedSlugs:r,onCreate:c,onDelete:s.deleteLabel,onEdit:s.editLabel,onToggle:s.toggleLabel})})},Dn=({draft:e,emailError:t,disabled:n,onChange:r,onEmailBlur:i,onNameBlur:a})=>{let o=an(e.note),s=500-o,c=o<0?`text-destructive`:s>=500*.8?`text-state-warning`:`text-state-success`;return(0,Y.jsxs)(`div`,{className:`grid items-stretch gap-6 md:grid-cols-2`,"data-testid":`member-detail-form`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(E,{htmlFor:`member-name`,children:`Name`}),(0,Y.jsx)(G,{disabled:n,id:`member-name`,value:e.name,onBlur:a,onChange:e=>r({name:e.target.value})})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(E,{htmlFor:`member-email`,children:`Email`}),(0,Y.jsx)(G,{"aria-invalid":!!t,disabled:n,id:`member-email`,type:`email`,value:e.email,onBlur:i,onChange:e=>r({email:e.target.value})}),t&&(0,Y.jsx)(`p`,{className:`text-sm text-destructive`,children:t})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(E,{children:`Labels`}),(0,Y.jsx)(En,{disabled:n,labels:e.labels,onChange:e=>r({labels:e})})]})]}),(0,Y.jsxs)(`div`,{className:`flex min-h-0 flex-col gap-1.5`,children:[(0,Y.jsxs)(E,{htmlFor:`member-note`,children:[`Note `,(0,Y.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(not visible to member)`})]}),(0,Y.jsxs)(le,{className:`flex-1`,children:[(0,Y.jsx)(D,{className:`h-full`,disabled:n,id:`member-note`,value:e.note,onChange:e=>r({note:e.target.value})}),(0,Y.jsx)(ce,{align:`block-end`,className:`justify-end`,children:(0,Y.jsxs)(`span`,{className:`text-sm text-muted-foreground`,children:[`Maximum: `,(0,Y.jsx)(`span`,{className:`font-semibold text-foreground`,children:500}),` characters. You’ve used`,` `,(0,Y.jsx)(`span`,{className:m(`font-semibold`,c),children:s})]})})]})]})]})},On=e=>Z.default.utc(e).format(`D MMM YYYY`),$=({icon:e,children:t})=>(0,Y.jsxs)(`p`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:e}),(0,Y.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]}),kn=e=>e.split(` `)[0]||``,An=({member:e,draftName:t,draftEmail:n,engagementEnabled:r})=>{let i=(t??e?.name??``).trim(),a=(n??e?.email??``).trim(),o=i||a||`New member`,s=!e;return(0,Y.jsxs)(`aside`,{className:`flex w-full shrink-0 flex-col gap-6 lg:w-80`,"data-testid":`member-detail-sidebar`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,Y.jsx)(j,{className:`size-12 min-w-12 [&_span]:text-lg`,email:a||void 0,name:i||void 0,src:e?.avatar_image}),(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`h2`,{className:`truncate text-xl font-semibold`,children:o}),i&&a&&(0,Y.jsx)(`a`,{className:`block truncate text-muted-foreground hover:underline`,href:`mailto:${a}`,children:a}),!i&&a&&(0,Y.jsx)(`span`,{className:`block truncate text-muted-foreground`,children:a})]})]}),!s&&e&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2 text-sm`,children:[(0,Y.jsx)($,{icon:(0,Y.jsx)(Se,{size:16}),children:(0,Y.jsx)(`span`,{"data-testid":`member-detail-location`,children:gn(e.geolocation)})}),(0,Y.jsx)($,{icon:(0,Y.jsx)(he,{size:16}),children:e.last_seen_at?`Last seen on ${On(e.last_seen_at)}`:`Not seen yet`}),e.can_comment===!1&&(0,Y.jsx)($,{icon:(0,Y.jsx)(et,{size:16}),children:`Comments disabled`})]}),(0,Y.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 text-sm`,children:[(0,Y.jsx)(`h3`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Signup info`}),(0,Y.jsxs)($,{icon:(0,Y.jsx)(ct,{size:16}),children:[`Created — `,(0,Y.jsx)(`span`,{className:`text-foreground`,children:On(e.created_at)})]}),(()=>{let t=vn(e.attribution);return t?(0,Y.jsxs)($,{icon:(0,Y.jsx)(P,{size:16}),children:[`Source — `,(0,Y.jsx)(`span`,{className:`text-foreground`,title:t,children:t})]}):null})(),e.attribution?.title&&(0,Y.jsxs)($,{icon:(0,Y.jsx)(ye,{size:16}),children:[`Page — `,Dt(e.attribution.url)?(0,Y.jsx)(`a`,{className:`truncate text-foreground hover:underline`,href:e.attribution.url,rel:`noopener noreferrer`,target:`_blank`,title:e.attribution.title,children:e.attribution.title}):(0,Y.jsx)(`span`,{className:`truncate text-foreground`,title:e.attribution.title,children:e.attribution.title})]})]}),r&&(0,Y.jsxs)(`section`,{className:`mt-4 flex flex-col gap-3 text-sm`,"data-testid":`member-detail-engagement`,children:[(0,Y.jsx)(`h4`,{className:`border-b border-border pb-2 text-base font-semibold`,children:`Engagement`}),(e.email_count??0)===0?(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:i?`We’ll show ${kn(i)}’s email stats here once they receive their first newsletter.`:`We’ll show this member’s email stats here once they receive their first newsletter.`}):(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails received`}),(0,Y.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_count})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`Emails opened`}),(0,Y.jsx)(`p`,{className:`text-2xl font-semibold`,children:e.email_opened_count??0})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`Average open rate`}),e.email_open_rate===null||e.email_open_rate===void 0?(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`This metric is calculated once a member has received 5 newsletters.`}):(0,Y.jsxs)(`p`,{className:`text-2xl font-semibold`,children:[e.email_open_rate,(0,Y.jsx)(`span`,{className:`text-base font-normal text-muted-foreground`,children:`%`})]})]})]})]})]})]})},jn=({memberId:e,emailSuppression:t,subscribedIds:n,disabled:r,onChange:i})=>{let o=e?tn(t):null,s=_e(),{data:c,isLoading:l}=ut({searchParams:{filter:`status:active`,limit:`50`}}),u=c?.newsletters??[],d=L(),f=s.isPending||s.isSuccess&&d;return!o&&(l||u.length===0)?null:(0,Y.jsxs)(`section`,{"aria-labelledby":`member-newsletters-heading`,className:`flex flex-col gap-3`,"data-testid":`member-newsletters-field`,children:[(0,Y.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-newsletters-heading`,children:`Newsletters`}),(0,Y.jsx)(w,{children:(0,Y.jsx)(C,{className:`p-6`,children:o?(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,"data-testid":`member-suppression-banner`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,Y.jsx)(it,{className:`mt-0.5 shrink-0 text-muted-foreground`,size:20}),(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:`Email disabled`}),o.label&&(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:o.label}),(0,Y.jsx)(`a`,{className:`text-sm text-muted-foreground hover:underline`,href:`https://ghost.org/help/disabled-emails`,rel:`noopener noreferrer`,target:`_blank`,children:`Learn more`})]})]}),(0,Y.jsx)(R,{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,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Re-enabling email`})]}):`Re-enable email`})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`ul`,{className:`divide-y divide-border`,children:u.map(e=>{let t=n.includes(e.id);return(0,Y.jsxs)(`li`,{className:`flex items-center justify-between gap-4 py-3 first:pt-0 last:pb-0`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:e.name}),e.description&&(0,Y.jsx)(`p`,{className:`truncate text-sm text-muted-foreground`,children:e.description})]}),(0,Y.jsx)(y,{"aria-label":`Subscribe to ${e.name}`,checked:t,"data-testid":`member-subscription-toggle`,disabled:r,onCheckedChange:()=>i(Qt(n,e.id))})]},e.id)})}),(0,Y.jsxs)(`p`,{className:`mt-4 text-sm text-muted-foreground`,children:[`If disabled, member will `,(0,Y.jsx)(`em`,{children:`not`}),` receive newsletter emails`]})]})})})]})},Mn=`complimentary`,Nn=`gift subscription`;function Pn(e){if(e.id)return`paid`;let t=e.plan?.nickname?.toLowerCase()??``;return t===Mn?`complimentary`:t===Nn?`gift`:`paid`}function Fn(e){return e===`year`?`yearly`:`monthly`}function In(e){if(e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`))return`Free trial`;let t=e.price?.nickname;return t&&t!==`Monthly`&&t!==`Yearly`?t:null}function Ln(e){return e.status===`canceled`||e.cancel_at_period_end?`Canceled`:`Active`}var Rn=e=>e?(0,Z.default)(new Date(e)).format(`D MMM YYYY`):``,zn=e=>e?(0,Z.default)(e).utc().format(`D MMM YYYY`):``;function Bn(e){let t=Pn(e);if(t===`complimentary`||t===`gift`){let t=zn(e.tier?.expiry_at);return t?`Expires ${t}`:``}let n=e.status===`canceled`&&!e.cancel_at_period_end?``:Rn(e.current_period_end);return e.status===`canceled`?n?`Ended ${n}`:``:e.cancel_at_period_end?n?`Has access until ${n}`:``:e.trial_end_at&&(0,Z.default)(e.trial_end_at).isAfter(new Date,`day`)?`Ends ${Rn(e.trial_end_at)}`:n?`Renews ${n}`:``}function Vn(e){let t=[],n=new Map;for(let r of e){if(!r.price)continue;let e=r.tier??r.price.tier;if(!e?.id)continue;let i=n.get(e.id);i||(i={tier:e,subscriptions:[]},n.set(e.id,i),t.push(i)),i.subscriptions.push(r)}return t}var Hn=[`forever`,`week`,`month`,`half-year`,`year`,`custom`];function Un(e){return Hn.includes(e)}function Wn(e,t){switch(e){case`forever`:return null;case`week`:return Z.default.utc().add(7,`days`).startOf(`day`).toISOString();case`month`:return Z.default.utc().add(1,`month`).startOf(`day`).toISOString();case`half-year`:return Z.default.utc().add(6,`months`).startOf(`day`).toISOString();case`year`:return Z.default.utc().add(1,`year`).startOf(`day`).toISOString();case`custom`:return t?(0,Z.default)(t,`YYYY-MM-DD`).startOf(`day`).endOf(`day`).set(`millisecond`,0).add((0,Z.default)().utcOffset(),`minutes`).toISOString():null}}var Gn=new Set([`active`,`trialing`,`unpaid`,`past_due`]),Kn=[{value:`forever`,label:`Forever`},{value:`week`,label:`1 Week`},{value:`month`,label:`1 Month`},{value:`half-year`,label:`6 Months`},{value:`year`,label:`1 Year`},{value:`custom`,label:`Custom`}],qn=({open:e,onOpenChange:t,member:n})=>{let{data:r,isLoading:i}=dt({searchParams:{filter:`type:paid+active:true`,limit:`all`}}),o=r?.tiers??[],[s,c]=J.useState(``),[l,u]=J.useState(`forever`),[d,f]=J.useState(``);J.useEffect(()=>{e&&(c(``),u(`forever`),f(``))},[e]);let p=M(),m=Ue(),[h,g]=J.useState(!1),_=(n.subscriptions??[]).filter(e=>Pn(e)===`paid`&&Gn.has(e.status)),v=(0,Z.default)().format(`YYYY-MM-DD`),y=!!s&&!h&&(l!==`custom`||!!d),ne=async()=>{if(y){g(!0);try{for(let e of _)await p.mutateAsync({memberId:n.id,subscriptionId:e.id,status:`canceled`});let e=Wn(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,Y.jsx)(q,{open:e,onOpenChange:e=>{h||t(e)},children:(0,Y.jsxs)(I,{"data-testid":`add-comp-modal`,children:[(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(N,{children:`Add complimentary subscription`}),(0,Y.jsx)(F,{children:`Grants this member access to a paid tier for the chosen duration. Any active paid subscription is canceled first.`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(E,{htmlFor:`comp-tier`,children:`Tier`}),(0,Y.jsxs)(te,{value:s,onValueChange:c,children:[(0,Y.jsx)(ee,{"data-testid":`comp-tier-select`,disabled:i||h,id:`comp-tier`,children:(0,Y.jsx)(S,{placeholder:i?`Loading tiers…`:`Select a tier`})}),(0,Y.jsx)(x,{children:o.map(e=>(0,Y.jsx)(b,{"data-tier-id":e.id,value:e.id,children:e.name},e.id))})]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(E,{htmlFor:`comp-duration`,children:`Duration`}),(0,Y.jsxs)(te,{value:l,onValueChange:e=>{Un(e)&&u(e)},children:[(0,Y.jsx)(ee,{"data-testid":`comp-duration-select`,disabled:h,id:`comp-duration`,children:(0,Y.jsx)(S,{})}),(0,Y.jsx)(x,{children:Kn.map(e=>(0,Y.jsx)(b,{value:e.value,children:e.label},e.value))})]})]}),l===`custom`&&(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(E,{htmlFor:`comp-custom-date`,children:`Expires on`}),(0,Y.jsx)(G,{"data-testid":`comp-custom-date`,disabled:h,id:`comp-custom-date`,min:v,type:`date`,value:d,onChange:e=>f(e.target.value)})]})]}),(0,Y.jsxs)(V,{children:[(0,Y.jsx)(R,{disabled:h,variant:`outline`,onClick:()=>t(!1),children:`Cancel`}),(0,Y.jsx)(R,{"data-testid":`comp-add-confirm`,disabled:!y,onClick:()=>void ne(),children:h?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Adding`})]}):`Add subscription`})]})]})})},Jn=({memberId:e,subscription:t})=>{let n=M(),r=L(),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,Y.jsxs)(z,{children:[(0,Y.jsx)(ze,{asChild:!0,children:(0,Y.jsx)(R,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:i,size:`sm`,variant:`outline`,children:i?(0,Y.jsx)(K,{size:`sm`}):(0,Y.jsx)(W,{})})}),(0,Y.jsxs)(je,{align:`end`,children:[(0,Y.jsx)(U,{asChild:!0,children:(0,Y.jsx)(`a`,{href:`https://dashboard.stripe.com/customers/${t.customer.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe customer`})}),(0,Y.jsx)(Xe,{}),(0,Y.jsx)(U,{asChild:!0,children:(0,Y.jsx)(`a`,{href:`https://dashboard.stripe.com/subscriptions/${t.id}`,rel:`noopener noreferrer`,target:`_blank`,children:`View Stripe subscription`})}),!o&&(s?(0,Y.jsx)(U,{"data-testid":`continue-subscription`,onSelect:()=>c(!1,`Subscription continued`,`Couldn’t continue subscription`),children:`Continue subscription`}):(0,Y.jsx)(U,{className:`text-destructive focus:text-destructive`,"data-testid":`cancel-subscription`,onSelect:()=>c(!0,`Subscription canceled`,`Couldn’t cancel subscription`),children:`Cancel subscription`}))]})]})},Yn=({member:e,tierId:t})=>{let n=Ue(),[r,i]=J.useState(!1),o=L(),s=n.isPending||n.isSuccess&&o;return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(z,{children:[(0,Y.jsx)(ze,{asChild:!0,children:(0,Y.jsx)(R,{"aria-label":`Subscription menu`,"data-testid":`subscription-actions`,disabled:s,size:`sm`,variant:`outline`,children:s?(0,Y.jsx)(K,{size:`sm`}):(0,Y.jsx)(W,{})})}),(0,Y.jsx)(je,{align:`end`,children:(0,Y.jsx)(U,{className:`text-destructive focus:text-destructive`,"data-testid":`remove-complimentary`,onSelect:()=>i(!0),children:`Remove complimentary subscription`})})]}),(0,Y.jsx)(rt,{open:r,onOpenChange:e=>{n.isPending||i(e)},children:(0,Y.jsxs)(at,{children:[(0,Y.jsxs)($e,{children:[(0,Y.jsx)(Ye,{children:`Remove complimentary subscription?`}),(0,Y.jsx)(Ie,{children:`The member will lose access to this tier immediately.`})]}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(qe,{disabled:n.isPending,children:`Cancel`}),(0,Y.jsx)(R,{"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,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Removing`})]}):`Remove`})]})]})})]})},Xn=e=>{let t=e/100;return t.toLocaleString(void 0,t%1==0?void 0:{minimumFractionDigits:2,maximumFractionDigits:2})},Zn=({sub:e,kind:t})=>{if(t===`complimentary`||t===`gift`)return(0,Y.jsx)(`div`,{className:`flex size-20 shrink-0 items-center justify-center rounded-lg bg-muted text-center text-sm font-medium text-muted-foreground`,children:t===`complimentary`?`Comp`:`Gift`});let n=c(e.price.currency),r=Xn(e.price.amount),i=Fn(e.price.interval);return(0,Y.jsxs)(`div`,{className:`flex size-20 shrink-0 flex-col items-center justify-center rounded-lg bg-muted text-foreground`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start leading-none`,children:[(0,Y.jsx)(`span`,{className:`mt-1 text-sm font-semibold`,children:n}),(0,Y.jsx)(`span`,{className:`text-3xl font-semibold tracking-tight`,children:r})]}),(0,Y.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:i})]})},Qn=e=>e?Z.default.utc(e).format(`D MMM YYYY`):``,$n=({sub:e})=>{let t=Qn(e.start_date),n=e.attribution?.referrer_source,r=n&&n!==`Unknown`,i=e.attribution?.title?{title:e.attribution.title,url:e.attribution.url??null}:null;return(0,Y.jsxs)(`div`,{className:`mt-3 space-y-1 border-t border-border pt-3 text-sm text-muted-foreground`,children:[t&&(0,Y.jsxs)(`p`,{children:[`Created — `,(0,Y.jsx)(`span`,{className:`text-foreground`,children:t})]}),r&&(0,Y.jsxs)(`p`,{children:[`Source — `,(0,Y.jsx)(`span`,{className:`text-foreground`,children:n})]}),i&&(0,Y.jsxs)(`p`,{children:[`Page — `,i.url?(0,Y.jsx)(`a`,{className:`text-foreground hover:underline`,href:i.url,rel:`noopener noreferrer`,target:`_blank`,children:i.title}):(0,Y.jsx)(`span`,{className:`text-foreground`,children:i.title})]})]})},er=({member:e,sub:t,showDivider:n})=>{let[r,i]=J.useState(!1),a=Pn(t),o=Ln(t),s=Bn(t),c=In(t);return(0,Y.jsxs)(`div`,{className:m(`flex items-start justify-between gap-4 py-5 first:pt-0 last:pb-0`,n&&`border-t border-border`),"data-testid":`member-subscription`,children:[(0,Y.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-4`,children:[(0,Y.jsx)(Zn,{kind:a,sub:t}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1 pt-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`min-w-0 truncate font-semibold`,"data-testid":`member-subscription-tier`,children:t.tier?.name??`Subscription`}),(0,Y.jsx)(Me,{"data-testid":`member-subscription-status`,variant:o===`Canceled`?`secondary`:`success`,children:o})]}),(c||s)&&(0,Y.jsxs)(`div`,{className:`mt-1 text-sm`,children:[c&&(0,Y.jsx)(`span`,{className:`font-semibold text-foreground`,children:c}),c&&s&&(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:` – `}),s&&(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:s})]}),(0,Y.jsxs)(`button`,{"aria-expanded":r,className:`mt-1 inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline`,"data-testid":`member-subscription-details-toggle`,type:`button`,onClick:()=>i(e=>!e),children:[`Details`,(0,Y.jsx)(nt,{className:m(`transition-transform`,r&&`rotate-180`),size:14})]}),r&&(0,Y.jsx)($n,{sub:t})]})]}),a===`paid`&&(0,Y.jsx)(Jn,{memberId:e.id,subscription:t}),a===`complimentary`&&t.tier?.id&&(0,Y.jsx)(Yn,{member:e,tierId:t.tier.id})]})},tr=({member:e,canAddComp:t})=>{let[n,r]=J.useState(!1);if(!e)return(0,Y.jsx)(w,{"data-testid":`member-subscriptions`,children:(0,Y.jsx)(C,{className:`pt-6`,children:(0,Y.jsx)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:(0,Y.jsx)(T,{title:`No subscriptions`,children:(0,Y.jsx)(Oe,{})})})})});let i=Vn(e.subscriptions??[]),a=i.length>0,o=t&&(e.tiers?.length??0)===0,s=o?(0,Y.jsxs)(R,{"data-testid":`add-complimentary`,variant:`outline`,onClick:()=>r(!0),children:[(0,Y.jsx)(B,{className:`mr-1`,size:16}),`Add complimentary subscription`]}):null;return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(w,{"data-testid":`member-subscriptions`,children:(0,Y.jsx)(C,{className:`pt-6`,children:a?(0,Y.jsxs)(Y.Fragment,{children:[i.map(t=>(0,Y.jsxs)(`div`,{className:`flex flex-col`,children:[t.subscriptions.map((n,r)=>(0,Y.jsx)(er,{member:e,showDivider:r>0,sub:n},n.id||`${t.tier.id}-${r}`)),t.subscriptions.length>1&&(0,Y.jsxs)(`div`,{className:`pt-3 text-sm text-muted-foreground`,children:[t.subscriptions.length,` subscriptions`]})]},t.tier.id)),s&&(0,Y.jsx)(`div`,{className:`mt-4 flex justify-center border-t border-border pt-4`,children:s})]}):(0,Y.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-4`,children:[(0,Y.jsx)(T,{title:`No subscriptions`,children:(0,Y.jsx)(Oe,{})}),s]})})}),o&&(0,Y.jsx)(qn,{member:e,open:n,onOpenChange:r})]})};function nr(e){let t=new URLSearchParams(e),n=t.get(`back`);if(n&&n.startsWith(`/members`))return n;let r=t.get(`post`);return r?`/members?post=${encodeURIComponent(r)}`:`/members`}function rr(e){let[t,n]=J.useState(null),r=J.useRef(e);return r.current=e,J.useEffect(()=>{let e=e=>{if(!r.current||e.defaultPrevented||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.button!==0)return;let t=e.target.closest?.(`a[href^="#/"]`);!t||t.hasAttribute(`data-discover`)||(e.preventDefault(),e.stopPropagation(),n(t.getAttribute(`href`)))};return document.addEventListener(`click`,e,!0),()=>document.removeEventListener(`click`,e,!0)},[]),{blockedHref:t,isBlocked:t!==null,proceed:()=>{t&&(n(null),window.location.hash=t)},reset:()=>n(null)}}var ir=`new`,ar=({paidMembersEnabled:e,newslettersUiEnabled:t,engagementEnabled:n})=>{let{member_id:r=``}=d(),i=u(),c=p(),m=nr(i.search),h=r===ir,v=Je(`membersCustomFields`),{data:y,isLoading:b,error:x,refetch:ee}=st(r,{enabled:!!r&&!h,searchParams:{include:v?`tiers,custom_fields`:`tiers`},defaultErrorHandler:!1}),S=y?.members?.[0],te=!h&&!b&&!!x,T=!h&&!b&&!x&&!S,E=Ue(),ce=we(),D=h?ce:E,{data:le}=dt({searchParams:{filter:`type:paid+active:true`,limit:`all`},enabled:e}),ue=(le?.tiers?.length??0)>0,{data:O}=ut({searchParams:{filter:`status:active`,limit:`50`}}),de=O!==void 0,fe=(O?.newsletters?.length??0)>1,pe=(le?.tiers?.length??0)>1,[k,A]=J.useState(void 0),j=J.useRef(void 0),M=J.useRef(void 0),N=J.useRef(!1),P=J.useRef(!1);J.useEffect(()=>{if(h){if(j.current!==ir){j.current=ir,N.current=!1;let e=Q({});M.current=e,A(e)}return}if(!S)return;let e=Q(S);if(j.current!==S.id){j.current=S.id,M.current=e,A(e);return}let t=M.current;M.current=e,A(n=>mn(n,t)?e:n)},[S,h]),J.useEffect(()=>{P.current=!1},[r]),J.useEffect(()=>{if(!h||N.current||!O?.newsletters)return;N.current=!0;let e=nn(O.newsletters);if(e.length===0)return;let t={...M.current??Q({}),newsletters:[...e].sort()};M.current=t,A(t=>t&&{...t,newsletters:[...e].sort()})},[h,O]);let me=h?M.current:S?Q(S):void 0,F=!!k&&!!me&&!s(pn(k),me),I=!!k&&$t(k.email),[L,he]=J.useState(!1);J.useEffect(()=>{he(!1)},[S?.id,h]);let ge=k?en(k.email,L):null,[_e,ve]=J.useState({name:``,email:``});J.useEffect(()=>{if(h){ve({name:``,email:``});return}S&&ve({name:S.name??``,email:S.email??``})},[S?.id,S?.name,S?.email,h]);let z=()=>{k&&ve({name:k.name,email:k.email})},ye=e=>{D.isError&&D.reset(),A(t=>t&&{...t,...e})},be=()=>{if(!(!k||!F||!I||D.isPending)){if(z(),h){ce.mutate({email:k.email.trim(),name:k.name.trim()||void 0,note:k.note.trim()||void 0,labels:k.labels.length?k.labels:void 0,newsletters:N.current?k.newsletters.map(e=>({id:e})):void 0},{onSuccess:e=>{let t=e.members?.[0];if(!t){a.error(`Member couldn’t be created`);return}P.current=!0,a.success(`Member created`),c(`/members/${t.id}`,{replace:!0})},onError:()=>{a.error(`Member couldn’t be created`)}});return}!S||j.current!==S.id||E.mutate(on(S.id,k,Q(S)),{onSuccess:e=>{let t=e.members?.[0];if(t){let e=Q(t);M.current=e,A(e)}a.success(`Member updated`)},onError:()=>{a.error(`Member couldn’t be saved`)}})}};o(D.isPending||F);let xe=l(({currentLocation:e,nextLocation:t})=>!P.current&&F&&e.pathname!==t.pathname),B=rr(F),V=xe.state===`blocked`||B.isBlocked,H=`Save`,Se=`default`,Ce=!0;D.isPending?H=(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{size:`sm`}),(0,Y.jsx)(`span`,{className:`sr-only`,children:`Saving`})]}):F?(H=D.isError?`Retry`:`Save`,Se=D.isError?`destructive`:`default`,Ce=!I):!h&&E.isSuccess&&(H=`Saved`);let U=!!k&&(h||!!S),W=`Member`;return h?W=`New member`:S?W=ke(S):T&&(W=`Member not found`),(0,Y.jsx)(g,{className:`size-full`,children:(0,Y.jsx)(_,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Y.jsxs)(X,{"data-testid":`member-detail`,children:[(0,Y.jsx)(X.Header,{children:(0,Y.jsxs)(lt,{blurredBackground:!1,sticky:!1,children:[(0,Y.jsx)(lt.Left,{children:(0,Y.jsx)(se,{children:(0,Y.jsxs)(re,{children:[(0,Y.jsx)(ie,{children:(0,Y.jsx)(oe,{asChild:!0,children:(0,Y.jsx)(f,{"data-test-link":`members-back`,to:m,children:`Members`})})}),(0,Y.jsx)(ae,{}),(0,Y.jsx)(ie,{children:!h&&b?(0,Y.jsx)(Ve,{className:`h-4 w-40`}):(0,Y.jsx)(ne,{className:`truncate`,"data-testid":`member-detail-title`,children:W})})]})})}),(h||S)&&(0,Y.jsx)(lt.Actions,{children:(0,Y.jsxs)(lt.ActionGroup,{children:[S&&!h&&(0,Y.jsx)(Et,{allowLeaveWithUnsavedChanges:()=>{P.current=!0},member:S},S.id),(0,Y.jsx)(R,{className:`min-w-16`,disabled:Ce,variant:Se,onClick:be,children:H})]})})]})}),(0,Y.jsxs)(X.Body,{children:[te&&(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3`,"data-testid":`member-detail-load-error`,children:[(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`Couldn’t load this member.`}),(0,Y.jsx)(R,{variant:`outline`,onClick:()=>void ee(),children:`Retry`})]}),T&&(0,Y.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Y.jsx)(`p`,{className:`text-muted-foreground`,children:`This member couldn’t be found.`})}),U&&k&&(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col gap-8 lg:flex-row lg:items-start lg:gap-12`,children:[(0,Y.jsx)(An,{draftEmail:_e.email,draftName:_e.name,engagementEnabled:n,member:S}),(0,Y.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-8`,children:[(0,Y.jsx)(w,{children:(0,Y.jsx)(C,{className:`p-6`,children:(0,Y.jsx)(Dn,{disabled:D.isPending,draft:k,emailError:ge,onChange:ye,onEmailBlur:()=>{he(!0),z()},onNameBlur:z})})}),v&&S&&(0,Y.jsx)(Tn,{customFields:S.custom_fields,disabled:D.isPending,memberId:S.id}),t&&(h||S)&&(0,Y.jsx)(jn,{disabled:D.isPending,emailSuppression:S?.email_suppression,memberId:S?.id,subscribedIds:k.newsletters,onChange:e=>ye({newsletters:e})}),e&&(0,Y.jsxs)(`section`,{"aria-labelledby":`member-subscriptions-heading`,className:`flex flex-col gap-3`,children:[(0,Y.jsx)(`h3`,{className:`text-base font-semibold`,id:`member-subscriptions-heading`,children:`Subscriptions`}),(0,Y.jsx)(tr,{canAddComp:ue,member:S})]}),(h||S&&de)&&(0,Y.jsx)(qt,{hasMultipleNewsletters:fe,hasMultipleTiers:pe,memberId:S?.id,paidMembersEnabled:e})]})]})]}),(0,Y.jsx)(rt,{open:V,onOpenChange:e=>{!e&&V&&(xe.reset?.(),B.reset())},children:(0,Y.jsxs)(at,{children:[(0,Y.jsxs)($e,{children:[(0,Y.jsx)(Ye,{children:`Discard unsaved changes?`}),(0,Y.jsx)(Ie,{children:`Your changes will be lost if you leave this member.`})]}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(qe,{children:`Keep editing`}),(0,Y.jsx)(R,{variant:`destructive`,onClick:()=>{B.isBlocked?B.proceed():xe.proceed?.()},children:`Leave`})]})]})})]})})})},or=()=>{let{data:e,isLoading:t}=We({});if(t||!e?.settings)return(0,Y.jsx)(g,{className:`size-full`,children:(0,Y.jsx)(_,{className:`relative flex h-full flex-col`,size:`page`,children:(0,Y.jsx)(X,{children:(0,Y.jsx)(X.Body,{children:(0,Y.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,Y.jsx)(K,{size:`lg`})})})})})});let n=Ee(e.settings,`editor_default_email_recipients`),r=Ee(e.settings,`members_signup_access`);return(0,Y.jsx)(ar,{engagementEnabled:r!==`none`&&n!==`disabled`,newslettersUiEnabled:rn(n),paidMembersEnabled:Ee(e.settings,`paid_members_enabled`)===!0})};export{or as default};