1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4620],{13135:(e,t,r)=>{r.d(t,{Tz:()=>o,bP:()=>n,ef:()=>l,sM:()=>a});let n=[{id:"theme",label:"Theme",blurb:"Full-app palette. Pick a preset and optionally override individual tokens.",fields:[{path:"theme.preset",label:"Preset",hint:"Curated palettes â overrides apply on top.",control:{kind:"select",options:[...r(91750).hp.map(e=>({value:e.id,label:e.label,hint:e.hint})),{value:"custom",label:"Custom",hint:"no preset â overrides only"}]}},{group:"Surfaces",path:"theme.overrides.paper",label:"Paper",hint:"Primary surface.",control:{kind:"color"}},{group:"Surfaces",path:"theme.overrides.paper2",label:"Paper \xb7 2",hint:"Secondary surface (panels).",control:{kind:"color"}},{group:"Surfaces",path:"theme.overrides.paper3",label:"Paper \xb7 3",hint:"Tertiary surface.",control:{kind:"color"}},{group:"Surfaces",path:"theme.overrides.paperDeep",label:"Paper \xb7 deep",hint:"Darkest paper variant.",control:{kind:"color"}},{group:"Ink",path:"theme.overrides.ink",label:"Ink",hint:"Primary text + rule colour.",control:{kind:"color"}},{group:"Ink",path:"theme.overrides.ink2",label:"Ink \xb7 2",hint:"Secondary text.",control:{kind:"color"}},{group:"Ink",path:"theme.overrides.ink3",label:"Ink \xb7 3",hint:"Tertiary text / labels.",control:{kind:"color"}},{group:"Ink",path:"theme.overrides.ink4",label:"Ink \xb7 4",hint:"Disabled / faintest.",control:{kind:"color"}},{group:"Ink",path:"theme.overrides.inkHi",label:"Ink \xb7 high",hint:"Maximum contrast.",control:{kind:"color"}},{group:"Accent",path:"theme.overrides.accent",label:"Accent",hint:"Primary accent.",control:{kind:"color"}},{group:"Accent",path:"theme.overrides.accentDeep",label:"Accent \xb7 deep",hint:"Hover / pressed accent.",control:{kind:"color"}},{group:"Accent",path:"theme.overrides.accentWash",label:"Accent \xb7 wash",hint:"10% accent overlay.",control:{kind:"color"}},{group:"Rules",path:"theme.overrides.rule",label:"Rule",hint:"Hairline / divider colour.",control:{kind:"color"}},{group:"Rules",path:"theme.overrides.ruleSoft",label:"Rule \xb7 soft",hint:"Lighter divider tint.",control:{kind:"color"}},{group:"Rules",path:"theme.overrides.ruleHair",label:"Rule \xb7 hair",hint:"Faintest divider tint.",control:{kind:"color"}},{group:"Semantic",path:"theme.overrides.up",label:"Up",hint:"Bullish / positive.",control:{kind:"color"}},{group:"Semantic",path:"theme.overrides.upWash",label:"Up \xb7 wash",hint:"Up wash overlay.",control:{kind:"color"}},{group:"Semantic",path:"theme.overrides.down",label:"Down",hint:"Bearish / negative.",control:{kind:"color"}},{group:"Semantic",path:"theme.overrides.downWash",label:"Down \xb7 wash",hint:"Down wash overlay.",control:{kind:"color"}},{group:"Semantic",path:"theme.overrides.warn",label:"Warn",hint:"Cautionary state.",control:{kind:"color"}},{group:"Semantic",path:"theme.overrides.info",label:"Info",hint:"Informational state.",control:{kind:"color"}}]},{id:"appearance",label:"Appearance",blurb:"Quick palette knobs and density.",fields:[{path:"appearance.accentHue",label:"Accent hue",hint:"Rotate the active accent across the colour wheel.",control:{kind:"range",min:0,max:360,step:1,suffix:"\xb0"}},{path:"appearance.density",label:"Density",hint:"Component padding scale.",control:{kind:"select",options:[{value:"comfy",label:"Comfy",hint:"roomier touch targets"},{value:"compact",label:"Compact",hint:"denser for power users"}]}},{path:"appearance.fontFamily",label:"Font family",hint:"Global typography preset.",control:{kind:"select",options:[{value:"kepler",label:"Kepler",hint:"Inter Tight + JetBrains Mono + Fraunces (default)"},{value:"system",label:"System",hint:"native OS fonts"},{value:"mono",label:"Mono",hint:"JetBrains Mono everywhere"}]}},{path:"appearance.fontScale",label:"Font size",hint:"Global zoom multiplier â scales every window proportionally.",control:{kind:"range",min:.85,max:1.3,step:.05,suffix:"\xd7"}},{path:"appearance.showGrid",label:"Workspace grid",hint:"Show the snap grid behind windows.",control:{kind:"toggle"}}]},{id:"chrome",label:"Chrome",blurb:"Dashboard shell â top bar, bottom bar, command surface.",fields:[{path:"chrome.layout",label:"Layout",hint:"Where the chrome lives.",control:{kind:"select",options:[{value:"a",label:"Single top bar",hint:"everything inline (default)"},{value:"b",label:"Top + bottom strip",hint:"workspace pills at the bottom"},{value:"c",label:"Bloomberg style",hint:"fat command bar at the bottom"}]}}]},{id:"workspace",label:"Workspace",blurb:"Window auto-save + grid snapping.",fields:[{path:"workspace.autoSave",label:"Auto-save layout",hint:"Persist window positions to IDB.",control:{kind:"toggle"}},{path:"workspace.saveIntervalMs",label:"Save interval",hint:"Debounce for layout writes.",control:{kind:"number",min:100,max:3e4,step:100,suffix:"ms"}}
1,{path:"workspace.snapToGrid",label:"Snap to grid",control:{kind:"toggle"}},{path:"workspace.gridSize",label:"Grid size",control:{kind:"number",min:4,max:128,step:1,suffix:"px"}}]},{id:"terminal",label:"Terminal",blurb:"Top-bar status display.",fields:[{path:"terminal.fontSize",label:"Font size",control:{kind:"number",min:9,max:24,step:1,suffix:"px"}},{path:"terminal.showLatency",label:"Show latency",control:{kind:"toggle"}},{path:"terminal.showClock",label:"Show clock",control:{kind:"toggle"}},{path:"terminal.hour24",label:"24-hour clock",control:{kind:"toggle"}},{path:"terminal.showMarketHours",label:"Show market hours",control:{kind:"toggle"}}]},{id:"market",label:"Market data",blurb:"Default exchange / symbol / timeframe for new chart windows.",fields:[{path:"market.defaultExchange",label:"Default exchange",control:{kind:"text",placeholder:"BINANCE"}},{path:"market.defaultSymbol",label:"Default symbol",control:{kind:"text",placeholder:"BTCUSDT"}},{path:"market.defaultTimeframe",label:"Default timeframe",control:{kind:"select",options:["1m","5m","15m","1h","4h","1D","1W"].map(e=>({value:e,label:e}))}},{path:"market.refreshIntervalMs",label:"Refresh interval",control:{kind:"number",min:100,max:6e4,step:100,suffix:"ms"}}]},{id:"data",label:"Data providers",blurb:"Upstream sources for live quotes. Crypto always routes to Binance.",fields:[{path:"data.equityProvider",label:"Equity provider",hint:"Source for Portfolio + Quotes equity prices.",control:{kind:"select",options:[{value:"finnhub",label:"Finnhub"},{value:"yahoo",label:"Yahoo Finance"}]}}]},{id:"assistant",label:"AI Assistant",blurb:"Local LLM for the Assistant window. Runs on your machine via LM Studio â nothing leaves your computer.",fields:[{path:"assistant.baseUrl",label:"LM Studio URL",hint:"The OpenAI-compatible server LM Studio starts (Developer tab).",control:{kind:"text",placeholder:"http://localhost:1234"}},{path:"assistant.model",label:"Model",hint:"Model id as listed by the server. Empty = first available.",control:{kind:"text",placeholder:"qwen/qwen3.6-27b"}}]},{id:"privacy",label:"Privacy",blurb:"Usage analytics are on by default: a random cookie id with your IP address, country and browser, pages visited, windows opened, and pointer/click recordings, stored by Finterm; plus Google Analytics and Cloudflare Web Analytics page views. Never key values or typed text. Turning it off stops all of these by the next page load. Crash reports help us catch regressions.",fields:[{path:"privacy.telemetry",label:"Share anonymous usage analytics",hint:"On by default. Off stops Finterm analytics, session recordings, Google and Cloudflare analytics in this browser.",control:{kind:"toggle"}},{path:"privacy.crashReports",label:"Crash reports",control:{kind:"toggle"}}]}];function a(e,t){let r=t.split("."),n=e;for(let e of r)if(!n||"object"!=typeof n||!(e in n))return;else n=n[e];if(null!=n&&("string"==typeof n||"number"==typeof n||"boolean"==typeof n))return n}function l(e,t,r){let n=t.split("."),a={...e},l=a;for(let e=0;e<n.length-1;e++){let t=n[e],r=l[t];l[t]={...null!=r?r:{}},l=l[t]}let o=n[n.length-1];return void 0===r||""===r?delete l[o]:l[o]=r,a}function o(){return n.flatMap(e=>e.fields.map(t=>({section:e,field:t})))}},94620:(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r(95155),a=r(12115),l=r(67921),o=r(13135),i=r(50437);function s(e){var t;let{focusPath:r}=e,[s,d]=(0,a.useState)(l.DEFAULT_SETTINGS),[h,f]=(0,a.useState)(!1),[m,v]=(0,a.useState)(""),[b,g]=(0,a.useState)(o.bP[0].id),[y,x]=(0,a.useState)(null),k=(0,a.useRef)(!1);(0,a.useEffect)(()=>{let e=!1;return(async()=>{let t=await (0,l.getSettings)();e||(d(t),f(!0))})(),()=>{e=!0}},[]),(0,a.useEffect)(()=>{if(!h||!k.current)return;let e=setTimeout(async()=>{try{await (0,l.setSettings)(s),x(Date.now()),k.current=!1,(0,i.rt)().catch(()=>{})}catch(e){console.error("SettingsPanel save failed:",e)}},1e3);return()=>clearTimeout(e)},[s,h]);let w=m.trim().toLowerCase(),S=(e,t)=>{var r;return!w||[e.label,e.path,null!=(r=e.hint)?r:"",t].some(e=>e.toLowerCase().includes(w))},j=(0,a.useMemo)(()=>o.bP.map(e=>({section:e,hits:e.fields.filter(t=>S(t,e.label)).length})),[w]);(0,a.useEffect)(()=>
1{if(!w)return;let e=j.find(e=>e.hits>0);e&&e.section.id!==b&&g(e.section.id)},[w]);let C=(0,a.useRef)({});(0,a.useEffect)(()=>{if(!h||!r)return;let e=o.bP.find(e=>e.fields.some(e=>e.path===r));e&&g(e.id);let t=setTimeout(()=>{let e=C.current[r];e&&(e.scrollIntoView({behavior:"smooth",block:"center"}),e.style.transition="background 200ms ease",e.style.background="var(--accent-wash)",setTimeout(()=>{e.style.background="transparent"},1500))},80);return()=>clearTimeout(t)},[h,r]);let T=null!=(t=o.bP.find(e=>e.id===b))?t:o.bP[0];return(0,n.jsxs)("div",{style:{height:"100%",width:"100%",display:"flex",flexDirection:"column",background:"var(--paper)",color:"var(--ink)",fontFamily:"var(--font-sans)",minHeight:0},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,padding:"10px 14px",borderBottom:"1px solid var(--rule-soft)",flexShrink:0},children:[(0,n.jsxs)("span",{style:{fontFamily:"var(--font-display)",fontSize:16,letterSpacing:"-0.02em",color:"var(--ink)"},children:["Settings",(0,n.jsx)("span",{style:{color:"var(--accent)"},children:"."})]}),(0,n.jsx)("input",{type:"text",placeholder:"Search settingsâ¦",value:m,onChange:e=>v(e.target.value),style:{flex:1,background:"var(--paper-2)",border:"1px solid var(--rule-soft)",color:"var(--ink)",fontFamily:"var(--font-mono)",fontSize:11,padding:"5px 10px",outline:"none",caretColor:"var(--accent)",height:24},onFocus:e=>e.currentTarget.style.borderColor="var(--accent)",onBlur:e=>e.currentTarget.style.borderColor="var(--rule-soft)"}),(0,n.jsx)(u,{savedAt:y,dirty:k.current})]}),(0,n.jsxs)("div",{style:{flex:1,display:"flex",minHeight:0},children:[(0,n.jsx)(c,{sectionStats:j,activeId:b,onPick:g,searching:!!w}),(0,n.jsx)(p,{section:T,draft:s,update:(e,t)=>{k.current=!0,d(r=>(0,o.ef)(r,e,t))},refs:C,fieldFilter:e=>S(e,T.label)})]})]})}function c(e){let{sectionStats:t,activeId:r,onPick:a,searching:l}=e;return(0,n.jsx)("nav",{style:{width:180,flexShrink:0,background:"var(--paper-2)",borderRight:"1px solid var(--rule-soft)",overflow:"auto",padding:"8px 0"},children:t.map(e=>{let{section:t,hits:o}=e,i=t.id===r,s=l&&0===o;return(0,n.jsxs)("button",{onClick:()=>a(t.id),disabled:s,style:{width:"100%",textAlign:"left",background:i?"var(--accent-wash)":"transparent",border:"none",borderLeft:"2px solid ".concat(i?"var(--accent)":"transparent"),padding:"8px 14px",cursor:s?"default":"pointer",opacity:s?.35:1,color:i?"var(--accent)":"var(--ink-2)",fontFamily:"var(--font-mono)",fontSize:11,letterSpacing:"0.06em",display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:8,transition:"background 120ms linear, color 120ms linear"},children:[(0,n.jsx)("span",{children:t.label}),l&&(0,n.jsx)("span",{style:{fontSize:9,letterSpacing:"0.18em",color:o?"var(--accent)":"var(--ink-4)"},children:o})]},t.id)})})}function p(e){let{section:t,draft:r,update:l,refs:i,fieldFilter:s}=e,c=t.fields.filter(s);return(0,n.jsxs)("div",{style:{flex:1,overflow:"auto",padding:"14px 18px",minWidth:0},children:[(0,n.jsxs)("div",{style:{marginBottom:12},children:[(0,n.jsx)("div",{style:{fontFamily:"var(--font-mono)",fontSize:9,letterSpacing:"0.22em",color:"var(--accent)",textTransform:"uppercase"},children:t.id}),(0,n.jsx)("div",{style:{fontFamily:"var(--font-display)",fontSize:22,color:"var(--ink)",letterSpacing:"-0.01em",marginTop:2},children:t.label}),(0,n.jsx)("div",{style:{fontSize:12,color:"var(--ink-3)",marginTop:2},children:t.blurb})]}),0===c.length?(0,n.jsx)(m,{}):(0,n.jsx)("div",{style:{border:"1px solid var(--rule-soft)"},children:c.map((e,t)=>{let s=t>0?c[t-1]:null,p=!!e.group&&(!s||s.group!==e.group);return(0,n.jsxs)(a.Fragment,{children:[p&&(0,n.jsx)(d,{label:e.group}),(0,n.jsx)(h,{field:e,value:(0,o.sM)(r,e.path),onChange:t=>l(e.path,t),innerRef:t=>{i.current[e.path]=t}})]},e.path)})})]})}function d(e){let{label:t}=e;return(0,n.jsx)("div",{style:{background:"var(--paper-2)",borderTop:"1px solid var(--rule-soft)",padding:"6px 12px",fontFamily:"var(--font-mono)",fontSize:9,letterSpacing:"0.22em",textTransform:"uppercase",color:"var(--ink-3)"},children:t})}function h(e){let{field:t,value:r,onChange:a,innerRef:l}=e;return(0,n.jsxs)("div",{ref:l,style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) minmax(220px, 280px)",gap:14,padding:"8px 12px",borderTop:"1px solid var(--rule-hair)",alignItems:"center",background:"var(--paper)"},children:[(0,n.jsxs)("div",{style:{minWidth:0},children:[(0,n.jsx)("div",{style:{fontFamily:"var(--font-sans)",fontSize:12,color:"var(--ink)",lineHeight:1.3},children:t.label}),t.hint&&(0,n.jsx)("div",{style:{fontFamily:"var(--font-sans)",fontSize:11,color:"var(--ink-3)",marginTop:1,lineHeight:1.3},children:t.hint}),(0,n.jsx)("div",{style:{fontFamily:"var(--font-mono)",fontSize:9,color:"var(--ink-4)",letterSpacing:"0.08em",marginTop:2,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t.path})]}),(0,n.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",minWidth:0},children:(0,n.jsx)(v,{field:t,value:r,onChange:a})})]})}function u(e){let{savedAt:t,dirty:r}=e;if(r)return(0,n.jsx)(f,{color:"var(--warn)",children:"savingâ¦"});if(!t)return(0,n.jsx)(f,{color:"var(--ink-3)",children:"idle"});let a=Math.max(0,Math.floor((Date.now()-t)/1e3));return(0,n.jsxs)(f,{color:"var(--up)",children:["saved ",a<5?"just now":"".concat(a,"s ago")]})}
1function f(e){let{color:t,children:r}=e;return(0,n.jsx)("span",{style:{fontFamily:"var(--font-mono)",fontSize:9,letterSpacing:"0.16em",textTransform:"uppercase",color:t,border:"1px solid ".concat(t),padding:"2px 6px"},children:r})}function m(){return(0,n.jsx)("div",{style:{padding:"20px 12px",fontFamily:"var(--font-mono)",fontSize:11,color:"var(--ink-3)",letterSpacing:"0.14em",textTransform:"uppercase"},children:"No matching fields in this section."})}function v(e){let{field:t,value:r,onChange:a}=e,l=t.control;if("toggle"===l.kind){let e=!!r;return(0,n.jsx)("button",{onClick:()=>a(!e),style:{width:38,height:20,background:e?"var(--accent)":"var(--paper)",border:"1px solid ".concat(e?"var(--accent)":"var(--rule-soft)"),position:"relative",cursor:"pointer",transition:"background 120ms linear, border-color 120ms linear"},"aria-pressed":e,title:e?"on":"off",children:(0,n.jsx)("span",{style:{position:"absolute",top:2,left:e?20:2,width:14,height:14,background:e?"var(--paper)":"var(--ink-3)",transition:"left 120ms linear, background 120ms linear"}})})}if("number"===l.kind)return(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,width:"100%"},children:[(0,n.jsx)("input",{type:"number",value:"number"==typeof r?r:"",min:l.min,max:l.max,step:l.step,onChange:e=>a(""===e.target.value?void 0:Number(e.target.value)),style:b}),l.suffix&&(0,n.jsx)("span",{style:g,children:l.suffix})]});if("range"===l.kind){var o,i;let e="number"==typeof r?r:l.min;return(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,width:"100%"},children:[(0,n.jsx)("input",{type:"range",min:l.min,max:l.max,step:null!=(o=l.step)?o:1,value:e,onChange:e=>a(Number(e.target.value)),style:{flex:1,accentColor:"var(--accent)"}}),(0,n.jsxs)("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--ink-2)",minWidth:48,textAlign:"right"},children:[e,null!=(i=l.suffix)?i:""]})]})}if("select"===l.kind){let e="string"==typeof r?r:"";return(0,n.jsx)("select",{value:e,onChange:e=>a(e.target.value),style:{...b,paddingRight:22},children:l.options.map(e=>(0,n.jsxs)("option",{value:e.value,children:[e.label,e.hint?" â ".concat(e.hint):""]},e.value))})}if("color"===l.kind){let e="string"==typeof r?r:"",t=/^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(e);return(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,width:"100%"},children:[(0,n.jsx)("input",{type:"text",value:e,placeholder:"(preset default)",onChange:e=>a(e.target.value||void 0),style:{...b,fontFamily:"var(--font-mono)"}}),t&&(0,n.jsx)("input",{type:"color",value:9===e.length?e.slice(0,7):e,onChange:e=>a(e.target.value),style:{width:22,height:22,padding:0,border:"1px solid var(--rule-soft)",background:"transparent",flexShrink:0}})]})}return(0,n.jsx)("input",{type:"text",value:"string"==typeof r?r:"",placeholder:l.placeholder,onChange:e=>a(e.target.value),style:b})}let b={background:"var(--paper)",border:"1px solid var(--rule-soft)",color:"var(--ink)",fontFamily:"var(--font-mono)",fontSize:11,padding:"4px 8px",outline:"none",caretColor:"var(--accent)",width:"100%",height:26},g={fontFamily:"var(--font-mono)",fontSize:9,letterSpacing:"0.18em",color:"var(--ink-3)",textTransform:"uppercase",flexShrink:0}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.