ghost 6.62.0 → 6.63.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 (439) hide show
  1. package/components/tryghost-adapter-base-jobs-0.0.0.tgz +0 -0
  2. package/components/tryghost-adapter-base-scheduling-0.2.3.tgz +0 -0
  3. package/components/tryghost-adapter-base-sso-0.1.3.tgz +0 -0
  4. package/components/tryghost-admin-api-schema-0.0.0.tgz +0 -0
  5. package/components/tryghost-checkout-0.0.0.tgz +0 -0
  6. package/components/tryghost-i18n-0.0.0.tgz +0 -0
  7. package/components/tryghost-kg-card-factory-5.2.4.tgz +0 -0
  8. package/components/tryghost-kg-clean-basic-html-4.3.4.tgz +0 -0
  9. package/components/tryghost-kg-converters-1.2.5.tgz +0 -0
  10. package/components/tryghost-kg-default-cards-10.3.5.tgz +0 -0
  11. package/components/tryghost-kg-default-nodes-2.2.1.tgz +0 -0
  12. package/components/tryghost-kg-default-transforms-1.3.4.tgz +0 -0
  13. package/components/tryghost-kg-html-to-lexical-1.4.0.tgz +0 -0
  14. package/components/tryghost-kg-lexical-html-renderer-1.5.0.tgz +0 -0
  15. package/components/tryghost-kg-markdown-html-renderer-7.2.4.tgz +0 -0
  16. package/components/tryghost-kg-utils-1.1.4.tgz +0 -0
  17. package/components/tryghost-limit-service-0.0.0.tgz +0 -0
  18. package/components/tryghost-metafield-types-0.0.0.tgz +0 -0
  19. package/content/themes/source/package.json +2 -2
  20. package/content/themes/source/partials/post-card.hbs +1 -1
  21. package/core/boot.js +7 -5
  22. package/core/built/admin/assets/{about-Dyae_UT6.js → about-C1C3s5-g.js} +1 -1
  23. package/core/built/admin/assets/accordion-CxGsDKwa.js +1 -0
  24. package/core/built/admin/assets/{account-migration-CESa0mnX.js → account-migration-CbUhW6gk.js} +1 -1
  25. package/core/built/admin/assets/activitypub/{account-migration-By69CgCp.js → account-migration-KA6Jjf9L.js} +7 -7
  26. package/core/built/admin/assets/activitypub/activitypub.js +3 -3
  27. package/core/built/admin/assets/activitypub/{avatar-DLPL3Abs.js → avatar-DVJF5bxP.js} +2 -2
  28. package/core/built/admin/assets/activitypub/{avatar-flipboard-C9iDY-QV.js → avatar-flipboard-csQaNeYK.js} +2 -2
  29. package/core/built/admin/assets/activitypub/{bluesky-sharing-BJcPMrDd.js → bluesky-sharing-C7nTDMvw.js} +9 -9
  30. package/core/built/admin/assets/activitypub/{content-formatters-3rTHg3mp.js → content-formatters-CLcjaBwV.js} +4 -4
  31. package/core/built/admin/assets/activitypub/{copy-DIAOQoCZ.js → copy-DcOh8kXw.js} +2 -2
  32. package/core/built/admin/assets/activitypub/{domain-DUR4xSkV.js → domain-fZ-X8i4-.js} +9 -9
  33. package/core/built/admin/assets/activitypub/{edit-profile-BqtfzxCp.js → edit-profile-BqMLQV88.js} +6 -6
  34. package/core/built/admin/assets/activitypub/{explore-BxuJd-J4.js → explore-B4yPoP8E.js} +10 -10
  35. package/core/built/admin/assets/activitypub/{feed-BM1TcksA.js → feed-BRC_mvAe.js} +9 -9
  36. package/core/built/admin/assets/activitypub/{field-Dn7HHx2-.js → field-COacNgOt.js} +3 -3
  37. package/core/built/admin/assets/activitypub/{hash-Bm3WxYN4.js → hash-C7u-irQQ.js} +2 -2
  38. package/core/built/admin/assets/activitypub/{inbox-CCjkuow2.js → inbox-BW-yvUoN.js} +10 -10
  39. package/core/built/admin/assets/activitypub/{inbox-d8oJRTf4.js → inbox-CbTTdDQ3.js} +2 -2
  40. package/core/built/admin/assets/activitypub/{label-1AA_s9Fa.js → label-kPMmYI7l.js} +3 -3
  41. package/core/built/admin/assets/activitypub/layout-BL4_jtuV.js +1 -0
  42. package/core/built/admin/assets/activitypub/{moderation-CnmxEB8w.js → moderation-CuidJzc0.js} +10 -10
  43. package/core/built/admin/assets/activitypub/{note-ZKc_Bnba.js → note-CAMRRSqD.js} +7 -7
  44. package/core/built/admin/assets/activitypub/{notifications-CB2tJZau.js → notifications-BmNlXGgp.js} +9 -9
  45. package/core/built/admin/assets/activitypub/{onboarding-BsJ9E5qf.js → onboarding-Bqg7fh_L.js} +2 -2
  46. package/core/built/admin/assets/activitypub/{onboarding-CSUJJIlh.js → onboarding-Dmun9jr_.js} +2 -2
  47. package/core/built/admin/assets/activitypub/{preferences-0-JZnUkI.js → preferences--oH19wf9.js} +11 -11
  48. package/core/built/admin/assets/activitypub/{profile-C35cFIhM.js → profile-DH_tQx2D.js} +14 -14
  49. package/core/built/admin/assets/activitypub/{reply-DYK5vVqb.js → reply-Cap9PxSH.js} +2 -2
  50. package/core/built/admin/assets/activitypub/{routes-BD4vscyc.js → routes-DdyY9uFF.js} +30 -30
  51. package/core/built/admin/assets/activitypub/{separator-BbQqTm-p.js → separator-CAxxu8VV.js} +3 -3
  52. package/core/built/admin/assets/activitypub/{settings-BsMROdqh.js → settings-B6EEcVkW.js} +6 -6
  53. package/core/built/admin/assets/activitypub/{site-O0RL9YCN.js → site-BYps63oh.js} +2 -2
  54. package/core/built/admin/assets/activitypub/{step-1-BMSx7c_X.js → step-1-CKjR2KAm.js} +6 -6
  55. package/core/built/admin/assets/activitypub/{step-2-DtPQzlTH.js → step-2-B6PKfOUQ.js} +6 -6
  56. package/core/built/admin/assets/activitypub/{step-3-CLlOZTyt.js → step-3-C-qBbcUo.js} +11 -11
  57. package/core/built/admin/assets/activitypub/{tabs-Dxk-b9M-.js → tabs-DLhZtVde.js} +6 -6
  58. package/core/built/admin/assets/activitypub/{topic-filter-5yZH6tId.js → topic-filter-DsUOuu0k.js} +3 -3
  59. package/core/built/admin/assets/activitypub/{use-activity-pub-queries-CV50qe03.js → use-activity-pub-queries-CX9snsLs.js} +3 -3
  60. package/core/built/admin/assets/activitypub/{use-navigate-with-base-path-Bmk5h4lW.js → use-navigate-with-base-path-DsJTGDSS.js} +988 -959
  61. package/core/built/admin/assets/activitypub/{use-reply-chain-data-Cbvzgjzd.js → use-reply-chain-data-AJi9zkzm.js} +5 -5
  62. package/core/built/admin/assets/activitypub/{users-BjcoP_HC.js → users-inweyKL5.js} +186 -160
  63. package/core/built/admin/assets/activitypub/{x-DbQZOLiI.js → x-DR8AT3-4.js} +2 -2
  64. package/core/built/admin/assets/{add-integration-modal-BlF6rs_f.js → add-integration-modal-BT_onDJy.js} +1 -1
  65. package/core/built/admin/assets/{add-newsletter-modal-CglVQqah.js → add-newsletter-modal-Cx1kQpiY.js} +1 -1
  66. package/core/built/admin/assets/{add-recommendation-modal-wz7BsuaG.js → add-recommendation-modal-B5nvAhvr.js} +1 -1
  67. package/core/built/admin/assets/{analytics-C4HE1gBg.js → analytics-DjoJWPI7.js} +1 -1
  68. package/core/built/admin/assets/{announcement-bar-modal-Ci4zz8jO.js → announcement-bar-modal-Dwd0EGFP.js} +1 -1
  69. package/core/built/admin/assets/{api-keys-3-0vJC3Y.js → api-keys-BGPzLHzA.js} +1 -1
  70. package/core/built/admin/assets/{api-keys-Ck-Yteiv.js → api-keys-BoeacM-s.js} +1 -1
  71. package/core/built/admin/assets/{audience-CtbA54Sn.js → audience-ceV3XVHq.js} +1 -1
  72. package/core/built/admin/assets/automated-emails-BLesE41L.js +1 -0
  73. package/core/built/admin/assets/{automations-sAcJ1334.js → automations-BN4u3GR8.js} +1 -1
  74. package/core/built/admin/assets/automations-C-ZTUwW3.js +1 -0
  75. package/core/built/admin/assets/{bluesky-sharing-BEtJ_gL_.js → bluesky-sharing-vzh-oPXL.js} +1 -1
  76. package/core/built/admin/assets/{breadcrumb-zUrZrBtW.js → breadcrumb-CaLk2b7D.js} +1 -1
  77. package/core/built/admin/assets/{button-eNMKQWXr.js → button-Dvcv1QSR.js} +1 -1
  78. package/core/built/admin/assets/calendar-Bl9RLcZX.js +1 -0
  79. package/core/built/admin/assets/{chart-helpers-CfBKt0vT.js → chart-helpers-FHywU0pj.js} +1 -1
  80. package/core/built/admin/assets/{checkbox-CgOn_tKW.js → checkbox-BtayFtjg.js} +1 -1
  81. package/core/built/admin/assets/chunk.254.035b85ec456ebbd7336b.js +440 -0
  82. package/core/built/admin/assets/{chunk.524.a697dee88db67fdf6021.js → chunk.524.e6975095fccdf22d90f8.js} +5 -5
  83. package/core/built/admin/assets/{chunk.582.5ed5d124cfca9c259b9c.js → chunk.582.98b485f9b2802f540897.js} +6 -6
  84. package/core/built/admin/assets/{chunk.492.f24d855d7e3f3aad261c.js → chunk.901.4ccc639821020230bcca.js} +9949 -7921
  85. package/core/built/admin/assets/{code-editor-view-K2wI-I5f.js → code-editor-view-C3ZfoF1X.js} +1 -1
  86. package/core/built/admin/assets/{code-editor-view-BYNoAoNV.js → code-editor-view-CAyRWy1s.js} +1 -1
  87. package/core/built/admin/assets/{color-picker-Ddw80xX6.js → color-picker-G4kGR7rp.js} +1 -1
  88. package/core/built/admin/assets/{color-picker-field-D9nUhvA7.js → color-picker-field-DQFVTNnT.js} +1 -1
  89. package/core/built/admin/assets/{combobox-w9j8PPQT.js → combobox-BnYzgEB4.js} +1 -1
  90. package/core/built/admin/assets/{command-BfpHORBv.js → command-C_vyTikI.js} +1 -1
  91. package/core/built/admin/assets/comments-aBrxfnZf.js +1 -0
  92. package/core/built/admin/assets/{config-DOMQDZGZ.js → config-kSHvwdTG.js} +1 -1
  93. package/core/built/admin/assets/{confirmation-context-CBM8G0Vj.js → confirmation-context-DwXX_Y5h.js} +1 -1
  94. package/core/built/admin/assets/{content-api-modal-TXRz3U7S.js → content-api-modal-D2G0nJP6.js} +1 -1
  95. package/core/built/admin/assets/{context-menu-_QMdd3kp.js → context-menu-DOVB6yaz.js} +1 -1
  96. package/core/built/admin/assets/{copy-field-6N01S07E.js → copy-field-DCJwh9qf.js} +1 -1
  97. package/core/built/admin/assets/{create-ghost-browse-value-source-qIBymvvf.js → create-ghost-browse-value-source-5C53jJaX.js} +1 -1
  98. package/core/built/admin/assets/custom-field-type-option-BAuW0F-E.js +1 -0
  99. package/core/built/admin/assets/{custom-integration-modal-DmNquxUV.js → custom-integration-modal-AbJGVyKc.js} +1 -1
  100. package/core/built/admin/assets/{date-range-select-uvz_DtPh.js → date-range-select-BY3K-ukj.js} +1 -1
  101. package/core/built/admin/assets/design-and-theme-modal-BvEy4_pC.js +2 -0
  102. package/core/built/admin/assets/{dirty-confirm-dialog-BZ1iytEd.js → dirty-confirm-dialog-DVPuGz3U.js} +1 -1
  103. package/core/built/admin/assets/{disabled-sources-indicator-DMRrxsiJ.js → disabled-sources-indicator-Cy7Zp4c8.js} +1 -1
  104. package/core/built/admin/assets/{domain-BNYrt0aD.js → domain-Dl61QGuk.js} +1 -1
  105. package/core/built/admin/assets/{dropzone-D7nFdAe5.js → dropzone-Dtz5Rmjt.js} +4 -4
  106. package/core/built/admin/assets/edit-profile-DNJSMDwm.js +1 -0
  107. package/core/built/admin/assets/editor-DbAen9zf.js +8 -0
  108. package/core/built/admin/assets/editor-screen-BFWThIai.js +26 -0
  109. package/core/built/admin/assets/email-sending-status-context-CWDOD1FN.js +1 -0
  110. package/core/built/admin/assets/email-sending-status-provider-DCPkDICt.js +1 -0
  111. package/core/built/admin/assets/emails-vFMk4yYl.js +1 -0
  112. package/core/built/admin/assets/{embed-signup-form-modal-Ds6mPEi5.js → embed-signup-form-modal-DGqsORxS.js} +1 -1
  113. package/core/built/admin/assets/{explore-UY10Egsp.js → explore-nnRr1Fja.js} +1 -1
  114. package/core/built/admin/assets/feature-flag-overrides-context-DQjdJFAk.js +1 -0
  115. package/core/built/admin/assets/{feature-image-placeholder-D1iF_8bc.js → feature-image-placeholder-BrIHmPs8.js} +1 -1
  116. package/core/built/admin/assets/{feed-81C8mJWR.js → feed-BNUcNu-W.js} +1 -1
  117. package/core/built/admin/assets/feedback-DJ4Zb9rZ.js +1 -0
  118. package/core/built/admin/assets/{field-Dihp5p18.js → field-C93_Mg6j.js} +1 -1
  119. package/core/built/admin/assets/filter-sources-CGJb4C5r.js +1 -0
  120. package/core/built/admin/assets/{filters-DirqNXjH.js → filters--kKP-EC8.js} +1 -1
  121. package/core/built/admin/assets/filters-DxA_a4FP.js +1 -0
  122. package/core/built/admin/assets/{first-promoter-modal-CT6MxYZb.js → first-promoter-modal-BYDtrz2S.js} +1 -1
  123. package/core/built/admin/assets/focus-koenig-editor-on-bottom-click-BbSnGOtK.js +1 -0
  124. package/core/built/admin/assets/{ghost-8eabfc1ece81b03cf7b90780d31487e8.css → ghost-8fd5bb799356bbefb254210ba7e1236d.css} +1 -1
  125. package/core/built/admin/assets/{ghost-c2848508292937415f20f5a830eea59e.js → ghost-b4e8a403baba61905cd7560e30b9732d.js} +43 -27
  126. package/core/built/admin/assets/{ghost-dark-a7bebe2c561f55369dcf29f4c820f7ff.css → ghost-dark-cac0cb2d5bb78e9bd14d8d1c2768ed45.css} +1 -1
  127. package/core/built/admin/assets/{gift-link-modal-CQVAye17.js → gift-link-modal-B7u5bD4e.js} +1 -1
  128. package/core/built/admin/assets/{gift-links-DLDS7ljO.js → gift-links-CfLSnst2.js} +1 -1
  129. package/core/built/admin/assets/growth-Cd1uO9d2.js +1 -0
  130. package/core/built/admin/assets/growth-aG32xfdE.js +3 -0
  131. package/core/built/admin/assets/{history-modal-CFd1Hvx6.js → history-modal-Df8lW8h-.js} +1 -1
  132. package/core/built/admin/assets/hooks-Cy_-oZ4o.js +2 -0
  133. package/core/built/admin/assets/{html-field-CJBCLTvv.js → html-field-DA4eU7eq.js} +1 -1
  134. package/core/built/admin/assets/{images-scfkWZiK.js → images-KXmyO3Ss.js} +1 -1
  135. package/core/built/admin/assets/{inbox-Mcp4DXZN.js → inbox-gJHG7_xd.js} +6 -6
  136. package/core/built/admin/assets/index-BHHXtR5C.css +2 -0
  137. package/core/built/admin/assets/index-CgMCwsxN.js +4 -0
  138. package/core/built/admin/assets/index.es-CY6-yuw9.js +1 -0
  139. package/core/built/admin/assets/{input-group-CMhe2DvY.js → input-group-BE8rM2y1.js} +1 -1
  140. package/core/built/admin/assets/{integrations-Bjbu86Z0.js → integrations-B4kuRBFY.js} +1 -1
  141. package/core/built/admin/assets/{invite-user-modal-DfheMXs0.js → invite-user-modal-B4CuNcx4.js} +1 -1
  142. package/core/built/admin/assets/koenig-lexical/koenig-lexical.js +2 -2
  143. package/core/built/admin/assets/koenig-lexical/koenig-lexical.umd.js +2 -2
  144. package/core/built/admin/assets/{koenig-lexical-DBSqAuiI.js → koenig-lexical-CGXb0F8o.js} +2 -2
  145. package/core/built/admin/assets/koenig-loader-BeM5rFPX.js +2 -0
  146. package/core/built/admin/assets/{kpi-card-DBRMfGOW.js → kpi-card-B21aToe8.js} +1 -1
  147. package/core/built/admin/assets/{kpi-card-DFafD1qq.js → kpi-card-pz6Wv4Ae.js} +1 -1
  148. package/core/built/admin/assets/{kpi-helpers-Cv8i8hns.js → kpi-helpers-Dq5jelmP.js} +1 -1
  149. package/core/built/admin/assets/{kpi-tabs-BJItvLYm.js → kpi-tabs-DEZHpKUt.js} +1 -1
  150. package/core/built/admin/assets/{label-BnSCvffu.js → label-OLCzze8N.js} +1 -1
  151. package/core/built/admin/assets/label-picker-BigOvMPV.js +1 -0
  152. package/core/built/admin/assets/{labels-CH3Kn8RV.js → labels-Dr0SgUQD.js} +1 -1
  153. package/core/built/admin/assets/layout-DUTL8SH5.js +1 -0
  154. package/core/built/admin/assets/lib-7QPTI0FS.js +1 -0
  155. package/core/built/admin/assets/link-helpers-BRAg9SCj.js +1 -0
  156. package/core/built/admin/assets/links-BDHPTlyj.js +1 -0
  157. package/core/built/admin/assets/{member-custom-fields-DDQV6QeG.js → member-custom-fields-TRTHCAz9.js} +1 -1
  158. package/core/built/admin/assets/member-detail-b6dRwc3C.js +1 -0
  159. package/core/built/admin/assets/members-Czt5lJSc.js +4 -0
  160. package/core/built/admin/assets/{moderation-AgCIEso4.js → moderation-ZWefD9uH.js} +1 -1
  161. package/core/built/admin/assets/{multi-select-combobox-BcITkUVr.js → multi-select-combobox-CT13MTo-.js} +1 -1
  162. package/core/built/admin/assets/navigation-modal-C8FEhBK5.js +1 -0
  163. package/core/built/admin/assets/newsletter-5VYW4RyJ.js +1 -0
  164. package/core/built/admin/assets/newsletter-detail-modal-ChjC0ZqH.js +1 -0
  165. package/core/built/admin/assets/{newsletter-emails-DKzwafuh.js → newsletter-emails-DZH6I-PY.js} +1 -1
  166. package/core/built/admin/assets/{newsletters-BRBb_uQC.js → newsletters-DOC9KBcX.js} +1 -1
  167. package/core/built/admin/assets/newsletters-Rq1M3GD-.js +1 -0
  168. package/core/built/admin/assets/{note-DyGHtS9a.js → note-DIV-Pojr.js} +1 -1
  169. package/core/built/admin/assets/{notifications-ZgWniKna.js → notifications-s20-H49V.js} +1 -1
  170. package/core/built/admin/assets/{offers-9J1CSiLy.js → offers--e2nGvkW.js} +1 -1
  171. package/core/built/admin/assets/{offers-container-modal-B-E8TIWr.js → offers-container-modal-BmG5M5Tv.js} +1 -1
  172. package/core/built/admin/assets/onboarding-CUuy9unR.js +1 -0
  173. package/core/built/admin/assets/{onboarding-CzIsre-d.js → onboarding-pXyct0Jm.js} +1 -1
  174. package/core/built/admin/assets/{onboarding-route-CaavZulg.js → onboarding-route-CK4pcXoR.js} +1 -1
  175. package/core/built/admin/assets/overview-CaPsciMs.js +1 -0
  176. package/core/built/admin/assets/overview-a8GfcsKX.js +1 -0
  177. package/core/built/admin/assets/{page-header-De0VzKBi.js → page-header-DM_KyoFI.js} +1 -1
  178. package/core/built/admin/assets/{pagemenu-B5KKCpbA.js → pagemenu-vgZVUVKR.js} +1 -1
  179. package/core/built/admin/assets/pages-CjDY2CBI.js +1 -0
  180. package/core/built/admin/assets/pages-route-BzKZYdV5.js +1 -0
  181. package/core/built/admin/assets/{pintura-modal-BZ2J9w3n.js → pintura-modal-DExCF1ii.js} +1 -1
  182. package/core/built/admin/assets/{portal-frame-B6Hr9wHc.js → portal-frame-Cqanidq4.js} +1 -1
  183. package/core/built/admin/assets/portal-modal-oinBgA27.js +1 -0
  184. package/core/built/admin/assets/post-analytics-C5oJ1dWV.js +1 -0
  185. package/core/built/admin/assets/post-analytics-header-OATo3X_r.js +1 -0
  186. package/core/built/admin/assets/post-analytics-provider-tOpIVGT5.js +1 -0
  187. package/core/built/admin/assets/post-helpers-C88JBa4D.js +1 -0
  188. package/core/built/admin/assets/post-share-modal-DvhC1XgV.js +1 -0
  189. package/core/built/admin/assets/post-utils-DKF4mfuo.js +1 -0
  190. package/core/built/admin/assets/posts-list-screen-o4ZjbgS3.js +2 -0
  191. package/core/built/admin/assets/posts-pCPrhQeR.js +1 -0
  192. package/core/built/admin/assets/posts-route-9F--xdIb.js +1 -0
  193. package/core/built/admin/assets/{preferences-C5YJLp74.js → preferences--vNubsqD.js} +2 -2
  194. package/core/built/admin/assets/{preview-modal-BfeFqi5y.js → preview-modal-YYbzlYdO.js} +1 -1
  195. package/core/built/admin/assets/profile-BllKV3dR.js +1 -0
  196. package/core/built/admin/assets/radio-group-DL8GI8rt.js +1 -0
  197. package/core/built/admin/assets/{referrers-CnhCMWCs.js → referrers-D8oHPmDB.js} +1 -1
  198. package/core/built/admin/assets/router-provider-BSvTXgZY.js +1 -0
  199. package/core/built/admin/assets/schemas-BoYdB6YU.js +64 -0
  200. package/core/built/admin/assets/{select-cb0t_TAJ.js → select-v5YbA3Mw.js} +1 -1
  201. package/core/built/admin/assets/settings-PEsZupw1.js +4 -0
  202. package/core/built/admin/assets/{settings-breadcrumbs-DLzbRRSt.js → settings-breadcrumbs-NwPnCTC7.js} +1 -1
  203. package/core/built/admin/assets/{settings-DZqxR0Da.js → settings-u_s1CRkr.js} +1 -1
  204. package/core/built/admin/assets/{share-modal-D2-Bz1_I.js → share-modal-SskCmVGL.js} +1 -1
  205. package/core/built/admin/assets/{slack-modal-DYDTUria.js → slack-modal-XxSJiYgo.js} +1 -1
  206. package/core/built/admin/assets/{sort-button-VVeQjjbu.js → sort-button-Cx1KtINE.js} +1 -1
  207. package/core/built/admin/assets/{source-icon-Ck5_5Kgq.js → source-icon-Bdp9Im_5.js} +1 -1
  208. package/core/built/admin/assets/stats-D9PDLS3x.js +1 -0
  209. package/core/built/admin/assets/stats-view-W2g6Jsd-.js +1 -0
  210. package/core/built/admin/assets/{step-1-CsaBjeN4.js → step-1-BQYzvBzr.js} +1 -1
  211. package/core/built/admin/assets/{step-2-D2vnxOOM.js → step-2-xES32xJV.js} +1 -1
  212. package/core/built/admin/assets/{step-3-wBoLdGEb.js → step-3-DA_XK5kW.js} +2 -2
  213. package/core/built/admin/assets/{stripe-button-CDgLz0S0.js → stripe-button-CVsLHelt.js} +1 -1
  214. package/core/built/admin/assets/{stripe-connect-modal-CSjMJetP.js → stripe-connect-modal-ClmLOMGS.js} +1 -1
  215. package/core/built/admin/assets/style-Wd9nQubI.css +1 -0
  216. package/core/built/admin/assets/{table-Do6iQ83Q.js → table-BenqVupI.js} +1 -1
  217. package/core/built/admin/assets/{tabs-D2yWLMp_.js → tabs-eBBlxPp8.js} +1 -1
  218. package/core/built/admin/assets/tag-detail-Ce8Se2qd.js +2 -0
  219. package/core/built/admin/assets/tag-picker-C3UR-uJ-.js +1 -0
  220. package/core/built/admin/assets/tags-B-kJxCs7.js +1 -0
  221. package/core/built/admin/assets/{tags-zTFiKRpb.js → tags-ChfdwJyS.js} +1 -1
  222. package/core/built/admin/assets/{testimonials-modal-CtnZBJKl.js → testimonials-modal-9Q6fT06V.js} +1 -1
  223. package/core/built/admin/assets/tier-detail-modal-CDyYdqK7.js +1 -0
  224. package/core/built/admin/assets/tiers-BCpIOGQr.js +1 -0
  225. package/core/built/admin/assets/{toggle-group-ByUJsxwD.js → toggle-group-CviIkyok.js} +1 -1
  226. package/core/built/admin/assets/{topic-filter-BgC3g5_v.js → topic-filter-I2jCBGxm.js} +1 -1
  227. package/core/built/admin/assets/{transistor-modal-Drr0SNfo.js → transistor-modal-p53u3W8y.js} +1 -1
  228. package/core/built/admin/assets/{trend-badge-6ye93YAW.js → trend-badge-CideVzQd.js} +1 -1
  229. package/core/built/admin/assets/{unsplash-modal-p6AoQoWp.js → unsplash-modal-DY8UcKcE.js} +1 -1
  230. package/core/built/admin/assets/{use-analytics-data-CWCMAESo.js → use-analytics-data-DAIGcr2f.js} +1 -1
  231. package/core/built/admin/assets/{use-check-theme-limit-error-Cw3WQHy8.js → use-check-theme-limit-error-DRUjK4YM.js} +1 -1
  232. package/core/built/admin/assets/use-filter-params-JkZhIS8L.js +1 -0
  233. package/core/built/admin/assets/{use-filterable-api-CzXcpUh8.js → use-filterable-api-BVEVMrhZ.js} +1 -1
  234. package/core/built/admin/assets/{use-growth-stats-DCVG3s9w.js → use-growth-stats-937CUj6j.js} +1 -1
  235. package/core/built/admin/assets/use-host-limits-D0Dv3tKA.js +1 -0
  236. package/core/built/admin/assets/{use-limiter-D2WRRx0H.js → use-limiter-CohWfzvK.js} +1 -1
  237. package/core/built/admin/assets/{use-navigate-with-base-path-BHPA228f.js → use-navigate-with-base-path-BkxcPj5l.js} +1 -1
  238. package/core/built/admin/assets/use-pintura-config-xgytjU35.js +1 -0
  239. package/core/built/admin/assets/{use-pintura-editor-BfN1UwzH.js → use-pintura-editor-CaV1mbfO.js} +1 -1
  240. package/core/built/admin/assets/{use-post-referrers-Czg47m8s.js → use-post-referrers-BCQI7fDg.js} +1 -1
  241. package/core/built/admin/assets/{use-reply-chain-data-ns0caK8k.js → use-reply-chain-data-CYRhoaxY.js} +1 -1
  242. package/core/built/admin/assets/{use-router-history-entry-uldn7zJO.js → use-router-history-entry-NOKcd--l.js} +1 -1
  243. package/core/built/admin/assets/{use-setting-group-DpcuCUDg.js → use-setting-group-bLKMwoBT.js} +1 -1
  244. package/core/built/admin/assets/{use-settings-navigation-CZjGrhsp.js → use-settings-navigation-B-qrriKD.js} +1 -1
  245. package/core/built/admin/assets/{use-simple-pagination-DzJWobPR.js → use-simple-pagination-CNPd6Rf6.js} +1 -1
  246. package/core/built/admin/assets/use-staff-users-pRIMIyiW.js +1 -0
  247. package/core/built/admin/assets/{use-tinybird-query-CSnGXzZh.js → use-tinybird-query-CmdbCS9X.js} +1 -1
  248. package/core/built/admin/assets/{use-tinybird-token-DTOKRR7e.js → use-tinybird-token-KLne235s.js} +1 -1
  249. package/core/built/admin/assets/{use-unsaved-changes-guard-CBzs-KPi.js → use-unsaved-changes-guard-7-ug0JdH.js} +1 -1
  250. package/core/built/admin/assets/use-upgrade-route-Dm_qqKr0.js +1 -0
  251. package/core/built/admin/assets/{use-url-input-DFr8lCbS.js → use-url-input-fvp-TpPx.js} +1 -1
  252. package/core/built/admin/assets/user-detail-modal-D3KlGYv-.js +1 -0
  253. package/core/built/admin/assets/{users-Cg-OeGzC.js → users-DVNWrqg9.js} +1 -1
  254. package/core/built/admin/assets/{vendor-5753232c7d6ffb3c44e1eb0a02133953.js → vendor-2dd263291938d407802568d3357ec69e.js} +19 -17
  255. package/core/built/admin/assets/{virtual-list-BW-padMe.js → virtual-list-CZ3RK2Yf.js} +1 -1
  256. package/core/built/admin/assets/{web-C1v33ehA.js → web-ClEJsCAj.js} +2 -2
  257. package/core/built/admin/assets/web-X9rdnrtq.js +1 -0
  258. package/core/built/admin/assets/{zapier-modal-BBFfI6Ml.js → zapier-modal-DfVhV17j.js} +1 -1
  259. package/core/built/admin/index.html +19 -18
  260. package/core/server/adapters/jobs/InMemoryJobsBackend.js +74 -29
  261. package/core/server/api/endpoints/authentication.js +1 -2
  262. package/core/server/api/endpoints/authors-public.js +15 -5
  263. package/core/server/api/endpoints/emails.js +13 -0
  264. package/core/server/api/endpoints/index.js +8 -0
  265. package/core/server/api/endpoints/member-metafields-members.js +23 -0
  266. package/core/server/api/endpoints/member-metafields.js +33 -20
  267. package/core/server/api/endpoints/members-account.js +42 -0
  268. package/core/server/api/endpoints/newsletters-public.js +10 -1
  269. package/core/server/api/endpoints/pages-public.js +15 -5
  270. package/core/server/api/endpoints/posts-public.js +15 -5
  271. package/core/server/api/endpoints/tags-public.js +22 -3
  272. package/core/server/api/endpoints/tiers-checkout-config.js +2 -2
  273. package/core/server/api/endpoints/tiers-public.js +38 -1
  274. package/core/server/api/endpoints/users.js +2 -2
  275. package/core/server/api/endpoints/utils/api-filter-utils.js +170 -3
  276. package/core/server/api/endpoints/utils/public-cache-keys.js +3 -0
  277. package/core/server/api/endpoints/utils/serializers/input/authors.js +2 -0
  278. package/core/server/api/endpoints/utils/serializers/input/members.js +16 -2
  279. package/core/server/api/endpoints/utils/serializers/input/pages.js +2 -0
  280. package/core/server/api/endpoints/utils/serializers/input/posts.js +2 -0
  281. package/core/server/api/endpoints/utils/serializers/input/tags.js +2 -0
  282. package/core/server/api/endpoints/utils/serializers/output/emails.js +7 -0
  283. package/core/server/api/endpoints/utils/serializers/output/index.js +4 -0
  284. package/core/server/api/endpoints/utils/serializers/output/member-metafields.js +3 -3
  285. package/core/server/api/endpoints/utils/serializers/output/members-account.js +19 -0
  286. package/core/server/api/endpoints/utils/serializers/output/members-csv-transform.js +1 -1
  287. package/core/server/api/endpoints/utils/serializers/output/tiers.js +10 -2
  288. package/core/server/api/endpoints/utils/serializers/output/users.js +0 -10
  289. package/core/server/data/exporter/table-lists.js +3 -3
  290. package/core/server/data/migrations/versions/6.53/2026-07-15-20-22-53-add-members-custom-field-values.js +1 -1
  291. package/core/server/data/migrations/versions/6.57/2026-08-04-18-00-00-store-custom-field-values-as-leaf-rows.js +10 -1
  292. package/core/server/data/migrations/versions/6.63/2026-09-03-10-07-03-rename-custom-field-tables-to-metafields.js +169 -0
  293. package/core/server/data/migrations/versions/6.63/2026-09-03-11-03-31-remove-member-custom-field-read-permissions.js +30 -0
  294. package/core/server/data/schema/fixtures/fixtures.json +0 -11
  295. package/core/server/data/schema/lib/default-index-name.js +8 -11
  296. package/core/server/data/schema/schema.js +18 -18
  297. package/core/server/data/seeders/README.md +48 -0
  298. package/core/server/data/tinybird/pipes/mv_hits.pipe +86 -50
  299. package/core/server/lib/db-types/count.js +16 -0
  300. package/core/server/lib/validate-password.js +81 -120
  301. package/core/server/models/action.js +4 -4
  302. package/core/server/models/base/plugins/filtered-collection.js +16 -0
  303. package/core/server/models/member.js +6 -6
  304. package/core/server/models/user.js +1 -1
  305. package/core/server/services/automations/automations-api.js +1 -1
  306. package/core/server/services/automations/database-automations-repository.js +11 -4
  307. package/core/server/services/email-service/CONTEXT.md +37 -0
  308. package/core/server/services/email-service/README.md +42 -0
  309. package/core/server/services/email-service/batch-sending-service.js +2 -0
  310. package/core/server/services/email-service/email-controller.js +18 -2
  311. package/core/server/services/email-service/email-service-wrapper.js +3 -0
  312. package/core/server/services/email-service/sending-status-schema.js +21 -0
  313. package/core/server/services/email-service/sending-status-serializers.js +33 -0
  314. package/core/server/services/email-service/sending-status-service.js +47 -0
  315. package/core/server/services/email-service/sending-status.js +111 -0
  316. package/core/server/services/email-suppression-list/email-suppression-list.js +0 -33
  317. package/core/server/services/email-suppression-list/mailgun-email-suppression-list.js +6 -7
  318. package/core/server/services/gifts/README.md +2 -2
  319. package/core/server/services/gifts/constants.js +1 -1
  320. package/core/server/services/gifts/gift-service.js +19 -57
  321. package/core/server/services/gifts/index.js +0 -2
  322. package/core/server/services/jobs-service/index.js +8 -0
  323. package/core/server/services/jobs-service/jobs-service.js +52 -3
  324. package/core/server/services/jobs-service/register-job-handlers.js +13 -2
  325. package/core/server/services/members/account-service.js +98 -0
  326. package/core/server/services/members/api.js +4 -4
  327. package/core/server/services/members/import-export/export/exporter.js +20 -20
  328. package/core/server/services/members/import-export/import/completion-email.js +6 -6
  329. package/core/server/services/members/import-export/import/importer.js +13 -13
  330. package/core/server/services/members/import-export/index.js +7 -7
  331. package/core/server/services/members/members-api/members-api.js +26 -6
  332. package/core/server/services/members/members-api/repositories/member-repository.js +4 -4
  333. package/core/server/services/members/members-api/services/member-bread-service.js +45 -39
  334. package/core/server/services/members/members-ssr.js +18 -0
  335. package/core/server/services/members/middleware.js +95 -81
  336. package/core/server/services/members/service.js +70 -42
  337. package/core/server/services/members/utils.js +9 -0
  338. package/core/server/services/members-metafields/access.js +28 -0
  339. package/core/server/services/{members-custom-fields → members-metafields}/actions.js +5 -5
  340. package/core/server/services/members-metafields/bindings-service.js +147 -0
  341. package/core/server/services/{members-custom-fields → members-metafields}/codec.js +4 -4
  342. package/core/server/services/{members-custom-fields → members-metafields}/config.js +1 -1
  343. package/core/server/services/{members-custom-fields → members-metafields}/definitions-service.js +17 -23
  344. package/core/server/services/{members-custom-fields → members-metafields}/filter.js +9 -9
  345. package/core/server/services/{members-custom-fields → members-metafields}/index.js +16 -7
  346. package/core/server/services/{members-custom-fields → members-metafields}/key.js +1 -1
  347. package/core/server/services/{members-custom-fields → members-metafields}/models.js +4 -4
  348. package/core/server/services/members-metafields/namespaces.js +34 -0
  349. package/core/server/services/{members-custom-fields → members-metafields}/queries.js +1 -1
  350. package/core/server/services/{members-custom-fields → members-metafields}/schema.js +16 -12
  351. package/core/server/services/{members-custom-fields → members-metafields}/serializers.js +6 -6
  352. package/core/server/services/{members-custom-fields → members-metafields}/values-service.js +32 -22
  353. package/core/server/services/mentions/mention-sending-service.js +26 -9
  354. package/core/server/services/mentions/send-webmentions-job.js +18 -0
  355. package/core/server/services/mentions/service.js +1 -31
  356. package/core/server/services/stripe/services/webhook/checkout-session-event-service.js +2 -2
  357. package/core/server/services/stripe/stripe-service.js +4 -4
  358. package/core/server/services/tier-checkout-config/codec.js +2 -2
  359. package/core/server/services/tier-checkout-config/index.js +2 -1
  360. package/core/server/services/tier-checkout-config/models.js +2 -2
  361. package/core/server/services/tier-checkout-config/queries.js +8 -8
  362. package/core/server/services/tier-checkout-config/serializers.js +57 -0
  363. package/core/server/services/tier-checkout-config/service.js +1 -1
  364. package/core/server/services/tiers/service.js +3 -3
  365. package/core/server/services/url/router-filter.js +8 -10
  366. package/core/server/services/users.js +1 -19
  367. package/core/server/web/api/endpoints/admin/routes.js +1 -0
  368. package/core/server/web/members/account/index.js +2 -0
  369. package/core/server/web/members/account/routes.js +46 -0
  370. package/core/server/web/members/app.js +4 -18
  371. package/core/shared/config/defaults.json +1 -1
  372. package/core/shared/labs.js +4 -2
  373. package/package.json +22 -22
  374. package/pnpm-lock.yaml +513 -571
  375. package/pnpm-workspace.yaml +12 -12
  376. package/components/tryghost-custom-field-types-0.0.0.tgz +0 -0
  377. package/core/built/admin/assets/activitypub/layout-2-0bw6HN.js +0 -1
  378. package/core/built/admin/assets/automated-emails-D5VVMND9.js +0 -1
  379. package/core/built/admin/assets/automations-CzKt5fb8.js +0 -1
  380. package/core/built/admin/assets/chunk.598.7e056fabb47ce7dbd73f.js +0 -366
  381. package/core/built/admin/assets/comments-BLmCmyCs.js +0 -1
  382. package/core/built/admin/assets/custom-field-type-option-BddFlJFa.js +0 -1
  383. package/core/built/admin/assets/design-and-theme-modal-BSmo12Op.js +0 -2
  384. package/core/built/admin/assets/edit-profile-C5Asm4LA.js +0 -1
  385. package/core/built/admin/assets/editor-REokrzci.js +0 -8
  386. package/core/built/admin/assets/filter-sources-BO9xUPj7.js +0 -1
  387. package/core/built/admin/assets/filters-CRUWecfY.js +0 -1
  388. package/core/built/admin/assets/growth-BWIu-6xj.js +0 -3
  389. package/core/built/admin/assets/growth-DU29oxeA.js +0 -1
  390. package/core/built/admin/assets/hooks-CuEZV2-q.js +0 -2
  391. package/core/built/admin/assets/index-6MkPdCtr.js +0 -4
  392. package/core/built/admin/assets/index-Bn7QhcZu.css +0 -2
  393. package/core/built/admin/assets/index.es-CNnuNH0d.js +0 -1
  394. package/core/built/admin/assets/koenig-loader-aFQNlJlD.js +0 -2
  395. package/core/built/admin/assets/label-picker-KVoo91sh.js +0 -1
  396. package/core/built/admin/assets/layout-Bjv2Ll-5.js +0 -1
  397. package/core/built/admin/assets/link-helpers-MVDdnFCY.js +0 -1
  398. package/core/built/admin/assets/member-detail-CdJF6Agw.js +0 -1
  399. package/core/built/admin/assets/members-DjQbq9Z2.js +0 -4
  400. package/core/built/admin/assets/navigation-modal-BkT7b1M2.js +0 -1
  401. package/core/built/admin/assets/newsletter-BMMAuvgq.js +0 -1
  402. package/core/built/admin/assets/newsletter-detail-modal-0SCJ7Zpm.js +0 -1
  403. package/core/built/admin/assets/newsletters-DhNigJUh.js +0 -1
  404. package/core/built/admin/assets/onboarding-qg8Akovm.js +0 -1
  405. package/core/built/admin/assets/overview-BW8GLeYi.js +0 -1
  406. package/core/built/admin/assets/overview-BkXZNzaZ.js +0 -1
  407. package/core/built/admin/assets/pages-jgaFm69d.js +0 -1
  408. package/core/built/admin/assets/pages-route-CIUAQxtY.js +0 -1
  409. package/core/built/admin/assets/portal-modal-D4ceei3t.js +0 -1
  410. package/core/built/admin/assets/post-analytics-header-BYCsT0GP.js +0 -1
  411. package/core/built/admin/assets/post-analytics-ot7f6pih.js +0 -1
  412. package/core/built/admin/assets/post-analytics-provider-Bo1gmYaP.js +0 -1
  413. package/core/built/admin/assets/post-helpers-C5OQMBoi.js +0 -1
  414. package/core/built/admin/assets/post-share-modal-C-PaYZ_e.js +0 -1
  415. package/core/built/admin/assets/posts-DuGazgTb.js +0 -1
  416. package/core/built/admin/assets/posts-list-screen-CBGGgjjj.js +0 -2
  417. package/core/built/admin/assets/posts-route-D6xmS7Vf.js +0 -1
  418. package/core/built/admin/assets/profile-B8mx2yAu.js +0 -1
  419. package/core/built/admin/assets/radio-group-DczlLKOn.js +0 -1
  420. package/core/built/admin/assets/router-provider-B0gZyiGJ.js +0 -1
  421. package/core/built/admin/assets/schemas-DppqmpeJ.js +0 -64
  422. package/core/built/admin/assets/settings-DvfTNdHQ.js +0 -4
  423. package/core/built/admin/assets/stats-Rjmk5owg.js +0 -1
  424. package/core/built/admin/assets/stats-view-BGGmkmgv.js +0 -1
  425. package/core/built/admin/assets/tag-detail-BhXlOsCa.js +0 -2
  426. package/core/built/admin/assets/tags-ldukRApe.js +0 -1
  427. package/core/built/admin/assets/tier-detail-modal-BOs8e_G8.js +0 -1
  428. package/core/built/admin/assets/tiers-Nd_z4BZY.js +0 -1
  429. package/core/built/admin/assets/use-filter-params-BIni9taJ.js +0 -1
  430. package/core/built/admin/assets/use-host-limits-DZtR08oa.js +0 -1
  431. package/core/built/admin/assets/use-pintura-config-h-J0Lvta.js +0 -1
  432. package/core/built/admin/assets/use-staff-users-Csipb-O0.js +0 -1
  433. package/core/built/admin/assets/use-upgrade-route-DhRSo7at.js +0 -1
  434. package/core/built/admin/assets/user-detail-modal-B_iUClI6.js +0 -1
  435. package/core/built/admin/assets/web-C4BKzn2T.js +0 -1
  436. package/core/server/services/email-suppression-list/in-memory-email-suppression-list.js +0 -39
  437. package/core/server/services/members-custom-fields/bindings-service.js +0 -120
  438. /package/core/built/admin/assets/{chunk.492.f24d855d7e3f3aad261c.js.LICENSE.txt → chunk.901.4ccc639821020230bcca.js.LICENSE.txt} +0 -0
  439. /package/core/server/services/{members-custom-fields → members-metafields}/storage.js +0 -0
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{f as r,n as i,p as a}from"./hooks-CuEZV2-q.js";import{n as o}from"./dist-Ndy-PuGN.js";import{t as s}from"./use-form-vRjI0Kwk.js";import{h as c}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{m as l}from"./dist-B3keLvjj.js";import{t as u}from"./box-CdfQAP_F.js";import{t as d}from"./inline-BWSs_VzR.js";import{t as f}from"./stack-B2eszIiq.js";import{D as p,ft as m,o as h,t as g}from"./button-eNMKQWXr.js";import{a as _,i as v,n as y,o as b,r as x,s as S,t as C}from"./select-cb0t_TAJ.js";import{o as w,t as ee}from"./use-settings-navigation-CZjGrhsp.js";import{t as T}from"./empty-indicator-D9QdpuNX.js";import{a as E,i as D,o as O,t as k}from"./field-Dihp5p18.js";import{a as A,c as j,n as te,r as M,s as N,t as P}from"./table-Do6iQ83Q.js";import{$n as F,Un as I}from"./index-6MkPdCtr.js";import{a as ne,c as re,i as ie,n as L,o as R,r as z,s as B,t as V}from"./images-scfkWZiK.js";import{t as H}from"./validator-Cr0sMKuW.js";import{n as U}from"./confirmation-context-CBM8G0Vj.js";import{a as W,n as G,t as K}from"./integrations-Bjbu86Z0.js";import{t as q}from"./api-keys-Ck-Yteiv.js";import{t as J}from"./api-keys-3-0vJC3Y.js";var Y=e(t(),1),ae=e(H(),1),X=[{label:`Global`,options:[{value:`site.changed`,label:`Site changed (rebuild)`}]},{label:`Posts`,options:[{value:`post.added`,label:`Post created`},{value:`post.deleted`,label:`Post deleted`},{value:`post.edited`,label:`Post updated`},{value:`post.published`,label:`Post published`},{value:`post.published.edited`,label:`Published post updated`},{value:`post.unpublished`,label:`Post unpublished`},{value:`post.scheduled`,label:`Post scheduled`},{value:`post.unscheduled`,label:`Post unscheduled`},{value:`post.tag.attached`,label:`Tag added to post`},{value:`post.tag.detached`,label:`Tag removed from post`}]},{label:`Pages`,options:[{value:`page.added`,label:`Page created`},{value:`page.deleted`,label:`Page deleted`},{value:`page.edited`,label:`Page updated`},{value:`page.published`,label:`Page published`},{value:`page.published.edited`,label:`Published page updated`},{value:`page.unpublished`,label:`Page unpublished`},{value:`page.tag.attached`,label:`Tag added to page`},{value:`page.tag.detached`,label:`Tag removed from page`}]},{label:`Tags`,options:[{value:`tag.added`,label:`Tag created`},{value:`tag.edited`,label:`Tag updated`},{value:`tag.deleted`,label:`Tag deleted`}]},{label:`Members`,options:[{value:`member.added`,label:`Member added`},{value:`member.edited`,label:`Member updated`},{value:`member.deleted`,label:`Member deleted`}]}],oe=e=>X.flatMap(({options:e})=>e).find(t=>t.value===e)?.label,se=i({method:`POST`,path:()=>`/webhooks/`,body:e=>({webhooks:[e]}),updateQueries:{dataType:K,emberUpdateType:`createOrUpdate`,update:(e,t)=>t&&{...t,integrations:t.integrations.map(t=>{let n=e.webhooks[0];return n.integration_id===t.id?{...t,webhooks:[...t.webhooks||[],n]}:t})}}}),ce=i({method:`PUT`,path:e=>`/webhooks/${e.id}/`,body:e=>({webhooks:[e]}),updateQueries:{dataType:K,emberUpdateType:`createOrUpdate`,update:(e,t)=>t&&{...t,integrations:t.integrations.map(t=>({...t,webhooks:t.webhooks?.map(t=>t.id===e.webhooks[0].id?e.webhooks[0]:t)}))}}}),le=i({method:`DELETE`,path:e=>`/webhooks/${e}/`,updateQueries:{dataType:K,emberUpdateType:`createOrUpdate`,update:(e,t,n)=>({...t,integrations:t.integrations.map(e=>({...e,webhooks:e.webhooks?.filter(e=>e.id!==n)}))})}}),Z=n(),Q=({webhook:e,integrationId:t,onClose:n})=>{let r=Y.useId(),{mutateAsync:i}=se(),{mutateAsync:o}=ce(),c=a(),{formState:l,updateForm:u,handleSave:d,errors:f,clearError:p}=s({initialState:e||{},onSave:async()=>{l.id?await o(l):await i({...l,integration_id:t})},onSaveError:c,onValidate:()=>{let e={};return l.name||(e.name=`Enter a name`),l.event||(e.event=`Select an event`),l.target_url||(e.target_url=`Enter a target URL`),l.target_url&&!ae.default.isURL(l.target_url,{require_tld:!1})&&(e.target_url=`Enter a valid URL`),e}});return(0,Z.jsx)(w,{okLabel:e?`Update`:`Add`,okVariant:`default`,size:`sm`,testId:`webhook-modal`,title:`Add webhook`,formSheet:!0,onClose:n,onOk:async()=>{await d()&&n()},children:(0,Z.jsx)(`div`,{className:`mt-5`,children:(0,Z.jsxs)(E,{className:`gap-8`,children:[(0,Z.jsxs)(k,{"data-invalid":!!f.name||void 0,children:[(0,Z.jsx)(O,{htmlFor:`webhook-name`,children:`Name`}),(0,Z.jsx)(F,{"aria-invalid":!!f.name||void 0,id:`webhook-name`,maxLength:191,placeholder:`Custom webhook`,value:l.name??``,onChange:e=>u(t=>({...t,name:e.target.value})),onKeyDown:()=>p(`name`)}),f.name&&(0,Z.jsx)(D,{children:f.name})]}),(0,Z.jsxs)(k,{"data-invalid":!!f.event||void 0,children:[(0,Z.jsx)(O,{className:`sr-only`,children:`Event`}),(0,Z.jsxs)(C,{value:l.event??``,onValueChange:e=>{u(t=>({...t,event:e})),p(`event`)},children:[(0,Z.jsx)(b,{"aria-describedby":f.event?r:void 0,"aria-invalid":!!f.event||void 0,"aria-label":`Event`,"data-testid":`event-select`,children:(0,Z.jsx)(S,{placeholder:`Select an event`})}),(0,Z.jsx)(y,{children:X.map(e=>(0,Z.jsxs)(x,{children:[(0,Z.jsx)(_,{children:e.label}),e.options.map(e=>(0,Z.jsx)(v,{value:e.value,children:e.label},e.value))]},e.label))})]}),f.event&&(0,Z.jsx)(D,{id:r,children:f.event})]}),(0,Z.jsxs)(k,{"data-invalid":!!f.target_url||void 0,children:[(0,Z.jsx)(O,{htmlFor:`webhook-target-url`,children:`Target URL`}),(0,Z.jsx)(F,{"aria-invalid":!!f.target_url||void 0,id:`webhook-target-url`,maxLength:2e3,placeholder:`https://example.com`,type:`url`,value:l.target_url??``,onChange:e=>u(t=>({...t,target_url:e.target.value})),onKeyDown:()=>p(`target_url`)}),f.target_url&&(0,Z.jsx)(D,{children:f.target_url})]}),(0,Z.jsxs)(k,{children:[(0,Z.jsx)(O,{htmlFor:`webhook-secret`,children:`Secret`}),(0,Z.jsx)(F,{id:`webhook-secret`,maxLength:191,placeholder:`https://example.com`,value:l.secret||``,onChange:e=>u(t=>({...t,secret:e.target.value}))})]})]})})})},$=({integration:e})=>{let{mutateAsync:t}=le(),n=a(),{confirm:r}=U(),i=e.webhooks||[],[s,c]=(0,Y.useState)(null),[u,p]=(0,Y.useState)(!1),_=()=>{p(!0)},v=()=>{p(!1),c(null)},y=u?(0,Z.jsx)(Q,{integrationId:e.id,onClose:v}):s&&(0,Z.jsx)(Q,{integrationId:e.id,webhook:s,onClose:v},s.id),b=e=>{r({title:`Are you sure?`,prompt:`Deleting this webhook may prevent the integration from functioning.`,okVariant:`destructive`,okLabel:`Delete Webhook`,onOk:async r=>{try{await t(e),r?.remove(),o.info(`Webhook deleted`)}catch(e){n(e)}}})};return i.length===0?(0,Z.jsxs)(f,{gap:`none`,children:[(0,Z.jsx)(I,{}),(0,Z.jsx)(T,{actions:(0,Z.jsxs)(g,{type:`button`,variant:`outline`,onClick:_,children:[(0,Z.jsx)(m,{}),` Add webhook`]}),className:`py-8`,description:`Add a webhook to send Ghost events to another service.`,title:`No webhooks`,children:(0,Z.jsx)(h,{})}),(0,Z.jsx)(I,{}),y]}):(0,Z.jsxs)(f,{gap:`none`,children:[(0,Z.jsxs)(P,{children:[(0,Z.jsx)(N,{children:(0,Z.jsxs)(j,{children:[(0,Z.jsxs)(A,{children:[l(e.webhooks?.length||0),` `,e.webhooks?.length===1?`webhook`:`webhooks`]}),(0,Z.jsx)(A,{children:`Last triggered`}),(0,Z.jsx)(A,{children:(0,Z.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,Z.jsx)(te,{children:i.map(e=>(0,Z.jsxs)(j,{className:`cursor-pointer`,onClick:()=>c(e),children:[(0,Z.jsxs)(M,{className:`w-3/4 py-3 pr-6`,children:[(0,Z.jsx)(`div`,{className:`font-semibold`,children:e.name}),(0,Z.jsxs)(`div`,{className:`mt-1 grid grid-cols-[max-content_1fr] gap-1 text-sm leading-snug`,children:[(0,Z.jsx)(`span`,{className:`text-muted-foreground`,children:`Event:`}),(0,Z.jsx)(`span`,{children:oe(e.event)}),(0,Z.jsx)(`span`,{className:`text-muted-foreground`,children:`URL:`}),(0,Z.jsx)(`span`,{className:`line-clamp-3 break-all`,title:e.target_url,children:e.target_url})]})]}),(0,Z.jsx)(M,{className:`w-1/4 py-3 pr-6 text-sm`,children:e.last_triggered_at&&new Date(e.last_triggered_at).toLocaleString(`default`,{weekday:`short`,month:`short`,day:`numeric`,year:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}),(0,Z.jsx)(M,{className:`w-0 text-right`,children:(0,Z.jsx)(g,{className:`text-destructive hover:text-destructive`,size:`sm`,type:`button`,variant:`ghost`,onClick:t=>{t.stopPropagation(),b(e.id)},children:`Delete`})})]},e.id))})]}),(0,Z.jsx)(d,{className:`py-4`,justify:`center`,children:(0,Z.jsxs)(g,{size:`sm`,type:`button`,variant:`outline`,onClick:_,children:[(0,Z.jsx)(m,{}),` Add webhook`]})}),(0,Z.jsx)(I,{}),y]})},ue=({integration:e})=>{let{updateRoute:t}=ee(),{mutateAsync:n}=W(),{mutateAsync:i}=J(),{mutateAsync:o}=L(),c=a(),{confirm:l}=U(),{formState:d,updateForm:m,handleSave:h,saveState:g,errors:_,clearError:v,okProps:y}=s({initialState:e,savingDelay:500,savedDelay:500,onSave:async()=>{await n(d)},onSavedStateReset:()=>{t(`integrations`)},onSaveError:c,onValidate:()=>{let e={};return d.name||(e.name=`Enter integration title`),e}}),b=async e=>{try{let t=V(await o({file:e}));m(e=>({...e,icon_image:t}))}catch(e){let t=e;t.response.status===415&&(t.message=`Unsupported file type`),c(t)}},x=e.api_keys?.find(e=>e.type===`admin`),S=e.api_keys?.find(e=>e.type===`content`),[C,T]=(0,Y.useState)(!1),[E,A]=(0,Y.useState)(!1);(0,Y.useEffect)(()=>{e.type!==`custom`&&t(`integrations`)},[e.type,t]);let j=(t,n)=>{n(!1);let r=t.type===`content`?`Content`:`Admin`;l({title:`Regenerate ${r} API Key`,prompt:`You can regenerate ${r} API Key any time, but any scripts or applications using it will need to be updated.`,okLabel:`Regenerate ${r} API Key`,onOk:async r=>{try{await i({integrationId:e.id,apiKeyId:t.id}),n(!0),r?.remove()}catch(e){c(e)}}})};return(0,Z.jsxs)(w,{buttonsDisabled:y.disabled,cancelLabel:`Close`,dirty:g===`unsaved`,okLabel:y.label||`Save`,okVariant:y.variant,size:`md`,testId:`custom-integration-modal`,title:d.name||`Custom integration`,stickyFooter:!0,onClose:()=>{t(`integrations`)},onOk:async()=>{await h({fakeWhenUnchanged:!0})},children:[(0,Z.jsxs)(f,{className:`w-full pt-6 md:flex-row`,gap:`xl`,children:[(0,Z.jsx)(`div`,{className:`shrink-0`,children:(0,Z.jsx)(z,{className:`size-25`,children:d.icon_image?(0,Z.jsxs)(re,{children:[(0,Z.jsx)(B,{id:`custom-integration-icon`,src:d.icon_image}),(0,Z.jsx)(ne,{children:(0,Z.jsx)(ie,{"aria-label":`Remove icon`,onClick:()=>m(e=>({...e,icon_image:null})),children:(0,Z.jsx)(p,{})})})]}):(0,Z.jsx)(R,{className:`text-center`,inputId:`custom-integration-icon`,onDropAccepted:([e])=>void b(e),children:`Upload icon`})})}),(0,Z.jsxs)(f,{className:`min-w-0 grow`,gap:`2xl`,children:[(0,Z.jsxs)(f,{gap:`md`,children:[(0,Z.jsxs)(k,{"data-invalid":!!_.name||void 0,children:[(0,Z.jsx)(O,{htmlFor:`integration-title`,children:`Title`}),(0,Z.jsx)(F,{"aria-invalid":!!_.name||void 0,id:`integration-title`,maxLength:191,value:d.name,onChange:e=>m(t=>({...t,name:e.target.value})),onKeyDown:()=>v(`name`)}),_.name&&(0,Z.jsx)(D,{children:_.name})]}),(0,Z.jsxs)(k,{children:[(0,Z.jsx)(O,{htmlFor:`integration-description`,children:`Description`}),(0,Z.jsx)(F,{id:`integration-description`,maxLength:2e3,value:d.description||``,onChange:e=>m(t=>({...t,description:e.target.value}))})]})]}),(0,Z.jsx)(q,{keys:[{id:`content-api-key`,label:`Content API key`,text:S?.secret,hint:E?(0,Z.jsx)(`div`,{className:`text-green`,children:`Content API Key was successfully regenerated`}):void 0,onRegenerate:()=>S&&j(S,A)},{id:`admin-api-key`,label:`Admin API key`,text:x?.secret,hint:C?(0,Z.jsx)(`div`,{className:`text-green`,children:`Admin API Key was successfully regenerated`}):void 0,onRegenerate:()=>x&&j(x,T)},{id:`api-url`,label:`API URL`,text:window.location.origin+r().subdir}]})]})]}),(0,Z.jsx)(u,{className:`mt-8`,children:(0,Z.jsx)($,{integration:e})})]})};function de(){let{integrationId:e}=c(),{data:{integrations:t}={}}=G(),n=t?.find(({id:t})=>t===e);return n?(0,Z.jsx)(ue,{integration:n}):null}export{de as default};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{f as r,n as i,p as a}from"./hooks-Cy_-oZ4o.js";import{n as o}from"./dist-Ndy-PuGN.js";import{t as s}from"./use-form-vRjI0Kwk.js";import{h as c}from"./chunk-KS7C4IRE-DCsL4i4D.js";import{m as l}from"./dist-B3keLvjj.js";import{t as u}from"./box-CdfQAP_F.js";import{t as d}from"./inline-BWSs_VzR.js";import{t as f}from"./stack-B2eszIiq.js";import{D as p,ft as m,o as h,t as g}from"./button-Dvcv1QSR.js";import{a as _,i as v,n as y,o as b,r as x,s as S,t as C}from"./select-v5YbA3Mw.js";import{o as w,t as ee}from"./use-settings-navigation-B-qrriKD.js";import{t as T}from"./empty-indicator-D9QdpuNX.js";import{a as E,i as D,o as O,t as k}from"./field-C93_Mg6j.js";import{a as A,c as j,n as te,r as M,s as N,t as P}from"./table-BenqVupI.js";import{qn as F,rr as I}from"./index-CgMCwsxN.js";import{a as ne,c as re,i as ie,n as L,o as R,r as z,s as B,t as V}from"./images-KXmyO3Ss.js";import{t as H}from"./validator-Cr0sMKuW.js";import{n as U}from"./confirmation-context-DwXX_Y5h.js";import{a as W,n as G,t as K}from"./integrations-B4kuRBFY.js";import{t as q}from"./api-keys-BoeacM-s.js";import{t as J}from"./api-keys-BGPzLHzA.js";var Y=e(t(),1),ae=e(H(),1),X=[{label:`Global`,options:[{value:`site.changed`,label:`Site changed (rebuild)`}]},{label:`Posts`,options:[{value:`post.added`,label:`Post created`},{value:`post.deleted`,label:`Post deleted`},{value:`post.edited`,label:`Post updated`},{value:`post.published`,label:`Post published`},{value:`post.published.edited`,label:`Published post updated`},{value:`post.unpublished`,label:`Post unpublished`},{value:`post.scheduled`,label:`Post scheduled`},{value:`post.unscheduled`,label:`Post unscheduled`},{value:`post.tag.attached`,label:`Tag added to post`},{value:`post.tag.detached`,label:`Tag removed from post`}]},{label:`Pages`,options:[{value:`page.added`,label:`Page created`},{value:`page.deleted`,label:`Page deleted`},{value:`page.edited`,label:`Page updated`},{value:`page.published`,label:`Page published`},{value:`page.published.edited`,label:`Published page updated`},{value:`page.unpublished`,label:`Page unpublished`},{value:`page.tag.attached`,label:`Tag added to page`},{value:`page.tag.detached`,label:`Tag removed from page`}]},{label:`Tags`,options:[{value:`tag.added`,label:`Tag created`},{value:`tag.edited`,label:`Tag updated`},{value:`tag.deleted`,label:`Tag deleted`}]},{label:`Members`,options:[{value:`member.added`,label:`Member added`},{value:`member.edited`,label:`Member updated`},{value:`member.deleted`,label:`Member deleted`}]}],oe=e=>X.flatMap(({options:e})=>e).find(t=>t.value===e)?.label,se=i({method:`POST`,path:()=>`/webhooks/`,body:e=>({webhooks:[e]}),updateQueries:{dataType:K,emberUpdateType:`createOrUpdate`,update:(e,t)=>t&&{...t,integrations:t.integrations.map(t=>{let n=e.webhooks[0];return n.integration_id===t.id?{...t,webhooks:[...t.webhooks||[],n]}:t})}}}),ce=i({method:`PUT`,path:e=>`/webhooks/${e.id}/`,body:e=>({webhooks:[e]}),updateQueries:{dataType:K,emberUpdateType:`createOrUpdate`,update:(e,t)=>t&&{...t,integrations:t.integrations.map(t=>({...t,webhooks:t.webhooks?.map(t=>t.id===e.webhooks[0].id?e.webhooks[0]:t)}))}}}),le=i({method:`DELETE`,path:e=>`/webhooks/${e}/`,updateQueries:{dataType:K,emberUpdateType:`createOrUpdate`,update:(e,t,n)=>({...t,integrations:t.integrations.map(e=>({...e,webhooks:e.webhooks?.filter(e=>e.id!==n)}))})}}),Z=n(),Q=({webhook:e,integrationId:t,onClose:n})=>{let r=Y.useId(),{mutateAsync:i}=se(),{mutateAsync:o}=ce(),c=a(),{formState:l,updateForm:u,handleSave:d,errors:f,clearError:p}=s({initialState:e||{},onSave:async()=>{l.id?await o(l):await i({...l,integration_id:t})},onSaveError:c,onValidate:()=>{let e={};return l.name||(e.name=`Enter a name`),l.event||(e.event=`Select an event`),l.target_url||(e.target_url=`Enter a target URL`),l.target_url&&!ae.default.isURL(l.target_url,{require_tld:!1})&&(e.target_url=`Enter a valid URL`),e}});return(0,Z.jsx)(w,{okLabel:e?`Update`:`Add`,okVariant:`default`,size:`sm`,testId:`webhook-modal`,title:`Add webhook`,formSheet:!0,onClose:n,onOk:async()=>{await d()&&n()},children:(0,Z.jsx)(`div`,{className:`mt-5`,children:(0,Z.jsxs)(E,{className:`gap-8`,children:[(0,Z.jsxs)(k,{"data-invalid":!!f.name||void 0,children:[(0,Z.jsx)(O,{htmlFor:`webhook-name`,children:`Name`}),(0,Z.jsx)(I,{"aria-invalid":!!f.name||void 0,id:`webhook-name`,maxLength:191,placeholder:`Custom webhook`,value:l.name??``,onChange:e=>u(t=>({...t,name:e.target.value})),onKeyDown:()=>p(`name`)}),f.name&&(0,Z.jsx)(D,{children:f.name})]}),(0,Z.jsxs)(k,{"data-invalid":!!f.event||void 0,children:[(0,Z.jsx)(O,{className:`sr-only`,children:`Event`}),(0,Z.jsxs)(C,{value:l.event??``,onValueChange:e=>{u(t=>({...t,event:e})),p(`event`)},children:[(0,Z.jsx)(b,{"aria-describedby":f.event?r:void 0,"aria-invalid":!!f.event||void 0,"aria-label":`Event`,"data-testid":`event-select`,children:(0,Z.jsx)(S,{placeholder:`Select an event`})}),(0,Z.jsx)(y,{children:X.map(e=>(0,Z.jsxs)(x,{children:[(0,Z.jsx)(_,{children:e.label}),e.options.map(e=>(0,Z.jsx)(v,{value:e.value,children:e.label},e.value))]},e.label))})]}),f.event&&(0,Z.jsx)(D,{id:r,children:f.event})]}),(0,Z.jsxs)(k,{"data-invalid":!!f.target_url||void 0,children:[(0,Z.jsx)(O,{htmlFor:`webhook-target-url`,children:`Target URL`}),(0,Z.jsx)(I,{"aria-invalid":!!f.target_url||void 0,id:`webhook-target-url`,maxLength:2e3,placeholder:`https://example.com`,type:`url`,value:l.target_url??``,onChange:e=>u(t=>({...t,target_url:e.target.value})),onKeyDown:()=>p(`target_url`)}),f.target_url&&(0,Z.jsx)(D,{children:f.target_url})]}),(0,Z.jsxs)(k,{children:[(0,Z.jsx)(O,{htmlFor:`webhook-secret`,children:`Secret`}),(0,Z.jsx)(I,{id:`webhook-secret`,maxLength:191,placeholder:`https://example.com`,value:l.secret||``,onChange:e=>u(t=>({...t,secret:e.target.value}))})]})]})})})},$=({integration:e})=>{let{mutateAsync:t}=le(),n=a(),{confirm:r}=U(),i=e.webhooks||[],[s,c]=(0,Y.useState)(null),[u,p]=(0,Y.useState)(!1),_=()=>{p(!0)},v=()=>{p(!1),c(null)},y=u?(0,Z.jsx)(Q,{integrationId:e.id,onClose:v}):s&&(0,Z.jsx)(Q,{integrationId:e.id,webhook:s,onClose:v},s.id),b=e=>{r({title:`Are you sure?`,prompt:`Deleting this webhook may prevent the integration from functioning.`,okVariant:`destructive`,okLabel:`Delete Webhook`,onOk:async r=>{try{await t(e),r?.remove(),o.info(`Webhook deleted`)}catch(e){n(e)}}})};return i.length===0?(0,Z.jsxs)(f,{gap:`none`,children:[(0,Z.jsx)(F,{}),(0,Z.jsx)(T,{actions:(0,Z.jsxs)(g,{type:`button`,variant:`outline`,onClick:_,children:[(0,Z.jsx)(m,{}),` Add webhook`]}),className:`py-8`,description:`Add a webhook to send Ghost events to another service.`,title:`No webhooks`,children:(0,Z.jsx)(h,{})}),(0,Z.jsx)(F,{}),y]}):(0,Z.jsxs)(f,{gap:`none`,children:[(0,Z.jsxs)(P,{children:[(0,Z.jsx)(N,{children:(0,Z.jsxs)(j,{children:[(0,Z.jsxs)(A,{children:[l(e.webhooks?.length||0),` `,e.webhooks?.length===1?`webhook`:`webhooks`]}),(0,Z.jsx)(A,{children:`Last triggered`}),(0,Z.jsx)(A,{children:(0,Z.jsx)(`span`,{className:`sr-only`,children:`Actions`})})]})}),(0,Z.jsx)(te,{children:i.map(e=>(0,Z.jsxs)(j,{className:`cursor-pointer`,onClick:()=>c(e),children:[(0,Z.jsxs)(M,{className:`w-3/4 py-3 pr-6`,children:[(0,Z.jsx)(`div`,{className:`font-semibold`,children:e.name}),(0,Z.jsxs)(`div`,{className:`mt-1 grid grid-cols-[max-content_1fr] gap-1 text-sm leading-snug`,children:[(0,Z.jsx)(`span`,{className:`text-muted-foreground`,children:`Event:`}),(0,Z.jsx)(`span`,{children:oe(e.event)}),(0,Z.jsx)(`span`,{className:`text-muted-foreground`,children:`URL:`}),(0,Z.jsx)(`span`,{className:`line-clamp-3 break-all`,title:e.target_url,children:e.target_url})]})]}),(0,Z.jsx)(M,{className:`w-1/4 py-3 pr-6 text-sm`,children:e.last_triggered_at&&new Date(e.last_triggered_at).toLocaleString(`default`,{weekday:`short`,month:`short`,day:`numeric`,year:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}),(0,Z.jsx)(M,{className:`w-0 text-right`,children:(0,Z.jsx)(g,{className:`text-destructive hover:text-destructive`,size:`sm`,type:`button`,variant:`ghost`,onClick:t=>{t.stopPropagation(),b(e.id)},children:`Delete`})})]},e.id))})]}),(0,Z.jsx)(d,{className:`py-4`,justify:`center`,children:(0,Z.jsxs)(g,{size:`sm`,type:`button`,variant:`outline`,onClick:_,children:[(0,Z.jsx)(m,{}),` Add webhook`]})}),(0,Z.jsx)(F,{}),y]})},ue=({integration:e})=>{let{updateRoute:t}=ee(),{mutateAsync:n}=W(),{mutateAsync:i}=J(),{mutateAsync:o}=L(),c=a(),{confirm:l}=U(),{formState:d,updateForm:m,handleSave:h,saveState:g,errors:_,clearError:v,okProps:y}=s({initialState:e,savingDelay:500,savedDelay:500,onSave:async()=>{await n(d)},onSavedStateReset:()=>{t(`integrations`)},onSaveError:c,onValidate:()=>{let e={};return d.name||(e.name=`Enter integration title`),e}}),b=async e=>{try{let t=V(await o({file:e}));m(e=>({...e,icon_image:t}))}catch(e){let t=e;t.response.status===415&&(t.message=`Unsupported file type`),c(t)}},x=e.api_keys?.find(e=>e.type===`admin`),S=e.api_keys?.find(e=>e.type===`content`),[C,T]=(0,Y.useState)(!1),[E,A]=(0,Y.useState)(!1);(0,Y.useEffect)(()=>{e.type!==`custom`&&t(`integrations`)},[e.type,t]);let j=(t,n)=>{n(!1);let r=t.type===`content`?`Content`:`Admin`;l({title:`Regenerate ${r} API Key`,prompt:`You can regenerate ${r} API Key any time, but any scripts or applications using it will need to be updated.`,okLabel:`Regenerate ${r} API Key`,onOk:async r=>{try{await i({integrationId:e.id,apiKeyId:t.id}),n(!0),r?.remove()}catch(e){c(e)}}})};return(0,Z.jsxs)(w,{buttonsDisabled:y.disabled,cancelLabel:`Close`,dirty:g===`unsaved`,okLabel:y.label||`Save`,okVariant:y.variant,size:`md`,testId:`custom-integration-modal`,title:d.name||`Custom integration`,stickyFooter:!0,onClose:()=>{t(`integrations`)},onOk:async()=>{await h({fakeWhenUnchanged:!0})},children:[(0,Z.jsxs)(f,{className:`w-full pt-6 md:flex-row`,gap:`xl`,children:[(0,Z.jsx)(`div`,{className:`shrink-0`,children:(0,Z.jsx)(z,{className:`size-25`,children:d.icon_image?(0,Z.jsxs)(re,{children:[(0,Z.jsx)(B,{id:`custom-integration-icon`,src:d.icon_image}),(0,Z.jsx)(ne,{children:(0,Z.jsx)(ie,{"aria-label":`Remove icon`,onClick:()=>m(e=>({...e,icon_image:null})),children:(0,Z.jsx)(p,{})})})]}):(0,Z.jsx)(R,{className:`text-center`,inputId:`custom-integration-icon`,onDropAccepted:([e])=>void b(e),children:`Upload icon`})})}),(0,Z.jsxs)(f,{className:`min-w-0 grow`,gap:`2xl`,children:[(0,Z.jsxs)(f,{gap:`md`,children:[(0,Z.jsxs)(k,{"data-invalid":!!_.name||void 0,children:[(0,Z.jsx)(O,{htmlFor:`integration-title`,children:`Title`}),(0,Z.jsx)(I,{"aria-invalid":!!_.name||void 0,id:`integration-title`,maxLength:191,value:d.name,onChange:e=>m(t=>({...t,name:e.target.value})),onKeyDown:()=>v(`name`)}),_.name&&(0,Z.jsx)(D,{children:_.name})]}),(0,Z.jsxs)(k,{children:[(0,Z.jsx)(O,{htmlFor:`integration-description`,children:`Description`}),(0,Z.jsx)(I,{id:`integration-description`,maxLength:2e3,value:d.description||``,onChange:e=>m(t=>({...t,description:e.target.value}))})]})]}),(0,Z.jsx)(q,{keys:[{id:`content-api-key`,label:`Content API key`,text:S?.secret,hint:E?(0,Z.jsx)(`div`,{className:`text-green`,children:`Content API Key was successfully regenerated`}):void 0,onRegenerate:()=>S&&j(S,A)},{id:`admin-api-key`,label:`Admin API key`,text:x?.secret,hint:C?(0,Z.jsx)(`div`,{className:`text-green`,children:`Admin API Key was successfully regenerated`}):void 0,onRegenerate:()=>x&&j(x,T)},{id:`api-url`,label:`API URL`,text:window.location.origin+r().subdir}]})]})]}),(0,Z.jsx)(u,{className:`mt-8`,children:(0,Z.jsx)($,{integration:e})})]})};function de(){let{integrationId:e}=c(),{data:{integrations:t}={}}=G(),n=t?.find(({id:t})=>t===e);return n?(0,Z.jsx)(ue,{integration:n}):null}export{de as default};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{sr as r}from"./button-eNMKQWXr.js";import{a as i,i as a,n as o,o as s,r as c,s as l,t as u}from"./select-cb0t_TAJ.js";import{G as d,K as f}from"./index-6MkPdCtr.js";var p=e(t(),1),m=n(),h=({range:e,onRangeChange:t,excludeRanges:n=[]})=>{let h=n.map(e=>d[e].value),g=f.filter(e=>!h.includes(e.value));return(0,p.useEffect)(()=>{if(h.includes(e)&&g.length>0){let e=g.find(e=>e.value===d.last7Days.value);t(e?e.value:g[0].value)}},[e,h,g,t]),(0,m.jsxs)(u,{value:`${e}`,onValueChange:e=>{t(Number(e))},children:[(0,m.jsxs)(s,{className:`w-auto`,children:[(0,m.jsx)(r,{className:`mr-2`,size:16,strokeWidth:1.5}),(0,m.jsx)(l,{placeholder:`Select a period`})]}),(0,m.jsx)(o,{align:`end`,children:(0,m.jsxs)(c,{children:[(0,m.jsx)(i,{children:`Period`}),g.map(e=>(0,m.jsx)(a,{value:`${e.value}`,children:e.name},e.value))]})})]})};export{h as t};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{lr as r}from"./button-Dvcv1QSR.js";import{a as i,i as a,n as o,o as s,r as c,s as l,t as u}from"./select-v5YbA3Mw.js";import{J as d,q as f}from"./index-CgMCwsxN.js";var p=e(t(),1),m=n(),h=({range:e,onRangeChange:t,excludeRanges:n=[]})=>{let h=n.map(e=>f[e].value),g=d.filter(e=>!h.includes(e.value));return(0,p.useEffect)(()=>{if(h.includes(e)&&g.length>0){let e=g.find(e=>e.value===f.last7Days.value);t(e?e.value:g[0].value)}},[e,h,g,t]),(0,m.jsxs)(u,{value:`${e}`,onValueChange:e=>{t(Number(e))},children:[(0,m.jsxs)(s,{className:`w-auto`,children:[(0,m.jsx)(r,{className:`mr-2`,size:16,strokeWidth:1.5}),(0,m.jsx)(l,{placeholder:`Select a period`})]}),(0,m.jsx)(o,{align:`end`,children:(0,m.jsxs)(c,{children:[(0,m.jsx)(i,{children:`Period`}),g.map(e=>(0,m.jsx)(a,{value:`${e.value}`,children:e.name},e.value))]})})]})};export{h as t};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./dist-CZgIBXQN.js","./rolldown-runtime-DAXXjFlN.js","./dist-Z97pCNqS.js","./dist-BtaTA7Ii.js","./dist-4m6pHdc0.js","./dist-B6bJuxL3.js","./dist-CiHx7vA5.js","./dist-ECAUrdGc.js","./dist-zwwGt8Yf.js"])))=>i.map(i=>d[i]);
2
+ 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{r as i}from"./framework-provider-DqI25epG.js";import{_ as a,c as o,d as s,l as c,m as l,p as u,w as d}from"./hooks-Cy_-oZ4o.js";import{n as f}from"./dist-Ndy-PuGN.js";import{t as p}from"./use-form-vRjI0Kwk.js";import{r as m}from"./posts-pCPrhQeR.js";import{t as h}from"./preload-helper-DYl5dUZ5.js";import{a as g}from"./router-provider-BSvTXgZY.js";import{l as _,m as v,w as y}from"./dist-B3keLvjj.js";import{t as b}from"./inline-BWSs_VzR.js";import{t as x}from"./text-BQDSDsKs.js";import{$n as S,C,Cn as w,D as T,Nn as E,Sn as D,Y as O,a as k,an as ee,b as te,bt as A,dn as ne,ft as j,j as re,kn as ie,rt as M,t as N,tr as ae}from"./button-Dvcv1QSR.js";import{n as oe,r as se,t as ce}from"./esm-CXo5SEPy.js";import{i as P,n as le,r as F,t as I}from"./tabs-eBBlxPp8.js";import{t as L}from"./switch-CI4gLWqb.js";import{t as ue}from"./dropzone-Dtz5Rmjt.js";import{i as R,n as z,o as B,s as V,t as H}from"./select-v5YbA3Mw.js";import{o as de,t as U}from"./use-settings-navigation-B-qrriKD.js";import{i as fe,n as pe,r as W,t as me}from"./accordion-CxGsDKwa.js";import{i as he,n as ge,r as _e,t as ve}from"./action-list-C4v0-du8.js";import{a as ye,c as be,n as xe,o as G,r as K,s as Se,t as q}from"./field-C93_Mg6j.js";import{t as Ce}from"./preview-chrome-BljUBlOk.js";import{n as we,t as Te}from"./toggle-group-CviIkyok.js";import{d as J,g as Ee,i as De,m as Y,r as Oe,t as ke,u as Ae}from"./schemas-BoYdB6YU.js";import{$ as je,Dr as Me,Fr as Ne,Q as Pe,Tr as Fe,Xn as Ie,Z as Le,at as Re,ct as ze,et as Be,hi as Ve,it as He,kr as Ue,lt as We,mi as Ge,mt as Ke,nr as qe,ot as Je,pt as Ye,rr as Xe,rt as Ze,st as Qe,tt as $e,ut as et,yi as tt}from"./index-CgMCwsxN.js";import{t as X}from"./page-header-DM_KyoFI.js";import{a as nt,c as rt,i as it,n as at,o as ot,r as st,s as ct,t as lt}from"./images-KXmyO3Ss.js";import{t as ut}from"./modal-page-xCivTMvI.js";import{t as dt}from"./index.es-CY6-yuw9.js";import{t as ft}from"./nql-BLpCn7qX.js";import{i as pt,n as mt}from"./confirmation-context-DwXX_Y5h.js";import{n as ht}from"./global-data-context-gAMDH9u1.js";import{t as gt}from"./use-upgrade-route-Dm_qqKr0.js";import{i as _t}from"./zapier-modal-DfVhV17j.js";import{$ as vt}from"./dist-Z97pCNqS.js";import{t as yt}from"./color-picker-field-DQFVTNnT.js";import{t as bt}from"./preview-modal-YYbzlYdO.js";import{t as xt}from"./use-pintura-editor-CaV1mbfO.js";import{t as St}from"./iframe-buffering-B2OKJzbz.js";import{t as Ct}from"./settings-breadcrumbs-NwPnCTC7.js";import{t as wt}from"./use-query-params-BfzuqbcD.js";import{n as Tt,t as Et}from"./use-check-theme-limit-error-DRUjK4YM.js";var Z=e(t(),1),Dt=J({code:Y(),details:Y(),failures:Oe(J({ref:Y(),message:Y().optional(),rule:Y().optional()})),fatal:De(),level:ke([`error`,`warning`,`recommendation`]),rule:Y()}),Ot=Oe(J({details:Ee([J({errors:Oe(Dt).optional(),warnings:Oe(Dt).optional()}),Y().trim().min(1)])}));function kt(e){return typeof e==`object`&&!!e}function At(e){return[...e.errors||[],...e.warnings||[]]}function jt(e=[]){let t=[],n=[],r=[];return e.forEach(e=>{kt(e.details)?At(e.details).forEach(e=>{e.fatal?t.push(e):n.push(e)}):r.push(e.details)}),{blockingProblems:t,secondaryProblems:n,stringErrors:r}}function Mt(e){let t=Ot.safeParse(e);if(!t.success)return null;let{blockingProblems:n,stringErrors:r}=jt(t.data);return n.length>0||r.length>0?t.data:null}function Nt(e){return[...e.errors||[],...e.warnings||[]]}var Pt=[`Error`,`Warning`,`Recommendation`],Ft={error:{severity:`Error`,variant:`destructive`},warning:{severity:`Warning`,variant:`warning`},recommendation:{severity:`Recommendation`,variant:`secondary`}};function It(e){return Ft[e.level]??Ft.error}function Lt(e){return It(e).severity}function Rt(e){return It(e).variant}function zt(e){return[...e].sort((e,t)=>Pt.indexOf(Lt(e))-Pt.indexOf(Lt(t)))}function Bt(e){return e.some(e=>Lt(e)===`Error`)}function Vt(e,t){return t.length?`${e}, but it has some ${Bt(t)?`issues`:`warnings`}`:`${e} successfully`}var Q=r(),Ht=`[&_code]:rounded-md [&_code]:border-0 [&_code]:bg-secondary [&_code]:px-1 [&_code]:py-0.5 [&_code]:align-baseline [&_code]:font-mono [&_code]:text-sm [&_code]:text-inherit [&_code]:leading-[inherit] [&_code]:whitespace-nowrap`,Ut=`text-base leading-[1.55] font-semibold text-foreground ${Ht}`,Wt=`text-base leading-[1.55] text-foreground [&_a]:underline ${Ht}`,Gt=`space-y-1 text-base text-muted-foreground ${Ht}`;function Kt(e){return Pt.map(t=>({severity:t,count:e.filter(e=>Lt(e)===t).length})).filter(({count:e})=>e>0)}function qt(e){return e.map(({severity:e,count:t})=>`${v(t)} ${e.toLowerCase()}${t===1?``:`s`}`).join(`, `)}function Jt(e,t){return`${e.code||`issue`}-${t}`}function Yt({children:e,variant:t}){return(0,Q.jsx)(Ie,{className:`py-1 font-mono text-sm leading-none uppercase`,variant:t,children:e})}function Xt({problem:e}){return(0,Q.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[(0,Q.jsx)(`div`,{dangerouslySetInnerHTML:{__html:e.details},className:Wt}),e.failures?.length>0&&(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`h6`,{className:`mb-1 text-base font-semibold text-muted-foreground`,children:`Affected files`}),(0,Q.jsx)(`ul`,{className:Gt,children:e.failures.map(e=>(0,Q.jsxs)(`li`,{children:[(0,Q.jsx)(`code`,{children:e.ref}),e.message?(0,Q.jsxs)(`span`,{children:[`: `,e.message]}):null]},`${e.ref}-${e.message||``}`))})]})]})}function Zt({errorLabel:e,problem:t,value:n}){let r=Lt(t);return(0,Q.jsxs)(W,{className:`border-border-default last:border-b-0`,value:n,children:[(0,Q.jsx)(fe,{className:`items-start gap-3 p-5 hover:no-underline data-[state=open]:pb-1 [&>svg]:mt-1`,children:(0,Q.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Q.jsx)(Yt,{variant:Rt(t),children:r===`Error`?e:r}),t.code&&(0,Q.jsx)(`span`,{className:`font-mono text-sm font-normal text-muted-foreground`,children:t.code})]}),(0,Q.jsx)(`div`,{dangerouslySetInnerHTML:{__html:t.rule},className:Ut})]})}),(0,Q.jsx)(pe,{className:`px-5 pb-5`,children:(0,Q.jsx)(Xt,{problem:t})})]})}function Qt({errorLabel:e,message:t}){return(0,Q.jsxs)(`div`,{className:`flex flex-col gap-2 border-b border-border-default p-5 last:border-b-0`,children:[(0,Q.jsx)(`div`,{className:`flex items-center gap-3`,children:(0,Q.jsx)(Yt,{variant:`destructive`,children:e})}),(0,Q.jsx)(`p`,{className:`text-base font-semibold text-foreground`,children:t})]})}var $t=`theme-problem-list`;function en({errorLabel:e=`Error`,expandedByDefault:t=!1,messages:n=[],problems:r}){let i=(0,Z.useMemo)(()=>zt(r),[r]),a=(0,Z.useMemo)(()=>i.map(Jt),[i]);return!i.length&&!n.length?null:(0,Q.jsxs)(`div`,{className:`overflow-hidden rounded-lg border border-border-default`,"data-testid":$t,children:[n.map(t=>(0,Q.jsx)(Qt,{errorLabel:e,message:t},t)),i.length>0&&(0,Q.jsx)(me,{defaultValue:t?a:[],type:`multiple`,children:i.map((t,n)=>(0,Q.jsx)(Zt,{errorLabel:e,problem:t,value:a[n]},a[n]))})]})}function tn({problems:e}){if(!e.length)return null;let t=Kt(e),n=Bt(e);return(0,Q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Q.jsxs)(`h3`,{className:`flex items-center gap-2 text-base font-semibold text-foreground`,children:[(0,Q.jsx)(C,{className:_(`size-4 shrink-0`,n?`text-destructive`:`text-state-warning`)}),qt(t)]}),n&&(0,Q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Highly recommended to fix, functionality could be restricted`})]}),(0,Q.jsx)(en,{problems:e})]})}var nn=({title:e,themeName:t,action:n=`uploaded`,cancelLabel:r=`Cancel`,okLabel:i,fatalErrors:a,onRetry:o,onClose:s})=>{let{blockingProblems:c,secondaryProblems:l,stringErrors:u}=jt(a);return(0,Q.jsx)(pt,{cancelLabel:r,contentClassName:c.length+u.length+l.length>0?`max-w-[600px]`:void 0,okLabel:i??(o?`Try again`:``),okVariant:`default`,prompt:(0,Q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Q.jsxs)(`p`,{className:`text-base text-foreground`,children:[t?(0,Q.jsx)(`strong`,{children:t}):`This theme`,` couldn't be `,n,`. Fix the errors below and try again.`]}),(0,Q.jsx)(en,{errorLabel:`Blocking`,messages:u,problems:c,expandedByDefault:!0}),(0,Q.jsx)(tn,{problems:l})]}),stickyFooter:!0,title:e,onOk:o,onRemove:s})},rn=()=>{let e=He();return{supportsCustomFonts:!(e.data?.themes[0])?.warnings?.some(e=>e.code===`GS051-CUSTOM-FONTS`),refreshActiveThemeData:(0,Z.useCallback)(()=>{e.refetch()},[e])}};function an(e){let t=e.package?.name||e.name,n=t;return je(e)?n=`${t} (default)`:$e(e)?n=`${t} (legacy)`:e.package?.name!==e.name&&(n=(0,Q.jsxs)(`span`,{className:`md:text-base`,children:[n,` `,(0,Q.jsxs)(`span`,{className:`text-gray-600`,children:[`(`,e.name,`)`]})]})),Le(e)&&(n=(0,Q.jsxs)(`span`,{className:`font-bold md:text-base`,children:[n,` — `,(0,Q.jsx)(`span`,{className:`text-green`,children:` Active`})]})),n}function on(e){return e.package?.version||`1.0`}var sn=({theme:e})=>{let{mutateAsync:t}=Ze(),{mutateAsync:n}=Je(),{refreshActiveThemeData:r}=rn(),i=u(),{route:o,updateRoute:c}=U(),l=gt(),{checkThemeLimitError:d}=Et(),{confirm:p,showLimit:m}=mt(),[h,g]=(0,Z.useState)(null),_=async()=>{try{await t(e.name),r(),f.success(`Theme activated`,{description:(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`span`,{className:`capitalize`,children:e.name}),` is now your active theme`]})})}catch(e){let t=null;e instanceof a&&e.response?.status===422&&e.data?.errors?t=e.data.errors:i(e),t&&g(t)}},v=()=>{s(`/themes/${e.name}/download`)},y=()=>{p({title:`Are you sure you want to delete this?`,prompt:(0,Q.jsxs)(Q.Fragment,{children:[`You are about to delete `,(0,Q.jsxs)(`strong`,{children:[`"`,e.name,`".`]}),` This is permanent! We warned you, k? Maybe download`,` `,(0,Q.jsx)(`span`,{className:`cursor-pointer text-green-500`,onClick:v,children:`your theme before continuing`})]}),okLabel:`Delete`,okRunningLabel:`Deleting`,okVariant:`destructive`,onOk:async t=>{try{await n(e.name),t?.remove()}catch(e){i(e)}}})},b=async()=>{let t=await d(`.`);if(t){m({prompt:t,onOk:()=>c({route:l,isExternal:!0})});return}c(`theme/edit/${encodeURIComponent(e.name)}?from=${encodeURIComponent(o??``)}`)},x=[];return Le(e)||x.push((0,Q.jsx)(N,{className:`ml-2`,size:`sm`,type:`button`,variant:`ghost`,onClick:()=>void _(),children:`Activate`},`activate`)),(0,Q.jsxs)(`div`,{className:`-mr-3 flex items-center gap-4`,children:[x,(0,Q.jsxs)(Fe,{children:[(0,Q.jsx)(Ne,{asChild:!0,children:(0,Q.jsx)(N,{"aria-label":`Menu`,size:`icon`,type:`button`,variant:`ghost`,children:(0,Q.jsx)(E,{})})}),(0,Q.jsxs)(Me,{align:`end`,className:`z-[9999]`,children:[(0,Q.jsx)(Ue,{onSelect:()=>void b(),children:`Edit code`}),(0,Q.jsx)(Ue,{onSelect:v,children:`Download`}),Be(e)&&(0,Q.jsx)(Ue,{onSelect:y,children:`Delete`})]})]}),h&&(0,Q.jsx)(nn,{action:`activated`,fatalErrors:h,themeName:e.package?.name||e.name,title:`Theme not activated`,onClose:()=>g(null),onRetry:()=>{g(null),_()}})]})},cn=({themes:e})=>(e.sort((e,t)=>e.active&&!t.active?-1:!e.active&&t.active?1:e.package?.name&&t.package?.name?e.package.name.localeCompare(t.package.name):e.name.localeCompare(t.name)),(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`h1`,{className:`mb-5 text-2xl font-bold`,children:`Installed themes`}),(0,Q.jsx)(ve,{className:`border-t border-border`,children:e.map(e=>{let t=an(e),n=on(e);return(0,Q.jsxs)(ge,{"data-testid":`theme-list-item`,children:[(0,Q.jsxs)(he,{className:`py-3 pr-6`,id:`theme-${e.name}`,children:[(0,Q.jsx)(`div`,{children:t}),n&&(0,Q.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:n})]}),(0,Q.jsx)(_e,{children:(0,Q.jsx)(sn,{theme:e})})]},e.name)})})]})),ln=({themes:e})=>(0,Q.jsx)(ut,{children:(0,Q.jsx)(cn,{themes:e})}),un=``+new URL(`footer-marketplace-bg-cXGt4GLt.png`,import.meta.url).href,dn=3e3,fn=e=>e.variants&&e.variants.length>0,pn=e=>{let t=[{category:e.category,previewUrl:e.previewUrl,image:e.image}];return e.variants&&e.variants.length>0&&t.push(...e.variants),t},mn=({onSelectTheme:e})=>{let t=_t(),[n,r]=(0,Z.useState)(null),[i,a]=(0,Z.useState)(0),o=e=>{r(e),a(e!==null&&fn(e)&&pn(e).length>1?1:0)};return(0,Z.useEffect)(()=>{if(n===null)return;let e=setInterval(()=>{a((i+1)%(pn(n).length||0))},dn);return()=>clearInterval(e)},[n,i]),(0,Q.jsxs)(ut,{children:[(0,Q.jsx)(ut.Title,{children:`Themes`}),(0,Q.jsx)(`div`,{className:`mt-[6vmin] grid grid-cols-1 gap-[6vmin] sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4`,children:t.map(t=>{let r=fn(t),a=pn(t),s=n===t;return(0,Q.jsxs)(`button`,{className:`flex cursor-pointer flex-col gap-3 text-left`,type:`button`,onClick:()=>{e?.(t)},children:[(0,Q.jsx)(`div`,{className:`relative w-full bg-gray-100 shadow-md transition-all duration-500 hover:scale-[1.05]`,onMouseEnter:()=>o(t),onMouseLeave:()=>o(null),children:r?(0,Q.jsx)(Q.Fragment,{children:a.map((e,n)=>(0,Q.jsx)(`img`,{alt:`${t.name} Theme - ${e.category}`,className:y(`size-full object-contain opacity-0 transition-opacity duration-500`,{"opacity-100":n===i&&s||!s&&n===0,relative:n===i,absolute:n!==i,"left-0":n!==i,"top-0":n!==i}),src:e.image},`theme-variant-${e.category.toLowerCase()}`))}):(0,Q.jsx)(`img`,{alt:`${t.name} Theme`,className:`size-full object-contain`,src:t.image})}),(0,Q.jsxs)(`div`,{className:`relative mt-3`,children:[(0,Q.jsx)(x,{as:`h4`,className:`md:text-xl`,leading:`heading`,size:`lg`,weight:`bold`,children:t.name}),r?a.map((e,t)=>(0,Q.jsx)(`span`,{className:y(`absolute left-0 translate-y-px text-gray-700 opacity-0`,{"opacity-100":t===i&&s||!s&&t===0}),children:e.category},e.category)):(0,Q.jsx)(`span`,{className:`text-gray-700`,children:t.category})]})]},t.name)})}),(0,Q.jsxs)(`div`,{className:`mx-[-8vmin] mt-[8vmin] mb-[-8vmin] bg-black px-[8vmin] py-16 text-center text-lg text-white`,style:{background:`#15171a url(${un}) 100% 100% / 35vw no-repeat`},children:[`Find and buy third-party, premium themes from independent developers in the`,` `,(0,Q.jsx)(`a`,{className:`inline-block font-semibold text-lime`,href:`https://ghost.org/themes/`,rel:`noopener noreferrer`,target:`_blank`,children:`Ghost Marketplace →`})]})]})},hn=({title:e,action:t=`uploaded`,statusMessage:n,installedTheme:r,onActivate:i,onClose:a})=>{let{mutateAsync:o}=Ze(),{refreshActiveThemeData:s}=rn(),c=u(),{data:l}=Ke(),d=Nt(r),p=l?.site?Ye(l.site):void 0,m=r.active?`OK`:Bt(d)?`Activate with errors`:`Activate theme`,h=r.active?(0,Q.jsx)(`span`,{className:`text-green`,children:`It's live!`}):e,g;return g=r.active?(0,Q.jsxs)(Q.Fragment,{children:[`Your theme `,(0,Q.jsx)(`strong`,{children:r.name}),` was saved successfully and is now visible to your readers.`,p?(0,Q.jsxs)(Q.Fragment,{children:[` `,(0,Q.jsx)(`a`,{className:`font-semibold text-foreground hover:underline`,href:p,rel:`noreferrer`,target:`_blank`,children:`Take a look →`})]}):null]}):n||(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`strong`,{children:r.name}),` was `,Vt(t,d),`. Do you want to activate it?`]}),(0,Q.jsx)(pt,{cancelLabel:`Close`,contentClassName:d.length>0?`max-w-[600px]`:void 0,okLabel:m,okRunningLabel:`Activating...`,okVariant:`default`,prompt:(0,Q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Q.jsx)(`p`,{className:`text-base text-foreground`,children:g}),(0,Q.jsx)(tn,{problems:d})]}),stickyFooter:!0,title:h,onOk:async e=>{if(!r.active)try{let e=(await o(r.name)).themes[0];s(),f.success(`Theme activated`,{description:(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`span`,{className:`capitalize`,children:e.name}),` is now your active theme.`]})})}catch(e){c(e);return}i?.(),e?.remove()},onRemove:a})},gn=e=>e.variants&&e.variants.length>0,_n=e=>{let t=[{image:e.image,category:e.category,previewUrl:e.previewUrl}];return e.variants&&e.variants.length>0&&t.push(...e.variants),t},vn=e=>e.category.toLowerCase(),yn=({selectedTheme:e,isInstalling:t,installedTheme:n,onBack:r,onInstall:i})=>{let[a,o]=(0,Z.useState)(`desktop`),[s,c]=(0,Z.useState)(void 0);if(!e)return null;let l=e.previewUrl,u=_n(e).map(e=>({label:e.category,value:vn(e)}));gn(e)&&(s===void 0&&c(u[0].value),l=_n(e).find(e=>vn(e)===s)?.previewUrl||l);let d=`Install ${e.name}`;t?d=`Installing...`:Pe(e)&&!n?.active?d=`Activate ${e.name}`:n&&(d=`Update ${e.name}`);let f=()=>{i?.()},p=(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(Ct,{current:e.name,label:`Change theme`,onBack:r}),gn(e)?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`hidden md:!visible md:!block`,children:`–`}),(0,Q.jsxs)(q,{className:`w-auto`,children:[(0,Q.jsx)(G,{className:`sr-only`,children:`Theme variant`}),(0,Q.jsxs)(H,{value:s,onValueChange:c,children:[(0,Q.jsx)(B,{"aria-label":`Theme variant`,className:`w-auto border-0 bg-transparent shadow-none`,children:(0,Q.jsx)(V,{})}),(0,Q.jsx)(z,{className:`min-w-max`,children:u.map(e=>(0,Q.jsx)(R,{value:e.value,children:e.label},e.value))})]})]})]}):null]}),m=(0,Q.jsxs)(`div`,{className:`flex justify-end gap-8`,children:[(0,Q.jsxs)(b,{gap:`sm`,children:[(0,Q.jsx)(N,{"aria-label":`Desktop preview`,size:`icon`,type:`button`,variant:`ghost`,onClick:()=>o(`desktop`),children:(0,Q.jsx)(ee,{className:a===`desktop`?`text-foreground`:`text-muted-foreground`})}),(0,Q.jsx)(N,{"aria-label":`Mobile preview`,size:`icon`,type:`button`,variant:`ghost`,onClick:()=>o(`mobile`),children:(0,Q.jsx)(O,{className:a===`mobile`?`text-foreground`:`text-muted-foreground`})})]}),(0,Q.jsx)(N,{disabled:t,type:`button`,onClick:f,children:t?`Installing...`:d})]});return(0,Q.jsxs)(`div`,{className:`absolute inset-0 z-[100]`,children:[(0,Q.jsxs)(X,{blurredBackground:!1,className:`z-[100] h-22 min-h-[92px] bg-background p-8`,sticky:!1,children:[(0,Q.jsx)(X.Left,{className:`flex-auto`,children:p}),(0,Q.jsx)(X.Actions,{className:`flex-auto justify-end`,children:m})]}),(0,Q.jsx)(`div`,{className:`flex h-[calc(100%-92px)] grow flex-col items-center justify-center bg-background`,children:a===`desktop`?(0,Q.jsx)(Ce,{device:`desktop`,children:(0,Q.jsx)(`iframe`,{className:`size-full`,src:l,title:`Theme preview`})}):(0,Q.jsx)(Ce,{device:`mobile`,children:(0,Q.jsx)(`iframe`,{className:`size-full`,src:l,title:`Theme preview`})})})]})},bn=({onUpload:e})=>(0,Q.jsx)(ue,{accept:{"application/zip":[`.zip`]},inputId:`theme-upload`,onDropAccepted:([t])=>{e(t)},children:`Click to select or drag & drop zip file`}),xn=({currentTab:e,setCurrentTab:t,themes:n})=>{let{updateRoute:r}=U(),i=gt(),{mutateAsync:o}=ze(),{checkThemeLimitError:s,isThemeLimited:c}=Et(),l=u(),{confirm:d,showLimit:f}=mt(),[p,m]=(0,Z.useState)(),[h,g]=(0,Z.useState)(!1),[_,v]=(0,Z.useState)(null),[y,b]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{(async()=>{if(c){let e=await s(`.`);m({enabled:!1,error:e||`Your current plan doesn't support uploading custom themes.`})}else m({enabled:!0})})()},[s,c]);let x=()=>{r(`/`)},S=e=>{let r=e?.name.replace(/\.zip$/,``),i=n.map(e=>e.name);Pe({name:r})?d({title:`Upload failed`,cancelLabel:`Cancel`,okLabel:``,prompt:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`p`,{children:[`The default `,(0,Q.jsx)(`strong`,{children:r}),` theme cannot be overwritten.`]}),(0,Q.jsx)(`p`,{children:`Rename your zip file and try again.`})]}),onOk:e=>{e?.remove()}}):i.includes(r)?d({title:`Overwrite theme`,prompt:(0,Q.jsxs)(Q.Fragment,{children:[`The theme `,(0,Q.jsx)(`strong`,{children:r}),` already exists. Do you want to overwrite it?`]}),okLabel:`Overwrite`,cancelLabel:`Cancel`,okRunningLabel:`Overwriting...`,okVariant:`destructive`,onOk:async a=>{g(!0);let o=i.indexOf(r);n.splice(o,1),await C({file:e,onActivate:x}),g(!1),t(`installed`),a?.remove()}}):(t(`installed`),C({file:e,onActivate:x}))},C=async({file:e,onActivate:t})=>{let n,r=null;try{g(!0),n=await o({file:e}),g(!1)}catch(e){g(!1),e instanceof a&&e.response?.status===422&&e.data?.errors?r=e.data.errors:l(e)}r&&!n&&v({themeName:e.name.replace(/\.zip$/,``),fatalErrors:r}),n&&b({title:`Upload successful`,action:`uploaded`,installedTheme:n.themes[0],onActivate:t})},w=(0,Q.jsx)(`div`,{className:`hidden md:!visible md:!block`,children:(0,Q.jsx)(I,{value:e,variant:`button`,onValueChange:t,children:(0,Q.jsxs)(F,{children:[(0,Q.jsx)(P,{value:`official`,children:`Official themes`}),(0,Q.jsx)(P,{value:`installed`,children:`Installed`})]})})}),T=()=>{if(p)if(p.enabled){let e={current:null};e.current=d({title:`Upload theme`,prompt:(0,Q.jsx)(bn,{onUpload:t=>{e.current?.remove(),S(t)}}),okLabel:``,formSheet:!1})}else f({title:`Upgrade to enable custom themes`,prompt:p.error||(0,Q.jsxs)(Q.Fragment,{children:[`Your current plan only supports official themes. You can install them from the`,` `,(0,Q.jsx)(`a`,{href:`https://ghost.org/marketplace/`,children:`Ghost theme marketplace`}),`.`]}),onOk:()=>r({route:i,isExternal:!0})})},E=(0,Q.jsx)(`div`,{className:`flex items-center gap-14`,children:(0,Q.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Q.jsx)(N,{type:`button`,variant:`outline`,onClick:x,children:`Close`}),(0,Q.jsxs)(N,{disabled:h,type:`button`,onClick:T,children:[h&&(0,Q.jsx)(qe,{size:`sm`}),`Upload theme`]})]})});return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(X,{blurredBackground:!1,className:`sticky -top-px z-50 h-22 min-h-[92px] bg-background p-8`,sticky:!1,children:[(0,Q.jsx)(X.Left,{className:`flex-auto`,children:w}),(0,Q.jsx)(X.Actions,{className:`flex-auto justify-end`,children:E})]}),(0,Q.jsx)(`div`,{className:`px-[8vmin] md:hidden`,children:(0,Q.jsx)(I,{value:e,variant:`button`,onValueChange:t,children:(0,Q.jsxs)(F,{children:[(0,Q.jsx)(P,{value:`official`,children:`Official themes`}),(0,Q.jsx)(P,{value:`installed`,children:`Installed`})]})})}),_&&(0,Q.jsx)(nn,{action:`uploaded`,fatalErrors:_.fatalErrors,okLabel:`Re-upload`,themeName:_.themeName,title:`Theme not uploaded`,onClose:()=>v(null),onRetry:()=>{v(null),T()}}),y&&(0,Q.jsx)(hn,{...y,onClose:()=>b(null)})]})},Sn=({currentTab:e,onSelectTheme:t,themes:n})=>{switch(e){case`official`:return(0,Q.jsx)(mn,{onSelectTheme:t});case`installed`:return(0,Q.jsx)(ln,{themes:n})}return null},Cn=({source:e,themeRef:t})=>{let[n,r]=(0,Z.useState)(`official`),[i,a]=(0,Z.useState)(null),[o,s]=(0,Z.useState)(`desktop`),[c,l]=(0,Z.useState)(!1),[d,p]=(0,Z.useState)(!1),[m,h]=(0,Z.useState)(!1),[g,_]=(0,Z.useState)(null),{updateRoute:v}=U(),y=gt(),{data:{themes:b}={}}=Re(),{mutateAsync:x}=Qe(),{mutateAsync:S}=Ze(),{checkThemeLimitError:C}=Et(),w=u(),{confirm:T,showLimit:E}=mt(),D=e=>{a(e)};if((0,Z.useEffect)(()=>{h(!0)},[]),(0,Z.useEffect)(()=>{(async()=>{if(e&&t&&!d&&m){let e=t.split(`/`)[1];if(await C(e)){v(`theme`);return}let n=b?.map(e=>e.name)||[],r=n.includes(e.toLowerCase()),i=n.indexOf(e.toLowerCase()),a=b?.[i],o=(0,Q.jsxs)(Q.Fragment,{children:[`By clicking below, `,(0,Q.jsx)(`strong`,{children:e}),` will automatically be activated as the theme for your site.`,r&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`br`,{}),(0,Q.jsx)(`br`,{}),`This will overwrite your existing version of `,(0,Q.jsx)(`strong`,{children:e}),a?.active?` which is your active theme`:``,`. All custom changes will be lost.`]})]});T({title:`Install Theme`,prompt:o,okLabel:`Install`,cancelLabel:`Cancel`,okRunningLabel:`Installing...`,okVariant:`default`,onOk:async e=>{let n;p(!0);try{r&&b&&b.splice(i,1),n=await x(t),n?.themes[0]&&(await S(n.themes[0].name),f.success(`Theme activated`,{description:(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`span`,{className:`capitalize`,children:n.themes[0].name}),` is now your active theme`]})})),e?.remove(),v(``)}catch(e){w(e)}}})}})()},[t,e,x,w,S,v,b,d,C,T,m]),!b)return;let O,k;if(i){O=b.find(e=>e.name.toLowerCase()===i.name.toLowerCase()),k=async()=>{let t=await C(i.name);if(t){E({prompt:t,onOk:()=>v({route:y,isExternal:!0})});return}return O&&!Pe(i)?new Promise(t=>{T({title:`Overwrite theme`,prompt:(0,Q.jsxs)(Q.Fragment,{children:[`This will overwrite your existing version of `,i.name,O?.active?`, which is your active theme`:``,`. All custom changes will be lost.`]}),okLabel:`Overwrite`,okRunningLabel:`Installing...`,cancelLabel:`Cancel`,okVariant:`destructive`,onOk:async n=>{n?.remove(),await e(),t()}})}):e()};let e=async()=>{let e=`Installed successfully`,t;if(Pe(i))e=`Activate theme`,t=(0,Q.jsxs)(Q.Fragment,{children:[`Do you want to activate `,(0,Q.jsx)(`strong`,{children:i.name}),` as the theme for your site?`]});else{l(!0);let e;try{e=await x(i.ref)}catch(e){w(e)}finally{l(!1)}if(!e)return;O=e.themes[0]}_({title:e,action:`installed`,statusMessage:t,installedTheme:O,onActivate:()=>{v(``)}})}}return(0,Q.jsxs)(de,{animate:!1,cancelLabel:``,footer:!1,padding:!1,size:`full`,testId:`theme-modal`,title:``,scrolling:!0,onCancel:()=>{v(``)},onClose:()=>{v(``)},children:[(0,Q.jsx)(`div`,{className:`flex h-full justify-between`,children:(0,Q.jsxs)(`div`,{className:`grow`,children:[i&&(0,Q.jsx)(yn,{installedTheme:O,isInstalling:c,selectedTheme:i,onBack:()=>{a(null)},onClose:()=>{v(``)},onInstall:k}),(0,Q.jsx)(xn,{currentTab:n,previewMode:o,selectedTheme:i,setCurrentTab:r,setPreviewMode:s,setSelectedTheme:a,themes:b}),!i&&(0,Q.jsx)(Sn,{currentTab:n,themes:b,onSelectTheme:D})]})}),g&&(0,Q.jsx)(hn,{...g,onClose:()=>_(null)})]})},wn=e(n(),1),Tn=({children:e,to:t,classNames:n})=>{let r=t||document.body;return r?(0,wn.createPortal)((0,Q.jsx)(`div`,{className:n,onMouseDown:e=>{e.stopPropagation()},children:(0,Q.jsx)(`div`,{children:e})}),r):(0,Q.jsx)(Q.Fragment,{children:e})},En=({unsplashProviderConfig:e,onClose:t,onImageInsert:n})=>(0,Q.jsx)(Tn,{classNames:`settings-app`,children:(0,Q.jsx)(dt,{unsplashProviderConfig:e,onClose:t,onImageInsert:n})}),Dn={heading:[{name:`Cardo`,creator:`David Perry`},{name:`Chakra Petch`,creator:`Cadson Demak`},{name:`Fira Mono`,creator:`Carrois Apostrophe`},{name:`Fira Sans`,creator:`Carrois Apostrophe`},{name:`IBM Plex Serif`,creator:`Mike Abbink`},{name:`Inter`,creator:`Rasmus Andersson`},{name:`JetBrains Mono`,creator:`JetBrains`},{name:`Libre Baskerville`,creator:`Impallari Type`},{name:`Lora`,creator:`Cyreal`},{name:`Manrope`,creator:`Mikhail Sharanda`},{name:`Merriweather`,creator:`Sorkin Type`},{name:`Noto Sans`,creator:`Google`},{name:`Noto Serif`,creator:`Google`},{name:`Nunito`,creator:`Vernon Adams`},{name:`Old Standard TT`,creator:`Alexey Kryukov`},{name:`Poppins`,creator:`Indian Type Foundry`},{name:`Roboto`,creator:`Christian Robertson`},{name:`Rufina`,creator:`Martin Sommaruga`},{name:`Space Grotesk`,creator:`Florian Karsten`},{name:`Space Mono`,creator:`Colophon Foundry`},{name:`Tenor Sans`,creator:`Denis Masharov`}],body:[{name:`Fira Mono`,creator:`Carrois Apostrophe`},{name:`Fira Sans`,creator:`Carrois Apostrophe`},{name:`IBM Plex Serif`,creator:`Mike Abbink`},{name:`Inter`,creator:`Rasmus Andersson`},{name:`JetBrains Mono`,creator:`JetBrains`},{name:`Lora`,creator:`Cyreal`},{name:`Manrope`,creator:`Mikhail Sharanda`},{name:`Merriweather`,creator:`Sorkin Type`},{name:`Noto Sans`,creator:`Google`},{name:`Noto Serif`,creator:`Google`},{name:`Nunito`,creator:`Vernon Adams`},{name:`Poppins`,creator:`Indian Type Foundry`},{name:`Roboto`,creator:`Christian Robertson`},{name:`Space Mono`,creator:`Colophon Foundry`}]},$=`Theme default`,On=({option:e,selected:t})=>(0,Q.jsxs)(`span`,{className:`flex w-full items-center gap-4 ${e.className??``}`,"data-testid":t?`select-current-option`:`select-option`,"data-value":e.value,children:[(0,Q.jsx)(`span`,{className:`flex size-12 shrink-0 items-center justify-center rounded-md border border-border-default bg-surface-elevated text-2xl font-bold shadow-xs`,children:`Aa`}),(0,Q.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,Q.jsx)(`span`,{className:`text-md`,children:e.label}),(0,Q.jsx)(`span`,{className:`truncate font-sans text-sm font-normal text-muted-foreground`,children:e.hint})]})]}),kn=e=>e.split(` `).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),An=({values:e,updateSetting:t})=>{let{mutateAsync:n}=at(),{settings:r}=ht(),[a]=Ge(r,[`unsplash`]),[o,s]=(0,Z.useState)(!1),{unsplashConfig:c}=i(),l=u(),d=async(e,r)=>{try{t(e,lt(await n({file:r})))}catch(e){let t=e;t.response.status===415&&(t.message=`Unsupported file type`),l(t)}},f=xt(),{data:p}=Re(),m=p?.themes.find(e=>e.active),h=m?`${kn(m.name)} (v${m.package?.version||`1.0`})`:`Loading...`,[g,_]=(0,Z.useState)(Dn.heading.find(t=>t.name===e.headingFont)||{name:$,creator:h}),[b,x]=(0,Z.useState)(Dn.heading.find(t=>t.name===e.bodyFont)||{name:$,creator:h}),S=(e,t=!0)=>{let n=``;return e===`Cardo`?n=y(`font-cardo`,t&&`font-bold`):e===`Manrope`?n=y(`font-manrope`,t&&`font-bold`):e===`Merriweather`?n=y(`font-merriweather`,t&&`font-bold`):e===`Nunito`?n=y(`font-nunito`,t&&`font-semibold`):e===`Old Standard TT`?n=y(`font-old-standard-tt`,t&&`font-bold`):e===`Prata`?n=y(`font-prata`,t&&`font-normal`):e===`Roboto`?n=y(`font-roboto`,t&&`font-bold`):e===`Rufina`?n=y(`font-rufina`,t&&`font-bold`):e===`Tenor Sans`?n=y(`font-tenor-sans`,t&&`font-normal`):e===`Chakra Petch`?n=y(`font-chakra-petch`,t&&`font-normal`):e===`Fira Mono`?n=y(`font-fira-mono`,t&&`font-bold`):e===`Fira Sans`?n=y(`font-fira-sans`,t&&`font-bold`):e===`IBM Plex Serif`?n=y(`font-ibm-plex-serif`,t&&`font-bold`):e===`Inter`?n=y(`font-inter`,t&&`font-bold`):e===`JetBrains Mono`?n=y(`font-jetbrains-mono`,t&&`font-bold`):e===`Lora`?n=y(`font-lora`,t&&`font-bold`):e===`Noto Sans`?n=y(`font-noto-sans`,t&&`font-bold`):e===`Noto Serif`?n=y(`font-noto-serif`,t&&`font-bold`):e===`Poppins`?n=y(`font-poppins`,t&&`font-bold`):e===`Space Grotesk`?n=y(`font-space-grotesk`,t&&`font-bold`):e===`Space Mono`&&(n=y(`font-space-mono`,t&&`font-bold`)),n},C=Dn.heading.map(e=>{let t=S(e.name,!0);return{label:e.name,value:e.name,hint:e.creator,className:t}});C.unshift({label:$,value:$,hint:h,className:`font-sans font-normal`});let w=Dn.body.map(e=>{let t=S(e.name,!1);return{label:e.name,value:e.name,hint:e.creator,className:t}});w.unshift({label:$,value:$,hint:h,className:`font-sans font-normal`});let E=(e,t)=>e===$?``:S(e,t),D=C.find(e=>e.value===g.name)||C[0],O=w.find(e=>e.value===b.name)||w[0];return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(ye,{className:`mt-6 mb-12 gap-6`,children:[(0,Q.jsx)(yt,{debounceMs:200,direction:`rtl`,testId:`accent-color-picker`,title:(0,Q.jsx)(`div`,{children:`Accent color`}),value:e.accentColor,onChange:e=>t(`accent_color`,e)}),(0,Q.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{children:`Publication icon`}),(0,Q.jsxs)(K,{className:`mr-5 max-w-[160px]`,children:[`A square, social icon, at least `,v(60),`×`,v(60),`px`]})]}),(0,Q.jsx)(`div`,{className:`flex gap-3`,children:(0,Q.jsx)(st,{className:e.icon?`size-16.5`:`h-9 w-40`,children:e.icon?(0,Q.jsxs)(rt,{background:`checkerboard`,children:[(0,Q.jsx)(ct,{id:`logo`,src:e.icon}),(0,Q.jsx)(nt,{className:`top-1 right-1`,children:(0,Q.jsx)(it,{"aria-label":`Remove publication icon`,"data-testid":`image-delete-button`,onClick:()=>t(`icon`,null),children:(0,Q.jsx)(T,{})})})]}):(0,Q.jsx)(ot,{inputId:`logo`,onDropAccepted:([e])=>void d(`icon`,e),children:`Upload icon`})})})]}),(0,Q.jsxs)(`div`,{className:`flex items-start justify-between ${e.icon&&`mt-2`}`,children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{children:`Publication logo`}),(0,Q.jsx)(K,{className:`mr-5 max-w-[160px]`,children:`Appears usually in the main header of your theme`})]}),(0,Q.jsx)(`div`,{children:(0,Q.jsx)(st,{className:`h-15 w-40`,children:e.logo?(0,Q.jsxs)(rt,{background:`checkerboard`,children:[(0,Q.jsx)(ct,{className:`object-contain`,id:`site-logo`,src:e.logo}),(0,Q.jsx)(nt,{className:`top-1 right-1`,children:(0,Q.jsx)(it,{"aria-label":`Remove publication logo`,"data-testid":`image-delete-button`,onClick:()=>t(`logo`,null),children:(0,Q.jsx)(T,{})})})]}):(0,Q.jsx)(ot,{inputId:`site-logo`,onDropAccepted:([e])=>void d(`logo`,e),children:`Upload logo`})})})]}),(0,Q.jsxs)(`div`,{className:`mt-2 flex items-start justify-between`,"data-testid":`publication-cover`,children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`div`,{children:`Publication cover`}),(0,Q.jsx)(K,{className:`mr-5 max-w-[160px]`,children:`Usually as a large banner image on your index pages`})]}),(0,Q.jsx)(st,{className:`h-23.75 w-40`,children:e.coverImage?(0,Q.jsxs)(rt,{children:[(0,Q.jsx)(ct,{id:`cover`,src:e.coverImage}),(0,Q.jsxs)(nt,{className:`top-1 right-1`,children:[f.isEnabled&&(0,Q.jsx)(it,{"aria-label":`Edit publication cover`,onClick:()=>f.openEditor({image:e.coverImage||``,handleSave:async e=>{try{t(`cover_image`,lt(await n({file:e})))}catch(e){l(e)}}}),children:(0,Q.jsx)(A,{})}),(0,Q.jsx)(it,{"aria-label":`Remove publication cover`,"data-testid":`image-delete-button`,onClick:()=>t(`cover_image`,null),children:(0,Q.jsx)(T,{})})]})]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(ot,{inputId:`cover`,onDropAccepted:([e])=>void d(`cover_image`,e),children:`Upload cover`}),a&&(0,Q.jsx)(nt,{className:`top-1 right-1 opacity-100`,children:(0,Q.jsx)(it,{"aria-label":`Select publication cover from Unsplash`,"data-testid":`toggle-unsplash-button`,onClick:()=>s(!0),children:(0,Q.jsx)(ne,{})})})]})}),o&&c&&a&&(0,Q.jsx)(En,{unsplashProviderConfig:c,onClose:()=>{s(!1)},onImageInsert:e=>{e.src&&t(`cover_image`,e.src),s(!1)}})]})]}),(0,Q.jsxs)(be,{className:`-mt-4 gap-0`,children:[(0,Q.jsx)(Se,{className:`mb-4 text-md! leading-supertight font-bold md:text-lg!`,children:`Typography`}),(0,Q.jsxs)(ye,{className:`mb-12 gap-6`,children:[(0,Q.jsxs)(q,{children:[(0,Q.jsx)(G,{children:`Heading font`}),(0,Q.jsxs)(H,{value:D.value,onValueChange:e=>{e===$?(_({name:$,creator:h}),t(`heading_font`,``)):(_({name:e,creator:Dn.heading.find(t=>t.name===e)?.creator||``}),t(`heading_font`,e))},children:[(0,Q.jsx)(B,{"aria-label":`Heading font`,className:`h-16 pl-2 text-left ${E(D.label,!0)}`,"data-testid":`heading-font-select`,children:(0,Q.jsx)(V,{children:(0,Q.jsx)(On,{option:D,selected:!0})})}),(0,Q.jsx)(z,{children:C.map(e=>(0,Q.jsx)(R,{value:e.value,children:(0,Q.jsx)(On,{option:e})},e.value))})]})]}),(0,Q.jsxs)(q,{children:[(0,Q.jsx)(G,{children:`Body font`}),(0,Q.jsxs)(H,{value:O.value,onValueChange:e=>{e===$?(x({name:$,creator:h}),t(`body_font`,``)):(x({name:e,creator:Dn.body.find(t=>t.name===e)?.creator||``}),t(`body_font`,e))},children:[(0,Q.jsx)(B,{"aria-label":`Body font`,className:`h-16 pl-2 text-left ${E(O.label,!1)}`,"data-testid":`body-font-select`,children:(0,Q.jsx)(V,{children:(0,Q.jsx)(On,{option:O,selected:!0})})}),(0,Q.jsx)(z,{className:`max-h-52`,children:w.map(e=>(0,Q.jsx)(R,{value:e.value,children:(0,Q.jsx)(On,{option:e})},e.value))})]})]})]})]})]})},jn=e(ft(),1);function Mn(e,t){return e.visibility?(0,jn.default)(e.visibility).queryJSON(t):!0}function Nn({description:e,accentColor:t,icon:n,logo:r,coverImage:i,themeSettings:a,bodyFont:o,headingFont:s}){if(!a)return;let c=a.reduce((e,{key:t,value:n})=>({...e,[t]:n}),{}),l=new URLSearchParams;l.append(`c`,t),l.append(`d`,e),l.append(`icon`,n),l.append(`logo`,r),l.append(`cover`,i),l.append(`bf`,o),l.append(`hf`,s);let u={};return a.forEach(e=>{u[e.key]=Mn(e,c)?e.value:null}),l.append(`custom`,JSON.stringify(u)),l.toString()}var Pn=({settings:e,url:t,isVisible:n=!0})=>{let r=Nn({...e});return(0,Q.jsx)(St,{addDelay:!1,className:`absolute -top-px -left-px size-[calc(110%_+_3px)] origin-top-left scale-[.90909] bg-white max-[1600px]:size-[calc(130%_+_3px)] max-[1600px]:scale-[.76923]`,generateContent:(0,Z.useCallback)(e=>{if(!t||!r)return;let n=new URL(t);n.searchParams.set(`admin_toolbar`,`0`),fetch(n.toString(),{method:`POST`,headers:{"Content-Type":`text/html;charset=utf-8`,"x-ghost-preview":r,Accept:`text/html`},mode:`cors`,credentials:`include`}).then(e=>e.text()).then(t=>{let n=`html { pointer-events: none; }`,r=new DOMParser().parseFromString(t,`text/html`),i=r.querySelector(`style`),a=i?.innerHTML;a?i.innerHTML=`${a}\n\n${n}`:r.head.innerHTML+=`<style>${n}</style>`;let o=(r.doctype?new XMLSerializer().serializeToString(r.doctype):``)+r.documentElement.outerHTML;e.contentDocument?.open(),e.contentDocument?.write(o),e.contentDocument?.close()})},[r,t]),height:`100%`,parentClassName:`absolute inset-0 overflow-hidden ${n?`z-10 opacity-100`:`z-0 opacity-0 pointer-events-none`}`,testId:`theme-preview`,width:`100%`})},Fn=({setting:e,setSetting:t})=>{let[n,r]=(0,Z.useState)({});(0,Z.useEffect)(()=>{let t=e.value===null?``:String(e.value);r(n=>({...n,[e.key]:t}))},[e]);let i=e=>{n[e]!==void 0&&t(n[e])},a=(e,t)=>{r(n=>({...n,[e]:t}))},{mutateAsync:o}=at(),s=u(),c=async e=>{try{t(lt(await o({file:e})))}catch(e){s(e)}};switch(e.type){case`text`:return(0,Q.jsxs)(q,{children:[(0,Q.jsx)(G,{htmlFor:`theme-setting-${e.key}`,children:Ve(e.key)}),(0,Q.jsx)(Xe,{id:`theme-setting-${e.key}`,value:n[e.key]||``,onBlur:()=>i(e.key),onChange:t=>a(e.key,t.target.value)}),e.description&&(0,Q.jsx)(K,{children:e.description})]});case`boolean`:return(0,Q.jsxs)(q,{orientation:`horizontal`,children:[(0,Q.jsxs)(xe,{children:[(0,Q.jsx)(G,{htmlFor:`theme-setting-${e.key}`,children:Ve(e.key)}),e.description&&(0,Q.jsx)(K,{children:e.description})]}),(0,Q.jsx)(L,{checked:!!e.value,id:`theme-setting-${e.key}`,onCheckedChange:t})]});case`select`:return(0,Q.jsxs)(q,{children:[(0,Q.jsx)(G,{children:Ve(e.key)}),(0,Q.jsxs)(H,{value:e.value,onValueChange:t,children:[(0,Q.jsx)(B,{"aria-label":Ve(e.key),"data-testid":`setting-select-${e.key}`,children:(0,Q.jsx)(V,{})}),(0,Q.jsx)(z,{children:e.options.map(e=>(0,Q.jsx)(R,{value:e,children:e},e))})]}),e.description&&(0,Q.jsx)(K,{children:e.description})]});case`color`:return(0,Q.jsx)(yt,{debounceMs:200,direction:`rtl`,hint:e.description,title:Ve(e.key),value:e.value||``,onChange:e=>t(e)});case`image`:return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(G,{children:Ve(e.key)}),(0,Q.jsx)(st,{className:e.value?`h-25`:`h-8`,children:e.value?(0,Q.jsxs)(rt,{children:[(0,Q.jsx)(ct,{id:`custom-${e.key}`,src:e.value}),(0,Q.jsx)(nt,{children:(0,Q.jsx)(it,{"aria-label":`Remove image`,onClick:()=>t(null),children:(0,Q.jsx)(T,{})})})]}):(0,Q.jsx)(ot,{inputId:`custom-${e.key}`,onDropAccepted:e=>void c(e[0]),children:`Upload image`})}),e.description&&(0,Q.jsx)(K,{children:e.description})]})}},In={source:[`title_font`,`body_font`],casper:[`title_font`,`body_font`],alto:[`title_font`,`body_font`],bulletin:[`title_font`,`body_font`],dawn:[`title_font`,`body_font`],digest:[`title_font`,`body_font`],dope:[`title_font`,`body_font`],ease:[`title_font`,`body_font`],edge:[`title_font`,`body_font`],edition:[`title_font`,`body_font`],episode:[`typography`],headline:[`title_font`,`body_font`],journal:[`title_font`,`body_font`],london:[`title_font`,`body_font`],ruby:[`title_font`,`body_font`],solo:[`typography`],taste:[`style`],wave:[`title_font`,`body_font`]},Ln=({sections:e,updateSetting:t})=>{let{data:n}=Re(),r=n?.themes.find(e=>e.active),i=r?.package.name?.toLowerCase()||``,a=r?.package.author?.name||``,{supportsCustomFonts:o}=rn();return(0,Q.jsx)(Q.Fragment,{children:e.map(e=>{let n=e.settings.filter(t=>Mn(t,e.settings.reduce((e,{key:t,value:n})=>({...e,[t]:n}),{}))),r;return(0,Q.jsxs)(be,{className:`gap-0 first-of-type:mt-6`,children:[(0,Q.jsx)(Se,{className:`mb-4 text-md! leading-supertight font-bold md:text-lg!`,children:e.title}),(0,Q.jsx)(ye,{className:`mb-12 gap-4`,children:n.map(e=>{let n=``;e.type===`boolean`&&r!==`boolean`&&r!==void 0&&(n=`mt-3`),(e.type===`text`||e.type===`select`)&&(r===`text`||r===`select`)&&(n=`mt-2`);let s=In[i];return s&&s.includes(e.key)&&a===`Ghost Foundation`&&o&&(n+=` hidden`),r=e.type,(0,Q.jsx)(`div`,{className:n,children:(0,Q.jsx)(Fn,{setSetting:n=>t({...e,value:n}),setting:e},e.key)},e.key)})})]},e.id)})})},Rn=({globalSettings:e,themeSettingSections:t,updateGlobalSetting:n,updateThemeSetting:r,onTabChange:i})=>{let[a,o]=(0,Z.useState)(`global`);return(0,Q.jsx)(`div`,{className:`flex h-full flex-col justify-between`,children:(0,Q.jsx)(`div`,{className:`grow p-7 pt-0`,"data-testid":`design-setting-tabs`,children:t.length>0?(0,Q.jsxs)(I,{value:a,variant:`underline`,onValueChange:e=>{o(e),i(e)},children:[(0,Q.jsxs)(F,{className:`sticky top-0 z-50 bg-surface-elevated-2`,children:[(0,Q.jsx)(P,{value:`global`,children:`Brand`}),(0,Q.jsx)(P,{value:`theme-settings`,children:`Theme`})]}),(0,Q.jsx)(le,{value:`global`,children:(0,Q.jsx)(An,{updateSetting:n,values:e})}),(0,Q.jsx)(le,{value:`theme-settings`,children:(0,Q.jsx)(Ln,{sections:t,updateSetting:r})})]}):(0,Q.jsx)(An,{updateSetting:n,values:e})})})},zn=()=>{let{settings:e,siteData:t}=ht(),{mutateAsync:n}=tt(),{data:{posts:[r]}={posts:[]}}=m({searchParams:{filter:`status:published`,order:`published_at DESC`,limit:`1`,fields:`id,url`}}),{data:i}=We(),{mutateAsync:a}=et(),o=u(),[s,c]=(0,Z.useState)(`homepage`),[l,d]=(0,Z.useState)(`desktop`),{updateRoute:f}=U(),h=g(),_=wt().getParam(`ref`),{formState:v,saveState:y,handleSave:b,updateForm:x,setFormState:S,okProps:C}=p({initialState:{settings:e,themeSettings:i?.custom_theme_settings},savingDelay:500,onSave:async()=>{if(v.themeSettings?.some(e=>e.dirty)){let e=await a(v.themeSettings);S(t=>({...t,themeSettings:e.custom_theme_settings}))}if(v.settings.some(e=>e.dirty)){let{settings:e}=await n(v.settings.filter(e=>e.dirty));S(t=>({...t,settings:e}))}},onSaveError:o});(0,Z.useEffect)(()=>{i&&S(e=>({...e,themeSettings:i.custom_theme_settings}))},[S,i]);let w=(e,t)=>{x(n=>({...n,settings:n.settings.map(n=>n.key===e?{...n,value:t,dirty:!0}:n)}))},T=e=>{x(t=>({...t,themeSettings:t.themeSettings?.map(t=>t.key===e.key?{...e,dirty:!0}:t)}))},[E,D,k,te,A,ne,j]=Ge(v.settings,[`description`,`accent_color`,`icon`,`logo`,`cover_image`,`heading_font`,`body_font`]),re=(v.themeSettings||[]).reduce((e,t)=>{let n=t.group===`homepage`||t.group===`post`?t.group:`site-wide`;return{...e,[n]:(e[n]||[]).concat(t)}},{}),ie=Object.entries(re).map(([e,t])=>({id:e,settings:t||[],title:e===`site-wide`?`Site wide`:e===`homepage`?`Homepage`:`Post`})),M=e=>{r&&c(e)},N=e=>{c(e===`post`&&r?`post`:`homepage`)},ae=[{id:`homepage`,url:Ye(t)},...r?[{id:`post`,url:r.url}]:[]],oe={description:E,accentColor:D,icon:k,logo:te,coverImage:A,themeSettings:v.themeSettings,headingFont:ne,bodyFont:j},se=(0,Q.jsx)(`div`,{className:`relative size-full`,children:ae.map(({id:e,url:t})=>(0,Q.jsx)(Pn,{isVisible:s===e,settings:oe,url:t},e))}),ce=l===`desktop`?(0,Q.jsx)(Ce,{"data-testid":`preview-desktop`,device:`desktop`,children:se}):(0,Q.jsx)(Ce,{"data-testid":`preview-mobile`,device:`mobile`,children:se}),le=r?(0,Q.jsx)(I,{value:s,variant:`button`,onValueChange:M,children:(0,Q.jsxs)(F,{children:[(0,Q.jsx)(P,{value:`homepage`,children:`Homepage`}),(0,Q.jsx)(P,{value:`post`,children:`Post`})]})}):void 0,L=(0,Q.jsxs)(Te,{size:`default`,type:`single`,value:l,onValueChange:e=>{(e===`desktop`||e===`mobile`)&&d(e)},children:[(0,Q.jsx)(we,{"aria-label":`Desktop`,value:`desktop`,children:(0,Q.jsx)(ee,{})}),(0,Q.jsx)(we,{"aria-label":`Mobile`,value:`mobile`,children:(0,Q.jsx)(O,{})})]}),ue=(0,Q.jsx)(Rn,{globalSettings:{description:E,accentColor:D,icon:k,logo:te,coverImage:A,headingFont:ne,bodyFont:j},handleSave:b,themeSettingSections:ie,updateGlobalSetting:w,updateThemeSetting:T,onTabChange:N});return(0,Q.jsx)(bt,{buttonsDisabled:C.disabled,cancelLabel:`Close`,deviceSelector:L,dirty:y===`unsaved`,okLabel:C.label||`Save`,okVariant:C.variant,preview:ce,previewToolbarTabs:le,sidebar:ue,sidebarPadding:!1,siteLink:Ye(t),size:`full`,testId:`design-modal`,title:`Design`,onClose:()=>{_===`setup`?h(`/analytics`):f(`design`)},onOk:async()=>{await b({fakeWhenUnchanged:!0})}})},Bn=({title:e,prompt:t,cancelLabel:n=`Cancel`,okLabel:r=`OK`,okVariant:i=`default`,onResolve:a})=>(0,Q.jsx)(de,{backDropClick:!1,cancelLabel:n,okLabel:r,okVariant:i,testId:`theme-editor-confirm-modal`,title:e,width:540,onCancel:()=>a(!1),onClose:()=>a(!1),onOk:()=>a(!0),children:(0,Q.jsx)(`div`,{className:`py-4`,children:t})}),Vn=({title:e,prompt:t,fieldTitle:n,initialValue:r,placeholder:i,cancelLabel:a=`Cancel`,okLabel:o=`Continue`,onResolve:s})=>{let[c,l]=(0,Z.useState)(r);return(0,Q.jsx)(de,{backDropClick:!1,cancelLabel:a,okDisabled:!c.trim(),okLabel:o,testId:`theme-editor-input-modal`,title:e,width:540,onCancel:()=>s(null),onClose:()=>s(null),onOk:()=>s(c),children:(0,Q.jsxs)(`div`,{className:`flex flex-col gap-4 py-4`,children:[t,(0,Q.jsxs)(q,{children:[(0,Q.jsx)(G,{htmlFor:`theme-editor-input`,children:n}),(0,Q.jsx)(Xe,{id:`theme-editor-input`,placeholder:i,value:c,autoFocus:!0,onChange:e=>l(e.target.value)})]})]})})},Hn=`inline-flex items-center gap-2 rounded-md border px-3 py-1.5 text-[13px] font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#4a9eff] disabled:cursor-not-allowed disabled:opacity-50`,Un=`${Hn} border-[#2f333b] bg-transparent text-[#e6e7ea] hover:bg-[#1f2228]`,Wn=`${Hn} border-transparent bg-green text-black hover:bg-green-400`,Gn=({currentThemeName:e,changes:t,isSaving:n,onClose:r,onSave:i})=>(0,Q.jsxs)(`div`,{className:`flex items-center gap-3 border-b border-[#23262c] bg-[#1a1d21] px-4 py-3`,children:[(0,Q.jsxs)(`div`,{className:`flex min-w-0 items-baseline gap-2`,children:[(0,Q.jsx)(`h2`,{className:`truncate text-[14px] font-semibold text-[#f4f5f7]`,children:`Edit theme`}),(0,Q.jsx)(`span`,{className:`truncate text-[12px] text-[#8a8f98]`,children:e})]}),t.length>0&&(0,Q.jsxs)(`span`,{className:`rounded-full border border-transparent bg-[#3b2a16] px-2.5 py-1 text-[11px] leading-none text-[#f5a623]`,children:[v(t.length),` `,t.length===1?`file modified`:`files modified`]}),(0,Q.jsx)(`div`,{className:`grow`}),(0,Q.jsxs)(`button`,{className:Un,type:`button`,onClick:r,children:[(0,Q.jsx)(k,{size:14}),`Close`]}),(0,Q.jsxs)(`button`,{className:Wn,disabled:n,type:`button`,onClick:i,children:[(0,Q.jsx)(M,{size:14}),n?`Saving…`:`Save`]})]}),Kn=e=>{let t={type:`dir`,name:``,path:``,children:new Map};for(let n of Object.keys(e).sort()){let r=n.split(`/`),i=t;for(let t=0;t<r.length;t+=1){let a=r[t];if(t===r.length-1){i.children.set(a,{type:`file`,name:a,path:n,editable:e[n].editable});continue}let o=`${r.slice(0,t+1).join(`/`)}/`,s=i.children.get(a);if(s?.type===`dir`){i=s;continue}let c={type:`dir`,name:a,path:o,children:new Map};i.children.set(a,c),i=c}}return t},qn=e=>e.sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`dir`?-1:1),Jn=`inline-flex h-5 w-5 items-center justify-center rounded-sm text-[#c8ccd3] transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#4a9eff] disabled:cursor-not-allowed disabled:opacity-30`,Yn=({currentFiles:e,selectedNode:t,setSelectedNode:n,expandedDirectories:r,setExpandedDirectories:i,changesMap:a,isLoading:o,onCreateFile:s,onRenameSelected:c,onDeleteSelected:l,onOpenFile:u})=>{let d=(e,o=0)=>{if(e.type===`file`){let n=t?.type===`file`&&t.path===e.path,r=a.get(e.path);return(0,Q.jsxs)(`button`,{className:`flex min-h-6 w-full items-center gap-1.5 rounded px-2 py-1 text-left text-[13px] leading-5 ${n?`bg-[#243043] text-white`:`text-[#c8ccd3] hover:bg-[#1f2228]`} ${e.editable?``:`opacity-70`}`,style:{paddingLeft:`${o*14+8}px`},type:`button`,onClick:()=>u(e.path),children:[(0,Q.jsx)(`span`,{className:`w-3 shrink-0`}),(0,Q.jsx)(ie,{size:14}),(0,Q.jsx)(`span`,{className:`min-w-0 grow truncate`,children:e.name}),r&&(0,Q.jsx)(`span`,{className:`mr-1 size-1.5 shrink-0 rounded-full ${r===`deleted`?`bg-[#ff6b6b]`:r===`added`?`bg-[#14b886]`:`bg-[#f5a623]`}`})]},e.path)}let s=r.has(e.path),c=t?.type===`dir`&&t.path===e.path,l=qn(Array.from(e.children?.values()||[]));return(0,Q.jsxs)(`div`,{children:[e.path&&(0,Q.jsxs)(`button`,{className:`flex min-h-6 w-full items-center gap-1.5 rounded px-2 py-1 text-left text-[13px] leading-5 ${c?`bg-[#202630] text-white`:`text-[#c8ccd3] hover:bg-[#1f2228]`}`,style:{paddingLeft:`${o*14+8}px`},type:`button`,onClick:()=>{n({type:`dir`,path:e.path}),i(t=>{let n=new Set(t);return n.has(e.path)?n.delete(e.path):n.add(e.path),n})},children:[s?(0,Q.jsx)(ae,{className:`shrink-0 text-[#6a6f78]`,size:12}):(0,Q.jsx)(S,{className:`shrink-0 text-[#6a6f78]`,size:12}),s?(0,Q.jsx)(w,{className:`shrink-0 text-[#8a8f98]`,size:14}):(0,Q.jsx)(D,{className:`shrink-0 text-[#8a8f98]`,size:14}),(0,Q.jsx)(`span`,{className:`truncate`,children:e.name})]}),(e.path===``||s)&&(0,Q.jsx)(`div`,{children:l.map(t=>d(t,e.path?o+1:o))})]},e.path||`root`)};return(0,Q.jsxs)(`aside`,{className:`flex w-[280px] shrink-0 flex-col border-r border-[#23262c] bg-[#16181c]`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b border-[#23262c] px-3 py-2`,children:[(0,Q.jsxs)(`div`,{className:`text-[12px] font-medium text-[#c8ccd3]`,children:[Object.keys(e).length,` files`]}),(0,Q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(`button`,{"aria-label":`New file`,className:Jn,type:`button`,onClick:s,children:(0,Q.jsx)(j,{size:13})}),(0,Q.jsx)(`button`,{"aria-label":`Rename selected item`,className:Jn,disabled:!t,type:`button`,onClick:c,children:(0,Q.jsx)(A,{size:13})}),(0,Q.jsx)(`button`,{"aria-label":`Delete selected item`,className:Jn,disabled:!t,type:`button`,onClick:l,children:(0,Q.jsx)(T,{size:13})})]})]}),(0,Q.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-2`,children:o?(0,Q.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-3 text-center text-[13px] text-[#8a8f98]`,children:[(0,Q.jsx)(`div`,{className:`size-5 animate-spin rounded-full border-2 border-[#2f333b] border-t-[#14b886]`}),(0,Q.jsx)(`span`,{children:`Loading theme files…`})]}):Object.keys(e).length===0?(0,Q.jsx)(`div`,{className:`px-3 py-4 text-[12px] text-[#8a8f98]`,children:`This theme archive does not contain any files.`}):d(Kn(e))})]})},Xn=e(Tt(),1),Zn=e=>{if(!e.startsWith(`theme/edit/`))return{themeName:null,isInvalid:!1};let t=e.slice(11).split(`?`)[0];if(!t||t.includes(`/`))return{themeName:null,isInvalid:!0};try{let e=decodeURIComponent(t);return!e||e.includes(`/`)?{themeName:null,isInvalid:!0}:{themeName:e,isInvalid:!1}}catch{return{themeName:null,isInvalid:!0}}},Qn={maxFiles:1e3,maxExtractedBytes:32*1024*1024},$n=class extends Error{reason;constructor(e,t){super(t),this.name=`ThemeArchiveExtractionError`,this.reason=e}},er=new Set([`css`,`cjs`,`hbs`,`handlebars`,`htm`,`html`,`js`,`json`,`less`,`md`,`markdown`,`mjs`,`sass`,`scss`,`svg`,`txt`,`xml`,`yaml`,`yml`]),tr=new Set([`.editorconfig`,`.eslintignore`,`.eslintrc`,`.gitattributes`,`.gitignore`,`.npmignore`,`.prettierignore`,`.prettierrc`,`CODEOWNERS`,`LICENSE`,`LICENCE`,`NOTICE`,`Procfile`]),nr=e=>{if(er.has(rr(e)))return!0;let t=e.split(`/`).at(-1)||e;return tr.has(t)},rr=e=>{let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t+1).toLowerCase()},ir=e=>{let t=e.trim().replace(/^\/+/,``).replace(/\/+/g,`/`);if(!t)return null;let n=t.split(`/`).filter(Boolean);return n.length===0||n.some(e=>e===`.`||e===`..`)?null:n.join(`/`)},ar=e=>[`casper`,`source`].includes(e.toLowerCase()),or=e=>{if(e.length===0)return``;let t=e[0].indexOf(`/`);if(t<=0)return``;let n=e[0].slice(0,t+1);return e.every(e=>e.startsWith(n))?n:``},sr=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{...t,date:new Date(t.date),binary:t.binary?new Uint8Array(t.binary):null}])),cr=`Failed to open the theme archive. Download the theme again and retry.`,lr=e=>{let t=e/(1024*1024);return Number.isInteger(t)?`${t} MB`:`${t.toFixed(1)} MB`},ur=e=>{let t=[];return e.forEach((e,n)=>{n.dir||t.push([e,n])}),t},dr=e=>{if(e.length>Qn.maxFiles)throw new $n(`too_many_files`,`This theme archive contains too many files for the browser editor (${e.length}/${Qn.maxFiles}).`)},fr=async e=>{try{return await Xn.default.loadAsync(e)}catch{throw new $n(`invalid_archive`,cr)}},pr=async e=>{try{return await e.async(`uint8array`)}catch{throw new $n(`invalid_archive`,cr)}},mr=async e=>{try{return await e.async(`string`)}catch{throw new $n(`invalid_archive`,cr)}},hr=e=>{let t=ir(e);if(!t||t!==e)throw new $n(`invalid_archive`,cr);return t},gr=(e,t)=>{let n=e+t;if(n>Qn.maxExtractedBytes)throw new $n(`too_large`,`This theme archive is too large to open in the browser editor. Extracted files must stay under ${lr(Qn.maxExtractedBytes)}.`);return n},_r=async e=>{let t=ur(await fr(e));dr(t);let n=or(t.map(([e])=>e)),r={},i=new TextEncoder,a=0;for(let[e,o]of t){let t=n?e.slice(n.length):e;if(!t)continue;let s=hr(t);if(nr(s))try{let e=await mr(o);a=gr(a,i.encode(e).byteLength),r[s]={path:s,editable:!0,content:e,binary:null,date:o.date||new Date,unixPermissions:typeof o.unixPermissions==`number`?o.unixPermissions:null,dosPermissions:typeof o.dosPermissions==`number`?o.dosPermissions:null};continue}catch{}let c=await pr(o);a=gr(a,c.byteLength),r[s]={path:s,editable:!1,content:null,binary:c,date:o.date||new Date,unixPermissions:typeof o.unixPermissions==`number`?o.unixPermissions:null,dosPermissions:typeof o.dosPermissions==`number`?o.dosPermissions:null}}return{files:r,rootPrefix:n}},vr=async({files:e,rootPrefix:t})=>{let n=new Xn.default;for(let[r,i]of Object.entries(e)){let e=`${t}${r}`,a={date:i.date,createFolders:!0,unixPermissions:i.unixPermissions??void 0,dosPermissions:i.dosPermissions??void 0};i.editable?n.file(e,i.content??``,a):n.file(e,i.binary,{...a,binary:!0})}return n.generateAsync({type:`blob`,mimeType:`application/zip`,compression:`DEFLATE`,compressionOptions:{level:6}})},yr=({baseFiles:e,currentFiles:t})=>{let n=new Set([...Object.keys(e),...Object.keys(t)]),r=[];for(let i of Array.from(n).sort()){let n=e[i],a=t[i];if(!n&&a){r.push({path:i,editable:a.editable,status:`added`});continue}if(n&&!a){r.push({path:i,editable:n.editable,status:`deleted`});continue}!n||!a||n.editable&&a.editable&&n.content!==a.content&&r.push({path:i,editable:!0,status:`modified`})}return r},br=({files:e,oldPrefix:t,newPrefix:n})=>{let r={};for(let[i,a]of Object.entries(e)){if(!i.startsWith(t)){r[i]=a;continue}let e=`${n}${i.slice(t.length)}`;r[e]={...a,path:e}}return r},xr=e=>{switch(rr(e)){case`css`:case`scss`:case`sass`:case`less`:return h(()=>import(`./dist-CZgIBXQN.js`).then(e=>e.r).then(e=>e.css()),__vite__mapDeps([0,1,2,3]),import.meta.url);case`js`:case`cjs`:case`mjs`:return h(()=>import(`./dist-4m6pHdc0.js`).then(e=>e.t).then(e=>e.javascript()),__vite__mapDeps([4,1,2,3]),import.meta.url);case`json`:return h(()=>import(`./dist-B6bJuxL3.js`).then(e=>e.json()),__vite__mapDeps([5,2,3]),import.meta.url);case`md`:case`markdown`:return h(()=>import(`./dist-CiHx7vA5.js`).then(e=>e.markdown()),__vite__mapDeps([6,2,7,3,0,1,4]),import.meta.url);case`yaml`:case`yml`:return h(()=>import(`./dist-zwwGt8Yf.js`).then(e=>e.yaml()),__vite__mapDeps([8,2,3]),import.meta.url);case`hbs`:case`handlebars`:case`html`:case`htm`:case`svg`:case`xml`:return h(()=>import(`./dist-ECAUrdGc.js`).then(e=>e.html()),__vite__mapDeps([7,2,3,0,1,4]),import.meta.url);default:return h(()=>import(`./dist-ECAUrdGc.js`).then(e=>e.html()),__vite__mapDeps([7,2,3,0,1,4]),import.meta.url)}},Sr=e=>{let t=rr(e);if(!t)return`text`;switch(t){case`hbs`:return`handlebars`;case`htm`:return`html`;case`yml`:return`yaml`;default:return t}},Cr=e=>{if(e[`package.json`]?.editable)return{type:`file`,path:`package.json`};let t=Object.keys(e).sort().find(t=>e[t].editable);if(t)return{type:`file`,path:t};let n=Object.keys(e).sort()[0];return n?{type:`file`,path:n}:null},wr=e=>{let t=e.split(`/`),n=[``];for(let e=0;e<t.length-1;e+=1)n.push(`${t.slice(0,e+1).join(`/`)}/`);return n},Tr=[`theme`,`design`],Er=e=>Tr.some(t=>e===t||e.startsWith(`${t}/`)),Dr=()=>{let e=window.location.hash.substring(1),t=`${window.location.protocol}//${window.location.hostname}`,n;try{n=new URL(e||`/`,t)}catch{return null}let r=n.searchParams.get(`from`);return r===null?null:r===``||Er(r)?r:null},Or=(e,t)=>{let n=`theme/edit/${encodeURIComponent(e)}`;return t===null?n:`${n}?from=${encodeURIComponent(t)}`},kr=(e,t)=>!e.editable&&nr(t),Ar=/^[a-z0-9][\w-]{0,63}$/,jr=[`COMPRESSED_TOO_LARGE`,`ENTRY_TOO_LARGE`,`TOTAL_TOO_LARGE`],Mr={COMPRESSED_TOO_LARGE:`Theme too large to upload`,ENTRY_TOO_LARGE:`File too large`,TOTAL_TOO_LARGE:`Theme contents too large`},Nr=J({errors:Oe(J({message:Y().optional(),code:ke(jr),errorDetails:J({entryName:Y().optional(),limitBytes:Ae().positive().finite().optional()}).optional()})).min(1)}),Pr=e=>{if(!e||e<=0)return`the allowed size`;let t=e/(1024*1024);return t>=1?`${t.toFixed(1)} MB`:`${Math.round(e/1024)} KB`},Fr=e=>{if(!(e instanceof d))return null;let t=e.data;if(typeof t==`string`)try{t=JSON.parse(t)}catch{return null}let n=Nr.safeParse(t);return n.success?n.data.errors[0]??null:null},Ir=e=>{let{entryName:t,limitBytes:n}=e.errorDetails??{},r=Pr(n);switch(e.code){case`COMPRESSED_TOO_LARGE`:return`The theme archive is too large to upload (max ${r}).`;case`ENTRY_TOO_LARGE`:return t?`The file "${t}" is too large (max ${r} per file).`:`One of the files is too large (max ${r} per file).`;case`TOTAL_TOO_LARGE`:return`The theme contents exceed the maximum allowed size of ${r}.`;default:return e.message||`Theme upload failed.`}},Lr=e=>`inline-flex h-5 w-5 items-center justify-center rounded-sm text-[#c8ccd3] transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[#4a9eff] ${e?`opacity-100`:`opacity-60`}`,Rr=`flex h-full items-center justify-center p-8 text-center text-[13px] text-[#6a6f78]`,zr=vt.theme({"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:`#355070`},".cm-content ::selection":{color:`#ffffff`}},{dark:!0}),Br=({themeName:e})=>{let{updateRoute:t}=U(),n=c(),r=u(),{data:i}=Re(),{mutateAsync:s}=ze(),[d,p]=(0,Z.useState)(e),[m,h]=(0,Z.useState)({}),[g,_]=(0,Z.useState)({}),[y,b]=(0,Z.useState)(``),[x,S]=(0,Z.useState)(null),[C,w]=(0,Z.useState)(new Set([``])),[T,E]=(0,Z.useState)(!0),[D,O]=(0,Z.useState)(!1),[k,ee]=(0,Z.useState)(null),[A,ne]=(0,Z.useState)(!1),[j,ie]=(0,Z.useState)(null),M=(0,Z.useRef)(null),[N,ae]=(0,Z.useState)(null),[P,le]=(0,Z.useState)(null),[F,I]=(0,Z.useState)([]);(0,Z.useEffect)(()=>{let t=!0,r=()=>{p(e),h({}),_({}),b(``),S(null),w(new Set([``]))};return(async()=>{E(!0),ee(null),r();try{let r=await _r(await n(o(`/themes/${encodeURIComponent(e)}/download/`),{responseType:`arraybuffer`})),i=sr(r.files),a=Cr(i);if(!t)return;p(e),h(sr(r.files)),_(i),b(r.rootPrefix),S(a),w(new Set(a?.type===`file`?wr(a.path):[``]))}catch(n){if(!t)return;n instanceof l&&n.response?ee(`Failed to load theme "${e}" (${n.response.status})`):ee(n instanceof Error?n.message:`Failed to load theme`)}finally{t&&E(!1)}})(),()=>{t=!1}},[e,n]),(0,Z.useEffect)(()=>{let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[]);let L=(0,Z.useMemo)(()=>yr({baseFiles:m,currentFiles:g}),[m,g]),ue=(0,Z.useMemo)(()=>new Map(L.map(e=>[e.path,e.status])),[L]),R=x?.type===`file`?g[x.path]:null;(0,Z.useEffect)(()=>{let e=!0;return R?.editable?(xr(R.path).then(t=>{e&&I([se({top:!0}),oe,t,...A?[vt.lineWrapping]:[],zr])}).catch(()=>{e&&I([se({top:!0}),oe,...A?[vt.lineWrapping]:[],zr])}),()=>{e=!1}):(I([]),()=>{e=!1})},[A,R]);let z=(0,Z.useCallback)(()=>{let e=M.current;e&&(M.current=null,e.type===`confirmation`?e.resolve(!1):e.resolve(null))},[]),B=e=>(z(),new Promise(t=>{let n={type:`confirmation`,props:e,resolve:t};M.current=n,ie(n)})),V=e=>(z(),new Promise(t=>{let n={type:`input`,props:e,resolve:t};M.current=n,ie(n)}));(0,Z.useEffect)(()=>()=>z(),[z]);let H=async()=>{L.length>0&&!await B({title:`Discard changes?`,prompt:`You have unsaved theme changes. Close the editor and discard them?`,okLabel:`Discard changes`,okVariant:`destructive`})||t(Dr()??`design/change-theme`)},de=(0,Z.useRef)(async()=>{}),fe=!!(j||N||P);(0,Z.useEffect)(()=>{let e=e=>{if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`s`){if(e.preventDefault(),fe){e.stopPropagation(),e.stopImmediatePropagation();return}de.current();return}e.key===`Escape`&&(fe||(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation()))};return window.addEventListener(`keydown`,e,!0),()=>{window.removeEventListener(`keydown`,e,!0)}},[fe]);let pe=e=>{w(t=>{let n=new Set(t);for(let t of wr(e))n.add(t);return n})},W=(e,t)=>{if(_(e),t){S(t),t.type===`file`&&pe(t.path);return}x?.type===`file`&&e[x.path]||S(Cr(e))},me=async()=>{let e=await V({title:`Create file`,fieldTitle:`File path`,initialValue:`partials/new-file.hbs`,okLabel:`Create file`,prompt:`Add a new editable file to this theme.`}),t=e?ir(e):null;if(!t)return;if(!nr(t)){f.error(`Only text files can be created here`,{description:`Use a text-based theme file extension such as .hbs, .css, .js, or .json.`});return}if(g[t]){f.error(`File already exists`);return}let n={...g,[t]:{path:t,editable:!0,content:``,binary:null,date:new Date,unixPermissions:null,dosPermissions:null}};W(n,{type:`file`,path:t})},he=async()=>{if(!x)return;let e=x.type===`dir`?x.path.replace(/\/$/,``):x.path,t=x.type===`dir`?`Rename folder to`:`Rename file to`,n=await V({title:x.type===`dir`?`Rename folder`:`Rename file`,fieldTitle:`Path`,initialValue:e,okLabel:`Rename`,prompt:t}),r=n?ir(n):null;if(!r||r===e)return;if(x.type===`file`){let e=g[x.path];if(!nr(r)&&e.editable){f.error(`Text files must keep a text file extension`);return}if(kr(e,r)){f.error(`Binary files cannot be renamed to a text file`,{description:`Rename this file with a non-text extension to keep its contents intact.`});return}if(g[r]){f.error(`A file with that name already exists`);return}let t={...g},n=t[x.path];delete t[x.path],t[r]={...n,path:r,editable:nr(r)},W(t,{type:`file`,path:r});return}let i=`${r}/`;if(i.startsWith(x.path)){f.error(`A folder cannot be renamed inside itself`);return}if(Object.keys(g).find(e=>e.startsWith(i))){f.error(`A folder with that path already exists`);return}let a=br({files:g,oldPrefix:x.path,newPrefix:i});W(a,{type:`dir`,path:i}),w(e=>{let t=new Set;for(let n of e){if(!n.startsWith(x.path)){t.add(n);continue}t.add(`${i}${n.slice(x.path.length)}`)}return t})},ge=async()=>{if(!x)return;if(x.type===`file`){if(!await B({title:`Delete file`,prompt:(0,Q.jsxs)(Q.Fragment,{children:[`Delete `,(0,Q.jsx)(`strong`,{children:x.path}),` from this theme?`]}),okLabel:`Delete`,okVariant:`destructive`}))return;let e={...g};delete e[x.path],W(e);return}let e=Object.keys(g).filter(e=>e.startsWith(x.path));if(!e.length||!await B({title:`Delete folder`,prompt:(0,Q.jsxs)(Q.Fragment,{children:[`Delete `,v(e.length),` file`,e.length===1?``:`s`,` `,`from `,(0,Q.jsx)(`strong`,{children:x.path}),`?`]}),okLabel:`Delete`,okVariant:`destructive`}))return;let t={...g};for(let n of e)delete t[n];W(t)},_e=e=>{let t=m[e],n=g[e],r={...g};!t&&n?delete r[e]:t&&(r[e]={...t,binary:t.binary?new Uint8Array(t.binary):null}),W(r)},ve=async()=>{let e=(await V({title:`Save as new theme`,fieldTitle:`Theme name`,initialValue:`${d}-edited`,okLabel:`Continue`,prompt:`Default themes cannot be overwritten. Save your edits as a new theme instead.`}))?.trim().toLowerCase();return e?Ar.test(e)?ar(e)?(f.error(`Built-in themes cannot be overwritten`),null):e:(f.error(`Invalid theme name`,{description:`Use 1-64 characters, starting with a letter or number. Allowed: letters, numbers, dashes, and underscores.`}),null):null},ye=async()=>{if(D)return;if(L.length===0){f.info(`No changes to save`);return}let e=d,n=ar(e)?await ve():e;if(!n)return;let o=n!==e,c=i?.themes.some(e=>e.name===n)||!1,l=o?`Save your edits as "${n}"?`:`Upload ${v(L.length)} changed file${L.length===1?``:`s`} and replace "${e}"?`;if(await B({title:o?`Save theme as new copy`:`Update theme`,prompt:l,okLabel:o?`Save theme`:`Replace theme`})&&!(o&&c&&!await B({title:`Overwrite theme`,prompt:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`strong`,{children:n}),` already exists. Do you want to overwrite it?`]}),okLabel:`Overwrite`,okVariant:`destructive`}))){O(!0);try{let r=await vr({files:g,rootPrefix:y}),i=(await s({file:new File([r],`${n}.zip`,{type:`application/zip`}),copySettingsFrom:o?e:void 0})).themes[0],a=Dr();h(sr(g)),o&&(p(n),b(y?`${n}/`:``),t(Or(n,a)));let c=Nt(i);o||c.length?le({title:o?`Theme saved`:`Theme updated`,action:`saved`,installedTheme:i}):f.success(`Theme saved`,{description:(0,Q.jsxs)(`div`,{children:[(0,Q.jsx)(`span`,{className:`capitalize`,children:i.name}),` has been updated.`]})})}catch(e){if(e instanceof a&&e.response?.status===422){let t=Mt(e.data?.errors);if(t){ae(t);return}}let t=Fr(e);if(t){f.error(Mr[t.code],{description:Ir(t)});return}r(e)}finally{O(!1)}}};(0,Z.useEffect)(()=>{de.current=ye});let be=e=>{S({type:`file`,path:e}),pe(e)},xe=R?ue.get(R.path):null;return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{"aria-label":`Edit theme ${e}`,"aria-modal":`true`,className:`dark fixed inset-0 z-[140] bg-[rgba(10,11,13,0.72)] text-[#e6e7ea] backdrop-blur-[4px]`,"data-testid":`theme-code-editor-modal`,role:`dialog`,onClick:e=>{e.target===e.currentTarget&&H()},children:(0,Q.jsxs)(`div`,{className:`relative flex size-full flex-col overflow-hidden bg-[#15171a]`,children:[(0,Q.jsx)(Gn,{changes:L,currentThemeName:d,isSaving:D,onClose:()=>void H(),onSave:()=>void ye()}),k&&(0,Q.jsx)(`div`,{className:`border-b border-[#512828] bg-[#3a1d1d] px-4 py-2 text-[12px] text-[#ffbdbd]`,children:k}),(0,Q.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,Q.jsx)(Yn,{changesMap:ue,currentFiles:g,expandedDirectories:C,isLoading:T,selectedNode:x,setExpandedDirectories:w,setSelectedNode:S,onCreateFile:()=>void me(),onDeleteSelected:()=>void ge(),onOpenFile:be,onRenameSelected:()=>void he()}),(0,Q.jsxs)(`section`,{className:`flex min-w-0 flex-1 flex-col bg-[#16181c]`,children:[(0,Q.jsx)(`div`,{className:`flex items-center gap-2 border-b border-[#23262c] bg-[#17191d] px-4 py-2 text-[12px] text-[#8a8f98]`,children:R?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`span`,{className:`min-w-0 truncate font-medium text-[#e6e7ea]`,children:R.path}),(0,Q.jsx)(`span`,{className:`rounded bg-[#2a2d33] px-2 py-0.5 text-[10px] tracking-[0.04em] text-[#c8ccd3] uppercase`,children:Sr(R.path)}),xe&&(0,Q.jsxs)(`button`,{className:`inline-flex items-center gap-1 rounded px-2 py-0.5 text-[10px] tracking-[0.04em] uppercase ${xe===`deleted`?`bg-[#4a2222] text-[#ffbdbd]`:xe===`added`?`bg-[#17342a] text-[#a5e8c8]`:`bg-[#3b2a16] text-[#f5a623]`}`,type:`button`,onClick:()=>_e(R.path),children:[(0,Q.jsx)(te,{size:11}),`Revert`]}),(0,Q.jsx)(`div`,{className:`grow`}),R.editable&&(0,Q.jsx)(`button`,{"aria-label":A?`Disable text wrap`:`Enable text wrap`,"aria-pressed":A,className:Lr(A),title:A?`Disable text wrap`:`Enable text wrap`,type:`button`,onClick:()=>ne(e=>!e),children:(0,Q.jsx)(re,{className:`shrink-0`,size:14,strokeWidth:2})})]}):(0,Q.jsx)(`span`,{children:`No file selected`})}),(0,Q.jsxs)(`div`,{className:`min-h-0 flex-1`,children:[!x&&!T&&(0,Q.jsx)(`div`,{className:Rr,children:`Select a file from the tree to start editing.`}),x?.type===`dir`&&(0,Q.jsx)(`div`,{className:Rr,children:`Folder selected. Choose a file to edit, or rename or delete the folder from the file pane.`}),R&&!R.editable&&(0,Q.jsx)(`div`,{className:Rr,children:`This file cannot be edited in the browser.`}),R?.editable&&(0,Q.jsx)(ce,{basicSetup:{highlightActiveLine:!1,highlightActiveLineGutter:!1},className:`h-full [&_.cm-button]:h-8 [&_.cm-button]:rounded-md [&_.cm-button]:border [&_.cm-button]:border-[#2f333b] [&_.cm-button]:bg-[#1f2228] [&_.cm-button]:bg-none [&_.cm-button]:px-3 [&_.cm-button]:text-[13px] [&_.cm-button]:text-[#c8ccd3] [&_.cm-button:hover]:bg-[#2a2d33] [&_.cm-content]:min-h-full [&_.cm-content]:py-3 [&_.cm-content_*::selection]:bg-[#355070] [&_.cm-cursor]:border-l-[#e6e7ea] [&_.cm-editor]:h-full [&_.cm-editor]:rounded-none [&_.cm-editor]:border-0 [&_.cm-editor]:bg-[#16181c] [&_.cm-gutters]:border-r-[#23262c] [&_.cm-gutters]:bg-[#17191d] [&_.cm-line::selection]:bg-[#355070] [&_.cm-panel]:bg-[#17191d] [&_.cm-panel]:shadow-none [&_.cm-panel.cm-search]:gap-2 [&_.cm-panel.cm-search]:px-3 [&_.cm-panel.cm-search]:py-2 [&_.cm-panel.cm-search]:text-[13px] [&_.cm-panels]:border-b [&_.cm-panels]:border-[#23262c] [&_.cm-panels]:bg-[#17191d] [&_.cm-panels]:text-[#c8ccd3] [&_.cm-scroller]:min-h-full [&_.cm-scroller]:overflow-auto [&_.cm-scroller]:bg-[#16181c] [&_.cm-search]:flex [&_.cm-search]:flex-wrap [&_.cm-search]:items-center [&_.cm-search]:gap-2 [&_.cm-search_label]:inline-flex [&_.cm-search_label]:items-center [&_.cm-search_label]:gap-1.5 [&_.cm-search_label]:text-[#a5abb4] [&_.cm-search_label_input]:size-4 [&_.cm-search_label_input]:accent-[#14b886] [&_.cm-searchMatch]:bg-[#243043] [&_.cm-searchMatch-selected]:bg-[#3b2a16] [&_.cm-searchMatch-selected]:outline-none [&_.cm-selectionBackground]:!bg-[#355070] [&_.cm-selectionLayer_.cm-selectionBackground]:!bg-[#355070] [&_.cm-textfield]:h-8 [&_.cm-textfield]:min-w-[220px] [&_.cm-textfield]:rounded-md [&_.cm-textfield]:border [&_.cm-textfield]:border-[#2f333b] [&_.cm-textfield]:bg-[#16181c] [&_.cm-textfield]:px-2.5 [&_.cm-textfield]:text-[#e6e7ea] [&_.cm-textfield]:outline-none [&_.cm-textfield]:placeholder:text-[#6a6f78]`,extensions:F,height:`full`,theme:oe,value:R.content||``,autoFocus:!0,onChange:e=>{_(t=>({...t,[R.path]:{...t[R.path],content:e}}))}},`${R.path}:${F.length}`)]})]})]})]})}),j?.type===`confirmation`&&(0,Q.jsx)(Bn,{...j.props,onResolve:e=>{M.current===j&&(M.current=null,ie(null),j.resolve(e))}}),j?.type===`input`&&(0,Q.jsx)(Vn,{...j.props,onResolve:e=>{M.current===j&&(M.current=null,ie(null),j.resolve(e))}}),N&&(0,Q.jsx)(nn,{action:`saved`,cancelLabel:`Close`,fatalErrors:N,themeName:d,title:`Theme not saved`,onClose:()=>ae(null)}),P&&(0,Q.jsx)(hn,{...P,onClose:()=>le(null)})]})},Vr=()=>{let{route:e,updateRoute:t}=U(),n=gt(),r=e,[i,a]=(0,Z.useState)(null),[o,s]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)(!1),[u,d]=(0,Z.useState)(null),[f,p]=(0,Z.useState)(!1),{checkThemeLimitError:m,isThemeLimitCheckReady:h,noThemeChangesAllowed:g,isThemeLimited:_}=Et(),[v,y]=(0,Z.useState)(null),[b,x]=(0,Z.useState)(!1),{themeName:S,isInvalid:C}=Zn(r),{showLimit:w}=mt(),T=(0,Z.useCallback)(e=>{w({prompt:e,onOk:()=>t({route:n,isExternal:!0})})},[w,t,n]);if((0,Z.useEffect)(()=>{r===`design/change-theme`&&h?(async()=>{if(!g){s(!1),a(null);return}s(!0);let e=await m();a(e),s(!1),e&&(T(e),t(`theme`))})():(a(null),s(!1))},[m,r,h,g,T,t]),(0,Z.useEffect)(()=>{r!==`theme/install`&&(x(!1),y(null),l(!1))},[r]),(0,Z.useEffect)(()=>{C&&t(`theme`)},[C,t]),(0,Z.useEffect)(()=>{let e=!1;return(async()=>{if(!S){d(null),p(!1);return}if(!h){p(!0);return}if(!_){d(null),p(!1);return}p(!0);let n=await m(`.`);e||(d(n),p(!1),n&&(T(n),t(`theme`)))})(),()=>{e=!0}},[m,S,h,_,T,t]),(0,Z.useEffect)(()=>{let e=()=>{let e=window.location.href.split(`#`)[1]?.split(`?`)[1];return e?new URLSearchParams(e).get(`ref`):null},n=e=>{y(!1),T(e),t({route:`theme`,replace:!0})};(async()=>{if(r!==`theme/install`){l(!1);return}if(x(!0),!h){l(!0);return}if(!_){y(!0),l(!1);return}l(!0);let t=e();if(!t){y(!1),l(!1);return}let i=t.split(`/`)[1]?.toLowerCase(),a=await m(i);if(r!==`theme/install`){l(!1);return}if(a){y(!1),l(!1),n(a);return}y(!0),l(!1)})()},[m,r,h,g,_,T,t]),r===`design/edit`)return(0,Q.jsx)(zn,{});if(r===`design/change-theme`)return o||i?null:(0,Q.jsx)(Cn,{});if(r===`theme/install`){if(!b||!h||c||v===null||!v)return null;let e=window.location.href.split(`#`)[1]?.split(`?`)[1],t=null,n=null;if(e){let r=new URLSearchParams(e);t=r.get(`ref`),n=r.get(`source`)}return(0,Q.jsx)(Cn,{source:n,themeRef:t})}else if(r.startsWith(`theme/edit/`))return C||!S||f||u?null:(0,Q.jsx)(Br,{themeName:S});else return null};export{Vr as default};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{l as r}from"./dist-B3keLvjj.js";import{t as i}from"./stack-B2eszIiq.js";import{t as a}from"./button-eNMKQWXr.js";import{ar as o,er as s,ir as c,nr as l,or as u,rr as d,sr as f,tr as p}from"./index-6MkPdCtr.js";var m=e(t(),1),h=n();function g(){let e=m.useRef(null),[t,n]=m.useState(!1),r=m.useCallback((t,r)=>{if(!t){r();return}e.current=r,n(!0)},[]),i=m.useCallback(t=>{n(t),t||(e.current=null)},[]);return{confirm:r,dialogProps:{open:t,onConfirm:m.useCallback(()=>{let t=e.current;e.current=null,n(!1),t?.()},[]),onOpenChange:i}}}function _({className:e,description:t,open:n,testId:m=`confirmation-modal`,title:g=`Are you sure you want to leave this page?`,onConfirm:_,onOpenChange:v}){return(0,h.jsx)(s,{open:n,onOpenChange:v,children:(0,h.jsxs)(d,{className:r(`z-[1100]`,e),"data-testid":m,overlayClassName:`z-[1100]`,onEscapeKeyDown:e=>e.stopPropagation(),children:[(0,h.jsxs)(u,{children:[(0,h.jsx)(f,{children:g}),(0,h.jsx)(c,{asChild:!0,children:(0,h.jsx)(i,{gap:`sm`,children:t||(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`p`,{children:`Hey there! It looks like you didn't save the changes you made.`}),(0,h.jsx)(`p`,{children:`Save before you go!`})]})})})]}),(0,h.jsxs)(o,{children:[(0,h.jsx)(l,{asChild:!0,children:(0,h.jsx)(a,{variant:`outline`,children:`Stay`})}),(0,h.jsx)(p,{className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,asChild:!0,children:(0,h.jsx)(a,{variant:`destructive`,onClick:_,children:`Leave`})})]})]})})}export{g as n,_ as t};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{l as r}from"./dist-B3keLvjj.js";import{t as i}from"./stack-B2eszIiq.js";import{t as a}from"./button-Dvcv1QSR.js";import{ar as o,cr as s,dr as c,ir as l,lr as u,or as d,sr as f,ur as p}from"./index-CgMCwsxN.js";var m=e(t(),1),h=n();function g(){let e=m.useRef(null),[t,n]=m.useState(!1),r=m.useCallback((t,r)=>{if(!t){r();return}e.current=r,n(!0)},[]),i=m.useCallback(t=>{n(t),t||(e.current=null)},[]);return{confirm:r,dialogProps:{open:t,onConfirm:m.useCallback(()=>{let t=e.current;e.current=null,n(!1),t?.()},[]),onOpenChange:i}}}function _({className:e,description:t,open:n,testId:m=`confirmation-modal`,title:g=`Are you sure you want to leave this page?`,onConfirm:_,onOpenChange:v}){return(0,h.jsx)(l,{open:n,onOpenChange:v,children:(0,h.jsxs)(f,{className:r(`z-[1100]`,e),"data-testid":m,overlayClassName:`z-[1100]`,onEscapeKeyDown:e=>e.stopPropagation(),children:[(0,h.jsxs)(p,{children:[(0,h.jsx)(c,{children:g}),(0,h.jsx)(s,{asChild:!0,children:(0,h.jsx)(i,{gap:`sm`,children:t||(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`p`,{children:`Hey there! It looks like you didn't save the changes you made.`}),(0,h.jsx)(`p`,{children:`Save before you go!`})]})})})]}),(0,h.jsxs)(u,{children:[(0,h.jsx)(d,{asChild:!0,children:(0,h.jsx)(a,{variant:`outline`,children:`Stay`})}),(0,h.jsx)(o,{className:`bg-destructive text-destructive-foreground hover:bg-destructive/90`,asChild:!0,children:(0,h.jsx)(a,{variant:`destructive`,onClick:_,children:`Leave`})})]})]})})}export{g as n,_ as t};
@@ -1 +1 @@
1
- import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{a as n}from"./router-provider-B0gZyiGJ.js";import{jr as r,t as i}from"./button-eNMKQWXr.js";import{t as a}from"./empty-indicator-D9QdpuNX.js";e();var o=t(),s=({className:e})=>{let t=n();return(0,o.jsx)(a,{actions:(0,o.jsx)(i,{variant:`outline`,onClick:()=>t(`/settings/analytics`),children:`Open settings`}),className:e,description:`Enable member source tracking in settings to see which content drives member growth.`,title:`Member sources have been disabled`,children:(0,o.jsx)(r,{})})};export{s as t};
1
+ import"./rolldown-runtime-DAXXjFlN.js";import{t as e}from"./react-Bb3IsNbi.js";import{t}from"./jsx-runtime-DX3WBWVO.js";import{a as n}from"./router-provider-BSvTXgZY.js";import{Nr as r,t as i}from"./button-Dvcv1QSR.js";import{t as a}from"./empty-indicator-D9QdpuNX.js";e();var o=t(),s=({className:e})=>{let t=n();return(0,o.jsx)(a,{actions:(0,o.jsx)(i,{variant:`outline`,onClick:()=>t(`/settings/analytics`),children:`Open settings`}),className:e,description:`Enable member source tracking in settings to see which content drives member growth.`,title:`Member sources have been disabled`,children:(0,o.jsx)(r,{})})};export{s as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./inline-BWSs_VzR.js";import{n as ee}from"./heading-Dh5SFVjL.js";import{a as te,i as ne,o as re,r as ie}from"./shade-app-CcS3f8MZ-vwURazk8.js";import{In as ae,d as oe,t as i}from"./button-eNMKQWXr.js";import{t as a}from"./skeleton-Ce9GgUpf.js";import{i as o,o as s,t as c}from"./field-Dihp5p18.js";import{$n as l,Cn as se,Jt as ce,Qn as u,Xt as le,bn as ue,dt as de,ht as fe,yn as pe}from"./index-6MkPdCtr.js";import"./layout-Bjv2Ll-5.js";import{n as me,t as d}from"./social-web-handle-CvfIKPww.js";var f=e(t(),1),p=n();function m(e){let t=e.trim();if(t===``)return null;try{return new URL(t.includes(`://`)?t:`https://${t}`).host||null}catch{return t.replace(/^[a-z][a-z\d+\-.]*:\/\//i,``).split(/[/?#]/)[0]||null}}function he(e,t){if(e)try{return new URL(e).host}catch{}return t?.split(`@`).at(-1)??``}function ge(e,t){if(!e)return``;try{return new URL(e,t||window.location.origin).toString()}catch{return e}}async function _e(e){if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e);return}catch{}let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.left=`-9999px`,t.style.top=`0`,document.body.appendChild(t),t.select(),document.execCommand(`copy`),document.body.removeChild(t)}var h=()=>{let{data:e,isLoading:t}=le(`index`,`me`),{data:n}=de(),{data:h,isLoading:g,isError:_}=ce(`index`),v=pe(`index`),y=se(`index`),b=ue(e?.handle||`index`),[x,S]=(0,f.useState)(``),[C,w]=(0,f.useState)(``),[T,E]=(0,f.useState)(null),[D,O]=(0,f.useState)(!1),[k,A]=(0,f.useState)(!1),[j,M]=(0,f.useState)(!1),[N,P]=(0,f.useState)(null),[F,I]=(0,f.useState)(null),[L,R]=(0,f.useState)(null),[ve,z]=(0,f.useState)(!1),[ye,B]=(0,f.useState)(!1),V=(0,f.useRef)(null);(0,f.useEffect)(()=>{e?.handle&&(w(d(e.handle).username),E(null))},[e?.handle]),(0,f.useEffect)(()=>()=>{V.current&&window.clearTimeout(V.current)},[]);let H=m(x),U=h?.domain??null,W=he(h?.actorUrl,h?.handle),G=d(e?.handle).username,K=b.isPending,be=v.isPending||y.isPending,q=g||be,J=t||K||!e,Y=!!(D&&C!==G),X=!!(j&&H&&(!U||N===H)),xe=!!(k&&H&&!j),Se=!!(X&&H&&H!==N),Ce=!!(N&&H===N),we=H?`https://${H}/.well-known/webfinger`:``,Te=W?`https://${W}/.well-known/webfinger`:``,Z=d(h?.handle),Q={username:D?C:Z.username,domain:(k||j)&&x?H??x.trim():Z.domain},Ee=`@${Q.username}@${Q.domain}`,De=ge(e?.avatarUrl||n?.site?.icon,n?.site?.url),Oe=e=>{e.preventDefault();let t=m(new FormData(e.currentTarget).get(`domain`)?.toString()??``);t&&(S(t),A(!0),M(!0),I(null),R(null))},ke=async()=>{if(!(!H||!Se)){I(null),R(null);try{await y.mutateAsync(H),P(H)}catch{R(`Redirect could not be validated`)}}},Ae=async()=>{if(N){I(null),R(null);try{await v.mutateAsync(N),S(``),A(!1),M(!1),P(null)}catch{I(`Could not save the custom domain. Try again.`)}}},$=()=>{S(``),A(!1),M(!1),P(null),I(null),R(null)},je=async()=>{if(!e||!D||!Y)return;let t=me(C);if(t){E(t);return}E(null);try{await b.mutateAsync({name:e.name,username:C,bio:e.bio??``,avatarUrl:e.avatarUrl||``,bannerImageUrl:e.bannerImageUrl||``}),O(!1)}catch{E(`Could not save the Social Web username. Try again.`)}},Me=()=>{w(G),E(null),O(!1)},Ne=async()=>{I(null);try{await v.mutateAsync(null),S(``),A(!1),M(!1),P(null)}catch{I(`Could not remove the custom domain. Try again.`)}},Pe=async()=>{!Q.username||!Q.domain||(await _e(Ee),z(!0),B(!0),V.current&&window.clearTimeout(V.current),V.current=window.setTimeout(()=>{z(!1),B(!1)},2e3))};return(0,p.jsx)(fe,{children:(0,p.jsxs)(`div`,{className:`mx-auto max-w-[620px] py-[min(4vh,48px)]`,children:[(0,p.jsx)(r,{gap:`2xl`,justify:`between`,children:(0,p.jsx)(ee,{children:`Your social web handle`})}),(0,p.jsx)(`p`,{className:`mt-3 text-base text-muted-foreground`,children:`Like an email address, your handle is how people can find and interact with you.`}),(0,p.jsx)(`div`,{className:`mt-10`,children:(0,p.jsx)(`div`,{className:`rounded-md border border-border-default bg-sidebar px-4 pt-3 pb-4`,children:(0,p.jsx)(c,{children:g?(0,p.jsx)(a,{className:`mt-2 h-16 w-full`}):_?(0,p.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Could not load your Social Web handle.`}):(0,p.jsxs)(`div`,{className:`mt-3 flex items-start gap-2`,children:[(0,p.jsx)(`div`,{className:`mt-[-5px] flex size-7 shrink-0 items-center justify-center overflow-hidden rounded-full bg-surface-elevated text-muted-foreground ring-1 ring-border-default`,children:t?(0,p.jsx)(a,{className:`size-7 rounded-full`}):De?(0,p.jsx)(`img`,{alt:e?.name||n?.site?.title||``,className:`size-full rounded-full object-cover`,referrerPolicy:`no-referrer`,src:De}):(0,p.jsx)(oe,{className:`size-4`,strokeWidth:1.5})}),(0,p.jsx)(`div`,{className:`-ml-14 min-w-0 overflow-x-auto px-14`,children:(0,p.jsxs)(`div`,{"aria-label":`Social Web handle breakdown`,className:`inline-flex pb-9 font-mono text-xl leading-none font-medium whitespace-nowrap text-foreground select-none`,role:`group`,children:[(0,p.jsx)(`span`,{children:`@`}),(0,p.jsxs)(`div`,{className:`relative`,children:[(0,p.jsx)(`span`,{children:Q.username}),(0,p.jsxs)(`div`,{className:`absolute top-7 left-0 w-full border-t border-border-strong before:absolute before:top-[-5px] before:left-0 before:h-[5px] before:border-l before:border-border-strong after:absolute after:top-[-5px] after:right-0 after:h-[5px] after:border-l after:border-border-strong`,children:[(0,p.jsx)(`span`,{"aria-hidden":`true`,className:`absolute top-0 left-1/2 h-[5px] border-l border-border-strong`}),(0,p.jsx)(`div`,{className:`absolute top-2 right-0 w-max min-w-full text-center font-sans text-[10px] leading-normal font-medium whitespace-nowrap text-muted-foreground uppercase`,children:`Username`})]})]}),(0,p.jsx)(`span`,{className:`ml-px`,children:`@`}),(0,p.jsxs)(`div`,{className:`relative`,children:[(0,p.jsx)(`span`,{children:Q.domain}),(0,p.jsxs)(`div`,{className:`absolute top-7 left-0 w-full border-t border-state-success before:absolute before:top-[-5px] before:left-0 before:h-[5px] before:border-l before:border-state-success after:absolute after:top-[-5px] after:right-0 after:h-[5px] after:border-l after:border-state-success`,children:[(0,p.jsx)(`span`,{"aria-hidden":`true`,className:`absolute top-0 left-1/2 h-[5px] border-l border-state-success`}),(0,p.jsx)(`div`,{className:`absolute top-2 left-0 w-max min-w-full text-center font-sans text-[10px] leading-normal font-medium whitespace-nowrap text-state-success uppercase`,children:`Domain`})]})]}),h?.handle&&(0,p.jsx)(te,{delayDuration:0,children:(0,p.jsxs)(ie,{open:ye,onOpenChange:B,children:[(0,p.jsx)(re,{asChild:!0,children:(0,p.jsx)(i,{"aria-label":`Copy Social Web handle`,className:`mt-[-2px] ml-1.5 size-5 shrink-0 self-start p-0 text-muted-foreground hover:text-foreground [&_svg]:size-3.5!`,type:`button`,variant:`ghost`,onClick:()=>{Pe()},children:(0,p.jsx)(ae,{size:12})})}),(0,p.jsx)(ne,{children:ve?`Copied!`:`Copy`})]})})]})})]})})})}),(0,p.jsx)(`form`,{className:`mt-10`,onSubmit:e=>{e.preventDefault(),je()},children:(0,p.jsxs)(c,{children:[(0,p.jsx)(s,{htmlFor:`social-web-username`,children:`Social web username`}),t?(0,p.jsx)(a,{className:`h-9 w-full`}):(0,p.jsxs)(r,{className:`flex-col items-stretch sm:flex-row sm:items-center`,gap:`md`,children:[(0,p.jsx)(l,{"aria-describedby":T?`social-web-username-error`:void 0,"aria-invalid":T?!0:void 0,autoComplete:`off`,className:`sm:flex-1`,disabled:J||!D,id:`social-web-username`,value:C,"data-1p-ignore":!0,onChange:e=>{w(e.target.value),E(null)}}),D?(0,p.jsxs)(r,{gap:`md`,justify:`end`,children:[(0,p.jsx)(i,{className:`h-9 text-sm sm:w-auto`,disabled:K,type:`button`,variant:`outline`,onClick:Me,children:`Cancel`}),(0,p.jsx)(i,{className:`h-9 text-sm sm:w-auto`,disabled:J||!Y,type:`submit`,children:K?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(u,{color:`light`,size:`sm`}),`Saving...`]}):`Save`})]}):(0,p.jsx)(i,{"aria-label":`Edit Social web username`,className:`h-9 text-sm sm:w-auto`,disabled:J,type:`button`,variant:`outline`,onClick:()=>{w(G),E(null),O(!0)},children:`Edit`})]}),T&&(0,p.jsx)(o,{id:`social-web-username-error`,children:T})]})}),(0,p.jsx)(`div`,{className:`mt-10`,children:U&&!N?(0,p.jsxs)(c,{"data-invalid":F?!0:void 0,children:[(0,p.jsx)(s,{htmlFor:`social-web-active-domain`,children:`Social web domain`}),(0,p.jsxs)(r,{className:`flex-col items-stretch sm:flex-row sm:items-center`,gap:`md`,children:[(0,p.jsx)(l,{"aria-label":`Active social web domain`,autoComplete:`off`,className:`sm:flex-1`,id:`social-web-active-domain`,value:U,"data-1p-ignore":!0,disabled:!0}),(0,p.jsx)(i,{className:`h-9 text-sm sm:w-auto`,disabled:q,variant:`outline`,onClick:Ne,children:v.isPending?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(u,{size:`sm`}),`Removing...`]}):`Remove`})]}),F&&(0,p.jsx)(o,{id:`social-web-domain-error`,children:F})]}):(0,p.jsxs)(`form`,{onSubmit:Oe,children:[(0,p.jsxs)(c,{"data-invalid":F?!0:void 0,children:[(0,p.jsx)(s,{htmlFor:`social-web-domain`,children:`Social web domain`}),(0,p.jsxs)(r,{className:`flex-col items-stretch sm:flex-row sm:items-center`,gap:`md`,children:[(0,p.jsx)(l,{"aria-describedby":F?`social-web-domain-error`:void 0,"aria-invalid":F?!0:void 0,"aria-label":`Social web domain`,autoComplete:`off`,className:`sm:flex-1`,disabled:q||!k||j,id:`social-web-domain`,name:`domain`,placeholder:W,value:k||j?x:W,"data-1p-ignore":!0,onChange:e=>{S(e.target.value),M(!1),P(null),I(null),R(null)}}),!X&&(k?(0,p.jsxs)(r,{gap:`md`,justify:`end`,children:[(0,p.jsx)(i,{className:`h-9 text-sm sm:w-auto`,disabled:q,type:`button`,variant:`outline`,onClick:$,children:`Cancel`}),(0,p.jsx)(i,{className:`h-9 text-sm sm:w-auto`,disabled:q||!xe||_,type:`submit`,children:`Activate`})]}):(0,p.jsx)(i,{"aria-label":`Edit Social web domain`,className:`h-9 text-sm sm:w-auto`,disabled:q||_,type:`button`,variant:`outline`,onClick:()=>{S(``),I(null),R(null),A(!0)},children:`Edit`}))]}),F&&(0,p.jsx)(o,{id:`social-web-domain-error`,children:F})]}),X&&(0,p.jsxs)(`div`,{className:`mt-6 rounded-md border border-border-default bg-surface-elevated p-4`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:`Set up your redirect`}),(0,p.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:`Add a redirect or proxy service to forward social web requests to Ghost.`}),(0,p.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 text-sm`,children:[(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`div`,{className:`text-muted-foreground`,children:`Redirect from`}),(0,p.jsx)(`code`,{className:`mt-1 block overflow-x-auto rounded-sm bg-background px-3 py-2 text-foreground`,children:we})]}),(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`div`,{className:`text-muted-foreground`,children:`Redirect to`}),(0,p.jsx)(`code`,{className:`mt-1 block overflow-x-auto rounded-sm bg-background px-3 py-2 text-foreground`,children:Te})]})]})]}),X&&(0,p.jsxs)(r,{className:`mt-4 flex-col items-stretch sm:flex-row sm:items-center`,gap:`md`,justify:`between`,children:[(0,p.jsx)(`div`,{className:`text-sm text-destructive`,children:L}),(0,p.jsxs)(r,{gap:`md`,justify:`end`,children:[(0,p.jsx)(i,{disabled:q,variant:`outline`,onClick:$,children:`Cancel`}),Ce?(0,p.jsx)(i,{disabled:q,onClick:Ae,children:v.isPending?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(u,{color:`light`,size:`sm`}),`Saving...`]}):`Save`}):(0,p.jsx)(i,{disabled:q||!Se||_,onClick:ke,children:y.isPending?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(u,{color:`light`,size:`sm`}),`Validating...`]}):L?`Retry`:`Validate`})]})]})]})})]})})};export{h as default};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-DX3WBWVO.js";import{t as r}from"./inline-BWSs_VzR.js";import{n as ee}from"./heading-Dh5SFVjL.js";import{a as te,i as ne,o as re,r as ie}from"./shade-app-CcS3f8MZ-vwURazk8.js";import{Rn as ae,d as oe,t as i}from"./button-Dvcv1QSR.js";import{t as a}from"./skeleton-Ce9GgUpf.js";import{i as o,o as s,t as c}from"./field-C93_Mg6j.js";import{Cn as se,Dn as ce,Qt as le,en as ue,mt as de,nr as l,rr as u,vt as fe,wn as pe}from"./index-CgMCwsxN.js";import"./layout-DUTL8SH5.js";import{n as me,t as d}from"./social-web-handle-CvfIKPww.js";var f=e(t(),1),p=n();function m(e){let t=e.trim();if(t===``)return null;try{return new URL(t.includes(`://`)?t:`https://${t}`).host||null}catch{return t.replace(/^[a-z][a-z\d+\-.]*:\/\//i,``).split(/[/?#]/)[0]||null}}function he(e,t){if(e)try{return new URL(e).host}catch{}return t?.split(`@`).at(-1)??``}function ge(e,t){if(!e)return``;try{return new URL(e,t||window.location.origin).toString()}catch{return e}}async function _e(e){if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e);return}catch{}let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.left=`-9999px`,t.style.top=`0`,document.body.appendChild(t),t.select(),document.execCommand(`copy`),document.body.removeChild(t)}var h=()=>{let{data:e,isLoading:t}=ue(`index`,`me`),{data:n}=de(),{data:h,isLoading:g,isError:_}=le(`index`),v=se(`index`),y=ce(`index`),b=pe(e?.handle||`index`),[x,S]=(0,f.useState)(``),[C,w]=(0,f.useState)(``),[T,E]=(0,f.useState)(null),[D,O]=(0,f.useState)(!1),[k,A]=(0,f.useState)(!1),[j,M]=(0,f.useState)(!1),[N,P]=(0,f.useState)(null),[F,I]=(0,f.useState)(null),[L,R]=(0,f.useState)(null),[ve,z]=(0,f.useState)(!1),[ye,B]=(0,f.useState)(!1),V=(0,f.useRef)(null);(0,f.useEffect)(()=>{e?.handle&&(w(d(e.handle).username),E(null))},[e?.handle]),(0,f.useEffect)(()=>()=>{V.current&&window.clearTimeout(V.current)},[]);let H=m(x),U=h?.domain??null,W=he(h?.actorUrl,h?.handle),G=d(e?.handle).username,K=b.isPending,be=v.isPending||y.isPending,q=g||be,J=t||K||!e,Y=!!(D&&C!==G),X=!!(j&&H&&(!U||N===H)),xe=!!(k&&H&&!j),Se=!!(X&&H&&H!==N),Ce=!!(N&&H===N),we=H?`https://${H}/.well-known/webfinger`:``,Te=W?`https://${W}/.well-known/webfinger`:``,Z=d(h?.handle),Q={username:D?C:Z.username,domain:(k||j)&&x?H??x.trim():Z.domain},Ee=`@${Q.username}@${Q.domain}`,De=ge(e?.avatarUrl||n?.site?.icon,n?.site?.url),Oe=e=>{e.preventDefault();let t=m(new FormData(e.currentTarget).get(`domain`)?.toString()??``);t&&(S(t),A(!0),M(!0),I(null),R(null))},ke=async()=>{if(!(!H||!Se)){I(null),R(null);try{await y.mutateAsync(H),P(H)}catch{R(`Redirect could not be validated`)}}},Ae=async()=>{if(N){I(null),R(null);try{await v.mutateAsync(N),S(``),A(!1),M(!1),P(null)}catch{I(`Could not save the custom domain. Try again.`)}}},$=()=>{S(``),A(!1),M(!1),P(null),I(null),R(null)},je=async()=>{if(!e||!D||!Y)return;let t=me(C);if(t){E(t);return}E(null);try{await b.mutateAsync({name:e.name,username:C,bio:e.bio??``,avatarUrl:e.avatarUrl||``,bannerImageUrl:e.bannerImageUrl||``}),O(!1)}catch{E(`Could not save the Social Web username. Try again.`)}},Me=()=>{w(G),E(null),O(!1)},Ne=async()=>{I(null);try{await v.mutateAsync(null),S(``),A(!1),M(!1),P(null)}catch{I(`Could not remove the custom domain. Try again.`)}},Pe=async()=>{!Q.username||!Q.domain||(await _e(Ee),z(!0),B(!0),V.current&&window.clearTimeout(V.current),V.current=window.setTimeout(()=>{z(!1),B(!1)},2e3))};return(0,p.jsx)(fe,{children:(0,p.jsxs)(`div`,{className:`mx-auto max-w-[620px] py-[min(4vh,48px)]`,children:[(0,p.jsx)(r,{gap:`2xl`,justify:`between`,children:(0,p.jsx)(ee,{children:`Your social web handle`})}),(0,p.jsx)(`p`,{className:`mt-3 text-base text-muted-foreground`,children:`Like an email address, your handle is how people can find and interact with you.`}),(0,p.jsx)(`div`,{className:`mt-10`,children:(0,p.jsx)(`div`,{className:`rounded-md border border-border-default bg-sidebar px-4 pt-3 pb-4`,children:(0,p.jsx)(c,{children:g?(0,p.jsx)(a,{className:`mt-2 h-16 w-full`}):_?(0,p.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Could not load your Social Web handle.`}):(0,p.jsxs)(`div`,{className:`mt-3 flex items-start gap-2`,children:[(0,p.jsx)(`div`,{className:`mt-[-5px] flex size-7 shrink-0 items-center justify-center overflow-hidden rounded-full bg-surface-elevated text-muted-foreground ring-1 ring-border-default`,children:t?(0,p.jsx)(a,{className:`size-7 rounded-full`}):De?(0,p.jsx)(`img`,{alt:e?.name||n?.site?.title||``,className:`size-full rounded-full object-cover`,referrerPolicy:`no-referrer`,src:De}):(0,p.jsx)(oe,{className:`size-4`,strokeWidth:1.5})}),(0,p.jsx)(`div`,{className:`-ml-14 min-w-0 overflow-x-auto px-14`,children:(0,p.jsxs)(`div`,{"aria-label":`Social Web handle breakdown`,className:`inline-flex pb-9 font-mono text-xl leading-none font-medium whitespace-nowrap text-foreground select-none`,role:`group`,children:[(0,p.jsx)(`span`,{children:`@`}),(0,p.jsxs)(`div`,{className:`relative`,children:[(0,p.jsx)(`span`,{children:Q.username}),(0,p.jsxs)(`div`,{className:`absolute top-7 left-0 w-full border-t border-border-strong before:absolute before:top-[-5px] before:left-0 before:h-[5px] before:border-l before:border-border-strong after:absolute after:top-[-5px] after:right-0 after:h-[5px] after:border-l after:border-border-strong`,children:[(0,p.jsx)(`span`,{"aria-hidden":`true`,className:`absolute top-0 left-1/2 h-[5px] border-l border-border-strong`}),(0,p.jsx)(`div`,{className:`absolute top-2 right-0 w-max min-w-full text-center font-sans text-[10px] leading-normal font-medium whitespace-nowrap text-muted-foreground uppercase`,children:`Username`})]})]}),(0,p.jsx)(`span`,{className:`ml-px`,children:`@`}),(0,p.jsxs)(`div`,{className:`relative`,children:[(0,p.jsx)(`span`,{children:Q.domain}),(0,p.jsxs)(`div`,{className:`absolute top-7 left-0 w-full border-t border-state-success before:absolute before:top-[-5px] before:left-0 before:h-[5px] before:border-l before:border-state-success after:absolute after:top-[-5px] after:right-0 after:h-[5px] after:border-l after:border-state-success`,children:[(0,p.jsx)(`span`,{"aria-hidden":`true`,className:`absolute top-0 left-1/2 h-[5px] border-l border-state-success`}),(0,p.jsx)(`div`,{className:`absolute top-2 left-0 w-max min-w-full text-center font-sans text-[10px] leading-normal font-medium whitespace-nowrap text-state-success uppercase`,children:`Domain`})]})]}),h?.handle&&(0,p.jsx)(te,{delayDuration:0,children:(0,p.jsxs)(ie,{open:ye,onOpenChange:B,children:[(0,p.jsx)(re,{asChild:!0,children:(0,p.jsx)(i,{"aria-label":`Copy Social Web handle`,className:`mt-[-2px] ml-1.5 size-5 shrink-0 self-start p-0 text-muted-foreground hover:text-foreground [&_svg]:size-3.5!`,type:`button`,variant:`ghost`,onClick:()=>{Pe()},children:(0,p.jsx)(ae,{size:12})})}),(0,p.jsx)(ne,{children:ve?`Copied!`:`Copy`})]})})]})})]})})})}),(0,p.jsx)(`form`,{className:`mt-10`,onSubmit:e=>{e.preventDefault(),je()},children:(0,p.jsxs)(c,{children:[(0,p.jsx)(s,{htmlFor:`social-web-username`,children:`Social web username`}),t?(0,p.jsx)(a,{className:`h-9 w-full`}):(0,p.jsxs)(r,{className:`flex-col items-stretch sm:flex-row sm:items-center`,gap:`md`,children:[(0,p.jsx)(u,{"aria-describedby":T?`social-web-username-error`:void 0,"aria-invalid":T?!0:void 0,autoComplete:`off`,className:`sm:flex-1`,disabled:J||!D,id:`social-web-username`,value:C,"data-1p-ignore":!0,onChange:e=>{w(e.target.value),E(null)}}),D?(0,p.jsxs)(r,{gap:`md`,justify:`end`,children:[(0,p.jsx)(i,{className:`h-9 text-sm sm:w-auto`,disabled:K,type:`button`,variant:`outline`,onClick:Me,children:`Cancel`}),(0,p.jsx)(i,{className:`h-9 text-sm sm:w-auto`,disabled:J||!Y,type:`submit`,children:K?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(l,{color:`light`,size:`sm`}),`Saving...`]}):`Save`})]}):(0,p.jsx)(i,{"aria-label":`Edit Social web username`,className:`h-9 text-sm sm:w-auto`,disabled:J,type:`button`,variant:`outline`,onClick:()=>{w(G),E(null),O(!0)},children:`Edit`})]}),T&&(0,p.jsx)(o,{id:`social-web-username-error`,children:T})]})}),(0,p.jsx)(`div`,{className:`mt-10`,children:U&&!N?(0,p.jsxs)(c,{"data-invalid":F?!0:void 0,children:[(0,p.jsx)(s,{htmlFor:`social-web-active-domain`,children:`Social web domain`}),(0,p.jsxs)(r,{className:`flex-col items-stretch sm:flex-row sm:items-center`,gap:`md`,children:[(0,p.jsx)(u,{"aria-label":`Active social web domain`,autoComplete:`off`,className:`sm:flex-1`,id:`social-web-active-domain`,value:U,"data-1p-ignore":!0,disabled:!0}),(0,p.jsx)(i,{className:`h-9 text-sm sm:w-auto`,disabled:q,variant:`outline`,onClick:Ne,children:v.isPending?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(l,{size:`sm`}),`Removing...`]}):`Remove`})]}),F&&(0,p.jsx)(o,{id:`social-web-domain-error`,children:F})]}):(0,p.jsxs)(`form`,{onSubmit:Oe,children:[(0,p.jsxs)(c,{"data-invalid":F?!0:void 0,children:[(0,p.jsx)(s,{htmlFor:`social-web-domain`,children:`Social web domain`}),(0,p.jsxs)(r,{className:`flex-col items-stretch sm:flex-row sm:items-center`,gap:`md`,children:[(0,p.jsx)(u,{"aria-describedby":F?`social-web-domain-error`:void 0,"aria-invalid":F?!0:void 0,"aria-label":`Social web domain`,autoComplete:`off`,className:`sm:flex-1`,disabled:q||!k||j,id:`social-web-domain`,name:`domain`,placeholder:W,value:k||j?x:W,"data-1p-ignore":!0,onChange:e=>{S(e.target.value),M(!1),P(null),I(null),R(null)}}),!X&&(k?(0,p.jsxs)(r,{gap:`md`,justify:`end`,children:[(0,p.jsx)(i,{className:`h-9 text-sm sm:w-auto`,disabled:q,type:`button`,variant:`outline`,onClick:$,children:`Cancel`}),(0,p.jsx)(i,{className:`h-9 text-sm sm:w-auto`,disabled:q||!xe||_,type:`submit`,children:`Activate`})]}):(0,p.jsx)(i,{"aria-label":`Edit Social web domain`,className:`h-9 text-sm sm:w-auto`,disabled:q||_,type:`button`,variant:`outline`,onClick:()=>{S(``),I(null),R(null),A(!0)},children:`Edit`}))]}),F&&(0,p.jsx)(o,{id:`social-web-domain-error`,children:F})]}),X&&(0,p.jsxs)(`div`,{className:`mt-6 rounded-md border border-border-default bg-surface-elevated p-4`,children:[(0,p.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:`Set up your redirect`}),(0,p.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:`Add a redirect or proxy service to forward social web requests to Ghost.`}),(0,p.jsxs)(`div`,{className:`mt-4 flex flex-col gap-3 text-sm`,children:[(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`div`,{className:`text-muted-foreground`,children:`Redirect from`}),(0,p.jsx)(`code`,{className:`mt-1 block overflow-x-auto rounded-sm bg-background px-3 py-2 text-foreground`,children:we})]}),(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`div`,{className:`text-muted-foreground`,children:`Redirect to`}),(0,p.jsx)(`code`,{className:`mt-1 block overflow-x-auto rounded-sm bg-background px-3 py-2 text-foreground`,children:Te})]})]})]}),X&&(0,p.jsxs)(r,{className:`mt-4 flex-col items-stretch sm:flex-row sm:items-center`,gap:`md`,justify:`between`,children:[(0,p.jsx)(`div`,{className:`text-sm text-destructive`,children:L}),(0,p.jsxs)(r,{gap:`md`,justify:`end`,children:[(0,p.jsx)(i,{disabled:q,variant:`outline`,onClick:$,children:`Cancel`}),Ce?(0,p.jsx)(i,{disabled:q,onClick:Ae,children:v.isPending?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(l,{color:`light`,size:`sm`}),`Saving...`]}):`Save`}):(0,p.jsx)(i,{disabled:q||!Se||_,onClick:ke,children:y.isPending?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(l,{color:`light`,size:`sm`}),`Validating...`]}):L?`Retry`:`Validate`})]})]})]})})]})})};export{h as default};