[{"data":1,"prerenderedAt":787},["ShallowReactive",2],{"doc:\u002Fvector-engine\u002Finternals\u002Fworkspace":3,"surround:\u002Fvector-engine\u002Finternals\u002Fworkspace":536,"navigation":547},{"id":4,"title":5,"body":6,"description":528,"extension":529,"meta":530,"navigation":531,"path":532,"seo":533,"stem":534,"__hash__":535},"docs\u002F03.vector-engine\u002F05.internals\u002F03.workspace.md","Workspace i panele",{"type":7,"value":8,"toc":519},"minimark",[9,14,34,38,94,101,108,112,192,216,230,234,244,271,346,365,369,379,382,393,400,404,424,428,505,515],[10,11,13],"h2",{"id":12},"siatka-workspaceu","Siatka workspace'u",[15,16,17,18,22,23,26,27,26,30,33],"p",{},"Shell to grid z czterema obszarami: ",[19,20,21],"strong",{},"Source"," (edytor JSON), ",[19,24,25],{},"Canvas",", ",[19,28,29],{},"Inspector",[19,31,32],{},"Export",". Każdy można zwinąć bez utraty stanu, a oba poziomy zwijania przeżywają reload.",[10,35,37],{"id":36},"stany-paneli","Stany paneli",[39,40,41,57],"table",{},[42,43,44],"thead",{},[45,46,47,51,54],"tr",{},[48,49,50],"th",{},"Stan",[48,52,53],{},"Jak osiągnąć",[48,55,56],{},"Efekt",[58,59,60,72,83],"tbody",{},[45,61,62,66,69],{},[63,64,65],"td",{},"Expanded",[63,67,68],{},"domyślny",[63,70,71],{},"Pełna kolumna o szerokości tieru",[45,73,74,77,80],{},[63,75,76],{},"Rail",[63,78,79],{},"1. klik przełącznika",[63,81,82],{},"Pionowy rail 44 px z etykietą; klik rozwija",[45,84,85,88,91],{},[63,86,87],{},"Hidden",[63,89,90],{},"2. klik przełącznika",[63,92,93],{},"Kolumna usunięta z gridu",[15,95,96,97,100],{},"Przełącznik w headerze cykluje ",[19,98,99],{},"expanded → rail → hidden → expanded"," na desktopie. Poniżej 901 px przełącznik działa jak zwykłe show\u002Fhide, bo panele są tam tabowane.",[15,102,103,104,107],{},"Gdy wszystkie trzy kolumny są w stanie rail, w prawym dolnym rogu canvasa pojawia się przycisk ",[19,105,106],{},"Restore panels",".",[10,109,111],{"id":110},"stan-w-store","Stan w store",[113,114,119],"pre",{"className":115,"code":116,"language":117,"meta":118,"style":118},"language-ts shiki shiki-themes github-light github-dark","store.panelCollapsed\nstore.setPanelCollapsed('json', true)\nstore.togglePanelCollapsed('json')\nstore.collapsePanels()\nstore.expandPanels()\n","ts","",[120,121,122,131,157,171,182],"code",{"__ignoreMap":118},[123,124,127],"span",{"class":125,"line":126},"line",1,[123,128,130],{"class":129},"sVt8B","store.panelCollapsed\n",[123,132,134,137,141,144,148,150,154],{"class":125,"line":133},2,[123,135,136],{"class":129},"store.",[123,138,140],{"class":139},"sScJk","setPanelCollapsed",[123,142,143],{"class":129},"(",[123,145,147],{"class":146},"sZZnC","'json'",[123,149,26],{"class":129},[123,151,153],{"class":152},"sj4cs","true",[123,155,156],{"class":129},")\n",[123,158,160,162,165,167,169],{"class":125,"line":159},3,[123,161,136],{"class":129},[123,163,164],{"class":139},"togglePanelCollapsed",[123,166,143],{"class":129},[123,168,147],{"class":146},[123,170,156],{"class":129},[123,172,174,176,179],{"class":125,"line":173},4,[123,175,136],{"class":129},[123,177,178],{"class":139},"collapsePanels",[123,180,181],{"class":129},"()\n",[123,183,185,187,190],{"class":125,"line":184},5,[123,186,136],{"class":129},[123,188,189],{"class":139},"expandPanels",[123,191,181],{"class":129},[15,193,194,197,198,26,201,26,204,207,208,211,212,215],{},[120,195,196],{},"panelVisible"," (per panel, także ",[120,199,200],{},"toolbar",[120,202,203],{},"statusbar",[120,205,206],{},"banner",") i ",[120,209,210],{},"panelCollapsed"," trafiają do ",[120,213,214],{},"localStorage",":",[217,218,219,225],"ul",{},[220,221,222],"li",{},[120,223,224],{},"vector-engine.panels",[220,226,227],{},[120,228,229],{},"vector-engine.panel-collapse",[10,231,233],{"id":232},"sekcje-w-panelach","Sekcje w panelach",[15,235,236,237,240,241,215],{},"Każdy nagłówek grupy w Inspectorze i krokach eksportu to toggle z ",[120,238,239],{},"aria-expanded","\u002F",[120,242,243],{},"aria-controls",[217,245,246,261],{},[220,247,248,249,26,252,26,255,26,258],{},"Inspector: ",[120,250,251],{},"Layers",[120,253,254],{},"Transform",[120,256,257],{},"Appearance",[120,259,260],{},"Shape",[220,262,263,264,267,268],{},"Export: ",[120,265,266],{},"1. Target"," … ",[120,269,270],{},"6. Preview",[113,272,276],{"className":273,"code":274,"language":275,"meta":118,"style":118},"language-vue shiki shiki-themes github-light github-dark","\u003CInspectorSection\n  id=\"inspector-transform\"\n  title=\"Transform\"\n  storage-key=\"inspector.transform\"\n>\n  \u003CInspectorNumberField label=\"X\" \u002F>\n  \u003CInspectorNumberField label=\"Y\" \u002F>\n\u003C\u002FInspectorSection>\n","vue",[120,277,278,287,298,308,318,323,329,335],{"__ignoreMap":118},[123,279,280,283],{"class":125,"line":126},[123,281,282],{"class":129},"\u003C",[123,284,286],{"class":285},"s9eBZ","InspectorSection\n",[123,288,289,292,295],{"class":125,"line":133},[123,290,291],{"class":139},"  id",[123,293,294],{"class":129},"=",[123,296,297],{"class":146},"\"inspector-transform\"\n",[123,299,300,303,305],{"class":125,"line":159},[123,301,302],{"class":139},"  title",[123,304,294],{"class":129},[123,306,307],{"class":146},"\"Transform\"\n",[123,309,310,313,315],{"class":125,"line":173},[123,311,312],{"class":139},"  storage-key",[123,314,294],{"class":129},[123,316,317],{"class":146},"\"inspector.transform\"\n",[123,319,320],{"class":125,"line":184},[123,321,322],{"class":129},">\n",[123,324,326],{"class":125,"line":325},6,[123,327,328],{"class":129},"  \u003CInspectorNumberField label=\"X\" \u002F>\n",[123,330,332],{"class":125,"line":331},7,[123,333,334],{"class":129},"  \u003CInspectorNumberField label=\"Y\" \u002F>\n",[123,336,338,341,344],{"class":125,"line":337},8,[123,339,340],{"class":129},"\u003C\u002F",[123,342,343],{"class":285},"InspectorSection",[123,345,322],{"class":129},[15,347,348,349,352,353,356,357,360,361,364],{},"Grupy używają ",[120,350,351],{},"useCollapsibleSection(storageKey)"," — stan w reaktywnej mapie na poziomie modułu, persystencja pod ",[120,354,355],{},"vector-engine.sections",". Sekcje są domyślnie otwarte; ",[120,358,359],{},":default-open=\"false\""," startuje zwinięte, ",[120,362,363],{},":collapsible=\"false\""," przypina na stałe.",[10,366,368],{"id":367},"banner-produktu","Banner produktu",[15,370,371,374,375,378],{},[120,372,373],{},"AppBanner.vue"," renderuje zamykalny pasek ogłoszeniowy między headerem a workspace. Zamknięcie zapisuje ",[120,376,377],{},"panelVisible.banner = false","; przycisk info w headerze przywraca go.",[15,380,381],{},"Banner znika automatycznie:",[217,383,384,387,390],{},[220,385,386],{},"w trybie fullscreen,",[220,388,389],{},"na bardzo niskich viewportach (≤ 820 px wysokości),",[220,391,392],{},"jego drugorzędna lista zwija się poniżej 1180 px.",[15,394,395,396,399],{},"Shell rezerwuje wiersz bannera przez ",[120,397,398],{},".app-shell:not(:has(.app-banner))",", więc ukrycie nie zostawia pustej luki.",[10,401,403],{"id":402},"tła-canvasa","Tła canvasa",[15,405,406,407,26,410,26,413,26,416,419,420,423],{},"Podgląd ma niezależne tło edytora (",[120,408,409],{},"Grid",[120,411,412],{},"Light",[120,414,415],{},"White",[120,417,418],{},"Dark","), ",[19,421,422],{},"odseparowane od tła eksportu"," — możesz projektować na ciemno, a eksportować na biało.",[10,425,427],{"id":426},"brand-assets","Brand assets",[39,429,430,440],{},[42,431,432],{},[45,433,434,437],{},[48,435,436],{},"Plik",[48,438,439],{},"Przeznaczenie",[58,441,442,452,462,472,485,495],{},[45,443,444,449],{},[63,445,446],{},[120,447,448],{},"public\u002Ffavicon.svg",[63,450,451],{},"Główna favicon wektorowa",[45,453,454,459],{},[63,455,456],{},[120,457,458],{},"public\u002Ffavicon.ico",[63,460,461],{},"Legacy 16\u002F32\u002F48 px",[45,463,464,469],{},[63,465,466],{},[120,467,468],{},"public\u002Fapple-touch-icon.png",[63,470,471],{},"Ikona iOS 180 px",[45,473,474,482],{},[63,475,476,26,479],{},[120,477,478],{},"public\u002Ficon-192.png",[120,480,481],{},"icon-512.png",[63,483,484],{},"Ikony manifestu PWA",[45,486,487,492],{},[63,488,489],{},[120,490,491],{},"public\u002Fsite.webmanifest",[63,493,494],{},"Metadane instalowalnej PWA",[45,496,497,502],{},[63,498,499],{},[120,500,501],{},"public\u002Fbrand\u002Fsocial-card.png",[63,503,504],{},"Karta Open Graph 1200×630",[15,506,507,510,511,514],{},[120,508,509],{},"npm run build"," uruchamia ",[120,512,513],{},"scripts\u002Fverify-deployment.mjs",", który wywala się, jeśli którykolwiek z tych plików lub metadanych zniknie z outputu.",[516,517,518],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":118,"searchDepth":159,"depth":159,"links":520},[521,522,523,524,525,526,527],{"id":12,"depth":133,"text":13},{"id":36,"depth":133,"text":37},{"id":110,"depth":133,"text":111},{"id":232,"depth":133,"text":233},{"id":367,"depth":133,"text":368},{"id":402,"depth":133,"text":403},{"id":426,"depth":133,"text":427},"Cztery kolumny (Source, Canvas, Inspector, Export), trójstanowe zwijanie expanded → rail → hidden, sekcje akordeonu i persystencja.","md",{},true,"\u002Fvector-engine\u002Finternals\u002Fworkspace",{"title":5,"description":528},"03.vector-engine\u002F05.internals\u002F03.workspace","OZENfmMjmOlGSNznHQkTVHO4MeJu7JGoKOUvTMyViw8",[537,542],{"title":538,"path":539,"stem":540,"description":541,"children":-1},"WebAssembly i workery","\u002Fvector-engine\u002Finternals\u002Fwasm","03.vector-engine\u002F05.internals\u002F02.wasm","Build C++23 do WASM, publiczne API instancji, Dedicated Worker z zero-copy transferami i anulowaniem przez AbortSignal.",{"title":543,"path":544,"stem":545,"description":546,"children":-1},"Breakpointy","\u002Fvector-engine\u002Finternals\u002Fbreakpoints","03.vector-engine\u002F05.internals\u002F04.breakpoints","Skala breakpointów per rozdzielczość monitora (1280×800 → 5K), tiery wysokości, ultrawide 21:9 i layouty tabowane.",[548,668,729],{"title":549,"path":550,"stem":551,"children":552},"2D Game Engine","\u002Fgame-engine","01.game-engine\u002F01.index",[553,555,559,563,567,593,622,635,656,660,664],{"title":554,"path":550,"stem":551},"Przegląd",{"title":556,"path":557,"stem":558},"Szybki start","\u002Fgame-engine\u002Fgetting-started","01.game-engine\u002F02.getting-started",{"title":560,"path":561,"stem":562},"Konfiguracja","\u002Fgame-engine\u002Fconfiguration","01.game-engine\u002F03.configuration",{"title":564,"path":565,"stem":566},"Architektura","\u002Fgame-engine\u002Farchitecture","01.game-engine\u002F04.architecture",{"title":568,"path":569,"stem":570,"children":571,"page":592},"Rdzeń","\u002Fgame-engine\u002Fcore","01.game-engine\u002F05.core",[572,576,580,584,588],{"title":573,"path":574,"stem":575},"Silnik i cykl życia","\u002Fgame-engine\u002Fcore\u002Fengine","01.game-engine\u002F05.core\u002F01.engine",{"title":577,"path":578,"stem":579},"Czas i pętla gry","\u002Fgame-engine\u002Fcore\u002Ftime","01.game-engine\u002F05.core\u002F02.time",{"title":581,"path":582,"stem":583},"Sceny","\u002Fgame-engine\u002Fcore\u002Fscenes","01.game-engine\u002F05.core\u002F03.scenes",{"title":585,"path":586,"stem":587},"Obiekty i komponenty","\u002Fgame-engine\u002Fcore\u002Fobjects","01.game-engine\u002F05.core\u002F04.objects",{"title":589,"path":590,"stem":591},"Zdarzenia i harmonogram","\u002Fgame-engine\u002Fcore\u002Fevents","01.game-engine\u002F05.core\u002F05.events",false,{"title":594,"path":595,"stem":596,"children":597,"page":592},"Systemy","\u002Fgame-engine\u002Fsystems","01.game-engine\u002F06.systems",[598,602,606,610,614,618],{"title":599,"path":600,"stem":601},"Zasoby (AssetManager)","\u002Fgame-engine\u002Fsystems\u002Fassets","01.game-engine\u002F06.systems\u002F01.assets",{"title":603,"path":604,"stem":605},"Wejście (InputManager)","\u002Fgame-engine\u002Fsystems\u002Finput","01.game-engine\u002F06.systems\u002F02.input",{"title":607,"path":608,"stem":609},"Fizyka (PhysicsManager)","\u002Fgame-engine\u002Fsystems\u002Fphysics","01.game-engine\u002F06.systems\u002F03.physics",{"title":611,"path":612,"stem":613},"Kamera (CameraManager)","\u002Fgame-engine\u002Fsystems\u002Fcamera","01.game-engine\u002F06.systems\u002F04.camera",{"title":615,"path":616,"stem":617},"Audio (AudioManager)","\u002Fgame-engine\u002Fsystems\u002Faudio","01.game-engine\u002F06.systems\u002F05.audio",{"title":619,"path":620,"stem":621},"Tweeny i easing","\u002Fgame-engine\u002Fsystems\u002Ftweens","01.game-engine\u002F06.systems\u002F06.tweens",{"title":623,"path":624,"stem":625,"children":626,"page":592},"Dane i zapisy","\u002Fgame-engine\u002Fdata","01.game-engine\u002F07.data",[627,631],{"title":628,"path":629,"stem":630},"Format projektu","\u002Fgame-engine\u002Fdata\u002Fproject-format","01.game-engine\u002F07.data\u002F01.project-format",{"title":632,"path":633,"stem":634},"Zapisy gry","\u002Fgame-engine\u002Fdata\u002Fsaves","01.game-engine\u002F07.data\u002F02.saves",{"title":636,"path":637,"stem":638,"children":639,"page":592},"Zaawansowane","\u002Fgame-engine\u002Fadvanced","01.game-engine\u002F08.advanced",[640,644,648,652],{"title":641,"path":642,"stem":643},"Pluginy","\u002Fgame-engine\u002Fadvanced\u002Fplugins","01.game-engine\u002F08.advanced\u002F01.plugins",{"title":645,"path":646,"stem":647},"WebAssembly","\u002Fgame-engine\u002Fadvanced\u002Fwasm","01.game-engine\u002F08.advanced\u002F02.wasm",{"title":649,"path":650,"stem":651},"Debugowanie","\u002Fgame-engine\u002Fadvanced\u002Fdebugging","01.game-engine\u002F08.advanced\u002F03.debugging",{"title":653,"path":654,"stem":655},"Wydajność i benchmarki","\u002Fgame-engine\u002Fadvanced\u002Fperformance","01.game-engine\u002F08.advanced\u002F04.performance",{"title":657,"path":658,"stem":659},"Wdrożenie","\u002Fgame-engine\u002Fdeployment","01.game-engine\u002F09.deployment",{"title":661,"path":662,"stem":663},"Przykłady","\u002Fgame-engine\u002Fexamples","01.game-engine\u002F10.examples",{"title":665,"path":666,"stem":667},"Decyzje architektoniczne","\u002Fgame-engine\u002Fadr","01.game-engine\u002F11.adr",{"title":669,"path":670,"stem":671,"children":672},"Reverse Proxy","\u002Freverse-proxy","02.reverse-proxy\u002F01.index",[673,674,677,680,701],{"title":554,"path":670,"stem":671},{"title":556,"path":675,"stem":676},"\u002Freverse-proxy\u002Fgetting-started","02.reverse-proxy\u002F02.getting-started",{"title":560,"path":678,"stem":679},"\u002Freverse-proxy\u002Fconfiguration","02.reverse-proxy\u002F03.configuration",{"title":681,"path":682,"stem":683,"children":684,"page":592},"Ruch i odporność","\u002Freverse-proxy\u002Ftraffic","02.reverse-proxy\u002F04.traffic",[685,689,693,697],{"title":686,"path":687,"stem":688},"Load balancing","\u002Freverse-proxy\u002Ftraffic\u002Fload-balancing","02.reverse-proxy\u002F04.traffic\u002F01.load-balancing",{"title":690,"path":691,"stem":692},"Health checks","\u002Freverse-proxy\u002Ftraffic\u002Fhealth-checks","02.reverse-proxy\u002F04.traffic\u002F02.health-checks",{"title":694,"path":695,"stem":696},"Circuit breaker i retry","\u002Freverse-proxy\u002Ftraffic\u002Fresilience","02.reverse-proxy\u002F04.traffic\u002F03.resilience",{"title":698,"path":699,"stem":700},"Rate limiting","\u002Freverse-proxy\u002Ftraffic\u002Frate-limiting","02.reverse-proxy\u002F04.traffic\u002F04.rate-limiting",{"title":702,"path":703,"stem":704,"children":705,"page":592},"Operacje i wdrożenie","\u002Freverse-proxy\u002Foperations","02.reverse-proxy\u002F05.operations",[706,710,714,718,721,725],{"title":707,"path":708,"stem":709},"Admin API","\u002Freverse-proxy\u002Foperations\u002Fadmin-api","02.reverse-proxy\u002F05.operations\u002F01.admin-api",{"title":711,"path":712,"stem":713},"Metryki i monitoring","\u002Freverse-proxy\u002Foperations\u002Fobservability","02.reverse-proxy\u002F05.operations\u002F02.observability",{"title":715,"path":716,"stem":717},"Bezpieczeństwo","\u002Freverse-proxy\u002Foperations\u002Fsecurity","02.reverse-proxy\u002F05.operations\u002F03.security",{"title":657,"path":719,"stem":720},"\u002Freverse-proxy\u002Foperations\u002Fdeployment","02.reverse-proxy\u002F05.operations\u002F04.deployment",{"title":722,"path":723,"stem":724},"Benchmarki","\u002Freverse-proxy\u002Foperations\u002Fbenchmarks","02.reverse-proxy\u002F05.operations\u002F05.benchmarks",{"title":726,"path":727,"stem":728},"Troubleshooting","\u002Freverse-proxy\u002Foperations\u002Ftroubleshooting","02.reverse-proxy\u002F05.operations\u002F06.troubleshooting",{"title":730,"path":731,"stem":732,"children":733},"Vector Engine","\u002Fvector-engine","03.vector-engine\u002F01.index",[734,735,738,759,772,783],{"title":554,"path":731,"stem":732},{"title":556,"path":736,"stem":737},"\u002Fvector-engine\u002Fgetting-started","03.vector-engine\u002F02.getting-started",{"title":739,"path":740,"stem":741,"children":742,"page":592},"Scena","\u002Fvector-engine\u002Fscene","03.vector-engine\u002F03.scene",[743,747,751,755],{"title":744,"path":745,"stem":746},"Format sceny 1.0","\u002Fvector-engine\u002Fscene\u002Fscene-format","03.vector-engine\u002F03.scene\u002F01.scene-format",{"title":748,"path":749,"stem":750},"Obiekty sceny","\u002Fvector-engine\u002Fscene\u002Fobjects","03.vector-engine\u002F03.scene\u002F02.objects",{"title":752,"path":753,"stem":754},"Gradienty i warstwy","\u002Fvector-engine\u002Fscene\u002Fgradients-layers","03.vector-engine\u002F03.scene\u002F03.gradients-layers",{"title":756,"path":757,"stem":758},"Przykłady scen","\u002Fvector-engine\u002Fscene\u002Fexamples","03.vector-engine\u002F03.scene\u002F04.examples",{"title":760,"path":761,"stem":762,"children":763,"page":592},"Eksport","\u002Fvector-engine\u002Fexport","03.vector-engine\u002F04.export",[764,768],{"title":765,"path":766,"stem":767},"Formaty eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-formats","03.vector-engine\u002F04.export\u002F01.export-formats",{"title":769,"path":770,"stem":771},"Proces eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-workflow","03.vector-engine\u002F04.export\u002F02.export-workflow",{"title":773,"path":774,"stem":775,"children":776,"page":592},"Wnętrze silnika","\u002Fvector-engine\u002Finternals","03.vector-engine\u002F05.internals",[777,780,781,782],{"title":564,"path":778,"stem":779},"\u002Fvector-engine\u002Finternals\u002Farchitecture","03.vector-engine\u002F05.internals\u002F01.architecture",{"title":538,"path":539,"stem":540},{"title":5,"path":532,"stem":534},{"title":543,"path":544,"stem":545},{"title":784,"path":785,"stem":786},"Wdrożenie na Vercel","\u002Fvector-engine\u002Fdeployment","03.vector-engine\u002F06.deployment",1793986308999]