zframes 0.8.1 → 0.9.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.
- package/dist/index.js +525 -8
- package/package.json +10 -10
- package/runtime/assets/bar-chart-CMWrEpFm.js +1 -0
- package/runtime/assets/bitcoin-dominance-CDZbSLQ9.js +1 -0
- package/runtime/assets/breakeven-N9JfaLs2.js +1 -0
- package/runtime/assets/breathing-CSiaHH2d.js +1 -0
- package/runtime/assets/btc-block-size-bars-BwGQm2NA.js +1 -0
- package/runtime/assets/btc-blocks-CFz6DrIF.js +1 -0
- package/runtime/assets/btc-difficulty-bSLdWqGX.js +1 -0
- package/runtime/assets/btc-difficulty-chart-D6il3x9b.js +1 -0
- package/runtime/assets/btc-fees-CwRPq2S2.js +1 -0
- package/runtime/assets/btc-hashrate-_PbwOOj4.js +1 -0
- package/runtime/assets/btc-in-gold-JNXTU7sM.js +1 -0
- package/runtime/assets/btc-mempool-DivYz6mX.js +1 -0
- package/runtime/assets/btc-shared-BC2IjkCh.js +1 -0
- package/runtime/assets/bubbles-shared-BgKUWrak.js +1 -0
- package/runtime/assets/calculator-F474oCeb.js +1 -0
- package/runtime/assets/capital-structure-bars-BHtcggyu.js +1 -0
- package/runtime/assets/chain-activity-Db-zx6eG.js +1 -0
- package/runtime/assets/chain-activity-bars-CPhHE6lU.js +1 -0
- package/runtime/assets/chain-activity-scatter-CU7D3Nx9.js +1 -0
- package/runtime/assets/chain-price-movers-Vym50Lcy.js +1 -0
- package/runtime/assets/chart-utils-Ba8AFSZR.js +1 -0
- package/runtime/assets/checklist-BSCOZLJ-.js +1 -0
- package/runtime/assets/clock-C5hPRu82.js +1 -0
- package/runtime/assets/coin-momentum-heatmap-DbHsWjP2.js +1 -0
- package/runtime/assets/coin-momentum-scatter-5wS64urM.js +1 -0
- package/runtime/assets/coin-movers-BPifHhH2.js +1 -0
- package/runtime/assets/content-shared-CrVCFeOp.js +1 -0
- package/runtime/assets/countdown-9cgAKml3.js +1 -0
- package/runtime/assets/custom-data-A7UR4hIt.js +1 -0
- package/runtime/assets/cycle-shared-D8LQcBSw.js +1 -0
- package/runtime/assets/cycle-signals-CmEenZJE.js +1 -0
- package/runtime/assets/cycle-valuation-composite-olTWmWgj.js +1 -0
- package/runtime/assets/d3-BDRmnSFu.js +1 -0
- package/runtime/assets/daily-analysis-DmNxxfsL.js +1 -0
- package/runtime/assets/day-meter-DYYqZgFQ.js +1 -0
- package/runtime/assets/defi-revenue-BwnWnaOl.js +1 -0
- package/runtime/assets/dex-hot-pools-5sl00AOK.js +1 -0
- package/runtime/assets/dex-pool-bubbles-KyBmXb-u.js +1 -0
- package/runtime/assets/dex-pool-liquidity-scatter-Cczoa7F0.js +1 -0
- package/runtime/assets/dex-pool-treemap-DmoYWG3V.js +1 -0
- package/runtime/assets/dex-volume-bubbles-lLAheaQp.js +1 -0
- package/runtime/assets/dex-volume-chart-CGCkffrp.js +1 -0
- package/runtime/assets/dex-volume-share-area-figZ1USz.js +1 -0
- package/runtime/assets/dex-volume-treemap-CXXZ330C.js +1 -0
- package/runtime/assets/dice-BRHGwsSK.js +1 -0
- package/runtime/assets/dino-game-DkbgStXN.js +1 -0
- package/runtime/assets/divider-B_ScYYo5.js +1 -0
- package/runtime/assets/dominance-bars-CwFTP6Sh.js +1 -0
- package/runtime/assets/dominance-gauge-DL_JjphD.js +1 -0
- package/runtime/assets/drawdy-Bqx6Qs9j.js +1 -0
- package/runtime/assets/dxy-EDEcDqHS.js +1 -0
- package/runtime/assets/dxy-chart-DZ9Q_k9j.js +1 -0
- package/runtime/assets/editor-DNWRDAc5.css +1 -0
- package/runtime/assets/editor-DchM45os.js +2 -0
- package/runtime/assets/etf-flow-bars-BdLldRsx.js +1 -0
- package/runtime/assets/etf-flow-calendar-QeCVgCXm.js +1 -0
- package/runtime/assets/etf-flows-BokfCz94.js +1 -0
- package/runtime/assets/etf-flows-chart-B7vXhlo1.js +1 -0
- package/runtime/assets/etf-issuer-bars-ZWR-71DZ.js +1 -0
- package/runtime/assets/etf-issuer-treemap-zM5ZN913.js +1 -0
- package/runtime/assets/eth-issuance-impact-C0dbmsYs.js +1 -0
- package/runtime/assets/eth-staking-DhS4t_di.js +1 -0
- package/runtime/assets/eth-supply-BDXv32cs.js +1 -0
- package/runtime/assets/fear-greed-Db3YYSrb.js +1 -0
- package/runtime/assets/fear-greed-chart-BUaJVaqb.js +1 -0
- package/runtime/assets/feed-row-qDN72CXa.js +1 -0
- package/runtime/assets/filings-feed-CNEQhc4S.js +1 -0
- package/runtime/assets/filings-mix-BycrOiTn.js +1 -0
- package/runtime/assets/financial-stress-CtL4d_BQ.js +1 -0
- package/runtime/assets/flappy-bird-OADt73RX.js +1 -0
- package/runtime/assets/format-DWMrfgke.js +1 -0
- package/runtime/assets/fundamentals-DeZ9OQCp.js +1 -0
- package/runtime/assets/funding-bars-CZicqsRm.js +1 -0
- package/runtime/assets/funding-carry-area-B9WKPWmT.js +1 -0
- package/runtime/assets/funding-comparison-TSJiamEF.js +1 -0
- package/runtime/assets/funding-crowding-scatter-DfPN294N.js +1 -0
- package/runtime/assets/funding-heatmap-BiW7ZLwp.js +1 -0
- package/runtime/assets/funding-leaderboard-bars-C6PF11ps.js +1 -0
- package/runtime/assets/funding-rate-chart-MWU01Uib.js +1 -0
- package/runtime/assets/funding-spread-bars-Br7XsS11.js +1 -0
- package/runtime/assets/funding-venue-heatmap-sPFQ1fzo.js +1 -0
- package/runtime/assets/fx-board-CXrfSPfH.js +1 -0
- package/runtime/assets/fx-cross-heatmap-CHJIg4cN.js +1 -0
- package/runtime/assets/fx-movers-bars-DpD5YR28.js +1 -0
- package/runtime/assets/fx-trend-chart-DXS0-OTV.js +1 -0
- package/runtime/assets/game-ui-DRuW9syP.js +1 -0
- package/runtime/assets/gold-silver-ratio-C1AEhktf.js +1 -0
- package/runtime/assets/gridstack-BJOLV-iY.js +3 -0
- package/runtime/assets/gridstack-Chv4ms9g.css +1 -0
- package/runtime/assets/heading-DMvjA_mI.js +1 -0
- package/runtime/assets/heatmap-chart-CXN9d41C.js +1 -0
- package/runtime/assets/hero-number-BFIUUm5q.js +1 -0
- package/runtime/assets/holiday-calendar-s6CQYrht.js +1 -0
- package/runtime/assets/hooks-CLLchjg6.js +1 -0
- package/runtime/assets/image-Dx6lzZxo.js +1 -0
- package/runtime/assets/image-gallery-DlvoKVqh.js +1 -0
- package/runtime/assets/index-9oCCAb1t.js +1106 -0
- package/runtime/assets/index-tGx-fhSL.css +1 -0
- package/runtime/assets/indicators-YksbfYtF.js +1 -0
- package/runtime/assets/inflation-pulse-DFjPkATF.js +1 -0
- package/runtime/assets/journal-log-DllO3-3Q.js +1 -0
- package/runtime/assets/journal-open-49eapsYs.js +1 -0
- package/runtime/assets/journal-results-CYsmiD33.js +1 -0
- package/runtime/assets/journal-score-BvJ7YMEp.js +1 -0
- package/runtime/assets/journal-store-DcqepoPT.js +1 -0
- package/runtime/assets/journal-ui-CR7uxhyO.js +1 -0
- package/runtime/assets/labor-force-flow-BIAQjzra.js +1 -0
- package/runtime/assets/labor-market-D_4TsgBi.js +1 -0
- package/runtime/assets/lightning-stats-DqM9rjwr.js +1 -0
- package/runtime/assets/link-grid-DUGgdBCS.js +1 -0
- package/runtime/assets/liquidity-basis-bars-BBthK657.js +1 -0
- package/runtime/assets/live-tick-S-lWTthW.js +1 -0
- package/runtime/assets/liveline-BV-xqAVq.js +1 -0
- package/runtime/assets/ma-multiplier-0NdXDf5j.js +1 -0
- package/runtime/assets/macro-calendar-BtFBeUX9.js +1 -0
- package/runtime/assets/market-bubbles-B4CW9pwK.js +1 -0
- package/runtime/assets/market-cap-treemap-ydmUhoNY.js +1 -0
- package/runtime/assets/market-data-BeuX48f-.js +1 -0
- package/runtime/assets/market-hours-B_bTdanw.js +1 -0
- package/runtime/assets/market-scatter-FTzDpslF.js +1 -0
- package/runtime/assets/marquee-sW0gA0u_.js +28 -0
- package/runtime/assets/mayer-multiple-D6T_kVDR.js +1 -0
- package/runtime/assets/mempool-fee-curve-DUsgJQRe.js +1 -0
- package/runtime/assets/metal-annual-returns-CsZDcJs4.js +1 -0
- package/runtime/assets/metal-ath-ChqiN4O-.js +1 -0
- package/runtime/assets/metal-compare-chart-CiOT1Su2.js +1 -0
- package/runtime/assets/metal-cot-breakdown-B83N5bkN.js +1 -0
- package/runtime/assets/metal-cot-gauge-DK-PBRRk.js +1 -0
- package/runtime/assets/metal-cot-net-B5BW2stR.js +1 -0
- package/runtime/assets/metal-drawdown-DZ7uOHIc.js +1 -0
- package/runtime/assets/metal-fix-table-ChbUOgVu.js +1 -0
- package/runtime/assets/metal-milestones-BpfRvE7K.js +1 -0
- package/runtime/assets/metal-open-interest-BFYrS2KP.js +1 -0
- package/runtime/assets/metal-performance-CBD6oX6f.js +1 -0
- package/runtime/assets/metal-positioning-vs-price-BPxrZcR9.js +1 -0
- package/runtime/assets/metal-price-CIZRcE2_.js +1 -0
- package/runtime/assets/metal-price-chart-BX5tGnIt.js +1 -0
- package/runtime/assets/metal-ratio-chart-D99QH7nv.js +1 -0
- package/runtime/assets/metal-return-distribution-B0AAXxe0.js +1 -0
- package/runtime/assets/metal-seasonality-BuQKG4Gi.js +1 -0
- package/runtime/assets/metal-value-CTPzpBvh.js +1 -0
- package/runtime/assets/metal-volatility-g94-b7hn.js +1 -0
- package/runtime/assets/metals-board-DPfkH3Vj.js +1 -0
- package/runtime/assets/metals-correlation-BjZHMzKY.js +1 -0
- package/runtime/assets/metals-shared-CN6-LtS3.js +1 -0
- package/runtime/assets/metric-row-CqsjSvCI.js +1 -0
- package/runtime/assets/mini-line-chart-B0Ixv2kC.js +1 -0
- package/runtime/assets/mining-pools-BpaMCs0f.js +1 -0
- package/runtime/assets/mining-pools-share-CrfTxNKr.js +1 -0
- package/runtime/assets/misery-index-BU2requD.js +1 -0
- package/runtime/assets/money-BHiVNo0u.js +1 -0
- package/runtime/assets/mover-row-DmmszLhN.js +1 -0
- package/runtime/assets/movers-bars-Bp8o2qzk.js +1 -0
- package/runtime/assets/movers-bubbles-BidtAeZE.js +1 -0
- package/runtime/assets/multi-series-line-chart-DyOsZlI2.css +1 -0
- package/runtime/assets/multi-series-line-chart-XRttVKf5.js +1 -0
- package/runtime/assets/mvrv-CrYk75Yb.js +1 -0
- package/runtime/assets/mvrv-zscore-chart-0m51ohsV.js +1 -0
- package/runtime/assets/national-debt-BExrnkxj.js +1 -0
- package/runtime/assets/news-feed-BHQ8VVq_.js +1 -0
- package/runtime/assets/nft-activity-bars-BjGU2vJF.js +1 -0
- package/runtime/assets/nft-bubbles-BU8EpLxc.js +1 -0
- package/runtime/assets/nft-collections-BED52ibd.js +1 -0
- package/runtime/assets/nft-scatter-CGhED2cB.js +1 -0
- package/runtime/assets/nft-treemap-PO55tL6W.js +1 -0
- package/runtime/assets/note-Dgl6DLv8.js +3 -0
- package/runtime/assets/nupl-DglP-qbC.js +1 -0
- package/runtime/assets/nupl-cycle-chart-S9yflXUB.js +1 -0
- package/runtime/assets/nyfed-fed-funds-band-gauge-CFMKcqEc.js +1 -0
- package/runtime/assets/nyfed-reference-rate-bars-C_3KkqpO.js +1 -0
- package/runtime/assets/nyfed-sofr-term-averages-bars-Dqaa52Pl.js +1 -0
- package/runtime/assets/ofr-stress-category-area-DnEjZbRo.js +1 -0
- package/runtime/assets/ohlcv-volume-bars-Bi83GPWW.js +1 -0
- package/runtime/assets/oi-treemap-BbPekPJp.js +1 -0
- package/runtime/assets/onchain-oscillator-overlay-Ck_7aTc_.js +1 -0
- package/runtime/assets/open-interest-B5119LVQ.js +1 -0
- package/runtime/assets/options-flow-skew-Cj0v65sh.js +1 -0
- package/runtime/assets/options-iv-Bbopuw_Z.js +1 -0
- package/runtime/assets/options-max-pain-DkUoBRmq.js +1 -0
- package/runtime/assets/options-max-pain-multi-BZq8vuHy.js +1 -0
- package/runtime/assets/options-oi-ladder-heatmap-BMFAQkEI.js +1 -0
- package/runtime/assets/options-oi-skew-B3eQqfLD.js +1 -0
- package/runtime/assets/options-oi-strike-D1ZtVHSn.js +1 -0
- package/runtime/assets/options-put-call-lwGRvlsC.js +1 -0
- package/runtime/assets/options-vol-smile-zdzBnvMN.js +1 -0
- package/runtime/assets/options-vol-spread-CnZEubR3.js +1 -0
- package/runtime/assets/order-book-depth-CeFNsjv3.js +1 -0
- package/runtime/assets/payrolls-bars-T0e6cyjh.js +1 -0
- package/runtime/assets/pi-cycle-CqX0lAu1.js +1 -0
- package/runtime/assets/pie-chart-cmDhECET.js +1 -0
- package/runtime/assets/pomodoro-BstwVCqa.js +1 -0
- package/runtime/assets/portfolio-allocation-DzjS0F9u.js +1 -0
- package/runtime/assets/portfolio-common-CcbzaPrv.js +1 -0
- package/runtime/assets/portfolio-holdings-1d7jT_Dv.js +1 -0
- package/runtime/assets/portfolio-movers-vdVKKjAL.js +1 -0
- package/runtime/assets/portfolio-value-C2hCsXwG.js +1 -0
- package/runtime/assets/portfolio-value-bars-Bkh18oxT.js +1 -0
- package/runtime/assets/prediction-market-bars-WOea9YlB.js +1 -0
- package/runtime/assets/prediction-market-scatter-Bg8Hp9YU.js +1 -0
- package/runtime/assets/prediction-markets-bubble-DUFbL6ZL.js +1 -0
- package/runtime/assets/prediction-markets-vrOoZGTG.js +1 -0
- package/runtime/assets/price-chart-NGnXyEwF.js +1 -0
- package/runtime/assets/price-compare-D0cu78Tg.js +1 -0
- package/runtime/assets/price-liveline-B_6-t2eO.js +1 -0
- package/runtime/assets/price-ticker-DpNG6jQF.js +1 -0
- package/runtime/assets/protocol-fees-bubbles-CfMsdfGV.js +1 -0
- package/runtime/assets/protocol-fees-treemap-b4z8_0dU.js +1 -0
- package/runtime/assets/protocol-fees-vs-tvl-scatter-D-REm65e.js +1 -0
- package/runtime/assets/protocol-tvl-bubbles-BDAUSzkE.js +1 -0
- package/runtime/assets/protocol-tvl-by-category-fw6ADU1F.js +1 -0
- package/runtime/assets/protocol-tvl-chart-Q1hGvfby.js +1 -0
- package/runtime/assets/protocol-tvl-share-area-DXQzexAL.js +1 -0
- package/runtime/assets/protocol-tvl-treemap-DC_qfwIF.js +1 -0
- package/runtime/assets/puell-multiple-uc0NZXdh.js +1 -0
- package/runtime/assets/put-call-gauge-DtlDFtDZ.js +1 -0
- package/runtime/assets/quote-CuEE1U0a.js +1 -0
- package/runtime/assets/radial-gauge-DUhIBGcM.js +1 -0
- package/runtime/assets/rates-board-Byz3erIf.js +1 -0
- package/runtime/assets/react-DdM8gsnR.js +9 -0
- package/runtime/assets/real-wages-BU2XSTAC.js +1 -0
- package/runtime/assets/realized-price-D91T6q7P.js +1 -0
- package/runtime/assets/reserve-risk-CuRuMPUz.js +1 -0
- package/runtime/assets/returns-projector-DvVTUgZa.js +1 -0
- package/runtime/assets/risk-reward-Brde1Qql.js +1 -0
- package/runtime/assets/rolldown-runtime-Bh1tDfsg.js +1 -0
- package/runtime/assets/rsi-momentum-DFARJhwN.js +1 -0
- package/runtime/assets/rules-card-CDgHHXtE.js +1 -0
- package/runtime/assets/scatter-chart-tjlc1NWO.js +1 -0
- package/runtime/assets/scene-DgXljRUS.js +1 -0
- package/runtime/assets/sector-bars-D0A6Sj3C.js +1 -0
- package/runtime/assets/sector-bubbles-C5lQoTi9.js +1 -0
- package/runtime/assets/sector-performance-CVVJ-VGu.js +1 -0
- package/runtime/assets/sector-treemap-lyftrGDF.js +1 -0
- package/runtime/assets/sentiment-gauge-CdnbFwyn.js +1 -0
- package/runtime/assets/session-progress-BfuN5Ilt.js +1 -0
- package/runtime/assets/short-volume-B2TiqLCD.js +1 -0
- package/runtime/assets/short-volume-bars-Cm-TnzY-.js +1 -0
- package/runtime/assets/snake-D0Secq9I.js +1 -0
- package/runtime/assets/sopr-j5kMKG03.js +1 -0
- package/runtime/assets/spotify-embed-BJIW3cBK.js +1 -0
- package/runtime/assets/stablecoin-chains-jLxaRE9T.js +1 -0
- package/runtime/assets/stablecoin-supply-6Q2kIHWN.js +1 -0
- package/runtime/assets/stacked-area-chart-B3ayMBfx.js +1 -0
- package/runtime/assets/stopwatch-DKtBGcQd.js +1 -0
- package/runtime/assets/timeframe-DUDLPk23.js +1 -0
- package/runtime/assets/tokenized-gold-B6KMvUVf.js +1 -0
- package/runtime/assets/top-movers-Bzz7lloh.js +1 -0
- package/runtime/assets/treasury-auction-demand-scatter-CUoIYkrP.js +1 -0
- package/runtime/assets/treasury-auction-size-bars-DXMJ0a9C.js +1 -0
- package/runtime/assets/treasury-auctions-ChsX0OUJ.js +1 -0
- package/runtime/assets/treasury-avg-rate-bars-DQ_HgQ0U.js +1 -0
- package/runtime/assets/treasury-debt-composition-area-C3sBaNNX.js +1 -0
- package/runtime/assets/treemap-leaf-f-vE1hUM.js +1 -0
- package/runtime/assets/trending-bars-DtgWzD_x.js +1 -0
- package/runtime/assets/trending-bubbles-DRJqfQqK.js +1 -0
- package/runtime/assets/trending-coins-n7mmU4mL.js +1 -0
- package/runtime/assets/tvl-bars-5IQ6zz2M.js +1 -0
- package/runtime/assets/tvl-bubbles-DU2M5Zl1.js +1 -0
- package/runtime/assets/tvl-treemap-qsmpeeAB.js +1 -0
- package/runtime/assets/ui-CYz5SGgR.js +1 -0
- package/runtime/assets/us-gold-reserve-8L2oYWV_.js +1 -0
- package/runtime/assets/us-gold-vaults-TuTFtr2T.js +1 -0
- package/runtime/assets/use-countdown-DSLbwkPl.js +1 -0
- package/runtime/assets/utils-BsB3-B7h.js +1 -0
- package/runtime/assets/video-CYH3El1X.js +1 -0
- package/runtime/assets/volume-movers-scatter-B8dYI1EZ.js +1 -0
- package/runtime/assets/volume-profile-W44vUguI.js +1 -0
- package/runtime/assets/volume-share-donut-CLbp38ek.js +1 -0
- package/runtime/assets/yield-composition-scatter-BinG9C4D.js +1 -0
- package/runtime/assets/yield-curve-DHeqDdBV.js +1 -0
- package/runtime/assets/yield-momentum-bars-D4ToH0Fp.js +1 -0
- package/runtime/assets/yield-risk-pie-C73G7WqW.js +1 -0
- package/runtime/assets/yield-scanner-uR4S_OrU.js +1 -0
- package/runtime/assets/yield-scatter-CnZQ7naG.js +1 -0
- package/runtime/index.html +7 -3
- package/runtime/assets/bar-chart-DCMbxUJx.js +0 -1
- package/runtime/assets/bitcoin-dominance-BqoH90r5.js +0 -1
- package/runtime/assets/breakeven-1Kr-v9pE.js +0 -1
- package/runtime/assets/breathing-NOTeAM6N.js +0 -1
- package/runtime/assets/btc-block-size-bars-BgwX4eu_.js +0 -1
- package/runtime/assets/btc-blocks-D6TscPNp.js +0 -1
- package/runtime/assets/btc-difficulty-BhSve3vk.js +0 -1
- package/runtime/assets/btc-difficulty-chart-Yqxof0b6.js +0 -1
- package/runtime/assets/btc-fees-C-Za_OxK.js +0 -1
- package/runtime/assets/btc-hashrate-5xnTYpft.js +0 -1
- package/runtime/assets/btc-mempool-0WFrtuQR.js +0 -1
- package/runtime/assets/btc-shared-yOWoU9Im.js +0 -1
- package/runtime/assets/bubbles-shared-DlmjtiIA.js +0 -1
- package/runtime/assets/calculator-CcLe2vqJ.js +0 -1
- package/runtime/assets/capital-structure-bars-SEyFIReK.js +0 -1
- package/runtime/assets/chain-activity-CCO3t0hA.js +0 -1
- package/runtime/assets/chain-activity-bars-DHYCDKWT.js +0 -1
- package/runtime/assets/chain-activity-scatter-DeusbLku.js +0 -1
- package/runtime/assets/chain-price-movers-SeTwhqsM.js +0 -1
- package/runtime/assets/chart-utils-DGogNvJT.js +0 -1
- package/runtime/assets/checklist-orMUS_qt.js +0 -1
- package/runtime/assets/clock-9PqJvMgi.js +0 -1
- package/runtime/assets/coin-momentum-heatmap-DvfWWzSD.js +0 -1
- package/runtime/assets/coin-momentum-scatter-Cf4Y29lp.js +0 -1
- package/runtime/assets/coin-movers-D3cmI-tT.js +0 -1
- package/runtime/assets/content-shared-BZ1XzrJx.js +0 -1
- package/runtime/assets/countdown-tMz3FsXT.js +0 -1
- package/runtime/assets/custom-data-DPPNQ2QQ.js +0 -1
- package/runtime/assets/cycle-shared-XoGVsOjC.js +0 -1
- package/runtime/assets/cycle-signals-DJYUIjas.js +0 -1
- package/runtime/assets/cycle-valuation-composite-DO_Pda0n.js +0 -1
- package/runtime/assets/d3-ibrLIlQc.js +0 -1
- package/runtime/assets/daily-analysis-BVEvATPa.js +0 -1
- package/runtime/assets/day-meter-DmbSq9YK.js +0 -1
- package/runtime/assets/defi-revenue-DPazGCl4.js +0 -1
- package/runtime/assets/dex-hot-pools-BeuuV2Cj.js +0 -1
- package/runtime/assets/dex-pool-bubbles-BLUbqZ4v.js +0 -1
- package/runtime/assets/dex-pool-liquidity-scatter-Civ63yej.js +0 -1
- package/runtime/assets/dex-pool-treemap-ecoWHB8O.js +0 -1
- package/runtime/assets/dex-volume-bubbles-CX9SfXmZ.js +0 -1
- package/runtime/assets/dex-volume-chart-Bgdepem0.js +0 -1
- package/runtime/assets/dex-volume-share-area-uDfe8wQZ.js +0 -1
- package/runtime/assets/dex-volume-treemap-BlrxYmk-.js +0 -1
- package/runtime/assets/dice-BOUHMLs6.js +0 -1
- package/runtime/assets/dino-game-BBIAIplk.js +0 -1
- package/runtime/assets/divider-B-nMbdhH.js +0 -1
- package/runtime/assets/dominance-bars-BjKMZR8V.js +0 -1
- package/runtime/assets/dominance-gauge-DVITO-Eg.js +0 -1
- package/runtime/assets/drawdy-gpdcuxey.js +0 -1
- package/runtime/assets/dxy-DfHaYZsj.js +0 -1
- package/runtime/assets/dxy-chart-CidtFThk.js +0 -1
- package/runtime/assets/editor-C9dj6xX0.css +0 -1
- package/runtime/assets/editor-yifYG0tI.js +0 -68
- package/runtime/assets/etf-flow-bars-NYq3d_-U.js +0 -1
- package/runtime/assets/etf-flow-calendar-BI18BrWM.js +0 -1
- package/runtime/assets/etf-flows-chart-BzKKqHh4.js +0 -1
- package/runtime/assets/etf-flows-cufmZrd_.js +0 -1
- package/runtime/assets/etf-issuer-bars-Dl9H_CZC.js +0 -1
- package/runtime/assets/etf-issuer-treemap-IhYjIP-y.js +0 -1
- package/runtime/assets/eth-issuance-impact-BLHuDvGQ.js +0 -1
- package/runtime/assets/eth-staking-CzidwFMK.js +0 -1
- package/runtime/assets/eth-supply-C7KDK-97.js +0 -1
- package/runtime/assets/fear-greed-DTLHRhif.js +0 -1
- package/runtime/assets/fear-greed-chart-N1vM_QJ7.js +0 -1
- package/runtime/assets/feed-row-mVg1d5Zj.js +0 -1
- package/runtime/assets/filings-feed-Dpz6nWMU.js +0 -1
- package/runtime/assets/filings-mix-7ykY8NsE.js +0 -1
- package/runtime/assets/financial-stress-BcnDhPO4.js +0 -1
- package/runtime/assets/flappy-bird-Vp7j7ceN.js +0 -1
- package/runtime/assets/format-DxkEZcwQ.js +0 -1
- package/runtime/assets/fundamentals-BIesVoJt.js +0 -1
- package/runtime/assets/funding-bars-BNVCUVqC.js +0 -1
- package/runtime/assets/funding-carry-area-BqCrQOi5.js +0 -1
- package/runtime/assets/funding-comparison-BynnnDDf.js +0 -1
- package/runtime/assets/funding-crowding-scatter-BTzQUtFn.js +0 -1
- package/runtime/assets/funding-heatmap-DUOcDAeX.js +0 -1
- package/runtime/assets/funding-leaderboard-bars-CpYvO_Cs.js +0 -1
- package/runtime/assets/funding-rate-chart-CANXPS3a.js +0 -1
- package/runtime/assets/funding-spread-bars-BgA-vSh-.js +0 -1
- package/runtime/assets/funding-venue-heatmap-jKiQGgLb.js +0 -1
- package/runtime/assets/fx-board-CTnlbWGJ.js +0 -1
- package/runtime/assets/fx-cross-heatmap-CDORG9Cx.js +0 -1
- package/runtime/assets/fx-movers-bars-WKvSm3Ry.js +0 -1
- package/runtime/assets/fx-trend-chart-uITTwyv8.js +0 -1
- package/runtime/assets/game-ui-BiMS2KJf.js +0 -1
- package/runtime/assets/gridstack-BxxvPIFU.js +0 -9
- package/runtime/assets/gridstack-FIb_WQSt.css +0 -1
- package/runtime/assets/heading-Cidi7R-_.js +0 -1
- package/runtime/assets/hero-number-p8eaQmkA.js +0 -1
- package/runtime/assets/holiday-calendar-ErapPWhY.js +0 -1
- package/runtime/assets/image-BQQ0gSaW.js +0 -1
- package/runtime/assets/image-gallery-CNa-8BAA.js +0 -1
- package/runtime/assets/index-BHlJHScr.js +0 -1108
- package/runtime/assets/index-BXLwJuoo.css +0 -1
- package/runtime/assets/index-BpPIfN5S.js +0 -1
- package/runtime/assets/index-Bw1aFtyx.js +0 -1
- package/runtime/assets/index-DuNO-RcB.js +0 -1
- package/runtime/assets/index-yv-SCb9g.css +0 -1
- package/runtime/assets/indicators-Cw7CVPn4.js +0 -1
- package/runtime/assets/inflation-pulse-B54HwpAO.js +0 -1
- package/runtime/assets/journal-log-0CruSC_H.js +0 -1
- package/runtime/assets/journal-open-DIwxMMCH.js +0 -1
- package/runtime/assets/journal-results-BM_i_JJ3.js +0 -1
- package/runtime/assets/journal-score-He6DdYtU.js +0 -1
- package/runtime/assets/journal-store-DVDSxNMj.js +0 -1
- package/runtime/assets/journal-ui-CP9YblNJ.js +0 -1
- package/runtime/assets/labor-force-flow-8HLQsbKV.js +0 -1
- package/runtime/assets/labor-market-If23zBQK.js +0 -1
- package/runtime/assets/lightning-stats-DhrfBtX6.js +0 -1
- package/runtime/assets/link-grid-CsnxpE4z.js +0 -1
- package/runtime/assets/liquidity-basis-bars-CaU5YtBA.js +0 -1
- package/runtime/assets/live-tick-9Q3ubPF9.js +0 -1
- package/runtime/assets/liveline-bcaEuskN.js +0 -1
- package/runtime/assets/ma-multiplier-BBN7qsdV.js +0 -1
- package/runtime/assets/macro-calendar-cKBRneX9.js +0 -1
- package/runtime/assets/market-bubbles-BKNkvOTg.js +0 -1
- package/runtime/assets/market-cap-treemap-BSBU8mjq.js +0 -1
- package/runtime/assets/market-data-CvmpLFSo.js +0 -1
- package/runtime/assets/market-hours-B10lWec_.js +0 -1
- package/runtime/assets/market-scatter-CVUa4ZQ_.js +0 -1
- package/runtime/assets/marquee-BS_quB4S.js +0 -28
- package/runtime/assets/mayer-multiple-iiKonfXX.js +0 -1
- package/runtime/assets/mempool-fee-curve-CQ4nzab8.js +0 -1
- package/runtime/assets/metric-row-BVVhjsjK.js +0 -1
- package/runtime/assets/mini-line-chart-DyG55cVW.js +0 -1
- package/runtime/assets/mining-pools-DROnvkZS.js +0 -1
- package/runtime/assets/mining-pools-share-BhHh0hUJ.js +0 -1
- package/runtime/assets/misery-index-DpG7yLgX.js +0 -1
- package/runtime/assets/mover-row-Bz-YpFL3.js +0 -1
- package/runtime/assets/movers-bars-CEFjsHnv.js +0 -1
- package/runtime/assets/movers-bubbles-C-SriZvR.js +0 -1
- package/runtime/assets/mvrv-Cg0t6U5X.js +0 -1
- package/runtime/assets/mvrv-zscore-chart-qyOkheJb.js +0 -1
- package/runtime/assets/national-debt-BRX09_U_.js +0 -1
- package/runtime/assets/news-feed-DQHSPzk5.js +0 -1
- package/runtime/assets/nft-activity-bars-BmNs4RMC.js +0 -1
- package/runtime/assets/nft-bubbles-0f9wAld0.js +0 -1
- package/runtime/assets/nft-collections-Czp0t7ZU.js +0 -1
- package/runtime/assets/nft-scatter-BHULn6_-.js +0 -1
- package/runtime/assets/nft-treemap-D2Kj3AuL.js +0 -1
- package/runtime/assets/note-BdVtsqXo.js +0 -3
- package/runtime/assets/nupl-BrK2rcgi.js +0 -1
- package/runtime/assets/nupl-cycle-chart-BlXOLj4A.js +0 -1
- package/runtime/assets/nyfed-fed-funds-band-gauge-DnzVhh9I.js +0 -1
- package/runtime/assets/nyfed-reference-rate-bars-CxLwUFUY.js +0 -1
- package/runtime/assets/nyfed-sofr-term-averages-bars-DxzLVO9o.js +0 -1
- package/runtime/assets/ofr-stress-category-area-TXpXiMP-.js +0 -1
- package/runtime/assets/ohlcv-volume-bars-BQZiJJ3u.js +0 -1
- package/runtime/assets/oi-treemap-BEusAMZU.js +0 -1
- package/runtime/assets/onchain-oscillator-overlay-BPa_jULR.js +0 -1
- package/runtime/assets/open-interest-BqO1-ZYo.js +0 -1
- package/runtime/assets/options-flow-skew-Cy0SUhs0.js +0 -1
- package/runtime/assets/options-iv-RsCKjmmC.js +0 -1
- package/runtime/assets/options-max-pain-B2pA7KJP.js +0 -1
- package/runtime/assets/options-max-pain-multi-BLfX8Qe6.js +0 -1
- package/runtime/assets/options-oi-ladder-heatmap-Do8eYI3h.js +0 -1
- package/runtime/assets/options-oi-skew-D869gcp7.js +0 -1
- package/runtime/assets/options-oi-strike-CKWXk22Q.js +0 -1
- package/runtime/assets/options-put-call-DcSwyIIX.js +0 -1
- package/runtime/assets/options-vol-smile-CqP0-CSw.js +0 -1
- package/runtime/assets/options-vol-spread-DMXdphxM.js +0 -1
- package/runtime/assets/payrolls-bars-15U_DxmS.js +0 -1
- package/runtime/assets/pi-cycle-tqHUEYSe.js +0 -1
- package/runtime/assets/pie-chart-BIxKuHm-.js +0 -1
- package/runtime/assets/pomodoro-DSswMPuv.js +0 -1
- package/runtime/assets/portfolio-allocation-DHN6r6fl.js +0 -1
- package/runtime/assets/portfolio-common-e3o9U7qd.js +0 -1
- package/runtime/assets/portfolio-holdings-Bf6vOm0e.js +0 -1
- package/runtime/assets/portfolio-movers-DmaGwFtS.js +0 -1
- package/runtime/assets/portfolio-value-DLQHtwCl.js +0 -1
- package/runtime/assets/portfolio-value-bars-B8XP7r22.js +0 -1
- package/runtime/assets/prediction-market-bars-Du1RxZc_.js +0 -1
- package/runtime/assets/prediction-market-scatter-bdlr6r_V.js +0 -1
- package/runtime/assets/prediction-markets-DNDg43g9.js +0 -1
- package/runtime/assets/prediction-markets-bubble-ccP01yj3.js +0 -1
- package/runtime/assets/price-chart-Cw8OXmKH.js +0 -1
- package/runtime/assets/price-compare-txGWDCHD.js +0 -1
- package/runtime/assets/price-liveline-F7uJKuTS.js +0 -1
- package/runtime/assets/price-ticker-DQFyiHmW.js +0 -1
- package/runtime/assets/protocol-fees-bubbles-oV66t8AJ.js +0 -1
- package/runtime/assets/protocol-fees-treemap-CsZhFjxB.js +0 -1
- package/runtime/assets/protocol-fees-vs-tvl-scatter-CtLKoDeh.js +0 -1
- package/runtime/assets/protocol-tvl-bubbles-CuULi2KY.js +0 -1
- package/runtime/assets/protocol-tvl-by-category-BV2yIdZ_.js +0 -1
- package/runtime/assets/protocol-tvl-chart-BRPlR_kj.js +0 -1
- package/runtime/assets/protocol-tvl-share-area-BeWSgocA.js +0 -1
- package/runtime/assets/protocol-tvl-treemap-BYECslhG.js +0 -1
- package/runtime/assets/puell-multiple-akyTNZyp.js +0 -1
- package/runtime/assets/put-call-gauge-CwrHYfdq.js +0 -1
- package/runtime/assets/quote-6JmbHxfg.js +0 -1
- package/runtime/assets/radial-gauge-0BzRQ6fO.js +0 -1
- package/runtime/assets/rates-board-CiY6mWMz.js +0 -1
- package/runtime/assets/react-qoZPGuNy.js +0 -49
- package/runtime/assets/real-wages-BTBOxvjP.js +0 -1
- package/runtime/assets/realized-price-CbjZ3Sqj.js +0 -1
- package/runtime/assets/reserve-risk-UlEv8oS1.js +0 -1
- package/runtime/assets/returns-projector-qPZeZ-n9.js +0 -1
- package/runtime/assets/risk-reward-DWcu9j4_.js +0 -1
- package/runtime/assets/rsi-momentum-BuasFcVH.js +0 -1
- package/runtime/assets/rules-card-DkjHPbht.js +0 -1
- package/runtime/assets/scatter-chart-B78EA7lD.js +0 -1
- package/runtime/assets/scene-uwfOGek1.js +0 -1
- package/runtime/assets/sector-bars-JKmedArM.js +0 -1
- package/runtime/assets/sector-bubbles-DLXckuua.js +0 -1
- package/runtime/assets/sector-performance-C_2-xbIq.js +0 -1
- package/runtime/assets/sector-treemap-DquBCyc3.js +0 -1
- package/runtime/assets/sentiment-gauge-CuNvuk1q.js +0 -1
- package/runtime/assets/session-progress-BDhJHQEn.js +0 -1
- package/runtime/assets/short-volume-Deb7fra_.js +0 -1
- package/runtime/assets/short-volume-bars-DRjpg7RS.js +0 -1
- package/runtime/assets/snake-B9EEDroM.js +0 -1
- package/runtime/assets/sopr-DM_gpDem.js +0 -1
- package/runtime/assets/spotify-embed-Dxt1RnUX.js +0 -1
- package/runtime/assets/stablecoin-chains-LzYMilQE.js +0 -1
- package/runtime/assets/stablecoin-supply-69kqOBoU.js +0 -1
- package/runtime/assets/stopwatch-ClPrrveo.js +0 -1
- package/runtime/assets/top-movers-BRiiYOPQ.js +0 -1
- package/runtime/assets/treasury-auction-demand-scatter-yYNPz1VC.js +0 -1
- package/runtime/assets/treasury-auction-size-bars-CGD6MeAz.js +0 -1
- package/runtime/assets/treasury-auctions-Z_4MtXmL.js +0 -1
- package/runtime/assets/treasury-avg-rate-bars-FXGz1a7e.js +0 -1
- package/runtime/assets/treasury-debt-composition-area-5yRh0K6a.js +0 -1
- package/runtime/assets/treemap-leaf-QG-L-SIG.js +0 -1
- package/runtime/assets/trending-bars-z_cjmEXN.js +0 -1
- package/runtime/assets/trending-bubbles-nwoxKQEW.js +0 -1
- package/runtime/assets/trending-coins-9vrbEbBm.js +0 -1
- package/runtime/assets/tvl-bars-BkJcttcu.js +0 -1
- package/runtime/assets/tvl-bubbles-D4tahOC6.js +0 -1
- package/runtime/assets/tvl-treemap-B7kWI7o0.js +0 -1
- package/runtime/assets/ui-Bq3RQsdJ.js +0 -1
- package/runtime/assets/use-countdown-BmcF-qdL.js +0 -1
- package/runtime/assets/utils-DxneYyA_.js +0 -1
- package/runtime/assets/video-Dsc13Zja.js +0 -1
- package/runtime/assets/volume-movers-scatter-BA8Wmoil.js +0 -1
- package/runtime/assets/volume-profile-DcSNvDqP.js +0 -1
- package/runtime/assets/volume-share-donut-3MenMO-V.js +0 -1
- package/runtime/assets/yield-composition-scatter-rfxC16n2.js +0 -1
- package/runtime/assets/yield-curve-DXsfXy4P.js +0 -1
- package/runtime/assets/yield-momentum-bars-B9nKuItO.js +0 -1
- package/runtime/assets/yield-risk-pie-DUxkXYIQ.js +0 -1
- package/runtime/assets/yield-scanner-sCBXpQTV.js +0 -1
- package/runtime/assets/yield-scatter-BZHOhFcm.js +0 -1
|
@@ -0,0 +1,1106 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/scene-DgXljRUS.js","assets/rolldown-runtime-Bh1tDfsg.js","assets/liveline-BV-xqAVq.js","assets/portfolio-value-C2hCsXwG.js","assets/format-DWMrfgke.js","assets/money-BHiVNo0u.js","assets/live-tick-S-lWTthW.js","assets/portfolio-common-CcbzaPrv.js","assets/hooks-CLLchjg6.js","assets/ui-CYz5SGgR.js","assets/portfolio-allocation-DzjS0F9u.js","assets/chart-utils-Ba8AFSZR.js","assets/d3-BDRmnSFu.js","assets/timeframe-DUDLPk23.js","assets/pie-chart-cmDhECET.js","assets/utils-BsB3-B7h.js","assets/portfolio-holdings-1d7jT_Dv.js","assets/bitcoin-dominance-CDZbSLQ9.js","assets/clock-C5hPRu82.js","assets/use-countdown-DSLbwkPl.js","assets/custom-data-A7UR4hIt.js","assets/mini-line-chart-B0Ixv2kC.js","assets/bar-chart-CMWrEpFm.js","assets/metric-row-CqsjSvCI.js","assets/daily-analysis-DmNxxfsL.js","assets/journal-log-DllO3-3Q.js","assets/content-shared-CrVCFeOp.js","assets/journal-store-DcqepoPT.js","assets/journal-open-49eapsYs.js","assets/journal-ui-CR7uxhyO.js","assets/journal-results-CYsmiD33.js","assets/journal-score-BvJ7YMEp.js","assets/dino-game-DkbgStXN.js","assets/game-ui-DRuW9syP.js","assets/fear-greed-Db3YYSrb.js","assets/filings-feed-CNEQhc4S.js","assets/feed-row-qDN72CXa.js","assets/fundamentals-DeZ9OQCp.js","assets/financial-stress-CtL4d_BQ.js","assets/labor-market-D_4TsgBi.js","assets/national-debt-BExrnkxj.js","assets/treasury-auctions-ChsX0OUJ.js","assets/funding-heatmap-BiW7ZLwp.js","assets/heatmap-chart-CXN9d41C.js","assets/funding-rate-chart-MWU01Uib.js","assets/multi-series-line-chart-XRttVKf5.js","assets/multi-series-line-chart-DyOsZlI2.css","assets/heading-DMvjA_mI.js","assets/hero-number-BFIUUm5q.js","assets/image-Dx6lzZxo.js","assets/image-gallery-DlvoKVqh.js","assets/inflation-pulse-DFjPkATF.js","assets/market-hours-B_bTdanw.js","assets/market-data-BeuX48f-.js","assets/news-feed-BHQ8VVq_.js","assets/note-Dgl6DLv8.js","assets/price-chart-NGnXyEwF.js","assets/price-compare-D0cu78Tg.js","assets/price-liveline-B_6-t2eO.js","assets/price-ticker-DpNG6jQF.js","assets/mover-row-DmmszLhN.js","assets/rates-board-Byz3erIf.js","assets/fx-board-CXrfSPfH.js","assets/short-volume-B2TiqLCD.js","assets/top-movers-Bzz7lloh.js","assets/tvl-treemap-qsmpeeAB.js","assets/treemap-leaf-f-vE1hUM.js","assets/yield-curve-DHeqDdBV.js","assets/dex-volume-treemap-CXXZ330C.js","assets/dex-volume-chart-CGCkffrp.js","assets/protocol-tvl-treemap-DC_qfwIF.js","assets/protocol-tvl-chart-Q1hGvfby.js","assets/protocol-fees-treemap-b4z8_0dU.js","assets/market-cap-treemap-ydmUhoNY.js","assets/open-interest-B5119LVQ.js","assets/snake-D0Secq9I.js","assets/flappy-bird-OADt73RX.js","assets/video-CYH3El1X.js","assets/drawdy-Bqx6Qs9j.js","assets/countdown-9cgAKml3.js","assets/link-grid-DUGgdBCS.js","assets/calculator-F474oCeb.js","assets/quote-CuEE1U0a.js","assets/divider-B_ScYYo5.js","assets/marquee-sW0gA0u_.js","assets/dice-BRHGwsSK.js","assets/risk-reward-Brde1Qql.js","assets/stopwatch-DKtBGcQd.js","assets/session-progress-BfuN5Ilt.js","assets/btc-fees-CwRPq2S2.js","assets/btc-shared-BC2IjkCh.js","assets/btc-mempool-DivYz6mX.js","assets/btc-blocks-CFz6DrIF.js","assets/btc-hashrate-_PbwOOj4.js","assets/btc-difficulty-bSLdWqGX.js","assets/mining-pools-BpaMCs0f.js","assets/lightning-stats-DqM9rjwr.js","assets/options-put-call-lwGRvlsC.js","assets/options-iv-Bbopuw_Z.js","assets/options-oi-strike-D1ZtVHSn.js","assets/coin-movers-BPifHhH2.js","assets/mvrv-CrYk75Yb.js","assets/indicators-YksbfYtF.js","assets/cycle-shared-D8LQcBSw.js","assets/nupl-DglP-qbC.js","assets/sopr-j5kMKG03.js","assets/puell-multiple-uc0NZXdh.js","assets/mayer-multiple-D6T_kVDR.js","assets/pi-cycle-CqX0lAu1.js","assets/ma-multiplier-0NdXDf5j.js","assets/rsi-momentum-DFARJhwN.js","assets/volume-profile-W44vUguI.js","assets/dxy-EDEcDqHS.js","assets/cycle-signals-CmEenZJE.js","assets/stablecoin-supply-6Q2kIHWN.js","assets/yield-scanner-uR4S_OrU.js","assets/defi-revenue-BwnWnaOl.js","assets/funding-comparison-TSJiamEF.js","assets/eth-supply-BDXv32cs.js","assets/eth-staking-DhS4t_di.js","assets/prediction-markets-vrOoZGTG.js","assets/etf-flows-BokfCz94.js","assets/trending-coins-n7mmU4mL.js","assets/sector-performance-CVVJ-VGu.js","assets/macro-calendar-BtFBeUX9.js","assets/stablecoin-chains-jLxaRE9T.js","assets/sector-treemap-lyftrGDF.js","assets/etf-flows-chart-B7vXhlo1.js","assets/realized-price-D91T6q7P.js","assets/reserve-risk-CuRuMPUz.js","assets/holiday-calendar-s6CQYrht.js","assets/day-meter-DYYqZgFQ.js","assets/returns-projector-DvVTUgZa.js","assets/breakeven-N9JfaLs2.js","assets/checklist-BSCOZLJ-.js","assets/pomodoro-BstwVCqa.js","assets/rules-card-CDgHHXtE.js","assets/breathing-CSiaHH2d.js","assets/spotify-embed-BJIW3cBK.js","assets/nft-collections-BED52ibd.js","assets/dex-hot-pools-5sl00AOK.js","assets/chain-activity-Db-zx6eG.js","assets/order-book-depth-CeFNsjv3.js","assets/nft-treemap-PO55tL6W.js","assets/dex-pool-treemap-DmoYWG3V.js","assets/sector-bars-D0A6Sj3C.js","assets/funding-bars-CZicqsRm.js","assets/etf-flow-bars-BdLldRsx.js","assets/chain-activity-bars-CPhHE6lU.js","assets/market-scatter-FTzDpslF.js","assets/scatter-chart-tjlc1NWO.js","assets/market-bubbles-B4CW9pwK.js","assets/bubbles-shared-BgKUWrak.js","assets/tvl-bubbles-DU2M5Zl1.js","assets/protocol-tvl-bubbles-BDAUSzkE.js","assets/dex-volume-bubbles-lLAheaQp.js","assets/protocol-fees-bubbles-CfMsdfGV.js","assets/sector-bubbles-C5lQoTi9.js","assets/nft-bubbles-BU8EpLxc.js","assets/dex-pool-bubbles-KyBmXb-u.js","assets/movers-bubbles-BidtAeZE.js","assets/sentiment-gauge-CdnbFwyn.js","assets/radial-gauge-DUhIBGcM.js","assets/movers-bars-Bp8o2qzk.js","assets/tvl-bars-5IQ6zz2M.js","assets/yield-scatter-CnZQ7naG.js","assets/nft-scatter-CGhED2cB.js","assets/dominance-gauge-DL_JjphD.js","assets/put-call-gauge-DtlDFtDZ.js","assets/oi-treemap-BbPekPJp.js","assets/ohlcv-volume-bars-Bi83GPWW.js","assets/funding-spread-bars-Br7XsS11.js","assets/funding-venue-heatmap-sPFQ1fzo.js","assets/funding-carry-area-B9WKPWmT.js","assets/stacked-area-chart-B3ayMBfx.js","assets/volume-share-donut-CLbp38ek.js","assets/volume-movers-scatter-B8dYI1EZ.js","assets/funding-leaderboard-bars-C6PF11ps.js","assets/funding-crowding-scatter-DfPN294N.js","assets/liquidity-basis-bars-BBthK657.js","assets/coin-momentum-heatmap-DbHsWjP2.js","assets/coin-momentum-scatter-5wS64urM.js","assets/trending-bars-DtgWzD_x.js","assets/nft-activity-bars-BjGU2vJF.js","assets/dominance-bars-CwFTP6Sh.js","assets/trending-bubbles-DRJqfQqK.js","assets/yield-risk-pie-C73G7WqW.js","assets/dex-pool-liquidity-scatter-Cczoa7F0.js","assets/protocol-fees-vs-tvl-scatter-D-REm65e.js","assets/yield-composition-scatter-BinG9C4D.js","assets/protocol-tvl-by-category-fw6ADU1F.js","assets/protocol-tvl-share-area-DXQzexAL.js","assets/dex-volume-share-area-figZ1USz.js","assets/yield-momentum-bars-D4ToH0Fp.js","assets/btc-difficulty-chart-D6il3x9b.js","assets/btc-block-size-bars-BwGQm2NA.js","assets/chain-price-movers-Vym50Lcy.js","assets/chain-activity-scatter-CU7D3Nx9.js","assets/mempool-fee-curve-DUsgJQRe.js","assets/mining-pools-share-CrfTxNKr.js","assets/options-max-pain-DkUoBRmq.js","assets/options-oi-skew-B3eQqfLD.js","assets/options-vol-spread-CnZEubR3.js","assets/options-flow-skew-Cj0v65sh.js","assets/options-vol-smile-zdzBnvMN.js","assets/options-oi-ladder-heatmap-BMFAQkEI.js","assets/options-max-pain-multi-BZq8vuHy.js","assets/mvrv-zscore-chart-0m51ohsV.js","assets/nupl-cycle-chart-S9yflXUB.js","assets/cycle-valuation-composite-olTWmWgj.js","assets/onchain-oscillator-overlay-Ck_7aTc_.js","assets/eth-issuance-impact-C0dbmsYs.js","assets/treasury-avg-rate-bars-DQ_HgQ0U.js","assets/treasury-auction-demand-scatter-CUoIYkrP.js","assets/treasury-auction-size-bars-DXMJ0a9C.js","assets/nyfed-reference-rate-bars-C_3KkqpO.js","assets/nyfed-sofr-term-averages-bars-Dqaa52Pl.js","assets/nyfed-fed-funds-band-gauge-CFMKcqEc.js","assets/treasury-debt-composition-area-C3sBaNNX.js","assets/ofr-stress-category-area-DnEjZbRo.js","assets/misery-index-BU2requD.js","assets/real-wages-BU2XSTAC.js","assets/labor-force-flow-BIAQjzra.js","assets/payrolls-bars-T0e6cyjh.js","assets/short-volume-bars-Cm-TnzY-.js","assets/capital-structure-bars-BHtcggyu.js","assets/filings-mix-BycrOiTn.js","assets/fx-cross-heatmap-CHJIg4cN.js","assets/etf-issuer-treemap-zM5ZN913.js","assets/fx-trend-chart-DXS0-OTV.js","assets/fear-greed-chart-BUaJVaqb.js","assets/prediction-market-bars-WOea9YlB.js","assets/dxy-chart-DZ9Q_k9j.js","assets/fx-movers-bars-DpD5YR28.js","assets/prediction-market-scatter-Bg8Hp9YU.js","assets/etf-issuer-bars-ZWR-71DZ.js","assets/portfolio-movers-vdVKKjAL.js","assets/portfolio-value-bars-Bkh18oxT.js","assets/etf-flow-calendar-QeCVgCXm.js","assets/prediction-markets-bubble-DUFbL6ZL.js","assets/metals-board-DPfkH3Vj.js","assets/metals-shared-CN6-LtS3.js","assets/metal-price-CIZRcE2_.js","assets/metal-value-CTPzpBvh.js","assets/metal-price-chart-BX5tGnIt.js","assets/metal-compare-chart-CiOT1Su2.js","assets/metal-fix-table-ChbUOgVu.js","assets/metal-drawdown-DZ7uOHIc.js","assets/metal-ath-ChqiN4O-.js","assets/metal-milestones-BpfRvE7K.js","assets/metal-annual-returns-CsZDcJs4.js","assets/metal-performance-CBD6oX6f.js","assets/metal-return-distribution-B0AAXxe0.js","assets/metal-seasonality-BuQKG4Gi.js","assets/metals-correlation-BjZHMzKY.js","assets/metal-volatility-g94-b7hn.js","assets/gold-silver-ratio-C1AEhktf.js","assets/metal-ratio-chart-D99QH7nv.js","assets/btc-in-gold-JNXTU7sM.js","assets/metal-cot-net-B5BW2stR.js","assets/metal-cot-breakdown-B83N5bkN.js","assets/metal-cot-gauge-DK-PBRRk.js","assets/metal-open-interest-BFYrS2KP.js","assets/metal-positioning-vs-price-BPxrZcR9.js","assets/us-gold-reserve-8L2oYWV_.js","assets/us-gold-vaults-TuTFtr2T.js","assets/tokenized-gold-B6KMvUVf.js","assets/editor-DchM45os.js","assets/react-DdM8gsnR.js","assets/gridstack-BJOLV-iY.js","assets/gridstack-Chv4ms9g.css","assets/editor-DNWRDAc5.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{n as t,r as n}from"./liveline-BV-xqAVq.js";import{n as r,t as i}from"./react-DdM8gsnR.js";import{$ as a,E as o,Q as s,f as c,ft as l,t as u}from"./hooks-CLLchjg6.js";import{i as d,n as f,r as p,t as m}from"./money-BHiVNo0u.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var h=e(n(),1),g=r(),_=i(),v=[{key:`markets`,label:`Prices & Markets`,description:`Live price charts, tickers, and market movers across stocks and crypto.`},{key:`crypto`,label:`Crypto & On-chain`,description:`Crypto market structure and DeFi/on-chain activity — dominance, market caps, TVL, DEX volume, and fees.`},{key:`bitcoin`,label:`Bitcoin Network`,description:`Bitcoin chain health — fees, mempool, blocks, hashrate, difficulty, mining pools, and Lightning.`},{key:`onchain`,label:`On-chain & Cycle`,description:`Bitcoin valuation ratios and cycle timing — MVRV, NUPL, SOPR, Puell, Mayer Multiple, Pi Cycle, moving-average multipliers, RSI momentum, and cycle top/bottom signal checklists.`},{key:`derivatives`,label:`Derivatives & Options`,description:`Perp funding, open interest, and options positioning and volatility.`},{key:`macro`,label:`Macro & Rates`,description:`Official macro data — rates, the yield curve, inflation, jobs, debt, Treasury auctions, and financial stress.`},{key:`metals`,label:`Metals & Commodities`,description:`Gold, silver, platinum, palladium and copper — live spot, decades of London fix history, ratios and drawdowns, CFTC futures positioning, the U.S. official gold reserve, and tokenized gold.`},{key:`equities`,label:`Equities & Filings`,description:`Single-company fundamentals, SEC filings, and short-sale volume.`},{key:`sentiment`,label:`Sentiment & News`,description:`Market-mood gauges and news headline feeds.`},{key:`portfolio`,label:`Portfolio`,description:`Your own holdings and their live allocation.`},{key:`journal`,label:`Decision Journal`,description:`Your decision journal — log market calls, watch them play out, see them graded, and track how calibrated your judgment is over time.`},{key:`tools`,label:`Tools & Utility`,description:`Clocks, countdowns, calculators, link grids, and the daily brief.`},{key:`layout`,label:`Layout & Media`,description:`Structural and decorative frames — headings, dividers, notes, images, video, and quotes.`},{key:`games`,label:`Games`,description:`Idle canvas games for when the market is quiet.`}];function y(e){return e}function b(e){return e}var x;function S(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;e<a.length;e++){let t=a[e];t in n||(n[t]=i[t].bind(n))}}let i=n?.Parent??Object;class a extends i{}Object.defineProperty(a,"name",{value:e});function o(e){var t;let i=n?.Parent?new a:this;r(i,e),(t=i._zod).deferred??(t.deferred=[]);for(let e of i._zod.deferred)e();return i}return Object.defineProperty(o,"init",{value:r}),Object.defineProperty(o,Symbol.hasInstance,{value:t=>n?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}var C=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},w=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(x=globalThis).__zod_globalConfig??(x.__zod_globalConfig={});var T=globalThis.__zod_globalConfig;function E(e){return e&&Object.assign(T,e),T}function ee(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function D(e,t){return typeof t==`bigint`?t.toString():t}function te(e){return{get value(){{let t=e();return Object.defineProperty(this,"value",{value:t}),t}throw Error(`cached value already set`)}}}function ne(e){return e==null}function re(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function O(e,t){let n=e/t,r=Math.round(n),i=2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r)<i?0:n-r}var ie=Symbol(`evaluating`);function k(e,t,n){let r;Object.defineProperty(e,t,{get(){if(r!==ie)return r===void 0&&(r=ie,r=n()),r},set(n){Object.defineProperty(e,t,{value:n})},configurable:!0})}function ae(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function oe(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function A(e){return JSON.stringify(e)}function se(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var ce=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function le(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var ue=te(()=>{if(T.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function j(e){if(le(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return!(le(n)===!1||Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)===!1)}function de(e){return j(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var M=new Set([`string`,`number`,`symbol`]);function fe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function pe(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function N(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function me(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var he={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function P(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return pe(e,oe(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return ae(this,`shape`,e),e},checks:[]}))}function ge(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return pe(e,oe(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return ae(this,`shape`,r),r},checks:[]}))}function _e(e,t){if(!j(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return pe(e,oe(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return ae(this,`shape`,n),n}}))}function ve(e,t){if(!j(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return pe(e,oe(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return ae(this,`shape`,n),n}}))}function ye(e,t){if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);return pe(e,oe(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return ae(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function be(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return pe(t,oe(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return ae(this,`shape`,i),i},checks:[]}))}function xe(e,t,n){return pe(t,oe(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return ae(this,`shape`,i),i}}))}function Se(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue!==!0)return!0;return!1}function Ce(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue===!1)return!0;return!1}function we(e,t){return t.map(t=>{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function Te(e){return typeof e==`string`?e:e?.message}function Ee(e,t,n){let r=e.message?e.message:Te(e.inst?._zod.def?.error?.(e))??Te(t?.error?.(e))??Te(n.customError?.(e))??Te(n.localeError?.(e))??`Invalid input`,{inst:i,continue:a,input:o,...s}=e;return s.path??=[],s.message=r,t?.reportInput&&(s.input=o),s}function De(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function Oe(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}var ke=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,D,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},Ae=S(`$ZodError`,ke),je=S(`$ZodError`,ke,{Parent:Error});function Me(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Ne(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i<e.length;){let n=e[i];i===e.length-1?(r[n]=r[n]||{_errors:[]},r[n]._errors.push(t(a))):r[n]=r[n]||{_errors:[]},r=r[n],i++}}}};return r(e),n}var Pe=e=>(t,n,r,i)=>{let a=r?{...r,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new C;if(o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ee(e,a,E())));throw ce(t,i?.callee),t}return o.value},Fe=e=>async(t,n,r,i)=>{let a=r?{...r,async:!0}:{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ee(e,a,E())));throw ce(t,i?.callee),t}return o.value},Ie=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new C;return a.issues.length?{success:!1,error:new(e??Ae)(a.issues.map(e=>Ee(e,i,E())))}:{success:!0,data:a.value}},Le=Ie(je),Re=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>Ee(e,i,E())))}:{success:!0,data:a.value}},ze=Re(je),Be=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Pe(e)(t,n,i)},Ve=e=>(t,n,r)=>Pe(e)(t,n,r),He=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Fe(e)(t,n,i)},Ue=e=>async(t,n,r)=>Fe(e)(t,n,r),We=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ie(e)(t,n,i)},Ge=e=>(t,n,r)=>Ie(e)(t,n,r),Ke=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Re(e)(t,n,i)},qe=e=>async(t,n,r)=>Re(e)(t,n,r),Je=/^[cC][0-9a-z]{6,}$/,Ye=/^[0-9a-z]+$/,Xe=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,Ze=/^[0-9a-vA-V]{20}$/,Qe=/^[A-Za-z0-9]{27}$/,$e=/^[a-zA-Z0-9_-]{21}$/,et=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,tt=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,nt=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,rt=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,it=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function at(){return new RegExp(it,`u`)}var ot=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,st=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,ct=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,lt=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,ut=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,dt=/^[A-Za-z0-9_-]*$/,ft=/^https?$/,pt=/^\+[1-9]\d{6,14}$/,mt=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,ht=RegExp(`^${mt}$`);function gt(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function _t(e){return RegExp(`^${gt(e)}$`)}function vt(e){let t=gt({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${mt}T(?:${r})$`)}var yt=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},bt=/^-?\d+$/,xt=/^-?\d+(?:\.\d+)?$/,St=/^(?:true|false)$/i,Ct=/^[^A-Z]*$/,wt=/^[^a-z]*$/,Tt=S(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Et={number:`number`,bigint:`bigint`,object:`date`},Dt=S(`$ZodCheckLessThan`,(e,t)=>{Tt.init(e,t);let n=Et[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value<r&&(t.inclusive?n.maximum=t.value:n.exclusiveMaximum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value<t.value)||r.issues.push({origin:n,code:`too_big`,maximum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Ot=S(`$ZodCheckGreaterThan`,(e,t)=>{Tt.init(e,t);let n=Et[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),kt=S(`$ZodCheckMultipleOf`,(e,t)=>{Tt.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):O(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),At=S(`$ZodCheckNumberFormat`,(e,t)=>{Tt.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=he[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=bt)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}s<i&&o.issues.push({origin:`number`,input:s,code:`too_small`,minimum:i,inclusive:!0,inst:e,continue:!t.abort}),s>a&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),jt=S(`$ZodCheckMaxLength`,(e,t)=>{var n;Tt.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!ne(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum<n&&(e._zod.bag.maximum=t.maximum)}),e._zod.check=n=>{let r=n.value;if(r.length<=t.maximum)return;let i=De(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Mt=S(`$ZodCheckMinLength`,(e,t)=>{var n;Tt.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!ne(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=De(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Nt=S(`$ZodCheckLengthEquals`,(e,t)=>{var n;Tt.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!ne(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=De(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Pt=S(`$ZodCheckStringFormat`,(e,t)=>{var n,r;Tt.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),Ft=S(`$ZodCheckRegex`,(e,t)=>{Pt.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),It=S(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Ct,Pt.init(e,t)}),Lt=S(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=wt,Pt.init(e,t)}),Rt=S(`$ZodCheckIncludes`,(e,t)=>{Tt.init(e,t);let n=fe(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),zt=S(`$ZodCheckStartsWith`,(e,t)=>{Tt.init(e,t);let n=RegExp(`^${fe(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),Bt=S(`$ZodCheckEndsWith`,(e,t)=>{Tt.init(e,t);let n=RegExp(`.*${fe(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),Vt=S(`$ZodCheckOverwrite`,(e,t)=>{Tt.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),Ht=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
|
|
3
|
+
`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.args,n=[...(this?.content??[``]).map(e=>` ${e}`)];return new e(...t,n.join(`
|
|
4
|
+
`))}},Ut={major:4,minor:4,patch:3},Wt=S(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=Ut;let r=[...e._zod.def.checks??[]];e._zod.traits.has(`$ZodCheck`)&&r.unshift(e);for(let t of r)for(let n of t._zod.onattach)n(e);if(r.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(e,t,n)=>{let r=Se(e),i;for(let a of t){if(a._zod.def.when){if(Ce(e)||!a._zod.def.when(e))continue}else if(r)continue;let t=e.issues.length,o=a._zod.check(e);if(o instanceof Promise&&n?.async===!1)throw new C;if(i||o instanceof Promise)i=(i??Promise.resolve()).then(async()=>{await o,e.issues.length!==t&&(r||=Se(e,t))});else{if(e.issues.length===t)continue;r||=Se(e,t)}}return i?i.then(()=>e):e},n=(n,i,a)=>{if(Se(n))return n.aborted=!0,n;let o=t(i,r,a);if(o instanceof Promise){if(a.async===!1)throw new C;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(i,a)=>{if(a.skipChecks)return e._zod.parse(i,a);if(a.direction===`backward`){let t=e._zod.parse({value:i.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,i,a)):n(t,i,a)}let o=e._zod.parse(i,a);if(o instanceof Promise){if(a.async===!1)throw new C;return o.then(e=>t(e,r,a))}return t(o,r,a)}}k(e,`~standard`,()=>({validate:t=>{try{let n=Le(e,t);return n.success?{value:n.data}:{issues:n.error?.issues}}catch{return ze(e,t).then(e=>e.success?{value:e.data}:{issues:e.error?.issues})}},vendor:`zod`,version:1}))}),Gt=S(`$ZodString`,(e,t)=>{Wt.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??yt(e._zod.bag),e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),Kt=S(`$ZodStringFormat`,(e,t)=>{Pt.init(e,t),Gt.init(e,t)}),qt=S(`$ZodGUID`,(e,t)=>{t.pattern??=tt,Kt.init(e,t)}),Jt=S(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=nt(e)}else t.pattern??=nt();Kt.init(e,t)}),Yt=S(`$ZodEmail`,(e,t)=>{t.pattern??=rt,Kt.init(e,t)}),Xt=S(`$ZodURL`,(e,t)=>{Kt.init(e,t),e._zod.check=n=>{try{let r=n.value.trim();if(!t.normalize&&t.protocol?.source===ft.source&&!/^https?:\/\//i.test(r)){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}let i=new URL(r);t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(i.hostname)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(i.protocol.endsWith(`:`)?i.protocol.slice(0,-1):i.protocol)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort})),t.normalize?n.value=i.href:n.value=r;return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),Zt=S(`$ZodEmoji`,(e,t)=>{t.pattern??=at(),Kt.init(e,t)}),Qt=S(`$ZodNanoID`,(e,t)=>{t.pattern??=$e,Kt.init(e,t)}),$t=S(`$ZodCUID`,(e,t)=>{t.pattern??=Je,Kt.init(e,t)}),en=S(`$ZodCUID2`,(e,t)=>{t.pattern??=Ye,Kt.init(e,t)}),tn=S(`$ZodULID`,(e,t)=>{t.pattern??=Xe,Kt.init(e,t)}),nn=S(`$ZodXID`,(e,t)=>{t.pattern??=Ze,Kt.init(e,t)}),rn=S(`$ZodKSUID`,(e,t)=>{t.pattern??=Qe,Kt.init(e,t)}),an=S(`$ZodISODateTime`,(e,t)=>{t.pattern??=vt(t),Kt.init(e,t)}),on=S(`$ZodISODate`,(e,t)=>{t.pattern??=ht,Kt.init(e,t)}),sn=S(`$ZodISOTime`,(e,t)=>{t.pattern??=_t(t),Kt.init(e,t)}),cn=S(`$ZodISODuration`,(e,t)=>{t.pattern??=et,Kt.init(e,t)}),ln=S(`$ZodIPv4`,(e,t)=>{t.pattern??=ot,Kt.init(e,t),e._zod.bag.format=`ipv4`}),un=S(`$ZodIPv6`,(e,t)=>{t.pattern??=st,Kt.init(e,t),e._zod.bag.format=`ipv6`,e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}}),dn=S(`$ZodCIDRv4`,(e,t)=>{t.pattern??=ct,Kt.init(e,t)}),fn=S(`$ZodCIDRv6`,(e,t)=>{t.pattern??=lt,Kt.init(e,t),e._zod.check=n=>{let r=n.value.split(`/`);try{if(r.length!==2)throw Error();let[e,t]=r;if(!t)throw Error();let n=Number(t);if(`${n}`!==t||n<0||n>128)throw Error();new URL(`http://[${e}]`)}catch{n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}}});function pn(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var mn=S(`$ZodBase64`,(e,t)=>{t.pattern??=ut,Kt.init(e,t),e._zod.bag.contentEncoding=`base64`,e._zod.check=n=>{pn(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}});function hn(e){if(!dt.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return pn(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var gn=S(`$ZodBase64URL`,(e,t)=>{t.pattern??=dt,Kt.init(e,t),e._zod.bag.contentEncoding=`base64url`,e._zod.check=n=>{hn(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),_n=S(`$ZodE164`,(e,t)=>{t.pattern??=pt,Kt.init(e,t)});function vn(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var yn=S(`$ZodJWT`,(e,t)=>{Kt.init(e,t),e._zod.check=n=>{vn(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),bn=S(`$ZodNumber`,(e,t)=>{Wt.init(e,t),e._zod.pattern=e._zod.bag.pattern??xt,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:`Infinity`:void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),xn=S(`$ZodNumberFormat`,(e,t)=>{At.init(e,t),bn.init(e,t)}),Sn=S(`$ZodBoolean`,(e,t)=>{Wt.init(e,t),e._zod.pattern=St,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),Cn=S(`$ZodUnknown`,(e,t)=>{Wt.init(e,t),e._zod.parse=e=>e}),wn=S(`$ZodNever`,(e,t)=>{Wt.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function Tn(e,t,n){e.issues.length&&t.issues.push(...we(n,e.issues)),t.value[n]=e.value}var En=S(`$ZodArray`,(e,t)=>{Wt.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!Array.isArray(i))return n.issues.push({expected:`array`,code:`invalid_type`,input:i,inst:e}),n;n.value=Array(i.length);let a=[];for(let e=0;e<i.length;e++){let o=i[e],s=t.element._zod.run({value:o,issues:[]},r);s instanceof Promise?a.push(s.then(t=>Tn(t,n,e))):Tn(s,n,e)}return a.length?Promise.all(a).then(()=>n):n}});function Dn(e,t,n,r,i,a){let o=n in r;if(e.issues.length){if(i&&a&&!o)return;t.issues.push(...we(n,e.issues))}if(!o&&!i){e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]});return}e.value===void 0?o&&(t.value[n]=void 0):t.value[n]=e.value}function On(e){let t=Object.keys(e.shape);for(let n of t)if(!e.shape?.[n]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${n}": expected a Zod schema`);let n=me(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(n)}}function kn(e,t,n,r,i,a){let o=[],s=i.keySet,c=i.catchall._zod,l=c.def.type,u=c.optin===`optional`,d=c.optout===`optional`;for(let i in t){if(i===`__proto__`||s.has(i))continue;if(l===`never`){o.push(i);continue}let a=c.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>Dn(e,n,i,t,u,d))):Dn(a,n,i,t,u,d)}return o.length&&n.issues.push({code:`unrecognized_keys`,keys:o,input:t,inst:a}),e.length?Promise.all(e).then(()=>n):n}var An=S(`$ZodObject`,(e,t)=>{if(Wt.init(e,t),!Object.getOwnPropertyDescriptor(t,`shape`)?.get){let e=t.shape;Object.defineProperty(t,"shape",{get:()=>{let n={...e};return Object.defineProperty(t,"shape",{value:n}),n}})}let n=te(()=>On(t));k(e._zod,`propValues`,()=>{let e=t.shape,n={};for(let t in e){let r=e[t]._zod;if(r.values){n[t]??(n[t]=new Set);for(let e of r.values)n[t].add(e)}}return n});let r=le,i=t.catchall,a;e._zod.parse=(t,o)=>{a??=n.value;let s=t.value;if(!r(s))return t.issues.push({expected:`object`,code:`invalid_type`,input:s,inst:e}),t;t.value={};let c=[],l=a.shape;for(let e of a.keys){let n=l[e],r=n._zod.optin===`optional`,i=n._zod.optout===`optional`,a=n._zod.run({value:s[e],issues:[]},o);a instanceof Promise?c.push(a.then(n=>Dn(n,t,e,s,r,i))):Dn(a,t,e,s,r,i)}return i?kn(c,s,t,o,n.value,e):c.length?Promise.all(c).then(()=>t):t}}),jn=S(`$ZodObjectJIT`,(e,t)=>{An.init(e,t);let n=e._zod.parse,r=te(()=>On(t)),i=e=>{let t=new Ht([`shape`,`payload`,`ctx`]),n=r.value,i=e=>{let t=A(e);return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`};t.write(`const input = payload.value;`);let a=Object.create(null),o=0;for(let e of n.keys)a[e]=`key_${o++}`;t.write(`const newResult = {};`);for(let r of n.keys){let n=a[r],o=A(r),s=e[r],c=s?._zod?.optin===`optional`,l=s?._zod?.optout===`optional`;t.write(`const ${n} = ${i(r)};`),c&&l?t.write(`
|
|
5
|
+
if (${n}.issues.length) {
|
|
6
|
+
if (${o} in input) {
|
|
7
|
+
payload.issues = payload.issues.concat(${n}.issues.map(iss => ({
|
|
8
|
+
...iss,
|
|
9
|
+
path: iss.path ? [${o}, ...iss.path] : [${o}]
|
|
10
|
+
})));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (${n}.value === undefined) {
|
|
15
|
+
if (${o} in input) {
|
|
16
|
+
newResult[${o}] = undefined;
|
|
17
|
+
}
|
|
18
|
+
} else {
|
|
19
|
+
newResult[${o}] = ${n}.value;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
`):c?t.write(`
|
|
23
|
+
if (${n}.issues.length) {
|
|
24
|
+
payload.issues = payload.issues.concat(${n}.issues.map(iss => ({
|
|
25
|
+
...iss,
|
|
26
|
+
path: iss.path ? [${o}, ...iss.path] : [${o}]
|
|
27
|
+
})));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (${n}.value === undefined) {
|
|
31
|
+
if (${o} in input) {
|
|
32
|
+
newResult[${o}] = undefined;
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
newResult[${o}] = ${n}.value;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
`):t.write(`
|
|
39
|
+
const ${n}_present = ${o} in input;
|
|
40
|
+
if (${n}.issues.length) {
|
|
41
|
+
payload.issues = payload.issues.concat(${n}.issues.map(iss => ({
|
|
42
|
+
...iss,
|
|
43
|
+
path: iss.path ? [${o}, ...iss.path] : [${o}]
|
|
44
|
+
})));
|
|
45
|
+
}
|
|
46
|
+
if (!${n}_present && !${n}.issues.length) {
|
|
47
|
+
payload.issues.push({
|
|
48
|
+
code: "invalid_type",
|
|
49
|
+
expected: "nonoptional",
|
|
50
|
+
input: undefined,
|
|
51
|
+
path: [${o}]
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (${n}_present) {
|
|
56
|
+
if (${n}.value === undefined) {
|
|
57
|
+
newResult[${o}] = undefined;
|
|
58
|
+
} else {
|
|
59
|
+
newResult[${o}] = ${n}.value;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
`)}t.write(`payload.value = newResult;`),t.write(`return payload;`);let s=t.compile();return(t,n)=>s(e,t,n)},a,o=le,s=!T.jitless,c=s&&ue.value,l=t.catchall,u;e._zod.parse=(d,f)=>{u??=r.value;let p=d.value;return o(p)?s&&c&&f?.async===!1&&f.jitless!==!0?(a||=i(t.shape),d=a(d,f),l?kn([],p,d,f,u,e):d):n(d,f):(d.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),d)}});function Mn(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!Se(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>Ee(e,r,E())))}),t)}var Nn=S(`$ZodUnion`,(e,t)=>{Wt.init(e,t),k(e._zod,`optin`,()=>t.options.some(e=>e._zod.optin===`optional`)?`optional`:void 0),k(e._zod,`optout`,()=>t.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),k(e._zod,`values`,()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),k(e._zod,`pattern`,()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>re(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>Mn(t,r,e,i)):Mn(o,r,e,i)}}),Pn=S(`$ZodIntersection`,(e,t)=>{Wt.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>In(e,t,n)):In(e,i,a)}});function Fn(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(j(e)&&j(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=Fn(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=t[r],o=Fn(i,a);if(!o.valid)return{valid:!1,mergeErrorPath:[r,...o.mergeErrorPath]};n.push(o.data)}return{valid:!0,data:n}}return{valid:!1,mergeErrorPath:[]}}function In(e,t,n){let r=new Map,i;for(let n of t.issues)if(n.code===`unrecognized_keys`){i??=n;for(let e of n.keys)r.has(e)||r.set(e,{}),r.get(e).l=!0}else e.issues.push(n);for(let t of n.issues)if(t.code===`unrecognized_keys`)for(let e of t.keys)r.has(e)||r.set(e,{}),r.get(e).r=!0;else e.issues.push(t);let a=[...r].filter(([,e])=>e.l&&e.r).map(([e])=>e);if(a.length&&i&&e.issues.push({...i,keys:a}),Se(e))return e;let o=Fn(t.value,n.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return e.value=o.data,e}var Ln=S(`$ZodRecord`,(e,t)=>{Wt.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!j(i))return n.issues.push({expected:`record`,code:`invalid_type`,input:i,inst:e}),n;let a=[],o=t.keyType._zod.values;if(o){n.value={};let s=new Set;for(let c of o)if(typeof c==`string`||typeof c==`number`||typeof c==`symbol`){s.add(typeof c==`number`?c.toString():c);let o=t.keyType._zod.run({value:c,issues:[]},r);if(o instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(o.issues.length){n.issues.push({code:`invalid_key`,origin:`record`,issues:o.issues.map(e=>Ee(e,r,E())),input:c,path:[c],inst:e});continue}let l=o.value,u=t.valueType._zod.run({value:i[c],issues:[]},r);u instanceof Promise?a.push(u.then(e=>{e.issues.length&&n.issues.push(...we(c,e.issues)),n.value[l]=e.value})):(u.issues.length&&n.issues.push(...we(c,u.issues)),n.value[l]=u.value)}let c;for(let e in i)s.has(e)||(c??=[],c.push(e));c&&c.length>0&&n.issues.push({code:`unrecognized_keys`,input:i,inst:e,keys:c})}else{n.value={};for(let o of Reflect.ownKeys(i)){if(o===`__proto__`||!Object.prototype.propertyIsEnumerable.call(i,o))continue;let s=t.keyType._zod.run({value:o,issues:[]},r);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof o==`string`&&xt.test(o)&&s.issues.length){let e=t.keyType._zod.run({value:Number(o),issues:[]},r);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(s=e)}if(s.issues.length){t.mode===`loose`?n.value[o]=i[o]:n.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>Ee(e,r,E())),input:o,path:[o],inst:e});continue}let c=t.valueType._zod.run({value:i[o],issues:[]},r);c instanceof Promise?a.push(c.then(e=>{e.issues.length&&n.issues.push(...we(o,e.issues)),n.value[s.value]=e.value})):(c.issues.length&&n.issues.push(...we(o,c.issues)),n.value[s.value]=c.value)}}return a.length?Promise.all(a).then(()=>n):n}}),Rn=S(`$ZodEnum`,(e,t)=>{Wt.init(e,t);let n=ee(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>M.has(typeof e)).map(e=>typeof e==`string`?fe(e):e.toString()).join(`|`)})$`),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),zn=S(`$ZodTransform`,(e,t)=>{Wt.init(e,t),e._zod.optin=`optional`,e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new w(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n.fallback=!0,n));if(i instanceof Promise)throw new C;return n.value=i,n.fallback=!0,n}});function Bn(e,t){return t===void 0&&(e.issues.length||e.fallback)?{issues:[],value:void 0}:e}var Vn=S(`$ZodOptional`,(e,t)=>{Wt.init(e,t),e._zod.optin=`optional`,e._zod.optout=`optional`,k(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),k(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${re(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(t.innerType._zod.optin===`optional`){let r=e.value,i=t.innerType._zod.run(e,n);return i instanceof Promise?i.then(e=>Bn(e,r)):Bn(i,r)}return e.value===void 0?e:t.innerType._zod.run(e,n)}}),Hn=S(`$ZodExactOptional`,(e,t)=>{Vn.init(e,t),k(e._zod,`values`,()=>t.innerType._zod.values),k(e._zod,`pattern`,()=>t.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),Un=S(`$ZodNullable`,(e,t)=>{Wt.init(e,t),k(e._zod,`optin`,()=>t.innerType._zod.optin),k(e._zod,`optout`,()=>t.innerType._zod.optout),k(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${re(e.source)}|null)$`):void 0}),k(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),Wn=S(`$ZodDefault`,(e,t)=>{Wt.init(e,t),e._zod.optin=`optional`,k(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>Gn(e,t)):Gn(r,t)}});function Gn(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var Kn=S(`$ZodPrefault`,(e,t)=>{Wt.init(e,t),e._zod.optin=`optional`,k(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),qn=S(`$ZodNonOptional`,(e,t)=>{Wt.init(e,t),k(e._zod,`values`,()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>Jn(t,e)):Jn(i,e)}});function Jn(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}var Yn=S(`$ZodCatch`,(e,t)=>{Wt.init(e,t),e._zod.optin=`optional`,k(e._zod,`optout`,()=>t.innerType._zod.optout),k(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ee(e,n,E()))},input:e.value}),e.issues=[],e.fallback=!0),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ee(e,n,E()))},input:e.value}),e.issues=[],e.fallback=!0),e)}}),Xn=S(`$ZodPipe`,(e,t)=>{Wt.init(e,t),k(e._zod,`values`,()=>t.in._zod.values),k(e._zod,`optin`,()=>t.in._zod.optin),k(e._zod,`optout`,()=>t.out._zod.optout),k(e._zod,`propValues`,()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>Zn(e,t.in,n)):Zn(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>Zn(e,t.out,n)):Zn(r,t.out,n)}});function Zn(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues,fallback:e.fallback},n)}var Qn=S(`$ZodPreprocess`,(e,t)=>{Xn.init(e,t)}),$n=S(`$ZodReadonly`,(e,t)=>{Wt.init(e,t),k(e._zod,`propValues`,()=>t.innerType._zod.propValues),k(e._zod,`values`,()=>t.innerType._zod.values),k(e._zod,`optin`,()=>t.innerType?._zod?.optin),k(e._zod,`optout`,()=>t.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(er):er(r)}});function er(e){return e.value=Object.freeze(e.value),e}var tr=S(`$ZodCustom`,(e,t)=>{Tt.init(e,t),Wt.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>nr(t,n,r,e));nr(i,n,r,e)}});function nr(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(Oe(e))}}var rr,ir=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function ar(){return new ir}(rr=globalThis).__zod_globalRegistry??(rr.__zod_globalRegistry=ar());var or=globalThis.__zod_globalRegistry;function sr(e,t){return new e({type:`string`,...N(t)})}function cr(e,t){return new e({type:`string`,coerce:!0,...N(t)})}function lr(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...N(t)})}function ur(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...N(t)})}function dr(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...N(t)})}function fr(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...N(t)})}function pr(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...N(t)})}function mr(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...N(t)})}function hr(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...N(t)})}function gr(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...N(t)})}function _r(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...N(t)})}function vr(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...N(t)})}function yr(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...N(t)})}function br(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...N(t)})}function xr(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...N(t)})}function Sr(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...N(t)})}function Cr(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...N(t)})}function wr(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...N(t)})}function Tr(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...N(t)})}function Er(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...N(t)})}function Dr(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...N(t)})}function Or(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...N(t)})}function kr(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...N(t)})}function Ar(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...N(t)})}function jr(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...N(t)})}function Mr(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...N(t)})}function Nr(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...N(t)})}function Pr(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...N(t)})}function Fr(e,t){return new e({type:`number`,checks:[],...N(t)})}function Ir(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...N(t)})}function Lr(e,t){return new e({type:`boolean`,...N(t)})}function Rr(e){return new e({type:`unknown`})}function zr(e,t){return new e({type:`never`,...N(t)})}function Br(e,t){return new Dt({check:`less_than`,...N(t),value:e,inclusive:!1})}function Vr(e,t){return new Dt({check:`less_than`,...N(t),value:e,inclusive:!0})}function Hr(e,t){return new Ot({check:`greater_than`,...N(t),value:e,inclusive:!1})}function Ur(e,t){return new Ot({check:`greater_than`,...N(t),value:e,inclusive:!0})}function Wr(e,t){return new kt({check:`multiple_of`,...N(t),value:e})}function Gr(e,t){return new jt({check:`max_length`,...N(t),maximum:e})}function Kr(e,t){return new Mt({check:`min_length`,...N(t),minimum:e})}function qr(e,t){return new Nt({check:`length_equals`,...N(t),length:e})}function Jr(e,t){return new Ft({check:`string_format`,format:`regex`,...N(t),pattern:e})}function Yr(e){return new It({check:`string_format`,format:`lowercase`,...N(e)})}function Xr(e){return new Lt({check:`string_format`,format:`uppercase`,...N(e)})}function Zr(e,t){return new Rt({check:`string_format`,format:`includes`,...N(t),includes:e})}function Qr(e,t){return new zt({check:`string_format`,format:`starts_with`,...N(t),prefix:e})}function $r(e,t){return new Bt({check:`string_format`,format:`ends_with`,...N(t),suffix:e})}function ei(e){return new Vt({check:`overwrite`,tx:e})}function ti(e){return ei(t=>t.normalize(e))}function ni(){return ei(e=>e.trim())}function ri(){return ei(e=>e.toLowerCase())}function ii(){return ei(e=>e.toUpperCase())}function ai(){return ei(e=>se(e))}function oi(e,t,n){return new e({type:`array`,element:t,...N(n)})}function si(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...N(n)})}function ci(e,t){let n=li(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(Oe(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,r.input??=t.value,r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(Oe(r))}},e(t.value,t)),t);return n}function li(e,t){let n=new Tt({check:`custom`,...N(t)});return n._zod.check=e,n}function ui(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??or,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,external:e?.external??void 0}}function di(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o);let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,di(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Object.assign(o.schema,c),t.io===`input`&&mi(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function fi(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${a}`}}if(t[1]===n)return{ref:`#`};let i=`#/${r}/`,a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+a}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/<root>
|
|
64
|
+
|
|
65
|
+
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function pi(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e===`$ref`||e===`allOf`||e in a||delete i[e];if(s.$ref&&n.def)for(let e in i)e===`$ref`||e===`allOf`||e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e===`$ref`||e===`allOf`||e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,o[e.defId]=e.def)}e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:gi(t,`input`,e.processors),output:gi(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function mi(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return mi(r.element,n);if(r.type===`set`)return mi(r.valueType,n);if(r.type===`lazy`)return mi(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`)return mi(r.innerType,n);if(r.type===`intersection`)return mi(r.left,n)||mi(r.right,n);if(r.type===`record`||r.type===`map`)return mi(r.keyType,n)||mi(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:mi(r.in,n)||mi(r.out,n);if(r.type===`object`){for(let e in r.shape)if(mi(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(mi(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(mi(e,n))return!0;return!!(r.rest&&mi(r.rest,n))}return!1}var hi=(e,t={})=>n=>{let r=ui({...n,processors:t});return di(e,r),fi(r,e),pi(r,e)},gi=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=ui({...i??{},target:a,io:t,processors:n});return di(e,o),fi(o,e),pi(o,e)},_i={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},vi=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=_i[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},yi=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;typeof s==`string`&&s.includes(`int`)?i.type=`integer`:i.type=`number`;let d=typeof u==`number`&&u>=(a??-1/0),f=typeof l==`number`&&l<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;d?p?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l:typeof o==`number`&&(i.maximum=o),typeof c==`number`&&(i.multipleOf=c)},bi=(e,t,n,r)=>{n.type=`boolean`},xi=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`BigInt cannot be represented in JSON Schema`)},Si=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Symbols cannot be represented in JSON Schema`)},Ci=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},wi=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Undefined cannot be represented in JSON Schema`)},Ti=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Void cannot be represented in JSON Schema`)},Ei=(e,t,n,r)=>{n.not={}},Di=(e,t,n,r)=>{},Oi=(e,t,n,r)=>{},ki=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Date cannot be represented in JSON Schema`)},Ai=(e,t,n,r)=>{let i=e._zod.def,a=ee(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},ji=(e,t,n,r)=>{let i=e._zod.def,a=[];for(let e of i.values)if(e===void 0){if(t.unrepresentable===`throw`)throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof e==`bigint`){if(t.unrepresentable===`throw`)throw Error(`BigInt literals cannot be represented in JSON Schema`);a.push(Number(e))}else a.push(e);if(a.length!==0)if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a},Mi=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`NaN cannot be represented in JSON Schema`)},Ni=(e,t,n,r)=>{let i=n,a=e._zod.pattern;if(!a)throw Error(`Pattern not found in template literal`);i.type=`string`,i.pattern=a.source},Pi=(e,t,n,r)=>{let i=n,a={type:`string`,format:`binary`,contentEncoding:`binary`},{minimum:o,maximum:s,mime:c}=e._zod.bag;o!==void 0&&(a.minLength=o),s!==void 0&&(a.maxLength=s),c?c.length===1?(a.contentMediaType=c[0],Object.assign(i,a)):(Object.assign(i,a),i.anyOf=c.map(e=>({contentMediaType:e}))):Object.assign(i,a)},Fi=(e,t,n,r)=>{n.type=`boolean`},Ii=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},Li=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Function types cannot be represented in JSON Schema`)},Ri=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},zi=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Map cannot be represented in JSON Schema`)},Bi=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Set cannot be represented in JSON Schema`)},Vi=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=di(a.element,t,{...r,path:[...r.path,`items`]})},Hi=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=di(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=di(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Ui=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>di(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Wi=(e,t,n,r)=>{let i=e._zod.def,a=di(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=di(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},Gi=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>di(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?di(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null;t.target===`draft-2020-12`?(i.prefixItems=c,l&&(i.items=l)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),i.minItems=c.length,l||(i.maxItems=c.length)):(i.items=c,l&&(i.additionalItems=l));let{minimum:u,maximum:d}=e._zod.bag;typeof u==`number`&&(i.minItems=u),typeof d==`number`&&(i.maxItems=d)},Ki=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=o._zod.bag?.patterns;if(a.mode===`loose`&&s&&s.size>0){let e=di(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)i.patternProperties[t.source]=e}else(t.target===`draft-07`||t.target===`draft-2020-12`)&&(i.propertyNames=di(a.keyType,t,{...r,path:[...r.path,`propertyNames`]})),i.additionalProperties=di(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]});let c=o._zod.values;if(c){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e)}},qi=(e,t,n,r)=>{let i=e._zod.def,a=di(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Ji=(e,t,n,r)=>{let i=e._zod.def;di(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Yi=(e,t,n,r)=>{let i=e._zod.def;di(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},Xi=(e,t,n,r)=>{let i=e._zod.def;di(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},Zi=(e,t,n,r)=>{let i=e._zod.def;di(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},Qi=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;di(o,t,r);let s=t.seen.get(e);s.ref=o},$i=(e,t,n,r)=>{let i=e._zod.def;di(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},ea=(e,t,n,r)=>{let i=e._zod.def;di(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},ta=(e,t,n,r)=>{let i=e._zod.def;di(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},na={string:vi,number:yi,boolean:bi,bigint:xi,symbol:Si,null:Ci,undefined:wi,void:Ti,never:Ei,any:Di,unknown:Oi,date:ki,enum:Ai,literal:ji,nan:Mi,template_literal:Ni,file:Pi,success:Fi,custom:Ii,function:Li,transform:Ri,map:zi,set:Bi,array:Vi,object:Hi,union:Ui,intersection:Wi,tuple:Gi,record:Ki,nullable:qi,nonoptional:Ji,default:Yi,prefault:Xi,catch:Zi,pipe:Qi,readonly:$i,promise:ea,optional:ta,lazy:(e,t,n,r)=>{let i=e._zod.innerType;di(i,t,r);let a=t.seen.get(e);a.ref=i}};function ra(e,t){if(`_idmap`in e){let n=e,r=ui({...t,processors:na}),i={};for(let e of n._idmap.entries()){let[t,n]=e;di(n,r)}let a={};r.external={registry:n,uri:t?.uri,defs:i};for(let e of n._idmap.entries()){let[t,n]=e;fi(r,n),a[t]=pi(r,n)}return Object.keys(i).length>0&&(a.__shared={[r.target===`draft-2020-12`?`$defs`:`definitions`]:i}),{schemas:a}}let n=ui({...t,processors:na});return di(e,n),fi(n,e),pi(n,e)}var ia=S(`ZodISODateTime`,(e,t)=>{an.init(e,t),Aa.init(e,t)});function aa(e){return jr(ia,e)}var oa=S(`ZodISODate`,(e,t)=>{on.init(e,t),Aa.init(e,t)});function sa(e){return Mr(oa,e)}var ca=S(`ZodISOTime`,(e,t)=>{sn.init(e,t),Aa.init(e,t)});function la(e){return Nr(ca,e)}var ua=S(`ZodISODuration`,(e,t)=>{cn.init(e,t),Aa.init(e,t)});function da(e){return Pr(ua,e)}var fa=S(`ZodError`,(e,t)=>{Ae.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>Ne(e,t)},flatten:{value:t=>Me(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,D,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,D,2)}},isEmpty:{get(){return e.issues.length===0}}})},{Parent:Error}),pa=Pe(fa),ma=Fe(fa),ha=Ie(fa),ga=Re(fa),_a=Be(fa),va=Ve(fa),ya=He(fa),ba=Ue(fa),xa=We(fa),Sa=Ge(fa),Ca=Ke(fa),wa=qe(fa),Ta=new WeakMap;function Ea(e,t,n){let r=Object.getPrototypeOf(e),i=Ta.get(r);if(i||(i=new Set,Ta.set(r,i)),!i.has(t)){i.add(t);for(let e in n){let t=n[e];Object.defineProperty(r,e,{configurable:!0,enumerable:!1,get(){let n=t.bind(this);return Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:n}),n},set(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:t})}})}}}var Da=S(`ZodType`,(e,t)=>(Wt.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:gi(e,`input`),output:gi(e,`output`)}}),e.toJSONSchema=hi(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{value:t}),e.parse=(t,n)=>pa(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>ha(e,t,n),e.parseAsync=async(t,n)=>ma(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>ga(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>_a(e,t,n),e.decode=(t,n)=>va(e,t,n),e.encodeAsync=async(t,n)=>ya(e,t,n),e.decodeAsync=async(t,n)=>ba(e,t,n),e.safeEncode=(t,n)=>xa(e,t,n),e.safeDecode=(t,n)=>Sa(e,t,n),e.safeEncodeAsync=async(t,n)=>Ca(e,t,n),e.safeDecodeAsync=async(t,n)=>wa(e,t,n),Ea(e,`ZodType`,{check(...e){let t=this.def;return this.clone(oe(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return pe(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Ro(e,t))},superRefine(e,t){return this.check(zo(e,t))},overwrite(e){return this.check(ei(e))},optional(){return yo(this)},exactOptional(){return xo(this)},nullable(){return Co(this)},nullish(){return yo(Co(this))},nonoptional(e){return ko(this,e)},array(){return oo(this)},or(e){return lo([this,e])},and(e){return fo(this,e)},transform(e){return No(this,_o(e))},default(e){return To(this,e)},prefault(e){return Do(this,e)},catch(e){return jo(this,e)},pipe(e){return No(this,e)},readonly(){return Io(this)},describe(e){let t=this.clone();return or.add(t,{description:e}),t},meta(...e){if(e.length===0)return or.get(this);let t=this.clone();return or.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e){return e(this)}}),Object.defineProperty(e,"description",{get(){return or.get(e)?.description},configurable:!0}),e)),Oa=S(`_ZodString`,(e,t)=>{Gt.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>vi(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,Ea(e,`_ZodString`,{regex(...e){return this.check(Jr(...e))},includes(...e){return this.check(Zr(...e))},startsWith(...e){return this.check(Qr(...e))},endsWith(...e){return this.check($r(...e))},min(...e){return this.check(Kr(...e))},max(...e){return this.check(Gr(...e))},length(...e){return this.check(qr(...e))},nonempty(...e){return this.check(Kr(1,...e))},lowercase(e){return this.check(Yr(e))},uppercase(e){return this.check(Xr(e))},trim(){return this.check(ni())},normalize(...e){return this.check(ti(...e))},toLowerCase(){return this.check(ri())},toUpperCase(){return this.check(ii())},slugify(){return this.check(ai())}})}),ka=S(`ZodString`,(e,t)=>{Gt.init(e,t),Oa.init(e,t),e.email=t=>e.check(lr(ja,t)),e.url=t=>e.check(hr(Pa,t)),e.jwt=t=>e.check(Ar(Ya,t)),e.emoji=t=>e.check(gr(Fa,t)),e.guid=t=>e.check(ur(Ma,t)),e.uuid=t=>e.check(dr(Na,t)),e.uuidv4=t=>e.check(fr(Na,t)),e.uuidv6=t=>e.check(pr(Na,t)),e.uuidv7=t=>e.check(mr(Na,t)),e.nanoid=t=>e.check(_r(Ia,t)),e.guid=t=>e.check(ur(Ma,t)),e.cuid=t=>e.check(vr(La,t)),e.cuid2=t=>e.check(yr(Ra,t)),e.ulid=t=>e.check(br(za,t)),e.base64=t=>e.check(Dr(Ka,t)),e.base64url=t=>e.check(Or(qa,t)),e.xid=t=>e.check(xr(Ba,t)),e.ksuid=t=>e.check(Sr(Va,t)),e.ipv4=t=>e.check(Cr(Ha,t)),e.ipv6=t=>e.check(wr(Ua,t)),e.cidrv4=t=>e.check(Tr(Wa,t)),e.cidrv6=t=>e.check(Er(Ga,t)),e.e164=t=>e.check(kr(Ja,t)),e.datetime=t=>e.check(aa(t)),e.date=t=>e.check(sa(t)),e.time=t=>e.check(la(t)),e.duration=t=>e.check(da(t))});function F(e){return sr(ka,e)}var Aa=S(`ZodStringFormat`,(e,t)=>{Kt.init(e,t),Oa.init(e,t)}),ja=S(`ZodEmail`,(e,t)=>{Yt.init(e,t),Aa.init(e,t)}),Ma=S(`ZodGUID`,(e,t)=>{qt.init(e,t),Aa.init(e,t)}),Na=S(`ZodUUID`,(e,t)=>{Jt.init(e,t),Aa.init(e,t)}),Pa=S(`ZodURL`,(e,t)=>{Xt.init(e,t),Aa.init(e,t)}),Fa=S(`ZodEmoji`,(e,t)=>{Zt.init(e,t),Aa.init(e,t)}),Ia=S(`ZodNanoID`,(e,t)=>{Qt.init(e,t),Aa.init(e,t)}),La=S(`ZodCUID`,(e,t)=>{$t.init(e,t),Aa.init(e,t)}),Ra=S(`ZodCUID2`,(e,t)=>{en.init(e,t),Aa.init(e,t)}),za=S(`ZodULID`,(e,t)=>{tn.init(e,t),Aa.init(e,t)}),Ba=S(`ZodXID`,(e,t)=>{nn.init(e,t),Aa.init(e,t)}),Va=S(`ZodKSUID`,(e,t)=>{rn.init(e,t),Aa.init(e,t)}),Ha=S(`ZodIPv4`,(e,t)=>{ln.init(e,t),Aa.init(e,t)}),Ua=S(`ZodIPv6`,(e,t)=>{un.init(e,t),Aa.init(e,t)}),Wa=S(`ZodCIDRv4`,(e,t)=>{dn.init(e,t),Aa.init(e,t)}),Ga=S(`ZodCIDRv6`,(e,t)=>{fn.init(e,t),Aa.init(e,t)}),Ka=S(`ZodBase64`,(e,t)=>{mn.init(e,t),Aa.init(e,t)}),qa=S(`ZodBase64URL`,(e,t)=>{gn.init(e,t),Aa.init(e,t)}),Ja=S(`ZodE164`,(e,t)=>{_n.init(e,t),Aa.init(e,t)}),Ya=S(`ZodJWT`,(e,t)=>{yn.init(e,t),Aa.init(e,t)}),Xa=S(`ZodNumber`,(e,t)=>{bn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>yi(e,t,n,r),Ea(e,`ZodNumber`,{gt(e,t){return this.check(Hr(e,t))},gte(e,t){return this.check(Ur(e,t))},min(e,t){return this.check(Ur(e,t))},lt(e,t){return this.check(Br(e,t))},lte(e,t){return this.check(Vr(e,t))},max(e,t){return this.check(Vr(e,t))},int(e){return this.check(Qa(e))},safe(e){return this.check(Qa(e))},positive(e){return this.check(Hr(0,e))},nonnegative(e){return this.check(Ur(0,e))},negative(e){return this.check(Br(0,e))},nonpositive(e){return this.check(Vr(0,e))},multipleOf(e,t){return this.check(Wr(e,t))},step(e,t){return this.check(Wr(e,t))},finite(){return this}});let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function I(e){return Fr(Xa,e)}var Za=S(`ZodNumberFormat`,(e,t)=>{xn.init(e,t),Xa.init(e,t)});function Qa(e){return Ir(Za,e)}var $a=S(`ZodBoolean`,(e,t)=>{Sn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>bi(e,t,n,r)});function eo(e){return Lr($a,e)}var to=S(`ZodUnknown`,(e,t)=>{Cn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function no(){return Rr(to)}var ro=S(`ZodNever`,(e,t)=>{wn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ei(e,t,n,r)});function io(e){return zr(ro,e)}var ao=S(`ZodArray`,(e,t)=>{En.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vi(e,t,n,r),e.element=t.element,Ea(e,`ZodArray`,{min(e,t){return this.check(Kr(e,t))},nonempty(e){return this.check(Kr(1,e))},max(e,t){return this.check(Gr(e,t))},length(e,t){return this.check(qr(e,t))},unwrap(){return this.element}})});function oo(e,t){return oi(ao,e,t)}var so=S(`ZodObject`,(e,t)=>{jn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hi(e,t,n,r),k(e,`shape`,()=>t.shape),Ea(e,`ZodObject`,{keyof(){return R(Object.keys(this._zod.def.shape))},catchall(e){return this.clone({...this._zod.def,catchall:e})},passthrough(){return this.clone({...this._zod.def,catchall:no()})},loose(){return this.clone({...this._zod.def,catchall:no()})},strict(){return this.clone({...this._zod.def,catchall:io()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(e){return _e(this,e)},safeExtend(e){return ve(this,e)},merge(e){return ye(this,e)},pick(e){return P(this,e)},omit(e){return ge(this,e)},partial(...e){return be(vo,this,e[0])},required(...e){return xe(Oo,this,e[0])}})});function L(e,t){return new so({type:`object`,shape:e??{},...N(t)})}var co=S(`ZodUnion`,(e,t)=>{Nn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ui(e,t,n,r),e.options=t.options});function lo(e,t){return new co({type:`union`,options:e,...N(t)})}var uo=S(`ZodIntersection`,(e,t)=>{Pn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wi(e,t,n,r)});function fo(e,t){return new uo({type:`intersection`,left:e,right:t})}var po=S(`ZodRecord`,(e,t)=>{Ln.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ki(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function mo(e,t,n){return!t||!t._zod?new po({type:`record`,keyType:F(),valueType:e,...N(t)}):new po({type:`record`,keyType:e,valueType:t,...N(n)})}var ho=S(`ZodEnum`,(e,t)=>{Rn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ai(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new ho({...t,checks:[],...N(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new ho({...t,checks:[],...N(r),entries:i})}});function R(e,t){return new ho({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...N(t)})}var go=S(`ZodTransform`,(e,t)=>{zn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ri(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new w(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Oe(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(Oe(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n.fallback=!0,n)):(n.value=i,n.fallback=!0,n)}});function _o(e){return new go({type:`transform`,transform:e})}var vo=S(`ZodOptional`,(e,t)=>{Vn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ta(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function yo(e){return new vo({type:`optional`,innerType:e})}var bo=S(`ZodExactOptional`,(e,t)=>{Hn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ta(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function xo(e){return new bo({type:`optional`,innerType:e})}var So=S(`ZodNullable`,(e,t)=>{Un.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>qi(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Co(e){return new So({type:`nullable`,innerType:e})}var wo=S(`ZodDefault`,(e,t)=>{Wn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Yi(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function To(e,t){return new wo({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():de(t)}})}var Eo=S(`ZodPrefault`,(e,t)=>{Kn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xi(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Do(e,t){return new Eo({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():de(t)}})}var Oo=S(`ZodNonOptional`,(e,t)=>{qn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ji(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function ko(e,t){return new Oo({type:`nonoptional`,innerType:e,...N(t)})}var Ao=S(`ZodCatch`,(e,t)=>{Yn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zi(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function jo(e,t){return new Ao({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}var Mo=S(`ZodPipe`,(e,t)=>{Xn.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Qi(e,t,n,r),e.in=t.in,e.out=t.out});function No(e,t){return new Mo({type:`pipe`,in:e,out:t})}var Po=S(`ZodPreprocess`,(e,t)=>{Mo.init(e,t),Qn.init(e,t)}),Fo=S(`ZodReadonly`,(e,t)=>{$n.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$i(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Io(e){return new Fo({type:`readonly`,innerType:e})}var Lo=S(`ZodCustom`,(e,t)=>{tr.init(e,t),Da.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ii(e,t,n,r)});function Ro(e,t={}){return si(Lo,e,t)}function zo(e,t){return ci(e,t)}function Bo(e,t){return new Po({type:`pipe`,in:_o(e),out:t})}function Vo(e){return cr(ka,e)}var Ho=L({x:I().int().min(0).describe(`Column offset, 0-based`),y:I().int().min(0).describe(`Row offset, 0-based`),w:I().int().min(1).describe(`Width in grid columns`),h:I().int().min(1).describe(`Height in grid rows`)}),Uo=L({accentHue:I().int().min(0).max(360).optional().describe(`Override this card's accent hue (0–360) — its rim, title dot, and highlights. Inherits theme.accentHue if unset.`),accentSat:I().min(0).max(100).optional().describe(`Override this card's accent saturation (0–100).`),baseHue:I().int().min(0).max(360).optional().describe(`Override this card's dark surface tint hue (0–360) — warm or cool just this one card. Inherits theme.baseHue if unset.`),baseSat:I().min(0).max(100).optional().describe(`Override this card's surface tint saturation (0–100).`),surfaceOpacity:I().min(.3).max(1).optional().describe(`Override this card's surface opacity (0.3–1) — drop it toward 0.5 for a single frosted/glassy card over the background.`),radius:I().min(0).optional().describe(`Override this card's corner radius in px (0 = square).`),borderStrength:I().min(0).max(1).optional().describe(`Override this card's rim opacity (0–1); 0 = borderless flat card.`),density:I().min(.6).max(1.4).optional().describe(`Override this card's padding scale (0.6–1.4).`),elevation:I().min(0).max(2).optional().describe(`Override this card's shadow depth (0–2); raise it to float a hero card, 0 to flatten one.`)}).describe("Per-frame cosmetic overrides — accent, surface tint, glass, corners, border, padding, shadow — for THIS card only. Every field optional; omit to inherit the dashboard `theme`/`appearance`."),Wo=[`USD`,`THB`,`EUR`,`GBP`,`JPY`,`CNY`,`KRW`,`SGD`,`AUD`,`CAD`,`CHF`,`INR`,`IDR`,`MYR`,`PHP`,`HKD`,`BRL`,`MXN`,`ZAR`],Go=L({code:R(Wo).default(`USD`).describe(`Currency every money figure on the dashboard is displayed in, converted from USD at the live ECB reference rate — e.g. "THB" shows a Thai-baht board. Non-money figures (percentages, counts, rates) are unaffected, and US-macro series (Treasury yields, CPI, the national debt) stay in USD because converting them would be meaningless.`)}).describe("Dashboard-wide display currency. Frames may override it per card via their own `currency` field."),Ko=L({id:F().describe(`Unique instance id within the dashboard`),frame:F().describe(`Name of a registered frame`),style:Uo.optional().describe(`Optional per-frame cosmetic overrides (accent, glass, corners, …) for this card only. Omit to inherit the dashboard theme/appearance.`),title:F().optional().describe(`Optional custom card title. Omit it to use the frame's own polished default label (its catalogue \`label\`, e.g. "OI by Strike") — that is the norm. Only set this for a genuinely instance-specific label the default can't know, e.g. the ticker on a price-chart ("TSLA") or which outlet a news-feed shows. Never abbreviate. Ignored by chrome-less frames like heading.`),currency:R(Wo).optional().describe('Display currency for THIS card only, overriding the dashboard-wide `currency` (e.g. keep one card in "USD" on a baht board). Omit to inherit. Purely presentational — it converts USD figures for display. Note it is NOT the same as a `config.currency` some frames have (the metals LBMA-fix frames use that to pick which published fix series to READ); this field never changes which data is fetched.'),position:Ho,layouts:mo(F(),Ho).optional().describe('Per-mode layout overrides keyed by grid.mode (e.g. "flow-horizontal"). `position` is the canonical flow-vertical layout; this holds the other modes\' placements so each layout mode keeps its own independent arrangement. Editor-managed — agents only need to set `position`.'),config:mo(F(),no()).default({}).describe(`Frame config; validated against the frame's own schema at render time`)}),qo=L({type:R([`none`,`color`,`gradient`,`unicorn`,`image`]).default(`none`).describe(`Background style: 'none' (the signature dark indigo glow — the default), 'color' (a solid colour), 'gradient' (a custom two-colour linear gradient), 'unicorn' (an animated Unicorn Studio scene), or 'image' (a full-bleed photo/illustration behind the dashboard, with a legibility scrim).`),color:F().default(`#0a0a12`).describe(`Solid background colour (any CSS colour). Used when type is 'color'.`),gradientFrom:F().default(`#1b1e4d`).describe(`Gradient start colour. Used when type is 'gradient'.`),gradientTo:F().default(`#07070c`).describe(`Gradient end colour. Used when type is 'gradient'.`),gradientAngle:I().min(0).max(360).default(160).describe(`Gradient angle in degrees (0 = upward, 90 = rightward, 180 = downward). Used when type is 'gradient'.`),projectId:F().optional().describe(`Unicorn Studio public project id — required when type is 'unicorn'.`),scale:I().min(.1).max(2).default(1).describe(`Unicorn scene render scale.`),dpi:I().min(.5).max(3).default(1.5).describe(`Unicorn scene device-pixel-ratio cap (perf vs sharpness).`),opacity:I().min(0).max(1).default(.16).describe(`Opacity of the unicorn scene (0–1). Keep moderate (~0.15) so the animation reads as a living backdrop in the gutters without competing with the (opaque) dashboard cards.`),imageUrl:F().optional().describe(`Background image URL — required when type is 'image'. An https URL, or a local path served next to the dashboard (e.g. '/hero.png'). Rendered full-bleed behind everything.`),imageFit:R([`cover`,`contain`]).default(`cover`).describe(`How the background image fills the viewport when type is 'image': 'cover' crops to fill (default), 'contain' letterboxes to show the whole image.`),imageBlur:I().min(0).max(40).default(0).describe(`Gaussian blur applied to the background image in px (0–40). Blur a busy photo so the dashboard cards stay readable over it. Used when type is 'image'.`),overlayOpacity:I().min(0).max(1).default(.55).describe(`Opacity of the dark scrim laid over the background image (0–1). Raise it to darken a bright image so card text stays legible; lower it to let the image show through. Used when type is 'image'.`)}).describe(`Visual background rendered behind the whole dashboard.`),Jo=L({accentHue:I().int().min(0).max(360).default(242).describe(`Brand accent hue in degrees on the HSL color wheel (0–360). Rotates the dashboard's accent — card rims, title dots, chart highlights, loading states — across the spectrum. 242 is the default zframes indigo; rough anchors: 0 red, 35 orange, 50 amber, 150 green, 190 teal, 210 blue, 280 violet, 330 pink. Semantic up/down green/red, asset logos, and per-frame chart colors stay fixed.`),accentSat:I().min(0).max(100).default(90).describe(`Accent saturation as an HSL percentage (0–100). 90 is the default vivid zframes accent; lower it for muted/pastel rims and dots, 0 for a near-grayscale monochrome accent. Pairs with accentHue — hue picks the color, saturation picks how vivid it is.`),baseHue:I().int().min(0).max(360).default(233).describe(`Hue of the dark card surface itself, in degrees (0–360). 233 is the default near-black indigo-navy; rotate it to re-temperature every card — e.g. 30 warms toward charcoal-brown, 150 toward deep forest, 210 toward cool slate. The surface stays dark (lightness is fixed); only its tint moves. Independent of accentHue, which only colours rims/highlights.`),baseSat:I().min(0).max(100).default(20).describe(`Saturation of the dark card surface as an HSL percentage (0–100). 20 is the default subtle navy tint; raise it for a richer coloured-black surface, drop it toward 0 for a neutral graphite/black with no colour cast. Pairs with baseHue.`),upColor:F().regex(/^#[0-9a-fA-F]{6}$/,`must be a 6-digit hex colour like #3fd08f`).default(`#3fd08f`).describe(`Semantic colour for gains / positive change / bullish (up). 6-digit hex; default #3fd08f (green). Tints every gain delta, mover row, up-candle, and 'long'/'call' marker. Set this and downColor to a non-green/red pair (e.g. blue/orange) for a colourblind-friendly dashboard. Distinct from the accent (which is brand colour, not meaning) and from the error red.`),downColor:F().regex(/^#[0-9a-fA-F]{6}$/,`must be a 6-digit hex colour like #ff6b81`).default(`#ff6b81`).describe(`Semantic colour for losses / negative change / bearish (down). 6-digit hex; default #ff6b81 (red). The counterpart to upColor — tints every loss delta, mover row, down-candle, and 'short'/'put' marker.`),surface:R([`dark`,`light`]).default(`dark`).describe(`Overall surface mode. 'dark' (default) is the signature dark dashboard — light text on dark cards. 'light' flips to a daylight scheme — dark text on near-white cards — for a printed/paper or bright-office look. The accent (baseHue tints the surface either way), the semantic up/down colours, and typography are unchanged; only the ink + card lightness invert.`)}).describe(`Dashboard-wide colour identity — accent (rims/highlights), the card-surface tint (base), the light/dark surface mode, and the semantic up/down (gain/loss) colours.`);function Yo(e){let t=e===`light`;return{"--zf-ink-l":t?`16%`:`100%`,"--zf-surf-l1":t?`98%`:`12.5%`,"--zf-surf-l2":t?`96%`:`7%`,"--zf-surf-l3":t?`94%`:`5.3%`}}var Xo=L({fontFamily:R([`sans`,`mono`,`serif`]).default(`sans`).describe(`Type family for all dashboard text. 'sans' is the default DM Sans (clean, modern); 'mono' switches to a monospaced system stack (a Bloomberg/terminal feel, numbers in fixed columns); 'serif' uses a system serif (editorial). Affects card titles, labels, and readouts alike.`),numericStyle:R([`proportional`,`tabular`]).default(`proportional`).describe(`How digits are spaced everywhere on the dashboard. 'proportional' is the default (natural widths); 'tabular' forces fixed-width figures (font-variant-numeric: tabular-nums) so live prices and tickers stop shifting sideways as digits change — recommended for number-dense dashboards. Hero stat numerals are always tabular regardless.`),scale:I().min(.85).max(1.25).default(1).describe(`Global text-size multiplier (0.85–1.25). 1 is the default. Scales all dashboard text together by setting the root font size, so chart labels, readouts, and titles grow or shrink as one — raise it for legibility on a large display, lower it to pack more in. Distinct from appearance.density, which scales card padding, not text. Grid cell heights are in pixels and stay fixed, so text can overflow a small card at high scale.`)}).describe(`Dashboard-wide typography — font family, numeric digit style, and global text scale.`),Zo={sans:`"DM Sans", sans-serif`,mono:`ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace`,serif:`ui-serif, Georgia, "Times New Roman", serif`},Qo={proportional:`normal`,tabular:`tabular-nums`},$o=L({radius:I().min(0).default(18).describe(`Frame corner radius in pixels, applied to every card via --zf-frame-radius. 0 squares the corners; the editor's Appearance rail exposes this as a slider.`),borderStrength:I().min(0).max(1).default(.22).describe(`Opacity of each card's accent rim (0–1) via --zf-border-alpha. 0 = borderless flat cards, 1 = a solid outlined rim; 0.22 is the default soft edge. Hover lifts it a notch automatically.`),surfaceOpacity:I().min(.3).max(1).default(1).describe(`Opacity of the card surface (0.3–1) via --zf-surface-opacity. 1 = opaque cards (default); lower it toward 0.5 for frosted/glassy cards that let the dashboard background show through. Kept ≥0.3 so card content stays legible.`),density:I().min(.6).max(1.4).default(1).describe(`Card padding scale (0.6–1.4) via --zf-density. 1 = the comfortable default; <1 tightens padding for information-dense dashboards, >1 gives roomier breathing space.`),elevation:I().min(0).max(2).default(1).describe(`Card shadow depth (0–2) via --zf-elevation. 0 = flat (no drop shadow), 1 = the default resting shadow, 2 = a heavier floating lift. Scales the card's drop shadow only.`)}).describe("Card surface treatment — corners, border, opacity, padding density, and shadow depth. Distinct from `grid` (geometry) and `theme` (accent color)."),es=Bo(e=>{if(!e||typeof e!=`object`)return e;let t=e,n=t.grid;if(n&&typeof n==`object`&&`radius`in n){let{radius:e,...r}=n;t={...t,grid:r,appearance:{radius:e,...t.appearance??{}}}}let r=t.background;return r&&typeof r==`object`&&r.type===`gradient`&&!(`gradientFrom`in r)&&(t={...t,background:{...r,type:`none`}}),t},L({version:Vo().default(`1.0.0`).describe('Spec version, a semver-style string like package.json\'s ("1.0.0"). A legacy numeric `1` from an older spec is coerced to "1".'),title:F().describe(`Dashboard name, like package.json's name.`),author:F().optional().describe(`Who made this dashboard — a free-form credit, like package.json's author ("You" or "You <you@example.com>"). Optional.`),grid:L({mode:R([`flow-vertical`,`flow-horizontal`,`canvas`]).default(`flow-vertical`).describe(`Layout model. 'flow-vertical' (default): a fixed number of columns fill the viewport width; the board grows downward and scrolls vertically — the classic dashboard. 'flow-horizontal': a fixed number of rows fill the viewport height; the board grows rightward and scrolls horizontally — suited to ultrawide and wall displays. 'canvas': an unbounded pan/zoom plane (not yet implemented; rendered as flow-vertical for now).`),columns:I().int().min(1).default(12).describe("Number of columns the grid is divided into across the viewport width (flow-vertical). A frame's `position` x/w are in these column units."),rowHeight:I().min(8).default(96).describe("Pixel height of each grid row (flow-vertical). A frame's `position` y/h are in these row units."),rows:I().int().min(1).default(6).describe('Number of height-bounded rows the horizontal board (flow-horizontal) fills before it scrolls sideways. A frame\'s `layouts["flow-horizontal"]` y/h are in these row units. Ignored in flow-vertical.'),gap:I().min(0).default(12).describe(`Pixels of space between frames (the grid gutter). 0 makes the cards flush; the editor's Layout rail exposes this as a slider.`),paddingX:I().min(0).default(0).describe(`Horizontal padding (px) inside the dashboard grid — the left/right gutter between the frames and the viewport edges (the x-axis inset). 0 (default) keeps the board flush to the edges; the editor's Layout rail exposes this as a slider.`)}).default({mode:`flow-vertical`,columns:12,rowHeight:96,rows:6,gap:12,paddingX:0}),background:qo.default({type:`none`,color:`#0a0a12`,gradientFrom:`#1b1e4d`,gradientTo:`#07070c`,gradientAngle:160,scale:1,dpi:1.5,opacity:.16,imageFit:`cover`,imageBlur:0,overlayOpacity:.55}),theme:Jo.default({accentHue:242,accentSat:90,baseHue:233,baseSat:20,upColor:`#3fd08f`,downColor:`#ff6b81`,surface:`dark`}),currency:Go.default({code:`USD`}),typography:Xo.default({fontFamily:`sans`,numericStyle:`proportional`,scale:1}),appearance:$o.default({radius:18,borderStrength:.22,surfaceOpacity:1,density:1,elevation:1}),frames:oo(Ko)})),ts=[{key:`zframes`,label:`zframes`,description:`The signature indigo on near-black navy, DM Sans, soft rounded cards — the default look.`,theme:{accentHue:242,accentSat:90,baseHue:233,baseSat:20},typography:{fontFamily:`sans`,numericStyle:`proportional`},appearance:{radius:18,borderStrength:.22,surfaceOpacity:1,density:1,elevation:1},scene:`aurora`},{key:`terminal`,label:`Terminal`,description:`Phosphor green on black, monospaced, fixed-width digits, sharp dense flat cards — a trading-terminal feel.`,theme:{accentHue:145,accentSat:85,baseHue:150,baseSat:16},typography:{fontFamily:`mono`,numericStyle:`tabular`},appearance:{radius:4,borderStrength:.34,surfaceOpacity:1,density:.85,elevation:.4},scene:`verdant`},{key:`amber`,label:`Amber`,description:`Warm amber on charcoal, monospaced, tabular, slightly sharp cards — a retro CRT console.`,theme:{accentHue:38,accentSat:95,baseHue:30,baseSat:18},typography:{fontFamily:`mono`,numericStyle:`tabular`},appearance:{radius:6,borderStrength:.3,surfaceOpacity:1,density:.9,elevation:.6},scene:`ember`},{key:`graphite`,label:`Graphite`,description:`Near-grayscale slate, faint rims, flat quiet cards, tabular numbers — calm and neutral.`,theme:{accentHue:220,accentSat:8,baseHue:220,baseSat:4},typography:{fontFamily:`sans`,numericStyle:`tabular`},appearance:{radius:14,borderStrength:.14,surfaceOpacity:1,density:1,elevation:.35},scene:`aurora`},{key:`synthwave`,label:`Synthwave`,description:`Hot magenta on deep violet-black, faintly glassy cards floating on a strong glow — vivid and nocturnal.`,theme:{accentHue:320,accentSat:88,baseHue:280,baseSat:26},typography:{fontFamily:`sans`,numericStyle:`proportional`},appearance:{radius:20,borderStrength:.3,surfaceOpacity:.9,density:1,elevation:1.7},scene:`dusk`},{key:`editorial`,label:`Editorial`,description:`A warm serif on soft charcoal-brown, roomy padding, gentle lift — reads like a financial broadsheet.`,theme:{accentHue:22,accentSat:60,baseHue:28,baseSat:12},typography:{fontFamily:`serif`,numericStyle:`proportional`},appearance:{radius:10,borderStrength:.18,surfaceOpacity:1,density:1.15,elevation:.8},scene:`ember`},{key:`nord`,label:`Nord`,description:`Cool arctic blue-grey — a calm, muted ice-blue accent on slate, soft rounded cards. Understated and easy on the eyes.`,theme:{accentHue:200,accentSat:55,baseHue:220,baseSat:16},typography:{fontFamily:`sans`,numericStyle:`tabular`},appearance:{radius:12,borderStrength:.2,surfaceOpacity:1,density:1,elevation:.6},scene:`tide`},{key:`oceanic`,label:`Oceanic`,description:`Deep teal on blue-black — a vivid sea-green accent, roomy rounded cards. Fresh and marine.`,theme:{accentHue:185,accentSat:70,baseHue:200,baseSat:22},typography:{fontFamily:`sans`,numericStyle:`proportional`},appearance:{radius:16,borderStrength:.22,surfaceOpacity:1,density:1,elevation:.8},scene:`tide`},{key:`crimson`,label:`Crimson`,description:`Bold red on near-black — a hot crimson accent, tabular figures, sharp dense cards. Aggressive, high-contrast trading floor.`,theme:{accentHue:356,accentSat:78,baseHue:350,baseSat:15},typography:{fontFamily:`sans`,numericStyle:`tabular`},appearance:{radius:8,borderStrength:.3,surfaceOpacity:1,density:.95,elevation:1},scene:`ember`},{key:`gold-noir`,label:`Gold Noir`,description:`Luxe gold on black — a warm gilt accent, serif type, roomy lifted cards. Understated wealth-desk elegance.`,theme:{accentHue:45,accentSat:85,baseHue:40,baseSat:10},typography:{fontFamily:`serif`,numericStyle:`proportional`},appearance:{radius:10,borderStrength:.25,surfaceOpacity:1,density:1.1,elevation:1.2},scene:`ember`}],ns=[{key:`aurora`,label:`Aurora`,description:`The signature zframes scene — a slow indigo aurora drifting over near-black. The default backdrop.`,projectId:`YrTzGatwjK7EoFpCSfgZ`,baseHue:242,swatch:`radial-gradient(120% 120% at 30% 20%, hsl(248 80% 60%) 0%, hsl(250 70% 22%) 45%, hsl(240 40% 6%) 100%)`},{key:`nebula`,label:`Nebula`,description:`A deeper violet nebula with brighter drifting cores — a touch more energy than Aurora.`,projectId:`K42KSY4FXeXhjVOj9RgT`,baseHue:268,swatch:`radial-gradient(120% 120% at 70% 30%, hsl(280 75% 62%) 0%, hsl(262 65% 26%) 45%, hsl(250 45% 7%) 100%)`},{key:`ember`,label:`Ember`,description:`Warm ember tones drifting over charcoal.`,projectId:`E4221P7lwTy049d7ISxc`,baseHue:24,swatch:`radial-gradient(120% 120% at 30% 25%, hsl(24 85% 58%) 0%, hsl(12 65% 28%) 45%, hsl(8 40% 7%) 100%)`},{key:`tide`,label:`Tide`,description:`Cool teal currents on deep blue-black.`,projectId:`cYpXuEzDqm4r3fdp4TGx`,baseHue:190,swatch:`radial-gradient(120% 120% at 70% 25%, hsl(180 70% 55%) 0%, hsl(196 65% 26%) 45%, hsl(205 45% 7%) 100%)`},{key:`verdant`,label:`Verdant`,description:`Soft green light over near-black.`,projectId:`PrFtFGDE5duemLmr2YKQ`,baseHue:150,swatch:`radial-gradient(120% 120% at 30% 25%, hsl(140 65% 55%) 0%, hsl(152 55% 24%) 45%, hsl(160 40% 6%) 100%)`},{key:`dusk`,label:`Dusk`,description:`Magenta-pink glow fading into dark.`,projectId:`qpoj0wFWmgwRVXmzRMiL`,baseHue:320,swatch:`radial-gradient(120% 120% at 70% 30%, hsl(320 80% 62%) 0%, hsl(300 60% 28%) 45%, hsl(290 45% 7%) 100%)`}];function rs(e){let t=ns.find(t=>t.projectId===e);return t?t.baseHue:242}var z=t(),is={code:`USD`,rate:1,converted:!0},as=(0,h.createContext)(is);function os({code:e=`USD`,children:t}){let n=e!==`USD`,{rates:r}=o(`USD`,n?[e]:[]),i=n?r.find(t=>t.symbol===e)?.rate??0:1,a=(0,h.useMemo)(()=>!n||i<=0?is:{code:e,rate:i,converted:!0},[e,n,i]);return(0,z.jsx)(as.Provider,{value:a,children:t})}function ss({code:e,children:t}){let n=(0,h.useContext)(as);return!e||e===n.code?(0,z.jsx)(z.Fragment,{children:t}):(0,z.jsx)(os,{code:e,children:t})}function cs(){let{code:e,rate:t,converted:n}=(0,h.useContext)(as);return(0,h.useMemo)(()=>({code:e,symbol:m(e),rate:t,converted:n,convert:e=>e*t,price:n=>p(n*t,e),compact:n=>d(n*t,e),magnitude:e=>f(e*t)}),[e,t,n])}var ls=(0,h.createContext)(null);function us(){return(0,h.useContext)(ls)}function ds(e){if(!e)return{};let t={};return e.accentHue!==void 0&&(t[`--zf-accent-hue`]=e.accentHue),e.accentSat!==void 0&&(t[`--zf-accent-sat`]=`${e.accentSat}%`),e.baseHue!==void 0&&(t[`--zf-base-hue`]=e.baseHue),e.baseSat!==void 0&&(t[`--zf-base-sat`]=`${e.baseSat}%`),e.surfaceOpacity!==void 0&&(t[`--zf-surface-opacity`]=e.surfaceOpacity),e.radius!==void 0&&(t[`--zf-frame-radius`]=`${e.radius}px`),e.borderStrength!==void 0&&(t[`--zf-border-alpha`]=e.borderStrength),e.density!==void 0&&(t[`--zf-density`]=e.density),e.elevation!==void 0&&(t[`--zf-elevation`]=e.elevation),t}var fs=`
|
|
66
|
+
.zf-grid {
|
|
67
|
+
display: grid;
|
|
68
|
+
gap: var(--zf-gap, 12px);
|
|
69
|
+
padding-inline: var(--zf-pad-x, 0);
|
|
70
|
+
grid-template-columns: repeat(var(--zf-cols, 12), minmax(0, 1fr));
|
|
71
|
+
grid-auto-rows: var(--zf-row-h, 96px);
|
|
72
|
+
/* Bridge the type family onto the dashboard subtree: redefine --font-dmsans
|
|
73
|
+
HERE (where --zf-font-family is set inline) so the chart utilities and frame
|
|
74
|
+
titles that read var(--font-dmsans) pick up the chosen family. Declaring it
|
|
75
|
+
on this container — not at :root — is what makes the var() substitution see
|
|
76
|
+
the inline --zf-font-family. (The editor mirrors this on .zf-editor.) */
|
|
77
|
+
--font-dmsans: var(--zf-font-family, "DM Sans", sans-serif);
|
|
78
|
+
}
|
|
79
|
+
/* flow-horizontal: the board is bounded to the viewport height as --zf-h-rows
|
|
80
|
+
equal bands and grows rightward, scrolling sideways. The vertical position
|
|
81
|
+
can't be honoured here (its y runs to 100+ rows), so each frame uses its own
|
|
82
|
+
stored horizontal layout instead: the renderer emits real --zf-col/row-start
|
|
83
|
+
for a frame that HAS a horizontal layout (explicit placement, via the base
|
|
84
|
+
.zf-frame rule), and OMITS them for one that doesn't (the auto var-fallback)
|
|
85
|
+
so grid-auto-flow: column dense packs it by w/h size — the fallback for
|
|
86
|
+
un-edited / agent-generated specs. Column tracks reuse the vertical row height
|
|
87
|
+
(--zf-row-h) so cells stay roughly square. Gated above the phone breakpoint so
|
|
88
|
+
phones keep the single-column reflow below. */
|
|
89
|
+
@media (min-width: 641px) {
|
|
90
|
+
.zf-grid.zf-flow-horizontal {
|
|
91
|
+
grid-template-columns: none;
|
|
92
|
+
grid-template-rows: repeat(var(--zf-h-rows, 6), minmax(0, 1fr));
|
|
93
|
+
grid-auto-flow: column dense;
|
|
94
|
+
grid-auto-columns: var(--zf-row-h, 96px);
|
|
95
|
+
height: var(--zf-h-height, calc(100vh - 220px));
|
|
96
|
+
min-height: 420px;
|
|
97
|
+
overflow-x: auto;
|
|
98
|
+
overflow-y: hidden;
|
|
99
|
+
align-content: stretch;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
.zf-frame {
|
|
103
|
+
grid-column: var(--zf-col-start, auto) / span var(--zf-col-span, 1);
|
|
104
|
+
grid-row: var(--zf-row-start, auto) / span var(--zf-row-span, 1);
|
|
105
|
+
position: relative;
|
|
106
|
+
display: flex;
|
|
107
|
+
flex-direction: column;
|
|
108
|
+
min-height: 0;
|
|
109
|
+
/* visible (not hidden) so the hover glow on ::after can bleed past the card
|
|
110
|
+
edge exactly like the original box-shadow did. The card itself has nothing
|
|
111
|
+
to clip — its surface/border are rounded by border-radius, and content lives
|
|
112
|
+
in .zf-frame-body which carries the interior clip below. */
|
|
113
|
+
overflow: visible;
|
|
114
|
+
padding: calc(16px * var(--zf-density, 1)) calc(18px * var(--zf-density, 1));
|
|
115
|
+
/* Digit spacing for everything inside the card. Default \`normal\` is a no-op;
|
|
116
|
+
spec.typography.numericStyle="tabular" sets --zf-numeric so live prices stop
|
|
117
|
+
jittering. Hero numerals carry their own tabular-nums regardless. */
|
|
118
|
+
font-variant-numeric: var(--zf-numeric, normal);
|
|
119
|
+
/* Card surface. The three dark stops are expressed off --zf-base-hue /
|
|
120
|
+
--zf-base-sat (spec.theme) with their lightness baked, so the default
|
|
121
|
+
hsl(233 20% …) reproduces the original navy to within ~1/255, while the base
|
|
122
|
+
knobs let the whole surface warm, cool, or desaturate toward black. */
|
|
123
|
+
background: var(--zf-frame-bg, linear-gradient(165deg, hsl(var(--zf-base-hue, 233) var(--zf-base-sat, 20%) var(--zf-surf-l1, 12.5%) / calc(0.82 * var(--zf-surface-opacity, 1))) 0%, hsl(var(--zf-base-hue, 233) var(--zf-base-sat, 20%) var(--zf-surf-l2, 7%) / calc(0.86 * var(--zf-surface-opacity, 1))) 60%, hsl(var(--zf-base-hue, 233) var(--zf-base-sat, 20%) var(--zf-surf-l3, 5.3%) / calc(0.9 * var(--zf-surface-opacity, 1))) 100%));
|
|
124
|
+
border: 1px solid var(--zf-frame-border, hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / var(--zf-border-alpha, 0.22)));
|
|
125
|
+
border-radius: var(--zf-frame-radius, 18px);
|
|
126
|
+
box-shadow: var(--zf-frame-shadow, inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 1px 2px rgba(0, 0, 0, 0.4), 0 calc(18px * var(--zf-elevation, 1)) calc(44px * var(--zf-elevation, 1)) -26px rgba(0, 0, 0, 0.9));
|
|
127
|
+
/* Hover animates only GPU-composited properties: \`transform\` is the lift,
|
|
128
|
+
\`border-color\` is a cheap 1px paint. The surface brightening + accent glow
|
|
129
|
+
are deliberately NOT transitioned here — animating the gradient \`background\`
|
|
130
|
+
and the large-blur \`box-shadow\` re-rasterized the whole translucent card
|
|
131
|
+
every frame over the animated backdrop, which is what made the hover lag.
|
|
132
|
+
Those now ride the opacity-faded ::after overlay defined below. */
|
|
133
|
+
transition:
|
|
134
|
+
border-color 0.15s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
135
|
+
transform 0.15s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
136
|
+
/* Frames arrive in a soft top-down cascade on first paint. The translate
|
|
137
|
+
property (not transform) carries the motion, so the hover lift stays
|
|
138
|
+
independent; the backwards fill holds the hidden state through the stagger
|
|
139
|
+
delay, then hands transform back to :hover once the entrance settles. */
|
|
140
|
+
animation: zf-enter 0.45s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)) backwards;
|
|
141
|
+
animation-delay: min(calc((var(--zf-enter-i, 0) + 1) * 35ms), 350ms);
|
|
142
|
+
}
|
|
143
|
+
/* The brightened surface + accent glow that appear on hover live on this overlay
|
|
144
|
+
and cross-fade via \`opacity\` (GPU-composited) instead of transitioning the
|
|
145
|
+
card's own gradient/box-shadow — both re-rasterize the whole translucent card
|
|
146
|
+
every frame over the animated backdrop, which is what made the hover lag. The
|
|
147
|
+
card is overflow:visible (above), so this layer's OUTER accent shadow bleeds
|
|
148
|
+
past the edge exactly like the original hover did; the layer paints once, then
|
|
149
|
+
only its opacity animates. It sits above the base surface (z-index:0) and below
|
|
150
|
+
the card content (z-index:1) so text and charts stay crisp, and keeps the
|
|
151
|
+
--zf-frame-bg-hover override hook. Errors keep their own red hover (see
|
|
152
|
+
.zf-frame--error), so this is the non-error path. */
|
|
153
|
+
.zf-frame:not(.zf-frame--error)::after {
|
|
154
|
+
content: '';
|
|
155
|
+
position: absolute;
|
|
156
|
+
inset: 0;
|
|
157
|
+
z-index: 0;
|
|
158
|
+
border-radius: inherit;
|
|
159
|
+
pointer-events: none;
|
|
160
|
+
opacity: 0;
|
|
161
|
+
background: var(--zf-frame-bg-hover, linear-gradient(165deg, hsl(var(--zf-base-hue, 233) var(--zf-base-sat, 20%) 16.5% / calc(0.88 * var(--zf-surface-opacity, 1))) 0%, hsl(var(--zf-base-hue, 233) var(--zf-base-sat, 20%) 9% / calc(0.9 * var(--zf-surface-opacity, 1))) 60%, hsl(var(--zf-base-hue, 233) var(--zf-base-sat, 20%) 6.3% / calc(0.92 * var(--zf-surface-opacity, 1))) 100%));
|
|
162
|
+
/* The accent half of the original hover shadow, verbatim: brighter top inner
|
|
163
|
+
highlight, a 1px accent ring at the edge, and the soft accent glow pooling
|
|
164
|
+
below and around the card. */
|
|
165
|
+
box-shadow:
|
|
166
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.09),
|
|
167
|
+
0 0 0 1px hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / 0.12),
|
|
168
|
+
0 calc(20px * var(--zf-elevation, 1)) calc(60px * var(--zf-elevation, 1)) -28px hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / 0.4);
|
|
169
|
+
transition: opacity 0.15s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
170
|
+
}
|
|
171
|
+
/* Hover lift is pointer-only — on touch it would stick after a tap. The lift
|
|
172
|
+
(transform) + brighter border transition on the card itself; the surface
|
|
173
|
+
brightening + accent glow ride the ::after overlay's opacity above. */
|
|
174
|
+
@media (hover: hover) {
|
|
175
|
+
.zf-frame:hover {
|
|
176
|
+
border-color: var(--zf-frame-border-hover, hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / calc(var(--zf-border-alpha, 0.22) + 0.2)));
|
|
177
|
+
transform: translateY(-2px);
|
|
178
|
+
}
|
|
179
|
+
.zf-frame:not(.zf-frame--error):hover::after {
|
|
180
|
+
opacity: 1;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/* Top edge sheen — inset past the corner radius so the bright line never
|
|
184
|
+
pokes outside the rounded border (which read as a clipped corner). */
|
|
185
|
+
.zf-frame::before {
|
|
186
|
+
content: '';
|
|
187
|
+
position: absolute;
|
|
188
|
+
top: 0;
|
|
189
|
+
left: 18px;
|
|
190
|
+
right: 18px;
|
|
191
|
+
height: 1px;
|
|
192
|
+
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.16), transparent);
|
|
193
|
+
pointer-events: none;
|
|
194
|
+
z-index: 2;
|
|
195
|
+
}
|
|
196
|
+
.zf-frame-title {
|
|
197
|
+
position: relative;
|
|
198
|
+
z-index: 1;
|
|
199
|
+
display: flex;
|
|
200
|
+
align-items: center;
|
|
201
|
+
gap: 7px;
|
|
202
|
+
margin-bottom: 12px;
|
|
203
|
+
font-family: var(--font-dmsans, inherit);
|
|
204
|
+
/* rem (not px) so spec.typography.scale — applied as the root font size by the
|
|
205
|
+
host — grows the card title along with the rem-based chart text it sits above.
|
|
206
|
+
0.625rem = 10px at the default root size, so scale 1 is a no-op. */
|
|
207
|
+
font-size: 0.625rem;
|
|
208
|
+
font-weight: 700;
|
|
209
|
+
letter-spacing: 0.14em;
|
|
210
|
+
text-transform: uppercase;
|
|
211
|
+
color: var(--zf-frame-title, hsl(0 0% var(--zf-ink-l, 100%) / 0.5));
|
|
212
|
+
flex: none;
|
|
213
|
+
}
|
|
214
|
+
/* Light/dark surface mode. --zf-ink-l (100% dark / ~16% light) and
|
|
215
|
+
--zf-surf-l1..3 (card gradient lightness) are set inline on the container by
|
|
216
|
+
the renderer/editor from spec.theme.surface. Redeclaring the interior text /
|
|
217
|
+
surface tokens HERE (at .zf-grid/.zf-editor scope, where --zf-ink-l is set)
|
|
218
|
+
is what lets them flip per-container — a :root indirection wouldn't pick up
|
|
219
|
+
the inline var. Dark defaults reproduce the original white-on-dark exactly. */
|
|
220
|
+
.zf-grid,
|
|
221
|
+
.zf-editor {
|
|
222
|
+
--color-normal: hsl(0 0% var(--zf-ink-l, 100%) / 0.85);
|
|
223
|
+
--color-strong: hsl(0 0% var(--zf-ink-l, 100%) / 0.95);
|
|
224
|
+
--color-soft: hsl(0 0% var(--zf-ink-l, 100%) / 0.6);
|
|
225
|
+
--color-disabled: hsl(0 0% var(--zf-ink-l, 100%) / 0.3);
|
|
226
|
+
--color-surface: hsl(0 0% var(--zf-ink-l, 100%) / 0.06);
|
|
227
|
+
--color-card: hsl(0 0% var(--zf-ink-l, 100%) / 0.02);
|
|
228
|
+
--color-card-hover: hsl(0 0% var(--zf-ink-l, 100%) / 0.1);
|
|
229
|
+
}
|
|
230
|
+
/* Accent-derived composite tokens (highlight text, data-ink line). theme.css
|
|
231
|
+
declares these at :root, where their var(--zf-accent-hue) resolves once against
|
|
232
|
+
the :root default and inherits pre-computed — so a per-frame / per-element
|
|
233
|
+
accent override never re-tints interior content (sparklines, highlighted
|
|
234
|
+
numerals, a heading/divider's accented rule). Redeclaring them ALSO on the
|
|
235
|
+
per-frame wrappers (.zf-frame / .zf-bare), where frameStyleVars + the
|
|
236
|
+
heading/divider accent config set --zf-accent-hue, resolves them against that
|
|
237
|
+
element's accent. Values mirror theme.css exactly, so the default is a no-op. */
|
|
238
|
+
.zf-grid,
|
|
239
|
+
.zf-editor,
|
|
240
|
+
.zf-frame,
|
|
241
|
+
.zf-bare {
|
|
242
|
+
--color-highlight: hsl(
|
|
243
|
+
var(--zf-accent-hue, 242) calc(var(--zf-accent-sat, 90%) + 10%) 89%
|
|
244
|
+
);
|
|
245
|
+
--color-accent-line: hsl(
|
|
246
|
+
var(--zf-accent-hue, 242) calc(var(--zf-accent-sat, 90%) - 5%) 72%
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
.zf-frame-title::before {
|
|
250
|
+
content: '';
|
|
251
|
+
width: 5px;
|
|
252
|
+
height: 5px;
|
|
253
|
+
border-radius: 9999px;
|
|
254
|
+
background: var(--zf-frame-title-dot, hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76%));
|
|
255
|
+
box-shadow: 0 0 8px var(--zf-frame-title-dot-glow, hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / 0.9));
|
|
256
|
+
}
|
|
257
|
+
/* A title with a leading icon (e.g. an asset logo) drops the status dot — the
|
|
258
|
+
logo is the card's identity marker. */
|
|
259
|
+
.zf-frame-title--icon::before { display: none; }
|
|
260
|
+
/* The title label takes the remaining width and truncates so a long title
|
|
261
|
+
never shoves the source credit off the card. */
|
|
262
|
+
.zf-frame-title-text {
|
|
263
|
+
min-width: 0;
|
|
264
|
+
overflow: hidden;
|
|
265
|
+
text-overflow: ellipsis;
|
|
266
|
+
white-space: nowrap;
|
|
267
|
+
}
|
|
268
|
+
/* Data-source credit — a clickable provider link pinned to the right of the
|
|
269
|
+
title row. Brand casing is preserved (text-transform reset) so DeFiLlama /
|
|
270
|
+
alternative.me read correctly against the uppercase title. */
|
|
271
|
+
.zf-frame-source {
|
|
272
|
+
margin-left: auto;
|
|
273
|
+
padding-left: 10px;
|
|
274
|
+
display: inline-flex;
|
|
275
|
+
align-items: center;
|
|
276
|
+
gap: 5px;
|
|
277
|
+
flex: none;
|
|
278
|
+
text-transform: none;
|
|
279
|
+
letter-spacing: 0;
|
|
280
|
+
font-weight: 600;
|
|
281
|
+
}
|
|
282
|
+
.zf-frame-source a {
|
|
283
|
+
color: var(--zf-frame-source, rgba(255, 255, 255, 0.42));
|
|
284
|
+
text-decoration: none;
|
|
285
|
+
transition: color 0.2s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
286
|
+
white-space: nowrap;
|
|
287
|
+
}
|
|
288
|
+
@media (hover: hover) {
|
|
289
|
+
.zf-frame-source a:hover {
|
|
290
|
+
color: var(--zf-frame-source-hover, hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 80%));
|
|
291
|
+
text-decoration: underline;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
.zf-frame-source-sep { color: rgba(255, 255, 255, 0.22); }
|
|
295
|
+
.zf-frame-body {
|
|
296
|
+
position: relative;
|
|
297
|
+
z-index: 1;
|
|
298
|
+
flex: 1;
|
|
299
|
+
min-height: 0;
|
|
300
|
+
display: flex;
|
|
301
|
+
flex-direction: column;
|
|
302
|
+
/* Holds the interior clip the card used to own (now overflow:visible so its
|
|
303
|
+
hover glow can escape). The body sits inside the card's padding, so its
|
|
304
|
+
square corners fall within the rounded card and this clip is invisible —
|
|
305
|
+
content/charts/scroll areas clip exactly as before. */
|
|
306
|
+
overflow: hidden;
|
|
307
|
+
/* Skip rendering the (expensive) body — charts, canvases, long lists — while
|
|
308
|
+
the card is scrolled off-screen, so a dashboard with dozens of frames only
|
|
309
|
+
pays layout+paint for what's on screen. Applied to the BODY, not .zf-frame:
|
|
310
|
+
content-visibility implies paint containment, and putting it on the card
|
|
311
|
+
would clip the ::after hover glow that intentionally bleeds past the edge.
|
|
312
|
+
The card's height is fixed by the grid / GridStack (not its content), so
|
|
313
|
+
skipping the body never reflows the card — no scroll jank. contain-intrinsic
|
|
314
|
+
-size feeds a placeholder height for not-yet-rendered cards; the auto keyword
|
|
315
|
+
then remembers each body's real size once it has painted. A no-op for
|
|
316
|
+
on-screen cards. */
|
|
317
|
+
content-visibility: auto;
|
|
318
|
+
contain-intrinsic-size: auto var(--zf-cis-h, 240px);
|
|
319
|
+
}
|
|
320
|
+
.zf-frame-body > * {
|
|
321
|
+
flex: 1;
|
|
322
|
+
min-height: 0;
|
|
323
|
+
}
|
|
324
|
+
/* ── Error cards ────────────────────────────────────────────────────────────
|
|
325
|
+
Unknown frame / missing capability / invalid config / runtime crash all share
|
|
326
|
+
one centered empty-state: an alert glyph, a headline naming what's wrong, the
|
|
327
|
+
frame's name, then the specific detail. Centered (not top-left) so the card
|
|
328
|
+
reads as a deliberate state instead of a raw debug dump floating in a void —
|
|
329
|
+
and a faint red top-bloom signals "error" across the whole surface, not just
|
|
330
|
+
the 1px border. This is also the generating agent's feedback surface, so the
|
|
331
|
+
detail stays precise (field paths, the exact missing capability/provider). */
|
|
332
|
+
.zf-frame--error {
|
|
333
|
+
border-color: var(--zf-frame-error-border, rgba(242, 21, 83, 0.42));
|
|
334
|
+
background: var(
|
|
335
|
+
--zf-frame-error-bg,
|
|
336
|
+
radial-gradient(125% 80% at 50% -12%, rgba(242, 21, 83, 0.13), transparent 60%),
|
|
337
|
+
linear-gradient(165deg, hsl(var(--zf-base-hue, 233) var(--zf-base-sat, 20%) 12.5% / 0.82) 0%, hsl(var(--zf-base-hue, 233) var(--zf-base-sat, 20%) 7% / 0.86) 60%, hsl(var(--zf-base-hue, 233) var(--zf-base-sat, 20%) 5.3% / 0.9) 100%)
|
|
338
|
+
);
|
|
339
|
+
/* Errors are a rare state and never hover-spammed, so they keep the original
|
|
340
|
+
background + box-shadow cross-fade (the GPU-only ::after path is reserved
|
|
341
|
+
for the common, non-error card). */
|
|
342
|
+
transition:
|
|
343
|
+
border-color 0.25s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
344
|
+
background 0.25s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
345
|
+
box-shadow 0.25s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
346
|
+
transform 0.25s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
347
|
+
}
|
|
348
|
+
@media (hover: hover) {
|
|
349
|
+
.zf-frame--error:hover {
|
|
350
|
+
border-color: var(--zf-frame-error-border-hover, rgba(242, 21, 83, 0.6));
|
|
351
|
+
background: var(
|
|
352
|
+
--zf-frame-error-bg,
|
|
353
|
+
radial-gradient(125% 80% at 50% -12%, rgba(242, 21, 83, 0.13), transparent 60%),
|
|
354
|
+
linear-gradient(165deg, rgba(26, 27, 38, 0.82) 0%, rgba(14, 15, 22, 0.86) 60%, rgba(10, 11, 17, 0.9) 100%)
|
|
355
|
+
);
|
|
356
|
+
box-shadow: var(--zf-frame-shadow, inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 1px 2px rgba(0, 0, 0, 0.4), 0 18px 44px -26px rgba(0, 0, 0, 0.9)), 0 0 0 1px rgba(242, 21, 83, 0.14), 0 20px 56px -30px rgba(242, 21, 83, 0.4);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/* The centered stack. flex:1 lets it claim the whole card; the inner content
|
|
360
|
+
stays its natural height and is centered around the card's middle, so a 2×1
|
|
361
|
+
card and a 6×4 card both read as composed rather than top-anchored. */
|
|
362
|
+
.zf-error {
|
|
363
|
+
flex: 1;
|
|
364
|
+
min-height: 0;
|
|
365
|
+
display: flex;
|
|
366
|
+
flex-direction: column;
|
|
367
|
+
align-items: center;
|
|
368
|
+
justify-content: center;
|
|
369
|
+
gap: 8px;
|
|
370
|
+
padding: 4px 2px;
|
|
371
|
+
text-align: center;
|
|
372
|
+
overflow: auto;
|
|
373
|
+
}
|
|
374
|
+
.zf-error-icon {
|
|
375
|
+
flex: none;
|
|
376
|
+
width: 38px;
|
|
377
|
+
height: 38px;
|
|
378
|
+
display: grid;
|
|
379
|
+
place-items: center;
|
|
380
|
+
border-radius: 12px;
|
|
381
|
+
color: var(--zf-frame-error-text, #ff8b9d);
|
|
382
|
+
background: rgba(242, 21, 83, 0.12);
|
|
383
|
+
box-shadow: inset 0 0 0 1px rgba(242, 21, 83, 0.32),
|
|
384
|
+
0 0 24px -8px rgba(242, 21, 83, 0.6);
|
|
385
|
+
}
|
|
386
|
+
.zf-error-icon svg {
|
|
387
|
+
display: block;
|
|
388
|
+
width: 20px;
|
|
389
|
+
height: 20px;
|
|
390
|
+
}
|
|
391
|
+
.zf-error-headline {
|
|
392
|
+
font-family: var(--font-dmsans, inherit);
|
|
393
|
+
font-size: 13px;
|
|
394
|
+
font-weight: 700;
|
|
395
|
+
letter-spacing: 0.01em;
|
|
396
|
+
color: var(--zf-frame-error-headline, rgba(255, 255, 255, 0.92));
|
|
397
|
+
}
|
|
398
|
+
.zf-error-frame {
|
|
399
|
+
margin-top: -3px;
|
|
400
|
+
font-size: 10px;
|
|
401
|
+
font-weight: 700;
|
|
402
|
+
letter-spacing: 0.14em;
|
|
403
|
+
text-transform: uppercase;
|
|
404
|
+
color: var(--zf-frame-error-text, #ff8b9d);
|
|
405
|
+
}
|
|
406
|
+
.zf-error-detail {
|
|
407
|
+
margin: 2px 0 0;
|
|
408
|
+
max-width: 44ch;
|
|
409
|
+
font-size: 12px;
|
|
410
|
+
line-height: 1.5;
|
|
411
|
+
color: var(--zf-frame-error-detail, rgba(255, 255, 255, 0.6));
|
|
412
|
+
}
|
|
413
|
+
.zf-error-detail code {
|
|
414
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
415
|
+
font-size: 0.92em;
|
|
416
|
+
}
|
|
417
|
+
/* Per-issue rows for invalid config: the field path as a code chip, the Zod
|
|
418
|
+
message beside it. Block-centered but left-aligned inside, so a one-field
|
|
419
|
+
error sits dead-centre and a multi-field one reads as a tidy list. */
|
|
420
|
+
.zf-error-issues {
|
|
421
|
+
list-style: none;
|
|
422
|
+
margin: 2px 0 0;
|
|
423
|
+
padding: 0;
|
|
424
|
+
max-width: 100%;
|
|
425
|
+
display: flex;
|
|
426
|
+
flex-direction: column;
|
|
427
|
+
gap: 6px;
|
|
428
|
+
text-align: left;
|
|
429
|
+
}
|
|
430
|
+
.zf-error-issue {
|
|
431
|
+
display: flex;
|
|
432
|
+
flex-wrap: wrap;
|
|
433
|
+
align-items: baseline;
|
|
434
|
+
gap: 7px;
|
|
435
|
+
padding: 6px 10px;
|
|
436
|
+
border-radius: 9px;
|
|
437
|
+
background: rgba(0, 0, 0, 0.22);
|
|
438
|
+
border: 1px solid rgba(242, 21, 83, 0.18);
|
|
439
|
+
}
|
|
440
|
+
.zf-error-field {
|
|
441
|
+
flex: none;
|
|
442
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
443
|
+
font-size: 11px;
|
|
444
|
+
font-weight: 700;
|
|
445
|
+
color: var(--zf-frame-error-text, #ff8b9d);
|
|
446
|
+
background: rgba(242, 21, 83, 0.14);
|
|
447
|
+
padding: 1px 6px;
|
|
448
|
+
border-radius: 5px;
|
|
449
|
+
}
|
|
450
|
+
.zf-error-msg {
|
|
451
|
+
min-width: 0;
|
|
452
|
+
font-size: 12px;
|
|
453
|
+
line-height: 1.4;
|
|
454
|
+
color: var(--zf-frame-error-detail, rgba(255, 255, 255, 0.68));
|
|
455
|
+
}
|
|
456
|
+
/* Registered-frame list under an "unknown frame" card — quiet, it's reference. */
|
|
457
|
+
.zf-error-list {
|
|
458
|
+
margin-top: 4px;
|
|
459
|
+
font-size: 11px;
|
|
460
|
+
line-height: 1.5;
|
|
461
|
+
color: rgba(255, 255, 255, 0.4);
|
|
462
|
+
}
|
|
463
|
+
/* Bare frames (headings) divide a dashboard into zones — positioned slot,
|
|
464
|
+
no card chrome, no auto-title. */
|
|
465
|
+
.zf-bare {
|
|
466
|
+
grid-column: var(--zf-col-start, auto) / span var(--zf-col-span, 1);
|
|
467
|
+
grid-row: var(--zf-row-start, auto) / span var(--zf-row-span, 1);
|
|
468
|
+
display: flex;
|
|
469
|
+
align-items: flex-end;
|
|
470
|
+
min-height: 0;
|
|
471
|
+
overflow: hidden;
|
|
472
|
+
animation: zf-enter 0.45s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)) backwards;
|
|
473
|
+
animation-delay: min(calc((var(--zf-enter-i, 0) + 1) * 35ms), 350ms);
|
|
474
|
+
}
|
|
475
|
+
/* Phones: the absolute x/y/w grid can't shrink below ~30px columns, so collapse
|
|
476
|
+
to a single full-width column. Frames flow in spec order and keep their row
|
|
477
|
+
span (height), but ignore horizontal placement. */
|
|
478
|
+
@media (max-width: 640px) {
|
|
479
|
+
.zf-grid {
|
|
480
|
+
grid-template-columns: 1fr;
|
|
481
|
+
}
|
|
482
|
+
.zf-frame,
|
|
483
|
+
.zf-bare {
|
|
484
|
+
grid-column: 1 / -1;
|
|
485
|
+
grid-row: auto / span var(--zf-row-span, 1);
|
|
486
|
+
}
|
|
487
|
+
.zf-frame {
|
|
488
|
+
padding: calc(12px * var(--zf-density, 1)) calc(14px * var(--zf-density, 1));
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
/* Tablets / small laptops (641-1023px): the absolute grid built for --zf-cols
|
|
492
|
+
columns is too tight here, but a single column wastes the width. Reflow the
|
|
493
|
+
vertical board to two columns — frames auto-place in spec order (dense, so
|
|
494
|
+
gaps backfill), keep their row span, and a frame that spanned at least half
|
|
495
|
+
the design grid takes both columns (--zf-col-span-sm = 2, set by the
|
|
496
|
+
renderer), everything else takes one. flow-horizontal is excluded: it keeps
|
|
497
|
+
its own ≥641px side-scroller. Above 1023px the editable GridStack takes over
|
|
498
|
+
(editing is desktop-only) and the read-only renderer is only the fallback. */
|
|
499
|
+
@media (min-width: 641px) and (max-width: 1023px) {
|
|
500
|
+
.zf-grid:not(.zf-flow-horizontal) {
|
|
501
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
502
|
+
grid-auto-flow: row dense;
|
|
503
|
+
}
|
|
504
|
+
.zf-grid:not(.zf-flow-horizontal) .zf-frame,
|
|
505
|
+
.zf-grid:not(.zf-flow-horizontal) .zf-bare {
|
|
506
|
+
grid-column: auto / span var(--zf-col-span-sm, 1);
|
|
507
|
+
grid-row: auto / span var(--zf-row-span, 1);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
@keyframes zf-enter {
|
|
511
|
+
from { opacity: 0; translate: 0 10px; }
|
|
512
|
+
to { opacity: 1; translate: 0 0; }
|
|
513
|
+
}
|
|
514
|
+
/* Reduced-motion entrance: same timing + stagger, but a plain fade with no
|
|
515
|
+
positional movement (motion is what triggers vestibular discomfort). */
|
|
516
|
+
@keyframes zf-fade {
|
|
517
|
+
from { opacity: 0; }
|
|
518
|
+
to { opacity: 1; }
|
|
519
|
+
}
|
|
520
|
+
@media (prefers-reduced-motion: reduce) {
|
|
521
|
+
.zf-frame,
|
|
522
|
+
.zf-bare {
|
|
523
|
+
animation-name: zf-fade;
|
|
524
|
+
}
|
|
525
|
+
.zf-frame:hover {
|
|
526
|
+
transform: none;
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
/* Suspense fallback while a frame's component chunk loads (lazy registry). A
|
|
530
|
+
quiet pulsing fill sized to the card body — no layout shift since the grid
|
|
531
|
+
item already holds its slot. */
|
|
532
|
+
.zf-frame-skeleton {
|
|
533
|
+
width: 100%;
|
|
534
|
+
height: 100%;
|
|
535
|
+
border-radius: 8px;
|
|
536
|
+
background: rgba(255, 255, 255, 0.05);
|
|
537
|
+
animation: zf-skeleton-pulse 1.2s ease-in-out infinite;
|
|
538
|
+
}
|
|
539
|
+
@keyframes zf-skeleton-pulse {
|
|
540
|
+
0%, 100% { opacity: 0.45; }
|
|
541
|
+
50% { opacity: 0.85; }
|
|
542
|
+
}
|
|
543
|
+
@media (prefers-reduced-motion: reduce) {
|
|
544
|
+
.zf-frame-skeleton { animation: none; }
|
|
545
|
+
}
|
|
546
|
+
`,ps=()=>(0,z.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,z.jsx)(`path`,{d:`M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0Z`}),(0,z.jsx)(`line`,{x1:`12`,y1:`9`,x2:`12`,y2:`13`}),(0,z.jsx)(`line`,{x1:`12`,y1:`17`,x2:`12.01`,y2:`17`})]});function ms({outerClassName:e,style:t,headline:n,frame:r,children:i}){return(0,z.jsx)(`div`,{className:e,style:t,children:(0,z.jsxs)(`div`,{className:`zf-error`,children:[(0,z.jsx)(`span`,{className:`zf-error-icon`,children:(0,z.jsx)(ps,{})}),(0,z.jsx)(`div`,{className:`zf-error-headline`,children:n}),(0,z.jsx)(`div`,{className:`zf-error-frame`,children:r}),i]})})}function hs({sources:e}){return e.length===0?null:(0,z.jsx)(`span`,{className:`zf-frame-source`,children:e.map((e,t)=>(0,z.jsxs)(h.Fragment,{children:[t>0&&(0,z.jsx)(`span`,{className:`zf-frame-source-sep`,children:`·`}),(0,z.jsx)(`a`,{href:e.url,target:`_blank`,rel:`noreferrer noopener`,title:`Data source: ${e.name}`,onMouseDown:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),children:e.name})]},e.url))})}var gs=class extends h.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}render(){return this.state.error?(0,z.jsxs)(`div`,{className:`zf-error`,children:[(0,z.jsx)(`span`,{className:`zf-error-icon`,children:(0,z.jsx)(ps,{})}),(0,z.jsx)(`div`,{className:`zf-error-headline`,children:`Frame crashed`}),(0,z.jsx)(`p`,{className:`zf-error-detail`,children:this.state.error.message})]}):this.props.children}},_s=(...e)=>e.filter(Boolean).join(` `);function vs({style:e,className:t,hasIcon:n,titleIcon:r,title:i,titleContent:a,sources:o,children:s}){let c=(0,h.useRef)(null),u=(0,h.useRef)(!0),d=(0,h.useRef)(null);d.current||=new Set;let f=(0,h.useRef)(null);if(!f.current){let e=d.current;f.current={visibleRef:u,subscribe:t=>(e.add(t),()=>{e.delete(t)})}}(0,h.useEffect)(()=>{let e=c.current;if(!e||typeof IntersectionObserver>`u`)return;let t=new IntersectionObserver(e=>{let t=e[0];if(!t)return;let n=t.isIntersecting;if(n!==u.current){u.current=n;for(let e of[...d.current])e(n)}},{rootMargin:`200px`});return t.observe(e),()=>t.disconnect()},[]);let p=!!(a||i||r||o.length);return(0,z.jsx)(l.Provider,{value:f.current,children:(0,z.jsxs)(`div`,{ref:c,className:_s(`zf-frame`,t),style:e,children:[p&&(0,z.jsxs)(`div`,{className:_s(`zf-frame-title`,n?`zf-frame-title--icon`:``),children:[r,(0,z.jsx)(`span`,{className:`zf-frame-title-text`,children:a??i}),(0,z.jsx)(hs,{sources:o})]}),(0,z.jsx)(`div`,{className:`zf-frame-body`,children:s})]})})}function ys({instance:e,registry:t,style:n,className:r=``}){let i=a(),o=t.get(e.frame),s=e.style?{...n,...ds(e.style)}:n;if(!o)return(0,z.jsxs)(ms,{outerClassName:_s(`zf-frame`,`zf-frame--error`,r),style:s,headline:`Unknown frame`,frame:e.frame,children:[(0,z.jsxs)(`p`,{className:`zf-error-detail`,children:[(0,z.jsx)(`code`,{children:e.frame}),` isn’t a registered frame.`]}),(0,z.jsxs)(`p`,{className:`zf-error-list`,children:[`Available: `,[...t.keys()].join(`, `)]})]});let c=new Set(i.flatMap(e=>[...e.capabilities])),l=o.capabilities.filter(e=>!c.has(e));if(l.length>0)return(0,z.jsx)(ms,{outerClassName:_s(`zf-frame`,`zf-frame--error`,r),style:s,headline:`No data source`,frame:e.frame,children:(0,z.jsxs)(`p`,{className:`zf-error-detail`,children:[`No registered provider supplies`,` `,l.map((e,t)=>(0,z.jsxs)(h.Fragment,{children:[t>0&&`, `,(0,z.jsx)(`code`,{children:e})]},e)),`.`]})});let u=o.schema.safeParse(e.config);if(!u.success)return(0,z.jsx)(ms,{outerClassName:_s(`zf-frame`,`zf-frame--error`,r),style:s,headline:`Invalid configuration`,frame:e.frame,children:(0,z.jsx)(`ul`,{className:`zf-error-issues`,children:u.error.issues.map((e,t)=>(0,z.jsxs)(`li`,{className:`zf-error-issue`,children:[(0,z.jsx)(`code`,{className:`zf-error-field`,children:e.path.join(`.`)||`(root)`}),(0,z.jsx)(`span`,{className:`zf-error-msg`,children:e.message.replace(/^Invalid input:\s*/i,``)})]},t))})});let d=o.component,f=o.titleIcon,p=o.titleContent,m=o.source?Array.isArray(o.source)?o.source:[o.source]:[];if(o.chrome===`bare`)return(0,z.jsx)(`div`,{className:_s(`zf-bare`,r),style:s,children:(0,z.jsx)(gs,{children:(0,z.jsx)(h.Suspense,{fallback:null,children:(0,z.jsx)(d,{config:u.data})})})});let g=o.chrome!==`plain`;return(0,z.jsx)(vs,{style:s,className:r,hasIcon:!!f,title:e.title??(g?o.label:void 0),sources:m,titleIcon:f?(0,z.jsx)(h.Suspense,{fallback:null,children:(0,z.jsx)(f,{config:u.data})}):null,titleContent:e.title==null&&p?(0,z.jsx)(h.Suspense,{fallback:null,children:(0,z.jsx)(p,{config:u.data})}):void 0,children:(0,z.jsx)(gs,{children:(0,z.jsx)(h.Suspense,{fallback:(0,z.jsx)(`div`,{className:`zf-frame-skeleton`}),children:(0,z.jsx)(d,{config:u.data})})})})}var bs=(0,h.memo)(function(e){return(0,z.jsx)(ss,{code:e.instance.currency,children:(0,z.jsx)(ys,{...e})})});function xs(e,t,n,r,i){let a={"--zf-enter-i":t,"--zf-col-span-sm":e.position.w>=i/2?2:1};if(n){let t=e.layouts?.[`flow-horizontal`];return t?{...a,"--zf-col-start":t.x+1,"--zf-col-span":t.w,"--zf-row-start":t.y+1,"--zf-row-span":Math.min(t.h,r)}:{...a,"--zf-col-span":e.position.w,"--zf-row-span":Math.min(e.position.h,r)}}let{x:o,y:s,w:c,h:l}=e.position;return{...a,"--zf-col-start":o+1,"--zf-col-span":c,"--zf-row-start":s+1,"--zf-row-span":l}}function Ss({spec:e,registry:t}){let n=e.grid.mode===`flow-horizontal`,r=(0,h.useMemo)(()=>e.frames.map((t,r)=>xs(t,r,n,e.grid.rows,e.grid.columns)),[e.frames,n,e.grid.rows,e.grid.columns]);return(0,z.jsxs)(os,{code:e.currency.code,children:[(0,z.jsx)(`style`,{children:fs}),(0,z.jsx)(`div`,{className:n?`zf-grid zf-flow-horizontal`:`zf-grid`,style:{"--zf-cols":e.grid.columns,"--zf-row-h":`${e.grid.rowHeight}px`,"--zf-h-rows":e.grid.rows,"--zf-gap":`${e.grid.gap}px`,"--zf-pad-x":`${e.grid.paddingX}px`,"--zf-accent-hue":e.theme.accentHue,"--zf-accent-sat":`${e.theme.accentSat}%`,"--zf-base-hue":e.theme.baseHue,"--zf-base-sat":`${e.theme.baseSat}%`,"--zf-up":e.theme.upColor,"--zf-down":e.theme.downColor,"--zf-font-family":Zo[e.typography.fontFamily],"--zf-numeric":Qo[e.typography.numericStyle],"--zf-frame-radius":`${e.appearance.radius}px`,"--zf-border-alpha":e.appearance.borderStrength,"--zf-surface-opacity":e.appearance.surfaceOpacity,"--zf-density":e.appearance.density,"--zf-elevation":e.appearance.elevation,...Yo(e.theme.surface)},children:e.frames.map((e,n)=>(0,z.jsx)(bs,{instance:e,registry:t,style:r[n]},e.id))})]})}var Cs=`/__zframes/dashboard.json`,ws=`/__zframes/dashboard`,Ts=`/__zframes/dashboards`,Es=`/__zframes/switch`,Ds=`/__zframes/proxy`,Os=`/__zframes/account/portfolio`,ks=`/__zframes/account/credentials`,As=`/__zframes/agents`,js=`/__zframes/ask`,B=class{entries=new Map;inflight=new Map;namespace;ttlMs;persist;staleOnError;revive;constructor(e){this.namespace=e.namespace,this.ttlMs=e.ttlMs,this.persist=e.persist??!1,this.staleOnError=e.staleOnError??!0,this.revive=e.revive}get(e,t){let n=this.read(e);if(n&&Date.now()-n.at<this.ttlMs)return Promise.resolve(n.value);let r=this.inflight.get(e);if(r)return r;let i=t().then(t=>(this.write(e,t),t)).catch(e=>{if(this.staleOnError&&n)return n.value;throw e}).finally(()=>{this.inflight.delete(e)});return this.inflight.set(e,i),i}read(e){let t=this.entries.get(e);if(t)return t;if(!this.persist||typeof localStorage>`u`)return null;try{let t=localStorage.getItem(this.storageKey(e));if(!t)return null;let n=JSON.parse(t);if(typeof n?.at!=`number`)return null;let r;if(this.revive){let e=this.revive(n.value);if(e===null)return null;r=e}else r=n.value;let i={at:n.at,value:r};return this.entries.set(e,i),i}catch{return null}}write(e,t){let n={at:Date.now(),value:t};if(this.entries.set(e,n),!(!this.persist||typeof localStorage>`u`))try{localStorage.setItem(this.storageKey(e),JSON.stringify(n))}catch{}}storageKey(e){return`${this.namespace}:${e}`}},Ms=new B({namespace:`zframes:binance:portfolio`,ttlMs:45e3,persist:!1}),Ns=class{name=`Binance`;capabilities=[`portfolio`];portfolioKinds=[`binance`];async getPortfolio(e){if(e.kind!==`binance`)throw Error(`BinanceProvider can't serve source: ${e.kind}`);return Ms.get(`binance`,async()=>{let e=await fetch(`${Os}?source=binance`,{headers:{accept:`application/json`}});if(e.status===401)throw Error(`binance: not connected`);if(!e.ok)throw Error(`binance portfolio relay ${e.status}`);return await e.json()})}},Ps=1e4,Fs=`zframes (+https://github.com/zentryhq/zframes)`;async function Is(e,{timeoutMs:t=Ps,init:n,proxied:r}){let i=new Headers(n?.headers);typeof document>`u`&&!i.has(`User-Agent`)&&i.set(`User-Agent`,Fs);let a=r&&typeof document<`u`?`${Ds}?url=${encodeURIComponent(e)}`:e,o=await fetch(a,{...n,headers:i,signal:n?.signal??AbortSignal.timeout(t)});if(!o.ok)throw Error(`${e} failed: ${o.status}`);return o}async function V(e,t,n={}){let r=await(await Is(e,n)).json();return t?t.parse(r):r}async function Ls(e,t={}){return(await Is(e,t)).text()}var Rs=[`https://ethereum-rpc.publicnode.com`,`https://cloudflare-eth.com`,`https://1rpc.io/eth`],zs=`https://api.coingecko.com/api/v3/simple/price`,Bs=`0x70a08231`,Vs=1,Hs=[{symbol:`ETH`,address:null,decimals:18,cgId:`ethereum`},{symbol:`USDC`,address:`0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48`,decimals:6,cgId:`usd-coin`},{symbol:`USDT`,address:`0xdAC17F958D2ee523a2206206994597C13D831ec7`,decimals:6,cgId:`tether`},{symbol:`DAI`,address:`0x6B175474E89094C44Da98b954EedeAC495271d0F`,decimals:18,cgId:`dai`},{symbol:`WETH`,address:`0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`,decimals:18,cgId:`weth`},{symbol:`WBTC`,address:`0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599`,decimals:8,cgId:`wrapped-bitcoin`},{symbol:`LINK`,address:`0x514910771AF9Ca656af840dff83E8264EcF986CA`,decimals:18,cgId:`chainlink`},{symbol:`UNI`,address:`0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984`,decimals:18,cgId:`uniswap`},{symbol:`AAVE`,address:`0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9`,decimals:18,cgId:`aave`},{symbol:`LDO`,address:`0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32`,decimals:18,cgId:`lido-dao`},{symbol:`MKR`,address:`0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2`,decimals:18,cgId:`maker`},{symbol:`CRV`,address:`0xD533a949740bb3306d119CC777fa900bA034cd52`,decimals:18,cgId:`curve-dao-token`},{symbol:`SHIB`,address:`0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE`,decimals:18,cgId:`shiba-inu`},{symbol:`PEPE`,address:`0x6982508145454Ce325dDbE47a25d4ec3d2311933`,decimals:18,cgId:`pepe`}],Us=/^0x[0-9a-fA-F]{40}$/;async function Ws(e){let t=e.trim();if(Us.test(t))return t;try{let e=await V(`https://api.ensideas.com/ens/resolve/${encodeURIComponent(t)}`);if(e.address&&Us.test(e.address))return e.address}catch{}throw Error(`couldn't resolve address: ${t}`)}function Gs(e){return`${Bs}000000000000000000000000${e.slice(2).toLowerCase()}`}function Ks(e,t){if(!e||e===`0x`)return 0;try{return Number(BigInt(e))/10**t}catch{return 0}}async function qs(e){let t=Hs.map((t,n)=>t.address===null?{jsonrpc:`2.0`,id:n,method:`eth_getBalance`,params:[e,`latest`]}:{jsonrpc:`2.0`,id:n,method:`eth_call`,params:[{to:t.address,data:Gs(e)},`latest`]}),n=JSON.stringify(t),r=null,i;for(let e of Rs)try{let t=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:n,signal:AbortSignal.timeout(12e3)});if(!t.ok)throw Error(`rpc ${t.status}`);let i=await t.json();if(!Array.isArray(i)){let t=i?.error?.message??`non-array response`;throw Error(`rpc ${e}: ${t}`)}let a=i;if(!a.some(e=>typeof e.result==`string`))throw Error(`rpc ${e}: no results (throttled?)`);r=a;break}catch(e){i=e}if(!r)throw Error(`all RPC endpoints failed: ${String(i)}`);let a=new Map;for(let e of r)e.result&&a.set(e.id,e.result);let o=new Map;return Hs.forEach((e,t)=>{let n=Ks(a.get(t),e.decimals);n>0&&o.set(e.symbol,n)}),o}var Js=[...new Set(Hs.map(e=>e.cgId))],Ys=new B({namespace:`zframes:wallet:prices`,ttlMs:10*6e4,persist:!0});async function Xs(){return Ys.get(`all`,async()=>{let e=await V(`${zs}?ids=${Js.join(`,`)}&vs_currencies=usd&include_24hr_change=true`);if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`coingecko simple/price: unexpected response shape`);return e})}function Zs(e){return`${e.slice(0,6)}…${e.slice(-4)}`}var Qs=new B({namespace:`zframes:wallet:portfolio`,ttlMs:12e4,persist:!1}),$s=class{name=`On-chain wallet`;capabilities=[`portfolio`];portfolioKinds=[`wallet`];async getPortfolio(e){if(e.kind!==`wallet`||!e.address)throw Error(`wallet provider needs a wallet source with an address`);return Qs.get(e.address,async()=>{let t=await Ws(e.address),n=await qs(t),r=Hs.filter(e=>n.has(e.symbol)),i=r.length?await Xs():{},a=r.map(e=>{let t=n.get(e.symbol)??0,r=i[e.cgId]?.usd,a=r===void 0?void 0:t*r;return{symbol:e.symbol,amount:t,valueUsd:a,changePct24h:i[e.cgId]?.usd_24h_change}}).filter(e=>e.valueUsd!==void 0&&e.valueUsd>=Vs).sort((e,t)=>(t.valueUsd??0)-(e.valueUsd??0)),o=a.reduce((e,t)=>e+(t.valueUsd??0),0);return{source:`wallet`,label:Zs(t),holdings:a,totalUsd:o,asOf:Date.now()}})}},ec=`https://api.alternative.me/fng/`,tc=new B({namespace:`zframes:alternativeme:fng`,ttlMs:45*6e4,persist:!0,revive:e=>Array.isArray(e)?e:null}),nc=class{name=`alternative.me`;capabilities=[`sentiment`];async getFearGreed(e=30){return tc.get(String(e),async()=>{let t=await V(`${ec}?limit=${e}`);if(!Array.isArray(t?.data))throw Error(`alternative.me fng: unexpected response shape`);return t.data.map(e=>({value:Number(e.value),classification:e.value_classification??``,time:Number(e.timestamp)*1e3})).filter(e=>Number.isFinite(e.value)&&Number.isFinite(e.time))})}},rc=`https://bitcoin-data.com/v1`;function ic(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!n||typeof n!=`object`)continue;let e=n,r=Number(e.unixTs),i=Number.isFinite(r)?r*1e3:Date.parse(String(e.d)),a=NaN;for(let[t,n]of Object.entries(e)){if(t===`d`||t===`unixTs`)continue;let e=Number(n);if(Number.isFinite(e)){a=e;break}}Number.isFinite(i)&&Number.isFinite(a)&&t.push({time:i,value:a})}return t.sort((e,t)=>e.time-t.time)}var ac=e=>e.length?e[e.length-1].value:null,oc=class{name=`bitcoin-data.com`;capabilities=[`onchain-cycle-extras`];cache=new B({namespace:`zframes:bitcoin-data:extras`,ttlMs:1080*6e4,persist:!0});async getOnchainExtras(){return this.cache.get(`latest`,async()=>{let[e,t,n]=await Promise.allSettled([V(`${rc}/sopr`),V(`${rc}/puell-multiple`),V(`${rc}/reserve-risk`)]),r=e.status===`fulfilled`?ic(e.value).slice(-365):[],i=t.status===`fulfilled`?ic(t.value).slice(-365):[],a=n.status===`fulfilled`?ic(n.value).slice(-365):[];if(r.length===0&&i.length===0&&a.length===0)throw Error(`bitcoin-data: all metric fetches failed (likely rate-limited)`);let o=Math.max(r.at(-1)?.time??0,i.at(-1)?.time??0,a.at(-1)?.time??0);return{date:new Date(o).toISOString().slice(0,10),sopr:ac(r),puell:ac(i),reserveRisk:ac(a),history:{sopr:r,puell:i,reserveRisk:a}}})}},sc=`https://api.bitkub.com`,cc=`https://api.frankfurter.dev/v1/latest?base=USD&symbols=THB`,lc=`THB`,uc=`KUB`,dc=15,fc=300,pc={"1m":{code:`1`,seconds:60},"5m":{code:`5`,seconds:300},"15m":{code:`15`,seconds:900},"1h":{code:`60`,seconds:3600},"4h":{code:`240`,seconds:14400},"1d":{code:`1D`,seconds:86400}},mc=`1h`,hc=new B({namespace:`zframes:bitkub:daystats`,ttlMs:25e3}),gc=new B({namespace:`zframes:bitkub:book`,ttlMs:15e3}),_c=new B({namespace:`zframes:bitkub:candles`,ttlMs:5e4}),vc=new B({namespace:`zframes:bitkub:usdthb`,ttlMs:60*6e4,persist:!0});function yc(e){let t=Number(e);return Number.isFinite(t)?t:0}function bc(e){return(e||uc).toUpperCase().trim().replace(RegExp(`^${lc}_`),``).replace(RegExp(`_${lc}$`),``)||uc}function xc(e){return`${e}_${lc}`}function Sc(e,t){let n=0,r=[];for(let i of e??[]){if(!Array.isArray(i))continue;let e=yc(i[0]),a=yc(i[1]);e<=0||a<=0||(n+=a,r.push({price:t(e),size:a,cumulativeSize:n}))}return r}var Cc=class{name=`bitkub`;capabilities=[`day-stats`,`ohlcv`,`order-book`];async usdThb(){return vc.get(`USD:THB`,async()=>{let e=yc((await V(cc))?.rates?.THB);if(e<=0)throw Error(`bitkub fx: no USD/THB rate`);return e})}async getDayStats(e){let t=e?.length?new Set(e.map(e=>bc(e))):null,n=t?[...t].sort().join(`,`):`*`;return hc.get(n,async()=>{let[e,n]=await Promise.all([V(`${sc}/api/market/ticker`),this.usdThb()]);if(!e||typeof e!=`object`)throw Error(`bitkub day stats: unexpected response shape`);let r=e=>e/n,i={};for(let[n,a]of Object.entries(e)){if(!n.startsWith(`${lc}_`)||!a||a.isFrozen===1)continue;let e=n.slice(4);if(!e||t&&!t.has(e))continue;let o=yc(a.last),s=yc(a.percentChange),c=s===-100?0:o/(1+s/100);i[e]={markPx:r(o),prevDayPx:r(c),changePct:s,dayNtlVlm:r(yc(a.quoteVolume))}}return i})}async getCandles(e=uc,t=mc,n){let r=bc(e),i=pc[t]??pc[mc],a=Math.floor(Date.now()/1e3),o=a-i.seconds*fc,s=n?Math.max(Math.floor(n/1e3),o):o;return _c.get(`${r}:${i.code}:${s}`,async()=>{let e=xc(r),[t,n]=await Promise.all([V(`${sc}/tradingview/history?symbol=${e}&resolution=${i.code}&from=${s}&to=${a}`),this.usdThb()]);if(t?.s===`no_data`)return[];if(t?.s!==`ok`||!Array.isArray(t.t))throw Error(`bitkub candles ${e}: ${t?.s??`bad response`}`);let{t:o,o:c,h:l,l:u,c:d,v:f}=t;return o.map((e,t)=>({time:e*1e3,open:yc(c?.[t])/n,high:yc(l?.[t])/n,low:yc(u?.[t])/n,close:yc(d?.[t])/n,volume:yc(f?.[t])}))})}async getOrderBook(e=uc,t=dc){let n=bc(e),r=Math.max(1,Math.min(Math.trunc(t)||dc,50));return gc.get(`${n}:${r}`,async()=>{let e=xc(n),[t,i]=await Promise.all([V(`${sc}/api/v3/market/depth?sym=${e}&lmt=${r}`),this.usdThb()]);if(t?.error)throw Error(`bitkub depth ${e}: ${t.error}`);let a=e=>e/i,o=Sc(t?.result?.bids,a),s=Sc(t?.result?.asks,a),c=o[0]?.price??0,l=s[0]?.price??0,u=c>0&&l>0?(c+l)/2:0;return{symbol:n,pair:e,bids:o,asks:s,mid:u,spreadPct:u>0?(l-c)/u*100:0}})}},wc=`https://api.blockchair.com`,Tc=[{slug:`bitcoin`,label:`Bitcoin`},{slug:`ethereum`,label:`Ethereum`},{slug:`litecoin`,label:`Litecoin`},{slug:`dogecoin`,label:`Dogecoin`},{slug:`bitcoin-cash`,label:`Bitcoin Cash`},{slug:`dash`,label:`Dash`},{slug:`zcash`,label:`Zcash`}],Ec=new B({namespace:`zframes:blockchair:chains`,ttlMs:4*6e4,persist:!0});function Dc(e,t=0){let n=Number(e);return Number.isFinite(n)?n:t}var Oc=class{name=`blockchair`;capabilities=[`chain-activity`];async getChainActivity(){return Ec.get(`chains`,async()=>{let e=(await Promise.allSettled(Tc.map(async({slug:e,label:t})=>{let n=(await V(`${wc}/${e}/stats`))?.data;if(!n||!Number.isFinite(Number(n.transactions_24h)))throw Error(`blockchair ${e}: unexpected response shape`);return{chain:e,label:t,transactions24h:Dc(n.transactions_24h),blocks24h:Dc(n.blocks_24h),mempoolTxns:Dc(n.mempool_transactions),priceUsd:Dc(n.market_price_usd),priceChangePct24h:Dc(n.market_price_usd_change_24h_percentage)}}))).filter(e=>e.status===`fulfilled`).map(e=>e.value);if(e.length===0)throw Error(`blockchair: no chains resolved`);return e.sort((e,t)=>t.transactions24h-e.transactions24h)})}},kc=`https://api.bls.gov/publicAPI/v2/timeseries/data/`,Ac={CUUR0000SA0:`CPI-U all items`,LNS14000000:`Unemployment rate`,CES0000000001:`Nonfarm payrolls`,CES0500000003:`Avg hourly earnings`,LNS11300000:`Labor force participation`};function jc(e){let t=Number(e);return Number.isFinite(t)?t:null}function Mc(e,t){let n=/^M(0[1-9]|1[0-2])$/.exec(t??``),r=Number(e);if(!n||!Number.isFinite(r))return null;let i=Number(n[1]);return Date.UTC(r,i-1,1)}function Nc(e){return new Intl.DateTimeFormat(`en-US`,{month:`short`,year:`numeric`,timeZone:`UTC`}).format(e)}var Pc=new B({namespace:`zframes:macro`,ttlMs:360*6e4,persist:!0,revive:e=>e&&Array.isArray(e.points)?e:null}),Fc=class{name=`bls`;capabilities=[`macro-series`];async getMacroSeries(e,t,n){return Pc.get(`${e}:${t}:${n}`,()=>this.fetchMacroSeries(e,t,n))}async fetchMacroSeries(e,t,n){let r=await V(`${kc}${encodeURIComponent(e)}?startyear=${t}&endyear=${n}`);if(r.status!==`REQUEST_SUCCEEDED`)throw Error(`bls series ${e}: ${r.message?.join(`, `)||`request failed`}`);let i=r.Results?.series?.[0];if(!i?.data)throw Error(`bls series: unexpected response shape`);let a=i.data.map(e=>{let t=jc(e.value),n=Mc(e.year,e.period);return t===null||n===null?null:{time:n,date:Nc(n),value:t,period:`${e.year}-${e.period}`}}).filter(e=>e!==null).sort((e,t)=>e.time-t.time);return{seriesId:i.seriesID??e,label:Ac[e]??e,source:`BLS`,points:a}}},Ic=`https://api.coingecko.com/api/v3/global`,Lc=`https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=50&page=1&sparkline=false&price_change_percentage=24h`,Rc=`https://api.coingecko.com/api/v3/search/trending`,zc=`https://api.coingecko.com/api/v3/coins/categories`,Bc=`https://api.coingecko.com/api/v3/nfts`,Vc=[`bored-ape-yacht-club`,`pudgy-penguins`,`mutant-ape-yacht-club`,`cryptopunks`,`azuki`,`milady`,`doodles-official`,`moonbirds`,`lil-pudgys`,`degods`],Hc=new B({namespace:`zframes:coingecko:global`,ttlMs:12*6e4,persist:!0}),Uc=new B({namespace:`zframes:coingecko:markets`,ttlMs:10*6e4,persist:!0}),Wc=new B({namespace:`zframes:coingecko:trending`,ttlMs:10*6e4,persist:!0}),Gc=new B({namespace:`zframes:coingecko:categories`,ttlMs:12*6e4,persist:!0}),Kc=new B({namespace:`zframes:coingecko:nft`,ttlMs:45*6e4,persist:!0});function qc(e,t){let n=Number(e);return Number.isFinite(n)?n:t}var Jc=class{name=`coingecko`;capabilities=[`global-market`,`coin-markets`,`trending-coins`,`sector-performance`,`nft-market`];async getTrendingCoins(){return Wc.get(`trending`,async()=>{let e=await V(Rc);if(!Array.isArray(e?.coins))throw Error(`coingecko trending: unexpected response shape`);return e.coins.map(({item:e})=>{let t=Number(e.data?.price),n=Number(e.data?.price_change_percentage_24h?.usd);return{id:e.id,name:e.name,symbol:(e.symbol??``).toUpperCase(),rank:Number.isFinite(e.market_cap_rank)?e.market_cap_rank:null,price:Number.isFinite(t)?t:null,changePct24h:Number.isFinite(n)?n:null}})})}async getSectorPerformance(){return Gc.get(`categories`,async()=>{let e=await V(zc);if(!Array.isArray(e))throw Error(`coingecko categories: unexpected response shape`);return e.filter(e=>Number.isFinite(e.market_cap)&&(e.market_cap??0)>0).map(e=>({name:e.name,marketCap:e.market_cap,changePct24h:Number.isFinite(e.market_cap_change_24h)?e.market_cap_change_24h:0})).sort((e,t)=>t.marketCap-e.marketCap).slice(0,30)})}async getNftMarket(){return Kc.get(`nft`,async()=>{let e=[];for(let t of Vc)try{let n=await V(`${Bc}/${t}`),r=Number(n?.floor_price?.usd);if(!n?.id||!Number.isFinite(r))continue;e.push({id:n.id,name:n.name??n.id,floorNative:qc(n.floor_price?.native_currency,0),floorUsd:r,floorChangePct24h:qc(n.floor_price_24h_percentage_change?.usd,0),marketCapUsd:qc(n.market_cap?.usd,0),volume24hUsd:qc(n.volume_24h?.usd,0),sales24h:qc(n.one_day_sales,0)})}catch{}if(e.length===0)throw Error(`coingecko nfts: no collections resolved`);return e.sort((e,t)=>t.volume24hUsd-e.volume24hUsd)})}async getGlobalMarket(){return Hc.get(`global`,async()=>{let e=await V(Ic);if(!e?.data?.total_market_cap||!e.data.market_cap_percentage)throw Error(`coingecko global: unexpected response shape`);let t=Number(e.data.market_cap_change_percentage_24h_usd);return{totalMarketCapUsd:e.data.total_market_cap.usd??0,marketCapChangePct24h:Number.isFinite(t)?t:0,dominance:e.data.market_cap_percentage}})}async getCoinMarkets(){return Uc.get(`markets`,async()=>{let e=await V(Lc);if(!Array.isArray(e))throw Error(`coingecko markets: unexpected response shape`);return e.filter(e=>Number.isFinite(e.market_cap)&&e.market_cap>0).map(e=>({symbol:(e.symbol??``).toUpperCase(),name:e.name,marketCapUsd:e.market_cap,changePct24h:Number.isFinite(e.price_change_percentage_24h)?e.price_change_percentage_24h:void 0}))})}},Yc=`https://community-api.coinmetrics.io/v4/timeseries/asset-metrics`,Xc=`PriceUSD,CapMrktCurUSD,SplyCur,CapMVRVCur`;function Zc(e){let t=[];for(let n of e){let e=Number(n.PriceUSD),r=Number(n.CapMrktCurUSD),i=Number(n.SplyCur),a=Number(n.CapMVRVCur),o=Date.parse(n.time);!Number.isFinite(e)||!Number.isFinite(r)||!Number.isFinite(i)||!Number.isFinite(a)||!Number.isFinite(o)||a<=0||i<=0||t.push({time:o,price:e,marketCap:r,supply:i,mvrv:a})}return t.sort((e,t)=>e.time-t.time)}function Qc(e){let t=e.length;if(t===0)return 0;let n=e.reduce((e,t)=>e+t,0)/t,r=e.reduce((e,t)=>e+(t-n)**2,0)/t;return Math.sqrt(r)}var $c=class{name=`Coin Metrics`;capabilities=[`onchain-valuation`,`price-history-daily`];cache=new B({namespace:`zframes:coinmetrics:metrics`,ttlMs:180*6e4,persist:!1});load(e){return this.cache.get(e,async()=>{let t=Zc((await V(`${Yc}?assets=${e}&metrics=${Xc}&frequency=1d&page_size=10000&start_time=2010-01-01`)).data??[]);if(t.length===0)throw Error(`coinmetrics: no usable rows in response`);return t})}async getOnchainValuation(){let e=await this.load(`btc`),t=Qc(e.map(e=>e.marketCap)),n=[],r=[],i=[],a=[],o=[];for(let s of e){let e=s.marketCap/s.mvrv;n.push({time:s.time,value:s.price}),r.push({time:s.time,value:s.mvrv}),i.push({time:s.time,value:t>0?(s.marketCap-e)/t:0}),a.push({time:s.time,value:1-1/s.mvrv}),o.push({time:s.time,value:e/s.supply})}let s=e[e.length-1],c=s.marketCap/s.mvrv;return{date:new Date(s.time).toISOString().slice(0,10),price:s.price,supply:s.supply,marketCap:s.marketCap,realizedCap:c,realizedPrice:c/s.supply,mvrv:s.mvrv,mvrvZScore:t>0?(s.marketCap-c)/t:0,nupl:1-1/s.mvrv,history:{price:n,mvrv:r,mvrvZScore:i,nupl:a,realizedPrice:o}}}async getDailyCloseHistory(e=`btc`){return(await this.load(e.toLowerCase())).map(e=>({time:e.time,value:e.price}))}},el=300,tl=e=>`https://api.coinpaprika.com/v1/tickers?quotes=USD&limit=${e}`,nl=new B({namespace:`zframes:coinpaprika:movers`,ttlMs:12*6e4,persist:!0}),rl=e=>Number.isFinite(e)?e:0,il=class{name=`coinpaprika`;capabilities=[`coin-movers`];async getCoinMovers(e=el){return nl.get(`movers:${e}`,async()=>{let t=await V(tl(e));if(!Array.isArray(t))throw Error(`coinpaprika tickers: unexpected response shape`);return t.filter(e=>e?.quotes?.USD&&Number.isFinite(e.quotes.USD.price)).map(e=>{let t=e.quotes.USD;return{symbol:(e.symbol??``).toUpperCase(),name:e.name,rank:e.rank,priceUsd:t.price,marketCapUsd:t.market_cap,volume24hUsd:t.volume_24h,changePct:{"1h":rl(t.percent_change_1h),"24h":rl(t.percent_change_24h),"7d":rl(t.percent_change_7d),"30d":rl(t.percent_change_30d)}}})})}},al=`https://api.llama.fi/v2/chains`,ol=`https://api.llama.fi/overview/dexs`,sl=`https://api.llama.fi/overview/fees`,cl=`https://api.llama.fi/protocols`,ll=`https://stablecoins.llama.fi/stablecoins?includePrices=true`,ul=`https://stablecoins.llama.fi/stablecoinchains`,dl=`https://yields.llama.fi/pools`,fl=8*6e4,pl=30*6e4,ml=new B({namespace:`zframes:defillama:tvl`,ttlMs:fl}),hl=new B({namespace:`zframes:defillama:dex-volume`,ttlMs:fl}),gl=new B({namespace:`zframes:defillama:protocol-tvl`,ttlMs:fl}),_l=new B({namespace:`zframes:defillama:protocol-fees`,ttlMs:fl}),vl=new B({namespace:`zframes:defillama:dex-history`,ttlMs:pl}),yl=new B({namespace:`zframes:defillama:protocol-history`,ttlMs:pl}),bl=new B({namespace:`zframes:defillama:stablecoins`,ttlMs:30*6e4,persist:!0}),xl=new B({namespace:`zframes:defillama:yields`,ttlMs:12*6e4}),Sl=new B({namespace:`zframes:defillama:fees-overview`,ttlMs:fl}),Cl=e=>[...e].sort().join(`,`);function wl(e){return Array.isArray(e)?e.map(([e,t])=>({time:e*1e3,value:Number(t)})).filter(e=>Number.isFinite(e.time)&&Number.isFinite(e.value)):[]}var Tl=e=>Number.isFinite(e)?e:void 0,El=class{name=`defillama`;capabilities=[`tvl`,`dex-volume`,`protocol-tvl`,`protocol-fees`,`stablecoins`,`yields`,`fees-overview`];async getTvlByChain(){return ml.get(`chains`,async()=>{let e=await V(al);if(!Array.isArray(e))throw Error(`defillama chains: unexpected response shape`);return e.filter(e=>Number.isFinite(e.tvl)&&e.tvl>0).sort((e,t)=>t.tvl-e.tvl).map(e=>({name:e.name,tvl:e.tvl}))})}async getDexVolume(){return hl.get(`overview`,async()=>{let e=(await V(ol))?.protocols;if(!Array.isArray(e))throw Error(`defillama dexs: unexpected response shape`);return e.filter(e=>Number.isFinite(e.total24h)&&(e.total24h??0)>0).map(e=>({name:e.name,volume24h:e.total24h,changePct:Tl(e.change_1d)})).sort((e,t)=>t.volume24h-e.volume24h)})}async getDexVolumeHistory(e){return vl.get(Cl(e),async()=>{let t=await Promise.all(e.map(e=>V(`https://api.llama.fi/summary/dexs/${encodeURIComponent(e)}?excludeTotalDataChartBreakdown=true`).then(t=>[e,wl(t.totalDataChart)]).catch(()=>[e,[]])));return Object.fromEntries(t)})}async getProtocolTvl(){return gl.get(`overview`,async()=>{let e=await V(cl);if(!Array.isArray(e))throw Error(`defillama protocols: unexpected response shape`);return e.filter(e=>Number.isFinite(e.tvl)&&(e.tvl??0)>0).map(e=>({name:e.name,tvl:e.tvl,category:e.category,changePct:Tl(e.change_1d)})).sort((e,t)=>t.tvl-e.tvl)})}async getProtocolTvlHistory(e){return yl.get(Cl(e),async()=>{let t=await Promise.all(e.map(e=>V(`https://api.llama.fi/protocol/${encodeURIComponent(e)}`).then(t=>[e,(t.tvl??[]).map(e=>({time:e.date*1e3,value:Number(e.totalLiquidityUSD)})).filter(e=>Number.isFinite(e.time)&&Number.isFinite(e.value))]).catch(()=>[e,[]])));return Object.fromEntries(t)})}async getProtocolFees(){return _l.get(`overview`,async()=>{let e=(await V(sl))?.protocols;if(!Array.isArray(e))throw Error(`defillama fees: unexpected response shape`);return e.filter(e=>Number.isFinite(e.total24h)&&(e.total24h??0)>0).map(e=>({name:e.name,fees24h:e.total24h,changePct:Tl(e.change_1d)})).sort((e,t)=>t.fees24h-e.fees24h)})}async getStablecoinSupply(){return bl.get(`supply`,async()=>{let[e,t]=await Promise.all([V(ll),V(ul).catch(()=>[])]),n=e?.peggedAssets;if(!Array.isArray(n))throw Error(`defillama stablecoins: unexpected response shape`);let r=0,i=0,a=0,o=0;for(let e of n)e.pegType&&e.pegType!==`peggedUSD`||(r+=e.circulating?.peggedUSD??0,i+=e.circulatingPrevDay?.peggedUSD??0,a+=e.circulatingPrevWeek?.peggedUSD??0,o+=e.circulatingPrevMonth?.peggedUSD??0);if(r<=0)throw Error(`defillama stablecoins: empty aggregate`);let s=e=>e>0?(r-e)/e*100:0,c=Date.now(),l=[{time:c-30*864e5,value:o},{time:c-7*864e5,value:a},{time:c-864e5,value:i},{time:c,value:r}].filter(e=>e.value>0),u=(Array.isArray(t)?t:[]).map(e=>({name:e.name,usd:e.totalCirculatingUSD?.peggedUSD??0})).filter(e=>e.usd>0).sort((e,t)=>t.usd-e.usd).slice(0,12);return{totalUsd:r,changePct1d:s(i),changePct7d:s(a),changePct30d:s(o),history:l,topChains:u}})}async getYieldPools(){return xl.get(`pools`,async()=>{let e=(await V(dl))?.data;if(!Array.isArray(e))throw Error(`defillama yields: unexpected response shape`);return e.filter(e=>Number.isFinite(e.tvlUsd)&&(e.tvlUsd??0)>0&&Number.isFinite(e.apy)).map(e=>({pool:e.pool,chain:e.chain,project:e.project,symbol:e.symbol,tvlUsd:e.tvlUsd,apy:e.apy,apyBase:Number.isFinite(e.apyBase)?e.apyBase:null,apyReward:Number.isFinite(e.apyReward)?e.apyReward:null,apyPct7D:Number.isFinite(e.apyPct7D)?e.apyPct7D:null,stablecoin:!!e.stablecoin,ilRisk:e.ilRisk??`unknown`})).sort((e,t)=>t.tvlUsd-e.tvlUsd).slice(0,250)})}async getFeesOverview(){return Sl.get(`overview`,async()=>{let e=await V(sl);if(!e||!Number.isFinite(e.total24h))throw Error(`defillama fees-overview: unexpected response shape`);return{total24h:e.total24h,total7d:Number.isFinite(e.total7d)?e.total7d:null,changePct:Number.isFinite(e.change_1d)?e.change_1d:null,history:wl(e.totalDataChart)}})}},Dl=`https://api.sosovalue.xyz/openapi/v2/etf`,Ol={btc:`us-btc-spot`,eth:`us-eth-spot`},kl=e=>{let t=Number(e?.value);return Number.isFinite(t)?t:0};async function Al(e,t){return V(`${Dl}/${e}`,void 0,{init:{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:t})}})}var jl=class{name=`SoSoValue`;capabilities=[`etf-flows`];cache=new B({namespace:`zframes:etf-flows`,ttlMs:360*6e4,persist:!0});async getEtfFlows(e){let t=(e||`btc`).toLowerCase(),n=Ol[t]??Ol.btc;return this.cache.get(t,async()=>{let[e,r]=await Promise.all([Al(`historicalInflowChart`,n),Al(`currentEtfDataMetrics`,n)]),i=(Array.isArray(e?.data)?e.data:[]).map(e=>({time:Date.parse(String(e.date)),value:Number(e.totalNetInflow)})).filter(e=>Number.isFinite(e.time)&&Number.isFinite(e.value)).sort((e,t)=>e.time-t.time),a=r?.data,o=(Array.isArray(a?.list)?a.list:[]).map(e=>({ticker:e.ticker??``,institute:e.institute??``,dailyNetInflow:kl(e.dailyNetInflow),netAssets:kl(e.netAssets),cumNetInflow:kl(e.cumNetInflow)})).filter(e=>e.ticker).sort((e,t)=>t.netAssets-e.netAssets);if(i.length===0&&o.length===0)throw Error(`etf-flows: empty response`);let s=i.at(-1);return{asset:t,date:s?new Date(s.time).toISOString().slice(0,10):``,dailyTotalNetInflow:a?.dailyNetInflow?kl(a.dailyNetInflow):s?.value??0,cumNetInflow:kl(a?.cumNetInflow),totalNetAssets:kl(a?.totalNetAssets),issuers:o,history:i}})}},Ml=`https://gamma-api.polymarket.com/markets`;function Nl(e){if(typeof e!=`string`)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.map(String):[]}catch{return[]}}var Pl=class{name=`Polymarket`;capabilities=[`prediction-markets`];cache=new B({namespace:`zframes:polymarket:markets`,ttlMs:4*6e4,persist:!0});async getPredictionMarkets(e=12){let t=Math.min(Math.max(e,1),50);return this.cache.get(String(t),async()=>{let e=await V(`${Ml}?closed=false&limit=${t}&order=volume&ascending=false`);if(!Array.isArray(e))throw Error(`polymarket markets: unexpected response shape`);return e.map(e=>{let t=Nl(e.outcomes),n=Nl(e.outcomePrices);if(!e.question||t.length===0)return null;let r=t.map((e,t)=>({label:e,prob:Number(n[t])})).filter(e=>Number.isFinite(e.prob));return r.length===0?null:{question:e.question,outcomes:r,volume24h:Number.isFinite(e.volume24hr)?e.volume24hr:0,endDate:e.endDate??``}}).filter(e=>e!==null)})}},Fl=`https://ultrasound.money/api/v2/fees`,Il=e=>{let t=Number(e);return Number.isFinite(t)?t:0},Ll=class{name=`ultrasound.money`;capabilities=[`eth-supply`];cache=new B({namespace:`zframes:ultrasound:eth-supply`,ttlMs:2*6e4,persist:!0});async getEthSupply(){return this.cache.get(`latest`,async()=>{let[e,t,n,r]=await Promise.allSettled([V(`${Fl}/gauge-rates`),V(`${Fl}/validator-rewards`),V(`${Fl}/burn-rates`),V(`${Fl}/supply-over-time`)]);if(e.status!==`fulfilled`||!e.value?.d1)throw Error(`ultrasound gauge-rates: unavailable`);let i=e.value.d1,a=t.status===`fulfilled`?t.value:void 0,o=(Il(a?.issuance?.apr)+Il(a?.mev?.apr)+Il(a?.tips?.apr))*100,s=n.status===`fulfilled`?Il(n.value?.d1?.rate?.eth_per_minute):0,c=(r.status===`fulfilled`?r.value?.d30??r.value?.d7??r.value?.d1??[]:[]).map(e=>({time:Date.parse(e.timestamp),value:Number(e.supply)})).filter(e=>Number.isFinite(e.time)&&Number.isFinite(e.value));return{supply:c.length?c[c.length-1].value:0,burnRateYearlyEth:Il(i.burn_rate_yearly?.eth),issuanceRateYearlyEth:Il(i.issuance_rate_yearly?.eth),supplyGrowthYearlyPct:Il(i.supply_growth_rate_yearly)*100,supplyGrowthYearlyPowPct:Il(i.supply_growth_rate_yearly_pow)*100,stakingAprPct:o,burnEthPerMin:s,history:c}})}},Rl=`https://www.deribit.com/api/v2/public`,zl=new B({namespace:`zframes:deribit:summary`,ttlMs:4*6e4,persist:!0}),Bl=new B({namespace:`zframes:deribit:dvol`,ttlMs:9*6e4,persist:!0}),Vl={JAN:0,FEB:1,MAR:2,APR:3,MAY:4,JUN:5,JUL:6,AUG:7,SEP:8,OCT:9,NOV:10,DEC:11},Hl=/^[A-Z]+-(\d{1,2}[A-Z]{3}\d{2})-(\d+(?:\.\d+)?)-([CP])$/;function Ul(e){let t=/^(\d{1,2})([A-Z]{3})(\d{2})$/.exec(e);if(!t)return 1/0;let n=Number(t[1]),r=Vl[t[2]],i=2e3+Number(t[3]);return r===void 0?1/0:Date.UTC(i,r,n,8,0,0)}function Wl(e){return[...e.entries()].map(([e,t])=>({strike:e,callOi:t.callOi,putOi:t.putOi,callIv:t.callIv,putIv:t.putIv})).sort((e,t)=>e.strike-t.strike)}var Gl=class{name=`deribit`;capabilities=[`options-summary`,`volatility-index`];async getOptionsSummary(e){let t=e.toUpperCase();return zl.get(t,async()=>{let e=(await V(`${Rl}/get_book_summary_by_currency?currency=${t}&kind=option`))?.result;if(!Array.isArray(e)||e.length===0)throw Error(`deribit options: unexpected response shape`);let n=0,r=0,i=0,a=0,o=0,s=0,c=0,l=new Map;for(let t of e){let e=Hl.exec(t.instrument_name);if(!e)continue;let[,u,d,f]=e,p=Number(d),m=t.open_interest??0,h=t.volume??0,g=f===`C`;g?(n+=m,i+=h):(r+=m,a+=h),Number.isFinite(t.mark_iv)&&m>0&&(o+=t.mark_iv*m,s+=m),!c&&Number.isFinite(t.underlying_price)&&(c=t.underlying_price);let _=l.get(u);_||(_=new Map,l.set(u,_));let v=_.get(p);v||(v={callOi:0,putOi:0},_.set(p,v));let y=Number.isFinite(t.mark_iv)?t.mark_iv:void 0;g?(v.callOi+=m,y!==void 0&&(v.callIv=y)):(v.putOi+=m,y!==void 0&&(v.putIv=y))}let u=Date.now(),d=[...l.keys()].map(e=>({expiry:e,expiryMs:Ul(e)}));d.sort((e,t)=>e.expiryMs-t.expiryMs);let f=d.find(e=>e.expiryMs>u)??d[0]??null,p={expiry:f?.expiry??``,expiryMs:f?.expiryMs??0,strikes:[]};f&&(p={expiry:f.expiry,expiryMs:f.expiryMs,strikes:Wl(l.get(f.expiry))});let m=d.map(e=>({expiry:e.expiry,expiryMs:e.expiryMs,strikes:Wl(l.get(e.expiry))}));return{currency:t,underlyingPrice:c,putCallRatioOi:n>0?r/n:0,putCallRatioVolume:i>0?a/i:0,callOi:n,putOi:r,callVolume:i,putVolume:a,avgIv:s>0?o/s:0,nearestExpiry:p,allExpiries:m,asOf:Date.now()}})}async getVolatilityIndex(e,t,n){let r=e.toUpperCase();return Bl.get(`${r}:${n}:${t}`,async()=>{let e=(await V(`${Rl}/get_volatility_index_data?currency=${r}&start_timestamp=${t}&end_timestamp=${Date.now()}&resolution=${n}`))?.result?.data;if(!Array.isArray(e))throw Error(`deribit dvol: unexpected response shape`);return e.map(e=>({time:e[0],value:e[4]})).sort((e,t)=>e.time-t.time)})}},Kl=e=>`https://cdn.finra.org/equity/regsho/daily/CNMSshvol${e}.txt`,ql=7,Jl=new B({namespace:`zframes:finra:shortvol`,ttlMs:60*6e4});function Yl(e){let t=e.indexOf(`:`);return t===-1?e:e.slice(t+1)}function Xl(e){return`${e.getUTCFullYear()}${String(e.getUTCMonth()+1).padStart(2,`0`)}${String(e.getUTCDate()).padStart(2,`0`)}`}function Zl(e){let t=e.split(/\r?\n/),n=new Map,r=``;for(let e=1;e<t.length;e++){let i=t[e].split(`|`);if(i.length<5)continue;let[a,o,s,c,l]=i;if(!o)continue;let u=Number(s),d=Number(l);!Number.isFinite(u)||!Number.isFinite(d)||(!r&&/^\d{8}$/.test(a)&&(r=`${a.slice(0,4)}-${a.slice(4,6)}-${a.slice(6,8)}`),n.set(o.toUpperCase(),{date:r||a,symbol:o,shortVolume:u,shortExemptVolume:Number(c)||0,totalVolume:d,shortPct:d>0?u/d*100:0}))}if(n.size===0)throw Error(`finra: empty or unparseable short-volume file`);return{date:r,bySymbol:n}}var Ql=class{name=`finra`;capabilities=[`short-volume`];async getShortVolume(e){let t=await this.loadReport(),n={};for(let r of e){let e=t.bySymbol.get(Yl(r).toUpperCase());e&&(n[r]=e)}return n}loadReport(){return Jl.get(`latest`,()=>this.fetchLatest())}async fetchLatest(){let e=Date.now();for(let t=0;t<=ql;t++){let n=new Date(e-t*864e5);try{return Zl(await Ls(Kl(Xl(n)),{proxied:!0,timeoutMs:15e3}))}catch{}}throw Error(`finra: no recent short-volume file found`)}},$l=`https://api.frankfurter.dev/v1`,eu=50.14348112,tu={EUR:.576,JPY:.136,GBP:.119,CAD:.091,SEK:.042,CHF:.036},nu=new B({namespace:`zframes:fx`,ttlMs:55*6e4,persist:!0}),ru=new B({namespace:`zframes:fx:dxy`,ttlMs:55*6e4,persist:!0}),iu=40;function au(e){return new Date(Date.now()-e*864e5).toISOString().slice(0,10)}var ou=class{name=`fx`;capabilities=[`fx-rates`,`dollar-index`];async getFxRates(e,t){let n=e.toUpperCase(),r=[...new Set(t.map(e=>e.toUpperCase()))].filter(e=>e&&e!==n);if(r.length===0)return[];let i=`${n}:${[...r].sort().join(`,`)}`;return nu.get(i,async()=>{let e=await V(`${$l}/${au(iu)}..?base=${n}&symbols=${r.join(`,`)}`);if(!e?.rates)throw Error(`frankfurter: unexpected response shape`);let t=Object.keys(e.rates).sort();return r.map(r=>{let i=[];for(let n of t){let t=e.rates[n]?.[r];typeof t==`number`&&Number.isFinite(t)&&i.push({time:new Date(`${n}T00:00:00Z`).getTime(),value:t})}if(i.length===0)return null;let a=i[i.length-1].value,o=i.length>1?i[i.length-2].value:a,s=o>0?(a-o)/o*100:0;return{symbol:r,base:n,rate:a,changePct:s,history:i}}).filter(e=>e!==null)})}async getDollarIndex(){return ru.get(`dxy`,async()=>{let e=Object.keys(tu),t=await V(`${$l}/${au(iu)}..?base=USD&symbols=${e.join(`,`)}`);if(!t?.rates)throw Error(`frankfurter dxy: unexpected response shape`);let n=Object.keys(t.rates).sort(),r=[];for(let i of n){let n=t.rates[i];if(!n||!e.every(e=>typeof n[e]==`number`&&Number.isFinite(n[e])&&n[e]>0))continue;let a=eu;for(let[e,t]of Object.entries(tu))a*=n[e]**+t;r.push({time:new Date(`${i}T00:00:00Z`).getTime(),value:a})}if(r.length===0)throw Error(`frankfurter dxy: no complete days in window`);let i=r[r.length-1].value,a=r.length>1?r[r.length-2].value:i;return{value:i,changePct:a>0?(i-a)/a*100:0,history:r}})}},su=`https://api.geckoterminal.com/api/v2`,cu=`eth`,lu=15,uu=new B({namespace:`zframes:geckoterminal:pools`,ttlMs:1e5});function du(e){let t=Number(e);return Number.isFinite(t)?t:0}var fu=class{name=`geckoterminal`;capabilities=[`dex-pools`];async getDexPools(e=cu){let t=e||cu;return uu.get(t,async()=>{let e=await V(`${su}/networks/${t}/trending_pools?page=1`);if(!Array.isArray(e?.data))throw Error(`geckoterminal pools: unexpected response shape`);return e.data.map(e=>{let n=e.attributes??{},r=n.transactions?.h24??{};return{name:n.name??`—`,network:t,priceUsd:du(n.base_token_price_usd),volume24hUsd:du(n.volume_usd?.h24),changePct24h:du(n.price_change_percentage?.h24),reserveUsd:du(n.reserve_in_usd),fdvUsd:du(n.fdv_usd),txns24h:du(r.buys)+du(r.sells)}}).sort((e,t)=>t.volume24hUsd-e.volume24hUsd).slice(0,lu)})}},pu=`wss://api.hyperliquid.xyz/ws`,mu=`https://api.hyperliquid.xyz/info`,hu={HlPerp:`Hyperliquid`,BinPerp:`Binance`,BybitPerp:`Bybit`},gu=e=>e.includes(`:`)?e.split(`:`)[0]:``;function _u(e){if(e===void 0)return;let t=Number(e);return Number.isFinite(t)?t:void 0}async function vu(e){return V(mu,void 0,{init:{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}})}var yu=new B({namespace:`zframes:hyperliquid:daystats`,ttlMs:25e3}),bu=new B({namespace:`zframes:hyperliquid:oi`,ttlMs:25e3}),xu=new B({namespace:`zframes:hyperliquid:candles`,ttlMs:55e3,persist:!0}),Su=new B({namespace:`zframes:hyperliquid:funding`,ttlMs:4.5*6e4,persist:!0}),Cu=new B({namespace:`zframes:hyperliquid:funding-comparison`,ttlMs:5*6e4}),wu=e=>e?[...e].sort().join(`,`):`*`,Tu=class{name=`hyperliquid`;capabilities=[`quote-stream`,`day-stats`,`funding-history`,`ohlcv`,`open-interest`,`funding-comparison`];async getFundingComparison(){return Cu.get(`all`,async()=>{let e=await vu({type:`predictedFundings`});if(!Array.isArray(e))throw Error(`hyperliquid predictedFundings: unexpected shape`);let t=[];for(let n of e){if(!Array.isArray(n)||n.length<2)continue;let[e,r]=n;if(typeof e!=`string`||!Array.isArray(r))continue;let i=[];for(let e of r){if(!Array.isArray(e)||e.length<2)continue;let[t,n]=e;if(!n)continue;let r=parseFloat(n.fundingRate);if(!Number.isFinite(r))continue;let a=Number(n.fundingIntervalHours),o=Number.isFinite(a)&&a>0?a:t===`HlPerp`?1:8;i.push({venue:hu[t]??t,rawRate:r,intervalHours:o,annualizedPct:8760/o*r*100})}if(i.length<2)continue;let a=i.map(e=>e.annualizedPct);t.push({coin:e,venues:i,spreadPct:Math.max(...a)-Math.min(...a)})}return t.sort((e,t)=>Math.abs(t.spreadPct)-Math.abs(e.spreadPct)).slice(0,80)})}ws=null;listeners=new Set;reconnectTimer=null;closedByUser=!1;wantedDexes=new Set([``]);subscribedDexes=new Set;mergedMids={};subscribeMids(e,t){this.listeners.add(e);for(let e of t??[])this.wantedDexes.add(gu(e));return this.ensureSocket(),this.subscribeMissingDexes(),()=>{this.listeners.delete(e),this.listeners.size===0&&this.teardown()}}getDayStats(e){return yu.get(wu(e),()=>this.fetchDayStats(e))}async fetchDayStats(e){let t=new Set,n=new Set;if(!e)t.add(``);else for(let r of e)r.endsWith(`:*`)?t.add(r.slice(0,-2)):n.add(r);let r=new Set(t);for(let e of n)r.add(gu(e));let i={};return await Promise.all([...r].map(async e=>{let r={type:`metaAndAssetCtxs`};e&&(r.dex=e);let[a,o]=await vu(r),s=t.has(e);a.universe.forEach((e,t)=>{if(!s&&!n.has(e.name))return;let r=o[t];if(!r)return;let a=Number(r.markPx),c=Number(r.prevDayPx);if(!Number.isFinite(a)||!Number.isFinite(c))return;let l={markPx:a,prevDayPx:c,changePct:c?(a-c)/c*100:0},u=_u(r.funding),d=_u(r.dayNtlVlm),f=_u(r.premium),p=_u(r.oraclePx),m=r.impactPxs?_u(r.impactPxs[0]):void 0,h=r.impactPxs?_u(r.impactPxs[1]):void 0;u!==void 0&&(l.funding=u),d!==void 0&&(l.dayNtlVlm=d),f!==void 0&&(l.premium=f),p!==void 0&&(l.oraclePx=p),m!==void 0&&h!==void 0&&(l.impactPxs=[m,h]),i[e.name]=l})})),i}getOpenInterest(e){return bu.get(wu(e),()=>this.fetchOpenInterest(e))}async fetchOpenInterest(e){let t=new Set,n=new Set;if(!e)t.add(``);else for(let r of e)r.endsWith(`:*`)?t.add(r.slice(0,-2)):n.add(r);let r=new Set(t);for(let e of n)r.add(gu(e));let i=[];return await Promise.all([...r].map(async e=>{let r={type:`metaAndAssetCtxs`};e&&(r.dex=e);let[a,o]=await vu(r),s=t.has(e);a.universe.forEach((e,t)=>{if(!s&&!n.has(e.name))return;let r=o[t];if(!r)return;let a=Number(r.markPx),c=Number(r.openInterest);!Number.isFinite(a)||!Number.isFinite(c)||i.push({symbol:e.name,openInterestUsd:c*a})})})),i.sort((e,t)=>t.openInterestUsd-e.openInterestUsd)}getFundingHistory(e,t){return Su.get(`${[...e].sort().join(`,`)}|${t}`,()=>this.fetchFundingHistory(e,t))}async fetchFundingHistory(e,t){let n=await Promise.all(e.map(async e=>[e,(await vu({type:`fundingHistory`,coin:e,startTime:t})).map(e=>({time:e.time,fundingRate:Number(e.fundingRate)})).filter(e=>Number.isFinite(e.fundingRate)&&Number.isFinite(e.time))]));return Object.fromEntries(n)}getCandles(e,t,n){return xu.get(`${e}|${t}|${n}`,()=>this.fetchCandles(e,t,n))}async fetchCandles(e,t,n){return(await vu({type:`candleSnapshot`,req:{coin:e,interval:t,startTime:n}})).map(e=>({time:e.t,open:Number(e.o),high:Number(e.h),low:Number(e.l),close:Number(e.c),volume:Number(e.v)}))}ensureSocket(){if(this.ws)return;this.closedByUser=!1,this.subscribedDexes=new Set;let e=new WebSocket(pu);this.ws=e,e.onopen=()=>{this.subscribeMissingDexes()},e.onmessage=e=>{let t;try{t=JSON.parse(String(e.data))}catch{return}if(!(t.channel!==`allMids`||!t.data?.mids)){for(let[e,n]of Object.entries(t.data.mids))this.mergedMids[e]=Number(n);for(let e of this.listeners)e(this.mergedMids)}},e.onclose=()=>{this.ws=null,!this.closedByUser&&this.listeners.size>0&&(this.reconnectTimer=setTimeout(()=>this.ensureSocket(),2e3))}}subscribeMissingDexes(){let e=this.ws;if(!(!e||e.readyState!==WebSocket.OPEN))for(let t of this.wantedDexes){if(this.subscribedDexes.has(t))continue;let n={type:`allMids`};t&&(n.dex=t),e.send(JSON.stringify({method:`subscribe`,subscription:n})),this.subscribedDexes.add(t)}}teardown(){this.closedByUser=!0,this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.ws?.close(),this.ws=null,this.subscribedDexes=new Set,this.mergedMids={}}},Eu=`https://mempool.space/api`,Du=new B({namespace:`zframes:mempool:fees`,ttlMs:25e3,persist:!0}),Ou=new B({namespace:`zframes:mempool:state`,ttlMs:12e3,persist:!0}),ku=new B({namespace:`zframes:mempool:blocks`,ttlMs:25e3,persist:!0}),Au=new B({namespace:`zframes:mempool:hashrate`,ttlMs:25*6e4,persist:!0}),ju=new B({namespace:`zframes:mempool:difficulty`,ttlMs:5e4,persist:!0}),Mu=new B({namespace:`zframes:mempool:pools`,ttlMs:4*6e4,persist:!0}),Nu=new B({namespace:`zframes:mempool:lightning`,ttlMs:25*6e4,persist:!0}),Pu=class{name=`mempool`;capabilities=[`btc-fees`,`btc-mempool`,`btc-blocks`,`btc-hashrate`,`btc-difficulty`,`mining-pools`,`lightning-stats`];async getBtcFees(){return Du.get(`latest`,async()=>{let e=await V(`${Eu}/v1/fees/recommended`);if(!e||typeof e.fastestFee!=`number`)throw Error(`mempool fees: unexpected response shape`);return{fastest:e.fastestFee,halfHour:e.halfHourFee,hour:e.hourFee,economy:e.economyFee,minimum:e.minimumFee}})}async getMempoolState(){return Ou.get(`latest`,async()=>{let[e,t]=await Promise.all([V(`${Eu}/mempool`),V(`${Eu}/v1/fees/mempool-blocks`)]);if(!e||typeof e.count!=`number`)throw Error(`mempool state: unexpected response shape`);let n=(Array.isArray(t)?t:[]).map(e=>({medianFee:e.medianFee,feeRange:Array.isArray(e.feeRange)?e.feeRange:[],totalFees:e.totalFees,nTx:e.nTx,blockVSize:e.blockVSize}));return{count:e.count,vsize:e.vsize,totalFee:e.total_fee,projected:n}})}async getBtcBlocks(e=8){return ku.get(String(e),async()=>{let t=await V(`${Eu}/v1/blocks`);if(!Array.isArray(t))throw Error(`mempool blocks: unexpected response shape`);return t.slice(0,e).map(e=>({id:e.id,height:e.height,time:e.timestamp*1e3,txCount:e.tx_count,size:e.size,totalFees:e.extras?.totalFees??0,medianFee:e.extras?.medianFee??0,poolName:e.extras?.pool?.name??`Unknown`,poolSlug:e.extras?.pool?.slug??`unknown`}))})}async getNetworkHashrate(e){return Au.get(e,async()=>{let t=await V(`${Eu}/v1/mining/hashrate/${encodeURIComponent(e)}`);if(!t||!Array.isArray(t.hashrates))throw Error(`mempool hashrate: unexpected response shape`);return{currentHashrate:t.currentHashrate,currentDifficulty:t.currentDifficulty,hashrates:t.hashrates.map(e=>({time:e.timestamp*1e3,hashrate:e.avgHashrate})),difficulty:(t.difficulty??[]).map(e=>({time:e.time*1e3,difficulty:e.difficulty}))}})}async getDifficultyAdjustment(){return ju.get(`latest`,async()=>{let e=await V(`${Eu}/v1/difficulty-adjustment`);if(!e||typeof e.progressPercent!=`number`)throw Error(`mempool difficulty: unexpected response shape`);return{progressPercent:e.progressPercent,difficultyChange:e.difficultyChange,previousRetarget:e.previousRetarget,remainingBlocks:e.remainingBlocks,remainingTimeMs:e.remainingTime,estimatedRetargetDate:e.estimatedRetargetDate,nextRetargetHeight:e.nextRetargetHeight,avgBlockTimeMs:e.timeAvg}})}async getMiningPools(e){return Mu.get(e,async()=>{let t=await V(`${Eu}/v1/mining/pools/${encodeURIComponent(e)}`);if(!t||!Array.isArray(t.pools))throw Error(`mempool pools: unexpected response shape`);let n=t.blockCount||0;return{window:e,totalBlocks:n,pools:t.pools.map(e=>({name:e.name,slug:e.slug,blockCount:e.blockCount,sharePct:n>0?e.blockCount/n*100:0,rank:e.rank}))}})}async getLightningStats(){return Nu.get(`latest`,async()=>{let e=await V(`${Eu}/v1/lightning/statistics/latest`),t=e?.latest;if(!t||typeof t.node_count!=`number`)throw Error(`mempool lightning: unexpected response shape`);return{nodeCount:t.node_count,channelCount:t.channel_count,totalCapacity:t.total_capacity,torNodes:t.tor_nodes,clearnetNodes:t.clearnet_nodes,medCapacity:t.med_capacity,prevNodeCount:e.previous?.node_count,prevChannelCount:e.previous?.channel_count,prevTotalCapacity:e.previous?.total_capacity}})}},Fu=`https://api.gold-api.com/price`,Iu=`https://prices.lbma.org.uk/json`,Lu=`https://publicreporting.cftc.gov/resource/6dca-aqww.json`,Ru=`https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/gold_reserve`,zu=`https://api.coingecko.com/api/v3/coins/markets`,Bu={XAU:{name:`Gold`,lbma:`gold_pm`,cotCode:`088691`,cotMarket:`GOLD - COMMODITY EXCHANGE INC.`,contractSize:100},XAG:{name:`Silver`,lbma:`silver`,cotCode:`084691`,cotMarket:`SILVER - COMMODITY EXCHANGE INC.`,contractSize:5e3},XPT:{name:`Platinum`,lbma:`platinum_pm`,cotCode:`076651`,cotMarket:`PLATINUM - NEW YORK MERCANTILE EXCHANGE`,contractSize:50},XPD:{name:`Palladium`,lbma:`palladium_pm`,cotCode:`075651`,cotMarket:`PALLADIUM - NEW YORK MERCANTILE EXCHANGE`,contractSize:100},HG:{name:`Copper`,lbma:null,cotCode:`085692`,cotMarket:`COPPER- #1 - COMMODITY EXCHANGE INC.`,contractSize:25e3}},Vu=Object.keys(Bu),Hu=[`USD`,`GBP`,`EUR`];function Uu(e){let t=typeof e==`string`?Number(e):e;return typeof t==`number`&&Number.isFinite(t)?t:null}function Wu(e){let t=e?.length?e:Vu,n=new Set,r=[];for(let e of t){let t=e.trim().toUpperCase();Bu[t]&&!n.has(t)&&(n.add(t),r.push(t))}return r}var Gu=new B({namespace:`zframes:metals:spot`,ttlMs:45e3,persist:!1}),Ku=new B({namespace:`zframes:metals:history`,ttlMs:360*6e4,persist:!1}),qu=new Map,Ju=3e3,Yu=new B({namespace:`zframes:metals:cot`,ttlMs:360*6e4,persist:!0}),Xu=new B({namespace:`zframes:metals:reserve`,ttlMs:720*6e4,persist:!0}),Zu=new B({namespace:`zframes:metals:tokenized`,ttlMs:12*6e4,persist:!0});async function Qu(e,t,n){let r=Hu.indexOf(n),i=await V(`${Iu}/${t}.json`,void 0,{timeoutMs:3e4});if(!Array.isArray(i))throw Error(`lbma ${t}: unexpected shape`);let a=[];for(let e of i){let t=Uu(e?.v?.[r]);if(!e?.d||t===null||t<=0)continue;let n=Date.parse(`${e.d}T00:00:00Z`);Number.isFinite(n)&&a.push({time:n,value:t})}if(a.length===0)throw Error(`lbma ${t}: no usable rows`);return a.sort((e,t)=>e.time-t.time),n===`USD`&&qu.set(e,a[a.length-1].value),{symbol:e,currency:n,points:a}}function $u(e,t){let n=Bu[e];if(!n?.lbma)return Promise.reject(Error(`no LBMA fix published for ${e}`));let r=n.lbma;return Ku.get(`${e}:${t}`,async()=>[await Qu(e,r,t)]).then(([e])=>e)}var ed=class{name=`metals`;capabilities=[`metal-spot`,`metal-history`,`metal-positioning`,`gold-reserve`,`tokenized-gold`];async getMetalSpot(e){let t=Wu(e),n=await Promise.all(t.map(e=>Gu.get(e,async()=>{let t=await V(`${Fu}/${e}`,void 0,{timeoutMs:8e3}),n=Uu(t?.price);if(n===null||n<=0)throw Error(`gold-api ${e}: no price`);let r=Date.parse(t?.updatedAt??``);return{symbol:e,name:t?.name||Bu[e].name,price:n,updatedAt:Number.isFinite(r)?r:Date.now()}}).catch(()=>null))),r=t.filter(e=>Bu[e].lbma&&!qu.has(e));if(r.length>0){let e=r.map(e=>$u(e,`USD`).catch(()=>null));await Promise.race([Promise.allSettled(e),new Promise(e=>setTimeout(e,Ju))])}return n.filter(e=>e!==null).map(e=>{let t=qu.get(e.symbol);return t===void 0||t<=0?e:{...e,prevFix:t,changePct:(e.price-t)/t*100}})}async getMetalHistory(e,t=`USD`){let n=t.toUpperCase(),r=Hu.includes(n)?n:`USD`;return(await Promise.all(Wu(e).filter(e=>Bu[e].lbma).map(e=>$u(e,r).catch(()=>null)))).filter(e=>e!==null)}async getMetalPositioning(e){let t=Wu([e])[0]??`XAU`,n=Bu[t];if(!n.cotCode)throw Error(`no CFTC futures market mapped for ${t}`);let r=n.cotCode;return Yu.get(t,async()=>{let e=await V(`${Lu}?$select=${[`report_date_as_yyyy_mm_dd`,`open_interest_all`,`noncomm_positions_long_all`,`noncomm_positions_short_all`,`noncomm_postions_spread_all`,`comm_positions_long_all`,`comm_positions_short_all`,`nonrept_positions_long_all`,`nonrept_positions_short_all`].join(`,`)}&cftc_contract_market_code=${r}&$order=report_date_as_yyyy_mm_dd%20DESC&$limit=520`,void 0,{timeoutMs:2e4});if(!Array.isArray(e))throw Error(`cftc ${t}: unexpected shape`);let i=[];for(let t of e){let e=Date.parse(t?.report_date_as_yyyy_mm_dd??``),n=Uu(t?.open_interest_all);!Number.isFinite(e)||n===null||i.push({time:e,openInterest:n,noncommercialLong:Uu(t?.noncomm_positions_long_all)??0,noncommercialShort:Uu(t?.noncomm_positions_short_all)??0,noncommercialSpread:Uu(t?.noncomm_postions_spread_all)??0,commercialLong:Uu(t?.comm_positions_long_all)??0,commercialShort:Uu(t?.comm_positions_short_all)??0,nonreportableLong:Uu(t?.nonrept_positions_long_all)??0,nonreportableShort:Uu(t?.nonrept_positions_short_all)??0})}if(i.length===0)throw Error(`cftc ${t}: no usable rows`);return i.sort((e,t)=>e.time-t.time),{symbol:t,market:n.cotMarket??t,contractSize:n.contractSize,weeks:i}})}async getGoldReserve(){return Xu.get(`latest`,async()=>{let e=(await V(`${Ru}?sort=-record_date&page%5Bsize%5D=40&fields=record_date,facility_desc,form_desc,location_desc,fine_troy_ounce_qty,book_value_amt`,void 0,{proxied:!0,timeoutMs:2e4}))?.data;if(!Array.isArray(e)||e.length===0)throw Error(`treasury gold reserve: empty response`);let t=e[0]?.record_date,n=Date.parse(`${t}T00:00:00Z`);if(!t||!Number.isFinite(n))throw Error(`treasury gold reserve: no record date`);let r=[];for(let n of e){if(n?.record_date!==t)continue;let e=Uu(n?.fine_troy_ounce_qty);e===null||e<=0||r.push({facility:n.facility_desc??`Unknown facility`,form:n.form_desc??`Gold`,location:n.location_desc??`Unknown location`,ounces:e,bookValueUsd:Uu(n?.book_value_amt)??0})}if(r.length===0)throw Error(`treasury gold reserve: no usable rows`);return r.sort((e,t)=>t.ounces-e.ounces),{asOf:n,totalOunces:r.reduce((e,t)=>e+t.ounces,0),totalBookValueUsd:r.reduce((e,t)=>e+t.bookValueUsd,0),entries:r}})}async getTokenizedGold(){let e=await Zu.get(`markets`,async()=>{let e=await V(`${zu}?vs_currency=usd&ids=pax-gold,tether-gold&price_change_percentage=24h`,void 0,{timeoutMs:12e3});if(!Array.isArray(e)||e.length===0)throw Error(`coingecko tokenized gold: empty response`);return e.map(e=>{let t=Uu(e?.current_price);return!e?.id||t===null||t<=0?null:{id:e.id,symbol:(e.symbol??e.id).toUpperCase(),name:e.name??e.id,price:t,changePct:Uu(e?.price_change_percentage_24h)??0,marketCap:Uu(e?.market_cap)??0,volume24h:Uu(e?.total_volume)??0,ounces:Uu(e?.circulating_supply)??0}}).filter(e=>e!==null).sort((e,t)=>t.marketCap-e.marketCap)}),[t]=await this.getMetalSpot([`XAU`]).catch(()=>[]);return t?e.map(e=>({...e,premiumPct:(e.price-t.price)/t.price*100})):e}},td={coindesk:{url:`https://www.coindesk.com/arc/outboundfeeds/rss/`,source:`CoinDesk`},cointelegraph:{url:`https://cointelegraph.com/rss`,source:`Cointelegraph`},decrypt:{url:`https://decrypt.co/feed`,source:`Decrypt`},cnbc:{url:`https://www.cnbc.com/id/20910258/device/rss/rss.html`,source:`CNBC Markets`},nasdaq:{url:`https://www.nasdaq.com/feed/rssoutbound?category=Markets`,source:`Nasdaq`}},nd=e=>{let t=`(${e.join(` OR `)}) stock`;return`https://news.google.com/rss/search?q=${encodeURIComponent(t)}&hl=en-US&gl=US&ceid=US:en`},rd={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`,nbsp:` `};function id(e){return e.replace(/&(#x?[0-9a-f]+|[a-z]+);/gi,(e,t)=>{let n=t.toLowerCase();if(rd[n])return rd[n];if(t[0]===`#`){let n=t[1]===`x`||t[1]===`X`?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return Number.isFinite(n)?String.fromCodePoint(n):e}return e})}var ad=e=>e.replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g,`$1`);function od(e){return id(ad(e).replace(/<[^>]+>/g,` `)).replace(/\s+/g,` `).trim()}function sd(e,t){let n=e.match(RegExp(`<${t}(?:\\s[^>]*)?>([\\s\\S]*?)</${t}>`,`i`));return n?n[1]:void 0}function cd(e){let t=[...e.matchAll(/<link\b[^>]*\bhref="([^"]+)"[^>]*>/gi)];if(t.length>0)return id((t.find(e=>/rel="alternate"/i.test(e[0]))??t.find(e=>!/\brel=/i.test(e[0]))??t[0])[1]).trim();let n=sd(e,`link`);return n?id(ad(n)).trim():void 0}function ld(e,t){let n=e.match(RegExp(`\\b${t}\\s*=\\s*"([^"]*)"`,`i`));return n?id(n[1]).trim():void 0}var ud=e=>!!e&&/^https:\/\//i.test(e);function dd(e){let t=e.match(/<media:thumbnail\b[^>]*>/i)?.[0];if(t){let e=ld(t,`url`);if(ud(e))return e}for(let t of e.matchAll(/<media:content\b[^>]*>/gi)){let e=ld(t[0],`medium`),n=ld(t[0],`type`),r=e===`image`||!e&&!n?.match(/^(audio|video)\//i),i=ld(t[0],`url`);if(r&&ud(i))return i}for(let t of e.matchAll(/<enclosure\b[^>]*>/gi)){if(!ld(t[0],`type`)?.startsWith(`image/`))continue;let e=ld(t[0],`url`);if(ud(e))return e}let n=sd(e,`content:encoded`)??sd(e,`description`)??sd(e,`content`)??sd(e,`summary`),r=n?ad(n).match(/<img\b[^>]*\bsrc="([^"]+)"/i):null;if(r){let e=id(r[1]).trim();if(ud(e))return e}}function fd(e){let t=sd(e,`pubDate`)??sd(e,`published`)??sd(e,`updated`)??sd(e,`dc:date`);if(!t)return;let n=Date.parse(ad(t).trim());return Number.isFinite(n)?n:void 0}function pd(e,t,n){let r=[...e.matchAll(/<(item|entry)\b[\s\S]*?<\/\1>/gi)].map(e=>e[0]),i=[];for(let e of r){let n=sd(e,`title`),r=cd(e);if(!n||!r)continue;let a=od(n);if(!a)continue;let o=sd(e,`description`)??sd(e,`summary`)??sd(e,`content`),s=o?od(o).slice(0,280):void 0,c=fd(e),l=dd(e);i.push({title:a,url:r,source:t,...s?{summary:s}:{},...c?{publishedAt:c}:{},...l?{imageUrl:l}:{}})}return i.some(e=>e.publishedAt!==void 0)&&i.sort((e,t)=>(t.publishedAt??0)-(e.publishedAt??0)),i.slice(0,n)}var md=class{name=`news`;capabilities=[`news`];async getNews({feed:e,symbols:t,limit:n=12}){if(e===`stocks`){let e=(t??[]).map(e=>(e.split(`:`).pop()??``).toUpperCase()).filter(Boolean);return e.length===0?[]:pd(await Ls(nd(e),{proxied:!0,timeoutMs:12e3}),`Google News`,n)}let r=td[e];if(!r)throw Error(`news: unknown feed "${e}"`);return pd(await Ls(r.url,{proxied:!0,timeoutMs:12e3}),r.source,n)}},hd=`https://markets.newyorkfed.org/api/rates/all/latest.json`,gd={SOFR:`SOFR`,SOFRAI:`SOFR averages`,EFFR:`Effective fed funds`,OBFR:`Overnight bank funding`,TGCR:`Tri-party repo`,BGCR:`Broad general collateral`},_d=[`EFFR`,`SOFR`,`TGCR`,`BGCR`,`OBFR`,`SOFRAI`],vd=new B({namespace:`zframes:nyfed:rates`,ttlMs:12*6e4,persist:!0,revive:e=>Array.isArray(e)?e:null});function yd(e){let t=Number(e);return Number.isFinite(t)?t:null}function bd(e,t){let n=_d.indexOf(e.code),r=_d.indexOf(t.code);return(n===-1?99:n)-(r===-1?99:r)}var xd=class{name=`nyfed`;capabilities=[`reference-rates`];async getReferenceRates(){return vd.get(`latest`,async()=>{let e=await V(hd);if(!Array.isArray(e?.refRates))throw Error(`ny fed rates: unexpected response shape`);return e.refRates.map(e=>{let t=String(e.type??``),n=yd(e.percentRate??e.average30day);if(!t||!e.effectiveDate||n===null)return null;let r={code:t,label:gd[t]??t,date:e.effectiveDate,rate:n,source:`New York Fed`},i=yd(e.volumeInBillions),a=yd(e.targetRateFrom),o=yd(e.targetRateTo),s=yd(e.average30day),c=yd(e.average90day),l=yd(e.average180day);return i!==null&&(r.volumeInBillions=i),a!==null&&(r.targetRateFrom=a),o!==null&&(r.targetRateTo=o),s!==null&&(r.average30Day=s),c!==null&&(r.average90Day=c),l!==null&&(r.average180Day=l),r}).filter(e=>e!==null).sort(bd)})}},Sd=`https://www.financialresearch.gov/financial-stress-index/data/fsi.csv`,Cd=new B({namespace:`zframes:ofr:fsi`,ttlMs:60*6e4}),wd=[[2,`Credit`],[3,`Equity valuation`],[4,`Safe assets`],[5,`Funding`],[6,`Volatility`]];function Td(e){let t=Number(e);return Number.isFinite(t)?t:null}function Ed(e){let t=e.split(/\r?\n/),n=[],r=null;for(let e=1;e<t.length;e++){let i=t[e].split(`,`);if(i.length<7)continue;let a=i[0],o=Td(i[1]),s=Date.parse(`${a}T00:00:00Z`);if(!a||o===null||!Number.isFinite(s))continue;let c={time:s,date:a,value:o},l=Td(i[2]),u=Td(i[3]),d=Td(i[4]),f=Td(i[5]),p=Td(i[6]);l!==null&&(c.credit=l),u!==null&&(c.equityValuation=u),d!==null&&(c.safeAssets=d),f!==null&&(c.funding=f),p!==null&&(c.volatility=p),n.push(c),r=i}if(!r||n.length===0)throw Error(`ofr fsi: empty or unparseable CSV`);let i=n[n.length-1],a=wd.map(([e,t])=>({label:t,value:Td(r[e])??0}));return{value:i.value,date:i.date,categories:a,trend:n.slice(-90),source:`OFR`}}var Dd=class{name=`ofr`;capabilities=[`financial-stress`];async getFinancialStress(){return Cd.get(`latest`,()=>Ls(Sd,{proxied:!0}).then(Ed))}},Od={A:1090872,AAPL:320193,ABBV:1551152,ABEV:1565025,ABNB:1559720,ABT:1800,ACGL:947484,ACN:1467373,ADBE:796343,ADI:6281,ADM:7084,ADP:8670,ADSK:769397,AEE:1002910,AEM:2809,AEP:4904,AFL:4977,AIG:5272,AJG:354190,ALAB:1736297,ALC:1167379,ALL:899051,ALNY:1178670,AMAT:6951,AMD:2488,AME:1037868,AMGN:318154,AMP:820027,AMRZ:2035989,AMT:1053507,AMX:1129137,AMZN:1018724,ANET:1596532,AON:315293,APD:2969,APH:820313,APO:1858681,APP:1751008,ARES:1176948,ARGX:1697862,ARM:1973239,ASML:937966,ASTS:1780312,ASX:1122411,ATEYY:1158838,ATO:731802,AU:1973832,AVGO:1730168,AXON:1069183,AXP:4962,AZN:901832,AZO:866787,B:756894,BA:12927,BABA:1577552,BAC:70858,BAESY:895564,BAM:1937926,BBD:1160330,BBVA:842180,BCS:312069,BDX:10795,BE:1664703,BHP:811809,BIDU:1329099,BIIB:875045,BKNG:1075531,BKR:1701605,BLK:2012383,BMO:927971,BMWKY:1446250,BMY:14272,BN:1001085,BNS:9631,BNY:1390777,BP:313807,"BRK-A":1067983,"BRK-B":1067983,BSBR:1471055,BSX:885725,BTI:1303523,BUD:1668717,BX:1393818,C:831001,CAH:721371,CARR:1783180,CAT:18230,CB:896159,CBOE:1374310,CBRE:1138118,CBRS:2021728,CCEP:1650107,CCI:1051470,CCJ:1009001,CCL:815097,CDNS:813672,CEG:1868275,CHT:1132924,CI:1739940,CIEN:936395,CKHGF:1469059,CL:21665,CLS:1030894,CM:1045520,CMCSA:1166691,CME:1156375,CMG:1058090,CMI:26172,CNC:1071739,CNI:16868,CNQ:1017413,COF:927628,COHR:820318,COIN:1679788,COP:1163165,COR:1140859,COST:909832,CP:16875,CPRT:900075,CQP:1383650,CRDO:1807794,CRH:849395,CRM:1108524,CRWD:1535527,CRWV:1769628,CSCO:858877,CSLLY:1274152,CSX:277948,CTAS:723254,CTVA:1755672,CVE:1475260,CVNA:1690820,CVS:64803,CVX:93410,CYATY:2070829,D:715957,DAL:27904,DASH:1792789,DB:1159508,DDOG:1561550,DE:315189,DELL:1571996,DEO:835403,DHI:882184,DHR:313616,DIA:1041130,DIS:1744489,DLMAY:2073893,DLR:1297996,DOV:29905,DTE:936340,DTEGY:946770,DUK:1326160,DVN:1090012,E:1002242,EA:712515,EBAY:1065088,EC:1444406,ECL:31462,ED:1047862,EIX:827052,EL:1001250,ELV:1156039,EME:105634,EMR:32604,ENB:895728,EOG:821189,EONGY:1136808,EPD:1061219,EQIX:1101239,EQNR:1140625,EQT:33213,ERIC:717826,ESLT:1027664,ET:1276187,ETN:1551182,ETR:65984,EW:1099800,EXC:1109357,EXR:1289490,F:37996,FANG:1539838,FAST:815556,FCX:831259,FDX:1048911,FER:1468522,FERG:2011641,FISV:798354,FITB:35527,FIX:1035983,FLEX:866374,FMX:1061736,FNV:1456346,FOX:1754301,FOXA:1754301,FRFHF:915191,FSLR:1274494,FTNT:1262039,FTS:1666175,GALDY:2021390,GD:40533,GE:40545,GEHC:1932393,GEV:1996810,GFI:1172724,GFS:1709048,GILD:882095,GLD:1222333,GLW:24741,GM:1467858,GOOG:1652044,GOOGL:1652044,GRMN:1121788,GS:886982,GSK:1131399,GWLIF:850918,GWW:277135,HAL:45012,HBAN:49196,HCA:860730,HD:354950,HDB:1144967,HEI:46619,HIG:874766,HLN:1900304,HLT:1585689,HMC:715153,HON:773840,HOOD:1783879,HPE:1645590,HSBC:1089113,HSY:47111,HTHIY:47710,HUM:49071,HWM:4281,IBKR:1381197,IBM:51143,IBN:1103838,ICE:1571949,IDXX:874716,IFNNY:1107457,IMO:49938,INFY:1067491,ING:1039765,INTC:50863,INTU:896878,IQV:1478242,IR:1699150,IRM:1020569,ISRG:1035267,ITUB:1132597,ITW:49826,IX:1070304,JBL:898293,JCI:833444,JD:1549802,JHPCY:2071868,JNJ:200406,JPM:19617,KB:1445930,KBGGY:1535759,KDP:1418135,KEYS:1601046,KGC:701818,KKR:1404912,KLAC:319201,KMB:55785,KMI:1506307,KO:21344,KR:56873,KVUE:1944048,KXIAY:2053383,LHX:202058,LIN:1707925,LITE:1633978,LLY:59478,LMT:936468,LNG:3570,LOW:60667,LRCX:707549,LSEGY:1842726,LVS:1300514,LYG:1160106,LYV:1335258,MA:1141391,MAR:1048286,MCD:63908,MCHP:827054,MCK:927653,MCO:1059556,MDLN:2046386,MDLZ:1103982,MDT:1613103,MELI:1099590,MET:1099219,META:1326801,MFC:1086888,MFG:1335730,MGCLY:2039784,MLM:916076,MMM:66740,MNST:865752,MO:764180,MPC:1510295,MPLX:1552e3,MPWR:1280452,MRK:310158,MRSH:62709,MRVL:1835632,MS:895421,MSCI:1408198,MSFT:789019,MSI:68505,MSTR:1050446,MT:1243429,MTB:36270,MTZ:15615,MU:723125,MUFG:67088,NBIS:1513845,NDAQ:1120193,NEE:753308,NEM:1164727,NET:1477333,NFLX:1065280,NGG:1004315,NKE:320187,NOC:1133421,NOK:924613,NOW:1373715,NSC:702165,NTAP:1002047,NTES:1110646,NTR:1725964,NTRA:1604821,NTRS:73124,NU:1691493,NUE:73309,NVDA:1045810,NVO:353278,NVS:1114448,NWG:844150,NWS:1564708,NWSA:1564708,NXPI:1413447,O:726728,ODFL:878927,OKE:1039684,ON:1097864,ORCL:1341439,ORLY:898173,OXY:797468,PANW:1327567,PAYX:723531,PBA:1546066,PBR:1119639,PCAR:75362,PCG:1004980,PDD:1737806,PEG:788784,PEP:77476,PFE:78003,PG:80424,PGR:80661,PH:76334,PLD:1045609,PLTR:1321655,PM:1413329,PNC:713676,PRU:1137774,PSA:1393311,PSX:1534701,PUK:1116578,PWR:1050915,PYPL:1633917,Q:2058873,QCOM:804328,QQQ:1067839,QSR:1618756,RACE:1648416,RBLX:1315098,RCL:884887,RDDT:1713445,REGN:872589,RELX:929869,RIO:863064,RJF:720005,RKLB:1819994,RKT:1805284,RMD:943819,ROK:1024478,ROP:882835,ROST:745732,RPRX:1802768,RSG:1060391,RSHGY:1447391,RTNTF:887028,RTX:101829,RVMD:1628171,RY:1000275,RYAAY:1038683,SAN:891478,SAP:1000184,SATS:1415404,SBUX:829224,SCCO:1001838,SCHW:316709,SCMWY:1069336,SE:1703399,SHEL:1306965,SHG:1263043,SHOP:1594805,SHW:89800,SLB:87347,SLF:1097362,SLV:1330568,SMERY:1830056,SMFG:1022837,SNDK:2023554,SNHIY:2098326,SNOW:1640147,SNPS:883241,SNY:1121404,SO:92122,SONY:313838,SPG:1063761,SPGI:64040,SPOT:1639920,SPY:884394,SRE:1032208,STLD:1022671,STM:932787,STT:93751,STX:1137789,SU:311337,SUNB:2083785,SYK:310764,SYY:96021,T:732717,TAK:1395064,TCOM:1269238,TD:947263,TDG:1260221,TECK:886986,TEL:1385157,TER:97210,TEVA:818686,TFC:92230,TGT:27419,TJX:109198,TKO:1973266,TM:1094517,TMO:97745,TMUS:1283699,TPR:1116132,TRGP:1389170,TRI:1075124,TRMOY:2071881,TRP:1232384,TRV:86312,TS:1190723,TSLA:1318605,TT:1466258,TTE:879764,TTWO:946581,TWLO:1447669,TXN:97476,TYHOY:2018139,UA:1336917,UAA:1336917,UAL:100517,UBER:1543151,UBS:1610520,UI:1511737,UL:217410,UMC:1033767,UNH:731766,UNP:100885,UPS:1090727,URI:1067701,USB:36104,V:1403161,VALE:917851,VG:2007855,VICI:1705696,VIK:1745201,VLO:1035002,VMC:1396009,VOD:839923,VRT:1674101,VRTX:875320,VST:1692819,VTR:740260,VZ:732712,WAB:943452,WAT:1000697,WBD:1437107,WCN:1318220,WDAY:1327811,WDC:106040,WEC:783325,WELL:766704,WFC:72971,WM:823768,WMB:107263,WMT:104169,WPM:1323404,XEL:72903,XOM:34088,XYZ:1512673,YUM:1041061,ZM:1585521,ZTS:1555280};function kd(e){return String(e).replace(/\D/g,``).padStart(10,`0`)}function Ad(e){let t=e.trim(),n=/^cik[-\s]?(\d{1,10})$/i.exec(t)??/^(\d{1,10})$/.exec(t);if(n)return n[1].padStart(10,`0`);let r=Od[(t.includes(`:`)?t.slice(t.lastIndexOf(`:`)+1):t).toUpperCase().replace(/[^A-Z0-9.-]/g,``)];return r===void 0?null:kd(r)}var jd=e=>`https://data.sec.gov/submissions/CIK${e}.json`,Md=e=>`https://data.sec.gov/api/xbrl/companyfacts/CIK${e}.json`,Nd=15*6e4,Pd=new B({namespace:`zframes:sec:filings`,ttlMs:Nd}),Fd=new B({namespace:`zframes:sec:facts`,ttlMs:Nd});function Id(e,t,n){let r=`https://www.sec.gov/Archives/edgar/data/${String(Number(e))}/${t.replace(/-/g,``)}`;return n?`${r}/${n}`:`${r}/`}var Ld=[{label:`Revenue`,unit:`USD`,taxonomy:`us-gaap`,kind:`flow`,concepts:[`RevenueFromContractWithCustomerExcludingAssessedTax`,`Revenues`,`SalesRevenueNet`]},{label:`Net income`,unit:`USD`,taxonomy:`us-gaap`,kind:`flow`,concepts:[`NetIncomeLoss`]},{label:`Total assets`,unit:`USD`,taxonomy:`us-gaap`,kind:`instant`,concepts:[`Assets`]},{label:`Shareholders' equity`,unit:`USD`,taxonomy:`us-gaap`,kind:`instant`,concepts:[`StockholdersEquity`]},{label:`Diluted EPS`,unit:`USD/shares`,taxonomy:`us-gaap`,kind:`flow`,concepts:[`EarningsPerShareDiluted`,`EarningsPerShareBasic`]},{label:`Shares outstanding`,unit:`shares`,taxonomy:`dei`,kind:`instant`,concepts:[`EntityCommonStockSharesOutstanding`]}];function Rd(e){return e.fy?e.fp===`FY`?`FY${e.fy}`:`${e.fp??``} ${e.fy}`.trim():e.end??``}function zd(e,t){let n=e.filter(e=>e.end&&e.form&&Number.isFinite(e.val));return(t===`flow`&&n.some(e=>e.fp===`FY`)?n.filter(e=>e.fp===`FY`):n).reduce((e,t)=>!e||t.end>e.end?t:e,null)}function Bd(e){if(!e)return[];let t=[];for(let n of Ld){let r=e[n.taxonomy];if(!r)continue;let i=null;for(let e of n.concepts){let t=r[e]?.units?.[n.unit];if(!t?.length)continue;let a=zd(t,n.kind);a&&(!i||a.end>i.end)&&(i=a)}i&&t.push({label:n.label,value:i.val,unit:n.unit,end:i.end,fiscalPeriod:Rd(i),form:i.form})}return t}var Vd=class{contact;name=`sec`;capabilities=[`filings`,`fundamentals`];constructor(e){this.contact=e}nodeInit(){return this.contact&&typeof document>`u`?{init:{headers:{"User-Agent":`zframes (${this.contact})`}}}:void 0}async getCompanyFacts(e){let t=Ad(e);if(!t)throw Error(`sec: unknown ticker "${e}" — not in the bundled map; pass a CIK (e.g. "320193") instead`);return Fd.get(t,()=>this.fetchCompanyFacts(t))}async fetchCompanyFacts(e){let t=await V(Md(e),void 0,{proxied:!0,...this.nodeInit()}),n=Bd(t.facts);if(n.length===0)throw Error(`sec companyfacts: no headline metrics found`);return{cik:kd(t.cik??e),entityName:t.entityName??``,metrics:n}}async getCompanyFilings(e){let t=Ad(e);if(!t)throw Error(`sec: unknown ticker "${e}" — not in the bundled map; pass a CIK (e.g. "320193") instead`);return Pd.get(t,()=>this.fetchFilings(t))}async fetchFilings(e){let t=await V(jd(e),void 0,this.nodeInit()),n=t.filings?.recent;if(!n||!Array.isArray(n.accessionNumber))throw Error(`sec submissions: unexpected response shape`);let r=n.accessionNumber.length,i=[];for(let t=0;t<r;t++){let r=n.accessionNumber[t],a=n.form?.[t],o=n.filingDate?.[t];if(!r||!a||!o)continue;let s=n.reportDate?.[t],c=n.primaryDocDescription?.[t],l=n.items?.[t];i.push({form:a,filingDate:o,accessionNumber:r,url:Id(e,r,n.primaryDocument?.[t]),...s?{reportDate:s}:{},...c?{description:c}:{},...l?{items:l}:{}})}return{cik:kd(t.cik??e),name:t.name??``,tickers:t.tickers??[],exchanges:t.exchanges??[],filings:i,...t.sic?{sic:t.sic}:{},...t.sicDescription?{sicDescription:t.sicDescription}:{},...t.category?{category:t.category}:{},...t.fiscalYearEnd?{fiscalYearEnd:t.fiscalYearEnd}:{}}}},Hd=`https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/avg_interest_rates?sort=-record_date&page%5Bsize%5D=20&format=json`,Ud=e=>`https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/debt_to_penny?sort=-record_date&page%5Bsize%5D=${e}&format=json`,Wd=e=>`https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v1/accounting/od/auctions_query?sort=-auction_date&filter=bid_to_cover_ratio:gt:0&fields=auction_date,security_type,security_term,high_yield,high_discnt_rate,high_investment_rate,bid_to_cover_ratio,offering_amt,total_accepted&page%5Bsize%5D=${e}&format=json`,Gd=e=>`https://home.treasury.gov/resource-center/data-chart-center/interest-rates/pages/xml?data=daily_treasury_yield_curve&field_tdr_date_value_month=${e}`,Kd=180*6e4,qd=new B({namespace:`zframes:treasury:yield-curve`,ttlMs:Kd,persist:!0}),Jd=new B({namespace:`zframes:treasury:avg-rates`,ttlMs:Kd,persist:!0}),Yd=new B({namespace:`zframes:treasury:national-debt`,ttlMs:Kd,persist:!0}),Xd=new B({namespace:`zframes:treasury:auctions`,ttlMs:Kd,persist:!0}),Zd=[[`BC_1MONTH`,`1M`,1],[`BC_2MONTH`,`2M`,2],[`BC_3MONTH`,`3M`,3],[`BC_4MONTH`,`4M`,4],[`BC_6MONTH`,`6M`,6],[`BC_1YEAR`,`1Y`,12],[`BC_2YEAR`,`2Y`,24],[`BC_3YEAR`,`3Y`,36],[`BC_5YEAR`,`5Y`,60],[`BC_7YEAR`,`7Y`,84],[`BC_10YEAR`,`10Y`,120],[`BC_20YEAR`,`20Y`,240],[`BC_30YEAR`,`30Y`,360]];function Qd(e){let t=Number(e);return Number.isFinite(t)?t:null}function $d(e){return`${e.getUTCFullYear()}${String(e.getUTCMonth()+1).padStart(2,`0`)}`}function ef(e){let t=e.match(/<m:properties>[\s\S]*?<\/m:properties>/g);if(!t?.length)return null;let n=null;for(let e of t){let t=/<d:NEW_DATE[^>]*>([^<]+)<\/d:NEW_DATE>/.exec(e);if(!t)continue;let r=t[1].slice(0,10);(!n||r>n.date)&&(n={date:r,raw:e})}if(!n)return null;let r=[];for(let[e,t,i]of Zd){let a=RegExp(`<d:${e}[^>]*>([^<]*)</d:${e}>`).exec(n.raw),o=a?Number(a[1]):NaN;Number.isFinite(o)&&r.push({label:t,months:i,rate:o})}return r.length?{date:n.date,points:r}:null}var tf=class{name=`treasury`;capabilities=[`treasury-rates`,`yield-curve`,`treasury-auctions`,`national-debt`];async getYieldCurve(){return qd.get(`latest`,()=>this.fetchYieldCurve())}async fetchYieldCurve(){let e=new Date;for(let t=0;t<=1;t++){let n=ef(await Ls(Gd($d(new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()-t,1)))),{proxied:!0,timeoutMs:15e3}).catch(()=>``));if(n)return n}throw Error(`treasury yield curve: no recent data`)}async getTreasuryAverageRates(){return Jd.get(`latest`,()=>this.fetchTreasuryAverageRates())}async fetchTreasuryAverageRates(){let e=await V(Hd,void 0,{proxied:!0});if(!Array.isArray(e?.data))throw Error(`treasury average rates: unexpected response shape`);let t=e.data.find(e=>e.record_date)?.record_date;return t?e.data.filter(e=>e.record_date===t).map(e=>{let n=Qd(e.avg_interest_rate_amt);return n===null||!e.security_type_desc||!e.security_desc?null:{date:t,securityType:e.security_type_desc,security:e.security_desc,rate:n}}).filter(e=>e!==null):[]}async getNationalDebt(e=180){return Yd.get(String(e),()=>this.fetchNationalDebt(e))}async fetchNationalDebt(e){let t=await V(Ud(Math.max(2,Math.min(e,400))),void 0,{proxied:!0});if(!Array.isArray(t?.data)||t.data.length===0)throw Error(`treasury debt to the penny: unexpected response shape`);let n=[];for(let e=t.data.length-1;e>=0;e--){let r=t.data[e],i=Qd(r.tot_pub_debt_out_amt),a=Date.parse(`${r.record_date}T00:00:00Z`);if(!r.record_date||i===null||!Number.isFinite(a))continue;let o={time:a,date:r.record_date,total:i},s=Qd(r.debt_held_public_amt),c=Qd(r.intragov_hold_amt);s!==null&&(o.heldByPublic=s),c!==null&&(o.intragovernmental=c),n.push(o)}if(n.length===0)throw Error(`treasury debt to the penny: no usable rows`);let r=t.data[0];return{date:r.record_date??n[n.length-1].date,total:Qd(r.tot_pub_debt_out_amt)??n[n.length-1].total,heldByPublic:Qd(r.debt_held_public_amt)??0,intragovernmental:Qd(r.intragov_hold_amt)??0,trend:n}}async getTreasuryAuctions(e=8){return Xd.get(String(e),()=>this.fetchTreasuryAuctions(e))}async fetchTreasuryAuctions(e){let t=await V(Wd(Math.max(1,Math.min(e,30))),void 0,{proxied:!0});if(!Array.isArray(t?.data))throw Error(`treasury auctions: unexpected response shape`);return t.data.map(e=>{if(!e.auction_date||!e.security_type)return null;let t=Qd(e.high_yield)??Qd(e.high_investment_rate);return{auctionDate:e.auction_date,securityType:e.security_type,securityTerm:e.security_term??``,rate:t,bidToCover:Qd(e.bid_to_cover_ratio),offeringAmount:Qd(e.offering_amt),totalAccepted:Qd(e.total_accepted)}}).filter(e=>e!==null)}};function nf(){return[new Tu,new El,new nc,new Jc,new il,new fu,new Oc,new $c,new oc,new Ll,new Pl,new jl,new xd,new tf,new Fc,new Vd,new Ql,new Dd,new ou,new ed,new md,new Pu,new Gl,new Cc]}var rf=`(prefers-reduced-motion: reduce)`,af=`(prefers-reduced-data: reduce)`,of=`(pointer: coarse) and (max-width: 768px)`;function sf(){if(typeof window>`u`)return!1;let e=navigator;return!!(e.connection?.saveData||window.matchMedia(af).matches||(e.deviceMemory??8)<=4||(e.hardwareConcurrency??8)<=4||window.matchMedia(of).matches)}function cf(e,t){let n=e.map(e=>window.matchMedia(e));for(let e of n)e.addEventListener(`change`,t);return()=>{for(let e of n)e.removeEventListener(`change`,t)}}var lf=()=>!1,uf=e=>cf([af,of],e);function df(){return(0,h.useSyncExternalStore)(uf,sf,lf)}var ff=()=>typeof window<`u`&&window.matchMedia(rf).matches,pf=e=>cf([rf],e);function mf(){return(0,h.useSyncExternalStore)(pf,ff,lf)}var hf=`modulepreload`,gf=function(e){return`/`+e},_f={},H=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=gf(t,n),t=s(t),t in _f)return;_f[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:hf,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},vf=(0,h.lazy)(()=>H(()=>import(`./scene-DgXljRUS.js`),__vite__mapDeps([0,1,2]))),yf=`/unicornStudio.umd.mjs`,bf=`invert(1) hue-rotate(180deg) saturate(1.25)`,xf=`opacity 0.5s var(--zf-ease-out), filter 0.5s var(--zf-ease-out)`,Sf=e=>Math.min(.42,e*2.4),Cf=242,wf=242,Tf=(e,t)=>{let n=((e-t)%360+360)%360;return n>180?n-360:n},Ef=90,Df=e=>Math.round(e/Ef*1e3)/1e3;function Of({background:e,surface:t=`dark`,active:n=!1,thinking:r=!1,accentHue:i=Cf,accentSat:a=Ef,sceneHue:o=wf}){let s=df(),c=t===`light`?(0,z.jsx)(`div`,{"aria-hidden":!0,style:{position:`fixed`,inset:0,zIndex:0,pointerEvents:`none`,background:`linear-gradient(160deg, #f4f5f8, #e6e8f0)`}}):null;if(e.type===`color`||e.type===`gradient`)return(0,z.jsx)(`div`,{"aria-hidden":!0,style:{position:`fixed`,inset:0,zIndex:0,pointerEvents:`none`,background:e.type===`color`?e.color:`linear-gradient(${e.gradientAngle}deg, ${e.gradientFrom}, ${e.gradientTo})`}});if(e.type===`image`){if(!e.imageUrl)return c;let t=e.imageBlur;return(0,z.jsxs)(`div`,{"aria-hidden":!0,style:{position:`fixed`,inset:0,zIndex:0,overflow:`hidden`,pointerEvents:`none`},children:[(0,z.jsx)(`img`,{src:e.imageUrl,alt:``,style:{position:`absolute`,inset:0,width:`100%`,height:`100%`,objectFit:e.imageFit,filter:t>0?`blur(${t}px)`:void 0,transform:t>0?`scale(1.08)`:void 0}}),(0,z.jsx)(`div`,{style:{position:`absolute`,inset:0,background:`rgba(0,0,0,${e.overlayOpacity})`}})]})}if(e.type!==`unicorn`||!e.projectId||s)return c;let l=Tf(i,o),u=Df(a),d=[l===0?``:`hue-rotate(${l}deg)`,u===1?``:`saturate(${u})`].filter(Boolean).join(` `),f=d||`none`,p=d?`${d} ${bf}`:bf;return(0,z.jsx)(`div`,{"aria-hidden":!0,style:{position:`fixed`,inset:0,zIndex:0,overflow:`hidden`,pointerEvents:`none`},children:(0,z.jsx)(`div`,{style:{position:`absolute`,inset:0,opacity:n?Sf(e.opacity):e.opacity,filter:n?p:f,transition:xf,willChange:n||r?`opacity, filter`:`auto`},children:(0,z.jsx)(`div`,{className:r?`zf-bg-hue`:void 0,style:{position:`absolute`,inset:0},children:(0,z.jsx)(`div`,{className:r?`zf-bg-breathe`:void 0,style:{position:`absolute`,inset:0},children:(0,z.jsx)(h.Suspense,{fallback:null,children:(0,z.jsx)(vf,{projectId:e.projectId,width:`100vw`,height:`100vh`,scale:e.scale,dpi:e.dpi,sdkUrl:yf},e.projectId)})})})})})}function kf({currentTitle:e}){let[t,n]=(0,h.useState)(null),[r,i]=(0,h.useState)(!1),[a,o]=(0,h.useState)(null);(0,h.useEffect)(()=>{let e=!1;return fetch(Ts,{cache:`no-store`}).then(e=>e.ok?e.json():null).then(t=>{if(e||!t||typeof t!=`object`)return;let r=t;r.canSwitch===!0&&Array.isArray(r.dashboards)&&n({current:typeof r.current==`string`?r.current:null,dashboards:r.dashboards})}).catch(()=>{}),()=>{e=!0}},[]),(0,h.useEffect)(()=>{if(!r)return;let e=e=>{e.key===`Escape`&&i(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r]);let s=(0,z.jsx)(`span`,{className:`body-sm text-soft`,children:e});if(!t||t.dashboards.length<=1)return s;async function c(e){if(!(!t||a)){if(e===t.current){i(!1);return}o(e);try{let t=await fetch(Es,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({name:e})});if(!t.ok)throw Error(`HTTP ${t.status}`);window.location.reload()}catch(e){console.error(`zframes: failed to switch dashboard`,e),window.alert("Couldn't switch dashboard — is `zframes serve` still running?"),o(null)}}}let l=`hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%)`;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{type:`button`,onClick:()=>i(!0),"aria-haspopup":`dialog`,"aria-expanded":r,className:`body-sm text-soft hover:text-strong flex items-center gap-1 rounded-md border border-white/[0.08] px-1.5 py-0.5 outline-none`,children:[e,(0,z.jsx)(`span`,{"aria-hidden":!0,className:`text-[0.7em] opacity-70`,children:`▾`})]}),r&&(0,g.createPortal)((0,z.jsx)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-label":`Choose a dashboard`,onClick:e=>{e.target===e.currentTarget&&i(!1)},className:`fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-6 backdrop-blur-sm`,children:(0,z.jsxs)(`div`,{className:`w-full max-w-2xl rounded-2xl border border-white/[0.08] bg-neutral-950/95 p-5 shadow-2xl`,children:[(0,z.jsxs)(`div`,{className:`mb-4 flex items-center justify-between`,children:[(0,z.jsx)(`h2`,{className:`font-dmsans text-strong text-base font-extrabold`,children:`Your dashboards`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>i(!1),"aria-label":`Close`,className:`text-soft hover:text-strong rounded-md px-2 py-0.5 text-lg leading-none outline-none`,children:`×`})]}),(0,z.jsx)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2`,children:t.dashboards.map(e=>{let n=e.name===t.current;return(0,z.jsxs)(`button`,{type:`button`,disabled:a!==null,onClick:()=>void c(e.name),style:n?{borderColor:`${l} 60%)`}:void 0,className:`flex flex-col items-start gap-1 rounded-xl border p-4 text-left outline-none transition active:scale-[0.98] active:duration-0 disabled:opacity-50 ${n?`bg-white/[0.04]`:`border-white/[0.08] hover:border-white/25 hover:bg-white/[0.03]`}`,children:[(0,z.jsx)(`span`,{className:`font-dmsans text-strong text-sm font-bold`,children:e.title??e.name}),(0,z.jsx)(`span`,{className:`caption text-soft font-mono`,children:e.name}),(0,z.jsxs)(`span`,{className:`mt-1 flex flex-wrap gap-1.5`,children:[e.isDefault&&(0,z.jsx)(`span`,{className:`caption text-soft rounded-full border border-white/[0.12] px-1.5 py-0.5 leading-none`,children:`default`}),n&&(0,z.jsx)(`span`,{className:`caption text-strong rounded-full px-1.5 py-0.5 leading-none`,style:{background:`${l} 30%)`},children:`current`}),a===e.name&&(0,z.jsx)(`span`,{className:`caption text-soft`,children:`switching…`})]})]},e.name)})})]})}),document.body)]})}var Af={"portfolio-value":{load:()=>H(()=>import(`./portfolio-value-C2hCsXwG.js`).then(e=>e.portfolioValueFrame),__vite__mapDeps([3,1,2,4,5,6,7,8,9]))},"portfolio-allocation":{load:()=>H(()=>import(`./portfolio-allocation-DzjS0F9u.js`).then(e=>e.portfolioAllocationFrame),__vite__mapDeps([10,1,2,4,5,9,7,8,11,12,13,14,15]))},"portfolio-holdings":{load:()=>H(()=>import(`./portfolio-holdings-1d7jT_Dv.js`).then(e=>e.portfolioHoldingsFrame),__vite__mapDeps([16,1,2,4,5,9,7,8]))},"bitcoin-dominance":{load:()=>H(()=>import(`./bitcoin-dominance-CDZbSLQ9.js`).then(e=>e.bitcoinDominanceFrame),__vite__mapDeps([17,1,2,8,4,5,9]))},clock:{load:()=>H(()=>import(`./clock-C5hPRu82.js`).then(e=>e.clockFrame),__vite__mapDeps([18,1,2,9,19]))},"custom-data":{load:()=>H(()=>import(`./custom-data-A7UR4hIt.js`).then(e=>e.customDataFrame),__vite__mapDeps([20,1,2,4,5,9,21,12,15,22,23]))},"daily-analysis":{load:()=>H(()=>import(`./daily-analysis-DmNxxfsL.js`).then(e=>e.dailyAnalysisFrame),__vite__mapDeps([24,1,2,4,5,9]))},"journal-log":{load:()=>H(()=>import(`./journal-log-DllO3-3Q.js`).then(e=>e.journalLogFrame),__vite__mapDeps([25,1,2,8,4,5,9,26,27]))},"journal-open":{load:()=>H(()=>import(`./journal-open-49eapsYs.js`).then(e=>e.journalOpenFrame),__vite__mapDeps([28,1,2,8,9,27,4,5,29,26]))},"journal-results":{load:()=>H(()=>import(`./journal-results-CYsmiD33.js`).then(e=>e.journalResultsFrame),__vite__mapDeps([30,2,1,9,27,4,5,29,26]))},"journal-score":{load:()=>H(()=>import(`./journal-score-BvJ7YMEp.js`).then(e=>e.journalScoreFrame),__vite__mapDeps([31,2,1,4,5,27,29,26]))},"dino-game":{load:()=>H(()=>import(`./dino-game-DkbgStXN.js`).then(e=>e.dinoGameFrame),__vite__mapDeps([32,1,2,33,4,5]))},"fear-greed":{load:()=>H(()=>import(`./fear-greed-Db3YYSrb.js`).then(e=>e.fearGreedFrame),__vite__mapDeps([34,1,2,8,9,21,12,15]))},"filings-feed":{load:()=>H(()=>import(`./filings-feed-CNEQhc4S.js`).then(e=>e.filingsFeedFrame),__vite__mapDeps([35,1,2,8,4,5,9,36]))},fundamentals:{load:()=>H(()=>import(`./fundamentals-DeZ9OQCp.js`).then(e=>e.fundamentalsFrame),__vite__mapDeps([37,2,1,8,4,5,9]))},"financial-stress":{load:()=>H(()=>import(`./financial-stress-CtL4d_BQ.js`).then(e=>e.financialStressFrame),__vite__mapDeps([38,1,2,8,4,5,9,21,12,15]))},"labor-market":{load:()=>H(()=>import(`./labor-market-D_4TsgBi.js`).then(e=>e.laborMarketFrame),__vite__mapDeps([39,1,2,8,4,5,9,21,12,15]))},"national-debt":{load:()=>H(()=>import(`./national-debt-BExrnkxj.js`).then(e=>e.nationalDebtFrame),__vite__mapDeps([40,1,2,8,4,5,9,21,12,15]))},"treasury-auctions":{load:()=>H(()=>import(`./treasury-auctions-ChsX0OUJ.js`).then(e=>e.treasuryAuctionsFrame),__vite__mapDeps([41,2,1,8,4,5,9,23]))},"funding-heatmap":{load:()=>H(()=>import(`./funding-heatmap-BiW7ZLwp.js`).then(e=>e.fundingHeatmapFrame),__vite__mapDeps([42,1,2,8,4,5,9,43,15]))},"funding-rate-chart":{load:()=>H(()=>import(`./funding-rate-chart-MWU01Uib.js`).then(e=>e.fundingRateChartFrame),__vite__mapDeps([44,1,2,8,4,5,9,45,12,15,11,13,46]))},heading:{load:()=>H(()=>import(`./heading-DMvjA_mI.js`).then(e=>e.headingFrame),__vite__mapDeps([47,2,1]))},"hero-number":{load:()=>H(()=>import(`./hero-number-BFIUUm5q.js`).then(e=>e.heroNumberFrame),__vite__mapDeps([48,2,1,4,5]))},image:{load:()=>H(()=>import(`./image-Dx6lzZxo.js`).then(e=>e.imageFrame),__vite__mapDeps([49,1,2,9]))},"image-gallery":{load:()=>H(()=>import(`./image-gallery-DlvoKVqh.js`).then(e=>e.imageGalleryFrame),__vite__mapDeps([50,1,2,9]))},"inflation-pulse":{load:()=>H(()=>import(`./inflation-pulse-DFjPkATF.js`).then(e=>e.inflationPulseFrame),__vite__mapDeps([51,1,2,8,4,5,9,21,12,15]))},"market-hours":{load:()=>H(()=>import(`./market-hours-B_bTdanw.js`).then(e=>e.marketHoursFrame),__vite__mapDeps([52,1,2,4,5,9,53])),titleIcon:!0},"news-feed":{load:()=>H(()=>import(`./news-feed-BHQ8VVq_.js`).then(e=>e.newsFeedFrame),__vite__mapDeps([54,1,2,8,4,5,9,36]))},note:{load:()=>H(()=>import(`./note-Dgl6DLv8.js`).then(e=>e.noteFrame),__vite__mapDeps([55,1,2,9]))},"price-chart":{load:()=>H(()=>import(`./price-chart-NGnXyEwF.js`).then(e=>e.priceChartFrame),__vite__mapDeps([56,1,2,8,6,9])),titleIcon:!0,titleContent:!0},"price-compare":{load:()=>H(()=>import(`./price-compare-D0cu78Tg.js`).then(e=>e.priceCompareFrame),__vite__mapDeps([57,1,2,8,4,5,9,45,12,15,11,13,46])),titleContent:!0},"price-liveline":{load:()=>H(()=>import(`./price-liveline-B_6-t2eO.js`).then(e=>e.priceLivelineFrame),__vite__mapDeps([58,1,2,8,4,5,6,11,12,13]))},"price-ticker":{load:()=>H(()=>import(`./price-ticker-DpNG6jQF.js`).then(e=>e.priceTickerFrame),__vite__mapDeps([59,2,1,8,9,60,4,5]))},"rates-board":{load:()=>H(()=>import(`./rates-board-Byz3erIf.js`).then(e=>e.ratesBoardFrame),__vite__mapDeps([61,2,1,8,4,5,9,23]))},"fx-board":{load:()=>H(()=>import(`./fx-board-CXrfSPfH.js`).then(e=>e.fxBoardFrame),__vite__mapDeps([62,2,1,8,4,5,9,21,12,15]))},"short-volume":{load:()=>H(()=>import(`./short-volume-B2TiqLCD.js`).then(e=>e.shortVolumeFrame),__vite__mapDeps([63,1,2,8,4,5,9]))},"top-movers":{load:()=>H(()=>import(`./top-movers-Bzz7lloh.js`).then(e=>e.topMoversFrame),__vite__mapDeps([64,1,2,8,9,60,4,5]))},"tvl-treemap":{load:()=>H(()=>import(`./tvl-treemap-qsmpeeAB.js`).then(e=>e.tvlTreemapFrame),__vite__mapDeps([65,1,2,8,9,66,12,15]))},"yield-curve":{load:()=>H(()=>import(`./yield-curve-DHeqDdBV.js`).then(e=>e.yieldCurveFrame),__vite__mapDeps([67,2,1,8,4,5,9]))},"dex-volume-treemap":{load:()=>H(()=>import(`./dex-volume-treemap-CXXZ330C.js`).then(e=>e.dexVolumeTreemapFrame),__vite__mapDeps([68,1,2,8,9,66,12,15]))},"dex-volume-chart":{load:()=>H(()=>import(`./dex-volume-chart-CGCkffrp.js`).then(e=>e.dexVolumeChartFrame),__vite__mapDeps([69,1,2,8,4,5,9,45,12,15,11,13,46]))},"protocol-tvl-treemap":{load:()=>H(()=>import(`./protocol-tvl-treemap-DC_qfwIF.js`).then(e=>e.protocolTvlTreemapFrame),__vite__mapDeps([70,1,2,8,9,66,12,15]))},"protocol-tvl-chart":{load:()=>H(()=>import(`./protocol-tvl-chart-Q1hGvfby.js`).then(e=>e.protocolTvlChartFrame),__vite__mapDeps([71,1,2,8,4,5,9,45,12,15,11,13,46]))},"protocol-fees-treemap":{load:()=>H(()=>import(`./protocol-fees-treemap-b4z8_0dU.js`).then(e=>e.protocolFeesTreemapFrame),__vite__mapDeps([72,1,2,8,9,66,12,15]))},"market-cap-treemap":{load:()=>H(()=>import(`./market-cap-treemap-ydmUhoNY.js`).then(e=>e.marketCapTreemapFrame),__vite__mapDeps([73,1,2,8,4,5,9,66,12,15]))},"open-interest":{load:()=>H(()=>import(`./open-interest-B5119LVQ.js`).then(e=>e.openInterestFrame),__vite__mapDeps([74,1,2,8,9]))},snake:{load:()=>H(()=>import(`./snake-D0Secq9I.js`).then(e=>e.snakeFrame),__vite__mapDeps([75,1,2,33,4,5]))},"flappy-bird":{load:()=>H(()=>import(`./flappy-bird-OADt73RX.js`).then(e=>e.flappyBirdFrame),__vite__mapDeps([76,1,2,33,4,5]))},video:{load:()=>H(()=>import(`./video-CYH3El1X.js`).then(e=>e.videoFrame),__vite__mapDeps([77,1,2,9]))},drawdy:{load:()=>H(()=>import(`./drawdy-Bqx6Qs9j.js`).then(e=>e.drawdyFrame),__vite__mapDeps([78,1,2,9]))},countdown:{load:()=>H(()=>import(`./countdown-9cgAKml3.js`).then(e=>e.countdownFrame),__vite__mapDeps([79,1,2,9,19]))},"link-grid":{load:()=>H(()=>import(`./link-grid-DUGgdBCS.js`).then(e=>e.linkGridFrame),__vite__mapDeps([80,1,2,9,26]))},calculator:{load:()=>H(()=>import(`./calculator-F474oCeb.js`).then(e=>e.calculatorFrame),__vite__mapDeps([81,1,2,9,26]))},quote:{load:()=>H(()=>import(`./quote-CuEE1U0a.js`).then(e=>e.quoteFrame),__vite__mapDeps([82,1,2]))},divider:{load:()=>H(()=>import(`./divider-B_ScYYo5.js`).then(e=>e.dividerFrame),__vite__mapDeps([83,2,1]))},marquee:{load:()=>H(()=>import(`./marquee-sW0gA0u_.js`).then(e=>e.marqueeFrame),__vite__mapDeps([84,2,1]))},dice:{load:()=>H(()=>import(`./dice-BRHGwsSK.js`).then(e=>e.diceFrame),__vite__mapDeps([85,1,2,9,26]))},"risk-reward":{load:()=>H(()=>import(`./risk-reward-Brde1Qql.js`).then(e=>e.riskRewardFrame),__vite__mapDeps([86,1,2,4,5,9,26]))},stopwatch:{load:()=>H(()=>import(`./stopwatch-DKtBGcQd.js`).then(e=>e.stopwatchFrame),__vite__mapDeps([87,1,2,26]))},"session-progress":{load:()=>H(()=>import(`./session-progress-BfuN5Ilt.js`).then(e=>e.sessionProgressFrame),__vite__mapDeps([88,1,2,9,53]))},"btc-fees":{load:()=>H(()=>import(`./btc-fees-CwRPq2S2.js`).then(e=>e.btcFeesFrame),__vite__mapDeps([89,2,1,8,9,90,4,5]))},"btc-mempool":{load:()=>H(()=>import(`./btc-mempool-DivYz6mX.js`).then(e=>e.btcMempoolFrame),__vite__mapDeps([91,2,1,8,4,5,9,90]))},"btc-blocks":{load:()=>H(()=>import(`./btc-blocks-CFz6DrIF.js`).then(e=>e.btcBlocksFrame),__vite__mapDeps([92,2,1,8,4,5,9]))},"btc-hashrate":{load:()=>H(()=>import(`./btc-hashrate-_PbwOOj4.js`).then(e=>e.btcHashrateFrame),__vite__mapDeps([93,1,2,8,4,5,9,21,12,15]))},"btc-difficulty":{load:()=>H(()=>import(`./btc-difficulty-bSLdWqGX.js`).then(e=>e.btcDifficultyFrame),__vite__mapDeps([94,2,1,8,4,5,9]))},"mining-pools":{load:()=>H(()=>import(`./mining-pools-BpaMCs0f.js`).then(e=>e.miningPoolsFrame),__vite__mapDeps([95,1,2,8,4,5,9,66,12,15]))},"lightning-stats":{load:()=>H(()=>import(`./lightning-stats-DqM9rjwr.js`).then(e=>e.lightningStatsFrame),__vite__mapDeps([96,2,1,8,4,5,9]))},"options-put-call":{load:()=>H(()=>import(`./options-put-call-lwGRvlsC.js`).then(e=>e.optionsPutCallFrame),__vite__mapDeps([97,2,1,8,4,5,9]))},"options-iv":{load:()=>H(()=>import(`./options-iv-Bbopuw_Z.js`).then(e=>e.optionsIvFrame),__vite__mapDeps([98,1,2,8,4,5,9,21,12,15]))},"options-oi-strike":{load:()=>H(()=>import(`./options-oi-strike-D1ZtVHSn.js`).then(e=>e.optionsOiStrikeFrame),__vite__mapDeps([99,1,2,8,4,5,9]))},"coin-movers":{load:()=>H(()=>import(`./coin-movers-BPifHhH2.js`).then(e=>e.coinMoversFrame),__vite__mapDeps([100,1,2,8,9,60,4,5]))},mvrv:{load:()=>H(()=>import(`./mvrv-CrYk75Yb.js`).then(e=>e.mvrvFrame),__vite__mapDeps([101,2,1,8,4,5,9,102,103,21,12,15]))},nupl:{load:()=>H(()=>import(`./nupl-DglP-qbC.js`).then(e=>e.nuplFrame),__vite__mapDeps([104,2,1,8,4,5,9,102,103,21,12,15]))},sopr:{load:()=>H(()=>import(`./sopr-j5kMKG03.js`).then(e=>e.soprFrame),__vite__mapDeps([105,2,1,8,4,5,9,102,103,21,12,15]))},"puell-multiple":{load:()=>H(()=>import(`./puell-multiple-uc0NZXdh.js`).then(e=>e.puellMultipleFrame),__vite__mapDeps([106,2,1,8,4,5,9,102,103,21,12,15]))},"mayer-multiple":{load:()=>H(()=>import(`./mayer-multiple-D6T_kVDR.js`).then(e=>e.mayerMultipleFrame),__vite__mapDeps([107,1,2,8,4,5,9,102,103,21,12,15]))},"pi-cycle":{load:()=>H(()=>import(`./pi-cycle-CqX0lAu1.js`).then(e=>e.piCycleFrame),__vite__mapDeps([108,1,2,8,4,5,9,102,103,21,12,15]))},"ma-multiplier":{load:()=>H(()=>import(`./ma-multiplier-0NdXDf5j.js`).then(e=>e.maMultiplierFrame),__vite__mapDeps([109,1,2,8,4,5,9,102,103,21,12,15]))},"rsi-momentum":{load:()=>H(()=>import(`./rsi-momentum-DFARJhwN.js`).then(e=>e.rsiMomentumFrame),__vite__mapDeps([110,1,2,8,4,5,9,102,103,21,12,15]))},"volume-profile":{load:()=>H(()=>import(`./volume-profile-W44vUguI.js`).then(e=>e.volumeProfileFrame),__vite__mapDeps([111,1,2,8,4,5,9]))},dxy:{load:()=>H(()=>import(`./dxy-EDEcDqHS.js`).then(e=>e.dxyFrame),__vite__mapDeps([112,2,1,8,4,5,9,103,21,12,15,102]))},"cycle-signals":{load:()=>H(()=>import(`./cycle-signals-CmEenZJE.js`).then(e=>e.cycleSignalsFrame),__vite__mapDeps([113,1,2,8,4,5,9,23,102,103,21,12,15]))},"stablecoin-supply":{load:()=>H(()=>import(`./stablecoin-supply-6Q2kIHWN.js`).then(e=>e.stablecoinSupplyFrame),__vite__mapDeps([114,2,1,8,4,5,9,103,21,12,15,102]))},"yield-scanner":{load:()=>H(()=>import(`./yield-scanner-uR4S_OrU.js`).then(e=>e.yieldScannerFrame),__vite__mapDeps([115,1,2,8,4,5,9,23]))},"defi-revenue":{load:()=>H(()=>import(`./defi-revenue-BwnWnaOl.js`).then(e=>e.defiRevenueFrame),__vite__mapDeps([116,2,1,8,4,5,9,103,21,12,15,102]))},"funding-comparison":{load:()=>H(()=>import(`./funding-comparison-TSJiamEF.js`).then(e=>e.fundingComparisonFrame),__vite__mapDeps([117,2,1,8,4,5,9,23]))},"eth-supply":{load:()=>H(()=>import(`./eth-supply-BDXv32cs.js`).then(e=>e.ethSupplyFrame),__vite__mapDeps([118,2,1,8,4,5,9,103,21,12,15,102]))},"eth-staking":{load:()=>H(()=>import(`./eth-staking-DhS4t_di.js`).then(e=>e.ethStakingFrame),__vite__mapDeps([119,2,1,8,4,5,9,103,21,12,15,102]))},"prediction-markets":{load:()=>H(()=>import(`./prediction-markets-vrOoZGTG.js`).then(e=>e.predictionMarketsFrame),__vite__mapDeps([120,2,1,8,4,5,9,23]))},"etf-flows":{load:()=>H(()=>import(`./etf-flows-BokfCz94.js`).then(e=>e.etfFlowsFrame),__vite__mapDeps([121,2,1,8,4,5,9,23]))},"trending-coins":{load:()=>H(()=>import(`./trending-coins-n7mmU4mL.js`).then(e=>e.trendingCoinsFrame),__vite__mapDeps([122,2,1,8,4,5,9,23]))},"sector-performance":{load:()=>H(()=>import(`./sector-performance-CVVJ-VGu.js`).then(e=>e.sectorPerformanceFrame),__vite__mapDeps([123,2,1,8,4,5,9,23]))},"macro-calendar":{load:()=>H(()=>import(`./macro-calendar-BtFBeUX9.js`).then(e=>e.macroCalendarFrame),__vite__mapDeps([124,1,2,9,23]))},"stablecoin-chains":{load:()=>H(()=>import(`./stablecoin-chains-jLxaRE9T.js`).then(e=>e.stablecoinChainsFrame),__vite__mapDeps([125,1,2,8,9,66,12,15]))},"sector-treemap":{load:()=>H(()=>import(`./sector-treemap-lyftrGDF.js`).then(e=>e.sectorTreemapFrame),__vite__mapDeps([126,1,2,8,4,5,9,66,12,15]))},"etf-flows-chart":{load:()=>H(()=>import(`./etf-flows-chart-B7vXhlo1.js`).then(e=>e.etfFlowsChartFrame),__vite__mapDeps([127,1,2,8,9,45,12,15,11,13,46]))},"realized-price":{load:()=>H(()=>import(`./realized-price-D91T6q7P.js`).then(e=>e.realizedPriceFrame),__vite__mapDeps([128,1,2,8,9,45,12,15,11,13,46,102]))},"reserve-risk":{load:()=>H(()=>import(`./reserve-risk-CuRuMPUz.js`).then(e=>e.reserveRiskFrame),__vite__mapDeps([129,2,1,8,4,5,9,102,103,21,12,15]))},"holiday-calendar":{load:()=>H(()=>import(`./holiday-calendar-s6CQYrht.js`).then(e=>e.holidayCalendarFrame),__vite__mapDeps([130,2,1,9,23,53]))},"day-meter":{load:()=>H(()=>import(`./day-meter-DYYqZgFQ.js`).then(e=>e.dayMeterFrame),__vite__mapDeps([131,2,1,9,53]))},"returns-projector":{load:()=>H(()=>import(`./returns-projector-DvVTUgZa.js`).then(e=>e.returnsProjectorFrame),__vite__mapDeps([132,1,2,4,5,21,12,15,26]))},breakeven:{load:()=>H(()=>import(`./breakeven-N9JfaLs2.js`).then(e=>e.breakevenFrame),__vite__mapDeps([133,1,2,4,5,9,26]))},checklist:{load:()=>H(()=>import(`./checklist-BSCOZLJ-.js`).then(e=>e.checklistFrame),__vite__mapDeps([134,1,2,9]))},pomodoro:{load:()=>H(()=>import(`./pomodoro-BstwVCqa.js`).then(e=>e.pomodoroFrame),__vite__mapDeps([135,1,2,26]))},"rules-card":{load:()=>H(()=>import(`./rules-card-CDgHHXtE.js`).then(e=>e.rulesCardFrame),__vite__mapDeps([136,2,1,9]))},breathing:{load:()=>H(()=>import(`./breathing-CSiaHH2d.js`).then(e=>e.breathingFrame),__vite__mapDeps([137,1,2]))},"spotify-embed":{load:()=>H(()=>import(`./spotify-embed-BJIW3cBK.js`).then(e=>e.spotifyEmbedFrame),__vite__mapDeps([138,1,2,9]))},"nft-collections":{load:()=>H(()=>import(`./nft-collections-BED52ibd.js`).then(e=>e.nftCollectionsFrame),__vite__mapDeps([139,2,1,8,4,5,9,23]))},"dex-hot-pools":{load:()=>H(()=>import(`./dex-hot-pools-5sl00AOK.js`).then(e=>e.dexHotPoolsFrame),__vite__mapDeps([140,2,1,8,4,5,9,23]))},"chain-activity":{load:()=>H(()=>import(`./chain-activity-Db-zx6eG.js`).then(e=>e.chainActivityFrame),__vite__mapDeps([141,2,1,8,4,5,9,23]))},"order-book-depth":{load:()=>H(()=>import(`./order-book-depth-CeFNsjv3.js`).then(e=>e.orderBookDepthFrame),__vite__mapDeps([142,2,1,8,4,5,9]))},"nft-treemap":{load:()=>H(()=>import(`./nft-treemap-PO55tL6W.js`).then(e=>e.nftTreemapFrame),__vite__mapDeps([143,1,2,8,4,5,9,66,12,15]))},"dex-pool-treemap":{load:()=>H(()=>import(`./dex-pool-treemap-DmoYWG3V.js`).then(e=>e.dexPoolTreemapFrame),__vite__mapDeps([144,1,2,8,4,5,9,66,12,15]))},"sector-bars":{load:()=>H(()=>import(`./sector-bars-D0A6Sj3C.js`).then(e=>e.sectorBarsFrame),__vite__mapDeps([145,1,2,8,4,5,9,22,12,15]))},"funding-bars":{load:()=>H(()=>import(`./funding-bars-CZicqsRm.js`).then(e=>e.fundingBarsFrame),__vite__mapDeps([146,1,2,8,4,5,9,22,12,15]))},"etf-flow-bars":{load:()=>H(()=>import(`./etf-flow-bars-BdLldRsx.js`).then(e=>e.etfFlowBarsFrame),__vite__mapDeps([147,1,2,8,4,5,9,22,12,15]))},"chain-activity-bars":{load:()=>H(()=>import(`./chain-activity-bars-CPhHE6lU.js`).then(e=>e.chainActivityBarsFrame),__vite__mapDeps([148,1,2,8,4,5,9,22,12,15]))},"market-scatter":{load:()=>H(()=>import(`./market-scatter-FTzDpslF.js`).then(e=>e.marketScatterFrame),__vite__mapDeps([149,1,2,8,4,5,9,150,12,15]))},"market-bubbles":{load:()=>H(()=>import(`./market-bubbles-B4CW9pwK.js`).then(e=>e.marketBubblesFrame),__vite__mapDeps([151,1,2,8,4,5,152,9,12,15]))},"tvl-bubbles":{load:()=>H(()=>import(`./tvl-bubbles-DU2M5Zl1.js`).then(e=>e.tvlBubblesFrame),__vite__mapDeps([153,1,2,8,152,9,12,15]))},"protocol-tvl-bubbles":{load:()=>H(()=>import(`./protocol-tvl-bubbles-BDAUSzkE.js`).then(e=>e.protocolTvlBubblesFrame),__vite__mapDeps([154,1,2,8,4,5,152,9,12,15]))},"dex-volume-bubbles":{load:()=>H(()=>import(`./dex-volume-bubbles-lLAheaQp.js`).then(e=>e.dexVolumeBubblesFrame),__vite__mapDeps([155,1,2,8,4,5,152,9,12,15]))},"protocol-fees-bubbles":{load:()=>H(()=>import(`./protocol-fees-bubbles-CfMsdfGV.js`).then(e=>e.protocolFeesBubblesFrame),__vite__mapDeps([156,1,2,8,4,5,152,9,12,15]))},"sector-bubbles":{load:()=>H(()=>import(`./sector-bubbles-C5lQoTi9.js`).then(e=>e.sectorBubblesFrame),__vite__mapDeps([157,1,2,8,4,5,152,9,12,15]))},"nft-bubbles":{load:()=>H(()=>import(`./nft-bubbles-BU8EpLxc.js`).then(e=>e.nftBubblesFrame),__vite__mapDeps([158,1,2,8,4,5,152,9,12,15]))},"dex-pool-bubbles":{load:()=>H(()=>import(`./dex-pool-bubbles-KyBmXb-u.js`).then(e=>e.dexPoolBubblesFrame),__vite__mapDeps([159,1,2,8,4,5,152,9,12,15]))},"movers-bubbles":{load:()=>H(()=>import(`./movers-bubbles-BidtAeZE.js`).then(e=>e.moversBubblesFrame),__vite__mapDeps([160,1,2,8,4,5,152,9,12,15]))},"sentiment-gauge":{load:()=>H(()=>import(`./sentiment-gauge-CdnbFwyn.js`).then(e=>e.sentimentGaugeFrame),__vite__mapDeps([161,2,1,8,9,162,12,15]))},"movers-bars":{load:()=>H(()=>import(`./movers-bars-Bp8o2qzk.js`).then(e=>e.moversBarsFrame),__vite__mapDeps([163,1,2,8,4,5,9,22,12,15]))},"tvl-bars":{load:()=>H(()=>import(`./tvl-bars-5IQ6zz2M.js`).then(e=>e.tvlBarsFrame),__vite__mapDeps([164,1,2,8,9,22,12,15]))},"yield-scatter":{load:()=>H(()=>import(`./yield-scatter-CnZQ7naG.js`).then(e=>e.yieldScatterFrame),__vite__mapDeps([165,1,2,8,4,5,9,150,12,15]))},"nft-scatter":{load:()=>H(()=>import(`./nft-scatter-CGhED2cB.js`).then(e=>e.nftScatterFrame),__vite__mapDeps([166,1,2,8,4,5,9,150,12,15]))},"dominance-gauge":{load:()=>H(()=>import(`./dominance-gauge-DL_JjphD.js`).then(e=>e.dominanceGaugeFrame),__vite__mapDeps([167,2,1,8,4,5,9,162,12,15]))},"put-call-gauge":{load:()=>H(()=>import(`./put-call-gauge-DtlDFtDZ.js`).then(e=>e.putCallGaugeFrame),__vite__mapDeps([168,2,1,8,4,5,9,162,12,15]))},"oi-treemap":{load:()=>H(()=>import(`./oi-treemap-BbPekPJp.js`).then(e=>e.oiTreemapFrame),__vite__mapDeps([169,1,2,8,9,66,12,15]))},"ohlcv-volume-bars":{load:()=>H(()=>import(`./ohlcv-volume-bars-Bi83GPWW.js`).then(e=>e.ohlcvVolumeBarsFrame),__vite__mapDeps([170,1,2,8,4,5,9,22,12,15]))},"funding-spread-bars":{load:()=>H(()=>import(`./funding-spread-bars-Br7XsS11.js`).then(e=>e.fundingSpreadBarsFrame),__vite__mapDeps([171,1,2,8,4,5,9,22,12,15]))},"funding-venue-heatmap":{load:()=>H(()=>import(`./funding-venue-heatmap-sPFQ1fzo.js`).then(e=>e.fundingVenueHeatmapFrame),__vite__mapDeps([172,1,2,8,4,5,9,43,15]))},"funding-carry-area":{load:()=>H(()=>import(`./funding-carry-area-B9WKPWmT.js`).then(e=>e.fundingCarryAreaFrame),__vite__mapDeps([173,1,2,8,4,5,9,11,12,13,174,15]))},"volume-share-donut":{load:()=>H(()=>import(`./volume-share-donut-CLbp38ek.js`).then(e=>e.volumeShareDonutFrame),__vite__mapDeps([175,1,2,8,4,5,9,11,12,13,14,15]))},"volume-movers-scatter":{load:()=>H(()=>import(`./volume-movers-scatter-B8dYI1EZ.js`).then(e=>e.volumeMoversScatterFrame),__vite__mapDeps([176,1,2,8,4,5,9,150,12,15]))},"funding-leaderboard-bars":{load:()=>H(()=>import(`./funding-leaderboard-bars-C6PF11ps.js`).then(e=>e.fundingLeaderboardBarsFrame),__vite__mapDeps([177,1,2,8,4,5,9,22,12,15]))},"funding-crowding-scatter":{load:()=>H(()=>import(`./funding-crowding-scatter-DfPN294N.js`).then(e=>e.fundingCrowdingScatterFrame),__vite__mapDeps([178,1,2,8,4,5,9,150,12,15]))},"liquidity-basis-bars":{load:()=>H(()=>import(`./liquidity-basis-bars-BBthK657.js`).then(e=>e.liquidityBasisBarsFrame),__vite__mapDeps([179,1,2,8,4,5,9,22,12,15]))},"coin-momentum-heatmap":{load:()=>H(()=>import(`./coin-momentum-heatmap-DbHsWjP2.js`).then(e=>e.coinMomentumHeatmapFrame),__vite__mapDeps([180,1,2,8,4,5,9,43,15]))},"coin-momentum-scatter":{load:()=>H(()=>import(`./coin-momentum-scatter-5wS64urM.js`).then(e=>e.coinMomentumScatterFrame),__vite__mapDeps([181,1,2,8,4,5,9,150,12,15]))},"trending-bars":{load:()=>H(()=>import(`./trending-bars-DtgWzD_x.js`).then(e=>e.trendingBarsFrame),__vite__mapDeps([182,1,2,8,4,5,9,22,12,15]))},"nft-activity-bars":{load:()=>H(()=>import(`./nft-activity-bars-BjGU2vJF.js`).then(e=>e.nftActivityBarsFrame),__vite__mapDeps([183,1,2,8,4,5,9,22,12,15]))},"dominance-bars":{load:()=>H(()=>import(`./dominance-bars-CwFTP6Sh.js`).then(e=>e.dominanceBarsFrame),__vite__mapDeps([184,1,2,8,4,5,9,22,12,15]))},"trending-bubbles":{load:()=>H(()=>import(`./trending-bubbles-DRJqfQqK.js`).then(e=>e.trendingBubblesFrame),__vite__mapDeps([185,1,2,8,4,5,152,9,12,15]))},"yield-risk-pie":{load:()=>H(()=>import(`./yield-risk-pie-C73G7WqW.js`).then(e=>e.yieldRiskPieFrame),__vite__mapDeps([186,1,2,8,4,5,9,11,12,13,14,15]))},"dex-pool-liquidity-scatter":{load:()=>H(()=>import(`./dex-pool-liquidity-scatter-Cczoa7F0.js`).then(e=>e.dexPoolLiquidityScatterFrame),__vite__mapDeps([187,1,2,8,4,5,9,150,12,15]))},"protocol-fees-vs-tvl-scatter":{load:()=>H(()=>import(`./protocol-fees-vs-tvl-scatter-D-REm65e.js`).then(e=>e.protocolFeesVsTvlScatterFrame),__vite__mapDeps([188,1,2,8,9,150,12,15]))},"yield-composition-scatter":{load:()=>H(()=>import(`./yield-composition-scatter-BinG9C4D.js`).then(e=>e.yieldCompositionScatterFrame),__vite__mapDeps([189,1,2,8,4,5,9,150,12,15]))},"protocol-tvl-by-category":{load:()=>H(()=>import(`./protocol-tvl-by-category-fw6ADU1F.js`).then(e=>e.protocolTvlByCategoryFrame),__vite__mapDeps([190,1,2,8,9,22,12,15]))},"protocol-tvl-share-area":{load:()=>H(()=>import(`./protocol-tvl-share-area-DXQzexAL.js`).then(e=>e.protocolTvlShareAreaFrame),__vite__mapDeps([191,1,2,8,4,5,9,11,12,13,174,15]))},"dex-volume-share-area":{load:()=>H(()=>import(`./dex-volume-share-area-figZ1USz.js`).then(e=>e.dexVolumeShareAreaFrame),__vite__mapDeps([192,1,2,8,4,5,9,11,12,13,174,15]))},"yield-momentum-bars":{load:()=>H(()=>import(`./yield-momentum-bars-D4ToH0Fp.js`).then(e=>e.yieldMomentumBarsFrame),__vite__mapDeps([193,1,2,8,4,5,9,22,12,15]))},"btc-difficulty-chart":{load:()=>H(()=>import(`./btc-difficulty-chart-D6il3x9b.js`).then(e=>e.btcDifficultyChartFrame),__vite__mapDeps([194,1,2,8,4,5,9,21,12,15]))},"btc-block-size-bars":{load:()=>H(()=>import(`./btc-block-size-bars-BwGQm2NA.js`).then(e=>e.btcBlockSizeBarsFrame),__vite__mapDeps([195,1,2,8,4,5,9,22,12,15]))},"chain-price-movers":{load:()=>H(()=>import(`./chain-price-movers-Vym50Lcy.js`).then(e=>e.chainPriceMoversFrame),__vite__mapDeps([196,1,2,8,4,5,9,22,12,15]))},"chain-activity-scatter":{load:()=>H(()=>import(`./chain-activity-scatter-CU7D3Nx9.js`).then(e=>e.chainActivityScatterFrame),__vite__mapDeps([197,1,2,8,4,5,9,150,12,15]))},"mempool-fee-curve":{load:()=>H(()=>import(`./mempool-fee-curve-DUsgJQRe.js`).then(e=>e.mempoolFeeCurveFrame),__vite__mapDeps([198,1,2,8,9,22,12,15,90,4,5]))},"mining-pools-share":{load:()=>H(()=>import(`./mining-pools-share-CrfTxNKr.js`).then(e=>e.miningPoolsShareFrame),__vite__mapDeps([199,1,2,8,4,5,9,11,12,13,14,15]))},"options-max-pain":{load:()=>H(()=>import(`./options-max-pain-DkUoBRmq.js`).then(e=>e.optionsMaxPainFrame),__vite__mapDeps([200,1,2,8,9,22,12,15]))},"options-oi-skew":{load:()=>H(()=>import(`./options-oi-skew-B3eQqfLD.js`).then(e=>e.optionsOiSkewFrame),__vite__mapDeps([201,1,2,8,4,5,9,22,12,15]))},"options-vol-spread":{load:()=>H(()=>import(`./options-vol-spread-CnZEubR3.js`).then(e=>e.optionsVolSpreadFrame),__vite__mapDeps([202,1,2,8,9,45,12,15,11,13,46]))},"options-flow-skew":{load:()=>H(()=>import(`./options-flow-skew-Cj0v65sh.js`).then(e=>e.optionsFlowSkewFrame),__vite__mapDeps([203,1,2,8,4,5,9,22,12,15]))},"options-vol-smile":{load:()=>H(()=>import(`./options-vol-smile-zdzBnvMN.js`).then(e=>e.optionsVolSmileFrame),__vite__mapDeps([204,1,2,8,4,5,9]))},"options-oi-ladder-heatmap":{load:()=>H(()=>import(`./options-oi-ladder-heatmap-BMFAQkEI.js`).then(e=>e.optionsOiLadderHeatmapFrame),__vite__mapDeps([205,1,2,8,4,5,9,43,15]))},"options-max-pain-multi":{load:()=>H(()=>import(`./options-max-pain-multi-BZq8vuHy.js`).then(e=>e.optionsMaxPainMultiFrame),__vite__mapDeps([206,1,2,8,4,5,9,22,12,15]))},"mvrv-zscore-chart":{load:()=>H(()=>import(`./mvrv-zscore-chart-0m51ohsV.js`).then(e=>e.mvrvZscoreChartFrame),__vite__mapDeps([207,1,2,8,9,45,12,15,11,13,46,102]))},"nupl-cycle-chart":{load:()=>H(()=>import(`./nupl-cycle-chart-S9yflXUB.js`).then(e=>e.nuplCycleChartFrame),__vite__mapDeps([208,1,2,8,4,5,9,45,12,15,11,13,46,102]))},"cycle-valuation-composite":{load:()=>H(()=>import(`./cycle-valuation-composite-olTWmWgj.js`).then(e=>e.cycleValuationCompositeFrame),__vite__mapDeps([209,1,2,8,4,5,9,45,12,15,11,13,46,102]))},"onchain-oscillator-overlay":{load:()=>H(()=>import(`./onchain-oscillator-overlay-Ck_7aTc_.js`).then(e=>e.onchainOscillatorOverlayFrame),__vite__mapDeps([210,1,2,8,4,5,9,45,12,15,11,13,46,102]))},"eth-issuance-impact":{load:()=>H(()=>import(`./eth-issuance-impact-C0dbmsYs.js`).then(e=>e.ethIssuanceImpactFrame),__vite__mapDeps([211,1,2,8,4,5,9,22,12,15]))},"treasury-avg-rate-bars":{load:()=>H(()=>import(`./treasury-avg-rate-bars-DQ_HgQ0U.js`).then(e=>e.treasuryAvgRateBarsFrame),__vite__mapDeps([212,1,2,8,4,5,9,22,12,15]))},"treasury-auction-demand-scatter":{load:()=>H(()=>import(`./treasury-auction-demand-scatter-CUoIYkrP.js`).then(e=>e.treasuryAuctionDemandScatterFrame),__vite__mapDeps([213,1,2,8,4,5,9,150,12,15]))},"treasury-auction-size-bars":{load:()=>H(()=>import(`./treasury-auction-size-bars-DXMJ0a9C.js`).then(e=>e.treasuryAuctionSizeBarsFrame),__vite__mapDeps([214,1,2,8,4,5,9,22,12,15]))},"nyfed-reference-rate-bars":{load:()=>H(()=>import(`./nyfed-reference-rate-bars-C_3KkqpO.js`).then(e=>e.nyfedReferenceRateBarsFrame),__vite__mapDeps([215,1,2,8,4,5,9,22,12,15]))},"nyfed-sofr-term-averages-bars":{load:()=>H(()=>import(`./nyfed-sofr-term-averages-bars-Dqaa52Pl.js`).then(e=>e.nyfedSofrTermAveragesBarsFrame),__vite__mapDeps([216,1,2,8,4,5,9,22,12,15]))},"nyfed-fed-funds-band-gauge":{load:()=>H(()=>import(`./nyfed-fed-funds-band-gauge-CFMKcqEc.js`).then(e=>e.nyfedFedFundsBandGaugeFrame),__vite__mapDeps([217,2,1,8,4,5,9,162,12,15]))},"treasury-debt-composition-area":{load:()=>H(()=>import(`./treasury-debt-composition-area-C3sBaNNX.js`).then(e=>e.treasuryDebtCompositionAreaFrame),__vite__mapDeps([218,1,2,8,4,5,9,11,12,13,174,15]))},"ofr-stress-category-area":{load:()=>H(()=>import(`./ofr-stress-category-area-DnEjZbRo.js`).then(e=>e.ofrStressCategoryAreaFrame),__vite__mapDeps([219,1,2,8,9,11,12,13,174,15]))},"misery-index":{load:()=>H(()=>import(`./misery-index-BU2requD.js`).then(e=>e.miseryIndexFrame),__vite__mapDeps([220,1,2,8,4,5,9,11,12,13,174,15]))},"real-wages":{load:()=>H(()=>import(`./real-wages-BU2XSTAC.js`).then(e=>e.realWagesFrame),__vite__mapDeps([221,1,2,8,4,5,9,45,12,15,11,13,46]))},"labor-force-flow":{load:()=>H(()=>import(`./labor-force-flow-BIAQjzra.js`).then(e=>e.laborForceFlowFrame),__vite__mapDeps([222,1,2,8,4,5,9,45,12,15,11,13,46]))},"payrolls-bars":{load:()=>H(()=>import(`./payrolls-bars-T0e6cyjh.js`).then(e=>e.payrollsBarsFrame),__vite__mapDeps([223,1,2,8,4,5,9,22,12,15]))},"short-volume-bars":{load:()=>H(()=>import(`./short-volume-bars-Cm-TnzY-.js`).then(e=>e.shortVolumeBarsFrame),__vite__mapDeps([224,1,2,8,4,5,9,22,12,15]))},"capital-structure-bars":{load:()=>H(()=>import(`./capital-structure-bars-BHtcggyu.js`).then(e=>e.capitalStructureBarsFrame),__vite__mapDeps([225,1,2,8,4,5,9,22,12,15]))},"filings-mix":{load:()=>H(()=>import(`./filings-mix-BycrOiTn.js`).then(e=>e.filingsMixFrame),__vite__mapDeps([226,1,2,8,4,5,9,11,12,13,14,15]))},"fx-cross-heatmap":{load:()=>H(()=>import(`./fx-cross-heatmap-CHJIg4cN.js`).then(e=>e.fxCrossHeatmapFrame),__vite__mapDeps([227,1,2,8,4,5,9,43,15]))},"etf-issuer-treemap":{load:()=>H(()=>import(`./etf-issuer-treemap-zM5ZN913.js`).then(e=>e.etfIssuerTreemapFrame),__vite__mapDeps([228,1,2,8,9,66,12,15]))},"fx-trend-chart":{load:()=>H(()=>import(`./fx-trend-chart-DXS0-OTV.js`).then(e=>e.fxTrendChartFrame),__vite__mapDeps([229,1,2,8,4,5,9,45,12,15,11,13,46]))},"fear-greed-chart":{load:()=>H(()=>import(`./fear-greed-chart-BUaJVaqb.js`).then(e=>e.fearGreedChartFrame),__vite__mapDeps([230,1,2,8,9,45,12,15,11,13,46]))},"prediction-market-bars":{load:()=>H(()=>import(`./prediction-market-bars-WOea9YlB.js`).then(e=>e.predictionMarketBarsFrame),__vite__mapDeps([231,1,2,8,9,22,12,15]))},"dxy-chart":{load:()=>H(()=>import(`./dxy-chart-DZ9Q_k9j.js`).then(e=>e.dxyChartFrame),__vite__mapDeps([232,1,2,8,4,5,9,45,12,15,11,13,46]))},"fx-movers-bars":{load:()=>H(()=>import(`./fx-movers-bars-DpD5YR28.js`).then(e=>e.fxMoversBarsFrame),__vite__mapDeps([233,1,2,8,4,5,9,22,12,15]))},"prediction-market-scatter":{load:()=>H(()=>import(`./prediction-market-scatter-Bg8Hp9YU.js`).then(e=>e.predictionMarketScatterFrame),__vite__mapDeps([234,1,2,8,4,5,9,150,12,15]))},"etf-issuer-bars":{load:()=>H(()=>import(`./etf-issuer-bars-ZWR-71DZ.js`).then(e=>e.etfIssuerBarsFrame),__vite__mapDeps([235,1,2,8,4,5,9,22,12,15]))},"portfolio-movers":{load:()=>H(()=>import(`./portfolio-movers-vdVKKjAL.js`).then(e=>e.portfolioMoversFrame),__vite__mapDeps([236,1,2,4,5,9,7,8,22,12,15]))},"portfolio-value-bars":{load:()=>H(()=>import(`./portfolio-value-bars-Bkh18oxT.js`).then(e=>e.portfolioValueBarsFrame),__vite__mapDeps([237,1,2,9,7,8,22,12,15]))},"etf-flow-calendar":{load:()=>H(()=>import(`./etf-flow-calendar-QeCVgCXm.js`).then(e=>e.etfFlowCalendarFrame),__vite__mapDeps([238,1,2,8,9,43,15]))},"prediction-markets-bubble":{load:()=>H(()=>import(`./prediction-markets-bubble-DUFbL6ZL.js`).then(e=>e.predictionMarketsBubbleFrame),__vite__mapDeps([239,1,2,8,4,5,152,9,12,15]))},"metals-board":{load:()=>H(()=>import(`./metals-board-DPfkH3Vj.js`).then(e=>e.metalsBoardFrame),__vite__mapDeps([240,2,1,8,4,5,9,241,13]))},"metal-price":{load:()=>H(()=>import(`./metal-price-CIZRcE2_.js`).then(e=>e.metalPriceFrame),__vite__mapDeps([242,2,1,8,4,5,9,241,13]))},"metal-value":{load:()=>H(()=>import(`./metal-value-CTPzpBvh.js`).then(e=>e.metalValueFrame),__vite__mapDeps([243,2,1,8,9,241,4,5,13]))},"metal-price-chart":{load:()=>H(()=>import(`./metal-price-chart-BX5tGnIt.js`).then(e=>e.metalPriceChartFrame),__vite__mapDeps([244,1,2,8,9,45,12,15,11,13,46,241,4,5]))},"metal-compare-chart":{load:()=>H(()=>import(`./metal-compare-chart-CiOT1Su2.js`).then(e=>e.metalCompareChartFrame),__vite__mapDeps([245,1,2,8,4,5,9,45,12,15,11,13,46,241]))},"metal-fix-table":{load:()=>H(()=>import(`./metal-fix-table-ChbUOgVu.js`).then(e=>e.metalFixTableFrame),__vite__mapDeps([246,1,2,8,4,5,9,241,13]))},"metal-drawdown":{load:()=>H(()=>import(`./metal-drawdown-DZ7uOHIc.js`).then(e=>e.metalDrawdownFrame),__vite__mapDeps([247,1,2,8,4,5,9,45,12,15,11,13,46,241]))},"metal-ath":{load:()=>H(()=>import(`./metal-ath-ChqiN4O-.js`).then(e=>e.metalAthFrame),__vite__mapDeps([248,1,2,8,4,5,9,23,241,13]))},"metal-milestones":{load:()=>H(()=>import(`./metal-milestones-BpfRvE7K.js`).then(e=>e.metalMilestonesFrame),__vite__mapDeps([249,1,2,8,9,23,241,4,5,13]))},"metal-annual-returns":{load:()=>H(()=>import(`./metal-annual-returns-CsZDcJs4.js`).then(e=>e.metalAnnualReturnsFrame),__vite__mapDeps([250,1,2,8,4,5,9,22,12,15,241,13]))},"metal-performance":{load:()=>H(()=>import(`./metal-performance-CBD6oX6f.js`).then(e=>e.metalPerformanceFrame),__vite__mapDeps([251,1,2,8,4,5,9,22,12,15,241,13]))},"metal-return-distribution":{load:()=>H(()=>import(`./metal-return-distribution-B0AAXxe0.js`).then(e=>e.metalReturnDistributionFrame),__vite__mapDeps([252,1,2,8,4,5,9,22,12,15,241,13]))},"metal-seasonality":{load:()=>H(()=>import(`./metal-seasonality-BuQKG4Gi.js`).then(e=>e.metalSeasonalityFrame),__vite__mapDeps([253,1,2,8,4,5,9,43,15,241,13]))},"metals-correlation":{load:()=>H(()=>import(`./metals-correlation-BjZHMzKY.js`).then(e=>e.metalsCorrelationFrame),__vite__mapDeps([254,1,2,8,4,5,9,43,15,241,13]))},"metal-volatility":{load:()=>H(()=>import(`./metal-volatility-g94-b7hn.js`).then(e=>e.metalVolatilityFrame),__vite__mapDeps([255,1,2,8,4,5,9,45,12,15,11,13,46,241]))},"gold-silver-ratio":{load:()=>H(()=>import(`./gold-silver-ratio-C1AEhktf.js`).then(e=>e.goldSilverRatioFrame),__vite__mapDeps([256,1,2,8,4,5,9,21,12,15,241,13]))},"metal-ratio-chart":{load:()=>H(()=>import(`./metal-ratio-chart-D99QH7nv.js`).then(e=>e.metalRatioChartFrame),__vite__mapDeps([257,1,2,8,4,5,9,45,12,15,11,13,46,241]))},"btc-in-gold":{load:()=>H(()=>import(`./btc-in-gold-JNXTU7sM.js`).then(e=>e.btcInGoldFrame),__vite__mapDeps([258,1,2,8,4,5,9,45,12,15,11,13,46,241]))},"metal-cot-net":{load:()=>H(()=>import(`./metal-cot-net-B5BW2stR.js`).then(e=>e.metalCotNetFrame),__vite__mapDeps([259,1,2,8,4,5,9,45,12,15,11,13,46,241]))},"metal-cot-breakdown":{load:()=>H(()=>import(`./metal-cot-breakdown-B83N5bkN.js`).then(e=>e.metalCotBreakdownFrame),__vite__mapDeps([260,1,2,8,4,5,9,22,12,15,23,241,13]))},"metal-cot-gauge":{load:()=>H(()=>import(`./metal-cot-gauge-DK-PBRRk.js`).then(e=>e.metalCotGaugeFrame),__vite__mapDeps([261,1,2,8,4,5,9,162,12,15,241,13]))},"metal-open-interest":{load:()=>H(()=>import(`./metal-open-interest-BFYrS2KP.js`).then(e=>e.metalOpenInterestFrame),__vite__mapDeps([262,1,2,8,4,5,9,45,12,15,11,13,46,241]))},"metal-positioning-vs-price":{load:()=>H(()=>import(`./metal-positioning-vs-price-BPxrZcR9.js`).then(e=>e.metalPositioningVsPriceFrame),__vite__mapDeps([263,1,2,8,4,5,9,45,12,15,11,13,46,241]))},"us-gold-reserve":{load:()=>H(()=>import(`./us-gold-reserve-8L2oYWV_.js`).then(e=>e.usGoldReserveFrame),__vite__mapDeps([264,2,1,8,4,5,9,23]))},"us-gold-vaults":{load:()=>H(()=>import(`./us-gold-vaults-TuTFtr2T.js`).then(e=>e.usGoldVaultsFrame),__vite__mapDeps([265,1,2,8,4,5,9,66,12,15,22]))},"tokenized-gold":{load:()=>H(()=>import(`./tokenized-gold-B6KMvUVf.js`).then(e=>e.tokenizedGoldFrame),__vite__mapDeps([266,2,1,8,4,5,9]))}},jf=2e6,Mf=new Set([`__proto__`,`constructor`,`prototype`]);function Nf(e){let t=e.toLowerCase().replace(/^\[|\]$/g,``);if(t===`localhost`||t===`0.0.0.0`||t.endsWith(`.localhost`)||t.endsWith(`.local`)||t.endsWith(`.internal`)||t===`::1`||t===`::`)return!0;let n=t.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);if(n){let[e,t]=[Number(n[1]),Number(n[2])];if(e===127||e===10||e===0||e===192&&t===168||e===172&&t>=16&&t<=31||e===169&&t===254||e===100&&t>=64&&t<=127)return!0}return!!(/^f[cd][0-9a-f]{2}:/i.test(t)||/^fe[89ab][0-9a-f]:/i.test(t))}function Pf(e){let t;try{t=new URL(e)}catch{return`not a valid URL`}return t.protocol===`https:`?t.username||t.password?`URLs with embedded credentials are not allowed`:Nf(t.hostname)?`private/localhost hosts are not allowed`:null:`only https:// URLs are allowed`}function Ff(e){if(e.length===0)throw Error(`path is empty`);if(e.length>200)throw Error(`path longer than 200 chars`);let t=[];for(let n of e.split(`.`)){let r=n.match(/^([^[\]]*)((?:\[[^[\]]*\])*)$/);if(!r)throw Error(`bad path segment "${n}"`);let[,i,a]=r;if(i===`*`)t.push({kind:`wildcard`});else if(i!==``)t.push({kind:`key`,key:i});else if(a===``)throw Error(`empty path segment in "${e}"`);if(a)for(let e of a.match(/\[[^[\]]*\]/g)??[]){let n=e.slice(1,-1);if(n===`*`)t.push({kind:`wildcard`});else if(/^\d+$/.test(n))t.push({kind:`index`,index:Number(n)});else throw Error(`bad bracket "${e}" — use [0]-style indices or [*]`)}}if(t.length===0)throw Error(`path is empty`);if(t.length>16)throw Error(`path deeper than 16 segments`);for(let e of t)if(e.kind===`key`&&Mf.has(e.key))throw Error(`"${e.key}" is not allowed in a path`);return t}function If(e,t){if(!(typeof e!=`object`||!e)&&!Array.isArray(e))return Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0}function Lf(e,t,n){let r=e;for(let e=n;e<t.length;e++){let n=t[e];if(n.kind===`key`)r=If(r,n.key);else if(n.kind===`index`)r=Array.isArray(r)?r[n.index]:void 0;else{if(!Array.isArray(r))return;let n=[];for(let i of r.slice(0,500)){let r=Lf(i,t,e+1);if(r!==void 0&&(Array.isArray(r)?n.push(...r.slice(0,500)):n.push(r),n.length>=500))break}return n.slice(0,500)}if(r===void 0)return}return r}function Rf(e,t){let n=Lf(e,Ff(t),0);return Array.isArray(n)?n.slice(0,500):n}function zf(e){return e.length>200?`${e.slice(0,200)}…`:e}function Bf(e){return(Array.isArray(e)?e:[e]).slice(0,500).map(e=>{if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`boolean`)return String(e);if(typeof e==`string`){let t=Number(e);return e.trim()!==``&&Number.isFinite(t)?t:zf(e)}if(e==null)return`—`;try{return zf(JSON.stringify(e)??`—`)}catch{return`—`}})}function Vf(e){return e.filter(e=>typeof e==`number`)}var U=e=>`/widget-icons/${e}.png`,Hf=()=>R([`hyperliquid`,`bitkub`]).optional().describe(`Which exchange to source this card from — "hyperliquid" (default: crypto + HIP-3 stock/commodity perps, USD) or "bitkub" (Thailand's largest exchange, THB-quoted, the venue where KUB trades). Omit for the default. Use venue-native symbols: Bitkub lists bare tickers like "KUB"/"BTC" and has no HIP-3 stock perps.`),W={hyperliquid:{name:`Hyperliquid`,url:`https://hyperliquid.xyz`},defillama:{name:`DeFiLlama`,url:`https://defillama.com`},coingecko:{name:`CoinGecko`,url:`https://www.coingecko.com`},alternativeMe:{name:`alternative.me`,url:`https://alternative.me/crypto/fear-and-greed-index/`},bls:{name:`BLS`,url:`https://www.bls.gov`},nyFed:{name:`NY Fed`,url:`https://www.newyorkfed.org/markets/reference-rates`},treasury:{name:`U.S. Treasury`,url:`https://fiscaldata.treasury.gov`},secEdgar:{name:`SEC EDGAR`,url:`https://www.sec.gov/edgar`},finra:{name:`FINRA`,url:`https://www.finra.org/finra-data/browse-catalog/short-sale-volume-data`},ofr:{name:`OFR`,url:`https://www.financialresearch.gov/financial-stress-index/`},mempool:{name:`mempool.space`,url:`https://mempool.space`},deribit:{name:`Deribit`,url:`https://www.deribit.com`},coinpaprika:{name:`Coinpaprika`,url:`https://coinpaprika.com`},frankfurter:{name:`Frankfurter (ECB)`,url:`https://frankfurter.dev`},coinMetrics:{name:`Coin Metrics`,url:`https://coinmetrics.io`},bitcoinData:{name:`bitcoin-data.com`,url:`https://bitcoin-data.com`},ultrasound:{name:`ultrasound.money`,url:`https://ultrasound.money`},polymarket:{name:`Polymarket`,url:`https://polymarket.com`},sosovalue:{name:`SoSoValue`,url:`https://sosovalue.com`},geckoterminal:{name:`GeckoTerminal`,url:`https://www.geckoterminal.com`},blockchair:{name:`Blockchair`,url:`https://blockchair.com`},bitkub:{name:`Bitkub`,url:`https://www.bitkub.com`},goldApi:{name:`gold-api.com`,url:`https://gold-api.com`},lbma:{name:`LBMA`,url:`https://www.lbma.org.uk/prices-and-data/precious-metal-prices`},cftc:{name:`CFTC`,url:`https://www.cftc.gov/MarketReports/CommitmentsofTraders/index.htm`}},Uf=y({name:`clock`,label:`Clock`,category:`tools`,iconUrl:U(`clock`),layout:{w:3,h:2,minW:2,minH:1},description:`Digital clock showing the current time, ticking every second. Configurable IANA timezone (defaults to the viewer's local zone), 12/24-hour format, optional seconds and date, the timezone abbreviation, and a caption label. Drop several with different timezones for a trading-desk world clock. Needs no data provider.`,capabilities:[],schema:L({timezone:F().default(``).describe(`IANA timezone, e.g. "America/New_York", "Europe/London", "Asia/Tokyo", "UTC". Empty = the viewer's local timezone.`),label:F().default(``).describe(`Caption under the time, e.g. "New York" or "Local". Empty hides it.`),hour12:eo().default(!1).describe(`12-hour clock with AM/PM (true) or 24-hour (false).`),showSeconds:eo().default(!0).describe(`Show seconds (HH:MM:SS) instead of just HH:MM.`),showMillis:eo().default(!1).describe(`Show milliseconds (HH:MM:SS.mmm), updated smoothly each animation frame. Implies seconds.`),showDate:eo().default(!1).describe(`Show the weekday and date under the time.`),showTimezone:eo().default(!0).describe(`Show the timezone abbreviation (e.g. "EST", "GMT+7", "UTC") in the caption. Combines with the label when set, e.g. "New York · EST".`)})}),Wf=y({name:`market-hours`,label:`Market Hours`,category:`tools`,iconUrl:U(`market-hours`),layout:{w:4,h:4,minW:3,minH:3},description:`Which world stock exchanges are open right now — each row shows an open / closed / holiday status dot and a live countdown to the next open or close. Computed entirely client-side from each exchange's timezone and regular trading hours (no API); a bundled 2026 holiday list keeps the major Western exchanges accurate on market holidays. Intraday lunch breaks and half-day early closes are not modelled. Needs no data provider.`,capabilities:[],schema:L({exchanges:oo(F()).default([]).describe(`Exchange codes to show, e.g. ["NYSE","LSE","TSE","HKEX","SET"]. Empty = a global default set. Known codes: NYSE, NASDAQ, TSX, B3, LSE, XETRA, EURONEXT, SIX, TSE, HKEX, SSE, NSE, KRX, SGX, SET, ASX, JSE, TADAWUL.`),sort:R([`region`,`status`,`name`]).default(`region`).describe(`Order rows by world region (Americas → Europe → Asia-Pacific → Middle East/Africa), by status (open first), or alphabetically by name.`)})}),Gf=y({name:`fear-greed`,label:`Fear & Greed`,category:`sentiment`,iconUrl:U(`fear-greed`),layout:{w:3,h:3,minW:2,minH:2},description:`Crypto Fear & Greed index (0 = extreme fear, 100 = extreme greed) with a recent-history sparkline. A one-number market mood gauge from alternative.me.`,capabilities:[`sentiment`],source:W.alternativeMe,schema:L({sparklineDays:I().int().min(7).max(90).default(30).describe(`How many days of index history to show in the sparkline.`)})}),Kf=y({name:`funding-rate-chart`,label:`Funding Rate Chart`,category:`derivatives`,iconUrl:U(`funding-rate-chart`),layout:{w:6,h:3,minW:3,minH:2},description:`Multi-series line chart comparing hourly perp funding rates across symbols over a configurable lookback window. Positive funding = longs pay shorts. Useful for spotting crowded trades.`,capabilities:[`funding-history`],source:W.hyperliquid,schema:L({symbols:oo(F()).min(1).max(6).describe(`Hyperliquid symbols to compare funding for, e.g. ["xyz:TSLA", "xyz:NVDA"]. Up to 6.`),lookback:R([`24h`,`7D`,`1M`]).default(`7D`).describe(`History window for the funding chart.`)})}),qf=y({name:`note`,label:`Note`,category:`layout`,iconUrl:U(`note`),layout:{w:4,h:3,minW:2,minH:2},description:"Free-form text note pinned to the dashboard — trading plans, reminders, watch levels. Renders a safe Markdown subset: **bold**, *italic*, `inline code`, [links](https://…), #/##/### headings, and - / 1. lists. Plain text still renders as written. Needs no data provider.",capabilities:[],chrome:`plain`,schema:L({text:F().min(1).describe("The note's text content. Renders a safe Markdown subset — **bold**, *italic*, `code`, [text](https://url), #/##/### headings, and unordered (-) / ordered (1.) lists (raw HTML is never executed). Blank lines start new paragraphs; single newlines become line breaks. Plain text works too."),align:R([`left`,`center`]).default(`left`).describe(`Text alignment inside the card.`)})}),Jf=y({name:`price-chart`,label:`Price Chart`,category:`markets`,iconUrl:U(`price-chart`),layout:{w:6,h:3,minW:3,minH:2},description:`Live animated price chart (candlestick or line) for one symbol — canvas-rendered at 60fps via liveline, streaming live off the Hyperliquid WebSocket. Works for any HIP-3 perp — stocks (xyz:TSLA), indices (xyz:SP500), commodities (xyz:GOLD) — and crypto (BTC). The centerpiece frame.`,capabilities:[`ohlcv`,`quote-stream`],source:[W.hyperliquid,W.bitkub],schema:L({symbol:F().min(1).describe(`Hyperliquid symbol to chart. HIP-3 cross-asset: stocks "xyz:TSLA"/"xyz:NVDA", indices "xyz:SP500"/"xyz:XYZ100", commodities "xyz:GOLD"/"xyz:CL", FX "xyz:EUR". Crypto: "BTC", "ETH".`),interval:R([`1m`,`5m`,`15m`,`1h`,`4h`,`1d`]).default(`1h`).describe(`Candle interval.`),mode:R([`candle`,`line`]).default(`candle`).describe(`Candlestick or smooth line rendering.`),color:F().default(`#8b8df9`).describe(`Accent color (hex). The whole palette derives from it.`),venue:Hf()})}),Yf=y({name:`price-liveline`,label:`Price Liveline`,category:`markets`,iconUrl:U(`price-liveline`),layout:{w:6,h:3,minW:4,minH:2},description:`Multi-asset live price liveline — several Hyperliquid symbols streaming in one canvas chart. Defaults to normalized % movement so stocks and crypto can share one axis, while the legend still shows each asset's live raw price. Use when the dashboard needs one compact live race view instead of several single-symbol charts.`,capabilities:[`quote-stream`,`day-stats`],source:W.hyperliquid,schema:L({symbols:oo(F()).min(2).max(8).describe(`Hyperliquid symbols to stream together — great cross-asset (the normalized view races a stock vs the index vs gold vs crude), e.g. ["xyz:NVDA", "xyz:SP500", "xyz:GOLD", "xyz:CL"], or all-equity ["xyz:TSLA", "xyz:NVDA", "xyz:AAPL"], or crypto ["BTC", "ETH", "SOL"]. 2 to 8.`),windowSec:I().int().min(10).max(300).default(30).describe(`Rolling live window in seconds. 30 mirrors the zhive liveline view; use 60–300 for slower dashboards.`),normalize:eo().default(!0).describe(`Show each asset as % movement from its first live tick (recommended when prices differ). Off = raw price overlay.`)})}),Xf=y({name:`price-ticker`,label:`Price Ticker`,category:`markets`,iconUrl:U(`price-ticker`),layout:{w:3,h:3,minW:2,minH:2},description:`Live watchlist streaming mid prices over the Hyperliquid WebSocket with 24h change per symbol. The bread-and-butter frame for any dashboard.`,capabilities:[`quote-stream`,`day-stats`],source:W.hyperliquid,schema:L({symbols:oo(F()).min(1).describe(`Hyperliquid symbols to track — mix asset classes, e.g. ["xyz:NVDA", "xyz:SP500", "xyz:GOLD", "xyz:EUR"] or all-equity ["xyz:TSLA", "xyz:NVDA", "xyz:AAPL"]. Crypto works too: "BTC", "ETH".`)})}),Zf=y({name:`top-movers`,label:`Top Movers`,category:`markets`,iconUrl:U(`top-movers`),layout:{w:5,h:3,minW:3,minH:3},description:`Today's biggest stock and commodity HIP-3 gainers and losers (no bare crypto), side by side with current price and 24h change.`,capabilities:[`day-stats`],source:[W.hyperliquid,W.bitkub],schema:L({count:I().int().min(3).max(10).default(5).describe(`How many gainers and losers to list (each).`),venue:Hf()})}),Qf=y({name:`tvl-treemap`,label:`TVL Treemap`,category:`crypto`,iconUrl:U(`tvl-treemap`),layout:{w:6,h:4,minW:3,minH:3},description:`Treemap of total value locked (TVL) across the largest blockchain ecosystems, sized by TVL. Data from DeFiLlama. Good single-glance answer to 'where does on-chain capital live right now'.`,capabilities:[`tvl`],source:W.defillama,schema:L({topN:I().int().min(3).max(30).default(12).describe(`How many of the largest chains to show in the treemap.`)})}),$f=y({name:`bitcoin-dominance`,label:`Bitcoin Dominance`,category:`crypto`,iconUrl:U(`bitcoin-dominance`),layout:{w:4,h:2,minW:3,minH:2},description:`BTC / ETH / Others market-cap dominance as a segmented bar, with optional total marketcap line. Shifts in BTC dominance hint at where the market rotates next.`,capabilities:[`global-market`],source:W.coingecko,schema:L({showTotalMarketCap:eo().default(!0).describe(`Show total crypto marketcap and its 24h change below the bar.`)})}),ep=y({name:`rates-board`,label:`Rates Board`,category:`macro`,iconUrl:U(`rates-board`),layout:{w:4,h:4,minW:3,minH:3},description:`Official US rates board from free public APIs: New York Fed reference rates (SOFR, effective fed funds, repo rates) plus Treasury average interest rates by security class. Daily/reference data, not a real-time stock quote feed.`,capabilities:[`reference-rates`,`treasury-rates`],source:[W.nyFed,W.treasury],schema:L({maxReferenceRates:I().int().min(2).max(8).default(5).describe(`How many New York Fed reference rates to show.`),showTreasuryAverageRates:eo().default(!0).describe(`Also show Treasury average interest rates by security class from Fiscal Data.`),maxTreasuryRates:I().int().min(1).max(8).default(4).describe(`How many Treasury average-rate rows to show.`)})}),tp=y({name:`fx-board`,label:`FX Board`,category:`macro`,iconUrl:U(`fx-board`),layout:{w:4,h:4,minW:3,minH:3},description:`Foreign-exchange board from the ECB's free daily reference rates (via Frankfurter, no key): each currency's latest rate vs a base, its day-over-day change, and a short trend sparkline. Daily reference data with broader currency coverage than the handful of FX perps — not a live intraday quote feed.`,capabilities:[`fx-rates`],source:W.frankfurter,schema:L({base:F().length(3).default(`USD`).describe(`Base currency (ISO 4217 code) each rate is quoted against, e.g. "USD". One unit of the base buys the shown amount of each listed currency.`),symbols:oo(F().length(3)).min(1).max(12).default([`EUR`,`GBP`,`JPY`,`CHF`,`CAD`,`AUD`]).describe(`Currencies to show (ISO 4217 codes), e.g. ["EUR","GBP","JPY"]. The ECB publishes ~30; a code equal to the base is skipped.`),showSparkline:eo().default(!0).describe(`Show a small ~30-day trend sparkline next to each rate.`)})}),np=y({name:`inflation-pulse`,label:`Inflation Pulse`,category:`macro`,iconUrl:U(`inflation-pulse`),layout:{w:4,h:3,minW:3,minH:2},description:`BLS CPI pulse from the public no-key API: latest CPI-U all-items index with month-over-month and year-over-year changes plus a small trend sparkline. Monthly macro context for stock dashboards; not a live price feed.`,capabilities:[`macro-series`],source:W.bls,schema:L({months:I().int().min(13).max(36).default(18).describe(`How many monthly CPI observations to show in the trend.`)})}),rp=y({name:`financial-stress`,label:`Financial Stress`,category:`macro`,iconUrl:U(`financial-stress`),layout:{w:4,h:3,minW:3,minH:2},description:"The OFR Financial Stress Index — a daily, market-based gauge of systemic financial stress from the U.S. Office of Financial Research. One headline value where 0 is the long-run average (positive = elevated stress, negative = calmer than normal), an optional breakdown of the five contributing categories (credit, equity valuation, safe assets, funding, volatility), and a trend line. Keyless official data, updated each business day; needs the zframes runtime's data proxy (ships with `zframes serve` / `vite dev`). Not a price feed.",capabilities:[`financial-stress`],source:W.ofr,schema:L({trendDays:I().int().min(20).max(90).default(60).describe(`How many recent daily readings to plot in the trend line.`),showCategories:eo().default(!0).describe(`Show the five category contributions (credit, equity valuation, safe assets, funding, volatility) under the headline.`)})}),ip=y({name:`national-debt`,label:`National Debt`,category:`macro`,iconUrl:U(`national-debt`),layout:{w:4,h:3,minW:3,minH:2},description:`U.S. total public debt outstanding from the Treasury's keyless 'Debt to the Penny' dataset — the headline total in trillions, the change over the chosen window, an optional split into debt held by the public vs intragovernmental holdings, and a trend line. Official data updated each business day; CORS-safe (no proxy needed). Macro context, not a live price feed.`,capabilities:[`national-debt`],source:W.treasury,schema:L({trendDays:I().int().min(30).max(365).default(180).describe(`How many business days of history to load for the trend and the change figure.`),showSplit:eo().default(!0).describe(`Show the debt-held-by-the-public vs intragovernmental-holdings split.`)})}),ap=y({name:`labor-market`,label:`Labor Market`,category:`macro`,iconUrl:U(`labor-market`),layout:{w:4,h:3,minW:3,minH:2},description:`U.S. labor-market snapshot from the BLS keyless public API: the headline unemployment rate, the latest monthly change in nonfarm payrolls (jobs added or lost), the total payroll level, and an unemployment-rate trend line. Monthly macro context for stock dashboards; updates on the BLS jobs-report schedule, not a live feed.`,capabilities:[`macro-series`],source:W.bls,schema:L({months:I().int().min(13).max(36).default(18).describe(`How many monthly observations to show in the trend.`)})}),op=y({name:`treasury-auctions`,label:`Treasury Auctions`,category:`macro`,iconUrl:U(`treasury-auctions`),layout:{w:5,h:4,minW:3,minH:3},description:`Recent completed U.S. Treasury auctions from the keyless Fiscal Data API — each row shows the security (bill/note/bond + term), the high awarded yield, and the bid-to-cover ratio (demand: total bids ÷ amount accepted; higher = stronger). Newest first. Official market-plumbing data, CORS-safe; updates as auctions settle, not a live price feed.`,capabilities:[`treasury-auctions`],source:W.treasury,schema:L({count:I().int().min(3).max(20).default(8).describe(`How many recent auctions to list (newest first).`)})}),sp=y({name:`filings-feed`,label:`Filings Feed`,category:`equities`,iconUrl:U(`filings-feed`),layout:{w:5,h:4,minW:3,minH:3},description:`Recent SEC EDGAR filings for one US-listed company — each row shows the form type (10-K, 10-Q, 8-K, Form 4…), a plain-English label, the filing date, and a click-through to the document on sec.gov, under a header with the company name, exchange, and filer category. Official data from SEC's free, CORS-safe submissions endpoint; event-driven (updates when the company files), not a price feed. Resolve by ticker (a bundled snapshot of the ~500 largest US issuers) or by raw SEC CIK for anything else.`,capabilities:[`filings`],source:W.secEdgar,schema:L({symbol:F().min(1).describe(`Company to show filings for — a ticker ("AAPL", "NVDA"), a HIP-3 symbol ("xyz:TSLA"), or a raw SEC CIK ("320193"). Tickers outside the bundled top-500 map need a CIK.`),forms:R([`important`,`all`,`insider`]).default(`important`).describe(`Which filings to surface: "important" = periodic & material reports (10-K, 10-Q, 8-K, S-1, proxies, 13D/G…); "insider" = ownership forms (3/4/5/144); "all" = unfiltered. Always newest first.`),count:I().int().min(3).max(25).default(8).describe(`How many filings to list (newest first).`)})}),cp=y({name:`yield-curve`,label:`Yield Curve`,category:`macro`,iconUrl:U(`yield-curve`),layout:{w:4,h:3,minW:3,minH:3},description:`The U.S. Treasury daily par yield curve — a line from 1-month to 30-year yields, the headline 2s10s spread (10Y minus 2Y; negative = inverted, the classic recession signal), and a configurable row of key maturities. Keyless official data from the U.S. Treasury, updated each business day; not a live intraday feed.`,capabilities:[`yield-curve`],source:W.treasury,schema:L({maturities:oo(R([`1M`,`2M`,`3M`,`4M`,`6M`,`1Y`,`2Y`,`3Y`,`5Y`,`7Y`,`10Y`,`20Y`,`30Y`])).min(2).max(8).default([`3M`,`2Y`,`5Y`,`10Y`,`30Y`]).describe(`Maturities to show as labelled cells under the curve (the full curve line always shows every maturity).`)})}),lp=y({name:`fundamentals`,label:`Fundamentals`,category:`equities`,iconUrl:U(`fundamentals`),layout:{w:4,h:4,minW:3,minH:3},description:"Headline financials for one US-listed company from SEC EDGAR XBRL company facts — revenue, net income, total assets, shareholders' equity, diluted EPS, and shares outstanding, each labelled with its fiscal period. Income-statement figures are the latest full fiscal year; balance-sheet figures are the latest reported quarter. Keyless official data that updates only when the company files (annual/quarterly), not a live feed. Requires the zframes runtime's data proxy (it ships with `zframes serve` / `vite dev`); resolve by ticker (bundled top-500 map) or raw SEC CIK.",capabilities:[`fundamentals`],source:W.secEdgar,schema:L({symbol:F().min(1).describe(`Company to show financials for — a ticker ("AAPL", "NVDA"), a HIP-3 symbol ("xyz:NVDA"), or a raw SEC CIK ("320193"). Tickers outside the bundled top-500 map need a CIK.`)})}),up=y({name:`short-volume`,label:`Short Volume`,category:`equities`,iconUrl:U(`short-volume`),layout:{w:5,h:4,minW:3,minH:3},description:`Daily reported short-sale volume for a watchlist of US-listed stocks, from FINRA's free consolidated file — each row shows the % of the day's reported volume that was sold short, with a bar and the raw short/total share counts. IMPORTANT: this is reported short volume (sell-side short flow, which includes market-maker hedging), NOT short interest (outstanding short positions), and is not a directional signal on its own. Daily data published the next business day; not a live feed. US equities only.`,capabilities:[`short-volume`],source:W.finra,schema:L({symbols:oo(F()).min(1).max(12).describe(`US-listed stock tickers to show, e.g. ["TSLA","NVDA","AAPL"]. HIP-3 symbols ("xyz:TSLA") work too — the dex prefix is stripped. Crypto has no SEC/FINRA short-volume and is ignored.`),sort:R([`shortPct`,`volume`,`symbol`]).default(`shortPct`).describe(`Order rows by short % of volume (highest first), by total volume (highest first), or alphabetically by symbol.`)})}),dp=y({name:`funding-heatmap`,label:`Funding Heatmap`,category:`derivatives`,iconUrl:U(`funding-heatmap`),layout:{w:6,h:3,minW:4,minH:3},description:`Heatmap of perp funding rates — symbols as rows, daily average over the last 7 days as columns, green positive / red negative. Spots persistent funding regimes at a glance.`,capabilities:[`funding-history`],source:W.hyperliquid,schema:L({symbols:oo(F()).min(2).max(8).describe(`Hyperliquid symbols as heatmap rows — at least 2, since the heatmap compares funding across symbols, e.g. ["xyz:TSLA", "xyz:NVDA", "xyz:AAPL"].`)})}),fp=y({name:`dino-game`,label:`Dino Game`,category:`games`,iconUrl:U(`dino-game`),layout:{w:4,h:3,minW:3,minH:3},description:`Chrome-dino style runner game on canvas — jump cacti with SPACE or tap. High score persists locally. For when the market is boring. Needs no data provider.`,capabilities:[],schema:L({})}),pp=y({name:`image`,label:`Image`,category:`layout`,iconUrl:U(`image`),layout:{w:3,h:3,minW:1,minH:1},description:`Displays an image from a URL — logos, memes, chart screenshots, banners. Needs no data provider.`,capabilities:[],chrome:`plain`,schema:L({url:F().min(1).describe(`Image URL (https).`),alt:F().default(``).describe(`Alt text for accessibility.`),fit:R([`cover`,`contain`]).default(`cover`).describe(`How the image fills the frame: cover crops, contain letterboxes.`)})}),mp=y({name:`hero-number`,label:`Hero Number`,category:`layout`,iconUrl:U(`hero-number`),layout:{w:3,h:2,minW:2,minH:1},description:`A big manual KPI card you fill in yourself — one headline number, a caption, and an optional signed change. Static text, not a live feed: use it to pin a figure that has no provider (a target, a personal goal, a fact from elsewhere), e.g. '$39.6T' national debt or '127 EH/s' hashrate. Needs no data provider.`,capabilities:[],chrome:`plain`,schema:L({value:F().min(1).describe(`The headline figure, shown large. Free text so you can include units/symbols, e.g. "$39.6T", "127 EH/s", "4.25%".`),label:F().default(``).describe(`Caption naming what the number is, e.g. "US National Debt". Empty hides it.`),delta:F().default(``).describe(`Optional change chip shown under the number, e.g. "+1.5%" or "-3 blocks". Empty hides it.`),deltaDir:R([`up`,`down`,`neutral`]).default(`neutral`).describe(`Tint for the delta chip: up = gain color, down = loss color, neutral = muted. Purely cosmetic — it does not parse the delta text.`),sublabel:F().default(``).describe(`Optional small line under the delta for context, e.g. "as of Jul 2026". Empty hides it.`)})}),hp=y({name:`image-gallery`,label:`Image Gallery`,category:`layout`,iconUrl:U(`image-gallery`),layout:{w:4,h:3,minW:2,minH:2},description:`A rotating gallery that cross-fades through a list of images on a timer — chart screenshots, memes, banners, a mood board. Needs no data provider.`,capabilities:[],chrome:`plain`,schema:L({images:oo(L({url:F().min(1).describe(`Image URL (https).`),alt:F().default(``).describe(`Alt text for accessibility.`)})).min(1).describe(`The images to rotate through, in order. At least one.`),intervalSec:I().int().min(0).default(6).describe(`Seconds between cross-fades when there is more than one image. 0 shows the first image, fixed.`),fit:R([`cover`,`contain`]).default(`cover`).describe(`How each image fills the frame: cover crops to fill, contain letterboxes.`)})}),gp=y({name:`heading`,label:`Heading`,category:`layout`,iconUrl:U(`heading`),layout:{w:12,h:1,minW:2,minH:1,maxH:1},description:`Section divider that titles a region of the dashboard ('Markets', 'On-chain', 'Desk'). Renders as a label with a hairline rule — no card. Use to group frames into zones: place full-width (w: 12) and 1 row tall (h: 1) above each group. Needs no data provider.`,capabilities:[],chrome:`bare`,schema:L({title:F().min(1).describe(`The heading text.`),subtitle:F().optional().describe(`Smaller supporting line under the title.`),accent:I().min(0).max(360).optional().describe(`Optional hue (0–360) that tints the marker dot, the rule, and the title. Omit to use the dashboard's own accent (the default look).`),align:R([`left`,`center`]).default(`left`).describe(`Left aligns the label with a trailing rule (default); center places the label between rules on both sides.`)})}),_p=y({name:`daily-analysis`,label:`Daily Analysis`,category:`tools`,iconUrl:U(`daily-analysis`),layout:{w:6,h:3,minW:3,minH:2},description:`Daily market brief written by the /zframes-brief loop — a dated analysis of the symbols on your dashboard, the calls it is making today, and how yesterday's calls scored (with a running hit-rate). Reads a local log file the loop appends to; needs no market data provider. Add one per dashboard.`,capabilities:[],schema:L({src:F().default(`/daily-analysis.json`).describe(`URL of the analysis log the loop writes, served from the app's public/ dir. Leave as the default unless you renamed the file.`),entries:I().int().min(1).max(5).default(1).describe(`How many of the most recent daily entries to show (newest first).`),refreshSec:I().int().min(30).default(300).describe(`How often (seconds) to re-fetch the log so a fresh brief appears without a manual reload.`)})}),vp=y({name:`journal-log`,label:`Journal · Log`,category:`journal`,iconUrl:U(`journal-log`),layout:{w:4,h:5,minW:3,minH:4},source:W.hyperliquid,description:`Log a market read in seconds: pick a supported ticker (with its live Hyperliquid price), Long or Short, the reason (a quick pick + optional note), and how sure you are (a slider). That's it — a falsifiable call, captured at the live price, that the Open/Results frames then track and grade. The simple front door to your decision journal; pairs with the zAI orb for conversational capture. Add one alongside Journal · Open and Journal · Results.`,capabilities:[`quote-stream`,`day-stats`],schema:L({})}),yp=y({name:`journal-open`,label:`Journal · Open`,category:`journal`,iconUrl:U(`journal-open`),layout:{w:4,h:4,minW:3,minH:3},description:`Your open calls from the decision journal, each marking to the live Hyperliquid price — direction, confidence, unrealized % return, a live entry→target track, and a countdown. Calls auto-grade at their horizon (or close one early). The 'watch it play out' frame. Reads the journal you write with Journal · Log.`,source:W.hyperliquid,capabilities:[`quote-stream`],schema:L({max:I().int().min(1).max(20).default(8).describe(`How many open calls to show (newest first).`)})}),bp=y({name:`journal-results`,label:`Journal · Results`,category:`journal`,iconUrl:U(`journal-results`),layout:{w:4,h:4,minW:3,minH:3},description:`Your resolved calls from the decision journal, graded on TWO axes: did it hit, AND did the thesis actually play out — so a lucky hit reads differently from earned skill, and a near-miss from a clean miss. The reflection frame. Reads the journal you write with Journal · Log.`,capabilities:[],schema:L({max:I().int().min(1).max(20).default(8).describe(`How many resolved calls to show (newest first).`)})}),xp=y({name:`journal-score`,label:`Journal · Scoreboard`,category:`journal`,iconUrl:U(`journal-score`),layout:{w:4,h:3,minW:3,minH:3},description:`The decision-journal scoreboard — a story, not a spreadsheet: where your judgment has an edge, where it leaks, and how calibrated your confidence is, plus a one-line read from zAI. Aggregates the calls logged via Journal · Log.`,capabilities:[],schema:L({})}),Sp=y({name:`price-compare`,label:`Price Compare`,category:`markets`,iconUrl:U(`price-compare`),layout:{w:6,h:3,minW:3,minH:2},description:`Multi-series line chart overlaying the price history of several symbols over a lookback window — see how TSLA, NVDA and BTC moved against each other. Normalized by default to % change from the window start so symbols at very different price levels (BTC vs a $20 stock) stay comparable on one axis. Candles from Hyperliquid.`,capabilities:[`ohlcv`],source:W.hyperliquid,schema:L({symbols:oo(F()).min(2).max(6).describe(`Hyperliquid symbols to overlay, e.g. ["xyz:TSLA", "xyz:NVDA", "BTC"]. 2 to 6.`),lookback:R([`24h`,`7D`,`1M`]).default(`7D`).describe(`History window for the comparison.`),normalize:eo().default(!0).describe(`Rebase each series to % change from the window start (recommended — lets symbols at different price levels share one axis). Off = raw price, only sensible when comparing similarly-priced symbols.`)})}),Cp={source:R([`binance`,`wallet`]).default(`binance`).describe(`Where the holdings come from: "binance" (a connected Binance account — a read-only API key is entered in-app and stored locally, never in this file) or "wallet" (a public on-chain address, keyless).`),address:F().default(``).describe(`For source "wallet": the public Ethereum address (0x…) or ENS name to track. Public on-chain data, no keys. Ignored for "binance".`)},wp=y({name:`portfolio-value`,label:`Portfolio Value`,category:`portfolio`,iconUrl:U(`portfolio-value`),layout:{w:5,h:4,minW:3,minH:3},description:`Your connected portfolio's total USD value as a live equity line, ticking with the market. Source is a connected Binance account (read-only key, entered in-app) or a public on-chain wallet address. Shows total value + session change. Renders a connect prompt until a source is set.`,capabilities:[`portfolio`,`quote-stream`],account:!0,schema:L({...Cp,windowSec:I().int().positive().default(300).describe(`Seconds of live history the equity line shows; it accumulates from when the dashboard opens.`)})}),Tp=y({name:`portfolio-allocation`,label:`Portfolio Allocation`,category:`portfolio`,iconUrl:U(`portfolio-allocation`),layout:{w:4,h:4,minW:3,minH:3},description:`Donut of your connected portfolio's allocation — each slice sized by live USD value, total in the center. Source is a connected Binance account (read-only key, in-app) or a public on-chain wallet address. Renders a connect prompt until a source is set.`,capabilities:[`portfolio`,`quote-stream`],account:!0,schema:L({...Cp})}),Ep=y({name:`portfolio-holdings`,label:`Portfolio Holdings`,category:`portfolio`,iconUrl:U(`portfolio-holdings`),layout:{w:4,h:4,minW:3,minH:3},description:`Table of your connected portfolio's positions — asset, amount, live USD value, share of total, 24h change. Source is a connected Binance account (read-only key, in-app) or a public on-chain wallet address. Renders a connect prompt until a source is set.`,capabilities:[`portfolio`,`quote-stream`],account:!0,schema:L({...Cp})}),Dp=y({name:`news-feed`,label:`News Feed`,category:`sentiment`,iconUrl:U(`news-feed`),layout:{w:4,h:4,minW:3,minH:3},description:'Scrolling feed of the latest news headlines from a chosen outlet — each row is a clickable headline with its publish time, newest first. Free, keyless RSS sources: crypto press (CoinDesk, Cointelegraph, Decrypt), broad markets/macro (CNBC, Nasdaq), or — source "stocks" — per-company headlines (via Google News) scoped to the specific tickers in `symbols`. IMPORTANT: news feeds are CORS-blocked, so this frame reads them through the zframes runtime\'s data proxy (it ships with `zframes serve` / `vite dev`); on a fully static host with no runtime it shows an empty state.',capabilities:[`news`],schema:L({source:R([`coindesk`,`cointelegraph`,`decrypt`,`cnbc`,`nasdaq`,`stocks`]).default(`coindesk`).describe('Which feed to show. Crypto press: "coindesk", "cointelegraph", "decrypt". Markets/macro: "cnbc", "nasdaq". "stocks" = per-company headlines (Google News) for the tickers in `symbols`.'),symbols:oo(F()).default([]).describe(`Only used when source is "stocks": stock tickers to pull headlines for, e.g. ["TSLA","NVDA","AAPL"]. HIP-3 symbols ("xyz:TSLA") work too — the dex prefix is stripped. Ignored for the other sources.`),count:I().int().min(3).max(20).default(8).describe(`How many headlines to list (newest first).`)})}),Op=y({name:`dex-volume-treemap`,label:`DEX Volume Treemap`,category:`crypto`,iconUrl:U(`dex-volume-treemap`),layout:{w:6,h:4,minW:3,minH:3},description:`Treemap of decentralized-exchange (DEX) protocols sized by trailing-24h trading volume, tiles colored green/red by 1-day change. Data from DeFiLlama. One-glance read on where on-chain trading flow is concentrated right now.`,capabilities:[`dex-volume`],source:W.defillama,schema:L({topN:I().int().min(3).max(30).default(12).describe(`How many of the highest-volume DEX protocols to show.`)})}),kp=y({name:`dex-volume-chart`,label:`DEX Volume Chart`,category:`crypto`,iconUrl:U(`dex-volume-chart`),layout:{w:6,h:3,minW:3,minH:2},description:`Multi-series line chart of daily DEX trading volume for several protocols over a lookback window — compare how Uniswap, PancakeSwap, Aerodrome etc. trend against each other. Data from DeFiLlama (daily granularity).`,capabilities:[`dex-volume`],source:W.defillama,schema:L({protocols:oo(F()).min(1).max(6).describe(`DeFiLlama DEX protocol slugs (lowercase, hyphenated), e.g. ["uniswap", "pancakeswap", "aerodrome-slipstream"]. 1 to 6.`),lookback:R([`7D`,`1M`,`3M`]).default(`1M`).describe(`History window for the chart.`)})}),Ap=y({name:`protocol-tvl-treemap`,label:`Protocol TVL Treemap`,category:`crypto`,iconUrl:U(`protocol-tvl-treemap`),layout:{w:6,h:4,minW:3,minH:3},description:`Treemap of DeFi protocols sized by current total value locked (TVL), tiles colored green/red by 1-day change. Data from DeFiLlama. Unlike tvl-treemap (which groups by blockchain), this ranks individual protocols (Lido, Aave, EigenLayer…).`,capabilities:[`protocol-tvl`],source:W.defillama,schema:L({topN:I().int().min(3).max(30).default(12).describe(`How many of the largest protocols by TVL to show.`)})}),jp=y({name:`protocol-tvl-chart`,label:`Protocol TVL Chart`,category:`crypto`,iconUrl:U(`protocol-tvl-chart`),layout:{w:6,h:3,minW:3,minH:2},description:`Multi-series line chart of total value locked (TVL) for several DeFi protocols over a lookback window. Data from DeFiLlama (daily granularity).`,capabilities:[`protocol-tvl`],source:W.defillama,schema:L({protocols:oo(F()).min(1).max(6).describe(`DeFiLlama protocol slugs (lowercase, hyphenated), e.g. ["lido", "aave", "eigenlayer"]. 1 to 6.`),lookback:R([`7D`,`1M`,`3M`]).default(`1M`).describe(`History window for the chart.`)})}),Mp=y({name:`protocol-fees-treemap`,label:`Protocol Fees Treemap`,category:`crypto`,iconUrl:U(`protocol-fees-treemap`),layout:{w:6,h:4,minW:3,minH:3},description:`Treemap of protocols sized by the fees they generated in the last 24h, tiles colored green/red by 1-day change. Data from DeFiLlama. Shows where on-chain users are actually paying for blockspace and services right now.`,capabilities:[`protocol-fees`],source:W.defillama,schema:L({topN:I().int().min(3).max(30).default(12).describe(`How many of the highest fee-earning protocols to show.`)})}),Np=y({name:`market-cap-treemap`,label:`Market Cap Treemap`,category:`crypto`,iconUrl:U(`market-cap-treemap`),layout:{w:6,h:4,minW:3,minH:3},description:`Treemap of the largest cryptocurrencies sized by market capitalisation, tiles colored green/red by 24h price change. Data from CoinGecko (free tier). A heat-map of the whole crypto market at a glance.`,capabilities:[`coin-markets`],source:W.coingecko,schema:L({topN:I().int().min(5).max(50).default(12).describe(`How many of the largest coins by market cap to show (up to 50).`)})}),Pp=y({name:`open-interest`,label:`Open Interest`,category:`derivatives`,iconUrl:U(`open-interest`),layout:{w:4,h:3,minW:3,minH:2},description:`Live open interest across a watchlist of Hyperliquid perps — each symbol is a horizontal bar sized by USD notional, largest first, refreshed on a ~30s poll. Single-venue (Hyperliquid only), so read it as a relative gauge across your symbols, not a market-wide total. Stocks (HIP-3, e.g. "xyz:TSLA") and crypto both work.`,capabilities:[`open-interest`],source:W.hyperliquid,schema:L({symbols:oo(F()).min(1).max(20).describe(`Hyperliquid symbols to compare open interest for, e.g. ["BTC", "ETH", "xyz:TSLA"]. A "<dex>:*" wildcard (e.g. "xyz:*") pulls that dex's entire universe.`)})}),Fp=y({name:`snake`,label:`Snake`,category:`games`,iconUrl:U(`snake`),layout:{w:4,h:4,minW:3,minH:3},description:`Classic snake game on canvas — steer with the arrow keys (or swipe), eat dots to grow, avoid the walls and your own tail. High score persists locally. For when the market is flat. Needs no data provider.`,capabilities:[],schema:L({})}),Ip=y({name:`flappy-bird`,label:`Flappy Bird`,category:`games`,iconUrl:U(`flappy-bird`),layout:{w:4,h:4,minW:3,minH:3},description:`Flappy-bird style game on canvas — tap or press SPACE to flap through the gaps between pipes. High score persists locally. Needs no data provider.`,capabilities:[],schema:L({})}),Lp=y({name:`video`,label:`Video`,category:`layout`,iconUrl:U(`video`),layout:{w:4,h:3,minW:2,minH:2},description:`Embeds a video from a YouTube or Vimeo link (or any direct embed URL) as an iframe — a livestream, a market-news clip, a focus playlist. Needs no data provider.`,capabilities:[],chrome:`plain`,schema:L({url:F().min(1).describe(`Video URL — a YouTube watch/share link, a Vimeo link, or a direct embeddable URL (https).`),title:F().default(`Video`).describe(`Accessible title for the embedded player (iframe title).`)})}),Rp=y({name:`drawdy`,label:`Drawdy`,category:`layout`,iconUrl:U(`drawdy`),layout:{w:8,h:6,minW:2,minH:2},description:`Embeds drawdy.io as an interactive whiteboard canvas. No configuration needed.`,capabilities:[],schema:L({})}),zp=y({name:`countdown`,label:`Countdown`,category:`tools`,iconUrl:U(`countdown`),layout:{w:3,h:2,minW:2,minH:1},description:`Live countdown to a target date and time — FOMC decisions, CPI prints, options expiry, earnings, a token unlock, the next market open. Counts down in days / hours / minutes / seconds, ticking every second, and flips to a 'reached' state once the moment passes. Needs no data provider.`,capabilities:[],schema:L({target:F().default(``).describe(`The moment to count down to, as an ISO 8601 string. Add a timezone for an unambiguous instant, e.g. "2026-07-30T18:00:00-04:00" or "2026-12-31T23:59:59Z"; a bare "2026-07-30T18:00" is read in the viewer's local timezone. Empty shows a "set a target" prompt.`),label:F().default(``).describe(`Caption above the countdown, e.g. "FOMC Decision". Empty hides it.`),showTarget:eo().default(!0).describe(`Show the formatted target date and time under the countdown.`)})}),Bp=y({name:`link-grid`,label:`Quick Links`,category:`tools`,iconUrl:U(`link-grid`),layout:{w:3,h:2,minW:2,minH:1},description:`A grid of quick-launch tiles linking to your favourite sites — TradingView, exchanges, news, docs, your own dashboards. Each tile opens in a new tab and shows the destination site's favicon by default (fetched keyless from a public favicon service), with an optional per-link icon override and a first-letter fallback. Needs no data provider.`,capabilities:[],chrome:`plain`,schema:L({links:oo(L({label:F().min(1).describe(`Tile caption, e.g. "TradingView".`),url:F().min(1).describe(`Destination URL (https). Opens in a new tab.`),icon:F().default(``).describe(`Optional icon override: an emoji (e.g. "📈") or an https image URL. Empty uses the destination site's favicon, falling back to the label's first letter.`)})).min(1).default([{label:`TradingView`,url:`https://www.tradingview.com`,icon:`📈`},{label:`Hyperliquid`,url:`https://app.hyperliquid.xyz`,icon:`⚡`}]).describe(`The links to show as tiles. At least one.`),columns:I().int().min(1).max(4).default(2).describe(`How many tiles per row.`)})}),Vp=y({name:`calculator`,label:`Position Calculator`,category:`tools`,iconUrl:U(`calculator`),layout:{w:3,h:3,minW:2,minH:2},description:`Position-size & risk calculator. Enter account size, risk-per-trade %, entry and stop price; it computes the dollars at risk, the per-unit risk, the position size (units) that respects that risk budget, the resulting position value, and whether the setup is long or short. All math runs client-side — no data provider. Inputs are editable live; the configured values are the starting point.`,capabilities:[],schema:L({account:I().positive().default(1e4).describe(`Account size used as the risk base, in the quote currency.`),riskPct:I().positive().max(100).default(1).describe(`Percent of the account risked on the trade, e.g. 1 = 1%.`),entry:I().positive().default(100).describe(`Entry price.`),stop:I().positive().default(95).describe(`Stop-loss price. Its distance from entry sets the per-unit risk; below entry = long, above = short.`),currency:F().default(`$`).describe(`Currency symbol shown next to money values.`)})}),Hp=y({name:`quote`,label:`Quote`,category:`layout`,iconUrl:U(`quote`),layout:{w:4,h:2,minW:2,minH:1},description:`Displays a market or trading quote, centered — set one or rotate through several. A calm bit of wall-art for the dashboard: trading maxims, reminders of your own rules, mantras. Write any attribution into the text itself (e.g. "… — Buffett"). Needs no data provider.`,capabilities:[],chrome:`plain`,schema:L({quotes:oo(F().min(1)).min(1).default([`Be fearful when others are greedy, and greedy when others are fearful. — Warren Buffett`,`The trend is your friend until the end when it bends.`,`Plan the trade, trade the plan.`]).describe(`One or more quotes. With more than one, the frame rotates through them.`),intervalSec:I().int().min(0).default(12).describe(`Seconds between rotations when there are multiple quotes. 0 shows the first quote, fixed.`)})}),Up=y({name:`divider`,label:`Divider`,category:`layout`,iconUrl:U(`divider`),layout:{w:12,h:1,minW:1,minH:1},description:`A plain rule that separates regions of the dashboard, with an optional centered label. Renders chrome-less (no card) — lighter than a heading. Use a horizontal divider full-width between stacked zones, or set orientation to vertical for a 1-column-wide column separator. Needs no data provider.`,capabilities:[],chrome:`bare`,schema:L({label:F().default(``).describe(`Optional text shown in the middle of the rule. Empty = a clean line.`),orientation:R([`horizontal`,`vertical`]).default(`horizontal`).describe(`Horizontal rule (spans the width) or vertical rule (spans the height).`),style:R([`solid`,`dashed`,`dotted`]).default(`solid`).describe(`Line style.`),accent:I().min(0).max(360).optional().describe(`Optional hue (0–360) that tints the rule and its label. Omit for the default subtle hairline.`),thickness:I().int().min(1).max(8).default(1).describe(`Rule thickness in pixels. 1 is the default hairline.`)})}),Wp=y({name:`dice`,label:`Dice`,category:`tools`,iconUrl:U(`dice`),layout:{w:2,h:2,minW:1,minH:1},description:`A click-to-decide widget — a random decision-maker with no data provider. Flip a coin (heads/tails), roll a die (1–6), or pick at random from your own list of options. Click the surface to re-roll. Use it to break a tie, pick what to trade, or settle any small decision.`,capabilities:[],schema:L({mode:R([`coin`,`dice`,`list`]).default(`coin`).describe(`coin = heads/tails, dice = 1–6, list = random pick from options.`),options:oo(F()).default([`Yes`,`No`]).describe(`Choices used in list mode.`),label:F().default(``).describe(`Optional caption, e.g. the question being decided.`)})}),Gp=y({name:`risk-reward`,label:`Risk / Reward`,category:`tools`,iconUrl:U(`risk-reward`),layout:{w:3,h:3,minW:2,minH:2},description:`Risk:reward planner. Enter entry, stop-loss and profit-target prices; it computes the per-unit risk and reward, their percentages of entry, and the resulting R:R ratio, shown large above a two-segment bar (red risk leg vs green reward leg, sized to scale). Pure client-side math — no data provider. Complements the calculator frame by adding the target/reward leg the position sizer leaves out.`,capabilities:[],schema:L({entry:I().default(100).describe(`Planned entry price.`),stop:I().default(95).describe(`Stop-loss price.`),target:I().default(115).describe(`Profit target price.`),direction:R([`long`,`short`]).default(`long`).describe(`Trade direction. Long expects stop < entry < target; short expects target < entry < stop — used for labels and to flag a mismatched setup.`),label:F().default(``).describe(`Optional caption.`)})}),Kp=y({name:`marquee`,label:`Marquee`,category:`layout`,iconUrl:U(`marquee`),layout:{w:6,h:1,minW:2,minH:1},description:`A chrome-less scrolling banner that glides custom text continuously right-to-left across the frame (think stadium ticker / news crawl). Renders with no card — it fills the whole frame. Use for a slogan, a reminder, or a hype line. Needs no data provider.`,capabilities:[],chrome:`bare`,schema:L({text:F().default(`LFG`).describe(`The text that scrolls across the banner.`),speed:R([`slow`,`normal`,`fast`]).default(`normal`).describe(`Scroll speed.`),accent:eo().default(!0).describe(`Tint the text with the dashboard accent color.`)})}),qp=y({name:`stopwatch`,label:`Stopwatch`,layout:{w:3,h:2,minW:2,minH:1},category:`tools`,iconUrl:U(`stopwatch`),description:`A count-up stopwatch — time-in-trade, a focus session, how long a setup has been live. Start / Pause / Reset, ticking up in H:MM:SS, and it persists across reloads (the running state is saved into the dashboard, so it keeps counting where it left off). Runs entirely client-side — needs no data provider.`,capabilities:[],schema:L({label:F().default(`Session`).describe(`Caption above the timer.`),startedAt:I().default(0).describe(`Epoch ms when the timer was last started; 0 = paused. Persisted automatically by the frame.`),accumulatedMs:I().default(0).describe(`Milliseconds banked before the current run. Persisted automatically by the frame.`)})}),Jp=y({name:`session-progress`,label:`Session Progress`,category:`tools`,iconUrl:U(`session-progress`),layout:{w:3,h:2,minW:2,minH:1},description:`A horizontal progress bar showing how far through today's trading session an exchange is — fills from open to close with a percent readout, and a 'closes in …' / 'opens in …' countdown. Pick any exchange code (NYSE, NASDAQ, LSE, TSX, B3, …); sessions are computed client-side from the exchange's timezone and hours, so it needs no data provider.`,capabilities:[],schema:L({exchange:F().default(`NYSE`).describe(`Exchange code: NYSE, NASDAQ, LSE, TSX, B3, …`),label:F().default(``).describe(`Optional caption shown by the exchange code.`),showCountdown:eo().default(!0).describe(`Show the time-to-open / time-to-close countdown.`)})}),Yp=y({name:`holiday-calendar`,label:`Holiday Calendar`,category:`tools`,iconUrl:U(`holiday-calendar`),layout:{w:3,h:4,minW:2,minH:2},description:`Upcoming market holidays (full closures) for a chosen exchange — the next few dates with their weekday and a countdown ('in 9d'). Pick any exchange code (NYSE, NASDAQ, LSE, TSX, B3, …); dates come from a bundled holiday table and are computed client-side, so it needs no data provider. Note: the bundled table currently covers 2026.`,capabilities:[],schema:L({exchange:F().default(`NYSE`).describe(`Exchange code: NYSE, NASDAQ, LSE, TSX, B3, …`),count:I().int().min(1).max(20).default(5).describe(`How many upcoming holidays to list.`),label:F().default(``).describe(`Optional caption shown above the list.`)})}),Xp=y({name:`day-meter`,label:`Day Meter`,category:`tools`,iconUrl:U(`day-meter`),layout:{w:4,h:2,minW:2,minH:1},description:`A strip of the current week's days for a chosen exchange — today highlighted, market holidays flagged in amber, and (optionally) non-trading days greyed. Computed client-side from the exchange's trading days + a bundled holiday table; needs no data provider.`,capabilities:[],schema:L({exchange:F().default(`NYSE`).describe(`Exchange code: NYSE, NASDAQ, LSE, TSX, B3, …`),weekdaysOnly:eo().default(!0).describe(`Show only the exchange's trading days; off shows the full 7-day week with weekends greyed.`),label:F().default(``).describe(`Optional caption shown by the strip.`)})}),Zp=y({name:`returns-projector`,label:`Returns Projector`,category:`tools`,iconUrl:U(`returns-projector`),layout:{w:3,h:4,minW:2,minH:3},description:"A compound-growth projector — enter a starting principal, a percent return per period, the number of periods, and an optional per-period contribution; it charts the projected balance curve and shows the ending value and total gain. Pure client-side math, no data provider; complements the position-size/risk `calculator`.",capabilities:[],schema:L({principal:I().default(1e3).describe(`Starting balance.`),ratePct:I().default(5).describe(`Return per period, in percent (e.g. 5 = 5%).`),periods:I().int().min(1).max(600).default(12).describe(`Number of compounding periods to project.`),contribution:I().default(0).describe(`Amount added at the end of each period.`),label:F().default(``).describe(`Optional caption.`)})}),Qp=y({name:`breakeven`,label:`Break-even`,category:`tools`,iconUrl:U(`breakeven`),layout:{w:3,h:4,minW:2,minH:2},description:`A break-even / average-cost calculator — add your fills (price + size) and it computes the size-weighted average entry; set an optional current price to see the unrealized P&L %. Pure client-side math, no data provider.`,capabilities:[],schema:L({fills:oo(L({price:I().describe(`Fill price.`),size:I().describe(`Fill size, in units.`)})).default([{price:100,size:1}]).describe(`Your entry fills; their size-weighted average is the break-even.`),currentPrice:I().default(0).describe(`Optional current price; greater than 0 shows the unrealized P&L %.`),label:F().default(``).describe(`Optional caption.`)})}),$p=y({name:`checklist`,label:`Checklist`,category:`tools`,iconUrl:U(`checklist`),layout:{w:3,h:3,minW:2,minH:2},description:`A tickable checklist — a pre-trade routine, a daily ritual, anything. Tap items to check them off; the checked state persists across reloads (saved into the dashboard). Client-side only, no data provider.`,capabilities:[],schema:L({title:F().default(`Pre-trade checklist`).describe(`Heading shown above the list.`),items:oo(F()).default([`Trend & bias aligned`,`Stop level set`,`Risk sized correctly`]).describe(`The checklist items, top to bottom.`),checked:oo(eo()).default([]).describe(`Per-item checked state (by index); persisted automatically by the frame.`)})}),em=y({name:`pomodoro`,label:`Pomodoro`,category:`tools`,iconUrl:U(`pomodoro`),layout:{w:3,h:3,minW:2,minH:2},description:`A Pomodoro focus timer — alternating work and break intervals with Start / Pause / Reset and a cycle counter, counting down in MM:SS. Runs entirely client-side with no data provider; timer state is in-session (not persisted).`,capabilities:[],schema:L({workMin:I().min(1).max(180).default(25).describe(`Work interval length, in minutes.`),breakMin:I().min(1).max(120).default(5).describe(`Break interval length, in minutes.`),cycles:I().int().min(1).max(20).default(4).describe(`Work/break cycles before the counter loops.`),label:F().default(``).describe(`Optional caption.`)})}),tm=y({name:`rules-card`,label:`Rules`,category:`layout`,iconUrl:U(`rules-card`),layout:{w:3,h:3,minW:2,minH:2},description:"A pinned, auto-numbered list of your trading rules (or any principles) — always fully visible, unlike the rotating `quote` frame. Static text, client-side, no data provider.",capabilities:[],schema:L({title:F().default(`My rules`).describe(`Heading shown above the list.`),rules:oo(F()).default([`Cut losers fast, let winners run`,`No trade without a stop`,`One setup at a time`]).describe(`The rules, in order; rendered as a numbered list.`)})}),nm=y({name:`breathing`,label:`Breathing`,category:`layout`,iconUrl:U(`breathing`),chrome:`bare`,layout:{w:2,h:2,minW:1,minH:1},description:`A chrome-less breathing pacer — a circle that expands and contracts through configurable inhale / hold / exhale / hold phases to steady your breathing between trades. Renders with no card; client-side only, no data provider.`,capabilities:[],schema:L({inhale:I().min(1).max(60).default(4).describe(`Inhale seconds.`),hold:I().min(0).max(60).default(4).describe(`Hold-after-inhale seconds.`),exhale:I().min(1).max(60).default(4).describe(`Exhale seconds.`),holdAfter:I().min(0).max(60).default(4).describe(`Hold-after-exhale seconds.`)})}),rm=y({name:`spotify-embed`,label:`Spotify`,category:`layout`,iconUrl:U(`spotify-embed`),layout:{w:3,h:4,minW:2,minH:2},description:"Embeds a Spotify track, album, playlist, artist, or show from its public open.spotify.com share link (same embed approach as the `video` frame), using Spotify's official keyless iframe player. Needs an internet connection to play.",capabilities:[],schema:L({url:F().default(`https://open.spotify.com/playlist/37i9dQZF1DXcBWIGoYBM5M`).describe(`A Spotify share URL (open.spotify.com/track|album|playlist|artist/…).`),compact:eo().default(!1).describe(`Use Spotify's compact (single-row) player height.`)})}),im=y({name:`btc-fees`,label:`BTC Fees`,category:`bitcoin`,iconUrl:U(`btc-fees`),layout:{w:3,h:3,minW:2,minH:3},description:`Recommended Bitcoin on-chain fee rates (sat/vB) from mempool.space — the next-block ('fastest'), ~30-minute, ~1-hour, economy, and minimum tiers, as a compact gauge. Live mempool data, keyless; updates every ~30s.`,capabilities:[`btc-fees`],source:W.mempool,schema:L({tiers:oo(R([`fastest`,`halfHour`,`hour`,`economy`,`minimum`])).min(1).max(5).default([`fastest`,`halfHour`,`hour`,`economy`]).describe(`Which fee tiers to show, in order. "fastest" = next block, "halfHour"/"hour" = within ~30/60 min, "economy"/"minimum" = cheapest relayable.`)})}),am=y({name:`btc-mempool`,label:`BTC Mempool`,category:`bitcoin`,iconUrl:U(`btc-mempool`),layout:{w:5,h:3,minW:3,minH:2},description:`Bitcoin mempool congestion at a glance — unconfirmed transaction count, total pending vsize, and a row of projected ('template') blocks the network will likely mine next, each labelled with its median fee rate (sat/vB) and tx count. Live mempool data from mempool.space, keyless.`,capabilities:[`btc-mempool`],source:W.mempool,schema:L({projectedBlocks:I().int().min(1).max(8).default(5).describe(`How many projected (yet-to-be-mined) blocks to show, next-to-mine first.`)})}),om=y({name:`btc-blocks`,label:`BTC Blocks`,category:`bitcoin`,iconUrl:U(`btc-blocks`),layout:{w:5,h:4,minW:3,minH:3},description:`Feed of the most recently mined Bitcoin blocks — each row shows the height, how long ago it was mined, transaction count, the mining pool that found it, total fees (BTC), and size. Live data from mempool.space, keyless; newest first.`,capabilities:[`btc-blocks`],source:W.mempool,schema:L({count:I().int().min(3).max(15).default(8).describe(`How many recent blocks to list (newest first).`)})}),sm=y({name:`btc-hashrate`,label:`BTC Hashrate`,category:`bitcoin`,iconUrl:U(`btc-hashrate`),layout:{w:6,h:3,minW:3,minH:2},description:`Bitcoin network hashrate over time as a line chart, with the current hashrate (EH/s) and difficulty as headline figures. Shows the long-run security trend of the network. Data from mempool.space (daily granularity), keyless.`,capabilities:[`btc-hashrate`],source:W.mempool,schema:L({window:R([`1y`,`2y`,`3y`]).default(`1y`).describe(`History window for the hashrate line.`)})}),cm=y({name:`btc-difficulty`,label:`BTC Difficulty`,category:`bitcoin`,iconUrl:U(`btc-difficulty`),layout:{w:4,h:3,minW:3,minH:2},description:`Countdown to the next Bitcoin difficulty adjustment — a progress bar through the current 2016-block epoch, the estimated change (+ = mining gets harder), blocks remaining, and the estimated retarget date. Also shows the previous adjustment. Data from mempool.space, keyless.`,capabilities:[`btc-difficulty`],source:W.mempool,schema:L({showPrevious:eo().default(!0).describe(`Also show the percentage change applied at the previous retarget.`)})}),lm=y({name:`mining-pools`,label:`Mining Pools`,category:`bitcoin`,iconUrl:U(`mining-pools`),layout:{w:6,h:4,minW:3,minH:3},description:`Treemap of Bitcoin mining-pool dominance over a window — each tile is a pool sized by the share of blocks it mined, so you can see how concentrated hashpower is right now (Foundry, AntPool, ViaBTC…). Data from mempool.space, keyless.`,capabilities:[`mining-pools`],source:W.mempool,schema:L({window:R([`24h`,`3d`,`1w`,`1m`]).default(`1w`).describe(`Window over which to measure each pool's block share.`),topN:I().int().min(3).max(25).default(12).describe(`How many of the largest pools to show; the rest fold into 'Other'.`)})}),um=y({name:`lightning-stats`,label:`Lightning Network`,category:`bitcoin`,iconUrl:U(`lightning-stats`),layout:{w:4,h:3,minW:3,minH:2},description:`Bitcoin Lightning Network snapshot — public node count, channel count, and total network capacity (BTC), with a day-over-day delta and the Tor/clearnet node split. Data from mempool.space, keyless; updates roughly daily.`,capabilities:[`lightning-stats`],source:W.mempool,schema:L({showSplit:eo().default(!0).describe(`Show the Tor vs clearnet node split under the headline stats.`)})}),dm=y({name:`options-put-call`,label:`Put / Call Ratio`,category:`derivatives`,iconUrl:U(`options-put-call`),layout:{w:4,h:3,minW:3,minH:2},description:`Deribit options put/call ratio for BTC or ETH — the headline ratio (by open interest or 24h volume), a call-vs-put open-interest split bar, and the open-interest-weighted average implied volatility. A ratio above 1 means puts outweigh calls (defensive positioning). Keyless Deribit market data.`,capabilities:[`options-summary`],source:W.deribit,schema:L({currency:R([`BTC`,`ETH`]).default(`BTC`).describe(`Which Deribit options book to summarise — BTC or ETH (the only deeply liquid books).`),basis:R([`oi`,`volume`]).default(`oi`).describe(`Headline put/call ratio basis: "oi" = by open interest (positioning), "volume" = by 24h traded volume (flow). The other is shown smaller.`)})}),fm=y({name:`options-iv`,label:`Implied Volatility`,category:`derivatives`,iconUrl:U(`options-iv`),layout:{w:6,h:3,minW:3,minH:2},description:`Deribit DVOL implied-volatility index for BTC or ETH over time — the crypto equivalent of the VIX, as a line chart with the current reading and its change over the window. Rising DVOL = the market is pricing bigger expected swings. Keyless Deribit market data.`,capabilities:[`volatility-index`],source:W.deribit,schema:L({currency:R([`BTC`,`ETH`]).default(`BTC`).describe(`Which DVOL volatility index to plot — BTC or ETH.`),lookback:R([`7D`,`1M`,`3M`]).default(`1M`).describe(`History window for the volatility-index line.`)})}),pm=y({name:`options-oi-strike`,label:`OI by Strike`,category:`derivatives`,iconUrl:U(`options-oi-strike`),layout:{w:6,h:4,minW:4,minH:3},description:`Open interest by strike for the nearest Deribit options expiry (BTC or ETH) — a grouped histogram of call vs put open interest across strikes, with the current spot marked. Surfaces the strike 'walls' where positioning is concentrated. Keyless Deribit market data.`,capabilities:[`options-summary`],source:W.deribit,schema:L({currency:R([`BTC`,`ETH`]).default(`BTC`).describe(`Which Deribit options book — BTC or ETH.`),strikes:I().int().min(6).max(30).default(14).describe(`How many strikes nearest the current spot to show (centered on the underlying price).`)})}),mm=y({name:`coin-movers`,label:`Coin Movers`,category:`markets`,iconUrl:U(`coin-movers`),layout:{w:5,h:4,minW:3,minH:3},description:`Broad-market crypto gainers and losers across the top ~300 coins by market cap, over a selectable window (1h / 24h / 7d / 30d) — the biggest movers side by side with price and % change. Unlike a top-coins heatmap, this surfaces mid- and small-caps that ripped or dumped, not just the megacaps. Keyless data from Coinpaprika. Crypto only.`,capabilities:[`coin-movers`],source:W.coinpaprika,schema:L({window:R([`1h`,`24h`,`7d`,`30d`]).default(`24h`).describe(`Which price-change window ranks the movers: 1h (intraday momentum), 24h (daily), 7d (weekly), 30d (monthly).`),count:I().int().min(3).max(15).default(6).describe(`How many gainers and how many losers to list (each side).`),minRank:I().int().min(20).max(300).default(150).describe(`Only consider coins ranked at or above this market-cap rank — a liquidity floor that keeps illiquid micro-cap dust (which posts absurd % moves on no volume) out of the list. Lower = stricter (megacaps only); higher = includes more small-caps.`)})}),hm=y({name:`mvrv`,label:`MVRV Ratio`,category:`onchain`,iconUrl:U(`mvrv`),layout:{w:3,h:3,minW:2,minH:2},description:`Bitcoin MVRV ratio — market cap ÷ realized cap. Above ~3 historically marks cycle tops (overvalued); below ~1 marks deep value near bottoms. Shows the current ratio, its valuation zone, the MVRV Z-score, and a history sparkline. Keyless on-chain data from Coin Metrics.`,capabilities:[`onchain-valuation`],source:W.coinMetrics,schema:L({window:R([`1Y`,`2Y`,`4Y`,`all`]).default(`all`).describe(`How much history the sparkline shows.`)})}),gm=y({name:`nupl`,label:`NUPL`,category:`onchain`,iconUrl:U(`nupl`),layout:{w:3,h:3,minW:2,minH:2},description:`Net Unrealized Profit/Loss — the share of Bitcoin's market cap held in unrealized profit. Maps to cycle sentiment phases: Capitulation (<0), Hope/Fear (0–25%), Optimism (25–50%), Belief (50–75%), Euphoria/Greed (>75%). Derived from MVRV; keyless Coin Metrics data.`,capabilities:[`onchain-valuation`],source:W.coinMetrics,schema:L({window:R([`1Y`,`2Y`,`4Y`,`all`]).default(`all`).describe(`How much history the sparkline shows.`)})}),_m=y({name:`sopr`,label:`SOPR`,category:`onchain`,iconUrl:U(`sopr`),layout:{w:3,h:3,minW:2,minH:2},description:`Spent Output Profit Ratio — whether coins moving on-chain are, on average, being sold in profit (>1) or loss (<1). Sustained dips below 1 mark capitulation; resets to ~1 in bull markets are healthy. Keyless full-history data from bitcoin-data.com (polled once daily).`,capabilities:[`onchain-cycle-extras`],source:W.bitcoinData,schema:L({window:R([`90D`,`180D`,`1Y`]).default(`1Y`).describe(`How much history the sparkline shows.`)})}),vm=y({name:`puell-multiple`,label:`Puell Multiple`,category:`onchain`,iconUrl:U(`puell-multiple`),layout:{w:3,h:3,minW:2,minH:2},description:`Puell Multiple — daily miner issuance in USD ÷ its 365-day average. High values (>4) mark cycle tops where miner revenue is stretched; low values (≤0.5) mark miner capitulation near bottoms. Keyless data from bitcoin-data.com (polled once daily).`,capabilities:[`onchain-cycle-extras`],source:W.bitcoinData,schema:L({window:R([`90D`,`180D`,`1Y`]).default(`1Y`).describe(`How much history the sparkline shows.`)})}),ym=y({name:`mayer-multiple`,label:`Mayer Multiple`,category:`onchain`,iconUrl:U(`mayer-multiple`),layout:{w:3,h:3,minW:2,minH:2},description:`Mayer Multiple — BTC price ÷ its 200-day moving average. Above ~2.4 has historically been overheated; below ~0.8 marks value zones. Computed in-browser from a keyless long daily price series (Coin Metrics).`,capabilities:[`price-history-daily`],source:W.coinMetrics,schema:L({window:R([`1Y`,`2Y`,`4Y`,`all`]).default(`2Y`).describe(`How much history the sparkline shows.`)})}),bm=y({name:`pi-cycle`,label:`Pi Cycle Top`,category:`onchain`,iconUrl:U(`pi-cycle`),layout:{w:3,h:3,minW:2,minH:2},description:`Pi Cycle Top indicator — the ratio of the 111-day MA to 2× the 350-day MA. When it crosses 1 (the 111DMA overtakes 2×350DMA) it has historically pinpointed cycle tops within days. Computed in-browser from a keyless long daily price series (Coin Metrics).`,capabilities:[`price-history-daily`],source:W.coinMetrics,schema:L({window:R([`1Y`,`2Y`,`4Y`,`all`]).default(`2Y`).describe(`How much history the sparkline shows.`)})}),xm=y({name:`ma-multiplier`,label:`MA Multiplier`,category:`onchain`,iconUrl:U(`ma-multiplier`),layout:{w:3,h:3,minW:2,minH:2},description:`Long moving-average multiplier — BTC price ÷ its multi-year moving average (2-year or 4-year). The 2Y band flags a buy zone below ÷1.5 and sell tiers at ×2–×5; the 4Y multiple marks tops above ~3.5×. Computed in-browser from a keyless long daily price series (Coin Metrics).`,capabilities:[`price-history-daily`],source:W.coinMetrics,schema:L({years:R([`2`,`4`]).default(`2`).describe(`Moving-average window in years.`),window:R([`2Y`,`4Y`,`all`]).default(`all`).describe(`How much history the sparkline shows.`)})}),Sm=y({name:`rsi-momentum`,label:`RSI Momentum`,category:`markets`,iconUrl:U(`rsi-momentum`),layout:{w:3,h:3,minW:2,minH:2},description:`Wilder RSI on BTC daily closes with a 55/45 momentum regime: above 55 = risk-on, below 45 = risk-off, in between = neutral. Also flags classic overbought (≥80) / oversold (≤30) extremes. Computed in-browser from a keyless long daily price series (Coin Metrics).`,capabilities:[`price-history-daily`],source:W.coinMetrics,schema:L({period:I().int().min(2).max(50).default(14).describe(`RSI lookback period in days.`),window:R([`90D`,`180D`,`1Y`,`2Y`]).default(`180D`).describe(`How much history the sparkline shows.`)})}),Cm=y({name:`volume-profile`,label:`Volume Profile`,category:`markets`,iconUrl:U(`volume-profile`),layout:{w:4,h:4,minW:3,minH:3},description:`Volume-by-price histogram over a lookback window — the Point of Control (POC, highest-volume price) and the 70% Value Area (VAH/VAL) that frame support/resistance. Computed in-browser from OHLCV candles. Pass any tradable symbol (crypto or a HIP-3 equity like 'xyz:TSLA').`,capabilities:[`ohlcv`],source:W.hyperliquid,schema:L({symbol:F().default(`BTC`).describe(`Symbol to profile, e.g. 'BTC', 'ETH', or a HIP-3 equity 'xyz:TSLA'.`),interval:R([`1h`,`4h`,`1d`]).default(`1d`).describe(`Candle interval.`),lookbackDays:I().int().min(7).max(365).default(90).describe(`How many days of candles to build the profile from.`),bins:I().int().min(8).max(48).default(24).describe(`Number of price buckets in the histogram.`)})}),wm=y({name:`dxy`,label:`Dollar Index (DXY)`,category:`macro`,iconUrl:U(`dxy`),layout:{w:3,h:3,minW:2,minH:2},description:`US Dollar Index (DXY) — the dollar's strength vs a basket of six major currencies. A rising DXY is a macro headwind for risk assets (incl. BTC); a falling DXY a tailwind. Computed as the ICE-weighted geometric mean of keyless ECB reference rates (daily granularity).`,capabilities:[`dollar-index`],source:W.frankfurter,schema:L({})}),Tm=y({name:`cycle-signals`,label:`Cycle Signals`,category:`onchain`,iconUrl:U(`cycle-signals`),layout:{w:4,h:5,minW:3,minH:3},description:`A cycle top- or bottom-signal checklist — MVRV, MVRV Z-score, NUPL, Mayer Multiple, Puell, RSI, and Pi Cycle each checked against its historical extreme, with a live 'X of N firing' tally. A capstone that aggregates the on-chain and cycle metrics into one 'how late in the cycle are we' read. Keyless (Coin Metrics + bitcoin-data.com).`,capabilities:[`onchain-valuation`,`onchain-cycle-extras`,`price-history-daily`],source:[W.coinMetrics,W.bitcoinData],schema:L({mode:R([`peak`,`bottom`]).default(`peak`).describe(`Which checklist to show: cycle-top ('peak') or cycle-bottom ('bottom') signals.`)})}),Em=y({name:`stablecoin-supply`,label:`Stablecoin Supply`,category:`crypto`,iconUrl:U(`stablecoin-supply`),layout:{w:3,h:3,minW:2,minH:2},description:`Total USD-stablecoin circulating supply — a market-wide liquidity gauge. Rising supply = fresh capital entering crypto (risk-on dry powder); contraction = risk-off. Shows the total, 1d/7d/30d change, and the largest chains. Keyless (DeFiLlama).`,capabilities:[`stablecoins`],source:W.defillama,schema:L({})}),Dm=y({name:`yield-scanner`,label:`Yield Scanner`,category:`crypto`,iconUrl:U(`yield-scanner`),layout:{w:5,h:4,minW:3,minH:3},description:`Top DeFi yield pools ranked by APY, across every chain and protocol — the 'where's the yield' board. Filter to stablecoin pools or a TVL floor. Shows APY (base + reward), TVL, chain, and IL risk. Keyless (DeFiLlama yields).`,capabilities:[`yields`],source:W.defillama,schema:L({limit:I().int().min(3).max(20).default(8).describe(`How many pools to list.`),stablecoinOnly:eo().default(!1).describe(`Only show stablecoin pools (lower impermanent-loss risk).`),minTvlUsd:I().min(0).default(1e6).describe(`Minimum pool TVL in USD — a liquidity floor to hide dust.`)})}),Om=y({name:`defi-revenue`,label:`DeFi Fees & Revenue`,category:`crypto`,iconUrl:U(`defi-revenue`),layout:{w:3,h:3,minW:2,minH:2},description:`Aggregate DeFi protocol fees across all of crypto — trailing-24h total with a daily trend. A read on real on-chain economic activity. Keyless (DeFiLlama).`,capabilities:[`fees-overview`],source:W.defillama,schema:L({})}),km=y({name:`funding-comparison`,label:`Cross-Venue Funding`,category:`derivatives`,iconUrl:U(`funding-comparison`),layout:{w:5,h:4,minW:3,minH:3},description:`Predicted perpetual funding rates compared across venues (Hyperliquid vs Binance vs Bybit), annualized, per coin — ranked by the cross-venue spread. A large spread flags a funding-arbitrage or crowded-positioning signal. Keyless (Hyperliquid predicted fundings).`,capabilities:[`funding-comparison`],source:W.hyperliquid,schema:L({limit:I().int().min(3).max(20).default(8).describe(`How many coins (by funding spread) to show.`)})}),Am=y({name:`eth-supply`,label:`ETH Ultrasound`,category:`crypto`,iconUrl:U(`eth-supply`),layout:{w:4,h:3,minW:2,minH:2},description:`Ethereum supply economics — EIP-1559 burn vs PoS issuance and the resulting net annual supply growth. Negative growth = deflationary ('ultrasound money'). Shows the net rate, burn/issuance, and vs the counterfactual PoW issuance. Keyless (ultrasound.money).`,capabilities:[`eth-supply`],source:W.ultrasound,schema:L({})}),jm=y({name:`eth-staking`,label:`ETH Staking APR`,category:`crypto`,iconUrl:U(`eth-staking`),layout:{w:3,h:3,minW:2,minH:2},description:`Ethereum staking yield — total validator APR broken into consensus issuance, MEV, and priority tips. The 'risk-free' ETH rate. Keyless (ultrasound.money).`,capabilities:[`eth-supply`],source:W.ultrasound,schema:L({})}),Mm=y({name:`prediction-markets`,label:`Prediction Markets`,category:`sentiment`,iconUrl:U(`prediction-markets`),layout:{w:4,h:4,minW:3,minH:3},description:`Live Polymarket odds — the highest-volume open prediction markets with their market-implied probabilities (macro, rates, crypto, politics). A real-money sentiment gauge. Keyless (Polymarket Gamma API).`,capabilities:[`prediction-markets`],source:W.polymarket,schema:L({limit:I().int().min(3).max(20).default(6).describe(`How many markets (by volume) to show.`)})}),Nm=y({name:`etf-flows`,label:`Spot ETF Flows`,category:`crypto`,iconUrl:U(`etf-flows`),layout:{w:4,h:4,minW:3,minH:3},description:`Spot Bitcoin or Ethereum ETF daily net flows — per-issuer (IBIT, FBTC, GBTC, …) plus the total, with a recent trend. The biggest institutional-demand signal. Keyless (SoSoValue); best-effort, may show empty if the source is unavailable.`,capabilities:[`etf-flows`],source:W.sosovalue,schema:L({asset:R([`btc`,`eth`]).default(`btc`).describe(`Which spot-ETF complex to show.`),limit:I().int().min(3).max(15).default(8).describe(`How many issuers to list.`)})}),Pm=y({name:`trending-coins`,label:`Trending Coins`,category:`crypto`,iconUrl:U(`trending-coins`),layout:{w:3,h:4,minW:2,minH:3},description:`The coins with the most search interest right now on CoinGecko — a retail-attention gauge. Shows rank, price, and 24h change. Keyless (CoinGecko).`,capabilities:[`trending-coins`],source:W.coingecko,schema:L({limit:I().int().min(3).max(15).default(7).describe(`How many trending coins to show.`)})}),Fm=y({name:`sector-performance`,label:`Sector Performance`,category:`crypto`,iconUrl:U(`sector-performance`),layout:{w:4,h:4,minW:3,minH:3},description:`Crypto sector rotation — market categories (L1s, DeFi, AI, memes, RWA, …) ranked by 24h market-cap change. Shows where capital is rotating. Keyless (CoinGecko categories).`,capabilities:[`sector-performance`],source:W.coingecko,schema:L({limit:I().int().min(4).max(30).default(10).describe(`How many sectors to show.`)})}),Im=y({name:`macro-calendar`,label:`Macro Calendar`,category:`macro`,iconUrl:U(`macro-calendar`),layout:{w:4,h:4,minW:3,minH:2},description:`Countdown to upcoming scheduled macro events — defaults to the 2026 FOMC rate decisions, fully editable. No data feed; the dates are known in advance.`,capabilities:[],schema:L({limit:I().int().min(1).max(12).default(5).describe(`How many upcoming events to show.`),events:oo(L({date:F().describe(`Event date, ISO YYYY-MM-DD.`),label:F().describe(`Event name, e.g. 'FOMC decision'.`)})).default([{date:`2026-07-29`,label:`FOMC decision`},{date:`2026-09-16`,label:`FOMC decision`},{date:`2026-10-28`,label:`FOMC decision`},{date:`2026-12-09`,label:`FOMC decision`},{date:`2027-01-27`,label:`FOMC decision`}]).describe(`Scheduled events (date + label). Defaults to the 2026 FOMC meetings; edit to add CPI/NFP/earnings dates.`)})}),Lm=y({name:`stablecoin-chains`,label:`Stablecoin Chains`,category:`crypto`,iconUrl:U(`stablecoin-chains`),layout:{w:5,h:4,minW:4,minH:3},description:`Where stablecoin liquidity sits — a treemap of the largest chains by stablecoin circulating supply. Complements the Stablecoin Supply total with the cross-chain distribution. Keyless (DeFiLlama).`,capabilities:[`stablecoins`],source:W.defillama,schema:L({limit:I().int().min(4).max(16).default(12).describe(`How many chains to show in the treemap.`)})}),Rm=y({name:`sector-treemap`,label:`Sector Treemap`,category:`crypto`,iconUrl:U(`sector-treemap`),layout:{w:6,h:4,minW:4,minH:3},description:`Crypto sector rotation as a treemap — each category sized by market cap and colored by 24h change (green up / red down). The at-a-glance view of where capital is flowing. Keyless (CoinGecko categories).`,capabilities:[`sector-performance`],source:W.coingecko,schema:L({limit:I().int().min(6).max(30).default(16).describe(`How many sectors to show.`)})}),zm=y({name:`etf-flows-chart`,label:`ETF Flows Chart`,category:`crypto`,iconUrl:U(`etf-flows-chart`),layout:{w:6,h:3,minW:3,minH:3},description:`Spot BTC or ETH ETF daily net flows over time — the inflow/outflow trend as a line, complementing the per-issuer snapshot. Keyless (SoSoValue); best-effort, may be empty if the source is unavailable.`,capabilities:[`etf-flows`],source:W.sosovalue,schema:L({asset:R([`btc`,`eth`]).default(`btc`).describe(`Which spot-ETF complex to chart.`),lookback:R([`1M`,`3M`,`6M`]).default(`3M`).describe(`History window for the flow chart.`)})}),Bm=y({name:`realized-price`,label:`Realized Price`,category:`onchain`,iconUrl:U(`realized-price`),layout:{w:6,h:3,minW:4,minH:3},description:`Bitcoin market price vs realized price — the on-chain cost basis of all coins. Market above realized = aggregate profit; crossing below realized has marked cycle bottoms. Keyless (Coin Metrics).`,capabilities:[`onchain-valuation`],source:W.coinMetrics,schema:L({window:R([`1Y`,`2Y`,`4Y`,`all`]).default(`2Y`).describe(`How much history the chart shows.`)})}),Vm=y({name:`reserve-risk`,label:`Reserve Risk`,category:`onchain`,iconUrl:U(`reserve-risk`),layout:{w:3,h:3,minW:2,minH:2},description:`Reserve Risk — long-term-holder conviction relative to price. Low values = strong conviction at a low price (attractive risk/reward, cycle-bottom territory); high values = conviction spent into a high price. Keyless (bitcoin-data.com).`,capabilities:[`onchain-cycle-extras`],source:W.bitcoinData,schema:L({window:R([`90D`,`180D`,`1Y`]).default(`1Y`).describe(`How much history the sparkline shows.`)})}),Hm=y({name:`nft-collections`,label:`NFT Collections`,category:`crypto`,iconUrl:U(`nft-collections`),layout:{w:3,h:4,minW:2,minH:3},description:`Blue-chip NFT collections ranked by 24h trading volume — floor price (USD), 24h floor change, and volume, for a hand-picked set of majors (Bored Ape, Pudgy Penguins, CryptoPunks, Azuki, …). Keyless (CoinGecko free tier). A quick read on where the top NFT market is trading.`,capabilities:[`nft-market`],source:W.coingecko,schema:L({topN:I().int().min(4).max(10).default(8).describe(`How many collections to show (up to 10 curated majors).`)})}),Um=y({name:`dex-hot-pools`,label:`Hot DEX Pools`,category:`onchain`,iconUrl:U(`dex-hot-pools`),layout:{w:3,h:4,minW:2,minH:3},description:`Trending DEX liquidity pools on a chain, ranked by 24h volume — each pool's pair, base-token price, 24h price change, and 24h volume. Surfaces what's hot on-chain (new listings, momentum pairs) across Ethereum, Solana, Base and more. Keyless (GeckoTerminal free tier).`,capabilities:[`dex-pools`],source:W.geckoterminal,schema:L({network:R([`eth`,`solana`,`base`,`arbitrum`,`bsc`,`polygon_pos`]).default(`eth`).describe(`Which chain's trending pools to show.`),count:I().int().min(5).max(15).default(10).describe(`How many trending pools to list (up to 15).`)})}),Wm=y({name:`chain-activity`,label:`Chain Activity`,category:`onchain`,iconUrl:U(`chain-activity`),layout:{w:3,h:4,minW:2,minH:3},description:`Cross-chain network activity for major layer-1s (Bitcoin, Ethereum, Litecoin, …), ranked by 24h transaction count — with blocks mined and mempool backlog per chain. A side-by-side pulse of which chains are busiest right now. Keyless (Blockchair).`,capabilities:[`chain-activity`],source:W.blockchair,schema:L({})}),Gm=y({name:`order-book-depth`,label:`Order Book`,category:`markets`,iconUrl:U(`order-book-depth`),layout:{w:4,h:4,minW:3,minH:3},description:`Live two-sided order book for one Bitkub market — bid and ask ladders with cumulative resting size, plus the mid price and spread. Shows where the resting liquidity actually sits, which a price feed alone can't. Prices in Thai baht. Keyless (Bitkub public API).`,capabilities:[`order-book`],source:W.bitkub,schema:L({symbol:F().min(1).default(`KUB`).describe(`Base asset ticker as listed on the venue, e.g. "KUB", "BTC", "ETH" — the quote asset is implied (THB on Bitkub).`),venue:Hf(),levels:I().int().min(3).max(25).default(10).describe(`How many price levels to show per side.`)})}),Km=y({name:`nft-treemap`,label:`NFT Treemap`,category:`crypto`,iconUrl:U(`nft-treemap`),layout:{w:4,h:4,minW:3,minH:3},description:`Treemap of blue-chip NFT collections sized by market capitalisation, tiles colored green/red by 24h floor-price change. A heat-map of the top NFT market at a glance. Keyless (CoinGecko free tier).`,capabilities:[`nft-market`],source:W.coingecko,schema:L({topN:I().int().min(4).max(10).default(8).describe(`How many collections to show (up to 10 curated majors).`)})}),qm=y({name:`dex-pool-treemap`,label:`DEX Pool Treemap`,category:`onchain`,iconUrl:U(`dex-pool-treemap`),layout:{w:4,h:4,minW:3,minH:3},description:`Treemap of trending DEX pools on a chain sized by 24h trading volume, tiles colored green/red by 24h price change. Shows at a glance which pairs are pulling the most on-chain volume. Keyless (GeckoTerminal free tier).`,capabilities:[`dex-pools`],source:W.geckoterminal,schema:L({network:R([`eth`,`solana`,`base`,`arbitrum`,`bsc`,`polygon_pos`]).default(`eth`).describe(`Which chain's trending pools to show.`),count:I().int().min(5).max(15).default(12).describe(`How many trending pools to include (up to 15).`)})}),Jm=y({name:`sector-bars`,label:`Sector Bars`,category:`crypto`,iconUrl:U(`sector-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`Crypto sector rotation as a diverging bar chart — market categories (L1s, DeFi, AI, memes, RWA, …) ranked by 24h market-cap change, gains right in green, losses left in red. The chart-first sibling of the Sector Performance list. Keyless (CoinGecko categories).`,capabilities:[`sector-performance`],source:W.coingecko,schema:L({limit:I().int().min(4).max(20).default(10).describe(`How many sectors (by absolute 24h change) to chart.`)})}),Ym=y({name:`funding-bars`,label:`Funding by Venue`,category:`derivatives`,iconUrl:U(`funding-bars`),layout:{w:4,h:3,minW:3,minH:2},description:`One coin's predicted perpetual funding rate compared across venues (Hyperliquid vs Binance vs Bybit) as a diverging bar chart of annualized rates — positive funding (longs pay) in green, negative in red. Makes a funding-arb spread visible at a glance. Keyless (Hyperliquid predicted fundings).`,capabilities:[`funding-comparison`],source:W.hyperliquid,schema:L({coin:F().min(1).default(`BTC`).describe(`Coin to compare across venues, e.g. "BTC", "ETH", "SOL".`)})}),Xm=y({name:`etf-flow-bars`,label:`ETF Flow Bars`,category:`crypto`,iconUrl:U(`etf-flow-bars`),layout:{w:6,h:3,minW:3,minH:3},description:`Spot BTC or ETH ETF daily net flows as diverging bars — one bar per day, inflows up in green, outflows down in red. The classic ETF-flow chart; complements the cumulative line and per-issuer snapshot. Keyless (SoSoValue); best-effort, may be empty if the source is unavailable.`,capabilities:[`etf-flows`],source:W.sosovalue,schema:L({asset:R([`btc`,`eth`]).default(`btc`).describe(`Which spot-ETF complex to chart.`),lookback:R([`1M`,`3M`,`6M`]).default(`1M`).describe(`History window for the daily-flow bars.`)})}),Zm=y({name:`chain-activity-bars`,label:`Chain Activity Bars`,category:`onchain`,iconUrl:U(`chain-activity-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`24h confirmed transactions per major L1 (Bitcoin, Ethereum, Litecoin, Dogecoin, …) as a horizontal bar chart, ranked busiest-first — cross-chain usage compared at a glance. The chart-first sibling of the Chain Activity table. Keyless (Blockchair).`,capabilities:[`chain-activity`],source:W.blockchair,schema:L({limit:I().int().min(3).max(12).default(8).describe(`How many chains (by 24h transactions) to chart.`)})}),Qm=y({name:`market-scatter`,label:`Market Scatter`,category:`crypto`,iconUrl:U(`market-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`Top coins as a bubble scatter — 24h price change on the x-axis, market cap on a log y-axis, bubble size by market cap. Shows in one view whether large caps or small caps are moving, and who's the outlier. Keyless (CoinGecko top-50 by market cap).`,capabilities:[`coin-markets`],source:W.coingecko,schema:L({limit:I().int().min(10).max(50).default(30).describe(`How many top coins (by market cap) to plot.`)})}),$m=y({name:`market-bubbles`,label:`Market Bubbles`,category:`crypto`,iconUrl:U(`market-bubbles`),layout:{w:6,h:5,minW:4,minH:3},description:`Top coins as a floating bubble cloud — one logo bubble per coin, area by market cap, ring tinted green/red by 24h change. A playful at-a-glance map of where the market's weight sits; bubbles are draggable. Keyless (CoinGecko top-50 by market cap).`,capabilities:[`coin-markets`],source:W.coingecko,schema:L({limit:I().int().min(5).max(50).default(25).describe(`How many top coins (by market cap) to show.`),sizeBy:R([`market-cap`,`change`]).default(`market-cap`).describe(`Bubble sizing — 'market-cap' weights by market cap, 'change' weights by absolute 24h % move (today's action, not size).`)})}),eh=(e,t,n)=>I().int().min(3).max(e).default(t).describe(`How many of the largest ${n} to show.`),th=y({name:`tvl-bubbles`,label:`TVL Bubbles`,category:`crypto`,iconUrl:U(`tvl-bubbles`),layout:{w:6,h:4,minW:3,minH:3},description:`Blockchain ecosystems as a floating bubble cloud, area by total value locked (TVL) — the bubble-chart sibling of the TVL treemap. Data from DeFiLlama. Draggable, playful answer to 'where does on-chain capital live'.`,capabilities:[`tvl`],source:W.defillama,schema:L({topN:eh(30,14,`chains`)})}),nh=y({name:`protocol-tvl-bubbles`,label:`Protocol TVL Bubbles`,category:`crypto`,iconUrl:U(`protocol-tvl-bubbles`),layout:{w:6,h:4,minW:3,minH:3},description:`DeFi protocols as a bubble cloud — area by total value locked (TVL), ring tinted green/red by 1-day change. Data from DeFiLlama. Unlike tvl-bubbles (chains), this ranks individual protocols (Lido, Aave, EigenLayer…).`,capabilities:[`protocol-tvl`],source:W.defillama,schema:L({topN:eh(30,14,`protocols by TVL`)})}),rh=y({name:`dex-volume-bubbles`,label:`DEX Volume Bubbles`,category:`crypto`,iconUrl:U(`dex-volume-bubbles`),layout:{w:6,h:4,minW:3,minH:3},description:`Decentralized exchanges as a bubble cloud — area by trailing-24h trading volume, ring tinted green/red by 1-day change. Data from DeFiLlama. Where on-chain trading flow is concentrated right now.`,capabilities:[`dex-volume`],source:W.defillama,schema:L({topN:eh(30,14,`DEX protocols by 24h volume`)})}),ih=y({name:`protocol-fees-bubbles`,label:`Protocol Fees Bubbles`,category:`crypto`,iconUrl:U(`protocol-fees-bubbles`),layout:{w:6,h:4,minW:3,minH:3},description:`Protocols as a bubble cloud — area by fees generated in the last 24h, ring tinted green/red by 1-day change. Data from DeFiLlama. Where users are actually paying for blockspace and services.`,capabilities:[`protocol-fees`],source:W.defillama,schema:L({topN:eh(30,14,`fee-earning protocols`)})}),ah=y({name:`sector-bubbles`,label:`Sector Bubbles`,category:`crypto`,iconUrl:U(`sector-bubbles`),layout:{w:6,h:4,minW:4,minH:3},description:`Crypto sector rotation as a bubble cloud — each category's area by market cap, ring tinted green/red by 24h change. The bubble-chart sibling of the sector treemap. Keyless (CoinGecko categories).`,capabilities:[`sector-performance`],source:W.coingecko,schema:L({limit:I().int().min(6).max(30).default(16).describe(`How many sectors to show.`)})}),oh=y({name:`nft-bubbles`,label:`NFT Bubbles`,category:`crypto`,iconUrl:U(`nft-bubbles`),layout:{w:4,h:4,minW:3,minH:3},description:`Blue-chip NFT collections as a bubble cloud — area by market capitalisation, ring tinted green/red by 24h floor-price change. Keyless (CoinGecko free tier).`,capabilities:[`nft-market`],source:W.coingecko,schema:L({topN:I().int().min(4).max(10).default(8).describe(`How many collections to show (up to 10 curated majors).`)})}),sh=y({name:`dex-pool-bubbles`,label:`DEX Pool Bubbles`,category:`onchain`,iconUrl:U(`dex-pool-bubbles`),layout:{w:4,h:4,minW:3,minH:3},description:`Trending DEX pools on a chain as a bubble cloud — area by 24h trading volume, ring tinted green/red by 24h price change. Which pairs are pulling the most on-chain volume. Keyless (GeckoTerminal free tier).`,capabilities:[`dex-pools`],source:W.geckoterminal,schema:L({network:R([`eth`,`solana`,`base`,`arbitrum`,`bsc`,`polygon_pos`]).default(`eth`).describe(`Which chain's trending pools to show.`),count:I().int().min(5).max(15).default(12).describe(`How many trending pools to include (up to 15).`)})}),ch=y({name:`movers-bubbles`,label:`Movers Bubbles`,category:`crypto`,iconUrl:U(`movers-bubbles`),layout:{w:6,h:5,minW:4,minH:3},description:`The broad market's biggest movers as a bubble cloud — logo bubbles sized by the magnitude of the move over a chosen window, green for gainers, red for losers. Today's action at a glance, regardless of coin size. Keyless (CoinPaprika, ~2000 coins).`,capabilities:[`coin-movers`],source:W.coinpaprika,schema:L({window:R([`1h`,`24h`,`7d`,`30d`]).default(`24h`).describe(`Price-change window the movers are ranked by.`),limit:I().int().min(6).max(30).default(18).describe(`Total bubbles — split evenly into top gainers and losers.`)})}),lh=y({name:`sentiment-gauge`,label:`Sentiment Gauge`,category:`crypto`,iconUrl:U(`sentiment-gauge`),layout:{w:3,h:3,minW:2,minH:2},description:`Crypto fear & greed index as a radial gauge — the arc fills from extreme fear (0) to extreme greed (100) in the mood color, with the reading and classification in the center. A dial-style alternative to the Fear & Greed sparkline card. Keyless (alternative.me).`,capabilities:[`sentiment`],source:W.alternativeMe,schema:L({})}),uh=y({name:`movers-bars`,label:`Movers Bars`,category:`crypto`,iconUrl:U(`movers-bars`),layout:{w:4,h:5,minW:3,minH:4},description:`Top gainers and losers across the broad crypto market as a diverging bar chart — the biggest movers over a chosen window, gains right in green, losses left in red, ranked by size. The chart-first sibling of the Coin Movers list. Keyless (CoinPaprika, ~2000 coins).`,capabilities:[`coin-movers`],source:W.coinpaprika,schema:L({window:R([`1h`,`24h`,`7d`,`30d`]).default(`24h`).describe(`Price-change window the movers are ranked by.`),limit:I().int().min(6).max(20).default(12).describe(`Total bars — split evenly into top gainers and top losers.`)})}),dh=y({name:`tvl-bars`,label:`TVL by Chain Bars`,category:`crypto`,iconUrl:U(`tvl-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`Total value locked (TVL) per blockchain as a horizontal bar chart, ranked largest-first — DeFi capital compared across chains at a glance. The chart-first sibling of the TVL treemap. Keyless (DeFiLlama).`,capabilities:[`tvl`],source:W.defillama,schema:L({limit:I().int().min(4).max(20).default(10).describe(`How many chains (by TVL) to chart.`)})}),fh=y({name:`yield-scatter`,label:`Yield Scatter`,category:`crypto`,iconUrl:U(`yield-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`DeFi yield pools as a risk/reward bubble scatter — total APY on the x-axis, pool TVL on a log y-axis, bubble size by TVL. Surfaces the deep, high-yield pools (top-right) versus thin outliers in one view. The chart-first sibling of the Yield Scanner list. Keyless (DeFiLlama).`,capabilities:[`yields`],source:W.defillama,schema:L({limit:I().int().min(10).max(60).default(40).describe(`How many pools (by TVL) to plot.`),maxApy:I().min(10).max(1e3).default(100).describe(`Hide pools whose APY exceeds this, so extreme incentive outliers don't crush the x-axis.`),stablecoinOnly:eo().default(!1).describe(`Restrict to stablecoin pools only.`)})}),ph=y({name:`nft-scatter`,label:`NFT Scatter`,category:`crypto`,iconUrl:U(`nft-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`Blue-chip NFT collections as a bubble scatter — 24h floor change on the x-axis, 24h trading volume on a log y-axis, bubble size by market cap. Shows which collections are moving on real volume versus thin floors. The chart-first sibling of the NFT Collections list. Keyless (CoinGecko, curated slugs).`,capabilities:[`nft-market`],source:W.coingecko,schema:L({limit:I().int().min(5).max(15).default(12).describe(`How many collections (by market cap) to plot.`)})}),mh=y({name:`dominance-gauge`,label:`Dominance Gauge`,category:`crypto`,iconUrl:U(`dominance-gauge`),layout:{w:3,h:3,minW:2,minH:2},description:`One asset's share of total crypto market cap as a radial gauge — the arc fills from 0% to 100% dominance with the reading in the center. A dial-style alternative to the segmented Bitcoin Dominance bar. Keyless (CoinGecko global).`,capabilities:[`global-market`],source:W.coingecko,schema:L({coin:R([`btc`,`eth`]).default(`btc`).describe(`Which asset's market-cap dominance to gauge.`)})}),hh=y({name:`put-call-gauge`,label:`Put/Call Gauge`,category:`derivatives`,iconUrl:U(`put-call-gauge`),layout:{w:3,h:3,minW:2,minH:2},description:`Options put/call ratio as a radial gauge — the arc reads from 0 (all calls, bullish) through 1 (balanced) toward 2 (put-heavy, defensive), colored green below 1 and red above. A dial-style alternative to the Put/Call Ratio card. Keyless (Deribit).`,capabilities:[`options-summary`],source:W.deribit,schema:L({currency:R([`BTC`,`ETH`]).default(`BTC`).describe(`Options underlying to read the ratio for.`),basis:R([`oi`,`volume`]).default(`oi`).describe(`Ratio basis — open interest or 24h contract volume.`)})}),gh=y({name:`custom-data`,label:`Custom Data`,category:`tools`,iconUrl:U(`custom-data`),layout:{w:4,h:3,minW:2,minH:2},description:"The escape hatch: renders ANY keyless HTTPS JSON API as a stat, line chart, bars, or label→value table — for data no built-in frame covers (weather, sports, public stats, niche feeds). Fetches browser-direct, so the API must be CORS-open, need no key, and be public https (localhost/private hosts are refused). Point `values` at the JSON with a dot/bracket path — e.g. 'hourly.temperature_2m', 'data[0].price', 'items[*].name'. A path resolving to an array charts as a series; a scalar shows as a stat. Verify the URL and path against a real response before emitting them.",capabilities:[],schema:L({url:F().min(1).refine(e=>Pf(e)===null,{message:`must be a public https:// URL (no credentials, no localhost/private hosts)`}).default(`https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd`).describe(`The JSON endpoint, public https only. Must be CORS-open and keyless — never embed an API key or token; the spec is shareable. Include query params in the URL.`),values:F().min(1).max(200).default(`bitcoin.usd`).describe(`Dot/bracket path to the value(s) inside the response, e.g. 'hourly.temperature_2m' (array → series), 'data[0].price' (scalar → stat), 'items[*].volume' ([*] maps over an array). No expressions — keys, [indices], and [*] only.`),labels:F().max(200).default(``).describe(`Optional path to a parallel array of labels — x-axis ticks for bars, row names for the table, e.g. 'hourly.time' or 'items[*].name'. Empty = positional indices.`),display:R([`stat`,`line`,`bars`,`table`]).default(`stat`).describe(`How to render: stat = big headline number (last value) with sparkline history; line = the series as a line chart; bars = labelled bar chart; table = label → value rows.`),label:F().max(80).default(``).describe(`Caption naming the metric, e.g. "Bangkok Temp (°C)". Empty shows only the API hostname.`),unit:F().max(12).default(``).describe(`Unit suffix appended to numeric values, e.g. "°C", "%", "km".`),refreshMinutes:I().int().min(1).max(1440).default(15).describe(`Re-fetch interval in minutes. Be polite to free APIs — 15+ unless the data genuinely moves faster.`)})}),_h=y({name:`oi-treemap`,label:`OI Treemap`,category:`derivatives`,iconUrl:U(`oi-treemap`),layout:{w:6,h:4,minW:3,minH:3},description:`Treemap of live Hyperliquid open interest, sized by USD notional — largest markets first, the long tail rolled into a single 'Other' tile. A single-glance map of where perp capital concentrates right now. Keyless (Hyperliquid).`,capabilities:[`open-interest`],source:W.hyperliquid,schema:L({limit:I().int().min(3).max(30).default(12).describe(`How many of the largest open-interest markets to show as individual tiles before rolling the rest into a single 'Other' tile.`)})}),vh=y({name:`ohlcv-volume-bars`,label:`OHLCV Volume Bars`,category:`derivatives`,iconUrl:U(`ohlcv-volume-bars`),layout:{w:6,h:3,minW:3,minH:2},description:`Per-candle trading volume for one Hyperliquid symbol as vertical bars over time, each bar tinted green when that candle closed up and red when it closed down. Works for any HIP-3 perp (stocks, indices, commodities) and crypto. Keyless (Hyperliquid).`,capabilities:[`ohlcv`],source:W.hyperliquid,schema:L({symbol:F().min(1).describe(`Hyperliquid symbol to chart volume for. HIP-3 cross-asset: stocks "xyz:TSLA"/"xyz:NVDA", indices "xyz:SP500", commodities "xyz:GOLD". Crypto: "BTC", "ETH".`),interval:R([`1m`,`5m`,`15m`,`1h`,`4h`,`1d`]).default(`1h`).describe(`Candle interval each volume bar represents.`)})}),yh=y({name:`funding-spread-bars`,label:`Funding Spread Bars`,category:`derivatives`,iconUrl:U(`funding-spread-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`Cross-venue predicted funding-rate spread per coin (max − min annualized rate across Hyperliquid/Binance/Bybit) as a ranked horizontal bar chart — the widest spreads are the clearest funding-arbitrage or crowded-positioning candidates. The bars-first sibling of Cross-Venue Funding. Keyless (Hyperliquid predicted fundings).`,capabilities:[`funding-comparison`],source:W.hyperliquid,schema:L({limit:I().int().min(3).max(20).default(10).describe(`How many coins (by cross-venue funding spread) to chart.`)})}),bh=y({name:`funding-venue-heatmap`,label:`Funding Venue Heatmap`,category:`derivatives`,iconUrl:U(`funding-venue-heatmap`),layout:{w:6,h:3,minW:4,minH:3},description:`Heatmap of predicted annualized funding rates — coins as rows, venues (Hyperliquid/Binance/Bybit) as columns, green positive / red negative. Spots which venue is paying up (or charging) for a given coin at a glance. Keyless (Hyperliquid predicted fundings).`,capabilities:[`funding-comparison`],source:W.hyperliquid,schema:L({limit:I().int().min(3).max(15).default(8).describe(`How many coins (by cross-venue funding spread) to include as heatmap rows.`)})}),xh=y({name:`funding-carry-area`,label:`Funding Carry`,category:`derivatives`,iconUrl:U(`funding-carry-area`),layout:{w:6,h:3,minW:3,minH:2},description:`Stacked area of each symbol's running cumulative funding cost or benefit over a configurable lookback — the running total a position would have paid or earned in funding, symbol by symbol. Shows whether carry has been a persistent drag or tailwind. Keyless (Hyperliquid).`,capabilities:[`funding-history`],source:W.hyperliquid,schema:L({symbols:oo(F()).min(1).max(6).describe(`Hyperliquid symbols to compare cumulative funding carry for, e.g. ["BTC", "ETH"]. Up to 6.`),lookback:R([`24h`,`7D`,`1M`]).default(`7D`).describe(`History window for the cumulative funding-carry chart.`)})}),Sh=y({name:`volume-share-donut`,label:`Volume Share Donut`,category:`derivatives`,iconUrl:U(`volume-share-donut`),layout:{w:4,h:4,minW:3,minH:3},description:`Donut of 24h Hyperliquid trading volume share across the busiest symbols, top symbols as slices with the long tail rolled into 'Other'. Shows where perp trading activity concentrates right now. Keyless (Hyperliquid).`,capabilities:[`day-stats`],source:W.hyperliquid,schema:L({limit:I().int().min(3).max(15).default(7).describe(`How many top symbols (by 24h notional volume) to show as individual slices before rolling the rest into a single 'Other' slice.`)})}),Ch=y({name:`volume-movers-scatter`,label:`Volume Movers Scatter`,category:`derivatives`,iconUrl:U(`volume-movers-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`Hyperliquid perps as a bubble scatter — 24h price change on the x-axis, 24h notional volume on a log y-axis, bubble size by volume. Shows whether the busiest markets are also the biggest movers, or diverging. Keyless (Hyperliquid).`,capabilities:[`day-stats`],source:W.hyperliquid,schema:L({limit:I().int().min(10).max(60).default(40).describe(`How many of the busiest symbols (by 24h notional volume) to plot.`)})}),wh=y({name:`funding-leaderboard-bars`,label:`Funding Leaderboard`,category:`derivatives`,iconUrl:U(`funding-leaderboard-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`Predicted hourly funding rate ranked across the whole Hyperliquid universe — crypto and HIP-3 equities together — as a diverging bar chart, largest absolute rates first. Surfaces the most expensive (or most rewarded) side to hold right now. Keyless (Hyperliquid).`,capabilities:[`day-stats`],source:W.hyperliquid,schema:L({limit:I().int().min(3).max(20).default(10).describe(`How many symbols (by absolute funding rate) to chart.`)})}),Th=y({name:`funding-crowding-scatter`,label:`Funding Crowding Scatter`,category:`derivatives`,iconUrl:U(`funding-crowding-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`24h price change (x) vs predicted funding rate (y) across Hyperliquid perps, bubble size by open interest — the combination of a stretched funding rate and heavy open interest flags a crowded, squeeze-prone position. Keyless (Hyperliquid).`,capabilities:[`day-stats`,`open-interest`],source:W.hyperliquid,schema:L({limit:I().int().min(10).max(60).default(40).describe(`How many symbols (by open interest) to plot.`)})}),Eh=y({name:`liquidity-basis-bars`,label:`Liquidity & Basis Bars`,category:`derivatives`,iconUrl:U(`liquidity-basis-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`Ranked horizontal bars of a chosen liquidity/pricing metric across Hyperliquid perps — either the bid/ask impact-price spread (% of mark price) or the mark-vs-oracle basis (bps). Surfaces the least liquid or most stretched markets at a glance. Keyless (Hyperliquid).`,capabilities:[`day-stats`],source:W.hyperliquid,schema:L({metric:R([`spread`,`basis`]).default(`spread`).describe(`Which liquidity metric to rank by: "spread" (bid/ask impact-price spread as a % of mark price) or "basis" (mark-vs-oracle premium in basis points).`),limit:I().int().min(3).max(20).default(10).describe(`How many symbols (by the chosen metric's magnitude) to chart.`)})}),Dh=y({name:`coin-momentum-heatmap`,label:`Coin Momentum Heatmap`,category:`crypto`,iconUrl:U(`coin-momentum-heatmap`),layout:{w:5,h:5,minW:4,minH:3},description:`Top coins by market-cap rank as a momentum heatmap — rows are coins, columns are 1h/24h/7d/30d change windows, colored diverging green/red by magnitude. Spot which coins are heating up (or cooling off) across every timeframe at a glance. Keyless (CoinPaprika, ~2000 coins).`,capabilities:[`coin-movers`],source:W.coinpaprika,schema:L({limit:I().int().min(5).max(30).default(15).describe(`How many top coins (by market-cap rank) to include as rows.`)})}),Oh=y({name:`coin-momentum-scatter`,label:`Coin Momentum Scatter`,category:`crypto`,iconUrl:U(`coin-momentum-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`Broad-market coins as a momentum scatter — 24h change on the x-axis, 7d change on the y-axis, bubble size by market cap, colored by 24h direction. Reveals whether today's move is a continuation or a reversal of the week's trend. Keyless (CoinPaprika, ~2000 coins).`,capabilities:[`coin-movers`],source:W.coinpaprika,schema:L({limit:I().int().min(10).max(100).default(50).describe(`How many top coins (by market-cap rank) to plot.`)})}),kh=y({name:`trending-bars`,label:`Trending Bars`,category:`crypto`,iconUrl:U(`trending-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`The coins with the most search interest right now on CoinGecko as a diverging bar chart — 24h change per trending coin, gains right in green, losses left in red. The chart-first sibling of the Trending Coins list. Keyless (CoinGecko).`,capabilities:[`trending-coins`],source:W.coingecko,schema:L({limit:I().int().min(3).max(15).default(7).describe(`How many trending coins to chart.`)})}),Ah=y({name:`nft-activity-bars`,label:`NFT Activity Bars`,category:`crypto`,iconUrl:U(`nft-activity-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`Blue-chip NFT collections ranked by 24h sales count as a horizontal bar chart — which collections are actually trading, not just holding a floor price. The chart-first sibling of the NFT Collections list. Keyless (CoinGecko, curated slugs).`,capabilities:[`nft-market`],source:W.coingecko,schema:L({limit:I().int().min(5).max(15).default(10).describe(`How many collections (by 24h sales) to chart.`)})}),jh=y({name:`dominance-bars`,label:`Dominance Bars`,category:`markets`,iconUrl:U(`dominance-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`Market-cap dominance for every asset in CoinGecko's global snapshot — not just BTC and ETH — as a horizontal bar chart, ranked largest-first. Surfaces the next tier (USDT, BNB, SOL, …) the segmented Bitcoin Dominance bar collapses into 'Others'. Keyless (CoinGecko).`,capabilities:[`global-market`],source:W.coingecko,schema:L({limit:I().int().min(3).max(15).default(8).describe(`How many assets (by market-cap dominance) to chart.`)})}),Mh=y({name:`trending-bubbles`,label:`Trending Bubbles`,category:`crypto`,iconUrl:U(`trending-bubbles`),layout:{w:6,h:5,minW:4,minH:3},description:`The coins with the most search interest right now on CoinGecko as a floating bubble cloud — bubble area by |24h change|, ring tinted green/red by direction. A movement-first alternative to the Trending Coins list. Keyless (CoinGecko).`,capabilities:[`trending-coins`],source:W.coingecko,schema:L({limit:I().int().min(3).max(15).default(10).describe(`How many trending coins to show.`)})}),Nh=y({name:`yield-risk-pie`,label:`Yield Risk Pie`,category:`crypto`,iconUrl:U(`yield-risk-pie`),layout:{w:4,h:4,minW:3,minH:3},description:`DeFi yield pools grouped by impermanent-loss risk as a donut, sliced by total value locked (TVL) — no-IL-risk, IL-risk, and unknown, summed across every pool. A quick read on how much yield-seeking capital carries IL exposure. Keyless (DeFiLlama).`,capabilities:[`yields`],source:W.defillama,schema:L({})}),Ph=y({name:`dex-pool-liquidity-scatter`,label:`DEX Pool Liquidity Scatter`,category:`onchain`,iconUrl:U(`dex-pool-liquidity-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`Trending DEX pools on a chain as a liquidity-vs-volume bubble scatter — pool reserves on a log x-axis, 24h trading volume on a log y-axis, bubble size by 24h trade count, tinted green/red by 24h price change. Surfaces deep, active pools versus thin or quiet ones. Keyless (GeckoTerminal free tier).`,capabilities:[`dex-pools`],source:W.geckoterminal,schema:L({network:R([`eth`,`solana`,`base`,`arbitrum`,`bsc`,`polygon_pos`]).default(`eth`).describe(`Which chain's trending pools to show.`),count:I().int().min(5).max(15).default(12).describe(`How many trending pools to plot (up to 15).`)})}),Fh=y({name:`protocol-fees-vs-tvl-scatter`,label:`Protocol Fees vs TVL Scatter`,category:`crypto`,iconUrl:U(`protocol-fees-vs-tvl-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`DeFi protocols as a fees-vs-TVL bubble scatter — total value locked on a log x-axis, trailing-24h fees on a log y-axis, bubble size by fees. Surfaces capital-efficient protocols earning outsized fees on their TVL versus large-but-quiet ones. Only protocols DeFiLlama reports both a TVL and a fees figure for are plotted. Keyless (DeFiLlama).`,capabilities:[`protocol-tvl`,`protocol-fees`],source:W.defillama,schema:L({limit:I().int().min(5).max(40).default(20).describe(`How many protocols (by 24h fees) to plot.`)})}),Ih=y({name:`yield-composition-scatter`,label:`Yield Composition Scatter`,category:`crypto`,iconUrl:U(`yield-composition-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`DeFi yield pools as a base-vs-reward APY scatter — organic (base) APY on the x-axis, incentive (reward) APY on the y-axis, bubble size by TVL. Separates pools earning real organic yield from ones propped up by token incentives. Keyless (DeFiLlama).`,capabilities:[`yields`],source:W.defillama,schema:L({limit:I().int().min(10).max(60).default(40).describe(`How many pools (by TVL) to plot.`),stablecoinOnly:eo().default(!1).describe(`Restrict to stablecoin pools only.`)})}),Lh=y({name:`protocol-tvl-by-category`,label:`Protocol TVL by Category`,category:`crypto`,iconUrl:U(`protocol-tvl-by-category`),layout:{w:4,h:4,minW:3,minH:3},description:`Total value locked (TVL) summed by DeFiLlama category — Dexes, Lending, Liquid Staking, and more — as a horizontal bar chart ranked largest-first. Shows which slice of DeFi actually holds the capital. Keyless (DeFiLlama).`,capabilities:[`protocol-tvl`],source:W.defillama,schema:L({limit:I().int().min(4).max(20).default(10).describe(`How many DeFi categories (by summed TVL) to chart.`)})}),Rh=y({name:`protocol-tvl-share-area`,label:`Protocol TVL Share Area`,category:`crypto`,iconUrl:U(`protocol-tvl-share-area`),layout:{w:6,h:3,minW:3,minH:2},description:`Stacked area chart of total value locked (TVL) for several DeFi protocols over a lookback window, each protocol's slice stacked to show the combined total and how the mix shifts over time. The composition-focused sibling of the Protocol TVL Chart's overlaid lines. Data from DeFiLlama (daily granularity).`,capabilities:[`protocol-tvl`],source:W.defillama,schema:L({protocols:oo(F()).min(1).max(6).describe(`DeFiLlama protocol slugs (lowercase, hyphenated), e.g. ["lido", "aave", "eigenlayer"]. 1 to 6.`),lookback:R([`7D`,`1M`,`3M`]).default(`1M`).describe(`History window for the chart.`)})}),zh=y({name:`dex-volume-share-area`,label:`DEX Volume Share Area`,category:`crypto`,iconUrl:U(`dex-volume-share-area`),layout:{w:6,h:3,minW:3,minH:2},description:`Stacked area chart of daily DEX trading volume for several protocols over a lookback window, stacked to show combined volume and how each DEX's share shifts over time. The composition-focused sibling of the DEX Volume Chart's overlaid lines. Data from DeFiLlama (daily granularity).`,capabilities:[`dex-volume`],source:W.defillama,schema:L({protocols:oo(F()).min(1).max(6).describe(`DeFiLlama DEX protocol slugs (lowercase, hyphenated), e.g. ["uniswap", "pancakeswap", "aerodrome-slipstream"]. 1 to 6.`),lookback:R([`7D`,`1M`,`3M`]).default(`1M`).describe(`History window for the chart.`)})}),Bh=y({name:`yield-momentum-bars`,label:`Yield Momentum Bars`,category:`crypto`,iconUrl:U(`yield-momentum-bars`),layout:{w:4,h:5,minW:3,minH:4},description:`DeFi yield pools ranked by 7-day APY change as a diverging bar chart — the biggest APY gains and drops over the past week, filtered above a TVL floor to skip dust pools. Surfaces where yields are heating up or cooling off. Keyless (DeFiLlama).`,capabilities:[`yields`],source:W.defillama,schema:L({limit:I().int().min(6).max(20).default(12).describe(`How many pools to chart, split into the largest 7-day APY gains and drops.`),minTvlUsd:I().min(0).default(1e6).describe(`Minimum pool TVL in USD — a liquidity floor to hide dust.`)})}),Vh=y({name:`btc-difficulty-chart`,label:`BTC Difficulty Chart`,category:`bitcoin`,iconUrl:U(`btc-difficulty-chart`),layout:{w:6,h:3,minW:3,minH:2},description:`Bitcoin network difficulty over time as a line chart, with the current difficulty and hashrate as headline figures — the long-run mining-cost trend, charted rather than a single retarget countdown. Keyless (mempool.space).`,capabilities:[`btc-hashrate`],source:W.mempool,schema:L({window:R([`1y`,`2y`,`3y`]).default(`1y`).describe(`History window for the difficulty line.`)})}),Hh=y({name:`btc-block-size-bars`,label:`BTC Block Size Bars`,category:`bitcoin`,iconUrl:U(`btc-block-size-bars`),layout:{w:5,h:4,minW:3,minH:3},description:`Recent Bitcoin block sizes as a vertical bar chart, oldest to newest — spot when blocks are running full (near the ~4MB weight limit) versus half-empty. The chart-first sibling of the BTC Blocks feed. Keyless (mempool.space).`,capabilities:[`btc-blocks`],source:W.mempool,schema:L({count:I().int().min(3).max(15).default(8).describe(`How many recent blocks to chart (oldest → newest).`)})}),Uh=y({name:`chain-price-movers`,label:`Chain Price Movers`,category:`onchain`,iconUrl:U(`chain-price-movers`),layout:{w:4,h:4,minW:3,minH:3},description:`24h native-asset price change per major L1 (Bitcoin, Ethereum, Litecoin, Dogecoin, …) as a diverging bar chart, gains right in green, losses left in red. The price-led sibling of the Chain Activity Bars transaction chart. Keyless (Blockchair).`,capabilities:[`chain-activity`],source:W.blockchair,schema:L({limit:I().int().min(3).max(12).default(8).describe(`How many chains (by absolute 24h price change) to chart.`)})}),Wh=y({name:`chain-activity-scatter`,label:`Chain Activity Scatter`,category:`onchain`,iconUrl:U(`chain-activity-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`Major L1s as a bubble scatter — 24h native-asset price change on the x-axis, 24h confirmed transactions on a log y-axis, bubble size by current mempool backlog. Shows which chains are both moving in price and busy on-chain. Keyless (Blockchair).`,capabilities:[`chain-activity`],source:W.blockchair,schema:L({})}),Gh=y({name:`mempool-fee-curve`,label:`Mempool Fee Curve`,category:`bitcoin`,iconUrl:U(`mempool-fee-curve`),layout:{w:5,h:3,minW:3,minH:2},description:`Bitcoin mempool's projected next-to-mine blocks as a fee-decay bar chart — median sat/vB per block, tinted by urgency, showing how fast fees drop as you're willing to wait a block or two longer. The chart-first sibling of the BTC Mempool card. Keyless (mempool.space).`,capabilities:[`btc-mempool`],source:W.mempool,schema:L({projectedBlocks:I().int().min(1).max(8).default(5).describe(`How many projected (yet-to-be-mined) blocks to chart, next-to-mine first.`)})}),Kh=y({name:`mining-pools-share`,label:`Mining Pools Share`,category:`bitcoin`,iconUrl:U(`mining-pools-share`),layout:{w:4,h:4,minW:3,minH:3},description:`Bitcoin mining-pool dominance as a donut — top pools by block share over a window plus an 'Other' slice, with the top-3 combined share in the center as a quick hashpower-concentration read. The chart-first sibling of the Mining Pools treemap. Keyless (mempool.space).`,capabilities:[`mining-pools`],source:W.mempool,schema:L({window:R([`24h`,`3d`,`1w`,`1m`]).default(`1w`).describe(`Window over which to measure each pool's block share.`),topN:I().int().min(3).max(8).default(5).describe(`How many of the largest pools to show as slices; the rest fold into 'Other'.`)})}),qh=y({name:`options-max-pain`,label:`Max Pain by Strike`,category:`derivatives`,iconUrl:U(`options-max-pain`),layout:{w:6,h:4,minW:4,minH:3},description:`Max pain for the nearest Deribit options expiry (BTC or ETH) — the aggregate payout option writers would owe at each candidate settlement strike, as a bar chart, with the strike that minimizes it (where the most contracts expire worthless) highlighted against the current spot. Keyless (Deribit).`,capabilities:[`options-summary`],source:W.deribit,schema:L({currency:R([`BTC`,`ETH`]).default(`BTC`).describe(`Which Deribit options book — BTC or ETH.`)})}),Jh=y({name:`options-oi-skew`,label:`OI Skew by Strike`,category:`derivatives`,iconUrl:U(`options-oi-skew`),layout:{w:6,h:4,minW:4,minH:3},description:`Net call-minus-put open interest by strike for the nearest Deribit options expiry (BTC or ETH) — a single diverging bar per strike showing where positioning skews call-heavy (green, above zero) versus put-heavy (red, below zero) near spot. The netted sibling of OI by Strike. Keyless (Deribit).`,capabilities:[`options-summary`],source:W.deribit,schema:L({currency:R([`BTC`,`ETH`]).default(`BTC`).describe(`Which Deribit options book — BTC or ETH.`),strikes:I().int().min(6).max(30).default(14).describe(`How many strikes nearest the current spot to show (centered on the underlying price).`)})}),Yh=y({name:`options-vol-spread`,label:`BTC/ETH Vol Spread`,category:`derivatives`,iconUrl:U(`options-vol-spread`),layout:{w:6,h:3,minW:3,minH:2},description:`BTC DVOL and ETH DVOL implied-volatility indices plotted together over time — the spread between crypto's two most liquid vol benchmarks, and which one is pricing bigger expected swings. Keyless (Deribit).`,capabilities:[`volatility-index`],source:W.deribit,schema:L({lookback:R([`7D`,`1M`,`3M`]).default(`1M`).describe(`History window for both volatility-index lines.`)})}),Xh=y({name:`options-flow-skew`,label:`Positioning vs Flow Skew`,category:`derivatives`,iconUrl:U(`options-flow-skew`),layout:{w:4,h:3,minW:3,minH:2},description:`Call/put skew for BTC or ETH options across two bases at once — open interest (standing positioning) and 24h volume (today's flow) — as two diverging bars. Green = call-heavy, red = put-heavy; the two diverging signals fresh flow fighting stale positioning. Keyless (Deribit).`,capabilities:[`options-summary`],source:W.deribit,schema:L({currency:R([`BTC`,`ETH`]).default(`BTC`).describe(`Which Deribit options book — BTC or ETH.`)})}),Zh=y({name:`options-vol-smile`,label:`Vol Smile`,category:`derivatives`,iconUrl:U(`options-vol-smile`),layout:{w:6,h:4,minW:4,minH:3},description:`Implied volatility by strike for the nearest Deribit options expiry (BTC or ETH) — a call-IV line and a put-IV line across the strike range, the classic 'vol smile' shape that shows where the market prices tail risk richest. Keyless (Deribit).`,capabilities:[`options-summary`],source:W.deribit,schema:L({currency:R([`BTC`,`ETH`]).default(`BTC`).describe(`Which Deribit options book — BTC or ETH.`)})}),Qh=y({name:`options-oi-ladder-heatmap`,label:`OI Ladder Heatmap`,category:`derivatives`,iconUrl:U(`options-oi-ladder-heatmap`),layout:{w:8,h:5,minW:5,minH:4},description:`Open interest across strike and expiry for BTC or ETH options, as a heatmap — expiries as rows (nearest first), strike bands as columns, cell shade by total call+put OI. Surfaces where positioning concentrates across the whole term structure, not just the nearest expiry. Keyless (Deribit).`,capabilities:[`options-summary`],source:W.deribit,schema:L({currency:R([`BTC`,`ETH`]).default(`BTC`).describe(`Which Deribit options book — BTC or ETH.`),expiries:I().int().min(3).max(16).default(8).describe(`How many upcoming expiries (nearest-first) to show as rows.`),buckets:I().int().min(6).max(20).default(10).describe(`How many strike bands (columns) to bin open interest into, spanning the shown expiries' strike range.`)})}),$h=y({name:`options-max-pain-multi`,label:`Max Pain by Expiry`,category:`derivatives`,iconUrl:U(`options-max-pain-multi`),layout:{w:6,h:4,minW:4,minH:3},description:`Max pain strike for each upcoming Deribit options expiry (BTC or ETH), plotted as % deviation from spot — one bar per expiry, showing which dated books are pinned above versus below the current price. The term-structure sibling of Max Pain by Strike. Keyless (Deribit).`,capabilities:[`options-summary`],source:W.deribit,schema:L({currency:R([`BTC`,`ETH`]).default(`BTC`).describe(`Which Deribit options book — BTC or ETH.`),expiries:I().int().min(3).max(16).default(8).describe(`How many upcoming expiries (nearest-first) to chart.`)})}),eg=y({name:`mvrv-zscore-chart`,label:`MVRV Z-Score Chart`,category:`onchain`,iconUrl:U(`mvrv-zscore-chart`),layout:{w:6,h:3,minW:4,minH:3},description:`Bitcoin MVRV Z-Score plotted as a full daily time-series line, not just a sparkline — how many standard deviations market cap sits above realized cap across the whole available history. Historically, spikes above ~7 have marked cycle tops and dips below 0 mark deep-value bottoms. The chart-first sibling of the MVRV gauge. Keyless (Coin Metrics).`,capabilities:[`onchain-valuation`],source:W.coinMetrics,schema:L({window:R([`1Y`,`2Y`,`4Y`,`all`]).default(`all`).describe(`How much history the chart shows.`)})}),tg=y({name:`nupl-cycle-chart`,label:`NUPL Cycle Chart`,category:`onchain`,iconUrl:U(`nupl-cycle-chart`),layout:{w:6,h:3,minW:4,minH:3},description:`Net Unrealized Profit/Loss plotted as a full daily time-series line across Bitcoin's cycle sentiment bands — Capitulation, Hope/Fear, Optimism, Belief, Euphoria/Greed. The chart-first sibling of the NUPL gauge. Keyless (Coin Metrics).`,capabilities:[`onchain-valuation`],source:W.coinMetrics,schema:L({window:R([`1Y`,`2Y`,`4Y`,`all`]).default(`all`).describe(`How much history the chart shows.`)})}),ng=y({name:`cycle-valuation-composite`,label:`Cycle Valuation Composite`,category:`onchain`,iconUrl:U(`cycle-valuation-composite`),layout:{w:6,h:4,minW:4,minH:3},description:`Three cycle-valuation signals — MVRV Z-Score, NUPL, and BTC's 14-day RSI — overlaid on one chart, each independently min-max normalized to 0–100% over the selected window so their unrelated native scales become directly comparable. All three near the top together reads late-cycle euphoria; all three near the bottom reads capitulation. Keyless (Coin Metrics).`,capabilities:[`onchain-valuation`,`price-history-daily`],source:W.coinMetrics,schema:L({window:R([`1Y`,`2Y`,`4Y`,`all`]).default(`2Y`).describe(`How much history each signal is normalized and charted over.`)})}),rg=y({name:`onchain-oscillator-overlay`,label:`On-Chain Oscillator Overlay`,category:`onchain`,iconUrl:U(`onchain-oscillator-overlay`),layout:{w:6,h:4,minW:4,minH:3},description:`SOPR, Puell Multiple, and Reserve Risk overlaid on one chart, each independently min-max normalized to 0–100% over the selected window — three on-chain cycle oscillators with unrelated native scales made directly comparable. Keyless (bitcoin-data.com; polled once daily, best-effort per metric).`,capabilities:[`onchain-cycle-extras`],source:W.bitcoinData,schema:L({window:R([`90D`,`180D`,`1Y`]).default(`1Y`).describe(`How much history each signal is normalized and charted over.`)})}),ig=y({name:`eth-issuance-impact`,label:`ETH Issuance Impact`,category:`onchain`,iconUrl:U(`eth-issuance-impact`),layout:{w:4,h:3,minW:2,minH:2},description:`Ethereum's actual net annual supply growth (post-Merge PoS issuance minus EIP-1559 burn) vs the counterfactual pre-Merge PoW issuance rate, as diverging bars — how much leaner ETH's inflation is under proof-of-stake. Negative (deflationary) growth in green, positive (inflationary) in red. Keyless (ultrasound.money).`,capabilities:[`eth-supply`],source:W.ultrasound,schema:L({})}),ag=y({name:`treasury-avg-rate-bars`,label:`Treasury Avg Rate Bars`,category:`macro`,iconUrl:U(`treasury-avg-rate-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`U.S. Treasury average interest rates across the full set of security classes as a horizontal bar chart, ranked highest-first. The chart-first sibling of the Rates Board's Treasury-rates section. Keyless (U.S. Treasury).`,capabilities:[`treasury-rates`],source:W.treasury,schema:L({limit:I().int().min(5).max(25).default(20).describe(`How many security classes (by average rate, highest first) to chart.`)})}),og=y({name:`treasury-auction-demand-scatter`,label:`Treasury Auction Demand`,category:`macro`,iconUrl:U(`treasury-auction-demand-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`Recent completed U.S. Treasury auctions as a bubble scatter — awarded rate on the x-axis, bid-to-cover ratio (demand) on the y-axis, one dot per auction labelled by term. Reveals whether richer (lower-yield) auctions also draw stronger demand. Keyless (U.S. Treasury).`,capabilities:[`treasury-auctions`],source:W.treasury,schema:L({count:I().int().min(5).max(30).default(20).describe(`How many recent completed auctions (with a reported rate and bid-to-cover) to plot.`)})}),sg=y({name:`treasury-auction-size-bars`,label:`Treasury Auction Size`,category:`macro`,iconUrl:U(`treasury-auction-size-bars`),layout:{w:6,h:3,minW:3,minH:3},description:`Recent completed U.S. Treasury auctions as paired bars — the offering amount beside the amount actually accepted, per auction, oldest to newest. Shows at a glance how close each auction came to being fully subscribed. Keyless (U.S. Treasury).`,capabilities:[`treasury-auctions`],source:W.treasury,schema:L({count:I().int().min(3).max(20).default(8).describe(`How many recent completed auctions to chart (oldest to newest).`)})}),cg=y({name:`nyfed-reference-rate-bars`,label:`NY Fed Rate Bars`,category:`macro`,iconUrl:U(`nyfed-reference-rate-bars`),layout:{w:4,h:3,minW:3,minH:2},description:`The six official New York Fed reference rates (effective fed funds, SOFR, tri-party and broad general collateral repo, overnight bank funding, and SOFR averages) as a horizontal bar chart — level or reported volume. The chart-first sibling of the Rates Board's NY Fed section. Keyless (NY Fed).`,capabilities:[`reference-rates`],source:W.nyFed,schema:L({metric:R([`rate`,`volume`]).default(`rate`).describe(`"rate" charts each reference rate's level (%); "volume" charts its reported trading volume in USD (SOFR averages report no volume and are skipped in this mode).`),limit:I().int().min(2).max(6).default(6).describe(`How many of the six official reference rates to chart.`)})}),lg=y({name:`nyfed-sofr-term-averages-bars`,label:`SOFR Term Averages`,category:`macro`,iconUrl:U(`nyfed-sofr-term-averages-bars`),layout:{w:3,h:3,minW:2,minH:2},description:`SOFR compounded average rates over the trailing 30, 90, and 180 days as a simple bar comparison — a quick read on where short-term secured funding costs have been trending. Keyless (NY Fed).`,capabilities:[`reference-rates`],source:W.nyFed,schema:L({})}),ug=y({name:`nyfed-fed-funds-band-gauge`,label:`Fed Funds Band Gauge`,category:`macro`,iconUrl:U(`nyfed-fed-funds-band-gauge`),layout:{w:3,h:3,minW:2,minH:2},description:`The effective fed funds rate as a radial gauge inside the FOMC's current target band — the arc fills from the band's lower bound to its upper bound, with the live EFFR reading in the center. Makes it visible at a glance whether the effective rate is trading near the top, bottom, or middle of the target range. Keyless (NY Fed).`,capabilities:[`reference-rates`],source:W.nyFed,schema:L({})}),dg=y({name:`treasury-debt-composition-area`,label:`Debt Composition`,category:`macro`,iconUrl:U(`treasury-debt-composition-area`),layout:{w:6,h:4,minW:4,minH:3},description:`U.S. total public debt outstanding split into debt held by the public vs. intragovernmental holdings, as a stacked area chart over time — the two components that sum to the National Debt card's headline total. Keyless (U.S. Treasury).`,capabilities:[`national-debt`],source:W.treasury,schema:L({trendDays:I().int().min(30).max(365).default(180).describe(`How many business days of history to load for the stacked area.`)})}),fg=y({name:`ofr-stress-category-area`,label:`FSI by Category`,category:`macro`,iconUrl:U(`ofr-stress-category-area`),layout:{w:6,h:5,minW:4,minH:3},description:`The OFR Financial Stress Index decomposed into its five contributing categories (credit, equity valuation, safe assets, funding, volatility) as a stacked area chart over time — each category can be positive or negative and they sum to the overall index shown on the Financial Stress card. Keyless (OFR).`,capabilities:[`financial-stress`],source:W.ofr,schema:L({trendDays:I().int().min(20).max(90).default(60).describe(`How many recent daily readings to plot in the stacked area.`)})}),pg=y({name:`misery-index`,label:`Misery Index`,category:`macro`,iconUrl:U(`misery-index`),layout:{w:6,h:4,minW:4,minH:3},description:`The classic 'Misery Index' — CPI year-over-year inflation stacked with the unemployment rate — as a two-series stacked area chart, month-aligned, plus the combined headline score. Monthly macro context for stock dashboards, not a live feed. Keyless (BLS).`,capabilities:[`macro-series`],source:W.bls,schema:L({months:I().int().min(13).max(36).default(18).describe(`How many recent monthly observations to chart.`)})}),mg=y({name:`real-wages`,label:`Real Wages`,category:`macro`,iconUrl:U(`real-wages`),layout:{w:6,h:3,minW:3,minH:2},description:`Are paychecks outrunning inflation? A two-line chart comparing year-over-year average hourly earnings growth against year-over-year CPI inflation — when earnings run above CPI, real (inflation-adjusted) pay is rising. Monthly macro context, not a live feed. Keyless (BLS).`,capabilities:[`macro-series`],source:W.bls,schema:L({months:I().int().min(13).max(36).default(18).describe(`How many recent monthly year-over-year observations to chart.`)})}),hg=y({name:`labor-force-flow`,label:`Labor Force Flow`,category:`macro`,iconUrl:U(`labor-force-flow`),layout:{w:6,h:3,minW:3,minH:2},description:`The unemployment rate and the labor-force participation rate plotted together over time — a rising unemployment rate alongside a falling participation rate points to people leaving the workforce rather than finding jobs. Monthly macro context, not a live feed. Keyless (BLS).`,capabilities:[`macro-series`],source:W.bls,schema:L({months:I().int().min(13).max(36).default(18).describe(`How many recent monthly observations to chart.`)})}),gg=y({name:`payrolls-bars`,label:`Payrolls Bars`,category:`macro`,iconUrl:U(`payrolls-bars`),layout:{w:6,h:3,minW:3,minH:3},description:`Monthly nonfarm payrolls net change as a diverging bar chart — jobs added up in green, jobs cut down in red. The chart-first sibling of the Labor Market frame's headline figure. Monthly macro data, not a live feed. Keyless (BLS).`,capabilities:[`macro-series`],source:W.bls,schema:L({months:I().int().min(6).max(36).default(18).describe(`How many recent months of net payroll change to chart.`)})}),_g=y({name:`short-volume-bars`,label:`Short Volume Bars`,category:`equities`,iconUrl:U(`short-volume-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`Daily reported short-sale volume for a watchlist of US-listed stocks, ranked highest-first as a horizontal bar chart — the chart-first sibling of the Short Volume list. IMPORTANT: this is reported short volume (sell-side short flow, including market-maker hedging), NOT short interest, and is not a directional signal on its own. Daily data published the next business day; not a live feed. US equities only. (FINRA).`,capabilities:[`short-volume`],source:W.finra,schema:L({symbols:oo(F()).min(1).max(12).describe(`US-listed stock tickers to rank, e.g. ["TSLA","NVDA","AAPL"]. HIP-3 symbols ("xyz:TSLA") work too — the dex prefix is stripped. Crypto has no SEC/FINRA short-volume and is ignored.`)})}),vg=y({name:`capital-structure-bars`,label:`Capital Structure Bars`,category:`equities`,iconUrl:U(`capital-structure-bars`),layout:{w:4,h:3,minW:3,minH:2},description:"One company's balance-sheet shape as a horizontal bar chart — total assets, shareholders' equity, and liabilities (derived as assets minus equity) — from SEC EDGAR XBRL company facts. Updates only when the company files (annual/quarterly), not a live feed. Requires the zframes runtime's data proxy (ships with `zframes serve` / `vite dev`); resolve by ticker (bundled top-500 map) or raw SEC CIK. (SEC EDGAR).",capabilities:[`fundamentals`],source:W.secEdgar,schema:L({symbol:F().min(1).describe(`Company to chart — a ticker ("AAPL", "NVDA"), a HIP-3 symbol ("xyz:NVDA"), or a raw SEC CIK ("320193"). Tickers outside the bundled top-500 map need a CIK.`)})}),yg=y({name:`filings-mix`,label:`Filings Mix`,category:`equities`,iconUrl:U(`filings-mix`),layout:{w:4,h:4,minW:3,minH:3},description:`What kind of paper is one company actually filing? A donut of recent SEC EDGAR filings bucketed into periodic & material reports (10-K, 10-Q, 8-K, registrations, proxies, activist stakes…), insider ownership forms (3/4/5/144), and everything else — the chart-first sibling of the Filings Feed. Official data from SEC's free, CORS-safe submissions endpoint; event-driven, not a price feed. Resolve by ticker (bundled top-500 map) or raw SEC CIK. (SEC EDGAR).`,capabilities:[`filings`],source:W.secEdgar,schema:L({symbol:F().min(1).describe(`Company to show filing mix for — a ticker ("AAPL", "NVDA"), a HIP-3 symbol ("xyz:TSLA"), or a raw SEC CIK ("320193"). Tickers outside the bundled top-500 map need a CIK.`)})}),bg=y({name:`fx-cross-heatmap`,label:`FX Cross Heatmap`,category:`macro`,iconUrl:U(`fx-cross-heatmap`),layout:{w:6,h:4,minW:4,minH:4},description:`A full currency × currency cross-rate matrix as a heatmap — each cell is the day-over-day % change of that specific cross, derived from every listed currency's rate vs a common pivot, green up / red down. Spots which cross is moving hardest across an entire currency set, not just one pair at a time. Keyless (Frankfurter/ECB).`,capabilities:[`fx-rates`],source:W.frankfurter,schema:L({symbols:oo(F().length(3)).min(3).max(8).default([`USD`,`EUR`,`GBP`,`JPY`,`CHF`,`CAD`]).describe(`Currencies (ISO 4217 codes) forming both axes of the matrix, e.g. ["USD","EUR","GBP","JPY"]. At least 3, so the grid shows more than one cross.`)})}),xg=y({name:`etf-issuer-treemap`,label:`ETF Issuer Treemap`,category:`crypto`,iconUrl:U(`etf-issuer-treemap`),layout:{w:5,h:4,minW:4,minH:3},description:`Spot BTC or ETH ETF issuers as a treemap — tile size by assets under management, tint green/red by that issuer's net flow today. Shows who holds the most AND who's gathering or losing assets right now, in one view. Best-effort; may be empty if the source is unavailable. Keyless (SoSoValue).`,capabilities:[`etf-flows`],source:W.sosovalue,schema:L({asset:R([`btc`,`eth`]).default(`btc`).describe(`Which spot-ETF complex to show.`),limit:I().int().min(3).max(15).default(10).describe(`How many issuers (by AUM) to show in the treemap.`)})}),Sg=y({name:`fx-trend-chart`,label:`FX Trend Chart`,category:`macro`,iconUrl:U(`fx-trend-chart`),layout:{w:6,h:3,minW:4,minH:3},description:`Several currencies' recent trend vs a base, each indexed to 0% at the start of the window so wildly different-magnitude pairs (JPY vs CHF) compare cleanly on one chart. The multi-line sibling of the FX Board. Keyless (Frankfurter/ECB).`,capabilities:[`fx-rates`],source:W.frankfurter,schema:L({base:F().length(3).default(`USD`).describe(`Base currency (ISO 4217 code) each line is quoted against, e.g. "USD".`),symbols:oo(F().length(3)).min(1).max(8).default([`EUR`,`GBP`,`JPY`,`CHF`]).describe(`Currencies to chart (ISO 4217 codes), e.g. ["EUR","GBP","JPY"]. A code equal to the base is skipped.`)})}),Cg=y({name:`fear-greed-chart`,label:`Fear & Greed Chart`,category:`sentiment`,iconUrl:U(`fear-greed-chart`),layout:{w:6,h:3,minW:4,minH:3},description:`Crypto Fear & Greed index over time as a line chart — the mood swing from extreme fear to extreme greed across a wide window, the line tinted by the latest reading. The chart-first sibling of the Fear & Greed card. Keyless (alternative.me).`,capabilities:[`sentiment`],source:W.alternativeMe,schema:L({days:I().int().min(30).max(365).default(180).describe(`How many days of index history to chart.`)})}),wg=y({name:`prediction-market-bars`,label:`Prediction Market Bars`,category:`sentiment`,iconUrl:U(`prediction-market-bars`),layout:{w:5,h:5,minW:4,minH:4},description:`Live Polymarket odds as a horizontal bar chart — the highest-volume open prediction markets ranked by trailing-24h volume. The chart-first sibling of the Prediction Markets list. Keyless (Polymarket).`,capabilities:[`prediction-markets`],source:W.polymarket,schema:L({limit:I().int().min(3).max(15).default(8).describe(`How many markets (by volume) to chart.`)})}),Tg=y({name:`dxy-chart`,label:`Dollar Index Chart`,category:`macro`,iconUrl:U(`dxy-chart`),layout:{w:6,h:3,minW:4,minH:3},description:`US Dollar Index (DXY) as a line chart over time — the dollar's trend vs a basket of six major currencies, tinted green/red by its own direction. The chart-first sibling of the Dollar Index card. Keyless (Frankfurter/ECB).`,capabilities:[`dollar-index`],source:W.frankfurter,schema:L({})}),Eg=y({name:`fx-movers-bars`,label:`FX Movers Bars`,category:`macro`,iconUrl:U(`fx-movers-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`A currency set's day-over-day % change vs a base as a diverging bar chart — strengthening currencies right in green, weakening left in red, ranked by move. The chart-first sibling of the FX Board. Keyless (Frankfurter/ECB).`,capabilities:[`fx-rates`],source:W.frankfurter,schema:L({base:F().length(3).default(`USD`).describe(`Base currency (ISO 4217 code) each bar is quoted against, e.g. "USD".`),symbols:oo(F().length(3)).min(1).max(12).default([`EUR`,`GBP`,`JPY`,`CHF`,`CAD`,`AUD`]).describe(`Currencies to chart (ISO 4217 codes), e.g. ["EUR","GBP","JPY"]. A code equal to the base is skipped.`)})}),Dg=y({name:`prediction-market-scatter`,label:`Prediction Market Scatter`,category:`sentiment`,iconUrl:U(`prediction-market-scatter`),layout:{w:6,h:4,minW:4,minH:3},description:`Live Polymarket odds as a bubble scatter — each market's top-outcome probability on the x-axis, trailing-24h volume on a log y-axis, bubble size by volume. Surfaces high-conviction, high-volume markets versus thin long shots. The chart-first sibling of the Prediction Markets list. Keyless (Polymarket).`,capabilities:[`prediction-markets`],source:W.polymarket,schema:L({limit:I().int().min(5).max(30).default(15).describe(`How many markets (by volume) to plot.`)})}),Og=y({name:`etf-issuer-bars`,label:`ETF Issuer Bars`,category:`crypto`,iconUrl:U(`etf-issuer-bars`),layout:{w:4,h:4,minW:3,minH:3},description:`Spot BTC or ETH ETF issuers' daily net flow as a diverging bar chart — inflows right in green, outflows left in red, ranked by size. The chart-first sibling of the Spot ETF Flows list. Best-effort; may be empty if the source is unavailable. Keyless (SoSoValue).`,capabilities:[`etf-flows`],source:W.sosovalue,schema:L({asset:R([`btc`,`eth`]).default(`btc`).describe(`Which spot-ETF complex to chart.`),limit:I().int().min(3).max(15).default(10).describe(`How many issuers (by |net flow|) to chart.`)})}),kg=y({name:`portfolio-movers`,label:`Portfolio Movers`,category:`portfolio`,iconUrl:U(`portfolio-movers`),layout:{w:4,h:5,minW:3,minH:4},description:`Your connected portfolio's holdings as a diverging bar chart of 24h price change — gainers right in green, losers left in red. Source is a connected Binance account (read-only key, in-app) or a public on-chain wallet address. Only holdings the source reports a 24h change for are shown — currently that's on-chain wallet holdings (priced via CoinGecko); a Binance-only portfolio will show its empty state until the account layer adds a price-change feed. Renders a connect prompt until a source is set.`,capabilities:[`portfolio`],account:!0,schema:L({...Cp,limit:I().int().min(4).max(30).default(15).describe(`How many holdings (by absolute 24h change) to chart.`)})}),Ag=y({name:`portfolio-value-bars`,label:`Portfolio Value Bars`,category:`portfolio`,iconUrl:U(`portfolio-value-bars`),layout:{w:4,h:5,minW:3,minH:4},description:`Your connected portfolio's positions as a horizontal bar chart ranked by live USD value, largest first. The chart-first sibling of the Portfolio Holdings table. Source is a connected Binance account (read-only key, in-app) or a public on-chain wallet address. Renders a connect prompt until a source is set.`,capabilities:[`portfolio`,`quote-stream`],account:!0,schema:L({...Cp,limit:I().int().min(3).max(25).default(12).describe(`How many holdings (by USD value, descending) to chart.`)})}),jg=y({name:`etf-flow-calendar`,label:`ETF Flow Calendar`,category:`crypto`,iconUrl:U(`etf-flow-calendar`),layout:{w:6,h:5,minW:4,minH:3},description:`Spot BTC or ETH ETF daily net flows as a GitHub-style calendar heatmap — one column per weekday, one row per week, green shades for inflow days and red for outflow days (intensity relative to the window). Surfaces weekly inflow/outflow rhythm the daily bar chart doesn't show at a glance. Keyless (SoSoValue); best-effort, may be empty if the source is unavailable.`,capabilities:[`etf-flows`],source:W.sosovalue,schema:L({asset:R([`btc`,`eth`]).default(`btc`).describe(`Which spot-ETF complex to chart.`),lookback:R([`1M`,`3M`,`6M`]).default(`3M`).describe(`History window for the calendar grid.`)})}),Mg=y({name:`prediction-markets-bubble`,label:`Prediction Markets Bubbles`,category:`sentiment`,iconUrl:U(`prediction-markets-bubble`),layout:{w:6,h:5,minW:4,minH:3},description:`Live Polymarket odds as a floating bubble cloud — one bubble per open market, sized by 24h volume, tinted by how confident the leading outcome is (muted near a toss-up, vivid green near certain). The chart-first sibling of the Prediction Markets list. Keyless (Polymarket Gamma API).`,capabilities:[`prediction-markets`],source:W.polymarket,schema:L({limit:I().int().min(3).max(20).default(10).describe(`How many markets (by volume) to show.`)})}),Ng=[`XAU`,`XAG`,`XPT`,`XPD`,`HG`],Pg=[`XAU`,`XAG`,`XPT`,`XPD`],Fg=`XAU gold, XAG silver, XPT platinum, XPD palladium, HG copper (copper is quoted per pound; the rest per troy ounce)`,Ig=`XAU gold, XAG silver, XPT platinum, XPD palladium. Gold and silver go back to 1968, platinum and palladium to 1990.`,Lg=(e,t)=>I().int().min(1).max(58).default(e).describe(t),Rg=y({name:`metals-board`,label:`Metals Board`,category:`metals`,iconUrl:U(`metals-board`),layout:{w:3,h:4,minW:2,minH:3},description:`Live spot board for the metals complex — gold, silver, platinum, palladium and copper — each with its current price and its move against the most recent London fix. Keyless spot quotes; the metals equivalent of a crypto ticker list.`,capabilities:[`metal-spot`],source:W.goldApi,schema:L({symbols:oo(R(Ng)).min(1).max(5).default([...Ng]).describe(`Metals to list, in display order. ${Fg}.`),showChange:eo().default(!0).describe(`Show each metal's percent move against the latest London fix. The change appears once the fix history has loaded (a few seconds after first paint).`)})}),zg=y({name:`metal-price`,label:`Metal Price`,category:`metals`,iconUrl:U(`metal-price`),layout:{w:3,h:2,minW:2,minH:2},description:`One metal's live spot price as a headline number, in the weight unit you pick (troy ounce, gram, kilogram or tola). The single-asset hero card for a gold or silver dashboard.`,capabilities:[`metal-spot`],source:W.goldApi,schema:L({symbol:R(Ng).default(`XAU`).describe(`Metal to price. ${Fg}.`),unit:R([`ounce`,`gram`,`kilogram`,`tola`]).default(`ounce`).describe(`Weight unit the headline price is quoted in. Troy ounce is the market convention; gram and kilogram suit retail bullion, tola is the South Asian bar unit (11.6638 g). Ignored for copper, which quotes per pound.`),showFix:eo().default(!0).describe(`Show the latest London fix underneath as the reference the change is measured from.`)})}),Bg=y({name:`metal-value`,label:`Metal Holding Value`,category:`metals`,iconUrl:U(`metal-value`),layout:{w:3,h:2,minW:2,minH:2},description:`What a physical holding is worth right now: a weight you own, multiplied by live spot. Set the weight and unit once and the card revalues itself as the metal moves.`,capabilities:[`metal-spot`],source:W.goldApi,schema:L({symbol:R(Ng).default(`XAU`).describe(`Metal held. ${Fg}.`),weight:I().positive().default(1).describe("How much of the metal is held, in `unit`."),unit:R([`ounce`,`gram`,`kilogram`,`tola`]).default(`ounce`).describe(`Unit the weight is expressed in — troy ounce, gram, kilogram, or tola (11.6638 g).`)})}),Vg=y({name:`metal-price-chart`,label:`Metal Price Chart`,category:`metals`,iconUrl:U(`metal-price-chart`),layout:{w:6,h:4,minW:4,minH:3},description:`Daily London fix history for one or more metals — the benchmark price the physical market settles against, published by the LBMA and running back to 1968 for gold and silver. Set the window in years and switch to a log axis for multi-decade views.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbols:oo(R(Pg)).min(1).max(4).default([`XAU`]).describe(`Metals to chart. ${Ig}`),currency:R([`USD`,`GBP`,`EUR`]).default(`USD`).describe("Which published fix SERIES to read — the LBMA fixes each metal in all three, and they are separate prints, not conversions of one another (EUR only exists from 1999). This is a data choice, not a display one: to change what the card renders money in, set the frame instance's own `currency` (sibling of `config`) or the dashboard's. A USD fix follows that display currency; a GBP/EUR fix is shown as published."),years:Lg(5,`How many years of daily fixes to chart.`),logScale:eo().default(!1).describe(`Use a logarithmic price axis — the honest way to read a multi-decade series, where a move from $35 to $350 is the same tenfold step as $350 to $3,500.`)})}),Hg=y({name:`metal-drawdown`,label:`Metal Drawdown`,category:`metals`,iconUrl:U(`metal-drawdown`),layout:{w:5,h:4,minW:3,minH:3},description:`How far a metal sits below its running all-time high, charted through history. Gold's decades-long post-1980 underwater stretch is the clearest picture of what a real bear market in bullion looks like.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbol:R(Pg).default(`XAU`).describe(`Metal to chart. ${Ig}`),years:Lg(20,`How many years of drawdown history to chart.`)})}),Ug=y({name:`metal-annual-returns`,label:`Metal Annual Returns`,category:`metals`,iconUrl:U(`metal-annual-returns`),layout:{w:5,h:4,minW:4,minH:3},description:`Calendar-year percent return per year as diverging bars — green up years, red down years — from the LBMA fix history. The at-a-glance record of how often, and how hard, a metal actually delivers.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbol:R(Pg).default(`XAU`).describe(`Metal to chart. ${Ig}`),years:I().int().min(3).max(58).default(15).describe(`How many calendar years of returns to show, most recent last.`)})}),Wg=y({name:`metal-seasonality`,label:`Metal Seasonality`,category:`metals`,iconUrl:U(`metal-seasonality`),layout:{w:6,h:4,minW:4,minH:3},description:`Month-by-year heatmap of monthly percent returns, with each month's long-run average underneath — the standard way to look for seasonal patterns in gold and silver without eyeballing a price chart.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbol:R(Pg).default(`XAU`).describe(`Metal to analyse. ${Ig}`),years:I().int().min(5).max(58).default(20).describe(`How many years of monthly returns to include in the grid.`)})}),Gg=y({name:`metal-volatility`,label:`Metal Volatility`,category:`metals`,iconUrl:U(`metal-volatility`),layout:{w:5,h:4,minW:4,minH:3},description:`Rolling annualised realised volatility from daily fixes — how violent the metal has actually been, not what options imply. Quiet gold sits near 10%; a crisis takes it past 30%.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbol:R(Pg).default(`XAU`).describe(`Metal to analyse. ${Ig}`),window:I().int().min(20).max(365).default(90).describe(`Rolling window in trading days. 30 is twitchy, 90 is the common standard, 252 is a year.`),years:Lg(10,`How many years of the volatility series to chart.`)})}),Kg=y({name:`gold-silver-ratio`,label:`Gold/Silver Ratio`,category:`metals`,iconUrl:U(`gold-silver-ratio`),layout:{w:4,h:3,minW:3,minH:2},description:`How many ounces of silver one ounce of gold buys — the oldest relative-value gauge in metals. Shows the live ratio, where it sits in its own historical range, and the trend.`,capabilities:[`metal-history`],source:W.lbma,schema:L({years:Lg(20,`How many years of ratio history to chart and rank against.`),showPercentile:eo().default(!0).describe(`Show where today's ratio ranks within the charted window — 100% means silver has never been cheaper against gold over that span.`)})}),qg=y({name:`metal-ratio-chart`,label:`Metal Ratio Chart`,category:`metals`,iconUrl:U(`metal-ratio-chart`),layout:{w:5,h:4,minW:4,minH:3},description:`The price of any metal divided by any other, charted over time — gold/silver, gold/platinum, platinum/palladium. Relative value between two metals, free of the dollar's own trend.`,capabilities:[`metal-history`],source:W.lbma,schema:L({numerator:R(Pg).default(`XAU`).describe(`Metal on top of the ratio. ${Ig}`),denominator:R(Pg).default(`XAG`).describe(`Metal on the bottom of the ratio. Must differ from the numerator.`),years:Lg(20,`How many years of ratio history to chart.`)})}),Jg=y({name:`metal-compare-chart`,label:`Metal Compare`,category:`metals`,iconUrl:U(`metal-compare-chart`),layout:{w:6,h:4,minW:4,minH:3},description:`Several metals rebased to 0% at the start of the window so a $4,000 gold and a $58 silver compare on one axis. The relative-performance race across the complex.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbols:oo(R(Pg)).min(2).max(4).default([...Pg]).describe(`Metals to race against each other. ${Ig}`),years:Lg(10,`How many years the race runs over.`)})}),Yg=y({name:`metal-performance`,label:`Metal Performance`,category:`metals`,iconUrl:U(`metal-performance`),layout:{w:4,h:4,minW:3,minH:3},description:`One metal's return across standard horizons — 1M, 3M, 6M, YTD, 1Y, 5Y, 10Y, 20Y — as diverging bars. Switch to annualised to compare long horizons honestly instead of letting a 20-year number dwarf everything.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbol:R(Pg).default(`XAU`).describe(`Metal to measure. ${Ig}`),mode:R([`cumulative`,`annualized`]).default(`cumulative`).describe(`cumulative = total return over each horizon; annualized = the compound annual rate, which makes long and short horizons comparable.`)})}),Xg=y({name:`metal-ath`,label:`Metal ATH Watch`,category:`metals`,iconUrl:U(`metal-ath`),layout:{w:3,h:3,minW:2,minH:2},description:`All-time-high watch from the full fix history: the record price and when it was set, how far below it the metal trades now, and how long it has been since the last record.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbol:R(Pg).default(`XAU`).describe(`Metal to watch. ${Ig}`)})}),Zg=y({name:`metal-fix-table`,label:`London Fix Table`,category:`metals`,iconUrl:U(`metal-fix-table`),layout:{w:3,h:4,minW:2,minH:3},description:`The most recent daily London fixes as a table — date, fix price and the day-over-day change. The settlement prints themselves, for anyone who prices contracts off the fix rather than off spot.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbol:R(Pg).default(`XAU`).describe(`Metal whose fixes to list. ${Ig}`),currency:R([`USD`,`GBP`,`EUR`]).default(`USD`).describe("Which published fix SERIES to list — the LBMA publishes all three as separate prints, not conversions of one another. This is a data choice, not a display one: to change what the card renders money in, set the frame instance's own `currency` (sibling of `config`) or the dashboard's. A USD fix follows that display currency; a GBP/EUR fix is shown as published."),rows:I().int().min(5).max(40).default(12).describe(`How many recent fixes to list, newest first.`)})}),Qg=y({name:`metal-milestones`,label:`Metal Milestones`,category:`metals`,iconUrl:U(`metal-milestones`),layout:{w:3,h:4,minW:2,minH:3},description:`When the metal first crossed each round-number price — $100, $500, $1,000, $2,000 — and how long each leg took. A timeline only decades of fix history can tell, and the most human way to read gold's long climb.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbol:R(Pg).default(`XAU`).describe(`Metal whose milestones to list. ${Ig}`),newestFirst:eo().default(!0).describe(`List the most recent milestone at the top. Turn off to read the climb chronologically from 1968.`)})}),$g=y({name:`metal-return-distribution`,label:`Return Distribution`,category:`metals`,iconUrl:U(`metal-return-distribution`),layout:{w:5,h:4,minW:4,minH:3},description:`Histogram of the metal's periodic returns over decades, with the mean marked — how fat the tails really are, rather than the tidy bell curve risk models assume.`,capabilities:[`metal-history`],source:W.lbma,schema:L({symbol:R(Pg).default(`XAU`).describe(`Metal to analyse. ${Ig}`),period:R([`daily`,`monthly`]).default(`monthly`).describe(`Bucket returns by trading day or by calendar month. Monthly is smoother and easier to read; daily exposes the tails.`),years:Lg(30,`How many years of returns to bucket.`)})}),e_=y({name:`metals-correlation`,label:`Metals Correlation`,category:`metals`,iconUrl:U(`metals-correlation`),layout:{w:4,h:4,minW:3,minH:3},description:`Correlation matrix of daily returns across gold, silver, platinum and palladium over a chosen window — which metals actually move together, and which only look like they do.`,capabilities:[`metal-history`],source:W.lbma,schema:L({years:Lg(3,`Window, in years, the correlations are measured over.`)})}),t_=y({name:`btc-in-gold`,label:`BTC in Gold`,category:`metals`,iconUrl:U(`btc-in-gold`),layout:{w:5,h:4,minW:4,minH:3},description:`Bitcoin priced in ounces of gold instead of dollars — how many ounces one BTC buys, charted over time. The clean way to ask whether Bitcoin is beating the oldest hard asset or just the dollar.`,capabilities:[`metal-history`,`price-history-daily`],source:W.lbma,schema:L({years:Lg(10,`How many years of the BTC-in-ounces ratio to chart.`),logScale:eo().default(!0).describe(`Use a logarithmic axis — the ratio has spanned four orders of magnitude, so linear hides everything before the last cycle.`)})}),n_=y({name:`metal-cot-net`,label:`COT Net Positioning`,category:`metals`,iconUrl:U(`metal-cot-net`),layout:{w:5,h:4,minW:4,minH:3},description:`Net speculative positioning from the CFTC's weekly Commitments of Traders — non-commercial longs minus shorts, against a zero line. Crowded longs have marked local tops in gold for decades.`,capabilities:[`metal-positioning`],source:W.cftc,schema:L({symbol:R(Ng).default(`XAU`).describe(`Metal futures market to read. ${Fg}.`),years:I().int().min(1).max(10).default(5).describe(`How many years of weekly reports to chart.`),showOpenInterest:eo().default(!1).describe(`Overlay total open interest so a change in net positioning can be read against whether the whole market grew or shrank.`)})}),r_=y({name:`metal-cot-breakdown`,label:`COT Trader Breakdown`,category:`metals`,iconUrl:U(`metal-cot-breakdown`),layout:{w:4,h:3,minW:3,minH:2},description:`The latest COT week split by trader class — non-commercial speculators, commercial hedgers and small traders — as opposing long and short bars, plus each group's net and its week-over-week change.`,capabilities:[`metal-positioning`],source:W.cftc,schema:L({symbol:R(Ng).default(`XAU`).describe(`Metal futures market to read. ${Fg}.`)})}),i_=y({name:`metal-cot-gauge`,label:`COT Positioning Gauge`,category:`metals`,iconUrl:U(`metal-cot-gauge`),layout:{w:3,h:3,minW:2,minH:2},description:`Where speculative net positioning sits inside its own historical range, as a dial from washed-out short to crowded long — a contrarian sentiment gauge built from the CFTC's own weekly numbers.`,capabilities:[`metal-positioning`],source:W.cftc,schema:L({symbol:R(Ng).default(`XAU`).describe(`Metal futures market to read. ${Fg}.`),years:I().int().min(1).max(10).default(5).describe(`Lookback the percentile is ranked against, in years.`)})}),a_=y({name:`metal-open-interest`,label:`Futures Open Interest`,category:`metals`,iconUrl:U(`metal-open-interest`),layout:{w:5,h:4,minW:4,minH:3},description:`Total open interest in the metal's US futures contract, weekly from the CFTC — in contracts, in ounces, or in dollar notional at today's spot. How much paper claim sits on top of the physical market.`,capabilities:[`metal-positioning`,`metal-spot`],source:W.cftc,schema:L({symbol:R(Ng).default(`XAU`).describe(`Metal futures market to read. ${Fg}.`),years:I().int().min(1).max(10).default(5).describe(`How many years of weekly open interest to chart.`),unit:R([`contracts`,`ounces`,`notional`]).default(`contracts`).describe(`contracts = as CFTC reports it; ounces = contracts × contract size; notional = ounces × live spot (needs a spot quote).`)})}),o_=y({name:`metal-positioning-vs-price`,label:`Positioning vs Price`,category:`metals`,iconUrl:U(`metal-positioning-vs-price`),layout:{w:6,h:4,minW:4,minH:3},description:`Net speculative positioning and the metal's price on one rebased chart, so you can see whether a rally is being led by the futures crowd or happening in spite of them — and where the two have diverged.`,capabilities:[`metal-positioning`,`metal-history`],source:W.cftc,schema:L({symbol:R(Pg).default(`XAU`).describe(`Metal to compare. ${Ig} (the price leg needs an LBMA fix, so copper isn't available here).`),years:I().int().min(1).max(10).default(5).describe(`How many years both series cover.`)})}),s_=y({name:`us-gold-reserve`,label:`US Gold Reserve`,category:`metals`,iconUrl:U(`us-gold-reserve`),layout:{w:4,h:4,minW:3,minH:3},description:`The U.S. Treasury's official gold holding from its own monthly status report: total fine ounces, the statutory book value that still carries it at $42.22/oz, and what the same metal is worth at today's spot. The gap between the two is the headline.`,capabilities:[`gold-reserve`,`metal-spot`],source:W.treasury,schema:L({showMarketValue:eo().default(!0).describe(`Value the reserve at live spot alongside the statutory book value, and show the difference.`)})}),c_=y({name:`us-gold-vaults`,label:`US Gold Vaults`,category:`metals`,iconUrl:U(`us-gold-vaults`),layout:{w:4,h:4,minW:3,minH:3},description:`Where the U.S. official gold physically sits — Fort Knox, West Point, Denver, the New York Fed vault and Mint working stock — sized by fine ounces, straight from the Treasury's monthly report.`,capabilities:[`gold-reserve`],source:W.treasury,schema:L({mode:R([`treemap`,`bars`]).default(`treemap`).describe(`treemap = area per vault, good for the size contrast; bars = ranked horizontal bars, easier to read exact ounces.`)})}),l_=y({name:`tokenized-gold`,label:`Tokenized Gold`,category:`metals`,iconUrl:U(`tokenized-gold`),layout:{w:4,h:4,minW:3,minH:3},description:`Gold-backed tokens (PAXG, XAUT) with their premium or discount to physical spot, market cap and the ounces they claim to vault — the crypto wrapper on bullion, priced against the real thing.`,capabilities:[`tokenized-gold`],source:W.coingecko,schema:L({showPremium:eo().default(!0).describe(`Show each token's premium (+) or discount (−) against live spot gold. A persistent premium is the market pricing convenience over custody.`)})}),u_=[Rg,zg,Bg,Vg,Hg,Ug,Wg,Gg,Kg,qg,Jg,Yg,Xg,Zg,Qg,$g,e_,t_,n_,r_,i_,a_,o_,s_,c_,l_,gh,Dp,wp,Tp,Ep,$f,Uf,_p,fp,Gf,sp,lp,rp,ap,ip,op,dp,Kf,gp,mp,pp,hp,np,Wf,qf,Jf,Sp,Yf,Xf,ep,tp,up,Zf,Qf,cp,Op,kp,Ap,jp,Mp,Np,Pp,Fp,Ip,Lp,Rp,zp,Bp,Vp,Hp,Up,im,am,om,sm,cm,lm,um,dm,fm,pm,mm,hm,gm,_m,vm,ym,bm,xm,Sm,Cm,wm,Tm,Em,Dm,Om,km,Am,jm,Mm,Nm,Pm,Fm,Im,Lm,Rm,zm,Bm,Vm,Hm,Um,Wm,Gm,Km,qm,Jm,Ym,Xm,Zm,Qm,$m,th,nh,rh,ih,ah,oh,sh,ch,lh,uh,dh,fh,ph,mh,hh,_h,vh,yh,bh,xh,Sh,Ch,wh,Th,Eh,Dh,Oh,kh,Ah,jh,Mh,Nh,Ph,Fh,Ih,Lh,Rh,zh,Bh,Vh,Hh,Uh,Wh,Gh,Kh,qh,Jh,Yh,Xh,Zh,Qh,$h,eg,tg,ng,rg,ig,ag,og,sg,cg,lg,ug,dg,fg,pg,mg,hg,gg,_g,vg,yg,bg,xg,Sg,Cg,wg,Tg,Eg,Dg,Og,kg,Ag,jg,Mg,Qp,nm,$p,Xp,Wp,Yp,vp,yp,bp,xp,Kp,em,Zp,Gp,tm,Jp,rm,qp],d_=()=>null;function f_(){let e=new Map;for(let t of u_){let n=Af[t.name];if(!n){console.warn(`[zframes] frame "${t.name}" has metadata but no lazy loader — it won't render`);continue}let r=null,i=()=>r??=n.load().catch(e=>{throw r=null,e}),a=(0,h.lazy)(()=>i().then(e=>({default:e.component}))),o=n.titleIcon?(0,h.lazy)(()=>i().then(e=>(e.titleIcon||console.warn(`[zframes] frame "${t.name}" is flagged titleIcon but its module exports none`),{default:e.titleIcon??d_}))):void 0,s=n.titleContent?(0,h.lazy)(()=>i().then(e=>(e.titleContent||console.warn(`[zframes] frame "${t.name}" is flagged titleContent but its module exports none`),{default:e.titleContent??d_}))):void 0;e.set(t.name,{...t,component:a,titleIcon:o,titleContent:s})}return e}function p_(e){let t=e.indexOf(`:`);return t===-1?e:e.slice(t+1)}function m_(e){return e.includes(`:`)}function h_(e){let t=p_(e);return m_(e)?`https://assets.parqet.com/logos/symbol/${encodeURIComponent(t)}?format=png`:`https://assets.coincap.io/assets/icons/${t.toLowerCase()}@2x.png`}var g_=[`#5b6cff`,`#9b59ff`,`#e0608f`,`#e08a3c`,`#3fb6a8`,`#4f93e8`,`#7a8c52`,`#c0556b`];function __(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return g_[Math.abs(t)%g_.length]}function v_({symbol:e,size:t=18,className:n=``}){let r=p_(e),i=m_(e),[a,o]=(0,h.useState)(!1);(0,h.useEffect)(()=>o(!1),[e]);let s=i?`rounded-[5px]`:`rounded-full`,c={width:t,height:t};return a?(0,z.jsx)(`span`,{"aria-hidden":!0,className:`inline-flex shrink-0 items-center justify-center font-bold leading-none text-white ${s} ${n}`,style:{...c,background:__(r),fontSize:Math.round(t*.42)},children:r.slice(0,2).toUpperCase()}):(0,z.jsx)(`img`,{src:h_(e),width:t,height:t,alt:``,"aria-hidden":!0,draggable:!1,loading:`lazy`,onError:()=>o(!0),className:`shrink-0 object-contain ${s} ${i?`bg-white p-px`:``} ${n}`,style:c})}var y_=[`xyz:*`],b_=200,x_=`var(--zf-up, #3fd08f)`,S_=`var(--zf-down, #ff6b81)`;function C_(e){return e>=1e3?`$${e.toLocaleString(`en-US`,{maximumFractionDigits:0})}`:e>=1?`$${e.toLocaleString(`en-US`,{maximumFractionDigits:2})}`:`$${e.toPrecision(4)}`}var w_=`
|
|
547
|
+
.zf-tape {
|
|
548
|
+
position: fixed;
|
|
549
|
+
left: 0;
|
|
550
|
+
right: 0;
|
|
551
|
+
bottom: 0;
|
|
552
|
+
z-index: 30;
|
|
553
|
+
height: 36px;
|
|
554
|
+
display: flex;
|
|
555
|
+
align-items: center;
|
|
556
|
+
overflow: hidden;
|
|
557
|
+
background: rgba(10, 11, 17, 0.86);
|
|
558
|
+
border-top: 1px solid rgba(255, 255, 255, 0.08);
|
|
559
|
+
font-family: var(--font-dmsans, system-ui, sans-serif);
|
|
560
|
+
-webkit-mask-image: linear-gradient(90deg, transparent, #000 2.5%, #000 97.5%, transparent);
|
|
561
|
+
mask-image: linear-gradient(90deg, transparent, #000 2.5%, #000 97.5%, transparent);
|
|
562
|
+
}
|
|
563
|
+
.zf-tape-track {
|
|
564
|
+
display: flex;
|
|
565
|
+
flex-shrink: 0;
|
|
566
|
+
align-items: center;
|
|
567
|
+
white-space: nowrap;
|
|
568
|
+
will-change: transform;
|
|
569
|
+
animation-name: zf-tape-scroll;
|
|
570
|
+
animation-timing-function: linear;
|
|
571
|
+
animation-iteration-count: infinite;
|
|
572
|
+
}
|
|
573
|
+
.zf-tape:hover .zf-tape-track { animation-play-state: paused; }
|
|
574
|
+
.zf-tape-item {
|
|
575
|
+
display: inline-flex;
|
|
576
|
+
align-items: center;
|
|
577
|
+
gap: 7px;
|
|
578
|
+
padding: 0 15px;
|
|
579
|
+
border-right: 1px solid rgba(255, 255, 255, 0.06);
|
|
580
|
+
font-size: 12px;
|
|
581
|
+
line-height: 1;
|
|
582
|
+
}
|
|
583
|
+
.zf-tape-sym { font-weight: 700; color: rgba(255, 255, 255, 0.92); letter-spacing: 0.02em; }
|
|
584
|
+
.zf-tape-px { color: rgba(255, 255, 255, 0.58); font-variant-numeric: tabular-nums; }
|
|
585
|
+
.zf-tape-chg { font-weight: 600; font-variant-numeric: tabular-nums; }
|
|
586
|
+
@keyframes zf-tape-scroll {
|
|
587
|
+
from { transform: translateX(0); }
|
|
588
|
+
to { transform: translateX(-50%); }
|
|
589
|
+
}
|
|
590
|
+
@media (prefers-reduced-motion: reduce) {
|
|
591
|
+
.zf-tape { overflow-x: auto; -webkit-mask-image: none; mask-image: none; }
|
|
592
|
+
.zf-tape-track { animation: none; }
|
|
593
|
+
}
|
|
594
|
+
`;function T_(){let e=c(y_,6e4),t=c(void 0,6e4),{symbols:n,stats:r}=(0,h.useMemo)(()=>{let n=e=>Object.entries(e).filter(([,e])=>e.markPx>0&&e.prevDayPx>0).map(([e])=>e).sort();return{symbols:[...n(e),...n(t)].slice(0,b_),stats:{...t,...e}}},[e,t]),i=s(`quote-stream`),a=(0,h.useRef)(null);if((0,h.useEffect)(()=>{let e=a.current;if(!e||!i?.subscribeMids||n.length===0)return;let t={},r=()=>{for(let n of e.querySelectorAll(`[data-zf-px]`)){let e=t[n.dataset.zfPx??``];if(e===void 0)continue;let r=C_(e);n.textContent!==r&&(n.textContent=r)}},o=i.subscribeMids(e=>{t=e},n),s=window.setTimeout(r,400),c=window.setInterval(r,1500);return()=>{o(),clearTimeout(s),clearInterval(c)}},[i,n.join(`,`)]),n.length===0)return null;let o=Math.max(40,n.length*2.2),l=e=>n.map(t=>{let n=r[t];if(!n)return null;let i=n.changePct>=0?x_:S_,a=n.changePct>=0?`+`:``;return(0,z.jsxs)(`span`,{className:`zf-tape-item`,children:[(0,z.jsx)(v_,{symbol:t,size:15}),(0,z.jsx)(`span`,{className:`zf-tape-sym`,children:p_(t)}),(0,z.jsx)(`span`,{className:`zf-tape-px`,"data-zf-px":t,children:C_(n.markPx)}),(0,z.jsxs)(`span`,{className:`zf-tape-chg`,style:{color:i},children:[a,n.changePct.toFixed(2),`%`]})]},`${e}-${t}`)});return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`style`,{children:w_}),(0,z.jsx)(`div`,{className:`zf-tape`,"aria-label":`live ticker tape`,children:(0,z.jsxs)(`div`,{ref:a,className:`zf-tape-track`,style:{animationDuration:`${o}s`},children:[l(`a`),(0,z.jsx)(`span`,{"aria-hidden":!0,style:{display:`contents`},children:l(`b`)})]})})]})}var E_=`(min-width: 1024px)`;function D_(){let[e,t]=(0,h.useState)(()=>window.matchMedia(E_).matches);return(0,h.useEffect)(()=>{let e=window.matchMedia(E_),n=()=>t(e.matches);return e.addEventListener(`change`,n),()=>e.removeEventListener(`change`,n)},[]),e}var O_=`/unicornStudio.legacy.umd.mjs`,k_=null;function A_(){return typeof window>`u`||typeof document>`u`?Promise.reject(Error(`UnicornStudio needs a browser`)):k_||(k_=(async()=>{let e=`const module={exports:{}};const exports=module.exports;
|
|
595
|
+
`+await fetch(O_).then(e=>{if(!e.ok)throw Error(`failed to load UnicornStudio (${e.status})`);return e.text()})+`
|
|
596
|
+
export default module.exports;`,t=URL.createObjectURL(new Blob([e],{type:`text/javascript`}));try{let e=(await H(()=>import(t),[])).default;if(!e?.addScene)throw Error(`UnicornStudio engine missing addScene`);return e}finally{URL.revokeObjectURL(t)}})(),k_.catch(()=>{k_=null}),k_)}var j_=new class{_raw;_url;constructor(e){this._raw=e;let t=URL.createObjectURL(new Blob([JSON.stringify(this._raw)],{type:`application/json`}));this._url=t}get url(){return this._url}}({history:[{breakpoints:[],visible:!0,aspectRatio:1,userDownsample:1,layerType:`effect`,type:`gradient`,usesPingPong:!1,speed:.25,trackMouse:0,mouseMomentum:0,texture:!1,animating:!1,isMask:0,compiledFragmentShaders:[`#version 300 es
|
|
597
|
+
precision highp float;in vec2 vTextureCoord;uniform vec2 uMousePos;vec3 getColor(int index) { switch(index) { case 0: return vec3(1, 1, 1); case 1: return vec3(0, 0, 0); case 2: return vec3(0, 0, 0); case 3: return vec3(0, 0, 0); case 4: return vec3(0, 0, 0); case 5: return vec3(0, 0, 0); case 6: return vec3(0, 0, 0); case 7: return vec3(0, 0, 0); case 8: return vec3(0, 0, 0); case 9: return vec3(0, 0, 0); case 10: return vec3(0, 0, 0); case 11: return vec3(0, 0, 0); case 12: return vec3(0, 0, 0); case 13: return vec3(0, 0, 0); case 14: return vec3(0, 0, 0); case 15: return vec3(0, 0, 0); default: return vec3(0.0); } }const float PI = 3.14159265;vec2 rotate(vec2 coord, float angle) { float s = sin(angle); float c = cos(angle); return vec2( coord.x * c - coord.y * s, coord.x * s + coord.y * c ); }out vec4 fragColor;vec3 getColor(vec2 uv) {return vec3(1, 1, 1); }void main() {vec2 uv = vTextureCoord; vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000); uv -= pos; uv /= (0.5000*2.); uv = rotate(uv, (0.0000 - 0.5) * 2. * PI); vec4 color = vec4(getColor(uv), 1.); fragColor = color; }`],compiledVertexShaders:[`#version 300 es
|
|
598
|
+
precision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vTextureCoord = aTextureCoord; }`],data:{downSample:.5,depth:!1,uniforms:{},isBackground:!0},id:`effect`},{breakpoints:[],visible:!0,locked:!1,aspectRatio:1.0793650793650795,layerName:``,userDownsample:1,isElement:!0,opacity:1,effects:[],displace:0,trackMouse:0,anchorPoint:`center`,mouseMomentum:0,blendMode:`NORMAL`,bgDisplace:0,mask:0,maskBackground:{type:`Vec3`,_x:0,_y:0,_z:0},maskAlpha:0,maskDepth:0,dispersion:0,axisTilt:0,states:{appear:[],scroll:[],hover:[]},layerType:`shape`,width:.49660178547135064,widthMode:`relative`,height:.4600869483043395,heightMode:`auto`,left:.35409161821999585,leftMode:`relative`,top:.6850280273460352,topMode:`relative`,rotation:0,pos:{type:`Vec2`,_x:.5,_y:.5},borderRadius:0,gradientAngle:0,strokeWidth:0,coords:[[0,0],[.49660178547135064,0],[.49660178547135064,.4600869483043395],[0,.4600869483043395]],fill:[`#7001D7`],fitToCanvas:!1,gradientType:`linear`,type:`circle`,stroke:[`#000000`],numSides:3,compiledFragmentShaders:[`#version 300 es
|
|
599
|
+
precision highp float; in vec2 vTextureCoord; in vec3 vVertexPosition;uniform sampler2D uBgTexture; uniform sampler2D uTexture; uniform vec2 uMousePos; uniform int uSampleBg;out vec4 fragColor;void main() { vec2 uv = vTextureCoord; vec2 pos = mix(vec2(0), (uMousePos - 0.5), 0.0000);uv = uv - pos;vec4 color = texture(uTexture, uv); vec4 background = vec4(0);if(uSampleBg == 1) { background = texture(uBgTexture, vTextureCoord); }color = mix(background, color / max(color.a, 0.0001), color.a * 1.0000);fragColor = color; }`],compiledVertexShaders:[`#version 300 es
|
|
600
|
+
precision highp float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix; uniform vec2 uMousePos;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { float angleX = uMousePos.y * 0.5 - 0.25; float angleY = (1.-uMousePos.x) * 0.5 - 0.25;mat4 rotateX = mat4(1.0, 0.0, 0.0, 0.0, 0.0, cos(angleX), -sin(angleX), 0.0, 0.0, sin(angleX), cos(angleX), 0.0, 0.0, 0.0, 0.0, 1.0); mat4 rotateY = mat4(cos(angleY), 0.0, sin(angleY), 0.0, 0.0, 1.0, 0.0, 0.0, -sin(angleY), 0.0, cos(angleY), 0.0, 0.0, 0.0, 0.0, 1.0);mat4 rotationMatrix = rotateX * rotateY; gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vVertexPosition = (rotationMatrix * vec4(aVertexPosition, 1.0)).xyz; vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }`],data:{uniforms:{}},id:`shape`},{breakpoints:[],visible:!0,locked:!1,aspectRatio:1.0158730158730158,layerName:``,userDownsample:1,isElement:!0,opacity:1,effects:[],displace:0,trackMouse:0,anchorPoint:`center`,mouseMomentum:0,blendMode:`MULTIPLY`,bgDisplace:0,mask:0,maskBackground:{type:`Vec3`,_x:0,_y:0,_z:0},maskAlpha:0,maskDepth:0,dispersion:0,axisTilt:0,states:{appear:[],scroll:[],hover:[]},layerType:`shape`,width:.46738991573774175,widthMode:`relative`,height:.46008694830433955,heightMode:`auto`,left:.7457263018329404,leftMode:`relative`,top:.5757566919333954,topMode:`relative`,rotation:0,pos:{type:`Vec2`,_x:.5,_y:.5},borderRadius:0,gradientAngle:0,strokeWidth:0,coords:[[0,0],[.46738991573774175,0],[.46738991573774175,.46008694830433955],[0,.46008694830433955]],fill:[`#4E21AC`],fitToCanvas:!1,gradientType:`linear`,type:`circle`,stroke:[`#000000`],numSides:3,compiledFragmentShaders:[`#version 300 es
|
|
601
|
+
precision highp float; in vec2 vTextureCoord; in vec3 vVertexPosition;uniform vec2 uResolution; uniform vec2 uMousePos; uniform sampler2D uBgTexture; uniform sampler2D uPreviousLayerTexture; uniform sampler2D uTexture; uniform int uSampleBg;vec3 blend (int blendMode, vec3 src, vec3 dst) { return src * dst; }const float STEPS = 24.0; const float PI = 3.1415926;vec2 perspectiveUV(vec2 uv) { float aspectRatio = uResolution.x/uResolution.y; vec2 centeredUV = uv - 0.5; centeredUV.x *= aspectRatio; float strength = 1.0 + (vVertexPosition.z * 0.0000); vec2 perspectiveUV = centeredUV / strength; perspectiveUV.x /= aspectRatio; perspectiveUV += 0.5; return perspectiveUV; }out vec4 fragColor;void main() { vec2 uv = vTextureCoord; vec2 pos = mix(vec2(0), (uMousePos - 0.5), 0.0000); uv = perspectiveUV(uv) - pos; vec4 background = vec4(0);if(uSampleBg == 1) { background = texture(uBgTexture, vTextureCoord); } vec4 color = texture(uTexture, uv);if (0.0000 == 1.00) { if(0 == 2) { background *= (1. - color.a); color = background; } else { background *= color.a; color.rgb = background.rgb; color.rgb = 0.0000 > 0. ? mix(vec3(0, 0, 0), color.rgb, color.a) : color.rgb; color.a = min(1., color.a + 0.0000); if(0 == 1) { vec4 previousLayer = texture(uPreviousLayerTexture, vTextureCoord); color = mix(previousLayer, color/max(color.a, 0.0001), color.a * 1.0000); } } fragColor = color; return; }if (3 > 0) { vec3 unpremultColor = color.rgb / max(color.a, 0.0001); vec3 blendedColor = blend(3, unpremultColor, background.rgb); color = vec4(blendedColor, 1.0) * (color.a * 1.0000); color = color + background * (1.0 - color.a); } else { color = mix(background, color + background * (1.0 - color.a), 1.0000); }fragColor = color; }`],compiledVertexShaders:[`#version 300 es
|
|
602
|
+
precision highp float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix; uniform vec2 uMousePos;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { float angleX = uMousePos.y * 0.5 - 0.25; float angleY = (1.-uMousePos.x) * 0.5 - 0.25;mat4 rotateX = mat4(1.0, 0.0, 0.0, 0.0, 0.0, cos(angleX), -sin(angleX), 0.0, 0.0, sin(angleX), cos(angleX), 0.0, 0.0, 0.0, 0.0, 1.0); mat4 rotateY = mat4(cos(angleY), 0.0, sin(angleY), 0.0, 0.0, 1.0, 0.0, 0.0, -sin(angleY), 0.0, cos(angleY), 0.0, 0.0, 0.0, 0.0, 1.0);mat4 rotationMatrix = rotateX * rotateY; gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vVertexPosition = (rotationMatrix * vec4(aVertexPosition, 1.0)).xyz; vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }`],data:{uniforms:{}},id:`shape1`},{breakpoints:[],visible:!0,locked:!1,aspectRatio:.996031746031746,layerName:``,userDownsample:1,isElement:!0,opacity:1,effects:[],displace:0,trackMouse:0,anchorPoint:`center`,mouseMomentum:0,blendMode:`MULTIPLY`,bgDisplace:0,mask:0,maskBackground:{type:`Vec3`,_x:0,_y:0,_z:0},maskAlpha:0,maskDepth:0,dispersion:0,axisTilt:0,states:{appear:[],scroll:[],hover:[]},layerType:`shape`,width:.45826120644598894,widthMode:`relative`,height:.4600869483043395,heightMode:`auto`,left:.49185679854495884,leftMode:`relative`,top:.35992750274551055,topMode:`relative`,rotation:0,pos:{type:`Vec2`,_x:.5,_y:.5},borderRadius:0,gradientAngle:0,strokeWidth:0,coords:[[0,0],[.45826120644598894,0],[.45826120644598894,.4600869483043395],[0,.4600869483043395]],fill:[`#FFC7E6`],fitToCanvas:!1,gradientType:`linear`,type:`rectangle`,stroke:[`#000000`],numSides:3,compiledFragmentShaders:[`#version 300 es
|
|
603
|
+
precision highp float; in vec2 vTextureCoord; in vec3 vVertexPosition;uniform vec2 uResolution; uniform vec2 uMousePos; uniform sampler2D uBgTexture; uniform sampler2D uPreviousLayerTexture; uniform sampler2D uTexture; uniform int uSampleBg;vec3 blend (int blendMode, vec3 src, vec3 dst) { return src * dst; }const float STEPS = 24.0; const float PI = 3.1415926;vec2 perspectiveUV(vec2 uv) { float aspectRatio = uResolution.x/uResolution.y; vec2 centeredUV = uv - 0.5; centeredUV.x *= aspectRatio; float strength = 1.0 + (vVertexPosition.z * 0.0000); vec2 perspectiveUV = centeredUV / strength; perspectiveUV.x /= aspectRatio; perspectiveUV += 0.5; return perspectiveUV; }out vec4 fragColor;void main() { vec2 uv = vTextureCoord; vec2 pos = mix(vec2(0), (uMousePos - 0.5), 0.0000); uv = perspectiveUV(uv) - pos; vec4 background = vec4(0);if(uSampleBg == 1) { background = texture(uBgTexture, vTextureCoord); } vec4 color = texture(uTexture, uv);if (0.0000 == 1.00) { if(0 == 2) { background *= (1. - color.a); color = background; } else { background *= color.a; color.rgb = background.rgb; color.rgb = 0.0000 > 0. ? mix(vec3(0, 0, 0), color.rgb, color.a) : color.rgb; color.a = min(1., color.a + 0.0000); if(0 == 1) { vec4 previousLayer = texture(uPreviousLayerTexture, vTextureCoord); color = mix(previousLayer, color/max(color.a, 0.0001), color.a * 1.0000); } } fragColor = color; return; }if (3 > 0) { vec3 unpremultColor = color.rgb / max(color.a, 0.0001); vec3 blendedColor = blend(3, unpremultColor, background.rgb); color = vec4(blendedColor, 1.0) * (color.a * 1.0000); color = color + background * (1.0 - color.a); } else { color = mix(background, color + background * (1.0 - color.a), 1.0000); }fragColor = color; }`],compiledVertexShaders:[`#version 300 es
|
|
604
|
+
precision highp float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix; uniform vec2 uMousePos;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { float angleX = uMousePos.y * 0.5 - 0.25; float angleY = (1.-uMousePos.x) * 0.5 - 0.25;mat4 rotateX = mat4(1.0, 0.0, 0.0, 0.0, 0.0, cos(angleX), -sin(angleX), 0.0, 0.0, sin(angleX), cos(angleX), 0.0, 0.0, 0.0, 0.0, 1.0); mat4 rotateY = mat4(cos(angleY), 0.0, sin(angleY), 0.0, 0.0, 1.0, 0.0, 0.0, -sin(angleY), 0.0, cos(angleY), 0.0, 0.0, 0.0, 0.0, 1.0);mat4 rotationMatrix = rotateX * rotateY; gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vVertexPosition = (rotationMatrix * vec4(aVertexPosition, 1.0)).xyz; vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }`],data:{uniforms:{}},id:`shape2`},{breakpoints:[],visible:!0,aspectRatio:1,userDownsample:1,layerType:`effect`,type:`blur`,usesPingPong:!1,trackMouse:0,mouseMomentum:0,texture:!1,animating:!1,isMask:0,compiledFragmentShaders:[`#version 300 es
|
|
605
|
+
precision highp float; precision highp int;in vec3 vVertexPosition; in vec2 vTextureCoord;uniform sampler2D uTexture; uniform vec2 uMousePos; uniform vec2 uResolution; float ease (int easingFunc, float t) { return t; }out vec4 fragColor;const int kernelSize = 36; float getGaussianWeight(int index) { switch(index) { case 0: return 0.00094768; case 1: return 0.00151965; case 2: return 0.00237008; case 3: return 0.00359517; case 4: return 0.0053041; case 5: return 0.00761097; case 6: return 0.01062197; case 7: return 0.01441804; case 8: return 0.01903459; case 9: return 0.0244409; case 10: return 0.03052299; case 11: return 0.03707432; case 12: return 0.04379813; case 13: return 0.05032389; case 14: return 0.05623791; case 15: return 0.06112521; case 16: return 0.06461716; case 17: return 0.06643724; case 18: return 0.06643724; case 19: return 0.06461716; case 20: return 0.06112521; case 21: return 0.05623791; case 22: return 0.05032389; case 23: return 0.04379813; case 24: return 0.03707432; case 25: return 0.03052299; case 26: return 0.0244409; case 27: return 0.01903459; case 28: return 0.01441804; case 29: return 0.01062197; case 30: return 0.00761097; case 31: return 0.0053041; case 32: return 0.00359517; case 33: return 0.00237008; case 34: return 0.00151965; case 35: return 0.00094768; default: return 0.0; } }vec4 GaussianBlur(sampler2D tex, vec2 uv, vec2 direction) { vec4 color = vec4(0.0); vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000); float inner = distance(uv, pos); float outer = max(0., 1.-distance(uv, pos));float amt = 0 <= 1 ? 6. : 11.; float amount = (1.0000 * amt) * ease(0, mix(inner, outer, 0.1000)); color += texture(tex, uv) * getGaussianWeight(0); for (int i = 0; i < kernelSize; i++) { float x = float(i - kernelSize / 2) * amount; color += texture(tex, uv + vec2(x * 0.001) * direction * vec2(1.0000, 1. - 1.0000)) * getGaussianWeight(i); } return color; }vec4 blur(vec2 uv, vec2 direction) { return GaussianBlur(uTexture, uv, direction); }void main() { vec2 uv = vTextureCoord; vec4 color = vec4(0); int dir = 0 % 2; vec2 direction = dir == 1 ? vec2(0, uResolution.x/uResolution.y) : vec2(1, 0);color = blur(uv, direction); fragColor = color;}`,`#version 300 es
|
|
606
|
+
precision highp float; precision highp int;in vec3 vVertexPosition; in vec2 vTextureCoord;uniform sampler2D uTexture; uniform vec2 uMousePos; uniform vec2 uResolution; float ease (int easingFunc, float t) { return t; }out vec4 fragColor;const int kernelSize = 36; float getGaussianWeight(int index) { switch(index) { case 0: return 0.00094768; case 1: return 0.00151965; case 2: return 0.00237008; case 3: return 0.00359517; case 4: return 0.0053041; case 5: return 0.00761097; case 6: return 0.01062197; case 7: return 0.01441804; case 8: return 0.01903459; case 9: return 0.0244409; case 10: return 0.03052299; case 11: return 0.03707432; case 12: return 0.04379813; case 13: return 0.05032389; case 14: return 0.05623791; case 15: return 0.06112521; case 16: return 0.06461716; case 17: return 0.06643724; case 18: return 0.06643724; case 19: return 0.06461716; case 20: return 0.06112521; case 21: return 0.05623791; case 22: return 0.05032389; case 23: return 0.04379813; case 24: return 0.03707432; case 25: return 0.03052299; case 26: return 0.0244409; case 27: return 0.01903459; case 28: return 0.01441804; case 29: return 0.01062197; case 30: return 0.00761097; case 31: return 0.0053041; case 32: return 0.00359517; case 33: return 0.00237008; case 34: return 0.00151965; case 35: return 0.00094768; default: return 0.0; } }vec4 GaussianBlur(sampler2D tex, vec2 uv, vec2 direction) { vec4 color = vec4(0.0); vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000); float inner = distance(uv, pos); float outer = max(0., 1.-distance(uv, pos));float amt = 1 <= 1 ? 6. : 11.; float amount = (1.0000 * amt) * ease(0, mix(inner, outer, 0.1000)); color += texture(tex, uv) * getGaussianWeight(0); for (int i = 0; i < kernelSize; i++) { float x = float(i - kernelSize / 2) * amount; color += texture(tex, uv + vec2(x * 0.001) * direction * vec2(1.0000, 1. - 1.0000)) * getGaussianWeight(i); } return color; }vec4 blur(vec2 uv, vec2 direction) { return GaussianBlur(uTexture, uv, direction); }void main() { vec2 uv = vTextureCoord; vec4 color = vec4(0); int dir = 1 % 2; vec2 direction = dir == 1 ? vec2(0, uResolution.x/uResolution.y) : vec2(1, 0);color = blur(uv, direction); fragColor = color;}`,`#version 300 es
|
|
607
|
+
precision highp float; precision highp int;in vec3 vVertexPosition; in vec2 vTextureCoord;uniform sampler2D uTexture; uniform vec2 uMousePos; uniform vec2 uResolution; float ease (int easingFunc, float t) { return t; }out vec4 fragColor;const int kernelSize = 36; float getGaussianWeight(int index) { switch(index) { case 0: return 0.00094768; case 1: return 0.00151965; case 2: return 0.00237008; case 3: return 0.00359517; case 4: return 0.0053041; case 5: return 0.00761097; case 6: return 0.01062197; case 7: return 0.01441804; case 8: return 0.01903459; case 9: return 0.0244409; case 10: return 0.03052299; case 11: return 0.03707432; case 12: return 0.04379813; case 13: return 0.05032389; case 14: return 0.05623791; case 15: return 0.06112521; case 16: return 0.06461716; case 17: return 0.06643724; case 18: return 0.06643724; case 19: return 0.06461716; case 20: return 0.06112521; case 21: return 0.05623791; case 22: return 0.05032389; case 23: return 0.04379813; case 24: return 0.03707432; case 25: return 0.03052299; case 26: return 0.0244409; case 27: return 0.01903459; case 28: return 0.01441804; case 29: return 0.01062197; case 30: return 0.00761097; case 31: return 0.0053041; case 32: return 0.00359517; case 33: return 0.00237008; case 34: return 0.00151965; case 35: return 0.00094768; default: return 0.0; } }vec4 GaussianBlur(sampler2D tex, vec2 uv, vec2 direction) { vec4 color = vec4(0.0); vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000); float inner = distance(uv, pos); float outer = max(0., 1.-distance(uv, pos));float amt = 2 <= 1 ? 6. : 11.; float amount = (1.0000 * amt) * ease(0, mix(inner, outer, 0.1000)); color += texture(tex, uv) * getGaussianWeight(0); for (int i = 0; i < kernelSize; i++) { float x = float(i - kernelSize / 2) * amount; color += texture(tex, uv + vec2(x * 0.001) * direction * vec2(1.0000, 1. - 1.0000)) * getGaussianWeight(i); } return color; }vec4 blur(vec2 uv, vec2 direction) { return GaussianBlur(uTexture, uv, direction); }void main() { vec2 uv = vTextureCoord; vec4 color = vec4(0); int dir = 2 % 2; vec2 direction = dir == 1 ? vec2(0, uResolution.x/uResolution.y) : vec2(1, 0);color = blur(uv, direction); fragColor = color;}`,`#version 300 es
|
|
608
|
+
precision highp float; precision highp int;in vec3 vVertexPosition; in vec2 vTextureCoord;uniform sampler2D uTexture; uniform vec2 uMousePos; uniform vec2 uResolution; float ease (int easingFunc, float t) { return t; } uvec2 pcg2d(uvec2 v) { v = v * 1664525u + 1013904223u; v.x += v.y * v.y * 1664525u + 1013904223u; v.y += v.x * v.x * 1664525u + 1013904223u; v ^= v >> 16; v.x += v.y * v.y * 1664525u + 1013904223u; v.y += v.x * v.x * 1664525u + 1013904223u; return v; }float randFibo(vec2 p) { uvec2 v = floatBitsToUint(p); v = pcg2d(v); uint r = v.x ^ v.y; return float(r) / float(0xffffffffu); }out vec4 fragColor;const int kernelSize = 36; float getGaussianWeight(int index) { switch(index) { case 0: return 0.00094768; case 1: return 0.00151965; case 2: return 0.00237008; case 3: return 0.00359517; case 4: return 0.0053041; case 5: return 0.00761097; case 6: return 0.01062197; case 7: return 0.01441804; case 8: return 0.01903459; case 9: return 0.0244409; case 10: return 0.03052299; case 11: return 0.03707432; case 12: return 0.04379813; case 13: return 0.05032389; case 14: return 0.05623791; case 15: return 0.06112521; case 16: return 0.06461716; case 17: return 0.06643724; case 18: return 0.06643724; case 19: return 0.06461716; case 20: return 0.06112521; case 21: return 0.05623791; case 22: return 0.05032389; case 23: return 0.04379813; case 24: return 0.03707432; case 25: return 0.03052299; case 26: return 0.0244409; case 27: return 0.01903459; case 28: return 0.01441804; case 29: return 0.01062197; case 30: return 0.00761097; case 31: return 0.0053041; case 32: return 0.00359517; case 33: return 0.00237008; case 34: return 0.00151965; case 35: return 0.00094768; default: return 0.0; } }vec4 GaussianBlur(sampler2D tex, vec2 uv, vec2 direction) { vec4 color = vec4(0.0); vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000); float inner = distance(uv, pos); float outer = max(0., 1.-distance(uv, pos));float amt = 3 <= 1 ? 6. : 11.; float amount = (1.0000 * amt) * ease(0, mix(inner, outer, 0.1000)); color += texture(tex, uv) * getGaussianWeight(0); for (int i = 0; i < kernelSize; i++) { float x = float(i - kernelSize / 2) * amount; color += texture(tex, uv + vec2(x * 0.001) * direction * vec2(1.0000, 1. - 1.0000)) * getGaussianWeight(i); } return color; }vec4 blur(vec2 uv, vec2 direction) { return GaussianBlur(uTexture, uv, direction); }void main() { vec2 uv = vTextureCoord; vec4 color = vec4(0); int dir = 3 % 2; vec2 direction = dir == 1 ? vec2(0, uResolution.x/uResolution.y) : vec2(1, 0);color = blur(uv, direction);float dither = (randFibo(gl_FragCoord.xy) - 0.5) / 255.0; color.rgb += dither; fragColor = color;}`],compiledVertexShaders:[`#version 300 es
|
|
609
|
+
precision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }`],data:{downSample:.25,depth:!1,uniforms:{},isBackground:!1,passes:[{prop:`vertical`,value:1,downSample:.25},{prop:`vertical`,value:2,downSample:.5},{prop:`vertical`,value:3,downSample:.5}]},id:`effect1`},{breakpoints:[],visible:!0,aspectRatio:1,userDownsample:1,layerType:`effect`,type:`sdf_shape`,usesPingPong:!1,texture:!1,speed:1,trackMouseMove:0,mouseMomentum:1,trackMouse:.15,animating:!0,isMask:0,compiledFragmentShaders:[`#version 300 es
|
|
610
|
+
precision highp float; precision highp int;in vec2 vTextureCoord; uniform sampler2D uTexture;uniform float uTime;uniform vec2 uMousePos; uniform vec2 uResolution;uvec2 pcg2d(uvec2 v) { v = v * 1664525u + 1013904223u; v.x += v.y * v.y * 1664525u + 1013904223u; v.y += v.x * v.x * 1664525u + 1013904223u; v ^= v >> 16; v.x += v.y * v.y * 1664525u + 1013904223u; v.y += v.x * v.x * 1664525u + 1013904223u; return v; }float randFibo(vec2 p) { uvec2 v = floatBitsToUint(p); v = pcg2d(v); uint r = v.x ^ v.y; return float(r) / float(0xffffffffu); }const float PI = 3.141592653; const float PI2 = 6.283185306; const int DISP_STEPS = 12; const vec3 viewDir = vec3(0,0, -4.25);ivec2 customTexSize; float customTexAspect;const mat3 ROT_Y_90 = mat3( 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0 );const mat3 ROT_Z_90 = mat3( 0.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 );const mat3 ROT_X_90 = mat3( 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 );mat3 rotY(float ang) { float c = cos(ang), s = sin(ang); return mat3(c, 0.0, s, 0.0, 1.0, 0.0, -s, 0.0, c); }mat3 rotX(float ang) { float c = cos(ang), s = sin(ang); return mat3(1.0, 0.0, 0.0, 0.0, c, -s, 0.0, s, c); }mat3 rotZ(float ang) { float c = cos(ang), s = sin(ang); return mat3(c, -s, 0.0, s, c, 0.0, 0.0, 0.0, 1.0); }mat2 rot(float a) { float s = sin(a); float c = cos(a); return mat2(c, -s, s, c); }vec3 twistY(vec3 p, float amount) { float c = cos(amount * p.y); float s = sin(amount * p.y); mat2 m = mat2(c, -s, s, c); return vec3(m * p.xz, p.y); }vec3 twistX(vec3 p, float amount) { float c = cos(amount * p.x); float s = sin(amount * p.x); mat2 m = mat2(c, -s, s, c); return vec3(p.x, m * p.yz); }float smin(float a, float b, float k) { float h = max(k - abs(a - b), 0.0); return min(a, b) - h * h * 0.25 / k; }float sphere(vec3 p, float r) { return length(p) - r; }float sdfCylinder(vec3 p, float radius, float height) { vec2 d = abs(vec2(length(p.xz) - radius, p.y)) - vec2(radius, height * 0.5); return min(max(d.x, d.y), 0.0) + length(max(d, 0.0)); }float sdStar5(vec2 p, float r, float rf) { const vec2 k1 = vec2(0.809016994375, -0.587785252292); const vec2 k2 = vec2(-k1.x,k1.y); p.x = abs(p.x); p -= 2.0*max(dot(k1,p),0.0)*k1; p -= 2.0*max(dot(k2,p),0.0)*k2; p.x = abs(p.x); p.y -= r; vec2 ba = rf*vec2(-k1.y,k1.x) - vec2(0,1); float h = clamp( dot(p,ba)/dot(ba,ba), 0.0, r ); return length(p-ba*h) * sign(p.y*ba.x-p.x*ba.y); }float mergedDiscs(vec3 p) { float result = sdfCylinder(p, 0.7, 0.01 + 0.0000 * 0.5);for(float i = 1.; i < 4.; i++) { float angle = (i * 45.)/360. * 2.0 * PI; mat2 rotZMat = rot(angle); vec3 rotatedP = vec3(rotZMat * p.xy, p.z);result = smin( result, sdfCylinder(rotatedP, 0.7, 0.01 + 0.0000 * 0.5), 0.2 ); }return max(result, sphere(p, 1.4)); }vec3 getRepeat(vec3 p) { float spacing = (0.5000 + 0.4800 * 0.38) * 8.; return p; }vec3 getThreeDRepeat(vec3 p) { float spacing = (0.5000 + 0.4800 * 0.38) * 8.; return p; }vec3 getAdjustedP(vec3 p) { float scale = max(0.2600, 0.000000001); float scaleFactor = 1.0/scale; vec3 adjustedP = p * scaleFactor;vec2 twist = vec2(0.7, 0.82);adjustedP.xy *= vec2(uResolution.x / uResolution.y, 1);adjustedP *= (1. + (0.4800 + 0.01));vec2 mousePos = mix(vec2(0), uMousePos - 0.5, 0.1500); vec2 axis = vec2(-1. * vec3(0.48503740648379057, 0.5187032418952618, 0.6966).y - 1. + mousePos.y/PI, vec3(0.48503740648379057, 0.5187032418952618, 0.6966).x + mousePos.x/PI) * 2.;adjustedP = getRepeat(adjustedP);float baseTime = uTime * 0.02; float timeX = vec3(0, 1.2, 0).x * baseTime; float timeY = vec3(0, 1.2, 0).y * baseTime; float timeZ = vec3(0, 1.2, 0).z * baseTime;mat3 rotYMat = rotY(axis.y * PI); mat3 rotXMat = rotX(axis.x * PI); mat3 rotZMat = rotZ(vec3(0.48503740648379057, 0.5187032418952618, 0.6966).z * 2.0 * PI);mat3 combinedRotation = rotZMat * rotYMat * rotXMat; mat3 combinedAnimation = rotZ(timeZ) * rotX(timeX) * rotY(timeY);adjustedP = combinedRotation * adjustedP; adjustedP = combinedAnimation * adjustedP; adjustedP = getThreeDRepeat(adjustedP); adjustedP = mix(adjustedP, twistY(adjustedP, -1.0 * twist.y), step(0.0, abs(twist.y))); adjustedP = mix(adjustedP, twistX(adjustedP, -1.0 * twist.x), step(0.0, abs(twist.x)));return adjustedP; }float getMergedSDF(vec3 p) { p = getAdjustedP(p); return mergedDiscs(p); }float fresnel(vec3 eyeVector, vec3 worldNormal, float power) { float NdotV = abs(dot(eyeVector, worldNormal)); float width = fwidth(dot(eyeVector, worldNormal)); float threshold = 0.2; float edgeDampFactor = smoothstep(threshold, -threshold, width); float fresnelFactor = 1.0 - NdotV; return pow(fresnelFactor, power) * mix(1., edgeDampFactor * 2., 0.5); }vec3 noFrostOrDispersion(vec3 rd, vec3 normal) { float ior = 1.0 / (1.0 + 0.7000 * 0.25); vec3 refractedRay = refract(rd, normal, ior); return texture(uTexture, vTextureCoord - refractedRay.xy).rgb; }vec3 frostOrDispersion(vec3 rd, vec3 normal) { vec3 refractionColor = vec3(0); float iorBase = 1. + 0.7000 * 0.25;vec3 dispCoefficients = vec3(0.03, 0.06, 0.1) * 0.2500 * 1.2;for (int i = 0; i < DISP_STEPS; ++i) { float step = float(i) / float(DISP_STEPS); vec3 disp = step * dispCoefficients; vec3 ior = 1.0 / (iorBase + disp);vec3 refractedRayR = refract(rd, normal, ior.r); vec3 refractedRayG = refract(rd, normal, ior.g); vec3 refractedRayB = refract(rd, normal, ior.b);refractionColor.r += texture(uTexture, vTextureCoord - refractedRayR.xy).r; refractionColor.g += texture(uTexture, vTextureCoord - refractedRayG.xy).g; refractionColor.b += texture(uTexture, vTextureCoord - refractedRayB.xy).b; }return clamp(refractionColor / float(DISP_STEPS), 0.0, 1.0); }vec3 calculateNormal(vec3 p, float eps) { vec2 e = vec2(1.0, -1.0) * eps * 0.5; return normalize( e.xyy * getMergedSDF(p + e.xyy) + e.yyx * getMergedSDF(p + e.yyx) + e.yxy * getMergedSDF(p + e.yxy) + e.xxx * getMergedSDF(p + e.xxx) ); }vec3 sampleTexture(vec3 rd, vec3 normal) {return frostOrDispersion(rd, normal); return noFrostOrDispersion(rd, normal); }float scene(vec3 p) { return max(0.0000000001, getMergedSDF(p) - (0.4800 + 0.005)) * max(0.2600, 0.000000001); }const int STEPS = 128; const float MAX_DISTANCE = 100.0;vec4 rayMarch(vec3 ro, vec3 rd) { float pixelSize = 0.0025; float traveled = 0.; vec3 entryPoint = vec3(0.0); vec3 entryNormal = vec3(0.0); float partialAlpha = 0.0; float lastDistance = 0.0; float smoothing = mix(1., 4., 1.0000);for (int i = 0; i < STEPS; ++i) { vec3 currentPos = ro + rd * traveled; float distance = scene(currentPos); float progress = float(i)/float(STEPS); float step = distance * mix(1., 1.5, progress);if (distance > MAX_DISTANCE) break;if (distance < pixelSize) { partialAlpha = 1.; entryPoint = currentPos; entryNormal = calculateNormal(entryPoint, pixelSize * smoothing); break; }lastDistance = distance;traveled += max(step, pixelSize); if (traveled > MAX_DISTANCE) break; }if (partialAlpha == 0.0) { return texture(uTexture, vTextureCoord); }vec3 samplePosition = mix(rd, entryPoint, 0.0000);vec3 refractionColor = vec3(0.0);refractionColor = sampleTexture(samplePosition, entryNormal); vec3 lightDir = vec3(((vec2(vec3(0.25, 0.25, -3).x, 1.-vec3(0.25, 0.25, -3).y) - 0.333) * 3.) - vec2(0.5, 0.5), vec3(0.25, 0.25, -3).z); vec3 normLightDir = normalize(lightDir);float lightAndShadow = dot(entryNormal, normLightDir); vec3 lightColor = mix(vec3(1), vec3(1, 1, 1), 1. - 0.0000); vec3 fresnelEffect = vec3(0.0);fresnelEffect = fresnel(rd, entryNormal, 8.0) * 0.3000 * vec3(1, 1, 1);vec3 specularEffect = vec3(0.0);vec3 halfwayDir = normalize(lightDir + rd); float specFactor = pow(max(dot(entryNormal, halfwayDir), 0.0), 64.0 * 0.3000 + 0.01); specularEffect = specFactor * 0.3000 * lightColor;vec3 combinedEffects = fresnelEffect + specularEffect; vec3 finalColor = mix(refractionColor, vec3(1, 1, 1) * lightAndShadow, 0.0000); finalColor += combinedEffects;vec4 outputColor = vec4(finalColor, 1.);return outputColor; }out vec4 fragColor;void main() { vec4 col = vec4(0); vec4 bg = texture(uTexture, vTextureCoord);if(0.2600 <= 0.0001 || 0.5000 <= 0.0001) { col = vec4(0); if(1 == 1) { col = bg; } fragColor = col; return; }vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000); vec2 uv = vTextureCoord - pos; float fovFactor = tan(radians(20.) * 0.5); vec3 rd = vec3(uv * fovFactor, 0.5); col = rayMarch(viewDir, rd); float dither = (randFibo(vTextureCoord.xy) - 0.5) / 255.0; col += dither;col = mix(bg, col, 0.5000); fragColor = col;}`],compiledVertexShaders:[`#version 300 es
|
|
611
|
+
precision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }`],data:{depth:!1,uniforms:{},isBackground:!1},id:`effect2`},{breakpoints:[],visible:!0,aspectRatio:1,userDownsample:1,layerType:`effect`,type:`sphere`,usesPingPong:!1,trackMouse:0,mouseMomentum:0,texture:!1,animating:!1,isMask:0,compiledFragmentShaders:[`#version 300 es
|
|
612
|
+
precision mediump float; in vec3 vVertexPosition; in vec2 vTextureCoord; uniform sampler2D uTexture; uniform vec2 uMousePos; uniform vec2 uResolution;const float STEPS = 16.0; const float PI = 3.1415926;vec3 chromaticAbberation(vec2 st, float angle, float amount, float blend) { float aspectRatio = uResolution.x/uResolution.y; float rotation = angle * 360.0 * PI / 180.0; vec2 aberrated = amount * vec2(0.1 * sin(rotation) * aspectRatio, 0.1 * cos(rotation)); aberrated *= distance(st, vec2(0.5)) * 2.0; vec4 red = vec4(0); vec4 blue = vec4(0); vec4 green = vec4(0); float invSteps = 1.0 / STEPS; float invStepsHalf = invSteps * 0.5; for(float i = 1.0; i <= STEPS; i++) { vec2 offset = aberrated * (i * invSteps); red += texture(uTexture, st - offset) * invSteps; blue += texture(uTexture, st + offset) * invSteps; }for (float i = 0.0; i <= STEPS; i++) { vec2 offset = aberrated * ((i * invSteps) - 0.5); green += texture(uTexture, st + offset) * invSteps; } return vec3(red.r, green.g, blue.b); }vec2 sphericalTransformation( float u, float v, float uCenter, float vCenter, float lensRadius, float tau) { float aspectRatio = uResolution.x/uResolution.y; u -= uCenter; v -= vCenter;float s = sqrt(u * u + v * v); if (s > lensRadius) return vec2(u + uCenter, v + vCenter);float z = sqrt(lensRadius * lensRadius - s * s);float uAlpha = (1.0 - (1.0 / tau)) * asin(u / lensRadius); float vAlpha = (1.0 - (1.0 / tau)) * asin(v / lensRadius);u = uCenter + z * sin(uAlpha); v = vCenter + z * sin(vAlpha);return vec2(u/aspectRatio, v); }float circularIn(float t) { return 1.0 - sqrt(1.0 - t * t); }vec2 fisheyeTransformation( float u, float v, float uCenter, float vCenter, float lensRadius, float distortionScale ) { float aspectRatio = uResolution.x / uResolution.y;vec2 dir = vec2(u - uCenter, v - vCenter);dir.x /= lensRadius; dir.y /= lensRadius;float dist = length(dir) * 0.15;if (dist < 1.0) { float theta = atan(dir.y, dir.x);float r = dist * 2.0 * PI; float z = sqrt(1.0 - r * r) + 0.25; float rDist = atan(r, z) / PI; float newDist = mix(dist, rDist, 5.);dir.x = newDist * cos(theta); dir.y = newDist * sin(theta); }dir.x *= lensRadius; dir.y *= lensRadius;return mix(vec2(u/aspectRatio, v), vec2(uCenter/aspectRatio, vCenter) + dir, 1.0000); }vec2 discTransformation( float u, float v, float uCenter, float vCenter, float lensRadius, float distortionScale) { float aspectRatio = uResolution.x/uResolution.y; u -= uCenter; v -= vCenter;float s = sqrt(u * u + v * v); if (s > lensRadius) return vec2(u + uCenter, v + vCenter); float r = sqrt(u * u + v * v) / lensRadius; if(r == 0.0) return vec2(uCenter, vCenter);r = pow(r, distortionScale); float theta = atan(r); float rad = theta / r;u = rad * u + uCenter; v = rad * v + vCenter;return vec2(u/aspectRatio, v); }out vec4 fragColor; void main() { vec2 uv = vTextureCoord; vec4 color = texture(uTexture, uv); float aspectRatio = uResolution.x/uResolution.y; uv.x = uv.x * aspectRatio; vec2 sphereCoords = uv; vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000); pos.x *= aspectRatio;float radius = 0.5000 * uResolution.x/max(uResolution.x, uResolution.y);if(1 == 0) { sphereCoords = sphericalTransformation( mix(sphereCoords.x, 1.-sphereCoords.x, 0.0000), mix(sphereCoords.y, 1.-sphereCoords.y, 0.0000), mix(pos.x, 1.-pos.x, 0.0000), mix(pos.y, 1.-pos.y, 0.0000), radius/2., 1. + 1.0000 * 9. ); } else if(1 == 1) { sphereCoords = discTransformation( mix(sphereCoords.x, 1.-sphereCoords.x, 0.0000), mix(sphereCoords.y, 1.-sphereCoords.y, 0.0000), mix(pos.x, 1.-pos.x, 0.0000), mix(pos.y, 1.-pos.y, 0.0000), radius/2., 1. + 1.0000 * 9. ); } else if(1 == 2) { sphereCoords = fisheyeTransformation( mix(sphereCoords.x, 1.-sphereCoords.x, 0.0000), mix(sphereCoords.y, 1.-sphereCoords.y, 0.0000), mix(pos.x, 1.-pos.x, 0.0000), mix(pos.y, 1.-pos.y, 0.0000), radius/2., 1. + 1.0000 * 9. ); }vec2 scaledCoords = (sphereCoords - 0.5) + 0.5; vec4 sphere = texture(uTexture, clamp(scaledCoords, 0.0, 1.0)); float distFromPos = distance(uv, pos); float edgeSmooth = 0.001; float insideSphere = 1.0 - smoothstep(radius/2.0 - edgeSmooth, radius/2.0, distFromPos); float insideSphereAlpha = 1.0 - smoothstep(radius/2.0 + 0.002 - edgeSmooth, radius/2.0 + 0.002, distFromPos); sphere.rgb = chromaticAbberation(scaledCoords, atan(scaledCoords.y, scaledCoords.x), distFromPos * 1.0000, 1.0); color = mix(color, sphere, insideSphere); color.rgb += vec3((0.5000-0.5)*2.) * mix(0., circularIn(smoothstep(0., radius, distFromPos)), insideSphere); if(1 == 1) { color.a = insideSphereAlpha; color.rgb = mix(vec3(0), color.rgb, insideSphereAlpha); } fragColor = color;}`],compiledVertexShaders:[`#version 300 es
|
|
613
|
+
precision mediump float;in vec3 aVertexPosition; in vec2 aTextureCoord;uniform mat4 uMVMatrix; uniform mat4 uPMatrix; uniform mat4 uTextureMatrix;out vec2 vTextureCoord; out vec3 vVertexPosition;void main() { gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); vTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy; }`],data:{depth:!1,uniforms:{},isBackground:!1},id:`effect3`}],options:{name:`zAI Orb final`,fps:60,dpi:1.5,scale:1,includeLogo:!1,isProduction:!1},version:`1.4.29`,id:`l9tOlEGo3rE5cxAzUCHg`});function M_({className:e,dpi:t=2,scale:n=1,fps:r=60,onScene:i,onError:a}){let o=(0,h.useRef)(null),s=(0,h.useId)();return(0,h.useEffect)(()=>{if(!o.current)return;let e=!1,c=null;return(async()=>{try{let a=await A_();if(e||!o.current)return;o.current.setAttribute(`data-us-project-src`,j_.url),c=a.addScene({filePath:j_.url,elementId:s,dpi:t,scale:n,fps:r});let l=await c;if(e){l.destroy();return}i(l)}catch{e||a()}})(),()=>{e=!0,i(null),c?.then(e=>e.destroy()).catch(()=>{})}},[s,t,n,r]),(0,z.jsx)(`div`,{ref:o,id:s,className:e,role:`img`,"aria-hidden":!0})}var N_=80,P_=40,F_=6,I_=1e4,L_=5e3;function R_(e,t){return e.find(e=>e.capabilities.includes(t))??null}function z_(e,t){return Promise.race([e.then(e=>e).catch(()=>null),new Promise(e=>setTimeout(()=>e(null),t))])}function B_(e){if(!Number.isFinite(e))return`—`;let t=Math.abs(e);return t>=0xe8d4a51000?`$${(e/0xe8d4a51000).toFixed(2)}T`:t>=1e9?`$${(e/1e9).toFixed(2)}B`:t>=1e6?`$${(e/1e6).toFixed(2)}M`:t>=1e3?`$${Math.round(e).toLocaleString(`en-US`)}`:`$${e.toFixed(2)}`}function V_(e,t=1){return Number.isFinite(e)?`${e>=0?`+`:``}${e.toFixed(t)}%`:`—`}function H_(e){if(!Number.isFinite(e))return`—`;let t=Math.abs(e),n=t>=1e3?0:t>=1?2:t>=.01?4:6;return`$${e.toLocaleString(`en-US`,{minimumFractionDigits:n,maximumFractionDigits:n})}`}function U_(e){let t=[];if(typeof e.symbol==`string`&&t.push(e.symbol),Array.isArray(e.symbols))for(let n of e.symbols)typeof n==`string`&&t.push(n);return t}function W_(e){return e.filter(e=>e&&e!==`*`&&!e.endsWith(`:*`))}function G_(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t.trim()}return null}function K_(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e}function q_(e,t){return e.frames.map(e=>{let n=t.get(e.frame),r=e.config??{};if(n){let e=n.schema.safeParse(r);e.success&&(r=e.data)}return{type:e.frame,title:e.title,capabilities:n?.capabilities??[],config:r,symbols:U_(r)}})}function J_(e){let t=[];for(let n of e.slice(0,N_)){let e=`- ${n.type}`;if(n.title&&(e+=` "${n.title}"`),n.symbols.length&&(e+=` [${n.symbols.slice(0,P_).join(`, `)}]`),n.symbols.length===0){let t=G_(n.config,[`text`,`content`,`body`,`label`,`timezone`,`feed`]);t&&(e+=`: ${K_(t,80)}`)}t.push(e)}return e.length>N_&&t.push(`- …and ${e.length-N_} more frames`),t}function Y_(e,t){let n=new Set;for(let r of e)if(r.capabilities.some(e=>t.includes(e)))for(let e of r.symbols)n.add(e);return[...n]}async function X_(e,t){let n=new Set;for(let e of t)for(let t of e.capabilities)n.add(t);let r=t=>n.has(t)&&R_(e,t),i=[],a=(e,t,n)=>{let a=r(t);a&&i.push(z_(n(a),L_).then(t=>t?[e,t]:null))},o=W_(Y_(t,[`day-stats`,`quote-stream`,`ohlcv`])).slice(0,P_);o.length&&a(1,`day-stats`,async e=>{let t=await e.getDayStats(o),n=o.map(e=>{let n=t[e];return n?`${e} ${H_(n.markPx)} (${V_(n.changePct)})`:null}).filter(Boolean);return n.length?`Prices: ${n.join(` · `)}`:null});let s=t.find(e=>e.capabilities.includes(`sentiment`)),c=typeof s?.config.sparklineDays==`number`?s.config.sparklineDays:30;a(2,`sentiment`,async e=>{let t=(await e.getFearGreed(c))[0];return t?`Fear & Greed: ${t.value} (${t.classification})`:null}),a(3,`global-market`,async e=>{let t=await e.getGlobalMarket(),n=Object.entries(t.dominance).sort((e,t)=>t[1]-e[1]).slice(0,3).map(([e,t])=>`${e.toUpperCase()} ${t.toFixed(1)}%`).join(`, `);return`Global crypto: total mcap ${B_(t.totalMarketCapUsd)} (${V_(t.marketCapChangePct24h)} 24h); dominance ${n}`});let l=W_(Y_(t,[`funding-history`])).slice(0,P_);l.length&&a(4,`funding-history`,async e=>{let t=await e.getFundingHistory(l,Date.now()-24*3600*1e3),n=l.map(e=>{let n=t[e],r=n&&n[n.length-1];return r?`${e} ${V_(r.fundingRate*100,4)}`:null}).filter(Boolean);return n.length?`Funding (latest): ${n.join(` · `)}`:null});let u=W_(Y_(t,[`open-interest`]));if(a(5,`open-interest`,async e=>{let t=(await e.getOpenInterest(u.length?u:void 0)).slice(0,F_).map(e=>`${e.symbol} ${B_(e.openInterestUsd)}`);return t.length?`Open interest: ${t.join(` · `)}`:null}),a(6,`tvl`,async e=>{let t=(await e.getTvlByChain()).slice(0,F_).map(e=>`${e.name} ${B_(e.tvl)}`);return t.length?`TVL by chain: ${t.join(` · `)}`:null}),a(7,`protocol-tvl`,async e=>{let t=(await e.getProtocolTvl()).slice(0,F_).map(e=>`${e.name} ${B_(e.tvl)}`);return t.length?`Protocol TVL: ${t.join(` · `)}`:null}),a(8,`dex-volume`,async e=>{let t=(await e.getDexVolume()).slice(0,F_).map(e=>`${e.name} ${B_(e.volume24h)}`);return t.length?`DEX volume (24h): ${t.join(` · `)}`:null}),a(9,`protocol-fees`,async e=>{let t=(await e.getProtocolFees()).slice(0,F_).map(e=>`${e.name} ${B_(e.fees24h)}`);return t.length?`Protocol fees (24h): ${t.join(` · `)}`:null}),a(10,`coin-markets`,async e=>{let t=(await e.getCoinMarkets()).slice(0,F_).map(e=>`${e.symbol} ${B_(e.marketCapUsd)}${e.changePct24h==null?``:` (${V_(e.changePct24h)})`}`);return t.length?`Top coins by mcap: ${t.join(` · `)}`:null}),a(11,`coin-movers`,async e=>{let t=[...await e.getCoinMovers(300)].sort((e,t)=>(t.changePct[`24h`]??0)-(e.changePct[`24h`]??0)),n=t.slice(0,3).map(e=>`${e.symbol} ${V_(e.changePct[`24h`]??0)}`),r=t.slice(-3).reverse().map(e=>`${e.symbol} ${V_(e.changePct[`24h`]??0)}`);return t.length?`Movers (24h): up ${n.join(`, `)} · down ${r.join(`, `)}`:null}),r(`news`)){let n=R_(e,`news`),r=new Set;for(let e of t){if(!e.capabilities.includes(`news`))continue;let t=typeof e.config.feed==`string`?e.config.feed:null;if(!t||r.has(t))continue;r.add(t);let i=e.symbols.length?[...e.symbols]:void 0;a(12,`news`,async()=>{let e=(await n.getNews({feed:t,symbols:i,limit:4})).slice(0,4).map(e=>`“${K_(e.title,90)}”`);return e.length?`News (${t}): ${e.join(`; `)}`:null})}}if(a(13,`btc-fees`,async e=>{let t=await e.getBtcFees();return`BTC fees: fastest ${t.fastest}, 1h ${t.hour}, economy ${t.economy} sat/vB`}),a(14,`btc-mempool`,async e=>{let t=await e.getMempoolState();return`Mempool: ${t.count.toLocaleString(`en-US`)} txs, ${t.projected.length} blocks pending`}),a(15,`btc-blocks`,async e=>{let t=(await e.getBtcBlocks(1))[0];return t?`Latest block: #${t.height} (${t.poolName}, ${t.txCount} txs)`:null}),a(16,`btc-difficulty`,async e=>{let t=await e.getDifficultyAdjustment();return`Difficulty: ${V_(t.difficultyChange)} expected in ${t.remainingBlocks} blocks`}),a(17,`mining-pools`,async e=>{let t=(await e.getMiningPools(`1w`)).pools[0];return t?`Mining pools (1w): ${t.name} ${t.sharePct.toFixed(1)}%`:null}),a(18,`lightning-stats`,async e=>{let t=await e.getLightningStats();return`Lightning: ${t.nodeCount.toLocaleString(`en-US`)} nodes, ${t.channelCount.toLocaleString(`en-US`)} channels`}),a(19,`yield-curve`,async e=>{let t=await e.getYieldCurve(),n=e=>t.points.find(t=>t.label===e),r=[`3M`,`2Y`,`10Y`,`30Y`].map(e=>{let t=n(e);return t?`${e} ${t.rate.toFixed(2)}%`:null}).filter(Boolean);return r.length?`Yield curve (${t.date}): ${r.join(`, `)}`:null}),a(20,`reference-rates`,async e=>{let t=(await e.getReferenceRates()).slice(0,3).map(e=>`${e.code} ${e.rate.toFixed(2)}%`);return t.length?`Reference rates: ${t.join(`, `)}`:null}),a(21,`financial-stress`,async e=>{let t=await e.getFinancialStress();return`Financial stress (OFR): ${t.value.toFixed(2)} (${t.date})`}),a(22,`national-debt`,async e=>{let t=await e.getNationalDebt();return`US national debt: ${B_(t.total)} (${t.date})`}),r(`options-summary`)){let n=new Set;for(let e of t)e.capabilities.includes(`options-summary`)&&n.add(typeof e.config.currency==`string`?e.config.currency:`BTC`);let r=R_(e,`options-summary`);for(let e of n)a(23,`options-summary`,async()=>{let t=await r.getOptionsSummary(e);return`Options ${t.currency}: put/call ${t.putCallRatioOi.toFixed(2)} (OI), avg IV ${t.avgIv.toFixed(1)}%`})}if(r(`portfolio`))for(let n of t){if(!n.capabilities.includes(`portfolio`))continue;let t=n.config.source;if(!t||typeof t.kind!=`string`)continue;let r=e.find(e=>e.getPortfolio&&(e.portfolioKinds??[]).includes(t.kind));r&&a(24,`portfolio`,async()=>{let e=await r.getPortfolio(t),n=e.totalUsd??e.holdings.reduce((e,t)=>e+(t.valueUsd??0),0),i=[...e.holdings].sort((e,t)=>(t.valueUsd??0)-(e.valueUsd??0)).slice(0,F_).map(e=>e.symbol).join(`, `);return`Portfolio (${e.label??e.source}): ${B_(n)}${i?`, top: ${i}`:``}`})}return(await Promise.all(i)).filter(e=>e!==null).sort((e,t)=>e[0]-t[0]).map(e=>e[1])}function Z_(e,t){let n=a();return(0,h.useCallback)(async()=>{try{let r=q_(e,t);if(r.length===0)return null;let i=J_(r),a=await X_(n,r),o=[];i.length&&o.push(`Frames on the dashboard:\n${i.join(`
|
|
614
|
+
`)}`),a.length&&o.push(`Live readings right now:\n${a.join(`
|
|
615
|
+
`)}`);let s=o.join(`
|
|
616
|
+
|
|
617
|
+
`);return s?K_(s,I_):null}catch{return null}},[n,e,t])}var Q_;function $_(e){if(!Q_)if(typeof document<`u`)Q_=document.createElement(`textarea`);else return;var t=`&`+e+`;`;Q_.innerHTML=t;var n=Q_.value;return n===t?void 0:n}var G=32,K=9,ev=13,q=10,tv=96,nv=126,rv=91,iv=94,J=62,av=35,ov=37,Y=45,sv=61,cv=92,lv=42,uv=95,dv=60,fv=64,pv=93,mv=33,hv=38,gv=58,_v=70,vv=102,yv=104,bv=119,xv=116,Sv=112,Cv=115,wv=160,Tv=12,Ev=44,Dv=59,Ov=63,kv=46,Av=47,jv=39,Mv=34,Nv=43,Pv=124,Fv=123,Iv=125,Lv=40,Rv=41,zv=120,Bv=88,Vv=30,X=48,Hv=57,Z=65,Q=90,Uv=97,Wv=122,Gv=128,Kv=32,$={blockQuote:0,breakLine:1,breakThematic:2,codeBlock:3,codeInline:4,footnote:5,footnoteReference:6,frontmatter:7,gfmTask:8,heading:9,htmlBlock:10,htmlComment:11,htmlSelfClosing:12,image:13,link:14,orderedList:15,paragraph:16,ref:17,refCollection:18,table:19,text:20,textFormatted:21,unorderedList:22};function qv(e){if(!oy(e,`---`))return null;let t=3;for(;t<e.length&&(e[t]===` `||e[t]===` `);)t++;if(t<e.length&&e[t]===`\r`&&t++,t>=e.length||e[t]!==`
|
|
618
|
+
`)return null;t++;let n=!1;for(;t<e.length;){let r=t;for(;t<e.length&&e[t]!==`
|
|
619
|
+
`&&e[t]!==`\r`;)t++;if(t>=e.length)break;let i=t;if(e[t]===`\r`&&t++,t<e.length&&e[t]===`
|
|
620
|
+
`&&t++,oy(e,`---`,r))return{endPos:t,hasValidYaml:n};if(!n){let t=xy(e,r,i);if(t<i){let r=e.charCodeAt(t);if(r>=Uv&&r<=Wv||r>=Z&&r<=Q||r>=X&&r<=Hv||r===uv){for(t++;t<i&&(r=e.charCodeAt(t),r>=Uv&&r<=Wv||r>=Z&&r<=Q||r>=X&&r<=Hv||r===uv||r===Y||r===kv);)t++;t<i&&e.charCodeAt(t)===gv&&(t++,t>=i?n=!0:(r=e.charCodeAt(t),(r===G||r===K)&&(n=!0)))}}}}return null}var Jv=/&([a-zA-Z0-9]+|#[0-9]{1,7}|#x[0-9a-fA-F]{1,6});/gi,Yv={class:`className`,for:`htmlFor`,allowfullscreen:`allowFullScreen`,allowtransparency:`allowTransparency`,autocomplete:`autoComplete`,autofocus:`autoFocus`,autoplay:`autoPlay`,cellpadding:`cellPadding`,cellspacing:`cellSpacing`,charset:`charSet`,classid:`classId`,colspan:`colSpan`,contenteditable:`contentEditable`,contextmenu:`contextMenu`,crossorigin:`crossOrigin`,enctype:`encType`,formaction:`formAction`,formenctype:`formEncType`,formmethod:`formMethod`,formnovalidate:`formNoValidate`,formtarget:`formTarget`,frameborder:`frameBorder`,hreflang:`hrefLang`,inputmode:`inputMode`,keyparams:`keyParams`,keytype:`keyType`,marginheight:`marginHeight`,marginwidth:`marginWidth`,maxlength:`maxLength`,mediagroup:`mediaGroup`,minlength:`minLength`,novalidate:`noValidate`,radiogroup:`radioGroup`,readonly:`readOnly`,rowspan:`rowSpan`,spellcheck:`spellCheck`,srcdoc:`srcDoc`,srclang:`srcLang`,srcset:`srcSet`,tabindex:`tabIndex`,usemap:`useMap`,viewbox:`viewBox`},Xv={};function Zv(e){if(!e)return Xv;var t={};for(var n in e){var r=Yv[n.toLowerCase()];if(r)t[r]=e[n];else{var i=n.indexOf(`:`);i===-1?t[n]=e[n]:t[n.slice(0,i)+n[i+1].toUpperCase()+n.slice(i+2)]=e[n]}}return t}var Qv=/(\n|^[-*]\s|^#|^ {2,}|^-{2,}|^>\s|^<(div|p|h[1-6]|ul|ol|li|blockquote|pre|table|thead|tbody|tr|td|th|dl|dt|dd|hr|address|article|aside|details|dialog|figure|figcaption|footer|form|header|main|menu|nav|section|summary|textarea|fieldset|legend|center|dir|hgroup|marquee|search|output|template)\b)/i;function $v(e){return e.indexOf(`&`)===-1?e:e.replace(Jv,(e,t)=>{var n=$_(t);if(n)return n;if(t[0]===`#`){var r=t[1]===`x`||t[1]===`X`?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return r===0||r>=55296&&r<=57343||r>1114111?`�`:r<=65535?String.fromCharCode(r):String.fromCharCode(55296+(r-65536>>10),56320+(r-65536&1023))}return e})}var ey=/(javascript|vbscript|data(?!:image)):/i;function ty(e){if(ey.test(e))return null;if(e.indexOf(`%`)===-1)return e;try{let t=decodeURIComponent(e).replace(/[^A-Za-z0-9/:]/g,``);if(ey.test(t))return null}catch{return null}return e}var ny={},ry,iy;for(ry=[192,193,194,195,196,197,224,225,226,227,228,229,230,198],iy=0;iy<ry.length;iy++)ny[ry[iy]]=`a`;for(ny[231]=ny[199]=`c`,ny[240]=ny[208]=`d`,ry=[200,201,202,203,233,232,234,235],iy=0;iy<ry.length;iy++)ny[ry[iy]]=`e`;for(ry=[207,239,206,238,205,237,204,236],iy=0;iy<ry.length;iy++)ny[ry[iy]]=`i`;for(ny[209]=ny[241]=`n`,ry=[248,216,339,338,213,245,212,244,211,243,210,242],iy=0;iy<ry.length;iy++)ny[ry[iy]]=`o`;for(ry=[220,252,219,251,218,250,217,249],iy=0;iy<ry.length;iy++)ny[ry[iy]]=`u`;ny[376]=ny[255]=ny[221]=ny[253]=`y`;function ay(e){for(var t=``,n=-1,r=e.length,i=0;i<r;i++){var a=e.charCodeAt(i);if(a>=Uv&&a<=Wv||a>=X&&a<=Hv){n<0&&(n=i);continue}if(a>=Z&&a<=Q){n>=0&&(t+=e.slice(n,i),n=-1),t+=String.fromCharCode(a+Kv);continue}if(a===G||a===Y){n>=0&&(t+=e.slice(n,i),n=-1),t+=`-`;continue}n>=0&&(t+=e.slice(n,i),n=-1);var o=ny[a];o&&(t+=o)}return n>=0&&(t+=e.slice(n)),t}function oy(e,t,n){return e.startsWith(t,n)}var sy=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`param`,`source`,`track`,`wbr`,`circle`,`ellipse`,`line`,`path`,`polygon`,`polyline`,`rect`,`use`,`stop`,`animate`,`set`]);function cy(e){let t=e.toLowerCase();if(sy.has(t))return!0;let n=t.indexOf(`:`);return n===-1?!1:(t=t.slice(n+1),sy.has(t))}var ly=1,uy=2,dy=4,fy=8,py=16,my=32,hy=64,gy=(function(){var e=new Uint8Array(128),t;for(e[K]=ly,e[q]=ly|uy,e[Tv]=ly,e[ev]=ly|uy,e[G]=ly,t=mv;t<=Av;t++)e[t]=dy;for(t=gv;t<=fv;t++)e[t]=dy;for(t=rv;t<=tv;t++)e[t]=dy;for(t=Fv;t<=nv;t++)e[t]=dy;for(t=X;t<=Hv;t++)e[t]=py;for(t=Z;t<=Q;t++)e[t]=fy;for(t=Uv;t<=Wv;t++)e[t]=fy;return e})(),_y=/[\p{P}\p{S}]/u,vy=/\p{Zs}/u,yy=[];function by(e){var t=e.indexOf(`\r`),n=e.indexOf(`\0`);if(t===-1&&n===-1)return e;var r=e.length;yy.length=0;var i=0,a=0;for(a=t===-1?n:n===-1||t<n?t:n;a<r;a++){var o=e.charCodeAt(a);o===ev?(i<a&&yy.push(e.slice(i,a)),a+1<r&&e.charCodeAt(a+1)===q&&a++,yy.push(`
|
|
621
|
+
`),i=a+1):o===0&&(i<a&&yy.push(e.slice(i,a)),yy.push(`�`),i=a+1)}return i<r&&yy.push(e.slice(i)),yy.join(``)}function xy(e,t,n){let r=n??e.length;for(;t<r&&(e[t]===` `||e[t]===` `);)t++;return t}function Sy(e){if(!e)return!1;for(var t in e)return!0;return!1}function Cy(e){return{attrs:{},children:[{type:$.text,text:e}],d:!0,type:$.htmlBlock,tag:`header`}}var wy=/^\n+/;function Ty(e){for(var t=e.length;t>0&&(e[t-1]===`
|
|
622
|
+
`||e[t-1]===`\r`);)t--;return e.slice(0,t).replace(wy,``)+`
|
|
623
|
+
|
|
624
|
+
`}function Ey(e){if((e.type===$.htmlSelfClosing||e.type===$.htmlBlock)&&e.b)return[];if(e.type===$.paragraph){var t=e.children;return t?t.flatMap(Ey):[]}return e.type===$.text?e.text?.trim()?[e]:[]:e.type===$.htmlBlock&&e.children?[{...e,children:e.children?.flatMap(Ey)}]:[e]}function Dy(e){for(var t=0;t<e.length;t++){if(e[t].type===$.htmlBlock){var n=e[t],r=!1;if(n.d&&n.a&&t===e.length-1){var i=`</`+String(n.tag).toLowerCase()+`>`,a=n.a.toLowerCase().indexOf(i);a!==-1&&n.a.slice(a+i.length).replace(/<\/[a-z][a-z0-9-]*\s*>/gi,``).trim()&&(r=!0)}r||(n.d=!1)}`children`in e[t]&&e[t].children&&Dy(e[t].children)}}function Oy(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(r.type===$.paragraph&&r.children)for(var i=r.children,a=0;a<i.length;a++){var o=i[a];if(o.type===$.htmlSelfClosing&&o.b&&o.tag.toLowerCase()===t){var s=e.slice(0,n);a>0&&s.push({type:$.paragraph,children:i.slice(0,a)});var c=[];if(a+1<i.length){var l=i.slice(a+1).filter(function(e){return!(e.type===$.htmlSelfClosing&&e.b)});l.length>0&&(c=l)}return c=c.concat(e.slice(n+1)),{found:!0,beforeClose:s,afterClose:c}}}if((r.type===$.htmlSelfClosing||r.type===$.htmlBlock)&&r.b&&r.tag.toLowerCase()===t)return{found:!0,beforeClose:e.slice(0,n),afterClose:e.slice(n+1)}}return{found:!1,beforeClose:e,afterClose:[]}}function ky(e,t,n){var r=e.replace(RegExp(`\\s*</`+t+`>\\s*$`,`i`),``);return n?zy(r):r}function Ay(e){var t=``;for(var n in e){var r=e[n];r===!0?t+=` `+n:r!=null&&r!==!1&&(t+=` `+n+`="`+String(r)+`"`)}return t}function jy(e){var t=[];if(!e)return t;for(var n in e)n.charCodeAt(0)===94&&t.push({identifier:n,footnote:e[n].target});return t}function My(e,t,n){if(t.indexOf(`.`)===-1)return e?.[t]||n;for(var r=e,i=t.split(`.`),a=0;a<i.length&&(r=r?.[i[a]],r!==void 0);)a++;return r||n}function Ny(e){for(var t=!1,n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<=G||r===Mv||r===ov||r===dv||r===J||r===rv||r===cv||r===pv||r===iv||r===tv||r>=123){t=!0;break}}if(!t)return e;for(var i=``,n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r===ov&&n+2<e.length){var a=e.charCodeAt(n+1),o=e.charCodeAt(n+2);if((a>=X&&a<=Hv||a>=Z&&a<=_v||a>=Uv&&a<=vv)&&(o>=X&&o<=Hv||o>=Z&&o<=_v||o>=Uv&&o<=vv)){i+=e[n]+e[n+1]+e[n+2],n+=2;continue}}i+=encodeURI(e[n])}return i}function Py(...e){return e.filter(Boolean).join(` `)}var Fy=new Set([`title`,`textarea`,`style`,`xmp`,`iframe`,`noembed`,`noframes`,`script`,`plaintext`]),Iy=/<(\/?)(title|textarea|style|xmp|iframe|noembed|noframes|script|plaintext)(\s|>|\/)/gi;function Ly(e){return Fy.has(e.toLowerCase())}function Ry(e){return Iy.lastIndex=0,Iy.test(e)}function zy(e){return Iy.lastIndex=0,e.replace(Iy,function(e,t,n,r){return`<`+t+n+r})}var By=/^<([a-zA-Z][a-zA-Z0-9-]*)\s[^>]*>/,Vy=/^<[A-Z]/,Hy=[`script`,`pre`,`style`,`textarea`],Uy=new Set(Hy),Wy=/<(?:pre|script|style|textarea)\b/i,Gy=/<(?:pre|script|style|textarea)\b/iy,Ky=/^(\s{0,3}#[#\s]|\s{0,3}[-*+]\s|\s{0,3}\d+\.\s|\s{0,3}>\s|\s{0,3}```)/m,qy=/^<([a-z][^ >/\n\r]*) ?([^>]*?)>/im,Jy=new Uint8Array(128);(function(){for(var e=[tv,lv,uv,nv,sv,rv,mv,dv,cv,hv,q,yv,bv,vv],t=0;t<e.length;t++)Jy[e[t]]=1})();var Yy=/([a-zA-Z_][a-zA-Z0-9_-]*)=(?:"([^"]*)"|'([^']*)')/g;function Xy(e){return Uy.has(e)}function Zy(e){return Wy.test(e)}function Qy(e,t,n){for(var r=t,i=n;r<i&&(e.charCodeAt(r)===G||e.charCodeAt(r)===K);)r++;if(r>=i)return!1;e.charCodeAt(r)===Pv&&r++;for(var a=0;r<i;){for(;r<i&&(e.charCodeAt(r)===G||e.charCodeAt(r)===K);)r++;if(r>=i)break;if(e.charCodeAt(r)===Pv&&a>0){for(var o=r+1;o<i&&(e.charCodeAt(o)===G||e.charCodeAt(o)===K);)o++;if(o>=i)return!0}if(e.charCodeAt(r)===gv&&r++,r>=i||e.charCodeAt(r)!==Y)return!1;for(;r<i&&e.charCodeAt(r)===Y;)r++;for(r<i&&e.charCodeAt(r)===gv&&r++,a++;r<i&&(e.charCodeAt(r)===G||e.charCodeAt(r)===K);)r++;if(r<i)if(e.charCodeAt(r)===Pv)r++;else return!1}return a>0}function $y(e,t){if(e.charCodeAt(t)!==dv)return null;let n=t+1,r=e.length,i=!1;e.charCodeAt(n)===Av&&(n++,i=!0);let a=n,o=e.charCodeAt(n);if(!(o>=Uv&&o<=Wv||o>=Z&&o<=Q))return null;for(;n<r&&(e.charCodeAt(n)>=Uv&&e.charCodeAt(n)<=Wv||e.charCodeAt(n)>=Z&&e.charCodeAt(n)<=Q||e.charCodeAt(n)>=X&&e.charCodeAt(n)<=Hv||e.charCodeAt(n)===Y);)n++;let s=e.slice(a,n);if(!s)return null;let c=n;for(;n<r&&(e.charCodeAt(n)===G||e.charCodeAt(n)===K||e.charCodeAt(n)===q);)n++;let l=e.slice(c,n);if(n===c&&n<r){var u=e.charCodeAt(n);if(u!==J&&u!==Av)return null}let d=n,f={},p=!1;for(;n<r;){let t=e.charCodeAt(n);if(t===J){let t=e.slice(d,n);return{tag:s,attrs:f,selfClosing:!1,end:n+1,rawAttrs:t,whitespaceBeforeAttrs:l,isClosing:i,hasSpaceBeforeSlash:p}}if(t===G||t===K||t===q){n++;continue}if(t===Av&&n+1<r&&e.charCodeAt(n+1)===J){let t=e.slice(d,n);return p=n>d&&e.charCodeAt(n-1)===G,{tag:s,attrs:f,selfClosing:!0,end:n+2,rawAttrs:t,whitespaceBeforeAttrs:l,isClosing:i,hasSpaceBeforeSlash:p}}var m=n,h=e.charCodeAt(n);if(!(h>=Uv&&h<=Wv||h>=Z&&h<=Q||h===uv||h===gv))return null;for(n++;n<r;){var g=e.charCodeAt(n);if(g>=Uv&&g<=Wv||g>=Z&&g<=Q||g>=X&&g<=Hv||g===uv||g===kv||g===gv||g===Y)n++;else break}for(var _=e.slice(m,n);n<r&&(e.charCodeAt(n)===G||e.charCodeAt(n)===K);)n++;if(e.charCodeAt(n)!==sv){f[_]=``;continue}for(n++;n<r&&(e.charCodeAt(n)===G||e.charCodeAt(n)===K);)n++;var v=e.charCodeAt(n);if(v===Mv||v===jv){n++;for(var y=n;n<r&&e.charCodeAt(n)!==v;)n++;if(n>=r)return null;if(f[_]=e.slice(y,n),n++,n<r){var b=e.charCodeAt(n);if(b!==G&&b!==K&&b!==q&&b!==J&&b!==Av)return null}}else if(v===Fv){var x=1,y=n;for(n++;n<r&&x>0;){var g=e.charCodeAt(n);g===Fv?x++:g===Iv&&x--,n++}f[_]=e.slice(y,n)}else{for(var y=n;n<r;){var S=e.charCodeAt(n);if(S===G||S===K||S===J||S===q||S===Mv||S===jv||S===sv||S===dv||S===tv)break;n++}if(n===y)return null;f[_]=e.slice(y,n)}}return null}function eb(e,t,n){if(!n.optimizeForStreaming&&e.indexOf(`[`)===-1)return!1;for(var r=0,i=e.length,a=!1,o=!1;r<i;){for(var s=e.indexOf(`
|
|
625
|
+
`,r),c=s<0?i:s,l=r,u=0;l<c&&u<4;)if(e.charCodeAt(l)===G)u++,l++;else if(e.charCodeAt(l)===K)u+=4,l++;else break;if(l>=c){a=!1,r=s<0?i:s+1;continue}if(u<4){var d=e.charCodeAt(l);if(d===tv||d===nv){for(var f=d,p=0,m=l;m<c&&e.charCodeAt(m)===f;)p++,m++;if(p>=3){var h=!0;if(f===tv){for(var g=m;g<c;g++)if(e.charCodeAt(g)===tv){h=!1;break}}if(h){a=!1;for(var _=s<0?i:s+1;_<i;){for(var v=_,y=0;v<i&&y<4;){var b=e.charCodeAt(v);if(b===G)y++,v++;else if(b===K)y+=4,v++;else break}if(y<4&&v<i&&e.charCodeAt(v)===f){for(var x=0;v<i&&e.charCodeAt(v)===f;)x++,v++;if(x>=p){for(;v<i&&(e.charCodeAt(v)===G||e.charCodeAt(v)===K);)v++;if(v>=i||e.charCodeAt(v)===q){r=v>=i?i:v+1;break}}}for(;_<i&&e.charCodeAt(_)!==q;)_++;_<i&&_++}_>=i&&(r=i,o=!0);continue}}}}for(var S=l;S<c&&e.charCodeAt(S)===J;){S++,S<c&&e.charCodeAt(S)===G&&S++;for(var C=0;S<c&&C<4;)if(e.charCodeAt(S)===G)C++,S++;else if(e.charCodeAt(S)===K)C+=4,S++;else break;if(C>=4)break;a=!1}if(!a&&u<4&&S<c&&e.charCodeAt(S)===rv&&!(S+1<i&&e.charCodeAt(S+1)===iv)){var w=tb(e,S,t);if(w){r=w,a=!1;continue}}var T=e.charCodeAt(l);if(T===av&&u<4)a=!1;else if(u<4&&(T===Y||T===lv||T===uv)){for(var E=l,ee=0;E<c;){var D=e.charCodeAt(E);if(D===T)ee++;else if(D!==G&&D!==K)break;E++}a=!(ee>=3&&E>=c)}else a=!0;r=s<0?i:s+1}return o}function tb(e,t,n){let r=e.length;if(e.charCodeAt(t)!==rv)return null;let i=t+1<r&&e.charCodeAt(t+1)===iv,a=t+1;for(;a<r;){var o=e.charCodeAt(a);if(o===pv){a++;break}if(o===rv)return null;o===cv&&a+1<r&&a++,a++}if(a>r||e.charCodeAt(a-1)!==pv)return null;let s=e.slice(t+1,a-1);if(s.length>999)return null;let c=ab(s);if(!c||a>=r||e.charCodeAt(a)!==gv)return null;a++;let l=!1;for(;a<r;){let t=e.charCodeAt(a);if(t===G||t===K)a++;else if(t===q&&!l)l=!0,a++;else break}if(i){let t=e.indexOf(`
|
|
626
|
+
`,a),i=t<0?r:t;return n[c]={target:e.slice(a,i).trim(),title:void 0},t<0?r:t+1}var u;if(a<r&&e.charCodeAt(a)===dv){a++;for(var d=a;a<r&&e.charCodeAt(a)!==J&&e.charCodeAt(a)!==q;)e.charCodeAt(a)===cv&&a+1<r&&a++,a++;if(a>=r||e.charCodeAt(a)!==J)return null;u=e.slice(d,a),a++;for(var f=e.indexOf(`
|
|
627
|
+
`,a),p=f<0?r:f,m=a;m<p&&(e.charCodeAt(m)===G||e.charCodeAt(m)===K);)m++;if(m<p){if(m===a)return null;var h=e.charCodeAt(m);if(h!==Mv&&h!==jv&&h!==Lv)return null}}else{for(var d=a,g=0;a<r;){var o=e.charCodeAt(a);if(o===Lv)g++;else if(o===Rv){if(g===0)break;g--}else{if(o===G||o===K||o===q)break;o===cv&&a+1<r&&a++}a++}if(u=e.slice(d,a),!u)return null}for(;a<r&&(e.charCodeAt(a)===G||e.charCodeAt(a)===K);)a++;var _=e.indexOf(`
|
|
628
|
+
`,a),v=_<0?r:_,y,b=!1,x=a,S=a;if(a===v&&a<r)for(S=a+1;S<r&&(e.charCodeAt(S)===G||e.charCodeAt(S)===K);)S++;if(S<r){var C=e.charCodeAt(S);if(C===Mv||C===jv||C===Lv){for(var w=C===Lv?41:C,T=S+1,E=T;T<r;){var ee=e.charCodeAt(T);if(ee===w){for(var D=T+1;D<r&&(e.charCodeAt(D)===G||e.charCodeAt(D)===K);)D++;(D>=r||e.charCodeAt(D)===q)&&(y=e.slice(E,T),b=!0,x=D<r?D+1:r);break}if(ee===cv&&T+1<r){T+=2;continue}if(ee===q&&T+1<r&&e.charCodeAt(T+1)===q)break;T++}if(!b&&S===a)return null}}if(b)return n[c]||(n[c]={target:sb(u),title:y===void 0?y:$v(sb(y))}),x;for(;a<v&&(e.charCodeAt(a)===G||e.charCodeAt(a)===K);)a++;return a<v?null:(n[c]||(n[c]={target:sb(u),title:y}),_<0?r:_+1)}var nb=new Uint8Array(gy);for(nb[av]|=my,nb[J]|=my,nb[Y]|=my|hy,nb[Nv]|=my,nb[lv]|=my|hy,nb[uv]|=my|hy,nb[tv]|=my|hy,nb[nv]|=my|hy,nb[dv]|=my|hy,nb[rv]|=hy,nb[mv]|=hy,nb[Pv]|=my,rb=X;rb<=Hv;rb++)nb[rb]|=my;var rb;function ib(e){if(e.indexOf(`[`)<0&&e.indexOf(`]`)<0)return!1;for(var t=0;t<e.length;t++){if(e.charCodeAt(t)===cv){t++;continue}if(e.charCodeAt(t)===rv||e.charCodeAt(t)===pv)return!0}return!1}function ab(e){for(var t=e.length,n=!0,r=t>0,i=0;i<t;i++){var a=e.charCodeAt(i);if(a===G){if(n){r=!1;break}n=!0}else if(a<33||a>126||a>=Z&&a<=Q){r=!1;break}else n=!1}if(r&&!n)return e;var o=e.replace(/\s+/g,` `).trim();return o.indexOf(`ẞ`)===-1?o.toLowerCase():o.replace(/\u1E9E/g,`ss`).toLowerCase()}function ob(e){return e<Gv?nb[e]:e===wv?ly:0}function sb(e){return e.indexOf(`\\`)===-1?e:e.replace(/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g,`$1`)}var cb=null,lb=-1,ub=-1;function db(e,t){if(t>=lb&&t<=ub&&e===cb)return ub;var n=e.indexOf(`
|
|
629
|
+
`,t),r=n<0?e.length:n;return cb=e,lb=t,ub=r,r}function fb(e,t){let n=db(e,t);return n<e.length?n+1:n}function pb(e,t,n){for(;t<n;){let n=e.charCodeAt(t);if(n!==G&&n!==K)break;t++}return t}function mb(e,t){let n=fb(e,t);for(;n<e.length;){let t=db(e,n);if(yb(e,n,t))return n;n=fb(e,n)}return e.length}function hb(e,t,n,r){let i=0;for(;t+i<n&&e.charCodeAt(t+i)===r;)i++;return i}var gb=0,_b=0;function vb(e,t,n){for(gb=0,_b=0;t+_b<n;){let n=e.charCodeAt(t+_b);if(n===K)gb+=4-gb%4;else if(n===G)gb++;else break;_b++}}function yb(e,t,n){return pb(e,t,n)>=n}function bb(e,t,n,r){let i=db(e,t);if(vb(e,t,i),gb>3)return null;let a=t+_b;if(e.charCodeAt(a)!==av)return null;let o=hb(e,a,i,35);if(o<1||o>6||(a+=o,a<i&&e.charCodeAt(a)!==G&&e.charCodeAt(a)!==K))return null;a=pb(e,a,i);for(var s=i;s>a&&e.charCodeAt(s-1)===G;)s--;for(var c=s;s>a&&e.charCodeAt(s-1)===av;)s--;if(s<c)if(s===a||e.charCodeAt(s-1)===G)for(;s>a&&e.charCodeAt(s-1)===G;)s--;else s=c;let l=e.slice(a,s),u=Wb(l,!1,n,r),d=(r?.slugify||ay)(l);return{node:{type:$.heading,level:o,children:u,id:d},end:fb(e,i)}}function xb(e,t,n){var r=e.charCodeAt(t);if(r!==sv&&r!==Y)return!1;for(var i=t;i<n&&e.charCodeAt(i)===r;)i++;for(;i<n&&(e.charCodeAt(i)===G||e.charCodeAt(i)===K);)i++;return i>=n}function Sb(e,t){let n=db(e,t);if(vb(e,t,n),gb>3)return null;let r=t+_b,i=e.charCodeAt(r);if(i!==Y&&i!==lv&&i!==uv)return null;let a=0;for(;r<n;){let t=e.charCodeAt(r);if(t===i)a++;else if(t!==G&&t!==K)return null;r++}return a<3?null:{node:{type:$.breakThematic},end:fb(e,n)}}function Cb(e,t,n){let r=db(e,t);if(vb(e,t,r),gb>3)return null;let i=gb,a=t+_b,o=e.charCodeAt(a);if(o!==tv&&o!==nv)return null;let s=hb(e,a,r,o);if(s<3)return null;a+=s;let c=pb(e,a,r),l=r;if(o===tv){for(let t=c;t<r;t++)if(e.charCodeAt(t)===tv)return null}for(;l>c&&(e.charCodeAt(l-1)===G||e.charCodeAt(l-1)===K);)l--;let u=e.slice(c,l),d=``,f=``,p=u.indexOf(` `);p===-1?d=u:(d=u.slice(0,p),f=u.slice(p+1).trim()),d=sb(d);var m=void 0;if(f){Yy.lastIndex=0;for(var h;(h=Yy.exec(f))!==null;)m||={},m[h[1]]=h[2]===void 0?h[3]:h[2]}let g=fb(e,r),_=e.length,v=e.length;for(var y=String.fromCharCode(o).repeat(s),b=g;b<e.length;){var x=e.indexOf(y,b);if(x===-1)break;for(var S=x,C=0;S>0&&C<4&&e.charCodeAt(S-1)===G;)S--,C++;if(C<=3&&(S===0||e.charCodeAt(S-1)===q)){for(var w=x+s;w<e.length&&e.charCodeAt(w)===o;)w++;var T=db(e,w);if(yb(e,w,T)){_=S,v=fb(e,T);break}}b=x+1}var E;if(i===0)E=_>g&&e.charCodeAt(_-1)===q?e.slice(g,_-1):e.slice(g,_);else{E=``;for(var ee=g;ee<_;){var D=db(e,ee);vb(e,ee,D);var te=Math.min(_b,i);E+=e.slice(ee+te,D)+`
|
|
630
|
+
`,ee=fb(e,D)}E.length>0&&E.charCodeAt(E.length-1)===q&&(E=E.slice(0,-1))}return{node:{type:$.codeBlock,lang:d||void 0,text:E,infoString:f||void 0,attrs:m},end:v}}function wb(e,t){if(vb(e,t,db(e,t)),gb<4)return null;let n=``,r=t;for(;r<e.length;){let t=db(e,r);if(vb(e,r,t),yb(e,r,t)){for(var i=0,a=fb(e,t);a<e.length;){var o=db(e,a);if(yb(e,a,o)){i++,a=fb(e,o);continue}if(vb(e,a,o),gb>=4){for(var s=0;s<=i;s++)n+=`
|
|
631
|
+
`;r=a;break}break}if(r!==a)break;continue}if(gb<4)break;let f=0,p=0;var c=0;for(let n=r;n<t&&p<4;n++){if(e.charCodeAt(n)===K){var l=4-p%4;p+l>4&&(c=p+l-4),p+=l}else p++;f++}var u=``;if(c>0)for(var d=0;d<c;d++)u+=` `;u+=e.slice(r+f,t),n+=u+`
|
|
632
|
+
`,r=fb(e,t)}for(;n.length>0&&n.charCodeAt(n.length-1)===q;)n=n.slice(0,-1);return n?{node:{type:$.codeBlock,lang:void 0,text:n,infoString:void 0,attrs:void 0},end:r}:null}function Tb(e,t,n,r){if(vb(e,t,db(e,t)),gb>3)return null;let i=t+_b;if(e.charCodeAt(i)!==J)return null;let a=``,o=t,s,c=!1,l=!1,u=!1;for(;o<e.length;){let t=db(e,o);vb(e,o,t);let n=o+_b;if(e.charCodeAt(n)===J){let r=n+1;var d=gb+1,f=!1;if(r<t){var p=e.charCodeAt(r);p===G?(r++,d++,f=!0):p===K&&(f=!0)}for(var m=``,h=!1,g=r;g<t;g++)if(e.charCodeAt(g)===K){h=!0;break}if(h){var _=d;if(f&&r<t&&e.charCodeAt(r)===K){for(var v=4-_%4,y=0;y<v-1;y++)m+=` `;_+=v,r++}for(var b=r;b<t;b++)if(e.charCodeAt(b)===K){for(var x=4-_%4,S=0;S<x;S++)m+=` `;_+=x}else m+=e[b],_++}else m=e.slice(r,t);if(!a&&!s){let n=m.match(/^\[!([A-Za-z]+)\]\s*$/);if(n){s=n[1].toUpperCase(),o=fb(e,t);continue}}a+=m+`
|
|
633
|
+
`;var C=m.trimStart();C.startsWith("```")||C.startsWith(`~~~`)?u=!u:(m.startsWith(` `)||m.startsWith(` `))&&(u=!0),l=C.length>0,o=fb(e,t)}else if(a&&!yb(e,o,t)&&l){if(gb<4){var w=o+_b,T=w<t?e.charCodeAt(w):0;if(T===av||T===J||T===tv||T===nv||T===dv||(T===Y||T===lv||T===uv)&&Sb(e,o)||(T===Y||T===lv||T===Nv)&&w+1<t&&(e.charCodeAt(w+1)===G||e.charCodeAt(w+1)===K))break;if(T>=X&&T<=Hv){for(var E=w;E<t&&e.charCodeAt(E)>=X&&e.charCodeAt(E)<=Hv;)E++;if(E<t&&(e.charCodeAt(E)===kv||e.charCodeAt(E)===Rv))break}}if(u)break;a+=e.slice(o,t)+`
|
|
634
|
+
`,c=!0,o=fb(e,t)}else break}if(!a&&!s)return null;var{inBlockQuote:ee,f:D}=n;n.inBlockQuote=!0,c&&(n.f=!0);let te=mx(a||``,n,r);return n.inBlockQuote=ee,n.f=D,{node:{type:$.blockQuote,children:te,alert:s||void 0},end:o}}function Eb(e,t,n){for(var r=0,i=t;i<n;i++)e.charCodeAt(i)===K?r+=4-r%4:r++;return r}function Db(e,t,n){if(vb(e,t,n),gb>3)return null;var r=t+_b;if(r>=n)return null;var i=e.charCodeAt(r),a=gb,o=r;if(i===Y||i===lv||i===Nv){if(o=r+1,o<n&&e.charCodeAt(o)!==G&&e.charCodeAt(o)!==K&&e.charCodeAt(o)!==q)return null}else if(i>=X&&i<=Hv){for(var s=r;s<n&&s-r<9;){var c=e.charCodeAt(s);if(c<X||c>Hv)break;s++}if(s>r&&s<n){var l=e.charCodeAt(s);if(l===kv||l===Rv){if(o=s+1,o<n&&e.charCodeAt(o)!==G&&e.charCodeAt(o)!==K&&e.charCodeAt(o)!==q)return null}else return null}else return null}else return null;var u=o,d=Eb(e,t,o),f=0,p=u,m=d;if(u>=n)return{ordered:i>=X&&i<=Hv,marker:i>=X&&i<=Hv?e[s]:e[r],start:i>=X&&i<=Hv?parseInt(e.slice(r,s),10):void 0,contentStart:u,contentCol:d+1,markerCol:a,isEmpty:!0};for(;p<n&&(e.charCodeAt(p)===G||e.charCodeAt(p)===K);){if(e.charCodeAt(p)===K){var h=4-m%4;m+=h}else m++;p++,f++}var g=p>=n,_=m-d;return g||_>4?(m=d+1,p=u+1,f=1):f===0&&(m=d+1,p=u,f=1),{ordered:i>=X&&i<=Hv,marker:i>=X&&i<=Hv?e[s]:e[r],start:i>=X&&i<=Hv?parseInt(e.slice(r,s),10):void 0,contentStart:p,contentCol:m,markerCol:a,isEmpty:g}}var Ob=0;function kb(e,t,n,r){var i=0,a=t;for(Ob=0;a<n&&i<r;){var o=e.charCodeAt(a);if(o===K){var s=4-i%4;if(i+s>r){Ob=i+s-r,a++,i=r;break}i+=s}else if(o===G)i++;else break;a++}return a}function Ab(e,t,n,r){var i=db(e,t),a=Db(e,t,i);if(!a)return null;var o=[],s=t,c=a.contentCol,l=``,u=a.isEmpty,d=!1,f=!1;if(!a.isEmpty){for(var p=!1,m=a.contentStart;m<i;m++)if(e.charCodeAt(m)===K){p=!0;break}if(p){var h=``,g=Eb(e,t,a.contentStart),_=g-a.contentCol;if(_>0)for(var v=0;v<_;v++)h+=` `;for(var y=a.contentStart;y<i;y++)if(e.charCodeAt(y)===K){for(var b=4-g%4,x=0;x<b;x++)h+=` `;g+=b}else h+=e[y],g++;l=h+`
|
|
635
|
+
`}else l=e.slice(a.contentStart,i)+`
|
|
636
|
+
`}for(s=fb(e,i);s<e.length;){var S=db(e,s);vb(e,s,S);var C=e.charCodeAt(s+_b);if(gb<c&&(C===Y||C===lv||C===uv)&&gb<=3&&Sb(e,s))break;var w=Db(e,s,S);if(w&&w.ordered===a.ordered&&w.marker===a.marker&&w.markerCol<c){o.push({contentCol:c,raw:l,hasBlankAfter:d,isEmpty:u}),d&&(f=!0),c=w.contentCol,u=w.isEmpty,d=!1,l=w.isEmpty?``:e.slice(w.contentStart,S)+`
|
|
637
|
+
`,s=fb(e,S);continue}if(yb(e,s,S)){l+=`
|
|
638
|
+
`,s=fb(e,S);for(var T=!1,E=0;E<l.length;E++){var ee=l.charCodeAt(E);if(ee!==q&&ee!==ev&&ee!==G&&ee!==K){T=!0;break}}if(u&&!T)if(s<e.length){var D=db(e,s),te=Db(e,s,D);if(!te||te.ordered!==a.ordered||te.marker!==a.marker)break;d=!0}else break;if(s<e.length){var ne=db(e,s);vb(e,s,ne);var re=e.charCodeAt(s+_b);if((re===Y||re===lv||re===uv)&&gb<=3&&Sb(e,s))break;var O=Db(e,s,ne);if(O&&O.ordered===a.ordered&&O.marker===a.marker&&O.markerCol<c){d=!0;continue}if(!yb(e,s,ne)&&gb<c)break}continue}if(gb>=c){var ie=kb(e,s,S,c);if(Ob>0){for(var k=``,ae=c,oe=0;oe<Ob;oe++)k+=` `,ae++;for(var A=ie;A<S;A++)if(e.charCodeAt(A)===K){for(var se=4-ae%4,ce=0;ce<se;ce++)k+=` `;ae+=se}else k+=e[A],ae++;l+=k+`
|
|
639
|
+
`}else l+=e.slice(ie,S)+`
|
|
640
|
+
`;s=fb(e,S);continue}for(var le=!1,ue=0;ue<l.length;ue++){var j=l.charCodeAt(ue);if(j!==q&&j!==ev&&j!==G&&j!==K){le=!0;break}}if(!d&&le&&!u){var de=s+_b,M=e.charCodeAt(de);if(!(M===av||M===J||M===dv||M===tv||M===nv||(M===Y||M===lv||M===uv||M===Nv)&&(Sb(e,s)!==null||Db(e,s,S)!==null)||M>=X&&M<=Hv&&Db(e,s,S)!==null)){l+=``+e.slice(de,S)+`
|
|
641
|
+
`,s=fb(e,S);continue}}break}if(o.push({contentCol:c,raw:l,hasBlankAfter:d,isEmpty:u}),o.length===0)return null;var fe=f;if(!fe)for(var pe=0;pe<o.length;pe++){if(o[pe].hasBlankAfter&&pe<o.length-1){fe=!0;break}if(!o[pe].isEmpty){for(var N=o[pe].raw,me=N.length,he=0,P=!1,ge=!1,_e=!1,ve=!1,ye=0,be=0,xe=-1;he<me;){var Se=N.indexOf(`
|
|
642
|
+
`,he);if(Se<0&&(Se=me),ve){vb(N,he,Se);for(var Ce=N.slice(he+_b,Se),we=0;we<Ce.length&&Ce.charCodeAt(we)===ye;)we++;we>=be&&Ce.slice(we).trim()===``&&(ve=!1),he=Se<me?Se+1:me;continue}if(yb(N,he,Se)){xe>=0?_e=!0:P&&(ge=!0),he=Se<me?Se+1:me;continue}if(vb(N,he,Se),xe>=0){if(gb>=xe){he=Se<me?Se+1:me;continue}var Te=Db(N,he,Se);if(Te&&Te.markerCol<xe&&Te.contentCol<=xe){he=Se<me?Se+1:me;continue}if(Te){he=Se<me?Se+1:me;continue}xe=-1,_e&&=(ge=!0,!1)}var Ee=N.slice(he+_b,Se),De=Ee.charCodeAt(0);if((De===tv||De===nv)&&gb<=3){for(var Oe=0;Oe<Ee.length&&Ee.charCodeAt(Oe)===De;)Oe++;if(Oe>=3){if(ge&&P){fe=!0;break}ve=!0,ye=De,be=Oe,P=!0,he=Se<me?Se+1:me;continue}}var ke=gb<=3?Db(N,he,Se):null;if(ke&&P){if(ge){fe=!0;break}xe=ke.contentCol,_e=!1,he=Se<me?Se+1:me,P=!0;continue}if(ge){fe=!0;break}P=!0,he=Se<me?Se+1:me}if(fe)break}}for(var Ae=[],je=0;je<o.length;je++){for(var Me=o[je],Ne=Me.raw,Pe=Ne.length;Pe>0&&Ne.charCodeAt(Pe-1)===q;)Pe--;var Fe=Pe<Ne.length?Ne.slice(0,Pe):Ne,Ie=null;if(Fe.length>=3&&Fe.charCodeAt(0)===rv){var Le=Fe[1];(Le===` `||Le===`x`||Le===`X`)&&Fe.charCodeAt(2)===pv&&(Ie={type:$.gfmTask,completed:Le===`x`||Le===`X`},Fe=Fe.slice(3))}var Re;if(Me.isEmpty&&Fe.trim()===``)Re=[];else if(fe){var ze=n.inList;n.inList=!0,Re=mx(Fe,n,r),n.inList=ze}else{var Be=n.inList;if(n.inList=!0,Re=mx(Fe,n,r),n.inList=Be,Re.length===1&&Re[0].type===$.paragraph)Re=Re[0].children;else if(n.h){var Ve=[];n.h.push({src:Re,dest:Ve,unwrap:!0}),Re=Ve}else{for(var He=[],Ue=0;Ue<Re.length;Ue++)if(Re[Ue].type===$.paragraph)for(var We=Re[Ue].children,Ge=0;Ge<We.length;Ge++)He.push(We[Ge]);else He.push(Re[Ue]);Re=He}}if(Ie){var Ke=[Ie,{type:$.text,text:` `}];if(n.h)n.h.push({src:Re,dest:Ke,unwrap:!1});else for(var qe=0;qe<Re.length;qe++)Ke.push(Re[qe]);Ae.push(Ke)}else Ae.push(Re)}return{node:{type:a.ordered?$.orderedList:$.unorderedList,start:a.ordered?a.start:void 0,items:Ae},end:s}}var jb=new Set(`address.article.aside.base.basefont.blockquote.body.caption.center.col.colgroup.dd.details.dialog.dir.div.dl.dt.fieldset.figcaption.figure.footer.form.frame.frameset.h1.h2.h3.h4.h5.h6.head.header.hr.html.iframe.legend.li.link.main.menu.menuitem.nav.noframes.ol.optgroup.option.p.param.search.section.summary.table.tbody.td.tfoot.th.thead.title.tr.track.ul`.split(`.`));function Mb(e,t,n){let r={};for(let[o,s]of Object.entries(e)){let e=o.toLowerCase();if(e===`style`&&typeof s==`string`){let e={},t=[],n=0,i=0;for(let e=0;e<s.length;e++){let r=s.charCodeAt(e);r===Lv?n++:r===Rv?n--:r===Dv&&n===0&&(t.push(s.slice(i,e)),i=e+1)}i<s.length&&t.push(s.slice(i));let a=!1;t.forEach(t=>{let n=t.indexOf(`:`);if(n===-1)return;let r=t.slice(0,n).trim(),i=t.slice(n+1).trim();if(r&&i){if(/url\s*\(\s*(javascript|vbscript|data:(?!image\/))/i.test(i)){a=!0;return}let t=r.indexOf(`-`)===-1?r:r.replace(/-([a-z])/g,(e,t)=>t.toUpperCase());e[t]=i}}),!a&&Object.keys(e).length>0&&(r[o]=e)}else if((e===`href`||e===`src`)&&n?.sanitizer){let i=n.sanitizer(s,t,e);i!==null&&(r[o]=i)}else if(s===``)r[o]=!0;else if(s.length>=2&&s.charCodeAt(0)===Fv&&s.charCodeAt(s.length-1)===Iv){var i=s.slice(1,-1);if(i.length>0){var a=i.charCodeAt(0);if(a===rv||a===Fv)try{r[o]=JSON.parse(i);continue}catch{}}if(i===`true`){r[o]=!0;continue}if(i===`false`){r[o]=!1;continue}if(n?.evalUnserializableExpressions)try{r[o]=(0,eval)(`(`+i+`)`);continue}catch{}r[o]=i}else r[o]=s}return r}function Nb(e,t,n){let r=t.length;if(r===0)return n;var i=t.charCodeAt(0);if(!(i>=Z&&i<=Q||i>=Uv&&i<=Wv)){for(var a=String.fromCharCode(i),o=e.length-r,s=n;s<=o;){var c=e.indexOf(a,s);if(c===-1||c>o)return-1;for(var l=!0,u=1;u<r;u++){var d=e.charCodeAt(c+u),f=t.charCodeAt(u);if(d>=Z&&d<=Q&&(d+=Kv),f>=Z&&f<=Q&&(f+=Kv),d!==f){l=!1;break}}if(l)return c;s=c+1}return-1}i>=Z&&i<=Q&&(i+=Kv);for(let a=n;a<=e.length-r;a++){var p=e.charCodeAt(a);if(p>=Z&&p<=Q&&(p+=Kv),p!==i)continue;let n=!0;for(let i=1;i<r;i++){let r=e.charCodeAt(a+i),o=t.charCodeAt(i);if(r>=Z&&r<=Q&&(r+=Kv),o>=Z&&o<=Q&&(o+=Kv),r!==o){n=!1;break}}if(n)return a}return-1}function Pb(e,t,n){let r=t.length;var i=t.charCodeAt(0);i>=Z&&i<=Q&&(i+=Kv);for(let o=Math.min(n,e.length-r);o>=0;o--){var a=e.charCodeAt(o);if(a>=Z&&a<=Q&&(a+=Kv),a!==i)continue;let n=!0;for(let i=1;i<r;i++){let r=e.charCodeAt(o+i),a=t.charCodeAt(i);if(r>=Z&&r<=Q&&(r+=Kv),a>=Z&&a<=Q&&(a+=Kv),r!==a){n=!1;break}}if(n)return o}return-1}var Fb=-1;function Ib(e,t,n){let r=n.toLowerCase(),i=`<`+r,a=`</`+r,o=1,s=t,c=e.length;for(Fb=-1;s<c&&o>0;){let t=Nb(e,i,s),n=Nb(e,a,s);if(n===-1)return-1;if(t!==-1&&t<n){let n=$y(e,t);n?(n.tag.toLowerCase()===r&&!n.isClosing&&!n.selfClosing&&!cy(n.tag)&&o++,s=n.end):s=t+1}else{var l=n+a.length,u=l<c?e.charCodeAt(l):62;if((u===J||u===G||u===K||u===q)&&(o--,o===0)){Fb=n;let t=n+a.length;for(;t<c&&e.charCodeAt(t)!==J;)t++;return t+1}s=n+1}}return-1}function Lb(e,t,n,r){if(r.ignoreHTMLBlocks||r.disableParsingRawHTML)return null;var i=db(e,t);if(vb(e,t,i),gb>3&&!n.inHTML)return null;var a=t+_b;if(e.charCodeAt(a)!==dv)return null;var o=e.indexOf(`>`,a+1);if(o!==-1&&o<i){var s=e.slice(a+1,o);if(/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(s)||/^[^\s@]+@[^\s@]+$/.test(s))return null}var c=Rb(e,a);if(c>=1&&c<=5){var l=e.length;if(c===1){for(var u=e.length,d=0;d<Hy.length;d++){var f=Nb(e,`</`+Hy[d]+`>`,a);f>=0&&f<u&&(u=f)}if(u<e.length){var p=e.indexOf(`>`,u);l=p>=0?fb(e,p+1):e.length}}else{var m=c===2?`-->`:c===3?`?>`:c===4?`>`:`]]>`,h=e.indexOf(m,a);h>=0&&(l=fb(e,h+m.length))}var g=e.slice(a,l);if(c>=2)return{node:{type:$.htmlComment,text:g,l:!1,raw:!0},end:l};var _=`div`,v=g.match(/^<\/?([a-zA-Z][a-zA-Z0-9-]*)/);v&&(_=v[1]);var y=$y(e,a),b={},x;y&&!y.isClosing&&(b=Mb(y.attrs,_,r),x=y.whitespaceBeforeAttrs+y.rawAttrs);var S=[],C=Nb(g,`</`+_.toLowerCase(),0),w=g,T=``;if(y&&y.isClosing)for(w=g.slice(y.end-a);w.length>0&&w.charCodeAt(w.length-1)===q;)w=w.slice(0,-1);else if(y&&!y.isClosing){var E=y.end-a;if(C!==-1)for(w=g.slice(E),w.charCodeAt(0)===q&&(w=w.slice(1));w.length>0&&w.charCodeAt(w.length-1)===q;)w=w.slice(0,-1);else for(w=g;w.length>0&&w.charCodeAt(w.length-1)===q;)w=w.slice(0,-1);C!==-1&&(T=g.slice(E,C).trim())}var ee=y?y.isClosing:!1;return{node:{type:$.htmlBlock,tag:_,attrs:b,i:x,children:S,a:w,text:T,d:!0,b:ee},end:l}}if(c===6||c===7){var D=mb(e,t),te=D<e.length?D:e.length,ne=e.slice(a,te),re=D<e.length?fb(e,D):e.length,O=$y(e,a);if(O){var ie=O.tag,k=ie.toLowerCase();if(O.isClosing){var ae=e.slice(O.end,te);return{node:{type:$.htmlBlock,tag:ie,attrs:{},children:[],a:ae,text:ae,d:!0,b:!0},end:re}}if(O.selfClosing||cy(ie))return{node:{type:$.htmlBlock,tag:ie,attrs:Mb(O.attrs,ie,r),i:O.whitespaceBeforeAttrs+O.rawAttrs,children:[],a:``,text:``,d:!1,b:!1},end:O.end<e.length&&e.charCodeAt(O.end)===q?O.end+1:O.end};var oe=n.c||0,A=e.slice(a,te),se=-1,ce=-1;if(oe<10){for(var le=`</`+k,ue=O.end-a,j=1,de=ue;de<A.length&&j>0;){var M=Nb(A,`<`+k,de),fe=Nb(A,le,de);if(fe===-1)break;if(M!==-1&&M<fe){var pe=M+k.length+1;if(pe<A.length){var N=A.charCodeAt(pe);(N===G||N===K||N===q||N===J||N===Av)&&j++}de=M+1}else{var me=fe+le.length;if(me<A.length){var he=A.charCodeAt(me);if((he===J||he===G||he===K||he===q)&&(j--,j===0)){se=fe;for(var P=me;P<A.length&&A.charCodeAt(P)!==J;)P++;ce=P+1;break}}else if(j--,j===0){se=fe,ce=A.length;break}de=fe+1}}var ge=!1;if(se===-1&&c===6&&!O.isClosing){var _e=Ib(e,O.end,k);if(_e!==-1){for(var ve=Fb,ye=O.end,be=!1,xe=!1,Se=!1,Ce=0,we=!1,Te=!1,Ee=ye;Ee<ve;){var De=e.charCodeAt(Ee);if(De===q)Te&&(be=!0),we||Ce++,Te=!0,Ee++;else if(De===G||De===K)Ee++;else{if(!we&&(we=!0,Ce>=2&&De===dv)){Se=!0;break}if(Te=!1,De===dv){var Oe=e.charCodeAt(Ee+1)|32;if((Oe===Sv||Oe===Cv||Oe===xv)&&(Gy.lastIndex=Ee,Gy.test(e))){xe=!0;break}}Ee++}}if(be&&!Se&&!xe){var ke=db(e,_e);te=ke,re=fb(e,ke),A=e.slice(a,te),ne=e.slice(a,te),se=ve-a,ce=_e-a,ge=!0}}}}var Ae=O.rawAttrs.indexOf(`
|
|
643
|
+
`)!==-1||O.whitespaceBeforeAttrs.indexOf(`
|
|
644
|
+
`)!==-1,je=!1;se!==-1&&(je=A.slice(ce).trim().length===0);var Me=!1,Ne=te,Pe=re;if(se!==-1){var Fe=a+ce,Ie=db(e,Fe-1);if(Fe<Ie){for(var Le=Fe;Le<Ie&&(e.charCodeAt(Le)===G||e.charCodeAt(Le)===K);)Le++;if(Le<Ie&&e.charCodeAt(Le)===dv){var Re=$y(e,Le);Re&&!Re.isClosing&&(Me=!0,Ne=Fe,Pe=Fe,je=!0)}}if(!Me){var ze=fb(e,Ie);if(ze<te){for(var Be=ze;Be<te&&(e.charCodeAt(Be)===G||e.charCodeAt(Be)===K);)Be++;Be<te&&e.charCodeAt(Be)===dv&&$y(e,Be)&&(Me=!0,Ne=Ie,Pe=ze,je=!0)}}!Me&&n.inHTML&&(Me=!0,Ne=Ie,Pe=fb(e,Ie),je=e.slice(Fe,Ie).trim().length===0)}var Ve=[],He=``;if(se!==-1){He=A.slice(O.end-a,se);var Ue=He.trim();if(Ue){var{inline:We,inHTML:Ge,c:Ke}=n;if(n.inHTML=!0,n.c=oe+1,k===`p`)n.inline=!0,Ve=Wb(Ue,!1,n,r);else{var qe=He.indexOf(`
|
|
645
|
+
|
|
646
|
+
`)!==-1,Je=Ky.test(Ue),Ye=qy.test(Ue),Xe=qe||Je||n.inHTML&&Ye;He.length>=2&&He.charCodeAt(0)===q&&He.charCodeAt(He.length-1)===q&&!qe&&!Je&&!Ye?Ve=[{type:$.text,text:Ue}]:Xe||Ye?(n.inline=!1,Ve=mx(He,n,r)):(n.inline=!0,Ve=Wb(Ue,!1,n,r))}n.inline=We,n.inHTML=Ge,n.c=Ke}}var Ze=!1;if(c===6&&se!==-1&&!n.inHTML&&!Ae){var Qe=/<[a-zA-Z][^>]*>/.test(He),$e=He.indexOf(`
|
|
647
|
+
|
|
648
|
+
`)!==-1||Ky.test(He);Qe&&!$e&&(Ze=!0)}if(!ge&&(n.inHTML||c===7||Ae||!je||Ze)){var et,tt=!1;if(se!==-1&&Me){var nt=!1;if(n.inHTML&&ce<A.length){for(var rt=ce;rt<A.length&&A.charCodeAt(rt)!==q;)rt++;var it=A.slice(ce,rt).trim();nt=it.length>1&&it.charCodeAt(0)===dv&&it.charCodeAt(1)!==Av}et=nt?A.slice(O.end-a):He,tt=!0}else(c===7||n.inHTML)&&se!==-1?(et=A.slice(O.end-a),et.charCodeAt(0)===q&&(et=et.slice(1))):Me?et=e.slice(a,Ne):Ae?et=ne:(et=A.slice(O.end-a),et.charCodeAt(0)===q&&(et=et.slice(1)));var at={type:$.htmlBlock,tag:ie,attrs:Mb(O.attrs,ie,r),i:O.whitespaceBeforeAttrs+O.rawAttrs,children:Ve,a:et,text:et,d:!0,b:!1};return tt&&(at.n=!0),{node:at,end:Pe}}return{node:{type:$.htmlBlock,tag:ie,attrs:Mb(O.attrs,ie,r),i:O.whitespaceBeforeAttrs+O.rawAttrs,children:Ve,a:ge?``:He,text:He,d:!1,b:!1},end:Pe}}var ot=ne.match(/^<(\/?)([a-zA-Z][a-zA-Z0-9-]*)/),st=ot?ot[2]:`div`,ct=ot?ot[1]===`/`:!1,lt=ne;if(ct){var ut=ne.indexOf(`>`);ut!==-1&&(lt=ne.slice(ut+1))}return{node:{type:$.htmlBlock,tag:st,attrs:{},children:[],a:lt,text:lt,d:!0,b:ct},end:re}}var dt=$y(e,a);if(!dt)return null;var ft=dt.tag,pt=ft.toLowerCase(),mt=ft.charCodeAt(0),ht=mt>=Z&&mt<=Q;if(!ht&&!jb.has(pt)&&!Uy.has(pt)&&!pt.includes(`-`))return null;if(dt.isClosing)return{node:{type:$.htmlSelfClosing,tag:ft,attrs:{},a:e.slice(a,dt.end),b:!0},end:dt.end};var gt=Ib(e,dt.end,ft),_t=[];if(gt!==-1){var vt=Fb,yt=e.slice(dt.end,vt),bt=yt.trim();if(bt){var xt=yt.indexOf(`
|
|
649
|
+
|
|
650
|
+
`)!==-1,St=Ky.test(bt),Ct=qy.test(bt),wt=n.inline,Tt=n.inHTML,Et=n.c;n.inHTML=!0,n.c=(n.c||0)+1,xt||St||Ct?(n.inline=!1,_t=mx(yt,n,r)):(n.inline=!0,_t=Wb(bt,!1,n,r)),n.inline=wt,n.inHTML=Tt,n.c=Et}var Dt=db(e,gt),Ot=e.slice(gt,Dt).trim()?gt:fb(e,gt),kt=ht?e.slice(a,gt):e.slice(a,Ot);return{node:{type:$.htmlBlock,tag:ft,attrs:Mb(dt.attrs,ft,r),i:dt.whitespaceBeforeAttrs+dt.rawAttrs,children:_t,a:kt,text:ht?yt:kt,d:!0,b:!1},end:Ot}}var At=mb(e,dt.end),jt=At<e.length?fb(e,At):At,Mt=e.slice(dt.end,At);if(Mt.trim()){var{inline:Nt,inHTML:Pt,c:Ft}=n;n.inline=!1,n.inHTML=!0,n.c=(n.c||0)+1,_t=mx(Mt,n,r),n.inline=Nt,n.inHTML=Pt,n.c=Ft}var It=e.slice(dt.end,At);return{node:{type:$.htmlBlock,tag:ft,attrs:Mb(dt.attrs,ft,r),i:dt.whitespaceBeforeAttrs+dt.rawAttrs,children:_t,a:It,text:Mt,d:!0,b:!1},end:jt}}function Rb(e,t){if(e.charCodeAt(t)!==dv)return 0;var n=t+1,r=e.length;if(e.charCodeAt(n)===mv&&e.charCodeAt(n+1)===Y&&e.charCodeAt(n+2)===Y)return 2;if(e.charCodeAt(n)===Ov)return 3;if(e.charCodeAt(n)===mv){var i=e.charCodeAt(n+1);if(i>=Z&&i<=Q)return 4;if(e.slice(n+1,n+8)===`[CDATA[`)return 5}for(var a=e.charCodeAt(n)===Av,o=a?n+1:n,s=o;s<r;){var c=e.charCodeAt(s);if(c>=Z&&c<=Q||c>=Uv&&c<=Wv||c>=X&&c<=Hv||c===Y)s++;else break}if(s===o)return 0;var l=e.slice(o,s);if(Uy.has(l.toLowerCase())){if(a)return 0;var u=e.charCodeAt(s);return+(u===G||u===K||u===J||u===q||s>=r)}if(jb.has(l.toLowerCase())){if(a){for(var d=s;d<r&&(e.charCodeAt(d)===G||e.charCodeAt(d)===K);)d++;return d<r&&e.charCodeAt(d)===J?6:0}var f=s<r?e.charCodeAt(s):-1;return f===G||f===K||f===J||f===q||f===Av||f===-1?6:0}if(a){for(var p=s;p<r&&(e.charCodeAt(p)===G||e.charCodeAt(p)===K);)p++;if(p<r&&e.charCodeAt(p)===J){var m=db(e,t);if(e.slice(p+1,m).trim()===``)return 7}}else{var h=db(e,t),g=$y(e,t);if(g&&g.end<=h&&e.slice(g.end,h).trim()===``)return 7}return 0}function zb(e,t,n){for(var r=0,i=e.length;r<i&&(e.charCodeAt(r)===G||e.charCodeAt(r)===K);)r++;for(;i>r&&(e.charCodeAt(i-1)===G||e.charCodeAt(i-1)===K);)i--;r<i&&e.charCodeAt(r)===Pv&&r++,i>r&&e.charCodeAt(i-1)===Pv&&(i-2<r||e.charCodeAt(i-2)!==cv)&&i--;for(var a=[],o=r,s=!1,c=[],l=r;l<i;){var u=e.charCodeAt(l);if(u===cv&&l+1<i){e.charCodeAt(l+1)===Pv?(s||(s=!0,c=[]),c.push(e.slice(o,l)),c.push(`|`),l+=2,o=l):l+=2;continue}if(u===tv){for(var d=0;l<i&&e.charCodeAt(l)===tv;)d++,l++;for(var f=!1;l<i&&!f;){for(var p=0;l<i&&e.charCodeAt(l)===tv;)p++,l++;p===d?f=!0:p===0&&l++}continue}if(u===Pv){var m=s?(c.push(e.slice(o,l)),c.join(``)):e.slice(o,l);a.push(m.trim()),l++,o=l,s=!1,c=[];continue}l++}var h=s?(c.push(e.slice(o,i)),c.join(``)):e.slice(o,i);return a.push(h.trim()),a.map(function(e){var r=e.indexOf(`\\|`)===-1?e:e.replace(/\\\|/g,`|`);return r?Wb(r,!1,t,n):[]})}function Bb(e,t,n,r){let i=db(e,t);var a=e.indexOf(`|`,t);if(a<0||a>=i)return null;let o=fb(e,i);if(o>=e.length)return null;let s=db(e,o);if(!Qy(e,o,s))return null;let c=e.slice(t,i),l=e.slice(o,s);for(var u=[],d=0,f=l.length;d<f&&(l.charCodeAt(d)===G||l.charCodeAt(d)===K);)d++;for(d<f&&l.charCodeAt(d)===Pv&&d++;d<f;){for(;d<f&&(l.charCodeAt(d)===G||l.charCodeAt(d)===K);)d++;if(d>=f||l.charCodeAt(d)===Pv)break;var p=l.charCodeAt(d)===gv;for(p&&d++;d<f&&l.charCodeAt(d)===Y;)d++;var m=d<f&&l.charCodeAt(d)===gv;for(m&&d++,u.push(p&&m?`center`:m?`right`:p?`left`:null);d<f&&(l.charCodeAt(d)===G||l.charCodeAt(d)===K);)d++;d<f&&l.charCodeAt(d)===Pv&&d++}let h=zb(c,n,r);if(u.length!==h.length)return null;let g=[],_=fb(e,s);for(;_<e.length;){let t=db(e,_),i=e.slice(_,t);if(yb(e,_,t))break;if(vb(e,_,t),gb<4){var v=e.charCodeAt(_+_b);if(v===J||v===av||(v===Y||v===lv||v===uv)&&Sb(e,_))break;if(v===tv||v===nv){for(var y=_+_b,b=0;y<t&&e.charCodeAt(y)===v;)b++,y++;if(b>=3)break}}g.push(zb(i,n,r)),_=fb(e,t)}if(r.optimizeForStreaming&&g.length===0)return null;for(var x=h.length,S=0;S<g.length;S++)if(g[S].length<x)for(;g[S].length<x;)g[S].push([]);else g[S].length>x&&(g[S].length=x);return{node:{type:$.table,header:h,cells:g,align:u},end:_}}function Vb(e,t,n){if(vb(e,t,db(e,t)),gb>3)return null;var r=t+_b;if(e.charCodeAt(r)!==rv)return null;if(r+1<e.length&&e.charCodeAt(r+1)===iv)return Hb(e,r,n)||null;n.refs||={};var i=tb(e,r,n.refs);return i===null?null:{node:{type:$.refCollection},end:i}}function Hb(e,t,n){var r=e.length;if(e.charCodeAt(t)!==rv||t+1>=r||e.charCodeAt(t+1)!==iv)return null;for(var i=t+2,a=i;i<r&&e.charCodeAt(i)!==pv;){if(e.charCodeAt(i)===q)return null;i++}if(i>=r)return null;var o=(`^`+e.slice(a,i)).toLowerCase();if(i++,i>=r||e.charCodeAt(i)!==gv)return null;for(i++;i<r&&(e.charCodeAt(i)===G||e.charCodeAt(i)===K);)i++;if(i<r&&e.charCodeAt(i)===q)for(i++;i<r&&(e.charCodeAt(i)===G||e.charCodeAt(i)===K);)i++;var s=e.indexOf(`
|
|
651
|
+
`,i);s<0&&(s=r);for(var c=e.slice(i,s).trim(),l=s<r?s+1:r;l<r;){var u=db(e,l);if(vb(e,l,u),gb>=2&&!yb(e,l,u))c+=`
|
|
652
|
+
`+e.slice(l,u),l=fb(e,u);else if(yb(e,l,u)){var d=fb(e,u);if(d<r&&(vb(e,d,db(e,d)),gb>=2)){c+=`
|
|
653
|
+
`,l=fb(e,u);continue}break}else break}return n.refs[o]||(n.refs[o]={target:c,title:void 0}),{node:{type:$.footnote},end:l}}function Ub(e,t,n,r){let i=t,a=0,o=0,s=-1;for(;i<e.length;){let t=s>=0?s:db(e,i);if(s=-1,yb(e,i,t))break;if(vb(e,i,t),gb<4&&o>0&&!n.f){let n=e.charCodeAt(i+_b);if(n===sv||n===Y){let r=i+_b;for(;r<t&&e.charCodeAt(r)===n;)r++;for(;r<t&&(e.charCodeAt(r)===G||e.charCodeAt(r)===K);)r++;if(r>=t){a=n===sv?1:2,i=fb(e,t);break}}}o=t;let x=fb(e,t);if(x<e.length){if(e.charCodeAt(x)===Vv){var c=db(e,x);i=fb(e,c),o=c;continue}let t=db(e,x);if(s=t,vb(e,x,t),gb<4){let a=e.charCodeAt(x+_b);if(a===J){i=x;break}if(a===av){for(var l=x+_b,u=0;l<t&&e.charCodeAt(l)===av&&u<=6;)u++,l++;if(u>=1&&u<=6&&(l>=t||e.charCodeAt(l)===G||e.charCodeAt(l)===K)){i=x;break}}if(a===tv||a===nv){for(var d=x+_b,f=0;d<t&&e.charCodeAt(d)===a;)f++,d++;if(f>=3){i=x;break}}if(a===dv){var p=x+_b+1,m=p<t?e.charCodeAt(p):0,h=m===mv||m===Ov;if(!h&&m===Av){for(var g=p+1,_=g;_<t&&(e.charCodeAt(_)>=Z&&e.charCodeAt(_)<=Q||e.charCodeAt(_)>=Uv&&e.charCodeAt(_)<=Wv||e.charCodeAt(_)>=X&&e.charCodeAt(_)<=Hv||e.charCodeAt(_)===Y);)_++;_>g&&(h=jb.has(e.slice(g,_).toLowerCase()))}else if(!h){for(var v=p;v<t&&(e.charCodeAt(v)>=Z&&e.charCodeAt(v)<=Q||e.charCodeAt(v)>=Uv&&e.charCodeAt(v)<=Wv||e.charCodeAt(v)>=X&&e.charCodeAt(v)<=Hv||e.charCodeAt(v)===Y);)v++;if(v>p){var y=e.slice(p,v).toLowerCase();h=jb.has(y)||Uy.has(y)}}if(h&&Lb(e,x,n,r)){i=x;break}}if(a===Y||a===lv||a===Nv){let n=x+_b+1;if(n<t&&(e.charCodeAt(n)===G||e.charCodeAt(n)===K)&&pb(e,n,t)<t&&!Sb(e,x)){i=x;break}}if(a>=X&&a<=Hv){let n=x+_b;for(;n<t&&e.charCodeAt(n)>=X&&e.charCodeAt(n)<=Hv;)n++;if(n<t&&(e.charCodeAt(n)===kv||e.charCodeAt(n)===Rv)&&n-(x+_b)===1&&e.charCodeAt(x+_b)===49){var b=n+1;if(b<t&&(e.charCodeAt(b)===G||e.charCodeAt(b)===K)&&pb(e,b,t)<t){i=x;break}}}if(a===Pv){let n=fb(e,t);if(n<e.length&&Qy(e,n,db(e,n))){i=x;break}}if((a===Y||a===lv||a===uv)&&Sb(e,x)){if(a!==Y){i=x;break}let n=0,r=x+_b;for(;r<t&&e.charCodeAt(r)===Y;)n++,r++;for(;r<t&&(e.charCodeAt(r)===G||e.charCodeAt(r)===K);)r++;if(r<t){i=x;break}}}}i=fb(e,t)}for(var x=a?o:i;x>t&&(e.charCodeAt(x-1)===q||e.charCodeAt(x-1)===ev||e.charCodeAt(x-1)===G||e.charCodeAt(x-1)===K);)x--;for(var S=t;S<x&&(e.charCodeAt(S)===G||e.charCodeAt(S)===K);)S++;if(S>=x)return null;for(var C=!1,w=S;w<x;w++)if(e.charCodeAt(w)===Vv){C=!0;break}var T=C?e.slice(S,x).replace(/\u001E/g,``):e.slice(S,x);if(!T)return null;let E=Wb(T,!0,n,r);if(a){let e=(r?.slugify||ay)(T);return{node:{type:$.heading,level:a,children:E,id:e},end:i}}return{node:{type:$.paragraph,children:E},end:i}}function Wb(e,t,n,r){var i=n.k;if(!i){var a=n.e;n.e=t;var o=fx(e,0,e.length,n,r);return n.e=a,o}var s=[];return i.push({dest:s,text:e,breaks:t,inline:n.inline,inAnchor:n.inAnchor,inHTML:n.inHTML,htmlDepth:n.c,inList:n.inList,inBlockQuote:n.inBlockQuote,noSetext:n.f,depth:n.j}),s}function Gb(e,t,n){if(e.charCodeAt(t)!==tv)return null;let r=hb(e,t,n,96),i=t+r;for(;i<n;){let a=e.indexOf("`",i);if(a<0||a>=n)return null;let o=hb(e,a,n,96);if(o===r){let n=e.slice(t+r,a);return n.indexOf(`
|
|
654
|
+
`)!==-1&&(n=n.replace(/\n/g,` `)),n.length>0&&n[0]===` `&&n[n.length-1]===` `&&n.trim().length>0&&(n=n.slice(1,-1)),{node:{type:$.codeInline,text:n},end:a+o}}i=a+o}return null}function Kb(e,t,n){if(e.charCodeAt(t)!==tv)return t;let r=hb(e,t,n,96),i=t+r;for(;i<n;){let a=e.indexOf("`",i);if(a<0||a>=n)return t;let o=hb(e,a,n,96);if(o===r)return a+o;i=a+o}return t}function qb(e,t,n){if(e.charCodeAt(t)!==dv)return t;if(t+1<n&&e.charCodeAt(t+1)===Av){let r=t+2;for(;r<n&&e.charCodeAt(r)!==J;)r++;return r<n?r+1:t}if(t+3<n&&e.charCodeAt(t+1)===mv&&e.charCodeAt(t+2)===Y&&e.charCodeAt(t+3)===Y){let n=e.indexOf(`-->`,t+4);return n>=0?n+3:t}let r=t+1,i=r;for(;r<n;){let t=e.charCodeAt(r);if(t>=Z&&t<=Q||t>=Uv&&t<=Wv||t>=X&&t<=Hv||t===Y)r++;else break}if(r===i)return t;let a=e.slice(i,r).toLowerCase(),o=!1;for(;r<n;){let i=e.charCodeAt(r);if(i===J){r++;break}if(i===Av&&r+1<n&&e.charCodeAt(r+1)===J){r+=2,o=!0;break}if(i===Mv||i===jv){var s=i;for(r++;r<n&&e.charCodeAt(r)!==s;)r++;r<n&&r++;continue}if(i===q)return t;r++}if(o||cy(a))return r;let c=1;for(;r<n&&c>0;)if(e.charCodeAt(r)===dv)if(r+1<n&&e.charCodeAt(r+1)===Av){let t=r+2,i=t;for(;i<n&&(e.charCodeAt(i)>=Z&&e.charCodeAt(i)<=Q||e.charCodeAt(i)>=Uv&&e.charCodeAt(i)<=Wv);)i++;if(e.slice(t,i).toLowerCase()===a){for(;i<n&&e.charCodeAt(i)!==J;)i++;if(i<n&&i++,c--,c===0)return i}r=i}else{let t=r+1,i=t;for(;i<n&&(e.charCodeAt(i)>=Z&&e.charCodeAt(i)<=Q||e.charCodeAt(i)>=Uv&&e.charCodeAt(i)<=Wv);)i++;e.slice(t,i).toLowerCase()===a&&c++,r++}else r++;return r}function Jb(e,t,n,r,i){if(e.charCodeAt(t)!==nv||t+1>=n||e.charCodeAt(t+1)!==nv)return null;let a=t+2;for(;a+1<n;){let o=e.charCodeAt(a);if(o===tv){let t=Kb(e,a,n);if(t>a){a=t;continue}}if(o===nv&&e.charCodeAt(a+1)===nv){let n=e.slice(t+2,a),o=fx(n,0,n.length,r,i);return{node:{type:$.textFormatted,tag:`del`,children:o},end:a+2}}o===cv&&a+1<n&&a++,a++}return null}function Yb(e,t,n,r,i){if(e.charCodeAt(t)!==sv||t+1>=n||e.charCodeAt(t+1)!==sv)return null;let a=t+2;for(;a+1<n;){let o=e.charCodeAt(a);if(o===tv){let t=Kb(e,a,n);if(t>a){a=t;continue}}if(o===sv&&e.charCodeAt(a+1)===sv&&a>t+2){let n=e.slice(t+2,a),o=fx(n,0,n.length,r,i);return{node:{type:$.textFormatted,tag:`mark`,children:o},end:a+2}}o===cv&&a+1<n&&a++,a++}return null}function Xb(e,t,n){return e<Gv?!!(ob(e)&dy):_y.test(t[n])}function Zb(e,t,n){return e<Gv?!!(ob(e)&ly):vy.test(t[n])}function Qb(e,t,n){var r=e.charCodeAt(t);if(r!==lv&&r!==uv)return null;var i=hb(e,t,n,r);if(i===0)return null;var a=t>0?e.charCodeAt(t-1):32,o=t+i<n?e.charCodeAt(t+i):32,s=Zb(a,e,t-1),c=Zb(o,e,t+i),l=t>0&&Xb(a,e,t-1),u=t+i<n&&Xb(o,e,t+i),d=!c&&(!u||s||l),f=!s&&(!l||c||u),p,m;return r===lv?(p=d,m=f):(p=d&&(!f||l),m=f&&(!d||u)),{len:i,canOpen:p,canClose:m}}function $b(e,t,n,r){if(t.length!==0){for(var i=e.length,a=Array(i),o=null,s=null,c=0;c<i;c++){var l={node:e[c],prev:s,next:null};s?s.next=l:o=l,a[c]=l,s=l}for(var u=Array(t.length),d=0;d<t.length;d++)u[d]=a[t[d].idx];for(var f=[],p=0;p<12;p++)f[p]=-1;for(var m=0;m<t.length;){var h=t[m];if(!h.active||!h.canClose){m++;continue}for(var g=(h.ch===lv?0:1)*6+h.len%3*2+ +!!h.canOpen,_=f[g]===void 0?-1:f[g],v=-1,y=m-1;y>_;y--){var b=t[y];if(!(!b.active||b.ch!==h.ch||!b.canOpen)&&!((h.canOpen||b.canClose)&&(b.len+h.len)%3==0&&b.len%3!=0)){v=y;break}}if(v<0){f[g]=m-1,!h.canOpen&&(h.active=!1),m++;continue}var x=t[v],S=x.len>=2&&h.len>=2,C=S?2:1;x.len-=C,h.len-=C;var w=u[v],T=u[m],E=w.node,ee=T.node;E.text=E.text.slice(0,E.text.length-C),ee.text=ee.text.slice(C);for(var D=[],te=w.next;te&&te!==T;)D.push(te.node),te=te.next;var ne={node:{type:$.textFormatted,tag:S?`strong`:`em`,children:D},prev:w,next:T};w.next=ne,T.prev=ne;for(var re=v+1;re<m;re++)t[re].active=!1;if(x.len===0&&(x.active=!1,E.text===``)){var O=w.prev;ne.prev=O,O?O.next=ne:o=ne}if(h.len===0){if(h.active=!1,ee.text===``){var ie=T.next;ne.next=ie,ie&&(ie.prev=ne)}}else continue;m++}for(var k=0,ae=o;ae;){var oe=ae.node;if(oe.type===$.text){var A=oe;if(A.text===``){ae=ae.next;continue}if(k>0&&e[k-1].type===$.text){e[k-1].text+=A.text,ae=ae.next;continue}}e[k++]=oe,ae=ae.next}e.length=k}}function ex(e,t,n,r,i){let a=e.charCodeAt(t)===mv,o=a?t+1:t;if(e.charCodeAt(o)!==rv)return null;var s=e.indexOf(`]`,o+1);if(s<0||s>=n)return null;for(var c=o+1,l=1;c<n&&l>0;){var u=e.charCodeAt(c);if(u===cv&&c+1<n){c+=2;continue}if(u===tv){var d=Kb(e,c,n);if(d>c){c=d;continue}}if(u===dv){var f=tx(e,c,n);if(f){c=f.end;continue}var p=qb(e,c,n);if(p>c){c=p;continue}}u===rv?l++:u===pv&&l--,c++}if(l!==0)return null;var m=c-1,h=e.slice(o+1,m),g=c<n?e.charCodeAt(c):0,_=!1;if(g===Lv){var v=!0;for(c++;c<n&&(e.charCodeAt(c)===G||e.charCodeAt(c)===q);)c++;var y=``,b=c;if(c<n&&e.charCodeAt(c)===dv){for(c++,b=c;b<n&&e.charCodeAt(b)!==J;){if(e.charCodeAt(b)===cv&&b+1<n){b+=2;continue}if(e.charCodeAt(b)===q){v=!1;break}b++}v&&(b>=n||e.charCodeAt(b)!==J)&&(v=!1),v&&(y=e.slice(c,b),b++)}else if(v)if(r.g!==void 0&&c>=r.g)v=!1;else{for(var x=0,S=!1;b<n;){var C=e.charCodeAt(b);if(C===cv&&b+1<n){b+=2;continue}if(C===Lv)x++;else if(C===Rv){if(S=!0,x===0)break;x--}else if(C===G||C===q)break;b++}b>=n&&!S&&(r.g===void 0||c<r.g)&&(r.g=c),y=e.slice(c,b)}if(v){for(c=b;c<n&&(e.charCodeAt(c)===G||e.charCodeAt(c)===q);)c++;var w;if(c<n){var T=e.charCodeAt(c);if(T===Mv||T===jv||T===Lv){var E=T===Lv?41:T;c++;for(var ee=c;c<n&&e.charCodeAt(c)!==E;)e.charCodeAt(c)===cv&&c+1<n&&c++,c++;c>=n?v=!1:(w=e.slice(ee,c),c++)}}if(v){for(;c<n&&(e.charCodeAt(c)===G||e.charCodeAt(c)===q);)c++;(c>=n||e.charCodeAt(c)!==Rv)&&(v=!1)}}if(v){c++,y=sb(y),w!==void 0&&(w=$v(sb(w)));var D=(i?.sanitizer||ty)(y,a?`img`:`a`,a?`src`:`href`)===null?null:y;if(a){var te=ox(fx(h,0,h.length,r,i));return{node:{type:$.image,target:D,alt:te,title:w},end:c}}else{var ne=r.inAnchor;r.inAnchor=!0;var re=ne?[{type:$.text,text:h}]:fx(h,0,h.length,r,i);return r.inAnchor=ne,!r.inAnchor&&ax(re)?null:{node:{type:$.link,target:D,title:w,children:re},end:c}}}else c=m+1,_=!0}var O=``,ie=c;if(!_&&g===rv){var k=c+1;ie=k;for(var ae=!1;ie<n&&e.charCodeAt(ie)!==pv;){if(e.charCodeAt(ie)===cv&&ie+1<n){ie+=2;continue}if(e.charCodeAt(ie)===rv){ae=!0;break}ie++}if(ae||ie>=n)return null;var oe=e.slice(k,ie);if(oe.trim())O=ab(oe);else{if(ib(h))return null;O=ab(h)}ie+=1}else{if(ib(h))return null;O=ab(h)}var A=r.refs[O];if(!A)return null;if(a)return{node:{type:$.image,target:A.target,alt:ox(fx(h,0,h.length,r,i)),title:A.title},end:ie};var se=r.inAnchor;r.inAnchor=!0;var re=se?[{type:$.text,text:h}]:fx(h,0,h.length,r,i);return r.inAnchor=se,!r.inAnchor&&ax(re)?null:{node:{type:$.link,target:A.target,title:A.title,children:re},end:ie}}function tx(e,t,n){if(e.charCodeAt(t)!==dv)return null;for(var r=t+1;r<n;){var i=e.charCodeAt(r);if(i===J)break;if(i===G||i===q||i===ev||i===dv)return null;r++}if(r>=n||e.charCodeAt(r)!==J)return null;var a=e.slice(t+1,r);return a.match(/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^\x00-\x20]*)$/)?{node:{type:$.link,target:a,title:void 0,children:[{type:$.text,text:a}]},end:r+1}:a.indexOf(`@`)!==-1&&/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)?{node:{type:$.link,target:`mailto:`+a,title:void 0,children:[{type:$.text,text:a}]},end:r+1}:null}function nx(e,t,n,r){if(e.charCodeAt(t)!==rv||t+1>=n||e.charCodeAt(t+1)!==iv)return null;let i=t+2;for(;i<n&&e.charCodeAt(i)!==pv&&e.charCodeAt(i)!==q;)i++;if(i>=n||e.charCodeAt(i)!==pv)return null;let a=e.slice(t+2,i);return a?{node:{type:$.footnoteReference,target:`#`+ay(a),text:a},end:i+1}:null}function rx(e,t,n,r){if(r.disableBareUrls)return null;var i=``,a=!1,o=e.charCodeAt(t);if(o===yv||o===72?t+8<=n&&e.charCodeAt(t+1)===xv&&e.charCodeAt(t+2)===xv&&e.charCodeAt(t+3)===Sv&&(e.charCodeAt(t+4)===Cv&&e.charCodeAt(t+5)===gv&&e.charCodeAt(t+6)===Av&&e.charCodeAt(t+7)===Av?i=`https://`:e.charCodeAt(t+4)===gv&&e.charCodeAt(t+5)===Av&&e.charCodeAt(t+6)===Av&&(i=`http://`)):o===vv||o===70?t+6<=n&&e.charCodeAt(t+1)===xv&&e.charCodeAt(t+2)===Sv&&e.charCodeAt(t+3)===gv&&e.charCodeAt(t+4)===Av&&e.charCodeAt(t+5)===Av&&(i=`ftp://`):(o===bv||o===87)&&t+4<=n&&e.charCodeAt(t+1)===bv&&e.charCodeAt(t+2)===bv&&e.charCodeAt(t+3)===kv&&(i=`www.`,a=!0),!i)return null;let s=t+i.length;for(;s<n;){let t=e.charCodeAt(s);if(t===G||t===q||t===K||t===ev||t===dv||t===J)break;s++}for(var c=0,l=0,u=t;u<s;u++){var d=e.charCodeAt(u);d===Lv?c++:d===Rv&&l++}let f=s;for(;f>t+i.length;){let n=e.charCodeAt(f-1);if(n===kv||n===Ev||n===gv||n===mv||n===Ov||n===Rv||n===lv||n===uv||n===nv){if(n===Rv){if(c>=l)break;l--}f--}else if(n===Dv){for(var p=f-2;p>t&&(e.charCodeAt(p)>=Z&&e.charCodeAt(p)<=Q||e.charCodeAt(p)>=Uv&&e.charCodeAt(p)<=Wv||e.charCodeAt(p)>=X&&e.charCodeAt(p)<=Hv);)p--;p>=t&&e.charCodeAt(p)===hv?f=p:f--}else break}if(f<=t+i.length)return null;var m=t+(a?4:i.length),h=e.indexOf(`/`,m);if((h<0||h>f)&&(h=f),a&&e.indexOf(`.`,m)===-1)return null;for(var g=-1,_=-1,v=h-1;v>=m;v--)if(e.charCodeAt(v)===kv)if(g<0)g=v;else{_=v;break}for(var v=_>=0?_+1:m;v<h;v++)if(e.charCodeAt(v)===uv)return null;var y=e.slice(t,f),b=a?`http://`+y:y;return{node:{type:$.link,target:b,title:void 0,children:[{type:$.text,text:y}]},end:f}}function ix(e,t,n,r){if(r.disableBareUrls)return null;for(var i=t,a=i;i<n;){var o=e.charCodeAt(i);if(o>=Z&&o<=Q||o>=Uv&&o<=Wv||o>=X&&o<=Hv||o===kv||o===mv||o===av||o===36||o===ov||o===hv||o===jv||o===lv||o===Nv||o===Av||o===sv||o===Ov||o===iv||o===uv||o===tv||o===Fv||o===Pv||o===Iv||o===nv||o===Y)i++;else break}if(i===a||i>=n||e.charCodeAt(i)!==fv)return null;i++;for(var s=i,c=-1,l=i;i<n;){var o=e.charCodeAt(i);if(o>=Z&&o<=Q||o>=Uv&&o<=Wv||o>=X&&o<=Hv)i++;else if((o===Y||o===uv)&&i>s)i++;else if(o===kv){if(i===s)break;var u=e.charCodeAt(i-1);if(u===Y||u===uv||i-l>63)break;if(i+1<n){var d=e.charCodeAt(i+1);if(d>=Z&&d<=Q||d>=Uv&&d<=Wv||d>=X&&d<=Hv)c=i,l=i+1,i++;else break}else break}else break}if(i-l>63||c<0)return null;var f=e.charCodeAt(i-1);if(!(f>=Z&&f<=Q||f>=Uv&&f<=Wv||f>=X&&f<=Hv)||i<=c+1)return null;for(var p=-1,m=c-1;m>=s;m--)if(e.charCodeAt(m)===kv){p=m;break}for(var m=p>=0?p+1:s;m<i;m++)if(e.charCodeAt(m)===uv)return null;var h=e.slice(t,i);return{node:{type:$.link,target:`mailto:`+h,title:void 0,children:[{type:$.text,text:h}]},end:i}}function ax(e){for(var t=0;t<e.length;t++)if(e[t].type===$.link||`children`in e[t]&&Array.isArray(e[t].children)&&ax(e[t].children))return!0;return!1}function ox(e){for(var t=``,n=0;n<e.length;n++){var r=e[n];r.type===$.text?t+=r.text:r.type===$.breakLine?t+=` `:r.type===$.codeInline?t+=r.text:`children`in r&&Array.isArray(r.children)?t+=ox(r.children):r.type===$.image&&(t+=r.alt||``)}return t}function sx(e){return{type:$.text,text:e}}function cx(e,t,n){var r=t+1;if(r>=n)return-1;if(e.charCodeAt(r)===av){r++;var i=r<n&&(e.charCodeAt(r)===zv||e.charCodeAt(r)===Bv);i&&r++;for(var a=r,o=i?6:7;r<n&&r-a<=o;){var s=e.charCodeAt(r);if(!(s>=X&&s<=Hv||i&&(s>=Z&&s<=_v||s>=Uv&&s<=vv)))break;r++}return r===a||r-a>o?-1:r<n&&e.charCodeAt(r)===Dv?r+1:-1}for(var c=r;r<n&&r-c<48;){var l=e.charCodeAt(r);if(l>=Z&&l<=Q||l>=Uv&&l<=Wv||l>=X&&l<=Hv){r++;continue}break}return r===c?-1:r<n&&e.charCodeAt(r)===Dv?r+1:-1}function lx(e,t,n,r,i){if(e.charCodeAt(t)!==dv)return null;var a=t+1;if(a>=n)return null;var o=e.charCodeAt(a);if(o===mv&&a+1<n&&e.charCodeAt(a+1)===Y&&a+2<n&&e.charCodeAt(a+2)===Y){var s=a+3;if(s<n&&e.charCodeAt(s)===J)return{node:{type:$.htmlComment,text:``,l:!0},end:s+1};if(s+1<n&&e.charCodeAt(s)===Y&&e.charCodeAt(s+1)===J)return{node:{type:$.htmlComment,text:`-`,l:!0},end:s+2};var c=e.indexOf(`-->`,s);return c!==-1&&c<=n-3?{node:{type:$.htmlComment,text:e.slice(t+4,c),l:!1},end:c+3}:null}if(o===Ov){var l=e.indexOf(`?>`,a+1);return l!==-1&&l<n?{node:{type:$.htmlSelfClosing,tag:`?`,attrs:{},a:e.slice(t,l+2),b:!1},end:l+2}:null}if(o===mv&&a+1<n){var u=e.charCodeAt(a+1);if(u===rv&&e.slice(a+1,a+8)===`[CDATA[`){var d=e.indexOf(`]]>`,a+8);return d!==-1&&d<n?{node:{type:$.htmlSelfClosing,tag:`![CDATA[`,attrs:{},a:e.slice(t,d+3),b:!1},end:d+3}:null}if(u>=Z&&u<=Q){var f=e.indexOf(`>`,a+2);return f!==-1&&f<n?{node:{type:$.htmlSelfClosing,tag:`!`+e.slice(a+1,f),attrs:{},a:e.slice(t,f+1),b:!1},end:f+1}:null}}if(o===Av){var p=a+1;if(p>=n)return null;var m=e.charCodeAt(p);if(!(m>=Z&&m<=Q||m>=Uv&&m<=Wv))return null;for(p++;p<n;){var h=e.charCodeAt(p);if(h>=Z&&h<=Q||h>=Uv&&h<=Wv||h>=X&&h<=Hv||h===Y)p++;else break}for(;p<n&&(e.charCodeAt(p)===G||e.charCodeAt(p)===K||e.charCodeAt(p)===q);)p++;if(p<n&&e.charCodeAt(p)===J){var g=e.slice(a+1,p).trim();return{node:{type:$.htmlSelfClosing,tag:g,attrs:{},a:e.slice(t,p+1),b:!0},end:p+1}}return null}if(!(o>=Z&&o<=Q||o>=Uv&&o<=Wv))return null;var _=$y(e,t);if(!_)return null;var v=_.tag,y=v.toLowerCase();if(_.selfClosing||cy(v))return{node:{type:$.htmlSelfClosing,tag:v,attrs:Mb(_.attrs,v,i),a:e.slice(t,_.end),b:!1},end:_.end};var b=Uy.has(y),x=Ib(e.slice(0,n),_.end,v);if(x===-1)return{node:{type:$.htmlSelfClosing,tag:v,attrs:Mb(_.attrs,v,i),a:e.slice(t,_.end),b:!1},end:_.end};var S=Pb(e,`</`+y,x),C=e.slice(_.end,S),w=[];if(b)C.trim()&&(w=[{type:$.text,text:C}]);else{var T=C.trim();if(T){var{inAnchor:E,inline:ee,e:D}=r;y===`a`&&(r.inAnchor=!0),r.e=!1,T.indexOf(`
|
|
655
|
+
|
|
656
|
+
`)!==-1||/^#{1,6}\s/.test(T)?(r.inline=!1,w=mx(T,r,i)):w=fx(T,0,T.length,r,i),r.inAnchor=E,r.inline=ee,r.e=D}}return{node:{type:$.htmlBlock,tag:v,attrs:Mb(_.attrs,v,i),i:_.rawAttrs,children:w,a:void 0,text:C,d:!1,b:!1},end:x}}var ux=200,dx=0;function fx(e,t,n,r,i){if(dx++,dx>ux)return dx--,[{type:$.text,text:e.slice(t,n)}];var a=r.g;r.g=void 0;let o=r;if(i.optimizeForStreaming){let r=function(e,t){for(var n=1,r=t+1;r<e.length;r++){var i=e.charCodeAt(r);if(i===rv)n++;else if(i===pv&&(n--,n===0))return r}return-1},i=e.slice(t,n),a=i;for(var s=0,c=0,l=0,u=0,d=0,f=-1,p=-1,m=-1,h=-1,g=-1,_=0;_<i.length;_++){var v=i.charCodeAt(_);v===lv?_+1<i.length&&i.charCodeAt(_+1)===lv?(s++,f=_,_++):(c++,p=_):v===uv?_+1<i.length&&i.charCodeAt(_+1)===uv?(l++,m=_,_++):(u++,h=_):v===nv&&_+1<i.length&&i.charCodeAt(_+1)===nv&&(d++,g=_,_++)}var y=[];d%2==1&&g>=0&&y.push([g,2]),l%2==1&&m>=0&&y.push([m,2]),u%2==1&&h>=0&&y.push([h,1]),s%2==1&&f>=0&&y.push([f,2]),c%2==1&&p>=0&&y.push([p,1]),y.sort(function(e,t){return t[0]-e[0]});for(var b=0;b<y.length;b++){var x=y[b][0],S=y[b][1];i=i.slice(0,x)+i.slice(x+S)}let o=0,le=-1;for(let e=0;e<i.length;e++)i.charCodeAt(e)===tv&&(o++,le=e);if(o%2==1&&le!==-1){let e=!1,t=-1,n=0;for(;n<i.length;)i.charCodeAt(n)===tv&&(e?(e=!1,t=-1):(t=n,e=!0)),n++;e&&t!==-1&&(i=i.slice(0,t))}for(var C=!0;C;){C=!1;for(var w=-1,T=-1,E=-1,ee=!1,D=0;D<i.length;D++)if(i.charCodeAt(D)===rv&&(D===0||i.charCodeAt(D-1)!==cv)){var te=D>0&&i.charCodeAt(D-1)===mv,ne=te?D-1:D,re=r(i,D);if(re===-1)w=ne,ee=te,T=D+1,E=i.length;else{var O=re+1;if(O>=i.length)w=ne,ee=te,T=D+1,E=re;else if(i.charCodeAt(O)===Lv){var ie=i.indexOf(`)`,O+1);ie===-1?(w=ne,ee=te,T=D+1,E=re,D=i.length):D=ie}else if(i.charCodeAt(O)===rv){var k=i.indexOf(`]`,O+1);k===-1?(w=ne,ee=te,T=D+1,E=re,D=i.length):D=k}else D=re}}if(w>=0){var ae=ee?``:i.slice(T,E);i=i.slice(0,w)+ae,C=!0}}let ue=i.match(/<([A-Z][A-Za-z0-9]*)(?:\s[^>]*)?>([^<]*)$/);if(ue&&ue.index!==void 0){var oe=ue[0].length-ue[2].length;if(!(oe>=2&&ue[0].charCodeAt(oe-2)===Av)){for(var A=!1,se=0,ce=0;ce<ue.index;ce++)i.charCodeAt(ce)===tv&&se++;if(A=se%2==1,!A){let e=ue[1];Nb(i,`</`+e,0)===-1&&(i=i.slice(0,ue.index)+ue[2])}}}i!==a&&(e=e.slice(0,t)+i,n=t+i.length)}let le=[];var ue=[];let j=t;var de=``,M=i.disableAutoLink||i.disableBareUrls||o.inAnchor?-1:e.indexOf(`@`,t);for(M>=n&&(M=-1);t<n;){let r=e.charCodeAt(t),a=null;if(r===tv){if(a=Gb(e,t,n),!a){var fe=hb(e,t,n,tv);t+=fe-1}}else if(r===lv||r===uv){var pe=Qb(e,t,n);if(pe){if(pe.canOpen||pe.canClose){(de||t>j)&&(le.push(sx(de+e.slice(j,t))),de=``);var N=sx(e.slice(t,t+pe.len));ue.push({idx:le.length,ch:r,len:pe.len,canOpen:pe.canOpen,canClose:pe.canClose,active:!0}),le.push(N),t+=pe.len,j=t;continue}t+=pe.len-1}}else if(r===nv)a=Jb(e,t,n,o,i);else if(r===sv)a=Yb(e,t,n,o,i);else if(r===rv)t+1<n&&e.charCodeAt(t+1)===iv&&(a=nx(e,t,n,o)),a||=ex(e,t,n,o,i);else if(r===mv&&t+1<n&&e.charCodeAt(t+1)===rv)a=ex(e,t,n,o,i);else if(r===dv)a=tx(e,t,n),!a&&!i.disableParsingRawHTML&&!i.ignoreHTMLBlocks&&(a=lx(e,t,n,o,i));else if(r===hv){var me=cx(e,t,n);if(me!==-1){var he=e.slice(t,me),P=$v(he);if(P!==he){de=de+e.slice(j,t)+P,t=me,j=me;continue}}}else if((r===yv||r===bv||r===vv)&&!o.inAnchor&&!i.disableAutoLink&&(t===0||e.charCodeAt(t-1)!==dv)){var ge=t+1<n?e.charCodeAt(t+1):0;(r===yv&&ge===xv||r===vv&&ge===xv||r===bv&&ge===bv)&&(a=rx(e,t,n,i))}if(!a&&M>=0&&M-t<=64&&!o.inAnchor&&!i.disableAutoLink&&!i.disableBareUrls&&(r>=Z&&r<=Q||r>=Uv&&r<=Wv||r>=X&&r<=Hv)&&(a=ix(e,t,n,i),!a&&t>=M&&(M=e.indexOf(`@`,t+1),M>=n&&(M=-1))),r===q&&o.e){var _e=!1,ve=0;if(t>j&&e.charCodeAt(t-1)===cv)_e=!0,ve=1;else{for(var ye=0,be=t-1;be>=j&&e.charCodeAt(be)===G;)ye++,be--;ye>=2&&(_e=!0,ve=ye)}if(_e){for((de||t-ve>j)&&(le.push(sx(de+e.slice(j,t-ve))),de=``),le.push({type:$.breakLine}),t++;t<n&&e.charCodeAt(t)===G;)t++;j=t;continue}var xe=t>j&&e.charCodeAt(t-1)===G,Se=t+1<n&&e.charCodeAt(t+1)===G;if(xe||Se){for(var Ce=t;Ce>j&&e.charCodeAt(Ce-1)===G;)Ce--;for(de+=e.slice(j,Ce)+`
|
|
657
|
+
`,t++;t<n&&e.charCodeAt(t)===G;)t++;j=t;continue}}if(a)(de||t>j)&&(le.push(sx(de+e.slice(j,t))),de=``),le.push(a.node),t=a.end,j=t;else{if(r===cv&&t+1<n&&ob(e.charCodeAt(t+1))&dy){(de||t>j)&&(le.push(sx(de+e.slice(j,t))),de=``),le.push(sx(e[t+1])),t+=2,j=t;continue}if(t++,M<0||M-t>64)for(;t<n&&!(M>=0&&M-t<=64);){var we=e.charCodeAt(t);if(we<Gv&&!Jy[we])t++;else break}}}return(de||n>j)&&(le.push(sx(de+e.slice(j,n))),de=``),ue.length>0&&$b(le,ue,r,i),r.g=a,dx--,le}var px=500;function mx(e,t,n){var r=t.j||0;if(r>px)return[{type:$.text,text:e}];if(t.j=r+1,n.optimizeForStreaming&&!t.m){var i=e.length;i>0&&e.charCodeAt(i-1)===q&&i--;for(var a=i;a>0&&e.charCodeAt(a-1)!==q;)a--;if(a>0&&e.charCodeAt(a)===Pv){for(var o=!0,s=a;s<i;s++){var c=e.charCodeAt(s);if(c!==G&&c!==K&&c!==Y&&c!==gv&&c!==Pv){o=!1;break}}if(o){for(var l=a-1;l>0&&e.charCodeAt(l-1)!==q;)l--;e.charCodeAt(l)===Pv&&(e=e.slice(0,l).trimEnd())}}var u=e.trim(),d=u.lastIndexOf(`
|
|
658
|
+
`),f=d===-1?u:u.slice(d+1);if(f.length>0&&f.charCodeAt(0)===Pv){for(var p=!1,m=!1,h=1;h<f.length;h++){var g=f.charCodeAt(h);g===Pv&&(p=!0),g===Y&&(m=!0)}p&&m&&(e=d===-1?``:e.slice(0,e.lastIndexOf(f)).trimEnd())}for(var _=-1,v=-1,y=-1,b=e.length-1;b>=0;b--)if(e.charCodeAt(b)===dv){var x=b+1<e.length?e.charCodeAt(b+1):0;if(x>=Z&&x<=Q||x>=Uv&&x<=Wv){for(var S=b+2;S<e.length;){var C=e.charCodeAt(S);if(C>=Z&&C<=Q||C>=Uv&&C<=Wv||C>=X&&C<=Hv)S++;else break}for(var w=S;w<e.length&&e.charCodeAt(w)!==J;)w++;if(w<e.length&&e.charCodeAt(w-1)!==Av){for(var T=!1,E=w+1;E<e.length;E++)if(e.charCodeAt(E)===dv){T=!0;break}T||(_=b,v=S,y=w+1)}}break}if(_>=0){for(var ee=0,D=0;D<_;D++)e.charCodeAt(D)===tv&&ee++;if(ee%2==0){var te=e.slice(_+1,v);Nb(e,`</`+te,0)===-1&&(e=e.slice(0,_)+e.slice(y))}}for(var ne=e.length;ne>0&&e.charCodeAt(ne-1)===q;)ne--;if(ne>0){for(var re=ne;re>0&&e.charCodeAt(re-1)!==q;)re--;for(var O=re,ie=0;O<ne&&e.charCodeAt(O)===G&&ie<3;)O++,ie++;if(re>0&&O<ne&&xb(e,O,ne)){for(var k=re-1,ae=k;ae>0&&e.charCodeAt(ae-1)!==q;)ae--;yb(e,ae,k)||(e=e.slice(0,re).trimEnd())}}var oe=e.length;if(oe>0){for(var A=e.lastIndexOf(`
|
|
659
|
+
`),se=A===-1?0:A+1,ce=oe,le=se,ue=0;le<ce&&e.charCodeAt(le)===G&&ue<3;)le++,ue++;if(le<ce){var j=e.charCodeAt(le),de=!1;if(j===lv||j===Y||j===Nv){var M=le+1;if(M>=ce||e.charCodeAt(M)===G||e.charCodeAt(M)===K){for(var fe=M;fe<ce&&(e.charCodeAt(fe)===G||e.charCodeAt(fe)===K);)fe++;fe>=ce&&(de=!0)}}else if(j>=X&&j<=Hv){for(var pe=le;pe<ce&&e.charCodeAt(pe)>=X&&e.charCodeAt(pe)<=Hv;)pe++;if(pe<ce&&(e.charCodeAt(pe)===kv||e.charCodeAt(pe)===Rv)){var N=pe+1;if(N>=ce||e.charCodeAt(N)===G||e.charCodeAt(N)===K){for(var me=N;me<ce&&(e.charCodeAt(me)===G||e.charCodeAt(me)===K);)me++;me>=ce&&(de=!0)}}}de&&(e=e.slice(0,se).trimEnd())}}}if(t.inline)return fx(e,0,e.length,t,n);let he=[],P=0,ge=e.length;if(P===0&&!n.disableFrontmatter&&e.startsWith(`---`)){let t=qv(e);if(t&&t.hasValidYaml){if(n.preserveFrontmatter!==!1){let n=e.slice(0,t.endPos).trimEnd();he.push({type:$.frontmatter,text:n})}P=t.endPos}}for(;P<ge;){for(var _e=e.indexOf(`
|
|
660
|
+
`,P),ve=_e<0?ge:_e;P<ge&&yb(e,P,ve);)P=ve<ge?ve+1:ve,P<ge&&(_e=e.indexOf(`
|
|
661
|
+
`,P),ve=_e<0?ge:_e);if(P>=ge)break;var ye=e.charCodeAt(P)===Vv;vb(e,P,ve);let r=null;if(cb=e,lb=P,ub=ve,!ye&&gb>=4&&!t.inHTML)r=wb(e,P);else if(!ye){let i=P+_b,a=e.charCodeAt(i);a===av?r=bb(e,P,t,n):a===J?r=Tb(e,P,t,n):a===tv||a===nv?r=Cb(e,P,t):a===Y||a===lv||a===uv?(r=Sb(e,P),!r&&(r=Ab(e,P,t,n))):a===Nv||a>=X&&a<=Hv?r=Ab(e,P,t,n):a===dv?r=Lb(e,P,t,n):a===Pv?r=Bb(e,P,t,n):a===rv&&(r=Vb(e,P,t))}if(!r){for(var be=!1,xe=P;xe<ve;xe++)if(e.charCodeAt(xe)===Pv){be=!0;break}be&&(r=Bb(e,P,t,n))}if(r||=Ub(e,P,t,n),r)r.node.type!==$.refCollection&&he.push(r.node),P=r.end;else{var Se=e.indexOf(`
|
|
662
|
+
`,P);P=Se<0?ge:Se+1}}return t.j=r,he}function hx(e,t,n,r){var i=$y(e,t);return i?{tagName:i.tag,tagLower:i.tag.toLowerCase(),attrs:i.rawAttrs,whitespaceBeforeAttrs:i.whitespaceBeforeAttrs,isSelfClosing:i.selfClosing,hasSpaceBeforeSlash:i.hasSpaceBeforeSlash,isClosing:i.isClosing,hasNewline:i.whitespaceBeforeAttrs.includes(`
|
|
663
|
+
`)||i.rawAttrs.includes(`
|
|
664
|
+
`),endPos:i.end}:null}function gx(e,t,n){dx=0,e=by(e),!t.refs&&(t.refs={}),(n.optimizeForStreaming||t.inline)&&(t.m=eb(e,t.refs,n));var r=!t.k;r&&(t.k=[],t.h=[]);let i=mx(e,t,n);if(r){for(var a=t.k,o={inline:t.inline,inAnchor:t.inAnchor,inHTML:t.inHTML,htmlDepth:t.c,inList:t.inList,inBlockQuote:t.inBlockQuote,noSetext:t.f,depth:t.j},s=0;s<a.length;s++){var c=a[s];t.inline=c.inline,t.inAnchor=c.inAnchor,t.inHTML=c.inHTML,t.c=c.htmlDepth,t.inList=c.inList,t.inBlockQuote=c.inBlockQuote,t.f=c.noSetext,t.j=c.depth,t.e=c.breaks;var l=fx(c.text,0,c.text.length,t,n);t.e=!1;for(var u=0;u<l.length;u++)c.dest.push(l[u])}t.inline=o.inline,t.inAnchor=o.inAnchor,t.inHTML=o.inHTML,t.c=o.htmlDepth,t.inList=o.inList,t.inBlockQuote=o.inBlockQuote,t.f=o.noSetext,t.j=o.depth;for(var d=t.h,f=0;f<d.length;f++)for(var p=d[f],m=0;m<p.src.length;m++){var h=p.src[m];if(p.unwrap&&h.type===$.paragraph)for(var g=h.children,_=0;_<g.length;_++)p.dest.push(g[_]);else p.dest.push(h)}t.k=void 0,t.h=void 0}return Sy(t.refs)?[{type:$.refCollection,refs:t.refs},...i]:i}var _x;try{_x=h.createElement(`div`).$$typeof}catch{_x=Symbol.for(`react.transitional.element`)}function vx(e,t,n){return{$$typeof:_x,type:e,key:n==null?null:``+n,ref:null,props:t,_owner:null,_store:{},_debugStack:null,_debugTask:null}}var yx=typeof h.createContext<`u`?h.createContext(void 0):void 0;function bx(e,t,n,r,i,a,o,s,c){switch(e.type){case $.blockQuote:{let i={key:n.key};return e.alert&&(i.className=`markdown-alert-`+a(e.alert.toLowerCase(),ay),e.children.unshift(Cy(e.alert))),r(`blockquote`,i,t(e.children,n))}case $.breakLine:return r(`br`,{key:n.key});case $.breakThematic:return r(`hr`,{key:n.key});case $.frontmatter:return s.preserveFrontmatter?r(`pre`,{key:n.key},e.text):null;case $.codeBlock:let f=e.lang?$v(e.lang):``;return r(`pre`,{key:n.key},r(`code`,{...Zv(e.attrs),className:f?`language-${f} lang-${f}`:``},e.text));case $.codeInline:return r(`code`,{key:n.key},e.text);case $.footnoteReference:return r(`a`,{key:n.key,href:i(e.target,`a`,`href`)||void 0},r(`sup`,null,e.text));case $.gfmTask:return r(`input`,{checked:e.completed,key:n.key,readOnly:!0,type:`checkbox`});case $.heading:return r(`h${e.level}`,{id:e.id,key:n.key},t(e.children,n));case $.htmlBlock:{let f=e;if(s.tagfilter&&Ly(f.tag))return r(`span`,{key:n.key},`<`+f.tag+Ay(f.attrs)+`>`);if(f.a&&f.d){let r=f.tag.toLowerCase(),p=Xy(r),m=f.children&&f.children.length>0;if(p){let t=ky(f.a,r,s.tagfilter);return/<[a-z][^>]{0,100}>/i.test(f.a)?c(e.tag,{key:n.key,...Zv(e.attrs),dangerouslySetInnerHTML:{__html:t}}):c(e.tag,{key:n.key,...Zv(e.attrs)},t)}let g=RegExp(`^<${f.tag}(\\s|>)`,`i`);if(m&&!g.test(f.a)&&s.tagfilter&&Ry(f.a))return c(e.tag,{key:n.key,...Zv(e.attrs)},t(f.children,n));if(Zy(f.a)){let t=s.tagfilter?zy(f.a):f.a;return c(e.tag,{key:n.key,...Zv(e.attrs),dangerouslySetInnerHTML:{__html:t}})}let _={slugify:e=>a(e,ay),sanitizer:i,tagfilter:!0},v=f.a.replace(/>\s+</g,`><`).replace(/\n+/g,` `).trim();if(RegExp(`^<${f.tag}(\\s[^>]*)?>(\\s*</${f.tag}>)?$`,`i`).test(v))return f.children&&f.children.length>0?c(e.tag,{key:n.key,...Zv(e.attrs)},t(f.children,n)):c(e.tag,{key:n.key,...Zv(e.attrs)});let y=gx(v,{inline:!1,refs:o,inHTML:!1},_);Dy(y);let b=f.tag.toLowerCase(),x=`</`+b+`>`,S=g.test(v),C=v.toLowerCase().trimEnd().endsWith(x),w=S&&C;if(w&&m)return c(e.tag,{key:n.key,...Zv(e.attrs)},t(f.children,n));if(w)return t(y.flatMap(Ey),n);var l=Oy(y,b);if(l.found&&l.afterClose.length>0){var u=l.beforeClose.flatMap(Ey),d=l.afterClose.flatMap(Ey);return vx(h.Fragment,{children:[c(e.tag,{key:n.key,...Zv(e.attrs)},t(u,n)),t(d,n)]},n.key)}return c(e.tag,{key:n.key,...Zv(e.attrs)},t(y.flatMap(Ey),n))}return cy(e.tag)?c(e.tag,{key:n.key,...Zv(e.attrs)}):c(e.tag,{key:n.key,...Zv(e.attrs)},e.children?t(e.children,n):``)}case $.htmlSelfClosing:{let t=e;return s.tagfilter&&Ly(t.tag)?r(`span`,{key:n.key},`<`+t.tag+Ay(t.attrs)+` />`):c(e.tag,{key:n.key,...Zv(e.attrs)})}case $.image:{let t=e.target==null?null:i(e.target,`img`,`src`);return r(`img`,{key:n.key,alt:e.alt&&e.alt.length>0?e.alt:void 0,title:e.title||void 0,src:t||void 0})}case $.link:{let i={key:n.key};return e.target!=null&&(i.href=Ny(e.target)),e.title&&(i.title=e.title),r(`a`,i,t(e.children,n))}case $.table:{let i=e;return r(`table`,{key:n.key},r(`thead`,{key:`thead`},r(`tr`,null,i.header.map(function(e,a){return r(`th`,{key:a,style:i.align[a]==null?{}:{textAlign:i.align[a]}},t(e,n))}))),i.cells.length>0&&r(`tbody`,{key:`tbody`},i.cells.map(function(e,a){return r(`tr`,{key:a},e.map(function(e,a){return r(`td`,{key:a,style:i.align[a]==null?{}:{textAlign:i.align[a]}},t(e,n))}))})))}case $.text:return e.text;case $.textFormatted:return r(e.tag,{key:n.key},t(e.children,n));case $.orderedList:case $.unorderedList:return r(e.type===$.orderedList?`ol`:`ul`,{key:n.key,start:e.type===$.orderedList?e.start:void 0},e.items.map(function(e,i){return r(`li`,{key:i},t(e,n))}));case $.paragraph:return r(`p`,{key:n.key},t(e.children,n));case $.ref:return null;default:return null}}var xx=(e,t,n,r,i,a,o)=>{var s=e=>e.map(function(e){return`text`in e?e.text:``}),c=(l,u={})=>{var d=(u.renderDepth||0)+1;if(d>2500)return s(l);u.renderDepth=d;for(var f=u.key,p=[],m=!1,h=0;h<l.length;h++){u.key=h;var g=e?e(bx.bind(null,l[h],c,u,t,n,r,i,a,o),l[h],c,u):bx(l[h],c,u,t,n,r,i,a,o),_=typeof g==`string`;if(_&&m)p[p.length-1]+=g;else if(g!==null)if(Array.isArray(g))for(var v=0;v<g.length;v++)p.push(g[v]);else p.push(g);m=_}return u.key=f,u.renderDepth=d-1,p};return c},Sx=(e,t)=>{let n=My(t,e,void 0);return n?typeof n==`function`||typeof n==`object`&&`render`in n?n:My(t,`${e}.component`,e):e};function Cx(e,t){let n={...t||{}};n.overrides=n.overrides||{};let r=n.slugify||ay,i=n.sanitizer||ty,a=n.createElement,o=Sy(n.overrides),s=e=>wx(e,{...n,wrapper:null});function c(e){for(var t in e){var n=e[t];if(typeof n==`string`&&n.length>0&&n.charCodeAt(0)===dv&&(By.test(n)||Vy.test(n)||hx(n,0))){var r=s(n.trim());e[t]=t===`innerHTML`&&Array.isArray(r)?r[0]:r}}}function l(e,t,...r){var i=t||{},s=e;if(o){var c=My(n.overrides,e+`.props`,{});s=Sx(e,n.overrides),i={...i,...c,className:Py(i.className,c.className)||void 0}}if(!a){var l=i.key;return l!=null&&delete i.key,r.length===1?i.children=r[0]:r.length>1&&(i.children=r),vx(s,i,l)}return a(s,i,...r)}function u(e,t,...n){return t&&c(t),l(e,t,...n)}let d={...n,slugify:n.slugify?e=>n.slugify(e,ay):ay,sanitizer:i,tagfilter:n.tagfilter!==!1},f=e[0]&&e[0].type===$.refCollection?e[0].refs:{},p=xx(n.renderRule,l,i,r,f,n,u),m=p(e,{inline:n.forceInline,refs:f}),h=jy(f);if(h.length&&m.push(l(`footer`,{key:`footer`},h.map(function(e){let t=e.identifier.charCodeAt(0)===iv?e.identifier.slice(1):e.identifier,n=gx(e.footnote,{inline:!0,refs:f},d);return l(`div`,{id:r(t,ay),key:e.identifier},t+`: `,p(n,{inline:!0,refs:f}))}))),n.wrapper===null)return m;let g=n.wrapper||(n.forceInline?`span`:`div`),_;if(m.length>1||n.forceWrapper)_=m;else return m.length===1?m[0]:null;var v=n.wrapperProps?{...n.wrapperProps}:{};return v.children=_,vx(g,v,`outer`)}function wx(e=``,t={}){let n={...t||{}};n.overrides=n.overrides||{},n.slugify;let r=n.sanitizer||ty;function i(e){let t=n.forceInline||!n.forceBlock&&!Qv.test(e),i={...n,slugify:n.slugify?e=>n.slugify(e,ay):ay,sanitizer:r,tagfilter:n.tagfilter!==!1},o=t?e:Ty(e);if(n.optimizeForStreaming){var s=o.lastIndexOf(`<`);s!==-1&&o.indexOf(`>`,s)===-1&&(o=o.slice(0,s))}return Cx(gx(o,{inline:t,refs:a},i),{...i,forceInline:t})}let a={};return i(e)}function Tx(e){let t=h.useRef(e),n=t.current;if(n!==e){var r=!0,i=0;for(var a in e)if(i++,!Object.is(n[a],e[a])){r=!1;break}if(r){var o=0;for(var s in n)o++;r=o===i}r||(t.current=e)}return t.current}var Ex=({children:e,options:t,...n})=>{if(!(typeof h.useContext<`u`)){let r={...t,overrides:{...t?.overrides},wrapperProps:{...t?.wrapperProps,...n}};return wx(e??``,r)}let r=h.useContext(yx),i=Tx(n),a=h.useMemo(()=>({...r,...t,overrides:{...r?.overrides,...t?.overrides},wrapperProps:{...r?.wrapperProps,...t?.wrapperProps,...i}}),[r,t,i]),o=e??``;return h.useMemo(()=>wx(o,a),[o,a])},Dx={forceBlock:!0,overrides:{a:{component:({children:e,...t})=>(0,z.jsx)(`a`,{...t,target:`_blank`,rel:`noopener noreferrer`,children:e})}}};function Ox({text:e}){return(0,z.jsx)(`div`,{className:`zai-md`,children:(0,z.jsx)(Ex,{options:Dx,children:e})})}var kx=[`what's going on?`,`what's moving today?`,`summarize the market for me`,`what should I be watching?`,`explain my dashboard`],Ax=[`day-stats`,`ohlcv`,`quote-stream`],jx=[{caps:Ax,text:e=>e?`what's moving in ${e}?`:`what's moving today?`},{caps:[`funding-history`],text:()=>`how's funding looking?`},{caps:[`open-interest`],text:()=>`where's open interest building?`},{caps:[`sentiment`],text:()=>`is it fear or greed right now?`},{caps:[`coin-movers`,`coin-markets`],text:()=>`what are today's biggest movers?`},{caps:[`global-market`],text:()=>`how's the total market cap?`},{caps:[`tvl`,`protocol-tvl`,`dex-volume`,`protocol-fees`],text:()=>`which chains are gaining TVL?`},{caps:[`news`],text:()=>`any headlines I should see?`},{caps:[`btc-fees`,`btc-mempool`,`btc-blocks`,`btc-difficulty`,`mining-pools`,`lightning-stats`],text:()=>`how busy is the Bitcoin network?`},{caps:[`yield-curve`,`reference-rates`],text:()=>`what's the yield curve saying?`},{caps:[`financial-stress`],text:()=>`any signs of financial stress?`},{caps:[`options-summary`],text:()=>`what's the put/call ratio?`},{caps:[`portfolio`],text:()=>`how's my portfolio doing?`}],Mx=8;function Nx(e,t){for(let n of e.frames){if(!(t.get(n.frame)?.capabilities??[]).some(e=>Ax.includes(e)))continue;let e=n.config??{},r=[];if(typeof e.symbol==`string`&&r.push(e.symbol),Array.isArray(e.symbols))for(let t of e.symbols)typeof t==`string`&&r.push(t);let i=r.find(e=>e&&e!==`*`&&!e.endsWith(`:*`));if(i)return p_(i)}}function Px(e,t){let n=new Set;for(let r of e.frames)for(let e of t.get(r.frame)?.capabilities??[])n.add(e);if(n.size===0)return kx;let r=Nx(e,t),i=[];for(let e of jx)e.caps.some(e=>n.has(e))&&i.push(e.text(e.caps===Ax?r:void 0));let a=[...new Set([...i,...kx])].slice(0,Mx);return a.length?a:kx}var Fx=1,Ix=2,Lx=5,Rx=`effect2`,zx=3600,Bx=320,Vx=38e3,Hx=7200,Ux=130;function Wx(e){return e===503?`No assistant is set up to answer yet — install Claude, Codex, or Kimi.`:e===413?`That question was too long — try a shorter one.`:e>=500?`zAI ran into a problem answering — give it another try.`:e===200?`zAI sent back an unexpected response. If you just updated zframes, restart the server.`:`zAI couldn't answer right now (error ${e}).`}var Gx=`
|
|
665
|
+
/* Focus scrim: opening the orb blurs + dims the dashboard behind so attention
|
|
666
|
+
lands on the conversation. Sits below the orb dock (z 40) and above the
|
|
667
|
+
ticker tape (z 30), so the orb + chat stay sharp while everything else
|
|
668
|
+
recedes. Clicking it dismisses the orb (click-away-to-close).
|
|
669
|
+
|
|
670
|
+
Two stacked gradients give the open state ATMOSPHERE rather than a flat dim:
|
|
671
|
+
(1) a warm violet glow spilling from the orb's corner — the room reads as lit
|
|
672
|
+
by zAI, a glowing source, not just darkened; (2) a deeper, warmer dim toward
|
|
673
|
+
the far corner — a violet-plum near-black (not the old cold blue-black) so the
|
|
674
|
+
room genuinely recedes. The near-orb corner stays clear so the conversation
|
|
675
|
+
sits in the light while everything else falls away. */
|
|
676
|
+
.zai-scrim {
|
|
677
|
+
position: fixed;
|
|
678
|
+
inset: 0;
|
|
679
|
+
z-index: 35;
|
|
680
|
+
opacity: 0;
|
|
681
|
+
pointer-events: none;
|
|
682
|
+
background:
|
|
683
|
+
radial-gradient(
|
|
684
|
+
88% 82% at 100% 100%,
|
|
685
|
+
hsla(268, 82%, 44%, 0.22),
|
|
686
|
+
transparent 56%
|
|
687
|
+
),
|
|
688
|
+
radial-gradient(
|
|
689
|
+
150% 150% at 100% 100%,
|
|
690
|
+
hsla(266, 44%, 7%, 0.12),
|
|
691
|
+
hsla(263, 52%, 4%, 0.74) 78%
|
|
692
|
+
);
|
|
693
|
+
backdrop-filter: blur(0px) saturate(1);
|
|
694
|
+
-webkit-backdrop-filter: blur(0px) saturate(1);
|
|
695
|
+
transition:
|
|
696
|
+
opacity 0.46s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
697
|
+
backdrop-filter 0.46s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
698
|
+
-webkit-backdrop-filter 0.46s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
699
|
+
}
|
|
700
|
+
.zai-scrim[data-open="true"] {
|
|
701
|
+
opacity: 1;
|
|
702
|
+
pointer-events: auto;
|
|
703
|
+
backdrop-filter: blur(2.5px) saturate(1.12);
|
|
704
|
+
-webkit-backdrop-filter: blur(2.5px) saturate(1.12);
|
|
705
|
+
}
|
|
706
|
+
.zai-dock {
|
|
707
|
+
position: fixed;
|
|
708
|
+
right: 18px;
|
|
709
|
+
bottom: 50px;
|
|
710
|
+
z-index: 40;
|
|
711
|
+
display: flex;
|
|
712
|
+
align-items: center;
|
|
713
|
+
gap: 10px;
|
|
714
|
+
font-family: var(--font-dmsans, system-ui, sans-serif);
|
|
715
|
+
}
|
|
716
|
+
.zai-panel {
|
|
717
|
+
display: flex;
|
|
718
|
+
align-items: center;
|
|
719
|
+
width: 0;
|
|
720
|
+
opacity: 0;
|
|
721
|
+
overflow: hidden;
|
|
722
|
+
transition:
|
|
723
|
+
width 0.34s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
724
|
+
opacity 0.22s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
725
|
+
}
|
|
726
|
+
.zai-dock[data-open="true"] .zai-panel {
|
|
727
|
+
width: 330px;
|
|
728
|
+
opacity: 1;
|
|
729
|
+
}
|
|
730
|
+
.zai-input-wrap {
|
|
731
|
+
display: flex;
|
|
732
|
+
align-items: center;
|
|
733
|
+
gap: 8px;
|
|
734
|
+
width: 330px;
|
|
735
|
+
padding: 9px 10px 9px 14px;
|
|
736
|
+
border-radius: 9999px;
|
|
737
|
+
background: rgba(12, 13, 20, 0.72);
|
|
738
|
+
backdrop-filter: blur(12px);
|
|
739
|
+
-webkit-backdrop-filter: blur(12px);
|
|
740
|
+
border: 1px solid hsla(263, 80%, 72%, 0.24);
|
|
741
|
+
/* Negative spread keeps the drop shadow hugging the pill instead of bleeding
|
|
742
|
+
a wide dark halo into the blurred scrim behind it. */
|
|
743
|
+
box-shadow: 0 6px 16px -8px rgba(0, 0, 0, 0.45);
|
|
744
|
+
}
|
|
745
|
+
/* The input and its animated placeholder share one box: the placeholder is an
|
|
746
|
+
absolutely-positioned layer behind the (transparent) input, so the real
|
|
747
|
+
caret/text sit on top while the hint cross-fades underneath. */
|
|
748
|
+
.zai-input-field {
|
|
749
|
+
position: relative;
|
|
750
|
+
flex: 1;
|
|
751
|
+
min-width: 0;
|
|
752
|
+
display: flex;
|
|
753
|
+
align-items: center;
|
|
754
|
+
}
|
|
755
|
+
.zai-input {
|
|
756
|
+
position: relative;
|
|
757
|
+
z-index: 1;
|
|
758
|
+
flex: 1;
|
|
759
|
+
min-width: 0;
|
|
760
|
+
background: transparent;
|
|
761
|
+
border: 0;
|
|
762
|
+
outline: 0;
|
|
763
|
+
color: #e7e9f3;
|
|
764
|
+
font-size: 13px;
|
|
765
|
+
}
|
|
766
|
+
.zai-ph {
|
|
767
|
+
position: absolute;
|
|
768
|
+
left: 0;
|
|
769
|
+
right: 0;
|
|
770
|
+
top: 50%;
|
|
771
|
+
pointer-events: none;
|
|
772
|
+
color: rgba(255, 255, 255, 0.4);
|
|
773
|
+
font-size: 13px;
|
|
774
|
+
white-space: nowrap;
|
|
775
|
+
overflow: hidden;
|
|
776
|
+
text-overflow: ellipsis;
|
|
777
|
+
opacity: 0;
|
|
778
|
+
transform: translateY(-50%) translateY(5px);
|
|
779
|
+
transition:
|
|
780
|
+
opacity ${Bx}ms var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
781
|
+
transform ${Bx}ms var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
782
|
+
}
|
|
783
|
+
.zai-ph[data-show="true"] {
|
|
784
|
+
opacity: 1;
|
|
785
|
+
transform: translateY(-50%) translateY(0);
|
|
786
|
+
}
|
|
787
|
+
/* While thinking, the hint shimmers instead of cycling (overrides opacity). */
|
|
788
|
+
.zai-ph-busy {
|
|
789
|
+
animation: zai-ph-pulse 1.5s ease-in-out infinite;
|
|
790
|
+
}
|
|
791
|
+
@keyframes zai-ph-pulse {
|
|
792
|
+
0%, 100% { opacity: 0.34; }
|
|
793
|
+
50% { opacity: 0.7; }
|
|
794
|
+
}
|
|
795
|
+
.zai-agent {
|
|
796
|
+
flex: none;
|
|
797
|
+
font-size: 10px;
|
|
798
|
+
font-weight: 700;
|
|
799
|
+
letter-spacing: 0.05em;
|
|
800
|
+
text-transform: uppercase;
|
|
801
|
+
color: hsla(263, 85%, 82%, 0.95);
|
|
802
|
+
background: hsla(263, 80%, 60%, 0.16);
|
|
803
|
+
border-radius: 7px;
|
|
804
|
+
padding: 4px 7px;
|
|
805
|
+
cursor: pointer;
|
|
806
|
+
user-select: none;
|
|
807
|
+
white-space: nowrap;
|
|
808
|
+
transition: background 0.15s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
809
|
+
}
|
|
810
|
+
.zai-agent:hover { background: hsla(263, 80%, 60%, 0.28); }
|
|
811
|
+
|
|
812
|
+
/* Idle attention nudge: after a stretch of inactivity the orb floats a single
|
|
813
|
+
tailored suggestion beside itself ("here's something you could ask"), then
|
|
814
|
+
fades it away and re-arms while idle. Clicking it opens the orb prefilled with
|
|
815
|
+
that question. Always in the DOM (so the fade transition plays) and revealed
|
|
816
|
+
by data-nudge on the dock; cleared the moment you hover the orb or open it. */
|
|
817
|
+
.zai-nudge {
|
|
818
|
+
position: absolute;
|
|
819
|
+
right: 72px;
|
|
820
|
+
bottom: 14px;
|
|
821
|
+
max-width: 244px;
|
|
822
|
+
margin: 0;
|
|
823
|
+
padding: 9px 13px;
|
|
824
|
+
border-radius: 14px 14px 4px 14px;
|
|
825
|
+
background: rgba(12, 13, 20, 0.82);
|
|
826
|
+
border: 1px solid hsla(263, 80%, 72%, 0.28);
|
|
827
|
+
backdrop-filter: blur(12px);
|
|
828
|
+
-webkit-backdrop-filter: blur(12px);
|
|
829
|
+
box-shadow: 0 8px 22px -10px rgba(0, 0, 0, 0.55);
|
|
830
|
+
color: #e7e9f3;
|
|
831
|
+
font-family: inherit;
|
|
832
|
+
font-size: 12.5px;
|
|
833
|
+
line-height: 1.4;
|
|
834
|
+
text-align: left;
|
|
835
|
+
cursor: pointer;
|
|
836
|
+
opacity: 0;
|
|
837
|
+
transform: translateX(10px) scale(0.96);
|
|
838
|
+
transform-origin: bottom right;
|
|
839
|
+
pointer-events: none;
|
|
840
|
+
transition:
|
|
841
|
+
opacity 0.32s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
842
|
+
transform 0.32s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
843
|
+
}
|
|
844
|
+
.zai-dock[data-nudge="true"] .zai-nudge {
|
|
845
|
+
opacity: 1;
|
|
846
|
+
transform: translateX(0) scale(1);
|
|
847
|
+
pointer-events: auto;
|
|
848
|
+
}
|
|
849
|
+
.zai-nudge:hover { border-color: hsla(263, 85%, 78%, 0.45); }
|
|
850
|
+
|
|
851
|
+
/* The WebGL orb scene IS the orb — clipped to a circle and faded in once ready.
|
|
852
|
+
The button is just a transparent container; nothing is drawn behind the orb. */
|
|
853
|
+
.zai-orb-canvas {
|
|
854
|
+
position: absolute;
|
|
855
|
+
inset: 0;
|
|
856
|
+
border-radius: 9999px;
|
|
857
|
+
overflow: hidden;
|
|
858
|
+
opacity: 0;
|
|
859
|
+
transform: scale(0.82);
|
|
860
|
+
transition:
|
|
861
|
+
opacity 0.45s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
862
|
+
transform 0.45s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
863
|
+
pointer-events: none;
|
|
864
|
+
}
|
|
865
|
+
/* Wake-in bloom: the first time the WebGL orb is ready it scales up from small
|
|
866
|
+
with a slight overshoot and fades in, so it "boots" into the dock instead of
|
|
867
|
+
just appearing. One-shot (fill: both) — once it settles the orb rests at
|
|
868
|
+
scale 1, where the breathing halo (below) takes over. */
|
|
869
|
+
.zai-orb[data-webgl="true"] .zai-orb-canvas {
|
|
870
|
+
opacity: 1;
|
|
871
|
+
transform: scale(1);
|
|
872
|
+
animation: zai-orb-wake 0.7s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1))
|
|
873
|
+
both;
|
|
874
|
+
}
|
|
875
|
+
@keyframes zai-orb-wake {
|
|
876
|
+
0% { opacity: 0; transform: scale(0.7); }
|
|
877
|
+
60% { opacity: 1; transform: scale(1.06); }
|
|
878
|
+
100% { opacity: 1; transform: scale(1); }
|
|
879
|
+
}
|
|
880
|
+
/* Streaming heartbeat: each burst of answer tokens fires a quick expanding ring
|
|
881
|
+
from the orb, so it visibly "pulses" as it talks. Keyed on a beat counter in
|
|
882
|
+
JS (throttled), so each increment remounts the element and replays the
|
|
883
|
+
one-shot ring. */
|
|
884
|
+
.zai-orb-beat {
|
|
885
|
+
position: absolute;
|
|
886
|
+
inset: 0;
|
|
887
|
+
border-radius: 9999px;
|
|
888
|
+
border: 2px solid hsla(263, 92%, 80%, 0.6);
|
|
889
|
+
pointer-events: none;
|
|
890
|
+
animation: zai-orb-beat 0.52s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1))
|
|
891
|
+
forwards;
|
|
892
|
+
}
|
|
893
|
+
@keyframes zai-orb-beat {
|
|
894
|
+
from { opacity: 0.65; transform: scale(0.92); }
|
|
895
|
+
to { opacity: 0; transform: scale(1.55); }
|
|
896
|
+
}
|
|
897
|
+
.zai-orb-canvas canvas {
|
|
898
|
+
width: 100% !important;
|
|
899
|
+
height: 100% !important;
|
|
900
|
+
display: block;
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
.zai-orb {
|
|
904
|
+
position: relative;
|
|
905
|
+
width: 60px;
|
|
906
|
+
height: 60px;
|
|
907
|
+
flex: none;
|
|
908
|
+
padding: 0;
|
|
909
|
+
border: 0;
|
|
910
|
+
border-radius: 9999px;
|
|
911
|
+
cursor: pointer;
|
|
912
|
+
background: transparent;
|
|
913
|
+
transition: transform 0.2s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
914
|
+
}
|
|
915
|
+
.zai-orb:hover { transform: scale(1.06); }
|
|
916
|
+
/* Press lands instantly (transition-duration:0s), then eases back to the hover
|
|
917
|
+
scale on release — snappy click, smooth settle. */
|
|
918
|
+
.zai-orb:active { transform: scale(0.97); transition-duration: 0s; }
|
|
919
|
+
/* Breathing halo: a soft violet aura ringing the resting orb, slowly pulsing so
|
|
920
|
+
the idle orb reads as alive (a slow breath) rather than a static button. It's
|
|
921
|
+
a ::before behind the canvas, inset negative so only the glow ring past the
|
|
922
|
+
orb edge shows. Boosted on hover, faster + brighter while thinking. */
|
|
923
|
+
.zai-orb::before {
|
|
924
|
+
content: "";
|
|
925
|
+
position: absolute;
|
|
926
|
+
inset: -7px;
|
|
927
|
+
border-radius: 9999px;
|
|
928
|
+
background: radial-gradient(
|
|
929
|
+
circle,
|
|
930
|
+
hsla(263, 92%, 72%, 0.55),
|
|
931
|
+
hsla(263, 90%, 60%, 0.12) 60%,
|
|
932
|
+
transparent 72%
|
|
933
|
+
);
|
|
934
|
+
filter: blur(7px);
|
|
935
|
+
opacity: 0;
|
|
936
|
+
z-index: -1;
|
|
937
|
+
pointer-events: none;
|
|
938
|
+
transition:
|
|
939
|
+
opacity 0.3s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
|
|
940
|
+
transform 0.3s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
941
|
+
}
|
|
942
|
+
.zai-orb[data-webgl="true"]::before,
|
|
943
|
+
.zai-orb[data-fallback="true"]::before {
|
|
944
|
+
animation: zai-orb-breathe 4.5s ease-in-out infinite;
|
|
945
|
+
}
|
|
946
|
+
@keyframes zai-orb-breathe {
|
|
947
|
+
0%, 100% { opacity: 0.28; transform: scale(1); }
|
|
948
|
+
50% { opacity: 0.55; transform: scale(1.12); }
|
|
949
|
+
}
|
|
950
|
+
/* Hover anticipation: the aura firms up + brightens (the scene also speeds up,
|
|
951
|
+
handled in JS) so the orb "leans in" before you click. */
|
|
952
|
+
.zai-orb:hover::before {
|
|
953
|
+
animation: none;
|
|
954
|
+
opacity: 0.72;
|
|
955
|
+
transform: scale(1.16);
|
|
956
|
+
}
|
|
957
|
+
/* While zAI is thinking the halo pulses faster + brighter — the orb visibly
|
|
958
|
+
works, matching the sped-up scene and the background coming alive. Placed
|
|
959
|
+
after the hover rule so it wins when both apply. */
|
|
960
|
+
.zai-dock[data-busy="true"] .zai-orb::before {
|
|
961
|
+
animation: zai-orb-breathe 1.4s ease-in-out infinite;
|
|
962
|
+
background: radial-gradient(
|
|
963
|
+
circle,
|
|
964
|
+
hsla(263, 95%, 76%, 0.72),
|
|
965
|
+
hsla(263, 92%, 62%, 0.16) 60%,
|
|
966
|
+
transparent 72%
|
|
967
|
+
);
|
|
968
|
+
}
|
|
969
|
+
/* Minimal fallback gradient, shown only if the WebGL scene fails to load, so
|
|
970
|
+
the orb stays visible + clickable instead of being an invisible button. */
|
|
971
|
+
.zai-orb[data-fallback="true"] {
|
|
972
|
+
background:
|
|
973
|
+
radial-gradient(circle at 34% 28%, hsla(263, 95%, 86%, 0.95), transparent 45%),
|
|
974
|
+
radial-gradient(circle at 62% 70%, #7a17e0 0%, #4a0a92 55%, #2c0560 100%);
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
.zai-history {
|
|
978
|
+
position: absolute;
|
|
979
|
+
right: 70px;
|
|
980
|
+
bottom: 72px;
|
|
981
|
+
width: 344px;
|
|
982
|
+
display: flex;
|
|
983
|
+
flex-direction: column;
|
|
984
|
+
gap: 8px;
|
|
985
|
+
max-height: 52vh;
|
|
986
|
+
overflow-y: auto;
|
|
987
|
+
overscroll-behavior: contain;
|
|
988
|
+
pointer-events: auto;
|
|
989
|
+
scrollbar-width: none;
|
|
990
|
+
}
|
|
991
|
+
.zai-history::-webkit-scrollbar {
|
|
992
|
+
display: none;
|
|
993
|
+
}
|
|
994
|
+
/* The top fade is a "more above" affordance — only painted once the thread has
|
|
995
|
+
scrolled up off the top. Applying it unconditionally clipped the top edge of
|
|
996
|
+
even a single short chip, so it's gated on scroll position (see onScroll). */
|
|
997
|
+
.zai-history[data-masked="true"] {
|
|
998
|
+
-webkit-mask-image: linear-gradient(180deg, transparent, #000 16%);
|
|
999
|
+
mask-image: linear-gradient(180deg, transparent, #000 16%);
|
|
1000
|
+
}
|
|
1001
|
+
/* Bottom-pin short threads (the conversation floats just above the input):
|
|
1002
|
+
margin-top:auto on the first chip pushes the group down while there's slack,
|
|
1003
|
+
then yields to scrolling once the thread outgrows max-height — so a long
|
|
1004
|
+
answer scrolls up instead of hard-clipping the oldest message off the top. */
|
|
1005
|
+
.zai-history > :first-child {
|
|
1006
|
+
margin-top: auto;
|
|
1007
|
+
}
|
|
1008
|
+
.zai-msg {
|
|
1009
|
+
width: fit-content;
|
|
1010
|
+
max-width: 100%;
|
|
1011
|
+
padding: 8px 12px;
|
|
1012
|
+
border-radius: 14px;
|
|
1013
|
+
font-size: 13px;
|
|
1014
|
+
line-height: 1.45;
|
|
1015
|
+
white-space: pre-wrap;
|
|
1016
|
+
word-break: break-word;
|
|
1017
|
+
backdrop-filter: blur(10px);
|
|
1018
|
+
-webkit-backdrop-filter: blur(10px);
|
|
1019
|
+
animation: zai-rise 0.28s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1)) both;
|
|
1020
|
+
}
|
|
1021
|
+
.zai-msg-user {
|
|
1022
|
+
align-self: flex-end;
|
|
1023
|
+
background: hsla(263, 70%, 55%, 0.28);
|
|
1024
|
+
border: 1px solid hsla(263, 80%, 75%, 0.3);
|
|
1025
|
+
color: #f0ecff;
|
|
1026
|
+
}
|
|
1027
|
+
.zai-msg-zai {
|
|
1028
|
+
align-self: flex-start;
|
|
1029
|
+
background: rgba(12, 13, 20, 0.66);
|
|
1030
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
1031
|
+
color: #dfe3ef;
|
|
1032
|
+
}
|
|
1033
|
+
.zai-msg-error {
|
|
1034
|
+
color: #ffb4bd;
|
|
1035
|
+
border-color: rgba(255, 107, 129, 0.4);
|
|
1036
|
+
}
|
|
1037
|
+
/* Markdown-rendered zAI answers. The chip's own pre-wrap is meant for plain
|
|
1038
|
+
text; inside .zai-md we let block elements control layout instead, and trim
|
|
1039
|
+
the outer margins so the bubble hugs its content. */
|
|
1040
|
+
.zai-md {
|
|
1041
|
+
white-space: normal;
|
|
1042
|
+
}
|
|
1043
|
+
.zai-md > :first-child {
|
|
1044
|
+
margin-top: 0;
|
|
1045
|
+
}
|
|
1046
|
+
.zai-md > :last-child {
|
|
1047
|
+
margin-bottom: 0;
|
|
1048
|
+
}
|
|
1049
|
+
.zai-md p {
|
|
1050
|
+
margin: 0 0 0.5em;
|
|
1051
|
+
}
|
|
1052
|
+
.zai-md a {
|
|
1053
|
+
color: hsla(263, 85%, 82%, 0.95);
|
|
1054
|
+
text-decoration: underline;
|
|
1055
|
+
text-underline-offset: 2px;
|
|
1056
|
+
word-break: break-word;
|
|
1057
|
+
transition: color 0.15s var(--zf-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
|
|
1058
|
+
}
|
|
1059
|
+
.zai-md a:hover {
|
|
1060
|
+
color: #fff;
|
|
1061
|
+
}
|
|
1062
|
+
.zai-md ul,
|
|
1063
|
+
.zai-md ol {
|
|
1064
|
+
margin: 0.35em 0;
|
|
1065
|
+
padding-left: 1.2em;
|
|
1066
|
+
}
|
|
1067
|
+
.zai-md li {
|
|
1068
|
+
margin: 0.15em 0;
|
|
1069
|
+
}
|
|
1070
|
+
.zai-md code {
|
|
1071
|
+
font-family: var(--font-mono, ui-monospace, "SF Mono", monospace);
|
|
1072
|
+
font-size: 0.92em;
|
|
1073
|
+
background: rgba(255, 255, 255, 0.1);
|
|
1074
|
+
padding: 0.1em 0.35em;
|
|
1075
|
+
border-radius: 5px;
|
|
1076
|
+
}
|
|
1077
|
+
.zai-md strong {
|
|
1078
|
+
font-weight: 600;
|
|
1079
|
+
color: #f0ecff;
|
|
1080
|
+
}
|
|
1081
|
+
@keyframes zai-rise {
|
|
1082
|
+
from { opacity: 0; transform: translateY(6px); }
|
|
1083
|
+
to { opacity: 1; transform: translateY(0); }
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1087
|
+
.zai-msg { animation: none; }
|
|
1088
|
+
.zai-panel { transition: none; }
|
|
1089
|
+
.zai-ph { transition: opacity 0.15s linear; transform: translateY(-50%); }
|
|
1090
|
+
.zai-ph[data-show="true"] { transform: translateY(-50%); }
|
|
1091
|
+
.zai-ph-busy { animation: none; opacity: 0.5; }
|
|
1092
|
+
.zai-scrim { transition: opacity 0.2s linear; }
|
|
1093
|
+
/* Orb aliveness: keep the presence (a static glow, the nudge chip) but drop
|
|
1094
|
+
the motion — no breathing, wake bloom, hover lean, or heartbeat ring. */
|
|
1095
|
+
.zai-orb::before,
|
|
1096
|
+
.zai-orb[data-webgl="true"]::before,
|
|
1097
|
+
.zai-orb[data-fallback="true"]::before,
|
|
1098
|
+
.zai-dock[data-busy="true"] .zai-orb::before { animation: none; opacity: 0.4; transform: none; }
|
|
1099
|
+
.zai-orb:hover::before { opacity: 0.55; transform: none; }
|
|
1100
|
+
.zai-orb[data-webgl="true"] .zai-orb-canvas { animation: none; transform: none; }
|
|
1101
|
+
.zai-orb-beat { display: none; }
|
|
1102
|
+
.zai-nudge { transition: opacity 0.15s linear; transform: none; }
|
|
1103
|
+
.zai-dock[data-nudge="true"] .zai-nudge { transform: none; }
|
|
1104
|
+
}
|
|
1105
|
+
`;function Kx({onOpenChange:e,onThinkingChange:t,spec:n,registry:r}){let[i,a]=(0,h.useState)(null),[o,s]=(0,h.useState)(null),[c,l]=(0,h.useState)(!1),[u,d]=(0,h.useState)(``),[f,p]=(0,h.useState)(!1),[m,g]=(0,h.useState)(null),[_,v]=(0,h.useState)([]),[y,b]=(0,h.useState)(!1),[x,S]=(0,h.useState)(!1),[C,w]=(0,h.useState)(0),[T,E]=(0,h.useState)(!0),[ee,D]=(0,h.useState)(!1),[te,ne]=(0,h.useState)(!1),[re,O]=(0,h.useState)(!1),[ie,k]=(0,h.useState)(``),[ae,oe]=(0,h.useState)(0),A=(0,h.useRef)(0),se=(0,h.useRef)(0),ce=mf(),le=(0,h.useRef)(null),ue=(0,h.useRef)(null),j=(0,h.useRef)(null),de=Z_(n,r),M=(0,h.useMemo)(()=>Px(n,r),[n,r]),fe=(0,h.useCallback)((e,t)=>{let n=e.layers?.find(e=>e.id===Rx&&e.layerType===`effect`);n&&n.layerType===`effect`&&(n.speed=t)},[]),pe=ce?Fx:f?Lx:te?Ix:Fx,N=(0,h.useRef)(pe),me=(0,h.useCallback)(e=>{j.current=e,e?(fe(e,N.current),S(!1),b(!0)):b(!1)},[fe]),he=(0,h.useCallback)(()=>{b(!1),S(!0)},[]);(0,h.useEffect)(()=>{N.current=pe,j.current&&fe(j.current,pe)},[pe,fe]),(0,h.useEffect)(()=>{let e=!1;return fetch(As,{cache:`no-store`}).then(e=>e.ok?e.json():{agents:[]}).then(t=>{if(e)return;let n=t.agents??[];a(n),s(n[0]?.id??null)}).catch(()=>{e||a([])}),()=>{e=!0}},[]),(0,h.useEffect)(()=>{c&&le.current?.focus()},[c]),(0,h.useEffect)(()=>{if(!c)return;let e=e=>{e.key===`Escape`&&l(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[c]),(0,h.useEffect)(()=>{if(!i||i.length===0)return;let e=e=>{(e.metaKey||e.ctrlKey)&&!e.shiftKey&&!e.altKey&&e.key.toLowerCase()===`k`&&(e.preventDefault(),l(e=>!e))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i]),(0,h.useEffect)(()=>{let e=ue.current;e&&(e.scrollTop=e.scrollHeight,D(e.scrollTop>1))},[_,c]),(0,h.useEffect)(()=>{if(!c||f){E(!0);return}let e,t=setInterval(()=>{E(!1),e=setTimeout(()=>{w(e=>e+1),E(!0)},Bx)},zx);return()=>{clearInterval(t),clearTimeout(e)}},[c,f]),(0,h.useEffect)(()=>{if(c||f||!y||_.length>0)return;let e,t,n=()=>{e=setTimeout(()=>{M.length?(k(M[se.current%M.length]),se.current+=1,O(!0),t=setTimeout(()=>{O(!1),n()},Hx)):n()},Vx)};return n(),()=>{clearTimeout(e),clearTimeout(t),O(!1)}},[c,f,y,_.length,M]),(0,h.useEffect)(()=>{e?.(c)},[c,e]),(0,h.useEffect)(()=>{t?.(f)},[f,t]);let P=e=>v(t=>[...t,e].slice(-8));async function ge(){let e=u.trim();if(!e||f)return;let t=_.filter(e=>!e.error).map(e=>({role:e.role,text:e.text}));P({role:`user`,text:e}),d(``),p(!0),g(null);let n=!1,r=``,i=()=>{n||(n=!0,P({role:`zai`,text:``}))},a=(e,t=!1)=>v(n=>{let r=[...n];for(let n=r.length-1;n>=0;n--)if(r[n].role===`zai`){r[n]={...r[n],text:e,error:t};break}return r});try{let s=await de(),c=await fetch(js,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({question:e,agent:o,context:s??void 0,history:t.length?t:void 0})}),l=c.headers.get(`content-type`)??``;if(!c.body||!l.includes(`application/x-ndjson`)){let e=await c.json().catch(()=>null);if(c.ok&&typeof e?.answer==`string`&&e.answer.trim()){P({role:`zai`,text:e.answer.trim()});return}P({role:`zai`,text:e?.error??Wx(c.status),error:!0});return}let u=c.body.getReader(),d=new TextDecoder,f=``;for(;;){let{value:e,done:t}=await u.read();if(t)break;f+=d.decode(e,{stream:!0});let n;for(;(n=f.indexOf(`
|
|
1106
|
+
`))!==-1;){let e=f.slice(0,n).trim();if(f=f.slice(n+1),!e)continue;let t;try{t=JSON.parse(e)}catch{continue}if(t.type===`status`&&typeof t.text==`string`)g(t.text);else if(t.type===`delta`&&typeof t.text==`string`){if(i(),g(null),r+=t.text,a(r),!ce){let e=Date.now();e-A.current>Ux&&(A.current=e,oe(e=>e+1))}}else t.type===`done`?(i(),a(t.answer||r)):t.type===`error`&&(i(),a(t.error||`zAI couldn't finish that answer — try again.`,!0))}}n||P({role:`zai`,text:`zAI didn't return anything — try again.`,error:!0})}catch{let e=`zAI couldn't be reached — check that the zframes server is running.`;n?a(e,!0):P({role:`zai`,text:e,error:!0})}finally{p(!1),g(null),le.current?.focus()}}function _e(e){if(e.key===`Enter`&&!e.shiftKey)e.preventDefault(),ge();else if(e.key===`Tab`&&!e.shiftKey&&!f&&!u){let t=M[C%M.length];t&&(e.preventDefault(),d(t))}}function ve(){if(!i||i.length<2||!o)return;let e=i.findIndex(e=>e.id===o);s(i[(e+1)%i.length].id)}if(!i||i.length===0)return null;let ye=i.find(e=>e.id===o)?.label??i[0].label,be=typeof navigator<`u`&&/Mac|iPhone|iPad|iPod/.test(navigator.userAgent)?`⌘K`:`Ctrl+K`;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`style`,{children:Gx}),(0,z.jsx)(`div`,{className:`zai-scrim`,"data-open":c,onClick:()=>l(!1),"aria-hidden":`true`}),(0,z.jsxs)(`div`,{className:`zai-dock`,"data-open":c,"data-busy":f,"data-nudge":re,children:[c&&_.length>0&&(0,z.jsx)(`div`,{className:`zai-history`,ref:ue,"data-masked":ee,onScroll:e=>D(e.currentTarget.scrollTop>1),"aria-live":`polite`,children:_.map((e,t)=>e.role===`zai`&&!e.error?(0,z.jsx)(`div`,{className:`zai-msg zai-msg-zai`,children:(0,z.jsx)(Ox,{text:e.text})},t):(0,z.jsx)(`div`,{className:e.role===`user`?`zai-msg zai-msg-user`:`zai-msg zai-msg-zai zai-msg-error`,children:e.text},t))}),(0,z.jsx)(`button`,{type:`button`,className:`zai-nudge`,tabIndex:re?0:-1,"aria-hidden":!re,onClick:()=>{O(!1),d(ie),l(!0)},children:ie}),(0,z.jsx)(`div`,{className:`zai-panel`,children:(0,z.jsxs)(`div`,{className:`zai-input-wrap`,children:[(0,z.jsxs)(`div`,{className:`zai-input-field`,children:[(0,z.jsx)(`input`,{ref:le,className:`zai-input`,value:u,onChange:e=>d(e.target.value),onKeyDown:_e,placeholder:``,disabled:f,"aria-label":`Ask zAI`}),(0,z.jsx)(`span`,{className:`zai-ph${f?` zai-ph-busy`:``}`,"data-show":!u&&(f||T),"aria-hidden":`true`,children:f?m??`thinking…`:M[C%M.length]??``})]}),(0,z.jsx)(`span`,{className:`zai-agent`,onClick:ve,title:i.length>1?`Click to switch agent`:`Answered by ${ye}`,children:ye})]})}),(0,z.jsxs)(`button`,{type:`button`,className:`zai-orb`,"data-webgl":y,"data-fallback":x,onClick:()=>l(e=>!e),onMouseEnter:()=>{ne(!0),O(!1)},onMouseLeave:()=>ne(!1),"aria-label":c?`Close zAI`:`Ask zAI`,title:c?`Close zAI`:`Ask zAI · ${be}`,"aria-expanded":c,children:[(0,z.jsx)(M_,{className:`zai-orb-canvas`,onScene:me,onError:he}),ae>0&&(0,z.jsx)(`span`,{className:`zai-orb-beat`,"aria-hidden":`true`},ae)]})]})]})}var qx=(0,h.lazy)(()=>H(()=>import(`./editor-DchM45os.js`).then(e=>({default:e.DashboardEditor})),__vite__mapDeps([267,1,2,268,8,269,270,271]))),Jx=f_(),Yx=[...nf(),new Ns,new $s];function Xx({children:e}){return(0,z.jsx)(`main`,{className:`mx-auto max-w-2xl px-6 py-16`,children:e})}function Zx(){return(0,z.jsx)(Xx,{children:(0,z.jsx)(`p`,{className:`body-sm text-soft`,children:`loading dashboard…`})})}function Qx({message:e}){return(0,z.jsxs)(Xx,{children:[(0,z.jsx)(`h1`,{className:`font-dmsans text-strong mb-2 text-lg font-extrabold`,children:`couldn’t load your dashboard`}),(0,z.jsxs)(`p`,{className:`body-sm text-soft mb-4`,children:[`The zframes runtime couldn’t read `,(0,z.jsx)(`code`,{children:`dashboard.json`}),`. Make sure you’re running `,(0,z.jsx)(`code`,{children:`zframes serve`}),` next to it.`]}),(0,z.jsx)(`p`,{className:`caption text-soft`,children:(0,z.jsx)(`code`,{children:e})})]})}function $x({issues:e}){return(0,z.jsxs)(Xx,{children:[(0,z.jsx)(`h1`,{className:`font-dmsans text-strong mb-2 text-lg font-extrabold`,children:`dashboard.json is not a valid spec`}),(0,z.jsxs)(`p`,{className:`body-sm text-soft mb-4`,children:[`Fix the issues below (or run `,(0,z.jsx)(`code`,{children:`zframes lint dashboard.json`}),`), then reload.`]}),(0,z.jsx)(`ul`,{className:`body-sm text-normal list-disc space-y-1 pl-5`,children:e.map((e,t)=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.path.join(`.`)||`(root)`}),`: `,e.message]},t))})]})}async function eS(e){try{let t=await fetch(ws,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(!t.ok)throw Error(`HTTP ${t.status}`);window.location.reload()}catch(e){console.error(`zframes: failed to save dashboard.json`,e),window.alert("Couldn't save dashboard.json — is `zframes serve` still running? Your edits are still on screen; try Save again.")}}function tS(){let[e,t]=(0,h.useState)({status:`loading`}),[n,r]=(0,h.useState)(null),[i,a]=(0,h.useState)(null),[o,s]=(0,h.useState)(null),[c,l]=(0,h.useState)(null),[d,f]=(0,h.useState)(null),[p,m]=(0,h.useState)(null),[g,_]=(0,h.useState)(null),[v,y]=(0,h.useState)(null),[b,x]=(0,h.useState)(null),S=D_(),[C,w]=(0,h.useState)(!1),[T,E]=(0,h.useState)(!1),ee=i??(e.status===`ready`?e.spec.theme.accentHue:null),D=o??(e.status===`ready`?e.spec.theme.accentSat:null),te=c??(e.status===`ready`?e.spec.typography.scale:null),ne=d??(e.status===`ready`?e.spec.theme.upColor:null),re=p??(e.status===`ready`?e.spec.theme.downColor:null);if((0,h.useEffect)(()=>{ee!=null&&document.documentElement.style.setProperty(`--zf-accent-hue`,String(ee))},[ee]),(0,h.useEffect)(()=>{D!=null&&document.documentElement.style.setProperty(`--zf-accent-sat`,`${D}%`)},[D]),(0,h.useEffect)(()=>{te!=null&&(document.documentElement.style.fontSize=`${te*100}%`)},[te]),(0,h.useEffect)(()=>{ne!=null&&document.documentElement.style.setProperty(`--zf-up`,ne)},[ne]),(0,h.useEffect)(()=>{re!=null&&document.documentElement.style.setProperty(`--zf-down`,re)},[re]),(0,h.useEffect)(()=>{let e=!1;return fetch(Cs,{cache:`no-store`}).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()}).then(n=>{if(e)return;let r=es.safeParse(n);t(r.success?{status:`ready`,spec:r.data}:{status:`invalid`,issues:r.error.issues})}).catch(n=>{e||t({status:`error`,message:String(n)})}),()=>{e=!0}},[]),e.status===`loading`)return(0,z.jsx)(Zx,{});if(e.status===`error`)return(0,z.jsx)(Qx,{message:e.message});if(e.status===`invalid`)return(0,z.jsx)($x,{issues:e.issues});let O=e.spec,ie=(g??O.grid.mode)===`flow-horizontal`,k=v??O.background;return(0,z.jsxs)(u,{providers:Yx,children:[(0,z.jsx)(Of,{background:k,surface:b??O.theme.surface,active:C,thinking:T,accentHue:ee??O.theme.accentHue,accentSat:D??O.theme.accentSat,sceneHue:rs(k.projectId)}),(0,z.jsxs)(`main`,{className:`relative z-10 mx-auto pt-5 ${ie?`h-[100dvh] max-w-none overflow-hidden px-0`:`max-w-[1320px] px-4 pb-24 sm:px-6`}`,style:{"--zf-accent-hue":ee??O.theme.accentHue,"--zf-accent-sat":`${D??O.theme.accentSat}%`},children:[(0,z.jsxs)(`header`,{className:`mb-5 flex flex-col gap-2 border-b border-white/[0.06] pb-4 sm:flex-row sm:items-center sm:justify-between ${ie?`px-4 sm:px-6`:``}`,children:[(0,z.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[(0,z.jsxs)(`h1`,{className:`font-dmsans text-strong text-lg font-extrabold tracking-tight`,children:[`/`,(0,z.jsx)(`span`,{style:{color:`hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76%)`},children:`zframes`})]}),(0,z.jsx)(kf,{currentTitle:O.title}),(0,z.jsxs)(`span`,{className:`caption text-soft rounded-full border border-white/[0.08] px-1.5 py-0.5 font-mono leading-none`,title:`zframes runtime version`,children:[`v`,`0.9.0`]})]}),(0,z.jsx)(`div`,{ref:r,className:`flex min-h-9 items-center justify-end`})]}),S?(0,z.jsx)(h.Suspense,{fallback:(0,z.jsx)(Ss,{spec:O,registry:Jx}),children:(0,z.jsx)(qx,{spec:O,registry:Jx,onSave:eS,customiseButtonTarget:n,onAccentHueChange:a,onAccentSatChange:s,onFontScaleChange:l,onUpColorChange:f,onDownColorChange:m,onModeChange:_,onBackgroundChange:y,onSurfaceChange:x})}):(0,z.jsx)(Ss,{spec:O,registry:Jx})]}),(0,z.jsx)(T_,{}),(0,z.jsx)(Kx,{onOpenChange:w,onThinkingChange:E,spec:O,registry:Jx})]})}var nS=document.getElementById(`root`);if(!nS)throw Error(`missing #root element`);(0,_.createRoot)(nS).render((0,z.jsx)(h.StrictMode,{children:(0,z.jsx)(tS,{})}));export{Og as $,bm as $n,dg as $r,i_ as $t,_p as A,cs as Ai,qf as An,Gp as Ar,np as At,Op as B,Pp as Bn,up as Br,xm as Bt,Dh as C,Pf as Ci,ip as Cn,hh as Cr,Sg as Ct,gh as D,ls as Di,Hm as Dn,Bm as Dr,Yp as Dt,zp as E,bs as Ei,oh as En,mg as Er,mp as Et,Ph as F,Yo as Fi,lg as Fn,Fm as Fr,hg as Ft,mh as G,Qh as Gn,Em as Gr,Qm as Gt,fp as H,fm as Hn,_m as Hr,$m as Ht,qm as I,ra as Ii,fg as In,Rm as Ir,ap as It,wm as J,dm as Jn,Zf as Jr,Gh as Jt,Rp as K,Jh as Kn,qp as Kr,Kp as Kt,rh as L,v as Li,vh as Ln,lh as Lr,um as Lt,Om as M,ts as Mi,gm as Mn,tm as Mr,yp as Mt,Um as N,Zo as Ni,ug as Nn,Jm as Nr,bp as Nt,Tm as O,us as Oi,ph as On,Vm as Or,hp as Ot,sh as P,Qo as Pi,cg as Pn,ah as Pr,xp as Pt,Nm as Q,gg as Qn,ag as Qr,r_ as Qt,kp as R,b as Ri,_h as Rn,Jp as Rr,Bp as Rt,Uf as S,Bf as Si,eg as Sn,vm as Sr,Eg as St,mm as T,fs as Ti,Ah as Tn,ep as Tr,gp as Tt,Up as U,qh as Un,rm as Ur,Np as Ut,Wp as V,Xh as Vn,Fp as Vr,Im as Vt,jh as W,$h as Wn,Lm as Wr,Wf as Wt,jg as X,Yh as Xn,sg as Xr,Xg as Xt,Xm as Y,Zh as Yn,og as Yr,Ug as Yt,zm as Z,Gm as Zn,op as Zr,Jg as Zt,Zm as _,fh as _i,Kh as _n,nh as _r,Kf as _t,Qp as a,Qf as ai,Yg as an,wp as ar,Gf as at,Uh as b,Rf as bi,ch as bn,Rh as br,tp as bt,om as c,Lp as ci,zg as cn,Mg as cr,rp as ct,im as d,Sh as di,Wg as dn,Sp as dr,Ym as dt,kh as ei,n_ as en,em as er,xg as et,sm as f,Ih as fi,Bg as fn,Yf as fr,xh as ft,vg as g,Dm as gi,lm as gn,Fh as gr,wh as gt,Vp as h,Nh as hi,e_ as hn,Mp as hr,dp as ht,$f as i,th as ii,a_ as in,Ag as ir,Cg as it,Xp as j,ns as ji,tg as jn,Sm as jr,vp as jt,ng as k,os as ki,Km as kn,Zp as kr,pp as kt,Vh as l,Ch as li,qg as ln,Mm as lr,Ip as lt,am as m,Bh as mi,Rg as mn,ih as mr,Th as mt,h_ as n,Pm as ni,Zg as nn,Ep as nr,jm as nt,nm as o,s_ as oi,o_ as on,wg as or,sp as ot,t_ as p,cp as pi,Gg as pn,Xf as pr,km as pt,Tg as q,pm as qn,l_ as qr,ym as qt,p_ as r,dh as ri,Qg as rn,kg as rr,Am as rt,Hh as s,c_ as si,Vg as sn,Dg as sr,yg as st,v_ as t,Mh as ti,Hg as tn,Tp as tr,ig as tt,cm as u,Cm as ui,$g as un,Jf as ur,lp as ut,Wm as v,jf as vi,pg as vn,Lh as vr,yh as vt,Oh as w,ks as wi,Dp as wn,Hp as wr,Kg as wt,$p as x,Vf as xi,hm as xn,Ap as xr,bg as xt,Wh as y,zf as yi,uh as yn,jp as yr,bh as yt,zh as z,rg as zn,_g as zr,Eh as zt};
|