[{"data":1,"prerenderedAt":604},["ShallowReactive",2],{"docs-navigation":3,"\u002Fdocs\u002Fdevelopment\u002Fsidebar-design":231,"\u002Fdocs\u002Fdevelopment\u002Fsidebar-design-surround":599},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,69,90,123,144,165,190],{"title":10,"path":6,"stem":11},"Gerbtrace Documentation","docs\u002Findex",{"title":13,"path":14,"stem":15},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",{"title":17,"path":18,"stem":19},"Licensing","\u002Fdocs\u002Flicensing","docs\u002F2.licensing",{"title":21,"path":22,"stem":23,"children":24,"page":68},"Viewer","\u002Fdocs\u002Fviewer","docs\u002F3.viewer",[25,29,33,37,41,45,49,53,56,60,64],{"title":26,"path":27,"stem":28},"Files","\u002Fdocs\u002Fviewer\u002Ffiles","docs\u002F3.viewer\u002F01.files",{"title":30,"path":31,"stem":32},"PCB","\u002Fdocs\u002Fviewer\u002Fpcb","docs\u002F3.viewer\u002F02.pcb",{"title":34,"path":35,"stem":36},"Panel","\u002Fdocs\u002Fviewer\u002Fpanel","docs\u002F3.viewer\u002F03.panel",{"title":38,"path":39,"stem":40},"Paste","\u002Fdocs\u002Fviewer\u002Fpaste","docs\u002F3.viewer\u002F04.paste",{"title":42,"path":43,"stem":44},"SMD","\u002Fdocs\u002Fviewer\u002Fsmd","docs\u002F3.viewer\u002F05.smd",{"title":46,"path":47,"stem":48},"THT","\u002Fdocs\u002Fviewer\u002Ftht","docs\u002F3.viewer\u002F06.tht",{"title":50,"path":51,"stem":52},"BOM","\u002Fdocs\u002Fviewer\u002Fbom","docs\u002F3.viewer\u002F07.bom",{"title":5,"path":54,"stem":55},"\u002Fdocs\u002Fviewer\u002Fdocs","docs\u002F3.viewer\u002F08.docs",{"title":57,"path":58,"stem":59},"Conversation","\u002Fdocs\u002Fviewer\u002Fconversation","docs\u002F3.viewer\u002F09.conversation",{"title":61,"path":62,"stem":63},"Summary","\u002Fdocs\u002Fviewer\u002Fsummary","docs\u002F3.viewer\u002F10.summary",{"title":65,"path":66,"stem":67},"Pricing","\u002Fdocs\u002Fviewer\u002Fpricing","docs\u002F3.viewer\u002F11.pricing",false,{"title":70,"path":71,"stem":72,"children":73,"page":68},"Tools","\u002Fdocs\u002Ftools","docs\u002F4.tools",[74,78,82,86],{"title":75,"path":76,"stem":77},"Exports","\u002Fdocs\u002Ftools\u002Fexports","docs\u002F4.tools\u002F1.exports",{"title":79,"path":80,"stem":81},"Compare","\u002Fdocs\u002Ftools\u002Fcompare","docs\u002F4.tools\u002F2.compare",{"title":83,"path":84,"stem":85},"Package Manager","\u002Fdocs\u002Ftools\u002Fpackage-manager","docs\u002F4.tools\u002F3.package-manager",{"title":87,"path":88,"stem":89},"Draw Tool","\u002Fdocs\u002Ftools\u002Fdraw-tool","docs\u002F4.tools\u002F4.draw-tool",{"title":91,"path":92,"stem":93,"children":94,"page":68},"Collaboration","\u002Fdocs\u002Fcollaboration","docs\u002F5.collaboration",[95,99,103,107,111,115,119],{"title":96,"path":97,"stem":98},"Team Settings","\u002Fdocs\u002Fcollaboration\u002Fteam-settings","docs\u002F5.collaboration\u002F1.team-settings",{"title":100,"path":101,"stem":102},"Team Members","\u002Fdocs\u002Fcollaboration\u002Fteam-members","docs\u002F5.collaboration\u002F2.team-members",{"title":104,"path":105,"stem":106},"User Profile","\u002Fdocs\u002Fcollaboration\u002Fuser-profile","docs\u002F5.collaboration\u002F3.user-profile",{"title":108,"path":109,"stem":110},"Spaces","\u002Fdocs\u002Fcollaboration\u002Fspaces","docs\u002F5.collaboration\u002F4.spaces",{"title":112,"path":113,"stem":114},"Notifications","\u002Fdocs\u002Fcollaboration\u002Fnotifications","docs\u002F5.collaboration\u002F6.notifications",{"title":116,"path":117,"stem":118},"Plans & Billing","\u002Fdocs\u002Fcollaboration\u002Fplans-and-billing","docs\u002F5.collaboration\u002F7.plans-and-billing",{"title":120,"path":121,"stem":122},"Connected Apps & MCP","\u002Fdocs\u002Fcollaboration\u002Fconnected-apps","docs\u002F5.collaboration\u002F8.connected-apps",{"title":124,"path":125,"stem":126,"children":127,"page":68},"App","\u002Fdocs\u002Fapp","docs\u002F6.app",[128,132,136,140],{"title":129,"path":130,"stem":131},"Desktop App","\u002Fdocs\u002Fapp\u002Fdesktop","docs\u002F6.app\u002F1.desktop",{"title":133,"path":134,"stem":135},"Light & Dark Mode","\u002Fdocs\u002Fapp\u002Flight-dark-mode","docs\u002F6.app\u002F2.light-dark-mode",{"title":137,"path":138,"stem":139},"Performance Monitor","\u002Fdocs\u002Fapp\u002Fperformance-monitor","docs\u002F6.app\u002F3.performance-monitor",{"title":141,"path":142,"stem":143},"Report a Bug","\u002Fdocs\u002Fapp\u002Freport-a-bug","docs\u002F6.app\u002F4.report-a-bug",{"title":145,"path":146,"stem":147,"children":148,"page":68},"Guides","\u002Fdocs\u002Fguides","docs\u002F7.guides",[149,153,157,161],{"title":150,"path":151,"stem":152},"Importing Files","\u002Fdocs\u002Fguides\u002Fimporting-files","docs\u002F7.guides\u002F1.importing-files",{"title":154,"path":155,"stem":156},"Supported Formats","\u002Fdocs\u002Fguides\u002Fsupported-formats","docs\u002F7.guides\u002F2.supported-formats",{"title":158,"path":159,"stem":160},"Package Library","\u002Fdocs\u002Fguides\u002Fpackage-library","docs\u002F7.guides\u002F3.package-library",{"title":162,"path":163,"stem":164},"Panel Checks","\u002Fdocs\u002Fguides\u002Fpanel-checks","docs\u002F7.guides\u002F4.panel-checks",{"title":166,"path":167,"stem":168,"children":169,"page":68},"Reference","\u002Fdocs\u002Freference","docs\u002F8.reference",[170,174,178,182,186],{"title":171,"path":172,"stem":173},"BOM File Format","\u002Fdocs\u002Freference\u002Fbom-format","docs\u002F8.reference\u002F1.bom-format",{"title":175,"path":176,"stem":177},"Package Definitions","\u002Fdocs\u002Freference\u002Fpackage-definitions","docs\u002F8.reference\u002F2.package-definitions",{"title":179,"path":180,"stem":181},"Package Naming","\u002Fdocs\u002Freference\u002Fpackage-naming","docs\u002F8.reference\u002F3.package-naming",{"title":183,"path":184,"stem":185},"TPSys Format","\u002Fdocs\u002Freference\u002Ftpsys-format","docs\u002F8.reference\u002F4.tpsys-format",{"title":187,"path":188,"stem":189},"Jet Printing","\u002Fdocs\u002Freference\u002Fjet-printing","docs\u002F8.reference\u002F5.jet-printing",{"title":191,"path":192,"stem":193,"children":194,"page":68},"Development","\u002Fdocs\u002Fdevelopment","docs\u002F9.development",[195,199,203,207,211,215,219,223,227],{"title":196,"path":197,"stem":198},"Development Setup","\u002Fdocs\u002Fdevelopment\u002Fsetup","docs\u002F9.development\u002F1.setup",{"title":200,"path":201,"stem":202},"Architecture","\u002Fdocs\u002Fdevelopment\u002Farchitecture","docs\u002F9.development\u002F2.architecture",{"title":204,"path":205,"stem":206},"CAD Libraries","\u002Fdocs\u002Fdevelopment\u002Fcad-libraries","docs\u002F9.development\u002F3.cad-libraries",{"title":208,"path":209,"stem":210},"Release Process","\u002Fdocs\u002Fdevelopment\u002Frelease-process","docs\u002F9.development\u002F4.release-process",{"title":212,"path":213,"stem":214},"Error Monitoring","\u002Fdocs\u002Fdevelopment\u002Ferror-monitoring","docs\u002F9.development\u002F5.error-monitoring",{"title":216,"path":217,"stem":218},"Contributing","\u002Fdocs\u002Fdevelopment\u002Fcontributing","docs\u002F9.development\u002F6.contributing",{"title":220,"path":221,"stem":222},"Commit Conventions","\u002Fdocs\u002Fdevelopment\u002Fcommit-conventions","docs\u002F9.development\u002F7.commit-conventions",{"title":224,"path":225,"stem":226},"Sidebar Design","\u002Fdocs\u002Fdevelopment\u002Fsidebar-design","docs\u002F9.development\u002F8.sidebar-design",{"title":228,"path":229,"stem":230},"Operational Runbooks","\u002Fdocs\u002Fdevelopment\u002Frunbooks","docs\u002F9.development\u002F9.runbooks",{"id":232,"title":224,"body":233,"description":592,"extension":593,"links":594,"meta":595,"navigation":596,"path":225,"seo":597,"stem":226,"__hash__":598},"docs\u002Fdocs\u002F9.development\u002F8.sidebar-design.md",{"type":234,"value":235,"toc":577},"minimark",[236,241,245,250,269,273,276,315,319,322,360,363,367,407,411,431,435,467,471,496,499,503,506,520,523,527,530,556,560],[237,238,240],"h1",{"id":239},"sidebar-design-system","Sidebar Design System",[242,243,244],"p",{},"This document defines the sidebar UX pattern used in the panel editor so it can be reused across other screens.",[246,247,249],"h2",{"id":248},"goals","Goals",[251,252,253,257,260,263,266],"ul",{},[254,255,256],"li",{},"Fit all important controls in a compact panel without long scrolling.",[254,258,259],{},"Keep labels explicit so fields are understandable at a glance.",[254,261,262],{},"Separate concerns using tabs instead of one long vertical form.",[254,264,265],{},"Keep behavior predictable: edits update immediately and preserve canvas context.",[254,267,268],{},"Reuse Nuxt UI components for consistency, theming, and accessibility.",[246,270,272],{"id":271},"information-architecture","Information architecture",[242,274,275],{},"Use a 3-level structure:",[277,278,279,286,292],"ol",{},[254,280,281,285],{},[282,283,284],"strong",{},"Global quick actions (top row)"," — binary toggles and frequently used actions (e.g., component overlay, danger zone).",[254,287,288,291],{},[282,289,290],{},"Status strip"," — compact computed info and warnings (e.g., panel size and max-limit warning).",[254,293,294,297,298,302,303,307,308,307,311,314],{},[282,295,296],{},"Tabbed content"," — reserve the top tab strip for switching between ",[299,300,301],"em",{},"user-owned"," alternatives, not for slicing one form. The panel editor uses this strip to switch between draft versions (",[304,305,306],"code",{},"V1",", ",[304,309,310],{},"V2",[304,312,313],{},"V3",", …) so users can iterate on multiple panelization attempts side-by-side; general settings and panel-connection settings render together on one page below the active tab.",[246,316,318],{"id":317},"nuxt-ui-component-principles","Nuxt UI component principles",[242,320,321],{},"Prefer Nuxt UI primitives for consistency:",[251,323,324,330,336,342,348,354],{},[254,325,326,329],{},[304,327,328],{},"UTabs"," for major grouping.",[254,331,332,335],{},[304,333,334],{},"UButton"," for actions and segmented option sets.",[254,337,338,341],{},[304,339,340],{},"USwitch"," for on\u002Foff features.",[254,343,344,347],{},[304,345,346],{},"UInput"," for numeric\u002Ftext fields.",[254,349,350,353],{},[304,351,352],{},"USelect"," for short enumerations.",[254,355,356,359],{},[304,357,358],{},"UIcon"," for recognition, never as the only label.",[242,361,362],{},"Avoid mixing too many custom styles when a Nuxt UI variant already covers the use case.",[246,364,366],{"id":365},"density-and-layout-rules","Density and layout rules",[251,368,369,380,387,394,401,404],{},[254,370,371,372,375,376,379],{},"Use compact controls (",[304,373,374],{},"size=\"xs\""," or ",[304,377,378],{},"size=\"sm\"",").",[254,381,382,383,386],{},"Prefer ",[282,384,385],{},"2-column grids"," for related numeric inputs.",[254,388,389,390,393],{},"Use ",[282,391,392],{},"4-column grids"," for side-based values (Top\u002FBottom\u002FLeft\u002FRight).",[254,395,396,397,400],{},"Wrap logically related controls in bordered cards: ",[304,398,399],{},"rounded border ... p-2 space-y-2",".",[254,402,403],{},"Use labels before inputs, even in compact layouts.",[254,405,406],{},"Keep helper text short and contextual.",[246,408,410],{"id":409},"labeling-rules","Labeling rules",[251,412,413,416,428],{},[254,414,415],{},"Every input must have visible context.",[254,417,418,419,307,422,307,425,400],{},"Keep labels short, unit-explicit, and consistent: ",[304,420,421],{},"Routing tool (mm)",[304,423,424],{},"Hole dia (mm)",[304,426,427],{},"Corner R (mm)",[254,429,430],{},"Use sentence case for inline labels, uppercase only for section titles.",[246,432,434],{"id":433},"behavioral-rules","Behavioral rules",[251,436,437,443,449,455,461],{},[254,438,439,442],{},[282,440,441],{},"Immediate feedback"," — input updates should reflect in canvas quickly.",[254,444,445,448],{},[282,446,447],{},"No view disruption"," — sidebar edits must not reset zoom\u002Fpan.",[254,450,451,454],{},[282,452,453],{},"Feature gating"," — if a mode disables a feature, show disabled state with explanation (e.g., tabs disabled in V-Cut mode).",[254,456,457,460],{},[282,458,459],{},"Sane defaults"," — new projects start with practical defaults.",[254,462,463,466],{},[282,464,465],{},"Safe migration"," — new config fields must preserve old projects.",[246,468,470],{"id":469},"config-and-persistence-principles","Config and persistence principles",[251,472,473,476],{},[254,474,475],{},"Sidebar controls map directly to persisted config fields.",[254,477,478,479],{},"New feature toggles require:\n",[277,480,481,484,487,490,493],{},[254,482,483],{},"Type update in config schema.",[254,485,486],{},"Default in factory function.",[254,488,489],{},"Migration fallback for existing saved data.",[254,491,492],{},"UI control wiring.",[254,494,495],{},"Geometry\u002Frender logic wiring.",[242,497,498],{},"This keeps local storage and Supabase JSON behavior aligned.",[246,500,502],{"id":501},"visual-hierarchy","Visual hierarchy",[242,504,505],{},"Use this order inside each tab:",[277,507,508,511,514,517],{},[254,509,510],{},"Core controls first (high-frequency edits).",[254,512,513],{},"Secondary controls next (fine-tuning).",[254,515,516],{},"Optional\u002Fadvanced controls in subcards.",[254,518,519],{},"Explanatory helper line at the end if needed.",[242,521,522],{},"Warnings should be visible but non-blocking (subtle accent background and border).",[246,524,526],{"id":525},"reuse-checklist","Reuse checklist",[242,528,529],{},"When implementing a new sidebar with this pattern:",[277,531,532,535,538,541,544,547,550,553],{},[254,533,534],{},"Define quick actions and status strip first.",[254,536,537],{},"Split large forms into 2--3 intent-based tabs.",[254,539,540],{},"Add explicit labels and units for every field.",[254,542,543],{},"Use bordered cards for each logical group.",[254,545,546],{},"Ensure toggles disable\u002Fhide dependent controls cleanly.",[254,548,549],{},"Keep canvas context stable while editing.",[254,551,552],{},"Add migration for every new persisted field.",[254,554,555],{},"Validate with small viewport and dark mode.",[246,557,559],{"id":558},"anti-patterns-to-avoid","Anti-patterns to avoid",[251,561,562,565,568,571,574],{},[254,563,564],{},"One long ungrouped scroll form.",[254,566,567],{},"Icon-only controls with no text.",[254,569,570],{},"Unlabeled numeric inputs.",[254,572,573],{},"Mixing persistent and local-only settings without clear boundaries.",[254,575,576],{},"Resetting canvas zoom\u002Fpan on every config change.",{"title":578,"searchDepth":579,"depth":580,"links":581},"",3,2,[582,583,584,585,586,587,588,589,590,591],{"id":248,"depth":580,"text":249},{"id":271,"depth":580,"text":272},{"id":317,"depth":580,"text":318},{"id":365,"depth":580,"text":366},{"id":409,"depth":580,"text":410},{"id":433,"depth":580,"text":434},{"id":469,"depth":580,"text":470},{"id":501,"depth":580,"text":502},{"id":525,"depth":580,"text":526},{"id":558,"depth":580,"text":559},"Reusable sidebar UX pattern used in the panel editor and other screens.","md",null,{},true,{"title":224,"description":592},"FuG0Pau9dJgbABAyYL9I3tYIwC2G75MBVULyv9P1bEc",[600,602],{"title":220,"path":221,"stem":222,"description":601,"children":-1},"Commit message format, release notes, and hotfix conventions for the Gerbtrace repository.",{"title":228,"path":229,"stem":230,"description":603,"children":-1},"Post-deploy release verification, rollback, incident response, synthetic checks, and Sentry release verification for the deployed surfaces.",1790998747785]