[{"data":1,"prerenderedAt":6110},["ShallowReactive",2],{"navigation":3,"\u002Fapi\u002Fdata-fixtures":358,"\u002Fapi\u002Fdata-fixtures-surround":6105},[4,14,36,69,140,341],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fgetting-started","1.getting-started\u002F1.index",[9,10],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":15,"path":16,"stem":17,"children":18,"page":35},"Guides","\u002Fguides","2.guides",[19,23,27,31],{"title":20,"path":21,"stem":22},"Your First Layout","\u002Fguides\u002Fyour-first-layout","2.guides\u002F1.your-first-layout",{"title":24,"path":25,"stem":26},"Your First Page Template","\u002Fguides\u002Fyour-first-page-template","2.guides\u002F2.your-first-page-template",{"title":28,"path":29,"stem":30},"Your First Component","\u002Fguides\u002Fyour-first-component","2.guides\u002F3.your-first-component",{"title":32,"path":33,"stem":34},"Alternative UI Variants","\u002Fguides\u002Falternative-ui-variants","2.guides\u002F4.alternative-ui-variants",false,{"title":37,"path":38,"stem":39,"children":40,"page":35},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[41,45,49,53,57,61,65],{"title":42,"path":43,"stem":44},"How It All Works","\u002Fcore-concepts\u002Farchitecture","3.core-concepts\u002F1.architecture",{"title":46,"path":47,"stem":48},"The Data Model","\u002Fcore-concepts\u002Fthe-data-model","3.core-concepts\u002F2.the-data-model",{"title":50,"path":51,"stem":52},"Layouts & Pages","\u002Fcore-concepts\u002Flayouts-and-pages","3.core-concepts\u002F3.layouts-and-pages",{"title":54,"path":55,"stem":56},"Dynamic Pages","\u002Fcore-concepts\u002Fdynamic-pages","3.core-concepts\u002F4.dynamic-pages",{"title":58,"path":59,"stem":60},"Components","\u002Fcore-concepts\u002Fcomponents","3.core-concepts\u002F5.components",{"title":62,"path":63,"stem":64},"Draft & Publish Workflow","\u002Fcore-concepts\u002Fdraft-and-publish","3.core-concepts\u002F6.draft-and-publish",{"title":66,"path":67,"stem":68},"The Admin Panel","\u002Fcore-concepts\u002Fadmin-panel","3.core-concepts\u002F7.admin-panel",{"title":70,"path":71,"stem":72,"children":73,"page":35},"Api","\u002Fapi","4.api",[74,78,116,120,124,128,132,136],{"title":75,"path":76,"stem":77},"Bundle Setup","\u002Fapi\u002Fbundle-setup","4.api\u002F1.bundle-setup",{"title":58,"path":79,"stem":80,"children":81,"page":35},"\u002Fapi\u002Fcomponents","4.api\u002F2.components",[82,86,103],{"title":83,"path":84,"stem":85},"Creating Components","\u002Fapi\u002Fcomponents\u002Fcreating-components","4.api\u002F2.components\u002F1.creating-components",{"title":87,"path":88,"stem":89,"children":90,"page":35},"Annotations","\u002Fapi\u002Fcomponents\u002Fannotations","4.api\u002F2.components\u002F2.annotations",[91,95,99],{"title":92,"path":93,"stem":94},"Publishable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fpublishable","4.api\u002F2.components\u002F2.annotations\u002F1.publishable",{"title":96,"path":97,"stem":98},"Uploadable","\u002Fapi\u002Fcomponents\u002Fannotations\u002Fuploadable","4.api\u002F2.components\u002F2.annotations\u002F2.uploadable",{"title":100,"path":101,"stem":102},"Timestamped","\u002Fapi\u002Fcomponents\u002Fannotations\u002Ftimestamped","4.api\u002F2.components\u002F2.annotations\u002F3.timestamped",{"title":104,"path":105,"stem":106,"children":107,"page":35},"Built Ins","\u002Fapi\u002Fcomponents\u002Fbuilt-ins","4.api\u002F2.components\u002F3.built-ins",[108,112],{"title":109,"path":110,"stem":111},"Collection Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fcollection-component","4.api\u002F2.components\u002F3.built-ins\u002F1.collection-component",{"title":113,"path":114,"stem":115},"Form Component","\u002Fapi\u002Fcomponents\u002Fbuilt-ins\u002Fform-component","4.api\u002F2.components\u002F3.built-ins\u002F2.form-component",{"title":117,"path":118,"stem":119},"Dynamic & Nested Pages","\u002Fapi\u002Fdynamic-pages","4.api\u002F3.dynamic-pages",{"title":121,"path":122,"stem":123},"Users & Security","\u002Fapi\u002Fusers-and-security","4.api\u002F4.users-and-security",{"title":125,"path":126,"stem":127},"Data Fixtures","\u002Fapi\u002Fdata-fixtures","4.api\u002F5.data-fixtures",{"title":129,"path":130,"stem":131},"Configuration Reference","\u002Fapi\u002Fconfiguration","4.api\u002F6.configuration",{"title":133,"path":134,"stem":135},"Console Commands","\u002Fapi\u002Fconsole-commands","4.api\u002F7.console-commands",{"title":137,"path":138,"stem":139},"Debugging & Profiler","\u002Fapi\u002Fdebugging","4.api\u002F8.debugging",{"title":141,"path":142,"stem":143,"children":144,"page":35},"Nuxt Module","\u002Fnuxt-module","5.nuxt-module",[145,149,162,182,207,211,295,320,324],{"title":146,"path":147,"stem":148},"Module Setup","\u002Fnuxt-module\u002Fmodule-setup","5.nuxt-module\u002F1.module-setup",{"title":150,"path":151,"stem":152,"children":153,"page":35},"Configuration","\u002Fnuxt-module\u002Fconfiguration","5.nuxt-module\u002F2.configuration",[154,158],{"title":155,"path":156,"stem":157},"Nuxt Config","\u002Fnuxt-module\u002Fconfiguration\u002Fnuxt-config","5.nuxt-module\u002F2.configuration\u002F1.nuxt-config",{"title":159,"path":160,"stem":161},"Site Config & SEO","\u002Fnuxt-module\u002Fconfiguration\u002Fsite-config-and-seo","5.nuxt-module\u002F2.configuration\u002F2.site-config-and-seo",{"title":163,"path":164,"stem":165,"children":166,"page":35},"Building Your Ui","\u002Fnuxt-module\u002Fbuilding-your-ui","5.nuxt-module\u002F3.building-your-ui",[167,171,175,178],{"title":168,"path":169,"stem":170},"Layouts","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-layouts","5.nuxt-module\u002F3.building-your-ui\u002F1.creating-layouts",{"title":172,"path":173,"stem":174},"Page Templates","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-page-templates","5.nuxt-module\u002F3.building-your-ui\u002F2.creating-page-templates",{"title":83,"path":176,"stem":177},"\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcreating-components","5.nuxt-module\u002F3.building-your-ui\u002F3.creating-components",{"title":179,"path":180,"stem":181},"CLI Generator","\u002Fnuxt-module\u002Fbuilding-your-ui\u002Fcwa-cli","5.nuxt-module\u002F3.building-your-ui\u002F4.cwa-cli",{"title":183,"path":184,"stem":185,"children":186,"page":35},"Cwa Components","\u002Fnuxt-module\u002Fcwa-components","5.nuxt-module\u002F4.cwa-components",[187,191,195,199,203],{"title":188,"path":189,"stem":190},"\u003CCwaComponentGroup \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-component-group","5.nuxt-module\u002F4.cwa-components\u002F1.cwa-component-group",{"title":192,"path":193,"stem":194},"\u003CCwaPage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-page","5.nuxt-module\u002F4.cwa-components\u002F2.cwa-page",{"title":196,"path":197,"stem":198},"\u003CCwaLink \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-link","5.nuxt-module\u002F4.cwa-components\u002F3.cwa-link",{"title":200,"path":201,"stem":202},"\u003CCwaImage \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-image","5.nuxt-module\u002F4.cwa-components\u002F4.cwa-image",{"title":204,"path":205,"stem":206},"\u003CCwaDefaultLayout \u002F>","\u002Fnuxt-module\u002Fcwa-components\u002Fcwa-default-layout","5.nuxt-module\u002F4.cwa-components\u002F5.cwa-default-layout",{"title":208,"path":209,"stem":210},"The useCwa() API","\u002Fnuxt-module\u002Fcwa-api","5.nuxt-module\u002F5.cwa-api",{"title":212,"path":213,"stem":214,"children":215,"page":35},"Composables","\u002Fnuxt-module\u002Fcomposables","5.nuxt-module\u002F6.composables",[216,224,261,278],{"title":217,"path":218,"stem":219,"children":220,"page":35},"Layout","\u002Fnuxt-module\u002Fcomposables\u002Flayout","5.nuxt-module\u002F6.composables\u002F0.layout",[221],{"title":217,"path":222,"stem":223},"\u002Fnuxt-module\u002Fcomposables\u002Flayout\u002Fuse-cwa-layout","5.nuxt-module\u002F6.composables\u002F0.layout\u002F1.use-cwa-layout",{"title":225,"path":226,"stem":227,"children":228,"page":35},"Component","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent","5.nuxt-module\u002F6.composables\u002F1.component",[229,233,237,241,245,249,253,257],{"title":230,"path":231,"stem":232},"Component (recommended)","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-component","5.nuxt-module\u002F6.composables\u002F1.component\u002F0.use-cwa-component",{"title":234,"path":235,"stem":236},"Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F1.use-cwa-resource",{"title":238,"path":239,"stem":240},"Collection Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-collection-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F2.use-cwa-collection-resource",{"title":242,"path":243,"stem":244},"Image Resource","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-image-resource","5.nuxt-module\u002F6.composables\u002F1.component\u002F3.use-cwa-image-resource",{"title":246,"path":247,"stem":248},"Form","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form","5.nuxt-module\u002F6.composables\u002F1.component\u002F4.use-cwa-form",{"title":250,"path":251,"stem":252},"Form Input","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-input","5.nuxt-module\u002F6.composables\u002F1.component\u002F5.use-cwa-form-input",{"title":254,"path":255,"stem":256},"Form Repeated","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-repeated","5.nuxt-module\u002F6.composables\u002F1.component\u002F6.use-cwa-form-repeated",{"title":258,"path":259,"stem":260},"Form Collection","\u002Fnuxt-module\u002Fcomposables\u002Fcomponent\u002Fuse-cwa-form-collection","5.nuxt-module\u002F6.composables\u002F1.component\u002F7.use-cwa-form-collection",{"title":262,"path":263,"stem":264,"children":265,"page":35},"Admin Manager","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager","5.nuxt-module\u002F6.composables\u002F2.admin-manager",[266,270,274],{"title":267,"path":268,"stem":269},"Manager Tab","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-manager-tab","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F1.use-cwa-resource-manager-tab",{"title":271,"path":272,"stem":273},"Resource Model","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-model","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F2.use-cwa-resource-model",{"title":275,"path":276,"stem":277},"Resource Upload","\u002Fnuxt-module\u002Fcomposables\u002Fadmin-manager\u002Fuse-cwa-resource-upload","5.nuxt-module\u002F6.composables\u002F2.admin-manager\u002F3.use-cwa-resource-upload",{"title":279,"path":280,"stem":281,"children":282,"page":35},"Utilities","\u002Fnuxt-module\u002Fcomposables\u002Futilities","5.nuxt-module\u002F6.composables\u002F3.utilities",[283,287,291],{"title":284,"path":285,"stem":286},"Resource Endpoint","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-endpoint","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F1.use-cwa-resource-endpoint",{"title":288,"path":289,"stem":290},"Query Model","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-query-bound-model","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F2.use-query-bound-model",{"title":292,"path":293,"stem":294},"Resource Route","\u002Fnuxt-module\u002Fcomposables\u002Futilities\u002Fuse-cwa-resource-route","5.nuxt-module\u002F6.composables\u002F3.utilities\u002F3.use-cwa-resource-route",{"title":296,"path":297,"stem":298,"children":299,"page":35},"Component Helpers","\u002Fnuxt-module\u002Fcomponent-helpers","5.nuxt-module\u002F7.component-helpers",[300,304,308,312,316],{"title":301,"path":302,"stem":303},"Images & Media","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fimages-and-uploads","5.nuxt-module\u002F7.component-helpers\u002F1.images-and-uploads",{"title":305,"path":306,"stem":307},"Collections & Pagination","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fcollections-and-pagination","5.nuxt-module\u002F7.component-helpers\u002F2.collections-and-pagination",{"title":309,"path":310,"stem":311},"HTML Content","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fhtml-content","5.nuxt-module\u002F7.component-helpers\u002F3.html-content",{"title":313,"path":314,"stem":315},"Real-Time Updates","\u002Fnuxt-module\u002Fcomponent-helpers\u002Freal-time-updates","5.nuxt-module\u002F7.component-helpers\u002F4.real-time-updates",{"title":317,"path":318,"stem":319},"Forms","\u002Fnuxt-module\u002Fcomponent-helpers\u002Fforms","5.nuxt-module\u002F7.component-helpers\u002F5.forms",{"title":321,"path":322,"stem":323},"Authentication","\u002Fnuxt-module\u002Fauthentication","5.nuxt-module\u002F8.authentication",{"title":325,"path":326,"stem":327,"children":328,"page":35},"Cwa Layer","\u002Fnuxt-module\u002Fcwa-layer","5.nuxt-module\u002F9.cwa-layer",[329,333,337],{"title":330,"path":331,"stem":332},"Overview","\u002Fnuxt-module\u002Fcwa-layer\u002Foverview","5.nuxt-module\u002F9.cwa-layer\u002F1.overview",{"title":334,"path":335,"stem":336},"Auth Pages","\u002Fnuxt-module\u002Fcwa-layer\u002Fauth-pages","5.nuxt-module\u002F9.cwa-layer\u002F2.auth-pages",{"title":338,"path":339,"stem":340},"Admin Panel","\u002Fnuxt-module\u002Fcwa-layer\u002Fadmin-panel","5.nuxt-module\u002F9.cwa-layer\u002F3.admin-panel",{"title":342,"path":343,"stem":344,"children":345,"page":35},"Deployment","\u002Fdeployment","6.deployment",[346,350,354],{"title":347,"path":348,"stem":349},"Docker","\u002Fdeployment\u002Fdocker","6.deployment\u002F1.docker",{"title":351,"path":352,"stem":353},"Kubernetes & Helm","\u002Fdeployment\u002Fkubernetes","6.deployment\u002F2.kubernetes",{"title":355,"path":356,"stem":357},"CI\u002FCD","\u002Fdeployment\u002Fci-cd","6.deployment\u002F3.ci-cd",{"id":359,"title":125,"badge":360,"body":363,"description":6099,"extension":6100,"links":6101,"meta":6102,"navigation":449,"path":126,"seo":6103,"stem":127,"__hash__":6104},"docs\u002F4.api\u002F5.data-fixtures.md",{"label":361,"color":362},"Draft","amber",{"type":364,"value":365,"toc":6060},"minimark",[366,375,380,387,416,427,718,744,759,807,810,823,826,830,836,898,901,956,969,973,1119,1122,1195,1201,1468,1474,1577,1584,1614,1620,1650,1657,1663,1693,1696,1701,1730,1748,1752,1772,1792,1794,1798,1807,1911,1923,2031,2045,2053,2174,2186,2358,2366,2425,2435,2683,2694,2780,2789,2805,2934,2942,3019,3035,3040,3045,3229,3231,3238,3255,3258,3415,3425,3427,3431,3437,3523,3529,3531,3535,3538,4551,4553,4557,4656,4658,4662,4673,5043,5051,5055,5240,5244,5311,5318,5329,5414,5418,5439,5449,5455,5612,5616,5737,5741,5752,5886,5890,5992,6015,6017,6021,6056],[367,368,369,370,374],"p",{},"The API bundle ships a fluent fixture scaffold that handles all the complexity of seeding CWA data: entity persistence ordering, phase-aware flushing, route generation, and ComponentPosition wiring. You describe what you want, call ",[371,372,373],"code",{},"flush()",", and the builder handles the rest.",[376,377,379],"h2",{"id":378},"setup","Setup",[367,381,382,383,386],{},"Install ",[371,384,385],{},"doctrine\u002Fdoctrine-fixtures-bundle"," if not already present:",[388,389,394],"pre",{"className":390,"code":391,"language":392,"meta":393,"style":393},"language-bash shiki shiki-themes github-light github-dark material-theme-palenight","composer require --dev doctrine\u002Fdoctrine-fixtures-bundle\n","bash","",[371,395,396],{"__ignoreMap":393},[397,398,401,405,409,413],"span",{"class":399,"line":400},"line",1,[397,402,404],{"class":403},"sRCss","composer",[397,406,408],{"class":407},"sLL54"," require",[397,410,412],{"class":411},"szhYu"," --dev",[397,414,415],{"class":407}," doctrine\u002Fdoctrine-fixtures-bundle\n",[367,417,418,419,422,423,426],{},"Extend ",[371,420,421],{},"AbstractCwaScaffold"," instead of implementing ",[371,424,425],{},"FixtureInterface"," directly:",[388,428,432],{"className":429,"code":430,"language":431,"meta":393,"style":393},"language-php shiki shiki-themes github-light github-dark material-theme-palenight","\u003C?php\n\nnamespace App\\DataFixtures;\n\nuse Silverback\\ApiComponentsBundle\\Fixture\\AbstractCwaScaffold;\nuse Silverback\\ApiComponentsBundle\\Fixture\\CwaFixtureBuilder;\n\nclass AppFixtures extends AbstractCwaScaffold\n{\n    public function build(CwaFixtureBuilder $cwa): void\n    {\n        $cwa->layout('main', 'Primary');\n        $cwa->page('home', 'PrimaryPageTemplate', layout: 'main', route: '\u002F');\n        $cwa->flush();\n    }\n}\n","php",[371,433,434,444,451,472,477,503,525,530,546,552,587,593,632,691,706,712],{"__ignoreMap":393},[397,435,436,440],{"class":399,"line":400},[397,437,439],{"class":438},"sVlFx","\u003C?",[397,441,443],{"class":442},"sc2zw","php\n",[397,445,447],{"class":399,"line":446},2,[397,448,450],{"emptyLinePlaceholder":449},true,"\n",[397,452,454,458,461,465,468],{"class":399,"line":453},3,[397,455,457],{"class":456},"stmX-","namespace",[397,459,460],{"class":403}," App",[397,462,464],{"class":463},"sn4go","\\",[397,466,467],{"class":403},"DataFixtures",[397,469,471],{"class":470},"sOvfz",";\n",[397,473,475],{"class":399,"line":474},4,[397,476,450],{"emptyLinePlaceholder":449},[397,478,480,483,486,489,492,494,497,499,501],{"class":399,"line":479},5,[397,481,482],{"class":456},"use",[397,484,485],{"class":442}," Silverback",[397,487,464],{"class":488},"sBtbT",[397,490,491],{"class":442},"ApiComponentsBundle",[397,493,464],{"class":488},[397,495,496],{"class":442},"Fixture",[397,498,464],{"class":488},[397,500,421],{"class":442},[397,502,471],{"class":470},[397,504,506,508,510,512,514,516,518,520,523],{"class":399,"line":505},6,[397,507,482],{"class":456},[397,509,485],{"class":442},[397,511,464],{"class":488},[397,513,491],{"class":442},[397,515,464],{"class":488},[397,517,496],{"class":442},[397,519,464],{"class":488},[397,521,522],{"class":442},"CwaFixtureBuilder",[397,524,471],{"class":470},[397,526,528],{"class":399,"line":527},7,[397,529,450],{"emptyLinePlaceholder":449},[397,531,533,537,540,543],{"class":399,"line":532},8,[397,534,536],{"class":535},"swB56","class",[397,538,539],{"class":403}," AppFixtures",[397,541,542],{"class":535}," extends",[397,544,545],{"class":403}," AbstractCwaScaffold\n",[397,547,549],{"class":399,"line":548},9,[397,550,551],{"class":470},"{\n",[397,553,555,558,561,565,568,571,574,578,581,584],{"class":399,"line":554},10,[397,556,557],{"class":535},"    public",[397,559,560],{"class":535}," function",[397,562,564],{"class":563},"sKpYG"," build",[397,566,567],{"class":470},"(",[397,569,522],{"class":570},"sbW4m",[397,572,573],{"class":470}," $",[397,575,577],{"class":576},"sPB8G","cwa",[397,579,580],{"class":470},")",[397,582,583],{"class":438},":",[397,585,586],{"class":456}," void\n",[397,588,590],{"class":399,"line":589},11,[397,591,592],{"class":470},"    {\n",[397,594,596,599,601,604,607,609,613,616,618,621,624,627,629],{"class":399,"line":595},12,[397,597,598],{"class":470},"        $",[397,600,577],{"class":576},[397,602,603],{"class":438},"->",[397,605,606],{"class":563},"layout",[397,608,567],{"class":470},[397,610,612],{"class":611},"seSrl","'",[397,614,615],{"class":407},"main",[397,617,612],{"class":611},[397,619,620],{"class":470},",",[397,622,623],{"class":611}," '",[397,625,626],{"class":407},"Primary",[397,628,612],{"class":611},[397,630,631],{"class":470},");\n",[397,633,635,637,639,641,644,646,648,651,653,655,657,660,662,664,667,669,671,673,675,677,680,682,684,687,689],{"class":399,"line":634},13,[397,636,598],{"class":470},[397,638,577],{"class":576},[397,640,603],{"class":438},[397,642,643],{"class":563},"page",[397,645,567],{"class":470},[397,647,612],{"class":611},[397,649,650],{"class":407},"home",[397,652,612],{"class":611},[397,654,620],{"class":470},[397,656,623],{"class":611},[397,658,659],{"class":407},"PrimaryPageTemplate",[397,661,612],{"class":611},[397,663,620],{"class":470},[397,665,666],{"class":403}," layout",[397,668,583],{"class":470},[397,670,623],{"class":611},[397,672,615],{"class":407},[397,674,612],{"class":611},[397,676,620],{"class":470},[397,678,679],{"class":403}," route",[397,681,583],{"class":470},[397,683,623],{"class":611},[397,685,686],{"class":407},"\u002F",[397,688,612],{"class":611},[397,690,631],{"class":470},[397,692,694,696,698,700,703],{"class":399,"line":693},14,[397,695,598],{"class":470},[397,697,577],{"class":576},[397,699,603],{"class":438},[397,701,702],{"class":563},"flush",[397,704,705],{"class":470},"();\n",[397,707,709],{"class":399,"line":708},15,[397,710,711],{"class":470},"    }\n",[397,713,715],{"class":399,"line":714},16,[397,716,717],{"class":470},"}\n",[367,719,720,722,723,725,726,729,730,733,734,737,738,740,741,743],{},[371,721,421],{}," implements ",[371,724,425],{},". Its ",[371,727,728],{},"load()"," method injects the ",[371,731,732],{},"ObjectManager",", calls your ",[371,735,736],{},"build()",", then calls ",[371,739,373],{}," again. ",[371,742,522],{}," is injected automatically via Symfony's service container.",[367,745,746,747,750,751,754,755,758],{},"With ",[371,748,749],{},"autoconfigure: true"," (the Symfony default), your fixture class is detected and tagged as a Doctrine fixture automatically — no ",[371,752,753],{},"services.yaml"," entry needed. If ",[371,756,757],{},"autoconfigure"," is disabled, register manually:",[388,760,764],{"className":761,"code":762,"language":763,"meta":393,"style":393},"language-yaml shiki shiki-themes github-light github-dark material-theme-palenight","# config\u002Fservices.yaml\nApp\\DataFixtures\\AppFixtures:\n    tags:\n        - { name: doctrine.fixture.orm }\n","yaml",[371,765,766,772,781,788],{"__ignoreMap":393},[397,767,768],{"class":399,"line":400},[397,769,771],{"class":770},"sTBSN","# config\u002Fservices.yaml\n",[397,773,774,778],{"class":399,"line":446},[397,775,777],{"class":776},"s-h7I","App\\DataFixtures\\AppFixtures",[397,779,780],{"class":470},":\n",[397,782,783,786],{"class":399,"line":453},[397,784,785],{"class":776},"    tags",[397,787,780],{"class":470},[397,789,790,793,796,799,801,804],{"class":399,"line":474},[397,791,792],{"class":470},"        -",[397,794,795],{"class":470}," {",[397,797,798],{"class":776}," name",[397,800,583],{"class":470},[397,802,803],{"class":407}," doctrine.fixture.orm",[397,805,806],{"class":470}," }\n",[367,808,809],{},"Run your fixtures:",[388,811,813],{"className":390,"code":812,"language":392,"meta":393,"style":393},"bin\u002Fconsole doctrine:fixtures:load\n",[371,814,815],{"__ignoreMap":393},[397,816,817,820],{"class":399,"line":400},[397,818,819],{"class":403},"bin\u002Fconsole",[397,821,822],{"class":407}," doctrine:fixtures:load\n",[824,825],"hr",{},[376,827,829],{"id":828},"the-builder-api","The Builder API",[831,832,833],"h3",{"id":606},[371,834,835],{},"layout()",[388,837,839],{"className":429,"code":838,"language":431,"meta":393,"style":393},"$cwa->layout(string $ref, string $uiComponent, ?array $uiClassNames = null): LayoutBuilder\n",[371,840,841],{"__ignoreMap":393},[397,842,843,846,848,850,852,854,857,859,862,864,867,869,872,874,877,880,882,885,888,891,893,895],{"class":399,"line":400},[397,844,845],{"class":470},"$",[397,847,577],{"class":576},[397,849,603],{"class":438},[397,851,606],{"class":563},[397,853,567],{"class":470},[397,855,856],{"class":535},"string",[397,858,573],{"class":470},[397,860,861],{"class":576},"ref",[397,863,620],{"class":470},[397,865,866],{"class":535}," string",[397,868,573],{"class":470},[397,870,871],{"class":576},"uiComponent",[397,873,620],{"class":470},[397,875,876],{"class":438}," ?",[397,878,879],{"class":535},"array",[397,881,573],{"class":470},[397,883,884],{"class":576},"uiClassNames ",[397,886,887],{"class":438},"=",[397,889,890],{"class":488}," null",[397,892,580],{"class":576},[397,894,583],{"class":438},[397,896,897],{"class":442}," LayoutBuilder\n",[367,899,900],{},"Creates (or retrieves if already registered) a Layout entity.",[902,903,904,915,942],"ul",{},[905,906,907,910,911,914],"li",{},[371,908,909],{},"$ref"," — a local key used to reference this layout in ",[371,912,913],{},"page()"," calls. Not stored in the database.",[905,916,917,920,921,925,926,929,930,933,934,937,938,941],{},[371,918,919],{},"$uiComponent"," — the ",[922,923,924],"strong",{},"suffix"," of the Vue component name in ",[371,927,928],{},"app\u002Fcwa\u002Flayouts\u002F",". The builder prepends ",[371,931,932],{},"CwaLayout"," automatically: ",[371,935,936],{},"'Primary'"," → stores ",[371,939,940],{},"CwaLayoutPrimary",".",[905,943,944,947,948,951,952,955],{},[371,945,946],{},"$uiClassNames"," — optional array of CSS class strings applied to the layout wrapper. These are the classes the admin can select from the \"Style\" picker (defined in your Nuxt component via ",[371,949,950],{},"useCwaComponent"," ",[371,953,954],{},"styles"," option).",[367,957,958,959,961,962,964,965,968],{},"Calling ",[371,960,835],{}," twice with the same ",[371,963,909],{}," returns the same ",[371,966,967],{},"LayoutBuilder"," — useful for adding groups across separate calls.",[831,970,971],{"id":643},[371,972,913],{},[388,974,976],{"className":429,"code":975,"language":431,"meta":393,"style":393},"$cwa->page(\n    string $ref,\n    string $uiComponent,\n    string $layout,\n    ?string $route = null,\n    ?string $routeName = null,\n    bool $isTemplate = false,\n    ?array $uiClassNames = null,\n    ?\\Closure $configure = null\n): PageBuilder\n",[371,977,978,991,1003,1013,1023,1041,1058,1075,1091,1110],{"__ignoreMap":393},[397,979,980,982,984,986,988],{"class":399,"line":400},[397,981,845],{"class":470},[397,983,577],{"class":576},[397,985,603],{"class":438},[397,987,643],{"class":563},[397,989,990],{"class":470},"(\n",[397,992,993,996,998,1000],{"class":399,"line":446},[397,994,995],{"class":535},"    string",[397,997,573],{"class":470},[397,999,861],{"class":576},[397,1001,1002],{"class":470},",\n",[397,1004,1005,1007,1009,1011],{"class":399,"line":453},[397,1006,995],{"class":535},[397,1008,573],{"class":470},[397,1010,871],{"class":576},[397,1012,1002],{"class":470},[397,1014,1015,1017,1019,1021],{"class":399,"line":474},[397,1016,995],{"class":535},[397,1018,573],{"class":470},[397,1020,606],{"class":576},[397,1022,1002],{"class":470},[397,1024,1025,1028,1030,1032,1035,1037,1039],{"class":399,"line":479},[397,1026,1027],{"class":438},"    ?",[397,1029,856],{"class":535},[397,1031,573],{"class":470},[397,1033,1034],{"class":576},"route ",[397,1036,887],{"class":438},[397,1038,890],{"class":488},[397,1040,1002],{"class":470},[397,1042,1043,1045,1047,1049,1052,1054,1056],{"class":399,"line":505},[397,1044,1027],{"class":438},[397,1046,856],{"class":535},[397,1048,573],{"class":470},[397,1050,1051],{"class":576},"routeName ",[397,1053,887],{"class":438},[397,1055,890],{"class":488},[397,1057,1002],{"class":470},[397,1059,1060,1063,1065,1068,1070,1073],{"class":399,"line":527},[397,1061,1062],{"class":535},"    bool",[397,1064,573],{"class":470},[397,1066,1067],{"class":576},"isTemplate ",[397,1069,887],{"class":438},[397,1071,1072],{"class":488}," false",[397,1074,1002],{"class":470},[397,1076,1077,1079,1081,1083,1085,1087,1089],{"class":399,"line":532},[397,1078,1027],{"class":438},[397,1080,879],{"class":535},[397,1082,573],{"class":470},[397,1084,884],{"class":576},[397,1086,887],{"class":438},[397,1088,890],{"class":488},[397,1090,1002],{"class":470},[397,1092,1093,1095,1097,1100,1102,1105,1107],{"class":399,"line":548},[397,1094,1027],{"class":438},[397,1096,464],{"class":576},[397,1098,1099],{"class":442},"Closure",[397,1101,573],{"class":470},[397,1103,1104],{"class":576},"configure ",[397,1106,887],{"class":438},[397,1108,1109],{"class":488}," null\n",[397,1111,1112,1114,1116],{"class":399,"line":554},[397,1113,580],{"class":576},[397,1115,583],{"class":438},[397,1117,1118],{"class":442}," PageBuilder\n",[367,1120,1121],{},"Creates a Page entity.",[902,1123,1124,1129,1147,1155,1161,1173,1179,1185],{},[905,1125,1126,1128],{},[371,1127,909],{}," — local key unique within this fixture",[905,1130,1131,920,1133,925,1135,929,1138,933,1141,937,1144,941],{},[371,1132,919],{},[922,1134,924],{},[371,1136,1137],{},"app\u002Fcwa\u002Fpages\u002F",[371,1139,1140],{},"CwaPage",[371,1142,1143],{},"'Blog'",[371,1145,1146],{},"CwaPageBlog",[905,1148,1149,920,1152,1154],{},[371,1150,1151],{},"$layout",[371,1153,909],{}," of a layout already registered in this builder",[905,1156,1157,1160],{},[371,1158,1159],{},"route"," — creates an explicit Route at this path; omit to auto-generate from the page title",[905,1162,1163,1166,1167,1170,1171],{},[371,1164,1165],{},"routeName"," — a name for ",[371,1168,1169],{},"getRoute()"," retrieval after ",[371,1172,373],{},[905,1174,1175,1178],{},[371,1176,1177],{},"isTemplate: true"," — marks the page as a template (no route is generated)",[905,1180,1181,1184],{},[371,1182,1183],{},"uiClassNames"," — optional array of CSS class strings for the page wrapper (same \"Style\" field the admin selects)",[905,1186,1187,1190,1191,1194],{},[371,1188,1189],{},"configure"," — optional closure called immediately with the ",[371,1192,1193],{},"PageBuilder",", for inline configuration",[367,1196,1197,1198,1200],{},"The ",[371,1199,1189],{}," closure is equivalent to chaining on the returned builder, but keeps setup co-located with the call — useful when creating multiple pages or when you don't need to reference the builder later:",[388,1202,1204],{"className":429,"code":1203,"language":431,"meta":393,"style":393},"\u002F\u002F Using configure closure — inline, no variable needed\n$cwa->page('home', 'PrimaryPageTemplate', layout: 'main', route: '\u002F',\n    configure: function (PageBuilder $builder) use ($hero): void {\n        $builder->title('Home')\n            ->group('hero')->add($hero);\n    }\n);\n\n\u002F\u002F Equivalent chained form\n$cwa->page('home', 'PrimaryPageTemplate', layout: 'main', route: '\u002F')\n    ->title('Home')\n    ->group('hero')->add($hero);\n",[371,1205,1206,1211,1263,1303,1326,1356,1360,1364,1368,1373,1425,1442],{"__ignoreMap":393},[397,1207,1208],{"class":399,"line":400},[397,1209,1210],{"class":770},"\u002F\u002F Using configure closure — inline, no variable needed\n",[397,1212,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259,1261],{"class":399,"line":446},[397,1214,845],{"class":470},[397,1216,577],{"class":576},[397,1218,603],{"class":438},[397,1220,643],{"class":563},[397,1222,567],{"class":470},[397,1224,612],{"class":611},[397,1226,650],{"class":407},[397,1228,612],{"class":611},[397,1230,620],{"class":470},[397,1232,623],{"class":611},[397,1234,659],{"class":407},[397,1236,612],{"class":611},[397,1238,620],{"class":470},[397,1240,666],{"class":403},[397,1242,583],{"class":470},[397,1244,623],{"class":611},[397,1246,615],{"class":407},[397,1248,612],{"class":611},[397,1250,620],{"class":470},[397,1252,679],{"class":403},[397,1254,583],{"class":470},[397,1256,623],{"class":611},[397,1258,686],{"class":407},[397,1260,612],{"class":611},[397,1262,1002],{"class":470},[397,1264,1265,1268,1270,1272,1275,1277,1279,1282,1284,1287,1290,1293,1295,1297,1300],{"class":399,"line":453},[397,1266,1267],{"class":403},"    configure",[397,1269,583],{"class":470},[397,1271,560],{"class":535},[397,1273,1274],{"class":470}," (",[397,1276,1193],{"class":570},[397,1278,573],{"class":470},[397,1280,1281],{"class":576},"builder",[397,1283,580],{"class":470},[397,1285,1286],{"class":456}," use",[397,1288,1289],{"class":470}," ($",[397,1291,1292],{"class":576},"hero",[397,1294,580],{"class":470},[397,1296,583],{"class":438},[397,1298,1299],{"class":456}," void",[397,1301,1302],{"class":470}," {\n",[397,1304,1305,1307,1309,1311,1314,1316,1318,1321,1323],{"class":399,"line":474},[397,1306,598],{"class":470},[397,1308,1281],{"class":576},[397,1310,603],{"class":438},[397,1312,1313],{"class":563},"title",[397,1315,567],{"class":470},[397,1317,612],{"class":611},[397,1319,1320],{"class":407},"Home",[397,1322,612],{"class":611},[397,1324,1325],{"class":470},")\n",[397,1327,1328,1331,1334,1336,1338,1340,1342,1344,1346,1349,1352,1354],{"class":399,"line":479},[397,1329,1330],{"class":438},"            ->",[397,1332,1333],{"class":563},"group",[397,1335,567],{"class":470},[397,1337,612],{"class":611},[397,1339,1292],{"class":407},[397,1341,612],{"class":611},[397,1343,580],{"class":470},[397,1345,603],{"class":438},[397,1347,1348],{"class":563},"add",[397,1350,1351],{"class":470},"($",[397,1353,1292],{"class":576},[397,1355,631],{"class":470},[397,1357,1358],{"class":399,"line":505},[397,1359,711],{"class":470},[397,1361,1362],{"class":399,"line":527},[397,1363,631],{"class":470},[397,1365,1366],{"class":399,"line":532},[397,1367,450],{"emptyLinePlaceholder":449},[397,1369,1370],{"class":399,"line":548},[397,1371,1372],{"class":770},"\u002F\u002F Equivalent chained form\n",[397,1374,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423],{"class":399,"line":554},[397,1376,845],{"class":470},[397,1378,577],{"class":576},[397,1380,603],{"class":438},[397,1382,643],{"class":563},[397,1384,567],{"class":470},[397,1386,612],{"class":611},[397,1388,650],{"class":407},[397,1390,612],{"class":611},[397,1392,620],{"class":470},[397,1394,623],{"class":611},[397,1396,659],{"class":407},[397,1398,612],{"class":611},[397,1400,620],{"class":470},[397,1402,666],{"class":403},[397,1404,583],{"class":470},[397,1406,623],{"class":611},[397,1408,615],{"class":407},[397,1410,612],{"class":611},[397,1412,620],{"class":470},[397,1414,679],{"class":403},[397,1416,583],{"class":470},[397,1418,623],{"class":611},[397,1420,686],{"class":407},[397,1422,612],{"class":611},[397,1424,1325],{"class":470},[397,1426,1427,1430,1432,1434,1436,1438,1440],{"class":399,"line":589},[397,1428,1429],{"class":438},"    ->",[397,1431,1313],{"class":563},[397,1433,567],{"class":470},[397,1435,612],{"class":611},[397,1437,1320],{"class":407},[397,1439,612],{"class":611},[397,1441,1325],{"class":470},[397,1443,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466],{"class":399,"line":595},[397,1445,1429],{"class":438},[397,1447,1333],{"class":563},[397,1449,567],{"class":470},[397,1451,612],{"class":611},[397,1453,1292],{"class":407},[397,1455,612],{"class":611},[397,1457,580],{"class":470},[397,1459,603],{"class":438},[397,1461,1348],{"class":563},[397,1463,1351],{"class":470},[397,1465,1292],{"class":576},[397,1467,631],{"class":470},[831,1469,1471],{"id":1470},"pagedata",[371,1472,1473],{},"pageData()",[388,1475,1477],{"className":429,"code":1476,"language":431,"meta":393,"style":393},"$cwa->pageData(\n    AbstractPageData $pageData,\n    ?string $template = null,\n    ?string $route = null,\n    ?string $routeName = null,\n    ?\\Closure $configure = null\n): PageDataBuilder\n",[371,1478,1479,1492,1503,1520,1536,1552,1568],{"__ignoreMap":393},[397,1480,1481,1483,1485,1487,1490],{"class":399,"line":400},[397,1482,845],{"class":470},[397,1484,577],{"class":576},[397,1486,603],{"class":438},[397,1488,1489],{"class":563},"pageData",[397,1491,990],{"class":470},[397,1493,1494,1497,1499,1501],{"class":399,"line":446},[397,1495,1496],{"class":442},"    AbstractPageData",[397,1498,573],{"class":470},[397,1500,1489],{"class":576},[397,1502,1002],{"class":470},[397,1504,1505,1507,1509,1511,1514,1516,1518],{"class":399,"line":453},[397,1506,1027],{"class":438},[397,1508,856],{"class":535},[397,1510,573],{"class":470},[397,1512,1513],{"class":576},"template ",[397,1515,887],{"class":438},[397,1517,890],{"class":488},[397,1519,1002],{"class":470},[397,1521,1522,1524,1526,1528,1530,1532,1534],{"class":399,"line":474},[397,1523,1027],{"class":438},[397,1525,856],{"class":535},[397,1527,573],{"class":470},[397,1529,1034],{"class":576},[397,1531,887],{"class":438},[397,1533,890],{"class":488},[397,1535,1002],{"class":470},[397,1537,1538,1540,1542,1544,1546,1548,1550],{"class":399,"line":479},[397,1539,1027],{"class":438},[397,1541,856],{"class":535},[397,1543,573],{"class":470},[397,1545,1051],{"class":576},[397,1547,887],{"class":438},[397,1549,890],{"class":488},[397,1551,1002],{"class":470},[397,1553,1554,1556,1558,1560,1562,1564,1566],{"class":399,"line":505},[397,1555,1027],{"class":438},[397,1557,464],{"class":576},[397,1559,1099],{"class":442},[397,1561,573],{"class":470},[397,1563,1104],{"class":576},[397,1565,887],{"class":438},[397,1567,1109],{"class":488},[397,1569,1570,1572,1574],{"class":399,"line":527},[397,1571,580],{"class":576},[397,1573,583],{"class":438},[397,1575,1576],{"class":442}," PageDataBuilder\n",[367,1578,1579,1580,1583],{},"Wraps a ",[371,1581,1582],{},"PageData"," record (e.g. a blog article).",[902,1585,1586,1594,1604],{},[905,1587,1588,920,1591,1593],{},[371,1589,1590],{},"$template",[371,1592,909],{}," of the template page this data record uses",[905,1595,1596,1598,1599,1601,1602],{},[371,1597,1159],{}," \u002F ",[371,1600,1165],{}," — same as ",[371,1603,913],{},[905,1605,1606,1190,1608,1611,1612],{},[371,1607,1189],{},[371,1609,1610],{},"PageDataBuilder",", same inline pattern as ",[371,1613,913],{},[831,1615,1617],{"id":1616},"component",[371,1618,1619],{},"component()",[388,1621,1623],{"className":429,"code":1622,"language":431,"meta":393,"style":393},"$cwa->component(AbstractComponent $component): ComponentBuilder\n",[371,1624,1625],{"__ignoreMap":393},[397,1626,1627,1629,1631,1633,1635,1637,1640,1642,1644,1647],{"class":399,"line":400},[397,1628,845],{"class":470},[397,1630,577],{"class":576},[397,1632,603],{"class":438},[397,1634,1616],{"class":563},[397,1636,567],{"class":470},[397,1638,1639],{"class":442},"AbstractComponent",[397,1641,573],{"class":470},[397,1643,1616],{"class":576},[397,1645,1646],{"class":470},"):",[397,1648,1649],{"class":442}," ComponentBuilder\n",[367,1651,1652,1653,1656],{},"Registers a component entity with the builder. The component is persisted in Phase 1. Returns a ",[371,1654,1655],{},"ComponentBuilder"," for adding child groups.",[831,1658,1660],{"id":1659},"persist",[371,1661,1662],{},"persist()",[388,1664,1666],{"className":429,"code":1665,"language":431,"meta":393,"style":393},"$cwa->persist(object $entity): static\n",[371,1667,1668],{"__ignoreMap":393},[397,1669,1670,1672,1674,1676,1678,1680,1683,1685,1688,1690],{"class":399,"line":400},[397,1671,845],{"class":470},[397,1673,577],{"class":576},[397,1675,603],{"class":438},[397,1677,1659],{"class":563},[397,1679,567],{"class":470},[397,1681,1682],{"class":535},"object",[397,1684,573],{"class":470},[397,1686,1687],{"class":576},"entity",[397,1689,1646],{"class":470},[397,1691,1692],{"class":535}," static\n",[367,1694,1695],{},"Explicitly persist any non-CWA entity (custom relations, settings, etc.). Walks owning-side associations and persists related objects recursively.",[831,1697,1699],{"id":1698},"getroute",[371,1700,1169],{},[388,1702,1704],{"className":429,"code":1703,"language":431,"meta":393,"style":393},"$cwa->getRoute(string $routeName): Route\n",[371,1705,1706],{"__ignoreMap":393},[397,1707,1708,1710,1712,1714,1717,1719,1721,1723,1725,1727],{"class":399,"line":400},[397,1709,845],{"class":470},[397,1711,577],{"class":576},[397,1713,603],{"class":438},[397,1715,1716],{"class":563},"getRoute",[397,1718,567],{"class":470},[397,1720,856],{"class":535},[397,1722,573],{"class":470},[397,1724,1165],{"class":576},[397,1726,1646],{"class":470},[397,1728,1729],{"class":442}," Route\n",[367,1731,1732,1733,1736,1737,1739,1740,1743,1744,1747],{},"Returns a named ",[371,1734,1735],{},"Route"," after ",[371,1738,373],{},". Throws ",[371,1741,1742],{},"LogicException"," if called before routes have been created. Use to retrieve a route and assign it to a ",[371,1745,1746],{},"NavigationLink"," component.",[831,1749,1750],{"id":702},[371,1751,373],{},[388,1753,1755],{"className":429,"code":1754,"language":431,"meta":393,"style":393},"$cwa->flush(): void\n",[371,1756,1757],{"__ignoreMap":393},[397,1758,1759,1761,1763,1765,1767,1770],{"class":399,"line":400},[397,1760,845],{"class":470},[397,1762,577],{"class":576},[397,1764,603],{"class":438},[397,1766,702],{"class":563},[397,1768,1769],{"class":470},"():",[397,1771,586],{"class":442},[367,1773,1774,1775,1780,1781,1784,1785,1787,1788,1791],{},"Triggers the full persistence sequence (see ",[1776,1777,1779],"a",{"href":1778},"#flush-phases","below","). Call it at least once — and call it again any time you register new entities or positions after the first call. All phases are idempotent: already-processed entities, nested closures, and ",[371,1782,1783],{},"onRoutesCreated"," callbacks are tracked internally and skipped on subsequent calls. Only work added since the previous ",[371,1786,373],{}," is processed, and the underlying ",[371,1789,1790],{},"EntityManager::flush()"," is only called when something actually changed.",[824,1793],{},[376,1795,1797],{"id":1796},"sub-builder-apis","Sub-builder APIs",[831,1799,1801,1803,1804],{"id":1800},"layoutbuilder-from-cwa-layout",[371,1802,967],{}," — from ",[371,1805,1806],{},"$cwa->layout()",[388,1808,1810],{"className":429,"code":1809,"language":431,"meta":393,"style":393},"->uiClassNames(string ...$classes): self\n->group(\n    string $name,\n    array $allow = [],\n    ?\\Closure $configure = null,\n    ?string $locationReference = null\n): GroupBuilder\n",[371,1811,1812,1835,1843,1854,1869,1887,1902],{"__ignoreMap":393},[397,1813,1814,1816,1818,1820,1822,1825,1827,1830,1832],{"class":399,"line":400},[397,1815,603],{"class":438},[397,1817,1183],{"class":563},[397,1819,567],{"class":470},[397,1821,856],{"class":535},[397,1823,1824],{"class":438}," ...",[397,1826,845],{"class":470},[397,1828,1829],{"class":576},"classes",[397,1831,1646],{"class":470},[397,1833,1834],{"class":535}," self\n",[397,1836,1837,1839,1841],{"class":399,"line":446},[397,1838,603],{"class":438},[397,1840,1333],{"class":563},[397,1842,990],{"class":470},[397,1844,1845,1847,1849,1852],{"class":399,"line":453},[397,1846,995],{"class":535},[397,1848,573],{"class":470},[397,1850,1851],{"class":576},"name",[397,1853,1002],{"class":470},[397,1855,1856,1859,1861,1864,1866],{"class":399,"line":474},[397,1857,1858],{"class":535},"    array",[397,1860,573],{"class":470},[397,1862,1863],{"class":576},"allow ",[397,1865,887],{"class":438},[397,1867,1868],{"class":470}," [],\n",[397,1870,1871,1873,1875,1877,1879,1881,1883,1885],{"class":399,"line":479},[397,1872,1027],{"class":438},[397,1874,464],{"class":576},[397,1876,1099],{"class":442},[397,1878,573],{"class":470},[397,1880,1104],{"class":576},[397,1882,887],{"class":438},[397,1884,890],{"class":488},[397,1886,1002],{"class":470},[397,1888,1889,1891,1893,1895,1898,1900],{"class":399,"line":505},[397,1890,1027],{"class":438},[397,1892,856],{"class":535},[397,1894,573],{"class":470},[397,1896,1897],{"class":576},"locationReference ",[397,1899,887],{"class":438},[397,1901,1109],{"class":488},[397,1903,1904,1906,1908],{"class":399,"line":527},[397,1905,580],{"class":576},[397,1907,583],{"class":438},[397,1909,1910],{"class":442}," GroupBuilder\n",[367,1912,1913,1916,1917,1919,1920,1922],{},[371,1914,1915],{},"uiClassNames()"," sets the CSS classes on the layout after construction — equivalent to passing ",[371,1918,946],{}," to ",[371,1921,835],{}," directly, but useful when chaining or configuring an already-retrieved builder:",[388,1924,1926],{"className":429,"code":1925,"language":431,"meta":393,"style":393},"$cwa->layout('main', 'Primary')\n    ->uiClassNames('bg-stone-900', 'text-white')\n    ->group('nav', allow: [NavigationLink::class], locationReference: 'global-nav');\n",[371,1927,1928,1956,1982],{"__ignoreMap":393},[397,1929,1930,1932,1934,1936,1938,1940,1942,1944,1946,1948,1950,1952,1954],{"class":399,"line":400},[397,1931,845],{"class":470},[397,1933,577],{"class":576},[397,1935,603],{"class":438},[397,1937,606],{"class":563},[397,1939,567],{"class":470},[397,1941,612],{"class":611},[397,1943,615],{"class":407},[397,1945,612],{"class":611},[397,1947,620],{"class":470},[397,1949,623],{"class":611},[397,1951,626],{"class":407},[397,1953,612],{"class":611},[397,1955,1325],{"class":470},[397,1957,1958,1960,1962,1964,1966,1969,1971,1973,1975,1978,1980],{"class":399,"line":446},[397,1959,1429],{"class":438},[397,1961,1183],{"class":563},[397,1963,567],{"class":470},[397,1965,612],{"class":611},[397,1967,1968],{"class":407},"bg-stone-900",[397,1970,612],{"class":611},[397,1972,620],{"class":470},[397,1974,623],{"class":611},[397,1976,1977],{"class":407},"text-white",[397,1979,612],{"class":611},[397,1981,1325],{"class":470},[397,1983,1984,1986,1988,1990,1992,1995,1997,1999,2002,2004,2007,2009,2012,2014,2017,2020,2022,2024,2027,2029],{"class":399,"line":453},[397,1985,1429],{"class":438},[397,1987,1333],{"class":563},[397,1989,567],{"class":470},[397,1991,612],{"class":611},[397,1993,1994],{"class":407},"nav",[397,1996,612],{"class":611},[397,1998,620],{"class":470},[397,2000,2001],{"class":403}," allow",[397,2003,583],{"class":470},[397,2005,2006],{"class":470}," [",[397,2008,1746],{"class":570},[397,2010,2011],{"class":438},"::",[397,2013,536],{"class":456},[397,2015,2016],{"class":470},"],",[397,2018,2019],{"class":403}," locationReference",[397,2021,583],{"class":470},[397,2023,623],{"class":611},[397,2025,2026],{"class":407},"global-nav",[397,2028,612],{"class":611},[397,2030,631],{"class":470},[367,2032,2033,2036,2037,2040,2041,2044],{},[371,2034,2035],{},"group()"," creates a ",[371,2038,2039],{},"ComponentGroup"," linked to this layout. ",[371,2042,2043],{},"$allow"," is an array of component class names to restrict what admins can add. Leave empty to allow all types.",[831,2046,2048,1803,2050],{"id":2047},"pagebuilder-from-cwa-page",[371,2049,1193],{},[371,2051,2052],{},"$cwa->page()",[388,2054,2056],{"className":429,"code":2055,"language":431,"meta":393,"style":393},"->title(string $title): self\n->metaDescription(string $description): self\n->uiClassNames(string ...$classes): self\n->group(string $name, ...): GroupBuilder\n->nested(\\Closure $configure): void\n->getRoute(): ?Route    \u002F\u002F available after flush()\n",[371,2057,2058,2076,2096,2116,2138,2159],{"__ignoreMap":393},[397,2059,2060,2062,2064,2066,2068,2070,2072,2074],{"class":399,"line":400},[397,2061,603],{"class":438},[397,2063,1313],{"class":563},[397,2065,567],{"class":470},[397,2067,856],{"class":535},[397,2069,573],{"class":470},[397,2071,1313],{"class":576},[397,2073,1646],{"class":470},[397,2075,1834],{"class":535},[397,2077,2078,2080,2083,2085,2087,2089,2092,2094],{"class":399,"line":446},[397,2079,603],{"class":438},[397,2081,2082],{"class":563},"metaDescription",[397,2084,567],{"class":470},[397,2086,856],{"class":535},[397,2088,573],{"class":470},[397,2090,2091],{"class":576},"description",[397,2093,1646],{"class":470},[397,2095,1834],{"class":535},[397,2097,2098,2100,2102,2104,2106,2108,2110,2112,2114],{"class":399,"line":453},[397,2099,603],{"class":438},[397,2101,1183],{"class":563},[397,2103,567],{"class":470},[397,2105,856],{"class":535},[397,2107,1824],{"class":438},[397,2109,845],{"class":470},[397,2111,1829],{"class":576},[397,2113,1646],{"class":470},[397,2115,1834],{"class":535},[397,2117,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136],{"class":399,"line":474},[397,2119,603],{"class":438},[397,2121,1333],{"class":563},[397,2123,567],{"class":470},[397,2125,856],{"class":535},[397,2127,573],{"class":470},[397,2129,1851],{"class":576},[397,2131,620],{"class":470},[397,2133,1824],{"class":438},[397,2135,1646],{"class":470},[397,2137,1910],{"class":442},[397,2139,2140,2142,2145,2147,2149,2151,2153,2155,2157],{"class":399,"line":479},[397,2141,603],{"class":438},[397,2143,2144],{"class":563},"nested",[397,2146,567],{"class":470},[397,2148,464],{"class":576},[397,2150,1099],{"class":442},[397,2152,573],{"class":470},[397,2154,1189],{"class":576},[397,2156,1646],{"class":470},[397,2158,586],{"class":442},[397,2160,2161,2163,2165,2167,2169,2171],{"class":399,"line":505},[397,2162,603],{"class":438},[397,2164,1716],{"class":563},[397,2166,1769],{"class":470},[397,2168,876],{"class":438},[397,2170,1735],{"class":442},[397,2172,2173],{"class":770},"    \u002F\u002F available after flush()\n",[367,2175,2176,2179,2180,2182,2183,2185],{},[371,2177,2178],{},"nested()"," receives a ",[371,2181,522],{}," scoped to this page as parent, for creating child ",[371,2184,1582],{}," records:",[388,2187,2189],{"className":429,"code":2188,"language":431,"meta":393,"style":393},"$cwa->page('blog-template', 'BlogPageTemplate', layout: 'main', isTemplate: true)\n    ->nested(function (CwaFixtureBuilder $child): void {\n        $article = new BlogArticle();\n        $article->title = 'First Post';\n        $child->pageData($article, template: 'blog-template', route: '\u002Fblog\u002Ffirst-post');\n    });\n",[371,2190,2191,2243,2271,2288,2311,2353],{"__ignoreMap":393},[397,2192,2193,2195,2197,2199,2201,2203,2205,2208,2210,2212,2214,2217,2219,2221,2223,2225,2227,2229,2231,2233,2236,2238,2241],{"class":399,"line":400},[397,2194,845],{"class":470},[397,2196,577],{"class":576},[397,2198,603],{"class":438},[397,2200,643],{"class":563},[397,2202,567],{"class":470},[397,2204,612],{"class":611},[397,2206,2207],{"class":407},"blog-template",[397,2209,612],{"class":611},[397,2211,620],{"class":470},[397,2213,623],{"class":611},[397,2215,2216],{"class":407},"BlogPageTemplate",[397,2218,612],{"class":611},[397,2220,620],{"class":470},[397,2222,666],{"class":403},[397,2224,583],{"class":470},[397,2226,623],{"class":611},[397,2228,615],{"class":407},[397,2230,612],{"class":611},[397,2232,620],{"class":470},[397,2234,2235],{"class":403}," isTemplate",[397,2237,583],{"class":470},[397,2239,2240],{"class":488}," true",[397,2242,1325],{"class":470},[397,2244,2245,2247,2249,2251,2254,2256,2258,2260,2263,2265,2267,2269],{"class":399,"line":446},[397,2246,1429],{"class":438},[397,2248,2144],{"class":563},[397,2250,567],{"class":470},[397,2252,2253],{"class":535},"function",[397,2255,1274],{"class":470},[397,2257,522],{"class":570},[397,2259,573],{"class":470},[397,2261,2262],{"class":576},"child",[397,2264,580],{"class":470},[397,2266,583],{"class":438},[397,2268,1299],{"class":456},[397,2270,1302],{"class":470},[397,2272,2273,2275,2278,2280,2283,2286],{"class":399,"line":453},[397,2274,598],{"class":470},[397,2276,2277],{"class":576},"article ",[397,2279,887],{"class":438},[397,2281,2282],{"class":456}," new",[397,2284,2285],{"class":570}," BlogArticle",[397,2287,705],{"class":470},[397,2289,2290,2292,2295,2297,2300,2302,2304,2307,2309],{"class":399,"line":474},[397,2291,598],{"class":470},[397,2293,2294],{"class":576},"article",[397,2296,603],{"class":438},[397,2298,2299],{"class":576},"title ",[397,2301,887],{"class":438},[397,2303,623],{"class":611},[397,2305,2306],{"class":407},"First Post",[397,2308,612],{"class":611},[397,2310,471],{"class":470},[397,2312,2313,2315,2317,2319,2321,2323,2325,2327,2330,2332,2334,2336,2338,2340,2342,2344,2346,2349,2351],{"class":399,"line":479},[397,2314,598],{"class":470},[397,2316,2262],{"class":576},[397,2318,603],{"class":438},[397,2320,1489],{"class":563},[397,2322,1351],{"class":470},[397,2324,2294],{"class":576},[397,2326,620],{"class":470},[397,2328,2329],{"class":403}," template",[397,2331,583],{"class":470},[397,2333,623],{"class":611},[397,2335,2207],{"class":407},[397,2337,612],{"class":611},[397,2339,620],{"class":470},[397,2341,679],{"class":403},[397,2343,583],{"class":470},[397,2345,623],{"class":611},[397,2347,2348],{"class":407},"\u002Fblog\u002Ffirst-post",[397,2350,612],{"class":611},[397,2352,631],{"class":470},[397,2354,2355],{"class":399,"line":505},[397,2356,2357],{"class":470},"    });\n",[831,2359,2361,1803,2363],{"id":2360},"pagedatabuilder-from-cwa-pagedata",[371,2362,1610],{},[371,2364,2365],{},"$cwa->pageData()",[388,2367,2369],{"className":429,"code":2368,"language":431,"meta":393,"style":393},"->nested(\\Closure $configure): void\n->onRoutesCreated(\\Closure $cb): self\n->getRoute(): ?Route\n",[371,2370,2371,2391,2412],{"__ignoreMap":393},[397,2372,2373,2375,2377,2379,2381,2383,2385,2387,2389],{"class":399,"line":400},[397,2374,603],{"class":438},[397,2376,2144],{"class":563},[397,2378,567],{"class":470},[397,2380,464],{"class":576},[397,2382,1099],{"class":442},[397,2384,573],{"class":470},[397,2386,1189],{"class":576},[397,2388,1646],{"class":470},[397,2390,586],{"class":442},[397,2392,2393,2395,2397,2399,2401,2403,2405,2408,2410],{"class":399,"line":446},[397,2394,603],{"class":438},[397,2396,1783],{"class":563},[397,2398,567],{"class":470},[397,2400,464],{"class":576},[397,2402,1099],{"class":442},[397,2404,573],{"class":470},[397,2406,2407],{"class":576},"cb",[397,2409,1646],{"class":470},[397,2411,1834],{"class":535},[397,2413,2414,2416,2418,2420,2422],{"class":399,"line":453},[397,2415,603],{"class":438},[397,2417,1716],{"class":563},[397,2419,1769],{"class":470},[397,2421,876],{"class":438},[397,2423,2424],{"class":442},"Route\n",[367,2426,2427,2430,2431,2434],{},[371,2428,2429],{},"onRoutesCreated()"," fires after all child routes have been created. The closure receives ",[371,2432,2433],{},"array\u003CPageBuilder>"," of child page builders, useful for wiring nav links that target child URLs:",[388,2436,2438],{"className":429,"code":2437,"language":431,"meta":393,"style":393},"$cwa->pageData($section, template: 'section-template')\n    ->nested(function (CwaFixtureBuilder $child): void {\n        $child->pageData(new Article(), template: 'article-template', routeName: 'article-1');\n    })\n    ->onRoutesCreated(function (array $childBuilders) use ($cwa): void {\n        foreach ($childBuilders as $child) {\n            $link = new NavigationLink();\n            $link->route = $child->getRoute();\n            $cwa->component($link);\n        }\n        $cwa->flush();\n    });\n",[371,2439,2440,2470,2496,2544,2549,2584,2606,2623,2646,2662,2667,2679],{"__ignoreMap":393},[397,2441,2442,2444,2446,2448,2450,2452,2455,2457,2459,2461,2463,2466,2468],{"class":399,"line":400},[397,2443,845],{"class":470},[397,2445,577],{"class":576},[397,2447,603],{"class":438},[397,2449,1489],{"class":563},[397,2451,1351],{"class":470},[397,2453,2454],{"class":576},"section",[397,2456,620],{"class":470},[397,2458,2329],{"class":403},[397,2460,583],{"class":470},[397,2462,623],{"class":611},[397,2464,2465],{"class":407},"section-template",[397,2467,612],{"class":611},[397,2469,1325],{"class":470},[397,2471,2472,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494],{"class":399,"line":446},[397,2473,1429],{"class":438},[397,2475,2144],{"class":563},[397,2477,567],{"class":470},[397,2479,2253],{"class":535},[397,2481,1274],{"class":470},[397,2483,522],{"class":570},[397,2485,573],{"class":470},[397,2487,2262],{"class":576},[397,2489,580],{"class":470},[397,2491,583],{"class":438},[397,2493,1299],{"class":456},[397,2495,1302],{"class":470},[397,2497,2498,2500,2502,2504,2506,2508,2511,2514,2517,2519,2521,2523,2526,2528,2530,2533,2535,2537,2540,2542],{"class":399,"line":453},[397,2499,598],{"class":470},[397,2501,2262],{"class":576},[397,2503,603],{"class":438},[397,2505,1489],{"class":563},[397,2507,567],{"class":470},[397,2509,2510],{"class":456},"new",[397,2512,2513],{"class":570}," Article",[397,2515,2516],{"class":470},"(),",[397,2518,2329],{"class":403},[397,2520,583],{"class":470},[397,2522,623],{"class":611},[397,2524,2525],{"class":407},"article-template",[397,2527,612],{"class":611},[397,2529,620],{"class":470},[397,2531,2532],{"class":403}," routeName",[397,2534,583],{"class":470},[397,2536,623],{"class":611},[397,2538,2539],{"class":407},"article-1",[397,2541,612],{"class":611},[397,2543,631],{"class":470},[397,2545,2546],{"class":399,"line":474},[397,2547,2548],{"class":470},"    })\n",[397,2550,2551,2553,2555,2557,2559,2561,2563,2565,2568,2570,2572,2574,2576,2578,2580,2582],{"class":399,"line":479},[397,2552,1429],{"class":438},[397,2554,1783],{"class":563},[397,2556,567],{"class":470},[397,2558,2253],{"class":535},[397,2560,1274],{"class":470},[397,2562,879],{"class":456},[397,2564,573],{"class":470},[397,2566,2567],{"class":576},"childBuilders",[397,2569,580],{"class":470},[397,2571,1286],{"class":456},[397,2573,1289],{"class":470},[397,2575,577],{"class":576},[397,2577,580],{"class":470},[397,2579,583],{"class":438},[397,2581,1299],{"class":456},[397,2583,1302],{"class":470},[397,2585,2586,2590,2592,2595,2598,2600,2602,2604],{"class":399,"line":505},[397,2587,2589],{"class":2588},"sm4w6","        foreach",[397,2591,1289],{"class":470},[397,2593,2594],{"class":576},"childBuilders ",[397,2596,2597],{"class":438},"as",[397,2599,573],{"class":470},[397,2601,2262],{"class":576},[397,2603,580],{"class":470},[397,2605,1302],{"class":470},[397,2607,2608,2611,2614,2616,2618,2621],{"class":399,"line":527},[397,2609,2610],{"class":470},"            $",[397,2612,2613],{"class":576},"link ",[397,2615,887],{"class":438},[397,2617,2282],{"class":456},[397,2619,2620],{"class":570}," NavigationLink",[397,2622,705],{"class":470},[397,2624,2625,2627,2630,2632,2634,2636,2638,2640,2642,2644],{"class":399,"line":532},[397,2626,2610],{"class":470},[397,2628,2629],{"class":576},"link",[397,2631,603],{"class":438},[397,2633,1034],{"class":576},[397,2635,887],{"class":438},[397,2637,573],{"class":470},[397,2639,2262],{"class":576},[397,2641,603],{"class":438},[397,2643,1716],{"class":563},[397,2645,705],{"class":470},[397,2647,2648,2650,2652,2654,2656,2658,2660],{"class":399,"line":548},[397,2649,2610],{"class":470},[397,2651,577],{"class":576},[397,2653,603],{"class":438},[397,2655,1616],{"class":563},[397,2657,1351],{"class":470},[397,2659,2629],{"class":576},[397,2661,631],{"class":470},[397,2663,2664],{"class":399,"line":554},[397,2665,2666],{"class":470},"        }\n",[397,2668,2669,2671,2673,2675,2677],{"class":399,"line":589},[397,2670,598],{"class":470},[397,2672,577],{"class":576},[397,2674,603],{"class":438},[397,2676,702],{"class":563},[397,2678,705],{"class":470},[397,2680,2681],{"class":399,"line":595},[397,2682,2357],{"class":470},[831,2684,2686,2689,2690,2693],{"id":2685},"groupbuilder-from-any-group-call",[371,2687,2688],{},"GroupBuilder"," — from any ",[371,2691,2692],{},"->group()"," call",[388,2695,2697],{"className":429,"code":2696,"language":431,"meta":393,"style":393},"->add(AbstractComponent $component, ?int $sort = null): self\n->pageDataPosition(string $pageDataClass, string $propertyName, ?int $sort = null): self\n",[371,2698,2699,2735],{"__ignoreMap":393},[397,2700,2701,2703,2705,2707,2709,2711,2713,2715,2717,2720,2722,2725,2727,2729,2731,2733],{"class":399,"line":400},[397,2702,603],{"class":438},[397,2704,1348],{"class":563},[397,2706,567],{"class":470},[397,2708,1639],{"class":442},[397,2710,573],{"class":470},[397,2712,1616],{"class":576},[397,2714,620],{"class":470},[397,2716,876],{"class":438},[397,2718,2719],{"class":535},"int",[397,2721,573],{"class":470},[397,2723,2724],{"class":576},"sort ",[397,2726,887],{"class":438},[397,2728,890],{"class":488},[397,2730,580],{"class":576},[397,2732,583],{"class":438},[397,2734,1834],{"class":535},[397,2736,2737,2739,2742,2744,2746,2748,2751,2753,2755,2757,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778],{"class":399,"line":446},[397,2738,603],{"class":438},[397,2740,2741],{"class":563},"pageDataPosition",[397,2743,567],{"class":470},[397,2745,856],{"class":535},[397,2747,573],{"class":470},[397,2749,2750],{"class":576},"pageDataClass",[397,2752,620],{"class":470},[397,2754,866],{"class":535},[397,2756,573],{"class":470},[397,2758,2759],{"class":576},"propertyName",[397,2761,620],{"class":470},[397,2763,876],{"class":438},[397,2765,2719],{"class":535},[397,2767,573],{"class":470},[397,2769,2724],{"class":576},[397,2771,887],{"class":438},[397,2773,890],{"class":488},[397,2775,580],{"class":576},[397,2777,583],{"class":438},[397,2779,1834],{"class":535},[367,2781,2782,2036,2785,2788],{},[371,2783,2784],{},"add()",[371,2786,2787],{},"ComponentPosition"," pointing to the component. Sort values auto-increment by 10 unless specified.",[367,2790,2791,2794,2795,2797,2798,2800,2801,2804],{},[371,2792,2793],{},"pageDataPosition()"," creates a position bound to a field on a specific ",[371,2796,1582],{}," class — used in template pages where a region renders a component held by the associated data record. ",[371,2799,2750],{}," must be the fully-qualified class name of an ",[371,2802,2803],{},"AbstractPageData"," subclass registered as an API Platform resource:",[388,2806,2808],{"className":429,"code":2807,"language":431,"meta":393,"style":393},"$cwa->page('blog-template', 'BlogPageTemplate', layout: 'main', isTemplate: true)\n    ->group('content')\n        ->pageDataPosition(BlogArticle::class, 'headline')  \u002F\u002F renders BlogArticle->headline component\n        ->pageDataPosition(BlogArticle::class, 'body');     \u002F\u002F renders BlogArticle->body component\n",[371,2809,2810,2858,2875,2905],{"__ignoreMap":393},[397,2811,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844,2846,2848,2850,2852,2854,2856],{"class":399,"line":400},[397,2813,845],{"class":470},[397,2815,577],{"class":576},[397,2817,603],{"class":438},[397,2819,643],{"class":563},[397,2821,567],{"class":470},[397,2823,612],{"class":611},[397,2825,2207],{"class":407},[397,2827,612],{"class":611},[397,2829,620],{"class":470},[397,2831,623],{"class":611},[397,2833,2216],{"class":407},[397,2835,612],{"class":611},[397,2837,620],{"class":470},[397,2839,666],{"class":403},[397,2841,583],{"class":470},[397,2843,623],{"class":611},[397,2845,615],{"class":407},[397,2847,612],{"class":611},[397,2849,620],{"class":470},[397,2851,2235],{"class":403},[397,2853,583],{"class":470},[397,2855,2240],{"class":488},[397,2857,1325],{"class":470},[397,2859,2860,2862,2864,2866,2868,2871,2873],{"class":399,"line":446},[397,2861,1429],{"class":438},[397,2863,1333],{"class":563},[397,2865,567],{"class":470},[397,2867,612],{"class":611},[397,2869,2870],{"class":407},"content",[397,2872,612],{"class":611},[397,2874,1325],{"class":470},[397,2876,2877,2880,2882,2884,2887,2889,2891,2893,2895,2898,2900,2902],{"class":399,"line":453},[397,2878,2879],{"class":438},"        ->",[397,2881,2741],{"class":563},[397,2883,567],{"class":470},[397,2885,2886],{"class":570},"BlogArticle",[397,2888,2011],{"class":438},[397,2890,536],{"class":456},[397,2892,620],{"class":470},[397,2894,623],{"class":611},[397,2896,2897],{"class":407},"headline",[397,2899,612],{"class":611},[397,2901,580],{"class":470},[397,2903,2904],{"class":770},"  \u002F\u002F renders BlogArticle->headline component\n",[397,2906,2907,2909,2911,2913,2915,2917,2919,2921,2923,2926,2928,2931],{"class":399,"line":474},[397,2908,2879],{"class":438},[397,2910,2741],{"class":563},[397,2912,567],{"class":470},[397,2914,2886],{"class":570},[397,2916,2011],{"class":438},[397,2918,536],{"class":456},[397,2920,620],{"class":470},[397,2922,623],{"class":611},[397,2924,2925],{"class":407},"body",[397,2927,612],{"class":611},[397,2929,2930],{"class":470},");",[397,2932,2933],{"class":770},"     \u002F\u002F renders BlogArticle->body component\n",[831,2935,2937,1803,2939],{"id":2936},"componentbuilder-from-cwa-component",[371,2938,1655],{},[371,2940,2941],{},"$cwa->component()",[388,2943,2945],{"className":429,"code":2944,"language":431,"meta":393,"style":393},"->uiComponent(string $suffix): self\n->uiClassNames(string ...$classes): self\n->group(string $name, array $allow = [], ...): GroupBuilder\n",[371,2946,2947,2965,2985],{"__ignoreMap":393},[397,2948,2949,2951,2953,2955,2957,2959,2961,2963],{"class":399,"line":400},[397,2950,603],{"class":438},[397,2952,871],{"class":563},[397,2954,567],{"class":470},[397,2956,856],{"class":535},[397,2958,573],{"class":470},[397,2960,924],{"class":576},[397,2962,1646],{"class":470},[397,2964,1834],{"class":535},[397,2966,2967,2969,2971,2973,2975,2977,2979,2981,2983],{"class":399,"line":446},[397,2968,603],{"class":438},[397,2970,1183],{"class":563},[397,2972,567],{"class":470},[397,2974,856],{"class":535},[397,2976,1824],{"class":438},[397,2978,845],{"class":470},[397,2980,1829],{"class":576},[397,2982,1646],{"class":470},[397,2984,1834],{"class":535},[397,2986,2987,2989,2991,2993,2995,2997,2999,3001,3004,3006,3008,3010,3013,3015,3017],{"class":399,"line":453},[397,2988,603],{"class":438},[397,2990,1333],{"class":563},[397,2992,567],{"class":470},[397,2994,856],{"class":535},[397,2996,573],{"class":470},[397,2998,1851],{"class":576},[397,3000,620],{"class":470},[397,3002,3003],{"class":535}," array",[397,3005,573],{"class":470},[397,3007,1863],{"class":576},[397,3009,887],{"class":438},[397,3011,3012],{"class":470}," [],",[397,3014,1824],{"class":438},[397,3016,1646],{"class":470},[397,3018,1910],{"class":442},[367,3020,3021,3024,3025,3027,3028,3031,3032,941],{},[371,3022,3023],{},"uiComponent()"," sets an alternative UI template for this component. The builder computes the full component name from the entity's class name: on a ",[371,3026,1746],{}," entity, ",[371,3029,3030],{},"->uiComponent('YouTube')"," stores ",[371,3033,3034],{},"CwaComponentNavigationLinkUiYouTube",[367,3036,3037,3039],{},[371,3038,1915],{}," sets style classes — the same classes the admin can select from the \"Style\" picker.",[367,3041,3042,3044],{},[371,3043,2035],{}," is for components that contain other components (e.g. a carousel with slide children):",[388,3046,3048],{"className":429,"code":3047,"language":431,"meta":393,"style":393},"$carousel = new Carousel();\n$cwa->component($carousel)\n    ->group('slides', allow: [Slide::class])\n        ->add(new Slide())\n        ->add(new Slide());\n\n\u002F\u002F Setting an alt UI and style on a component\n$link = new NavigationLink();\n$cwa->component($link)\n    ->uiComponent('YouTube')\n    ->uiClassNames('rounded', 'shadow-lg');\n",[371,3049,3050,3066,3083,3116,3132,3147,3151,3156,3170,3186,3203],{"__ignoreMap":393},[397,3051,3052,3054,3057,3059,3061,3064],{"class":399,"line":400},[397,3053,845],{"class":470},[397,3055,3056],{"class":576},"carousel ",[397,3058,887],{"class":438},[397,3060,2282],{"class":456},[397,3062,3063],{"class":570}," Carousel",[397,3065,705],{"class":470},[397,3067,3068,3070,3072,3074,3076,3078,3081],{"class":399,"line":446},[397,3069,845],{"class":470},[397,3071,577],{"class":576},[397,3073,603],{"class":438},[397,3075,1616],{"class":563},[397,3077,1351],{"class":470},[397,3079,3080],{"class":576},"carousel",[397,3082,1325],{"class":470},[397,3084,3085,3087,3089,3091,3093,3096,3098,3100,3102,3104,3106,3109,3111,3113],{"class":399,"line":453},[397,3086,1429],{"class":438},[397,3088,1333],{"class":563},[397,3090,567],{"class":470},[397,3092,612],{"class":611},[397,3094,3095],{"class":407},"slides",[397,3097,612],{"class":611},[397,3099,620],{"class":470},[397,3101,2001],{"class":403},[397,3103,583],{"class":470},[397,3105,2006],{"class":470},[397,3107,3108],{"class":570},"Slide",[397,3110,2011],{"class":438},[397,3112,536],{"class":456},[397,3114,3115],{"class":470},"])\n",[397,3117,3118,3120,3122,3124,3126,3129],{"class":399,"line":474},[397,3119,2879],{"class":438},[397,3121,1348],{"class":563},[397,3123,567],{"class":470},[397,3125,2510],{"class":456},[397,3127,3128],{"class":570}," Slide",[397,3130,3131],{"class":470},"())\n",[397,3133,3134,3136,3138,3140,3142,3144],{"class":399,"line":479},[397,3135,2879],{"class":438},[397,3137,1348],{"class":563},[397,3139,567],{"class":470},[397,3141,2510],{"class":456},[397,3143,3128],{"class":570},[397,3145,3146],{"class":470},"());\n",[397,3148,3149],{"class":399,"line":505},[397,3150,450],{"emptyLinePlaceholder":449},[397,3152,3153],{"class":399,"line":527},[397,3154,3155],{"class":770},"\u002F\u002F Setting an alt UI and style on a component\n",[397,3157,3158,3160,3162,3164,3166,3168],{"class":399,"line":532},[397,3159,845],{"class":470},[397,3161,2613],{"class":576},[397,3163,887],{"class":438},[397,3165,2282],{"class":456},[397,3167,2620],{"class":570},[397,3169,705],{"class":470},[397,3171,3172,3174,3176,3178,3180,3182,3184],{"class":399,"line":548},[397,3173,845],{"class":470},[397,3175,577],{"class":576},[397,3177,603],{"class":438},[397,3179,1616],{"class":563},[397,3181,1351],{"class":470},[397,3183,2629],{"class":576},[397,3185,1325],{"class":470},[397,3187,3188,3190,3192,3194,3196,3199,3201],{"class":399,"line":554},[397,3189,1429],{"class":438},[397,3191,871],{"class":563},[397,3193,567],{"class":470},[397,3195,612],{"class":611},[397,3197,3198],{"class":407},"YouTube",[397,3200,612],{"class":611},[397,3202,1325],{"class":470},[397,3204,3205,3207,3209,3211,3213,3216,3218,3220,3222,3225,3227],{"class":399,"line":589},[397,3206,1429],{"class":438},[397,3208,1183],{"class":563},[397,3210,567],{"class":470},[397,3212,612],{"class":611},[397,3214,3215],{"class":407},"rounded",[397,3217,612],{"class":611},[397,3219,620],{"class":470},[397,3221,623],{"class":611},[397,3223,3224],{"class":407},"shadow-lg",[397,3226,612],{"class":611},[397,3228,631],{"class":470},[824,3230],{},[376,3232,3234,3237],{"id":3233},"locationreference-shared-groups",[371,3235,3236],{},"locationReference"," — Shared Groups",[367,3239,3240,3241,3243,3244,3247,3248,3250,3251,3254],{},"By default a ",[371,3242,2039],{}," reference is ",[371,3245,3246],{},"\"{groupName}_{ownerIri}\"",". If ",[371,3249,3236],{}," is set, the reference becomes ",[371,3252,3253],{},"\"{groupName}_{locationReference}\""," — stable across environments and shared across multiple owners.",[367,3256,3257],{},"This is how a single navigation group can serve multiple layouts:",[388,3259,3261],{"className":429,"code":3260,"language":431,"meta":393,"style":393},"\u002F\u002F Both layouts share the same ComponentGroup record\n$cwa->layout('primary', 'Primary')\n    ->group('nav', allow: [NavigationLink::class], locationReference: 'global-nav');\n\n$cwa->layout('minimal', 'Minimal')\n    ->group('nav', allow: [NavigationLink::class], locationReference: 'global-nav');\n",[371,3262,3263,3268,3297,3339,3343,3373],{"__ignoreMap":393},[397,3264,3265],{"class":399,"line":400},[397,3266,3267],{"class":770},"\u002F\u002F Both layouts share the same ComponentGroup record\n",[397,3269,3270,3272,3274,3276,3278,3280,3282,3285,3287,3289,3291,3293,3295],{"class":399,"line":446},[397,3271,845],{"class":470},[397,3273,577],{"class":576},[397,3275,603],{"class":438},[397,3277,606],{"class":563},[397,3279,567],{"class":470},[397,3281,612],{"class":611},[397,3283,3284],{"class":407},"primary",[397,3286,612],{"class":611},[397,3288,620],{"class":470},[397,3290,623],{"class":611},[397,3292,626],{"class":407},[397,3294,612],{"class":611},[397,3296,1325],{"class":470},[397,3298,3299,3301,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321,3323,3325,3327,3329,3331,3333,3335,3337],{"class":399,"line":453},[397,3300,1429],{"class":438},[397,3302,1333],{"class":563},[397,3304,567],{"class":470},[397,3306,612],{"class":611},[397,3308,1994],{"class":407},[397,3310,612],{"class":611},[397,3312,620],{"class":470},[397,3314,2001],{"class":403},[397,3316,583],{"class":470},[397,3318,2006],{"class":470},[397,3320,1746],{"class":570},[397,3322,2011],{"class":438},[397,3324,536],{"class":456},[397,3326,2016],{"class":470},[397,3328,2019],{"class":403},[397,3330,583],{"class":470},[397,3332,623],{"class":611},[397,3334,2026],{"class":407},[397,3336,612],{"class":611},[397,3338,631],{"class":470},[397,3340,3341],{"class":399,"line":474},[397,3342,450],{"emptyLinePlaceholder":449},[397,3344,3345,3347,3349,3351,3353,3355,3357,3360,3362,3364,3366,3369,3371],{"class":399,"line":479},[397,3346,845],{"class":470},[397,3348,577],{"class":576},[397,3350,603],{"class":438},[397,3352,606],{"class":563},[397,3354,567],{"class":470},[397,3356,612],{"class":611},[397,3358,3359],{"class":407},"minimal",[397,3361,612],{"class":611},[397,3363,620],{"class":470},[397,3365,623],{"class":611},[397,3367,3368],{"class":407},"Minimal",[397,3370,612],{"class":611},[397,3372,1325],{"class":470},[397,3374,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401,3403,3405,3407,3409,3411,3413],{"class":399,"line":505},[397,3376,1429],{"class":438},[397,3378,1333],{"class":563},[397,3380,567],{"class":470},[397,3382,612],{"class":611},[397,3384,1994],{"class":407},[397,3386,612],{"class":611},[397,3388,620],{"class":470},[397,3390,2001],{"class":403},[397,3392,583],{"class":470},[397,3394,2006],{"class":470},[397,3396,1746],{"class":570},[397,3398,2011],{"class":438},[397,3400,536],{"class":456},[397,3402,2016],{"class":470},[397,3404,2019],{"class":403},[397,3406,583],{"class":470},[397,3408,623],{"class":611},[397,3410,2026],{"class":407},[397,3412,612],{"class":611},[397,3414,631],{"class":470},[367,3416,3417,3418,3421,3422,3424],{},"The Vue ",[371,3419,3420],{},"\u003CCwaComponentGroup>"," with the matching ",[371,3423,3236],{}," prop renders this shared group.",[824,3426],{},[376,3428,3430],{"id":3429},"flush-phases","Flush Phases",[367,3432,3433,3434,3436],{},"Every ",[371,3435,373],{}," call runs the full sequence. Each phase is idempotent — it tracks what it has already processed and only does new work:",[3438,3439,3440,3453],"table",{},[3441,3442,3443],"thead",{},[3444,3445,3446,3450],"tr",{},[3447,3448,3449],"th",{},"Phase",[3447,3451,3452],{},"What happens",[3454,3455,3456,3470,3483,3497,3510],"tbody",{},[3444,3457,3458,3464],{},[3459,3460,3461],"td",{},[922,3462,3463],{},"1",[3459,3465,3466,3467,3469],{},"Persist layouts, pages, pageData, components; create ComponentGroups. Skips already-persisted entities. Calls ",[371,3468,1790],{}," only if anything new was added.",[3444,3471,3472,3476],{},[3459,3473,3474],{},[922,3475,2144],{},[3459,3477,3478,3479,3482],{},"Evaluate ",[371,3480,3481],{},"->nested()"," closures. Each closure is tracked by object ID and runs at most once.",[3444,3484,3485,3490],{},[3459,3486,3487],{},[922,3488,3489],{},"3",[3459,3491,3492,3493,3496],{},"Call ",[371,3494,3495],{},"RouteGenerator::create()"," for entities that don't yet have a route, in parent-before-child order.",[3444,3498,3499,3504],{},[3459,3500,3501],{},[922,3502,3503],{},"3.5",[3459,3505,3506,3507,3509],{},"Fire ",[371,3508,1783],{}," callbacks. Each callback fires at most once.",[3444,3511,3512,3517],{},[3459,3513,3514],{},[922,3515,3516],{},"4",[3459,3518,3519,3520,3522],{},"Create ",[371,3521,2787],{}," entities for all registered group builders. Picks up any positions added since the last call.",[367,3524,3525,3526,3528],{},"Because every phase is idempotent, you can call ",[371,3527,373],{}," as many times as you like — for example once to create routes, then again after wiring nav links that reference those routes.",[824,3530],{},[376,3532,3534],{"id":3533},"complete-example","Complete Example",[367,3536,3537],{},"This example creates a layout with a shared nav, a home page with a hero component, a blog template with two articles, and nav links pointing to each page:",[388,3539,3541],{"className":429,"code":3540,"language":431,"meta":393,"style":393},"\u003C?php\n\nnamespace App\\DataFixtures;\n\nuse App\\Entity\\BlogArticle;\nuse App\\Entity\\Hero;\nuse App\\Entity\\NavigationLink;\nuse Silverback\\ApiComponentsBundle\\Fixture\\AbstractCwaScaffold;\nuse Silverback\\ApiComponentsBundle\\Fixture\\CwaFixtureBuilder;\n\nclass AppFixtures extends AbstractCwaScaffold\n{\n    public function build(CwaFixtureBuilder $cwa): void\n    {\n        \u002F\u002F Layout with a shared nav group\n        $navGroup = $cwa->layout('main', 'Primary')\n            ->group('nav', allow: [NavigationLink::class], locationReference: 'global-nav');\n\n        \u002F\u002F Home page with a hero component\n        $hero = new Hero();\n        $hero->headline = 'Welcome';\n\n        $cwa->page('home', 'PrimaryPageTemplate', layout: 'main', route: '\u002F', routeName: 'home')\n            ->title('Home')\n            ->group('hero')->add($hero)\n            ->group('content');\n\n        \u002F\u002F Blog template — no route (isTemplate: true)\n        $cwa->page('blog-template', 'BlogPageTemplate', layout: 'main', isTemplate: true)\n            ->group('body')->pageDataPosition(BlogArticle::class, 'body');\n\n        \u002F\u002F Two blog articles\n        $article1 = new BlogArticle();\n        $article1->title = 'First Post';\n        $cwa->pageData($article1, template: 'blog-template', route: '\u002Fblog\u002Ffirst-post', routeName: 'article-1');\n\n        $article2 = new BlogArticle();\n        $article2->title = 'Second Post';\n        $cwa->pageData($article2, template: 'blog-template', route: '\u002Fblog\u002Fsecond-post', routeName: 'article-2');\n\n        \u002F\u002F Phase 1–3: persist everything and create routes\n        $cwa->flush();\n\n        \u002F\u002F Now use named routes to build nav links\n        $homeLink = new NavigationLink();\n        $homeLink->label = 'Home';\n        $homeLink->route = $cwa->getRoute('home');\n\n        $blogLink = new NavigationLink();\n        $blogLink->label = 'Blog';\n        $blogLink->rawPath = '\u002Fblog\u002Ffirst-post';\n\n        $cwa->component($homeLink);\n        $cwa->component($blogLink);\n\n        \u002F\u002F Add to the shared nav group\n        $navGroup->add($homeLink)->add($blogLink);\n\n        \u002F\u002F Phase 4: create the nav ComponentPositions\n        $cwa->flush();\n    }\n}\n",[371,3542,3543,3549,3553,3565,3569,3586,3603,3619,3639,3659,3663,3673,3677,3699,3703,3708,3743,3786,3791,3797,3814,3837,3842,3907,3924,3951,3968,3973,3979,4028,4067,4072,4078,4094,4116,4169,4174,4190,4213,4268,4273,4279,4292,4297,4303,4319,4342,4373,4378,4394,4417,4439,4444,4461,4478,4483,4489,4517,4522,4528,4541,4546],{"__ignoreMap":393},[397,3544,3545,3547],{"class":399,"line":400},[397,3546,439],{"class":438},[397,3548,443],{"class":442},[397,3550,3551],{"class":399,"line":446},[397,3552,450],{"emptyLinePlaceholder":449},[397,3554,3555,3557,3559,3561,3563],{"class":399,"line":453},[397,3556,457],{"class":456},[397,3558,460],{"class":403},[397,3560,464],{"class":463},[397,3562,467],{"class":403},[397,3564,471],{"class":470},[397,3566,3567],{"class":399,"line":474},[397,3568,450],{"emptyLinePlaceholder":449},[397,3570,3571,3573,3575,3577,3580,3582,3584],{"class":399,"line":479},[397,3572,482],{"class":456},[397,3574,460],{"class":442},[397,3576,464],{"class":488},[397,3578,3579],{"class":442},"Entity",[397,3581,464],{"class":488},[397,3583,2886],{"class":442},[397,3585,471],{"class":470},[397,3587,3588,3590,3592,3594,3596,3598,3601],{"class":399,"line":505},[397,3589,482],{"class":456},[397,3591,460],{"class":442},[397,3593,464],{"class":488},[397,3595,3579],{"class":442},[397,3597,464],{"class":488},[397,3599,3600],{"class":442},"Hero",[397,3602,471],{"class":470},[397,3604,3605,3607,3609,3611,3613,3615,3617],{"class":399,"line":527},[397,3606,482],{"class":456},[397,3608,460],{"class":442},[397,3610,464],{"class":488},[397,3612,3579],{"class":442},[397,3614,464],{"class":488},[397,3616,1746],{"class":442},[397,3618,471],{"class":470},[397,3620,3621,3623,3625,3627,3629,3631,3633,3635,3637],{"class":399,"line":532},[397,3622,482],{"class":456},[397,3624,485],{"class":442},[397,3626,464],{"class":488},[397,3628,491],{"class":442},[397,3630,464],{"class":488},[397,3632,496],{"class":442},[397,3634,464],{"class":488},[397,3636,421],{"class":442},[397,3638,471],{"class":470},[397,3640,3641,3643,3645,3647,3649,3651,3653,3655,3657],{"class":399,"line":548},[397,3642,482],{"class":456},[397,3644,485],{"class":442},[397,3646,464],{"class":488},[397,3648,491],{"class":442},[397,3650,464],{"class":488},[397,3652,496],{"class":442},[397,3654,464],{"class":488},[397,3656,522],{"class":442},[397,3658,471],{"class":470},[397,3660,3661],{"class":399,"line":554},[397,3662,450],{"emptyLinePlaceholder":449},[397,3664,3665,3667,3669,3671],{"class":399,"line":589},[397,3666,536],{"class":535},[397,3668,539],{"class":403},[397,3670,542],{"class":535},[397,3672,545],{"class":403},[397,3674,3675],{"class":399,"line":595},[397,3676,551],{"class":470},[397,3678,3679,3681,3683,3685,3687,3689,3691,3693,3695,3697],{"class":399,"line":634},[397,3680,557],{"class":535},[397,3682,560],{"class":535},[397,3684,564],{"class":563},[397,3686,567],{"class":470},[397,3688,522],{"class":570},[397,3690,573],{"class":470},[397,3692,577],{"class":576},[397,3694,580],{"class":470},[397,3696,583],{"class":438},[397,3698,586],{"class":456},[397,3700,3701],{"class":399,"line":693},[397,3702,592],{"class":470},[397,3704,3705],{"class":399,"line":708},[397,3706,3707],{"class":770},"        \u002F\u002F Layout with a shared nav group\n",[397,3709,3710,3712,3715,3717,3719,3721,3723,3725,3727,3729,3731,3733,3735,3737,3739,3741],{"class":399,"line":714},[397,3711,598],{"class":470},[397,3713,3714],{"class":576},"navGroup ",[397,3716,887],{"class":438},[397,3718,573],{"class":470},[397,3720,577],{"class":576},[397,3722,603],{"class":438},[397,3724,606],{"class":563},[397,3726,567],{"class":470},[397,3728,612],{"class":611},[397,3730,615],{"class":407},[397,3732,612],{"class":611},[397,3734,620],{"class":470},[397,3736,623],{"class":611},[397,3738,626],{"class":407},[397,3740,612],{"class":611},[397,3742,1325],{"class":470},[397,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770,3772,3774,3776,3778,3780,3782,3784],{"class":399,"line":3745},17,[397,3747,1330],{"class":438},[397,3749,1333],{"class":563},[397,3751,567],{"class":470},[397,3753,612],{"class":611},[397,3755,1994],{"class":407},[397,3757,612],{"class":611},[397,3759,620],{"class":470},[397,3761,2001],{"class":403},[397,3763,583],{"class":470},[397,3765,2006],{"class":470},[397,3767,1746],{"class":570},[397,3769,2011],{"class":438},[397,3771,536],{"class":456},[397,3773,2016],{"class":470},[397,3775,2019],{"class":403},[397,3777,583],{"class":470},[397,3779,623],{"class":611},[397,3781,2026],{"class":407},[397,3783,612],{"class":611},[397,3785,631],{"class":470},[397,3787,3789],{"class":399,"line":3788},18,[397,3790,450],{"emptyLinePlaceholder":449},[397,3792,3794],{"class":399,"line":3793},19,[397,3795,3796],{"class":770},"        \u002F\u002F Home page with a hero component\n",[397,3798,3800,3802,3805,3807,3809,3812],{"class":399,"line":3799},20,[397,3801,598],{"class":470},[397,3803,3804],{"class":576},"hero ",[397,3806,887],{"class":438},[397,3808,2282],{"class":456},[397,3810,3811],{"class":570}," Hero",[397,3813,705],{"class":470},[397,3815,3817,3819,3821,3823,3826,3828,3830,3833,3835],{"class":399,"line":3816},21,[397,3818,598],{"class":470},[397,3820,1292],{"class":576},[397,3822,603],{"class":438},[397,3824,3825],{"class":576},"headline ",[397,3827,887],{"class":438},[397,3829,623],{"class":611},[397,3831,3832],{"class":407},"Welcome",[397,3834,612],{"class":611},[397,3836,471],{"class":470},[397,3838,3840],{"class":399,"line":3839},22,[397,3841,450],{"emptyLinePlaceholder":449},[397,3843,3845,3847,3849,3851,3853,3855,3857,3859,3861,3863,3865,3867,3869,3871,3873,3875,3877,3879,3881,3883,3885,3887,3889,3891,3893,3895,3897,3899,3901,3903,3905],{"class":399,"line":3844},23,[397,3846,598],{"class":470},[397,3848,577],{"class":576},[397,3850,603],{"class":438},[397,3852,643],{"class":563},[397,3854,567],{"class":470},[397,3856,612],{"class":611},[397,3858,650],{"class":407},[397,3860,612],{"class":611},[397,3862,620],{"class":470},[397,3864,623],{"class":611},[397,3866,659],{"class":407},[397,3868,612],{"class":611},[397,3870,620],{"class":470},[397,3872,666],{"class":403},[397,3874,583],{"class":470},[397,3876,623],{"class":611},[397,3878,615],{"class":407},[397,3880,612],{"class":611},[397,3882,620],{"class":470},[397,3884,679],{"class":403},[397,3886,583],{"class":470},[397,3888,623],{"class":611},[397,3890,686],{"class":407},[397,3892,612],{"class":611},[397,3894,620],{"class":470},[397,3896,2532],{"class":403},[397,3898,583],{"class":470},[397,3900,623],{"class":611},[397,3902,650],{"class":407},[397,3904,612],{"class":611},[397,3906,1325],{"class":470},[397,3908,3910,3912,3914,3916,3918,3920,3922],{"class":399,"line":3909},24,[397,3911,1330],{"class":438},[397,3913,1313],{"class":563},[397,3915,567],{"class":470},[397,3917,612],{"class":611},[397,3919,1320],{"class":407},[397,3921,612],{"class":611},[397,3923,1325],{"class":470},[397,3925,3927,3929,3931,3933,3935,3937,3939,3941,3943,3945,3947,3949],{"class":399,"line":3926},25,[397,3928,1330],{"class":438},[397,3930,1333],{"class":563},[397,3932,567],{"class":470},[397,3934,612],{"class":611},[397,3936,1292],{"class":407},[397,3938,612],{"class":611},[397,3940,580],{"class":470},[397,3942,603],{"class":438},[397,3944,1348],{"class":563},[397,3946,1351],{"class":470},[397,3948,1292],{"class":576},[397,3950,1325],{"class":470},[397,3952,3954,3956,3958,3960,3962,3964,3966],{"class":399,"line":3953},26,[397,3955,1330],{"class":438},[397,3957,1333],{"class":563},[397,3959,567],{"class":470},[397,3961,612],{"class":611},[397,3963,2870],{"class":407},[397,3965,612],{"class":611},[397,3967,631],{"class":470},[397,3969,3971],{"class":399,"line":3970},27,[397,3972,450],{"emptyLinePlaceholder":449},[397,3974,3976],{"class":399,"line":3975},28,[397,3977,3978],{"class":770},"        \u002F\u002F Blog template — no route (isTemplate: true)\n",[397,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008,4010,4012,4014,4016,4018,4020,4022,4024,4026],{"class":399,"line":3981},29,[397,3983,598],{"class":470},[397,3985,577],{"class":576},[397,3987,603],{"class":438},[397,3989,643],{"class":563},[397,3991,567],{"class":470},[397,3993,612],{"class":611},[397,3995,2207],{"class":407},[397,3997,612],{"class":611},[397,3999,620],{"class":470},[397,4001,623],{"class":611},[397,4003,2216],{"class":407},[397,4005,612],{"class":611},[397,4007,620],{"class":470},[397,4009,666],{"class":403},[397,4011,583],{"class":470},[397,4013,623],{"class":611},[397,4015,615],{"class":407},[397,4017,612],{"class":611},[397,4019,620],{"class":470},[397,4021,2235],{"class":403},[397,4023,583],{"class":470},[397,4025,2240],{"class":488},[397,4027,1325],{"class":470},[397,4029,4031,4033,4035,4037,4039,4041,4043,4045,4047,4049,4051,4053,4055,4057,4059,4061,4063,4065],{"class":399,"line":4030},30,[397,4032,1330],{"class":438},[397,4034,1333],{"class":563},[397,4036,567],{"class":470},[397,4038,612],{"class":611},[397,4040,2925],{"class":407},[397,4042,612],{"class":611},[397,4044,580],{"class":470},[397,4046,603],{"class":438},[397,4048,2741],{"class":563},[397,4050,567],{"class":470},[397,4052,2886],{"class":570},[397,4054,2011],{"class":438},[397,4056,536],{"class":456},[397,4058,620],{"class":470},[397,4060,623],{"class":611},[397,4062,2925],{"class":407},[397,4064,612],{"class":611},[397,4066,631],{"class":470},[397,4068,4070],{"class":399,"line":4069},31,[397,4071,450],{"emptyLinePlaceholder":449},[397,4073,4075],{"class":399,"line":4074},32,[397,4076,4077],{"class":770},"        \u002F\u002F Two blog articles\n",[397,4079,4081,4083,4086,4088,4090,4092],{"class":399,"line":4080},33,[397,4082,598],{"class":470},[397,4084,4085],{"class":576},"article1 ",[397,4087,887],{"class":438},[397,4089,2282],{"class":456},[397,4091,2285],{"class":570},[397,4093,705],{"class":470},[397,4095,4097,4099,4102,4104,4106,4108,4110,4112,4114],{"class":399,"line":4096},34,[397,4098,598],{"class":470},[397,4100,4101],{"class":576},"article1",[397,4103,603],{"class":438},[397,4105,2299],{"class":576},[397,4107,887],{"class":438},[397,4109,623],{"class":611},[397,4111,2306],{"class":407},[397,4113,612],{"class":611},[397,4115,471],{"class":470},[397,4117,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157,4159,4161,4163,4165,4167],{"class":399,"line":4118},35,[397,4120,598],{"class":470},[397,4122,577],{"class":576},[397,4124,603],{"class":438},[397,4126,1489],{"class":563},[397,4128,1351],{"class":470},[397,4130,4101],{"class":576},[397,4132,620],{"class":470},[397,4134,2329],{"class":403},[397,4136,583],{"class":470},[397,4138,623],{"class":611},[397,4140,2207],{"class":407},[397,4142,612],{"class":611},[397,4144,620],{"class":470},[397,4146,679],{"class":403},[397,4148,583],{"class":470},[397,4150,623],{"class":611},[397,4152,2348],{"class":407},[397,4154,612],{"class":611},[397,4156,620],{"class":470},[397,4158,2532],{"class":403},[397,4160,583],{"class":470},[397,4162,623],{"class":611},[397,4164,2539],{"class":407},[397,4166,612],{"class":611},[397,4168,631],{"class":470},[397,4170,4172],{"class":399,"line":4171},36,[397,4173,450],{"emptyLinePlaceholder":449},[397,4175,4177,4179,4182,4184,4186,4188],{"class":399,"line":4176},37,[397,4178,598],{"class":470},[397,4180,4181],{"class":576},"article2 ",[397,4183,887],{"class":438},[397,4185,2282],{"class":456},[397,4187,2285],{"class":570},[397,4189,705],{"class":470},[397,4191,4193,4195,4198,4200,4202,4204,4206,4209,4211],{"class":399,"line":4192},38,[397,4194,598],{"class":470},[397,4196,4197],{"class":576},"article2",[397,4199,603],{"class":438},[397,4201,2299],{"class":576},[397,4203,887],{"class":438},[397,4205,623],{"class":611},[397,4207,4208],{"class":407},"Second Post",[397,4210,612],{"class":611},[397,4212,471],{"class":470},[397,4214,4216,4218,4220,4222,4224,4226,4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248,4251,4253,4255,4257,4259,4261,4264,4266],{"class":399,"line":4215},39,[397,4217,598],{"class":470},[397,4219,577],{"class":576},[397,4221,603],{"class":438},[397,4223,1489],{"class":563},[397,4225,1351],{"class":470},[397,4227,4197],{"class":576},[397,4229,620],{"class":470},[397,4231,2329],{"class":403},[397,4233,583],{"class":470},[397,4235,623],{"class":611},[397,4237,2207],{"class":407},[397,4239,612],{"class":611},[397,4241,620],{"class":470},[397,4243,679],{"class":403},[397,4245,583],{"class":470},[397,4247,623],{"class":611},[397,4249,4250],{"class":407},"\u002Fblog\u002Fsecond-post",[397,4252,612],{"class":611},[397,4254,620],{"class":470},[397,4256,2532],{"class":403},[397,4258,583],{"class":470},[397,4260,623],{"class":611},[397,4262,4263],{"class":407},"article-2",[397,4265,612],{"class":611},[397,4267,631],{"class":470},[397,4269,4271],{"class":399,"line":4270},40,[397,4272,450],{"emptyLinePlaceholder":449},[397,4274,4276],{"class":399,"line":4275},41,[397,4277,4278],{"class":770},"        \u002F\u002F Phase 1–3: persist everything and create routes\n",[397,4280,4282,4284,4286,4288,4290],{"class":399,"line":4281},42,[397,4283,598],{"class":470},[397,4285,577],{"class":576},[397,4287,603],{"class":438},[397,4289,702],{"class":563},[397,4291,705],{"class":470},[397,4293,4295],{"class":399,"line":4294},43,[397,4296,450],{"emptyLinePlaceholder":449},[397,4298,4300],{"class":399,"line":4299},44,[397,4301,4302],{"class":770},"        \u002F\u002F Now use named routes to build nav links\n",[397,4304,4306,4308,4311,4313,4315,4317],{"class":399,"line":4305},45,[397,4307,598],{"class":470},[397,4309,4310],{"class":576},"homeLink ",[397,4312,887],{"class":438},[397,4314,2282],{"class":456},[397,4316,2620],{"class":570},[397,4318,705],{"class":470},[397,4320,4322,4324,4327,4329,4332,4334,4336,4338,4340],{"class":399,"line":4321},46,[397,4323,598],{"class":470},[397,4325,4326],{"class":576},"homeLink",[397,4328,603],{"class":438},[397,4330,4331],{"class":576},"label ",[397,4333,887],{"class":438},[397,4335,623],{"class":611},[397,4337,1320],{"class":407},[397,4339,612],{"class":611},[397,4341,471],{"class":470},[397,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367,4369,4371],{"class":399,"line":4344},47,[397,4346,598],{"class":470},[397,4348,4326],{"class":576},[397,4350,603],{"class":438},[397,4352,1034],{"class":576},[397,4354,887],{"class":438},[397,4356,573],{"class":470},[397,4358,577],{"class":576},[397,4360,603],{"class":438},[397,4362,1716],{"class":563},[397,4364,567],{"class":470},[397,4366,612],{"class":611},[397,4368,650],{"class":407},[397,4370,612],{"class":611},[397,4372,631],{"class":470},[397,4374,4376],{"class":399,"line":4375},48,[397,4377,450],{"emptyLinePlaceholder":449},[397,4379,4381,4383,4386,4388,4390,4392],{"class":399,"line":4380},49,[397,4382,598],{"class":470},[397,4384,4385],{"class":576},"blogLink ",[397,4387,887],{"class":438},[397,4389,2282],{"class":456},[397,4391,2620],{"class":570},[397,4393,705],{"class":470},[397,4395,4397,4399,4402,4404,4406,4408,4410,4413,4415],{"class":399,"line":4396},50,[397,4398,598],{"class":470},[397,4400,4401],{"class":576},"blogLink",[397,4403,603],{"class":438},[397,4405,4331],{"class":576},[397,4407,887],{"class":438},[397,4409,623],{"class":611},[397,4411,4412],{"class":407},"Blog",[397,4414,612],{"class":611},[397,4416,471],{"class":470},[397,4418,4420,4422,4424,4426,4429,4431,4433,4435,4437],{"class":399,"line":4419},51,[397,4421,598],{"class":470},[397,4423,4401],{"class":576},[397,4425,603],{"class":438},[397,4427,4428],{"class":576},"rawPath ",[397,4430,887],{"class":438},[397,4432,623],{"class":611},[397,4434,2348],{"class":407},[397,4436,612],{"class":611},[397,4438,471],{"class":470},[397,4440,4442],{"class":399,"line":4441},52,[397,4443,450],{"emptyLinePlaceholder":449},[397,4445,4447,4449,4451,4453,4455,4457,4459],{"class":399,"line":4446},53,[397,4448,598],{"class":470},[397,4450,577],{"class":576},[397,4452,603],{"class":438},[397,4454,1616],{"class":563},[397,4456,1351],{"class":470},[397,4458,4326],{"class":576},[397,4460,631],{"class":470},[397,4462,4464,4466,4468,4470,4472,4474,4476],{"class":399,"line":4463},54,[397,4465,598],{"class":470},[397,4467,577],{"class":576},[397,4469,603],{"class":438},[397,4471,1616],{"class":563},[397,4473,1351],{"class":470},[397,4475,4401],{"class":576},[397,4477,631],{"class":470},[397,4479,4481],{"class":399,"line":4480},55,[397,4482,450],{"emptyLinePlaceholder":449},[397,4484,4486],{"class":399,"line":4485},56,[397,4487,4488],{"class":770},"        \u002F\u002F Add to the shared nav group\n",[397,4490,4492,4494,4497,4499,4501,4503,4505,4507,4509,4511,4513,4515],{"class":399,"line":4491},57,[397,4493,598],{"class":470},[397,4495,4496],{"class":576},"navGroup",[397,4498,603],{"class":438},[397,4500,1348],{"class":563},[397,4502,1351],{"class":470},[397,4504,4326],{"class":576},[397,4506,580],{"class":470},[397,4508,603],{"class":438},[397,4510,1348],{"class":563},[397,4512,1351],{"class":470},[397,4514,4401],{"class":576},[397,4516,631],{"class":470},[397,4518,4520],{"class":399,"line":4519},58,[397,4521,450],{"emptyLinePlaceholder":449},[397,4523,4525],{"class":399,"line":4524},59,[397,4526,4527],{"class":770},"        \u002F\u002F Phase 4: create the nav ComponentPositions\n",[397,4529,4531,4533,4535,4537,4539],{"class":399,"line":4530},60,[397,4532,598],{"class":470},[397,4534,577],{"class":576},[397,4536,603],{"class":438},[397,4538,702],{"class":563},[397,4540,705],{"class":470},[397,4542,4544],{"class":399,"line":4543},61,[397,4545,711],{"class":470},[397,4547,4549],{"class":399,"line":4548},62,[397,4550,717],{"class":470},[824,4552],{},[376,4554,4556],{"id":4555},"route-generation-rules","Route Generation Rules",[3438,4558,4559,4569],{},[3441,4560,4561],{},[3444,4562,4563,4566],{},[3447,4564,4565],{},"Situation",[3447,4567,4568],{},"Result",[3454,4570,4571,4582,4595,4607,4626,4644],{},[3444,4572,4573,4579],{},[3459,4574,4575,4578],{},[371,4576,4577],{},"route: '\u002Fpath'"," explicit",[3459,4580,4581],{},"Creates a Route at that path",[3444,4583,4584,4589],{},[3459,4585,4586],{},[371,4587,4588],{},"routeName: 'name'",[3459,4590,4591,4592],{},"Also names the route for ",[371,4593,4594],{},"getRoute('name')",[3444,4596,4597,4604],{},[3459,4598,4599,4601,4602],{},[371,4600,1177],{},", no ",[371,4603,1159],{},[3459,4605,4606],{},"No Route created",[3444,4608,4609,4617],{},[3459,4610,4611,4612,4614,4615],{},"No ",[371,4613,1159],{},", has ",[371,4616,1313],{},[3459,4618,4619,4622,4623],{},[371,4620,4621],{},"RouteGenerator"," slugifies the title → ",[371,4624,4625],{},"\u002Fmy-title",[3444,4627,4628,4636],{},[3459,4629,4630,4632,4633,4635],{},[371,4631,1473],{}," inside ",[371,4634,3481],{},", no route",[3459,4637,4638,4640,4641],{},[371,4639,4621],{}," → ",[371,4642,4643],{},"\u002Fparent-path\u002Fslug",[3444,4645,4646,4653],{},[3459,4647,4611,4648,4601,4650,4652],{},[371,4649,1159],{},[371,4651,1313],{},", top-level",[3459,4654,4655],{},"No Route (draft)",[824,4657],{},[376,4659,4661],{"id":4660},"seeding-html-content","Seeding HTML Content",[367,4663,4664,4665,4668,4669,4672],{},"When seeding components that have HTML body fields (e.g. a rich-text ",[371,4666,4667],{},"HtmlContent"," entity), you need structured placeholder HTML rather than a raw lorem ipsum string. The bundle ships ",[371,4670,4671],{},"HtmlContentPlaceholder"," as a registered service — inject it directly into your fixture class:",[388,4674,4676],{"className":429,"code":4675,"language":431,"meta":393,"style":393},"use Silverback\\ApiComponentsBundle\\Fixture\\AbstractCwaScaffold;\nuse Silverback\\ApiComponentsBundle\\Fixture\\CwaFixtureBuilder;\nuse Silverback\\ApiComponentsBundle\\Fixture\\Placeholder\\HtmlContentPlaceholder;\n\nclass AppFixtures extends AbstractCwaScaffold\n{\n    public function __construct(private readonly HtmlContentPlaceholder $placeholder)\n    {\n    }\n\n    public function build(CwaFixtureBuilder $cwa): void\n    {\n        $content = new HtmlContent();\n        $content->html = $this->placeholder->generate([\n            'paragraphs'      => 4,\n            'paragraphLength' => HtmlContentPlaceholder::LENGTH_MEDIUM,\n            'includeHeadings' => true,\n            'includeLists'    => true,\n            'includeQuotes'   => false,\n            'includeCode'     => false,\n            'includeLinks'    => true,\n            'format'          => HtmlContentPlaceholder::FORMAT_HTML,\n        ]);\n\n        $cwa->component($content);\n    }\n}\n",[371,4677,4678,4698,4718,4743,4747,4757,4761,4789,4793,4797,4801,4823,4827,4843,4871,4890,4911,4926,4942,4958,4974,4989,5010,5015,5019,5035,5039],{"__ignoreMap":393},[397,4679,4680,4682,4684,4686,4688,4690,4692,4694,4696],{"class":399,"line":400},[397,4681,482],{"class":456},[397,4683,485],{"class":442},[397,4685,464],{"class":488},[397,4687,491],{"class":442},[397,4689,464],{"class":488},[397,4691,496],{"class":442},[397,4693,464],{"class":488},[397,4695,421],{"class":442},[397,4697,471],{"class":470},[397,4699,4700,4702,4704,4706,4708,4710,4712,4714,4716],{"class":399,"line":446},[397,4701,482],{"class":456},[397,4703,485],{"class":442},[397,4705,464],{"class":488},[397,4707,491],{"class":442},[397,4709,464],{"class":488},[397,4711,496],{"class":442},[397,4713,464],{"class":488},[397,4715,522],{"class":442},[397,4717,471],{"class":470},[397,4719,4720,4722,4724,4726,4728,4730,4732,4734,4737,4739,4741],{"class":399,"line":453},[397,4721,482],{"class":456},[397,4723,485],{"class":442},[397,4725,464],{"class":488},[397,4727,491],{"class":442},[397,4729,464],{"class":488},[397,4731,496],{"class":442},[397,4733,464],{"class":488},[397,4735,4736],{"class":442},"Placeholder",[397,4738,464],{"class":488},[397,4740,4671],{"class":442},[397,4742,471],{"class":470},[397,4744,4745],{"class":399,"line":474},[397,4746,450],{"emptyLinePlaceholder":449},[397,4748,4749,4751,4753,4755],{"class":399,"line":479},[397,4750,536],{"class":535},[397,4752,539],{"class":403},[397,4754,542],{"class":535},[397,4756,545],{"class":403},[397,4758,4759],{"class":399,"line":505},[397,4760,551],{"class":470},[397,4762,4763,4765,4767,4771,4773,4776,4779,4782,4784,4787],{"class":399,"line":527},[397,4764,557],{"class":535},[397,4766,560],{"class":535},[397,4768,4770],{"class":4769},"s3Ny6"," __construct",[397,4772,567],{"class":470},[397,4774,4775],{"class":535},"private",[397,4777,4778],{"class":535}," readonly",[397,4780,4781],{"class":570}," HtmlContentPlaceholder",[397,4783,573],{"class":470},[397,4785,4786],{"class":576},"placeholder",[397,4788,1325],{"class":470},[397,4790,4791],{"class":399,"line":532},[397,4792,592],{"class":470},[397,4794,4795],{"class":399,"line":548},[397,4796,711],{"class":470},[397,4798,4799],{"class":399,"line":554},[397,4800,450],{"emptyLinePlaceholder":449},[397,4802,4803,4805,4807,4809,4811,4813,4815,4817,4819,4821],{"class":399,"line":589},[397,4804,557],{"class":535},[397,4806,560],{"class":535},[397,4808,564],{"class":563},[397,4810,567],{"class":470},[397,4812,522],{"class":570},[397,4814,573],{"class":470},[397,4816,577],{"class":576},[397,4818,580],{"class":470},[397,4820,583],{"class":438},[397,4822,586],{"class":456},[397,4824,4825],{"class":399,"line":595},[397,4826,592],{"class":470},[397,4828,4829,4831,4834,4836,4838,4841],{"class":399,"line":634},[397,4830,598],{"class":470},[397,4832,4833],{"class":576},"content ",[397,4835,887],{"class":438},[397,4837,2282],{"class":456},[397,4839,4840],{"class":570}," HtmlContent",[397,4842,705],{"class":470},[397,4844,4845,4847,4849,4851,4854,4856,4859,4861,4863,4865,4868],{"class":399,"line":693},[397,4846,598],{"class":470},[397,4848,2870],{"class":576},[397,4850,603],{"class":438},[397,4852,4853],{"class":576},"html ",[397,4855,887],{"class":438},[397,4857,4858],{"class":488}," $this",[397,4860,603],{"class":438},[397,4862,4786],{"class":576},[397,4864,603],{"class":438},[397,4866,4867],{"class":563},"generate",[397,4869,4870],{"class":470},"([\n",[397,4872,4873,4876,4879,4881,4884,4888],{"class":399,"line":708},[397,4874,4875],{"class":611},"            '",[397,4877,4878],{"class":407},"paragraphs",[397,4880,612],{"class":611},[397,4882,4883],{"class":438},"      =>",[397,4885,4887],{"class":4886},"scSvc"," 4",[397,4889,1002],{"class":470},[397,4891,4892,4894,4897,4899,4902,4904,4906,4909],{"class":399,"line":714},[397,4893,4875],{"class":611},[397,4895,4896],{"class":407},"paragraphLength",[397,4898,612],{"class":611},[397,4900,4901],{"class":438}," =>",[397,4903,4781],{"class":570},[397,4905,2011],{"class":438},[397,4907,4908],{"class":442},"LENGTH_MEDIUM",[397,4910,1002],{"class":470},[397,4912,4913,4915,4918,4920,4922,4924],{"class":399,"line":3745},[397,4914,4875],{"class":611},[397,4916,4917],{"class":407},"includeHeadings",[397,4919,612],{"class":611},[397,4921,4901],{"class":438},[397,4923,2240],{"class":488},[397,4925,1002],{"class":470},[397,4927,4928,4930,4933,4935,4938,4940],{"class":399,"line":3788},[397,4929,4875],{"class":611},[397,4931,4932],{"class":407},"includeLists",[397,4934,612],{"class":611},[397,4936,4937],{"class":438},"    =>",[397,4939,2240],{"class":488},[397,4941,1002],{"class":470},[397,4943,4944,4946,4949,4951,4954,4956],{"class":399,"line":3793},[397,4945,4875],{"class":611},[397,4947,4948],{"class":407},"includeQuotes",[397,4950,612],{"class":611},[397,4952,4953],{"class":438},"   =>",[397,4955,1072],{"class":488},[397,4957,1002],{"class":470},[397,4959,4960,4962,4965,4967,4970,4972],{"class":399,"line":3799},[397,4961,4875],{"class":611},[397,4963,4964],{"class":407},"includeCode",[397,4966,612],{"class":611},[397,4968,4969],{"class":438},"     =>",[397,4971,1072],{"class":488},[397,4973,1002],{"class":470},[397,4975,4976,4978,4981,4983,4985,4987],{"class":399,"line":3816},[397,4977,4875],{"class":611},[397,4979,4980],{"class":407},"includeLinks",[397,4982,612],{"class":611},[397,4984,4937],{"class":438},[397,4986,2240],{"class":488},[397,4988,1002],{"class":470},[397,4990,4991,4993,4996,4998,5001,5003,5005,5008],{"class":399,"line":3839},[397,4992,4875],{"class":611},[397,4994,4995],{"class":407},"format",[397,4997,612],{"class":611},[397,4999,5000],{"class":438},"          =>",[397,5002,4781],{"class":570},[397,5004,2011],{"class":438},[397,5006,5007],{"class":442},"FORMAT_HTML",[397,5009,1002],{"class":470},[397,5011,5012],{"class":399,"line":3844},[397,5013,5014],{"class":470},"        ]);\n",[397,5016,5017],{"class":399,"line":3909},[397,5018,450],{"emptyLinePlaceholder":449},[397,5020,5021,5023,5025,5027,5029,5031,5033],{"class":399,"line":3926},[397,5022,598],{"class":470},[397,5024,577],{"class":576},[397,5026,603],{"class":438},[397,5028,1616],{"class":563},[397,5030,1351],{"class":470},[397,5032,2870],{"class":576},[397,5034,631],{"class":470},[397,5036,5037],{"class":399,"line":3953},[397,5038,711],{"class":470},[397,5040,5041],{"class":399,"line":3970},[397,5042,717],{"class":470},[367,5044,4611,5045,5047,5048,941],{},[371,5046,753],{}," entry needed — the bundle registers it automatically as ",[371,5049,5050],{},"silverback.api_components.fixture.html_content_placeholder",[831,5052,5054],{"id":5053},"options","Options",[3438,5056,5057,5073],{},[3441,5058,5059],{},[3444,5060,5061,5064,5067,5070],{},[3447,5062,5063],{},"Option",[3447,5065,5066],{},"Type",[3447,5068,5069],{},"Default",[3447,5071,5072],{},"Description",[3454,5074,5075,5092,5110,5133,5156,5175,5195,5217],{},[3444,5076,5077,5081,5085,5089],{},[3459,5078,5079],{},[371,5080,4878],{},[3459,5082,5083],{},[371,5084,2719],{},[3459,5086,5087],{},[371,5088,3489],{},[3459,5090,5091],{},"Number of paragraphs to generate",[3444,5093,5094,5098,5102,5107],{},[3459,5095,5096],{},[371,5097,4896],{},[3459,5099,5100],{},[371,5101,856],{},[3459,5103,5104],{},[371,5105,5106],{},"'medium'",[3459,5108,5109],{},"Sentence density per paragraph",[3444,5111,5112,5116,5121,5126],{},[3459,5113,5114],{},[371,5115,4917],{},[3459,5117,5118],{},[371,5119,5120],{},"bool",[3459,5122,5123],{},[371,5124,5125],{},"false",[3459,5127,5128,5129,5132],{},"Inject ",[371,5130,5131],{},"\u003Ch2>"," elements between paragraphs",[3444,5134,5135,5139,5143,5147],{},[3459,5136,5137],{},[371,5138,4932],{},[3459,5140,5141],{},[371,5142,5120],{},[3459,5144,5145],{},[371,5146,5125],{},[3459,5148,5128,5149,686,5152,5155],{},[371,5150,5151],{},"\u003Cul>",[371,5153,5154],{},"\u003Col>"," elements",[3444,5157,5158,5162,5166,5170],{},[3459,5159,5160],{},[371,5161,4948],{},[3459,5163,5164],{},[371,5165,5120],{},[3459,5167,5168],{},[371,5169,5125],{},[3459,5171,5128,5172,5155],{},[371,5173,5174],{},"\u003Cblockquote>",[3444,5176,5177,5181,5185,5189],{},[3459,5178,5179],{},[371,5180,4964],{},[3459,5182,5183],{},[371,5184,5120],{},[3459,5186,5187],{},[371,5188,5125],{},[3459,5190,5128,5191,5194],{},[371,5192,5193],{},"\u003Cpre>\u003Ccode>"," blocks",[3444,5196,5197,5201,5205,5210],{},[3459,5198,5199],{},[371,5200,4980],{},[3459,5202,5203],{},[371,5204,5120],{},[3459,5206,5207],{},[371,5208,5209],{},"true",[3459,5211,5212,5213,5216],{},"Insert ",[371,5214,5215],{},"\u003Ca>"," tags inside paragraph text",[3444,5218,5219,5223,5227,5232],{},[3459,5220,5221],{},[371,5222,4995],{},[3459,5224,5225],{},[371,5226,856],{},[3459,5228,5229],{},[371,5230,5231],{},"'html'",[3459,5233,5234,5236,5237],{},[371,5235,5231],{}," or ",[371,5238,5239],{},"'plaintext'",[831,5241,5243],{"id":5242},"constants","Constants",[388,5245,5247],{"className":429,"code":5246,"language":431,"meta":393,"style":393},"HtmlContentPlaceholder::LENGTH_SHORT    \u002F\u002F 1–2 sentences per paragraph\nHtmlContentPlaceholder::LENGTH_MEDIUM   \u002F\u002F 3–4 sentences (default)\nHtmlContentPlaceholder::LENGTH_LONG     \u002F\u002F 5–7 sentences\n\nHtmlContentPlaceholder::FORMAT_HTML      \u002F\u002F returns HTML tags\nHtmlContentPlaceholder::FORMAT_PLAINTEXT \u002F\u002F returns plain text\n",[371,5248,5249,5261,5272,5284,5288,5299],{"__ignoreMap":393},[397,5250,5251,5253,5255,5258],{"class":399,"line":400},[397,5252,4671],{"class":570},[397,5254,2011],{"class":438},[397,5256,5257],{"class":442},"LENGTH_SHORT",[397,5259,5260],{"class":770},"    \u002F\u002F 1–2 sentences per paragraph\n",[397,5262,5263,5265,5267,5269],{"class":399,"line":446},[397,5264,4671],{"class":570},[397,5266,2011],{"class":438},[397,5268,4908],{"class":442},[397,5270,5271],{"class":770},"   \u002F\u002F 3–4 sentences (default)\n",[397,5273,5274,5276,5278,5281],{"class":399,"line":453},[397,5275,4671],{"class":570},[397,5277,2011],{"class":438},[397,5279,5280],{"class":442},"LENGTH_LONG",[397,5282,5283],{"class":770},"     \u002F\u002F 5–7 sentences\n",[397,5285,5286],{"class":399,"line":474},[397,5287,450],{"emptyLinePlaceholder":449},[397,5289,5290,5292,5294,5296],{"class":399,"line":479},[397,5291,4671],{"class":570},[397,5293,2011],{"class":438},[397,5295,5007],{"class":442},[397,5297,5298],{"class":770},"      \u002F\u002F returns HTML tags\n",[397,5300,5301,5303,5305,5308],{"class":399,"line":505},[397,5302,4671],{"class":570},[397,5304,2011],{"class":438},[397,5306,5307],{"class":442},"FORMAT_PLAINTEXT",[397,5309,5310],{"class":770}," \u002F\u002F returns plain text\n",[367,5312,5313,5314,5317],{},"The class uses ",[371,5315,5316],{},"protected"," properties and methods so you can extend it to swap in your own paragraph templates, headings, or link phrases.",[367,5319,5320,5321,5324,5325,5328],{},"You can also call ",[371,5322,5323],{},"setOptions()"," to set defaults for all subsequent ",[371,5326,5327],{},"generate()"," calls on the same instance:",[388,5330,5332],{"className":429,"code":5331,"language":431,"meta":393,"style":393},"$this->placeholder->setOptions(['paragraphLength' => HtmlContentPlaceholder::LENGTH_SHORT]);\n$shortHtml  = $this->placeholder->generate();\n$shortHtml2 = $this->placeholder->generate(); \u002F\u002F same defaults apply\n",[371,5333,5334,5368,5389],{"__ignoreMap":393},[397,5335,5336,5339,5341,5343,5345,5348,5351,5353,5355,5357,5359,5361,5363,5365],{"class":399,"line":400},[397,5337,5338],{"class":488},"$this",[397,5340,603],{"class":438},[397,5342,4786],{"class":576},[397,5344,603],{"class":438},[397,5346,5347],{"class":563},"setOptions",[397,5349,5350],{"class":470},"([",[397,5352,612],{"class":611},[397,5354,4896],{"class":407},[397,5356,612],{"class":611},[397,5358,4901],{"class":438},[397,5360,4781],{"class":570},[397,5362,2011],{"class":438},[397,5364,5257],{"class":442},[397,5366,5367],{"class":470},"]);\n",[397,5369,5370,5372,5375,5377,5379,5381,5383,5385,5387],{"class":399,"line":446},[397,5371,845],{"class":470},[397,5373,5374],{"class":576},"shortHtml  ",[397,5376,887],{"class":438},[397,5378,4858],{"class":488},[397,5380,603],{"class":438},[397,5382,4786],{"class":576},[397,5384,603],{"class":438},[397,5386,4867],{"class":563},[397,5388,705],{"class":470},[397,5390,5391,5393,5396,5398,5400,5402,5404,5406,5408,5411],{"class":399,"line":453},[397,5392,845],{"class":470},[397,5394,5395],{"class":576},"shortHtml2 ",[397,5397,887],{"class":438},[397,5399,4858],{"class":488},[397,5401,603],{"class":438},[397,5403,4786],{"class":576},[397,5405,603],{"class":438},[397,5407,4867],{"class":563},[397,5409,5410],{"class":470},"();",[397,5412,5413],{"class":770}," \u002F\u002F same defaults apply\n",[376,5415,5417],{"id":5416},"working-with-iris","Working with IRIs",[367,5419,5420,5421,5236,5424,5427,5428,5430,5431,5434,5435,5438],{},"API Platform identifies every resource by its IRI (Internationalized Resource Identifier) — the URL path the API exposes it at, e.g. ",[371,5422,5423],{},"\u002F_\u002Froutes\u002F018e4b…",[371,5425,5426],{},"\u002F_\u002Fpages\u002F018e4c…",". ",[371,5429,522],{}," uses IRIs internally for ",[371,5432,5433],{},"ComponentGroup.location"," and ",[371,5436,5437],{},"ComponentGroup.allowedComponents",", but you may need them directly in your own fixture code when a custom entity stores an IRI string field pointing to another API Platform resource.",[367,5440,5441,5442,5448],{},"See the ",[1776,5443,5447],{"href":5444,"rel":5445},"https:\u002F\u002Fapi-platform.com\u002Fdocs\u002Fcore\u002Firi\u002F",[5446],"nofollow","API Platform IRI documentation"," for the full reference on how IRIs are generated and resolved.",[367,5450,5128,5451,5454],{},[371,5452,5453],{},"ApiPlatform\\Metadata\\IriConverterInterface"," into your fixture class alongside the builder:",[388,5456,5458],{"className":429,"code":5457,"language":431,"meta":393,"style":393},"use ApiPlatform\\Metadata\\IriConverterInterface;\nuse Silverback\\ApiComponentsBundle\\Fixture\\AbstractCwaScaffold;\nuse Silverback\\ApiComponentsBundle\\Fixture\\CwaFixtureBuilder;\n\nclass AppFixtures extends AbstractCwaScaffold\n{\n    public function __construct(private readonly IriConverterInterface $iriConverter)\n    {\n    }\n\n    public function build(CwaFixtureBuilder $cwa): void\n    {\n        \u002F\u002F ...\n    }\n}\n",[371,5459,5460,5479,5499,5519,5523,5533,5537,5561,5565,5569,5573,5595,5599,5604,5608],{"__ignoreMap":393},[397,5461,5462,5464,5467,5469,5472,5474,5477],{"class":399,"line":400},[397,5463,482],{"class":456},[397,5465,5466],{"class":442}," ApiPlatform",[397,5468,464],{"class":488},[397,5470,5471],{"class":442},"Metadata",[397,5473,464],{"class":488},[397,5475,5476],{"class":442},"IriConverterInterface",[397,5478,471],{"class":470},[397,5480,5481,5483,5485,5487,5489,5491,5493,5495,5497],{"class":399,"line":446},[397,5482,482],{"class":456},[397,5484,485],{"class":442},[397,5486,464],{"class":488},[397,5488,491],{"class":442},[397,5490,464],{"class":488},[397,5492,496],{"class":442},[397,5494,464],{"class":488},[397,5496,421],{"class":442},[397,5498,471],{"class":470},[397,5500,5501,5503,5505,5507,5509,5511,5513,5515,5517],{"class":399,"line":453},[397,5502,482],{"class":456},[397,5504,485],{"class":442},[397,5506,464],{"class":488},[397,5508,491],{"class":442},[397,5510,464],{"class":488},[397,5512,496],{"class":442},[397,5514,464],{"class":488},[397,5516,522],{"class":442},[397,5518,471],{"class":470},[397,5520,5521],{"class":399,"line":474},[397,5522,450],{"emptyLinePlaceholder":449},[397,5524,5525,5527,5529,5531],{"class":399,"line":479},[397,5526,536],{"class":535},[397,5528,539],{"class":403},[397,5530,542],{"class":535},[397,5532,545],{"class":403},[397,5534,5535],{"class":399,"line":505},[397,5536,551],{"class":470},[397,5538,5539,5541,5543,5545,5547,5549,5551,5554,5556,5559],{"class":399,"line":527},[397,5540,557],{"class":535},[397,5542,560],{"class":535},[397,5544,4770],{"class":4769},[397,5546,567],{"class":470},[397,5548,4775],{"class":535},[397,5550,4778],{"class":535},[397,5552,5553],{"class":570}," IriConverterInterface",[397,5555,573],{"class":470},[397,5557,5558],{"class":576},"iriConverter",[397,5560,1325],{"class":470},[397,5562,5563],{"class":399,"line":532},[397,5564,592],{"class":470},[397,5566,5567],{"class":399,"line":548},[397,5568,711],{"class":470},[397,5570,5571],{"class":399,"line":554},[397,5572,450],{"emptyLinePlaceholder":449},[397,5574,5575,5577,5579,5581,5583,5585,5587,5589,5591,5593],{"class":399,"line":589},[397,5576,557],{"class":535},[397,5578,560],{"class":535},[397,5580,564],{"class":563},[397,5582,567],{"class":470},[397,5584,522],{"class":570},[397,5586,573],{"class":470},[397,5588,577],{"class":576},[397,5590,580],{"class":470},[397,5592,583],{"class":438},[397,5594,586],{"class":456},[397,5596,5597],{"class":399,"line":595},[397,5598,592],{"class":470},[397,5600,5601],{"class":399,"line":634},[397,5602,5603],{"class":770},"        \u002F\u002F ...\n",[397,5605,5606],{"class":399,"line":693},[397,5607,711],{"class":470},[397,5609,5610],{"class":399,"line":708},[397,5611,717],{"class":470},[831,5613,5615],{"id":5614},"getting-the-iri-of-a-persisted-entity","Getting the IRI of a persisted entity",[388,5617,5619],{"className":429,"code":5618,"language":431,"meta":393,"style":393},"$page = $cwa->page('home', 'PrimaryPageTemplate', layout: 'main', route: '\u002F');\n$cwa->flush();\n\n\u002F\u002F After flush() the page entity has a database ID and a resolvable IRI\n$pageIri = $this->iriConverter->getIriFromResource($page->getEntity());\n\u002F\u002F e.g. \"\u002F_\u002Fpages\u002F018e4b9a-…\"\n",[371,5620,5621,5680,5692,5696,5701,5732],{"__ignoreMap":393},[397,5622,5623,5625,5628,5630,5632,5634,5636,5638,5640,5642,5644,5646,5648,5650,5652,5654,5656,5658,5660,5662,5664,5666,5668,5670,5672,5674,5676,5678],{"class":399,"line":400},[397,5624,845],{"class":470},[397,5626,5627],{"class":576},"page ",[397,5629,887],{"class":438},[397,5631,573],{"class":470},[397,5633,577],{"class":576},[397,5635,603],{"class":438},[397,5637,643],{"class":563},[397,5639,567],{"class":470},[397,5641,612],{"class":611},[397,5643,650],{"class":407},[397,5645,612],{"class":611},[397,5647,620],{"class":470},[397,5649,623],{"class":611},[397,5651,659],{"class":407},[397,5653,612],{"class":611},[397,5655,620],{"class":470},[397,5657,666],{"class":403},[397,5659,583],{"class":470},[397,5661,623],{"class":611},[397,5663,615],{"class":407},[397,5665,612],{"class":611},[397,5667,620],{"class":470},[397,5669,679],{"class":403},[397,5671,583],{"class":470},[397,5673,623],{"class":611},[397,5675,686],{"class":407},[397,5677,612],{"class":611},[397,5679,631],{"class":470},[397,5681,5682,5684,5686,5688,5690],{"class":399,"line":446},[397,5683,845],{"class":470},[397,5685,577],{"class":576},[397,5687,603],{"class":438},[397,5689,702],{"class":563},[397,5691,705],{"class":470},[397,5693,5694],{"class":399,"line":453},[397,5695,450],{"emptyLinePlaceholder":449},[397,5697,5698],{"class":399,"line":474},[397,5699,5700],{"class":770},"\u002F\u002F After flush() the page entity has a database ID and a resolvable IRI\n",[397,5702,5703,5705,5708,5710,5712,5714,5716,5718,5721,5723,5725,5727,5730],{"class":399,"line":479},[397,5704,845],{"class":470},[397,5706,5707],{"class":576},"pageIri ",[397,5709,887],{"class":438},[397,5711,4858],{"class":488},[397,5713,603],{"class":438},[397,5715,5558],{"class":576},[397,5717,603],{"class":438},[397,5719,5720],{"class":563},"getIriFromResource",[397,5722,1351],{"class":470},[397,5724,643],{"class":576},[397,5726,603],{"class":438},[397,5728,5729],{"class":563},"getEntity",[397,5731,3146],{"class":470},[397,5733,5734],{"class":399,"line":505},[397,5735,5736],{"class":770},"\u002F\u002F e.g. \"\u002F_\u002Fpages\u002F018e4b9a-…\"\n",[831,5738,5740],{"id":5739},"getting-the-iri-of-a-class-collection-endpoint","Getting the IRI of a class (collection endpoint)",[367,5742,5743,5744,5747,5748,5751],{},"If you need the collection endpoint IRI for a resource class — for example to populate a custom ",[371,5745,5746],{},"$targetCollection: string"," field on a component — pass the class name and a ",[371,5749,5750],{},"GetCollection"," operation:",[388,5753,5755],{"className":429,"code":5754,"language":431,"meta":393,"style":393},"use ApiPlatform\\Metadata\\GetCollection;\nuse Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface;\n\n$collectionIri = $this->iriConverter->getIriFromResource(\n    BlogArticle::class,\n    UrlGeneratorInterface::ABS_PATH,\n    (new GetCollection())->withClass(BlogArticle::class)\n);\n\u002F\u002F e.g. \"\u002F_\u002Fblog_articles\"\n",[371,5756,5757,5773,5801,5805,5826,5837,5849,5877,5881],{"__ignoreMap":393},[397,5758,5759,5761,5763,5765,5767,5769,5771],{"class":399,"line":400},[397,5760,482],{"class":456},[397,5762,5466],{"class":442},[397,5764,464],{"class":488},[397,5766,5471],{"class":442},[397,5768,464],{"class":488},[397,5770,5750],{"class":442},[397,5772,471],{"class":470},[397,5774,5775,5777,5780,5782,5784,5786,5789,5791,5794,5796,5799],{"class":399,"line":446},[397,5776,482],{"class":456},[397,5778,5779],{"class":442}," Symfony",[397,5781,464],{"class":488},[397,5783,225],{"class":442},[397,5785,464],{"class":488},[397,5787,5788],{"class":442},"Routing",[397,5790,464],{"class":488},[397,5792,5793],{"class":442},"Generator",[397,5795,464],{"class":488},[397,5797,5798],{"class":442},"UrlGeneratorInterface",[397,5800,471],{"class":470},[397,5802,5803],{"class":399,"line":453},[397,5804,450],{"emptyLinePlaceholder":449},[397,5806,5807,5809,5812,5814,5816,5818,5820,5822,5824],{"class":399,"line":474},[397,5808,845],{"class":470},[397,5810,5811],{"class":576},"collectionIri ",[397,5813,887],{"class":438},[397,5815,4858],{"class":488},[397,5817,603],{"class":438},[397,5819,5558],{"class":576},[397,5821,603],{"class":438},[397,5823,5720],{"class":563},[397,5825,990],{"class":470},[397,5827,5828,5831,5833,5835],{"class":399,"line":479},[397,5829,5830],{"class":570},"    BlogArticle",[397,5832,2011],{"class":438},[397,5834,536],{"class":456},[397,5836,1002],{"class":470},[397,5838,5839,5842,5844,5847],{"class":399,"line":505},[397,5840,5841],{"class":570},"    UrlGeneratorInterface",[397,5843,2011],{"class":438},[397,5845,5846],{"class":442},"ABS_PATH",[397,5848,1002],{"class":470},[397,5850,5851,5854,5856,5859,5862,5864,5867,5869,5871,5873,5875],{"class":399,"line":527},[397,5852,5853],{"class":470},"    (",[397,5855,2510],{"class":456},[397,5857,5858],{"class":570}," GetCollection",[397,5860,5861],{"class":470},"())",[397,5863,603],{"class":438},[397,5865,5866],{"class":563},"withClass",[397,5868,567],{"class":470},[397,5870,2886],{"class":570},[397,5872,2011],{"class":438},[397,5874,536],{"class":456},[397,5876,1325],{"class":470},[397,5878,5879],{"class":399,"line":532},[397,5880,631],{"class":470},[397,5882,5883],{"class":399,"line":548},[397,5884,5885],{"class":770},"\u002F\u002F e.g. \"\u002F_\u002Fblog_articles\"\n",[831,5887,5889],{"id":5888},"practical-example-redirect-entity","Practical example — redirect entity",[388,5891,5893],{"className":429,"code":5892,"language":431,"meta":393,"style":393},"$redirect = new Redirect();\n$redirect->from = '\u002Fold-path';\n$redirect->toIri = $this->iriConverter->getIriFromResource($targetPage);\n$cwa->persist($redirect);\n$cwa->flush();\n",[371,5894,5895,5911,5934,5964,5980],{"__ignoreMap":393},[397,5896,5897,5899,5902,5904,5906,5909],{"class":399,"line":400},[397,5898,845],{"class":470},[397,5900,5901],{"class":576},"redirect ",[397,5903,887],{"class":438},[397,5905,2282],{"class":456},[397,5907,5908],{"class":570}," Redirect",[397,5910,705],{"class":470},[397,5912,5913,5915,5918,5920,5923,5925,5927,5930,5932],{"class":399,"line":446},[397,5914,845],{"class":470},[397,5916,5917],{"class":576},"redirect",[397,5919,603],{"class":438},[397,5921,5922],{"class":576},"from ",[397,5924,887],{"class":438},[397,5926,623],{"class":611},[397,5928,5929],{"class":407},"\u002Fold-path",[397,5931,612],{"class":611},[397,5933,471],{"class":470},[397,5935,5936,5938,5940,5942,5945,5947,5949,5951,5953,5955,5957,5959,5962],{"class":399,"line":453},[397,5937,845],{"class":470},[397,5939,5917],{"class":576},[397,5941,603],{"class":438},[397,5943,5944],{"class":576},"toIri ",[397,5946,887],{"class":438},[397,5948,4858],{"class":488},[397,5950,603],{"class":438},[397,5952,5558],{"class":576},[397,5954,603],{"class":438},[397,5956,5720],{"class":563},[397,5958,1351],{"class":470},[397,5960,5961],{"class":576},"targetPage",[397,5963,631],{"class":470},[397,5965,5966,5968,5970,5972,5974,5976,5978],{"class":399,"line":474},[397,5967,845],{"class":470},[397,5969,577],{"class":576},[397,5971,603],{"class":438},[397,5973,1659],{"class":563},[397,5975,1351],{"class":470},[397,5977,5917],{"class":576},[397,5979,631],{"class":470},[397,5981,5982,5984,5986,5988,5990],{"class":399,"line":479},[397,5983,845],{"class":470},[397,5985,577],{"class":576},[397,5987,603],{"class":438},[397,5989,702],{"class":563},[397,5991,705],{"class":470},[5993,5994,5995],"blockquote",{},[367,5996,5997,951,6000,6003,6004,6007,6008,6011,6012,6014],{},[922,5998,5999],{},"Note:",[371,6001,6002],{},"IriConverterInterface::getIriFromResource()"," requires the entity to already have a persisted ID. Call ",[371,6005,6006],{},"$cwa->flush()"," (or ",[371,6009,6010],{},"$manager->flush()"," inside an ",[371,6013,1783],{}," callback) before converting an entity that was just created.",[824,6016],{},[376,6018,6020],{"id":6019},"tips","Tips",[902,6022,6023,6032,6043,6048],{},[905,6024,6025,6026,5236,6029,6031],{},"You don't need to call ",[371,6027,6028],{},"$manager->persist()",[371,6030,6010],{}," yourself — the builder handles it",[905,6033,6034,6035,6038,6039,6042],{},"Timestamps (",[371,6036,6037],{},"createdAt",", ",[371,6040,6041],{},"modifiedAt",") are populated automatically",[905,6044,3492,6045,6047],{},[371,6046,373],{}," again any time you register new entities or positions after a previous call — all phases are idempotent and only process new work",[905,6049,6050,6052,6053,6055],{},[371,6051,3236],{}," is the correct way to share a group between two layouts — don't try to manually link the same ",[371,6054,2039],{}," to two owners",[6057,6058,6059],"style",{},"html pre.shiki code .sRCss, html code.shiki .sRCss{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#FFCB6B}html pre.shiki code .sLL54, html code.shiki .sLL54{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#C3E88D}html pre.shiki code .szhYu, html code.shiki .szhYu{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .sVlFx, html code.shiki .sVlFx{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#89DDFF}html pre.shiki code .sc2zw, html code.shiki .sc2zw{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#BABED8}html pre.shiki code .stmX-, html code.shiki .stmX-{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F78C6C}html pre.shiki code .sn4go, html code.shiki .sn4go{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#89DDFF}html pre.shiki code .sOvfz, html code.shiki .sOvfz{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#89DDFF}html pre.shiki code .sBtbT, html code.shiki .sBtbT{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#89DDFF}html pre.shiki code .swB56, html code.shiki .swB56{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#C792EA}html pre.shiki code .sKpYG, html code.shiki .sKpYG{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#82AAFF}html pre.shiki code .sbW4m, html code.shiki .sbW4m{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#FFCB6B}html pre.shiki code .sPB8G, html code.shiki .sPB8G{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#BABED8}html pre.shiki code .seSrl, html code.shiki .seSrl{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#89DDFF}html pre.shiki code .sTBSN, html code.shiki .sTBSN{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s-h7I, html code.shiki .s-h7I{--shiki-light:#22863A;--shiki-default:#85E89D;--shiki-dark:#F07178}html pre.shiki code .sm4w6, html code.shiki .sm4w6{--shiki-light:#D73A49;--shiki-light-font-style:inherit;--shiki-default:#F97583;--shiki-default-font-style:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s3Ny6, html code.shiki .s3Ny6{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#82AAFF}html pre.shiki code .scSvc, html code.shiki .scSvc{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#F78C6C}",{"title":393,"searchDepth":446,"depth":446,"links":6061},[6062,6063,6072,6084,6086,6087,6088,6089,6093,6098],{"id":378,"depth":446,"text":379},{"id":828,"depth":446,"text":829,"children":6064},[6065,6066,6067,6068,6069,6070,6071],{"id":606,"depth":453,"text":835},{"id":643,"depth":453,"text":913},{"id":1470,"depth":453,"text":1473},{"id":1616,"depth":453,"text":1619},{"id":1659,"depth":453,"text":1662},{"id":1698,"depth":453,"text":1169},{"id":702,"depth":453,"text":373},{"id":1796,"depth":446,"text":1797,"children":6073},[6074,6076,6078,6080,6082],{"id":1800,"depth":453,"text":6075},"LayoutBuilder — from $cwa->layout()",{"id":2047,"depth":453,"text":6077},"PageBuilder — from $cwa->page()",{"id":2360,"depth":453,"text":6079},"PageDataBuilder — from $cwa->pageData()",{"id":2685,"depth":453,"text":6081},"GroupBuilder — from any ->group() call",{"id":2936,"depth":453,"text":6083},"ComponentBuilder — from $cwa->component()",{"id":3233,"depth":446,"text":6085},"locationReference — Shared Groups",{"id":3429,"depth":446,"text":3430},{"id":3533,"depth":446,"text":3534},{"id":4555,"depth":446,"text":4556},{"id":4660,"depth":446,"text":4661,"children":6090},[6091,6092],{"id":5053,"depth":453,"text":5054},{"id":5242,"depth":453,"text":5243},{"id":5416,"depth":446,"text":5417,"children":6094},[6095,6096,6097],{"id":5614,"depth":453,"text":5615},{"id":5739,"depth":453,"text":5740},{"id":5888,"depth":453,"text":5889},{"id":6019,"depth":446,"text":6020},"Use AbstractCwaScaffold and CwaFixtureBuilder to seed your database with layouts, pages, routes, components, and page data in a fluent API.","md",null,{},{"title":125,"description":6099},"HrlLCbMas6zaEhIQLfIguc-dKnhHYoqL4yWfgtlfi3Q",[6106,6108],{"title":121,"path":122,"stem":123,"description":6107,"children":-1},"JWT cookie authentication, the AbstractUser entity, email verification, password reset, and Symfony security configuration.",{"title":129,"path":130,"stem":131,"description":6109,"children":-1},"Complete reference for all silverback_api_components bundle configuration options.",1782512896944]