[{"data":1,"prerenderedAt":2474},["ShallowReactive",2],{"navigation_docs":3,"-frontend-orchestr-recipes-userland-cache-patterns":1474,"-frontend-orchestr-recipes-userland-cache-patterns-surround":2469},[4,132,442,591,1159,1231,1237,1243,1302,1401],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","/getting-started","0.getting-started/0.index",[9,10,14,18,56,81,115,128],{"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},"CLI Changelog","/getting-started/changelogs/cli-changelog","0.getting-started/5.Changelogs/cli-changelog",{"title":92,"path":93,"stem":94},"Cockpit Changelog","/getting-started/changelogs/cockpit-changelog","0.getting-started/5.Changelogs/cockpit-changelog",{"title":96,"path":97,"stem":98},"Figma Kit Changelog","/getting-started/changelogs/figma-kit-changelog","0.getting-started/5.Changelogs/figma-kit-changelog",{"title":100,"path":101,"stem":102},"Frontend Changelog","/getting-started/changelogs/frontend-changelog","0.getting-started/5.Changelogs/frontend-changelog",{"title":104,"path":105,"stem":106},"Orchestr Changelog","/getting-started/changelogs/orchestr-changelog","0.getting-started/5.Changelogs/orchestr-changelog",{"title":108,"path":109,"stem":110},"Orchestr Devtools Changelog","/getting-started/changelogs/orchestr-devtools-changelog","0.getting-started/5.Changelogs/orchestr-devtools-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],{"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},"MCP Server","/getting-started/mcp-server","0.getting-started/7.mcp-server",{"title":133,"path":134,"stem":135,"children":136},"Frontend","/frontend","1.Frontend/0.index",[137,138,149,211,237,301],{"title":133,"path":134,"stem":135},{"title":121,"path":139,"stem":140,"children":141,"page":55},"/frontend/introduction","1.Frontend/1.Introduction",[142,145],{"title":19,"path":143,"stem":144},"/frontend/introduction/key-concepts","1.Frontend/1.Introduction/0.key-concepts",{"title":146,"path":147,"stem":148},"Tech Stack","/frontend/introduction/tech-stack","1.Frontend/1.Introduction/1.tech-stack",{"title":150,"path":151,"stem":152,"children":153},"Features","/frontend/features","1.Frontend/2.Features/0.index",[154,155,159,163,167,171,175,179,183,187,191,195,199,203,207],{"title":150,"path":151,"stem":152},{"title":156,"path":157,"stem":158},"Consent Management","/frontend/features/consent-management","1.Frontend/2.Features/consent-management",{"title":160,"path":161,"stem":162},"Currencies","/frontend/features/currencies","1.Frontend/2.Features/currencies",{"title":164,"path":165,"stem":166},"Environments & Staging","/frontend/features/environments","1.Frontend/2.Features/environments",{"title":168,"path":169,"stem":170},"Hooks","/frontend/features/hooks","1.Frontend/2.Features/hooks",{"title":172,"path":173,"stem":174},"Media and Media Library","/frontend/features/media","1.Frontend/2.Features/media",{"title":176,"path":177,"stem":178},"Multi-language Support","/frontend/features/multi-language-support","1.Frontend/2.Features/multi-language-support",{"title":180,"path":181,"stem":182},"Multi-market","/frontend/features/multi-market","1.Frontend/2.Features/multi-market",{"title":184,"path":185,"stem":186},"Page Types","/frontend/features/pagetypes","1.Frontend/2.Features/pagetypes",{"title":188,"path":189,"stem":190},"PWA","/frontend/features/pwa","1.Frontend/2.Features/pwa",{"title":192,"path":193,"stem":194},"Redirects","/frontend/features/redirects","1.Frontend/2.Features/redirects",{"title":196,"path":197,"stem":198},"Routing","/frontend/features/routing","1.Frontend/2.Features/routing",{"title":200,"path":201,"stem":202},"Server-Side Rendering (SSR) and Caching","/frontend/features/ssr-and-caching","1.Frontend/2.Features/ssr-and-caching",{"title":204,"path":205,"stem":206},"Tracking","/frontend/features/tracking","1.Frontend/2.Features/tracking",{"title":208,"path":209,"stem":210},"Z-Ordering","/frontend/features/z-ordering","1.Frontend/2.Features/z-ordering",{"title":212,"path":213,"stem":214,"children":215},"SEO","/frontend/seo","1.Frontend/3.SEO/0.index",[216,217,221,225,229,233],{"title":212,"path":213,"stem":214},{"title":218,"path":219,"stem":220},"Link Checker","/frontend/seo/link-checker","1.Frontend/3.SEO/link-checker",{"title":222,"path":223,"stem":224},"OG Image","/frontend/seo/og-image","1.Frontend/3.SEO/og-image",{"title":226,"path":227,"stem":228},"Robots.txt","/frontend/seo/robots-txt","1.Frontend/3.SEO/robots-txt",{"title":230,"path":231,"stem":232},"Schema.org","/frontend/seo/schema-org","1.Frontend/3.SEO/schema-org",{"title":234,"path":235,"stem":236},"Sitemap","/frontend/seo/sitemap","1.Frontend/3.SEO/sitemap",{"title":238,"path":239,"stem":240,"children":241},"Backend for Frontend","/frontend/orchestr","1.Frontend/4.Orchestr/0.index",[242,243,269,273,277,281,285,289,293,297],{"title":238,"path":239,"stem":240},{"title":244,"path":245,"stem":246,"children":247},"Recipes","/frontend/orchestr/recipes","1.Frontend/4.Orchestr/99.recipes/0.index",[248,249,253,257,261,265],{"title":244,"path":245,"stem":246},{"title":250,"path":251,"stem":252},"Analytics components from query handlers","/frontend/orchestr/recipes/analytics-from-query-handlers","1.Frontend/4.Orchestr/99.recipes/analytics-from-query-handlers",{"title":254,"path":255,"stem":256},"Identity cookies (cart and visitor IDs)","/frontend/orchestr/recipes/identity-cookies","1.Frontend/4.Orchestr/99.recipes/identity-cookies",{"title":258,"path":259,"stem":260},"System bootstrap in extendRequest","/frontend/orchestr/recipes/system-bootstrap","1.Frontend/4.Orchestr/99.recipes/system-bootstrap",{"title":262,"path":263,"stem":264},"Translating vendor errors","/frontend/orchestr/recipes/translating-vendor-errors","1.Frontend/4.Orchestr/99.recipes/translating-vendor-errors",{"title":266,"path":267,"stem":268},"Userland cache patterns","/frontend/orchestr/recipes/userland-cache-patterns","1.Frontend/4.Orchestr/99.recipes/userland-cache-patterns",{"title":270,"path":271,"stem":272},"Actions","/frontend/orchestr/actions","1.Frontend/4.Orchestr/Actions",{"title":274,"path":275,"stem":276},"Caching","/frontend/orchestr/caching","1.Frontend/4.Orchestr/Caching",{"title":278,"path":279,"stem":280},"Middleware","/frontend/orchestr/middleware","1.Frontend/4.Orchestr/Middleware",{"title":282,"path":283,"stem":284},"Queries & Links","/frontend/orchestr/queries","1.Frontend/4.Orchestr/Queries",{"title":286,"path":287,"stem":288},"Component Resolvers","/frontend/orchestr/component-resolvers","1.Frontend/4.Orchestr/component-resolvers",{"title":290,"path":291,"stem":292},"Filters","/frontend/orchestr/filters","1.Frontend/4.Orchestr/filters",{"title":294,"path":295,"stem":296},"URL Query Parameters","/frontend/orchestr/url-query-params","1.Frontend/4.Orchestr/url-query-params",{"title":298,"path":299,"stem":300},"Orchestr Wire Format","/frontend/orchestr/wire-format","1.Frontend/4.Orchestr/wire-format",{"title":302,"path":303,"stem":304,"children":305},"API Reference","/frontend/api-reference","1.Frontend/99.api-reference/0.index",[306,307,364,367,392,408,416,427,435],{"title":302,"path":303,"stem":304},{"title":308,"path":309,"stem":310,"children":311,"page":55},"Entities","/frontend/api-reference/entities","1.Frontend/99.api-reference/01.entities",[312,316,320,324,328,332,336,340,344,348,352,356,360],{"title":313,"path":314,"stem":315},"Product","/frontend/api-reference/entities/product","1.Frontend/99.api-reference/01.entities/1.product",{"title":317,"path":318,"stem":319},"SuggestedSearch","/frontend/api-reference/entities/suggested-search","1.Frontend/99.api-reference/01.entities/10.suggested-search",{"title":321,"path":322,"stem":323},"SuggestedSearchEntry","/frontend/api-reference/entities/suggested-search-entry","1.Frontend/99.api-reference/01.entities/11.suggested-search-entry",{"title":325,"path":326,"stem":327},"BlogCollection","/frontend/api-reference/entities/blog-collection","1.Frontend/99.api-reference/01.entities/12.blog-collection",{"title":329,"path":330,"stem":331},"Comment","/frontend/api-reference/entities/comment","1.Frontend/99.api-reference/01.entities/13.comment",{"title":333,"path":334,"stem":335},"ProductVariant","/frontend/api-reference/entities/product-variant","1.Frontend/99.api-reference/01.entities/2.product-variant",{"title":337,"path":338,"stem":339},"Category","/frontend/api-reference/entities/category","1.Frontend/99.api-reference/01.entities/3.category",{"title":341,"path":342,"stem":343},"Cart","/frontend/api-reference/entities/cart","1.Frontend/99.api-reference/01.entities/4.cart",{"title":345,"path":346,"stem":347},"CartItem","/frontend/api-reference/entities/cart-item","1.Frontend/99.api-reference/01.entities/5.cart-item",{"title":349,"path":350,"stem":351},"Review","/frontend/api-reference/entities/review","1.Frontend/99.api-reference/01.entities/6.review",{"title":353,"path":354,"stem":355},"BreadcrumbItem","/frontend/api-reference/entities/breadcrumb-item","1.Frontend/99.api-reference/01.entities/7.breadcrumb-item",{"title":357,"path":358,"stem":359},"MenuItem","/frontend/api-reference/entities/menu-item","1.Frontend/99.api-reference/01.entities/8.menu-item",{"title":361,"path":362,"stem":363},"BlogPost","/frontend/api-reference/entities/blog-post","1.Frontend/99.api-reference/01.entities/9.blog-post",{"title":184,"path":365,"stem":366},"/frontend/api-reference/page-types","1.Frontend/99.api-reference/02.page-types",{"title":368,"path":369,"stem":370,"children":371,"page":55},"Common Types","/frontend/api-reference/common-types","1.Frontend/99.api-reference/03.common-types",[372,376,380,384,388],{"title":373,"path":374,"stem":375},"Link","/frontend/api-reference/common-types/link","1.Frontend/99.api-reference/03.common-types/1.link",{"title":377,"path":378,"stem":379},"Media","/frontend/api-reference/common-types/media","1.Frontend/99.api-reference/03.common-types/2.media",{"title":381,"path":382,"stem":383},"Money","/frontend/api-reference/common-types/money","1.Frontend/99.api-reference/03.common-types/3.money",{"title":385,"path":386,"stem":387},"UnitPrice","/frontend/api-reference/common-types/unit-price","1.Frontend/99.api-reference/03.common-types/4.unit-price",{"title":389,"path":390,"stem":391},"Measurement","/frontend/api-reference/common-types/measurement","1.Frontend/99.api-reference/03.common-types/5.measurement",{"title":393,"path":394,"stem":395,"children":396,"page":55},"Ecommerce","/frontend/api-reference/ecommerce","1.Frontend/99.api-reference/10.ecommerce",[397,400,404],{"title":270,"path":398,"stem":399},"/frontend/api-reference/ecommerce/actions","1.Frontend/99.api-reference/10.ecommerce/1.actions",{"title":401,"path":402,"stem":403},"Queries","/frontend/api-reference/ecommerce/queries","1.Frontend/99.api-reference/10.ecommerce/2.queries",{"title":405,"path":406,"stem":407},"Errors","/frontend/api-reference/ecommerce/errors","1.Frontend/99.api-reference/10.ecommerce/3.errors",{"title":409,"path":410,"stem":411,"children":412,"page":55},"Newsletter","/frontend/api-reference/newsletter","1.Frontend/99.api-reference/11.newsletter",[413],{"title":270,"path":414,"stem":415},"/frontend/api-reference/newsletter/actions","1.Frontend/99.api-reference/11.newsletter/1.actions",{"title":417,"path":418,"stem":419,"children":420,"page":55},"Blog","/frontend/api-reference/blog","1.Frontend/99.api-reference/12.blog",[421,424],{"title":401,"path":422,"stem":423},"/frontend/api-reference/blog/queries","1.Frontend/99.api-reference/12.blog/1.queries",{"title":405,"path":425,"stem":426},"/frontend/api-reference/blog/errors","1.Frontend/99.api-reference/12.blog/2.errors",{"title":428,"path":429,"stem":430,"children":431,"page":55},"Suggested Search","/frontend/api-reference/suggested-search","1.Frontend/99.api-reference/13.suggested-search",[432],{"title":401,"path":433,"stem":434},"/frontend/api-reference/suggested-search/queries","1.Frontend/99.api-reference/13.suggested-search/1.queries",{"title":204,"path":436,"stem":437,"children":438,"page":55},"/frontend/api-reference/tracking","1.Frontend/99.api-reference/14.tracking",[439],{"title":270,"path":440,"stem":441},"/frontend/api-reference/tracking/actions","1.Frontend/99.api-reference/14.tracking/1.actions",{"title":443,"path":444,"stem":445,"children":446},"Apps","/apps","2.Apps/0.index",[447,448,502,575],{"title":443,"path":444,"stem":445},{"title":449,"path":450,"stem":451,"children":452},"App Development","/apps/app-development","2.Apps/app-development/0.index",[453,454,458,462,466,470,474,478,482,486,490,494,498],{"title":449,"path":450,"stem":451},{"title":455,"path":456,"stem":457},"App Configuration","/apps/app-development/app-configuration","2.Apps/app-development/app-configuration",{"title":459,"path":460,"stem":461},"App Starter","/apps/app-development/app-starter","2.Apps/app-development/app-starter",{"title":463,"path":464,"stem":465},"Best Practice","/apps/app-development/best-practice","2.Apps/app-development/best-practice",{"title":467,"path":468,"stem":469},"Block Definitions","/apps/app-development/block-definitions","2.Apps/app-development/block-definitions",{"title":471,"path":472,"stem":473},"Coding Standards","/apps/app-development/coding-standards","2.Apps/app-development/coding-standards",{"title":475,"path":476,"stem":477},"Consent Adapters","/apps/app-development/consent-adapters","2.Apps/app-development/consent-adapters",{"title":479,"path":480,"stem":481},"Consuming Query Fields","/apps/app-development/consuming-query-fields","2.Apps/app-development/consuming-query-fields",{"title":483,"path":484,"stem":485},"Implementation Overview","/apps/app-development/implementation-overview","2.Apps/app-development/implementation-overview",{"title":487,"path":488,"stem":489},"Platform Dependencies","/apps/app-development/platform-dependencies","2.Apps/app-development/platform-dependencies",{"title":491,"path":492,"stem":493},"Schema Fields","/apps/app-development/schema-fields","2.Apps/app-development/schema-fields",{"title":495,"path":496,"stem":497},"Section Definitions","/apps/app-development/section-definitions","2.Apps/app-development/section-definitions",{"title":499,"path":500,"stem":501},"Studio Icons","/apps/app-development/studio-icons","2.Apps/app-development/studio-icons",{"title":503,"path":504,"stem":505,"children":506,"page":55},"App Docs","/apps/app-docs","2.Apps/app-docs",[507,511,515,519,523,527,531,535,539,543,547,551,555,559,563,567,571],{"title":508,"path":509,"stem":510},"Adobe Commerce","/apps/app-docs/adobe-commerce","2.Apps/app-docs/adobe-commerce",{"title":512,"path":513,"stem":514},"B2Bsellers","/apps/app-docs/b2bsellers","2.Apps/app-docs/b2bsellers",{"title":516,"path":517,"stem":518},"Battery Included","/apps/app-docs/battery-included","2.Apps/app-docs/battery-included",{"title":520,"path":521,"stem":522},"CCM19","/apps/app-docs/ccm19","2.Apps/app-docs/ccm19",{"title":524,"path":525,"stem":526},"Cookiebot","/apps/app-docs/cookiebot","2.Apps/app-docs/cookiebot",{"title":528,"path":529,"stem":530},"Google Tag Manager (GTM)","/apps/app-docs/gtm","2.Apps/app-docs/gtm",{"title":532,"path":533,"stem":534},"Hygraph","/apps/app-docs/hygraph","2.Apps/app-docs/hygraph",{"title":536,"path":537,"stem":538},"Nimstrata Google Retail API","/apps/app-docs/nimstrata","2.Apps/app-docs/nimstrata",{"title":540,"path":541,"stem":542},"Pimcore","/apps/app-docs/pimcore","2.Apps/app-docs/pimcore",{"title":544,"path":545,"stem":546},"Commercetools","/apps/app-docs/commercetools","2.apps/app-docs/commercetools",{"title":548,"path":549,"stem":550},"Emporix","/apps/app-docs/emporix","2.apps/app-docs/emporix",{"title":552,"path":553,"stem":554},"Klaviyo","/apps/app-docs/klaviyo","2.apps/app-docs/klaviyo",{"title":556,"path":557,"stem":558},"OXID eShop","/apps/app-docs/oxid","2.apps/app-docs/oxid",{"title":560,"path":561,"stem":562},"Shopify","/apps/app-docs/shopify","2.apps/app-docs/shopify",{"title":564,"path":565,"stem":566},"Shopware","/apps/app-docs/shopware","2.apps/app-docs/shopware",{"title":568,"path":569,"stem":570},"Vercel Analytics","/apps/app-docs/vercel-analytics","2.apps/app-docs/vercel-analytics",{"title":572,"path":573,"stem":574},"Vercel Speed Insights","/apps/app-docs/vercel-speed-insights","2.apps/app-docs/vercel-speed-insights",{"title":576,"path":577,"stem":578,"children":579,"page":55},"Essentials","/apps/essentials","2.Apps/essentials",[580,584,588],{"title":581,"path":582,"stem":583},"Legal","/apps/essentials/legal","2.Apps/essentials/legal",{"title":585,"path":586,"stem":587},"Mailer","/apps/essentials/mailer","2.Apps/essentials/mailer",{"title":212,"path":589,"stem":590},"/apps/essentials/seo","2.Apps/essentials/seo",{"title":592,"path":593,"stem":594,"children":595},"Laioutr UI","/laioutr-ui","3.laioutr-ui/0.index",[596,597,621,627,633,739,745,751,805,827,880],{"title":592,"path":593,"stem":594},{"title":5,"path":598,"stem":599,"children":600},"/laioutr-ui/getting-started","3.laioutr-ui/01.getting-started/0.index",[601,602,606,610,614,618],{"title":5,"path":598,"stem":599},{"title":603,"path":604,"stem":605},"Browser support","/laioutr-ui/getting-started/browser-support","3.laioutr-ui/01.getting-started/1.browser-support",{"title":607,"path":608,"stem":609},"Common Data","/laioutr-ui/getting-started/common-data","3.laioutr-ui/01.getting-started/99.common-data",{"title":611,"path":612,"stem":613},"Figma Kit","/laioutr-ui/getting-started/figma-kit","3.laioutr-ui/01.getting-started/figma-kit",{"title":615,"path":616,"stem":617},"Theming","/laioutr-ui/getting-started/theming","3.laioutr-ui/01.getting-started/theming",{"title":208,"path":619,"stem":620},"/laioutr-ui/getting-started/z-ordering","3.laioutr-ui/01.getting-started/z-ordering",{"title":622,"path":623,"stem":624,"children":625},"B2B","/laioutr-ui/b2b","3.laioutr-ui/b2b/0.index",[626],{"title":622,"path":623,"stem":624},{"title":628,"path":629,"stem":630,"children":631},"Booking","/laioutr-ui/booking","3.laioutr-ui/booking/0.index",[632],{"title":628,"path":629,"stem":630},{"title":634,"path":635,"stem":636,"children":637},"CMS","/laioutr-ui/cms","3.laioutr-ui/cms/0.index",[638,639,664,672,684,693,714],{"title":634,"path":635,"stem":636},{"title":640,"path":641,"stem":642,"children":643,"page":55},"Banner","/laioutr-ui/cms/banner","3.laioutr-ui/cms/banner",[644,648,652,656,660],{"title":645,"path":646,"stem":647},"Banner Slider","/laioutr-ui/cms/banner/bannerslider","3.laioutr-ui/cms/banner/BannerSlider",{"title":649,"path":650,"stem":651},"Basic Banner with Image and Text","/laioutr-ui/cms/banner/basicbannerwithimageandtext","3.laioutr-ui/cms/banner/BasicBannerWithImageAndText",{"title":653,"path":654,"stem":655},"Content with Image and Text","/laioutr-ui/cms/banner/contentwithimageandtext","3.laioutr-ui/cms/banner/ContentWithImageAndText",{"title":657,"path":658,"stem":659},"Content With Text Columns","/laioutr-ui/cms/banner/contentwithtextcolumns","3.laioutr-ui/cms/banner/ContentWithTextColumns",{"title":661,"path":662,"stem":663},"USP Banner","/laioutr-ui/cms/banner/uspbanner","3.laioutr-ui/cms/banner/UspBanner",{"title":417,"path":665,"stem":666,"children":667,"page":55},"/laioutr-ui/cms/blog","3.laioutr-ui/cms/blog",[668],{"title":669,"path":670,"stem":671},"Blog Post","/laioutr-ui/cms/blog/blogpost","3.laioutr-ui/cms/blog/BlogPost",{"title":409,"path":673,"stem":674,"children":675,"page":55},"/laioutr-ui/cms/newsletter","3.laioutr-ui/cms/newsletter",[676,680],{"title":677,"path":678,"stem":679},"Input for Newsletter","/laioutr-ui/cms/newsletter/inputnewsletter","3.laioutr-ui/cms/newsletter/InputNewsletter",{"title":681,"path":682,"stem":683},"Newsletter Registration","/laioutr-ui/cms/newsletter/newsletterregistration","3.laioutr-ui/cms/newsletter/NewsletterRegistration",{"title":685,"path":686,"stem":687,"children":688,"page":55},"Quotes","/laioutr-ui/cms/quotes","3.laioutr-ui/cms/quotes",[689],{"title":690,"path":691,"stem":692},"Personal Quote with Text and Image","/laioutr-ui/cms/quotes/personalquote","3.laioutr-ui/cms/quotes/PersonalQuote",{"title":694,"path":695,"stem":696,"children":697,"page":55},"Reviews","/laioutr-ui/cms/reviews","3.laioutr-ui/cms/reviews",[698,702,706,710],{"title":699,"path":700,"stem":701},"Quote Card","/laioutr-ui/cms/reviews/quotecard","3.laioutr-ui/cms/reviews/QuoteCard",{"title":703,"path":704,"stem":705},"Rating","/laioutr-ui/cms/reviews/rating","3.laioutr-ui/cms/reviews/Rating",{"title":707,"path":708,"stem":709},"Rating Form","/laioutr-ui/cms/reviews/ratingform","3.laioutr-ui/cms/reviews/RatingForm",{"title":711,"path":712,"stem":713},"Review Section","/laioutr-ui/cms/reviews/reviewsection","3.laioutr-ui/cms/reviews/ReviewSection",{"title":715,"path":716,"stem":717,"children":718,"page":55},"Slider","/laioutr-ui/cms/slider","3.laioutr-ui/cms/slider",[719,723,727,731,735],{"title":720,"path":721,"stem":722},"Hero Slider","/laioutr-ui/cms/slider/heroslider","3.laioutr-ui/cms/slider/HeroSlider",{"title":724,"path":725,"stem":726},"Logo Slider","/laioutr-ui/cms/slider/logoslider","3.laioutr-ui/cms/slider/LogoSlider",{"title":728,"path":729,"stem":730},"Swiper Navigation with Bullets","/laioutr-ui/cms/slider/swipernavigationbullets","3.laioutr-ui/cms/slider/SwiperNavigationBullets",{"title":732,"path":733,"stem":734},"Swiper Navigation Compact","/laioutr-ui/cms/slider/swipernavigationcompact","3.laioutr-ui/cms/slider/SwiperNavigationCompact",{"title":736,"path":737,"stem":738},"Swiper Navigation with Numbers","/laioutr-ui/cms/slider/swipernavigationnumbers","3.laioutr-ui/cms/slider/SwiperNavigationNumbers",{"title":740,"path":741,"stem":742,"children":743},"Marketplace","/laioutr-ui/marketplace","3.laioutr-ui/marketplace/0.index",[744],{"title":740,"path":741,"stem":742},{"title":746,"path":747,"stem":748,"children":749},"Multichannel","/laioutr-ui/multichannel","3.laioutr-ui/multichannel/0.index",[750],{"title":746,"path":747,"stem":748},{"title":752,"path":753,"stem":754,"children":755},"Navigation & Headers","/laioutr-ui/navigation","3.laioutr-ui/navigation/0.index",[756,757,761,765,769,773,777,781,785,789,793,797,801],{"title":752,"path":753,"stem":754},{"title":758,"path":759,"stem":760},"Basic Header","/laioutr-ui/navigation/basicheader","3.laioutr-ui/navigation/BasicHeader",{"title":762,"path":763,"stem":764},"Color Mode Switch","/laioutr-ui/navigation/colormodeswitch","3.laioutr-ui/navigation/ColorModeSwitch",{"title":766,"path":767,"stem":768},"Desktop Side By Side Menu","/laioutr-ui/navigation/desktopsidebysidemenu","3.laioutr-ui/navigation/DesktopSideBySideMenu",{"title":770,"path":771,"stem":772},"Header with Text Links","/laioutr-ui/navigation/headerwithtextlinks","3.laioutr-ui/navigation/HeaderWithTextLinks",{"title":774,"path":775,"stem":776},"Locale Select","/laioutr-ui/navigation/localeselect","3.laioutr-ui/navigation/LocaleSelect",{"title":778,"path":779,"stem":780},"Mega Menu Desktop","/laioutr-ui/navigation/megamenudesktop","3.laioutr-ui/navigation/MegaMenuDesktop",{"title":782,"path":783,"stem":784},"Mobile Menu","/laioutr-ui/navigation/mobilemenu","3.laioutr-ui/navigation/MobileMenu",{"title":786,"path":787,"stem":788},"Search Overlay Input","/laioutr-ui/navigation/searchoverlayinput","3.laioutr-ui/navigation/SearchOverlayInput",{"title":790,"path":791,"stem":792},"Shop Header","/laioutr-ui/navigation/shopheader","3.laioutr-ui/navigation/ShopHeader",{"title":794,"path":795,"stem":796},"Top Bar","/laioutr-ui/navigation/topbar","3.laioutr-ui/navigation/TopBar",{"title":798,"path":799,"stem":800},"Breadcrumb","/laioutr-ui/navigation/breadcrumb","3.laioutr-ui/navigation/breadcrumb",{"title":802,"path":803,"stem":804},"Footer","/laioutr-ui/navigation/footer","3.laioutr-ui/navigation/footer",{"title":806,"path":807,"stem":808,"children":809},"SaaS","/laioutr-ui/saas","3.laioutr-ui/saas/0.index",[810,811,815,819,823],{"title":806,"path":807,"stem":808},{"title":812,"path":813,"stem":814},"Billing Cycle Switch","/laioutr-ui/saas/billingcycleswitch","3.laioutr-ui/saas/BillingCycleSwitch",{"title":816,"path":817,"stem":818},"Pricing Plan","/laioutr-ui/saas/pricingplan","3.laioutr-ui/saas/pricingplan",{"title":820,"path":821,"stem":822},"Pricing Plans","/laioutr-ui/saas/pricingplans","3.laioutr-ui/saas/pricingplans",{"title":824,"path":825,"stem":826},"Pricing Table","/laioutr-ui/saas/pricingtable","3.laioutr-ui/saas/pricingtable",{"title":828,"path":829,"stem":830,"children":831},"Shop","/laioutr-ui/shop","3.laioutr-ui/shop/0.index",[832,833,837,841,845,849,853,857,861,865,869,873,877],{"title":828,"path":829,"stem":830},{"title":834,"path":835,"stem":836},"Cards Container","/laioutr-ui/shop/cardscontainer","3.laioutr-ui/shop/CardsContainer",{"title":838,"path":839,"stem":840},"Grid Card Content","/laioutr-ui/shop/gridcardcontent","3.laioutr-ui/shop/GridCardContent",{"title":842,"path":843,"stem":844},"Grid Card Text Content","/laioutr-ui/shop/gridcardtextcontent","3.laioutr-ui/shop/GridCardTextContent",{"title":846,"path":847,"stem":848},"Inpage Navigation Basic Grid","/laioutr-ui/shop/inpagenavigationbasicgrid","3.laioutr-ui/shop/InpageNavigationBasicGrid",{"title":850,"path":851,"stem":852},"Inpage Navigation Basic Slider","/laioutr-ui/shop/inpagenavigationbasicslider","3.laioutr-ui/shop/InpageNavigationBasicSlider",{"title":854,"path":855,"stem":856},"Inpage Navigation Big Grid","/laioutr-ui/shop/inpagenavigationbiggrid","3.laioutr-ui/shop/InpageNavigationBigGrid",{"title":858,"path":859,"stem":860},"Inpage Navigation Big Slider","/laioutr-ui/shop/inpagenavigationbigslider","3.laioutr-ui/shop/InpageNavigationBigSlider",{"title":862,"path":863,"stem":864},"Inpage Navigation Compact Grid","/laioutr-ui/shop/inpagenavigationcompactgrid","3.laioutr-ui/shop/InpageNavigationCompactGrid",{"title":866,"path":867,"stem":868},"Inpage Navigation Compact Slider","/laioutr-ui/shop/inpagenavigationcompactslider","3.laioutr-ui/shop/InpageNavigationCompactSlider",{"title":870,"path":871,"stem":872},"Product Card","/laioutr-ui/shop/productcard","3.laioutr-ui/shop/ProductCard",{"title":874,"path":875,"stem":876},"Product Slider","/laioutr-ui/shop/productslider","3.laioutr-ui/shop/ProductSlider",{"title":290,"path":878,"stem":879},"/laioutr-ui/shop/filters","3.laioutr-ui/shop/filters",{"title":881,"path":882,"stem":883,"children":884},"UI Kit","/laioutr-ui/ui-kit","3.laioutr-ui/ui-kit/0.index",[885,886,962,982,1003,1036,1057,1122],{"title":881,"path":882,"stem":883},{"title":887,"path":888,"stem":889,"children":890,"page":55},"General","/laioutr-ui/ui-kit/general","3.laioutr-ui/ui-kit/01.general",[891,895,899,903,907,911,915,919,923,927,931,935,938,942,946,950,954,958],{"title":892,"path":893,"stem":894},"Accordion","/laioutr-ui/ui-kit/general/accordion","3.laioutr-ui/ui-kit/01.general/Accordion",{"title":896,"path":897,"stem":898},"Avatar","/laioutr-ui/ui-kit/general/avatar","3.laioutr-ui/ui-kit/01.general/Avatar",{"title":900,"path":901,"stem":902},"Backdrop","/laioutr-ui/ui-kit/general/backdrop","3.laioutr-ui/ui-kit/01.general/Backdrop",{"title":904,"path":905,"stem":906},"Color Swatch","/laioutr-ui/ui-kit/general/colorswatch","3.laioutr-ui/ui-kit/01.general/ColorSwatch",{"title":908,"path":909,"stem":910},"Dropdown Menu","/laioutr-ui/ui-kit/general/dropdownmenu","3.laioutr-ui/ui-kit/01.general/DropdownMenu",{"title":912,"path":913,"stem":914},"Edge Glow","/laioutr-ui/ui-kit/general/edgeglow","3.laioutr-ui/ui-kit/01.general/EdgeGlow",{"title":916,"path":917,"stem":918},"Empty State","/laioutr-ui/ui-kit/general/emptystate","3.laioutr-ui/ui-kit/01.general/EmptyState",{"title":920,"path":921,"stem":922},"Icon","/laioutr-ui/ui-kit/general/icon","3.laioutr-ui/ui-kit/01.general/Icon",{"title":924,"path":925,"stem":926},"Image Contrast Overlay","/laioutr-ui/ui-kit/general/imagecontrastoverlay","3.laioutr-ui/ui-kit/01.general/ImageContrastOverlay",{"title":928,"path":929,"stem":930},"Image Variant Thumbnail","/laioutr-ui/ui-kit/general/imagevariantthumbnail","3.laioutr-ui/ui-kit/01.general/ImageVariantThumbnail",{"title":932,"path":933,"stem":934},"Loading Spinner","/laioutr-ui/ui-kit/general/loadingspinner","3.laioutr-ui/ui-kit/01.general/LoadingSpinner",{"title":377,"path":936,"stem":937},"/laioutr-ui/ui-kit/general/media","3.laioutr-ui/ui-kit/01.general/Media",{"title":939,"path":940,"stem":941},"Navigation Bullets","/laioutr-ui/ui-kit/general/navigationbullets","3.laioutr-ui/ui-kit/01.general/NavigationBullets",{"title":943,"path":944,"stem":945},"Placeholder","/laioutr-ui/ui-kit/general/placeholder","3.laioutr-ui/ui-kit/01.general/Placeholder",{"title":947,"path":948,"stem":949},"Progress Bar","/laioutr-ui/ui-kit/general/progressbar","3.laioutr-ui/ui-kit/01.general/ProgressBar",{"title":951,"path":952,"stem":953},"Scrollbar","/laioutr-ui/ui-kit/general/scrollbar","3.laioutr-ui/ui-kit/01.general/Scrollbar",{"title":955,"path":956,"stem":957},"Swatch Preview","/laioutr-ui/ui-kit/general/swatchpreview","3.laioutr-ui/ui-kit/01.general/SwatchPreview",{"title":959,"path":960,"stem":961},"Thumbnail","/laioutr-ui/ui-kit/general/thumbnail","3.laioutr-ui/ui-kit/01.general/Thumbnail",{"title":963,"path":964,"stem":965,"children":966,"page":55},"Typography","/laioutr-ui/ui-kit/typography","3.laioutr-ui/ui-kit/02.typography",[967,971,974,978],{"title":968,"path":969,"stem":970},"Icon List","/laioutr-ui/ui-kit/typography/iconlist","3.laioutr-ui/ui-kit/02.typography/IconList",{"title":373,"path":972,"stem":973},"/laioutr-ui/ui-kit/typography/link","3.laioutr-ui/ui-kit/02.typography/Link",{"title":975,"path":976,"stem":977},"Rich Content","/laioutr-ui/ui-kit/typography/richcontent","3.laioutr-ui/ui-kit/02.typography/RichContent",{"title":979,"path":980,"stem":981},"Text","/laioutr-ui/ui-kit/typography/text","3.laioutr-ui/ui-kit/02.typography/Text",{"title":983,"path":984,"stem":985,"children":986,"page":55},"Layout","/laioutr-ui/ui-kit/layout","3.laioutr-ui/ui-kit/03.layout",[987,991,995,999],{"title":988,"path":989,"stem":990},"Grid Fill","/laioutr-ui/ui-kit/layout/gridfill","3.laioutr-ui/ui-kit/03.layout/GridFill",{"title":992,"path":993,"stem":994},"Grid Masonry","/laioutr-ui/ui-kit/layout/gridmasonry","3.laioutr-ui/ui-kit/03.layout/GridMasonry",{"title":996,"path":997,"stem":998},"Scroll Area","/laioutr-ui/ui-kit/layout/scrollarea","3.laioutr-ui/ui-kit/03.layout/ScrollArea",{"title":1000,"path":1001,"stem":1002},"Separator","/laioutr-ui/ui-kit/layout/separator","3.laioutr-ui/ui-kit/03.layout/Separator",{"title":1004,"path":1005,"stem":1006,"children":1007,"page":55},"Content","/laioutr-ui/ui-kit/content","3.laioutr-ui/ui-kit/04.content",[1008,1012,1016,1020,1024,1028,1032],{"title":1009,"path":1010,"stem":1011},"Card","/laioutr-ui/ui-kit/content/card","3.laioutr-ui/ui-kit/04.content/Card",{"title":1013,"path":1014,"stem":1015},"CTA Banner Basic","/laioutr-ui/ui-kit/content/ctabannerbasic","3.laioutr-ui/ui-kit/04.content/CtaBannerBasic",{"title":1017,"path":1018,"stem":1019},"CTA Banner Integrated","/laioutr-ui/ui-kit/content/ctabannerintegrated","3.laioutr-ui/ui-kit/04.content/CtaBannerIntegrated",{"title":1021,"path":1022,"stem":1023},"CTA Banner Showcase","/laioutr-ui/ui-kit/content/ctabannershowcase","3.laioutr-ui/ui-kit/04.content/CtaBannerShowcase",{"title":1025,"path":1026,"stem":1027},"Link Tile Basic","/laioutr-ui/ui-kit/content/linktilebasic","3.laioutr-ui/ui-kit/04.content/LinkTileBasic",{"title":1029,"path":1030,"stem":1031},"Link Tile Big","/laioutr-ui/ui-kit/content/linktilebig","3.laioutr-ui/ui-kit/04.content/LinkTileBig",{"title":1033,"path":1034,"stem":1035},"Link Tile Compact","/laioutr-ui/ui-kit/content/linktilecompact","3.laioutr-ui/ui-kit/04.content/LinkTileCompact",{"title":1037,"path":1038,"stem":1039,"children":1040,"page":55},"Surfaces","/laioutr-ui/ui-kit/surfaces","3.laioutr-ui/ui-kit/05.surfaces",[1041,1045,1049,1053],{"title":1042,"path":1043,"stem":1044},"Alert Dialog","/laioutr-ui/ui-kit/surfaces/alertdialog","3.laioutr-ui/ui-kit/05.surfaces/AlertDialog",{"title":1046,"path":1047,"stem":1048},"Sheet","/laioutr-ui/ui-kit/surfaces/sheet","3.laioutr-ui/ui-kit/05.surfaces/Sheet",{"title":1050,"path":1051,"stem":1052},"Toast","/laioutr-ui/ui-kit/surfaces/toast","3.laioutr-ui/ui-kit/05.surfaces/Toast",{"title":1054,"path":1055,"stem":1056},"Toaster","/laioutr-ui/ui-kit/surfaces/toaster","3.laioutr-ui/ui-kit/05.surfaces/Toaster",{"title":1058,"path":1059,"stem":1060,"children":1061,"page":55},"Form","/laioutr-ui/ui-kit/form","3.laioutr-ui/ui-kit/06.form",[1062,1066,1070,1074,1078,1082,1086,1090,1094,1098,1102,1106,1110,1114,1118],{"title":1063,"path":1064,"stem":1065},"Button","/laioutr-ui/ui-kit/form/button","3.laioutr-ui/ui-kit/06.form/Button",{"title":1067,"path":1068,"stem":1069},"Checkbox","/laioutr-ui/ui-kit/form/checkbox","3.laioutr-ui/ui-kit/06.form/Checkbox",{"title":1071,"path":1072,"stem":1073},"Field","/laioutr-ui/ui-kit/form/field","3.laioutr-ui/ui-kit/06.form/Field",{"title":1075,"path":1076,"stem":1077},"Input","/laioutr-ui/ui-kit/form/input","3.laioutr-ui/ui-kit/06.form/Input",{"title":1079,"path":1080,"stem":1081},"Input Checkbox","/laioutr-ui/ui-kit/form/inputcheckbox","3.laioutr-ui/ui-kit/06.form/InputCheckbox",{"title":1083,"path":1084,"stem":1085},"Password Input","/laioutr-ui/ui-kit/form/inputpassword","3.laioutr-ui/ui-kit/06.form/InputPassword",{"title":1087,"path":1088,"stem":1089},"Search Input","/laioutr-ui/ui-kit/form/inputsearch","3.laioutr-ui/ui-kit/06.form/InputSearch",{"title":1091,"path":1092,"stem":1093},"Label","/laioutr-ui/ui-kit/form/label","3.laioutr-ui/ui-kit/06.form/Label",{"title":1095,"path":1096,"stem":1097},"Load More","/laioutr-ui/ui-kit/form/loadmore","3.laioutr-ui/ui-kit/06.form/LoadMore",{"title":1099,"path":1100,"stem":1101},"Pagination","/laioutr-ui/ui-kit/form/pagination","3.laioutr-ui/ui-kit/06.form/Pagination",{"title":1103,"path":1104,"stem":1105},"Quantity Picker","/laioutr-ui/ui-kit/form/quantitypicker","3.laioutr-ui/ui-kit/06.form/QuantityPicker",{"title":1107,"path":1108,"stem":1109},"Radio Group","/laioutr-ui/ui-kit/form/radioselect","3.laioutr-ui/ui-kit/06.form/RadioSelect",{"title":1111,"path":1112,"stem":1113},"Select","/laioutr-ui/ui-kit/form/select","3.laioutr-ui/ui-kit/06.form/Select",{"title":1115,"path":1116,"stem":1117},"Switch","/laioutr-ui/ui-kit/form/switch","3.laioutr-ui/ui-kit/06.form/Switch",{"title":1119,"path":1120,"stem":1121},"Variant Select Button","/laioutr-ui/ui-kit/form/variantselectbutton","3.laioutr-ui/ui-kit/06.form/VariantSelectButton",{"title":1123,"path":1124,"stem":1125,"children":1126,"page":55},"Indicators","/laioutr-ui/ui-kit/indicators","3.laioutr-ui/ui-kit/07.indicators",[1127,1131,1135,1139,1143,1147,1151,1155],{"title":1128,"path":1129,"stem":1130},"Badge","/laioutr-ui/ui-kit/indicators/badge","3.laioutr-ui/ui-kit/07.indicators/Badge",{"title":1132,"path":1133,"stem":1134},"Caption Flag","/laioutr-ui/ui-kit/indicators/captionflag","3.laioutr-ui/ui-kit/07.indicators/CaptionFlag",{"title":1136,"path":1137,"stem":1138},"Category Node Flag","/laioutr-ui/ui-kit/indicators/categorynodeflag","3.laioutr-ui/ui-kit/07.indicators/CategoryNodeFlag",{"title":1140,"path":1141,"stem":1142},"Product Tile Flag","/laioutr-ui/ui-kit/indicators/producttileflag","3.laioutr-ui/ui-kit/07.indicators/ProductTileFlag",{"title":1144,"path":1145,"stem":1146},"Rating Summary","/laioutr-ui/ui-kit/indicators/ratingsummary","3.laioutr-ui/ui-kit/07.indicators/RatingSummary",{"title":1148,"path":1149,"stem":1150},"Rating Summary Small","/laioutr-ui/ui-kit/indicators/ratingsummarysmall","3.laioutr-ui/ui-kit/07.indicators/RatingSummarySmall",{"title":1152,"path":1153,"stem":1154},"Savings Badge","/laioutr-ui/ui-kit/indicators/savingsbadge","3.laioutr-ui/ui-kit/07.indicators/SavingsBadge",{"title":1156,"path":1157,"stem":1158},"Stars Rating","/laioutr-ui/ui-kit/indicators/starsrating","3.laioutr-ui/ui-kit/07.indicators/StarsRating",{"title":1160,"path":1161,"stem":1162,"children":1163},"Hosting","/hosting","4.hosting/0.index",[1164,1165,1171,1201],{"title":1160,"path":1161,"stem":1162},{"title":1166,"path":1167,"stem":1168,"children":1169},"Laioutr Cloud","/hosting/laioutr-cloud","4.hosting/0.laioutr-cloud/0.index",[1170],{"title":1166,"path":1167,"stem":1168},{"title":1172,"path":1173,"stem":1174,"children":1175},"Hosting Adapter","/hosting/hosting-adapter","4.hosting/1.hosting-adapter/0.index",[1176,1177,1181,1185,1189,1193,1197],{"title":1172,"path":1173,"stem":1174},{"title":1178,"path":1179,"stem":1180},"AWS Adapter","/hosting/hosting-adapter/aws-adapter","4.hosting/1.hosting-adapter/aws-adapter",{"title":1182,"path":1183,"stem":1184},"Azure Adapter","/hosting/hosting-adapter/azure-adapter","4.hosting/1.hosting-adapter/azure-adapter",{"title":1186,"path":1187,"stem":1188},"Google Adapter","/hosting/hosting-adapter/google-adapter","4.hosting/1.hosting-adapter/google-adapter",{"title":1190,"path":1191,"stem":1192},"Netlify Adapter","/hosting/hosting-adapter/netlify-adapter","4.hosting/1.hosting-adapter/netlify-adapter",{"title":1194,"path":1195,"stem":1196},"Scale Commerce Adapter","/hosting/hosting-adapter/scale-commerce-adapter","4.hosting/1.hosting-adapter/scale-commerce-adapter",{"title":1198,"path":1199,"stem":1200},"Vercel Adapter","/hosting/hosting-adapter/vercel-adapter","4.hosting/1.hosting-adapter/vercel-adapter",{"title":1202,"path":1203,"stem":1204,"children":1205},"Bring Your Own Server (BYOS)","/hosting/bring-your-own-server-byos","4.hosting/2.bring-your-own-server-byos/0.index",[1206,1207,1211,1215,1219,1223,1227],{"title":1202,"path":1203,"stem":1204},{"title":1208,"path":1209,"stem":1210},"BYOS Agent","/hosting/bring-your-own-server-byos/byos-agent","4.hosting/2.bring-your-own-server-byos/byos-agent",{"title":1212,"path":1213,"stem":1214},"Changelog","/hosting/bring-your-own-server-byos/changelog","4.hosting/2.bring-your-own-server-byos/changelog",{"title":1216,"path":1217,"stem":1218},"DevOps Components","/hosting/bring-your-own-server-byos/devops","4.hosting/2.bring-your-own-server-byos/devops",{"title":1220,"path":1221,"stem":1222},"Infrastructure Requirements","/hosting/bring-your-own-server-byos/infrastructure","4.hosting/2.bring-your-own-server-byos/infrastructure",{"title":1224,"path":1225,"stem":1226},"Software Requirements","/hosting/bring-your-own-server-byos/software","4.hosting/2.bring-your-own-server-byos/software",{"title":1228,"path":1229,"stem":1230},"Webhook Configuration","/hosting/bring-your-own-server-byos/webhook-config","4.hosting/2.bring-your-own-server-byos/webhook-config",{"title":1232,"path":1233,"stem":1234,"children":1235},"Checkout","/checkout","5.Checkout/0.index",[1236],{"title":1232,"path":1233,"stem":1234},{"title":1238,"path":1239,"stem":1240,"children":1241},"Larry AI","/larry-ai","6.Larry-AI/0.index",[1242],{"title":1238,"path":1239,"stem":1240},{"title":611,"path":1244,"stem":1245,"children":1246},"/figma-kit","7.Figma Kit/0.index",[1247,1248,1264],{"title":611,"path":1244,"stem":1245},{"title":121,"path":1249,"stem":1250,"children":1251,"page":55},"/figma-kit/introduction","7.Figma Kit/1.Introduction",[1252,1256,1260],{"title":1253,"path":1254,"stem":1255},"How to Start","/figma-kit/introduction/howtostart","7.Figma Kit/1.Introduction/0.howtostart",{"title":1257,"path":1258,"stem":1259},"Figma Variables","/figma-kit/introduction/figma-variables","7.Figma Kit/1.Introduction/figma-variables",{"title":1261,"path":1262,"stem":1263},"Library Connections","/figma-kit/introduction/library-connections","7.Figma Kit/1.Introduction/library-connections",{"title":1265,"path":1266,"stem":1267,"children":1268,"page":55},"Kits","/figma-kit/kits","7.Figma Kit/Kits",[1269,1272,1275,1278,1282,1285,1289,1293,1296,1299],{"title":622,"path":1270,"stem":1271},"/figma-kit/kits/b2b","7.Figma Kit/Kits/b2b",{"title":628,"path":1273,"stem":1274},"/figma-kit/kits/booking","7.Figma Kit/Kits/booking",{"title":634,"path":1276,"stem":1277},"/figma-kit/kits/cms","7.Figma Kit/Kits/cms",{"title":1279,"path":1280,"stem":1281},"Inpage Navigation","/figma-kit/kits/inpage-navigation","7.Figma Kit/Kits/inpage-navigation",{"title":740,"path":1283,"stem":1284},"/figma-kit/kits/marketplace","7.Figma Kit/Kits/marketplace",{"title":1286,"path":1287,"stem":1288},"Retail & Multichannel","/figma-kit/kits/multichannel","7.Figma Kit/Kits/multichannel",{"title":1290,"path":1291,"stem":1292},"Navigation","/figma-kit/kits/navigation","7.Figma Kit/Kits/navigation",{"title":806,"path":1294,"stem":1295},"/figma-kit/kits/saas","7.Figma Kit/Kits/saas",{"title":828,"path":1297,"stem":1298},"/figma-kit/kits/shop","7.Figma Kit/Kits/shop",{"title":881,"path":1300,"stem":1301},"/figma-kit/kits/ui-kit","7.Figma Kit/Kits/ui-kit",{"title":1303,"path":1304,"stem":1305,"children":1306},"Cockpit","/cockpit","8.Cockpit/0.index",[1307,1308,1338,1355,1372],{"title":1303,"path":1304,"stem":1305},{"title":150,"path":1309,"stem":1310,"children":1311,"page":55},"/cockpit/features","8.Cockpit/1.Features",[1312,1315,1319,1323,1327,1330,1334],{"title":443,"path":1313,"stem":1314},"/cockpit/features/apps","8.Cockpit/1.Features/apps",{"title":1316,"path":1317,"stem":1318},"Content (Collections)","/cockpit/features/content-collections","8.Cockpit/1.Features/content-collections",{"title":1320,"path":1321,"stem":1322},"Deployments","/cockpit/features/deployments","8.Cockpit/1.Features/deployments",{"title":1324,"path":1325,"stem":1326},"Markets","/cockpit/features/markets","8.Cockpit/1.Features/markets",{"title":192,"path":1328,"stem":1329},"/cockpit/features/redirects","8.Cockpit/1.Features/redirects",{"title":1331,"path":1332,"stem":1333},"Studio","/cockpit/features/studio","8.Cockpit/1.Features/studio",{"title":1335,"path":1336,"stem":1337},"Translations","/cockpit/features/translations","8.Cockpit/1.Features/translations",{"title":1339,"path":1340,"stem":1341,"children":1342,"page":55},"Project Settings","/cockpit/project-settings","8.Cockpit/2.Project-Settings",[1343,1347,1351],{"title":1344,"path":1345,"stem":1346},"Delete a project","/cockpit/project-settings/delete-project","8.Cockpit/2.Project-Settings/delete-project",{"title":1348,"path":1349,"stem":1350},"NPM","/cockpit/project-settings/npm","8.Cockpit/2.Project-Settings/npm",{"title":1352,"path":1353,"stem":1354},"Project secret key","/cockpit/project-settings/project-secret-key","8.Cockpit/2.Project-Settings/project-secret-key",{"title":1356,"path":1357,"stem":1358,"children":1359,"page":55},"Account Settings","/cockpit/account-settings","8.Cockpit/3.Account-Settings",[1360,1364,1368],{"title":1361,"path":1362,"stem":1363},"Notifications","/cockpit/account-settings/notifications","8.Cockpit/3.Account-Settings/notifications",{"title":1365,"path":1366,"stem":1367},"Preferences","/cockpit/account-settings/preferences","8.Cockpit/3.Account-Settings/preferences",{"title":1369,"path":1370,"stem":1371},"Security","/cockpit/account-settings/security","8.Cockpit/3.Account-Settings/security",{"title":1373,"path":1374,"stem":1375,"children":1376,"page":55},"Organisation Settings","/cockpit/organisation-settings","8.Cockpit/4.Organisation-Settings",[1377,1381,1385,1389,1393,1397],{"title":1378,"path":1379,"stem":1380},"API keys","/cockpit/organisation-settings/api-keys","8.Cockpit/4.Organisation-Settings/api-keys",{"title":1382,"path":1383,"stem":1384},"Billing","/cockpit/organisation-settings/billing","8.Cockpit/4.Organisation-Settings/billing",{"title":1386,"path":1387,"stem":1388},"General settings","/cockpit/organisation-settings/general-settings","8.Cockpit/4.Organisation-Settings/general-settings",{"title":1390,"path":1391,"stem":1392},"Members","/cockpit/organisation-settings/members","8.Cockpit/4.Organisation-Settings/members",{"title":1394,"path":1395,"stem":1396},"Projects","/cockpit/organisation-settings/projects","8.Cockpit/4.Organisation-Settings/projects",{"title":1398,"path":1399,"stem":1400},"Roles","/cockpit/organisation-settings/roles","8.Cockpit/4.Organisation-Settings/roles",{"title":1402,"path":1403,"stem":1404,"children":1405},"Offering","/offering","9.Offering/0.index",[1406,1407,1439,1452,1465],{"title":1402,"path":1403,"stem":1404},{"title":1408,"path":1409,"stem":1410,"children":1411},"Products","/offering/products","9.Offering/1.Products/0.index",[1412,1413,1418,1423,1428,1434],{"title":1408,"path":1409,"stem":1410},{"title":133,"path":1414,"stem":1415,"children":1416},"/offering/products/frontend","9.Offering/1.Products/1.Frontend/0.index",[1417],{"title":133,"path":1414,"stem":1415},{"title":1303,"path":1419,"stem":1420,"children":1421},"/offering/products/cockpit","9.Offering/1.Products/2.Cockpit/0.index",[1422],{"title":1303,"path":1419,"stem":1420},{"title":1232,"path":1424,"stem":1425,"children":1426},"/offering/products/checkout","9.Offering/1.Products/3.Checkout/0.index",[1427],{"title":1232,"path":1424,"stem":1425},{"title":1429,"path":1430,"stem":1431,"children":1432},"Cloud","/offering/products/cloud","9.Offering/1.Products/4.cloud/0.index",[1433],{"title":1429,"path":1430,"stem":1431},{"title":1238,"path":1435,"stem":1436,"children":1437},"/offering/products/larry-ai","9.Offering/1.Products/5.larry-ai/0.index",[1438],{"title":1238,"path":1435,"stem":1436},{"title":1440,"path":1441,"stem":1442,"children":1443,"page":55},"Service Level Agreement","/offering/service-level-agreement","9.Offering/2.service-level-agreement",[1444,1448],{"title":1445,"path":1446,"stem":1447},"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":1449,"path":1450,"stem":1451},"Backups","/offering/service-level-agreement/backups","9.Offering/2.service-level-agreement/backups",{"title":1453,"path":1454,"stem":1455,"children":1456,"page":55},"Customer Support","/offering/customer-support","9.Offering/3.customer-support",[1457,1461],{"title":1458,"path":1459,"stem":1460},"Standard Customer Support","/offering/customer-support/standard-customer-support","9.Offering/3.customer-support/1.standard-customer-support",{"title":1462,"path":1463,"stem":1464},"Customer Support Severity Levels of Laioutr products","/offering/customer-support/maximum-serverity-levels","9.Offering/3.customer-support/maximum-serverity-levels",{"title":1466,"path":1467,"stem":1468,"children":1469,"page":55},"Compliance","/offering/compliance","9.Offering/4.Compliance",[1470],{"title":1471,"path":1472,"stem":1473},"Fair usage policy","/offering/compliance/fair-usage-policy","9.Offering/4.Compliance/fair-usage-policy",{"id":1475,"title":266,"body":1476,"description":2458,"extension":2459,"meta":2460,"navigation":1578,"path":267,"seo":2461,"sitemap":2464,"stem":268,"__hash__":2468},"docs/1.Frontend/4.Orchestr/99.recipes/userland-cache-patterns.md",{"type":1477,"value":1478,"toc":2448},"minimark",[1479,1483,1486,1494,1499,1509,1521,1858,1861,2015,2026,2030,2037,2040,2045,2048,2136,2142,2146,2149,2337,2344,2348,2351,2355,2417,2420,2424,2444],[1480,1481,1482],"p",{},"A category page issues 50 product queries that each return a variant ID. For your storefront's product page to render, each variant has to map back to its parent product, which means another API call per variant. Doing it inline blocks every category page on 50 round-trips.",[1480,1484,1485],{},"A different problem: your Shopware connector caches the storefront's currency and language IDs, but you run two Shopware instances behind the same Nuxt deployment (staging and prod, or a B2C and a B2B store). The cached \"EUR\" currency ID from one instance silently serves the other's requests, and prices come out wrong.",[1480,1487,1488,1489,1493],{},"Both are ",[1490,1491,1492],"code",{},"useUserlandCache"," problems. The first wants a write that doesn't block; the second wants entries that don't collide. Two patterns, one cache primitive.",[1495,1496,1498],"h2",{"id":1497},"background-writes-that-dont-block-the-response","Background writes that don't block the response",[1480,1500,1501,1502,1505,1506,1508],{},"When a handler wants to cache data as a side effect of its main work (a variant-to-parent-product map you happened to compute, an aggregated count you can answer cheaply), ",[1490,1503,1504],{},"await","-ing the cache write holds the response back for no functional reason. Dropping the ",[1490,1507,1504],{}," returns immediately but is unsafe on serverless runtimes: the moment the response is flushed, the runtime is free to terminate the in-flight promise.",[1480,1510,1511,1520],{},[1512,1513,1517],"a",{"href":1514,"rel":1515},"https://nitro.build/docs/tasks#waituntil",[1516],"nofollow",[1490,1518,1519],{},"event.waitUntil"," is the right tool. It tells Nitro to keep the request context alive until the passed promise resolves while letting the response stream out immediately. On Cloudflare Workers and Lambda it's the only way to detach work safely; on persistent Node hosts it simply means the response doesn't block on the cache acknowledgement.",[1522,1523,1529],"pre",{"className":1524,"code":1525,"filename":1526,"language":1527,"meta":1528,"style":1528},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { useEvent, useUserlandCache } from '#imports';\n\nconst PARENT_ID_TTL = 60 * 60 * 24 * 7; // 7 days\n\nexport const cacheProductParentIds = (entries: [productId: string, parentId: string][]) => {\n  const event = useEvent();\n  const cache = useUserlandCache\u003Cstring>('shopware/product-parent-id');\n\n  event.waitUntil(\n    cache.setItems(\n      entries.map(([key, value]) => ({ key, value })),\n      { ttl: PARENT_ID_TTL },\n    ),\n  );\n};\n","server/composable/useGetProductParentId.ts","ts","",[1490,1530,1531,1573,1580,1619,1624,1681,1702,1737,1742,1757,1770,1819,1836,1844,1852],{"__ignoreMap":1528},[1532,1533,1536,1540,1544,1548,1551,1554,1557,1560,1563,1567,1570],"span",{"class":1534,"line":1535},"line",1,[1532,1537,1539],{"class":1538},"s7zQu","import",[1532,1541,1543],{"class":1542},"sMK4o"," {",[1532,1545,1547],{"class":1546},"sTEyZ"," useEvent",[1532,1549,1550],{"class":1542},",",[1532,1552,1553],{"class":1546}," useUserlandCache",[1532,1555,1556],{"class":1542}," }",[1532,1558,1559],{"class":1538}," from",[1532,1561,1562],{"class":1542}," '",[1532,1564,1566],{"class":1565},"sfazB","#imports",[1532,1568,1569],{"class":1542},"'",[1532,1571,1572],{"class":1542},";\n",[1532,1574,1576],{"class":1534,"line":1575},2,[1532,1577,1579],{"emptyLinePlaceholder":1578},true,"\n",[1532,1581,1583,1587,1590,1593,1597,1600,1602,1604,1607,1609,1612,1615],{"class":1534,"line":1582},3,[1532,1584,1586],{"class":1585},"spNyl","const",[1532,1588,1589],{"class":1546}," PARENT_ID_TTL ",[1532,1591,1592],{"class":1542},"=",[1532,1594,1596],{"class":1595},"sbssI"," 60",[1532,1598,1599],{"class":1542}," *",[1532,1601,1596],{"class":1595},[1532,1603,1599],{"class":1542},[1532,1605,1606],{"class":1595}," 24",[1532,1608,1599],{"class":1542},[1532,1610,1611],{"class":1595}," 7",[1532,1613,1614],{"class":1542},";",[1532,1616,1618],{"class":1617},"sHwdD"," // 7 days\n",[1532,1620,1622],{"class":1534,"line":1621},4,[1532,1623,1579],{"emptyLinePlaceholder":1578},[1532,1625,1627,1630,1633,1636,1638,1641,1645,1648,1651,1655,1657,1660,1662,1665,1667,1669,1672,1675,1678],{"class":1534,"line":1626},5,[1532,1628,1629],{"class":1538},"export",[1532,1631,1632],{"class":1585}," const",[1532,1634,1635],{"class":1546}," cacheProductParentIds ",[1532,1637,1592],{"class":1542},[1532,1639,1640],{"class":1542}," (",[1532,1642,1644],{"class":1643},"sHdIc","entries",[1532,1646,1647],{"class":1542},":",[1532,1649,1650],{"class":1546}," [",[1532,1652,1654],{"class":1653},"sBMFI","productId",[1532,1656,1647],{"class":1542},[1532,1658,1659],{"class":1653}," string",[1532,1661,1550],{"class":1542},[1532,1663,1664],{"class":1653}," parentId",[1532,1666,1647],{"class":1542},[1532,1668,1659],{"class":1653},[1532,1670,1671],{"class":1546},"][]",[1532,1673,1674],{"class":1542},")",[1532,1676,1677],{"class":1585}," =>",[1532,1679,1680],{"class":1542}," {\n",[1532,1682,1684,1687,1690,1693,1696,1700],{"class":1534,"line":1683},6,[1532,1685,1686],{"class":1585},"  const",[1532,1688,1689],{"class":1546}," event",[1532,1691,1692],{"class":1542}," =",[1532,1694,1547],{"class":1695},"s2Zo4",[1532,1697,1699],{"class":1698},"swJcz","()",[1532,1701,1572],{"class":1542},[1532,1703,1705,1707,1710,1712,1714,1717,1720,1723,1726,1728,1731,1733,1735],{"class":1534,"line":1704},7,[1532,1706,1686],{"class":1585},[1532,1708,1709],{"class":1546}," cache",[1532,1711,1692],{"class":1542},[1532,1713,1553],{"class":1695},[1532,1715,1716],{"class":1542},"\u003C",[1532,1718,1719],{"class":1653},"string",[1532,1721,1722],{"class":1542},">",[1532,1724,1725],{"class":1698},"(",[1532,1727,1569],{"class":1542},[1532,1729,1730],{"class":1565},"shopware/product-parent-id",[1532,1732,1569],{"class":1542},[1532,1734,1674],{"class":1698},[1532,1736,1572],{"class":1542},[1532,1738,1740],{"class":1534,"line":1739},8,[1532,1741,1579],{"emptyLinePlaceholder":1578},[1532,1743,1745,1748,1751,1754],{"class":1534,"line":1744},9,[1532,1746,1747],{"class":1546},"  event",[1532,1749,1750],{"class":1542},".",[1532,1752,1753],{"class":1695},"waitUntil",[1532,1755,1756],{"class":1698},"(\n",[1532,1758,1760,1763,1765,1768],{"class":1534,"line":1759},10,[1532,1761,1762],{"class":1546},"    cache",[1532,1764,1750],{"class":1542},[1532,1766,1767],{"class":1695},"setItems",[1532,1769,1756],{"class":1698},[1532,1771,1773,1776,1778,1781,1783,1786,1789,1791,1794,1797,1799,1801,1804,1807,1809,1811,1813,1816],{"class":1534,"line":1772},11,[1532,1774,1775],{"class":1546},"      entries",[1532,1777,1750],{"class":1542},[1532,1779,1780],{"class":1695},"map",[1532,1782,1725],{"class":1698},[1532,1784,1785],{"class":1542},"([",[1532,1787,1788],{"class":1643},"key",[1532,1790,1550],{"class":1542},[1532,1792,1793],{"class":1643}," value",[1532,1795,1796],{"class":1542},"])",[1532,1798,1677],{"class":1585},[1532,1800,1640],{"class":1698},[1532,1802,1803],{"class":1542},"{",[1532,1805,1806],{"class":1546}," key",[1532,1808,1550],{"class":1542},[1532,1810,1793],{"class":1546},[1532,1812,1556],{"class":1542},[1532,1814,1815],{"class":1698},"))",[1532,1817,1818],{"class":1542},",\n",[1532,1820,1822,1825,1828,1830,1833],{"class":1534,"line":1821},12,[1532,1823,1824],{"class":1542},"      {",[1532,1826,1827],{"class":1698}," ttl",[1532,1829,1647],{"class":1542},[1532,1831,1832],{"class":1546}," PARENT_ID_TTL",[1532,1834,1835],{"class":1542}," },\n",[1532,1837,1839,1842],{"class":1534,"line":1838},13,[1532,1840,1841],{"class":1698},"    )",[1532,1843,1818],{"class":1542},[1532,1845,1847,1850],{"class":1534,"line":1846},14,[1532,1848,1849],{"class":1698},"  )",[1532,1851,1572],{"class":1542},[1532,1853,1855],{"class":1534,"line":1854},15,[1532,1856,1857],{"class":1542},"};\n",[1480,1859,1860],{},"A query handler calls this after it has fetched its data, letting the cache write happen alongside the response stream instead of in front of it:",[1522,1862,1865],{"className":1524,"code":1863,"filename":1864,"language":1527,"meta":1528,"style":1528},"const products = await context.storefrontClient.invoke('readProduct ...', { /* ... */ });\n\ncacheProductParentIds(products.map((p) => [p.id, p.parentId])); // fire-and-forget\nreturn { ids: products.map((p) => p.id), total: products.length };\n","server/orchestr/Product/byCategorySlug.query.ts",[1490,1866,1867,1914,1918,1963],{"__ignoreMap":1528},[1532,1868,1869,1871,1874,1876,1879,1882,1884,1887,1889,1892,1894,1896,1899,1901,1903,1905,1908,1910,1912],{"class":1534,"line":1535},[1532,1870,1586],{"class":1585},[1532,1872,1873],{"class":1546}," products ",[1532,1875,1592],{"class":1542},[1532,1877,1878],{"class":1538}," await",[1532,1880,1881],{"class":1546}," context",[1532,1883,1750],{"class":1542},[1532,1885,1886],{"class":1546},"storefrontClient",[1532,1888,1750],{"class":1542},[1532,1890,1891],{"class":1695},"invoke",[1532,1893,1725],{"class":1546},[1532,1895,1569],{"class":1542},[1532,1897,1898],{"class":1565},"readProduct ...",[1532,1900,1569],{"class":1542},[1532,1902,1550],{"class":1542},[1532,1904,1543],{"class":1542},[1532,1906,1907],{"class":1617}," /* ... */",[1532,1909,1556],{"class":1542},[1532,1911,1674],{"class":1546},[1532,1913,1572],{"class":1542},[1532,1915,1916],{"class":1534,"line":1575},[1532,1917,1579],{"emptyLinePlaceholder":1578},[1532,1919,1920,1923,1926,1928,1930,1932,1934,1936,1938,1940,1943,1945,1948,1950,1953,1955,1958,1960],{"class":1534,"line":1582},[1532,1921,1922],{"class":1695},"cacheProductParentIds",[1532,1924,1925],{"class":1546},"(products",[1532,1927,1750],{"class":1542},[1532,1929,1780],{"class":1695},[1532,1931,1725],{"class":1546},[1532,1933,1725],{"class":1542},[1532,1935,1480],{"class":1643},[1532,1937,1674],{"class":1542},[1532,1939,1677],{"class":1585},[1532,1941,1942],{"class":1546}," [p",[1532,1944,1750],{"class":1542},[1532,1946,1947],{"class":1546},"id",[1532,1949,1550],{"class":1542},[1532,1951,1952],{"class":1546}," p",[1532,1954,1750],{"class":1542},[1532,1956,1957],{"class":1546},"parentId]))",[1532,1959,1614],{"class":1542},[1532,1961,1962],{"class":1617}," // fire-and-forget\n",[1532,1964,1965,1968,1970,1973,1975,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1999,2001,2004,2006,2008,2010,2013],{"class":1534,"line":1621},[1532,1966,1967],{"class":1538},"return",[1532,1969,1543],{"class":1542},[1532,1971,1972],{"class":1698}," ids",[1532,1974,1647],{"class":1542},[1532,1976,1977],{"class":1546}," products",[1532,1979,1750],{"class":1542},[1532,1981,1780],{"class":1695},[1532,1983,1725],{"class":1546},[1532,1985,1725],{"class":1542},[1532,1987,1480],{"class":1643},[1532,1989,1674],{"class":1542},[1532,1991,1677],{"class":1585},[1532,1993,1952],{"class":1546},[1532,1995,1750],{"class":1542},[1532,1997,1998],{"class":1546},"id)",[1532,2000,1550],{"class":1542},[1532,2002,2003],{"class":1698}," total",[1532,2005,1647],{"class":1542},[1532,2007,1977],{"class":1546},[1532,2009,1750],{"class":1542},[1532,2011,2012],{"class":1546},"length ",[1532,2014,1857],{"class":1542},[1480,2016,2017,2018,2022,2023,2025],{},"When ",[2019,2020,2021],"em",{},"not"," to use this pattern: the next request depends on the write completing. If ",[1490,2024,1922],{}," fails (Lambda freezes the container, the Nitro process restarts), the write is lost. That's fine when the next request can fetch the data fresh and try again, and it's broken when the next request needs the cache to be populated to function.",[1495,2027,2029],{"id":2028},"cache-key-composition-for-multi-tenant-safety","Cache key composition for multi-tenant safety",[1480,2031,2032,2033,2036],{},"Userland cache instances live in a global namespace (",[1490,2034,2035],{},"cache:orchestr:userland:\u003Cprefix>","). When the same connector serves multiple tenants, locales, or storefronts in one deployment, you have to fold the differentiating value into either the prefix or the key. Skipping this is the single highest-impact bug in connector code: rotating credentials silently serves stale data from the previous tenant, and locale-specific data leaks across markets.",[1480,2038,2039],{},"There are two valid placements, with different lifecycle properties.",[2041,2042,2044],"h3",{"id":2043},"in-the-prefix-invalidate-as-a-unit","In the prefix: invalidate as a unit",[1480,2046,2047],{},"Put the differentiator in the prefix when its change should evict every entry under it. Credential rotation is the canonical case: when an access token rotates, all cached data tied to the old token's identity space becomes inaccessible, so making the token part of the prefix means the new token's prefix starts empty by definition.",[1522,2049,2052],{"className":1524,"code":2050,"filename":2051,"language":1527,"meta":1528,"style":1528},"const accessToken = useRuntimeConfig()['@laioutr-app/shopware'].accessToken;\nconst cache = useUserlandCache\u003CSwSystemEntities>(\n  `shopware:${accessToken}:system-entities`,\n);\n","server/shopware-helper/system/getSystemEntities.ts",[1490,2053,2054,2086,2106,2130],{"__ignoreMap":1528},[1532,2055,2056,2058,2061,2063,2066,2069,2071,2074,2076,2079,2081,2084],{"class":1534,"line":1535},[1532,2057,1586],{"class":1585},[1532,2059,2060],{"class":1546}," accessToken ",[1532,2062,1592],{"class":1542},[1532,2064,2065],{"class":1695}," useRuntimeConfig",[1532,2067,2068],{"class":1546},"()[",[1532,2070,1569],{"class":1542},[1532,2072,2073],{"class":1565},"@laioutr-app/shopware",[1532,2075,1569],{"class":1542},[1532,2077,2078],{"class":1546},"]",[1532,2080,1750],{"class":1542},[1532,2082,2083],{"class":1546},"accessToken",[1532,2085,1572],{"class":1542},[1532,2087,2088,2090,2093,2095,2097,2099,2102,2104],{"class":1534,"line":1575},[1532,2089,1586],{"class":1585},[1532,2091,2092],{"class":1546}," cache ",[1532,2094,1592],{"class":1542},[1532,2096,1553],{"class":1695},[1532,2098,1716],{"class":1542},[1532,2100,2101],{"class":1653},"SwSystemEntities",[1532,2103,1722],{"class":1542},[1532,2105,1756],{"class":1546},[1532,2107,2108,2111,2114,2117,2119,2122,2125,2128],{"class":1534,"line":1582},[1532,2109,2110],{"class":1542},"  `",[1532,2112,2113],{"class":1565},"shopware:",[1532,2115,2116],{"class":1542},"${",[1532,2118,2083],{"class":1546},[1532,2120,2121],{"class":1542},"}",[1532,2123,2124],{"class":1565},":system-entities",[1532,2126,2127],{"class":1542},"`",[1532,2129,1818],{"class":1542},[1532,2131,2132,2134],{"class":1534,"line":1621},[1532,2133,1674],{"class":1546},[1532,2135,1572],{"class":1542},[1480,2137,2138,2139,2141],{},"After the rotation, ",[1490,2140,1492],{}," returns a fresh cache instance for the new prefix. The old prefix's entries hang around until their TTL expires, but they're dead weight, not stale reads.",[2041,2143,2145],{"id":2144},"in-the-key-isolate-within-a-shared-prefix","In the key: isolate within a shared prefix",[1480,2147,2148],{},"Put the differentiator in the cache key when entries differ along a data dimension but share the cache's lifecycle. Locale-keyed SEO URL lookups are the canonical case: every language has its own slug-to-ID map, but they all evict, deploy, and clear together.",[1522,2150,2153],{"className":1524,"code":2151,"filename":2152,"language":1527,"meta":1528,"style":1528},"const cache = useUserlandCache\u003CSeoEntry>('shopware/seo-urls');\n\nconst resolve = async (type, slug) => {\n  const languageId = storefrontClient.defaultHeaders['sw-language-id'] ?? 'default';\n  const cacheKey = `${languageId}:${type}-${slug}`;\n\n  const cached = await cache.getItem(cacheKey);\n  // ...\n};\n","server/shopware-helper/useSeoResolver.ts",[1490,2154,2155,2185,2189,2217,2259,2297,2301,2328,2333],{"__ignoreMap":1528},[1532,2156,2157,2159,2161,2163,2165,2167,2170,2172,2174,2176,2179,2181,2183],{"class":1534,"line":1535},[1532,2158,1586],{"class":1585},[1532,2160,2092],{"class":1546},[1532,2162,1592],{"class":1542},[1532,2164,1553],{"class":1695},[1532,2166,1716],{"class":1542},[1532,2168,2169],{"class":1653},"SeoEntry",[1532,2171,1722],{"class":1542},[1532,2173,1725],{"class":1546},[1532,2175,1569],{"class":1542},[1532,2177,2178],{"class":1565},"shopware/seo-urls",[1532,2180,1569],{"class":1542},[1532,2182,1674],{"class":1546},[1532,2184,1572],{"class":1542},[1532,2186,2187],{"class":1534,"line":1575},[1532,2188,1579],{"emptyLinePlaceholder":1578},[1532,2190,2191,2193,2196,2198,2201,2203,2206,2208,2211,2213,2215],{"class":1534,"line":1582},[1532,2192,1586],{"class":1585},[1532,2194,2195],{"class":1546}," resolve ",[1532,2197,1592],{"class":1542},[1532,2199,2200],{"class":1585}," async",[1532,2202,1640],{"class":1542},[1532,2204,2205],{"class":1643},"type",[1532,2207,1550],{"class":1542},[1532,2209,2210],{"class":1643}," slug",[1532,2212,1674],{"class":1542},[1532,2214,1677],{"class":1585},[1532,2216,1680],{"class":1542},[1532,2218,2219,2221,2224,2226,2229,2231,2234,2237,2239,2242,2244,2247,2250,2252,2255,2257],{"class":1534,"line":1621},[1532,2220,1686],{"class":1585},[1532,2222,2223],{"class":1546}," languageId",[1532,2225,1692],{"class":1542},[1532,2227,2228],{"class":1546}," storefrontClient",[1532,2230,1750],{"class":1542},[1532,2232,2233],{"class":1546},"defaultHeaders",[1532,2235,2236],{"class":1698},"[",[1532,2238,1569],{"class":1542},[1532,2240,2241],{"class":1565},"sw-language-id",[1532,2243,1569],{"class":1542},[1532,2245,2246],{"class":1698},"] ",[1532,2248,2249],{"class":1542},"??",[1532,2251,1562],{"class":1542},[1532,2253,2254],{"class":1565},"default",[1532,2256,1569],{"class":1542},[1532,2258,1572],{"class":1542},[1532,2260,2261,2263,2266,2268,2271,2274,2276,2278,2280,2282,2284,2287,2289,2292,2295],{"class":1534,"line":1626},[1532,2262,1686],{"class":1585},[1532,2264,2265],{"class":1546}," cacheKey",[1532,2267,1692],{"class":1542},[1532,2269,2270],{"class":1542}," `${",[1532,2272,2273],{"class":1546},"languageId",[1532,2275,2121],{"class":1542},[1532,2277,1647],{"class":1565},[1532,2279,2116],{"class":1542},[1532,2281,2205],{"class":1546},[1532,2283,2121],{"class":1542},[1532,2285,2286],{"class":1565},"-",[1532,2288,2116],{"class":1542},[1532,2290,2291],{"class":1546},"slug",[1532,2293,2294],{"class":1542},"}`",[1532,2296,1572],{"class":1542},[1532,2298,2299],{"class":1534,"line":1683},[1532,2300,1579],{"emptyLinePlaceholder":1578},[1532,2302,2303,2305,2308,2310,2312,2314,2316,2319,2321,2324,2326],{"class":1534,"line":1704},[1532,2304,1686],{"class":1585},[1532,2306,2307],{"class":1546}," cached",[1532,2309,1692],{"class":1542},[1532,2311,1878],{"class":1538},[1532,2313,1709],{"class":1546},[1532,2315,1750],{"class":1542},[1532,2317,2318],{"class":1695},"getItem",[1532,2320,1725],{"class":1698},[1532,2322,2323],{"class":1546},"cacheKey",[1532,2325,1674],{"class":1698},[1532,2327,1572],{"class":1542},[1532,2329,2330],{"class":1534,"line":1739},[1532,2331,2332],{"class":1617},"  // ...\n",[1532,2334,2335],{"class":1534,"line":1744},[1532,2336,1857],{"class":1542},[1480,2338,2339,2340,2343],{},"This shape lets you ",[1490,2341,2342],{},"getKeys()"," or iterate all SEO URLs across languages from one cache instance, which would be awkward if each language had its own prefix.",[2041,2345,2347],{"id":2346},"picking-between-them","Picking between them",[1480,2349,2350],{},"If a change to the value would invalidate every entry, put it in the prefix. If a change just selects which entry you want among siblings that should coexist, put it in the key. When in doubt, prefix is the safer default; you can always merge prefixes later, but splitting an over-keyed cache requires reading every entry.",[1495,2352,2354],{"id":2353},"the-anti-pattern-to-avoid","The anti-pattern to avoid",[1522,2356,2358],{"className":1524,"code":2357,"language":1527,"meta":1528,"style":1528},"// Wrong if the deployment serves more than one storefront.\nconst cache = useUserlandCache\u003Cnumber>('shopify/categoryTotal');\nconst cached = await cache.getItem(categoryId);\n",[1490,2359,2360,2365,2395],{"__ignoreMap":1528},[1532,2361,2362],{"class":1534,"line":1535},[1532,2363,2364],{"class":1617},"// Wrong if the deployment serves more than one storefront.\n",[1532,2366,2367,2369,2371,2373,2375,2377,2380,2382,2384,2386,2389,2391,2393],{"class":1534,"line":1575},[1532,2368,1586],{"class":1585},[1532,2370,2092],{"class":1546},[1532,2372,1592],{"class":1542},[1532,2374,1553],{"class":1695},[1532,2376,1716],{"class":1542},[1532,2378,2379],{"class":1653},"number",[1532,2381,1722],{"class":1542},[1532,2383,1725],{"class":1546},[1532,2385,1569],{"class":1542},[1532,2387,2388],{"class":1565},"shopify/categoryTotal",[1532,2390,1569],{"class":1542},[1532,2392,1674],{"class":1546},[1532,2394,1572],{"class":1542},[1532,2396,2397,2399,2402,2404,2406,2408,2410,2412,2415],{"class":1534,"line":1582},[1532,2398,1586],{"class":1585},[1532,2400,2401],{"class":1546}," cached ",[1532,2403,1592],{"class":1542},[1532,2405,1878],{"class":1538},[1532,2407,1709],{"class":1546},[1532,2409,1750],{"class":1542},[1532,2411,2318],{"class":1695},[1532,2413,2414],{"class":1546},"(categoryId)",[1532,2416,1572],{"class":1542},[1480,2418,2419],{},"This reads correctly when there's exactly one Shopify connection per deployment. The moment a second Shopify instance ships behind the same Nuxt (a multi-brand operator, a staging-on-prod environment), category totals from one shop bleed into the other. Add the access token to the prefix or the shop ID to the key; pick whichever matches the lifecycle question above.",[1495,2421,2423],{"id":2422},"related","Related",[2425,2426,2427,2435],"ul",{},[2428,2429,2430,2434],"li",{},[1512,2431,2433],{"href":2432},"/frontend/orchestr/caching#userland-cache","Caching: Userland cache",": the primitive both patterns build on.",[2428,2436,2437,2440,2441,2443],{},[1512,2438,258],{"href":2439},"./system-bootstrap"," (recipe): another core use of ",[1490,2442,1492],{},", with the access-token-in-prefix pattern in context.",[2445,2446,2447],"style",{},"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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":1528,"searchDepth":1575,"depth":1575,"links":2449},[2450,2451,2456,2457],{"id":1497,"depth":1575,"text":1498},{"id":2028,"depth":1575,"text":2029,"children":2452},[2453,2454,2455],{"id":2043,"depth":1582,"text":2044},{"id":2144,"depth":1582,"text":2145},{"id":2346,"depth":1582,"text":2347},{"id":2353,"depth":1575,"text":2354},{"id":2422,"depth":1575,"text":2423},"Pre-warm caches without blocking responses, and isolate cache entries across tenants and locales using cache key composition. Two patterns the built-in connectors hit constantly.","md",{},{"title":2462,"description":2463},"Userland cache patterns | Laioutr","Pre-warm caches without blocking responses, and isolate cache entries across tenants and locales using cache key composition.",{"loc":267,"lastmod":2465,"changefreq":2466,"priority":2467},"2026-05-05","monthly",0.9,"3aX6A8fpJXzfoKj2bphLjYfVj2Hhox1HOTQHmNq0ilw",[2470,2472],{"title":262,"path":263,"stem":264,"description":2471,"children":-1},"Map raw backend errors into canonical Laioutr errors so the storefront UI can render them with no connector-specific code.",{"title":270,"path":271,"stem":272,"description":2473,"children":-1},"Understanding the basics of Orchestr actions",1778245944012]