[{"data":1,"prerenderedAt":6274},["ShallowReactive",2],{"navigation_docs":3,"-docs-guides-storefronts-build-a-block":2399},[4,82,446,500,736,2117],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started\u002Findex",[9,10,17,23,30,37,44,51,57,63,69,75],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13,"children":14,"icon":16},"Apps and Sites","\u002Fdocs\u002Fgetting-started\u002Fapps-and-sites","docs\u002Fgetting-started\u002Fapps-and-sites\u002Findex",[15],{"title":11,"path":12,"stem":13,"icon":16},"i-lucide-columns-2",{"title":18,"path":19,"stem":20,"children":21},"Architecture Overview","\u002Fdocs\u002Fgetting-started\u002Farchitecture","docs\u002Fgetting-started\u002Farchitecture\u002Findex",[22],{"title":18,"path":19,"stem":20},{"title":24,"path":25,"stem":26,"children":27,"icon":29},"Bring an existing frontend","\u002Fdocs\u002Fgetting-started\u002Fbring-an-existing-frontend","docs\u002Fgetting-started\u002Fbring-an-existing-frontend\u002Findex",[28],{"title":24,"path":25,"stem":26,"icon":29},"i-lucide-arrow-right-left",{"title":31,"path":32,"stem":33,"children":34,"icon":36},"Concepts","\u002Fdocs\u002Fgetting-started\u002Fconcepts","docs\u002Fgetting-started\u002Fconcepts\u002Findex",[35],{"title":31,"path":32,"stem":33,"icon":36},"i-lucide-shapes",{"title":38,"path":39,"stem":40,"children":41,"icon":43},"Frontend stacks","\u002Fdocs\u002Fgetting-started\u002Ffrontend-stacks","docs\u002Fgetting-started\u002Ffrontend-stacks\u002Findex",[42],{"title":38,"path":39,"stem":40,"icon":43},"i-lucide-layers",{"title":45,"path":46,"stem":47,"children":48,"icon":50},"Get Help","\u002Fdocs\u002Fgetting-started\u002Fget-help","docs\u002Fgetting-started\u002Fget-help\u002Findex",[49],{"title":45,"path":46,"stem":47,"icon":50},"i-lucide-life-buoy",{"title":52,"path":53,"stem":54,"children":55},"Glossary","\u002Fdocs\u002Fgetting-started\u002Fglossary","docs\u002Fgetting-started\u002Fglossary\u002Findex",[56],{"title":52,"path":53,"stem":54},{"title":58,"path":59,"stem":60,"children":61},"Platform Overview","\u002Fdocs\u002Fgetting-started\u002Fplatform-overview","docs\u002Fgetting-started\u002Fplatform-overview\u002Findex",[62],{"title":58,"path":59,"stem":60},{"title":64,"path":65,"stem":66,"children":67},"Prerequisites","\u002Fdocs\u002Fgetting-started\u002Fprerequisites","docs\u002Fgetting-started\u002Fprerequisites\u002Findex",[68],{"title":64,"path":65,"stem":66},{"title":70,"path":71,"stem":72,"children":73},"Your First App in 15 Minutes","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002Fgetting-started\u002Fquick-start\u002Findex",[74],{"title":70,"path":71,"stem":72},{"title":76,"path":77,"stem":78,"children":79,"icon":81},"Security and trust","\u002Fdocs\u002Fgetting-started\u002Fsecurity-and-trust","docs\u002Fgetting-started\u002Fsecurity-and-trust\u002Findex",[80],{"title":76,"path":77,"stem":78,"icon":81},"i-lucide-shield-check",{"title":83,"path":84,"stem":85,"children":86},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides\u002Findex",[87,88,151,249,256,310,364,391],{"title":83,"path":84,"stem":85},{"title":89,"path":90,"stem":91,"children":92,"icon":94},"Build an App","\u002Fdocs\u002Fguides\u002Fapps","docs\u002Fguides\u002Fapps\u002Findex",[93,95,102,109,116,123,130,137,144],{"title":89,"path":90,"stem":91,"icon":94},"i-lucide-layout-grid",{"title":96,"path":97,"stem":98,"children":99,"icon":101},"Give your App a Cockpit screen","\u002Fdocs\u002Fguides\u002Fapps\u002Fadd-a-cockpit-screen","docs\u002Fguides\u002Fapps\u002Fadd-a-cockpit-screen\u002Findex",[100],{"title":96,"path":97,"stem":98,"icon":101},"i-lucide-layout-dashboard",{"title":103,"path":104,"stem":105,"children":106,"icon":108},"Add a data model","\u002Fdocs\u002Fguides\u002Fapps\u002Fadd-a-data-model","docs\u002Fguides\u002Fapps\u002Fadd-a-data-model\u002Findex",[107],{"title":103,"path":104,"stem":105,"icon":108},"i-lucide-database",{"title":110,"path":111,"stem":112,"children":113,"icon":115},"Build your first App","\u002Fdocs\u002Fguides\u002Fapps\u002Fbuild-your-first-app","docs\u002Fguides\u002Fapps\u002Fbuild-your-first-app\u002Findex",[114],{"title":110,"path":111,"stem":112,"icon":115},"i-lucide-hammer",{"title":117,"path":118,"stem":119,"children":120,"icon":122},"Deploy and verify an App","\u002Fdocs\u002Fguides\u002Fapps\u002Fdeploy-with-the-cli","docs\u002Fguides\u002Fapps\u002Fdeploy-with-the-cli\u002Findex",[121],{"title":117,"path":118,"stem":119,"icon":122},"i-lucide-square-terminal",{"title":124,"path":125,"stem":126,"children":127,"icon":129},"Publish a business event from your App","\u002Fdocs\u002Fguides\u002Fapps\u002Fpublish-a-business-event","docs\u002Fguides\u002Fapps\u002Fpublish-a-business-event\u002Findex",[128],{"title":124,"path":125,"stem":126,"icon":129},"i-lucide-megaphone",{"title":131,"path":132,"stem":133,"children":134,"icon":136},"Publish on the Marketplace","\u002Fdocs\u002Fguides\u002Fapps\u002Fpublish-on-the-marketplace","docs\u002Fguides\u002Fapps\u002Fpublish-on-the-marketplace\u002Findex",[135],{"title":131,"path":132,"stem":133,"icon":136},"i-lucide-store",{"title":138,"path":139,"stem":140,"children":141,"icon":143},"React to events and run scheduled work in your App","\u002Fdocs\u002Fguides\u002Fapps\u002Freact-to-events-and-run-scheduled-work","docs\u002Fguides\u002Fapps\u002Freact-to-events-and-run-scheduled-work\u002Findex",[142],{"title":138,"path":139,"stem":140,"icon":143},"i-lucide-timer",{"title":145,"path":146,"stem":147,"children":148,"icon":150},"Ship a schema change","\u002Fdocs\u002Fguides\u002Fapps\u002Fship-a-schema-change","docs\u002Fguides\u002Fapps\u002Fship-a-schema-change\u002Findex",[149],{"title":145,"path":146,"stem":147,"icon":150},"i-lucide-git-branch",{"title":152,"path":153,"stem":154,"children":155,"icon":157},"Set up selling","\u002Fdocs\u002Fguides\u002Fcommerce","docs\u002Fguides\u002Fcommerce\u002Findex",[156,158,165,172,179,186,193,200,207,214,221,228,235,242],{"title":152,"path":153,"stem":154,"icon":157},"i-lucide-shopping-cart",{"title":159,"path":160,"stem":161,"children":162,"icon":164},"Set up B2B pricing","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fb2b-pricing","docs\u002Fguides\u002Fcommerce\u002Fb2b-pricing\u002Findex",[163],{"title":159,"path":160,"stem":161,"icon":164},"i-lucide-circle-dollar-sign",{"title":166,"path":167,"stem":168,"children":169,"icon":171},"Give buyer staff the right permissions","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fbuyer-permissions","docs\u002Fguides\u002Fcommerce\u002Fbuyer-permissions\u002Findex",[170],{"title":166,"path":167,"stem":168,"icon":171},"i-lucide-user-cog",{"title":173,"path":174,"stem":175,"children":176,"icon":178},"Confirm invoice payments","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fconfirm-invoice-payments","docs\u002Fguides\u002Fcommerce\u002Fconfirm-invoice-payments\u002Findex",[177],{"title":173,"path":174,"stem":175,"icon":178},"i-lucide-receipt",{"title":180,"path":181,"stem":182,"children":183,"icon":185},"Model a catalog with attributes, families and variants","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fmodel-a-catalog","docs\u002Fguides\u002Fcommerce\u002Fmodel-a-catalog\u002Findex",[184],{"title":180,"path":181,"stem":182,"icon":185},"i-lucide-boxes",{"title":187,"path":188,"stem":189,"children":190,"icon":192},"Order and quote numbers","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fnumber-ranges","docs\u002Fguides\u002Fcommerce\u002Fnumber-ranges\u002Findex",[191],{"title":187,"path":188,"stem":189,"icon":192},"i-lucide-hash",{"title":194,"path":195,"stem":196,"children":197,"icon":199},"Manage product images and documents","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fproduct-media","docs\u002Fguides\u002Fcommerce\u002Fproduct-media\u002Findex",[198],{"title":194,"path":195,"stem":196,"icon":199},"i-lucide-image",{"title":201,"path":202,"stem":203,"children":204,"icon":206},"Run promotions and voucher codes","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fpromotions-and-vouchers","docs\u002Fguides\u002Fcommerce\u002Fpromotions-and-vouchers\u002Findex",[205],{"title":201,"path":202,"stem":203,"icon":206},"i-lucide-ticket-percent",{"title":208,"path":209,"stem":210,"children":211,"icon":213},"Set up purchase approvals","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fpurchase-approvals","docs\u002Fguides\u002Fcommerce\u002Fpurchase-approvals\u002Findex",[212],{"title":208,"path":209,"stem":210,"icon":213},"i-lucide-stamp",{"title":215,"path":216,"stem":217,"children":218,"icon":220},"Turn an accepted quote into an order","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fquotes-to-orders","docs\u002Fguides\u002Fcommerce\u002Fquotes-to-orders\u002Findex",[219],{"title":215,"path":216,"stem":217,"icon":220},"i-lucide-handshake",{"title":222,"path":223,"stem":224,"children":225,"icon":227},"Build categories from rules","\u002Fdocs\u002Fguides\u002Fcommerce\u002Frule-based-categories","docs\u002Fguides\u002Fcommerce\u002Frule-based-categories\u002Findex",[226],{"title":222,"path":223,"stem":224,"icon":227},"i-lucide-list-filter",{"title":229,"path":230,"stem":231,"children":232,"icon":234},"Ship, cancel and return an order","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fship-cancel-and-return","docs\u002Fguides\u002Fcommerce\u002Fship-cancel-and-return\u002Findex",[233],{"title":229,"path":230,"stem":231,"icon":234},"i-lucide-package-check",{"title":236,"path":237,"stem":238,"children":239,"icon":241},"Set up shipping rates and tax","\u002Fdocs\u002Fguides\u002Fcommerce\u002Fshipping-rates","docs\u002Fguides\u002Fcommerce\u002Fshipping-rates\u002Findex",[240],{"title":236,"path":237,"stem":238,"icon":241},"i-lucide-truck",{"title":243,"path":244,"stem":245,"children":246,"icon":248},"Connect a payment provider and take a test payment","\u002Fdocs\u002Fguides\u002Fcommerce\u002Ftest-payments","docs\u002Fguides\u002Fcommerce\u002Ftest-payments\u002Findex",[247],{"title":243,"path":244,"stem":245,"icon":248},"i-lucide-credit-card",{"title":250,"path":251,"stem":252,"children":253,"icon":255},"Start from an example","\u002Fdocs\u002Fguides\u002Fexamples","docs\u002Fguides\u002Fexamples\u002Findex",[254],{"title":250,"path":251,"stem":252,"icon":255},"i-lucide-folder-code",{"title":257,"path":258,"stem":259,"children":260,"icon":262},"Connect a system","\u002Fdocs\u002Fguides\u002Fintegrations","docs\u002Fguides\u002Fintegrations\u002Findex",[261,263,269,276,283,289,296,303],{"title":257,"path":258,"stem":259,"icon":262},"i-lucide-plug",{"title":264,"path":265,"stem":266,"children":267,"icon":29},"Connect a procurement system by punchout","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fconnect-by-punchout","docs\u002Fguides\u002Fintegrations\u002Fconnect-by-punchout\u002Findex",[268],{"title":264,"path":265,"stem":266,"icon":29},{"title":270,"path":271,"stem":272,"children":273,"icon":275},"Hand an order to the ERP","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fhand-an-order-to-the-erp","docs\u002Fguides\u002Fintegrations\u002Fhand-an-order-to-the-erp\u002Findex",[274],{"title":270,"path":271,"stem":272,"icon":275},"i-lucide-arrow-left-right",{"title":277,"path":278,"stem":279,"children":280,"icon":282},"Import a BMECAT catalog","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fimport-a-bmecat-catalog","docs\u002Fguides\u002Fintegrations\u002Fimport-a-bmecat-catalog\u002Findex",[281],{"title":277,"path":278,"stem":279,"icon":282},"i-lucide-package-plus",{"title":284,"path":285,"stem":286,"children":287,"icon":50},"Keep an Integration Studio workflow running","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fkeep-a-workflow-running","docs\u002Fguides\u002Fintegrations\u002Fkeep-a-workflow-running\u002Findex",[288],{"title":284,"path":285,"stem":286,"icon":50},{"title":290,"path":291,"stem":292,"children":293,"icon":295},"Receive platform events at your own endpoint","\u002Fdocs\u002Fguides\u002Fintegrations\u002Freceive-platform-events","docs\u002Fguides\u002Fintegrations\u002Freceive-platform-events\u002Findex",[294],{"title":290,"path":291,"stem":292,"icon":295},"i-lucide-webhook",{"title":297,"path":298,"stem":299,"children":300,"icon":302},"Recover abandoned carts with a workflow","\u002Fdocs\u002Fguides\u002Fintegrations\u002Frecover-abandoned-carts","docs\u002Fguides\u002Fintegrations\u002Frecover-abandoned-carts\u002Findex",[301],{"title":297,"path":298,"stem":299,"icon":302},"i-lucide-mail-check",{"title":304,"path":305,"stem":306,"children":307,"icon":309},"Send low-stock alerts to the ERP","\u002Fdocs\u002Fguides\u002Fintegrations\u002Fsend-low-stock-alerts-to-the-erp","docs\u002Fguides\u002Fintegrations\u002Fsend-low-stock-alerts-to-the-erp\u002Findex",[308],{"title":304,"path":305,"stem":306,"icon":309},"i-lucide-bell-ring",{"title":311,"path":312,"stem":313,"children":314,"icon":316},"Operate & go live","\u002Fdocs\u002Fguides\u002Foperate","docs\u002Fguides\u002Foperate\u002Findex",[315,317,323,330,337,344,351,357],{"title":311,"path":312,"stem":313,"icon":316},"i-lucide-activity",{"title":318,"path":319,"stem":320,"children":321,"icon":81},"Answer a customer's security questionnaire","\u002Fdocs\u002Fguides\u002Foperate\u002Fanswer-a-security-questionnaire","docs\u002Fguides\u002Foperate\u002Fanswer-a-security-questionnaire\u002Findex",[322],{"title":318,"path":319,"stem":320,"icon":81},{"title":324,"path":325,"stem":326,"children":327,"icon":329},"Debug a failed request","\u002Fdocs\u002Fguides\u002Foperate\u002Fdebug-a-failed-request","docs\u002Fguides\u002Foperate\u002Fdebug-a-failed-request\u002Findex",[328],{"title":324,"path":325,"stem":326,"icon":329},"i-lucide-bug",{"title":331,"path":332,"stem":333,"children":334,"icon":336},"Go live with a project","\u002Fdocs\u002Fguides\u002Foperate\u002Fgo-live-checklist","docs\u002Fguides\u002Foperate\u002Fgo-live-checklist\u002Findex",[335],{"title":331,"path":332,"stem":333,"icon":336},"i-lucide-list-checks",{"title":338,"path":339,"stem":340,"children":341,"icon":343},"Migrate from an existing shop","\u002Fdocs\u002Fguides\u002Foperate\u002Fmigrate-from-an-existing-shop","docs\u002Fguides\u002Foperate\u002Fmigrate-from-an-existing-shop\u002Findex",[342],{"title":338,"path":339,"stem":340,"icon":343},"i-lucide-route",{"title":345,"path":346,"stem":347,"children":348,"icon":350},"Size a launch","\u002Fdocs\u002Fguides\u002Foperate\u002Fplan-for-limits","docs\u002Fguides\u002Foperate\u002Fplan-for-limits\u002Findex",[349],{"title":345,"path":346,"stem":347,"icon":350},"i-lucide-gauge",{"title":352,"path":353,"stem":354,"children":355,"icon":336},"Script a bulk change","\u002Fdocs\u002Fguides\u002Foperate\u002Fscript-a-bulk-change","docs\u002Fguides\u002Foperate\u002Fscript-a-bulk-change\u002Findex",[356],{"title":352,"path":353,"stem":354,"icon":336},{"title":358,"path":359,"stem":360,"children":361,"icon":363},"Stay current","\u002Fdocs\u002Fguides\u002Foperate\u002Fstay-current","docs\u002Fguides\u002Foperate\u002Fstay-current\u002Findex",[362],{"title":358,"path":359,"stem":360,"icon":363},"i-lucide-refresh-cw",{"title":365,"path":366,"stem":367,"children":368,"icon":370},"Plan before you build","\u002Fdocs\u002Fguides\u002Fplan","docs\u002Fguides\u002Fplan\u002Findex",[369,371,378,385],{"title":365,"path":366,"stem":367,"icon":370},"i-lucide-map",{"title":372,"path":373,"stem":374,"children":375,"icon":377},"Choose a system of record","\u002Fdocs\u002Fguides\u002Fplan\u002Fchoose-a-system-of-record","docs\u002Fguides\u002Fplan\u002Fchoose-a-system-of-record\u002Findex",[376],{"title":372,"path":373,"stem":374,"icon":377},"i-lucide-network",{"title":379,"path":380,"stem":381,"children":382,"icon":384},"Choose an event surface","\u002Fdocs\u002Fguides\u002Fplan\u002Fchoose-an-event-surface","docs\u002Fguides\u002Fplan\u002Fchoose-an-event-surface\u002Findex",[383],{"title":379,"path":380,"stem":381,"icon":384},"i-lucide-signpost",{"title":386,"path":387,"stem":388,"children":389,"icon":343},"Choose where the logic goes","\u002Fdocs\u002Fguides\u002Fplan\u002Fchoose-where-the-logic-goes","docs\u002Fguides\u002Fplan\u002Fchoose-where-the-logic-goes\u002Findex",[390],{"title":386,"path":387,"stem":388,"icon":343},{"title":392,"path":393,"stem":394,"children":395,"icon":397},"Build a storefront","\u002Fdocs\u002Fguides\u002Fstorefronts","docs\u002Fguides\u002Fstorefronts\u002Findex",[396,398,405,412,419,426,432,439],{"title":392,"path":393,"stem":394,"icon":397},"i-lucide-paintbrush",{"title":399,"path":400,"stem":401,"children":402,"icon":404},"Brand a Theme with design tokens","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fbrand-with-tokens","docs\u002Fguides\u002Fstorefronts\u002Fbrand-with-tokens\u002Findex",[403],{"title":399,"path":400,"stem":401,"icon":404},"i-lucide-palette",{"title":406,"path":407,"stem":408,"children":409,"icon":411},"Build a block","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fbuild-a-block","docs\u002Fguides\u002Fstorefronts\u002Fbuild-a-block\u002Findex",[410],{"title":406,"path":407,"stem":408,"icon":411},"i-lucide-blocks",{"title":413,"path":414,"stem":415,"children":416,"icon":418},"Build your first Theme","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fbuild-your-first-theme","docs\u002Fguides\u002Fstorefronts\u002Fbuild-your-first-theme\u002Findex",[417],{"title":413,"path":414,"stem":415,"icon":418},"i-lucide-layout-template",{"title":420,"path":421,"stem":422,"children":423,"icon":425},"Connect your own frontend","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fconnect-a-frontend","docs\u002Fguides\u002Fstorefronts\u002Fconnect-a-frontend\u002Findex",[424],{"title":420,"path":421,"stem":422,"icon":425},"i-lucide-plug-zap",{"title":427,"path":428,"stem":429,"children":430,"icon":363},"Refresh price caches when a price list changes","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Frefresh-price-caches","docs\u002Fguides\u002Fstorefronts\u002Frefresh-price-caches\u002Findex",[431],{"title":427,"path":428,"stem":429,"icon":363},{"title":433,"path":434,"stem":435,"children":436,"icon":438},"Reorder and quick order","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Freorder-and-quick-order","docs\u002Fguides\u002Fstorefronts\u002Freorder-and-quick-order\u002Findex",[437],{"title":433,"path":434,"stem":435,"icon":438},"i-lucide-repeat",{"title":440,"path":441,"stem":442,"children":443,"icon":445},"Sign a buyer in from your server","\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fsign-a-buyer-in","docs\u002Fguides\u002Fstorefronts\u002Fsign-a-buyer-in\u002Findex",[444],{"title":440,"path":441,"stem":442,"icon":445},"i-lucide-log-in",{"title":447,"path":448,"stem":449,"children":450},"SDKs","\u002Fdocs\u002Fsdks","docs\u002Fsdks\u002Findex",[451,452,458,464,470,476,482,488,494],{"title":447,"path":448,"stem":449},{"title":453,"path":454,"stem":455,"children":456},"App SDK","\u002Fdocs\u002Fsdks\u002Fapp-sdk","docs\u002Fsdks\u002Fapp-sdk\u002Findex",[457],{"title":453,"path":454,"stem":455},{"title":459,"path":460,"stem":461,"children":462},"CLI","\u002Fdocs\u002Fsdks\u002Fcli","docs\u002Fsdks\u002Fcli\u002Findex",[463],{"title":459,"path":460,"stem":461},{"title":465,"path":466,"stem":467,"children":468},"Design systems","\u002Fdocs\u002Fsdks\u002Fdesign-systems","docs\u002Fsdks\u002Fdesign-systems\u002Findex",[469],{"title":465,"path":466,"stem":467},{"title":471,"path":472,"stem":473,"children":474},"Integration Node SDK","\u002Fdocs\u002Fsdks\u002Fintegration-nodes","docs\u002Fsdks\u002Fintegration-nodes\u002Findex",[475],{"title":471,"path":472,"stem":473},{"title":477,"path":478,"stem":479,"children":480},"Node SDK","\u002Fdocs\u002Fsdks\u002Fnode","docs\u002Fsdks\u002Fnode\u002Findex",[481],{"title":477,"path":478,"stem":479},{"title":483,"path":484,"stem":485,"children":486},"PHP SDK","\u002Fdocs\u002Fsdks\u002Fphp","docs\u002Fsdks\u002Fphp\u002Findex",[487],{"title":483,"path":484,"stem":485},{"title":489,"path":490,"stem":491,"children":492,"icon":150},"Versioning","\u002Fdocs\u002Fsdks\u002Fversioning","docs\u002Fsdks\u002Fversioning\u002Findex",[493],{"title":489,"path":490,"stem":491,"icon":150},{"title":495,"path":496,"stem":497,"children":498},"Web \u002F JavaScript SDK","\u002Fdocs\u002Fsdks\u002Fweb","docs\u002Fsdks\u002Fweb\u002Findex",[499],{"title":495,"path":496,"stem":497},{"title":501,"path":502,"stem":503,"children":504},"Services","\u002Fdocs\u002Fservices","docs\u002Fservices\u002Findex",[505,506,542,549,579,585,609,616,670,718],{"title":501,"path":502,"stem":503},{"title":507,"path":508,"stem":509,"children":510},"API usage","\u002Fdocs\u002Fservices\u002Fapi-usage","docs\u002Fservices\u002Fapi-usage\u002Findex",[511,512,518,524,530,536],{"title":507,"path":508,"stem":509},{"title":513,"path":514,"stem":515,"children":516},"Errors","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Ferrors","docs\u002Fservices\u002Fapi-usage\u002Ferrors\u002Findex",[517],{"title":513,"path":514,"stem":515},{"title":519,"path":520,"stem":521,"children":522},"Retries & idempotency","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fidempotency","docs\u002Fservices\u002Fapi-usage\u002Fidempotency\u002Findex",[523],{"title":519,"path":520,"stem":521},{"title":525,"path":526,"stem":527,"children":528},"Pagination & filtering","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fpagination","docs\u002Fservices\u002Fapi-usage\u002Fpagination\u002Findex",[529],{"title":525,"path":526,"stem":527},{"title":531,"path":532,"stem":533,"children":534},"Rate limits","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Frate-limits","docs\u002Fservices\u002Fapi-usage\u002Frate-limits\u002Findex",[535],{"title":531,"path":532,"stem":533},{"title":537,"path":538,"stem":539,"children":540},"Versioning & stability","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fversioning","docs\u002Fservices\u002Fapi-usage\u002Fversioning\u002Findex",[541],{"title":537,"path":538,"stem":539},{"title":543,"path":544,"stem":545,"children":546,"icon":548},"Record history","\u002Fdocs\u002Fservices\u002Faudit","docs\u002Fservices\u002Faudit\u002Findex",[547],{"title":543,"path":544,"stem":545,"icon":548},"i-lucide-history",{"title":550,"path":551,"stem":552,"children":553},"Authentication","\u002Fdocs\u002Fservices\u002Fauth","docs\u002Fservices\u002Fauth\u002Findex",[554,555,561,567,573],{"title":550,"path":551,"stem":552},{"title":556,"path":557,"stem":558,"children":559},"API keys","\u002Fdocs\u002Fservices\u002Fauth\u002Fapi-keys","docs\u002Fservices\u002Fauth\u002Fapi-keys\u002Findex",[560],{"title":556,"path":557,"stem":558},{"title":562,"path":563,"stem":564,"children":565},"Multi-factor authentication","\u002Fdocs\u002Fservices\u002Fauth\u002Fmfa","docs\u002Fservices\u002Fauth\u002Fmfa\u002Findex",[566],{"title":562,"path":563,"stem":564},{"title":568,"path":569,"stem":570,"children":571},"Social sign-in","\u002Fdocs\u002Fservices\u002Fauth\u002Foauth2","docs\u002Fservices\u002Fauth\u002Foauth2\u002Findex",[572],{"title":568,"path":569,"stem":570},{"title":574,"path":575,"stem":576,"children":577},"Sessions","\u002Fdocs\u002Fservices\u002Fauth\u002Fsessions","docs\u002Fservices\u002Fauth\u002Fsessions\u002Findex",[578],{"title":574,"path":575,"stem":576},{"title":580,"path":581,"stem":582,"children":583},"Avatars","\u002Fdocs\u002Fservices\u002Favatars","docs\u002Fservices\u002Favatars\u002Findex",[584],{"title":580,"path":581,"stem":582},{"title":586,"path":587,"stem":588,"children":589},"Events","\u002Fdocs\u002Fservices\u002Fevents","docs\u002Fservices\u002Fevents\u002Findex",[590,591,597,603],{"title":586,"path":587,"stem":588},{"title":592,"path":593,"stem":594,"children":595},"Consuming events","\u002Fdocs\u002Fservices\u002Fevents\u002Fconsuming-events","docs\u002Fservices\u002Fevents\u002Fconsuming-events\u002Findex",[596],{"title":592,"path":593,"stem":594},{"title":598,"path":599,"stem":600,"children":601},"Event catalog","\u002Fdocs\u002Fservices\u002Fevents\u002Fevent-catalog","docs\u002Fservices\u002Fevents\u002Fevent-catalog\u002Findex",[602],{"title":598,"path":599,"stem":600},{"title":604,"path":605,"stem":606,"children":607},"Event types","\u002Fdocs\u002Fservices\u002Fevents\u002Fevent-types","docs\u002Fservices\u002Fevents\u002Fevent-types\u002Findex",[608],{"title":604,"path":605,"stem":606},{"title":610,"path":611,"stem":612,"children":613,"icon":615},"Locale","\u002Fdocs\u002Fservices\u002Flocale","docs\u002Fservices\u002Flocale\u002Findex",[614],{"title":610,"path":611,"stem":612,"icon":615},"i-lucide-globe",{"title":617,"path":618,"stem":619,"children":620},"Network","\u002Fdocs\u002Fservices\u002Fnetwork","docs\u002Fservices\u002Fnetwork\u002Findex",[621,622,628,634,640,646,652,658,664],{"title":617,"path":618,"stem":619},{"title":623,"path":624,"stem":625,"children":626},"Caching","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcaching","docs\u002Fservices\u002Fnetwork\u002Fcaching\u002Findex",[627],{"title":623,"path":624,"stem":625},{"title":629,"path":630,"stem":631,"children":632},"Content delivery (CDN)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcdn","docs\u002Fservices\u002Fnetwork\u002Fcdn\u002Findex",[633],{"title":629,"path":630,"stem":631},{"title":635,"path":636,"stem":637,"children":638},"Compression","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcompression","docs\u002Fservices\u002Fnetwork\u002Fcompression\u002Findex",[639],{"title":635,"path":636,"stem":637},{"title":641,"path":642,"stem":643,"children":644},"DDoS mitigation","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fddos","docs\u002Fservices\u002Fnetwork\u002Fddos\u002Findex",[645],{"title":641,"path":642,"stem":643},{"title":647,"path":648,"stem":649,"children":650},"Edge network","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fedges","docs\u002Fservices\u002Fnetwork\u002Fedges\u002Findex",[651],{"title":647,"path":648,"stem":649},{"title":653,"path":654,"stem":655,"children":656},"Endpoints","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fendpoints","docs\u002Fservices\u002Fnetwork\u002Fendpoints\u002Findex",[657],{"title":653,"path":654,"stem":655},{"title":659,"path":660,"stem":661,"children":662},"Transport Layer Security (TLS)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Ftls","docs\u002Fservices\u002Fnetwork\u002Ftls\u002Findex",[663],{"title":659,"path":660,"stem":661},{"title":665,"path":666,"stem":667,"children":668},"Web application firewall (WAF)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fwaf","docs\u002Fservices\u002Fnetwork\u002Fwaf\u002Findex",[669],{"title":665,"path":666,"stem":667},{"title":671,"path":672,"stem":673,"children":674},"Storage","\u002Fdocs\u002Fservices\u002Fstorage","docs\u002Fservices\u002Fstorage\u002Findex",[675,676,682,688,694,700,706,712],{"title":671,"path":672,"stem":673},{"title":677,"path":678,"stem":679,"children":680},"Folders","\u002Fdocs\u002Fservices\u002Fstorage\u002Fbuckets","docs\u002Fservices\u002Fstorage\u002Fbuckets\u002Findex",[681],{"title":677,"path":678,"stem":679},{"title":683,"path":684,"stem":685,"children":686},"Signed URLs and access","\u002Fdocs\u002Fservices\u002Fstorage\u002Ffile-tokens","docs\u002Fservices\u002Fstorage\u002Ffile-tokens\u002Findex",[687],{"title":683,"path":684,"stem":685},{"title":689,"path":690,"stem":691,"children":692},"Serve and transform images","\u002Fdocs\u002Fservices\u002Fstorage\u002Fimages","docs\u002Fservices\u002Fstorage\u002Fimages\u002Findex",[693],{"title":689,"path":690,"stem":691},{"title":695,"path":696,"stem":697,"children":698},"3D assets","\u002Fdocs\u002Fservices\u002Fstorage\u002Fmodel-viewer","docs\u002Fservices\u002Fstorage\u002Fmodel-viewer\u002Findex",[699],{"title":695,"path":696,"stem":697},{"title":701,"path":702,"stem":703,"children":704},"Access control and visibility","\u002Fdocs\u002Fservices\u002Fstorage\u002Fpermissions","docs\u002Fservices\u002Fstorage\u002Fpermissions\u002Findex",[705],{"title":701,"path":702,"stem":703},{"title":707,"path":708,"stem":709,"children":710},"Quick start","\u002Fdocs\u002Fservices\u002Fstorage\u002Fquick-start","docs\u002Fservices\u002Fstorage\u002Fquick-start\u002Findex",[711],{"title":707,"path":708,"stem":709},{"title":713,"path":714,"stem":715,"children":716},"Upload and manage files","\u002Fdocs\u002Fservices\u002Fstorage\u002Fupload-download","docs\u002Fservices\u002Fstorage\u002Fupload-download\u002Findex",[717],{"title":713,"path":714,"stem":715},{"title":719,"path":720,"stem":721,"children":722},"Webhooks","\u002Fdocs\u002Fservices\u002Fwebhooks","docs\u002Fservices\u002Fwebhooks\u002Findex",[723,724,730],{"title":719,"path":720,"stem":721},{"title":725,"path":726,"stem":727,"children":728},"Delivery","\u002Fdocs\u002Fservices\u002Fwebhooks\u002Fdelivery","docs\u002Fservices\u002Fwebhooks\u002Fdelivery\u002Findex",[729],{"title":725,"path":726,"stem":727},{"title":731,"path":732,"stem":733,"children":734},"Security","\u002Fdocs\u002Fservices\u002Fwebhooks\u002Fsecurity","docs\u002Fservices\u002Fwebhooks\u002Fsecurity\u002Findex",[735],{"title":731,"path":732,"stem":733},{"title":737,"path":738,"stem":739,"children":740},"Studios","\u002Fdocs\u002Fstudios","docs\u002Fstudios\u002Findex",[741,742,748,913,1264,1583,1765],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745,"children":746},"AI Studio","\u002Fdocs\u002Fstudios\u002Fai","docs\u002Fstudios\u002Fai\u002Findex",[747],{"title":743,"path":744,"stem":745},{"title":749,"path":750,"stem":751,"children":752,"icon":754},"Analytics Studio","\u002Fdocs\u002Fstudios\u002Fanalytics","docs\u002Fstudios\u002Fanalytics\u002Findex",[753,755,798,835,841,859,889],{"title":749,"path":750,"stem":751,"icon":754},"i-lucide-chart-column",{"title":756,"path":757,"stem":758,"children":759,"icon":761},"Make your app's data analyzable","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Findex",[760,762,768,774,780,786,792],{"title":756,"path":757,"stem":758,"icon":761},"i-lucide-table-2",{"title":763,"path":764,"stem":765,"children":766},"Column locators","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fcolumn-locators","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fcolumn-locators\u002Findex",[767],{"title":763,"path":764,"stem":765},{"title":769,"path":770,"stem":771,"children":772},"Declaring a view","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fdeclaring-a-view","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fdeclaring-a-view\u002Findex",[773],{"title":769,"path":770,"stem":771},{"title":775,"path":776,"stem":777,"children":778},"Example","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fexample","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fexample\u002Findex",[779],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783,"children":784},"Semantic roles","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fsemantic-roles","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fsemantic-roles\u002Findex",[785],{"title":781,"path":782,"stem":783},{"title":787,"path":788,"stem":789,"children":790},"Tenant isolation","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Ftenant-isolation","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Ftenant-isolation\u002Findex",[791],{"title":787,"path":788,"stem":789},{"title":793,"path":794,"stem":795,"children":796},"The contract","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fthe-contract","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fthe-contract\u002Findex",[797],{"title":793,"path":794,"stem":795},{"title":799,"path":800,"stem":801,"children":802,"icon":804},"Stream commerce activity","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Findex",[803,805,811,817,823,829],{"title":799,"path":800,"stem":801,"icon":804},"i-lucide-radio",{"title":806,"path":807,"stem":808,"children":809},"Delivery guarantees","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fdelivery-guarantees","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fdelivery-guarantees\u002Findex",[810],{"title":806,"path":807,"stem":808},{"title":812,"path":813,"stem":814,"children":815},"Event types for reporting","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fevent-types-for-reporting","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fevent-types-for-reporting\u002Findex",[816],{"title":812,"path":813,"stem":814},{"title":818,"path":819,"stem":820,"children":821},"Register an endpoint","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fregister-an-endpoint","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fregister-an-endpoint\u002Findex",[822],{"title":818,"path":819,"stem":820},{"title":824,"path":825,"stem":826,"children":827},"The event stream","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fthe-event-stream","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fthe-event-stream\u002Findex",[828],{"title":824,"path":825,"stem":826},{"title":830,"path":831,"stem":832,"children":833},"Verify a delivery","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fverify-a-delivery","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fverify-a-delivery\u002Findex",[834],{"title":830,"path":831,"stem":832},{"title":836,"path":837,"stem":838,"children":839,"icon":29},"Getting data out","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fgetting-data-out","docs\u002Fstudios\u002Fanalytics\u002Fgetting-data-out\u002Findex",[840],{"title":836,"path":837,"stem":838,"icon":29},{"title":842,"path":843,"stem":844,"children":845,"icon":336},"Limits and what's next","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Findex",[846,847,853],{"title":842,"path":843,"stem":844,"icon":336},{"title":848,"path":849,"stem":850,"children":851},"Designing for what's coming","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fdesigning-for-whats-coming","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fdesigning-for-whats-coming\u002Findex",[852],{"title":848,"path":849,"stem":850},{"title":854,"path":855,"stem":856,"children":857},"What does not exist yet","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fwhat-does-not-exist-yet","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fwhat-does-not-exist-yet\u002Findex",[858],{"title":854,"path":855,"stem":856},{"title":860,"path":861,"stem":862,"children":863,"icon":108},"Build your own reporting store","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Findex",[864,865,871,877,883],{"title":860,"path":861,"stem":862,"icon":108},{"title":866,"path":867,"stem":868,"children":869},"Backfill","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fbackfill","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fbackfill\u002Findex",[870],{"title":866,"path":867,"stem":868},{"title":872,"path":873,"stem":874,"children":875},"Incremental sync","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fincremental-sync","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fincremental-sync\u002Findex",[876],{"title":872,"path":873,"stem":874},{"title":878,"path":879,"stem":880,"children":881},"Modelling","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fmodelling","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fmodelling\u002Findex",[882],{"title":878,"path":879,"stem":880},{"title":884,"path":885,"stem":886,"children":887},"Pull versus push","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fpull-vs-push","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fpull-vs-push\u002Findex",[888],{"title":884,"path":885,"stem":886},{"title":890,"path":891,"stem":892,"children":893,"icon":754},"What the tenant sees","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Findex",[894,895,901,907],{"title":890,"path":891,"stem":892,"icon":754},{"title":896,"path":897,"stem":898,"children":899},"Cohorts","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fcohorts","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fcohorts\u002Findex",[900],{"title":896,"path":897,"stem":898},{"title":902,"path":903,"stem":904,"children":905},"Datasets and charts","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fdatasets-and-charts","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fdatasets-and-charts\u002Findex",[906],{"title":902,"path":903,"stem":904},{"title":908,"path":909,"stem":910,"children":911},"Studio overview","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fstudio-overview","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fstudio-overview\u002Findex",[912],{"title":908,"path":909,"stem":910},{"title":914,"path":915,"stem":916,"children":917},"App Studio","\u002Fdocs\u002Fstudios\u002Fapps","docs\u002Fstudios\u002Fapps\u002Findex",[918,919,955,1025,1096,1114,1180],{"title":914,"path":915,"stem":916},{"title":920,"path":921,"stem":922,"children":923,"icon":101},"Admin UI","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Findex",[924,925,931,937,943,949],{"title":920,"path":921,"stem":922,"icon":101},{"title":926,"path":927,"stem":928,"children":929},"How the Cockpit renders","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fhow-cockpit-renders","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fhow-cockpit-renders\u002Findex",[930],{"title":926,"path":927,"stem":928},{"title":932,"path":933,"stem":934,"children":935},"Preview locally","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fpreview-locally","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fpreview-locally\u002Findex",[936],{"title":932,"path":933,"stem":934},{"title":938,"path":939,"stem":940,"children":941},"Reading settings","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Freading-settings","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Freading-settings\u002Findex",[942],{"title":938,"path":939,"stem":940},{"title":944,"path":945,"stem":946,"children":947},"Settings","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fsettings","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fsettings\u002Findex",[948],{"title":944,"path":945,"stem":946},{"title":950,"path":951,"stem":952,"children":953},"Vocabularies","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fvocabularies","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fvocabularies\u002Findex",[954],{"title":950,"path":951,"stem":952},{"title":956,"path":957,"stem":958,"children":959,"icon":343},"Your app's API","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi","docs\u002Fstudios\u002Fapps\u002Fapi\u002Findex",[960,961,966,972,978,984,990,995,1001,1007,1013,1019],{"title":956,"path":957,"stem":958,"icon":343},{"title":623,"path":962,"stem":963,"children":964},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcaching","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcaching\u002Findex",[965],{"title":623,"path":962,"stem":963},{"title":967,"path":968,"stem":969,"children":970},"Calling another app","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcalling-another-app","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcalling-another-app\u002Findex",[971],{"title":967,"path":968,"stem":969},{"title":973,"path":974,"stem":975,"children":976},"Capabilities","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapabilities","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapabilities\u002Findex",[977],{"title":973,"path":974,"stem":975},{"title":979,"path":980,"stem":981,"children":982},"Capability reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapability-reference","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapability-reference\u002Findex",[983],{"title":979,"path":980,"stem":981},{"title":985,"path":986,"stem":987,"children":988},"CRUD","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcrud","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcrud\u002Findex",[989],{"title":985,"path":986,"stem":987},{"title":513,"path":991,"stem":992,"children":993},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Ferrors","docs\u002Fstudios\u002Fapps\u002Fapi\u002Ferrors\u002Findex",[994],{"title":513,"path":991,"stem":992},{"title":996,"path":997,"stem":998,"children":999},"Overriding a capability","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Foverriding-a-capability","docs\u002Fstudios\u002Fapps\u002Fapi\u002Foverriding-a-capability\u002Findex",[1000],{"title":996,"path":997,"stem":998},{"title":1002,"path":1003,"stem":1004,"children":1005},"Pagination and filtering","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fpagination-and-filtering","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fpagination-and-filtering\u002Findex",[1006],{"title":1002,"path":1003,"stem":1004},{"title":1008,"path":1009,"stem":1010,"children":1011},"Published OpenAPI","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fpublished-openapi","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fpublished-openapi\u002Findex",[1012],{"title":1008,"path":1009,"stem":1010},{"title":1014,"path":1015,"stem":1016,"children":1017},"The router","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Frouter","docs\u002Fstudios\u002Fapps\u002Fapi\u002Frouter\u002Findex",[1018],{"title":1014,"path":1015,"stem":1016},{"title":1020,"path":1021,"stem":1022,"children":1023},"Tags","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Ftags","docs\u002Fstudios\u002Fapps\u002Fapi\u002Ftags\u002Findex",[1024],{"title":1020,"path":1021,"stem":1022},{"title":1026,"path":1027,"stem":1028,"children":1029,"icon":108},"Data model","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Findex",[1030,1031,1037,1043,1049,1055,1061,1067,1073,1079,1085,1090],{"title":1026,"path":1027,"stem":1028,"icon":108},{"title":1032,"path":1033,"stem":1034,"children":1035},"Adapters","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fadapters","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fadapters\u002Findex",[1036],{"title":1032,"path":1033,"stem":1034},{"title":1038,"path":1039,"stem":1040,"children":1041},"Column types","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcolumn-types","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcolumn-types\u002Findex",[1042],{"title":1038,"path":1039,"stem":1040},{"title":1044,"path":1045,"stem":1046,"children":1047},"Cross-app lookups","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcross-app-lookups","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcross-app-lookups\u002Findex",[1048],{"title":1044,"path":1045,"stem":1046},{"title":1050,"path":1051,"stem":1052,"children":1053},"Migrations","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fmigrations","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fmigrations\u002Findex",[1054],{"title":1050,"path":1051,"stem":1052},{"title":1056,"path":1057,"stem":1058,"children":1059},"Projections","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fprojections","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fprojections\u002Findex",[1060],{"title":1056,"path":1057,"stem":1058},{"title":1062,"path":1063,"stem":1064,"children":1065},"Relationships","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Frelationships","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Frelationships\u002Findex",[1066],{"title":1062,"path":1063,"stem":1064},{"title":1068,"path":1069,"stem":1070,"children":1071},"Schema reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fschema-reference","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fschema-reference\u002Findex",[1072],{"title":1068,"path":1069,"stem":1070},{"title":1074,"path":1075,"stem":1076,"children":1077},"Scoping","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fscoping","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fscoping\u002Findex",[1078],{"title":1074,"path":1075,"stem":1076},{"title":1080,"path":1081,"stem":1082,"children":1083},"search.json reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fsearch-json","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fsearch-json\u002Findex",[1084],{"title":1080,"path":1081,"stem":1082},{"title":787,"path":1086,"stem":1087,"children":1088},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftenant-isolation","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftenant-isolation\u002Findex",[1089],{"title":787,"path":1086,"stem":1087},{"title":1091,"path":1092,"stem":1093,"children":1094},"The typed client","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftyped-client","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftyped-client\u002Findex",[1095],{"title":1091,"path":1092,"stem":1093},{"title":1097,"path":1098,"stem":1099,"children":1100},"Getting started","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Findex",[1101,1102,1108],{"title":1097,"path":1098,"stem":1099},{"title":1103,"path":1104,"stem":1105,"children":1106},"App model","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fapp-model","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fapp-model\u002Findex",[1107],{"title":1103,"path":1104,"stem":1105},{"title":1109,"path":1110,"stem":1111,"children":1112},"App isolation","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fisolation","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fisolation\u002Findex",[1113],{"title":1109,"path":1110,"stem":1111},{"title":1115,"path":1116,"stem":1117,"children":1118,"icon":185},"Platform services","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Findex",[1119,1120,1126,1132,1138,1144,1150,1156,1162,1168,1174],{"title":1115,"path":1116,"stem":1117,"icon":185},{"title":1121,"path":1122,"stem":1123,"children":1124},"Entity access","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fentity-access","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fentity-access\u002Findex",[1125],{"title":1121,"path":1122,"stem":1123},{"title":1127,"path":1128,"stem":1129,"children":1130},"Events you emit","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-emit","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-emit\u002Findex",[1131],{"title":1127,"path":1128,"stem":1129},{"title":1133,"path":1134,"stem":1135,"children":1136},"Events you receive","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-receive","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-receive\u002Findex",[1137],{"title":1133,"path":1134,"stem":1135},{"title":1139,"path":1140,"stem":1141,"children":1142},"Not yet proven","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fnot-yet-proven","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fnot-yet-proven\u002Findex",[1143],{"title":1139,"path":1140,"stem":1141},{"title":1145,"path":1146,"stem":1147,"children":1148},"Outbound HTTP","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Foutbound-http","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Foutbound-http\u002Findex",[1149],{"title":1145,"path":1146,"stem":1147},{"title":1151,"path":1152,"stem":1153,"children":1154},"Permissions","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fpermissions","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fpermissions\u002Findex",[1155],{"title":1151,"path":1152,"stem":1153},{"title":1157,"path":1158,"stem":1159,"children":1160},"Person permissions","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fperson-permissions","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fperson-permissions\u002Findex",[1161],{"title":1157,"path":1158,"stem":1159},{"title":1163,"path":1164,"stem":1165,"children":1166},"Scheduled work","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fscheduled-work","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fscheduled-work\u002Findex",[1167],{"title":1163,"path":1164,"stem":1165},{"title":1169,"path":1170,"stem":1171,"children":1172},"Tenant identity","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftenant-identity","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftenant-identity\u002Findex",[1173],{"title":1169,"path":1170,"stem":1171},{"title":1175,"path":1176,"stem":1177,"children":1178},"Tracing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftracing","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftracing\u002Findex",[1179],{"title":1175,"path":1176,"stem":1177},{"title":1181,"path":1182,"stem":1183,"children":1184,"icon":1186},"Ship and operate","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Findex",[1185,1187,1193,1199,1205,1211,1217,1223,1229,1235,1241,1247,1253,1259],{"title":1181,"path":1182,"stem":1183,"icon":1186},"i-lucide-rocket",{"title":1188,"path":1189,"stem":1190,"children":1191},"Billing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fbilling","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fbilling\u002Findex",[1192],{"title":1188,"path":1189,"stem":1190},{"title":1194,"path":1195,"stem":1196,"children":1197},"Consent","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fconsent","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fconsent\u002Findex",[1198],{"title":1194,"path":1195,"stem":1196},{"title":1200,"path":1201,"stem":1202,"children":1203},"Dependencies","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdependencies","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdependencies\u002Findex",[1204],{"title":1200,"path":1201,"stem":1202},{"title":1206,"path":1207,"stem":1208,"children":1209},"Deploying","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdeploying","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdeploying\u002Findex",[1210],{"title":1206,"path":1207,"stem":1208},{"title":1212,"path":1213,"stem":1214,"children":1215},"Manifest reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fmanifest-reference","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fmanifest-reference\u002Findex",[1216],{"title":1212,"path":1213,"stem":1214},{"title":1218,"path":1219,"stem":1220,"children":1221},"Operating","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Foperating","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Foperating\u002Findex",[1222],{"title":1218,"path":1219,"stem":1220},{"title":1224,"path":1225,"stem":1226,"children":1227},"Pairing a frontend","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpairing-a-frontend","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpairing-a-frontend\u002Findex",[1228],{"title":1224,"path":1225,"stem":1226},{"title":1230,"path":1231,"stem":1232,"children":1233},"Private or Marketplace","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fprivate-vs-marketplace","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fprivate-vs-marketplace\u002Findex",[1234],{"title":1230,"path":1231,"stem":1232},{"title":1236,"path":1237,"stem":1238,"children":1239},"Publish and install","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpublish-and-install","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpublish-and-install\u002Findex",[1240],{"title":1236,"path":1237,"stem":1238},{"title":1242,"path":1243,"stem":1244,"children":1245},"Testing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Ftesting","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Ftesting\u002Findex",[1246],{"title":1242,"path":1243,"stem":1244},{"title":1248,"path":1249,"stem":1250,"children":1251},"Validate","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fvalidate","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fvalidate\u002Findex",[1252],{"title":1248,"path":1249,"stem":1250},{"title":1254,"path":1255,"stem":1256,"children":1257},"Verifying live","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fverifying-live","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fverifying-live\u002Findex",[1258],{"title":1254,"path":1255,"stem":1256},{"title":489,"path":1260,"stem":1261,"children":1262},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fversioning","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fversioning\u002Findex",[1263],{"title":489,"path":1260,"stem":1261},{"title":1265,"path":1266,"stem":1267,"children":1268,"icon":1270},"Commerce Studio","\u002Fdocs\u002Fstudios\u002Fcommerce","docs\u002Fstudios\u002Fcommerce\u002Findex",[1269,1271,1343,1403,1452,1457,1510,1564],{"title":1265,"path":1266,"stem":1267,"icon":1270},"i-lucide-shopping-bag",{"title":1272,"path":1273,"stem":1274,"children":1275,"icon":1277},"Build an app","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Findex",[1276,1278,1284,1290,1296,1302,1308,1314,1320,1326,1332,1337],{"title":1272,"path":1273,"stem":1274,"icon":1277},"i-lucide-puzzle",{"title":1279,"path":1280,"stem":1281,"children":1282},"Actions and writes","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Factions-and-writes","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Factions-and-writes\u002Findex",[1283],{"title":1279,"path":1280,"stem":1281},{"title":1285,"path":1286,"stem":1287,"children":1288},"cockpit.json reference","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fcockpit-json-reference","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fcockpit-json-reference\u002Findex",[1289],{"title":1285,"path":1286,"stem":1287},{"title":1291,"path":1292,"stem":1293,"children":1294},"Detail views","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fdetail-views","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fdetail-views\u002Findex",[1295],{"title":1291,"path":1292,"stem":1293},{"title":1297,"path":1298,"stem":1299,"children":1300},"Forms","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fforms","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fforms\u002Findex",[1301],{"title":1297,"path":1298,"stem":1299},{"title":1303,"path":1304,"stem":1305,"children":1306},"From manifest to installed","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Ffrom-manifest-to-installed","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Ffrom-manifest-to-installed\u002Findex",[1307],{"title":1303,"path":1304,"stem":1305},{"title":1309,"path":1310,"stem":1311,"children":1312},"How it renders","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fhow-it-renders","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fhow-it-renders\u002Findex",[1313],{"title":1309,"path":1310,"stem":1311},{"title":1315,"path":1316,"stem":1317,"children":1318},"List views","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Flist-views","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Flist-views\u002Findex",[1319],{"title":1315,"path":1316,"stem":1317},{"title":1321,"path":1322,"stem":1323,"children":1324},"Navigation","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fnavigation","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fnavigation\u002Findex",[1325],{"title":1321,"path":1322,"stem":1323},{"title":1327,"path":1328,"stem":1329,"children":1330},"Permissions and scope","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpermissions-and-scope","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpermissions-and-scope\u002Findex",[1331],{"title":1327,"path":1328,"stem":1329},{"title":932,"path":1333,"stem":1334,"children":1335},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpreview-locally","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpreview-locally\u002Findex",[1336],{"title":932,"path":1333,"stem":1334},{"title":1338,"path":1339,"stem":1340,"children":1341},"Widgets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fwidgets","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fwidgets\u002Findex",[1342],{"title":1338,"path":1339,"stem":1340},{"title":1344,"path":1345,"stem":1346,"children":1347,"icon":1349},"Catalog","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Findex",[1348,1350,1356,1362,1368,1374,1379,1385,1391,1397],{"title":1344,"path":1345,"stem":1346,"icon":1349},"i-lucide-package",{"title":1351,"path":1352,"stem":1353,"children":1354},"Assets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassets","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassets\u002Findex",[1355],{"title":1351,"path":1352,"stem":1353},{"title":1357,"path":1358,"stem":1359,"children":1360},"Associations","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassociations","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassociations\u002Findex",[1361],{"title":1357,"path":1358,"stem":1359},{"title":1363,"path":1364,"stem":1365,"children":1366},"Categories","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcategories","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcategories\u002Findex",[1367],{"title":1363,"path":1364,"stem":1365},{"title":1369,"path":1370,"stem":1371,"children":1372},"Completeness","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcompleteness","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcompleteness\u002Findex",[1373],{"title":1369,"path":1370,"stem":1371},{"title":1026,"path":1375,"stem":1376,"children":1377},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fdata-model","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fdata-model\u002Findex",[1378],{"title":1026,"path":1375,"stem":1376},{"title":1380,"path":1381,"stem":1382,"children":1383},"Import and export","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fimport-and-export","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fimport-and-export\u002Findex",[1384],{"title":1380,"path":1381,"stem":1382},{"title":1386,"path":1387,"stem":1388,"children":1389},"Languages and locale codes","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Flanguages-and-locale-codes","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Flanguages-and-locale-codes\u002Findex",[1390],{"title":1386,"path":1387,"stem":1388},{"title":1392,"path":1393,"stem":1394,"children":1395},"Products","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fproducts","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fproducts\u002Findex",[1396],{"title":1392,"path":1393,"stem":1394},{"title":1398,"path":1399,"stem":1400,"children":1401},"References","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Freferences","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Freferences\u002Findex",[1402],{"title":1398,"path":1399,"stem":1400},{"title":1404,"path":1405,"stem":1406,"children":1407,"icon":1409},"Customers","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Findex",[1408,1410,1416,1422,1428,1434,1440,1446],{"title":1404,"path":1405,"stem":1406,"icon":1409},"i-lucide-building-2",{"title":1411,"path":1412,"stem":1413,"children":1414},"Contacts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fcontacts","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fcontacts\u002Findex",[1415],{"title":1411,"path":1412,"stem":1413},{"title":1417,"path":1418,"stem":1419,"children":1420},"Organizations","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Forganizations","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Forganizations\u002Findex",[1421],{"title":1417,"path":1418,"stem":1419},{"title":1423,"path":1424,"stem":1425,"children":1426},"Roles and permissions","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Froles-and-permissions","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Froles-and-permissions\u002Findex",[1427],{"title":1423,"path":1424,"stem":1425},{"title":1429,"path":1430,"stem":1431,"children":1432},"Sales reps","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsales-reps","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsales-reps\u002Findex",[1433],{"title":1429,"path":1430,"stem":1431},{"title":1435,"path":1436,"stem":1437,"children":1438},"Segments","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsegments","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsegments\u002Findex",[1439],{"title":1435,"path":1436,"stem":1437},{"title":1441,"path":1442,"stem":1443,"children":1444},"Storefront accounts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fstorefront-accounts","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fstorefront-accounts\u002Findex",[1445],{"title":1441,"path":1442,"stem":1443},{"title":1447,"path":1448,"stem":1449,"children":1450},"Value lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fvalue-lists","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fvalue-lists\u002Findex",[1451],{"title":1447,"path":1448,"stem":1449},{"title":1097,"path":1453,"stem":1454,"children":1455,"icon":1186},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fgetting-started","docs\u002Fstudios\u002Fcommerce\u002Fgetting-started\u002Findex",[1456],{"title":1097,"path":1453,"stem":1454,"icon":1186},{"title":1458,"path":1459,"stem":1460,"children":1461,"icon":615},"Markets and pricing","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Findex",[1462,1463,1469,1475,1481,1487,1493,1499,1504],{"title":1458,"path":1459,"stem":1460,"icon":615},{"title":1464,"path":1465,"stem":1466,"children":1467},"Carriers and tracking","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fcarriers-and-tracking","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fcarriers-and-tracking\u002Findex",[1468],{"title":1464,"path":1465,"stem":1466},{"title":1470,"path":1471,"stem":1472,"children":1473},"Channels","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fchannels","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fchannels\u002Findex",[1474],{"title":1470,"path":1471,"stem":1472},{"title":1476,"path":1477,"stem":1478,"children":1479},"Markets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fmarkets","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fmarkets\u002Findex",[1480],{"title":1476,"path":1477,"stem":1478},{"title":1482,"path":1483,"stem":1484,"children":1485},"Payment lifecycle","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-lifecycle","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-lifecycle\u002Findex",[1486],{"title":1482,"path":1483,"stem":1484},{"title":1488,"path":1489,"stem":1490,"children":1491},"Payment methods","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-methods","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-methods\u002Findex",[1492],{"title":1488,"path":1489,"stem":1490},{"title":1494,"path":1495,"stem":1496,"children":1497},"Price lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fprice-lists","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fprice-lists\u002Findex",[1498],{"title":1494,"path":1495,"stem":1496},{"title":944,"path":1500,"stem":1501,"children":1502},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fsettings","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fsettings\u002Findex",[1503],{"title":944,"path":1500,"stem":1501},{"title":1505,"path":1506,"stem":1507,"children":1508},"Shipping rates","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fshipping-rates","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fshipping-rates\u002Findex",[1509],{"title":1505,"path":1506,"stem":1507},{"title":1511,"path":1512,"stem":1513,"children":1514,"icon":1516},"Orders","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Findex",[1515,1517,1523,1529,1535,1541,1547,1552,1558],{"title":1511,"path":1512,"stem":1513,"icon":1516},"i-lucide-receipt-text",{"title":1518,"path":1519,"stem":1520,"children":1521},"Carts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fcarts","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fcarts\u002Findex",[1522],{"title":1518,"path":1519,"stem":1520},{"title":1524,"path":1525,"stem":1526,"children":1527},"Documents","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fdocuments","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fdocuments\u002Findex",[1528],{"title":1524,"path":1525,"stem":1526},{"title":1530,"path":1531,"stem":1532,"children":1533},"Events and comments","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fevents-and-comments","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fevents-and-comments\u002Findex",[1534],{"title":1530,"path":1531,"stem":1532},{"title":1536,"path":1537,"stem":1538,"children":1539},"Number ranges","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fnumber-ranges","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fnumber-ranges\u002Findex",[1540],{"title":1536,"path":1537,"stem":1538},{"title":1542,"path":1543,"stem":1544,"children":1545},"Order lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forder-lists","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Forder-lists\u002Findex",[1546],{"title":1542,"path":1543,"stem":1544},{"title":1511,"path":1548,"stem":1549,"children":1550},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders\u002Findex",[1551],{"title":1511,"path":1548,"stem":1549},{"title":1553,"path":1554,"stem":1555,"children":1556},"Returns","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Freturns","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Freturns\u002Findex",[1557],{"title":1553,"path":1554,"stem":1555},{"title":1559,"path":1560,"stem":1561,"children":1562},"Stock","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fstock","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fstock\u002Findex",[1563],{"title":1559,"path":1560,"stem":1561},{"title":1565,"path":1566,"stem":1567,"children":1568,"icon":1570},"Procurement","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fprocurement","docs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Findex",[1569,1571,1577],{"title":1565,"path":1566,"stem":1567,"icon":1570},"i-lucide-clipboard-check",{"title":1572,"path":1573,"stem":1574,"children":1575},"Cost centers","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fcost-centers","docs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fcost-centers\u002Findex",[1576],{"title":1572,"path":1573,"stem":1574},{"title":1578,"path":1579,"stem":1580,"children":1581,"icon":29},"Punchout","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fpunchout","docs\u002Fstudios\u002Fcommerce\u002Fprocurement\u002Fpunchout\u002Findex",[1582],{"title":1578,"path":1579,"stem":1580,"icon":29},{"title":1584,"path":1585,"stem":1586,"children":1587},"Integration Studio","\u002Fdocs\u002Fstudios\u002Fintegration-studio","docs\u002Fstudios\u002Fintegration-studio\u002Findex",[1588,1589,1626,1663,1693,1698,1728],{"title":1584,"path":1585,"stem":1586},{"title":1590,"path":1591,"stem":1592,"children":1593,"icon":1595},"Build the workflow","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Findex",[1594,1596,1602,1608,1614,1620],{"title":1590,"path":1591,"stem":1592,"icon":1595},"i-lucide-workflow",{"title":1597,"path":1598,"stem":1599,"children":1600},"Expressions","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fexpressions","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fexpressions\u002Findex",[1601],{"title":1597,"path":1598,"stem":1599},{"title":1603,"path":1604,"stem":1605,"children":1606},"Node catalog","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-catalog","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-catalog\u002Findex",[1607],{"title":1603,"path":1604,"stem":1605},{"title":1609,"path":1610,"stem":1611,"children":1612},"Node configuration","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-configuration","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-configuration\u002Findex",[1613],{"title":1609,"path":1610,"stem":1611},{"title":1615,"path":1616,"stem":1617,"children":1618},"Templates","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Ftemplates","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Ftemplates\u002Findex",[1619],{"title":1615,"path":1616,"stem":1617},{"title":1621,"path":1622,"stem":1623,"children":1624},"The workflow document","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fworkflow-model","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fworkflow-model\u002Findex",[1625],{"title":1621,"path":1622,"stem":1623},{"title":1627,"path":1628,"stem":1629,"children":1630,"icon":1632},"Connect the systems","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Findex",[1631,1633,1639,1645,1651,1657],{"title":1627,"path":1628,"stem":1629,"icon":1632},"i-lucide-key-round",{"title":1634,"path":1635,"stem":1636,"children":1637},"Credentials","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fcredentials","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fcredentials\u002Findex",[1638],{"title":1634,"path":1635,"stem":1636},{"title":1640,"path":1641,"stem":1642,"children":1643},"File transfer","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Ffiles","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Ffiles\u002Findex",[1644],{"title":1640,"path":1641,"stem":1642},{"title":1646,"path":1647,"stem":1648,"children":1649},"OAuth","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Foauth","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Foauth\u002Findex",[1650],{"title":1646,"path":1647,"stem":1648},{"title":1652,"path":1653,"stem":1654,"children":1655},"Reaching Revenue Cloud","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Freaching-revenue-cloud","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Freaching-revenue-cloud\u002Findex",[1656],{"title":1652,"path":1653,"stem":1654},{"title":1658,"path":1659,"stem":1660,"children":1661},"Secrets","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fsecrets","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fsecrets\u002Findex",[1662],{"title":1658,"path":1659,"stem":1660},{"title":1664,"path":1665,"stem":1666,"children":1667,"icon":1349},"Extend the Studio","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Findex",[1668,1669,1675,1681,1687],{"title":1664,"path":1665,"stem":1666,"icon":1349},{"title":1670,"path":1671,"stem":1672,"children":1673},"Custom nodes","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fcustom-nodes","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fcustom-nodes\u002Findex",[1674],{"title":1670,"path":1671,"stem":1672},{"title":1676,"path":1677,"stem":1678,"children":1679},"Dynamic behaviour","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fdynamic-behaviour","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fdynamic-behaviour\u002Findex",[1680],{"title":1676,"path":1677,"stem":1678},{"title":1682,"path":1683,"stem":1684,"children":1685},"Package manifest","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fpackage-manifest","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fpackage-manifest\u002Findex",[1686],{"title":1682,"path":1683,"stem":1684},{"title":1688,"path":1689,"stem":1690,"children":1691},"Registration","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fregistration","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fregistration\u002Findex",[1692],{"title":1688,"path":1689,"stem":1690},{"title":1097,"path":1694,"stem":1695,"children":1696,"icon":1186},"\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fgetting-started","docs\u002Fstudios\u002Fintegration-studio\u002Fgetting-started\u002Findex",[1697],{"title":1097,"path":1694,"stem":1695,"icon":1186},{"title":1699,"path":1700,"stem":1701,"children":1702,"icon":316},"Run, watch, recover","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Findex",[1703,1704,1710,1716,1722],{"title":1699,"path":1700,"stem":1701,"icon":316},{"title":1705,"path":1706,"stem":1707,"children":1708},"Missed runs","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fdead-letters","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fdead-letters\u002Findex",[1709],{"title":1705,"path":1706,"stem":1707},{"title":1711,"path":1712,"stem":1713,"children":1714},"Failure handling","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Ffailure-handling","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Ffailure-handling\u002Findex",[1715],{"title":1711,"path":1712,"stem":1713},{"title":1717,"path":1718,"stem":1719,"children":1720},"Revisions and audit","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Frevisions-and-audit","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Frevisions-and-audit\u002Findex",[1721],{"title":1717,"path":1718,"stem":1719},{"title":1723,"path":1724,"stem":1725,"children":1726},"Runs","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fruns","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fruns\u002Findex",[1727],{"title":1723,"path":1724,"stem":1725},{"title":1729,"path":1730,"stem":1731,"children":1732,"icon":1734},"Start the workflow","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Findex",[1733,1735,1741,1747,1753,1759],{"title":1729,"path":1730,"stem":1731,"icon":1734},"i-lucide-zap",{"title":1736,"path":1737,"stem":1738,"children":1739},"Event triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fevent-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fevent-triggers\u002Findex",[1740],{"title":1736,"path":1737,"stem":1738},{"title":1742,"path":1743,"stem":1744,"children":1745},"Execution modes","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fexecution-modes","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fexecution-modes\u002Findex",[1746],{"title":1742,"path":1743,"stem":1744},{"title":1748,"path":1749,"stem":1750,"children":1751},"Schedule triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fschedule-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fschedule-triggers\u002Findex",[1752],{"title":1748,"path":1749,"stem":1750},{"title":1754,"path":1755,"stem":1756,"children":1757},"Triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Ftriggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Ftriggers\u002Findex",[1758],{"title":1754,"path":1755,"stem":1756},{"title":1760,"path":1761,"stem":1762,"children":1763},"Webhook triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fwebhook-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fwebhook-triggers\u002Findex",[1764],{"title":1760,"path":1761,"stem":1762},{"title":1766,"path":1767,"stem":1768,"children":1769},"Experience Studio","\u002Fdocs\u002Fstudios\u002Fsites","docs\u002Fstudios\u002Fsites\u002Findex",[1770,1771,1819,1871,1997,2003,2045],{"title":1766,"path":1767,"stem":1768},{"title":1772,"path":1773,"stem":1774,"children":1775,"icon":418},"Compose pages","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Findex",[1776,1777,1783,1789,1795,1801,1807,1813],{"title":1772,"path":1773,"stem":1774,"icon":418},{"title":1778,"path":1779,"stem":1780,"children":1781},"Block catalog","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-catalog","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-catalog\u002Findex",[1782],{"title":1778,"path":1779,"stem":1780},{"title":1784,"path":1785,"stem":1786,"children":1787},"Block options","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-options","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-options\u002Findex",[1788],{"title":1784,"path":1785,"stem":1786},{"title":1790,"path":1791,"stem":1792,"children":1793},"How a block works","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fhow-a-block-works","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fhow-a-block-works\u002Findex",[1794],{"title":1790,"path":1791,"stem":1792},{"title":1796,"path":1797,"stem":1798,"children":1799},"Inline editing","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Finline-editing","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Finline-editing\u002Findex",[1800],{"title":1796,"path":1797,"stem":1798},{"title":1802,"path":1803,"stem":1804,"children":1805},"Reading published pages","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Freading-pages","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Freading-pages\u002Findex",[1806],{"title":1802,"path":1803,"stem":1804},{"title":1808,"path":1809,"stem":1810,"children":1811},"Registering blocks","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fregistering","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fregistering\u002Findex",[1812],{"title":1808,"path":1809,"stem":1810},{"title":1814,"path":1815,"stem":1816,"children":1817},"Shells and fields","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fshells-and-fields","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fshells-and-fields\u002Findex",[1818],{"title":1814,"path":1815,"stem":1816},{"title":1820,"path":1821,"stem":1822,"children":1823,"icon":262},"Connect data","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata","docs\u002Fstudios\u002Fsites\u002Fdata\u002Findex",[1824,1825,1830,1836,1842,1847,1853,1859,1865],{"title":1820,"path":1821,"stem":1822,"icon":262},{"title":550,"path":1826,"stem":1827,"children":1828},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fauthentication","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fauthentication\u002Findex",[1829],{"title":550,"path":1826,"stem":1827},{"title":1831,"path":1832,"stem":1833,"children":1834},"The BFF pattern","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fbff-pattern","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fbff-pattern\u002Findex",[1835],{"title":1831,"path":1832,"stem":1833},{"title":1837,"path":1838,"stem":1839,"children":1840},"Catalog, cart, checkout","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fcatalog-cart-checkout","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fcatalog-cart-checkout\u002Findex",[1841],{"title":1837,"path":1838,"stem":1839},{"title":1297,"path":1843,"stem":1844,"children":1845},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fforms","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fforms\u002Findex",[1846],{"title":1297,"path":1843,"stem":1844},{"title":1848,"path":1849,"stem":1850,"children":1851},"Media and assets","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fmedia","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fmedia\u002Findex",[1852],{"title":1848,"path":1849,"stem":1850},{"title":1854,"path":1855,"stem":1856,"children":1857},"Multi-tenant themes","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fmulti-tenant-themes","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fmulti-tenant-themes\u002Findex",[1858],{"title":1854,"path":1855,"stem":1856},{"title":1860,"path":1861,"stem":1862,"children":1863},"Search collections","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch-collections","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch-collections\u002Findex",[1864],{"title":1860,"path":1861,"stem":1862},{"title":1866,"path":1867,"stem":1868,"children":1869},"Search","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch\u002Findex",[1870],{"title":1866,"path":1867,"stem":1868},{"title":1872,"path":1873,"stem":1874,"children":1875,"icon":1186},"Build and deploy","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Findex",[1876,1877,1883,1889,1895,1901,1907,1913,1991],{"title":1872,"path":1873,"stem":1874,"icon":1186},{"title":1878,"path":1879,"stem":1880,"children":1881},"Build configuration","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fbuild-configuration","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fbuild-configuration\u002Findex",[1882],{"title":1878,"path":1879,"stem":1880},{"title":1884,"path":1885,"stem":1886,"children":1887},"Compute specifications","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fcompute-specifications","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fcompute-specifications\u002Findex",[1888],{"title":1884,"path":1885,"stem":1886},{"title":1890,"path":1891,"stem":1892,"children":1893},"Environment variables","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fenvironment-variables","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fenvironment-variables\u002Findex",[1894],{"title":1890,"path":1891,"stem":1892},{"title":1896,"path":1897,"stem":1898,"children":1899},"From Git","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-git","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-git\u002Findex",[1900],{"title":1896,"path":1897,"stem":1898},{"title":1902,"path":1903,"stem":1904,"children":1905},"From the CLI","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-the-cli","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-the-cli\u002Findex",[1906],{"title":1902,"path":1903,"stem":1904},{"title":1908,"path":1909,"stem":1910,"children":1911},"Manually","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fmanually","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fmanually\u002Findex",[1912],{"title":1908,"path":1909,"stem":1910},{"title":1914,"path":1915,"stem":1916,"children":1917},"Quick-starts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Findex",[1918,1919,1925,1931,1937,1943,1949,1955,1961,1967,1973,1979,1985],{"title":1914,"path":1915,"stem":1916},{"title":1920,"path":1921,"stem":1922,"children":1923},"Deploy an Angular app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fangular","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fangular\u002Findex",[1924],{"title":1920,"path":1921,"stem":1922},{"title":1926,"path":1927,"stem":1928,"children":1929},"Deploy a Astro app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fastro","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fastro\u002Findex",[1930],{"title":1926,"path":1927,"stem":1928},{"title":1932,"path":1933,"stem":1934,"children":1935},"Deploy a Flutter Web app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fflutter","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fflutter\u002Findex",[1936],{"title":1932,"path":1933,"stem":1934},{"title":1938,"path":1939,"stem":1940,"children":1941},"Deploy a Next.js app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnextjs","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnextjs\u002Findex",[1942],{"title":1938,"path":1939,"stem":1940},{"title":1944,"path":1945,"stem":1946,"children":1947},"Deploy a Nuxt app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnuxt","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnuxt\u002Findex",[1948],{"title":1944,"path":1945,"stem":1946},{"title":1950,"path":1951,"stem":1952,"children":1953},"Deploy a React Native app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact-native","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact-native\u002Findex",[1954],{"title":1950,"path":1951,"stem":1952},{"title":1956,"path":1957,"stem":1958,"children":1959},"Deploy a React app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact\u002Findex",[1960],{"title":1956,"path":1957,"stem":1958},{"title":1962,"path":1963,"stem":1964,"children":1965},"Deploy a Remix app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fremix","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fremix\u002Findex",[1966],{"title":1962,"path":1963,"stem":1964},{"title":1968,"path":1969,"stem":1970,"children":1971},"Deploy a SvelteKit app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fsveltekit","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fsveltekit\u002Findex",[1972],{"title":1968,"path":1969,"stem":1970},{"title":1974,"path":1975,"stem":1976,"children":1977},"Deploy a TanStack Start app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Ftanstack-start","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Ftanstack-start\u002Findex",[1978],{"title":1974,"path":1975,"stem":1976},{"title":1980,"path":1981,"stem":1982,"children":1983},"Deploy a Vanilla JS app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvanilla","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvanilla\u002Findex",[1984],{"title":1980,"path":1981,"stem":1982},{"title":1986,"path":1987,"stem":1988,"children":1989},"Deploy a Vue.js app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvue","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvue\u002Findex",[1990],{"title":1986,"path":1987,"stem":1988},{"title":1992,"path":1993,"stem":1994,"children":1995},"Starting points","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fstarting-points","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fstarting-points\u002Findex",[1996],{"title":1992,"path":1993,"stem":1994},{"title":1097,"path":1998,"stem":1999,"children":2000,"icon":2002},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fgetting-started","docs\u002Fstudios\u002Fsites\u002Fgetting-started\u002Findex",[2001],{"title":1097,"path":1998,"stem":1999,"icon":2002},"i-lucide-terminal",{"title":2004,"path":2005,"stem":2006,"children":2007,"icon":615},"Production","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Findex",[2008,2009,2015,2021,2027,2033,2039],{"title":2004,"path":2005,"stem":2006,"icon":615},{"title":2010,"path":2011,"stem":2012,"children":2013},"Deployments","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdeployments","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdeployments\u002Findex",[2014],{"title":2010,"path":2011,"stem":2012},{"title":2016,"path":2017,"stem":2018,"children":2019},"Domains","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdomains","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdomains\u002Findex",[2020],{"title":2016,"path":2017,"stem":2018},{"title":2022,"path":2023,"stem":2024,"children":2025},"Instant rollbacks","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Finstant-rollbacks","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Finstant-rollbacks\u002Findex",[2026],{"title":2022,"path":2023,"stem":2024},{"title":2028,"path":2029,"stem":2030,"children":2031},"Logs","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Flogs","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Flogs\u002Findex",[2032],{"title":2028,"path":2029,"stem":2030},{"title":2034,"path":2035,"stem":2036,"children":2037},"Previews","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpreviews","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpreviews\u002Findex",[2038],{"title":2034,"path":2035,"stem":2036},{"title":2040,"path":2041,"stem":2042,"children":2043},"Publishing a theme","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpublishing-a-theme","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpublishing-a-theme\u002Findex",[2044],{"title":2040,"path":2041,"stem":2042},{"title":2046,"path":2047,"stem":2048,"children":2049,"icon":404},"Build the theme","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Findex",[2050,2051,2057,2063,2069,2075,2081,2087,2093,2111],{"title":2046,"path":2047,"stem":2048,"icon":404},{"title":2052,"path":2053,"stem":2054,"children":2055},"Theme anatomy","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fanatomy","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fanatomy\u002Findex",[2056],{"title":2052,"path":2053,"stem":2054},{"title":2058,"path":2059,"stem":2060,"children":2061},"Design tokens","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fdesign-tokens","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fdesign-tokens\u002Findex",[2062],{"title":2058,"path":2059,"stem":2060},{"title":2064,"path":2065,"stem":2066,"children":2067},"Frameworks","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fframeworks","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fframeworks\u002Findex",[2068],{"title":2064,"path":2065,"stem":2066},{"title":2070,"path":2071,"stem":2072,"children":2073},"The layer chain","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Flayer-chain","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Flayer-chain\u002Findex",[2074],{"title":2070,"path":2071,"stem":2072},{"title":2076,"path":2077,"stem":2078,"children":2079},"Local development","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Flocal-development","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Flocal-development\u002Findex",[2080],{"title":2076,"path":2077,"stem":2078},{"title":2082,"path":2083,"stem":2084,"children":2085},"Modules and plugins","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fmodules-and-plugins","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fmodules-and-plugins\u002Findex",[2086],{"title":2082,"path":2083,"stem":2084},{"title":2088,"path":2089,"stem":2090,"children":2091},"Overriding","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Foverriding","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Foverriding\u002Findex",[2092],{"title":2088,"path":2089,"stem":2090},{"title":2094,"path":2095,"stem":2096,"children":2097},"Rendering","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Findex",[2098,2099,2105],{"title":2094,"path":2095,"stem":2096},{"title":2100,"path":2101,"stem":2102,"children":2103},"SSR","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fssr","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fssr\u002Findex",[2104],{"title":2100,"path":2101,"stem":2102},{"title":2106,"path":2107,"stem":2108,"children":2109},"Static","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fstatic","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fstatic\u002Findex",[2110],{"title":2106,"path":2107,"stem":2108},{"title":2112,"path":2113,"stem":2114,"children":2115},"Service modes","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fservice-modes","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fservice-modes\u002Findex",[2116],{"title":2112,"path":2113,"stem":2114},{"title":2118,"path":2119,"stem":2120,"children":2121},"Tools","\u002Fdocs\u002Ftools","docs\u002Ftools\u002Findex",[2122,2123,2130,2345],{"title":2118,"path":2119,"stem":2120},{"title":2124,"path":2125,"stem":2126,"children":2127,"icon":2129},"AI agents","\u002Fdocs\u002Ftools\u002Fai-agents","docs\u002Ftools\u002Fai-agents\u002Findex",[2128],{"title":2124,"path":2125,"stem":2126,"icon":2129},"i-lucide-shield-alert",{"title":2131,"path":2132,"stem":2133,"children":2134},"Command line","\u002Fdocs\u002Ftools\u002Fcommand-line","docs\u002Ftools\u002Fcommand-line\u002Findex",[2135,2136,2142,2147,2153,2159,2165,2171,2177,2183,2303,2309,2315,2321,2327,2333,2339],{"title":2131,"path":2132,"stem":2133},{"title":2137,"path":2138,"stem":2139,"children":2140},"Aliases","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Faliases","docs\u002Ftools\u002Fcommand-line\u002Faliases\u002Findex",[2141],{"title":2137,"path":2138,"stem":2139},{"title":550,"path":2143,"stem":2144,"children":2145},"\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fauthentication","docs\u002Ftools\u002Fcommand-line\u002Fauthentication\u002Findex",[2146],{"title":550,"path":2143,"stem":2144},{"title":2148,"path":2149,"stem":2150,"children":2151},"Commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fcommands","docs\u002Ftools\u002Fcommand-line\u002Fcommands\u002Findex",[2152],{"title":2148,"path":2149,"stem":2150},{"title":2154,"path":2155,"stem":2156,"children":2157},"Global commands reference","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fglobal-commands","docs\u002Ftools\u002Fcommand-line\u002Fglobal-commands\u002Findex",[2158],{"title":2154,"path":2155,"stem":2156},{"title":2160,"path":2161,"stem":2162,"children":2163},"Installation","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Finstallation","docs\u002Ftools\u002Fcommand-line\u002Finstallation\u002Findex",[2164],{"title":2160,"path":2161,"stem":2162},{"title":2166,"path":2167,"stem":2168,"children":2169},"Interactive use","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Finteractive","docs\u002Ftools\u002Fcommand-line\u002Finteractive\u002Findex",[2170],{"title":2166,"path":2167,"stem":2168},{"title":2172,"path":2173,"stem":2174,"children":2175},"Non-interactive use","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fnon-interactive","docs\u002Ftools\u002Fcommand-line\u002Fnon-interactive\u002Findex",[2176],{"title":2172,"path":2173,"stem":2174},{"title":2178,"path":2179,"stem":2180,"children":2181},"Project configuration","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fproject-configuration","docs\u002Ftools\u002Fcommand-line\u002Fproject-configuration\u002Findex",[2182],{"title":2178,"path":2179,"stem":2180},{"title":2184,"path":2185,"stem":2186,"children":2187},"Command reference","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Findex",[2188,2189,2195,2201,2207,2213,2219,2225,2231,2237,2243,2249,2255,2261,2267,2273,2279,2285,2291,2297],{"title":2184,"path":2185,"stem":2186},{"title":2190,"path":2191,"stem":2192,"children":2193},"About commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fabout","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fabout\u002Findex",[2194],{"title":2190,"path":2191,"stem":2192},{"title":2196,"path":2197,"stem":2198,"children":2199},"Apps commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fapps","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fapps\u002Findex",[2200],{"title":2196,"path":2197,"stem":2198},{"title":2202,"path":2203,"stem":2204,"children":2205},"Carts commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcarts","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcarts\u002Findex",[2206],{"title":2202,"path":2203,"stem":2204},{"title":2208,"path":2209,"stem":2210,"children":2211},"Channels commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fchannels","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fchannels\u002Findex",[2212],{"title":2208,"path":2209,"stem":2210},{"title":2214,"path":2215,"stem":2216,"children":2217},"Create commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcreate","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcreate\u002Findex",[2218],{"title":2214,"path":2215,"stem":2216},{"title":2220,"path":2221,"stem":2222,"children":2223},"Customers commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcustomers","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcustomers\u002Findex",[2224],{"title":2220,"path":2221,"stem":2222},{"title":2226,"path":2227,"stem":2228,"children":2229},"Deploy commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fdeploy","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fdeploy\u002Findex",[2230],{"title":2226,"path":2227,"stem":2228},{"title":2232,"path":2233,"stem":2234,"children":2235},"Forms commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fforms","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fforms\u002Findex",[2236],{"title":2232,"path":2233,"stem":2234},{"title":2238,"path":2239,"stem":2240,"children":2241},"Markets commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fmarkets","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fmarkets\u002Findex",[2242],{"title":2238,"path":2239,"stem":2240},{"title":2244,"path":2245,"stem":2246,"children":2247},"Order lists commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Forderlists","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Forderlists\u002Findex",[2248],{"title":2244,"path":2245,"stem":2246},{"title":2250,"path":2251,"stem":2252,"children":2253},"Orders commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Forders","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Forders\u002Findex",[2254],{"title":2250,"path":2251,"stem":2252},{"title":2256,"path":2257,"stem":2258,"children":2259},"Pages commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fpages","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fpages\u002Findex",[2260],{"title":2256,"path":2257,"stem":2258},{"title":2262,"path":2263,"stem":2264,"children":2265},"Prices commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fprices","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fprices\u002Findex",[2266],{"title":2262,"path":2263,"stem":2264},{"title":2268,"path":2269,"stem":2270,"children":2271},"Products commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fproducts","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fproducts\u002Findex",[2272],{"title":2268,"path":2269,"stem":2270},{"title":2274,"path":2275,"stem":2276,"children":2277},"Search commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsearch","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsearch\u002Findex",[2278],{"title":2274,"path":2275,"stem":2276},{"title":2280,"path":2281,"stem":2282,"children":2283},"Settings commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsettings","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsettings\u002Findex",[2284],{"title":2280,"path":2281,"stem":2282},{"title":2286,"path":2287,"stem":2288,"children":2289},"Sites commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsites","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsites\u002Findex",[2290],{"title":2286,"path":2287,"stem":2288},{"title":2292,"path":2293,"stem":2294,"children":2295},"Skills commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fskills","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fskills\u002Findex",[2296],{"title":2292,"path":2293,"stem":2294},{"title":2298,"path":2299,"stem":2300,"children":2301},"Storage commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fstorage","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fstorage\u002Findex",[2302],{"title":2298,"path":2299,"stem":2300},{"title":2304,"path":2305,"stem":2306,"children":2307},"Interactive shell (REPL)","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Frepl","docs\u002Ftools\u002Fcommand-line\u002Frepl\u002Findex",[2308],{"title":2304,"path":2305,"stem":2306},{"title":2310,"path":2311,"stem":2312,"children":2313},"Scaffolding","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fscaffolding","docs\u002Ftools\u002Fcommand-line\u002Fscaffolding\u002Findex",[2314],{"title":2310,"path":2311,"stem":2312},{"title":2316,"path":2317,"stem":2318,"children":2319},"Scripting & output","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fscripting","docs\u002Ftools\u002Fcommand-line\u002Fscripting\u002Findex",[2320],{"title":2316,"path":2317,"stem":2318},{"title":2322,"path":2323,"stem":2324,"children":2325},"Skills","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fskills","docs\u002Ftools\u002Fcommand-line\u002Fskills\u002Findex",[2326],{"title":2322,"path":2323,"stem":2324},{"title":2328,"path":2329,"stem":2330,"children":2331},"Full-screen app (TUI)","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Ftui","docs\u002Ftools\u002Fcommand-line\u002Ftui\u002Findex",[2332],{"title":2328,"path":2329,"stem":2330},{"title":2334,"path":2335,"stem":2336,"children":2337},"Type generation","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Ftype-generation","docs\u002Ftools\u002Fcommand-line\u002Ftype-generation\u002Findex",[2338],{"title":2334,"path":2335,"stem":2336},{"title":2340,"path":2341,"stem":2342,"children":2343},"Background watchers","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fwatch","docs\u002Ftools\u002Fcommand-line\u002Fwatch\u002Findex",[2344],{"title":2340,"path":2341,"stem":2342},{"title":2346,"path":2347,"stem":2348,"children":2349},"Model Context Protocol","\u002Fdocs\u002Ftools\u002Fmcp","docs\u002Ftools\u002Fmcp\u002Findex",[2350,2351,2357,2363,2369,2375,2381,2387,2393],{"title":2346,"path":2347,"stem":2348},{"title":2352,"path":2353,"stem":2354,"children":2355},"revenexx docs MCP in Google Antigravity","\u002Fdocs\u002Ftools\u002Fmcp\u002Fantigravity","docs\u002Ftools\u002Fmcp\u002Fantigravity\u002Findex",[2356],{"title":2352,"path":2353,"stem":2354},{"title":2358,"path":2359,"stem":2360,"children":2361},"revenexx docs MCP in Claude Code","\u002Fdocs\u002Ftools\u002Fmcp\u002Fclaude-code","docs\u002Ftools\u002Fmcp\u002Fclaude-code\u002Findex",[2362],{"title":2358,"path":2359,"stem":2360},{"title":2364,"path":2365,"stem":2366,"children":2367},"revenexx docs MCP in Claude Desktop","\u002Fdocs\u002Ftools\u002Fmcp\u002Fclaude-desktop","docs\u002Ftools\u002Fmcp\u002Fclaude-desktop\u002Findex",[2368],{"title":2364,"path":2365,"stem":2366},{"title":2370,"path":2371,"stem":2372,"children":2373},"revenexx docs MCP in Cursor","\u002Fdocs\u002Ftools\u002Fmcp\u002Fcursor","docs\u002Ftools\u002Fmcp\u002Fcursor\u002Findex",[2374],{"title":2370,"path":2371,"stem":2372},{"title":2376,"path":2377,"stem":2378,"children":2379},"revenexx docs MCP in OpenCode","\u002Fdocs\u002Ftools\u002Fmcp\u002Fopencode","docs\u002Ftools\u002Fmcp\u002Fopencode\u002Findex",[2380],{"title":2376,"path":2377,"stem":2378},{"title":2382,"path":2383,"stem":2384,"children":2385},"revenexx docs MCP in VS Code","\u002Fdocs\u002Ftools\u002Fmcp\u002Fvscode","docs\u002Ftools\u002Fmcp\u002Fvscode\u002Findex",[2386],{"title":2382,"path":2383,"stem":2384},{"title":2388,"path":2389,"stem":2390,"children":2391},"revenexx docs MCP in Windsurf","\u002Fdocs\u002Ftools\u002Fmcp\u002Fwindsurf","docs\u002Ftools\u002Fmcp\u002Fwindsurf\u002Findex",[2392],{"title":2388,"path":2389,"stem":2390},{"title":2394,"path":2395,"stem":2396,"children":2397},"revenexx docs MCP in Zenflow","\u002Fdocs\u002Ftools\u002Fmcp\u002Fzenflow","docs\u002Ftools\u002Fmcp\u002Fzenflow\u002Findex",[2398],{"title":2394,"path":2395,"stem":2396},{"id":2400,"title":406,"body":2401,"description":6266,"extension":6267,"landing":6268,"links":6268,"meta":6269,"navigation":6270,"path":407,"seo":6271,"sitemap":6272,"stem":408,"__hash__":6273},"docs\u002Fdocs\u002Fguides\u002Fstorefronts\u002Fbuild-a-block\u002Findex.md",{"type":2402,"value":2403,"toc":6253},"minimark",[2404,2408,2429,2433,2444,2469,2473,2476,3188,3201,3207,3402,3406,3409,3416,3531,3534,3693,3716,3720,3727,3732,3735,3857,3864,4096,4101,4105,4111,4720,4723,4727,4738,5787,5794,5917,5920,6146,6149,6153,6187,6191,6220,6224,6249],[2405,2406,2407],"p",{},"Blocks are what make a Theme composable. An editor drags a block onto a page in Cockpit, sets its props, and the Theme renders it. This guide shows how to write a block, register it so editors can use it, and connect a block to live catalog data without slowing down the first paint.",[2405,2409,2410,2411,2415,2416,2420,2421,2424,2425,2428],{},"This page is for ",[2412,2413,2414],"strong",{},"frontend developers"," comfortable with Vue 3 ",[2417,2418,2419],"code",{},"\u003Cscript setup>",". ",[2412,2422,2423],{},"Prerequisites:"," a scaffolded Theme, see ",[2426,2427,413],"a",{"href":414},".",[2430,2431,1790],"h2",{"id":2432},"how-a-block-works",[2405,2434,2435,2436,2439,2440,2443],{},"A Blökkli block is a Vue component with one extra call: ",[2417,2437,2438],{},"defineBlokkli",". That call declares the block's ",[2417,2441,2442],{},"bundle"," (the id that ties the component to the manifest) and, optionally, the mock props the editor shows while composing. The component's props are the fields an editor fills in on the canvas.",[2405,2445,2446,2447,2450,2451,2454,2455,2454,2458,2461,2462,2465,2466,2468],{},"Block ids are ",[2417,2448,2449],{},"snake_case"," (",[2417,2452,2453],{},"hero",", ",[2417,2456,2457],{},"product_grid",[2417,2459,2460],{},"text","), and a block lives under ",[2417,2463,2464],{},"app\u002Fcomponents\u002Fblokkli\u002F\u003Cid>\u002Findex.vue",", so the directory name is the id. See ",[2426,2467,1790],{"href":1791},". A Theme keeps a small map from block id to component so the renderer can resolve a page's block tree to real components.",[2430,2470,2472],{"id":2471},"_1-write-a-block-component","1. Write a block component",[2405,2474,2475],{},"Start with a self-contained block — a hero with a headline, an optional subline, and a background choice. The editor sees the props as editable fields.",[2477,2478,2484],"pre",{"className":2479,"code":2480,"filename":2481,"language":2482,"meta":2483,"style":2483},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst props = withDefaults(defineProps\u003C{\n  headline: string\n  subheadline?: string\n  bgPreset?: string\n  bgCustom?: string\n}>(), {\n  subheadline: undefined,\n  bgPreset: 'auto',\n  bgCustom: '#4f46e5',\n})\n\ndefineBlokkli({\n  bundle: 'hero',\n  editor: {\n    \u002F\u002F What the editor previews before real content is entered.\n    mockProps: () => ({\n      headline: 'New hero headline',\n      subheadline: 'New hero subheadline',\n    }),\n  },\n})\n\nconst PRESET_HEX: Record\u003Cstring, string> = {\n  white: '#ffffff',\n  sand: '#f5efe6',\n  slate: '#1f2937',\n  mint: '#a7f3d0',\n}\n\nconst bgHex = computed\u003Cstring | null>(() => {\n  if (props.bgPreset === 'custom') return props.bgCustom ?? null\n  if (props.bgPreset in PRESET_HEX) return PRESET_HEX[props.bgPreset] ?? null\n  return null\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Csection\n    class=\"hero\"\n    :style=\"bgHex ? { backgroundColor: bgHex } : undefined\"\n  >\n    \u003Ch1>{{ props.headline }}\u003C\u002Fh1>\n    \u003Cp v-if=\"props.subheadline\" class=\"subline\">{{ props.subheadline }}\u003C\u002Fp>\n  \u003C\u002Fsection>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002Fblokkli\u002Fhero\u002Findex.vue","vue","",[2417,2485,2486,2521,2546,2559,2570,2580,2590,2605,2615,2634,2650,2659,2666,2676,2692,2702,2709,2727,2744,2761,2772,2778,2785,2790,2821,2838,2855,2872,2889,2895,2900,2933,2980,3021,3029,3036,3046,3051,3061,3070,3085,3100,3106,3126,3168,3179],{"__ignoreMap":2483},[2487,2488,2491,2495,2499,2503,2506,2509,2512,2516,2518],"span",{"class":2489,"line":2490},"line",1,[2487,2492,2494],{"class":2493},"sMK4o","\u003C",[2487,2496,2498],{"class":2497},"swJcz","script",[2487,2500,2502],{"class":2501},"spNyl"," setup",[2487,2504,2505],{"class":2501}," lang",[2487,2507,2508],{"class":2493},"=",[2487,2510,2511],{"class":2493},"\"",[2487,2513,2515],{"class":2514},"sfazB","ts",[2487,2517,2511],{"class":2493},[2487,2519,2520],{"class":2493},">\n",[2487,2522,2524,2527,2531,2533,2537,2540,2543],{"class":2489,"line":2523},2,[2487,2525,2526],{"class":2501},"const",[2487,2528,2530],{"class":2529},"sTEyZ"," props ",[2487,2532,2508],{"class":2493},[2487,2534,2536],{"class":2535},"s2Zo4"," withDefaults",[2487,2538,2539],{"class":2529},"(",[2487,2541,2542],{"class":2535},"defineProps",[2487,2544,2545],{"class":2493},"\u003C{\n",[2487,2547,2549,2552,2555],{"class":2489,"line":2548},3,[2487,2550,2551],{"class":2497},"  headline",[2487,2553,2554],{"class":2493},":",[2487,2556,2558],{"class":2557},"sBMFI"," string\n",[2487,2560,2562,2565,2568],{"class":2489,"line":2561},4,[2487,2563,2564],{"class":2497},"  subheadline",[2487,2566,2567],{"class":2493},"?:",[2487,2569,2558],{"class":2557},[2487,2571,2573,2576,2578],{"class":2489,"line":2572},5,[2487,2574,2575],{"class":2497},"  bgPreset",[2487,2577,2567],{"class":2493},[2487,2579,2558],{"class":2557},[2487,2581,2583,2586,2588],{"class":2489,"line":2582},6,[2487,2584,2585],{"class":2497},"  bgCustom",[2487,2587,2567],{"class":2493},[2487,2589,2558],{"class":2557},[2487,2591,2593,2596,2599,2602],{"class":2489,"line":2592},7,[2487,2594,2595],{"class":2493},"}>",[2487,2597,2598],{"class":2529},"()",[2487,2600,2601],{"class":2493},",",[2487,2603,2604],{"class":2493}," {\n",[2487,2606,2608,2610,2612],{"class":2489,"line":2607},8,[2487,2609,2564],{"class":2497},[2487,2611,2554],{"class":2493},[2487,2613,2614],{"class":2493}," undefined,\n",[2487,2616,2618,2620,2622,2625,2628,2631],{"class":2489,"line":2617},9,[2487,2619,2575],{"class":2497},[2487,2621,2554],{"class":2493},[2487,2623,2624],{"class":2493}," '",[2487,2626,2627],{"class":2514},"auto",[2487,2629,2630],{"class":2493},"'",[2487,2632,2633],{"class":2493},",\n",[2487,2635,2637,2639,2641,2643,2646,2648],{"class":2489,"line":2636},10,[2487,2638,2585],{"class":2497},[2487,2640,2554],{"class":2493},[2487,2642,2624],{"class":2493},[2487,2644,2645],{"class":2514},"#4f46e5",[2487,2647,2630],{"class":2493},[2487,2649,2633],{"class":2493},[2487,2651,2653,2656],{"class":2489,"line":2652},11,[2487,2654,2655],{"class":2493},"}",[2487,2657,2658],{"class":2529},")\n",[2487,2660,2662],{"class":2489,"line":2661},12,[2487,2663,2665],{"emptyLinePlaceholder":2664},true,"\n",[2487,2667,2669,2671,2673],{"class":2489,"line":2668},13,[2487,2670,2438],{"class":2535},[2487,2672,2539],{"class":2529},[2487,2674,2675],{"class":2493},"{\n",[2487,2677,2679,2682,2684,2686,2688,2690],{"class":2489,"line":2678},14,[2487,2680,2681],{"class":2497},"  bundle",[2487,2683,2554],{"class":2493},[2487,2685,2624],{"class":2493},[2487,2687,2453],{"class":2514},[2487,2689,2630],{"class":2493},[2487,2691,2633],{"class":2493},[2487,2693,2695,2698,2700],{"class":2489,"line":2694},15,[2487,2696,2697],{"class":2497},"  editor",[2487,2699,2554],{"class":2493},[2487,2701,2604],{"class":2493},[2487,2703,2705],{"class":2489,"line":2704},16,[2487,2706,2708],{"class":2707},"sHwdD","    \u002F\u002F What the editor previews before real content is entered.\n",[2487,2710,2712,2715,2717,2720,2723,2725],{"class":2489,"line":2711},17,[2487,2713,2714],{"class":2535},"    mockProps",[2487,2716,2554],{"class":2493},[2487,2718,2719],{"class":2493}," ()",[2487,2721,2722],{"class":2501}," =>",[2487,2724,2450],{"class":2529},[2487,2726,2675],{"class":2493},[2487,2728,2730,2733,2735,2737,2740,2742],{"class":2489,"line":2729},18,[2487,2731,2732],{"class":2497},"      headline",[2487,2734,2554],{"class":2493},[2487,2736,2624],{"class":2493},[2487,2738,2739],{"class":2514},"New hero headline",[2487,2741,2630],{"class":2493},[2487,2743,2633],{"class":2493},[2487,2745,2747,2750,2752,2754,2757,2759],{"class":2489,"line":2746},19,[2487,2748,2749],{"class":2497},"      subheadline",[2487,2751,2554],{"class":2493},[2487,2753,2624],{"class":2493},[2487,2755,2756],{"class":2514},"New hero subheadline",[2487,2758,2630],{"class":2493},[2487,2760,2633],{"class":2493},[2487,2762,2764,2767,2770],{"class":2489,"line":2763},20,[2487,2765,2766],{"class":2493},"    }",[2487,2768,2769],{"class":2529},")",[2487,2771,2633],{"class":2493},[2487,2773,2775],{"class":2489,"line":2774},21,[2487,2776,2777],{"class":2493},"  },\n",[2487,2779,2781,2783],{"class":2489,"line":2780},22,[2487,2782,2655],{"class":2493},[2487,2784,2658],{"class":2529},[2487,2786,2788],{"class":2489,"line":2787},23,[2487,2789,2665],{"emptyLinePlaceholder":2664},[2487,2791,2793,2795,2798,2800,2803,2805,2808,2810,2813,2816,2819],{"class":2489,"line":2792},24,[2487,2794,2526],{"class":2501},[2487,2796,2797],{"class":2529}," PRESET_HEX",[2487,2799,2554],{"class":2493},[2487,2801,2802],{"class":2557}," Record",[2487,2804,2494],{"class":2493},[2487,2806,2807],{"class":2557},"string",[2487,2809,2601],{"class":2493},[2487,2811,2812],{"class":2557}," string",[2487,2814,2815],{"class":2493},">",[2487,2817,2818],{"class":2493}," =",[2487,2820,2604],{"class":2493},[2487,2822,2824,2827,2829,2831,2834,2836],{"class":2489,"line":2823},25,[2487,2825,2826],{"class":2497},"  white",[2487,2828,2554],{"class":2493},[2487,2830,2624],{"class":2493},[2487,2832,2833],{"class":2514},"#ffffff",[2487,2835,2630],{"class":2493},[2487,2837,2633],{"class":2493},[2487,2839,2841,2844,2846,2848,2851,2853],{"class":2489,"line":2840},26,[2487,2842,2843],{"class":2497},"  sand",[2487,2845,2554],{"class":2493},[2487,2847,2624],{"class":2493},[2487,2849,2850],{"class":2514},"#f5efe6",[2487,2852,2630],{"class":2493},[2487,2854,2633],{"class":2493},[2487,2856,2858,2861,2863,2865,2868,2870],{"class":2489,"line":2857},27,[2487,2859,2860],{"class":2497},"  slate",[2487,2862,2554],{"class":2493},[2487,2864,2624],{"class":2493},[2487,2866,2867],{"class":2514},"#1f2937",[2487,2869,2630],{"class":2493},[2487,2871,2633],{"class":2493},[2487,2873,2875,2878,2880,2882,2885,2887],{"class":2489,"line":2874},28,[2487,2876,2877],{"class":2497},"  mint",[2487,2879,2554],{"class":2493},[2487,2881,2624],{"class":2493},[2487,2883,2884],{"class":2514},"#a7f3d0",[2487,2886,2630],{"class":2493},[2487,2888,2633],{"class":2493},[2487,2890,2892],{"class":2489,"line":2891},29,[2487,2893,2894],{"class":2493},"}\n",[2487,2896,2898],{"class":2489,"line":2897},30,[2487,2899,2665],{"emptyLinePlaceholder":2664},[2487,2901,2903,2905,2908,2910,2913,2915,2917,2920,2923,2925,2927,2929,2931],{"class":2489,"line":2902},31,[2487,2904,2526],{"class":2501},[2487,2906,2907],{"class":2529}," bgHex ",[2487,2909,2508],{"class":2493},[2487,2911,2912],{"class":2535}," computed",[2487,2914,2494],{"class":2493},[2487,2916,2807],{"class":2557},[2487,2918,2919],{"class":2493}," |",[2487,2921,2922],{"class":2557}," null",[2487,2924,2815],{"class":2493},[2487,2926,2539],{"class":2529},[2487,2928,2598],{"class":2493},[2487,2930,2722],{"class":2501},[2487,2932,2604],{"class":2493},[2487,2934,2936,2940,2942,2945,2947,2950,2953,2955,2958,2960,2963,2966,2969,2971,2974,2977],{"class":2489,"line":2935},32,[2487,2937,2939],{"class":2938},"s7zQu","  if",[2487,2941,2450],{"class":2497},[2487,2943,2944],{"class":2529},"props",[2487,2946,2428],{"class":2493},[2487,2948,2949],{"class":2529},"bgPreset",[2487,2951,2952],{"class":2493}," ===",[2487,2954,2624],{"class":2493},[2487,2956,2957],{"class":2514},"custom",[2487,2959,2630],{"class":2493},[2487,2961,2962],{"class":2497},") ",[2487,2964,2965],{"class":2938},"return",[2487,2967,2968],{"class":2529}," props",[2487,2970,2428],{"class":2493},[2487,2972,2973],{"class":2529},"bgCustom",[2487,2975,2976],{"class":2493}," ??",[2487,2978,2979],{"class":2493}," null\n",[2487,2981,2983,2985,2987,2989,2991,2993,2996,2998,3000,3002,3004,3007,3009,3011,3013,3016,3019],{"class":2489,"line":2982},33,[2487,2984,2939],{"class":2938},[2487,2986,2450],{"class":2497},[2487,2988,2944],{"class":2529},[2487,2990,2428],{"class":2493},[2487,2992,2949],{"class":2529},[2487,2994,2995],{"class":2493}," in",[2487,2997,2797],{"class":2529},[2487,2999,2962],{"class":2497},[2487,3001,2965],{"class":2938},[2487,3003,2797],{"class":2529},[2487,3005,3006],{"class":2497},"[",[2487,3008,2944],{"class":2529},[2487,3010,2428],{"class":2493},[2487,3012,2949],{"class":2529},[2487,3014,3015],{"class":2497},"] ",[2487,3017,3018],{"class":2493},"??",[2487,3020,2979],{"class":2493},[2487,3022,3024,3027],{"class":2489,"line":3023},34,[2487,3025,3026],{"class":2938},"  return",[2487,3028,2979],{"class":2493},[2487,3030,3032,3034],{"class":2489,"line":3031},35,[2487,3033,2655],{"class":2493},[2487,3035,2658],{"class":2529},[2487,3037,3039,3042,3044],{"class":2489,"line":3038},36,[2487,3040,3041],{"class":2493},"\u003C\u002F",[2487,3043,2498],{"class":2497},[2487,3045,2520],{"class":2493},[2487,3047,3049],{"class":2489,"line":3048},37,[2487,3050,2665],{"emptyLinePlaceholder":2664},[2487,3052,3054,3056,3059],{"class":2489,"line":3053},38,[2487,3055,2494],{"class":2493},[2487,3057,3058],{"class":2497},"template",[2487,3060,2520],{"class":2493},[2487,3062,3064,3067],{"class":2489,"line":3063},39,[2487,3065,3066],{"class":2493},"  \u003C",[2487,3068,3069],{"class":2497},"section\n",[2487,3071,3073,3076,3078,3080,3082],{"class":2489,"line":3072},40,[2487,3074,3075],{"class":2501},"    class",[2487,3077,2508],{"class":2493},[2487,3079,2511],{"class":2493},[2487,3081,2453],{"class":2514},[2487,3083,3084],{"class":2493},"\"\n",[2487,3086,3088,3091,3093,3095,3098],{"class":2489,"line":3087},41,[2487,3089,3090],{"class":2501},"    :style",[2487,3092,2508],{"class":2493},[2487,3094,2511],{"class":2493},[2487,3096,3097],{"class":2514},"bgHex ? { backgroundColor: bgHex } : undefined",[2487,3099,3084],{"class":2493},[2487,3101,3103],{"class":2489,"line":3102},42,[2487,3104,3105],{"class":2493},"  >\n",[2487,3107,3109,3112,3115,3117,3120,3122,3124],{"class":2489,"line":3108},43,[2487,3110,3111],{"class":2493},"    \u003C",[2487,3113,3114],{"class":2497},"h1",[2487,3116,2815],{"class":2493},[2487,3118,3119],{"class":2529},"{{ props.headline }}",[2487,3121,3041],{"class":2493},[2487,3123,3114],{"class":2497},[2487,3125,2520],{"class":2493},[2487,3127,3129,3131,3133,3136,3138,3140,3143,3145,3148,3150,3152,3155,3157,3159,3162,3164,3166],{"class":2489,"line":3128},44,[2487,3130,3111],{"class":2493},[2487,3132,2405],{"class":2497},[2487,3134,3135],{"class":2501}," v-if",[2487,3137,2508],{"class":2493},[2487,3139,2511],{"class":2493},[2487,3141,3142],{"class":2514},"props.subheadline",[2487,3144,2511],{"class":2493},[2487,3146,3147],{"class":2501}," class",[2487,3149,2508],{"class":2493},[2487,3151,2511],{"class":2493},[2487,3153,3154],{"class":2514},"subline",[2487,3156,2511],{"class":2493},[2487,3158,2815],{"class":2493},[2487,3160,3161],{"class":2529},"{{ props.subheadline }}",[2487,3163,3041],{"class":2493},[2487,3165,2405],{"class":2497},[2487,3167,2520],{"class":2493},[2487,3169,3171,3174,3177],{"class":2489,"line":3170},45,[2487,3172,3173],{"class":2493},"  \u003C\u002F",[2487,3175,3176],{"class":2497},"section",[2487,3178,2520],{"class":2493},[2487,3180,3182,3184,3186],{"class":2489,"line":3181},46,[2487,3183,3041],{"class":2493},[2487,3185,3058],{"class":2497},[2487,3187,2520],{"class":2493},[2405,3189,3190,3193,3194,3196,3197,3200],{},[2417,3191,3192],{},"bundle: 'hero'"," is the link between this component and the ",[2417,3195,2453],{}," entry in your manifest. The ",[2417,3198,3199],{},"mockProps"," give the editor something to show before real content exists.",[2405,3202,3203,3204,3206],{},"The ",[2417,3205,2460],{}," block that the next steps register is the same shape with one field:",[2477,3208,3211],{"className":2479,"code":3209,"filename":3210,"language":2482,"meta":2483,"style":2483},"\u003Cscript setup lang=\"ts\">\ndefineProps\u003C{ body: string }>()\n\ndefineBlokkli({\n  bundle: 'text',\n  editor: {\n    mockProps: () => ({ body: 'Some editorial text.' }),\n  },\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"text\">\n    \u003Cp>{{ body }}\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002Fblokkli\u002Ftext\u002Findex.vue",[2417,3212,3213,3233,3253,3257,3265,3279,3287,3320,3324,3330,3338,3342,3350,3369,3386,3394],{"__ignoreMap":2483},[2487,3214,3215,3217,3219,3221,3223,3225,3227,3229,3231],{"class":2489,"line":2490},[2487,3216,2494],{"class":2493},[2487,3218,2498],{"class":2497},[2487,3220,2502],{"class":2501},[2487,3222,2505],{"class":2501},[2487,3224,2508],{"class":2493},[2487,3226,2511],{"class":2493},[2487,3228,2515],{"class":2514},[2487,3230,2511],{"class":2493},[2487,3232,2520],{"class":2493},[2487,3234,3235,3237,3240,3243,3245,3247,3250],{"class":2489,"line":2523},[2487,3236,2542],{"class":2535},[2487,3238,3239],{"class":2493},"\u003C{",[2487,3241,3242],{"class":2497}," body",[2487,3244,2554],{"class":2493},[2487,3246,2812],{"class":2557},[2487,3248,3249],{"class":2493}," }>",[2487,3251,3252],{"class":2529},"()\n",[2487,3254,3255],{"class":2489,"line":2548},[2487,3256,2665],{"emptyLinePlaceholder":2664},[2487,3258,3259,3261,3263],{"class":2489,"line":2561},[2487,3260,2438],{"class":2535},[2487,3262,2539],{"class":2529},[2487,3264,2675],{"class":2493},[2487,3266,3267,3269,3271,3273,3275,3277],{"class":2489,"line":2572},[2487,3268,2681],{"class":2497},[2487,3270,2554],{"class":2493},[2487,3272,2624],{"class":2493},[2487,3274,2460],{"class":2514},[2487,3276,2630],{"class":2493},[2487,3278,2633],{"class":2493},[2487,3280,3281,3283,3285],{"class":2489,"line":2582},[2487,3282,2697],{"class":2497},[2487,3284,2554],{"class":2493},[2487,3286,2604],{"class":2493},[2487,3288,3289,3291,3293,3295,3297,3299,3302,3304,3306,3308,3311,3313,3316,3318],{"class":2489,"line":2592},[2487,3290,2714],{"class":2535},[2487,3292,2554],{"class":2493},[2487,3294,2719],{"class":2493},[2487,3296,2722],{"class":2501},[2487,3298,2450],{"class":2529},[2487,3300,3301],{"class":2493},"{",[2487,3303,3242],{"class":2497},[2487,3305,2554],{"class":2493},[2487,3307,2624],{"class":2493},[2487,3309,3310],{"class":2514},"Some editorial text.",[2487,3312,2630],{"class":2493},[2487,3314,3315],{"class":2493}," }",[2487,3317,2769],{"class":2529},[2487,3319,2633],{"class":2493},[2487,3321,3322],{"class":2489,"line":2607},[2487,3323,2777],{"class":2493},[2487,3325,3326,3328],{"class":2489,"line":2617},[2487,3327,2655],{"class":2493},[2487,3329,2658],{"class":2529},[2487,3331,3332,3334,3336],{"class":2489,"line":2636},[2487,3333,3041],{"class":2493},[2487,3335,2498],{"class":2497},[2487,3337,2520],{"class":2493},[2487,3339,3340],{"class":2489,"line":2652},[2487,3341,2665],{"emptyLinePlaceholder":2664},[2487,3343,3344,3346,3348],{"class":2489,"line":2661},[2487,3345,2494],{"class":2493},[2487,3347,3058],{"class":2497},[2487,3349,2520],{"class":2493},[2487,3351,3352,3354,3357,3359,3361,3363,3365,3367],{"class":2489,"line":2668},[2487,3353,3066],{"class":2493},[2487,3355,3356],{"class":2497},"div",[2487,3358,3147],{"class":2501},[2487,3360,2508],{"class":2493},[2487,3362,2511],{"class":2493},[2487,3364,2460],{"class":2514},[2487,3366,2511],{"class":2493},[2487,3368,2520],{"class":2493},[2487,3370,3371,3373,3375,3377,3380,3382,3384],{"class":2489,"line":2678},[2487,3372,3111],{"class":2493},[2487,3374,2405],{"class":2497},[2487,3376,2815],{"class":2493},[2487,3378,3379],{"class":2529},"{{ body }}",[2487,3381,3041],{"class":2493},[2487,3383,2405],{"class":2497},[2487,3385,2520],{"class":2493},[2487,3387,3388,3390,3392],{"class":2489,"line":2694},[2487,3389,3173],{"class":2493},[2487,3391,3356],{"class":2497},[2487,3393,2520],{"class":2493},[2487,3395,3396,3398,3400],{"class":2489,"line":2704},[2487,3397,3041],{"class":2493},[2487,3399,3058],{"class":2497},[2487,3401,2520],{"class":2493},[2430,3403,3405],{"id":3404},"_2-register-the-block","2. Register the block",[2405,3407,3408],{},"Two registrations make the block usable.",[2405,3410,3411,3412,3415],{},"First, declare it in ",[2417,3413,3414],{},"theme.json"," so it appears in the editor's block list:",[2477,3417,3421],{"className":3418,"code":3419,"filename":3414,"language":3420,"meta":2483,"style":2483},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"blokkli\": {\n    \"blocks\": [\n      { \"id\": \"hero\", \"title\": \"Hero\", \"description\": \"Full-width hero with headline, subline, and a background choice.\" }\n    ]\n  }\n}\n","json",[2417,3422,3423,3427,3441,3456,3517,3522,3527],{"__ignoreMap":2483},[2487,3424,3425],{"class":2489,"line":2490},[2487,3426,2675],{"class":2493},[2487,3428,3429,3432,3435,3437,3439],{"class":2489,"line":2523},[2487,3430,3431],{"class":2493},"  \"",[2487,3433,3434],{"class":2501},"blokkli",[2487,3436,2511],{"class":2493},[2487,3438,2554],{"class":2493},[2487,3440,2604],{"class":2493},[2487,3442,3443,3446,3449,3451,3453],{"class":2489,"line":2548},[2487,3444,3445],{"class":2493},"    \"",[2487,3447,3448],{"class":2557},"blocks",[2487,3450,2511],{"class":2493},[2487,3452,2554],{"class":2493},[2487,3454,3455],{"class":2493}," [\n",[2487,3457,3458,3461,3464,3468,3470,3472,3474,3476,3478,3480,3482,3485,3487,3489,3491,3494,3496,3498,3500,3503,3505,3507,3509,3512,3514],{"class":2489,"line":2561},[2487,3459,3460],{"class":2493},"      {",[2487,3462,3463],{"class":2493}," \"",[2487,3465,3467],{"class":3466},"sbssI","id",[2487,3469,2511],{"class":2493},[2487,3471,2554],{"class":2493},[2487,3473,3463],{"class":2493},[2487,3475,2453],{"class":2514},[2487,3477,2511],{"class":2493},[2487,3479,2601],{"class":2493},[2487,3481,3463],{"class":2493},[2487,3483,3484],{"class":3466},"title",[2487,3486,2511],{"class":2493},[2487,3488,2554],{"class":2493},[2487,3490,3463],{"class":2493},[2487,3492,3493],{"class":2514},"Hero",[2487,3495,2511],{"class":2493},[2487,3497,2601],{"class":2493},[2487,3499,3463],{"class":2493},[2487,3501,3502],{"class":3466},"description",[2487,3504,2511],{"class":2493},[2487,3506,2554],{"class":2493},[2487,3508,3463],{"class":2493},[2487,3510,3511],{"class":2514},"Full-width hero with headline, subline, and a background choice.",[2487,3513,2511],{"class":2493},[2487,3515,3516],{"class":2493}," }\n",[2487,3518,3519],{"class":2489,"line":2572},[2487,3520,3521],{"class":2493},"    ]\n",[2487,3523,3524],{"class":2489,"line":2582},[2487,3525,3526],{"class":2493},"  }\n",[2487,3528,3529],{"class":2489,"line":2592},[2487,3530,2894],{"class":2493},[2405,3532,3533],{},"Second, map the block id to its component so the renderer can resolve it:",[2477,3535,3539],{"className":3536,"code":3537,"filename":3538,"language":2515,"meta":2483,"style":2483},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { Component } from 'vue'\n\nimport BlokkliHero from '..\u002Fcomponents\u002Fblokkli\u002Fhero\u002Findex.vue'\nimport BlokkliProductGrid from '..\u002Fcomponents\u002Fblokkli\u002Fproduct_grid\u002Findex.vue'\nimport BlokkliText from '..\u002Fcomponents\u002Fblokkli\u002Ftext\u002Findex.vue'\n\nexport const BLOCK_COMPONENTS: Record\u003Cstring, Component> = {\n  hero: BlokkliHero,\n  product_grid: BlokkliProductGrid,\n  text: BlokkliText,\n}\n","app\u002Fconfig\u002FblokkliBlocks.ts",[2417,3540,3541,3567,3571,3588,3604,3620,3624,3653,3665,3677,3689],{"__ignoreMap":2483},[2487,3542,3543,3546,3549,3552,3555,3557,3560,3562,3564],{"class":2489,"line":2490},[2487,3544,3545],{"class":2938},"import",[2487,3547,3548],{"class":2938}," type",[2487,3550,3551],{"class":2493}," {",[2487,3553,3554],{"class":2529}," Component",[2487,3556,3315],{"class":2493},[2487,3558,3559],{"class":2938}," from",[2487,3561,2624],{"class":2493},[2487,3563,2482],{"class":2514},[2487,3565,3566],{"class":2493},"'\n",[2487,3568,3569],{"class":2489,"line":2523},[2487,3570,2665],{"emptyLinePlaceholder":2664},[2487,3572,3573,3575,3578,3581,3583,3586],{"class":2489,"line":2548},[2487,3574,3545],{"class":2938},[2487,3576,3577],{"class":2529}," BlokkliHero ",[2487,3579,3580],{"class":2938},"from",[2487,3582,2624],{"class":2493},[2487,3584,3585],{"class":2514},"..\u002Fcomponents\u002Fblokkli\u002Fhero\u002Findex.vue",[2487,3587,3566],{"class":2493},[2487,3589,3590,3592,3595,3597,3599,3602],{"class":2489,"line":2561},[2487,3591,3545],{"class":2938},[2487,3593,3594],{"class":2529}," BlokkliProductGrid ",[2487,3596,3580],{"class":2938},[2487,3598,2624],{"class":2493},[2487,3600,3601],{"class":2514},"..\u002Fcomponents\u002Fblokkli\u002Fproduct_grid\u002Findex.vue",[2487,3603,3566],{"class":2493},[2487,3605,3606,3608,3611,3613,3615,3618],{"class":2489,"line":2572},[2487,3607,3545],{"class":2938},[2487,3609,3610],{"class":2529}," BlokkliText ",[2487,3612,3580],{"class":2938},[2487,3614,2624],{"class":2493},[2487,3616,3617],{"class":2514},"..\u002Fcomponents\u002Fblokkli\u002Ftext\u002Findex.vue",[2487,3619,3566],{"class":2493},[2487,3621,3622],{"class":2489,"line":2582},[2487,3623,2665],{"emptyLinePlaceholder":2664},[2487,3625,3626,3629,3632,3635,3637,3639,3641,3643,3645,3647,3649,3651],{"class":2489,"line":2592},[2487,3627,3628],{"class":2938},"export",[2487,3630,3631],{"class":2501}," const",[2487,3633,3634],{"class":2529}," BLOCK_COMPONENTS",[2487,3636,2554],{"class":2493},[2487,3638,2802],{"class":2557},[2487,3640,2494],{"class":2493},[2487,3642,2807],{"class":2557},[2487,3644,2601],{"class":2493},[2487,3646,3554],{"class":2557},[2487,3648,2815],{"class":2493},[2487,3650,2818],{"class":2493},[2487,3652,2604],{"class":2493},[2487,3654,3655,3658,3660,3663],{"class":2489,"line":2607},[2487,3656,3657],{"class":2497},"  hero",[2487,3659,2554],{"class":2493},[2487,3661,3662],{"class":2529}," BlokkliHero",[2487,3664,2633],{"class":2493},[2487,3666,3667,3670,3672,3675],{"class":2489,"line":2617},[2487,3668,3669],{"class":2497},"  product_grid",[2487,3671,2554],{"class":2493},[2487,3673,3674],{"class":2529}," BlokkliProductGrid",[2487,3676,2633],{"class":2493},[2487,3678,3679,3682,3684,3687],{"class":2489,"line":2636},[2487,3680,3681],{"class":2497},"  text",[2487,3683,2554],{"class":2493},[2487,3685,3686],{"class":2529}," BlokkliText",[2487,3688,2633],{"class":2493},[2487,3690,3691],{"class":2489,"line":2652},[2487,3692,2894],{"class":2493},[2405,3694,3695,3696,3698,3699,3701,3702,3704,3705,3707,3708,3710,3711,3713,3714,2428],{},"Keep the manifest ",[2417,3697,3467],{},", the component's ",[2417,3700,2442],{},", the directory name and the map key identical. Drift between them is the most common reason a block renders as \"unknown\". The ",[2417,3703,2457],{}," and ",[2417,3706,2460],{}," entries match the manifest from ",[2426,3709,413],{"href":414},", and ",[2417,3712,2457],{}," is written in the next section. See ",[2426,3715,1808],{"href":1809},[2430,3717,3719],{"id":3718},"_3-connect-a-block-to-live-catalog-data","3. Connect a block to live catalog data",[2405,3721,3722,3723,3726],{},"A product block needs data from the platform. The catalog (names, images, descriptions, categories) is cheap and cacheable; price and availability are buyer-specific and slow. The pattern that keeps storefronts fast is ",[2412,3724,3725],{},"shell-first",": render the catalog during server-side rendering, then fill in price and stock after the page paints.",[3728,3729,3731],"h3",{"id":3730},"what-the-examples-assume-you-have","What the examples assume you have",[2405,3733,3734],{},"The snippets below use a few helpers that are yours to write, because they depend on your catalog route and your design system. This guide shows the contract each one needs, not an implementation.",[3736,3737,3738,3751],"table",{},[3739,3740,3741],"thead",{},[3742,3743,3744,3748],"tr",{},[3745,3746,3747],"th",{},"Helper",[3745,3749,3750],{},"Contract",[3752,3753,3754,3790,3817,3831],"tbody",{},[3742,3755,3756,3762],{},[3757,3758,3759],"td",{},[2417,3760,3761],{},"useProducts(category)",[3757,3763,3764,3765,3768,3769,3772,3773,3776,3777,3704,3780,3783,3784,3787,3788,2428],{},"Takes a ref of a category slug or ",[2417,3766,3767],{},"undefined",". Returns ",[2417,3770,3771],{},"{ products, status, error }"," where ",[2417,3774,3775],{},"products"," is a ref of ",[2417,3778,3779],{},"{ id, sku?, name, … }",[2417,3781,3782],{},"status"," is ",[2417,3785,3786],{},"'pending'"," while loading. It reads your own server route, which calls the gateway with the per-request tenant. Product reads are documented in ",[2426,3789,1392],{"href":1393},[3742,3791,3792,3797],{},[3757,3793,3794],{},[2417,3795,3796],{},"POST \u002Fapi\u002Foffers",[3757,3798,3799,3800,3803,3804,3807,3808,3811,3812,2428],{},"Your own server route. Takes ",[2417,3801,3802],{},"{ items: [{ id, sku }] }"," and returns ",[2417,3805,3806],{},"{ offers: { [id]: Offer } }"," with the ",[2417,3809,3810],{},"Offer"," shape from the composable below. Resolve prices through ",[2426,3813,3814],{"href":421},[2417,3815,3816],{},"POST \u002Fv1\u002Fprices\u002Fresolve",[3742,3818,3819,3824],{},[3757,3820,3821],{},[2417,3822,3823],{},"formatPrice(prices)",[3757,3825,3826,3827,3830],{},"Turns an ",[2417,3828,3829],{},"Offer.prices"," list into a display string for the active currency.",[3742,3832,3833,3847],{},[3757,3834,3835,2454,3838,2454,3841,2454,3844],{},[2417,3836,3837],{},"ProductCard",[2417,3839,3840],{},"CategoryListSkeleton",[2417,3842,3843],{},"ErrorBoundary",[2417,3845,3846],{},"EmptyState",[3757,3848,3849,3850,3852,3853,3856],{},"Plain presentational components. ",[2417,3851,3837],{}," renders ",[2417,3854,3855],{},"ProductPrice"," (defined below) for the price.",[2405,3858,3859,3860,3863],{},"A minimal ",[2417,3861,3862],{},"useProducts"," against your own route looks like this:",[2477,3865,3868],{"className":3536,"code":3866,"filename":3867,"language":2515,"meta":2483,"style":2483},"export function useProducts(category: Ref\u003Cstring | undefined>) {\n  const { data, status, error } = useFetch\u003C{ items: { id: string; sku?: string; name: string }[] }>(\n    '\u002Fapi\u002Fproducts',\n    { query: { category }, default: () => ({ items: [] }) },\n  )\n  const products = computed(() => data.value?.items ?? [])\n  return { products, status, error }\n}\n","app\u002Fcomposables\u002FuseProducts.ts",[2417,3869,3870,3905,3977,3989,4034,4039,4074,4092],{"__ignoreMap":2483},[2487,3871,3872,3874,3877,3880,3882,3886,3888,3891,3893,3895,3897,3900,3903],{"class":2489,"line":2490},[2487,3873,3628],{"class":2938},[2487,3875,3876],{"class":2501}," function",[2487,3878,3879],{"class":2535}," useProducts",[2487,3881,2539],{"class":2493},[2487,3883,3885],{"class":3884},"sHdIc","category",[2487,3887,2554],{"class":2493},[2487,3889,3890],{"class":2557}," Ref",[2487,3892,2494],{"class":2493},[2487,3894,2807],{"class":2557},[2487,3896,2919],{"class":2493},[2487,3898,3899],{"class":2557}," undefined",[2487,3901,3902],{"class":2493},">)",[2487,3904,2604],{"class":2493},[2487,3906,3907,3910,3912,3915,3917,3920,3922,3925,3927,3929,3932,3934,3937,3939,3941,3944,3946,3948,3951,3954,3956,3958,3960,3963,3965,3967,3969,3972,3974],{"class":2489,"line":2523},[2487,3908,3909],{"class":2501},"  const",[2487,3911,3551],{"class":2493},[2487,3913,3914],{"class":2529}," data",[2487,3916,2601],{"class":2493},[2487,3918,3919],{"class":2529}," status",[2487,3921,2601],{"class":2493},[2487,3923,3924],{"class":2529}," error",[2487,3926,3315],{"class":2493},[2487,3928,2818],{"class":2493},[2487,3930,3931],{"class":2535}," useFetch",[2487,3933,3239],{"class":2493},[2487,3935,3936],{"class":2497}," items",[2487,3938,2554],{"class":2493},[2487,3940,3551],{"class":2493},[2487,3942,3943],{"class":2497}," id",[2487,3945,2554],{"class":2493},[2487,3947,2812],{"class":2557},[2487,3949,3950],{"class":2493},";",[2487,3952,3953],{"class":2497}," sku",[2487,3955,2567],{"class":2493},[2487,3957,2812],{"class":2557},[2487,3959,3950],{"class":2493},[2487,3961,3962],{"class":2497}," name",[2487,3964,2554],{"class":2493},[2487,3966,2812],{"class":2557},[2487,3968,3315],{"class":2493},[2487,3970,3971],{"class":2497},"[] ",[2487,3973,2595],{"class":2493},[2487,3975,3976],{"class":2497},"(\n",[2487,3978,3979,3982,3985,3987],{"class":2489,"line":2548},[2487,3980,3981],{"class":2493},"    '",[2487,3983,3984],{"class":2514},"\u002Fapi\u002Fproducts",[2487,3986,2630],{"class":2493},[2487,3988,2633],{"class":2493},[2487,3990,3991,3994,3997,3999,4001,4004,4007,4010,4012,4014,4016,4018,4020,4022,4024,4027,4029,4031],{"class":2489,"line":2561},[2487,3992,3993],{"class":2493},"    {",[2487,3995,3996],{"class":2497}," query",[2487,3998,2554],{"class":2493},[2487,4000,3551],{"class":2493},[2487,4002,4003],{"class":2529}," category",[2487,4005,4006],{"class":2493}," },",[2487,4008,4009],{"class":2535}," default",[2487,4011,2554],{"class":2493},[2487,4013,2719],{"class":2493},[2487,4015,2722],{"class":2501},[2487,4017,2450],{"class":2497},[2487,4019,3301],{"class":2493},[2487,4021,3936],{"class":2497},[2487,4023,2554],{"class":2493},[2487,4025,4026],{"class":2497}," [] ",[2487,4028,2655],{"class":2493},[2487,4030,2962],{"class":2497},[2487,4032,4033],{"class":2493},"},\n",[2487,4035,4036],{"class":2489,"line":2572},[2487,4037,4038],{"class":2497},"  )\n",[2487,4040,4041,4043,4046,4048,4050,4052,4054,4056,4058,4060,4063,4066,4069,4071],{"class":2489,"line":2582},[2487,4042,3909],{"class":2501},[2487,4044,4045],{"class":2529}," products",[2487,4047,2818],{"class":2493},[2487,4049,2912],{"class":2535},[2487,4051,2539],{"class":2497},[2487,4053,2598],{"class":2493},[2487,4055,2722],{"class":2501},[2487,4057,3914],{"class":2529},[2487,4059,2428],{"class":2493},[2487,4061,4062],{"class":2529},"value",[2487,4064,4065],{"class":2493},"?.",[2487,4067,4068],{"class":2529},"items",[2487,4070,2976],{"class":2493},[2487,4072,4073],{"class":2497}," [])\n",[2487,4075,4076,4078,4080,4082,4084,4086,4088,4090],{"class":2489,"line":2592},[2487,4077,3026],{"class":2938},[2487,4079,3551],{"class":2493},[2487,4081,4045],{"class":2529},[2487,4083,2601],{"class":2493},[2487,4085,3919],{"class":2529},[2487,4087,2601],{"class":2493},[2487,4089,3924],{"class":2529},[2487,4091,3516],{"class":2493},[2487,4093,4094],{"class":2489,"line":2607},[2487,4095,2894],{"class":2493},[2405,4097,4098,4100],{},[2417,4099,3984],{}," is your own route, not a platform path. It must forward the tenant context and return no prices.",[3728,4102,4104],{"id":4103},"fetch-the-catalog-in-the-block","Fetch the catalog in the block",[2405,4106,4107,4108,4110],{},"A product block reads its category from the editor's props and fetches the matching products with ",[2417,4109,3862],{}," (see the contract above).",[2477,4112,4115],{"className":2479,"code":4113,"filename":4114,"language":2482,"meta":2483,"style":2483},"\u003Cscript setup lang=\"ts\">\nconst props = withDefaults(defineProps\u003C{\n  categorySlug?: string\n  limit?: string\n  sort?: 'featured' | 'price-asc' | 'price-desc' | 'name-asc'\n}>(), {\n  categorySlug: '',\n  limit: '8',\n  sort: 'featured',\n})\n\ndefineBlokkli({\n  bundle: 'product_grid',\n  editor: { mockProps: () => ({}) },\n})\n\nconst category = computed(() => props.categorySlug?.trim() || undefined)\n\n\u002F\u002F Catalog shell — fetched during SSR, in the first byte. No price\u002Fstock here.\nconst { products, status, error } = useProducts(category)\n\nconst visible = computed(() => {\n  const n = Number(props.limit) || 0\n  return n > 0 ? products.value.slice(0, n) : products.value\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Csection class=\"product-grid\">\n    \u003CCategoryListSkeleton v-if=\"status === 'pending'\" \u002F>\n    \u003CErrorBoundary v-else-if=\"error\" title=\"Products could not be loaded\" \u002F>\n    \u003CEmptyState v-else-if=\"!visible.length\" title=\"No products found\" \u002F>\n    \u003Cdiv v-else class=\"grid\">\n      \u003CProductCard v-for=\"product in visible\" :key=\"product.id\" :product=\"product\" \u002F>\n    \u003C\u002Fdiv>\n  \u003C\u002Fsection>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002Fblokkli\u002Fproduct_grid\u002Findex.vue",[2417,4116,4117,4137,4153,4162,4171,4212,4222,4233,4248,4262,4268,4272,4280,4294,4320,4326,4330,4369,4373,4378,4404,4408,4427,4455,4501,4507,4515,4519,4527,4546,4566,4598,4628,4650,4695,4704,4712],{"__ignoreMap":2483},[2487,4118,4119,4121,4123,4125,4127,4129,4131,4133,4135],{"class":2489,"line":2490},[2487,4120,2494],{"class":2493},[2487,4122,2498],{"class":2497},[2487,4124,2502],{"class":2501},[2487,4126,2505],{"class":2501},[2487,4128,2508],{"class":2493},[2487,4130,2511],{"class":2493},[2487,4132,2515],{"class":2514},[2487,4134,2511],{"class":2493},[2487,4136,2520],{"class":2493},[2487,4138,4139,4141,4143,4145,4147,4149,4151],{"class":2489,"line":2523},[2487,4140,2526],{"class":2501},[2487,4142,2530],{"class":2529},[2487,4144,2508],{"class":2493},[2487,4146,2536],{"class":2535},[2487,4148,2539],{"class":2529},[2487,4150,2542],{"class":2535},[2487,4152,2545],{"class":2493},[2487,4154,4155,4158,4160],{"class":2489,"line":2548},[2487,4156,4157],{"class":2497},"  categorySlug",[2487,4159,2567],{"class":2493},[2487,4161,2558],{"class":2557},[2487,4163,4164,4167,4169],{"class":2489,"line":2561},[2487,4165,4166],{"class":2497},"  limit",[2487,4168,2567],{"class":2493},[2487,4170,2558],{"class":2557},[2487,4172,4173,4176,4178,4180,4183,4185,4187,4189,4192,4194,4196,4198,4201,4203,4205,4207,4210],{"class":2489,"line":2572},[2487,4174,4175],{"class":2497},"  sort",[2487,4177,2567],{"class":2493},[2487,4179,2624],{"class":2493},[2487,4181,4182],{"class":2514},"featured",[2487,4184,2630],{"class":2493},[2487,4186,2919],{"class":2493},[2487,4188,2624],{"class":2493},[2487,4190,4191],{"class":2514},"price-asc",[2487,4193,2630],{"class":2493},[2487,4195,2919],{"class":2493},[2487,4197,2624],{"class":2493},[2487,4199,4200],{"class":2514},"price-desc",[2487,4202,2630],{"class":2493},[2487,4204,2919],{"class":2493},[2487,4206,2624],{"class":2493},[2487,4208,4209],{"class":2514},"name-asc",[2487,4211,3566],{"class":2493},[2487,4213,4214,4216,4218,4220],{"class":2489,"line":2582},[2487,4215,2595],{"class":2493},[2487,4217,2598],{"class":2529},[2487,4219,2601],{"class":2493},[2487,4221,2604],{"class":2493},[2487,4223,4224,4226,4228,4231],{"class":2489,"line":2592},[2487,4225,4157],{"class":2497},[2487,4227,2554],{"class":2493},[2487,4229,4230],{"class":2493}," ''",[2487,4232,2633],{"class":2493},[2487,4234,4235,4237,4239,4241,4244,4246],{"class":2489,"line":2607},[2487,4236,4166],{"class":2497},[2487,4238,2554],{"class":2493},[2487,4240,2624],{"class":2493},[2487,4242,4243],{"class":2514},"8",[2487,4245,2630],{"class":2493},[2487,4247,2633],{"class":2493},[2487,4249,4250,4252,4254,4256,4258,4260],{"class":2489,"line":2617},[2487,4251,4175],{"class":2497},[2487,4253,2554],{"class":2493},[2487,4255,2624],{"class":2493},[2487,4257,4182],{"class":2514},[2487,4259,2630],{"class":2493},[2487,4261,2633],{"class":2493},[2487,4263,4264,4266],{"class":2489,"line":2636},[2487,4265,2655],{"class":2493},[2487,4267,2658],{"class":2529},[2487,4269,4270],{"class":2489,"line":2652},[2487,4271,2665],{"emptyLinePlaceholder":2664},[2487,4273,4274,4276,4278],{"class":2489,"line":2661},[2487,4275,2438],{"class":2535},[2487,4277,2539],{"class":2529},[2487,4279,2675],{"class":2493},[2487,4281,4282,4284,4286,4288,4290,4292],{"class":2489,"line":2668},[2487,4283,2681],{"class":2497},[2487,4285,2554],{"class":2493},[2487,4287,2624],{"class":2493},[2487,4289,2457],{"class":2514},[2487,4291,2630],{"class":2493},[2487,4293,2633],{"class":2493},[2487,4295,4296,4298,4300,4302,4305,4307,4309,4311,4313,4316,4318],{"class":2489,"line":2678},[2487,4297,2697],{"class":2497},[2487,4299,2554],{"class":2493},[2487,4301,3551],{"class":2493},[2487,4303,4304],{"class":2535}," mockProps",[2487,4306,2554],{"class":2493},[2487,4308,2719],{"class":2493},[2487,4310,2722],{"class":2501},[2487,4312,2450],{"class":2529},[2487,4314,4315],{"class":2493},"{}",[2487,4317,2962],{"class":2529},[2487,4319,4033],{"class":2493},[2487,4321,4322,4324],{"class":2489,"line":2694},[2487,4323,2655],{"class":2493},[2487,4325,2658],{"class":2529},[2487,4327,4328],{"class":2489,"line":2704},[2487,4329,2665],{"emptyLinePlaceholder":2664},[2487,4331,4332,4334,4337,4339,4341,4343,4345,4347,4349,4351,4354,4356,4359,4362,4365,4367],{"class":2489,"line":2711},[2487,4333,2526],{"class":2501},[2487,4335,4336],{"class":2529}," category ",[2487,4338,2508],{"class":2493},[2487,4340,2912],{"class":2535},[2487,4342,2539],{"class":2529},[2487,4344,2598],{"class":2493},[2487,4346,2722],{"class":2501},[2487,4348,2968],{"class":2529},[2487,4350,2428],{"class":2493},[2487,4352,4353],{"class":2529},"categorySlug",[2487,4355,4065],{"class":2493},[2487,4357,4358],{"class":2535},"trim",[2487,4360,4361],{"class":2529},"() ",[2487,4363,4364],{"class":2493},"||",[2487,4366,3899],{"class":2493},[2487,4368,2658],{"class":2529},[2487,4370,4371],{"class":2489,"line":2729},[2487,4372,2665],{"emptyLinePlaceholder":2664},[2487,4374,4375],{"class":2489,"line":2746},[2487,4376,4377],{"class":2707},"\u002F\u002F Catalog shell — fetched during SSR, in the first byte. No price\u002Fstock here.\n",[2487,4379,4380,4382,4384,4386,4388,4390,4392,4395,4397,4399,4401],{"class":2489,"line":2763},[2487,4381,2526],{"class":2501},[2487,4383,3551],{"class":2493},[2487,4385,4045],{"class":2529},[2487,4387,2601],{"class":2493},[2487,4389,3919],{"class":2529},[2487,4391,2601],{"class":2493},[2487,4393,4394],{"class":2529}," error ",[2487,4396,2655],{"class":2493},[2487,4398,2818],{"class":2493},[2487,4400,3879],{"class":2535},[2487,4402,4403],{"class":2529},"(category)\n",[2487,4405,4406],{"class":2489,"line":2774},[2487,4407,2665],{"emptyLinePlaceholder":2664},[2487,4409,4410,4412,4415,4417,4419,4421,4423,4425],{"class":2489,"line":2780},[2487,4411,2526],{"class":2501},[2487,4413,4414],{"class":2529}," visible ",[2487,4416,2508],{"class":2493},[2487,4418,2912],{"class":2535},[2487,4420,2539],{"class":2529},[2487,4422,2598],{"class":2493},[2487,4424,2722],{"class":2501},[2487,4426,2604],{"class":2493},[2487,4428,4429,4431,4434,4436,4439,4441,4443,4445,4448,4450,4452],{"class":2489,"line":2787},[2487,4430,3909],{"class":2501},[2487,4432,4433],{"class":2529}," n",[2487,4435,2818],{"class":2493},[2487,4437,4438],{"class":2535}," Number",[2487,4440,2539],{"class":2497},[2487,4442,2944],{"class":2529},[2487,4444,2428],{"class":2493},[2487,4446,4447],{"class":2529},"limit",[2487,4449,2962],{"class":2497},[2487,4451,4364],{"class":2493},[2487,4453,4454],{"class":3466}," 0\n",[2487,4456,4457,4459,4461,4464,4467,4470,4472,4474,4476,4478,4481,4483,4486,4488,4490,4492,4494,4496,4498],{"class":2489,"line":2792},[2487,4458,3026],{"class":2938},[2487,4460,4433],{"class":2529},[2487,4462,4463],{"class":2493}," >",[2487,4465,4466],{"class":3466}," 0",[2487,4468,4469],{"class":2493}," ?",[2487,4471,4045],{"class":2529},[2487,4473,2428],{"class":2493},[2487,4475,4062],{"class":2529},[2487,4477,2428],{"class":2493},[2487,4479,4480],{"class":2535},"slice",[2487,4482,2539],{"class":2497},[2487,4484,4485],{"class":3466},"0",[2487,4487,2601],{"class":2493},[2487,4489,4433],{"class":2529},[2487,4491,2962],{"class":2497},[2487,4493,2554],{"class":2493},[2487,4495,4045],{"class":2529},[2487,4497,2428],{"class":2493},[2487,4499,4500],{"class":2529},"value\n",[2487,4502,4503,4505],{"class":2489,"line":2823},[2487,4504,2655],{"class":2493},[2487,4506,2658],{"class":2529},[2487,4508,4509,4511,4513],{"class":2489,"line":2840},[2487,4510,3041],{"class":2493},[2487,4512,2498],{"class":2497},[2487,4514,2520],{"class":2493},[2487,4516,4517],{"class":2489,"line":2857},[2487,4518,2665],{"emptyLinePlaceholder":2664},[2487,4520,4521,4523,4525],{"class":2489,"line":2874},[2487,4522,2494],{"class":2493},[2487,4524,3058],{"class":2497},[2487,4526,2520],{"class":2493},[2487,4528,4529,4531,4533,4535,4537,4539,4542,4544],{"class":2489,"line":2891},[2487,4530,3066],{"class":2493},[2487,4532,3176],{"class":2497},[2487,4534,3147],{"class":2501},[2487,4536,2508],{"class":2493},[2487,4538,2511],{"class":2493},[2487,4540,4541],{"class":2514},"product-grid",[2487,4543,2511],{"class":2493},[2487,4545,2520],{"class":2493},[2487,4547,4548,4550,4552,4554,4556,4558,4561,4563],{"class":2489,"line":2897},[2487,4549,3111],{"class":2493},[2487,4551,3840],{"class":2497},[2487,4553,3135],{"class":2501},[2487,4555,2508],{"class":2493},[2487,4557,2511],{"class":2493},[2487,4559,4560],{"class":2514},"status === 'pending'",[2487,4562,2511],{"class":2493},[2487,4564,4565],{"class":2493}," \u002F>\n",[2487,4567,4568,4570,4572,4575,4577,4579,4582,4584,4587,4589,4591,4594,4596],{"class":2489,"line":2902},[2487,4569,3111],{"class":2493},[2487,4571,3843],{"class":2497},[2487,4573,4574],{"class":2501}," v-else-if",[2487,4576,2508],{"class":2493},[2487,4578,2511],{"class":2493},[2487,4580,4581],{"class":2514},"error",[2487,4583,2511],{"class":2493},[2487,4585,4586],{"class":2501}," title",[2487,4588,2508],{"class":2493},[2487,4590,2511],{"class":2493},[2487,4592,4593],{"class":2514},"Products could not be loaded",[2487,4595,2511],{"class":2493},[2487,4597,4565],{"class":2493},[2487,4599,4600,4602,4604,4606,4608,4610,4613,4615,4617,4619,4621,4624,4626],{"class":2489,"line":2935},[2487,4601,3111],{"class":2493},[2487,4603,3846],{"class":2497},[2487,4605,4574],{"class":2501},[2487,4607,2508],{"class":2493},[2487,4609,2511],{"class":2493},[2487,4611,4612],{"class":2514},"!visible.length",[2487,4614,2511],{"class":2493},[2487,4616,4586],{"class":2501},[2487,4618,2508],{"class":2493},[2487,4620,2511],{"class":2493},[2487,4622,4623],{"class":2514},"No products found",[2487,4625,2511],{"class":2493},[2487,4627,4565],{"class":2493},[2487,4629,4630,4632,4634,4637,4639,4641,4643,4646,4648],{"class":2489,"line":2982},[2487,4631,3111],{"class":2493},[2487,4633,3356],{"class":2497},[2487,4635,4636],{"class":2501}," v-else",[2487,4638,3147],{"class":2501},[2487,4640,2508],{"class":2493},[2487,4642,2511],{"class":2493},[2487,4644,4645],{"class":2514},"grid",[2487,4647,2511],{"class":2493},[2487,4649,2520],{"class":2493},[2487,4651,4652,4655,4657,4660,4662,4664,4667,4669,4672,4674,4676,4679,4681,4684,4686,4688,4691,4693],{"class":2489,"line":3023},[2487,4653,4654],{"class":2493},"      \u003C",[2487,4656,3837],{"class":2497},[2487,4658,4659],{"class":2501}," v-for",[2487,4661,2508],{"class":2493},[2487,4663,2511],{"class":2493},[2487,4665,4666],{"class":2514},"product in visible",[2487,4668,2511],{"class":2493},[2487,4670,4671],{"class":2501}," :key",[2487,4673,2508],{"class":2493},[2487,4675,2511],{"class":2493},[2487,4677,4678],{"class":2514},"product.id",[2487,4680,2511],{"class":2493},[2487,4682,4683],{"class":2501}," :product",[2487,4685,2508],{"class":2493},[2487,4687,2511],{"class":2493},[2487,4689,4690],{"class":2514},"product",[2487,4692,2511],{"class":2493},[2487,4694,4565],{"class":2493},[2487,4696,4697,4700,4702],{"class":2489,"line":3031},[2487,4698,4699],{"class":2493},"    \u003C\u002F",[2487,4701,3356],{"class":2497},[2487,4703,2520],{"class":2493},[2487,4705,4706,4708,4710],{"class":2489,"line":3038},[2487,4707,3173],{"class":2493},[2487,4709,3176],{"class":2497},[2487,4711,2520],{"class":2493},[2487,4713,4714,4716,4718],{"class":2489,"line":3048},[2487,4715,3041],{"class":2493},[2487,4717,3058],{"class":2497},[2487,4719,2520],{"class":2493},[2405,4721,4722],{},"The catalog response carries no prices. That's deliberate — it keeps the catalog cacheable and stops a slow price lookup from blocking the grid.",[3728,4724,4726],{"id":4725},"defer-the-offer","Defer the offer",[2405,4728,4729,4730,4733,4734,4737],{},"Price and availability are the ",[2412,4731,4732],{},"offer",". Resolve them on their own axis: one batched request for the visible products, fired after the page paints, with a skeleton until it returns. A shared ",[2417,4735,4736],{},"useOffers"," composable does the batching and caching.",[2477,4739,4742],{"className":3536,"code":4740,"filename":4741,"language":2515,"meta":2483,"style":2483},"export interface Offer {\n  id: string\n  prices: { [tier: string]: number }[]\n  isOutOfStock: boolean\n}\n\nexport function useOffers() {\n  const cache = useState\u003CRecord\u003Cstring, Offer>>('offers:cache', () => ({}))\n  const inflight = useState\u003CRecord\u003Cstring, boolean>>('offers:pending', () => ({}))\n  \u002F\u002F Ids whose fetch has finished (resolved or soft-failed). Until then a product\n  \u002F\u002F reads as \"pending\" so SSR and the first client render both show a skeleton.\n  const attempted = useState\u003CRecord\u003Cstring, boolean>>('offers:attempted', () => ({}))\n\n  async function loadOffers(items: { id: string; sku?: string }[]): Promise\u003Cvoid> {\n    \u002F\u002F No-op on the server: the offer never blocks the first byte.\n    if (import.meta.server) return\n\n    const want = items.filter(\n      item => item?.id && !(item.id in cache.value) && !inflight.value[item.id],\n    )\n    if (!want.length) return\n\n    inflight.value = { ...inflight.value, ...Object.fromEntries(want.map(i => [i.id, true])) }\n    try {\n      const { offers } = await $fetch\u003C{ offers: Record\u003Cstring, Offer> }>('\u002Fapi\u002Foffers', {\n        method: 'POST',\n        body: { items: want.map(i => ({ id: i.id, sku: i.sku })) },\n      })\n      cache.value = { ...cache.value, ...offers }\n    }\n    catch {\n      \u002F\u002F Soft failure: leave uncached so widgets render \"price on request\", never a price of zero.\n    }\n    finally {\n      const next = { ...inflight.value }\n      for (const i of want) delete next[i.id]\n      inflight.value = next\n      attempted.value = { ...attempted.value, ...Object.fromEntries(want.map(i => [i.id, true])) }\n    }\n  }\n\n  function useOffer(getId: MaybeRefOrGetter\u003Cstring>) {\n    const id = computed(() => toValue(getId))\n    const offer = computed\u003COffer | undefined>(() => cache.value[id.value])\n    \u002F\u002F Default-pending so SSR and the first client render agree (no hydration flash).\n    const pending = computed(() => !offer.value && !attempted.value[id.value])\n    return { offer, pending }\n  }\n\n  return { loadOffers, useOffer }\n}\n","app\u002Fcomposables\u002FuseOffers.ts",[2417,4743,4744,4756,4765,4797,4807,4811,4815,4828,4878,4925,4930,4935,4981,4985,5037,5042,5066,5070,5089,5152,5157,5178,5182,5251,5258,5311,5327,5387,5394,5425,5430,5437,5442,5446,5453,5474,5508,5522,5584,5588,5592,5596,5622,5647,5691,5696,5741,5757,5762,5767,5782],{"__ignoreMap":2483},[2487,4745,4746,4748,4751,4754],{"class":2489,"line":2490},[2487,4747,3628],{"class":2938},[2487,4749,4750],{"class":2501}," interface",[2487,4752,4753],{"class":2557}," Offer",[2487,4755,2604],{"class":2493},[2487,4757,4758,4761,4763],{"class":2489,"line":2523},[2487,4759,4760],{"class":2497},"  id",[2487,4762,2554],{"class":2493},[2487,4764,2558],{"class":2557},[2487,4766,4767,4770,4772,4774,4777,4780,4782,4784,4787,4789,4792,4794],{"class":2489,"line":2548},[2487,4768,4769],{"class":2497},"  prices",[2487,4771,2554],{"class":2493},[2487,4773,3551],{"class":2493},[2487,4775,4776],{"class":2529}," [",[2487,4778,4779],{"class":3884},"tier",[2487,4781,2554],{"class":2493},[2487,4783,2812],{"class":2557},[2487,4785,4786],{"class":2529},"]",[2487,4788,2554],{"class":2493},[2487,4790,4791],{"class":2557}," number",[2487,4793,3315],{"class":2493},[2487,4795,4796],{"class":2529},"[]\n",[2487,4798,4799,4802,4804],{"class":2489,"line":2561},[2487,4800,4801],{"class":2497},"  isOutOfStock",[2487,4803,2554],{"class":2493},[2487,4805,4806],{"class":2557}," boolean\n",[2487,4808,4809],{"class":2489,"line":2572},[2487,4810,2894],{"class":2493},[2487,4812,4813],{"class":2489,"line":2582},[2487,4814,2665],{"emptyLinePlaceholder":2664},[2487,4816,4817,4819,4821,4824,4826],{"class":2489,"line":2592},[2487,4818,3628],{"class":2938},[2487,4820,3876],{"class":2501},[2487,4822,4823],{"class":2535}," useOffers",[2487,4825,2598],{"class":2493},[2487,4827,2604],{"class":2493},[2487,4829,4830,4832,4835,4837,4840,4842,4845,4847,4849,4851,4853,4856,4858,4860,4863,4865,4867,4869,4871,4873,4875],{"class":2489,"line":2607},[2487,4831,3909],{"class":2501},[2487,4833,4834],{"class":2529}," cache",[2487,4836,2818],{"class":2493},[2487,4838,4839],{"class":2535}," useState",[2487,4841,2494],{"class":2493},[2487,4843,4844],{"class":2557},"Record",[2487,4846,2494],{"class":2493},[2487,4848,2807],{"class":2557},[2487,4850,2601],{"class":2493},[2487,4852,4753],{"class":2557},[2487,4854,4855],{"class":2493},">>",[2487,4857,2539],{"class":2497},[2487,4859,2630],{"class":2493},[2487,4861,4862],{"class":2514},"offers:cache",[2487,4864,2630],{"class":2493},[2487,4866,2601],{"class":2493},[2487,4868,2719],{"class":2493},[2487,4870,2722],{"class":2501},[2487,4872,2450],{"class":2497},[2487,4874,4315],{"class":2493},[2487,4876,4877],{"class":2497},"))\n",[2487,4879,4880,4882,4885,4887,4889,4891,4893,4895,4897,4899,4902,4904,4906,4908,4911,4913,4915,4917,4919,4921,4923],{"class":2489,"line":2617},[2487,4881,3909],{"class":2501},[2487,4883,4884],{"class":2529}," inflight",[2487,4886,2818],{"class":2493},[2487,4888,4839],{"class":2535},[2487,4890,2494],{"class":2493},[2487,4892,4844],{"class":2557},[2487,4894,2494],{"class":2493},[2487,4896,2807],{"class":2557},[2487,4898,2601],{"class":2493},[2487,4900,4901],{"class":2557}," boolean",[2487,4903,4855],{"class":2493},[2487,4905,2539],{"class":2497},[2487,4907,2630],{"class":2493},[2487,4909,4910],{"class":2514},"offers:pending",[2487,4912,2630],{"class":2493},[2487,4914,2601],{"class":2493},[2487,4916,2719],{"class":2493},[2487,4918,2722],{"class":2501},[2487,4920,2450],{"class":2497},[2487,4922,4315],{"class":2493},[2487,4924,4877],{"class":2497},[2487,4926,4927],{"class":2489,"line":2636},[2487,4928,4929],{"class":2707},"  \u002F\u002F Ids whose fetch has finished (resolved or soft-failed). Until then a product\n",[2487,4931,4932],{"class":2489,"line":2652},[2487,4933,4934],{"class":2707},"  \u002F\u002F reads as \"pending\" so SSR and the first client render both show a skeleton.\n",[2487,4936,4937,4939,4942,4944,4946,4948,4950,4952,4954,4956,4958,4960,4962,4964,4967,4969,4971,4973,4975,4977,4979],{"class":2489,"line":2661},[2487,4938,3909],{"class":2501},[2487,4940,4941],{"class":2529}," attempted",[2487,4943,2818],{"class":2493},[2487,4945,4839],{"class":2535},[2487,4947,2494],{"class":2493},[2487,4949,4844],{"class":2557},[2487,4951,2494],{"class":2493},[2487,4953,2807],{"class":2557},[2487,4955,2601],{"class":2493},[2487,4957,4901],{"class":2557},[2487,4959,4855],{"class":2493},[2487,4961,2539],{"class":2497},[2487,4963,2630],{"class":2493},[2487,4965,4966],{"class":2514},"offers:attempted",[2487,4968,2630],{"class":2493},[2487,4970,2601],{"class":2493},[2487,4972,2719],{"class":2493},[2487,4974,2722],{"class":2501},[2487,4976,2450],{"class":2497},[2487,4978,4315],{"class":2493},[2487,4980,4877],{"class":2497},[2487,4982,4983],{"class":2489,"line":2668},[2487,4984,2665],{"emptyLinePlaceholder":2664},[2487,4986,4987,4990,4992,4995,4997,4999,5001,5003,5005,5007,5009,5011,5013,5015,5017,5019,5022,5025,5028,5030,5033,5035],{"class":2489,"line":2678},[2487,4988,4989],{"class":2501},"  async",[2487,4991,3876],{"class":2501},[2487,4993,4994],{"class":2535}," loadOffers",[2487,4996,2539],{"class":2493},[2487,4998,4068],{"class":3884},[2487,5000,2554],{"class":2493},[2487,5002,3551],{"class":2493},[2487,5004,3943],{"class":2497},[2487,5006,2554],{"class":2493},[2487,5008,2812],{"class":2557},[2487,5010,3950],{"class":2493},[2487,5012,3953],{"class":2497},[2487,5014,2567],{"class":2493},[2487,5016,2812],{"class":2557},[2487,5018,3315],{"class":2493},[2487,5020,5021],{"class":2497},"[]",[2487,5023,5024],{"class":2493},"):",[2487,5026,5027],{"class":2557}," Promise",[2487,5029,2494],{"class":2493},[2487,5031,5032],{"class":2557},"void",[2487,5034,2815],{"class":2493},[2487,5036,2604],{"class":2493},[2487,5038,5039],{"class":2489,"line":2694},[2487,5040,5041],{"class":2707},"    \u002F\u002F No-op on the server: the offer never blocks the first byte.\n",[2487,5043,5044,5047,5049,5051,5053,5056,5058,5061,5063],{"class":2489,"line":2704},[2487,5045,5046],{"class":2938},"    if",[2487,5048,2450],{"class":2497},[2487,5050,3545],{"class":2938},[2487,5052,2428],{"class":2493},[2487,5054,5055],{"class":2529},"meta",[2487,5057,2428],{"class":2493},[2487,5059,5060],{"class":2529},"server",[2487,5062,2962],{"class":2497},[2487,5064,5065],{"class":2938},"return\n",[2487,5067,5068],{"class":2489,"line":2711},[2487,5069,2665],{"emptyLinePlaceholder":2664},[2487,5071,5072,5075,5078,5080,5082,5084,5087],{"class":2489,"line":2729},[2487,5073,5074],{"class":2501},"    const",[2487,5076,5077],{"class":2529}," want",[2487,5079,2818],{"class":2493},[2487,5081,3936],{"class":2529},[2487,5083,2428],{"class":2493},[2487,5085,5086],{"class":2535},"filter",[2487,5088,3976],{"class":2497},[2487,5090,5091,5094,5096,5099,5101,5103,5106,5109,5111,5114,5116,5118,5120,5122,5124,5126,5128,5131,5133,5136,5138,5140,5142,5144,5146,5148,5150],{"class":2489,"line":2746},[2487,5092,5093],{"class":3884},"      item",[2487,5095,2722],{"class":2501},[2487,5097,5098],{"class":2529}," item",[2487,5100,4065],{"class":2493},[2487,5102,3467],{"class":2529},[2487,5104,5105],{"class":2493}," &&",[2487,5107,5108],{"class":2493}," !",[2487,5110,2539],{"class":2497},[2487,5112,5113],{"class":2529},"item",[2487,5115,2428],{"class":2493},[2487,5117,3467],{"class":2529},[2487,5119,2995],{"class":2493},[2487,5121,4834],{"class":2529},[2487,5123,2428],{"class":2493},[2487,5125,4062],{"class":2529},[2487,5127,2962],{"class":2497},[2487,5129,5130],{"class":2493},"&&",[2487,5132,5108],{"class":2493},[2487,5134,5135],{"class":2529},"inflight",[2487,5137,2428],{"class":2493},[2487,5139,4062],{"class":2529},[2487,5141,3006],{"class":2497},[2487,5143,5113],{"class":2529},[2487,5145,2428],{"class":2493},[2487,5147,3467],{"class":2529},[2487,5149,4786],{"class":2497},[2487,5151,2633],{"class":2493},[2487,5153,5154],{"class":2489,"line":2763},[2487,5155,5156],{"class":2497},"    )\n",[2487,5158,5159,5161,5163,5166,5169,5171,5174,5176],{"class":2489,"line":2774},[2487,5160,5046],{"class":2938},[2487,5162,2450],{"class":2497},[2487,5164,5165],{"class":2493},"!",[2487,5167,5168],{"class":2529},"want",[2487,5170,2428],{"class":2493},[2487,5172,5173],{"class":2529},"length",[2487,5175,2962],{"class":2497},[2487,5177,5065],{"class":2938},[2487,5179,5180],{"class":2489,"line":2780},[2487,5181,2665],{"emptyLinePlaceholder":2664},[2487,5183,5184,5187,5189,5191,5193,5195,5198,5200,5202,5204,5206,5208,5211,5213,5216,5218,5220,5222,5225,5227,5230,5232,5234,5236,5238,5240,5242,5246,5249],{"class":2489,"line":2787},[2487,5185,5186],{"class":2529},"    inflight",[2487,5188,2428],{"class":2493},[2487,5190,4062],{"class":2529},[2487,5192,2818],{"class":2493},[2487,5194,3551],{"class":2493},[2487,5196,5197],{"class":2493}," ...",[2487,5199,5135],{"class":2529},[2487,5201,2428],{"class":2493},[2487,5203,4062],{"class":2529},[2487,5205,2601],{"class":2493},[2487,5207,5197],{"class":2493},[2487,5209,5210],{"class":2529},"Object",[2487,5212,2428],{"class":2493},[2487,5214,5215],{"class":2535},"fromEntries",[2487,5217,2539],{"class":2497},[2487,5219,5168],{"class":2529},[2487,5221,2428],{"class":2493},[2487,5223,5224],{"class":2535},"map",[2487,5226,2539],{"class":2497},[2487,5228,5229],{"class":3884},"i",[2487,5231,2722],{"class":2501},[2487,5233,4776],{"class":2497},[2487,5235,5229],{"class":2529},[2487,5237,2428],{"class":2493},[2487,5239,3467],{"class":2529},[2487,5241,2601],{"class":2493},[2487,5243,5245],{"class":5244},"sfNiH"," true",[2487,5247,5248],{"class":2497},"])) ",[2487,5250,2894],{"class":2493},[2487,5252,5253,5256],{"class":2489,"line":2792},[2487,5254,5255],{"class":2938},"    try",[2487,5257,2604],{"class":2493},[2487,5259,5260,5263,5265,5268,5270,5272,5275,5278,5280,5282,5284,5286,5288,5290,5292,5294,5296,5298,5300,5302,5305,5307,5309],{"class":2489,"line":2823},[2487,5261,5262],{"class":2501},"      const",[2487,5264,3551],{"class":2493},[2487,5266,5267],{"class":2529}," offers",[2487,5269,3315],{"class":2493},[2487,5271,2818],{"class":2493},[2487,5273,5274],{"class":2938}," await",[2487,5276,5277],{"class":2535}," $fetch",[2487,5279,3239],{"class":2493},[2487,5281,5267],{"class":2497},[2487,5283,2554],{"class":2493},[2487,5285,2802],{"class":2557},[2487,5287,2494],{"class":2493},[2487,5289,2807],{"class":2557},[2487,5291,2601],{"class":2493},[2487,5293,4753],{"class":2557},[2487,5295,2815],{"class":2493},[2487,5297,3249],{"class":2493},[2487,5299,2539],{"class":2497},[2487,5301,2630],{"class":2493},[2487,5303,5304],{"class":2514},"\u002Fapi\u002Foffers",[2487,5306,2630],{"class":2493},[2487,5308,2601],{"class":2493},[2487,5310,2604],{"class":2493},[2487,5312,5313,5316,5318,5320,5323,5325],{"class":2489,"line":2840},[2487,5314,5315],{"class":2497},"        method",[2487,5317,2554],{"class":2493},[2487,5319,2624],{"class":2493},[2487,5321,5322],{"class":2514},"POST",[2487,5324,2630],{"class":2493},[2487,5326,2633],{"class":2493},[2487,5328,5329,5332,5334,5336,5338,5340,5342,5344,5346,5348,5350,5352,5354,5356,5358,5360,5363,5365,5367,5369,5371,5373,5375,5377,5380,5382,5385],{"class":2489,"line":2857},[2487,5330,5331],{"class":2497},"        body",[2487,5333,2554],{"class":2493},[2487,5335,3551],{"class":2493},[2487,5337,3936],{"class":2497},[2487,5339,2554],{"class":2493},[2487,5341,5077],{"class":2529},[2487,5343,2428],{"class":2493},[2487,5345,5224],{"class":2535},[2487,5347,2539],{"class":2497},[2487,5349,5229],{"class":3884},[2487,5351,2722],{"class":2501},[2487,5353,2450],{"class":2497},[2487,5355,3301],{"class":2493},[2487,5357,3943],{"class":2497},[2487,5359,2554],{"class":2493},[2487,5361,5362],{"class":2529}," i",[2487,5364,2428],{"class":2493},[2487,5366,3467],{"class":2529},[2487,5368,2601],{"class":2493},[2487,5370,3953],{"class":2497},[2487,5372,2554],{"class":2493},[2487,5374,5362],{"class":2529},[2487,5376,2428],{"class":2493},[2487,5378,5379],{"class":2529},"sku",[2487,5381,3315],{"class":2493},[2487,5383,5384],{"class":2497},")) ",[2487,5386,4033],{"class":2493},[2487,5388,5389,5392],{"class":2489,"line":2874},[2487,5390,5391],{"class":2493},"      }",[2487,5393,2658],{"class":2497},[2487,5395,5396,5399,5401,5403,5405,5407,5409,5412,5414,5416,5418,5420,5423],{"class":2489,"line":2891},[2487,5397,5398],{"class":2529},"      cache",[2487,5400,2428],{"class":2493},[2487,5402,4062],{"class":2529},[2487,5404,2818],{"class":2493},[2487,5406,3551],{"class":2493},[2487,5408,5197],{"class":2493},[2487,5410,5411],{"class":2529},"cache",[2487,5413,2428],{"class":2493},[2487,5415,4062],{"class":2529},[2487,5417,2601],{"class":2493},[2487,5419,5197],{"class":2493},[2487,5421,5422],{"class":2529},"offers",[2487,5424,3516],{"class":2493},[2487,5426,5427],{"class":2489,"line":2897},[2487,5428,5429],{"class":2493},"    }\n",[2487,5431,5432,5435],{"class":2489,"line":2902},[2487,5433,5434],{"class":2938},"    catch",[2487,5436,2604],{"class":2493},[2487,5438,5439],{"class":2489,"line":2935},[2487,5440,5441],{"class":2707},"      \u002F\u002F Soft failure: leave uncached so widgets render \"price on request\", never a price of zero.\n",[2487,5443,5444],{"class":2489,"line":2982},[2487,5445,5429],{"class":2493},[2487,5447,5448,5451],{"class":2489,"line":3023},[2487,5449,5450],{"class":2938},"    finally",[2487,5452,2604],{"class":2493},[2487,5454,5455,5457,5460,5462,5464,5466,5468,5470,5472],{"class":2489,"line":3031},[2487,5456,5262],{"class":2501},[2487,5458,5459],{"class":2529}," next",[2487,5461,2818],{"class":2493},[2487,5463,3551],{"class":2493},[2487,5465,5197],{"class":2493},[2487,5467,5135],{"class":2529},[2487,5469,2428],{"class":2493},[2487,5471,4062],{"class":2529},[2487,5473,3516],{"class":2493},[2487,5475,5476,5479,5481,5483,5485,5488,5490,5492,5495,5497,5499,5501,5503,5505],{"class":2489,"line":3038},[2487,5477,5478],{"class":2938},"      for",[2487,5480,2450],{"class":2497},[2487,5482,2526],{"class":2501},[2487,5484,5362],{"class":2529},[2487,5486,5487],{"class":2493}," of",[2487,5489,5077],{"class":2529},[2487,5491,2962],{"class":2497},[2487,5493,5494],{"class":2493},"delete",[2487,5496,5459],{"class":2529},[2487,5498,3006],{"class":2497},[2487,5500,5229],{"class":2529},[2487,5502,2428],{"class":2493},[2487,5504,3467],{"class":2529},[2487,5506,5507],{"class":2497},"]\n",[2487,5509,5510,5513,5515,5517,5519],{"class":2489,"line":3048},[2487,5511,5512],{"class":2529},"      inflight",[2487,5514,2428],{"class":2493},[2487,5516,4062],{"class":2529},[2487,5518,2818],{"class":2493},[2487,5520,5521],{"class":2529}," next\n",[2487,5523,5524,5527,5529,5531,5533,5535,5537,5540,5542,5544,5546,5548,5550,5552,5554,5556,5558,5560,5562,5564,5566,5568,5570,5572,5574,5576,5578,5580,5582],{"class":2489,"line":3053},[2487,5525,5526],{"class":2529},"      attempted",[2487,5528,2428],{"class":2493},[2487,5530,4062],{"class":2529},[2487,5532,2818],{"class":2493},[2487,5534,3551],{"class":2493},[2487,5536,5197],{"class":2493},[2487,5538,5539],{"class":2529},"attempted",[2487,5541,2428],{"class":2493},[2487,5543,4062],{"class":2529},[2487,5545,2601],{"class":2493},[2487,5547,5197],{"class":2493},[2487,5549,5210],{"class":2529},[2487,5551,2428],{"class":2493},[2487,5553,5215],{"class":2535},[2487,5555,2539],{"class":2497},[2487,5557,5168],{"class":2529},[2487,5559,2428],{"class":2493},[2487,5561,5224],{"class":2535},[2487,5563,2539],{"class":2497},[2487,5565,5229],{"class":3884},[2487,5567,2722],{"class":2501},[2487,5569,4776],{"class":2497},[2487,5571,5229],{"class":2529},[2487,5573,2428],{"class":2493},[2487,5575,3467],{"class":2529},[2487,5577,2601],{"class":2493},[2487,5579,5245],{"class":5244},[2487,5581,5248],{"class":2497},[2487,5583,2894],{"class":2493},[2487,5585,5586],{"class":2489,"line":3063},[2487,5587,5429],{"class":2493},[2487,5589,5590],{"class":2489,"line":3072},[2487,5591,3526],{"class":2493},[2487,5593,5594],{"class":2489,"line":3087},[2487,5595,2665],{"emptyLinePlaceholder":2664},[2487,5597,5598,5601,5604,5606,5609,5611,5614,5616,5618,5620],{"class":2489,"line":3102},[2487,5599,5600],{"class":2501},"  function",[2487,5602,5603],{"class":2535}," useOffer",[2487,5605,2539],{"class":2493},[2487,5607,5608],{"class":3884},"getId",[2487,5610,2554],{"class":2493},[2487,5612,5613],{"class":2557}," MaybeRefOrGetter",[2487,5615,2494],{"class":2493},[2487,5617,2807],{"class":2557},[2487,5619,3902],{"class":2493},[2487,5621,2604],{"class":2493},[2487,5623,5624,5626,5628,5630,5632,5634,5636,5638,5641,5643,5645],{"class":2489,"line":3108},[2487,5625,5074],{"class":2501},[2487,5627,3943],{"class":2529},[2487,5629,2818],{"class":2493},[2487,5631,2912],{"class":2535},[2487,5633,2539],{"class":2497},[2487,5635,2598],{"class":2493},[2487,5637,2722],{"class":2501},[2487,5639,5640],{"class":2535}," toValue",[2487,5642,2539],{"class":2497},[2487,5644,5608],{"class":2529},[2487,5646,4877],{"class":2497},[2487,5648,5649,5651,5654,5656,5658,5660,5662,5664,5666,5668,5670,5672,5674,5676,5678,5680,5682,5684,5686,5688],{"class":2489,"line":3128},[2487,5650,5074],{"class":2501},[2487,5652,5653],{"class":2529}," offer",[2487,5655,2818],{"class":2493},[2487,5657,2912],{"class":2535},[2487,5659,2494],{"class":2493},[2487,5661,3810],{"class":2557},[2487,5663,2919],{"class":2493},[2487,5665,3899],{"class":2557},[2487,5667,2815],{"class":2493},[2487,5669,2539],{"class":2497},[2487,5671,2598],{"class":2493},[2487,5673,2722],{"class":2501},[2487,5675,4834],{"class":2529},[2487,5677,2428],{"class":2493},[2487,5679,4062],{"class":2529},[2487,5681,3006],{"class":2497},[2487,5683,3467],{"class":2529},[2487,5685,2428],{"class":2493},[2487,5687,4062],{"class":2529},[2487,5689,5690],{"class":2497},"])\n",[2487,5692,5693],{"class":2489,"line":3170},[2487,5694,5695],{"class":2707},"    \u002F\u002F Default-pending so SSR and the first client render agree (no hydration flash).\n",[2487,5697,5698,5700,5703,5705,5707,5709,5711,5713,5715,5717,5719,5721,5723,5725,5727,5729,5731,5733,5735,5737,5739],{"class":2489,"line":3181},[2487,5699,5074],{"class":2501},[2487,5701,5702],{"class":2529}," pending",[2487,5704,2818],{"class":2493},[2487,5706,2912],{"class":2535},[2487,5708,2539],{"class":2497},[2487,5710,2598],{"class":2493},[2487,5712,2722],{"class":2501},[2487,5714,5108],{"class":2493},[2487,5716,4732],{"class":2529},[2487,5718,2428],{"class":2493},[2487,5720,4062],{"class":2529},[2487,5722,5105],{"class":2493},[2487,5724,5108],{"class":2493},[2487,5726,5539],{"class":2529},[2487,5728,2428],{"class":2493},[2487,5730,4062],{"class":2529},[2487,5732,3006],{"class":2497},[2487,5734,3467],{"class":2529},[2487,5736,2428],{"class":2493},[2487,5738,4062],{"class":2529},[2487,5740,5690],{"class":2497},[2487,5742,5744,5747,5749,5751,5753,5755],{"class":2489,"line":5743},47,[2487,5745,5746],{"class":2938},"    return",[2487,5748,3551],{"class":2493},[2487,5750,5653],{"class":2529},[2487,5752,2601],{"class":2493},[2487,5754,5702],{"class":2529},[2487,5756,3516],{"class":2493},[2487,5758,5760],{"class":2489,"line":5759},48,[2487,5761,3526],{"class":2493},[2487,5763,5765],{"class":2489,"line":5764},49,[2487,5766,2665],{"emptyLinePlaceholder":2664},[2487,5768,5770,5772,5774,5776,5778,5780],{"class":2489,"line":5769},50,[2487,5771,3026],{"class":2938},[2487,5773,3551],{"class":2493},[2487,5775,4994],{"class":2529},[2487,5777,2601],{"class":2493},[2487,5779,5603],{"class":2529},[2487,5781,3516],{"class":2493},[2487,5783,5785],{"class":2489,"line":5784},51,[2487,5786,2894],{"class":2493},[2405,5788,5789,5790,5793],{},"Trigger one ",[2417,5791,5792],{},"loadOffers"," for the visible products — once per page, never one request per card:",[2477,5795,5798],{"className":2479,"code":5796,"filename":5797,"language":2482,"meta":2483,"style":2483},"\u003Cscript setup lang=\"ts\">\nconst { loadOffers } = useOffers()\n\n\u002F\u002F Batch the visible products into a single offer request after they're known.\nwatch(visible, (list) => {\n  if (list.length) void loadOffers(list)\n}, { immediate: true })\n\u003C\u002Fscript>\n","In the product grid block",[2417,5799,5800,5820,5837,5841,5846,5867,5891,5909],{"__ignoreMap":2483},[2487,5801,5802,5804,5806,5808,5810,5812,5814,5816,5818],{"class":2489,"line":2490},[2487,5803,2494],{"class":2493},[2487,5805,2498],{"class":2497},[2487,5807,2502],{"class":2501},[2487,5809,2505],{"class":2501},[2487,5811,2508],{"class":2493},[2487,5813,2511],{"class":2493},[2487,5815,2515],{"class":2514},[2487,5817,2511],{"class":2493},[2487,5819,2520],{"class":2493},[2487,5821,5822,5824,5826,5829,5831,5833,5835],{"class":2489,"line":2523},[2487,5823,2526],{"class":2501},[2487,5825,3551],{"class":2493},[2487,5827,5828],{"class":2529}," loadOffers ",[2487,5830,2655],{"class":2493},[2487,5832,2818],{"class":2493},[2487,5834,4823],{"class":2535},[2487,5836,3252],{"class":2529},[2487,5838,5839],{"class":2489,"line":2548},[2487,5840,2665],{"emptyLinePlaceholder":2664},[2487,5842,5843],{"class":2489,"line":2561},[2487,5844,5845],{"class":2707},"\u002F\u002F Batch the visible products into a single offer request after they're known.\n",[2487,5847,5848,5851,5854,5856,5858,5861,5863,5865],{"class":2489,"line":2572},[2487,5849,5850],{"class":2535},"watch",[2487,5852,5853],{"class":2529},"(visible",[2487,5855,2601],{"class":2493},[2487,5857,2450],{"class":2493},[2487,5859,5860],{"class":3884},"list",[2487,5862,2769],{"class":2493},[2487,5864,2722],{"class":2501},[2487,5866,2604],{"class":2493},[2487,5868,5869,5871,5873,5875,5877,5879,5881,5883,5885,5887,5889],{"class":2489,"line":2582},[2487,5870,2939],{"class":2938},[2487,5872,2450],{"class":2497},[2487,5874,5860],{"class":2529},[2487,5876,2428],{"class":2493},[2487,5878,5173],{"class":2529},[2487,5880,2962],{"class":2497},[2487,5882,5032],{"class":2493},[2487,5884,4994],{"class":2535},[2487,5886,2539],{"class":2497},[2487,5888,5860],{"class":2529},[2487,5890,2658],{"class":2497},[2487,5892,5893,5896,5898,5901,5903,5905,5907],{"class":2489,"line":2592},[2487,5894,5895],{"class":2493},"},",[2487,5897,3551],{"class":2493},[2487,5899,5900],{"class":2497}," immediate",[2487,5902,2554],{"class":2493},[2487,5904,5245],{"class":5244},[2487,5906,3315],{"class":2493},[2487,5908,2658],{"class":2529},[2487,5910,5911,5913,5915],{"class":2489,"line":2607},[2487,5912,3041],{"class":2493},[2487,5914,2498],{"class":2497},[2487,5916,2520],{"class":2493},[2405,5918,5919],{},"The price widget on each card reads the shared cache and shows a skeleton while pending:",[2477,5921,5924],{"className":2479,"code":5922,"filename":5923,"language":2482,"meta":2483,"style":2483},"\u003Cscript setup lang=\"ts\">\nconst props = defineProps\u003C{ productId: string }>()\nconst { useOffer } = useOffers()\nconst { offer, pending } = useOffer(() => props.productId)\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cspan v-if=\"pending\" class=\"price-skeleton\" aria-hidden=\"true\" \u002F>\n  \u003Cspan v-else-if=\"offer\">{{ formatPrice(offer.prices) }}\u003C\u002Fspan>\n  \u003Cspan v-else class=\"price-on-request\">Price on request\u003C\u002Fspan>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002FProductPrice.vue",[2417,5925,5926,5946,5970,5987,6019,6027,6031,6039,6081,6108,6138],{"__ignoreMap":2483},[2487,5927,5928,5930,5932,5934,5936,5938,5940,5942,5944],{"class":2489,"line":2490},[2487,5929,2494],{"class":2493},[2487,5931,2498],{"class":2497},[2487,5933,2502],{"class":2501},[2487,5935,2505],{"class":2501},[2487,5937,2508],{"class":2493},[2487,5939,2511],{"class":2493},[2487,5941,2515],{"class":2514},[2487,5943,2511],{"class":2493},[2487,5945,2520],{"class":2493},[2487,5947,5948,5950,5952,5954,5957,5959,5962,5964,5966,5968],{"class":2489,"line":2523},[2487,5949,2526],{"class":2501},[2487,5951,2530],{"class":2529},[2487,5953,2508],{"class":2493},[2487,5955,5956],{"class":2535}," defineProps",[2487,5958,3239],{"class":2493},[2487,5960,5961],{"class":2497}," productId",[2487,5963,2554],{"class":2493},[2487,5965,2812],{"class":2557},[2487,5967,3249],{"class":2493},[2487,5969,3252],{"class":2529},[2487,5971,5972,5974,5976,5979,5981,5983,5985],{"class":2489,"line":2548},[2487,5973,2526],{"class":2501},[2487,5975,3551],{"class":2493},[2487,5977,5978],{"class":2529}," useOffer ",[2487,5980,2655],{"class":2493},[2487,5982,2818],{"class":2493},[2487,5984,4823],{"class":2535},[2487,5986,3252],{"class":2529},[2487,5988,5989,5991,5993,5995,5997,6000,6002,6004,6006,6008,6010,6012,6014,6016],{"class":2489,"line":2561},[2487,5990,2526],{"class":2501},[2487,5992,3551],{"class":2493},[2487,5994,5653],{"class":2529},[2487,5996,2601],{"class":2493},[2487,5998,5999],{"class":2529}," pending ",[2487,6001,2655],{"class":2493},[2487,6003,2818],{"class":2493},[2487,6005,5603],{"class":2535},[2487,6007,2539],{"class":2529},[2487,6009,2598],{"class":2493},[2487,6011,2722],{"class":2501},[2487,6013,2968],{"class":2529},[2487,6015,2428],{"class":2493},[2487,6017,6018],{"class":2529},"productId)\n",[2487,6020,6021,6023,6025],{"class":2489,"line":2572},[2487,6022,3041],{"class":2493},[2487,6024,2498],{"class":2497},[2487,6026,2520],{"class":2493},[2487,6028,6029],{"class":2489,"line":2582},[2487,6030,2665],{"emptyLinePlaceholder":2664},[2487,6032,6033,6035,6037],{"class":2489,"line":2592},[2487,6034,2494],{"class":2493},[2487,6036,3058],{"class":2497},[2487,6038,2520],{"class":2493},[2487,6040,6041,6043,6045,6047,6049,6051,6054,6056,6058,6060,6062,6065,6067,6070,6072,6074,6077,6079],{"class":2489,"line":2607},[2487,6042,3066],{"class":2493},[2487,6044,2487],{"class":2497},[2487,6046,3135],{"class":2501},[2487,6048,2508],{"class":2493},[2487,6050,2511],{"class":2493},[2487,6052,6053],{"class":2514},"pending",[2487,6055,2511],{"class":2493},[2487,6057,3147],{"class":2501},[2487,6059,2508],{"class":2493},[2487,6061,2511],{"class":2493},[2487,6063,6064],{"class":2514},"price-skeleton",[2487,6066,2511],{"class":2493},[2487,6068,6069],{"class":2501}," aria-hidden",[2487,6071,2508],{"class":2493},[2487,6073,2511],{"class":2493},[2487,6075,6076],{"class":2514},"true",[2487,6078,2511],{"class":2493},[2487,6080,4565],{"class":2493},[2487,6082,6083,6085,6087,6089,6091,6093,6095,6097,6099,6102,6104,6106],{"class":2489,"line":2617},[2487,6084,3066],{"class":2493},[2487,6086,2487],{"class":2497},[2487,6088,4574],{"class":2501},[2487,6090,2508],{"class":2493},[2487,6092,2511],{"class":2493},[2487,6094,4732],{"class":2514},[2487,6096,2511],{"class":2493},[2487,6098,2815],{"class":2493},[2487,6100,6101],{"class":2529},"{{ formatPrice(offer.prices) }}",[2487,6103,3041],{"class":2493},[2487,6105,2487],{"class":2497},[2487,6107,2520],{"class":2493},[2487,6109,6110,6112,6114,6116,6118,6120,6122,6125,6127,6129,6132,6134,6136],{"class":2489,"line":2636},[2487,6111,3066],{"class":2493},[2487,6113,2487],{"class":2497},[2487,6115,4636],{"class":2501},[2487,6117,3147],{"class":2501},[2487,6119,2508],{"class":2493},[2487,6121,2511],{"class":2493},[2487,6123,6124],{"class":2514},"price-on-request",[2487,6126,2511],{"class":2493},[2487,6128,2815],{"class":2493},[2487,6130,6131],{"class":2529},"Price on request",[2487,6133,3041],{"class":2493},[2487,6135,2487],{"class":2497},[2487,6137,2520],{"class":2493},[2487,6139,6140,6142,6144],{"class":2489,"line":2652},[2487,6141,3041],{"class":2493},[2487,6143,3058],{"class":2497},[2487,6145,2520],{"class":2493},[2405,6147,6148],{},"The skeleton is the default state, not the empty state — that way the server and the first client render produce the same markup, so there's no hydration mismatch and no flash of \"price on request\".",[2430,6150,6152],{"id":6151},"rules-that-keep-blocks-fast","Rules that keep blocks fast",[6154,6155,6156,6163,6169,6175,6181],"ul",{},[6157,6158,6159,6162],"li",{},[2412,6160,6161],{},"Catalog in SSR, offer deferred."," Never fetch price or stock inside the catalog response just because it's convenient — it re-welds the boundary that keeps the catalog cacheable.",[6157,6164,6165,6168],{},[2412,6166,6167],{},"One offer request per page."," Batch the visible items; don't fire one request per card.",[6157,6170,6171,6174],{},[2412,6172,6173],{},"Skeleton by default."," A deferred value is unknown during SSR. Render the skeleton, not the empty state, so SSR and the first client render agree.",[6157,6176,6177,6180],{},[2412,6178,6179],{},"Soft-fail resolves the skeleton."," A failed offer fetch should fall back to \"price on request\", never spin forever and never render a price of zero.",[6157,6182,6183,6186],{},[2412,6184,6185],{},"Read the tenant per request."," Server-side routes use the per-request tenant context. Never cache one tenant's catalog under a key that another tenant can read.",[2430,6188,6190],{"id":6189},"troubleshooting","Troubleshooting",[6154,6192,6193,6204,6212],{},[6157,6194,6195,6198,6199,3698,6201,6203],{},[2412,6196,6197],{},"Block renders as \"unknown\"."," The manifest ",[2417,6200,3467],{},[2417,6202,2442],{},", and the key in your block map don't match. Align all three.",[6157,6205,6206,6209,6210,2428],{},[2412,6207,6208],{},"Prices flash on load."," Your price widget defaults to the empty state instead of the skeleton, so the client render differs from SSR. Make the skeleton the default while ",[2417,6211,6053],{},[6157,6213,6214,6217,6218,2428],{},[2412,6215,6216],{},"The grid waits on prices."," The catalog fetch is pulling price data. Split it: catalog in SSR, offer deferred via ",[2417,6219,4736],{},[2430,6221,6223],{"id":6222},"where-to-go-next","Where to go next",[6154,6225,6226,6233,6243],{},[6157,6227,6228,6232],{},[2412,6229,6230],{},[2426,6231,399],{"href":400}," — brand your blocks per tenant with CSS custom properties.",[6157,6234,6235,6239,6240,2428],{},[2412,6236,6237],{},[2426,6238,2040],{"href":2041}," — ship the Theme with its new blocks; a new block needs a new ",[2417,6241,6242],{},"version",[6157,6244,6245,6246,2428],{},"Reference: ",[2426,6247,6248],{"href":1791},"Blökkli blocks",[6250,6251,6252],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":2483,"searchDepth":2523,"depth":2523,"links":6254},[6255,6256,6257,6258,6263,6264,6265],{"id":2432,"depth":2523,"text":1790},{"id":2471,"depth":2523,"text":2472},{"id":3404,"depth":2523,"text":3405},{"id":3718,"depth":2523,"text":3719,"children":6259},[6260,6261,6262],{"id":3730,"depth":2548,"text":3731},{"id":4103,"depth":2548,"text":4104},{"id":4725,"depth":2548,"text":4726},{"id":6151,"depth":2523,"text":6152},{"id":6189,"depth":2523,"text":6190},{"id":6222,"depth":2523,"text":6223},"Write a Blökkli block as a Vue component, register it in the manifest, and connect a block to live catalog data the shell-first way.","md",null,{},{"icon":411},{"title":406,"description":6266},{"loc":407},"4ZU0XSSQerO3SmQJXaV_h_k7sosI2JiJBYF5ba1xQK4",1792158127148]