[{"data":1,"prerenderedAt":3649},["ShallowReactive",2],{"navigation_docs":3,"-apps-app-development-coding-standards":1905,"-apps-app-development-coding-standards-surround":3644},[4,136,463,647,1532,1622,1628,1634,1693,1792],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","/getting-started","0.getting-started/0.index",[9,10,14,18,56,81,115,132],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Starting new project","/getting-started/starting-new-project","0.getting-started/1.starting-new-project",{"title":15,"path":16,"stem":17},"What is Laioutr?","/getting-started/what-is-laioutr","0.getting-started/2.what-is-laioutr",{"title":19,"path":20,"stem":21,"children":22,"page":55},"Key Concepts","/getting-started/key-concepts","0.getting-started/3.key-concepts",[23,27,31,35,39,43,47,51],{"title":24,"path":25,"stem":26},"Architecture","/getting-started/key-concepts/architecture","0.getting-started/3.key-concepts/1.architecture",{"title":28,"path":29,"stem":30},"Data Model","/getting-started/key-concepts/data-model","0.getting-started/3.key-concepts/2.data-model",{"title":32,"path":33,"stem":34},"Internationalization","/getting-started/key-concepts/5.internationalization","0.getting-started/3.key-concepts/3.5.internationalization",{"title":36,"path":37,"stem":38},"Data Flow","/getting-started/key-concepts/data-flow","0.getting-started/3.key-concepts/3.data-flow",{"title":40,"path":41,"stem":42},"Extensibility","/getting-started/key-concepts/extensibility","0.getting-started/3.key-concepts/4.extensibility",{"title":44,"path":45,"stem":46},"Philosophy","/getting-started/key-concepts/philosophy","0.getting-started/3.key-concepts/5.philosophy",{"title":48,"path":49,"stem":50},"CI/CD Pipeline","/getting-started/key-concepts/ci-cd-pipeline","0.getting-started/3.key-concepts/6.ci-cd-pipeline",{"title":52,"path":53,"stem":54},"Multi-tenancy","/getting-started/key-concepts/multi-tenancy","0.getting-started/3.key-concepts/multi-tenancy",false,{"title":57,"path":58,"stem":59,"children":60,"page":55},"Next Steps","/getting-started/next-steps","0.getting-started/4.next-steps",[61,65,69,73,77],{"title":62,"path":63,"stem":64},"Create Organization and Project","/getting-started/next-steps/create-org-and-project","0.getting-started/4.next-steps/0.create-org-and-project",{"title":66,"path":67,"stem":68},"First Project Configuration","/getting-started/next-steps/first-project-config","0.getting-started/4.next-steps/1.first-project-config",{"title":70,"path":71,"stem":72},"Setup Local Development Environment","/getting-started/next-steps/local-setup","0.getting-started/4.next-steps/3.local-setup",{"title":74,"path":75,"stem":76},"Create your first custom app","/getting-started/next-steps/create-custom-app","0.getting-started/4.next-steps/4.create-custom-app",{"title":78,"path":79,"stem":80},"CLI","/getting-started/next-steps/cli","0.getting-started/4.next-steps/5.cli",{"title":82,"path":83,"stem":84,"children":85},"Changelogs","/getting-started/changelogs","0.getting-started/5.Changelogs/0.index",[86,87,91,95,99,103,107,111],{"title":82,"path":83,"stem":84},{"title":88,"path":89,"stem":90},"Canonical Types Changelog","/getting-started/changelogs/canonical-types-changelog","0.getting-started/5.Changelogs/canonical-types-changelog",{"title":92,"path":93,"stem":94},"CLI Changelog","/getting-started/changelogs/cli-changelog","0.getting-started/5.Changelogs/cli-changelog",{"title":96,"path":97,"stem":98},"Cockpit Changelog","/getting-started/changelogs/cockpit-changelog","0.getting-started/5.Changelogs/cockpit-changelog",{"title":100,"path":101,"stem":102},"Figma Kit Changelog","/getting-started/changelogs/figma-kit-changelog","0.getting-started/5.Changelogs/figma-kit-changelog",{"title":104,"path":105,"stem":106},"Frontend Changelog","/getting-started/changelogs/frontend-changelog","0.getting-started/5.Changelogs/frontend-changelog",{"title":108,"path":109,"stem":110},"Orchestr Changelog","/getting-started/changelogs/orchestr-changelog","0.getting-started/5.Changelogs/orchestr-changelog",{"title":112,"path":113,"stem":114},"UI Changelog","/getting-started/changelogs/ui-changelog","0.getting-started/5.Changelogs/ui-changelog",{"title":116,"path":117,"stem":118,"children":119,"page":55},"Hints And Tips","/getting-started/hints-and-tips","0.getting-started/6.Hints-and-Tips",[120,124,128],{"title":121,"path":122,"stem":123},"Introduction","/getting-started/hints-and-tips/introduction","0.getting-started/6.Hints-and-Tips/0.introduction",{"title":125,"path":126,"stem":127},"Developer tools","/getting-started/hints-and-tips/developer-tools","0.getting-started/6.Hints-and-Tips/1.developer-tools",{"title":129,"path":130,"stem":131},"Claude Code plugin","/getting-started/hints-and-tips/claude-marketplace","0.getting-started/6.Hints-and-Tips/2.claude-marketplace",{"title":133,"path":134,"stem":135},"MCP Server","/getting-started/mcp-server","0.getting-started/7.mcp-server",{"title":137,"path":138,"stem":139,"children":140},"Frontend","/frontend","1.Frontend/0.index",[141,142,153,215,241,305],{"title":137,"path":138,"stem":139},{"title":121,"path":143,"stem":144,"children":145,"page":55},"/frontend/introduction","1.Frontend/1.Introduction",[146,149],{"title":19,"path":147,"stem":148},"/frontend/introduction/key-concepts","1.Frontend/1.Introduction/0.key-concepts",{"title":150,"path":151,"stem":152},"Tech Stack","/frontend/introduction/tech-stack","1.Frontend/1.Introduction/1.tech-stack",{"title":154,"path":155,"stem":156,"children":157},"Features","/frontend/features","1.Frontend/2.Features/0.index",[158,159,163,167,171,175,179,183,187,191,195,199,203,207,211],{"title":154,"path":155,"stem":156},{"title":160,"path":161,"stem":162},"Consent Management","/frontend/features/consent-management","1.Frontend/2.Features/consent-management",{"title":164,"path":165,"stem":166},"Currencies","/frontend/features/currencies","1.Frontend/2.Features/currencies",{"title":168,"path":169,"stem":170},"Environments & Staging","/frontend/features/environments","1.Frontend/2.Features/environments",{"title":172,"path":173,"stem":174},"Hooks","/frontend/features/hooks","1.Frontend/2.Features/hooks",{"title":176,"path":177,"stem":178},"Media and Media Library","/frontend/features/media","1.Frontend/2.Features/media",{"title":180,"path":181,"stem":182},"Multi-language Support","/frontend/features/multi-language-support","1.Frontend/2.Features/multi-language-support",{"title":184,"path":185,"stem":186},"Multi-market","/frontend/features/multi-market","1.Frontend/2.Features/multi-market",{"title":188,"path":189,"stem":190},"Page Types","/frontend/features/pagetypes","1.Frontend/2.Features/pagetypes",{"title":192,"path":193,"stem":194},"PWA","/frontend/features/pwa","1.Frontend/2.Features/pwa",{"title":196,"path":197,"stem":198},"Redirects","/frontend/features/redirects","1.Frontend/2.Features/redirects",{"title":200,"path":201,"stem":202},"Routing","/frontend/features/routing","1.Frontend/2.Features/routing",{"title":204,"path":205,"stem":206},"Server-Side Rendering (SSR) and Caching","/frontend/features/ssr-and-caching","1.Frontend/2.Features/ssr-and-caching",{"title":208,"path":209,"stem":210},"Tracking","/frontend/features/tracking","1.Frontend/2.Features/tracking",{"title":212,"path":213,"stem":214},"Z-Ordering","/frontend/features/z-ordering","1.Frontend/2.Features/z-ordering",{"title":216,"path":217,"stem":218,"children":219},"SEO","/frontend/seo","1.Frontend/3.SEO/0.index",[220,221,225,229,233,237],{"title":216,"path":217,"stem":218},{"title":222,"path":223,"stem":224},"Link Checker","/frontend/seo/link-checker","1.Frontend/3.SEO/link-checker",{"title":226,"path":227,"stem":228},"OG Image","/frontend/seo/og-image","1.Frontend/3.SEO/og-image",{"title":230,"path":231,"stem":232},"Robots.txt","/frontend/seo/robots-txt","1.Frontend/3.SEO/robots-txt",{"title":234,"path":235,"stem":236},"Schema.org","/frontend/seo/schema-org","1.Frontend/3.SEO/schema-org",{"title":238,"path":239,"stem":240},"Sitemap","/frontend/seo/sitemap","1.Frontend/3.SEO/sitemap",{"title":242,"path":243,"stem":244,"children":245},"Backend for Frontend","/frontend/orchestr","1.Frontend/4.Orchestr/0.index",[246,247,273,277,281,285,289,293,297,301],{"title":242,"path":243,"stem":244},{"title":248,"path":249,"stem":250,"children":251},"Recipes","/frontend/orchestr/recipes","1.Frontend/4.Orchestr/99.recipes/0.index",[252,253,257,261,265,269],{"title":248,"path":249,"stem":250},{"title":254,"path":255,"stem":256},"Analytics components from query handlers","/frontend/orchestr/recipes/analytics-from-query-handlers","1.Frontend/4.Orchestr/99.recipes/analytics-from-query-handlers",{"title":258,"path":259,"stem":260},"Identity cookies (cart and visitor IDs)","/frontend/orchestr/recipes/identity-cookies","1.Frontend/4.Orchestr/99.recipes/identity-cookies",{"title":262,"path":263,"stem":264},"System bootstrap in extendRequest","/frontend/orchestr/recipes/system-bootstrap","1.Frontend/4.Orchestr/99.recipes/system-bootstrap",{"title":266,"path":267,"stem":268},"Translating vendor errors","/frontend/orchestr/recipes/translating-vendor-errors","1.Frontend/4.Orchestr/99.recipes/translating-vendor-errors",{"title":270,"path":271,"stem":272},"Userland cache patterns","/frontend/orchestr/recipes/userland-cache-patterns","1.Frontend/4.Orchestr/99.recipes/userland-cache-patterns",{"title":274,"path":275,"stem":276},"Actions","/frontend/orchestr/actions","1.Frontend/4.Orchestr/Actions",{"title":278,"path":279,"stem":280},"Caching","/frontend/orchestr/caching","1.Frontend/4.Orchestr/Caching",{"title":282,"path":283,"stem":284},"Middleware","/frontend/orchestr/middleware","1.Frontend/4.Orchestr/Middleware",{"title":286,"path":287,"stem":288},"Queries & Links","/frontend/orchestr/queries","1.Frontend/4.Orchestr/Queries",{"title":290,"path":291,"stem":292},"Component Resolvers","/frontend/orchestr/component-resolvers","1.Frontend/4.Orchestr/component-resolvers",{"title":294,"path":295,"stem":296},"Filters","/frontend/orchestr/filters","1.Frontend/4.Orchestr/filters",{"title":298,"path":299,"stem":300},"URL Query Parameters","/frontend/orchestr/url-query-params","1.Frontend/4.Orchestr/url-query-params",{"title":302,"path":303,"stem":304},"Orchestr Wire Format","/frontend/orchestr/wire-format","1.Frontend/4.Orchestr/wire-format",{"title":306,"path":307,"stem":308,"children":309},"API Reference","/frontend/api-reference","1.Frontend/99.api-reference/0.index",[310,311,373,376,406,422,430,441,449,456],{"title":306,"path":307,"stem":308},{"title":312,"path":313,"stem":314,"children":315},"Entities","/frontend/api-reference/entities","1.Frontend/99.api-reference/01.entities/0.index",[316,317,321,325,329,333,337,341,345,349,353,357,361,365,369],{"title":312,"path":313,"stem":314},{"title":318,"path":319,"stem":320},"Product","/frontend/api-reference/entities/product","1.Frontend/99.api-reference/01.entities/1.product",{"title":322,"path":323,"stem":324},"SuggestedSearch","/frontend/api-reference/entities/suggested-search","1.Frontend/99.api-reference/01.entities/10.suggested-search",{"title":326,"path":327,"stem":328},"SuggestedSearchEntry","/frontend/api-reference/entities/suggested-search-entry","1.Frontend/99.api-reference/01.entities/11.suggested-search-entry",{"title":330,"path":331,"stem":332},"BlogCollection","/frontend/api-reference/entities/blog-collection","1.Frontend/99.api-reference/01.entities/12.blog-collection",{"title":334,"path":335,"stem":336},"Comment","/frontend/api-reference/entities/comment","1.Frontend/99.api-reference/01.entities/13.comment",{"title":338,"path":339,"stem":340},"Location","/frontend/api-reference/entities/location","1.Frontend/99.api-reference/01.entities/14.location",{"title":342,"path":343,"stem":344},"ProductVariant","/frontend/api-reference/entities/product-variant","1.Frontend/99.api-reference/01.entities/2.product-variant",{"title":346,"path":347,"stem":348},"Category","/frontend/api-reference/entities/category","1.Frontend/99.api-reference/01.entities/3.category",{"title":350,"path":351,"stem":352},"Cart","/frontend/api-reference/entities/cart","1.Frontend/99.api-reference/01.entities/4.cart",{"title":354,"path":355,"stem":356},"CartItem","/frontend/api-reference/entities/cart-item","1.Frontend/99.api-reference/01.entities/5.cart-item",{"title":358,"path":359,"stem":360},"Review","/frontend/api-reference/entities/review","1.Frontend/99.api-reference/01.entities/6.review",{"title":362,"path":363,"stem":364},"BreadcrumbItem","/frontend/api-reference/entities/breadcrumb-item","1.Frontend/99.api-reference/01.entities/7.breadcrumb-item",{"title":366,"path":367,"stem":368},"MenuItem","/frontend/api-reference/entities/menu-item","1.Frontend/99.api-reference/01.entities/8.menu-item",{"title":370,"path":371,"stem":372},"BlogPost","/frontend/api-reference/entities/blog-post","1.Frontend/99.api-reference/01.entities/9.blog-post",{"title":188,"path":374,"stem":375},"/frontend/api-reference/page-types","1.Frontend/99.api-reference/02.page-types",{"title":377,"path":378,"stem":379,"children":380},"Common Types","/frontend/api-reference/common-types","1.Frontend/99.api-reference/03.common-types/0.index",[381,382,386,390,394,398,402],{"title":377,"path":378,"stem":379},{"title":383,"path":384,"stem":385},"Link","/frontend/api-reference/common-types/link","1.Frontend/99.api-reference/03.common-types/1.link",{"title":387,"path":388,"stem":389},"Media","/frontend/api-reference/common-types/media","1.Frontend/99.api-reference/03.common-types/2.media",{"title":391,"path":392,"stem":393},"Money","/frontend/api-reference/common-types/money","1.Frontend/99.api-reference/03.common-types/3.money",{"title":395,"path":396,"stem":397},"UnitPrice","/frontend/api-reference/common-types/unit-price","1.Frontend/99.api-reference/03.common-types/4.unit-price",{"title":399,"path":400,"stem":401},"Measurement","/frontend/api-reference/common-types/measurement","1.Frontend/99.api-reference/03.common-types/5.measurement",{"title":403,"path":404,"stem":405},"Opening Hours","/frontend/api-reference/common-types/opening-hours","1.Frontend/99.api-reference/03.common-types/6.opening-hours",{"title":407,"path":408,"stem":409,"children":410,"page":55},"Ecommerce","/frontend/api-reference/ecommerce","1.Frontend/99.api-reference/10.ecommerce",[411,414,418],{"title":274,"path":412,"stem":413},"/frontend/api-reference/ecommerce/actions","1.Frontend/99.api-reference/10.ecommerce/1.actions",{"title":415,"path":416,"stem":417},"Queries","/frontend/api-reference/ecommerce/queries","1.Frontend/99.api-reference/10.ecommerce/2.queries",{"title":419,"path":420,"stem":421},"Errors","/frontend/api-reference/ecommerce/errors","1.Frontend/99.api-reference/10.ecommerce/3.errors",{"title":423,"path":424,"stem":425,"children":426,"page":55},"Newsletter","/frontend/api-reference/newsletter","1.Frontend/99.api-reference/11.newsletter",[427],{"title":274,"path":428,"stem":429},"/frontend/api-reference/newsletter/actions","1.Frontend/99.api-reference/11.newsletter/1.actions",{"title":431,"path":432,"stem":433,"children":434,"page":55},"Blog","/frontend/api-reference/blog","1.Frontend/99.api-reference/12.blog",[435,438],{"title":415,"path":436,"stem":437},"/frontend/api-reference/blog/queries","1.Frontend/99.api-reference/12.blog/1.queries",{"title":419,"path":439,"stem":440},"/frontend/api-reference/blog/errors","1.Frontend/99.api-reference/12.blog/2.errors",{"title":442,"path":443,"stem":444,"children":445,"page":55},"Suggested Search","/frontend/api-reference/suggested-search","1.Frontend/99.api-reference/13.suggested-search",[446],{"title":415,"path":447,"stem":448},"/frontend/api-reference/suggested-search/queries","1.Frontend/99.api-reference/13.suggested-search/1.queries",{"title":208,"path":450,"stem":451,"children":452,"page":55},"/frontend/api-reference/tracking","1.Frontend/99.api-reference/14.tracking",[453],{"title":274,"path":454,"stem":455},"/frontend/api-reference/tracking/actions","1.Frontend/99.api-reference/14.tracking/1.actions",{"title":338,"path":457,"stem":458,"children":459,"page":55},"/frontend/api-reference/location","1.Frontend/99.api-reference/15.location",[460],{"title":415,"path":461,"stem":462},"/frontend/api-reference/location/queries","1.Frontend/99.api-reference/15.location/1.queries",{"title":464,"path":465,"stem":466,"children":467},"Apps","/apps","2.Apps/0.index",[468,469,545,631],{"title":464,"path":465,"stem":466},{"title":470,"path":471,"stem":472,"children":473},"App Development","/apps/app-development","2.Apps/app-development/0.index",[474,475,497,501,505,509,513,517,521,525,529,533,537,541],{"title":470,"path":471,"stem":472},{"title":476,"path":477,"stem":478,"children":479},"Guides","/apps/app-development/guides","2.Apps/app-development/99.guides/0.index",[480,481,485,489,493],{"title":476,"path":477,"stem":478},{"title":482,"path":483,"stem":484},"Separate schema components from UI components","/apps/app-development/guides/schema-components-vs-ui-components","2.Apps/app-development/99.guides/schema-components-vs-ui-components",{"title":486,"path":487,"stem":488},"Section config standard","/apps/app-development/guides/section-config-standard","2.Apps/app-development/99.guides/section-config-standard",{"title":490,"path":491,"stem":492},"Shared field factories","/apps/app-development/guides/shared-field-factories","2.Apps/app-development/99.guides/shared-field-factories",{"title":494,"path":495,"stem":496},"How to write CSS","/apps/app-development/guides/writing-css","2.Apps/app-development/99.guides/writing-css",{"title":498,"path":499,"stem":500},"App Configuration","/apps/app-development/app-configuration","2.Apps/app-development/app-configuration",{"title":502,"path":503,"stem":504},"App Starter","/apps/app-development/app-starter","2.Apps/app-development/app-starter",{"title":506,"path":507,"stem":508},"Best Practice","/apps/app-development/best-practice","2.Apps/app-development/best-practice",{"title":510,"path":511,"stem":512},"Block Definitions","/apps/app-development/block-definitions","2.Apps/app-development/block-definitions",{"title":514,"path":515,"stem":516},"Coding Standards","/apps/app-development/coding-standards","2.Apps/app-development/coding-standards",{"title":518,"path":519,"stem":520},"Consent Adapters","/apps/app-development/consent-adapters","2.Apps/app-development/consent-adapters",{"title":522,"path":523,"stem":524},"Consuming Query Fields","/apps/app-development/consuming-query-fields","2.Apps/app-development/consuming-query-fields",{"title":526,"path":527,"stem":528},"Implementation Overview","/apps/app-development/implementation-overview","2.Apps/app-development/implementation-overview",{"title":530,"path":531,"stem":532},"Platform Dependencies","/apps/app-development/platform-dependencies","2.Apps/app-development/platform-dependencies",{"title":534,"path":535,"stem":536},"Schema Fields","/apps/app-development/schema-fields","2.Apps/app-development/schema-fields",{"title":538,"path":539,"stem":540},"Section Definitions","/apps/app-development/section-definitions","2.Apps/app-development/section-definitions",{"title":542,"path":543,"stem":544},"Studio Icons","/apps/app-development/studio-icons","2.Apps/app-development/studio-icons",{"title":546,"path":547,"stem":548,"children":549},"App Docs","/apps/app-docs","2.Apps/app-docs/0.index",[550,551,555,559,563,567,571,575,579,583,587,591,595,599,603,607,611,615,619,623,627],{"title":546,"path":547,"stem":548},{"title":552,"path":553,"stem":554},"Actindo","/apps/app-docs/actindo","2.Apps/app-docs/actindo",{"title":556,"path":557,"stem":558},"Adobe Commerce","/apps/app-docs/adobe-commerce","2.Apps/app-docs/adobe-commerce",{"title":560,"path":561,"stem":562},"B2Bsellers","/apps/app-docs/b2bsellers","2.Apps/app-docs/b2bsellers",{"title":564,"path":565,"stem":566},"Battery Included","/apps/app-docs/battery-included","2.Apps/app-docs/battery-included",{"title":568,"path":569,"stem":570},"CCM19","/apps/app-docs/ccm19","2.Apps/app-docs/ccm19",{"title":572,"path":573,"stem":574},"Cookiebot","/apps/app-docs/cookiebot","2.Apps/app-docs/cookiebot",{"title":576,"path":577,"stem":578},"Google Tag Manager (GTM)","/apps/app-docs/gtm","2.Apps/app-docs/gtm",{"title":580,"path":581,"stem":582},"Hygraph","/apps/app-docs/hygraph","2.Apps/app-docs/hygraph",{"title":584,"path":585,"stem":586},"JTL Platform","/apps/app-docs/jtl-platform","2.Apps/app-docs/jtl-platform",{"title":588,"path":589,"stem":590},"Nimstrata Google Retail API","/apps/app-docs/nimstrata","2.Apps/app-docs/nimstrata",{"title":592,"path":593,"stem":594},"Pimcore","/apps/app-docs/pimcore","2.Apps/app-docs/pimcore",{"title":596,"path":597,"stem":598},"Sylius","/apps/app-docs/sylius","2.Apps/app-docs/sylius",{"title":600,"path":601,"stem":602},"Commercetools","/apps/app-docs/commercetools","2.apps/app-docs/commercetools",{"title":604,"path":605,"stem":606},"Emporix","/apps/app-docs/emporix","2.apps/app-docs/emporix",{"title":608,"path":609,"stem":610},"Klaviyo","/apps/app-docs/klaviyo","2.apps/app-docs/klaviyo",{"title":612,"path":613,"stem":614},"OXID eShop","/apps/app-docs/oxid","2.apps/app-docs/oxid",{"title":616,"path":617,"stem":618},"Shopify","/apps/app-docs/shopify","2.apps/app-docs/shopify",{"title":620,"path":621,"stem":622},"Shopware","/apps/app-docs/shopware","2.apps/app-docs/shopware",{"title":624,"path":625,"stem":626},"Vercel Analytics","/apps/app-docs/vercel-analytics","2.apps/app-docs/vercel-analytics",{"title":628,"path":629,"stem":630},"Vercel Speed Insights","/apps/app-docs/vercel-speed-insights","2.apps/app-docs/vercel-speed-insights",{"title":632,"path":633,"stem":634,"children":635,"page":55},"Essentials","/apps/essentials","2.Apps/essentials",[636,640,644],{"title":637,"path":638,"stem":639},"Legal","/apps/essentials/legal","2.Apps/essentials/legal",{"title":641,"path":642,"stem":643},"Mailer","/apps/essentials/mailer","2.Apps/essentials/mailer",{"title":216,"path":645,"stem":646},"/apps/essentials/seo","2.Apps/essentials/seo",{"title":648,"path":649,"stem":650,"children":651},"Laioutr UI","/laioutr-ui","3.laioutr-ui/0.index",[652,653,685,691,697,885,902,908,914,968,986,1116],{"title":648,"path":649,"stem":650},{"title":5,"path":654,"stem":655,"children":656},"/laioutr-ui/getting-started","3.laioutr-ui/01.getting-started/0.index",[657,658,662,666,670,674,678,682],{"title":5,"path":654,"stem":655},{"title":659,"path":660,"stem":661},"Browser support","/laioutr-ui/getting-started/browser-support","3.laioutr-ui/01.getting-started/1.browser-support",{"title":663,"path":664,"stem":665},"Common Data","/laioutr-ui/getting-started/common-data","3.laioutr-ui/01.getting-started/99.common-data",{"title":667,"path":668,"stem":669},"CSS Layers","/laioutr-ui/getting-started/css-layers","3.laioutr-ui/01.getting-started/css-layers",{"title":671,"path":672,"stem":673},"Figma Kit","/laioutr-ui/getting-started/figma-kit","3.laioutr-ui/01.getting-started/figma-kit",{"title":675,"path":676,"stem":677},"Surface Tone","/laioutr-ui/getting-started/surface-tone","3.laioutr-ui/01.getting-started/surface-tone",{"title":679,"path":680,"stem":681},"Theming","/laioutr-ui/getting-started/theming","3.laioutr-ui/01.getting-started/theming",{"title":212,"path":683,"stem":684},"/laioutr-ui/getting-started/z-ordering","3.laioutr-ui/01.getting-started/z-ordering",{"title":686,"path":687,"stem":688,"children":689},"B2B","/laioutr-ui/b2b","3.laioutr-ui/b2b/0.index",[690],{"title":686,"path":687,"stem":688},{"title":692,"path":693,"stem":694,"children":695},"Booking","/laioutr-ui/booking","3.laioutr-ui/booking/0.index",[696],{"title":692,"path":693,"stem":694},{"title":698,"path":699,"stem":700,"children":701},"CMS","/laioutr-ui/cms","3.laioutr-ui/cms/0.index",[702,703,709,734,746,750,754,758,762,766,778,799,820,836],{"title":698,"path":699,"stem":700},{"title":704,"path":705,"stem":706,"children":707},"Alphabetical Index","/laioutr-ui/cms/alphabetical-index","3.laioutr-ui/cms/alphabetical-index",[708],{"title":704,"path":705,"stem":706},{"title":710,"path":711,"stem":712,"children":713,"page":55},"Banner","/laioutr-ui/cms/banner","3.laioutr-ui/cms/banner",[714,718,722,726,730],{"title":715,"path":716,"stem":717},"Banner Basic","/laioutr-ui/cms/banner/banner-basic","3.laioutr-ui/cms/banner/banner-basic",{"title":719,"path":720,"stem":721},"Banner Integrated","/laioutr-ui/cms/banner/banner-integrated","3.laioutr-ui/cms/banner/banner-integrated",{"title":723,"path":724,"stem":725},"Banner Showcase","/laioutr-ui/cms/banner/banner-showcase","3.laioutr-ui/cms/banner/banner-showcase",{"title":727,"path":728,"stem":729},"Media + Text","/laioutr-ui/cms/banner/media-text","3.laioutr-ui/cms/banner/media-text",{"title":731,"path":732,"stem":733},"USP Banner","/laioutr-ui/cms/banner/usp-banner","3.laioutr-ui/cms/banner/usp-banner",{"title":431,"path":735,"stem":736,"children":737,"page":55},"/laioutr-ui/cms/blog","3.laioutr-ui/cms/blog",[738,742],{"title":739,"path":740,"stem":741},"Blog Post Detail","/laioutr-ui/cms/blog/blog-post-detail","3.laioutr-ui/cms/blog/blog-post-detail",{"title":743,"path":744,"stem":745},"Blog Post Listing","/laioutr-ui/cms/blog/blog-post-listing","3.laioutr-ui/cms/blog/blog-post-listing",{"title":747,"path":748,"stem":749},"Brand Hero","/laioutr-ui/cms/brand-hero","3.laioutr-ui/cms/brand-hero",{"title":751,"path":752,"stem":753},"Container","/laioutr-ui/cms/container","3.laioutr-ui/cms/container",{"title":755,"path":756,"stem":757},"Content Grid","/laioutr-ui/cms/content-grid","3.laioutr-ui/cms/content-grid",{"title":759,"path":760,"stem":761},"Editorial Grid","/laioutr-ui/cms/editorial-grid","3.laioutr-ui/cms/editorial-grid",{"title":763,"path":764,"stem":765},"Media Gallery","/laioutr-ui/cms/media-gallery","3.laioutr-ui/cms/media-gallery",{"title":423,"path":767,"stem":768,"children":769,"page":55},"/laioutr-ui/cms/newsletter","3.laioutr-ui/cms/newsletter",[770,774],{"title":771,"path":772,"stem":773},"Email Input Form","/laioutr-ui/cms/newsletter/email-input-form","3.laioutr-ui/cms/newsletter/email-input-form",{"title":775,"path":776,"stem":777},"Newsletter Registration","/laioutr-ui/cms/newsletter/newsletter-registration","3.laioutr-ui/cms/newsletter/newsletter-registration",{"title":779,"path":780,"stem":781,"children":782,"page":55},"Popups","/laioutr-ui/cms/popups","3.laioutr-ui/cms/popups",[783,787,791,795],{"title":784,"path":785,"stem":786},"PopUp","/laioutr-ui/cms/popups/pop-up","3.laioutr-ui/cms/popups/pop-up",{"title":788,"path":789,"stem":790},"PopUp Info","/laioutr-ui/cms/popups/pop-up-info","3.laioutr-ui/cms/popups/pop-up-info",{"title":792,"path":793,"stem":794},"PopUp Newsletter","/laioutr-ui/cms/popups/pop-up-newsletter","3.laioutr-ui/cms/popups/pop-up-newsletter",{"title":796,"path":797,"stem":798},"PopUp Promotion","/laioutr-ui/cms/popups/pop-up-promotion","3.laioutr-ui/cms/popups/pop-up-promotion",{"title":800,"path":801,"stem":802,"children":803,"page":55},"Quotes","/laioutr-ui/cms/quotes","3.laioutr-ui/cms/quotes",[804,808,812,816],{"title":805,"path":806,"stem":807},"Persona Quote","/laioutr-ui/cms/quotes/persona-quote","3.laioutr-ui/cms/quotes/persona-quote",{"title":809,"path":810,"stem":811},"Persona Quote Slider","/laioutr-ui/cms/quotes/persona-quote-slider","3.laioutr-ui/cms/quotes/persona-quote-slider",{"title":813,"path":814,"stem":815},"Quote Card","/laioutr-ui/cms/quotes/quote-card","3.laioutr-ui/cms/quotes/quote-card",{"title":817,"path":818,"stem":819},"Quote Card Slider","/laioutr-ui/cms/quotes/quote-card-slider","3.laioutr-ui/cms/quotes/quote-card-slider",{"title":821,"path":822,"stem":823,"children":824,"page":55},"Reviews","/laioutr-ui/cms/reviews","3.laioutr-ui/cms/reviews",[825,828,832],{"title":358,"path":826,"stem":827},"/laioutr-ui/cms/reviews/review","3.laioutr-ui/cms/reviews/review",{"title":829,"path":830,"stem":831},"Review Form","/laioutr-ui/cms/reviews/review-form","3.laioutr-ui/cms/reviews/review-form",{"title":833,"path":834,"stem":835},"Social Share","/laioutr-ui/cms/reviews/social-share","3.laioutr-ui/cms/reviews/social-share",{"title":837,"path":838,"stem":839,"children":840,"page":55},"Slider","/laioutr-ui/cms/slider","3.laioutr-ui/cms/slider",[841,845,849,853,857,861,865,869,873,877,881],{"title":842,"path":843,"stem":844},"Content Slider","/laioutr-ui/cms/slider/content-slider","3.laioutr-ui/cms/slider/content-slider",{"title":846,"path":847,"stem":848},"Hero Slider","/laioutr-ui/cms/slider/hero-slider","3.laioutr-ui/cms/slider/hero-slider",{"title":850,"path":851,"stem":852},"Logo Grid","/laioutr-ui/cms/slider/logo-grid","3.laioutr-ui/cms/slider/logo-grid",{"title":854,"path":855,"stem":856},"Logo Slider","/laioutr-ui/cms/slider/logo-slider","3.laioutr-ui/cms/slider/logo-slider",{"title":858,"path":859,"stem":860},"Swiper Arrows","/laioutr-ui/cms/slider/swiper-arrows","3.laioutr-ui/cms/slider/swiper-arrows",{"title":862,"path":863,"stem":864},"Swiper Bullets","/laioutr-ui/cms/slider/swiper-bullets","3.laioutr-ui/cms/slider/swiper-bullets",{"title":866,"path":867,"stem":868},"Swiper Chrome","/laioutr-ui/cms/slider/swiper-chrome","3.laioutr-ui/cms/slider/swiper-chrome",{"title":870,"path":871,"stem":872},"Swiper Nav Bar","/laioutr-ui/cms/slider/swiper-nav-bar","3.laioutr-ui/cms/slider/swiper-nav-bar",{"title":874,"path":875,"stem":876},"Swiper Numbers","/laioutr-ui/cms/slider/swiper-numbers","3.laioutr-ui/cms/slider/swiper-numbers",{"title":878,"path":879,"stem":880},"Swiper Scrollbar","/laioutr-ui/cms/slider/swiper-scrollbar","3.laioutr-ui/cms/slider/swiper-scrollbar",{"title":882,"path":883,"stem":884},"Thumbnails Slider","/laioutr-ui/cms/slider/thumbnails-slider","3.laioutr-ui/cms/slider/thumbnails-slider",{"title":338,"path":886,"stem":887,"children":888},"/laioutr-ui/location","3.laioutr-ui/location/0.index",[889,890,894,898],{"title":338,"path":886,"stem":887},{"title":891,"path":892,"stem":893},"Location Card","/laioutr-ui/location/location-card","3.laioutr-ui/location/location-card",{"title":895,"path":896,"stem":897},"Location Detail","/laioutr-ui/location/location-detail","3.laioutr-ui/location/location-detail",{"title":899,"path":900,"stem":901},"Location Finder","/laioutr-ui/location/location-finder","3.laioutr-ui/location/location-finder",{"title":903,"path":904,"stem":905,"children":906},"Marketplace","/laioutr-ui/marketplace","3.laioutr-ui/marketplace/0.index",[907],{"title":903,"path":904,"stem":905},{"title":909,"path":910,"stem":911,"children":912},"Multichannel","/laioutr-ui/multichannel","3.laioutr-ui/multichannel/0.index",[913],{"title":909,"path":910,"stem":911},{"title":915,"path":916,"stem":917,"children":918},"Navigation & Headers","/laioutr-ui/navigation","3.laioutr-ui/navigation/0.index",[919,920,924,928,932,936,940,944,948,952,956,960,964],{"title":915,"path":916,"stem":917},{"title":921,"path":922,"stem":923},"Breadcrumbs","/laioutr-ui/navigation/breadcrumbs","3.laioutr-ui/navigation/breadcrumbs",{"title":925,"path":926,"stem":927},"Footer","/laioutr-ui/navigation/footer","3.laioutr-ui/navigation/footer",{"title":929,"path":930,"stem":931},"Footer Menu","/laioutr-ui/navigation/footer-menu","3.laioutr-ui/navigation/footer-menu",{"title":933,"path":934,"stem":935},"Header Basic","/laioutr-ui/navigation/header-basic","3.laioutr-ui/navigation/header-basic",{"title":937,"path":938,"stem":939},"Header Shop","/laioutr-ui/navigation/header-shop","3.laioutr-ui/navigation/header-shop",{"title":941,"path":942,"stem":943},"Mega Menu","/laioutr-ui/navigation/mega-menu","3.laioutr-ui/navigation/mega-menu",{"title":945,"path":946,"stem":947},"Menu Side by Side","/laioutr-ui/navigation/menu-side-by-side","3.laioutr-ui/navigation/menu-side-by-side",{"title":949,"path":950,"stem":951},"Mobile Menu (Basic)","/laioutr-ui/navigation/mobile-menu-basic","3.laioutr-ui/navigation/mobile-menu-basic",{"title":953,"path":954,"stem":955},"Mobile Menu (Shop)","/laioutr-ui/navigation/mobile-menu-shop","3.laioutr-ui/navigation/mobile-menu-shop",{"title":957,"path":958,"stem":959},"Page Not Found","/laioutr-ui/navigation/page-not-found","3.laioutr-ui/navigation/page-not-found",{"title":961,"path":962,"stem":963},"Search Auto-Suggest","/laioutr-ui/navigation/search-auto-suggest","3.laioutr-ui/navigation/search-auto-suggest",{"title":965,"path":966,"stem":967},"Top Bar","/laioutr-ui/navigation/top-bar","3.laioutr-ui/navigation/top-bar",{"title":969,"path":970,"stem":971,"children":972},"SaaS","/laioutr-ui/saas","3.laioutr-ui/saas/0.index",[973,974,978,982],{"title":969,"path":970,"stem":971},{"title":975,"path":976,"stem":977},"Plan Card","/laioutr-ui/saas/plan-card","3.laioutr-ui/saas/plan-card",{"title":979,"path":980,"stem":981},"Plan Card Slider","/laioutr-ui/saas/plan-card-slider","3.laioutr-ui/saas/plan-card-slider",{"title":983,"path":984,"stem":985},"Plan Comparison Table","/laioutr-ui/saas/plan-comparison-table","3.laioutr-ui/saas/plan-comparison-table",{"title":987,"path":988,"stem":989,"children":990},"Shop","/laioutr-ui/shop","3.laioutr-ui/shop/0.index",[991,992,1020,1024,1028,1032,1036,1092,1096,1100,1104,1108,1112],{"title":987,"path":988,"stem":989},{"title":350,"path":993,"stem":994,"children":995,"page":55},"/laioutr-ui/shop/cart","3.laioutr-ui/shop/cart",[996,1000,1004,1008,1012,1016],{"title":997,"path":998,"stem":999},"Cart Coupon Code Accordion","/laioutr-ui/shop/cart/cart-coupon-code-accordion","3.laioutr-ui/shop/cart/cart-coupon-code-accordion",{"title":1001,"path":1002,"stem":1003},"Cart List Item","/laioutr-ui/shop/cart/cart-list-item","3.laioutr-ui/shop/cart/cart-list-item",{"title":1005,"path":1006,"stem":1007},"Cart Sheet","/laioutr-ui/shop/cart/cart-sheet","3.laioutr-ui/shop/cart/cart-sheet",{"title":1009,"path":1010,"stem":1011},"Cart Summary Box","/laioutr-ui/shop/cart/cart-summary-box","3.laioutr-ui/shop/cart/cart-summary-box",{"title":1013,"path":1014,"stem":1015},"Empty State Cart","/laioutr-ui/shop/cart/empty-state-cart","3.laioutr-ui/shop/cart/empty-state-cart",{"title":1017,"path":1018,"stem":1019},"Free Delivery Progress","/laioutr-ui/shop/cart/free-delivery-progress","3.laioutr-ui/shop/cart/free-delivery-progress",{"title":1021,"path":1022,"stem":1023},"Category Card Grid","/laioutr-ui/shop/category-card-grid","3.laioutr-ui/shop/category-card-grid",{"title":1025,"path":1026,"stem":1027},"Category Card Slider","/laioutr-ui/shop/category-card-slider","3.laioutr-ui/shop/category-card-slider",{"title":1029,"path":1030,"stem":1031},"Filter Bar","/laioutr-ui/shop/filter-bar","3.laioutr-ui/shop/filter-bar",{"title":1033,"path":1034,"stem":1035},"Filter Off Canvas","/laioutr-ui/shop/filter-off-canvas","3.laioutr-ui/shop/filter-off-canvas",{"title":1037,"path":1038,"stem":1039,"children":1040,"page":55},"Product Detail","/laioutr-ui/shop/product-detail","3.laioutr-ui/shop/product-detail",[1041,1045,1049,1053,1057,1061,1064,1068,1072,1076,1080,1084,1088],{"title":1042,"path":1043,"stem":1044},"Add to Cart","/laioutr-ui/shop/product-detail/add-to-cart","3.laioutr-ui/shop/product-detail/add-to-cart",{"title":1046,"path":1047,"stem":1048},"Benefits Box","/laioutr-ui/shop/product-detail/benefits-box","3.laioutr-ui/shop/product-detail/benefits-box",{"title":1050,"path":1051,"stem":1052},"Coupon Box","/laioutr-ui/shop/product-detail/coupon-box","3.laioutr-ui/shop/product-detail/coupon-box",{"title":1054,"path":1055,"stem":1056},"Energy Label","/laioutr-ui/shop/product-detail/energy-label","3.laioutr-ui/shop/product-detail/energy-label",{"title":1058,"path":1059,"stem":1060},"Price Info","/laioutr-ui/shop/product-detail/price-info","3.laioutr-ui/shop/product-detail/price-info",{"title":1037,"path":1062,"stem":1063},"/laioutr-ui/shop/product-detail/product-detail","3.laioutr-ui/shop/product-detail/product-detail",{"title":1065,"path":1066,"stem":1067},"Product Image Gallery","/laioutr-ui/shop/product-detail/product-image-gallery","3.laioutr-ui/shop/product-detail/product-image-gallery",{"title":1069,"path":1070,"stem":1071},"Product Title","/laioutr-ui/shop/product-detail/product-title","3.laioutr-ui/shop/product-detail/product-title",{"title":1073,"path":1074,"stem":1075},"Quantity Discount","/laioutr-ui/shop/product-detail/quantity-discount","3.laioutr-ui/shop/product-detail/quantity-discount",{"title":1077,"path":1078,"stem":1079},"Variant Off Canvas","/laioutr-ui/shop/product-detail/variant-off-canvas","3.laioutr-ui/shop/product-detail/variant-off-canvas",{"title":1081,"path":1082,"stem":1083},"Variant Selector Configurator","/laioutr-ui/shop/product-detail/variant-selector-configurator","3.laioutr-ui/shop/product-detail/variant-selector-configurator",{"title":1085,"path":1086,"stem":1087},"Variant Selector (Multiple)","/laioutr-ui/shop/product-detail/variant-selector-multiple","3.laioutr-ui/shop/product-detail/variant-selector-multiple",{"title":1089,"path":1090,"stem":1091},"Variant Selector Options","/laioutr-ui/shop/product-detail/variant-selector-options","3.laioutr-ui/shop/product-detail/variant-selector-options",{"title":1093,"path":1094,"stem":1095},"Product Listing Grid","/laioutr-ui/shop/product-listing-grid","3.laioutr-ui/shop/product-listing-grid",{"title":1097,"path":1098,"stem":1099},"Product Slider","/laioutr-ui/shop/product-slider","3.laioutr-ui/shop/product-slider",{"title":1101,"path":1102,"stem":1103},"Product Slider Showcase","/laioutr-ui/shop/product-slider-showcase","3.laioutr-ui/shop/product-slider-showcase",{"title":1105,"path":1106,"stem":1107},"Product Tile (Basic)","/laioutr-ui/shop/product-tile-basic","3.laioutr-ui/shop/product-tile-basic",{"title":1109,"path":1110,"stem":1111},"Search Result Hero","/laioutr-ui/shop/search-result-hero","3.laioutr-ui/shop/search-result-hero",{"title":1113,"path":1114,"stem":1115},"Sort Modes","/laioutr-ui/shop/sort-modes","3.laioutr-ui/shop/sort-modes",{"title":1117,"path":1118,"stem":1119,"children":1120},"UI Kit","/laioutr-ui/ui-kit","3.laioutr-ui/ui-kit/0.index",[1121,1122,1282,1306,1327,1344,1381,1490,1519],{"title":1117,"path":1118,"stem":1119},{"title":1123,"path":1124,"stem":1125,"children":1126,"page":55},"General","/laioutr-ui/ui-kit/general","3.laioutr-ui/ui-kit/01.general",[1127,1131,1135,1139,1143,1147,1151,1155,1159,1163,1167,1170,1174,1178,1182,1186,1190,1194,1198,1202,1206,1210,1214,1218,1222,1226,1230,1234,1238,1242,1246,1250,1254,1258,1262,1266,1270,1274,1278],{"title":1128,"path":1129,"stem":1130},"Accordion","/laioutr-ui/ui-kit/general/accordion","3.laioutr-ui/ui-kit/01.general/Accordion",{"title":1132,"path":1133,"stem":1134},"Avatar","/laioutr-ui/ui-kit/general/avatar","3.laioutr-ui/ui-kit/01.general/Avatar",{"title":1136,"path":1137,"stem":1138},"Backdrop","/laioutr-ui/ui-kit/general/backdrop","3.laioutr-ui/ui-kit/01.general/Backdrop",{"title":1140,"path":1141,"stem":1142},"Dropdown Menu","/laioutr-ui/ui-kit/general/dropdownmenu","3.laioutr-ui/ui-kit/01.general/DropdownMenu",{"title":1144,"path":1145,"stem":1146},"Edge Glow","/laioutr-ui/ui-kit/general/edgeglow","3.laioutr-ui/ui-kit/01.general/EdgeGlow",{"title":1148,"path":1149,"stem":1150},"Empty State","/laioutr-ui/ui-kit/general/emptystate","3.laioutr-ui/ui-kit/01.general/EmptyState",{"title":1152,"path":1153,"stem":1154},"Icon","/laioutr-ui/ui-kit/general/icon","3.laioutr-ui/ui-kit/01.general/Icon",{"title":1156,"path":1157,"stem":1158},"Image Contrast Overlay","/laioutr-ui/ui-kit/general/imagecontrastoverlay","3.laioutr-ui/ui-kit/01.general/ImageContrastOverlay",{"title":1160,"path":1161,"stem":1162},"Lightbox","/laioutr-ui/ui-kit/general/lightbox","3.laioutr-ui/ui-kit/01.general/Lightbox",{"title":1164,"path":1165,"stem":1166},"Loading Spinner","/laioutr-ui/ui-kit/general/loadingspinner","3.laioutr-ui/ui-kit/01.general/LoadingSpinner",{"title":387,"path":1168,"stem":1169},"/laioutr-ui/ui-kit/general/media","3.laioutr-ui/ui-kit/01.general/Media",{"title":1171,"path":1172,"stem":1173},"Navigation Bullets","/laioutr-ui/ui-kit/general/navigationbullets","3.laioutr-ui/ui-kit/01.general/NavigationBullets",{"title":1175,"path":1176,"stem":1177},"Placeholder","/laioutr-ui/ui-kit/general/placeholder","3.laioutr-ui/ui-kit/01.general/Placeholder",{"title":1179,"path":1180,"stem":1181},"Progress Bar","/laioutr-ui/ui-kit/general/progressbar","3.laioutr-ui/ui-kit/01.general/ProgressBar",{"title":1183,"path":1184,"stem":1185},"Scrollbar","/laioutr-ui/ui-kit/general/scrollbar","3.laioutr-ui/ui-kit/01.general/Scrollbar",{"title":1187,"path":1188,"stem":1189},"Swatch","/laioutr-ui/ui-kit/general/swatch","3.laioutr-ui/ui-kit/01.general/Swatch",{"title":1191,"path":1192,"stem":1193},"SwiperScrollbar","/laioutr-ui/ui-kit/general/swiperscrollbar","3.laioutr-ui/ui-kit/01.general/SwiperScrollbar",{"title":1195,"path":1196,"stem":1197},"Thumbnail","/laioutr-ui/ui-kit/general/thumbnail","3.laioutr-ui/ui-kit/01.general/Thumbnail",{"title":1199,"path":1200,"stem":1201},"Tooltip","/laioutr-ui/ui-kit/general/tooltip","3.laioutr-ui/ui-kit/01.general/Tooltip",{"title":1203,"path":1204,"stem":1205},"Amount Pill","/laioutr-ui/ui-kit/general/amount-pill","3.laioutr-ui/ui-kit/01.general/amount-pill",{"title":1207,"path":1208,"stem":1209},"Dark Mode Switch","/laioutr-ui/ui-kit/general/dark-mode-switch","3.laioutr-ui/ui-kit/01.general/dark-mode-switch",{"title":1211,"path":1212,"stem":1213},"Language Switcher","/laioutr-ui/ui-kit/general/language-switcher","3.laioutr-ui/ui-kit/01.general/language-switcher",{"title":1215,"path":1216,"stem":1217},"Media Preview","/laioutr-ui/ui-kit/general/media-preview","3.laioutr-ui/ui-kit/01.general/media-preview",{"title":1219,"path":1220,"stem":1221},"Media Stage","/laioutr-ui/ui-kit/general/media-stage","3.laioutr-ui/ui-kit/01.general/media-stage",{"title":1223,"path":1224,"stem":1225},"Nav Link Item","/laioutr-ui/ui-kit/general/nav-link-item","3.laioutr-ui/ui-kit/01.general/nav-link-item",{"title":1227,"path":1228,"stem":1229},"Nav Section Heading","/laioutr-ui/ui-kit/general/nav-section-heading","3.laioutr-ui/ui-kit/01.general/nav-section-heading",{"title":1231,"path":1232,"stem":1233},"OnSurface","/laioutr-ui/ui-kit/general/on-surface","3.laioutr-ui/ui-kit/01.general/on-surface",{"title":1235,"path":1236,"stem":1237},"Opening Hours Weekly Table","/laioutr-ui/ui-kit/general/opening-hours-weekly-table","3.laioutr-ui/ui-kit/01.general/opening-hours-weekly-table",{"title":1239,"path":1240,"stem":1241},"Opening Status","/laioutr-ui/ui-kit/general/opening-status","3.laioutr-ui/ui-kit/01.general/opening-status",{"title":1243,"path":1244,"stem":1245},"Opening Status Detail","/laioutr-ui/ui-kit/general/opening-status-detail","3.laioutr-ui/ui-kit/01.general/opening-status-detail",{"title":1247,"path":1248,"stem":1249},"Opening Status Indicator","/laioutr-ui/ui-kit/general/opening-status-indicator","3.laioutr-ui/ui-kit/01.general/opening-status-indicator",{"title":1251,"path":1252,"stem":1253},"Rating Progress Bar Filter","/laioutr-ui/ui-kit/general/rating-progress-bar-filter","3.laioutr-ui/ui-kit/01.general/rating-progress-bar-filter",{"title":1255,"path":1256,"stem":1257},"Status Message","/laioutr-ui/ui-kit/general/status-message","3.laioutr-ui/ui-kit/01.general/status-message",{"title":1259,"path":1260,"stem":1261},"Stock Info Summary","/laioutr-ui/ui-kit/general/stock-info-summary","3.laioutr-ui/ui-kit/01.general/stock-info-summary",{"title":1263,"path":1264,"stem":1265},"Swatch Chip","/laioutr-ui/ui-kit/general/swatch-chip","3.laioutr-ui/ui-kit/01.general/swatch-chip",{"title":1267,"path":1268,"stem":1269},"Swatch Option","/laioutr-ui/ui-kit/general/swatch-option","3.laioutr-ui/ui-kit/01.general/swatch-option",{"title":1271,"path":1272,"stem":1273},"Swatch Summary","/laioutr-ui/ui-kit/general/swatch-summary","3.laioutr-ui/ui-kit/01.general/swatch-summary",{"title":1275,"path":1276,"stem":1277},"Zoom Level (Segmented)","/laioutr-ui/ui-kit/general/zoom-level-segmented","3.laioutr-ui/ui-kit/01.general/zoom-level-segmented",{"title":1279,"path":1280,"stem":1281},"Zoom Level (Stepper)","/laioutr-ui/ui-kit/general/zoom-level-stepper","3.laioutr-ui/ui-kit/01.general/zoom-level-stepper",{"title":1283,"path":1284,"stem":1285,"children":1286,"page":55},"Typography","/laioutr-ui/ui-kit/typography","3.laioutr-ui/ui-kit/02.typography",[1287,1291,1294,1298,1302],{"title":1288,"path":1289,"stem":1290},"Icon List","/laioutr-ui/ui-kit/typography/iconlist","3.laioutr-ui/ui-kit/02.typography/IconList",{"title":383,"path":1292,"stem":1293},"/laioutr-ui/ui-kit/typography/link","3.laioutr-ui/ui-kit/02.typography/Link",{"title":1295,"path":1296,"stem":1297},"Rich Content","/laioutr-ui/ui-kit/typography/richcontent","3.laioutr-ui/ui-kit/02.typography/RichContent",{"title":1299,"path":1300,"stem":1301},"Text","/laioutr-ui/ui-kit/typography/text","3.laioutr-ui/ui-kit/02.typography/Text",{"title":1303,"path":1304,"stem":1305},"Text Group","/laioutr-ui/ui-kit/typography/text-group","3.laioutr-ui/ui-kit/02.typography/text-group",{"title":1307,"path":1308,"stem":1309,"children":1310,"page":55},"Layout","/laioutr-ui/ui-kit/layout","3.laioutr-ui/ui-kit/03.layout",[1311,1315,1319,1323],{"title":1312,"path":1313,"stem":1314},"Grid Fill","/laioutr-ui/ui-kit/layout/gridfill","3.laioutr-ui/ui-kit/03.layout/GridFill",{"title":1316,"path":1317,"stem":1318},"Grid Masonry","/laioutr-ui/ui-kit/layout/gridmasonry","3.laioutr-ui/ui-kit/03.layout/GridMasonry",{"title":1320,"path":1321,"stem":1322},"Scroll Area","/laioutr-ui/ui-kit/layout/scrollarea","3.laioutr-ui/ui-kit/03.layout/ScrollArea",{"title":1324,"path":1325,"stem":1326},"Separator","/laioutr-ui/ui-kit/layout/separator","3.laioutr-ui/ui-kit/03.layout/Separator",{"title":1328,"path":1329,"stem":1330,"children":1331,"page":55},"Content","/laioutr-ui/ui-kit/content","3.laioutr-ui/ui-kit/04.content",[1332,1336,1340],{"title":1333,"path":1334,"stem":1335},"Card","/laioutr-ui/ui-kit/content/card","3.laioutr-ui/ui-kit/04.content/Card",{"title":1337,"path":1338,"stem":1339},"Description List","/laioutr-ui/ui-kit/content/description-list","3.laioutr-ui/ui-kit/04.content/description-list",{"title":1341,"path":1342,"stem":1343},"Link Tile","/laioutr-ui/ui-kit/content/link-tile","3.laioutr-ui/ui-kit/04.content/link-tile",{"title":1345,"path":1346,"stem":1347,"children":1348,"page":55},"Surfaces","/laioutr-ui/ui-kit/surfaces","3.laioutr-ui/ui-kit/05.surfaces",[1349,1353,1357,1361,1365,1369,1373,1377],{"title":1350,"path":1351,"stem":1352},"Alert Dialog","/laioutr-ui/ui-kit/surfaces/alertdialog","3.laioutr-ui/ui-kit/05.surfaces/AlertDialog",{"title":1354,"path":1355,"stem":1356},"Popover","/laioutr-ui/ui-kit/surfaces/popover","3.laioutr-ui/ui-kit/05.surfaces/Popover",{"title":1358,"path":1359,"stem":1360},"Sheet","/laioutr-ui/ui-kit/surfaces/sheet","3.laioutr-ui/ui-kit/05.surfaces/Sheet",{"title":1362,"path":1363,"stem":1364},"Tabs","/laioutr-ui/ui-kit/surfaces/tabs","3.laioutr-ui/ui-kit/05.surfaces/Tabs",{"title":1366,"path":1367,"stem":1368},"Toast","/laioutr-ui/ui-kit/surfaces/toast","3.laioutr-ui/ui-kit/05.surfaces/Toast",{"title":1370,"path":1371,"stem":1372},"Toaster","/laioutr-ui/ui-kit/surfaces/toaster","3.laioutr-ui/ui-kit/05.surfaces/Toaster",{"title":1374,"path":1375,"stem":1376},"Context Menu","/laioutr-ui/ui-kit/surfaces/context-menu","3.laioutr-ui/ui-kit/05.surfaces/context-menu",{"title":1378,"path":1379,"stem":1380},"Navigation Menu","/laioutr-ui/ui-kit/surfaces/navigation-menu","3.laioutr-ui/ui-kit/05.surfaces/navigation-menu",{"title":1382,"path":1383,"stem":1384,"children":1385,"page":55},"Form","/laioutr-ui/ui-kit/form","3.laioutr-ui/ui-kit/06.form",[1386,1390,1394,1398,1402,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486],{"title":1387,"path":1388,"stem":1389},"Button","/laioutr-ui/ui-kit/form/button","3.laioutr-ui/ui-kit/06.form/Button",{"title":1391,"path":1392,"stem":1393},"Checkbox","/laioutr-ui/ui-kit/form/checkbox","3.laioutr-ui/ui-kit/06.form/Checkbox",{"title":1395,"path":1396,"stem":1397},"Field","/laioutr-ui/ui-kit/form/field","3.laioutr-ui/ui-kit/06.form/Field",{"title":1399,"path":1400,"stem":1401},"Input","/laioutr-ui/ui-kit/form/input","3.laioutr-ui/ui-kit/06.form/Input",{"title":1403,"path":1404,"stem":1405},"Label","/laioutr-ui/ui-kit/form/label","3.laioutr-ui/ui-kit/06.form/Label",{"title":1407,"path":1408,"stem":1409},"Load More","/laioutr-ui/ui-kit/form/loadmore","3.laioutr-ui/ui-kit/06.form/LoadMore",{"title":1411,"path":1412,"stem":1413},"Pagination","/laioutr-ui/ui-kit/form/pagination","3.laioutr-ui/ui-kit/06.form/Pagination",{"title":1415,"path":1416,"stem":1417},"Quantity Picker","/laioutr-ui/ui-kit/form/quantitypicker","3.laioutr-ui/ui-kit/06.form/QuantityPicker",{"title":1419,"path":1420,"stem":1421},"Select","/laioutr-ui/ui-kit/form/select","3.laioutr-ui/ui-kit/06.form/Select",{"title":1423,"path":1424,"stem":1425},"Switch","/laioutr-ui/ui-kit/form/switch","3.laioutr-ui/ui-kit/06.form/Switch",{"title":1427,"path":1428,"stem":1429},"Highlight Toggle","/laioutr-ui/ui-kit/form/highlight-toggle","3.laioutr-ui/ui-kit/06.form/highlight-toggle",{"title":1431,"path":1432,"stem":1433},"Icon Button","/laioutr-ui/ui-kit/form/icon-button","3.laioutr-ui/ui-kit/06.form/icon-button",{"title":1435,"path":1436,"stem":1437},"Input Autocomplete","/laioutr-ui/ui-kit/form/input-autocomplete","3.laioutr-ui/ui-kit/06.form/input-autocomplete",{"title":1439,"path":1440,"stem":1441},"Input Checkbox","/laioutr-ui/ui-kit/form/input-checkbox","3.laioutr-ui/ui-kit/06.form/input-checkbox",{"title":1443,"path":1444,"stem":1445},"Input Combobox","/laioutr-ui/ui-kit/form/input-combobox","3.laioutr-ui/ui-kit/06.form/input-combobox",{"title":1447,"path":1448,"stem":1449},"Input Group","/laioutr-ui/ui-kit/form/input-group","3.laioutr-ui/ui-kit/06.form/input-group",{"title":1451,"path":1452,"stem":1453},"Input Password","/laioutr-ui/ui-kit/form/input-password","3.laioutr-ui/ui-kit/06.form/input-password",{"title":1455,"path":1456,"stem":1457},"Input Pin","/laioutr-ui/ui-kit/form/input-pin","3.laioutr-ui/ui-kit/06.form/input-pin",{"title":1459,"path":1460,"stem":1461},"Input Radio","/laioutr-ui/ui-kit/form/input-radio","3.laioutr-ui/ui-kit/06.form/input-radio",{"title":1463,"path":1464,"stem":1465},"Input Rating","/laioutr-ui/ui-kit/form/input-rating","3.laioutr-ui/ui-kit/06.form/input-rating",{"title":1467,"path":1468,"stem":1469},"Input Search","/laioutr-ui/ui-kit/form/input-search","3.laioutr-ui/ui-kit/06.form/input-search",{"title":1471,"path":1472,"stem":1473},"Input Slider","/laioutr-ui/ui-kit/form/input-slider","3.laioutr-ui/ui-kit/06.form/input-slider",{"title":1475,"path":1476,"stem":1477},"Listbox","/laioutr-ui/ui-kit/form/listbox","3.laioutr-ui/ui-kit/06.form/listbox",{"title":1479,"path":1480,"stem":1481},"Option Tile (Image)","/laioutr-ui/ui-kit/form/option-tile-image","3.laioutr-ui/ui-kit/06.form/option-tile-image",{"title":1483,"path":1484,"stem":1485},"Option Tile (Text)","/laioutr-ui/ui-kit/form/option-tile-text","3.laioutr-ui/ui-kit/06.form/option-tile-text",{"title":1487,"path":1488,"stem":1489},"Variant Selection Card","/laioutr-ui/ui-kit/form/variant-selection-card","3.laioutr-ui/ui-kit/06.form/variant-selection-card",{"title":1491,"path":1492,"stem":1493,"children":1494,"page":55},"Indicators","/laioutr-ui/ui-kit/indicators","3.laioutr-ui/ui-kit/07.indicators",[1495,1499,1503,1507,1511,1515],{"title":1496,"path":1497,"stem":1498},"Badge","/laioutr-ui/ui-kit/indicators/badge","3.laioutr-ui/ui-kit/07.indicators/Badge",{"title":1500,"path":1501,"stem":1502},"Caption Flag","/laioutr-ui/ui-kit/indicators/captionflag","3.laioutr-ui/ui-kit/07.indicators/CaptionFlag",{"title":1504,"path":1505,"stem":1506},"Product Tile Flag","/laioutr-ui/ui-kit/indicators/producttileflag","3.laioutr-ui/ui-kit/07.indicators/ProductTileFlag",{"title":1508,"path":1509,"stem":1510},"Rating Summary","/laioutr-ui/ui-kit/indicators/ratingsummary","3.laioutr-ui/ui-kit/07.indicators/RatingSummary",{"title":1512,"path":1513,"stem":1514},"Stars Rating","/laioutr-ui/ui-kit/indicators/starsrating","3.laioutr-ui/ui-kit/07.indicators/StarsRating",{"title":1516,"path":1517,"stem":1518},"Badge Promotion","/laioutr-ui/ui-kit/indicators/badge-promotion","3.laioutr-ui/ui-kit/07.indicators/badge-promotion",{"title":1520,"path":1521,"stem":1522,"children":1523,"page":55},"Utility Components","/laioutr-ui/ui-kit/utility-components","3.laioutr-ui/ui-kit/08.utility-components",[1524,1528],{"title":1525,"path":1526,"stem":1527},"Highlighted Text","/laioutr-ui/ui-kit/utility-components/highlighted-text","3.laioutr-ui/ui-kit/08.utility-components/highlighted-text",{"title":1529,"path":1530,"stem":1531},"Sizer","/laioutr-ui/ui-kit/utility-components/sizer","3.laioutr-ui/ui-kit/08.utility-components/sizer",{"title":1533,"path":1534,"stem":1535,"children":1536},"Hosting","/hosting","4.hosting/0.index",[1537,1538,1544,1574,1592],{"title":1533,"path":1534,"stem":1535},{"title":1539,"path":1540,"stem":1541,"children":1542},"Laioutr Cloud","/hosting/laioutr-cloud","4.hosting/0.laioutr-cloud/0.index",[1543],{"title":1539,"path":1540,"stem":1541},{"title":1545,"path":1546,"stem":1547,"children":1548},"Hyperscaler","/hosting/hyperscaler","4.hosting/1.hyperscaler/0.index",[1549,1550,1554,1558,1562,1566,1570],{"title":1545,"path":1546,"stem":1547},{"title":1551,"path":1552,"stem":1553},"Akamai Adapter","/hosting/hyperscaler/akamai-adapter","4.hosting/1.hyperscaler/akamai-adapter",{"title":1555,"path":1556,"stem":1557},"AWS Adapter","/hosting/hyperscaler/aws-adapter","4.hosting/1.hyperscaler/aws-adapter",{"title":1559,"path":1560,"stem":1561},"Azure Adapter","/hosting/hyperscaler/azure-adapter","4.hosting/1.hyperscaler/azure-adapter",{"title":1563,"path":1564,"stem":1565},"Google Adapter","/hosting/hyperscaler/google-adapter","4.hosting/1.hyperscaler/google-adapter",{"title":1567,"path":1568,"stem":1569},"Netlify Adapter","/hosting/hyperscaler/netlify-adapter","4.hosting/1.hyperscaler/netlify-adapter",{"title":1571,"path":1572,"stem":1573},"Vercel Adapter","/hosting/hyperscaler/vercel-adapter","4.hosting/1.hyperscaler/vercel-adapter",{"title":1575,"path":1576,"stem":1577,"children":1578},"Native Hosting","/hosting/native-hosting-providers","4.hosting/2.native-hosting-providers/0.index",[1579,1580,1584,1588],{"title":1575,"path":1576,"stem":1577},{"title":1581,"path":1582,"stem":1583},"maxcluster","/hosting/native-hosting-providers/maxcluster","4.hosting/2.native-hosting-providers/maxcluster",{"title":1585,"path":1586,"stem":1587},"profihost","/hosting/native-hosting-providers/profihost","4.hosting/2.native-hosting-providers/profihost",{"title":1589,"path":1590,"stem":1591},"ScaleCommerce","/hosting/native-hosting-providers/scale-commerce","4.hosting/2.native-hosting-providers/scale-commerce",{"title":1593,"path":1594,"stem":1595,"children":1596},"Bring Your Own Server (BYOS)","/hosting/bring-your-own-server-byos","4.hosting/3.bring-your-own-server-byos/0.index",[1597,1598,1602,1606,1610,1614,1618],{"title":1593,"path":1594,"stem":1595},{"title":1599,"path":1600,"stem":1601},"BYOS Agent","/hosting/bring-your-own-server-byos/byos-agent","4.hosting/3.bring-your-own-server-byos/byos-agent",{"title":1603,"path":1604,"stem":1605},"Changelog","/hosting/bring-your-own-server-byos/changelog","4.hosting/3.bring-your-own-server-byos/changelog",{"title":1607,"path":1608,"stem":1609},"DevOps Components","/hosting/bring-your-own-server-byos/devops","4.hosting/3.bring-your-own-server-byos/devops",{"title":1611,"path":1612,"stem":1613},"Infrastructure Requirements","/hosting/bring-your-own-server-byos/infrastructure","4.hosting/3.bring-your-own-server-byos/infrastructure",{"title":1615,"path":1616,"stem":1617},"Software Requirements","/hosting/bring-your-own-server-byos/software","4.hosting/3.bring-your-own-server-byos/software",{"title":1619,"path":1620,"stem":1621},"Webhook Configuration","/hosting/bring-your-own-server-byos/webhook-config","4.hosting/3.bring-your-own-server-byos/webhook-config",{"title":1623,"path":1624,"stem":1625,"children":1626},"Checkout","/checkout","5.Checkout/0.index",[1627],{"title":1623,"path":1624,"stem":1625},{"title":1629,"path":1630,"stem":1631,"children":1632},"Larry AI","/larry-ai","6.Larry-AI/0.index",[1633],{"title":1629,"path":1630,"stem":1631},{"title":671,"path":1635,"stem":1636,"children":1637},"/figma-kit","7.Figma Kit/0.index",[1638,1639,1655],{"title":671,"path":1635,"stem":1636},{"title":121,"path":1640,"stem":1641,"children":1642,"page":55},"/figma-kit/introduction","7.Figma Kit/1.Introduction",[1643,1647,1651],{"title":1644,"path":1645,"stem":1646},"How to Start","/figma-kit/introduction/howtostart","7.Figma Kit/1.Introduction/0.howtostart",{"title":1648,"path":1649,"stem":1650},"Figma Variables","/figma-kit/introduction/figma-variables","7.Figma Kit/1.Introduction/figma-variables",{"title":1652,"path":1653,"stem":1654},"Library Connections","/figma-kit/introduction/library-connections","7.Figma Kit/1.Introduction/library-connections",{"title":1656,"path":1657,"stem":1658,"children":1659,"page":55},"Kits","/figma-kit/kits","7.Figma Kit/Kits",[1660,1663,1666,1669,1673,1676,1680,1684,1687,1690],{"title":686,"path":1661,"stem":1662},"/figma-kit/kits/b2b","7.Figma Kit/Kits/b2b",{"title":692,"path":1664,"stem":1665},"/figma-kit/kits/booking","7.Figma Kit/Kits/booking",{"title":698,"path":1667,"stem":1668},"/figma-kit/kits/cms","7.Figma Kit/Kits/cms",{"title":1670,"path":1671,"stem":1672},"Inpage Navigation","/figma-kit/kits/inpage-navigation","7.Figma Kit/Kits/inpage-navigation",{"title":903,"path":1674,"stem":1675},"/figma-kit/kits/marketplace","7.Figma Kit/Kits/marketplace",{"title":1677,"path":1678,"stem":1679},"Retail & Multichannel","/figma-kit/kits/multichannel","7.Figma Kit/Kits/multichannel",{"title":1681,"path":1682,"stem":1683},"Navigation","/figma-kit/kits/navigation","7.Figma Kit/Kits/navigation",{"title":969,"path":1685,"stem":1686},"/figma-kit/kits/saas","7.Figma Kit/Kits/saas",{"title":987,"path":1688,"stem":1689},"/figma-kit/kits/shop","7.Figma Kit/Kits/shop",{"title":1117,"path":1691,"stem":1692},"/figma-kit/kits/ui-kit","7.Figma Kit/Kits/ui-kit",{"title":1694,"path":1695,"stem":1696,"children":1697},"Cockpit","/cockpit","8.Cockpit/0.index",[1698,1699,1729,1746,1763],{"title":1694,"path":1695,"stem":1696},{"title":154,"path":1700,"stem":1701,"children":1702,"page":55},"/cockpit/features","8.Cockpit/1.Features",[1703,1706,1710,1714,1718,1721,1725],{"title":464,"path":1704,"stem":1705},"/cockpit/features/apps","8.Cockpit/1.Features/apps",{"title":1707,"path":1708,"stem":1709},"Content (Collections)","/cockpit/features/content-collections","8.Cockpit/1.Features/content-collections",{"title":1711,"path":1712,"stem":1713},"Deployments","/cockpit/features/deployments","8.Cockpit/1.Features/deployments",{"title":1715,"path":1716,"stem":1717},"Markets","/cockpit/features/markets","8.Cockpit/1.Features/markets",{"title":196,"path":1719,"stem":1720},"/cockpit/features/redirects","8.Cockpit/1.Features/redirects",{"title":1722,"path":1723,"stem":1724},"Studio","/cockpit/features/studio","8.Cockpit/1.Features/studio",{"title":1726,"path":1727,"stem":1728},"Translations","/cockpit/features/translations","8.Cockpit/1.Features/translations",{"title":1730,"path":1731,"stem":1732,"children":1733,"page":55},"Project Settings","/cockpit/project-settings","8.Cockpit/2.Project-Settings",[1734,1738,1742],{"title":1735,"path":1736,"stem":1737},"Delete a project","/cockpit/project-settings/delete-project","8.Cockpit/2.Project-Settings/delete-project",{"title":1739,"path":1740,"stem":1741},"NPM","/cockpit/project-settings/npm","8.Cockpit/2.Project-Settings/npm",{"title":1743,"path":1744,"stem":1745},"Project secret key","/cockpit/project-settings/project-secret-key","8.Cockpit/2.Project-Settings/project-secret-key",{"title":1747,"path":1748,"stem":1749,"children":1750,"page":55},"Account Settings","/cockpit/account-settings","8.Cockpit/3.Account-Settings",[1751,1755,1759],{"title":1752,"path":1753,"stem":1754},"Notifications","/cockpit/account-settings/notifications","8.Cockpit/3.Account-Settings/notifications",{"title":1756,"path":1757,"stem":1758},"Preferences","/cockpit/account-settings/preferences","8.Cockpit/3.Account-Settings/preferences",{"title":1760,"path":1761,"stem":1762},"Security","/cockpit/account-settings/security","8.Cockpit/3.Account-Settings/security",{"title":1764,"path":1765,"stem":1766,"children":1767,"page":55},"Organisation Settings","/cockpit/organisation-settings","8.Cockpit/4.Organisation-Settings",[1768,1772,1776,1780,1784,1788],{"title":1769,"path":1770,"stem":1771},"API keys","/cockpit/organisation-settings/api-keys","8.Cockpit/4.Organisation-Settings/api-keys",{"title":1773,"path":1774,"stem":1775},"Billing","/cockpit/organisation-settings/billing","8.Cockpit/4.Organisation-Settings/billing",{"title":1777,"path":1778,"stem":1779},"General settings","/cockpit/organisation-settings/general-settings","8.Cockpit/4.Organisation-Settings/general-settings",{"title":1781,"path":1782,"stem":1783},"Members","/cockpit/organisation-settings/members","8.Cockpit/4.Organisation-Settings/members",{"title":1785,"path":1786,"stem":1787},"Projects","/cockpit/organisation-settings/projects","8.Cockpit/4.Organisation-Settings/projects",{"title":1789,"path":1790,"stem":1791},"Roles","/cockpit/organisation-settings/roles","8.Cockpit/4.Organisation-Settings/roles",{"title":1793,"path":1794,"stem":1795,"children":1796},"Offering","/offering","9.Offering/0.index",[1797,1798,1830,1843,1856,1890,1899],{"title":1793,"path":1794,"stem":1795},{"title":1799,"path":1800,"stem":1801,"children":1802},"Products","/offering/products","9.Offering/1.Products/0.index",[1803,1804,1809,1814,1819,1825],{"title":1799,"path":1800,"stem":1801},{"title":137,"path":1805,"stem":1806,"children":1807},"/offering/products/frontend","9.Offering/1.Products/1.Frontend/0.index",[1808],{"title":137,"path":1805,"stem":1806},{"title":1694,"path":1810,"stem":1811,"children":1812},"/offering/products/cockpit","9.Offering/1.Products/2.Cockpit/0.index",[1813],{"title":1694,"path":1810,"stem":1811},{"title":1623,"path":1815,"stem":1816,"children":1817},"/offering/products/checkout","9.Offering/1.Products/3.Checkout/0.index",[1818],{"title":1623,"path":1815,"stem":1816},{"title":1820,"path":1821,"stem":1822,"children":1823},"Cloud","/offering/products/cloud","9.Offering/1.Products/4.cloud/0.index",[1824],{"title":1820,"path":1821,"stem":1822},{"title":1629,"path":1826,"stem":1827,"children":1828},"/offering/products/larry-ai","9.Offering/1.Products/5.larry-ai/0.index",[1829],{"title":1629,"path":1826,"stem":1827},{"title":1831,"path":1832,"stem":1833,"children":1834,"page":55},"Service Level Agreement","/offering/service-level-agreement","9.Offering/2.service-level-agreement",[1835,1839],{"title":1836,"path":1837,"stem":1838},"Standard Service Level Agreement Composable Frontend","/offering/service-level-agreement/standard-service-level-agreement","9.Offering/2.service-level-agreement/1.standard-service-level-agreement",{"title":1840,"path":1841,"stem":1842},"Backups","/offering/service-level-agreement/backups","9.Offering/2.service-level-agreement/backups",{"title":1844,"path":1845,"stem":1846,"children":1847,"page":55},"Customer Support","/offering/customer-support","9.Offering/3.customer-support",[1848,1852],{"title":1849,"path":1850,"stem":1851},"Standard Customer Support","/offering/customer-support/standard-customer-support","9.Offering/3.customer-support/1.standard-customer-support",{"title":1853,"path":1854,"stem":1855},"Customer Support Severity Levels of Laioutr products","/offering/customer-support/maximum-serverity-levels","9.Offering/3.customer-support/maximum-serverity-levels",{"title":1857,"path":1858,"stem":1859,"children":1860},"Trust Center","/offering/trust-center","9.Offering/4.trust-center/0.index",[1861,1862,1866,1870,1874,1878,1882,1886],{"title":1857,"path":1858,"stem":1859},{"title":1863,"path":1864,"stem":1865},"Data Protection (GDPR)","/offering/trust-center/data-protection","9.Offering/4.trust-center/1.data-protection",{"title":1867,"path":1868,"stem":1869},"Subprocessors","/offering/trust-center/subprocessors","9.Offering/4.trust-center/2.subprocessors",{"title":1871,"path":1872,"stem":1873},"Infrastructure & Hosting","/offering/trust-center/infrastructure","9.Offering/4.trust-center/3.infrastructure",{"title":1875,"path":1876,"stem":1877},"Security Measures","/offering/trust-center/security-measures","9.Offering/4.trust-center/4.security-measures",{"title":1879,"path":1880,"stem":1881},"Incident Response","/offering/trust-center/incident-response","9.Offering/4.trust-center/5.incident-response",{"title":1883,"path":1884,"stem":1885},"Compliance & Certifications","/offering/trust-center/compliance","9.Offering/4.trust-center/6.compliance",{"title":1887,"path":1888,"stem":1889},"FAQ","/offering/trust-center/faq","9.Offering/4.trust-center/7.faq",{"title":1891,"path":1892,"stem":1893,"children":1894,"page":55},"Policies","/offering/policies","9.Offering/5.policies",[1895],{"title":1896,"path":1897,"stem":1898},"Fair usage policy","/offering/policies/fair-usage-policy","9.Offering/5.policies/fair-usage-policy",{"title":1900,"path":1901,"stem":1902,"children":1903},"Academy","/offering/academy","9.Offering/6.academy/0.index",[1904],{"title":1900,"path":1901,"stem":1902},{"id":1906,"title":514,"aliases":1907,"body":1908,"changelogKeys":1907,"description":3634,"extension":3635,"links":1907,"meta":3636,"navigation":2063,"path":515,"playground":1907,"seo":3637,"sitemap":3640,"stem":516,"__hash__":3643},"docs/2.Apps/app-development/coding-standards.md",null,{"type":1909,"value":1910,"toc":3601},"minimark",[1911,1916,1930,1933,1937,1942,2000,2162,2187,2191,2220,2224,2228,2272,2276,2373,2376,2412,2415,2467,2470,2542,2546,2550,2670,2674,2677,2738,2747,2751,2896,2900,2993,2996,3055,3059,3113,3117,3132,3135,3175,3178,3182,3289,3293,3335,3339,3343,3368,3372,3446,3450,3469,3473,3510,3514,3566,3570,3597],[1912,1913,1915],"h2",{"id":1914},"overview","Overview",[1917,1918,1919,1920,1924,1925,1929],"p",{},"This document describes coding standards for ",[1921,1922,1923],"strong",{},"Laioutr apps"," — Nuxt modules that extend Laioutr via ",[1926,1927,1928],"code",{},"registerLaioutrApp"," and optionally provide orchestr handlers, sections, blocks, and page wrappers. Following these conventions keeps your app consistent with official and community apps, simplifies reviews, and makes it easier for others to contribute.",[1917,1931,1932],{},"The standards cover: package and naming, module structure, configuration, orchestr layout and patterns, runtime layout, TypeScript, build and tooling, testing, and linting/formatting. Where the ecosystem allows flexibility, we note it.",[1912,1934,1936],{"id":1935},"package-and-naming","Package and naming",[1938,1939,1941],"h3",{"id":1940},"package-name-and-config-key","Package name and config key",[1943,1944,1945,1971],"ul",{},[1946,1947,1948,1951,1952,1955,1956,1959,1960,1963,1964,1959,1967,1970],"li",{},[1921,1949,1950],{},"Package name"," in ",[1926,1953,1954],{},"package.json"," must be unique and stable (e.g. ",[1926,1957,1958],{},"my-laioutr-app",", ",[1926,1961,1962],{},"@laioutr-app/shopify","). Use a scope (e.g. ",[1926,1965,1966],{},"@laioutr-app/",[1926,1968,1969],{},"@laioutr-org/",") for published apps.",[1946,1972,1973,1976,1977,1980,1981,1984,1985,1988,1989,1992,1993,1996,1997,1999],{},[1921,1974,1975],{},"Config key"," in your Nuxt module must ",[1921,1978,1979],{},"exactly match"," the package name. Laioutr passes app configuration from ",[1926,1982,1983],{},"laioutrrc.json"," by this key. In ",[1926,1986,1987],{},"module.ts"," use ",[1926,1990,1991],{},"configKey: name"," where ",[1926,1994,1995],{},"name"," is imported from ",[1926,1998,1954],{},".",[2001,2002,2007],"pre",{"className":2003,"code":2004,"language":2005,"meta":2006,"style":2006},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// module.ts\nimport { name, version } from '../package.json';\n\nexport default defineNuxtModule\u003CModuleOptions>({\n  meta: {\n    name,\n    version,\n    configKey: name, // must match package name\n  },\n  // ...\n});\n","ts","",[1926,2008,2009,2018,2058,2065,2094,2107,2116,2124,2139,2145,2151],{"__ignoreMap":2006},[2010,2011,2014],"span",{"class":2012,"line":2013},"line",1,[2010,2015,2017],{"class":2016},"sHwdD","// module.ts\n",[2010,2019,2021,2025,2029,2033,2036,2039,2042,2045,2048,2052,2055],{"class":2012,"line":2020},2,[2010,2022,2024],{"class":2023},"s7zQu","import",[2010,2026,2028],{"class":2027},"sMK4o"," {",[2010,2030,2032],{"class":2031},"sTEyZ"," name",[2010,2034,2035],{"class":2027},",",[2010,2037,2038],{"class":2031}," version",[2010,2040,2041],{"class":2027}," }",[2010,2043,2044],{"class":2023}," from",[2010,2046,2047],{"class":2027}," '",[2010,2049,2051],{"class":2050},"sfazB","../package.json",[2010,2053,2054],{"class":2027},"'",[2010,2056,2057],{"class":2027},";\n",[2010,2059,2061],{"class":2012,"line":2060},3,[2010,2062,2064],{"emptyLinePlaceholder":2063},true,"\n",[2010,2066,2068,2071,2074,2078,2081,2085,2088,2091],{"class":2012,"line":2067},4,[2010,2069,2070],{"class":2023},"export",[2010,2072,2073],{"class":2023}," default",[2010,2075,2077],{"class":2076},"s2Zo4"," defineNuxtModule",[2010,2079,2080],{"class":2027},"\u003C",[2010,2082,2084],{"class":2083},"sBMFI","ModuleOptions",[2010,2086,2087],{"class":2027},">",[2010,2089,2090],{"class":2031},"(",[2010,2092,2093],{"class":2027},"{\n",[2010,2095,2097,2101,2104],{"class":2012,"line":2096},5,[2010,2098,2100],{"class":2099},"swJcz","  meta",[2010,2102,2103],{"class":2027},":",[2010,2105,2106],{"class":2027}," {\n",[2010,2108,2110,2113],{"class":2012,"line":2109},6,[2010,2111,2112],{"class":2031},"    name",[2010,2114,2115],{"class":2027},",\n",[2010,2117,2119,2122],{"class":2012,"line":2118},7,[2010,2120,2121],{"class":2031},"    version",[2010,2123,2115],{"class":2027},[2010,2125,2127,2130,2132,2134,2136],{"class":2012,"line":2126},8,[2010,2128,2129],{"class":2099},"    configKey",[2010,2131,2103],{"class":2027},[2010,2133,2032],{"class":2031},[2010,2135,2035],{"class":2027},[2010,2137,2138],{"class":2016}," // must match package name\n",[2010,2140,2142],{"class":2012,"line":2141},9,[2010,2143,2144],{"class":2027},"  },\n",[2010,2146,2148],{"class":2012,"line":2147},10,[2010,2149,2150],{"class":2016},"  // ...\n",[2010,2152,2154,2157,2160],{"class":2012,"line":2153},11,[2010,2155,2156],{"class":2027},"}",[2010,2158,2159],{"class":2031},")",[2010,2161,2057],{"class":2027},[1943,2163,2164],{},[1946,2165,2166,2167,2170,2171,2174,2175,2178,2179,2182,2183,2186],{},"In ",[1921,2168,2169],{},"globalExtensions.ts",", augment ",[1926,2172,2173],{},"PublicRuntimeConfig"," and ",[1926,2176,2177],{},"RuntimeConfig"," with the same key (e.g. ",[1926,2180,2181],{},"['my-laioutr-app']"," or ",[1926,2184,2185],{},"['@laioutr-app/commercetools']",") so TypeScript knows your app’s config shape.",[1938,2188,2190],{"id":2189},"repository-and-metadata","Repository and metadata",[1943,2192,2193,2213],{},[1946,2194,2195,2196,1959,2199,2202,2203,1951,2206,2208,2209,2212],{},"Set ",[1921,2197,2198],{},"description",[1921,2200,2201],{},"repository",", and ",[1921,2204,2205],{},"license",[1926,2207,1954],{},". Use a ",[1921,2210,2211],{},"CHANGELOG"," (e.g. changelogen) for release notes.",[1946,2214,2215,2216,2219],{},"Prefer ",[1921,2217,2218],{},"MIT"," for open-source apps unless your organization requires otherwise.",[1912,2221,2223],{"id":2222},"module-structure","Module structure",[1938,2225,2227],{"id":2226},"entry-point-and-exports","Entry point and exports",[1943,2229,2230,2246,2262],{},[1946,2231,2232,2235,2236,2239,2240,2174,2243,1999],{},[1921,2233,2234],{},"Entry:"," ",[1926,2237,2238],{},"src/module.ts"," is the module entry. Build output is typically ",[1926,2241,2242],{},"dist/module.mjs",[1926,2244,2245],{},"dist/types.d.mts",[1946,2247,2248,2251,2252,2254,2255,2257,2258,2261],{},[1921,2249,2250],{},"Exports:"," In ",[1926,2253,1954],{},", expose the main entry and types. Re-export types or utilities from ",[1926,2256,1987],{}," if needed (e.g. ",[1926,2259,2260],{},"export * from \"./globalExtensions\"",").",[1946,2263,2264,2267,2268,2271],{},[1921,2265,2266],{},"Files:"," Publish only what’s needed: e.g. ",[1926,2269,2270],{},"\"files\": [\"dist\"]"," so source and playgrounds are not published.",[1938,2273,2275],{"id":2274},"meta-defaults-setup","meta, defaults, setup",[1943,2277,2278,2293,2299],{},[1946,2279,2280,2283,2284,1959,2286,2202,2289,2292],{},[1921,2281,2282],{},"meta:"," Always set ",[1926,2285,1995],{},[1926,2287,2288],{},"version",[1926,2290,2291],{},"configKey"," (equal to package name).",[1946,2294,2295,2298],{},[1921,2296,2297],{},"defaults:"," Provide sensible defaults for every option that has one. Omit only when the value must be supplied by the user.",[1946,2300,2301,2304,2305,2308,2309],{},[1921,2302,2303],{},"setup:"," Use a single ",[1926,2306,2307],{},"async setup(options, nuxt)"," where you:\n",[2310,2311,2312,2322,2328,2336,2359],"ol",{},[1946,2313,2314,2315,2318,2319,1999],{},"Resolve paths with ",[1926,2316,2317],{},"createResolver(import.meta.url)"," and a helper like ",[1926,2320,2321],{},"resolveRuntimeModule(path) => resolve(\"./runtime\", path)",[1946,2323,2324,2325,1999],{},"Add runtime to transpile: ",[1926,2326,2327],{},"nuxt.options.build.transpile.push(resolve(\"./runtime\"))",[1946,2329,2330,2331,2261],{},"Merge options into runtime config (see ",[2332,2333,2335],"a",{"href":2334},"#configuration","Configuration",[1946,2337,2338,2339,2341,2342,1959,2344,2346,2347,1959,2350,1959,2353,1959,2356,2261],{},"Call ",[1926,2340,1928],{}," with ",[1926,2343,1995],{},[1926,2345,2288],{},", and the appropriate dirs (",[1926,2348,2349],{},"orchestrDirs",[1926,2351,2352],{},"sections",[1926,2354,2355],{},"blocks",[1926,2357,2358],{},"pageWrapper",[1946,2360,2361,2362,2365,2366,2369,2370,2372],{},"On ",[1926,2363,2364],{},"nuxt.options._prepare",", call ",[1926,2367,2368],{},"installModule"," for peer dependencies so auto-imports and aliases work in consuming apps. Check ",[2332,2371,530],{"href":531}," first to avoid installing modules the platform already provides.",[1938,2374,1928],{"id":2375},"registerlaioutrapp",[1943,2377,2378,2388,2397,2406],{},[1946,2379,2380,2381,2174,2383,2385,2386,1999],{},"Pass ",[1921,2382,1995],{},[1921,2384,2288],{}," from ",[1926,2387,1954],{},[1946,2389,2390,2393,2394,2261],{},[1921,2391,2392],{},"orchestrDirs:"," Array of paths to server-side orchestr handler directories (e.g. ",[1926,2395,2396],{},"[resolveRuntimeModule(\"server/orchestr\")]",[1946,2398,2399,2401,2402,2405],{},[1921,2400,2352],{}," / ",[1921,2403,2404],{},"blocks:"," If your app provides Studio sections or blocks, pass paths to the directories that contain the Vue components and definitions.",[1946,2407,2408,2411],{},[1921,2409,2410],{},"pageWrapper:"," If your app provides a page wrapper component, pass its name(s) in the array.",[1938,2413,2169],{"id":2414},"globalextensionsts",[1943,2416,2417,2423,2447,2460],{},[1946,2418,2419,2422],{},[1921,2420,2421],{},"Purpose:"," Extend Nuxt and Vue types so your app’s runtime config is typed.",[1946,2424,2425,2235,2428,2174,2431,2434,2435,2437,2438,2440,2441,1959,2444,2261],{},[1921,2426,2427],{},"Declare",[1926,2429,2430],{},"PublicRuntimeConfig[packageName]",[1926,2432,2433],{},"RuntimeConfig[packageName]"," using the same key as in ",[1926,2436,1987],{},". Use the types you export from ",[1926,2439,1987],{}," (",[1926,2442,2443],{},"RuntimeConfigModulePublic",[1926,2445,2446],{},"RuntimeConfigModulePrivate",[1946,2448,2449,2452,2453,2174,2456,2459],{},[1921,2450,2451],{},"Vue:"," Extend ",[1926,2454,2455],{},"GlobalComponents",[1926,2457,2458],{},"ComponentCustomProperties"," only if your app adds global components or properties.",[1946,2461,2462,2463,2466],{},"End the file with ",[1926,2464,2465],{},"export {}"," so it is treated as a module.",[1912,2468,2335],{"id":2469},"configuration",[1943,2471,2472,2488,2498,2507,2528],{},[1946,2473,2474,2477,2478,2182,2481,2483,2484,2487],{},[1921,2475,2476],{},"ModuleOptions:"," Interface for the options your module accepts (from ",[1926,2479,2480],{},"nuxt.config",[1926,2482,1983],{},"). Document each property; use optional (",[1926,2485,2486],{},"?",") only when the option has a default or is truly optional.",[1946,2489,2490,2493,2494,2497],{},[1921,2491,2492],{},"RuntimeConfigModulePublic:"," Shape of config exposed to the client. Include only ",[1921,2495,2496],{},"client-safe"," values (no secrets).",[1946,2499,2500,2503,2504,2506],{},[1921,2501,2502],{},"RuntimeConfigModulePrivate:"," Shape of config available only on the server. Typically extends ",[1926,2505,2084],{}," or includes secrets (API keys, client secrets).",[1946,2508,2509,2512,2513,2516,2517,2174,2520,2523,2524,2527],{},[1921,2510,2511],{},"Merge:"," Use ",[1926,2514,2515],{},"defu"," to merge user options with defaults into both ",[1926,2518,2519],{},"nuxt.options.runtimeConfig[name]",[1926,2521,2522],{},"nuxt.options.runtimeConfig.public[name]",". Only put public values in ",[1926,2525,2526],{},"public","; keep secrets in private config.",[1946,2529,2530,2533,2534,2536,2537,2539,2540,1999],{},[1921,2531,2532],{},"Config key:"," The key must be the package name (e.g. ",[1926,2535,1958],{},") so Laioutr can pass the correct slice of ",[1926,2538,1983],{}," into your module. See ",[2332,2541,498],{"href":499},[1912,2543,2545],{"id":2544},"orchestr","Orchestr",[1938,2547,2549],{"id":2548},"middleware-defineorchestr","Middleware (defineOrchestr)",[1943,2551,2552,2568,2608,2657],{},[1946,2553,2554,2557,2558,2561,2562,2182,2565,2261],{},[1921,2555,2556],{},"Location:"," Typically ",[1926,2559,2560],{},"src/runtime/server/middleware/"," (e.g. ",[1926,2563,2564],{},"defineCommercetools.ts",[1926,2566,2567],{},"index.ts",[1946,2569,2570,2573,2574,2577,2578,2581,2582,2584,2585,2588,2589,2592,2593,2596,2597,2600,2601,2604,2605,1999],{},[1921,2571,2572],{},"Pattern:"," Create a base orchestr with ",[1926,2575,2576],{},"defineOrchestr.meta({ app: name, label, logoUrl }).extendRequest(...)",". The meta block identifies your app for Orchestr DevTools and other tooling: pass ",[1926,2579,2580],{},"app"," (the package name from ",[1926,2583,1954],{},"), ",[1926,2586,2587],{},"label"," (a human-readable display name like ",[1926,2590,2591],{},"'Shopware'","), and ",[1926,2594,2595],{},"logoUrl"," (an absolute path to a logo image served from your app's public assets, e.g. ",[1926,2598,2599],{},"/app-shopware/shopware-logo.svg","). In ",[1926,2602,2603],{},"extendRequest",", build any client/context (API client, auth, facets) and return ",[1926,2606,2607],{},"{ context: { ... } }",[1946,2609,2610,2612,2613],{},[1921,2611,2250],{}," Re-export the handler factories from the base orchestr:\n",[1943,2614,2615,2624,2632,2640,2648],{},[1946,2616,2617,2620,2621],{},[1926,2618,2619],{},"defineXQuery"," = base ",[1926,2622,2623],{},".queryHandler",[1946,2625,2626,2620,2629],{},[1926,2627,2628],{},"defineXAction",[1926,2630,2631],{},".actionHandler",[1946,2633,2634,2620,2637],{},[1926,2635,2636],{},"defineXLink",[1926,2638,2639],{},".linkHandler",[1946,2641,2642,2620,2645],{},[1926,2643,2644],{},"defineXComponentResolver",[1926,2646,2647],{},".componentResolver",[1946,2649,2650,2620,2653,2656],{},[1926,2651,2652],{},"defineXQueryTemplateProvider",[1926,2654,2655],{},".queryTemplateProvider"," (if used)",[1946,2658,2659,2660,1959,2663,2666,2667,1999],{},"Handlers in the orchestr dir then import these (e.g. ",[1926,2661,2662],{},"defineCommercetoolsQuery",[1926,2664,2665],{},"defineEmporixAction",") and use the canonical types from ",[1926,2668,2669],{},"@laioutr-core/canonical-types",[1938,2671,2673],{"id":2672},"api-client","API client",[1917,2675,2676],{},"Connectors typically wrap a backend HTTP/REST or GraphQL API. Generate a typed client from the backend's schema instead of writing fetch calls by hand:",[1943,2678,2679,2717,2732],{},[1946,2680,2681,2512,2684,2692,2693,2700,2701,2704,2705,2708,2709,2712,2713,2716],{},[1921,2682,2683],{},"REST/OpenAPI:",[2332,2685,2689],{"href":2686,"rel":2687},"https://openapi-ts.dev/",[2688],"nofollow",[1926,2690,2691],{},"openapi-typescript"," to generate types from the backend's OpenAPI spec, paired with ",[2332,2694,2697],{"href":2695,"rel":2696},"https://openapi-ts.dev/openapi-fetch/",[2688],[1926,2698,2699],{},"openapi-fetch"," for a typed ",[1926,2702,2703],{},"fetch"," wrapper. Commit the generated ",[1926,2706,2707],{},"schema.ts"," under ",[1926,2710,2711],{},"src/runtime/server/client/"," and add a ",[1926,2714,2715],{},"pnpm openapi:generate"," script that refreshes it from the upstream spec URL.",[1946,2718,2719,2512,2722,2727,2728,2731],{},[1921,2720,2721],{},"GraphQL:",[2332,2723,2726],{"href":2724,"rel":2725},"https://the-guild.dev/graphql/codegen",[2688],"GraphQL Code Generator"," to produce typed operations from ",[1926,2729,2730],{},".graphql"," documents.",[1946,2733,2734,2737],{},[1921,2735,2736],{},"Vendor SDK:"," If the backend ships its own typed SDK (e.g. commercetools), use that and skip codegen.",[1917,2739,2740,2741,2743,2744,1999],{},"Construct the client inside ",[1926,2742,2603],{}," so each request gets its own instance with the right auth, locale, and currency derived from ",[1926,2745,2746],{},"clientEnv",[1938,2748,2750],{"id":2749},"file-and-folder-naming","File and folder naming",[1943,2752,2753,2775,2792,2809,2820,2850,2862,2875],{},[1946,2754,2755,2758,2759,1959,2762,1959,2765,1959,2768,1959,2771,2774],{},[1921,2756,2757],{},"Entity-based folders:"," Group handlers by canonical entity or feature: ",[1926,2760,2761],{},"cart/",[1926,2763,2764],{},"menu/",[1926,2766,2767],{},"product/",[1926,2769,2770],{},"product-variant/",[1926,2772,2773],{},"newsletter/",", etc.",[1946,2776,2777,2235,2780,2561,2783,1959,2786,1959,2789,2261],{},[1921,2778,2779],{},"Query files:",[1926,2781,2782],{},"\u003Cname>.query.ts",[1926,2784,2785],{},"by-slug.query.ts",[1926,2787,2788],{},"get-current.query.ts",[1926,2790,2791],{},"by-alias.query.ts",[1946,2793,2794,2235,2797,2561,2800,1959,2803,1959,2806,2261],{},[1921,2795,2796],{},"Action files:",[1926,2798,2799],{},"\u003Cname>.action.ts",[1926,2801,2802],{},"add-to-cart.action.ts",[1926,2804,2805],{},"add-item.action.ts",[1926,2807,2808],{},"subscribe.action.ts",[1946,2810,2811,2235,2814,2561,2817,2261],{},[1921,2812,2813],{},"Link files:",[1926,2815,2816],{},"\u003Cname>.link.ts",[1926,2818,2819],{},"variants.link.ts",[1946,2821,2822,2235,2825,2828,2829,1959,2832,2835,2836,1959,2839,1959,2841,2202,2844,2341,2847,1999],{},[1921,2823,2824],{},"Resolver files:",[1926,2826,2827],{},"base.resolver.ts"," per entity (e.g. ",[1926,2830,2831],{},"cart/base.resolver.ts",[1926,2833,2834],{},"product/base.resolver.ts","). Use ",[1926,2837,2838],{},"entityType",[1926,2840,2587],{},[1926,2842,2843],{},"provides",[1926,2845,2846],{},"resolve",[1926,2848,2849],{},"$entity",[1946,2851,2852,2235,2855,2561,2858,2861],{},[1921,2853,2854],{},"Query template provider:",[1926,2856,2857],{},"\u003Cname>.template.ts",[1926,2859,2860],{},"by-alias.template.ts",") when you provide multiple query inputs for static/menu generation.",[1946,2863,2864,2867,2868,2561,2871,2874],{},[1921,2865,2866],{},"Plugins:"," Put Nitro/orchestr plugins under ",[1926,2869,2870],{},"orchestr/plugins/",[1926,2872,2873],{},"zodFix.ts"," for Zod compatibility).",[1946,2876,2877,2880,2881,2884,2885,1959,2888,2891,2892,2895],{},[1921,2878,2879],{},"Errors:"," Put custom errors under ",[1926,2882,2883],{},"errors/"," in the relevant entity folder (e.g. ",[1926,2886,2887],{},"menu/errors/category-not-found.error.ts",[1926,2889,2890],{},"product/errors/products-not-found.error.ts","). Use a ",[1926,2893,2894],{},".error.ts"," suffix.",[1938,2897,2899],{"id":2898},"handler-implementation","Handler implementation",[1943,2901,2902,2925,2934,2946,2962,2980],{},[1946,2903,2904,2907,2908,2911,2912,1959,2915,2918,2919,2922,2923,1999],{},[1921,2905,2906],{},"Queries:"," Default export = ",[1926,2909,2910],{},"defineXQuery(CanonicalQuery, async ({ context, input, clientEnv, filter, sorting, pagination, passthrough }) => { ... })",". Return the shape expected by the canonical type (e.g. ",[1926,2913,2914],{},"{ id }",[1926,2916,2917],{},"{ ids, total, availableFilters, availableSortings }","). For the filter request and ",[1926,2920,2921],{},"availableFilters"," response shapes, see ",[2332,2924,294],{"href":295},[1946,2926,2927,2907,2930,2933],{},[1921,2928,2929],{},"Actions:",[1926,2931,2932],{},"defineXAction(CanonicalAction, async ({ context, input, clientEnv }) => { ... })",". Perform side effects and return the canonical action result.",[1946,2935,2936,2907,2939,2942,2943,1999],{},[1921,2937,2938],{},"Links:",[1926,2940,2941],{},"defineXLink(CanonicalLink, async ({ entityIds, context, passthrough }) => { ... })",". Return ",[1926,2944,2945],{},"{ links: [{ sourceId, targetIds }] }",[1946,2947,2948,2907,2951,2954,2955,2958,2959,1999],{},[1921,2949,2950],{},"Resolvers:",[1926,2952,2953],{},"defineXComponentResolver({ entityType, label, provides: [...], resolve: async ({ entityIds, context, clientEnv, $entity, passthrough }) => { ... } })",". Use ",[1926,2956,2957],{},"$entity({ id, base: () => ({...}), ... })"," to build entities; return ",[1926,2960,2961],{},"{ entities }",[1946,2963,2964,2967,2968,2561,2970,1959,2973,1959,2976,2979],{},[1921,2965,2966],{},"Canonical types:"," Import queries, actions, links, and entity parts from ",[1926,2969,2669],{},[1926,2971,2972],{},"ecommerce",[1926,2974,2975],{},"entity/cart",[1926,2977,2978],{},"entity/product","). Do not invent new variable or entity shapes; extend the canonical model if needed via the proper channels.",[1946,2981,2982,2985,2986,2988,2989,1999],{},[1921,2983,2984],{},"Cookies and response headers:"," Set them inside ",[1926,2987,2603],{}," (runs before streaming) or inside an action (single non-streamed response). Query, link, and component-resolver handlers cannot set headers because the response stream has already started. See ",[2332,2990,2992],{"href":2991},"/frontend/orchestr/middleware#setting-cookies-and-response-headers","Setting cookies and response headers",[1938,2994,419],{"id":2995},"errors",[1943,2997,2998,3016,3035,3045],{},[1946,2999,3000,3001,3004,3005,3008,3009,1959,3012,3015],{},"Use ",[1921,3002,3003],{},"HTTP error classes"," that map to appropriate status codes (e.g. ",[1926,3006,3007],{},"@ebec/http","). Extend ",[1926,3010,3011],{},"NotFoundError",[1926,3013,3014],{},"BadRequestError",", etc., for consistent API behavior.",[1946,3017,3018,3019,2561,3024,3027,3028,2174,3031,3034],{},"Give each error a ",[1921,3020,3021,3022],{},"static ",[1926,3023,1926],{},[1926,3025,3026],{},"static readonly code = \"PRODUCTS_NOT_FOUND\"",") and pass a clear ",[1921,3029,3030],{},"message",[1921,3032,3033],{},"data"," in the constructor.",[1946,3036,3037,3038,2174,3041,3044],{},"Document public errors with ",[1921,3039,3040],{},"JSDoc",[1926,3042,3043],{},"@public"," if they are part of your app’s API.",[1946,3046,3047,3048,2440,3051,3054],{},"Export a ",[1921,3049,3050],{},"default no-op",[1926,3052,3053],{},"export default () => {}",") from error files if the file is only for the class and you want to avoid side effects when importing.",[1938,3056,3058],{"id":3057},"passthrough-and-helpers","Passthrough and helpers",[1943,3060,3061,3077,3093,3103],{},[1946,3062,3063,2512,3066,3069,3070,2174,3073,3076],{},[1921,3064,3065],{},"Passthrough tokens:",[1926,3067,3068],{},"createPassthroughToken\u003CT>(key)"," from the orchestr for data that should be shared between a query/link and a resolver in the same request (e.g. categories, products, variants). Set and get via ",[1926,3071,3072],{},"passthrough.set(token, value)",[1926,3074,3075],{},"passthrough.get(token)",". Treat passthrough as the default path when your list query already returns full entity data; without it, every resolver in the chain refetches the same entities.",[1946,3078,3079,2512,3082,2385,3085,3088,3089,1999],{},[1921,3080,3081],{},"Userland cache:",[1926,3083,3084],{},"useUserlandCache\u003CT>('myapp/concern')",[1926,3086,3087],{},"#imports"," for data that should survive across requests but lives outside query/link/resolver results (e.g. resolved auth tokens, system config, aggregated counts). The cache is cleared together with the orchestr cache. See ",[2332,3090,3092],{"href":3091},"/frontend/orchestr/caching#userland-cache","Userland cache",[1946,3094,3095,3098,3099,3102],{},[1921,3096,3097],{},"orchestr-helper:"," Put pure mapping and helper logic in ",[1926,3100,3101],{},"runtime/server/orchestr-helper/"," (e.g. cart helpers, product mappers, localized getters) so handlers stay thin and testable.",[1946,3104,3105,3108,3109,3112],{},[1921,3106,3107],{},"mappers:"," Put backend-to-canonical mappers (e.g. filters, media) in ",[1926,3110,3111],{},"runtime/server/mappers/"," and import them in resolvers or handlers.",[1912,3114,3116],{"id":3115},"section-and-block-naming","Section and block naming",[1917,3118,3119,3120,3123,3124,3127,3128,3131],{},"Sections and blocks are registered as ",[1921,3121,3122],{},"global Vue components"," when Laioutr loads your app. All apps in a project share one global component registry, so names must be ",[1921,3125,3126],{},"unique across every section and block in the project",", including those from other installed apps. If two apps register a ",[1926,3129,3130],{},"HeroBanner"," component, whichever loads last silently overwrites the other.",[1917,3133,3134],{},"To avoid collisions:",[1943,3136,3137,3149,3161],{},[1946,3138,3139,3140,2561,3143,1959,3146,2261],{},"Prefix section components with ",[1926,3141,3142],{},"Section",[1926,3144,3145],{},"SectionHeroBanner",[1926,3147,3148],{},"SectionProductGrid",[1946,3150,3151,3152,2561,3155,1959,3158,2261],{},"Prefix block components with ",[1926,3153,3154],{},"Block",[1926,3156,3157],{},"BlockTestimonial",[1926,3159,3160],{},"BlockCarouselSlide",[1946,3162,3163,3164,3167,3168,3171,3172,1999],{},"Keep the ",[1926,3165,3166],{},"component"," value in the definition identical to the filename: ",[1926,3169,3170],{},"SectionHeroBanner.vue"," registers as ",[1926,3173,3174],{},"'SectionHeroBanner'",[1917,3176,3177],{},"The prefix also makes it clear in Studio and in Vue devtools whether a component is a top-level section or a slot-level block.",[1912,3179,3181],{"id":3180},"runtime-layout","Runtime layout",[1943,3183,3184,3218,3243,3275],{},[1946,3185,3186,3189,3190,3193,3194,3197,3198,3201,3202,1959,3205,3208,3209,1959,3212,1959,3215,1999],{},[1921,3187,3188],{},"Server-only"," code lives under ",[1926,3191,3192],{},"src/runtime/server/",": ",[1926,3195,3196],{},"client/"," (API/SDK factory), ",[1926,3199,3200],{},"const/"," (keys, passthrough tokens), ",[1926,3203,3204],{},"mappers/",[1926,3206,3207],{},"middleware/"," (orchestr defineOrchestr), ",[1926,3210,3211],{},"orchestr/",[1926,3213,3214],{},"orchestr-helper/",[1926,3216,3217],{},"utils/",[1946,3219,3220,3189,3223,3193,3226,1959,3229,1959,3232,3235,3236,3239,3240,1999],{},[1921,3221,3222],{},"Client-only",[1926,3224,3225],{},"src/runtime/app/",[1926,3227,3228],{},"components/",[1926,3230,3231],{},"sections/",[1926,3233,3234],{},"blocks/",", and optionally ",[1926,3237,3238],{},"image/"," (providers), ",[1926,3241,3242],{},"public/",[1946,3244,3245,3189,3248,3251,3252,1959,3255,1959,3258,2202,3261,3264,3265,2182,3268,3271,3272,1999],{},[1921,3246,3247],{},"Shared (server + client)",[1926,3249,3250],{},"src/runtime/shared/",". This is where orchestr token files belong: ",[1926,3253,3254],{},"defineActionToken",[1926,3256,3257],{},"defineQueryToken",[1926,3259,3260],{},"defineLinkToken",[1926,3262,3263],{},"defineEntityComponentToken"," declarations all need to be importable from both your server handlers and your frontend components, so they cannot live under ",[1926,3266,3267],{},"server/",[1926,3269,3270],{},"app/",". The convention is ",[1926,3273,3274],{},"src/runtime/shared/tokens/\u003Cfeature>.ts",[1946,3276,3277,3280,3281,3284,3285,3288],{},[1921,3278,3279],{},"Transpile:"," The module must add ",[1926,3282,3283],{},"resolve(\"./runtime\")"," to ",[1926,3286,3287],{},"nuxt.options.build.transpile"," so the runtime is compiled by the consuming app.",[1912,3290,3292],{"id":3291},"typescript","TypeScript",[1943,3294,3295,3307,3313,3326],{},[1946,3296,3000,3297,3300,3301,2174,3303,3306],{},[1921,3298,3299],{},"strict"," TypeScript. Rely on types from ",[1926,3302,2669],{},[1926,3304,3305],{},"@laioutr-core/core-types"," for orchestr inputs and outputs.",[1946,3308,3309,3312],{},[1921,3310,3311],{},"Explicit types"," for public APIs (module options, runtime config, exported functions). Use inference for local variables where it improves readability.",[1946,3314,3315,3318,3319,3321,3322,3325],{},[1921,3316,3317],{},"Empty object types:"," If an interface has no properties (e.g. ",[1926,3320,2443],{},"), you may need ",[1926,3323,3324],{},"// eslint-disable-line @typescript-eslint/no-empty-object-type"," or a comment property to satisfy the linter; keep the type if it is used for augmentation.",[1946,3327,3328,2341,3331,3334],{},[1921,3329,3330],{},"Import types",[1926,3332,3333],{},"import type"," where only types are needed to keep runtime imports clear.",[1912,3336,3338],{"id":3337},"build-and-tooling","Build and tooling",[1938,3340,3342],{"id":3341},"buildconfigts-unbuild","build.config.ts (unbuild)",[1943,3344,3345],{},[1946,3346,3000,3347,3350,3351,3354,3355,3357,3358,1959,3361,1959,3364,3367],{},[1921,3348,3349],{},"unbuild"," (e.g. via ",[1926,3352,3353],{},"nuxt-module-build","). Externalize dependencies that must not be bundled: at least ",[1926,3356,2515],{},", and often ",[1926,3359,3360],{},"@laioutr-core/frontend-core",[1926,3362,3363],{},"@laioutr-core/kit",[1926,3365,3366],{},"@parcel/watcher"," if used. This keeps the dist small and avoids duplicate instances of core packages.",[1938,3369,3371],{"id":3370},"packagejson-scripts","package.json scripts",[1943,3373,3374,3383,3392,3404,3413,3419,3428,3437],{},[1946,3375,3376,3379,3380,2261],{},[1921,3377,3378],{},"dev:"," Prepare and run the main playground (",[1926,3381,3382],{},"nuxi dev playground",[1946,3384,3385,3388,3389,2261],{},[1921,3386,3387],{},"orchestr-dev:"," Prepare and run the orchestr playground (",[1926,3390,3391],{},"nuxi dev orchestr-playground",[1946,3393,3394,3397,3398,2174,3401,1999],{},[1921,3395,3396],{},"dev:prepare:"," Build the module (stub), run nuxt prepare for playground(s). Required before ",[1926,3399,3400],{},"dev",[1926,3402,3403],{},"orchestr-dev",[1946,3405,3406,3409,3410,2261],{},[1921,3407,3408],{},"prepack:"," Build the module for publishing (",[1926,3411,3412],{},"nuxt-module-build build",[1946,3414,3415,3418],{},[1921,3416,3417],{},"release:"," Lint, test, prepack, then run your release flow (e.g. changelogen, publish, push tags).",[1946,3420,3421,3424,3425,2261],{},[1921,3422,3423],{},"lint:"," Run ESLint (e.g. ",[1926,3426,3427],{},"eslint .",[1946,3429,3430,3433,3434,2261],{},[1921,3431,3432],{},"test:"," Run tests (e.g. ",[1926,3435,3436],{},"vitest run",[1946,3438,3439,3442,3443,2261],{},[1921,3440,3441],{},"test:types:"," Type-check the module and playground (e.g. ",[1926,3444,3445],{},"vue-tsc --noEmit",[1938,3447,3449],{"id":3448},"playgrounds","Playgrounds",[1943,3451,3452,3461],{},[1946,3453,3454,3457,3458,3460],{},[1921,3455,3456],{},"playground:"," Consumes your module and, if applicable, ",[1926,3459,1983],{}," and Frontend Core. Use it for full UI and integration testing.",[1946,3462,3463,3466,3467,1999],{},[1921,3464,3465],{},"orchestr-playground:"," Adds Orchestr and Orchestr DevTools. Use it to test queries and actions (e.g. Orchestr Request Editor) without a full project config. Both playgrounds should list your module and required peer deps in their own ",[1926,3468,1954],{},[1912,3470,3472],{"id":3471},"testing","Testing",[1943,3474,3475,3496,3503],{},[1946,3476,3000,3477,3480,3481,3484,3485,2561,3488,3491,3492,3495],{},[1921,3478,3479],{},"Vitest"," for unit and ",[1921,3482,3483],{},"@nuxt/test-utils"," for Nuxt-related tests. Place tests in ",[1926,3486,3487],{},"test/",[1926,3489,3490],{},"basic.test.ts",") and fixtures under ",[1926,3493,3494],{},"test/fixtures/basic/"," (minimal Nuxt app that uses your module).",[1946,3497,3498,3499,3502],{},"At least one ",[1921,3500,3501],{},"smoke test"," (e.g. SSR render of a page) ensures the module installs and runs. Add handler- or resolver-level tests as needed.",[1946,3504,3505,3506,3509],{},"Run ",[1921,3507,3508],{},"test:types"," in CI to catch type errors in the module and playground.",[1912,3511,3513],{"id":3512},"linting-and-formatting","Linting and formatting",[1943,3515,3516,3534,3560],{},[1946,3517,3518,3521,3522,3525,3526,3529,3530,3533],{},[1921,3519,3520],{},"ESLint:"," Use the Laioutr ESLint config for Nuxt modules (e.g. ",[1926,3523,3524],{},"@laioutr/eslint-config/nuxt-module","). Run ",[1926,3527,3528],{},"pnpm lint"," (or ",[1926,3531,3532],{},"npm run lint",") before committing and in CI.",[1946,3535,3536,3539,3540,3543,3544,2341,3547,1959,3550,1959,3553,2182,3556,3559],{},[1921,3537,3538],{},"Prettier:"," Use a consistent formatter (e.g. ",[1926,3541,3542],{},"@laioutr/prettier-config"," or a local ",[1926,3545,3546],{},".prettierrc",[1926,3548,3549],{},"tabWidth: 2",[1926,3551,3552],{},"useTabs: false",[1926,3554,3555],{},"printWidth: 80",[1926,3557,3558],{},"120","). Format on save or in pre-commit.",[1946,3561,3562,3565],{},[1921,3563,3564],{},"Empty interfaces:"," If the linter forbids empty object types, use the approved escape (e.g. eslint-disable for that line) and a short comment, or add a single optional property; keep the type for schema augmentation.",[1912,3567,3569],{"id":3568},"secrets-and-environment","Secrets and environment",[1943,3571,3572,3582,3590],{},[1946,3573,3574,3577,3578,3581],{},[1921,3575,3576],{},"Never commit"," API keys, client secrets, or tokens. Use environment variables or a secret manager (e.g. Infisical) and pass them into ",[1921,3579,3580],{},"private"," runtime config only.",[1946,3583,3584,3587,3588,1999],{},[1921,3585,3586],{},"Public runtime config"," is exposed to the client. Put only non-sensitive options (e.g. sample rate, feature flags, public URLs) in ",[1926,3589,2443],{},[1946,3591,3592,3593,3596],{},"Document required env vars and config in your app’s README or in the ",[2332,3594,3595],{"href":465},"App docs"," so integrators know what to set.",[3598,3599,3600],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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);}",{"title":2006,"searchDepth":2020,"depth":2020,"links":3602},[3603,3604,3608,3614,3615,3623,3624,3625,3626,3631,3632,3633],{"id":1914,"depth":2020,"text":1915},{"id":1935,"depth":2020,"text":1936,"children":3605},[3606,3607],{"id":1940,"depth":2060,"text":1941},{"id":2189,"depth":2060,"text":2190},{"id":2222,"depth":2020,"text":2223,"children":3609},[3610,3611,3612,3613],{"id":2226,"depth":2060,"text":2227},{"id":2274,"depth":2060,"text":2275},{"id":2375,"depth":2060,"text":1928},{"id":2414,"depth":2060,"text":2169},{"id":2469,"depth":2020,"text":2335},{"id":2544,"depth":2020,"text":2545,"children":3616},[3617,3618,3619,3620,3621,3622],{"id":2548,"depth":2060,"text":2549},{"id":2672,"depth":2060,"text":2673},{"id":2749,"depth":2060,"text":2750},{"id":2898,"depth":2060,"text":2899},{"id":2995,"depth":2060,"text":419},{"id":3057,"depth":2060,"text":3058},{"id":3115,"depth":2020,"text":3116},{"id":3180,"depth":2020,"text":3181},{"id":3291,"depth":2020,"text":3292},{"id":3337,"depth":2020,"text":3338,"children":3627},[3628,3629,3630],{"id":3341,"depth":2060,"text":3342},{"id":3370,"depth":2060,"text":3371},{"id":3448,"depth":2060,"text":3449},{"id":3471,"depth":2020,"text":3472},{"id":3512,"depth":2020,"text":3513},{"id":3568,"depth":2020,"text":3569},"Conventions and quality guidelines for developing Laioutr apps. Use these standards to keep app code consistent, maintainable, and aligned with the Laioutr ecosystem.","md",{},{"title":3638,"description":3639},"Coding Standards | Laioutr","Conventions and quality guidelines for developing Laioutr apps. Use these standards to keep app code consistent,…",{"loc":515,"lastmod":3641,"changefreq":3642,"priority":2013},"2026-04-08","monthly","Bmvu93BV-AODvgT2BYiP2V2l5r8DPK-uKSdkGf_iZoc",[3645,3647],{"title":510,"path":511,"stem":512,"description":3646,"children":-1},"How to create and register block definitions for Laioutr Studio.",{"title":518,"path":519,"stem":520,"description":3648,"children":-1},"How to build a Laioutr app that integrates a Consent Management Platform (CMP) by implementing the ConsentAdapter contract from frontend-core.",1783259588011]