[{"data":1,"prerenderedAt":625},["ShallowReactive",2],{"docs-navigation":3,"\u002Fdocs\u002Fdevelopment\u002Fcontributing":231,"\u002Fdocs\u002Fdevelopment\u002Fcontributing-surround":620},[4],{"title":5,"path":6,"stem":7,"children":8,"page":-1},"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":216,"body":233,"description":613,"extension":614,"links":615,"meta":616,"navigation":617,"path":217,"seo":618,"stem":218,"__hash__":619},"docs\u002Fdocs\u002F9.development\u002F6.contributing.md",{"type":234,"value":235,"toc":595},"minimark",[236,240,244,249,277,281,299,303,306,357,360,364,367,372,375,396,400,428,432,449,453,479,483,507,511,539,543,564,568,578,592],[237,238,216],"h1",{"id":239},"contributing",[241,242,243],"p",{},"Thank you for your interest in contributing to Gerbtrace. This page covers coding conventions, the design system, and guidelines for submitting changes.",[245,246,248],"h2",{"id":247},"getting-started","Getting started",[250,251,252,256,263,271,274],"ol",{},[253,254,255],"li",{},"Fork the repository and clone your fork.",[253,257,258,259,262],{},"Follow the ",[260,261,196],"a",{"href":197}," guide to get the project running locally.",[253,264,265,266,270],{},"Create a feature branch from ",[267,268,269],"code",{},"main",".",[253,272,273],{},"Make your changes and verify they work in both web and desktop modes.",[253,275,276],{},"Submit a pull request.",[245,278,280],{"id":279},"code-style","Code style",[282,283,284,287,293,296],"ul",{},[253,285,286],{},"TypeScript throughout the frontend",[253,288,289,290],{},"Vue 3 Composition API with ",[267,291,292],{},"\u003Cscript setup>",[253,294,295],{},"Nuxt UI components preferred over native HTML controls",[253,297,298],{},"Tailwind CSS for styling",[245,300,302],{"id":301},"nuxt-ui-form-controls","Nuxt UI form controls",[241,304,305],{},"Use Nuxt UI form controls for consistency:",[282,307,308,324,330,339,345,351],{},[253,309,310,313,314,317,318,313,321],{},[267,311,312],{},"USelect"," \u002F ",[267,315,316],{},"USelectMenu"," instead of ",[267,319,320],{},"\u003Cselect>",[267,322,323],{},"\u003Coption>",[253,325,326,329],{},[267,327,328],{},"URadioGroup"," instead of native radio groups",[253,331,332,313,335,338],{},[267,333,334],{},"UCheckbox",[267,336,337],{},"UCheckboxGroup"," instead of native checkboxes",[253,340,341,344],{},[267,342,343],{},"USwitch"," for boolean toggles",[253,346,347,350],{},[267,348,349],{},"UInput"," for text and numeric fields",[253,352,353,356],{},[267,354,355],{},"UTabs"," for tabbed interfaces",[241,358,359],{},"Keep native controls only when a Nuxt UI component cannot reasonably satisfy behavior, accessibility, or performance needs.",[245,361,363],{"id":362},"sidebar-design-system","Sidebar design system",[241,365,366],{},"The sidebar panels follow a consistent UX pattern. When building or modifying a sidebar:",[368,369,371],"h3",{"id":370},"information-architecture","Information architecture",[241,373,374],{},"Use a 3-level structure:",[250,376,377,384,390],{},[253,378,379,383],{},[380,381,382],"strong",{},"Global quick actions"," (top row) – binary toggles and frequently used actions",[253,385,386,389],{},[380,387,388],{},"Status strip"," – compact computed info and warnings",[253,391,392,395],{},[380,393,394],{},"Tabbed content"," – group related settings by user intent, not implementation detail",[368,397,399],{"id":398},"layout-rules","Layout rules",[282,401,402,413,416,419,425],{},[253,403,404,405,408,409,412],{},"Use compact controls (",[267,406,407],{},"size=\"xs\""," or ",[267,410,411],{},"size=\"sm\"",")",[253,414,415],{},"Prefer 2-column grids for related numeric inputs",[253,417,418],{},"Use 4-column grids for side-based values (top\u002Fbottom\u002Fleft\u002Fright)",[253,420,421,422],{},"Wrap logical groups in bordered cards with ",[267,423,424],{},"rounded border p-2 space-y-2",[253,426,427],{},"Every input must have a visible label with units (e.g., \"Routing tool (mm)\")",[368,429,431],{"id":430},"behavioral-rules","Behavioral rules",[282,433,434,437,440,443,446],{},[253,435,436],{},"Input updates should reflect on the canvas immediately",[253,438,439],{},"Sidebar edits must not reset zoom or pan",[253,441,442],{},"If a mode disables a feature, show disabled state with explanation",[253,444,445],{},"New projects start with practical defaults",[253,447,448],{},"New config fields must preserve existing projects (migration fallback)",[368,450,452],{"id":451},"checklist-for-new-sidebars","Checklist for new sidebars",[250,454,455,458,461,464,467,470,473,476],{},[253,456,457],{},"Define quick actions and status strip first",[253,459,460],{},"Split large forms into 2-3 intent-based tabs",[253,462,463],{},"Add explicit labels and units for every field",[253,465,466],{},"Use bordered cards for each logical group",[253,468,469],{},"Ensure toggles disable\u002Fhide dependent controls cleanly",[253,471,472],{},"Keep canvas context stable while editing",[253,474,475],{},"Add migration for every new persisted field",[253,477,478],{},"Validate with small viewport and dark mode",[245,480,482],{"id":481},"package-system-rules","Package system rules",[282,484,485,491,498,501],{},[253,486,487,490],{},[380,488,489],{},"Never invent new package types"," – only TPSys types are allowed",[253,492,493,494,497],{},"Use ",[267,495,496],{},"PT_GENERIC"," for packages that do not fit the simplified parametric models",[253,499,500],{},"Package geometry must follow Mycronic\u002FTPSys 0-degree orientation",[253,502,503,504,506],{},"See ",[260,505,175],{"href":176}," for the full type system",[245,508,510],{"id":509},"config-and-persistence","Config and persistence",[282,512,513,516,536],{},[253,514,515],{},"Sidebar controls map directly to persisted config fields",[253,517,518,519],{},"New feature toggles require:\n",[250,520,521,524,527,530,533],{},[253,522,523],{},"Type update in the config schema",[253,525,526],{},"Default in the factory function",[253,528,529],{},"Migration fallback for existing saved data",[253,531,532],{},"UI control wiring",[253,534,535],{},"Geometry\u002Frender logic wiring",[253,537,538],{},"This keeps local storage and Supabase JSON behavior aligned",[245,540,542],{"id":541},"pull-request-guidelines","Pull request guidelines",[282,544,545,548,551,554,557],{},[253,546,547],{},"Keep PRs focused on a single feature or fix",[253,549,550],{},"Include a clear description of what changed and why",[253,552,553],{},"Verify the CI checks pass (type check + build)",[253,555,556],{},"Test in both web and desktop modes when applicable",[253,558,559,560,563],{},"Update documentation in ",[267,561,562],{},"content\u002Fdocs\u002F"," if your change adds or modifies user-facing behavior",[245,565,567],{"id":566},"reporting-issues","Reporting issues",[241,569,570,571,577],{},"Use the ",[260,572,576],{"href":573,"rel":574},"https:\u002F\u002Fgithub.com\u002Fnewmatik\u002Fgerbtrace\u002Fissues",[575],"nofollow","GitHub Issues"," page. Include:",[282,579,580,583,586,589],{},[253,581,582],{},"Steps to reproduce",[253,584,585],{},"Expected vs actual behavior",[253,587,588],{},"Browser\u002FOS version",[253,590,591],{},"Screenshots or screen recordings if applicable",[241,593,594],{},"You can also submit bug reports directly from within Gerbtrace via the bug report button in the header.",{"title":596,"searchDepth":597,"depth":598,"links":599},"",3,2,[600,601,602,603,609,610,611,612],{"id":247,"depth":598,"text":248},{"id":279,"depth":598,"text":280},{"id":301,"depth":598,"text":302},{"id":362,"depth":598,"text":363,"children":604},[605,606,607,608],{"id":370,"depth":597,"text":371},{"id":398,"depth":597,"text":399},{"id":430,"depth":597,"text":431},{"id":451,"depth":597,"text":452},{"id":481,"depth":598,"text":482},{"id":509,"depth":598,"text":510},{"id":541,"depth":598,"text":542},{"id":566,"depth":598,"text":567},"Coding conventions, design system guidelines, and how to contribute to Gerbtrace.","md",null,{},true,{"title":216,"description":613},"yaLO5M62HiIScO6DvB5_sjwKJfHZxQgKmjZH_DaiH68",[621,623],{"title":212,"path":213,"stem":214,"description":622,"children":-1},"Sentry integration for error reporting in web and desktop builds.",{"title":220,"path":221,"stem":222,"description":624,"children":-1},"Commit message format, release notes, and hotfix conventions for the Gerbtrace repository.",1790998746702]