ghost 6.52.0 → 6.52.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/tryghost-kg-card-factory-5.2.3.tgz +0 -0
- package/components/tryghost-kg-clean-basic-html-4.3.3.tgz +0 -0
- package/components/tryghost-kg-converters-1.2.3.tgz +0 -0
- package/components/tryghost-kg-default-cards-10.3.3.tgz +0 -0
- package/components/tryghost-kg-default-nodes-2.1.3.tgz +0 -0
- package/components/tryghost-kg-default-transforms-1.3.3.tgz +0 -0
- package/components/tryghost-kg-html-to-lexical-1.3.3.tgz +0 -0
- package/components/tryghost-kg-lexical-html-renderer-1.4.3.tgz +0 -0
- package/components/tryghost-kg-markdown-html-renderer-7.2.3.tgz +0 -0
- package/components/tryghost-kg-utils-1.1.3.tgz +0 -0
- package/core/built/admin/assets/Growth-CczbRexv.js +3 -0
- package/core/built/admin/assets/Newsletters-rFycX4x8.js +1 -0
- package/core/built/admin/assets/Overview-DFubBJaR.js +1 -0
- package/core/built/admin/assets/Web-BDE2lN4_.js +2 -0
- package/core/built/admin/assets/{account-migration-DiS76mRS.js → account-migration-gvH5a8ea.js} +1 -1
- package/core/built/admin/assets/audience-CMWMCxFS.js +1 -0
- package/core/built/admin/assets/{automated-emails-Cel18g7S.js → automated-emails-293Lcj5S.js} +1 -1
- package/core/built/admin/assets/automations-BxnjfCKn.js +1 -0
- package/core/built/admin/assets/automations-kPr44AmD.js +1 -0
- package/core/built/admin/assets/bluesky-sharing-Cww54F3Y.js +1 -0
- package/core/built/admin/assets/{chunk.912.9d6df5a6da679d905bbf.js → chunk.251.dd82df30188bb633b4ae.js} +9 -9
- package/core/built/admin/assets/{chunk.730.2457b7fede040aa52c88.js → chunk.341.20e7d2936dfa5877deea.js} +3 -3
- package/core/built/admin/assets/{chunk.524.d6d399b571454ea0234d.js → chunk.524.697bf0ded48e7c994fc3.js} +5 -5
- package/core/built/admin/assets/{chunk.582.50a9a5cbab6996daf0fe.js → chunk.582.6b742e9ba932688c442c.js} +6 -6
- package/core/built/admin/assets/{code-editor-view-BLGzcLub.js → code-editor-view-DSY5RHLf.js} +1 -1
- package/core/built/admin/assets/comments-BwNUmaNM.js +1 -0
- package/core/built/admin/assets/constants-c-JNF9c2.js +1 -0
- package/core/built/admin/assets/container-CD33Rm0u.js +1 -0
- package/core/built/admin/assets/content-helpers-CNBPrwsi.js +1 -0
- package/core/built/admin/assets/date-range-select-BkkNN98H.js +1 -0
- package/core/built/admin/assets/disabled-sources-indicator-ChHTF69d.js +1 -0
- package/core/built/admin/assets/{domain-2REz20SO.js → domain-CGk9SMa-.js} +1 -1
- package/core/built/admin/assets/dropzone-9zocztX0.js +5 -0
- package/core/built/admin/assets/{edit-profile-7QEh0VtN.js → edit-profile-C0B2Kbsl.js} +1 -1
- package/core/built/admin/assets/editor-Bz2Sm2O8.js +8 -0
- package/core/built/admin/assets/{esm-CEtFqV1y.js → esm-CsHLKmLh.js} +1 -1
- package/core/built/admin/assets/explore-CpRAMnx7.js +1 -0
- package/core/built/admin/assets/feed-BRoOWghO.js +1 -0
- package/core/built/admin/assets/filter-sources-DhxqZID1.js +1 -0
- package/core/built/admin/assets/{filters-DUy8rzI5.js → filters-B8nLLYGO.js} +1 -1
- package/core/built/admin/assets/{gh-chart-DdBGmBS8.js → gh-chart-Cqy9gGq7.js} +1 -1
- package/core/built/admin/assets/{gift-link-modal-CSgyxenA.js → gift-link-modal-v55u0VUL.js} +1 -1
- package/core/built/admin/assets/growth-BIfM3w1p.js +1 -0
- package/core/built/admin/assets/{inbox-CTD-ix6u.js → inbox-CDX57fXK.js} +11 -11
- package/core/built/admin/assets/index-B5yxmQNp.js +69 -0
- package/core/built/admin/assets/inline-DdrWe7D3.js +1 -0
- package/core/built/admin/assets/{input-group-DkR63-nk.js → input-group-DUPGQck1.js} +1 -1
- package/core/built/admin/assets/{koenig-lexical-D09TwwLs.js → koenig-lexical-CUVpp-dC.js} +1 -1
- package/core/built/admin/assets/{kpi-card-Fr_HJH78.js → kpi-card-DyDbok3h.js} +1 -1
- package/core/built/admin/assets/kpi-helpers-Bx9IHIMq.js +1 -0
- package/core/built/admin/assets/{kpi-tabs-Dc4Nt4a5.js → kpi-tabs-DmUcThFc.js} +1 -1
- package/core/built/admin/assets/labels-DLL8dl-7.js +1 -0
- package/core/built/admin/assets/layout-B7K3SmL0.js +1 -0
- package/core/built/admin/assets/{links-CfAB2Yeq.js → link-helpers-DHG_8GIT.js} +1 -1
- package/core/built/admin/assets/list-page-COAUFrmV.js +1 -0
- package/core/built/admin/assets/members-BxWs_mjq.js +10 -0
- package/core/built/admin/assets/{modals-Bu-1Uxdc.js → modals-DF2sECo6.js} +4 -4
- package/core/built/admin/assets/moderation-DYKTx5x0.js +1 -0
- package/core/built/admin/assets/newsletter-C-ZD1dI8.js +1 -0
- package/core/built/admin/assets/note-oaRdU_5z.js +1 -0
- package/core/built/admin/assets/notifications-BF4fAiP1.js +1 -0
- package/core/built/admin/assets/{nql-lang-CvCSOQG3.js → nql-lang-BoHzkNg5.js} +1 -1
- package/core/built/admin/assets/{onboarding-route-BDaa9hd3.js → onboarding-route-SS-e9Aeb.js} +1 -1
- package/core/built/admin/assets/overview-Cbn6bIoR.js +1 -0
- package/core/built/admin/assets/post-analytics-Bk9-KEgB.js +1 -0
- package/core/built/admin/assets/post-analytics-context-C8t_048I.js +1 -0
- package/core/built/admin/assets/post-analytics-header-xTjcg4H0.js +1 -0
- package/core/built/admin/assets/post-analytics-provider-CqnWwLMk.js +1 -0
- package/core/built/admin/assets/{post-share-modal-59Ujf4t1.js → post-share-modal-ZUCX7JZo.js} +1 -1
- package/core/built/admin/assets/preferences-BgjgxiBB.js +5 -0
- package/core/built/admin/assets/profile-qIwaxKTm.js +1 -0
- package/core/built/admin/assets/{router-provider-DcttGCQn.js → router-provider-S8Wf6jdu.js} +1 -1
- package/core/built/admin/assets/select-Cp27ScMR.js +1 -0
- package/core/built/admin/assets/{settings-dLraw6et.js → settings-CdDfyF90.js} +1 -1
- package/core/built/admin/assets/{settings-CIslWMfh.js → settings-CynBh-YN.js} +4 -4
- package/core/built/admin/assets/{share-modal-CI3E67kW.js → share-modal-DTIFYNI1.js} +1 -1
- package/core/built/admin/assets/social-urls-DVvRfwEp.js +16 -0
- package/core/built/admin/assets/{sort-button-BYwI0xdN.js → sort-button-BHh5Ba1K.js} +1 -1
- package/core/built/admin/assets/source-icon--egCE7iN.js +1 -0
- package/core/built/admin/assets/stats-DkqCtrPh.js +1 -0
- package/core/built/admin/assets/stats-view-BvWWxegf.js +1 -0
- package/core/built/admin/assets/step-1-DWjw7rIn.js +1 -0
- package/core/built/admin/assets/{step-2-CVOvLQ2n.js → step-2-D1LrETIB.js} +1 -1
- package/core/built/admin/assets/{step-3-BsVXcpWU.js → step-3-BAdJdZw4.js} +2 -2
- package/core/built/admin/assets/{tabs-Bw8aEqsd.js → tabs-DSrHPjWP.js} +1 -1
- package/core/built/admin/assets/tags-BWZqBj19.js +1 -0
- package/core/built/admin/assets/{textarea-CNaqhk5P.js → textarea-CUVQjsrM.js} +1 -1
- package/core/built/admin/assets/{toggle-group-CMp1taHd.js → toggle-group-CrFpl-Xz.js} +1 -1
- package/core/built/admin/assets/{topic-filter-D2_9eEw4.js → topic-filter-jAxwwd9I.js} +1 -1
- package/core/built/admin/assets/types-uYQ1HgqL.js +1 -0
- package/core/built/admin/assets/url-helpers-CCyfRrKj.js +1 -0
- package/core/built/admin/assets/use-analytics-data-DXG7mpgK.js +1 -0
- package/core/built/admin/assets/use-filter-params-EoQBXfP3.js +1 -0
- package/core/built/admin/assets/use-growth-stats-DJoXxVfD.js +1 -0
- package/core/built/admin/assets/use-post-referrers-B-onYbuS.js +1 -0
- package/core/built/admin/assets/use-reply-chain-data-D8IFALoz.js +1 -0
- package/core/built/admin/assets/{use-tinybird-query-CNCaUn39.js → use-tinybird-query-BSL3iVCc.js} +1 -1
- package/core/built/admin/assets/{use-tinybird-token-1T80Odca.js → use-tinybird-token-DHgOnrNu.js} +1 -1
- package/core/built/admin/assets/virtual-list-AQrbRAXP.js +1 -0
- package/core/built/admin/assets/web-zEFi98DS.js +1 -0
- package/core/built/admin/index.html +6 -6
- package/core/server/services/automations/automations-api.js +20 -0
- package/core/server/services/automations/automations-api.ts +31 -0
- package/core/server/services/automations/poll.js +7 -7
- package/core/server/services/automations/poll.ts +12 -9
- package/core/server/services/email-analytics/email-analytics-provider-mailgun.js +2 -2
- package/core/server/services/email-analytics/email-analytics-service-wrapper.js +1 -4
- package/core/server/services/email-analytics/email-analytics-service.js +5 -7
- package/core/server/services/webhooks/serialize.js +6 -5
- package/package.json +1 -1
- package/pnpm-lock.yaml +14 -14
- package/pnpm-workspace.yaml +5 -0
- package/core/built/admin/assets/Growth-Dx0vv-BS.js +0 -3
- package/core/built/admin/assets/Newsletters-v1GnbUjW.js +0 -1
- package/core/built/admin/assets/Overview-BgM7o-Z8.js +0 -1
- package/core/built/admin/assets/Web-DRv-83Ow.js +0 -2
- package/core/built/admin/assets/automations-DFLgH14-.js +0 -1
- package/core/built/admin/assets/automations-Dc4DUKBb.js +0 -1
- package/core/built/admin/assets/bluesky-sharing-Dk1RTUaz.js +0 -1
- package/core/built/admin/assets/comments-DgH1rC7w.js +0 -1
- package/core/built/admin/assets/constants-BlvYJTqz.js +0 -1
- package/core/built/admin/assets/content-helpers-BEgGpvyE.js +0 -1
- package/core/built/admin/assets/editor-u3BPqQed.js +0 -8
- package/core/built/admin/assets/en-DA2zVD_n.js +0 -1
- package/core/built/admin/assets/explore-BgHmdFVz.js +0 -1
- package/core/built/admin/assets/feed-Cs7-F3I5.js +0 -1
- package/core/built/admin/assets/filter-query-core-D6GjHUFB.js +0 -1
- package/core/built/admin/assets/growth-IkQZ1ZV9.js +0 -1
- package/core/built/admin/assets/index-BMhs4O3N.js +0 -69
- package/core/built/admin/assets/inline-C1CpHxuO.js +0 -1
- package/core/built/admin/assets/kpis-BTZ8cyw-.js +0 -1
- package/core/built/admin/assets/labels-sA9m188H.js +0 -5
- package/core/built/admin/assets/layout-szLkuQ88.js +0 -1
- package/core/built/admin/assets/list-page-DWkOdljb.js +0 -1
- package/core/built/admin/assets/main-layout-B-K8KliJ.js +0 -1
- package/core/built/admin/assets/members-PNNhalbu.js +0 -10
- package/core/built/admin/assets/moderation-DqnsNTiw.js +0 -1
- package/core/built/admin/assets/newsletter-BhuQeWFL.js +0 -1
- package/core/built/admin/assets/note-DFy2JTpP.js +0 -1
- package/core/built/admin/assets/notifications-BVu-JOkB.js +0 -1
- package/core/built/admin/assets/overview-Bhg8M7VS.js +0 -1
- package/core/built/admin/assets/pagemenu-C4paivNj.js +0 -1
- package/core/built/admin/assets/post-analytics-BhQUmZyA.js +0 -1
- package/core/built/admin/assets/post-analytics-context-Dy17HR1_.js +0 -1
- package/core/built/admin/assets/post-analytics-header-DAQep1VQ.js +0 -1
- package/core/built/admin/assets/posts/_react-dom-Blmuc0OL.js +0 -21
- package/core/built/admin/assets/posts/alert-dialog-DBJeQQTK.js +0 -154
- package/core/built/admin/assets/posts/app-provider-BJr9fdEC.js +0 -22
- package/core/built/admin/assets/posts/app-utils-9O53Czfw.js +0 -83
- package/core/built/admin/assets/posts/automations-BM0oBTjO.js +0 -275
- package/core/built/admin/assets/posts/automations-Dbp-gdHS.js +0 -223
- package/core/built/admin/assets/posts/avatar-kOk1tTvT.js +0 -144
- package/core/built/admin/assets/posts/badge-DnByIHe9.js +0 -25
- package/core/built/admin/assets/posts/button-Dd8Xreln.js +0 -40844
- package/core/built/admin/assets/posts/chunk-KS7C4IRE-ECXkcZq6.js +0 -7740
- package/core/built/admin/assets/posts/comments-D-7hbbdw.js +0 -8032
- package/core/built/admin/assets/posts/data-list-DdD_glQ-.js +0 -14219
- package/core/built/admin/assets/posts/dialog-DDkTy_np.js +0 -229
- package/core/built/admin/assets/posts/editor-D7-01KV_.js +0 -14633
- package/core/built/admin/assets/posts/empty-indicator-Ze-bwJ27.js +0 -38
- package/core/built/admin/assets/posts/filters-CmKfKtpS.js +0 -5611
- package/core/built/admin/assets/posts/get-site-timezone-DVbWc-NA.js +0 -39
- package/core/built/admin/assets/posts/growth-DlhFUzVg.js +0 -299
- package/core/built/admin/assets/posts/heading-BBl-8tMC.js +0 -92
- package/core/built/admin/assets/posts/hooks-gZAmj4Al.js +0 -5429
- package/core/built/admin/assets/posts/input-DuPLeCGW.js +0 -16
- package/core/built/admin/assets/posts/input-surface-ClwNIxfd.js +0 -17
- package/core/built/admin/assets/posts/jsx-runtime-BfZnKD4L.js +0 -95
- package/core/built/admin/assets/posts/koenig-lexical-DCHiJJou.js +0 -77579
- package/core/built/admin/assets/posts/kpis-Fsx0XmYK.js +0 -2061
- package/core/built/admin/assets/posts/label-D1wSl69p.js +0 -32
- package/core/built/admin/assets/posts/links-DLozzgMh.js +0 -1243
- package/core/built/admin/assets/posts/loading-indicator-BgU2kK3v.js +0 -44
- package/core/built/admin/assets/posts/main-layout-DDlTMrnF.js +0 -15
- package/core/built/admin/assets/posts/newsletter-DAQJ1GLe.js +0 -736
- package/core/built/admin/assets/posts/overview-G3MfRm-S.js +0 -426
- package/core/built/admin/assets/posts/page-header-CanFyB95.js +0 -284
- package/core/built/admin/assets/posts/popover-Cta8ZDHJ.js +0 -221
- package/core/built/admin/assets/posts/post-analytics-cS07-wo_.js +0 -121
- package/core/built/admin/assets/posts/post-analytics-context-D868SMoq.js +0 -150
- package/core/built/admin/assets/posts/post-analytics-header-CZYiuaEL.js +0 -42249
- package/core/built/admin/assets/posts/post-share-modal-BJfswZzf.js +0 -352
- package/core/built/admin/assets/posts/posts-CpusjBC0.js +0 -37
- package/core/built/admin/assets/posts/posts-app-context-CPC7dOlt.js +0 -26
- package/core/built/admin/assets/posts/posts.js +0 -145
- package/core/built/admin/assets/posts/router-provider-DrqpOc8m.js +0 -114
- package/core/built/admin/assets/posts/separator-DAZNzARU.js +0 -37
- package/core/built/admin/assets/posts/settings-CMfUn5Hq.js +0 -66
- package/core/built/admin/assets/posts/shade-app-DLbeExcd-NeEZjE3R.js +0 -4764
- package/core/built/admin/assets/posts/sheet-CEuv-0a5.js +0 -62
- package/core/built/admin/assets/posts/site-WJ6ldary.js +0 -10
- package/core/built/admin/assets/posts/skeleton-CO0qCdQF.js +0 -2426
- package/core/built/admin/assets/posts/source-icon-Bs6o84W3.js +0 -143
- package/core/built/admin/assets/posts/stats-B1Z8H0JT.js +0 -92
- package/core/built/admin/assets/posts/table-CbJ9bOpM.js +0 -77
- package/core/built/admin/assets/posts/tabs-BvzzwQ4P.js +0 -242
- package/core/built/admin/assets/posts/tags-D-4TwsD0.js +0 -462
- package/core/built/admin/assets/posts/tooltip-BI7VtFUY.js +0 -380
- package/core/built/admin/assets/posts/update-queries-DiUznIQ1.js +0 -60
- package/core/built/admin/assets/posts/users-UgRPrTKW.js +0 -83
- package/core/built/admin/assets/posts/value-DF_wOhJe.js +0 -415
- package/core/built/admin/assets/posts/virtual-list-window-DP63Onpm.js +0 -853
- package/core/built/admin/assets/posts/web-axp2l3kK.js +0 -8077
- package/core/built/admin/assets/preferences-ChOzBKcF.js +0 -5
- package/core/built/admin/assets/profile-DlcrYKay.js +0 -1
- package/core/built/admin/assets/select-BbtNHCBq.js +0 -1
- package/core/built/admin/assets/social-urls-DVzIHh2W.js +0 -16
- package/core/built/admin/assets/source-icon-Uuhttjun.js +0 -1
- package/core/built/admin/assets/source-utils-BchD0sF0.js +0 -1
- package/core/built/admin/assets/stats-CrlPzgdd.js +0 -1
- package/core/built/admin/assets/stats-view-UNMhTMCZ.js +0 -1
- package/core/built/admin/assets/step-1-C2HY6pyi.js +0 -1
- package/core/built/admin/assets/tags-DjCsJo0X.js +0 -1
- package/core/built/admin/assets/typeof-Ca-duI-z.js +0 -1
- package/core/built/admin/assets/url-helpers-DxA844rA.js +0 -1
- package/core/built/admin/assets/use-growth-stats-DNIGdI8h.js +0 -1
- package/core/built/admin/assets/use-reply-chain-data-DtEC2Azp.js +0 -1
- package/core/built/admin/assets/virtual-list-window-BTXGwpf5.js +0 -1
- package/core/built/admin/assets/web-Cj8VEw3s.js +0 -1
- /package/core/built/admin/assets/{chunk.912.9d6df5a6da679d905bbf.js.LICENSE.txt → chunk.251.dd82df30188bb633b4ae.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./react-dom-C6aoWSfl.js";import{t as r}from"./jsx-runtime-CtMZ-PAS.js";import{l as i}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{$n as a,t as o}from"./button-DiwO9Rof.js";var s=e(t(),1),c=e(n(),1);function l(e,t,n){let r=Array(e);return new Proxy(r,{get(r,i,a){if(typeof i==`string`){let a=i.charCodeAt(0);if(a>=48&&a<=57){let a=+i;if(Number.isInteger(a)&&a>=0&&a<e){let e=r[a];if(!e){let i=t[a*2];e=r[a]={index:a,key:n(a),start:i,size:t[a*2+1],end:i+t[a*2+1],lane:0}}return e}}if(i===`length`)return e}return Reflect.get(r,i,a)}})}function u(e,t,n){let r=n.initialDeps??[],i,a=!0;function o(){let o=e();return o.length!==r.length||o.some((e,t)=>r[t]!==e)?(r=o,i=t(...o),n?.onChange&&!(a&&n.skipInitialOnChange)&&n.onChange(i),a=!1,i):i}return o.updateDeps=e=>{r=e},o}function d(e,t){if(e===void 0)throw Error(`Unexpected undefined${t?`: ${t}`:``}`);return e}var f=(e,t)=>Math.abs(e-t)<1.01,p=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},m,h=()=>{if(m!==void 0)return m;if(typeof navigator>`u`)return m=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return m=!0;let e=navigator.maxTouchPoints;return m=navigator.platform===`MacIntel`&&e!==void 0&&e>0},g=e=>{let{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},_=e=>e,v=e=>{let t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1)-t+1,r=Array(n);for(let e=0;e<n;e++)r[e]=t+e;return r},y=(e,t)=>{let n=e.scrollElement;if(!n)return;let r=e.targetWindow;if(!r)return;let i=e=>{let{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(i(g(n)),!r.ResizeObserver)return()=>{};let a=new r.ResizeObserver(t=>{let r=()=>{let e=t[0];if(e?.borderBoxSize){let t=e.borderBoxSize[0];if(t){i({width:t.inlineSize,height:t.blockSize});return}}i(g(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return a.observe(n,{box:`border-box`}),()=>{a.unobserve(n)}},b={passive:!0},x=typeof window>`u`?!0:`onscrollend`in window,S=(e,t,n)=>{let r=e.scrollElement;if(!r)return;let i=e.targetWindow;if(!i)return;let a=e.options.useScrollendEvent&&x,o=0,s=a?null:p(i,()=>t(o,!1),e.options.isScrollingResetDelay),c=e=>()=>{o=n(r),s?.(),t(o,e)},l=c(!0),u=c(!1);return r.addEventListener(`scroll`,l,b),a&&r.addEventListener(`scrollend`,u,b),()=>{r.removeEventListener(`scroll`,l),a&&r.removeEventListener(`scrollend`,u)}},C=(e,t)=>S(e,t,t=>{let{horizontal:n,isRtl:r}=e.options;return n?t.scrollLeft*(r&&-1||1):t.scrollTop}),w=(e,t,n)=>{if(n.options.useCachedMeasurements){let t=n.indexFromElement(e),r=n.options.getItemKey(t);return n.itemSizeCache.get(r)??n.options.estimateSize(t)}if(t?.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?`inlineSize`:`blockSize`])}if(!t){let t=n.indexFromElement(e),r=n.options.getItemKey(t),i=n.itemSizeCache.get(r);if(i!==void 0)return i}return e[n.options.horizontal?`offsetWidth`:`offsetHeight`]},T=(e,{adjustments:t=0,behavior:n},r)=>{var i,a;(a=(i=r.scrollElement)?.scrollTo)==null||a.call(i,{[r.options.horizontal?`left`:`top`]:e+t,behavior:n})},E=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var e;return((e=this.targetWindow?.performance)?.now)?.call(e)??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,n=this.indexFromElement(t);if(!t.isConnected){this.observer.unobserve(t);for(let[e,n]of this.elementsCache)if(n===t){this.elementsCache.delete(e);break}return}this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}));return{disconnect:()=>{var n;(n=t())==null||n.disconnect(),e=null},observe:e=>t()?.observe(e,{box:`border-box`}),unobserve:e=>t()?.unobserve(e)}})(),this.range=null,this.setOptions=e=>{let t={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:_,rangeExtractor:v,onChange:()=>{},measureElement:w,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:`data-index`,initialMeasurementsCache:[],lanes:1,anchorTo:`start`,followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:`estimate`,useCachedMeasurements:!1};for(let n in e){let r=e[n];r!==void 0&&(t[n]=r)}let n=this.options,r=null,i=null,a=!1;if(n!==void 0&&n.enabled&&t.enabled&&t.anchorTo===`end`&&this.scrollElement!==null){let e=n.count,o=t.count,s=this.getMeasurements(),c=e>0?s[0]?.key??n.getItemKey(0):null,l=e>0?s[e-1]?.key??n.getItemKey(e-1):null;if(o!==e||e>0&&o>0&&(t.getItemKey(0)!==c||t.getItemKey(o-1)!==l)){a=!0;let c=e>0?this.getVirtualItemForOffset(this.getScrollOffset())??s[0]:null;c&&(r=[c.key,this.getScrollOffset()-c.start]);let u=t.followOnAppend===!0?`auto`:t.followOnAppend||null;u&&o>e&&this.isAtEnd(n.scrollEndThreshold)&&(e===0||t.getItemKey(o-1)!==l)&&(i=u)}}this.options=t,a&&(this.pendingMin=0,this.itemSizeCacheVersion++);let o=!1,s=0;if(r&&this.scrollOffset!==null){let[e,t]=r,n=this.getMeasurements(),{count:i,getItemKey:a}=this.options,c=0;for(;c<i&&a(c)!==e;)c++;if(c<i){let e=n[c];if(e){let n=e.start+t;n!==this.scrollOffset&&(s=n-this.scrollOffset,this.scrollOffset=n,o=!0)}}}(o||i)&&(this.pendingScrollAnchor=[o?r[0]:null,o?r[1]:0,i,s])},this.notify=e=>{var t,n;(n=(t=this.options).onChange)==null||n.call(t,this,e)},this.maybeNotify=u(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{let e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&`ownerDocument`in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=this.scrollElement?.window??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{if(t&&this._intendedScrollOffset===null&&e===this.scrollOffset)return;this._intendedScrollOffset!==null&&Math.abs(e-this._intendedScrollOffset)<1.5&&(e=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0;let n=this.getScrollOffset();this.scrollDirection=t?n===e?this.scrollDirection:n<e?`forward`:`backward`:null,this.scrollOffset=e,this.isScrolling=t,this._flushIosDeferredIfReady(),this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),`addEventListener`in this.scrollElement){let e=this.scrollElement,t=()=>{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!h()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};e.addEventListener(`touchstart`,t,b),e.addEventListener(`touchend`,n,b),this.unsubs.push(()=>{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchend`,n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}let t=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,t&&this.scrollElement&&this.options.enabled){let[e,n,r,i]=t;e!==null&&!r&&(h()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?i!==0&&(this._iosDeferredAdjustment+=i):this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})),r&&this.scrollToEnd({behavior:r})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;let e=this.getScrollOffset(),t=this.getMaxScrollOffset();if(e<0||e>t)return;let n=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(e,{adjustments:this.scrollAdjustments+=n,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?`width`:`height`]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset==`function`?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{let n=new Map,r=new Map;for(let i=t-1;i>=0;i--){let t=e[i];if(n.has(t.lane))continue;let a=r.get(t.lane);if(a==null||t.end>a.end?r.set(t.lane,t):t.end<a.end&&n.set(t.lane,!0),n.size===this.options.lanes)break}return r.size===this.options.lanes?Array.from(r.values()).sort((e,t)=>e.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=u(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,t,n,r,i,a,o)=>(this.prevLanes!==void 0&&this.prevLanes!==a&&(this.lanesChangedFlag=!0),this.prevLanes=a,this.pendingMin=null,{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o}),{key:!1}),this.getMeasurements=u(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o},s)=>{let c=this.itemSizeCache;if(!i)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let u=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1),a===1){let i=this.options.gap,a=e*2,o=this._flatMeasurements;if(!o||o.length<a){let e=new Float64Array(a);o&&u>0&&e.set(o.subarray(0,u*2)),o=e,this._flatMeasurements=o}let s;if(u===0)s=t+n;else{let e=u-1;s=o[e*2]+o[e*2+1]+i}for(let t=u;t<e;t++){let e=r(t),n=c.get(e),a=typeof n==`number`?n:this.options.estimateSize(t);o[t*2]=s,o[t*2+1]=a,s+=a+i}let d=l(e,o,r);return this.measurementsCache=d,d}let d=this.measurementsCache.slice(0,u),f=Array(a).fill(void 0);for(let e=0;e<u;e++){let t=d[e];t&&(f[t.lane]=e)}for(let i=u;i<e;i++){let e=r(i),a=this.laneAssignments.get(i),s,l,u=o===`estimate`||c.has(e);if(a!==void 0&&this.options.lanes>1){s=a;let e=f[s],r=e===void 0?void 0:d[e];l=r?r.end+this.options.gap:t+n}else{let e=this.options.lanes===1?d[i-1]:this.getFurthestMeasurement(d,i);l=e?e.end+this.options.gap:t+n,s=e?e.lane:i%this.options.lanes,this.options.lanes>1&&u&&this.laneAssignments.set(i,s)}let p=c.get(e),m=typeof p==`number`?p:this.options.estimateSize(i),h=l+m;d[i]={index:i,start:l,size:m,end:h,key:e,lane:s},f[s]=i}return this.measurementsCache=d,d},{key:!1,debug:()=>this.options.debug}),this.calculateRange=u(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,r)=>e.length===0||t===0?(this.range=null,null):(this.range=k(e,t,n,r,r===1&&this._flatMeasurements!=null?this._flatMeasurements:null),this.range),{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=u(()=>{let e=null,t=null,n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,r,i)=>r===null||i===null?[]:e({startIndex:r,endIndex:i,overscan:t,count:n}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{if(!this.scrollState||this.scrollState.behavior!==`smooth`)return!0;let t=this.scrollState.index??this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index;if(t!==void 0&&this.range){let n=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),r=Math.max(0,t-n),i=Math.min(this.options.count-1,t+n);return e>=r&&e<=i}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});return}let t=this.indexFromElement(e),n=this.options.getItemKey(t),r=this.elementsCache.get(n);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(n,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{if(e<0||e>=this.options.count)return;let n,r,i,a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)i=this.options.getItemKey(e),r=a[e*2],n=a[e*2+1];else{let t=this.measurementsCache[e];if(!t)return;i=t.key,r=t.start,n=t.size}let o=t-(this.itemSizeCache.get(i)??n);if(o!==0){let a=this.options.anchorTo===`end`&&this.scrollState?.behavior!==`smooth`&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,s=a?this.getTotalSize():0,c=this.scrollState?.behavior!==`smooth`&&(this.shouldAdjustScrollPositionOnItemSizeChange===void 0?r<this.getScrollOffset()+this.scrollAdjustments&&(!this.itemSizeCache.has(i)||this.scrollDirection!==`backward`):this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[e]??{index:e,key:i,start:r,size:n,end:r+n,lane:0},o,this));(this.pendingMin===null||e<this.pendingMin)&&(this.pendingMin=e),this.itemSizeCache.set(i,t),this.itemSizeCacheVersion++,a?this.applyScrollAdjustment(this.getTotalSize()-s):c&&this.applyScrollAdjustment(o),this.notify(!1)}},this.getVirtualItems=u(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let n=[];for(let r=0,i=e.length;r<i;r++){let i=t[e[r]];n.push(i)}return n},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(t.length===0)return;let n=this._flatMeasurements,r=this.options.lanes===1&&n!=null;return d(t[D(0,t.length-1,r?e=>n[e*2]:e=>d(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if(`scrollHeight`in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(e=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=e,this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;let r=this.getSize(),i=this.getScrollOffset();t===`auto`&&(t=e>=i+r?`end`:`start`),t===`center`?e+=(n-r)/2:t===`end`&&(e-=r);let a=this.getMaxScrollOffset();return Math.max(Math.min(a,e),0)},this.getOffsetForIndex=(e,t=`auto`)=>{e=Math.max(0,Math.min(e,this.options.count-1));let n=this.getSize(),r=this.getScrollOffset(),i=this.measurementsCache[e];if(!i)return;if(t===`auto`)if(i.end>=r+n-this.options.scrollPaddingEnd)t=`end`;else if(i.start<=r+this.options.scrollPaddingStart)t=`start`;else return[r,t];if(t===`end`&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let a=t===`end`?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(a,t,i.size),t]},this.scrollToOffset=(e,{align:t=`start`,behavior:n=`auto`}={})=>{let r=this.getOffsetForAlignment(e,t),i=this.now();this.scrollState={index:null,align:t,behavior:n,startedAt:i,lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t=`auto`,behavior:n=`auto`}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));let r=this.getOffsetForIndex(e,t);if(!r)return;let[i,a]=r,o=this.now();this.scrollState={index:e,align:a,behavior:n,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t=`auto`}={})=>{let n=this.getScrollOffset()+e,r=this.now();this.scrollState={index:null,align:`start`,behavior:t,startedAt:r,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:e=`auto`}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:`end`,behavior:e});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:e})},this.getTotalSize=()=>{let e=this.getMeasurements(),t;if(e.length===0)t=this.options.paddingStart;else if(this.options.lanes===1){let n=e.length-1,r=this._flatMeasurements;t=r==null?e[n]?.end??0:r[n*2]+r[n*2+1]}else{let n=Array(this.options.lanes).fill(null),r=e.length-1;for(;r>=0&&n.some(e=>e===null);){let t=e[r];n[t.lane]===null&&(n[t.lane]=t.end),r--}t=Math.max(...n.filter(e=>e!==null))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{let e=[];if(this.itemSizeCache.size===0)return e;let t=this.getMeasurements();for(let n of t)n&&this.itemSizeCache.has(n.key)&&e.push({index:n.index,key:n.key,start:n.start,size:n.size,end:n.end,lane:n.lane});return e},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this._intendedScrollOffset=e+(t??0),this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(e)}applyScrollAdjustment(e,t){e!==0&&(h()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=e:(this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=e,behavior:t}),this.scrollOffset!==null&&(this.scrollOffset+=this.scrollAdjustments,this.scrollAdjustments=0)))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId??=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()})}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=this.scrollState.index==null?void 0:this.getOffsetForIndex(this.scrollState.index,this.scrollState.align),t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&f(t,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.getScrollOffset()!==t&&this._scrollToOffset(t,{adjustments:void 0,behavior:`auto`}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,n){let e=this.getSize()||600,n=Math.abs(t-this.getScrollOffset()),r=this.scrollState.behavior===`smooth`&&n>e;this.scrollState.lastTargetOffset=t,r||(this.scrollState.behavior=`auto`),this._scrollToOffset(t,{adjustments:void 0,behavior:r?`smooth`:`auto`})}this.scheduleScrollReconcile()}},D=(e,t,n,r)=>{for(;e<=t;){let i=(e+t)/2|0,a=n(i);if(a<r)e=i+1;else if(a>r)t=i-1;else return i}return e>0?e-1:0};function O(e,t,n){let r=0;for(;r<=t;){let i=(r+t)/2|0,a=e[i*2];if(a<n)r=i+1;else if(a>n)t=i-1;else return i}return r>0?r-1:0}function k(e,t,n,r,i){let a=e.length-1;if(e.length<=r)return{startIndex:0,endIndex:a};if(r===1&&i!==null){let e=O(i,a,n),r=e,o=n+t;for(;r<a&&i[r*2]+i[r*2+1]<o;)r++;return{startIndex:e,endIndex:r}}let o=D(0,a,t=>e[t].start,n),s=o;if(r===1)for(;s<a&&e[s].end<n+t;)s++;else if(r>1){let i=Array(r).fill(0);for(;s<a&&i.some(e=>e<n+t);){let t=e[s];i[t.lane]=t.end,s++}let c=Array(r).fill(n+t);for(;o>=0&&c.some(e=>e>=n);){let t=e[o];c[t.lane]=t.start,o--}o=Math.max(0,o-o%r),s=Math.min(a,s+(r-1-s%r))}return{startIndex:o,endIndex:s}}var A=typeof document<`u`?s.useLayoutEffect:s.useEffect;function j({useFlushSync:e=!0,directDomUpdates:t=!1,directDomUpdatesMode:n=`transform`,...r}){let i=s.useReducer(e=>e+1,0)[1],a=s.useRef({enabled:t,mode:n,container:null,lastSize:null,lastPositions:new WeakMap,prevRange:null});a.current.enabled=t,a.current.mode=n;let o=e=>{let t=a.current;if(!t.enabled||!t.container)return;let n=e.getTotalSize();if(n!==t.lastSize){t.lastSize=n;let r=e.options.horizontal?`width`:`height`;t.container.style[r]=`${n}px`}let r=!!e.options.horizontal,i=t.mode===`transform`,o=r?`left`:`top`,s=e.options.scrollMargin,c=e.getVirtualItems();for(let n of c){let a=n.start-s,c=e.elementsCache.get(n.key);c&&t.lastPositions.get(c)!==a&&(t.lastPositions.set(c,a),i?c.style.transform=r?`translate3d(${a}px, 0, 0)`:`translate3d(0, ${a}px, 0)`:c.style[o]=`${a}px`)}},l={...r,onChange:(t,n)=>{var s;let l=a.current,u=!0;if(l.enabled){o(t);let e=t.range,n=l.prevRange;u=!n||n.isScrolling!==t.isScrolling||n.startIndex!==e?.startIndex||n.endIndex!==e?.endIndex,u&&(l.prevRange=e?{startIndex:e.startIndex,endIndex:e.endIndex,isScrolling:t.isScrolling}:null)}u&&(e&&n?(0,c.flushSync)(i):i()),(s=r.onChange)==null||s.call(r,t,n)}},[u]=s.useState(()=>{let e=new E(l);return Object.assign(e,{containerRef:t=>{let n=a.current;if(n.container=t,n.lastSize=null,t&&n.enabled){let r=e.getTotalSize();n.lastSize=r;let i=e.options.horizontal?`width`:`height`;t.style[i]=`${r}px`}}})});return u.setOptions(l),A(()=>u._didMount(),[]),A(()=>u._willUpdate()),A(()=>{o(u)}),u}function M(e){return j({observeElementRect:y,observeElementOffset:C,scrollToFn:T,...e})}function N({items:e,totalItems:t,parentRef:n,hasNextPage:r,isFetchingNextPage:i,fetchNextPage:o,estimateSize:c=()=>100,overscan:l=5,getScrollElement:u=a}){let d=M({count:t,getScrollElement:()=>u(n.current),estimateSize:c,overscan:l}),f=d.getVirtualItems(),p=f.length>0?(f.at(0)?.start??0)-d.options.scrollMargin:0,m=f.length>0?d.getTotalSize()-(f.at(-1)?.end??0):0,h=f.map(t=>({virtualItem:t,key:t.key,item:e[t.index],props:{ref:d.measureElement,"data-index":t.index}})),g=h.at(-1)&&!h.at(-1)?.item;return(0,s.useEffect)(()=>{r&&g&&!i&&o()},[r,g,i,o]),{visibleItems:h,virtualizer:d,spaceBefore:p,spaceAfter:m}}var P=1e3,F=`ghostVirtualListWindow`;function I({totalItems:e,unlockedItemCount:t}){let n=Math.min(e,t);return{visibleItemCount:n,canLoadMore:e>n}}function L(e,t){return e+t}function R(e,t){return`${e}::${t}`}function z(e,t,n){let r=e?.[F];if(!r||typeof r!=`object`)return n;let i=r[t];return typeof i!=`number`||!Number.isFinite(i)?n:Math.max(1,Math.floor(i))}function B(e,t,n){if(typeof window>`u`)return;let r=e?.[F],i={...e??{},[F]:{...r&&typeof r==`object`?r:{},[t]:n}};window.history.replaceState(i,``)}function V(){if(!(typeof window>`u`))return window.history.state}function H(e,{resetKey:t,windowSize:n=P}={}){let{key:r,pathname:a,search:o}=i(),c=R(a,t??o),[l,u]=(0,s.useState)(()=>z(V(),c,n)),d=(0,s.useRef)(c);(0,s.useEffect)(()=>{if(d.current!==c){d.current=c,u(z(V(),c,n));return}B(V(),c,l)},[c,r,l,n]);let{visibleItemCount:f,canLoadMore:p}=I({totalItems:e,unlockedItemCount:l});return{visibleItemCount:f,canLoadMore:p,loadMore:()=>u(e=>L(e,n))}}var U=new Map,W=`ghostVirtualListScrollPosition`,G=150,K=500;function q(){if(!(typeof window>`u`))return window.history.state}function J(e){let t=e?.key;if(typeof t==`string`||typeof t==`number`)return String(t);let n=e?.idx;if(typeof n==`number`)return String(n)}function Y(e,t){let n=J(e);if(n)return`${n}::${t}`}function X(e,t){let n=e?.[W];if(!n||typeof n!=`object`)return;let r=n[t];if(typeof r==`number`)return r}function Z(e,t,n){if(typeof window>`u`)return;let r=e?.[W],i={...e??{},[W]:{...r&&typeof r==`object`?r:{},[t]:n}};window.history.replaceState(i,``)}function Q({parentRef:e,enabled:t=!0,isLoading:n=!1,getScrollElement:r=a}){let o=i(),[c,l]=(0,s.useState)(null),u=(0,s.useRef)(null),d=(0,s.useRef)(0),f=(0,s.useRef)(0),p=(0,s.useRef)(0),m=(0,s.useRef)(null),h=(0,s.useRef)(new Set),g=o.pathname+o.search;(0,s.useEffect)(()=>{if(!t||!e.current)return;let n=r(e.current);l(n)},[t,e,r]),(0,s.useEffect)(()=>{if(!t||!c)return;let e=q(),n=J(e),r=Y(e,g),i=()=>{m.current!==null&&(window.clearTimeout(m.current),m.current=null)},a=e=>{r&&U.set(r,e);let t=q();J(t)===n&&Z(t,g,e),f.current=Date.now(),p.current=e},o=({persistToHistory:e=!0}={})=>{if(i(),!e){let e=d.current;r&&U.set(r,e),f.current=Date.now(),p.current=e;return}a(d.current)},s=()=>{let e=Date.now();if(Math.abs(d.current-p.current)>=K||e-f.current>=G){i(),a(d.current);return}m.current===null&&(m.current=window.setTimeout(()=>{m.current=null,a(d.current)},G))},l=()=>{d.current=c.scrollTop,s()},u=()=>{o()};return d.current=c.scrollTop,c.addEventListener(`scroll`,l),window.addEventListener(`pagehide`,u),()=>{o({persistToHistory:!1}),c.removeEventListener(`scroll`,l),window.removeEventListener(`pagehide`,u)}},[t,g,c]),(0,s.useEffect)(()=>{let e=q(),r=Y(e,g),i=(r?U.get(r):void 0)??X(e,g);if(!(!t||!c||n)){if(i!==void 0&&u.current!==g){u.current=g;let e=0,t=()=>{for(let e of h.current)window.clearTimeout(e);h.current.clear()},n=(e,t)=>{let n=window.setTimeout(()=>{h.current.delete(n),e()},t);h.current.add(n)},r=()=>{if(e+=1,!c)return;let t=c.scrollTop,a=c.scrollHeight-c.clientHeight;if(i>a&&e<20){n(r,100);return}Math.abs(i-t)>5&&(c.scrollTop=Math.min(i,a))};return n(r,150),()=>t()}u.current=g}},[t,g,c,n])}var $=r(),ee=({isLoading:e,onClick:t,label:n=`Load more`,loadingLabel:r=`Loading more...`,className:i=`flex justify-center px-4 py-6`})=>{let a=!!e;return(0,$.jsx)(`div`,{className:i,children:(0,$.jsx)(o,{disabled:a,variant:`outline`,onClick:t,children:a?r:n})})};export{N as i,Q as n,H as r,ee as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{t}from"./react-Bb3IsNbi.js";import{t as n}from"./jsx-runtime-CtMZ-PAS.js";import{r,t as i}from"./tabs-DSrHPjWP.js";import{t as a}from"./use-tinybird-query-BSL3iVCc.js";import{C as o,S as s,b as c,g as l,v as u,x as d,y as f}from"./stats-DkqCtrPh.js";import{g as p,m as ee}from"./chunk-KS7C4IRE-DG9HTHQ3.js";import{a as te,t as ne}from"./router-provider-S8Wf6jdu.js";import{$n as re,Rt as ie,Xn as m,Zn as h,j as g,t as _}from"./button-DiwO9Rof.js";import{t as v}from"./gh-chart-Cqy9gGq7.js";import{r as ae}from"./filters-B8nLLYGO.js";import{r as oe,t as se}from"./post-analytics-header-xTjcg4H0.js";import{a as y,c as b,i as x,l as S,n as C,o as w,r as T,s as E,t as D,u as O}from"./data-list-D3nkd86L.js";import{t as ce}from"./empty-indicator-Cl63eDpB.js";import{a as k,i as le,n as ue,o as A,r as de,s as j}from"./use-filter-params-EoQBXfP3.js";import{Ar as M,Cn as N,Dn as fe,Er as P,Nr as F,Or as I,Pi as pe,Sn as L,ai as R,bn as z,c as me,cr as B,dr as he,ei as V,jn as H,pr as ge,s as _e,u as U,ur as W,wn as ve,xn as ye,yn as be}from"./index-B5yxmQNp.js";import{t as G}from"./date-range-select-BkkNN98H.js";import{n as K,r as q,t as xe}from"./kpi-tabs-DmUcThFc.js";import{t as Se}from"./use-analytics-data-DXG7mpgK.js";import{n as Ce,t as we}from"./audience-CMWMCxFS.js";import{n as Te}from"./post-analytics-context-C8t_048I.js";import{i as Ee,n as J,r as De,t as Y}from"./kpi-helpers-Bx9IHIMq.js";var X=e(t(),1),Z=n(),Oe=({data:e,range:t})=>{let[n]=p(),[a,o]=(0,X.useState)(n.get(`tab`)||`visits`),s=J[a],c=ge(e||[],t,s.dataKey,`sum`)?.map(e=>{let t=Number(e[s.dataKey]);return{date:String(e.date),value:t,formattedValue:s.formatter(t),label:s.label}}),l=Y(e);return(0,Z.jsx)(u,{children:(0,Z.jsx)(f,{children:(0,Z.jsxs)(i,{defaultValue:a,variant:`kpis`,children:[(0,Z.jsxs)(r,{className:`-mx-6 hidden grid-cols-2 md:visible! md:grid!`,children:[(0,Z.jsx)(K,{value:`visits`,onClick:()=>{o(`visits`)},children:(0,Z.jsx)(q,{color:J.visits.color,label:`Unique visitors`,value:l.visits})}),(0,Z.jsx)(K,{value:`views`,onClick:()=>{o(`views`)},children:(0,Z.jsx)(q,{color:J.views.color,label:`Total views`,value:l.views})})]}),(0,Z.jsxs)(P,{children:[(0,Z.jsx)(F,{className:`md:hidden`,asChild:!0,children:(0,Z.jsxs)(xe,{children:[a===`visits`&&(0,Z.jsx)(q,{color:`var(--chart-blue)`,label:`Unique visitors`,value:l.visits}),a===`views`&&(0,Z.jsx)(q,{color:`var(--chart-teal)`,label:`Total views`,value:l.views})]})}),(0,Z.jsxs)(I,{align:`end`,className:`w-56`,children:[(0,Z.jsx)(M,{onClick:()=>o(`visits`),children:`Unique visitors`}),(0,Z.jsx)(M,{onClick:()=>o(`views`),children:`Total views`})]})]}),(0,Z.jsx)(`div`,{className:`my-4 [&_.recharts-cartesian-axis-tick-value]:fill-gray-500`,children:(0,Z.jsx)(v,{className:`-mb-3 aspect-auto h-[16vw] max-h-[320px] min-h-[180px] w-full`,color:s.color,data:c,id:s.dataKey,range:t,showHours:!0,syncId:`overview-charts`})})]})})})},Q=e(A(),1);Q.registerLocale(k);var ke=e=>_e[e]||Q.getName(e,`en`,{select:`alias`})||`Unknown`,Ae=e=>({"UNITED STATES":`US`,"UNITED STATES OF AMERICA":`US`,USA:`US`,"UNITED KINGDOM":`GB`,UK:`GB`,"GREAT BRITAIN":`GB`,NETHERLANDS:`NL`})[e.toUpperCase()]||(e.length>2?e.substring(0,2):e),$=({tableHeader:e,data:t,onLocationClick:n})=>(0,Z.jsxs)(D,{children:[e&&(0,Z.jsxs)(y,{children:[(0,Z.jsx)(x,{children:`Country`}),(0,Z.jsx)(x,{children:`Visitors`})]}),(0,Z.jsx)(T,{children:t.map(e=>{let t=ke(`${e.location}`)||`Unknown`,r=n&&e.location!==`Unknown`,i=e.location?e.location.toLowerCase():`unknown`;return(0,Z.jsxs)(O,{className:r?`cursor-pointer`:``,"data-testid":`location-row-${i}`,onClick:r?()=>n(e.location):void 0,children:[(0,Z.jsx)(C,{style:{width:`${e.percentage?Math.round(e.percentage*100):0}%`}}),(0,Z.jsx)(w,{className:`group-hover/data:max-w-[calc(100%-140px)]`,children:(0,Z.jsxs)(`div`,{className:`flex items-center space-x-3 overflow-hidden`,title:t||`Unknown`,children:[(0,Z.jsx)(j,{countryCode:`${Ae(e.location)}`,fallback:(0,Z.jsx)(`span`,{className:`flex h-[14px] w-[22px] items-center justify-center rounded-[2px] bg-black text-white`,children:(0,Z.jsx)(V.SkullAndBones,{className:`size-3`})})}),(0,Z.jsx)(`div`,{className:`truncate font-medium`,children:t})]})}),(0,Z.jsxs)(E,{children:[(0,Z.jsx)(b,{children:m(Number(e.visits))}),(0,Z.jsx)(S,{children:h(e.percentage)})]})]},e.location||`unknown`)})})]}),je=({data:e,isLoading:t,onLocationClick:n})=>{let r=e.slice(0,10);return(0,Z.jsx)(Z.Fragment,{children:t?``:(0,Z.jsx)(Z.Fragment,{children:e&&e.length>0&&(0,Z.jsxs)(u,{className:`group/datalist`,"data-testid":`locations-card`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between p-6`,children:[(0,Z.jsxs)(s,{className:`p-0`,children:[(0,Z.jsx)(o,{children:`Locations`}),(0,Z.jsx)(c,{children:`Where are the readers of this post`})]}),(0,Z.jsx)(R,{className:`mr-2`,children:`Visitors`})]}),(0,Z.jsxs)(f,{className:`overflow-hidden`,children:[(0,Z.jsx)(H,{}),(0,Z.jsx)($,{data:r,tableHeader:!1,onLocationClick:n})]}),e.length>10&&(0,Z.jsx)(d,{children:(0,Z.jsxs)(be,{children:[(0,Z.jsx)(ve,{asChild:!0,children:(0,Z.jsxs)(_,{variant:`outline`,children:[`View all `,(0,Z.jsx)(g,{})]})}),(0,Z.jsxs)(z,{className:`overflow-y-auto pt-0 sm:max-w-[420px]`,children:[(0,Z.jsxs)(L,{className:`sticky top-0 z-40 -mx-6 bg-surface-elevated/60 p-6 backdrop-blur`,children:[(0,Z.jsx)(N,{children:`Top locations`}),(0,Z.jsx)(ye,{children:`Where are the readers of this post`})]}),(0,Z.jsx)(`div`,{className:`group/datalist`,children:(0,Z.jsx)($,{data:e,tableHeader:!0,onLocationClick:n})})]})]})})]})})})},Me=()=>{let e=te(),{postId:t}=ee(),{statsConfig:n,isLoading:r,site:i}=Se(),{range:o,setRange:s,post:c,isPostLoading:d}=Te(),{appSettings:p}=pe(),m=(0,X.useRef)(null),{filters:h,setFilters:g}=de({supportedFields:ue,trackingSource:`post-analytics`}),_=(0,X.useMemo)(()=>we(h.find(e=>e.field===`audience`)?.values),[h]);(0,X.useEffect)(()=>{!d&&c?.email_only&&e(`/posts/analytics/${t}`)},[d,c?.email_only,e,t]);let v=(0,X.useMemo)(()=>{if(!c?.published_at)return me.allTime.value;let e=he(c.published_at),{startDate:t,endDate:n}=W(o);return n.diff(t,`days`)+1>e?e:o},[c?.published_at,o]),{startDate:y,endDate:b,timezone:x}=W(v),S=(0,X.useCallback)(()=>{let e=re(m.current);e&&e.scrollTo({top:0,behavior:`smooth`})},[]),C=(0,X.useMemo)(()=>{let e={};return h.forEach(t=>{let n=t.field,r=t.values;if(n===`audience`)return;let i=r&&r.length>0&&r[0]!==null&&r[0]!==void 0,a=n===`source`&&r?.[0]===``;if(i&&(r[0]!==``||a)){let t=String(r[0]);e[n]=t}}),e},[h]),w=(0,X.useCallback)((e,t)=>{g(n=>n.find(t=>t.field===e)?n.map(n=>n.field===e?{...n,values:[t]}:n):[...n,ae(e,`is`,[t])]),S()},[g,S]),T=(0,X.useCallback)(e=>w(`location`,e),[w]),E=(0,X.useCallback)(e=>w(`source`,e),[w]),D=(0,X.useMemo)(()=>{let e={site_uuid:n?.id||``,date_from:B(y),date_to:B(b),timezone:x,member_status:Ce(_),post_uuid:``,...C};return!d&&c?.uuid?{...e,post_uuid:c.uuid}:e},[d,c,n?.id,y,b,x,_,C]),{data:O,loading:k}=a({endpoint:`api_kpis`,statsConfig:n,params:D}),{data:A,loading:j}=a({endpoint:`api_top_locations`,statsConfig:n,params:D}),{data:M,loading:N}=a({endpoint:`api_top_sources`,statsConfig:n,params:D}),P=(0,X.useMemo)(()=>A?.reduce((e,t)=>e+Number(t.visits),0)||0,[A]),F=(0,X.useMemo)(()=>M?M.reduce((e,t)=>e+Number(t.visits||0),0):0,[M]),I=i.url,L=i.icon,R=(0,X.useMemo)(()=>{let e=A?.map(e=>({location:String(e.location),visits:Number(e.visits),percentage:P>0?Number(e.visits)/P:0,isUnknown:U.includes(String(e.location))}))||[],t=e.filter(e=>!e.isUnknown),n=e.filter(e=>e.isUnknown),r=n.length>0?[{location:`Unknown`,visits:n.reduce((e,t)=>e+t.visits,0),percentage:n.reduce((e,t)=>e+t.percentage,0)}]:[];return[...t,...r]},[A,P]),z=r||d||k||j||N,V=Y(O),H=h.length>0;return p&&!p.analytics?.webAnalytics?(0,Z.jsx)(ne,{to:`/posts/analytics/${t}`,replace:!0}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(se,{currentTab:`Web`,children:[H&&(0,Z.jsx)(l,{children:(0,Z.jsx)(G,{range:o,onRangeChange:s})}),(0,Z.jsxs)(l,{className:`${H?`mt-0! [grid-area:subactions] lg:mt-[25px]!`:`[grid-area:actions]`}`,children:[(0,Z.jsx)(le,{filters:h,postUuid:c?.uuid,range:o,onChange:g}),!H&&(0,Z.jsx)(G,{range:o,onRangeChange:s})]})]}),(0,Z.jsx)(oe,{ref:m,children:z?(0,Z.jsx)(u,{className:`size-full`,variant:`plain`,children:(0,Z.jsx)(f,{className:`size-full items-center justify-center`,children:(0,Z.jsx)(fe,{})})}):O&&O.length!==0&&V.visits!==`0`?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(Oe,{data:O,range:v}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-6 lg:grid lg:grid-cols-2`,children:[(0,Z.jsx)(je,{data:R,isLoading:j,onLocationClick:T}),(0,Z.jsx)(De,{data:M,range:v,siteIcon:L,siteUrl:I,totalVisitors:F,onSourceClick:E})]})]}):(0,Z.jsx)(`div`,{className:`grow`,children:(0,Z.jsx)(ce,{className:`h-full`,description:`Try adjusting filters to see more data.`,title:`No visitors ${Ee(o)}`,children:(0,Z.jsx)(ie,{strokeWidth:1.5})})})})]})};export{Me as default};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<link rel="stylesheet" href="./assets/vendor-3bf602dfa6463c3400ffd81697767274.css">
|
|
5
5
|
<link rel="stylesheet" href="./assets/ghost-978d925f8d4176d9f0c149706826cc66.css">
|
|
6
|
-
<meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.52%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22d88afb2bac%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%2267732ba4da%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%22d9b9c1255f%22%2C%
|
|
6
|
+
<meta name="ghost-admin/config/environment" content="%7B%22modulePrefix%22%3A%22ghost-admin%22%2C%22environment%22%3A%22production%22%2C%22editorUrl%22%3A%22%22%2C%22rootURL%22%3A%22%22%2C%22locationType%22%3A%22trailing-hash%22%2C%22EmberENV%22%3A%7B%22FEATURES%22%3A%7B%7D%2C%22EXTEND_PROTOTYPES%22%3A%7B%22Date%22%3Afalse%2C%22Array%22%3Atrue%2C%22String%22%3Atrue%2C%22Function%22%3Afalse%7D%2C%22_APPLICATION_TEMPLATE_WRAPPER%22%3Afalse%2C%22_JQUERY_INTEGRATION%22%3Atrue%2C%22_TEMPLATE_ONLY_GLIMMER_COMPONENTS%22%3Atrue%7D%2C%22APP%22%3A%7B%22version%22%3A%226.52%22%2C%22name%22%3A%22ghost-admin%22%7D%2C%22ember-simple-auth%22%3A%7B%7D%2C%22%40sentry%2Fember%22%3A%7B%22disablePerformance%22%3Atrue%2C%22sentry%22%3A%7B%7D%7D%2C%22ember-cli-mirage%22%3A%7B%22usingProxy%22%3Afalse%2C%22useDefaultPassthroughs%22%3Atrue%7D%2C%22exportApplicationGlobal%22%3Afalse%2C%22ember-load%22%3A%7B%22loadingIndicatorClass%22%3A%22ember-load-indicator%22%7D%2C%22editorFilename%22%3A%22koenig-lexical.umd.js%22%2C%22editorHash%22%3A%22d88afb2bac%22%2C%22adminXSettingsFilename%22%3A%22admin-x-settings.js%22%2C%22adminXSettingsHash%22%3A%2267732ba4da%22%2C%22activitypubFilename%22%3A%22activitypub.js%22%2C%22activitypubHash%22%3A%22d9b9c1255f%22%2C%22activitypubRemoteConfigUrl%22%3A%22%2F.ghost%2Factivitypub%2Fstable%2Fclient-config%22%7D">
|
|
7
7
|
|
|
8
8
|
<meta charset="UTF-8" />
|
|
9
9
|
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
<link rel="shortcut icon" href="./assets/favicon-C_q1KHzv.ico" />
|
|
22
22
|
<link rel="apple-touch-icon" href="./assets/apple-touch-icon-DhO18_4B.png" />
|
|
23
|
-
<script type="module" crossorigin src="./assets/index-
|
|
23
|
+
<script type="module" crossorigin src="./assets/index-B5yxmQNp.js"></script>
|
|
24
24
|
<link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-DAXXjFlN.js">
|
|
25
25
|
<link rel="modulepreload" crossorigin href="./assets/react-Bb3IsNbi.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="./assets/react-dom-C6aoWSfl.js">
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
<link rel="modulepreload" crossorigin href="./assets/dist-CqWm6lIL.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="./assets/chunk-KS7C4IRE-DG9HTHQ3.js">
|
|
40
40
|
<link rel="modulepreload" crossorigin href="./assets/button-DiwO9Rof.js">
|
|
41
|
-
<link rel="modulepreload" crossorigin href="./assets/router-provider-
|
|
41
|
+
<link rel="modulepreload" crossorigin href="./assets/router-provider-S8Wf6jdu.js">
|
|
42
42
|
<link rel="modulepreload" crossorigin href="./assets/update-queries-C4CnvJaW.js">
|
|
43
43
|
<link rel="modulepreload" crossorigin href="./assets/users-Y8qhvF1q.js">
|
|
44
44
|
<link rel="stylesheet" crossorigin href="./assets/index-CeWc1b5F.css">
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
<div id="ember-liquid-wormhole"></div>
|
|
62
62
|
<div id="ember-notifications-wormhole"></div>
|
|
63
63
|
<script src="./assets/vendor-25f0bb2b2de85265afdf33da79f14a44.js"></script>
|
|
64
|
-
<script src="./assets/chunk.
|
|
65
|
-
<script src="./assets/chunk.
|
|
66
|
-
<script src="./assets/chunk.524.
|
|
64
|
+
<script src="./assets/chunk.251.dd82df30188bb633b4ae.js"></script>
|
|
65
|
+
<script src="./assets/chunk.341.20e7d2936dfa5877deea.js"></script>
|
|
66
|
+
<script src="./assets/chunk.524.697bf0ded48e7c994fc3.js"></script>
|
|
67
67
|
<script src="./assets/ghost-6be8d01cf53ab18d25328c7424cb50d3.js"></script>
|
|
68
68
|
</body>
|
|
69
69
|
</html>
|
|
@@ -12,12 +12,15 @@ exports.fetchAndLockSteps = fetchAndLockSteps;
|
|
|
12
12
|
exports.finishStepAndEnqueueNext = finishStepAndEnqueueNext;
|
|
13
13
|
exports.markStepTerminal = markStepTerminal;
|
|
14
14
|
exports.retryStep = retryStep;
|
|
15
|
+
exports.recordEmailSent = recordEmailSent;
|
|
15
16
|
const errors_1 = __importDefault(require("@tryghost/errors"));
|
|
16
17
|
const tpl_1 = __importDefault(require("@tryghost/tpl"));
|
|
17
18
|
const bson_objectid_1 = __importDefault(require("bson-objectid"));
|
|
18
19
|
const zod_1 = require("zod");
|
|
19
20
|
const database_automations_repository_1 = require("./database-automations-repository");
|
|
20
21
|
const fake_wait_hours_multiplier_1 = require("./fake-wait-hours-multiplier");
|
|
22
|
+
// @ts-expect-error Models currently lack type definitions.
|
|
23
|
+
const models_1 = require("../../models");
|
|
21
24
|
const { knex } = require('../../data/db');
|
|
22
25
|
const domainEvents = require('@tryghost/domain-events');
|
|
23
26
|
const labs = require('../../../shared/labs');
|
|
@@ -299,3 +302,20 @@ async function markStepTerminal(...args) {
|
|
|
299
302
|
async function retryStep(...args) {
|
|
300
303
|
return await repository.retryStep(...args);
|
|
301
304
|
}
|
|
305
|
+
async function recordEmailSent(options) {
|
|
306
|
+
await knex.transaction(async (transacting) => {
|
|
307
|
+
await models_1.AutomatedEmailRecipient.add({
|
|
308
|
+
member_id: options.memberId,
|
|
309
|
+
member_uuid: options.memberUuid,
|
|
310
|
+
member_email: options.memberEmail,
|
|
311
|
+
member_name: options.memberName,
|
|
312
|
+
automation_action_revision_id: options.automationActionRevisionId,
|
|
313
|
+
track_opens: options.trackOpens
|
|
314
|
+
}, { transacting });
|
|
315
|
+
await transacting('automation_action_revisions')
|
|
316
|
+
.where('id', options.automationActionRevisionId)
|
|
317
|
+
.update({
|
|
318
|
+
email_sent_count: transacting.raw('COALESCE(??, 0) + ?', ['email_sent_count', 1])
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
}
|
|
@@ -2,12 +2,15 @@ import errors from '@tryghost/errors';
|
|
|
2
2
|
import tpl from '@tryghost/tpl';
|
|
3
3
|
import ObjectId from 'bson-objectid';
|
|
4
4
|
import {z} from 'zod';
|
|
5
|
+
import {type Knex} from 'knex';
|
|
5
6
|
import {createDatabaseAutomationsRepository} from './database-automations-repository';
|
|
6
7
|
import {parseFakeWaitHoursMultiplier} from './fake-wait-hours-multiplier';
|
|
7
8
|
import type {
|
|
8
9
|
AutomationsRepository,
|
|
9
10
|
EditAutomationData
|
|
10
11
|
} from './automations-repository';
|
|
12
|
+
// @ts-expect-error Models currently lack type definitions.
|
|
13
|
+
import {AutomatedEmailRecipient} from '../../models';
|
|
11
14
|
|
|
12
15
|
const {knex} = require('../../data/db');
|
|
13
16
|
const domainEvents = require('@tryghost/domain-events');
|
|
@@ -359,3 +362,31 @@ export async function markStepTerminal(...args: Parameters<AutomationsRepository
|
|
|
359
362
|
export async function retryStep(...args: Parameters<AutomationsRepository['retryStep']>) {
|
|
360
363
|
return await repository.retryStep(...args);
|
|
361
364
|
}
|
|
365
|
+
|
|
366
|
+
export type RecordEmailSentOptions = Readonly<{
|
|
367
|
+
automationActionRevisionId: string;
|
|
368
|
+
memberEmail: string;
|
|
369
|
+
memberId: string;
|
|
370
|
+
memberName: string | null;
|
|
371
|
+
memberUuid: string;
|
|
372
|
+
trackOpens: boolean;
|
|
373
|
+
}>;
|
|
374
|
+
|
|
375
|
+
export async function recordEmailSent(options: RecordEmailSentOptions): Promise<void> {
|
|
376
|
+
await knex.transaction(async (transacting: Knex.Transaction) => {
|
|
377
|
+
await AutomatedEmailRecipient.add({
|
|
378
|
+
member_id: options.memberId,
|
|
379
|
+
member_uuid: options.memberUuid,
|
|
380
|
+
member_email: options.memberEmail,
|
|
381
|
+
member_name: options.memberName,
|
|
382
|
+
automation_action_revision_id: options.automationActionRevisionId,
|
|
383
|
+
track_opens: options.trackOpens
|
|
384
|
+
}, {transacting});
|
|
385
|
+
|
|
386
|
+
await transacting('automation_action_revisions')
|
|
387
|
+
.where('id', options.automationActionRevisionId)
|
|
388
|
+
.update({
|
|
389
|
+
email_sent_count: transacting.raw('COALESCE(??, 0) + ?', ['email_sent_count', 1])
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
}
|
|
@@ -124,14 +124,14 @@ const processStep = async ({ automationsApi, memberWelcomeEmailService, step })
|
|
|
124
124
|
memberStatus
|
|
125
125
|
});
|
|
126
126
|
try {
|
|
127
|
-
await
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
127
|
+
await automationsApi.recordEmailSent({
|
|
128
|
+
automationActionRevisionId: step.automation_action_revision_id,
|
|
129
|
+
memberEmail: member.get('email'),
|
|
130
|
+
memberId: step.member_id,
|
|
131
|
+
memberName: member.get('name'),
|
|
132
|
+
memberUuid: member.get('uuid'),
|
|
133
133
|
// TODO(NY-1439) Don't always set this to false.
|
|
134
|
-
|
|
134
|
+
trackOpens: false
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
137
|
catch (err) {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type {AutomationStepToRun, AutomationsRepository} from './automations-repository';
|
|
2
|
+
import type {RecordEmailSentOptions} from './automations-api';
|
|
2
3
|
import logging from '@tryghost/logging';
|
|
3
4
|
import errors from '@tryghost/errors';
|
|
4
5
|
import {MEMBER_WELCOME_EMAIL_ELIGIBLE_STATUSES, MEMBER_WELCOME_EMAIL_SLUGS} from '../member-welcome-emails/constants';
|
|
5
6
|
import {MAX_ATTEMPTS, MAX_STEPS_PER_BATCH, RETRY_DELAY_MS} from './constants';
|
|
6
7
|
// @ts-expect-error Models currently lack type definitions.
|
|
7
|
-
import {
|
|
8
|
+
import {Member} from '../../models';
|
|
8
9
|
|
|
9
10
|
type MemberWelcomeEmailService = {
|
|
10
11
|
init: () => unknown;
|
|
@@ -40,7 +41,9 @@ type PollOptions = {
|
|
|
40
41
|
'finishStepAndEnqueueNext' |
|
|
41
42
|
'markStepTerminal' |
|
|
42
43
|
'retryStep'
|
|
43
|
-
|
|
44
|
+
> & {
|
|
45
|
+
recordEmailSent(options: RecordEmailSentOptions): Promise<void>;
|
|
46
|
+
};
|
|
44
47
|
enqueueAnotherPollAt: (date: Readonly<Date>) => unknown;
|
|
45
48
|
memberWelcomeEmailService: MemberWelcomeEmailService;
|
|
46
49
|
};
|
|
@@ -190,14 +193,14 @@ const processStep = async ({
|
|
|
190
193
|
memberStatus
|
|
191
194
|
});
|
|
192
195
|
try {
|
|
193
|
-
await
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
196
|
+
await automationsApi.recordEmailSent({
|
|
197
|
+
automationActionRevisionId: step.automation_action_revision_id,
|
|
198
|
+
memberEmail: member.get('email'),
|
|
199
|
+
memberId: step.member_id,
|
|
200
|
+
memberName: member.get('name'),
|
|
201
|
+
memberUuid: member.get('uuid'),
|
|
199
202
|
// TODO(NY-1439) Don't always set this to false.
|
|
200
|
-
|
|
203
|
+
trackOpens: false
|
|
201
204
|
});
|
|
202
205
|
} catch (err) {
|
|
203
206
|
logging.error({
|
|
@@ -7,8 +7,8 @@ const DEFAULT_TAGS = ['bulk-email'];
|
|
|
7
7
|
class EmailAnalyticsProviderMailgun {
|
|
8
8
|
mailgunClient;
|
|
9
9
|
|
|
10
|
-
constructor({config, settings
|
|
11
|
-
this.mailgunClient = new MailgunClient({config, settings
|
|
10
|
+
constructor({config, settings}) {
|
|
11
|
+
this.mailgunClient = new MailgunClient({config, settings});
|
|
12
12
|
this.tags = [...DEFAULT_TAGS];
|
|
13
13
|
|
|
14
14
|
if (config.get('bulkEmail:mailgun:tag')) {
|
|
@@ -18,7 +18,6 @@ class EmailAnalyticsServiceWrapper {
|
|
|
18
18
|
const StartEmailAnalyticsJobEvent = require('./events/start-email-analytics-job-event');
|
|
19
19
|
const domainEvents = require('@tryghost/domain-events');
|
|
20
20
|
const settings = require('../../../shared/settings-cache');
|
|
21
|
-
const labs = require('../../../shared/labs');
|
|
22
21
|
const db = require('../../data/db');
|
|
23
22
|
const queries = require('./lib/queries');
|
|
24
23
|
const membersService = require('../members');
|
|
@@ -51,9 +50,7 @@ class EmailAnalyticsServiceWrapper {
|
|
|
51
50
|
config,
|
|
52
51
|
settings,
|
|
53
52
|
eventProcessor,
|
|
54
|
-
|
|
55
|
-
new MailgunProvider({config, settings, labs})
|
|
56
|
-
],
|
|
53
|
+
provider: new MailgunProvider({config, settings}),
|
|
57
54
|
queries,
|
|
58
55
|
domainEvents,
|
|
59
56
|
prometheusClient
|
|
@@ -59,7 +59,7 @@ module.exports = class EmailAnalyticsService {
|
|
|
59
59
|
settings;
|
|
60
60
|
queries;
|
|
61
61
|
eventProcessor;
|
|
62
|
-
|
|
62
|
+
provider;
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
65
|
* @type {FetchData}
|
|
@@ -99,16 +99,16 @@ module.exports = class EmailAnalyticsService {
|
|
|
99
99
|
* @param {object} dependencies.settings
|
|
100
100
|
* @param {object} dependencies.queries
|
|
101
101
|
* @param {EmailEventProcessor} dependencies.eventProcessor
|
|
102
|
-
* @param {object} dependencies.
|
|
102
|
+
* @param {object} dependencies.provider
|
|
103
103
|
* @param {import('@tryghost/domain-events')} dependencies.domainEvents
|
|
104
104
|
* @param {import('@tryghost/prometheus-metrics')} dependencies.prometheusClient
|
|
105
105
|
*/
|
|
106
|
-
constructor({config, settings, queries, eventProcessor,
|
|
106
|
+
constructor({config, settings, queries, eventProcessor, provider, domainEvents, prometheusClient}) {
|
|
107
107
|
this.config = config;
|
|
108
108
|
this.settings = settings;
|
|
109
109
|
this.queries = queries;
|
|
110
110
|
this.eventProcessor = eventProcessor;
|
|
111
|
-
this.
|
|
111
|
+
this.provider = provider;
|
|
112
112
|
this.domainEvents = domainEvents;
|
|
113
113
|
this.prometheusClient = prometheusClient;
|
|
114
114
|
|
|
@@ -451,9 +451,7 @@ module.exports = class EmailAnalyticsService {
|
|
|
451
451
|
};
|
|
452
452
|
|
|
453
453
|
try {
|
|
454
|
-
|
|
455
|
-
await provider.fetchLatest(processBatch, {begin, end, maxEvents, events: eventTypes});
|
|
456
|
-
}
|
|
454
|
+
await this.provider.fetchLatest(processBatch, {begin, end, maxEvents, events: eventTypes});
|
|
457
455
|
} catch (err) {
|
|
458
456
|
if (err.message !== 'Fetching canceled') {
|
|
459
457
|
logging.error('[EmailAnalytics] Error while fetching');
|
|
@@ -17,6 +17,8 @@ module.exports = async (event, model) => {
|
|
|
17
17
|
let current = {};
|
|
18
18
|
let previous = {};
|
|
19
19
|
|
|
20
|
+
const changed = model._changed ? Object.keys(model._changed) : [];
|
|
21
|
+
|
|
20
22
|
if (Object.keys(model.attributes).length) {
|
|
21
23
|
let frame = {options: {previous: false, context: {user: true}}};
|
|
22
24
|
|
|
@@ -45,7 +47,7 @@ module.exports = async (event, model) => {
|
|
|
45
47
|
current = frame.response[docName][0];
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
if (Object.keys(model._previousAttributes).length) {
|
|
50
|
+
if (changed.length && Object.keys(model._previousAttributes).length) {
|
|
49
51
|
const frame = {options: {previous: true, context: {user: true}}};
|
|
50
52
|
|
|
51
53
|
switch (docName) {
|
|
@@ -62,15 +64,14 @@ module.exports = async (event, model) => {
|
|
|
62
64
|
.serializers
|
|
63
65
|
.handle
|
|
64
66
|
.output(model, {docName: docName, method: 'read'}, api.serializers.output, frame);
|
|
65
|
-
previous = frame.response[docName][0];
|
|
67
|
+
previous = _.pick(frame.response[docName][0], changed);
|
|
66
68
|
}
|
|
67
69
|
|
|
68
|
-
const changed = model._changed ? Object.keys(model._changed) : [];
|
|
69
70
|
|
|
70
71
|
const payload = {
|
|
71
72
|
[docName.replace(/s$/, '')]: {
|
|
72
|
-
current
|
|
73
|
-
previous
|
|
73
|
+
current,
|
|
74
|
+
previous
|
|
74
75
|
}
|
|
75
76
|
};
|
|
76
77
|
|
package/package.json
CHANGED
package/pnpm-lock.yaml
CHANGED
|
@@ -3320,48 +3320,48 @@ packages:
|
|
|
3320
3320
|
resolution: {integrity: sha512-Wlwr1R8oeU6HLB7RB1g6VxAH6VEZIaXTVV2GdvCbipK+TA0MIo6YOQUgrIky25RpyRqKXR0UuDIfXDB4+S+GgQ==}
|
|
3321
3321
|
|
|
3322
3322
|
'@tryghost/kg-card-factory@file:components/tryghost-kg-card-factory-5.2.3.tgz':
|
|
3323
|
-
resolution: {integrity: sha512-
|
|
3323
|
+
resolution: {integrity: sha512-BZ7cwHWtVWwAXN/gBHjbGn+Wh+XCoHSEZO6LQYx7OrcST8amUQ4cMjDB9jHxTWNHAmwRYr4ghcMgpKg2uaeJCA==, tarball: file:components/tryghost-kg-card-factory-5.2.3.tgz}
|
|
3324
3324
|
version: 5.2.3
|
|
3325
3325
|
engines: {node: ^22.13.1 || ^24.0.0}
|
|
3326
3326
|
|
|
3327
3327
|
'@tryghost/kg-clean-basic-html@file:components/tryghost-kg-clean-basic-html-4.3.3.tgz':
|
|
3328
|
-
resolution: {integrity: sha512-
|
|
3328
|
+
resolution: {integrity: sha512-FdHRRcbCrTNxZiToPs3kPQv4Bh8P1VMa2S7cQ4Bdef0R03Wu5BmmUIAiSpnRB2gkqf0yp55gPApv8hgrsUBnUA==, tarball: file:components/tryghost-kg-clean-basic-html-4.3.3.tgz}
|
|
3329
3329
|
version: 4.3.3
|
|
3330
3330
|
engines: {node: ^22.13.1 || ^24.0.0}
|
|
3331
3331
|
|
|
3332
3332
|
'@tryghost/kg-converters@file:components/tryghost-kg-converters-1.2.3.tgz':
|
|
3333
|
-
resolution: {integrity: sha512-
|
|
3333
|
+
resolution: {integrity: sha512-7nu8Aq2VP5sAuxldyLLHej3q8Ro63Si2yveS9NU+rdd6hAdUDcOL+U6VRCKLU4BwfZhAk7HTLn/ORlxCOi2+vA==, tarball: file:components/tryghost-kg-converters-1.2.3.tgz}
|
|
3334
3334
|
version: 1.2.3
|
|
3335
3335
|
|
|
3336
3336
|
'@tryghost/kg-default-cards@file:components/tryghost-kg-default-cards-10.3.3.tgz':
|
|
3337
|
-
resolution: {integrity: sha512-
|
|
3337
|
+
resolution: {integrity: sha512-B0L8H6Rjz6K+/VY8rgPB7rHa6QwQFdPuekgYD37BQDvuFSsp5vUyVpAO+Ooa+Bs00T/xx9ah/WL3pQ2ROZFeUg==, tarball: file:components/tryghost-kg-default-cards-10.3.3.tgz}
|
|
3338
3338
|
version: 10.3.3
|
|
3339
3339
|
engines: {node: ^22.13.1 || ^24.0.0}
|
|
3340
3340
|
|
|
3341
3341
|
'@tryghost/kg-default-nodes@file:components/tryghost-kg-default-nodes-2.1.3.tgz':
|
|
3342
|
-
resolution: {integrity: sha512-
|
|
3342
|
+
resolution: {integrity: sha512-evKUBugCtloMmpzAkks9a2eL65xuISZyx7QlIT3wKDH7+U1HnqqzKCP9jlI7Mm5Y+zi9QW1WbVpz7FWIIdL/Hw==, tarball: file:components/tryghost-kg-default-nodes-2.1.3.tgz}
|
|
3343
3343
|
version: 2.1.3
|
|
3344
3344
|
engines: {node: ^22.13.1 || ^24.0.0}
|
|
3345
3345
|
|
|
3346
3346
|
'@tryghost/kg-default-transforms@file:components/tryghost-kg-default-transforms-1.3.3.tgz':
|
|
3347
|
-
resolution: {integrity: sha512-
|
|
3347
|
+
resolution: {integrity: sha512-VUwRL/5isifrE8U/kYDTal2c/FiQaUjSGD6X+XABSCqGVh6EN0EHmKDKcfMt3OaH/J26gy9swwcEpyu+3MhVqg==, tarball: file:components/tryghost-kg-default-transforms-1.3.3.tgz}
|
|
3348
3348
|
version: 1.3.3
|
|
3349
3349
|
|
|
3350
3350
|
'@tryghost/kg-html-to-lexical@file:components/tryghost-kg-html-to-lexical-1.3.3.tgz':
|
|
3351
|
-
resolution: {integrity: sha512
|
|
3351
|
+
resolution: {integrity: sha512-+cmSm6gHCA5wuDZEAqMMORhtYV+UJcAcWRcA+8F4PDZU9hOTDytzk2gvG95R82Nxq6Pfc15Jegu4vlqEfgwD9A==, tarball: file:components/tryghost-kg-html-to-lexical-1.3.3.tgz}
|
|
3352
3352
|
version: 1.3.3
|
|
3353
3353
|
|
|
3354
3354
|
'@tryghost/kg-lexical-html-renderer@file:components/tryghost-kg-lexical-html-renderer-1.4.3.tgz':
|
|
3355
|
-
resolution: {integrity: sha512-
|
|
3355
|
+
resolution: {integrity: sha512-uSvf3Eu+AfNpx014SQfjtqw3wZOKaL2NyoOxHYwbWGjUE61K6vPznfls47M50D+ejmOZHIX5y9luw8gbm7SXqw==, tarball: file:components/tryghost-kg-lexical-html-renderer-1.4.3.tgz}
|
|
3356
3356
|
version: 1.4.3
|
|
3357
3357
|
|
|
3358
3358
|
'@tryghost/kg-markdown-html-renderer@file:components/tryghost-kg-markdown-html-renderer-7.2.3.tgz':
|
|
3359
|
-
resolution: {integrity: sha512-
|
|
3359
|
+
resolution: {integrity: sha512-Tad0ZWSP1ytxaO6tWsl390hKAqn1YFO+yKplE95SgVN9bOClwqqwYGTeN5g1OuHNW5FiYcDnQdzqqAiIWldfiA==, tarball: file:components/tryghost-kg-markdown-html-renderer-7.2.3.tgz}
|
|
3360
3360
|
version: 7.2.3
|
|
3361
3361
|
engines: {node: ^22.13.1 || ^24.0.0}
|
|
3362
3362
|
|
|
3363
3363
|
'@tryghost/kg-utils@file:components/tryghost-kg-utils-1.1.3.tgz':
|
|
3364
|
-
resolution: {integrity: sha512-
|
|
3364
|
+
resolution: {integrity: sha512-JOxv6KgeE2xpE1FC6E0VtDQHb9KseCEbktPxo3z/wu8mG3Lrh4dmMHYQO6xajcB+i7go05IhlMubeTHxWHoU+Q==, tarball: file:components/tryghost-kg-utils-1.1.3.tgz}
|
|
3365
3365
|
version: 1.1.3
|
|
3366
3366
|
|
|
3367
3367
|
'@tryghost/limit-service@1.5.6':
|
|
@@ -5431,8 +5431,8 @@ packages:
|
|
|
5431
5431
|
end-of-stream@1.4.5:
|
|
5432
5432
|
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
|
|
5433
5433
|
|
|
5434
|
-
enhanced-resolve@5.24.
|
|
5435
|
-
resolution: {integrity: sha512-
|
|
5434
|
+
enhanced-resolve@5.24.1:
|
|
5435
|
+
resolution: {integrity: sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==}
|
|
5436
5436
|
engines: {node: '>=10.13.0'}
|
|
5437
5437
|
|
|
5438
5438
|
entities@1.1.2:
|
|
@@ -15553,7 +15553,7 @@ snapshots:
|
|
|
15553
15553
|
dependencies:
|
|
15554
15554
|
once: 1.4.0
|
|
15555
15555
|
|
|
15556
|
-
enhanced-resolve@5.24.
|
|
15556
|
+
enhanced-resolve@5.24.1:
|
|
15557
15557
|
dependencies:
|
|
15558
15558
|
graceful-fs: 4.2.11
|
|
15559
15559
|
tapable: 2.3.3
|
|
@@ -15704,7 +15704,7 @@ snapshots:
|
|
|
15704
15704
|
eslint-plugin-n@17.24.0(eslint@9.39.4(jiti@2.7.0))(typescript@5.9.3):
|
|
15705
15705
|
dependencies:
|
|
15706
15706
|
'@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4(jiti@2.7.0))
|
|
15707
|
-
enhanced-resolve: 5.24.
|
|
15707
|
+
enhanced-resolve: 5.24.1
|
|
15708
15708
|
eslint: 9.39.4(jiti@2.7.0)
|
|
15709
15709
|
eslint-plugin-es-x: 7.8.0(eslint@9.39.4(jiti@2.7.0))
|
|
15710
15710
|
get-tsconfig: 4.14.0
|
package/pnpm-workspace.yaml
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
catalog:
|
|
2
2
|
'@ebay/nice-modal-react': 1.2.13
|
|
3
|
+
'@eslint/compat': 2.1.0
|
|
3
4
|
'@eslint/js': 9.39.4
|
|
4
5
|
'@faker-js/faker': 10.5.0
|
|
5
6
|
'@playwright/test': 1.61.1
|
|
@@ -19,6 +20,7 @@ catalog:
|
|
|
19
20
|
'@tailwindcss/postcss': 4.2.2
|
|
20
21
|
'@tailwindcss/vite': 4.2.2
|
|
21
22
|
'@tanstack/react-query': 4.44.0
|
|
23
|
+
'@tanstack/react-virtual': 3.14.5
|
|
22
24
|
'@testing-library/jest-dom': 6.9.1
|
|
23
25
|
'@testing-library/react': 14.3.1
|
|
24
26
|
'@tryghost/api-framework': 3.2.4
|
|
@@ -37,6 +39,7 @@ catalog:
|
|
|
37
39
|
'@types/express': 4.17.25
|
|
38
40
|
'@types/html-minifier': ^4.0.6
|
|
39
41
|
'@types/jest': 29.5.14
|
|
42
|
+
'@types/jsdom': 28.0.3
|
|
40
43
|
'@types/node': 22.20.0
|
|
41
44
|
'@types/react': 18.3.31
|
|
42
45
|
'@types/react-dom': 18.3.7
|
|
@@ -55,6 +58,7 @@ catalog:
|
|
|
55
58
|
concurrently: 10.0.3
|
|
56
59
|
country-flag-icons: 1.6.20
|
|
57
60
|
cross-fetch: 4.1.0
|
|
61
|
+
dependency-cruiser: ^18.0.0
|
|
58
62
|
dequal: 2.0.3
|
|
59
63
|
dompurify: 3.4.11
|
|
60
64
|
dotenv: 17.4.2
|
|
@@ -87,6 +91,7 @@ catalog:
|
|
|
87
91
|
storybook: 10.4.6
|
|
88
92
|
supertest: 7.2.2
|
|
89
93
|
tailwindcss: 4.2.2
|
|
94
|
+
temporal-polyfill: 0.3.2
|
|
90
95
|
tldts: ^7.4.4
|
|
91
96
|
tsx: 4.23.0
|
|
92
97
|
tw-animate-css: 1.4.0
|