zframes 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/NOTICE +6 -2
  2. package/dist/index.js +614 -10
  3. package/package.json +2 -2
  4. package/runtime/assets/{bitcoin-dominance-CtnczH5N.js → bitcoin-dominance-CweHlZx7.js} +1 -1
  5. package/runtime/assets/{breakeven-zbCEQ5ag.js → breakeven-CG9rKwgE.js} +1 -1
  6. package/runtime/assets/{breathing-6Wmy_hqF.js → breathing-cDundHq6.js} +1 -1
  7. package/runtime/assets/{btc-blocks-D1xOLm2L.js → btc-blocks-Do_nySHd.js} +1 -1
  8. package/runtime/assets/{btc-difficulty-BTbKIqrl.js → btc-difficulty-vNbz5uRo.js} +1 -1
  9. package/runtime/assets/{btc-fees-5Geh2TSa.js → btc-fees-BmADLsmK.js} +1 -1
  10. package/runtime/assets/{btc-hashrate-DZfnxUsi.js → btc-hashrate-Wx2RAG-5.js} +1 -1
  11. package/runtime/assets/{btc-mempool-8oOMDiaW.js → btc-mempool-CTwbkMUR.js} +1 -1
  12. package/runtime/assets/{calculator-D91iI7KM.js → calculator-mvv6XpQC.js} +1 -1
  13. package/runtime/assets/{checklist-DNrOJw0w.js → checklist-CuEw3GpE.js} +1 -1
  14. package/runtime/assets/{clock-BzAIAbhU.js → clock-Cjnwi03W.js} +1 -1
  15. package/runtime/assets/{coin-movers-99W2EABZ.js → coin-movers-Bcx1XR0F.js} +1 -1
  16. package/runtime/assets/{countdown-ZAJmbykg.js → countdown-Cdi5gSSu.js} +1 -1
  17. package/runtime/assets/cycle-shared-BOGcJDzT.js +1 -0
  18. package/runtime/assets/cycle-signals-CS629ZDc.js +1 -0
  19. package/runtime/assets/{daily-analysis-CS5MqofA.js → daily-analysis-DX8bVq85.js} +1 -1
  20. package/runtime/assets/{day-meter-DzBvLcpd.js → day-meter-DDfTuhms.js} +1 -1
  21. package/runtime/assets/defi-revenue-CpeAGwhb.js +1 -0
  22. package/runtime/assets/{dex-volume-chart-BfnczfAT.js → dex-volume-chart-sHIuJACJ.js} +1 -1
  23. package/runtime/assets/{dex-volume-treemap-CLyIrkgU.js → dex-volume-treemap-rSTrzz7O.js} +1 -1
  24. package/runtime/assets/{dice-CAvRf0md.js → dice-BrFORdjN.js} +1 -1
  25. package/runtime/assets/{dino-game-gsyCpJ-0.js → dino-game-BOV8mV1d.js} +1 -1
  26. package/runtime/assets/{divider-DCTu-qNh.js → divider-C33tH1RU.js} +1 -1
  27. package/runtime/assets/{drawdy-CZWCFtog.js → drawdy-BIb36JN9.js} +1 -1
  28. package/runtime/assets/dxy-CRifEdp_.js +1 -0
  29. package/runtime/assets/editor-CZoWRTJC.css +1 -0
  30. package/runtime/assets/editor-Dnp1eXvY.js +68 -0
  31. package/runtime/assets/etf-flows-BV10E2R-.js +1 -0
  32. package/runtime/assets/etf-flows-chart-DHu8mkXm.js +1 -0
  33. package/runtime/assets/eth-staking-BqWeJq6F.js +1 -0
  34. package/runtime/assets/eth-supply-CF-MgHjn.js +1 -0
  35. package/runtime/assets/{fear-greed-DOcPswrx.js → fear-greed-DuDR56h2.js} +1 -1
  36. package/runtime/assets/{filings-feed-Cs--DpYl.js → filings-feed-BpfO2yF6.js} +1 -1
  37. package/runtime/assets/{financial-stress-BqnxLk2O.js → financial-stress-BfYJdlry.js} +1 -1
  38. package/runtime/assets/{flappy-bird-DaasqVGg.js → flappy-bird-Dbb2UQBv.js} +1 -1
  39. package/runtime/assets/{fundamentals-GseULnsD.js → fundamentals-CUnqjF--.js} +1 -1
  40. package/runtime/assets/funding-comparison-CMKxW1n-.js +1 -0
  41. package/runtime/assets/{funding-heatmap-2RvVLTPN.js → funding-heatmap-CZWnYF8Y.js} +1 -1
  42. package/runtime/assets/{funding-rate-chart-DCRKHp6g.js → funding-rate-chart-C-tpwid_.js} +1 -1
  43. package/runtime/assets/{fx-board-CVW6VmbY.js → fx-board-YAy44m5d.js} +1 -1
  44. package/runtime/assets/{heading-BaRMJq2t.js → heading-uIVBEE7K.js} +1 -1
  45. package/runtime/assets/{holiday-calendar-2OBfwbh-.js → holiday-calendar-DCj83hi2.js} +1 -1
  46. package/runtime/assets/{image-CuTXEV7Q.js → image-CITPAmp0.js} +1 -1
  47. package/runtime/assets/index-Bx7RmzY8.js +1 -0
  48. package/runtime/assets/index-CrmTiZaB.css +1 -0
  49. package/runtime/assets/index-DyvZokhk.js +1097 -0
  50. package/runtime/assets/indicators-CogwjDn9.js +1 -0
  51. package/runtime/assets/{inflation-pulse-B8E9uzQB.js → inflation-pulse-Bqa3-cuC.js} +1 -1
  52. package/runtime/assets/{journal-log-7APM_99k.js → journal-log-Bgjia8cQ.js} +1 -1
  53. package/runtime/assets/{journal-open-CcdGuysA.js → journal-open-Bm5gwWXz.js} +1 -1
  54. package/runtime/assets/{journal-results-CUTn4-kq.js → journal-results-cEWe2pbe.js} +1 -1
  55. package/runtime/assets/{journal-score-C31dg2yL.js → journal-score-vmfF-9bK.js} +1 -1
  56. package/runtime/assets/{journal-ui-C5ueSjZx.js → journal-ui-ApBNIq5_.js} +1 -1
  57. package/runtime/assets/{labor-market-DgvDQtFo.js → labor-market-azDXD-dR.js} +1 -1
  58. package/runtime/assets/{lightning-stats-CiUlm-e_.js → lightning-stats-nkyh2dOX.js} +1 -1
  59. package/runtime/assets/{link-grid-DlsY59eq.js → link-grid-BEo4b54T.js} +1 -1
  60. package/runtime/assets/ma-multiplier-BllDQMF5.js +1 -0
  61. package/runtime/assets/macro-calendar-Ck0dJk4p.js +1 -0
  62. package/runtime/assets/{market-cap-treemap-6vqLUgVk.js → market-cap-treemap-AxE2EYPO.js} +1 -1
  63. package/runtime/assets/{market-hours-BArlXOQB.js → market-hours-BSwXtU8c.js} +1 -1
  64. package/runtime/assets/{marquee-2Di2SqI2.js → marquee-1Zr5qDJP.js} +1 -1
  65. package/runtime/assets/mayer-multiple-DpBJNd4d.js +1 -0
  66. package/runtime/assets/{mining-pools-Bg02wm2V.js → mining-pools-B-jxdTot.js} +1 -1
  67. package/runtime/assets/{mover-row-C8040L85.js → mover-row-Dg96EIqq.js} +1 -1
  68. package/runtime/assets/mvrv-Dx_S0TwE.js +1 -0
  69. package/runtime/assets/{national-debt-BS57WjA3.js → national-debt-BKVBHaqm.js} +1 -1
  70. package/runtime/assets/{news-feed-oBCTiuoo.js → news-feed-C9itZmyp.js} +1 -1
  71. package/runtime/assets/{note-BLWlz52v.js → note-BtCnmuMo.js} +1 -1
  72. package/runtime/assets/nupl-aIjkc57m.js +1 -0
  73. package/runtime/assets/{open-interest-DxMqZcmu.js → open-interest-C0ulogv6.js} +1 -1
  74. package/runtime/assets/{options-iv-CgIIFdpN.js → options-iv-CdUder3x.js} +1 -1
  75. package/runtime/assets/{options-oi-strike-blRp4kmB.js → options-oi-strike-CvCZnMCR.js} +1 -1
  76. package/runtime/assets/{options-put-call-CyOwXBVQ.js → options-put-call-FuaDHJ-S.js} +1 -1
  77. package/runtime/assets/pi-cycle-BuCnLnIJ.js +1 -0
  78. package/runtime/assets/{pomodoro-BKJlh-bz.js → pomodoro-DDBVVcSR.js} +1 -1
  79. package/runtime/assets/{portfolio-allocation-Cat1vq2_.js → portfolio-allocation-DAnQk_h_.js} +1 -1
  80. package/runtime/assets/{portfolio-common-DeyRfuNV.js → portfolio-common-Bi16i0aA.js} +1 -1
  81. package/runtime/assets/{portfolio-holdings-DDDhMMFL.js → portfolio-holdings-MyAinCzt.js} +1 -1
  82. package/runtime/assets/{portfolio-value-D9qrGeZp.js → portfolio-value-BPURwKf8.js} +1 -1
  83. package/runtime/assets/prediction-markets-Bzy51qnV.js +1 -0
  84. package/runtime/assets/{price-chart-CQJNOBtu.js → price-chart-BOCD8ka3.js} +1 -1
  85. package/runtime/assets/{price-compare-DqBiHd7S.js → price-compare-DZlF-qhZ.js} +1 -1
  86. package/runtime/assets/{price-liveline-BlVGC2-R.js → price-liveline-Bl7qCd5-.js} +1 -1
  87. package/runtime/assets/{price-ticker-QdVoVaQh.js → price-ticker-D2W4T02y.js} +1 -1
  88. package/runtime/assets/{protocol-fees-treemap-39F-aE33.js → protocol-fees-treemap-DiIt4bfo.js} +1 -1
  89. package/runtime/assets/{protocol-tvl-chart-DZOgbMZu.js → protocol-tvl-chart-CmzANiR7.js} +1 -1
  90. package/runtime/assets/{protocol-tvl-treemap-DusQ6xL2.js → protocol-tvl-treemap-BjNPrrtL.js} +1 -1
  91. package/runtime/assets/puell-multiple-BGrJX43r.js +1 -0
  92. package/runtime/assets/{quote-Di049ggj.js → quote-CRM3bfI7.js} +1 -1
  93. package/runtime/assets/{rates-board-Dm3tb6-P.js → rates-board-Cb9rV0_-.js} +1 -1
  94. package/runtime/assets/realized-price-CYlrFa0m.js +1 -0
  95. package/runtime/assets/reserve-risk-Be98XUsD.js +1 -0
  96. package/runtime/assets/{returns-projector-BiMx_kSw.js → returns-projector-D67a_yvC.js} +1 -1
  97. package/runtime/assets/{risk-reward-1Q_Kt75s.js → risk-reward-C7WMz2od.js} +1 -1
  98. package/runtime/assets/rsi-momentum-IglnulkJ.js +1 -0
  99. package/runtime/assets/{rules-card-BkAX9PEq.js → rules-card-DJs3fDVN.js} +1 -1
  100. package/runtime/assets/scene-uwfOGek1.js +1 -0
  101. package/runtime/assets/sector-performance-DVMaleLY.js +1 -0
  102. package/runtime/assets/sector-treemap-B681nSi6.js +1 -0
  103. package/runtime/assets/{session-progress-D_1dzPzM.js → session-progress-CZO3LqUi.js} +1 -1
  104. package/runtime/assets/{short-volume-U-uFonb2.js → short-volume-l8_9Yoh3.js} +1 -1
  105. package/runtime/assets/{snake-Dp4E3Dcv.js → snake-CifbTGlZ.js} +1 -1
  106. package/runtime/assets/sopr-Dw_oz-mC.js +1 -0
  107. package/runtime/assets/{spotify-embed-Cw95WZjV.js → spotify-embed-BA0m1IRb.js} +1 -1
  108. package/runtime/assets/stablecoin-chains-Dd2LqqqY.js +1 -0
  109. package/runtime/assets/stablecoin-supply-DM4ogL4V.js +1 -0
  110. package/runtime/assets/{stopwatch-B2_iDkKK.js → stopwatch-Co72v-7u.js} +1 -1
  111. package/runtime/assets/{top-movers--vCUiTII.js → top-movers-CLmC2TNu.js} +1 -1
  112. package/runtime/assets/{treasury-auctions-BpzYivLg.js → treasury-auctions-Dl9fiRgf.js} +1 -1
  113. package/runtime/assets/{treemap-leaf-DNIoJEK-.js → treemap-leaf-Dn31k9S9.js} +1 -1
  114. package/runtime/assets/trending-coins-Cpx9T6cG.js +1 -0
  115. package/runtime/assets/{tvl-treemap-BYgD9bNy.js → tvl-treemap-e610jE8k.js} +1 -1
  116. package/runtime/assets/{video-D-nBm697.js → video-CeKjM-cE.js} +1 -1
  117. package/runtime/assets/volume-profile-CiMFsIBu.js +1 -0
  118. package/runtime/assets/{yield-curve-8IsrMS_9.js → yield-curve-DkB0u2_Q.js} +1 -1
  119. package/runtime/assets/yield-scanner-BP90untT.js +1 -0
  120. package/runtime/index.html +2 -2
  121. package/runtime/assets/editor-BMMobjrE.css +0 -1
  122. package/runtime/assets/editor-Ckt9OQ98.js +0 -68
  123. package/runtime/assets/index-BqHx9BjX.css +0 -1
  124. package/runtime/assets/index-CH54P4Cn.js +0 -936
  125. package/runtime/assets/index-DK7jWlTL.js +0 -1
  126. package/runtime/assets/unicorn-scene-DcohHRPZ.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zframes",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "description": "zframes CLI — serve a dashboard.json as a live, editable market terminal (serve), print the frame catalogue for generating agents (catalogue), and validate a dashboard.json (lint).",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Zentry",
@@ -42,9 +42,9 @@
42
42
  "typescript": "^5.8.0",
43
43
  "@zframes/account": "0.0.0",
44
44
  "@zframes/frames": "0.0.0",
45
+ "@zframes/provider-defillama": "0.0.0",
45
46
  "@zframes/provider-coingecko": "0.0.0",
46
47
  "@zframes/provider-alternativeme": "0.0.0",
47
- "@zframes/provider-defillama": "0.0.0",
48
48
  "@zframes/provider-hyperliquid": "0.0.0",
49
49
  "@zframes/serve": "0.0.0",
50
50
  "@zframes/spec": "0.0.0",
@@ -1 +1 @@
1
- import{r as f,j as e}from"./react-qoZPGuNy.js";import{b as r,f as p,a as x,c as g}from"./format-CfAcS4D8.js";import{f as j,n as i,o as v}from"./index-CH54P4Cn.js";import{F as o}from"./ui-Bq3RQsdJ.js";i.schema;const c={BTC:"linear-gradient(90deg, #FF810F 0%, #FF9E37 100%)",ETH:"hsl(var(--zf-accent-hue, 242) 85% 72%)",Others:"hsl(var(--zf-accent-hue, 242) 38% 52%)"};function y({config:d}){const{market:s,isLoading:m}=v(),n=f.useMemo(()=>{if(!s)return[];const a=s.dominance.btc??0,t=s.dominance.eth??0;return[{type:"BTC",value:a},{type:"ETH",value:t},{type:"Others",value:Math.max(0,100-a-t)}].sort((h,u)=>u.value-h.value)},[s]);if(m)return e.jsx(o,{loading:!0,children:"loading dominance…"});if(!s)return e.jsx(o,{children:"no market data"});const l=n[0];return e.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-3",children:[e.jsxs("div",{className:"flex items-baseline gap-2",children:[e.jsx("span",{className:"metric-xl text-strong",children:r(l.value,1)}),e.jsx("span",{className:"body-md text-soft",children:l.type})]}),e.jsx("div",{className:"flex h-3 w-full max-w-sm gap-1 overflow-hidden rounded-full",children:n.map((a,t)=>e.jsx("div",{className:`h-full ${t===0?"rounded-l-full":""} ${t===n.length-1?"rounded-r-full":""}`,style:{width:`${a.value}%`,background:c[a.type]}},a.type))}),e.jsx("div",{className:"grid w-full max-w-sm grid-cols-3",children:n.map(a=>e.jsxs("div",{className:"flex items-center justify-center gap-1.5",children:[e.jsx("div",{className:"h-2 w-2 flex-shrink-0 rounded-full",style:{background:c[a.type]}}),e.jsx("span",{className:"body-sm text-soft",children:a.type}),e.jsx("span",{className:"body-sm text-normal font-bold tabular-nums",children:r(a.value,1)})]},a.type))}),d.showTotalMarketCap&&e.jsxs("div",{className:"caption text-soft",children:["total mcap ",p(s.totalMarketCapUsd)," ·"," ",e.jsxs("span",{style:{color:g(s.marketCapChangePct24h)},children:[x(s.marketCapChangePct24h)," 24h"]})]})]})}const F=j({...i,component:y});export{F as bitcoinDominanceFrame};
1
+ import{r as f,j as e}from"./react-qoZPGuNy.js";import{b as r,f as p,a as x,c as g}from"./format-CfAcS4D8.js";import{f as j,n as i,o as v}from"./index-DyvZokhk.js";import{F as o}from"./ui-Bq3RQsdJ.js";i.schema;const c={BTC:"linear-gradient(90deg, #FF810F 0%, #FF9E37 100%)",ETH:"hsl(var(--zf-accent-hue, 242) 85% 72%)",Others:"hsl(var(--zf-accent-hue, 242) 38% 52%)"};function y({config:d}){const{market:s,isLoading:m}=v(),n=f.useMemo(()=>{if(!s)return[];const a=s.dominance.btc??0,t=s.dominance.eth??0;return[{type:"BTC",value:a},{type:"ETH",value:t},{type:"Others",value:Math.max(0,100-a-t)}].sort((h,u)=>u.value-h.value)},[s]);if(m)return e.jsx(o,{loading:!0,children:"loading dominance…"});if(!s)return e.jsx(o,{children:"no market data"});const l=n[0];return e.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-3",children:[e.jsxs("div",{className:"flex items-baseline gap-2",children:[e.jsx("span",{className:"metric-xl text-strong",children:r(l.value,1)}),e.jsx("span",{className:"body-md text-soft",children:l.type})]}),e.jsx("div",{className:"flex h-3 w-full max-w-sm gap-1 overflow-hidden rounded-full",children:n.map((a,t)=>e.jsx("div",{className:`h-full ${t===0?"rounded-l-full":""} ${t===n.length-1?"rounded-r-full":""}`,style:{width:`${a.value}%`,background:c[a.type]}},a.type))}),e.jsx("div",{className:"grid w-full max-w-sm grid-cols-3",children:n.map(a=>e.jsxs("div",{className:"flex items-center justify-center gap-1.5",children:[e.jsx("div",{className:"h-2 w-2 flex-shrink-0 rounded-full",style:{background:c[a.type]}}),e.jsx("span",{className:"body-sm text-soft",children:a.type}),e.jsx("span",{className:"body-sm text-normal font-bold tabular-nums",children:r(a.value,1)})]},a.type))}),d.showTotalMarketCap&&e.jsxs("div",{className:"caption text-soft",children:["total mcap ",p(s.totalMarketCapUsd)," ·"," ",e.jsxs("span",{style:{color:g(s.marketCapChangePct24h)},children:[x(s.marketCapChangePct24h)," 24h"]})]})]})}const F=j({...i,component:y});export{F as bitcoinDominanceFrame};
@@ -1 +1 @@
1
- import{r as u,j as e}from"./react-qoZPGuNy.js";import{i as c}from"./content-shared-BZ1XzrJx.js";import{d as N,a as j,c as y}from"./format-CfAcS4D8.js";import{f as k,ba as b}from"./index-CH54P4Cn.js";import{s as z}from"./ui-Bq3RQsdJ.js";b.schema;function C({config:l}){const[o,m]=u.useState(l.fills.length?l.fills:[{price:0,size:0}]),[n,g]=u.useState(l.currentPrice),{avg:r,totalSize:p}=u.useMemo(()=>{let s=0,a=0;for(const t of o)s+=t.price*t.size,a+=t.size;return{avg:a>0?s/a:0,totalSize:a}},[o]),x=r>0&&n>0?(n-r)/r*100:null,d=l.label.trim(),h=(s,a,t)=>m(f=>f.map((i,v)=>v===s?{...i,[a]:t}:i));return e.jsxs("div",{className:"flex h-full w-full flex-col gap-2",children:[d&&e.jsx("div",{className:"caption text-soft shrink-0 uppercase tracking-[0.12em]",children:d}),e.jsxs("div",{className:"shrink-0",children:[e.jsx("div",{className:"caption text-soft",children:"break-even (avg cost)"}),e.jsx("div",{className:"metric-lg text-strong",children:p>0?N(r):"—"}),e.jsxs("div",{className:"caption text-soft",children:[p>0?`${p} units`:"add fills below",x!==null&&e.jsxs(e.Fragment,{children:[" · ",e.jsxs("span",{style:{color:y(x)},children:[j(x)," unrealized"]})]})]})]}),e.jsxs("div",{className:`min-h-0 flex-1 ${z}`,children:[o.map((s,a)=>e.jsxs("div",{className:"mb-1 flex items-center gap-1",children:[e.jsxs("label",{className:`flex flex-1 items-center gap-1 px-2 py-1 ${c}`,children:[e.jsx("span",{className:"caption text-soft",children:"px"}),e.jsx("input",{type:"number",value:Number.isFinite(s.price)?s.price:0,onChange:t=>h(a,"price",Number(t.target.value)),className:"body-sm text-strong w-full bg-transparent outline-none"})]}),e.jsxs("label",{className:`flex flex-1 items-center gap-1 px-2 py-1 ${c}`,children:[e.jsx("span",{className:"caption text-soft",children:"sz"}),e.jsx("input",{type:"number",value:Number.isFinite(s.size)?s.size:0,onChange:t=>h(a,"size",Number(t.target.value)),className:"body-sm text-strong w-full bg-transparent outline-none"})]}),e.jsx("button",{type:"button",onClick:()=>m(t=>t.length>1?t.filter((f,i)=>i!==a):t),className:"caption text-soft hover:text-strong shrink-0 px-1","aria-label":"remove fill",children:"×"})]},a)),e.jsx("button",{type:"button",onClick:()=>m(s=>[...s,{price:0,size:0}]),className:`caption text-soft hover:text-strong w-full px-2 py-1 ${c}`,children:"+ add fill"})]}),e.jsxs("label",{className:`flex shrink-0 items-center gap-1 px-2 py-1 ${c}`,children:[e.jsx("span",{className:"caption text-soft shrink-0",children:"current price"}),e.jsx("input",{type:"number",value:Number.isFinite(n)?n:0,onChange:s=>g(Number(s.target.value)),className:"body-sm text-strong w-full bg-transparent text-right outline-none"})]})]})}const E=k({...b,component:C});export{E as breakevenFrame};
1
+ import{r as u,j as e}from"./react-qoZPGuNy.js";import{i as c}from"./content-shared-BZ1XzrJx.js";import{d as N,a as j,c as y}from"./format-CfAcS4D8.js";import{f as k,bO as b}from"./index-DyvZokhk.js";import{s as z}from"./ui-Bq3RQsdJ.js";b.schema;function C({config:l}){const[o,m]=u.useState(l.fills.length?l.fills:[{price:0,size:0}]),[n,g]=u.useState(l.currentPrice),{avg:r,totalSize:p}=u.useMemo(()=>{let s=0,a=0;for(const t of o)s+=t.price*t.size,a+=t.size;return{avg:a>0?s/a:0,totalSize:a}},[o]),x=r>0&&n>0?(n-r)/r*100:null,d=l.label.trim(),h=(s,a,t)=>m(f=>f.map((i,v)=>v===s?{...i,[a]:t}:i));return e.jsxs("div",{className:"flex h-full w-full flex-col gap-2",children:[d&&e.jsx("div",{className:"caption text-soft shrink-0 uppercase tracking-[0.12em]",children:d}),e.jsxs("div",{className:"shrink-0",children:[e.jsx("div",{className:"caption text-soft",children:"break-even (avg cost)"}),e.jsx("div",{className:"metric-lg text-strong",children:p>0?N(r):"—"}),e.jsxs("div",{className:"caption text-soft",children:[p>0?`${p} units`:"add fills below",x!==null&&e.jsxs(e.Fragment,{children:[" · ",e.jsxs("span",{style:{color:y(x)},children:[j(x)," unrealized"]})]})]})]}),e.jsxs("div",{className:`min-h-0 flex-1 ${z}`,children:[o.map((s,a)=>e.jsxs("div",{className:"mb-1 flex items-center gap-1",children:[e.jsxs("label",{className:`flex flex-1 items-center gap-1 px-2 py-1 ${c}`,children:[e.jsx("span",{className:"caption text-soft",children:"px"}),e.jsx("input",{type:"number",value:Number.isFinite(s.price)?s.price:0,onChange:t=>h(a,"price",Number(t.target.value)),className:"body-sm text-strong w-full bg-transparent outline-none"})]}),e.jsxs("label",{className:`flex flex-1 items-center gap-1 px-2 py-1 ${c}`,children:[e.jsx("span",{className:"caption text-soft",children:"sz"}),e.jsx("input",{type:"number",value:Number.isFinite(s.size)?s.size:0,onChange:t=>h(a,"size",Number(t.target.value)),className:"body-sm text-strong w-full bg-transparent outline-none"})]}),e.jsx("button",{type:"button",onClick:()=>m(t=>t.length>1?t.filter((f,i)=>i!==a):t),className:"caption text-soft hover:text-strong shrink-0 px-1","aria-label":"remove fill",children:"×"})]},a)),e.jsx("button",{type:"button",onClick:()=>m(s=>[...s,{price:0,size:0}]),className:`caption text-soft hover:text-strong w-full px-2 py-1 ${c}`,children:"+ add fill"})]}),e.jsxs("label",{className:`flex shrink-0 items-center gap-1 px-2 py-1 ${c}`,children:[e.jsx("span",{className:"caption text-soft shrink-0",children:"current price"}),e.jsx("input",{type:"number",value:Number.isFinite(n)?n:0,onChange:s=>g(Number(s.target.value)),className:"body-sm text-strong w-full bg-transparent text-right outline-none"})]})]})}const E=k({...b,component:C});export{E as breakevenFrame};
@@ -1 +1 @@
1
- import{r as s,j as r}from"./react-qoZPGuNy.js";import{f as m,be as n}from"./index-CH54P4Cn.js";n.schema;function c(e){return[{name:"Breathe in",dur:e.inhale,scale:1},{name:"Hold",dur:e.hold,scale:1},{name:"Breathe out",dur:e.exhale,scale:.45},{name:"Hold",dur:e.holdAfter,scale:.45}]}function x({config:e}){const t=c(e),[a,l]=s.useState(0);s.useEffect(()=>{l(0)},[e.inhale,e.hold,e.exhale,e.holdAfter]),s.useEffect(()=>{const d=Math.max(0,t[a].dur),u=setTimeout(()=>l(i=>(i+1)%t.length),Math.max(300,d*1e3));return()=>clearTimeout(u)},[a,e.inhale,e.hold,e.exhale,e.holdAfter]);const o=t[a].scale,h=Math.max(.3,t[a].dur);return r.jsxs("div",{className:"relative flex h-full w-full items-center justify-center overflow-hidden",children:[r.jsx("div",{className:"aspect-square w-[55%] rounded-full",style:{background:"var(--color-highlight)",opacity:.25,transform:`scale(${o})`,transition:`transform ${h}s ease-in-out`}}),r.jsx("div",{className:"caption text-soft absolute uppercase tracking-[0.2em]",children:t[a].name})]})}const b=m({...n,component:x});export{b as breathingFrame};
1
+ import{r as s,j as r}from"./react-qoZPGuNy.js";import{f as m,bS as n}from"./index-DyvZokhk.js";n.schema;function c(e){return[{name:"Breathe in",dur:e.inhale,scale:1},{name:"Hold",dur:e.hold,scale:1},{name:"Breathe out",dur:e.exhale,scale:.45},{name:"Hold",dur:e.holdAfter,scale:.45}]}function x({config:e}){const t=c(e),[a,l]=s.useState(0);s.useEffect(()=>{l(0)},[e.inhale,e.hold,e.exhale,e.holdAfter]),s.useEffect(()=>{const d=Math.max(0,t[a].dur),u=setTimeout(()=>l(i=>(i+1)%t.length),Math.max(300,d*1e3));return()=>clearTimeout(u)},[a,e.inhale,e.hold,e.exhale,e.holdAfter]);const o=t[a].scale,h=Math.max(.3,t[a].dur);return r.jsxs("div",{className:"relative flex h-full w-full items-center justify-center overflow-hidden",children:[r.jsx("div",{className:"aspect-square w-[55%] rounded-full",style:{background:"var(--color-highlight)",opacity:.25,transform:`scale(${o})`,transition:`transform ${h}s ease-in-out`}}),r.jsx("div",{className:"caption text-soft absolute uppercase tracking-[0.2em]",children:t[a].name})]})}const b=m({...n,component:x});export{b as breathingFrame};
@@ -1 +1 @@
1
- import{j as s}from"./react-qoZPGuNy.js";import{t as c,j as i}from"./format-CfAcS4D8.js";import{f as r,aS as o,aT as m}from"./index-CH54P4Cn.js";import{F as a,s as d}from"./ui-Bq3RQsdJ.js";o.schema;function x({config:l}){const{blocks:e,isLoading:n}=m(l.count);return n?s.jsx(a,{loading:!0,children:"loading blocks…"}):e.length===0?s.jsx(a,{children:"no block data yet"}):s.jsx("div",{className:"flex h-full min-h-0 flex-col",children:s.jsx("div",{className:d,children:s.jsx("div",{className:"flex flex-col gap-1.5",children:e.map(t=>s.jsxs("div",{className:"grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 rounded-md bg-white/[0.03] px-2 py-1.5",title:`Block ${t.height} · ${t.poolName} · ${t.txCount.toLocaleString("en-US")} txs`,children:[s.jsxs("div",{className:"flex flex-col",children:[s.jsx("span",{className:"body-sm text-strong font-bold tabular-nums",children:t.height.toLocaleString("en-US")}),s.jsx("span",{className:"caption text-soft",children:c(t.time)})]}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("span",{className:"body-sm text-normal block truncate",children:t.poolName}),s.jsxs("span",{className:"caption text-soft",children:[t.txCount.toLocaleString("en-US")," txs"]})]}),s.jsxs("div",{className:"text-right",children:[s.jsx("span",{className:"body-sm text-normal block font-bold tabular-nums",children:i(t.totalFees)}),s.jsxs("span",{className:"caption text-soft",children:["~",Math.round(t.medianFee)," sat/vB"]})]})]},t.id))})})})}const j=r({...o,component:x});export{j as btcBlocksFrame};
1
+ import{j as s}from"./react-qoZPGuNy.js";import{t as c,j as i}from"./format-CfAcS4D8.js";import{f as r,aS as o,aT as m}from"./index-DyvZokhk.js";import{F as a,s as d}from"./ui-Bq3RQsdJ.js";o.schema;function x({config:l}){const{blocks:e,isLoading:n}=m(l.count);return n?s.jsx(a,{loading:!0,children:"loading blocks…"}):e.length===0?s.jsx(a,{children:"no block data yet"}):s.jsx("div",{className:"flex h-full min-h-0 flex-col",children:s.jsx("div",{className:d,children:s.jsx("div",{className:"flex flex-col gap-1.5",children:e.map(t=>s.jsxs("div",{className:"grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 rounded-md bg-white/[0.03] px-2 py-1.5",title:`Block ${t.height} · ${t.poolName} · ${t.txCount.toLocaleString("en-US")} txs`,children:[s.jsxs("div",{className:"flex flex-col",children:[s.jsx("span",{className:"body-sm text-strong font-bold tabular-nums",children:t.height.toLocaleString("en-US")}),s.jsx("span",{className:"caption text-soft",children:c(t.time)})]}),s.jsxs("div",{className:"min-w-0",children:[s.jsx("span",{className:"body-sm text-normal block truncate",children:t.poolName}),s.jsxs("span",{className:"caption text-soft",children:[t.txCount.toLocaleString("en-US")," txs"]})]}),s.jsxs("div",{className:"text-right",children:[s.jsx("span",{className:"body-sm text-normal block font-bold tabular-nums",children:i(t.totalFees)}),s.jsxs("span",{className:"caption text-soft",children:["~",Math.round(t.medianFee)," sat/vB"]})]})]},t.id))})})})}const j=r({...o,component:x});export{j as btcBlocksFrame};
@@ -1 +1 @@
1
- import{j as t}from"./react-qoZPGuNy.js";import{a as r,b as m,c as o}from"./format-CfAcS4D8.js";import{f as u,aW as c,aX as h}from"./index-CH54P4Cn.js";import{F as l}from"./ui-Bq3RQsdJ.js";c.schema;function x(n){const e=Math.max(0,Math.round((n-Date.now())/1e3)),i=Math.floor(e/86400),s=Math.floor(e%86400/3600),a=Math.floor(e%3600/60);return i>0?`in ${i}d ${s}h`:s>0?`in ${s}h ${a}m`:`in ${a}m`}function j({config:n}){const{adjustment:e,isLoading:i}=h();if(i)return t.jsx(l,{loading:!0,children:"loading difficulty…"});if(!e)return t.jsx(l,{children:"no difficulty data yet"});const{progressPercent:s,difficultyChange:a,remainingBlocks:d}=e,f=o(a);return t.jsxs("div",{className:"flex h-full min-h-0 flex-col justify-center gap-3",children:[t.jsxs("div",{className:"flex items-end justify-between gap-3",children:[t.jsxs("div",{children:[t.jsx("div",{className:"caption text-soft uppercase",children:"next adjustment"}),t.jsx("div",{className:"metric-lg leading-none",style:{color:f},children:r(a)}),t.jsx("div",{className:"body-sm text-soft",children:a>=0?"harder":"easier"})]}),t.jsxs("div",{className:"text-right",children:[t.jsx("div",{className:"body-md text-normal font-bold tabular-nums",children:x(e.estimatedRetargetDate)}),t.jsxs("div",{className:"caption text-soft",children:[d.toLocaleString("en-US")," blocks left"]})]})]}),t.jsxs("div",{children:[t.jsx("div",{className:"relative h-2.5 w-full overflow-hidden rounded-full bg-white/[0.08]",children:t.jsx("div",{className:"absolute left-0 top-0 h-full rounded-full",style:{width:`${Math.min(100,Math.max(0,s))}%`,background:"hsl(var(--zf-accent-hue, 242) 85% 72%)"}})}),t.jsxs("div",{className:"caption text-soft mt-1 tabular-nums",children:[m(s,1)," through this epoch"]})]}),n.showPrevious&&t.jsxs("div",{className:"caption text-soft border-t border-white/[0.08] pt-2",children:["previous retarget"," ",t.jsx("span",{className:"font-bold tabular-nums",style:{color:o(e.previousRetarget)},children:r(e.previousRetarget)})]})]})}const N=u({...c,component:j});export{N as btcDifficultyFrame};
1
+ import{j as t}from"./react-qoZPGuNy.js";import{a as r,b as m,c as o}from"./format-CfAcS4D8.js";import{f as u,aW as c,aX as h}from"./index-DyvZokhk.js";import{F as l}from"./ui-Bq3RQsdJ.js";c.schema;function x(n){const e=Math.max(0,Math.round((n-Date.now())/1e3)),i=Math.floor(e/86400),s=Math.floor(e%86400/3600),a=Math.floor(e%3600/60);return i>0?`in ${i}d ${s}h`:s>0?`in ${s}h ${a}m`:`in ${a}m`}function j({config:n}){const{adjustment:e,isLoading:i}=h();if(i)return t.jsx(l,{loading:!0,children:"loading difficulty…"});if(!e)return t.jsx(l,{children:"no difficulty data yet"});const{progressPercent:s,difficultyChange:a,remainingBlocks:d}=e,f=o(a);return t.jsxs("div",{className:"flex h-full min-h-0 flex-col justify-center gap-3",children:[t.jsxs("div",{className:"flex items-end justify-between gap-3",children:[t.jsxs("div",{children:[t.jsx("div",{className:"caption text-soft uppercase",children:"next adjustment"}),t.jsx("div",{className:"metric-lg leading-none",style:{color:f},children:r(a)}),t.jsx("div",{className:"body-sm text-soft",children:a>=0?"harder":"easier"})]}),t.jsxs("div",{className:"text-right",children:[t.jsx("div",{className:"body-md text-normal font-bold tabular-nums",children:x(e.estimatedRetargetDate)}),t.jsxs("div",{className:"caption text-soft",children:[d.toLocaleString("en-US")," blocks left"]})]})]}),t.jsxs("div",{children:[t.jsx("div",{className:"relative h-2.5 w-full overflow-hidden rounded-full bg-white/[0.08]",children:t.jsx("div",{className:"absolute left-0 top-0 h-full rounded-full",style:{width:`${Math.min(100,Math.max(0,s))}%`,background:"hsl(var(--zf-accent-hue, 242) 85% 72%)"}})}),t.jsxs("div",{className:"caption text-soft mt-1 tabular-nums",children:[m(s,1)," through this epoch"]})]}),n.showPrevious&&t.jsxs("div",{className:"caption text-soft border-t border-white/[0.08] pt-2",children:["previous retarget"," ",t.jsx("span",{className:"font-bold tabular-nums",style:{color:o(e.previousRetarget)},children:r(e.previousRetarget)})]})]})}const N=u({...c,component:j});export{N as btcDifficultyFrame};
@@ -1 +1 @@
1
- import{j as t}from"./react-qoZPGuNy.js";import{F as i,a as e}from"./btc-shared-DeqDaCze.js";import{f as c,aO as n,aP as f}from"./index-CH54P4Cn.js";import{F as a}from"./ui-Bq3RQsdJ.js";import"./format-CfAcS4D8.js";n.schema;const l={fastest:"Next block",halfHour:"~30 min",hour:"~1 hour",economy:"Economy",minimum:"Minimum"},u={fastest:e[0],halfHour:e[1],hour:e[2],economy:e[3],minimum:e[4]};function p({config:m}){const{fees:o,isLoading:r}=f();return r?t.jsx(a,{loading:!0,children:"loading fees…"}):o?t.jsx("div",{className:"flex h-full flex-wrap content-center items-stretch justify-center gap-2",children:m.tiers.map(s=>t.jsx(i,{className:"min-w-[64px] flex-1",color:u[s],value:o[s],caption:l[s]},s))}):t.jsx(a,{children:"no fee data yet"})}const E=c({...n,component:p});export{E as btcFeesFrame};
1
+ import{j as t}from"./react-qoZPGuNy.js";import{F as i,a as e}from"./btc-shared-DeqDaCze.js";import{f as c,aO as n,aP as f}from"./index-DyvZokhk.js";import{F as a}from"./ui-Bq3RQsdJ.js";import"./format-CfAcS4D8.js";n.schema;const l={fastest:"Next block",halfHour:"~30 min",hour:"~1 hour",economy:"Economy",minimum:"Minimum"},u={fastest:e[0],halfHour:e[1],hour:e[2],economy:e[3],minimum:e[4]};function p({config:m}){const{fees:o,isLoading:r}=f();return r?t.jsx(a,{loading:!0,children:"loading fees…"}):o?t.jsx("div",{className:"flex h-full flex-wrap content-center items-stretch justify-center gap-2",children:m.tiers.map(s=>t.jsx(i,{className:"min-w-[64px] flex-1",color:u[s],value:o[s],caption:l[s]},s))}):t.jsx(a,{children:"no fee data yet"})}const E=c({...n,component:p});export{E as btcFeesFrame};
@@ -1 +1 @@
1
- import{r as c,j as e}from"./react-qoZPGuNy.js";import{k as h,e as l}from"./format-CfAcS4D8.js";import{f as m,aU as i,aV as d}from"./index-CH54P4Cn.js";import{F as r}from"./ui-Bq3RQsdJ.js";import{M as f}from"./mini-line-chart-CHM5UBjJ.js";import"./d3-xK4fOkBU.js";import"./utils-DaT-yT0k.js";i.schema;function x({config:a}){const{data:t,isLoading:n}=d(a.window),o=c.useMemo(()=>((t==null?void 0:t.hashrates)??[]).map(s=>({date:new Date(s.time).toISOString(),value:s.hashrate})),[t==null?void 0:t.hashrates]);return n?e.jsx(r,{loading:!0,children:"loading hashrate…"}):t?e.jsxs("div",{className:"flex h-full min-h-0 flex-col justify-center gap-3",children:[e.jsxs("div",{className:"flex items-end justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"caption text-soft uppercase",children:"network hashrate"}),e.jsx("div",{className:"metric-lg text-strong leading-none",children:h(t.currentHashrate)})]}),e.jsxs("div",{className:"text-right",children:[e.jsx("div",{className:"body-md text-normal font-bold tabular-nums",children:l(t.currentDifficulty)}),e.jsx("div",{className:"caption text-soft",children:"difficulty"})]})]}),e.jsx(f,{data:o,width:320,height:54,color:"hsl(var(--zf-accent-hue, 242) 85% 72%)"}),e.jsxs("div",{className:"caption text-soft",children:["past ",a.window]})]}):e.jsx(r,{children:"no hashrate data yet"})}const b=m({...i,component:x});export{b as btcHashrateFrame};
1
+ import{r as c,j as e}from"./react-qoZPGuNy.js";import{k as h,e as l}from"./format-CfAcS4D8.js";import{f as m,aU as i,aV as d}from"./index-DyvZokhk.js";import{F as r}from"./ui-Bq3RQsdJ.js";import{M as f}from"./mini-line-chart-CHM5UBjJ.js";import"./d3-xK4fOkBU.js";import"./utils-DaT-yT0k.js";i.schema;function x({config:a}){const{data:t,isLoading:n}=d(a.window),o=c.useMemo(()=>((t==null?void 0:t.hashrates)??[]).map(s=>({date:new Date(s.time).toISOString(),value:s.hashrate})),[t==null?void 0:t.hashrates]);return n?e.jsx(r,{loading:!0,children:"loading hashrate…"}):t?e.jsxs("div",{className:"flex h-full min-h-0 flex-col justify-center gap-3",children:[e.jsxs("div",{className:"flex items-end justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"caption text-soft uppercase",children:"network hashrate"}),e.jsx("div",{className:"metric-lg text-strong leading-none",children:h(t.currentHashrate)})]}),e.jsxs("div",{className:"text-right",children:[e.jsx("div",{className:"body-md text-normal font-bold tabular-nums",children:l(t.currentDifficulty)}),e.jsx("div",{className:"caption text-soft",children:"difficulty"})]})]}),e.jsx(f,{data:o,width:320,height:54,color:"hsl(var(--zf-accent-hue, 242) 85% 72%)"}),e.jsxs("div",{className:"caption text-soft",children:["past ",a.window]})]}):e.jsx(r,{children:"no hashrate data yet"})}const b=m({...i,component:x});export{b as btcHashrateFrame};
@@ -1 +1 @@
1
- import{j as e}from"./react-qoZPGuNy.js";import{F as m,f as d}from"./btc-shared-DeqDaCze.js";import{e as x}from"./format-CfAcS4D8.js";import{f as p,aQ as o,aR as f}from"./index-CH54P4Cn.js";import{F as a,a as j}from"./ui-Bq3RQsdJ.js";o.schema;function u({config:i}){const{state:s,isLoading:n}=f();if(n)return e.jsx(a,{loading:!0,children:"loading mempool…"});if(!s)return e.jsx(a,{children:"no mempool data yet"});const l=s.projected.slice(0,i.projectedBlocks),r=(s.vsize/1e6).toFixed(1);return e.jsxs("div",{className:"flex h-full min-h-0 flex-col justify-center gap-3",children:[e.jsxs("div",{className:"flex items-end justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"caption text-soft uppercase",children:"unconfirmed"}),e.jsx("div",{className:"metric-lg text-strong leading-none",children:s.count.toLocaleString("en-US")}),e.jsx("div",{className:"body-sm text-soft",children:"transactions"})]}),e.jsxs("div",{className:"text-right",children:[e.jsxs("div",{className:"body-md text-normal font-bold tabular-nums",children:[r," MvB"]}),e.jsx("div",{className:"caption text-soft",children:"pending vsize"})]})]}),e.jsx("div",{className:`flex gap-1.5 ${j}`,children:l.map((t,c)=>e.jsx(m,{className:"min-w-[76px]",color:d(t.medianFee),value:`~${Math.round(t.medianFee)}`,caption:`${x(t.nTx)} tx`},c))})]})}const M=p({...o,component:u});export{M as btcMempoolFrame};
1
+ import{j as e}from"./react-qoZPGuNy.js";import{F as m,f as d}from"./btc-shared-DeqDaCze.js";import{e as x}from"./format-CfAcS4D8.js";import{f as p,aQ as o,aR as f}from"./index-DyvZokhk.js";import{F as a,a as j}from"./ui-Bq3RQsdJ.js";o.schema;function u({config:i}){const{state:s,isLoading:n}=f();if(n)return e.jsx(a,{loading:!0,children:"loading mempool…"});if(!s)return e.jsx(a,{children:"no mempool data yet"});const l=s.projected.slice(0,i.projectedBlocks),r=(s.vsize/1e6).toFixed(1);return e.jsxs("div",{className:"flex h-full min-h-0 flex-col justify-center gap-3",children:[e.jsxs("div",{className:"flex items-end justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"caption text-soft uppercase",children:"unconfirmed"}),e.jsx("div",{className:"metric-lg text-strong leading-none",children:s.count.toLocaleString("en-US")}),e.jsx("div",{className:"body-sm text-soft",children:"transactions"})]}),e.jsxs("div",{className:"text-right",children:[e.jsxs("div",{className:"body-md text-normal font-bold tabular-nums",children:[r," MvB"]}),e.jsx("div",{className:"caption text-soft",children:"pending vsize"})]})]}),e.jsx("div",{className:`flex gap-1.5 ${j}`,children:l.map((t,c)=>e.jsx(m,{className:"min-w-[76px]",color:d(t.medianFee),value:`~${Math.round(t.medianFee)}`,caption:`${x(t.nTx)} tx`},c))})]})}const M=p({...o,component:u});export{M as btcMempoolFrame};
@@ -1 +1 @@
1
- import{r as n,j as e}from"./react-qoZPGuNy.js";import{i as C}from"./content-shared-BZ1XzrJx.js";import{f as F,aG as N}from"./index-CH54P4Cn.js";import{s as A}from"./ui-Bq3RQsdJ.js";N.schema;const R="var(--color-highlight)";function x(t){const s=Number(t);return Number.isFinite(s)?s:0}function d({label:t,value:s,onChange:i,prefix:r,suffix:l}){return e.jsxs("label",{className:"flex flex-col gap-1",children:[e.jsx("span",{className:"caption text-soft uppercase tracking-[0.12em]",children:t}),e.jsxs("span",{className:`flex items-center gap-1 px-2 py-1.5 ${C}`,children:[r&&e.jsx("span",{className:"body-sm text-soft",children:r}),e.jsx("input",{type:"number",inputMode:"decimal",value:s,onChange:c=>i(c.target.value),className:"body-sm text-normal min-w-0 flex-1 bg-transparent text-right tabular-nums outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"}),l&&e.jsx("span",{className:"body-sm text-soft",children:l})]})]})}function M({config:t}){const[s,i]=n.useState(String(t.account)),[r,l]=n.useState(String(t.riskPct)),[c,g]=n.useState(String(t.entry)),[h,v]=n.useState(String(t.stop));n.useEffect(()=>i(String(t.account)),[t.account]),n.useEffect(()=>l(String(t.riskPct)),[t.riskPct]),n.useEffect(()=>g(String(t.entry)),[t.entry]),n.useEffect(()=>v(String(t.stop)),[t.stop]);const a=n.useMemo(()=>{const o=x(s),w=x(r),m=x(c),j=x(h),S=o*w/100,p=Math.abs(m-j),y=p>0?S/p:0,E=y*m,P=m===j?"—":j<m?"long":"short";return{riskAmount:S,perUnit:p,size:y,value:E,side:P,hasStop:p>0}},[s,r,c,h]),u=t.currency,f=o=>`${u}${o.toLocaleString(void 0,{maximumFractionDigits:2})}`,k=o=>o.toLocaleString(void 0,{maximumFractionDigits:o>=1?2:4});return e.jsxs("div",{className:`${A} flex flex-col gap-3`,children:[e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(d,{label:"Account",value:s,onChange:i,prefix:u}),e.jsx(d,{label:"Risk",value:r,onChange:l,suffix:"%"}),e.jsx(d,{label:"Entry",value:c,onChange:g,prefix:u}),e.jsx(d,{label:"Stop",value:h,onChange:v,prefix:u})]}),e.jsxs("div",{className:"flex flex-col gap-1.5 rounded-lg border border-white/[0.07] bg-white/[0.03] p-2.5",children:[e.jsxs("div",{className:"flex items-baseline justify-between",children:[e.jsx("span",{className:"caption text-soft uppercase tracking-[0.12em]",children:"Position size"}),e.jsx("span",{className:"body-lg font-extrabold tabular-nums",style:{color:a.hasStop?R:void 0},children:a.hasStop?k(a.size):"—"})]}),e.jsx(b,{label:"Risk amount",value:f(a.riskAmount)}),e.jsx(b,{label:"Per-unit risk",value:a.hasStop?f(a.perUnit):"set a stop"}),e.jsx(b,{label:"Position value",value:a.hasStop?f(a.value):"—"}),e.jsx(b,{label:"Direction",value:a.side})]})]})}function b({label:t,value:s}){return e.jsxs("div",{className:"flex items-baseline justify-between",children:[e.jsx("span",{className:"body-sm text-soft",children:t}),e.jsx("span",{className:"body-sm text-normal tabular-nums",children:s})]})}const U=F({...N,component:M});export{U as calculatorFrame};
1
+ import{r as n,j as e}from"./react-qoZPGuNy.js";import{i as C}from"./content-shared-BZ1XzrJx.js";import{f as F,aG as N}from"./index-DyvZokhk.js";import{s as A}from"./ui-Bq3RQsdJ.js";N.schema;const R="var(--color-highlight)";function x(t){const s=Number(t);return Number.isFinite(s)?s:0}function d({label:t,value:s,onChange:i,prefix:r,suffix:l}){return e.jsxs("label",{className:"flex flex-col gap-1",children:[e.jsx("span",{className:"caption text-soft uppercase tracking-[0.12em]",children:t}),e.jsxs("span",{className:`flex items-center gap-1 px-2 py-1.5 ${C}`,children:[r&&e.jsx("span",{className:"body-sm text-soft",children:r}),e.jsx("input",{type:"number",inputMode:"decimal",value:s,onChange:c=>i(c.target.value),className:"body-sm text-normal min-w-0 flex-1 bg-transparent text-right tabular-nums outline-none [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"}),l&&e.jsx("span",{className:"body-sm text-soft",children:l})]})]})}function M({config:t}){const[s,i]=n.useState(String(t.account)),[r,l]=n.useState(String(t.riskPct)),[c,g]=n.useState(String(t.entry)),[h,v]=n.useState(String(t.stop));n.useEffect(()=>i(String(t.account)),[t.account]),n.useEffect(()=>l(String(t.riskPct)),[t.riskPct]),n.useEffect(()=>g(String(t.entry)),[t.entry]),n.useEffect(()=>v(String(t.stop)),[t.stop]);const a=n.useMemo(()=>{const o=x(s),w=x(r),m=x(c),j=x(h),S=o*w/100,p=Math.abs(m-j),y=p>0?S/p:0,E=y*m,P=m===j?"—":j<m?"long":"short";return{riskAmount:S,perUnit:p,size:y,value:E,side:P,hasStop:p>0}},[s,r,c,h]),u=t.currency,f=o=>`${u}${o.toLocaleString(void 0,{maximumFractionDigits:2})}`,k=o=>o.toLocaleString(void 0,{maximumFractionDigits:o>=1?2:4});return e.jsxs("div",{className:`${A} flex flex-col gap-3`,children:[e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(d,{label:"Account",value:s,onChange:i,prefix:u}),e.jsx(d,{label:"Risk",value:r,onChange:l,suffix:"%"}),e.jsx(d,{label:"Entry",value:c,onChange:g,prefix:u}),e.jsx(d,{label:"Stop",value:h,onChange:v,prefix:u})]}),e.jsxs("div",{className:"flex flex-col gap-1.5 rounded-lg border border-white/[0.07] bg-white/[0.03] p-2.5",children:[e.jsxs("div",{className:"flex items-baseline justify-between",children:[e.jsx("span",{className:"caption text-soft uppercase tracking-[0.12em]",children:"Position size"}),e.jsx("span",{className:"body-lg font-extrabold tabular-nums",style:{color:a.hasStop?R:void 0},children:a.hasStop?k(a.size):"—"})]}),e.jsx(b,{label:"Risk amount",value:f(a.riskAmount)}),e.jsx(b,{label:"Per-unit risk",value:a.hasStop?f(a.perUnit):"set a stop"}),e.jsx(b,{label:"Position value",value:a.hasStop?f(a.value):"—"}),e.jsx(b,{label:"Direction",value:a.side})]})]})}function b({label:t,value:s}){return e.jsxs("div",{className:"flex items-baseline justify-between",children:[e.jsx("span",{className:"body-sm text-soft",children:t}),e.jsx("span",{className:"body-sm text-normal tabular-nums",children:s})]})}const U=F({...N,component:M});export{U as calculatorFrame};
@@ -1 +1 @@
1
- import{r as x,j as t}from"./react-qoZPGuNy.js";import{f as p,bb as o,m as u}from"./index-CH54P4Cn.js";import{s as b}from"./ui-Bq3RQsdJ.js";o.schema;function f({config:s}){const r=u(),[i,m]=x.useState(s.checked),l=r?s.checked:i,h=a=>{const e=s.items.map((k,c)=>c===a?!l[c]:!!l[c]);r?r({checked:e}):m(e)},d=s.items.filter((a,e)=>l[e]).length,n=s.title.trim();return t.jsxs("div",{className:"flex h-full w-full flex-col",children:[t.jsxs("div",{className:"mb-1 flex shrink-0 items-baseline justify-between gap-2",children:[n&&t.jsx("div",{className:"body-sm text-strong truncate font-semibold",children:n}),t.jsxs("div",{className:"caption text-soft shrink-0 tabular-nums",children:[d,"/",s.items.length]})]}),t.jsx("div",{className:`min-h-0 flex-1 ${b}`,children:s.items.map((a,e)=>t.jsxs("button",{type:"button",onClick:()=>h(e),className:"flex w-full items-center gap-2 py-1 text-left",children:[t.jsx("span",{className:"caption flex h-4 w-4 shrink-0 items-center justify-center rounded border leading-none",style:{borderColor:l[e]?"var(--color-highlight)":"rgba(255,255,255,0.2)",background:l[e]?"var(--color-highlight)":"transparent",color:l[e]?"#0b0e14":"transparent"},children:"✓"}),t.jsx("span",{className:`body-sm ${l[e]?"text-disabled line-through":"text-normal"}`,children:a})]},e))})]})}const v=p({...o,component:f});export{v as checklistFrame};
1
+ import{r as x,j as t}from"./react-qoZPGuNy.js";import{f as p,bP as o,m as u}from"./index-DyvZokhk.js";import{s as b}from"./ui-Bq3RQsdJ.js";o.schema;function f({config:s}){const r=u(),[i,m]=x.useState(s.checked),l=r?s.checked:i,h=a=>{const e=s.items.map((k,c)=>c===a?!l[c]:!!l[c]);r?r({checked:e}):m(e)},d=s.items.filter((a,e)=>l[e]).length,n=s.title.trim();return t.jsxs("div",{className:"flex h-full w-full flex-col",children:[t.jsxs("div",{className:"mb-1 flex shrink-0 items-baseline justify-between gap-2",children:[n&&t.jsx("div",{className:"body-sm text-strong truncate font-semibold",children:n}),t.jsxs("div",{className:"caption text-soft shrink-0 tabular-nums",children:[d,"/",s.items.length]})]}),t.jsx("div",{className:`min-h-0 flex-1 ${b}`,children:s.items.map((a,e)=>t.jsxs("button",{type:"button",onClick:()=>h(e),className:"flex w-full items-center gap-2 py-1 text-left",children:[t.jsx("span",{className:"caption flex h-4 w-4 shrink-0 items-center justify-center rounded border leading-none",style:{borderColor:l[e]?"var(--color-highlight)":"rgba(255,255,255,0.2)",background:l[e]?"var(--color-highlight)":"transparent",color:l[e]?"#0b0e14":"transparent"},children:"✓"}),t.jsx("span",{className:`body-sm ${l[e]?"text-disabled line-through":"text-normal"}`,children:a})]},e))})]})}const v=p({...o,component:f});export{v as checklistFrame};
@@ -1 +1 @@
1
- import{r as s,j as o}from"./react-qoZPGuNy.js";import{f as R,q as y}from"./index-CH54P4Cn.js";import{F as b}from"./ui-Bq3RQsdJ.js";import{u as m}from"./use-countdown-BmcF-qdL.js";y.schema;function u(e){const r={hour:"",minute:"",second:"",fractional:"",period:""};for(const n of e.formatToParts(new Date))n.type==="hour"?r.hour=n.value:n.type==="minute"?r.minute=n.value:n.type==="second"?r.second=n.value:n.type==="fractionalSecond"?r.fractional=n.value:n.type==="dayPeriod"&&(r.period=n.value);return r}function j({config:e}){const r=s.useRef(null),n=s.useRef(null),f=s.useRef(null),p=s.useRef(null),h=s.useRef(null),a=e.timezone.trim()||void 0,c=e.showSeconds||e.showMillis,t=s.useMemo(()=>{var l;try{const z=new Intl.DateTimeFormat(void 0,{timeZone:a,hour:"2-digit",minute:"2-digit",second:c?"2-digit":void 0,fractionalSecondDigits:e.showMillis?3:void 0,hour12:e.hour12}),v=e.showDate?new Intl.DateTimeFormat(void 0,{timeZone:a,weekday:"short",month:"short",day:"numeric"}):null;let x="";return e.showTimezone&&(x=((l=new Intl.DateTimeFormat(void 0,{timeZone:a,hour:"2-digit",timeZoneName:"short"}).formatToParts(new Date).find(D=>D.type==="timeZoneName"))==null?void 0:l.value)??""),{time:z,date:v,zone:x,error:null}}catch{return{time:null,date:null,zone:"",error:a??"invalid timezone"}}},[a,c,e.showMillis,e.hour12,e.showDate,e.showTimezone]);if(m({ref:r,getRemainingMs:()=>Date.now(),format:()=>{if(!t.time)return"";const l=u(t.time);return`${l.hour}:${l.minute}`}}),m({ref:n,getRemainingMs:()=>Date.now(),format:()=>t.time?`:${u(t.time).second}`:""}),m({ref:f,getRemainingMs:()=>Date.now(),format:()=>t.time?`.${u(t.time).fractional}`:""}),m({ref:p,getRemainingMs:()=>Date.now(),format:()=>t.time?u(t.time).period:""}),m({ref:h,getRemainingMs:()=>Date.now(),format:()=>t.date?t.date.format(new Date):""}),t.error)return o.jsxs(b,{children:["unknown timezone: ",t.error]});const i=u(t.time),d="var(--color-highlight)",w="0 0 18px hsl(var(--zf-accent-hue, 242) 92% 70% / 0.45)";return o.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-2 text-center [container-type:size]",children:[o.jsxs("div",{className:"text-strong inline-flex max-w-full items-baseline justify-center whitespace-nowrap font-dmsans font-extrabold leading-none tracking-[-0.01em] tabular-nums",style:{fontSize:"clamp(1.6rem, 37cqmin, 5.5rem)"},children:[o.jsx("span",{ref:r,suppressHydrationWarning:!0,children:`${i.hour}:${i.minute}`}),c&&o.jsx("span",{ref:n,suppressHydrationWarning:!0,className:"font-bold",style:{fontSize:"0.46em",color:d,textShadow:w},children:`:${i.second}`}),e.showMillis&&o.jsx("span",{ref:f,suppressHydrationWarning:!0,className:"font-semibold",style:{fontSize:"0.3em",color:d,opacity:.65},children:`.${i.fractional}`}),e.hour12&&o.jsx("span",{ref:p,suppressHydrationWarning:!0,className:"text-soft ml-[0.3em] self-center font-semibold uppercase",style:{fontSize:"0.3em",letterSpacing:"0.08em"},children:i.period})]}),e.showDate&&t.date&&o.jsx("div",{ref:h,suppressHydrationWarning:!0,className:"caption text-soft tabular-nums",children:t.date.format(new Date)}),(e.label||t.zone)&&o.jsxs("div",{className:"caption text-soft inline-flex items-center gap-1.5 uppercase tracking-[0.18em]",children:[o.jsx("span",{"aria-hidden":!0,className:"inline-block h-1 w-1 rounded-full",style:{background:d,boxShadow:w}}),e.label&&t.zone?`${e.label} · ${t.zone}`:e.label||t.zone]})]})}const k=R({...y,component:j});export{k as clockFrame};
1
+ import{r as s,j as o}from"./react-qoZPGuNy.js";import{f as R,q as y}from"./index-DyvZokhk.js";import{F as b}from"./ui-Bq3RQsdJ.js";import{u as m}from"./use-countdown-BmcF-qdL.js";y.schema;function u(e){const r={hour:"",minute:"",second:"",fractional:"",period:""};for(const n of e.formatToParts(new Date))n.type==="hour"?r.hour=n.value:n.type==="minute"?r.minute=n.value:n.type==="second"?r.second=n.value:n.type==="fractionalSecond"?r.fractional=n.value:n.type==="dayPeriod"&&(r.period=n.value);return r}function j({config:e}){const r=s.useRef(null),n=s.useRef(null),f=s.useRef(null),p=s.useRef(null),h=s.useRef(null),a=e.timezone.trim()||void 0,c=e.showSeconds||e.showMillis,t=s.useMemo(()=>{var l;try{const z=new Intl.DateTimeFormat(void 0,{timeZone:a,hour:"2-digit",minute:"2-digit",second:c?"2-digit":void 0,fractionalSecondDigits:e.showMillis?3:void 0,hour12:e.hour12}),v=e.showDate?new Intl.DateTimeFormat(void 0,{timeZone:a,weekday:"short",month:"short",day:"numeric"}):null;let x="";return e.showTimezone&&(x=((l=new Intl.DateTimeFormat(void 0,{timeZone:a,hour:"2-digit",timeZoneName:"short"}).formatToParts(new Date).find(D=>D.type==="timeZoneName"))==null?void 0:l.value)??""),{time:z,date:v,zone:x,error:null}}catch{return{time:null,date:null,zone:"",error:a??"invalid timezone"}}},[a,c,e.showMillis,e.hour12,e.showDate,e.showTimezone]);if(m({ref:r,getRemainingMs:()=>Date.now(),format:()=>{if(!t.time)return"";const l=u(t.time);return`${l.hour}:${l.minute}`}}),m({ref:n,getRemainingMs:()=>Date.now(),format:()=>t.time?`:${u(t.time).second}`:""}),m({ref:f,getRemainingMs:()=>Date.now(),format:()=>t.time?`.${u(t.time).fractional}`:""}),m({ref:p,getRemainingMs:()=>Date.now(),format:()=>t.time?u(t.time).period:""}),m({ref:h,getRemainingMs:()=>Date.now(),format:()=>t.date?t.date.format(new Date):""}),t.error)return o.jsxs(b,{children:["unknown timezone: ",t.error]});const i=u(t.time),d="var(--color-highlight)",w="0 0 18px hsl(var(--zf-accent-hue, 242) 92% 70% / 0.45)";return o.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-2 text-center [container-type:size]",children:[o.jsxs("div",{className:"text-strong inline-flex max-w-full items-baseline justify-center whitespace-nowrap font-dmsans font-extrabold leading-none tracking-[-0.01em] tabular-nums",style:{fontSize:"clamp(1.6rem, 37cqmin, 5.5rem)"},children:[o.jsx("span",{ref:r,suppressHydrationWarning:!0,children:`${i.hour}:${i.minute}`}),c&&o.jsx("span",{ref:n,suppressHydrationWarning:!0,className:"font-bold",style:{fontSize:"0.46em",color:d,textShadow:w},children:`:${i.second}`}),e.showMillis&&o.jsx("span",{ref:f,suppressHydrationWarning:!0,className:"font-semibold",style:{fontSize:"0.3em",color:d,opacity:.65},children:`.${i.fractional}`}),e.hour12&&o.jsx("span",{ref:p,suppressHydrationWarning:!0,className:"text-soft ml-[0.3em] self-center font-semibold uppercase",style:{fontSize:"0.3em",letterSpacing:"0.08em"},children:i.period})]}),e.showDate&&t.date&&o.jsx("div",{ref:h,suppressHydrationWarning:!0,className:"caption text-soft tabular-nums",children:t.date.format(new Date)}),(e.label||t.zone)&&o.jsxs("div",{className:"caption text-soft inline-flex items-center gap-1.5 uppercase tracking-[0.18em]",children:[o.jsx("span",{"aria-hidden":!0,className:"inline-block h-1 w-1 rounded-full",style:{background:d,boxShadow:w}}),e.label&&t.zone?`${e.label} · ${t.zone}`:e.label||t.zone]})]})}const k=R({...y,component:j});export{k as clockFrame};
@@ -1 +1 @@
1
- import{r as p,j as r}from"./react-qoZPGuNy.js";import{M as l}from"./mover-row-C8040L85.js";import{f as h,b5 as t,b6 as x}from"./index-CH54P4Cn.js";import{F as n}from"./ui-Bq3RQsdJ.js";import"./format-CfAcS4D8.js";t.schema;function u({config:e}){const{entries:o,isLoading:c}=x(),{gainers:i,losers:m}=p.useMemo(()=>{const s=o.filter(a=>a.rank<=e.minRank&&a.volume24hUsd>0).map(a=>({symbol:a.symbol,price:a.priceUsd,chg:a.changePct[e.window]??0})).sort((a,d)=>d.chg-a.chg);return{gainers:s.slice(0,e.count),losers:s.slice(-e.count).reverse()}},[o,e.window,e.count,e.minRank]);return c?r.jsx(n,{loading:!0,children:"loading movers…"}):i.length===0?r.jsx(n,{children:"no mover data yet"}):r.jsxs("div",{className:"grid h-full grid-cols-2 gap-x-4 overflow-hidden",children:[r.jsxs("div",{className:"flex flex-col gap-1.5",children:[r.jsxs("div",{className:"caption text-soft uppercase tracking-wide",children:["gainers · ",e.window]}),i.map(s=>r.jsx(l,{symbol:s.symbol,label:s.symbol,price:s.price,changePct:s.chg},s.symbol))]}),r.jsxs("div",{className:"flex flex-col gap-1.5",children:[r.jsxs("div",{className:"caption text-soft uppercase tracking-wide",children:["losers · ",e.window]}),m.map(s=>r.jsx(l,{symbol:s.symbol,label:s.symbol,price:s.price,changePct:s.chg},s.symbol))]})]})}const f=h({...t,component:u});export{f as coinMoversFrame};
1
+ import{r as p,j as r}from"./react-qoZPGuNy.js";import{M as l}from"./mover-row-Dg96EIqq.js";import{f as h,b5 as t,b6 as x}from"./index-DyvZokhk.js";import{F as n}from"./ui-Bq3RQsdJ.js";import"./format-CfAcS4D8.js";t.schema;function u({config:e}){const{entries:o,isLoading:c}=x(),{gainers:i,losers:m}=p.useMemo(()=>{const s=o.filter(a=>a.rank<=e.minRank&&a.volume24hUsd>0).map(a=>({symbol:a.symbol,price:a.priceUsd,chg:a.changePct[e.window]??0})).sort((a,d)=>d.chg-a.chg);return{gainers:s.slice(0,e.count),losers:s.slice(-e.count).reverse()}},[o,e.window,e.count,e.minRank]);return c?r.jsx(n,{loading:!0,children:"loading movers…"}):i.length===0?r.jsx(n,{children:"no mover data yet"}):r.jsxs("div",{className:"grid h-full grid-cols-2 gap-x-4 overflow-hidden",children:[r.jsxs("div",{className:"flex flex-col gap-1.5",children:[r.jsxs("div",{className:"caption text-soft uppercase tracking-wide",children:["gainers · ",e.window]}),i.map(s=>r.jsx(l,{symbol:s.symbol,label:s.symbol,price:s.price,changePct:s.chg},s.symbol))]}),r.jsxs("div",{className:"flex flex-col gap-1.5",children:[r.jsxs("div",{className:"caption text-soft uppercase tracking-wide",children:["losers · ",e.window]}),m.map(s=>r.jsx(l,{symbol:s.symbol,label:s.symbol,price:s.price,changePct:s.chg},s.symbol))]})]})}const f=h({...t,component:u});export{f as coinMoversFrame};
@@ -1 +1 @@
1
- import{r,j as t}from"./react-qoZPGuNy.js";import{f as z,aE as F}from"./index-CH54P4Cn.js";import{F as S}from"./ui-Bq3RQsdJ.js";import{u as g}from"./use-countdown-BmcF-qdL.js";F.schema;const v=864e5,b=36e5,D=6e4;function f(n){let s=Math.max(0,n);const l=Math.floor(s/v);s-=l*v;const m=Math.floor(s/b);s-=m*b;const u=Math.floor(s/D);s-=u*D;const o=Math.floor(s/1e3);return{days:l,hours:m,minutes:u,seconds:o}}const y="var(--color-highlight)",N="0 0 18px hsl(var(--zf-accent-hue, 242) 92% 70% / 0.45)",c=n=>String(n).padStart(2,"0");function T({config:n}){const s=r.useRef(null),l=r.useRef(null),m=r.useRef(null),u=r.useRef(null),o=n.target.trim(),a=r.useMemo(()=>{if(!o)return null;const e=new Date(o).getTime();return Number.isFinite(e)?e:NaN},[o]),i=a!=null&&!Number.isNaN(a),[p,x]=r.useState(i&&a<=Date.now());r.useEffect(()=>{if(!i)return;const e=a-Date.now();if(e<=0){x(!0);return}x(!1);const w=window.setTimeout(()=>x(!0),e);return()=>window.clearTimeout(w)},[i,a]);const d=()=>i?a-Date.now():0;g({ref:s,getRemainingMs:d,format:e=>String(f(e).days)}),g({ref:l,getRemainingMs:d,format:e=>c(f(e).hours)}),g({ref:m,getRemainingMs:d,format:e=>c(f(e).minutes)}),g({ref:u,getRemainingMs:d,format:e=>c(f(e).seconds)});const R=r.useMemo(()=>i?new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}).format(new Date(a)):"",[i,a]);if(!o)return t.jsx(S,{children:"set a target date & time"});if(!i)return t.jsxs(S,{children:["invalid target date: ",o]});const h=f(d()),k=[[s,String(h.days),"days"],[l,c(h.hours),"hrs"],[m,c(h.minutes),"min"],[u,c(h.seconds),"sec"]];return t.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-2 text-center [container-type:size]",children:[n.label&&t.jsxs("div",{className:"caption text-soft inline-flex items-center gap-1.5 uppercase tracking-[0.18em]",children:[t.jsx("span",{"aria-hidden":!0,className:"inline-block h-1 w-1 rounded-full",style:{background:y,boxShadow:N}}),n.label]}),t.jsx("div",{className:"flex items-start justify-center gap-[0.5em] leading-none tabular-nums",style:{fontSize:"clamp(0.9rem, 20cqmin, 2.8rem)"},children:k.map(([e,w,j],M)=>t.jsxs("div",{className:"flex flex-col items-center gap-[0.25em]",children:[t.jsx("span",{ref:e,suppressHydrationWarning:!0,className:"text-strong font-dmsans font-extrabold tracking-[-0.01em]",style:{fontSize:"1em",color:M===3&&!p?y:void 0,textShadow:M===3&&!p?N:void 0},children:w}),t.jsx("span",{className:"text-soft uppercase tracking-[0.12em]",style:{fontSize:"0.26em"},children:j})]},j))}),p?t.jsx("div",{className:"caption font-semibold uppercase tracking-[0.2em]",style:{color:y,textShadow:N},children:"reached"}):n.showTarget&&R&&t.jsx("div",{className:"caption text-soft tabular-nums",children:R})]})}const q=z({...F,component:T});export{q as countdownFrame};
1
+ import{r,j as t}from"./react-qoZPGuNy.js";import{f as z,aE as F}from"./index-DyvZokhk.js";import{F as S}from"./ui-Bq3RQsdJ.js";import{u as g}from"./use-countdown-BmcF-qdL.js";F.schema;const v=864e5,b=36e5,D=6e4;function f(n){let s=Math.max(0,n);const l=Math.floor(s/v);s-=l*v;const m=Math.floor(s/b);s-=m*b;const u=Math.floor(s/D);s-=u*D;const o=Math.floor(s/1e3);return{days:l,hours:m,minutes:u,seconds:o}}const y="var(--color-highlight)",N="0 0 18px hsl(var(--zf-accent-hue, 242) 92% 70% / 0.45)",c=n=>String(n).padStart(2,"0");function T({config:n}){const s=r.useRef(null),l=r.useRef(null),m=r.useRef(null),u=r.useRef(null),o=n.target.trim(),a=r.useMemo(()=>{if(!o)return null;const e=new Date(o).getTime();return Number.isFinite(e)?e:NaN},[o]),i=a!=null&&!Number.isNaN(a),[p,x]=r.useState(i&&a<=Date.now());r.useEffect(()=>{if(!i)return;const e=a-Date.now();if(e<=0){x(!0);return}x(!1);const w=window.setTimeout(()=>x(!0),e);return()=>window.clearTimeout(w)},[i,a]);const d=()=>i?a-Date.now():0;g({ref:s,getRemainingMs:d,format:e=>String(f(e).days)}),g({ref:l,getRemainingMs:d,format:e=>c(f(e).hours)}),g({ref:m,getRemainingMs:d,format:e=>c(f(e).minutes)}),g({ref:u,getRemainingMs:d,format:e=>c(f(e).seconds)});const R=r.useMemo(()=>i?new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}).format(new Date(a)):"",[i,a]);if(!o)return t.jsx(S,{children:"set a target date & time"});if(!i)return t.jsxs(S,{children:["invalid target date: ",o]});const h=f(d()),k=[[s,String(h.days),"days"],[l,c(h.hours),"hrs"],[m,c(h.minutes),"min"],[u,c(h.seconds),"sec"]];return t.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-2 text-center [container-type:size]",children:[n.label&&t.jsxs("div",{className:"caption text-soft inline-flex items-center gap-1.5 uppercase tracking-[0.18em]",children:[t.jsx("span",{"aria-hidden":!0,className:"inline-block h-1 w-1 rounded-full",style:{background:y,boxShadow:N}}),n.label]}),t.jsx("div",{className:"flex items-start justify-center gap-[0.5em] leading-none tabular-nums",style:{fontSize:"clamp(0.9rem, 20cqmin, 2.8rem)"},children:k.map(([e,w,j],M)=>t.jsxs("div",{className:"flex flex-col items-center gap-[0.25em]",children:[t.jsx("span",{ref:e,suppressHydrationWarning:!0,className:"text-strong font-dmsans font-extrabold tracking-[-0.01em]",style:{fontSize:"1em",color:M===3&&!p?y:void 0,textShadow:M===3&&!p?N:void 0},children:w}),t.jsx("span",{className:"text-soft uppercase tracking-[0.12em]",style:{fontSize:"0.26em"},children:j})]},j))}),p?t.jsx("div",{className:"caption font-semibold uppercase tracking-[0.2em]",style:{color:y,textShadow:N},children:"reached"}):n.showTarget&&R&&t.jsx("div",{className:"caption text-soft tabular-nums",children:R})]})}const q=z({...F,component:T});export{q as countdownFrame};
@@ -0,0 +1 @@
1
+ import{j as s}from"./react-qoZPGuNy.js";import{a as i}from"./indicators-CogwjDn9.js";import{M as f}from"./mini-line-chart-CHM5UBjJ.js";const x="#cbd5e1",u="#f5a524";function h({caption:e,headline:n,headlineColor:a,zone:o,sub:t,sparkline:r,sparkColor:l}){const c=i(r);return s.jsxs("div",{className:"flex h-full min-h-0 flex-col justify-center gap-2",children:[s.jsx("div",{className:"caption text-soft",children:e}),s.jsx("div",{className:"metric-xl leading-none",style:{color:a,textShadow:`0 0 24px ${a}44`},children:n}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"caption rounded-full px-2 py-0.5 font-semibold",style:{color:o.color,background:`${o.color}1f`},children:o.label}),t!=null&&s.jsx("span",{className:"caption text-soft truncate",children:t})]}),c.length>1&&s.jsx(f,{data:c,width:280,height:44,color:l,className:"w-full"})]})}function N(e,n,a){for(const o of n){const t=o.upTo===void 0||e<o.upTo,r=o.from===void 0||e>=o.from;if(t&&r)return o.zone}return a}export{h as M,x as Z,u as a,N as z};
@@ -0,0 +1 @@
1
+ import{r as T,j as e}from"./react-qoZPGuNy.js";import{D as _,U as $}from"./format-CfAcS4D8.js";import{Z as A}from"./cycle-shared-BOGcJDzT.js";import{s as g,r as B,e as H}from"./indicators-CogwjDn9.js";import{f as W,bl as E,b8 as q,bb as z,be as G}from"./index-DyvZokhk.js";import{M as J}from"./metric-row-BVVhjsjK.js";import{F,s as K}from"./ui-Bq3RQsdJ.js";import"./mini-line-chart-CHM5UBjJ.js";import"./d3-xK4fOkBU.js";import"./utils-DaT-yT0k.js";E.schema;function p(f){for(let i=f.length-1;i>=0;i--)if(f[i]!==null)return f[i];return null}function Q({config:f}){const{valuation:i,isLoading:U}=q(),{extras:d}=z(),{history:N,isLoading:Z}=G("btc"),h=f.mode==="peak",y=T.useMemo(()=>{if(!i)return[];const l=N.map(t=>t.value),C=l.at(-1)??null,L=p(g(l,200)),o=C!==null&&L?C/L:null,a=p(B(l,14)),S=p(g(l,111)),V=p(g(l,350)),M=S!==null&&V?S/(2*V):null,I=H(l,150).at(-1)??null,O=p(g(l,471)),j=I!==null&&O?I/O:null,r=(d==null?void 0:d.puell)??null,{mvrv:c,mvrvZScore:m,nupl:u}=i,n=(t,x,D,k,w)=>({name:t,value:x,display:D,threshold:k,fired:x!==null&&w}),P=t=>t!==null?`${(t*100).toFixed(0)}%`:"—",s=(t,x=2)=>t!==null?t.toFixed(x):"—";return h?[n("MVRV",c,s(c),"≥ 3",(c??0)>=3),n("MVRV Z-Score",m,s(m),"≥ 7",(m??0)>=7),n("NUPL",u,P(u),"≥ 75%",(u??0)>=.75),n("Mayer Multiple",o,s(o),"≥ 2.4",(o??0)>=2.4),n("Puell Multiple",r,s(r),"≥ 4",(r??0)>=4),n("RSI (14)",a,s(a,0),"≥ 80",(a??0)>=80),n("Pi Cycle Top",M,s(M),"≥ 1",(M??0)>=1)]:[n("MVRV",c,s(c),"≤ 1",(c??1/0)<=1),n("MVRV Z-Score",m,s(m),"≤ 0",(m??1/0)<=0),n("NUPL",u,P(u),"≤ 0%",(u??1/0)<=0),n("Mayer Multiple",o,s(o),"≤ 0.8",(o??1/0)<=.8),n("Puell Multiple",r,s(r),"≤ 0.5",(r??1/0)<=.5),n("RSI (14)",a,s(a,0),"≤ 30",(a??1/0)<=30),n("Pi Cycle Bottom",j,s(j),"≥ 0.745",(j??0)>=.745)]},[i,d,N,h]);if((U||Z)&&y.length===0)return e.jsx(F,{loading:!0,children:"loading cycle signals…"});if(y.length===0)return e.jsx(F,{children:"no on-chain data yet"});const R=y.filter(l=>l.value!==null),b=R.filter(l=>l.fired).length,v=h?_:$;return e.jsxs("div",{className:"flex h-full min-h-0 flex-col gap-2",children:[e.jsxs("div",{className:"flex items-baseline justify-between",children:[e.jsx("span",{className:"caption text-soft",children:h?"Cycle-top signals":"Cycle-bottom signals"}),e.jsxs("span",{className:"metric-md",style:{color:b>0?v:A},children:[b,e.jsxs("span",{className:"text-soft",children:["/",R.length]})]})]}),e.jsx("div",{className:`${K} flex flex-col`,children:y.map(l=>e.jsx(J,{label:l.name,meta:`fires ${l.threshold}`,value:e.jsxs("span",{style:{color:l.fired?v:void 0},children:[l.fired?"● ":"",l.display]})},l.name))})]})}const rl=W({...E,component:Q});export{rl as cycleSignalsFrame};
@@ -1 +1 @@
1
- import{r as x,j as s}from"./react-qoZPGuNy.js";import{f as L,r as b,h as R}from"./index-CH54P4Cn.js";import{D as g,U as O}from"./format-CfAcS4D8.js";import{F as N,s as C}from"./ui-Bq3RQsdJ.js";b.schema;const h={bullish:O,bearish:g,neutral:"var(--color-soft)"},I={hit:O,miss:g,partial:"#f4a259"};function y(r){let n=0,i=0;for(const m of r)for(const c of m.grades??[])i++,c.verdict==="hit"?n+=1:c.verdict==="partial"&&(n+=.5);return{rate:i?n/i:0,n:i}}function D({config:r}){const[n,i]=x.useState(null),[m,c]=x.useState(!1);if(x.useEffect(()=>{let e=!1;const l=()=>{fetch(r.src,{cache:"no-store"}).then(t=>{if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}).then(t=>{e||(i(t),c(!0))}).catch(()=>{e||c(!0)})};l();const o=()=>l();window.addEventListener("focus",o);const d=window.setInterval(l,r.refreshSec*1e3);return()=>{e=!0,window.removeEventListener("focus",o),window.clearInterval(d)}},[r.src,r.refreshSec]),!m)return s.jsx(N,{loading:!0,children:"loading brief…"});const f=(n==null?void 0:n.entries)??[];if(f.length===0)return s.jsx(N,{children:"no brief yet — run /zframes-brief"});const k=f.slice(-r.entries).reverse(),{rate:E,n:u}=y(f);return s.jsxs("div",{className:`body-sm flex flex-col gap-3 ${C}`,children:[u>0&&s.jsxs("div",{className:"caption text-soft flex items-center justify-between",children:[s.jsx("span",{className:"uppercase tracking-wide",children:"track record"}),s.jsxs("span",{className:"text-strong font-bold tabular-nums",children:[Math.round(E*100),"% · ",u," call",u===1?"":"s"]})]}),k.map((e,l)=>{var o,d,t,j,v,w;return s.jsxs("div",{className:"flex flex-col gap-1.5",children:[(e.date||((o=e.run)==null?void 0:o.model))&&s.jsxs("div",{className:"caption text-soft flex items-baseline justify-between gap-2",children:[s.jsx("span",{className:"uppercase tracking-wide",children:e.date}),((d=e.run)==null?void 0:d.model)&&s.jsxs("span",{className:"truncate opacity-70",title:e.run.timestamp??"",children:[e.run.model,e.run.effort?` · ${e.run.effort}`:""]})]}),e.summary&&s.jsx("div",{className:"text-normal whitespace-pre-wrap",children:e.summary}),(((t=e.calls)==null?void 0:t.length)??0)>0&&s.jsx("div",{className:"flex flex-col gap-1",children:(j=e.calls)==null?void 0:j.map((a,p)=>s.jsxs("div",{className:"grid grid-cols-[auto_minmax(0,1fr)] items-baseline gap-2",children:[s.jsx("span",{className:"caption font-bold uppercase tracking-wide",style:{color:h[a.direction??"neutral"]??h.neutral},children:a.symbol?R(a.symbol):a.direction??"•"}),s.jsx("span",{className:"text-normal",children:a.claim})]},a.id??p))}),(((v=e.grades)==null?void 0:v.length)??0)>0&&s.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[s.jsx("span",{className:"caption text-soft uppercase tracking-wide",children:"graded"}),(w=e.grades)==null?void 0:w.map((a,p)=>s.jsx("span",{className:"caption rounded px-1.5 py-0.5 font-bold uppercase",style:{color:I[a.verdict??""]??h.neutral,background:"var(--color-surface)"},title:a.note??"",children:a.verdict??"—"},a.callId??p))]})]},e.date??l)})]})}const T=L({...b,component:D});export{T as dailyAnalysisFrame};
1
+ import{r as x,j as s}from"./react-qoZPGuNy.js";import{f as L,r as b,h as R}from"./index-DyvZokhk.js";import{D as g,U as O}from"./format-CfAcS4D8.js";import{F as N,s as C}from"./ui-Bq3RQsdJ.js";b.schema;const h={bullish:O,bearish:g,neutral:"var(--color-soft)"},I={hit:O,miss:g,partial:"#f4a259"};function y(r){let n=0,i=0;for(const m of r)for(const c of m.grades??[])i++,c.verdict==="hit"?n+=1:c.verdict==="partial"&&(n+=.5);return{rate:i?n/i:0,n:i}}function D({config:r}){const[n,i]=x.useState(null),[m,c]=x.useState(!1);if(x.useEffect(()=>{let e=!1;const l=()=>{fetch(r.src,{cache:"no-store"}).then(t=>{if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}).then(t=>{e||(i(t),c(!0))}).catch(()=>{e||c(!0)})};l();const o=()=>l();window.addEventListener("focus",o);const d=window.setInterval(l,r.refreshSec*1e3);return()=>{e=!0,window.removeEventListener("focus",o),window.clearInterval(d)}},[r.src,r.refreshSec]),!m)return s.jsx(N,{loading:!0,children:"loading brief…"});const f=(n==null?void 0:n.entries)??[];if(f.length===0)return s.jsx(N,{children:"no brief yet — run /zframes-brief"});const k=f.slice(-r.entries).reverse(),{rate:E,n:u}=y(f);return s.jsxs("div",{className:`body-sm flex flex-col gap-3 ${C}`,children:[u>0&&s.jsxs("div",{className:"caption text-soft flex items-center justify-between",children:[s.jsx("span",{className:"uppercase tracking-wide",children:"track record"}),s.jsxs("span",{className:"text-strong font-bold tabular-nums",children:[Math.round(E*100),"% · ",u," call",u===1?"":"s"]})]}),k.map((e,l)=>{var o,d,t,j,v,w;return s.jsxs("div",{className:"flex flex-col gap-1.5",children:[(e.date||((o=e.run)==null?void 0:o.model))&&s.jsxs("div",{className:"caption text-soft flex items-baseline justify-between gap-2",children:[s.jsx("span",{className:"uppercase tracking-wide",children:e.date}),((d=e.run)==null?void 0:d.model)&&s.jsxs("span",{className:"truncate opacity-70",title:e.run.timestamp??"",children:[e.run.model,e.run.effort?` · ${e.run.effort}`:""]})]}),e.summary&&s.jsx("div",{className:"text-normal whitespace-pre-wrap",children:e.summary}),(((t=e.calls)==null?void 0:t.length)??0)>0&&s.jsx("div",{className:"flex flex-col gap-1",children:(j=e.calls)==null?void 0:j.map((a,p)=>s.jsxs("div",{className:"grid grid-cols-[auto_minmax(0,1fr)] items-baseline gap-2",children:[s.jsx("span",{className:"caption font-bold uppercase tracking-wide",style:{color:h[a.direction??"neutral"]??h.neutral},children:a.symbol?R(a.symbol):a.direction??"•"}),s.jsx("span",{className:"text-normal",children:a.claim})]},a.id??p))}),(((v=e.grades)==null?void 0:v.length)??0)>0&&s.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[s.jsx("span",{className:"caption text-soft uppercase tracking-wide",children:"graded"}),(w=e.grades)==null?void 0:w.map((a,p)=>s.jsx("span",{className:"caption rounded px-1.5 py-0.5 font-bold uppercase",style:{color:I[a.verdict??""]??h.neutral,background:"var(--color-surface)"},title:a.note??"",children:a.verdict??"—"},a.callId??p))]})]},e.date??l)})]})}const T=L({...b,component:D});export{T as dailyAnalysisFrame};
@@ -1 +1 @@
1
- import{j as a}from"./react-qoZPGuNy.js";import{E as p,a as c,i as u}from"./market-data-CvmpLFSo.js";import{f,b8 as m}from"./index-CH54P4Cn.js";import{F as w}from"./ui-Bq3RQsdJ.js";m.schema;const g=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],j="#f2b066",T=864e5;function b({config:t}){const o=p[t.exchange],n=o?c(t.exchange):null;if(!o||!n)return a.jsx(w,{children:"unknown exchange"});const y=new Date,x=(n.dow+6)%7,i=[];for(let e=0;e<7;e++){const s=c(t.exchange,new Date(y.getTime()+(e-x)*T));if(!s)continue;const r=o.days.includes(s.dow),l=r&&u(t.exchange,s.ymd);i.push({ymd:s.ymd,dow:s.dow,day:Number(s.ymd.split("-")[2]),isToday:s.ymd===n.ymd,isHoliday:l,isTrading:r&&!l})}const h=t.weekdaysOnly?i.filter(e=>o.days.includes(e.dow)):i,d=t.label.trim();return a.jsxs("div",{className:"flex h-full w-full flex-col justify-center gap-1.5",children:[d&&a.jsx("div",{className:"caption text-soft shrink-0 uppercase tracking-[0.12em]",children:d}),a.jsx("div",{className:"flex min-h-0 flex-1 items-stretch gap-1",children:h.map(e=>{const s=!e.isTrading&&!e.isHoliday;return a.jsxs("div",{title:e.isHoliday?"Market holiday":e.isTrading?"Trading day":"Closed",className:`flex flex-1 flex-col items-center justify-center rounded-md border px-1 py-1 ${e.isToday?"text-strong":s?"text-disabled":"text-normal"}`,style:{borderColor:e.isToday?"var(--color-highlight)":"rgba(255,255,255,0.06)",color:e.isHoliday&&!e.isToday?j:void 0},children:[a.jsx("span",{className:"caption opacity-80",children:g[e.dow]}),a.jsx("span",{className:"metric-sm",children:e.day})]},e.ymd)})})]})}const v=f({...m,component:b});export{v as dayMeterFrame};
1
+ import{j as a}from"./react-qoZPGuNy.js";import{E as p,a as c,i as u}from"./market-data-CvmpLFSo.js";import{f,bM as m}from"./index-DyvZokhk.js";import{F as w}from"./ui-Bq3RQsdJ.js";m.schema;const g=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],j="#f2b066",T=864e5;function b({config:t}){const o=p[t.exchange],n=o?c(t.exchange):null;if(!o||!n)return a.jsx(w,{children:"unknown exchange"});const y=new Date,x=(n.dow+6)%7,i=[];for(let e=0;e<7;e++){const s=c(t.exchange,new Date(y.getTime()+(e-x)*T));if(!s)continue;const r=o.days.includes(s.dow),l=r&&u(t.exchange,s.ymd);i.push({ymd:s.ymd,dow:s.dow,day:Number(s.ymd.split("-")[2]),isToday:s.ymd===n.ymd,isHoliday:l,isTrading:r&&!l})}const h=t.weekdaysOnly?i.filter(e=>o.days.includes(e.dow)):i,d=t.label.trim();return a.jsxs("div",{className:"flex h-full w-full flex-col justify-center gap-1.5",children:[d&&a.jsx("div",{className:"caption text-soft shrink-0 uppercase tracking-[0.12em]",children:d}),a.jsx("div",{className:"flex min-h-0 flex-1 items-stretch gap-1",children:h.map(e=>{const s=!e.isTrading&&!e.isHoliday;return a.jsxs("div",{title:e.isHoliday?"Market holiday":e.isTrading?"Trading day":"Closed",className:`flex flex-1 flex-col items-center justify-center rounded-md border px-1 py-1 ${e.isToday?"text-strong":s?"text-disabled":"text-normal"}`,style:{borderColor:e.isToday?"var(--color-highlight)":"rgba(255,255,255,0.06)",color:e.isHoliday&&!e.isToday?j:void 0},children:[a.jsx("span",{className:"caption opacity-80",children:g[e.dow]}),a.jsx("span",{className:"metric-sm",children:e.day})]},e.ymd)})})]})}const v=f({...m,component:b});export{v as dayMeterFrame};
@@ -0,0 +1 @@
1
+ import{j as o}from"./react-qoZPGuNy.js";import{Z as r,M as i}from"./cycle-shared-BOGcJDzT.js";import{c as s,a as c,f as m}from"./format-CfAcS4D8.js";import{f,bq as l,br as p}from"./index-DyvZokhk.js";import{F as t}from"./ui-Bq3RQsdJ.js";import"./indicators-CogwjDn9.js";import"./mini-line-chart-CHM5UBjJ.js";import"./d3-xK4fOkBU.js";import"./utils-DaT-yT0k.js";function u(){const{fees:e,isLoading:a}=p();if(a)return o.jsx(t,{loading:!0,children:"loading DeFi fees…"});if(!e)return o.jsx(t,{children:"no fees data yet"});const n=e.changePct!=null?s(e.changePct):r;return o.jsx(i,{caption:"DeFi Fees · 24h",headline:m(e.total24h),headlineColor:r,zone:{label:"protocol fees",color:r},sub:e.changePct!=null?`1d ${c(e.changePct)}`:void 0,sparkline:e.history,sparkColor:n})}const R=f({...l,component:u});export{R as defiRevenueFrame};
@@ -1 +1 @@
1
- import{r as l,j as r}from"./react-qoZPGuNy.js";import{p as x,f as C}from"./format-CfAcS4D8.js";import{f as M,ao as f,ap as S}from"./index-CH54P4Cn.js";import{F as p}from"./ui-Bq3RQsdJ.js";import{a,C as u}from"./chart-utils-BYIZMM9J.js";import{M as D}from"./index-DK7jWlTL.js";import"./d3-xK4fOkBU.js";import"./utils-DaT-yT0k.js";const E={"7D":{ms:10080*60*1e3,timeframe:a["7D"]},"1M":{ms:720*60*60*1e3,timeframe:a["1M"]},"3M":{ms:2160*60*60*1e3,timeframe:a["3M"]}};f.schema;function j({config:t}){const{ms:m,timeframe:c}=E[t.lookback],s=l.useMemo(()=>Date.now()-m,[m]),{history:i,isLoading:d}=S(t.protocols),n=l.useMemo(()=>t.protocols.map((e,h)=>({id:e,name:x(e),color:u[h%u.length],data:(i[e]??[]).filter(o=>o.time>=s).map(o=>({date:new Date(o.time).toISOString(),value:o.value}))})),[t.protocols,i,s]);return d?r.jsx(p,{loading:!0,children:"loading DEX volume…"}):n.every(e=>e.data.length===0)?r.jsx(p,{children:"no DEX volume data yet"}):r.jsx(D,{series:n,timeframe:c,height:250,formatValue:C})}const I=M({...f,component:j});export{I as dexVolumeChartFrame};
1
+ import{r as l,j as r}from"./react-qoZPGuNy.js";import{p as x,f as C}from"./format-CfAcS4D8.js";import{f as M,ao as f,ap as S}from"./index-DyvZokhk.js";import{F as p}from"./ui-Bq3RQsdJ.js";import{a,C as u}from"./chart-utils-BYIZMM9J.js";import{M as D}from"./index-Bx7RmzY8.js";import"./d3-xK4fOkBU.js";import"./utils-DaT-yT0k.js";const E={"7D":{ms:10080*60*1e3,timeframe:a["7D"]},"1M":{ms:720*60*60*1e3,timeframe:a["1M"]},"3M":{ms:2160*60*60*1e3,timeframe:a["3M"]}};f.schema;function j({config:t}){const{ms:m,timeframe:c}=E[t.lookback],s=l.useMemo(()=>Date.now()-m,[m]),{history:i,isLoading:d}=S(t.protocols),n=l.useMemo(()=>t.protocols.map((e,h)=>({id:e,name:x(e),color:u[h%u.length],data:(i[e]??[]).filter(o=>o.time>=s).map(o=>({date:new Date(o.time).toISOString(),value:o.value}))})),[t.protocols,i,s]);return d?r.jsx(p,{loading:!0,children:"loading DEX volume…"}):n.every(e=>e.data.length===0)?r.jsx(p,{children:"no DEX volume data yet"}):r.jsx(D,{series:n,timeframe:c,height:250,formatValue:C})}const I=M({...f,component:j});export{I as dexVolumeChartFrame};
@@ -1 +1 @@
1
- import{r as u,j as t}from"./react-qoZPGuNy.js";import{f as i}from"./format-CfAcS4D8.js";import{f as l,am as n,an as p}from"./index-CH54P4Cn.js";import{T as c,a as f}from"./treemap-leaf-DNIoJEK-.js";import{F as s}from"./ui-Bq3RQsdJ.js";import"./utils-DaT-yT0k.js";import"./d3-xK4fOkBU.js";n.schema;function d({width:m,height:r,data:o}){const a=i(o.volume24h);return t.jsx(f,{width:m,height:r,label:o.id,secondary:a,title:`${o.id} · ${a} 24h volume`})}function h({config:m}){const{entries:r,isLoading:o}=p(),a=u.useMemo(()=>r.slice(0,m.topN).map(e=>({id:e.name,value:e.volume24h,volume24h:e.volume24h,changePct:e.changePct??0})),[r,m.topN]);return o?t.jsx(s,{loading:!0,children:"loading DEX volume…"}):a.length===0?t.jsx(s,{children:"no DEX volume data"}):t.jsx(c,{data:a,LeafComponent:d,getColorValue:e=>e.changePct})}const D=l({...n,component:h});export{D as dexVolumeTreemapFrame};
1
+ import{r as u,j as t}from"./react-qoZPGuNy.js";import{f as i}from"./format-CfAcS4D8.js";import{f as l,am as n,an as p}from"./index-DyvZokhk.js";import{T as c,a as f}from"./treemap-leaf-Dn31k9S9.js";import{F as s}from"./ui-Bq3RQsdJ.js";import"./utils-DaT-yT0k.js";import"./d3-xK4fOkBU.js";n.schema;function d({width:m,height:r,data:o}){const a=i(o.volume24h);return t.jsx(f,{width:m,height:r,label:o.id,secondary:a,title:`${o.id} · ${a} 24h volume`})}function h({config:m}){const{entries:r,isLoading:o}=p(),a=u.useMemo(()=>r.slice(0,m.topN).map(e=>({id:e.name,value:e.volume24h,volume24h:e.volume24h,changePct:e.changePct??0})),[r,m.topN]);return o?t.jsx(s,{loading:!0,children:"loading DEX volume…"}):a.length===0?t.jsx(s,{children:"no DEX volume data"}):t.jsx(c,{data:a,LeafComponent:d,getColorValue:e=>e.changePct})}const D=l({...n,component:h});export{D as dexVolumeTreemapFrame};
@@ -1 +1 @@
1
- import{r as s,j as t}from"./react-qoZPGuNy.js";import{i as w}from"./content-shared-BZ1XzrJx.js";import{f as k,aK as x}from"./index-CH54P4Cn.js";import{F as b}from"./ui-Bq3RQsdJ.js";x.schema;const h="var(--color-highlight)",p={coin:"Coin flip",dice:"Dice roll",list:"Random pick"},v={1:[!1,!1,!1,!1,!0,!1,!1,!1,!1],2:[!0,!1,!1,!1,!1,!1,!1,!1,!0],3:[!0,!1,!1,!1,!0,!1,!1,!1,!0],4:[!0,!1,!0,!1,!1,!1,!0,!1,!0],5:[!0,!1,!0,!1,!0,!1,!0,!1,!0],6:[!0,!1,!0,!0,!1,!0,!0,!1,!0]};function c(r,e){return r==="coin"?Math.random()<.5?"Heads":"Tails":r==="dice"?String(Math.floor(Math.random()*6)+1):e.length===0?"":e[Math.floor(Math.random()*e.length)]??""}function N({value:r}){const e=v[r];return e?t.jsx("div",{className:"grid grid-cols-3 gap-1","aria-hidden":!0,children:e.map((a,l)=>t.jsx("span",{className:"h-1.5 w-1.5 rounded-full",style:{background:a?h:"transparent"}},l))}):null}function E({config:r}){const{mode:e,options:a,label:l}=r,n=e==="list"&&a.length===0,[o,f]=s.useState(()=>c(e,a)),[i,u]=s.useState(!1);s.useEffect(()=>{f(c(e,a))},[e,a]),s.useEffect(()=>{if(!i)return;let d=0;const m=window.setInterval(()=>{f(c(e,a)),d+=1,d>=6&&(window.clearInterval(m),u(!1))},60);return()=>window.clearInterval(m)},[i,e,a]);const g=s.useCallback(()=>{n||u(!0)},[n]);if(n)return t.jsx(b,{children:"add options to decide"});const j=e==="list"?"metric-lg":"metric-xl";return t.jsxs("button",{type:"button",onClick:g,"aria-label":`${p[e]} — roll again`,className:`flex h-full w-full cursor-pointer flex-col items-center justify-center gap-2 px-3 py-2 ${w}`,children:[t.jsx("span",{className:"caption text-soft uppercase tracking-[0.12em]",children:p[e]}),t.jsx("span",{"aria-live":"polite",className:`${j} max-w-full break-words text-center leading-none transition-transform`,style:{color:h,transform:i?"scale(1.08)":void 0},children:o}),e==="dice"&&t.jsx(N,{value:Number(o)}),l.trim()&&t.jsx("span",{className:"caption text-soft max-w-full text-center",children:l.trim()}),t.jsx("span",{className:"caption text-disabled uppercase tracking-[0.12em]",children:"click to roll"})]})}const F=k({...x,component:E});export{F as diceFrame};
1
+ import{r as s,j as t}from"./react-qoZPGuNy.js";import{i as w}from"./content-shared-BZ1XzrJx.js";import{f as k,aK as x}from"./index-DyvZokhk.js";import{F as b}from"./ui-Bq3RQsdJ.js";x.schema;const h="var(--color-highlight)",p={coin:"Coin flip",dice:"Dice roll",list:"Random pick"},v={1:[!1,!1,!1,!1,!0,!1,!1,!1,!1],2:[!0,!1,!1,!1,!1,!1,!1,!1,!0],3:[!0,!1,!1,!1,!0,!1,!1,!1,!0],4:[!0,!1,!0,!1,!1,!1,!0,!1,!0],5:[!0,!1,!0,!1,!0,!1,!0,!1,!0],6:[!0,!1,!0,!0,!1,!0,!0,!1,!0]};function c(r,e){return r==="coin"?Math.random()<.5?"Heads":"Tails":r==="dice"?String(Math.floor(Math.random()*6)+1):e.length===0?"":e[Math.floor(Math.random()*e.length)]??""}function N({value:r}){const e=v[r];return e?t.jsx("div",{className:"grid grid-cols-3 gap-1","aria-hidden":!0,children:e.map((a,l)=>t.jsx("span",{className:"h-1.5 w-1.5 rounded-full",style:{background:a?h:"transparent"}},l))}):null}function E({config:r}){const{mode:e,options:a,label:l}=r,n=e==="list"&&a.length===0,[o,f]=s.useState(()=>c(e,a)),[i,u]=s.useState(!1);s.useEffect(()=>{f(c(e,a))},[e,a]),s.useEffect(()=>{if(!i)return;let d=0;const m=window.setInterval(()=>{f(c(e,a)),d+=1,d>=6&&(window.clearInterval(m),u(!1))},60);return()=>window.clearInterval(m)},[i,e,a]);const g=s.useCallback(()=>{n||u(!0)},[n]);if(n)return t.jsx(b,{children:"add options to decide"});const j=e==="list"?"metric-lg":"metric-xl";return t.jsxs("button",{type:"button",onClick:g,"aria-label":`${p[e]} — roll again`,className:`flex h-full w-full cursor-pointer flex-col items-center justify-center gap-2 px-3 py-2 ${w}`,children:[t.jsx("span",{className:"caption text-soft uppercase tracking-[0.12em]",children:p[e]}),t.jsx("span",{"aria-live":"polite",className:`${j} max-w-full break-words text-center leading-none transition-transform`,style:{color:h,transform:i?"scale(1.08)":void 0},children:o}),e==="dice"&&t.jsx(N,{value:Number(o)}),l.trim()&&t.jsx("span",{className:"caption text-soft max-w-full text-center",children:l.trim()}),t.jsx("span",{className:"caption text-disabled uppercase tracking-[0.12em]",children:"click to roll"})]})}const F=k({...x,component:E});export{F as diceFrame};
@@ -1 +1 @@
1
- import{r as s,j as M}from"./react-qoZPGuNy.js";import{a as P,d as _,G as T}from"./game-ui-Dy_QYsPr.js";import{f as k,z}from"./index-CH54P4Cn.js";import"./format-CfAcS4D8.js";const F=.6,U=-12,I=40,W=40,b=44,Y=24,X=40,H=3,q=5e-4,p={ground:"rgba(255, 255, 255, 0.1)",groundTexture:"rgba(255, 255, 255, 0.06)",dino:"rgba(255, 255, 255, 1)",eye:"rgba(0, 0, 0, 0.8)",cactus:"#25A78D"};function L(t,n,o,c){t.fillStyle=p.dino,t.fillRect(n+10,o+10,25,24),t.fillRect(n+20,o,20,16),t.fillStyle=p.eye,t.fillRect(n+32,o+4,4,4),t.fillStyle=p.dino,t.fillRect(n,o+16,14,8),t.fillRect(n-4,o+12,8,8),c===null?(t.fillRect(n+12,o+34,6,10),t.fillRect(n+24,o+34,6,10)):(t.fillRect(n+12,o+34,6,c===0?10:6),t.fillRect(n+24,o+34,6,c===1?10:6)),t.fillRect(n+30,o+18,4,10)}function B(t,n,o,c,m){const f=o-m;t.fillStyle=p.cactus,t.fillRect(n+c/2-4,f,8,m),t.fillRect(n,f+10,8,6),t.fillRect(n,f+10,4,14),t.fillRect(n+c-8,f+18,8,6),t.fillRect(n+c-4,f+18,4,12)}function N(t,n,o,c,m,f){const u=t.height-I;n.clearRect(0,0,t.width,t.height),n.fillStyle=p.ground,n.fillRect(0,u,t.width,2),L(n,50,u-b,null),n.textAlign="center",o==="idle"?(n.fillStyle=T.text,n.font='bold 14px "DM Sans", sans-serif',n.fillText("Press SPACE or tap to start",t.width/2,t.height/2-30)):(n.fillStyle=T.gameOver,n.font='bold 20px "DM Sans", sans-serif',n.fillText("GAME OVER",t.width/2,t.height/2-40),n.fillStyle=T.text,n.font='bold 14px "DM Sans", sans-serif',n.fillText(`Score: ${c}`,t.width/2,t.height/2-10),n.fillStyle=T.textSoft,n.fillText("Press SPACE or tap to restart",t.width/2,t.height/2+20)),n.textAlign="left",_(t,n,c,m,f)}function K(){const t=s.useRef(null),n=s.useRef(null),[o,c]=s.useState("idle"),[m,f]=s.useState(0),[u,V]=s.useState(()=>{if(typeof window<"u"){const e=localStorage.getItem("zframes-dino-high-score");return e?parseInt(e,10):0}return 0}),[v,J]=s.useState(!1),g=s.useRef(0),S=s.useRef(u),D=s.useRef(o),y=s.useRef(P(null));s.useEffect(()=>{S.current=u,u>0&&localStorage.setItem("zframes-dino-high-score",String(u))},[u]),s.useEffect(()=>{D.current=o},[o]);const R=s.useRef({dinoY:0,dinoVelocity:0,isJumping:!1,obstacles:[],speed:H,frameCount:0,groundOffset:0}),O=s.useCallback(()=>{const e=t.current;e&&(R.current={dinoY:e.height-I-b,dinoVelocity:0,isJumping:!1,obstacles:[],speed:H,frameCount:0,groundOffset:0},g.current=0,f(0))},[]),C=s.useCallback(()=>{var i;if((i=n.current)==null||i.focus(),o!=="playing"){O(),c("playing");return}const e=R.current;e.isJumping||(e.dinoVelocity=U,e.isJumping=!0)},[o,O]);return s.useEffect(()=>{const e=a=>{const l=a.target;l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.isContentEditable||(a.code==="Space"||a.code==="ArrowUp")&&(a.preventDefault(),C())},i=n.current;if(i)return i.addEventListener("keydown",e),()=>i.removeEventListener("keydown",e)},[C]),s.useLayoutEffect(()=>{const e=t.current;if(!e)return;const i=()=>{const l=e.parentElement;if(l&&l.clientWidth>0&&l.clientHeight>0){e.width=l.clientWidth,e.height=l.clientHeight,y.current=P(e),R.current.dinoY=e.height-I-b;const E=e.getContext("2d");E&&D.current!=="playing"&&N(e,E,D.current,g.current,S.current,y.current),J(A=>!A)}};i();const a=new ResizeObserver(i);return a.observe(e.parentElement),()=>a.disconnect()},[]),s.useEffect(()=>{if(o!=="playing")return;const e=t.current,i=e==null?void 0:e.getContext("2d");if(!e||!i)return;let a;const l=e.height-I,E=()=>{i.fillStyle=p.ground,i.fillRect(0,l,e.width,2),i.fillStyle=p.groundTexture;const r=R.current.groundOffset%30;for(let h=-r;h<e.width;h+=30)i.beginPath(),i.arc(h,l+12,1.5,0,Math.PI*2),i.fill(),i.beginPath(),i.arc(h+15,l+20,1,0,Math.PI*2),i.fill()},A=r=>{const w=R.current.dinoY;return 50+W-5>r.x&&55<r.x+r.width&&w+b>l-r.height&&w+5<l},G=()=>{const r=R.current;i.clearRect(0,0,e.width,e.height),r.dinoVelocity+=F,r.dinoY+=r.dinoVelocity;const h=l-b;r.dinoY>=h&&(r.dinoY=h,r.dinoVelocity=0,r.isJumping=!1),r.obstacles=r.obstacles.filter(d=>d.x>-Y),r.obstacles.forEach(d=>{d.x-=r.speed});const w=r.obstacles[r.obstacles.length-1],j=300+Math.random()*200;(!w||w.x<e.width-j)&&Math.random()<.02&&r.obstacles.push({x:e.width,width:Y,height:X});for(const d of r.obstacles)if(A(d)){g.current>S.current&&(S.current=g.current,V(g.current)),c("gameover");return}r.frameCount++,r.frameCount%6===0&&(g.current+=1,f(g.current)),r.speed+=q,r.groundOffset+=r.speed,E(),L(i,50,r.dinoY,r.isJumping?null:Math.floor(r.frameCount/5)%2),r.obstacles.forEach(d=>B(i,d.x,l,d.width,d.height)),_(e,i,g.current,S.current,y.current),a=requestAnimationFrame(G)};return a=requestAnimationFrame(G),()=>cancelAnimationFrame(a)},[o]),s.useEffect(()=>{if(o==="playing")return;const e=t.current,i=e==null?void 0:e.getContext("2d");!e||!i||N(e,i,o,m,u,y.current)},[o,m,u,v]),M.jsx("div",{ref:n,tabIndex:0,className:"relative h-full w-full cursor-pointer select-none overflow-hidden outline-none",onClick:C,onTouchStart:C,role:"application","aria-label":"Dino running game. Press space or tap to jump over obstacles.",children:M.jsx("canvas",{ref:t,className:"h-full w-full"})})}const ee=k({...z,component:K});export{ee as dinoGameFrame};
1
+ import{r as s,j as M}from"./react-qoZPGuNy.js";import{a as P,d as _,G as T}from"./game-ui-Dy_QYsPr.js";import{f as k,z}from"./index-DyvZokhk.js";import"./format-CfAcS4D8.js";const F=.6,U=-12,I=40,W=40,b=44,Y=24,X=40,H=3,q=5e-4,p={ground:"rgba(255, 255, 255, 0.1)",groundTexture:"rgba(255, 255, 255, 0.06)",dino:"rgba(255, 255, 255, 1)",eye:"rgba(0, 0, 0, 0.8)",cactus:"#25A78D"};function L(t,n,o,c){t.fillStyle=p.dino,t.fillRect(n+10,o+10,25,24),t.fillRect(n+20,o,20,16),t.fillStyle=p.eye,t.fillRect(n+32,o+4,4,4),t.fillStyle=p.dino,t.fillRect(n,o+16,14,8),t.fillRect(n-4,o+12,8,8),c===null?(t.fillRect(n+12,o+34,6,10),t.fillRect(n+24,o+34,6,10)):(t.fillRect(n+12,o+34,6,c===0?10:6),t.fillRect(n+24,o+34,6,c===1?10:6)),t.fillRect(n+30,o+18,4,10)}function B(t,n,o,c,m){const f=o-m;t.fillStyle=p.cactus,t.fillRect(n+c/2-4,f,8,m),t.fillRect(n,f+10,8,6),t.fillRect(n,f+10,4,14),t.fillRect(n+c-8,f+18,8,6),t.fillRect(n+c-4,f+18,4,12)}function N(t,n,o,c,m,f){const u=t.height-I;n.clearRect(0,0,t.width,t.height),n.fillStyle=p.ground,n.fillRect(0,u,t.width,2),L(n,50,u-b,null),n.textAlign="center",o==="idle"?(n.fillStyle=T.text,n.font='bold 14px "DM Sans", sans-serif',n.fillText("Press SPACE or tap to start",t.width/2,t.height/2-30)):(n.fillStyle=T.gameOver,n.font='bold 20px "DM Sans", sans-serif',n.fillText("GAME OVER",t.width/2,t.height/2-40),n.fillStyle=T.text,n.font='bold 14px "DM Sans", sans-serif',n.fillText(`Score: ${c}`,t.width/2,t.height/2-10),n.fillStyle=T.textSoft,n.fillText("Press SPACE or tap to restart",t.width/2,t.height/2+20)),n.textAlign="left",_(t,n,c,m,f)}function K(){const t=s.useRef(null),n=s.useRef(null),[o,c]=s.useState("idle"),[m,f]=s.useState(0),[u,V]=s.useState(()=>{if(typeof window<"u"){const e=localStorage.getItem("zframes-dino-high-score");return e?parseInt(e,10):0}return 0}),[v,J]=s.useState(!1),g=s.useRef(0),S=s.useRef(u),D=s.useRef(o),y=s.useRef(P(null));s.useEffect(()=>{S.current=u,u>0&&localStorage.setItem("zframes-dino-high-score",String(u))},[u]),s.useEffect(()=>{D.current=o},[o]);const R=s.useRef({dinoY:0,dinoVelocity:0,isJumping:!1,obstacles:[],speed:H,frameCount:0,groundOffset:0}),O=s.useCallback(()=>{const e=t.current;e&&(R.current={dinoY:e.height-I-b,dinoVelocity:0,isJumping:!1,obstacles:[],speed:H,frameCount:0,groundOffset:0},g.current=0,f(0))},[]),C=s.useCallback(()=>{var i;if((i=n.current)==null||i.focus(),o!=="playing"){O(),c("playing");return}const e=R.current;e.isJumping||(e.dinoVelocity=U,e.isJumping=!0)},[o,O]);return s.useEffect(()=>{const e=a=>{const l=a.target;l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.isContentEditable||(a.code==="Space"||a.code==="ArrowUp")&&(a.preventDefault(),C())},i=n.current;if(i)return i.addEventListener("keydown",e),()=>i.removeEventListener("keydown",e)},[C]),s.useLayoutEffect(()=>{const e=t.current;if(!e)return;const i=()=>{const l=e.parentElement;if(l&&l.clientWidth>0&&l.clientHeight>0){e.width=l.clientWidth,e.height=l.clientHeight,y.current=P(e),R.current.dinoY=e.height-I-b;const E=e.getContext("2d");E&&D.current!=="playing"&&N(e,E,D.current,g.current,S.current,y.current),J(A=>!A)}};i();const a=new ResizeObserver(i);return a.observe(e.parentElement),()=>a.disconnect()},[]),s.useEffect(()=>{if(o!=="playing")return;const e=t.current,i=e==null?void 0:e.getContext("2d");if(!e||!i)return;let a;const l=e.height-I,E=()=>{i.fillStyle=p.ground,i.fillRect(0,l,e.width,2),i.fillStyle=p.groundTexture;const r=R.current.groundOffset%30;for(let h=-r;h<e.width;h+=30)i.beginPath(),i.arc(h,l+12,1.5,0,Math.PI*2),i.fill(),i.beginPath(),i.arc(h+15,l+20,1,0,Math.PI*2),i.fill()},A=r=>{const w=R.current.dinoY;return 50+W-5>r.x&&55<r.x+r.width&&w+b>l-r.height&&w+5<l},G=()=>{const r=R.current;i.clearRect(0,0,e.width,e.height),r.dinoVelocity+=F,r.dinoY+=r.dinoVelocity;const h=l-b;r.dinoY>=h&&(r.dinoY=h,r.dinoVelocity=0,r.isJumping=!1),r.obstacles=r.obstacles.filter(d=>d.x>-Y),r.obstacles.forEach(d=>{d.x-=r.speed});const w=r.obstacles[r.obstacles.length-1],j=300+Math.random()*200;(!w||w.x<e.width-j)&&Math.random()<.02&&r.obstacles.push({x:e.width,width:Y,height:X});for(const d of r.obstacles)if(A(d)){g.current>S.current&&(S.current=g.current,V(g.current)),c("gameover");return}r.frameCount++,r.frameCount%6===0&&(g.current+=1,f(g.current)),r.speed+=q,r.groundOffset+=r.speed,E(),L(i,50,r.dinoY,r.isJumping?null:Math.floor(r.frameCount/5)%2),r.obstacles.forEach(d=>B(i,d.x,l,d.width,d.height)),_(e,i,g.current,S.current,y.current),a=requestAnimationFrame(G)};return a=requestAnimationFrame(G),()=>cancelAnimationFrame(a)},[o]),s.useEffect(()=>{if(o==="playing")return;const e=t.current,i=e==null?void 0:e.getContext("2d");!e||!i||N(e,i,o,m,u,y.current)},[o,m,u,v]),M.jsx("div",{ref:n,tabIndex:0,className:"relative h-full w-full cursor-pointer select-none overflow-hidden outline-none",onClick:C,onTouchStart:C,role:"application","aria-label":"Dino running game. Press space or tap to jump over obstacles.",children:M.jsx("canvas",{ref:t,className:"h-full w-full"})})}const ee=k({...z,component:K});export{ee as dinoGameFrame};
@@ -1 +1 @@
1
- import{j as t}from"./react-qoZPGuNy.js";import{f as o,aI as a}from"./index-CH54P4Cn.js";a.schema;const i="rgba(255,255,255,0.16)";function n({config:r}){const e=r.orientation==="vertical",s=r.label.trim(),l=c=>t.jsx("span",{className:`shrink ${e?"w-0 flex-1":"h-0 flex-1"} `,style:e?{borderLeftWidth:1,borderLeftStyle:r.style,borderColor:i}:{borderTopWidth:1,borderTopStyle:r.style,borderColor:i}});return s?t.jsxs("div",{className:`flex h-full w-full items-center justify-center gap-3 ${e?"flex-col py-1":"px-1"}`,children:[l(),t.jsx("span",{className:"caption text-soft shrink-0 whitespace-nowrap uppercase tracking-[0.14em]",style:e?{writingMode:"vertical-rl"}:void 0,children:s}),l()]}):t.jsx("div",{className:`flex h-full w-full items-center justify-center ${e?"flex-col":""}`,children:l()})}const m=o({...a,component:n});export{m as dividerFrame};
1
+ import{j as t}from"./react-qoZPGuNy.js";import{f as o,aI as a}from"./index-DyvZokhk.js";a.schema;const i="rgba(255,255,255,0.16)";function n({config:r}){const e=r.orientation==="vertical",s=r.label.trim(),l=c=>t.jsx("span",{className:`shrink ${e?"w-0 flex-1":"h-0 flex-1"} `,style:e?{borderLeftWidth:1,borderLeftStyle:r.style,borderColor:i}:{borderTopWidth:1,borderTopStyle:r.style,borderColor:i}});return s?t.jsxs("div",{className:`flex h-full w-full items-center justify-center gap-3 ${e?"flex-col py-1":"px-1"}`,children:[l(),t.jsx("span",{className:"caption text-soft shrink-0 whitespace-nowrap uppercase tracking-[0.14em]",style:e?{writingMode:"vertical-rl"}:void 0,children:s}),l()]}):t.jsx("div",{className:`flex h-full w-full items-center justify-center ${e?"flex-col":""}`,children:l()})}const m=o({...a,component:n});export{m as dividerFrame};
@@ -1 +1 @@
1
- import{r as t,j as a}from"./react-qoZPGuNy.js";import{f as d,aD as s}from"./index-CH54P4Cn.js";import{F as o}from"./ui-Bq3RQsdJ.js";function i(){const[r,e]=t.useState("loading");return r==="error"?a.jsx(o,{children:"canvas unavailable"}):a.jsxs("div",{className:"relative h-full w-full overflow-hidden rounded-md",children:[r==="loading"&&a.jsx("div",{className:"absolute inset-0 z-10",children:a.jsx(o,{loading:!0,children:"loading canvas…"})}),a.jsx("iframe",{src:"https://drawdy.io",title:"Drawdy Canvas",className:`h-full w-full border-0 transition-opacity duration-300 ${r==="loaded"?"opacity-100":"opacity-0"}`,allow:"clipboard-read; clipboard-write",onLoad:()=>e("loaded"),onError:()=>e("error")})]})}const m=d({...s,component:i});export{m as drawdyFrame};
1
+ import{r as t,j as a}from"./react-qoZPGuNy.js";import{f as d,aD as s}from"./index-DyvZokhk.js";import{F as o}from"./ui-Bq3RQsdJ.js";function i(){const[r,e]=t.useState("loading");return r==="error"?a.jsx(o,{children:"canvas unavailable"}):a.jsxs("div",{className:"relative h-full w-full overflow-hidden rounded-md",children:[r==="loading"&&a.jsx("div",{className:"absolute inset-0 z-10",children:a.jsx(o,{loading:!0,children:"loading canvas…"})}),a.jsx("iframe",{src:"https://drawdy.io",title:"Drawdy Canvas",className:`h-full w-full border-0 transition-opacity duration-300 ${r==="loaded"?"opacity-100":"opacity-0"}`,allow:"clipboard-read; clipboard-write",onLoad:()=>e("loaded"),onError:()=>e("error")})]})}const m=d({...s,component:i});export{m as drawdyFrame};
@@ -0,0 +1 @@
1
+ import{j as r}from"./react-qoZPGuNy.js";import{M as n,Z as i}from"./cycle-shared-BOGcJDzT.js";import{c as s,a as m}from"./format-CfAcS4D8.js";import{f as c,bj as l,bk as d}from"./index-DyvZokhk.js";import{F as a}from"./ui-Bq3RQsdJ.js";import"./indicators-CogwjDn9.js";import"./mini-line-chart-CHM5UBjJ.js";import"./d3-xK4fOkBU.js";import"./utils-DaT-yT0k.js";function p(){const{dxy:o,isLoading:t}=d();if(t)return r.jsx(a,{loading:!0,children:"loading DXY…"});if(!o)return r.jsx(a,{children:"no FX data yet"});const e=s(o.changePct);return r.jsx(n,{caption:"US Dollar Index",headline:o.value.toFixed(2),headlineColor:i,zone:{label:o.changePct>=0?"Stronger USD":"Weaker USD",color:e},sub:m(o.changePct),sparkline:o.history,sparkColor:e})}const C=c({...l,component:p});export{C as dxyFrame};
@@ -0,0 +1 @@
1
+ .zf-editor{--zf-accent: hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76%);--font-dmsans: var(--zf-font-family, "DM Sans", sans-serif);--zf-ease-out: cubic-bezier(.23, 1, .32, 1);--zf-ease-drawer: cubic-bezier(.32, .72, 0, 1);position:relative}.zf-editor-main{display:flex;align-items:flex-start}.zf-editor-grid{flex:1;min-width:0;min-height:360px;padding-inline:var(--zf-pad-x, 0);border-radius:18px;border:1px dashed transparent;transition:border-color .2s var(--zf-ease-out),opacity .24s var(--zf-ease-out),filter .24s var(--zf-ease-out),transform .24s var(--zf-ease-out)}.zf-editor-grid[data-switching=true]{opacity:.15;filter:blur(10px);transform:scale(.985);transition:opacity .14s var(--zf-ease-out),filter .14s var(--zf-ease-out),transform .14s var(--zf-ease-out)}@media(prefers-reduced-motion:reduce){.zf-editor-grid[data-switching=true]{filter:none;transform:none}}.zf-editor.zf-customise .zf-editor-grid{border-color:#ffffff14}.zf-editor[data-mode=flow-horizontal] .zf-editor-grid{overflow-x:auto;overflow-y:hidden}.zf-editor .grid-stack>.grid-stack-item>.grid-stack-item-content{overflow:visible}@media(hover:hover){.zf-editor:not(.zf-customise) .grid-stack-item-content:hover>.zf-frame{transform:translateY(-2px);border-color:var( --zf-frame-border-hover, hsl(var(--zf-accent-hue, 242) 90% 76% / .42) )}.zf-editor:not(.zf-customise) .grid-stack-item-content:hover>.zf-frame:not(.zf-frame--error):after{opacity:1}}.zf-fill{width:100%;height:100%}.zf-editor .zf-frame,.zf-editor .zf-bare{animation:none}.zf-editor.zf-customise .grid-stack-item>.grid-stack-item-content{outline:2px dashed rgba(255,255,255,.08);outline-offset:-2px;border-radius:18px;transition:outline-color .2s var(--zf-ease-out)}.zf-editor.zf-customise .grid-stack-item>.grid-stack-item-content>*{pointer-events:none}.zf-editor.zf-customise .grid-stack-item:hover>.grid-stack-item-content{outline-color:var(--zf-accent)}.zf-editor.zf-customise .grid-stack-item>.grid-stack-item-content{cursor:grab}body.zf-dragging,body.zf-dragging *{cursor:grabbing!important}@keyframes zf-wiggle{0%,to{transform:rotate(-.4deg)}50%{transform:rotate(.4deg)}}.zf-editor.zf-customise:not([data-wiggle=off]) .grid-stack-item>.grid-stack-item-content{animation:zf-wiggle .32s ease-in-out infinite}.zf-editor.zf-customise .grid-stack-item:nth-child(2n)>.grid-stack-item-content{animation-delay:.05s;animation-duration:.28s}.zf-editor.zf-customise .grid-stack-item:nth-child(3n)>.grid-stack-item-content{animation-delay:.1s;animation-duration:.34s}.zf-editor.zf-customise .grid-stack-item:nth-child(5n)>.grid-stack-item-content{animation-delay:.15s;animation-duration:.26s}.zf-editor.zf-customise .grid-stack-item.ui-draggable-dragging>.grid-stack-item-content,.zf-editor.zf-customise .grid-stack-item.ui-resizing>.grid-stack-item-content{animation:none}@media(prefers-reduced-motion:reduce){.zf-editor.zf-customise .grid-stack-item>.grid-stack-item-content{animation:none}}.zf-del-btn{position:absolute;top:0;right:0;width:24px;height:24px;border-radius:9999px;background:linear-gradient(180deg,#f87171d1,#dc2626db);border:1px solid rgba(255,255,255,.28);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transform:scale(.8);-webkit-backdrop-filter:blur(12px) saturate(150%);backdrop-filter:blur(12px) saturate(150%);box-shadow:inset 0 1px #ffffff59,0 1px 2px #0000004d,0 8px 20px -12px #dc2626b3;transition:opacity .2s var(--zf-ease-out),transform .2s var(--zf-ease-out),background .2s var(--zf-ease-out),border-color .2s var(--zf-ease-out),box-shadow .2s var(--zf-ease-out);z-index:100;font-size:14px;font-weight:700;line-height:1;padding:0}.zf-del-btn:hover{background:linear-gradient(180deg,#f87171f2,#dc2626fa);border-color:#ffffff6b;transform:scale(1.1);box-shadow:inset 0 1px #ffffff6b,0 2px 6px #00000052,0 12px 26px -12px #dc2626d9}.zf-del-btn:active{transform:scale(.98)}.zf-editor.zf-customise .grid-stack-item:hover>.zf-del-btn{opacity:1;transform:scale(1)}.zf-cfg-btn{position:absolute;top:0;right:28px;width:24px;height:24px;border-radius:9999px;background:linear-gradient(180deg,#262838b8,#13141fc7);border:1px solid rgba(255,255,255,.16);color:#ffffffeb;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transform:scale(.8);-webkit-backdrop-filter:blur(14px) saturate(150%);backdrop-filter:blur(14px) saturate(150%);box-shadow:inset 0 1px #ffffff1a,0 1px 2px #00000052,0 8px 20px -12px #000c;transition:opacity .2s var(--zf-ease-out),transform .2s var(--zf-ease-out),color .2s var(--zf-ease-out),border-color .2s var(--zf-ease-out),box-shadow .2s var(--zf-ease-out);z-index:100;padding:0}.zf-cfg-btn:hover{color:hsl(var(--zf-accent-hue, 242) 96% 82%);border-color:hsl(var(--zf-accent-hue, 242) 90% 76% / .6);transform:scale(1.1);box-shadow:inset 0 1px #ffffff24,0 2px 6px #00000057,0 12px 26px -14px #000000d1}.zf-cfg-btn:active{transform:scale(.98)}.zf-cfg-btn>svg{display:block}.zf-editor.zf-customise .grid-stack-item:hover>.zf-cfg-btn{opacity:1;transform:scale(1)}.zf-editor .grid-stack-placeholder>.placeholder-content{background:hsl(var(--zf-accent-hue, 242) 90% 76% / .15);border:2px dashed hsl(var(--zf-accent-hue, 242) 90% 76% / .55);border-radius:18px}.ui-draggable-dragging>.zf-drag-ghost{box-sizing:border-box;width:100%;height:100%;display:flex;align-items:center;gap:10px;padding:0 14px;direction:ltr;border-radius:12px;background:linear-gradient(165deg,#222332f2,#0d0e15f5);border:1px solid hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / .55);box-shadow:inset 0 1px #ffffff14,0 22px 50px -20px #000000d9,0 0 0 1px hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / .22);color:#eef1f8;font-family:var(--font-dmsans, "DM Sans", system-ui, sans-serif);-webkit-backdrop-filter:blur(10px) saturate(140%);backdrop-filter:blur(10px) saturate(140%);overflow:hidden}.ui-draggable-dragging>.zf-drag-ghost>.zf-drag-ghost-icon{width:30px;height:30px;flex:none;border-radius:7px;object-fit:cover}.ui-draggable-dragging>.zf-drag-ghost>.zf-drag-ghost-name{font-size:13px;font-weight:700;letter-spacing:.01em;text-transform:capitalize;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}body:has(.ui-draggable-dragging),body:has(.ui-draggable-dragging) *{cursor:grabbing!important}.zf-editor-bar{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-bottom:14px}.zf-editor-bar-spacer{flex:1}.zf-btn{font:inherit;font-size:13px;font-weight:600;line-height:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 15px;border-radius:10px;cursor:pointer;border:1px solid rgba(255,255,255,.14);background:linear-gradient(180deg,#262838b8,#13141fc7);color:#ffffffeb;-webkit-backdrop-filter:blur(14px) saturate(150%);backdrop-filter:blur(14px) saturate(150%);box-shadow:inset 0 1px #ffffff14,0 1px 2px #00000052,0 10px 24px -14px #000c;transition:background .18s var(--zf-ease-out),border-color .18s var(--zf-ease-out),color .18s var(--zf-ease-out),box-shadow .18s var(--zf-ease-out),transform .18s var(--zf-ease-out)}.zf-btn:hover{background:linear-gradient(180deg,#323447d1,#1a1b29db);border-color:#ffffff38;transform:translateY(-1px);box-shadow:inset 0 1px #ffffff1a,0 2px 6px #00000057,0 16px 30px -16px #000000d1}.zf-btn:active{transform:translateY(0) scale(.97);box-shadow:inset 0 1px 3px #00000073,0 1px 2px #0000004d}.zf-btn:focus-visible{outline:none;border-color:hsl(var(--zf-accent-hue, 242) 90% 76% / .7);box-shadow:inset 0 1px #ffffff14,0 0 0 3px hsl(var(--zf-accent-hue, 242) 90% 76% / .35)}.zf-btn--primary{border-color:hsl(var(--zf-accent-hue, 242) 90% 72% / .7);background:linear-gradient(180deg,hsl(var(--zf-accent-hue, 242) 96% 81%),hsl(var(--zf-accent-hue, 242) 88% 72%));color:#0b0c13;box-shadow:inset 0 1px #fff6,0 1px 2px #0000004d,0 12px 26px -12px hsl(var(--zf-accent-hue, 242) 85% 60% / .7)}.zf-btn--primary:hover{border-color:hsl(var(--zf-accent-hue, 242) 95% 78% / .85);background:linear-gradient(180deg,hsl(var(--zf-accent-hue, 242) 100% 85%),hsl(var(--zf-accent-hue, 242) 92% 76%));box-shadow:inset 0 1px #ffffff73,0 2px 6px #0000004d,0 18px 34px -14px hsl(var(--zf-accent-hue, 242) 85% 60% / .8)}.zf-btn--primary:focus-visible{box-shadow:inset 0 1px #fff6,0 0 0 3px hsl(var(--zf-accent-hue, 242) 90% 76% / .45)}.zf-btn--danger{border-color:#f2155352;color:#ff9aab}.zf-btn--danger:hover{border-color:#f215538c;color:#ffb3bf;background:linear-gradient(180deg,#781c349e,#4a1224b8)}.zf-btn--danger:focus-visible{border-color:#f21553b3;box-shadow:inset 0 1px #ffffff14,0 0 0 3px #f2155359}.zf-btn--ghost{border-color:#ffffff1a;background:linear-gradient(180deg,#1e1f2c80,#10111a94);color:#ffffffc7}.zf-btn--ghost:hover{color:#fffffff2}.zf-btn--icon{padding:0;width:38px;height:38px;border-radius:11px;color:#ffffffd9}.zf-btn--icon:hover{color:hsl(var(--zf-accent-hue, 242) 96% 82%);border-color:hsl(var(--zf-accent-hue, 242) 90% 76% / .55)}.zf-btn--icon>svg{display:block}@media(prefers-reduced-motion:reduce){.zf-btn:hover,.zf-btn:active,.zf-del-btn:active,.zf-cfg-btn:active,.zf-rail-tab:active,.zf-dialog-close:active{transform:none}}.zf-rail{flex:none;width:0;margin-left:0;overflow:hidden;position:sticky;top:12px;transition:width .32s var(--zf-ease-drawer),margin-left .32s var(--zf-ease-drawer)}.zf-editor.zf-customise .zf-rail{width:320px;margin-left:16px}.zf-editor.zf-customise[data-mode=flow-horizontal] .zf-rail{margin-right:24px}.zf-rail-inner{box-sizing:border-box;width:320px;display:flex;flex-direction:column;gap:12px;padding:14px;border-radius:14px;background:linear-gradient(180deg,#141622b3,#0b0c13cc);border:1px solid rgba(255,255,255,.08);max-height:calc(100vh - 24px);overflow-x:hidden;overflow-y:auto;opacity:0;transition:opacity .2s var(--zf-ease-out)}.zf-editor.zf-customise .zf-rail-inner{opacity:1;transition-delay:.12s}.zf-rail-actions{display:flex;flex:none;gap:8px}.zf-rail-actions .zf-btn{flex:1}.zf-rail-scroll{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:16px}@media(prefers-reduced-motion:reduce){.zf-rail,.zf-rail-inner{transition:none}}.zf-rail-tabs{display:flex;gap:4px;padding:3px;border-radius:9px;background:#00000047;border:1px solid rgba(255,255,255,.07)}.zf-rail-tab{flex:1;font:inherit;font-size:11px;font-weight:600;letter-spacing:.04em;color:#ffffff80;background:transparent;border:0;border-radius:7px;padding:6px 8px;cursor:pointer;transition:background .15s var(--zf-ease-out),color .15s var(--zf-ease-out),box-shadow .15s var(--zf-ease-out),transform .15s var(--zf-ease-out)}.zf-rail-tab:hover{color:#ffffffd1}.zf-rail-tab:active{transform:scale(.97)}.zf-rail-tab.is-active{color:#fff;background:hsl(var(--zf-accent-hue, 242) 90% 70% / .22);box-shadow:inset 0 0 0 1px hsl(var(--zf-accent-hue, 242) 90% 76% / .4)}.zf-rail-tab:focus-visible{outline:2px solid hsl(var(--zf-accent-hue, 242) 90% 76% / .7);outline-offset:1px}.zf-mode-seg{display:flex;gap:4px;padding:3px;border-radius:9px;background:#00000047;border:1px solid rgba(255,255,255,.07)}.zf-mode-seg-btn{flex:1;font:inherit;font-size:11px;font-weight:600;letter-spacing:.04em;color:#ffffff80;background:transparent;border:0;border-radius:7px;padding:6px 8px;cursor:pointer;transition:background .15s var(--zf-ease-out),color .15s var(--zf-ease-out),box-shadow .15s var(--zf-ease-out),transform .15s var(--zf-ease-out)}.zf-mode-seg-btn:hover:not(:disabled){color:#ffffffd1}.zf-mode-seg-btn:active:not(:disabled){transform:scale(.97)}.zf-mode-seg-btn.is-active{color:#fff;background:hsl(var(--zf-accent-hue, 242) 90% 70% / .22);box-shadow:inset 0 0 0 1px hsl(var(--zf-accent-hue, 242) 90% 76% / .4)}.zf-mode-seg-btn:disabled{opacity:.4;cursor:not-allowed}.zf-mode-seg-btn:focus-visible{outline:2px solid hsl(var(--zf-accent-hue, 242) 90% 76% / .7);outline-offset:1px}.zf-mode-seg-hint{margin:8px 1px 0;font-size:10.5px;line-height:1.4;color:#ffffff6b}.zf-rail-title{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#ffffff75;margin:0 0 8px}.zf-palette-hint{font-size:11px;color:#fff6;margin:-4px 0 8px}.zf-palette-search{display:flex;align-items:center;gap:7px;height:34px;margin:0 0 8px;padding:0 9px;border-radius:9px;border:1px solid rgba(255,255,255,.11);background:#00000047;color:#ffffff7a}.zf-palette-search:focus-within{border-color:var(--zf-accent);box-shadow:0 0 0 3px hsl(var(--zf-accent-hue, 242) 90% 76% / .12)}.zf-palette-search input{min-width:0;flex:1;border:0;outline:0;padding:0;background:transparent;color:#ffffffe6;font:inherit;font-size:12px}.zf-palette-search input::placeholder{color:#ffffff57}.zf-palette-search-clear{display:flex;align-items:center;justify-content:center;flex:none;width:18px;height:18px;padding:0;border:0;border-radius:5px;background:transparent;color:#ffffff80;cursor:pointer;transition:background .15s var(--zf-ease-out),color .15s var(--zf-ease-out)}.zf-palette-search-clear:hover{background:#ffffff14;color:#fff}.zf-palette-search-clear svg{width:12px;height:12px}.zf-palette-empty{font-size:12px;color:#ffffff73;padding:6px 2px;margin:0}.zf-palette-cats{display:flex;flex-direction:column;gap:6px}.zf-palette-cat{border-radius:10px;border:1px solid rgba(255,255,255,.06);background:#ffffff05;overflow:hidden;transition:background .15s var(--zf-ease-out),border-color .15s var(--zf-ease-out)}.zf-palette-cat.is-open{background:#ffffff09;border-color:#ffffff1a}.zf-palette-cat-header{display:flex;align-items:center;gap:9px;width:100%;font:inherit;text-align:left;cursor:pointer;padding:10px 11px;background:transparent;border:0;color:#fffc;transition:background .15s var(--zf-ease-out),color .15s var(--zf-ease-out)}.zf-palette-cat-header:hover{background:#ffffff0b;color:#fff}.zf-palette-cat-header:focus-visible{outline:2px solid hsl(var(--zf-accent-hue, 242) 90% 76% / .7);outline-offset:-2px}.zf-palette-cat-chevron{width:13px;height:13px;flex:none;color:#fff6;transition:transform .18s var(--zf-ease-out),color .15s var(--zf-ease-out)}.zf-palette-cat.is-open .zf-palette-cat-chevron{transform:rotate(90deg);color:hsl(var(--zf-accent-hue, 242) 70% 80% / .9)}.zf-palette-cat-label{flex:1;min-width:0;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.zf-palette-cat.is-open .zf-palette-cat-label{color:hsl(var(--zf-accent-hue, 242) 72% 84% / .95)}.zf-palette-cat-count{flex:none;font-size:10px;font-weight:600;font-variant-numeric:tabular-nums;color:#ffffff80;background:#ffffff12;border-radius:999px;padding:1px 7px;min-width:22px;text-align:center}.zf-palette-cat-body{padding:0 8px 9px;animation:zf-cat-in .18s var(--zf-ease-out)}@keyframes zf-cat-in{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.zf-palette-cat-body{animation:none}.zf-palette-cat-chevron{transition:none}}.zf-palette-cat-desc{font-size:10.5px;line-height:1.45;color:#ffffff61;margin:0 2px 9px}.zf-palette{display:flex;flex-direction:column;gap:6px}.zf-newwidget{display:flex;align-items:center;gap:10px;text-align:left;cursor:grab;user-select:none;-webkit-user-select:none;min-height:58px;padding:7px 10px 7px 8px;border-radius:9px;background:#ffffff0a;border:1px solid rgba(255,255,255,.07);transition:background .15s var(--zf-ease-out),border-color .15s var(--zf-ease-out)}.zf-newwidget:hover{background:#ffffff17;border-color:hsl(var(--zf-accent-hue, 242) 90% 76% / .4)}.zf-newwidget:active{cursor:grabbing}.zf-newwidget-icon{width:42px;height:42px;flex:none;border-radius:10px;object-fit:cover;background:#ffffff0d;box-shadow:inset 0 0 0 1px #ffffff14,0 8px 18px #00000038}.zf-newwidget-copy{min-width:0}.zf-newwidget-name{font-size:12px;font-weight:600;color:#ffffffe6;text-transform:capitalize}.zf-newwidget-desc{font-size:11px;color:#fff6;margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.zf-field{display:flex;flex-direction:column;gap:5px;margin-bottom:10px}.zf-field label{font-size:11px;color:#ffffff8c}.zf-field-hint{font-size:10px;color:#ffffff61;line-height:1.4;margin:0}.zf-input,.zf-textarea{font:inherit;font-size:12px;color:#ffffffe6;background:#0000004d;border:1px solid rgba(255,255,255,.12);border-radius:7px;padding:7px 9px;width:100%;box-sizing:border-box}.zf-textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;min-height:120px;resize:vertical;line-height:1.45}.zf-input:focus,.zf-textarea:focus{outline:none;border-color:var(--zf-accent)}.zf-checkbox{display:flex;align-items:center;gap:7px;font-size:12px;color:#ffffffb3;margin-bottom:10px;cursor:pointer}.zf-config-error{font-size:11px;color:#ff8b9d;line-height:1.45;margin:-4px 0 10px;white-space:pre-wrap}.zf-rail-empty{font-size:12px;color:#fff6;line-height:1.5}.zf-select{font:inherit;font-size:12px;color:#ffffffe6;background:#0000004d;border:1px solid rgba(255,255,255,.12);border-radius:7px;padding:7px 28px 7px 9px;width:100%;box-sizing:border-box;cursor:pointer;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-opacity='0.55' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center}.zf-select:focus{outline:none;border-color:var(--zf-accent)}.zf-select option{color:#0b0c13}.zf-field-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.zf-field-num{font-size:12px;font-variant-numeric:tabular-nums;font-weight:700;color:#ffffffd1}.zf-range{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:6px;margin:4px 0 2px;border-radius:9999px;outline:none;cursor:pointer;background:#ffffff21}.zf-range::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:15px;height:15px;border-radius:9999px;background:var(--zf-accent);border:2px solid #fff;box-shadow:0 1px 4px #00000080;cursor:pointer}.zf-range::-moz-range-thumb{width:15px;height:15px;border-radius:9999px;background:var(--zf-accent);border:2px solid #fff;box-shadow:0 1px 4px #00000080;cursor:pointer}.zf-range:focus-visible{box-shadow:0 0 0 3px hsl(var(--zf-accent-hue, 242) 90% 76% / .3)}.zf-color-row{display:flex;gap:8px}.zf-color{flex:none;width:40px;height:34px;padding:2px;border-radius:7px;border:1px solid rgba(255,255,255,.12);background:#0000004d;cursor:pointer}.zf-textarea--prose{font-family:inherit;min-height:76px}.zf-taglist{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:2px}.zf-tag{display:inline-flex;align-items:center;gap:5px;padding:4px 5px 4px 9px;border-radius:9999px;border:1px solid rgba(255,255,255,.1);background:#0000003d;font-size:11px;font-weight:600;letter-spacing:.02em;color:#ffffffd1}.zf-symbol-editor{position:relative;display:flex;flex-direction:column;gap:9px;margin:0 0 12px;padding:10px;border-radius:11px;border:1px solid hsl(var(--zf-accent-hue, 242) 90% 76% / .16);background:linear-gradient(135deg,hsl(var(--zf-accent-hue, 242) 90% 76% / .1),#ffffff09 45%,#00000029),#ffffff08}.zf-symbol-head,.zf-holding-row,.zf-holding-main,.zf-selected-symbol,.zf-symbol-search,.zf-symbol-chip{display:flex;align-items:center}.zf-symbol-head{justify-content:space-between;gap:10px}.zf-symbol-label{font-size:10px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:#ffffff75}.zf-symbol-detail{margin-top:2px;font-size:13px;font-weight:700;color:#ffffffe0}.zf-symbol-source{flex:none;padding:4px 7px;border-radius:9999px;border:1px solid rgba(255,255,255,.09);background:#0003;font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#ffffff7a}.zf-symbol-source.is-loading{color:var(--zf-accent);border-color:hsl(var(--zf-accent-hue, 242) 90% 76% / .24)}.zf-selected-symbol{min-width:0;gap:8px;padding:7px 8px;border-radius:9px;border:1px solid rgba(255,255,255,.08);background:#00000038}.zf-selected-symbol.is-compact{gap:6px;padding:0;border:0;background:transparent}.zf-selected-symbol-text{min-width:0;display:flex;flex-direction:column;gap:1px}.zf-selected-symbol-text strong,.zf-symbol-option-main strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:#ffffffe6}.zf-selected-symbol-text em,.zf-symbol-option-main em{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-size:10px;color:#fff6}.zf-selected-symbol-price{margin-left:auto;font-variant-numeric:tabular-nums;font-size:12px;font-weight:700;color:#ffffffb8}.zf-symbol-avatar{flex:none;width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:7px;font-size:9px;font-weight:800;letter-spacing:.02em;line-height:1}.zf-symbol-avatar--stock{background:#ffffffeb;color:#151821;box-shadow:inset 0 0 0 1px #00000014}.zf-symbol-avatar--crypto{background:hsl(var(--zf-accent-hue, 242) 90% 76% / .18);color:var(--zf-accent);box-shadow:inset 0 0 0 1px hsl(var(--zf-accent-hue, 242) 90% 76% / .22)}.zf-symbol-avatar--logo{object-fit:contain}.zf-symbol-avatar--logo.zf-symbol-avatar--stock{padding:2px}.zf-symbol-avatar--logo.zf-symbol-avatar--crypto{border-radius:9999px;background:transparent;box-shadow:none}.zf-symbol-chips{display:flex;flex-wrap:wrap;gap:6px}.zf-symbol-chip{min-width:0;gap:6px;max-width:100%;padding:6px 6px 6px 7px;border-radius:9999px;border:1px solid rgba(255,255,255,.08);background:#00000038}.zf-symbol-remove{flex:none;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:9999px;padding:0;cursor:pointer;background:#ffffff0f;color:#ffffff80}.zf-symbol-remove:hover{background:#ef44442e;color:#ff8b9d}.zf-symbol-empty{padding:7px 8px;border-radius:8px;border:1px dashed rgba(255,255,255,.09);color:#ffffff5c;font-size:11px}.zf-symbol-combo{position:relative}.zf-symbol-search{gap:7px;height:34px;border-radius:9px;padding:0 9px;border:1px solid rgba(255,255,255,.11);background:#00000047;color:#ffffff7a}.zf-symbol-search:focus-within{border-color:var(--zf-accent);box-shadow:0 0 0 3px hsl(var(--zf-accent-hue, 242) 90% 76% / .12)}.zf-symbol-search.is-disabled{opacity:.55}.zf-symbol-search input{min-width:0;flex:1;border:0;outline:0;padding:0;background:transparent;color:#ffffffe6;font:inherit;font-size:12px}.zf-symbol-search input::placeholder{color:#ffffff57}.zf-symbol-menu{position:absolute;z-index:120;top:calc(100% + 6px);left:0;right:0;display:flex;flex-direction:column;gap:3px;max-height:286px;overflow-y:auto;padding:6px;border-radius:11px;border:1px solid rgba(255,255,255,.12);background:#0b0c13f5;box-shadow:0 18px 36px #00000075,0 0 0 1px #0000004d;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.zf-symbol-option{width:100%;min-width:0;display:grid;grid-template-columns:22px minmax(0,1fr) auto 16px;align-items:center;gap:8px;min-height:40px;padding:7px;border:0;border-radius:8px;background:transparent;color:inherit;text-align:left;cursor:pointer}.zf-symbol-option:hover,.zf-symbol-option:focus-visible{outline:none;background:#ffffff13}.zf-symbol-option:disabled{cursor:default;opacity:.52}.zf-symbol-option.is-selected{background:hsl(var(--zf-accent-hue, 242) 90% 76% / .1)}.zf-symbol-option--custom{border-top:1px solid rgba(255,255,255,.06);border-radius:0 0 8px 8px}.zf-symbol-option-main{min-width:0;display:flex;flex-direction:column;gap:1px}.zf-symbol-option-meta{display:flex;flex-direction:column;align-items:flex-end;gap:1px;font-variant-numeric:tabular-nums;font-size:10px;color:#ffffff70}.zf-symbol-change{font-size:10px;font-weight:800}.zf-symbol-change.is-up{color:#42d67a}.zf-symbol-change.is-down{color:#ff637d}.zf-symbol-custom-icon{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:7px;background:#ffffff12;color:var(--zf-accent)}.zf-symbol-menu-status{padding:10px 8px;color:#ffffff61;font-size:11px}.zf-holding-list{display:flex;flex-direction:column;gap:6px}.zf-holding-row{justify-content:space-between;gap:8px;min-width:0;padding:7px;border-radius:9px;border:1px solid rgba(255,255,255,.08);background:#0000002e}.zf-holding-main{min-width:0;gap:7px}.zf-holding-amount{flex:none;font-variant-numeric:tabular-nums;font-size:11px;color:#ffffff70}.zf-theme{margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid rgba(255,255,255,.07)}.zf-theme-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:9px}.zf-theme-val{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-variant-numeric:tabular-nums;color:#ffffff8c}.zf-theme-swatch{width:11px;height:11px;border-radius:9999px;background:var(--zf-accent);box-shadow:0 0 8px hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / .9)}.zf-theme-knob-end{display:inline-flex;align-items:center;gap:10px}.zf-theme-reset{background:none;border:none;padding:0;font:inherit;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:#ffffff61;cursor:pointer}.zf-theme-reset:hover{color:var(--zf-accent)}.zf-hue-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:10px;border-radius:9999px;outline:none;cursor:pointer;border:1px solid rgba(255,255,255,.12);background:linear-gradient(to right,#f98b8b,#f9f98b,#8bf98b,#8bf9f9,#8b8bf9,#f98bf9,#f98b8b)}.zf-hue-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;border-radius:9999px;background:var(--zf-accent);border:2px solid #fff;box-shadow:0 1px 4px #00000080;cursor:pointer}.zf-hue-slider::-moz-range-thumb{width:16px;height:16px;border-radius:9999px;background:var(--zf-accent);border:2px solid #fff;box-shadow:0 1px 4px #00000080;cursor:pointer}.zf-presets{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:10px}.zf-preset{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:#ffffff08;color:#ffffffb3;font:inherit;font-size:11px;font-weight:600;cursor:pointer;text-align:left;transition:border-color .15s var(--zf-ease-out, ease),background .15s var(--zf-ease-out, ease),color .15s var(--zf-ease-out, ease)}.zf-preset:hover{border-color:#ffffff38;color:#ffffffe6}.zf-preset.is-active{border-color:var(--zf-accent);color:#fff;box-shadow:0 0 0 1px var(--zf-accent)}.zf-preset-swatch{width:16px;height:16px;flex:none;border-radius:5px;border:1px solid rgba(255,255,255,.18)}.zf-preset-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zf-seg{display:flex;gap:6px}.zf-seg-btn{flex:1;padding:7px 6px;border-radius:9px;border:1px solid rgba(255,255,255,.1);background:#ffffff08;color:#ffffff9e;font:inherit;font-size:11px;font-weight:600;cursor:pointer;white-space:nowrap;transition:border-color .15s var(--zf-ease-out, ease),background .15s var(--zf-ease-out, ease),color .15s var(--zf-ease-out, ease)}.zf-seg-btn:hover{border-color:#ffffff38;color:#ffffffd9}.zf-seg-btn.is-active{border-color:var(--zf-accent);background:hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 60% / .14);color:#fff}.zf-color{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:22px;height:16px;padding:0;border:1px solid rgba(255,255,255,.18);border-radius:5px;background:none;cursor:pointer;vertical-align:middle}.zf-color::-webkit-color-swatch-wrapper{padding:0}.zf-color::-webkit-color-swatch{border:none;border-radius:4px}.zf-color::-moz-color-swatch{border:none;border-radius:4px}.zf-dialog-backdrop{--zf-accent: hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76%);--zf-ease-out: cubic-bezier(.23, 1, .32, 1);position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px;background:#06070c9e;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:zf-dialog-fade .16s var(--zf-ease-out)}.zf-dialog{width:min(440px,100%);max-height:calc(100vh - 48px);display:flex;flex-direction:column;border-radius:16px;border:1px solid rgba(255,255,255,.1);background:linear-gradient(180deg,#141622fa,#0b0c13fc);box-shadow:0 30px 80px -20px #000c,0 0 0 1px #0006;animation:zf-dialog-pop .18s cubic-bezier(.32,.72,0,1)}.zf-dialog-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 16px 12px;border-bottom:1px solid rgba(255,255,255,.07)}.zf-dialog-title{margin:0;font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#ffffff9e}.zf-dialog-close{flex:none;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;border:1px solid rgba(255,255,255,.1);background:#ffffff0a;color:#ffffffb3;cursor:pointer;transition:background .15s var(--zf-ease-out),color .15s var(--zf-ease-out),border-color .15s var(--zf-ease-out),transform .15s var(--zf-ease-out)}.zf-dialog-close:hover{background:#ffffff17;border-color:#ffffff2e;color:#fff}.zf-dialog-close:active{transform:scale(.94)}.zf-dialog-close>svg{display:block}.zf-dialog-body{padding:16px;overflow-y:auto;scrollbar-gutter:stable}.zf-dialog-body>:first-child{margin-top:0}.zf-dialog-foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px 16px;border-top:1px solid rgba(255,255,255,.07)}@keyframes zf-dialog-fade{0%{opacity:0}to{opacity:1}}@keyframes zf-dialog-pop{0%{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.zf-dialog-backdrop,.zf-dialog{animation:none}}