[{"data":1,"prerenderedAt":3842},["ShallowReactive",2],{"navigation_docs":3,"-apps-app-development-consent-adapters":1402,"-apps-app-development-consent-adapters-surround":3837},[4,132,387,516,1087,1159,1165,1171,1230,1329],{"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,271],{"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,247,251,255,259,263,267],{"title":238,"path":239,"stem":240},{"title":244,"path":245,"stem":246},"Actions","/frontend/orchestr/actions","1.Frontend/4.Orchestr/Actions",{"title":248,"path":249,"stem":250},"Caching","/frontend/orchestr/caching","1.Frontend/4.Orchestr/Caching",{"title":252,"path":253,"stem":254},"Middleware","/frontend/orchestr/middleware","1.Frontend/4.Orchestr/Middleware",{"title":256,"path":257,"stem":258},"Queries & Links","/frontend/orchestr/queries","1.Frontend/4.Orchestr/Queries",{"title":260,"path":261,"stem":262},"Component Resolvers","/frontend/orchestr/component-resolvers","1.Frontend/4.Orchestr/component-resolvers",{"title":264,"path":265,"stem":266},"URL Query Parameters","/frontend/orchestr/url-query-params","1.Frontend/4.Orchestr/url-query-params",{"title":268,"path":269,"stem":270},"Orchestr Wire Format","/frontend/orchestr/wire-format","1.Frontend/4.Orchestr/wire-format",{"title":272,"path":273,"stem":274,"children":275},"API Reference","/frontend/api-reference","1.Frontend/99.api-reference/0.index",[276,277,334,337,353,361,372,380],{"title":272,"path":273,"stem":274},{"title":278,"path":279,"stem":280,"children":281,"page":55},"Entities","/frontend/api-reference/entities","1.Frontend/99.api-reference/01.entities",[282,286,290,294,298,302,306,310,314,318,322,326,330],{"title":283,"path":284,"stem":285},"Product","/frontend/api-reference/entities/product","1.Frontend/99.api-reference/01.entities/1.product",{"title":287,"path":288,"stem":289},"SuggestedSearch","/frontend/api-reference/entities/suggested-search","1.Frontend/99.api-reference/01.entities/10.suggested-search",{"title":291,"path":292,"stem":293},"SuggestedSearchEntry","/frontend/api-reference/entities/suggested-search-entry","1.Frontend/99.api-reference/01.entities/11.suggested-search-entry",{"title":295,"path":296,"stem":297},"BlogCollection","/frontend/api-reference/entities/blog-collection","1.Frontend/99.api-reference/01.entities/12.blog-collection",{"title":299,"path":300,"stem":301},"Comment","/frontend/api-reference/entities/comment","1.Frontend/99.api-reference/01.entities/13.comment",{"title":303,"path":304,"stem":305},"ProductVariant","/frontend/api-reference/entities/product-variant","1.Frontend/99.api-reference/01.entities/2.product-variant",{"title":307,"path":308,"stem":309},"Category","/frontend/api-reference/entities/category","1.Frontend/99.api-reference/01.entities/3.category",{"title":311,"path":312,"stem":313},"Cart","/frontend/api-reference/entities/cart","1.Frontend/99.api-reference/01.entities/4.cart",{"title":315,"path":316,"stem":317},"CartItem","/frontend/api-reference/entities/cart-item","1.Frontend/99.api-reference/01.entities/5.cart-item",{"title":319,"path":320,"stem":321},"Review","/frontend/api-reference/entities/review","1.Frontend/99.api-reference/01.entities/6.review",{"title":323,"path":324,"stem":325},"BreadcrumbItem","/frontend/api-reference/entities/breadcrumb-item","1.Frontend/99.api-reference/01.entities/7.breadcrumb-item",{"title":327,"path":328,"stem":329},"MenuItem","/frontend/api-reference/entities/menu-item","1.Frontend/99.api-reference/01.entities/8.menu-item",{"title":331,"path":332,"stem":333},"BlogPost","/frontend/api-reference/entities/blog-post","1.Frontend/99.api-reference/01.entities/9.blog-post",{"title":184,"path":335,"stem":336},"/frontend/api-reference/page-types","1.Frontend/99.api-reference/02.page-types",{"title":338,"path":339,"stem":340,"children":341,"page":55},"Ecommerce","/frontend/api-reference/ecommerce","1.Frontend/99.api-reference/10.ecommerce",[342,345,349],{"title":244,"path":343,"stem":344},"/frontend/api-reference/ecommerce/actions","1.Frontend/99.api-reference/10.ecommerce/1.actions",{"title":346,"path":347,"stem":348},"Queries","/frontend/api-reference/ecommerce/queries","1.Frontend/99.api-reference/10.ecommerce/2.queries",{"title":350,"path":351,"stem":352},"Errors","/frontend/api-reference/ecommerce/errors","1.Frontend/99.api-reference/10.ecommerce/3.errors",{"title":354,"path":355,"stem":356,"children":357,"page":55},"Newsletter","/frontend/api-reference/newsletter","1.Frontend/99.api-reference/11.newsletter",[358],{"title":244,"path":359,"stem":360},"/frontend/api-reference/newsletter/actions","1.Frontend/99.api-reference/11.newsletter/1.actions",{"title":362,"path":363,"stem":364,"children":365,"page":55},"Blog","/frontend/api-reference/blog","1.Frontend/99.api-reference/12.blog",[366,369],{"title":346,"path":367,"stem":368},"/frontend/api-reference/blog/queries","1.Frontend/99.api-reference/12.blog/1.queries",{"title":350,"path":370,"stem":371},"/frontend/api-reference/blog/errors","1.Frontend/99.api-reference/12.blog/2.errors",{"title":373,"path":374,"stem":375,"children":376,"page":55},"Suggested Search","/frontend/api-reference/suggested-search","1.Frontend/99.api-reference/13.suggested-search",[377],{"title":346,"path":378,"stem":379},"/frontend/api-reference/suggested-search/queries","1.Frontend/99.api-reference/13.suggested-search/1.queries",{"title":204,"path":381,"stem":382,"children":383,"page":55},"/frontend/api-reference/tracking","1.Frontend/99.api-reference/14.tracking",[384],{"title":244,"path":385,"stem":386},"/frontend/api-reference/tracking/actions","1.Frontend/99.api-reference/14.tracking/1.actions",{"title":388,"path":389,"stem":390,"children":391},"Apps","/apps","2.Apps/0.index",[392,393,443],{"title":388,"path":389,"stem":390},{"title":394,"path":395,"stem":396,"children":397},"App Development","/apps/app-development","2.Apps/app-development/0.index",[398,399,403,407,411,415,419,423,427,431,435,439],{"title":394,"path":395,"stem":396},{"title":400,"path":401,"stem":402},"App Configuration","/apps/app-development/app-configuration","2.Apps/app-development/app-configuration",{"title":404,"path":405,"stem":406},"App Starter","/apps/app-development/app-starter","2.Apps/app-development/app-starter",{"title":408,"path":409,"stem":410},"Best Practice","/apps/app-development/best-practice","2.Apps/app-development/best-practice",{"title":412,"path":413,"stem":414},"Block Definitions","/apps/app-development/block-definitions","2.Apps/app-development/block-definitions",{"title":416,"path":417,"stem":418},"Coding Standards","/apps/app-development/coding-standards","2.Apps/app-development/coding-standards",{"title":420,"path":421,"stem":422},"Consent Adapters","/apps/app-development/consent-adapters","2.Apps/app-development/consent-adapters",{"title":424,"path":425,"stem":426},"Implementation Overview","/apps/app-development/implementation-overview","2.Apps/app-development/implementation-overview",{"title":428,"path":429,"stem":430},"Platform Dependencies","/apps/app-development/platform-dependencies","2.Apps/app-development/platform-dependencies",{"title":432,"path":433,"stem":434},"Schema Fields","/apps/app-development/schema-fields","2.Apps/app-development/schema-fields",{"title":436,"path":437,"stem":438},"Section Definitions","/apps/app-development/section-definitions","2.Apps/app-development/section-definitions",{"title":440,"path":441,"stem":442},"Studio Icons","/apps/app-development/studio-icons","2.Apps/app-development/studio-icons",{"title":444,"path":445,"stem":446,"children":447,"page":55},"App Docs","/apps/app-docs","2.Apps/app-docs",[448,452,456,460,464,468,472,476,480,484,488,492,496,500,504,508,512],{"title":449,"path":450,"stem":451},"Adobe Commerce","/apps/app-docs/adobe-commerce","2.Apps/app-docs/adobe-commerce",{"title":453,"path":454,"stem":455},"B2Bsellers","/apps/app-docs/b2bsellers","2.Apps/app-docs/b2bsellers",{"title":457,"path":458,"stem":459},"Battery Included","/apps/app-docs/battery-included","2.Apps/app-docs/battery-included",{"title":461,"path":462,"stem":463},"CCM19","/apps/app-docs/ccm19","2.Apps/app-docs/ccm19",{"title":465,"path":466,"stem":467},"Cookiebot","/apps/app-docs/cookiebot","2.Apps/app-docs/cookiebot",{"title":469,"path":470,"stem":471},"Google Tag Manager (GTM)","/apps/app-docs/gtm","2.Apps/app-docs/gtm",{"title":473,"path":474,"stem":475},"Hygraph","/apps/app-docs/hygraph","2.Apps/app-docs/hygraph",{"title":477,"path":478,"stem":479},"Nimstrata Google Retail API","/apps/app-docs/nimstrata","2.Apps/app-docs/nimstrata",{"title":481,"path":482,"stem":483},"Pimcore","/apps/app-docs/pimcore","2.Apps/app-docs/pimcore",{"title":485,"path":486,"stem":487},"Commercetools","/apps/app-docs/commercetools","2.apps/app-docs/commercetools",{"title":489,"path":490,"stem":491},"Emporix","/apps/app-docs/emporix","2.apps/app-docs/emporix",{"title":493,"path":494,"stem":495},"Klaviyo","/apps/app-docs/klaviyo","2.apps/app-docs/klaviyo",{"title":497,"path":498,"stem":499},"OXID eShop","/apps/app-docs/oxid","2.apps/app-docs/oxid",{"title":501,"path":502,"stem":503},"Shopify","/apps/app-docs/shopify","2.apps/app-docs/shopify",{"title":505,"path":506,"stem":507},"Shopware","/apps/app-docs/shopware","2.apps/app-docs/shopware",{"title":509,"path":510,"stem":511},"Vercel Analytics","/apps/app-docs/vercel-analytics","2.apps/app-docs/vercel-analytics",{"title":513,"path":514,"stem":515},"Vercel Speed Insights","/apps/app-docs/vercel-speed-insights","2.apps/app-docs/vercel-speed-insights",{"title":517,"path":518,"stem":519,"children":520},"Laioutr UI","/laioutr-ui","3.laioutr-ui/0.index",[521,522,546,552,558,664,670,676,730,752,806],{"title":517,"path":518,"stem":519},{"title":5,"path":523,"stem":524,"children":525},"/laioutr-ui/getting-started","3.laioutr-ui/01.getting-started/0.index",[526,527,531,535,539,543],{"title":5,"path":523,"stem":524},{"title":528,"path":529,"stem":530},"Browser support","/laioutr-ui/getting-started/browser-support","3.laioutr-ui/01.getting-started/1.browser-support",{"title":532,"path":533,"stem":534},"Common Data","/laioutr-ui/getting-started/common-data","3.laioutr-ui/01.getting-started/99.common-data",{"title":536,"path":537,"stem":538},"Figma Kit","/laioutr-ui/getting-started/figma-kit","3.laioutr-ui/01.getting-started/figma-kit",{"title":540,"path":541,"stem":542},"Theming","/laioutr-ui/getting-started/theming","3.laioutr-ui/01.getting-started/theming",{"title":208,"path":544,"stem":545},"/laioutr-ui/getting-started/z-ordering","3.laioutr-ui/01.getting-started/z-ordering",{"title":547,"path":548,"stem":549,"children":550},"B2B","/laioutr-ui/b2b","3.laioutr-ui/b2b/0.index",[551],{"title":547,"path":548,"stem":549},{"title":553,"path":554,"stem":555,"children":556},"Booking","/laioutr-ui/booking","3.laioutr-ui/booking/0.index",[557],{"title":553,"path":554,"stem":555},{"title":559,"path":560,"stem":561,"children":562},"CMS","/laioutr-ui/cms","3.laioutr-ui/cms/0.index",[563,564,589,597,609,618,639],{"title":559,"path":560,"stem":561},{"title":565,"path":566,"stem":567,"children":568,"page":55},"Banner","/laioutr-ui/cms/banner","3.laioutr-ui/cms/banner",[569,573,577,581,585],{"title":570,"path":571,"stem":572},"Banner Slider","/laioutr-ui/cms/banner/bannerslider","3.laioutr-ui/cms/banner/BannerSlider",{"title":574,"path":575,"stem":576},"Basic Banner with Image and Text","/laioutr-ui/cms/banner/basicbannerwithimageandtext","3.laioutr-ui/cms/banner/BasicBannerWithImageAndText",{"title":578,"path":579,"stem":580},"Content with Image and Text","/laioutr-ui/cms/banner/contentwithimageandtext","3.laioutr-ui/cms/banner/ContentWithImageAndText",{"title":582,"path":583,"stem":584},"Content With Text Columns","/laioutr-ui/cms/banner/contentwithtextcolumns","3.laioutr-ui/cms/banner/ContentWithTextColumns",{"title":586,"path":587,"stem":588},"USP Banner","/laioutr-ui/cms/banner/uspbanner","3.laioutr-ui/cms/banner/UspBanner",{"title":362,"path":590,"stem":591,"children":592,"page":55},"/laioutr-ui/cms/blog","3.laioutr-ui/cms/blog",[593],{"title":594,"path":595,"stem":596},"Blog Post","/laioutr-ui/cms/blog/blogpost","3.laioutr-ui/cms/blog/BlogPost",{"title":354,"path":598,"stem":599,"children":600,"page":55},"/laioutr-ui/cms/newsletter","3.laioutr-ui/cms/newsletter",[601,605],{"title":602,"path":603,"stem":604},"Input for Newsletter","/laioutr-ui/cms/newsletter/inputnewsletter","3.laioutr-ui/cms/newsletter/InputNewsletter",{"title":606,"path":607,"stem":608},"Newsletter Registration","/laioutr-ui/cms/newsletter/newsletterregistration","3.laioutr-ui/cms/newsletter/NewsletterRegistration",{"title":610,"path":611,"stem":612,"children":613,"page":55},"Quotes","/laioutr-ui/cms/quotes","3.laioutr-ui/cms/quotes",[614],{"title":615,"path":616,"stem":617},"Personal Quote with Text and Image","/laioutr-ui/cms/quotes/personalquote","3.laioutr-ui/cms/quotes/PersonalQuote",{"title":619,"path":620,"stem":621,"children":622,"page":55},"Reviews","/laioutr-ui/cms/reviews","3.laioutr-ui/cms/reviews",[623,627,631,635],{"title":624,"path":625,"stem":626},"Quote Card","/laioutr-ui/cms/reviews/quotecard","3.laioutr-ui/cms/reviews/QuoteCard",{"title":628,"path":629,"stem":630},"Rating","/laioutr-ui/cms/reviews/rating","3.laioutr-ui/cms/reviews/Rating",{"title":632,"path":633,"stem":634},"Rating Form","/laioutr-ui/cms/reviews/ratingform","3.laioutr-ui/cms/reviews/RatingForm",{"title":636,"path":637,"stem":638},"Review Section","/laioutr-ui/cms/reviews/reviewsection","3.laioutr-ui/cms/reviews/ReviewSection",{"title":640,"path":641,"stem":642,"children":643,"page":55},"Slider","/laioutr-ui/cms/slider","3.laioutr-ui/cms/slider",[644,648,652,656,660],{"title":645,"path":646,"stem":647},"Hero Slider","/laioutr-ui/cms/slider/heroslider","3.laioutr-ui/cms/slider/HeroSlider",{"title":649,"path":650,"stem":651},"Logo Slider","/laioutr-ui/cms/slider/logoslider","3.laioutr-ui/cms/slider/LogoSlider",{"title":653,"path":654,"stem":655},"Swiper Navigation with Bullets","/laioutr-ui/cms/slider/swipernavigationbullets","3.laioutr-ui/cms/slider/SwiperNavigationBullets",{"title":657,"path":658,"stem":659},"Swiper Navigation Compact","/laioutr-ui/cms/slider/swipernavigationcompact","3.laioutr-ui/cms/slider/SwiperNavigationCompact",{"title":661,"path":662,"stem":663},"Swiper Navigation with Numbers","/laioutr-ui/cms/slider/swipernavigationnumbers","3.laioutr-ui/cms/slider/SwiperNavigationNumbers",{"title":665,"path":666,"stem":667,"children":668},"Marketplace","/laioutr-ui/marketplace","3.laioutr-ui/marketplace/0.index",[669],{"title":665,"path":666,"stem":667},{"title":671,"path":672,"stem":673,"children":674},"Multichannel","/laioutr-ui/multichannel","3.laioutr-ui/multichannel/0.index",[675],{"title":671,"path":672,"stem":673},{"title":677,"path":678,"stem":679,"children":680},"Navigation & Headers","/laioutr-ui/navigation","3.laioutr-ui/navigation/0.index",[681,682,686,690,694,698,702,706,710,714,718,722,726],{"title":677,"path":678,"stem":679},{"title":683,"path":684,"stem":685},"Basic Header","/laioutr-ui/navigation/basicheader","3.laioutr-ui/navigation/BasicHeader",{"title":687,"path":688,"stem":689},"Color Mode Switch","/laioutr-ui/navigation/colormodeswitch","3.laioutr-ui/navigation/ColorModeSwitch",{"title":691,"path":692,"stem":693},"Desktop Side By Side Menu","/laioutr-ui/navigation/desktopsidebysidemenu","3.laioutr-ui/navigation/DesktopSideBySideMenu",{"title":695,"path":696,"stem":697},"Header with Text Links","/laioutr-ui/navigation/headerwithtextlinks","3.laioutr-ui/navigation/HeaderWithTextLinks",{"title":699,"path":700,"stem":701},"Locale Select","/laioutr-ui/navigation/localeselect","3.laioutr-ui/navigation/LocaleSelect",{"title":703,"path":704,"stem":705},"Mega Menu Desktop","/laioutr-ui/navigation/megamenudesktop","3.laioutr-ui/navigation/MegaMenuDesktop",{"title":707,"path":708,"stem":709},"Mobile Menu","/laioutr-ui/navigation/mobilemenu","3.laioutr-ui/navigation/MobileMenu",{"title":711,"path":712,"stem":713},"Search Overlay Input","/laioutr-ui/navigation/searchoverlayinput","3.laioutr-ui/navigation/SearchOverlayInput",{"title":715,"path":716,"stem":717},"Shop Header","/laioutr-ui/navigation/shopheader","3.laioutr-ui/navigation/ShopHeader",{"title":719,"path":720,"stem":721},"Top Bar","/laioutr-ui/navigation/topbar","3.laioutr-ui/navigation/TopBar",{"title":723,"path":724,"stem":725},"Breadcrumb","/laioutr-ui/navigation/breadcrumb","3.laioutr-ui/navigation/breadcrumb",{"title":727,"path":728,"stem":729},"Footer","/laioutr-ui/navigation/footer","3.laioutr-ui/navigation/footer",{"title":731,"path":732,"stem":733,"children":734},"SaaS","/laioutr-ui/saas","3.laioutr-ui/saas/0.index",[735,736,740,744,748],{"title":731,"path":732,"stem":733},{"title":737,"path":738,"stem":739},"Billing Cycle Switch","/laioutr-ui/saas/billingcycleswitch","3.laioutr-ui/saas/BillingCycleSwitch",{"title":741,"path":742,"stem":743},"Pricing Plan","/laioutr-ui/saas/pricingplan","3.laioutr-ui/saas/pricingplan",{"title":745,"path":746,"stem":747},"Pricing Plans","/laioutr-ui/saas/pricingplans","3.laioutr-ui/saas/pricingplans",{"title":749,"path":750,"stem":751},"Pricing Table","/laioutr-ui/saas/pricingtable","3.laioutr-ui/saas/pricingtable",{"title":753,"path":754,"stem":755,"children":756},"Shop","/laioutr-ui/shop","3.laioutr-ui/shop/0.index",[757,758,762,766,770,774,778,782,786,790,794,798,802],{"title":753,"path":754,"stem":755},{"title":759,"path":760,"stem":761},"Cards Container","/laioutr-ui/shop/cardscontainer","3.laioutr-ui/shop/CardsContainer",{"title":763,"path":764,"stem":765},"Grid Card Content","/laioutr-ui/shop/gridcardcontent","3.laioutr-ui/shop/GridCardContent",{"title":767,"path":768,"stem":769},"Grid Card Text Content","/laioutr-ui/shop/gridcardtextcontent","3.laioutr-ui/shop/GridCardTextContent",{"title":771,"path":772,"stem":773},"Inpage Navigation Basic Grid","/laioutr-ui/shop/inpagenavigationbasicgrid","3.laioutr-ui/shop/InpageNavigationBasicGrid",{"title":775,"path":776,"stem":777},"Inpage Navigation Basic Slider","/laioutr-ui/shop/inpagenavigationbasicslider","3.laioutr-ui/shop/InpageNavigationBasicSlider",{"title":779,"path":780,"stem":781},"Inpage Navigation Big Grid","/laioutr-ui/shop/inpagenavigationbiggrid","3.laioutr-ui/shop/InpageNavigationBigGrid",{"title":783,"path":784,"stem":785},"Inpage Navigation Big Slider","/laioutr-ui/shop/inpagenavigationbigslider","3.laioutr-ui/shop/InpageNavigationBigSlider",{"title":787,"path":788,"stem":789},"Inpage Navigation Compact Grid","/laioutr-ui/shop/inpagenavigationcompactgrid","3.laioutr-ui/shop/InpageNavigationCompactGrid",{"title":791,"path":792,"stem":793},"Inpage Navigation Compact Slider","/laioutr-ui/shop/inpagenavigationcompactslider","3.laioutr-ui/shop/InpageNavigationCompactSlider",{"title":795,"path":796,"stem":797},"Product Card","/laioutr-ui/shop/productcard","3.laioutr-ui/shop/ProductCard",{"title":799,"path":800,"stem":801},"Product Slider","/laioutr-ui/shop/productslider","3.laioutr-ui/shop/ProductSlider",{"title":803,"path":804,"stem":805},"Filters","/laioutr-ui/shop/filters","3.laioutr-ui/shop/filters",{"title":807,"path":808,"stem":809,"children":810},"UI Kit","/laioutr-ui/ui-kit","3.laioutr-ui/ui-kit/0.index",[811,812,889,910,931,964,985,1050],{"title":807,"path":808,"stem":809},{"title":813,"path":814,"stem":815,"children":816,"page":55},"General","/laioutr-ui/ui-kit/general","3.laioutr-ui/ui-kit/01.general",[817,821,825,829,833,837,841,845,849,853,857,861,865,869,873,877,881,885],{"title":818,"path":819,"stem":820},"Accordion","/laioutr-ui/ui-kit/general/accordion","3.laioutr-ui/ui-kit/01.general/Accordion",{"title":822,"path":823,"stem":824},"Avatar","/laioutr-ui/ui-kit/general/avatar","3.laioutr-ui/ui-kit/01.general/Avatar",{"title":826,"path":827,"stem":828},"Backdrop","/laioutr-ui/ui-kit/general/backdrop","3.laioutr-ui/ui-kit/01.general/Backdrop",{"title":830,"path":831,"stem":832},"Color Swatch","/laioutr-ui/ui-kit/general/colorswatch","3.laioutr-ui/ui-kit/01.general/ColorSwatch",{"title":834,"path":835,"stem":836},"Dropdown Menu","/laioutr-ui/ui-kit/general/dropdownmenu","3.laioutr-ui/ui-kit/01.general/DropdownMenu",{"title":838,"path":839,"stem":840},"Edge Glow","/laioutr-ui/ui-kit/general/edgeglow","3.laioutr-ui/ui-kit/01.general/EdgeGlow",{"title":842,"path":843,"stem":844},"Empty State","/laioutr-ui/ui-kit/general/emptystate","3.laioutr-ui/ui-kit/01.general/EmptyState",{"title":846,"path":847,"stem":848},"Icon","/laioutr-ui/ui-kit/general/icon","3.laioutr-ui/ui-kit/01.general/Icon",{"title":850,"path":851,"stem":852},"Image Contrast Overlay","/laioutr-ui/ui-kit/general/imagecontrastoverlay","3.laioutr-ui/ui-kit/01.general/ImageContrastOverlay",{"title":854,"path":855,"stem":856},"Image Variant Thumbnail","/laioutr-ui/ui-kit/general/imagevariantthumbnail","3.laioutr-ui/ui-kit/01.general/ImageVariantThumbnail",{"title":858,"path":859,"stem":860},"Loading Spinner","/laioutr-ui/ui-kit/general/loadingspinner","3.laioutr-ui/ui-kit/01.general/LoadingSpinner",{"title":862,"path":863,"stem":864},"Media","/laioutr-ui/ui-kit/general/media","3.laioutr-ui/ui-kit/01.general/Media",{"title":866,"path":867,"stem":868},"Navigation Bullets","/laioutr-ui/ui-kit/general/navigationbullets","3.laioutr-ui/ui-kit/01.general/NavigationBullets",{"title":870,"path":871,"stem":872},"Placeholder","/laioutr-ui/ui-kit/general/placeholder","3.laioutr-ui/ui-kit/01.general/Placeholder",{"title":874,"path":875,"stem":876},"Progress Bar","/laioutr-ui/ui-kit/general/progressbar","3.laioutr-ui/ui-kit/01.general/ProgressBar",{"title":878,"path":879,"stem":880},"Scrollbar","/laioutr-ui/ui-kit/general/scrollbar","3.laioutr-ui/ui-kit/01.general/Scrollbar",{"title":882,"path":883,"stem":884},"Swatch Preview","/laioutr-ui/ui-kit/general/swatchpreview","3.laioutr-ui/ui-kit/01.general/SwatchPreview",{"title":886,"path":887,"stem":888},"Thumbnail","/laioutr-ui/ui-kit/general/thumbnail","3.laioutr-ui/ui-kit/01.general/Thumbnail",{"title":890,"path":891,"stem":892,"children":893,"page":55},"Typography","/laioutr-ui/ui-kit/typography","3.laioutr-ui/ui-kit/02.typography",[894,898,902,906],{"title":895,"path":896,"stem":897},"Icon List","/laioutr-ui/ui-kit/typography/iconlist","3.laioutr-ui/ui-kit/02.typography/IconList",{"title":899,"path":900,"stem":901},"Link","/laioutr-ui/ui-kit/typography/link","3.laioutr-ui/ui-kit/02.typography/Link",{"title":903,"path":904,"stem":905},"Rich Content","/laioutr-ui/ui-kit/typography/richcontent","3.laioutr-ui/ui-kit/02.typography/RichContent",{"title":907,"path":908,"stem":909},"Text","/laioutr-ui/ui-kit/typography/text","3.laioutr-ui/ui-kit/02.typography/Text",{"title":911,"path":912,"stem":913,"children":914,"page":55},"Layout","/laioutr-ui/ui-kit/layout","3.laioutr-ui/ui-kit/03.layout",[915,919,923,927],{"title":916,"path":917,"stem":918},"Grid Fill","/laioutr-ui/ui-kit/layout/gridfill","3.laioutr-ui/ui-kit/03.layout/GridFill",{"title":920,"path":921,"stem":922},"Grid Masonry","/laioutr-ui/ui-kit/layout/gridmasonry","3.laioutr-ui/ui-kit/03.layout/GridMasonry",{"title":924,"path":925,"stem":926},"Scroll Area","/laioutr-ui/ui-kit/layout/scrollarea","3.laioutr-ui/ui-kit/03.layout/ScrollArea",{"title":928,"path":929,"stem":930},"Separator","/laioutr-ui/ui-kit/layout/separator","3.laioutr-ui/ui-kit/03.layout/Separator",{"title":932,"path":933,"stem":934,"children":935,"page":55},"Content","/laioutr-ui/ui-kit/content","3.laioutr-ui/ui-kit/04.content",[936,940,944,948,952,956,960],{"title":937,"path":938,"stem":939},"Card","/laioutr-ui/ui-kit/content/card","3.laioutr-ui/ui-kit/04.content/Card",{"title":941,"path":942,"stem":943},"CTA Banner Basic","/laioutr-ui/ui-kit/content/ctabannerbasic","3.laioutr-ui/ui-kit/04.content/CtaBannerBasic",{"title":945,"path":946,"stem":947},"CTA Banner Integrated","/laioutr-ui/ui-kit/content/ctabannerintegrated","3.laioutr-ui/ui-kit/04.content/CtaBannerIntegrated",{"title":949,"path":950,"stem":951},"CTA Banner Showcase","/laioutr-ui/ui-kit/content/ctabannershowcase","3.laioutr-ui/ui-kit/04.content/CtaBannerShowcase",{"title":953,"path":954,"stem":955},"Link Tile Basic","/laioutr-ui/ui-kit/content/linktilebasic","3.laioutr-ui/ui-kit/04.content/LinkTileBasic",{"title":957,"path":958,"stem":959},"Link Tile Big","/laioutr-ui/ui-kit/content/linktilebig","3.laioutr-ui/ui-kit/04.content/LinkTileBig",{"title":961,"path":962,"stem":963},"Link Tile Compact","/laioutr-ui/ui-kit/content/linktilecompact","3.laioutr-ui/ui-kit/04.content/LinkTileCompact",{"title":965,"path":966,"stem":967,"children":968,"page":55},"Surfaces","/laioutr-ui/ui-kit/surfaces","3.laioutr-ui/ui-kit/05.surfaces",[969,973,977,981],{"title":970,"path":971,"stem":972},"Alert Dialog","/laioutr-ui/ui-kit/surfaces/alertdialog","3.laioutr-ui/ui-kit/05.surfaces/AlertDialog",{"title":974,"path":975,"stem":976},"Sheet","/laioutr-ui/ui-kit/surfaces/sheet","3.laioutr-ui/ui-kit/05.surfaces/Sheet",{"title":978,"path":979,"stem":980},"Toast","/laioutr-ui/ui-kit/surfaces/toast","3.laioutr-ui/ui-kit/05.surfaces/Toast",{"title":982,"path":983,"stem":984},"Toaster","/laioutr-ui/ui-kit/surfaces/toaster","3.laioutr-ui/ui-kit/05.surfaces/Toaster",{"title":986,"path":987,"stem":988,"children":989,"page":55},"Form","/laioutr-ui/ui-kit/form","3.laioutr-ui/ui-kit/06.form",[990,994,998,1002,1006,1010,1014,1018,1022,1026,1030,1034,1038,1042,1046],{"title":991,"path":992,"stem":993},"Button","/laioutr-ui/ui-kit/form/button","3.laioutr-ui/ui-kit/06.form/Button",{"title":995,"path":996,"stem":997},"Checkbox","/laioutr-ui/ui-kit/form/checkbox","3.laioutr-ui/ui-kit/06.form/Checkbox",{"title":999,"path":1000,"stem":1001},"Field","/laioutr-ui/ui-kit/form/field","3.laioutr-ui/ui-kit/06.form/Field",{"title":1003,"path":1004,"stem":1005},"Input","/laioutr-ui/ui-kit/form/input","3.laioutr-ui/ui-kit/06.form/Input",{"title":1007,"path":1008,"stem":1009},"Input Checkbox","/laioutr-ui/ui-kit/form/inputcheckbox","3.laioutr-ui/ui-kit/06.form/InputCheckbox",{"title":1011,"path":1012,"stem":1013},"Password Input","/laioutr-ui/ui-kit/form/inputpassword","3.laioutr-ui/ui-kit/06.form/InputPassword",{"title":1015,"path":1016,"stem":1017},"Search Input","/laioutr-ui/ui-kit/form/inputsearch","3.laioutr-ui/ui-kit/06.form/InputSearch",{"title":1019,"path":1020,"stem":1021},"Label","/laioutr-ui/ui-kit/form/label","3.laioutr-ui/ui-kit/06.form/Label",{"title":1023,"path":1024,"stem":1025},"Load More","/laioutr-ui/ui-kit/form/loadmore","3.laioutr-ui/ui-kit/06.form/LoadMore",{"title":1027,"path":1028,"stem":1029},"Pagination","/laioutr-ui/ui-kit/form/pagination","3.laioutr-ui/ui-kit/06.form/Pagination",{"title":1031,"path":1032,"stem":1033},"Quantity Picker","/laioutr-ui/ui-kit/form/quantitypicker","3.laioutr-ui/ui-kit/06.form/QuantityPicker",{"title":1035,"path":1036,"stem":1037},"Radio Group","/laioutr-ui/ui-kit/form/radioselect","3.laioutr-ui/ui-kit/06.form/RadioSelect",{"title":1039,"path":1040,"stem":1041},"Select","/laioutr-ui/ui-kit/form/select","3.laioutr-ui/ui-kit/06.form/Select",{"title":1043,"path":1044,"stem":1045},"Switch","/laioutr-ui/ui-kit/form/switch","3.laioutr-ui/ui-kit/06.form/Switch",{"title":1047,"path":1048,"stem":1049},"Variant Select Button","/laioutr-ui/ui-kit/form/variantselectbutton","3.laioutr-ui/ui-kit/06.form/VariantSelectButton",{"title":1051,"path":1052,"stem":1053,"children":1054,"page":55},"Indicators","/laioutr-ui/ui-kit/indicators","3.laioutr-ui/ui-kit/07.indicators",[1055,1059,1063,1067,1071,1075,1079,1083],{"title":1056,"path":1057,"stem":1058},"Badge","/laioutr-ui/ui-kit/indicators/badge","3.laioutr-ui/ui-kit/07.indicators/Badge",{"title":1060,"path":1061,"stem":1062},"Caption Flag","/laioutr-ui/ui-kit/indicators/captionflag","3.laioutr-ui/ui-kit/07.indicators/CaptionFlag",{"title":1064,"path":1065,"stem":1066},"Category Node Flag","/laioutr-ui/ui-kit/indicators/categorynodeflag","3.laioutr-ui/ui-kit/07.indicators/CategoryNodeFlag",{"title":1068,"path":1069,"stem":1070},"Product Tile Flag","/laioutr-ui/ui-kit/indicators/producttileflag","3.laioutr-ui/ui-kit/07.indicators/ProductTileFlag",{"title":1072,"path":1073,"stem":1074},"Rating Summary","/laioutr-ui/ui-kit/indicators/ratingsummary","3.laioutr-ui/ui-kit/07.indicators/RatingSummary",{"title":1076,"path":1077,"stem":1078},"Rating Summary Small","/laioutr-ui/ui-kit/indicators/ratingsummarysmall","3.laioutr-ui/ui-kit/07.indicators/RatingSummarySmall",{"title":1080,"path":1081,"stem":1082},"Savings Badge","/laioutr-ui/ui-kit/indicators/savingsbadge","3.laioutr-ui/ui-kit/07.indicators/SavingsBadge",{"title":1084,"path":1085,"stem":1086},"Stars Rating","/laioutr-ui/ui-kit/indicators/starsrating","3.laioutr-ui/ui-kit/07.indicators/StarsRating",{"title":1088,"path":1089,"stem":1090,"children":1091},"Hosting","/hosting","4.hosting/0.index",[1092,1093,1099,1129],{"title":1088,"path":1089,"stem":1090},{"title":1094,"path":1095,"stem":1096,"children":1097},"Laioutr Cloud","/hosting/laioutr-cloud","4.hosting/0.laioutr-cloud/0.index",[1098],{"title":1094,"path":1095,"stem":1096},{"title":1100,"path":1101,"stem":1102,"children":1103},"Hosting Adapter","/hosting/hosting-adapter","4.hosting/1.hosting-adapter/0.index",[1104,1105,1109,1113,1117,1121,1125],{"title":1100,"path":1101,"stem":1102},{"title":1106,"path":1107,"stem":1108},"AWS Adapter","/hosting/hosting-adapter/aws-adapter","4.hosting/1.hosting-adapter/aws-adapter",{"title":1110,"path":1111,"stem":1112},"Azure Adapter","/hosting/hosting-adapter/azure-adapter","4.hosting/1.hosting-adapter/azure-adapter",{"title":1114,"path":1115,"stem":1116},"Google Adapter","/hosting/hosting-adapter/google-adapter","4.hosting/1.hosting-adapter/google-adapter",{"title":1118,"path":1119,"stem":1120},"Netlify Adapter","/hosting/hosting-adapter/netlify-adapter","4.hosting/1.hosting-adapter/netlify-adapter",{"title":1122,"path":1123,"stem":1124},"Scale Commerce Adapter","/hosting/hosting-adapter/scale-commerce-adapter","4.hosting/1.hosting-adapter/scale-commerce-adapter",{"title":1126,"path":1127,"stem":1128},"Vercel Adapter","/hosting/hosting-adapter/vercel-adapter","4.hosting/1.hosting-adapter/vercel-adapter",{"title":1130,"path":1131,"stem":1132,"children":1133},"Bring Your Own Server (BYOS)","/hosting/bring-your-own-server-byos","4.hosting/2.bring-your-own-server-byos/0.index",[1134,1135,1139,1143,1147,1151,1155],{"title":1130,"path":1131,"stem":1132},{"title":1136,"path":1137,"stem":1138},"BYOS Agent","/hosting/bring-your-own-server-byos/byos-agent","4.hosting/2.bring-your-own-server-byos/byos-agent",{"title":1140,"path":1141,"stem":1142},"Changelog","/hosting/bring-your-own-server-byos/changelog","4.hosting/2.bring-your-own-server-byos/changelog",{"title":1144,"path":1145,"stem":1146},"DevOps Components","/hosting/bring-your-own-server-byos/devops","4.hosting/2.bring-your-own-server-byos/devops",{"title":1148,"path":1149,"stem":1150},"Infrastructure Requirements","/hosting/bring-your-own-server-byos/infrastructure","4.hosting/2.bring-your-own-server-byos/infrastructure",{"title":1152,"path":1153,"stem":1154},"Software Requirements","/hosting/bring-your-own-server-byos/software","4.hosting/2.bring-your-own-server-byos/software",{"title":1156,"path":1157,"stem":1158},"Webhook Configuration","/hosting/bring-your-own-server-byos/webhook-config","4.hosting/2.bring-your-own-server-byos/webhook-config",{"title":1160,"path":1161,"stem":1162,"children":1163},"Checkout","/checkout","5.Checkout/0.index",[1164],{"title":1160,"path":1161,"stem":1162},{"title":1166,"path":1167,"stem":1168,"children":1169},"Larry AI","/larry-ai","6.Larry-AI/0.index",[1170],{"title":1166,"path":1167,"stem":1168},{"title":536,"path":1172,"stem":1173,"children":1174},"/figma-kit","7.Figma Kit/0.index",[1175,1176,1192],{"title":536,"path":1172,"stem":1173},{"title":121,"path":1177,"stem":1178,"children":1179,"page":55},"/figma-kit/introduction","7.Figma Kit/1.Introduction",[1180,1184,1188],{"title":1181,"path":1182,"stem":1183},"How to Start","/figma-kit/introduction/howtostart","7.Figma Kit/1.Introduction/0.howtostart",{"title":1185,"path":1186,"stem":1187},"Figma Variables","/figma-kit/introduction/figma-variables","7.Figma Kit/1.Introduction/figma-variables",{"title":1189,"path":1190,"stem":1191},"Library Connections","/figma-kit/introduction/library-connections","7.Figma Kit/1.Introduction/library-connections",{"title":1193,"path":1194,"stem":1195,"children":1196,"page":55},"Kits","/figma-kit/kits","7.Figma Kit/Kits",[1197,1200,1203,1206,1210,1213,1217,1221,1224,1227],{"title":547,"path":1198,"stem":1199},"/figma-kit/kits/b2b","7.Figma Kit/Kits/b2b",{"title":553,"path":1201,"stem":1202},"/figma-kit/kits/booking","7.Figma Kit/Kits/booking",{"title":559,"path":1204,"stem":1205},"/figma-kit/kits/cms","7.Figma Kit/Kits/cms",{"title":1207,"path":1208,"stem":1209},"Inpage Navigation","/figma-kit/kits/inpage-navigation","7.Figma Kit/Kits/inpage-navigation",{"title":665,"path":1211,"stem":1212},"/figma-kit/kits/marketplace","7.Figma Kit/Kits/marketplace",{"title":1214,"path":1215,"stem":1216},"Retail & Multichannel","/figma-kit/kits/multichannel","7.Figma Kit/Kits/multichannel",{"title":1218,"path":1219,"stem":1220},"Navigation","/figma-kit/kits/navigation","7.Figma Kit/Kits/navigation",{"title":731,"path":1222,"stem":1223},"/figma-kit/kits/saas","7.Figma Kit/Kits/saas",{"title":753,"path":1225,"stem":1226},"/figma-kit/kits/shop","7.Figma Kit/Kits/shop",{"title":807,"path":1228,"stem":1229},"/figma-kit/kits/ui-kit","7.Figma Kit/Kits/ui-kit",{"title":1231,"path":1232,"stem":1233,"children":1234},"Cockpit","/cockpit","8.Cockpit/0.index",[1235,1236,1266,1283,1300],{"title":1231,"path":1232,"stem":1233},{"title":150,"path":1237,"stem":1238,"children":1239,"page":55},"/cockpit/features","8.Cockpit/1.Features",[1240,1243,1247,1251,1255,1258,1262],{"title":388,"path":1241,"stem":1242},"/cockpit/features/apps","8.Cockpit/1.Features/apps",{"title":1244,"path":1245,"stem":1246},"Content (Collections)","/cockpit/features/content-collections","8.Cockpit/1.Features/content-collections",{"title":1248,"path":1249,"stem":1250},"Deployments","/cockpit/features/deployments","8.Cockpit/1.Features/deployments",{"title":1252,"path":1253,"stem":1254},"Markets","/cockpit/features/markets","8.Cockpit/1.Features/markets",{"title":192,"path":1256,"stem":1257},"/cockpit/features/redirects","8.Cockpit/1.Features/redirects",{"title":1259,"path":1260,"stem":1261},"Studio","/cockpit/features/studio","8.Cockpit/1.Features/studio",{"title":1263,"path":1264,"stem":1265},"Translations","/cockpit/features/translations","8.Cockpit/1.Features/translations",{"title":1267,"path":1268,"stem":1269,"children":1270,"page":55},"Project Settings","/cockpit/project-settings","8.Cockpit/2.Project-Settings",[1271,1275,1279],{"title":1272,"path":1273,"stem":1274},"Delete a project","/cockpit/project-settings/delete-project","8.Cockpit/2.Project-Settings/delete-project",{"title":1276,"path":1277,"stem":1278},"NPM","/cockpit/project-settings/npm","8.Cockpit/2.Project-Settings/npm",{"title":1280,"path":1281,"stem":1282},"Project secret key","/cockpit/project-settings/project-secret-key","8.Cockpit/2.Project-Settings/project-secret-key",{"title":1284,"path":1285,"stem":1286,"children":1287,"page":55},"Account Settings","/cockpit/account-settings","8.Cockpit/3.Account-Settings",[1288,1292,1296],{"title":1289,"path":1290,"stem":1291},"Notifications","/cockpit/account-settings/notifications","8.Cockpit/3.Account-Settings/notifications",{"title":1293,"path":1294,"stem":1295},"Preferences","/cockpit/account-settings/preferences","8.Cockpit/3.Account-Settings/preferences",{"title":1297,"path":1298,"stem":1299},"Security","/cockpit/account-settings/security","8.Cockpit/3.Account-Settings/security",{"title":1301,"path":1302,"stem":1303,"children":1304,"page":55},"Organisation Settings","/cockpit/organisation-settings","8.Cockpit/4.Organisation-Settings",[1305,1309,1313,1317,1321,1325],{"title":1306,"path":1307,"stem":1308},"API keys","/cockpit/organisation-settings/api-keys","8.Cockpit/4.Organisation-Settings/api-keys",{"title":1310,"path":1311,"stem":1312},"Billing","/cockpit/organisation-settings/billing","8.Cockpit/4.Organisation-Settings/billing",{"title":1314,"path":1315,"stem":1316},"General settings","/cockpit/organisation-settings/general-settings","8.Cockpit/4.Organisation-Settings/general-settings",{"title":1318,"path":1319,"stem":1320},"Members","/cockpit/organisation-settings/members","8.Cockpit/4.Organisation-Settings/members",{"title":1322,"path":1323,"stem":1324},"Projects","/cockpit/organisation-settings/projects","8.Cockpit/4.Organisation-Settings/projects",{"title":1326,"path":1327,"stem":1328},"Roles","/cockpit/organisation-settings/roles","8.Cockpit/4.Organisation-Settings/roles",{"title":1330,"path":1331,"stem":1332,"children":1333},"Offering","/offering","9.Offering/0.index",[1334,1335,1367,1380,1393],{"title":1330,"path":1331,"stem":1332},{"title":1336,"path":1337,"stem":1338,"children":1339},"Products","/offering/products","9.Offering/1.Products/0.index",[1340,1341,1346,1351,1356,1362],{"title":1336,"path":1337,"stem":1338},{"title":133,"path":1342,"stem":1343,"children":1344},"/offering/products/frontend","9.Offering/1.Products/1.Frontend/0.index",[1345],{"title":133,"path":1342,"stem":1343},{"title":1231,"path":1347,"stem":1348,"children":1349},"/offering/products/cockpit","9.Offering/1.Products/2.Cockpit/0.index",[1350],{"title":1231,"path":1347,"stem":1348},{"title":1160,"path":1352,"stem":1353,"children":1354},"/offering/products/checkout","9.Offering/1.Products/3.Checkout/0.index",[1355],{"title":1160,"path":1352,"stem":1353},{"title":1357,"path":1358,"stem":1359,"children":1360},"Cloud","/offering/products/cloud","9.Offering/1.Products/4.cloud/0.index",[1361],{"title":1357,"path":1358,"stem":1359},{"title":1166,"path":1363,"stem":1364,"children":1365},"/offering/products/larry-ai","9.Offering/1.Products/5.larry-ai/0.index",[1366],{"title":1166,"path":1363,"stem":1364},{"title":1368,"path":1369,"stem":1370,"children":1371,"page":55},"Service Level Agreement","/offering/service-level-agreement","9.Offering/2.service-level-agreement",[1372,1376],{"title":1373,"path":1374,"stem":1375},"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":1377,"path":1378,"stem":1379},"Backups","/offering/service-level-agreement/backups","9.Offering/2.service-level-agreement/backups",{"title":1381,"path":1382,"stem":1383,"children":1384,"page":55},"Customer Support","/offering/customer-support","9.Offering/3.customer-support",[1385,1389],{"title":1386,"path":1387,"stem":1388},"Standard Customer Support","/offering/customer-support/standard-customer-support","9.Offering/3.customer-support/1.standard-customer-support",{"title":1390,"path":1391,"stem":1392},"Customer Support Severity Levels of Laioutr products","/offering/customer-support/maximum-serverity-levels","9.Offering/3.customer-support/maximum-serverity-levels",{"title":1394,"path":1395,"stem":1396,"children":1397,"page":55},"Compliance","/offering/compliance","9.Offering/4.Compliance",[1398],{"title":1399,"path":1400,"stem":1401},"Fair usage policy","/offering/compliance/fair-usage-policy","9.Offering/4.Compliance/fair-usage-policy",{"id":1403,"title":420,"body":1404,"description":3828,"extension":3829,"meta":3830,"navigation":1577,"path":421,"seo":3831,"sitemap":3833,"stem":422,"__hash__":3836},"docs/2.Apps/app-development/consent-adapters.md",{"type":1405,"value":1406,"toc":3819},"minimark",[1407,1412,1438,1449,1456,1493,1505,1509,1519,1834,1912,1918,1922,1945,1949,1956,2178,2193,2196,3627,3631,3634,3685,3702,3706,3709,3770,3777,3781,3815],[1408,1409,1411],"h2",{"id":1410},"what-you-are-building","What you are building",[1413,1414,1415,1416,1420,1421,1425,1426,1429,1430,1433,1434,1437],"p",{},"A consent adapter is a small class that bridges a concrete CMP (OneTrust, CookieYes, an in-house solution) and Laioutr's ",[1417,1418,1419],"a",{"href":157},"consent store",". The store calls ",[1422,1423,1424],"code",{},"init()"," to load the CMP, asks ",[1422,1427,1428],{},"getConsentState()"," for the current categories, subscribes to ",[1422,1431,1432],{},"onConsentChange()"," for live updates, and forwards user actions like \"open the banner\" through ",[1422,1435,1436],{},"showConsentOverlay()",".",[1413,1439,1440,1441,1444,1445,1448],{},"If your CMP is already covered by ",[1422,1442,1443],{},"@laioutr-app/cookiebot"," or ",[1422,1446,1447],{},"@laioutr-app/ccm19",", use those instead. Build your own only when no existing app fits.",[1413,1450,1451,1452,1455],{},"A consent adapter app is a normal Laioutr app (a Nuxt module that exposes its options on ",[1422,1453,1454],{},"runtimeConfig.public"," and registers a client plugin) plus two adapter-specific pieces:",[1457,1458,1459,1475],"ol",{},[1460,1461,1462,1463,1467,1468,1471,1472,1437],"li",{},"An ",[1464,1465,1466],"strong",{},"adapter class"," that implements ",[1422,1469,1470],{},"ConsentAdapter"," from ",[1422,1473,1474],{},"#frontend/consent",[1460,1476,1477,1478,1481,1482,1485,1486,1489,1490,1437],{},"A ",[1464,1479,1480],{},"client plugin"," that instantiates the adapter and registers it with ",[1422,1483,1484],{},"useConsentStore()"," via ",[1422,1487,1488],{},"registerAdapter"," + ",[1422,1491,1492],{},"activateAdapter",[1413,1494,1495,1496,1498,1499,1501,1502,1504],{},"For the module skeleton, options handling, and how ",[1422,1497,1454],{}," flows into your plugin, scaffold from the ",[1417,1500,404],{"href":405}," and follow ",[1417,1503,400],{"href":401},". This guide focuses on the consent-specific contract and walks through one worked example against a fictional CMP API.",[1408,1506,1508],{"id":1507},"the-consentadapter-contract","The ConsentAdapter contract",[1413,1510,1511,1512,1515,1516,1518],{},"The contract is exported from ",[1422,1513,1514],{},"@laioutr-core/frontend-core"," and re-exported under the ",[1422,1517,1474],{}," alias:",[1520,1521,1526],"pre",{"className":1522,"code":1523,"language":1524,"meta":1525,"style":1525},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { ConsentAdapter, ConsentManagementState } from '#frontend/consent';\n\nexport interface ConsentAdapter {\n  readonly name: string;\n  readonly isActive: boolean;\n  init(): Promise\u003Cvoid> | void;\n  getConsentState(): Promise\u003CPartial\u003CConsentManagementState>> | Partial\u003CConsentManagementState>;\n  showConsentOverlay(): Promise\u003Cvoid> | void;\n  renewConsent(): Promise\u003Cvoid> | void;\n  hasCategoryConsent(category: keyof ConsentManagementState): boolean;\n  onConsentChange(callback: (consent: Partial\u003CConsentManagementState>) => void): void;\n  destroy?(): Promise\u003Cvoid> | void;\n}\n","ts","",[1422,1527,1528,1572,1579,1595,1613,1628,1657,1692,1714,1736,1763,1805,1828],{"__ignoreMap":1525},[1529,1530,1533,1537,1540,1544,1548,1551,1554,1557,1560,1563,1566,1569],"span",{"class":1531,"line":1532},"line",1,[1529,1534,1536],{"class":1535},"s7zQu","import",[1529,1538,1539],{"class":1535}," type",[1529,1541,1543],{"class":1542},"sMK4o"," {",[1529,1545,1547],{"class":1546},"sTEyZ"," ConsentAdapter",[1529,1549,1550],{"class":1542},",",[1529,1552,1553],{"class":1546}," ConsentManagementState",[1529,1555,1556],{"class":1542}," }",[1529,1558,1559],{"class":1535}," from",[1529,1561,1562],{"class":1542}," '",[1529,1564,1474],{"class":1565},"sfazB",[1529,1567,1568],{"class":1542},"'",[1529,1570,1571],{"class":1542},";\n",[1529,1573,1575],{"class":1531,"line":1574},2,[1529,1576,1578],{"emptyLinePlaceholder":1577},true,"\n",[1529,1580,1582,1585,1589,1592],{"class":1531,"line":1581},3,[1529,1583,1584],{"class":1535},"export",[1529,1586,1588],{"class":1587},"spNyl"," interface",[1529,1590,1547],{"class":1591},"sBMFI",[1529,1593,1594],{"class":1542}," {\n",[1529,1596,1598,1601,1605,1608,1611],{"class":1531,"line":1597},4,[1529,1599,1600],{"class":1587},"  readonly",[1529,1602,1604],{"class":1603},"swJcz"," name",[1529,1606,1607],{"class":1542},":",[1529,1609,1610],{"class":1591}," string",[1529,1612,1571],{"class":1542},[1529,1614,1616,1618,1621,1623,1626],{"class":1531,"line":1615},5,[1529,1617,1600],{"class":1587},[1529,1619,1620],{"class":1603}," isActive",[1529,1622,1607],{"class":1542},[1529,1624,1625],{"class":1591}," boolean",[1529,1627,1571],{"class":1542},[1529,1629,1631,1634,1637,1640,1643,1646,1649,1652,1655],{"class":1531,"line":1630},6,[1529,1632,1633],{"class":1603},"  init",[1529,1635,1636],{"class":1542},"():",[1529,1638,1639],{"class":1591}," Promise",[1529,1641,1642],{"class":1542},"\u003C",[1529,1644,1645],{"class":1591},"void",[1529,1647,1648],{"class":1542},">",[1529,1650,1651],{"class":1542}," |",[1529,1653,1654],{"class":1591}," void",[1529,1656,1571],{"class":1542},[1529,1658,1660,1663,1665,1667,1669,1672,1674,1677,1680,1682,1685,1687,1689],{"class":1531,"line":1659},7,[1529,1661,1662],{"class":1603},"  getConsentState",[1529,1664,1636],{"class":1542},[1529,1666,1639],{"class":1591},[1529,1668,1642],{"class":1542},[1529,1670,1671],{"class":1591},"Partial",[1529,1673,1642],{"class":1542},[1529,1675,1676],{"class":1591},"ConsentManagementState",[1529,1678,1679],{"class":1542},">>",[1529,1681,1651],{"class":1542},[1529,1683,1684],{"class":1591}," Partial",[1529,1686,1642],{"class":1542},[1529,1688,1676],{"class":1591},[1529,1690,1691],{"class":1542},">;\n",[1529,1693,1695,1698,1700,1702,1704,1706,1708,1710,1712],{"class":1531,"line":1694},8,[1529,1696,1697],{"class":1603},"  showConsentOverlay",[1529,1699,1636],{"class":1542},[1529,1701,1639],{"class":1591},[1529,1703,1642],{"class":1542},[1529,1705,1645],{"class":1591},[1529,1707,1648],{"class":1542},[1529,1709,1651],{"class":1542},[1529,1711,1654],{"class":1591},[1529,1713,1571],{"class":1542},[1529,1715,1717,1720,1722,1724,1726,1728,1730,1732,1734],{"class":1531,"line":1716},9,[1529,1718,1719],{"class":1603},"  renewConsent",[1529,1721,1636],{"class":1542},[1529,1723,1639],{"class":1591},[1529,1725,1642],{"class":1542},[1529,1727,1645],{"class":1591},[1529,1729,1648],{"class":1542},[1529,1731,1651],{"class":1542},[1529,1733,1654],{"class":1591},[1529,1735,1571],{"class":1542},[1529,1737,1739,1742,1745,1749,1751,1754,1756,1759,1761],{"class":1531,"line":1738},10,[1529,1740,1741],{"class":1603},"  hasCategoryConsent",[1529,1743,1744],{"class":1542},"(",[1529,1746,1748],{"class":1747},"sHdIc","category",[1529,1750,1607],{"class":1542},[1529,1752,1753],{"class":1542}," keyof",[1529,1755,1553],{"class":1591},[1529,1757,1758],{"class":1542},"):",[1529,1760,1625],{"class":1591},[1529,1762,1571],{"class":1542},[1529,1764,1766,1769,1771,1775,1777,1780,1783,1785,1787,1789,1791,1794,1797,1799,1801,1803],{"class":1531,"line":1765},11,[1529,1767,1768],{"class":1603},"  onConsentChange",[1529,1770,1744],{"class":1542},[1529,1772,1774],{"class":1773},"s2Zo4","callback",[1529,1776,1607],{"class":1542},[1529,1778,1779],{"class":1542}," (",[1529,1781,1782],{"class":1747},"consent",[1529,1784,1607],{"class":1542},[1529,1786,1684],{"class":1591},[1529,1788,1642],{"class":1542},[1529,1790,1676],{"class":1591},[1529,1792,1793],{"class":1542},">)",[1529,1795,1796],{"class":1587}," =>",[1529,1798,1654],{"class":1591},[1529,1800,1758],{"class":1542},[1529,1802,1654],{"class":1591},[1529,1804,1571],{"class":1542},[1529,1806,1808,1811,1814,1816,1818,1820,1822,1824,1826],{"class":1531,"line":1807},12,[1529,1809,1810],{"class":1603},"  destroy",[1529,1812,1813],{"class":1542},"?():",[1529,1815,1639],{"class":1591},[1529,1817,1642],{"class":1542},[1529,1819,1645],{"class":1591},[1529,1821,1648],{"class":1542},[1529,1823,1651],{"class":1542},[1529,1825,1654],{"class":1591},[1529,1827,1571],{"class":1542},[1529,1829,1831],{"class":1531,"line":1830},13,[1529,1832,1833],{"class":1542},"}\n",[1835,1836,1837,1860,1871,1879,1887,1890,1894,1901,1908],"field-group",{},[1838,1839,1843,1844,1847,1848,1847,1851,1854,1855,1857,1858,1437],"field",{"name":1840,"type":1841,":required":1842},"name","string","true","Stable identifier for the adapter (e.g. ",[1422,1845,1846],{},"'cookiebot'",", ",[1422,1849,1850],{},"'ccm19'",[1422,1852,1853],{},"'onetrust'","). The store uses it as the key in ",[1422,1856,1488],{}," / ",[1422,1859,1492],{},[1838,1861,1864,1865,1867,1868,1870],{"name":1862,"type":1863,":required":1842},"isActive","boolean","Readonly flag the adapter sets to ",[1422,1866,1842],{}," after ",[1422,1869,1424],{}," finishes successfully. Useful for diagnostics; the store does not depend on it.",[1838,1872,1874,1875,1878],{"name":1424,"type":1873,":required":1842},"() => Promise\u003Cvoid> | void","Loads the CMP script (typically via ",[1422,1876,1877],{},"useHead","), wires up cookie or event listeners, and prepares the adapter to report consent. Throw if required configuration is missing; the store will catch the error and deactivate.",[1838,1880,1882,1883,1886],{"name":1428,"type":1881,":required":1842},"() => Promise\u003CPartial\u003CConsentManagementState>> | Partial\u003CConsentManagementState>","Returns the current consent as a partial of the five-category shape. Called once on activation (the result is merged into ",[1422,1884,1885],{},"state","). Sync if you can read from a cookie; async only when you genuinely need to wait.",[1838,1888,1889],{"name":1436,"type":1873,":required":1842},"Opens the CMP's main banner. Wired to \"Cookie preferences\" links in the user's app.",[1838,1891,1893],{"name":1892,"type":1873,":required":1842},"renewConsent()","Opens the granular preferences dialog so the user can revisit individual categories. Some CMPs use the same UI for both; that is fine.",[1838,1895,1898,1899,1437],{"name":1896,"type":1897,":required":1842},"hasCategoryConsent(category)","(category: keyof ConsentManagementState) => boolean","Synchronous check for one category. Almost always derived from ",[1422,1900,1428],{},[1838,1902,1905,1906,1437],{"name":1903,"type":1904,":required":1842},"onConsentChange(callback)","(callback: (consent: Partial\u003CConsentManagementState>) => void) => void","Registers a callback fired whenever the CMP reports a consent change. The store calls this once during activation; you must invoke every registered callback when the CMP fires its own change event. The store merges the callback's argument into ",[1422,1907,1885],{},[1838,1909,1911],{"name":1910,"type":1873},"destroy()","Optional. Tear down listeners and globals when the store deactivates the adapter. Lets you clean up timers, event handlers, or injected scripts.",[1413,1913,1477,1914,1917],{},[1422,1915,1916],{},"Partial\u003CConsentManagementState>"," is enough: the store merges it into the existing state, so omitted keys keep their previous value.",[1408,1919,1921],{"id":1920},"registering-the-adapter","Registering the adapter",[1413,1923,1924,1925,1928,1929,1932,1933,1935,1936,1938,1939,1941,1942,1944],{},"Once the adapter class exists, the client plugin in your app instantiates it, calls ",[1422,1926,1927],{},"store.registerAdapter(adapter)",", then ",[1422,1930,1931],{},"store.activateAdapter(adapter.name)",". ",[1422,1934,1488],{}," is idempotent; ",[1422,1937,1492],{}," deactivates any previously active adapter first, so the active provider is always exactly one. Activation triggers ",[1422,1940,1424],{}," and the initial ",[1422,1943,1428],{}," read inside the store, so the host app does nothing beyond installing your module.",[1408,1946,1948],{"id":1947},"worked-example","Worked example",[1413,1950,1951,1952,1955],{},"The fictional CMP ",[1422,1953,1954],{},"ConsentKit"," is the example for the rest of the guide. Imagine its API looks like this:",[1520,1957,1959],{"className":1522,"code":1958,"language":1524,"meta":1525,"style":1525},"declare global {\n  interface Window {\n    ConsentKit?: ConsentKitGlobal;\n  }\n}\n\ninterface ConsentKitGlobal {\n  getConsent(): ConsentKitState | null;\n  openBanner(): void;\n  openPreferences(): void;\n  on(event: 'consent-change', handler: (state: ConsentKitState) => void): () => void;\n}\n\ninterface ConsentKitState {\n  essential: boolean;\n  functional: boolean;\n  analytics: boolean;\n  ads: boolean;\n}\n",[1422,1960,1961,1972,1982,1995,2000,2004,2008,2017,2034,2045,2056,2108,2112,2116,2125,2137,2149,2161,2173],{"__ignoreMap":1525},[1529,1962,1963,1966,1969],{"class":1531,"line":1532},[1529,1964,1965],{"class":1587},"declare",[1529,1967,1968],{"class":1546}," global ",[1529,1970,1971],{"class":1542},"{\n",[1529,1973,1974,1977,1980],{"class":1531,"line":1574},[1529,1975,1976],{"class":1587},"  interface",[1529,1978,1979],{"class":1591}," Window",[1529,1981,1594],{"class":1542},[1529,1983,1984,1987,1990,1993],{"class":1531,"line":1581},[1529,1985,1986],{"class":1603},"    ConsentKit",[1529,1988,1989],{"class":1542},"?:",[1529,1991,1992],{"class":1591}," ConsentKitGlobal",[1529,1994,1571],{"class":1542},[1529,1996,1997],{"class":1531,"line":1597},[1529,1998,1999],{"class":1542},"  }\n",[1529,2001,2002],{"class":1531,"line":1615},[1529,2003,1833],{"class":1542},[1529,2005,2006],{"class":1531,"line":1630},[1529,2007,1578],{"emptyLinePlaceholder":1577},[1529,2009,2010,2013,2015],{"class":1531,"line":1659},[1529,2011,2012],{"class":1587},"interface",[1529,2014,1992],{"class":1591},[1529,2016,1594],{"class":1542},[1529,2018,2019,2022,2024,2027,2029,2032],{"class":1531,"line":1694},[1529,2020,2021],{"class":1603},"  getConsent",[1529,2023,1636],{"class":1542},[1529,2025,2026],{"class":1591}," ConsentKitState",[1529,2028,1651],{"class":1542},[1529,2030,2031],{"class":1591}," null",[1529,2033,1571],{"class":1542},[1529,2035,2036,2039,2041,2043],{"class":1531,"line":1716},[1529,2037,2038],{"class":1603},"  openBanner",[1529,2040,1636],{"class":1542},[1529,2042,1654],{"class":1591},[1529,2044,1571],{"class":1542},[1529,2046,2047,2050,2052,2054],{"class":1531,"line":1738},[1529,2048,2049],{"class":1603},"  openPreferences",[1529,2051,1636],{"class":1542},[1529,2053,1654],{"class":1591},[1529,2055,1571],{"class":1542},[1529,2057,2058,2061,2063,2066,2068,2070,2073,2075,2077,2080,2082,2084,2086,2088,2090,2093,2095,2097,2099,2102,2104,2106],{"class":1531,"line":1765},[1529,2059,2060],{"class":1603},"  on",[1529,2062,1744],{"class":1542},[1529,2064,2065],{"class":1747},"event",[1529,2067,1607],{"class":1542},[1529,2069,1562],{"class":1542},[1529,2071,2072],{"class":1565},"consent-change",[1529,2074,1568],{"class":1542},[1529,2076,1550],{"class":1542},[1529,2078,2079],{"class":1773}," handler",[1529,2081,1607],{"class":1542},[1529,2083,1779],{"class":1542},[1529,2085,1885],{"class":1747},[1529,2087,1607],{"class":1542},[1529,2089,2026],{"class":1591},[1529,2091,2092],{"class":1542},")",[1529,2094,1796],{"class":1587},[1529,2096,1654],{"class":1591},[1529,2098,1758],{"class":1542},[1529,2100,2101],{"class":1542}," ()",[1529,2103,1796],{"class":1587},[1529,2105,1654],{"class":1591},[1529,2107,1571],{"class":1542},[1529,2109,2110],{"class":1531,"line":1807},[1529,2111,1833],{"class":1542},[1529,2113,2114],{"class":1531,"line":1830},[1529,2115,1578],{"emptyLinePlaceholder":1577},[1529,2117,2119,2121,2123],{"class":1531,"line":2118},14,[1529,2120,2012],{"class":1587},[1529,2122,2026],{"class":1591},[1529,2124,1594],{"class":1542},[1529,2126,2128,2131,2133,2135],{"class":1531,"line":2127},15,[1529,2129,2130],{"class":1603},"  essential",[1529,2132,1607],{"class":1542},[1529,2134,1625],{"class":1591},[1529,2136,1571],{"class":1542},[1529,2138,2140,2143,2145,2147],{"class":1531,"line":2139},16,[1529,2141,2142],{"class":1603},"  functional",[1529,2144,1607],{"class":1542},[1529,2146,1625],{"class":1591},[1529,2148,1571],{"class":1542},[1529,2150,2152,2155,2157,2159],{"class":1531,"line":2151},17,[1529,2153,2154],{"class":1603},"  analytics",[1529,2156,1607],{"class":1542},[1529,2158,1625],{"class":1591},[1529,2160,1571],{"class":1542},[1529,2162,2164,2167,2169,2171],{"class":1531,"line":2163},18,[1529,2165,2166],{"class":1603},"  ads",[1529,2168,1607],{"class":1542},[1529,2170,1625],{"class":1591},[1529,2172,1571],{"class":1542},[1529,2174,2176],{"class":1531,"line":2175},19,[1529,2177,1833],{"class":1542},[1413,2179,2180,2181,2184,2185,2188,2189,2192],{},"The widget is loaded with a script tag, exposes a ",[1422,2182,2183],{},"window.ConsentKit"," global once ready, fires a ",[1422,2186,2187],{},"consentkit:ready"," event when that global becomes available, and lets you subscribe to consent changes via ",[1422,2190,2191],{},"ConsentKit.on('consent-change', ...)",". A real CMP will look broadly like this; the moving parts (script injection, late init, mapping, cleanup) are the same shape regardless of the provider.",[1413,2194,2195],{},"Here is the full adapter:",[1520,2197,2199],{"className":1522,"code":2198,"language":1524,"meta":1525,"style":1525},"import { useHead } from 'nuxt/app';\nimport type { ConsentAdapter, ConsentManagementState } from '#frontend/consent';\n\ninterface ConsentKitConfig {\n  apiKey: string;\n  region?: string;\n}\n\nexport class ConsentKitAdapter implements ConsentAdapter {\n  readonly name = 'consentkit';\n  private _isActive = false;\n  private _callbacks: Array\u003C(c: Partial\u003CConsentManagementState>) => void> = [];\n  private _unsubscribe: (() => void) | null = null;\n\n  constructor(private _config: ConsentKitConfig) {}\n\n  get isActive() { return this._isActive; }\n\n  async init() {\n    if (!this._config.apiKey) throw new Error('ConsentKit: apiKey is required');\n\n    const params = new URLSearchParams({ key: this._config.apiKey });\n    if (this._config.region) params.set('region', this._config.region);\n\n    useHead({\n      script: [{ id: 'consentkit', src: `https://cdn.consentkit.example/widget.js?${params}`, async: true }],\n    });\n\n    if (import.meta.client) {\n      // The widget may load before or after this plugin runs; handle both.\n      const subscribe = () => {\n        this._unsubscribe = window.ConsentKit!.on('consent-change', (state) => {\n          this._notify(this.mapConsent(state));\n        });\n        const initial = window.ConsentKit!.getConsent();\n        if (initial) this._notify(this.mapConsent(initial));\n      };\n\n      if (window.ConsentKit) subscribe();\n      else window.addEventListener('consentkit:ready', subscribe, { once: true });\n    }\n\n    this._isActive = true;\n  }\n\n  getConsentState(): Partial\u003CConsentManagementState> {\n    if (import.meta.client && window.ConsentKit) {\n      const current = window.ConsentKit.getConsent();\n      if (current) return this.mapConsent(current);\n    }\n    return { necessary: true }; // SSR or pre-load: only essential is safe by default.\n  }\n\n  hasCategoryConsent(category: keyof ConsentManagementState): boolean {\n    return this.getConsentState()[category] ?? false;\n  }\n\n  onConsentChange(callback: (c: Partial\u003CConsentManagementState>) => void) {\n    this._callbacks.push(callback);\n  }\n\n  async showConsentOverlay() {\n    if (import.meta.client) window.ConsentKit?.openBanner();\n  }\n\n  async renewConsent() {\n    if (import.meta.client) window.ConsentKit?.openPreferences();\n  }\n\n  async destroy() {\n    this._unsubscribe?.();\n    this._unsubscribe = null;\n    this._callbacks = [];\n    this._isActive = false;\n  }\n\n  // The contract boundary: ConsentKit's category names become Laioutr's.\n  private mapConsent(c: ConsentKitState): Partial\u003CConsentManagementState> {\n    return { necessary: c.essential, functional: c.functional, statistics: c.analytics, marketing: c.ads };\n  }\n\n  private _notify(consent: Partial\u003CConsentManagementState>) {\n    for (const cb of this._callbacks) cb(consent);\n  }\n}\n",[1422,2200,2201,2223,2249,2253,2262,2273,2284,2288,2292,2309,2327,2343,2384,2415,2419,2441,2445,2471,2475,2487,2530,2535,2575,2624,2629,2639,2702,2712,2717,2740,2747,2764,2808,2833,2843,2869,2900,2906,2911,2935,2977,2983,2988,3002,3007,3012,3029,3059,3083,3110,3115,3136,3141,3146,3167,3192,3197,3202,3235,3256,3261,3266,3278,3313,3318,3323,3335,3369,3374,3379,3391,3404,3415,3428,3441,3446,3451,3457,3485,3549,3554,3559,3583,3617,3622],{"__ignoreMap":1525},[1529,2202,2203,2205,2207,2210,2212,2214,2216,2219,2221],{"class":1531,"line":1532},[1529,2204,1536],{"class":1535},[1529,2206,1543],{"class":1542},[1529,2208,2209],{"class":1546}," useHead",[1529,2211,1556],{"class":1542},[1529,2213,1559],{"class":1535},[1529,2215,1562],{"class":1542},[1529,2217,2218],{"class":1565},"nuxt/app",[1529,2220,1568],{"class":1542},[1529,2222,1571],{"class":1542},[1529,2224,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247],{"class":1531,"line":1574},[1529,2226,1536],{"class":1535},[1529,2228,1539],{"class":1535},[1529,2230,1543],{"class":1542},[1529,2232,1547],{"class":1546},[1529,2234,1550],{"class":1542},[1529,2236,1553],{"class":1546},[1529,2238,1556],{"class":1542},[1529,2240,1559],{"class":1535},[1529,2242,1562],{"class":1542},[1529,2244,1474],{"class":1565},[1529,2246,1568],{"class":1542},[1529,2248,1571],{"class":1542},[1529,2250,2251],{"class":1531,"line":1581},[1529,2252,1578],{"emptyLinePlaceholder":1577},[1529,2254,2255,2257,2260],{"class":1531,"line":1597},[1529,2256,2012],{"class":1587},[1529,2258,2259],{"class":1591}," ConsentKitConfig",[1529,2261,1594],{"class":1542},[1529,2263,2264,2267,2269,2271],{"class":1531,"line":1615},[1529,2265,2266],{"class":1603},"  apiKey",[1529,2268,1607],{"class":1542},[1529,2270,1610],{"class":1591},[1529,2272,1571],{"class":1542},[1529,2274,2275,2278,2280,2282],{"class":1531,"line":1630},[1529,2276,2277],{"class":1603},"  region",[1529,2279,1989],{"class":1542},[1529,2281,1610],{"class":1591},[1529,2283,1571],{"class":1542},[1529,2285,2286],{"class":1531,"line":1659},[1529,2287,1833],{"class":1542},[1529,2289,2290],{"class":1531,"line":1694},[1529,2291,1578],{"emptyLinePlaceholder":1577},[1529,2293,2294,2296,2299,2302,2305,2307],{"class":1531,"line":1716},[1529,2295,1584],{"class":1535},[1529,2297,2298],{"class":1587}," class",[1529,2300,2301],{"class":1591}," ConsentKitAdapter",[1529,2303,2304],{"class":1587}," implements",[1529,2306,1547],{"class":1591},[1529,2308,1594],{"class":1542},[1529,2310,2311,2313,2315,2318,2320,2323,2325],{"class":1531,"line":1738},[1529,2312,1600],{"class":1587},[1529,2314,1604],{"class":1603},[1529,2316,2317],{"class":1542}," =",[1529,2319,1562],{"class":1542},[1529,2321,2322],{"class":1565},"consentkit",[1529,2324,1568],{"class":1542},[1529,2326,1571],{"class":1542},[1529,2328,2329,2332,2335,2337,2341],{"class":1531,"line":1765},[1529,2330,2331],{"class":1587},"  private",[1529,2333,2334],{"class":1603}," _isActive",[1529,2336,2317],{"class":1542},[1529,2338,2340],{"class":2339},"sfNiH"," false",[1529,2342,1571],{"class":1542},[1529,2344,2345,2347,2350,2352,2355,2358,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2382],{"class":1531,"line":1807},[1529,2346,2331],{"class":1587},[1529,2348,2349],{"class":1603}," _callbacks",[1529,2351,1607],{"class":1542},[1529,2353,2354],{"class":1591}," Array",[1529,2356,2357],{"class":1542},"\u003C(",[1529,2359,2360],{"class":1747},"c",[1529,2362,1607],{"class":1542},[1529,2364,1684],{"class":1591},[1529,2366,1642],{"class":1542},[1529,2368,1676],{"class":1591},[1529,2370,1793],{"class":1542},[1529,2372,1796],{"class":1587},[1529,2374,1654],{"class":1591},[1529,2376,1648],{"class":1542},[1529,2378,2317],{"class":1542},[1529,2380,2381],{"class":1546}," []",[1529,2383,1571],{"class":1542},[1529,2385,2386,2388,2391,2393,2395,2398,2400,2402,2405,2408,2410,2412],{"class":1531,"line":1830},[1529,2387,2331],{"class":1587},[1529,2389,2390],{"class":1603}," _unsubscribe",[1529,2392,1607],{"class":1542},[1529,2394,1779],{"class":1546},[1529,2396,2397],{"class":1542},"()",[1529,2399,1796],{"class":1587},[1529,2401,1654],{"class":1591},[1529,2403,2404],{"class":1546},") ",[1529,2406,2407],{"class":1542},"|",[1529,2409,2031],{"class":1591},[1529,2411,2317],{"class":1542},[1529,2413,2414],{"class":1542}," null;\n",[1529,2416,2417],{"class":1531,"line":2118},[1529,2418,1578],{"emptyLinePlaceholder":1577},[1529,2420,2421,2424,2426,2429,2432,2434,2436,2438],{"class":1531,"line":2127},[1529,2422,2423],{"class":1587},"  constructor",[1529,2425,1744],{"class":1542},[1529,2427,2428],{"class":1587},"private",[1529,2430,2431],{"class":1747}," _config",[1529,2433,1607],{"class":1542},[1529,2435,2259],{"class":1591},[1529,2437,2092],{"class":1542},[1529,2439,2440],{"class":1542}," {}\n",[1529,2442,2443],{"class":1531,"line":2139},[1529,2444,1578],{"emptyLinePlaceholder":1577},[1529,2446,2447,2450,2452,2454,2456,2459,2462,2465,2468],{"class":1531,"line":2151},[1529,2448,2449],{"class":1587},"  get",[1529,2451,1620],{"class":1603},[1529,2453,2397],{"class":1542},[1529,2455,1543],{"class":1542},[1529,2457,2458],{"class":1535}," return",[1529,2460,2461],{"class":1542}," this.",[1529,2463,2464],{"class":1546},"_isActive",[1529,2466,2467],{"class":1542},";",[1529,2469,2470],{"class":1542}," }\n",[1529,2472,2473],{"class":1531,"line":2163},[1529,2474,1578],{"emptyLinePlaceholder":1577},[1529,2476,2477,2480,2483,2485],{"class":1531,"line":2175},[1529,2478,2479],{"class":1587},"  async",[1529,2481,2482],{"class":1603}," init",[1529,2484,2397],{"class":1542},[1529,2486,1594],{"class":1542},[1529,2488,2490,2493,2495,2498,2501,2503,2506,2508,2511,2514,2517,2519,2521,2524,2526,2528],{"class":1531,"line":2489},20,[1529,2491,2492],{"class":1535},"    if",[1529,2494,1779],{"class":1603},[1529,2496,2497],{"class":1542},"!this.",[1529,2499,2500],{"class":1546},"_config",[1529,2502,1437],{"class":1542},[1529,2504,2505],{"class":1546},"apiKey",[1529,2507,2404],{"class":1603},[1529,2509,2510],{"class":1535},"throw",[1529,2512,2513],{"class":1542}," new",[1529,2515,2516],{"class":1773}," Error",[1529,2518,1744],{"class":1603},[1529,2520,1568],{"class":1542},[1529,2522,2523],{"class":1565},"ConsentKit: apiKey is required",[1529,2525,1568],{"class":1542},[1529,2527,2092],{"class":1603},[1529,2529,1571],{"class":1542},[1529,2531,2533],{"class":1531,"line":2532},21,[1529,2534,1578],{"emptyLinePlaceholder":1577},[1529,2536,2538,2541,2544,2546,2548,2551,2553,2556,2559,2561,2563,2565,2567,2569,2571,2573],{"class":1531,"line":2537},22,[1529,2539,2540],{"class":1587},"    const",[1529,2542,2543],{"class":1546}," params",[1529,2545,2317],{"class":1542},[1529,2547,2513],{"class":1542},[1529,2549,2550],{"class":1773}," URLSearchParams",[1529,2552,1744],{"class":1603},[1529,2554,2555],{"class":1542},"{",[1529,2557,2558],{"class":1603}," key",[1529,2560,1607],{"class":1542},[1529,2562,2461],{"class":1542},[1529,2564,2500],{"class":1546},[1529,2566,1437],{"class":1542},[1529,2568,2505],{"class":1546},[1529,2570,1556],{"class":1542},[1529,2572,2092],{"class":1603},[1529,2574,1571],{"class":1542},[1529,2576,2578,2580,2582,2585,2587,2589,2592,2594,2597,2599,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622],{"class":1531,"line":2577},23,[1529,2579,2492],{"class":1535},[1529,2581,1779],{"class":1603},[1529,2583,2584],{"class":1542},"this.",[1529,2586,2500],{"class":1546},[1529,2588,1437],{"class":1542},[1529,2590,2591],{"class":1546},"region",[1529,2593,2404],{"class":1603},[1529,2595,2596],{"class":1546},"params",[1529,2598,1437],{"class":1542},[1529,2600,2601],{"class":1773},"set",[1529,2603,1744],{"class":1603},[1529,2605,1568],{"class":1542},[1529,2607,2591],{"class":1565},[1529,2609,1568],{"class":1542},[1529,2611,1550],{"class":1542},[1529,2613,2461],{"class":1542},[1529,2615,2500],{"class":1546},[1529,2617,1437],{"class":1542},[1529,2619,2591],{"class":1546},[1529,2621,2092],{"class":1603},[1529,2623,1571],{"class":1542},[1529,2625,2627],{"class":1531,"line":2626},24,[1529,2628,1578],{"emptyLinePlaceholder":1577},[1529,2630,2632,2635,2637],{"class":1531,"line":2631},25,[1529,2633,2634],{"class":1773},"    useHead",[1529,2636,1744],{"class":1603},[1529,2638,1971],{"class":1542},[1529,2640,2642,2645,2647,2650,2652,2655,2657,2659,2661,2663,2665,2668,2670,2673,2676,2679,2681,2684,2686,2689,2691,2694,2696,2699],{"class":1531,"line":2641},26,[1529,2643,2644],{"class":1603},"      script",[1529,2646,1607],{"class":1542},[1529,2648,2649],{"class":1603}," [",[1529,2651,2555],{"class":1542},[1529,2653,2654],{"class":1603}," id",[1529,2656,1607],{"class":1542},[1529,2658,1562],{"class":1542},[1529,2660,2322],{"class":1565},[1529,2662,1568],{"class":1542},[1529,2664,1550],{"class":1542},[1529,2666,2667],{"class":1603}," src",[1529,2669,1607],{"class":1542},[1529,2671,2672],{"class":1542}," `",[1529,2674,2675],{"class":1565},"https://cdn.consentkit.example/widget.js?",[1529,2677,2678],{"class":1542},"${",[1529,2680,2596],{"class":1546},[1529,2682,2683],{"class":1542},"}`",[1529,2685,1550],{"class":1542},[1529,2687,2688],{"class":1603}," async",[1529,2690,1607],{"class":1542},[1529,2692,2693],{"class":2339}," true",[1529,2695,1556],{"class":1542},[1529,2697,2698],{"class":1603},"]",[1529,2700,2701],{"class":1542},",\n",[1529,2703,2705,2708,2710],{"class":1531,"line":2704},27,[1529,2706,2707],{"class":1542},"    }",[1529,2709,2092],{"class":1603},[1529,2711,1571],{"class":1542},[1529,2713,2715],{"class":1531,"line":2714},28,[1529,2716,1578],{"emptyLinePlaceholder":1577},[1529,2718,2720,2722,2724,2726,2728,2731,2733,2736,2738],{"class":1531,"line":2719},29,[1529,2721,2492],{"class":1535},[1529,2723,1779],{"class":1603},[1529,2725,1536],{"class":1535},[1529,2727,1437],{"class":1542},[1529,2729,2730],{"class":1546},"meta",[1529,2732,1437],{"class":1542},[1529,2734,2735],{"class":1546},"client",[1529,2737,2404],{"class":1603},[1529,2739,1971],{"class":1542},[1529,2741,2743],{"class":1531,"line":2742},30,[1529,2744,2746],{"class":2745},"sHwdD","      // The widget may load before or after this plugin runs; handle both.\n",[1529,2748,2750,2753,2756,2758,2760,2762],{"class":1531,"line":2749},31,[1529,2751,2752],{"class":1587},"      const",[1529,2754,2755],{"class":1546}," subscribe",[1529,2757,2317],{"class":1542},[1529,2759,2101],{"class":1542},[1529,2761,1796],{"class":1587},[1529,2763,1594],{"class":1542},[1529,2765,2767,2770,2773,2775,2778,2780,2782,2785,2788,2790,2792,2794,2796,2798,2800,2802,2804,2806],{"class":1531,"line":2766},32,[1529,2768,2769],{"class":1542},"        this.",[1529,2771,2772],{"class":1546},"_unsubscribe",[1529,2774,2317],{"class":1542},[1529,2776,2777],{"class":1546}," window",[1529,2779,1437],{"class":1542},[1529,2781,1954],{"class":1546},[1529,2783,2784],{"class":1542},"!.",[1529,2786,2787],{"class":1773},"on",[1529,2789,1744],{"class":1603},[1529,2791,1568],{"class":1542},[1529,2793,2072],{"class":1565},[1529,2795,1568],{"class":1542},[1529,2797,1550],{"class":1542},[1529,2799,1779],{"class":1542},[1529,2801,1885],{"class":1747},[1529,2803,2092],{"class":1542},[1529,2805,1796],{"class":1587},[1529,2807,1594],{"class":1542},[1529,2809,2811,2814,2817,2819,2821,2824,2826,2828,2831],{"class":1531,"line":2810},33,[1529,2812,2813],{"class":1542},"          this.",[1529,2815,2816],{"class":1773},"_notify",[1529,2818,1744],{"class":1603},[1529,2820,2584],{"class":1542},[1529,2822,2823],{"class":1773},"mapConsent",[1529,2825,1744],{"class":1603},[1529,2827,1885],{"class":1546},[1529,2829,2830],{"class":1603},"))",[1529,2832,1571],{"class":1542},[1529,2834,2836,2839,2841],{"class":1531,"line":2835},34,[1529,2837,2838],{"class":1542},"        }",[1529,2840,2092],{"class":1603},[1529,2842,1571],{"class":1542},[1529,2844,2846,2849,2852,2854,2856,2858,2860,2862,2865,2867],{"class":1531,"line":2845},35,[1529,2847,2848],{"class":1587},"        const",[1529,2850,2851],{"class":1546}," initial",[1529,2853,2317],{"class":1542},[1529,2855,2777],{"class":1546},[1529,2857,1437],{"class":1542},[1529,2859,1954],{"class":1546},[1529,2861,2784],{"class":1542},[1529,2863,2864],{"class":1773},"getConsent",[1529,2866,2397],{"class":1603},[1529,2868,1571],{"class":1542},[1529,2870,2872,2875,2877,2880,2882,2884,2886,2888,2890,2892,2894,2896,2898],{"class":1531,"line":2871},36,[1529,2873,2874],{"class":1535},"        if",[1529,2876,1779],{"class":1603},[1529,2878,2879],{"class":1546},"initial",[1529,2881,2404],{"class":1603},[1529,2883,2584],{"class":1542},[1529,2885,2816],{"class":1773},[1529,2887,1744],{"class":1603},[1529,2889,2584],{"class":1542},[1529,2891,2823],{"class":1773},[1529,2893,1744],{"class":1603},[1529,2895,2879],{"class":1546},[1529,2897,2830],{"class":1603},[1529,2899,1571],{"class":1542},[1529,2901,2903],{"class":1531,"line":2902},37,[1529,2904,2905],{"class":1542},"      };\n",[1529,2907,2909],{"class":1531,"line":2908},38,[1529,2910,1578],{"emptyLinePlaceholder":1577},[1529,2912,2914,2917,2919,2922,2924,2926,2928,2931,2933],{"class":1531,"line":2913},39,[1529,2915,2916],{"class":1535},"      if",[1529,2918,1779],{"class":1603},[1529,2920,2921],{"class":1546},"window",[1529,2923,1437],{"class":1542},[1529,2925,1954],{"class":1546},[1529,2927,2404],{"class":1603},[1529,2929,2930],{"class":1773},"subscribe",[1529,2932,2397],{"class":1603},[1529,2934,1571],{"class":1542},[1529,2936,2938,2941,2943,2945,2948,2950,2952,2954,2956,2958,2960,2962,2964,2967,2969,2971,2973,2975],{"class":1531,"line":2937},40,[1529,2939,2940],{"class":1535},"      else",[1529,2942,2777],{"class":1546},[1529,2944,1437],{"class":1542},[1529,2946,2947],{"class":1773},"addEventListener",[1529,2949,1744],{"class":1603},[1529,2951,1568],{"class":1542},[1529,2953,2187],{"class":1565},[1529,2955,1568],{"class":1542},[1529,2957,1550],{"class":1542},[1529,2959,2755],{"class":1546},[1529,2961,1550],{"class":1542},[1529,2963,1543],{"class":1542},[1529,2965,2966],{"class":1603}," once",[1529,2968,1607],{"class":1542},[1529,2970,2693],{"class":2339},[1529,2972,1556],{"class":1542},[1529,2974,2092],{"class":1603},[1529,2976,1571],{"class":1542},[1529,2978,2980],{"class":1531,"line":2979},41,[1529,2981,2982],{"class":1542},"    }\n",[1529,2984,2986],{"class":1531,"line":2985},42,[1529,2987,1578],{"emptyLinePlaceholder":1577},[1529,2989,2991,2994,2996,2998,3000],{"class":1531,"line":2990},43,[1529,2992,2993],{"class":1542},"    this.",[1529,2995,2464],{"class":1546},[1529,2997,2317],{"class":1542},[1529,2999,2693],{"class":2339},[1529,3001,1571],{"class":1542},[1529,3003,3005],{"class":1531,"line":3004},44,[1529,3006,1999],{"class":1542},[1529,3008,3010],{"class":1531,"line":3009},45,[1529,3011,1578],{"emptyLinePlaceholder":1577},[1529,3013,3015,3017,3019,3021,3023,3025,3027],{"class":1531,"line":3014},46,[1529,3016,1662],{"class":1603},[1529,3018,1636],{"class":1542},[1529,3020,1684],{"class":1591},[1529,3022,1642],{"class":1542},[1529,3024,1676],{"class":1591},[1529,3026,1648],{"class":1542},[1529,3028,1594],{"class":1542},[1529,3030,3032,3034,3036,3038,3040,3042,3044,3046,3049,3051,3053,3055,3057],{"class":1531,"line":3031},47,[1529,3033,2492],{"class":1535},[1529,3035,1779],{"class":1603},[1529,3037,1536],{"class":1535},[1529,3039,1437],{"class":1542},[1529,3041,2730],{"class":1546},[1529,3043,1437],{"class":1542},[1529,3045,2735],{"class":1546},[1529,3047,3048],{"class":1542}," &&",[1529,3050,2777],{"class":1546},[1529,3052,1437],{"class":1542},[1529,3054,1954],{"class":1546},[1529,3056,2404],{"class":1603},[1529,3058,1971],{"class":1542},[1529,3060,3062,3064,3067,3069,3071,3073,3075,3077,3079,3081],{"class":1531,"line":3061},48,[1529,3063,2752],{"class":1587},[1529,3065,3066],{"class":1546}," current",[1529,3068,2317],{"class":1542},[1529,3070,2777],{"class":1546},[1529,3072,1437],{"class":1542},[1529,3074,1954],{"class":1546},[1529,3076,1437],{"class":1542},[1529,3078,2864],{"class":1773},[1529,3080,2397],{"class":1603},[1529,3082,1571],{"class":1542},[1529,3084,3086,3088,3090,3093,3095,3098,3100,3102,3104,3106,3108],{"class":1531,"line":3085},49,[1529,3087,2916],{"class":1535},[1529,3089,1779],{"class":1603},[1529,3091,3092],{"class":1546},"current",[1529,3094,2404],{"class":1603},[1529,3096,3097],{"class":1535},"return",[1529,3099,2461],{"class":1542},[1529,3101,2823],{"class":1773},[1529,3103,1744],{"class":1603},[1529,3105,3092],{"class":1546},[1529,3107,2092],{"class":1603},[1529,3109,1571],{"class":1542},[1529,3111,3113],{"class":1531,"line":3112},50,[1529,3114,2982],{"class":1542},[1529,3116,3118,3121,3123,3126,3128,3130,3133],{"class":1531,"line":3117},51,[1529,3119,3120],{"class":1535},"    return",[1529,3122,1543],{"class":1542},[1529,3124,3125],{"class":1603}," necessary",[1529,3127,1607],{"class":1542},[1529,3129,2693],{"class":2339},[1529,3131,3132],{"class":1542}," };",[1529,3134,3135],{"class":2745}," // SSR or pre-load: only essential is safe by default.\n",[1529,3137,3139],{"class":1531,"line":3138},52,[1529,3140,1999],{"class":1542},[1529,3142,3144],{"class":1531,"line":3143},53,[1529,3145,1578],{"emptyLinePlaceholder":1577},[1529,3147,3149,3151,3153,3155,3157,3159,3161,3163,3165],{"class":1531,"line":3148},54,[1529,3150,1741],{"class":1603},[1529,3152,1744],{"class":1542},[1529,3154,1748],{"class":1747},[1529,3156,1607],{"class":1542},[1529,3158,1753],{"class":1542},[1529,3160,1553],{"class":1591},[1529,3162,1758],{"class":1542},[1529,3164,1625],{"class":1591},[1529,3166,1594],{"class":1542},[1529,3168,3170,3172,3174,3177,3180,3182,3185,3188,3190],{"class":1531,"line":3169},55,[1529,3171,3120],{"class":1535},[1529,3173,2461],{"class":1542},[1529,3175,3176],{"class":1773},"getConsentState",[1529,3178,3179],{"class":1603},"()[",[1529,3181,1748],{"class":1546},[1529,3183,3184],{"class":1603},"] ",[1529,3186,3187],{"class":1542},"??",[1529,3189,2340],{"class":2339},[1529,3191,1571],{"class":1542},[1529,3193,3195],{"class":1531,"line":3194},56,[1529,3196,1999],{"class":1542},[1529,3198,3200],{"class":1531,"line":3199},57,[1529,3201,1578],{"emptyLinePlaceholder":1577},[1529,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231,3233],{"class":1531,"line":3204},58,[1529,3206,1768],{"class":1603},[1529,3208,1744],{"class":1542},[1529,3210,1774],{"class":1773},[1529,3212,1607],{"class":1542},[1529,3214,1779],{"class":1542},[1529,3216,2360],{"class":1747},[1529,3218,1607],{"class":1542},[1529,3220,1684],{"class":1591},[1529,3222,1642],{"class":1542},[1529,3224,1676],{"class":1591},[1529,3226,1793],{"class":1542},[1529,3228,1796],{"class":1587},[1529,3230,1654],{"class":1591},[1529,3232,2092],{"class":1542},[1529,3234,1594],{"class":1542},[1529,3236,3238,3240,3243,3245,3248,3250,3252,3254],{"class":1531,"line":3237},59,[1529,3239,2993],{"class":1542},[1529,3241,3242],{"class":1546},"_callbacks",[1529,3244,1437],{"class":1542},[1529,3246,3247],{"class":1773},"push",[1529,3249,1744],{"class":1603},[1529,3251,1774],{"class":1546},[1529,3253,2092],{"class":1603},[1529,3255,1571],{"class":1542},[1529,3257,3259],{"class":1531,"line":3258},60,[1529,3260,1999],{"class":1542},[1529,3262,3264],{"class":1531,"line":3263},61,[1529,3265,1578],{"emptyLinePlaceholder":1577},[1529,3267,3269,3271,3274,3276],{"class":1531,"line":3268},62,[1529,3270,2479],{"class":1587},[1529,3272,3273],{"class":1603}," showConsentOverlay",[1529,3275,2397],{"class":1542},[1529,3277,1594],{"class":1542},[1529,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299,3301,3303,3306,3309,3311],{"class":1531,"line":3280},63,[1529,3282,2492],{"class":1535},[1529,3284,1779],{"class":1603},[1529,3286,1536],{"class":1535},[1529,3288,1437],{"class":1542},[1529,3290,2730],{"class":1546},[1529,3292,1437],{"class":1542},[1529,3294,2735],{"class":1546},[1529,3296,2404],{"class":1603},[1529,3298,2921],{"class":1546},[1529,3300,1437],{"class":1542},[1529,3302,1954],{"class":1546},[1529,3304,3305],{"class":1542},"?.",[1529,3307,3308],{"class":1773},"openBanner",[1529,3310,2397],{"class":1603},[1529,3312,1571],{"class":1542},[1529,3314,3316],{"class":1531,"line":3315},64,[1529,3317,1999],{"class":1542},[1529,3319,3321],{"class":1531,"line":3320},65,[1529,3322,1578],{"emptyLinePlaceholder":1577},[1529,3324,3326,3328,3331,3333],{"class":1531,"line":3325},66,[1529,3327,2479],{"class":1587},[1529,3329,3330],{"class":1603}," renewConsent",[1529,3332,2397],{"class":1542},[1529,3334,1594],{"class":1542},[1529,3336,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362,3365,3367],{"class":1531,"line":3337},67,[1529,3339,2492],{"class":1535},[1529,3341,1779],{"class":1603},[1529,3343,1536],{"class":1535},[1529,3345,1437],{"class":1542},[1529,3347,2730],{"class":1546},[1529,3349,1437],{"class":1542},[1529,3351,2735],{"class":1546},[1529,3353,2404],{"class":1603},[1529,3355,2921],{"class":1546},[1529,3357,1437],{"class":1542},[1529,3359,1954],{"class":1546},[1529,3361,3305],{"class":1542},[1529,3363,3364],{"class":1773},"openPreferences",[1529,3366,2397],{"class":1603},[1529,3368,1571],{"class":1542},[1529,3370,3372],{"class":1531,"line":3371},68,[1529,3373,1999],{"class":1542},[1529,3375,3377],{"class":1531,"line":3376},69,[1529,3378,1578],{"emptyLinePlaceholder":1577},[1529,3380,3382,3384,3387,3389],{"class":1531,"line":3381},70,[1529,3383,2479],{"class":1587},[1529,3385,3386],{"class":1603}," destroy",[1529,3388,2397],{"class":1542},[1529,3390,1594],{"class":1542},[1529,3392,3394,3396,3398,3400,3402],{"class":1531,"line":3393},71,[1529,3395,2993],{"class":1542},[1529,3397,2772],{"class":1773},[1529,3399,3305],{"class":1542},[1529,3401,2397],{"class":1603},[1529,3403,1571],{"class":1542},[1529,3405,3407,3409,3411,3413],{"class":1531,"line":3406},72,[1529,3408,2993],{"class":1542},[1529,3410,2772],{"class":1546},[1529,3412,2317],{"class":1542},[1529,3414,2414],{"class":1542},[1529,3416,3418,3420,3422,3424,3426],{"class":1531,"line":3417},73,[1529,3419,2993],{"class":1542},[1529,3421,3242],{"class":1546},[1529,3423,2317],{"class":1542},[1529,3425,2381],{"class":1603},[1529,3427,1571],{"class":1542},[1529,3429,3431,3433,3435,3437,3439],{"class":1531,"line":3430},74,[1529,3432,2993],{"class":1542},[1529,3434,2464],{"class":1546},[1529,3436,2317],{"class":1542},[1529,3438,2340],{"class":2339},[1529,3440,1571],{"class":1542},[1529,3442,3444],{"class":1531,"line":3443},75,[1529,3445,1999],{"class":1542},[1529,3447,3449],{"class":1531,"line":3448},76,[1529,3450,1578],{"emptyLinePlaceholder":1577},[1529,3452,3454],{"class":1531,"line":3453},77,[1529,3455,3456],{"class":2745},"  // The contract boundary: ConsentKit's category names become Laioutr's.\n",[1529,3458,3460,3462,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483],{"class":1531,"line":3459},78,[1529,3461,2331],{"class":1587},[1529,3463,3464],{"class":1603}," mapConsent",[1529,3466,1744],{"class":1542},[1529,3468,2360],{"class":1747},[1529,3470,1607],{"class":1542},[1529,3472,2026],{"class":1591},[1529,3474,1758],{"class":1542},[1529,3476,1684],{"class":1591},[1529,3478,1642],{"class":1542},[1529,3480,1676],{"class":1591},[1529,3482,1648],{"class":1542},[1529,3484,1594],{"class":1542},[1529,3486,3488,3490,3492,3494,3496,3499,3501,3504,3506,3509,3511,3513,3515,3518,3520,3523,3525,3527,3529,3532,3534,3537,3539,3541,3543,3546],{"class":1531,"line":3487},79,[1529,3489,3120],{"class":1535},[1529,3491,1543],{"class":1542},[1529,3493,3125],{"class":1603},[1529,3495,1607],{"class":1542},[1529,3497,3498],{"class":1546}," c",[1529,3500,1437],{"class":1542},[1529,3502,3503],{"class":1546},"essential",[1529,3505,1550],{"class":1542},[1529,3507,3508],{"class":1603}," functional",[1529,3510,1607],{"class":1542},[1529,3512,3498],{"class":1546},[1529,3514,1437],{"class":1542},[1529,3516,3517],{"class":1546},"functional",[1529,3519,1550],{"class":1542},[1529,3521,3522],{"class":1603}," statistics",[1529,3524,1607],{"class":1542},[1529,3526,3498],{"class":1546},[1529,3528,1437],{"class":1542},[1529,3530,3531],{"class":1546},"analytics",[1529,3533,1550],{"class":1542},[1529,3535,3536],{"class":1603}," marketing",[1529,3538,1607],{"class":1542},[1529,3540,3498],{"class":1546},[1529,3542,1437],{"class":1542},[1529,3544,3545],{"class":1546},"ads",[1529,3547,3548],{"class":1542}," };\n",[1529,3550,3552],{"class":1531,"line":3551},80,[1529,3553,1999],{"class":1542},[1529,3555,3557],{"class":1531,"line":3556},81,[1529,3558,1578],{"emptyLinePlaceholder":1577},[1529,3560,3562,3564,3567,3569,3571,3573,3575,3577,3579,3581],{"class":1531,"line":3561},82,[1529,3563,2331],{"class":1587},[1529,3565,3566],{"class":1603}," _notify",[1529,3568,1744],{"class":1542},[1529,3570,1782],{"class":1747},[1529,3572,1607],{"class":1542},[1529,3574,1684],{"class":1591},[1529,3576,1642],{"class":1542},[1529,3578,1676],{"class":1591},[1529,3580,1793],{"class":1542},[1529,3582,1594],{"class":1542},[1529,3584,3586,3589,3591,3594,3597,3600,3602,3604,3606,3609,3611,3613,3615],{"class":1531,"line":3585},83,[1529,3587,3588],{"class":1535},"    for",[1529,3590,1779],{"class":1603},[1529,3592,3593],{"class":1587},"const",[1529,3595,3596],{"class":1546}," cb",[1529,3598,3599],{"class":1542}," of",[1529,3601,2461],{"class":1542},[1529,3603,3242],{"class":1546},[1529,3605,2404],{"class":1603},[1529,3607,3608],{"class":1773},"cb",[1529,3610,1744],{"class":1603},[1529,3612,1782],{"class":1546},[1529,3614,2092],{"class":1603},[1529,3616,1571],{"class":1542},[1529,3618,3620],{"class":1531,"line":3619},84,[1529,3621,1999],{"class":1542},[1529,3623,3625],{"class":1531,"line":3624},85,[1529,3626,1833],{"class":1542},[1408,3628,3630],{"id":3629},"patterns-worth-stealing","Patterns worth stealing",[1413,3632,3633],{},"Even if your CMP looks nothing like ConsentKit, the same handful of moves apply:",[3635,3636,3637,3643,3649,3655,3663,3672],"ul",{},[1460,3638,3639,3640,3642],{},"Inject the CMP script through ",[1422,3641,1877],{}," so it gets the same SSR/hydration handling as any other Nuxt-managed tag.",[1460,3644,3645,3646,3648],{},"Validate required configuration in ",[1422,3647,1424],{}," and throw on missing values. The store catches the error, logs it, and deactivates the adapter. Treat this as the right way to fail loudly.",[1460,3650,3651,3652,3654],{},"Handle both load orderings. If the CMP's global is already on ",[1422,3653,2921],{}," when your plugin runs, subscribe immediately. Otherwise wait for the CMP's \"ready\" event. Either case must end with you holding a subscription.",[1460,3656,3657,3658,1847,3660,3662],{},"Keep all category-name translation in one private method. The contract boundary belongs in one place, not sprinkled across ",[1422,3659,1424],{},[1422,3661,1428],{},", and the change handler.",[1460,3664,3665,3666,1471,3669,3671],{},"Return ",[1422,3667,3668],{},"{ necessary: true }",[1422,3670,1428],{}," when you cannot reconstruct consent on the server (or before the script has loaded). The client overwrites it once the CMP reports in, and consumers see safe defaults until then.",[1460,3673,3674,3675,3678,3679,3681,3682,3684],{},"Save every subscription handle (the function returned by ",[1422,3676,3677],{},"on(...)",", the ",[1422,3680,2947],{}," reference) and release them in ",[1422,3683,1910],{},". Without this, deactivating the adapter (or hot-reloading in dev) leaks handlers.",[1413,3686,3687,3688,3690,3691,3694,3695,3698,3699,3701],{},"If your CMP fires its consent events synchronously during its own init script (before any client plugin can attach), the standard fix is to inject an inline bootstrap script via ",[1422,3689,1877],{}," with ",[1422,3692,3693],{},"tagPriority: 1",". The bootstrap parses before the CMP and accumulates the early event burst into a ",[1422,3696,3697],{},"window.__*"," global that ",[1422,3700,1428],{}," reads later.",[1408,3703,3705],{"id":3704},"notes-on-ssr-late-init-and-cleanup","Notes on SSR, late init, and cleanup",[1413,3707,3708],{},"A few constraints are easy to miss:",[3635,3710,3711,3736,3751,3757],{},[1460,3712,3713,3715,3716,3719,3720,3722,3723,1847,3725,3728,3729,3731,3732,3735],{},[1422,3714,1877],{}," and ",[1422,3717,3718],{},"useCookie"," work on both the server and the client. Call them unconditionally inside ",[1422,3721,1424],{},". Only ",[1422,3724,2921],{},[1422,3726,3727],{},"document",", and ",[1422,3730,2947],{}," need an ",[1422,3733,3734],{},"import.meta.client"," guard.",[1460,3737,3738,3739,3741,3742,3744,3745,3747,3748,3750],{},"The store calls ",[1422,3740,1424],{}," first, then ",[1422,3743,1428],{},", then registers its own callback through ",[1422,3746,1432],{},". The order matters when you reason about which payloads arrive at the store before activation completes (none) versus after (every subsequent ",[1422,3749,2816],{}," call).",[1460,3752,3753,3754,3756],{},"If your CMP exposes consent through a server-readable cookie, ",[1422,3755,1428],{}," can read it on SSR and the first byte renders with the correct state. If it does not, return the denied baseline and let the client correct it.",[1460,3758,3759,3761,3762,3765,3766,3769],{},[1422,3760,1910],{}," only runs when the store deactivates the adapter (an explicit ",[1422,3763,3764],{},"deactivateAdapter()"," call or a swap to a different adapter via ",[1422,3767,3768],{},"activateAdapter()","). It does not run on Nuxt page navigation. Adapters that need per-route cleanup must arrange that themselves.",[1413,3771,3772,3773,3776],{},"Once your adapter is active, ",[1422,3774,3775],{},"useConsentStore().hasCategoryConsent('statistics')"," works in every consumer (your code, the tracking store, the GTM app) without anyone knowing which CMP you wired in.",[1408,3778,3780],{"id":3779},"related","Related",[3635,3782,3783,3788,3797,3803,3809],{},[1460,3784,3785,3787],{},[1417,3786,404],{"href":405},". Scaffold the Nuxt module, runtime, and plugin skeleton your adapter plugs into.",[1460,3789,3790,3792,3793,3796],{},[1417,3791,400],{"href":401},". How ",[1422,3794,3795],{},"runtimeConfig",", options, and per-app keys flow into your plugin.",[1460,3798,3799,3802],{},[1417,3800,3801],{"href":157},"Consent Management feature overview",". The consumer-facing side of the same store.",[1460,3804,3805,3808],{},[1417,3806,3807],{"href":466},"Cookiebot app",". Reference implementation for cookie-based CMPs.",[1460,3810,3811,3814],{},[1417,3812,3813],{"href":462},"CCM19 app",". Reference implementation for event-based CMPs with custom purposes.",[3816,3817,3818],"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 .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 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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}",{"title":1525,"searchDepth":1574,"depth":1574,"links":3820},[3821,3822,3823,3824,3825,3826,3827],{"id":1410,"depth":1574,"text":1411},{"id":1507,"depth":1574,"text":1508},{"id":1920,"depth":1574,"text":1921},{"id":1947,"depth":1574,"text":1948},{"id":3629,"depth":1574,"text":3630},{"id":3704,"depth":1574,"text":3705},{"id":3779,"depth":1574,"text":3780},"How to build a Laioutr app that integrates a Consent Management Platform (CMP) by implementing the ConsentAdapter contract from frontend-core.","md",{},{"title":3832,"description":3828},"Consent Adapters | Laioutr",{"loc":421,"lastmod":3834,"changefreq":3835,"priority":1532},"2026-04-27","monthly","z7wd7EeKvf-rrujExywdHoZxUDSMIzFLr9mhjcJv190",[3838,3840],{"title":416,"path":417,"stem":418,"description":3839,"children":-1},"Conventions and quality guidelines for developing Laioutr apps. Use these standards to keep app code consistent, maintainable, and aligned with the Laioutr ecosystem.",{"title":424,"path":425,"stem":426,"description":3841,"children":-1},"What a connector app needs to implement for Laioutr and Laioutr UI compatibility, and what existing connectors already provide.",1777895370403]