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