zframes 0.3.0 → 0.4.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 (110) hide show
  1. package/dist/index.js +533 -84
  2. package/package.json +5 -5
  3. package/runtime/assets/bitcoin-dominance-DVZsIJ3y.js +1 -0
  4. package/runtime/assets/breakeven-lskbHkqb.js +1 -0
  5. package/runtime/assets/breathing-BeUkCUAJ.js +1 -0
  6. package/runtime/assets/btc-blocks-fXBgGo4z.js +1 -0
  7. package/runtime/assets/btc-difficulty-BwyxgI0e.js +1 -0
  8. package/runtime/assets/btc-fees-Bg1rcXtN.js +1 -0
  9. package/runtime/assets/btc-hashrate-Xg8QNlTO.js +1 -0
  10. package/runtime/assets/btc-mempool-8Mfa77fO.js +1 -0
  11. package/runtime/assets/btc-shared-DeqDaCze.js +1 -0
  12. package/runtime/assets/calculator-CiXyJA9p.js +1 -0
  13. package/runtime/assets/chart-utils-BYIZMM9J.js +1 -0
  14. package/runtime/assets/checklist-D0dKSdmf.js +1 -0
  15. package/runtime/assets/clock-CNQTNh4L.js +1 -0
  16. package/runtime/assets/coin-movers-DulAF_oo.js +1 -0
  17. package/runtime/assets/content-shared-BZ1XzrJx.js +1 -0
  18. package/runtime/assets/countdown-BzZ2L6bw.js +1 -0
  19. package/runtime/assets/{d3-B3esOK0k.js → d3-xK4fOkBU.js} +1 -1
  20. package/runtime/assets/daily-analysis-RyI5KL4T.js +1 -0
  21. package/runtime/assets/day-meter-2bAj77Kz.js +1 -0
  22. package/runtime/assets/dex-volume-chart-DDPf1YAN.js +1 -0
  23. package/runtime/assets/dex-volume-treemap-jZCgRREu.js +1 -0
  24. package/runtime/assets/dice-wg979Skm.js +1 -0
  25. package/runtime/assets/dino-game-DlACWmE_.js +1 -0
  26. package/runtime/assets/divider-Chz1UsWJ.js +1 -0
  27. package/runtime/assets/drawdy-Ce7P47cx.js +1 -0
  28. package/runtime/assets/editor-BlGZ_tel.js +68 -0
  29. package/runtime/assets/editor-CHAAJRb1.css +1 -0
  30. package/runtime/assets/fear-greed-CENzXdIk.js +1 -0
  31. package/runtime/assets/feed-row-mVg1d5Zj.js +1 -0
  32. package/runtime/assets/filings-feed-2aIKzUUY.js +1 -0
  33. package/runtime/assets/financial-stress--ezsCpfR.js +1 -0
  34. package/runtime/assets/flappy-bird-DDe-IXt9.js +1 -0
  35. package/runtime/assets/format-CfAcS4D8.js +1 -0
  36. package/runtime/assets/fundamentals-v8f81ZNS.js +1 -0
  37. package/runtime/assets/funding-heatmap-DUoeFNGr.js +1 -0
  38. package/runtime/assets/funding-rate-chart-CjDA4nj7.js +1 -0
  39. package/runtime/assets/fx-board-CmXYQZi4.js +1 -0
  40. package/runtime/assets/game-ui-Dy_QYsPr.js +1 -0
  41. package/runtime/assets/heading-DMxdj9LK.js +1 -0
  42. package/runtime/assets/holiday-calendar-DxB-fxG5.js +1 -0
  43. package/runtime/assets/image-DLg33JpH.js +1 -0
  44. package/runtime/assets/index-C_O7gp2F.js +822 -0
  45. package/runtime/assets/index-DRTPEQtR.css +1 -0
  46. package/runtime/assets/index-XGtH5pVY.css +1 -0
  47. package/runtime/assets/index-jnySFpSv.js +1 -0
  48. package/runtime/assets/inflation-pulse-gcw-84PM.js +1 -0
  49. package/runtime/assets/journal-log-BX5Z_yte.js +1 -0
  50. package/runtime/assets/journal-open-XFQGIRkw.js +1 -0
  51. package/runtime/assets/journal-results-J1WCmyH2.js +1 -0
  52. package/runtime/assets/journal-score-CKhBSfYY.js +1 -0
  53. package/runtime/assets/journal-store-KCRoPnI_.js +1 -0
  54. package/runtime/assets/journal-ui-Cogk2Wkt.js +1 -0
  55. package/runtime/assets/labor-market-BV20Rl-4.js +1 -0
  56. package/runtime/assets/lightning-stats-h4fquhAg.js +1 -0
  57. package/runtime/assets/link-grid-a6NWj1Hu.js +1 -0
  58. package/runtime/assets/market-cap-treemap-CAi49oc_.js +1 -0
  59. package/runtime/assets/market-data-CvmpLFSo.js +1 -0
  60. package/runtime/assets/market-hours-6srwf0-r.js +1 -0
  61. package/runtime/assets/marquee-DDurk6bj.js +28 -0
  62. package/runtime/assets/metric-row-BVVhjsjK.js +1 -0
  63. package/runtime/assets/mini-line-chart-D-i1QqSe.js +1 -0
  64. package/runtime/assets/mining-pools-BPjCy4ZW.js +1 -0
  65. package/runtime/assets/mover-row-kQ9xt3Sp.js +1 -0
  66. package/runtime/assets/national-debt-DkOnmfd1.js +1 -0
  67. package/runtime/assets/news-feed-CFWKKqrH.js +1 -0
  68. package/runtime/assets/note-_cGEXAru.js +1 -0
  69. package/runtime/assets/open-interest-fxHh_T-V.js +1 -0
  70. package/runtime/assets/options-iv-CDArg1Op.js +1 -0
  71. package/runtime/assets/options-oi-strike-D_XIgUkk.js +1 -0
  72. package/runtime/assets/options-put-call-DG4RXjzD.js +1 -0
  73. package/runtime/assets/pomodoro-B-Jk-51G.js +1 -0
  74. package/runtime/assets/portfolio-allocation-BJepNj1X.js +1 -0
  75. package/runtime/assets/portfolio-common-D5L06PNC.js +1 -0
  76. package/runtime/assets/portfolio-holdings-DSkAZALG.js +1 -0
  77. package/runtime/assets/portfolio-value-BJw2csWV.js +1 -0
  78. package/runtime/assets/price-chart-khxI-9vJ.js +1 -0
  79. package/runtime/assets/price-compare-C-uEckke.js +1 -0
  80. package/runtime/assets/price-liveline-BDesEIbL.js +1 -0
  81. package/runtime/assets/price-ticker-BXSeNYf9.js +1 -0
  82. package/runtime/assets/protocol-fees-treemap-YtWbL1Kn.js +1 -0
  83. package/runtime/assets/protocol-tvl-chart-CEjUOIY5.js +1 -0
  84. package/runtime/assets/protocol-tvl-treemap-b31QlpnS.js +1 -0
  85. package/runtime/assets/quote-cehyepdm.js +1 -0
  86. package/runtime/assets/rates-board-Du4k0z1i.js +1 -0
  87. package/runtime/assets/returns-projector-DXnRFAES.js +1 -0
  88. package/runtime/assets/risk-reward-DZWyCrbv.js +1 -0
  89. package/runtime/assets/rules-card-BXJjNTqj.js +1 -0
  90. package/runtime/assets/session-progress-bA45Q3wk.js +1 -0
  91. package/runtime/assets/short-volume-C6cWknyR.js +1 -0
  92. package/runtime/assets/snake-DYTa97hl.js +1 -0
  93. package/runtime/assets/spotify-embed-BaH6UHeG.js +1 -0
  94. package/runtime/assets/stopwatch-CS6n0bY9.js +1 -0
  95. package/runtime/assets/top-movers-CQNx9EH5.js +1 -0
  96. package/runtime/assets/treasury-auctions-CGM8hAuU.js +1 -0
  97. package/runtime/assets/treemap-leaf-DLQawrx4.js +1 -0
  98. package/runtime/assets/tvl-treemap-C3SUFzdj.js +1 -0
  99. package/runtime/assets/ui-Bq3RQsdJ.js +1 -0
  100. package/runtime/assets/unicorn-scene-DcohHRPZ.js +1 -0
  101. package/runtime/assets/use-countdown-BmcF-qdL.js +1 -0
  102. package/runtime/assets/utils-DaT-yT0k.js +1 -0
  103. package/runtime/assets/video-WCnvLwQ_.js +1 -0
  104. package/runtime/assets/yield-curve-CpitTQ9L.js +1 -0
  105. package/runtime/index.html +2 -4
  106. package/runtime/assets/editor-DVTcqJo4.js +0 -68
  107. package/runtime/assets/editor-DnV0I9s-.css +0 -1
  108. package/runtime/assets/index-DEGnog6Q.css +0 -1
  109. package/runtime/assets/index-DPlG_EDx.js +0 -35727
  110. package/runtime/assets/index-KRy1feFG.js +0 -761
@@ -0,0 +1 @@
1
+ import{r as l,j as e}from"./react-qoZPGuNy.js";import{i as S}from"./content-shared-BZ1XzrJx.js";import{D as h,U as f,a as y,d as v}from"./format-CfAcS4D8.js";import{f as M,aJ as R}from"./index-C_O7gp2F.js";import{s as O}from"./ui-Bq3RQsdJ.js";R.schema;const P="var(--color-highlight)";function b(s){const a=Number(s);return Number.isFinite(a)?a:0}function g({label:s,value:a,onChange:n}){return e.jsxs("label",{className:"flex min-w-0 flex-col gap-1",children:[e.jsx("span",{className:"caption text-soft uppercase tracking-[0.12em]",children:s}),e.jsxs("span",{className:`flex items-center px-2 py-1.5 ${S}`,children:[e.jsx("span",{className:"body-sm text-soft",children:"$"}),e.jsx("input",{type:"number",inputMode:"decimal",value:a,onChange:c=>n(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"})]})]})}function L({value:s,onChange:a}){return e.jsx("div",{className:`flex gap-1 p-1 ${S}`,children:["long","short"].map(n=>{const c=n===s;return e.jsx("button",{type:"button",onClick:()=>a(n),className:`caption flex-1 rounded px-2 py-1 text-center uppercase tracking-[0.12em] transition-colors ${c?"bg-white/[0.06] font-semibold":"text-soft"}`,style:c?{color:P}:void 0,children:n},n)})})}function T({config:s}){const[a,n]=l.useState(String(s.entry)),[c,j]=l.useState(String(s.stop)),[m,N]=l.useState(String(s.target)),[o,k]=l.useState(s.direction);l.useEffect(()=>n(String(s.entry)),[s.entry]),l.useEffect(()=>j(String(s.stop)),[s.stop]),l.useEffect(()=>N(String(s.target)),[s.target]),l.useEffect(()=>k(s.direction),[s.direction]);const t=l.useMemo(()=>{const r=b(a),p=b(c),x=b(m),i=Math.abs(r-p),d=Math.abs(x-r),D=i>0?d/i:0,E=r!==0?i/r*100:0,$=r!==0?d/r*100:0,u=i+d,U=u>0?i/u*100:50,F=o==="long"?p<r&&r<x:x<r&&r<p;return{riskPerUnit:i,rewardPerUnit:d,rr:D,riskPct:E,rewardPct:$,riskShare:U,hasRisk:i>0,hasData:u>0,valid:F}},[a,c,m,o]),C=t.hasData?t.hasRisk?`1 : ${t.rr.toFixed(t.rr>=10?0:1)}`:"∞":"—",w=s.label.trim();return e.jsxs("div",{className:`${O} flex flex-col gap-3`,children:[w&&e.jsx("span",{className:"caption text-soft uppercase tracking-[0.12em]",children:w}),e.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[e.jsx(g,{label:"Entry",value:a,onChange:n}),e.jsx(g,{label:"Stop",value:c,onChange:j}),e.jsx(g,{label:"Target",value:m,onChange:N})]}),e.jsx(L,{value:o,onChange:k}),e.jsxs("div",{className:"flex flex-col gap-2.5 rounded-lg border border-white/[0.07] bg-white/[0.03] p-3",children:[e.jsxs("div",{className:"flex flex-col items-center gap-0.5",children:[e.jsx("span",{className:"caption text-soft uppercase tracking-[0.12em]",children:"Risk : Reward"}),e.jsx("span",{className:"metric-md",style:{color:t.hasData?P:void 0},children:C})]}),e.jsxs("div",{className:"flex h-2.5 w-full overflow-hidden rounded-full bg-white/[0.06]",children:[e.jsx("span",{className:"h-full",style:{width:`${t.riskShare}%`,background:h}}),e.jsx("span",{className:"h-full",style:{width:`${100-t.riskShare}%`,background:f}})]}),e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"flex min-w-0 flex-col",children:[e.jsx("span",{className:"caption uppercase tracking-[0.12em]",style:{color:h},children:"Risk"}),e.jsx("span",{className:"body-sm tabular-nums",style:{color:h},children:y(-t.riskPct)}),e.jsxs("span",{className:"caption text-soft tabular-nums",children:[v(t.riskPerUnit)," / unit"]})]}),e.jsxs("div",{className:"flex min-w-0 flex-col items-end text-right",children:[e.jsx("span",{className:"caption uppercase tracking-[0.12em]",style:{color:f},children:"Reward"}),e.jsx("span",{className:"body-sm tabular-nums",style:{color:f},children:y(t.rewardPct)}),e.jsxs("span",{className:"caption text-soft tabular-nums",children:[v(t.rewardPerUnit)," / unit"]})]})]}),t.hasData&&!t.valid&&e.jsxs("span",{className:"caption text-soft",children:["⚠ Prices don't bracket entry for a ",o," setup."]})]})]})}const z=M({...R,component:T});export{z as riskRewardFrame};
@@ -0,0 +1 @@
1
+ import{j as s}from"./react-qoZPGuNy.js";import{f as m,bb as n}from"./index-C_O7gp2F.js";import{F as i,s as o}from"./ui-Bq3RQsdJ.js";n.schema;function c({config:l}){const r=l.rules.filter(e=>e.trim()),a=l.title.trim();return r.length===0?s.jsx(i,{children:"no rules yet"}):s.jsxs("div",{className:"flex h-full w-full flex-col",children:[a&&s.jsx("div",{className:"body-sm text-strong mb-1 shrink-0 font-semibold",children:a}),s.jsx("ol",{className:`min-h-0 flex-1 ${o}`,children:r.map((e,t)=>s.jsxs("li",{className:"flex gap-2 py-1",children:[s.jsx("span",{className:"caption text-highlight shrink-0 tabular-nums",children:t+1}),s.jsx("span",{className:"body-sm text-normal",children:e})]},t))})]})}const u=m({...n,component:c});export{u as rulesCardFrame};
@@ -0,0 +1 @@
1
+ import{r as d,j as e}from"./react-qoZPGuNy.js";import{E as u,e as w,f as h}from"./market-data-CvmpLFSo.js";import{f as N,aL as f}from"./index-C_O7gp2F.js";import{F as v}from"./ui-Bq3RQsdJ.js";f.schema;function x(s){const[o,r]=s.split(":").map(Number);return o*60+r}function b(s){return Math.min(1,Math.max(0,s))}function M({config:s}){const[o,r]=d.useState(()=>new Date);d.useEffect(()=>{const j=setInterval(()=>r(new Date),3e4);return()=>clearInterval(j)},[]);const n=u[s.exchange]??u.NYSE;if(!n)return e.jsx(v,{children:"unknown exchange"});const t=w(n,o),a=t.status==="open",c=s.label.trim(),l=x(t.close)-x(t.open),i=a&&l>0?b((l-t.nextChangeMin)/l):0,p=Math.round(i*100),g=t.status==="holiday"?"Holiday":a?`${p}%`:"Closed",m=a?`closes in ${h(t.nextChangeMin)}`:s.showCountdown?`opens in ${h(t.nextChangeMin)}`:null;return e.jsxs("div",{className:"flex h-full w-full flex-col justify-center gap-2",children:[e.jsxs("div",{className:"caption text-soft flex items-center gap-1.5 uppercase tracking-[0.14em]",children:[e.jsx("span",{className:"text-normal font-semibold",children:n.mark}),e.jsx("span",{children:n.code}),c&&e.jsxs("span",{className:"text-disabled truncate tracking-normal normal-case",children:["· ",c]})]}),e.jsx("div",{className:`metric-md leading-none ${a?"text-strong":"text-soft"}`,children:g}),e.jsx("div",{className:"bg-surface h-2 w-full overflow-hidden rounded-full",children:e.jsx("div",{className:"h-full rounded-full transition-[width] duration-500",style:{width:`${i*100}%`,background:"var(--color-highlight)"}})}),m&&e.jsx("div",{className:"caption text-soft",children:m})]})}const $=N({...f,component:M});export{$ as sessionProgressFrame};
@@ -0,0 +1 @@
1
+ import{r as u,j as s}from"./react-qoZPGuNy.js";import{f as x,ad as h,ae as f,A as p}from"./index-C_O7gp2F.js";import{b,e as i}from"./format-CfAcS4D8.js";import{F as c,s as j}from"./ui-Bq3RQsdJ.js";h.schema;const d=(e=1)=>`hsl(var(--zf-accent-hue, 242) 85% 72% / ${e})`;function y({symbol:e,entry:o}){const l=e.includes(":")?e:`xyz:${o.symbol}`,r=Math.max(0,Math.min(100,o.shortPct));return s.jsxs("div",{className:"flex min-w-0 items-center gap-3 border-b border-white/[0.06] py-2 last:border-b-0",children:[s.jsx(p,{symbol:l,size:20}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsxs("div",{className:"flex items-baseline justify-between gap-2",children:[s.jsx("span",{className:"body-sm text-strong truncate font-semibold",children:o.symbol}),s.jsx("span",{className:"body-md text-strong font-bold tabular-nums",children:b(r,1)})]}),s.jsx("div",{className:"mt-1 h-1.5 w-full overflow-hidden rounded-full bg-white/[0.07]",children:s.jsx("div",{className:"h-full rounded-full",style:{width:`${r}%`,background:d(.85),boxShadow:`0 0 8px ${d(.5)}`}})}),s.jsxs("div",{className:"caption text-soft mt-1 tabular-nums",children:["short ",i(o.shortVolume)," /"," ",i(o.totalVolume)]})]})]})}function v({config:e}){const{data:o,isLoading:l}=f(e.symbols),r=u.useMemo(()=>{const a=e.symbols.map(t=>({symbol:t,entry:o[t]})).filter(t=>!!t.entry);return a.sort((t,n)=>e.sort==="symbol"?t.entry.symbol.localeCompare(n.entry.symbol):e.sort==="volume"?n.entry.totalVolume-t.entry.totalVolume:n.entry.shortPct-t.entry.shortPct),a},[o,e.symbols,e.sort]);if(l)return s.jsx(c,{loading:!0,children:"loading short volume…"});if(r.length===0)return s.jsx(c,{children:"no FINRA short-volume data yet"});const m=r[0].entry.date;return s.jsxs("div",{className:"flex h-full min-h-0 flex-col gap-3",children:[s.jsxs("div",{className:"flex items-start justify-between gap-3",children:[s.jsxs("div",{children:[s.jsx("div",{className:"caption text-soft uppercase",children:"short volume"}),s.jsx("div",{className:"body-sm text-normal",children:m?`FINRA · ${m}`:"FINRA"})]}),s.jsxs("div",{className:"caption text-soft text-right",children:["reported volume",s.jsx("br",{}),"not short interest"]})]}),s.jsx("div",{className:j,children:r.map(({symbol:a,entry:t})=>s.jsx(y,{symbol:a,entry:t},a))})]})}const F=x({...h,component:v});export{F as shortVolumeFrame};
@@ -0,0 +1 @@
1
+ import{r as a,j as L}from"./react-qoZPGuNy.js";import{a as H,G as M,d as I}from"./game-ui-Dy_QYsPr.js";import{f as j,ay as z}from"./index-C_O7gp2F.js";import"./format-CfAcS4D8.js";const g=18,P=14,W=0,N={snakeHead:"rgba(255, 255, 255, 0.95)",food:"hsla(347, 100%, 62%, 1)"};function O(s,r,l,u,f){s.fillStyle=u,s.fillRect(r.originX+l.x*g+f,r.originY+l.y*g+f,g-f*2,g-f*2)}function q(s,r,l,u,f,y){r.clearRect(0,0,s.width,s.height),O(r,l,l.food,N.food,3),l.snake.forEach((d,C)=>O(r,l,d,C===0?N.snakeHead:y,2)),I(s,r,u,f,y)}function X(s,r,l,u,f,y){r.clearRect(0,0,s.width,s.height),r.textAlign="center",l==="idle"?(r.fillStyle=M.text,r.font='bold 14px "DM Sans", sans-serif',r.fillText("Arrow keys or swipe to start",s.width/2,s.height/2)):(r.fillStyle=M.gameOver,r.font='bold 20px "DM Sans", sans-serif',r.fillText("GAME OVER",s.width/2,s.height/2-30),r.fillStyle=M.text,r.font='bold 14px "DM Sans", sans-serif',r.fillText(`Score: ${u}`,s.width/2,s.height/2),r.fillStyle=M.textSoft,r.fillText("Press an arrow or tap to play again",s.width/2,s.height/2+28)),r.textAlign="left",I(s,r,u,f,y)}function v(){const s=a.useRef(null),r=a.useRef(null),[l,u]=a.useState("idle"),[f,y]=a.useState(0),[d,C]=a.useState(()=>{if(typeof window<"u"){const e=localStorage.getItem("zframes-snake-high-score");return e?parseInt(e,10):0}return 0}),[,K]=a.useState(!1),h=a.useRef(0),S=a.useRef(d),x=a.useRef(l),A=a.useRef(null),b=a.useRef(H(null));a.useEffect(()=>{S.current=d,d>0&&localStorage.setItem("zframes-snake-high-score",String(d))},[d]),a.useEffect(()=>{x.current=l},[l]);const w=a.useRef({snake:[],dir:{x:1,y:0},pendingDir:{x:1,y:0},food:{x:0,y:0},cols:0,rows:0,originX:0,originY:0,stepCounter:0}),D=a.useCallback(()=>{const e=w.current;if(e.cols<=0||e.rows<=0)return;let t,o=0;do t={x:Math.floor(Math.random()*e.cols),y:Math.floor(Math.random()*e.rows)},o++;while(e.snake.some(i=>i.x===t.x&&i.y===t.y)&&o<400);e.food=t},[]),T=a.useCallback(()=>{const e=w.current,t=Math.floor(e.cols/2),o=Math.floor(e.rows/2);e.snake=[{x:t,y:o},{x:t-1,y:o},{x:t-2,y:o}],e.dir={x:1,y:0},e.pendingDir={x:1,y:0},e.stepCounter=0,D(),h.current=0,y(0)},[D]),p=a.useCallback(()=>{w.current.cols<=0||(T(),u("playing"))},[T]),m=a.useCallback((e,t)=>{const o=w.current;o.dir.x===-e&&o.dir.y===-t||(o.pendingDir={x:e,y:t})},[]);a.useEffect(()=>{const e=o=>{const i=o.target;if(i.tagName==="INPUT"||i.tagName==="TEXTAREA"||i.isContentEditable)return;const c=x.current==="playing";let n=!0;switch(o.code){case"ArrowUp":case"KeyW":c?m(0,-1):p();break;case"ArrowDown":case"KeyS":c?m(0,1):p();break;case"ArrowLeft":case"KeyA":c?m(-1,0):p();break;case"ArrowRight":case"KeyD":c?m(1,0):p();break;case"Space":c||p();break;default:n=!1}n&&o.preventDefault()},t=r.current;if(t)return t.addEventListener("keydown",e),()=>t.removeEventListener("keydown",e)},[m,p]),a.useLayoutEffect(()=>{const e=s.current;if(!e)return;const t=()=>{const i=e.parentElement;if(i&&i.clientWidth>0&&i.clientHeight>0){e.width=i.clientWidth,e.height=i.clientHeight-W,b.current=H(e);const c=w.current;c.cols=Math.max(5,Math.floor(e.width/g)),c.rows=Math.max(5,Math.floor(e.height/g)),c.originX=Math.floor((e.width-c.cols*g)/2),c.originY=Math.floor((e.height-c.rows*g)/2);const n=e.getContext("2d");n&&x.current!=="playing"&&X(e,n,x.current,h.current,S.current,b.current),K(E=>!E)}};t();const o=new ResizeObserver(t);return o.observe(e.parentElement),()=>o.disconnect()},[]),a.useEffect(()=>{if(l!=="playing")return;const e=s.current,t=e==null?void 0:e.getContext("2d");if(!e||!t)return;let o;const i=()=>{h.current>S.current&&(S.current=h.current,C(h.current)),u("gameover")},c=()=>{const n=w.current;if(n.stepCounter++,n.stepCounter>=P){n.stepCounter=0,n.dir=n.pendingDir;const E=n.snake[0],k=E.x+n.dir.x,R=E.y+n.dir.y;if(k<0||R<0||k>=n.cols||R>=n.rows){i();return}const G=k===n.food.x&&R===n.food.y;if((G?n.snake:n.snake.slice(0,-1)).some(F=>F.x===k&&F.y===R)){i();return}n.snake.unshift({x:k,y:R}),G?(h.current+=1,y(h.current),D()):n.snake.pop()}q(e,t,n,h.current,S.current,b.current),o=requestAnimationFrame(c)};return o=requestAnimationFrame(c),()=>cancelAnimationFrame(o)},[l]),a.useEffect(()=>{if(l==="playing")return;const e=s.current,t=e==null?void 0:e.getContext("2d");!e||!t||X(e,t,l,f,d,b.current)},[l,f,d]);const U=e=>{const t=e.touches[0];t&&(A.current={x:t.clientX,y:t.clientY})},Y=e=>{var n;const t=A.current;A.current=null;const o=e.changedTouches[0];if((n=r.current)==null||n.focus(),x.current!=="playing"){p();return}if(!t||!o)return;const i=o.clientX-t.x,c=o.clientY-t.y;Math.abs(i)<12&&Math.abs(c)<12||(Math.abs(i)>Math.abs(c)?m(i>0?1:-1,0):m(0,c>0?1:-1))};return L.jsx("div",{ref:r,tabIndex:0,className:"relative h-full w-full cursor-pointer select-none overflow-hidden outline-none",onTouchStart:U,onTouchEnd:Y,onClick:()=>{var e;return(e=r.current)==null?void 0:e.focus()},role:"application","aria-label":"Snake game. Use the arrow keys or swipe to steer.",children:L.jsx("canvas",{ref:s,className:"h-full w-full"})})}const Q=j({...z,component:v});export{Q as snakeFrame};
@@ -0,0 +1 @@
1
+ import{r as s,j as l}from"./react-qoZPGuNy.js";import{f as p,bd as i}from"./index-C_O7gp2F.js";import{F as o}from"./ui-Bq3RQsdJ.js";i.schema;const c=["track","album","playlist","artist","episode","show"];function d(t){let a;try{a=new URL(t.trim())}catch{return null}if(a.hostname.replace(/^www\./,"")!=="open.spotify.com")return null;const r=a.pathname.split("/").filter(Boolean),e=r.findIndex(n=>c.includes(n));return e===-1||!r[e+1]?null:`https://open.spotify.com/embed/${r[e]}/${r[e+1]}`}function m({config:t}){const[a,r]=s.useState("loading"),e=s.useMemo(()=>d(t.url),[t.url]);return e?a==="error"?l.jsx(o,{children:"player unavailable"}):l.jsxs("div",{className:"relative h-full w-full overflow-hidden rounded-md",children:[a==="loading"&&l.jsx("div",{className:"absolute inset-0 z-10",children:l.jsx(o,{loading:!0,children:"loading player…"})}),l.jsx("iframe",{src:e,title:"Spotify player",className:"w-full",height:t.compact?152:"100%",style:{border:0,height:t.compact?152:"100%"},loading:"lazy",allow:"autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture",onLoad:()=>r("loaded"),onError:()=>r("error")},e+String(t.compact))]}):l.jsx(o,{children:"paste a Spotify track / album / playlist URL"})}const h=p({...i,component:m});export{h as spotifyEmbedFrame};
@@ -0,0 +1 @@
1
+ import{r as l,j as s}from"./react-qoZPGuNy.js";import{i as h}from"./content-shared-BZ1XzrJx.js";import{f as y,aK as f,m as S}from"./index-C_O7gp2F.js";f.schema;const p="var(--color-highlight)",x="0 0 18px hsl(var(--zf-accent-hue, 242) 92% 70% / 0.45)",i=t=>String(t).padStart(2,"0");function g(t){const e=Math.floor(Math.max(0,t)/1e3),c=Math.floor(e/3600),n=Math.floor(e%3600/60),o=e%60;return c>0?`${c}:${i(n)}:${i(o)}`:`${i(n)}:${i(o)}`}function k({config:t}){const e=S(),[c,n]=l.useState({startedAt:t.startedAt,accumulatedMs:t.accumulatedMs}),o=e?t.startedAt:c.startedAt,w=e?t.accumulatedMs:c.accumulatedMs,a=o!==0,d=l.useCallback(r=>{e?e(r):n(m=>({...m,...r}))},[e]),[,b]=l.useState(0);l.useEffect(()=>{if(!a)return;const r=window.setInterval(()=>b(m=>m+1),250);return()=>window.clearInterval(r)},[a]);const u=w+(a?Date.now()-o:0),v=()=>d({startedAt:Date.now()}),M=()=>d({startedAt:0,accumulatedMs:u}),j=()=>d({startedAt:0,accumulatedMs:0});return s.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-2 text-center",children:[t.label&&s.jsxs("div",{className:"caption text-soft inline-flex items-center gap-1.5 uppercase tracking-[0.18em]",children:[s.jsx("span",{"aria-hidden":!0,className:"inline-block h-1 w-1 rounded-full",style:{background:p,boxShadow:a?x:void 0}}),t.label]}),s.jsx("div",{className:"metric-lg text-strong leading-none",style:a?{color:p,textShadow:x}:void 0,children:g(u)}),s.jsxs("div",{className:"flex items-center justify-center gap-2",children:[s.jsx("button",{type:"button",onClick:a?M:v,className:`caption text-normal px-3 py-1 uppercase tracking-[0.12em] ${h}`,style:a?void 0:{color:p},children:a?"Pause":"Start"}),s.jsx("button",{type:"button",onClick:j,disabled:!a&&u===0,className:`caption text-soft px-3 py-1 uppercase tracking-[0.12em] transition-opacity disabled:opacity-40 ${h}`,children:"Reset"})]})]})}const E=y({...f,component:k});export{E as stopwatchFrame};
@@ -0,0 +1 @@
1
+ import{r as d,j as s}from"./react-qoZPGuNy.js";import{f,af as m,a7 as g,h as l}from"./index-C_O7gp2F.js";import{M as i}from"./mover-row-kQ9xt3Sp.js";import{F as n}from"./ui-Bq3RQsdJ.js";import"./format-CfAcS4D8.js";m.schema;const h=["xyz:*"];function u({config:t}){const{stats:c,isLoading:p}=g(h,6e4),{gainers:o,losers:x}=d.useMemo(()=>{const e=Object.entries(c).map(([a,r])=>({symbol:a,...r})).filter(a=>a.symbol.includes(":")&&a.markPx>0&&a.prevDayPx>0).sort((a,r)=>r.changePct-a.changePct);return{gainers:e.slice(0,t.count),losers:e.slice(-t.count).reverse()}},[c,t.count]);return p?s.jsx(n,{loading:!0,children:"loading movers…"}):o.length===0?s.jsx(n,{children:"no mover data yet"}):s.jsxs("div",{className:"grid h-full grid-cols-2 gap-x-4 overflow-hidden",children:[s.jsxs("div",{className:"flex flex-col gap-1.5",children:[s.jsx("div",{className:"caption text-soft uppercase tracking-wide",children:"gainers"}),o.map(e=>s.jsx(i,{symbol:e.symbol,label:l(e.symbol),price:e.markPx,changePct:e.changePct},e.symbol))]}),s.jsxs("div",{className:"flex flex-col gap-1.5",children:[s.jsx("div",{className:"caption text-soft uppercase tracking-wide",children:"losers"}),x.map(e=>s.jsx(i,{symbol:e.symbol,label:l(e.symbol),price:e.markPx,changePct:e.changePct},e.symbol))]})]})}const M=f({...m,component:u});export{M as topMoversFrame};
@@ -0,0 +1 @@
1
+ import{j as s}from"./react-qoZPGuNy.js";import{b as c}from"./format-CfAcS4D8.js";import{M as m}from"./metric-row-BVVhjsjK.js";import{f as u,P as a,Q as d}from"./index-C_O7gp2F.js";import{F as i,s as x}from"./ui-Bq3RQsdJ.js";a.schema;function f({auction:e}){const t=[e.securityTerm,e.securityType].filter(Boolean).join(" ");return s.jsx(m,{label:t||e.securityType,meta:e.auctionDate+(e.bidToCover!==null?` · ${e.bidToCover.toFixed(2)}× bid-to-cover`:""),value:e.rate!==null?c(e.rate):"—"})}function p({config:e}){const{auctions:t,isLoading:o}=d(e.count);if(o)return s.jsx(i,{loading:!0,children:"loading auctions…"});if(!t.length)return s.jsx(i,{children:"no auction data yet"});const n=t.slice(0,e.count);return s.jsxs("div",{className:"flex h-full min-h-0 flex-col gap-3",children:[s.jsxs("div",{className:"flex items-baseline justify-between gap-3",children:[s.jsxs("div",{children:[s.jsx("div",{className:"caption text-soft uppercase",children:"treasury auctions"}),s.jsx("div",{className:"body-sm text-normal",children:"high yield · bid-to-cover"})]}),s.jsx("div",{className:"caption text-soft text-right",children:"results"})]}),s.jsx("div",{className:x,children:n.map((r,l)=>s.jsx(f,{auction:r},`${r.auctionDate}-${r.securityType}-${r.securityTerm}-${l}`))})]})}const T=u({...a,component:p});export{T as treasuryAuctionsFrame};
@@ -0,0 +1 @@
1
+ import{r as d,j as T}from"./react-qoZPGuNy.js";import{c as P}from"./utils-DaT-yT0k.js";import{w as $,x as z,y as H}from"./d3-xK4fOkBU.js";const E="4px",S="4px",k=2.5,U=(b,v,y,g,B)=>{const R=b.children;if(!R||R.length===0)return;const I=(s,i,n,e,l)=>{if(e===0)return 1/0;const c=i/e*l;if(c===0)return 1/0;let r=0;for(const u of s){const o=(u.value||0)/i*n,x=c/o,h=Math.abs(x-k);r=Math.max(r,h)}return r},L=(s,i,n,e,l,c,r)=>{const u=i/n*l;let a=r;for(const o of s){const h=(o.value||0)/i*e;o.x0=c,o.y0=a,o.x1=c+u,o.y1=a+h,a+=h}return u},_=g-v,p=B-y,C=R.reduce((s,i)=>s+(i.value||0),0);if(C===0)return;let w=[...R],m=v,j=_,M=C;for(;w.length>0;){let s=[],i=0;for(let e=0;e<w.length;e++){const l=w[e],c=l.value||0,r=[...s,l],u=i+c;if(s.length===0)s=r,i=u;else{const a=I(s,i,p,M,j);if(I(r,u,p,M,j)<=a)s=r,i=u;else break}}const n=L(s,i,M,p,j,m,y);w=w.slice(s.length),m+=n,j-=n,M-=i}};function F({data:b,className:v,LeafComponent:y,getColorValue:g,tileMode:B="squarify"}){const R=d.useRef(null),I=d.useRef(null),L=d.useRef(null),_=d.useRef(null),p=d.useRef(null),C=d.useRef(null),[,w]=d.useTransition(),[m,j]=d.useState({width:0,height:0});d.useEffect(()=>{const n=R.current;if(n){const e=new ResizeObserver(()=>{w(()=>{j({width:n.offsetWidth,height:n.offsetHeight})})});return e.observe(n),()=>{e.disconnect()}}},[]),d.useEffect(()=>{const n=I.current;if(n){const e=n.children;let l=e[0],c=e[0],r=e[0],u=e[0];for(let a=0;a<e.length;a++){const o=e[a],{x,y:h}=o.getBoundingClientRect(),N=l.getBoundingClientRect(),W=c.getBoundingClientRect(),t=r.getBoundingClientRect(),f=u.getBoundingClientRect();x<=N.x&&h<=N.y&&(l=o),x<=W.x&&h>=W.y&&(c=o),x>=t.x&&h<=t.y&&(r=o),x>=f.x&&h>=f.y&&(u=o)}L.current&&(L.current.style.borderTopLeftRadius=E),L.current=l,L.current.style.borderTopLeftRadius=S,_.current&&(_.current.style.borderBottomLeftRadius=E),_.current=c,_.current.style.borderBottomLeftRadius=S,p.current&&(p.current.style.borderTopRightRadius=E),p.current=r,p.current.style.borderTopRightRadius=S,C.current&&(C.current.style.borderBottomRightRadius=E),C.current=u,C.current.style.borderBottomRightRadius=S}},[m]);const M=d.useMemo(()=>{switch(B){case"vertical-rectangle":return U;case"squarify":default:return $}},[B]),s=d.useMemo(()=>z().size([m.width,m.height]).tile(M).paddingInner(4)(H({id:"root",value:0,children:b}).sum(n=>n.value).sort((n,e)=>e.data.value-n.data.value)),[b,m.width,m.height,M]),i=d.useMemo(()=>{const n=s.leaves(),e=n.map(t=>g?g(t.data):t.data.value),l=e.filter(t=>t>=0),c=e.filter(t=>t<0),r=l.length>0?Math.min(...l):0,u=l.length>0?Math.max(...l):0,a=c.length>0?Math.min(...c):0,o=c.length>0?Math.max(...c):0,x=t=>t<0?o===a?1:(t-o)/(a-o):u===r?1:(t-r)/(u-r),h=(t,f)=>{if(f>=0){const q=Math.round(34+t*16);return`hsl(152 ${Math.round(42+t*20)}% ${q}%)`}const D=Math.round(36+t*15);return`hsl(350 ${Math.round(48+t*22)}% ${D}%)`},N=[...new Set(n.map(t=>t.x0))].sort((t,f)=>t-f),W=new Map(N.map((t,f)=>[t,f]));return n.map(t=>{const f=t.x1-t.x0,D=t.y1-t.y0,V=g?g(t.data):t.data.value,q=x(V),A=W.get(t.x0)??0,O=h(q,V);return T.jsx("div",{className:"group absolute cursor-pointer rounded-sm border border-transparent hover:bg-[radial-gradient(146.13%_118.42%_at_50%_-15.5%,rgba(255,255,255,0.1)_0%,rgba(255,255,255,0)_99.59%)] hover:bg-gradient-to-t",style:{left:t.x0,top:t.y0,width:f,height:D,borderRadius:E,backgroundColor:O},children:T.jsx(y,{width:f,height:D,data:t.data,columnIndex:A})},`${t.data.id}-box`)})},[s,y,g]);return T.jsx("div",{className:P("h-full w-full",v),ref:R,children:T.jsx("div",{className:"relative overflow-hidden rounded-lg",style:{height:m.height,width:m.width},ref:I,children:i})})}const J=F;function K({width:b,height:v,label:y,secondary:g,title:B}){if(b<48||v<30)return null;const R=b<70||v<44;return T.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center overflow-hidden p-1 text-center",title:B,children:[T.jsx("span",{className:"body-sm truncate font-bold text-strong",children:y}),!R&&g&&T.jsx("span",{className:"caption text-soft",children:g})]})}export{J as T,K as a};
@@ -0,0 +1 @@
1
+ import{r as i,j as s}from"./react-qoZPGuNy.js";import{f as l}from"./format-CfAcS4D8.js";import{f as p,ag as n,ah as f}from"./index-C_O7gp2F.js";import{T as u,a as c}from"./treemap-leaf-DLQawrx4.js";import{F as m}from"./ui-Bq3RQsdJ.js";import"./utils-DaT-yT0k.js";import"./d3-xK4fOkBU.js";n.schema;function d({width:r,height:o,data:e}){const t=l(e.tvl);return s.jsx(c,{width:r,height:o,label:e.id,secondary:t,title:`${e.id} · ${t}`})}function v({config:r}){const{entries:o,isLoading:e}=f(),t=i.useMemo(()=>o.slice(0,r.topN).map(a=>({id:a.name,value:a.tvl,tvl:a.tvl})),[o,r.topN]);return e?s.jsx(m,{loading:!0,children:"loading TVL…"}):t.length===0?s.jsx(m,{children:"no TVL data"}):s.jsx(u,{data:t,LeafComponent:d,getColorValue:a=>a.tvl})}const F=p({...n,component:v});export{F as tvlTreemapFrame};
@@ -0,0 +1 @@
1
+ import{j as e}from"./react-qoZPGuNy.js";const t="min-h-0 flex-1 overflow-y-auto pr-1 [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-white/[0.08] hover:[&::-webkit-scrollbar-thumb]:bg-white/15",r="min-w-0 overflow-x-auto pb-1 [&::-webkit-scrollbar]:h-1.5 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-white/[0.08] hover:[&::-webkit-scrollbar-thumb]:bg-white/15";function i({loading:a=!1,children:s}){return a?e.jsx("div",{className:"flex h-full min-h-[72px] w-full items-center justify-center overflow-hidden rounded-md",role:"status","aria-live":"polite","aria-busy":"true",children:e.jsxs("div",{className:"flex w-full max-w-sm flex-col gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"relative h-2.5 w-2.5 shrink-0 rounded-full",style:{background:"hsl(var(--zf-accent-hue, 242) 90% 76%)",boxShadow:"0 0 12px hsl(var(--zf-accent-hue, 242) 90% 76% / 0.72)"},children:e.jsx("span",{className:"absolute inset-0 animate-ping rounded-full opacity-60",style:{background:"hsl(var(--zf-accent-hue, 242) 90% 76%)"}})}),e.jsx("span",{className:"body-sm text-soft truncate",children:s})]}),e.jsxs("div",{className:"grid min-h-0 grid-cols-4 gap-2",children:[e.jsx("span",{className:"h-11 animate-pulse rounded bg-white/[0.07]"}),e.jsx("span",{className:"h-11 animate-pulse rounded bg-white/[0.05]"}),e.jsx("span",{className:"h-11 animate-pulse rounded bg-white/[0.08]"}),e.jsx("span",{className:"h-11 animate-pulse rounded bg-white/[0.04]"})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"h-2.5 w-11/12 animate-pulse rounded-full bg-white/[0.07]"}),e.jsx("span",{className:"h-2.5 w-7/12 animate-pulse rounded-full bg-white/[0.05]"})]})]})}):e.jsx("div",{className:"body-sm text-soft flex h-full min-h-0 items-center justify-center text-center",children:s})}export{i as F,r as a,t as s};
@@ -0,0 +1 @@
1
+ import{r as p,j as E}from"./react-qoZPGuNy.js";const w=new Map;function x(n){var i;if(typeof window>"u"||(i=window.UnicornStudio)!=null&&i.addScene)return Promise.resolve();const a=w.get(n);if(a)return a;const r=new Promise((d,s)=>{const u=document.querySelector(`script[src="${n}"]`),t=u??document.createElement("script"),l=()=>{var f;(f=window.UnicornStudio)!=null&&f.addScene?d():s(new Error("UnicornStudio global missing after script load"))};t.addEventListener("load",l),t.addEventListener("error",()=>s(new Error("UnicornStudio SDK failed to load"))),u||(t.src=n,t.async=!0,document.head.appendChild(t))}).catch(d=>{throw w.delete(n),d});return w.set(n,r),r}let U=0;function v({projectId:n,sdkUrl:a,width:r="100%",height:i="100%",scale:d,dpi:s}){var f;const u=p.useRef(null),[t,l]=p.useState(typeof window<"u"&&!!((f=window.UnicornStudio)!=null&&f.addScene));return p.useEffect(()=>{let o=!1;return x(a).then(()=>{o||l(!0)}).catch(()=>{o||l(!1)}),()=>{o=!0}},[a]),p.useEffect(()=>{var m;const o=u.current;if(!t||!o||!((m=window.UnicornStudio)!=null&&m.addScene))return;o.id||(o.id=`zf-unicorn-${U+=1}`);let c=null,S=!1;return window.UnicornStudio.addScene({elementId:o.id,projectId:n,scale:d??1,dpi:s??1.5,fps:60,lazyLoad:!0,production:!0}).then(e=>{var y;if(S){(y=e==null?void 0:e.destroy)==null||y.call(e);return}c=e}).catch(()=>{}),()=>{var e;S=!0,(e=c==null?void 0:c.destroy)==null||e.call(c)}},[t,n,d,s]),E.jsx("div",{ref:u,"aria-hidden":!0,style:{position:"relative",width:typeof r=="number"?`${r}px`:r,height:typeof i=="number"?`${i}px`:i}})}export{v as default};
@@ -0,0 +1 @@
1
+ import{r as i}from"./react-qoZPGuNy.js";let l=typeof window<"u"?window.scrollY:0,w=typeof window<"u"?window.innerHeight:0,r;typeof window<"u"&&(window.addEventListener("scroll",()=>{r!=null&&(window.clearTimeout(r),r=void 0),r=window.setTimeout(()=>{l=window.scrollY},200)},{passive:!0}),window.addEventListener("resize",()=>{w=window.innerHeight},{passive:!0}));const s={_callbacks:[],register(e){this._callbacks.push(e)},unregister(e){this._callbacks=this._callbacks.filter(t=>t!==e)},tick(){setInterval(()=>{this._callbacks.forEach(t=>t())},1e3/24)}};typeof window<"u"&&s.tick();function p({ref:e,getRemainingMs:t,format:c}){const o=i.useRef({getRemainingMs:t,format:c});o.current={getRemainingMs:t,format:c};const u=i.useRef(0);i.useLayoutEffect(()=>{const n=()=>{e.current&&(u.current=e.current.getBoundingClientRect().top+window.scrollY)};return n(),window.addEventListener("resize",n),()=>{window.removeEventListener("resize",n)}},[e]),i.useEffect(()=>{const n=()=>{if(!e.current)return;const d=u.current-l;if(d>w||d<0)return;const a=o.current.getRemainingMs();e.current&&(e.current.textContent=o.current.format(a))};return s.register(n),()=>{s.unregister(n)}},[e])}export{p as u};
@@ -0,0 +1 @@
1
+ function ye(e){var t,r,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(r=ye(e[t]))&&(o&&(o+=" "),o+=r)}else for(r in e)e[r]&&(o&&(o+=" "),o+=r);return o}function Ne(){for(var e,t,r=0,o="",i=arguments.length;r<i;r++)(e=arguments[r])&&(t=ye(e))&&(o&&(o+=" "),o+=t);return o}const We=(e,t)=>{const r=new Array(e.length+t.length);for(let o=0;o<e.length;o++)r[o]=e[o];for(let o=0;o<t.length;o++)r[e.length+o]=t[o];return r},Ee=(e,t)=>({classGroupId:e,validator:t}),ve=(e=new Map,t=null,r)=>({nextPart:e,validators:t,classGroupId:r}),H="-",fe=[],Ve="arbitrary..",Fe=e=>{const t=Be(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:l=>{if(l.startsWith("[")&&l.endsWith("]"))return _e(l);const b=l.split(H),u=b[0]===""&&b.length>1?1:0;return ze(b,u,t)},getConflictingClassGroupIds:(l,b)=>{if(b){const u=o[l],m=r[l];return u?m?We(m,u):u:m||fe}return r[l]||fe}}},ze=(e,t,r)=>{if(e.length-t===0)return r.classGroupId;const i=e[t],d=r.nextPart.get(i);if(d){const m=ze(e,t+1,d);if(m)return m}const l=r.validators;if(l===null)return;const b=t===0?e.join(H):e.slice(t).join(H),u=l.length;for(let m=0;m<u;m++){const h=l[m];if(h.validator(b))return h.classGroupId}},_e=e=>e.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),r=t.indexOf(":"),o=t.slice(0,r);return o?Ve+o:void 0})(),Be=e=>{const{theme:t,classGroups:r}=e;return $e(r,t)},$e=(e,t)=>{const r=ve();for(const o in e){const i=e[o];ne(i,r,o,t)}return r},ne=(e,t,r,o)=>{const i=e.length;for(let d=0;d<i;d++){const l=e[d];Ue(l,t,r,o)}},Ue=(e,t,r,o)=>{if(typeof e=="string"){De(e,t,r);return}if(typeof e=="function"){Ye(e,t,r,o);return}qe(e,t,r,o)},De=(e,t,r)=>{const o=e===""?t:Ce(t,e);o.classGroupId=r},Ye=(e,t,r,o)=>{if(Xe(e)){ne(e(o),t,r,o);return}t.validators===null&&(t.validators=[]),t.validators.push(Ee(r,e))},qe=(e,t,r,o)=>{const i=Object.entries(e),d=i.length;for(let l=0;l<d;l++){const[b,u]=i[l];ne(u,Ce(t,b),r,o)}},Ce=(e,t)=>{let r=e;const o=t.split(H),i=o.length;for(let d=0;d<i;d++){const l=o[d];let b=r.nextPart.get(l);b||(b=ve(),r.nextPart.set(l,b)),r=b}return r},Xe=e=>"isThemeGetter"in e&&e.isThemeGetter===!0,Je=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=Object.create(null),o=Object.create(null);const i=(d,l)=>{r[d]=l,t++,t>e&&(t=0,o=r,r=Object.create(null))};return{get(d){let l=r[d];if(l!==void 0)return l;if((l=o[d])!==void 0)return i(d,l),l},set(d,l){d in r?r[d]=l:i(d,l)}}},se="!",ge=":",Qe=[],he=(e,t,r,o,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:r,maybePostfixModifierPosition:o,isExternal:i}),He=e=>{const{prefix:t,experimentalParseClassName:r}=e;let o=i=>{const d=[];let l=0,b=0,u=0,m;const h=i.length;for(let y=0;y<h;y++){const C=i[y];if(l===0&&b===0){if(C===ge){d.push(i.slice(u,y)),u=y+1;continue}if(C==="/"){m=y;continue}}C==="["?l++:C==="]"?l--:C==="("?b++:C===")"&&b--}const k=d.length===0?i:i.slice(u);let T=k,S=!1;k.endsWith(se)?(T=k.slice(0,-1),S=!0):k.startsWith(se)&&(T=k.slice(1),S=!0);const _=m&&m>u?m-u:void 0;return he(d,S,T,_)};if(t){const i=t+ge,d=o;o=l=>l.startsWith(i)?d(l.slice(i.length)):he(Qe,!1,l,void 0,!0)}if(r){const i=o;o=d=>r({className:d,parseClassName:i})}return o},Ke=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((r,o)=>{t.set(r,1e6+o)}),r=>{const o=[];let i=[];for(let d=0;d<r.length;d++){const l=r[d],b=l[0]==="[",u=t.has(l);b||u?(i.length>0&&(i.sort(),o.push(...i),i=[]),o.push(l)):i.push(l)}return i.length>0&&(i.sort(),o.push(...i)),o}},Ze=e=>({cache:Je(e.cacheSize),parseClassName:He(e),sortModifiers:Ke(e),postfixLookupClassGroupIds:eo(e),...Fe(e)}),eo=e=>{const t=Object.create(null),r=e.postfixLookupClassGroups;if(r)for(let o=0;o<r.length;o++)t[r[o]]=!0;return t},oo=/\s+/,ro=(e,t)=>{const{parseClassName:r,getClassGroupId:o,getConflictingClassGroupIds:i,sortModifiers:d,postfixLookupClassGroupIds:l}=t,b=[],u=e.trim().split(oo);let m="";for(let h=u.length-1;h>=0;h-=1){const k=u[h],{isExternal:T,modifiers:S,hasImportantModifier:_,baseClassName:y,maybePostfixModifierPosition:C}=r(k);if(T){m=k+(m.length>0?" "+m:m);continue}let L=!!C,v;if(L){const R=y.substring(0,C);v=o(R);const a=v&&l[v]?o(y):void 0;a&&a!==v&&(v=a,L=!1)}else v=o(y);if(!v){if(!L){m=k+(m.length>0?" "+m:m);continue}if(v=o(y),!v){m=k+(m.length>0?" "+m:m);continue}L=!1}const B=S.length===0?"":S.length===1?S[0]:d(S).join(":"),W=_?B+se:B,E=W+v;if(b.indexOf(E)>-1)continue;b.push(E);const V=i(v,L);for(let R=0;R<V.length;++R){const a=V[R];b.push(W+a)}m=k+(m.length>0?" "+m:m)}return m},to=(...e)=>{let t=0,r,o,i="";for(;t<e.length;)(r=e[t++])&&(o=Ae(r))&&(i&&(i+=" "),i+=o);return i},Ae=e=>{if(typeof e=="string")return e;let t,r="";for(let o=0;o<e.length;o++)e[o]&&(t=Ae(e[o]))&&(r&&(r+=" "),r+=t);return r},so=(e,...t)=>{let r,o,i,d;const l=u=>{const m=t.reduce((h,k)=>k(h),e());return r=Ze(m),o=r.cache.get,i=r.cache.set,d=b,b(u)},b=u=>{const m=o(u);if(m)return m;const h=ro(u,r);return i(u,h),h};return d=l,(...u)=>d(to(...u))},no=[],f=e=>{const t=r=>r[e]||no;return t.isThemeGetter=!0,t},Se=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Ie=/^\((?:(\w[\w-]*):)?(.+)\)$/i,ao=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,io=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,lo=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,co=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,mo=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,po=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,M=e=>ao.test(e),p=e=>!!e&&!Number.isNaN(Number(e)),I=e=>!!e&&Number.isInteger(Number(e)),te=e=>e.endsWith("%")&&p(e.slice(0,-1)),G=e=>io.test(e),Re=()=>!0,bo=e=>lo.test(e)&&!co.test(e),ae=()=>!1,uo=e=>mo.test(e),fo=e=>po.test(e),go=e=>!s(e)&&!n(e),ho=e=>e.startsWith("@container")&&(e[10]==="/"&&e[11]!==void 0||e[11]==="s"&&e[16]!==void 0&&e.startsWith("-size/",10)||e[11]==="n"&&e[18]!==void 0&&e.startsWith("-normal/",10)),ko=e=>P(e,Pe,ae),s=e=>Se.test(e),j=e=>P(e,Te,bo),ke=e=>P(e,So,p),xo=e=>P(e,Oe,Re),wo=e=>P(e,Le,ae),xe=e=>P(e,Ge,ae),yo=e=>P(e,Me,fo),J=e=>P(e,je,uo),n=e=>Ie.test(e),$=e=>N(e,Te),vo=e=>N(e,Le),we=e=>N(e,Ge),zo=e=>N(e,Pe),Co=e=>N(e,Me),Q=e=>N(e,je,!0),Ao=e=>N(e,Oe,!0),P=(e,t,r)=>{const o=Se.exec(e);return o?o[1]?t(o[1]):r(o[2]):!1},N=(e,t,r=!1)=>{const o=Ie.exec(e);return o?o[1]?t(o[1]):r:!1},Ge=e=>e==="position"||e==="percentage",Me=e=>e==="image"||e==="url",Pe=e=>e==="length"||e==="size"||e==="bg-size",Te=e=>e==="length",So=e=>e==="number",Le=e=>e==="family-name",Oe=e=>e==="number"||e==="weight",je=e=>e==="shadow",Io=()=>{const e=f("color"),t=f("font"),r=f("text"),o=f("font-weight"),i=f("tracking"),d=f("leading"),l=f("breakpoint"),b=f("container"),u=f("spacing"),m=f("radius"),h=f("shadow"),k=f("inset-shadow"),T=f("text-shadow"),S=f("drop-shadow"),_=f("blur"),y=f("perspective"),C=f("aspect"),L=f("ease"),v=f("animate"),B=()=>["auto","avoid","all","avoid-page","page","left","right","column"],W=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],E=()=>[...W(),n,s],V=()=>["auto","hidden","clip","visible","scroll"],R=()=>["auto","contain","none"],a=()=>[n,s,u],z=()=>[M,"full","auto",...a()],ie=()=>[I,"none","subgrid",n,s],le=()=>["auto",{span:["full",I,n,s]},I,n,s],U=()=>[I,"auto",n,s],ce=()=>["auto","min","max","fr",n,s],K=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],F=()=>["start","end","center","stretch","center-safe","end-safe"],A=()=>["auto",...a()],O=()=>[M,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...a()],Z=()=>[M,"screen","full","dvw","lvw","svw","min","max","fit",...a()],ee=()=>[M,"screen","full","lh","dvh","lvh","svh","min","max","fit",...a()],c=()=>[e,n,s],de=()=>[...W(),we,xe,{position:[n,s]}],me=()=>["no-repeat",{repeat:["","x","y","space","round"]}],pe=()=>["auto","cover","contain",zo,ko,{size:[n,s]}],oe=()=>[te,$,j],x=()=>["","none","full",m,n,s],w=()=>["",p,$,j],D=()=>["solid","dashed","dotted","double"],be=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],g=()=>[p,te,we,xe],ue=()=>["","none",_,n,s],Y=()=>["none",p,n,s],q=()=>["none",p,n,s],re=()=>[p,n,s],X=()=>[M,"full",...a()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[G],breakpoint:[G],color:[Re],container:[G],"drop-shadow":[G],ease:["in","out","in-out"],font:[go],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[G],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[G],shadow:[G],spacing:["px",p],text:[G],"text-shadow":[G],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",M,s,n,C]}],container:["container"],"container-type":[{"@container":["","normal","size",n,s]}],"container-named":[ho],columns:[{columns:[p,s,n,b]}],"break-after":[{"break-after":B()}],"break-before":[{"break-before":B()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:E()}],overflow:[{overflow:V()}],"overflow-x":[{"overflow-x":V()}],"overflow-y":[{"overflow-y":V()}],overscroll:[{overscroll:R()}],"overscroll-x":[{"overscroll-x":R()}],"overscroll-y":[{"overscroll-y":R()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:z()}],"inset-x":[{"inset-x":z()}],"inset-y":[{"inset-y":z()}],start:[{"inset-s":z(),start:z()}],end:[{"inset-e":z(),end:z()}],"inset-bs":[{"inset-bs":z()}],"inset-be":[{"inset-be":z()}],top:[{top:z()}],right:[{right:z()}],bottom:[{bottom:z()}],left:[{left:z()}],visibility:["visible","invisible","collapse"],z:[{z:[I,"auto",n,s]}],basis:[{basis:[M,"full","auto",b,...a()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[p,M,"auto","initial","none",s]}],grow:[{grow:["",p,n,s]}],shrink:[{shrink:["",p,n,s]}],order:[{order:[I,"first","last","none",n,s]}],"grid-cols":[{"grid-cols":ie()}],"col-start-end":[{col:le()}],"col-start":[{"col-start":U()}],"col-end":[{"col-end":U()}],"grid-rows":[{"grid-rows":ie()}],"row-start-end":[{row:le()}],"row-start":[{"row-start":U()}],"row-end":[{"row-end":U()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":ce()}],"auto-rows":[{"auto-rows":ce()}],gap:[{gap:a()}],"gap-x":[{"gap-x":a()}],"gap-y":[{"gap-y":a()}],"justify-content":[{justify:[...K(),"normal"]}],"justify-items":[{"justify-items":[...F(),"normal"]}],"justify-self":[{"justify-self":["auto",...F()]}],"align-content":[{content:["normal",...K()]}],"align-items":[{items:[...F(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...F(),{baseline:["","last"]}]}],"place-content":[{"place-content":K()}],"place-items":[{"place-items":[...F(),"baseline"]}],"place-self":[{"place-self":["auto",...F()]}],p:[{p:a()}],px:[{px:a()}],py:[{py:a()}],ps:[{ps:a()}],pe:[{pe:a()}],pbs:[{pbs:a()}],pbe:[{pbe:a()}],pt:[{pt:a()}],pr:[{pr:a()}],pb:[{pb:a()}],pl:[{pl:a()}],m:[{m:A()}],mx:[{mx:A()}],my:[{my:A()}],ms:[{ms:A()}],me:[{me:A()}],mbs:[{mbs:A()}],mbe:[{mbe:A()}],mt:[{mt:A()}],mr:[{mr:A()}],mb:[{mb:A()}],ml:[{ml:A()}],"space-x":[{"space-x":a()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":a()}],"space-y-reverse":["space-y-reverse"],size:[{size:O()}],"inline-size":[{inline:["auto",...Z()]}],"min-inline-size":[{"min-inline":["auto",...Z()]}],"max-inline-size":[{"max-inline":["none",...Z()]}],"block-size":[{block:["auto",...ee()]}],"min-block-size":[{"min-block":["auto",...ee()]}],"max-block-size":[{"max-block":["none",...ee()]}],w:[{w:[b,"screen",...O()]}],"min-w":[{"min-w":[b,"screen","none",...O()]}],"max-w":[{"max-w":[b,"screen","none","prose",{screen:[l]},...O()]}],h:[{h:["screen","lh",...O()]}],"min-h":[{"min-h":["screen","lh","none",...O()]}],"max-h":[{"max-h":["screen","lh",...O()]}],"font-size":[{text:["base",r,$,j]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[o,Ao,xo]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",te,s]}],"font-family":[{font:[vo,wo,t]}],"font-features":[{"font-features":[s]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[i,n,s]}],"line-clamp":[{"line-clamp":[p,"none",n,ke]}],leading:[{leading:[d,...a()]}],"list-image":[{"list-image":["none",n,s]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",n,s]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:c()}],"text-color":[{text:c()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...D(),"wavy"]}],"text-decoration-thickness":[{decoration:[p,"from-font","auto",n,j]}],"text-decoration-color":[{decoration:c()}],"underline-offset":[{"underline-offset":[p,"auto",n,s]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:a()}],"tab-size":[{tab:[I,n,s]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",n,s]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",n,s]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:de()}],"bg-repeat":[{bg:me()}],"bg-size":[{bg:pe()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},I,n,s],radial:["",n,s],conic:[I,n,s]},Co,yo]}],"bg-color":[{bg:c()}],"gradient-from-pos":[{from:oe()}],"gradient-via-pos":[{via:oe()}],"gradient-to-pos":[{to:oe()}],"gradient-from":[{from:c()}],"gradient-via":[{via:c()}],"gradient-to":[{to:c()}],rounded:[{rounded:x()}],"rounded-s":[{"rounded-s":x()}],"rounded-e":[{"rounded-e":x()}],"rounded-t":[{"rounded-t":x()}],"rounded-r":[{"rounded-r":x()}],"rounded-b":[{"rounded-b":x()}],"rounded-l":[{"rounded-l":x()}],"rounded-ss":[{"rounded-ss":x()}],"rounded-se":[{"rounded-se":x()}],"rounded-ee":[{"rounded-ee":x()}],"rounded-es":[{"rounded-es":x()}],"rounded-tl":[{"rounded-tl":x()}],"rounded-tr":[{"rounded-tr":x()}],"rounded-br":[{"rounded-br":x()}],"rounded-bl":[{"rounded-bl":x()}],"border-w":[{border:w()}],"border-w-x":[{"border-x":w()}],"border-w-y":[{"border-y":w()}],"border-w-s":[{"border-s":w()}],"border-w-e":[{"border-e":w()}],"border-w-bs":[{"border-bs":w()}],"border-w-be":[{"border-be":w()}],"border-w-t":[{"border-t":w()}],"border-w-r":[{"border-r":w()}],"border-w-b":[{"border-b":w()}],"border-w-l":[{"border-l":w()}],"divide-x":[{"divide-x":w()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":w()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...D(),"hidden","none"]}],"divide-style":[{divide:[...D(),"hidden","none"]}],"border-color":[{border:c()}],"border-color-x":[{"border-x":c()}],"border-color-y":[{"border-y":c()}],"border-color-s":[{"border-s":c()}],"border-color-e":[{"border-e":c()}],"border-color-bs":[{"border-bs":c()}],"border-color-be":[{"border-be":c()}],"border-color-t":[{"border-t":c()}],"border-color-r":[{"border-r":c()}],"border-color-b":[{"border-b":c()}],"border-color-l":[{"border-l":c()}],"divide-color":[{divide:c()}],"outline-style":[{outline:[...D(),"none","hidden"]}],"outline-offset":[{"outline-offset":[p,n,s]}],"outline-w":[{outline:["",p,$,j]}],"outline-color":[{outline:c()}],shadow:[{shadow:["","none",h,Q,J]}],"shadow-color":[{shadow:c()}],"inset-shadow":[{"inset-shadow":["none",k,Q,J]}],"inset-shadow-color":[{"inset-shadow":c()}],"ring-w":[{ring:w()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:c()}],"ring-offset-w":[{"ring-offset":[p,j]}],"ring-offset-color":[{"ring-offset":c()}],"inset-ring-w":[{"inset-ring":w()}],"inset-ring-color":[{"inset-ring":c()}],"text-shadow":[{"text-shadow":["none",T,Q,J]}],"text-shadow-color":[{"text-shadow":c()}],opacity:[{opacity:[p,n,s]}],"mix-blend":[{"mix-blend":[...be(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":be()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[p]}],"mask-image-linear-from-pos":[{"mask-linear-from":g()}],"mask-image-linear-to-pos":[{"mask-linear-to":g()}],"mask-image-linear-from-color":[{"mask-linear-from":c()}],"mask-image-linear-to-color":[{"mask-linear-to":c()}],"mask-image-t-from-pos":[{"mask-t-from":g()}],"mask-image-t-to-pos":[{"mask-t-to":g()}],"mask-image-t-from-color":[{"mask-t-from":c()}],"mask-image-t-to-color":[{"mask-t-to":c()}],"mask-image-r-from-pos":[{"mask-r-from":g()}],"mask-image-r-to-pos":[{"mask-r-to":g()}],"mask-image-r-from-color":[{"mask-r-from":c()}],"mask-image-r-to-color":[{"mask-r-to":c()}],"mask-image-b-from-pos":[{"mask-b-from":g()}],"mask-image-b-to-pos":[{"mask-b-to":g()}],"mask-image-b-from-color":[{"mask-b-from":c()}],"mask-image-b-to-color":[{"mask-b-to":c()}],"mask-image-l-from-pos":[{"mask-l-from":g()}],"mask-image-l-to-pos":[{"mask-l-to":g()}],"mask-image-l-from-color":[{"mask-l-from":c()}],"mask-image-l-to-color":[{"mask-l-to":c()}],"mask-image-x-from-pos":[{"mask-x-from":g()}],"mask-image-x-to-pos":[{"mask-x-to":g()}],"mask-image-x-from-color":[{"mask-x-from":c()}],"mask-image-x-to-color":[{"mask-x-to":c()}],"mask-image-y-from-pos":[{"mask-y-from":g()}],"mask-image-y-to-pos":[{"mask-y-to":g()}],"mask-image-y-from-color":[{"mask-y-from":c()}],"mask-image-y-to-color":[{"mask-y-to":c()}],"mask-image-radial":[{"mask-radial":[n,s]}],"mask-image-radial-from-pos":[{"mask-radial-from":g()}],"mask-image-radial-to-pos":[{"mask-radial-to":g()}],"mask-image-radial-from-color":[{"mask-radial-from":c()}],"mask-image-radial-to-color":[{"mask-radial-to":c()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":W()}],"mask-image-conic-pos":[{"mask-conic":[p]}],"mask-image-conic-from-pos":[{"mask-conic-from":g()}],"mask-image-conic-to-pos":[{"mask-conic-to":g()}],"mask-image-conic-from-color":[{"mask-conic-from":c()}],"mask-image-conic-to-color":[{"mask-conic-to":c()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:de()}],"mask-repeat":[{mask:me()}],"mask-size":[{mask:pe()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",n,s]}],filter:[{filter:["","none",n,s]}],blur:[{blur:ue()}],brightness:[{brightness:[p,n,s]}],contrast:[{contrast:[p,n,s]}],"drop-shadow":[{"drop-shadow":["","none",S,Q,J]}],"drop-shadow-color":[{"drop-shadow":c()}],grayscale:[{grayscale:["",p,n,s]}],"hue-rotate":[{"hue-rotate":[p,n,s]}],invert:[{invert:["",p,n,s]}],saturate:[{saturate:[p,n,s]}],sepia:[{sepia:["",p,n,s]}],"backdrop-filter":[{"backdrop-filter":["","none",n,s]}],"backdrop-blur":[{"backdrop-blur":ue()}],"backdrop-brightness":[{"backdrop-brightness":[p,n,s]}],"backdrop-contrast":[{"backdrop-contrast":[p,n,s]}],"backdrop-grayscale":[{"backdrop-grayscale":["",p,n,s]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[p,n,s]}],"backdrop-invert":[{"backdrop-invert":["",p,n,s]}],"backdrop-opacity":[{"backdrop-opacity":[p,n,s]}],"backdrop-saturate":[{"backdrop-saturate":[p,n,s]}],"backdrop-sepia":[{"backdrop-sepia":["",p,n,s]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":a()}],"border-spacing-x":[{"border-spacing-x":a()}],"border-spacing-y":[{"border-spacing-y":a()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",n,s]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[p,"initial",n,s]}],ease:[{ease:["linear","initial",L,n,s]}],delay:[{delay:[p,n,s]}],animate:[{animate:["none",v,n,s]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[y,n,s]}],"perspective-origin":[{"perspective-origin":E()}],rotate:[{rotate:Y()}],"rotate-x":[{"rotate-x":Y()}],"rotate-y":[{"rotate-y":Y()}],"rotate-z":[{"rotate-z":Y()}],scale:[{scale:q()}],"scale-x":[{"scale-x":q()}],"scale-y":[{"scale-y":q()}],"scale-z":[{"scale-z":q()}],"scale-3d":["scale-3d"],skew:[{skew:re()}],"skew-x":[{"skew-x":re()}],"skew-y":[{"skew-y":re()}],transform:[{transform:[n,s,"","none","gpu","cpu"]}],"transform-origin":[{origin:E()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:X()}],"translate-x":[{"translate-x":X()}],"translate-y":[{"translate-y":X()}],"translate-z":[{"translate-z":X()}],"translate-none":["translate-none"],zoom:[{zoom:[I,n,s]}],accent:[{accent:c()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:c()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",n,s]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":c()}],"scrollbar-track-color":[{"scrollbar-track":c()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":a()}],"scroll-mx":[{"scroll-mx":a()}],"scroll-my":[{"scroll-my":a()}],"scroll-ms":[{"scroll-ms":a()}],"scroll-me":[{"scroll-me":a()}],"scroll-mbs":[{"scroll-mbs":a()}],"scroll-mbe":[{"scroll-mbe":a()}],"scroll-mt":[{"scroll-mt":a()}],"scroll-mr":[{"scroll-mr":a()}],"scroll-mb":[{"scroll-mb":a()}],"scroll-ml":[{"scroll-ml":a()}],"scroll-p":[{"scroll-p":a()}],"scroll-px":[{"scroll-px":a()}],"scroll-py":[{"scroll-py":a()}],"scroll-ps":[{"scroll-ps":a()}],"scroll-pe":[{"scroll-pe":a()}],"scroll-pbs":[{"scroll-pbs":a()}],"scroll-pbe":[{"scroll-pbe":a()}],"scroll-pt":[{"scroll-pt":a()}],"scroll-pr":[{"scroll-pr":a()}],"scroll-pb":[{"scroll-pb":a()}],"scroll-pl":[{"scroll-pl":a()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",n,s]}],fill:[{fill:["none",...c()]}],"stroke-w":[{stroke:[p,$,j,ke]}],stroke:[{stroke:["none",...c()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},Ro=so(Io);function Go(...e){return Ro(Ne(e))}export{Go as c};
@@ -0,0 +1 @@
1
+ import{r as l,j as o}from"./react-qoZPGuNy.js";import{f as u,aA as s}from"./index-C_O7gp2F.js";import{F as i}from"./ui-Bq3RQsdJ.js";s.schema;function c(a){let e;try{e=new URL(a.trim())}catch{return null}const r=e.hostname.replace(/^www\./,"");if(r==="youtu.be"){const t=e.pathname.slice(1).split("/")[0];return t?`https://www.youtube.com/embed/${t}`:null}if(r==="youtube.com"||r==="m.youtube.com"){if(e.pathname==="/watch"){const n=e.searchParams.get("v");return n?`https://www.youtube.com/embed/${n}`:null}const t=e.pathname.match(/^\/(?:embed|shorts)\/([^/]+)/);return t?`https://www.youtube.com/embed/${t[1]}`:null}if(r==="vimeo.com"){const t=e.pathname.split("/").filter(Boolean)[0];return t&&/^\d+$/.test(t)?`https://player.vimeo.com/video/${t}`:null}return r==="player.vimeo.com"||e.protocol==="https:"?e.toString():null}function m({config:a}){const[e,r]=l.useState("loading"),t=l.useMemo(()=>c(a.url),[a.url]);return l.useEffect(()=>r("loading"),[t]),t?e==="error"?o.jsx(i,{children:"video unavailable"}):o.jsxs("div",{className:"relative h-full w-full overflow-hidden rounded-md",children:[e==="loading"&&o.jsx("div",{className:"absolute inset-0 z-10",children:o.jsx(i,{loading:!0,children:"loading video…"})}),o.jsx("iframe",{src:t,title:a.title,className:`h-full w-full border-0 transition-opacity duration-300 ${e==="loaded"?"opacity-100":"opacity-0"}`,allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowFullScreen:!0,onLoad:()=>r("loaded"),onError:()=>r("error")},t)]}):o.jsx(i,{children:"invalid video URL"})}const f=u({...s,component:m});export{f as videoFrame};
@@ -0,0 +1 @@
1
+ import{j as e}from"./react-qoZPGuNy.js";import{c as x,b as v}from"./format-CfAcS4D8.js";import{f as j,ai as p,aj as g}from"./index-C_O7gp2F.js";import{F as u}from"./ui-Bq3RQsdJ.js";p.schema;const h=(n=1)=>`hsl(var(--zf-accent-hue, 242) 85% 72% / ${n})`;function y({rates:n}){const a=Math.min(...n),m=Math.max(...n),r=Math.max(.01,m-a),o=n.length,c=i=>100*i/(o-1),t=i=>4+32*(1-(i-a)/r),d=n.map((i,s)=>`${s?"L":"M"}${c(s).toFixed(2)},${t(i).toFixed(2)}`).join(" ");return e.jsxs("svg",{viewBox:"0 0 100 40",preserveAspectRatio:"none",className:"h-20 w-full","aria-hidden":!0,children:[e.jsx("path",{d:`${d} L100,40 L0,40 Z`,fill:h(.14)}),e.jsx("path",{d,fill:"none",stroke:h(.9),strokeWidth:1.5,vectorEffect:"non-scaling-stroke",strokeLinejoin:"round"})]})}function N({config:n}){const{curve:a,isLoading:m}=g();if(m)return e.jsx(u,{loading:!0,children:"loading yield curve…"});if(!a||a.points.length<2)return e.jsx(u,{children:"no yield-curve data yet"});const r=s=>{var l;return(l=a.points.find(f=>f.label===s))==null?void 0:l.rate},o=r("2Y"),c=r("10Y"),t=o!=null&&c!=null?Math.round((c-o)*100):null,d=t!=null&&t<0,i=n.maturities;return e.jsxs("div",{className:"flex h-full min-h-0 flex-col gap-2",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"caption text-soft uppercase",children:"Treasury yield curve"}),e.jsxs("div",{className:"body-sm text-normal",children:["U.S. Treasury · ",a.date]})]}),e.jsx("div",{className:"caption text-soft text-right",children:"daily"})]}),t!=null&&e.jsxs("div",{className:"flex items-baseline gap-2",children:[e.jsxs("span",{className:"metric-md leading-none",style:{color:x(t),textShadow:`0 0 24px ${x(t)}44`},children:[t>=0?"+":"",t," bps"]}),e.jsxs("span",{className:"caption text-soft",children:["2s10s · ",d?"inverted":"normal"]})]}),e.jsx(y,{rates:a.points.map(s=>s.rate)}),e.jsx("div",{className:"grid gap-1",style:{gridTemplateColumns:`repeat(${i.length}, minmax(0, 1fr))`},children:i.map(s=>{const l=r(s);return e.jsxs("div",{className:"rounded bg-white/[0.04] px-1.5 py-1 text-center",children:[e.jsx("div",{className:"caption text-soft",children:s}),e.jsx("div",{className:"body-sm text-strong font-bold tabular-nums",children:l!=null?v(l):"—"})]},s)})})]})}const M=j({...p,component:N});export{M as yieldCurveFrame};
@@ -8,11 +8,9 @@
8
8
  <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png" />
9
9
  <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
10
10
  <title>zframes runtime</title>
11
- <script type="module" crossorigin src="/assets/index-KRy1feFG.js"></script>
11
+ <script type="module" crossorigin src="/assets/index-C_O7gp2F.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="/assets/react-qoZPGuNy.js">
13
- <link rel="modulepreload" crossorigin href="/assets/liveline-C5zt2WuS.js">
14
- <link rel="modulepreload" crossorigin href="/assets/d3-B3esOK0k.js">
15
- <link rel="stylesheet" crossorigin href="/assets/index-DEGnog6Q.css">
13
+ <link rel="stylesheet" crossorigin href="/assets/index-DRTPEQtR.css">
16
14
  </head>
17
15
  <body>
18
16
  <div id="root"></div>
@@ -1,68 +0,0 @@
1
- import{r,c as is,j as e,a as At}from"./react-qoZPGuNy.js";import{G as Mt}from"./gridstack-BxxvPIFU.js";import{u as ls,F as Et,a as cs,b as os,c as us,d as ms,N as Lt,e as Ft,t as qe}from"./index-KRy1feFG.js";import"./liveline-C5zt2WuS.js";import"./d3-B3esOK0k.js";const $t=[{key:"zframes",label:"zframes",description:"The signature indigo on near-black navy, DM Sans, soft rounded cards — the default look.",theme:{accentHue:242,accentSat:90,baseHue:233,baseSat:20},typography:{fontFamily:"sans",numericStyle:"proportional"},appearance:{radius:18,borderStrength:.22,surfaceOpacity:1,density:1,elevation:1}},{key:"terminal",label:"Terminal",description:"Phosphor green on black, monospaced, fixed-width digits, sharp dense flat cards — a trading-terminal feel.",theme:{accentHue:145,accentSat:85,baseHue:150,baseSat:16},typography:{fontFamily:"mono",numericStyle:"tabular"},appearance:{radius:4,borderStrength:.34,surfaceOpacity:1,density:.85,elevation:.4}},{key:"amber",label:"Amber",description:"Warm amber on charcoal, monospaced, tabular, slightly sharp cards — a retro CRT console.",theme:{accentHue:38,accentSat:95,baseHue:30,baseSat:18},typography:{fontFamily:"mono",numericStyle:"tabular"},appearance:{radius:6,borderStrength:.3,surfaceOpacity:1,density:.9,elevation:.6}},{key:"graphite",label:"Graphite",description:"Near-grayscale slate, faint rims, flat quiet cards, tabular numbers — calm and neutral.",theme:{accentHue:220,accentSat:8,baseHue:220,baseSat:4},typography:{fontFamily:"sans",numericStyle:"tabular"},appearance:{radius:14,borderStrength:.14,surfaceOpacity:1,density:1,elevation:.35}},{key:"synthwave",label:"Synthwave",description:"Hot magenta on deep violet-black, faintly glassy cards floating on a strong glow — vivid and nocturnal.",theme:{accentHue:320,accentSat:88,baseHue:280,baseSat:26},typography:{fontFamily:"sans",numericStyle:"proportional"},appearance:{radius:20,borderStrength:.3,surfaceOpacity:.9,density:1,elevation:1.7}},{key:"editorial",label:"Editorial",description:"A warm serif on soft charcoal-brown, roomy padding, gentle lift — reads like a financial broadsheet.",theme:{accentHue:22,accentSat:60,baseHue:28,baseSat:12},typography:{fontFamily:"serif",numericStyle:"proportional"},appearance:{radius:10,borderStrength:.18,surfaceOpacity:1,density:1.15,elevation:.8}}];/**
2
- * @license lucide-react v1.21.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const _t=(...t)=>t.filter((a,n,m)=>!!a&&a.trim()!==""&&m.indexOf(a)===n).join(" ").trim();/**
7
- * @license lucide-react v1.21.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const ds=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/**
12
- * @license lucide-react v1.21.0 - ISC
13
- *
14
- * This source code is licensed under the ISC license.
15
- * See the LICENSE file in the root directory of this source tree.
16
- */const fs=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,n,m)=>m?m.toUpperCase():n.toLowerCase());/**
17
- * @license lucide-react v1.21.0 - ISC
18
- *
19
- * This source code is licensed under the ISC license.
20
- * See the LICENSE file in the root directory of this source tree.
21
- */const Ht=t=>{const a=fs(t);return a.charAt(0).toUpperCase()+a.slice(1)};/**
22
- * @license lucide-react v1.21.0 - ISC
23
- *
24
- * This source code is licensed under the ISC license.
25
- * See the LICENSE file in the root directory of this source tree.
26
- */var Pe={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
27
- * @license lucide-react v1.21.0 - ISC
28
- *
29
- * This source code is licensed under the ISC license.
30
- * See the LICENSE file in the root directory of this source tree.
31
- */const hs=t=>{for(const a in t)if(a.startsWith("aria-")||a==="role"||a==="title")return!0;return!1},ps=r.createContext({}),gs=()=>r.useContext(ps),ys=r.forwardRef(({color:t,size:a,strokeWidth:n,absoluteStrokeWidth:m,className:N="",children:d,iconNode:h,...o},f)=>{const{size:p=24,strokeWidth:u=2,absoluteStrokeWidth:y=!1,color:z="currentColor",className:j=""}=gs()??{},k=m??y?Number(n??u)*24/Number(a??p):n??u;return r.createElement("svg",{ref:f,...Pe,width:a??p??Pe.width,height:a??p??Pe.height,stroke:t??z,strokeWidth:k,className:_t("lucide",j,N),...!d&&!hs(o)&&{"aria-hidden":"true"},...o},[...h.map(([R,L])=>r.createElement(R,L)),...Array.isArray(d)?d:[d]])});/**
32
- * @license lucide-react v1.21.0 - ISC
33
- *
34
- * This source code is licensed under the ISC license.
35
- * See the LICENSE file in the root directory of this source tree.
36
- */const ne=(t,a)=>{const n=r.forwardRef(({className:m,...N},d)=>r.createElement(ys,{ref:d,iconNode:a,className:_t(`lucide-${ds(Ht(t))}`,`lucide-${t}`,m),...N}));return n.displayName=Ht(t),n};/**
37
- * @license lucide-react v1.21.0 - ISC
38
- *
39
- * This source code is licensed under the ISC license.
40
- * See the LICENSE file in the root directory of this source tree.
41
- */const bs=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],xs=ne("check",bs);/**
42
- * @license lucide-react v1.21.0 - ISC
43
- *
44
- * This source code is licensed under the ISC license.
45
- * See the LICENSE file in the root directory of this source tree.
46
- */const zs=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],js=ne("chevron-down",zs);/**
47
- * @license lucide-react v1.21.0 - ISC
48
- *
49
- * This source code is licensed under the ISC license.
50
- * See the LICENSE file in the root directory of this source tree.
51
- */const Ns=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],vs=ne("plus",Ns);/**
52
- * @license lucide-react v1.21.0 - ISC
53
- *
54
- * This source code is licensed under the ISC license.
55
- * See the LICENSE file in the root directory of this source tree.
56
- */const ks=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],ws=ne("search",ks);/**
57
- * @license lucide-react v1.21.0 - ISC
58
- *
59
- * This source code is licensed under the ISC license.
60
- * See the LICENSE file in the root directory of this source tree.
61
- */const Ss=[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]],Cs=ne("sliders-horizontal",Ss);/**
62
- * @license lucide-react v1.21.0 - ISC
63
- *
64
- * This source code is licensed under the ISC license.
65
- * See the LICENSE file in the root directory of this source tree.
66
- */const Rs=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Ce=ne("x",Rs),As=24;function It(t,a){var n;return a==="flow-horizontal"?(n=t.layouts)==null?void 0:n["flow-horizontal"]:t.position}function Tt(t,a){const n=t.reduce((m,N)=>m+Math.max(1,N.position.w)*Math.min(Math.max(1,N.position.h),a),0);return Math.max(As,Math.ceil(n/a*1.25)+8)}function Ot(t,a,n){var h;const m=new Set,N=(o,f,p,u)=>{for(let y=0;y<p;y++)for(let z=0;z<u;z++){const j=o+y,k=f+z;j>=0&&k>=0&&m.add(`${j},${k}`)}},d=(o,f,p,u)=>{if(o+p>a||f+u>n)return!1;for(let y=0;y<p;y++)for(let z=0;z<u;z++)if(m.has(`${o+y},${f+z}`))return!1;return!0};for(const o of t){const f=(h=o.layouts)==null?void 0:h["flow-horizontal"];f&&N(f.x,f.y,f.w,Math.min(f.h,n))}return t.map(o=>{var y;if((y=o.layouts)!=null&&y["flow-horizontal"])return o;const f=Math.min(Math.max(1,o.position.w),a),p=Math.min(Math.max(1,o.position.h),n);let u={x:0,y:0,w:f,h:p};e:for(let z=0;z<=a-f;z++)for(let j=0;j<=n-p;j++)if(d(z,j,f,p)){u={x:z,y:j,w:f,h:p};break e}return N(u.x,u.y,u.w,u.h),{...o,layouts:{...o.layouts,"flow-horizontal":u}}})}const Gt=["xyz:TSLA","xyz:NVDA","xyz:AAPL","xyz:MSFT","xyz:GOOGL","xyz:AMD","xyz:META","xyz:AMZN","xyz:NFLX","xyz:AVGO","xyz:MSTR","xyz:COIN","xyz:HOOD","xyz:PLTR","BTC","ETH","SOL","HYPE","BNB","XRP","DOGE","LINK","AVAX","SUI"],Wt=new Map(Gt.map((t,a)=>[t,a]));function me(t){const a=t.indexOf(":");return(a===-1?t:t.slice(a+1)).toUpperCase()}function Ke(t){return t.includes(":")?"Stock":"Crypto"}function Ms(t){const a=t.indexOf(":");if(a!==-1){const n=t.slice(a+1);return`https://assets.parqet.com/logos/symbol/${encodeURIComponent(n)}?format=png`}return`https://assets.coincap.io/assets/icons/${t.toLowerCase()}@2x.png`}function Es(t){const a=t.trim().replace(/\s+/g,"");if(!a)return"";const n=a.indexOf(":");return n===-1?a.toUpperCase():`${a.slice(0,n).toLowerCase()}:${a.slice(n+1).toUpperCase()}`}function _e(t,a,n=Wt.get(t)??1e4){return{symbol:t,ticker:me(t),kind:Ke(t),markPx:a==null?void 0:a.markPx,changePct:a==null?void 0:a.changePct,rank:n}}function Ut(t){if(!Number.isFinite(t))return"";const a=t;return a>=1e3?`$${a.toLocaleString(void 0,{maximumFractionDigits:0})}`:a>=100?`$${a.toFixed(2)}`:a>=1?`$${a.toFixed(3)}`:`$${a.toPrecision(3)}`}function Ls(t){if(!Number.isFinite(t))return"";const a=t;return`${a>=0?"+":""}${a.toFixed(2)}%`}function qt(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function I(t,a){return t!=null&&t.type?Array.isArray(t.type)?t.type.includes(a):t.type===a:!1}function Kt(t){const a=t==null?void 0:t.items;return!!a&&I(t,"array")&&I(a,"string")}function Fs(t){var a,n,m;try{const d=qe(t.schema,{io:"input"}).properties??{};if(I(d.symbol,"string"))return{kind:"single"};if(Kt(d.symbols))return{kind:"symbols",minItems:(a=d.symbols)==null?void 0:a.minItems,maxItems:(n=d.symbols)==null?void 0:n.maxItems};const h=d.holdings,o=((m=h==null?void 0:h.items)==null?void 0:m.properties)??{};if(I(h,"array")&&I(o.symbol,"string"))return{kind:"holdings",minItems:h==null?void 0:h.minItems,maxItems:h==null?void 0:h.maxItems}}catch{}return t.name==="price-chart"?{kind:"single"}:["price-liveline","price-ticker","funding-rate-chart","funding-heatmap","price-compare"].includes(t.name)?{kind:"symbols"}:null}function $s(t,a){return t.kind==="single"?typeof a.symbol=="string"&&a.symbol?[a.symbol]:[]:t.kind==="symbols"?Array.isArray(a.symbols)?a.symbols.filter(n=>typeof n=="string"):[]:Array.isArray(a.holdings)?a.holdings.map(n=>qt(n)&&typeof n.symbol=="string"?n.symbol:"").filter(Boolean):[]}const Hs=new Set(["symbol","symbols","holdings"]);function Ve(t){const a=t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").trim();return a?a.charAt(0).toUpperCase()+a.slice(1):t}function Is(t){let a;try{a=qe(t.schema,{io:"input"})}catch{return[]}return Object.entries(a.properties??{}).filter(([n])=>!Hs.has(n)).map(([n,m])=>({key:n,label:Ve(n),shape:m}))}const Pt=["xyz:TSLA","xyz:NVDA","xyz:AAPL","xyz:MSFT","xyz:META","xyz:AMD","xyz:GOOGL","xyz:AMZN"];function Ts(t,a){return t==="symbol"?Pt[a%Pt.length]:t==="url"?"https://":t==="text"?"New note":t==="title"?"Heading":Ve(t)||"value"}function Ge(t,a,n=0){var m;if(t.default!==void 0)return t.default;if(Array.isArray(t.enum)&&t.enum.length)return t.enum[0];if(I(t,"string"))return Ts(a,n);if(I(t,"number")||I(t,"integer"))return t.exclusiveMinimum!==void 0?t.exclusiveMinimum+1:t.minimum??0;if(I(t,"boolean"))return!1;if(I(t,"array")){const N=t.items??{},d=a==="symbols"?"symbol":a;return Array.from({length:t.minItems??0},(h,o)=>Ge(N,d,o))}if(I(t,"object")){const N={};for(const d of t.required??[]){const h=(m=t.properties)==null?void 0:m[d];h&&(N[d]=Ge(h,d,n))}return N}return null}function Os(t){const a=t.schema.safeParse({});if(a.success)return a.data;let n;try{n=qe(t.schema,{io:"input"})}catch{return{}}const m={},N=new Set(n.required??[]);for(const[h,o]of Object.entries(n.properties??{}))N.has(h)&&(m[h]=Ge(o,h));const d=t.schema.safeParse(m);return d.success?d.data:m}const Ps='<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>';function Ds(t,a){const n=r.useMemo(()=>t.find(f=>f.capabilities.includes("day-stats")),[t]),[m,N]=r.useState({}),[d,h]=r.useState(!1);return r.useEffect(()=>{if(!a||!(n!=null&&n.getDayStats)){h(!1);return}let f=!1;return h(!0),Promise.allSettled([n.getDayStats(),n.getDayStats(["xyz:*"])]).then(p=>{if(f)return;const u={};for(const y of p)y.status==="fulfilled"&&Object.assign(u,y.value);N(u)}).finally(()=>{f||h(!1)}),()=>{f=!0}},[a,n]),{options:r.useMemo(()=>{const f=new Map;return Gt.forEach((p,u)=>{f.set(p,_e(p,m[p],u))}),Object.entries(m).forEach(([p,u])=>{f.set(p,_e(p,u,Wt.get(p)??1e4))}),[...f.values()].sort((p,u)=>p.rank!==u.rank?p.rank-u.rank:p.kind!==u.kind?p.kind==="Stock"?-1:1:p.ticker.localeCompare(u.ticker))},[m]),loading:d}}function ea({spec:t,registry:a,onSave:n,customiseButtonTarget:m,onAccentHueChange:N,onAccentSatChange:d,onFontScaleChange:h,onUpColorChange:o,onDownColorChange:f,onModeChange:p}){var vt;const u=ls(),y=r.useRef(null),z=r.useRef(null),j=r.useRef(!1),k=r.useRef(t.grid.mode),R=r.useRef(new Map),L=r.useRef(new Map),x=r.useRef(new Map),v=r.useRef([]),E=r.useRef(t.theme.accentHue),se=r.useRef(t.theme.accentSat),ie=r.useRef(t.theme.baseHue),Xe=r.useRef(t.theme.baseSat),Ye=r.useRef(t.theme.upColor),Ze=r.useRef(t.theme.downColor),Je=r.useRef(t.grid.gap),Qe=r.useRef(t.grid.mode),le=r.useRef(null),et=r.useRef(t.appearance.radius),tt=r.useRef(t.appearance.borderStrength),st=r.useRef(t.appearance.surfaceOpacity),at=r.useRef(t.appearance.density),rt=r.useRef(t.appearance.elevation),nt=r.useRef(t.typography.fontFamily),it=r.useRef(t.typography.numericStyle),lt=r.useRef(t.typography.scale),ct=r.useRef(0),[F,Re]=r.useState(!1),Xt=Ds(u,F),[Vs,ce]=r.useState(t.frames.length),[O,de]=r.useState(t.theme.accentHue),[P,fe]=r.useState(t.theme.accentSat),[D,he]=r.useState(t.theme.baseHue),[B,pe]=r.useState(t.theme.baseSat),[_,Ae]=r.useState(t.theme.upColor),[G,Me]=r.useState(t.theme.downColor),[H,ot]=r.useState(t.grid.mode),[Yt,ut]=r.useState(!1),[W,Ee]=r.useState(t.grid.gap),[U,ge]=r.useState(t.appearance.radius),[q,ye]=r.useState(t.appearance.borderStrength),[K,be]=r.useState(t.appearance.surfaceOpacity),[V,xe]=r.useState(t.appearance.density),[X,ze]=r.useState(t.appearance.elevation),[J,Le]=r.useState(t.typography.fontFamily),[Q,Fe]=r.useState(t.typography.numericStyle),[Y,$e]=r.useState(t.typography.scale),Zt=r.useCallback(s=>{de(s.theme.accentHue),fe(s.theme.accentSat),he(s.theme.baseHue),pe(s.theme.baseSat),Le(s.typography.fontFamily),Fe(s.typography.numericStyle),ge(s.appearance.radius),ye(s.appearance.borderStrength),be(s.appearance.surfaceOpacity),xe(s.appearance.density),ze(s.appearance.elevation)},[]),mt=((vt=$t.find(s=>s.theme.accentHue===O&&s.theme.accentSat===P&&s.theme.baseHue===D&&s.theme.baseSat===B&&s.typography.fontFamily===J&&s.typography.numericStyle===Q&&s.appearance.radius===U&&s.appearance.borderStrength===q&&s.appearance.surfaceOpacity===K&&s.appearance.density===V&&s.appearance.elevation===X))==null?void 0:vt.key)??null,[ee,dt]=r.useState("frames"),[He,ae]=r.useState(null),ft=r.useRef(null);ft.current=He,r.useEffect(()=>{N==null||N(O)},[O,N]),r.useEffect(()=>{d==null||d(P)},[P,d]),r.useEffect(()=>{h==null||h(Y)},[Y,h]),r.useEffect(()=>{o==null||o(_)},[_,o]),r.useEffect(()=>{f==null||f(G)},[G,f]),r.useEffect(()=>{k.current=H,p==null||p(H)},[H,p]),r.useEffect(()=>{var s;(s=z.current)==null||s.margin(W/2)},[W]);const ht=r.useRef(u);ht.current=u;const re=r.useRef(a);re.current=a;const je=r.useMemo(()=>{const s=new Map;for(const l of a.values()){const b=l.category??"other",S=s.get(b);S?S.push(l):s.set(b,[l])}const c=Et.map(l=>l.key),i=Et.map(l=>({key:l.key,label:l.label,description:l.description,frames:s.get(l.key)??[]})),g=[...s.entries()].filter(([l])=>!c.includes(l)).flatMap(([,l])=>l);return g.length&&i.push({key:"other",label:"Other",description:"",frames:g}),i.filter(l=>l.frames.length>0).map(l=>({...l,frames:[...l.frames].sort((b,S)=>b.name.localeCompare(S.name))}))},[a]),[pt,Jt]=r.useState(()=>new Set(je[0]?[je[0].key]:[])),Qt=r.useCallback(s=>{Jt(c=>{const i=new Set(c);return i.has(s)?i.delete(s):i.add(s),i})},[]),oe=r.useCallback(s=>s?Os(s):{},[]),Ne=r.useCallback(s=>{let c=`${s}-${++ct.current}`;for(;R.current.has(c);)c=`${s}-${++ct.current}`;return c},[]),ve=r.useRef(null),Z=r.useCallback(s=>{const c=x.current.get(s),i=R.current.get(s);if(!c||!i)return;let g=L.current.get(s);g||(c.innerHTML="",g=is.createRoot(c),L.current.set(s,g)),g.render(e.jsx(cs,{providers:ht.current,children:e.jsx(os.Provider,{value:l=>{var b;return(b=ve.current)==null?void 0:b.call(ve,s,l)},children:e.jsx(us,{instance:i,registry:re.current,className:"zf-fill"})})}))},[]),es=r.useCallback((s,c)=>{const i=R.current.get(s);i&&(R.current.set(s,{...i,config:{...i.config,...c}}),Z(s))},[Z]);ve.current=es;const gt=r.useCallback(s=>{var g;const c=z.current;if(!c)return;const i=s.getAttribute("gs-id");i&&((g=L.current.get(i))==null||g.unmount(),L.current.delete(i),x.current.delete(i),R.current.delete(i),ft.current===i&&ae(null)),c.removeWidget(s,!0),ce(c.getGridItems().length)},[]),te=r.useCallback(s=>{if(!s.querySelector(".zf-cfg-btn")){const c=document.createElement("button");c.className="zf-cfg-btn",c.type="button",c.title="Edit frame",c.setAttribute("aria-label","Edit frame"),c.innerHTML=Ps,c.addEventListener("click",i=>{i.stopPropagation();const g=s.getAttribute("gs-id");g&&ae(g)}),s.appendChild(c)}if(!s.querySelector(".zf-del-btn")){const c=document.createElement("button");c.className="zf-del-btn",c.type="button",c.title="Remove frame",c.innerHTML="&times;",c.addEventListener("click",i=>{i.stopPropagation(),gt(s)}),s.appendChild(c)}},[gt]),yt=r.useCallback(s=>{var c,i;(c=s.querySelector(".zf-cfg-btn"))==null||c.remove(),(i=s.querySelector(".zf-del-btn"))==null||i.remove()},[]),ke=r.useCallback((s,c=!1)=>{const i=k.current,g=i==="flow-horizontal",l=It(s,i),b=(l==null?void 0:l.w)??s.position.w,S=(l==null?void 0:l.h)??s.position.h,w=g?Math.min(S,t.grid.rows):S,M=re.current.get(s.frame),C=M==null?void 0:M.layout,A=document.createElement("div");A.className="grid-stack-item",A.setAttribute("gs-id",s.id),A.setAttribute("data-frame",s.frame),c||!l?A.setAttribute("gs-auto-position","true"):(A.setAttribute("gs-x",String(l.x)),A.setAttribute("gs-y",String(l.y))),A.setAttribute("gs-w",String(b)),A.setAttribute("gs-h",String(w)),C!=null&&C.minW&&A.setAttribute("gs-min-w",String(C.minW)),C!=null&&C.minH&&A.setAttribute("gs-min-h",String(C.minH)),C!=null&&C.maxW&&A.setAttribute("gs-max-w",String(C.maxW)),C!=null&&C.maxH&&A.setAttribute("gs-max-h",String(C.maxH));const $=document.createElement("div");return $.className="grid-stack-item-content",A.appendChild($),x.current.set(s.id,$),A},[t.grid.rows]),ue=r.useCallback(s=>{const c=z.current;if(c){L.current.forEach(i=>i.unmount()),L.current.clear(),x.current.clear(),R.current=new Map(s.map(i=>[i.id,i])),c.removeAll(!0),c.el.querySelectorAll(".grid-stack-item").forEach(i=>i.remove()),c.batchUpdate();for(const i of s){const g=ke(i);c.el.appendChild(g),c.makeWidget(g),Z(i.id)}c.batchUpdate(!1),ce(s.length)}},[ke,Z]),bt=r.useCallback(s=>{var S,w;const c=z.current;if(!c)return;const i=re.current.get(s),g=Ne(s),l={id:g,frame:s,position:{x:0,y:0,w:((S=i==null?void 0:i.layout)==null?void 0:S.w)??4,h:((w=i==null?void 0:i.layout)==null?void 0:w.h)??3},config:oe(i)};R.current.set(g,l);const b=ke(l,!0);c.el.appendChild(b),c.makeWidget(b),Z(g),te(b),ce(c.getGridItems().length),ae(g)},[ke,te,oe,Z,Ne]),we=r.useCallback(()=>{var g,l;const s=typeof window<"u"?window.innerHeight:800,c=((l=(g=y.current)==null?void 0:g.parentElement)==null?void 0:l.getBoundingClientRect().top)??120,i=s-c-56;return Math.max(80,Math.floor(i/t.grid.rows))},[t.grid.rows]),Ie=r.useCallback(()=>{const s=z.current;if(!s)return;const c=s.el;s.off("dropped"),s.off("removed"),s.off("drag"),s.off("dragstart"),s.off("dragstop"),document.body.classList.remove("zf-dragging"),L.current.forEach(i=>i.unmount()),L.current.clear(),x.current.clear(),s.destroy(!1),c&&(c.querySelectorAll(".grid-stack-item").forEach(i=>i.remove()),c.style.width="",c.style.height=""),z.current=null},[]),Te=r.useCallback((s,c)=>{const i=s==="flow-horizontal",g=i?we():t.grid.rowHeight,l=Mt.init({column:i?c:t.grid.columns,cellHeight:g,margin:t.grid.gap/2,float:!0,...i?{maxRow:t.grid.rows,minRow:t.grid.rows}:{},animate:!0,acceptWidgets:!0,disableDrag:!0,disableResize:!0},y.current);return l.el.style.width=i?`${c*g}px`:"",l.on("dropped",(b,S,w)=>{var Ct,Rt;const M=w==null?void 0:w.el;if(!M)return;const C=M.querySelector(".grid-stack-item-content"),A=M.getAttribute("data-frame");if(!C||!A)return;const $=M.getAttribute("gs-id")||Ne(A);M.setAttribute("gs-id",$);const T=re.current.get(A),kt=(w==null?void 0:w.w)??((Ct=T==null?void 0:T.layout)==null?void 0:Ct.w)??4,wt=(w==null?void 0:w.h)??((Rt=T==null?void 0:T.layout)==null?void 0:Rt.h)??3,St={x:(w==null?void 0:w.x)??0,y:(w==null?void 0:w.y)??0,w:kt,h:wt},ns=k.current==="flow-horizontal"?{id:$,frame:A,position:{x:0,y:0,w:kt,h:wt},layouts:{"flow-horizontal":St},config:oe(T)}:{id:$,frame:A,position:St,config:oe(T)};R.current.set($,ns),x.current.set($,C),Z($),te(M),ce(l.getGridItems().length),ae($)}),l.on("removed",()=>ce(l.getGridItems().length)),l.on("dragstart",()=>document.body.classList.add("zf-dragging")),l.on("dragstop",()=>document.body.classList.remove("zf-dragging")),i&&l.on("drag",b=>{var A,$,T;const S=(A=y.current)==null?void 0:A.parentElement;if(!S)return;const w=S.getBoundingClientRect(),M=b.clientX??((T=($=b.touches)==null?void 0:$[0])==null?void 0:T.clientX);if(M==null)return;const C=64;M<w.left+C?S.scrollLeft-=18:M>w.right-C&&(S.scrollLeft+=18)}),l},[we,t.grid.columns,t.grid.rowHeight,t.grid.rows,t.grid.gap,Ne,oe,Z,te]);r.useEffect(()=>{if(!y.current||j.current)return;j.current=!0;const s=k.current==="flow-horizontal",c=s?Tt(t.frames,t.grid.rows):t.grid.columns;return z.current=Te(k.current,c),ue(s?Ot(t.frames,c,t.grid.rows):t.frames),()=>{Ie(),j.current=!1}},[]),r.useEffect(()=>{const s=z.current;s&&(s.enableMove(F),s.enableResize(F),F?s.getGridItems().forEach(te):s.getGridItems().forEach(yt))},[F,te,yt]),r.useEffect(()=>{const s=z.current;if(!s||k.current!=="flow-horizontal")return;const c=requestAnimationFrame(()=>{const i=we();s.cellHeight(i),s.el.style.width=`${s.getColumn()*i}px`});return()=>cancelAnimationFrame(c)},[F,we]),r.useEffect(()=>{!F||ee!=="frames"||!z.current||Mt.setupDragIn(".zf-newwidget",{appendTo:"body",helper:s=>{var C;const i=(s.closest(".zf-newwidget")??s).dataset.frame??"",g=re.current.get(i),l=g==null?void 0:g.layout,b=document.createElement("div");b.className="grid-stack-item",b.setAttribute("data-frame",i),b.setAttribute("gs-w",String((l==null?void 0:l.w)??4)),b.setAttribute("gs-h",String((l==null?void 0:l.h)??3)),l!=null&&l.minW&&b.setAttribute("gs-min-w",String(l.minW)),l!=null&&l.minH&&b.setAttribute("gs-min-h",String(l.minH)),l!=null&&l.maxW&&b.setAttribute("gs-max-w",String(l.maxW)),l!=null&&l.maxH&&b.setAttribute("gs-max-h",String(l.maxH));const S=(C=y.current)==null?void 0:C.closest(".zf-editor");if(S){const A=getComputedStyle(S);for(const $ of["--zf-accent-hue","--zf-accent-sat","--font-dmsans"]){const T=A.getPropertyValue($).trim();T&&b.style.setProperty($,T)}}const w=i.replace(/-/g," "),M=g!=null&&g.iconUrl?`<img class="zf-drag-ghost-icon" src="${g.iconUrl}" alt="" />`:"";return b.innerHTML=`<div class="grid-stack-item-content zf-drag-ghost" data-frame="${i}">${M}<span class="zf-drag-ghost-name">${w}</span></div>`,b}})},[F,ee,je,pt]);const Se=r.useCallback(()=>{const s=z.current,c=[];if(s)for(const i of s.getGridItems()){const g=i.getAttribute("gs-id");if(!g)continue;const l=R.current.get(g);if(!l)continue;const b=i.gridstackNode,S=It(l,H)??l.position,w={x:(b==null?void 0:b.x)??S.x,y:(b==null?void 0:b.y)??S.y,w:(b==null?void 0:b.w)??S.w,h:(b==null?void 0:b.h)??S.h};c.push(H==="flow-horizontal"?{...l,layouts:{...l.layouts,"flow-horizontal":w}}:{...l,position:w})}return c.sort((i,g)=>i.position.y-g.position.y||i.position.x-g.position.x),{...t,grid:{...t.grid,gap:W,mode:H},theme:{...t.theme,accentHue:O,accentSat:P,baseHue:D,baseSat:B,upColor:_,downColor:G},typography:{...t.typography,fontFamily:J,numericStyle:Q,scale:Y},appearance:{...t.appearance,radius:U,borderStrength:q,surfaceOpacity:K,density:V,elevation:X},frames:c}},[t,O,P,D,B,_,G,J,Q,Y,W,H,U,q,K,V,X]),xt=r.useCallback(s=>{const c=new Blob([`${JSON.stringify(s,null,2)}
67
- `],{type:"application/json"}),i=URL.createObjectURL(c),g=document.createElement("a");g.href=i,g.download="dashboard.json",g.click(),setTimeout(()=>URL.revokeObjectURL(i),0)},[]),ts=r.useCallback(()=>{v.current=Se().frames,E.current=O,se.current=P,ie.current=D,Xe.current=B,Ye.current=_,Ze.current=G,Je.current=W,Qe.current=H,et.current=U,tt.current=q,st.current=K,at.current=V,rt.current=X,nt.current=J,it.current=Q,lt.current=Y,Re(!0)},[Se,O,P,D,B,_,G,W,H,U,q,K,V,X,J,Q,Y]),ss=r.useCallback(()=>{ue(v.current),de(E.current),fe(se.current),he(ie.current),pe(Xe.current),Ae(Ye.current),Me(Ze.current),Ee(Je.current),ot(Qe.current),ge(et.current),ye(tt.current),be(st.current),xe(at.current),ze(rt.current),Le(nt.current),Fe(it.current),$e(lt.current),ae(null),Re(!1)},[ue]),as=r.useCallback(async()=>{const s=Se();Re(!1),ae(null),n?await n(s):xt(s)},[Se,n,xt]),zt=r.useCallback(()=>{const s=z.current;if(!s)return;const c=k.current;for(const i of s.getGridItems()){const g=i.getAttribute("gs-id");if(!g)continue;const l=R.current.get(g);if(!l)continue;const b=i.gridstackNode;if(!b)continue;const S={x:b.x??0,y:b.y??0,w:b.w??1,h:b.h??1};R.current.set(g,c==="flow-horizontal"?{...l,layouts:{...l.layouts,"flow-horizontal":S}}:{...l,position:S})}},[]),jt=r.useCallback(s=>{var g;if(s===k.current)return;const c=()=>{zt();const l=[...R.current.values()],b=F,S=s==="flow-horizontal",w=S?Tt(l,t.grid.rows):t.grid.columns;Ie(),k.current=s,ot(s);const M=Te(s,w);z.current=M,ue(S?Ot(l,w,t.grid.rows):l),b&&(M.enableMove(!0),M.enableResize(!0),M.getGridItems().forEach(te))};if(typeof window<"u"&&((g=window.matchMedia)==null?void 0:g.call(window,"(prefers-reduced-motion: reduce)").matches)){c();return}le.current&&clearTimeout(le.current),ut(!0),le.current=setTimeout(()=>{c(),requestAnimationFrame(()=>ut(!1))},150)},[F,zt,Ie,Te,ue,te,t.grid.rows,t.grid.columns]);r.useEffect(()=>()=>{le.current&&clearTimeout(le.current)},[]);const Nt=()=>e.jsx("button",{type:"button",className:"zf-btn zf-btn--icon",onClick:ts,"aria-label":"Customise",title:"Customise",children:e.jsx(Cs,{size:18,"aria-hidden":"true"})}),Oe=F&&He?R.current.get(He):void 0,rs=H==="flow-horizontal";return e.jsxs(e.Fragment,{children:[e.jsx("style",{children:ms}),m&&!F?At.createPortal(Nt(),m):null,e.jsxs("div",{className:F?"zf-editor zf-customise":"zf-editor","data-mode":H,style:{"--zf-accent-hue":O,"--zf-accent-sat":`${P}%`,"--zf-base-hue":D,"--zf-base-sat":`${B}%`,"--zf-up":_,"--zf-down":G,"--zf-font-family":Ft[J],"--zf-numeric":Lt[Q],"--zf-frame-radius":`${U}px`,"--zf-border-alpha":q,"--zf-surface-opacity":K,"--zf-density":V,"--zf-elevation":X},children:[(F||!m)&&e.jsxs("div",{className:"zf-editor-bar",children:[e.jsx("div",{className:"zf-editor-bar-spacer"}),F?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"zf-btn zf-btn--ghost",onClick:ss,children:"Cancel"}),e.jsx("button",{type:"button",className:"zf-btn zf-btn--primary",onClick:as,children:"Save"})]}):Nt()]}),e.jsxs("div",{className:"zf-editor-main",children:[e.jsx("div",{className:"zf-editor-grid","data-switching":Yt,children:e.jsx("div",{ref:y,className:"grid-stack"})}),e.jsx("aside",{className:"zf-rail","aria-hidden":!F,inert:!F,children:e.jsxs("div",{className:"zf-rail-inner",children:[e.jsxs("div",{className:"zf-rail-tabs",role:"tablist","aria-label":"Customise",children:[e.jsx("button",{type:"button",role:"tab","aria-selected":ee==="frames",className:ee==="frames"?"zf-rail-tab is-active":"zf-rail-tab",onClick:()=>dt("frames"),children:"Frames"}),e.jsx("button",{type:"button",role:"tab","aria-selected":ee==="cosmetics",className:ee==="cosmetics"?"zf-rail-tab is-active":"zf-rail-tab",onClick:()=>dt("cosmetics"),children:"Cosmetics"})]}),ee==="cosmetics"&&e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",style:{margin:0},children:"Presets"}),e.jsx("div",{className:"zf-presets",children:$t.map(s=>e.jsxs("button",{type:"button",className:mt===s.key?"zf-preset is-active":"zf-preset",title:s.description,"aria-pressed":mt===s.key,onClick:()=>Zt(s),children:[e.jsx("span",{className:"zf-preset-swatch",style:{background:`linear-gradient(135deg, hsl(${s.theme.baseHue} ${s.theme.baseSat}% 16%) 0 52%, hsl(${s.theme.accentHue} ${s.theme.accentSat}% 62%) 52% 100%)`}}),e.jsx("span",{className:"zf-preset-label",children:s.label})]},s.key))})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",style:{margin:0},children:"Accent"}),e.jsxs("div",{className:"zf-theme-row",style:{margin:"10px 0 0"},children:[e.jsxs("span",{className:"zf-theme-val",children:[e.jsx("span",{className:"zf-theme-swatch"}),"Hue ",O,"°"]}),O!==242&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>de(242),children:"Reset"})]}),e.jsx("input",{type:"range",className:"zf-hue-slider",min:0,max:360,value:O,"aria-label":"Accent hue",onChange:s=>de(Number(s.target.value))}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Saturation"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[P!==90&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>fe(90),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[P,"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:100,value:P,"aria-label":"Accent saturation",onChange:s=>fe(Number(s.target.value))})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",children:"Surface"}),e.jsxs("div",{className:"zf-theme-row",style:{margin:"10px 0 0"},children:[e.jsxs("span",{className:"zf-theme-val",children:[e.jsx("span",{className:"zf-theme-swatch",style:{background:`hsl(${D} ${B}% 32%)`,boxShadow:"none"}}),"Tint ",D,"°"]}),D!==233&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>he(233),children:"Reset"})]}),e.jsx("input",{type:"range",className:"zf-hue-slider",min:0,max:360,value:D,"aria-label":"Surface tint hue",onChange:s=>he(Number(s.target.value))}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Tint strength"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[B!==20&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>pe(20),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[B,"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:100,value:B,"aria-label":"Surface tint strength",onChange:s=>pe(Number(s.target.value))})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",children:"Gain / Loss"}),e.jsxs("div",{className:"zf-theme-row",style:{margin:"10px 0 0"},children:[e.jsxs("label",{className:"zf-theme-val",children:[e.jsx("input",{type:"color",className:"zf-color",value:_,"aria-label":"Gain (up) colour",onChange:s=>Ae(s.target.value)}),"Up ",_]}),_.toLowerCase()!=="#3fd08f"&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>Ae("#3fd08f"),children:"Reset"})]}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:9},children:[e.jsxs("label",{className:"zf-theme-val",children:[e.jsx("input",{type:"color",className:"zf-color",value:G,"aria-label":"Loss (down) colour",onChange:s=>Me(s.target.value)}),"Down ",G]}),G.toLowerCase()!=="#ff6b81"&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>Me("#ff6b81"),children:"Reset"})]})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",children:"Layout"}),e.jsx("div",{className:"zf-theme-row",children:e.jsx("span",{className:"zf-theme-val",children:"Direction"})}),e.jsxs("div",{className:"zf-mode-seg",role:"group","aria-label":"Dashboard layout direction",children:[e.jsx("button",{type:"button",className:H==="flow-vertical"?"zf-mode-seg-btn is-active":"zf-mode-seg-btn","aria-pressed":H==="flow-vertical",onClick:()=>jt("flow-vertical"),children:"Vertical"}),e.jsx("button",{type:"button",className:H==="flow-horizontal"?"zf-mode-seg-btn is-active":"zf-mode-seg-btn","aria-pressed":H==="flow-horizontal",onClick:()=>jt("flow-horizontal"),children:"Horizontal"}),e.jsx("button",{type:"button",className:"zf-mode-seg-btn",disabled:!0,title:"Infinite canvas — coming soon",children:"Canvas"})]}),rs&&e.jsx("p",{className:"zf-mode-seg-hint",children:"Rows fill the height; the board scrolls sideways. Rearranging stays in Vertical for now."}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Frame gap"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[W!==12&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>Ee(12),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[W,"px"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:12,value:W,"aria-label":"Frame gap",onChange:s=>Ee(Number(s.target.value))})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",children:"Appearance"}),e.jsxs("div",{className:"zf-theme-row",children:[e.jsx("span",{className:"zf-theme-val",children:"Corner radius"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[U!==18&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>ge(18),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[U,"px"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:32,value:U,"aria-label":"Corner radius",onChange:s=>ge(Number(s.target.value))}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Border"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[q!==.22&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>ye(.22),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[Math.round(q*100),"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:1,step:.01,value:q,"aria-label":"Border strength",onChange:s=>ye(Math.round(Number(s.target.value)*100)/100)}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Card opacity"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[K!==1&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>be(1),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[Math.round(K*100),"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:.3,max:1,step:.05,value:K,"aria-label":"Card opacity",onChange:s=>be(Math.round(Number(s.target.value)*100)/100)}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Density"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[V!==1&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>xe(1),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[Math.round(V*100),"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:.6,max:1.4,step:.05,value:V,"aria-label":"Card density",onChange:s=>xe(Math.round(Number(s.target.value)*100)/100)}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Elevation"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[X!==1&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>ze(1),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[X.toFixed(1),"×"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:2,step:.1,value:X,"aria-label":"Card elevation",onChange:s=>ze(Math.round(Number(s.target.value)*10)/10)})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",children:"Typography"}),e.jsx("div",{className:"zf-theme-row",children:e.jsx("span",{className:"zf-theme-val",children:"Font"})}),e.jsx("div",{className:"zf-seg",role:"group","aria-label":"Font family",children:["sans","mono","serif"].map(s=>e.jsx("button",{type:"button",className:J===s?"zf-seg-btn is-active":"zf-seg-btn","aria-pressed":J===s,style:{fontFamily:Ft[s]},onClick:()=>Le(s),children:s==="sans"?"Sans":s==="mono"?"Mono":"Serif"},s))}),e.jsx("div",{className:"zf-theme-row",style:{marginTop:13},children:e.jsx("span",{className:"zf-theme-val",children:"Numbers"})}),e.jsx("div",{className:"zf-seg",role:"group","aria-label":"Numeric style",children:["proportional","tabular"].map(s=>e.jsx("button",{type:"button",className:Q===s?"zf-seg-btn is-active":"zf-seg-btn","aria-pressed":Q===s,onClick:()=>Fe(s),children:e.jsx("span",{style:{fontVariantNumeric:Lt[s]},children:s==="proportional"?"Normal 1,071":"Tabular 1,071"})},s))}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Text size"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[Y!==1&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>$e(1),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[Math.round(Y*100),"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:.85,max:1.25,step:.05,value:Y,"aria-label":"Text size",onChange:s=>$e(Math.round(Number(s.target.value)*100)/100)})]})]}),ee==="frames"&&e.jsxs("section",{children:[e.jsx("h3",{className:"zf-rail-title",children:"Add a frame"}),e.jsx("p",{className:"zf-palette-hint",children:"Open a category, then click a frame to add it — or drag it onto the grid."}),e.jsx("div",{className:"zf-palette-cats",children:je.map(s=>{const c=pt.has(s.key);return e.jsxs("div",{className:c?"zf-palette-cat is-open":"zf-palette-cat",children:[e.jsxs("button",{type:"button",className:"zf-palette-cat-header","aria-expanded":c,onClick:()=>Qt(s.key),children:[e.jsx("svg",{className:"zf-palette-cat-chevron",viewBox:"0 0 16 16","aria-hidden":"true",children:e.jsx("path",{d:"M6 4l4 4-4 4",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})}),e.jsx("span",{className:"zf-palette-cat-label",children:s.label}),e.jsx("span",{className:"zf-palette-cat-count",children:s.frames.length})]}),c&&e.jsxs("div",{className:"zf-palette-cat-body",children:[s.description&&e.jsx("p",{className:"zf-palette-cat-desc",children:s.description}),e.jsx("div",{className:"zf-palette",children:s.frames.map(i=>{var g,l,b,S,w,M;return e.jsxs("div",{className:"grid-stack-item zf-newwidget","data-frame":i.name,"gs-w":((g=i.layout)==null?void 0:g.w)??4,"gs-h":((l=i.layout)==null?void 0:l.h)??3,"gs-min-w":(b=i.layout)==null?void 0:b.minW,"gs-min-h":(S=i.layout)==null?void 0:S.minH,"gs-max-w":(w=i.layout)==null?void 0:w.maxW,"gs-max-h":(M=i.layout)==null?void 0:M.maxH,role:"button",tabIndex:0,title:`Drag onto the board, or click to add ${i.name.replace(/-/g," ")}`,onClick:()=>bt(i.name),onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),bt(i.name))},children:[i.iconUrl&&e.jsx("img",{className:"zf-newwidget-icon",src:i.iconUrl,alt:"",loading:"lazy",draggable:!1}),e.jsxs("div",{className:"zf-newwidget-copy",children:[e.jsx("div",{className:"zf-newwidget-name",children:i.name.replace(/-/g," ")}),e.jsx("div",{className:"zf-newwidget-desc",children:i.description})]})]},i.name)})})]})]},s.key)})})]})]})})]})]}),Oe?At.createPortal(e.jsx(Bs,{instance:Oe,registry:a,instancesRef:R,symbolUniverse:Xt,accentHue:O,onApply:s=>Z(s),onClose:()=>ae(null)},Oe.id),document.body):null]})}function Bs({instance:t,registry:a,instancesRef:n,symbolUniverse:m,accentHue:N,onApply:d,onClose:h}){const o=a.get(t.frame),f=r.useMemo(()=>o?Fs(o):null,[o]),p=r.useMemo(()=>o?Is(o):[],[o]),[u,y]=r.useState(()=>({...t.config??{}})),[z,j]=r.useState(null),k=t.id,R=r.useCallback(v=>{if(y(v),o){const se=o.schema.safeParse(v);if(!se.success){j(se.error.issues.map(ie=>`${ie.path.join(".")||"(root)"}: ${ie.message}`).join(`
68
- `));return}}j(null);const E=n.current.get(k);E&&(n.current.set(k,{...E,config:v}),d(k))},[o,k,n,d]);r.useEffect(()=>{const v=E=>{E.key==="Escape"&&h()};return document.addEventListener("keydown",v),()=>document.removeEventListener("keydown",v)},[h]);const L=(v,E)=>R({...u,[v]:E}),x=t.frame.replace(/-/g," ");return e.jsx("div",{className:"zf-dialog-backdrop",style:{"--zf-accent-hue":N},onMouseDown:v=>{v.target===v.currentTarget&&h()},children:e.jsxs("div",{className:"zf-dialog",role:"dialog","aria-modal":"true","aria-label":`Configure ${x}`,children:[e.jsxs("header",{className:"zf-dialog-head",children:[e.jsxs("h3",{className:"zf-dialog-title",children:["Configure · ",x]}),e.jsx("button",{type:"button",className:"zf-dialog-close",onClick:h,"aria-label":"Close",title:"Close",children:e.jsx(Ce,{size:16,"aria-hidden":"true"})})]}),e.jsxs("div",{className:"zf-dialog-body",children:[f&&e.jsx(qs,{control:f,config:u,loading:m.loading,options:m.options,onChangeSymbol:v=>R({...u,symbol:v}),onChangeSymbols:v=>R({...u,symbols:v}),onChangeHoldings:v=>R({...u,holdings:v})}),p.map(v=>e.jsx(_s,{field:v,value:u[v.key],onChange:E=>L(v.key,E)},v.key)),!f&&p.length===0&&e.jsx("p",{className:"zf-rail-empty",children:"This frame has no settings."}),z&&e.jsx("div",{className:"zf-config-error",children:z})]}),e.jsx("footer",{className:"zf-dialog-foot",children:e.jsx("button",{type:"button",className:"zf-btn zf-btn--primary",onClick:h,children:"Done"})})]})})}function _s({field:t,value:a,onChange:n}){const{key:m,label:N,shape:d}=t,h=`zf-cfg-${m}`,o=d.description;if(I(d,"boolean")){const p=typeof a=="boolean"?a:!!d.default;return e.jsxs("label",{className:"zf-checkbox",title:o,children:[e.jsx("input",{type:"checkbox",checked:p,onChange:u=>n(u.target.checked)}),N]})}const f=Array.isArray(d.enum)&&d.enum.every(p=>typeof p=="string")?d.enum:null;if(f&&f.length>0){const p=typeof d.default=="string"?d.default:f[0],u=typeof a=="string"&&f.includes(a)?a:p;return e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:h,title:o,children:N}),e.jsx("select",{id:h,className:"zf-select",value:u,onChange:y=>n(y.target.value),children:f.map(y=>e.jsx("option",{value:y,children:Ve(y)},y))})]})}return I(d,"integer")||I(d,"number")?e.jsx(Gs,{id:h,field:t,value:a,onChange:n}):Kt(d)?e.jsx(Us,{id:h,field:t,value:a,onChange:n}):e.jsx(Ws,{id:h,field:t,value:a,onChange:n})}function Gs({id:t,field:a,value:n,onChange:m}){const{label:N,shape:d}=a,h=d.description,o=typeof d.minimum=="number"?d.minimum:void 0,f=typeof d.maximum=="number"?d.maximum:void 0,p=I(d,"integer"),u=p?1:"any",y=typeof d.default=="number"?d.default:o??0,z=typeof n=="number"&&Number.isFinite(n)?n:void 0;if(o!==void 0&&f!==void 0){const j=z??y;return e.jsxs("div",{className:"zf-field",children:[e.jsxs("div",{className:"zf-field-row",children:[e.jsx("label",{htmlFor:t,title:h,children:N}),e.jsx("span",{className:"zf-field-num",children:j})]}),e.jsx("input",{id:t,type:"range",className:"zf-range",min:o,max:f,step:u,value:j,onChange:k=>m(p?Math.round(Number(k.target.value)):Number(k.target.value))})]})}return e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:t,title:h,children:N}),e.jsx("input",{id:t,type:"number",className:"zf-input",min:o,max:f,step:u,value:n==null?"":String(n),onChange:j=>m(j.target.value===""?"":Number(j.target.value))})]})}function Ws({id:t,field:a,value:n,onChange:m}){const{key:N,label:d,shape:h}=a,o=h.description,f=typeof n=="string"?n:"",p=typeof h.default=="string"?h.default:"",u=typeof h.default=="string"&&/^#[0-9a-f]{6}$/i.test(h.default)?h.default:null;if(N==="color"||u){const y=/^#[0-9a-f]{6}$/i.test(f)?f:u??"#8b8df9";return e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:t,title:o,children:d}),e.jsxs("div",{className:"zf-color-row",children:[e.jsx("input",{type:"color",className:"zf-color",value:y,"aria-label":`${d} swatch`,onChange:z=>m(z.target.value)}),e.jsx("input",{id:t,className:"zf-input",value:f,placeholder:p,spellCheck:!1,onChange:z=>m(z.target.value)})]})]})}return N==="text"?e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:t,title:o,children:d}),e.jsx("textarea",{id:t,className:"zf-textarea zf-textarea--prose",value:f,placeholder:p,onChange:y=>m(y.target.value)})]}):e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:t,title:o,children:d}),e.jsx("input",{id:t,className:"zf-input",value:f,placeholder:p,spellCheck:!1,onChange:y=>m(y.target.value)})]})}function Us({id:t,field:a,value:n,onChange:m}){const{label:N,shape:d}=a,h=d.description,o=Array.isArray(n)?n.filter(j=>typeof j=="string"):[],[f,p]=r.useState(""),u=typeof d.maxItems=="number"?d.maxItems:void 0,y=u!==void 0&&o.length>=u,z=j=>{const k=j.trim().toUpperCase();p(""),!(!k||o.includes(k)||y)&&m([...o,k])};return e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:t,title:h,children:N}),o.length>0&&e.jsx("div",{className:"zf-taglist",children:o.map(j=>e.jsxs("span",{className:"zf-tag",children:[j,e.jsx("button",{type:"button",className:"zf-symbol-remove","aria-label":`Remove ${j}`,onClick:()=>m(o.filter(k=>k!==j)),children:e.jsx(Ce,{size:12,"aria-hidden":"true"})})]},j))}),e.jsx("input",{id:t,className:"zf-input",value:f,disabled:y,spellCheck:!1,placeholder:y?"Maximum reached":"Type a code, Enter to add",onChange:j=>p(j.target.value),onBlur:()=>z(f),onKeyDown:j=>{j.key==="Enter"||j.key===","?(j.preventDefault(),z(f)):j.key==="Backspace"&&f===""&&o.length>0&&m(o.slice(0,-1))}})]})}function qs({control:t,config:a,loading:n,options:m,onChangeSymbol:N,onChangeSymbols:d,onChangeHoldings:h}){const o=$s(t,a);if(t.kind==="single"){const u=o[0]??"";return e.jsxs("div",{className:"zf-symbol-editor",children:[e.jsx(De,{title:"Ticker",detail:u?me(u):"None",loading:n}),u?e.jsx(Ue,{symbol:u,option:We(u,m)}):null,e.jsx(Be,{loading:n,options:m,selectedSymbols:u?[u]:[],placeholder:"Search TSLA, BTC...",onSelect:N})]})}if(t.kind==="symbols"){const u=typeof t.maxItems=="number"&&o.length>=t.maxItems;return e.jsxs("div",{className:"zf-symbol-editor",children:[e.jsx(De,{title:"Tickers",detail:Dt(o.length,t),loading:n}),e.jsx(Ks,{symbols:o,options:m,onRemove:y=>d(o.filter(z=>z!==y))}),e.jsx(Be,{disabled:u,loading:n,options:m,selectedSymbols:o,placeholder:u?"Maximum tickers added":"Add ticker",keepOpenOnSelect:!0,onSelect:y=>{o.includes(y)||u||d([...o,y])}})]})}const f=Array.isArray(a.holdings)?a.holdings.filter(qt):[],p=typeof t.maxItems=="number"&&f.length>=t.maxItems;return e.jsxs("div",{className:"zf-symbol-editor",children:[e.jsx(De,{title:"Holding tickers",detail:Dt(f.length,t),loading:n}),e.jsx("div",{className:"zf-holding-list",children:f.map((u,y)=>{const z=typeof u.symbol=="string"?u.symbol:"";return e.jsxs("div",{className:"zf-holding-row",children:[e.jsxs("div",{className:"zf-holding-main",children:[z?e.jsx(Ue,{symbol:z,option:We(z,m),compact:!0}):e.jsx("span",{className:"zf-symbol-empty",children:"No ticker"}),typeof u.amount=="number"&&e.jsxs("span",{className:"zf-holding-amount",children:["x ",u.amount]})]}),e.jsx("button",{type:"button",className:"zf-symbol-remove","aria-label":`Remove ${z||"holding"}`,onClick:()=>{h(f.filter((j,k)=>k!==y))},children:e.jsx(Ce,{size:13,"aria-hidden":"true"})})]},`${z}-${y}`)})}),e.jsx(Be,{disabled:p,loading:n,options:m,selectedSymbols:o,placeholder:p?"Maximum holdings added":"Add holding",keepOpenOnSelect:!0,onSelect:u=>{p||h([...f,{symbol:u,amount:1}])}})]})}function De({title:t,detail:a,loading:n}){return e.jsxs("div",{className:"zf-symbol-head",children:[e.jsxs("div",{children:[e.jsx("div",{className:"zf-symbol-label",children:t}),e.jsx("div",{className:"zf-symbol-detail",children:a})]}),e.jsx("span",{className:n?"zf-symbol-source is-loading":"zf-symbol-source",children:n?"Loading":"Live list"})]})}function Dt(t,a){return typeof a.maxItems=="number"?`${t}/${a.maxItems}`:typeof a.minItems=="number"&&t<a.minItems?`${t}/${a.minItems}+`:String(t)}function We(t,a){return a.find(n=>n.symbol===t)??_e(t)}function Ks({symbols:t,options:a,onRemove:n}){return t.length===0?e.jsx("div",{className:"zf-symbol-empty",children:"No tickers selected"}):e.jsx("div",{className:"zf-symbol-chips",children:t.map(m=>e.jsxs("span",{className:"zf-symbol-chip",children:[e.jsx(Ue,{symbol:m,option:We(m,a),compact:!0}),e.jsx("button",{type:"button",className:"zf-symbol-remove","aria-label":`Remove ${m}`,onClick:()=>n(m),children:e.jsx(Ce,{size:13,"aria-hidden":"true"})})]},m))})}function Ue({symbol:t,option:a,compact:n=!1}){return e.jsxs("span",{className:n?"zf-selected-symbol is-compact":"zf-selected-symbol",children:[e.jsx(Vt,{symbol:t}),e.jsxs("span",{className:"zf-selected-symbol-text",children:[e.jsx("strong",{children:me(t)}),!n&&e.jsx("em",{children:t})]}),!n&&a.markPx!==void 0&&e.jsx("span",{className:"zf-selected-symbol-price",children:Ut(a.markPx)})]})}function Be({disabled:t=!1,loading:a,options:n,selectedSymbols:m,placeholder:N,keepOpenOnSelect:d=!1,onSelect:h}){const[o,f]=r.useState(""),[p,u]=r.useState(!1),y=r.useMemo(()=>new Set(m),[m]),z=r.useMemo(()=>new Set(n.map(x=>x.symbol)),[n]),j=Es(o),k=r.useMemo(()=>{const x=o.trim().toLowerCase();return(x?n.filter(E=>E.ticker.toLowerCase().includes(x)||E.symbol.toLowerCase().includes(x)):n.slice(0,28)).slice().sort((E,se)=>Bt(E,x)-Bt(se,x)).slice(0,36)},[n,o]),R=r.useMemo(()=>{if(!j)return[];const x=j.includes(":")?[j]:[`xyz:${j}`,j];return x.filter((v,E)=>x.indexOf(v)===E&&!z.has(v)&&!y.has(v))},[z,j,y]),L=x=>{!x||d&&y.has(x)||(h(x),f(""),u(d))};return e.jsxs("div",{className:"zf-symbol-combo",onBlur:x=>{x.currentTarget.contains(x.relatedTarget)||u(!1)},children:[e.jsxs("div",{className:t?"zf-symbol-search is-disabled":"zf-symbol-search",children:[e.jsx(ws,{size:14,"aria-hidden":"true"}),e.jsx("input",{value:o,disabled:t,placeholder:N,"aria-label":N,role:"combobox","aria-expanded":p,onFocus:()=>u(!0),onChange:x=>{f(x.target.value),u(!0)},onKeyDown:x=>{var v;x.key==="Enter"&&(x.preventDefault(),L(((v=k[0])==null?void 0:v.symbol)??R[0]??j))}}),e.jsx(js,{size:14,"aria-hidden":"true"})]}),p&&!t&&e.jsxs("div",{className:"zf-symbol-menu",role:"listbox",children:[a&&e.jsx("div",{className:"zf-symbol-menu-status",children:"Loading live universe..."}),k.map(x=>{const v=y.has(x.symbol);return e.jsxs("button",{type:"button",className:v?"zf-symbol-option is-selected":"zf-symbol-option",disabled:d&&v,role:"option","aria-selected":v,onMouseDown:E=>{E.preventDefault(),L(x.symbol)},onClick:E=>{E.detail===0&&L(x.symbol)},children:[e.jsx(Vt,{symbol:x.symbol}),e.jsxs("span",{className:"zf-symbol-option-main",children:[e.jsx("strong",{children:x.ticker}),e.jsx("em",{children:x.symbol})]}),e.jsxs("span",{className:"zf-symbol-option-meta",children:[e.jsx("span",{children:Ut(x.markPx)||x.kind}),x.changePct!==void 0&&e.jsx("span",{className:x.changePct>=0?"zf-symbol-change is-up":"zf-symbol-change is-down",children:Ls(x.changePct)})]}),v&&e.jsx(xs,{size:14,"aria-hidden":"true"})]},x.symbol)}),R.map(x=>e.jsxs("button",{type:"button",className:"zf-symbol-option zf-symbol-option--custom",onMouseDown:v=>{v.preventDefault(),L(x)},onClick:v=>{v.detail===0&&L(x)},children:[e.jsx("span",{className:"zf-symbol-custom-icon",children:e.jsx(vs,{size:13,"aria-hidden":"true"})}),e.jsxs("span",{className:"zf-symbol-option-main",children:[e.jsx("strong",{children:me(x)}),e.jsx("em",{children:x})]}),e.jsx("span",{className:"zf-symbol-option-meta",children:e.jsx("span",{children:Ke(x)})})]},x)),!a&&k.length===0&&R.length===0&&e.jsx("div",{className:"zf-symbol-menu-status",children:"No matches"})]})]})}function Bt(t,a){if(!a)return t.rank;const n=t.ticker.toLowerCase(),m=t.symbol.toLowerCase();return n===a||m===a?-40+t.rank/1e4:n.startsWith(a)?-20+t.rank/1e4:m.startsWith(a)?-10+t.rank/1e4:t.rank}function Vt({symbol:t}){const a=Ke(t).toLowerCase(),[n,m]=r.useState(!1);return r.useEffect(()=>m(!1),[t]),n?e.jsx("span",{className:`zf-symbol-avatar zf-symbol-avatar--${a}`,children:me(t).slice(0,2)}):e.jsx("img",{className:`zf-symbol-avatar zf-symbol-avatar--logo zf-symbol-avatar--${a}`,src:Ms(t),alt:"","aria-hidden":"true",draggable:!1,loading:"lazy",onError:()=>m(!0)})}export{ea as DashboardEditor};
@@ -1 +0,0 @@
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;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) );background:var( --zf-frame-bg-hover, linear-gradient( 165deg, rgba(34, 35, 50, .88) 0%, rgba(18, 19, 28, .9) 60%, rgba(12, 13, 20, .92) 100% ) );box-shadow:var( --zf-frame-shadow-hover, inset 0 1px 0 rgba(255, 255, 255, .09), 0 1px 2px rgba(0, 0, 0, .4), 0 26px 56px -26px rgba(0, 0, 0, .92), 0 0 0 1px hsl(var(--zf-accent-hue, 242) 90% 76% / .12), 0 20px 60px -28px hsl(var(--zf-accent-hue, 242) 90% 76% / .4) )}}.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 .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-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-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}}