ghost 6.54.0 → 6.55.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 (327) hide show
  1. package/components/ghost-storage-base-3.0.0.tgz +0 -0
  2. package/components/tryghost-adapter-base-cache-0.2.0.tgz +0 -0
  3. package/components/tryghost-adapter-base-scheduling-0.2.0.tgz +0 -0
  4. package/components/tryghost-adapter-base-sso-0.1.1.tgz +0 -0
  5. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  6. package/components/tryghost-kg-default-cards-10.3.3.tgz +0 -0
  7. package/core/boot.js +3 -6
  8. package/core/built/admin/assets/{account-migration-DLvVA5yq.js → account-migration-sjHLx5dy.js} +1 -1
  9. package/core/built/admin/assets/activitypub/{account-migration-DHbZcxGM.js → account-migration-DoYXtnZ8.js} +4 -4
  10. package/core/built/admin/assets/activitypub/activitypub.js +2 -2
  11. package/core/built/admin/assets/activitypub/{bluesky-sharing-zfxUey_L.js → bluesky-sharing-Bxeh6MKW.js} +4 -4
  12. package/core/built/admin/assets/activitypub/{dist-BqkDUQxJ2.js → dist-ByFmDSNP2.js} +64 -63
  13. package/core/built/admin/assets/activitypub/{dist-Ba_QxHHl.js → dist-D8sFfdpC.js} +2 -2
  14. package/core/built/admin/assets/activitypub/{domain-CmwSZLHK.js → domain-CWueFW6q.js} +5 -5
  15. package/core/built/admin/assets/activitypub/{edit-profile-CXdwNmVG.js → edit-profile-BGxPU7N5.js} +3 -3
  16. package/core/built/admin/assets/activitypub/{explore-DfbjzGM1.js → explore-DBK-u0Ch.js} +3 -3
  17. package/core/built/admin/assets/activitypub/{feed-DSEBJOqf.js → feed-Bcir5RQZ.js} +3 -3
  18. package/core/built/admin/assets/activitypub/{field-CY7XVcx6.js → field-BV-CIT3d.js} +2 -2
  19. package/core/built/admin/assets/activitypub/{inbox-DtQ0kytT.js → inbox-yC0nfvzl.js} +4 -4
  20. package/core/built/admin/assets/activitypub/{label-Dw96GQ7u.js → label-DTRS9TDk.js} +2 -2
  21. package/core/built/admin/assets/activitypub/layout-qx-bUL1k.js +1 -0
  22. package/core/built/admin/assets/activitypub/{moderation-Dg_-I-8C.js → moderation-Dwl9t0pb.js} +4 -4
  23. package/core/built/admin/assets/activitypub/{note-Cy1-uKMY.js → note-B-zKsZ7r.js} +3 -3
  24. package/core/built/admin/assets/activitypub/{notifications-B_fvoLIM.js → notifications-DjJZD54t.js} +3 -3
  25. package/core/built/admin/assets/activitypub/{preferences-ByJseZp6.js → preferences-CoU8vs6d.js} +6 -6
  26. package/core/built/admin/assets/activitypub/{profile-BFtbnIjz.js → profile-BAsaJekx.js} +6 -6
  27. package/core/built/admin/assets/activitypub/{routes-Dh3xXfce.js → routes-CLH3OVTP.js} +28 -25
  28. package/core/built/admin/assets/activitypub/{settings-DTgqJPxM.js → settings-DA6pNJ-Q.js} +3 -3
  29. package/core/built/admin/assets/activitypub/{site-CdL9ZLqm.js → site-CQD42Pw5.js} +2 -2
  30. package/core/built/admin/assets/activitypub/{tabs-ogqwoBlb.js → tabs-Cg0saow1.js} +7 -7
  31. package/core/built/admin/assets/activitypub/{use-reply-chain-data-CxonteFD.js → use-reply-chain-data-Br4aOWOh.js} +2 -2
  32. package/core/built/admin/assets/audience-DjEWNhp3.js +1 -0
  33. package/core/built/admin/assets/{automated-emails-Cn87L5Md.js → automated-emails-DRy7qY-J.js} +2 -2
  34. package/core/built/admin/assets/{automations-BP_aHamJ.js → automations-Bx3VcFIL.js} +1 -1
  35. package/core/built/admin/assets/{automations-B7-y3dXt.js → automations-DhKeS_U5.js} +1 -1
  36. package/core/built/admin/assets/{bluesky-sharing-Bh36XPh4.js → bluesky-sharing-ClMd0-Ft.js} +1 -1
  37. package/core/built/admin/assets/{breadcrumb-D34YWnaw.js → breadcrumb-BD0U2ygg.js} +1 -1
  38. package/core/built/admin/assets/{chart-helpers-DbklaJw9.js → chart-helpers-fjQKRVyY.js} +1 -1
  39. package/core/built/admin/assets/checkbox-CWa28lgO.js +1 -0
  40. package/core/built/admin/assets/{chunk.962.b73442b07be930bb5d85.js → chunk.211.6f7328d63c41536451b3.js} +737 -559
  41. package/core/built/admin/assets/{chunk.962.b73442b07be930bb5d85.js.LICENSE.txt → chunk.211.6f7328d63c41536451b3.js.LICENSE.txt} +2 -0
  42. package/core/built/admin/assets/{chunk.589.096f4d0bb775e5229aa9.js → chunk.481.6c7395a49484bb4583aa.js} +41 -38
  43. package/core/built/admin/assets/chunk.524.cffd399783a519e404a9.js +25 -0
  44. package/core/built/admin/assets/chunk.582.eebf0d0b2d202bb746a5.js +27 -0
  45. package/core/built/admin/assets/code-editor-view-CCr0rBWS.js +1 -0
  46. package/core/built/admin/assets/comments-DyUSMUdj.js +1 -0
  47. package/core/built/admin/assets/{date-range-select-B5vSsrpx.js → date-range-select-BFp58EMk.js} +1 -1
  48. package/core/built/admin/assets/{disabled-sources-indicator-NkOIoMue.js → disabled-sources-indicator-CUxMfiPa.js} +1 -1
  49. package/core/built/admin/assets/dist-2Tnz2Yfq.js +1 -0
  50. package/core/built/admin/assets/dist-CjY-f5Z1.js +1 -0
  51. package/core/built/admin/assets/dist-DIC8yz5C.js +1 -0
  52. package/core/built/admin/assets/domain-C0bV2UV8.js +1 -0
  53. package/core/built/admin/assets/dropzone-DlK-K2DQ.js +5 -0
  54. package/core/built/admin/assets/{edit-profile-rvDGrS8J.js → edit-profile-BKT-REJw.js} +1 -1
  55. package/core/built/admin/assets/editor-Dp865O-4.js +8 -0
  56. package/core/built/admin/assets/{explore-BZAZOg5X.js → explore-ClUpJZOp.js} +1 -1
  57. package/core/built/admin/assets/{feed-CFV8xDw9.js → feed-DF92dUMP.js} +1 -1
  58. package/core/built/admin/assets/field-Do7lieBA.js +1 -0
  59. package/core/built/admin/assets/{filter-sources-Fx8wiYYw.js → filter-sources-BV2rnpfA.js} +1 -1
  60. package/core/built/admin/assets/filters-CUXJ2Nm9.js +1 -0
  61. package/core/built/admin/assets/{filters-CGX_pf2N.js → filters-DfbIWc_l.js} +1 -1
  62. package/core/built/admin/assets/{ghost-3063eae29e6c9cc6d6e7131928a27da0.css → ghost-a9c788f6f0b1ea6cf0f14ca4b13f4496.css} +1 -1
  63. package/core/built/admin/assets/{ghost-b1dce91ad3232cc259ee5fbbf9526243.js → ghost-c4057474943effc568c5659ccc4909d7.js} +407 -406
  64. package/core/built/admin/assets/{ghost-dark-c8d0ab7f515b2010c173e23e9b32ea8a.css → ghost-dark-db36d795d21c61426837df40af270966.css} +1 -1
  65. package/core/built/admin/assets/gift-link-modal-f9VIMNDv.js +1 -0
  66. package/core/built/admin/assets/{gift-links-nBxJjZiQ.js → gift-links-CsUhefWG.js} +1 -1
  67. package/core/built/admin/assets/growth-B3I6gNLm.js +1 -0
  68. package/core/built/admin/assets/{Growth-CSaHoSVD.js → growth-CVw1My4S.js} +2 -2
  69. package/core/built/admin/assets/{hooks-BApwwBE0.js → hooks-CixO01lL.js} +1 -1
  70. package/core/built/admin/assets/{inbox-BRp1_aaC.js → inbox-CFBSu4Ed.js} +12 -12
  71. package/core/built/admin/assets/index-9Cw8z3rA.css +1 -0
  72. package/core/built/admin/assets/index-BGG7NckO.js +67 -0
  73. package/core/built/admin/assets/input-group-BSgG_lVw.js +1 -0
  74. package/core/built/admin/assets/input-surface-BpAjZXY5.js +1 -0
  75. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +974 -937
  76. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +28 -28
  77. package/core/built/admin/assets/koenig-lexical/style.css +1 -1
  78. package/core/built/admin/assets/{koenig-lexical-CM7UFNdL.js → koenig-lexical-f8vHRYvz.js} +28 -28
  79. package/core/built/admin/assets/{kpi-card-BrGH6FsT.js → kpi-card-DSap9rAy.js} +1 -1
  80. package/core/built/admin/assets/{kpi-card-CIGyijjx.js → kpi-card-DU0rn9Cj.js} +1 -1
  81. package/core/built/admin/assets/{kpi-helpers-_HRRsklE.js → kpi-helpers-Dz33AV6h.js} +1 -1
  82. package/core/built/admin/assets/{kpi-tabs-BSvh9eoq.js → kpi-tabs-BtTTrKvJ.js} +1 -1
  83. package/core/built/admin/assets/{label-BOR9XdKl.js → label-DS8Mi6G5.js} +1 -1
  84. package/core/built/admin/assets/label-picker-1DvSuLA1.js +1 -0
  85. package/core/built/admin/assets/labels-CDSUt4J_.js +1 -0
  86. package/core/built/admin/assets/layout-yQEi2qDM.js +1 -0
  87. package/core/built/admin/assets/{link-helpers-tOlxmuH5.js → link-helpers-7EYqvvHs.js} +1 -1
  88. package/core/built/admin/assets/member-custom-fields-yOMHyAg9.js +1 -0
  89. package/core/built/admin/assets/member-detail-BAq7gDaa.js +1 -0
  90. package/core/built/admin/assets/members-CQpVFJu4.js +10 -0
  91. package/core/built/admin/assets/modals-ReORvWnu.js +31 -0
  92. package/core/built/admin/assets/moderation-DySbgyUS.js +1 -0
  93. package/core/built/admin/assets/newsletter-CJQvtHqN.js +1 -0
  94. package/core/built/admin/assets/{Newsletters-C5cs6FGo.js → newsletters-B3QQXfGT.js} +1 -1
  95. package/core/built/admin/assets/{newsletters-D1jbtV-h.js → newsletters-BXJbJgA-.js} +1 -1
  96. package/core/built/admin/assets/note-C8kxrz6w.js +1 -0
  97. package/core/built/admin/assets/notifications-CgtSfX7t.js +1 -0
  98. package/core/built/admin/assets/{offers-CrY6nSRR.js → offers-DEniVRD5.js} +1 -1
  99. package/core/built/admin/assets/onboarding-route-4qtziA9d.js +1 -0
  100. package/core/built/admin/assets/overview-Bf2sbznq.js +1 -0
  101. package/core/built/admin/assets/overview-CBfePxcr.js +1 -0
  102. package/core/built/admin/assets/{page-header-C0jVxtS8.js → page-header-B3Wb9Jqv.js} +1 -1
  103. package/core/built/admin/assets/{pages-BbNWFcGj.js → pages-B4goRPUn.js} +1 -1
  104. package/core/built/admin/assets/{post-analytics-Iw7dk1mT.js → post-analytics-We-ko5Cb.js} +1 -1
  105. package/core/built/admin/assets/post-analytics-header-Bmc9su6q.js +1 -0
  106. package/core/built/admin/assets/post-analytics-provider-B6UynTGb.js +1 -0
  107. package/core/built/admin/assets/{post-share-modal-DBfKl2GZ.js → post-share-modal-DFfO93_0.js} +1 -1
  108. package/core/built/admin/assets/{posts-EWpZIjkr.js → posts-DhXE7b6r.js} +1 -1
  109. package/core/built/admin/assets/{preferences-D4EANGoc.js → preferences-DJPfHEGu.js} +2 -2
  110. package/core/built/admin/assets/profile-DqBQp-gT.js +1 -0
  111. package/core/built/admin/assets/{referrers-BCfFYSHc.js → referrers-pmJT4k3-.js} +1 -1
  112. package/core/built/admin/assets/select-C5_xEt5b.js +1 -0
  113. package/core/built/admin/assets/settings-BwiVIXau.js +4 -0
  114. package/core/built/admin/assets/{settings-Bz3RZRmE.js → settings-WXNeWyU1.js} +1 -1
  115. package/core/built/admin/assets/shade-app-B3heOAfz-CGXQwWeO.js +3 -0
  116. package/core/built/admin/assets/{share-modal-CkdTTMJd.js → share-modal-DsgW3wbg.js} +1 -1
  117. package/core/built/admin/assets/social-urls-BQPFEk1_.js +8 -0
  118. package/core/built/admin/assets/{sort-button-DZp9Y2r1.js → sort-button-Bb_FCl7e.js} +1 -1
  119. package/core/built/admin/assets/{source-icon-CHr9qJ2Y.js → source-icon-BeaRxUn9.js} +1 -1
  120. package/core/built/admin/assets/{stats-DGoXZxWE.js → stats-Bjj_kmJ1.js} +1 -1
  121. package/core/built/admin/assets/{stats-view-D2-1L0ms.js → stats-view-BxPbW6K1.js} +1 -1
  122. package/core/built/admin/assets/{step-1-RdahbwyG.js → step-1-B1e3-1F8.js} +1 -1
  123. package/core/built/admin/assets/{step-2-D83PeRwd.js → step-2-C5WaeBJo.js} +1 -1
  124. package/core/built/admin/assets/{step-3-p_Op4wv4.js → step-3-B46iVPwu.js} +2 -2
  125. package/core/built/admin/assets/switch-z5Y6Uzt6.js +1 -0
  126. package/core/built/admin/assets/{table-B8LgTQJZ.js → table-CB-4_HBJ.js} +1 -1
  127. package/core/built/admin/assets/tabs-CCEgKYzq.js +1 -0
  128. package/core/built/admin/assets/{tags-B4l891z2.js → tags-Cg2VJGmG.js} +1 -1
  129. package/core/built/admin/assets/textarea-Bjccvh_E.js +1 -0
  130. package/core/built/admin/assets/{tiers-BgYLWRJv.js → tiers-DYsa4DCo.js} +1 -1
  131. package/core/built/admin/assets/{toggle-group-DNXDkAwf.js → toggle-group-b3IlxvhV.js} +1 -1
  132. package/core/built/admin/assets/{topic-filter-DZGjEcz3.js → topic-filter-DAFT87tQ.js} +1 -1
  133. package/core/built/admin/assets/{use-analytics-data-CaT8RirX.js → use-analytics-data-S0FTd43s.js} +1 -1
  134. package/core/built/admin/assets/use-filter-params-Gpoq2E1L.js +1 -0
  135. package/core/built/admin/assets/{use-growth-stats-9Db2CuJe.js → use-growth-stats-CIaiHOVb.js} +1 -1
  136. package/core/built/admin/assets/{use-post-referrers-BV54YcQS.js → use-post-referrers-Cq2vBPrA.js} +1 -1
  137. package/core/built/admin/assets/{use-reply-chain-data-DuYZGDan.js → use-reply-chain-data-DBDRtGu-.js} +1 -1
  138. package/core/built/admin/assets/{use-simple-pagination-8fTua9Nt.js → use-simple-pagination-CjYNxdwe.js} +1 -1
  139. package/core/built/admin/assets/{use-tinybird-query-Dz156HvZ.js → use-tinybird-query-falHAtuK.js} +1 -1
  140. package/core/built/admin/assets/{use-tinybird-token-C9RUdL_n.js → use-tinybird-token-D7-8ND1y.js} +1 -1
  141. package/core/built/admin/assets/{users-CcSCQFcQ.js → users-Dkv8NQZe.js} +1 -1
  142. package/core/built/admin/assets/{virtual-list-BCvP0YF-.js → virtual-list-CvnC9zF2.js} +1 -1
  143. package/core/built/admin/assets/web-B_5GZRvH.js +1 -0
  144. package/core/built/admin/assets/web-jFYWCKDn.js +2 -0
  145. package/core/built/admin/index.html +14 -10
  146. package/core/frontend/services/proxy.js +10 -1
  147. package/core/frontend/services/routing/router-manager.js +14 -14
  148. package/core/frontend/services/routing/static-routes-router.js +8 -10
  149. package/core/server/adapters/storage/LocalFilesStorage.js +13 -11
  150. package/core/server/adapters/storage/LocalFilesStorage.ts +24 -0
  151. package/core/server/adapters/storage/LocalImagesStorage.js +14 -12
  152. package/core/server/adapters/storage/LocalImagesStorage.ts +24 -0
  153. package/core/server/adapters/storage/LocalMediaStorage.js +13 -11
  154. package/core/server/adapters/storage/LocalMediaStorage.ts +24 -0
  155. package/core/server/adapters/storage/LocalStorageBase.js +107 -167
  156. package/core/server/adapters/storage/LocalStorageBase.ts +342 -0
  157. package/core/server/adapters/storage/utils.js +36 -50
  158. package/core/server/adapters/storage/utils.ts +60 -0
  159. package/core/server/api/endpoints/automation-action-links.js +68 -0
  160. package/core/server/api/endpoints/automation-action-links.ts +46 -0
  161. package/core/server/api/endpoints/db.js +6 -0
  162. package/core/server/api/endpoints/index.js +4 -0
  163. package/core/server/api/endpoints/members.js +25 -28
  164. package/core/server/api/endpoints/pages.js +6 -1
  165. package/core/server/api/endpoints/posts.js +11 -2
  166. package/core/server/api/endpoints/settings.js +0 -2
  167. package/core/server/api/endpoints/utils/serializers/output/mappers/comments.js +4 -1
  168. package/core/server/api/endpoints/utils/serializers/output/members.js +18 -87
  169. package/core/server/api/endpoints/utils/serializers/output/utils/url.js +11 -1
  170. package/core/server/data/exporter/export-filename.js +2 -1
  171. package/core/server/data/importer/importers/data/revue-subscriber-importer.js +6 -10
  172. package/core/server/data/importer/importers/json-to-html.js +24 -4
  173. package/core/server/data/migrations/versions/6.55/2026-07-27-11-25-44-add-to-hash-to-redirects.js +51 -0
  174. package/core/server/data/migrations/versions/6.55/2026-07-28-12-08-00-remove-routes-hash-from-settings.js +5 -0
  175. package/core/server/data/schema/commands.js +5 -0
  176. package/core/server/data/schema/default-settings/default-settings.json +0 -4
  177. package/core/server/data/schema/schema.js +5 -1
  178. package/core/server/lib/image/image-size.js +3 -17
  179. package/core/server/lib/image/image-utils.js +15 -1
  180. package/core/server/lib/request-external.js +1 -1
  181. package/core/server/models/user.js +46 -70
  182. package/core/server/services/auth/session/session-service.js +28 -1
  183. package/core/server/services/automations/automations-api.js +21 -6
  184. package/core/server/services/automations/automations-api.ts +25 -6
  185. package/core/server/services/automations/automations-repository.ts +19 -0
  186. package/core/server/services/automations/database-automations-repository.js +116 -28
  187. package/core/server/services/automations/database-automations-repository.ts +118 -9
  188. package/core/server/services/automations/database-date.js +10 -0
  189. package/core/server/services/automations/database-date.ts +5 -0
  190. package/core/server/services/automations/poll.js +5 -2
  191. package/core/server/services/automations/poll.ts +7 -2
  192. package/core/server/services/automations/scheduler-poll-time.js +40 -0
  193. package/core/server/services/automations/scheduler-poll-time.ts +38 -0
  194. package/core/server/services/automations/service.js +15 -3
  195. package/core/server/services/automations/service.ts +16 -3
  196. package/core/server/services/comments/comments-service-emails.js +14 -8
  197. package/core/server/services/comments/comments-service.js +9 -4
  198. package/core/server/services/email-rendering/partials/email-wrapper.hbs +3 -1
  199. package/core/server/services/email-service/email-service-wrapper.js +6 -1
  200. package/core/server/services/email-service/email-templates/partials/styles.hbs +8 -0
  201. package/core/server/services/email-service/newsletter-email-event-storage.js +41 -10
  202. package/core/server/services/lib/dynamic-redirect-manager.js +12 -3
  203. package/core/server/services/link-redirection/link-redirect-repository.js +41 -4
  204. package/core/server/services/link-redirection/link-redirect.js +2 -0
  205. package/core/server/services/link-redirection/link-redirect.ts +3 -1
  206. package/core/server/services/link-redirection/link-redirects-service.js +38 -2
  207. package/core/server/services/link-tracking/click-event.js +3 -0
  208. package/core/server/services/link-tracking/index.js +38 -6
  209. package/core/server/services/link-tracking/link-click-repository.js +30 -9
  210. package/core/server/services/link-tracking/link-click-tracking-service.js +44 -3
  211. package/core/server/services/member-attribution/outbound-link-tagger.js +3 -1
  212. package/core/server/services/member-welcome-emails/member-welcome-email-renderer.js +19 -4
  213. package/core/server/services/member-welcome-emails/service.js +11 -3
  214. package/core/server/services/members/{importer → import-export}/config.js +4 -9
  215. package/core/server/services/members/{importer → import-export}/config.ts +4 -9
  216. package/core/server/services/members/import-export/csv/formula.js +16 -0
  217. package/core/server/services/members/import-export/csv/formula.ts +14 -0
  218. package/core/server/services/members/import-export/csv/index.js +12 -0
  219. package/core/server/services/members/import-export/csv/index.ts +3 -0
  220. package/core/server/services/members/import-export/csv/parse.js +64 -0
  221. package/core/server/services/members/import-export/csv/parse.ts +69 -0
  222. package/core/server/services/members/import-export/csv/serialize.js +13 -0
  223. package/core/server/services/members/import-export/csv/serialize.ts +18 -0
  224. package/core/server/services/members/import-export/export/exporter.js +202 -0
  225. package/core/server/services/members/import-export/export/exporter.ts +325 -0
  226. package/core/server/services/members/import-export/import/completion-email.js +84 -0
  227. package/core/server/services/members/import-export/import/completion-email.ts +141 -0
  228. package/core/server/services/members/import-export/import/importer.js +297 -0
  229. package/core/server/services/members/import-export/import/importer.ts +468 -0
  230. package/core/server/services/members/import-export/import/reader.js +32 -0
  231. package/core/server/services/members/import-export/import/reader.ts +33 -0
  232. package/core/server/services/members/import-export/import/row.js +33 -0
  233. package/core/server/services/members/import-export/import/row.ts +52 -0
  234. package/core/server/services/members/import-export/import/spool.js +30 -0
  235. package/core/server/services/members/import-export/import/spool.ts +38 -0
  236. package/core/server/services/members/import-export/index.js +99 -0
  237. package/core/server/services/members/import-export/index.ts +137 -0
  238. package/core/server/services/members/members-api/controllers/router-controller.js +7 -0
  239. package/core/server/services/members/service.js +25 -20
  240. package/core/server/services/members-custom-fields/values-service.js +19 -7
  241. package/core/server/services/members-custom-fields/values-service.ts +19 -7
  242. package/core/server/services/mentions/service.js +5 -1
  243. package/core/server/services/posts/posts-exporter.js +6 -4
  244. package/core/server/services/posts/posts-service.js +2 -2
  245. package/core/server/services/route-settings/activation-bridge.js +59 -49
  246. package/core/server/services/route-settings/activation-bridge.ts +91 -51
  247. package/core/server/services/route-settings/dynamic-routing-service.js +22 -51
  248. package/core/server/services/route-settings/index.js +1 -16
  249. package/core/server/services/settings/settings-service.js +0 -18
  250. package/core/server/services/themes/storage.js +9 -0
  251. package/core/server/services/themes/theme-storage.js +1 -1
  252. package/core/server/services/url/url-service-facade.js +1 -1
  253. package/core/server/services/url/url-service-facade.ts +8 -1
  254. package/core/server/web/api/endpoints/admin/routes.js +1 -0
  255. package/core/shared/config/defaults.json +2 -1
  256. package/core/shared/express.js +6 -1
  257. package/core/shared/labs.js +2 -1
  258. package/package.json +11 -11
  259. package/pnpm-lock.yaml +18 -18
  260. package/pnpm-workspace.yaml +8 -7
  261. package/components/tryghost-adapter-base-scheduling-0.1.1.tgz +0 -0
  262. package/core/built/admin/assets/Overview-j4NaeUNm.js +0 -1
  263. package/core/built/admin/assets/Web-_fD935OX.js +0 -2
  264. package/core/built/admin/assets/activitypub/layout-IdVq3lRy.js +0 -1
  265. package/core/built/admin/assets/audience-BKRdsFmy.js +0 -1
  266. package/core/built/admin/assets/checkbox-DA4-1UiI.js +0 -1
  267. package/core/built/admin/assets/chunk.524.45e0875f41b71e46e849.js +0 -25
  268. package/core/built/admin/assets/chunk.582.51defd4b009f0de8d4d5.js +0 -27
  269. package/core/built/admin/assets/code-editor-view-BKBrkffZ.js +0 -1
  270. package/core/built/admin/assets/comments-CzVNIT8b.js +0 -1
  271. package/core/built/admin/assets/constants-c-JNF9c2.js +0 -1
  272. package/core/built/admin/assets/dist-CT46_f_J.js +0 -1
  273. package/core/built/admin/assets/domain-B7_n5nfx.js +0 -1
  274. package/core/built/admin/assets/dropzone-DcuJEEUf.js +0 -5
  275. package/core/built/admin/assets/editor-BCiIyFjm.js +0 -8
  276. package/core/built/admin/assets/field-BW-M2Zwp.js +0 -1
  277. package/core/built/admin/assets/filters-DtcXMZDU.js +0 -1
  278. package/core/built/admin/assets/gift-link-modal-Bk8qpnMw.js +0 -1
  279. package/core/built/admin/assets/growth-Ck2s3JjR.js +0 -1
  280. package/core/built/admin/assets/index-BBf502Wg.js +0 -69
  281. package/core/built/admin/assets/index-BCCZKxP2.css +0 -1
  282. package/core/built/admin/assets/input-group-DjuYnNCd.js +0 -1
  283. package/core/built/admin/assets/label-picker-BdNAWuUX.js +0 -1
  284. package/core/built/admin/assets/labels-Cyayfd-e.js +0 -1
  285. package/core/built/admin/assets/layout-Bw4GnxXp.js +0 -1
  286. package/core/built/admin/assets/member-custom-fields-DvFyamLu.js +0 -1
  287. package/core/built/admin/assets/member-detail-Cg2vTqvJ.js +0 -1
  288. package/core/built/admin/assets/members-DsPxYAVm.js +0 -10
  289. package/core/built/admin/assets/modals-Bf_fyvHZ.js +0 -31
  290. package/core/built/admin/assets/moderation-Dlp7M5sa.js +0 -1
  291. package/core/built/admin/assets/multi-select-combobox-CH1o8XXQ.js +0 -1
  292. package/core/built/admin/assets/newsletter-CQ5CAYUI.js +0 -1
  293. package/core/built/admin/assets/note-BrAZ7Z0o.js +0 -1
  294. package/core/built/admin/assets/notifications-BnbHLOPC.js +0 -1
  295. package/core/built/admin/assets/onboarding-route-eU146kuA.js +0 -1
  296. package/core/built/admin/assets/overview-BpbaK-xu.js +0 -1
  297. package/core/built/admin/assets/post-analytics-header-D9pJ4iNm.js +0 -1
  298. package/core/built/admin/assets/post-analytics-provider-BDqcfBor.js +0 -1
  299. package/core/built/admin/assets/profile-dJ44Bn_W.js +0 -1
  300. package/core/built/admin/assets/select--2uVN9_-.js +0 -1
  301. package/core/built/admin/assets/settings-SD9bxIpt.js +0 -4
  302. package/core/built/admin/assets/social-urls-BvFZwYcE.js +0 -8
  303. package/core/built/admin/assets/switch-qp518gFQ.js +0 -1
  304. package/core/built/admin/assets/tabs-D3ZOYkM7.js +0 -1
  305. package/core/built/admin/assets/textarea-CTlb3Uu6.js +0 -1
  306. package/core/built/admin/assets/use-filter-params-DeQ8sX4N.js +0 -1
  307. package/core/built/admin/assets/web-DTZnnUGr.js +0 -1
  308. package/core/server/services/mail/templates/newsletter.html +0 -876
  309. package/core/server/services/members/csv/index.js +0 -10
  310. package/core/server/services/members/csv/index.ts +0 -3
  311. package/core/server/services/members/csv/parse.js +0 -94
  312. package/core/server/services/members/csv/parse.ts +0 -111
  313. package/core/server/services/members/csv/types.js +0 -2
  314. package/core/server/services/members/csv/types.ts +0 -39
  315. package/core/server/services/members/csv/unparse.js +0 -69
  316. package/core/server/services/members/csv/unparse.ts +0 -79
  317. package/core/server/services/members/exporter/query.js +0 -233
  318. package/core/server/services/members/importer/index.js +0 -30
  319. package/core/server/services/members/importer/labels.js +0 -125
  320. package/core/server/services/members/importer/members-csv-importer.js +0 -520
  321. package/core/server/services/route-settings/default-settings-manager.js +0 -63
  322. package/core/server/services/route-settings/route-settings.js +0 -170
  323. package/core/server/services/route-settings/settings-loader.js +0 -60
  324. package/core/server/services/route-settings/settings-path-manager.js +0 -47
  325. package/core/server/services/route-settings/validate.js +0 -440
  326. /package/core/server/services/members/{importer → import-export/import}/email-template.js +0 -0
  327. /package/core/server/services/members/{importer/members-csv-importer-stripe-utils.js → import-export/import/stripe-utils.js} +0 -0
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{n as r}from"./dist-Ndy-PuGN.js";import{i,n as a,r as o,t as s}from"./tabs-D3ZOYkM7.js";import{Ft as c,Ir as l,It as u,Kt as d,Ln as f,Q as p,R as m,Rn as h,Ts as g,V as _,Vs as v,_t as y,bt as b,tr as x,tt as S,ut as C,vt as w,yt as T}from"./index-BBf502Wg.js";import"./layout-Bw4GnxXp.js";var E=e(t(),1),D=n(),O=()=>{let{data:e,isLoading:t}=T(`index`),{data:n,isLoading:O}=b(`index`),k=t?[,,,,,].fill({apId:``,name:``,handle:``,avatarUrl:``}):e?.pages.flatMap(e=>e.accounts)??[],A=O?[,,,,,].fill({apId:``,name:``}):n?.pages.flatMap(e=>e.domains)??[],j=w(`index`),M=u(`index`),[N,P]=(0,E.useState)(new Set),F=y(`index`),I=c(`index`),[L,R]=(0,E.useState)(new Set),[z,B]=(0,E.useState)(null),V=d(),H=e=>{P(t=>{let n=new Set([...t]);return n.add(e.apId),n}),M.mutate(e),r.success(`User unblocked`)},U=e=>{P(t=>{let n=new Set([...t]);return n.delete(e.apId),n}),j.mutate(e),r.success(`User blocked`)},W=e=>{R(t=>{let n=new Set([...t]);return n.add(e.url),n}),I.mutate({url:e.url}),r.success(`Domain unblocked`)},G=e=>{R(t=>{let n=new Set([...t]);return n.delete(e.url),n}),F.mutate({url:e.url}),r.success(`Domain blocked`)};return(0,D.jsx)(m,{children:(0,D.jsxs)(`div`,{className:`mx-auto max-w-[620px] py-[min(4vh,48px)]`,children:[(0,D.jsx)(`div`,{className:`flex items-center justify-between gap-8`,children:(0,D.jsx)(v,{children:`Moderation`})}),(0,D.jsx)(`div`,{className:`mt-6`,children:(0,D.jsxs)(s,{defaultValue:`blocked_users`,variant:`underline`,children:[(0,D.jsxs)(o,{children:[(0,D.jsx)(i,{value:`blocked_users`,children:`Blocked users`}),(0,D.jsx)(i,{value:`blocked_domains`,children:`Blocked domains`})]}),(0,D.jsx)(a,{className:`mt-2`,value:`blocked_users`,children:!t&&k.length===0?(0,D.jsxs)(f,{children:[(0,D.jsx)(h,{children:(0,D.jsx)(g,{})}),(0,D.jsx)(`div`,{className:`mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center`,children:(0,D.jsx)(`p`,{children:`When you block someone, they won't be able to follow you or interact with your content on the social web.`})})]}):k.map((e,n)=>(0,D.jsx)(S,{actor:e,isCurrentUser:!0,children:(0,D.jsx)(`div`,{children:(0,D.jsxs)(_,{onClick:t?void 0:()=>p(e.handle,V),children:[(0,D.jsx)(C,{author:{icon:{url:e.avatarUrl},name:e.name,handle:e.handle}}),(0,D.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,D.jsx)(`span`,{className:`block truncate font-semibold text-black dark:text-white`,children:t?(0,D.jsx)(x,{className:`w-24`}):e.name}),(0,D.jsx)(`span`,{className:`block truncate text-sm text-gray-600`,children:t?(0,D.jsx)(x,{className:`w-40`}):e.handle})]}),N.has(e.apId)?(0,D.jsx)(l,{className:`ml-auto min-w-[90px] text-red hover:bg-red/5! hover:text-red-400`,variant:`outline`,onClick:t=>{t.stopPropagation(),U(e)},children:`Block`}):t?(0,D.jsx)(`div`,{className:`ml-auto w-16`,children:(0,D.jsx)(x,{})}):(0,D.jsx)(l,{className:`ml-auto min-w-[90px]`,variant:`destructive`,onClick:t=>{t.stopPropagation(),H(e)},onMouseEnter:()=>B(e.apId),onMouseLeave:()=>B(null),children:z===e.apId?`Unblock`:`Blocked`})]})})},e.apId?e.apId:`loading-${n}`))}),(0,D.jsx)(a,{className:`mt-[11px]`,value:`blocked_domains`,children:!O&&A.length===0?(0,D.jsxs)(f,{children:[(0,D.jsx)(h,{children:(0,D.jsx)(g,{})}),(0,D.jsx)(`div`,{className:`mt-2 flex max-w-[400px] flex-col items-center gap-1 text-center`,children:(0,D.jsx)(`p`,{children:`When you block a domain, all users from that domain won't be able to follow you or interact with your content.`})})]}):A.map((e,t)=>(0,D.jsxs)(_,{children:[(0,D.jsx)(`div`,{className:`flex min-w-0 flex-col`,children:(0,D.jsx)(`span`,{className:`block truncate font-semibold text-black dark:text-white`,children:O?(0,D.jsx)(x,{className:`w-48`}):new URL(e.url).hostname})}),L.has(e.url)?(0,D.jsx)(l,{className:`ml-auto min-w-[90px] text-red hover:bg-red/5! hover:text-red-400`,variant:`outline`,onClick:()=>G(e),children:`Block`}):O?(0,D.jsx)(`div`,{className:`ml-auto w-16`,children:(0,D.jsx)(x,{})}):(0,D.jsx)(l,{className:`ml-auto min-w-[90px]`,variant:`destructive`,onClick:()=>W(e),onMouseEnter:()=>B(e.url),onMouseLeave:()=>B(null),children:z===e.url?`Unblock`:`Blocked`})]},e.url?e.url:`loading-${t}`))})]})})]})})};export{O as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{c as r}from"./dist-DGzPJ_bO.js";import{a as i,c as a,i as o,l as s,n as c,o as ee,s as l}from"./switch-qp518gFQ.js";import{ls as u,po as d}from"./index-BBf502Wg.js";var f=e(t(),1),p=n(),m={searchPlaceholder:`Search...`,noResultsFound:`No results found.`,loading:`Loading...`,loadMore:`Load more`};function h(e,t){let n=t.trim().toLowerCase();return n?e.filter(e=>e.label.toLowerCase().includes(n)||e.detail?.toLowerCase().includes(n)):e}function g(e,t,n,r,i,a,o){if(e)return{...e,shouldClientFilter:o??e.shouldClientFilter};let s=!!t,c=t?.useOptions({query:r,selectedValues:i});return{options:s?c?.options??[]:n??[],isInitialLoad:s?c?.isInitialLoad??!1:a&&(n?.length??0)===0,isSearching:s?c?.isSearching??!1:a&&(n?.length??0)>0,hasMore:s?c?.hasMore??!1:!1,isLoadingMore:s?c?.isLoadingMore??!1:!1,loadMore:s?c?.loadMore??(()=>{}):()=>{},shouldClientFilter:o??!s}}function _({optionSource:e,options:t,values:n,onChange:_,valueSource:v,searchable:y=!0,isLoading:b=!1,maxSelections:x,isMultiSelect:S=!0,onClose:C,autoCloseOnSelect:w=!1,className:T,searchInputClassName:E,shouldFilter:D,onSearchChange:O,i18n:k,renderItem:A,groupBy:j,header:M,footer:N}){let P=(0,f.useMemo)(()=>({...m,...k}),[k]),[F,I]=(0,f.useState)(``),L=(0,f.useCallback)(t=>{I(t),e?.onSearchChange?.(t),O?.(t)},[O,e]),R=g(e,v,t,F,n,b,D),z=R.options,[B,V]=(0,f.useState)([]),H=(0,f.useMemo)(()=>z.filter(e=>n.includes(e.value)),[z,n]);(0,f.useEffect)(()=>{if(n.length===0){V([]);return}H.length>0&&V(e=>{let t=[];for(let r of n){let n=H.find(e=>e.value===r)??e.find(e=>e.value===r);n&&t.push(n)}return t})},[H,n]);let U=(0,f.useMemo)(()=>n.length===0?[]:B.length>0?B:H,[B,n.length,H]),W=(0,f.useMemo)(()=>h(U,F),[F,U]),G=(0,f.useMemo)(()=>z.filter(e=>!n.includes(e.value)),[z,n]),K=(0,f.useMemo)(()=>{let e=new Map;for(let t of G){let n=j?.(t),r=typeof n==`string`?n:n?.key,i=typeof n==`string`?n:n?.label,a=e.get(r);e.set(r,{label:i,options:[...a?.options??[],t]})}return[...e.entries()].map(([e,t])=>({key:e,...t}))},[j,G]),q=(0,f.useCallback)(e=>{_(n.filter(t=>t!==e.value))},[_,n]),J=e=>{_([]),C?.()},Y=e=>{let t=[...n,e.value];x&&t.length>x||(_(t),w&&C?.())},X=e=>{_([e.value]),C?.()},Z=S?q:J,Q=S?Y:X,te=(0,f.useCallback)(()=>L(``),[L]),ne=(e,t)=>{if(t)return;let n=e.detail?` - ${e.detail}`:``;return e.label+n},$=A??(({option:e,isSelected:t,onSelect:n})=>(0,p.jsxs)(l,{className:`group flex items-center gap-2`,value:ne(e,t),onSelect:n,children:[e.icon,(0,p.jsxs)(`div`,{className:`flex flex-col overflow-hidden`,children:[(0,p.jsx)(`span`,{className:`truncate text-accent-foreground`,title:e.label,children:e.label}),e.detail&&(0,p.jsx)(`span`,{className:`truncate text-sm text-muted-foreground`,title:e.detail,children:e.detail})]}),(0,p.jsx)(u,{className:r(`ms-auto text-primary`,!t&&`opacity-0`)})]},String(e.value)));return(0,p.jsx)(`div`,{className:r(`w-full`,T),children:(0,p.jsxs)(c,{shouldFilter:R.shouldClientFilter,children:[M?.({selectedOptions:U,onDeselect:q}),y&&(0,p.jsxs)(`div`,{className:`relative`,children:[(0,p.jsx)(ee,{className:r(`h-(--control-height) pr-8 text-sm`,E),placeholder:P.searchPlaceholder,value:F,onValueChange:L}),R.isSearching&&(0,p.jsx)(d,{className:`pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 animate-spin text-muted-foreground`})]}),(0,p.jsxs)(a,{className:`outline-hidden`,children:[R.isInitialLoad?(0,p.jsxs)(`div`,{className:`flex items-center justify-center py-6 text-sm text-muted-foreground`,children:[(0,p.jsx)(d,{className:`mr-2 size-4 animate-spin`}),P.loading]}):(0,p.jsx)(o,{children:P.noResultsFound}),W.length>0&&(0,p.jsx)(i,{heading:P.selectedHeading,children:W.map(e=>$({option:e,isSelected:!0,onSelect:()=>Z(e)}))}),G.length>0&&(0,p.jsxs)(p.Fragment,{children:[W.length>0&&(0,p.jsx)(s,{}),K.map(e=>(0,p.jsx)(i,{heading:e.label,children:e.options.map(e=>$({option:e,isSelected:!1,onSelect:()=>Q(e)}))},e.key===void 0?`ungrouped`:`group:${e.key}`))]}),R.hasMore&&(0,p.jsxs)(p.Fragment,{children:[(W.length>0||G.length>0)&&(0,p.jsx)(s,{}),(0,p.jsx)(`div`,{className:`p-1.5`,children:(0,p.jsxs)(`button`,{className:`flex w-full items-center justify-center rounded-xs px-2 py-1.5 text-sm text-muted-foreground hover:bg-accent hover:text-accent-foreground disabled:opacity-50`,disabled:R.isLoadingMore,type:`button`,onClick:R.loadMore,children:[R.isLoadingMore&&(0,p.jsx)(d,{className:`mr-2 size-4 animate-spin`}),R.isLoadingMore?P.loading:P.loadMore]})})]})]}),N?.({searchInput:F,clearSearch:te})]})})}export{_ as t};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{i as r}from"./hooks-BApwwBE0.js";import{i,r as a}from"./stats-DGoXZxWE.js";import{t as o}from"./posts-EWpZIjkr.js";import{o as s}from"./post-helpers-C5OQMBoi.js";import{m as c}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as l}from"./router-provider-C1R4AZ2o.js";import{_ as u,f as d,m as f,p}from"./dist-DGzPJ_bO.js";import{i as m,r as h,t as g}from"./tabs-D3ZOYkM7.js";import{a as _,i as v,n as y,o as b,r as x,t as S}from"./card-DGoDJzrn.js";import{c as C,l as w,n as T,o as ee,r as E,s as te,t as ne,u as re}from"./data-list-16rkJYYi.js";import{i as ie,n as ae,o as oe,r as se,t as ce}from"./use-simple-pagination-8fTua9Nt.js";import{$n as le,Ir as D,Os as ue,Ur as O,Va as de,Vr as k,Wn as A,Ws as fe,Xn as j,Zn as M,Zs as pe,da as N,ia as P,nr as me,os as F,ra as I,rr as he}from"./index-BBf502Wg.js";import{t as ge}from"./member-route-0Aa52Ntz.js";import{a as L,i as R,n as z,r as B,t as V}from"./kpi-card-CIGyijjx.js";import{r as _e,t as ve}from"./post-analytics-header-D9pJ4iNm.js";import{n as ye}from"./post-analytics-context-D0Mw-Pmv.js";import{a as H,i as U,n as W,o as G,r as K}from"./link-helpers-tOlxmuH5.js";var q=r({dataType:`FeedbackResponseType`,path:e=>`/feedback/${e}/`}),J=e(t(),1),Y=(e,t)=>{let{data:n,isLoading:r,error:i}=q(e,{searchParams:{limit:`50`,...t===void 0?{}:{score:t.toString()}}});return{feedback:(0,J.useMemo)(()=>n?.feedback?n.feedback:[],[n]),isLoading:r,error:i}},X=n(),be=({feedbackStats:e})=>{let{postId:t}=c(),n=l(),[r,i]=(0,J.useState)(`positive`),{feedback:a,isLoading:o}=Y(t||``,+(r===`positive`)),{totalPages:s,paginatedData:d,nextPage:C,previousPage:w,hasNextPage:T,hasPreviousPage:ee}=ce({data:a,itemsPerPage:9}),E=o;return(0,X.jsxs)(S,{children:[(0,X.jsxs)(_,{className:`pb-5`,children:[(0,X.jsx)(b,{children:`Feedback`}),(0,X.jsx)(x,{children:`What did your readers think?`})]}),e.totalFeedback>0?(0,X.jsxs)(y,{className:`pb-3`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,X.jsx)(g,{className:`pb-3`,defaultValue:`positive`,value:r,variant:`button`,onValueChange:e=>i(e),children:(0,X.jsxs)(h,{className:`gap-1`,children:[(0,X.jsx)(m,{className:`h-7`,value:`positive`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,X.jsx)(I,{size:14,strokeWidth:1.25}),(0,X.jsx)(`span`,{className:`hidden font-medium sm:visible! sm:inline!`,children:`More like this`}),(0,X.jsx)(`span`,{className:`font-semibold tracking-tight`,children:p(e.positiveFeedback/e.totalFeedback)})]})}),(0,X.jsx)(m,{className:`h-7`,value:`negative`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,X.jsx)(P,{size:14,strokeWidth:1.25}),(0,X.jsx)(`span`,{className:`hidden font-medium sm:visible! sm:inline!`,children:`Less like this`}),(0,X.jsx)(`span`,{className:`font-semibold tracking-tight`,children:p(e.negativeFeedback/e.totalFeedback)})]})})]})}),(0,X.jsx)(fe,{className:`mr-2 mb-3 lg:hidden xl:visible! xl:block!`,children:`Date`})]}),(0,X.jsx)(A,{}),E?(0,X.jsx)(me,{className:`mt-3`,lines:3}):d&&d.length>0?(0,X.jsx)(`div`,{className:`flex w-full flex-col py-3`,children:d.map(e=>(0,X.jsxs)(`div`,{className:`flex h-10 w-full items-center justify-between gap-3 rounded-sm border-none px-2 text-sm hover:cursor-pointer hover:bg-accent`,onClick:()=>{n(`/members/${e.member.id}`,{crossApp:!0})},children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 font-medium`,children:[(0,X.jsxs)(j,{className:`size-7`,children:[e.member?.avatar_image&&(0,X.jsx)(`img`,{className:`absolute aspect-square size-full`,src:e.member?.avatar_image}),(0,X.jsx)(M,{className:`text-white`,style:{backgroundColor:`${u(k(e.member),`45`,`55`)}`},children:O(e.member)})]}),k(e.member)]}),(0,X.jsx)(`div`,{className:`whitespace-nowrap text-muted-foreground`,children:f(e.created_at)})]},e.id))}):(0,X.jsx)(`div`,{className:`flex h-full items-center justify-center py-8 text-center text-sm text-muted-foreground`,children:(0,X.jsxs)(`div`,{children:[`No `,r===`positive`?`positive`:`negative`,` feedback yet`]})})]}):(0,X.jsxs)(y,{className:`flex grow flex-col items-center justify-center text-center text-sm text-muted-foreground`,children:[(0,X.jsx)(`div`,{children:`No members have given feedback yet`}),(0,X.jsx)(`div`,{children:`When someone does, you'll see their response here.`})]}),e.totalFeedback>0&&(0,X.jsx)(v,{className:`grow-0`,children:(0,X.jsxs)(`div`,{className:`flex w-full items-center justify-between gap-3`,children:[(0,X.jsxs)(D,{variant:`outline`,onClick:()=>{let e=`(feedback.post_id:'${t}'+feedback.score:1)`,i=`(feedback.post_id:'${t}'+feedback.score:0)`,a=`${encodeURIComponent(e)}&post=${t}`,o=`${encodeURIComponent(i)}&post=${t}`;n(`/members?filter=${r===`positive`?a:o}`,{crossApp:!0})},children:[`View all`,(0,X.jsx)(N,{})]}),s>1&&(0,X.jsx)(ae,{className:`pb-0`,children:(0,X.jsxs)(se,{children:[(0,X.jsx)(oe,{disabled:!ee,onClick:w}),(0,X.jsx)(ie,{disabled:!T,onClick:C})]})})]})})]})},xe=()=>{let{mutateAsync:e,isPending:t}=U();return{editLinks:e,isEditLinksLoading:t}},Se=e=>{let{data:t,isLoading:n}=o(e),{data:r,isLoading:s}=o(e,{searchParams:{include:`count.positive_feedback,count.negative_feedback`}}),c=(0,J.useMemo)(()=>t?.posts[0],[t]),l=(0,J.useMemo)(()=>r?.posts[0],[r]),u=(0,J.useMemo)(()=>c?{sent:c.email?.email_count||0,opened:c.email?.opened_count||0,clicked:c.count?.clicks||0,openedRate:c.email?.opened_count?c.email.opened_count/c.email.email_count:0,clickedRate:c.count?.clicks&&c.email?.email_count?c.count.clicks/c.email.email_count:0}:{sent:0,opened:0,clicked:0,openedRate:0,clickedRate:0},[c]),d=(0,J.useMemo)(()=>{if(!l?.count)return{positiveFeedback:0,negativeFeedback:0,totalFeedback:0};let e=l.count.positive_feedback||0,t=l.count.negative_feedback||0;return{positiveFeedback:e,negativeFeedback:t,totalFeedback:e+t}},[l]),f=(0,J.useMemo)(()=>c?.newsletter?.id,[c]),{data:p,isLoading:m}=a({searchParams:f?{newsletter_id:f}:{},enabled:!!f}),h=(0,J.useMemo)(()=>p?.stats?p.stats.map(e=>e.post_id):[],[p]),{data:g,isLoading:_}=i({searchParams:f&&h.length>0?{newsletter_id:f,post_ids:h.join(`,`)}:{},enabled:!!f&&h.length>0}),v=(0,J.useMemo)(()=>{if(!p?.stats)return;let e=p.stats,t=g?.stats||[],n=new Map;t.forEach(e=>{n.set(e.post_id,e)});let r=e.map(e=>{let t=n.get(e.post_id);return{...e,total_clicks:t?.total_clicks||0,click_rate:t?.click_rate||0}});return{...p,stats:r}},[p,g]),y=m||_,{data:b,isLoading:x,refetch:S}=H({searchParams:{filter:`post_id:'${e}'`}}),C=(0,J.useMemo)(()=>{if(!v||!v.stats)return{openRate:0,clickRate:0};let e=v.stats;if(e.length===0)return{openRate:0,clickRate:0};let t=e.reduce((e,t)=>e+(t.open_rate||0),0),n=e.reduce((e,t)=>e+(t.click_rate||0),0);return{openRate:Number((t/e.length).toFixed(2)),clickRate:Number((n/e.length).toFixed(2))}},[v]),w=(0,J.useMemo)(()=>K(b),[b]);return{post:c,stats:u,feedbackStats:d,averageStats:(0,J.useMemo)(()=>({openedRate:C.openRate,clickedRate:C.clickRate}),[C]),topLinks:w,refetchTopLinks:S,isLoading:n||s||y||x}},Ce=({breakpoints:e={sm:1080,md:1280,lg:1360}}={})=>{let[t,n]=(0,J.useState)(`md`);return(0,J.useEffect)(()=>{let t=()=>{let t=window.innerWidth;t<e.sm?n(`sm`):t<e.md?n(`md`):n(`lg`)};return t(),window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)},[e]),{chartSize:t,isSmall:t===`sm`,isMedium:t===`md`,isLarge:t===`lg`}},we=()=>(0,X.jsx)(`div`,{className:`absolute top-1/2 -right-4 z-10 hidden size-8 -translate-y-1/2 items-center justify-center rounded-full border bg-background text-muted-foreground md:visible! md:flex!`,children:(0,X.jsx)(F,{className:`ml-0.5`,size:16,strokeWidth:1.5})}),Te=({dataColor:e,value:t,avgValue:n})=>(0,X.jsxs)(`div`,{className:`absolute top-6 left-1/2 z-50 flex w-[200px] -translate-x-1/2 flex-col items-stretch gap-1.5 rounded-md bg-background px-4 py-2 text-sm opacity-0 shadow-md transition-all group-hover/block:top-3 group-hover/block:opacity-100`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`div`,{className:`size-2 rounded-full bg-chart-blue opacity-50`,style:{backgroundColor:e}}),`This newsletter`]}),(0,X.jsx)(`div`,{className:`text-right font-mono`,children:t})]}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,children:[(0,X.jsx)(`div`,{className:`size-2 rounded-full bg-chart-gray opacity-80`}),`Average`]}),(0,X.jsx)(`div`,{className:`text-right font-mono`,children:n})]})]}),Ee=()=>{let e=l(),[t,n]=(0,J.useState)(null),[r,i]=(0,J.useState)(``),a=(0,J.useRef)(null),o=(0,J.useRef)(null),{chartSize:c}=Ce(),{appSettings:u}=pe(),{emailTrackClicks:f,emailTrackOpens:m}=u?.analytics||{},{post:h,isPostLoading:g,postId:O}=ye(),k=t=>e(ge({filter:t}),{crossApp:!0}),j=h,M=s(j);(0,J.useEffect)(()=>{!g&&!M&&e(`/posts/analytics/${O}`)},[e,O,g,M]);let{stats:N,averageStats:P,topLinks:F,isLoading:I,refetchTopLinks:H}=Se(O),{editLinks:U}=xe(),K=(0,J.useMemo)(()=>{if(!j?.count)return{positiveFeedback:0,negativeFeedback:0,totalFeedback:0};let e=j.count.positive_feedback||0,t=j.count.negative_feedback||0;return{positiveFeedback:e,negativeFeedback:t,totalFeedback:e+t}},[j]),q=(0,J.useMemo)(()=>j?.newsletter?.feedback_enabled===!0,[j]),Y=(0,J.useMemo)(()=>K.totalFeedback>0?!0:q,[K.totalFeedback,q]),Ee=e=>{let t=W(F,e);t&&(n(e),i(t.link.to))},De=()=>{if(!t)return;let e=W(F,t);if(!e)return;let a=r.trim();if(a===``||a===e.link.to){n(null),i(``);return}U({originalUrl:e.link.originalTo,editedUrl:r,postId:O},{onSuccess:()=>{n(null),i(``),H()}})},{totalPages:Oe,paginatedData:ke,nextPage:Ae,previousPage:je,hasNextPage:Me,hasPreviousPage:Ne}=ce({data:F,itemsPerPage:10});(0,J.useEffect)(()=>{if(t&&a.current){a.current.focus();let e=W(F,t),s=t=>{o.current&&!o.current.contains(t.target)&&r===e?.link.to&&(n(null),i(``))};return document.addEventListener(`mousedown`,s),()=>{document.removeEventListener(`mousedown`,s)}}},[t,r,F]);let Z=I||g,Pe=[{datatype:`Sent`,value:1,fill:`url(#gradientPurple)`,color:`var(--chart-purple)`}],Fe={percentage:{label:`O`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Ie=[{datatype:`Average`,value:P.openedRate,fill:`url(#gradientGray)`,color:`var(--chart-gray)`},{datatype:`This newsletter`,value:N.openedRate,fill:`url(#gradientBlue)`,color:`var(--chart-blue)`}],Le={percentage:{label:`Opened`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Re=[{datatype:`Average`,value:P.clickedRate,fill:`url(#gradientGray)`,color:`var(--chart-gray)`},{datatype:`This newsletter`,value:N.clickedRate,fill:`url(#gradientTeal)`,color:`var(--chart-teal)`}],ze={percentage:{label:`Clicked`},Average:{label:`Average`},"This newsletter":{label:`This newsletter`}},Q=`grid-cols-3`,$=`aspect-[16/10] w-full max-w-[320px] sm:aspect-[2/1] md:aspect-[10/14] md:max-w-none lg:aspect-square`;return(!f||!m)&&(Q=`grid-cols-2`,$=`aspect-[16/10] w-full max-w-[320px] sm:aspect-[2/1] md:aspect-square md:max-w-none lg:aspect-[15/10]`),!f&&!m&&(Q=`grid-cols-1`,$=`aspect-square w-full sm:aspect-[16/10] md:max-w-[320px] md:max-h-[320px] lg:aspect-[12/10]`),(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ve,{currentTab:`Newsletter`}),(0,X.jsx)(_e,{children:(0,X.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 ${Y&&f&&`lg:grid-cols-2`}`,children:[(0,X.jsxs)(S,{className:Y&&f?`lg:col-span-2`:``,children:[(0,X.jsxs)(_,{className:`hidden`,children:[(0,X.jsx)(b,{children:`Newsletters`}),(0,X.jsx)(x,{children:`How did this post perform`})]}),Z?(0,X.jsx)(y,{className:`h-[25vw] p-6`,children:(0,X.jsx)(le,{})}):(0,X.jsxs)(y,{className:`p-0`,children:[(0,X.jsxs)(`div`,{className:`grid ${Q} items-stretch border-b`,children:[(0,X.jsxs)(V,{className:`group relative isolate grow p-3 md:px-6 md:py-5`,children:[(0,X.jsx)(R,{onClick:()=>{k(`emails.post_id:${O}`)},children:`View members →`}),(0,X.jsxs)(B,{onClick:()=>{k(`emails.post_id:${O}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-purple opacity-50`}),`Sent`]}),(0,X.jsx)(z,{children:(0,X.jsx)(L,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:d(N.sent)})})]}),m&&(0,X.jsxs)(V,{className:`p-3 md:px-6 md:py-5`,children:[(0,X.jsx)(R,{onClick:()=>{k(`opened_emails.post_id:${O}`)},children:`View members →`}),(0,X.jsxs)(B,{onClick:()=>{k(`opened_emails.post_id:${O}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-blue opacity-50`}),`Opened`]}),(0,X.jsx)(z,{children:(0,X.jsx)(L,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:d(N.opened)})})]}),f&&(0,X.jsxs)(V,{className:`group relative isolate grow p-3 md:px-6 md:py-5`,children:[(0,X.jsx)(R,{onClick:()=>{k(`clicked_links.post_id:${O}`)},children:`View members →`}),(0,X.jsxs)(B,{onClick:()=>{k(`clicked_links.post_id:${O}`)},children:[(0,X.jsx)(`div`,{className:`ml-0.5 size-[9px] rounded-full bg-chart-teal opacity-50`}),`Clicked`]}),(0,X.jsx)(z,{children:(0,X.jsx)(L,{className:`text-xl leading-none sm:text-2xl md:text-[2.6rem]`,children:d(N.clicked)})})]})]}),(0,X.jsxs)(`div`,{className:`$ mx-auto grid grid-cols-1 items-center justify-center gap-4 transition-all md:gap-0 ${Q===`grid-cols-2`&&`md:grid-cols-2`} ${Q===`grid-cols-3`&&`md:grid-cols-3`}`,children:[(0,X.jsxs)(`div`,{className:`relative border-r-0 px-6 ${(m||f)&&`md:border-r`}`,children:[(0,X.jsx)(G,{className:$,config:Fe,data:Pe,percentageLabel:`Sent`,percentageValue:p(1),size:c,tooltip:!1}),(m||f)&&(0,X.jsx)(we,{})]}),m&&(0,X.jsxs)(`div`,{className:`group/block relative border-r-0 px-6 transition-all hover:bg-muted/25 ${f&&`md:border-r`}`,children:[(0,X.jsx)(Te,{avgValue:p(P.openedRate),dataColor:`var(--chart-blue)`,value:p(N.openedRate)}),(0,X.jsx)(G,{className:$,config:Le,data:Ie,percentageLabel:`Open rate`,percentageValue:p(N.openedRate),size:c,tooltip:!1}),f&&(0,X.jsx)(we,{})]}),f&&(0,X.jsxs)(`div`,{className:`group/block relative px-6 transition-all hover:bg-muted/25`,children:[(0,X.jsx)(Te,{avgValue:p(P.clickedRate),dataColor:`var(--chart-teal)`,value:p(N.clickedRate)}),(0,X.jsx)(G,{className:$,config:ze,data:Re,percentageLabel:`Click rate`,percentageValue:p(N.clickedRate),size:c,tooltip:!1})]})]})]})]}),Y&&(0,X.jsx)(be,{feedbackStats:K}),f&&(0,X.jsxs)(S,{className:`group/datalist overflow-hidden`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,X.jsxs)(_,{className:`p-0`,children:[(0,X.jsx)(b,{children:`Newsletter clicks`}),(0,X.jsx)(x,{children:`Which links resonated with your readers`})]}),(0,X.jsx)(fe,{className:`mr-2`,children:`Members`})]}),Z?(0,X.jsxs)(y,{className:`p-6 pt-0`,children:[(0,X.jsx)(A,{}),(0,X.jsx)(me,{className:`mt-6`})]}):(0,X.jsxs)(y,{className:`pb-0`,children:[(0,X.jsx)(A,{}),F.length>0?(0,X.jsx)(ne,{className:``,children:(0,X.jsx)(E,{children:ke?.map(e=>{let n=N.clicked>0?e.count/N.clicked:0,s=e.link.link_id,c=e.link.title,l=e.link.to,u=e.link.edited;return(0,X.jsxs)(re,{children:[t!==s&&(0,X.jsx)(T,{style:{width:`${n?Math.round(n*100):0}%`}}),(0,X.jsx)(ee,{className:`w-full`,children:t===s?(0,X.jsxs)(`div`,{ref:o,className:`flex w-full items-center gap-2`,children:[(0,X.jsx)(he,{ref:a,className:`z-50 h-7 w-full border-border bg-background text-sm`,value:r,onChange:e=>i(e.target.value)}),(0,X.jsx)(D,{size:`sm`,onClick:De,children:`Update`})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(D,{className:`mr-2 shrink-0 bg-background`,size:`sm`,variant:`outline`,onClick:()=>Ee(s),children:(0,X.jsx)(de,{})}),(0,X.jsx)(`a`,{className:`block truncate font-medium hover:underline`,href:l,rel:`noreferrer`,target:`_blank`,title:c,children:c}),u&&(0,X.jsx)(`span`,{className:`ml-1 text-gray-500`,children:`(edited)`})]})}),(0,X.jsxs)(te,{children:[(0,X.jsx)(C,{children:d(e.count||0)}),(0,X.jsx)(w,{children:p(n)})]})]},s)})})}):(0,X.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`You have no links in your post.`})]}),!Z&&F.length>1&&(0,X.jsx)(v,{children:(0,X.jsxs)(`div`,{className:`flex w-full items-start justify-between gap-3`,children:[(0,X.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 pl-4 text-sm text-green`,children:[(0,X.jsx)(ue,{size:20,strokeWidth:1.5}),`Sent a broken link? You can update it!`]}),Oe>1&&(0,X.jsx)(ae,{className:`pb-0`,children:(0,X.jsxs)(se,{children:[(0,X.jsx)(oe,{disabled:!Ne,onClick:je}),(0,X.jsx)(ie,{disabled:!Me,onClick:Ae})]})})]})})]})]})})]})};export{Ee as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{m as r}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{s as i}from"./router-provider-C1R4AZ2o.js";import{Do as a,Ht as o,I as s,Kt as c,L as l,Q as u,R as d,Wt as f,Y as p,Z as m,er as h,tr as g,tt as _,ut as v}from"./index-BBf502Wg.js";import{i as y,n as b,r as x,t as S}from"./use-reply-chain-data-DuYZGDan.js";var C=e(t(),1),w=n(),T=()=>(0,w.jsx)(`div`,{className:`h-px w-full bg-gray-200 dark:bg-gray-950`}),E=()=>{let{postId:e}=r(),{canGoBack:t}=i(),[n,E]=(0,C.useState)(new Set),[D,O]=(0,C.useState)(new Set),[k,A]=(0,C.useState)(new Set),[j,M]=(0,C.useState)(!1),N=(0,C.useRef)(null),P=(0,C.useRef)(null),F=(0,C.useRef)(null),I=(0,C.useRef)(null),L=c(),{threadParents:R,post:z,processedReplies:B,isLoading:V,loadMoreChildren:H,loadMoreChildReplies:U,hasMoreChildren:W,hasMoreChildReplies:G}=S(decodeURIComponent(e??``),{includeAncestors:!0}),K=z?.object,q=K?.replyCount??0,[J,Y]=(0,C.useState)(!1);if((0,C.useEffect)(()=>{P.current&&R.length>0&&!J&&(P.current.scrollIntoView({behavior:`instant`,block:`start`}),Y(!0))},[R,J]),(0,C.useEffect)(()=>{F.current&&F.current.disconnect();let e=document.querySelector(`[data-scrollable-container]`);if(e)return F.current=new IntersectionObserver(async e=>{if(e[0].isIntersecting&&W&&!j){M(!0);try{await H()}catch(e){console.error(`Failed to load more top-level replies:`,e)}finally{M(!1)}}},{root:e,rootMargin:`200px`}),I.current&&F.current.observe(I.current),()=>{F.current&&F.current.disconnect()}},[W,j,H]),V)return(0,w.jsx)(d,{children:(0,w.jsxs)(`div`,{className:`mx-auto flex max-w-[620px] flex-col items-center gap-3 pt-9 lg:px-8`,children:[(0,w.jsxs)(`div`,{className:`flex w-full items-center gap-3`,children:[(0,w.jsx)(g,{className:`size-10 rounded-full`}),(0,w.jsxs)(`div`,{className:`grow pt-1`,children:[(0,w.jsx)(g,{className:`w-24`}),(0,w.jsx)(g,{className:`w-3/5`})]})]}),(0,w.jsxs)(`div`,{className:`mb-7 w-full`,children:[(0,w.jsx)(g,{}),(0,w.jsx)(g,{className:`w-4/5`}),(0,w.jsx)(g,{})]}),(0,w.jsx)(T,{}),(0,w.jsxs)(`div`,{className:`flex w-full items-center gap-3 py-3`,children:[(0,w.jsx)(g,{className:`block size-full`,containerClassName:`size-10 rounded-full overflow-hidden`}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(g,{className:`w-52`}),(0,w.jsx)(g,{className:`w-28`})]})]}),(0,w.jsx)(T,{})]})});if(!z)return(0,w.jsx)(d,{children:(0,w.jsx)(`div`,{className:`mx-auto mt-4 flex w-full max-w-[620px] flex-col items-center`,children:(0,w.jsxs)(l,{children:[(0,w.jsx)(s,{children:(0,w.jsx)(a,{})}),(0,w.jsx)(`div`,{children:`Error loading note.`})]})})});function X(){}function Z(e){E(t=>{let n=new Set(t);return n.has(e)?n.delete(e):(n.add(e),O(t=>{let n=new Set(t);return n.add(e),n})),n})}async function Q(e,t){if(!k.has(e)){A(t=>new Set(t).add(e));try{U&&await U(t)}catch(e){console.error(`Failed to load more replies for chain:`,e)}finally{A(t=>{let n=new Set(t);return n.delete(e),n})}}}return(0,w.jsx)(d,{children:(0,w.jsx)(`div`,{className:`mx-auto flex h-full max-w-[620px] flex-col`,children:(0,w.jsx)(`div`,{className:`relative flex-1`,children:(0,w.jsx)(`div`,{className:`grow overflow-y-auto`,children:(0,w.jsxs)(`div`,{className:`mx-auto px-8 pt-5 pb-10 max-lg:px-0`,children:[!R.length&&(0,w.jsx)(_,{actor:z.actor,isCurrentUser:z.object.authored,children:(0,w.jsxs)(`div`,{className:`col-[2/3] mx-auto flex w-full cursor-pointer items-center gap-3 ${t?`pt-10 max-md:pt-5`:`pt-5`}`,children:[(0,w.jsx)(`div`,{className:`relative z-10`,children:(0,w.jsx)(v,{author:z.actor,showFollowButton:!z.object.authored&&!z.actor.followedByMe})}),(0,w.jsxs)(`div`,{className:`relative z-10 flex w-full min-w-0 cursor-pointer flex-col overflow-visible text-[1.5rem]`,onClick:e=>{u(z.actor,L,e)},children:[(0,w.jsx)(`div`,{className:`flex w-full`,children:(0,w.jsx)(`span`,{className:`min-w-0 truncate font-semibold whitespace-nowrap hover:underline`,children:z.actor.name})}),(0,w.jsxs)(`div`,{className:`flex w-full`,children:[(0,w.jsx)(`span`,{className:`truncate text-gray-700 after:mx-1 after:font-normal after:text-gray-700 after:content-["·"]`,children:f(z.actor)}),(0,w.jsx)(`span`,{className:`text-gray-700`,children:m(K,!K.authored)})]})]})]})}),R.map(e=>e.object.type===`Tombstone`?(0,w.jsx)(x,{last:!1}):(0,w.jsx)(p,{actor:e.actor,allowDelete:!1,commentCount:e.object.replyCount??0,last:!1,layout:`reply`,likeCount:e.object.likeCount??0,object:e.object,repostCount:e.object.repostCount??0,type:`Note`,onClick:()=>{L(`/${e.object.type===`Article`?`reader`:`notes`}/${encodeURIComponent(e.object.id)}`)}})),(0,w.jsx)(`div`,{ref:P,className:`${t?`scroll-mt-[12px]`:`scroll-mt-[124px]`}`,children:(0,w.jsxs)(`div`,{className:`${R.length>0&&`min-h-[calc(100vh-52px)]`}`,children:[(0,w.jsx)(p,{actor:z.actor,allowDelete:!1,commentCount:q,last:!0,layout:`modal`,likeCount:K.likeCount??0,object:K,repostCount:K.repostCount,showHeader:R.length>0,showStats:!0,type:`Note`}),(0,w.jsx)(y,{object:K}),(0,w.jsx)(T,{}),(0,w.jsxs)(`div`,{ref:N,children:[B.map((e,t)=>{let r=t===B.length-1,i=e.mainReply.id,a=n.has(i),s=D.has(i),c=k.has(i),l=e.chain.length>0;return(0,w.jsxs)(C.Fragment,{children:[(0,w.jsx)(p,{actor:e.mainReply.actor,allowDelete:e.mainReply.object.authored,commentCount:e.mainReply.object.replyCount??0,isChainParent:l,isPending:o(e.mainReply.id),last:!l,layout:`reply`,likeCount:e.mainReply.object.likeCount??0,object:e.mainReply.object,parentId:K.id,repostCount:e.mainReply.object.repostCount??0,type:`Note`,onClick:()=>{L(`/notes/${encodeURIComponent(e.mainReply.id)}`)},onDelete:X}),l&&e.chain[0]&&(0,w.jsx)(p,{actor:e.chain[0].actor,allowDelete:e.chain[0].object.authored,commentCount:e.chain[0].object.replyCount??0,isChainContinuation:!0,isPending:o(e.chain[0].id),last:e.chain.length===1,layout:`reply`,likeCount:e.chain[0].object.likeCount??0,object:e.chain[0].object,parentId:K.id,repostCount:e.chain[0].object.repostCount??0,type:`Note`,onClick:()=>{L(`/notes/${encodeURIComponent(e.chain[0].id)}`)},onDelete:X},e.chain[0].id),l&&a&&e.chain.slice(1).map((n,r)=>{let i=r===e.chain.slice(1).length-1,a=G&&G(t),s=i&&a;return(0,w.jsx)(p,{actor:n.actor,allowDelete:n.object.authored,commentCount:n.object.replyCount??0,isChainContinuation:!0,isPending:o(n.id),last:i&&!s,layout:`reply`,likeCount:n.object.likeCount??0,object:n.object,parentId:K.id,repostCount:n.object.repostCount??0,type:`Note`,onClick:()=>{L(`/notes/${encodeURIComponent(n.id)}`)},onDelete:X},n.id)}),l&&e.chain.length>1&&!a&&(0,w.jsx)(b,{variant:`expand`,onClick:()=>Z(i)}),l&&a&&s&&G&&G(t)&&(0,w.jsx)(b,{loading:c,variant:`loadMore`,onClick:()=>Q(i,t)}),!r&&(0,w.jsx)(T,{})]},e.mainReply.id)}),j&&(0,w.jsx)(`div`,{className:`flex flex-col items-center justify-center text-center`,children:(0,w.jsx)(h,{size:`md`})})]}),W&&(0,w.jsx)(`div`,{ref:I,className:`h-1`})]})})]})})})})})};export{E as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{f as r}from"./dist-DGzPJ_bO.js";import{Cs as i,Da as a,Ds as o,Eo as s,F as c,I as l,Ir as u,Kt as d,L as f,Ot as p,Q as m,R as h,Ui as g,Ut as _,X as v,Z as y,cs as b,ct as x,er as S,et as C,ka as w,lt as T,st as E,tr as D,tt as O,ut as k}from"./index-BBf502Wg.js";import"./layout-Bw4GnxXp.js";var A=e(t(),1),j=n(),M=({notificationType:e,size:t=`lg`,className:n})=>{let r,i=``,c=`white`,l=t===`sm`?13:20,u=t===`sm`?2:1.5;switch(e){case`follow`:r=(0,j.jsx)(g,{className:`-mt-0.5 -mr-0.5 ${t===`sm`&&`size-[11px]`}`,color:c,size:l,strokeWidth:u}),i=`bg-blue-600`;break;case`like`:r=(0,j.jsx)(s,{className:`${t===`sm`?`size-[11px]`:`mt-px size-5`}`,color:c,strokeWidth:u}),i=`bg-pink-600`;break;case`reply`:r=(0,j.jsx)(a,{className:`mr-px mb-px`,color:c,size:l,strokeWidth:u}),i=`bg-purple-600`;break;case`repost`:r=(0,j.jsx)(w,{color:c,size:l,strokeWidth:u}),i=`bg-green-500`;break;case`mention`:r=(0,j.jsx)(o,{className:`${t===`sm`?`size-[12px]`:`size-5`}`,color:c,size:l,strokeWidth:u}),i=`bg-orange-500`;break}return(0,j.jsx)(`div`,{className:`flex ${t===`sm`?`size-5`:`size-9`} items-center justify-center rounded-full ${i} ${n&&n}`,children:r})},N=A.createContext(void 0),P=({isGrouped:e,centerAlign:t,children:n,onClick:r,url:i,className:a})=>(0,j.jsx)(N.Provider,{value:{onClick:r,url:i},children:(0,j.jsx)(`div`,{className:`group relative -mx-4 -my-px ${e?`grid`:`flex`} ${t?`items-center`:`items-start`} break-anywhere cursor-pointer grid-cols-[auto_1fr] gap-x-4 gap-y-2.5 rounded-lg px-4 py-5 text-left hover:bg-gray-100 ${a}`,role:`button`,onClick:r,children:n})});P.Icon=({size:e=`lg`,type:t})=>(0,j.jsx)(`div`,{className:`col-start-1 row-start-1`,children:(0,j.jsx)(M,{notificationType:t,size:e})}),P.Avatars=({children:e})=>(0,j.jsx)(`div`,{className:`col-start-2 row-start-1 flex gap-2`,children:e}),P.Content=({children:e})=>(0,j.jsx)(`div`,{className:`col-start-2 row-start-2 -mt-0.5 grow overflow-hidden`,children:e});var F=()=>(0,j.jsx)(`div`,{className:`h-px w-full bg-gray-200 dark:bg-gray-950`});function I(e){let t=1440*60*1e3,n=new Date(e).getTime();return(Math.floor(n/t)*t).toString()}function L(e){let t={},n=null,r=0;return e.forEach(e=>{e.type!==n&&(r+=1,n=e.type);let i=``,a=`_${I(e.createdAt)}`,o=`_seq${r}`;switch(e.type){case`like`:e.post?.id&&(i=`like_${e.post.id}${a}${o}`);break;case`reply`:i=`reply_${e.id}`;break;case`repost`:e.post?.id&&(i=`repost_${e.post.id}${a}${o}`);break;case`follow`:i=`follow_${a}${o}`;break;case`mention`:i=`mention_${e.id}`;break}t[i]||(t[i]={id:e.id,type:e.type,actors:[],post:e.post,inReplyTo:e.inReplyTo,createdAt:e.createdAt}),t[i].actors.find(t=>t.id===e.actor.id)||t[i].actors.push(e.actor)}),Object.values(t)}var R=({group:e})=>{let[t,...n]=e.actors,i=n.length>0,a=n.length,o=d(),s=(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(O,{actor:t,align:`center`,isCurrentUser:!1,children:(0,j.jsx)(`span`,{className:`cursor-pointer font-semibold hover:underline text-black dark:text-white`,onClick:e=>{e?.stopPropagation(),t.handle&&m(t.handle,o)},children:t.name})}),i&&` and ${r(a)} ${a>1?`others`:`other`}`]});switch(e.type){case`follow`:return(0,j.jsxs)(j.Fragment,{children:[s,` followed you`]});case`like`:return(0,j.jsxs)(j.Fragment,{children:[s,` liked your `,e.post?.type===`article`?`post`:`note`]});case`repost`:return(0,j.jsxs)(j.Fragment,{children:[s,` reposted your `,e.post?.type===`article`?`post`:`note`]});case`reply`:if(e.inReplyTo&&typeof e.inReplyTo!=`string`)return s;break;case`mention`:return s}return(0,j.jsx)(j.Fragment,{})},z=({content:e,className:t,stripTags:n=[]})=>{let r=(0,A.useRef)(null),i=d();return(0,A.useEffect)(()=>{let e=r.current;if(!e)return;let t=e=>{let t=e.target.closest(`a[data-profile]`);if(t){let n=t.getAttribute(`data-profile`)?.trim();/^@([\w.-]+)@([\w-]+\.[\w.-]+[a-zA-Z])$/.test(n||``)&&n&&(e.preventDefault(),e.stopPropagation(),m(n,i))}};return e.addEventListener(`click`,t),()=>{e.removeEventListener(`click`,t)}},[i,e]),(0,j.jsx)(`div`,{dangerouslySetInnerHTML:{__html:E(x(e||``,n))},ref:r,className:t})},B=()=>{let[e,t]=A.useState({}),n=d(),a=e=>{t(t=>({...t,[e]:!t[e]}))},o=()=>{},{data:s,error:g,fetchNextPage:w,hasNextPage:O,isFetchingNextPage:N,isLoading:I}=p(`index`),B=s?.pages.flatMap(e=>L(e.notifications))??Array(10).fill({actors:[{}]}),V=(0,A.useRef)(null),H=(0,A.useRef)(null);(0,A.useEffect)(()=>(V.current&&V.current.disconnect(),V.current=new IntersectionObserver(e=>{e[0].isIntersecting&&O&&!N&&w()}),H.current&&V.current.observe(H.current),()=>{V.current&&V.current.disconnect()}),[O,N,w]);let U=(e,t)=>{switch(e.type){case`like`:e.post&&n(`/${e.post.type===`article`?`reader`:`notes`}/${encodeURIComponent(e.post.id)}`);break;case`reply`:e.post&&e.inReplyTo&&n(`/notes/${encodeURIComponent(e.post.id)}`);break;case`repost`:e.post&&n(`/${e.post.type===`article`?`reader`:`notes`}/${encodeURIComponent(e.post.id)}`);break;case`follow`:e.actors.length>1?a(e.id||`${e.type}_${t}`):e.actors[0]?.handle&&m(e.actors[0].handle,n);break;case`mention`:e.post&&n(`/notes/${encodeURIComponent(e.post.id)}`);break}};return g&&_(g)?(0,j.jsx)(c,{errorCode:g.code,statusCode:g.statusCode}):(0,j.jsx)(h,{children:(0,j.jsxs)(`div`,{className:`z-0 flex w-full flex-col items-center`,children:[I===!1&&B.length===0&&(0,j.jsxs)(f,{children:[(0,j.jsx)(l,{children:(0,j.jsx)(i,{})}),`Quiet for now, but not for long! When someone likes, boosts, or replies to you, you'll find it here.`]}),B.length>0&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`div`,{className:`my-8 flex w-full max-w-[620px] flex-col max-md:mt-5`,children:B.map((t,i)=>(0,j.jsxs)(A.Fragment,{children:[(0,j.jsxs)(P,{centerAlign:t.actors.length<2&&t.type===`follow`,className:`hover:bg-gray-100 dark:hover:bg-gray-950`,isGrouped:t.actors.length>1,onClick:()=>U(t,i),children:[I?(0,j.jsx)(D,{className:`rounded-full`,containerClassName:`flex h-10 w-10`}):t.actors.length>1?(0,j.jsx)(P.Icon,{type:t.type}):(0,j.jsxs)(`div`,{className:`relative`,children:[(0,j.jsx)(k,{author:{icon:{url:t.actors[0].avatarUrl||``},name:t.actors[0].name,handle:t.actors[0].handle},size:`notification`},t.actors[0].id),(0,j.jsx)(M,{className:`absolute -right-1 -bottom-1 z-10 border-2 border-white dark:border-black`,notificationType:t.type,size:`sm`})]}),t.actors.length>1&&(0,j.jsx)(P.Avatars,{children:(0,j.jsxs)(`div`,{className:`flex w-full flex-col`,children:[(0,j.jsxs)(`div`,{className:`relative flex w-fit items-center pl-2`,children:[!e[t.id||`${t.type}_${i}`]&&t.actors.slice(0,5).map(e=>(0,j.jsx)(k,{author:{icon:{url:e.avatarUrl||``},name:e.name,handle:e.handle},className:`-ml-2 bg-[#F3F3F3]! outline-2 outline-white group-hover:bg-[#EDEEF0]! group-hover:outline-gray-100 dark:outline-black group-hover:dark:outline-gray-950`,size:`notification`},e.id)),t.actors.length>5&&!e[t.id||`${t.type}_${i}`]&&(0,j.jsx)(`div`,{className:`absolute right-[28px] z-10 flex size-9 items-center justify-center rounded-full bg-black/50 text-base font-semibold tracking-tightest text-white`,children:`+${r(t.actors.length-5)}`}),t.actors.length>1&&(0,j.jsxs)(u,{className:`group flex items-center gap-0.5 text-gray-700 hover:bg-transparent hover:text-black dark:text-gray-600 dark:hover:text-white ${e[t.id||`${t.type}_${i}`]?`ml-[-20px]`:`ml-0 w-[28px]`}`,variant:`ghost`,onClick:e=>{e?.stopPropagation(),a(t.id||`${t.type}_${i}`)},children:[(0,j.jsx)(b,{className:`${e[t.id||`${t.type}_${i}`]?`rotate-180`:``}`,size:20,strokeWidth:1.5}),e[t.id||`${t.type}_${i}`]?`Hide`:(0,j.jsx)(`span`,{className:`sr-only`,children:`Show all`})]})]}),(0,j.jsx)(`div`,{className:`overflow-hidden transition-all duration-300 ease-in-out ${e[t.id||`${t.type}_${i}`]?`mb-2 max-h-[1384px] opacity-100`:`max-h-0 opacity-0`}`,children:e[t.id||`${t.type}_${i}`]&&t.actors.length>1&&(0,j.jsx)(`div`,{className:`flex flex-col gap-2 pt-2`,children:t.actors.map(e=>(0,j.jsxs)(`div`,{className:`group/item break-anywhere flex items-center justify-between gap-4`,onClick:t=>{t?.stopPropagation(),e.handle&&m(e.handle,n)},children:[(0,j.jsxs)(`div`,{className:`flex min-w-0 items-center`,children:[(0,j.jsx)(k,{author:{icon:{url:e.avatarUrl||``},name:e.name,handle:e.handle},size:`xs`}),(0,j.jsx)(`span`,{className:`ml-2 line-clamp-1 text-base font-semibold group-hover/item:underline dark:text-white`,children:e.name}),(0,j.jsx)(`span`,{className:`ml-1 line-clamp-1 text-base text-gray-700 dark:text-gray-600`,children:e.handle})]}),t.type===`follow`&&!e.followedByMe&&e.handle&&(0,j.jsx)(T,{following:!1,handle:e.handle,variant:`link`})]},e.id))})})]})}),(0,j.jsxs)(P.Content,{children:[(0,j.jsx)(`div`,{children:I?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(D,{}),(0,j.jsx)(D,{className:`w-full max-w-60`})]}):(0,j.jsxs)(`div`,{className:`flex justify-between`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,j.jsx)(`span`,{className:`truncate`,children:(0,j.jsx)(R,{group:t})}),t.actors.length<2&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:`mt-px text-[8px] text-gray-700 dark:text-gray-600`,children:`•`}),(0,j.jsx)(`span`,{className:`mt-0.5 text-sm text-gray-700 dark:text-gray-600`,children:y(t,!1)})]})]}),t.actors.length===1&&(t.type===`follow`||t.type===`reply`||t.type===`mention`)&&!t.actors[0].followedByMe&&t.actors[0].handle&&(0,j.jsx)(T,{following:!1,handle:t.actors[0].handle,variant:`link`})]})}),(t.type===`reply`&&t.inReplyTo||t.type===`mention`||t.type===`like`&&!t.post?.name&&t.post?.content||t.type===`repost`&&!t.post?.name&&t.post?.content)&&(t.type!==`reply`&&t.type!==`mention`?(0,j.jsxs)(`div`,{className:`ap-note-content mt-0.5 line-clamp-1 text-sm text-pretty text-gray-700 dark:text-gray-600`,children:[t.post?.type===`article`&&t.post?.title&&(0,j.jsxs)(j.Fragment,{children:[t.post.title,` — `]}),(0,j.jsx)(`span`,{dangerouslySetInnerHTML:{__html:E(x(t.post?.content||``))}})]}):(0,j.jsx)(j.Fragment,{children:(0,j.jsxs)(`div`,{className:`mt-2.5 rounded-md bg-gray-100 px-5 py-[14px] group-hover:bg-gray-200 dark:bg-gray-950/30 group-hover:dark:bg-black/40`,children:[(0,j.jsx)(z,{className:`ap-note-content text-pretty`,content:t.post?.content||``,stripTags:[`a`]}),t.post&&t.post.attachments&&t.post.attachments.length>0&&(0,j.jsx)(`div`,{className:`notification-attachments mb-1 [&_.attachment-gallery]:flex [&_.attachment-gallery]:flex-wrap [&_img]:aspect-square [&_img]:max-w-[calc(20%-6.4px)]`,children:v({...t.post,type:`Note`,attachment:t.post.attachments})})]})})),(t.type===`reply`&&t.post||t.type===`mention`)&&(0,j.jsx)(`div`,{className:`mt-1.5`,children:(0,j.jsx)(C,{actor:{...t.actors[0],icon:{url:t.actors[0].avatarUrl||``},id:t.actors[0].url,preferredUsername:t.actors[0].handle?.replace(/^@([^@]+)@.*$/,`$1`)||`unknown`},buttonClassName:`hover:bg-gray-200`,commentCount:t.post.replyCount||0,layout:`notification`,likeCount:t.post.likeCount||0,object:{...t.post,liked:t.post.likedByMe,reposted:t.post.repostedByMe},repostCount:t.post.repostCount||0,onLikeClick:o})})]})]}),i<B.length-1&&(0,j.jsx)(`div`,{className:`pl-[52px]`,children:(0,j.jsx)(F,{})})]},t.id||`${t.type}_${i}`))}),(0,j.jsx)(`div`,{ref:H,className:`h-1`}),N&&(0,j.jsx)(`div`,{className:`-mt-4 mb-8 flex flex-col items-center justify-center gap-4 text-center`,children:(0,j.jsx)(S,{size:`md`})})]})]})})};export{B as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{g as r}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as i,t as a}from"./router-provider-C1R4AZ2o.js";import{As as o,Ea as s,En as c,Ir as l,Sn as u,bn as d,ls as f,n as p,t as m,wo as h}from"./index-BBf502Wg.js";import{t as g}from"./share-modal-CkdTTMJd.js";var _=e(t(),1),v=``+new URL(`logo-loader-dark-CuSPz-zc.mp4`,import.meta.url).href,y=``+new URL(`logo-loader-88VPEpXE.mp4`,import.meta.url).href,b=n();function x(){return(0,b.jsxs)(`div`,{className:`relative mb-6 size-20`,children:[(0,b.jsx)(`video`,{"aria-hidden":`true`,autoPlay:!0,className:`size-20 dark:hidden`,height:80,loop:!0,muted:!0,playsInline:!0,preload:`metadata`,role:`presentation`,tabIndex:-1,width:80,children:(0,b.jsx)(`source`,{src:y,type:`video/mp4`})}),(0,b.jsx)(`video`,{"aria-hidden":`true`,autoPlay:!0,className:`hidden size-20 dark:block`,height:80,loop:!0,muted:!0,playsInline:!0,preload:`metadata`,role:`presentation`,tabIndex:-1,width:80,children:(0,b.jsx)(`source`,{src:v,type:`video/mp4`})}),(0,b.jsx)(`div`,{className:`pointer-events-none absolute inset-0 hidden bg-[hsl(216deg_11%_70%/1%)] dark:block`})]})}function S({complete:e,id:t,isBeforeNext:n,isLast:r,isNext:i,onClick:a,step:s}){let c=s.icon;return(0,b.jsxs)(`button`,{className:`group ${i?`relative z-10 -mx-8 flex w-[calc(100%+64px)] items-center justify-between rounded-md bg-background px-8 py-6 text-left shadow-[0_1px_0_rgba(17,17,26,0.05),0_0_8px_rgba(17,17,26,0.10)] transition-none dark:ring-1 dark:ring-border ${r?`-mb-[18px]`:`mb-1.5`}`:`relative flex w-full items-center justify-between bg-transparent py-6 text-left ${r||n||i?``:`after:absolute after:inset-x-0 after:bottom-0 after:h-px after:bg-border after:content-['']`}`}`,"data-testid":`onboarding-step-${s.id}`,id:t,type:`button`,onClick:a,children:[(0,b.jsxs)(`span`,{className:`flex min-w-0 items-center ${e?`opacity-20 group-hover:opacity-25`:`group-hover:opacity-90`}`,children:[(0,b.jsx)(c,{className:`mr-4 size-5 shrink-0 text-purple`}),(0,b.jsxs)(`span`,{className:`min-w-0 text-left`,children:[(0,b.jsx)(`span`,{className:`block truncate pr-8 text-[16px] leading-[1.3] font-bold text-foreground`,children:s.title}),i&&(0,b.jsx)(`span`,{className:`mt-1 block pr-8 text-[15px] leading-[1.4] text-muted-foreground`,children:s.description})]})]}),(0,b.jsx)(`span`,{className:`flex shrink-0 items-center transition-transform group-hover:translate-x-[5px] ${e?`text-green`:`text-purple`}`,children:e?(0,b.jsx)(f,{className:`size-5`}):(0,b.jsx)(o,{className:`size-3.5`})})]})}function C({allStepsCompleted:e,completedSteps:t,nextStep:n,onComplete:r,onDismiss:i,onStepClick:a,siteTitle:o}){let c=new Set(t);return(0,b.jsx)(`main`,{className:`relative flex min-h-screen flex-col items-center justify-center px-6 py-8`,children:(0,b.jsxs)(`section`,{className:`mt-[-48px] flex w-full flex-col items-center`,"data-test-dashboard":`onboarding-checklist`,"data-testid":`onboarding-checklist`,children:[(0,b.jsxs)(`div`,{className:`mb-8 flex flex-col items-center text-center`,children:[(0,b.jsx)(x,{}),e?(0,b.jsx)(`h1`,{className:`text-[32px] leading-[1.15] font-bold tracking-normal text-foreground max-[480px]:text-[24px]`,children:`You're all set.`}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(`h1`,{className:`text-[32px] leading-[1.15] font-bold tracking-normal text-foreground max-[480px]:text-[24px]`,children:`Let's get started!`}),(0,b.jsxs)(`p`,{className:`mt-2 mb-0 text-[15px] text-muted-foreground max-[480px]:m-0 max-[480px]:text-[14px]`,children:[`Welcome! It's time to set up `,o,`.`]})]})]}),(0,b.jsxs)(`div`,{className:`w-full max-w-[540px] rounded-md border border-border bg-background px-6 pt-4 pb-1`,children:[(0,b.jsxs)(`div`,{className:`mt-[-12px] flex items-center justify-between py-6 ${n===`customize-design`?`border-b-0`:`border-b border-border`}`,children:[(0,b.jsxs)(`span`,{className:`flex min-w-0 items-center opacity-20`,children:[(0,b.jsx)(s,{className:`mr-4 size-5 shrink-0 text-purple`}),(0,b.jsx)(`span`,{className:`truncate pr-8 text-[16px] leading-[1.3] font-bold text-foreground`,children:`Start a new Ghost publication`})]}),(0,b.jsx)(`span`,{className:`shrink-0 text-green`,children:(0,b.jsx)(f,{className:`size-5`})})]}),p.map((e,t)=>(0,b.jsx)(S,{complete:c.has(e.id),id:`ob-${e.id}`,isBeforeNext:p[t+1]?.id===n,isLast:t===p.length-1,isNext:n===e.id,step:e,onClick:()=>a(e.id)},e.id))]}),e&&(0,b.jsx)(l,{className:`mt-6 h-auto w-full max-w-[540px] px-3 py-3 text-[16px] max-[480px]:text-[15px]`,"data-testid":`onboarding-complete`,id:`ob-completed`,type:`button`,onClick:r,children:`Explore your dashboard`}),(0,b.jsxs)(`p`,{className:`mt-8 mb-0 text-[15px] text-muted-foreground max-[480px]:text-[14px]`,children:[`More questions? Check out our`,` `,(0,b.jsx)(l,{asChild:!0,className:`h-auto p-0 align-baseline text-[15px] text-green hover:text-green/90 max-[480px]:text-[14px]`,variant:`link`,children:(0,b.jsx)(`a`,{href:`https://ghost.org/help?utm_source=admin&utm_campaign=onboarding`,id:`ob-help-center`,rel:`noreferrer`,target:`_blank`,children:`Help Center`})}),`.`]}),!e&&(0,b.jsx)(l,{className:`mt-6 h-[38px] overflow-hidden px-3.5 py-px text-[15px] font-normal whitespace-nowrap text-muted-foreground hover:border-gray-300 hover:text-foreground`,"data-testid":`onboarding-skip`,id:`ob-skip`,type:`button`,variant:`outline`,onClick:i,children:`Skip onboarding`})]})})}function w({description:e,imageUrl:t,onOpenChange:n,open:r,siteTitle:i,siteUrl:a}){let o=encodeURIComponent(a),s=[{href:`https://twitter.com/intent/tweet?url=${o}`,id:`ob-share-on-x`,label:`Share your publication on X`,service:`x`},{href:`https://threads.net/intent/post?text=${o}`,id:`ob-share-on-threads`,label:`Share your publication on Threads`,service:`threads`},{href:`https://www.facebook.com/sharer/sharer.php?u=${o}`,id:`ob-share-on-fb`,label:`Share your publication on Facebook`,service:`facebook`},{href:`https://www.linkedin.com/feed/?shareActive=true&text=${o}`,id:`ob-share-on-li`,label:`Share your publication on LinkedIn`,service:`linkedin`}];return(0,b.jsx)(g.Root,{open:r,onOpenChange:n,children:(0,b.jsxs)(g.Content,{className:`dark:bg-surface-elevated`,"data-test-modal":`onboarding-share`,"data-testid":`onboarding-share-modal`,children:[(0,b.jsxs)(g.Header,{className:`flex-row items-center justify-between gap-4 space-y-0 text-left`,children:[(0,b.jsx)(g.Title,{className:`text-2xl`,children:`Share your publication`}),(0,b.jsx)(g.CloseButton,{id:`ob-close-share-modal`,onClick:()=>n(!1)})]}),(0,b.jsxs)(g.Preview,{className:`rounded-lg bg-card`,href:a,children:[t?(0,b.jsx)(`div`,{className:`aspect-video bg-cover bg-center`,style:{backgroundImage:`url(${t})`}}):(0,b.jsx)(`div`,{className:`flex aspect-video items-center justify-center bg-muted text-muted-foreground`,children:(0,b.jsx)(h,{className:`size-8`})}),(0,b.jsxs)(`div`,{className:`p-5`,children:[(0,b.jsx)(`div`,{className:`text-lg font-semibold`,children:i}),e&&(0,b.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:e})]})]}),(0,b.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Set your publication's cover image and description in`,` `,(0,b.jsx)(l,{asChild:!0,className:`h-auto p-0 align-baseline text-sm text-green hover:text-green/90`,variant:`link`,children:(0,b.jsx)(`a`,{href:`#/settings/design/edit?ref=setup`,id:`ob-share-modal-design-settings`,children:`Design settings`})}),`.`]}),(0,b.jsxs)(g.Footer,{children:[(0,b.jsx)(g.SocialLinks,{links:s}),(0,b.jsx)(g.CopyButton,{className:`ml-0! grow cursor-pointer`,copyURL:a,"data-testid":`onboarding-copy-link`,icon:`link`,id:`ob-copy-publication-link`,label:`Copy link`})]})]})})}function T(e){return e&&/^\/analytics(?:\/|\?|$)/.test(e)?e:`/analytics`}function E(){let e=i(),[t]=r(),n=T(t.get(`returnTo`)),o=m(),s=c(),l=d(),f=(0,_.useRef)(!1),[h,g]=(0,_.useState)(!1),[v,y]=(0,_.useState)(!1),x=String(u(s.data?.settings,`title`)||l.data?.site.title||`your publication`),S=String(u(s.data?.settings,`description`)||l.data?.site.description||``),E=String(u(s.data?.settings,`cover_image`)||``),D=l.data?.site.url||`/`,{allStepsCompleted:O,completeChecklist:k,completedSteps:A,dismissChecklist:j,shouldShowChecklist:M,isLoading:N,markStepCompleted:P,nextStep:F}=o;if(N||l.isLoading||h||f.current)return null;if(!M)return(0,b.jsx)(a,{replace:!0,to:n});let I=async t=>{f.current=!0,g(!0);try{await t(),e(n,{replace:!0})}catch(e){f.current=!1,g(!1),console.error(e)}},L=async t=>{if(t===`share-publication`){await P(t),y(!0);return}await P(t);let n=p.find(({id:e})=>e===t);n?.route&&e(n.route)};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(C,{allStepsCompleted:O,completedSteps:A,nextStep:F,siteTitle:x,onComplete:()=>{I(k)},onDismiss:()=>{I(j)},onStepClick:e=>{L(e)}}),(0,b.jsx)(w,{description:S,imageUrl:E,open:v,siteTitle:x,siteUrl:D,onOpenChange:y})]})}export{E as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./use-tinybird-query-Dz156HvZ.js";import{i,o as a}from"./post-helpers-C5OQMBoi.js";import{m as o}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as s}from"./router-provider-C1R4AZ2o.js";import{f as c,p as l}from"./dist-DGzPJ_bO.js";import{a as u,i as d,t as f}from"./chart-helpers-DbklaJw9.js";import{a as p,n as m,o as h,t as g}from"./card-DGoDJzrn.js";import{c as _,l as v,n as y,o as b,r as x,s as ee,t as S,u as C}from"./data-list-16rkJYYi.js";import{t as w}from"./empty-indicator-oX1u1Pkn.js";import{$n as T,Gr as E,Hr as D,Ir as O,Oo as k,Wn as A,Wr as te,Ws as j,Zs as ne,_a as re,ao as ie,c as ae,ho as M,ko as oe,tr as N}from"./index-BBf502Wg.js";import{n as P,r as F,t as I}from"./kpi-card-BrGH6FsT.js";import{t as se}from"./disabled-sources-indicator-NkOIoMue.js";import{t as ce}from"./use-analytics-data-CaT8RirX.js";import{a as L,n as R,r as z,t as B}from"./kpi-card-CIGyijjx.js";import{n as le,r as ue,t as de}from"./post-analytics-header-D9pJ4iNm.js";import{t as fe}from"./gift-links-nBxJjZiQ.js";import{r as pe,t as me}from"./gift-link-modal-Bk8qpnMw.js";import{n as he}from"./post-analytics-context-D0Mw-Pmv.js";import{n as ge,t as _e}from"./use-post-referrers-BV54YcQS.js";import{a as V,o as H,r as U,t as W}from"./link-helpers-tOlxmuH5.js";import{n as ve,r as G}from"./kpi-helpers-_HRRsklE.js";var K=e(t(),1),q=n(),ye=({post:e,isNewsletterStatsLoading:t,isWebShown:n})=>{let{postId:r}=o(),i=s(),a=(0,K.useMemo)(()=>{let t=e.email?.opened_count||0,n=e.email?.email_count||0,r=e.count?.clicks||0;return{opened:t,clicked:r,openedRate:n>0?t/n:0,clickedRate:n>0?r/n:0,sent:n}},[e]),{data:u}=V({searchParams:{filter:`post_id:'${r}'`}}),d=(0,K.useMemo)(()=>U(u),[u]),f=[{datatype:`Clicked`,value:a.clickedRate,fill:`url(#gradientTeal)`,color:`var(--chart-teal)`},{datatype:`Opened`,value:a.openedRate,fill:`url(#gradientBlue)`,color:`var(--chart-blue)`}],w={percentage:{label:`Opened`},Average:{label:`Clicked`},"This newsletter":{label:`Opened`}},E=e.email_only||!n;return(0,q.jsxs)(g,{className:`group/datalist overflow-hidden ${E&&`col-span-2`}`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(p,{children:(0,q.jsxs)(h,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(ie,{size:16,strokeWidth:1.5}),`Newsletter performance`]})}),(0,q.jsx)(O,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-300 group-hover/datalist:translate-x-0 group-hover/datalist:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>{i(`/posts/analytics/${r}/newsletter`)},children:`View more`})]}),t?(0,q.jsx)(m,{children:(0,q.jsx)(`div`,{className:`mx-auto flex min-h-[250px] items-center justify-center xl:size-full`,children:(0,q.jsx)(T,{})})}):(0,q.jsxs)(m,{className:`${E&&`grid grid-cols-2`}`,children:[(0,q.jsxs)(`div`,{className:`${E&&`border-r pr-6`}`,children:[(0,q.jsxs)(`div`,{className:`grid grid-cols-2 gap-6`,children:[(0,q.jsx)(I,{className:`group relative flex grow flex-row items-start justify-between gap-5 border-none px-0 pt-0`,children:(0,q.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,q.jsx)(P,{color:`var(--chart-blue)`,children:`Open rate`}),(0,q.jsx)(F,{value:l(a.openedRate)})]})}),(0,q.jsx)(I,{className:`group relative flex grow flex-row items-start justify-between gap-5 border-none px-0 pt-0`,children:(0,q.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,q.jsx)(P,{color:`var(--chart-teal)`,children:`Click rate`}),(0,q.jsx)(F,{value:l(a.clickedRate)})]})})]}),!E&&(0,q.jsx)(A,{}),(0,q.jsx)(`div`,{className:`mx-auto my-6 h-[240px]`,children:(0,q.jsx)(H,{className:`pointer-events-none aspect-square h-[240px]`,config:w,data:f,tooltip:!1})})]}),(0,q.jsxs)(`div`,{className:`${E&&`pl-6`}`,children:[!E&&(0,q.jsx)(A,{}),(0,q.jsxs)(`div`,{className:E?``:`pt-3`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 ${E?`pb-3`:`py-3`}`,children:[(0,q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`Top clicked links in this email`}),(0,q.jsx)(j,{children:`Members`})]}),d.length>0?(0,q.jsx)(S,{className:``,children:(0,q.jsx)(x,{children:d.slice(0,E?10:5).map(e=>{let t=a.clicked>0?e.count/a.clicked:0;return(0,q.jsxs)(C,{children:[(0,q.jsx)(y,{style:{width:`${t?Math.round(t*100):0}%`}}),(0,q.jsx)(b,{children:(0,q.jsxs)(`div`,{className:`flex items-center space-x-2 overflow-hidden`,children:[(0,q.jsx)(M,{className:`shrink-0 text-muted-foreground`,size:16,strokeWidth:1.5}),(0,q.jsx)(`a`,{className:`block truncate font-medium hover:underline`,href:e.link.to,rel:`noreferrer`,target:`_blank`,title:e.link.to,children:W(e.link.to,!0)})]})}),(0,q.jsxs)(ee,{children:[(0,q.jsx)(_,{children:c(e.count||0)}),(0,q.jsx)(v,{children:l(t)})]})]},e.link.link_id)})})}):(0,q.jsx)(`div`,{className:`py-20 text-center text-sm text-gray-700`,children:`You have no links in your post.`})]})]})]})]})},be=({chartData:e,range:t,isLoading:n,visitors:r,sourcesData:i,isNewsletterShown:a=!0})=>{let{postId:l}=o(),d=s(),{site:f}=ce(),_=f.url,v=f.icon,y=(0,K.useMemo)(()=>i?i.reduce((e,t)=>e+Number(t.visits||0),0):0,[i]);return(0,q.jsx)(q.Fragment,{children:(0,q.jsxs)(g,{className:`group/datalist overflow-hidden ${!a&&`col-span-2`}`,"data-testid":`web-performance`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(p,{children:(0,q.jsxs)(h,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(k,{size:16,strokeWidth:1.5}),`Web performance`]})}),(0,q.jsx)(O,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-300 group-hover/datalist:translate-x-0 group-hover/datalist:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>{d(`/posts/analytics/${l}/web`)},children:`View more`})]}),(0,q.jsxs)(m,{children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(I,{className:`group relative flex grow flex-row items-start justify-between gap-5 border-none px-0 pt-0`,"data-testid":`unique-visitors`,children:(0,q.jsxs)(`div`,{className:`flex grow flex-col gap-1.5 border-none pb-0`,children:[(0,q.jsx)(P,{color:`var(--chart-blue)`,children:`Unique visitors`}),(0,q.jsx)(F,{value:c(r)})]})}),(0,q.jsx)(A,{}),(0,q.jsx)(`div`,{className:`max-h-[288px] py-6 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:n?(0,q.jsx)(`div`,{className:`flex h-[16vw] min-h-[240px] items-center justify-center`,children:(0,q.jsx)(T,{})}):(0,q.jsx)(u,{className:`aspect-auto h-[240px] w-full`,color:`var(--chart-blue)`,data:e||[],id:`visitors`,range:t,syncId:`overview-charts`})})]}),a&&(0,q.jsxs)(`div`,{className:a?`border-t pt-3`:`-mt-3`,children:[(0,q.jsx)(`div`,{children:(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-3`,children:[(0,q.jsx)(`span`,{className:`font-medium text-muted-foreground`,children:`How readers found this post`}),(0,q.jsx)(j,{children:`Visitors`})]})}),i&&i.length>0?(0,q.jsx)(G,{data:i,range:t,siteIcon:v,siteUrl:_,tableOnly:!0,topSourcesLimit:5,totalVisitors:y}):(0,q.jsx)(w,{className:`h-full py-10`,description:`Once someone visits this post, sources will show here`,title:`No visitors since you published this post`,children:(0,q.jsx)(k,{strokeWidth:1.5})})]})]})]})})},J=()=>{let e=s(),{statsConfig:t,isLoading:n}=ce(),{post:o,isPostLoading:l,postId:u}=he(),{totals:_,isLoading:v,currencySymbol:y}=_e(u),{appSettings:b}=ne(),{emailTrackClicks:x,emailTrackOpens:ee}=b?.analytics||{},S=b?.analytics?.webAnalytics===!0,C=le(o),{token:w,isLoading:k,error:A}=fe(u,{enabled:C}),{usage:j,loading:ie,error:M}=pe({postUuid:o?.uuid,token:w,tokenLoading:k,tokenError:A,enabled:C}),[P,F]=(0,K.useState)(!1),I=(0,K.useMemo)(()=>o?.published_at?E(o.published_at):ae.allTime.value,[o?.published_at]),{startDate:V,endDate:H,timezone:U}=te(I),W=(0,K.useMemo)(()=>{let e={site_uuid:t?.id||``,date_from:D(V),date_to:D(H),timezone:U,post_uuid:``};return!l&&o?.uuid?{...e,post_uuid:o.uuid}:e},[l,o,t?.id,V,H,U]),{data:G,loading:J}=r({endpoint:`api_kpis`,statsConfig:t,params:W}),xe=(0,K.useMemo)(()=>G?.length?G.reduce((e,t)=>{let n=Number(t.visits);return e+(isNaN(n)?0:n)},0):0,[G]),Y=ve.visits,Se=f(I,G||[],{fieldName:Y.dataKey}),Ce=d(G||[],I,Y.dataKey,`sum`)?.map(e=>{let t=Number(e[Y.dataKey]);return{date:String(e.date),value:t,formattedValue:Y.formatter(t),label:Y.label}}),{data:we,loading:Te}=r({endpoint:`api_top_sources`,statsConfig:t,params:W}),Ee=n||v||l||J,De=l||n||J,X=a(o)&&ee&&x,Z=!o?.email_only&&S,Q=b?.analytics.membersTrackSources,$=!!(C&&o&&b?.analytics.webAnalytics);return(0,K.useEffect)(()=>{!l&&o&&i(o)&&!S&&Q&&e(`/posts/analytics/${u}/growth`,{replace:!0})},[l,o,S,e,u,Q]),l?(0,q.jsx)(T,{}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(de,{currentTab:`Overview`}),(0,q.jsx)(ue,{children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-6 lg:grid lg:grid-cols-2`,children:[Z&&(0,q.jsx)(be,{chartData:Ce,isLoading:De||Ee||Te,isNewsletterShown:X,range:Se,sourcesData:we,visitors:xe}),X&&(0,q.jsx)(ye,{isNewsletterStatsLoading:l,isWebShown:Z,post:o}),(Q||$)&&(0,q.jsxs)(`div`,{className:`col-span-2 flex flex-col gap-6 lg:grid lg:grid-cols-3`,children:[Q&&(0,q.jsxs)(g,{className:`group overflow-hidden p-0 ${$?`lg:col-span-2`:`lg:col-span-3`}`,"data-testid":`growth`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(p,{children:(0,q.jsxs)(h,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(re,{size:16,strokeWidth:1.5}),`Growth`]})}),(0,q.jsx)(O,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-200 group-hover:translate-x-0 group-hover:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>{e(`/posts/analytics/${u}/growth`)},children:`View more`})]}),(0,q.jsx)(m,{className:`flex flex-col gap-6 px-0 md:grid md:grid-cols-3 md:items-stretch md:gap-0`,children:Ee?Array.from({length:3},(e,t)=>(0,q.jsxs)(`div`,{className:`h-[98px] gap-1 border-r px-6 py-5 last:border-r-0`,children:[(0,q.jsx)(N,{className:`w-2/3`}),(0,q.jsx)(N,{className:`h-7 w-12`})]},t)):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(B,{className:`grow gap-1 py-0`,children:[(0,q.jsx)(z,{children:`Free members`}),(0,q.jsx)(R,{children:(0,q.jsx)(L,{className:`text-[2.2rem]`,children:c(_?.free_members||0)})})]}),b?.paidMembersEnabled&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(B,{className:`grow gap-1 py-0`,children:[(0,q.jsx)(z,{children:`Paid members`}),(0,q.jsx)(R,{children:(0,q.jsx)(L,{className:`text-[2.2rem]`,children:c(_?.paid_members||0)})})]}),(0,q.jsxs)(B,{className:`grow gap-1 py-0`,children:[(0,q.jsx)(z,{children:`MRR impact`}),(0,q.jsx)(R,{children:(0,q.jsxs)(L,{className:`text-[2.2rem]`,children:[y,c(ge(_?.mrr||0))]})})]})]})]})})]}),$&&(0,q.jsxs)(g,{className:`group/datalist overflow-hidden ${Q?`lg:col-span-1`:`lg:col-span-3`}`,"data-testid":`gift-link-card`,children:[(0,q.jsxs)(`div`,{className:`relative flex items-center justify-between gap-6`,children:[(0,q.jsx)(p,{children:(0,q.jsxs)(h,{className:`flex items-center gap-1.5 text-lg`,children:[(0,q.jsx)(oe,{size:16,strokeWidth:1.5}),`Gift link`]})}),(0,q.jsx)(O,{className:`absolute right-6 translate-x-10 opacity-0 transition-all duration-300 group-hover/datalist:translate-x-0 group-hover/datalist:opacity-100 focus-visible:translate-x-0 focus-visible:opacity-100`,size:`sm`,variant:`outline`,onClick:()=>F(!0),children:`Share`})]}),!ie&&!M&&(0,q.jsxs)(m,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`Visitors`}),(0,q.jsx)(`span`,{className:`text-[2.2rem] leading-none font-semibold`,"data-testid":`gift-link-card-visitors`,children:c(j?.visits??0)})]})]})]}),!Z&&!X&&!Q&&!$&&(0,q.jsx)(se,{className:`col-span-2 py-20`})]})}),$&&(0,q.jsx)(me,{open:P,postId:u,source:`gift-link-card`,onOpenChange:F},u)]})};export{J as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{a as r,p as ee}from"./hooks-BApwwBE0.js";import{h as te,m as i,p as ne,v as re}from"./stats-DGoXZxWE.js";import{i as ie}from"./posts-EWpZIjkr.js";import{t as ae}from"./analytics-53FOa2wq.js";import{i as a,n as oe,o,r as s}from"./post-helpers-C5OQMBoi.js";import{a as se}from"./router-provider-C1R4AZ2o.js";import{c,f as ce,l,u}from"./dist-DGzPJ_bO.js";import{a as le,i as ue,n as d,o as de,r as fe,t as pe}from"./breadcrumb-D34YWnaw.js";import{r as f}from"./users-CcSCQFcQ.js";import{Bs as me,Ho as he,Ir as p,Jr as ge,Qr as m,Uo as _e,Va as h,Xr as g,Zr as _,Zs as v,cr as y,dr as b,ea as x,fr as S,ii as C,lr as w,ni as T,or as E,pr as D,sr as O,ur as k,ya as A}from"./index-BBf502Wg.js";import{t as j}from"./use-analytics-data-CaT8RirX.js";import{t as M}from"./post-share-modal-DBfKl2GZ.js";import{t as N}from"./get-site-timezone-HgL0jI_F.js";import{i as P,t as ve}from"./gift-link-modal-Bk8qpnMw.js";import{n as F}from"./post-analytics-context-D0Mw-Pmv.js";var I=e(t(),1),L=n(),R=(0,I.forwardRef)(({children:e,className:t,...n},r)=>(0,L.jsx)(`section`,{ref:r,className:c(`flex size-full grow flex-col gap-6 py-8`,t),...n,children:e}));R.displayName=`PostAnalyticsContent`;var z=e=>{let{data:t}=r();return!e||!t?!1:e.status===`published`&&!!e.visibility&&e.visibility!==`public`&&f(t)},B=({currentTab:e,children:t})=>{let n=se(),{appSettings:r}=v(),{mutateAsync:c}=ie(),f=ee(),[R,B]=(0,I.useState)(!1),[V,H]=(0,I.useState)(!1),[ye,U]=(0,I.useState)(!1),{settings:be,site:W,statsConfig:xe}=j(),{post:G,isPostLoading:K,postId:q}=F(),J=z(G),Y=N(be),X=(0,I.useRef)(!1);(0,I.useEffect)(()=>{if(!V){X.current=!1;return}X.current||(X.current=!0,ae(`Share Modal Opened`,{giftLinkShown:J,source:`post-analytics`}))},[V,J]);let{activeVisitors:Z,isLoading:Q}=re({postUuid:G?.uuid,statsConfig:xe,enabled:r?.analytics?.webAnalytics??!1}),$=(0,I.useMemo)(()=>{if(!G)return[];let e=[];return a(G)&&!r?.analytics.webAnalytics||(e.push(`Overview`),!G.email_only&&r?.analytics.webAnalytics&&e.push(`Web`)),o(G)&&e.push(`Newsletter`),r?.analytics.membersTrackSources&&e.push(`Growth`),e},[G,r?.analytics.webAnalytics,r?.analytics.membersTrackSources]),Se=()=>{G&&B(!0)},Ce=async()=>{if(G)try{await c(q),B(!1),n(`/posts/`,{crossApp:!0})}catch(e){f(e)}};return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`header`,{className:`z-50 -mx-8 bg-white/70 backdrop-blur-md dark:bg-background`,children:(0,L.jsx)(`div`,{className:`relative flex min-h-[102px] w-full items-start justify-between gap-5 px-8 pt-8 pb-0`,"data-header":`header`,children:(0,L.jsxs)(`div`,{className:`flex w-full flex-col gap-6`,children:[(0,L.jsxs)(`div`,{className:`flex w-full flex-col justify-between md:flex-row md:items-center`,children:[(0,L.jsx)(pe,{children:(0,L.jsxs)(ue,{children:[(0,L.jsx)(d,{children:(0,L.jsx)(fe,{asChild:!0,children:(0,L.jsx)(`button`,{className:`cursor-pointer rounded-sm focus-visible:ring-1 focus-visible:ring-focus-ring focus-visible:outline-hidden`,type:`button`,onClick:()=>n(`/analytics/`,{crossApp:!0}),children:`Analytics`})})}),(0,L.jsx)(de,{}),(0,L.jsx)(d,{children:(0,L.jsx)(le,{children:`Post analytics`})})]})}),(0,L.jsxs)(`div`,{className:`flex w-full items-center gap-2 md:w-auto`,children:[r?.analytics.webAnalytics&&!G?.email_only&&(0,L.jsx)(`div`,{className:`mr-3 flex grow items-center gap-2 md:grow-0`,children:(0,L.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground`,title:`Active readers in the last 5 minutes · Updates every 60 seconds`,children:[(0,L.jsxs)(`span`,{children:[Q?``:ce(Z),` reading now`]}),(0,L.jsx)(`div`,{className:`size-2 rounded-full ${Q?`animate-pulse bg-muted`:Z?`bg-green-500`:`border border-muted-foreground`}`})]})}),!K&&(0,L.jsxs)(L.Fragment,{children:[!G?.email_only&&(0,L.jsx)(M,{author:G?.authors?.[0]?.name||``,canShareAsGift:J,description:``,faviconURL:W?.icon||``,featureImageURL:G?.feature_image,giftAccessLabel:P(G?.visibility),open:V,postExcerpt:G?.excerpt||``,postTitle:G?.title,postURL:G?.url,siteTitle:W?.title||``,onClose:()=>H(!1),onOpenChange:H,onShareAsGift:()=>{H(!1),U(!0)},children:(0,L.jsxs)(p,{variant:`outline`,onClick:()=>H(!0),children:[(0,L.jsx)(A,{}),` Share`]})}),(0,L.jsxs)(ge,{children:[(0,L.jsx)(C,{asChild:!0,children:(0,L.jsx)(p,{variant:`outline`,children:(0,L.jsx)(_e,{})})}),(0,L.jsxs)(g,{align:`end`,children:[(0,L.jsxs)(_,{children:[(0,L.jsx)(m,{asChild:!0,children:(0,L.jsxs)(`a`,{href:G?.url,rel:`noopener noreferrer`,target:`_blank`,children:[(0,L.jsx)(he,{}),`View in browser`]})}),(0,L.jsxs)(m,{onClick:()=>{n(`/editor/post/${q}`,{crossApp:!0})},children:[(0,L.jsx)(h,{}),`Edit post`]})]}),(0,L.jsx)(T,{}),(0,L.jsx)(_,{children:(0,L.jsxs)(m,{className:`text-destructive focus:text-destructive`,onClick:Se,children:[(0,L.jsx)(x,{}),`Delete post`]})})]})]})]})]})]}),!K&&(0,L.jsxs)(`div`,{className:`flex items-start gap-6 md:items-center`,children:[G?.feature_image&&(0,L.jsx)(`div`,{className:`aspect-[16/10] w-full max-w-[100px] rounded-md bg-cover bg-center md:max-w-[132px]`,style:{backgroundImage:`url(${G.feature_image})`}}),(0,L.jsxs)(`div`,{children:[(0,L.jsx)(me,{className:`-ml-px max-w-[920px] indent-0 !text-xl md:leading-[1.2em]`,"data-header":`header-title`,children:G?.title}),G?.published_at&&(0,L.jsxs)(`div`,{className:`mt-0.5 flex items-center justify-start leading-[1.65em] text-muted-foreground`,children:[oe(G)&&`Sent on ${l(G.published_at,Y)} at ${u(G.published_at,Y)}`,a(G)&&`Published on your site on ${l(G.published_at,Y)} at ${u(G.published_at,Y)}`,s(G)&&`Published and sent on ${l(G.published_at,Y)} at ${u(G.published_at,Y)}`]})]})]})]})})}),(0,L.jsxs)(te,{className:`sticky top-0 z-50 -mb-8 transform-gpu flex-col items-start gap-y-0 border-none bg-white/70 py-8 backdrop-blur-md lg:flex-row lg:items-center dark:bg-background`,children:[!K&&(0,L.jsxs)(ne,{className:`min-h-[34px]`,defaultValue:e,responsive:!0,children:[$.includes(`Overview`)&&(0,L.jsx)(i,{value:`Overview`,onClick:()=>{n(`/posts/analytics/${q}`)},children:`Overview`}),$.includes(`Web`)&&(0,L.jsx)(i,{value:`Web`,onClick:()=>{n(`/posts/analytics/${q}/web`)},children:`Web traffic`}),$.includes(`Newsletter`)&&(0,L.jsx)(i,{value:`Newsletter`,onClick:()=>{n(`/posts/analytics/${q}/newsletter`)},children:`Newsletter`}),$.includes(`Growth`)&&(0,L.jsx)(i,{value:`Growth`,onClick:()=>{n(`/posts/analytics/${q}/growth`)},children:`Growth`})]}),t]}),J&&q&&(0,L.jsx)(ve,{open:ye,postId:q,source:`share-modal`,onOpenChange:U},q),(0,L.jsx)(E,{open:R,onOpenChange:B,children:(0,L.jsxs)(w,{children:[(0,L.jsxs)(S,{children:[(0,L.jsx)(D,{children:`Are you sure you want to delete this post?`}),(0,L.jsxs)(k,{children:[`You're about to delete "`,(0,L.jsx)(`strong`,{children:G?.title}),`". This is permanent! We warned you, k?`]})]}),(0,L.jsxs)(b,{children:[(0,L.jsx)(y,{children:`Cancel`}),(0,L.jsx)(O,{className:`bg-red-600 text-white hover:bg-red-700`,onClick:()=>void Ce(),children:`Delete`})]})]})})]})};export{z as n,R as r,B as t};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{n as r}from"./posts-EWpZIjkr.js";import{m as i}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{c as a}from"./index-BBf502Wg.js";import{t as o}from"./constants-c-JNF9c2.js";import{t as s}from"./post-analytics-context-D0Mw-Pmv.js";var c=e(t(),1),l=n(),u=({children:e})=>{let{postId:t}=i();if(!t)throw Error(`Post ID is required for PostAnalyticsProvider`);let[n,u]=(0,c.useState)(a.last30Days.value),{data:{posts:[d]}={posts:[]},isLoading:f}=r({searchParams:{filter:`id:${t}`,include:o}});return(0,l.jsx)(s.Provider,{value:{postId:t,post:d,isPostLoading:f,range:n,setRange:u},children:e})};export{u as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{n as r}from"./dist-Ndy-PuGN.js";import{l as i,m as a}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{s as o}from"./router-provider-C1R4AZ2o.js";import{s}from"./dist-DGzPJ_bO.js";import{a as c,i as l,n as u,r as d,t as f}from"./tabs-D3ZOYkM7.js";import{t as p}from"./edit-profile-rvDGrS8J.js";import{Ar as m,At as h,Ba as g,Eo as _,Er as v,F as ee,Ft as y,Hi as b,I as te,Ir as x,It as S,Jn as ne,Kt as C,L as re,Ln as w,Lr as ie,Oo as T,Q as ae,R as oe,Rn as E,Ts as se,Uo as ce,Us as D,Ut as O,V as k,Vi as le,Vs as ue,Wn as A,Wt as j,Y as M,_r as de,_t as fe,at as pe,cr as N,ct as me,dr as P,er as F,fr as I,gr as L,hr as R,ht as z,jr as he,kr as ge,kt as B,lr as V,ls as _e,lt as ve,mr as ye,mt as H,or as U,pr as W,qo as be,sr as G,st as xe,tr as K,tt as Se,ur as q,ut as Ce,vr as we,vt as Te,wr as Ee,zi as J}from"./index-BBf502Wg.js";import"./layout-Bw4GnxXp.js";import{t as De}from"./settings-Bz3RZRmE.js";var Y=e(t(),1);function Oe(e){return typeof e.name==`string`?e.name:typeof e.preferredUsername==`string`?e.preferredUsername:typeof e.preferredUsername==`object`&&e.preferredUsername!==null&&`@value`in e.preferredUsername&&typeof e.preferredUsername[`@value`]==`string`?e.preferredUsername[`@value`]:`Unknown`}var X=n(),ke=({noResultsMessage:e,actors:t,isLoading:n,fetchNextPage:r,hasNextPage:i,isFetchingNextPage:a})=>{let{data:o}=z(`index`,`me`),s=(0,Y.useRef)(null),c=(0,Y.useRef)(null);(0,Y.useEffect)(()=>(s.current&&s.current.disconnect(),s.current=new IntersectionObserver(e=>{e[0].isIntersecting&&i&&!a&&r()}),c.current&&s.current.observe(c.current),()=>{s.current&&s.current.disconnect()}),[i,a,r]);let l=C();return(0,X.jsxs)(`div`,{className:`pt-3`,"data-testid":`actor-list`,children:[i===!1&&t.length===0?(0,X.jsxs)(w,{children:[(0,X.jsx)(E,{children:(0,X.jsx)(b,{})}),e]}):(0,X.jsx)(`div`,{className:`flex flex-col`,children:t.map(({actor:e,isFollowing:t,blockedByMe:n,domainBlockedByMe:r})=>{let i=j(e),a=i===o?.handle;return(0,X.jsx)(Y.Fragment,{children:(0,X.jsx)(Se,{actor:e,align:`center`,isCurrentUser:a,side:`left`,children:(0,X.jsx)(`div`,{children:(0,X.jsxs)(k,{"data-testid":`actor-item`,onClick:()=>{ae(e,l)},children:[(0,X.jsx)(Ce,{author:e}),(0,X.jsx)(`div`,{children:(0,X.jsxs)(`div`,{className:`break-anywhere text-gray-600`,children:[(0,X.jsx)(`span`,{className:`mr-1 line-clamp-1 font-bold text-black dark:text-white`,children:Oe(e)}),(0,X.jsx)(`div`,{className:`line-clamp-1 text-sm`,children:i})]})}),n||r?(0,X.jsx)(x,{className:`pointer-events-none ml-auto min-w-[90px]`,variant:`destructive`,children:`Blocked`}):a?null:(0,X.jsx)(ve,{className:`ml-auto`,"data-testid":`follow-button`,following:t,handle:i,type:`secondary`})]},e.id)})})},e.id)})}),(0,X.jsx)(`div`,{ref:c,className:`h-1`}),(a||n)&&(0,X.jsx)(`div`,{className:`mt-6 flex flex-col items-center justify-center gap-4 text-center`,children:(0,X.jsx)(F,{size:`md`})})]})},Z=({posts:e,fetchNextPage:t,hasNextPage:n,isFetchingNextPage:r,isLoading:i})=>{let a=(0,Y.useRef)(null),o=(0,Y.useRef)(null),s=(0,Y.useRef)(null),c=Math.max(0,Math.floor(e.length*.75)-1);(0,Y.useEffect)(()=>(a.current&&a.current.disconnect(),a.current=new IntersectionObserver(e=>{e[0].isIntersecting&&n&&!r&&t()}),o.current&&a.current.observe(o.current),s.current&&a.current.observe(s.current),()=>{a.current&&a.current.disconnect()}),[n,r,t]);let l=C();return(0,X.jsxs)(X.Fragment,{children:[n===!1&&e.length===0&&(0,X.jsxs)(w,{children:[(0,X.jsx)(E,{children:(0,X.jsx)(_,{})}),`You haven't liked anything yet.`]}),(0,X.jsxs)(`ul`,{className:`mx-auto flex max-w-[640px] flex-col`,"data-testid":`profile-likes-list`,children:[e.map((t,n)=>(0,X.jsxs)(`li`,{"data-testid":`profile-like-item`,"data-test-view-article":!0,children:[(0,X.jsx)(M,{actor:t.actor,allowDelete:t.object.authored,commentCount:t.object.replyCount,isLoading:i,layout:`feed`,likeCount:t.object.likeCount,object:t.object,repostCount:t.object.repostCount,type:t.type,onClick:()=>{t.object.type===`Note`?l(`/notes/${encodeURIComponent(t.object.id)}`):t.object.type===`Article`&&l(`/reader/${encodeURIComponent(t.object.id)}`)}}),n<e.length-1&&(0,X.jsx)(A,{}),n===c&&(0,X.jsx)(`div`,{ref:o,className:`h-1`})]},`likes-${t.id}`)),r&&(0,X.jsx)(`li`,{className:`flex flex-col items-center justify-center gap-4 text-center`,children:(0,X.jsx)(F,{size:`md`})})]}),(0,X.jsx)(`div`,{ref:s,className:`h-1`})]})},Ae=({posts:e,fetchNextPage:t,hasNextPage:n,isFetchingNextPage:r,isLoading:i,noResultsMessage:a})=>{let o=(0,Y.useRef)(null),s=(0,Y.useRef)(null),c=(0,Y.useRef)(null),l=Math.max(0,Math.floor(e.length*.75)-1);(0,Y.useEffect)(()=>(o.current&&o.current.disconnect(),o.current=new IntersectionObserver(e=>{e[0].isIntersecting&&n&&!r&&t()}),s.current&&o.current.observe(s.current),c.current&&o.current.observe(c.current),()=>{o.current&&o.current.disconnect()}),[n,r,t]);let u=C();return(0,X.jsxs)(X.Fragment,{children:[n===!1&&e.length===0&&(0,X.jsxs)(w,{children:[(0,X.jsx)(E,{children:(0,X.jsx)(g,{})}),a]}),(0,X.jsxs)(`ul`,{className:`mx-auto flex max-w-[640px] flex-col`,"data-testid":`profile-posts-list`,children:[e.map((t,n)=>(0,X.jsxs)(`li`,{"data-testid":`profile-post-item`,"data-test-view-article":!0,children:[(0,X.jsx)(M,{actor:t.actor,allowDelete:t.object.authored,commentCount:t.object.replyCount,isLoading:i,layout:`feed`,likeCount:t.object.likeCount,object:t.object,repostCount:t.object.repostCount,type:t.type,onClick:()=>{t.object.type===`Note`?u(`/notes/${encodeURIComponent(t.object.id)}`):t.object.type===`Article`&&u(`/reader/${encodeURIComponent(t.object.id)}`)}}),n<e.length-1&&(0,X.jsx)(A,{}),n===l&&(0,X.jsx)(`div`,{ref:s,className:`h-1`})]},`posts-${t.id}`)),r&&(0,X.jsx)(`li`,{className:`flex flex-col items-center justify-center gap-4 text-center`,children:(0,X.jsx)(F,{size:`md`})})]}),(0,X.jsx)(`div`,{ref:c,className:`h-1`})]})},Q=({handle:e,isUserBlocked:t,isDomainBlocked:n,onUnblockUser:i,onUnblockDomain:a,trigger:o,onUnblockComplete:s,isOpen:c,onOpenChange:l})=>{let[u,d]=(0,Y.useState)(!1),[f,p]=(0,Y.useState)(()=>{let e=t&&n,r=t&&!n,i=!t&&n,a=`idle`;return e?a=`dual`:r?a=`userOnly`:i&&(a=`domainOnly`),{mode:a,userUnblocked:!1,domainUnblocked:!1}}),m=c!==void 0,h=m?c:u,[g,_]=(0,Y.useState)(!1),v=(0,Y.useCallback)(()=>{let e=t&&n,r=t&&!n,i=!t&&n,a=`idle`;e?a=`dual`:r?a=`userOnly`:i&&(a=`domainOnly`),p(e=>({...e,mode:a,userUnblocked:!1,domainUnblocked:!1}))},[t,n]);(0,Y.useEffect)(()=>{h&&!g?(v(),_(!0)):h||_(!1)},[h,g,v]);let ee=()=>{m?l?.(!0):d(!0)},y=e=>{e||(m?l?.(!1):d(!1))},b=async()=>{await i(),p(e=>({...e,userUnblocked:!0})),(f.mode!==`dual`||f.domainUnblocked)&&(y(!1),s?.()),r.success(`User unblocked`)},te=async()=>{await a(),p(e=>({...e,domainUnblocked:!0})),(f.mode!==`dual`||f.userUnblocked)&&(y(!1),s?.()),r.success(`Domain unblocked`)},S=e.split(`@`).filter(Boolean)[1];return(0,X.jsxs)(U,{open:h,onOpenChange:y,children:[o&&(0,X.jsx)(ye,{asChild:!0,onClick:ee,children:o}),(0,X.jsx)(V,{className:`${f.mode===`dual`&&`max-w-[600px]`}`,children:f.mode===`dual`?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(I,{children:[(0,X.jsx)(W,{className:`mb-1 flex flex-col gap-1`,children:`Unblock`}),(0,X.jsx)(q,{className:`mt-4!`,asChild:!0,children:(0,X.jsxs)(`div`,{className:`flex flex-col rounded-md border`,children:[(0,X.jsxs)(`div`,{className:`flex justify-between gap-6 p-5`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,X.jsx)(D,{children:`Unblock user`}),(0,X.jsxs)(`p`,{children:[(0,X.jsx)(`span`,{className:`font-semibold text-black`,children:e}),` will be able to follow you and engage with your public posts.`]})]}),(0,X.jsxs)(x,{className:`gap-1 ${f.userUnblocked?`pointer-events-none border-green bg-green text-white hover:bg-green hover:text-white`:`text-red hover:text-red-400`}`,variant:`outline`,onClick:b,children:[(0,X.jsx)(J,{}),f.userUnblocked?`User unblocked`:`Unblock user`]})]}),(0,X.jsx)(`div`,{className:`border-t`}),(0,X.jsxs)(`div`,{className:`flex justify-between gap-6 p-5`,children:[(0,X.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,X.jsx)(D,{children:`Unblock domain`}),(0,X.jsxs)(`p`,{children:[`Users from `,(0,X.jsx)(`span`,{className:`font-semibold text-black`,children:S}),` will be able to follow you and engage with your public posts.`]})]}),(0,X.jsxs)(x,{className:`gap-1 ${f.domainUnblocked?`pointer-events-none border-green bg-green text-white hover:bg-green hover:text-white`:`text-red hover:text-red-400`}`,variant:`outline`,onClick:te,children:[(0,X.jsx)(T,{}),f.domainUnblocked?`Domain unblocked`:`Unblock domain`]})]})]})})]}),(0,X.jsx)(P,{children:(0,X.jsx)(x,{onClick:()=>y(!1),children:`OK`})})]}):(()=>{let t=f.mode===`userOnly`;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(I,{children:[(0,X.jsx)(W,{className:`mb-1 flex flex-col gap-1`,children:t?`Unblock this user?`:`Unblock this domain?`}),(0,X.jsx)(q,{children:t?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`font-semibold text-black`,children:e}),` will be able to follow you and engage with your public posts.`]}):(0,X.jsxs)(X.Fragment,{children:[`Users from `,(0,X.jsx)(`span`,{className:`font-semibold text-black`,children:S}),` will be able to follow you and engage with your public posts.`]})})]}),(0,X.jsxs)(P,{children:[(0,X.jsx)(N,{children:`Cancel`}),(0,X.jsx)(x,{onClick:t?b:te,children:`Unblock`})]})]})})()})]})},je=({account:e,children:t,onCopyHandle:n,onBlockAccount:r,onBlockDomain:i,disabled:a=!1,isBlocked:o=!1,isDomainBlocked:s=!1})=>{let[c,l]=(0,Y.useState)(null),[u,d]=(0,Y.useState)(!1),f=e=>{e.stopPropagation(),n()},p=e=>{e.stopPropagation(),r()},m=e=>{e.stopPropagation(),i()},h=e?.handle,g=h?.split(`@`).filter(Boolean)[1];return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(R,{children:[(0,X.jsx)(we,{disabled:a,asChild:!0,onClick:e=>e.stopPropagation(),children:t}),(0,X.jsx)(de,{align:`end`,className:`p-2`,children:(0,X.jsxs)(`div`,{className:`flex w-48 flex-col`,children:[(0,X.jsx)(L,{asChild:!0,children:(0,X.jsx)(x,{className:`justify-start`,variant:`ghost`,onClick:f,children:`Copy handle`})}),(0,X.jsx)(L,{asChild:!0,children:(0,X.jsx)(x,{className:`justify-start text-red hover:bg-red/5 hover:text-red`,variant:`ghost`,onClick:e=>{e.stopPropagation(),!o&&!s&&l(`user`),d(!0)},children:o?`Unblock user`:s?`Unblock domain`:`Block user`})})]})})]}),o||s?e&&(0,X.jsx)(Q,{handle:e.handle,isDomainBlocked:e.domainBlockedByMe,isOpen:u,isUserBlocked:e.blockedByMe,onOpenChange:d,onUnblockDomain:i,onUnblockUser:r}):(0,X.jsx)(U,{open:u,onOpenChange:d,children:(0,X.jsxs)(V,{onClick:e=>e.stopPropagation(),children:[(0,X.jsxs)(I,{children:[(0,X.jsx)(W,{className:`mb-1 flex flex-col gap-1`,children:c===`user`?`Block this user?`:`Block this domain?`}),(0,X.jsx)(q,{children:c===`user`?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`font-semibold text-black`,children:h}),` will be able to see your public posts, but will no longer be able follow you or interact with your content on the social web.`]}):(0,X.jsxs)(X.Fragment,{children:[`All users from `,(0,X.jsx)(`span`,{className:`font-semibold text-black`,children:g}),` will be able to see your public posts, but won't be able to follow you or interact with your content.`]})})]}),(0,X.jsxs)(P,{children:[c!==`domain`&&(0,X.jsx)(x,{className:`mr-auto -ml-3 hover:bg-transparent hover:opacity-80`,variant:`ghost`,onClick:e=>{e.stopPropagation(),l(`domain`)},children:`Block domain instead`}),(0,X.jsx)(N,{onClick:e=>e.stopPropagation(),children:`Cancel`}),(0,X.jsx)(G,{className:ie({variant:`destructive`}),onClick:c===`user`?p:m,children:`Block`})]})]})})]})},Me=({account:e,onUnblock:t,onDomainUnblock:n,className:r=``})=>{let[i,a]=(0,Y.useState)(!1),o=(0,X.jsx)(x,{className:`min-w-[90px] ${r}`,variant:`destructive`,onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),children:i?`Unblock`:`Blocked`});return(0,X.jsx)(Q,{handle:e.handle,isDomainBlocked:e.domainBlockedByMe,isUserBlocked:e.blockedByMe,trigger:o,onUnblockDomain:n,onUnblockUser:t})},Ne=()=>{},$=({account:e,customFields:t,isLoadingAccount:n,postsTab:h,likesTab:g,followingTab:_,followersTab:ee})=>{let b=a(),ie=i(),T=C(),{canGoBack:ae}=o(),O=b.handle?`/profile/${b.handle}`:`/profile`,k=!b.handle,A=b.handle?b.tab||``:ie.pathname.split(`/`).pop()||``,j=(0,Y.useMemo)(()=>k?[`likes`,`following`,`followers`]:[`following`,`followers`],[k]),M=j.includes(A)?A:`posts`,de=Te(`index`),N=S(`index`),P=fe(`index`),F=y(`index`),I=z(`index`,`me`),{data:L}=b.handle?I:{data:void 0},R=b.handle===L?.handle||!b.handle,B=e?.blockedByMe,V=e?.domainBlockedByMe,[ye,H]=(0,Y.useState)(!1),[U,W]=(0,Y.useState)(!1),G=(0,Y.useRef)(null);(0,Y.useEffect)(()=>()=>{G.current&&window.clearTimeout(G.current)},[]);let Se=()=>{B?N.mutate(e):(de.mutate(e),r.success(`User blocked`)),H(!1)},q=()=>{V?F.mutate({url:e.apId,handle:e.handle}):(P.mutate({url:e.apId,handle:e.handle}),r.success(`Domain blocked`)),H(!1)},we=async()=>{if(!e?.handle||!navigator?.clipboard?.writeText){r.error(`Unable to copy handle`);return}try{await navigator.clipboard.writeText(e.handle),W(!0),r.success(`Handle copied`),G.current&&window.clearTimeout(G.current),G.current=window.setTimeout(()=>W(!1),2e3)}catch{r.error(`Failed to copy handle`),W(!1)}},[J,Oe]=(0,Y.useState)(!1),[ke,Z]=(0,Y.useState)(!1),Ae=()=>{Oe(!J)},Q=(0,Y.useRef)(null),[$,Pe]=(0,Y.useState)(!1);(0,Y.useEffect)(()=>{Q.current&&Pe(Q.current.scrollHeight>160)},[J,e?.bio,t,n]),(0,Y.useEffect)(()=>{A&&(j.includes(A)||T(O,{replace:!0}))},[j,O,T,A]);let Fe=e=>e===`posts`?O:`${O}/${e}`,Ie=e=>{e!==M&&T(Fe(e),{replace:!0})};return!n&&!e?(0,X.jsx)(oe,{children:(0,X.jsx)(`div`,{className:`mx-auto mt-4 flex w-full max-w-[620px] flex-col items-center [&_svg]:translate-x-px`,children:(0,X.jsxs)(re,{children:[(0,X.jsx)(te,{children:(0,X.jsx)(le,{})}),(0,X.jsx)(`div`,{children:`Profile not found`})]})})}):(0,X.jsx)(oe,{children:(0,X.jsx)(`div`,{className:`z-0 mx-[max(-4vw,-24px)] -mt-9 flex flex-col items-center pb-16`,children:(0,X.jsx)(`div`,{className:`mx-auto w-full`,children:(0,X.jsxs)(X.Fragment,{children:[e?.bannerImageUrl?(0,X.jsx)(`div`,{className:`h-[15vw] min-h-[200px] w-full overflow-hidden bg-gradient-to-tr from-gray-200 to-gray-100`,children:(0,X.jsx)(`img`,{alt:e?.name,className:`size-full object-cover`,referrerPolicy:`no-referrer`,src:e?.bannerImageUrl})}):(0,X.jsx)(`div`,{className:`h-[max(8vw,132px)] w-full overflow-hidden bg-gradient-to-tr from-white to-white dark:from-black dark:to-black`}),(0,X.jsxs)(`div`,{className:`mx-auto max-w-[620px] px-6 ${!e?.bannerImageUrl&&!ae?`-mt-8`:`-mt-12`}`,children:[(0,X.jsxs)(`div`,{className:`flex items-end justify-between`,children:[(0,X.jsx)(`div`,{className:`-ml-2 rounded-full bg-white p-1 dark:bg-background`,children:n?(0,X.jsx)(K,{className:`size-[92px] rounded-full`}):(0,X.jsx)(Ce,{author:{icon:{url:e?.avatarUrl},name:e?.name,handle:e?.handle},size:`lg`})}),!R&&!n&&(0,X.jsxs)(`div`,{className:`flex gap-2`,children:[B||V?(0,X.jsx)(Me,{account:e,onDomainUnblock:q,onUnblock:Se}):(0,X.jsx)(ve,{following:e?.followedByMe,handle:e?.handle,type:`primary`,onFollow:Ne,onUnfollow:Ne}),(0,X.jsx)(je,{account:e,isBlocked:B,isDomainBlocked:V,onBlockAccount:Se,onBlockDomain:q,onCopyHandle:we,children:(0,X.jsx)(x,{"aria-label":`Open profile menu`,variant:`outline`,children:(0,X.jsx)(ce,{})})})]}),R&&!n&&(0,X.jsxs)(Ee,{open:ke,onOpenChange:Z,children:[(0,X.jsx)(he,{children:(0,X.jsx)(De,{children:(0,X.jsx)(x,{variant:`secondary`,children:`Edit profile`})})}),(0,X.jsxs)(v,{className:`w-full max-w-[520px]`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,X.jsx)(ge,{children:(0,X.jsx)(m,{children:`Profile settings`})}),e&&(0,X.jsx)(p,{account:e,setIsEditingProfile:Z})]})]})]}),(0,X.jsx)(ue,{className:`break-anywhere mt-4 truncate`,children:n?(0,X.jsx)(K,{className:`w-32`}):e?.name}),(0,X.jsxs)(`div`,{className:`mb-4 flex items-center gap-2`,children:[(0,X.jsx)(`a`,{className:`inline-flex max-w-full truncate text-[1.5rem] text-gray-800 hover:text-gray-900 dark:text-gray-600 dark:hover:text-gray-500`,href:e?.url,rel:`noopener noreferrer`,target:`_blank`,children:(0,X.jsx)(`span`,{className:`truncate`,children:n?(0,X.jsx)(K,{className:`w-full max-w-56`}):e?.handle})}),!n&&(0,X.jsx)(x,{className:`-ml-1.5 size-6 p-0 text-gray-800 hover:text-gray-900 dark:text-gray-700 dark:hover:text-gray-600`,title:`Copy handle`,variant:`link`,onClick:we,children:U?(0,X.jsx)(_e,{size:16}):(0,X.jsx)(be,{size:16})}),e?.followsMe&&!n&&(0,X.jsx)(ne,{className:`mt-px whitespace-nowrap`,variant:`secondary`,children:`Follows you`})]}),(e?.bio||t?.length>0)&&(0,X.jsxs)(`div`,{ref:Q,className:`ap-profile-content break-anywhere relative text-[1.5rem] [&>p]:mb-3 ${J?`max-h-none pb-7`:`max-h-[160px] overflow-hidden`} relative`,children:[n?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(K,{}),(0,X.jsx)(K,{className:`w-full max-w-48`})]}):(0,X.jsx)(`div`,{dangerouslySetInnerHTML:{__html:xe(pe(me(e?.bio??``,[`a`,`br`])))}}),t?.map(e=>(0,X.jsxs)(`span`,{className:`mt-3 line-clamp-1 flex flex-col text-[1.5rem]`,children:[(0,X.jsx)(`span`,{className:`text-xs font-semibold`,children:e.name}),(0,X.jsx)(`span`,{dangerouslySetInnerHTML:{__html:xe(e.value)},className:`ap-profile-content truncate`})]},e.name)),!J&&$&&(0,X.jsx)(`div`,{className:`absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-white via-white/100 via-60% to-transparent dark:from-black dark:via-black/100`}),$&&(0,X.jsx)(x,{className:`absolute bottom-0 h-auto p-0 text-md`,variant:`link`,onClick:Ae,children:J?`Show less`:`Show all`})]}),(0,X.jsxs)(f,{className:`mt-5`,value:M,variant:`underline`,onValueChange:e=>Ie(e),children:[(0,X.jsxs)(d,{children:[(0,X.jsx)(l,{value:`posts`,children:`Posts`}),k&&(0,X.jsxs)(l,{value:`likes`,children:[`Likes`,(0,X.jsx)(c,{children:s(e?.likedCount||0)})]}),(0,X.jsxs)(l,{value:`following`,children:[`Following`,(0,X.jsx)(c,{children:s(e?.followingCount||0)})]}),(0,X.jsxs)(l,{value:`followers`,children:[`Followers`,(0,X.jsx)(c,{children:s(e?.followerCount||0)})]})]}),(0,X.jsx)(u,{value:`posts`,children:(B||V)&&!ye?(0,X.jsxs)(w,{children:[(0,X.jsx)(E,{children:(0,X.jsx)(se,{})}),(0,X.jsxs)(`div`,{className:`mt-2 flex flex-col items-center gap-0.5`,children:[(0,X.jsxs)(D,{children:[e.name,` is blocked`]}),(0,X.jsx)(`p`,{children:`You can view the posts, but it won't unblock the user.`}),(0,X.jsx)(x,{className:`mt-4`,variant:`secondary`,onClick:()=>H(!0),children:`View posts`})]})]}):h}),k&&(0,X.jsx)(u,{value:`likes`,children:g}),(0,X.jsx)(u,{value:`following`,children:_}),(0,X.jsx)(u,{value:`followers`,children:ee})]},b.handle||e?.handle||`current-user`)]})]})})})})},Pe=({handle:e})=>{let{postsByAccountQuery:t}=B(e||`me`,{enabled:!0}),{data:n,fetchNextPage:r,hasNextPage:i,isFetchingNextPage:a,isLoading:o}=t,s=n?.pages.flatMap(e=>e.posts)??Array.from({length:5},(e,t)=>({id:`placeholder-${t}`,object:{}}));return(0,X.jsx)(Ae,{fetchNextPage:r,hasNextPage:i,isFetchingNextPage:a,isLoading:o,noResultsMessage:e?`${e} hasn't posted anything yet`:`You haven't posted anything yet.`,posts:s})},Fe=()=>{let{postsLikedByAccountQuery:e}=h({enabled:!0}),{data:t,fetchNextPage:n,hasNextPage:r,isFetchingNextPage:i,isLoading:a}=e;return(0,X.jsx)(Z,{fetchNextPage:n,hasNextPage:r,isFetchingNextPage:i,isLoading:a,posts:t?.pages.flatMap(e=>e.posts)??Array.from({length:5},(e,t)=>({id:`placeholder-${t}`,object:{}}))})},Ie=({handle:e})=>{let{data:t,fetchNextPage:n,hasNextPage:r,isFetchingNextPage:i,isLoading:a}=H(e===``?`me`:e,`following`);return(0,X.jsx)(ke,{actors:t?.pages.flatMap(e=>`following`in e?e.following:`accounts`in e?e.accounts.map(e=>({actor:{id:e.id,name:e.name,handle:e.handle,icon:{url:e.avatarUrl}},isFollowing:e.isFollowing,blockedByMe:e.blockedByMe,domainBlockedByMe:e.domainBlockedByMe})):[])??[],fetchNextPage:n,hasNextPage:r,isFetchingNextPage:i,isLoading:a,noResultsMessage:`${e||`You`} have no following`})},Le=({handle:e})=>{let{data:t,fetchNextPage:n,hasNextPage:r,isFetchingNextPage:i,isLoading:a}=H(e===``?`me`:e,`followers`);return(0,X.jsx)(ke,{actors:t?.pages.flatMap(e=>`followers`in e?e.followers:`accounts`in e?e.accounts.map(e=>({actor:{id:e.id,name:e.name,handle:e.handle,icon:{url:e.avatarUrl}},isFollowing:e.isFollowing})):[])??[],fetchNextPage:n,hasNextPage:r,isFetchingNextPage:i,isLoading:a,noResultsMessage:`${e||`You`} have no followers yet`})},Re=()=>{let e=a(),{data:t,isLoading:n,error:r,refetch:i}=z(`index`,e.handle||`me`);if((0,Y.useEffect)(()=>{i()},[e.handle,i]),r&&O(r)&&r.statusCode!==404)return(0,X.jsx)(ee,{errorCode:r.code,statusCode:r.statusCode});let o=Object.keys(t?.customFields||{}).map(e=>({name:e,value:t.customFields[e]}))||[],s=(0,X.jsx)(Pe,{handle:e.handle||``}),c=(0,X.jsx)(Fe,{}),l=(0,X.jsx)(Ie,{handle:e.handle||``});return(0,X.jsx)($,{account:t,customFields:o,followersTab:(0,X.jsx)(Le,{handle:e.handle||``}),followingTab:l,isLoadingAccount:n,likesTab:c,postsTab:s})};export{Re as default};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{n,t as r}from"./jsx-runtime-DX3WBWVO.js";import{a as i,c as a,d as o,i as s,n as c,o as l,r as u,s as d,t as f,u as p}from"./Combination-CJG7Flp-.js";import{a as m,c as h,n as g}from"./dist-DGzPJ_bO.js";import{n as _,r as v,t as y}from"./dist-CQJY6SVY.js";import{t as b}from"./dist-P_ohUlTi.js";import{t as x}from"./dist-JLOy8o0Q.js";import{Cr as S,Di as C,Ei as w,Is as T,Mi as E,Oi as ee,Ti as D,as as O,cs as k,ir as A,ji as te,ki as j,ls as M}from"./index-BBf502Wg.js";var N=e(t(),1),P=e(n(),1),F=r();function I(e,[t,n]){return Math.min(n,Math.max(t,e))}var L=[` `,`Enter`,`ArrowUp`,`ArrowDown`],R=[` `,`Enter`],z=`Select`,[B,V,H]=E(z),[U,ne]=v(z,[H,j]),W=j(),[re,G]=U(z),[ie,ae]=U(z),K=`SelectProvider`;function q(e){let{__scopeSelect:t,children:n,open:r,defaultOpen:a,onOpenChange:o,value:s,defaultValue:c,onValueChange:l,dir:u,name:d,autoComplete:f,disabled:m,required:h,form:g,internal_do_not_use_render:_}=e,v=W(t),[y,b]=N.useState(null),[x,S]=N.useState(null),[C,w]=N.useState(!1),T=te(u),[E,D]=p({prop:r,defaultProp:a??!1,onChange:o,caller:z}),[O,k]=p({prop:s,defaultProp:c,onChange:l,caller:z}),A=N.useRef(null),j=y?!!g||!!y.closest(`form`):!0,[M,P]=N.useState(new Set),I=i(),L=Array.from(M).map(e=>e.props.value).join(`;`),R=N.useCallback(e=>{P(t=>new Set(t).add(e))},[]),V=N.useCallback(e=>{P(t=>{let n=new Set(t);return n.delete(e),n})},[]),H={required:h,trigger:y,onTriggerChange:b,valueNode:x,onValueNodeChange:S,valueNodeHasChildren:C,onValueNodeHasChildrenChange:w,contentId:I,value:O,onValueChange:k,open:E,onOpenChange:D,dir:T,triggerPointerDownPosRef:A,disabled:m,name:d,autoComplete:f,form:g,nativeOptions:M,nativeSelectKey:L,isFormControl:j};return(0,F.jsx)(ee,{...v,children:(0,F.jsx)(re,{scope:t,...H,children:(0,F.jsx)(B.Provider,{scope:t,children:(0,F.jsx)(ie,{scope:t,onNativeOptionAdd:R,onNativeOptionRemove:V,children:et(_)?_(H):n})})})})}q.displayName=K;var oe=e=>{let{__scopeSelect:t,children:n,...r}=e;return(0,F.jsx)(q,{__scopeSelect:t,...r,internal_do_not_use_render:({isFormControl:e})=>(0,F.jsxs)(F.Fragment,{children:[n,e?(0,F.jsx)($e,{__scopeSelect:t}):null]})})};oe.displayName=z;var se=`SelectTrigger`,ce=N.forwardRef((e,t)=>{let{__scopeSelect:n,disabled:r=!1,...i}=e,a=W(n),s=G(se,n),c=s.disabled||r,l=m(t,s.onTriggerChange),u=V(n),d=N.useRef(`touch`),[f,p,h]=tt(e=>{let t=u().filter(e=>!e.disabled),n=nt(t,e,t.find(e=>e.value===s.value));n!==void 0&&s.onValueChange(n.value)}),g=e=>{c||(s.onOpenChange(!0),h()),e&&(s.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})};return(0,F.jsx)(D,{asChild:!0,...a,children:(0,F.jsx)(b.button,{type:`button`,role:`combobox`,"aria-controls":s.open?s.contentId:void 0,"aria-expanded":s.open,"aria-required":s.required,"aria-autocomplete":`none`,dir:s.dir,"data-state":s.open?`open`:`closed`,disabled:c,"data-disabled":c?``:void 0,"data-placeholder":$(s.value)?``:void 0,...i,ref:l,onClick:o(i.onClick,e=>{e.currentTarget.focus(),d.current!==`mouse`&&g(e)}),onPointerDown:o(i.onPointerDown,e=>{d.current=e.pointerType;let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&e.pointerType===`mouse`&&(g(e),e.preventDefault())}),onKeyDown:o(i.onKeyDown,e=>{let t=f.current!==``;!(e.ctrlKey||e.altKey||e.metaKey)&&e.key.length===1&&p(e.key),!(t&&e.key===` `)&&L.includes(e.key)&&(g(),e.preventDefault())})})})});ce.displayName=se;var le=`SelectValue`,ue=N.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,children:a,placeholder:o=``,...s}=e,c=G(le,n),{onValueNodeHasChildrenChange:l}=c,u=a!==void 0,d=m(t,c.onValueNodeChange);_(()=>{l(u)},[l,u]);let f=$(c.value);return(0,F.jsx)(b.span,{...s,asChild:f?!1:s.asChild,ref:d,style:{pointerEvents:`none`},children:(0,F.jsx)(N.Fragment,{children:f?o:a},f?`placeholder`:`value`)})});ue.displayName=le;var de=`SelectIcon`,fe=N.forwardRef((e,t)=>{let{__scopeSelect:n,children:r,...i}=e;return(0,F.jsx)(b.span,{"aria-hidden":!0,...i,ref:t,children:r||`▼`})});fe.displayName=de;var pe=`SelectPortal`,[me,he]=U(pe,{forceMount:void 0}),ge=e=>{let{__scopeSelect:t,forceMount:n,...r}=e;return(0,F.jsx)(me,{scope:e.__scopeSelect,forceMount:n,children:(0,F.jsx)(s,{asChild:!0,...r})})};ge.displayName=pe;var J=`SelectContent`,_e=N.forwardRef((e,t)=>{let n=he(J,e.__scopeSelect),{forceMount:r=n.forceMount,...i}=e,a=G(J,e.__scopeSelect),[o,s]=N.useState();return _(()=>{s(new DocumentFragment)},[]),(0,F.jsx)(u,{present:r||a.open,children:({present:e})=>e?(0,F.jsx)(Se,{...i,ref:t}):(0,F.jsx)(ve,{...i,fragment:o})})});_e.displayName=J;var ve=N.forwardRef((e,t)=>{let{__scopeSelect:n,children:r,fragment:i}=e;return i?P.createPortal((0,F.jsx)(ye,{scope:n,children:(0,F.jsx)(B.Slot,{scope:n,children:(0,F.jsx)(`div`,{ref:t,children:r})})}),i):null});ve.displayName=`SelectContentFragment`;var Y=10,[ye,X]=U(J),be=`SelectContentImpl`,xe=g(`SelectContent.RemoveScroll`),Se=N.forwardRef((e,t)=>{let{__scopeSelect:n}=e,{position:r=`item-aligned`,onCloseAutoFocus:i,onEscapeKeyDown:s,onPointerDownOutside:u,side:p,sideOffset:h,align:g,alignOffset:_,arrowPadding:v,collisionBoundary:y,collisionPadding:b,sticky:x,hideWhenDetached:S,avoidCollisions:C,...w}=e,T=G(J,n),[E,ee]=N.useState(null),[D,O]=N.useState(null),k=m(t,ee),[A,te]=N.useState(null),[j,M]=N.useState(null),P=V(n),[I,L]=N.useState(!1),R=N.useRef(!1);N.useEffect(()=>{if(E)return c(E)},[E]),d();let z=N.useCallback(e=>{let[t,...n]=P().map(e=>e.ref.current),[r]=n.slice(-1),i=document.activeElement;for(let n of e)if(n===i||(n?.scrollIntoView({block:`nearest`}),n===t&&D&&(D.scrollTop=0),n===r&&D&&(D.scrollTop=D.scrollHeight),n?.focus(),document.activeElement!==i))return},[P,D]),B=N.useCallback(()=>z([A,E]),[z,A,E]);N.useEffect(()=>{I&&B()},[I,B]);let{onOpenChange:H,triggerPointerDownPosRef:U}=T;N.useEffect(()=>{if(E){let e={x:0,y:0},t=t=>{e={x:Math.abs(Math.round(t.pageX)-(U.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(U.current?.y??0))}},n=n=>{e.x<=10&&e.y<=10?n.preventDefault():n.composedPath().includes(E)||H(!1),document.removeEventListener(`pointermove`,t),U.current=null};return U.current!==null&&(document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n,{capture:!0,once:!0})),()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n,{capture:!0})}}},[E,H,U]),N.useEffect(()=>{let e=()=>H(!1);return window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e)}},[H]);let[ne,W]=tt(e=>{let t=P().filter(e=>!e.disabled),n=nt(t,e,t.find(e=>e.ref.current===document.activeElement));n&&setTimeout(()=>n.ref.current?.focus())}),re=N.useCallback((e,t,n)=>{let r=!R.current&&!n;(T.value!==void 0&&T.value===t||r)&&(te(e),r&&(R.current=!0))},[T.value]),ie=N.useCallback(()=>E?.focus(),[E]),ae=N.useCallback((e,t,n)=>{let r=!R.current&&!n;(T.value!==void 0&&T.value===t||r)&&M(e)},[T.value]),K=r===`popper`?Ee:we,q=K===Ee?{side:p,sideOffset:h,align:g,alignOffset:_,arrowPadding:v,collisionBoundary:y,collisionPadding:b,sticky:x,hideWhenDetached:S,avoidCollisions:C}:{};return(0,F.jsx)(ye,{scope:n,content:E,viewport:D,onViewportChange:O,itemRefCallback:re,selectedItem:A,onItemLeave:ie,itemTextRefCallback:ae,focusSelectedItem:B,selectedItemText:j,position:r,isPositioned:I,searchRef:ne,children:(0,F.jsx)(f,{as:xe,allowPinchZoom:!0,children:(0,F.jsx)(l,{asChild:!0,trapped:T.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:o(i,e=>{T.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,F.jsx)(a,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:s,onPointerDownOutside:u,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>T.onOpenChange(!1),children:(0,F.jsx)(K,{role:`listbox`,id:T.contentId,"data-state":T.open?`open`:`closed`,dir:T.dir,onContextMenu:e=>e.preventDefault(),...w,...q,onPlaced:()=>L(!0),ref:k,style:{display:`flex`,flexDirection:`column`,outline:`none`,...w.style},onKeyDown:o(w.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if(e.key===`Tab`&&e.preventDefault(),!t&&e.key.length===1&&W(e.key),[`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key)){let t=P().filter(e=>!e.disabled).map(e=>e.ref.current);if([`ArrowUp`,`End`].includes(e.key)&&(t=t.slice().reverse()),[`ArrowUp`,`ArrowDown`].includes(e.key)){let n=e.target,r=t.indexOf(n);t=t.slice(r+1)}setTimeout(()=>z(t)),e.preventDefault()}})})})})})})});Se.displayName=be;var Ce=`SelectItemAlignedPosition`,we=N.forwardRef((e,t)=>{let{__scopeSelect:n,onPlaced:r,...i}=e,a=G(J,n),o=X(J,n),[s,c]=N.useState(null),[l,u]=N.useState(null),d=m(t,u),f=V(n),p=N.useRef(!1),h=N.useRef(!0),{viewport:g,selectedItem:v,selectedItemText:y,focusSelectedItem:x}=o,S=N.useCallback(()=>{if(a.trigger&&a.valueNode&&s&&l&&g&&v&&y){let e=a.trigger.getBoundingClientRect(),t=l.getBoundingClientRect(),n=a.valueNode.getBoundingClientRect(),i=y.getBoundingClientRect();if(a.dir!==`rtl`){let r=i.left-t.left,a=n.left-r,o=e.left-a,c=e.width+o,l=Math.max(c,t.width),u=window.innerWidth-Y,d=I(a,[Y,Math.max(Y,u-l)]);s.style.minWidth=c+`px`,s.style.left=d+`px`}else{let r=t.right-i.right,a=window.innerWidth-n.right-r,o=window.innerWidth-e.right-a,c=e.width+o,l=Math.max(c,t.width),u=window.innerWidth-Y,d=I(a,[Y,Math.max(Y,u-l)]);s.style.minWidth=c+`px`,s.style.right=d+`px`}let o=f(),c=window.innerHeight-Y*2,u=g.scrollHeight,d=window.getComputedStyle(l),m=parseInt(d.borderTopWidth,10),h=parseInt(d.paddingTop,10),_=parseInt(d.borderBottomWidth,10),b=parseInt(d.paddingBottom,10),x=m+h+u+b+_,S=Math.min(v.offsetHeight*5,x),C=window.getComputedStyle(g),w=parseInt(C.paddingTop,10),T=parseInt(C.paddingBottom,10),E=e.top+e.height/2-Y,ee=c-E,D=v.offsetHeight/2,O=v.offsetTop+D,k=m+h+O,A=x-k;if(k<=E){let e=o.length>0&&v===o[o.length-1].ref.current;s.style.bottom=`0px`;let t=l.clientHeight-g.offsetTop-g.offsetHeight,n=k+Math.max(ee,D+(e?T:0)+t+_);s.style.height=n+`px`}else{let e=o.length>0&&v===o[0].ref.current;s.style.top=`0px`;let t=Math.max(E,m+g.offsetTop+(e?w:0)+D)+A;s.style.height=t+`px`,g.scrollTop=k-E+g.offsetTop}s.style.margin=`${Y}px 0`,s.style.minHeight=S+`px`,s.style.maxHeight=c+`px`,r?.(),requestAnimationFrame(()=>p.current=!0)}},[f,a.trigger,a.valueNode,s,l,g,v,y,a.dir,r]);_(()=>S(),[S]);let[C,w]=N.useState();return _(()=>{l&&w(window.getComputedStyle(l).zIndex)},[l]),(0,F.jsx)(De,{scope:n,contentWrapper:s,shouldExpandOnScrollRef:p,onScrollButtonChange:N.useCallback(e=>{e&&h.current===!0&&(S(),x?.(),h.current=!1)},[S,x]),children:(0,F.jsx)(`div`,{ref:c,style:{display:`flex`,flexDirection:`column`,position:`fixed`,zIndex:C},children:(0,F.jsx)(b.div,{...i,ref:d,style:{boxSizing:`border-box`,maxHeight:`100%`,...i.style}})})})});we.displayName=Ce;var Te=`SelectPopperPosition`,Ee=N.forwardRef((e,t)=>{let{__scopeSelect:n,align:r=`start`,collisionPadding:i=Y,...a}=e,o=W(n);return(0,F.jsx)(C,{...o,...a,ref:t,align:r,collisionPadding:i,style:{boxSizing:`border-box`,...a.style,"--radix-select-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-select-content-available-width":`var(--radix-popper-available-width)`,"--radix-select-content-available-height":`var(--radix-popper-available-height)`,"--radix-select-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-select-trigger-height":`var(--radix-popper-anchor-height)`}})});Ee.displayName=Te;var[De,Oe]=U(J,{}),ke=`SelectViewport`,Ae=N.forwardRef((e,t)=>{let{__scopeSelect:n,nonce:r,...i}=e,a=X(ke,n),s=Oe(ke,n),c=m(t,a.onViewportChange),l=N.useRef(0);return(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`},nonce:r}),(0,F.jsx)(B.Slot,{scope:n,children:(0,F.jsx)(b.div,{"data-radix-select-viewport":``,role:`presentation`,...i,ref:c,style:{position:`relative`,flex:1,overflow:`hidden auto`,...i.style},onScroll:o(i.onScroll,e=>{let t=e.currentTarget,{contentWrapper:n,shouldExpandOnScrollRef:r}=s;if(r?.current&&n){let e=Math.abs(l.current-t.scrollTop);if(e>0){let r=window.innerHeight-Y*2,i=parseFloat(n.style.minHeight),a=parseFloat(n.style.height),o=Math.max(i,a);if(o<r){let i=o+e,a=Math.min(r,i),s=i-a;n.style.height=a+`px`,n.style.bottom===`0px`&&(t.scrollTop=s>0?s:0,n.style.justifyContent=`flex-end`)}}}l.current=t.scrollTop})})})]})});Ae.displayName=ke;var je=`SelectGroup`,[Me,Ne]=U(je),Pe=N.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,a=i();return(0,F.jsx)(Me,{scope:n,id:a,children:(0,F.jsx)(b.div,{role:`group`,"aria-labelledby":a,...r,ref:t})})});Pe.displayName=je;var Fe=`SelectLabel`,Ie=N.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=Ne(Fe,n);return(0,F.jsx)(b.div,{id:i.id,...r,ref:t})});Ie.displayName=Fe;var Z=`SelectItem`,[Le,Re]=U(Z),ze=N.forwardRef((e,t)=>{let{__scopeSelect:n,value:r,disabled:a=!1,textValue:s,...c}=e,l=G(Z,n),u=X(Z,n),d=l.value===r,[f,p]=N.useState(s??``),[h,g]=N.useState(!1),_=m(t,y(e=>u.itemRefCallback?.(e,r,a))),v=i(),x=N.useRef(`touch`),S=()=>{a||(l.onValueChange(r),l.onOpenChange(!1))};return(0,F.jsx)(Le,{scope:n,value:r,disabled:a,textId:v,isSelected:d,onItemTextChange:N.useCallback(e=>{p(t=>t||(e?.textContent??``).trim())},[]),children:(0,F.jsx)(B.ItemSlot,{scope:n,value:r,disabled:a,textValue:f,children:(0,F.jsx)(b.div,{role:`option`,"aria-labelledby":v,"data-highlighted":h?``:void 0,"aria-selected":d&&h,"data-state":d?`checked`:`unchecked`,"aria-disabled":a||void 0,"data-disabled":a?``:void 0,tabIndex:a?void 0:-1,...c,ref:_,onFocus:o(c.onFocus,()=>g(!0)),onBlur:o(c.onBlur,()=>g(!1)),onClick:o(c.onClick,()=>{x.current!==`mouse`&&S()}),onPointerUp:o(c.onPointerUp,()=>{x.current===`mouse`&&S()}),onPointerDown:o(c.onPointerDown,e=>{x.current=e.pointerType}),onPointerMove:o(c.onPointerMove,e=>{x.current=e.pointerType,a?u.onItemLeave?.():x.current===`mouse`&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:o(c.onPointerLeave,e=>{e.currentTarget===document.activeElement&&u.onItemLeave?.()}),onKeyDown:o(c.onKeyDown,e=>{u.searchRef?.current!==``&&e.key===` `||(R.includes(e.key)&&S(),e.key===` `&&e.preventDefault())})})})})});ze.displayName=Z;var Q=`SelectItemText`,Be=N.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,...a}=e,o=G(Q,n),s=X(Q,n),c=Re(Q,n),l=ae(Q,n),[u,d]=N.useState(null),f=y(e=>s.itemTextRefCallback?.(e,c.value,c.disabled)),p=m(t,d,c.onItemTextChange,f),h=u?.textContent,g=N.useMemo(()=>(0,F.jsx)(`option`,{value:c.value,disabled:c.disabled,children:h},c.value),[c.disabled,c.value,h]),{onNativeOptionAdd:v,onNativeOptionRemove:x}=l;return _(()=>(v(g),()=>x(g)),[v,x,g]),(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(b.span,{id:c.textId,...a,ref:p}),c.isSelected&&o.valueNode&&!o.valueNodeHasChildren&&!$(o.value)?P.createPortal(a.children,o.valueNode):null]})});Be.displayName=Q;var Ve=`SelectItemIndicator`,He=N.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return Re(Ve,n).isSelected?(0,F.jsx)(b.span,{"aria-hidden":!0,...r,ref:t}):null});He.displayName=Ve;var Ue=`SelectScrollUpButton`,We=N.forwardRef((e,t)=>{let n=X(Ue,e.__scopeSelect),r=Oe(Ue,e.__scopeSelect),[i,a]=N.useState(!1),o=m(t,r.onScrollButtonChange);return _(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollTop>0;a(e)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,F.jsx)(qe,{...e,ref:o,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop-=t.offsetHeight)}}):null});We.displayName=Ue;var Ge=`SelectScrollDownButton`,Ke=N.forwardRef((e,t)=>{let n=X(Ge,e.__scopeSelect),r=Oe(Ge,e.__scopeSelect),[i,a]=N.useState(!1),o=m(t,r.onScrollButtonChange);return _(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollHeight-t.clientHeight,n=Math.ceil(t.scrollTop)<e;a(n)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,F.jsx)(qe,{...e,ref:o,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop+=t.offsetHeight)}}):null});Ke.displayName=Ge;var qe=N.forwardRef((e,t)=>{let{__scopeSelect:n,onAutoScroll:r,...i}=e,a=X(`SelectScrollButton`,n),s=N.useRef(null),c=V(n),l=N.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null)},[]);return N.useEffect(()=>()=>l(),[l]),_(()=>{c().find(e=>e.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:`nearest`})},[c]),(0,F.jsx)(b.div,{"aria-hidden":!0,...i,ref:t,style:{flexShrink:0,...i.style},onPointerDown:o(i.onPointerDown,()=>{s.current===null&&(s.current=window.setInterval(r,50))}),onPointerMove:o(i.onPointerMove,()=>{a.onItemLeave?.(),s.current===null&&(s.current=window.setInterval(r,50))}),onPointerLeave:o(i.onPointerLeave,()=>{l()})})}),Je=`SelectSeparator`,Ye=N.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return(0,F.jsx)(b.div,{"aria-hidden":!0,...r,ref:t})});Ye.displayName=Je;var Xe=`SelectArrow`,Ze=N.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=W(n);return X(Xe,n).position===`popper`?(0,F.jsx)(w,{...i,...r,ref:t}):null});Ze.displayName=Xe;var Qe=`SelectBubbleInput`,$e=N.forwardRef(({__scopeSelect:e,...t},n)=>{let r=G(Qe,e),{value:i,onValueChange:a,required:o,disabled:s,name:c,autoComplete:l,form:u}=r,{nativeOptions:d,nativeSelectKey:f}=r,p=N.useRef(null),h=m(n,p),g=i??``,_=x(g),v=Array.from(d).some(e=>(e.props.value??``)===``);return N.useEffect(()=>{let e=p.current;if(!e)return;let t=window.HTMLSelectElement.prototype,n=Object.getOwnPropertyDescriptor(t,`value`).set;if(_!==g&&n){let t=new Event(`change`,{bubbles:!0});n.call(e,g),e.dispatchEvent(t)}},[_,g]),(0,F.jsxs)(b.select,{"aria-hidden":!0,required:o,tabIndex:-1,name:c,autoComplete:l,disabled:s,form:u,onChange:e=>a(e.target.value),...t,style:{...S,...t.style},ref:h,defaultValue:g,children:[$(i)&&!v?(0,F.jsx)(`option`,{value:``}):null,Array.from(d)]},f)});$e.displayName=Qe;function et(e){return typeof e==`function`}function $(e){return e===``||e===void 0}function tt(e){let t=y(e),n=N.useRef(``),r=N.useRef(0),i=N.useCallback(e=>{let i=n.current+e;t(i),(function e(t){n.current=t,window.clearTimeout(r.current),t!==``&&(r.current=window.setTimeout(()=>e(``),1e3))})(i)},[t]),a=N.useCallback(()=>{n.current=``,window.clearTimeout(r.current)},[]);return N.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,a]}function nt(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=rt(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.textValue.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function rt(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var it=({open:e,defaultOpen:t,onOpenChange:n,children:r,...i})=>{let a=e!==void 0,[o,s]=N.useState(t??!1),c=a?e:o,l=N.useCallback(e=>{a||s(e),n?.(e)},[a,n]),u=N.useRef(l);return N.useEffect(()=>{u.current=l},[l]),N.useEffect(()=>{if(!c)return;let e=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),u.current(!1))};return document.addEventListener(`keydown`,e,{capture:!0}),()=>document.removeEventListener(`keydown`,e,{capture:!0})},[c]),(0,F.jsx)(oe,{...i,open:c,onOpenChange:l,children:r})},at=Pe,ot=ue,st=N.forwardRef(({className:e,children:t,...n},r)=>(0,F.jsxs)(ce,{ref:r,className:h(A(`self`),`flex h-(--control-height) w-full items-center justify-between px-3 py-2 text-control whitespace-nowrap hover:bg-button-hover data-[placeholder]:text-muted-foreground [&>span]:line-clamp-1`,e),...n,children:[t,(0,F.jsx)(fe,{asChild:!0,children:(0,F.jsx)(k,{className:`-mr-0.5 ml-1 size-4 opacity-50`})})]}));st.displayName=ce.displayName;var ct=N.forwardRef(({className:e,...t},n)=>(0,F.jsx)(We,{ref:n,className:h(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,F.jsx)(O,{className:`size-4`})}));ct.displayName=We.displayName;var lt=N.forwardRef(({className:e,...t},n)=>(0,F.jsx)(Ke,{ref:n,className:h(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,F.jsx)(k,{className:`size-4`})}));lt.displayName=Ke.displayName;var ut=N.forwardRef(({className:e,children:t,position:n=`popper`,...r},i)=>(0,F.jsx)(ge,{children:(0,F.jsx)(`div`,{className:T,children:(0,F.jsxs)(_e,{ref:i,className:h(`relative z-[9999] max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border/60 bg-surface-elevated-2 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-border/30`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,...r,children:[(0,F.jsx)(ct,{}),(0,F.jsx)(Ae,{className:h(`p-1`,n===`popper`&&`h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]`),children:t}),(0,F.jsx)(lt,{})]})})}));ut.displayName=_e.displayName;var dt=N.forwardRef(({className:e,...t},n)=>(0,F.jsx)(Ie,{ref:n,className:h(`px-2 py-1.5 text-control font-semibold`,e),...t}));dt.displayName=Ie.displayName;var ft=N.forwardRef(({className:e,children:t,...n},r)=>(0,F.jsxs)(ze,{ref:r,className:h(`relative flex w-full cursor-default items-center rounded-xs py-1.5 pr-8 pl-2 text-control outline-hidden select-none focus:bg-interactive-hover focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,e),...n,children:[(0,F.jsx)(`span`,{className:`absolute right-2 flex size-3.5 items-center justify-center`,children:(0,F.jsx)(He,{children:(0,F.jsx)(M,{className:`size-4`})})}),(0,F.jsx)(Be,{children:t})]}));ft.displayName=ze.displayName;var pt=N.forwardRef(({className:e,...t},n)=>(0,F.jsx)(Ye,{ref:n,className:h(`-mx-1 my-1 h-px bg-muted`,e),...t}));pt.displayName=Ye.displayName;export{dt as a,I as c,ft as i,ut as n,st as o,at as r,ot as s,it as t};